<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>48302</bug_id>
          
          <creation_ts>2002-09-26 09:32:42 +0000</creation_ts>
          <short_desc>khtml support for designMode and contenteditable=true</short_desc>
          <delta_ts>2024-05-06 18:39:50 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>2</classification_id>
          <classification>Applications</classification>
          <product>konqueror</product>
          <component>khtml</component>
          <version>4.0</version>
          <rep_platform>openSUSE</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>UNMAINTAINED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>wishlist</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Hochsteger">andreas.hochsteger</reporter>
          <assigned_to name="Konqueror Bugs">konqueror-bugs-null</assigned_to>
          <cc>andrew.dorrell</cc>
    
    <cc>bartml</cc>
    
    <cc>cberzan</cc>
    
    <cc>cedric</cc>
    
    <cc>finex</cc>
    
    <cc>fuck</cc>
    
    <cc>germain</cc>
    
    <cc>geroxp</cc>
    
    <cc>ilya.hegai</cc>
    
    <cc>ingmars</cc>
    
    <cc>kae</cc>
    
    <cc>landrews</cc>
    
    <cc>ndeschildre</cc>
    
    <cc>pablopedroescobar</cc>
    
    <cc>pivo</cc>
    
    <cc>r.bauer</cc>
    
    <cc>r.pollesch</cc>
    
    <cc>rdm</cc>
    
    <cc>schroeder</cc>
    
    <cc>vedran.vucic</cc>
    
    <cc>zayed.alsaidi</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>955</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95968</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Hochsteger">andreas.hochsteger</who>
    <bug_when>2002-09-26 09:32:42 +0000</bug_when>
    <thetext>Version:           4.0 (using KDE 3.0.3)
Installed from:    SuSE
Compiler:          gcc version 2.95.3 20010315 (SuSE)
OS:          Linux (i686) release 2.4.18-4GB

More and more Content Management Systems are using WYSIWYG XML editors like Xopus [1] or Bitflux Editor [2]. To use them, the browser must support to type directly into the displayed page. To enable this, usually you can set the attribute contenteditable=true for a certain tag.
Mozilla didn&apos;t support this directly, but there exists a workaround [3] which uses the caret browsing mode of Mozilla (F7), which turns on a cursor, with which you can navigate through the page.

It would sure be of great publicity too, if you could show off a WYSIWYG XML editor running in konqueror and serving powerful XML Content Management Systems (e.g. Wyona [4]).

Imagine using those XML editors, to write KDE (DocBook) documentation or edit other KDE-related XML files whith an easy to use XML editor ;-)

References:
[1] http://xopus.org/
[2] http://www.bitflux.ch/editor/
[3] http://xopus.org/index.jsp?menu=mozce
[4] http://www.wyona.org/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137378</commentid>
    <comment_count>1</comment_count>
    <who name="Vedran Ljubovic">vljubovic</who>
    <bug_when>2003-06-03 19:26:51 +0000</bug_when>
    <thetext>I&apos;d like to suggest instead implementing designMode property. This property is 
implemented in Mozilla since 1.3: 
http://devedge.netscape.com/viewsource/2003/midas/01/ 
Therefore I believe that serious CMS applications will use designMode. 
On the above URL you can find specifics on Mozilla&apos;s implementation compared to 
IE implementation. You can also find some free &quot;cross-browser&quot; scripts. IE supports 
this property since 5.5. 
 
I believe designMode can be implemented using kafka part (Quanta&apos;s WYSIWYG 
mode). </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137575</commentid>
    <comment_count>2</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-06-04 16:28:41 +0000</bug_when>
    <thetext>Why &quot;instead&quot;? contenteditable is but a subset of the designMode property. If   
konq supports designMode, contenteditable should not be too much work to be   
implemented.   
  
After all, CCing Nicolas to indicate the existance of this bug.  
  
Nicolas: Is there any attempt to create a general subset of functionality that 
accomodates the implementation of kafka as well as the implementation of 
designMode/contenteditable? </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137602</commentid>
    <comment_count>3</comment_count>
    <who name="Nicolas Deschildre">ndeschildre</who>
    <bug_when>2003-06-04 18:25:58 +0000</bug_when>
    <thetext>Currently, all the things done to make a cursor appears as well as some basic
editing functionnalities have been done &quot;outside&quot; khtml i.e. a derivated class
from khtml implements the editing functionnalities.
Much of this was possible thanks to the tag definitions of Quanta, where i have
added some editing properties for each Tag, e.g. if it can have the cursor focus
and where, and if the cursor can &quot;enter&quot; inside the tag, and thanks to some
khtml public functions e.g. DOM::Node::GetCursor() and DOM::Node::getRect().
But this implementation has some limits : cursor position sometimes have to be
guessed and thus not always right, and sometimes khtml returns the wrong cursor
position. See http://bugs.kde.org/show_bug.cgi?id=56339
I haven&apos;t considered this solution because first it was too hard for me alone to
add such editing capabilities to khtml, and then because i have never heard of
designMode before :)
But if someone implements DesignMode (only the cursor, selection, basic cursor
navigation and backspace/delete support), i would be very grateful to him as it
will be a solution of many of my editing problems, and i imagine the kmail guys
would be happy to add the creation of HTML messages support!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137842</commentid>
    <comment_count>4</comment_count>
    <who name="Nicolas Deschildre">ndeschildre</who>
    <bug_when>2003-06-05 18:30:06 +0000</bug_when>
    <thetext>I will even add that i would be ready to help to add DesignMode support to khtml as the 
kafka part integration into quanta will be soon finished, but can you specify me some 
details about designMode (where is it defined? I didn&apos;t find it in the W3C 
recommandations). </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138065</commentid>
    <comment_count>5</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-06-06 20:32:35 +0000</bug_when>
    <thetext>Rich text editing of web pages is purely nonstandard stuff so far. So there&apos;s  
no submission to any standards body (yet). The features of rich text editing  
are defined mainly by the following sources: 
Internet Explorer&apos;s contenteditable [1], IE designMode [2] 
and the editing APIs [3]. 
  
Mozilla also supports designMode by the Midas project [4]. 
Midas is more powerful than IE&apos;s designMode. The only thing moz still lacks is  
contenteditable which this bug is all about.  
  
I&apos;d like to make the following proposals for a designMode/contenteditable  
implementation:  
  
- support designMode as of Midas spec.  
- support contenteditable, but as css:  
	-konq-user-editable: { true | false } | inherit  
where inherit is default.  
contenteditable is then emulated by simple rules in khtml.css:  
	*[contenteditable=&quot;true&quot;] { -konq-user-editable: true }  
	*[contenteditable] { -konq-user-editable: false }  
	*[contenteditable=&quot;inherit&quot;] { -konq-user-editable: inherit }  
  
Furthermore I think that konq should *not* support the IE API [3] but fully 
rely upon the DOM2-Range [5] standard for content manipulation. However, I 
don&apos;t know whether konq features a useable (and fast) DOM2-Range 
implementation. 
 
Those are merely some suggestions. I&apos;d really like to become involved with the 
implementation of rich text editing, but I&apos;m overburdened now and cannot do any 
development work before late July. If you could give the implementation a start 
before that date I&apos;d be happy. 
 
References: 
[1]http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/contenteditable.asp  
[2]http://msdn.microsoft.com/workshop/Author/dhtml/reference/properties/designMode.asp  
[3]http://msdn.microsoft.com/workshop/browser/mshtml/overview/intromarkupsvc.asp 
[4]http://mozilla.org/editor/midas-spec.html  
[5]http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/ranges.html </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145274</commentid>
    <comment_count>6</comment_count>
    <who name="Jan Ulrich Hasecke">janulrich.hasecke</who>
    <bug_when>2003-07-11 15:23:25 +0000</bug_when>
    <thetext>I am using Zope/CMF/Plone as CMS and there are several rich text editors. One 
is called Epoz and works with mozilla and ie. I does not really like mozilla 
but this is a nice feature. As I have heard it is based on midas: 
 
http://www.mozilla.org/editor/midas-spec.html 
 
I would be happy if I could use konqueror when editing my sites. Konqueror is 
marvelous! 
 
Thanks! </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145278</commentid>
    <comment_count>7</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-07-11 15:40:54 +0000</bug_when>
    <thetext>I&apos;m going to work on it this summer.  
  
Changing title to reflect what I&apos;m really going to do (removing XML editor 
because designMode is restricted to html only; luckily khtml is a css based 
renderer so it can be extended to generic xml one day, too). 
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146551</commentid>
    <comment_count>8</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-07-18 21:21:29 +0000</bug_when>
    <thetext>Now I&apos;m really working on it. 
 
Taking. 
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147498</commentid>
    <comment_count>9</comment_count>
      <attachid>2053</attachid>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-07-23 23:41:22 +0000</bug_when>
    <thetext>Created attachment 2053
proposed WebCore merges and some utilities

A patch that contains the merges from WebCore and small additions I&apos;ll need for
caret navigation. 

This is only for review, *not* for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150215</commentid>
    <comment_count>10</comment_count>
      <attachid>2161</attachid>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-08-05 21:40:12 +0000</bug_when>
    <thetext>Created attachment 2161
proposed big WebCore merges and some utilities

Much bigger merges that incorporate and make persistant the InlineFlowBox
information from WebCore, but least invasive to the existing code.

This patch also contains all changes from the last patch (attachment 2053),
thus obsoleting it.

This is only for review, *not* for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151002</commentid>
    <comment_count>11</comment_count>
      <attachid>2191</attachid>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-08-09 04:50:09 +0000</bug_when>
    <thetext>Created attachment 2191
very very very very initial caret navigation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151007</commentid>
    <comment_count>12</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-08-09 05:11:48 +0000</bug_when>
    <thetext>Subject: [patch] very very very very initial caret navigation

With this huge patch, khtml gets a caret mode (like mozilla&apos;s caret mode), 
however, it cannot be activated by gui actions. It compiles against the 
latest CVS (as of 2003-08-09, 4:50 CET DST).

Beware, it is really restricted. Nearly nothing is implemented except very 
basic keyboard navigation. And it&apos;s not even working correctly for 
appearently primitive cases (but they aren&apos;t if you&apos;ve seen the 
implementation details)

The reason I&apos;m posting this is to enable the khtml developers to get an idea 
what I&apos;m doing, so please review and comment on the changes.

The next steps are:
1a make caret navigation not suck.
1b make selections cooperate with navigation.
2. implement basic editing.
3. implement drag&amp;drop.
4. implement and fix stuff I&apos;ve forgotten in the first iterations.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153010</commentid>
    <comment_count>13</comment_count>
      <attachid>2269</attachid>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-08-18 23:55:05 +0000</bug_when>
    <thetext>Created attachment 2269
quite complete caret navigation

Caret Navigation
=============================

Caret navigation is quite complete now in terms of what the user expects. A fat
explanation for a fat patch.


Overview
-----------------------------

The patch provides the following functionality:
- Activating the caret/updating the caret on relayout
- Keyboard Navigation. All common keys should work as expected, also in
combination with shift to select text.
- Placing the caret by mouse.

There&apos;s still no means to activate caret mode by GUI, but I think I&apos;ll add an
action soon so that independent people can test it.

All caret related changes are encapsuled in
#ifndef KHTML_NO_CARET
#endif
blocks. Defining this will simply not compile caret mode in (however, I haven&apos;t
yet tested it).


Detailed Changes
-----------------------------

A detailed explanation of the changes follows:
In khtml_part:
- new property editable. Toggles whole document editable (when it&apos;s
implemented)
- new property caretMode. Toggles caret mode.
- new signal caretPositionChanged.
- Matt Newell&apos;s optimization patch for node order determination
- trivia: replaced replace(QRegExp, QString) by replace(QChar, QChar), fixed
typos

In khtmlview:
- main part of caret navigation logic. See architecture.

In testkhtml:
- Added two buttons to toggle editable, caret Mode.

In css/:
- Added new property -konq-user-input: [ enable | disable | none ]

In dom/dom_doc:
- Added property designMode. Functionally equivalent to KHTMLPart::editable.

In dom/dom_element:
- Added property contentEditable. It&apos;s a shortcut for inquiring this element&apos;s
-konq-user-input value

In dom/dom_node:
- getCursor is deprecated without replacement (If anybody needs this, please
yell).

In html/:
- changed maximum length of attribute names from 14 to 20 (contenteditable is
15, and it took me quite a long time to find out why khtml hadn&apos;t recognized
it)
 
In rendering/Makefile.am:
- activated compilation of render_line.cpp

In rendering/bidi:
- merged the Inline*Box changes from Safari in the least intrusive way.

In rendering/font:
- added comments
- added getters for letter spacing and word spacing

In rendering/render_box:
- updated position method
- added caretPos method

In rendering/render_br:
- simplified caretPos implementation (will vanish in a later rev.)

In rendering/render_flow:
- ported over API for line traversal from Safari.
- added special caretPos method.

In rendering/render_image:
- added caretPos method (will vanish in a later rev.)

In rendering/render_line:
- ported from Safari, made compilable.
- added InlineBox::minOffset, InlineBox::maxOffset
- const&apos;ed methods that obviously should be const but weren&apos;t

In rendering/render_object:
- ported from Safari: createInlineBox, modified position
- renamed cursorPos to caretPos, and extended parameters
- new methods minOffset, maxOffset

In rendering/render_style:
- added inheritable property EUserInput, accessor RenderStyle::userInput

In rendering/render_text:
- derived TextSlave from InlineBox, and renamed it to InlineTextBox
- made InlineTextBox::checkSelectionPoint correctly handle justified text
- added InlineTextBox::offsetForPoint, finds approximate offset to given
x-coordinate
- added method InlineTextBox::width, which also treats justified text
correctly.
- renamed findTextSlave to findInlineTextBox and fixed it for rare cases when
it would find the wrong text box.
- renamed deleteTextSlaves to deleteTextBoxes

In xml/:
- implementations of the changes in dom/
- NodeImpl: added prevLeafNode, nextLeafNode, minOffset, maxOffset


Architecture
-----------------------------

For navigation purposes, the whole document is treated as a linear list of
lines. Each line itself is composed of one to many inline boxes containing the
actual characters/objects.

As SGML-documents are represented by trees, the line representation is created
ad hoc by the aid of several classes.

LinearDocument:
Represents the whole document as a linear list of lines. It has iterators to
the first line, last line, beginning (before first line), and end (beyond last
line) documents and tries to somewhat resemble STL semantics.

LineIterator:
Iterates through the lines of a LinearDocument object.

EditableLineIterator:
As not every line is necessarily editable, this iterator only delivers those
lines which are deemed to be editable/navigable. Works otherwise just like
LineIterator and is comparable to it.

InlineBoxIterator:
Iterates through the inline boxes of a line.

EditableInlineBoxIterator:
Analogically to EditableLineIterator, this iterator only regards those boxes
that are editable/navigable.

EditableCharacterIterator:
This iterator iterates through all leaf-node characters of the document,
effectively treating it as a linear stream. Non-character elements are treated
as whitespaces.

Btw, these classes are *private*. And it will stay that way. I have yet to come
up with a sensible persistent public API for customizing navigation, but that&apos;s
far into the future. The explanations are here for the people who review the
patch (which will be as many as for my last patch, that is: zero ;-) ).


Known Bugs
-----------------------------

Though the suck factor of navigation has become very low, there are still the
following known bugs (to the hundreds of not yet known):
- caret placement by mouse doesn&apos;t work reliably.
- movement through tables doesn&apos;t work as expected.
- movement through invisible elements is possible (that looks so stupid, you
can&apos;t imagine)
- when caret mode is initially activated, the caret does sometimes not move on
the first keypress.


Regressions
-----------------------------

None that I know of.
During the development I had some crashes in the new code, but I think I sorted
them all out. There were *no* crashes in the old code ever, so everything not
relying on navigation should continue working reliably.


Missing Features
-----------------------------

- Editing capabilities.
- Drag &amp; drop.


Fixed Bug
-----------------------------

In the course of implementation I had to fix some bugs which were tolerable for
a read-only browser, but are inacceptable for caret navigation:

#46224 and dupes (but not #50683, must be investigated separately): x-range
mismatches with justified text</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153053</commentid>
    <comment_count>14</comment_count>
    <who name="Andreas Hochsteger">andreas.hochsteger</who>
    <bug_when>2003-08-19 06:58:34 +0000</bug_when>
    <thetext>Subject: Re:  khtml support for designMode and contenteditable=true

Leo Savernik wrote:

&gt; Btw, these classes are *private*. And it will stay that way. I have yet to come
&gt; up with a sensible persistent public API for customizing navigation, but that&apos;s
&gt; far into the future. The explanations are here for the people who review the
&gt; patch (which will be as many as for my last patch, that is: zero ;-) ).

Leo, I have to tell you, that I read all your messages concerning this 
bug and I&apos;m looking forward to use things like Xopus or bitflux within 
KDE. Unfortunately I don&apos;t have the time to test the patch myself :-(

So don&apos;t be discouraged, if nobody has the time to review your patch.

I&apos;d suggest that you - when it&apos;s possible to activate it with an action 
- put it into CVS (if possible without #ifdefs). Then it&apos;s much easier 
to test and you might get more feedback.
Just my 2 Euro-Cents ;-)

Keep up that good work!


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153091</commentid>
    <comment_count>15</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-08-19 11:50:38 +0000</bug_when>
    <thetext>Hello Andi,  
  
I sent the same message to kfm-devel. The part with the reviewers wasn&apos;t  
intended to be posted here, but by the time I finished the posting, I had  
already forgotten about it ;-)  
  
For clarification, the patch is meant for a formal review by the khtml core  
developers, not for a functional review by anybody else. I will commit it to  
CVS by the end of this week *at the latest*, then everybody can try the changes  
by updating khtml from CVS head without the hassle of patching anything.  
  
Because you mentioned the ifdefs, they have to be explicitly defined to *not*  
compile the caret stuff. So by default you get full functionality, and I think  
that&apos;s what everybody expects.  
  
Regarding xopus.org, this seems to be an IE thingy only. The page is totally 
distorted in konqueror, and hardly useable in Mozilla. I&apos;ll never strive for 
100% IE compliance (simply impossible), so I wouldn&apos;t count on xopus ever 
working with khtml. 
 
After all, I took me much longer to implement caret navigation than I 
anticipated (and it ain&apos;t finished yet). However, I attach importance to a 
seamless, mostly bug-free, least-sucking implementation (remember caret mode of 
Mozilla 1.0, anybody? That&apos;s the way *not* to do it). 
 
Then, by 1st Sept., feature freeze hits. I&apos;ll still continue work until beta 1 
(by 29th Sept.), and guessing from the prior advance I know that it won&apos;t be 
remotely ready for KDE 3.2, mostly for two causes: (1) Beta 1 forbids feature 
commits, (2) holydays are over, real life hits back. So I have yet to see in 
which shape the implementation will be left at the end of September, to decide 
what to do. I *will* implement it, but it takes time. Don&apos;t hold your breath 
yet. 
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153506</commentid>
    <comment_count>16</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-08-22 02:07:24 +0000</bug_when>
    <thetext>Subject: Re: [Patch] quite complete caret navigation -- committed

Am Dienstag, 19. August 2003 00:00 schrieb Leo Savernik:
&gt; Caret Navigation
[...]

I promised to commit it. Now I&apos;ve done it.

The main difference between the posted patch and the commit is the 
implementation of sensible navigation through tables.

Caret mode is not yet accessible by GUI/accel in konqueror, so you have to use 
testkhtml.

I tested caret mode on three real-world pages:
http://heise.de/
http://kde.org/
http://linuxtoday.com/

It works best on kde.org (mostly because that&apos;s the only well-formed page in 
the test). There are some severe navigation problems on linuxtoday.com. I&apos;m 
perfectly confident that many other real-world pages will exhibit strange 
bugs, too.

If you test it, only report crashes, *no* other bugs because they are yet too 
easy to discover for now.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223987</commentid>
    <comment_count>17</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2004-04-15 13:53:18 +0000</bug_when>
    <thetext>CVS commit by savernik: 

Caret Navigation II
=============================

This is a tremendously enhanced version of the caret mode, building upon the latest merges from the WebCore render_line implementation.

Overview
-----------------------------

The caret position now strictly adheres to the DOM Range specification. Therefore, it is now possible to place the caret between two elements by specifying an appropriate offset.

Furthermore, navigation has been enhanced to also allow placement of the caret at the outside of block and inline elements that are indicated (i. e. have a border/are otherwise special).

The code looks like a battlefield, and still has rough edges. Cleanup will follow soon.

Detailed Changes
-----------------------------

	* khtml_caret{.cpp,_p.h}: Vast changes.
	Added classes CaretBox, CaretBoxLine, CaretBoxIterator,
	EditableCaretBoxIterator. Changed every other class.

	* khtmlview.[cpp,h}: (class KHTMLView) Adapt to khtml_caret* changes.
	(KHTMLToolTip::maybeTip) Save tooltip position instead of recalculating it.

	* rendering/render_{inline,box}.{cpp,h}: (Render{Box,Inline}::caretPos)
	Handle outside caret positions.

	* rendering/render_{image,br}.{cpp,h}: Remove superfluous
	Render{Image,BR}::caretPos.

	* rendering/render_line.h: (InlineBox::maxOffset) Return 0 instead of 1.

	* rendering/render_object.{cpp,h}: (RenderObject::caretPos) Introduce
	flags to denote outside positions.
	Add RenderObject::isRenderReplaced.

	* rendering/render_replaced.h: Add RenderReplaced::isRenderReplaced
	returning true.

	* rendering/render_text.{cpp,h}: (RenderObject::caretPos) Handle flags.

	* xml/dom_nodeimpl.{cpp,h}: (NodeImpl::getCaret) Handle DOM Range
	positions.
	Remove unused NodeImpl::{prev,next}LeafNode.
	(NodeImpl::maxOffset) Return child node count instead of 1 for element
	nodes.
	(NodeBaseImpl::childNode): Don&apos;t crash on out-of-bounds offsets.

Known Bugs
-----------------------------

Among some smaller negligible bugs, the most disturbing one is broken list item
navigation. I cannot fix it because it&apos;s not a bug caused by this patch. I&apos;m working
on a solution.

CCMAIL: 48302@bugs.kde.org


  M +2705 -283 khtml_caret.cpp   1.12
  M +851 -128  khtml_caret_p.h   1.9
  M +116 -75   khtmlview.cpp   1.626
  M +10 -11    khtmlview.h   1.203
  M +78 -2     rendering/render_box.cpp   1.230
  M +2 -2      rendering/render_box.h   1.76
  M +5 -3      rendering/render_br.cpp   1.19
  M +4 -2      rendering/render_br.h   1.25
  M +5 -4      rendering/render_image.cpp   1.134
  M +4 -2      rendering/render_image.h   1.52
  M +57 -0     rendering/render_inline.cpp   1.9
  M +2 -0      rendering/render_inline.h   1.7
  M +1 -1      rendering/render_line.h   1.7
  M +2 -2      rendering/render_object.cpp   1.259
  M +15 -5     rendering/render_object.h   1.183
  M +4 -4      rendering/render_replaced.h   1.73
  M +10 -8     rendering/render_text.cpp   1.244
  M +2 -2      rendering/render_text.h   1.110
  M +28 -64    xml/dom_nodeimpl.cpp   1.232
  M +3 -21     xml/dom_nodeimpl.h   1.155



</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293777</commentid>
    <comment_count>18</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2004-12-13 01:39:08 +0000</bug_when>
    <thetext>CVS commit by savernik: 

Merge of WebCore&apos;s caret mode, and contenteditable changes.

With this merge, rudimentary editing of html fragments becomes possible.

The changes are not nearly stable or feature-complete. Hence, design mode
is developed in a branch of its own.

Don&apos;t expect contenteditable/design mode to be shipped with KDE 3.4.

The unwary of you may check out the design_mode branch of khtml to get an
impression about the current state and progress.

CCMAIL: 48302@bugs.kde.org


  A            editing/.cvsignore   1.1.2.1
  A            editing/Makefile.am   1.1.2.1
  A            editing/edit_command.h   1.1.2.1 [LGPL (v2+)]
  A            editing/edit_command_adapter.cpp   1.1.2.1 [LGPL (v2+)]
  A            editing/edit_command_adapter.h   1.1.2.1 [LGPL (v2+)]
  A            editing/editing.cpp   1.1.2.1 [LGPL (v2+)]
  A            editing/editing_p.h   1.1.2.1 [LGPL (v2+)]
  A            editing/editor.cpp   1.1.2.1 [LGPL (v2+)]
  A            editing/editor.h   1.1.2.1 [LGPL (v2+)]
  A            editing/editor_command.h   1.1.2.1 [LGPL (v2+)]
  A            editing/htmlediting.cpp   1.1.2.1 [UNKNOWN]
  A            editing/htmlediting.h   1.1.2.1 [UNKNOWN]
  A            editing/htmlediting_impl.cpp   1.1.2.1 [UNKNOWN]
  A            editing/htmlediting_impl.h   1.1.2.1 [UNKNOWN]
  A            editing/jsediting.cpp   1.1.2.1 [UNKNOWN]
  A            editing/jsediting.h   1.1.2.1 [UNKNOWN]
  A            misc/khtml_partaccessor.h   1.1.2.1 [LGPL (v2+)]
  A            xml/dom_position.cpp   1.1.2.1 [UNKNOWN]
  A            xml/dom_position.h   1.1.2.1 [UNKNOWN]
  A            xml/dom_positioniterator.cpp   1.1.2.1 [UNKNOWN]
  A            xml/dom_positioniterator.h   1.1.2.1 [UNKNOWN]
  A            xml/dom_selection.cpp   1.1.2.1 [UNKNOWN]
  A            xml/dom_selection.h   1.1.2.1 [UNKNOWN]
  M +299 -0    ChangeLog   1.353.2.1
  M +2 -1      Makefile.am   1.162.2.1
  M +10 -9     khtml_events.cpp   1.17.8.1
  M +3 -0      khtml_iface.cc   1.10.6.1
  M +710 -189  khtml_part.cpp   1.1063.2.1
  M +120 -7    khtml_part.h   1.270.2.1
  M +1 -0      khtmlimage.cpp   1.44.2.1
  M +21 -49    khtmlpart_p.h   1.60.2.1
  M +149 -65   khtmlview.cpp   1.674.2.1
  M +12 -5     khtmlview.h   1.215.2.1
  M +4 -1      css/css_valueimpl.h   1.57.2.1
  M +48 -0     dom/dom_doc.cpp   1.56.4.1
  M +12 -0     dom/dom_doc.h   1.44.2.1
  M +0 -12     dom/dom_element.cpp   1.49.2.1
  M +17 -0     dom/html_element.cpp   1.25.8.1
  M +30 -0     dom/html_element.h   1.25.2.1
  M +31 -0     ecma/kjs_dom.cpp   1.182.2.1
  M +4 -2      ecma/kjs_dom.h   1.72.2.1
  M +9 -0      ecma/kjs_html.cpp   1.279.2.1
  M +2 -1      ecma/kjs_html.h   1.82.2.1
  M +42 -0     html/html_elementimpl.cpp   1.182.2.1
  M +4 -0      html/html_elementimpl.h   1.76.2.1
  M +1 -3      html/html_inlineimpl.cpp   1.137.2.1
  M +2 -0      html/htmltokenizer.cpp   1.292.2.1
  M +1 -1      misc/Makefile.am   1.33.2.1
  M +41 -3     misc/helper.cpp   1.58.2.1
  M +2 -0      misc/helper.h   1.18.2.1
  M +50 -0     misc/shared.h   1.2.8.1
  M +4 -0      rendering/bidi.cpp   1.203.2.1
  M +126 -0    rendering/render_block.cpp   1.56.2.1
  M +14 -0     rendering/render_block.h   1.21.2.1
  M +13 -0     rendering/render_box.cpp   1.248.2.1
  M +7 -0      rendering/render_box.h   1.83.2.1
  M +28 -1     rendering/render_br.cpp   1.20.2.1
  M +13 -12    rendering/render_br.h   1.26.2.1
  M +1 -0      rendering/render_canvas.h   1.56.2.1
  M +35 -0     rendering/render_container.cpp   1.56.2.1
  M +7 -1      rendering/render_container.h   1.14.2.1
  M +15 -1     rendering/render_inline.cpp   1.15.2.1
  M +6 -0      rendering/render_inline.h   1.11.2.1
  M +1 -1      rendering/render_layer.cpp   1.46.2.1
  M +120 -0    rendering/render_line.cpp   1.18.2.1
  M +25 -5     rendering/render_line.h   1.7.4.1
  M +235 -0    rendering/render_object.cpp   1.275.2.1
  M +34 -2     rendering/render_object.h   1.200.2.1
  M +47 -0     rendering/render_replaced.cpp   1.181.2.1
  M +5 -12     rendering/render_replaced.h   1.80.2.1
  M +2 -2      rendering/render_table.cpp   1.267.2.1
  M +139 -18   rendering/render_text.cpp   1.258.2.1
  M +20 -18    rendering/render_text.h   1.118.2.1
  M +4 -2      xml/Makefile.am   1.17.6.1
  M +169 -38   xml/dom_docimpl.cpp   1.303.2.1
  M +29 -0     xml/dom_docimpl.h   1.139.2.1
  M +55 -32    xml/dom_elementimpl.cpp   1.202.2.1
  M +6 -2      xml/dom_elementimpl.h   1.118.2.1
  M +187 -13   xml/dom_nodeimpl.cpp   1.244.2.1
  M +43 -15    xml/dom_nodeimpl.h   1.163.2.1
  M +36 -21    xml/dom_textimpl.cpp   1.103.2.1
  M +13 -1     xml/dom_textimpl.h   1.60.4.1



</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293961</commentid>
    <comment_count>19</comment_count>
    <who name="Nicolas Deschildre">ndeschildre</who>
    <bug_when>2004-12-13 18:41:17 +0000</bug_when>
    <thetext>On Monday 13 December 2004 01:39, Leo Savernik wrote:
&gt; ------- You are receiving this mail because: -------
&gt; You are on the CC list for the bug, or are watching someone who is.
&gt; You are a voter for the bug, or are watching someone who is.
&gt;
&gt; http://bugs.kde.org/show_bug.cgi?id=48302
&gt;
&gt;
&gt;
&gt;
&gt; ------- Additional Comments From l.savernik aon at  2004-12-13 01:39
&gt; ------- CVS commit by savernik:
&gt;
&gt; Merge of WebCore&apos;s caret mode, and contenteditable changes.
&gt;
&gt; With this merge, rudimentary editing of html fragments becomes possible.
&gt;
&gt; The changes are not nearly stable or feature-complete. Hence, design mode
&gt; is developed in a branch of its own.
&gt;
&gt; Don&apos;t expect contenteditable/design mode to be shipped with KDE 3.4.
&gt;
&gt; The unwary of you may check out the design_mode branch of khtml to get an
&gt; impression about the current state and progress.

Good news!
But i&apos;m afraid i won&apos;t be able to test it right now (exams and so on...). I&apos;ll 
try to report you my impressions during the holidays

Nicolas

&gt;
&gt; CCMAIL: 48302 bugs kde org
&gt;
&gt;
&gt;   A            editing/.cvsignore   1.1.2.1
&gt;   A            editing/Makefile.am   1.1.2.1
&gt;   A            editing/edit_command.h   1.1.2.1 [LGPL (v2+)]
&gt;   A            editing/edit_command_adapter.cpp   1.1.2.1 [LGPL (v2+)]
&gt;   A            editing/edit_command_adapter.h   1.1.2.1 [LGPL (v2+)]
&gt;   A            editing/editing.cpp   1.1.2.1 [LGPL (v2+)]
&gt;   A            editing/editing_p.h   1.1.2.1 [LGPL (v2+)]
&gt;   A            editing/editor.cpp   1.1.2.1 [LGPL (v2+)]
&gt;   A            editing/editor.h   1.1.2.1 [LGPL (v2+)]
&gt;   A            editing/editor_command.h   1.1.2.1 [LGPL (v2+)]
&gt;   A            editing/htmlediting.cpp   1.1.2.1 [UNKNOWN]
&gt;   A            editing/htmlediting.h   1.1.2.1 [UNKNOWN]
&gt;   A            editing/htmlediting_impl.cpp   1.1.2.1 [UNKNOWN]
&gt;   A            editing/htmlediting_impl.h   1.1.2.1 [UNKNOWN]
&gt;   A            editing/jsediting.cpp   1.1.2.1 [UNKNOWN]
&gt;   A            editing/jsediting.h   1.1.2.1 [UNKNOWN]
&gt;   A            misc/khtml_partaccessor.h   1.1.2.1 [LGPL (v2+)]
&gt;   A            xml/dom_position.cpp   1.1.2.1 [UNKNOWN]
&gt;   A            xml/dom_position.h   1.1.2.1 [UNKNOWN]
&gt;   A            xml/dom_positioniterator.cpp   1.1.2.1 [UNKNOWN]
&gt;   A            xml/dom_positioniterator.h   1.1.2.1 [UNKNOWN]
&gt;   A            xml/dom_selection.cpp   1.1.2.1 [UNKNOWN]
&gt;   A            xml/dom_selection.h   1.1.2.1 [UNKNOWN]
&gt;   M +299 -0    ChangeLog   1.353.2.1
&gt;   M +2 -1      Makefile.am   1.162.2.1
&gt;   M +10 -9     khtml_events.cpp   1.17.8.1
&gt;   M +3 -0      khtml_iface.cc   1.10.6.1
&gt;   M +710 -189  khtml_part.cpp   1.1063.2.1
&gt;   M +120 -7    khtml_part.h   1.270.2.1
&gt;   M +1 -0      khtmlimage.cpp   1.44.2.1
&gt;   M +21 -49    khtmlpart_p.h   1.60.2.1
&gt;   M +149 -65   khtmlview.cpp   1.674.2.1
&gt;   M +12 -5     khtmlview.h   1.215.2.1
&gt;   M +4 -1      css/css_valueimpl.h   1.57.2.1
&gt;   M +48 -0     dom/dom_doc.cpp   1.56.4.1
&gt;   M +12 -0     dom/dom_doc.h   1.44.2.1
&gt;   M +0 -12     dom/dom_element.cpp   1.49.2.1
&gt;   M +17 -0     dom/html_element.cpp   1.25.8.1
&gt;   M +30 -0     dom/html_element.h   1.25.2.1
&gt;   M +31 -0     ecma/kjs_dom.cpp   1.182.2.1
&gt;   M +4 -2      ecma/kjs_dom.h   1.72.2.1
&gt;   M +9 -0      ecma/kjs_html.cpp   1.279.2.1
&gt;   M +2 -1      ecma/kjs_html.h   1.82.2.1
&gt;   M +42 -0     html/html_elementimpl.cpp   1.182.2.1
&gt;   M +4 -0      html/html_elementimpl.h   1.76.2.1
&gt;   M +1 -3      html/html_inlineimpl.cpp   1.137.2.1
&gt;   M +2 -0      html/htmltokenizer.cpp   1.292.2.1
&gt;   M +1 -1      misc/Makefile.am   1.33.2.1
&gt;   M +41 -3     misc/helper.cpp   1.58.2.1
&gt;   M +2 -0      misc/helper.h   1.18.2.1
&gt;   M +50 -0     misc/shared.h   1.2.8.1
&gt;   M +4 -0      rendering/bidi.cpp   1.203.2.1
&gt;   M +126 -0    rendering/render_block.cpp   1.56.2.1
&gt;   M +14 -0     rendering/render_block.h   1.21.2.1
&gt;   M +13 -0     rendering/render_box.cpp   1.248.2.1
&gt;   M +7 -0      rendering/render_box.h   1.83.2.1
&gt;   M +28 -1     rendering/render_br.cpp   1.20.2.1
&gt;   M +13 -12    rendering/render_br.h   1.26.2.1
&gt;   M +1 -0      rendering/render_canvas.h   1.56.2.1
&gt;   M +35 -0     rendering/render_container.cpp   1.56.2.1
&gt;   M +7 -1      rendering/render_container.h   1.14.2.1
&gt;   M +15 -1     rendering/render_inline.cpp   1.15.2.1
&gt;   M +6 -0      rendering/render_inline.h   1.11.2.1
&gt;   M +1 -1      rendering/render_layer.cpp   1.46.2.1
&gt;   M +120 -0    rendering/render_line.cpp   1.18.2.1
&gt;   M +25 -5     rendering/render_line.h   1.7.4.1
&gt;   M +235 -0    rendering/render_object.cpp   1.275.2.1
&gt;   M +34 -2     rendering/render_object.h   1.200.2.1
&gt;   M +47 -0     rendering/render_replaced.cpp   1.181.2.1
&gt;   M +5 -12     rendering/render_replaced.h   1.80.2.1
&gt;   M +2 -2      rendering/render_table.cpp   1.267.2.1
&gt;   M +139 -18   rendering/render_text.cpp   1.258.2.1
&gt;   M +20 -18    rendering/render_text.h   1.118.2.1
&gt;   M +4 -2      xml/Makefile.am   1.17.6.1
&gt;   M +169 -38   xml/dom_docimpl.cpp   1.303.2.1
&gt;   M +29 -0     xml/dom_docimpl.h   1.139.2.1
&gt;   M +55 -32    xml/dom_elementimpl.cpp   1.202.2.1
&gt;   M +6 -2      xml/dom_elementimpl.h   1.118.2.1
&gt;   M +187 -13   xml/dom_nodeimpl.cpp   1.244.2.1
&gt;   M +43 -15    xml/dom_nodeimpl.h   1.163.2.1
&gt;   M +36 -21    xml/dom_textimpl.cpp   1.103.2.1
&gt;   M +13 -1     xml/dom_textimpl.h   1.60.4.1

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319851</commentid>
    <comment_count>20</comment_count>
    <who name="Jason Keirstead">jason</who>
    <bug_when>2005-03-01 18:13:19 +0000</bug_when>
    <thetext>*** Bug 99042 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423944</commentid>
    <comment_count>21</comment_count>
    <who name="Anders E. Andersen">andersa</who>
    <bug_when>2006-03-22 14:09:25 +0000</bug_when>
    <thetext>What&apos;s the story here? :) No activity for a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424044</commentid>
    <comment_count>22</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2006-03-22 19:40:51 +0000</bug_when>
    <thetext>Suspended indefinitely.

A merge from Webcore will be done when the infrastructure is in place. Don&apos;t even think about expecting it before KDE 4.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549714</commentid>
    <comment_count>23</comment_count>
    <who name="Brad Hards">bradh</who>
    <bug_when>2007-10-13 12:54:37 +0000</bug_when>
    <thetext>Did this get merged for KDE4?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549759</commentid>
    <comment_count>24</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2007-10-13 18:50:53 +0000</bug_when>
    <thetext>No. With the imminent availability of QtWebKit, solving this bug is futile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549774</commentid>
    <comment_count>25</comment_count>
    <who name="Germain Garand">germain</who>
    <bug_when>2007-10-13 20:02:32 +0000</bug_when>
    <thetext>Well, some people still have better ambitions for KDE than vassal of Apple corp. This bug will remain open.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549793</commentid>
    <comment_count>26</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2007-10-13 23:32:13 +0000</bug_when>
    <thetext>Am Samstag, 13. Oktober 2007 schrieb Germain Garand:
&gt; Well, some people still have better ambitions for KDE than vassal of Apple
&gt; corp. This bug will remain open.


Ok. Nice to hear that khtml is scheduled to last.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553682</commentid>
    <comment_count>27</comment_count>
    <who name="Anders Jenbo">fuck</who>
    <bug_when>2007-11-05 14:36:27 +0000</bug_when>
    <thetext>Hi, I work on a WYSIWYG editor called RTEF, it&apos;s main goal is to support any browser out there, currently we have IE 5.0+, Opera 9+, Mozilla 1.3+, Firefox 0.6.1+, Netscape 7.1+ and Safari 1.3+. I think Konqueror is realy missing from this list so i just wanted you guys to know that I support you in the effort to enable designMode for Konqueror. I would be glad to provide all the help I can, in form of JS and test versions of RTEF for Konqueror as well as testing builds of Konqueror (mind you I have only used KDE (KUbuntu) for 2 dayes as of this writing).

Hopfully some organisation like WC3 will soon pick up designMode and make it a clan standard as it realy is the missing part of &quot;Web 2.0&quot;.

http://rtef.info/

Anders Jenbo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555831</commentid>
    <comment_count>28</comment_count>
    <who name="Tommi Tervo">tommi.tervo</who>
    <bug_when>2007-11-16 08:36:46 +0000</bug_when>
    <thetext>*** Bug 152399 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565514</commentid>
    <comment_count>29</comment_count>
    <who name="Germain Garand">germain</who>
    <bug_when>2007-12-21 21:36:34 +0000</bug_when>
    <thetext>I will work on this.
Target is KDE 4.1, thanks to the help and excellent prior work of Leo Savernik.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585153</commentid>
    <comment_count>30</comment_count>
    <who name="Anders Jenbo">fuck</who>
    <bug_when>2008-03-07 22:34:15 +0000</bug_when>
    <thetext>Some notes on best practice in styling html.
Use &lt;b&gt; for bold &lt;i&gt; for italic and &lt;u&gt; for underlined.
Safari made the mistake of applying every thing using &lt;span style=&quot;&quot;&gt; leaving the produced code cluttered and impossible to affect using style sheets to follow a pages design.
IE uses &lt;strong&gt; for bold, this is semantical better then &lt;b&gt; in the cases where the selected text should have importance, but the editor probably won&apos;t know if the users is just bolding or marking a word for importance.
IE uses &lt;em&gt; for the same reason.
Firefox uses &lt;b&gt; and &lt;i&gt;
Opera uses &lt;b&gt; and &lt;em&gt;
As the scene is already cluttered the decision for what specific tag to use is petty much up to you, but inline styling is a bad idea.
For more specific styling like font size i would again suggest using tags where possible like nested &lt;big&gt; and &lt;small&gt;, for things that doesn&apos;t have a good tag answer inline styling would be better then using &lt;font&gt; like IE, generally all layout attribute (not counting style=&quot;&quot;) should be avoided as they do not provide any added value/functionality over css and are deprecated in newer html/xhtml editions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599177</commentid>
    <comment_count>31</comment_count>
    <who name="George Goldberg">grundleborg</who>
    <bug_when>2008-05-06 06:35:34 +0000</bug_when>
    <thetext>*** Bug 117934 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602427</commentid>
    <comment_count>32</comment_count>
    <who name="Germain Garand">germain</who>
    <bug_when>2008-05-19 00:27:10 +0000</bug_when>
    <thetext>SVN commit 809453 by ggarand:

implementation for contentEditable/designMode

based on work by Apple developers and Leo Savernik.
Still needs further work, but should be reasonably stable.

CCBUG: 48302


 M  +12 -0     CMakeLists.txt  
 M  +48 -0     dom/dom_doc.cpp  
 M  +12 -0     dom/dom_doc.h  
 M  +0 -12     dom/dom_element.cpp  
 M  +17 -0     dom/html_element.cpp  
 M  +30 -0     dom/html_element.h  
 M  +31 -0     ecma/kjs_dom.cpp  
 M  +3 -1      ecma/kjs_dom.h  
 M  +9 -0      ecma/kjs_html.cpp  
 M  +2 -1      ecma/kjs_html.h  
 A             editing (directory)  
 A             editing/edit_command.h   [License: LGPL (v2+) (wrong address)]
 A             editing/editing.cpp   [License: LGPL (v2+) (wrong address)]
 A             editing/editing_p.h   [License: LGPL (v2+) (wrong address)]
 A             editing/editor.cpp   [License: LGPL (v2+) (wrong address)]
 A             editing/editor.h   [License: LGPL (v2+) (wrong address)]
 A             editing/editor_command.h   [License: LGPL (v2+) (wrong address)]
 A             editing/htmlediting.cpp   [License: BSD]
 A             editing/htmlediting.h   [License: BSD]
 A             editing/htmlediting_impl.cpp   [License: BSD]
 A             editing/htmlediting_impl.h   [License: BSD]
 A             editing/jsediting.cpp   [License: BSD]
 A             editing/jsediting.h   [License: BSD]
 M  +42 -0     html/html_elementimpl.cpp  
 M  +4 -0      html/html_elementimpl.h  
 M  +1 -3      html/html_inlineimpl.cpp  
 M  +0 -11     khtml_caret_p.h  
 M  +10 -9     khtml_events.cpp  
 M  +545 -562  khtml_part.cpp  
 M  +100 -4    khtml_part.h  
 M  +3 -27     khtmlpart_p.h  
 M  +103 -978  khtmlview.cpp  
 M  +3 -250    khtmlview.h  
 M  +37 -3     misc/helper.cpp  
 M  +2 -0      misc/helper.h  
 A             misc/khtml_partaccessor.h   [License: LGPL (v2+) (wrong address)]
 M  +1 -1      misc/loader.cpp  
 M  +126 -0    rendering/render_block.cpp  
 M  +12 -1     rendering/render_block.h  
 M  +28 -1     rendering/render_br.cpp  
 M  +13 -12    rendering/render_br.h  
 M  +1 -0      rendering/render_canvas.h  
 M  +30 -0     rendering/render_container.cpp  
 M  +6 -0      rendering/render_container.h  
 M  +15 -2     rendering/render_inline.cpp  
 M  +6 -0      rendering/render_inline.h  
 M  +1 -1      rendering/render_layer.cpp  
 M  +113 -0    rendering/render_line.cpp  
 M  +19 -5     rendering/render_line.h  
 M  +200 -0    rendering/render_object.cpp  
 M  +23 -2     rendering/render_object.h  
 M  +47 -0     rendering/render_replaced.cpp  
 M  +9 -12     rendering/render_replaced.h  
 M  +1 -1      rendering/render_table.cpp  
 M  +134 -18   rendering/render_text.cpp  
 M  +20 -18    rendering/render_text.h  
 M  +66 -0     xml/dom_docimpl.cpp  
 M  +19 -0     xml/dom_docimpl.h  
 M  +48 -32    xml/dom_elementimpl.cpp  
 M  +5 -3      xml/dom_elementimpl.h  
 M  +170 -13   xml/dom_nodeimpl.cpp  
 M  +42 -15    xml/dom_nodeimpl.h  
 A             xml/dom_position.cpp   [License: BSD]
 A             xml/dom_position.h   [License: BSD]
 A             xml/dom_positioniterator.cpp   [License: BSD]
 A             xml/dom_positioniterator.h   [License: BSD]
 A             xml/dom_selection.cpp   [License: BSD]
 A             xml/dom_selection.h   [License: BSD]
 M  +36 -19    xml/dom_textimpl.cpp  
 M  +13 -1     xml/dom_textimpl.h  


WebSVN link: http://websvn.kde.org/?view=rev&amp;revision=809453
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602542</commentid>
    <comment_count>33</comment_count>
    <who name="FiNeX">finex</who>
    <bug_when>2008-05-19 13:23:41 +0000</bug_when>
    <thetext>@Germain Garand: will be supported editors like fckeditor or tinyMCE?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602547</commentid>
    <comment_count>34</comment_count>
    <who name="Kae Verens">kae</who>
    <bug_when>2008-05-19 13:50:03 +0000</bug_when>
    <thetext>@FiNeX

as far as I know, this is the only thing that&apos;s stopping FCKeditor and TinyMCE from working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602548</commentid>
    <comment_count>35</comment_count>
    <who name="FiNeX">finex</who>
    <bug_when>2008-05-19 13:54:33 +0000</bug_when>
    <thetext>@Kae: so this latest patch could be useful for make them work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602585</commentid>
    <comment_count>36</comment_count>
    <who name="A. Spehr">zahl</who>
    <bug_when>2008-05-19 16:40:43 +0000</bug_when>
    <thetext>Germain: Does that commit mean this wish is implemented?
(And yay to you and Leo on the commit, btw!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602600</commentid>
    <comment_count>37</comment_count>
    <who name="Germain Garand">germain</who>
    <bug_when>2008-05-19 17:38:21 +0000</bug_when>
    <thetext>re:  FiNEX, Alex. It&apos;s on its way but there is still a lot of work to do.
The caret position is often bogus, command compression is disabled because of refcounting issues, there are many missing commands. Undo manager isn&apos;t implemented at all. I must still make designMode enabling match what the HTML5 spec says.

I&apos;ll CC here on further progress anwyay.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602621</commentid>
    <comment_count>38</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2008-05-19 18:27:50 +0000</bug_when>
    <thetext>Am Montag, 19. Mai 2008 schrieb Germain Garand:
&gt; implementation for contentEditable/designMode


Yay! A big thank you for finishing the work I started in Summer 2003 and 
meanwhile abandoned due to lack of time. And a big thank you for resurrecting 
the rotten pile of designmode-branch, fiddling with it and porting it to KDE 
4.

:-)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606033</commentid>
    <comment_count>39</comment_count>
    <who name="FiNeX">finex</who>
    <bug_when>2008-06-01 19:21:22 +0000</bug_when>
    <thetext>*** Bug 134915 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616718</commentid>
    <comment_count>40</comment_count>
    <who name="FiNeX">finex</who>
    <bug_when>2008-06-27 16:57:09 +0000</bug_when>
    <thetext>*** Bug 141523 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616720</commentid>
    <comment_count>41</comment_count>
    <who name="FiNeX">finex</who>
    <bug_when>2008-06-27 16:58:17 +0000</bug_when>
    <thetext>*** Bug 95923 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642376</commentid>
    <comment_count>42</comment_count>
    <who name="Zayed Al-Saidi">zayed.alsaidi</who>
    <bug_when>2008-08-31 09:47:26 +0000</bug_when>
    <thetext>What is the status of wish ? Will it be ready for kde 4.2?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648821</commentid>
    <comment_count>43</comment_count>
    <who name="FiNeX">finex</who>
    <bug_when>2008-09-25 13:56:55 +0000</bug_when>
    <thetext>*** Bug 68319 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648826</commentid>
    <comment_count>44</comment_count>
    <who name="R Bauer">r.bauer</who>
    <bug_when>2008-09-25 14:18:39 +0000</bug_when>
    <thetext>Me wants to see fckeditor working too

http://www.fckeditor.net/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678039</commentid>
    <comment_count>45</comment_count>
    <who name="Viacheslav Tokarev">tsjoker</who>
    <bug_when>2008-12-08 21:08:35 +0000</bug_when>
    <thetext>SVN commit 894515 by vtokarev:

Fix the caret off-by-one bug: make sure we update layout before setting
new caret position
CCBUG:48302
CCBUG:177245

 M  +10 -0     editor.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&amp;revision=894515
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776602</commentid>
    <comment_count>46</comment_count>
    <who name="FiNeX">finex</who>
    <bug_when>2009-06-16 14:17:15 +0000</bug_when>
    <thetext>*** Bug 196427 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2317461</commentid>
    <comment_count>47</comment_count>
    <who name="Christoph Cullmann">christoph</who>
    <bug_when>2024-05-06 18:39:50 +0000</bug_when>
    <thetext>Dear user,

KHTML (and KJS) was a long time more or less unmaintained and got removed in KF6.

Please migrate to use a QWebEngine based HTML component.

We will do no further fixes or improvements to the KF5 branches of these components beside important security fixes.

For security issues, please see:

https://kde.org/info/security/

Sorry that we did not fix this issue during the life-time of KHTML.

Greetings
Christoph Cullmann</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2053</attachid>
            <date>2003-07-23 23:41:22 +0000</date>
            <delta_ts>2003-08-09 04:50:09 +0000</delta_ts>
            <desc>proposed WebCore merges and some utilities</desc>
            <filename>khtml_rendering-small_merge.diff</filename>
            <type>text/plain</type>
            <size>42517</size>
            <attacher name="Leo Savernik">l.savernik</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcmluZy9NYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9r
ZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvTWFrZWZpbGUuYW0sdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMzMKZGlmZiAtdSAtcCAtcjEuMzMgTWFrZWZpbGUuYW0KLS0tIHJlbmRlcmluZy9NYWtl
ZmlsZS5hbQkyMyBBcHIgMjAwMyAxMjo0MDo1NCAtMDAwMAkxLjMzCisrKyByZW5kZXJpbmcvTWFr
ZWZpbGUuYW0JMjMgSnVsIDIwMDMgMjE6MzI6NDggLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAgbGli
a2h0bWxyZW5kZXJfbGFfU09VUkNFUyA9IFwKIAlyZW5kZXJfaW1hZ2UuY3BwIHJlbmRlcl90YWJs
ZS5jcHAgdGFibGVfbGF5b3V0LmNwcCBcCiAJcmVuZGVyX3JlcGxhY2VkLmNwcCByZW5kZXJfZm9y
bS5jcHAgcmVuZGVyX2xpc3QuY3BwIFwKIAlyZW5kZXJfcm9vdC5jcHAgcmVuZGVyX2ZyYW1lcy5j
cHAgcmVuZGVyX2JyLmNwcCBcCi0JcmVuZGVyX2h0bWwuY3BwIHJlbmRlcl9ib2R5LmNwcCBmb250
LmNwcCAKKwlyZW5kZXJfaHRtbC5jcHAgcmVuZGVyX2JvZHkuY3BwIGZvbnQuY3BwIHJlbmRlcl9s
aW5lLmNwcAogCiBsaWJraHRtbHJlbmRlcl9sYV9NRVRBU09VUkNFUyA9IEFVVE8KIApAQCAtMzcs
NyArMzcsNyBAQCBub2luc3RfSEVBREVSUyA9IFwKIAlyZW5kZXJfc3R5bGUuaCByZW5kZXJfb2Jq
ZWN0LmggcmVuZGVyX2NvbnRhaW5lci5oIHJlbmRlcl9ib3guaCBcCiAJcmVuZGVyX2Zsb3cuaCBy
ZW5kZXJfdGV4dC5oIHJlbmRlcl90YWJsZS5oIHJlbmRlcl9yZXBsYWNlZC5oIFwKIAlyZW5kZXJf
Zm9ybS5oIHJlbmRlcl9saXN0LmggcmVuZGVyX3Jvb3QuaCByZW5kZXJfZnJhbWVzLmggXAotCXJl
bmRlcl9ici5oIHJlbmRlcl9hcHBsZXQuaCBmb250LmggdGFibGVfbGF5b3V0LmgKKwlyZW5kZXJf
YnIuaCByZW5kZXJfYXBwbGV0LmggZm9udC5oIHRhYmxlX2xheW91dC5oIHJlbmRlcl9saW5lLmgK
IAogSU5DTFVERVMgPSAtSSQodG9wX3NyY2Rpcikva2ltZ2lvIC1JJCh0b3Bfc3JjZGlyKS9raW8g
LUkkKHRvcF9zcmNkaXIpL2Rjb3AgXAogIC1JJCh0b3Bfc3JjZGlyKS9rZmlsZSAtSSQodG9wX3Ny
Y2Rpcikva2h0bWwgLUkkKHRvcF9zcmNkaXIpICQoYWxsX2luY2x1ZGVzKQpJbmRleDogcmVuZGVy
aW5nL2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1s
L3JlbmRlcmluZy9iaWRpLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjUKZGlmZiAtdSAt
cCAtcjEuMTY1IGJpZGkuY3BwCi0tLSByZW5kZXJpbmcvYmlkaS5jcHAJNiBGZWIgMjAwMyAwMDoz
Mjo0NiAtMDAwMAkxLjE2NQorKysgcmVuZGVyaW5nL2JpZGkuY3BwCTIzIEp1bCAyMDAzIDIxOjMy
OjUwIC0wMDAwCkBAIC0xMDM3LDcgKzEwMzcsNyBAQCB2b2lkIFJlbmRlckZsb3c6OmxheW91dElu
bGluZUNoaWxkcmVuKCBiCiAgICAgICAgICAgICAgICAgICAgIG8tPmxheW91dCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZihvLT5pc1RleHQoKSkKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5kZWxldGVTbGF2ZXMoIHJlbmRlckFyZW5h
KCkgKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5kZWxl
dGVSdW5zKCByZW5kZXJBcmVuYSgpICk7CiAgICAgICAgICAgICBvID0gQmlkaW5leHQoIHRoaXMs
IG8gKTsKICAgICAgICAgfQogCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9i
b3guY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5OApkaWZmIC11IC1wIC1yMS4xOTggcmVu
ZGVyX2JveC5jcHAKLS0tIHJlbmRlcmluZy9yZW5kZXJfYm94LmNwcAkxOCBGZWIgMjAwMyAyMTox
MDo0NSAtMDAwMAkxLjE5OAorKysgcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCTIzIEp1bCAyMDAz
IDIxOjMyOjUxIC0wMDAwCkBAIC0xMDEwLDQgKzEwMTAsMjQgQEAgaW50IFJlbmRlckJveDo6cmln
aHRtb3N0UG9zaXRpb24oKSBjb25zdAogICAgIHJldHVybiBtX3dpZHRoOwogfQogCit2b2lkIFJl
bmRlckJveDo6Y2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50
ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpCit7CisgICAgX3ggPSAtMTsKKworICAgIC8v
IHByb3BhZ2F0ZSBpdCBkb3dud2FyZHMgdG8gaXRzIGNoaWxkcmVuLCBzb21lb25lIHdpbGwgZmVl
bCByZXNwb25zaWJsZQorICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7Cisg
ICAgaWYgKGNoaWxkKSBrZERlYnVnKDYwNDApIDw8ICJkZWxlZ2F0aW5nIGNhcmV0UG9zIHRvICIg
PDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCBlbmRsOworICAgIGlmIChjaGlsZCkgY2hpbGQtPmNh
cmV0UG9zKG9mZnNldCwgb3ZlcnJpZGUsIF94LCBfeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAv
LyBpZiBub3QsIHVzZSB0aGUgZXh0ZW5kcyBvZiB0aGlzIGJveC4gb2Zmc2V0IDAgbWVhbnMgbGVm
dCwgb2Zmc2V0IDEgbWVhbnMKKyAgICAvLyByaWdodAorICAgIGlmIChfeCA9PSAtMSkgeworICAg
ICAgICBrZERlYnVnKDYwNDApIDw8ICJubyBkZWxlZ2F0aW9uIiA8PCBlbmRsOworICAgICAgICBf
eCA9IHhQb3MoKSArIChvZmZzZXQgPT0gMCA/IDAgOiBtX3dpZHRoKTsKKwlfeSA9IHlQb3MoKTsK
KwloZWlnaHQgPSBtX2hlaWdodDsKKwl3aWR0aCA9IG92ZXJyaWRlICYmIG9mZnNldCA9PSAwID8g
bV93aWR0aCA6IDE7CisgICAgfS8qZW5kIGlmKi8KK30KKwogI3VuZGVmIERFQlVHX0xBWU9VVApJ
bmRleDogcmVuZGVyaW5nL3JlbmRlcl9ib3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9r
ZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjYzCmRpZmYgLXUgLXAgLXIxLjYzIHJlbmRlcl9ib3guaAotLS0gcmVuZGVyaW5nL3Jl
bmRlcl9ib3guaAkxNyBNYXkgMjAwMyAyMjoxMjo1OCAtMDAwMAkxLjYzCisrKyByZW5kZXJpbmcv
cmVuZGVyX2JveC5oCTIzIEp1bCAyMDAzIDIxOjMyOjUxIC0wMDAwCkBAIC05OCw2ICs5OCw4IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUmVuZGVyTGF5ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9sYXllcjsgfQogCisgICAgdmlydHVhbCB2b2lkIGNhcmV0UG9zKGludCBvZmZzZXQsIGJv
b2wgb3ZlcnJpZGUsIGludCAmX3gsIGludCAmX3ksIGludCAmd2lkdGgsIGludCAmaGVpZ2h0KTsK
KwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFFQYWlu
dGVyICpwLGludCBfeCwgaW50IF95LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF93LCBpbnQgX2gsIGludCBfdHgsIGludCBfdHkpOwpJbmRleDogcmVuZGVyaW5n
L3JlbmRlcl9ici5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9ici5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlm
ZiAtdSAtcCAtcjEuMTUgcmVuZGVyX2JyLmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl9ici5jcHAJ
MTQgSmFuIDIwMDIgMTk6NTY6NDUgLTAwMDAJMS4xNQorKysgcmVuZGVyaW5nL3JlbmRlcl9ici5j
cHAJMjMgSnVsIDIwMDMgMjE6MzI6NTEgLTAwMDAKQEAgLTM1LDIxICszNSwyMiBAQCBSZW5kZXJC
Ujo6flJlbmRlckJSKCkKIHsKIH0KIAotdm9pZCBSZW5kZXJCUjo6Y3Vyc29yUG9zKGludCAvKm9m
ZnNldCovLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCkKK3ZvaWQgUmVuZGVyQlI6OmNh
cmV0UG9zKGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGludCAmX3gsIGludCAmX3ksIGludCAm
d2lkdGgsIGludCAmaGVpZ2h0KQogewogICAgIGlmIChwcmV2aW91c1NpYmxpbmcoKSAmJiAhcHJl
dmlvdXNTaWJsaW5nKCktPmlzQlIoKSAmJiAhcHJldmlvdXNTaWJsaW5nKCktPmlzRmxvYXRpbmco
KSkgewogICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKICAgICAgICAgaWYgKHByZXZpb3VzU2libGlu
ZygpLT5pc1RleHQoKSkKLSAgICAgICAgICAgIG9mZnNldCA9IHN0YXRpY19jYXN0PFJlbmRlclRl
eHQqPihwcmV2aW91c1NpYmxpbmcoKSktPmxlbmd0aCgpOwotCi0gICAgICAgIHByZXZpb3VzU2li
bGluZygpLT5jdXJzb3JQb3Mob2Zmc2V0LF94LF95LGhlaWdodCk7CisgICAgICAgICAgICBvZmZz
ZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocHJldmlvdXNTaWJsaW5nKCkpLT5tYXhPZmZz
ZXQoKTsKKyAgICAgICAgCisJLy8gRklYTUU6IHRoaXMgd29uJ3QgcmV0dXJuIGEgYmlnIHdpZHRo
IGluIG92ZXJyaWRlIG1vZGUgKExTKQorICAgICAgICBwcmV2aW91c1NpYmxpbmcoKS0+Y2FyZXRQ
b3Mob2Zmc2V0LG92ZXJyaWRlLF94LF95LHdpZHRoLGhlaWdodCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpbnQgYWJzeCwgYWJzeTsKICAgICBhYnNvbHV0ZVBvc2l0aW9uKGFic3gs
YWJzeSk7CiAgICAgaWYgKGFic3ggPT0gLTEpIHsKLSAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyBv
dXQgYWJzb2x1YXRlIHBvc2l0aW9uLCBhbmQgdGhlcmUgaXMgbm90IHBvaW50IHJldHVybmluZwor
ICAgICAgICAvLyB3ZSBkb24ndCBrbm93IG91dCBhYnNvbHV0ZSBwb3NpdGlvbiwgYW5kIHRoZXJl
IGlzIG5vIHBvaW50IHJldHVybmluZwogICAgICAgICAvLyBqdXN0IGEgcmVsYXRpdmUgb25lCiAg
ICAgICAgIF94ID0gX3kgPSAtMTsKICAgICB9CkBAIC01OCw2ICs1OSw2IEBAIHZvaWQgUmVuZGVy
QlI6OmN1cnNvclBvcyhpbnQgLypvZmZzZXQqLywKICAgICAgICAgX3kgKz0gYWJzeTsKICAgICB9
CiAgICAgaGVpZ2h0ID0gUmVuZGVyVGV4dDo6dmVydGljYWxQb3NpdGlvbkhpbnQoIGZhbHNlICk7
Ci0KKyAgICB3aWR0aCA9IG92ZXJyaWRlID8gaGVpZ2h0IC8gMiA6IDE7CiB9CiAKSW5kZXg6IHJl
bmRlcmluZy9yZW5kZXJfYnIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGli
cy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkK
ZGlmZiAtdSAtcCAtcjEuMTkgcmVuZGVyX2JyLmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfYnIuaAkx
NyBNYXkgMjAwMyAyMjoxMjo1OCAtMDAwMAkxLjE5CisrKyByZW5kZXJpbmcvcmVuZGVyX2JyLmgJ
MjMgSnVsIDIwMDMgMjE6MzI6NTEgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgc2hvcnQgbWF4V2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNCUigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Y3Vyc29yUG9zKGludCBvZmZzZXQsIGludCAmX3gsIGludCAmX3ksIGludCAmaGVpZ2h0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZf
eCwgaW50ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpOwogfTsKIAogfQpJbmRleDogcmVu
ZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tk
ZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTEwCmRpZmYgLXUgLXAgLXIxLjExMCByZW5kZXJfaW1hZ2UuY3BwCi0tLSByZW5kZXJp
bmcvcmVuZGVyX2ltYWdlLmNwcAkzIEp1bCAyMDAzIDAwOjE5OjE5IC0wMDAwCTEuMTEwCisrKyBy
ZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAkyMyBKdWwgMjAwMyAyMTozMjo1MiAtMDAwMApAQCAt
NDMwLDIxICs0MzAsMjIgQEAgaW50IFJlbmRlckltYWdlOjpjYWxjUmVwbGFjZWRIZWlnaHQoKSBj
bwogICAgIHJldHVybiBSZW5kZXJSZXBsYWNlZDo6Y2FsY1JlcGxhY2VkSGVpZ2h0KCk7CiB9CiAK
LXZvaWQgUmVuZGVySW1hZ2U6OmN1cnNvclBvcyhpbnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQgJl95
LCBpbnQgJmhlaWdodCkgewordm9pZCBSZW5kZXJJbWFnZTo6Y2FyZXRQb3MoaW50IG9mZnNldCwg
Ym9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQp
IHsKICAgaGVpZ2h0ID0gaW50cmluc2ljSGVpZ2h0KCk7CisgIHdpZHRoID0gb3ZlcnJpZGUgJiYg
b2Zmc2V0ID09IDAgPyBpbnRyaW5zaWNXaWR0aCgpIDogMDsKICAgX3ggPSB4UG9zKCk7CiAgIF95
ID0geVBvcygpOwogICBpZiAob2Zmc2V0ID4gMCkgX3ggKz0gaW50cmluc2ljV2lkdGgoKTsKIAog
ICBSZW5kZXJPYmplY3QgKmNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgIGludCBhYnN4LCBhYnN5Owog
ICBpZiAoY2IgJiYgY2IgIT0gdGhpcyAmJiBjYi0+YWJzb2x1dGVQb3NpdGlvbihhYnN4LGFic3kp
KQogICB7CiAgICAgX3ggKz0gYWJzeDsKICAgICBfeSArPSBhYnN5OwogICB9IGVsc2UgewotICAg
IC8vIHdlIGRvbid0IGtub3cgb3VyIGFic29sdXRlIHBvc2l0aW9uLCBhbmQgdGhlcmUgaXMgbm90
IHBvaW50IHJldHVybmluZworICAgIC8vIHdlIGRvbid0IGtub3cgb3VyIGFic29sdXRlIHBvc2l0
aW9uLCBhbmQgdGhlcmUgaXMgbm8gcG9pbnQgcmV0dXJuaW5nCiAgICAgLy8ganVzdCBhIHJlbGF0
aXZlIG9uZQogICAgIF94ID0gX3kgPSAtMTsKICAgfQpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9p
bWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfaW1hZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MgpkaWZmIC11IC1w
IC1yMS40MiByZW5kZXJfaW1hZ2UuaAotLS0gcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCTMgSnVs
IDIwMDMgMDA6MTk6MTkgLTAwMDAJMS40MgorKysgcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCTIz
IEp1bCAyMDAzIDIxOjMyOjUyIC0wMDAwCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgU2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7cmV0dXJuIG1f
c2VsZWN0aW9uU3RhdGU7fQogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxl
Y3Rpb25TdGF0ZSBzKSB7bV9zZWxlY3Rpb25TdGF0ZSA9IHM7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Y3Vyc29yUG9zKGludCBvZmZzZXQsIGludCAmX3gsIGludCAmX3ksIGludCAmaGVpZ2h0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZf
eCwgaW50ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpOwogCiBwcml2YXRlOgogICAgIC8q
CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9o
b21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIHJlbmRlcl9saW5lLmNwcAotLS0gcmVu
ZGVyaW5nL3JlbmRlcl9saW5lLmNwcAkyMyBBcHIgMjAwMyAxMjo0MDo1NCAtMDAwMAkxLjEKKysr
IHJlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAJMjMgSnVsIDIwMDMgMjE6MzI6NTIgLTAwMDAKQEAg
LTMyLDEzICszMiwxMyBAQAogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZm9ybWltcGwuaCIKLSNp
bmNsdWRlICJyZW5kZXJfaW5saW5lLmgiCi0jaW5jbHVkZSAicmVuZGVyX2Jsb2NrLmgiCisvLyNp
bmNsdWRlICJyZW5kZXJfaW5saW5lLmgiCisvLyNpbmNsdWRlICJyZW5kZXJfYmxvY2suaCIKICNp
bmNsdWRlICJyZW5kZXJfYXJlbmEuaCIKICNpbmNsdWRlICJyZW5kZXJfbGluZS5oIgogCiAjaW5j
bHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJtaXNj
L2h0bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CkBAIC03OSwxMSArNzksMTEgQEAgaW50IElubGluZUZsb3dCb3g6Om1hcmdpbkxlZnQoKQog
ewogICAgIGlmICghaW5jbHVkZUxlZnRFZGdlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIAor
CiAgICAgUmVuZGVyU3R5bGUqIGNzdHlsZSA9IG9iamVjdCgpLT5zdHlsZSgpOwogICAgIExlbmd0
aCBtYXJnaW4gPSBjc3R5bGUtPm1hcmdpbkxlZnQoKTsKLSAgICBpZiAobWFyZ2luLnR5cGUgIT0g
VmFyaWFibGUpCi0gICAgICAgIHJldHVybiAobWFyZ2luLnR5cGUgPT0gRml4ZWQgPyBtYXJnaW4u
dmFsdWUgOiBvYmplY3QoKS0+bWFyZ2luTGVmdCgpKTsKKyAgICBpZiAobWFyZ2luLnR5cGUoKSAh
PSBWYXJpYWJsZSkKKyAgICAgICAgcmV0dXJuIChtYXJnaW4udHlwZSgpID09IEZpeGVkID8gbWFy
Z2luLnZhbHVlKCkgOiBvYmplY3QoKS0+bWFyZ2luTGVmdCgpKTsKICAgICByZXR1cm4gMDsKIH0K
IApAQCAtOTQsOCArOTQsOCBAQCBpbnQgSW5saW5lRmxvd0JveDo6bWFyZ2luUmlnaHQoKQogICAg
IAogICAgIFJlbmRlclN0eWxlKiBjc3R5bGUgPSBvYmplY3QoKS0+c3R5bGUoKTsKICAgICBMZW5n
dGggbWFyZ2luID0gY3N0eWxlLT5tYXJnaW5SaWdodCgpOwotICAgIGlmIChtYXJnaW4udHlwZSAh
PSBWYXJpYWJsZSkKLSAgICAgICAgcmV0dXJuIChtYXJnaW4udHlwZSA9PSBGaXhlZCA/IG1hcmdp
bi52YWx1ZSA6IG9iamVjdCgpLT5tYXJnaW5SaWdodCgpKTsKKyAgICBpZiAobWFyZ2luLnR5cGUo
KSAhPSBWYXJpYWJsZSkKKyAgICAgICAgcmV0dXJuIChtYXJnaW4udHlwZSgpID09IEZpeGVkID8g
bWFyZ2luLnZhbHVlKCkgOiBvYmplY3QoKS0+bWFyZ2luUmlnaHQoKSk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTE0Myw5ICsxNDMsMTAgQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpwcmV2T25MaW5l
RXhpc3RzKCkKIAogYm9vbCBJbmxpbmVGbG93Qm94OjpvbkVuZENoYWluKFJlbmRlck9iamVjdCog
ZW5kT2JqZWN0KQogeworI2lmIDAJLy8gRklYTUU6IG5lZWRzIG1lcmdlCiAgICAgaWYgKCFlbmRP
YmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmIChlbmRPYmplY3Qg
PT0gb2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xNTksMjIgKzE2MCwyNCBA
QCBib29sIElubGluZUZsb3dCb3g6Om9uRW5kQ2hhaW4oUmVuZGVyT2JqCiAgICAgfQogCiAgICAg
cmV0dXJuIHRydWU7CisjZW5kaWYKIH0KIAogdm9pZCBJbmxpbmVGbG93Qm94OjpkZXRlcm1pbmVT
cGFjaW5nRm9yRmxvd0JveGVzKGJvb2wgbGFzdExpbmUsIFJlbmRlck9iamVjdCogZW5kT2JqZWN0
KQogeworI2lmIDAJLy8gRklYTUU6IG5lZWRzIG1lcmdlCiAgICAgLy8gQWxsIGJveGVzIHN0YXJ0
IG9mZiBvcGVuLiAgVGhleSB3aWxsIG5vdCBhcHBseSBhbnkgbWFyZ2lucy9ib3JkZXIvcGFkZGlu
ZyBvbgogICAgIC8vIGFueSBzaWRlLgogICAgIGJvb2wgaW5jbHVkZUxlZnRFZGdlID0gZmFsc2U7
CiAgICAgYm9vbCBpbmNsdWRlUmlnaHRFZGdlID0gZmFsc2U7CiAKICAgICBSZW5kZXJGbG93KiBm
bG93ID0gc3RhdGljX2Nhc3Q8UmVuZGVyRmxvdyo+KG9iamVjdCgpKTsKLSAgICAKKwogICAgIGlm
ICghZmxvdy0+Zmlyc3RDaGlsZCgpKQogICAgICAgICBpbmNsdWRlTGVmdEVkZ2UgPSBpbmNsdWRl
UmlnaHRFZGdlID0gdHJ1ZTsgLy8gRW1wdHkgaW5saW5lcyBuZXZlciBzcGxpdCBhY3Jvc3MgbGlu
ZXMuCiAgICAgZWxzZSBpZiAocGFyZW50KCkpIHsgLy8gVGhlIHJvb3QgaW5saW5lIGJveCBuZXZl
ciBoYXMgYm9yZGVycy9tYXJnaW5zL3BhZGRpbmcuCiAgICAgICAgIGJvb2wgbHRyID0gZmxvdy0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSOwotICAgICAgICAKKwogICAgICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgYWxsIGluaXRpYWwgbGluZXMgYXJlIHVuY29uc3RydWN0ZWQuICBJZiBzbywg
dGhlbgogICAgICAgICAvLyB3ZSBrbm93IHRoZSBpbmxpbmUgYmVnYW4gb24gdGhpcyBsaW5lLgog
ICAgICAgICBpZiAoIWZsb3ctPmZpcnN0TGluZUJveCgpLT5pc0NvbnN0cnVjdGVkKCkpIHsKQEAg
LTIxNywxMCArMjIwLDEyIEBAIHZvaWQgSW5saW5lRmxvd0JveDo6ZGV0ZXJtaW5lU3BhY2luZ0Zv
ckYKICAgICAgICAgICAgIGN1cnJGbG93LT5kZXRlcm1pbmVTcGFjaW5nRm9yRmxvd0JveGVzKGxh
c3RMaW5lLCBlbmRPYmplY3QpOwogICAgICAgICB9CiAgICAgfQorI2VuZGlmCiB9CiAKIGludCBJ
bmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4KQogeworI2lmIDAJLy8g
RklYTUU6IG5lZWRzIG1lcmdlCiAgICAgLy8gU2V0IG91ciB4IHBvc2l0aW9uLgogICAgIHNldFhQ
b3MoeCk7CiAKQEAgLTI1NywxMCArMjYyLDE0IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJv
eGVzSG9yaXpvbnRhbGwKICAgICB4ICs9IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKTsK
ICAgICBzZXRXaWR0aCh4LXN0YXJ0WCk7CiAgICAgcmV0dXJuIHg7CisjZWxzZQorICByZXR1cm4g
MDsKKyNlbmRpZgogfQogCiB2b2lkIElubGluZUZsb3dCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVz
KGludCYgaGVpZ2h0T2ZCbG9jaykKIHsKKyNpZiAwCS8vIEZJWE1FOiBuZWVkcyBtZXJnZQogICAg
IGludCBtYXhQb3NpdGlvblRvcCA9IDA7CiAgICAgaW50IG1heFBvc2l0aW9uQm90dG9tID0gMDsK
ICAgICBpbnQgbWF4QXNjZW50ID0gMDsKQEAgLTI3MSw3ICsyODAsNyBAQCB2b2lkIElubGluZUZs
b3dCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzCiAgICAgd2hpbGUgKGN1cnIgJiYgIWN1cnItPmVs
ZW1lbnQoKSkKICAgICAgICAgY3VyciA9IGN1cnItPmNvbnRhaW5lcigpOwogICAgIGJvb2wgc3Ry
aWN0TW9kZSA9IChjdXJyICYmIGN1cnItPmVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+aW5TdHJp
Y3RNb2RlKCkpOwotICAgIAorCiAgICAgY29tcHV0ZUxvZ2ljYWxCb3hIZWlnaHRzKG1heFBvc2l0
aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSwgbWF4QXNjZW50LCBtYXhEZXNjZW50LCBzdHJpY3RN
b2RlKTsKIAogICAgIGlmIChtYXhBc2NlbnQgKyBtYXhEZXNjZW50IDwgUU1BWChtYXhQb3NpdGlv
blRvcCwgbWF4UG9zaXRpb25Cb3R0b20pKQpAQCAtMjg5LDYgKzI5OCw3IEBAIHZvaWQgSW5saW5l
Rmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMKICAgICAgICAgc2hyaW5rQm94ZXNXaXRoTm9U
ZXh0Q2hpbGRyZW4odG9wUG9zaXRpb24sIGJvdHRvbVBvc2l0aW9uKTsKICAgICAKICAgICBoZWln
aHRPZkJsb2NrICs9IG1heEhlaWdodDsKKyNlbmRpZgogfQogCiB2b2lkIElubGluZUZsb3dCb3g6
OmFkanVzdE1heEFzY2VudEFuZERlc2NlbnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2Vu
dCwKQEAgLTMxOSw2ICszMjksNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkanVzdE1heEFzY2Vu
dEFuZERlCiB2b2lkIElubGluZUZsb3dCb3g6OmNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhpbnQm
IG1heFBvc2l0aW9uVG9wLCBpbnQmIG1heFBvc2l0aW9uQm90dG9tLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVz
Y2VudCwgYm9vbCBzdHJpY3RNb2RlKQogeworI2lmIDAJLy8gRklYTUU6IG5lZWRzIG1lcmdlCiAg
ICAgaWYgKGlzUm9vdElubGluZUJveCgpKSB7CiAgICAgICAgIC8vIEV4YW1pbmUgb3VyIHJvb3Qg
Ym94LgogICAgICAgICBzZXRIZWlnaHQob2JqZWN0KCktPmxpbmVIZWlnaHQobV9maXJzdExpbmUp
KTsKQEAgLTMzOCw3ICszNDksNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbXB1dGVMb2dpY2Fs
Qm94SGVpCiAgICAgICAgICAgICAgICAgbWF4RGVzY2VudCA9IGRlc2NlbnQ7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgCisKICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsg
Y3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewogICAgICAgICBjdXJyLT5zZXRIZWln
aHQoY3Vyci0+b2JqZWN0KCktPmxpbmVIZWlnaHQobV9maXJzdExpbmUpKTsKICAgICAgICAgY3Vy
ci0+c2V0QmFzZWxpbmUoY3Vyci0+b2JqZWN0KCktPmJhc2VsaW5lUG9zaXRpb24obV9maXJzdExp
bmUpKTsKQEAgLTM2Myw2ICszNzQsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbXB1dGVMb2dp
Y2FsQm94SGVpCiAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZUZsb3dCb3goKSkKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKS0+Y29tcHV0ZUxvZ2ljYWxCb3hI
ZWlnaHRzKG1heFBvc2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSwgbWF4QXNjZW50LCBtYXhE
ZXNjZW50LCBzdHJpY3RNb2RlKTsKICAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBJbmxpbmVGbG93
Qm94OjpwbGFjZUJveGVzVmVydGljYWxseShpbnQgeSwgaW50IG1heEhlaWdodCwgaW50IG1heEFz
Y2VudCwgYm9vbCBzdHJpY3RNb2RlLApAQCAtMzcwLDcgKzM4Miw3IEBAIHZvaWQgSW5saW5lRmxv
d0JveDo6cGxhY2VCb3hlc1ZlcnRpY2FsbHkKIHsKICAgICBpZiAoaXNSb290SW5saW5lQm94KCkp
CiAgICAgICAgIHNldFlQb3MoeSArIG1heEFzY2VudCAtIGJhc2VsaW5lKCkpOy8vIFBsYWNlIG91
ciByb290IGJveC4KLSAgICAKKwogICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmlyc3RDaGls
ZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7CiAgICAgICAgIC8vIEFkanVz
dCBib3hlcyB0byB1c2UgdGhlaXIgcmVhbCBib3ggeS9oZWlnaHQgYW5kIG5vdCB0aGUgbG9naWNh
bCBoZWlnaHQgKGFzIGRpY3RhdGVkIGJ5CiAgICAgICAgIC8vIGxpbmUtaGVpZ2h0KS4KQEAgLTQ1
NywxMCArNDY5LDExIEBAIHZvaWQgSW5saW5lRmxvd0JveDo6c2hyaW5rQm94ZXNXaXRoTm9UZXgK
IHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRCYWNrZ3JvdW5kQW5kQm9yZGVyKFFQYWludGVyICpw
LCBpbnQgX3gsIGludCBfeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfdywgaW50IF9oLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgeE9mZnNldE9uTGlu
ZSkKIHsKKyNpZiAwCS8vIEZJWE1FOiBuZWVkcyBtZXJnZQogICAgIC8vIE1vdmUgeC95IHRvIG91
ciBjb29yZGluYXRlcy4KICAgICBfdHggKz0gbV94OwogICAgIF90eSArPSBtX3k7Ci0gICAgCisK
ICAgICBpbnQgdyA9IHdpZHRoKCk7CiAgICAgaW50IGggPSBoZWlnaHQoKTsKIApAQCAtNTA5LDEw
ICs1MjIsMTIgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91bmRBbmRCbwogICAg
ICAgICBpZiAocGFyZW50KCkgJiYgb2JqZWN0KCktPnN0eWxlKCktPmhhc0JvcmRlcigpKQogICAg
ICAgICAgICAgb2JqZWN0KCktPnBhaW50Qm9yZGVyKHAsIF90eCwgX3R5LCB3LCBoLCBvYmplY3Qo
KS0+c3R5bGUoKSwgaW5jbHVkZUxlZnRFZGdlKCksIGluY2x1ZGVSaWdodEVkZ2UoKSk7CiAgICAg
fQorI2VuZGlmCiB9CiAKIHN0YXRpYyBib29sIHNob3VsZERyYXdEZWNvcmF0aW9uKFJlbmRlck9i
amVjdCogb2JqKQogeworI2lmIDAJLy8gRklYTUU6IG5lZWRzIG1lcmdlCiAgICAgYm9vbCBzaG91
bGREcmF3ID0gZmFsc2U7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBvYmotPmZpcnN0
Q2hpbGQoKTsKICAgICAgICAgIGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CkBA
IC01MjQsMTQgKzUzOSwxNiBAQCBzdGF0aWMgYm9vbCBzaG91bGREcmF3RGVjb3JhdGlvbihSZW5k
ZXJPCiAgICAgICAgICAgICAgICAgICFjdXJyLT5lbGVtZW50KCkgfHwgIWN1cnItPmVsZW1lbnQo
KS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkgewogICAgICAgICAgICAgc2hvdWxkRHJhdyA9
IHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQkKKyAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gc2hvdWxkRHJhdzsKKyNlbmRpZgogfQogCiB2b2lkIElubGluZUZsb3dCb3g6
OnBhaW50RGVjb3JhdGlvbnMoUVBhaW50ZXIgKnAsIGludCBfeCwgaW50IF95LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfdywgaW50IF9oLCBpbnQgX3R4LCBpbnQg
X3R5KQogeworI2lmIDAJLy8gRklYTUU6IG5lZWRzIG1lcmdlCiAgICAgLy8gTm93IHBhaW50IG91
ciB0ZXh0IGRlY29yYXRpb25zLiBXZSBvbmx5IGRvIHRoaXMgaWYgd2UgYXJlbid0IGluIHF1aXJr
cyBtb2RlIChpLmUuLCBpbgogICAgIC8vIGFsbW9zdC1zdHJpY3QgbW9kZSBvciBzdHJpY3QgbW9k
ZSkuCiAgICAgX3R4ICs9IG1feDsKQEAgLTU1OSw0ICs1NzYsNSBAQCB2b2lkIElubGluZUZsb3dC
b3g6OnBhaW50RGVjb3JhdGlvbnMoUVBhCiAgICAgICAgICAgICBwLT5kcmF3TGluZUZvclRleHQo
X3R4LCBfdHksIDIqbV9iYXNlbGluZS8zLCB3KTsKICAgICAgICAgfQogICAgIH0KKyNlbmRpZgog
fQpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hv
bWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIHJlbmRlcl9saW5lLmgKLS0tIHJlbmRlcmlu
Zy9yZW5kZXJfbGluZS5oCTIzIEFwciAyMDAzIDEyOjQwOjU0IC0wMDAwCTEuMQorKysgcmVuZGVy
aW5nL3JlbmRlcl9saW5lLmgJMjMgSnVsIDIwMDMgMjE6MzI6NTMgLTAwMDAKQEAgLTEzMSwxMSAr
MTMxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5leHRMaW5lQm94KElubGluZVJ1bkJveCog
bikgeyBtX25leHRMaW5lID0gbjsgfQogICAgIHZvaWQgc2V0UHJldmlvdXNMaW5lQm94KElubGlu
ZVJ1bkJveCogcCkgeyBtX3ByZXZMaW5lID0gcDsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50
QmFja2dyb3VuZEFuZEJvcmRlcihRUGFpbnRlciAqcCwgaW50IF94LCBpbnQgX3ksCi0gICAgICAg
ICAgICAgICAgICAgICAgIGludCBfdywgaW50IF9oLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgeE9m
ZnNldE9uTGluZSkge307Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50RGVjb3JhdGlvbnMoUVBhaW50
ZXIgKnAsIGludCBfeCwgaW50IF95LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3csIGlu
dCBfaCwgaW50IF90eCwgaW50IF90eSkge307Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50
QmFja2dyb3VuZEFuZEJvcmRlcihRUGFpbnRlciAqLypwKi8sIGludCAvKl94Ki8sIGludCAvKl95
Ki8sCisgICAgICAgICAgICAgICAgICAgICAgIGludCAvKl93Ki8sIGludCAvKl9oKi8sIGludCAv
Kl90eCovLCBpbnQgLypfdHkqLywgaW50IC8qeE9mZnNldE9uTGluZSovKSB7fTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnREZWNvcmF0aW9ucyhRUGFpbnRlciAqLypwKi8sIGludCAvKl94Ki8sIGlu
dCAvKl95Ki8sCisgICAgICAgICAgICAgICAgICAgICAgIGludCAvKl93Ki8sIGludCAvKl9oKi8s
IGludCAvKl90eCovLCBpbnQgLypfdHkqLykge307CisKIHByb3RlY3RlZDoKICAgICBJbmxpbmVS
dW5Cb3gqIG1fcHJldkxpbmU7ICAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQgYWxzbyB1c2VzIG91
ciBSZW5kZXJPYmplY3QKICAgICBJbmxpbmVSdW5Cb3gqIG1fbmV4dExpbmU7ICAvLyBUaGUgbmV4
dCBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdApAQCAtMjE1LDcgKzIxNSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgdG9wUG9zaXRpb24s
IGludCYgYm90dG9tUG9zaXRpb24pOwogICAgIHZvaWQgc2hyaW5rQm94ZXNXaXRoTm9UZXh0Q2hp
bGRyZW4oaW50IHRvcFBvc2l0aW9uLCBpbnQgYm90dG9tUG9zaXRpb24pOwogICAgIAotICAgIHZp
cnR1YWwgdm9pZCBzZXRPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgdG9wLCBpbnQgYm90dG9tKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgLyp0b3AqLywgaW50IC8q
Ym90dG9tKi8pIHt9CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgSW5saW5lQm94KiBtX2ZpcnN0Q2hp
bGQ7CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIxMQpkaWZmIC11IC1wIC1yMS4yMTEgcmVuZGVyX29iamVj
dC5jcHAKLS0tIHJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAkxNyBBcHIgMjAwMyAxNjowNzo0
NiAtMDAwMAkxLjIxMQorKysgcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTIzIEp1bCAyMDAz
IDIxOjMyOjU0IC0wMDAwCkBAIC05NjYsOSArOTY2LDEwIEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZVBvc2l0aW9uKGludCAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpjdXJz
b3JQb3MoaW50IC8qb2Zmc2V0Ki8sIGludCAmX3gsIGludCAmX3ksIGludCAmaGVpZ2h0KQordm9p
ZCBSZW5kZXJPYmplY3Q6OmNhcmV0UG9zKGludCAvKm9mZnNldCovLCBib29sIC8qb3ZlcnJpZGUq
LywgaW50ICZfeCwgaW50ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpCiB7CiAgICAgX3gg
PSBfeSA9IGhlaWdodCA9IC0xOworICAgIHdpZHRoID0gMTsKIH0KIAogaW50IFJlbmRlck9iamVj
dDo6cGFkZGluZ1RvcCgpIGNvbnN0CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5k
ZXJfb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUwCmRpZmYgLXUgLXAgLXIxLjE1
MCByZW5kZXJfb2JqZWN0LmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgJMTYgQXByIDIw
MDMgMjI6NTg6MDYgLTAwMDAJMS4xNTAKKysrIHJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgJMjMg
SnVsIDIwMDMgMjE6MzI6NTUgLTAwMDAKQEAgLTQ3Niw3ICs0NzYsMTggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgU2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBT
ZWxlY3Rpb25Ob25lO30KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0
aW9uU3RhdGUpIHt9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3Vyc29yUG9zKGludCAvKm9mZnNldCov
LCBpbnQgJi8qX3gqLywgaW50ICYvKl95Ki8sIGludCAmLypoZWlnaHQqLyk7CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgY29udGVudCBjb29yZGluYXRlcyBvZiB0aGUgY2FyZXQgd2l0aGlu
IHRoaXMgcmVuZGVyIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0IHplcm8tYmFzZWQgb2Zm
c2V0IGRldGVybWluaW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUgcmVuZGVyIG9iamVjdC4KKyAgICAg
KiBAcGFyYW0gb3ZlcnJpZGUgQHAgdHJ1ZSBpZiBpbnB1dCBvdmVycmlkZXMgZXhpc3RpbmcgY2hh
cmFjdGVycywKKyAgICAgKgkJQHAgZmFsc2UgaWYgaXQgaW5zZXJ0cyB0aGVtLiBUaGUgd2lkdGgg
b2YgdGhlIGNhcmV0IGRlcGVuZHMgb24KKyAgICAgKgkJdGhpcyBvbmUuCisgICAgICogQHBhcmFt
IF94IHJldHVybnMgdGhlIGxlZnQgY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSBfeSByZXR1cm5z
IHRoZSB0b3AgY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB3aWR0aCByZXR1cm5zIHRoZSBjYXJl
dCdzIHdpZHRoCisgICAgICogQHBhcmFtIGhlaWdodCByZXR1cm5zIHRoZSBjYXJldCdzIGhlaWdo
dAorICAgICAqLworICAgIHZpcnR1YWwgdm9pZCBjYXJldFBvcyhpbnQgb2Zmc2V0LCBib29sIG92
ZXJyaWRlLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJndpZHRoLCBpbnQgJmhlaWdodCk7CiAKICAg
ICAvLyByZXR1cm5zIHRoZSBsb3dlc3QgcG9zaXRpb24gb2YgdGhlIGxvd2VzdCBvYmplY3QgaW4g
dGhhdCBwYXJ0aWN1bGFyIG9iamVjdC4KICAgICAvLyBUaGlzICdoZWlnaHQnIGlzIHJlbGF0aXZl
IHRvIHRoZSB0b3BsZWZ0IG9mIHRoZSBtYXJnaW4gYm94IG9mIHRoZSBvYmplY3QuCkluZGV4OiBy
ZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUv
a2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41OQpkaWZmIC11IC1wIC1yMS41OSByZW5kZXJfc3R5bGUuY3BwCi0tLSByZW5kZXJp
bmcvcmVuZGVyX3N0eWxlLmNwcAk0IEZlYiAyMDAzIDIxOjM4OjIyIC0wMDAwCTEuNTkKKysrIHJl
bmRlcmluZy9yZW5kZXJfc3R5bGUuY3BwCTIzIEp1bCAyMDAzIDIxOjMyOjU1IC0wMDAwCkBAIC0z
MDcsNiArMzA3LDcgQEAgUmVuZGVyU3R5bGU6OkRpZmYgUmVuZGVyU3R5bGU6OmRpZmYoIGNvbgog
CiAgICAgLy8gTm9uVmlzaWJsZToKIC8vIAlFQ3Vyc29yIF9jdXJzb3Jfc3R5bGUgOiA0OworLy8J
RVVzZXJJbnB1dCBfdXNlcl9pbnB1dCA6IDI7CWFzIGxvbmcgYXMgOmVuYWJsZWQgaXMgbm90IGlt
cGwnZAogCiAvLyAjIyMgdGhpcyBuZWVkcyB3b3JrIHRvIGtub3cgbW9yZSBleGFjdGx5IGlmIHdl
IG5lZWQgYSByZWxheW91dAogLy8gICAgIG9yIGp1c3QgYSByZXBhaW50CkluZGV4OiByZW5kZXJp
bmcvcmVuZGVyX3N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMv
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg3
CmRpZmYgLXUgLXAgLXIxLjg3IHJlbmRlcl9zdHlsZS5oCi0tLSByZW5kZXJpbmcvcmVuZGVyX3N0
eWxlLmgJMTcgQXByIDIwMDMgMTY6MDc6NDYgLTAwMDAJMS44NworKysgcmVuZGVyaW5nL3JlbmRl
cl9zdHlsZS5oCTIzIEp1bCAyMDAzIDIxOjMyOjU2IC0wMDAwCkBAIC00NDUsNiArNDQ1LDEwIEBA
IGVudW0gRUN1cnNvciB7CiAgICAgQ1VSU09SX1NfUkVTSVpFLCBDVVJTT1JfV19SRVNJWkUsIENV
UlNPUl9URVhULCBDVVJTT1JfV0FJVCwgQ1VSU09SX0hFTFAKIH07CiAKK2VudW0gRVVzZXJJbnB1
dCB7CisgICAgVUlfRU5BQkxFRCwgVUlfRElTQUJMRUQsIFVJX05PTkUKK307CisKIGVudW0gQ29u
dGVudFR5cGUgewogICAgIENPTlRFTlRfTk9ORSwgQ09OVEVOVF9PQkpFQ1QsIENPTlRFTlRfVEVY
VCwKICAgICBDT05URU5UX0FUVFIKQEAgLTUxMyw3ICs1MTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICAgICAgLy8gbm9uIENTUzIgaW5oZXJpdGVkCiAgICAgICAgICAgICAgICAgYm9vbCBf
dmlzdWFsbHlPcmRlcmVkIDogMTsKICAgICAgICAgICAgICAgICBib29sIF9odG1sSGFja3MgOjE7
Ci0gICAgICAgICAgICAgICAgaW50IF91bnVzZWQgOiAyOworICAgICAgICAgICAgICAgIEVVc2Vy
SW5wdXQgX3VzZXJfaW5wdXQgOiAyOwogICAgICAgICAgICAgfSBmOwogICAgICAgICAgICAgUV9V
SU5UMzIgX2lmbGFnczsKICAgICAgICAgfTsKQEAgLTU5MCw3ICs1OTQsNyBAQCBwcm90ZWN0ZWQ6
CiAJaW5oZXJpdGVkX2ZsYWdzLmYuX3doaXRlX3NwYWNlID0gTk9STUFMOwogCWluaGVyaXRlZF9m
bGFncy5mLl92aXN1YWxseU9yZGVyZWQgPSBmYWxzZTsKIAlpbmhlcml0ZWRfZmxhZ3MuZi5faHRt
bEhhY2tzPWZhbHNlOwotCWluaGVyaXRlZF9mbGFncy5mLl91bnVzZWQgPSAwOworCWluaGVyaXRl
ZF9mbGFncy5mLl91c2VyX2lucHV0ID0gVUlfTk9ORTsKIAogCW5vbmluaGVyaXRlZF9mbGFncy5m
Ll9kaXNwbGF5ID0gSU5MSU5FOwogCW5vbmluaGVyaXRlZF9mbGFncy5mLl9iZ19yZXBlYXQgPSBS
RVBFQVQ7CkBAIC03NDgsNiArNzUyLDggQEAgcHVibGljOgogCiAgICAgRUN1cnNvciBjdXJzb3Io
KSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWRfZmxhZ3MuZi5fY3Vyc29yX3N0eWxlOyB9CiAKKyAg
ICBFVXNlcklucHV0IHVzZXJJbnB1dCgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZF9mbGFncy5m
Ll91c2VyX2lucHV0OyB9CisKIC8vIGF0dHJpYnV0ZSBzZXR0ZXIgbWV0aG9kcwogCiAgICAgdm9p
ZCBzZXREaXNwbGF5KEVEaXNwbGF5IHYpIHsgIG5vbmluaGVyaXRlZF9mbGFncy5mLl9kaXNwbGF5
ID0gdjsgfQpAQCAtODUzLDYgKzg1OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBhZGRpbmdS
aWdodChMZW5ndGggdikgIHsgIFNFVF9WQVIoc3Vycm91bmQscGFkZGluZy5yaWdodCx2KSB9CiAK
ICAgICB2b2lkIHNldEN1cnNvciggRUN1cnNvciBjICkgeyBpbmhlcml0ZWRfZmxhZ3MuZi5fY3Vy
c29yX3N0eWxlID0gYzsgfQorICAgIAorICAgIHZvaWQgc2V0VXNlcklucHV0KEVVc2VySW5wdXQg
dWkpIHsgaW5oZXJpdGVkX2ZsYWdzLmYuX3VzZXJfaW5wdXQgPSB1aTsgfQogCiAgICAgYm9vbCBo
dG1sSGFja3MoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWRfZmxhZ3MuZi5faHRtbEhhY2tzOyB9
CiAgICAgdm9pZCBzZXRIdG1sSGFja3MoYm9vbCBiPXRydWUpIHsgaW5oZXJpdGVkX2ZsYWdzLmYu
X2h0bWxIYWNrcyA9IGI7IH0KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfdGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90
ZXh0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMDQKZGlmZiAtdSAtcCAtcjEuMjA0IHJl
bmRlcl90ZXh0LmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmNwcAkyMiBNYXIgMjAwMyAy
MToyMDozOCAtMDAwMAkxLjIwNAorKysgcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmNwcAkyMyBKdWwg
MjAwMyAyMTozMjo1NyAtMDAwMApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAwLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMp
IDIwMDIgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBD
b21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MiwzOCArNDIsMzggQEAgdXNp
bmcgbmFtZXNwYWNlIGtodG1sOwogdXNpbmcgbmFtZXNwYWNlIERPTTsKIAogI2lmbmRlZiBOREVC
VUcKLXN0YXRpYyBib29sIGluVGV4dFNsYXZlRGV0YWNoOworc3RhdGljIGJvb2wgaW5UZXh0UnVu
RGV0YWNoOwogI2VuZGlmCiAKLXZvaWQgVGV4dFNsYXZlOjpkZXRhY2goUmVuZGVyQXJlbmEqIHJl
bmRlckFyZW5hKQordm9pZCBUZXh0UnVuOjpkZXRhY2goUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5h
KQogewogI2lmbmRlZiBOREVCVUcKLSAgICBpblRleHRTbGF2ZURldGFjaCA9IHRydWU7CisgICAg
aW5UZXh0UnVuRGV0YWNoID0gdHJ1ZTsKICNlbmRpZgogICAgIGRlbGV0ZSB0aGlzOwogI2lmbmRl
ZiBOREVCVUcKLSAgICBpblRleHRTbGF2ZURldGFjaCA9IGZhbHNlOworICAgIGluVGV4dFJ1bkRl
dGFjaCA9IGZhbHNlOwogI2VuZGlmCiAKICAgICAvLyBSZWNvdmVyIHRoZSBzaXplIGxlZnQgdGhl
cmUgZm9yIHVzIGJ5IG9wZXJhdG9yIGRlbGV0ZSBhbmQgZnJlZSB0aGUgbWVtb3J5LgogICAgIHJl
bmRlckFyZW5hLT5mcmVlKCooc2l6ZV90ICopdGhpcywgdGhpcyk7CiB9CiAKLXZvaWQqIFRleHRT
bGF2ZTo6b3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKSB0
aHJvdygpCit2b2lkKiBUZXh0UnVuOjpvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVu
YSogcmVuZGVyQXJlbmEpIHRocm93KCkKIHsKICAgICByZXR1cm4gcmVuZGVyQXJlbmEtPmFsbG9j
YXRlKHN6KTsKIH0KIAotdm9pZCBUZXh0U2xhdmU6Om9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwdHIs
IHNpemVfdCBzeikKK3ZvaWQgVGV4dFJ1bjo6b3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwgc2l6
ZV90IHN6KQogewotICAgIGFzc2VydChpblRleHRTbGF2ZURldGFjaCk7CisgICAgYXNzZXJ0KGlu
VGV4dFJ1bkRldGFjaCk7CiAKICAgICAvLyBTdGFzaCBzaXplIHdoZXJlIGRldGFjaCBjYW4gZmlu
ZCBpdC4KICAgICAqKHNpemVfdCAqKXB0ciA9IHN6OwogfQogCiAKLXZvaWQgVGV4dFNsYXZlOjpw
YWludFNlbGVjdGlvbihjb25zdCBGb250ICpmLCBSZW5kZXJUZXh0ICp0ZXh0LCBRUGFpbnRlciAq
cCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgdHgsIGludCB0eSwgaW50IHN0YXJ0UG9zLCBpbnQg
ZW5kUG9zKQordm9pZCBUZXh0UnVuOjpwYWludFNlbGVjdGlvbihjb25zdCBGb250ICpmLCBSZW5k
ZXJUZXh0ICp0ZXh0LCBRUGFpbnRlciAqcCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgdHgsIGlu
dCB0eSwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQogewogICAgIGlmKHN0YXJ0UG9zID4gbV9s
ZW4pIHJldHVybjsKICAgICBpZihzdGFydFBvcyA8IDApIHN0YXJ0UG9zID0gMDsKQEAgLTgzLDEy
ICs4MywxMiBAQCB2b2lkIFRleHRTbGF2ZTo6cGFpbnRTZWxlY3Rpb24oY29uc3QgRm9uCiAKICAg
ICB0eSArPSBtX2Jhc2VsaW5lOwogCi0gICAgLy9rZERlYnVnKCA2MDQwICkgPDwgInRleHRTbGF2
ZTo6cGFpbnRpbmcoIiA8PCBzLnN0cmluZygpIDw8ICIpIGF0KCIgPDwgeCtfdHggPDwgIi8iIDw8
IHkrX3R5IDw8ICIpIiA8PCBlbmRsOworICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJ0ZXh0UnVu
OjpwYWludGluZygiIDw8IHMuc3RyaW5nKCkgPDwgIikgYXQoIiA8PCB4K190eCA8PCAiLyIgPDwg
eStfdHkgPDwgIikiIDw8IGVuZGw7CiAgICAgZi0+ZHJhd1RleHQocCwgbV94ICsgdHgsIG1feSAr
IHR5LCB0ZXh0LT5zdHItPnMsIHRleHQtPnN0ci0+bCwgbV9zdGFydCwgbV9sZW4sCiAJCW1fdG9B
ZGQsIG1fcmV2ZXJzZWQgPyBRUGFpbnRlcjo6UlRMIDogUVBhaW50ZXI6OkxUUiwgc3RhcnRQb3Ms
IGVuZFBvcywgYyk7CiB9CiAKLXZvaWQgVGV4dFNsYXZlOjpwYWludERlY29yYXRpb24oIFFQYWlu
dGVyICpwdCwgUmVuZGVyVGV4dCogcCwgaW50IF90eCwgaW50IF90eSwgaW50IGRlY28sIGJvb2wg
YmVnaW4sIGJvb2wgZW5kKQordm9pZCBUZXh0UnVuOjpwYWludERlY29yYXRpb24oIFFQYWludGVy
ICpwdCwgUmVuZGVyVGV4dCogcCwgaW50IF90eCwgaW50IF90eSwgaW50IGRlY28sIGJvb2wgYmVn
aW4sIGJvb2wgZW5kKQogewogICAgIF90eCArPSBtX3g7CiAgICAgX3R5ICs9IG1feTsKQEAgLTEx
NCw3ICsxMTQsNyBAQCB2b2lkIFRleHRTbGF2ZTo6cGFpbnREZWNvcmF0aW9uKCBRUGFpbnRlCiAg
ICAgLy8gc3VwcG9ydCBpdC4gTGFycwogfQogCi12b2lkIFRleHRTbGF2ZTo6cGFpbnRCb3hEZWNv
cmF0aW9ucyhRUGFpbnRlciAqcHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyVGV4dCAqcCwg
aW50IF90eCwgaW50IF90eSwgYm9vbCBiZWdpbiwgYm9vbCBlbmQpCit2b2lkIFRleHRSdW46OnBh
aW50Qm94RGVjb3JhdGlvbnMoUVBhaW50ZXIgKnB0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRl
clRleHQgKnAsIGludCBfdHgsIGludCBfdHksIGJvb2wgYmVnaW4sIGJvb2wgZW5kKQogewogICAg
IGludCB0b3BFeHRyYSA9IHAtPmJvcmRlclRvcCgpICsgcC0+cGFkZGluZ1RvcCgpOwogICAgIGlu
dCBib3R0b21FeHRyYSA9IHAtPmJvcmRlckJvdHRvbSgpICsgcC0+cGFkZGluZ0JvdHRvbSgpOwpA
QCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgVGV4dFNsYXZlOjpwYWludEJveERlY29yYXRpb25zKFFQ
YWkKICAgICAgICAgcC0+cGFpbnRCb3JkZXIocHQsIF90eCwgX3R5LCB3aWR0aCwgaGVpZ2h0LCBz
dHlsZSwgYmVnaW4sIGVuZCk7CiB9CiAKLUZpbmRTZWxlY3Rpb25SZXN1bHQgVGV4dFNsYXZlOjpj
aGVja1NlbGVjdGlvblBvaW50KGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBjb25z
dCBGb250ICpmLCBSZW5kZXJUZXh0ICp0ZXh0LCBpbnQgJiBvZmZzZXQsIHNob3J0IGxpbmVIZWln
aHQpCitGaW5kU2VsZWN0aW9uUmVzdWx0IFRleHRSdW46OmNoZWNrU2VsZWN0aW9uUG9pbnQoaW50
IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQg
KnRleHQsIGludCAmIG9mZnNldCwgc2hvcnQgbGluZUhlaWdodCkKIHsKLS8vICAgICAgIGtkRGVi
dWcoNjA0MCkgPDwgIlRleHRTbGF2ZTo6Y2hlY2tTZWxlY3Rpb25Qb2ludCAiIDw8IHRoaXMgPDwg
IiBfeD0iIDw8IF94IDw8ICIgX3k9IiA8PCBfeQorLy8gICAgICAga2REZWJ1Zyg2MDQwKSA8PCAi
VGV4dFJ1bjo6Y2hlY2tTZWxlY3Rpb25Qb2ludCAiIDw8IHRoaXMgPDwgIiBfeD0iIDw8IF94IDw8
ICIgX3k9IiA8PCBfeQogLy8gICAgICAgICAgICAgICAgICAgICA8PCAiIF90eCttX3g9IiA8PCBf
dHgrbV94IDw8ICIgX3R5K21feT0iIDw8IF90eSttX3kgPDwgZW5kbDsKICAgICBvZmZzZXQgPSAw
OwogCkBAIC0xNzcsNyArMTc3LDcgQEAgRmluZFNlbGVjdGlvblJlc3VsdCBUZXh0U2xhdmU6OmNo
ZWNrU2VsZQogICAgIH0KIAogICAgIGludCBkZWx0YSA9IF94IC0gKF90eCArIG1feCk7Ci0gICAg
Ly9rZERlYnVnKDYwNDApIDw8ICJUZXh0U2xhdmU6OmNoZWNrU2VsZWN0aW9uUG9pbnQgZGVsdGE9
IiA8PCBkZWx0YSA8PCBlbmRsOworICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAiVGV4dFJ1bjo6Y2hl
Y2tTZWxlY3Rpb25Qb2ludCBkZWx0YT0iIDw8IGRlbHRhIDw8IGVuZGw7CiAgICAgaW50IHBvcyA9
IDA7CiAgICAgaWYgKCBtX3JldmVyc2VkICkgewogCWRlbHRhIC09IG1fd2lkdGg7CkBAIC0yMDYs
MjMgKzIwNiw0NCBAQCBGaW5kU2VsZWN0aW9uUmVzdWx0IFRleHRTbGF2ZTo6Y2hlY2tTZWxlCiAg
ICAgcmV0dXJuIFNlbGVjdGlvblBvaW50SW5zaWRlOwogfQogCitpbnQgVGV4dFJ1bjo6b2Zmc2V0
Rm9yUG9pbnQoaW50IF94LCBpbnQgJmF4KSB7CisgIFJlbmRlclRleHQgKnQgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0ICo+KG9iamVjdCgpKTsKKyAgUUZvbnRNZXRyaWNzICZmbSA9IHQtPm1ldHJp
Y3MobV9maXJzdExpbmUpOworCisgIC8vIERvIGJpbmFyeSBzZWFyY2ggZm9yIGZpbmRpbmcgb3V0
IG9mZnNldCwgc2F2ZXMgc29tZSB0aW1lIGZvciBsb25nCisgIC8vIHJ1bnMuCisgIGludCBzdGFy
dCA9IDA7CisgIGludCBlbmQgPSBtX2xlbjsKKyAgYXggPSBtX3g7CisgIGludCBvZmZzZXQgPSAo
c3RhcnQgKyBlbmQpIC8gMjsKKyAgd2hpbGUgKGVuZCAtIHN0YXJ0ID4gMSkgeworICAgIFFDb25z
dFN0cmluZyB0ZWtzdCh0LT5zdHItPnMgKyBtX3N0YXJ0ICsgc3RhcnQsIG1fc3RhcnQgKyBlbmQg
LSBzdGFydCk7CisgICAgYXggPSBtX3ggKyBmbS53aWR0aCh0ZWtzdC5zdHJpbmcoKSwgb2Zmc2V0
KTsKKyAgICBpZiAoYXggPiBfeCkgZW5kID0gb2Zmc2V0OworICAgIGVsc2UgaWYgKGF4IDwgX3gp
IHN0YXJ0ID0gb2Zmc2V0OworICAgIGVsc2UgYnJlYWs7CisgICAgb2Zmc2V0ID0gKHN0YXJ0ICsg
ZW5kKSAvIDI7CisgIH0vKndlbmQqLworICByZXR1cm4gbV9zdGFydCArIG9mZnNldDsKK30KKwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGV4dFNsYXZlQXJyYXk6OlRleHRTbGF2ZUFycmF5
KCkKK1RleHRSdW5BcnJheTo6VGV4dFJ1bkFycmF5KCkKIHsKICAgICBzZXRBdXRvRGVsZXRlKGZh
bHNlKTsKIH0KIAotaW50IFRleHRTbGF2ZUFycmF5Ojpjb21wYXJlSXRlbXMoIEl0ZW0gZDEsIEl0
ZW0gZDIgKQoraW50IFRleHRSdW5BcnJheTo6Y29tcGFyZUl0ZW1zKCBJdGVtIGQxLCBJdGVtIGQy
ICkKIHsKICAgICBhc3NlcnQoZDEpOwogICAgIGFzc2VydChkMik7CiAKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGV4dFNsYXZlKj4oZDEpLT5tX3kgLSBzdGF0aWNfY2FzdDxUZXh0U2xhdmUqPihk
MiktPm1feTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFJ1bio+KGQxKS0+bV95IC0gc3Rh
dGljX2Nhc3Q8VGV4dFJ1bio+KGQyKS0+bV95OwogfQogCiAvLyByZW1vdmUgdGhpcyBvbmNlIFFW
ZWN0b3I6OmJzZWFyY2ggaXMgZml4ZWQKLWludCBUZXh0U2xhdmVBcnJheTo6ZmluZEZpcnN0TWF0
Y2hpbmcoSXRlbSBkKSBjb25zdAoraW50IFRleHRSdW5BcnJheTo6ZmluZEZpcnN0TWF0Y2hpbmco
SXRlbSBkKSBjb25zdAogewogICAgIGludCBsZW4gPSBjb3VudCgpOwogCkBAIC0yNzUsMTAgKzI5
NiwxMCBAQCBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KERPTTo6Tm9kZUltcGwqIG5vCiAgICAgbV9z
ZWxlY3Rpb25TdGF0ZSA9IFNlbGVjdGlvbk5vbmU7CiAgICAgbV9oYXNSZXR1cm4gPSB0cnVlOwog
Ci0jaWZkZWYgREVCVUdfTEFZT1VUCisvLyNpZmRlZiBERUJVR19MQVlPVVQKICAgICBRQ29uc3RT
dHJpbmcgY3N0cihzdHItPnMsIHN0ci0+bCk7CiAgICAga2REZWJ1ZyggNjA0MCApIDw8ICJSZW5k
ZXJUZXh0IGN0ciggIjw8IGNzdHIuc3RyaW5nKCkubGVuZ3RoKCkgPDwgIiApICAnIiA8PCBjc3Ry
LnN0cmluZygpIDw8ICInIiA8PCBlbmRsOwotI2VuZGlmCisvLyNlbmRpZgogfQogCiB2b2lkIFJl
bmRlclRleHQ6OnNldFN0eWxlKFJlbmRlclN0eWxlICpfc3R5bGUpCkBAIC0yOTcsMTggKzMxOCwx
OCBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFN0eWxlKFJlbmRlclN0eWxlICpfCiAKIFJlbmRlclRl
eHQ6On5SZW5kZXJUZXh0KCkKIHsKLSAgICBkZWxldGVTbGF2ZXMoIHJlbmRlckFyZW5hKCkgKTsK
KyAgICBkZWxldGVSdW5zKCByZW5kZXJBcmVuYSgpICk7CiAgICAgaWYoc3RyKSBzdHItPmRlcmVm
KCk7CiB9CiAKIAogdm9pZCBSZW5kZXJUZXh0OjpkZXRhY2goUmVuZGVyQXJlbmEqIHJlbmRlckFy
ZW5hKQogewotICAgIGRlbGV0ZVNsYXZlcyhyZW5kZXJBcmVuYSk7CisgICAgZGVsZXRlUnVucyhy
ZW5kZXJBcmVuYSk7CiAgICAgUmVuZGVyT2JqZWN0OjpkZXRhY2gocmVuZGVyQXJlbmEpOwogfQog
Ci12b2lkIFJlbmRlclRleHQ6OmRlbGV0ZVNsYXZlcyhSZW5kZXJBcmVuYSAqYXJlbmEpCit2b2lk
IFJlbmRlclRleHQ6OmRlbGV0ZVJ1bnMoUmVuZGVyQXJlbmEgKmFyZW5hKQogewogICAgIC8vIHRo
aXMgaXMgYSBzbGlnaHQgdmFyaWFudCBvZiBRQXJyYXk6OmNsZWFyKCkuCiAgICAgLy8gV2UgZG9u
J3QgZGVsZXRlIHRoZSBhcnJheSBpdHNlbGYgaGVyZSBiZWNhdXNlIGl0cwpAQCAtMzE5LDcgKzM0
MCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6ZGVsZXRlU2xhdmVzKFJlbmRlckFyZW4KICAgICAgICAg
aWYgKCFhcmVuYSkKICAgICAgICAgICAgIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKICAgICAgICAg
Zm9yKHVuc2lnbmVkIGludCBpPTA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgVGV4dFNs
YXZlKiBzID0gbV9saW5lcy5hdChpKTsKKyAgICAgICAgICAgIFRleHRSdW4qIHMgPSBtX2xpbmVz
LmF0KGkpOwogICAgICAgICAgICAgaWYgKHMpCiAgICAgICAgICAgICAgICAgcy0+ZGV0YWNoKGFy
ZW5hKTsKICAgICAgICAgbV9saW5lcy5yZW1vdmUoaSk7CkBAIC0zMjksMTcgKzM1MCwxNyBAQCB2
b2lkIFJlbmRlclRleHQ6OmRlbGV0ZVNsYXZlcyhSZW5kZXJBcmVuCiAgICAgS0hUTUxBc3NlcnQo
bV9saW5lcy5jb3VudCgpID09IDApOwogfQogCi1UZXh0U2xhdmUgKiBSZW5kZXJUZXh0OjpmaW5k
VGV4dFNsYXZlKCBpbnQgb2Zmc2V0LCBpbnQgJnBvcyApCitUZXh0UnVuICogUmVuZGVyVGV4dDo6
ZmluZFRleHRSdW4oIGludCBvZmZzZXQsIGludCAmcG9zICkKIHsKLSAgICAvLyBUaGUgdGV4dCBz
bGF2ZXMgcG9pbnQgdG8gcGFydHMgb2YgdGhlIHJlbmRlcnRleHQncyBzdHIgc3RyaW5nCisgICAg
Ly8gVGhlIHRleHQgcnVucyBwb2ludCB0byBwYXJ0cyBvZiB0aGUgcmVuZGVydGV4dCdzIHN0ciBz
dHJpbmcKICAgICAvLyAodGhleSBkb24ndCBpbmNsdWRlICdcbicpCi0gICAgLy8gRmluZCB0aGUg
dGV4dCBzbGF2ZSB0aGF0IGluY2x1ZGVzIHRoZSBjaGFyYWN0ZXIgYXQgQHAgb2Zmc2V0Ci0gICAg
Ly8gYW5kIHJldHVybiBwb3MsIHdoaWNoIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhciBpbiB0
aGUgc2xhdmUuCisgICAgLy8gRmluZCB0aGUgdGV4dCBydW4gdGhhdCBpbmNsdWRlcyB0aGUgY2hh
cmFjdGVyIGF0IEBwIG9mZnNldAorICAgIC8vIGFuZCByZXR1cm4gcG9zLCB3aGljaCBpcyB0aGUg
cG9zaXRpb24gb2YgdGhlIGNoYXIgaW4gdGhlIHJ1bi4KIAogICAgIGlmICggbV9saW5lcy5pc0Vt
cHR5KCkgKQogICAgICAgICByZXR1cm4gMEw7CiAKLSAgICBUZXh0U2xhdmUqIHMgPSBtX2xpbmVz
WzBdOworICAgIFRleHRSdW4qIHMgPSBtX2xpbmVzWzBdOwogICAgIHVpbnQgc2kgPSAwOwogICAg
IGludCBvZmYgPSBzLT5tX2xlbjsKICAgICB3aGlsZShvZmZzZXQgPiBvZmYgJiYgKytzaSA8IG1f
bGluZXMuY291bnQoKSkKQEAgLTM0Nyw4ICszNjgsOSBAQCBUZXh0U2xhdmUgKiBSZW5kZXJUZXh0
OjpmaW5kVGV4dFNsYXZlKCBpCiAgICAgICAgIHMgPSBtX2xpbmVzW3NpXTsKICAgICAgICAgb2Zm
ID0gcy0+bV9zdGFydCArIHMtPm1fbGVuOwogICAgIH0KLSAgICAvLyB3ZSBhcmUgbm93IGluIHRo
ZSBjb3JyZWN0IHRleHQgc2xhdmUKKyAgICAvLyB3ZSBhcmUgbm93IGluIHRoZSBjb3JyZWN0IHRl
eHQgcnVuCiAgICAgcG9zID0gKG9mZnNldCA+IG9mZiA/IHMtPm1fbGVuIDogb2Zmc2V0IC0gcy0+
bV9zdGFydCApOworICAgIGtkRGVidWcoNjA0MCkgPDwgIm9mZnNldD0iIDw8IG9mZnNldCA8PCAi
IHMtPm1fc3RhcnQ9IiA8PCBzLT5tX3N0YXJ0IDw8IGVuZGw7CiAgICAgcmV0dXJuIHM7CiB9CiAK
QEAgLTM2NCw3ICszODYsNyBAQCBib29sIFJlbmRlclRleHQ6Om5vZGVBdFBvaW50KE5vZGVJbmZv
JiBpCiAKICAgICBib29sIGluc2lkZSA9IGZhbHNlOwogICAgIGlmIChzdHlsZSgpLT52aXNpYmls
aXR5KCkgIT0gSElEREVOKSB7Ci0gICAgICAgIFRleHRTbGF2ZSAqcyA9IG1fbGluZXMuY291bnQo
KSA/IG1fbGluZXNbMF0gOiAwOworICAgICAgICBUZXh0UnVuICpzID0gbV9saW5lcy5jb3VudCgp
ID8gbV9saW5lc1swXSA6IDA7CiAgICAgICAgIGludCBzaSA9IDA7CiAgICAgICAgIHdoaWxlKHMp
IHsKICAgICAgICAgICAgIGlmKChfeSA+PV90eSArIHMtPm1feSkgJiYgKF95IDwgX3R5ICsgcy0+
bV95ICsgaGVpZ2h0KSAmJgpAQCAtNDA1LDI0ICs0MjcsMjQgQEAgRmluZFNlbGVjdGlvblJlc3Vs
dCBSZW5kZXJUZXh0OjpjaGVja1NlbAogewogLy8gICAgICAga2REZWJ1Zyg2MDQwKSA8PCAiUmVu
ZGVyVGV4dDo6Y2hlY2tTZWxlY3Rpb25Qb2ludCAiIDw8IHRoaXMgPDwgIiBfeD0iIDw8IF94IDw8
ICIgX3k9IiA8PCBfeQogLy8gICAgICAgICAgICAgICAgICAgICA8PCAiIF90eD0iIDw8IF90eCA8
PCAiIF90eT0iIDw8IF90eSA8PCBlbmRsOwotICAgIFRleHRTbGF2ZSAqbGFzdFBvaW50QWZ0ZXJJ
bmxpbmU9MDsKKyAgICBUZXh0UnVuICpsYXN0UG9pbnRBZnRlcklubGluZT0wOwogCiAgICAgZm9y
KHVuc2lnbmVkIGludCBzaSA9IDA7IHNpIDwgbV9saW5lcy5jb3VudCgpOyBzaSsrKQogICAgIHsK
LSAgICAgICAgVGV4dFNsYXZlKiBzID0gbV9saW5lc1tzaV07CisgICAgICAgIFRleHRSdW4qIHMg
PSBtX2xpbmVzW3NpXTsKICAgICAgICAgaW50IHJlc3VsdDsKICAgICAgICAgY29uc3QgRm9udCAq
ZiA9IGh0bWxGb250KCBzaT09MCApOwogICAgICAgICByZXN1bHQgPSBzLT5jaGVja1NlbGVjdGlv
blBvaW50KF94LCBfeSwgX3R4LCBfdHksIGYsIHRoaXMsIG9mZnNldCwgbV9saW5lSGVpZ2h0KTsK
IAogLy8gICAgICAgICBrZERlYnVnKDYwNDApIDw8ICJSZW5kZXJUZXh0OjpjaGVja1NlbGVjdGlv
blBvaW50ICIgPDwgdGhpcyA8PCAiIGxpbmUgIiA8PCBzaSA8PCAiIHJlc3VsdD0iIDw8IHJlc3Vs
dCA8PCAiIG9mZnNldD0iIDw8IG9mZnNldCA8PCBlbmRsOwotICAgICAgICBpZiAoIHJlc3VsdCA9
PSBTZWxlY3Rpb25Qb2ludEluc2lkZSApIC8vIHgseSBpcyBpbnNpZGUgdGhlIHRleHRzbGF2ZQor
ICAgICAgICBpZiAoIHJlc3VsdCA9PSBTZWxlY3Rpb25Qb2ludEluc2lkZSApIC8vIHgseSBpcyBp
bnNpZGUgdGhlIHRleHRydW4KICAgICAgICAgewogICAgICAgICAgICAgb2Zmc2V0ICs9IHMtPm1f
c3RhcnQ7IC8vIGFkZCB0aGUgb2Zmc2V0IGZyb20gdGhlIHByZXZpb3VzIGxpbmVzCiAgICAgICAg
ICAgICAvL2tkRGVidWcoNjA0MCkgPDwgIlJlbmRlclRleHQ6OmNoZWNrU2VsZWN0aW9uUG9pbnQg
aW5zaWRlIC0+ICIgPDwgb2Zmc2V0IDw8IGVuZGw7CiAgICAgICAgICAgICBub2RlID0gZWxlbWVu
dCgpOwogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdGlvblBvaW50SW5zaWRlOwogICAgICAgICB9
IGVsc2UgaWYgKCByZXN1bHQgPT0gU2VsZWN0aW9uUG9pbnRCZWZvcmUgfHwgcmVzdWx0ID09IFNl
bGVjdGlvblBvaW50QmVmb3JlSW5MaW5lICkgewotICAgICAgICAgICAgLy8geCx5IGlzIGJlZm9y
ZSB0aGUgdGV4dHNsYXZlIC0+IHN0b3AgaGVyZQorICAgICAgICAgICAgLy8geCx5IGlzIGJlZm9y
ZSB0aGUgdGV4dHJ1biAtPiBzdG9wIGhlcmUKICAgICAgICAgICAgIGlmICggc2kgPiAwICYmIGxh
c3RQb2ludEFmdGVySW5saW5lICkgewogICAgICAgICAgICAgICAgIG9mZnNldCA9IGxhc3RQb2lu
dEFmdGVySW5saW5lLT5tX3N0YXJ0ICsgbGFzdFBvaW50QWZ0ZXJJbmxpbmUtPm1fbGVuOwogICAg
ICAgICAgICAgICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAiUmVuZGVyVGV4dDo6Y2hlY2tTZWxlY3Rp
b25Qb2ludCBiZWZvcmUgLT4gIiA8PCBvZmZzZXQgPDwgZW5kbDsKQEAgLTQ0NywyMyArNDY5LDM0
IEBAIEZpbmRTZWxlY3Rpb25SZXN1bHQgUmVuZGVyVGV4dDo6Y2hlY2tTZWwKICAgICByZXR1cm4g
U2VsZWN0aW9uUG9pbnRBZnRlcjsKIH0KIAotdm9pZCBSZW5kZXJUZXh0OjpjdXJzb3JQb3MoaW50
IG9mZnNldCwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZoZWlnaHQpCit2b2lkIFJlbmRlclRleHQ6
OmNhcmV0UG9zKGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGludCAmX3gsIGludCAmX3ksIGlu
dCAmd2lkdGgsIGludCAmaGVpZ2h0KQogewogICBpZiAoIW1fbGluZXMuY291bnQoKSkgewogICAg
IF94ID0gX3kgPSBoZWlnaHQgPSAtMTsKKyAgICB3aWR0aCA9IDE7CiAgICAgcmV0dXJuOwogICB9
CiAKICAgaW50IHBvczsKLSAgVGV4dFNsYXZlICogcyA9IGZpbmRUZXh0U2xhdmUoIG9mZnNldCwg
cG9zICk7CisgIFRleHRSdW4gKiBzID0gZmluZFRleHRSdW4oIG9mZnNldCwgcG9zICk7CisvLyAg
a2REZWJ1Zyg2MDQwKSA8PCAib2Zmc2V0PSI8PG9mZnNldCA8PCAiIHBvcz0iPDxwb3MgPDwgZW5k
bDsKICAgX3kgPSBzLT5tX3k7Ci0gIGhlaWdodCA9IG1fbGluZUhlaWdodDsgLy8gIyMjIGZpcnN0
TGluZSEhISBzLT5tX2hlaWdodDsKIAotICBjb25zdCBRRm9udE1ldHJpY3MgJmZtID0gbWV0cmlj
cyggZmFsc2UgKTsgLy8gIyMjIyB3cm9uZyBmb3IgZmlyc3QtbGluZSEKLSAgUVN0cmluZyB0ZWtz
dChzdHItPnMgKyBzLT5tX3N0YXJ0LCBzLT5tX2xlbik7Ci0gIF94ID0gcy0+bV94ICsgKGZtLmJv
dW5kaW5nUmVjdCh0ZWtzdCwgcG9zKSkucmlnaHQoKTsKLSAgaWYocG9zKQotICAgICAgX3ggKz0g
Zm0ucmlnaHRCZWFyaW5nKCAqKHN0ci0+cyArIHMtPm1fc3RhcnQgKyBwb3MgLSAxICkgKTsKKyAg
Y29uc3QgUUZvbnRNZXRyaWNzICZmbSA9IG1ldHJpY3MoIHMtPm1fZmlyc3RMaW5lICk7CisgIGhl
aWdodCA9IGZtLmhlaWdodCgpOyAvLyBzLT5tX2hlaWdodDsKKworICBRQ29uc3RTdHJpbmcgdGVr
c3Qoc3RyLT5zICsgcy0+bV9zdGFydCwgcy0+bV9sZW4pOworLy8gIF94ID0gcy0+bV94ICsgKGZt
LmJvdW5kaW5nUmVjdCh0ZWtzdCwgcG9zKSkucmlnaHQoKTsKKy8vICBpZihwb3MpCisvLyAgICAg
IF94ICs9IGZtLnJpZ2h0QmVhcmluZyggKihzdHItPnMgKyBzLT5tX3N0YXJ0ICsgcG9zIC0gMSAp
ICk7CisgIF94ID0gcy0+bV94ICsgZm0ud2lkdGgodGVrc3Quc3RyaW5nKCksIHBvcyk7CisgIHdp
ZHRoID0gMTsKKyAgaWYgKG92ZXJyaWRlKSB7CisgICAgd2lkdGggPSBvZmZzZXQgPCBtYXhPZmZz
ZXQoKSA/IGZtLndpZHRoKHN0ci0+c1tvZmZzZXRdKSA6IDE7CisgIH0vKmVuZCBpZiovCisgIGtk
RGVidWcoNjA0MCkgPDwgIl94PSI8PF94IDw8ICIgcy0+bV94PSI8PHMtPm1feAorICAJCTw8ICIg
cy0+bV9zdGFydCI8PHMtPm1fc3RhcnQKKwkJPDwgIiBzLT5tX2xlbiI8PHMtPm1fbGVuIDw8IGVu
ZGw7CiAKICAgaW50IGFic3gsIGFic3k7CiAKQEAgLTQ3MSwxNSArNTA0LDI1IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6Y3Vyc29yUG9zKGludCBvZmZzZXQsIGkKIAogICBpZiAoY2IgJiYgY2IgIT0gdGhp
cyAmJiBjYi0+YWJzb2x1dGVQb3NpdGlvbihhYnN4LGFic3kpKQogICB7CisgICAgLy9rZERlYnVn
KDYwNDApIDw8ICJhYnN4PSIgPDwgYWJzeCA8PCAiIGFic3k9IiA8PCBhYnN5IDw8IGVuZGw7CiAg
ICAgX3ggKz0gYWJzeDsKICAgICBfeSArPSBhYnN5OwogICB9IGVsc2UgewotICAgIC8vIHdlIGRv
bid0IGtub3cgb3VyIGFic29sdXRlIHBvc2l0aW9uLCBhbmQgdGhlcmUgaXMgbm90IHBvaW50IHJl
dHVybmluZworICAgIC8vIHdlIGRvbid0IGtub3cgb3VyIGFic29sdXRlIHBvc2l0aW9uLCBhbmQg
dGhlcmUgaXMgbm8gcG9pbnQgcmV0dXJuaW5nCiAgICAgLy8ganVzdCBhIHJlbGF0aXZlIG9uZQog
ICAgIF94ID0gX3kgPSAtMTsKICAgfQogfQogCitsb25nIFJlbmRlclRleHQ6Om1pbk9mZnNldCgp
IGNvbnN0IHsKKyAgaWYgKCFtX2xpbmVzLmNvdW50KCkpIHJldHVybiAwOworICByZXR1cm4gbV9s
aW5lc1swXS0+bV9zdGFydDsKK30KKworbG9uZyBSZW5kZXJUZXh0OjptYXhPZmZzZXQoKSBjb25z
dCB7CisgIHJldHVybiBzdHItPmw7Cit9CisKIGJvb2wgUmVuZGVyVGV4dDo6YWJzb2x1dGVQb3Np
dGlvbihpbnQgJnhQb3MsIGludCAmeVBvcywgYm9vbCkKIHsKICAgICByZXR1cm4gUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZhbHNlKTsKQEAgLTUwMCw3ICs1NDMs
NyBAQCBib29sIFJlbmRlclRleHQ6OnBvc09mQ2hhcihpbnQgY2hyLCBpbnQgCiAgICAgcGFyZW50
KCktPmFic29sdXRlUG9zaXRpb24oIHgsIHksIGZhbHNlICk7CiAKICAgICBpbnQgcG9zOwotICAg
IFRleHRTbGF2ZSAqIHMgPSBmaW5kVGV4dFNsYXZlKCBjaHIsIHBvcyApOworICAgIFRleHRSdW4g
KiBzID0gZmluZFRleHRSdW4oIGNociwgcG9zICk7CiAKICAgICBpZiAoIHMgKSB7CiAgICAgICAg
IC8vIHMgaXMgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgY2hhcmFjdGVyCkBAIC01MjYsNyArNTY5
LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpwYWludE9iamVjdCggUVBhaW50ZXIgKgogICAgIGludCBv
dyA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpOwogICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHls
ZSA9IGhhc0ZpcnN0TGluZSgpID8gc3R5bGUoKS0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6
OkZJUlNUX0xJTkUpIDogMDsKICAgICBpbnQgZCA9IHN0eWxlKCktPnRleHREZWNvcmF0aW9uKCk7
Ci0gICAgVGV4dFNsYXZlIGYoMCwgeS10eSk7CisgICAgVGV4dFJ1biBmKDAsIHktdHkpOwogICAg
IGludCBzaSA9IG1fbGluZXMuZmluZEZpcnN0TWF0Y2hpbmcoJmYpOwogICAgIC8vIHNvbWV0aGlu
ZyBtYXRjaGluZyBmb3VuZCwgZmluZCB0aGUgZmlyc3Qgb25lIHRvIHBhaW50CiAgICAgYm9vbCBp
c1ByaW50aW5nID0gKHAtPmRldmljZSgpLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQcmludGVy
KTsKQEAgLTU1NCw3ICs1OTcsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnBhaW50T2JqZWN0KCBRUGFp
bnRlciAqCiAgICAgICAgICAgICAvL2tkRGVidWcoNjA0MCkgPDwgdGhpcyA8PCAiIFNlbGVjdGlv
biBmcm9tICIgPDwgc3RhcnRQb3MgPDwgIiB0byAiIDw8IGVuZFBvcyA8PCBlbmRsOwogICAgICAg
ICB9CiAKLSAgICAgICAgVGV4dFNsYXZlKiBzOworICAgICAgICBUZXh0UnVuKiBzOwogICAgICAg
ICBpbnQgbWlueCA9ICAxMDAwMDAwOwogICAgICAgICBpbnQgbWF4eCA9IC0xMDAwMDAwOwogICAg
ICAgICBpbnQgb3V0bGluZWJveF95ID0gbV9saW5lc1tzaV0tPm1feTsKQEAgLTg1NSw2ICs4OTgs
NyBAQCBzaG9ydCBSZW5kZXJUZXh0OjpiYXNlbGluZVBvc2l0aW9uKCBib29sCiAKIHZvaWQgUmVu
ZGVyVGV4dDo6cG9zaXRpb24oaW50IHgsIGludCB5LCBpbnQgZnJvbSwgaW50IGxlbiwgaW50IHdp
ZHRoLCBib29sIHJldmVyc2UsIGJvb2wgZmlyc3RMaW5lLCBpbnQgc3BhY2VBZGQpCiB7CisvL2tk
RGVidWcoNjA0MCkgPDwgInBvc2l0aW9uOiBmcm9tPSI8PGZyb208PCIgbGVuPSI8PGxlbjw8ZW5k
bDsKICAgICAvLyAjIyMgc2hvdWxkIG5vdCBiZSBuZWVkZWQhISEKICAgICAvLyBhc3NlcnRzIHNv
bWV0aW1lcyB3aXRoIHByZSAodGhhdCB1bmlidy1oYW1idXJnIHRlc3RjYXNlKS4gIyMjIGZpbmQg
b3V0IHdoeQogICAgIC8vS0hUTUxBc3NlcnQoIShsZW4gPT0gMCB8fCAoc3RyLT5sICYmIGxlbiA9
PSAxICYmICooc3RyLT5zK2Zyb20pID09ICdcbicpICkpOwpAQCAtODc3LDcgKzkyMSw3IEBAIHZv
aWQgUmVuZGVyVGV4dDo6cG9zaXRpb24oaW50IHgsIGludCB5LCAKICAgICBRQ29uc3RTdHJpbmcg
Y3N0cihjaCwgbGVuKTsKICNlbmRpZgogCi0gICAgVGV4dFNsYXZlICpzID0gbmV3IChyZW5kZXJB
cmVuYSgpKSBUZXh0U2xhdmUoeCwgeSwgZnJvbSwgbGVuLAorICAgIFRleHRSdW4gKnMgPSBuZXcg
KHJlbmRlckFyZW5hKCkpIFRleHRSdW4odGhpcywgeCwgeSwgZnJvbSwgbGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVQb3NpdGlvbiggZmlyc3RMaW5lICksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcmV2ZXJzZSwgc3BhY2VBZGQs
IGZpcnN0TGluZSk7CiAKQEAgLTkzNyw3ICs5ODEsNyBAQCBzaG9ydCBSZW5kZXJUZXh0Ojp3aWR0
aCgpIGNvbnN0CiAgICAgaW50IG1heHggPSAwOwogICAgIC8vIHNsb29vdwogICAgIGZvcih1bnNp
Z25lZCBpbnQgc2kgPSAwOyBzaSA8IG1fbGluZXMuY291bnQoKTsgc2krKykgewotICAgICAgICBU
ZXh0U2xhdmUqIHMgPSBtX2xpbmVzW3NpXTsKKyAgICAgICAgVGV4dFJ1biogcyA9IG1fbGluZXNb
c2ldOwogICAgICAgICBpZihzLT5tX3ggPCBtaW54KQogICAgICAgICAgICAgbWlueCA9IHMtPm1f
eDsKICAgICAgICAgaWYocy0+bV94ICsgcy0+bV93aWR0aCA+IG1heHgpCkluZGV4OiByZW5kZXJp
bmcvcmVuZGVyX3RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9r
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44Mwpk
aWZmIC11IC1wIC1yMS44MyByZW5kZXJfdGV4dC5oCi0tLSByZW5kZXJpbmcvcmVuZGVyX3RleHQu
aAkxNyBNYXkgMjAwMyAyMjoxMjo1OSAtMDAwMAkxLjgzCisrKyByZW5kZXJpbmcvcmVuZGVyX3Rl
eHQuaAkyMyBKdWwgMjAwMyAyMTozMjo1OCAtMDAwMApAQCAtMyw2ICszLDcgQEAKICAqCiAgKiAo
QykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMC0yMDAz
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzIEFw
cGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRp
bXBsLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKKyNpbmNsdWRlICJy
ZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIKIAogI2luY2x1ZGUgPHFwdHJ2ZWN0b3IuaD4KICNpbmNs
dWRlIDxhc3NlcnQuaD4KQEAgLTQwLDIxICs0MiwyMiBAQCBuYW1lc3BhY2Uga2h0bWwKICAgICBj
bGFzcyBSZW5kZXJUZXh0OwogICAgIGNsYXNzIFJlbmRlclN0eWxlOwogCi1jbGFzcyBUZXh0U2xh
dmUKK2NsYXNzIFRleHRSdW4gOiBwdWJsaWMgSW5saW5lQm94CiB7CiBwdWJsaWM6Ci0gICAgVGV4
dFNsYXZlKGludCB4LCBpbnQgeSwgaW50IHN0YXJ0LCBpbnQgbGVuLAorICAgIFRleHRSdW4oUmVu
ZGVyT2JqZWN0ICpvYmosIGludCB4LCBpbnQgeSwgaW50IHN0YXJ0LCBpbnQgbGVuLAogCSAgICAg
IGludCBiYXNlbGluZSwgaW50IHdpZHRoLAogICAgICAgICAgICAgICBib29sIHJldmVyc2VkID0g
ZmFsc2UsIGludCB0b0FkZCA9IDAsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2UpCisgICAgOklubGlu
ZUJveChvYmopCiAgICAgewogICAgICAgICBtX3ggPSB4OwogICAgICAgICBtX3kgPSB5OwotICAg
ICAgICBtX3N0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIG1fbGVuID0gbGVuOwogICAgICAgICBtX2Jh
c2VsaW5lID0gYmFzZWxpbmU7CiAgICAgICAgIG1fd2lkdGggPSB3aWR0aDsKLSAgICAgICAgbV9y
ZXZlcnNlZCA9IHJldmVyc2VkOwogICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKKyAg
ICAgICAgbV9zdGFydCA9IHN0YXJ0OworICAgICAgICBtX2xlbiA9IGxlbjsKKyAgICAgICAgbV9y
ZXZlcnNlZCA9IHJldmVyc2VkOwogICAgICAgICBtX3RvQWRkID0gdG9BZGQ7CiAgICAgfQogCkBA
IC03Myw2ICs3Niw4IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKIAorICAgIHZpcnR1YWwgYm9vbCBp
c1RleHRSdW4oKSB7IHJldHVybiB0cnVlOyB9CisKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbigg
UVBhaW50ZXIgKnB0LCBSZW5kZXJUZXh0KiBwLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgZGVjb3Jh
dGlvbiwgYm9vbCBiZWdpbiwgYm9vbCBlbmQpOwogICAgIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9u
cyhRUGFpbnRlciAqcCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJUZXh0ICpwYXJlbnQsIGlu
dCBfdHgsIGludCBfdHksIGJvb2wgYmVnaW4sIGJvb2wgZW5kKTsKICAgICB2b2lkIHBhaW50U2Vs
ZWN0aW9uKGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQgKnRleHQsIFFQYWludGVyICpwLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGludCB0eCwgaW50IHR5LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3Mp
OwpAQCAtODEsMjYgKzg2LDMzIEBAIHB1YmxpYzoKICAgICBGaW5kU2VsZWN0aW9uUmVzdWx0IGNo
ZWNrU2VsZWN0aW9uUG9pbnQoaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIGNvbnN0
IEZvbnQgKmYsIFJlbmRlclRleHQgKnRleHQsIGludCAmIG9mZnNldCwgc2hvcnQgbGluZWhlaWdo
dCk7CiAKICAgICAvKioKLSAgICAgKiBpZiB0aGlzIHRleHRzbGF2ZSB3YXMgcmVuZGVyZWQgQHJl
ZiBfdHkgcGl4ZWxzIGJlbG93IHRoZSB1cHBlciBlZGdlCisgICAgICogaWYgdGhpcyB0ZXh0IHJ1
biB3YXMgcmVuZGVyZWQgQHJlZiBfdHkgcGl4ZWxzIGJlbG93IHRoZSB1cHBlciBlZGdlCiAgICAg
ICogb2YgYSB2aWV3LCB3b3VsZCB0aGUgQHJlZiBfeSAtY29vcmRpbmF0ZSBiZSBpbnNpZGUgdGhl
IHZlcnRpY2FsIHJhbmdlCiAgICAgICogb2YgdGhpcyBvYmplY3QncyByZXByZXNlbnRhdGlvbj8K
ICAgICAgKi8KICAgICBib29sIGNoZWNrVmVydGljYWxQb2ludChpbnQgX3ksIGludCBfdHksIGlu
dCBfaCwgaW50IGhlaWdodCkKICAgICB7IGlmKChfdHkgKyBtX3kgPiBfeSArIF9oKSB8fCAoX3R5
ICsgbV95ICsgbV9iYXNlbGluZSArIGhlaWdodCA8IF95KSkgcmV0dXJuIGZhbHNlOyByZXR1cm4g
dHJ1ZTsgfQorICAgIAorICAgIC8qKgorICAgICAqIGRldGVybWluZXMgdGhlIG9mZnNldCBpbnRv
IHRoZSBET01TdHJpbmcgb2YgdGhlIGNoYXJhdGVyIHRoZSBnaXZlbiAKKyAgICAgKiBjb29yZGlu
YXRlIHBvaW50cyB0by4KKyAgICAgKiBUaGUgcmV0dXJuZWQgb2Zmc2V0IGlzIG5ldmVyIG91dCBv
ZiByYW5nZS4KKyAgICAgKiBAcGFyYW0gX3ggZ2l2ZW4gY29vcmRpbmF0ZSAocmVsYXRpdmUgdG8g
Y29udGFpbmluZyBibG9jaykKKyAgICAgKiBAcGFyYW0gYXggcmV0dXJucyBleGFjdCBjb29yZGlu
YXRlIHRoZSBvZmZzZXQgY29ycmVzcG9uZHMgdG8KKyAgICAgKgkJKHJlbGF0aXZlIHRvIGNvbnRh
aW5pbmcgYmxvY2spCisgICAgICogQHJldHVybiB0aGUgb2Zmc2V0IChyZWxhdGl2ZSB0byB0aGUg
UmVuZGVyVGV4dCBvYmplY3QsIG5vdCB0byB0aGlzIHJ1bikKKyAgICAgKi8KKyAgICBpbnQgb2Zm
c2V0Rm9yUG9pbnQoaW50IF94LCBpbnQgJmF4KTsKIAogICAgIGludCBtX3N0YXJ0OwotICAgIGlu
dCBtX3k7CiAgICAgdW5zaWduZWQgc2hvcnQgbV9sZW47Ci0gICAgc2hvcnQgbV94OwotICAgIHNo
b3J0IG1fYmFzZWxpbmU7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV93aWR0aDsKIAogICAgIGJvb2wg
bV9yZXZlcnNlZCA6IDE7Ci0gICAgYm9vbCBtX2ZpcnN0TGluZSA6IDE7CiAgICAgaW50IG1fdG9B
ZGQgOiAxNDsgLy8gZm9yIGp1c3RpZmllZCB0ZXh0CiBwcml2YXRlOgogICAgIC8vIHRoaXMgaXMg
anVzdCBmb3IgUVZlY3Rvcjo6YnNlYXJjaC4gRG9uJ3QgdXNlIGl0IG90aGVyd2lzZQotICAgIFRl
eHRTbGF2ZShpbnQgX3gsIGludCBfeSkKKyAgICBUZXh0UnVuKGludCBfeCwgaW50IF95KQorICAg
ICAgICA6SW5saW5lQm94KDApCiAgICAgewogICAgICAgICBtX3ggPSBfeDsKICAgICAgICAgbV95
ID0gX3k7CkBAIC0xMDksMTIgKzEyMSwxMiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBS
ZW5kZXJUZXh0OwogfTsKIAotY2xhc3MgVGV4dFNsYXZlQXJyYXkgOiBwdWJsaWMgUVB0clZlY3Rv
cjxUZXh0U2xhdmU+CitjbGFzcyBUZXh0UnVuQXJyYXkgOiBwdWJsaWMgUVB0clZlY3RvcjxUZXh0
UnVuPgogewogcHVibGljOgotICAgIFRleHRTbGF2ZUFycmF5KCk7CisgICAgVGV4dFJ1bkFycmF5
KCk7CiAKLSAgICBUZXh0U2xhdmUqIGZpcnN0KCk7CisgICAgVGV4dFJ1biogZmlyc3QoKTsKIAog
ICAgIGludAkgIGZpbmRGaXJzdE1hdGNoaW5nKCBJdGVtICkgY29uc3Q7CiAgICAgdmlydHVhbCBp
bnQgY29tcGFyZUl0ZW1zKCBJdGVtLCBJdGVtICk7CkBAIC0xMjIsNyArMTM0LDcgQEAgcHVibGlj
OgogCiBjbGFzcyBSZW5kZXJUZXh0IDogcHVibGljIFJlbmRlck9iamVjdAogewotICAgIGZyaWVu
ZCBjbGFzcyBUZXh0U2xhdmU7CisgICAgZnJpZW5kIGNsYXNzIFRleHRSdW47CiAKIHB1YmxpYzoK
ICAgICBSZW5kZXJUZXh0KERPTTo6Tm9kZUltcGwqIG5vZGUsIERPTTo6RE9NU3RyaW5nSW1wbCAq
X3N0cik7CkBAIC0xMzksNyArMTUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dE9iamVjdCggUVBhaW50ZXIgKiwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgdHgsIGludCB0eSwgUGFpbnRBY3Rpb24gcGFpbnRQaGFzZSk7
CiAKLSAgICB2b2lkIGRlbGV0ZVNsYXZlcyggUmVuZGVyQXJlbmEgKiApOworICAgIHZvaWQgZGVs
ZXRlUnVucyggUmVuZGVyQXJlbmEgKiApOwogICAgIHZvaWQgZGV0YWNoKCBSZW5kZXJBcmVuYSAq
ICk7CiAKICAgICBET006OkRPTVN0cmluZyBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3RyOyB9CkBA
IC0xNzUsNyArMTg3LDcgQEAgcHVibGljOgogICAgIHVzaG9ydCBzdGFydE1pbigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnRNaW47IH0KICAgICB1c2hvcnQgZW5kTWluKCkgY29uc3QgeyByZXR1cm4g
bV9lbmRNaW47IH0KIAotICAgIC8vIHJldHVybnMgdGhlIG1pbmltdW0geCBwb3NpdGlvbiBvZiBh
bGwgc2xhdmVzIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQuCisgICAgLy8gcmV0dXJucyB0aGUgbWlu
aW11bSB4IHBvc2l0aW9uIG9mIGFsbCBydW5zIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQuCiAgICAg
Ly8gZGVmYXVsdHMgdG8gMC4KICAgICBpbnQgbWluWFBvcygpIGNvbnN0OwogCkBAIC0xOTMsNyAr
MjA1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25T
dGF0ZSgpIGNvbnN0IHtyZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTt9CiAgICAgdmlydHVhbCB2b2lk
IHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHMpIHttX3NlbGVjdGlvblN0YXRlID0g
czsgfQotICAgIHZpcnR1YWwgdm9pZCBjdXJzb3JQb3MoaW50IG9mZnNldCwgaW50ICZfeCwgaW50
ICZfeSwgaW50ICZoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBjYXJldFBvcyhpbnQgb2Zmc2V0
LCBib29sIG92ZXJyaWRlLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJndpZHRoLCBpbnQgJmhlaWdo
dCk7CiAgICAgdmlydHVhbCBib29sIGFic29sdXRlUG9zaXRpb24oaW50ICYvKnhQb3MqLywgaW50
ICYvKnlQb3MqLywgYm9vbCBmID0gZmFsc2UpOwogICAgIGJvb2wgcG9zT2ZDaGFyKGludCBjaCwg
aW50ICZ4LCBpbnQgJnkpOwogCkBAIC0yMTAsMTYgKzIyMiwyNSBAQCBwdWJsaWM6CiAKICAgICBE
T006OlRleHRJbXBsICplbGVtZW50KCkgY29uc3QKICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxE
T006OlRleHRJbXBsKj4oUmVuZGVyT2JqZWN0OjplbGVtZW50KCkpOyB9CisgICAgCisgICAgLyoq
IHJldHVybnMgdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZSB0aGUgY2FyZXQgb2Zmc2V0IG1heSBo
YXZlIHRvCisgICAgICogc3RpbGwgcG9pbnQgdG8gYSB2YWxpZCBwb3NpdGlvbi4KKyAgICAgKi8K
KyAgICBsb25nIG1pbk9mZnNldCgpIGNvbnN0OworICAgIC8qKiByZXR1cm5zIHRoZSBoaWdoZXN0
IHBvc3NpYmxlIHZhbHVlIHRoZSBjYXJldCBvZmZzZXQgbWF5IGhhdmUgdG8KKyAgICAgKiBzdGls
bCBwb2ludCB0byBhIHZhbGlkIHBvc2l0aW9uLgorICAgICAqLworICAgIGxvbmcgbWF4T2Zmc2V0
KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50VGV4dE91dGxpbmUoUVBhaW50
ZXIgKnAsIGludCB0eCwgaW50IHR5LCBjb25zdCBRUmVjdCAmcHJldkxpbmUsIGNvbnN0IFFSZWN0
ICZ0aGlzTGluZSwgY29uc3QgUVJlY3QgJm5leHRMaW5lKTsKIAotICAgIC8vIEZpbmQgdGhlIHRl
eHQgc2xhdmUgdGhhdCBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGF0IEBwIG9mZnNldAotICAgIC8v
IGFuZCByZXR1cm4gcG9zLCB3aGljaCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXIgaW4gdGhl
IHNsYXZlLgotICAgIFRleHRTbGF2ZSAqIGZpbmRUZXh0U2xhdmUoIGludCBvZmZzZXQsIGludCAm
cG9zICk7CisgICAgLy8gRmluZCB0aGUgdGV4dCBydW4gdGhhdCBpbmNsdWRlcyB0aGUgY2hhcmFj
dGVyIGF0IEBwIG9mZnNldAorICAgIC8vIGFuZCByZXR1cm4gcG9zLCB3aGljaCBpcyB0aGUgcG9z
aXRpb24gb2YgdGhlIGNoYXIgaW4gdGhlIHJ1bi4KKyAgICBUZXh0UnVuICogZmluZFRleHRSdW4o
IGludCBvZmZzZXQsIGludCAmcG9zICk7CiAKIHByb3RlY3RlZDogLy8gbWVtYmVycwotICAgIFRl
eHRTbGF2ZUFycmF5IG1fbGluZXM7CisgICAgVGV4dFJ1bkFycmF5IG1fbGluZXM7CiAgICAgRE9N
OjpET01TdHJpbmdJbXBsICpzdHI7IC8vCiAKICAgICBzaG9ydCBtX2xpbmVIZWlnaHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2161</attachid>
            <date>2003-08-05 21:40:12 +0000</date>
            <delta_ts>2003-08-09 04:50:09 +0000</delta_ts>
            <desc>proposed big WebCore merges and some utilities</desc>
            <filename>khtml_rendering-big_merge.diff</filename>
            <type>text/plain</type>
            <size>67635</size>
            <attacher name="Leo Savernik">l.savernik</attacher>
            
              <data encoding="base64">SW5kZXg6IE1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJz
L2todG1sL3JlbmRlcmluZy9NYWtlZmlsZS5hbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMwpk
aWZmIC11IC1wIC1yMS4zMyBNYWtlZmlsZS5hbQotLS0gTWFrZWZpbGUuYW0JMjMgQXByIDIwMDMg
MTI6NDA6NTQgLTAwMDAJMS4zMworKysgTWFrZWZpbGUuYW0JNSBBdWcgMjAwMyAxOToyMzoxNCAt
MDAwMApAQCAtMjcsNyArMjcsNyBAQCBsaWJraHRtbHJlbmRlcl9sYV9TT1VSQ0VTID0gXAogCXJl
bmRlcl9pbWFnZS5jcHAgcmVuZGVyX3RhYmxlLmNwcCB0YWJsZV9sYXlvdXQuY3BwIFwKIAlyZW5k
ZXJfcmVwbGFjZWQuY3BwIHJlbmRlcl9mb3JtLmNwcCByZW5kZXJfbGlzdC5jcHAgXAogCXJlbmRl
cl9yb290LmNwcCByZW5kZXJfZnJhbWVzLmNwcCByZW5kZXJfYnIuY3BwIFwKLQlyZW5kZXJfaHRt
bC5jcHAgcmVuZGVyX2JvZHkuY3BwIGZvbnQuY3BwIAorCXJlbmRlcl9odG1sLmNwcCByZW5kZXJf
Ym9keS5jcHAgZm9udC5jcHAgcmVuZGVyX2xpbmUuY3BwCiAKIGxpYmtodG1scmVuZGVyX2xhX01F
VEFTT1VSQ0VTID0gQVVUTwogCkBAIC0zNyw3ICszNyw3IEBAIG5vaW5zdF9IRUFERVJTID0gXAog
CXJlbmRlcl9zdHlsZS5oIHJlbmRlcl9vYmplY3QuaCByZW5kZXJfY29udGFpbmVyLmggcmVuZGVy
X2JveC5oIFwKIAlyZW5kZXJfZmxvdy5oIHJlbmRlcl90ZXh0LmggcmVuZGVyX3RhYmxlLmggcmVu
ZGVyX3JlcGxhY2VkLmggXAogCXJlbmRlcl9mb3JtLmggcmVuZGVyX2xpc3QuaCByZW5kZXJfcm9v
dC5oIHJlbmRlcl9mcmFtZXMuaCBcCi0JcmVuZGVyX2JyLmggcmVuZGVyX2FwcGxldC5oIGZvbnQu
aCB0YWJsZV9sYXlvdXQuaAorCXJlbmRlcl9ici5oIHJlbmRlcl9hcHBsZXQuaCBmb250LmggdGFi
bGVfbGF5b3V0LmggcmVuZGVyX2xpbmUuaAogCiBJTkNMVURFUyA9IC1JJCh0b3Bfc3JjZGlyKS9r
aW1naW8gLUkkKHRvcF9zcmNkaXIpL2tpbyAtSSQodG9wX3NyY2RpcikvZGNvcCBcCiAgLUkkKHRv
cF9zcmNkaXIpL2tmaWxlIC1JJCh0b3Bfc3JjZGlyKS9raHRtbCAtSSQodG9wX3NyY2RpcikgJChh
bGxfaW5jbHVkZXMpCkluZGV4OiBiaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9r
ZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTY1CmRpZmYgLXUgLXAgLXIxLjE2NSBiaWRpLmNwcAotLS0gYmlkaS5jcHAJNiBGZWIgMjAw
MyAwMDozMjo0NiAtMDAwMAkxLjE2NQorKysgYmlkaS5jcHAJNSBBdWcgMjAwMyAxOToyMzoxNiAt
MDAwMApAQCAtMzAzLDYgKzMwMyw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bigpCiAgICAgd2hp
bGUoIG9iaiAmJiBvYmogIT0gZW9yLm9iaiApIHsKICAgICAgICAgaWYoIW9iai0+aXNIaWRkZW4o
KSkgewogICAgICAgICAgICAgLy9rZERlYnVnKDYwNDEpIDw8ICJhcHBlbmRSdW46ICI8PCBzdGFy
dCA8PCAiLyIgPDwgb2JqLT5sZW5ndGgoKSA8PGVuZGw7CisJICAgIFFfQVNTRVJUKHNydW5zICE9
IDApOwogICAgICAgICAgICAgc3J1bnMtPmFwcGVuZCggbmV3IEJpZGlSdW4oc3RhcnQsIG9iai0+
bGVuZ3RoKCksIG9iaiwgY29udGV4dCwgZGlyKSApOwogICAgICAgICB9CiAgICAgICAgIHN0YXJ0
ID0gMDsKQEAgLTM5MSw2ICszOTIsODYgQEAgc3RhdGljIHZvaWQgZW1iZWQoIFFDaGFyOjpEaXJl
Y3Rpb24gZCApCiAgICAgYWRqdXN0RW1iZWRkZGluZyA9IGI7CiB9CiAKK0lubGluZUZsb3dCb3gq
IFJlbmRlckZsb3c6OmNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqIG9iaikKK3sKKyAgICAv
LyBTZWUgaWYgd2UgaGF2ZSBhbiB1bmNvbnN0cnVjdGVkIGxpbmUgYm94IGZvciB0aGlzIG9iamVj
dCB0aGF0IGlzIGFsc28KKyAgICAvLyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaW5lLgorICAgIEtI
VE1MQXNzZXJ0KG9iai0+aXNGbG93KCkgfHwgb2JqID09IHRoaXMpOworICAgIFJlbmRlckZsb3cq
IGZsb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4ob2JqKTsKKworICAgIC8vIEdldCB0aGUg
bGFzdCBib3ggd2UgbWFkZSBmb3IgdGhpcyByZW5kZXIgb2JqZWN0LgorICAgIElubGluZUZsb3dC
b3gqIGJveCA9IGZsb3ctPmxhc3RMaW5lQm94KCk7CisKKyAgICAvLyBJZiB0aGlzIGJveCBpcyBj
b25zdHJ1Y3RlZCB0aGVuIGl0IGlzIGZyb20gYSBwcmV2aW91cyBsaW5lLCBhbmQgd2UgbmVlZAor
ICAgIC8vIHRvIG1ha2UgYSBuZXcgYm94IGZvciBvdXIgbGluZS4gIElmIHRoaXMgYm94IGlzIHVu
Y29uc3RydWN0ZWQgYnV0IGl0IGhhcworICAgIC8vIHNvbWV0aGluZyBmb2xsb3dpbmcgaXQgb24g
dGhlIGxpbmUsIHRoZW4gd2Uga25vdyB3ZSBoYXZlIHRvIG1ha2UgYSBuZXcgYm94CisgICAgLy8g
YXMgd2VsbC4gIEluIHRoaXMgc2l0dWF0aW9uIG91ciBpbmxpbmUgaGFzIGFjdHVhbGx5IGJlZW4g
c3BsaXQgaW4gdHdvIG9uCisgICAgLy8gdGhlIHNhbWUgbGluZSAodGhpcyBjYW4gaGFwcGVuIHdp
dGggdmVyeSBmYW5jeSBsYW5ndWFnZSBtaXh0dXJlcykuCisgICAgaWYgKCFib3ggfHwgYm94LT5p
c0NvbnN0cnVjdGVkKCkgfHwgYm94LT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBtYWtlIGEgbmV3IGJveCBmb3IgdGhpcyByZW5kZXIgb2JqZWN0LiAgT25jZQorICAgICAg
ICAvLyBtYWRlLCB3ZSBuZWVkIHRvIHBsYWNlIGl0IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQg
bGluZS4KKyAgICAgICAgSW5saW5lQm94KiBuZXdCb3ggPSBvYmotPmNyZWF0ZUlubGluZUJveChm
YWxzZSk7CisgICAgICAgIEtIVE1MQXNzZXJ0KG5ld0JveC0+aXNJbmxpbmVGbG93Qm94KCkpOwor
ICAgICAgICBib3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4obmV3Qm94KTsKKwkvLyBG
SVhNRTogbm90IHBvcnRlZCB5ZXQsIGl0IGlzIHNldCBleHBsaWNpdGx5IGluIGNvbXB1dGVQb3Np
dGlvbnMuLi4KKy8vICAgICAgICBib3gtPnNldEZpcnN0TGluZVN0eWxlQml0KG1fZmlyc3RMaW5l
KTsKKworICAgICAgICAvLyBXZSBoYXZlIGEgbmV3IGJveC4gQXBwZW5kIGl0IHRvIHRoZSBpbmxp
bmUgYm94IHdlIGdldCBieSBjb25zdHJ1Y3Rpbmcgb3VyCisgICAgICAgIC8vIHBhcmVudC4gIElm
IHdlIGhhdmUgaGl0IHRoZSBibG9jayBpdHNlbGYsIHRoZW4gfGJveHwgcmVwcmVzZW50cyB0aGUg
cm9vdAorICAgICAgICAvLyBpbmxpbmUgYm94IGZvciB0aGUgbGluZSwgYW5kIGl0IGRvZXNuJ3Qg
aGF2ZSB0byBiZSBhcHBlbmRlZCB0byBhbnkgcGFyZW50CisgICAgICAgIC8vIGlubGluZS4KKyAg
ICAgICAgaWYgKG9iaiAhPSB0aGlzKSB7CisgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBwYXJl
bnRCb3ggPSBjcmVhdGVMaW5lQm94ZXMob2JqLT5wYXJlbnQoKSk7CisgICAgICAgICAgICBwYXJl
bnRCb3gtPmFkZFRvTGluZShib3gpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGJv
eDsKK30KKworSW5saW5lRmxvd0JveCogUmVuZGVyRmxvdzo6Y29uc3RydWN0TGluZShjb25zdCBC
aWRpSXRlcmF0b3IgJnN0YXJ0LCBjb25zdCBCaWRpSXRlcmF0b3IgJmVuZCkKK3sKKyAgICBpZiAo
IXNydW5zKQorICAgICAgICByZXR1cm4gMDsgLy8gV2UgaGFkIG5vIHJ1bnMuIERvbid0IG1ha2Ug
YSByb290IGlubGluZSBib3ggYXQgYWxsLiBUaGUgbGluZSBpcyBlbXB0eS4KKworICAgIElubGlu
ZUZsb3dCb3gqIHBhcmVudEJveCA9IDA7CisgICAgUVB0ckxpc3RJdGVyYXRvcjxCaWRpUnVuPiBp
dCgqc3J1bnMpOworICAgIGZvciAoQmlkaVJ1biAqcjsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0
KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIGJveCBmb3Igb3VyIG9iamVjdC4KKyAgICAgICAgci0+
Ym94ID0gci0+b2JqLT5jcmVhdGVJbmxpbmVCb3goci0+b2JqLT5pc1Bvc2l0aW9uZWQoKSk7CisK
KyAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwYXJlbnQgYm94IHlldCwgb3IgaWYgdGhlIHJ1biBp
cyBub3Qgc2ltcGx5IGEgc2libGluZywKKyAgICAgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIGNvbnN0
cnVjdCBpbmxpbmUgYm94ZXMgYXMgbmVjZXNzYXJ5IHRvIHByb3Blcmx5IGVuY2xvc2UgdGhlCisg
ICAgICAgIC8vIHJ1bidzIGlubGluZSBib3guCisgICAgICAgIGlmICghcGFyZW50Qm94IHx8IChw
YXJlbnRCb3gtPm9iamVjdCgpICE9IHItPm9iai0+cGFyZW50KCkpKQorICAgICAgICAgICAgLy8g
Q3JlYXRlIG5ldyBpbmxpbmUgYm94ZXMgYWxsIHRoZSB3YXkgYmFjayB0byB0aGUgYXBwcm9wcmlh
dGUgaW5zZXJ0aW9uIHBvaW50LgorICAgICAgICAgICAgcGFyZW50Qm94ID0gY3JlYXRlTGluZUJv
eGVzKHItPm9iai0+cGFyZW50KCkpOworCisgICAgICAgIC8vIEFwcGVuZCB0aGUgaW5saW5lIGJv
eCB0byB0aGlzIGxpbmUuCisgICAgICAgIHBhcmVudEJveC0+YWRkVG9MaW5lKHItPmJveCk7Cisg
ICAgfQorCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYSByb290IGlubGluZSBib3guICBJdCBzaG91
bGQgYmUgdW5jb25zdHJ1Y3RlZCBhbmQKKyAgICAvLyBiZSB0aGUgbGFzdCBjb250aW51YXRpb24g
b2Ygb3VyIGxpbmUgbGlzdC4KKyAgICBLSFRNTEFzc2VydChsYXN0TGluZUJveCgpICYmICFsYXN0
TGluZUJveCgpLT5pc0NvbnN0cnVjdGVkKCkpOworCisgICAgLy8gU2V0IGJpdHMgb24gb3VyIGlu
bGluZSBmbG93IGJveGVzIHRoYXQgaW5kaWNhdGUgd2hpY2ggc2lkZXMgc2hvdWxkCisgICAgLy8g
cGFpbnQgYm9yZGVycy9tYXJnaW5zL3BhZGRpbmcuICBUaGlzIGtub3dsZWRnZSB3aWxsIHVsdGlt
YXRlbHkgYmUgdXNlZCB3aGVuCisgICAgLy8gd2UgZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIHBv
c2l0aW9ucyBhbmQgd2lkdGhzIG9mIGFsbCB0aGUgaW5saW5lIGJveGVzIG9uCisgICAgLy8gdGhl
IGxpbmUuCisgICAgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QgPSAwOworICAgIGJvb2wgbGFzdExp
bmUgPSAhZW5kLm9iajsKKyAgICBpZiAoZW5kLm9iaiAmJiBlbmQucG9zID09IDApCisgICAgICAg
IGVuZE9iamVjdCA9IGVuZC5vYmo7CisgICAgLy8gRklYTUU6IHRoaXMgaXMgYSBkdW1teSBjYWxs
LCB0aGUgZnVuY3Rpb24gaGFzIG5vIGltcGxlbWVudGF0aW9uCisgICAgbGFzdExpbmVCb3goKS0+
ZGV0ZXJtaW5lU3BhY2luZ0ZvckZsb3dCb3hlcyhsYXN0TGluZSwgZW5kT2JqZWN0KTsKKworICAg
IC8vIE5vdyBtYXJrIHRoZSBsaW5lIGJveGVzIGFzIGJlaW5nIGNvbnN0cnVjdGVkLgorICAgIGxh
c3RMaW5lQm94KCktPnNldENvbnN0cnVjdGVkKCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGxhc3Qg
bGluZS4KKyAgICByZXR1cm4gbGFzdExpbmVCb3goKTsKK30KIAogLy8gY29sbGVjdHMgb25lIGxp
bmUgb2YgdGhlIHBhcmFncmFwaCBhbmQgdHJhbnNmb3JtcyBpdCB0byB2aXN1YWwgb3JkZXIKIHZv
aWQgUmVuZGVyRmxvdzo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciAmc3RhcnQs
IGNvbnN0IEJpZGlJdGVyYXRvciAmZW5kKQpAQCAtNDA1LDEwICs0ODYsNiBAQCB2b2lkIFJlbmRl
ckZsb3c6OmJpZGlSZW9yZGVyTGluZShjb25zdCBCCiAgICAga2REZWJ1Zyg2MDQxKSA8PCAicmVv
cmRlcmluZyBMaW5lIGZyb20gIiA8PCBzdGFydC5vYmogPDwgIi8iIDw8IHN0YXJ0LnBvcyA8PCAi
IHRvICIgPDwgZW5kLm9iaiA8PCAiLyIgPDwgZW5kLnBvcyA8PCBlbmRsOwogI2VuZGlmCiAKLSAg
ICBRUHRyTGlzdDxCaWRpUnVuPiBydW5zOwotICAgIHJ1bnMuc2V0QXV0b0RlbGV0ZSh0cnVlKTsK
LSAgICBzcnVucyA9ICZydW5zOwotCiAgICAgLy8gICAgY29udGV4dC0+cmVmKCk7CiAKICAgICBk
aXIgPSBRQ2hhcjo6RGlyT047CkBAIC03OTMsNyArODcwLDcgQEAgdm9pZCBSZW5kZXJGbG93Ojpi
aWRpUmVvcmRlckxpbmUoY29uc3QgQgogICAgIC8vIGZpcnN0IGZpbmQgaGlnaGVzdCBhbmQgbG93
ZXN0IGxldmVscwogICAgIHVjaGFyIGxldmVsTG93ID0gMTI4OwogICAgIHVjaGFyIGxldmVsSGln
aCA9IDA7Ci0gICAgQmlkaVJ1biAqciA9IHJ1bnMuZmlyc3QoKTsKKyAgICBCaWRpUnVuICpyID0g
c3J1bnMtPmZpcnN0KCk7CiAKICAgICB3aGlsZSAoIHIgKSB7CiAgICAgICAgIC8vcGFpbnRmKCJs
ZXZlbCA9ICVkXG4iLCByLT5sZXZlbCk7CkBAIC04MDEsNyArODc4LDcgQEAgdm9pZCBSZW5kZXJG
bG93OjpiaWRpUmVvcmRlckxpbmUoY29uc3QgQgogICAgICAgICAgICAgbGV2ZWxIaWdoID0gci0+
bGV2ZWw7CiAgICAgICAgIGlmICggci0+bGV2ZWwgPCBsZXZlbExvdyApCiAgICAgICAgICAgICBs
ZXZlbExvdyA9IHItPmxldmVsOwotICAgICAgICByID0gcnVucy5uZXh0KCk7CisgICAgICAgIHIg
PSBzcnVucy0+bmV4dCgpOwogICAgIH0KIAogICAgIC8vIGltcGxlbWVudHMgcmVvcmRlcmluZyBv
ZiB0aGUgbGluZSAoTDIgYWNjb3JkaW5nIHRvIEJpZGkgc3BlYyk6CkBAIC04MjAsMTcgKzg5Nywx
NyBAQCB2b2lkIFJlbmRlckZsb3c6OmJpZGlSZW9yZGVyTGluZShjb25zdCBCCiAgICAgICAgIGtk
RGVidWcoNjA0MSkgPDwgIiAgICAiIDw8IHIyIDw8ICIgIHN0YXJ0PSIgPDwgcjItPnN0YXJ0IDw8
ICIgIHN0b3A9IiA8PCByMi0+c3RvcCA8PCAiICBsZXZlbD0iIDw8ICh1aW50KXIyLT5sZXZlbCA8
PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpbnQgY291bnQgPSBydW5zLmNvdW50KCkgLSAxOworICAg
IGludCBjb3VudCA9IHNydW5zLT5jb3VudCgpIC0gMTsKIAogICAgIC8vIGRvIG5vdCByZXZlcnNl
IGZvciB2aXN1YWxseSBvcmRlcmVkIHdlYiBzaXRlcwogICAgIGlmKCFzdHlsZSgpLT52aXN1YWxs
eU9yZGVyZWQoKSkgewogICAgICAgICB3aGlsZShsZXZlbEhpZ2ggPj0gbGV2ZWxMb3cpIHsKICAg
ICAgICAgICAgIGludCBpID0gMDsKICAgICAgICAgICAgIHdoaWxlICggaSA8IGNvdW50ICkgewot
ICAgICAgICAgICAgICAgIHdoaWxlKGkgPCBjb3VudCAmJiBydW5zLmF0KGkpLT5sZXZlbCA8IGxl
dmVsSGlnaCkKKyAgICAgICAgICAgICAgICB3aGlsZShpIDwgY291bnQgJiYgc3J1bnMtPmF0KGkp
LT5sZXZlbCA8IGxldmVsSGlnaCkKICAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAg
ICAgICAgIGludCBzdGFydCA9IGk7Ci0gICAgICAgICAgICAgICAgd2hpbGUoaSA8PSBjb3VudCAm
JiBydW5zLmF0KGkpLT5sZXZlbCA+PSBsZXZlbEhpZ2gpCisgICAgICAgICAgICAgICAgd2hpbGUo
aSA8PSBjb3VudCAmJiBzcnVucy0+YXQoaSktPmxldmVsID49IGxldmVsSGlnaCkKICAgICAgICAg
ICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgIGludCBlbmQgPSBpLTE7CiAKQEAgLTgz
OCwxMCArOTE1LDEwIEBAIHZvaWQgUmVuZGVyRmxvdzo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IEIK
ICAgICAgICAgICAgICAgICAgICAgLy9rZERlYnVnKDYwNDEpIDw8ICJyZXZlcnNpbmcgZnJvbSAi
IDw8IHN0YXJ0IDw8ICIgdG8gIiA8PCBlbmQgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAg
Zm9yKGludCBqID0gMDsgaiA8IChlbmQtc3RhcnQrMSkvMjsgaisrKQogICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlSdW4gKmZpcnN0ID0g
cnVucy50YWtlKHN0YXJ0K2opOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlSdW4g
Kmxhc3QgPSBydW5zLnRha2UoZW5kLWotMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnVucy5pbnNlcnQoc3RhcnQraiwgbGFzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnVucy5pbnNlcnQoZW5kLWosIGZpcnN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
aWRpUnVuICpmaXJzdCA9IHNydW5zLT50YWtlKHN0YXJ0K2opOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJpZGlSdW4gKmxhc3QgPSBzcnVucy0+dGFrZShlbmQtai0xKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcnVucy0+aW5zZXJ0KHN0YXJ0K2osIGxhc3QpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNydW5zLT5pbnNlcnQoZW5kLWosIGZpcnN0KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aSsrOwpAQCAtODYwLDQ3ICs5MzcsNTQgQEAgdm9pZCBSZW5kZXJGbG93OjpiaWRpUmVvcmRlckxp
bmUoY29uc3QgQgogICAgICAgICBrZERlYnVnKDYwNDEpIDw8ICIgICAgIiA8PCByMyA8PCBlbmRs
OwogICAgIH0KICNlbmRpZgorfQogCit2b2lkIFJlbmRlckZsb3c6OmNvbXB1dGVQb3NpdGlvbnNG
b3JMaW5lKElubGluZUZsb3dCb3gqIGxpbmVCb3gsIEJpZGlDb250ZXh0KiBlbmRFbWJlZCkKK3sK
ICAgICBpbnQgbWF4UG9zaXRpb25Ub3AgPSAwOwogICAgIGludCBtYXhQb3NpdGlvbkJvdHRvbSA9
IDA7CiAgICAgaW50IG1heEFzY2VudCA9IDA7CiAgICAgaW50IG1heERlc2NlbnQgPSAwOwotICAg
IHIgPSBydW5zLmZpcnN0KCk7CisgICAgQmlkaVJ1biAqciA9IHNydW5zLT5maXJzdCgpOwogICAg
IHdoaWxlICggciApIHsKLSAgICAgICAgci0+aGVpZ2h0ID0gci0+b2JqLT5saW5lSGVpZ2h0KCBm
aXJzdExpbmUgKTsKLQlyLT5iYXNlbGluZSA9IHItPm9iai0+YmFzZWxpbmVQb3NpdGlvbiggZmly
c3RMaW5lICk7CisgICAgICAgIGludCBoZWlnaHQgPSByLT5vYmotPmxpbmVIZWlnaHQoIGZpcnN0
TGluZSApOworCWludCBiYXNlbGluZSA9IHItPm9iai0+YmFzZWxpbmVQb3NpdGlvbiggZmlyc3RM
aW5lICk7CisgICAgICAgIHItPmJveC0+c2V0SGVpZ2h0KGhlaWdodCk7CisJci0+Ym94LT5zZXRC
YXNlbGluZShiYXNlbGluZSk7CiAvLyAJaWYgKCByLT5iYXNlbGluZSA+IHItPmhlaWdodCApCiAv
LyAJICAgIHItPmJhc2VsaW5lID0gci0+aGVpZ2h0OworCS8vIEZJWE1FOiB3aGVyZSBkaWQgdGhp
cyBnbyBpbiBXZWJDb3JlPwogICAgICAgICByLT52ZXJ0aWNhbCA9IHItPm9iai0+dmVydGljYWxQ
b3NpdGlvbkhpbnQoIGZpcnN0TGluZSApOwogICAgICAgICAvL2tkRGVidWcoNjA0MSkgPDwgIm9i
amVjdD0iPDwgci0+b2JqIDw8ICIgaGVpZ2h0PSI8PHItPmhlaWdodDw8IiBiYXNlbGluZT0iPDwg
ci0+YmFzZWxpbmUgPDwgIiB2ZXJ0aWNhbD0iIDw8IHItPnZlcnRpY2FsIDw8ZW5kbDsKICAgICAg
ICAgLy9pbnQgYXNjZW50OwogICAgICAgICBpZiAoIHItPnZlcnRpY2FsID09IFBvc2l0aW9uVG9w
ICkgewotICAgICAgICAgICAgaWYgKCBtYXhQb3NpdGlvblRvcCA8IHItPmhlaWdodCApIG1heFBv
c2l0aW9uVG9wID0gci0+aGVpZ2h0OworICAgICAgICAgICAgaWYgKCBtYXhQb3NpdGlvblRvcCA8
IGhlaWdodCApIG1heFBvc2l0aW9uVG9wID0gaGVpZ2h0OwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKCByLT52ZXJ0aWNhbCA9PSBQb3NpdGlvbkJvdHRvbSApIHsKLSAgICAgICAgICAgIGlm
ICggbWF4UG9zaXRpb25Cb3R0b20gPCByLT5oZWlnaHQgKSBtYXhQb3NpdGlvbkJvdHRvbSA9IHIt
PmhlaWdodDsKKyAgICAgICAgICAgIGlmICggbWF4UG9zaXRpb25Cb3R0b20gPCBoZWlnaHQgKSBt
YXhQb3NpdGlvbkJvdHRvbSA9IGhlaWdodDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGludCBhc2NlbnQgPSByLT5iYXNlbGluZSAtIHItPnZlcnRpY2FsOwotICAgICAg
ICAgICAgaW50IGRlc2NlbnQgPSByLT5oZWlnaHQgLSBhc2NlbnQ7CisgICAgICAgICAgICBpbnQg
YXNjZW50ID0gYmFzZWxpbmUgLSByLT52ZXJ0aWNhbDsKKyAgICAgICAgICAgIGludCBkZXNjZW50
ID0gaGVpZ2h0IC0gYXNjZW50OwogICAgICAgICAgICAgaWYobWF4QXNjZW50IDwgYXNjZW50KSBt
YXhBc2NlbnQgPSBhc2NlbnQ7CiAgICAgICAgICAgICBpZihtYXhEZXNjZW50IDwgZGVzY2VudCkg
bWF4RGVzY2VudCA9IGRlc2NlbnQ7CiAgICAgICAgIH0KLSAgICAgICAgciA9IHJ1bnMubmV4dCgp
OworICAgICAgICByID0gc3J1bnMtPm5leHQoKTsKICAgICB9CiAgICAgaWYgKCBtYXhBc2NlbnQr
bWF4RGVzY2VudCA8IFFNQVgoIG1heFBvc2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSApICkg
ewogICAgICAgICAvLyBub3cgdGhlIGNvbXB1dGVkIGxpbmVoZWlnaHQgbmVlZHMgdG8gYmUgZXh0
ZW5kZWQgZm9yIHRoZQogICAgICAgICAvLyBwb3NpdGlvbmVkIGVsZW1lbnRzCiAgICAgICAgIC8v
IHNlZSBraHRtbHRlc3RzL3JlbmRlcmluZy9odG1sX2FsaWduLmh0bWwKICAgICAgICAgLy8gIyMj
IG9ubHkgaXRlcmF0ZSBvdmVyIHRoZSBwb3NpdGlvbmVkIG9uZXMhCi0gICAgICAgIGZvciAoIHIg
PSBydW5zLmZpcnN0KCk7IHI7IHIgPSBydW5zLm5leHQoKSApIHsKKyAgICAgICAgZm9yICggciA9
IHNydW5zLT5maXJzdCgpOyByOyByID0gc3J1bnMtPm5leHQoKSApIHsKKwkgICAgaW50IGhlaWdo
dCA9IHItPmJveC0+aGVpZ2h0KCk7CiAgICAgICAgICAgICBpZiAoIHItPnZlcnRpY2FsID09IFBv
c2l0aW9uVG9wICkgewotICAgICAgICAgICAgICAgIGlmICggbWF4QXNjZW50ICsgbWF4RGVzY2Vu
dCA8IHItPmhlaWdodCApCi0gICAgICAgICAgICAgICAgICAgIG1heERlc2NlbnQgPSByLT5oZWln
aHQgLSBtYXhBc2NlbnQ7CisgICAgICAgICAgICAgICAgaWYgKCBtYXhBc2NlbnQgKyBtYXhEZXNj
ZW50IDwgaGVpZ2h0ICkKKyAgICAgICAgICAgICAgICAgICAgbWF4RGVzY2VudCA9IGhlaWdodCAt
IG1heEFzY2VudDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKCByLT52ZXJ0
aWNhbCA9PSBQb3NpdGlvbkJvdHRvbSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIG1heEFzY2Vu
dCArIG1heERlc2NlbnQgPCByLT5oZWlnaHQgKQotICAgICAgICAgICAgICAgICAgICBtYXhBc2Nl
bnQgPSByLT5oZWlnaHQgLSBtYXhEZXNjZW50OworICAgICAgICAgICAgICAgIGlmICggbWF4QXNj
ZW50ICsgbWF4RGVzY2VudCA8IGhlaWdodCApCisgICAgICAgICAgICAgICAgICAgIG1heEFzY2Vu
dCA9IGhlaWdodCAtIG1heERlc2NlbnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC05MTMsNyArOTk3LDcgQEAgdm9pZCBSZW5k
ZXJGbG93OjpiaWRpUmVvcmRlckxpbmUoY29uc3QgQgogICAgIGludCBtYXhIZWlnaHQgPSBtYXhB
c2NlbnQgKyBtYXhEZXNjZW50OwogICAgIC8vIENTUzI6IDEwLjguMTogbGluZS1oZWlnaHQgb24g
dGhlIGJsb2NrIGxldmVsIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSAqbWluaW11bSoKICAgICAvLyBo
ZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBsaW5lIGJveAotICAgIHIgPSBydW5zLmZpcnN0KCk7Cisg
ICAgciA9IHNydW5zLT5maXJzdCgpOwogICAgIC8vICMjIyB3ZSBoYXZlIG5vIHJlbGlhYmxlIHdh
eSBvZiBkZXRlY3RpbmcgZW1wdHkgbGluZWJveGVzIC0gd2hpY2gKICAgICAvLyBhcmUgbm90IGFs
bG93ZWQgdG8gaGF2ZSBhbnkgaGVpZ2h0LiBzaWdoLihEaXJrKQogLy8gICAgIGlmICggciApIHsK
QEAgLTkyNiwzMCArMTAxMCwzMiBAQCB2b2lkIFJlbmRlckZsb3c6OmJpZGlSZW9yZGVyTGluZShj
b25zdCBCCiAgICAga2REZWJ1ZyggNjA0MCApIDw8ICJzdGFydGluZyBydW4uLiIgPDwgZW5kbDsK
ICNlbmRpZgogICAgIHdoaWxlICggciApIHsKKyAgICAgICAgaW50IHdpZHRoOwogICAgICAgICBp
ZihyLT52ZXJ0aWNhbCA9PSBQb3NpdGlvblRvcCkKICAgICAgICAgICAgIHItPnZlcnRpY2FsID0g
bV9oZWlnaHQ7CiAgICAgICAgIGVsc2UgaWYoci0+dmVydGljYWwgPT0gUG9zaXRpb25Cb3R0b20p
Ci0gICAgICAgICAgICByLT52ZXJ0aWNhbCA9IG1faGVpZ2h0ICsgbWF4SGVpZ2h0IC0gci0+aGVp
Z2h0OworICAgICAgICAgICAgci0+dmVydGljYWwgPSBtX2hlaWdodCArIG1heEhlaWdodCAtIHIt
PmJveC0+aGVpZ2h0KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHItPnZlcnRpY2FsICs9
IG1faGVpZ2h0ICsgbWF4QXNjZW50IC0gci0+YmFzZWxpbmU7CisgICAgICAgICAgICByLT52ZXJ0
aWNhbCArPSBtX2hlaWdodCArIG1heEFzY2VudCAtIHItPmJveC0+YmFzZWxpbmUoKTsKIAogICAg
ICAgICBpZihyLT5vYmotPmlzVGV4dCgpKQotICAgICAgICAgICAgci0+d2lkdGggPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUZXh0ICo+KHItPm9iaiktPndpZHRoKHItPnN0YXJ0LCByLT5zdG9wLXItPnN0
YXJ0LCBmaXJzdExpbmUpOworICAgICAgICAgICAgd2lkdGggPSBzdGF0aWNfY2FzdDxSZW5kZXJU
ZXh0ICo+KHItPm9iaiktPndpZHRoKHItPnN0YXJ0LCByLT5zdG9wLXItPnN0YXJ0LCBmaXJzdExp
bmUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHItPm9iai0+Y2FsY1dpZHRoKCk7Ci0g
ICAgICAgICAgICByLT53aWR0aCA9IHItPm9iai0+d2lkdGgoKStyLT5vYmotPm1hcmdpbkxlZnQo
KStyLT5vYmotPm1hcmdpblJpZ2h0KCk7CisgICAgICAgICAgICB3aWR0aCA9IHItPm9iai0+d2lk
dGgoKStyLT5vYmotPm1hcmdpbkxlZnQoKStyLT5vYmotPm1hcmdpblJpZ2h0KCk7CiAgICAgICAg
IH0KKwlyLT5ib3gtPnNldFdpZHRoKHdpZHRoKTsKICNpZiBCSURJX0RFQlVHID4gMAogCWtkRGVi
dWcoNjA0MCkgPDwgIm9iamVjdD0iPDwgci0+b2JqIDw8ICIgcGxhY2luZyBhdCB2ZXJ0aWNhbD0i
IDw8IHItPnZlcnRpY2FsIDw8IiB3aWR0aD0iIDw8IHItPndpZHRoIDw8ZW5kbDsKICNlbmRpZgot
ICAgICAgICB0b3RXaWR0aCArPSByLT53aWR0aDsKLSAgICAgICAgciA9IHJ1bnMubmV4dCgpOwor
ICAgICAgICB0b3RXaWR0aCArPSB3aWR0aDsKKyAgICAgICAgciA9IHNydW5zLT5uZXh0KCk7CiAg
ICAgfQogICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAieVBvcyBvZiBsaW5lPSIgPDwgbV9oZWlnaHQg
PDwgIiAgbGluZUJveEhlaWdodD0iIDw8IG1heEhlaWdodCA8PCBlbmRsOwogCiAgICAgLy8gbm93
IGNvbnN0cnVjdCB0aGUgcmVvcmRlcmVkIHN0cmluZyBvdXQgb2YgdGhlIHJ1bnMuLi4KIAotICAg
IHIgPSBydW5zLmZpcnN0KCk7CisgICAgciA9IHNydW5zLT5maXJzdCgpOwogICAgIGludCB4ID0g
bGVmdE9mZnNldChtX2hlaWdodCk7CiAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRo
KG1faGVpZ2h0KTsKICAgICBzd2l0Y2goc3R5bGUoKS0+dGV4dEFsaWduKCkpIHsKQEAgLTk5NSwx
NyArMTA4MSwyMSBAQCB2b2lkIFJlbmRlckZsb3c6OmJpZGlSZW9yZGVyTGluZShjb25zdCBCCiAJ
CXRvdFdpZHRoICs9IHNwYWNlQWRkOwogCSAgICB9CiAJfQotICAgICAgICByLT5vYmotPnBvc2l0
aW9uKHgsIHItPnZlcnRpY2FsLCByLT5zdGFydCwgci0+c3RvcCAtIHItPnN0YXJ0LCByLT53aWR0
aCwgci0+bGV2ZWwlMiwgZmlyc3RMaW5lLCBzcGFjZUFkZCk7Ci0gICAgICAgIHggKz0gci0+d2lk
dGggKyBzcGFjZUFkZDsKLSAgICAgICAgciA9IHJ1bnMubmV4dCgpOworCXItPmJveC0+c2V0WFBv
cyh4KTsKKwlyLT5ib3gtPnNldFlQb3Moci0+dmVydGljYWwpOworCS8vIEZJWE1FOiB0aGlzIGFz
c2lnbm1lbnQgaXMgcHJvYmFibHkgcmVkdW5kYW50CisvLwlyLT5ib3gtPnNldEJhc2VsaW5lKGJh
c2VsaW5lUG9zaXRpb24oIGZpcnN0TGluZSApKTsKKwlyLT5ib3gtPnNldEZpcnN0TGluZVN0eWxl
Qml0KGZpcnN0TGluZSk7CisvLwlrZERlYnVnKDYwNDApIDw8ICJzdGFydDogIiA8PCByLT5zdGFy
dCA8PCAiIHN0b3A6ICIgPDwgci0+c3RvcCA8PCBlbmRsOworICAgICAgICByLT5vYmotPnBvc2l0
aW9uKHItPmJveCwgci0+c3RhcnQsIHItPnN0b3AgLSByLT5zdGFydCwgci0+bGV2ZWwlMiwgc3Bh
Y2VBZGQpOworICAgICAgICB4ICs9IHItPmJveC0+d2lkdGgoKSArIHNwYWNlQWRkOworICAgICAg
ICByID0gc3J1bnMtPm5leHQoKTsKICAgICB9CiAKICAgICBtX2hlaWdodCArPSBtYXhIZWlnaHQ7
CiAKLSAgICBzcnVucyA9IDA7CiB9CiAKLQogdm9pZCBSZW5kZXJGbG93OjpsYXlvdXRJbmxpbmVD
aGlsZHJlbiggYm9vbCByZWxheW91dENoaWxkcmVuICkKIHsKICAgICBpbnZhbGlkYXRlVmVydGlj
YWxQb3NpdGlvbnMoKTsKQEAgLTEwMjUsNiArMTExNSw5IEBAIHZvaWQgUmVuZGVyRmxvdzo6bGF5
b3V0SW5saW5lQ2hpbGRyZW4oIGIKICAgICBtX2hlaWdodCArPSBwYWRkaW5nVG9wKCk7CiAgICAg
dG9BZGQgKz0gcGFkZGluZ0JvdHRvbSgpOwogCisgICAgLy8gQ2xlYXIgb3V0IG91ciBsaW5lIGJv
eGVzLgorICAgIGRlbGV0ZUxpbmVCb3hlcygpOworCiAgICAgaWYoZmlyc3RDaGlsZCgpKSB7CiAg
ICAgICAgIC8vIGxheW91dCByZXBsYWNlZCBlbGVtZW50cwogICAgICAgICBSZW5kZXJPYmplY3Qg
Km8gPSBmaXJzdCggdGhpcyApOwpAQCAtMTAzNyw3ICsxMTMwLDkgQEAgdm9pZCBSZW5kZXJGbG93
OjpsYXlvdXRJbmxpbmVDaGlsZHJlbiggYgogICAgICAgICAgICAgICAgICAgICBvLT5sYXlvdXQo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYoby0+aXNUZXh0KCkpCi0gICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+ZGVsZXRlU2xhdmVzKCBy
ZW5kZXJBcmVuYSgpICk7CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAq
PihvKS0+ZGVsZXRlUnVucyggcmVuZGVyQXJlbmEoKSApOworICAgICAgICAgICAgZWxzZSBpZiAo
by0+aXNGbG93KCkvKiAmJiAhZW5kT2ZJbmxpbmUqLykKKyAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJGbG93Kj4obyktPmRlbGV0ZUxpbmVCb3hlcygpOwogICAgICAgICAgICAgbyA9
IEJpZGluZXh0KCB0aGlzLCBvICk7CiAgICAgICAgIH0KIApAQCAtMTA2MCwxMiArMTE1NSwzMyBA
QCB2b2lkIFJlbmRlckZsb3c6OmxheW91dElubGluZUNoaWxkcmVuKCBiCiAKICAgICAgICAgZmly
c3RMaW5lID0gdHJ1ZTsKICAgICAgICAgd2hpbGUoICFlbmQuYXRFbmQoKSApIHsKKyAgICAgICAg
ICAgIFFQdHJMaXN0PEJpZGlSdW4+IHJ1bnM7CisgICAgICAgICAgICBydW5zLnNldEF1dG9EZWxl
dGUodHJ1ZSk7CisgICAgICAgICAgICBzcnVucyA9ICZydW5zOworCiAgICAgICAgICAgICBzdGFy
dCA9IGVuZDsKIAogICAgICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsoc3RhcnQpOwog
ICAgICAgICAgICAgaWYoIHN0YXJ0LmF0RW5kKCkgKSBicmVhazsKIAkgICAgYmlkaVJlb3JkZXJM
aW5lKHN0YXJ0LCBlbmQpOwogCisJICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3J1bnMgJiYg
c3J1bnMtPmNvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIElubGluZUZsb3dCb3gq
IGxpbmVCb3ggPSBjb25zdHJ1Y3RMaW5lKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgICAg
ICBpZiAobGluZUJveCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHdlIHBvc2l0
aW9uIGFsbCBvZiBvdXIgdGV4dCBydW5zIGhvcml6b250YWxseS4KKy8vICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gsIGNvbnRl
eHQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgcG9zaXRpb24gb3VyIHRleHQg
cnVucyB2ZXJ0aWNhbGx5LgorLy8gICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmVydGlj
YWxQb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gpOworCQkJY29tcHV0ZVBvc2l0aW9uc0ZvckxpbmUo
bGluZUJveCwgY29udGV4dCk7CisKKwkJCS8vIEZJWE1FOiBuZWVkcyBwb3J0aW5nIG9mIHNydW5z
IHRvIHMqQmlkaVJ1biBzdHVmZgorICAgICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGVCaWRp
UnVucyhyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKwkgICAgfQorCiAgICAgICAgICAgICBpZiggZW5kID09IHN0YXJ0IHx8IChlbmQub2Jq
ICYmIGVuZC5vYmotPmlzQlIoKSAmJiAhc3RhcnQub2JqLT5pc0JSKCkgKSApIHsKIAkJYWRqdXN0
RW1iZWRkZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgKytlbmQ7CkBAIC0xMDc5LDYgKzEx
OTUsNyBAQCB2b2lkIFJlbmRlckZsb3c6OmxheW91dElubGluZUNoaWxkcmVuKCBiCiAgICAgICAg
ICAgICBuZXdMaW5lKCk7CiAgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKICAgICAgICAg
fQorCXNydW5zID0gMDsKIAogCS8vIGNsZWFuIHVwCiAJd2hpbGUgKCBjb250ZXh0ICkgewpJbmRl
eDogYmlkaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3Jl
bmRlcmluZy9iaWRpLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtdSAtcCAtcjEu
MTYgYmlkaS5oCi0tLSBiaWRpLmgJMTcgTWF5IDIwMDMgMjI6MTI6NTggLTAwMDAJMS4xNgorKysg
YmlkaS5oCTUgQXVnIDIwMDMgMTk6MjM6MTYgLTAwMDAKQEAgLTI5LDYgKzI5LDcgQEAgbmFtZXNw
YWNlIGtodG1sIHsKICAgICBjbGFzcyBSZW5kZXJGbG93OwogICAgIGNsYXNzIFJlbmRlck9iamVj
dDsKICAgICBjbGFzcyBSZW5kZXJBcmVuYTsKKyAgICBjbGFzcyBJbmxpbmVCb3g7CiAKICAgICBj
bGFzcyBCaWRpQ29udGV4dCB7CiAgICAgcHVibGljOgpAQCAtNTIsOCArNTMsOCBAQCBuYW1lc3Bh
Y2Uga2h0bWwgewogCiAgICAgc3RydWN0IEJpZGlSdW4gewogCUJpZGlSdW4oaW50IF9zdGFydCwg
aW50IF9zdG9wLCBSZW5kZXJPYmplY3QgKl9vYmosIEJpZGlDb250ZXh0ICpjb250ZXh0LCBRQ2hh
cjo6RGlyZWN0aW9uIGRpcikKLQkgICAgOiAgdmVydGljYWwoIDAgKSwgYmFzZWxpbmUoIDAgKSwg
aGVpZ2h0KCAwICksIHdpZHRoKCAwICksCi0JICAgICAgIHN0YXJ0KCBfc3RhcnQgKSwgc3RvcCgg
X3N0b3AgKSwgb2JqKCBfb2JqICkKKwkgICAgOiAgdmVydGljYWwoIDAgKSwKKwkgICAgICAgc3Rh
cnQoIF9zdGFydCApLCBzdG9wKCBfc3RvcCApLCBvYmooIF9vYmogKSwgYm94KDApCiAJewogCSAg
ICBpZihkaXIgPT0gUUNoYXI6OkRpck9OKSBkaXIgPSBjb250ZXh0LT5kaXI7CiAKQEAgLTcyLDEz
ICs3MywxMSBAQCBuYW1lc3BhY2Uga2h0bWwgewogCX0KIAogCWludCB2ZXJ0aWNhbDsKLQlzaG9y
dCBiYXNlbGluZTsKLQlzaG9ydCBoZWlnaHQ7Ci0JaW50IHdpZHRoOwogCiAJaW50IHN0YXJ0Owog
CWludCBzdG9wOwogCVJlbmRlck9iamVjdCAqb2JqOworICAgICAgICBJbmxpbmVCb3gqIGJveDsK
IAogCS8vIGV4cGxpY2l0ICsgaW1wbGljaXQgbGV2ZWxzIGhlcmUKIAl1Y2hhciBsZXZlbDsKSW5k
ZXg6IHJlbmRlcl9ib3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJz
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
OTgKZGlmZiAtdSAtcCAtcjEuMTk4IHJlbmRlcl9ib3guY3BwCi0tLSByZW5kZXJfYm94LmNwcAkx
OCBGZWIgMjAwMyAyMToxMDo0NSAtMDAwMAkxLjE5OAorKysgcmVuZGVyX2JveC5jcHAJNSBBdWcg
MjAwMyAxOToyMzoxNyAtMDAwMApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgInJlbmRlcl9s
YXllci5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgogI2luY2x1ZGUgInhtbC9kb21f
bm9kZWltcGwuaCIKKyNpbmNsdWRlICJyZW5kZXJfbGluZS5oIgogCiAjaW5jbHVkZSA8a2h0bWx2
aWV3Lmg+CiAjaW5jbHVkZSA8a2RlYnVnLmg+CkBAIC00MTUsMTAgKzQxNiwxMCBAQCBib29sIFJl
bmRlckJveDo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQCiAgICAgfQogfQogCi12b2lkIFJlbmRl
ckJveDo6cG9zaXRpb24oaW50IHgsIGludCB5LCBpbnQsIGludCwgaW50LCBib29sLCBib29sLCBp
bnQpCit2b2lkIFJlbmRlckJveDo6cG9zaXRpb24oSW5saW5lQm94KiBib3gsIGludCAvKmZyb20q
LywgaW50IC8qbGVuKi8sIGJvb2wgLypyZXZlcnNlKi8sIGludCkKIHsKLSAgICBtX3ggPSB4ICsg
bWFyZ2luTGVmdCgpOwotICAgIG1feSA9IHk7CisgICAgbV94ID0gYm94LT54UG9zKCkgKyBtYXJn
aW5MZWZ0KCk7CisgICAgbV95ID0gYm94LT55UG9zKCk7CiAgICAgLy8gIyMjIHBhZGRpbmdzCiAg
ICAgLy9tX3dpZHRoID0gd2lkdGg7CiB9CkBAIC0xMDA4LDYgKzEwMDksNDAgQEAgaW50IFJlbmRl
ckJveDo6cmlnaHRtb3N0UG9zaXRpb24oKSBjb25zdAogICAgIGlmICggbV9sYXllciApCiAJcmln
aHQgPSBRTUFYKCByaWdodCwgbV9sYXllci0+d2lkdGgoKSApOwogICAgIHJldHVybiBtX3dpZHRo
OworfQorCit2b2lkIFJlbmRlckJveDo6Y2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlk
ZSwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpCit7CisgICAgX3gg
PSAtMTsKKworICAgIC8vIHByb3BhZ2F0ZSBpdCBkb3dud2FyZHMgdG8gaXRzIGNoaWxkcmVuLCBz
b21lb25lIHdpbGwgZmVlbCByZXNwb25zaWJsZQorICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBm
aXJzdENoaWxkKCk7CisgICAgaWYgKGNoaWxkKSBrZERlYnVnKDYwNDApIDw8ICJkZWxlZ2F0aW5n
IGNhcmV0UG9zIHRvICIgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCBlbmRsOworICAgIGlmIChj
aGlsZCkgY2hpbGQtPmNhcmV0UG9zKG9mZnNldCwgb3ZlcnJpZGUsIF94LCBfeSwgd2lkdGgsIGhl
aWdodCk7CisKKyAgICAvLyBpZiBub3QsIHVzZSB0aGUgZXh0ZW50cyBvZiB0aGlzIGJveC4gb2Zm
c2V0IDAgbWVhbnMgbGVmdCwgb2Zmc2V0IDEgbWVhbnMKKyAgICAvLyByaWdodAorICAgIGlmIChf
eCA9PSAtMSkgeworICAgICAgICBrZERlYnVnKDYwNDApIDw8ICJubyBkZWxlZ2F0aW9uIiA8PCBl
bmRsOworICAgICAgICBfeCA9IHhQb3MoKSArIChvZmZzZXQgPT0gMCA/IDAgOiBtX3dpZHRoKTsK
KwlfeSA9IHlQb3MoKTsKKwloZWlnaHQgPSBtX2hlaWdodDsKKwl3aWR0aCA9IG92ZXJyaWRlICYm
IG9mZnNldCA9PSAwID8gbV93aWR0aCA6IDE7CisKKyAgICAgICAgaW50IGFic3gsIGFic3k7CisK
KyAgICAgICAgUmVuZGVyT2JqZWN0ICpjYiA9IGNvbnRhaW5pbmdCbG9jaygpOworCisgICAgICAg
IGlmIChjYiAmJiBjYiAhPSB0aGlzICYmIGNiLT5hYnNvbHV0ZVBvc2l0aW9uKGFic3gsYWJzeSkp
IHsKKyAgICAgICAgICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAiYWJzeD0iIDw8IGFic3ggPDwgIiBh
YnN5PSIgPDwgYWJzeSA8PCBlbmRsOworICAgICAgICAgICAgX3ggKz0gYWJzeDsKKyAgICAgICAg
ICAgIF95ICs9IGFic3k7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyB3ZSBkb24n
dCBrbm93IG91ciBhYnNvbHV0ZSBwb3NpdGlvbiwgYW5kIHRoZXJlIGlzIG5vIHBvaW50IHJldHVy
bmluZworICAgICAgICAgICAgLy8ganVzdCBhIHJlbGF0aXZlIG9uZQorICAgICAgICAgICAgX3gg
PSBfeSA9IC0xOworICAgICAgICB9LyplbmQgaWYqLworICAgIH0vKmVuZCBpZiovCiB9CiAKICN1
bmRlZiBERUJVR19MQVlPVVQKSW5kZXg6IHJlbmRlcl9ib3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjYzCmRpZmYgLXUgLXAgLXIxLjYzIHJlbmRlcl9ib3guaAotLS0gcmVu
ZGVyX2JveC5oCTE3IE1heSAyMDAzIDIyOjEyOjU4IC0wMDAwCTEuNjMKKysrIHJlbmRlcl9ib3gu
aAk1IEF1ZyAyMDAzIDE5OjIzOjE3IC0wMDAwCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0V2lkdGgoIGludCB3aWR0aCApOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRIZWlnaHQoIGludCBoZWlnaHQgKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihpbnQg
eCwgaW50IHksIGludCBmcm9tLCBpbnQgbGVuLCBpbnQgd2lkdGgsIGJvb2wgcmV2ZXJzZSwgYm9v
bCBmaXJzdExpbmUsIGludCk7CisgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uKElubGluZUJveCog
Ym94LCBpbnQgZnJvbSwgaW50IGxlbiwgYm9vbCByZXZlcnNlLCBpbnQpOwogCiAgICAgdmlydHVh
bCBpbnQgbG93ZXN0UG9zaXRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCByaWdodG1vc3RQ
b3NpdGlvbigpIGNvbnN0OwpAQCAtOTcsNiArOTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxj
VmVydGljYWxNYXJnaW5zKCk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckxheWVyKiBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjYXJldFBvcyhpbnQg
b2Zmc2V0LCBib29sIG92ZXJyaWRlLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJndpZHRoLCBpbnQg
JmhlaWdodCk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0
aW9ucyhRUGFpbnRlciAqcCxpbnQgX3gsIGludCBfeSwKSW5kZXg6IHJlbmRlcl9ici5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9ici5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtdSAtcCAtcjEuMTUgcmVu
ZGVyX2JyLmNwcAotLS0gcmVuZGVyX2JyLmNwcAkxNCBKYW4gMjAwMiAxOTo1Njo0NSAtMDAwMAkx
LjE1CisrKyByZW5kZXJfYnIuY3BwCTUgQXVnIDIwMDMgMTk6MjM6MTcgLTAwMDAKQEAgLTM1LDIx
ICszNSwyMiBAQCBSZW5kZXJCUjo6flJlbmRlckJSKCkKIHsKIH0KIAotdm9pZCBSZW5kZXJCUjo6
Y3Vyc29yUG9zKGludCAvKm9mZnNldCovLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCkK
K3ZvaWQgUmVuZGVyQlI6OmNhcmV0UG9zKGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGludCAm
X3gsIGludCAmX3ksIGludCAmd2lkdGgsIGludCAmaGVpZ2h0KQogewogICAgIGlmIChwcmV2aW91
c1NpYmxpbmcoKSAmJiAhcHJldmlvdXNTaWJsaW5nKCktPmlzQlIoKSAmJiAhcHJldmlvdXNTaWJs
aW5nKCktPmlzRmxvYXRpbmcoKSkgewogICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKICAgICAgICAg
aWYgKHByZXZpb3VzU2libGluZygpLT5pc1RleHQoKSkKLSAgICAgICAgICAgIG9mZnNldCA9IHN0
YXRpY19jYXN0PFJlbmRlclRleHQqPihwcmV2aW91c1NpYmxpbmcoKSktPmxlbmd0aCgpOwotCi0g
ICAgICAgIHByZXZpb3VzU2libGluZygpLT5jdXJzb3JQb3Mob2Zmc2V0LF94LF95LGhlaWdodCk7
CisgICAgICAgICAgICBvZmZzZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocHJldmlvdXNT
aWJsaW5nKCkpLT5tYXhPZmZzZXQoKTsKKyAgICAgICAgCisJLy8gRklYTUU6IHRoaXMgd29uJ3Qg
cmV0dXJuIGEgYmlnIHdpZHRoIGluIG92ZXJyaWRlIG1vZGUgKExTKQorICAgICAgICBwcmV2aW91
c1NpYmxpbmcoKS0+Y2FyZXRQb3Mob2Zmc2V0LG92ZXJyaWRlLF94LF95LHdpZHRoLGhlaWdodCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbnQgYWJzeCwgYWJzeTsKICAgICBhYnNv
bHV0ZVBvc2l0aW9uKGFic3gsYWJzeSk7CiAgICAgaWYgKGFic3ggPT0gLTEpIHsKLSAgICAgICAg
Ly8gd2UgZG9uJ3Qga25vdyBvdXQgYWJzb2x1YXRlIHBvc2l0aW9uLCBhbmQgdGhlcmUgaXMgbm90
IHBvaW50IHJldHVybmluZworICAgICAgICAvLyB3ZSBkb24ndCBrbm93IG91dCBhYnNvbHV0ZSBw
b3NpdGlvbiwgYW5kIHRoZXJlIGlzIG5vIHBvaW50IHJldHVybmluZwogICAgICAgICAvLyBqdXN0
IGEgcmVsYXRpdmUgb25lCiAgICAgICAgIF94ID0gX3kgPSAtMTsKICAgICB9CkBAIC01OCw2ICs1
OSw2IEBAIHZvaWQgUmVuZGVyQlI6OmN1cnNvclBvcyhpbnQgLypvZmZzZXQqLywKICAgICAgICAg
X3kgKz0gYWJzeTsKICAgICB9CiAgICAgaGVpZ2h0ID0gUmVuZGVyVGV4dDo6dmVydGljYWxQb3Np
dGlvbkhpbnQoIGZhbHNlICk7Ci0KKyAgICB3aWR0aCA9IG92ZXJyaWRlID8gaGVpZ2h0IC8gMiA6
IDE7CiB9CiAKSW5kZXg6IHJlbmRlcl9ici5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tk
ZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYnIuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xOQpkaWZmIC11IC1wIC1yMS4xOSByZW5kZXJfYnIuaAotLS0gcmVuZGVyX2JyLmgJMTcg
TWF5IDIwMDMgMjI6MTI6NTggLTAwMDAJMS4xOQorKysgcmVuZGVyX2JyLmgJNSBBdWcgMjAwMyAx
OToyMzoxNyAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBzaG9y
dCBtYXhXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0JS
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBjdXJzb3JQb3MoaW50
IG9mZnNldCwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZoZWlnaHQpOworICAgIHZpcnR1YWwgdm9p
ZCBjYXJldFBvcyhpbnQgb2Zmc2V0LCBib29sIG92ZXJyaWRlLCBpbnQgJl94LCBpbnQgJl95LCBp
bnQgJndpZHRoLCBpbnQgJmhlaWdodCk7CiB9OwogCiB9CkluZGV4OiByZW5kZXJfZmxvdy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mbG93LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMzAKZGlmZiAtdSAtcCAtcjEu
MzMwIHJlbmRlcl9mbG93LmNwcAotLS0gcmVuZGVyX2Zsb3cuY3BwCTIxIEp1biAyMDAzIDA5OjE0
OjUyIC0wMDAwCTEuMzMwCisrKyByZW5kZXJfZmxvdy5jcHAJNSBBdWcgMjAwMyAxOToyMzoyMCAt
MDAwMApAQCAtNzIsNiArNzIsNTQgQEAgUmVuZGVyRmxvdzo6UmVuZGVyRmxvdyhET006Ok5vZGVJ
bXBsKiBubwogICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSAwOwogCiAgICAgbV9jb250aW51YXRpb24g
PSAwOworICAgIG1fZmlyc3RMaW5lQm94ID0gMDsKKyAgICBtX2xhc3RMaW5lQm94ID0gMDsKK30K
Kwordm9pZCBSZW5kZXJGbG93OjpkZWxldGVMaW5lQm94ZXMoUmVuZGVyQXJlbmEqIGFyZW5hKQor
eworICAgIGlmIChtX2ZpcnN0TGluZUJveCkgeworICAgICAgICBpZiAoIWFyZW5hKQorICAgICAg
ICAgICAgYXJlbmEgPSByZW5kZXJBcmVuYSgpOworICAgICAgICBJbmxpbmVSdW5Cb3ggKmN1cnI9
bV9maXJzdExpbmVCb3gsICpuZXh0PTA7CisgICAgICAgIHdoaWxlIChjdXJyKSB7CisgICAgICAg
ICAgICBuZXh0ID0gY3Vyci0+bmV4dExpbmVCb3goKTsKKyAgICAgICAgICAgIGN1cnItPmRldGFj
aChhcmVuYSk7CisgICAgICAgICAgICBjdXJyID0gbmV4dDsKKyAgICAgICAgfQorICAgICAgICBt
X2ZpcnN0TGluZUJveCA9IDA7CisgICAgICAgIG1fbGFzdExpbmVCb3ggPSAwOworICAgIH0KK30K
Kwordm9pZCBSZW5kZXJGbG93OjpkZXRhY2goUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKQorewor
ICAgIGRlbGV0ZUxpbmVCb3hlcyhyZW5kZXJBcmVuYSk7CisgICAgUmVuZGVyQm94OjpkZXRhY2go
cmVuZGVyQXJlbmEpOworfQorCitJbmxpbmVCb3gqIFJlbmRlckZsb3c6OmNyZWF0ZUlubGluZUJv
eChib29sIG1ha2VQbGFjZUhvbGRlckJveCkKK3sKKyAgICBpZiAoaXNSZXBsYWNlZCgpIHx8IG1h
a2VQbGFjZUhvbGRlckJveCkgICAgICAgICAgLy8gSW5saW5lIHRhYmxlcyBhbmQgaW5saW5lIGJs
b2NrcworICAgICAgICByZXR1cm4gUmVuZGVyQm94OjpjcmVhdGVJbmxpbmVCb3goZmFsc2UpOyAg
ICAvLyAob3IgcG9zaXRpb25lZCBlbGVtZW50IHBsYWNlaG9sZGVycykuCisKKyAgICBJbmxpbmVG
bG93Qm94KiBmbG93Qm94ID0gMDsKKyAgICAvLyBGSVhNRTogY2Fubm90IGJlIGRlY2lkZWQgYmVm
b3JlIGZ1bGwgbWVyZ2UgaGFzIGJlZW4gZG9uZSwgc2ltcGx5IHRyZWF0CisgICAgLy8gaXQgYXMg
YW4gSW5saW5lRmxvd0JveCBiL2MgaXQncyBpcnJlbGV2YW50IGluIHRoZSBvbGQgY29kZSAoTFMp
CisvLyAgICBpZiAoaXNJbmxpbmVGbG93KCkpCisgICAgICAgIGZsb3dCb3ggPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIElubGluZUZsb3dCb3godGhpcyk7CisvLyAgICBlbHNlCisvLyAgICAgICAgZmxv
d0JveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUm9vdElubGluZUJveCh0aGlzKTsKKworICAgIGlm
ICghbV9maXJzdExpbmVCb3gpCisgICAgICAgIG1fZmlyc3RMaW5lQm94ID0gbV9sYXN0TGluZUJv
eCA9IGZsb3dCb3g7CisgICAgZWxzZSB7CisgICAgICAgIG1fbGFzdExpbmVCb3gtPnNldE5leHRM
aW5lQm94KGZsb3dCb3gpOworICAgICAgICBmbG93Qm94LT5zZXRQcmV2aW91c0xpbmVCb3gobV9s
YXN0TGluZUJveCk7CisgICAgICAgIG1fbGFzdExpbmVCb3ggPSBmbG93Qm94OworICAgIH0KKwor
ICAgIHJldHVybiBmbG93Qm94OwogfQogCiB2b2lkIFJlbmRlckZsb3c6OnNldFN0eWxlKFJlbmRl
clN0eWxlICpfc3R5bGUpCkluZGV4OiByZW5kZXJfZmxvdy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjgxCmRpZmYgLXUgLXAgLXIxLjgxIHJlbmRlcl9mbG93LmgKLS0tIHJl
bmRlcl9mbG93LmgJMTcgTWF5IDIwMDMgMjI6MTI6NTggLTAwMDAJMS44MQorKysgcmVuZGVyX2Zs
b3cuaAk1IEF1ZyAyMDAzIDE5OjIzOjIwIC0wMDAwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiYmlkaS5oIgogCiBuYW1lc3BhY2Uga2h0bWwgeworICBjbGFzcyBJbmxpbmVGbG93Qm94Owog
CiAvKioKICAqIGFsbCBnZW9tZXRyeSBtYW5hZ2luZyBzdHVmZiBpcyBvbmx5IGluIHRoZSBibG9j
ayBlbGVtZW50cy4KQEAgLTcxLDggKzcyLDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFrZUNo
aWxkcmVuTm9uSW5saW5lKFJlbmRlck9iamVjdCAqYm94MlN0YXJ0ID0gMCk7CiAKKyAgICB2b2lk
IGRlbGV0ZUxpbmVCb3hlcyhSZW5kZXJBcmVuYSogYXJlbmE9MCk7CisgICAgdmlydHVhbCB2b2lk
IGRldGFjaChSZW5kZXJBcmVuYSogYXJlbmEpOworCisgICAgSW5saW5lRmxvd0JveCogZmlyc3RM
aW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVCb3g7IH0KKyAgICBJbmxpbmVGbG93
Qm94KiBsYXN0TGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdExpbmVCb3g7IH0KKwogICAg
IC8vIG92ZXJyaWRlcyBSZW5kZXJPYmplY3QKIAorICAgIHZpcnR1YWwgSW5saW5lQm94KiBjcmVh
dGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VIb2xkZXJCb3gpOworCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KCBRUGFpbnRlciAqLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCB0eCwgaW50IHR5LCBQYWludEFjdGlvbiBwYWludFBoYXNlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoIFFQYWludGVyICosIGludCB4LCBpbnQgeSwg
aW50IHcsIGludCBoLApAQCAtMTQzLDYgKzE1MiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gaW1wbGVt
ZW50YXRpb24gb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaXMgaW4gYmlkaS5jcHAKICAgICB2
b2lkIGJpZGlSZW9yZGVyTGluZShjb25zdCBCaWRpSXRlcmF0b3IgJnN0YXJ0LCBjb25zdCBCaWRp
SXRlcmF0b3IgJmVuZCk7CiAgICAgQmlkaUl0ZXJhdG9yIGZpbmROZXh0TGluZUJyZWFrKEJpZGlJ
dGVyYXRvciAmc3RhcnQpOworICAgIElubGluZUZsb3dCb3gqIGNvbnN0cnVjdExpbmUoY29uc3Qg
QmlkaUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgQmlkaUl0ZXJhdG9yJiBlbmQpOworICAgIElubGlu
ZUZsb3dCb3gqIGNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqIG9iaik7CisgICAgLy8gRklY
TUU6IHNob3VsZCBiZSBzcGxpdCBpbnRvIGNvbXB1dGVIb3Jpem9udGFsLS8tVmVydGljYWwuLi4g
bGlrZSBpbgorICAgIC8vIFdlYkNvcmUgYnV0IGFzIGl0J2xsIGdldCBtZXJnZWQgYW55d2F5IGl0
J3Mgbm90IHdvcnRoIGl0CisgICAgdm9pZCBjb21wdXRlUG9zaXRpb25zRm9yTGluZShJbmxpbmVG
bG93Qm94KiBsaW5lQm94LCBCaWRpQ29udGV4dCogZW5kRW1iZWQpOwogCiAgICAgLy8gVGhlIGhl
aWdodCAoYW5kIHdpZHRoKSBvZiBhIGJsb2NrIHdoZW4geW91IGluY2x1ZGUgb3ZlcmZsb3cKICAg
ICAvLyBzcGlsbGFnZSBvdXQgb2YgdGhlIGJvdHRvbSBvZiB0aGUgYmxvY2sgKGUuZy4sIGEgPGRp
dgpAQCAtMjA0LDYgKzIxOCwxMiBAQCBwcml2YXRlOgogICAgIC8vIHNwbGl0IGludG8gYSBzZXF1
ZW5jZSBvZiBpbmxpbmVzIGFuZCBibG9ja3MuICBUaGUgY29udGludWF0aW9uIHdpbGwgZWl0aGVy
IGJlCiAgICAgLy8gYW4gYW5vbnltb3VzIGJsb2NrICh0aGF0IGhvdXNlcyBvdGhlciBibG9ja3Mp
IG9yIGl0IHdpbGwgYmUgYW4gaW5saW5lIGZsb3cuCiAgICAgUmVuZGVyRmxvdyogbV9jb250aW51
YXRpb247CisKKyAgICAvLyBGb3IgYmxvY2sgZmxvd3MsIGVhY2ggYm94IHJlcHJlc2VudHMgdGhl
IHJvb3QgaW5saW5lIGJveCBmb3IgYSBsaW5lIGluIHRoZQorICAgIC8vIHBhcmFncmFwaC4KKyAg
ICAvLyBGb3IgaW5saW5lIGZsb3dzLCBlYWNoIGJveCByZXByZXNlbnRzIGEgcG9ydGlvbiBvZiB0
aGF0IGlubGluZS4KKyAgICBJbmxpbmVGbG93Qm94KiBtX2ZpcnN0TGluZUJveDsKKyAgICBJbmxp
bmVGbG93Qm94KiBtX2xhc3RMaW5lQm94OwogfTsKIAogCkluZGV4OiByZW5kZXJfaW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExMApkaWZmIC11IC1wIC1y
MS4xMTAgcmVuZGVyX2ltYWdlLmNwcAotLS0gcmVuZGVyX2ltYWdlLmNwcAkzIEp1bCAyMDAzIDAw
OjE5OjE5IC0wMDAwCTEuMTEwCisrKyByZW5kZXJfaW1hZ2UuY3BwCTUgQXVnIDIwMDMgMTk6MjM6
MjEgLTAwMDAKQEAgLTQzMCwyMSArNDMwLDIyIEBAIGludCBSZW5kZXJJbWFnZTo6Y2FsY1JlcGxh
Y2VkSGVpZ2h0KCkgY28KICAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OmNhbGNSZXBsYWNlZEhl
aWdodCgpOwogfQogCi12b2lkIFJlbmRlckltYWdlOjpjdXJzb3JQb3MoaW50IG9mZnNldCwgaW50
ICZfeCwgaW50ICZfeSwgaW50ICZoZWlnaHQpIHsKK3ZvaWQgUmVuZGVySW1hZ2U6OmNhcmV0UG9z
KGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGludCAmX3gsIGludCAmX3ksIGludCAmd2lkdGgs
IGludCAmaGVpZ2h0KSB7CiAgIGhlaWdodCA9IGludHJpbnNpY0hlaWdodCgpOworICB3aWR0aCA9
IG92ZXJyaWRlICYmIG9mZnNldCA9PSAwID8gaW50cmluc2ljV2lkdGgoKSA6IDA7CiAgIF94ID0g
eFBvcygpOwogICBfeSA9IHlQb3MoKTsKICAgaWYgKG9mZnNldCA+IDApIF94ICs9IGludHJpbnNp
Y1dpZHRoKCk7CiAKICAgUmVuZGVyT2JqZWN0ICpjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICBpbnQg
YWJzeCwgYWJzeTsKICAgaWYgKGNiICYmIGNiICE9IHRoaXMgJiYgY2ItPmFic29sdXRlUG9zaXRp
b24oYWJzeCxhYnN5KSkKICAgewogICAgIF94ICs9IGFic3g7CiAgICAgX3kgKz0gYWJzeTsKICAg
fSBlbHNlIHsKLSAgICAvLyB3ZSBkb24ndCBrbm93IG91ciBhYnNvbHV0ZSBwb3NpdGlvbiwgYW5k
IHRoZXJlIGlzIG5vdCBwb2ludCByZXR1cm5pbmcKKyAgICAvLyB3ZSBkb24ndCBrbm93IG91ciBh
YnNvbHV0ZSBwb3NpdGlvbiwgYW5kIHRoZXJlIGlzIG5vIHBvaW50IHJldHVybmluZwogICAgIC8v
IGp1c3QgYSByZWxhdGl2ZSBvbmUKICAgICBfeCA9IF95ID0gLTE7CiAgIH0KSW5kZXg6IHJlbmRl
cl9pbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfaW1hZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MgpkaWZmIC11
IC1wIC1yMS40MiByZW5kZXJfaW1hZ2UuaAotLS0gcmVuZGVyX2ltYWdlLmgJMyBKdWwgMjAwMyAw
MDoxOToxOSAtMDAwMAkxLjQyCisrKyByZW5kZXJfaW1hZ2UuaAk1IEF1ZyAyMDAzIDE5OjIzOjIx
IC0wMDAwCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU2VsZWN0aW9u
U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7cmV0dXJuIG1fc2VsZWN0aW9uU3RhdGU7fQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKSB7bV9z
ZWxlY3Rpb25TdGF0ZSA9IHM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3Vyc29yUG9zKGludCBvZmZz
ZXQsIGludCAmX3gsIGludCAmX3ksIGludCAmaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2Fy
ZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZ3
aWR0aCwgaW50ICZoZWlnaHQpOwogCiBwcml2YXRlOgogICAgIC8qCkluZGV4OiByZW5kZXJfbGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAg
LXIxLjEgcmVuZGVyX2xpbmUuY3BwCi0tLSByZW5kZXJfbGluZS5jcHAJMjMgQXByIDIwMDMgMTI6
NDA6NTQgLTAwMDAJMS4xCisrKyByZW5kZXJfbGluZS5jcHAJNSBBdWcgMjAwMyAxOToyMzoyMSAt
MDAwMApAQCAtMzIsMTMgKzMyLDEzIEBACiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgog
I2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9mb3JtaW1w
bC5oIgotI2luY2x1ZGUgInJlbmRlcl9pbmxpbmUuaCIKLSNpbmNsdWRlICJyZW5kZXJfYmxvY2su
aCIKKy8vI2luY2x1ZGUgInJlbmRlcl9pbmxpbmUuaCIKKy8vI2luY2x1ZGUgInJlbmRlcl9ibG9j
ay5oIgogI2luY2x1ZGUgInJlbmRlcl9hcmVuYS5oIgogI2luY2x1ZGUgInJlbmRlcl9saW5lLmgi
CiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJodG1sdGFncy5oIgorI2luY2x1
ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVz
cGFjZSBraHRtbDsKQEAgLTc5LDExICs3OSwxMSBAQCBpbnQgSW5saW5lRmxvd0JveDo6bWFyZ2lu
TGVmdCgpCiB7CiAgICAgaWYgKCFpbmNsdWRlTGVmdEVkZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCisKICAgICBSZW5kZXJTdHlsZSogY3N0eWxlID0gb2JqZWN0KCktPnN0eWxlKCk7CiAg
ICAgTGVuZ3RoIG1hcmdpbiA9IGNzdHlsZS0+bWFyZ2luTGVmdCgpOwotICAgIGlmIChtYXJnaW4u
dHlwZSAhPSBWYXJpYWJsZSkKLSAgICAgICAgcmV0dXJuIChtYXJnaW4udHlwZSA9PSBGaXhlZCA/
IG1hcmdpbi52YWx1ZSA6IG9iamVjdCgpLT5tYXJnaW5MZWZ0KCkpOworICAgIGlmIChtYXJnaW4u
dHlwZSgpICE9IFZhcmlhYmxlKQorICAgICAgICByZXR1cm4gKG1hcmdpbi50eXBlKCkgPT0gRml4
ZWQgPyBtYXJnaW4udmFsdWUoKSA6IG9iamVjdCgpLT5tYXJnaW5MZWZ0KCkpOwogICAgIHJldHVy
biAwOwogfQogCkBAIC05NCw4ICs5NCw4IEBAIGludCBJbmxpbmVGbG93Qm94OjptYXJnaW5SaWdo
dCgpCiAgICAgCiAgICAgUmVuZGVyU3R5bGUqIGNzdHlsZSA9IG9iamVjdCgpLT5zdHlsZSgpOwog
ICAgIExlbmd0aCBtYXJnaW4gPSBjc3R5bGUtPm1hcmdpblJpZ2h0KCk7Ci0gICAgaWYgKG1hcmdp
bi50eXBlICE9IFZhcmlhYmxlKQotICAgICAgICByZXR1cm4gKG1hcmdpbi50eXBlID09IEZpeGVk
ID8gbWFyZ2luLnZhbHVlIDogb2JqZWN0KCktPm1hcmdpblJpZ2h0KCkpOworICAgIGlmIChtYXJn
aW4udHlwZSgpICE9IFZhcmlhYmxlKQorICAgICAgICByZXR1cm4gKG1hcmdpbi50eXBlKCkgPT0g
Rml4ZWQgPyBtYXJnaW4udmFsdWUoKSA6IG9iamVjdCgpLT5tYXJnaW5SaWdodCgpKTsKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtMTQzLDkgKzE0MywxMCBAQCBib29sIElubGluZUZsb3dCb3g6OnBy
ZXZPbkxpbmVFeGlzdHMoKQogCiBib29sIElubGluZUZsb3dCb3g6Om9uRW5kQ2hhaW4oUmVuZGVy
T2JqZWN0KiBlbmRPYmplY3QpCiB7CisjaWYgMAkvLyBGSVhNRTogbmVlZHMgbWVyZ2UKICAgICBp
ZiAoIWVuZE9iamVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKGVu
ZE9iamVjdCA9PSBvYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTE1OSwyMiAr
MTYwLDI0IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6b25FbmRDaGFpbihSZW5kZXJPYmoKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogfQogCiB2b2lkIElubGluZUZsb3dCb3g6OmRl
dGVybWluZVNwYWNpbmdGb3JGbG93Qm94ZXMoYm9vbCBsYXN0TGluZSwgUmVuZGVyT2JqZWN0KiBl
bmRPYmplY3QpCiB7CisjaWYgMAkvLyBGSVhNRTogbmVlZHMgbWVyZ2UKICAgICAvLyBBbGwgYm94
ZXMgc3RhcnQgb2ZmIG9wZW4uICBUaGV5IHdpbGwgbm90IGFwcGx5IGFueSBtYXJnaW5zL2JvcmRl
ci9wYWRkaW5nIG9uCiAgICAgLy8gYW55IHNpZGUuCiAgICAgYm9vbCBpbmNsdWRlTGVmdEVkZ2Ug
PSBmYWxzZTsKICAgICBib29sIGluY2x1ZGVSaWdodEVkZ2UgPSBmYWxzZTsKIAogICAgIFJlbmRl
ckZsb3cqIGZsb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4ob2JqZWN0KCkpOwotICAgIAor
CiAgICAgaWYgKCFmbG93LT5maXJzdENoaWxkKCkpCiAgICAgICAgIGluY2x1ZGVMZWZ0RWRnZSA9
IGluY2x1ZGVSaWdodEVkZ2UgPSB0cnVlOyAvLyBFbXB0eSBpbmxpbmVzIG5ldmVyIHNwbGl0IGFj
cm9zcyBsaW5lcy4KICAgICBlbHNlIGlmIChwYXJlbnQoKSkgeyAvLyBUaGUgcm9vdCBpbmxpbmUg
Ym94IG5ldmVyIGhhcyBib3JkZXJzL21hcmdpbnMvcGFkZGluZy4KICAgICAgICAgYm9vbCBsdHIg
PSBmbG93LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFI7Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIENoZWNrIHRvIHNlZSBpZiBhbGwgaW5pdGlhbCBsaW5lcyBhcmUgdW5jb25zdHJ1Y3RlZC4g
IElmIHNvLCB0aGVuCiAgICAgICAgIC8vIHdlIGtub3cgdGhlIGlubGluZSBiZWdhbiBvbiB0aGlz
IGxpbmUuCiAgICAgICAgIGlmICghZmxvdy0+Zmlyc3RMaW5lQm94KCktPmlzQ29uc3RydWN0ZWQo
KSkgewpAQCAtMjE3LDEwICsyMjAsMTIgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpkZXRlcm1pbmVT
cGFjaW5nRm9yRgogICAgICAgICAgICAgY3VyckZsb3ctPmRldGVybWluZVNwYWNpbmdGb3JGbG93
Qm94ZXMobGFzdExpbmUsIGVuZE9iamVjdCk7CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYKIH0K
IAogaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgpCiB7Cisj
aWYgMAkvLyBGSVhNRTogbmVlZHMgbWVyZ2UKICAgICAvLyBTZXQgb3VyIHggcG9zaXRpb24uCiAg
ICAgc2V0WFBvcyh4KTsKIApAQCAtMjU3LDEwICsyNjIsMTQgQEAgaW50IElubGluZUZsb3dCb3g6
OnBsYWNlQm94ZXNIb3Jpem9udGFsbAogICAgIHggKz0gYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdS
aWdodCgpOwogICAgIHNldFdpZHRoKHgtc3RhcnRYKTsKICAgICByZXR1cm4geDsKKyNlbHNlCisg
IHJldHVybiAwOworI2VuZGlmCiB9CiAKIHZvaWQgSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFs
aWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKQogeworI2lmIDAJLy8gRklYTUU6IG5lZWRzIG1l
cmdlCiAgICAgaW50IG1heFBvc2l0aW9uVG9wID0gMDsKICAgICBpbnQgbWF4UG9zaXRpb25Cb3R0
b20gPSAwOwogICAgIGludCBtYXhBc2NlbnQgPSAwOwpAQCAtMjcxLDcgKzI4MCw3IEBAIHZvaWQg
SW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMKICAgICB3aGlsZSAoY3VyciAmJiAh
Y3Vyci0+ZWxlbWVudCgpKQogICAgICAgICBjdXJyID0gY3Vyci0+Y29udGFpbmVyKCk7CiAgICAg
Ym9vbCBzdHJpY3RNb2RlID0gKGN1cnIgJiYgY3Vyci0+ZWxlbWVudCgpLT5nZXREb2N1bWVudCgp
LT5pblN0cmljdE1vZGUoKSk7Ci0gICAgCisKICAgICBjb21wdXRlTG9naWNhbEJveEhlaWdodHMo
bWF4UG9zaXRpb25Ub3AsIG1heFBvc2l0aW9uQm90dG9tLCBtYXhBc2NlbnQsIG1heERlc2NlbnQs
IHN0cmljdE1vZGUpOwogCiAgICAgaWYgKG1heEFzY2VudCArIG1heERlc2NlbnQgPCBRTUFYKG1h
eFBvc2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSkpCkBAIC0yODksNiArMjk4LDcgQEAgdm9p
ZCBJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcwogICAgICAgICBzaHJpbmtCb3hl
c1dpdGhOb1RleHRDaGlsZHJlbih0b3BQb3NpdGlvbiwgYm90dG9tUG9zaXRpb24pOwogICAgIAog
ICAgIGhlaWdodE9mQmxvY2sgKz0gbWF4SGVpZ2h0OworI2VuZGlmCiB9CiAKIHZvaWQgSW5saW5l
Rmxvd0JveDo6YWRqdXN0TWF4QXNjZW50QW5kRGVzY2VudChpbnQmIG1heEFzY2VudCwgaW50JiBt
YXhEZXNjZW50LApAQCAtMzE5LDYgKzMyOSw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRqdXN0
TWF4QXNjZW50QW5kRGUKIHZvaWQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZUxvZ2ljYWxCb3hIZWln
aHRzKGludCYgbWF4UG9zaXRpb25Ub3AsIGludCYgbWF4UG9zaXRpb25Cb3R0b20sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1heEFzY2VudCwgaW50
JiBtYXhEZXNjZW50LCBib29sIHN0cmljdE1vZGUpCiB7CisjaWYgMAkvLyBGSVhNRTogbmVlZHMg
bWVyZ2UKICAgICBpZiAoaXNSb290SW5saW5lQm94KCkpIHsKICAgICAgICAgLy8gRXhhbWluZSBv
dXIgcm9vdCBib3guCiAgICAgICAgIHNldEhlaWdodChvYmplY3QoKS0+bGluZUhlaWdodChtX2Zp
cnN0TGluZSkpOwpAQCAtMzM4LDcgKzM0OSw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29tcHV0
ZUxvZ2ljYWxCb3hIZWkKICAgICAgICAgICAgICAgICBtYXhEZXNjZW50ID0gZGVzY2VudDsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmlyc3RD
aGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7CiAgICAgICAgIGN1cnIt
PnNldEhlaWdodChjdXJyLT5vYmplY3QoKS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSkpOwogICAg
ICAgICBjdXJyLT5zZXRCYXNlbGluZShjdXJyLT5vYmplY3QoKS0+YmFzZWxpbmVQb3NpdGlvbiht
X2ZpcnN0TGluZSkpOwpAQCAtMzYzLDYgKzM3NCw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29t
cHV0ZUxvZ2ljYWxCb3hIZWkKICAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lRmxvd0JveCgpKQog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIpLT5jb21wdXRlTG9n
aWNhbEJveEhlaWdodHMobWF4UG9zaXRpb25Ub3AsIG1heFBvc2l0aW9uQm90dG9tLCBtYXhBc2Nl
bnQsIG1heERlc2NlbnQsIHN0cmljdE1vZGUpOwogICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIElu
bGluZUZsb3dCb3g6OnBsYWNlQm94ZXNWZXJ0aWNhbGx5KGludCB5LCBpbnQgbWF4SGVpZ2h0LCBp
bnQgbWF4QXNjZW50LCBib29sIHN0cmljdE1vZGUsCkBAIC0zNzAsNyArMzgyLDcgQEAgdm9pZCBJ
bmxpbmVGbG93Qm94OjpwbGFjZUJveGVzVmVydGljYWxseQogewogICAgIGlmIChpc1Jvb3RJbmxp
bmVCb3goKSkKICAgICAgICAgc2V0WVBvcyh5ICsgbWF4QXNjZW50IC0gYmFzZWxpbmUoKSk7Ly8g
UGxhY2Ugb3VyIHJvb3QgYm94LgotICAgIAorCiAgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBm
aXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAg
Ly8gQWRqdXN0IGJveGVzIHRvIHVzZSB0aGVpciByZWFsIGJveCB5L2hlaWdodCBhbmQgbm90IHRo
ZSBsb2dpY2FsIGhlaWdodCAoYXMgZGljdGF0ZWQgYnkKICAgICAgICAgLy8gbGluZS1oZWlnaHQp
LgpAQCAtNDU3LDEwICs0NjksMTEgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpzaHJpbmtCb3hlc1dp
dGhOb1RleAogdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91bmRBbmRCb3JkZXIoUVBh
aW50ZXIgKnAsIGludCBfeCwgaW50IF95LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF93LCBpbnQgX2gsIGludCBfdHgsIGludCBfdHksIGludCB4T2Zm
c2V0T25MaW5lKQogeworI2lmIDAJLy8gRklYTUU6IG5lZWRzIG1lcmdlCiAgICAgLy8gTW92ZSB4
L3kgdG8gb3VyIGNvb3JkaW5hdGVzLgogICAgIF90eCArPSBtX3g7CiAgICAgX3R5ICs9IG1feTsK
LSAgICAKKwogICAgIGludCB3ID0gd2lkdGgoKTsKICAgICBpbnQgaCA9IGhlaWdodCgpOwogCkBA
IC01MDksMTAgKzUyMiwxMiBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50QmFja2dyb3VuZEFu
ZEJvCiAgICAgICAgIGlmIChwYXJlbnQoKSAmJiBvYmplY3QoKS0+c3R5bGUoKS0+aGFzQm9yZGVy
KCkpCiAgICAgICAgICAgICBvYmplY3QoKS0+cGFpbnRCb3JkZXIocCwgX3R4LCBfdHksIHcsIGgs
IG9iamVjdCgpLT5zdHlsZSgpLCBpbmNsdWRlTGVmdEVkZ2UoKSwgaW5jbHVkZVJpZ2h0RWRnZSgp
KTsKICAgICB9CisjZW5kaWYKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkRHJhd0RlY29yYXRpb24o
UmVuZGVyT2JqZWN0KiBvYmopCiB7CisjaWYgMAkvLyBGSVhNRTogbmVlZHMgbWVyZ2UKICAgICBi
b29sIHNob3VsZERyYXcgPSBmYWxzZTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG9i
ai0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5n
KCkpIHsKQEAgLTUyNCwxNCArNTM5LDE2IEBAIHN0YXRpYyBib29sIHNob3VsZERyYXdEZWNvcmF0
aW9uKFJlbmRlck8KICAgICAgICAgICAgICAgICAgIWN1cnItPmVsZW1lbnQoKSB8fCAhY3Vyci0+
ZWxlbWVudCgpLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpKSB7CiAgICAgICAgICAgICBzaG91
bGREcmF3ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CQorICAgICAgICB9
CiAgICAgfQogICAgIHJldHVybiBzaG91bGREcmF3OworI2VuZGlmCiB9CiAKIHZvaWQgSW5saW5l
Rmxvd0JveDo6cGFpbnREZWNvcmF0aW9ucyhRUGFpbnRlciAqcCwgaW50IF94LCBpbnQgX3ksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF93LCBpbnQgX2gsIGludCBf
dHgsIGludCBfdHkpCiB7CisjaWYgMAkvLyBGSVhNRTogbmVlZHMgbWVyZ2UKICAgICAvLyBOb3cg
cGFpbnQgb3VyIHRleHQgZGVjb3JhdGlvbnMuIFdlIG9ubHkgZG8gdGhpcyBpZiB3ZSBhcmVuJ3Qg
aW4gcXVpcmtzIG1vZGUgKGkuZS4sIGluCiAgICAgLy8gYWxtb3N0LXN0cmljdCBtb2RlIG9yIHN0
cmljdCBtb2RlKS4KICAgICBfdHggKz0gbV94OwpAQCAtNTU5LDQgKzU3Niw1IEBAIHZvaWQgSW5s
aW5lRmxvd0JveDo6cGFpbnREZWNvcmF0aW9ucyhRUGEKICAgICAgICAgICAgIHAtPmRyYXdMaW5l
Rm9yVGV4dChfdHgsIF90eSwgMiptX2Jhc2VsaW5lLzMsIHcpOwogICAgICAgICB9CiAgICAgfQor
I2VuZGlmCiB9CkluZGV4OiByZW5kZXJfbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21l
L2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSByZW5kZXJfbGluZS5oCi0tLSByZW5kZXJfbGlu
ZS5oCTIzIEFwciAyMDAzIDEyOjQwOjU0IC0wMDAwCTEuMQorKysgcmVuZGVyX2xpbmUuaAk1IEF1
ZyAyMDAzIDE5OjIzOjIyIC0wMDAwCkBAIC05Nyw2ICs5NywxMyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBpbnQgdG9wT3ZlcmZsb3coKSB7IHJldHVybiB5UG9zKCk7IH0KICAgICB2aXJ0dWFsIGlu
dCBib3R0b21PdmVyZmxvdygpIHsgcmV0dXJuIHlQb3MoKStoZWlnaHQoKTsgfQogICAgIAorICAg
IC8qKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mZnNldCB0aGlzIGlubGluZSBib3ggY29udGFpbnMu
IERlZmF1bHRzIHRvIDAuCisgICAgICovCisgICAgdmlydHVhbCBsb25nIG1pbk9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICAvKiogUmV0dXJucyB0aGUgbWF4aW11bSBvZmZzZXQgdGhp
cyBpbmxpbmUgYm94IGNvbnRhaW5zLiBEZWZhdWx0cyB0byAxLgorICAgICAqLworICAgIHZpcnR1
YWwgbG9uZyBtYXhPZmZzZXQoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgCiBwdWJsaWM6IC8v
IEZJWE1FOiBXb3VsZCBsaWtlIHRvIG1ha2UgdGhpcyBwcm90ZWN0ZWQsIGJ1dCBtZXRob2RzIGFy
ZSBhY2Nlc3NpbmcgdGhlc2UKICAgICAgICAgLy8gbWVtYmVycyBvdmVyIGluIHRoZSBwYXJ0Lgog
ICAgIFJlbmRlck9iamVjdCogbV9vYmplY3Q7CkBAIC0xMzEsMTEgKzEzOCwxMSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXROZXh0TGluZUJveChJbmxpbmVSdW5Cb3gqIG4pIHsgbV9uZXh0TGluZSA9
IG47IH0KICAgICB2b2lkIHNldFByZXZpb3VzTGluZUJveChJbmxpbmVSdW5Cb3gqIHApIHsgbV9w
cmV2TGluZSA9IHA7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludEJhY2tncm91bmRBbmRCb3Jk
ZXIoUVBhaW50ZXIgKnAsIGludCBfeCwgaW50IF95LAotICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX3csIGludCBfaCwgaW50IF90eCwgaW50IF90eSwgaW50IHhPZmZzZXRPbkxpbmUpIHt9Owot
ICAgIHZpcnR1YWwgdm9pZCBwYWludERlY29yYXRpb25zKFFQYWludGVyICpwLCBpbnQgX3gsIGlu
dCBfeSwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IF93LCBpbnQgX2gsIGludCBfdHgsIGlu
dCBfdHkpIHt9OwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBwYWludEJhY2tncm91bmRBbmRCb3Jk
ZXIoUVBhaW50ZXIgKi8qcCovLCBpbnQgLypfeCovLCBpbnQgLypfeSovLAorICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgLypfdyovLCBpbnQgLypfaCovLCBpbnQgLypfdHgqLywgaW50IC8qX3R5
Ki8sIGludCAvKnhPZmZzZXRPbkxpbmUqLykge307CisgICAgdmlydHVhbCB2b2lkIHBhaW50RGVj
b3JhdGlvbnMoUVBhaW50ZXIgKi8qcCovLCBpbnQgLypfeCovLCBpbnQgLypfeSovLAorICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgLypfdyovLCBpbnQgLypfaCovLCBpbnQgLypfdHgqLywgaW50
IC8qX3R5Ki8pIHt9OworCiBwcm90ZWN0ZWQ6CiAgICAgSW5saW5lUnVuQm94KiBtX3ByZXZMaW5l
OyAgLy8gVGhlIHByZXZpb3VzIGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0CiAg
ICAgSW5saW5lUnVuQm94KiBtX25leHRMaW5lOyAgLy8gVGhlIG5leHQgYm94IHRoYXQgYWxzbyB1
c2VzIG91ciBSZW5kZXJPYmplY3QKQEAgLTIxNSw3ICsyMjIsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHRvcFBvc2l0aW9uLCBpbnQmIGJvdHRvbVBvc2l0
aW9uKTsKICAgICB2b2lkIHNocmlua0JveGVzV2l0aE5vVGV4dENoaWxkcmVuKGludCB0b3BQb3Np
dGlvbiwgaW50IGJvdHRvbVBvc2l0aW9uKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3Zl
cmZsb3dQb3NpdGlvbnMoaW50IHRvcCwgaW50IGJvdHRvbSkge30KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0T3ZlcmZsb3dQb3NpdGlvbnMoaW50IC8qdG9wKi8sIGludCAvKmJvdHRvbSovKSB7fQogICAg
IAogcHJvdGVjdGVkOgogICAgIElubGluZUJveCogbV9maXJzdENoaWxkOwpJbmRleDogcmVuZGVy
X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxMQpk
aWZmIC11IC1wIC1yMS4yMTEgcmVuZGVyX29iamVjdC5jcHAKLS0tIHJlbmRlcl9vYmplY3QuY3Bw
CTE3IEFwciAyMDAzIDE2OjA3OjQ2IC0wMDAwCTEuMjExCisrKyByZW5kZXJfb2JqZWN0LmNwcAk1
IEF1ZyAyMDAzIDE5OjIzOjIzIC0wMDAwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAia2h0
bWx2aWV3LmgiCiAjaW5jbHVkZSAicmVuZGVyX2FyZW5hLmgiCiAjaW5jbHVkZSAicmVuZGVyX2xh
eWVyLmgiCisjaW5jbHVkZSAicmVuZGVyX2xpbmUuaCIKIAogI2luY2x1ZGUgPGFzc2VydC5oPgog
dXNpbmcgbmFtZXNwYWNlIERPTTsKQEAgLTk2Niw5ICs5NjcsMTAgQEAgYm9vbCBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlUG9zaXRpb24oaW50IAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6
OmN1cnNvclBvcyhpbnQgLypvZmZzZXQqLywgaW50ICZfeCwgaW50ICZfeSwgaW50ICZoZWlnaHQp
Cit2b2lkIFJlbmRlck9iamVjdDo6Y2FyZXRQb3MoaW50IC8qb2Zmc2V0Ki8sIGJvb2wgLypvdmVy
cmlkZSovLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJndpZHRoLCBpbnQgJmhlaWdodCkKIHsKICAg
ICBfeCA9IF95ID0gaGVpZ2h0ID0gLTE7CisgICAgd2lkdGggPSAxOwogfQogCiBpbnQgUmVuZGVy
T2JqZWN0OjpwYWRkaW5nVG9wKCkgY29uc3QKQEAgLTEzNDksMyArMTM1MSw5IEBAIHZvaWQgUmVu
ZGVyT2JqZWN0OjpzY2hlZHVsZVJlbGF5b3V0KGJvb2wKIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1v
dmVMZWZ0b3ZlckFub255bW91c0JveGVzKCkKIHsKIH0KKworSW5saW5lQm94KiBSZW5kZXJPYmpl
Y3Q6OmNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCkKK3sKKyAgICByZXR1
cm4gbmV3IChyZW5kZXJBcmVuYSgpKSBJbmxpbmVCb3godGhpcyk7Cit9CisKSW5kZXg6IHJlbmRl
cl9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1MApkaWZm
IC11IC1wIC1yMS4xNTAgcmVuZGVyX29iamVjdC5oCi0tLSByZW5kZXJfb2JqZWN0LmgJMTYgQXBy
IDIwMDMgMjI6NTg6MDYgLTAwMDAJMS4xNTAKKysrIHJlbmRlcl9vYmplY3QuaAk1IEF1ZyAyMDAz
IDE5OjIzOjI0IC0wMDAwCkBAIC04Nyw2ICs4Nyw4IEBAIG5hbWVzcGFjZSBraHRtbCB7CiAgICAg
Y2xhc3MgUmVuZGVyRnJhbWVTZXQ7CiAgICAgY2xhc3MgUmVuZGVyQXJlbmE7CiAgICAgY2xhc3Mg
UmVuZGVyTGF5ZXI7CisgICAgY2xhc3MgSW5saW5lQm94OworICAgIGNsYXNzIElubGluZUZsb3dC
b3g7CiAKIC8qKgogICogQmFzZSBDbGFzcyBmb3IgYWxsIHJlbmRlcmluZyB0cmVlIG9iamVjdHMu
CkBAIC0yNTYsNiArMjU4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzY2hlZHVsZVJlbGF5b3V0
KGJvb2wgcmVwYWludCk7CiAKKyAgICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5lQm94
KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94KTsKKwogICAgIC8vIGZvciBkaXNjdXNzaW9uIG9mIGxp
bmVIZWlnaHQgc2VlIENTUzIgc3BlYwogICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodCggYm9v
bCBmaXJzdExpbmUgKSBjb25zdDsKICAgICAvLyBmb3IgdGhlIHZlcnRpY2FsLWFsaWduIHByb3Bl
cnR5IG9mIGlubGluZSBlbGVtZW50cwpAQCAtNDYzLDcgKzQ2Nyw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgLy8gcG9zaXRpb25pbmcgb2YgaW5saW5lIGNoaWxkcyAoYmlkaSkKLSAgICB2aXJ0dWFsIHZv
aWQgcG9zaXRpb24oaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGJvb2wsIGJvb2wsIGludCkge30K
KyAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb24oSW5saW5lQm94KiwgaW50LCBpbnQsIGJvb2wsIGlu
dCkge30KKy8vICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgYm9vbCwgYm9vbCwgaW50KSB7fQogCiAgICAgZW51bSBTZWxlY3Rpb25TdGF0ZSB7CiAgICAg
ICAgIFNlbGVjdGlvbk5vbmUsCkBAIC00NzYsNyArNDgxLDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gU2VsZWN0
aW9uTm9uZTt9CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0
YXRlKSB7fQogCi0gICAgdmlydHVhbCB2b2lkIGN1cnNvclBvcyhpbnQgLypvZmZzZXQqLywgaW50
ICYvKl94Ki8sIGludCAmLypfeSovLCBpbnQgJi8qaGVpZ2h0Ki8pOworICAgIC8qKgorICAgICAq
IFJldHVybnMgdGhlIGNvbnRlbnQgY29vcmRpbmF0ZXMgb2YgdGhlIGNhcmV0IHdpdGhpbiB0aGlz
IHJlbmRlciBvYmplY3QuCisgICAgICogQHBhcmFtIG9mZnNldCB6ZXJvLWJhc2VkIG9mZnNldCBk
ZXRlcm1pbmluZyBwb3NpdGlvbiB3aXRoaW4gdGhlIHJlbmRlciBvYmplY3QuCisgICAgICogQHBh
cmFtIG92ZXJyaWRlIEBwIHRydWUgaWYgaW5wdXQgb3ZlcnJpZGVzIGV4aXN0aW5nIGNoYXJhY3Rl
cnMsCisgICAgICoJCUBwIGZhbHNlIGlmIGl0IGluc2VydHMgdGhlbS4gVGhlIHdpZHRoIG9mIHRo
ZSBjYXJldCBkZXBlbmRzIG9uCisgICAgICoJCXRoaXMgb25lLgorICAgICAqIEBwYXJhbSBfeCBy
ZXR1cm5zIHRoZSBsZWZ0IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gX3kgcmV0dXJucyB0aGUg
dG9wIGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gd2lkdGggcmV0dXJucyB0aGUgY2FyZXQncyB3
aWR0aAorICAgICAqIEBwYXJhbSBoZWlnaHQgcmV0dXJucyB0aGUgY2FyZXQncyBoZWlnaHQKKyAg
ICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgY2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlk
ZSwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpOwogCiAgICAgLy8g
cmV0dXJucyB0aGUgbG93ZXN0IHBvc2l0aW9uIG9mIHRoZSBsb3dlc3Qgb2JqZWN0IGluIHRoYXQg
cGFydGljdWxhciBvYmplY3QuCiAgICAgLy8gVGhpcyAnaGVpZ2h0JyBpcyByZWxhdGl2ZSB0byB0
aGUgdG9wbGVmdCBvZiB0aGUgbWFyZ2luIGJveCBvZiB0aGUgb2JqZWN0LgpJbmRleDogcmVuZGVy
X3N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OQpkaWZm
IC11IC1wIC1yMS41OSByZW5kZXJfc3R5bGUuY3BwCi0tLSByZW5kZXJfc3R5bGUuY3BwCTQgRmVi
IDIwMDMgMjE6Mzg6MjIgLTAwMDAJMS41OQorKysgcmVuZGVyX3N0eWxlLmNwcAk1IEF1ZyAyMDAz
IDE5OjIzOjI0IC0wMDAwCkBAIC0zMDcsNiArMzA3LDcgQEAgUmVuZGVyU3R5bGU6OkRpZmYgUmVu
ZGVyU3R5bGU6OmRpZmYoIGNvbgogCiAgICAgLy8gTm9uVmlzaWJsZToKIC8vIAlFQ3Vyc29yIF9j
dXJzb3Jfc3R5bGUgOiA0OworLy8JRVVzZXJJbnB1dCBfdXNlcl9pbnB1dCA6IDI7CWFzIGxvbmcg
YXMgOmVuYWJsZWQgaXMgbm90IGltcGwnZAogCiAvLyAjIyMgdGhpcyBuZWVkcyB3b3JrIHRvIGtu
b3cgbW9yZSBleGFjdGx5IGlmIHdlIG5lZWQgYSByZWxheW91dAogLy8gICAgIG9yIGp1c3QgYSBy
ZXBhaW50CkluZGV4OiByZW5kZXJfc3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9r
ZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuODcKZGlmZiAtdSAtcCAtcjEuODcgcmVuZGVyX3N0eWxlLmgKLS0tIHJlbmRlcl9z
dHlsZS5oCTE3IEFwciAyMDAzIDE2OjA3OjQ2IC0wMDAwCTEuODcKKysrIHJlbmRlcl9zdHlsZS5o
CTUgQXVnIDIwMDMgMTk6MjM6MjUgLTAwMDAKQEAgLTQ0NSw2ICs0NDUsMTAgQEAgZW51bSBFQ3Vy
c29yIHsKICAgICBDVVJTT1JfU19SRVNJWkUsIENVUlNPUl9XX1JFU0laRSwgQ1VSU09SX1RFWFQs
IENVUlNPUl9XQUlULCBDVVJTT1JfSEVMUAogfTsKIAorZW51bSBFVXNlcklucHV0IHsKKyAgICBV
SV9FTkFCTEVELCBVSV9ESVNBQkxFRCwgVUlfTk9ORQorfTsKKwogZW51bSBDb250ZW50VHlwZSB7
CiAgICAgQ09OVEVOVF9OT05FLCBDT05URU5UX09CSkVDVCwgQ09OVEVOVF9URVhULAogICAgIENP
TlRFTlRfQVRUUgpAQCAtNTEzLDcgKzUxNyw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAg
ICAvLyBub24gQ1NTMiBpbmhlcml0ZWQKICAgICAgICAgICAgICAgICBib29sIF92aXN1YWxseU9y
ZGVyZWQgOiAxOwogICAgICAgICAgICAgICAgIGJvb2wgX2h0bWxIYWNrcyA6MTsKLSAgICAgICAg
ICAgICAgICBpbnQgX3VudXNlZCA6IDI7CisgICAgICAgICAgICAgICAgRVVzZXJJbnB1dCBfdXNl
cl9pbnB1dCA6IDI7CiAgICAgICAgICAgICB9IGY7CiAgICAgICAgICAgICBRX1VJTlQzMiBfaWZs
YWdzOwogICAgICAgICB9OwpAQCAtNTkwLDcgKzU5NCw3IEBAIHByb3RlY3RlZDoKIAlpbmhlcml0
ZWRfZmxhZ3MuZi5fd2hpdGVfc3BhY2UgPSBOT1JNQUw7CiAJaW5oZXJpdGVkX2ZsYWdzLmYuX3Zp
c3VhbGx5T3JkZXJlZCA9IGZhbHNlOwogCWluaGVyaXRlZF9mbGFncy5mLl9odG1sSGFja3M9ZmFs
c2U7Ci0JaW5oZXJpdGVkX2ZsYWdzLmYuX3VudXNlZCA9IDA7CisJaW5oZXJpdGVkX2ZsYWdzLmYu
X3VzZXJfaW5wdXQgPSBVSV9OT05FOwogCiAJbm9uaW5oZXJpdGVkX2ZsYWdzLmYuX2Rpc3BsYXkg
PSBJTkxJTkU7CiAJbm9uaW5oZXJpdGVkX2ZsYWdzLmYuX2JnX3JlcGVhdCA9IFJFUEVBVDsKQEAg
LTc0OCw2ICs3NTIsOCBAQCBwdWJsaWM6CiAKICAgICBFQ3Vyc29yIGN1cnNvcigpIGNvbnN0IHsg
cmV0dXJuIGluaGVyaXRlZF9mbGFncy5mLl9jdXJzb3Jfc3R5bGU7IH0KIAorICAgIEVVc2VySW5w
dXQgdXNlcklucHV0KCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkX2ZsYWdzLmYuX3VzZXJfaW5w
dXQ7IH0KKwogLy8gYXR0cmlidXRlIHNldHRlciBtZXRob2RzCiAKICAgICB2b2lkIHNldERpc3Bs
YXkoRURpc3BsYXkgdikgeyAgbm9uaW5oZXJpdGVkX2ZsYWdzLmYuX2Rpc3BsYXkgPSB2OyB9CkBA
IC04NTMsNiArODU5LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGFkZGluZ1JpZ2h0KExlbmd0
aCB2KSAgeyAgU0VUX1ZBUihzdXJyb3VuZCxwYWRkaW5nLnJpZ2h0LHYpIH0KIAogICAgIHZvaWQg
c2V0Q3Vyc29yKCBFQ3Vyc29yIGMgKSB7IGluaGVyaXRlZF9mbGFncy5mLl9jdXJzb3Jfc3R5bGUg
PSBjOyB9CisgICAgCisgICAgdm9pZCBzZXRVc2VySW5wdXQoRVVzZXJJbnB1dCB1aSkgeyBpbmhl
cml0ZWRfZmxhZ3MuZi5fdXNlcl9pbnB1dCA9IHVpOyB9CiAKICAgICBib29sIGh0bWxIYWNrcygp
IGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZF9mbGFncy5mLl9odG1sSGFja3M7IH0KICAgICB2b2lk
IHNldEh0bWxIYWNrcyhib29sIGI9dHJ1ZSkgeyBpbmhlcml0ZWRfZmxhZ3MuZi5faHRtbEhhY2tz
ID0gYjsgfQpJbmRleDogcmVuZGVyX3RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21l
L2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJfdGV4dC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjA0CmRpZmYgLXUgLXAgLXIxLjIwNCByZW5kZXJfdGV4dC5jcHAKLS0tIHJl
bmRlcl90ZXh0LmNwcAkyMiBNYXIgMjAwMyAyMToyMDozOCAtMDAwMAkxLjIwNAorKysgcmVuZGVy
X3RleHQuY3BwCTUgQXVnIDIwMDMgMTk6MjM6MjYgLTAwMDAKQEAgLTMsNyArMyw3IEBACiAgKgog
ICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwMC0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQot
ICogICAgICAgICAgIChDKSAyMDAyIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDIs
MzggKzQyLDM4IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIHVzaW5nIG5hbWVzcGFjZSBET007
CiAKICNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgYm9vbCBpblRleHRTbGF2ZURldGFjaDsKK3N0YXRp
YyBib29sIGluVGV4dFJ1bkRldGFjaDsKICNlbmRpZgogCi12b2lkIFRleHRTbGF2ZTo6ZGV0YWNo
KFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSkKK3ZvaWQgVGV4dFJ1bjo6ZGV0YWNoKFJlbmRlckFy
ZW5hKiByZW5kZXJBcmVuYSkKIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgaW5UZXh0U2xhdmVEZXRh
Y2ggPSB0cnVlOworICAgIGluVGV4dFJ1bkRldGFjaCA9IHRydWU7CiAjZW5kaWYKICAgICBkZWxl
dGUgdGhpczsKICNpZm5kZWYgTkRFQlVHCi0gICAgaW5UZXh0U2xhdmVEZXRhY2ggPSBmYWxzZTsK
KyAgICBpblRleHRSdW5EZXRhY2ggPSBmYWxzZTsKICNlbmRpZgogCiAgICAgLy8gUmVjb3ZlciB0
aGUgc2l6ZSBsZWZ0IHRoZXJlIGZvciB1cyBieSBvcGVyYXRvciBkZWxldGUgYW5kIGZyZWUgdGhl
IG1lbW9yeS4KICAgICByZW5kZXJBcmVuYS0+ZnJlZSgqKHNpemVfdCAqKXRoaXMsIHRoaXMpOwog
fQogCi12b2lkKiBUZXh0U2xhdmU6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIFJlbmRlckFyZW5h
KiByZW5kZXJBcmVuYSkgdGhyb3coKQordm9pZCogVGV4dFJ1bjo6b3BlcmF0b3IgbmV3KHNpemVf
dCBzeiwgUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKSB0aHJvdygpCiB7CiAgICAgcmV0dXJuIHJl
bmRlckFyZW5hLT5hbGxvY2F0ZShzeik7CiB9CiAKLXZvaWQgVGV4dFNsYXZlOjpvcGVyYXRvciBk
ZWxldGUodm9pZCogcHRyLCBzaXplX3Qgc3opCit2b2lkIFRleHRSdW46Om9wZXJhdG9yIGRlbGV0
ZSh2b2lkKiBwdHIsIHNpemVfdCBzeikKIHsKLSAgICBhc3NlcnQoaW5UZXh0U2xhdmVEZXRhY2gp
OworICAgIGFzc2VydChpblRleHRSdW5EZXRhY2gpOwogCiAgICAgLy8gU3Rhc2ggc2l6ZSB3aGVy
ZSBkZXRhY2ggY2FuIGZpbmQgaXQuCiAgICAgKihzaXplX3QgKilwdHIgPSBzejsKIH0KIAogCi12
b2lkIFRleHRTbGF2ZTo6cGFpbnRTZWxlY3Rpb24oY29uc3QgRm9udCAqZiwgUmVuZGVyVGV4dCAq
dGV4dCwgUVBhaW50ZXIgKnAsIFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IHR4LCBpbnQgdHksIGlu
dCBzdGFydFBvcywgaW50IGVuZFBvcykKK3ZvaWQgVGV4dFJ1bjo6cGFpbnRTZWxlY3Rpb24oY29u
c3QgRm9udCAqZiwgUmVuZGVyVGV4dCAqdGV4dCwgUVBhaW50ZXIgKnAsIFJlbmRlclN0eWxlKiBz
dHlsZSwgaW50IHR4LCBpbnQgdHksIGludCBzdGFydFBvcywgaW50IGVuZFBvcykKIHsKICAgICBp
ZihzdGFydFBvcyA+IG1fbGVuKSByZXR1cm47CiAgICAgaWYoc3RhcnRQb3MgPCAwKSBzdGFydFBv
cyA9IDA7CkBAIC04MywxMiArODMsMTIgQEAgdm9pZCBUZXh0U2xhdmU6OnBhaW50U2VsZWN0aW9u
KGNvbnN0IEZvbgogCiAgICAgdHkgKz0gbV9iYXNlbGluZTsKIAotICAgIC8va2REZWJ1ZyggNjA0
MCApIDw8ICJ0ZXh0U2xhdmU6OnBhaW50aW5nKCIgPDwgcy5zdHJpbmcoKSA8PCAiKSBhdCgiIDw8
IHgrX3R4IDw8ICIvIiA8PCB5K190eSA8PCAiKSIgPDwgZW5kbDsKKyAgICAvL2tkRGVidWcoIDYw
NDAgKSA8PCAidGV4dFJ1bjo6cGFpbnRpbmcoIiA8PCBRQ29uc3RTdHJpbmcodGV4dC0+c3RyLT5z
ICsgbV9zdGFydCwgbV9sZW4pLnN0cmluZygpIDw8ICIpIGF0KCIgPDwgbV94K3R4IDw8ICIvIiA8
PCBtX3krdHkgPDwgIikiIDw8IGVuZGw7CiAgICAgZi0+ZHJhd1RleHQocCwgbV94ICsgdHgsIG1f
eSArIHR5LCB0ZXh0LT5zdHItPnMsIHRleHQtPnN0ci0+bCwgbV9zdGFydCwgbV9sZW4sCiAJCW1f
dG9BZGQsIG1fcmV2ZXJzZWQgPyBRUGFpbnRlcjo6UlRMIDogUVBhaW50ZXI6OkxUUiwgc3RhcnRQ
b3MsIGVuZFBvcywgYyk7CiB9CiAKLXZvaWQgVGV4dFNsYXZlOjpwYWludERlY29yYXRpb24oIFFQ
YWludGVyICpwdCwgUmVuZGVyVGV4dCogcCwgaW50IF90eCwgaW50IF90eSwgaW50IGRlY28sIGJv
b2wgYmVnaW4sIGJvb2wgZW5kKQordm9pZCBUZXh0UnVuOjpwYWludERlY29yYXRpb24oIFFQYWlu
dGVyICpwdCwgUmVuZGVyVGV4dCogcCwgaW50IF90eCwgaW50IF90eSwgaW50IGRlY28sIGJvb2wg
YmVnaW4sIGJvb2wgZW5kKQogewogICAgIF90eCArPSBtX3g7CiAgICAgX3R5ICs9IG1feTsKQEAg
LTExNCw3ICsxMTQsNyBAQCB2b2lkIFRleHRTbGF2ZTo6cGFpbnREZWNvcmF0aW9uKCBRUGFpbnRl
CiAgICAgLy8gc3VwcG9ydCBpdC4gTGFycwogfQogCi12b2lkIFRleHRTbGF2ZTo6cGFpbnRCb3hE
ZWNvcmF0aW9ucyhRUGFpbnRlciAqcHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyVGV4dCAq
cCwgaW50IF90eCwgaW50IF90eSwgYm9vbCBiZWdpbiwgYm9vbCBlbmQpCit2b2lkIFRleHRSdW46
OnBhaW50Qm94RGVjb3JhdGlvbnMoUVBhaW50ZXIgKnB0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlclRleHQgKnAsIGludCBfdHgsIGludCBfdHksIGJvb2wgYmVnaW4sIGJvb2wgZW5kKQogewog
ICAgIGludCB0b3BFeHRyYSA9IHAtPmJvcmRlclRvcCgpICsgcC0+cGFkZGluZ1RvcCgpOwogICAg
IGludCBib3R0b21FeHRyYSA9IHAtPmJvcmRlckJvdHRvbSgpICsgcC0+cGFkZGluZ0JvdHRvbSgp
OwpAQCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgVGV4dFNsYXZlOjpwYWludEJveERlY29yYXRpb25z
KFFQYWkKICAgICAgICAgcC0+cGFpbnRCb3JkZXIocHQsIF90eCwgX3R5LCB3aWR0aCwgaGVpZ2h0
LCBzdHlsZSwgYmVnaW4sIGVuZCk7CiB9CiAKLUZpbmRTZWxlY3Rpb25SZXN1bHQgVGV4dFNsYXZl
OjpjaGVja1NlbGVjdGlvblBvaW50KGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBj
b25zdCBGb250ICpmLCBSZW5kZXJUZXh0ICp0ZXh0LCBpbnQgJiBvZmZzZXQsIHNob3J0IGxpbmVI
ZWlnaHQpCitGaW5kU2VsZWN0aW9uUmVzdWx0IFRleHRSdW46OmNoZWNrU2VsZWN0aW9uUG9pbnQo
aW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIGNvbnN0IEZvbnQgKmYsIFJlbmRlclRl
eHQgKnRleHQsIGludCAmIG9mZnNldCwgc2hvcnQgbGluZUhlaWdodCkKIHsKLS8vICAgICAgIGtk
RGVidWcoNjA0MCkgPDwgIlRleHRTbGF2ZTo6Y2hlY2tTZWxlY3Rpb25Qb2ludCAiIDw8IHRoaXMg
PDwgIiBfeD0iIDw8IF94IDw8ICIgX3k9IiA8PCBfeQorLy8gICAgICAga2REZWJ1Zyg2MDQwKSA8
PCAiVGV4dFJ1bjo6Y2hlY2tTZWxlY3Rpb25Qb2ludCAiIDw8IHRoaXMgPDwgIiBfeD0iIDw8IF94
IDw8ICIgX3k9IiA8PCBfeQogLy8gICAgICAgICAgICAgICAgICAgICA8PCAiIF90eCttX3g9IiA8
PCBfdHgrbV94IDw8ICIgX3R5K21feT0iIDw8IF90eSttX3kgPDwgZW5kbDsKICAgICBvZmZzZXQg
PSAwOwogCkBAIC0xNzcsNyArMTc3LDcgQEAgRmluZFNlbGVjdGlvblJlc3VsdCBUZXh0U2xhdmU6
OmNoZWNrU2VsZQogICAgIH0KIAogICAgIGludCBkZWx0YSA9IF94IC0gKF90eCArIG1feCk7Ci0g
ICAgLy9rZERlYnVnKDYwNDApIDw8ICJUZXh0U2xhdmU6OmNoZWNrU2VsZWN0aW9uUG9pbnQgZGVs
dGE9IiA8PCBkZWx0YSA8PCBlbmRsOworICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAiVGV4dFJ1bjo6
Y2hlY2tTZWxlY3Rpb25Qb2ludCBkZWx0YT0iIDw8IGRlbHRhIDw8IGVuZGw7CiAgICAgaW50IHBv
cyA9IDA7CiAgICAgaWYgKCBtX3JldmVyc2VkICkgewogCWRlbHRhIC09IG1fd2lkdGg7CkBAIC0y
MDYsMjMgKzIwNiw1NSBAQCBGaW5kU2VsZWN0aW9uUmVzdWx0IFRleHRTbGF2ZTo6Y2hlY2tTZWxl
CiAgICAgcmV0dXJuIFNlbGVjdGlvblBvaW50SW5zaWRlOwogfQogCitpbnQgVGV4dFJ1bjo6b2Zm
c2V0Rm9yUG9pbnQoaW50IF94LCBpbnQgJmF4KQoreworICBSZW5kZXJUZXh0ICp0ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dCAqPihvYmplY3QoKSk7CisgIFFDb25zdFN0cmluZyB0ZWtzdCh0LT5z
dHItPnMgKyBtX3N0YXJ0LCBtX2xlbik7CisgIGNvbnN0IFFGb250TWV0cmljcyAmZm0gPSB0LT5t
ZXRyaWNzKG1fZmlyc3RMaW5lKTsKKworICAvLyBEbyBiaW5hcnkgc2VhcmNoIGZvciBmaW5kaW5n
IG91dCBvZmZzZXQsIHNhdmVzIHNvbWUgdGltZSBmb3IgbG9uZworICAvLyBydW5zLgorICBpbnQg
c3RhcnQgPSAwOworICBpbnQgZW5kID0gbV9sZW47CisgIGF4ID0gbV94OworICBpbnQgb2Zmc2V0
ID0gKHN0YXJ0ICsgZW5kKSAvIDI7CisgIHdoaWxlIChlbmQgLSBzdGFydCA+IDEpIHsKKyAgICBv
ZmZzZXQgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICBheCA9IG1feCArIGZtLndpZHRoKHRla3N0
LnN0cmluZygpLCBvZmZzZXQpOworICAgIGlmIChheCA+IF94KSBlbmQgPSBvZmZzZXQ7CisgICAg
ZWxzZSBpZiAoYXggPCBfeCkgc3RhcnQgPSBvZmZzZXQ7CisgICAgZWxzZSBicmVhazsKKyAgfS8q
d2VuZCovCisgIHJldHVybiBtX3N0YXJ0ICsgb2Zmc2V0OworfQorCitsb25nIFRleHRSdW46Om1p
bk9mZnNldCgpIGNvbnN0Cit7CisgIHJldHVybiBtX3N0YXJ0OworfQorCitsb25nIFRleHRSdW46
Om1heE9mZnNldCgpIGNvbnN0Cit7CisgIHJldHVybiBtX3N0YXJ0ICsgbV9sZW47Cit9CisKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRleHRTbGF2ZUFycmF5OjpUZXh0U2xhdmVBcnJheSgp
CitUZXh0UnVuQXJyYXk6OlRleHRSdW5BcnJheSgpCiB7CiAgICAgc2V0QXV0b0RlbGV0ZShmYWxz
ZSk7CiB9CiAKLWludCBUZXh0U2xhdmVBcnJheTo6Y29tcGFyZUl0ZW1zKCBJdGVtIGQxLCBJdGVt
IGQyICkKK2ludCBUZXh0UnVuQXJyYXk6OmNvbXBhcmVJdGVtcyggSXRlbSBkMSwgSXRlbSBkMiAp
CiB7CiAgICAgYXNzZXJ0KGQxKTsKICAgICBhc3NlcnQoZDIpOwogCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFRleHRTbGF2ZSo+KGQxKS0+bV95IC0gc3RhdGljX2Nhc3Q8VGV4dFNsYXZlKj4oZDIp
LT5tX3k7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRSdW4qPihkMSktPm1feSAtIHN0YXRp
Y19jYXN0PFRleHRSdW4qPihkMiktPm1feTsKIH0KIAogLy8gcmVtb3ZlIHRoaXMgb25jZSBRVmVj
dG9yOjpic2VhcmNoIGlzIGZpeGVkCi1pbnQgVGV4dFNsYXZlQXJyYXk6OmZpbmRGaXJzdE1hdGNo
aW5nKEl0ZW0gZCkgY29uc3QKK2ludCBUZXh0UnVuQXJyYXk6OmZpbmRGaXJzdE1hdGNoaW5nKEl0
ZW0gZCkgY29uc3QKIHsKICAgICBpbnQgbGVuID0gY291bnQoKTsKIApAQCAtMjk3LDE4ICszMjks
MTggQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqXwogCiBSZW5kZXJU
ZXh0Ojp+UmVuZGVyVGV4dCgpCiB7Ci0gICAgZGVsZXRlU2xhdmVzKCByZW5kZXJBcmVuYSgpICk7
CisgICAgZGVsZXRlUnVucyggcmVuZGVyQXJlbmEoKSApOwogICAgIGlmKHN0cikgc3RyLT5kZXJl
ZigpOwogfQogCiAKIHZvaWQgUmVuZGVyVGV4dDo6ZGV0YWNoKFJlbmRlckFyZW5hKiByZW5kZXJB
cmVuYSkKIHsKLSAgICBkZWxldGVTbGF2ZXMocmVuZGVyQXJlbmEpOworICAgIGRlbGV0ZVJ1bnMo
cmVuZGVyQXJlbmEpOwogICAgIFJlbmRlck9iamVjdDo6ZGV0YWNoKHJlbmRlckFyZW5hKTsKIH0K
IAotdm9pZCBSZW5kZXJUZXh0OjpkZWxldGVTbGF2ZXMoUmVuZGVyQXJlbmEgKmFyZW5hKQordm9p
ZCBSZW5kZXJUZXh0OjpkZWxldGVSdW5zKFJlbmRlckFyZW5hICphcmVuYSkKIHsKICAgICAvLyB0
aGlzIGlzIGEgc2xpZ2h0IHZhcmlhbnQgb2YgUUFycmF5OjpjbGVhcigpLgogICAgIC8vIFdlIGRv
bid0IGRlbGV0ZSB0aGUgYXJyYXkgaXRzZWxmIGhlcmUgYmVjYXVzZSBpdHMKQEAgLTMxOSw3ICsz
NTEsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmRlbGV0ZVNsYXZlcyhSZW5kZXJBcmVuCiAgICAgICAg
IGlmICghYXJlbmEpCiAgICAgICAgICAgICBhcmVuYSA9IHJlbmRlckFyZW5hKCk7CiAgICAgICAg
IGZvcih1bnNpZ25lZCBpbnQgaT0wOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgIFRleHRT
bGF2ZSogcyA9IG1fbGluZXMuYXQoaSk7CisgICAgICAgICAgICBUZXh0UnVuKiBzID0gbV9saW5l
cy5hdChpKTsKICAgICAgICAgICAgIGlmIChzKQogICAgICAgICAgICAgICAgIHMtPmRldGFjaChh
cmVuYSk7CiAgICAgICAgIG1fbGluZXMucmVtb3ZlKGkpOwpAQCAtMzI5LDE3ICszNjEsMTcgQEAg
dm9pZCBSZW5kZXJUZXh0OjpkZWxldGVTbGF2ZXMoUmVuZGVyQXJlbgogICAgIEtIVE1MQXNzZXJ0
KG1fbGluZXMuY291bnQoKSA9PSAwKTsKIH0KIAotVGV4dFNsYXZlICogUmVuZGVyVGV4dDo6Zmlu
ZFRleHRTbGF2ZSggaW50IG9mZnNldCwgaW50ICZwb3MgKQorVGV4dFJ1biAqIFJlbmRlclRleHQ6
OmZpbmRUZXh0UnVuKCBpbnQgb2Zmc2V0LCBpbnQgJnBvcyApCiB7Ci0gICAgLy8gVGhlIHRleHQg
c2xhdmVzIHBvaW50IHRvIHBhcnRzIG9mIHRoZSByZW5kZXJ0ZXh0J3Mgc3RyIHN0cmluZworICAg
IC8vIFRoZSB0ZXh0IHJ1bnMgcG9pbnQgdG8gcGFydHMgb2YgdGhlIHJlbmRlcnRleHQncyBzdHIg
c3RyaW5nCiAgICAgLy8gKHRoZXkgZG9uJ3QgaW5jbHVkZSAnXG4nKQotICAgIC8vIEZpbmQgdGhl
IHRleHQgc2xhdmUgdGhhdCBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGF0IEBwIG9mZnNldAotICAg
IC8vIGFuZCByZXR1cm4gcG9zLCB3aGljaCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXIgaW4g
dGhlIHNsYXZlLgorICAgIC8vIEZpbmQgdGhlIHRleHQgcnVuIHRoYXQgaW5jbHVkZXMgdGhlIGNo
YXJhY3RlciBhdCBAcCBvZmZzZXQKKyAgICAvLyBhbmQgcmV0dXJuIHBvcywgd2hpY2ggaXMgdGhl
IHBvc2l0aW9uIG9mIHRoZSBjaGFyIGluIHRoZSBydW4uCiAKICAgICBpZiAoIG1fbGluZXMuaXNF
bXB0eSgpICkKICAgICAgICAgcmV0dXJuIDBMOwogCi0gICAgVGV4dFNsYXZlKiBzID0gbV9saW5l
c1swXTsKKyAgICBUZXh0UnVuKiBzID0gbV9saW5lc1swXTsKICAgICB1aW50IHNpID0gMDsKICAg
ICBpbnQgb2ZmID0gcy0+bV9sZW47CiAgICAgd2hpbGUob2Zmc2V0ID4gb2ZmICYmICsrc2kgPCBt
X2xpbmVzLmNvdW50KCkpCkBAIC0zNDcsOCArMzc5LDkgQEAgVGV4dFNsYXZlICogUmVuZGVyVGV4
dDo6ZmluZFRleHRTbGF2ZSggaQogICAgICAgICBzID0gbV9saW5lc1tzaV07CiAgICAgICAgIG9m
ZiA9IHMtPm1fc3RhcnQgKyBzLT5tX2xlbjsKICAgICB9Ci0gICAgLy8gd2UgYXJlIG5vdyBpbiB0
aGUgY29ycmVjdCB0ZXh0IHNsYXZlCisgICAgLy8gd2UgYXJlIG5vdyBpbiB0aGUgY29ycmVjdCB0
ZXh0IHJ1bgogICAgIHBvcyA9IChvZmZzZXQgPiBvZmYgPyBzLT5tX2xlbiA6IG9mZnNldCAtIHMt
Pm1fc3RhcnQgKTsKKyAgICBrZERlYnVnKDYwNDApIDw8ICJvZmZzZXQ9IiA8PCBvZmZzZXQgPDwg
IiBzLT5tX3N0YXJ0PSIgPDwgcy0+bV9zdGFydCA8PCBlbmRsOwogICAgIHJldHVybiBzOwogfQog
CkBAIC0zNjQsNyArMzk3LDcgQEAgYm9vbCBSZW5kZXJUZXh0Ojpub2RlQXRQb2ludChOb2RlSW5m
byYgaQogCiAgICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKICAgICBpZiAoc3R5bGUoKS0+dmlzaWJp
bGl0eSgpICE9IEhJRERFTikgewotICAgICAgICBUZXh0U2xhdmUgKnMgPSBtX2xpbmVzLmNvdW50
KCkgPyBtX2xpbmVzWzBdIDogMDsKKyAgICAgICAgVGV4dFJ1biAqcyA9IG1fbGluZXMuY291bnQo
KSA/IG1fbGluZXNbMF0gOiAwOwogICAgICAgICBpbnQgc2kgPSAwOwogICAgICAgICB3aGlsZShz
KSB7CiAgICAgICAgICAgICBpZigoX3kgPj1fdHkgKyBzLT5tX3kpICYmIChfeSA8IF90eSArIHMt
Pm1feSArIGhlaWdodCkgJiYKQEAgLTQwNSwyNCArNDM4LDI0IEBAIEZpbmRTZWxlY3Rpb25SZXN1
bHQgUmVuZGVyVGV4dDo6Y2hlY2tTZWwKIHsKIC8vICAgICAgIGtkRGVidWcoNjA0MCkgPDwgIlJl
bmRlclRleHQ6OmNoZWNrU2VsZWN0aW9uUG9pbnQgIiA8PCB0aGlzIDw8ICIgX3g9IiA8PCBfeCA8
PCAiIF95PSIgPDwgX3kKIC8vICAgICAgICAgICAgICAgICAgICAgPDwgIiBfdHg9IiA8PCBfdHgg
PDwgIiBfdHk9IiA8PCBfdHkgPDwgZW5kbDsKLSAgICBUZXh0U2xhdmUgKmxhc3RQb2ludEFmdGVy
SW5saW5lPTA7CisgICAgVGV4dFJ1biAqbGFzdFBvaW50QWZ0ZXJJbmxpbmU9MDsKIAogICAgIGZv
cih1bnNpZ25lZCBpbnQgc2kgPSAwOyBzaSA8IG1fbGluZXMuY291bnQoKTsgc2krKykKICAgICB7
Ci0gICAgICAgIFRleHRTbGF2ZSogcyA9IG1fbGluZXNbc2ldOworICAgICAgICBUZXh0UnVuKiBz
ID0gbV9saW5lc1tzaV07CiAgICAgICAgIGludCByZXN1bHQ7CiAgICAgICAgIGNvbnN0IEZvbnQg
KmYgPSBodG1sRm9udCggc2k9PTAgKTsKICAgICAgICAgcmVzdWx0ID0gcy0+Y2hlY2tTZWxlY3Rp
b25Qb2ludChfeCwgX3ksIF90eCwgX3R5LCBmLCB0aGlzLCBvZmZzZXQsIG1fbGluZUhlaWdodCk7
CiAKIC8vICAgICAgICAga2REZWJ1Zyg2MDQwKSA8PCAiUmVuZGVyVGV4dDo6Y2hlY2tTZWxlY3Rp
b25Qb2ludCAiIDw8IHRoaXMgPDwgIiBsaW5lICIgPDwgc2kgPDwgIiByZXN1bHQ9IiA8PCByZXN1
bHQgPDwgIiBvZmZzZXQ9IiA8PCBvZmZzZXQgPDwgZW5kbDsKLSAgICAgICAgaWYgKCByZXN1bHQg
PT0gU2VsZWN0aW9uUG9pbnRJbnNpZGUgKSAvLyB4LHkgaXMgaW5zaWRlIHRoZSB0ZXh0c2xhdmUK
KyAgICAgICAgaWYgKCByZXN1bHQgPT0gU2VsZWN0aW9uUG9pbnRJbnNpZGUgKSAvLyB4LHkgaXMg
aW5zaWRlIHRoZSB0ZXh0cnVuCiAgICAgICAgIHsKICAgICAgICAgICAgIG9mZnNldCArPSBzLT5t
X3N0YXJ0OyAvLyBhZGQgdGhlIG9mZnNldCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lcwogICAgICAg
ICAgICAgLy9rZERlYnVnKDYwNDApIDw8ICJSZW5kZXJUZXh0OjpjaGVja1NlbGVjdGlvblBvaW50
IGluc2lkZSAtPiAiIDw8IG9mZnNldCA8PCBlbmRsOwogICAgICAgICAgICAgbm9kZSA9IGVsZW1l
bnQoKTsKICAgICAgICAgICAgIHJldHVybiBTZWxlY3Rpb25Qb2ludEluc2lkZTsKICAgICAgICAg
fSBlbHNlIGlmICggcmVzdWx0ID09IFNlbGVjdGlvblBvaW50QmVmb3JlIHx8IHJlc3VsdCA9PSBT
ZWxlY3Rpb25Qb2ludEJlZm9yZUluTGluZSApIHsKLSAgICAgICAgICAgIC8vIHgseSBpcyBiZWZv
cmUgdGhlIHRleHRzbGF2ZSAtPiBzdG9wIGhlcmUKKyAgICAgICAgICAgIC8vIHgseSBpcyBiZWZv
cmUgdGhlIHRleHRydW4gLT4gc3RvcCBoZXJlCiAgICAgICAgICAgICBpZiAoIHNpID4gMCAmJiBs
YXN0UG9pbnRBZnRlcklubGluZSApIHsKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBsYXN0UG9p
bnRBZnRlcklubGluZS0+bV9zdGFydCArIGxhc3RQb2ludEFmdGVySW5saW5lLT5tX2xlbjsKICAg
ICAgICAgICAgICAgICAvL2tkRGVidWcoNjA0MCkgPDwgIlJlbmRlclRleHQ6OmNoZWNrU2VsZWN0
aW9uUG9pbnQgYmVmb3JlIC0+ICIgPDwgb2Zmc2V0IDw8IGVuZGw7CkBAIC00NDcsMjMgKzQ4MCwz
NCBAQCBGaW5kU2VsZWN0aW9uUmVzdWx0IFJlbmRlclRleHQ6OmNoZWNrU2VsCiAgICAgcmV0dXJu
IFNlbGVjdGlvblBvaW50QWZ0ZXI7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y3Vyc29yUG9zKGlu
dCBvZmZzZXQsIGludCAmX3gsIGludCAmX3ksIGludCAmaGVpZ2h0KQordm9pZCBSZW5kZXJUZXh0
OjpjYXJldFBvcyhpbnQgb2Zmc2V0LCBib29sIG92ZXJyaWRlLCBpbnQgJl94LCBpbnQgJl95LCBp
bnQgJndpZHRoLCBpbnQgJmhlaWdodCkKIHsKICAgaWYgKCFtX2xpbmVzLmNvdW50KCkpIHsKICAg
ICBfeCA9IF95ID0gaGVpZ2h0ID0gLTE7CisgICAgd2lkdGggPSAxOwogICAgIHJldHVybjsKICAg
fQogCiAgIGludCBwb3M7Ci0gIFRleHRTbGF2ZSAqIHMgPSBmaW5kVGV4dFNsYXZlKCBvZmZzZXQs
IHBvcyApOworICBUZXh0UnVuICogcyA9IGZpbmRUZXh0UnVuKCBvZmZzZXQsIHBvcyApOworLy8g
IGtkRGVidWcoNjA0MCkgPDwgIm9mZnNldD0iPDxvZmZzZXQgPDwgIiBwb3M9Ijw8cG9zIDw8IGVu
ZGw7CiAgIF95ID0gcy0+bV95OwotICBoZWlnaHQgPSBtX2xpbmVIZWlnaHQ7IC8vICMjIyBmaXJz
dExpbmUhISEgcy0+bV9oZWlnaHQ7CiAKLSAgY29uc3QgUUZvbnRNZXRyaWNzICZmbSA9IG1ldHJp
Y3MoIGZhbHNlICk7IC8vICMjIyMgd3JvbmcgZm9yIGZpcnN0LWxpbmUhCi0gIFFTdHJpbmcgdGVr
c3Qoc3RyLT5zICsgcy0+bV9zdGFydCwgcy0+bV9sZW4pOwotICBfeCA9IHMtPm1feCArIChmbS5i
b3VuZGluZ1JlY3QodGVrc3QsIHBvcykpLnJpZ2h0KCk7Ci0gIGlmKHBvcykKLSAgICAgIF94ICs9
IGZtLnJpZ2h0QmVhcmluZyggKihzdHItPnMgKyBzLT5tX3N0YXJ0ICsgcG9zIC0gMSApICk7Cisg
IGNvbnN0IFFGb250TWV0cmljcyAmZm0gPSBtZXRyaWNzKCBzLT5tX2ZpcnN0TGluZSApOworICBo
ZWlnaHQgPSBmbS5oZWlnaHQoKTsgLy8gcy0+bV9oZWlnaHQ7CisKKyAgUUNvbnN0U3RyaW5nIHRl
a3N0KHN0ci0+cyArIHMtPm1fc3RhcnQsIHMtPm1fbGVuKTsKKy8vICBfeCA9IHMtPm1feCArIChm
bS5ib3VuZGluZ1JlY3QodGVrc3QsIHBvcykpLnJpZ2h0KCk7CisvLyAgaWYocG9zKQorLy8gICAg
ICBfeCArPSBmbS5yaWdodEJlYXJpbmcoICooc3RyLT5zICsgcy0+bV9zdGFydCArIHBvcyAtIDEg
KSApOworICBfeCA9IHMtPm1feCArIGZtLndpZHRoKHRla3N0LnN0cmluZygpLCBwb3MpOworICB3
aWR0aCA9IDE7CisgIGlmIChvdmVycmlkZSkgeworICAgIHdpZHRoID0gb2Zmc2V0IDwgbWF4T2Zm
c2V0KCkgPyBmbS53aWR0aChzdHItPnNbb2Zmc2V0XSkgOiAxOworICB9LyplbmQgaWYqLworICBr
ZERlYnVnKDYwNDApIDw8ICJfeD0iPDxfeCA8PCAiIHMtPm1feD0iPDxzLT5tX3gKKyAgCQk8PCAi
IHMtPm1fc3RhcnQiPDxzLT5tX3N0YXJ0CisJCTw8ICIgcy0+bV9sZW4iPDxzLT5tX2xlbiA8PCBl
bmRsOwogCiAgIGludCBhYnN4LCBhYnN5OwogCkBAIC00NzEsMTUgKzUxNSwyNyBAQCB2b2lkIFJl
bmRlclRleHQ6OmN1cnNvclBvcyhpbnQgb2Zmc2V0LCBpCiAKICAgaWYgKGNiICYmIGNiICE9IHRo
aXMgJiYgY2ItPmFic29sdXRlUG9zaXRpb24oYWJzeCxhYnN5KSkKICAgeworICAgIC8va2REZWJ1
Zyg2MDQwKSA8PCAiYWJzeD0iIDw8IGFic3ggPDwgIiBhYnN5PSIgPDwgYWJzeSA8PCBlbmRsOwog
ICAgIF94ICs9IGFic3g7CiAgICAgX3kgKz0gYWJzeTsKICAgfSBlbHNlIHsKLSAgICAvLyB3ZSBk
b24ndCBrbm93IG91ciBhYnNvbHV0ZSBwb3NpdGlvbiwgYW5kIHRoZXJlIGlzIG5vdCBwb2ludCBy
ZXR1cm5pbmcKKyAgICAvLyB3ZSBkb24ndCBrbm93IG91ciBhYnNvbHV0ZSBwb3NpdGlvbiwgYW5k
IHRoZXJlIGlzIG5vIHBvaW50IHJldHVybmluZwogICAgIC8vIGp1c3QgYSByZWxhdGl2ZSBvbmUK
ICAgICBfeCA9IF95ID0gLTE7CiAgIH0KIH0KIAorbG9uZyBSZW5kZXJUZXh0OjptaW5PZmZzZXQo
KSBjb25zdAoreworICBpZiAoIW1fbGluZXMuY291bnQoKSkgcmV0dXJuIDA7CisgIHJldHVybiBt
X2xpbmVzWzBdLT5tX3N0YXJ0OworfQorCitsb25nIFJlbmRlclRleHQ6Om1heE9mZnNldCgpIGNv
bnN0Cit7CisgIHJldHVybiBzdHItPmw7Cit9CisKIGJvb2wgUmVuZGVyVGV4dDo6YWJzb2x1dGVQ
b3NpdGlvbihpbnQgJnhQb3MsIGludCAmeVBvcywgYm9vbCkKIHsKICAgICByZXR1cm4gUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZhbHNlKTsKQEAgLTUwMCw3ICs1
NTYsNyBAQCBib29sIFJlbmRlclRleHQ6OnBvc09mQ2hhcihpbnQgY2hyLCBpbnQgCiAgICAgcGFy
ZW50KCktPmFic29sdXRlUG9zaXRpb24oIHgsIHksIGZhbHNlICk7CiAKICAgICBpbnQgcG9zOwot
ICAgIFRleHRTbGF2ZSAqIHMgPSBmaW5kVGV4dFNsYXZlKCBjaHIsIHBvcyApOworICAgIFRleHRS
dW4gKiBzID0gZmluZFRleHRSdW4oIGNociwgcG9zICk7CiAKICAgICBpZiAoIHMgKSB7CiAgICAg
ICAgIC8vIHMgaXMgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgY2hhcmFjdGVyCkBAIC01MjYsNyAr
NTgyLDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpwYWludE9iamVjdCggUVBhaW50ZXIgKgogICAgIGlu
dCBvdyA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpOwogICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9T
dHlsZSA9IGhhc0ZpcnN0TGluZSgpID8gc3R5bGUoKS0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5
bGU6OkZJUlNUX0xJTkUpIDogMDsKICAgICBpbnQgZCA9IHN0eWxlKCktPnRleHREZWNvcmF0aW9u
KCk7Ci0gICAgVGV4dFNsYXZlIGYoMCwgeS10eSk7CisgICAgVGV4dFJ1biBmKDAsIHktdHkpOwog
ICAgIGludCBzaSA9IG1fbGluZXMuZmluZEZpcnN0TWF0Y2hpbmcoJmYpOwogICAgIC8vIHNvbWV0
aGluZyBtYXRjaGluZyBmb3VuZCwgZmluZCB0aGUgZmlyc3Qgb25lIHRvIHBhaW50CiAgICAgYm9v
bCBpc1ByaW50aW5nID0gKHAtPmRldmljZSgpLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQcmlu
dGVyKTsKQEAgLTU1NCw3ICs2MTAsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnBhaW50T2JqZWN0KCBR
UGFpbnRlciAqCiAgICAgICAgICAgICAvL2tkRGVidWcoNjA0MCkgPDwgdGhpcyA8PCAiIFNlbGVj
dGlvbiBmcm9tICIgPDwgc3RhcnRQb3MgPDwgIiB0byAiIDw8IGVuZFBvcyA8PCBlbmRsOwogICAg
ICAgICB9CiAKLSAgICAgICAgVGV4dFNsYXZlKiBzOworICAgICAgICBUZXh0UnVuKiBzOwogICAg
ICAgICBpbnQgbWlueCA9ICAxMDAwMDAwOwogICAgICAgICBpbnQgbWF4eCA9IC0xMDAwMDAwOwog
ICAgICAgICBpbnQgb3V0bGluZWJveF95ID0gbV9saW5lc1tzaV0tPm1feTsKQEAgLTYwNyw2ICs2
NjMsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnBhaW50T2JqZWN0KCBRUGFpbnRlciAqCiAgICAgICAg
ICAgICAgICAgcC0+c2V0UGVuKF9zdHlsZS0+Y29sb3IoKSk7CiAKIAkgICAgaWYgKHMtPm1fbGVu
ID4gMCkKKwkgICAgICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJSZW5kZXJPYmplY3Q6OnBhaW50
T2JqZWN0KCIgPDwgUUNvbnN0U3RyaW5nKHN0ci0+cyArIHMtPm1fc3RhcnQsIHMtPm1fbGVuKS5z
dHJpbmcoKSA8PCAiKSBhdCgiIDw8IHMtPm1feCt0eCA8PCAiLyIgPDwgcy0+bV95K3R5IDw8ICIp
IiA8PCBlbmRsOwogCQlmb250LT5kcmF3VGV4dChwLCBzLT5tX3ggKyB0eCwgcy0+bV95ICsgdHkg
KyBzLT5tX2Jhc2VsaW5lLCBzdHItPnMsIHN0ci0+bCwgcy0+bV9zdGFydCwgcy0+bV9sZW4sCiAJ
CQkgICAgICAgcy0+bV90b0FkZCwgcy0+bV9yZXZlcnNlZCA/IFFQYWludGVyOjpSVEwgOiBRUGFp
bnRlcjo6TFRSKTsKIApAQCAtODUzLDggKzkxMCwxNSBAQCBzaG9ydCBSZW5kZXJUZXh0OjpiYXNl
bGluZVBvc2l0aW9uKCBib29sCiAgICAgICAgICggbGluZUhlaWdodCggZmlyc3RMaW5lICkgLSBm
bS5oZWlnaHQoKSApIC8gMjsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Ojpwb3NpdGlvbihpbnQgeCwg
aW50IHksIGludCBmcm9tLCBpbnQgbGVuLCBpbnQgd2lkdGgsIGJvb2wgcmV2ZXJzZSwgYm9vbCBm
aXJzdExpbmUsIGludCBzcGFjZUFkZCkKK0lubGluZUJveCogUmVuZGVyVGV4dDo6Y3JlYXRlSW5s
aW5lQm94KGJvb2wpCiB7CisgICAgLy8gRklYTUU6IEVpdGhlciBkaXRjaCB0aGUgYXJyYXkgb3Ig
Z2V0IHRoaXMgb2JqZWN0IGludG8gaXQuCisgICAgcmV0dXJuIG5ldyAocmVuZGVyQXJlbmEoKSkg
VGV4dFJ1bih0aGlzKTsKK30KKwordm9pZCBSZW5kZXJUZXh0Ojpwb3NpdGlvbihJbmxpbmVCb3gq
IGJveCwgaW50IGZyb20sIGludCBsZW4sIGJvb2wgcmV2ZXJzZSwgaW50IHNwYWNlQWRkKQorewor
Ly9rZERlYnVnKDYwNDApIDw8ICJwb3NpdGlvbjogZnJvbT0iPDxmcm9tPDwiIGxlbj0iPDxsZW48
PGVuZGw7CiAgICAgLy8gIyMjIHNob3VsZCBub3QgYmUgbmVlZGVkISEhCiAgICAgLy8gYXNzZXJ0
cyBzb21ldGltZXMgd2l0aCBwcmUgKHRoYXQgdW5pYnctaGFtYnVyZyB0ZXN0Y2FzZSkuICMjIyBm
aW5kIG91dCB3aHkKICAgICAvL0tIVE1MQXNzZXJ0KCEobGVuID09IDAgfHwgKHN0ci0+bCAmJiBs
ZW4gPT0gMSAmJiAqKHN0ci0+cytmcm9tKSA9PSAnXG4nKSApKTsKQEAgLTg2NSwyMSArOTI5LDI1
IEBAIHZvaWQgUmVuZGVyVGV4dDo6cG9zaXRpb24oaW50IHgsIGludCB5LCAKICAgICAvLyAjIyMg
bWFyZ2lucyBhbmQgUlRMCiAgICAgaWYoZnJvbSA9PSAwICYmIHBhcmVudCgpLT5pc0lubGluZSgp
ICYmIHBhcmVudCgpLT5maXJzdENoaWxkKCk9PXRoaXMpCiAgICAgewotICAgICAgICB4ICs9IHBh
ZGRpbmdMZWZ0KCkgKyBib3JkZXJMZWZ0KCkgKyBtYXJnaW5MZWZ0KCk7Ci0gICAgICAgIHdpZHRo
IC09IG1hcmdpbkxlZnQoKTsKKyAgICAgICAgYm94LT5tX3ggKz0gcGFkZGluZ0xlZnQoKSArIGJv
cmRlckxlZnQoKSArIG1hcmdpbkxlZnQoKTsKKyAgICAgICAgYm94LT5tX3dpZHRoIC09IG1hcmdp
bkxlZnQoKTsKICAgICB9CiAKICAgICBpZihmcm9tICsgbGVuID49IGludChzdHItPmwpICYmIHBh
cmVudCgpLT5pc0lubGluZSgpICYmIHBhcmVudCgpLT5sYXN0Q2hpbGQoKT09dGhpcykKLSAgICAg
ICAgd2lkdGggLT0gbWFyZ2luUmlnaHQoKTsKKyAgICAgICAgYm94LT5tX3dpZHRoIC09IG1hcmdp
blJpZ2h0KCk7CiAKICNpZmRlZiBERUJVR19MQVlPVVQKICAgICBRQ2hhciAqY2ggPSBzdHItPnMr
ZnJvbTsKICAgICBRQ29uc3RTdHJpbmcgY3N0cihjaCwgbGVuKTsKICNlbmRpZgotCi0gICAgVGV4
dFNsYXZlICpzID0gbmV3IChyZW5kZXJBcmVuYSgpKSBUZXh0U2xhdmUoeCwgeSwgZnJvbSwgbGVu
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVQb3NpdGlvbiggZmly
c3RMaW5lICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcmV2ZXJz
ZSwgc3BhY2VBZGQsIGZpcnN0TGluZSk7CisgICAgICAgICAgICAgICAgICAKKyAgICBLSFRNTEFz
c2VydChib3gtPmlzVGV4dFJ1bigpKTsKKyAgICBUZXh0UnVuICpzID0gc3RhdGljX2Nhc3Q8VGV4
dFJ1biAqPihib3gpOworICAgIHMtPm1fc3RhcnQgPSBmcm9tOworICAgIHMtPm1fbGVuID0gbGVu
OworICAgIHMtPm1fcmV2ZXJzZWQgPSByZXZlcnNlOworICAgIHMtPm1fdG9BZGQgPSBzcGFjZUFk
ZDsKKyAgICAvL2tkRGVidWcoNjA0MCkgPDwgIm1fc3RhcnQ6ICIgPDwgcy0+bV9zdGFydCA8PCAi
IG1fbGVuOiAiIDw8IHMtPm1fbGVuIDw8IGVuZGw7CiAKICAgICBpZihtX2xpbmVzLmNvdW50KCkg
PT0gbV9saW5lcy5zaXplKCkpCiAgICAgICAgIG1fbGluZXMucmVzaXplKG1fbGluZXMuc2l6ZSgp
KjIrMSk7CkBAIC05MzcsNyArMTAwNSw3IEBAIHNob3J0IFJlbmRlclRleHQ6OndpZHRoKCkgY29u
c3QKICAgICBpbnQgbWF4eCA9IDA7CiAgICAgLy8gc2xvb293CiAgICAgZm9yKHVuc2lnbmVkIGlu
dCBzaSA9IDA7IHNpIDwgbV9saW5lcy5jb3VudCgpOyBzaSsrKSB7Ci0gICAgICAgIFRleHRTbGF2
ZSogcyA9IG1fbGluZXNbc2ldOworICAgICAgICBUZXh0UnVuKiBzID0gbV9saW5lc1tzaV07CiAg
ICAgICAgIGlmKHMtPm1feCA8IG1pbngpCiAgICAgICAgICAgICBtaW54ID0gcy0+bV94OwogICAg
ICAgICBpZihzLT5tX3ggKyBzLT5tX3dpZHRoID4gbWF4eCkKSW5kZXg6IHJlbmRlcl90ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl90ZXh0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODMKZGlmZiAtdSAtcCAtcjEuODMg
cmVuZGVyX3RleHQuaAotLS0gcmVuZGVyX3RleHQuaAkxNyBNYXkgMjAwMyAyMjoxMjo1OSAtMDAw
MAkxLjgzCisrKyByZW5kZXJfdGV4dC5oCTUgQXVnIDIwMDMgMTk6MjM6MjcgLTAwMDAKQEAgLTMs
NiArMyw3IEBACiAgKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogKEMpIDIwMDAtMjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yOCw2ICsyOSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAjaW5j
bHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2Jq
ZWN0LmgiCisjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9saW5lLmgiCiAKICNpbmNsdWRlIDxx
cHRydmVjdG9yLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CkBAIC00MCwyMiArNDIsMTIgQEAgbmFt
ZXNwYWNlIGtodG1sCiAgICAgY2xhc3MgUmVuZGVyVGV4dDsKICAgICBjbGFzcyBSZW5kZXJTdHls
ZTsKIAotY2xhc3MgVGV4dFNsYXZlCitjbGFzcyBUZXh0UnVuIDogcHVibGljIElubGluZUJveAog
ewogcHVibGljOgotICAgIFRleHRTbGF2ZShpbnQgeCwgaW50IHksIGludCBzdGFydCwgaW50IGxl
biwKLQkgICAgICBpbnQgYmFzZWxpbmUsIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgYm9vbCBy
ZXZlcnNlZCA9IGZhbHNlLCBpbnQgdG9BZGQgPSAwLCBib29sIGZpcnN0TGluZSA9IGZhbHNlKQor
ICAgIFRleHRSdW4oUmVuZGVyT2JqZWN0ICpvYmopCisgICAgOklubGluZUJveChvYmopCiAgICAg
ewotICAgICAgICBtX3ggPSB4OwotICAgICAgICBtX3kgPSB5OwotICAgICAgICBtX3N0YXJ0ID0g
c3RhcnQ7Ci0gICAgICAgIG1fbGVuID0gbGVuOwotICAgICAgICBtX2Jhc2VsaW5lID0gYmFzZWxp
bmU7Ci0gICAgICAgIG1fd2lkdGggPSB3aWR0aDsKLSAgICAgICAgbV9yZXZlcnNlZCA9IHJldmVy
c2VkOwotICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKLSAgICAgICAgbV90b0FkZCA9
IHRvQWRkOwogICAgIH0KIAogICAgIHZvaWQgZGV0YWNoKFJlbmRlckFyZW5hKiByZW5kZXJBcmVu
YSk7CkBAIC03Myw2ICs2NSw4IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKIAorICAgIHZpcnR1YWwg
Ym9vbCBpc1RleHRSdW4oKSB7IHJldHVybiB0cnVlOyB9CisKICAgICB2b2lkIHBhaW50RGVjb3Jh
dGlvbiggUVBhaW50ZXIgKnB0LCBSZW5kZXJUZXh0KiBwLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQg
ZGVjb3JhdGlvbiwgYm9vbCBiZWdpbiwgYm9vbCBlbmQpOwogICAgIHZvaWQgcGFpbnRCb3hEZWNv
cmF0aW9ucyhRUGFpbnRlciAqcCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJUZXh0ICpwYXJl
bnQsIGludCBfdHgsIGludCBfdHksIGJvb2wgYmVnaW4sIGJvb2wgZW5kKTsKICAgICB2b2lkIHBh
aW50U2VsZWN0aW9uKGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQgKnRleHQsIFFQYWludGVyICpw
LCBSZW5kZXJTdHlsZSogc3R5bGUsIGludCB0eCwgaW50IHR5LCBpbnQgc3RhcnRQb3MsIGludCBl
bmRQb3MpOwpAQCAtODEsMjYgKzc1LDQyIEBAIHB1YmxpYzoKICAgICBGaW5kU2VsZWN0aW9uUmVz
dWx0IGNoZWNrU2VsZWN0aW9uUG9pbnQoaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHks
IGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQgKnRleHQsIGludCAmIG9mZnNldCwgc2hvcnQgbGlu
ZWhlaWdodCk7CiAKICAgICAvKioKLSAgICAgKiBpZiB0aGlzIHRleHRzbGF2ZSB3YXMgcmVuZGVy
ZWQgQHJlZiBfdHkgcGl4ZWxzIGJlbG93IHRoZSB1cHBlciBlZGdlCisgICAgICogaWYgdGhpcyB0
ZXh0IHJ1biB3YXMgcmVuZGVyZWQgQHJlZiBfdHkgcGl4ZWxzIGJlbG93IHRoZSB1cHBlciBlZGdl
CiAgICAgICogb2YgYSB2aWV3LCB3b3VsZCB0aGUgQHJlZiBfeSAtY29vcmRpbmF0ZSBiZSBpbnNp
ZGUgdGhlIHZlcnRpY2FsIHJhbmdlCiAgICAgICogb2YgdGhpcyBvYmplY3QncyByZXByZXNlbnRh
dGlvbj8KICAgICAgKi8KICAgICBib29sIGNoZWNrVmVydGljYWxQb2ludChpbnQgX3ksIGludCBf
dHksIGludCBfaCwgaW50IGhlaWdodCkKICAgICB7IGlmKChfdHkgKyBtX3kgPiBfeSArIF9oKSB8
fCAoX3R5ICsgbV95ICsgbV9iYXNlbGluZSArIGhlaWdodCA8IF95KSkgcmV0dXJuIGZhbHNlOyBy
ZXR1cm4gdHJ1ZTsgfQogCisgICAgLyoqCisgICAgICogZGV0ZXJtaW5lcyB0aGUgb2Zmc2V0IGlu
dG8gdGhlIERPTVN0cmluZyBvZiB0aGUgY2hhcmF0ZXIgdGhlIGdpdmVuCisgICAgICogY29vcmRp
bmF0ZSBwb2ludHMgdG8uCisgICAgICogVGhlIHJldHVybmVkIG9mZnNldCBpcyBuZXZlciBvdXQg
b2YgcmFuZ2UuCisgICAgICogQHBhcmFtIF94IGdpdmVuIGNvb3JkaW5hdGUgKHJlbGF0aXZlIHRv
IGNvbnRhaW5pbmcgYmxvY2spCisgICAgICogQHBhcmFtIGF4IHJldHVybnMgZXhhY3QgY29vcmRp
bmF0ZSB0aGUgb2Zmc2V0IGNvcnJlc3BvbmRzIHRvCisgICAgICoJCShyZWxhdGl2ZSB0byBjb250
YWluaW5nIGJsb2NrKQorICAgICAqIEByZXR1cm4gdGhlIG9mZnNldCAocmVsYXRpdmUgdG8gdGhl
IFJlbmRlclRleHQgb2JqZWN0LCBub3QgdG8gdGhpcyBydW4pCisgICAgICovCisgICAgaW50IG9m
ZnNldEZvclBvaW50KGludCBfeCwgaW50ICZheCk7CisKKyAgICAvKiogcmV0dXJucyB0aGUgbG93
ZXN0IHBvc3NpYmxlIHZhbHVlIHRoZSBjYXJldCBvZmZzZXQgbWF5IGhhdmUgdG8KKyAgICAgKiBz
dGlsbCBwb2ludCB0byBhIHZhbGlkIHBvc2l0aW9uLgorICAgICAqLworICAgIHZpcnR1YWwgbG9u
ZyBtaW5PZmZzZXQoKSBjb25zdDsKKyAgICAvKiogcmV0dXJucyB0aGUgaGlnaGVzdCBwb3NzaWJs
ZSB2YWx1ZSB0aGUgY2FyZXQgb2Zmc2V0IG1heSBoYXZlIHRvCisgICAgICogc3RpbGwgcG9pbnQg
dG8gYSB2YWxpZCBwb3NpdGlvbi4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGxvbmcgbWF4T2Zmc2V0
KCkgY29uc3Q7CisKICAgICBpbnQgbV9zdGFydDsKLSAgICBpbnQgbV95OwogICAgIHVuc2lnbmVk
IHNob3J0IG1fbGVuOwotICAgIHNob3J0IG1feDsKLSAgICBzaG9ydCBtX2Jhc2VsaW5lOwotICAg
IHVuc2lnbmVkIHNob3J0IG1fd2lkdGg7CiAKICAgICBib29sIG1fcmV2ZXJzZWQgOiAxOwotICAg
IGJvb2wgbV9maXJzdExpbmUgOiAxOwogICAgIGludCBtX3RvQWRkIDogMTQ7IC8vIGZvciBqdXN0
aWZpZWQgdGV4dAogcHJpdmF0ZToKICAgICAvLyB0aGlzIGlzIGp1c3QgZm9yIFFWZWN0b3I6OmJz
ZWFyY2guIERvbid0IHVzZSBpdCBvdGhlcndpc2UKLSAgICBUZXh0U2xhdmUoaW50IF94LCBpbnQg
X3kpCisgICAgVGV4dFJ1bihpbnQgX3gsIGludCBfeSkKKyAgICAgICAgOklubGluZUJveCgwKQog
ICAgIHsKICAgICAgICAgbV94ID0gX3g7CiAgICAgICAgIG1feSA9IF95OwpAQCAtMTA5LDEyICsx
MTksMTIgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyVGV4dDsKIH07CiAKLWNs
YXNzIFRleHRTbGF2ZUFycmF5IDogcHVibGljIFFQdHJWZWN0b3I8VGV4dFNsYXZlPgorY2xhc3Mg
VGV4dFJ1bkFycmF5IDogcHVibGljIFFQdHJWZWN0b3I8VGV4dFJ1bj4KIHsKIHB1YmxpYzoKLSAg
ICBUZXh0U2xhdmVBcnJheSgpOworICAgIFRleHRSdW5BcnJheSgpOwogCi0gICAgVGV4dFNsYXZl
KiBmaXJzdCgpOworICAgIFRleHRSdW4qIGZpcnN0KCk7CiAKICAgICBpbnQJICBmaW5kRmlyc3RN
YXRjaGluZyggSXRlbSApIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNvbXBhcmVJdGVtcyggSXRl
bSwgSXRlbSApOwpAQCAtMTIyLDcgKzEzMiw3IEBAIHB1YmxpYzoKIAogY2xhc3MgUmVuZGVyVGV4
dCA6IHB1YmxpYyBSZW5kZXJPYmplY3QKIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4dFNsYXZlOwor
ICAgIGZyaWVuZCBjbGFzcyBUZXh0UnVuOwogCiBwdWJsaWM6CiAgICAgUmVuZGVyVGV4dChET006
Ok5vZGVJbXBsKiBub2RlLCBET006OkRPTVN0cmluZ0ltcGwgKl9zdHIpOwpAQCAtMTM5LDEyICsx
NDksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdCggUVBhaW50ZXIg
KiwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgdHgsIGludCB0eSwgUGFpbnRBY3Rpb24gcGFpbnRQaGFzZSk7CiAKLSAgICB2b2lkIGRlbGV0
ZVNsYXZlcyggUmVuZGVyQXJlbmEgKiApOworICAgIHZvaWQgZGVsZXRlUnVucyggUmVuZGVyQXJl
bmEgKiApOwogICAgIHZvaWQgZGV0YWNoKCBSZW5kZXJBcmVuYSAqICk7CiAKICAgICBET006OkRP
TVN0cmluZyBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3RyOyB9CiAgICAgRE9NOjpET01TdHJpbmdJ
bXBsICpzdHJpbmcoKSBjb25zdCB7IHJldHVybiBzdHI7IH0KIAorICAgIHZpcnR1YWwgSW5saW5l
Qm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCk7CisKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkg
e2Fzc2VydChmYWxzZSk7fQogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZv
JiBpbmZvLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKQEAgLTE1Niw3ICsxNjgsNyBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0ci0+
bDsgfQogICAgIFFDaGFyICp0ZXh0KCkgY29uc3QgeyByZXR1cm4gc3RyLT5zOyB9CiAgICAgdW5z
aWduZWQgaW50IHN0cmluZ0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0ci0+bDsgfSAvLyBub24g
dmlydHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBsZW5ndGgoKQotICAgIHZpcnR1YWwgdm9pZCBwb3Np
dGlvbihpbnQgeCwgaW50IHksIGludCBmcm9tLCBpbnQgbGVuLCBpbnQgd2lkdGgsIGJvb2wgcmV2
ZXJzZSwgYm9vbCBmaXJzdExpbmUsIGludCBzcGFjZUFkZCk7CisgICAgdmlydHVhbCB2b2lkIHBv
c2l0aW9uKElubGluZUJveCogYm94LCBpbnQgZnJvbSwgaW50IGxlbiwgYm9vbCByZXZlcnNlLCBp
bnQgc3BhY2VBZGQpOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgd2lkdGgodW5zaWduZWQg
aW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4sIGNvbnN0IEZvbnQgKmYpIGNvbnN0OwogICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IHdpZHRoKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQg
bGVuLCBib29sIGZpcnN0TGluZSA9IGZhbHNlKSBjb25zdDsKQEAgLTE3NSw3ICsxODcsNyBAQCBw
dWJsaWM6CiAgICAgdXNob3J0IHN0YXJ0TWluKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE1pbjsg
fQogICAgIHVzaG9ydCBlbmRNaW4oKSBjb25zdCB7IHJldHVybiBtX2VuZE1pbjsgfQogCi0gICAg
Ly8gcmV0dXJucyB0aGUgbWluaW11bSB4IHBvc2l0aW9uIG9mIGFsbCBzbGF2ZXMgcmVsYXRpdmUg
dG8gdGhlIHBhcmVudC4KKyAgICAvLyByZXR1cm5zIHRoZSBtaW5pbXVtIHggcG9zaXRpb24gb2Yg
YWxsIHJ1bnMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudC4KICAgICAvLyBkZWZhdWx0cyB0byAwLgog
ICAgIGludCBtaW5YUG9zKCkgY29uc3Q7CiAKQEAgLTE5Myw3ICsyMDUsNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Qge3JldHVy
biBtX3NlbGVjdGlvblN0YXRlO30KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUo
U2VsZWN0aW9uU3RhdGUgcykge21fc2VsZWN0aW9uU3RhdGUgPSBzOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGN1cnNvclBvcyhpbnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCk7
CisgICAgdmlydHVhbCB2b2lkIGNhcmV0UG9zKGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGlu
dCAmX3gsIGludCAmX3ksIGludCAmd2lkdGgsIGludCAmaGVpZ2h0KTsKICAgICB2aXJ0dWFsIGJv
b2wgYWJzb2x1dGVQb3NpdGlvbihpbnQgJi8qeFBvcyovLCBpbnQgJi8qeVBvcyovLCBib29sIGYg
PSBmYWxzZSk7CiAgICAgYm9vbCBwb3NPZkNoYXIoaW50IGNoLCBpbnQgJngsIGludCAmeSk7CiAK
QEAgLTIxMCwxNiArMjIyLDI1IEBAIHB1YmxpYzoKIAogICAgIERPTTo6VGV4dEltcGwgKmVsZW1l
bnQoKSBjb25zdAogICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PERPTTo6VGV4dEltcGwqPihSZW5k
ZXJPYmplY3Q6OmVsZW1lbnQoKSk7IH0KKyAgICAKKyAgICAvKiogcmV0dXJucyB0aGUgbG93ZXN0
IHBvc3NpYmxlIHZhbHVlIHRoZSBjYXJldCBvZmZzZXQgbWF5IGhhdmUgdG8KKyAgICAgKiBzdGls
bCBwb2ludCB0byBhIHZhbGlkIHBvc2l0aW9uLgorICAgICAqLworICAgIGxvbmcgbWluT2Zmc2V0
KCkgY29uc3Q7CisgICAgLyoqIHJldHVybnMgdGhlIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUgdGhl
IGNhcmV0IG9mZnNldCBtYXkgaGF2ZSB0bworICAgICAqIHN0aWxsIHBvaW50IHRvIGEgdmFsaWQg
cG9zaXRpb24uCisgICAgICovCisgICAgbG9uZyBtYXhPZmZzZXQoKSBjb25zdDsKIAogcHJvdGVj
dGVkOgogICAgIHZvaWQgcGFpbnRUZXh0T3V0bGluZShRUGFpbnRlciAqcCwgaW50IHR4LCBpbnQg
dHksIGNvbnN0IFFSZWN0ICZwcmV2TGluZSwgY29uc3QgUVJlY3QgJnRoaXNMaW5lLCBjb25zdCBR
UmVjdCAmbmV4dExpbmUpOwogCi0gICAgLy8gRmluZCB0aGUgdGV4dCBzbGF2ZSB0aGF0IGluY2x1
ZGVzIHRoZSBjaGFyYWN0ZXIgYXQgQHAgb2Zmc2V0Ci0gICAgLy8gYW5kIHJldHVybiBwb3MsIHdo
aWNoIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhciBpbiB0aGUgc2xhdmUuCi0gICAgVGV4dFNs
YXZlICogZmluZFRleHRTbGF2ZSggaW50IG9mZnNldCwgaW50ICZwb3MgKTsKKyAgICAvLyBGaW5k
IHRoZSB0ZXh0IHJ1biB0aGF0IGluY2x1ZGVzIHRoZSBjaGFyYWN0ZXIgYXQgQHAgb2Zmc2V0Cisg
ICAgLy8gYW5kIHJldHVybiBwb3MsIHdoaWNoIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhciBp
biB0aGUgcnVuLgorICAgIFRleHRSdW4gKiBmaW5kVGV4dFJ1biggaW50IG9mZnNldCwgaW50ICZw
b3MgKTsKIAogcHJvdGVjdGVkOiAvLyBtZW1iZXJzCi0gICAgVGV4dFNsYXZlQXJyYXkgbV9saW5l
czsKKyAgICBUZXh0UnVuQXJyYXkgbV9saW5lczsKICAgICBET006OkRPTVN0cmluZ0ltcGwgKnN0
cjsgLy8KIAogICAgIHNob3J0IG1fbGluZUhlaWdodDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2191</attachid>
            <date>2003-08-09 04:50:09 +0000</date>
            <delta_ts>2003-08-18 23:55:08 +0000</delta_ts>
            <desc>very very very very initial caret navigation</desc>
            <filename>khtml_navigation_8.diff</filename>
            <type>text/plain</type>
            <size>237485</size>
            <attacher name="Leo Savernik">l.savernik</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sX3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVs
aWJzL2todG1sL2todG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg3MQpkaWZm
IC11IC1wIC1yMS44NzEga2h0bWxfcGFydC5jcHAKLS0tIGtodG1sX3BhcnQuY3BwCTUgQXVnIDIw
MDMgMTE6MzY6MjEgLTAwMDAJMS44NzEKKysrIGtodG1sX3BhcnQuY3BwCTkgQXVnIDIwMDMgMDI6
NDQ6NDQgLTAwMDAKQEAgLTIwOTksNiArMjA5OSw1NCBAQCB2b2lkIEtIVE1MUGFydDo6c2V0T25s
eUxvY2FsUmVmZXJlbmNlcyhiCiAgIGQtPm1fb25seUxvY2FsUmVmZXJlbmNlcyA9IGVuYWJsZTsK
IH0KIAordm9pZCBLSFRNTFBhcnRQcml2YXRlOjpzZXRGbGFnUmVjdXJzaXZlbHkoCisJYm9vbCBL
SFRNTFBhcnRQcml2YXRlOjoqZmxhZywgYm9vbCB2YWx1ZSkgeworICAvLyBmaXJzdCBzZXQgaXQg
b24gdGhlIGN1cnJlbnQgb25lCisgIHRoaXMtPipmbGFnID0gdmFsdWU7CisKKyAgLy8gZGVzY2Vu
ZCBpbnRvIGNoaWxkIGZyYW1lcyByZWN1cnNpdmVseQorICBRVmFsdWVMaXN0PGtodG1sOjpDaGls
ZEZyYW1lPjo6SXRlcmF0b3IgaXQgPSBtX2ZyYW1lcy5iZWdpbigpOworICBmb3IgKDsgaXQgIT0g
bV9mcmFtZXMuZW5kKCk7ICsraXQpIHsKKyAgICBLSFRNTFBhcnQgKnBhcnQgPSBzdGF0aWNfY2Fz
dDxLSFRNTFBhcnQgKj4oKEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICopKCppdCkubV9wYXJ0KTsKKyAg
ICBpZiAocGFydC0+aW5oZXJpdHMoIktIVE1MUGFydCIpKQorICAgICAgcGFydC0+ZC0+c2V0Rmxh
Z1JlY3Vyc2l2ZWx5KGZsYWcsIHZhbHVlKTsKKyAgfS8qbmV4dCBpdCovCisKKyAgLy8gZG8gdGhl
IHNhbWUgYWdhaW4gZm9yIG9iamVjdHMKKyAgaXQgPSBtX29iamVjdHMuYmVnaW4oKTsKKyAgZm9y
ICg7IGl0ICE9IG1fb2JqZWN0cy5lbmQoKTsgKytpdCkgeworICAgIEtIVE1MUGFydCAqcGFydCA9
IHN0YXRpY19jYXN0PEtIVE1MUGFydCAqPigoS1BhcnRzOjpSZWFkT25seVBhcnQgKikoKml0KS5t
X3BhcnQpOworICAgIGlmIChwYXJ0LT5pbmhlcml0cygiS0hUTUxQYXJ0IikpCisgICAgICBwYXJ0
LT5kLT5zZXRGbGFnUmVjdXJzaXZlbHkoZmxhZywgdmFsdWUpOworICB9LypuZXh0IGl0Ki8KK30K
Kwordm9pZCBLSFRNTFBhcnQ6OnNldENhcmV0TW9kZShib29sIGVuYWJsZSkgeworICBkLT5zZXRG
bGFnUmVjdXJzaXZlbHkoJktIVE1MUGFydFByaXZhdGU6Om1fY2FyZXRNb2RlLCBlbmFibGUpOwor
ICAvLyBGSVhNRTogdGhpcyB3b24ndCB3b3JrIG9uIGZyYW1lcyBhcyBleHBlY3RlZAorICBpZiAo
ZW5hYmxlKQorICAgIHZpZXcoKS0+aW5pdENhcmV0KCk7CisgIGVsc2UKKyAgICB2aWV3KCktPmNh
cmV0T2ZmKCk7Cit9CisKK2Jvb2wgS0hUTUxQYXJ0Ojppc0NhcmV0TW9kZSgpIGNvbnN0IHsKKyAg
cmV0dXJuIGQtPm1fY2FyZXRNb2RlOworfQorCit2b2lkIEtIVE1MUGFydDo6c2V0RWRpdGFibGUo
Ym9vbCBlbmFibGUpIHsKKyAgZC0+c2V0RmxhZ1JlY3Vyc2l2ZWx5KCZLSFRNTFBhcnRQcml2YXRl
OjptX2Rlc2lnbk1vZGUsIGVuYWJsZSk7CisgIC8vIEZJWE1FOiB0aGlzIHdvbid0IHdvcmsgb24g
ZnJhbWVzIGFzIGV4cGVjdGVkCisgIGlmIChlbmFibGUpCisgICAgdmlldygpLT5pbml0Q2FyZXQo
KTsKKyAgZWxzZQorICAgIHZpZXcoKS0+Y2FyZXRPZmYoKTsKK30KKworYm9vbCBLSFRNTFBhcnQ6
OmlzRWRpdGFibGUoKSBjb25zdCB7CisgIHJldHVybiBkLT5tX2Rlc2lnbk1vZGU7Cit9CisKIHZv
aWQgS0hUTUxQYXJ0OjpmaW5kVGV4dEJlZ2luKCkKIHsKICAgZC0+bV9maW5kUG9zID0gLTE7CkBA
IC0yNTIzLDcgKzI1NzEsNyBAQCB2b2lkIEtIVE1MUGFydDo6c2xvdEhpZ2hsaWdodCggY29uc3Qg
UVN0CiAgICAgICB7CiAgICAgICAgIGludCBkdW1teTsKICAgICAgICAgc3RhdGljX2Nhc3Q8a2h0
bWw6OlJlbmRlclRleHQgKj4obm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAtPmN1cnNvclBv
cyggZC0+bV9zdGFydE9mZnNldCwgeCwgeSwgZHVtbXkgKTsgLy8gbW9yZSBwcmVjaXNlIHRoYW4g
cG9zT2ZDaGFyCisgICAgICAgICAgLT5jYXJldFBvcyggZC0+bV9zdGFydE9mZnNldCwgZmFsc2Us
IHgsIHksIGR1bW15LCBkdW1teSApOyAvLyBtb3JlIHByZWNpc2UgdGhhbiBwb3NPZkNoYXIKICAg
ICAgICAgLy9rZERlYnVnKDYwNTApIDw8ICJ0b3BsZWZ0OiAiIDw8IHggPDwgIiwiIDw8IHkgPDwg
ZW5kbDsKICAgICAgICAgaWYgKCB4ICE9IC0xIHx8IHkgIT0gLTEgKQogICAgICAgICB7CkBAIC0y
NTY4LDkgKzI2MTYsOSBAQCB2b2lkIEtIVE1MUGFydDo6c2xvdEhpZ2hsaWdodCggY29uc3QgUVN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9zZWxlY3Rpb25FbmQuaGFuZGxlKCks
IGQtPm1fZW5kT2Zmc2V0ICk7CiAgICAgaWYgKGQtPm1fc2VsZWN0aW9uRW5kLmhhbmRsZSgpLT5y
ZW5kZXJlcigpICkKICAgICB7Ci0gICAgICBpbnQgeCwgeSwgaGVpZ2h0OworICAgICAgaW50IHgs
IHksIGhlaWdodCwgZHVtbXk7CiAgICAgICBzdGF0aWNfY2FzdDxraHRtbDo6UmVuZGVyVGV4dCAq
PihkLT5tX3NlbGVjdGlvbkVuZC5oYW5kbGUoKS0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAtPmN1
cnNvclBvcyggZC0+bV9lbmRPZmZzZXQsIHgsIHksIGhlaWdodCApOyAvLyBtb3JlIHByZWNpc2Ug
dGhhbiBwb3NPZkNoYXIKKyAgICAgICAgICAtPmNhcmV0UG9zKCBkLT5tX2VuZE9mZnNldCwgZmFs
c2UsIHgsIHksIGR1bW15LCBoZWlnaHQgKTsgLy8gbW9yZSBwcmVjaXNlIHRoYW4gcG9zT2ZDaGFy
CiAgICAgICAvL2tkRGVidWcoNjA1MCkgPDwgImJvdHRvbXJpZ2h0OiAiIDw8IHggPDwgIiwiIDw8
IHkraGVpZ2h0IDw8IGVuZGw7CiAgICAgICBpZiAoIHggIT0gLTEgfHwgeSAhPSAtMSApCiAgICAg
ICB7CkBAIC01NTcxLDYgKzU2MTksMTAgQEAga2h0bWw6OkRlY29kZXIgKktIVE1MUGFydDo6Y3Jl
YXRlRGVjb2RlcgogCiAgIGRlYy0+c2V0QXV0b0RldGVjdExhbmd1YWdlKCBkLT5tX2F1dG9EZXRl
Y3RMYW5ndWFnZSApOwogICByZXR1cm4gZGVjOworfQorCit2b2lkIEtIVE1MUGFydDo6ZW1pdENh
cmV0UG9zaXRpb25DaGFuZ2VkKGNvbnN0IERPTTo6Tm9kZSAmbm9kZSwgbG9uZyBvZmZzZXQpIHsK
KyAgZW1pdCBjYXJldFBvc2l0aW9uQ2hhbmdlZChub2RlLCBvZmZzZXQpOwogfQogCiB1c2luZyBu
YW1lc3BhY2UgS1BhcnRzOwpJbmRleDoga2h0bWxfcGFydC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2todG1sX3BhcnQuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yMjEKZGlmZiAtdSAtcCAtcjEuMjIxIGtodG1sX3BhcnQuaAotLS0ga2h0bWxfcGFydC5o
CTI2IEp1bCAyMDAzIDE5OjM0OjE3IC0wMDAwCTEuMjIxCisrKyBraHRtbF9wYXJ0LmgJOSBBdWcg
MjAwMyAwMjo0NDo0NiAtMDAwMApAQCAtOTgsNyArOTgsNyBAQCBuYW1lc3BhY2UgS1BhcnRzCiAg
KiBUaGlzIGNsYXNzIGlzIGtodG1sJ3MgbWFpbiBjbGFzcy4gSXQgZmVhdHVyZXMgYW4gYWxtb3N0
IGNvbXBsZXRlCiAgKiB3ZWIgYnJvd3NlciwgYW5kIGh0bWwgcmVuZGVyZXIuCiAgKgotICogVGhl
IGVhc2llc3Qgd2F5IHRvIHVzZSB0aGlzIGNsYXNzIChpZiB5b3UganVzdCB3YW50IHRvIGRpc3Bs
YXkgYSBhbiBIVE1MCisgKiBUaGUgZWFzaWVzdCB3YXkgdG8gdXNlIHRoaXMgY2xhc3MgKGlmIHlv
dSBqdXN0IHdhbnQgdG8gZGlzcGxheSBhbiBIVE1MCiAgKiBwYWdlIGF0IHNvbWUgVVJMKSBpcyB0
aGUgZm9sbG93aW5nOgogICoKICAqIDxwcmU+CkBAIC0zNzMsMTAgKzM3Myw0NiBAQCBwdWJsaWM6
CiAgIHZvaWQgc2V0T25seUxvY2FsUmVmZXJlbmNlcyggYm9vbCBlbmFibGUgKTsKIAogICAvKioK
LSAgICogUmV0dXJuZCB3aGV0aGVyIHJlZmVyZW5jZXMgc2hvdWxkIGJlIGxvYWRlZCAoIGRlZmF1
bHQgZmFsc2UgKQorICAgKiBSZXR1cm5zIHdoZXRoZXIgcmVmZXJlbmNlcyBzaG91bGQgYmUgbG9h
ZGVkICggZGVmYXVsdCBmYWxzZSApCiAgICAqKi8KICAgYm9vbCBvbmx5TG9jYWxSZWZlcmVuY2Vz
KCkgY29uc3Q7CiAKKyAgLyoqCisgICAqIEVuYWJsZXMvZGlzYWJsZXMgY2FyZXQgbW9kZS4KKyAg
ICoKKyAgICogRW5hYmxpbmcgY2FyZXQgbW9kZSBkaXNwbGF5cyBhIGNhcmV0IHdoaWNoIGNhbiBi
ZSB1c2VkIHRvIG5hdmlnYXRlCisgICAqIHRoZSBkb2N1bWVudCB1c2luZyB0aGUga2V5Ym9hcmQg
b25seS4gQ2FyZXQgbW9kZSBpcyBzd2l0Y2hlZCBvZmYgYnkKKyAgICogZGVmYXVsdC4KKyAgICoK
KyAgICogQHBhcmFtIGVuYWJsZSBAcCB0cnVlIHRvIGVuYWJsZSwgQHAgZmFsc2UgdG8gZGlzYWJs
ZSBjYXJldCBtb2RlLgorICAgKiBAc2luY2UgMy4yIChwZW5kaW5nLCBkbyBub3QgdXNlKQorICAg
Ki8KKyAgdm9pZCBzZXRDYXJldE1vZGUoYm9vbCBlbmFibGUpOworCisgIC8qKiBSZXR1cm5zIHdo
ZXRoZXIgY2FyZXQgbW9kZSBpcyBvbi9vZmYuCisgICAqIEBzaW5jZSAzLjIKKyAgICovCisgIGJv
b2wgaXNDYXJldE1vZGUoKSBjb25zdDsKKworICAvKioKKyAgICogTWFrZXMgdGhlIGRvY3VtZW50
IGVkaXRhYmxlLgorICAgKgorICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gQHAgdHJ1ZSBt
YWtlcyB0aGUgZG9jdW1lbnQsIGFuZCBpdHMKKyAgICogc3ViZG9jdW1lbnRzIChzdWNoIGFzIGZy
YW1lcywgaWZyYW1lcywgb2JqZWN0cykgZWRpdGFibGUgYXMgYSB3aG9sZS4KKyAgICogRklYTUU6
IGluc2VydCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG5hdmlnYXRpb24sIGZlYXR1cmVzIGV0Yy4g
YXMgc2VlbiBmaXQKKyAgICoKKyAgICogQHBhcmFtIGVuYWJsZSBAcCB0cnVlIHRvIHNldCBkb2N1
bWVudCBlZGl0YWJsZSwgQHAgZmFsc2UgdG8gc2V0IGl0CisgICAqCXJlYWQtb25seS4KKyAgICog
QHNpbmNlIDMuMiAocGVuZGluZywgZG8gbm90IHVzZSkKKyAgICovCisgIHZvaWQgc2V0RWRpdGFi
bGUoYm9vbCBlbmFibGUpOworCisgIC8qKgorICAgKiBSZXR1cm5zIEBwIHRydWUgaWYgdGhlIGRv
Y3VtZW50IGlzIGVkaXRhYmxlLCBAcCBmYWxzZSBvdGhlcndpc2UuCisgICAqIEBzaW5jZSAzLjIK
KyAgICovCisgIGJvb2wgaXNFZGl0YWJsZSgpIGNvbnN0OworCiAjaWZuZGVmIEtERV9OT19DT01Q
QVQKICAgdm9pZCBlbmFibGVKU2NyaXB0KCBib29sIGUgKSB7IHNldEpTY3JpcHRFbmFibGVkKGUp
OyB9CiAgIHZvaWQgZW5hYmxlSmF2YSggYm9vbCBlICkgeyBzZXRKYXZhRW5hYmxlZChlKTsgfQpA
QCAtNzg1LDYgKzgyMSwxOSBAQCBzaWduYWxzOgogICAvKioKICAgICogQGludGVybmFsICovCiAg
IHZvaWQgZG9jQ3JlYXRlZCgpOworICAKKyAgLyoqCisgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0
ZWQgd2hlbmV2ZXIgdGhlIGNhcmV0IHBvc2l0aW9uIGhhcyBiZWVuIGNoYW5nZWQuCisgICAqCisg
ICAqIFRoZSBzaWduYWwgdHJhbnNtaXRzIHRoZSBwb3NpdGlvbiB0aGUgRE9NOjpSYW5nZSB3YXks
IHRoZSBub2RlIGFuZAorICAgKiB0aGUgemVyby1iYXNlZCBvZmZzZXQgd2l0aGluIHRoaXMgbm9k
ZS4KKyAgICogQHBhcmFtIG5vZGUgbm9kZSB3aGljaCB0aGUgY2FyZXQgaXMgaW4uIFRoaXMgY2Fu
IGJlIG51bGwgaWYgdGhlIGNhcmV0CisgICAqCWhhcyBiZWVuIGRlYWN0aXZhdGVkLgorICAgKiBA
cGFyYW0gb2Zmc2V0IG9mZnNldCB3aXRoaW4gdGhlIG5vZGUuIElmIHRoZSBub2RlIGlzIG51bGws
IHRoZSBvZmZzZXQKKyAgICoJaXMgbWVhbmluZ2xlc3MuCisgICAqIEBzaW5jZSAzLjIKKyAgICov
CisgIHZvaWQgY2FyZXRQb3NpdGlvbkNoYW5nZWQoY29uc3QgRE9NOjpOb2RlICZub2RlLCBsb25n
IG9mZnNldCk7CiAKIHByb3RlY3RlZDoKIApAQCAtMTE3OSw2ICsxMjI4LDggQEAgcHJpdmF0ZToK
ICAgICogZ2VuZXJpYyB6b29tIG91dAogICAgKi8KICAgdm9pZCB6b29tT3V0KGNvbnN0IGludCBz
dGVwcGluZ1tdLCBpbnQgY291bnQpOworCisgIHZvaWQgZW1pdENhcmV0UG9zaXRpb25DaGFuZ2Vk
KGNvbnN0IERPTTo6Tm9kZSAmbm9kZSwgbG9uZyBvZmZzZXQpOwogCiAgIEtIVE1MUGFydFByaXZh
dGUgKmQ7CiAgIGZyaWVuZCBjbGFzcyBLSFRNTFBhcnRQcml2YXRlOwpJbmRleDoga2h0bWxwYXJ0
X3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9raHRtbHBh
cnRfcC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQwCmRpZmYgLXUgLXAgLXIxLjQwIGtodG1s
cGFydF9wLmgKLS0tIGtodG1scGFydF9wLmgJNCBKdW4gMjAwMyAyMzozNjozMCAtMDAwMAkxLjQw
CisrKyBraHRtbHBhcnRfcC5oCTkgQXVnIDIwMDMgMDI6NDQ6NDYgLTAwMDAKQEAgLTEyNiw2ICsx
MjYsNyBAQCBwdWJsaWM6CiAgICAgbV9iRG5kID0gdHJ1ZTsKICAgICBtX3N0YXJ0T2Zmc2V0ID0g
bV9lbmRPZmZzZXQgPSAwOwogICAgIG1fc3RhcnRCZWZvcmVFbmQgPSB0cnVlOworICAgIG1fZXh0
ZW5kQXRFbmQgPSB0cnVlOwogICAgIG1fbGlua0N1cnNvciA9IEtDdXJzb3I6OmhhbmRDdXJzb3Io
KTsKICAgICBtX2xvYWRlZE9iamVjdHMgPSAwOwogICAgIG1fdG90YWxPYmplY3RDb3VudCA9IDA7
CkBAIC0xNTQsNiArMTU1LDkgQEAgcHVibGljOgogICAgIG1fYlBsdWdpbnNPdmVycmlkZSA9IGZh
bHNlOwogICAgIG1fb25seUxvY2FsUmVmZXJlbmNlcyA9IGZhbHNlOwogCisgICAgbV9jYXJldE1v
ZGUgPSBmYWxzZTsKKyAgICBtX2Rlc2lnbk1vZGUgPSBmYWxzZTsKKwogICAgIG1fbWV0YVJlZnJl
c2hFbmFibGVkID0gdHJ1ZTsKICAgICBtX3N0YXR1c01lc3NhZ2VzRW5hYmxlZCA9IHRydWU7CiAK
QEAgLTE3Nyw2ICsxODEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBTYW1lIGZvciBTU0wg
c2V0dGluZ3MKICAgICAgICAgICAgIG1fc3NsX2luX3VzZSA9IHBhcnQtPmQtPm1fc3NsX2luX3Vz
ZTsKICAgICAgICAgICAgIG1fb25seUxvY2FsUmVmZXJlbmNlcyA9IHBhcnQtPmQtPm1fb25seUxv
Y2FsUmVmZXJlbmNlczsKKyAgICAgICAgICAgIG1fY2FyZXRNb2RlID0gcGFydC0+ZC0+bV9jYXJl
dE1vZGU7CisgICAgICAgICAgICBtX2Rlc2lnbk1vZGUgPSBwYXJ0LT5kLT5tX2Rlc2lnbk1vZGU7
CiAgICAgICAgICAgICBtX3pvb21GYWN0b3IgPSBwYXJ0LT5kLT5tX3pvb21GYWN0b3I7CiAgICAg
ICAgICAgICBtX2F1dG9EZXRlY3RMYW5ndWFnZSA9IHBhcnQtPmQtPm1fYXV0b0RldGVjdExhbmd1
YWdlOwogICAgICAgICB9CkBAIC0zMzUsNiArMzQxLDE0IEBAIHB1YmxpYzoKICAgYm9vbCBtX2JS
aWdodE1vdXNlUHJlc3NlZDsKICAgRE9NOjpOb2RlIG1fbW91c2VQcmVzc05vZGU7IC8vbm9kZSB1
bmRlciB0aGUgbW91c2Ugd2hlbiB0aGUgbW91c2Ugd2FzIHByZXNzZWQgKHNldCBpbiB0aGUgbW91
c2UgaGFuZGxlcikKIAorICAvLyBzaW1wbHkgdXNpbmcgdGhlIHNlbGVjdGlvbiBsaW1pdHMgZm9y
IHRoZSBjYXJldCBwb3NpdGlvbiBkb2VzIG5vdCBzdWZmaWNlCisgIC8vIGFzIHdlIG5lZWQgdG8g
a25vdyBvbiB3aGljaCBzaWRlIHRvIGV4dGVuZCB0aGUgc2VsZWN0aW9uCisvLyAgRE9NOjpOb2Rl
IG1fY2FyZXROb2RlOwkvLyBub2RlIGNvbnRhaW5pbmcgdGhlIGNhcmV0CisvLyAgbG9uZyBtX2Nh
cmV0T2Zmc2V0OwkJLy8gb2Zmc2V0IHdpdGhpbiB0aGlzIG5vZGUgKDAtYmFzZWQpCisKKyAgLy8g
dGhlIGNhcmV0IHVzZXMgdGhlIHNlbGVjdGlvbiB2YXJpYWJsZXMgZm9yIGl0cyBwb3NpdGlvbi4g
SWYgbV9leHRlbmRBdEVuZAorICAvLyBpcyB0cnVlLCBtX3NlbGVjdGlvbkVuZCBhbmQgbV9lbmRP
ZmZzZXQgY29udGFpbiB0aGUgbWFuZGF0b3J5IGNhcmV0CisgIC8vIHBvc2l0aW9uLCBvdGhlcndp
c2UgaXQncyBtX3NlbGVjdGlvblN0YXJ0IGFuZCBtX3N0YXJ0T2Zmc2V0LgogICBET006Ok5vZGUg
bV9zZWxlY3Rpb25TdGFydDsKICAgbG9uZyBtX3N0YXJ0T2Zmc2V0OwogICBET006Ok5vZGUgbV9z
ZWxlY3Rpb25FbmQ7CkBAIC0zNDMsNiArMzU3LDcgQEAgcHVibGljOgogICBRU3RyaW5nIG1fb3Zl
clVSTFRhcmdldDsKIAogICBib29sIG1fc3RhcnRCZWZvcmVFbmQ6MTsKKyAgYm9vbCBtX2V4dGVu
ZEF0RW5kOjE7CQkvLyB0cnVlIGlmIHNlbGVjdGlvbiBpcyB0byBiZSBleHRlbmRlZCBhdCBpdHMg
ZW5kCiAgIGJvb2wgbV9iRG5kOjE7CiAgIGJvb2wgbV9iRmlyc3REYXRhOjE7CiAgIGJvb2wgbV9i
Q2xlYXJpbmc6MTsKQEAgLTM1Nyw2ICszNzIsOSBAQCBwdWJsaWM6CiAgIFFQb2ludCBtX2RyYWdM
YXN0UG9zOwogI2VuZGlmCiAKKyAgYm9vbCBtX2Rlc2lnbk1vZGU7CisgIGJvb2wgbV9jYXJldE1v
ZGU7CisKICAgUUN1cnNvciBtX2xpbmtDdXJzb3I7CiAgIFFUaW1lciBtX3Njcm9sbFRpbWVyOwog
CkBAIC00MTgsNiArNDM2LDE3IEBAIHB1YmxpYzoKICAga2h0bWw6OkRlY29kZXI6OkF1dG9EZXRl
Y3RMYW5ndWFnZSBtX2F1dG9EZXRlY3RMYW5ndWFnZTsKICAgS1BvcHVwTWVudSAqbV9hdXRvbWF0
aWNEZXRlY3Rpb247CiAgIEtTZWxlY3RBY3Rpb24gKm1fbWFudWFsRGV0ZWN0aW9uOworCisgIHZv
aWQgc2V0RmxhZ1JlY3Vyc2l2ZWx5KGJvb2wgS0hUTUxQYXJ0UHJpdmF0ZTo6KmZsYWcsIGJvb2wg
dmFsdWUpOworICAvKiogcmV0dXJucyB0aGUgY2FyZXQgbm9kZSAqLworICBET006Ok5vZGUgJmNh
cmV0Tm9kZSgpIHsKKyAgICByZXR1cm4gbV9leHRlbmRBdEVuZCA/IG1fc2VsZWN0aW9uRW5kIDog
bV9zZWxlY3Rpb25TdGFydDsKKyAgfQorICAvKiogcmV0dXJucyB0aGUgY2FyZXQgb2Zmc2V0ICov
CisgIGxvbmcgJmNhcmV0T2Zmc2V0KCkgeworICAgIHJldHVybiBtX2V4dGVuZEF0RW5kID8gbV9l
bmRPZmZzZXQgOiBtX3N0YXJ0T2Zmc2V0OworICB9CisKIH07CiAKICNlbmRpZgpJbmRleDoga2h0
bWx2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9r
aHRtbHZpZXcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUyMwpkaWZmIC11IC1wIC1yMS41
MjMga2h0bWx2aWV3LmNwcAotLS0ga2h0bWx2aWV3LmNwcAk1IEF1ZyAyMDAzIDExOjM2OjIxIC0w
MDAwCTEuNTIzCisrKyBraHRtbHZpZXcuY3BwCTkgQXVnIDIwMDMgMDI6NDQ6NTAgLTAwMDAKQEAg
LTI5LDEwICsyOSwxNSBAQAogCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgog
I2luY2x1ZGUgImh0bWwvaHRtbF9pbmxpbmVpbXBsLmgiCisjaW5jbHVkZSAicmVuZGVyaW5nL3Jl
bmRlcl9hcmVuYS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfcm9vdC5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRl
cl9yZXBsYWNlZC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfbGF5ZXIuaCIKKyNpbmNs
dWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIKKyNkZWZpbmUgcHJvdGVjdGVkIHB1YmxpYyAv
LyBGSVhNRTogcmVtb3ZlIHRoYXQgb25jZSB0aGUgSW5saW5lRmxvd0JveCBjaGFuZ2VzIGhhdmUg
YmVlbiBtZXJnZWQgKExTKQorI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgorI3Vu
ZGVmIHByb3RlY3RlZAogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRl
ICJjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgpA
QCAtNDAsNiArNDUsOCBAQAogI2luY2x1ZGUgImtodG1sX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAi
a2h0bWxfcHJpbnRzZXR0aW5ncy5oIgogCisjaW5jbHVkZSAia2h0bWxwYXJ0X3AuaCIKKwogI2lu
Y2x1ZGUgPGtjdXJzb3IuaD4KICNpbmNsdWRlIDxrc2ltcGxlY29uZmlnLmg+CiAjaW5jbHVkZSA8
a3N0cmluZ2hhbmRsZXIuaD4KQEAgLTYyLDYgKzY5LDggQEAKICNpbmNsdWRlIDxrZGlhbG9nYmFz
ZS5oPgogI2luY2x1ZGUgPHFwdHJkaWN0Lmg+CiAKKyNpbmNsdWRlIDxpb3N0cmVhbS5oPgkvLyBG
SVhNRTogdGVtcG9yYXJ5IGtsdWdkZSwgcmVtb3ZlIGFmdGVyIHRlc3RpbmcgKExTKQorCiAjZGVm
aW5lIFBBSU5UX0JVRkZFUl9IRUlHSFQgMTI4CiAKIHVzaW5nIG5hbWVzcGFjZSBET007CkBAIC04
OSw2ICs5OCw0MyBAQCBwcml2YXRlOgogCiAjZW5kaWYKIAorLyoqIGNvbnRleHR1YWwgaW5mb3Jt
YXRpb24gYWJvdXQgdGhlIGNhcmV0IHdoaWNoIGlzIHJlbGF0ZWQgdG8gdGhlIHZpZXcuCisgKiBB
biBvYmplY3Qgb2YgdGhpcyBjbGFzcyBpcyBvbmx5IGluc3RhbnRpYXRlZCB3aGVuIGl0IGlzIG5l
ZWRlZC4KKyAqLworc3RydWN0IENhcmV0Vmlld0NvbnRleHQgeworICAgIGludCBmcmVxVGltZXJJ
ZDsJCS8vIGNhcmV0IGJsaW5rIGZyZXF1ZW5jeSB0aW1lciBpZAorICAgIGludCB4LCB5OwkJCS8v
IGNhcmV0IHBvc2l0aW9uIGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzCisgICAgCQkJCS8vICh5IHNw
ZWNpZmllcyB0aGUgdG9wLCBub3QgdGhlIGJhc2VsaW5lKQorICAgIGludCBoZWlnaHQ7CQkJLy8g
aGVpZ2h0IG9mIGNhcmV0IGluIHBpeGVscworICAgIGludCB3aWR0aDsJCQkvLyB3aWR0aCBvZiBj
YXJldCBpbiBwaXhlbHMKKyAgICBib29sIHZpc2libGU7CQkvLyB0cnVlIGlmIGN1cnJlbnRseSB2
aXNpYmxlLgorICAgIGJvb2wgZGlzcGxheWVkOwkJLy8gdHJ1ZSBpZiBjYXJldCBpcyB0byBiZSBk
aXNwbGF5ZWQgYXQgYWxsLgorCisgICAgLyoqIEZvciBuYXR1cmFsIHRyYXZlcnNhbCBvZiBsaW5l
cywgdGhlIG9yaWdpbmFsIHggcG9zaXRpb24gaXMgc2F2ZWQsIGFuZAorICAgICAqIHRoZSBhY3R1
YWwgeCBpcyBzZXQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciB3aG9zZSB4IHBvc2l0aW9uIGlzCisg
ICAgICogZ3JlYXRlciB0aGFuIG9yaWdYLgorICAgICAqCisgICAgICogb3JpZ1ggaXMgcmVzZXQg
dG8geCB3aGVuZXZlciB0aGUgY2FyZXQgaXMgbW92ZWQgaG9yaXpvbnRhbGx5IG9yIHBsYWNlZAor
ICAgICAqIGJ5IHRoZSBtb3VzZS4KKyAgICAgKi8KKyAgICBpbnQgb3JpZ1g7CisKKyAgICBDYXJl
dFZpZXdDb250ZXh0KCkgOiBmcmVxVGltZXJJZCgtMSksIHgoMCksIHkoMCksIGhlaWdodCgxNiks
IHZpc2libGUodHJ1ZSksCisgICAgCWRpc3BsYXllZChmYWxzZSksIG9yaWdYKDApCisgICAge30K
K307CisKKy8qKiBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlZGl0aW5nIHN0YXRl
LgorICogQW4gb2JqZWN0IG9mIHRoaXMgY2xhc3MgaXMgb25seSBpbnN0YW50aWF0ZWQgd2hlbiBp
dCBpcyBuZWVkZWQuCisgKi8KK3N0cnVjdCBFZGl0b3JDb250ZXh0IHsKKyAgICBib29sIG92ZXJy
aWRlOwkJLy8gdHJ1ZSBpZiB0eXBlZCBjaGFyYWN0ZXJzIHNob3VsZCBvdmVycmlkZQorICAgIAkJ
CQkvLyB0aGUgZXhpc3Rpbmcgb25lcy4KKworICAgIEVkaXRvckNvbnRleHQoKSA6IG92ZXJyaWRl
KGZhbHNlKQorICAgIHt9Cit9OworCiBjbGFzcyBLSFRNTFZpZXdQcml2YXRlIHsKICAgICBmcmll
bmQgY2xhc3MgS0hUTUxUb29sVGlwOwogcHVibGljOgpAQCAtMTAzLDYgKzE0OSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgcHJldlNjcm9sbGJhclZpc2libGUgPSB0cnVlOwogCXRvb2x0aXAgPSAwOwog
ICAgICAgICBwb3NzaWJsZVRyaXBsZUNsaWNrID0gZmFsc2U7CisJbV9jYXJldFZpZXdDb250ZXh0
ID0gMDsKKwltX2VkaXRvckNvbnRleHQgPSAwOwogICAgIH0KICAgICB+S0hUTUxWaWV3UHJpdmF0
ZSgpCiAgICAgewpAQCAtMTEzLDYgKzE2MSw4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHVuZGVy
TW91c2UpCiAJICAgIHVuZGVyTW91c2UtPmRlcmVmKCk7CiAJZGVsZXRlIHRvb2x0aXA7CisJZGVs
ZXRlIG1fY2FyZXRWaWV3Q29udGV4dDsKKwlkZWxldGUgbV9lZGl0b3JDb250ZXh0OwogICAgIH0K
ICAgICB2b2lkIHJlc2V0KCkKICAgICB7CkBAIC0xNTEsNiArMjAxLDcgQEAgcHVibGljOgogICAg
ICAgICByZXBhaW50TGF5b3V0ID0gZmFsc2U7CiAgICAgICAgIHVwZGF0ZVJlY3QgPSBRUmVjdCgp
OwogICAgICAgICBtX2RpYWxvZ3NBbGxvd2VkID0gdHJ1ZTsKKwkvLyBGSVhNRTogZGVjaWRlIHdo
YXQgdG8gZG8gd2l0aCBjYXJldCB2aWV3IGFuZCBlZGl0b3IgY29udGV4dHMKICAgICB9CiAgICAg
dm9pZCBuZXdTY3JvbGxUaW1lcihRV2lkZ2V0ICp2aWV3LCBpbnQgdGlkKQogICAgIHsKQEAgLTE4
NSw2ICsyMzYsMjEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqIHRoaXMg
ZnVuY3Rpb24gcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgY2FyZXQgdmlldyBjb250ZXh0LiBJ
ZiBub25lCisgICAgICogZXhpc3RzLCBpdCB3aWxsIGJlIGluc3RhbnRpYXRlZC4KKyAgICAgKi8K
KyAgICBDYXJldFZpZXdDb250ZXh0ICpjYXJldFZpZXdDb250ZXh0KCkgeworICAgICAgaWYgKCFt
X2NhcmV0Vmlld0NvbnRleHQpIG1fY2FyZXRWaWV3Q29udGV4dCA9IG5ldyBDYXJldFZpZXdDb250
ZXh0KCk7CisgICAgICByZXR1cm4gbV9jYXJldFZpZXdDb250ZXh0OworICAgIH0KKyAgICAvKiog
dGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBlZGl0b3IgY29udGV4dC4g
SWYgbm9uZQorICAgICAqIGV4aXN0cywgaXQgd2lsbCBiZSBpbnN0YW50aWF0ZWQuCisgICAgICov
CisgICAgRWRpdG9yQ29udGV4dCAqZWRpdG9yQ29udGV4dCgpIHsKKyAgICAgIGlmICghbV9lZGl0
b3JDb250ZXh0KSBtX2VkaXRvckNvbnRleHQgPSBuZXcgRWRpdG9yQ29udGV4dCgpOworICAgICAg
cmV0dXJuIG1fZWRpdG9yQ29udGV4dDsKKyAgICB9CisKICAgICBRUGFpbnRlciAqdHA7CiAgICAg
UVBpeG1hcCAgKnBhaW50QnVmZmVyOwogICAgIFFQaXhtYXAgICp2ZXJ0UGFpbnRCdWZmZXI7CkBA
IC0yMjksOCArMjk1LDEwOCBAQCBwdWJsaWM6CiAgICAgUVJlY3QgdXBkYXRlUmVjdDsKICAgICBL
SFRNTFRvb2xUaXAgKnRvb2x0aXA7CiAgICAgUVB0ckRpY3Q8UVdpZGdldD4gdmlzaWJsZVdpZGdl
dHM7CisgICAgQ2FyZXRWaWV3Q29udGV4dCAqbV9jYXJldFZpZXdDb250ZXh0OworICAgIEVkaXRv
ckNvbnRleHQgKm1fZWRpdG9yQ29udGV4dDsKIH07CiAKKy8vID09IGNhcmV0LXJlbGF0ZWQgaGVs
cGVyIGZ1bmN0aW9ucworCituYW1lc3BhY2Uga2h0bWwgeworCisvKiogTWFrZSBzdXJlIHRoZSBn
aXZlbiBub2RlIGlzIGEgbGVhZiBub2RlLiAqLworaW5saW5lIHZvaWQgZW5zdXJlTGVhZk5vZGUo
Tm9kZUltcGwgKiZub2RlKSB7CisgIGlmIChub2RlICYmIG5vZGUtPmhhc0NoaWxkTm9kZXMoKSkg
bm9kZSA9IG5vZGUtPm5leHRMZWFmTm9kZSgpOworfQorCisvKiogRmluZHMgdGhlIG5leHQgbm9k
ZSB0aGF0IGhhcyBhIHJlbmRlcmVyLgorICoKKyAqIE5vdGUgdGhhdCBpZiB0aGUgaW5pdGlhbCBA
cCBub2RlIGhhcyBhIHJlbmRlcmVyLCB0aGlzIHdpbGwgYmUgcmV0dXJuZWQsCisgKiByZWdhcmRs
ZXNzIG9mIGJlaW5nIGEgbGVhZiBub2RlLgorICogT3RoZXJ3aXNlLCBmb3IgdGhlIG5leHQgbm9k
ZXMsIG9ubHkgbGVhZiBub2RlcyBhcmUgY29uc2lkZXJlZC4KKyAqIEBwYXJhbSBub2RlIG5vZGUg
dG8gc3RhcnQgd2l0aCwgd2lsbCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5CisgKiBAcmV0dXJuIHJl
bmRlcmVyIG9yIDAgaWYgbm8gZm9sbG93aW5nIG5vZGUgaGFzIGEgcmVuZGVyZXIuCisgKi8KK2lu
bGluZSBSZW5kZXJPYmplY3QgKmZpbmRSZW5kZXJlcihOb2RlSW1wbCAqJm5vZGUpIHsKKyAgaWYg
KCFub2RlKSByZXR1cm4gMDsKKyAgUmVuZGVyT2JqZWN0ICpyID0gbm9kZS0+cmVuZGVyZXIoKTsK
KyAgd2hpbGUgKCFyKSB7CisgICAgbm9kZSA9IG5vZGUtPm5leHRMZWFmTm9kZSgpOworICAgIGlm
ICghbm9kZSkgYnJlYWs7CisgICAgciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgIH0KKyAgcmV0dXJu
IHI7Cit9CisKKy8qKiBCcmluZyBjYXJldCBpbmZvcm1hdGlvbiBwb3NpdGlvbiBpbnRvIGEgc2Fu
ZSBzdGF0ZSAqLworc3RhdGljIHZvaWQgc2FuaXRpemVDYXJldFN0YXRlKE5vZGVJbXBsIComY2Fy
ZXROb2RlLCBsb25nICZvZmZzZXQpIHsKKyAgZW5zdXJlTGVhZk5vZGUoY2FyZXROb2RlKTsKKwor
ICAvLyBGSVhNRTogdGhpcyBsZWF2ZXMgY2FyZXROb2RlIHVudG91Y2hlZCBpZiB0aGVyZSBhcmUg
bm8gbW9yZSByZW5kZXJlcnMuCisgIC8vIEl0IGJldHRlciBzaG91bGQgc2VhcmNoIGJhY2t3YXJk
cyB0aGVuLgorICAvLyBUaGlzIHN0aWxsIHdvbid0IHNvbHZlIHRoZSBwcm9ibGVtIHdoYXQgdG8g
ZG8gaWYgKm5vKiBlbGVtZW50IGhhcyBhCisgIC8vIHJlbmRlcmVyLgorICBOb2RlSW1wbCAqdG1w
Tm9kZSA9IGNhcmV0Tm9kZTsKKyAgaWYgKGZpbmRSZW5kZXJlcih0bXBOb2RlKSkgY2FyZXROb2Rl
ID0gdG1wTm9kZTsKKworICBsb25nIG1heCA9IGNhcmV0Tm9kZS0+bWF4T2Zmc2V0KCk7CisgIGxv
bmcgbWluID0gY2FyZXROb2RlLT5taW5PZmZzZXQoKTsKKyAgaWYgKG9mZnNldCA8IG1pbikgb2Zm
c2V0ID0gbWluOworICBlbHNlIGlmIChvZmZzZXQgPiBtYXgpIG9mZnNldCA9IG1heDsKK30KKwor
LyoqIFJldHVybnMgdGhlIHByZXZpb3VzIHJlbmRlciBvYmplY3QgdGhhdCBpcyBhIGxlYWYgb2Jq
ZWN0LiAqLworc3RhdGljIFJlbmRlck9iamVjdCAqcHJldkxlYWZSZW5kZXJPYmplY3QoUmVuZGVy
T2JqZWN0ICpyKSB7CisgIFJlbmRlck9iamVjdCAqbiA9IHItPm9iamVjdEFib3ZlKCk7CisgIHdo
aWxlIChuICYmIG4gPT0gci0+cGFyZW50KCkpIHsKKyAgICBpZiAobi0+cHJldmlvdXNTaWJsaW5n
KCkpIHJldHVybiBuLT5vYmplY3RBYm92ZSgpOworICAgIHIgPSBuOworICAgIG4gPSByLT5wYXJl
bnQoKTsKKyAgfQorICByZXR1cm4gbjsKK30KKworLyoqIFJldHVybnMgdGhlIGZvbGxvd2luZyBy
ZW5kZXIgb2JqZWN0IHRoYXQgaXMgYSBsZWFmIG9iamVjdC4gKi8KK3N0YXRpYyBSZW5kZXJPYmpl
Y3QgKm5leHRMZWFmUmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCAqcikgeworICBSZW5kZXJPYmpl
Y3QgKm4gPSByLT5vYmplY3RCZWxvdygpOworICByID0gbjsKKyAgd2hpbGUgKG4pIHIgPSBuLCBu
ID0gbi0+Zmlyc3RDaGlsZCgpOworICByZXR1cm4gcjsKK30KKworLyoqIFNlZWtzIHRoZSBuZXh0
IGxlYWYgaW5saW5lIGJveC4KKyAqLworaW5saW5lIElubGluZUJveCAqc2Vla0xlYWZJbmxpbmVC
b3goSW5saW5lQm94ICpib3gpIHsKKyAgd2hpbGUgKGJveCAmJiBib3gtPmlzSW5saW5lRmxvd0Jv
eCgpKSB7CisvLyAgICBpZiAoYm94LT5pc0lubGluZUZsb3dCb3goKSkgeworICAgICAgYm94ID0g
c3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCAqPihib3gpLT5maXJzdENoaWxkKCk7CisvLyAgICBl
bHNlIGlmIChib3gtPm9iamVjdCgpLT5pc0Zsb3coKSkKKy8vICAgICAgYm94ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyRmxvdyAqPihib3gtPm9iamVjdCgpKS0+Zmlyc3RMaW5lQm94KCk7CisvLyAgICBl
bHNlCisvLyAgICAgIGJyZWFrOworICB9Lyp3ZW5kKi8KKyAgcmV0dXJuIGJveDsKK30KKworI2lm
IDAKKy8qKiBUcmF2ZXJzZXMgdXAgdG8gdGhlIG5leHQgbGVhZiBpbmxpbmUgYm94LgorICogQHJl
dHVybiBsZWFmIG9yIDAgaWYgdGhlcmUgYXJlIG5vIG1vcmUKKyAqLworc3RhdGljIElubGluZUJv
eCAqbmV4dExlYWZJbmxpbmVCb3goSW5saW5lQm94ICpib3gpIHsKKyAgcmV0dXJuIDA7Cit9CisK
Ky8qKiBUcmF2ZXJzZXMgdXAgdG8gdGhlIHByZXZpb3VzIGxlYWYgaW5saW5lIGJveC4KKyAqIEBy
ZXR1cm4gbGVhZiBvciAwIGlmIHRoZXJlIGFyZSBubyBtb3JlCisgKi8KK3N0YXRpYyBJbmxpbmVC
b3ggKnByZXZMZWFmSW5saW5lQm94KElubGluZUJveCAqYm94KSB7CisgIHJldHVybiAwOworfQor
I2VuZGlmCisKK30KKworLy8gPT0gZW5kIGNhcmV0LXJlbGF0ZWQKKwogI2lmbmRlZiBRVF9OT19U
T09MVElQCiAKIHZvaWQgS0hUTUxUb29sVGlwOjptYXliZVRpcChjb25zdCBRUG9pbnQmIHApCkBA
IC00MDksNiArNTc1LDIwIEBAIHZvaWQgS0hUTUxWaWV3OjpkcmF3Q29udGVudHMoIFFQYWludGVy
ICoKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChkLT5tX2NhcmV0Vmlld0NvbnRleHQgJiYg
ZC0+bV9jYXJldFZpZXdDb250ZXh0LT52aXNpYmxlKSB7CisgICAgICAgIFFSZWN0IHBvcyhkLT5t
X2NhcmV0Vmlld0NvbnRleHQtPngsIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eSwKKwkJZC0+bV9j
YXJldFZpZXdDb250ZXh0LT53aWR0aCwgZC0+bV9jYXJldFZpZXdDb250ZXh0LT5oZWlnaHQpOwor
ICAgICAgICBpZiAocG9zLmludGVyc2VjdHMoUVJlY3QoZXgsIGV5LCBldywgZWgpKSkgeworICAg
ICAgICAgICAgcC0+c2V0UmFzdGVyT3AoWG9yUk9QKTsKKwkgICAgcC0+c2V0UGVuKHdoaXRlKTsK
KwkgICAgaWYgKHBvcy5oZWlnaHQoKSA9PSAxKQorICAgICAgICAgICAgICBwLT5kcmF3TGluZShw
b3MudG9wTGVmdCgpLCBwb3MuYm90dG9tUmlnaHQoKSk7CisJICAgIGVsc2UgeworCSAgICAgIHAt
PmZpbGxSZWN0KHBvcywgd2hpdGUpOworCSAgICB9LyplbmQgaWYqLworCX0vKmVuZCBpZiovCisg
ICAgfS8qZW5kIGlmKi8KKwogICAgIGtodG1sOjpEcmF3Q29udGVudHNFdmVudCBldmVudCggcCwg
ZXgsIGV5LCBldywgZWggKTsKICAgICBRQXBwbGljYXRpb246OnNlbmRFdmVudCggbV9wYXJ0LCAm
ZXZlbnQgKTsKIApAQCAtNzQxLDYgKzkyMSwxMyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRN
b3VzZVJlbGVhc2VFdmVuCiB2b2lkIEtIVE1MVmlldzo6a2V5UHJlc3NFdmVudCggUUtleUV2ZW50
ICpfa2UgKQogewogCisgICAgaWYgKG1fcGFydC0+aXNFZGl0YWJsZSgpIHx8IG1fcGFydC0+aXND
YXJldE1vZGUoKQorICAgICAgICB8fCAobV9wYXJ0LT54bWxEb2NJbXBsKCkgJiYgbV9wYXJ0LT54
bWxEb2NJbXBsKCktPmZvY3VzTm9kZSgpCisJICAgICYmIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5m
b2N1c05vZGUoKS0+Y29udGVudEVkaXRhYmxlKCkpKSB7CisgICAgICBjYXJldEtleVByZXNzRXZl
bnQoX2tlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAobV9wYXJ0LT54bWxEb2NJ
bXBsKCkpIHsKICAgICAgICAgaWYgKG1fcGFydC0+eG1sRG9jSW1wbCgpLT5mb2N1c05vZGUoKSkK
ICAgICAgICAgICAgIGlmIChtX3BhcnQtPnhtbERvY0ltcGwoKS0+Zm9jdXNOb2RlKCktPmRpc3Bh
dGNoS2V5RXZlbnQoX2tlKSkKQEAgLTc1NSw2ICs5NDIsNyBAQCB2b2lkIEtIVE1MVmlldzo6a2V5
UHJlc3NFdmVudCggUUtleUV2ZW50CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgIH0KKwogICAgIGludCBvZmZzID0gKGNsaXBwZXIoKS0+aGVpZ2h0KCkgPCAzMCkg
PyBjbGlwcGVyKCktPmhlaWdodCgpIDogMzA7CiAgICAgaWYgKF9rZS0+c3RhdGUoKSAmIFF0OjpT
aGlmdEJ1dHRvbikKICAgICAgIHN3aXRjaChfa2UtPmtleSgpKQpAQCAtOTMzLDggKzExMjEsMTEg
QEAgYm9vbCBLSFRNTFZpZXc6OmZvY3VzTmV4dFByZXZDaGlsZCggYm9vbAogICAgIC8vIE5vdyB0
cnkgdG8gZmluZCB0aGUgbmV4dCBjaGlsZAogICAgIGlmIChtX3BhcnQtPnhtbERvY0ltcGwoKSkg
ewogICAgICAgICBmb2N1c05leHRQcmV2Tm9kZShuZXh0KTsKLSAgICAgICAgaWYgKG1fcGFydC0+
eG1sRG9jSW1wbCgpLT5mb2N1c05vZGUoKSAhPSAwKQorICAgICAgICBpZiAobV9wYXJ0LT54bWxE
b2NJbXBsKCktPmZvY3VzTm9kZSgpICE9IDApIHsKKwkgIGtkRGVidWcoKSA8PCAiZm9jdXNOb2Rl
Lm5hbWU6ICIKKwkgIDw8IG1fcGFydC0+eG1sRG9jSW1wbCgpLT5mb2N1c05vZGUoKS0+bm9kZU5h
bWUoKS5zdHJpbmcoKSA8PCBlbmRsOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIGZvY3Vz
IG5vZGUgZm91bmQKKwkgICAgfQogICAgIH0KIAogICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVy
ZSBpcyBubyBuZXh0L3ByZXZpb3VzIGNoaWxkIHRvIGdvIHRvLCBzbyBwYXNzIHVwIHRvIHRoZSBu
ZXh0L3ByZXZpb3VzIGNoaWxkIGluIG91ciBwYXJlbnQKQEAgLTExMDEsNiArMTI5MiwxNSBAQCB2
b2lkIEtIVE1MVmlldzo6Zm9jdXNOZXh0UHJldk5vZGUoYm9vbCBuCiAgICAgZWxzZQogICAgIC8v
IFNjcm9sbCB0aGUgdmlldyBhcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIG5ldyBmb2N1
cyBub2RlIGlzIHZpc2libGUKICAgICB7CisgICAgICAgIC8vIGlmIGl0J3MgYW4gZWRpdGFibGUg
ZWxlbWVudCwgYWN0aXZhdGUgdGhlIGNhcmV0CisgICAgICAgIGlmICghbV9wYXJ0LT5pc0NhcmV0
TW9kZSgpICYmICFtX3BhcnQtPmlzRWRpdGFibGUoKQorCQkmJiBuZXdGb2N1c05vZGUtPmNvbnRl
bnRFZGl0YWJsZSgpKSB7CisJICAgIGQtPmNhcmV0Vmlld0NvbnRleHQoKTsKKwkgICAgbW92ZUNh
cmV0VG8obmV3Rm9jdXNOb2RlLCAwTCk7CisgICAgICAgIH0gZWxzZSB7CisJICAgIGNhcmV0T2Zm
KCk7CisJfQorCiAgICAgICBpZiAob2xkRm9jdXNOb2RlKQogCXsKIAkgIGlmICghc2Nyb2xsVG8o
bmV3Rm9jdXNOb2RlLT5nZXRSZWN0KCkpKQpAQCAtMTExMSw2ICsxMzExLDcgQEAgdm9pZCBLSFRN
TFZpZXc6OmZvY3VzTmV4dFByZXZOb2RlKGJvb2wgbgogCSAgZW5zdXJlVmlzaWJsZShjb250ZW50
c1goKSwgbmV4dD8wOmNvbnRlbnRzSGVpZ2h0KCkpOwogCSAgLy9yZXR1cm47CiAJfQorCiAgICAg
fQogCiAgICAgLy8gU2V0IGZvY3VzIG5vZGUgb24gdGhlIGRvY3VtZW50CkBAIC0xNjA1LDkgKzE4
MDYsMTYgQEAgdm9pZCBLSFRNTFZpZXc6OmRyb3BFdmVudCggUURyb3BFdmVudCAqZQogICAgIFFT
Y3JvbGxWaWV3Ojpkcm9wRXZlbnQoIGV2ICk7CiB9CiAKK3ZvaWQgS0hUTUxWaWV3Ojpmb2N1c0lu
RXZlbnQoIFFGb2N1c0V2ZW50ICplICkKK3sKKyAgICBzaG93Q2FyZXQoKTsKKyAgICBRU2Nyb2xs
Vmlldzo6Zm9jdXNJbkV2ZW50KCBlICk7Cit9CisKIHZvaWQgS0hUTUxWaWV3Ojpmb2N1c091dEV2
ZW50KCBRRm9jdXNFdmVudCAqZSApCiB7CiAgICAgaWYobV9wYXJ0KSBtX3BhcnQtPnN0b3BBdXRv
U2Nyb2xsKCk7CisgICAgaGlkZUNhcmV0KCk7CiAgICAgUVNjcm9sbFZpZXc6OmZvY3VzT3V0RXZl
bnQoIGUgKTsKIH0KIApAQCAtMTY1NCw2ICsxODYyLDE4IEBAIHZvaWQgS0hUTUxWaWV3Ojp0aW1l
ckV2ZW50ICggUVRpbWVyRXZlbnQKICAgICAgICAgZC0+ZGlydHlMYXlvdXQgPSB0cnVlOwogICAg
ICAgICBsYXlvdXQoKTsKICAgICB9CisgICAgZWxzZSBpZiAoZC0+bV9jYXJldFZpZXdDb250ZXh0
CisgICAgCSAgICAgJiYgZS0+dGltZXJJZCgpID09IGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+ZnJl
cVRpbWVySWQpIHsKKyAgICAgICAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT52aXNpYmxlID0gIWQt
Pm1fY2FyZXRWaWV3Q29udGV4dC0+dmlzaWJsZTsKKwlpZiAoZC0+bV9jYXJldFZpZXdDb250ZXh0
LT5kaXNwbGF5ZWQpIHsKKwkgICAgdXBkYXRlQ29udGVudHMoZC0+bV9jYXJldFZpZXdDb250ZXh0
LT54LCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnksCisJCQlkLT5tX2NhcmV0Vmlld0NvbnRleHQt
PndpZHRoLAorCQkJZC0+bV9jYXJldFZpZXdDb250ZXh0LT5oZWlnaHQpOworCX0vKmVuZCBpZiov
CisvLwlpZiAoZC0+bV9jYXJldFZpZXdDb250ZXh0LT52aXNpYmxlKSBjb3V0IDw8ICJ8IiA8PCBm
bHVzaDsKKy8vCWVsc2UgY291dCA8PCAisCIgPDwgZmx1c2g7CisJcmV0dXJuOworICAgIH0KIAog
ICAgIGlmKCBtX3BhcnQtPnhtbERvY0ltcGwoKSApIHsKIAlET006OkRvY3VtZW50SW1wbCAqZG9j
dW1lbnQgPSBtX3BhcnQtPnhtbERvY0ltcGwoKTsKQEAgLTE3NjUsMyArMTk4NSwxMjIzIEBAIHZv
aWQgS0hUTUxWaWV3Ojpjb21wbGV0ZSgpCiAgICAgICAgIGQtPnJlcGFpbnRUaW1lcklkID0gc3Rh
cnRUaW1lciggMjAgKTsKICAgICB9CiB9CisKKy8vID09IGNhcmV0LXJlbGF0ZWQgc3R1ZmYgPT0K
KworbmFtZXNwYWNlIGtodG1sIHsKKworY2xhc3MgTGluZWFyRG9jdW1lbnQ7CisKK3N0YXRpYyBJ
bmxpbmVGbG93Qm94ICpmaW5kRmxvd0JveChET006Ok5vZGVJbXBsICpub2RlLCBsb25nIG9mZnNl
dCwKKwkJUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJGbG93IComY2IpOworCisvKioKKyAqIEl0
ZXJhdGVzIHRocm91Z2ggdGhlIGxpbmVzIG9mIGEgZG9jdW1lbnQuCisgKgorICogVGhlIGxpbmUg
aXRlcmF0b3IgYmVjb21lcyBpbnZhbGlkIHdoZW4gdGhlIGFzc29jaWF0ZWQgTGluZWFyRG9jdW1l
bnQgb2JqZWN0CisgKiBpcyBkZXN0cm95ZWQuCisgKiBAc2luY2UgMy4yCisgKiBAaW50ZXJuYWwK
KyAqIEBhdXRob3IgTGVvIFNhdmVybmlrCisgKi8KK2NsYXNzIExpbmVJdGVyYXRvciB7Citwcm90
ZWN0ZWQ6CisgIExpbmVhckRvY3VtZW50ICpsaW5lczsJLy8gYXNzb2NpYXRlZCBkb2N1bWVudAor
ICBSZW5kZXJGbG93ICpjYjsJCS8vIGNvbnRhaW5pbmcgYmxvY2sKKyAgSW5saW5lRmxvd0JveCAq
Zmxvd0JveDsJLy8gdGhlIGxpbmUgaXRzZWxmCisKKyAgLy8gTm90ZTogY2IgPT0gMCBpbmRpY2F0
ZXMgYSBwb3NpdGlvbiBiZXlvbmQgdGhlIGJlZ2lubmluZyBvciB0aGUKKyAgLy8gZW5kIG9mIGEg
ZG9jdW1lbnQuCisKKyAgLyoqIERlZmF1bHQgY29uc3RydWN0b3IsIG9ubHkgZm9yIGludGVybmFs
IHVzZQorICAgKi8KKyAgTGluZUl0ZXJhdG9yKCkge30KKworICAvKiogSW5pdGlhbGl6ZXMgYSBu
ZXcgaXRlcmF0b3IuCisgICAqCisgICAqIE5vdGU6IFRoaXMgY29uc3RydWN0b3IgbmVpdGhlciBj
YXJlcyBhYm91dCB0aGUgY29ycmVjdG5lc3Mgb2YgQHAgbm9kZQorICAgKiBub3IgYWJvdXQgQHAg
b2Zmc2V0LiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBlbnN1cmUK
KyAgICogdGhhdCBib3RoIHBvaW50IHRvIHZhbGlkIHBsYWNlcy4KKyAgICovCisgIExpbmVJdGVy
YXRvcihMaW5lYXJEb2N1bWVudCAqbCwgRE9NOjpOb2RlSW1wbCAqbm9kZSwgbG9uZyBvZmZzZXQp
OworCitwdWJsaWM6CisgIC8qKiBkZXJlZmVyZW5jZXMgY3VycmVudCBsaW5lLgorICAgKgorICAg
KiBOb3RlOiBUaGUgcmV0dXJuZWQgaW5saW5lIGZsb3cgYm94IG1heSBiZSBlbXB0eS4gVGhpcyBk
b2VzIDxiPm5vdDxiPgorICAgKglpbmRpY2F0ZSB0aGUgZW5kCisgICAqCW9mIHRoZSBkb2N1bWVu
dCwgYnV0IG1lcmVseSB0aGF0IHRoZSBjdXJyZW50IHBhcmFncmFwaCBkb2VzIG5vdCBjb250YWlu
CisgICAqCWFueSBsaW5lcy4KKyAgICovCisgIElubGluZUZsb3dCb3ggKm9wZXJhdG9yICooKSBj
b25zdCB7IHJldHVybiBmbG93Qm94OyB9CisKKyAgLyoqIHNlZWsgbmV4dCBsaW5lCisgICAqCisg
ICAqIEd1YXJhbnRlZWQgdG8gY3Jhc2ggaWYgYmV5b25kIGJlZ2lubmluZy9lbmQgb2YgZG9jdW1l
bnQuCisgICAqLworICBMaW5lSXRlcmF0b3IgJm9wZXJhdG9yICsrKCk7CisgIC8qKiBzZWVrIG5l
eHQgbGluZS4KKyAgICoKKyAgICogR3VhcmFudGVlZCB0byBjcmFzaCBpZiBiZXlvbmQgYmVnaW5u
aW5nL2VuZCBvZiBkb2N1bWVudC4KKyAgICoKKyAgICogTm90ZTogVGhlIHBvc3RmaXggb3BlcmF0
b3IgaXMgc2xvdy4gVXNlIHRoZSBwcmVmaXggb3BlcmF0b3Igd2hlbmV2ZXIKKyAgICogcG9zc2li
bGUuCisgICAqLworICBMaW5lSXRlcmF0b3Igb3BlcmF0b3IgKysoaW50KTsKKworICAvKiogc2Vl
ayBwcmV2aW91cyBsaW5lLgorICAgKgorICAgKiBHdWFyYW50ZWVkIHRvIGNyYXNoIGlmIGJleW9u
ZCBiZWdpbm5pbmcvZW5kIG9mIGRvY3VtZW50LgorICAgKi8KKyAgTGluZUl0ZXJhdG9yICZvcGVy
YXRvciAtLSgpOworICAvKiogc2VlayBwcmV2aW91cyBsaW5lLgorICAgKgorICAgKiBHdWFyYW50
ZWVkIHRvIGNyYXNoIGlmIGJleW9uZCBiZWdpbm5pbmcvZW5kIG9mIGRvY3VtZW50LgorICAgKgor
ICAgKiBOb3RlOiBUaGUgcG9zdGZpeCBvcGVyYXRvciBpcyBzbG93LiBVc2UgdGhlIHByZWZpeCBv
cGVyYXRvciB3aGVuZXZlcgorICAgKiBwb3NzaWJsZS4KKyAgICovCisgIExpbmVJdGVyYXRvciBv
cGVyYXRvciAtLShpbnQpOworCisgIC8qKiBkb2VzIHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgICoK
KyAgICogVGhpcyBmdW5jdGlvbiBpcyBPKDEpIGZvciB2YWx1ZXMgb2YgKy8tMSwgTyhuKSBvdGhl
cndpc2UuCisgICAqIEBwYXJhbSBzdW1tYW5kIGFkZCB0aGVzZSBtYW55IGxpbmVzCisgICAqLwor
ICBMaW5lSXRlcmF0b3Igb3BlcmF0b3IgKyhpbnQgc3VtbWFuZCkgY29uc3Q7CisgIC8qKiBkb2Vz
IHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgICoKKyAgICogVGhpcyBmdW5jdGlvbiBpcyBPKDEpIGZv
ciB2YWx1ZXMgb2YgKy8tMSwgTyhuKSBvdGhlcndpc2UuCisgICAqIEBwYXJhbSBzdW1tYW5kIGFk
ZCB0aGVzZSBtYW55IGxpbmVzCisgICAqLworICBMaW5lSXRlcmF0b3Igb3BlcmF0b3IgLShpbnQg
c3VtbWFuZCkgY29uc3Q7CisKKyAgLyoqIGRvZXMgcG9pbnRlciBhcml0aG1ldGljIGFuZCBhc3Np
Z25tZW50LgorICAgKgorICAgKiBUaGlzIGZ1bmN0aW9uIGlzIE8oMSkgZm9yIHZhbHVlcyBvZiAr
Ly0xLCBPKG4pIG90aGVyd2lzZS4KKyAgICogQHBhcmFtIHN1bW1hbmQgYWRkIHRoZXNlIG1hbnkg
bGluZXMKKyAgICovCisgIExpbmVJdGVyYXRvciAmb3BlcmF0b3IgKz0oaW50IHN1bW1hbmQpOwor
ICAvKiogZG9lcyBwb2ludGVyIGFyaXRobWV0aWMgYW5kIGFzc2lnbm1lbnQuCisgICAqCisgICAq
IFRoaXMgZnVuY3Rpb24gaXMgTygxKSBmb3IgdmFsdWVzIG9mICsvLTEsIE8obikgb3RoZXJ3aXNl
LgorICAgKiBAcGFyYW0gc3VtbWFuZCBhZGQgdGhlc2UgbWFueSBsaW5lcworICAgKi8KKyAgTGlu
ZUl0ZXJhdG9yICZvcGVyYXRvciAtPShpbnQgc3VtbWFuZCk7CisKKyAgLyoqIGNvbXBhcmVzIHR3
byBpdGVyYXRvcnMuIFRoZSBjb21wYXJhdG9yIGFjdHVhbGx5IHdvcmtzIG9ubHkgZm9yCisgICAq
IGNvbXBhcmluZyBhcmJpdHJhcnkgaXRlcmF0b3JzIHRvIGJlZ2luKCkgYW5kIGVuZCgpLgorICAg
Ki8KKyAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBMaW5lSXRlcmF0b3IgJml0KSBjb25zdCB7Cisg
ICAgcmV0dXJuIGxpbmVzID09IGl0LmxpbmVzCisgICAgCQkmJiBmbG93Qm94ID09IGl0LmZsb3dC
b3ggJiYgY2IgPT0gaXQuY2I7CisgIH0KKworICAvKiogY29tcGFyZXMgdHdvIGl0ZXJhdG9ycwor
ICAgKi8KKyAgYm9vbCBvcGVyYXRvciAhPShjb25zdCBMaW5lSXRlcmF0b3IgJml0KSBjb25zdCB7
CisgICAgcmV0dXJuICFvcGVyYXRvciA9PShpdCk7CisgIH0KKworcHJvdGVjdGVkOgorCisgIGZy
aWVuZCBjbGFzcyBJbmxpbmVCb3hJdGVyYXRvcjsKKyAgZnJpZW5kIGNsYXNzIEVkaXRhYmxlSW5s
aW5lQm94SXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyBMaW5lYXJEb2N1bWVudDsKK307CisKKy8q
KgorICogUmVwcmVzZW50cyB0aGUgd2hvbGUgZG9jdW1lbnQgaW4gdGVybXMgb2YgbGluZXMuCisg
KgorICogU0dNTCBkb2N1bWVudHMgYXJlIHRyZWVzLiBCdXQgZm9yIG5hdmlnYXRpb24sIHRoaXMg
cmVwcmVzZW50YXRpb24gaXMKKyAqIG5vdCBwcmFjdGljYWwuIFRoZXJlZm9yZSB0aGlzIGNsYXNz
IHNlcnZlcyBhcyBhIGhlbHBlciB0byByZXByZXNlbnQgdGhlCisgKiBkb2N1bWVudCBhcyBhIGxp
bmVhciBsaXN0IG9mIGxpbmVzLiBJdHMgdXNhZ2Ugc29tZXdoYXQgcmVzZW1ibGVzIFNUTAorICog
c2VtYW50aWNzIGxpa2UgQHJlZiBiZWdpbiBhbmQgQHJlZiBlbmQgYXMgd2VsbCBhcyBpdGVyYXRv
cnMuCisgKgorICogVGhlIGxpbmVzIGl0c2VsZiBhcmUgcmVwcmVzZW50ZWQgYXMgcG9pbnRlcnMg
dG8gSW5saW5lRmxvd0JveCBvYmplY3RzLgorICoKKyAqIExpbmVhckRvY3VtZW50IGluc3RhbmNl
cyBhcmUgbm90IG1lYW50IHRvIGJlIGtlcHQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlaXIKKyAq
IGFzc29jaWF0ZWQgZG9jdW1lbnQsIGJ1dCBjb25zdHJ1Y3RlZCBmcm9tIChub2RlLCBvZmZzZXQp
IHBhaXJzIHdoZW5ldmVyIGxpbmUKKyAqIHRyYXZlcnNhbCBpcyBuZWVkZWQuIFRoaXMgaXMgYmVj
YXVzZSB0aGUgdW5kZXJseWluZyBJbmxpbmVGbG93Qm94IG9iamVjdHMKKyAqIG1heSBiZSBkZXN0
cm95ZWQgYW5kIHJlY3JlYXRlZCAoZS4gZy4gYnkgcmVzaXppbmcgdGhlIHdpbmRvdywgYWRkaW5n
L3JlbW92aW5nCisgKiBlbGVtZW50cykuCisgKgorICogQGF1dGhvciBMZW8gU2F2ZXJuaWsKKyAq
IEBzaW5jZSAzLjIKKyAqIEBpbnRlcm5hbAorICovCitjbGFzcyBMaW5lYXJEb2N1bWVudCB7Citw
dWJsaWM6CisgIHR5cGVkZWYgTGluZUl0ZXJhdG9yIEl0ZXJhdG9yOworCisgIC8qKgorICAgKiBD
cmVhdGVzIGEgbmV3IGluc3RhbmNlLCBhbmQgaW5pdGlhbGl6ZXMgaXQgdG8gdGhlIGxpbmUgc3Bl
Y2lmaWVkIGJ5CisgICAqIHRoZSBwYXJhbWV0ZXJzIGJlbG93LgorICAgKgorICAgKiBDcmVhdGlv
biB3aWxsIGZhaWwgaWYgQHAgbm9kZSBpcyBpbnZpc2libGUgb3IgZGVmZWN0LgorICAgKiBAcGFy
YW0gcGFydCBwYXJ0IHdpdGhpbiB3aGljaCBldmVyeXRoaW5nIGlzIHRha2luZyBwbGFjZS4KKyAg
ICogQHBhcmFtIG5vZGUgZG9jdW1lbnQgbm9kZSB3aXRoIHdoaWNoIHRvIHN0YXJ0CisgICAqIEBw
YXJhbSBvZmZzZXQgemVyby1iYXNlZCBvZmZzZXQgd2l0aGluIHRoaXMgbm9kZS4KKyAgICovCisg
IExpbmVhckRvY3VtZW50KEtIVE1MUGFydCAqcGFydCwgRE9NOjpOb2RlSW1wbCAqbm9kZSwgbG9u
ZyBvZmZzZXQpOworCisgIHZpcnR1YWwgfkxpbmVhckRvY3VtZW50KCk7CisKKyAgLyoqCisgICAq
IFRlbGxzIHdoZXRoZXIgdGhpcyBsaXN0IGNvbnRhaW5zIGFueSBsaW5lcy4KKyAgICoKKyAgICog
QHJldHVybnMgQHAgdHJ1ZSBpZiB0aGlzIGRvY3VtZW50IGNvbnRhaW5zIGxpbmVzLCBAcCBmYWxz
ZSBvdGhlcndpc2UuIE5vdGUKKyAgICoJdGhhdCBhbiBlbXB0eSBkb2N1bWVudCBjb250YWlucyBh
dCBsZWFzdCBvbmUgbGluZSwgc28gdGhpcyBtZXRob2QKKyAgICoJb25seSByZXR1cm5zIEBwIGZh
bHNlIGlmIHRoZSBkb2N1bWVudCBjb3VsZCBub3QgYmUgaW5pdGlhbGlzZWQgZm9yCisgICAqCXNv
bWUgcmVhc29uLgorICAgKi8KKyAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyAvLyBGSVhNRTogbm90
IHlldCBpbXBsJ2QKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5z
IHRoZSBjb3VudCBvZiBsaW5lcy4KKyAgICoKKyAgICogV2FybmluZzogVGhpcyBmdW5jdGlvbiBp
cyBleHBlbnNpdmUuIENhbGwgaXQgb25jZSBhbmQgY2FjaGUgdGhlIHZhbHVlLgorICAgKgorICAg
KiBGSVhNRTogSXQncyBub3QgaW1wbGVtZW50ZWQgeWV0IChhbmQgbWF5YmUgbmV2ZXIgd2lsbCkK
KyAgICovCisgIGludCBjb3VudCgpIGNvbnN0OworCisgIC8qKgorICAgKiBSZXR1cm5zIGEgbGlu
ZSBpdGVyYXRvciBjb250YWluaW5nIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFzIGl0cyBzdGFydGlu
ZworICAgKiB2YWx1ZS4KKyAgICovCisgIEl0ZXJhdG9yIGN1cnJlbnQoKTsKKworICAvKioKKyAg
ICogUmV0dXJucyBhIGxpbmUgaXRlcmF0b3IgcG9pbnRpbmcgcmlnaHQgYWZ0ZXIgdGhlIGVuZCBv
ZiB0aGUgZG9jdW1lbnQuCisgICAqLworICBjb25zdCBJdGVyYXRvciAmZW5kKCkgY29uc3QgeyBy
ZXR1cm4gX2VuZDsgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIGEgbGluZSBpdGVyYXRvciBwb2lu
dGluZyB0byB0aGUgdmVyeSBmaXJzdCBsaW5lIG9mIHRoZSBkb2N1bWVudC4KKyAgICovCisgIEl0
ZXJhdG9yIGJlZ2luKCk7CisKKyAgLyoqCisgICAqIFJldHVybnMgYSBsaW5lIGl0ZXJhdG9yIHBv
aW50aW5nIGp1c3QgYmVmb3JlIHRoZSB2ZXJ5IGZpcnN0IGxpbmUgb2YgdGhlCisgICAqIGRvY3Vt
ZW50ICh0aGlzIGlzIHNvbWV3aGF0IGFuIGVtdWxhdGlvbiBvZiByZXZlcnNlIGl0ZXJhdG9ycyku
CisgICAqLworICBjb25zdCBJdGVyYXRvciAmcHJlQmVnaW4oKSBjb25zdCB7IHJldHVybiBfcHJl
QmVnaW47IH0KKworcHJvdGVjdGVkOgorICB2b2lkIGluaXRQcmVCZWdpbkl0ZXJhdG9yKCk7Cisg
IHZvaWQgaW5pdEVuZEl0ZXJhdG9yKCk7CisKK3Byb3RlY3RlZDoKKyAgUmVuZGVyQXJlbmEgKmFy
ZW5hOwkJLy8gV2UgbmVlZCBhbiBhcmVuYSBmb3IgaW50ZXJtZWRpYXRlIHJlbmRlcgorICAJCQkJ
Ly8gb2JqZWN0cyB0aGF0IGhhdmUgbm8gb3duIGlubGluZSBib3gKKyAgRE9NOjpOb2RlSW1wbCAq
bm9kZTsKKyAgbG9uZyBvZmZzZXQ7CisKKyAgSXRlcmF0b3IgX3ByZUJlZ2luOworICBJdGVyYXRv
ciBfZW5kOworCisgIEtIVE1MUGFydCAqbV9wYXJ0OworCisgIGZyaWVuZCBjbGFzcyBMaW5lSXRl
cmF0b3I7CisgIGZyaWVuZCBjbGFzcyBFZGl0YWJsZUxpbmVJdGVyYXRvcjsKKyAgZnJpZW5kIGNs
YXNzIElubGluZUJveEl0ZXJhdG9yOworICBmcmllbmQgY2xhc3MgRWRpdGFibGVJbmxpbmVCb3hJ
dGVyYXRvcjsKK307CisKKy8qKgorICogSXRlcmF0ZXMgb3ZlciB0aGUgaW5uZXIgZWxlbWVudHMg
b2YgYW4gaW5saW5lIGZsb3cgYm94LgorICoKKyAqIFRoZSBnaXZlbiBpbmxpbmUgZmxvdyBib3gg
bXVzdCBiZSBhIGxpbmUgYm94LiBUaGUgaW5jcmVtZW50b3Igd2lsbAorICogdHJhdmVyc2UgYWxs
IGxlYWYgaW5saW5lIGJveGVzLiBJdCB3aWxsIGFsc28gZ2VuZXJhdGUgdHJhbnNpZW50IGlubGlu
ZSBib3hlcworICogZm9yIHRob3NlIHJlbmRlciBvYmplY3RzIHRoYXQgZG8gbm90IGhhdmUgb25l
LgorICogQGF1dGhvciBMZW8gU2F2ZXJuaWsKKyAqIEBpbnRlcm5hbAorICogQHNpbmNlIDMuMgor
ICovCitjbGFzcyBJbmxpbmVCb3hJdGVyYXRvciB7Citwcm90ZWN0ZWQ6CisgIFJlbmRlckFyZW5h
ICphcmVuYTsJLy8gYXJlbmEgZm9yIGFsbG9jYXRpbmcgdHJhbnNpZW50IGlubGluZSBib3hlcwor
ICBJbmxpbmVCb3ggKmJveDsJLy8gY3VycmVudGx5IHRyYXZlcnNlZCBpbmxpbmUgYm94CisKK3B1
YmxpYzoKKyAgLyoqIGNyZWF0ZXMgYSBuZXcgaXRlcmF0b3IsIGluaXRpYWxpemVkIHdpdGggdGhl
IGdpdmVuIGZsb3cgYm94LgorICAgKi8KKyAgSW5saW5lQm94SXRlcmF0b3IoUmVuZGVyQXJlbmEg
KmFyZW5hLCBJbmxpbmVGbG93Qm94ICpmbG93Qm94KSA6IGFyZW5hKGFyZW5hKSB7CisgICAgYm94
ID0gc2Vla0xlYWZJbmxpbmVCb3goZmxvd0JveCk7CisgIH0KKworICAvKiogY3JlYXRlcyBhIG5l
dyBpdGVyYXRvciwgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gbGluZSBpdGVyYXRvcgorICAg
Ki8KKyAgSW5saW5lQm94SXRlcmF0b3IoTGluZUl0ZXJhdG9yICZsaXQpIDogYXJlbmEobGl0Lmxp
bmVzLT5hcmVuYSkgeworICAgIGJveCA9IHNlZWtMZWFmSW5saW5lQm94KCpsaXQpOworICB9CisK
KyAgLyoqIHJldHVybnMgdGhlIGN1cnJlbnQgbGVhZiBpbmxpbmUgYm94LgorICAgKgorICAgKiBA
cmV0dXJuIHRoZSBib3ggb3IgMCBpZiB0aGUgZW5kIGhhcyBiZWVuIHJlYWNoZWQuCisgICAqLwor
ICBJbmxpbmVCb3ggKm9wZXJhdG9yICooKSBjb25zdCB7IHJldHVybiBib3g7IH0KKworICAvKiog
aW5jcmVtZW50cyB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIG5leHQgaW5saW5lIGJveCBv
biB0aGlzIGxpbmUgYm94LgorICAgKi8KKyAgSW5saW5lQm94SXRlcmF0b3IgJm9wZXJhdG9yICsr
KCkgeworICAgIElubGluZUJveCAqbmV3Qm94ID0gYm94LT5uZXh0T25MaW5lKCk7CisKKyAgICBp
ZiAobmV3Qm94KQorICAgICAgYm94ID0gc2Vla0xlYWZJbmxpbmVCb3gobmV3Qm94KTsKKyAgICBl
bHNlIHsKKyAgICAgIElubGluZUZsb3dCb3ggKmZsb3dCb3ggPSBib3gtPnBhcmVudCgpOworICAg
ICAgYm94ID0gMDsKKyAgICAgIHdoaWxlIChmbG93Qm94KSB7CisgICAgICAgIElubGluZUJveCAq
bmV3Qm94MiA9IGZsb3dCb3gtPm5leHRPbkxpbmUoKTsKKwlpZiAobmV3Qm94MikgeworCSAgYm94
ID0gc2Vla0xlYWZJbmxpbmVCb3gobmV3Qm94Mik7CisJICBicmVhazsKKwl9LyplbmQgaWYqLwor
CisJZmxvd0JveCA9IGZsb3dCb3gtPnBhcmVudCgpOworICAgICAgfS8qd2VuZCovCisgICAgfS8q
ZW5kIGlmKi8KKworICAgIHJldHVybiAqdGhpczsKKyAgfQorCit9OworCisvKioKKyAqIEl0ZXJh
dGVzIG92ZXIgdGhlIGVkaXRhYmxlIGlubmVyIGVsZW1lbnRzIG9mIGFuIGlubGluZSBmbG93IGJv
eC4KKyAqCisgKiBUaGUgZ2l2ZW4gaW5saW5lIGZsb3cgYm94IG11c3QgYmUgYSBsaW5lIGJveC4g
VGhlIGluY3JlbWVudG9yIHdpbGwKKyAqIHRyYXZlcnNlIGFsbCBsZWFmIGlubGluZSBib3hlcy4g
SW4gY29udHJhc3QgdG8gQHAgSW5saW5lQm94SXRlcmF0b3IgdGhpcworICogaXRlcmF0b3Igb25s
eSByZWdhcmRzIGlubGluZSBib3hlcyB3aGljaCBhcmUgZWRpdGFibGUuCisgKgorICogQGF1dGhv
ciBMZW8gU2F2ZXJuaWsKKyAqIEBpbnRlcm5hbAorICogQHNpbmNlIDMuMgorICovCitjbGFzcyBF
ZGl0YWJsZUlubGluZUJveEl0ZXJhdG9yIDogcHVibGljIElubGluZUJveEl0ZXJhdG9yIHsKK3By
b3RlY3RlZDoKKyAgS0hUTUxQYXJ0ICptX3BhcnQ7CisKK3B1YmxpYzoKKyAgLyoqIGNyZWF0ZXMg
YSBuZXcgaXRlcmF0b3IsIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIGZsb3cgYm94LgorICAg
KiBAcGFyYW0gcGFydCBwYXJ0IHdpdGhpbiB3aGljaCBhbGwgYWN0aW9ucyBhcmUgdGFraW5nIHBs
YWNlLgorICAgKiBAcGFyYW0gYXJlbmEgYXJlbmEgZm9yIHRyYW5zaWVudCBhbGxvY2F0aW9ucwor
ICAgKiBAcGFyYW0gZmxvd0JveCBsaW5lIGJveCB0byBiZSBpdGVyYXRlZAorICAgKi8KKyAgRWRp
dGFibGVJbmxpbmVCb3hJdGVyYXRvcihLSFRNTFBhcnQgKnBhcnQsIFJlbmRlckFyZW5hICphcmVu
YSwKKyAgCQlJbmxpbmVGbG93Qm94ICpmbG93Qm94KQorICAJOiBJbmxpbmVCb3hJdGVyYXRvcihh
cmVuYSwgZmxvd0JveCksIG1fcGFydChwYXJ0KQorICB7CisgICAgaWYgKGJveCAmJiAhaXNFZGl0
YWJsZShib3gpKSArKyp0aGlzOworICB9CisKKyAgLyoqIGluaXRpYWxpemVzIGEgbmV3IGl0ZXJh
dG9yIGZyb20gdGhlIGdpdmVuIGxpbmUgaXRlcmF0b3IKKyAgICovCisgIEVkaXRhYmxlSW5saW5l
Qm94SXRlcmF0b3IoTGluZUl0ZXJhdG9yICZsaXQpIDogSW5saW5lQm94SXRlcmF0b3IobGl0KSwK
KyAgCQltX3BhcnQobGl0LmxpbmVzLT5tX3BhcnQpIHsKKyAgICBpZiAoYm94ICYmICFpc0VkaXRh
YmxlKGJveCkpICsrKnRoaXM7CisgIH0KKworICAvKiogaW5jcmVtZW50cyB0aGUgaXRlcmF0b3Ig
dG8gcG9pbnQgdG8gdGhlIG5leHQgZWRpdGFibGUgaW5saW5lIGJveAorICAgKiBvbiB0aGlzIGxp
bmUgYm94LgorICAgKi8KKyAgRWRpdGFibGVJbmxpbmVCb3hJdGVyYXRvciAmb3BlcmF0b3IgKyso
KSB7CisgICAgZG8geworICAgICAgSW5saW5lQm94SXRlcmF0b3I6Om9wZXJhdG9yICsrKCk7Cisg
ICAgfSB3aGlsZSAoYm94ICYmICFpc0VkaXRhYmxlKGJveCkpOworICAgIHJldHVybiAqdGhpczsK
KyAgfQorCitwcm90ZWN0ZWQ6CisgIC8qKiBmaW5kcyBvdXQgaWYgdGhlIGdpdmVuIGJveCBpcyBl
ZGl0YWJsZS4KKyAgICogQHBhcmFtIGIgZ2l2ZW4gaW5saW5lIGJveAorICAgKiBAcmV0dXJuIEBw
IHRydWUgaWYgYm94IGlzIGVkaXRhYmxlCisgICAqLworICBib29sIGlzRWRpdGFibGUoSW5saW5l
Qm94ICpiKSBjb25zdCB7CisgICAgaWYgKG1fcGFydC0+aXNDYXJldE1vZGUoKSB8fCBtX3BhcnQt
PmlzRWRpdGFibGUoKSkgcmV0dXJuIHRydWU7CisKKyAgICBSZW5kZXJPYmplY3QgKnIgPSBiLT5v
YmplY3QoKTsKKyAgICBpZiAoYi0+aXNJbmxpbmVGbG93Qm94KCkpIGtkRGVidWcoNjAwMCkgPDwg
ImIgaXMgaW5saW5lIGZsb3cgYm94IiA8PCBlbmRsOworICAgIGtkRGVidWcoNjAwMCkgPDwgImlz
RWRpdGFibGUgciIgPDwgciA8PCAiOiAiIDw8IChyID8gci0+cmVuZGVyTmFtZSgpIDogUVN0cmlu
Zzo6bnVsbCkgPDwgKHIgJiYgci0+aXNUZXh0KCkgPyAiIGNvbnRhaW5zIFwiIiArIFFTdHJpbmco
KChSZW5kZXJUZXh0ICopciktPnN0ci0+cywgKChSZW5kZXJUZXh0ICopciktPnN0ci0+bCkgKyAi
XCIiIDogUVN0cmluZzo6bnVsbCkgPDwgZW5kbDsKKyAgICBib29sIHJlc3VsdCA9IHIgJiYgci0+
ZWxlbWVudCgpCisgICAgICAgICAgICYmIHItPnN0eWxlKCktPmRpc3BsYXkoKSAhPSBOT05FIC8q
IGlzIHRoaXMgcG9zc2libGU/ICovCisJICAgJiYgci0+c3R5bGUoKS0+dXNlcklucHV0KCkgPT0g
VUlfRU5BQkxFRDsKKyAgICByZXR1cm4gcmVzdWx0OworICB9Cit9OworCisvKioKKyAqIEl0ZXJh
dGVzIHRocm91Z2ggdGhlIGVkaXRhYmxlIGxpbmVzIG9mIGEgZG9jdW1lbnQuCisgKgorICogVGhp
cyBpdGVyYXRvciwgb3Bwb3NpbmcgdG8gQHAgTGluZUl0ZXJhdG9yLCBvbmx5IHJlZ2FyZHMgZWRp
dGFibGUgbGluZXMuCisgKiBJZiBlaXRoZXIgQHJlZiBLSFRNTFBhcnQ6OmVkaXRhYmxlIG9yIEBy
ZWYgS0hUTUxQYXJ0OjpjYXJldE1vZGUgYXJlIHRydWUsCisgKiB0aGlzIGNsYXNzIHdvcmtzIGV4
YWN0bHkgYXMgaWYgaXQgd2VyZSBhIExpbmVJdGVyYXRvci4KKyAqCisgKiBUaGUgaXRlcmF0b3Ig
Y2FuIGJlIGNvbXBhcmVkIHRvIG5vcm1hbCBMaW5lSXRlcmF0b3JzLCBlc3BlY2lhbGx5IHRvCisg
KiBAcmVmIExpbmVhckRvY3VtZW50OjpwcmVCZWdpbiBhbmQgQHJlZiBMaW5lYXJEb2N1bWVudDo6
ZW5kCisgKgorICogVGhlIGxpbmUgaXRlcmF0b3IgYmVjb21lcyBpbnZhbGlkIHdoZW4gdGhlIGFz
c29jaWF0ZWQgTGluZWFyRG9jdW1lbnQgb2JqZWN0CisgKiBpcyBkZXN0cm95ZWQuCisgKiBAc2lu
Y2UgMy4yCisgKiBAaW50ZXJuYWwKKyAqIEBhdXRob3IgTGVvIFNhdmVybmlrCisgKi8KK2NsYXNz
IEVkaXRhYmxlTGluZUl0ZXJhdG9yIDogcHVibGljIExpbmVJdGVyYXRvciB7CitwdWJsaWM6Cisg
IC8qKiBJbml0aWFsaXplcyBhIG5ldyBpdGVyYXRvci4KKyAgICoKKyAgICogVGhlIGl0ZXJhdG9y
IGlzIHNldCB0byB0aGUgZmlyc3QgZm9sbG93aW5nIGVkaXRhYmxlIGxpbmUgb3IgdG8gdGhlCisg
ICAqIGVuZCBpZiBubyBlZGl0YWJsZSBsaW5lIGZvbGxvd3MuCisgICAqIEBwYXJhbSBpdCBhIGxp
bmUgaXRlcmF0b3IgdG8gaW5pdGlhbGl6ZSB0aGlzIGZyb20KKyAgICovCisgIEVkaXRhYmxlTGlu
ZUl0ZXJhdG9yKGNvbnN0IExpbmVJdGVyYXRvciAmaXQpIDogTGluZUl0ZXJhdG9yKGl0KQorICB7
CisgICAgaWYgKGZsb3dCb3ggJiYgIWlzRWRpdGFibGUoKnRoaXMpKSBvcGVyYXRvciArKygpOwor
ICAgIGlmICghZmxvd0JveCB8fCAhY2IpIHsKKyAgICAgIGtkRGVidWcoNjAwMCkgPDwgIkVkaXRh
YmxlTGluZUl0ZXJhdG9yOiBmaW5kRmxvd0JveCBmYWlsZWQiIDw8IGVuZGw7CisgICAgICBjYiA9
IDA7CisgICAgfS8qZW5kIGlmKi8KKyAgfQorCisgIC8qKiBzZWVrIG5leHQgbGluZQorICAgKgor
ICAgKiBHdWFyYW50ZWVkIHRvIGNyYXNoIGlmIGJleW9uZCBiZWdpbm5pbmcvZW5kIG9mIGRvY3Vt
ZW50LgorICAgKi8KKyAgRWRpdGFibGVMaW5lSXRlcmF0b3IgJm9wZXJhdG9yICsrKCkgeworICAg
IC8vIEZJWE1FOiBNRUdBLUZMQVchIG5laXRoZXIgZWRpdGFibGUgZW1wdHkgYmxvY2sgZWxlbWVu
dHMgbm9yIGlubGluZXMgbm90CisgICAgLy8gcmVwcmVzZW50ZWQgYnkgYW4gaW5saW5lIGJveCBh
cmUgY29uc2lkZXJlZCBhbnkgbW9yZS4KKyAgICBkbyB7CisgICAgICBMaW5lSXRlcmF0b3I6Om9w
ZXJhdG9yICsrKCk7CisgICAgfSB3aGlsZSAoY2IgJiYgIWlzRWRpdGFibGUoKnRoaXMpKTsKKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKyAgLyoqIHNlZWsgbmV4dCBsaW5lLgorICAgKgorICAgKiBH
dWFyYW50ZWVkIHRvIGNyYXNoIGlmIGJleW9uZCBiZWdpbm5pbmcvZW5kIG9mIGRvY3VtZW50Lgor
ICAgKgorICAgKiBOb3RlOiBUaGUgcG9zdGZpeCBvcGVyYXRvciBpcyBzbG93LiBVc2UgdGhlIHBy
ZWZpeCBvcGVyYXRvciB3aGVuZXZlcgorICAgKiBwb3NzaWJsZS4KKyAgICovCisgIC8vRWRpdGFi
bGVMaW5lSXRlcmF0b3Igb3BlcmF0b3IgKysoaW50KTsKKworICAvKiogc2VlayBwcmV2aW91cyBs
aW5lLgorICAgKgorICAgKiBHdWFyYW50ZWVkIHRvIGNyYXNoIGlmIGJleW9uZCBiZWdpbm5pbmcv
ZW5kIG9mIGRvY3VtZW50LgorICAgKi8KKyAgRWRpdGFibGVMaW5lSXRlcmF0b3IgJm9wZXJhdG9y
IC0tKCkgeworICAgIC8vIEZJWE1FOiBNRUdBLUZMQVchIG5laXRoZXIgZWRpdGFibGUgZW1wdHkg
YmxvY2sgZWxlbWVudHMgbm9yIGlubGluZXMgbm90CisgICAgLy8gcmVwcmVzZW50ZWQgYnkgYW4g
aW5saW5lIGJveCBhcmUgY29uc2lkZXJlZCBhbnkgbW9yZS4KKyAgICBkbyB7CisgICAgICBMaW5l
SXRlcmF0b3I6Om9wZXJhdG9yIC0tKCk7CisgICAgfSB3aGlsZSAoY2IgJiYgIWlzRWRpdGFibGUo
KnRoaXMpKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgLyoqIHNlZWsgcHJldmlvdXMgbGlu
ZS4KKyAgICoKKyAgICogR3VhcmFudGVlZCB0byBjcmFzaCBpZiBiZXlvbmQgYmVnaW5uaW5nL2Vu
ZCBvZiBkb2N1bWVudC4KKyAgICoKKyAgICogTm90ZTogVGhlIHBvc3RmaXggb3BlcmF0b3IgaXMg
c2xvdy4gVXNlIHRoZSBwcmVmaXggb3BlcmF0b3Igd2hlbmV2ZXIKKyAgICogcG9zc2libGUuCisg
ICAqLworICAvL0VkaXRhYmxlTGluZUl0ZXJhdG9yIG9wZXJhdG9yIC0tKGludCk7CisKKyNpZiAw
CS8vIGltcGxlbWVudCB3aGVuIGl0J3MgbmVlZGVkCisgIC8qKiBkb2VzIHBvaW50ZXIgYXJpdGht
ZXRpYy4KKyAgICogQHBhcmFtIHN1bW1hbmQgYWRkIHRoZXNlIG1hbnkgbGluZXMKKyAgICovCisg
IEVkaXRhYmxlTGluZUl0ZXJhdG9yIG9wZXJhdG9yICsoaW50IHN1bW1hbmQpIGNvbnN0OworICAv
KiogZG9lcyBwb2ludGVyIGFyaXRobWV0aWMuCisgICAqIEBwYXJhbSBzdW1tYW5kIGFkZCB0aGVz
ZSBtYW55IGxpbmVzCisgICAqLworICBFZGl0YWJsZUxpbmVJdGVyYXRvciBvcGVyYXRvciAtKGlu
dCBzdW1tYW5kKSBjb25zdDsKKworICAvKiogZG9lcyBwb2ludGVyIGFyaXRobWV0aWMgYW5kIGFz
c2lnbm1lbnQuCisgICAqIEBwYXJhbSBzdW1tYW5kIGFkZCB0aGVzZSBtYW55IGxpbmVzCisgICAq
LworICBFZGl0YWJsZUxpbmVJdGVyYXRvciAmb3BlcmF0b3IgKz0oaW50IHN1bW1hbmQpOworICAv
KiogZG9lcyBwb2ludGVyIGFyaXRobWV0aWMgYW5kIGFzc2lnbm1lbnQuCisgICAqIEBwYXJhbSBz
dW1tYW5kIGFkZCB0aGVzZSBtYW55IGxpbmVzCisgICAqLworICBFZGl0YWJsZUxpbmVJdGVyYXRv
ciAmb3BlcmF0b3IgLT0oaW50IHN1bW1hbmQpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgLyoq
IGZpbmRzIG91dCBpZiB0aGUgY3VycmVudCBsaW5lIGlzIGVkaXRhYmxlLgorICAgKiBAcGFyYW0g
aXQgY2hlY2sgZmxvdyBib3ggaXRlcmF0b3IgcG9pbnRzIHRvCisgICAqIEByZXR1cm4gQHAgdHJ1
ZSBpZiBsaW5lIGlzIGVkaXRhYmxlCisgICAqLworICBib29sIGlzRWRpdGFibGUoTGluZUl0ZXJh
dG9yICZpdCkgeworICAgIGlmIChsaW5lcy0+bV9wYXJ0LT5pc0NhcmV0TW9kZSgpIHx8IGxpbmVz
LT5tX3BhcnQtPmlzRWRpdGFibGUoKSkgcmV0dXJuIHRydWU7CisKKyAgICAvLyBvbiBkdW1teSBs
aW5lcyBjaGVjayB0aGUgY29udGFpbmluZyBibG9jayBpdHNlbGYgZm9yIGVkaXRhYmlsaXR5Cisg
ICAgaWYgKCEoKml0KS0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICBrZERlYnVnKDYwMDApIDw8ICJj
YiAiIDw8IGNiLT5yZW5kZXJOYW1lKCkgPDwgIlsiIDw8IGNiIDw8ICJdKCIgPDwgKGNiLT5lbGVt
ZW50KCkgPyBjYi0+ZWxlbWVudCgpLT5ub2RlTmFtZSgpLnN0cmluZygpIDogUVN0cmluZzo6bnVs
bCkgPDwgIikgZWRpdGFibGU/ICIgPDwgKGNiLT5zdHlsZSgpLT51c2VySW5wdXQoKSA9PSBVSV9F
TkFCTEVEKSA8PCBlbmRsOworICAgICAgcmV0dXJuIGNiLT5zdHlsZSgpLT51c2VySW5wdXQoKSA9
PSBVSV9FTkFCTEVEOworICAgIH0vKmVuZCBpZiovCisKKyAgICBFZGl0YWJsZUlubGluZUJveEl0
ZXJhdG9yIGZiaXQgPSBpdDsKKyAgICByZXR1cm4gKmZiaXQ7CisgIH0KKworfTsKKworLy8gPT0g
Y2FyZXQtcmVsYXRlZCBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgbmVlZCB0aGUgYWJvdmUgZGVmaW5l
ZCBjbGFzc2VzCisKKy8qKiBnZW5lcmF0ZXMgYSB0cmFuc2llbnQgaW5saW5lIGZsb3cgYm94Lgor
ICoKKyAqIEVtcHR5IGJsb2NrcyBkb24ndCBoYXZlIGlubGluZSBmbG93IGJveGVzIGNvbnN0cnVj
dGVkLiBUaGlzIGZ1bmN0aW9uCisgKiBjb25zdHJ1Y3RzIGEgZHVtbXkgZmxvdyBib3ggd2hpY2gg
aXMgZW1wdHkgYW5kIGNvbnRhaW5zIHNvbWUgY29vcmRpbmF0ZQorICogaW5mb3JtYXRpb24gdG8g
YmUgYWJsZSB0byBkaXNwbGF5IHRoZSBjYXJldCBjb3JyZWN0bHkuCisgKgorICogQHBhcmFtIGFy
ZW5hIHJlbmRlciBhcmVuYSBpbiB3aGljaCB0byBjcmVhdGUgdGhlIGZsb3cgYm94CisgKiBAcGFy
YW0gY2IgY29udGFpbmluZyBibG9jayB3aGljaCB0byBjcmVhdGUgdGhlIGlubGluZSBmbG93IGJv
eCBmb3IuCisgKiBAcmV0dXJuIHRoZSBjb25zdHJ1Y3RlZCBpbmxpbmUgZmxvdyBib3guCisgKi8K
K3N0YXRpYyBJbmxpbmVGbG93Qm94ICpnZW5lcmF0ZUR1bW15Rmxvd0JveChSZW5kZXJBcmVuYSAq
YXJlbmEsIFJlbmRlckZsb3cgKmNiKSB7CisgIElubGluZUZsb3dCb3ggKmZsb3dCb3ggPSBuZXco
YXJlbmEpIElubGluZUZsb3dCb3goY2IpOworICBmbG93Qm94LT5zZXRYUG9zKDApOworICBmbG93
Qm94LT5zZXRZUG9zKDApOworICBmbG93Qm94LT5zZXRXaWR0aChjYi0+d2lkdGgoKSk7IC8vIGht
bSwgbm90IHJlYWxseSBuZWVkZWQKKyAgLy8gRklYTUU6IHRoaXMgZG9lcyBuZWl0aGVyIHRha2Ug
aW50byByZWdhcmQgOmZpcnN0LWxpbmUgbm9yIDpmaXJzdC1sZXR0ZXIKKyAgLy8gSG93ZXZlciwg
YXMgc29vbiBhcyBzb21lIGNvbnRlbnQgaXMgZW50ZXJlZCwgdGhlIGxpbmUgYm94ZXMgd2lsbCBi
ZQorICAvLyBjb25zdHJ1Y3RlZCBwcm9wZXJseSBhbmQgdGhpcyBrbHVkZ2UgaXMgbm90IGNhbGxl
ZCBhbnkgbW9yZS4gU28gb25seQorICAvLyB0aGUgY2FyZXQgc2l6ZSBvZiBhbiBlbXB0eSA6Zmly
c3QtbGluZSdkIGJsb2NrIGlzIHdyb25nLCBidXQgSSB0aGluayB3ZQorICAvLyBjYW4gbGl2ZSB3
aXRoIHRoYXQuCisgIGZsb3dCb3gtPnNldEhlaWdodChjYi0+c3R5bGUoKS0+Zm9udE1ldHJpY3Mo
KS5oZWlnaHQoKSk7CisgIHJldHVybiBmbG93Qm94OworfQorCisvKiogZGV0ZXJtaW5lcyB0aGUg
aW5saW5lIGZsb3cgYm94IHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIG5vZGUuCisgKgorICogSWYg
dGhlIG5vZGUgZG9lcyBub3QgbWFwIHRvIGFuIGlubGluZSBmbG93IGJveCwgdGhlIGZ1bmN0aW9u
IHdpbGwgc25hcCB0bworICogdGhlIG5leHQgaW5saW5lIGJveCBmb2xsb3dpbmcgaXQuCisgKgor
ICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZWdpbiB3aXRoCisgKiBAcGFyYW0gb2Zmc2V0IHplcm8t
YmFzZWQgb2Zmc2V0IHdpdGhpbiBub2RlLgorICogQHBhcmFtIGFyZW5hIHNvbWV0aW1lcyB0aGUg
ZnVuY3Rpb24gbXVzdCBjcmVhdGUgYSB0ZW1wb3JhcnkgaW5saW5lIGZsb3cgYm94CisgKgl0aGVy
ZWZvcmUgaXQgbmVlZHMgYSByZW5kZXIgYXJlbmEuCisgKiBAcGFyYW0gY2IgcmV0dXJucyB0aGUg
Y29udGFpbmluZyBibG9jaworICogQHJldHVybiB0aGUgZm91bmQgaW5saW5lRmxvd0JveCBvciAw
IGlmIGVpdGhlciB0aGUgbm9kZSBpcyAwIG9yCisgKgl0aGVyZSBpcyBubyBpbmxpbmUgZmxvdyBi
b3ggY29udGFpbmluZyB0aGlzIG5vZGUuIFRoZSBjb250YWluaW5nIGJsb2NrCisgKgl3aWxsIHN0
aWxsIGJlIHNldC4gSWYgaXQgaXMgMCB0b28sIEBwIG5vZGUgd2FzIGludmFsaWQuCisgKi8KK3N0
YXRpYyBJbmxpbmVGbG93Qm94ICpmaW5kRmxvd0JveChET006Ok5vZGVJbXBsICpub2RlLCBsb25n
IG9mZnNldCwKKwkJUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJGbG93IComY2IpIHsKKyAgUmVu
ZGVyT2JqZWN0ICpyID0gZmluZFJlbmRlcmVyKG5vZGUpOworICBpZiAoIXIpIHsgY2IgPSAwOyBy
ZXR1cm4gMDsgfQorICBrZERlYnVnKDYwMDApIDw8ICI9PT09PT09PT09PT09PT09PT09IGZpbmRG
bG93Qm94IiA8PCBlbmRsOworICBrZERlYnVnKDYwMDApIDw8ICJub2RlICIgPDwgbm9kZSA8PCAi
IHIgIiA8PCByLT5yZW5kZXJOYW1lKCkgPDwgIlsiIDw8IHIgPDwgIl0iIDw8ICIgb2Zmc2V0OiAi
IDw8IG9mZnNldCA8PCBlbmRsOworCisgIC8vIElmIHdlIGhhdmUgYSB0b3RhbGx5IGVtcHR5IHJl
bmRlciBibG9jaywgd2Ugc2ltcGx5IGNvbnN0cnVjdCBhCisgIC8vIHRyYW5zaWVudCBpbmxpbmUg
ZmxvdyBib3gsIGFuZCBiZSBkb25lIHdpdGggaXQuCisgIC8vIFRoaXMgY2FzZSBoYXBwZW5zIG9u
bHkgd2hlbiB0aGUgcmVuZGVyIGJsb2NrIGlzIGEgbGVhZiBvYmplY3QgaXRzZWxmLgorICBpZiAo
ci0+aXNGbG93KCkgJiYgIXN0YXRpY19jYXN0PFJlbmRlckZsb3cgKj4ociktPmZpcnN0TGluZUJv
eCgpKSB7CisgICAgY2IgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93ICo+KHIpOworICAgIHJldHVy
biBnZW5lcmF0ZUR1bW15Rmxvd0JveChhcmVuYSwgY2IpOworICB9LyplbmQgaWYqLworCisgIC8v
IFRoZXJlIGFyZSB0d28gc3RyYXRlZ2llcyB0byBmaW5kIHRoZSBjb3JyZWN0IGxpbmUgYm94Lgor
ICAvLyAoQSkgRmlyc3QsIGlmIG5vZGUncyByZW5kZXJlciBpcyBhIFJlbmRlclRleHQsIHdlIG9u
bHkgdHJhdmVyc2UgaXRzIHRleHQKKyAgLy8gcnVucyBhbmQgcmV0dXJuIHRoZSByb290IGxpbmUg
Ym94IChzYXZlcyBtdWNoIHRpbWUgZm9yIGxvbmcgYmxvY2tzKS4KKyAgLy8gVGhpcyBzaG91bGQg
YmUgdGhlIGNhc2UgOTklIG9mIHRoZSB0aW1lLgorICAvLyAoQikgT3RoZXJ3aXNlLCB3ZSBpdGVy
YXRlIGxpbmVhcmx5IHRocm91Z2ggYWxsIGxpbmUgYm94ZXMgaW4gb3JkZXIgdG8gZmluZAorICAv
LyB0aGUgcmVuZGVyZXIuIChBIHJldmVyc2UgbWFwcGluZyB3b3VsZCBiZSBmYXZvdXJhYmxlLCBi
dXQgbmVlZHMgbWVtb3J5KQorICBpZiAoci0+aXNUZXh0KCkpIGRvIHsKKyAgICBSZW5kZXJUZXh0
ICp0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyKTsKKyAgICBpbnQgZHVtbXk7CisgICAg
SW5saW5lQm94ICpiID0gdC0+ZmluZFRleHRSdW4ob2Zmc2V0LCBkdW1teSk7CisgICAgLy8gQWN0
dWFsbHkgYiBzaG91bGQgbmV2ZXIgYmUgMCwgYnV0IHNvbWUgcmVuZGVyIHRleHRzIGRvbid0IGhh
dmUgcnVucywKKyAgICAvLyBzbyB3ZSBpbnNlcnQgdGhlIGxhc3QgcnVuIGFzIGFuIGVycm9yIGNv
cnJlY3Rpb24uCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gbGFzdCBydW4sIHdlIHJlc29ydCB0byAo
QikKKyAgICBpZiAoIWIpIHsKKyAgICAgIGlmICh0LT5tX2xpbmVzLmNvdW50KCkgPiAwKQorICAg
ICAgICBiID0gdC0+bV9saW5lc1t0LT5tX2xpbmVzLmNvdW50KCkgLSAxXTsKKyAgICAgIGVsc2UK
KyAgICAgICAgYnJlYWs7CisgICAgfS8qZW5kIGlmKi8KKyAgICBRX0FTU0VSVChiKTsKKyAgICB3
aGlsZSAoYi0+cGFyZW50KCkpIHsJLy8gc2VlayByb290IGxpbmUgYm94CisgICAgICBiID0gYi0+
cGFyZW50KCk7CisgICAgfS8qd2VuZCovCisgICAgLy8gRklYTUU6IHJlcGxhY2Ugd2l0aCBpc1Jv
b3RJbmxpbmVCb3ggYWZ0ZXIgZnVsbCBXZWJDb3JlIG1lcmdlLgorICAgIC8vUV9BU1NFUlQoYi0+
aXNSb290SW5saW5lQm94KCkpOworICAgIFFfQVNTRVJUKGItPmlzSW5saW5lRmxvd0JveCgpKTsK
KyAgICBjYiA9IHN0YXRpY19jYXN0PFJlbmRlckZsb3cgKj4oYi0+b2JqZWN0KCkpOworICAgIFFf
QVNTRVJUKGNiLT5pc0Zsb3coKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PElubGluZUZsb3dC
b3ggKj4oYik7CisgIH0gd2hpbGUoZmFsc2UpOy8qZW5kIGlmKi8KKworICBjYiA9IHN0YXRpY19j
YXN0PFJlbmRlckZsb3cgKj4oci0+Y29udGFpbmluZ0Jsb2NrKCkpOworICBRX0FTU0VSVChjYi0+
aXNGbG93KCkpOworCisgIElubGluZUZsb3dCb3ggKmZsb3dCb3ggPSBjYi0+Zmlyc3RMaW5lQm94
KCk7CisgIC8vIFRoaXMgY2FzZSBzdHJpa2VzIHdoZW4gdGhlcmUgYXJlIGNoaWxkcmVuIGJ1dCBu
b25lIG9mIGl0IGlzIHJlcHJlc2VudGVkCisgIC8vIGJ5IGFuIGlubGluZSBib3ggKGZvciBleGFt
cGxlLCBhbGwgb2YgdGhlbSBhcmUgZW1wdHk6CisgIC8vIDxkaXY+PGI+PC9iPjxpPjwvaT48L2Rp
dj4pCisgIGlmICghZmxvd0JveCkgeworICAgIGZsb3dCb3ggPSBnZW5lcmF0ZUR1bW15Rmxvd0Jv
eChhcmVuYSwgY2IpOworICAgIHJldHVybiBmbG93Qm94OworICB9LyplbmQgaWYqLworCisgIC8v
IFdlIGl0ZXJhdGUgdGhlIGlubGluZSBmbG93IGJveGVzIG9mIHRoZSBjb250YWluaW5nIGJsb2Nr
IHVudGlsCisgIC8vIHdlIGZpbmQgdGhlIGdpdmVuIG5vZGUuIFRoaXMgaGFzIG9uZSBtYWpvciBm
bGF3OiBpdCBpcyBsaW5lYXIsIGFuZCB0aGVyZWZvcmUKKyAgLy8gcGFpbmZ1bGx5IHNsb3cgZm9y
IHJlYWxseSBsYXJnZSBibG9ja3MuCisgIGZvciAoOyBmbG93Qm94OyBmbG93Qm94ID0gc3RhdGlj
X2Nhc3Q8SW5saW5lRmxvd0JveCAqPihmbG93Qm94LT5uZXh0TGluZUJveCgpKSkgeworICAgIGtk
RGVidWcoNjAwMCkgPDwgIltzY2FuIGxpbmVdIiA8PCBlbmRsOworCisgICAgLy8gSXRlcmF0ZSBj
aGlsZHJlbiwgYW5kIGxvb2sgZm9yIG5vZGUKKyAgICBJbmxpbmVCb3ggKmJveDsKKyAgICBJbmxp
bmVCb3hJdGVyYXRvciBpdChhcmVuYSwgZmxvd0JveCk7CisgICAgZm9yICg7IChib3ggPSAqaXQp
ICE9IDA7ICsraXQpIHsKKyAgICAgIFJlbmRlck9iamVjdCAqYnIgPSBib3gtPm9iamVjdCgpOwor
ICAgICAgaWYgKCFicikgY29udGludWU7CisKKyAgICAgIGtkRGVidWcoNjAwMCkgPDwgImJveC0+
b2JqICIgPDwgYnItPnJlbmRlck5hbWUoKSA8PCAiWyIgPDwgYnIgPDwgIl0iIDw8ICIgbWluT2Zm
c2V0OiAiIDw8IGJveC0+bWluT2Zmc2V0KCkgPDwgIiBtYXhPZmZzZXQ6ICIgPDwgYm94LT5tYXhP
ZmZzZXQoKSA8PCBlbmRsOworICAgICAgaWYgKGJyID09IHIgJiYgb2Zmc2V0ID49IGJveC0+bWlu
T2Zmc2V0KCkgJiYgb2Zmc2V0IDw9IGJveC0+bWF4T2Zmc2V0KCkpCisgICAgICAgIGJyZWFrOwkv
LyBJZiBEaWprc3RyYSBoYWRuJ3QgYnJhaW53YXNoZWQgbWUsIEknZCBoYXZlIHVzZWQgYSBnb3Rv
IGhlcmUKKyAgICB9LypuZXh0IGl0Ki8KKyAgICBpZiAoYm94KSBicmVhazsKKworICB9LypuZXh0
IGZsb3dCb3gqLworCisgIC8vIG5vIGlubGluZSBmbG93IGJveCBmb3VuZCwgYXBwcm94aW1hdGUg
dG8gbmVhcmVzdCBmb2xsb3dpbmcgbm9kZS4KKyAgLy8gRGFuZ2VyOiB0aGlzIGlzIE8obl4yKS4g
SXQncyBvbmx5IGNhbGxlZCB0byByZWNvdmVyIGZyb20KKyAgLy8gZXJyb3JzLCB0aGF0IG1lYW5z
LCB0aGVvcmV0aWNhbGx5LCBuZXZlci4gKFByYWN0aWNhbGx5LCBmYXIgdG9vIG9mdGVuIDotKCAp
CisgIGlmICghZmxvd0JveCkgZmxvd0JveCA9IGZpbmRGbG93Qm94KG5vZGUtPm5leHRMZWFmTm9k
ZSgpLCAwLCBhcmVuYSwgY2IpOworCisgIHJldHVybiBmbG93Qm94OworfQorCisvLyA9PSBjbGFz
cyBMaW5lYXJEb2N1bWVudCBpbXBsZW1lbnRhdGlvbgorCitMaW5lYXJEb2N1bWVudDo6TGluZWFy
RG9jdW1lbnQoS0hUTUxQYXJ0ICpwYXJ0LCBOb2RlSW1wbCAqbm9kZSwgbG9uZyBvZmZzZXQpCisJ
OiBhcmVuYSgwKSwgbm9kZShub2RlKSwgb2Zmc2V0KG9mZnNldCksIG1fcGFydChwYXJ0KQorewor
ICBpZiAobm9kZSA9PSAwKSByZXR1cm47CisgIHNhbml0aXplQ2FyZXRTdGF0ZShub2RlLCBvZmZz
ZXQpOworCisgIGFyZW5hID0gbmV3IFJlbmRlckFyZW5hKDUxMik7CisKKyAgaW5pdFByZUJlZ2lu
SXRlcmF0b3IoKTsKKyAgaW5pdEVuZEl0ZXJhdG9yKCk7CisgIC8vIEZJWE1FOiB0aGlzIG11c3Qg
bm90IGJlIGhlcmUgYnV0IGluIGEgZGVyaXZlZCBjbGFzcworICAvLyBGSVhNRTogbnVsbCBjaGVj
a3MgbmVjZXNzYXJ5PworICAvL21fcGFydCA9IG5vZGUtPmdldERvY3VtZW50KCktPnZpZXcoKS0+
cGFydCgpOworfQorCitMaW5lYXJEb2N1bWVudDo6fkxpbmVhckRvY3VtZW50KCkgeworICBkZWxl
dGUgYXJlbmE7Cit9CisKK2ludCBMaW5lYXJEb2N1bWVudDo6Y291bnQoKSBjb25zdCB7CisgIC8v
IEZJWE1FOiBub3QgaW1wbGVtZW50ZWQKKyAgcmV0dXJuIDE7Cit9CisKK0xpbmVhckRvY3VtZW50
OjpJdGVyYXRvciBMaW5lYXJEb2N1bWVudDo6Y3VycmVudCgpIHsKKyAgcmV0dXJuIExpbmVJdGVy
YXRvcih0aGlzLCBub2RlLCBvZmZzZXQpOworfQorCitMaW5lYXJEb2N1bWVudDo6SXRlcmF0b3Ig
TGluZWFyRG9jdW1lbnQ6OmJlZ2luKCkgeworICBEb2N1bWVudEltcGwgKmRvYyA9IG5vZGUgPyBu
b2RlLT5nZXREb2N1bWVudCgpIDogMDsKKyAgaWYgKCFkb2MpIHJldHVybiBlbmQoKTsKKworICBO
b2RlSW1wbCAqZmlyc3RMZWFmID0gZG9jLT5uZXh0TGVhZk5vZGUoKTsKKyAgaWYgKCFmaXJzdExl
YWYpIHJldHVybiBlbmQoKTsJCS8vIG11c3QgYmUgZW1wdHkgZG9jdW1lbnQgKGlzIHRoaXMgcG9z
c2libGU/KQorICByZXR1cm4gTGluZUl0ZXJhdG9yKHRoaXMsIGZpcnN0TGVhZiwgZmlyc3RMZWFm
LT5taW5PZmZzZXQoKSk7Cit9CisKK3ZvaWQgTGluZWFyRG9jdW1lbnQ6OmluaXRQcmVCZWdpbkl0
ZXJhdG9yKCkgeworICBfcHJlQmVnaW4gPSBMaW5lSXRlcmF0b3IodGhpcywgMCwgMCk7Cit9CisK
K3ZvaWQgTGluZWFyRG9jdW1lbnQ6OmluaXRFbmRJdGVyYXRvcigpIHsKKyAgX2VuZCA9IExpbmVJ
dGVyYXRvcih0aGlzLCAwLCAxKTsKK30KKworI2lmIDAgLy8gRklYTUU6IHRoaXMgbXVzdCBub3Qg
YmUgaGVyZSBidXQgaW4gYSBkZXJpdmVkIGNsYXNzCitib29sIExpbmVhckRvY3VtZW50Ojppc1N1
aXRhYmxlRm9yTmF2aWdhdGlvbihOb2RlSW1wbCAqbm9kZSwgTm9kZUltcGwgKmFsdCkgeworLy8g
RklYTUU6IG5vZGVzIHdpdGhvdXQgYSByZW5kZXJlciBoYXZlIHRvIGJlIGlnbm9yZWQgY29tcGxl
dGVseSBpZgorLy8gdGhleSBhcmUgaW5saW5lCisgICAgUmVuZGVyT2JqZWN0ICpyID0gbm9kZS0+
cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QgKmFsdHIgPSBhbHQgPyBhbHQtPnJlbmRlcmVy
KCkgOiAwOworICAgIHJldHVybiByICYmIChtX3BhcnQtPmlzRWRpdGFibGUoKSB8fCBtX3BhcnQt
PmlzQ2FyZXRNb2RlKCkKKyAgICAgICAgICAJfHwgci0+c3R5bGUoKS0+dXNlcklucHV0KCkgPT0g
VUlfRU5BQkxFRCkKKwkgICYmICEoYWx0ciAmJiBhbHRyLT5pc1RleHQoKSAmJiAhci0+aXNUZXh0
KCkpOworfQorI2VuZGlmCisKKy8vID09IGNsYXNzIExpbmVJdGVyYXRvciBpbXBsZW1lbnRhdGlv
bgorCitMaW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvcihMaW5lYXJEb2N1bWVudCAqbCwgRE9NOjpO
b2RlSW1wbCAqbm9kZSwgbG9uZyBvZmZzZXQpCisJCTogbGluZXMobCkgeworICBmbG93Qm94ID0g
ZmluZEZsb3dCb3gobm9kZSwgb2Zmc2V0LCBsaW5lcy0+YXJlbmEsIGNiKTsKKyAgaWYgKCFmbG93
Qm94KSB7CisgICAga2REZWJ1Zyg2MDAwKSA8PCAiTGluZUl0ZXJhdG9yOiBmaW5kRmxvd0JveCBm
YWlsZWQiIDw8IGVuZGw7CisgICAgY2IgPSAwOworICB9LyplbmQgaWYqLworfQorCitMaW5lSXRl
cmF0b3IgJkxpbmVJdGVyYXRvcjo6b3BlcmF0b3IgKysoKSB7CisgIGZsb3dCb3ggPSBzdGF0aWNf
Y2FzdDxJbmxpbmVGbG93Qm94ICo+KGZsb3dCb3gtPm5leHRMaW5lQm94KCkpOworCisgIC8vIGlm
IHRoZXJlIGFyZSBubyBtb3JlIGxpbmVzIGluIHRoaXMgYmxvY2ssIGJlZ2luIHdpdGggZmlyc3Qg
bGluZSBvZgorICAvLyBuZXh0IGJsb2NrCisgIGlmICghZmxvd0JveCkgZG8geworICAgIFJlbmRl
ck9iamVjdCAqciA9IGNiOworICAgIFJlbmRlck9iamVjdCAqbiA9IHItPmxhc3RDaGlsZCgpOwor
ICAgIHdoaWxlIChuKSByID0gbiwgbiA9IHItPmxhc3RDaGlsZCgpOworICAgIHIgPSBuZXh0TGVh
ZlJlbmRlck9iamVjdChyKTsKKyAgICBrZERlYnVnKDYwMDApIDw8ICIrKzogciAiIDw8IHIgPDwg
IlsiIDw8IChyP3ItPnJlbmRlck5hbWUoKTpRU3RyaW5nOjpudWxsKSA8PCAiXSIgPDwgZW5kbDsK
KyAgICBpZiAoIXIpIHsKKyAgICAgIGNiID0gMDsKKyAgICAgIGJyZWFrOworICAgIH0vKmVuZCBp
ZiovCisKKyAgICAvLyBJZiB3ZSBoaXQgYSBsZWFmIGJsb2NrICh3aGljaCBjYW4gaGFwcGVuIG9u
IGVtcHR5IGJsb2NrcyksIHVzZSB0aGlzCisgICAgLy8gYXMgaXRzIGNvbnRhaW5pbmcgYmxvY2sK
KyAgICBpZiAoci0+aXNGbG93KCkpCisgICAgICBjYiA9IHN0YXRpY19jYXN0PFJlbmRlckZsb3cg
Kj4ocik7CisgICAgZWxzZQorICAgICAgY2IgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93ICo+KHIt
PmNvbnRhaW5pbmdCbG9jaygpKTsKKyAgICBRX0FTU0VSVChjYi0+aXNGbG93KCkpOworICAgIGZs
b3dCb3ggPSBjYi0+Zmlyc3RMaW5lQm94KCk7CisgICAga2REZWJ1Zyg2MDAwKSA8PCAiKys6IGZs
b3dCb3ggIiA8PCBmbG93Qm94IDw8IGVuZGw7CisKKyAgICBpZiAoIWZsb3dCb3gpIGZsb3dCb3gg
PSBnZW5lcmF0ZUR1bW15Rmxvd0JveChsaW5lcy0+YXJlbmEsIGNiKTsKKyAgICBpZiAoIWNiLT5m
aXJzdExpbmVCb3goKSkga2REZWJ1Zyg2MDAwKSA8PCAiKys6IGR1bW15IGZsb3dCb3ggIiA8PCBm
bG93Qm94IDw8IGVuZGw7CisgIH0gd2hpbGUoZmFsc2UpOy8qZW5kIGlmKi8KKworICByZXR1cm4g
KnRoaXM7Cit9CisKK0xpbmVJdGVyYXRvciBMaW5lSXRlcmF0b3I6Om9wZXJhdG9yICsrKGludCkg
eworICBMaW5lSXRlcmF0b3IgaXQoKnRoaXMpOworICBvcGVyYXRvciArKygpOworICByZXR1cm4g
aXQ7Cit9CisKK0xpbmVJdGVyYXRvciAmTGluZUl0ZXJhdG9yOjpvcGVyYXRvciAtLSgpIHsKKyAg
Zmxvd0JveCA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3ggKj4oZmxvd0JveC0+cHJldkxpbmVC
b3goKSk7CisKKyAgLy8gaWYgdGhlcmUgYXJlIG5vIG1vcmUgbGluZXMgaW4gdGhpcyBibG9jaywg
YmVnaW4gd2l0aCBsYXN0IGxpbmUgb2YKKyAgLy8gcHJldmlvdXMgYmxvY2sKKyAgaWYgKCFmbG93
Qm94KSBkbyB7CisgICAgUmVuZGVyT2JqZWN0ICpyID0gY2I7CisgICAgUmVuZGVyT2JqZWN0ICpu
ID0gci0+Zmlyc3RDaGlsZCgpOworICAgIHdoaWxlIChuKSByID0gbiwgbiA9IHItPmZpcnN0Q2hp
bGQoKTsKKyAgICByID0gcHJldkxlYWZSZW5kZXJPYmplY3Qocik7CisgICAgaWYgKCFyKSB7Cisg
ICAgICBjYiA9IDA7CisgICAgICBicmVhazsKKyAgICB9LyplbmQgaWYqLworCisgICAgLy8gSWYg
d2UgaGl0IGEgbGVhZiBibG9jayAod2hpY2ggY2FuIGhhcHBlbiBvbiBlbXB0eSBibG9ja3MpLCB1
c2UgdGhpcworICAgIC8vIGFzIGl0cyBjb250YWluaW5nIGJsb2NrCisgICAgaWYgKHItPmlzRmxv
dygpKQorICAgICAgY2IgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93ICo+KHIpOworICAgIGVsc2UK
KyAgICAgIGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVyRmxvdyAqPihyLT5jb250YWluaW5nQmxvY2so
KSk7CisgICAgUV9BU1NFUlQoY2ItPmlzRmxvdygpKTsKKyAgICBmbG93Qm94ID0gY2ItPmxhc3RM
aW5lQm94KCk7CisKKyAgICBpZiAoIWZsb3dCb3gpIGZsb3dCb3ggPSBnZW5lcmF0ZUR1bW15Rmxv
d0JveChsaW5lcy0+YXJlbmEsIGNiKTsKKyAgfSB3aGlsZShmYWxzZSk7LyplbmQgaWYqLworCisg
IHJldHVybiAqdGhpczsKK30KKworTGluZUl0ZXJhdG9yIExpbmVJdGVyYXRvcjo6b3BlcmF0b3Ig
LS0oaW50KSB7CisgIExpbmVJdGVyYXRvciBpdCgqdGhpcyk7CisgIG9wZXJhdG9yIC0tKCk7Cisg
IHJldHVybiBpdDsKK30KKworI2lmIDAgLy8gbm90IGltcGxlbWVudGVkIGJlY2F1c2UgaXQncyBu
b3QgbmVlZGVkCitMaW5lSXRlcmF0b3IgTGluZUl0ZXJhdG9yOjpvcGVyYXRvciArKGludCAvKnN1
bW1hbmQqLykgY29uc3QgeworICAvLyBGSVhNRTogbm90IGltcGxlbWVudGVkCisgIHJldHVybiBM
aW5lSXRlcmF0b3IoKTsKK30KKworTGluZUl0ZXJhdG9yIExpbmVJdGVyYXRvcjo6b3BlcmF0b3Ig
LShpbnQgLypzdW1tYW5kKi8pIGNvbnN0IHsKKyAgLy8gRklYTUU6IG5vdCBpbXBsZW1lbnRlZAor
ICByZXR1cm4gTGluZUl0ZXJhdG9yKCk7Cit9CisjZW5kaWYKKworTGluZUl0ZXJhdG9yICZMaW5l
SXRlcmF0b3I6Om9wZXJhdG9yICs9KGludCBzdW1tYW5kKSB7CisgIGlmIChzdW1tYW5kID4gMCkK
KyAgICB3aGlsZSAoc3VtbWFuZC0tICYmICp0aGlzICE9IGxpbmVzLT5lbmQoKSkgKysqdGhpczsK
KyAgZWxzZSBpZiAoc3VtbWFuZCA8IDApCisgICAgb3BlcmF0b3IgLT0oLXN1bW1hbmQpOworICBy
ZXR1cm4gKnRoaXM7Cit9CisKK0xpbmVJdGVyYXRvciAmTGluZUl0ZXJhdG9yOjpvcGVyYXRvciAt
PShpbnQgc3VtbWFuZCkgeworICBpZiAoc3VtbWFuZCA+IDApCisgICAgd2hpbGUgKHN1bW1hbmQt
LSAmJiAqdGhpcyAhPSBsaW5lcy0+cHJlQmVnaW4oKSkgLS0qdGhpczsKKyAgZWxzZSBpZiAoc3Vt
bWFuZCA8IDApCisgICAgb3BlcmF0b3IgKz0oLXN1bW1hbmQpOworICByZXR1cm4gKnRoaXM7Cit9
CisKKy8vID09IGNsYXNzIEVkaXRhYmxlTGluZUl0ZXJhdG9yIGltcGxlbWVudGF0aW9uCisKK30v
KmVuZCBuYW1lc3BhY2UqLworCit2b2lkIEtIVE1MVmlldzo6aW5pdENhcmV0KCkgeworICBpZiAo
bV9wYXJ0LT54bWxEb2NJbXBsKCkpIHsKKyAgICBkLT5jYXJldFZpZXdDb250ZXh0KCk7CisgICAg
aWYgKG1fcGFydC0+ZC0+Y2FyZXROb2RlKCkuaXNOdWxsKCkpIHsKKyAgICAgIC8vIHNldCB0byBk
b2N1bWVudCwgcG9zaXRpb24gd2lsbCBiZSBzYW5pdGl6ZWQgYW55d2F5CisgICAgICBtX3BhcnQt
PmQtPmNhcmV0Tm9kZSgpID0gbV9wYXJ0LT5kb2N1bWVudCgpOworICAgICAgbV9wYXJ0LT5kLT5j
YXJldE9mZnNldCgpID0gMEw7CisgICAgfS8qZW5kIGlmKi8KKyAgICBtb3ZlQ2FyZXRUbyhtX3Bh
cnQtPmQtPmNhcmV0Tm9kZSgpLmhhbmRsZSgpLCBtX3BhcnQtPmQtPmNhcmV0T2Zmc2V0KCkpOwor
ICB9LyplbmQgaWYqLworfQorCitib29sIEtIVE1MVmlldzo6Y2FyZXRPdmVycmlkZXMoKSB7Cisg
ICAgYm9vbCBjbSA9IG1fcGFydC0+aXNDYXJldE1vZGUoKTsKKyAgICBib29sIGRtID0gbV9wYXJ0
LT5pc0VkaXRhYmxlKCk7CisgICAgcmV0dXJuIGNtICYmICFkbSA/IGZhbHNlCisgICAgCTogKGRt
IHx8IG1fcGFydC0+ZC0+Y2FyZXROb2RlKCkuaGFuZGxlKCktPmNvbnRlbnRFZGl0YWJsZSgpKQor
CSAgJiYgZC0+ZWRpdG9yQ29udGV4dCgpLT5vdmVycmlkZTsKK30KKworYm9vbCBLSFRNTFZpZXc6
OmlzU3VpdGFibGVGb3JOYXZpZ2F0aW9uKE5vZGVJbXBsICpub2RlLCBOb2RlSW1wbCAqYWx0KSB7
CisvLyBGSVhNRTogbm9kZXMgd2l0aG91dCBhIHJlbmRlcmVyIGhhdmUgdG8gYmUgaWdub3JlZCBj
b21wbGV0ZWx5IGlmCisvLyB0aGV5IGFyZSBpbmxpbmUKKyAgICBSZW5kZXJPYmplY3QgKnIgPSBu
b2RlLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCAqYWx0ciA9IGFsdCA/IGFsdC0+cmVu
ZGVyZXIoKSA6IDA7CisgICAgcmV0dXJuIHIgJiYgKG1fcGFydC0+aXNFZGl0YWJsZSgpIHx8IG1f
cGFydC0+aXNDYXJldE1vZGUoKQorICAgICAgICAgIAl8fCByLT5zdHlsZSgpLT51c2VySW5wdXQo
KSA9PSBVSV9FTkFCTEVEKQorCSAgJiYgIShhbHRyICYmIGFsdHItPmlzVGV4dCgpICYmICFyLT5p
c1RleHQoKSk7Cit9CisKK3ZvaWQgS0hUTUxWaWV3OjpyZWNhbGNBbmRTdG9yZUNhcmV0UG9zKCkg
eworICAgIGlmICghbV9wYXJ0IHx8IG1fcGFydC0+ZC0+Y2FyZXROb2RlKCkuaXNOdWxsKCkpIHJl
dHVybjsKKyAgICBkLT5jYXJldFZpZXdDb250ZXh0KCk7CisvLyAga2REZWJ1Zyg2MDAwKSA8PCAi
bW92ZUNhcmV0Qnk6IGNhcmV0Tm9kZT0iIDw8IG1fcGFydC0+ZC0+Y2FyZXROb2RlKCkuaGFuZGxl
KCkgPDwgZW5kbDsKKyAgICBtX3BhcnQtPmQtPmNhcmV0Tm9kZSgpLmhhbmRsZSgpLT5nZXRDYXJl
dChtX3BhcnQtPmQtPmNhcmV0T2Zmc2V0KCksCisgICAgICAgICAgICAgICAgY2FyZXRPdmVycmlk
ZXMoKSwKKyAgICAJCWQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eCwgZC0+bV9jYXJldFZpZXdDb250
ZXh0LT55LAorCQlkLT5tX2NhcmV0Vmlld0NvbnRleHQtPndpZHRoLAorCQlkLT5tX2NhcmV0Vmll
d0NvbnRleHQtPmhlaWdodCk7CisvLyAgICBrZERlYnVnKDYwMDApIDw8ICJmcmVxVGltZXJJZDog
Ijw8ZC0+bV9jYXJldFZpZXdDb250ZXh0LT5mcmVxVGltZXJJZDw8ZW5kbDsKKyAgICBrZERlYnVn
KDYwMDApIDw8ICJjYXJldDogb2ZzPSI8PG1fcGFydC0+ZC0+Y2FyZXRPZmZzZXQoKTw8IiAiCisg
ICAgCTw8IiB4PSI8PGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eDw8IiB5PSI8PGQtPm1fY2FyZXRW
aWV3Q29udGV4dC0+eQorCTw8IiBoPSI8PGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+aGVpZ2h0PDxl
bmRsOworfQorCit2b2lkIEtIVE1MVmlldzo6Y2FyZXRPbigpIHsKKyAgICBpZiAoZC0+bV9jYXJl
dFZpZXdDb250ZXh0KSB7CisgICAgICAgIGtpbGxUaW1lcihkLT5tX2NhcmV0Vmlld0NvbnRleHQt
PmZyZXFUaW1lcklkKTsKKyAgICAgICAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT5mcmVxVGltZXJJ
ZCA9IHN0YXJ0VGltZXIoNTAwKTsKKyAgICAgICAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT52aXNp
YmxlID0gdHJ1ZTsKKyAgICAgICAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT5kaXNwbGF5ZWQgPSB0
cnVlOworCXVwZGF0ZUNvbnRlbnRzKGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eCwgZC0+bV9jYXJl
dFZpZXdDb250ZXh0LT55LAorCSAgICAJCWQtPm1fY2FyZXRWaWV3Q29udGV4dC0+d2lkdGgsCisJ
CQlkLT5tX2NhcmV0Vmlld0NvbnRleHQtPmhlaWdodCk7CisvLyAgICAgICAga2REZWJ1Zyg2MDAw
KSA8PCAiY2FyZXQgb24iIDw8IGVuZGw7CisgICAgfS8qZW5kIGlmKi8KK30KKwordm9pZCBLSFRN
TFZpZXc6OmNhcmV0T2ZmKCkgeworICAgIGlmIChkLT5tX2NhcmV0Vmlld0NvbnRleHQpIHsKKyAg
ICAgICAga2lsbFRpbWVyKGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+ZnJlcVRpbWVySWQpOworCWQt
Pm1fY2FyZXRWaWV3Q29udGV4dC0+ZnJlcVRpbWVySWQgPSAtMTsKKyAgICAgICAgZC0+bV9jYXJl
dFZpZXdDb250ZXh0LT5kaXNwbGF5ZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGQtPm1fY2FyZXRW
aWV3Q29udGV4dC0+dmlzaWJsZSkgeworICAgICAgICAgICAgZC0+bV9jYXJldFZpZXdDb250ZXh0
LT52aXNpYmxlID0gZmFsc2U7CisJICAgIHVwZGF0ZUNvbnRlbnRzKGQtPm1fY2FyZXRWaWV3Q29u
dGV4dC0+eCwgZC0+bV9jYXJldFZpZXdDb250ZXh0LT55LAorCSAgICAJCWQtPm1fY2FyZXRWaWV3
Q29udGV4dC0+d2lkdGgsCisJICAgIAkJZC0+bV9jYXJldFZpZXdDb250ZXh0LT5oZWlnaHQpOwor
CX0vKmVuZCBpZiovCisvLyAgICAgICAga2REZWJ1Zyg2MDAwKSA8PCAiY2FyZXQgb2ZmIiA8PCBl
bmRsOworICAgIH0vKmVuZCBpZiovCit9CisKK3ZvaWQgS0hUTUxWaWV3OjpzaG93Q2FyZXQoKSB7
CisgICAgaWYgKGQtPm1fY2FyZXRWaWV3Q29udGV4dCkgeworICAgICAgICBkLT5tX2NhcmV0Vmll
d0NvbnRleHQtPmRpc3BsYXllZCA9IHRydWU7CisgICAgICAgIGlmIChkLT5tX2NhcmV0Vmlld0Nv
bnRleHQtPnZpc2libGUpIHsKKwkgICAgdXBkYXRlQ29udGVudHMoZC0+bV9jYXJldFZpZXdDb250
ZXh0LT54LCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnksCisJICAgIAkJZC0+bV9jYXJldFZpZXdD
b250ZXh0LT53aWR0aCwKKwkJCWQtPm1fY2FyZXRWaWV3Q29udGV4dC0+aGVpZ2h0KTsKKyAgIAl9
LyplbmQgaWYqLworLy8gICAgICAgIGtkRGVidWcoNjAwMCkgPDwgImNhcmV0IHNob3duIiA8PCBl
bmRsOworICAgIH0vKmVuZCBpZiovCit9CisKK3ZvaWQgS0hUTUxWaWV3OjpoaWRlQ2FyZXQoKSB7
CisgICAgaWYgKGQtPm1fY2FyZXRWaWV3Q29udGV4dCkgeworICAgICAgICBpZiAoZC0+bV9jYXJl
dFZpZXdDb250ZXh0LT52aXNpYmxlKSB7CisvLyAgICAgICAgICAgIGtkRGVidWcoNjAwMCkgPDwg
InJlZHJhdyBjYXJldCBoaWRkZW4iIDw8IGVuZGw7CisJICAgIGQtPm1fY2FyZXRWaWV3Q29udGV4
dC0+dmlzaWJsZSA9IGZhbHNlOworCSAgICAvLyBmb3JjZSByZXBhaW50LCBvdGhlcndpc2UgdGhl
IGV2ZW50IHdvbid0IGJlIGhhbmRsZWQKKwkgICAgLy8gYmVmb3JlIHRoZSBmb2N1cyBsZWF2ZXMg
dGhlIHdpbmRvdworCSAgICByZXBhaW50Q29udGVudHMoZC0+bV9jYXJldFZpZXdDb250ZXh0LT54
LCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnksCisJICAgIAkJZC0+bV9jYXJldFZpZXdDb250ZXh0
LT53aWR0aCwKKwkgICAgCQlkLT5tX2NhcmV0Vmlld0NvbnRleHQtPmhlaWdodCk7CisJICAgIGQt
Pm1fY2FyZXRWaWV3Q29udGV4dC0+dmlzaWJsZSA9IHRydWU7CisJfS8qZW5kIGlmKi8KKyAgICAg
ICAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT5kaXNwbGF5ZWQgPSBmYWxzZTsKKy8vICAgICAgICBr
ZERlYnVnKDYwMDApIDw8ICJjYXJldCBoaWRkZW4iIDw8IGVuZGw7CisgICAgfS8qZW5kIGlmKi8K
K30KKwordm9pZCBLSFRNTFZpZXc6OmNhcmV0S2V5UHJlc3NFdmVudChRS2V5RXZlbnQgKl9rZSkg
eworICBOb2RlSW1wbCAqb2xkQ2FyZXROb2RlID0gbV9wYXJ0LT5kLT5jYXJldE5vZGUoKS5oYW5k
bGUoKTsKKyAgbG9uZyBvbGRPZmZzZXQgPSBtX3BhcnQtPmQtPmNhcmV0T2Zmc2V0KCk7CisKKy8v
IEZJWE1FOiB0aGlzIGlzIHRoYXQgd2lkZWx5IGluZGVudGVkIGJlY2F1c2UgSSB3aWxsIHdyaXRl
IGlmcyBhcm91bmQgaXQuCisgICAgICBzd2l0Y2goX2tlLT5rZXkoKSkgeworICAgICAgICBjYXNl
IEtleV9TcGFjZToKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEtleV9Eb3duOgor
CSAgbW92ZUNhcmV0TmV4dExpbmUoMSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBLZXlfVXA6CisJICBtb3ZlQ2FyZXRQcmV2TGluZSgxKTsKKyAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEtleV9MZWZ0OgorCSAgbW92ZUNhcmV0QnkoZmFsc2UsIENhcmV0QnlDaGFy
YWN0ZXIsIDEpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgS2V5X1JpZ2h0Ogor
CSAgbW92ZUNhcmV0QnkodHJ1ZSwgQ2FyZXRCeUNoYXJhY3RlciwgMSk7CisgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBLZXlfSG9tZToKKwkgIG1vdmVDYXJldFRvTGluZUJlZ2luKCk7
CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBLZXlfRW5kOgorCSAgbW92ZUNhcmV0
VG9MaW5lRW5kKCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgIH0vKmVuZCBzd2l0Y2gqLwor
CisgIGlmIChtX3BhcnQtPmQtPmNhcmV0Tm9kZSgpLmhhbmRsZSgpICE9IG9sZENhcmV0Tm9kZQor
ICAgICB8fCBtX3BhcnQtPmQtPmNhcmV0T2Zmc2V0KCkgIT0gb2xkT2Zmc2V0KSB7CisgICAgbV9w
YXJ0LT5lbWl0Q2FyZXRQb3NpdGlvbkNoYW5nZWQobV9wYXJ0LT5kLT5jYXJldE5vZGUoKSwgbV9w
YXJ0LT5kLT5jYXJldE9mZnNldCgpKTsKKyAgfS8qZW5kIGlmKi8KKworICBfa2UtPmFjY2VwdCgp
OworfQorCit2b2lkIEtIVE1MVmlldzo6bW92ZUNhcmV0VG8oTm9kZUltcGwgKm5vZGUsIGxvbmcg
b2Zmc2V0KSB7CisgIHNhbml0aXplQ2FyZXRTdGF0ZShub2RlLCBvZmZzZXQpOworCisgIC8vIGtp
bGwgd2hhdGV2ZXIgc2VsZWN0aW9uIG1heSBleGlzdAorICAvLyBGSVhNRTogdGhpcyBzaG91bGRu
J3QgYmUgaGVyZS4KKyAgbV9wYXJ0LT5kLT5tX3NlbGVjdGlvblN0YXJ0ID0gbV9wYXJ0LT5kLT5t
X3NlbGVjdGlvbkVuZCA9IG5vZGU7CisgIG1fcGFydC0+ZC0+bV9zdGFydE9mZnNldCA9IG1fcGFy
dC0+ZC0+bV9lbmRPZmZzZXQgPSBvZmZzZXQ7CisgIG1fcGFydC0+ZC0+bV9leHRlbmRBdEVuZCA9
IHRydWU7CisKKyAgaWYgKGQtPm1fY2FyZXRWaWV3Q29udGV4dCAhPSAwKSB7CisgICAgcmVjYWxj
QW5kU3RvcmVDYXJldFBvcygpOworCisgICAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT5vcmlnWCA9
IGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eDsKKworICAgIGlmIChtX3BhcnQtPmlzQ2FyZXRNb2Rl
KCkgfHwgbV9wYXJ0LT5pc0VkaXRhYmxlKCkKKyAgICAgICB8fCBub2RlLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT51c2VySW5wdXQoKSA9PSBVSV9FTkFCTEVEKQorICAgICAgY2FyZXRPbigpOworICB9
LyplbmQgaWYqLworfQorCit2b2lkIEtIVE1MVmlldzo6bW92ZUNhcmV0QnlMaW5lKGJvb2wgbmV4
dCwgaW50IGNvdW50KSB7CisgIC8vIEZJWE1FOiB3aGF0IGlmIHRoZSBub2RlIGlzIHJlbW92ZWQg
d2hpbHN0IHdlIGFjY2VzcyBpdD8KKyAgLy8gQ3VycmVudCBzb2x1dGlvbjogYmFpbCBvdXQKKyAg
Tm9kZSAmY2FyZXROb2RlUmVmID0gbV9wYXJ0LT5kLT5jYXJldE5vZGUoKTsKKyAgaWYgKGNhcmV0
Tm9kZVJlZi5pc051bGwoKSkgcmV0dXJuOworCisgIE5vZGVJbXBsICpjYXJldE5vZGUgPSBjYXJl
dE5vZGVSZWYuaGFuZGxlKCk7CisvLyAga2REZWJ1Zyg2MDAwKSA8PCAiOiBjYXJldE5vZGU9IiA8
PCBjYXJldE5vZGUgPDwgZW5kbDsKKyAgbG9uZyBvZmZzZXQgPSBtX3BhcnQtPmQtPmNhcmV0T2Zm
c2V0KCk7CisKKyAgTGluZWFyRG9jdW1lbnQgbGQobV9wYXJ0LCBjYXJldE5vZGUsIG9mZnNldCk7
CisKKyAgRWRpdGFibGVMaW5lSXRlcmF0b3IgaXQgPSBsZC5jdXJyZW50KCk7CisgIElubGluZUZs
b3dCb3ggKmZib3ggPSAwOworCisgIC8vIG1vdmUgY291bnQgbGluZXMgdmVydGljYWxseQorICB3
aGlsZSAoY291bnQgPiAwICYmIGl0ICE9IGxkLmVuZCgpICYmIGl0ICE9IGxkLnByZUJlZ2luKCkp
IHsKKyAgICBjb3VudC0tOworICAgIGlmIChuZXh0KSArK2l0OyBlbHNlIC0taXQ7CisgIH0vKndl
bmQqLworCisgIC8vIE5vdGhpbmc/IFRoZW4gbGVhdmUgZXZlcnl0aGluZyBhcyBpcy4KKyAgaWYg
KGl0ID09IGxkLmVuZCgpIHx8IGl0ID09IGxkLnByZUJlZ2luKCkpIHJldHVybjsKKworICBmYm94
ID0gKml0OworCisgIC8vIEZpbmQgY29udGFpbmluZyBibG9jaworICBSZW5kZXJPYmplY3QgKmNi
ID0gZmJveC0+b2JqZWN0KCk7CisgIGludCBhYnN4LCBhYnN5OworCisgIGlmIChjYikgY2ItPmFi
c29sdXRlUG9zaXRpb24oYWJzeCxhYnN5KTsKKyAgZWxzZSBhYnN4ID0gYWJzeSA9IDA7CisKKyAg
Ly8gT3RoZXJ3aXNlIGZpbmQgb3V0IGluIHdoaWNoIGlubGluZSBib3ggdGhlIGNhcmV0IGlzIHRv
IGJlIHBsYWNlZC4KKworICAvLyB0aGlzIGhvcml6b250YWwgcG9zaXRpb24gaXMgdG8gYmUgYXBw
cm94aW1hdGVkCisgIGludCB4ID0gZC0+bV9jYXJldFZpZXdDb250ZXh0LT5vcmlnWCAtIGFic3g7
CisgIElubGluZUJveCAqY2FyZXRCb3ggPSAwOyAvLyBJbmxpbmUgYm94IGNvbnRhaW5pbmcgdGhl
IGNhcmV0CisvLyAgTm9kZUltcGwgKmxhc3Rub2RlID0gMDsgIC8vIG5vZGUgb2YgcHJldmlvdXNs
eSBjaGVja2VkIHJlbmRlciBvYmplY3QuCisgIGludCB4UG9zOwkJICAgLy8geC1jb29yZGluYXRl
IG9mIGN1cnJlbnQgaW5saW5lIGJveAorICBpbnQgb2xkWFBvcyA9IC0xOwkgICAvLyB4LWNvb3Jk
aW5hdGUgb2YgbGFzdCBpbmxpbmUgYm94CisgIEVkaXRhYmxlSW5saW5lQm94SXRlcmF0b3IgZmJp
dCA9IGl0OworICBrZERlYnVnKDYwMDApIDw8ICIqZmJpdCA9ICIgPDwgKmZiaXQgPDwgZW5kbDsK
KyAgLy8gRWl0aGVyIGl0ZXJhdGUgdGhyb3VnaCBhbGwgY2hpbGRyZW4gb3IgdGFrZSB0aGUgZmxv
dyBib3ggaXRzZWxmIGFzIGEKKyAgLy8gY2hpbGQgaWYgaXQgaGFzIG5vIGNoaWxkcmVuCisgIGZv
ciAoSW5saW5lQm94ICpiOyAqZmJpdCAhPSAwIHx8ICFmYm94LT5maXJzdENoaWxkKCk7ICsrZmJp
dCkgeworICAgIGIgPSBmYm94LT5maXJzdENoaWxkKCkgPyAqZmJpdCA6IGZib3g7CisKKy8vICAg
IFJlbmRlck9iamVjdCAqciA9IGItPm9iamVjdCgpOworCWlmIChiLT5pc0lubGluZUZsb3dCb3go
KSkga2REZWJ1Zyg2MDAwKSA8PCAiYiBpcyBpbmxpbmUgZmxvdyBib3giIDw8IGVuZGw7CisvLwlr
ZERlYnVnKDYwMDApIDw8ICJhcHByb3hpbWF0ZSByIiA8PCByIDw8ICI6ICIgPDwgKHIgPyByLT5y
ZW5kZXJOYW1lKCkgOiBRU3RyaW5nOjpudWxsKSA8PCAociAmJiByLT5pc1RleHQoKSA/ICIgY29u
dGFpbnMgXCIiICsgUVN0cmluZygoKFJlbmRlclRleHQgKilyKS0+c3RyLT5zLCAoKFJlbmRlclRl
eHQgKilyKS0+c3RyLT5sKSArICJcIiIgOiBRU3RyaW5nOjpudWxsKSA8PCBlbmRsOworLy8gICAg
Tm9kZUltcGwgKm5vZGUgPSByLT5lbGVtZW50KCk7CisgICAgeFBvcyA9IGItPnhQb3MoKTsKKwor
ICAgIC8vIHRoZSBjYXJldCBpcyBiZWZvcmUgdGhpcyBib3gKKyAgICBpZiAoeCA8IHhQb3MpIHsK
KyAgICAgIC8vIHNuYXAgdG8gbmVhcmVzdCBib3gKKyAgICAgIGlmIChvbGRYUG9zIDwgMCB8fCB4
IC0gKG9sZFhQb3MgKyBjYXJldEJveC0+d2lkdGgoKSkgPiB4UG9zIC0geCkgeworCWNhcmV0Qm94
ID0gYjsJLy8gY3VycmVudCBib3ggaXMgbmVhcmVyCisvLyAgICAgICAgbGFzdG5vZGUgPSBub2Rl
OworICAgICAgfS8qZW5kIGlmKi8KKyAgICAgIGJyZWFrOwkJLy8gT3RoZXJ3aXNlLCBwcmVjZWRp
bmcgYm94IGlzIGltcGxpY2l0bHkgdXNlZAorICAgIH0KKworICAgIGNhcmV0Qm94ID0gYjsKKy8v
ICAgIGxhc3Rub2RlID0gbm9kZTsKKworICAgIC8vIHRoZSBjYXJldCBpcyB3aXRoaW4gdGhpcyBi
b3gKKyAgICBpZiAoeCA+PSB4UG9zICYmIHggPCB4UG9zICsgY2FyZXRCb3gtPndpZHRoKCkpCisg
ICAgICBicmVhazsKKyAgICBvbGRYUG9zID0geFBvczsKKworICAgIC8vIHRoZSBjYXJldCBjYW4g
b25seSBiZSBhZnRlciB0aGUgbGFzdCBib3ggd2hpY2ggaXMgYXV0b21hdGljYWxseQorICAgIC8v
IGNvbnRhaW5lZCBpbiBjYXJldEJveCB3aGVuIHdlIGZhbGwgb3V0IG9mIHRoZSBsb29wLgorCisg
ICAgaWYgKGIgPT0gZmJveCkgYnJlYWs7CisgIH0vKm5leHQgZmJpdCovCisKKyAgcGxhY2VDYXJl
dE9uTGluZShjYXJldEJveCwgeCwgYWJzeCwgYWJzeSk7Cit9CisKK3ZvaWQgS0hUTUxWaWV3Ojpw
bGFjZUNhcmV0T25MaW5lKElubGluZUJveCAqY2FyZXRCb3gsIGludCB4LCBpbnQgYWJzeCwgaW50
IGFic3kpIHsKKyAgLy8gcGFyYW5vaWEgc2FuaXR5IGNoZWNrCisgIGlmICghY2FyZXRCb3gpIHJl
dHVybjsKKworICBOb2RlSW1wbCAqY2FyZXROb2RlID0gY2FyZXRCb3gtPm9iamVjdCgpLT5lbGVt
ZW50KCk7CisKKyAga2REZWJ1Zyg2MDAwKSA8PCAiZ290IHZhbGlkIGNhcmV0Qm94ICIgPDwgY2Fy
ZXRCb3ggPDwgZW5kbDsKKyAga2REZWJ1Zyg2MDAwKSA8PCAieFBvczogIiA8PCBjYXJldEJveC0+
eFBvcygpIDw8ICIgeVBvczogIiA8PCBjYXJldEJveC0+eVBvcygpCisgIAkJPDwgIiB3aWR0aDog
IiA8PCBjYXJldEJveC0+d2lkdGgoKSA8PCAiIGhlaWdodDogIiA8PCBjYXJldEJveC0+aGVpZ2h0
KCkgPDwgZW5kbDsKKyAgaWYgKGNhcmV0Qm94LT5pc1RleHRSdW4oKSkgeyBrZERlYnVnKDYwMDAp
IDw8ICJjb250YWlucyBcIiIgPDwgUVN0cmluZygoKFJlbmRlclRleHQgKikoKFRleHRSdW4gKilj
YXJldEJveCktPm9iamVjdCgpKS0+c3RyLT5zICsgKChUZXh0UnVuICopY2FyZXRCb3gpLT5tX3N0
YXJ0LCAoKFRleHRSdW4gKiljYXJldEJveCktPm1fbGVuKSA8PCAiXCIiIDw8IGVuZGw7fQorICAv
LyBpbnF1aXJlIGhlaWdodCBvZiBjYXJldAorICBpbnQgY2FyZXRIZWlnaHQgPSBjYXJldEJveC0+
aGVpZ2h0KCk7CisgIGJvb2wgaXNUZXh0ID0gY2FyZXRCb3gtPmlzVGV4dFJ1bigpOworICBpZiAo
aXNUZXh0KSB7CisgICAgLy8gdGV4dCBydW5zIG5lZWQgZXh0cmF3dXJzdAorICAgIFJlbmRlclRl
eHQgKnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KGNhcmV0Qm94LT5vYmplY3QoKSk7Cisg
ICAgY2FyZXRIZWlnaHQgPSB0LT5tZXRyaWNzKGNhcmV0Qm94LT5tX2ZpcnN0TGluZSkuaGVpZ2h0
KCk7CisgIH0vKmVuZCBpZiovCisKKyAgY2FyZXRPZmYoKTsKKworICAvLyBzZXQgbmV3IGNhcmV0
IG5vZGUKKyAgbV9wYXJ0LT5kLT5jYXJldE5vZGUoKSA9IGNhcmV0Tm9kZTsKKyAgbG9uZyAmb2Zm
c2V0ID0gbV9wYXJ0LT5kLT5jYXJldE9mZnNldCgpOworCisgIC8vIHNldCBhbGwgdmFyaWFibGVz
IG5vdCBuZWVkaW5nIHNwZWNpYWwgdHJlYXRtZW50CisgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+
eSA9IGNhcmV0Qm94LT55UG9zKCk7CisgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+aGVpZ2h0ID0g
Y2FyZXRIZWlnaHQ7CisgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+d2lkdGggPSAxOyAvLyBGSVhN
RTogcmVnYXJkIG92ZXJyaWRlCisKKyAgaW50IHhQb3MgPSBjYXJldEJveC0+eFBvcygpOworICBp
bnQgY2FyZXRCb3hXaWR0aCA9IGNhcmV0Qm94LT53aWR0aCgpOworCisgIC8vIGJlZm9yZSBvciBh
dCBiZWdpbm5pbmcgb2YgaW5saW5lIGJveCAtPiBwbGFjZSBhdCBiZWdpbm5pbmcKKyAgaWYgKHgg
PD0geFBvcykgeworICAgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eCA9IHhQb3M7CisgICAgb2Zm
c2V0ID0gY2FyZXRCb3gtPm1pbk9mZnNldCgpOworICAvLyBzb21ld2hlcmUgd2l0aGluIHRoaXMg
YmxvY2sKKyAgfSBlbHNlIGlmICh4ID4geFBvcyAmJiB4IDw9IHhQb3MgKyBjYXJldEJveFdpZHRo
KSB7CisgICAgaWYgKGlzVGV4dCkgeyAvLyBmaW5kIG91dCB3aGVyZSBleGFjdGx5CisgICAgICBv
ZmZzZXQgPSBzdGF0aWNfY2FzdDxUZXh0UnVuICo+KGNhcmV0Qm94KS0+b2Zmc2V0Rm9yUG9pbnQo
eCwKKyAgICAgIAkJZC0+bV9jYXJldFZpZXdDb250ZXh0LT54KTsKKyAgICAgIGtkRGVidWcoNjAw
MCkgPDwgImRldmlhdGlvbiBmcm9tIG9yaWdYICIgPDwgZC0+bV9jYXJldFZpZXdDb250ZXh0LT54
IC0geCA8PCBlbmRsOworICAgIH0gZWxzZSB7CS8vIHNuYXAgdG8gbmVhcmVzdCBlbmQKKyAgICAg
IGlmICh4UG9zICsgY2FyZXRCb3hXaWR0aCAtIHggPCB4IC0geFBvcykgeworICAgICAgICBkLT5t
X2NhcmV0Vmlld0NvbnRleHQtPnggPSB4UG9zICsgY2FyZXRCb3hXaWR0aDsKKyAgICAgICAgb2Zm
c2V0ID0gY2FyZXROb2RlID8gY2FyZXROb2RlLT5tYXhPZmZzZXQoKSA6IDE7CisgICAgICB9IGVs
c2UgeworICAgICAgICBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnggPSB4UG9zOworICAgICAgICBv
ZmZzZXQgPSBjYXJldE5vZGUgPyBjYXJldE5vZGUtPm1pbk9mZnNldCgpIDogMDsKKyAgICAgIH0v
KmVuZCBpZiovCisgICAgfS8qZW5kIGlmKi8KKyAgfSBlbHNlIHsJCS8vIGFmdGVyIHRoZSBpbmxp
bmUgYm94IC0+IHBsYWNlIGF0IGVuZAorICAgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eCA9IHhQ
b3MgKyBjYXJldEJveFdpZHRoOworICAgIG9mZnNldCA9IGNhcmV0Qm94LT5tYXhPZmZzZXQoKTsK
KyAgfS8qZW5kIGlmKi8KKyAgICAgIGtkRGVidWcoNjAwMCkgPDwgIm5ldyBvZmZzZXQ6ICIgPDwg
b2Zmc2V0IDw8IGVuZGw7CisKKyAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT54ICs9IGFic3g7Cisg
IGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eSArPSBhYnN5OworCisgIGVuc3VyZVZpc2libGUoZC0+
bV9jYXJldFZpZXdDb250ZXh0LT54LCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnksCisgIAlkLT5t
X2NhcmV0Vmlld0NvbnRleHQtPndpZHRoLCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPmhlaWdodCk7
CisgIGQtPnNjcm9sbEJhck1vdmVkID0gZmFsc2U7CisKKyAgY2FyZXRPbigpOworfQorCit2b2lk
IEtIVE1MVmlldzo6bW92ZUNhcmV0VG9MaW5lQm91bmRhcnkoYm9vbCBlbmQpIHsKKyAgLy8gRklY
TUU6IHdoYXQgaWYgdGhlIG5vZGUgaXMgcmVtb3ZlZCB3aGlsc3Qgd2UgYWNjZXNzIGl0PworICAv
LyBDdXJyZW50IHNvbHV0aW9uOiBiYWlsIG91dAorICBOb2RlICZjYXJldE5vZGVSZWYgPSBtX3Bh
cnQtPmQtPmNhcmV0Tm9kZSgpOworICBpZiAoY2FyZXROb2RlUmVmLmlzTnVsbCgpKSByZXR1cm47
CisKKyAgTm9kZUltcGwgKmNhcmV0Tm9kZSA9IGNhcmV0Tm9kZVJlZi5oYW5kbGUoKTsKKy8vICBr
ZERlYnVnKDYwMDApIDw8ICI6IGNhcmV0Tm9kZT0iIDw8IGNhcmV0Tm9kZSA8PCBlbmRsOworICBs
b25nIG9mZnNldCA9IG1fcGFydC0+ZC0+Y2FyZXRPZmZzZXQoKTsKKworICBMaW5lYXJEb2N1bWVu
dCBsZChtX3BhcnQsIGNhcmV0Tm9kZSwgb2Zmc2V0KTsKKworICBFZGl0YWJsZUxpbmVJdGVyYXRv
ciBpdCA9IGxkLmN1cnJlbnQoKTsKKyAgaWYgKGl0ID09IGxkLmVuZCgpKSByZXR1cm47CS8vIHNo
b3VsZCBub3QgaGFwcGVuLCBidXQgd2hvIGtub3dzCisKKyAgRWRpdGFibGVJbmxpbmVCb3hJdGVy
YXRvciBmYml0ID0gaXQ7CisgIElubGluZUJveCAqYiA9ICpmYml0OworICAvLyBubyBpbmxpbmUg
Ym94IG1lYW5zIHRoaXMgaXMgYW4gZW1wdHkgYmxvY2ssIHRoZXJlZm9yZSB3ZSBhcmUgYWxyZWFk
eSBhdAorICAvLyB0aGUgYmVnaW5uaW5nL2VuZCwgYW5kIG5lZWQgbm8gZnVydGhlciBhY3Rpb25z
LgorICBpZiAoIWIpIHJldHVybjsKKworICBkbyB7CisgICAgYiA9ICpmYml0OworICB9IHdoaWxl
KCorK2ZiaXQgJiYgZW5kKTsKKworICBSZW5kZXJPYmplY3QgKmNiID0gKCppdCktPm9iamVjdCgp
OworICBpbnQgYWJzeCwgYWJzeTsKKworICBpZiAoY2IpIGNiLT5hYnNvbHV0ZVBvc2l0aW9uKGFi
c3gsYWJzeSk7CisgIGVsc2UgYWJzeCA9IGFic3kgPSAwOworCisgIGludCB4ID0gYi0+eFBvcygp
ICsgKGVuZCA/IGItPndpZHRoKCkgOiAwKTsKKyAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT5vcmln
WCA9IHg7CisgIHBsYWNlQ2FyZXRPbkxpbmUoYiwgeCwgYWJzeCwgYWJzeSk7Cit9CisKK3ZvaWQg
S0hUTUxWaWV3Ojptb3ZlQ2FyZXRCeShib29sIG5leHQsIENhcmV0TW92ZW1lbnQgY212LCBpbnQg
Y291bnQpIHsKKyAgaWYgKCFtX3BhcnQpIHJldHVybjsKKyAgLy8gRklYTUU6IHdoYXQgaWYgdGhl
IG5vZGUgaXMgcmVtb3ZlZCB3aGlsc3Qgd2UgYWNjZXNzIGl0PworICAvLyBDdXJyZW50IHNvbHV0
aW9uOiBiYWlsIG91dAorICBOb2RlICZjYXJldE5vZGVSZWYgPSBtX3BhcnQtPmQtPmNhcmV0Tm9k
ZSgpOworICBpZiAoY2FyZXROb2RlUmVmLmlzTnVsbCgpKSByZXR1cm47CisKKyAgTm9kZUltcGwg
KmNhcmV0Tm9kZSA9IGNhcmV0Tm9kZVJlZi5oYW5kbGUoKTsKKy8vICBrZERlYnVnKDYwMDApIDw8
ICI6IGNhcmV0Tm9kZT0iIDw8IGNhcmV0Tm9kZSA8PCBlbmRsOworICBsb25nICZvZmZzZXQgPSBt
X3BhcnQtPmQtPmNhcmV0T2Zmc2V0KCk7CisgIHNhbml0aXplQ2FyZXRTdGF0ZShjYXJldE5vZGUs
IG9mZnNldCk7CisKKyAgaWYgKGNtdiA9PSBDYXJldEJ5TGluZSkgeyBtb3ZlQ2FyZXRCeUxpbmUo
bmV4dCwgY291bnQpOyByZXR1cm47IH0KKworICAvLyBXZSBuZWVkIHRvIGtub3cgd2hldGhlciB0
byB0YWtlIHRoZSBsYXN0IHBvc3NpYmxlCisgIC8vIG9mZnNldCBpbnRvIHJlZ2FyZCAoMCkgb3Ig
bm90ICgxKS4KKyAgaW50IGZpeHVwID0gMTsKKyAgaW50IG4gPSBjb3VudDsKKyAgd2hpbGUgKG4g
PiAwKSB7CisgICAgLy8gbW92ZSBhcyBtYW55IG9mZnNldHMgYXMgcG9zc2libGUgd2l0aGluIHRo
aXMgbm9kZQorICAgIGludCBhZGQgPSBuZXh0ID8gUU1JTihRTUFYKGNhcmV0Tm9kZS0+bWF4T2Zm
c2V0KCkgLSBvZmZzZXQgLSBmaXh1cCwgMCksIG4pCisgICAgICAJCSAgIDogUU1JTihvZmZzZXQg
LSBjYXJldE5vZGUtPm1pbk9mZnNldCgpLCBuKTsKKyAgICBvZmZzZXQgKz0gbmV4dCA/IGFkZCA6
IC1hZGQ7CisgICAgbiAtPSBhZGQ7CisKKyAgICBpZiAobiA9PSAwKSBicmVhazsKKworICAgIC8v
IG5vZGUgYm91bmRhcnk6CisgICAgLy8gb25seSByZWdhcmQgZWRpdGFibGUsIHZpc2libGUgbm9k
ZXMsIGp1bXAgb3ZlciBhbGwgb3RoZXJzCisgICAgTm9kZUltcGwgKnRyYXZOb2RlID0gbmV4dCA/
IGNhcmV0Tm9kZS0+bmV4dExlYWZOb2RlKCkKKyAgICAJCQkJOiBjYXJldE5vZGUtPnByZXZMZWFm
Tm9kZSgpOworICAgIE5vZGVJbXBsICpsYXN0VHJhdk5vZGUgPSBjYXJldE5vZGU7CisgICAgd2hp
bGUgKHRyYXZOb2RlKSB7CisgICAga2REZWJ1Zyg2MDAwKSA8PCAidHJhdk5vZGU6ICI8PHRyYXZO
b2RlLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIgZmlyc3RDaGlsZDogIjw8dHJhdk5vZGUtPmZp
cnN0Q2hpbGQoKQorICAgIAk8PCAiIGhhc0NoaWxkTm9kZXM6ICIgPDwgdHJhdk5vZGUtPmhhc0No
aWxkTm9kZXMoKSA8PCBlbmRsOworICAgICAgaWYgKGlzU3VpdGFibGVGb3JOYXZpZ2F0aW9uKHRy
YXZOb2RlLCBsYXN0VHJhdk5vZGUpKSB7CisJICBrZERlYnVnKDYwMDApIDw8ICJzdWl0YWJsZSIg
PDwgZW5kbDsKKwljYXJldE5vZGUgPSB0cmF2Tm9kZTsKKwlvZmZzZXQgPSBuZXh0ID8gY2FyZXRO
b2RlLT5taW5PZmZzZXQoKSA6IGNhcmV0Tm9kZS0+bWF4T2Zmc2V0KCkgLSBmaXh1cDsKKwkvLyBJ
biB0aGUgbGFzdCBzdGVwIG5vdGhpbmcgaGFzIGJlZW4gYWRkZWQsIHNvIHdlJ3JlIG9mZiBieSBv
bmUuCisJbi0tOworICAgICAgICBmaXh1cCA9IDE7CS8vIG5leHQgZWRpdGFibGUgbm9kZSBpcyB0
byBiZSB0cmVhdGVkIG5vcm1hbGx5CisgICAgICAgIGJyZWFrOworICAgICAgfS8qZW5kIGlmKi8K
KyAgICAgIGlmIChhZGQgPT0gMCAmJiBmaXh1cCA+IDApIHsKKyAgICAgICAgLy8gdWgtaHUhIFdl
IGZvdW5kIGEgbm9uLWVkaXRhYmxlIG5vZGUuIFNvIHdlIHRha2UgY2FyZSB0byBwbGFjZQorCS8v
IHRoZSBjYXJldCBpbW1lZGlhdGVseSBhdCB0aGUgb3V0bW9zdCBvZmZzZXQgb2YgdGhlIG5leHQg
ZWRpdGFibGUKKwkvLyBub2RlCisJZml4dXAgPSAwOworCS8vIE9uIGZvcndhcmQgc3RlcHBpbmcg
d2UgbmVlZCBhbiBleHRyYSB2aXNpdCBhcyB0aGVyZSBpcyBzdGlsbCBhCisJLy8gY2hhcmFjdGVy
IHRvIGJlIHRha2VuIGludG8gYWNjb3VudAorCWlmIChuZXh0KSBicmVhazsKKyAgICAgIH0vKmVu
ZCBpZiovCisgICAgICBsYXN0VHJhdk5vZGUgPSB0cmF2Tm9kZTsKKyAgICAgIHRyYXZOb2RlID0g
bmV4dCA/IHRyYXZOb2RlLT5uZXh0TGVhZk5vZGUoKQorICAgIAkJCTogdHJhdk5vZGUtPnByZXZM
ZWFmTm9kZSgpOworICAgIH0vKndlbmQqLworCisgICAgLy8gV2UgcmVhY2hlZCB0aGUgZG9jdW1l
bnQgYm91bmRhcnkuCisgICAgLy8gU2V0IHRoZSBvZmZzZXQgdG8gdGhlIG91dGVybW9zdCBvZmZz
ZXQgb2YgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICBpZiAoIXRyYXZOb2RlKSB7CisgICAgICBvZmZz
ZXQgPSBuZXh0ID8gY2FyZXROb2RlLT5tYXhPZmZzZXQoKSA6IGNhcmV0Tm9kZS0+bWluT2Zmc2V0
KCk7CisgICAgICBicmVhazsKKyAgICB9LyplbmQgaWYqLworICB9Lyp3ZW5kKi8KKyAgY2FyZXRO
b2RlUmVmID0gY2FyZXROb2RlOworICBwbGFjZUNhcmV0T25DaGFyKCk7Cit9CisKK3ZvaWQgS0hU
TUxWaWV3OjpwbGFjZUNhcmV0T25DaGFyKCkgeworICBjYXJldE9mZigpOworICByZWNhbGNBbmRT
dG9yZUNhcmV0UG9zKCk7CisgIGVuc3VyZVZpc2libGUoZC0+bV9jYXJldFZpZXdDb250ZXh0LT54
LCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnksCisgIAlkLT5tX2NhcmV0Vmlld0NvbnRleHQtPndp
ZHRoLCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPmhlaWdodCk7CisgIGQtPm1fY2FyZXRWaWV3Q29u
dGV4dC0+b3JpZ1ggPSBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPng7CisgIGQtPnNjcm9sbEJhck1v
dmVkID0gZmFsc2U7CisvLyAgaWYgKGNhcmV0Tm9kZS0+aXNUZXh0Tm9kZSgpKSAga2REZWJ1Zyg2
MDAwKSA8PCAidGV4dFswXSA9ICIgPDwgKGludCkqKChUZXh0SW1wbCAqKWNhcmV0Tm9kZSktPmRh
dGEoKS51bmljb2RlKCkgPDwgIiB0ZXh0IDpcIiIgPDwgKChUZXh0SW1wbCAqKWNhcmV0Tm9kZSkt
PmRhdGEoKS5zdHJpbmcoKSA8PCAiXCIiIDw8IGVuZGw7CisgIGNhcmV0T24oKTsKK30KKwordm9p
ZCBLSFRNTFZpZXc6Om1vdmVDYXJldFByZXZXb3JkKCkgeworfQorCit2b2lkIEtIVE1MVmlldzo6
bW92ZUNhcmV0TmV4dFdvcmQoKSB7Cit9CisKK3ZvaWQgS0hUTUxWaWV3Ojptb3ZlQ2FyZXRQcmV2
TGluZShpbnQgbikgeworICBtb3ZlQ2FyZXRCeShmYWxzZSwgQ2FyZXRCeUxpbmUsIG4pOworfQor
Cit2b2lkIEtIVE1MVmlldzo6bW92ZUNhcmV0TmV4dExpbmUoaW50IG4pIHsKKyAgbW92ZUNhcmV0
QnkodHJ1ZSwgQ2FyZXRCeUxpbmUsIG4pOworfQorCit2b2lkIEtIVE1MVmlldzo6bW92ZUNhcmV0
VG9MaW5lQmVnaW4oKSB7CisgIG1vdmVDYXJldFRvTGluZUJvdW5kYXJ5KGZhbHNlKTsKK30KKwor
dm9pZCBLSFRNTFZpZXc6Om1vdmVDYXJldFRvTGluZUVuZCgpIHsKKyAgbW92ZUNhcmV0VG9MaW5l
Qm91bmRhcnkodHJ1ZSk7Cit9CisKSW5kZXg6IGtodG1sdmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2todG1sdmlldy5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjE4MwpkaWZmIC11IC1wIC1yMS4xODMga2h0bWx2aWV3LmgKLS0tIGtodG1sdmlldy5o
CTI2IEp1bCAyMDAzIDE5OjU1OjI5IC0wMDAwCTEuMTgzCisrKyBraHRtbHZpZXcuaAk5IEF1ZyAy
MDAzIDAyOjQ0OjUxIC0wMDAwCkBAIC02MCw2ICs2MCw3IEBAIG5hbWVzcGFjZSBraHRtbCB7CiAg
ICAgY2xhc3MgUmVuZGVyV2lkZ2V0OwogICAgIGNsYXNzIENTU1N0eWxlU2VsZWN0b3I7CiAgICAg
Y2xhc3MgTGluZUVkaXRXaWRnZXQ7CisgICAgY2xhc3MgSW5saW5lQm94OwogICAgIHZvaWQgYXBw
bHlSdWxlKERPTTo6Q1NTUHJvcGVydHkgKnByb3ApOwogfQogCkBAIC0xNzQsNiArMTc1LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29udGVudHMgKCBRUGFpbnRlciAqIHAs
IGludCBjbGlweCwgaW50IGNsaXB5LCBpbnQgY2xpcHcsIGludCBjbGlwaCApOwogICAgIHZpcnR1
YWwgdm9pZCBkcmF3Q29udGVudHMoIFFQYWludGVyKiApOwogICAgIHZpcnR1YWwgdm9pZCB2aWV3
cG9ydE1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOworICAgIHZpcnR1YWwgdm9pZCBm
b2N1c0luRXZlbnQoIFFGb2N1c0V2ZW50ICogKTsKICAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRF
dmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydE1vdXNlRG91
YmxlQ2xpY2tFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9y
dE1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50ICopOwpAQCAtMjUyLDYgKzI1NCwxNTAgQEAgcHJp
dmF0ZToKIAkJCSAgICBpbnQgbW91c2VFdmVudFR5cGUpOwogCiAgICAgdm9pZCBjb21wbGV0ZSgp
OworCisgICAgLy8gLS0gY2FyZXQtcmVsYXRlZCBtZW1iZXIgZnVuY3Rpb25zIChmb3IgY2FyZXRN
b2RlIGFzIHdlbGwgYXMgZGVzaWduTW9kZSkKKworICAgIC8qKiBpbml0aWFsaXplcyB0aGUgY2Fy
ZXQgaWYgaXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LgorICAgICAqCisgICAgICogVGhp
cyBtZXRob2QgZGV0ZXJtaW5lcyBhIHN1aXRhYmxlIHN0YXJ0aW5nIHBvc2l0aW9uLCBpbml0aWFs
aXplcworICAgICAqIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzLCBhbmQgY2FsY3VsYXRlcyB0aGUg
Y2FyZXQncyBjb29yZGluYXRlcyByZWFkeQorICAgICAqIGZvciBkaXNwbGF5LgorICAgICAqCisg
ICAgICogVG8gImRlaW5pdGlhbGl6ZSIgdGhlIGNhcmV0LCBjYWxsIEByZWYgY2FyZXRPZmYKKyAg
ICAgKi8KKyAgICB2b2lkIGluaXRDYXJldCgpOworICAgIC8qKiByZXR1cm5zIHdoZXRoZXIgdGhl
IHRleHQgdW5kZXIgdGhlIGNhcmV0IHdpbGwgYmUgb3ZlcnJpZGRlbi4KKyAgICAgICovCisgICAg
Ym9vbCBjYXJldE92ZXJyaWRlcygpOworICAgIC8qKiByZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVu
IEBwIG5vZGUgaXMgdG8gYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvcgorICAgICAqIGNh
cmV0IG1vdmVtZW50LiBAcCBub2RlIG11c3Qgbm90IGJlIDAuCisgICAgICogQHBhcmFtIG5vZGUg
bm9kZSB0byBjaGVjaworICAgICAqIEBwYXJhbSBhbHQgYWx0ZXJuYXRpdmUgbm9kZS4gQHAgbm9k
ZSB3aWxsIGJlIGNvbXBhcmVkIHRvIEBwIGFsdAorICAgICAqCUlmIGFsdCBpcyBiZXR0ZXIgc3Vp
dGVkIGZvciBuYXZpZ2F0aW9uLCBAcCBmYWxzZSBpcyByZXR1cm5lZC4KKyAgICAgKiBAcmV0dXJu
IEBwIHRydWUgaWYgdG8gYmUgc3RlcHBlZCBpbnRvLCBAcCBmYWxzZSBpZiB0byBiZSBpZ25vcmVk
LgorICAgICAqLworICAgIGJvb2wgaXNTdWl0YWJsZUZvck5hdmlnYXRpb24oRE9NOjpOb2RlSW1w
bCAqbm9kZSwgRE9NOjpOb2RlSW1wbCAqYWx0ID0gMCk7CisgICAgLyoqIGlucXVpcmVzIHRoZSBj
dXJyZW50IGNhcmV0IHBvc2l0aW9uIGFuZCBzdG9yZXMgaXQgaW4gdGhlIGNhcmV0IHZpZXcKKyAg
ICAgKiBjb250ZXh0LiBBbHNvIHJlc2V0cyB0aGUgYmxpbmsgZnJlcXVlbmN5IHRpbWVyLiBJdCB3
aWxsIG5vdCBkaXNwbGF5CisgICAgICogdGhlIGNhcmV0IG9uIHRoZSBjYW52YXMuCisgICAgICov
CisgICAgdm9pZCByZWNhbGNBbmRTdG9yZUNhcmV0UG9zKCk7CisgICAgLyoqIGRpc3BsYXlzIHRo
ZSBjYXJldCBhbmQgcmVpbml0aWFsaXplcyB0aGUgYmxpbmsgZnJlcXVlbmN5IHRpbWVyLiAqLwor
ICAgIHZvaWQgY2FyZXRPbigpOworICAgIC8qKiBoaWRlcyB0aGUgY2FyZXQgYW5kIGtpbGxzIHRo
ZSBibGluayBmcmVxdWVuY3kgdGltZXIuICovCisgICAgdm9pZCBjYXJldE9mZigpOworICAgIC8q
KiBtYWtlcyB0aGUgY2FyZXQgdmlzaWJsZSwgYnV0IGRvZXMgbm90IGluZmx1ZW5jZSB0aGUgZnJl
cXVlbmN5IHRpbWVyLgorICAgICAqIFRoYXQgbWVhbnMgaXQgcHJvYmFibHkgd29uJ3QgZ2V0IHZp
c2libGUgaW1tZWRpYXRlbHkuCisgICAgICovCisgICAgdm9pZCBzaG93Q2FyZXQoKTsKKyAgICAv
KiogbWFrZXMgdGhlIGNhcmV0IGludmlzaWJsZSwgYnV0IGRvZXMgbm90IGluZmx1ZW5jZSB0aGUg
ZnJlcXVlbmN5IHRpbWVyLgorICAgICAqIFRoZSBjYXJldCBpcyBpbW1lZGlhdGVseSBoaWRkZW4u
CisgICAgICovCisgICAgdm9pZCBoaWRlQ2FyZXQoKTsKKworICAgIC8vIC0tIGNhcmV0IGV2ZW50
IGhhbmRsZXIKKworICAgIC8qKgorICAgICAqIEV2YWx1YXRlcyBrZXkgcHJlc3NlcyBvbiBlZGl0
YWJsZSBub2Rlcy4KKyAgICAgKi8KKyAgICB2b2lkIGNhcmV0S2V5UHJlc3NFdmVudChRS2V5RXZl
bnQgKik7CisKKyAgICAvLyAtLSBjYXJldCBuYXZpZ2F0aW9uIG1lbWJlciBmdW5jdGlvbnMKKwor
ICAgIC8qKiBtb3ZlcyB0aGUgY2FyZXQgdG8gdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCBkaXNwbGF5
cyBpdC4KKyAgICAgKgorICAgICAqIElmIHRoZSBub2RlIGlzIGFuIGludmFsaWQgcGxhY2UsIHRo
ZSBmdW5jdGlvbiBzZXRzIHRoZSBjYXJldCB0byBhbgorICAgICAqIG5lYXJieSBub2RlIHRoYXQg
aXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbm9kZSBub2RlIHRvIGJlIHNldCB0bwor
ICAgICAqIEBwYXJhbSBvZmZzZXQgemVyby1iYXNlZCBvZmZzZXQgd2l0aGluIHRoaXMgbm9kZQor
ICAgICAqLworICAgIHZvaWQgbW92ZUNhcmV0VG8oRE9NOjpOb2RlSW1wbCAqbm9kZSwgbG9uZyBv
ZmZzZXQpOworCisgICAgLyoqCisgICAgICogTW92ZW1lbnQgZW51bWVyYXRpb24KKyAgICAgKiBA
bGkgQ2FyZXRCeUNoYXJhY3RlciBtb3ZlIGNhcmV0IGNoYXJhY3Rlci13aXNlCisgICAgICogQGxp
IENhcmV0QnlXb3JkIG1vdmUgY2FyZXQgd29yZC13aXNlCisgICAgICogQGxpIENhcmV0QnlMaW5l
IG1vdmUgY2hhcmV0IGxpbmUtd2lzZQorICAgICAqLworICAgIGVudW0gQ2FyZXRNb3ZlbWVudCB7
IENhcmV0QnlDaGFyYWN0ZXIsIENhcmV0QnlXb3JkLCBDYXJldEJ5TGluZSB9OworCisgICAgLyoq
IG1vdmVzIHRoZSBjYXJldC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuZXh0IEBwIHRydWUsIG1v
dmUgdG93YXJkcyB0aGUgZm9sbG93aW5nIGNvbnRlbnQsIEBwIGZhbHNlLAorICAgICAqCQltb3Zl
IHRvd2FyZHMgdGhlIHByZXZpb3VzCisgICAgICogQHBhcmFtIGNtdiBDYXJldE1vdmVtZW50IG9w
ZXJhdGlvbgorICAgICAqIEBwYXJhbSBuIGNvdW50IHRoZSBDYXJldE1vdmVtZW50IGhhcyB0byBi
ZSBjYXJyaWVkIG91dC4KKyAgICAgKiBGb3IgbGF0aW4gZG9jdW1lbnRzLCBhIHBvc2l0aXZlIG51
bWJlciBtZWFucyBtb3ZpbmcgdGhlIGNhcmV0CisgICAgICogdGhlc2UgbWFueSBjaGFyYWN0ZXJz
IHRvIHRoZSByaWdodC9kb3dud2FyZHMsIGEgbmVnYXRpdmUgbnVtYmVyCisgICAgICogdG8gdGhl
IGxlZnQvdXB3YXJkcy4gRm9yIFJUTCBkb2N1bWVudHMsIHRoZSBvcHBvc2l0ZSBhcHBsaWVzLgor
ICAgICAqLworICAgIHZvaWQgbW92ZUNhcmV0QnkoYm9vbCBuZXh0LCBDYXJldE1vdmVtZW50IGNt
diwgaW50IG4pOworCisgICAgLyoqIG1vdmVzIHRoZSBjYXJldCBieSBsaW5lLgorICAgICAqIEBp
bnRlcm5hbCBvbmx5IG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBtb3ZlQ2FyZXRCeQor
ICAgICAqLworICAgIHZvaWQgbW92ZUNhcmV0QnlMaW5lKGJvb2wgbmV4dCwgaW50IG4pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoqIG1vdmVzIHRoZSBjYXJldCB0byB0
aGUgZ2l2ZW4gbGluZSBib3VuZGFyeS4KKyAgICAgKiBAcGFyYW0gZW5kIEBwIHRydWUgaWYgdGhl
IGNhcmV0IGlzIHRvIGJlIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUsCisgICAgICoJCW90
aGVyd2lzZSB0byB0aGUgYmVnaW5uaW5nLgorICAgICAqLworICAgIHZvaWQgbW92ZUNhcmV0VG9M
aW5lQm91bmRhcnkoYm9vbCBlbmQpOworCisgICAgLyoqIGRvZXMgdGhlIGFjdHVhbCBjYXJldCBw
bGFjZW1lbnQgc28gdGhhdCBpdCBiZWNvbWVzIHZpc2libGUgYXQKKyAgICAgKiB0aGUgbmV3IHBv
c2l0aW9uLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgaXMgb25seSBzdWl0YWJsZSBpZiB0
aGUgbmV3IGNhcmV0IHBvc2l0aW9uIGhhcyBhbHJlYWR5IGJlZW4KKyAgICAgKiBkZXRlcm1pbmVk
LgorICAgICAqLworICAgIHZvaWQgcGxhY2VDYXJldE9uQ2hhcigpOworCisgICAgLyoqIGRvZXMg
dGhlIGFjdHVhbCBjYXJldCBwbGFjZW1lbnQgc28gdGhhdCBpdCBiZWNvbWVzIHZpc2libGUgYXQK
KyAgICAgKiB0aGUgbmV3IHBvc2l0aW9uLgorICAgICAqCisgICAgICogQWRkaXRpb25hbGx5LCBp
dCBjYWxjdWxhdGVzIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gZnJvbSB0aGUgZ2l2ZW4KKyAgICAg
KiBib3ggYW5kIGNvb3JkaW5hdGVzLgorICAgICAqCisgICAgICogQHBhcmFtIGNhcmV0Qm94IGlu
bGluZSBib3ggc2VydmluZyBhcyBhIG1lYXN1cmVtZW50IHBvaW50IGZvciBvZmZzZXQuCisgICAg
ICogQHBhcmFtIHggeC1jb29yZGluYXRlIHJlbGF0aXZlIHRvIGNvbnRhaW5pbmcgYmxvY2suIFRo
ZSBvZmZzZXQgd2lsbAorICAgICAqCQliZSBhcHByb3hpbWF0ZWQgYXMgY2xvc2VseSBhcyBwb3Nz
aWJsZSB0byB0aGlzIGNvb3JkaW5hdGUsCisgICAgICoJCWJ1dCBuZXZlciBsZXNzIHRoYW4gY2Fy
ZXRCb3gtPnhQb3MoKSBhbmQgZ3JlYXRlciB0aGFuCisgICAgICoJCWNhcmV0Qm94LT54UG9zKCkg
KyBjYXJldEJveC0+d2lkdGgoKQorICAgICAqIEBwYXJhbSBhYnN4IGFic29sdXRlIHgtY29vcmRp
bmF0ZSBvZiBjb250YWluaW5nIGJsb2NrLCBuZWVkZWQgZm9yCisgICAgICoJCWNhbGN1bGF0aW9u
IG9mIGZpbmFsIGNhcmV0IHBvc2l0aW9uCisgICAgICogQHBhcmFtIGFic3kgYWJzb2x1dGUgeS1j
b29yZGluYXRlIG9mIGNvbnRhaW5pbmcgYmxvY2ssIG5lZWRlZCBmb3IKKyAgICAgKgkJY2FsY3Vs
YXRpb24gb2YgZmluYWwgY2FyZXQgcG9zaXRpb24KKyAgICAgKi8KKyAgICB2b2lkIHBsYWNlQ2Fy
ZXRPbkxpbmUoa2h0bWw6OklubGluZUJveCAqY2FyZXRCb3gsIGludCB4LCBpbnQgYWJzeCwgaW50
IGFic3kpOworCisgICAgLyoqIG1vdmVzIHRoZSBjYXJldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBwcmV2aW91cyB3b3JkLgorICAgICAqLworICAgIHZvaWQgbW92ZUNhcmV0UHJldldvcmQoKTsK
KworICAgIC8qKiBtb3ZlcyB0aGUgY2FyZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCB3
b3JkLgorICAgICAqLworICAgIHZvaWQgbW92ZUNhcmV0TmV4dFdvcmQoKTsKKworICAgIC8qKiBt
b3ZlcyB0aGUgY2FyZXQgdG8gdGhlIHByZXZpb3VzIGxpbmUuCisgICAgICoKKyAgICAgKiBAcGFy
YW0gbiBudW1iZXIgb2YgbGluZXMgdG8gbW92ZSBjYXJldAorICAgICAqLworICAgIHZvaWQgbW92
ZUNhcmV0UHJldkxpbmUoaW50IG4gPSAxKTsKKworICAgIC8qKiBtb3ZlcyB0aGUgY2FyZXQgdG8g
dGhlIGZvbGxvd2luZyBsaW5lLgorICAgICAqCisgICAgICogQHBhcmFtIG4gbnVtYmVyIG9mIGxp
bmVzIHRvIG1vdmUgY2FyZXQKKyAgICAgKi8KKyAgICB2b2lkIG1vdmVDYXJldE5leHRMaW5lKGlu
dCBuID0gMSk7CisKKyAgICAvKiogbW92ZXMgdGhlIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIGN1cnJlbnQgbGluZS4KKyAgICAgKi8KKyAgICB2b2lkIG1vdmVDYXJldFRvTGluZUJlZ2lu
KCk7CisKKyAgICAvKiogbW92ZXMgdGhlIGNhcmV0IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQg
bGluZS4KKyAgICAgKi8KKyAgICB2b2lkIG1vdmVDYXJldFRvTGluZUVuZCgpOwogCiAgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZW1iZXIgdmFyaWFibGVzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHByaXZhdGU6CkluZGV4OiB0ZXN0
a2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3Rl
c3RraHRtbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODEKZGlmZiAtdSAtcCAtcjEuODEg
dGVzdGtodG1sLmNwcAotLS0gdGVzdGtodG1sLmNwcAkxMCBKYW4gMjAwMyAxNTozMzoxNCAtMDAw
MAkxLjgxCisrKyB0ZXN0a2h0bWwuY3BwCTkgQXVnIDIwMDMgMDI6NDQ6NTEgLTAwMDAKQEAgLTgw
LDYgKzgwLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICAgdmlld01l
bnUuYXBwZW5kQ2hpbGQoIGUgKTsKICAgICBRRG9tRWxlbWVudCB0b29sQmFyID0gZC5kb2N1bWVu
dEVsZW1lbnQoKS5maXJzdENoaWxkKCkubmV4dFNpYmxpbmcoKS50b0VsZW1lbnQoKTsKICAgICBl
ID0gZC5jcmVhdGVFbGVtZW50KCAiYWN0aW9uIiApOworICAgIGUuc2V0QXR0cmlidXRlKCAibmFt
ZSIsICJlZGl0YWJsZSIgKTsKKyAgICB0b29sQmFyLmluc2VydEJlZm9yZSggZSwgdG9vbEJhci5m
aXJzdENoaWxkKCkgKTsKKyAgICBlID0gZC5jcmVhdGVFbGVtZW50KCAiYWN0aW9uIiApOworICAg
IGUuc2V0QXR0cmlidXRlKCAibmFtZSIsICJuYXZpZ2FibGUiICk7CisgICAgdG9vbEJhci5pbnNl
cnRCZWZvcmUoIGUsIHRvb2xCYXIuZmlyc3RDaGlsZCgpICk7CisgICAgZSA9IGQuY3JlYXRlRWxl
bWVudCggImFjdGlvbiIgKTsKICAgICBlLnNldEF0dHJpYnV0ZSggIm5hbWUiLCAicmVsb2FkIiAp
OwogICAgIHRvb2xCYXIuaW5zZXJ0QmVmb3JlKCBlLCB0b29sQmFyLmZpcnN0Q2hpbGQoKSApOwog
ICAgIGUgPSBkLmNyZWF0ZUVsZW1lbnQoICJhY3Rpb24iICk7CkBAIC04OSw3ICs5NSwxMiBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogICAgICh2b2lkKW5ldyBLQWN0aW9uKCAi
UmVsb2FkIiwgInJlbG9hZCIsIFF0OjpLZXlfRjUsIGR1bW15LCBTTE9UKCByZWxvYWQoKSApLCBk
b2MtPmFjdGlvbkNvbGxlY3Rpb24oKSwgInJlbG9hZCIgKTsKICAgICBLQWN0aW9uKiBrcHJpbnQg
PSBuZXcgS0FjdGlvbiggIlByaW50IiwgInByaW50IiwgMCwgZG9jLT5icm93c2VyRXh0ZW5zaW9u
KCksIFNMT1QoIHByaW50KCkgKSwgZG9jLT5hY3Rpb25Db2xsZWN0aW9uKCksICJwcmludCIgKTsK
ICAgICBrcHJpbnQtPnNldEVuYWJsZWQodHJ1ZSk7Ci0KKyAgICBLVG9nZ2xlQWN0aW9uICp0YSA9
IG5ldyBLVG9nZ2xlQWN0aW9uKCAiTmF2aWdhYmxlIiwgImVkaXRjbGVhciIsIDAsIGRvYy0+YWN0
aW9uQ29sbGVjdGlvbigpLCAibmF2aWdhYmxlIiApOworICAgIHRhLT5zZXRDaGVja2VkKGRvYy0+
aXNDYXJldE1vZGUoKSk7CisgICAgUVdpZGdldDo6Y29ubmVjdCh0YSwgU0lHTkFMKHRvZ2dsZWQo
Ym9vbCkpLCBkdW1teSwgU0xPVCggdG9nZ2xlTmF2aWdhYmxlKGJvb2wpICkpOworICAgIHRhID0g
bmV3IEtUb2dnbGVBY3Rpb24oICJFZGl0YWJsZSIsICJlZGl0IiwgMCwgZG9jLT5hY3Rpb25Db2xs
ZWN0aW9uKCksICJlZGl0YWJsZSIgKTsKKyAgICB0YS0+c2V0Q2hlY2tlZChkb2MtPmlzRWRpdGFi
bGUoKSk7CisgICAgUVdpZGdldDo6Y29ubmVjdCh0YSwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBk
dW1teSwgU0xPVCggdG9nZ2xlRWRpdGFibGUoYm9vbCkgKSk7CiAgICAgdG9wbGV2ZWwtPmd1aUZh
Y3RvcnkoKS0+YWRkQ2xpZW50KCBkb2MgKTsKIAogICAgIGRvYy0+c2V0SlNjcmlwdEVuYWJsZWQo
dHJ1ZSk7CkluZGV4OiB0ZXN0a2h0bWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUv
a2RlbGlicy9raHRtbC90ZXN0a2h0bWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYg
LXUgLXAgLXIxLjQgdGVzdGtodG1sLmgKLS0tIHRlc3RraHRtbC5oCTIgQXByIDIwMDEgMjA6Mjg6
NTYgLTAwMDAJMS40CisrKyB0ZXN0a2h0bWwuaAk5IEF1ZyAyMDAzIDAyOjQ0OjUxIC0wMDAwCkBA
IC0xLDYgKzEsOCBAQAogI2lmbmRlZiBURVNUS0hUTUxfSAogI2RlZmluZSBURVNUS0hUTUxfSAog
CisjaW5jbHVkZSA8a2RlYnVnLmg+CisKIC8qKgogICogQGludGVybmFsCiAgKi8KQEAgLTIxLDYg
KzIzLDE3IEBAIHByaXZhdGUgc2xvdHM6CiAgICAgICBLUGFydHM6OlVSTEFyZ3MgYXJnczsgYXJn
cy5yZWxvYWQgPSB0cnVlOwogICAgICAgbV9wYXJ0LT5icm93c2VyRXh0ZW5zaW9uKCktPnNldFVS
TEFyZ3MoIGFyZ3MgKTsKICAgICAgIG1fcGFydC0+b3BlblVSTCggbV9wYXJ0LT51cmwoKSApOwor
ICB9CisgIAorICB2b2lkIHRvZ2dsZU5hdmlnYWJsZShib29sIHMpCisgIHsKKyAgICAgIG1fcGFy
dC0+c2V0Q2FyZXRNb2RlKHMpOworICB9CisKKyAgdm9pZCB0b2dnbGVFZGl0YWJsZShib29sIHMp
CisgIHsKKyAga2REZWJ1ZygpIDw8ICJlZGl0YWJsZTogIiA8PCBzIDw8IGVuZGw7CisgICAgICBt
X3BhcnQtPnNldEVkaXRhYmxlKHMpOwogICB9CiAKIHByaXZhdGU6CkluZGV4OiBjc3MvY3NzcGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9jc3Mv
Y3NzcGFyc2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNjcKZGlmZiAtdSAtcCAtcjEu
MjY3IGNzc3BhcnNlci5jcHAKLS0tIGNzcy9jc3NwYXJzZXIuY3BwCTI1IEp1biAyMDAzIDIyOjMy
OjE0IC0wMDAwCTEuMjY3CisrKyBjc3MvY3NzcGFyc2VyLmNwcAk5IEF1ZyAyMDAzIDAyOjQ0OjUz
IC0wMDAwCkBAIC05NjMsNiArOTYzLDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKCBp
bnQgcHJvcElkLCAKIAkgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKIAlicmVhazsKIAorICAg
IGNhc2UgQ1NTX1BST1BfX0tPTlFfVVNFUl9JTlBVVDoJLy8gbm9uZSB8IGVuYWJsZWQgfCBkaXNh
YmxlZCB8IGluaGVyaXQKKwlpZiAoIGlkID09IENTU19WQUxfTk9ORSB8fCBpZCA9PSBDU1NfVkFM
X0VOQUJMRUQgfHwgaWQgPT0gQ1NTX1ZBTF9ESVNBQkxFRCApCisJICAgIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7CisvLwlrZERlYnVnKDYwODApIDw8ICJDU1NfUFJPUF9fS09OUV9VU0VSX0lOUFVU
OiAiIDw8IHZhbGlkX3ByaW1pdGl2ZSA8PCBlbmRsOworCWJyZWFrOworCiAJLyogc2hvcnRoYW5k
IHByb3BlcnRpZXMgKi8KICAgICBjYXNlIENTU19QUk9QX0JBQ0tHUk9VTkQ6CiAgICAgCS8vIFsn
YmFja2dyb3VuZC1jb2xvcicgfHwgJ2JhY2tncm91bmQtaW1hZ2UnIHx8J2JhY2tncm91bmQtcmVw
ZWF0JyB8fApJbmRleDogY3NzL2Nzc3Byb3BlcnRpZXMuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
aG9tZS9rZGUva2RlbGlicy9raHRtbC9jc3MvY3NzcHJvcGVydGllcy5jLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjE5CmRpZmYgLXUgLXAgLXIxLjE5IGNzc3Byb3BlcnRpZXMuYwotLS0gY3NzL2Nz
c3Byb3BlcnRpZXMuYwkxNyBNYXkgMjAwMyAyMjoxMjo1NyAtMDAwMAkxLjE5CisrKyBjc3MvY3Nz
cHJvcGVydGllcy5jCTkgQXVnIDIwMDMgMDI6NDQ6NTMgLTAwMDAKQEAgLTExOCw3ICsxMTgsNyBA
QCBmaW5kUHJvcCAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpCiB7CiAgIGVudW0KICAg
ICB7Ci0gICAgICBUT1RBTF9LRVlXT1JEUyA9IDEwOSwKKyAgICAgIFRPVEFMX0tFWVdPUkRTID0g
MTEwLAogICAgICAgTUlOX1dPUkRfTEVOR1RIID0gMywKICAgICAgIE1BWF9XT1JEX0xFTkdUSCA9
IDI2LAogICAgICAgTUlOX0hBU0hfVkFMVUUgPSA1LApAQCAtMjEyLDYgKzIxMiw3IEBAIGZpbmRQ
cm9wIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2kKICAgICAgIHsid2lkb3dzIiwgQ1NT
X1BST1BfV0lET1dTfSwKICAgICAgIHsid29yZC1zcGFjaW5nIiwgQ1NTX1BST1BfV09SRF9TUEFD
SU5HfSwKICAgICAgIHsic2Nyb2xsYmFyLXRyYWNrLWNvbG9yIiwgQ1NTX1BST1BfU0NST0xMQkFS
X1RSQUNLX0NPTE9SfSwKKyAgICAgIHsiLWtvbnEtdXNlci1pbnB1dCIsIENTU19QUk9QX19LT05R
X1VTRVJfSU5QVVR9LAogICAgICAgeyJtYXJrZXItb2Zmc2V0IiwgQ1NTX1BST1BfTUFSS0VSX09G
RlNFVH0sCiAgICAgICB7Imxpc3Qtc3R5bGUiLCBDU1NfUFJPUF9MSVNUX1NUWUxFfSwKICAgICAg
IHsicGFnZS1icmVhay1iZWZvcmUiLCBDU1NfUFJPUF9QQUdFX0JSRUFLX0JFRk9SRX0sCkBAIC0y
ODUsMjggKzI4NiwyOCBAQCBmaW5kUHJvcCAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdp
CiAgICAgICAgLTEsICA3OSwgIC0xLCAgODAsICAtMSwgIC0xLCAgLTEsICA4MSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICA4MiwgIDgzLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICA4NCwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsICAtMSwgIC0xLCAgODUsICAtMSwgIDg2LCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsICAtMSwgIDg3LCAgODgsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgODks
Ci0gICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIDkwLCAgOTEs
Ci0gICAgICAgOTIsICAtMSwgIDkzLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgOTQsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgOTUsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsICA5NiwgIC0xLCAgLTEsICA5NywgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsICA5OCwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICA5OSwgIC0xLCAgLTEs
CisgICAgICAgLTEsICA4NSwgIC0xLCAgODYsICAtMSwgIDg3LCAgLTEsICAtMSwgIC0xLCAgLTEs
CisgICAgICAgLTEsICAtMSwgIDg4LCAgODksICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgOTAs
CisgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIDkxLCAgOTIs
CisgICAgICAgOTMsICAtMSwgIDk0LCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CisgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgOTUsICAtMSwgIC0xLCAgLTEs
CisgICAgICAgOTYsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CisgICAgICAgLTEsICA5NywgIC0xLCAgLTEsICA5OCwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CisgICAgICAgLTEsICA5OSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsIDEwMCwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAxMDAs
CisgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAxMDEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsICAtMSwgIC0xLCAgLTEsIDEwMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgMTAyLCAgLTEsICAtMSwgIC0xLCAgLTEs
CisgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsIDEwMiwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CisgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgMTAzLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsIDEwMywgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CisgICAgICAgLTEsIDEwNCwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
Ci0gICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAxMDQsICAtMSwgIC0xLCAgLTEs
CisgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAxMDUsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEs
CkBAIC0zMTUsMTcgKzMxNiwxNyBAQCBmaW5kUHJvcCAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3Ry
LCByZWdpCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCi0gICAgICAxMDUsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAxMDYsCisgICAgICAxMDYsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAxMDcsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCi0gICAgICAgLTEsICAtMSwgMTA3LCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCisgICAgICAgLTEsICAtMSwgMTA4LCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCiAgICAgICAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0x
LCAgLTEsCi0gICAgICAgLTEsIDEwOAorICAgICAgIC0xLCAxMDkKICAgICB9OwogCiAgIGlmIChs
ZW4gPD0gTUFYX1dPUkRfTEVOR1RIICYmIGxlbiA+PSBNSU5fV09SRF9MRU5HVEgpCkBAIC00NTgs
NiArNDU5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcm9wZXJ0eUxpc3RbXQogInNj
cm9sbGJhci10cmFjay1jb2xvciIsIAogInNjcm9sbGJhci1hcnJvdy1jb2xvciIsIAogIi1rb25x
LWZsb3ctbW9kZSIsIAorIi1rb25xLXVzZXItaW5wdXQiLCAKICAgICAwCiB9OwogRE9NU3RyaW5n
IGdldFByb3BlcnR5TmFtZSh1bnNpZ25lZCBzaG9ydCBpZCkKQEAgLTQ2Niw1ICs0NjgsNSBAQCBE
T01TdHJpbmcgZ2V0UHJvcGVydHlOYW1lKHVuc2lnbmVkIHNob3J0CiAgICAgICByZXR1cm4gRE9N
U3RyaW5nKCk7CiAgICAgZWxzZQogICAgICAgcmV0dXJuIERPTVN0cmluZyhwcm9wZXJ0eUxpc3Rb
aWRdKTsKLX0KK307CiAKSW5kZXg6IGNzcy9jc3Nwcm9wZXJ0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvY3NzL2Nzc3Byb3BlcnRpZXMuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNQpkaWZmIC11IC1wIC1yMS4xNSBjc3Nwcm9wZXJ0aWVzLmgKLS0t
IGNzcy9jc3Nwcm9wZXJ0aWVzLmgJMTMgSmFuIDIwMDMgMTg6NDY6MjEgLTAwMDAJMS4xNQorKysg
Y3NzL2Nzc3Byb3BlcnRpZXMuaAk5IEF1ZyAyMDAzIDAyOjQ0OjUzIC0wMDAwCkBAIC00LDcgKzQs
NiBAQAogI2lmbmRlZiBDU1NQUk9QRVJUSUVTX0gKICNkZWZpbmUgQ1NTUFJPUEVSVElFU19ICiAK
LURPTTo6RE9NU3RyaW5nIGdldFByb3BlcnR5TmFtZSh1bnNpZ25lZCBzaG9ydCBpZCk7CiAKICNk
ZWZpbmUgQ1NTX1BST1BfSU5WQUxJRCAwCiAjZGVmaW5lIENTU19QUk9QX01JTiAxCkBAIC0xMTcs
OCArMTE2LDkgQEAgRE9NOjpET01TdHJpbmcgZ2V0UHJvcGVydHlOYW1lKHVuc2lnbmVkIAogI2Rl
ZmluZSBDU1NfUFJPUF9TQ1JPTExCQVJfVFJBQ0tfQ09MT1IgMTA3CiAjZGVmaW5lIENTU19QUk9Q
X1NDUk9MTEJBUl9BUlJPV19DT0xPUiAxMDgKICNkZWZpbmUgQ1NTX1BST1BfX0tPTlFfRkxPV19N
T0RFIDEwOQorI2RlZmluZSBDU1NfUFJPUF9fS09OUV9VU0VSX0lOUFVUIDExMAogCiAjZGVmaW5l
IENTU19QUk9QX01BWCBDU1NfUFJPUF9aX0lOREVYCi0jZGVmaW5lIENTU19QUk9QX1RPVEFMIDEx
MAorI2RlZmluZSBDU1NfUFJPUF9UT1RBTCAxMTEKICNlbmRpZgogCkluZGV4OiBjc3MvY3NzcHJv
cGVydGllcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9j
c3MvY3NzcHJvcGVydGllcy5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC11IC1w
IC1yMS4xNyBjc3Nwcm9wZXJ0aWVzLmluCi0tLSBjc3MvY3NzcHJvcGVydGllcy5pbgkyMyBKdW4g
MjAwMyAyMDowNDo0MSAtMDAwMAkxLjE3CisrKyBjc3MvY3NzcHJvcGVydGllcy5pbgk5IEF1ZyAy
MDAzIDAyOjQ0OjUzIC0wMDAwCkBAIC0xNDQsNCArMTQ0LDYgQEAgc2Nyb2xsYmFyLTNkbGlnaHQt
Y29sb3IKIHNjcm9sbGJhci1kYXJrc2hhZG93LWNvbG9yCiBzY3JvbGxiYXItdHJhY2stY29sb3IK
IHNjcm9sbGJhci1hcnJvdy1jb2xvcgorIyBrb25xdWVyb3IgaW50ZXJuYWxzCiAta29ucS1mbG93
LW1vZGUKKy1rb25xLXVzZXItaW5wdXQKSW5kZXg6IGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9jc3MvY3Nzc3R5bGVz
ZWxlY3Rvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjc5CmRpZmYgLXUgLXAgLXIxLjI3
OSBjc3NzdHlsZXNlbGVjdG9yLmNwcAotLS0gY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTIxIEp1
biAyMDAzIDA5OjE0OjQ5IC0wMDAwCTEuMjc5CisrKyBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJ
OSBBdWcgMjAwMyAwMjo0NDo1NyAtMDAwMApAQCAtNDIzLDYgKzQyMyw4IEBAIFJlbmRlclN0eWxl
ICpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckUKIAkJICAgIGZvbnREaXJ0eSA9IGZhbHNlOwog
CQl9CiAJCURPTTo6Q1NTUHJvcGVydHkgKnByb3AgPSBwcm9wc1RvQXBwbHlbaV0tPnByb3A7Cisv
LwkJaWYgKHByb3AtPm1faWQgPT0gQ1NTX1BST1BfX0tPTlFfVVNFUl9JTlBVVCkga2REZWJ1Zyg2
MDgwKSA8PCAiRWw6ICI8PGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiB1c2VyLWlucHV0OiAi
PDwoKENTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqKXByb3AtPnZhbHVlKCkpLT5nZXRJZGVudCgpIDw8
IGVuZGw7CisvLwkJaWYgKHByb3AtPm1faWQgPT0gQ1NTX1BST1BfVEVYVF9UUkFOU0ZPUk0pIGtk
RGVidWcoNjA4MCkgPDwgIkVsOiAiPDxlLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7CiAg
ICAgICAgICAgICAgICAgYXBwbHlSdWxlKCBwcm9wLT5tX2lkLCBwcm9wLT52YWx1ZSgpICk7CiAJ
ICAgIH0KIAkgICAgaWYgKCBmb250RGlydHkgKSB7CkBAIC0zMDA2LDYgKzMwMDgsMjMgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVJ1bGUoIGludCBpZAogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTX1BST1BfX0tPTlFfVVNF
Ul9JTlBVVDogeworICAgICAgICBpZih2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6
OkNTU19JTkhFUklUKQorICAgICAgICB7CisgICAgICAgICAgICBpZighcGFyZW50Tm9kZSkgcmV0
dXJuOworICAgICAgICAgICAgc3R5bGUtPnNldFVzZXJJbnB1dChwYXJlbnRTdHlsZS0+dXNlcklu
cHV0KCkpOworLy8JICAgIGtkRGVidWcoKSA8PCAiVUkgZXJtIiA8PCBlbmRsOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmKCFwcmltaXRpdmVWYWx1ZSkgcmV0dXJu
OworICAgICAgICBpbnQgaWQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKTsKKwlpZiAoaWQg
PT0gQ1NTX1ZBTF9OT05FKQorCSAgICBzdHlsZS0+c2V0VXNlcklucHV0KFVJX05PTkUpOworCWVs
c2UKKwkgICAgc3R5bGUtPnNldFVzZXJJbnB1dChFVXNlcklucHV0KGlkIC0gQ1NTX1ZBTF9FTkFC
TEVEKSk7CisvLwlrZERlYnVnKDYwODApIDw8ICJ1c2VySW5wdXQ6ICIgPDwgc3R5bGUtPnVzZXJF
ZGl0KCkgPDwgZW5kbDsKKwlyZXR1cm47CisgICAgfQogLy8gICAgIGNhc2UgQ1NTX1BST1BfVk9J
Q0VfRkFNSUxZOgogLy8gICAgICAgICAvLyBsaXN0IG9mIHN0cmluZ3MgYW5kIGkKIC8vICAgICAg
ICAgYnJlYWs7CkluZGV4OiBjc3MvY3NzdmFsdWVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hv
bWUva2RlL2tkZWxpYnMva2h0bWwvY3NzL2Nzc3ZhbHVlcy5jLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjM3CmRpZmYgLXUgLXAgLXIxLjM3IGNzc3ZhbHVlcy5jCi0tLSBjc3MvY3NzdmFsdWVzLmMJ
MTcgTWF5IDIwMDMgMjI6MTI6NTcgLTAwMDAJMS4zNworKysgY3NzL2Nzc3ZhbHVlcy5jCTkgQXVn
IDIwMDMgMDI6NDQ6NTcgLTAwMDAKQEAgLTcsNyArNyw3IEBAIHN0cnVjdCBjc3NfdmFsdWUgewog
ICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgaW50IGlkOwogfTsKLS8qIG1heGltdW0ga2V5IHJh
bmdlID0gMTQzMCwgZHVwbGljYXRlcyA9IDEgKi8KKy8qIG1heGltdW0ga2V5IHJhbmdlID0gMTU3
MSwgZHVwbGljYXRlcyA9IDEgKi8KIAogI2lmZGVmIF9fR05VQ19fCiBfX2lubGluZQpAQCAtMjEs
MzIgKzIxLDMyIEBAIGhhc2hfdmFsIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2kKIHsK
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFzc29fdmFsdWVzW10gPQogICAgIHsKLSAg
ICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAs
IDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAx
NDMwLCAxNDMwLCAxNDMwLAotICAgICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQz
MCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAs
IDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAx
NDMwLCAxNDMwLCAxNDMwLCAgICAwLCAxNDMwLCAxNDMwLCAgICAwLCAgICA1LAotICAgICAgICAx
MCwgICAxNSwgICAyMCwgICAyNSwgICAzMCwgICAzNSwgICA0MCwgICAgMCwgMTQzMCwgMTQzMCwK
LSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0
MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMw
LCAxNDMwLCAxNDMwLCAxNDMwLAotICAgICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwg
MTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0
MzAsIDE0MzAsIDE0MzAsIDE0MzAsICAgIDAsICAxODgsICAgMzQsCi0gICAgICAgIDc4LCAgMTcw
LCAgMTg1LCAgMjMwLCAgIDU1LCAgICAwLCAgICA1LCAgIDM0LCAgIDIwLCAgIDc5LAotICAgICAg
ICA4MCwgICAzNSwgICAxNCwgIDE5NSwgICAyNSwgICAgNSwgICAgMCwgIDE2MCwgIDIxMywgIDI0
MCwKLSAgICAgICAyMTAsICAxNDksICAyNDAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAs
IDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAx
NDMwLCAxNDMwLCAxNDMwLCAxNDMwLAotICAgICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQz
MCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAs
IDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAx
NDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLAotICAg
ICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwg
MTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0
MzAsIDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMw
LCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLAotICAgICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwg
MTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0
MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsCi0gICAgICAxNDMw
LCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLAot
ICAgICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQz
MCwgMTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAs
IDE0MzAsIDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAx
NDMwCisgICAgICAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcx
LCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwg
MTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1
NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAxNTcx
LCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwg
MTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgICAgMCwgMTU3MSwgMTU3MSwgICAgMCwgICAgNSwKKyAg
ICAgICAgMTAsICAgMTUsICAgMjAsICAgMjUsICAgMzAsICAgMzUsICAgNDAsICAgIDAsIDE1NzEs
IDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAx
NTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3
MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEs
IDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAx
NTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAgICAwLCAgIDQ0LCAgIDM0LAorICAgICAgICAz
NSwgIDE3MCwgIDIwMCwgICA5NSwgIDI0MCwgICAgMCwgICAgMCwgIDIzNCwgICAyMCwgIDE3OCwK
KyAgICAgICAgODAsICAgMzUsICAgMTQsICAyMDUsICAgMjUsICAgIDUsICAgIDAsICAxNzgsICAy
MDksICAxNjEsCisgICAgICAgMTIzLCAgMTMwLCAgMjUwLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcx
LCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwg
MTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1
NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcx
LCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAg
MTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3
MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEs
IDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAx
NTcxLCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3
MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEs
IDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAx
NTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLAorICAg
ICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwg
MTU3MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1
NzEsIDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcx
LCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwg
MTU3MSwgMTU3MQogICAgIH07CiAgIHJlZ2lzdGVyIGludCBodmFsID0gMDsKIApAQCAtMTA4LDEx
ICsxMDgsMTEgQEAgZmluZFZhbHVlIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZwogewog
ICBlbnVtCiAgICAgewotICAgICAgVE9UQUxfS0VZV09SRFMgPSAyMjgsCisgICAgICBUT1RBTF9L
RVlXT1JEUyA9IDIzMCwKICAgICAgIE1JTl9XT1JEX0xFTkdUSCA9IDMsCiAgICAgICBNQVhfV09S
RF9MRU5HVEggPSAyMSwKICAgICAgIE1JTl9IQVNIX1ZBTFVFID0gMCwKLSAgICAgIE1BWF9IQVNI
X1ZBTFVFID0gMTQyOQorICAgICAgTUFYX0hBU0hfVkFMVUUgPSAxNTcwCiAgICAgfTsKIAogICBz
dGF0aWMgY29uc3Qgc3RydWN0IGNzc192YWx1ZSB3b3JkbGlzdF92YWx1ZVtdID0KQEAgLTEzMSwy
MjAgKzEzMSwyMjIgQEAgZmluZFZhbHVlIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZwog
ICAgICAgeyJydGwiLCBDU1NfVkFMX1JUTH0sCiAgICAgICB7InRvcCIsIENTU19WQUxfVE9QfSwK
ICAgICAgIHsiaXRhbGljIiwgQ1NTX1ZBTF9JVEFMSUN9LAorICAgICAgeyJkaXNjIiwgQ1NTX1ZB
TF9ESVNDfSwKKyAgICAgIHsic29saWQiLCBDU1NfVkFMX1NPTElEfSwKICAgICAgIHsicG9ydHJh
aXQiLCBDU1NfVkFMX1BPUlRSQUlUfSwKICAgICAgIHsiY3Jvc3MiLCBDU1NfVkFMX0NST1NTfSwK
ICAgICAgIHsiY3JvcCIsIENTU19WQUxfQ1JPUH0sCi0gICAgICB7ImRpc2MiLCBDU1NfVkFMX0RJ
U0N9LAotICAgICAgeyJ0aGljayIsIENTU19WQUxfVEhJQ0t9LAotICAgICAgeyJzbWFsbCIsIENT
U19WQUxfU01BTEx9LAotICAgICAgeyJ0aGluIiwgQ1NTX1ZBTF9USElOfSwKLSAgICAgIHsic29s
aWQiLCBDU1NfVkFMX1NPTElEfSwKKyAgICAgIHsiYm9sZCIsIENTU19WQUxfQk9MRH0sCiAgICAg
ICB7InNjcm9sbCIsIENTU19WQUxfU0NST0xMfSwKLSAgICAgIHsia2F0YWthbmEiLCBDU1NfVkFM
X0tBVEFLQU5BfSwKICAgICAgIHsiaWNvbiIsIENTU19WQUxfSUNPTn0sCisgICAgICB7IndhaXQi
LCBDU1NfVkFMX1dBSVR9LAogICAgICAgeyJjYXB0aW9uIiwgQ1NTX1ZBTF9DQVBUSU9OfSwKLSAg
ICAgIHsic21hbGwtY2FwcyIsIENTU19WQUxfU01BTExfQ0FQU30sCi0gICAgICB7ImNyb3NzaGFp
ciIsIENTU19WQUxfQ1JPU1NIQUlSfSwKICAgICAgIHsidGVhbCIsIENTU19WQUxfVEVBTH0sCi0g
ICAgICB7ImF1dG8iLCBDU1NfVkFMX0FVVE99LAotICAgICAgeyJjb21wYWN0IiwgQ1NTX1ZBTF9D
T01QQUNUfSwKKyAgICAgIHsic2Nyb2xsYmFyIiwgQ1NTX1ZBTF9TQ1JPTExCQVJ9LAogICAgICAg
eyJwcmUiLCBDU1NfVkFMX1BSRX0sCi0gICAgICB7ImhhbmQiLCBDU1NfVkFMX0hBTkR9LAotICAg
ICAgeyJub3JtYWwiLCBDU1NfVkFMX05PUk1BTH0sCi0gICAgICB7IndhaXQiLCBDU1NfVkFMX1dB
SVR9LAotICAgICAgeyJtYXJvb24iLCBDU1NfVkFMX01BUk9PTn0sCi0gICAgICB7Imluc2V0Iiwg
Q1NTX1ZBTF9JTlNFVH0sCi0gICAgICB7ImhlbHAiLCBDU1NfVkFMX0hFTFB9LAotICAgICAgeyJr
YXRha2FuYS1pcm9oYSIsIENTU19WQUxfS0FUQUtBTkFfSVJPSEF9LAotICAgICAgeyJsaW1lIiwg
Q1NTX1ZBTF9MSU1FfSwKKyAgICAgIHsiYXV0byIsIENTU19WQUxfQVVUT30sCisgICAgICB7InNt
YWxsIiwgQ1NTX1ZBTF9TTUFMTH0sCisgICAgICB7InN1YiIsIENTU19WQUxfU1VCfSwKICAgICAg
IHsicmVkIiwgQ1NTX1ZBTF9SRUR9LAotICAgICAgeyJsaXN0LWl0ZW0iLCBDU1NfVkFMX0xJU1Rf
SVRFTX0sCi0gICAgICB7ImJsYWNrIiwgQ1NTX1ZBTF9CTEFDS30sCi0gICAgICB7ImJvdGgiLCBD
U1NfVkFMX0JPVEh9LAotICAgICAgeyJjaXJjbGUiLCBDU1NfVkFMX0NJUkNMRX0sCi0gICAgICB7
InNtYWxsLWNhcHRpb24iLCBDU1NfVkFMX1NNQUxMX0NBUFRJT059LAotICAgICAgeyJtaXgiLCBD
U1NfVkFMX01JWH0sCisgICAgICB7InRhYmxlIiwgQ1NTX1ZBTF9UQUJMRX0sCisgICAgICB7Imdy
YXkiLCBDU1NfVkFMX0dSQVl9LAorICAgICAgeyJpbnNldCIsIENTU19WQUxfSU5TRVR9LAorICAg
ICAgeyJzdGF0dXMtYmFyIiwgQ1NTX1ZBTF9TVEFUVVNfQkFSfSwKICAgICAgIHsibG91ZCIsIENT
U19WQUxfTE9VRH0sCi0gICAgICB7ImNvbGxhcHNlIiwgQ1NTX1ZBTF9DT0xMQVBTRX0sCi0gICAg
ICB7ImhpZGUiLCBDU1NfVkFMX0hJREV9LAotICAgICAgeyJyaWdodCIsIENTU19WQUxfUklHSFR9
LAotICAgICAgeyJibG9jayIsIENTU19WQUxfQkxPQ0t9LAotICAgICAgeyJzbWFsbGVyIiwgQ1NT
X1ZBTF9TTUFMTEVSfSwKLSAgICAgIHsiYm9sZCIsIENTU19WQUxfQk9MRH0sCi0gICAgICB7ImJs
aW5rIiwgQ1NTX1ZBTF9CTElOS30sCi0gICAgICB7InBvaW50ZXIiLCBDU1NfVkFMX1BPSU5URVJ9
LAorICAgICAgeyJkb3R0ZWQiLCBDU1NfVkFMX0RPVFRFRH0sCisgICAgICB7InNtYWxsLWNhcHMi
LCBDU1NfVkFMX1NNQUxMX0NBUFN9LAogICAgICAgeyJhdm9pZCIsIENTU19WQUxfQVZPSUR9LAot
ICAgICAgeyJpbmhlcml0IiwgQ1NTX1ZBTF9JTkhFUklUfSwKKyAgICAgIHsiY2lyY2xlIiwgQ1NT
X1ZBTF9DSVJDTEV9LAogICAgICAgeyJpbnNpZGUiLCBDU1NfVkFMX0lOU0lERX0sCi0gICAgICB7
Ingtc21hbGwiLCBDU1NfVkFMX1hfU01BTEx9LAotICAgICAgeyJzaG93IiwgQ1NTX1ZBTF9TSE9X
fSwKICAgICAgIHsiYm90dG9tIiwgQ1NTX1ZBTF9CT1RUT019LAotICAgICAgeyJydW4taW4iLCBD
U1NfVkFMX1JVTl9JTn0sCisgICAgICB7InRleHQiLCBDU1NfVkFMX1RFWFR9LAorICAgICAgeyJj
b21wYWN0IiwgQ1NTX1ZBTF9DT01QQUNUfSwKKyAgICAgIHsiY29sbGFwc2UiLCBDU1NfVkFMX0NP
TExBUFNFfSwKKyAgICAgIHsibWl4IiwgQ1NTX1ZBTF9NSVh9LAorICAgICAgeyJkaXNhYmxlZCIs
IENTU19WQUxfRElTQUJMRUR9LAorICAgICAgeyJsYXJnZSIsIENTU19WQUxfTEFSR0V9LAorICAg
ICAgeyJub3dyYXAiLCBDU1NfVkFMX05PV1JBUH0sCisgICAgICB7ImFsd2F5cyIsIENTU19WQUxf
QUxXQVlTfSwKKyAgICAgIHsiYm90aCIsIENTU19WQUxfQk9USH0sCisgICAgICB7InRoaW4iLCBD
U1NfVkFMX1RISU59LAorICAgICAgeyJwb2ludGVyIiwgQ1NTX1ZBTF9QT0lOVEVSfSwKKyAgICAg
IHsicmlkZ2UiLCBDU1NfVkFMX1JJREdFfSwKKyAgICAgIHsiYm9sZGVyIiwgQ1NTX1ZBTF9CT0xE
RVJ9LAorICAgICAgeyJibGFjayIsIENTU19WQUxfQkxBQ0t9LAorICAgICAgeyJsYXJnZXIiLCBD
U1NfVkFMX0xBUkdFUn0sCisgICAgICB7Im5vcm1hbCIsIENTU19WQUxfTk9STUFMfSwKKyAgICAg
IHsidGV4dC10b3AiLCBDU1NfVkFMX1RFWFRfVE9QfSwKKyAgICAgIHsieC1zbWFsbCIsIENTU19W
QUxfWF9TTUFMTH0sCiAgICAgICB7ImlubGluZSIsIENTU19WQUxfSU5MSU5FfSwKLSAgICAgIHsi
c2Nyb2xsYmFyIiwgQ1NTX1ZBTF9TQ1JPTExCQVJ9LAotICAgICAgeyJzdWIiLCBDU1NfVkFMX1NV
Qn0sCi0gICAgICB7ImFxdWEiLCBDU1NfVkFMX0FRVUF9LAotICAgICAgeyJkb3R0ZWQiLCBDU1Nf
VkFMX0RPVFRFRH0sCisgICAgICB7Im1hcm9vbiIsIENTU19WQUxfTUFST09OfSwKKyAgICAgIHsi
aGFuZCIsIENTU19WQUxfSEFORH0sCisgICAgICB7ImxhbmRzY2FwZSIsIENTU19WQUxfTEFORFND
QVBFfSwKKyAgICAgIHsicmlnaHQiLCBDU1NfVkFMX1JJR0hUfSwKKyAgICAgIHsicnVuLWluIiwg
Q1NTX1ZBTF9SVU5fSU59LAogICAgICAgeyJub25lIiwgQ1NTX1ZBTF9OT05FfSwKLSAgICAgIHsi
b3V0c2V0IiwgQ1NTX1ZBTF9PVVRTRVR9LAotICAgICAgeyJzdXBlciIsIENTU19WQUxfU1VQRVJ9
LAotICAgICAgeyJsZWZ0IiwgQ1NTX1ZBTF9MRUZUfSwKLSAgICAgIHsidGFibGUiLCBDU1NfVkFM
X1RBQkxFfSwKKyAgICAgIHsiYmxvY2siLCBDU1NfVkFMX0JMT0NLfSwKKyAgICAgIHsibGltZSIs
IENTU19WQUxfTElNRX0sCisgICAgICB7ImNyb3NzaGFpciIsIENTU19WQUxfQ1JPU1NIQUlSfSwK
KyAgICAgIHsibGlzdC1pdGVtIiwgQ1NTX1ZBTF9MSVNUX0lURU19LAorICAgICAgeyJwcm9ncmVz
cyIsIENTU19WQUxfUFJPR1JFU1N9LAorICAgICAgeyJibGluayIsIENTU19WQUxfQkxJTkt9LAog
ICAgICAgeyJyZXBlYXQiLCBDU1NfVkFMX1JFUEVBVH0sCi0gICAgICB7InRleHQiLCBDU1NfVkFM
X1RFWFR9LAotICAgICAgeyJkZWNpbWFsIiwgQ1NTX1ZBTF9ERUNJTUFMfSwKLSAgICAgIHsic3Rh
dHVzLWJhciIsIENTU19WQUxfU1RBVFVTX0JBUn0sCisgICAgICB7ImFxdWEiLCBDU1NfVkFMX0FR
VUF9LAogICAgICAgeyJzZXBhcmF0ZSIsIENTU19WQUxfU0VQQVJBVEV9LAotICAgICAgeyJzZXJp
ZiIsIENTU19WQUxfU0VSSUZ9LAotICAgICAgeyJkYXNoZWQiLCBDU1NfVkFMX0RBU0hFRH0sCi0g
ICAgICB7ImhpcmFnYW5hIiwgQ1NTX1ZBTF9ISVJBR0FOQX0sCi0gICAgICB7Im5vd3JhcCIsIENT
U19WQUxfTk9XUkFQfSwKKyAgICAgIHsic21hbGwtY2FwdGlvbiIsIENTU19WQUxfU01BTExfQ0FQ
VElPTn0sCisgICAgICB7Im91dHNldCIsIENTU19WQUxfT1VUU0VUfSwKKyAgICAgIHsibGVmdCIs
IENTU19WQUxfTEVGVH0sCisgICAgICB7IndpZGVyIiwgQ1NTX1ZBTF9XSURFUn0sCisgICAgICB7
InN1cGVyIiwgQ1NTX1ZBTF9TVVBFUn0sCisgICAgICB7InRhYmxlLWNhcHRpb24iLCBDU1NfVkFM
X1RBQkxFX0NBUFRJT059LAogICAgICAgeyJ0cmFuc3BhcmVudCIsIENTU19WQUxfVFJBTlNQQVJF
TlR9LAotICAgICAgeyJsYW5kc2NhcGUiLCBDU1NfVkFMX0xBTkRTQ0FQRX0sCi0gICAgICB7InB1
cnBsZSIsIENTU19WQUxfUFVSUExFfSwKLSAgICAgIHsiZ3JheSIsIENTU19WQUxfR1JBWX0sCi0g
ICAgICB7ImFsd2F5cyIsIENTU19WQUxfQUxXQVlTfSwKKyAgICAgIHsic2VyaWYiLCBDU1NfVkFM
X1NFUklGfSwKKyAgICAgIHsib3JhbmdlIiwgQ1NTX1ZBTF9PUkFOR0V9LAorICAgICAgeyJsb3dl
ciIsIENTU19WQUxfTE9XRVJ9LAorICAgICAgeyJibHVlIiwgQ1NTX1ZBTF9CTFVFfSwKICAgICAg
IHsiZmFudGFzeSIsIENTU19WQUxfRkFOVEFTWX0sCi0gICAgICB7Im1pZGRsZSIsIENTU19WQUxf
TUlERExFfSwKLSAgICAgIHsidGV4dC10b3AiLCBDU1NfVkFMX1RFWFRfVE9QfSwKLSAgICAgIHsi
c2lsdmVyIiwgQ1NTX1ZBTF9TSUxWRVJ9LAotICAgICAgeyJhcm1lbmlhbiIsIENTU19WQUxfQVJN
RU5JQU59LAotICAgICAgeyJvbGl2ZSIsIENTU19WQUxfT0xJVkV9LAotICAgICAgeyJmdWNoc2lh
IiwgQ1NTX1ZBTF9GVUNIU0lBfSwKKyAgICAgIHsic21hbGxlciIsIENTU19WQUxfU01BTExFUn0s
CiAgICAgICB7Im5hdnkiLCBDU1NfVkFMX05BVll9LAotICAgICAgeyJsYXJnZSIsIENTU19WQUxf
TEFSR0V9LAorICAgICAgeyJncmV5IiwgQ1NTX1ZBTF9HUkVZfSwKKyAgICAgIHsicHVycGxlIiwg
Q1NTX1ZBTF9QVVJQTEV9LAogICAgICAgeyJvdXRzaWRlIiwgQ1NTX1ZBTF9PVVRTSURFfSwKLSAg
ICAgIHsibW9ub3NwYWNlIiwgQ1NTX1ZBTF9NT05PU1BBQ0V9LAotICAgICAgeyJoaWRkZW4iLCBD
U1NfVkFMX0hJRERFTn0sCi0gICAgICB7IndoaXRlIiwgQ1NTX1ZBTF9XSElURX0sCi0gICAgICB7
ImxhcmdlciIsIENTU19WQUxfTEFSR0VSfSwKLSAgICAgIHsidXBwZXItYWxwaGEiLCBDU1NfVkFM
X1VQUEVSX0FMUEhBfSwKLSAgICAgIHsic2Fucy1zZXJpZiIsIENTU19WQUxfU0FOU19TRVJJRn0s
Ci0gICAgICB7ImNhcGl0YWxpemUiLCBDU1NfVkFMX0NBUElUQUxJWkV9LAorICAgICAgeyJzaWx2
ZXIiLCBDU1NfVkFMX1NJTFZFUn0sCisgICAgICB7ImJlbG93IiwgQ1NTX1ZBTF9CRUxPV30sCisg
ICAgICB7IngtbGFyZ2UiLCBDU1NfVkFMX1hfTEFSR0V9LAorICAgICAgeyJvbGl2ZSIsIENTU19W
QUxfT0xJVkV9LAorICAgICAgeyJkZWNpbWFsIiwgQ1NTX1ZBTF9ERUNJTUFMfSwKKyAgICAgIHsi
bWlkZGxlIiwgQ1NTX1ZBTF9NSURETEV9LAorICAgICAgeyJoaXJhZ2FuYSIsIENTU19WQUxfSElS
QUdBTkF9LAorICAgICAgeyJzaG93IiwgQ1NTX1ZBTF9TSE9XfSwKKyAgICAgIHsiaGVscCIsIENT
U19WQUxfSEVMUH0sCisgICAgICB7ImhpZGUiLCBDU1NfVkFMX0hJREV9LAorICAgICAgeyJ2aXNp
YmxlIiwgQ1NTX1ZBTF9WSVNJQkxFfSwKKyAgICAgIHsiYWJzb2x1dGUiLCBDU1NfVkFMX0FCU09M
VVRFfSwKKyAgICAgIHsidGFibGUtcm93IiwgQ1NTX1ZBTF9UQUJMRV9ST1d9LAorICAgICAgeyJj
YXB0aW9udGV4dCIsIENTU19WQUxfQ0FQVElPTlRFWFR9LAorICAgICAgeyJhYm92ZSIsIENTU19W
QUxfQUJPVkV9LAorICAgICAgeyJ4eC1zbWFsbCIsIENTU19WQUxfWFhfU01BTEx9LAorICAgICAg
eyJ3aW5kb3ciLCBDU1NfVkFMX1dJTkRPV30sCisgICAgICB7InRhYmxlLWNlbGwiLCBDU1NfVkFM
X1RBQkxFX0NFTEx9LAogICAgICAgeyJjZW50ZXIiLCBDU1NfVkFMX0NFTlRFUn0sCi0gICAgICB7
InVwcGVyLWxhdGluIiwgQ1NTX1ZBTF9VUFBFUl9MQVRJTn0sCisgICAgICB7ImRvdWJsZSIsIENT
U19WQUxfRE9VQkxFfSwKICAgICAgIHsiaW52ZXJ0IiwgQ1NTX1ZBTF9JTlZFUlR9LAotICAgICAg
eyJtZW51IiwgQ1NTX1ZBTF9NRU5VfSwKLSAgICAgIHsibG93ZXIiLCBDU1NfVkFMX0xPV0VSfSwK
KyAgICAgIHsiZGFzaGVkIiwgQ1NTX1ZBTF9EQVNIRUR9LAorICAgICAgeyJjYXBpdGFsaXplIiwg
Q1NTX1ZBTF9DQVBJVEFMSVpFfSwKKyAgICAgIHsiYmFzZWxpbmUiLCBDU1NfVkFMX0JBU0VMSU5F
fSwKKyAgICAgIHsic2Fucy1zZXJpZiIsIENTU19WQUxfU0FOU19TRVJJRn0sCiAgICAgICB7Im5v
LXJlcGVhdCIsIENTU19WQUxfTk9fUkVQRUFUfSwKLSAgICAgIHsibW92ZSIsIENTU19WQUxfTU9W
RX0sCi0gICAgICB7ImxpZ2h0ZXIiLCBDU1NfVkFMX0xJR0hURVJ9LAotICAgICAgeyJyaWRnZSIs
IENTU19WQUxfUklER0V9LAotICAgICAgeyJqdXN0aWZ5IiwgQ1NTX1ZBTF9KVVNUSUZZfSwKLSAg
ICAgIHsiaGlyYWdhbmEtaXJvaGEiLCBDU1NfVkFMX0hJUkFHQU5BX0lST0hBfSwKLSAgICAgIHsi
cHJvZ3Jlc3MiLCBDU1NfVkFMX1BST0dSRVNTfSwKLSAgICAgIHsid2lkZXIiLCBDU1NfVkFMX1dJ
REVSfSwKLSAgICAgIHsiYm9sZGVyIiwgQ1NTX1ZBTF9CT0xERVJ9LAotICAgICAgeyJyZXBlYXQt
eSIsIENTU19WQUxfUkVQRUFUX1l9LAotICAgICAgeyJoaWdoZXIiLCBDU1NfVkFMX0hJR0hFUn0s
Ci0gICAgICB7ImJsdWUiLCBDU1NfVkFMX0JMVUV9LAotICAgICAgeyIta29ucS1hdXRvIiwgQ1NT
X1ZBTF9fS09OUV9BVVRPfSwKLSAgICAgIHsib3JhbmdlIiwgQ1NTX1ZBTF9PUkFOR0V9LAotICAg
ICAgeyJ0YWJsZS1jYXB0aW9uIiwgQ1NTX1ZBTF9UQUJMRV9DQVBUSU9OfSwKLSAgICAgIHsiY2Fw
dGlvbnRleHQiLCBDU1NfVkFMX0NBUFRJT05URVhUfSwKLSAgICAgIHsieHgtc21hbGwiLCBDU1Nf
VkFMX1hYX1NNQUxMfSwKLSAgICAgIHsic3F1YXJlIiwgQ1NTX1ZBTF9TUVVBUkV9LAotICAgICAg
eyJtZWRpdW0iLCBDU1NfVkFMX01FRElVTX0sCi0gICAgICB7ImdyZXkiLCBDU1NfVkFMX0dSRVl9
LAotICAgICAgeyJhYnNvbHV0ZSIsIENTU19WQUxfQUJTT0xVVEV9LAotICAgICAgeyJsb3dlci1h
bHBoYSIsIENTU19WQUxfTE9XRVJfQUxQSEF9LAotICAgICAgeyJhY3RpdmVjYXB0aW9uIiwgQ1NT
X1ZBTF9BQ1RJVkVDQVBUSU9OfSwKLSAgICAgIHsiLWtvbnEtbm9ybWFsIiwgQ1NTX1ZBTF9fS09O
UV9OT1JNQUx9LAotICAgICAgeyJhcHB3b3Jrc3BhY2UiLCBDU1NfVkFMX0FQUFdPUktTUEFDRX0s
CisgICAgICB7Imdlb3JnaWFuIiwgQ1NTX1ZBTF9HRU9SR0lBTn0sCisgICAgICB7InVwcGVyLWxh
dGluIiwgQ1NTX1ZBTF9VUFBFUl9MQVRJTn0sCiAgICAgICB7InJlcGVhdC14IiwgQ1NTX1ZBTF9S
RVBFQVRfWH0sCisgICAgICB7InRoaWNrIiwgQ1NTX1ZBTF9USElDS30sCisgICAgICB7InJlcGVh
dC15IiwgQ1NTX1ZBTF9SRVBFQVRfWX0sCiAgICAgICB7Imxvd2VyLWxhdGluIiwgQ1NTX1ZBTF9M
T1dFUl9MQVRJTn0sCi0gICAgICB7InVwcGVyY2FzZSIsIENTU19WQUxfVVBQRVJDQVNFfSwKLSAg
ICAgIHsibGV2ZWwiLCBDU1NfVkFMX0xFVkVMfSwKLSAgICAgIHsidmlzaWJsZSIsIENTU19WQUxf
VklTSUJMRX0sCi0gICAgICB7InJlbGF0aXZlIiwgQ1NTX1ZBTF9SRUxBVElWRX0sCisgICAgICB7
Imp1c3RpZnkiLCBDU1NfVkFMX0pVU1RJRll9LAorICAgICAgeyJpbmhlcml0IiwgQ1NTX1ZBTF9J
TkhFUklUfSwKKyAgICAgIHsiZW5hYmxlZCIsIENTU19WQUxfRU5BQkxFRH0sCiAgICAgICB7Im5h
cnJvd2VyIiwgQ1NTX1ZBTF9OQVJST1dFUn0sCi0gICAgICB7InVwcGVyLXJvbWFuIiwgQ1NTX1ZB
TF9VUFBFUl9ST01BTn0sCi0gICAgICB7ImFib3ZlIiwgQ1NTX1ZBTF9BQk9WRX0sCi0gICAgICB7
ImN1cnNpdmUiLCBDU1NfVkFMX0NVUlNJVkV9LAotICAgICAgeyJkZWZhdWx0IiwgQ1NTX1ZBTF9E
RUZBVUxUfSwKLSAgICAgIHsicy1yZXNpemUiLCBDU1NfVkFMX1NfUkVTSVpFfSwKLSAgICAgIHsi
dGFibGUtY2VsbCIsIENTU19WQUxfVEFCTEVfQ0VMTH0sCi0gICAgICB7ImJhc2VsaW5lIiwgQ1NT
X1ZBTF9CQVNFTElORX0sCi0gICAgICB7InllbGxvdyIsIENTU19WQUxfWUVMTE9XfSwKICAgICAg
IHsiZml4ZWQiLCBDU1NfVkFMX0ZJWEVEfSwKLSAgICAgIHsiaGlnaGxpZ2h0IiwgQ1NTX1ZBTF9I
SUdITElHSFR9LAotICAgICAgeyJkb3VibGUiLCBDU1NfVkFMX0RPVUJMRX0sCi0gICAgICB7ImJl
bG93IiwgQ1NTX1ZBTF9CRUxPV30sCi0gICAgICB7IngtbGFyZ2UiLCBDU1NfVkFMX1hfTEFSR0V9
LAotICAgICAgeyJpbmFjdGl2ZWNhcHRpb24iLCBDU1NfVkFMX0lOQUNUSVZFQ0FQVElPTn0sCi0g
ICAgICB7ImlubGluZS1ibG9jayIsIENTU19WQUxfSU5MSU5FX0JMT0NLfSwKLSAgICAgIHsid2lu
ZG93IiwgQ1NTX1ZBTF9XSU5ET1d9LAorICAgICAgeyJhcm1lbmlhbiIsIENTU19WQUxfQVJNRU5J
QU59LAorICAgICAgeyJ5ZWxsb3ciLCBDU1NfVkFMX1lFTExPV30sCiAgICAgICB7ImdyZWVuIiwg
Q1NTX1ZBTF9HUkVFTn0sCi0gICAgICB7InRhYmxlLXJvdyIsIENTU19WQUxfVEFCTEVfUk9XfSwK
LSAgICAgIHsiaW5mb3RleHQiLCBDU1NfVkFMX0lORk9URVhUfSwKLSAgICAgIHsiZW1iZWQiLCBD
U1NfVkFMX0VNQkVEfSwKLSAgICAgIHsibi1yZXNpemUiLCBDU1NfVkFMX05fUkVTSVpFfSwKLSAg
ICAgIHsibG93ZXJjYXNlIiwgQ1NTX1ZBTF9MT1dFUkNBU0V9LAorICAgICAgeyJncmF5dGV4dCIs
IENTU19WQUxfR1JBWVRFWFR9LAorICAgICAgeyJrYXRha2FuYSIsIENTU19WQUxfS0FUQUtBTkF9
LAorICAgICAgeyJsaWdodGVyIiwgQ1NTX1ZBTF9MSUdIVEVSfSwKKyAgICAgIHsibW9ub3NwYWNl
IiwgQ1NTX1ZBTF9NT05PU1BBQ0V9LAorICAgICAgeyJ4eC1sYXJnZSIsIENTU19WQUxfWFhfTEFS
R0V9LAorICAgICAgeyJoaWRkZW4iLCBDU1NfVkFMX0hJRERFTn0sCiAgICAgICB7Imdyb292ZSIs
IENTU19WQUxfR1JPT1ZFfSwKLSAgICAgIHsibG93ZXItcm9tYW4iLCBDU1NfVkFMX0xPV0VSX1JP
TUFOfSwKLSAgICAgIHsib3ZlcmxpbmUiLCBDU1NfVkFMX09WRVJMSU5FfSwKLSAgICAgIHsiY2pr
LWlkZW9ncmFwaGljIiwgQ1NTX1ZBTF9DSktfSURFT0dSQVBISUN9LAotICAgICAgeyJ0ZXh0LWJv
dHRvbSIsIENTU19WQUxfVEVYVF9CT1RUT019LAotICAgICAgeyIta29ucS10ZXh0IiwgQ1NTX1ZB
TF9fS09OUV9URVhUfSwKKyAgICAgIHsid2hpdGUiLCBDU1NfVkFMX1dISVRFfSwKKyAgICAgIHsi
YWN0aXZlY2FwdGlvbiIsIENTU19WQUxfQUNUSVZFQ0FQVElPTn0sCisgICAgICB7InNxdWFyZSIs
IENTU19WQUxfU1FVQVJFfSwKICAgICAgIHsiaW5saW5lLXRhYmxlIiwgQ1NTX1ZBTF9JTkxJTkVf
VEFCTEV9LAorICAgICAgeyJ0ZXh0LWJvdHRvbSIsIENTU19WQUxfVEVYVF9CT1RUT019LAorICAg
ICAgeyJsZXZlbCIsIENTU19WQUxfTEVWRUx9LAorICAgICAgeyJtb3ZlIiwgQ1NTX1ZBTF9NT1ZF
fSwKKyAgICAgIHsicmVsYXRpdmUiLCBDU1NfVkFMX1JFTEFUSVZFfSwKKyAgICAgIHsiZW1iZWQi
LCBDU1NfVkFMX0VNQkVEfSwKKyAgICAgIHsiZGVmYXVsdCIsIENTU19WQUxfREVGQVVMVH0sCisg
ICAgICB7Im1lbnUiLCBDU1NfVkFMX01FTlV9LAorICAgICAgeyJpbmZvdGV4dCIsIENTU19WQUxf
SU5GT1RFWFR9LAorICAgICAgeyJ1cHBlcmNhc2UiLCBDU1NfVkFMX1VQUEVSQ0FTRX0sCisgICAg
ICB7Imxvd2VyY2FzZSIsIENTU19WQUxfTE9XRVJDQVNFfSwKKyAgICAgIHsiY3Vyc2l2ZSIsIENT
U19WQUxfQ1VSU0lWRX0sCisgICAgICB7InMtcmVzaXplIiwgQ1NTX1ZBTF9TX1JFU0laRX0sCisg
ICAgICB7ImV4cGFuZGVkIiwgQ1NTX1ZBTF9FWFBBTkRFRH0sCisgICAgICB7ImJ1dHRvbnRleHQi
LCBDU1NfVkFMX0JVVFRPTlRFWFR9LAogICAgICAgeyJjb25kZW5zZWQiLCBDU1NfVkFMX0NPTkRF
TlNFRH0sCi0gICAgICB7Ii1rb25xLW5vd3JhcCIsIENTU19WQUxfX0tPTlFfTk9XUkFQfSwKICAg
ICAgIHsib2JsaXF1ZSIsIENTU19WQUxfT0JMSVFVRX0sCi0gICAgICB7Imdlb3JnaWFuIiwgQ1NT
X1ZBTF9HRU9SR0lBTn0sCi0gICAgICB7ImUtcmVzaXplIiwgQ1NTX1ZBTF9FX1JFU0laRX0sCisg
ICAgICB7ImluYWN0aXZlY2FwdGlvbiIsIENTU19WQUxfSU5BQ1RJVkVDQVBUSU9OfSwKKyAgICAg
IHsiZnVjaHNpYSIsIENTU19WQUxfRlVDSFNJQX0sCisgICAgICB7InVwcGVyLWFscGhhIiwgQ1NT
X1ZBTF9VUFBFUl9BTFBIQX0sCisgICAgICB7Imxvd2VyLWFscGhhIiwgQ1NTX1ZBTF9MT1dFUl9B
TFBIQX0sCisgICAgICB7Im4tcmVzaXplIiwgQ1NTX1ZBTF9OX1JFU0laRX0sCisgICAgICB7ImFw
cHdvcmtzcGFjZSIsIENTU19WQUxfQVBQV09SS1NQQUNFfSwKKyAgICAgIHsib3ZlcmxpbmUiLCBD
U1NfVkFMX09WRVJMSU5FfSwKKyAgICAgIHsiaW5saW5lLWJsb2NrIiwgQ1NTX1ZBTF9JTkxJTkVf
QkxPQ0t9LAorICAgICAgeyJ1cHBlci1yb21hbiIsIENTU19WQUxfVVBQRVJfUk9NQU59LAorICAg
ICAgeyJsb3dlci1yb21hbiIsIENTU19WQUxfTE9XRVJfUk9NQU59LAorICAgICAgeyJtZWRpdW0i
LCBDU1NfVkFMX01FRElVTX0sCisgICAgICB7ImhpcmFnYW5hLWlyb2hhIiwgQ1NTX1ZBTF9ISVJB
R0FOQV9JUk9IQX0sCisgICAgICB7ImJ1dHRvbmZhY2UiLCBDU1NfVkFMX0JVVFRPTkZBQ0V9LAor
ICAgICAgeyJhY3RpdmVib3JkZXIiLCBDU1NfVkFMX0FDVElWRUJPUkRFUn0sCisgICAgICB7ImJp
ZGktb3ZlcnJpZGUiLCBDU1NfVkFMX0JJRElfT1ZFUlJJREV9LAogICAgICAgeyJ1bmRlcmxpbmUi
LCBDU1NfVkFMX1VOREVSTElORX0sCi0gICAgICB7ImdyYXl0ZXh0IiwgQ1NTX1ZBTF9HUkFZVEVY
VH0sCi0gICAgICB7InNlLXJlc2l6ZSIsIENTU19WQUxfU0VfUkVTSVpFfSwKICAgICAgIHsidGFi
bGUtY29sdW1uIiwgQ1NTX1ZBTF9UQUJMRV9DT0xVTU59LAotICAgICAgeyIta29ucS1ib2R5Iiwg
Q1NTX1ZBTF9fS09OUV9CT0RZfSwKLSAgICAgIHsiZXhwYW5kZWQiLCBDU1NfVkFMX0VYUEFOREVE
fSwKLSAgICAgIHsiLWtvbnEtY2VudGVyIiwgQ1NTX1ZBTF9fS09OUV9DRU5URVJ9LAotICAgICAg
eyJjbG9zZS1xdW90ZSIsIENTU19WQUxfQ0xPU0VfUVVPVEV9LAotICAgICAgeyJsaW5lLXRocm91
Z2giLCBDU1NfVkFMX0xJTkVfVEhST1VHSH0sCi0gICAgICB7ImJ1dHRvbnRleHQiLCBDU1NfVkFM
X0JVVFRPTlRFWFR9LAotICAgICAgeyJoZWJyZXciLCBDU1NfVkFMX0hFQlJFV30sCisgICAgICB7
ImJhY2tncm91bmQiLCBDU1NfVkFMX0JBQ0tHUk9VTkR9LAorICAgICAgeyJ3aW5kb3d0ZXh0Iiwg
Q1NTX1ZBTF9XSU5ET1dURVhUfSwKKyAgICAgIHsiLWtvbnEtYXV0byIsIENTU19WQUxfX0tPTlFf
QVVUT30sCisgICAgICB7ImhpZ2hlciIsIENTU19WQUxfSElHSEVSfSwKICAgICAgIHsidy1yZXNp
emUiLCBDU1NfVkFMX1dfUkVTSVpFfSwKLSAgICAgIHsiYnV0dG9uZmFjZSIsIENTU19WQUxfQlVU
VE9ORkFDRX0sCiAgICAgICB7InN3LXJlc2l6ZSIsIENTU19WQUxfU1dfUkVTSVpFfSwKLSAgICAg
IHsib3Blbi1xdW90ZSIsIENTU19WQUxfT1BFTl9RVU9URX0sCi0gICAgICB7Im5lLXJlc2l6ZSIs
IENTU19WQUxfTkVfUkVTSVpFfSwKLSAgICAgIHsiYmFja2dyb3VuZCIsIENTU19WQUxfQkFDS0dS
T1VORH0sCi0gICAgICB7Inh4LWxhcmdlIiwgQ1NTX1ZBTF9YWF9MQVJHRX0sCi0gICAgICB7Im1l
bnV0ZXh0IiwgQ1NTX1ZBTF9NRU5VVEVYVH0sCisgICAgICB7ImUtcmVzaXplIiwgQ1NTX1ZBTF9F
X1JFU0laRX0sCisgICAgICB7InNlLXJlc2l6ZSIsIENTU19WQUxfU0VfUkVTSVpFfSwKKyAgICAg
IHsiLWtvbnEtYm9keSIsIENTU19WQUxfX0tPTlFfQk9EWX0sCisgICAgICB7InRhYmxlLXJvdy1n
cm91cCIsIENTU19WQUxfVEFCTEVfUk9XX0dST1VQfSwKKyAgICAgIHsiaGVicmV3IiwgQ1NTX1ZB
TF9IRUJSRVd9LAogICAgICAgeyJidXR0b25zaGFkb3ciLCBDU1NfVkFMX0JVVFRPTlNIQURPV30s
Ci0gICAgICB7InRocmVlZGZhY2UiLCBDU1NfVkFMX1RIUkVFREZBQ0V9LAotICAgICAgeyJ0aHJl
ZWRzaGFkb3ciLCBDU1NfVkFMX1RIUkVFRFNIQURPV30sCisgICAgICB7Im1lc3NhZ2UtYm94Iiwg
Q1NTX1ZBTF9NRVNTQUdFX0JPWH0sCisgICAgICB7ImluYWN0aXZlYm9yZGVyIiwgQ1NTX1ZBTF9J
TkFDVElWRUJPUkRFUn0sCisgICAgICB7Ii1rb25xLXRleHQiLCBDU1NfVkFMX19LT05RX1RFWFR9
LAorICAgICAgeyJrYXRha2FuYS1pcm9oYSIsIENTU19WQUxfS0FUQUtBTkFfSVJPSEF9LAorICAg
ICAgeyJ1bHRyYS1leHBhbmRlZCIsIENTU19WQUxfVUxUUkFfRVhQQU5ERUR9LAorICAgICAgeyJj
bG9zZS1xdW90ZSIsIENTU19WQUxfQ0xPU0VfUVVPVEV9LAogICAgICAgeyJudy1yZXNpemUiLCBD
U1NfVkFMX05XX1JFU0laRX0sCiAgICAgICB7InVsdHJhLWNvbmRlbnNlZCIsIENTU19WQUxfVUxU
UkFfQ09OREVOU0VEfSwKLSAgICAgIHsiYWN0aXZlYm9yZGVyIiwgQ1NTX1ZBTF9BQ1RJVkVCT1JE
RVJ9LAotICAgICAgeyJuby1jbG9zZS1xdW90ZSIsIENTU19WQUxfTk9fQ0xPU0VfUVVPVEV9LAot
ICAgICAgeyIta29ucS1hcm91bmQtZmxvYXRzIiwgQ1NTX1ZBTF9fS09OUV9BUk9VTkRfRkxPQVRT
fSwKLSAgICAgIHsibm8tb3Blbi1xdW90ZSIsIENTU19WQUxfTk9fT1BFTl9RVU9URX0sCi0gICAg
ICB7ImJpZGktb3ZlcnJpZGUiLCBDU1NfVkFMX0JJRElfT1ZFUlJJREV9LAotICAgICAgeyJzZW1p
LWNvbmRlbnNlZCIsIENTU19WQUxfU0VNSV9DT05ERU5TRUR9LAotICAgICAgeyJ1bHRyYS1leHBh
bmRlZCIsIENTU19WQUxfVUxUUkFfRVhQQU5ERUR9LAotICAgICAgeyJpbmFjdGl2ZWJvcmRlciIs
IENTU19WQUxfSU5BQ1RJVkVCT1JERVJ9LAotICAgICAgeyJoaWdobGlnaHR0ZXh0IiwgQ1NTX1ZB
TF9ISUdITElHSFRURVhUfSwKKyAgICAgIHsiLWtvbnEtbm93cmFwIiwgQ1NTX1ZBTF9fS09OUV9O
T1dSQVB9LAorICAgICAgeyJuZS1yZXNpemUiLCBDU1NfVkFMX05FX1JFU0laRX0sCisgICAgICB7
Im9wZW4tcXVvdGUiLCBDU1NfVkFMX09QRU5fUVVPVEV9LAorICAgICAgeyIta29ucS1ub3JtYWwi
LCBDU1NfVkFMX19LT05RX05PUk1BTH0sCisgICAgICB7Im1lbnV0ZXh0IiwgQ1NTX1ZBTF9NRU5V
VEVYVH0sCisgICAgICB7ImNqay1pZGVvZ3JhcGhpYyIsIENTU19WQUxfQ0pLX0lERU9HUkFQSElD
fSwKKyAgICAgIHsiaGlnaGxpZ2h0IiwgQ1NTX1ZBTF9ISUdITElHSFR9LAorICAgICAgeyJleHRy
YS1leHBhbmRlZCIsIENTU19WQUxfRVhUUkFfRVhQQU5ERUR9LAogICAgICAgeyJpbmFjdGl2ZWNh
cHRpb250ZXh0IiwgQ1NTX1ZBTF9JTkFDVElWRUNBUFRJT05URVhUfSwKLSAgICAgIHsidGhyZWVk
ZGFya3NoYWRvdyIsIENTU19WQUxfVEhSRUVEREFSS1NIQURPV30sCi0gICAgICB7IndpbmRvd3Rl
eHQiLCBDU1NfVkFMX1dJTkRPV1RFWFR9LAorICAgICAgeyJleHRyYS1jb25kZW5zZWQiLCBDU1Nf
VkFMX0VYVFJBX0NPTkRFTlNFRH0sCisgICAgICB7Im5vLWNsb3NlLXF1b3RlIiwgQ1NTX1ZBTF9O
T19DTE9TRV9RVU9URX0sCiAgICAgICB7InNlbWktZXhwYW5kZWQiLCBDU1NfVkFMX1NFTUlfRVhQ
QU5ERUR9LAotICAgICAgeyJtZXNzYWdlLWJveCIsIENTU19WQUxfTUVTU0FHRV9CT1h9LAotICAg
ICAgeyJidXR0b25oaWdobGlnaHQiLCBDU1NfVkFMX0JVVFRPTkhJR0hMSUdIVH0sCi0gICAgICB7
Imxvd2VyLWdyZWVrIiwgQ1NTX1ZBTF9MT1dFUl9HUkVFS30sCisgICAgICB7InNlbWktY29uZGVu
c2VkIiwgQ1NTX1ZBTF9TRU1JX0NPTkRFTlNFRH0sCisgICAgICB7Im5vLW9wZW4tcXVvdGUiLCBD
U1NfVkFMX05PX09QRU5fUVVPVEV9LAorICAgICAgeyIta29ucS1jZW50ZXIiLCBDU1NfVkFMX19L
T05RX0NFTlRFUn0sCisgICAgICB7InRocmVlZGZhY2UiLCBDU1NfVkFMX1RIUkVFREZBQ0V9LAog
ICAgICAgeyJ3aW5kb3dmcmFtZSIsIENTU19WQUxfV0lORE9XRlJBTUV9LAotICAgICAgeyJleHRy
YS1jb25kZW5zZWQiLCBDU1NfVkFMX0VYVFJBX0NPTkRFTlNFRH0sCi0gICAgICB7InRhYmxlLXJv
dy1ncm91cCIsIENTU19WQUxfVEFCTEVfUk9XX0dST1VQfSwKLSAgICAgIHsidGhyZWVkaGlnaGxp
Z2h0IiwgQ1NTX1ZBTF9USFJFRURISUdITElHSFR9LAorICAgICAgeyJ0YWJsZS1mb290ZXItZ3Jv
dXAiLCBDU1NfVkFMX1RBQkxFX0ZPT1RFUl9HUk9VUH0sCiAgICAgICB7ImluZm9iYWNrZ3JvdW5k
IiwgQ1NTX1ZBTF9JTkZPQkFDS0dST1VORH0sCi0gICAgICB7ImV4dHJhLWV4cGFuZGVkIiwgQ1NT
X1ZBTF9FWFRSQV9FWFBBTkRFRH0sCi0gICAgICB7InRocmVlZGxpZ2h0c2hhZG93IiwgQ1NTX1ZB
TF9USFJFRURMSUdIVFNIQURPV30sCisgICAgICB7ImxpbmUtdGhyb3VnaCIsIENTU19WQUxfTElO
RV9USFJPVUdIfSwKKyAgICAgIHsibG93ZXItZ3JlZWsiLCBDU1NfVkFMX0xPV0VSX0dSRUVLfSwK
ICAgICAgIHsidGFibGUtY29sdW1uLWdyb3VwIiwgQ1NTX1ZBTF9UQUJMRV9DT0xVTU5fR1JPVVB9
LAotICAgICAgeyJ0YWJsZS1mb290ZXItZ3JvdXAiLCBDU1NfVkFMX1RBQkxFX0ZPT1RFUl9HUk9V
UH0sCisgICAgICB7InRocmVlZHNoYWRvdyIsIENTU19WQUxfVEhSRUVEU0hBRE9XfSwKKyAgICAg
IHsiLWtvbnEtYXJvdW5kLWZsb2F0cyIsIENTU19WQUxfX0tPTlFfQVJPVU5EX0ZMT0FUU30sCiAg
ICAgICB7InRhYmxlLWhlYWRlci1ncm91cCIsIENTU19WQUxfVEFCTEVfSEVBREVSX0dST1VQfSwK
LSAgICAgIHsiLWtvbnEtYmFzZWxpbmUtbWlkZGxlIiwgQ1NTX1ZBTF9fS09OUV9CQVNFTElORV9N
SURETEV9LAorICAgICAgeyJoaWdobGlnaHR0ZXh0IiwgQ1NTX1ZBTF9ISUdITElHSFRURVhUfSwK
ICAgICAgIHsiLWtvbnEteHh4LWxhcmdlIiwgQ1NTX1ZBTF9fS09OUV9YWFhfTEFSR0V9LAotICAg
ICAgeyJkZWNpbWFsLWxlYWRpbmctemVybyIsIENTU19WQUxfREVDSU1BTF9MRUFESU5HX1pFUk99
CisgICAgICB7ImJ1dHRvbmhpZ2hsaWdodCIsIENTU19WQUxfQlVUVE9OSElHSExJR0hUfSwKKyAg
ICAgIHsiZGVjaW1hbC1sZWFkaW5nLXplcm8iLCBDU1NfVkFMX0RFQ0lNQUxfTEVBRElOR19aRVJP
fSwKKyAgICAgIHsidGhyZWVkZGFya3NoYWRvdyIsIENTU19WQUxfVEhSRUVEREFSS1NIQURPV30s
CisgICAgICB7InRocmVlZGxpZ2h0c2hhZG93IiwgQ1NTX1ZBTF9USFJFRURMSUdIVFNIQURPV30s
CisgICAgICB7Ii1rb25xLWJhc2VsaW5lLW1pZGRsZSIsIENTU19WQUxfX0tPTlFfQkFTRUxJTkVf
TUlERExFfSwKKyAgICAgIHsidGhyZWVkaGlnaGxpZ2h0IiwgQ1NTX1ZBTF9USFJFRURISUdITElH
SFR9CiAgICAgfTsKIAogICBzdGF0aWMgY29uc3Qgc2hvcnQgbG9va3VwW10gPQpAQCAtMzU0LDE2
OSArMzU2LDE2NiBAQCBmaW5kVmFsdWUgKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnCiAg
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgICA0LCAgIC0xLCAgIC0xLCAgIC0xLAogICAg
ICAgICAtMSwgICAgNSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAgNiwgICAtMSwKICAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgIDcsICAgLTEsICAgLTEsICAgLTEsICAgIDgsCi0gICAgICAg
ICA5LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAtMjc1LCAtMjE4LCAgIC0yLAorICAgICAgICAg
OSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgLTI3NywgLTIyMCwgICAtMiwKICAgICAgICAgLTEs
ICAgMTIsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgMTMsICAgLTEsCiAgICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEs
ICAgMTQsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAxNSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgMTYsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIDE3LCAgIC0xLCAgIC0xLCAg
IC0xLCAgIDE4LCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIDE5LCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAyMCwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgMjEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAyMiwgICAtMSwgICAyMywgICAtMSwgICAt
MSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAy
NCwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLAorICAgICAgICAyNSwgICAyNiwgICAtMSwgICAtMSwgICAtMSwgICAyNywgICAtMSwgICAt
MSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgMjgs
CisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIDI5LCAgIC0xLCAgIC0xLCAgIDMwLCAgIC0xLAor
ICAgICAgICAtMSwgICAtMSwgICAzMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAg
ICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAg
ICAgIC0xLCAgIC0xLCAgIDMyLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDMzLAorICAgICAg
ICAtMSwgICAzNCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgMzUsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0x
LCAgIC0xLCAgIC0xLCAgIDM2LCAgIDM3LCAgIC0xLCAgIC0xLCAgIDM4LAorICAgICAgICAtMSwg
ICAtMSwgICAtMSwgICAzOSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAg
LTEsICAgNDAsICAgLTEsICAgNDEsICAgNDIsICAgLTEsICAgNDMsCisgICAgICAgIC0xLCAgIC0x
LCAgIDQ0LCAgIC0xLCAgIC0xLCAgIDQ1LCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICA0NiwgICA0NywgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAg
LTEsICAgNDgsICAgNDksICAgLTEsICAgLTEsICAgNTAsCisgICAgICAgIDUxLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIDUyLCAgIDUzLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICA1NCwgICAtMSwg
ICAtMSwgICA1NSwgICAtMSwgICAtMSwgICA1NiwKKyAgICAgICAgLTEsICAgLTEsICAgNTcsICAg
LTEsICAgLTEsICAgLTEsICAgNTgsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIDU5LCAgIC0x
LCAgIC0xLCAgIC0xLCAgIDYwLCAgIC0xLAorICAgICAgICAtMSwgICA2MSwgICAtMSwgICA2Miwg
ICAtMSwgICAtMSwgICA2MywgICAtMSwKKyAgICAgICAgNjQsICAgLTEsICAgLTEsICAgNjUsICAg
LTEsICAgNjYsICAgLTEsICAgNjcsCisgICAgICAgIDY4LCAgIDY5LCAgIC0xLCAgIC0xLCAgIC0x
LCAgIDcwLCAgIDcxLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICA3MiwgICA3MywgICAtMSwg
ICAtMSwgICAtMSwgICA3NCwKKyAgICAgICAgNzUsICAgLTEsICAgNzYsICAgLTEsICAgNzcsICAg
LTEsICAgNzgsICAgNzksCisgICAgICAgIDgwLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDgx
LCAgIC0xLCAgIDgyLAorICAgICAgICA4MywgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA4NCwg
ICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgODUsICAgODYsICAgLTEsICAg
LTEsICAgODcsCisgICAgICAgIC0xLCAgIC0xLCAgIDg4LCAgIDg5LCAgIDkwLCAgIDkxLCAgIC0x
LCAgIDkyLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA5MywgICA5NCwg
ICAtMSwKKyAgICAgICAgLTEsICAgOTUsICAgOTYsICAgLTEsICAgLTEsICAgOTcsICAgOTgsICAg
LTEsCisgICAgICAgIDk5LCAgMTAwLCAgIC0xLCAgIC0xLCAgMTAxLCAgMTAyLCAgIC0xLCAgIC0x
LAorICAgICAgIDEwMywgICAtMSwgICAtMSwgICAtMSwgIDEwNCwgICAtMSwgICAtMSwgIDEwNSwK
KyAgICAgICAxMDYsICAgLTEsICAxMDcsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisg
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTA4LCAgIC0xLCAgIC0xLAorICAg
ICAgIDEwOSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDExMCwgIDExMSwKKyAgICAg
ICAgLTEsICAgLTEsICAxMTIsICAgLTEsICAxMTMsICAxMTQsICAgLTEsICAgLTEsCisgICAgICAg
MTE1LCAgMTE2LCAgMTE3LCAgIC0xLCAgIC0xLCAgIC0xLCAgMTE4LCAgIC0xLAorICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgIDExOSwgIDEyMCwgIDEyMSwgICAtMSwKKyAgICAgICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAxMjIsICAxMjMsICAgLTEsICAxMjQsCisgICAgICAgIC0xLCAg
MTI1LCAgIC0xLCAgMTI2LCAgIC0xLCAgIC0xLCAgIC0xLCAgMTI3LAorICAgICAgICAtMSwgIDEy
OCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAxMjksICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAxMzAsICAgLTEsICAgLTEsCisgICAgICAgMTMxLCAgIC0xLCAg
IC0xLCAgIC0xLCAgMTMyLCAgIC0xLCAgIC0xLCAgMTMzLAorICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgIDEzNCwgICAtMSwgIDEzNSwgIDEzNiwKKyAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAxMzcsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgMTM4LCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgIDEzOSwgICAtMSwgIDE0
MCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAxNDEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAxNDIsCisgICAgICAgMTQzLCAgMTQ0LCAgIC0xLCAgIC0xLCAg
IC0xLCAgMTQ1LCAgIC0xLCAgIC0xLAorICAgICAgIDE0NiwgICAtMSwgIDE0NywgICAtMSwgICAt
MSwgIDE0OCwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAxNDksICAgLTEs
ICAgLTEsICAxNTAsICAgLTEsCisgICAgICAgMTUxLCAgIC0xLCAgMTUyLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE1MywgIDE1
NCwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAxNTUsICAgLTEsICAxNTYsICAgLTEsICAgLTEs
ICAxNTcsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE1OCwgICAtMSwgICAt
MSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxNTksICAgLTEsICAgLTEs
ICAgLTEsCisgICAgICAgMTYwLCAgMTYxLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
Ci0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIDE0LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAot
ICAgICAgICAxNSwgICAtMSwgICAtMSwgICAtMSwgICAxNiwgICAtMSwgICAtMSwgICAtMSwKLSAg
ICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgMTcsICAgLTEsICAgLTEsCi0gICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIDE4LCAgIDE5LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAyMCwKLSAgICAgICAg
LTEsICAgLTEsICAgMjEsICAgMjIsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDIzLCAgIDI0LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAg
LTEsICAgLTEsICAgMjUsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAyNiwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgMjcsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgMjgsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0x
LCAgIDI5LCAgIDMwLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgMzEsICAgLTEsICAg
LTEsICAgLTEsICAgMzIsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgMzMsCi0gICAgICAgIDM0LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAzNSwgICAzNiwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgMzcsICAgLTEsICAg
LTEsICAgLTEsICAgMzgsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDM5
LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICA0MCwgICA0MSwgICAtMSwgICA0MiwgICAtMSwg
ICA0MywgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgNDQsICAgLTEsICAgLTEsICAg
LTEsICAgNDUsCi0gICAgICAgIC0xLCAgIDQ2LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDQ3LCAgIC0x
LCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICA0OCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICA0OSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgNTAsICAg
NTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDUy
LAotICAgICAgICAtMSwgICA1MywgICA1NCwgICAtMSwgICA1NSwgICAtMSwgICA1NiwgICAtMSwK
LSAgICAgICAgLTEsICAgLTEsICAgNTcsICAgLTEsICAgLTEsICAgNTgsICAgNTksICAgNjAsCi0g
ICAgICAgIC0xLCAgIDYxLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAg
ICAgICAtMSwgICA2MiwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA2MywgICAtMSwKLSAgICAg
ICAgNjQsICAgNjUsICAgLTEsICAgNjYsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAg
IC0xLCAgIDY3LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDY4LCAgIC0xLCAgIC0xLAotICAgICAgICAt
MSwgICAtMSwgICA2OSwgICAtMSwgICAtMSwgICAtMSwgICA3MCwgICA3MSwKLSAgICAgICAgLTEs
ICAgLTEsICAgNzIsICAgNzMsICAgNzQsICAgNzUsICAgLTEsICAgNzYsCi0gICAgICAgIDc3LCAg
IDc4LCAgIDc5LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDgwLCAgIC0xLAotICAgICAgICAtMSwgICAt
MSwgICA4MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA4MiwKLSAgICAgICAgLTEsICAgODMs
ICAgLTEsICAgODQsICAgODUsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDg2LCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAt
MSwgICA4NywgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgODgsICAgLTEs
ICAgLTEsICAgLTEsICAgODksICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIDkwLCAgIDkxLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIDkyLCAgIDkzLAotICAgICAgICAtMSwgICAtMSwgICA5NCwgICAt
MSwgICAtMSwgICA5NSwgICAtMSwgICAtMSwKLSAgICAgICAgOTYsICAgLTEsICAgLTEsICAgLTEs
ICAgOTcsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIDk4LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICA5OSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgIDEwMCwgICAtMSwKLSAgICAgICAxMDEsICAgLTEsICAgLTEsICAxMDIsICAgLTEs
ICAgLTEsICAxMDMsICAxMDQsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMTA1LCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAotICAgICAgIDEwNiwgIDEwNywgIDEwOCwgICAtMSwgICAtMSwgICAt
MSwgIDEwOSwgICAtMSwKLSAgICAgICAgLTEsICAxMTAsICAgLTEsICAgLTEsICAxMTEsICAgLTEs
ICAgLTEsICAxMTIsCi0gICAgICAgMTEzLCAgMTE0LCAgIC0xLCAgIC0xLCAgIC0xLCAgMTE1LCAg
IC0xLCAgIC0xLAotICAgICAgICAtMSwgIDExNiwgICAtMSwgICAtMSwgIDExNywgICAtMSwgICAt
MSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsCi0gICAgICAgMTE4LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
MTE5LAotICAgICAgICAtMSwgICAtMSwgIDEyMCwgIDEyMSwgIDEyMiwgIDEyMywgICAtMSwgIDEy
NCwKLSAgICAgICAxMjUsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
Ci0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMTI2LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAot
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDEyNywgICAtMSwKLSAg
ICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxMjgsICAgLTEsCi0gICAg
ICAgIC0xLCAgIC0xLCAgMTI5LCAgMTMwLCAgMTMxLCAgIC0xLCAgIC0xLCAgMTMyLAotICAgICAg
ICAtMSwgIDEzMywgICAtMSwgICAtMSwgICAtMSwgIDEzNCwgIDEzNSwgICAtMSwKLSAgICAgICAx
MzYsICAxMzcsICAgLTEsICAgLTEsICAxMzgsICAgLTEsICAxMzksICAgLTEsCi0gICAgICAgMTQw
LCAgIC0xLCAgMTQxLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTQyLCAgMTQzLAotICAgICAgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE0NCwgICAtMSwgIDE0NSwKLSAgICAgICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxNDYsICAgLTEsCi0gICAgICAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgIDE0Nywg
IDE0OCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAg
LTEsICAxNDksICAgLTEsICAxNTAsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0x
LCAgMTUxLCAgIC0xLCAgMTUyLCAgIC0xLCAgMTUzLAotICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgIDE1NCwgIDE1NSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgMTU2LCAgIC0xLCAgMTU3
LCAgIC0xLCAgIC0xLCAgMTU4LCAgIC0xLAotICAgICAgIDE1OSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgIDE2MCwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAxNjEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMTYyLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE2Mywg
IDE2NCwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAxNjUsICAxNjYsICAgLTEsICAgLTEsICAx
NjcsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTY4LCAgIC0x
LCAgIC0xLCAgIC0xLAotICAgICAgIDE2OSwgICAtMSwgIDE3MCwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAxNzEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTYzLCAgIC0x
LCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxNjQsICAgLTEsICAgLTEsICAg
LTEsCisgICAgICAgIC0xLCAgIC0xLCAgMTY1LCAgIC0xLCAgIC0xLCAgMTY2LCAgIC0xLCAgIC0x
LAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE2NywgICAtMSwgIDE2OCwK
ICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisg
ICAgICAgIC0xLCAgMTY5LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAg
ICAgICAtMSwgICAtMSwgICAtMSwgIDE3MCwgIDE3MSwgIDE3MiwgICAtMSwgICAtMSwKKyAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAxNzMsICAxNzQsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTc1LCAgMTc2LAorICAgICAgIDE3
NywgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE3OCwgICAtMSwgIDE3OSwKKyAgICAgICAgLTEs
ICAgLTEsICAxODAsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTgxLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAt
MSwgIDE4MiwgICAtMSwgICAtMSwgICAtMSwgIDE4MywgICAtMSwKKyAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAxODQsICAgLTEsICAgLTEsICAxODUsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAg
MTg2LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgIDE4
NywgICAtMSwgICAtMSwgIDE4OCwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgMTcyLCAgIC0xLCAgMTczLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgIDE3NCwgICAtMSwgICAtMSwgIDE3NSwKLSAgICAgICAxNzYsICAxNzcsICAxNzgsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgMTc5LCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgIDE4MCwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAxODksICAgLTEsICAxOTAsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgIDE4MSwKLSAgICAgICAxODIsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAxODMsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgMTkxLAorICAgICAgIDE5MiwgICAtMSwgIDE5MywgICAtMSwgIDE5NCwgICAtMSwgICAt
MSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxOTUsICAgLTEs
ICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMTk2LCAgIC0xLCAgMTk3LCAgMTk4LCAg
IC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAxODQsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
Ci0gICAgICAgMTg1LCAgIC0xLCAgMTg2LCAgIC0xLCAgMTg3LCAgIC0xLCAgIC0xLCAgMTg4LAot
ICAgICAgICAtMSwgICAtMSwgICAtMSwgIDE4OSwgIDE5MCwgICAtMSwgICAtMSwgICAtMSwKLSAg
ICAgICAxOTEsICAxOTIsICAgLTEsICAgLTEsICAgLTEsICAxOTMsICAgLTEsICAgLTEsCi0gICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTk0LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE5NSwKKyAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxOTksCisgICAgICAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgMjAwLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwg
ICAtMSwgICAtMSwgIDIwMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgMjAyLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxOTYsCisgICAgICAgIC0xLCAgIC0xLCAgMjAz
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAyMDQsICAgLTEsICAg
LTEsICAgLTEsICAyMDUsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgIDE5NywgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgIDE5OCwKLSAgICAgICAgLTEsICAgLTEsICAxOTksICAyMDAsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgMjA2LCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgMjA3LAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMDgsICAg
LTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgIDIwMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAy
MDIsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMjAz
LCAgIC0xLAotICAgICAgIDIwNCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMDksICAgLTEsICAg
LTEsCisgICAgICAgIC0xLCAgIC0xLCAgMjEwLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
LSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMDUsICAgLTEsICAgLTEsCiAg
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAg
ICAgICAtMSwgICAtMSwgIDIwNiwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAg
ICAgLTEsICAyMDcsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgIDIw
OCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAyMDks
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMTAsICAyMTEsICAgLTEsCisgICAgICAgIC0xLCAg
MjExLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgIDIxMiwgIDIxMywgIDIxNCwgICAtMSwKICAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAyMTUsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAg
MjE2LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAyMTIsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIx
MywgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAyMTQsCisgICAgICAgIC0xLCAgMjE3LCAgMjE4LCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIxOSwgICAt
MSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMjE1LCAgIC0xLCAg
IC0xLCAgMjE2LAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIx
NywgIDIxOCwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIxOSwgICAtMSwgICAtMSwgICAt
MSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
CiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAor
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIyMCwKICAg
ICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIyMCwgICAtMSwgICAtMSwKICAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgMjIx
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwg
IDIyMiwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAyMjEsICAgLTEsICAyMjIsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgIDIyMywgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAy
MjMsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMjI0LCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMjI0LCAgIC0xLCAgIC0x
LCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIyNSwgICAtMSwg
ICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
QEAgLTUyNCwxMCArNTIzLDMxIEBAIGZpbmRWYWx1ZSAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3Ry
LCByZWcKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
LSAgICAgICAgLTEsICAgLTEsICAyMjUsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAg
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAg
ICAgICAtMSwgICAtMSwgICAtMSwgIDIyNiwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMjcKKyAgICAgICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAyMjYsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgMjI3LAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAyMjgsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
KyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisg
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAg
ICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAt
MSwgICAtMSwgIDIyOQogICAgIH07CiAKICAgaWYgKGxlbiA8PSBNQVhfV09SRF9MRU5HVEggJiYg
bGVuID49IE1JTl9XT1JEX0xFTkdUSCkKQEAgLTc5NCw2ICs4MTQsOCBAQCBzdGF0aWMgY29uc3Qg
Y2hhciAqIGNvbnN0IHZhbHVlTGlzdFtdID0gCiAiLWtvbnEtbm93cmFwIiwgCiAiLWtvbnEtbm9y
bWFsIiwgCiAiLWtvbnEtYXJvdW5kLWZsb2F0cyIsIAorImVuYWJsZWQiLCAKKyJkaXNhYmxlZCIs
IAogICAgIDAKIH07CiBET01TdHJpbmcgZ2V0VmFsdWVOYW1lKHVuc2lnbmVkIHNob3J0IGlkKQpA
QCAtODAyLDUgKzgyNCw1IEBAIERPTVN0cmluZyBnZXRWYWx1ZU5hbWUodW5zaWduZWQgc2hvcnQg
aWQKICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKICAgICBlbHNlCiAgICAgICByZXR1cm4gRE9N
U3RyaW5nKHZhbHVlTGlzdFtpZF0pOwotfQorfTsKIApJbmRleDogY3NzL2Nzc3ZhbHVlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2Nzcy9jc3N2YWx1ZXMu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMgpkaWZmIC11IC1wIC1yMS4zMiBjc3N2YWx1ZXMu
aAotLS0gY3NzL2Nzc3ZhbHVlcy5oCTE3IEFwciAyMDAzIDE2OjA3OjQ0IC0wMDAwCTEuMzIKKysr
IGNzcy9jc3N2YWx1ZXMuaAk5IEF1ZyAyMDAzIDAyOjQ0OjU4IC0wMDAwCkBAIC0yMzcsNyArMjM3
LDkgQEAgRE9NOjpET01TdHJpbmcgZ2V0VmFsdWVOYW1lKHVuc2lnbmVkIHNobwogI2RlZmluZSBD
U1NfVkFMX19LT05RX05PV1JBUCAyMjYKICNkZWZpbmUgQ1NTX1ZBTF9fS09OUV9OT1JNQUwgMjI3
CiAjZGVmaW5lIENTU19WQUxfX0tPTlFfQVJPVU5EX0ZMT0FUUyAyMjgKKyNkZWZpbmUgQ1NTX1ZB
TF9FTkFCTEVEIDIyOQorI2RlZmluZSBDU1NfVkFMX0RJU0FCTEVEIDIzMAogCi0jZGVmaW5lIENT
U19WQUxfVE9UQUwgMjI5CisjZGVmaW5lIENTU19WQUxfVE9UQUwgMjMxCiAjZW5kaWYKIApJbmRl
eDogY3NzL2Nzc3ZhbHVlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGli
cy9raHRtbC9jc3MvY3NzdmFsdWVzLmluLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYg
LXUgLXAgLXIxLjMxIGNzc3ZhbHVlcy5pbgotLS0gY3NzL2Nzc3ZhbHVlcy5pbgkxNyBBcHIgMjAw
MyAxNjowNzo0NCAtMDAwMAkxLjMxCisrKyBjc3MvY3NzdmFsdWVzLmluCTkgQXVnIDIwMDMgMDI6
NDQ6NTggLTAwMDAKQEAgLTMxNSw2ICszMTUsMTAgQEAgdW5kZXJsaW5lCiAjIENTU19QUk9QX19L
T05RX0ZMT1dfTU9ERQogLWtvbnEtbm9ybWFsCiAta29ucS1hcm91bmQtZmxvYXRzCisjIENTU19Q
Uk9QX19LT05RX1VTRVJfSU5QVVQKK2VuYWJsZWQKK2Rpc2FibGVkCisjbm9uZQogIwogIyBOb3Qg
c3VwcG9ydGVkIENTUyAyIEF1cmFsIHZhbHVlcwogIwpJbmRleDogY3NzL2h0bWw0LmNzcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9jc3MvaHRtbDQuY3NzLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEwOApkaWZmIC11IC1wIC1yMS4xMDggaHRtbDQuY3NzCi0t
LSBjc3MvaHRtbDQuY3NzCTI1IEp1biAyMDAzIDIyOjMyOjE0IC0wMDAwCTEuMTA4CisrKyBjc3Mv
aHRtbDQuY3NzCTkgQXVnIDIwMDMgMDI6NDQ6NTggLTAwMDAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBh
Y3JvbnltIHsKIAlmb250LXN0eWxlOiBpdGFsaWM7CiB9CiAKLTpmb2N1cyAgICAgICAgICB7IG91
dGxpbmU6IDFweCBkb3R0ZWQgaW52ZXJ0IH0KK2E6Zm9jdXMgICAgICAgICAgeyBvdXRsaW5lOiAx
cHggZG90dGVkIGludmVydCB9CiBhOmxpbms6YWN0aXZlICAgICAgICAgIHsgY29sb3I6IHJlZDsg
b3V0bGluZTogMXB4IGRvdHRlZCBpbnZlcnQ7IH0KIGE6dmlzaXRlZDphY3RpdmUgICAgICAgICAg
eyBjb2xvcjogcmVkOyBvdXRsaW5lOiAxcHggZG90dGVkIGludmVydDsgfQogCkluZGV4OiBkb20v
ZG9tX2RvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwv
ZG9tL2RvbV9kb2MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ5CmRpZmYgLXUgLXAgLXIx
LjQ5IGRvbV9kb2MuY3BwCi0tLSBkb20vZG9tX2RvYy5jcHAJMjEgSnVuIDIwMDMgMjM6MjY6NTEg
LTAwMDAJMS40OQorKysgZG9tL2RvbV9kb2MuY3BwCTkgQXVnIDIwMDMgMDI6NDQ6NTkgLTAwMDAK
QEAgLTQ3Nyw2ICs0NzcsMjAgQEAgdm9pZCBEb2N1bWVudDo6bG9hZFhNTCggY29uc3QgRE9NU3Ry
aW5nIAogICAgIHN0YXRpY19jYXN0PERvY3VtZW50SW1wbCo+KCBpbXBsICktPmxvYWRYTUwoIHNv
dXJjZSApOwogfQogCitib29sIERvY3VtZW50OjpkZXNpZ25Nb2RlKCkgY29uc3QgeworICAgIGlm
ICghaW1wbCkKKyAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJ
RF9TVEFURV9FUlIpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50SW1wbCo+KCBp
bXBsICktPmRlc2lnbk1vZGUoKTsKK30KKwordm9pZCBEb2N1bWVudDo6c2V0RGVzaWduTW9kZShi
b29sIGVuYWJsZSkgeworICAgIGlmICghaW1wbCkKKyAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9u
KERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOworCisgICAgc3RhdGljX2Nhc3Q8RG9j
dW1lbnRJbXBsKj4oIGltcGwgKS0+c2V0RGVzaWduTW9kZSggZW5hYmxlICk7Cit9CisKIERPTVN0
cmluZyBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgRE9NU3RyaW5nJiB1cmwpCiB7CiAgICAg
aWYgKCAhaW1wbCApIHJldHVybiB1cmw7CkluZGV4OiBkb20vZG9tX2RvYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2RvbS9kb21fZG9jLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzMKZGlmZiAtdSAtcCAtcjEuMzMgZG9tX2RvYy5oCi0tLSBkb20vZG9t
X2RvYy5oCTIxIEp1biAyMDAzIDA5OjE0OjUwIC0wMDAwCTEuMzMKKysrIGRvbS9kb21fZG9jLmgJ
OSBBdWcgMjAwMyAwMjo0NTowMCAtMDAwMApAQCAtODU3LDE5ICs4NTcsMzkgQEAgcHVibGljOgog
ICAgICAqIGVuY29kaW5nIGluZm9ybWF0aW9uIGlzIGlnbm9yZWQuIAogICAgICAqIAogICAgICAq
IFRoZSBwYXJhbWV0ZXJzIHVzZWQgaW4gdGhlIERPTVBhcnNlciBpbnRlcmZhY2UgYXJlIGFzc3Vt
ZWQgdG8gaGF2ZSB0aGVpcgotICAgICAqIGRlZmF1bHQgdmFsdWVzIHdoZW4gaW52b2tpbmcgdGhp
cyBtZXRob2QuIAotICAgICAqIAorICAgICAqIGRlZmF1bHQgdmFsdWVzIHdoZW4gaW52b2tpbmcg
dGhpcyBtZXRob2QuCisgICAgICoKICAgICAgKiBUaGUgcmVzdWx0IG9mIGEgY2FsbCB0byB0aGlz
IG1ldGhvZCBpcyB0aGUgc2FtZSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0bwogICAgICAqIERPTVBh
cnNlci5wYXJzZVdpdGhDb250ZXh0IHdpdGggYW4gaW5wdXQgc3RyZWFtIGNvbnRhaW5pbmcgdGhl
IHN0cmluZwogICAgICAqIHBhc3NlZCB0byB0aGlzIGNhbGwsIHRoZSBkb2N1bWVudCBhcyB0aGUg
Y29udGV4dCBub2RlLCBhbmQgdGhlIGFjdGlvbgotICAgICAqIEFDVElPTl9SRVBMQUNFX0NISUxE
UkVOLiAKLSAgICAgKiAKKyAgICAgKiBBQ1RJT05fUkVQTEFDRV9DSElMRFJFTi4KKyAgICAgKgog
ICAgICAqIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBhbiBYTUwgZG9jdW1lbnQu
Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgcGFyc2luZyB0aGUgaW5w
dXQgc3RyaW5nIHN1Y2NlZWRlZCB3aXRob3V0IGVycm9ycywKICAgICAgKiBvdGhlcndpc2UgZmFs
c2UuCiAgICAgICovCiAgICAgdm9pZCBsb2FkWE1MKCBjb25zdCBET01TdHJpbmcgJnNvdXJjZSAp
OworICAgIAorICAgIC8qKgorICAgICAqIG5vdCBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBET00KKyAg
ICAgKgorICAgICAqIERvY3VtZW50cyBhcmUgcmVhZC1vbmx5IGJ5IGRlZmF1bHQsIGJ1dCB0aGV5
IGNhbiBiZSBtYWRlIGVkaXRhYmxlIGJ5CisgICAgICogZW50ZXJpbmcgImRlc2lnbiBtb2RlIi4K
KyAgICAgKgorICAgICAqIEByZXR1cm4gd2hldGhlciB0aGlzIGRvY3VtZW50IGlzIGluIGRlc2ln
biBtb2RlLgorICAgICAqIEBzaW5jZSAzLjIKKyAgICAgKi8KKyAgICBib29sIGRlc2lnbk1vZGUo
KSBjb25zdDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBub3QgcGFydCBvZiB0aGUgb2ZmaWNpYWwg
RE9NCisgICAgICoKKyAgICAgKiBAcGFyYW0gZW5hYmxlIEBwIHRydWUgdG8gZW5hYmxlIGRlc2ln
biBtb2RlLCBAcCBmYWxzZSB0byBkaXNhYmxlLgorICAgICAqIEBzZWUgZGVzaWduTW9kZQorICAg
ICAqIEBzaW5jZSAzLjIKKyAgICAgKi8KKyAgICB2b2lkIHNldERlc2lnbk1vZGUoYm9vbCBlbmFi
bGUpOwogCiAgICAgLyoqCiAgICAgICogbm90IHBhcnQgb2YgdGhlIERPTQpJbmRleDogZG9tL2Rv
bV9lbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRt
bC9kb20vZG9tX2VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQzCmRpZmYgLXUg
LXAgLXIxLjQzIGRvbV9lbGVtZW50LmNwcAotLS0gZG9tL2RvbV9lbGVtZW50LmNwcAkzMCBKdW4g
MjAwMyAyMzo1Mjo1NCAtMDAwMAkxLjQzCisrKyBkb20vZG9tX2VsZW1lbnQuY3BwCTkgQXVnIDIw
MDMgMDI6NDU6MDEgLTAwMDAKQEAgLTM0NCw2ICszNDQsMTggQEAgQ1NTU3R5bGVEZWNsYXJhdGlv
biBFbGVtZW50OjpzdHlsZSgpCiAgICAgcmV0dXJuIDA7CiB9CiAKK2Jvb2wgRWxlbWVudDo6Y29u
dGVudEVkaXRhYmxlKCkgY29uc3QgeworICAgIGlmKCFpbXBsKSByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGltcGwpLT5jb250ZW50RWRpdGFibGUo
KTsKK30KKwordm9pZCBFbGVtZW50OjpzZXRDb250ZW50RWRpdGFibGUoYm9vbCBlbmFibGVkKSB7
CisgICAgaWYoIWltcGwpCisgICAgICAgIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246
OklOVkFMSURfU1RBVEVfRVJSKTsKKworICAgIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGlt
cGwpLT5zZXRDb250ZW50RWRpdGFibGUoZW5hYmxlZCk7Cit9CisKIGJvb2wgRWxlbWVudDo6a2h0
bWxWYWxpZEF0dHJOYW1lKGNvbnN0IERPTVN0cmluZyAmbmFtZSkKIHsKICAgICAvLyBDaGVjayBp
ZiBuYW1lIGlzIHZhbGlkCkluZGV4OiBkb20vZG9tX2VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9kb20vZG9tX2VsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yOApkaWZmIC11IC1wIC1yMS4yOCBkb21fZWxlbWVudC5oCi0tLSBkb20v
ZG9tX2VsZW1lbnQuaAk0IEZlYiAyMDAzIDA2OjMzOjEwIC0wMDAwCTEuMjgKKysrIGRvbS9kb21f
ZWxlbWVudC5oCTkgQXVnIDIwMDMgMDI6NDU6MDEgLTAwMDAKQEAgLTUzNiw2ICs1MzYsMzggQEAg
cHVibGljOgogICAgICAqIFRoZSBzdHlsZSBhdHRyaWJ1dGUKICAgICAgKi8KICAgICBDU1NTdHls
ZURlY2xhcmF0aW9uIHN0eWxlICggICk7CisgICAgCisgICAgLyoqCisgICAgICogbm90IHBhcnQg
b2YgdGhlIG9mZmljaWFsIERPTQorICAgICAqCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCBhbHdh
eXMgcmVmbGVjdCB0aGUgZWRpdGFiaWxpdHkgc2V0dGluZyBvZiB0aGlzCisgICAgICogZWxlbWVu
dCBhcyBzcGVjaWZpZWQgYnkgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgKHRoYXQgbWVhbnMsIGluaGVy
aXRlZCkKKyAgICAgKiBhc3NpZ25tZW50IHRvIGNvbnRlbnRFZGl0YWJsZSBvciB0aGUgcmVzcGVj
dGl2ZSBDU1MgcnVsZSwgZXZlbiBpZgorICAgICAqIGRlc2lnbiBtb2RlIGlzIGFjdGl2ZS4KKyAg
ICAgKgorICAgICAqIEByZXR1cm4gd2hldGhlciB0aGlzIGVsZW1lbnQgaXMgZWRpdGFibGUuCisg
ICAgICogQHNpbmNlIDMuMgorICAgICAqIEBzZWUgc2V0Q29udGVudEVkaXRhYmxlCisgICAgICov
CisgICAgYm9vbCBjb250ZW50RWRpdGFibGUoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIG5v
dCBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBET00KKyAgICAgKgorICAgICAqIFRoaXMgZWxlbWVudCBj
YW4gYmUgbWFkZSBlZGl0YWJsZSBieSBzZXR0aW5nIGl0cyBjb250ZW50RWRpdGFibGUKKyAgICAg
KiBwcm9wZXJ0eSB0byBAcCB0cnVlLiBUaGUgc2V0dGluZyB3aWxsIGJlIGluaGVyaXRlZCB0byBp
dHMgY2hpbGRyZW4KKyAgICAgKiBhcyB3ZWxsLgorICAgICAqCisgICAgICogU2V0dGluZyBvciBj
bGVhcmluZyBjb250ZW50RWRpdGFibGUgd2hlbiBkZXNpZ24gbW9kZSBpcyBhY3RpdmUgd2lsbAor
ICAgICAqIHRha2Ugbm8gZWZmZWN0LiBIb3dldmVyLCBpdHMgc3RhdHVzIHdpbGwgc3RpbGwgYmUg
cHJvcGFnYXRlZCB0byBhbGwKKyAgICAgKiBjaGlsZCBlbGVtZW50cy4KKyAgICAgKgorICAgICAq
IEBwYXJhbSBlbmFibGVkIEBwIHRydWUgdG8gbWFrZSB0aGlzIGVsZW1lbnQgZWRpdGFibGUsIEBw
IGZhbHNlCisgICAgICogb3RoZXJ3aXNlLgorICAgICAqIEBzZWUgRE9NOjpEb2N1bWVudDo6ZGVz
aWduTW9kZQorICAgICAqIEBzaW5jZSAzLjIKKyAgICAgKi8KKyAgICB2b2lkIHNldENvbnRlbnRF
ZGl0YWJsZShib29sIGVuYWJsZWQpOwogCiAgICAgLyoqCiAgICAgICogQGludGVybmFsCkluZGV4
OiBkb20vZG9tX25vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJz
L2todG1sL2RvbS9kb21fbm9kZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDkKZGlmZiAt
dSAtcCAtcjEuNDkgZG9tX25vZGUuY3BwCi0tLSBkb20vZG9tX25vZGUuY3BwCTMwIE1hciAyMDAz
IDIxOjQyOjEzIC0wMDAwCTEuNDkKKysrIGRvbS9kb21fbm9kZS5jcHAJOSBBdWcgMjAwMyAwMjo0
NTowMSAtMDAwMApAQCAtNDEzLDcgKzQxMyw4IEBAIHZvaWQgTm9kZTo6YXBwbHlDaGFuZ2VzKCkK
IHZvaWQgTm9kZTo6Z2V0Q3Vyc29yKGludCBvZmZzZXQsIGludCAmX3gsIGludCAmX3ksIGludCAm
aGVpZ2h0KQogewogICAgIGlmICghaW1wbCkgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlv
bjo6Tk9UX0ZPVU5EX0VSUik7Ci0gICAgaW1wbC0+Z2V0Q3Vyc29yKG9mZnNldCwgX3gsIF95LCBo
ZWlnaHQpOworICAgIGludCBkdW1teTsKKyAgICBpbXBsLT5nZXRDYXJldChvZmZzZXQsIGZhbHNl
LCBfeCwgX3ksIGR1bW15LCBoZWlnaHQpOwogfQogCiBRUmVjdCBOb2RlOjpnZXRSZWN0KCkKSW5k
ZXg6IGRvbS9kb21fbm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJz
L2todG1sL2RvbS9kb21fbm9kZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUg
LXAgLXIxLjMxIGRvbV9ub2RlLmgKLS0tIGRvbS9kb21fbm9kZS5oCTMwIE1hciAyMDAzIDIxOjQy
OjEzIC0wMDAwCTEuMzEKKysrIGRvbS9kb21fbm9kZS5oCTkgQXVnIDIwMDMgMDI6NDU6MDMgLTAw
MDAKQEAgLTg2OSw2ICs4NjksOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBpbmRleCgp
IGNvbnN0OwogICAgIFFTdHJpbmcgdG9IVE1MKCk7CiAgICAgdm9pZCBhcHBseUNoYW5nZXMoKTsK
KyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCB3aXRob3V0IHN1YnN0aXR1dGlvbiBzaW5jZSAz
LjIKKyAgICAgKi8KICAgICB2b2lkIGdldEN1cnNvcihpbnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQg
Jl95LCBpbnQgJmhlaWdodCk7CiAgICAgLyoqCiAgICAgICogbm90IHBhcnQgb2YgdGhlIERPTS4K
SW5kZXg6IGh0bWwvaHRtbHBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2Rl
L2tkZWxpYnMva2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4zMjcKZGlmZiAtdSAtcCAtcjEuMzI3IGh0bWxwYXJzZXIuY3BwCi0tLSBodG1sL2h0bWxwYXJz
ZXIuY3BwCTI0IEp1biAyMDAzIDIxOjU2OjA0IC0wMDAwCTEuMzI3CisrKyBodG1sL2h0bWxwYXJz
ZXIuY3BwCTkgQXVnIDIwMDMgMDI6NDU6MDQgLTAwMDAKQEAgLTEwNDgsNiArMTA0OCw3IEBAIE5v
ZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKICAgICAgICAgYnJlYWs7CiAv
LyB0ZXh0CiAgICAgY2FzZSBJRF9URVhUOgorLy8gICAgICAgIGtkRGVidWcoNjAzNSkgPDwgIklE
X1RFWFQ6IFwiIiA8PCBET01TdHJpbmcodC0+dGV4dCkuc3RyaW5nKCkgPDwgIlwiIiA8PCBlbmRs
OwogICAgICAgICBuID0gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJRF9DT01NRU5UOgpJbmRleDogaHRtbC9odG1sdG9rZW5pemVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvaHRtbC9odG1sdG9r
ZW5pemVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzEKZGlmZiAtdSAtcCAtcjEuNzEgaHRt
bHRva2VuaXplci5oCi0tLSBodG1sL2h0bWx0b2tlbml6ZXIuaAkyMSBKdW4gMjAwMyAwMDozODoy
MyAtMDAwMAkxLjcxCisrKyBodG1sL2h0bWx0b2tlbml6ZXIuaAk5IEF1ZyAyMDAzIDAyOjQ1OjA0
IC0wMDAwCkBAIC0zMjksNyArMzI5LDcgQEAgcHJvdGVjdGVkOgogICAgIGludCBzY3JpcHRTdGFy
dExpbmVubzsKICAgICBpbnQgdGFnU3RhcnRMaW5lbm87CiAKLSNkZWZpbmUgQ0JVRkxFTiAxNAor
I2RlZmluZSBDQlVGTEVOIDIwCiAgICAgY2hhciBjQnVmZmVyW0NCVUZMRU4rMl07CiAgICAgdW5z
aWduZWQgaW50IGNCdWZmZXJQb3M7CiAKSW5kZXg6IG1pc2MvaHRtbGF0dHJzLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvbWlzYy9odG1sYXR0cnMuYyx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZmIC11IC1wIC1yMS4yNyBodG1sYXR0cnMuYwotLS0g
bWlzYy9odG1sYXR0cnMuYwkxNyBNYXkgMjAwMyAyMjoxMjo1OCAtMDAwMAkxLjI3CisrKyBtaXNj
L2h0bWxhdHRycy5jCTkgQXVnIDIwMDMgMDI6NDU6MDUgLTAwMDAKQEAgLTgsNyArOCw3IEBAIHN0
cnVjdCBhdHRycyB7CiAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICBpbnQgaWQ7CiB9OwotLyog
bWF4aW11bSBrZXkgcmFuZ2UgPSA4OTgsIGR1cGxpY2F0ZXMgPSAxICovCisvKiBtYXhpbXVtIGtl
eSByYW5nZSA9IDU0NSwgZHVwbGljYXRlcyA9IDEgKi8KIAogI2lmZGVmIF9fR05VQ19fCiBfX2lu
bGluZQpAQCAtMjIsMzggKzIyLDQwIEBAIGhhc2hfYXR0ciAocmVnaXN0ZXIgY29uc3QgY2hhciAq
c3RyLCByZWcKIHsKICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFzc29fdmFsdWVzW10g
PQogICAgIHsKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCAgIDAsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgIDIwLCAg
MzUsICAgMCwKLSAgICAgIDE5NSwgICAwLCAgMzUsICA0MCwgIDk1LCAgMTUsICAgNSwgIDU1LCAg
IDAsICA3MCwKLSAgICAgICAgMCwgICAwLCAgNDUsICAgMCwgMTg1LCAgMjAsICAxNSwgIDY1LCAg
ODAsICA0MCwKLSAgICAgICAxMCwgMTQwLCAgNDUsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5
MjIsIDkyMiwKLSAgICAgIDkyMiwgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCAgIDAsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgIDQ1LCAgOTUsICAxMCwKKyAgICAgICA1MCwg
ICAwLCAxNTUsICA0MCwgMTIwLCAgNDUsICAgMCwgIDcwLCAgIDAsICA1NSwKKyAgICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgIDI1LCAgIDUsICAgMCwgMTU1LCAxMjUsICA4MCwKKyAgICAgICAgMCwg
MTA1LCAgMTUsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwKKyAgICAgIDU0OCwg
NTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgKICAgICB9OwogICByZWdpc3RlciBpbnQgaHZhbCA9IGxl
bjsKIAogICBzd2l0Y2ggKGh2YWwpCiAgICAgewogICAgICAgZGVmYXVsdDoKKyAgICAgIGNhc2Ug
MTU6CisgICAgICAgIGh2YWwgKz0gYXNzb192YWx1ZXNbKHVuc2lnbmVkIGNoYXIpc3RyWzE0XV07
CiAgICAgICBjYXNlIDE0OgogICAgICAgICBodmFsICs9IGFzc29fdmFsdWVzWyh1bnNpZ25lZCBj
aGFyKXN0clsxM11dOwogICAgICAgY2FzZSAxMzoKQEAgLTk1LDI3OSArOTcsMjMzIEBAIGZpbmRB
dHRyIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2kKIHsKICAgZW51bQogICAgIHsKLSAg
ICAgIFRPVEFMX0tFWVdPUkRTID0gMTQ0LAorICAgICAgVE9UQUxfS0VZV09SRFMgPSAxNDUsCiAg
ICAgICBNSU5fV09SRF9MRU5HVEggPSAyLAotICAgICAgTUFYX1dPUkRfTEVOR1RIID0gMTQsCi0g
ICAgICBNSU5fSEFTSF9WQUxVRSA9IDI0LAotICAgICAgTUFYX0hBU0hfVkFMVUUgPSA5MjEKKyAg
ICAgIE1BWF9XT1JEX0xFTkdUSCA9IDE1LAorICAgICAgTUlOX0hBU0hfVkFMVUUgPSAzLAorICAg
ICAgTUFYX0hBU0hfVkFMVUUgPSA1NDcKICAgICB9OwogCiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
YXR0cnMgd29yZGxpc3RfYXR0cltdID0KICAgICB7Ci0gICAgICB7ImNvbHMiLCBBVFRSX0NPTFN9
LAotICAgICAgeyJjaXRlIiwgQVRUUl9DSVRFfSwKLSAgICAgIHsiY29udGVudCIsIEFUVFJfQ09O
VEVOVH0sCi0gICAgICB7ImFsdCIsIEFUVFJfQUxUfSwKLSAgICAgIHsib25zZWxlY3QiLCBBVFRS
X09OU0VMRUNUfSwKLSAgICAgIHsidGV4dCIsIEFUVFJfVEVYVH0sCi0gICAgICB7InRpdGxlIiwg
QVRUUl9USVRMRX0sCi0gICAgICB7ImxlZnQiLCBBVFRSX0xFRlR9LAotICAgICAgeyJhY3Rpb24i
LCBBVFRSX0FDVElPTn0sCi0gICAgICB7ImZhY2UiLCBBVFRSX0ZBQ0V9LAotICAgICAgeyJsYWJl
bCIsIEFUVFJfTEFCRUx9LAotICAgICAgeyJvYmplY3QiLCBBVFRSX09CSkVDVH0sCiAgICAgICB7
InRvcCIsIEFUVFJfVE9QfSwKLSAgICAgIHsibGFuZyIsIEFUVFJfTEFOR30sCi0gICAgICB7ImNs
YXNzIiwgQVRUUl9DTEFTU30sCi0gICAgICB7ImF4aXMiLCBBVFRSX0FYSVN9LAorICAgICAgeyJ0
ZXh0IiwgQVRUUl9URVhUfSwKKyAgICAgIHsiY29udGVudCIsIEFUVFJfQ09OVEVOVH0sCisgICAg
ICB7ImNvbHMiLCBBVFRSX0NPTFN9LAogICAgICAgeyJzY29wZSIsIEFUVFJfU0NPUEV9LAotICAg
ICAgeyJsaW5rIiwgQVRUUl9MSU5LfSwKLSAgICAgIHsib25jbGljayIsIEFUVFJfT05DTElDS30s
Ci0gICAgICB7ImFsaWduIiwgQVRUUl9BTElHTn0sCi0gICAgICB7InNpemUiLCBBVFRSX1NJWkV9
LAotICAgICAgeyJwbGFpbiIsIEFUVFJfUExBSU59LAotICAgICAgeyJhY2NlcHQiLCBBVFRSX0FD
Q0VQVH0sCi0gICAgICB7InNwYW4iLCBBVFRSX1NQQU59LAotICAgICAgeyJjb2xzcGFuIiwgQVRU
Ul9DT0xTUEFOfSwKLSAgICAgIHsibmFtZSIsIEFUVFJfTkFNRX0sCi0gICAgICB7ImFsaW5rIiwg
QVRUUl9BTElOS30sCi0gICAgICB7InBhZ2V4IiwgQVRUUl9QQUdFWH0sCi0gICAgICB7Im5vc2F2
ZSIsIEFUVFJfTk9TQVZFfSwKLSAgICAgIHsib25mb2N1cyIsIEFUVFJfT05GT0NVU30sCi0gICAg
ICB7ImNlbGxzcGFjaW5nIiwgQVRUUl9DRUxMU1BBQ0lOR30sCi0gICAgICB7InZsaW5rIiwgQVRU
Ul9WTElOS30sCi0gICAgICB7ImNvbXBhY3QiLCBBVFRSX0NPTVBBQ1R9LAotICAgICAgeyJ2YWxp
Z24iLCBBVFRSX1ZBTElHTn0sCi0gICAgICB7Im9uY2hhbmdlIiwgQVRUUl9PTkNIQU5HRX0sCi0g
ICAgICB7ImNoYWxsZW5nZSIsIEFUVFJfQ0hBTExFTkdFfSwKLSAgICAgIHsidW5rbm93biIsIEFU
VFJfVU5LTk9XTn0sCi0gICAgICB7InZhbHVlIiwgQVRUUl9WQUxVRX0sCi0gICAgICB7InZzcGFj
ZSIsIEFUVFJfVlNQQUNFfSwKLSAgICAgIHsiaXNtYXAiLCBBVFRSX0lTTUFQfSwKLSAgICAgIHsi
c3R5bGUiLCBBVFRSX1NUWUxFfSwKLSAgICAgIHsiaHRtbCIsIEFUVFJfSFRNTH0sCi0gICAgICB7
InNoYXBlIiwgQVRUUl9TSEFQRX0sCi0gICAgICB7ImhzcGFjZSIsIEFUVFJfSFNQQUNFfSwKKyAg
ICAgIHsib25zZWxlY3QiLCBBVFRSX09OU0VMRUNUfSwKICAgICAgIHsicmVsIiwgQVRUUl9SRUx9
LAorICAgICAgeyJvbnJlc2V0IiwgQVRUUl9PTlJFU0VUfSwKICAgICAgIHsiY29sb3IiLCBBVFRS
X0NPTE9SfSwKLSAgICAgIHsic2NoZW1lIiwgQVRUUl9TQ0hFTUV9LAotICAgICAgeyJsYW5ndWFn
ZSIsIEFUVFJfTEFOR1VBR0V9LAotICAgICAgeyJjb2RlIiwgQVRUUl9DT0RFfSwKLSAgICAgIHsi
dHlwZSIsIEFUVFJfVFlQRX0sCi0gICAgICB7ImVuY3R5cGUiLCBBVFRSX0VOQ1RZUEV9LAogICAg
ICAgeyJzcmMiLCBBVFRSX1NSQ30sCisgICAgICB7ImFsdCIsIEFUVFJfQUxUfSwKKyAgICAgIHsi
dGl0bGUiLCBBVFRSX1RJVExFfSwKKyAgICAgIHsic3BhbiIsIEFUVFJfU1BBTn0sCisgICAgICB7
ImNpdGUiLCBBVFRSX0NJVEV9LAorICAgICAgeyJjb2RlIiwgQVRUUl9DT0RFfSwKKyAgICAgIHsi
Y29sc3BhbiIsIEFUVFJfQ09MU1BBTn0sCisgICAgICB7InNpemUiLCBBVFRSX1NJWkV9LAorICAg
ICAgeyJjbGFzcyIsIEFUVFJfQ0xBU1N9LAorICAgICAgeyJhY2NlcHQiLCBBVFRSX0FDQ0VQVH0s
CisgICAgICB7InNlbGVjdGVkIiwgQVRUUl9TRUxFQ1RFRH0sCisgICAgICB7InN0YXJ0IiwgQVRU
Ul9TVEFSVH0sCisgICAgICB7Im9uZXJyb3IiLCBBVFRSX09ORVJST1J9LAogICAgICAgeyJjbGVh
ciIsIEFUVFJfQ0xFQVJ9LAorICAgICAgeyJwcm9tcHQiLCBBVFRSX1BST01QVH0sCisgICAgICB7
ImxhbmciLCBBVFRSX0xBTkd9LAorICAgICAgeyJwYWdleCIsIEFUVFJfUEFHRVh9LAorICAgICAg
eyJwbGFpbiIsIEFUVFJfUExBSU59LAorICAgICAgeyJjb29yZHMiLCBBVFRSX0NPT1JEU30sCiAg
ICAgICB7ImlkIiwgQVRUUl9JRH0sCi0gICAgICB7Im11bHRpcGxlIiwgQVRUUl9NVUxUSVBMRX0s
CisgICAgICB7Im5vcmVzaXplIiwgQVRUUl9OT1JFU0laRX0sCisgICAgICB7Im9ucmVzaXplIiwg
QVRUUl9PTlJFU0laRX0sCisgICAgICB7ImF4aXMiLCBBVFRSX0FYSVN9LAogICAgICAgeyJvbmxv
YWQiLCBBVFRSX09OTE9BRH0sCi0gICAgICB7ImZvciIsIEFUVFJfRk9SfSwKLSAgICAgIHsidXNl
bWFwIiwgQVRUUl9VU0VNQVB9LAotICAgICAgeyJvbnJlc2V0IiwgQVRUUl9PTlJFU0VUfSwKLSAg
ICAgIHsib25zdWJtaXQiLCBBVFRSX09OU1VCTUlUfSwKLSAgICAgIHsic2VsZWN0ZWQiLCBBVFRS
X1NFTEVDVEVEfSwKLSAgICAgIHsiYXV0b2NvbXBsZXRlIiwgQVRUUl9BVVRPQ09NUExFVEV9LAot
ICAgICAgeyJvbm1vdXNlb3V0IiwgQVRUUl9PTk1PVVNFT1VUfSwKKyAgICAgIHsibmFtZSIsIEFU
VFJfTkFNRX0sCisgICAgICB7ImFjdGlvbiIsIEFUVFJfQUNUSU9OfSwKKyAgICAgIHsidHlwZSIs
IEFUVFJfVFlQRX0sCisgICAgICB7Im9iamVjdCIsIEFUVFJfT0JKRUNUfSwKKyAgICAgIHsibG9u
Z2Rlc2MiLCBBVFRSX0xPTkdERVNDfSwKICAgICAgIHsicm93cyIsIEFUVFJfUk9XU30sCi0gICAg
ICB7InBhZ2V5IiwgQVRUUl9QQUdFWX0sCisgICAgICB7InN0eWxlIiwgQVRUUl9TVFlMRX0sCisg
ICAgICB7InRhcmdldCIsIEFUVFJfVEFSR0VUfSwKKyAgICAgIHsiei1pbmRleCIsIEFUVFJfWl9J
TkRFWH0sCisgICAgICB7ImxpbmsiLCBBVFRSX0xJTkt9LAorICAgICAgeyJlbmN0eXBlIiwgQVRU
Ul9FTkNUWVBFfSwKKyAgICAgIHsiZGlyIiwgQVRUUl9ESVJ9LAorICAgICAgeyJjb21wYWN0Iiwg
QVRUUl9DT01QQUNUfSwKKyAgICAgIHsic2Nyb2xsaW5nIiwgQVRUUl9TQ1JPTExJTkd9LAorICAg
ICAgeyJhbGlnbiIsIEFUVFJfQUxJR059LAorICAgICAgeyJkZWNsYXJlIiwgQVRUUl9ERUNMQVJF
fSwKKyAgICAgIHsib25jbGljayIsIEFUVFJfT05DTElDS30sCiAgICAgICB7ImRhdGEiLCBBVFRS
X0RBVEF9LAotICAgICAgeyJtYXhsZW5ndGgiLCBBVFRSX01BWExFTkdUSH0sCi0gICAgICB7InN0
YXJ0IiwgQVRUUl9TVEFSVH0sCisgICAgICB7ImxhYmVsIiwgQVRUUl9MQUJFTH0sCisgICAgICB7
InJldiIsIEFUVFJfUkVWfSwKKyAgICAgIHsid3JhcCIsIEFUVFJfV1JBUH0sCisgICAgICB7Imlz
bWFwIiwgQVRUUl9JU01BUH0sCisgICAgICB7Im5vd3JhcCIsIEFUVFJfTk9XUkFQfSwKKyAgICAg
IHsibGVmdCIsIEFUVFJfTEVGVH0sCisgICAgICB7InJvd3NwYW4iLCBBVFRSX1JPV1NQQU59LAor
ICAgICAgeyJhbGluayIsIEFUVFJfQUxJTkt9LAorICAgICAgeyJjZWxsc3BhY2luZyIsIEFUVFJf
Q0VMTFNQQUNJTkd9LAorICAgICAgeyJjbGFzc2lkIiwgQVRUUl9DTEFTU0lEfSwKICAgICAgIHsi
b25hYm9ydCIsIEFUVFJfT05BQk9SVH0sCi0gICAgICB7ImxvbmdkZXNjIiwgQVRUUl9MT05HREVT
Q30sCi0gICAgICB7ImFjY2Vzc2tleSIsIEFUVFJfQUNDRVNTS0VZfSwKLSAgICAgIHsiaGVpZ2h0
IiwgQVRUUl9IRUlHSFR9LAorICAgICAgeyJjb2RldHlwZSIsIEFUVFJfQ09ERVRZUEV9LAorICAg
ICAgeyJzaGFwZSIsIEFUVFJfU0hBUEV9LAogICAgICAgeyJiZ2NvbG9yIiwgQVRUUl9CR0NPTE9S
fSwKLSAgICAgIHsicmV2IiwgQVRUUl9SRVZ9LAotICAgICAgeyJzY3JvbGxpbmciLCBBVFRSX1ND
Uk9MTElOR30sCi0gICAgICB7InotaW5kZXgiLCBBVFRSX1pfSU5ERVh9LAotICAgICAgeyJub3Jl
c2l6ZSIsIEFUVFJfTk9SRVNJWkV9LAotICAgICAgeyJvbnJlc2l6ZSIsIEFUVFJfT05SRVNJWkV9
LAotICAgICAgeyJvbm1vdXNldXAiLCBBVFRSX09OTU9VU0VVUH0sCisgICAgICB7Imh0bWwiLCBB
VFRSX0hUTUx9LAorICAgICAgeyJub3NhdmUiLCBBVFRSX05PU0FWRX0sCisgICAgICB7ImZvciIs
IEFUVFJfRk9SfSwKKyAgICAgIHsiaHNwYWNlIiwgQVRUUl9IU1BBQ0V9LAogICAgICAgeyJydWxl
cyIsIEFUVFJfUlVMRVN9LAotICAgICAgeyJjbGFzc2lkIiwgQVRUUl9DTEFTU0lEfSwKKyAgICAg
IHsidnNwYWNlIiwgQVRUUl9WU1BBQ0V9LAorICAgICAgeyJwYWdleSIsIEFUVFJfUEFHRVl9LAor
ICAgICAgeyJzY2hlbWUiLCBBVFRSX1NDSEVNRX0sCisgICAgICB7Im92ZXJzcmMiLCBBVFRSX09W
RVJTUkN9LAorICAgICAgeyJtZWRpYSIsIEFUVFJfTUVESUF9LAorICAgICAgeyJib3JkZXIiLCBB
VFRSX0JPUkRFUn0sCisgICAgICB7ImRhdGV0aW1lIiwgQVRUUl9EQVRFVElNRX0sCisgICAgICB7
ImNoYXIiLCBBVFRSX0NIQVJ9LAorICAgICAgeyJ2ZXJzaW9uIiwgQVRUUl9WRVJTSU9OfSwKKyAg
ICAgIHsiY2hhcnNldCIsIEFUVFJfQ0hBUlNFVH0sCiAgICAgICB7ImNvZGViYXNlIiwgQVRUUl9D
T0RFQkFTRX0sCi0gICAgICB7ImFiYnIiLCBBVFRSX0FCQlJ9LAotICAgICAgeyJwbHVnaW5wYWdl
IiwgQVRUUl9QTFVHSU5QQUdFfSwKLSAgICAgIHsidGFyZ2V0IiwgQVRUUl9UQVJHRVR9LAorICAg
ICAgeyJmYWNlIiwgQVRUUl9GQUNFfSwKKyAgICAgIHsidG9wbWFyZ2luIiwgQVRUUl9UT1BNQVJH
SU59LAorICAgICAgeyJvbmtleXByZXNzIiwgQVRUUl9PTktFWVBSRVNTfSwKKyAgICAgIHsib25j
aGFuZ2UiLCBBVFRSX09OQ0hBTkdFfSwKKyAgICAgIHsiY2hhbGxlbmdlIiwgQVRUUl9DSEFMTEVO
R0V9LAorICAgICAgeyJub3NoYWRlIiwgQVRUUl9OT1NIQURFfSwKKyAgICAgIHsibWV0aG9kIiwg
QVRUUl9NRVRIT0R9LAogICAgICAgeyJwcm9maWxlIiwgQVRUUl9QUk9GSUxFfSwKKyAgICAgIHsi
cmVhZG9ubHkiLCBBVFRSX1JFQURPTkxZfSwKKyAgICAgIHsiZGVmZXIiLCBBVFRSX0RFRkVSfSwK
KyAgICAgIHsiYm9yZGVyY29sb3IiLCBBVFRSX0JPUkRFUkNPTE9SfSwKKyAgICAgIHsidGFiaW5k
ZXgiLCBBVFRSX1RBQklOREVYfSwKKyAgICAgIHsidmxpbmsiLCBBVFRSX1ZMSU5LfSwKKyAgICAg
IHsiYmdwcm9wZXJ0aWVzIiwgQVRUUl9CR1BST1BFUlRJRVN9LAorICAgICAgeyJjZWxscGFkZGlu
ZyIsIEFUVFJfQ0VMTFBBRERJTkd9LAorICAgICAgeyJoZWFkZXJzIiwgQVRUUl9IRUFERVJTfSwK
ICAgICAgIHsib251bmxvYWQiLCBBVFRSX09OVU5MT0FEfSwKKyAgICAgIHsiYWNjZXNza2V5Iiwg
QVRUUl9BQ0NFU1NLRVl9LAorICAgICAgeyJjb250ZW50ZWRpdGFibGUiLCBBVFRSX0NPTlRFTlRF
RElUQUJMRX0sCisgICAgICB7InZhbGlnbiIsIEFUVFJfVkFMSUdOfSwKKyAgICAgIHsibXVsdGlw
bGUiLCBBVFRSX01VTFRJUExFfSwKKyAgICAgIHsiYWJiciIsIEFUVFJfQUJCUn0sCisgICAgICB7
InVzZW1hcCIsIEFUVFJfVVNFTUFQfSwKKyAgICAgIHsiY2hlY2tlZCIsIEFUVFJfQ0hFQ0tFRH0s
CisgICAgICB7Im1heGxlbmd0aCIsIEFUVFJfTUFYTEVOR1RIfSwKKyAgICAgIHsiaGlkZGVuIiwg
QVRUUl9ISURERU59LAorICAgICAgeyJhdXRvY29tcGxldGUiLCBBVFRSX0FVVE9DT01QTEVURX0s
CiAgICAgICB7Im9uYmx1ciIsIEFUVFJfT05CTFVSfSwKLSAgICAgIHsid3JhcCIsIEFUVFJfV1JB
UH0sCi0gICAgICB7Im5vd3JhcCIsIEFUVFJfTk9XUkFQfSwKLSAgICAgIHsidGFiaW5kZXgiLCBB
VFRSX1RBQklOREVYfSwKLSAgICAgIHsicGx1Z2luc3BhZ2UiLCBBVFRSX1BMVUdJTlNQQUdFfSwK
LSAgICAgIHsiY2hhciIsIEFUVFJfQ0hBUn0sCi0gICAgICB7Im1lZGlhIiwgQVRUUl9NRURJQX0s
Ci0gICAgICB7InZlcnNpb24iLCBBVFRSX1ZFUlNJT059LAotICAgICAgeyJvbmRibGNsaWNrIiwg
QVRUUl9PTkRCTENMSUNLfSwKLSAgICAgIHsib25rZXl1cCIsIEFUVFJfT05LRVlVUH0sCisgICAg
ICB7ImFjY2VwdC1jaGFyc2V0IiwgQVRUUl9BQ0NFUFRfQ0hBUlNFVH0sCiAgICAgICB7ImZyYW1l
IiwgQVRUUl9GUkFNRX0sCi0gICAgICB7Im9ubW91c2Vtb3ZlIiwgQVRUUl9PTk1PVVNFTU9WRX0s
Ci0gICAgICB7InJvd3NwYW4iLCBBVFRSX1JPV1NQQU59LAorICAgICAgeyJvbmRibGNsaWNrIiwg
QVRUUl9PTkRCTENMSUNLfSwKKyAgICAgIHsiZGlzYWJsZWQiLCBBVFRSX0RJU0FCTEVEfSwKKyAg
ICAgIHsid2lkdGgiLCBBVFRSX1dJRFRIfSwKICAgICAgIHsiaHJlZiIsIEFUVFJfSFJFRn0sCiAg
ICAgICB7Im5vaHJlZiIsIEFUVFJfTk9IUkVGfSwKLSAgICAgIHsibm9zaGFkZSIsIEFUVFJfTk9T
SEFERX0sCi0gICAgICB7ImRhdGV0aW1lIiwgQVRUUl9EQVRFVElNRX0sCi0gICAgICB7Imh0dHAt
ZXF1aXYiLCBBVFRSX0hUVFBfRVFVSVZ9LAotICAgICAgeyJjaGFyc2V0IiwgQVRUUl9DSEFSU0VU
fSwKLSAgICAgIHsiY2hlY2tlZCIsIEFUVFJfQ0hFQ0tFRH0sCi0gICAgICB7InZpc2liaWxpdHki
LCBBVFRSX1ZJU0lCSUxJVFl9LAotICAgICAgeyJ3aWR0aCIsIEFUVFJfV0lEVEh9LAotICAgICAg
eyJwcm9tcHQiLCBBVFRSX1BST01QVH0sCi0gICAgICB7InZhbHVldHlwZSIsIEFUVFJfVkFMVUVU
WVBFfSwKLSAgICAgIHsiY2hhcm9mZiIsIEFUVFJfQ0hBUk9GRn0sCi0gICAgICB7Im1ldGhvZCIs
IEFUVFJfTUVUSE9EfSwKLSAgICAgIHsiaHJlZmxhbmciLCBBVFRSX0hSRUZMQU5HfSwKLSAgICAg
IHsibGVmdG1hcmdpbiIsIEFUVFJfTEVGVE1BUkdJTn0sCi0gICAgICB7ImRpciIsIEFUVFJfRElS
fSwKLSAgICAgIHsidG9wbWFyZ2luIiwgQVRUUl9UT1BNQVJHSU59LAorICAgICAgeyJzdGFuZGJ5
IiwgQVRUUl9TVEFOREJZfSwKKyAgICAgIHsidW5rbm93biIsIEFUVFJfVU5LTk9XTn0sCisgICAg
ICB7Im9ua2V5ZG93biIsIEFUVFJfT05LRVlET1dOfSwKKyAgICAgIHsidmFsdWUiLCBBVFRSX1ZB
TFVFfSwKKyAgICAgIHsiaGVpZ2h0IiwgQVRUUl9IRUlHSFR9LAorICAgICAgeyJvbmZvY3VzIiwg
QVRUUl9PTkZPQ1VTfSwKKyAgICAgIHsibGFuZ3VhZ2UiLCBBVFRSX0xBTkdVQUdFfSwKKyAgICAg
IHsicGx1Z2lucGFnZSIsIEFUVFJfUExVR0lOUEFHRX0sCisgICAgICB7Im9ua2V5dXAiLCBBVFRS
X09OS0VZVVB9LAorICAgICAgeyJwbHVnaW5zcGFnZSIsIEFUVFJfUExVR0lOU1BBR0V9LAogICAg
ICAgeyJvbm1vdXNlZG93biIsIEFUVFJfT05NT1VTRURPV059LAorICAgICAgeyJvbnN1Ym1pdCIs
IEFUVFJfT05TVUJNSVR9LAorICAgICAgeyJsZWZ0bWFyZ2luIiwgQVRUUl9MRUZUTUFSR0lOfSwK
KyAgICAgIHsib25tb3VzZW92ZXIiLCBBVFRSX09OTU9VU0VPVkVSfSwKICAgICAgIHsiYXJjaGl2
ZSIsIEFUVFJfQVJDSElWRX0sCi0gICAgICB7ImNvZGV0eXBlIiwgQVRUUl9DT0RFVFlQRX0sCi0g
ICAgICB7ImNvb3JkcyIsIEFUVFJfQ09PUkRTfSwKLSAgICAgIHsiZGVjbGFyZSIsIEFUVFJfREVD
TEFSRX0sCi0gICAgICB7ImRlZmVyIiwgQVRUUl9ERUZFUn0sCisgICAgICB7Im9ubW91c2V1cCIs
IEFUVFJfT05NT1VTRVVQfSwKKyAgICAgIHsib25tb3VzZW91dCIsIEFUVFJfT05NT1VTRU9VVH0s
CisgICAgICB7ImhyZWZsYW5nIiwgQVRUUl9IUkVGTEFOR30sCisgICAgICB7Im9ubW91c2Vtb3Zl
IiwgQVRUUl9PTk1PVVNFTU9WRX0sCiAgICAgICB7InBsdWdpbnVybCIsIEFUVFJfUExVR0lOVVJM
fSwKLSAgICAgIHsiYWNjZXB0LWNoYXJzZXQiLCBBVFRSX0FDQ0VQVF9DSEFSU0VUfSwKLSAgICAg
IHsib25tb3VzZW92ZXIiLCBBVFRSX09OTU9VU0VPVkVSfSwKLSAgICAgIHsic3RhbmRieSIsIEFU
VFJfU1RBTkRCWX0sCi0gICAgICB7Im9ua2V5ZG93biIsIEFUVFJfT05LRVlET1dOfSwKLSAgICAg
IHsib25rZXlwcmVzcyIsIEFUVFJfT05LRVlQUkVTU30sCi0gICAgICB7Im92ZXJzcmMiLCBBVFRS
X09WRVJTUkN9LAotICAgICAgeyJkaXNhYmxlZCIsIEFUVFJfRElTQUJMRUR9LAotICAgICAgeyJo
aWRkZW4iLCBBVFRSX0hJRERFTn0sCi0gICAgICB7ImNlbGxwYWRkaW5nIiwgQVRUUl9DRUxMUEFE
RElOR30sCi0gICAgICB7ImhlYWRlcnMiLCBBVFRSX0hFQURFUlN9LAotICAgICAgeyJyZWFkb25s
eSIsIEFUVFJfUkVBRE9OTFl9LAotICAgICAgeyJvbmVycm9yIiwgQVRUUl9PTkVSUk9SfSwKKyAg
ICAgIHsidmFsdWV0eXBlIiwgQVRUUl9WQUxVRVRZUEV9LAogICAgICAgeyJzdW1tYXJ5IiwgQVRU
Ul9TVU1NQVJZfSwKLSAgICAgIHsiYmdwcm9wZXJ0aWVzIiwgQVRUUl9CR1BST1BFUlRJRVN9LAot
ICAgICAgeyJtYXJnaW5oZWlnaHQiLCBBVFRSX01BUkdJTkhFSUdIVH0sCisgICAgICB7Imh0dHAt
ZXF1aXYiLCBBVFRSX0hUVFBfRVFVSVZ9LAorICAgICAgeyJmcmFtZWJvcmRlciIsIEFUVFJfRlJB
TUVCT1JERVJ9LAogICAgICAgeyJiYWNrZ3JvdW5kIiwgQVRUUl9CQUNLR1JPVU5EfSwKLSAgICAg
IHsiYm9yZGVyIiwgQVRUUl9CT1JERVJ9LAogICAgICAgeyJtYXJnaW53aWR0aCIsIEFUVFJfTUFS
R0lOV0lEVEh9LAotICAgICAgeyJib3JkZXJjb2xvciIsIEFUVFJfQk9SREVSQ09MT1J9LAotICAg
ICAgeyJmcmFtZWJvcmRlciIsIEFUVFJfRlJBTUVCT1JERVJ9CisgICAgICB7ImNoYXJvZmYiLCBB
VFRSX0NIQVJPRkZ9LAorICAgICAgeyJ2aXNpYmlsaXR5IiwgQVRUUl9WSVNJQklMSVRZfSwKKyAg
ICAgIHsibWFyZ2luaGVpZ2h0IiwgQVRUUl9NQVJHSU5IRUlHSFR9CiAgICAgfTsKIAogICBzdGF0
aWMgY29uc3Qgc2hvcnQgbG9va3VwW10gPQogICAgIHsKKyAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgIDAsICAgIDEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAgMiwgICAtMSwgICAg
MywgICAgNCwgICAtMSwgICAtMSwgICAgNSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgIDYsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgICA3LCAgIC0xLCAgIC0xLAorICAgICAgICAgOCwgICAtMSwgICAtMSwgICAgOSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgMTAsICAgLTEsICAgMTEsICAgLTEsICAgLTEs
ICAgLTEsICAgMTIsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIDEzLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAxNCwgICAtMSwgICAtMSwgICAxNSwgICAtMSwgICAx
NiwgICAxNywgICAxOCwKKyAgICAgICAgLTEsICAgMTksICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsCisgICAgICAgIDIwLCAgIC0xLCAgIDIxLCAgIC0xLCAgIC0xLCAgIDIyLCAg
IDIzLCAgIC0xLAorICAgICAgICAtMSwgICAyNCwgICAyNSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAyNiwKKyAgICAgICAgMjcsICAgMjgsIC0yNDgsICAgMzEsICAgLTEsICAgMzIsIC0xMTYs
ICAgLTIsCisgICAgICAgIDMzLCAgIC0xLCAgIDM0LCAgIC0xLCAgIC0xLCAgIDM1LCAgIC0xLCAg
IDM2LAorICAgICAgICAtMSwgICAzNywgICAzOCwgICAzOSwgICA0MCwgICA0MSwgICAtMSwgICA0
MiwKKyAgICAgICAgLTEsICAgLTEsICAgNDMsICAgNDQsICAgLTEsICAgLTEsICAgLTEsICAgNDUs
CisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDQ2LCAgIDQ3LAor
ICAgICAgICAtMSwgICA0OCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA0OSwgICAtMSwKKyAg
ICAgICAgNTAsICAgNTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAg
ICAgIC0xLCAgIDUyLCAgIDUzLCAgIDU0LCAgIDU1LCAgIC0xLCAgIC0xLCAgIDU2LAorICAgICAg
ICAtMSwgICAtMSwgICA1NywgICAtMSwgICAtMSwgICA1OCwgICA1OSwgICA2MCwKKyAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgNjEsICAgNjIsICAgLTEsICAgNjMsCisgICAgICAgIC0x
LCAgIDY0LCAgIC0xLCAgIDY1LCAgIC0xLCAgIDY2LCAgIC0xLCAgIDY3LAorICAgICAgICAtMSwg
ICAtMSwgICA2OCwgICAtMSwgICAtMSwgICAtMSwgICA2OSwgICA3MCwKKyAgICAgICAgLTEsICAg
LTEsICAgLTEsICAgNzEsICAgNzIsICAgNzMsICAgLTEsICAgLTEsCisgICAgICAgIDc0LCAgIDc1
LCAgIC0xLCAgIDc2LCAgIDc3LCAgIC0xLCAgIC0xLCAgIDc4LAorICAgICAgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICA3OSwgICA4MCwgICA4MSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAg
LTEsICAgODIsICAgODMsICAgLTEsICAgLTEsICAgODQsCisgICAgICAgIDg1LCAgIC0xLCAgIC0x
LCAgIDg2LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDg3LAorICAgICAgICA4OCwgICA4OSwgICAtMSwg
ICA5MCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgOTEsICAgLTEsICAg
OTIsICAgLTEsICAgOTMsICAgLTEsICAgOTQsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIDk1
LCAgIDk2LCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICA5NywgICA5OCwg
ICA5OSwgIDEwMCwgICAtMSwgIDEwMSwKKyAgICAgICAxMDIsICAgLTEsICAxMDMsICAxMDQsICAg
LTEsICAxMDUsICAgLTEsICAxMDYsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgMTA3LCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgIDEwOCwgICAtMSwgICAtMSwgIDEwOSwg
IDExMCwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAxMTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgMTEyLCAgIC0xLCAgMTEzLCAgIC0x
LCAgIC0xLCAgIC0xLAorICAgICAgIDExNCwgICAtMSwgIDExNSwgIDExNiwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwKKyAgICAgICAxMTcsICAgLTEsICAxMTgsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgIDExOSwgIDEyMCwgIDEyMSwgIDEyMiwgICAtMSwg
IDEyMywKKyAgICAgICAgLTEsICAxMjQsICAgLTEsICAgLTEsICAgLTEsICAxMjUsICAgLTEsICAg
LTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDEyNiwgICAtMSwgICAtMSwgICAtMSwK
KyAgICAgICAgLTEsICAgLTEsICAgLTEsICAxMjcsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisg
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTI4LAorICAg
ICAgIDEyOSwgIDEzMCwgICAtMSwgIDEzMSwgIDEzMiwgICAtMSwgICAtMSwgICAtMSwKKyAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAg
IC0xLCAgMTMzLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDEzNCwgICAtMSwKKyAgICAgICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgIDEzNSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxMzYsCisgICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgIDEzNywgICAtMSwgICAtMSwgIDEzOCwKKyAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAxMzksICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE0
MCwgICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgICAwLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAgMSwgICAtMSwgICAtMSwgICAg
MiwgICAgMywgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgIDQsICAgIDUsICAgLTEs
ICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgICA2LCAgIC0xLCAgIC0xLCAgIC0xLCAg
ICA3LCAgIC0xLAotICAgICAgICAgOCwgICAtMSwgICAtMSwgICAgOSwgICAxMCwgICAxMSwgICAt
MSwgICAxMiwKLSAgICAgICAgMTMsICAgMTQsICAgLTEsICAgLTEsICAgLTEsICAgMTUsICAgMTYs
ICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIDE3LCAgIC0xLCAgIC0xLCAgIDE4LCAgIC0xLCAg
IC0xLAotICAgICAgICAxOSwgICAtMSwgICAtMSwgICAtMSwgICAyMCwgICAyMSwgICAyMiwgICAt
MSwKLSAgICAgICAgLTEsICAgMjMsICAgLTEsICAgLTEsICAgMjQsICAgLTEsICAgMjUsICAgMjYs
Ci0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAot
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAg
ICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAg
ICAgIDI3LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDI4LCAgIDI5LAotICAgICAg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDMwLAotICAgICAgICAtMSwg
ICAtMSwgICAtMSwgICAzMSwgICAtMSwgICAzMiwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAg
MzMsICAgLTEsICAgMzQsICAgMzUsICAgLTEsICAgLTEsICAgMzYsCi0gICAgICAgIC0xLCAgIC0x
LCAgIDM3LCAgIDM4LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDM5LAotICAgICAgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICA0MCwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgNDEsICAgNDIsICAg
NDMsICAgLTEsICAgNDQsICAgLTEsICAgNDUsICAgNDYsCi0gICAgICAgIC0xLCAgIDQ3LCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDQ4LAotICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICA0OSwgICAtMSwgICAtMSwgICA1MCwKLSAgICAgICAgNTEsICAgLTEsICAgNTIsICAg
LTEsICAgNTMsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIDU0LCAgIC0x
LCAgIC0xLCAgIDU1LCAgIC0xLCAgIDU2LAotICAgICAgICAtMSwgICAtMSwgICA1NywgICA1OCwg
ICA1OSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgNjAsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIDYxLCAgIC0xLCAgIC0x
LCAgIDYyLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICA2MywgICA2NCwgICAtMSwgICAtMSwg
ICAtMSwgICA2NSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgNjYsICAgNjcsICAg
LTEsICAgNjgsICAgNjksCi0gICAgICAgIDcwLCAgIC0xLCAgIDcxLCAgIDcyLCAgIDczLCAgIDc0
LCAgIC0xLCAgIC0xLAotICAgICAgICA3NSwgLTQyNywgICA3OCwgICA3OSwgICAtMSwgICA4MCwg
ICA4MSwgICA4MiwKLSAgICAgICAgODMsICAgODQsICAtNjgsICAgLTIsICAgLTEsICAgLTEsICAg
LTEsICAgODUsCi0gICAgICAgIDg2LCAgIC0xLCAgIC0xLCAgIDg3LCAgIC0xLCAgIC0xLCAgIDg4
LCAgIC0xLAotICAgICAgICA4OSwgICAtMSwgICA5MCwgICAtMSwgICAtMSwgICA5MSwgICAtMSwg
ICAtMSwKLSAgICAgICAgOTIsICAgOTMsICAgLTEsICAgOTQsICAgLTEsICAgLTEsICAgOTUsICAg
LTEsCi0gICAgICAgIDk2LCAgIC0xLCAgIC0xLCAgIDk3LCAgIDk4LCAgIDk5LCAgIC0xLCAgMTAw
LAotICAgICAgICAtMSwgIDEwMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
LSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0g
ICAgICAgIC0xLCAgMTAyLCAgMTAzLCAgIC0xLCAgMTA0LCAgIC0xLCAgMTA1LCAgIC0xLAotICAg
ICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAg
ICAxMDYsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAg
MTA3LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTA4LCAgMTA5LCAgIC0xLAotICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDExMCwgICAtMSwKLSAgICAgICAgLTEs
ICAxMTEsICAgLTEsICAgLTEsICAgLTEsICAxMTIsICAgLTEsICAxMTMsCi0gICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTE0LCAgIC0xLAotICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDExNSwgIDExNiwKLSAgICAgICAgLTEsICAxMTcs
ICAxMTgsICAxMTksICAgLTEsICAgLTEsICAxMjAsICAxMjEsCi0gICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgIDEyMiwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAxMjMsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAxMjQsICAgLTEsICAxMjUsCi0gICAgICAgMTI2LCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTI3LAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAxMjgsICAgLTEs
ICAxMjksICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAotICAgICAgIDEzMCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgMTMxLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwKLSAgICAgICAgLTEsICAxMzIsICAxMzMsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxMzQsICAgLTEsICAgLTEsICAgLTEs
Ci0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAot
ICAgICAgICAtMSwgICAtMSwgIDEzNSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAg
ICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAg
ICAgIC0xLCAgMTM2LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxMzcsICAgLTEsICAgLTEsCi0gICAgICAgIC0x
LCAgIC0xLCAgMTM4LCAgIC0xLCAgIC0xLCAgMTM5LCAgMTQwLCAgIC0xLAotICAgICAgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAxNDEsICAxNDIsICAgLTEsICAgLTEsCisgICAgICAgMTQzLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAx
NDEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
LSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0g
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAg
ICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxNDIsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgMTQzCisgICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgMTQ0CiAgICAgfTsKIAogICBpZiAobGVuIDw9IE1BWF9XT1JEX0xFTkdUSCAmJiBsZW4g
Pj0gTUlOX1dPUkRfTEVOR1RIKQpAQCAtNDQyLDYgKzM5OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFy
ICogY29uc3QgYXR0ckxpc3RbXSA9IHsKICAgICAiQ09MU1BBTiIsCiAgICAgIkNPTVBBQ1QiLAog
ICAgICJDT05URU5UIiwKKyAgICAiQ09OVEVOVEVESVRBQkxFIiwKICAgICAiQ09PUkRTIiwKICAg
ICAiREFUQSIsCiAgICAgIkRBVEVUSU1FIiwKQEAgLTU1Niw0ICs1MTMsNCBAQCBzdGF0aWMgY29u
c3QgY2hhciAqIGNvbnN0IGF0dHJMaXN0W10gPSB7CiBET006OkRPTVN0cmluZyBLREVfTk9fRVhQ
T1JUIGdldEF0dHJOYW1lKHVuc2lnbmVkIHNob3J0IGlkKQogewogICAgIHJldHVybiBhdHRyTGlz
dFtpZC0xXTsKLX0KK307CkluZGV4OiBtaXNjL2h0bWxhdHRycy5ncGVyZgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9taXNjL2h0bWxhdHRycy5ncGVyZix2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC11IC1wIC1yMS4xNiBodG1sYXR0cnMuZ3BlcmYK
LS0tIG1pc2MvaHRtbGF0dHJzLmdwZXJmCTE1IERlYyAyMDAxIDE3OjI4OjEwIC0wMDAwCTEuMTYK
KysrIG1pc2MvaHRtbGF0dHJzLmdwZXJmCTkgQXVnIDIwMDMgMDI6NDU6MDUgLTAwMDAKQEAgLTQ0
LDYgKzQ0LDcgQEAgY29scywgQVRUUl9DT0xTCiBjb2xzcGFuLCBBVFRSX0NPTFNQQU4KIGNvbXBh
Y3QsIEFUVFJfQ09NUEFDVAogY29udGVudCwgQVRUUl9DT05URU5UCitjb250ZW50ZWRpdGFibGUs
IEFUVFJfQ09OVEVOVEVESVRBQkxFCiBjb29yZHMsIEFUVFJfQ09PUkRTCiBkYXRhLCBBVFRSX0RB
VEEKIGRhdGV0aW1lLCBBVFRSX0RBVEVUSU1FCkluZGV4OiBtaXNjL2h0bWxhdHRycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL21pc2MvaHRtbGF0dHJzLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtdSAtcCAtcjEuMTggaHRtbGF0dHJzLmgK
LS0tIG1pc2MvaHRtbGF0dHJzLmgJMzAgRGVjIDIwMDEgMTg6MDQ6MTYgLTAwMDAJMS4xOAorKysg
bWlzYy9odG1sYXR0cnMuaAk5IEF1ZyAyMDAzIDAyOjQ1OjA1IC0wMDAwCkBAIC00MywxMTYgKzQz
LDExNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogI2RlZmluZSBBVFRSX0NPTFNQQU4gMzMKICNk
ZWZpbmUgQVRUUl9DT01QQUNUIDM0CiAjZGVmaW5lIEFUVFJfQ09OVEVOVCAzNQotI2RlZmluZSBB
VFRSX0NPT1JEUyAzNgotI2RlZmluZSBBVFRSX0RBVEEgMzcKLSNkZWZpbmUgQVRUUl9EQVRFVElN
RSAzOAotI2RlZmluZSBBVFRSX0RFQ0xBUkUgMzkKLSNkZWZpbmUgQVRUUl9ERUZFUiA0MAotI2Rl
ZmluZSBBVFRSX0RJUiA0MQotI2RlZmluZSBBVFRSX0RJU0FCTEVEIDQyCi0jZGVmaW5lIEFUVFJf
RU5DVFlQRSA0MwotI2RlZmluZSBBVFRSX0ZBQ0UgNDQKLSNkZWZpbmUgQVRUUl9GT1IgNDUKLSNk
ZWZpbmUgQVRUUl9GUkFNRSA0NgotI2RlZmluZSBBVFRSX0ZSQU1FQk9SREVSIDQ3Ci0jZGVmaW5l
IEFUVFJfSEVBREVSUyA0OAotI2RlZmluZSBBVFRSX0hFSUdIVCA0OQotI2RlZmluZSBBVFRSX0hJ
RERFTiA1MAotI2RlZmluZSBBVFRSX0hSRUYgNTEKLSNkZWZpbmUgQVRUUl9IUkVGTEFORyA1Mgot
I2RlZmluZSBBVFRSX0hTUEFDRSA1MwotI2RlZmluZSBBVFRSX0hUTUwgNTQKLSNkZWZpbmUgQVRU
Ul9IVFRQX0VRVUlWIDU1Ci0jZGVmaW5lIEFUVFJfSUQgNTYKLSNkZWZpbmUgQVRUUl9JU01BUCA1
NwotI2RlZmluZSBBVFRSX0xBQkVMIDU4Ci0jZGVmaW5lIEFUVFJfTEFORyA1OQotI2RlZmluZSBB
VFRSX0xBTkdVQUdFIDYwCi0jZGVmaW5lIEFUVFJfTEVGVCA2MQotI2RlZmluZSBBVFRSX0xFRlRN
QVJHSU4gNjIKLSNkZWZpbmUgQVRUUl9MSU5LIDYzCi0jZGVmaW5lIEFUVFJfTE9OR0RFU0MgNjQK
LSNkZWZpbmUgQVRUUl9NQVJHSU5IRUlHSFQgNjUKLSNkZWZpbmUgQVRUUl9NQVJHSU5XSURUSCA2
NgotI2RlZmluZSBBVFRSX01BWExFTkdUSCA2NwotI2RlZmluZSBBVFRSX01FRElBIDY4Ci0jZGVm
aW5lIEFUVFJfTUVUSE9EIDY5Ci0jZGVmaW5lIEFUVFJfTVVMVElQTEUgNzAKLSNkZWZpbmUgQVRU
Ul9OQU1FIDcxCi0jZGVmaW5lIEFUVFJfTk9IUkVGIDcyCi0jZGVmaW5lIEFUVFJfTk9SRVNJWkUg
NzMKLSNkZWZpbmUgQVRUUl9OT1NBVkUgNzQKLSNkZWZpbmUgQVRUUl9OT1NIQURFIDc1Ci0jZGVm
aW5lIEFUVFJfTk9XUkFQIDc2Ci0jZGVmaW5lIEFUVFJfT0JKRUNUIDc3Ci0jZGVmaW5lIEFUVFJf
T05BQk9SVCA3OAotI2RlZmluZSBBVFRSX09OQkxVUiA3OQotI2RlZmluZSBBVFRSX09OQ0hBTkdF
IDgwCi0jZGVmaW5lIEFUVFJfT05DTElDSyA4MQotI2RlZmluZSBBVFRSX09OREJMQ0xJQ0sgODIK
LSNkZWZpbmUgQVRUUl9PTkVSUk9SIDgzCi0jZGVmaW5lIEFUVFJfT05GT0NVUyA4NAotI2RlZmlu
ZSBBVFRSX09OS0VZRE9XTiA4NQotI2RlZmluZSBBVFRSX09OS0VZUFJFU1MgODYKLSNkZWZpbmUg
QVRUUl9PTktFWVVQIDg3Ci0jZGVmaW5lIEFUVFJfT05MT0FEIDg4Ci0jZGVmaW5lIEFUVFJfT05N
T1VTRURPV04gODkKLSNkZWZpbmUgQVRUUl9PTk1PVVNFTU9WRSA5MAotI2RlZmluZSBBVFRSX09O
TU9VU0VPVVQgOTEKLSNkZWZpbmUgQVRUUl9PTk1PVVNFT1ZFUiA5MgotI2RlZmluZSBBVFRSX09O
TU9VU0VVUCA5MwotI2RlZmluZSBBVFRSX09OUkVTRVQgOTQKLSNkZWZpbmUgQVRUUl9PTlJFU0la
RSA5NQotI2RlZmluZSBBVFRSX09OU0VMRUNUIDk2Ci0jZGVmaW5lIEFUVFJfT05TVUJNSVQgOTcK
LSNkZWZpbmUgQVRUUl9PTlVOTE9BRCA5OAotI2RlZmluZSBBVFRSX09WRVJTUkMgOTkKLSNkZWZp
bmUgQVRUUl9QQUdFWCAxMDAKLSNkZWZpbmUgQVRUUl9QQUdFWSAxMDEKLSNkZWZpbmUgQVRUUl9Q
TEFJTiAxMDIKLSNkZWZpbmUgQVRUUl9QTFVHSU5QQUdFIDEwMwotI2RlZmluZSBBVFRSX1BMVUdJ
TlNQQUdFIDEwNAotI2RlZmluZSBBVFRSX1BMVUdJTlVSTCAxMDUKLSNkZWZpbmUgQVRUUl9QUk9G
SUxFIDEwNgotI2RlZmluZSBBVFRSX1BST01QVCAxMDcKLSNkZWZpbmUgQVRUUl9SRUFET05MWSAx
MDgKLSNkZWZpbmUgQVRUUl9SRUwgMTA5Ci0jZGVmaW5lIEFUVFJfUkVWIDExMAotI2RlZmluZSBB
VFRSX1JPV1MgMTExCi0jZGVmaW5lIEFUVFJfUk9XU1BBTiAxMTIKLSNkZWZpbmUgQVRUUl9SVUxF
UyAxMTMKLSNkZWZpbmUgQVRUUl9TQ0hFTUUgMTE0Ci0jZGVmaW5lIEFUVFJfU0NPUEUgMTE1Ci0j
ZGVmaW5lIEFUVFJfU0NST0xMSU5HIDExNgotI2RlZmluZSBBVFRSX1NFTEVDVEVEIDExNwotI2Rl
ZmluZSBBVFRSX1NIQVBFIDExOAotI2RlZmluZSBBVFRSX1NJWkUgMTE5Ci0jZGVmaW5lIEFUVFJf
U1BBTiAxMjAKLSNkZWZpbmUgQVRUUl9TUkMgMTIxCi0jZGVmaW5lIEFUVFJfU1RBTkRCWSAxMjIK
LSNkZWZpbmUgQVRUUl9TVEFSVCAxMjMKLSNkZWZpbmUgQVRUUl9TVFlMRSAxMjQKLSNkZWZpbmUg
QVRUUl9TVU1NQVJZIDEyNQotI2RlZmluZSBBVFRSX1RBQklOREVYIDEyNgotI2RlZmluZSBBVFRS
X1RBUkdFVCAxMjcKLSNkZWZpbmUgQVRUUl9URVhUIDEyOAotI2RlZmluZSBBVFRSX1RJVExFIDEy
OQotI2RlZmluZSBBVFRSX1RPUCAxMzAKLSNkZWZpbmUgQVRUUl9UT1BNQVJHSU4gMTMxCi0jZGVm
aW5lIEFUVFJfVFlQRSAxMzIKLSNkZWZpbmUgQVRUUl9VTktOT1dOIDEzMwotI2RlZmluZSBBVFRS
X1VTRU1BUCAxMzQKLSNkZWZpbmUgQVRUUl9WQUxJR04gMTM1Ci0jZGVmaW5lIEFUVFJfVkFMVUUg
MTM2Ci0jZGVmaW5lIEFUVFJfVkFMVUVUWVBFIDEzNwotI2RlZmluZSBBVFRSX1ZFUlNJT04gMTM4
Ci0jZGVmaW5lIEFUVFJfVklTSUJJTElUWSAxMzkKLSNkZWZpbmUgQVRUUl9WTElOSyAxNDAKLSNk
ZWZpbmUgQVRUUl9WU1BBQ0UgMTQxCi0jZGVmaW5lIEFUVFJfV0lEVEggMTQyCi0jZGVmaW5lIEFU
VFJfV1JBUCAxNDMKLSNkZWZpbmUgQVRUUl9aX0lOREVYIDE0NAotI2RlZmluZSBBVFRSX0xBU1Rf
QVRUUiAxNDQKKyNkZWZpbmUgQVRUUl9DT05URU5URURJVEFCTEUgMzYKKyNkZWZpbmUgQVRUUl9D
T09SRFMgMzcKKyNkZWZpbmUgQVRUUl9EQVRBIDM4CisjZGVmaW5lIEFUVFJfREFURVRJTUUgMzkK
KyNkZWZpbmUgQVRUUl9ERUNMQVJFIDQwCisjZGVmaW5lIEFUVFJfREVGRVIgNDEKKyNkZWZpbmUg
QVRUUl9ESVIgNDIKKyNkZWZpbmUgQVRUUl9ESVNBQkxFRCA0MworI2RlZmluZSBBVFRSX0VOQ1RZ
UEUgNDQKKyNkZWZpbmUgQVRUUl9GQUNFIDQ1CisjZGVmaW5lIEFUVFJfRk9SIDQ2CisjZGVmaW5l
IEFUVFJfRlJBTUUgNDcKKyNkZWZpbmUgQVRUUl9GUkFNRUJPUkRFUiA0OAorI2RlZmluZSBBVFRS
X0hFQURFUlMgNDkKKyNkZWZpbmUgQVRUUl9IRUlHSFQgNTAKKyNkZWZpbmUgQVRUUl9ISURERU4g
NTEKKyNkZWZpbmUgQVRUUl9IUkVGIDUyCisjZGVmaW5lIEFUVFJfSFJFRkxBTkcgNTMKKyNkZWZp
bmUgQVRUUl9IU1BBQ0UgNTQKKyNkZWZpbmUgQVRUUl9IVE1MIDU1CisjZGVmaW5lIEFUVFJfSFRU
UF9FUVVJViA1NgorI2RlZmluZSBBVFRSX0lEIDU3CisjZGVmaW5lIEFUVFJfSVNNQVAgNTgKKyNk
ZWZpbmUgQVRUUl9MQUJFTCA1OQorI2RlZmluZSBBVFRSX0xBTkcgNjAKKyNkZWZpbmUgQVRUUl9M
QU5HVUFHRSA2MQorI2RlZmluZSBBVFRSX0xFRlQgNjIKKyNkZWZpbmUgQVRUUl9MRUZUTUFSR0lO
IDYzCisjZGVmaW5lIEFUVFJfTElOSyA2NAorI2RlZmluZSBBVFRSX0xPTkdERVNDIDY1CisjZGVm
aW5lIEFUVFJfTUFSR0lOSEVJR0hUIDY2CisjZGVmaW5lIEFUVFJfTUFSR0lOV0lEVEggNjcKKyNk
ZWZpbmUgQVRUUl9NQVhMRU5HVEggNjgKKyNkZWZpbmUgQVRUUl9NRURJQSA2OQorI2RlZmluZSBB
VFRSX01FVEhPRCA3MAorI2RlZmluZSBBVFRSX01VTFRJUExFIDcxCisjZGVmaW5lIEFUVFJfTkFN
RSA3MgorI2RlZmluZSBBVFRSX05PSFJFRiA3MworI2RlZmluZSBBVFRSX05PUkVTSVpFIDc0Cisj
ZGVmaW5lIEFUVFJfTk9TQVZFIDc1CisjZGVmaW5lIEFUVFJfTk9TSEFERSA3NgorI2RlZmluZSBB
VFRSX05PV1JBUCA3NworI2RlZmluZSBBVFRSX09CSkVDVCA3OAorI2RlZmluZSBBVFRSX09OQUJP
UlQgNzkKKyNkZWZpbmUgQVRUUl9PTkJMVVIgODAKKyNkZWZpbmUgQVRUUl9PTkNIQU5HRSA4MQor
I2RlZmluZSBBVFRSX09OQ0xJQ0sgODIKKyNkZWZpbmUgQVRUUl9PTkRCTENMSUNLIDgzCisjZGVm
aW5lIEFUVFJfT05FUlJPUiA4NAorI2RlZmluZSBBVFRSX09ORk9DVVMgODUKKyNkZWZpbmUgQVRU
Ul9PTktFWURPV04gODYKKyNkZWZpbmUgQVRUUl9PTktFWVBSRVNTIDg3CisjZGVmaW5lIEFUVFJf
T05LRVlVUCA4OAorI2RlZmluZSBBVFRSX09OTE9BRCA4OQorI2RlZmluZSBBVFRSX09OTU9VU0VE
T1dOIDkwCisjZGVmaW5lIEFUVFJfT05NT1VTRU1PVkUgOTEKKyNkZWZpbmUgQVRUUl9PTk1PVVNF
T1VUIDkyCisjZGVmaW5lIEFUVFJfT05NT1VTRU9WRVIgOTMKKyNkZWZpbmUgQVRUUl9PTk1PVVNF
VVAgOTQKKyNkZWZpbmUgQVRUUl9PTlJFU0VUIDk1CisjZGVmaW5lIEFUVFJfT05SRVNJWkUgOTYK
KyNkZWZpbmUgQVRUUl9PTlNFTEVDVCA5NworI2RlZmluZSBBVFRSX09OU1VCTUlUIDk4CisjZGVm
aW5lIEFUVFJfT05VTkxPQUQgOTkKKyNkZWZpbmUgQVRUUl9PVkVSU1JDIDEwMAorI2RlZmluZSBB
VFRSX1BBR0VYIDEwMQorI2RlZmluZSBBVFRSX1BBR0VZIDEwMgorI2RlZmluZSBBVFRSX1BMQUlO
IDEwMworI2RlZmluZSBBVFRSX1BMVUdJTlBBR0UgMTA0CisjZGVmaW5lIEFUVFJfUExVR0lOU1BB
R0UgMTA1CisjZGVmaW5lIEFUVFJfUExVR0lOVVJMIDEwNgorI2RlZmluZSBBVFRSX1BST0ZJTEUg
MTA3CisjZGVmaW5lIEFUVFJfUFJPTVBUIDEwOAorI2RlZmluZSBBVFRSX1JFQURPTkxZIDEwOQor
I2RlZmluZSBBVFRSX1JFTCAxMTAKKyNkZWZpbmUgQVRUUl9SRVYgMTExCisjZGVmaW5lIEFUVFJf
Uk9XUyAxMTIKKyNkZWZpbmUgQVRUUl9ST1dTUEFOIDExMworI2RlZmluZSBBVFRSX1JVTEVTIDEx
NAorI2RlZmluZSBBVFRSX1NDSEVNRSAxMTUKKyNkZWZpbmUgQVRUUl9TQ09QRSAxMTYKKyNkZWZp
bmUgQVRUUl9TQ1JPTExJTkcgMTE3CisjZGVmaW5lIEFUVFJfU0VMRUNURUQgMTE4CisjZGVmaW5l
IEFUVFJfU0hBUEUgMTE5CisjZGVmaW5lIEFUVFJfU0laRSAxMjAKKyNkZWZpbmUgQVRUUl9TUEFO
IDEyMQorI2RlZmluZSBBVFRSX1NSQyAxMjIKKyNkZWZpbmUgQVRUUl9TVEFOREJZIDEyMworI2Rl
ZmluZSBBVFRSX1NUQVJUIDEyNAorI2RlZmluZSBBVFRSX1NUWUxFIDEyNQorI2RlZmluZSBBVFRS
X1NVTU1BUlkgMTI2CisjZGVmaW5lIEFUVFJfVEFCSU5ERVggMTI3CisjZGVmaW5lIEFUVFJfVEFS
R0VUIDEyOAorI2RlZmluZSBBVFRSX1RFWFQgMTI5CisjZGVmaW5lIEFUVFJfVElUTEUgMTMwCisj
ZGVmaW5lIEFUVFJfVE9QIDEzMQorI2RlZmluZSBBVFRSX1RPUE1BUkdJTiAxMzIKKyNkZWZpbmUg
QVRUUl9UWVBFIDEzMworI2RlZmluZSBBVFRSX1VOS05PV04gMTM0CisjZGVmaW5lIEFUVFJfVVNF
TUFQIDEzNQorI2RlZmluZSBBVFRSX1ZBTElHTiAxMzYKKyNkZWZpbmUgQVRUUl9WQUxVRSAxMzcK
KyNkZWZpbmUgQVRUUl9WQUxVRVRZUEUgMTM4CisjZGVmaW5lIEFUVFJfVkVSU0lPTiAxMzkKKyNk
ZWZpbmUgQVRUUl9WSVNJQklMSVRZIDE0MAorI2RlZmluZSBBVFRSX1ZMSU5LIDE0MQorI2RlZmlu
ZSBBVFRSX1ZTUEFDRSAxNDIKKyNkZWZpbmUgQVRUUl9XSURUSCAxNDMKKyNkZWZpbmUgQVRUUl9X
UkFQIDE0NAorI2RlZmluZSBBVFRSX1pfSU5ERVggMTQ1CisjZGVmaW5lIEFUVFJfTEFTVF9BVFRS
IDE0NQogRE9NU3RyaW5nIGdldEF0dHJOYW1lKHVuc2lnbmVkIHNob3J0IGlkKTsKIAogI2VuZGlm
CkluZGV4OiBtaXNjL2h0bWxhdHRycy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUv
a2RlbGlicy9raHRtbC9taXNjL2h0bWxhdHRycy5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NQpkaWZmIC11IC1wIC1yMS4xNSBodG1sYXR0cnMuaW4KLS0tIG1pc2MvaHRtbGF0dHJzLmluCTE1
IERlYyAyMDAxIDE3OjI4OjEwIC0wMDAwCTEuMTUKKysrIG1pc2MvaHRtbGF0dHJzLmluCTkgQXVn
IDIwMDMgMDI6NDU6MDYgLTAwMDAKQEAgLTMzLDYgKzMzLDcgQEAgY29scwogY29sc3BhbgogY29t
cGFjdAogY29udGVudAorY29udGVudGVkaXRhYmxlCiBjb29yZHMKIGRhdGEKIGRhdGV0aW1lCklu
ZGV4OiByZW5kZXJpbmcvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2Rl
L2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL01ha2VmaWxlLmFtLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjMzCmRpZmYgLXUgLXAgLXIxLjMzIE1ha2VmaWxlLmFtCi0tLSByZW5kZXJpbmcvTWFrZWZp
bGUuYW0JMjMgQXByIDIwMDMgMTI6NDA6NTQgLTAwMDAJMS4zMworKysgcmVuZGVyaW5nL01ha2Vm
aWxlLmFtCTkgQXVnIDIwMDMgMDI6NDU6MDYgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAgbGlia2h0
bWxyZW5kZXJfbGFfU09VUkNFUyA9IFwKIAlyZW5kZXJfaW1hZ2UuY3BwIHJlbmRlcl90YWJsZS5j
cHAgdGFibGVfbGF5b3V0LmNwcCBcCiAJcmVuZGVyX3JlcGxhY2VkLmNwcCByZW5kZXJfZm9ybS5j
cHAgcmVuZGVyX2xpc3QuY3BwIFwKIAlyZW5kZXJfcm9vdC5jcHAgcmVuZGVyX2ZyYW1lcy5jcHAg
cmVuZGVyX2JyLmNwcCBcCi0JcmVuZGVyX2h0bWwuY3BwIHJlbmRlcl9ib2R5LmNwcCBmb250LmNw
cCAKKwlyZW5kZXJfaHRtbC5jcHAgcmVuZGVyX2JvZHkuY3BwIGZvbnQuY3BwIHJlbmRlcl9saW5l
LmNwcAogCiBsaWJraHRtbHJlbmRlcl9sYV9NRVRBU09VUkNFUyA9IEFVVE8KIApAQCAtMzcsNyAr
MzcsNyBAQCBub2luc3RfSEVBREVSUyA9IFwKIAlyZW5kZXJfc3R5bGUuaCByZW5kZXJfb2JqZWN0
LmggcmVuZGVyX2NvbnRhaW5lci5oIHJlbmRlcl9ib3guaCBcCiAJcmVuZGVyX2Zsb3cuaCByZW5k
ZXJfdGV4dC5oIHJlbmRlcl90YWJsZS5oIHJlbmRlcl9yZXBsYWNlZC5oIFwKIAlyZW5kZXJfZm9y
bS5oIHJlbmRlcl9saXN0LmggcmVuZGVyX3Jvb3QuaCByZW5kZXJfZnJhbWVzLmggXAotCXJlbmRl
cl9ici5oIHJlbmRlcl9hcHBsZXQuaCBmb250LmggdGFibGVfbGF5b3V0LmgKKwlyZW5kZXJfYnIu
aCByZW5kZXJfYXBwbGV0LmggZm9udC5oIHRhYmxlX2xheW91dC5oIHJlbmRlcl9saW5lLmgKIAog
SU5DTFVERVMgPSAtSSQodG9wX3NyY2Rpcikva2ltZ2lvIC1JJCh0b3Bfc3JjZGlyKS9raW8gLUkk
KHRvcF9zcmNkaXIpL2Rjb3AgXAogIC1JJCh0b3Bfc3JjZGlyKS9rZmlsZSAtSSQodG9wX3NyY2Rp
cikva2h0bWwgLUkkKHRvcF9zcmNkaXIpICQoYWxsX2luY2x1ZGVzKQpJbmRleDogcmVuZGVyaW5n
L2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3Jl
bmRlcmluZy9iaWRpLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjUKZGlmZiAtdSAtcCAt
cjEuMTY1IGJpZGkuY3BwCi0tLSByZW5kZXJpbmcvYmlkaS5jcHAJNiBGZWIgMjAwMyAwMDozMjo0
NiAtMDAwMAkxLjE2NQorKysgcmVuZGVyaW5nL2JpZGkuY3BwCTkgQXVnIDIwMDMgMDI6NDU6MDcg
LTAwMDAKQEAgLTM5MSw2ICszOTEsODYgQEAgc3RhdGljIHZvaWQgZW1iZWQoIFFDaGFyOjpEaXJl
Y3Rpb24gZCApCiAgICAgYWRqdXN0RW1iZWRkZGluZyA9IGI7CiB9CiAKK0lubGluZUZsb3dCb3gq
IFJlbmRlckZsb3c6OmNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqIG9iaikKK3sKKyAgICAv
LyBTZWUgaWYgd2UgaGF2ZSBhbiB1bmNvbnN0cnVjdGVkIGxpbmUgYm94IGZvciB0aGlzIG9iamVj
dCB0aGF0IGlzIGFsc28KKyAgICAvLyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaW5lLgorICAgIEtI
VE1MQXNzZXJ0KG9iai0+aXNGbG93KCkgfHwgb2JqID09IHRoaXMpOworICAgIFJlbmRlckZsb3cq
IGZsb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4ob2JqKTsKKworICAgIC8vIEdldCB0aGUg
bGFzdCBib3ggd2UgbWFkZSBmb3IgdGhpcyByZW5kZXIgb2JqZWN0LgorICAgIElubGluZUZsb3dC
b3gqIGJveCA9IGZsb3ctPmxhc3RMaW5lQm94KCk7CisKKyAgICAvLyBJZiB0aGlzIGJveCBpcyBj
b25zdHJ1Y3RlZCB0aGVuIGl0IGlzIGZyb20gYSBwcmV2aW91cyBsaW5lLCBhbmQgd2UgbmVlZAor
ICAgIC8vIHRvIG1ha2UgYSBuZXcgYm94IGZvciBvdXIgbGluZS4gIElmIHRoaXMgYm94IGlzIHVu
Y29uc3RydWN0ZWQgYnV0IGl0IGhhcworICAgIC8vIHNvbWV0aGluZyBmb2xsb3dpbmcgaXQgb24g
dGhlIGxpbmUsIHRoZW4gd2Uga25vdyB3ZSBoYXZlIHRvIG1ha2UgYSBuZXcgYm94CisgICAgLy8g
YXMgd2VsbC4gIEluIHRoaXMgc2l0dWF0aW9uIG91ciBpbmxpbmUgaGFzIGFjdHVhbGx5IGJlZW4g
c3BsaXQgaW4gdHdvIG9uCisgICAgLy8gdGhlIHNhbWUgbGluZSAodGhpcyBjYW4gaGFwcGVuIHdp
dGggdmVyeSBmYW5jeSBsYW5ndWFnZSBtaXh0dXJlcykuCisgICAgaWYgKCFib3ggfHwgYm94LT5p
c0NvbnN0cnVjdGVkKCkgfHwgYm94LT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBtYWtlIGEgbmV3IGJveCBmb3IgdGhpcyByZW5kZXIgb2JqZWN0LiAgT25jZQorICAgICAg
ICAvLyBtYWRlLCB3ZSBuZWVkIHRvIHBsYWNlIGl0IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQg
bGluZS4KKyAgICAgICAgSW5saW5lQm94KiBuZXdCb3ggPSBvYmotPmNyZWF0ZUlubGluZUJveChm
YWxzZSk7CisgICAgICAgIEtIVE1MQXNzZXJ0KG5ld0JveC0+aXNJbmxpbmVGbG93Qm94KCkpOwor
ICAgICAgICBib3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4obmV3Qm94KTsKKwkvLyBG
SVhNRTogbm90IHBvcnRlZCB5ZXQsIGl0IGlzIHNldCBleHBsaWNpdGx5IGluIGNvbXB1dGVQb3Np
dGlvbnMuLi4KKy8vICAgICAgICBib3gtPnNldEZpcnN0TGluZVN0eWxlQml0KG1fZmlyc3RMaW5l
KTsKKworICAgICAgICAvLyBXZSBoYXZlIGEgbmV3IGJveC4gQXBwZW5kIGl0IHRvIHRoZSBpbmxp
bmUgYm94IHdlIGdldCBieSBjb25zdHJ1Y3Rpbmcgb3VyCisgICAgICAgIC8vIHBhcmVudC4gIElm
IHdlIGhhdmUgaGl0IHRoZSBibG9jayBpdHNlbGYsIHRoZW4gfGJveHwgcmVwcmVzZW50cyB0aGUg
cm9vdAorICAgICAgICAvLyBpbmxpbmUgYm94IGZvciB0aGUgbGluZSwgYW5kIGl0IGRvZXNuJ3Qg
aGF2ZSB0byBiZSBhcHBlbmRlZCB0byBhbnkgcGFyZW50CisgICAgICAgIC8vIGlubGluZS4KKyAg
ICAgICAgaWYgKG9iaiAhPSB0aGlzKSB7CisgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBwYXJl
bnRCb3ggPSBjcmVhdGVMaW5lQm94ZXMob2JqLT5wYXJlbnQoKSk7CisgICAgICAgICAgICBwYXJl
bnRCb3gtPmFkZFRvTGluZShib3gpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGJv
eDsKK30KKworSW5saW5lRmxvd0JveCogUmVuZGVyRmxvdzo6Y29uc3RydWN0TGluZShjb25zdCBC
aWRpSXRlcmF0b3IgJnN0YXJ0LCBjb25zdCBCaWRpSXRlcmF0b3IgJmVuZCkKK3sKKyAgICBpZiAo
IXNydW5zKQorICAgICAgICByZXR1cm4gMDsgLy8gV2UgaGFkIG5vIHJ1bnMuIERvbid0IG1ha2Ug
YSByb290IGlubGluZSBib3ggYXQgYWxsLiBUaGUgbGluZSBpcyBlbXB0eS4KKworICAgIElubGlu
ZUZsb3dCb3gqIHBhcmVudEJveCA9IDA7CisgICAgUVB0ckxpc3RJdGVyYXRvcjxCaWRpUnVuPiBp
dCgqc3J1bnMpOworICAgIGZvciAoQmlkaVJ1biAqcjsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0
KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIGJveCBmb3Igb3VyIG9iamVjdC4KKyAgICAgICAgci0+
Ym94ID0gci0+b2JqLT5jcmVhdGVJbmxpbmVCb3goci0+b2JqLT5pc1Bvc2l0aW9uZWQoKSk7CisK
KyAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwYXJlbnQgYm94IHlldCwgb3IgaWYgdGhlIHJ1biBp
cyBub3Qgc2ltcGx5IGEgc2libGluZywKKyAgICAgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIGNvbnN0
cnVjdCBpbmxpbmUgYm94ZXMgYXMgbmVjZXNzYXJ5IHRvIHByb3Blcmx5IGVuY2xvc2UgdGhlCisg
ICAgICAgIC8vIHJ1bidzIGlubGluZSBib3guCisgICAgICAgIGlmICghcGFyZW50Qm94IHx8IChw
YXJlbnRCb3gtPm9iamVjdCgpICE9IHItPm9iai0+cGFyZW50KCkpKQorICAgICAgICAgICAgLy8g
Q3JlYXRlIG5ldyBpbmxpbmUgYm94ZXMgYWxsIHRoZSB3YXkgYmFjayB0byB0aGUgYXBwcm9wcmlh
dGUgaW5zZXJ0aW9uIHBvaW50LgorICAgICAgICAgICAgcGFyZW50Qm94ID0gY3JlYXRlTGluZUJv
eGVzKHItPm9iai0+cGFyZW50KCkpOworCisgICAgICAgIC8vIEFwcGVuZCB0aGUgaW5saW5lIGJv
eCB0byB0aGlzIGxpbmUuCisgICAgICAgIHBhcmVudEJveC0+YWRkVG9MaW5lKHItPmJveCk7Cisg
ICAgfQorCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYSByb290IGlubGluZSBib3guICBJdCBzaG91
bGQgYmUgdW5jb25zdHJ1Y3RlZCBhbmQKKyAgICAvLyBiZSB0aGUgbGFzdCBjb250aW51YXRpb24g
b2Ygb3VyIGxpbmUgbGlzdC4KKyAgICBLSFRNTEFzc2VydChsYXN0TGluZUJveCgpICYmICFsYXN0
TGluZUJveCgpLT5pc0NvbnN0cnVjdGVkKCkpOworCisgICAgLy8gU2V0IGJpdHMgb24gb3VyIGlu
bGluZSBmbG93IGJveGVzIHRoYXQgaW5kaWNhdGUgd2hpY2ggc2lkZXMgc2hvdWxkCisgICAgLy8g
cGFpbnQgYm9yZGVycy9tYXJnaW5zL3BhZGRpbmcuICBUaGlzIGtub3dsZWRnZSB3aWxsIHVsdGlt
YXRlbHkgYmUgdXNlZCB3aGVuCisgICAgLy8gd2UgZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIHBv
c2l0aW9ucyBhbmQgd2lkdGhzIG9mIGFsbCB0aGUgaW5saW5lIGJveGVzIG9uCisgICAgLy8gdGhl
IGxpbmUuCisgICAgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QgPSAwOworICAgIGJvb2wgbGFzdExp
bmUgPSAhZW5kLm9iajsKKyAgICBpZiAoZW5kLm9iaiAmJiBlbmQucG9zID09IDApCisgICAgICAg
IGVuZE9iamVjdCA9IGVuZC5vYmo7CisgICAgLy8gRklYTUU6IHRoaXMgaXMgYSBkdW1teSBjYWxs
LCB0aGUgZnVuY3Rpb24gaGFzIG5vIGltcGxlbWVudGF0aW9uCisgICAgbGFzdExpbmVCb3goKS0+
ZGV0ZXJtaW5lU3BhY2luZ0ZvckZsb3dCb3hlcyhsYXN0TGluZSwgZW5kT2JqZWN0KTsKKworICAg
IC8vIE5vdyBtYXJrIHRoZSBsaW5lIGJveGVzIGFzIGJlaW5nIGNvbnN0cnVjdGVkLgorICAgIGxh
c3RMaW5lQm94KCktPnNldENvbnN0cnVjdGVkKCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGxhc3Qg
bGluZS4KKyAgICByZXR1cm4gbGFzdExpbmVCb3goKTsKK30KIAogLy8gY29sbGVjdHMgb25lIGxp
bmUgb2YgdGhlIHBhcmFncmFwaCBhbmQgdHJhbnNmb3JtcyBpdCB0byB2aXN1YWwgb3JkZXIKIHZv
aWQgUmVuZGVyRmxvdzo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciAmc3RhcnQs
IGNvbnN0IEJpZGlJdGVyYXRvciAmZW5kKQpAQCAtNDA1LDEwICs0ODUsNiBAQCB2b2lkIFJlbmRl
ckZsb3c6OmJpZGlSZW9yZGVyTGluZShjb25zdCBCCiAgICAga2REZWJ1Zyg2MDQxKSA8PCAicmVv
cmRlcmluZyBMaW5lIGZyb20gIiA8PCBzdGFydC5vYmogPDwgIi8iIDw8IHN0YXJ0LnBvcyA8PCAi
IHRvICIgPDwgZW5kLm9iaiA8PCAiLyIgPDwgZW5kLnBvcyA8PCBlbmRsOwogI2VuZGlmCiAKLSAg
ICBRUHRyTGlzdDxCaWRpUnVuPiBydW5zOwotICAgIHJ1bnMuc2V0QXV0b0RlbGV0ZSh0cnVlKTsK
LSAgICBzcnVucyA9ICZydW5zOwotCiAgICAgLy8gICAgY29udGV4dC0+cmVmKCk7CiAKICAgICBk
aXIgPSBRQ2hhcjo6RGlyT047CkBAIC03OTMsNyArODY5LDcgQEAgdm9pZCBSZW5kZXJGbG93Ojpi
aWRpUmVvcmRlckxpbmUoY29uc3QgQgogICAgIC8vIGZpcnN0IGZpbmQgaGlnaGVzdCBhbmQgbG93
ZXN0IGxldmVscwogICAgIHVjaGFyIGxldmVsTG93ID0gMTI4OwogICAgIHVjaGFyIGxldmVsSGln
aCA9IDA7Ci0gICAgQmlkaVJ1biAqciA9IHJ1bnMuZmlyc3QoKTsKKyAgICBCaWRpUnVuICpyID0g
c3J1bnMtPmZpcnN0KCk7CiAKICAgICB3aGlsZSAoIHIgKSB7CiAgICAgICAgIC8vcGFpbnRmKCJs
ZXZlbCA9ICVkXG4iLCByLT5sZXZlbCk7CkBAIC04MDEsNyArODc3LDcgQEAgdm9pZCBSZW5kZXJG
bG93OjpiaWRpUmVvcmRlckxpbmUoY29uc3QgQgogICAgICAgICAgICAgbGV2ZWxIaWdoID0gci0+
bGV2ZWw7CiAgICAgICAgIGlmICggci0+bGV2ZWwgPCBsZXZlbExvdyApCiAgICAgICAgICAgICBs
ZXZlbExvdyA9IHItPmxldmVsOwotICAgICAgICByID0gcnVucy5uZXh0KCk7CisgICAgICAgIHIg
PSBzcnVucy0+bmV4dCgpOwogICAgIH0KIAogICAgIC8vIGltcGxlbWVudHMgcmVvcmRlcmluZyBv
ZiB0aGUgbGluZSAoTDIgYWNjb3JkaW5nIHRvIEJpZGkgc3BlYyk6CkBAIC04MjAsMTcgKzg5Niwx
NyBAQCB2b2lkIFJlbmRlckZsb3c6OmJpZGlSZW9yZGVyTGluZShjb25zdCBCCiAgICAgICAgIGtk
RGVidWcoNjA0MSkgPDwgIiAgICAiIDw8IHIyIDw8ICIgIHN0YXJ0PSIgPDwgcjItPnN0YXJ0IDw8
ICIgIHN0b3A9IiA8PCByMi0+c3RvcCA8PCAiICBsZXZlbD0iIDw8ICh1aW50KXIyLT5sZXZlbCA8
PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpbnQgY291bnQgPSBydW5zLmNvdW50KCkgLSAxOworICAg
IGludCBjb3VudCA9IHNydW5zLT5jb3VudCgpIC0gMTsKIAogICAgIC8vIGRvIG5vdCByZXZlcnNl
IGZvciB2aXN1YWxseSBvcmRlcmVkIHdlYiBzaXRlcwogICAgIGlmKCFzdHlsZSgpLT52aXN1YWxs
eU9yZGVyZWQoKSkgewogICAgICAgICB3aGlsZShsZXZlbEhpZ2ggPj0gbGV2ZWxMb3cpIHsKICAg
ICAgICAgICAgIGludCBpID0gMDsKICAgICAgICAgICAgIHdoaWxlICggaSA8IGNvdW50ICkgewot
ICAgICAgICAgICAgICAgIHdoaWxlKGkgPCBjb3VudCAmJiBydW5zLmF0KGkpLT5sZXZlbCA8IGxl
dmVsSGlnaCkKKyAgICAgICAgICAgICAgICB3aGlsZShpIDwgY291bnQgJiYgc3J1bnMtPmF0KGkp
LT5sZXZlbCA8IGxldmVsSGlnaCkKICAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAg
ICAgICAgIGludCBzdGFydCA9IGk7Ci0gICAgICAgICAgICAgICAgd2hpbGUoaSA8PSBjb3VudCAm
JiBydW5zLmF0KGkpLT5sZXZlbCA+PSBsZXZlbEhpZ2gpCisgICAgICAgICAgICAgICAgd2hpbGUo
aSA8PSBjb3VudCAmJiBzcnVucy0+YXQoaSktPmxldmVsID49IGxldmVsSGlnaCkKICAgICAgICAg
ICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgIGludCBlbmQgPSBpLTE7CiAKQEAgLTgz
OCwxMCArOTE0LDEwIEBAIHZvaWQgUmVuZGVyRmxvdzo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IEIK
ICAgICAgICAgICAgICAgICAgICAgLy9rZERlYnVnKDYwNDEpIDw8ICJyZXZlcnNpbmcgZnJvbSAi
IDw8IHN0YXJ0IDw8ICIgdG8gIiA8PCBlbmQgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAg
Zm9yKGludCBqID0gMDsgaiA8IChlbmQtc3RhcnQrMSkvMjsgaisrKQogICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlSdW4gKmZpcnN0ID0g
cnVucy50YWtlKHN0YXJ0K2opOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlSdW4g
Kmxhc3QgPSBydW5zLnRha2UoZW5kLWotMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnVucy5pbnNlcnQoc3RhcnQraiwgbGFzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnVucy5pbnNlcnQoZW5kLWosIGZpcnN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
aWRpUnVuICpmaXJzdCA9IHNydW5zLT50YWtlKHN0YXJ0K2opOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJpZGlSdW4gKmxhc3QgPSBzcnVucy0+dGFrZShlbmQtai0xKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcnVucy0+aW5zZXJ0KHN0YXJ0K2osIGxhc3QpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNydW5zLT5pbnNlcnQoZW5kLWosIGZpcnN0KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aSsrOwpAQCAtODYwLDQ3ICs5MzYsNTQgQEAgdm9pZCBSZW5kZXJGbG93OjpiaWRpUmVvcmRlckxp
bmUoY29uc3QgQgogICAgICAgICBrZERlYnVnKDYwNDEpIDw8ICIgICAgIiA8PCByMyA8PCBlbmRs
OwogICAgIH0KICNlbmRpZgorfQogCit2b2lkIFJlbmRlckZsb3c6OmNvbXB1dGVQb3NpdGlvbnNG
b3JMaW5lKElubGluZUZsb3dCb3gqIGxpbmVCb3gsIEJpZGlDb250ZXh0KiBlbmRFbWJlZCkKK3sK
ICAgICBpbnQgbWF4UG9zaXRpb25Ub3AgPSAwOwogICAgIGludCBtYXhQb3NpdGlvbkJvdHRvbSA9
IDA7CiAgICAgaW50IG1heEFzY2VudCA9IDA7CiAgICAgaW50IG1heERlc2NlbnQgPSAwOwotICAg
IHIgPSBydW5zLmZpcnN0KCk7CisgICAgQmlkaVJ1biAqciA9IHNydW5zLT5maXJzdCgpOwogICAg
IHdoaWxlICggciApIHsKLSAgICAgICAgci0+aGVpZ2h0ID0gci0+b2JqLT5saW5lSGVpZ2h0KCBm
aXJzdExpbmUgKTsKLQlyLT5iYXNlbGluZSA9IHItPm9iai0+YmFzZWxpbmVQb3NpdGlvbiggZmly
c3RMaW5lICk7CisgICAgICAgIGludCBoZWlnaHQgPSByLT5vYmotPmxpbmVIZWlnaHQoIGZpcnN0
TGluZSApOworCWludCBiYXNlbGluZSA9IHItPm9iai0+YmFzZWxpbmVQb3NpdGlvbiggZmlyc3RM
aW5lICk7CisgICAgICAgIHItPmJveC0+c2V0SGVpZ2h0KGhlaWdodCk7CisJci0+Ym94LT5zZXRC
YXNlbGluZShiYXNlbGluZSk7CiAvLyAJaWYgKCByLT5iYXNlbGluZSA+IHItPmhlaWdodCApCiAv
LyAJICAgIHItPmJhc2VsaW5lID0gci0+aGVpZ2h0OworCS8vIEZJWE1FOiB3aGVyZSBkaWQgdGhp
cyBnbyBpbiBXZWJDb3JlPwogICAgICAgICByLT52ZXJ0aWNhbCA9IHItPm9iai0+dmVydGljYWxQ
b3NpdGlvbkhpbnQoIGZpcnN0TGluZSApOwogICAgICAgICAvL2tkRGVidWcoNjA0MSkgPDwgIm9i
amVjdD0iPDwgci0+b2JqIDw8ICIgaGVpZ2h0PSI8PHItPmhlaWdodDw8IiBiYXNlbGluZT0iPDwg
ci0+YmFzZWxpbmUgPDwgIiB2ZXJ0aWNhbD0iIDw8IHItPnZlcnRpY2FsIDw8ZW5kbDsKICAgICAg
ICAgLy9pbnQgYXNjZW50OwogICAgICAgICBpZiAoIHItPnZlcnRpY2FsID09IFBvc2l0aW9uVG9w
ICkgewotICAgICAgICAgICAgaWYgKCBtYXhQb3NpdGlvblRvcCA8IHItPmhlaWdodCApIG1heFBv
c2l0aW9uVG9wID0gci0+aGVpZ2h0OworICAgICAgICAgICAgaWYgKCBtYXhQb3NpdGlvblRvcCA8
IGhlaWdodCApIG1heFBvc2l0aW9uVG9wID0gaGVpZ2h0OwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKCByLT52ZXJ0aWNhbCA9PSBQb3NpdGlvbkJvdHRvbSApIHsKLSAgICAgICAgICAgIGlm
ICggbWF4UG9zaXRpb25Cb3R0b20gPCByLT5oZWlnaHQgKSBtYXhQb3NpdGlvbkJvdHRvbSA9IHIt
PmhlaWdodDsKKyAgICAgICAgICAgIGlmICggbWF4UG9zaXRpb25Cb3R0b20gPCBoZWlnaHQgKSBt
YXhQb3NpdGlvbkJvdHRvbSA9IGhlaWdodDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGludCBhc2NlbnQgPSByLT5iYXNlbGluZSAtIHItPnZlcnRpY2FsOwotICAgICAg
ICAgICAgaW50IGRlc2NlbnQgPSByLT5oZWlnaHQgLSBhc2NlbnQ7CisgICAgICAgICAgICBpbnQg
YXNjZW50ID0gYmFzZWxpbmUgLSByLT52ZXJ0aWNhbDsKKyAgICAgICAgICAgIGludCBkZXNjZW50
ID0gaGVpZ2h0IC0gYXNjZW50OwogICAgICAgICAgICAgaWYobWF4QXNjZW50IDwgYXNjZW50KSBt
YXhBc2NlbnQgPSBhc2NlbnQ7CiAgICAgICAgICAgICBpZihtYXhEZXNjZW50IDwgZGVzY2VudCkg
bWF4RGVzY2VudCA9IGRlc2NlbnQ7CiAgICAgICAgIH0KLSAgICAgICAgciA9IHJ1bnMubmV4dCgp
OworICAgICAgICByID0gc3J1bnMtPm5leHQoKTsKICAgICB9CiAgICAgaWYgKCBtYXhBc2NlbnQr
bWF4RGVzY2VudCA8IFFNQVgoIG1heFBvc2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSApICkg
ewogICAgICAgICAvLyBub3cgdGhlIGNvbXB1dGVkIGxpbmVoZWlnaHQgbmVlZHMgdG8gYmUgZXh0
ZW5kZWQgZm9yIHRoZQogICAgICAgICAvLyBwb3NpdGlvbmVkIGVsZW1lbnRzCiAgICAgICAgIC8v
IHNlZSBraHRtbHRlc3RzL3JlbmRlcmluZy9odG1sX2FsaWduLmh0bWwKICAgICAgICAgLy8gIyMj
IG9ubHkgaXRlcmF0ZSBvdmVyIHRoZSBwb3NpdGlvbmVkIG9uZXMhCi0gICAgICAgIGZvciAoIHIg
PSBydW5zLmZpcnN0KCk7IHI7IHIgPSBydW5zLm5leHQoKSApIHsKKyAgICAgICAgZm9yICggciA9
IHNydW5zLT5maXJzdCgpOyByOyByID0gc3J1bnMtPm5leHQoKSApIHsKKwkgICAgaW50IGhlaWdo
dCA9IHItPmJveC0+aGVpZ2h0KCk7CiAgICAgICAgICAgICBpZiAoIHItPnZlcnRpY2FsID09IFBv
c2l0aW9uVG9wICkgewotICAgICAgICAgICAgICAgIGlmICggbWF4QXNjZW50ICsgbWF4RGVzY2Vu
dCA8IHItPmhlaWdodCApCi0gICAgICAgICAgICAgICAgICAgIG1heERlc2NlbnQgPSByLT5oZWln
aHQgLSBtYXhBc2NlbnQ7CisgICAgICAgICAgICAgICAgaWYgKCBtYXhBc2NlbnQgKyBtYXhEZXNj
ZW50IDwgaGVpZ2h0ICkKKyAgICAgICAgICAgICAgICAgICAgbWF4RGVzY2VudCA9IGhlaWdodCAt
IG1heEFzY2VudDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKCByLT52ZXJ0
aWNhbCA9PSBQb3NpdGlvbkJvdHRvbSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIG1heEFzY2Vu
dCArIG1heERlc2NlbnQgPCByLT5oZWlnaHQgKQotICAgICAgICAgICAgICAgICAgICBtYXhBc2Nl
bnQgPSByLT5oZWlnaHQgLSBtYXhEZXNjZW50OworICAgICAgICAgICAgICAgIGlmICggbWF4QXNj
ZW50ICsgbWF4RGVzY2VudCA8IGhlaWdodCApCisgICAgICAgICAgICAgICAgICAgIG1heEFzY2Vu
dCA9IGhlaWdodCAtIG1heERlc2NlbnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC05MTMsNyArOTk2LDcgQEAgdm9pZCBSZW5k
ZXJGbG93OjpiaWRpUmVvcmRlckxpbmUoY29uc3QgQgogICAgIGludCBtYXhIZWlnaHQgPSBtYXhB
c2NlbnQgKyBtYXhEZXNjZW50OwogICAgIC8vIENTUzI6IDEwLjguMTogbGluZS1oZWlnaHQgb24g
dGhlIGJsb2NrIGxldmVsIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSAqbWluaW11bSoKICAgICAvLyBo
ZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBsaW5lIGJveAotICAgIHIgPSBydW5zLmZpcnN0KCk7Cisg
ICAgciA9IHNydW5zLT5maXJzdCgpOwogICAgIC8vICMjIyB3ZSBoYXZlIG5vIHJlbGlhYmxlIHdh
eSBvZiBkZXRlY3RpbmcgZW1wdHkgbGluZWJveGVzIC0gd2hpY2gKICAgICAvLyBhcmUgbm90IGFs
bG93ZWQgdG8gaGF2ZSBhbnkgaGVpZ2h0LiBzaWdoLihEaXJrKQogLy8gICAgIGlmICggciApIHsK
QEAgLTkyNiwzMCArMTAwOSwzMiBAQCB2b2lkIFJlbmRlckZsb3c6OmJpZGlSZW9yZGVyTGluZShj
b25zdCBCCiAgICAga2REZWJ1ZyggNjA0MCApIDw8ICJzdGFydGluZyBydW4uLiIgPDwgZW5kbDsK
ICNlbmRpZgogICAgIHdoaWxlICggciApIHsKKyAgICAgICAgaW50IHdpZHRoOwogICAgICAgICBp
ZihyLT52ZXJ0aWNhbCA9PSBQb3NpdGlvblRvcCkKICAgICAgICAgICAgIHItPnZlcnRpY2FsID0g
bV9oZWlnaHQ7CiAgICAgICAgIGVsc2UgaWYoci0+dmVydGljYWwgPT0gUG9zaXRpb25Cb3R0b20p
Ci0gICAgICAgICAgICByLT52ZXJ0aWNhbCA9IG1faGVpZ2h0ICsgbWF4SGVpZ2h0IC0gci0+aGVp
Z2h0OworICAgICAgICAgICAgci0+dmVydGljYWwgPSBtX2hlaWdodCArIG1heEhlaWdodCAtIHIt
PmJveC0+aGVpZ2h0KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHItPnZlcnRpY2FsICs9
IG1faGVpZ2h0ICsgbWF4QXNjZW50IC0gci0+YmFzZWxpbmU7CisgICAgICAgICAgICByLT52ZXJ0
aWNhbCArPSBtX2hlaWdodCArIG1heEFzY2VudCAtIHItPmJveC0+YmFzZWxpbmUoKTsKIAogICAg
ICAgICBpZihyLT5vYmotPmlzVGV4dCgpKQotICAgICAgICAgICAgci0+d2lkdGggPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUZXh0ICo+KHItPm9iaiktPndpZHRoKHItPnN0YXJ0LCByLT5zdG9wLXItPnN0
YXJ0LCBmaXJzdExpbmUpOworICAgICAgICAgICAgd2lkdGggPSBzdGF0aWNfY2FzdDxSZW5kZXJU
ZXh0ICo+KHItPm9iaiktPndpZHRoKHItPnN0YXJ0LCByLT5zdG9wLXItPnN0YXJ0LCBmaXJzdExp
bmUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHItPm9iai0+Y2FsY1dpZHRoKCk7Ci0g
ICAgICAgICAgICByLT53aWR0aCA9IHItPm9iai0+d2lkdGgoKStyLT5vYmotPm1hcmdpbkxlZnQo
KStyLT5vYmotPm1hcmdpblJpZ2h0KCk7CisgICAgICAgICAgICB3aWR0aCA9IHItPm9iai0+d2lk
dGgoKStyLT5vYmotPm1hcmdpbkxlZnQoKStyLT5vYmotPm1hcmdpblJpZ2h0KCk7CiAgICAgICAg
IH0KKwlyLT5ib3gtPnNldFdpZHRoKHdpZHRoKTsKICNpZiBCSURJX0RFQlVHID4gMAogCWtkRGVi
dWcoNjA0MCkgPDwgIm9iamVjdD0iPDwgci0+b2JqIDw8ICIgcGxhY2luZyBhdCB2ZXJ0aWNhbD0i
IDw8IHItPnZlcnRpY2FsIDw8IiB3aWR0aD0iIDw8IHItPndpZHRoIDw8ZW5kbDsKICNlbmRpZgot
ICAgICAgICB0b3RXaWR0aCArPSByLT53aWR0aDsKLSAgICAgICAgciA9IHJ1bnMubmV4dCgpOwor
ICAgICAgICB0b3RXaWR0aCArPSB3aWR0aDsKKyAgICAgICAgciA9IHNydW5zLT5uZXh0KCk7CiAg
ICAgfQogICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAieVBvcyBvZiBsaW5lPSIgPDwgbV9oZWlnaHQg
PDwgIiAgbGluZUJveEhlaWdodD0iIDw8IG1heEhlaWdodCA8PCBlbmRsOwogCiAgICAgLy8gbm93
IGNvbnN0cnVjdCB0aGUgcmVvcmRlcmVkIHN0cmluZyBvdXQgb2YgdGhlIHJ1bnMuLi4KIAotICAg
IHIgPSBydW5zLmZpcnN0KCk7CisgICAgciA9IHNydW5zLT5maXJzdCgpOwogICAgIGludCB4ID0g
bGVmdE9mZnNldChtX2hlaWdodCk7CiAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRo
KG1faGVpZ2h0KTsKICAgICBzd2l0Y2goc3R5bGUoKS0+dGV4dEFsaWduKCkpIHsKQEAgLTk5NSwx
NyArMTA4MCwyMSBAQCB2b2lkIFJlbmRlckZsb3c6OmJpZGlSZW9yZGVyTGluZShjb25zdCBCCiAJ
CXRvdFdpZHRoICs9IHNwYWNlQWRkOwogCSAgICB9CiAJfQotICAgICAgICByLT5vYmotPnBvc2l0
aW9uKHgsIHItPnZlcnRpY2FsLCByLT5zdGFydCwgci0+c3RvcCAtIHItPnN0YXJ0LCByLT53aWR0
aCwgci0+bGV2ZWwlMiwgZmlyc3RMaW5lLCBzcGFjZUFkZCk7Ci0gICAgICAgIHggKz0gci0+d2lk
dGggKyBzcGFjZUFkZDsKLSAgICAgICAgciA9IHJ1bnMubmV4dCgpOworCXItPmJveC0+c2V0WFBv
cyh4KTsKKwlyLT5ib3gtPnNldFlQb3Moci0+dmVydGljYWwpOworCS8vIEZJWE1FOiB0aGlzIGFz
c2lnbm1lbnQgaXMgcHJvYmFibHkgcmVkdW5kYW50CisvLwlyLT5ib3gtPnNldEJhc2VsaW5lKGJh
c2VsaW5lUG9zaXRpb24oIGZpcnN0TGluZSApKTsKKwlyLT5ib3gtPnNldEZpcnN0TGluZVN0eWxl
Qml0KGZpcnN0TGluZSk7CisvLwlrZERlYnVnKDYwNDApIDw8ICJzdGFydDogIiA8PCByLT5zdGFy
dCA8PCAiIHN0b3A6ICIgPDwgci0+c3RvcCA8PCBlbmRsOworICAgICAgICByLT5vYmotPnBvc2l0
aW9uKHItPmJveCwgci0+c3RhcnQsIHItPnN0b3AgLSByLT5zdGFydCwgci0+bGV2ZWwlMiwgc3Bh
Y2VBZGQpOworICAgICAgICB4ICs9IHItPmJveC0+d2lkdGgoKSArIHNwYWNlQWRkOworICAgICAg
ICByID0gc3J1bnMtPm5leHQoKTsKICAgICB9CiAKICAgICBtX2hlaWdodCArPSBtYXhIZWlnaHQ7
CiAKLSAgICBzcnVucyA9IDA7CiB9CiAKLQogdm9pZCBSZW5kZXJGbG93OjpsYXlvdXRJbmxpbmVD
aGlsZHJlbiggYm9vbCByZWxheW91dENoaWxkcmVuICkKIHsKICAgICBpbnZhbGlkYXRlVmVydGlj
YWxQb3NpdGlvbnMoKTsKQEAgLTEwMjUsNiArMTExNCw5IEBAIHZvaWQgUmVuZGVyRmxvdzo6bGF5
b3V0SW5saW5lQ2hpbGRyZW4oIGIKICAgICBtX2hlaWdodCArPSBwYWRkaW5nVG9wKCk7CiAgICAg
dG9BZGQgKz0gcGFkZGluZ0JvdHRvbSgpOwogCisgICAgLy8gQ2xlYXIgb3V0IG91ciBsaW5lIGJv
eGVzLgorICAgIGRlbGV0ZUxpbmVCb3hlcygpOworCiAgICAgaWYoZmlyc3RDaGlsZCgpKSB7CiAg
ICAgICAgIC8vIGxheW91dCByZXBsYWNlZCBlbGVtZW50cwogICAgICAgICBSZW5kZXJPYmplY3Qg
Km8gPSBmaXJzdCggdGhpcyApOwpAQCAtMTAzNyw3ICsxMTI5LDkgQEAgdm9pZCBSZW5kZXJGbG93
OjpsYXlvdXRJbmxpbmVDaGlsZHJlbiggYgogICAgICAgICAgICAgICAgICAgICBvLT5sYXlvdXQo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYoby0+aXNUZXh0KCkpCi0gICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+ZGVsZXRlU2xhdmVzKCBy
ZW5kZXJBcmVuYSgpICk7CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAq
PihvKS0+ZGVsZXRlUnVucyggcmVuZGVyQXJlbmEoKSApOworICAgICAgICAgICAgZWxzZSBpZiAo
by0+aXNGbG93KCkvKiAmJiAhZW5kT2ZJbmxpbmUqLykKKyAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJGbG93Kj4obyktPmRlbGV0ZUxpbmVCb3hlcygpOwogICAgICAgICAgICAgbyA9
IEJpZGluZXh0KCB0aGlzLCBvICk7CiAgICAgICAgIH0KIApAQCAtMTA2MCwxMiArMTE1NCwzMyBA
QCB2b2lkIFJlbmRlckZsb3c6OmxheW91dElubGluZUNoaWxkcmVuKCBiCiAKICAgICAgICAgZmly
c3RMaW5lID0gdHJ1ZTsKICAgICAgICAgd2hpbGUoICFlbmQuYXRFbmQoKSApIHsKKyAgICAgICAg
ICAgIFFQdHJMaXN0PEJpZGlSdW4+IHJ1bnM7CisgICAgICAgICAgICBydW5zLnNldEF1dG9EZWxl
dGUodHJ1ZSk7CisgICAgICAgICAgICBzcnVucyA9ICZydW5zOworCiAgICAgICAgICAgICBzdGFy
dCA9IGVuZDsKIAogICAgICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsoc3RhcnQpOwog
ICAgICAgICAgICAgaWYoIHN0YXJ0LmF0RW5kKCkgKSBicmVhazsKIAkgICAgYmlkaVJlb3JkZXJM
aW5lKHN0YXJ0LCBlbmQpOwogCisJICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3J1bnMgJiYg
c3J1bnMtPmNvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIElubGluZUZsb3dCb3gq
IGxpbmVCb3ggPSBjb25zdHJ1Y3RMaW5lKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgICAg
ICBpZiAobGluZUJveCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHdlIHBvc2l0
aW9uIGFsbCBvZiBvdXIgdGV4dCBydW5zIGhvcml6b250YWxseS4KKy8vICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gsIGNvbnRl
eHQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgcG9zaXRpb24gb3VyIHRleHQg
cnVucyB2ZXJ0aWNhbGx5LgorLy8gICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmVydGlj
YWxQb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gpOworCQkJY29tcHV0ZVBvc2l0aW9uc0ZvckxpbmUo
bGluZUJveCwgY29udGV4dCk7CisKKwkJCS8vIEZJWE1FOiBuZWVkcyBwb3J0aW5nIG9mIHNydW5z
IHRvIHMqQmlkaVJ1biBzdHVmZgorICAgICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGVCaWRp
UnVucyhyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKwkgICAgfQorCiAgICAgICAgICAgICBpZiggZW5kID09IHN0YXJ0IHx8IChlbmQub2Jq
ICYmIGVuZC5vYmotPmlzQlIoKSAmJiAhc3RhcnQub2JqLT5pc0JSKCkgKSApIHsKIAkJYWRqdXN0
RW1iZWRkZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgKytlbmQ7CkBAIC0xMDc5LDYgKzEx
OTQsNyBAQCB2b2lkIFJlbmRlckZsb3c6OmxheW91dElubGluZUNoaWxkcmVuKCBiCiAgICAgICAg
ICAgICBuZXdMaW5lKCk7CiAgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKICAgICAgICAg
fQorCXNydW5zID0gMDsKIAogCS8vIGNsZWFuIHVwCiAJd2hpbGUgKCBjb250ZXh0ICkgewpAQCAt
MTE1MCw3ICsxMjY2LDcgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckZsb3c6OmZpbmROZXh0TGluZUJy
ZQogCiAgICAgd2hpbGUoIG8gKSB7CiAjaWZkZWYgREVCVUdfTElORUJSRUFLUwotICAgICAgICBr
ZERlYnVnKDYwNDEpIDw8ICJuZXcgb2JqZWN0ICI8PCBvIDw8IiB3aWR0aCA9ICIgPDwgdyA8PCIg
dG1wdyA9ICIgPDwgdG1wVyA8PCBlbmRsOworICAgICAgICBrZERlYnVnKDYwNDEpIDw8ICJuZXcg
Ijw8IG8tPnJlbmRlck5hbWUoKSA8PCAiQCI8PCBvIDw8IiB3aWR0aCA9ICIgPDwgdyA8PCIgdG1w
dyA9ICIgPDwgdG1wVyA8PCBlbmRsOwogI2VuZGlmCiAgICAgICAgIGlmKG8tPmlzQlIoKSkgewog
ICAgICAgICAgICAgaWYoIHcgKyB0bXBXIDw9IHdpZHRoICkgewpJbmRleDogcmVuZGVyaW5nL2Jp
ZGkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJp
bmcvYmlkaS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2IGJp
ZGkuaAotLS0gcmVuZGVyaW5nL2JpZGkuaAkxNyBNYXkgMjAwMyAyMjoxMjo1OCAtMDAwMAkxLjE2
CisrKyByZW5kZXJpbmcvYmlkaS5oCTkgQXVnIDIwMDMgMDI6NDU6MDcgLTAwMDAKQEAgLTI5LDYg
KzI5LDcgQEAgbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBSZW5kZXJGbG93OwogICAgIGNs
YXNzIFJlbmRlck9iamVjdDsKICAgICBjbGFzcyBSZW5kZXJBcmVuYTsKKyAgICBjbGFzcyBJbmxp
bmVCb3g7CiAKICAgICBjbGFzcyBCaWRpQ29udGV4dCB7CiAgICAgcHVibGljOgpAQCAtNTIsOCAr
NTMsOCBAQCBuYW1lc3BhY2Uga2h0bWwgewogCiAgICAgc3RydWN0IEJpZGlSdW4gewogCUJpZGlS
dW4oaW50IF9zdGFydCwgaW50IF9zdG9wLCBSZW5kZXJPYmplY3QgKl9vYmosIEJpZGlDb250ZXh0
ICpjb250ZXh0LCBRQ2hhcjo6RGlyZWN0aW9uIGRpcikKLQkgICAgOiAgdmVydGljYWwoIDAgKSwg
YmFzZWxpbmUoIDAgKSwgaGVpZ2h0KCAwICksIHdpZHRoKCAwICksCi0JICAgICAgIHN0YXJ0KCBf
c3RhcnQgKSwgc3RvcCggX3N0b3AgKSwgb2JqKCBfb2JqICkKKwkgICAgOiAgdmVydGljYWwoIDAg
KSwKKwkgICAgICAgc3RhcnQoIF9zdGFydCApLCBzdG9wKCBfc3RvcCApLCBvYmooIF9vYmogKSwg
Ym94KDApCiAJewogCSAgICBpZihkaXIgPT0gUUNoYXI6OkRpck9OKSBkaXIgPSBjb250ZXh0LT5k
aXI7CiAKQEAgLTcyLDEzICs3MywxMSBAQCBuYW1lc3BhY2Uga2h0bWwgewogCX0KIAogCWludCB2
ZXJ0aWNhbDsKLQlzaG9ydCBiYXNlbGluZTsKLQlzaG9ydCBoZWlnaHQ7Ci0JaW50IHdpZHRoOwog
CiAJaW50IHN0YXJ0OwogCWludCBzdG9wOwogCVJlbmRlck9iamVjdCAqb2JqOworICAgICAgICBJ
bmxpbmVCb3gqIGJveDsKIAogCS8vIGV4cGxpY2l0ICsgaW1wbGljaXQgbGV2ZWxzIGhlcmUKIAl1
Y2hhciBsZXZlbDsKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfYm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTk4CmRpZmYgLXUgLXAgLXIxLjE5OCByZW5kZXJfYm94
LmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCTE4IEZlYiAyMDAzIDIxOjEwOjQ1IC0w
MDAwCTEuMTk4CisrKyByZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAJOSBBdWcgMjAwMyAwMjo0NTow
OSAtMDAwMApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgInJlbmRlcl9sYXllci5oIgogI2lu
Y2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIK
KyNpbmNsdWRlICJyZW5kZXJfbGluZS5oIgogCiAjaW5jbHVkZSA8a2h0bWx2aWV3Lmg+CiAjaW5j
bHVkZSA8a2RlYnVnLmg+CkBAIC00MTUsMTAgKzQxNiwxMCBAQCBib29sIFJlbmRlckJveDo6YWJz
b2x1dGVQb3NpdGlvbihpbnQgJnhQCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJveDo6cG9zaXRp
b24oaW50IHgsIGludCB5LCBpbnQsIGludCwgaW50LCBib29sLCBib29sLCBpbnQpCit2b2lkIFJl
bmRlckJveDo6cG9zaXRpb24oSW5saW5lQm94KiBib3gsIGludCAvKmZyb20qLywgaW50IC8qbGVu
Ki8sIGJvb2wgLypyZXZlcnNlKi8sIGludCkKIHsKLSAgICBtX3ggPSB4ICsgbWFyZ2luTGVmdCgp
OwotICAgIG1feSA9IHk7CisgICAgbV94ID0gYm94LT54UG9zKCkgKyBtYXJnaW5MZWZ0KCk7Cisg
ICAgbV95ID0gYm94LT55UG9zKCk7CiAgICAgLy8gIyMjIHBhZGRpbmdzCiAgICAgLy9tX3dpZHRo
ID0gd2lkdGg7CiB9CkBAIC0xMDA4LDYgKzEwMDksNDcgQEAgaW50IFJlbmRlckJveDo6cmlnaHRt
b3N0UG9zaXRpb24oKSBjb25zdAogICAgIGlmICggbV9sYXllciApCiAJcmlnaHQgPSBRTUFYKCBy
aWdodCwgbV9sYXllci0+d2lkdGgoKSApOwogICAgIHJldHVybiBtX3dpZHRoOworfQorCit2b2lk
IFJlbmRlckJveDo6Y2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwg
aW50ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpCit7CisgICAgX3ggPSAtMTsKKworICAg
IC8vIHByb3BhZ2F0ZSBpdCBkb3dud2FyZHMgdG8gaXRzIGNoaWxkcmVuLCBzb21lb25lIHdpbGwg
ZmVlbCByZXNwb25zaWJsZQorICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7
CisgICAgaWYgKGNoaWxkKSBrZERlYnVnKDYwNDApIDw8ICJkZWxlZ2F0aW5nIGNhcmV0UG9zIHRv
ICIgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCBlbmRsOworICAgIGlmIChjaGlsZCkgY2hpbGQt
PmNhcmV0UG9zKG9mZnNldCwgb3ZlcnJpZGUsIF94LCBfeSwgd2lkdGgsIGhlaWdodCk7CisKKyAg
ICAvLyBpZiBub3QsIHVzZSB0aGUgZXh0ZW50cyBvZiB0aGlzIGJveC4gb2Zmc2V0IDAgbWVhbnMg
bGVmdCwgb2Zmc2V0IDEgbWVhbnMKKyAgICAvLyByaWdodAorICAgIGlmIChfeCA9PSAtMSkgewor
ICAgICAgICBrZERlYnVnKDYwNDApIDw8ICJubyBkZWxlZ2F0aW9uIiA8PCBlbmRsOworICAgICAg
ICBfeCA9IHhQb3MoKSArIChvZmZzZXQgPT0gMCA/IDAgOiBtX3dpZHRoKTsKKwlfeSA9IHlQb3Mo
KTsKKwloZWlnaHQgPSBtX2hlaWdodDsKKwl3aWR0aCA9IG92ZXJyaWRlICYmIG9mZnNldCA9PSAw
ID8gbV93aWR0aCA6IDE7CisJCisJLy8gSWYgaGVpZ2h0IG9mIGJveCBpcyBzbWFsbGVyIHRoYW4g
Zm9udCBoZWlnaHQsIHVzZSB0aGUgbGF0dGVyIG9uZSwKKwkvLyBvdGhlcndpc2UgdGhlIGNhcmV0
IG1pZ2h0IGJlY29tZSBpbnZpc2libGUuCisJLy8gRklYTUU6IGlnbm9yaW5nIDpmaXJzdC1saW5l
LCBtaXNzaW5nIGdvb2QgcmVhc29uIHRvIHRha2UgY2FyZSBvZgorCWludCBmb250SGVpZ2h0ID0g
c3R5bGUoKS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKwlpZiAoZm9udEhlaWdodCA+IGhlaWdo
dCkKKwkgIGhlaWdodCA9IGZvbnRIZWlnaHQ7CisKKyAgICAgICAgaW50IGFic3gsIGFic3k7CisK
KyAgICAgICAgUmVuZGVyT2JqZWN0ICpjYiA9IGNvbnRhaW5pbmdCbG9jaygpOworCisgICAgICAg
IGlmIChjYiAmJiBjYiAhPSB0aGlzICYmIGNiLT5hYnNvbHV0ZVBvc2l0aW9uKGFic3gsYWJzeSkp
IHsKKyAgICAgICAgICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAiYWJzeD0iIDw8IGFic3ggPDwgIiBh
YnN5PSIgPDwgYWJzeSA8PCBlbmRsOworICAgICAgICAgICAgX3ggKz0gYWJzeDsKKyAgICAgICAg
ICAgIF95ICs9IGFic3k7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyB3ZSBkb24n
dCBrbm93IG91ciBhYnNvbHV0ZSBwb3NpdGlvbiwgYW5kIHRoZXJlIGlzIG5vIHBvaW50IHJldHVy
bmluZworICAgICAgICAgICAgLy8ganVzdCBhIHJlbGF0aXZlIG9uZQorICAgICAgICAgICAgX3gg
PSBfeSA9IC0xOworICAgICAgICB9LyplbmQgaWYqLworICAgIH0vKmVuZCBpZiovCiB9CiAKICN1
bmRlZiBERUJVR19MQVlPVVQKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfYm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3gu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MwpkaWZmIC11IC1wIC1yMS42MyByZW5kZXJfYm94
LmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfYm94LmgJMTcgTWF5IDIwMDMgMjI6MTI6NTggLTAwMDAJ
MS42MworKysgcmVuZGVyaW5nL3JlbmRlcl9ib3guaAk5IEF1ZyAyMDAzIDAyOjQ1OjA5IC0wMDAw
CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lkdGgoIGlu
dCB3aWR0aCApOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIZWlnaHQoIGludCBoZWlnaHQgKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihpbnQgeCwgaW50IHksIGludCBmcm9tLCBpbnQgbGVu
LCBpbnQgd2lkdGgsIGJvb2wgcmV2ZXJzZSwgYm9vbCBmaXJzdExpbmUsIGludCk7CisgICAgdmly
dHVhbCB2b2lkIHBvc2l0aW9uKElubGluZUJveCogYm94LCBpbnQgZnJvbSwgaW50IGxlbiwgYm9v
bCByZXZlcnNlLCBpbnQpOwogCiAgICAgdmlydHVhbCBpbnQgbG93ZXN0UG9zaXRpb24oKSBjb25z
dDsKICAgICB2aXJ0dWFsIGludCByaWdodG1vc3RQb3NpdGlvbigpIGNvbnN0OwpAQCAtOTcsNiAr
OTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxjVmVydGljYWxNYXJnaW5zKCk7CiAKICAgICB2
aXJ0dWFsIFJlbmRlckxheWVyKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBjYXJldFBvcyhpbnQgb2Zmc2V0LCBib29sIG92ZXJyaWRlLCBpbnQg
Jl94LCBpbnQgJl95LCBpbnQgJndpZHRoLCBpbnQgJmhlaWdodCk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhRUGFpbnRlciAqcCxpbnQgX3gsIGlu
dCBfeSwKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfYnIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYnIuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXUgLXAgLXIxLjE1IHJlbmRlcl9ici5jcHAKLS0tIHJl
bmRlcmluZy9yZW5kZXJfYnIuY3BwCTE0IEphbiAyMDAyIDE5OjU2OjQ1IC0wMDAwCTEuMTUKKysr
IHJlbmRlcmluZy9yZW5kZXJfYnIuY3BwCTkgQXVnIDIwMDMgMDI6NDU6MDkgLTAwMDAKQEAgLTM1
LDIxICszNSwyNSBAQCBSZW5kZXJCUjo6flJlbmRlckJSKCkKIHsKIH0KIAotdm9pZCBSZW5kZXJC
Ujo6Y3Vyc29yUG9zKGludCAvKm9mZnNldCovLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdo
dCkKK3ZvaWQgUmVuZGVyQlI6OmNhcmV0UG9zKGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGlu
dCAmX3gsIGludCAmX3ksIGludCAmd2lkdGgsIGludCAmaGVpZ2h0KQogeworICBSZW5kZXJUZXh0
OjpjYXJldFBvcyhvZmZzZXQsb3ZlcnJpZGUsX3gsX3ksd2lkdGgsaGVpZ2h0KTsKKyAgcmV0dXJu
OworI2lmIDAKICAgICBpZiAocHJldmlvdXNTaWJsaW5nKCkgJiYgIXByZXZpb3VzU2libGluZygp
LT5pc0JSKCkgJiYgIXByZXZpb3VzU2libGluZygpLT5pc0Zsb2F0aW5nKCkpIHsKICAgICAgICAg
aW50IG9mZnNldCA9IDA7CiAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcoKS0+aXNUZXh0KCkp
Ci0gICAgICAgICAgICBvZmZzZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocHJldmlvdXNT
aWJsaW5nKCkpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIG9mZnNldCA9IHN0YXRpY19jYXN0PFJl
bmRlclRleHQqPihwcmV2aW91c1NpYmxpbmcoKSktPm1heE9mZnNldCgpOwogCi0gICAgICAgIHBy
ZXZpb3VzU2libGluZygpLT5jdXJzb3JQb3Mob2Zmc2V0LF94LF95LGhlaWdodCk7CisJLy8gRklY
TUU6IHRoaXMgd29uJ3QgcmV0dXJuIGEgYmlnIHdpZHRoIGluIG92ZXJyaWRlIG1vZGUgKExTKQor
ICAgICAgICBwcmV2aW91c1NpYmxpbmcoKS0+Y2FyZXRQb3Mob2Zmc2V0LG92ZXJyaWRlLF94LF95
LHdpZHRoLGhlaWdodCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbnQgYWJzeCwg
YWJzeTsKICAgICBhYnNvbHV0ZVBvc2l0aW9uKGFic3gsYWJzeSk7CiAgICAgaWYgKGFic3ggPT0g
LTEpIHsKLSAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyBvdXQgYWJzb2x1YXRlIHBvc2l0aW9uLCBh
bmQgdGhlcmUgaXMgbm90IHBvaW50IHJldHVybmluZworICAgICAgICAvLyB3ZSBkb24ndCBrbm93
IG91dCBhYnNvbHV0ZSBwb3NpdGlvbiwgYW5kIHRoZXJlIGlzIG5vIHBvaW50IHJldHVybmluZwog
ICAgICAgICAvLyBqdXN0IGEgcmVsYXRpdmUgb25lCiAgICAgICAgIF94ID0gX3kgPSAtMTsKICAg
ICB9CkBAIC01OCw2ICs2Miw3IEBAIHZvaWQgUmVuZGVyQlI6OmN1cnNvclBvcyhpbnQgLypvZmZz
ZXQqLywKICAgICAgICAgX3kgKz0gYWJzeTsKICAgICB9CiAgICAgaGVpZ2h0ID0gUmVuZGVyVGV4
dDo6dmVydGljYWxQb3NpdGlvbkhpbnQoIGZhbHNlICk7Ci0KKyAgICB3aWR0aCA9IG92ZXJyaWRl
ID8gaGVpZ2h0IC8gMiA6IDE7CisjZW5kaWYKIH0KIApJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9i
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmlu
Zy9yZW5kZXJfYnIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1yMS4x
OSByZW5kZXJfYnIuaAotLS0gcmVuZGVyaW5nL3JlbmRlcl9ici5oCTE3IE1heSAyMDAzIDIyOjEy
OjU4IC0wMDAwCTEuMTkKKysrIHJlbmRlcmluZy9yZW5kZXJfYnIuaAk5IEF1ZyAyMDAzIDAyOjQ1
OjA5IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHNob3J0IG1h
eFdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBib29sIGlzQlIoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1cnNvclBvcyhpbnQgb2Zm
c2V0LCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIGNh
cmV0UG9zKGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGludCAmX3gsIGludCAmX3ksIGludCAm
d2lkdGgsIGludCAmaGVpZ2h0KTsKIH07CiAKIH0KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZmxv
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9mbG93LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMzAKZGlmZiAtdSAt
cCAtcjEuMzMwIHJlbmRlcl9mbG93LmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcAky
MSBKdW4gMjAwMyAwOToxNDo1MiAtMDAwMAkxLjMzMAorKysgcmVuZGVyaW5nL3JlbmRlcl9mbG93
LmNwcAk5IEF1ZyAyMDAzIDAyOjQ1OjExIC0wMDAwCkBAIC03Miw2ICs3Miw1NCBAQCBSZW5kZXJG
bG93OjpSZW5kZXJGbG93KERPTTo6Tm9kZUltcGwqIG5vCiAgICAgbV9vdmVyZmxvd0hlaWdodCA9
IDA7CiAKICAgICBtX2NvbnRpbnVhdGlvbiA9IDA7CisgICAgbV9maXJzdExpbmVCb3ggPSAwOwor
ICAgIG1fbGFzdExpbmVCb3ggPSAwOworfQorCit2b2lkIFJlbmRlckZsb3c6OmRlbGV0ZUxpbmVC
b3hlcyhSZW5kZXJBcmVuYSogYXJlbmEpCit7CisgICAgaWYgKG1fZmlyc3RMaW5lQm94KSB7Cisg
ICAgICAgIGlmICghYXJlbmEpCisgICAgICAgICAgICBhcmVuYSA9IHJlbmRlckFyZW5hKCk7Cisg
ICAgICAgIElubGluZVJ1bkJveCAqY3Vycj1tX2ZpcnN0TGluZUJveCwgKm5leHQ9MDsKKyAgICAg
ICAgd2hpbGUgKGN1cnIpIHsKKyAgICAgICAgICAgIG5leHQgPSBjdXJyLT5uZXh0TGluZUJveCgp
OworICAgICAgICAgICAgY3Vyci0+ZGV0YWNoKGFyZW5hKTsKKyAgICAgICAgICAgIGN1cnIgPSBu
ZXh0OworICAgICAgICB9CisgICAgICAgIG1fZmlyc3RMaW5lQm94ID0gMDsKKyAgICAgICAgbV9s
YXN0TGluZUJveCA9IDA7CisgICAgfQorfQorCit2b2lkIFJlbmRlckZsb3c6OmRldGFjaChSZW5k
ZXJBcmVuYSogcmVuZGVyQXJlbmEpCit7CisgICAgZGVsZXRlTGluZUJveGVzKHJlbmRlckFyZW5h
KTsKKyAgICBSZW5kZXJCb3g6OmRldGFjaChyZW5kZXJBcmVuYSk7Cit9CisKK0lubGluZUJveCog
UmVuZGVyRmxvdzo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94KQorewor
ICAgIGlmIChpc1JlcGxhY2VkKCkgfHwgbWFrZVBsYWNlSG9sZGVyQm94KSAgICAgICAgICAvLyBJ
bmxpbmUgdGFibGVzIGFuZCBpbmxpbmUgYmxvY2tzCisgICAgICAgIHJldHVybiBSZW5kZXJCb3g6
OmNyZWF0ZUlubGluZUJveChmYWxzZSk7ICAgIC8vIChvciBwb3NpdGlvbmVkIGVsZW1lbnQgcGxh
Y2Vob2xkZXJzKS4KKworICAgIElubGluZUZsb3dCb3gqIGZsb3dCb3ggPSAwOworICAgIC8vIEZJ
WE1FOiBjYW5ub3QgYmUgZGVjaWRlZCBiZWZvcmUgZnVsbCBtZXJnZSBoYXMgYmVlbiBkb25lLCBz
aW1wbHkgdHJlYXQKKyAgICAvLyBpdCBhcyBhbiBJbmxpbmVGbG93Qm94IGIvYyBpdCdzIGlycmVs
ZXZhbnQgaW4gdGhlIG9sZCBjb2RlIChMUykKKy8vICAgIGlmIChpc0lubGluZUZsb3coKSkKKyAg
ICAgICAgZmxvd0JveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgSW5saW5lRmxvd0JveCh0aGlzKTsK
Ky8vICAgIGVsc2UKKy8vICAgICAgICBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSb290
SW5saW5lQm94KHRoaXMpOworCisgICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKKyAgICAgICAgbV9m
aXJzdExpbmVCb3ggPSBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKKyAgICBlbHNlIHsKKyAgICAg
ICAgbV9sYXN0TGluZUJveC0+c2V0TmV4dExpbmVCb3goZmxvd0JveCk7CisgICAgICAgIGZsb3dC
b3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RMaW5lQm94KTsKKyAgICAgICAgbV9sYXN0TGlu
ZUJveCA9IGZsb3dCb3g7CisgICAgfQorCisgICAgcmV0dXJuIGZsb3dCb3g7CiB9CiAKIHZvaWQg
UmVuZGVyRmxvdzo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgKl9zdHlsZSkKSW5kZXg6IHJlbmRlcmlu
Zy9yZW5kZXJfZmxvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2to
dG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgxCmRp
ZmYgLXUgLXAgLXIxLjgxIHJlbmRlcl9mbG93LmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfZmxvdy5o
CTE3IE1heSAyMDAzIDIyOjEyOjU4IC0wMDAwCTEuODEKKysrIHJlbmRlcmluZy9yZW5kZXJfZmxv
dy5oCTkgQXVnIDIwMDMgMDI6NDU6MTEgLTAwMDAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJiaWRpLmgiCiAKIG5hbWVzcGFjZSBraHRtbCB7CisgIGNsYXNzIElubGluZUZsb3dCb3g7CiAK
IC8qKgogICogYWxsIGdlb21ldHJ5IG1hbmFnaW5nIHN0dWZmIGlzIG9ubHkgaW4gdGhlIGJsb2Nr
IGVsZW1lbnRzLgpAQCAtNzEsOCArNzIsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBtYWtlQ2hp
bGRyZW5Ob25JbmxpbmUoUmVuZGVyT2JqZWN0ICpib3gyU3RhcnQgPSAwKTsKIAorICAgIHZvaWQg
ZGVsZXRlTGluZUJveGVzKFJlbmRlckFyZW5hKiBhcmVuYT0wKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoKFJlbmRlckFyZW5hKiBhcmVuYSk7CisKKyAgICBJbmxpbmVGbG93Qm94KiBmaXJzdExp
bmVCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGluZUJveDsgfQorICAgIElubGluZUZsb3dC
b3gqIGxhc3RMaW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZUJveDsgfQorCiAgICAg
Ly8gb3ZlcnJpZGVzIFJlbmRlck9iamVjdAogCisgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0
ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCk7CisKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoIFFQYWludGVyICosIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHR4LCBpbnQgdHksIFBhaW50QWN0aW9uIHBhaW50UGhhc2UpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdCggUVBhaW50ZXIgKiwgaW50IHgsIGludCB5LCBp
bnQgdywgaW50IGgsCkBAIC0xNDMsNiArMTUyLDExIEBAIHB1YmxpYzoKICAgICAvLyBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpcyBpbiBiaWRpLmNwcAogICAgIHZv
aWQgYmlkaVJlb3JkZXJMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciAmc3RhcnQsIGNvbnN0IEJpZGlJ
dGVyYXRvciAmZW5kKTsKICAgICBCaWRpSXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoQmlkaUl0
ZXJhdG9yICZzdGFydCk7CisgICAgSW5saW5lRmxvd0JveCogY29uc3RydWN0TGluZShjb25zdCBC
aWRpSXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBCaWRpSXRlcmF0b3ImIGVuZCk7CisgICAgSW5saW5l
Rmxvd0JveCogY3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVjdCogb2JqKTsKKyAgICAvLyBGSVhN
RTogc2hvdWxkIGJlIHNwbGl0IGludG8gY29tcHV0ZUhvcml6b250YWwtLy1WZXJ0aWNhbC4uLiBs
aWtlIGluCisgICAgLy8gV2ViQ29yZSBidXQgYXMgaXQnbGwgZ2V0IG1lcmdlZCBhbnl3YXkgaXQn
cyBub3Qgd29ydGggaXQKKyAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbnNGb3JMaW5lKElubGluZUZs
b3dCb3gqIGxpbmVCb3gsIEJpZGlDb250ZXh0KiBlbmRFbWJlZCk7CiAKICAgICAvLyBUaGUgaGVp
Z2h0IChhbmQgd2lkdGgpIG9mIGEgYmxvY2sgd2hlbiB5b3UgaW5jbHVkZSBvdmVyZmxvdwogICAg
IC8vIHNwaWxsYWdlIG91dCBvZiB0aGUgYm90dG9tIG9mIHRoZSBibG9jayAoZS5nLiwgYSA8ZGl2
CkBAIC0yMDQsNiArMjE4LDEyIEBAIHByaXZhdGU6CiAgICAgLy8gc3BsaXQgaW50byBhIHNlcXVl
bmNlIG9mIGlubGluZXMgYW5kIGJsb2Nrcy4gIFRoZSBjb250aW51YXRpb24gd2lsbCBlaXRoZXIg
YmUKICAgICAvLyBhbiBhbm9ueW1vdXMgYmxvY2sgKHRoYXQgaG91c2VzIG90aGVyIGJsb2Nrcykg
b3IgaXQgd2lsbCBiZSBhbiBpbmxpbmUgZmxvdy4KICAgICBSZW5kZXJGbG93KiBtX2NvbnRpbnVh
dGlvbjsKKworICAgIC8vIEZvciBibG9jayBmbG93cywgZWFjaCBib3ggcmVwcmVzZW50cyB0aGUg
cm9vdCBpbmxpbmUgYm94IGZvciBhIGxpbmUgaW4gdGhlCisgICAgLy8gcGFyYWdyYXBoLgorICAg
IC8vIEZvciBpbmxpbmUgZmxvd3MsIGVhY2ggYm94IHJlcHJlc2VudHMgYSBwb3J0aW9uIG9mIHRo
YXQgaW5saW5lLgorICAgIElubGluZUZsb3dCb3gqIG1fZmlyc3RMaW5lQm94OworICAgIElubGlu
ZUZsb3dCb3gqIG1fbGFzdExpbmVCb3g7CiB9OwogCiAKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJf
aW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExMApkaWZm
IC11IC1wIC1yMS4xMTAgcmVuZGVyX2ltYWdlLmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl9pbWFn
ZS5jcHAJMyBKdWwgMjAwMyAwMDoxOToxOSAtMDAwMAkxLjExMAorKysgcmVuZGVyaW5nL3JlbmRl
cl9pbWFnZS5jcHAJOSBBdWcgMjAwMyAwMjo0NToxMiAtMDAwMApAQCAtNDMwLDIxICs0MzAsMjIg
QEAgaW50IFJlbmRlckltYWdlOjpjYWxjUmVwbGFjZWRIZWlnaHQoKSBjbwogICAgIHJldHVybiBS
ZW5kZXJSZXBsYWNlZDo6Y2FsY1JlcGxhY2VkSGVpZ2h0KCk7CiB9CiAKLXZvaWQgUmVuZGVySW1h
Z2U6OmN1cnNvclBvcyhpbnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCkg
ewordm9pZCBSZW5kZXJJbWFnZTo6Y2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwg
aW50ICZfeCwgaW50ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpIHsKICAgaGVpZ2h0ID0g
aW50cmluc2ljSGVpZ2h0KCk7CisgIHdpZHRoID0gb3ZlcnJpZGUgJiYgb2Zmc2V0ID09IDAgPyBp
bnRyaW5zaWNXaWR0aCgpIDogMDsKICAgX3ggPSB4UG9zKCk7CiAgIF95ID0geVBvcygpOwogICBp
ZiAob2Zmc2V0ID4gMCkgX3ggKz0gaW50cmluc2ljV2lkdGgoKTsKIAogICBSZW5kZXJPYmplY3Qg
KmNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorCiAgIGludCBhYnN4LCBhYnN5OwogICBpZiAoY2IgJiYgY2Ig
IT0gdGhpcyAmJiBjYi0+YWJzb2x1dGVQb3NpdGlvbihhYnN4LGFic3kpKQogICB7CiAgICAgX3gg
Kz0gYWJzeDsKICAgICBfeSArPSBhYnN5OwogICB9IGVsc2UgewotICAgIC8vIHdlIGRvbid0IGtu
b3cgb3VyIGFic29sdXRlIHBvc2l0aW9uLCBhbmQgdGhlcmUgaXMgbm90IHBvaW50IHJldHVybmlu
ZworICAgIC8vIHdlIGRvbid0IGtub3cgb3VyIGFic29sdXRlIHBvc2l0aW9uLCBhbmQgdGhlcmUg
aXMgbm8gcG9pbnQgcmV0dXJuaW5nCiAgICAgLy8ganVzdCBhIHJlbGF0aXZlIG9uZQogICAgIF94
ID0gX3kgPSAtMTsKICAgfQpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJfaW1h
Z2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MgpkaWZmIC11IC1wIC1yMS40MiByZW5kZXJf
aW1hZ2UuaAotLS0gcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCTMgSnVsIDIwMDMgMDA6MTk6MTkg
LTAwMDAJMS40MgorKysgcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCTkgQXVnIDIwMDMgMDI6NDU6
MTIgLTAwMDAKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTZWxlY3Rp
b25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0IHtyZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTt9
CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHMpIHtt
X3NlbGVjdGlvblN0YXRlID0gczsgfQotICAgIHZpcnR1YWwgdm9pZCBjdXJzb3JQb3MoaW50IG9m
ZnNldCwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBj
YXJldFBvcyhpbnQgb2Zmc2V0LCBib29sIG92ZXJyaWRlLCBpbnQgJl94LCBpbnQgJl95LCBpbnQg
JndpZHRoLCBpbnQgJmhlaWdodCk7CiAKIHByaXZhdGU6CiAgICAgLyoKSW5kZXg6IHJlbmRlcmlu
Zy9yZW5kZXJfbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMv
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXUgLXAgLXIxLjEgcmVuZGVyX2xpbmUuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX2xp
bmUuY3BwCTIzIEFwciAyMDAzIDEyOjQwOjU0IC0wMDAwCTEuMQorKysgcmVuZGVyaW5nL3JlbmRl
cl9saW5lLmNwcAk5IEF1ZyAyMDAzIDAyOjQ1OjEzIC0wMDAwCkBAIC0zMiwxMyArMzIsMTMgQEAK
ICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBs
LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCi0jaW5jbHVkZSAicmVuZGVyX2lu
bGluZS5oIgotI2luY2x1ZGUgInJlbmRlcl9ibG9jay5oIgorLy8jaW5jbHVkZSAicmVuZGVyX2lu
bGluZS5oIgorLy8jaW5jbHVkZSAicmVuZGVyX2Jsb2NrLmgiCiAjaW5jbHVkZSAicmVuZGVyX2Fy
ZW5hLmgiCiAjaW5jbHVkZSAicmVuZGVyX2xpbmUuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5o
IgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCisjaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogCiB1
c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwpAQCAtNzksMTEgKzc5
LDExIEBAIGludCBJbmxpbmVGbG93Qm94OjptYXJnaW5MZWZ0KCkKIHsKICAgICBpZiAoIWluY2x1
ZGVMZWZ0RWRnZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIFJlbmRlclN0eWxl
KiBjc3R5bGUgPSBvYmplY3QoKS0+c3R5bGUoKTsKICAgICBMZW5ndGggbWFyZ2luID0gY3N0eWxl
LT5tYXJnaW5MZWZ0KCk7Ci0gICAgaWYgKG1hcmdpbi50eXBlICE9IFZhcmlhYmxlKQotICAgICAg
ICByZXR1cm4gKG1hcmdpbi50eXBlID09IEZpeGVkID8gbWFyZ2luLnZhbHVlIDogb2JqZWN0KCkt
Pm1hcmdpbkxlZnQoKSk7CisgICAgaWYgKG1hcmdpbi50eXBlKCkgIT0gVmFyaWFibGUpCisgICAg
ICAgIHJldHVybiAobWFyZ2luLnR5cGUoKSA9PSBGaXhlZCA/IG1hcmdpbi52YWx1ZSgpIDogb2Jq
ZWN0KCktPm1hcmdpbkxlZnQoKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTk0LDggKzk0LDgg
QEAgaW50IElubGluZUZsb3dCb3g6Om1hcmdpblJpZ2h0KCkKICAgICAKICAgICBSZW5kZXJTdHls
ZSogY3N0eWxlID0gb2JqZWN0KCktPnN0eWxlKCk7CiAgICAgTGVuZ3RoIG1hcmdpbiA9IGNzdHls
ZS0+bWFyZ2luUmlnaHQoKTsKLSAgICBpZiAobWFyZ2luLnR5cGUgIT0gVmFyaWFibGUpCi0gICAg
ICAgIHJldHVybiAobWFyZ2luLnR5cGUgPT0gRml4ZWQgPyBtYXJnaW4udmFsdWUgOiBvYmplY3Qo
KS0+bWFyZ2luUmlnaHQoKSk7CisgICAgaWYgKG1hcmdpbi50eXBlKCkgIT0gVmFyaWFibGUpCisg
ICAgICAgIHJldHVybiAobWFyZ2luLnR5cGUoKSA9PSBGaXhlZCA/IG1hcmdpbi52YWx1ZSgpIDog
b2JqZWN0KCktPm1hcmdpblJpZ2h0KCkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNDMsOSAr
MTQzLDEwIEBAIGJvb2wgSW5saW5lRmxvd0JveDo6cHJldk9uTGluZUV4aXN0cygpCiAKIGJvb2wg
SW5saW5lRmxvd0JveDo6b25FbmRDaGFpbihSZW5kZXJPYmplY3QqIGVuZE9iamVjdCkKIHsKKyNp
ZiAwCS8vIEZJWE1FOiBuZWVkcyBtZXJnZQogICAgIGlmICghZW5kT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoZW5kT2JqZWN0ID09IG9iamVjdCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMTU5LDIyICsxNjAsMjQgQEAgYm9vbCBJbmxpbmVGbG93
Qm94OjpvbkVuZENoYWluKFJlbmRlck9iagogICAgIH0KIAogICAgIHJldHVybiB0cnVlOworI2Vu
ZGlmCiB9CiAKIHZvaWQgSW5saW5lRmxvd0JveDo6ZGV0ZXJtaW5lU3BhY2luZ0ZvckZsb3dCb3hl
cyhib29sIGxhc3RMaW5lLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCkKIHsKKyNpZiAwCS8vIEZJ
WE1FOiBuZWVkcyBtZXJnZQogICAgIC8vIEFsbCBib3hlcyBzdGFydCBvZmYgb3Blbi4gIFRoZXkg
d2lsbCBub3QgYXBwbHkgYW55IG1hcmdpbnMvYm9yZGVyL3BhZGRpbmcgb24KICAgICAvLyBhbnkg
c2lkZS4KICAgICBib29sIGluY2x1ZGVMZWZ0RWRnZSA9IGZhbHNlOwogICAgIGJvb2wgaW5jbHVk
ZVJpZ2h0RWRnZSA9IGZhbHNlOwogCiAgICAgUmVuZGVyRmxvdyogZmxvdyA9IHN0YXRpY19jYXN0
PFJlbmRlckZsb3cqPihvYmplY3QoKSk7Ci0gICAgCisKICAgICBpZiAoIWZsb3ctPmZpcnN0Q2hp
bGQoKSkKICAgICAgICAgaW5jbHVkZUxlZnRFZGdlID0gaW5jbHVkZVJpZ2h0RWRnZSA9IHRydWU7
IC8vIEVtcHR5IGlubGluZXMgbmV2ZXIgc3BsaXQgYWNyb3NzIGxpbmVzLgogICAgIGVsc2UgaWYg
KHBhcmVudCgpKSB7IC8vIFRoZSByb290IGlubGluZSBib3ggbmV2ZXIgaGFzIGJvcmRlcnMvbWFy
Z2lucy9wYWRkaW5nLgogICAgICAgICBib29sIGx0ciA9IGZsb3ctPnN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUjsKLSAgICAgICAgCisKICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGFsbCBp
bml0aWFsIGxpbmVzIGFyZSB1bmNvbnN0cnVjdGVkLiAgSWYgc28sIHRoZW4KICAgICAgICAgLy8g
d2Uga25vdyB0aGUgaW5saW5lIGJlZ2FuIG9uIHRoaXMgbGluZS4KICAgICAgICAgaWYgKCFmbG93
LT5maXJzdExpbmVCb3goKS0+aXNDb25zdHJ1Y3RlZCgpKSB7CkBAIC0yMTcsMTAgKzIyMCwxMiBA
QCB2b2lkIElubGluZUZsb3dCb3g6OmRldGVybWluZVNwYWNpbmdGb3JGCiAgICAgICAgICAgICBj
dXJyRmxvdy0+ZGV0ZXJtaW5lU3BhY2luZ0ZvckZsb3dCb3hlcyhsYXN0TGluZSwgZW5kT2JqZWN0
KTsKICAgICAgICAgfQogICAgIH0KKyNlbmRpZgogfQogCiBpbnQgSW5saW5lRmxvd0JveDo6cGxh
Y2VCb3hlc0hvcml6b250YWxseShpbnQgeCkKIHsKKyNpZiAwCS8vIEZJWE1FOiBuZWVkcyBtZXJn
ZQogICAgIC8vIFNldCBvdXIgeCBwb3NpdGlvbi4KICAgICBzZXRYUG9zKHgpOwogCkBAIC0yNTcs
MTAgKzI2MiwxNCBAQCBpbnQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxsCiAg
ICAgeCArPSBib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCk7CiAgICAgc2V0V2lkdGgoeC1z
dGFydFgpOwogICAgIHJldHVybiB4OworI2Vsc2UKKyAgcmV0dXJuIDA7CisjZW5kaWYKIH0KIAog
dm9pZCBJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxv
Y2spCiB7CisjaWYgMAkvLyBGSVhNRTogbmVlZHMgbWVyZ2UKICAgICBpbnQgbWF4UG9zaXRpb25U
b3AgPSAwOwogICAgIGludCBtYXhQb3NpdGlvbkJvdHRvbSA9IDA7CiAgICAgaW50IG1heEFzY2Vu
dCA9IDA7CkBAIC0yNzEsNyArMjgwLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5
QWxpZ25Cb3hlcwogICAgIHdoaWxlIChjdXJyICYmICFjdXJyLT5lbGVtZW50KCkpCiAgICAgICAg
IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKTsKICAgICBib29sIHN0cmljdE1vZGUgPSAoY3VyciAm
JiBjdXJyLT5lbGVtZW50KCktPmdldERvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpKTsKLSAgICAK
KwogICAgIGNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhtYXhQb3NpdGlvblRvcCwgbWF4UG9zaXRp
b25Cb3R0b20sIG1heEFzY2VudCwgbWF4RGVzY2VudCwgc3RyaWN0TW9kZSk7CiAKICAgICBpZiAo
bWF4QXNjZW50ICsgbWF4RGVzY2VudCA8IFFNQVgobWF4UG9zaXRpb25Ub3AsIG1heFBvc2l0aW9u
Qm90dG9tKSkKQEAgLTI4OSw2ICsyOTgsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnZlcnRpY2Fs
bHlBbGlnbkJveGVzCiAgICAgICAgIHNocmlua0JveGVzV2l0aE5vVGV4dENoaWxkcmVuKHRvcFBv
c2l0aW9uLCBib3R0b21Qb3NpdGlvbik7CiAgICAgCiAgICAgaGVpZ2h0T2ZCbG9jayArPSBtYXhI
ZWlnaHQ7CisjZW5kaWYKIH0KIAogdm9pZCBJbmxpbmVGbG93Qm94OjphZGp1c3RNYXhBc2NlbnRB
bmREZXNjZW50KGludCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2NlbnQsCkBAIC0zMTksNiArMzI5
LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGp1c3RNYXhBc2NlbnRBbmREZQogdm9pZCBJbmxp
bmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaWdodHMoaW50JiBtYXhQb3NpdGlvblRvcCwg
aW50JiBtYXhQb3NpdGlvbkJvdHRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2NlbnQsIGJvb2wgc3RyaWN0
TW9kZSkKIHsKKyNpZiAwCS8vIEZJWE1FOiBuZWVkcyBtZXJnZQogICAgIGlmIChpc1Jvb3RJbmxp
bmVCb3goKSkgewogICAgICAgICAvLyBFeGFtaW5lIG91ciByb290IGJveC4KICAgICAgICAgc2V0
SGVpZ2h0KG9iamVjdCgpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lKSk7CkBAIC0zMzgsNyArMzQ5
LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaQogICAgICAgICAg
ICAgICAgIG1heERlc2NlbnQgPSBkZXNjZW50OwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAg
ICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KGN1cnItPm9iamVjdCgp
LT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lKSk7CiAgICAgICAgIGN1cnItPnNldEJhc2VsaW5lKGN1
cnItPm9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9uKG1fZmlyc3RMaW5lKSk7CkBAIC0zNjMsNiAr
Mzc0LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaQogICAgICAg
ICBpZiAoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxJ
bmxpbmVGbG93Qm94Kj4oY3VyciktPmNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhtYXhQb3NpdGlv
blRvcCwgbWF4UG9zaXRpb25Cb3R0b20sIG1heEFzY2VudCwgbWF4RGVzY2VudCwgc3RyaWN0TW9k
ZSk7CiAgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc1Zl
cnRpY2FsbHkoaW50IHksIGludCBtYXhIZWlnaHQsIGludCBtYXhBc2NlbnQsIGJvb2wgc3RyaWN0
TW9kZSwKQEAgLTM3MCw3ICszODIsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNW
ZXJ0aWNhbGx5CiB7CiAgICAgaWYgKGlzUm9vdElubGluZUJveCgpKQogICAgICAgICBzZXRZUG9z
KHkgKyBtYXhBc2NlbnQgLSBiYXNlbGluZSgpKTsvLyBQbGFjZSBvdXIgcm9vdCBib3guCi0gICAg
CisKICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9
IGN1cnItPm5leHRPbkxpbmUoKSkgewogICAgICAgICAvLyBBZGp1c3QgYm94ZXMgdG8gdXNlIHRo
ZWlyIHJlYWwgYm94IHkvaGVpZ2h0IGFuZCBub3QgdGhlIGxvZ2ljYWwgaGVpZ2h0IChhcyBkaWN0
YXRlZCBieQogICAgICAgICAvLyBsaW5lLWhlaWdodCkuCkBAIC00NTcsMTAgKzQ2OSwxMSBAQCB2
b2lkIElubGluZUZsb3dCb3g6OnNocmlua0JveGVzV2l0aE5vVGV4CiB2b2lkIElubGluZUZsb3dC
b3g6OnBhaW50QmFja2dyb3VuZEFuZEJvcmRlcihRUGFpbnRlciAqcCwgaW50IF94LCBpbnQgX3ks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3csIGlu
dCBfaCwgaW50IF90eCwgaW50IF90eSwgaW50IHhPZmZzZXRPbkxpbmUpCiB7CisjaWYgMAkvLyBG
SVhNRTogbmVlZHMgbWVyZ2UKICAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMuCiAg
ICAgX3R4ICs9IG1feDsKICAgICBfdHkgKz0gbV95OwotICAgIAorCiAgICAgaW50IHcgPSB3aWR0
aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCk7CiAKQEAgLTUwOSwxMCArNTIyLDEyIEBAIHZvaWQg
SW5saW5lRmxvd0JveDo6cGFpbnRCYWNrZ3JvdW5kQW5kQm8KICAgICAgICAgaWYgKHBhcmVudCgp
ICYmIG9iamVjdCgpLT5zdHlsZSgpLT5oYXNCb3JkZXIoKSkKICAgICAgICAgICAgIG9iamVjdCgp
LT5wYWludEJvcmRlcihwLCBfdHgsIF90eSwgdywgaCwgb2JqZWN0KCktPnN0eWxlKCksIGluY2x1
ZGVMZWZ0RWRnZSgpLCBpbmNsdWRlUmlnaHRFZGdlKCkpOwogICAgIH0KKyNlbmRpZgogfQogCiBz
dGF0aWMgYm9vbCBzaG91bGREcmF3RGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG9iaikKIHsKKyNp
ZiAwCS8vIEZJWE1FOiBuZWVkcyBtZXJnZQogICAgIGJvb2wgc2hvdWxkRHJhdyA9IGZhbHNlOwog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gb2JqLT5maXJzdENoaWxkKCk7CiAgICAgICAg
ICBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewpAQCAtNTI0LDE0ICs1MzksMTYg
QEAgc3RhdGljIGJvb2wgc2hvdWxkRHJhd0RlY29yYXRpb24oUmVuZGVyTwogICAgICAgICAgICAg
ICAgICAhY3Vyci0+ZWxlbWVudCgpIHx8ICFjdXJyLT5lbGVtZW50KCktPmNvbnRhaW5zT25seVdo
aXRlc3BhY2UoKSkpIHsKICAgICAgICAgICAgIHNob3VsZERyYXcgPSB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0JCisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHNob3Vs
ZERyYXc7CisjZW5kaWYKIH0KIAogdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludERlY29yYXRpb25z
KFFQYWludGVyICpwLCBpbnQgX3gsIGludCBfeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX3csIGludCBfaCwgaW50IF90eCwgaW50IF90eSkKIHsKKyNpZiAwCS8v
IEZJWE1FOiBuZWVkcyBtZXJnZQogICAgIC8vIE5vdyBwYWludCBvdXIgdGV4dCBkZWNvcmF0aW9u
cy4gV2Ugb25seSBkbyB0aGlzIGlmIHdlIGFyZW4ndCBpbiBxdWlya3MgbW9kZSAoaS5lLiwgaW4K
ICAgICAvLyBhbG1vc3Qtc3RyaWN0IG1vZGUgb3Igc3RyaWN0IG1vZGUpLgogICAgIF90eCArPSBt
X3g7CkBAIC01NTksNCArNTc2LDUgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludERlY29yYXRp
b25zKFFQYQogICAgICAgICAgICAgcC0+ZHJhd0xpbmVGb3JUZXh0KF90eCwgX3R5LCAyKm1fYmFz
ZWxpbmUvMywgdyk7CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYKIH0KSW5kZXg6IHJlbmRlcmlu
Zy9yZW5kZXJfbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2to
dG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtdSAtcCAtcjEuMSByZW5kZXJfbGluZS5oCi0tLSByZW5kZXJpbmcvcmVuZGVyX2xpbmUuaAky
MyBBcHIgMjAwMyAxMjo0MDo1NCAtMDAwMAkxLjEKKysrIHJlbmRlcmluZy9yZW5kZXJfbGluZS5o
CTkgQXVnIDIwMDMgMDI6NDU6MTMgLTAwMDAKQEAgLTk3LDYgKzk3LDEzIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGludCB0b3BPdmVyZmxvdygpIHsgcmV0dXJuIHlQb3MoKTsgfQogICAgIHZpcnR1
YWwgaW50IGJvdHRvbU92ZXJmbG93KCkgeyByZXR1cm4geVBvcygpK2hlaWdodCgpOyB9CiAgICAg
CisgICAgLyoqIFJldHVybnMgdGhlIG1pbmltdW0gb2Zmc2V0IHRoaXMgaW5saW5lIGJveCBjb250
YWlucy4gRGVmYXVsdHMgdG8gMC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGxvbmcgbWluT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIC8qKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mZnNl
dCB0aGlzIGlubGluZSBib3ggY29udGFpbnMuIERlZmF1bHRzIHRvIDEuCisgICAgICovCisgICAg
dmlydHVhbCBsb25nIG1heE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICAKIHB1Ymxp
YzogLy8gRklYTUU6IFdvdWxkIGxpa2UgdG8gbWFrZSB0aGlzIHByb3RlY3RlZCwgYnV0IG1ldGhv
ZHMgYXJlIGFjY2Vzc2luZyB0aGVzZQogICAgICAgICAvLyBtZW1iZXJzIG92ZXIgaW4gdGhlIHBh
cnQuCiAgICAgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKQEAgLTEzMSwxMSArMTM4LDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldE5leHRMaW5lQm94KElubGluZVJ1bkJveCogbikgeyBtX25leHRM
aW5lID0gbjsgfQogICAgIHZvaWQgc2V0UHJldmlvdXNMaW5lQm94KElubGluZVJ1bkJveCogcCkg
eyBtX3ByZXZMaW5lID0gcDsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50QmFja2dyb3VuZEFu
ZEJvcmRlcihRUGFpbnRlciAqcCwgaW50IF94LCBpbnQgX3ksCi0gICAgICAgICAgICAgICAgICAg
ICAgIGludCBfdywgaW50IF9oLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgeE9mZnNldE9uTGluZSkg
e307Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50RGVjb3JhdGlvbnMoUVBhaW50ZXIgKnAsIGludCBf
eCwgaW50IF95LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3csIGludCBfaCwgaW50IF90
eCwgaW50IF90eSkge307Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50QmFja2dyb3VuZEFu
ZEJvcmRlcihRUGFpbnRlciAqLypwKi8sIGludCAvKl94Ki8sIGludCAvKl95Ki8sCisgICAgICAg
ICAgICAgICAgICAgICAgIGludCAvKl93Ki8sIGludCAvKl9oKi8sIGludCAvKl90eCovLCBpbnQg
LypfdHkqLywgaW50IC8qeE9mZnNldE9uTGluZSovKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnREZWNvcmF0aW9ucyhRUGFpbnRlciAqLypwKi8sIGludCAvKl94Ki8sIGludCAvKl95Ki8sCisg
ICAgICAgICAgICAgICAgICAgICAgIGludCAvKl93Ki8sIGludCAvKl9oKi8sIGludCAvKl90eCov
LCBpbnQgLypfdHkqLykge307CisKIHByb3RlY3RlZDoKICAgICBJbmxpbmVSdW5Cb3gqIG1fcHJl
dkxpbmU7ICAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmpl
Y3QKICAgICBJbmxpbmVSdW5Cb3gqIG1fbmV4dExpbmU7ICAvLyBUaGUgbmV4dCBib3ggdGhhdCBh
bHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdApAQCAtMjE1LDcgKzIyMiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgdG9wUG9zaXRpb24sIGludCYgYm90dG9t
UG9zaXRpb24pOwogICAgIHZvaWQgc2hyaW5rQm94ZXNXaXRoTm9UZXh0Q2hpbGRyZW4oaW50IHRv
cFBvc2l0aW9uLCBpbnQgYm90dG9tUG9zaXRpb24pOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBz
ZXRPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgdG9wLCBpbnQgYm90dG9tKSB7fQorICAgIHZpcnR1YWwg
dm9pZCBzZXRPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgLyp0b3AqLywgaW50IC8qYm90dG9tKi8pIHt9
CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgSW5saW5lQm94KiBtX2ZpcnN0Q2hpbGQ7CkluZGV4OiBy
ZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2Rl
L2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjIxMQpkaWZmIC11IC1wIC1yMS4yMTEgcmVuZGVyX29iamVjdC5jcHAKLS0tIHJl
bmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAkxNyBBcHIgMjAwMyAxNjowNzo0NiAtMDAwMAkxLjIx
MQorKysgcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTkgQXVnIDIwMDMgMDI6NDU6MTQgLTAw
MDAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJy
ZW5kZXJfYXJlbmEuaCIKICNpbmNsdWRlICJyZW5kZXJfbGF5ZXIuaCIKKyNpbmNsdWRlICJyZW5k
ZXJfbGluZS5oIgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiB1c2luZyBuYW1lc3BhY2UgRE9NOwpA
QCAtOTY2LDkgKzk2NywxMSBAQCBib29sIFJlbmRlck9iamVjdDo6YWJzb2x1dGVQb3NpdGlvbihp
bnQgCiAgICAgfQogfQogCi12b2lkIFJlbmRlck9iamVjdDo6Y3Vyc29yUG9zKGludCAvKm9mZnNl
dCovLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCkKK3ZvaWQgUmVuZGVyT2JqZWN0Ojpj
YXJldFBvcyhpbnQgLypvZmZzZXQqLywgYm9vbCAvKm92ZXJyaWRlKi8sIGludCAmX3gsIGludCAm
X3ksIGludCAmd2lkdGgsIGludCAmaGVpZ2h0KQogewogICAgIF94ID0gX3kgPSBoZWlnaHQgPSAt
MTsKKyAgICB3aWR0aCA9IDE7CS8vIHRoZSBjYXJldCBoYXMgYSBkZWZhdWx0IHdpZHRoIG9mIG9u
ZSBwaXhlbC4gSWYgeW91IHdhbnQKKyAgICAJCS8vIHRvIGNoZWNrIGZvciB2YWxpZGl0eSwgb25s
eSB0ZXN0IHRoZSB4LWNvb3JkaW5hdGUgZm9yID49IDAuCiB9CiAKIGludCBSZW5kZXJPYmplY3Q6
OnBhZGRpbmdUb3AoKSBjb25zdApAQCAtMTM0OSwzICsxMzUyLDkgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OnNjaGVkdWxlUmVsYXlvdXQoYm9vbAogdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUxlZnRv
dmVyQW5vbnltb3VzQm94ZXMoKQogewogfQorCitJbmxpbmVCb3gqIFJlbmRlck9iamVjdDo6Y3Jl
YXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94KQoreworICAgIHJldHVybiBuZXcg
KHJlbmRlckFyZW5hKCkpIElubGluZUJveCh0aGlzKTsKK30KKwpJbmRleDogcmVuZGVyaW5nL3Jl
bmRlcl9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRt
bC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1MApk
aWZmIC11IC1wIC1yMS4xNTAgcmVuZGVyX29iamVjdC5oCi0tLSByZW5kZXJpbmcvcmVuZGVyX29i
amVjdC5oCTE2IEFwciAyMDAzIDIyOjU4OjA2IC0wMDAwCTEuMTUwCisrKyByZW5kZXJpbmcvcmVu
ZGVyX29iamVjdC5oCTkgQXVnIDIwMDMgMDI6NDU6MTUgLTAwMDAKQEAgLTg3LDYgKzg3LDggQEAg
bmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBSZW5kZXJGcmFtZVNldDsKICAgICBjbGFzcyBS
ZW5kZXJBcmVuYTsKICAgICBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBjbGFzcyBJbmxpbmVCb3g7
CisgICAgY2xhc3MgSW5saW5lRmxvd0JveDsKIAogLyoqCiAgKiBCYXNlIENsYXNzIGZvciBhbGwg
cmVuZGVyaW5nIHRyZWUgb2JqZWN0cy4KQEAgLTI1Niw2ICsyNTgsOCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNjaGVkdWxlUmVsYXlvdXQoYm9vbCByZXBhaW50KTsKIAorICAgIHZpcnR1YWwgSW5s
aW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VIb2xkZXJCb3gpOworCiAgICAg
Ly8gZm9yIGRpc2N1c3Npb24gb2YgbGluZUhlaWdodCBzZWUgQ1NTMiBzcGVjCiAgICAgdmlydHVh
bCBzaG9ydCBsaW5lSGVpZ2h0KCBib29sIGZpcnN0TGluZSApIGNvbnN0OwogICAgIC8vIGZvciB0
aGUgdmVydGljYWwtYWxpZ24gcHJvcGVydHkgb2YgaW5saW5lIGVsZW1lbnRzCkBAIC00NjMsNyAr
NDY3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygp
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBwb3NpdGlvbmluZyBvZiBpbmxpbmUgY2hpbGRz
IChiaWRpKQotICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgYm9vbCwgYm9vbCwgaW50KSB7fQorICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihJbmxpbmVC
b3gqLCBpbnQsIGludCwgYm9vbCwgaW50KSB7fQorLy8gICAgdmlydHVhbCB2b2lkIHBvc2l0aW9u
KGludCwgaW50LCBpbnQsIGludCwgaW50LCBib29sLCBib29sLCBpbnQpIHt9CiAKICAgICBlbnVt
IFNlbGVjdGlvblN0YXRlIHsKICAgICAgICAgU2VsZWN0aW9uTm9uZSwKQEAgLTQ3Niw3ICs0ODEs
MTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUo
KSBjb25zdCB7IHJldHVybiBTZWxlY3Rpb25Ob25lO30KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Vs
ZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIHt9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3Vyc29y
UG9zKGludCAvKm9mZnNldCovLCBpbnQgJi8qX3gqLywgaW50ICYvKl95Ki8sIGludCAmLypoZWln
aHQqLyk7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY29udGVudCBjb29yZGluYXRlcyBv
ZiB0aGUgY2FyZXQgd2l0aGluIHRoaXMgcmVuZGVyIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gb2Zm
c2V0IHplcm8tYmFzZWQgb2Zmc2V0IGRldGVybWluaW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUgcmVu
ZGVyIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gb3ZlcnJpZGUgQHAgdHJ1ZSBpZiBpbnB1dCBvdmVy
cmlkZXMgZXhpc3RpbmcgY2hhcmFjdGVycywKKyAgICAgKgkJQHAgZmFsc2UgaWYgaXQgaW5zZXJ0
cyB0aGVtLiBUaGUgd2lkdGggb2YgdGhlIGNhcmV0IGRlcGVuZHMgb24KKyAgICAgKgkJdGhpcyBv
bmUuCisgICAgICogQHBhcmFtIF94IHJldHVybnMgdGhlIGxlZnQgY29vcmRpbmF0ZQorICAgICAq
IEBwYXJhbSBfeSByZXR1cm5zIHRoZSB0b3AgY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB3aWR0
aCByZXR1cm5zIHRoZSBjYXJldCdzIHdpZHRoCisgICAgICogQHBhcmFtIGhlaWdodCByZXR1cm5z
IHRoZSBjYXJldCdzIGhlaWdodAorICAgICAqLworICAgIHZpcnR1YWwgdm9pZCBjYXJldFBvcyhp
bnQgb2Zmc2V0LCBib29sIG92ZXJyaWRlLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJndpZHRoLCBp
bnQgJmhlaWdodCk7CiAKICAgICAvLyByZXR1cm5zIHRoZSBsb3dlc3QgcG9zaXRpb24gb2YgdGhl
IGxvd2VzdCBvYmplY3QgaW4gdGhhdCBwYXJ0aWN1bGFyIG9iamVjdC4KICAgICAvLyBUaGlzICdo
ZWlnaHQnIGlzIHJlbGF0aXZlIHRvIHRoZSB0b3BsZWZ0IG9mIHRoZSBtYXJnaW4gYm94IG9mIHRo
ZSBvYmplY3QuCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OQpkaWZmIC11IC1wIC1yMS41OSByZW5kZXJfc3R5
bGUuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmNwcAk0IEZlYiAyMDAzIDIxOjM4OjIy
IC0wMDAwCTEuNTkKKysrIHJlbmRlcmluZy9yZW5kZXJfc3R5bGUuY3BwCTkgQXVnIDIwMDMgMDI6
NDU6MTYgLTAwMDAKQEAgLTMwNyw2ICszMDcsNyBAQCBSZW5kZXJTdHlsZTo6RGlmZiBSZW5kZXJT
dHlsZTo6ZGlmZiggY29uCiAKICAgICAvLyBOb25WaXNpYmxlOgogLy8gCUVDdXJzb3IgX2N1cnNv
cl9zdHlsZSA6IDQ7CisvLwlFVXNlcklucHV0IF91c2VyX2lucHV0IDogMjsJYXMgbG9uZyBhcyA6
ZW5hYmxlZCBpcyBub3QgaW1wbCdkCiAKIC8vICMjIyB0aGlzIG5lZWRzIHdvcmsgdG8ga25vdyBt
b3JlIGV4YWN0bHkgaWYgd2UgbmVlZCBhIHJlbGF5b3V0CiAvLyAgICAgb3IganVzdCBhIHJlcGFp
bnQKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
aG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuODcKZGlmZiAtdSAtcCAtcjEuODcgcmVuZGVyX3N0eWxlLmgKLS0tIHJl
bmRlcmluZy9yZW5kZXJfc3R5bGUuaAkxNyBBcHIgMjAwMyAxNjowNzo0NiAtMDAwMAkxLjg3Cisr
KyByZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgJOSBBdWcgMjAwMyAwMjo0NToxNyAtMDAwMApAQCAt
NDQ1LDYgKzQ0NSwxMCBAQCBlbnVtIEVDdXJzb3IgewogICAgIENVUlNPUl9TX1JFU0laRSwgQ1VS
U09SX1dfUkVTSVpFLCBDVVJTT1JfVEVYVCwgQ1VSU09SX1dBSVQsIENVUlNPUl9IRUxQCiB9Owog
CitlbnVtIEVVc2VySW5wdXQgeworICAgIFVJX0VOQUJMRUQsIFVJX0RJU0FCTEVELCBVSV9OT05F
Cit9OworCiBlbnVtIENvbnRlbnRUeXBlIHsKICAgICBDT05URU5UX05PTkUsIENPTlRFTlRfT0JK
RUNULCBDT05URU5UX1RFWFQsCiAgICAgQ09OVEVOVF9BVFRSCkBAIC01MTMsNyArNTE3LDcgQEAg
cHJvdGVjdGVkOgogICAgICAgICAgICAgICAgIC8vIG5vbiBDU1MyIGluaGVyaXRlZAogICAgICAg
ICAgICAgICAgIGJvb2wgX3Zpc3VhbGx5T3JkZXJlZCA6IDE7CiAgICAgICAgICAgICAgICAgYm9v
bCBfaHRtbEhhY2tzIDoxOwotICAgICAgICAgICAgICAgIGludCBfdW51c2VkIDogMjsKKyAgICAg
ICAgICAgICAgICBFVXNlcklucHV0IF91c2VyX2lucHV0IDogMjsKICAgICAgICAgICAgIH0gZjsK
ICAgICAgICAgICAgIFFfVUlOVDMyIF9pZmxhZ3M7CiAgICAgICAgIH07CkBAIC01OTAsNyArNTk0
LDcgQEAgcHJvdGVjdGVkOgogCWluaGVyaXRlZF9mbGFncy5mLl93aGl0ZV9zcGFjZSA9IE5PUk1B
TDsKIAlpbmhlcml0ZWRfZmxhZ3MuZi5fdmlzdWFsbHlPcmRlcmVkID0gZmFsc2U7CiAJaW5oZXJp
dGVkX2ZsYWdzLmYuX2h0bWxIYWNrcz1mYWxzZTsKLQlpbmhlcml0ZWRfZmxhZ3MuZi5fdW51c2Vk
ID0gMDsKKwlpbmhlcml0ZWRfZmxhZ3MuZi5fdXNlcl9pbnB1dCA9IFVJX05PTkU7CiAKIAlub25p
bmhlcml0ZWRfZmxhZ3MuZi5fZGlzcGxheSA9IElOTElORTsKIAlub25pbmhlcml0ZWRfZmxhZ3Mu
Zi5fYmdfcmVwZWF0ID0gUkVQRUFUOwpAQCAtNzQ4LDYgKzc1Miw4IEBAIHB1YmxpYzoKIAogICAg
IEVDdXJzb3IgY3Vyc29yKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkX2ZsYWdzLmYuX2N1cnNv
cl9zdHlsZTsgfQogCisgICAgRVVzZXJJbnB1dCB1c2VySW5wdXQoKSBjb25zdCB7IHJldHVybiBp
bmhlcml0ZWRfZmxhZ3MuZi5fdXNlcl9pbnB1dDsgfQorCiAvLyBhdHRyaWJ1dGUgc2V0dGVyIG1l
dGhvZHMKIAogICAgIHZvaWQgc2V0RGlzcGxheShFRGlzcGxheSB2KSB7ICBub25pbmhlcml0ZWRf
ZmxhZ3MuZi5fZGlzcGxheSA9IHY7IH0KQEAgLTg1Myw2ICs4NTksOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRQYWRkaW5nUmlnaHQoTGVuZ3RoIHYpICB7ICBTRVRfVkFSKHN1cnJvdW5kLHBhZGRp
bmcucmlnaHQsdikgfQogCiAgICAgdm9pZCBzZXRDdXJzb3IoIEVDdXJzb3IgYyApIHsgaW5oZXJp
dGVkX2ZsYWdzLmYuX2N1cnNvcl9zdHlsZSA9IGM7IH0KKyAgICAKKyAgICB2b2lkIHNldFVzZXJJ
bnB1dChFVXNlcklucHV0IHVpKSB7IGluaGVyaXRlZF9mbGFncy5mLl91c2VyX2lucHV0ID0gdWk7
IH0KIAogICAgIGJvb2wgaHRtbEhhY2tzKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkX2ZsYWdz
LmYuX2h0bWxIYWNrczsgfQogICAgIHZvaWQgc2V0SHRtbEhhY2tzKGJvb2wgYj10cnVlKSB7IGlu
aGVyaXRlZF9mbGFncy5mLl9odG1sSGFja3MgPSBiOyB9CkluZGV4OiByZW5kZXJpbmcvcmVuZGVy
X3RhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzcKZGlm
ZiAtdSAtcCAtcjEuMjM3IHJlbmRlcl90YWJsZS5jcHAKLS0tIHJlbmRlcmluZy9yZW5kZXJfdGFi
bGUuY3BwCTIxIEp1bCAyMDAzIDIyOjEzOjA0IC0wMDAwCTEuMjM3CisrKyByZW5kZXJpbmcvcmVu
ZGVyX3RhYmxlLmNwcAk5IEF1ZyAyMDAzIDAyOjQ1OjE4IC0wMDAwCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1wbC5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbHRh
Z3MuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgorI2luY2x1ZGUgInJlbmRlcmluZy9y
ZW5kZXJfbGluZS5oIgogCiAjaW5jbHVkZSA8a2dsb2JhbC5oPgogCkBAIC0xMDMsMTEgKzEwNCwx
MSBAQCB2b2lkIFJlbmRlclRhYmxlOjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqCiAgICAgfQogfQog
Ci12b2lkIFJlbmRlclRhYmxlOjpwb3NpdGlvbihpbnQgeCwgaW50IHksIGludCwgaW50LCBpbnQs
IGJvb2wsIGJvb2wsIGludCkKK3ZvaWQgUmVuZGVyVGFibGU6OnBvc2l0aW9uKElubGluZUJveCAq
Ym94LCBpbnQsIGludCwgYm9vbCwgaW50KQogewogICAgIC8vZm9yIGlubGluZSB0YWJsZXMgb25s
eQotICAgIG1feCA9IHggKyBtYXJnaW5MZWZ0KCk7Ci0gICAgbV95ID0geSArIG1hcmdpblRvcCgp
OworICAgIG1feCA9IGJveC0+eFBvcygpICsgbWFyZ2luTGVmdCgpOworICAgIG1feSA9IGJveC0+
eVBvcygpICsgbWFyZ2luVG9wKCk7CiB9CiAKIHNob3J0IFJlbmRlclRhYmxlOjpsaW5lSGVpZ2h0
KGJvb2wgYikgY29uc3QKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfdGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxl
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODcKZGlmZiAtdSAtcCAtcjEuODcgcmVuZGVyX3Rh
YmxlLmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfdGFibGUuaAkxNyBNYXkgMjAwMyAyMjoxMjo1OSAt
MDAwMAkxLjg3CisrKyByZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmgJOSBBdWcgMjAwMyAwMjo0NTox
OSAtMDAwMApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBz
ZXRDZWxsV2lkdGhzKCApOwogCi0gICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uKGludCB4LCBpbnQg
eSwgaW50IGZyb20sIGludCBsZW4sIGludCB3aWR0aCwgYm9vbCByZXZlcnNlLCBib29sIGZpcnN0
TGluZSwgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb24oSW5saW5lQm94ICosIGludCBm
cm9tLCBpbnQgbGVuLCBib29sIHJldmVyc2UsIGludCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y1dpZHRoKCk7CiAKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfdGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMDQKZGlmZiAtdSAtcCAtcjEuMjA0IHJlbmRlcl90
ZXh0LmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmNwcAkyMiBNYXIgMjAwMyAyMToyMDoz
OCAtMDAwMAkxLjIwNAorKysgcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmNwcAk5IEF1ZyAyMDAzIDAy
OjQ1OjIwIC0wMDAwCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5OS0y
MDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAtMjAw
MyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVy
LCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQyLDM4ICs0MiwzOCBAQCB1c2luZyBuYW1l
c3BhY2Uga2h0bWw7CiB1c2luZyBuYW1lc3BhY2UgRE9NOwogCiAjaWZuZGVmIE5ERUJVRwotc3Rh
dGljIGJvb2wgaW5UZXh0U2xhdmVEZXRhY2g7CitzdGF0aWMgYm9vbCBpblRleHRSdW5EZXRhY2g7
CiAjZW5kaWYKIAotdm9pZCBUZXh0U2xhdmU6OmRldGFjaChSZW5kZXJBcmVuYSogcmVuZGVyQXJl
bmEpCit2b2lkIFRleHRSdW46OmRldGFjaChSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpCiB7CiAj
aWZuZGVmIE5ERUJVRwotICAgIGluVGV4dFNsYXZlRGV0YWNoID0gdHJ1ZTsKKyAgICBpblRleHRS
dW5EZXRhY2ggPSB0cnVlOwogI2VuZGlmCiAgICAgZGVsZXRlIHRoaXM7CiAjaWZuZGVmIE5ERUJV
RwotICAgIGluVGV4dFNsYXZlRGV0YWNoID0gZmFsc2U7CisgICAgaW5UZXh0UnVuRGV0YWNoID0g
ZmFsc2U7CiAjZW5kaWYKIAogICAgIC8vIFJlY292ZXIgdGhlIHNpemUgbGVmdCB0aGVyZSBmb3Ig
dXMgYnkgb3BlcmF0b3IgZGVsZXRlIGFuZCBmcmVlIHRoZSBtZW1vcnkuCiAgICAgcmVuZGVyQXJl
bmEtPmZyZWUoKihzaXplX3QgKil0aGlzLCB0aGlzKTsKIH0KIAotdm9pZCogVGV4dFNsYXZlOjpv
cGVyYXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpIHRocm93KCkK
K3ZvaWQqIFRleHRSdW46Om9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIFJlbmRlckFyZW5hKiByZW5k
ZXJBcmVuYSkgdGhyb3coKQogewogICAgIHJldHVybiByZW5kZXJBcmVuYS0+YWxsb2NhdGUoc3op
OwogfQogCi12b2lkIFRleHRTbGF2ZTo6b3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwgc2l6ZV90
IHN6KQordm9pZCBUZXh0UnVuOjpvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzaXplX3Qgc3op
CiB7Ci0gICAgYXNzZXJ0KGluVGV4dFNsYXZlRGV0YWNoKTsKKyAgICBhc3NlcnQoaW5UZXh0UnVu
RGV0YWNoKTsKIAogICAgIC8vIFN0YXNoIHNpemUgd2hlcmUgZGV0YWNoIGNhbiBmaW5kIGl0Lgog
ICAgICooc2l6ZV90ICopcHRyID0gc3o7CiB9CiAKIAotdm9pZCBUZXh0U2xhdmU6OnBhaW50U2Vs
ZWN0aW9uKGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQgKnRleHQsIFFQYWludGVyICpwLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGludCB0eCwgaW50IHR5LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3Mp
Cit2b2lkIFRleHRSdW46OnBhaW50U2VsZWN0aW9uKGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQg
KnRleHQsIFFQYWludGVyICpwLCBSZW5kZXJTdHlsZSogc3R5bGUsIGludCB0eCwgaW50IHR5LCBp
bnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCiB7CiAgICAgaWYoc3RhcnRQb3MgPiBtX2xlbikgcmV0
dXJuOwogICAgIGlmKHN0YXJ0UG9zIDwgMCkgc3RhcnRQb3MgPSAwOwpAQCAtODMsMTIgKzgzLDEy
IEBAIHZvaWQgVGV4dFNsYXZlOjpwYWludFNlbGVjdGlvbihjb25zdCBGb24KIAogICAgIHR5ICs9
IG1fYmFzZWxpbmU7CiAKLSAgICAvL2tkRGVidWcoIDYwNDAgKSA8PCAidGV4dFNsYXZlOjpwYWlu
dGluZygiIDw8IHMuc3RyaW5nKCkgPDwgIikgYXQoIiA8PCB4K190eCA8PCAiLyIgPDwgeStfdHkg
PDwgIikiIDw8IGVuZGw7CisgICAgLy9rZERlYnVnKCA2MDQwICkgPDwgInRleHRSdW46OnBhaW50
aW5nKCIgPDwgUUNvbnN0U3RyaW5nKHRleHQtPnN0ci0+cyArIG1fc3RhcnQsIG1fbGVuKS5zdHJp
bmcoKSA8PCAiKSBhdCgiIDw8IG1feCt0eCA8PCAiLyIgPDwgbV95K3R5IDw8ICIpIiA8PCBlbmRs
OwogICAgIGYtPmRyYXdUZXh0KHAsIG1feCArIHR4LCBtX3kgKyB0eSwgdGV4dC0+c3RyLT5zLCB0
ZXh0LT5zdHItPmwsIG1fc3RhcnQsIG1fbGVuLAogCQltX3RvQWRkLCBtX3JldmVyc2VkID8gUVBh
aW50ZXI6OlJUTCA6IFFQYWludGVyOjpMVFIsIHN0YXJ0UG9zLCBlbmRQb3MsIGMpOwogfQogCi12
b2lkIFRleHRTbGF2ZTo6cGFpbnREZWNvcmF0aW9uKCBRUGFpbnRlciAqcHQsIFJlbmRlclRleHQq
IHAsIGludCBfdHgsIGludCBfdHksIGludCBkZWNvLCBib29sIGJlZ2luLCBib29sIGVuZCkKK3Zv
aWQgVGV4dFJ1bjo6cGFpbnREZWNvcmF0aW9uKCBRUGFpbnRlciAqcHQsIFJlbmRlclRleHQqIHAs
IGludCBfdHgsIGludCBfdHksIGludCBkZWNvLCBib29sIGJlZ2luLCBib29sIGVuZCkKIHsKICAg
ICBfdHggKz0gbV94OwogICAgIF90eSArPSBtX3k7CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBU
ZXh0U2xhdmU6OnBhaW50RGVjb3JhdGlvbiggUVBhaW50ZQogICAgIC8vIHN1cHBvcnQgaXQuIExh
cnMKIH0KIAotdm9pZCBUZXh0U2xhdmU6OnBhaW50Qm94RGVjb3JhdGlvbnMoUVBhaW50ZXIgKnB0
LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclRleHQgKnAsIGludCBfdHgsIGludCBfdHksIGJv
b2wgYmVnaW4sIGJvb2wgZW5kKQordm9pZCBUZXh0UnVuOjpwYWludEJveERlY29yYXRpb25zKFFQ
YWludGVyICpwdCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJUZXh0ICpwLCBpbnQgX3R4LCBp
bnQgX3R5LCBib29sIGJlZ2luLCBib29sIGVuZCkKIHsKICAgICBpbnQgdG9wRXh0cmEgPSBwLT5i
b3JkZXJUb3AoKSArIHAtPnBhZGRpbmdUb3AoKTsKICAgICBpbnQgYm90dG9tRXh0cmEgPSBwLT5i
b3JkZXJCb3R0b20oKSArIHAtPnBhZGRpbmdCb3R0b20oKTsKQEAgLTE1MSw5ICsxNTEsOSBAQCB2
b2lkIFRleHRTbGF2ZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyhRUGFpCiAgICAgICAgIHAtPnBhaW50
Qm9yZGVyKHB0LCBfdHgsIF90eSwgd2lkdGgsIGhlaWdodCwgc3R5bGUsIGJlZ2luLCBlbmQpOwog
fQogCi1GaW5kU2VsZWN0aW9uUmVzdWx0IFRleHRTbGF2ZTo6Y2hlY2tTZWxlY3Rpb25Qb2ludChp
bnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgY29uc3QgRm9udCAqZiwgUmVuZGVyVGV4
dCAqdGV4dCwgaW50ICYgb2Zmc2V0LCBzaG9ydCBsaW5lSGVpZ2h0KQorRmluZFNlbGVjdGlvblJl
c3VsdCBUZXh0UnVuOjpjaGVja1NlbGVjdGlvblBvaW50KGludCBfeCwgaW50IF95LCBpbnQgX3R4
LCBpbnQgX3R5LCBjb25zdCBGb250ICpmLCBSZW5kZXJUZXh0ICp0ZXh0LCBpbnQgJiBvZmZzZXQs
IHNob3J0IGxpbmVIZWlnaHQpCiB7Ci0vLyAgICAgICBrZERlYnVnKDYwNDApIDw8ICJUZXh0U2xh
dmU6OmNoZWNrU2VsZWN0aW9uUG9pbnQgIiA8PCB0aGlzIDw8ICIgX3g9IiA8PCBfeCA8PCAiIF95
PSIgPDwgX3kKKy8vICAgICAgIGtkRGVidWcoNjA0MCkgPDwgIlRleHRSdW46OmNoZWNrU2VsZWN0
aW9uUG9pbnQgIiA8PCB0aGlzIDw8ICIgX3g9IiA8PCBfeCA8PCAiIF95PSIgPDwgX3kKIC8vICAg
ICAgICAgICAgICAgICAgICAgPDwgIiBfdHgrbV94PSIgPDwgX3R4K21feCA8PCAiIF90eSttX3k9
IiA8PCBfdHkrbV95IDw8IGVuZGw7CiAgICAgb2Zmc2V0ID0gMDsKIApAQCAtMTc3LDcgKzE3Nyw3
IEBAIEZpbmRTZWxlY3Rpb25SZXN1bHQgVGV4dFNsYXZlOjpjaGVja1NlbGUKICAgICB9CiAKICAg
ICBpbnQgZGVsdGEgPSBfeCAtIChfdHggKyBtX3gpOwotICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAi
VGV4dFNsYXZlOjpjaGVja1NlbGVjdGlvblBvaW50IGRlbHRhPSIgPDwgZGVsdGEgPDwgZW5kbDsK
KyAgICAvL2tkRGVidWcoNjA0MCkgPDwgIlRleHRSdW46OmNoZWNrU2VsZWN0aW9uUG9pbnQgZGVs
dGE9IiA8PCBkZWx0YSA8PCBlbmRsOwogICAgIGludCBwb3MgPSAwOwogICAgIGlmICggbV9yZXZl
cnNlZCApIHsKIAlkZWx0YSAtPSBtX3dpZHRoOwpAQCAtMjA2LDIzICsyMDYsNTkgQEAgRmluZFNl
bGVjdGlvblJlc3VsdCBUZXh0U2xhdmU6OmNoZWNrU2VsZQogICAgIHJldHVybiBTZWxlY3Rpb25Q
b2ludEluc2lkZTsKIH0KIAoraW50IFRleHRSdW46Om9mZnNldEZvclBvaW50KGludCBfeCwgaW50
ICZheCkgY29uc3QKK3sKKyAgUmVuZGVyVGV4dCAqdCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQg
Kj4oY29uc3RfY2FzdDxUZXh0UnVuICo+KHRoaXMpLT5vYmplY3QoKSk7CisgIFFDb25zdFN0cmlu
ZyB0ZWtzdCh0LT5zdHItPnMgKyBtX3N0YXJ0LCBtX2xlbik7CisgIGNvbnN0IFFGb250TWV0cmlj
cyAmZm0gPSB0LT5tZXRyaWNzKG1fZmlyc3RMaW5lKTsKKworICAvLyBEbyBiaW5hcnkgc2VhcmNo
IGZvciBmaW5kaW5nIG91dCBvZmZzZXQsIHNhdmVzIHNvbWUgdGltZSBmb3IgbG9uZworICAvLyBy
dW5zLgorICBpbnQgc3RhcnQgPSAwOworICBpbnQgZW5kID0gbV9sZW47CisgIGF4ID0gbV94Owor
ICBpbnQgb2Zmc2V0ID0gKHN0YXJ0ICsgZW5kKSAvIDI7CisgIHdoaWxlIChlbmQgLSBzdGFydCA+
IDApIHsKKyAgICAvLyBhbHdheXMgc25hcCB0byB0aGUgcmlnaHQgY29sdW1uLiBUaGlzIG1ha2Vz
IHVwIGZvciAianVtcHkiIHZlcnRpY2FsCisgICAgLy8gbmF2aWdhdGlvbi4KKyAgICBpZiAoZW5k
IC0gc3RhcnQgPT0gMSkgc3RhcnQgPSBlbmQ7CisKKyAgICBvZmZzZXQgPSAoc3RhcnQgKyBlbmQp
IC8gMjsKKyAgICBheCA9IG1feCArIGZtLndpZHRoKHRla3N0LnN0cmluZygpLCBvZmZzZXQpOwor
ICAgIGlmIChheCA+IF94KSBlbmQgPSBvZmZzZXQ7CisgICAgZWxzZSBpZiAoYXggPCBfeCkgc3Rh
cnQgPSBvZmZzZXQ7CisgICAgZWxzZSBicmVhazsKKyAgfS8qd2VuZCovCisgIHJldHVybiBtX3N0
YXJ0ICsgb2Zmc2V0OworfQorCitsb25nIFRleHRSdW46Om1pbk9mZnNldCgpIGNvbnN0Cit7Cisg
IHJldHVybiBtX3N0YXJ0OworfQorCitsb25nIFRleHRSdW46Om1heE9mZnNldCgpIGNvbnN0Cit7
CisgIHJldHVybiBtX3N0YXJ0ICsgbV9sZW47Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLVRleHRTbGF2ZUFycmF5OjpUZXh0U2xhdmVBcnJheSgpCitUZXh0UnVuQXJyYXk6OlRleHRS
dW5BcnJheSgpCiB7CiAgICAgc2V0QXV0b0RlbGV0ZShmYWxzZSk7CiB9CiAKLWludCBUZXh0U2xh
dmVBcnJheTo6Y29tcGFyZUl0ZW1zKCBJdGVtIGQxLCBJdGVtIGQyICkKK2ludCBUZXh0UnVuQXJy
YXk6OmNvbXBhcmVJdGVtcyggSXRlbSBkMSwgSXRlbSBkMiApCiB7CiAgICAgYXNzZXJ0KGQxKTsK
ICAgICBhc3NlcnQoZDIpOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRTbGF2ZSo+KGQx
KS0+bV95IC0gc3RhdGljX2Nhc3Q8VGV4dFNsYXZlKj4oZDIpLT5tX3k7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRleHRSdW4qPihkMSktPm1feSAtIHN0YXRpY19jYXN0PFRleHRSdW4qPihkMikt
Pm1feTsKIH0KIAogLy8gcmVtb3ZlIHRoaXMgb25jZSBRVmVjdG9yOjpic2VhcmNoIGlzIGZpeGVk
Ci1pbnQgVGV4dFNsYXZlQXJyYXk6OmZpbmRGaXJzdE1hdGNoaW5nKEl0ZW0gZCkgY29uc3QKK2lu
dCBUZXh0UnVuQXJyYXk6OmZpbmRGaXJzdE1hdGNoaW5nKEl0ZW0gZCkgY29uc3QKIHsKICAgICBp
bnQgbGVuID0gY291bnQoKTsKIApAQCAtMjk3LDE4ICszMzMsMTggQEAgdm9pZCBSZW5kZXJUZXh0
OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqXwogCiBSZW5kZXJUZXh0Ojp+UmVuZGVyVGV4dCgpCiB7
Ci0gICAgZGVsZXRlU2xhdmVzKCByZW5kZXJBcmVuYSgpICk7CisgICAgZGVsZXRlUnVucyggcmVu
ZGVyQXJlbmEoKSApOwogICAgIGlmKHN0cikgc3RyLT5kZXJlZigpOwogfQogCiAKIHZvaWQgUmVu
ZGVyVGV4dDo6ZGV0YWNoKFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSkKIHsKLSAgICBkZWxldGVT
bGF2ZXMocmVuZGVyQXJlbmEpOworICAgIGRlbGV0ZVJ1bnMocmVuZGVyQXJlbmEpOwogICAgIFJl
bmRlck9iamVjdDo6ZGV0YWNoKHJlbmRlckFyZW5hKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Ojpk
ZWxldGVTbGF2ZXMoUmVuZGVyQXJlbmEgKmFyZW5hKQordm9pZCBSZW5kZXJUZXh0OjpkZWxldGVS
dW5zKFJlbmRlckFyZW5hICphcmVuYSkKIHsKICAgICAvLyB0aGlzIGlzIGEgc2xpZ2h0IHZhcmlh
bnQgb2YgUUFycmF5OjpjbGVhcigpLgogICAgIC8vIFdlIGRvbid0IGRlbGV0ZSB0aGUgYXJyYXkg
aXRzZWxmIGhlcmUgYmVjYXVzZSBpdHMKQEAgLTMxOSw3ICszNTUsNyBAQCB2b2lkIFJlbmRlclRl
eHQ6OmRlbGV0ZVNsYXZlcyhSZW5kZXJBcmVuCiAgICAgICAgIGlmICghYXJlbmEpCiAgICAgICAg
ICAgICBhcmVuYSA9IHJlbmRlckFyZW5hKCk7CiAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaT0w
OyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgIFRleHRTbGF2ZSogcyA9IG1fbGluZXMuYXQo
aSk7CisgICAgICAgICAgICBUZXh0UnVuKiBzID0gbV9saW5lcy5hdChpKTsKICAgICAgICAgICAg
IGlmIChzKQogICAgICAgICAgICAgICAgIHMtPmRldGFjaChhcmVuYSk7CiAgICAgICAgIG1fbGlu
ZXMucmVtb3ZlKGkpOwpAQCAtMzI5LDE3ICszNjUsMTkgQEAgdm9pZCBSZW5kZXJUZXh0OjpkZWxl
dGVTbGF2ZXMoUmVuZGVyQXJlbgogICAgIEtIVE1MQXNzZXJ0KG1fbGluZXMuY291bnQoKSA9PSAw
KTsKIH0KIAotVGV4dFNsYXZlICogUmVuZGVyVGV4dDo6ZmluZFRleHRTbGF2ZSggaW50IG9mZnNl
dCwgaW50ICZwb3MgKQorVGV4dFJ1biAqIFJlbmRlclRleHQ6OmZpbmRUZXh0UnVuKCBpbnQgb2Zm
c2V0LCBpbnQgJnBvcyApCiB7Ci0gICAgLy8gVGhlIHRleHQgc2xhdmVzIHBvaW50IHRvIHBhcnRz
IG9mIHRoZSByZW5kZXJ0ZXh0J3Mgc3RyIHN0cmluZworICAgIC8vIFRoZSB0ZXh0IHJ1bnMgcG9p
bnQgdG8gcGFydHMgb2YgdGhlIHJlbmRlcnRleHQncyBzdHIgc3RyaW5nCiAgICAgLy8gKHRoZXkg
ZG9uJ3QgaW5jbHVkZSAnXG4nKQotICAgIC8vIEZpbmQgdGhlIHRleHQgc2xhdmUgdGhhdCBpbmNs
dWRlcyB0aGUgY2hhcmFjdGVyIGF0IEBwIG9mZnNldAotICAgIC8vIGFuZCByZXR1cm4gcG9zLCB3
aGljaCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXIgaW4gdGhlIHNsYXZlLgorICAgIC8vIEZp
bmQgdGhlIHRleHQgcnVuIHRoYXQgaW5jbHVkZXMgdGhlIGNoYXJhY3RlciBhdCBAcCBvZmZzZXQK
KyAgICAvLyBhbmQgcmV0dXJuIHBvcywgd2hpY2ggaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjaGFy
IGluIHRoZSBydW4uCisKKyAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHVzZSBiaW5hcnkgc2VhcmNo
PyBEaXJrIHNheXMgaXQgd29uJ3Qgd29yayA6LSggKExTKQogCiAgICAgaWYgKCBtX2xpbmVzLmlz
RW1wdHkoKSApCiAgICAgICAgIHJldHVybiAwTDsKIAotICAgIFRleHRTbGF2ZSogcyA9IG1fbGlu
ZXNbMF07CisgICAgVGV4dFJ1biogcyA9IG1fbGluZXNbMF07CiAgICAgdWludCBzaSA9IDA7CiAg
ICAgaW50IG9mZiA9IHMtPm1fbGVuOwogICAgIHdoaWxlKG9mZnNldCA+IG9mZiAmJiArK3NpIDwg
bV9saW5lcy5jb3VudCgpKQpAQCAtMzQ3LDggKzM4NSw5IEBAIFRleHRTbGF2ZSAqIFJlbmRlclRl
eHQ6OmZpbmRUZXh0U2xhdmUoIGkKICAgICAgICAgcyA9IG1fbGluZXNbc2ldOwogICAgICAgICBv
ZmYgPSBzLT5tX3N0YXJ0ICsgcy0+bV9sZW47CiAgICAgfQotICAgIC8vIHdlIGFyZSBub3cgaW4g
dGhlIGNvcnJlY3QgdGV4dCBzbGF2ZQorICAgIC8vIHdlIGFyZSBub3cgaW4gdGhlIGNvcnJlY3Qg
dGV4dCBydW4KICAgICBwb3MgPSAob2Zmc2V0ID4gb2ZmID8gcy0+bV9sZW4gOiBvZmZzZXQgLSBz
LT5tX3N0YXJ0ICk7CisgICAga2REZWJ1Zyg2MDQwKSA8PCAib2Zmc2V0PSIgPDwgb2Zmc2V0IDw8
ICIgcy0+bV9zdGFydD0iIDw8IHMtPm1fc3RhcnQgPDwgZW5kbDsKICAgICByZXR1cm4gczsKIH0K
IApAQCAtMzY0LDcgKzQwMyw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6bm9kZUF0UG9pbnQoTm9kZUlu
Zm8mIGkKIAogICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7CiAgICAgaWYgKHN0eWxlKCktPnZpc2li
aWxpdHkoKSAhPSBISURERU4pIHsKLSAgICAgICAgVGV4dFNsYXZlICpzID0gbV9saW5lcy5jb3Vu
dCgpID8gbV9saW5lc1swXSA6IDA7CisgICAgICAgIFRleHRSdW4gKnMgPSBtX2xpbmVzLmNvdW50
KCkgPyBtX2xpbmVzWzBdIDogMDsKICAgICAgICAgaW50IHNpID0gMDsKICAgICAgICAgd2hpbGUo
cykgewogICAgICAgICAgICAgaWYoKF95ID49X3R5ICsgcy0+bV95KSAmJiAoX3kgPCBfdHkgKyBz
LT5tX3kgKyBoZWlnaHQpICYmCkBAIC00MDUsMjQgKzQ0NCwyNCBAQCBGaW5kU2VsZWN0aW9uUmVz
dWx0IFJlbmRlclRleHQ6OmNoZWNrU2VsCiB7CiAvLyAgICAgICBrZERlYnVnKDYwNDApIDw8ICJS
ZW5kZXJUZXh0OjpjaGVja1NlbGVjdGlvblBvaW50ICIgPDwgdGhpcyA8PCAiIF94PSIgPDwgX3gg
PDwgIiBfeT0iIDw8IF95CiAvLyAgICAgICAgICAgICAgICAgICAgIDw8ICIgX3R4PSIgPDwgX3R4
IDw8ICIgX3R5PSIgPDwgX3R5IDw8IGVuZGw7Ci0gICAgVGV4dFNsYXZlICpsYXN0UG9pbnRBZnRl
cklubGluZT0wOworICAgIFRleHRSdW4gKmxhc3RQb2ludEFmdGVySW5saW5lPTA7CiAKICAgICBm
b3IodW5zaWduZWQgaW50IHNpID0gMDsgc2kgPCBtX2xpbmVzLmNvdW50KCk7IHNpKyspCiAgICAg
ewotICAgICAgICBUZXh0U2xhdmUqIHMgPSBtX2xpbmVzW3NpXTsKKyAgICAgICAgVGV4dFJ1biog
cyA9IG1fbGluZXNbc2ldOwogICAgICAgICBpbnQgcmVzdWx0OwogICAgICAgICBjb25zdCBGb250
ICpmID0gaHRtbEZvbnQoIHNpPT0wICk7CiAgICAgICAgIHJlc3VsdCA9IHMtPmNoZWNrU2VsZWN0
aW9uUG9pbnQoX3gsIF95LCBfdHgsIF90eSwgZiwgdGhpcywgb2Zmc2V0LCBtX2xpbmVIZWlnaHQp
OwogCiAvLyAgICAgICAgIGtkRGVidWcoNjA0MCkgPDwgIlJlbmRlclRleHQ6OmNoZWNrU2VsZWN0
aW9uUG9pbnQgIiA8PCB0aGlzIDw8ICIgbGluZSAiIDw8IHNpIDw8ICIgcmVzdWx0PSIgPDwgcmVz
dWx0IDw8ICIgb2Zmc2V0PSIgPDwgb2Zmc2V0IDw8IGVuZGw7Ci0gICAgICAgIGlmICggcmVzdWx0
ID09IFNlbGVjdGlvblBvaW50SW5zaWRlICkgLy8geCx5IGlzIGluc2lkZSB0aGUgdGV4dHNsYXZl
CisgICAgICAgIGlmICggcmVzdWx0ID09IFNlbGVjdGlvblBvaW50SW5zaWRlICkgLy8geCx5IGlz
IGluc2lkZSB0aGUgdGV4dHJ1bgogICAgICAgICB7CiAgICAgICAgICAgICBvZmZzZXQgKz0gcy0+
bV9zdGFydDsgLy8gYWRkIHRoZSBvZmZzZXQgZnJvbSB0aGUgcHJldmlvdXMgbGluZXMKICAgICAg
ICAgICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAiUmVuZGVyVGV4dDo6Y2hlY2tTZWxlY3Rpb25Qb2lu
dCBpbnNpZGUgLT4gIiA8PCBvZmZzZXQgPDwgZW5kbDsKICAgICAgICAgICAgIG5vZGUgPSBlbGVt
ZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0aW9uUG9pbnRJbnNpZGU7CiAgICAgICAg
IH0gZWxzZSBpZiAoIHJlc3VsdCA9PSBTZWxlY3Rpb25Qb2ludEJlZm9yZSB8fCByZXN1bHQgPT0g
U2VsZWN0aW9uUG9pbnRCZWZvcmVJbkxpbmUgKSB7Ci0gICAgICAgICAgICAvLyB4LHkgaXMgYmVm
b3JlIHRoZSB0ZXh0c2xhdmUgLT4gc3RvcCBoZXJlCisgICAgICAgICAgICAvLyB4LHkgaXMgYmVm
b3JlIHRoZSB0ZXh0cnVuIC0+IHN0b3AgaGVyZQogICAgICAgICAgICAgaWYgKCBzaSA+IDAgJiYg
bGFzdFBvaW50QWZ0ZXJJbmxpbmUgKSB7CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbGFzdFBv
aW50QWZ0ZXJJbmxpbmUtPm1fc3RhcnQgKyBsYXN0UG9pbnRBZnRlcklubGluZS0+bV9sZW47CiAg
ICAgICAgICAgICAgICAgLy9rZERlYnVnKDYwNDApIDw8ICJSZW5kZXJUZXh0OjpjaGVja1NlbGVj
dGlvblBvaW50IGJlZm9yZSAtPiAiIDw8IG9mZnNldCA8PCBlbmRsOwpAQCAtNDQ3LDIzICs0ODYs
MzQgQEAgRmluZFNlbGVjdGlvblJlc3VsdCBSZW5kZXJUZXh0OjpjaGVja1NlbAogICAgIHJldHVy
biBTZWxlY3Rpb25Qb2ludEFmdGVyOwogfQogCi12b2lkIFJlbmRlclRleHQ6OmN1cnNvclBvcyhp
bnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCkKK3ZvaWQgUmVuZGVyVGV4
dDo6Y2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50ICZfeSwg
aW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpCiB7CiAgIGlmICghbV9saW5lcy5jb3VudCgpKSB7CiAg
ICAgX3ggPSBfeSA9IGhlaWdodCA9IC0xOworICAgIHdpZHRoID0gMTsKICAgICByZXR1cm47CiAg
IH0KIAogICBpbnQgcG9zOwotICBUZXh0U2xhdmUgKiBzID0gZmluZFRleHRTbGF2ZSggb2Zmc2V0
LCBwb3MgKTsKKyAgVGV4dFJ1biAqIHMgPSBmaW5kVGV4dFJ1biggb2Zmc2V0LCBwb3MgKTsKKy8v
ICBrZERlYnVnKDYwNDApIDw8ICJvZmZzZXQ9Ijw8b2Zmc2V0IDw8ICIgcG9zPSI8PHBvcyA8PCBl
bmRsOwogICBfeSA9IHMtPm1feTsKLSAgaGVpZ2h0ID0gbV9saW5lSGVpZ2h0OyAvLyAjIyMgZmly
c3RMaW5lISEhIHMtPm1faGVpZ2h0OwogCi0gIGNvbnN0IFFGb250TWV0cmljcyAmZm0gPSBtZXRy
aWNzKCBmYWxzZSApOyAvLyAjIyMjIHdyb25nIGZvciBmaXJzdC1saW5lIQotICBRU3RyaW5nIHRl
a3N0KHN0ci0+cyArIHMtPm1fc3RhcnQsIHMtPm1fbGVuKTsKLSAgX3ggPSBzLT5tX3ggKyAoZm0u
Ym91bmRpbmdSZWN0KHRla3N0LCBwb3MpKS5yaWdodCgpOwotICBpZihwb3MpCi0gICAgICBfeCAr
PSBmbS5yaWdodEJlYXJpbmcoICooc3RyLT5zICsgcy0+bV9zdGFydCArIHBvcyAtIDEgKSApOwor
ICBjb25zdCBRRm9udE1ldHJpY3MgJmZtID0gbWV0cmljcyggcy0+bV9maXJzdExpbmUgKTsKKyAg
aGVpZ2h0ID0gZm0uaGVpZ2h0KCk7IC8vIHMtPm1faGVpZ2h0OworCisgIFFDb25zdFN0cmluZyB0
ZWtzdChzdHItPnMgKyBzLT5tX3N0YXJ0LCBzLT5tX2xlbik7CisvLyAgX3ggPSBzLT5tX3ggKyAo
Zm0uYm91bmRpbmdSZWN0KHRla3N0LCBwb3MpKS5yaWdodCgpOworLy8gIGlmKHBvcykKKy8vICAg
ICAgX3ggKz0gZm0ucmlnaHRCZWFyaW5nKCAqKHN0ci0+cyArIHMtPm1fc3RhcnQgKyBwb3MgLSAx
ICkgKTsKKyAgX3ggPSBzLT5tX3ggKyBmbS53aWR0aCh0ZWtzdC5zdHJpbmcoKSwgcG9zKTsKKyAg
d2lkdGggPSAxOworICBpZiAob3ZlcnJpZGUpIHsKKyAgICB3aWR0aCA9IG9mZnNldCA8IG1heE9m
ZnNldCgpID8gZm0ud2lkdGgoc3RyLT5zW29mZnNldF0pIDogMTsKKyAgfS8qZW5kIGlmKi8KKyAg
a2REZWJ1Zyg2MDQwKSA8PCAiX3g9Ijw8X3ggPDwgIiBzLT5tX3g9Ijw8cy0+bV94CisgIAkJPDwg
IiBzLT5tX3N0YXJ0Ijw8cy0+bV9zdGFydAorCQk8PCAiIHMtPm1fbGVuIjw8cy0+bV9sZW4gPDwg
ZW5kbDsKIAogICBpbnQgYWJzeCwgYWJzeTsKIApAQCAtNDcxLDE1ICs1MjEsMzIgQEAgdm9pZCBS
ZW5kZXJUZXh0OjpjdXJzb3JQb3MoaW50IG9mZnNldCwgaQogCiAgIGlmIChjYiAmJiBjYiAhPSB0
aGlzICYmIGNiLT5hYnNvbHV0ZVBvc2l0aW9uKGFic3gsYWJzeSkpCiAgIHsKKyAgICAvL2tkRGVi
dWcoNjA0MCkgPDwgImFic3g9IiA8PCBhYnN4IDw8ICIgYWJzeT0iIDw8IGFic3kgPDwgZW5kbDsK
ICAgICBfeCArPSBhYnN4OwogICAgIF95ICs9IGFic3k7CiAgIH0gZWxzZSB7Ci0gICAgLy8gd2Ug
ZG9uJ3Qga25vdyBvdXIgYWJzb2x1dGUgcG9zaXRpb24sIGFuZCB0aGVyZSBpcyBub3QgcG9pbnQg
cmV0dXJuaW5nCisgICAgLy8gd2UgZG9uJ3Qga25vdyBvdXIgYWJzb2x1dGUgcG9zaXRpb24sIGFu
ZCB0aGVyZSBpcyBubyBwb2ludCByZXR1cm5pbmcKICAgICAvLyBqdXN0IGEgcmVsYXRpdmUgb25l
CiAgICAgX3ggPSBfeSA9IC0xOwogICB9CiB9CiAKK2xvbmcgUmVuZGVyVGV4dDo6bWluT2Zmc2V0
KCkgY29uc3QKK3sKKyAgaWYgKCFtX2xpbmVzLmNvdW50KCkpIHJldHVybiAwOworICAvLyBGSVhN
RTogaXQgaXMgKm5vdCogZ3VhcmFudGVlZCB0aGF0IHRoZSBmaXJzdCBydW4gY29udGFpbnMgdGhl
IGxvd2VzdCBvZmZzZXQKKyAgLy8gRWl0aGVyIG1ha2UgdGhpcyBhIGxpbmVhciBzZWFyY2ggKHNs
b3cpLAorICAvLyBvciBtYWludGFpbiBhbiBpbmRleCAobmVlZHMgbXVjaCBtZW0pLAorICAvLyBv
ciBjYWxjdWxhdGUgYW5kIHN0b3JlIGl0IGluIGJpZGkuY3BwIChuZWVkcyBjYWxjdWxhdGlvbiBl
dmVuIGlmIG5vdCBuZWVkZWQpCisgIC8vIChMUykKKyAgcmV0dXJuIG1fbGluZXNbMF0tPm1fc3Rh
cnQ7Cit9CisKK2xvbmcgUmVuZGVyVGV4dDo6bWF4T2Zmc2V0KCkgY29uc3QKK3sKKyAgcmV0dXJu
IHN0ci0+bDsKK30KKwogYm9vbCBSZW5kZXJUZXh0OjphYnNvbHV0ZVBvc2l0aW9uKGludCAmeFBv
cywgaW50ICZ5UG9zLCBib29sKQogewogICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OmFic29sdXRl
UG9zaXRpb24oeFBvcywgeVBvcywgZmFsc2UpOwpAQCAtNTAwLDcgKzU2Nyw3IEBAIGJvb2wgUmVu
ZGVyVGV4dDo6cG9zT2ZDaGFyKGludCBjaHIsIGludCAKICAgICBwYXJlbnQoKS0+YWJzb2x1dGVQ
b3NpdGlvbiggeCwgeSwgZmFsc2UgKTsKIAogICAgIGludCBwb3M7Ci0gICAgVGV4dFNsYXZlICog
cyA9IGZpbmRUZXh0U2xhdmUoIGNociwgcG9zICk7CisgICAgVGV4dFJ1biAqIHMgPSBmaW5kVGV4
dFJ1biggY2hyLCBwb3MgKTsKIAogICAgIGlmICggcyApIHsKICAgICAgICAgLy8gcyBpcyB0aGUg
bGluZSBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIKQEAgLTUyNiw3ICs1OTMsNyBAQCB2b2lkIFJl
bmRlclRleHQ6OnBhaW50T2JqZWN0KCBRUGFpbnRlciAqCiAgICAgaW50IG93ID0gc3R5bGUoKS0+
b3V0bGluZVdpZHRoKCk7CiAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gaGFzRmlyc3RM
aW5lKCkgPyBzdHlsZSgpLT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORSkg
OiAwOwogICAgIGludCBkID0gc3R5bGUoKS0+dGV4dERlY29yYXRpb24oKTsKLSAgICBUZXh0U2xh
dmUgZigwLCB5LXR5KTsKKyAgICBUZXh0UnVuIGYoMCwgeS10eSk7CiAgICAgaW50IHNpID0gbV9s
aW5lcy5maW5kRmlyc3RNYXRjaGluZygmZik7CiAgICAgLy8gc29tZXRoaW5nIG1hdGNoaW5nIGZv
dW5kLCBmaW5kIHRoZSBmaXJzdCBvbmUgdG8gcGFpbnQKICAgICBib29sIGlzUHJpbnRpbmcgPSAo
cC0+ZGV2aWNlKCktPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OlByaW50ZXIpOwpAQCAtNTU0LDcg
KzYyMSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6cGFpbnRPYmplY3QoIFFQYWludGVyICoKICAgICAg
ICAgICAgIC8va2REZWJ1Zyg2MDQwKSA8PCB0aGlzIDw8ICIgU2VsZWN0aW9uIGZyb20gIiA8PCBz
dGFydFBvcyA8PCAiIHRvICIgPDwgZW5kUG9zIDw8IGVuZGw7CiAgICAgICAgIH0KIAotICAgICAg
ICBUZXh0U2xhdmUqIHM7CisgICAgICAgIFRleHRSdW4qIHM7CiAgICAgICAgIGludCBtaW54ID0g
IDEwMDAwMDA7CiAgICAgICAgIGludCBtYXh4ID0gLTEwMDAwMDA7CiAgICAgICAgIGludCBvdXRs
aW5lYm94X3kgPSBtX2xpbmVzW3NpXS0+bV95OwpAQCAtNjA3LDYgKzY3NCw3IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6cGFpbnRPYmplY3QoIFFQYWludGVyICoKICAgICAgICAgICAgICAgICBwLT5zZXRQ
ZW4oX3N0eWxlLT5jb2xvcigpKTsKIAogCSAgICBpZiAocy0+bV9sZW4gPiAwKQorCSAgICAgICAg
Ly9rZERlYnVnKCA2MDQwICkgPDwgIlJlbmRlck9iamVjdDo6cGFpbnRPYmplY3QoIiA8PCBRQ29u
c3RTdHJpbmcoc3RyLT5zICsgcy0+bV9zdGFydCwgcy0+bV9sZW4pLnN0cmluZygpIDw8ICIpIGF0
KCIgPDwgcy0+bV94K3R4IDw8ICIvIiA8PCBzLT5tX3krdHkgPDwgIikiIDw8IGVuZGw7CiAJCWZv
bnQtPmRyYXdUZXh0KHAsIHMtPm1feCArIHR4LCBzLT5tX3kgKyB0eSArIHMtPm1fYmFzZWxpbmUs
IHN0ci0+cywgc3RyLT5sLCBzLT5tX3N0YXJ0LCBzLT5tX2xlbiwKIAkJCSAgICAgICBzLT5tX3Rv
QWRkLCBzLT5tX3JldmVyc2VkID8gUVBhaW50ZXI6OlJUTCA6IFFQYWludGVyOjpMVFIpOwogCkBA
IC04NTMsMzMgKzkyMSw0NiBAQCBzaG9ydCBSZW5kZXJUZXh0OjpiYXNlbGluZVBvc2l0aW9uKCBi
b29sCiAgICAgICAgICggbGluZUhlaWdodCggZmlyc3RMaW5lICkgLSBmbS5oZWlnaHQoKSApIC8g
MjsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Ojpwb3NpdGlvbihpbnQgeCwgaW50IHksIGludCBmcm9t
LCBpbnQgbGVuLCBpbnQgd2lkdGgsIGJvb2wgcmV2ZXJzZSwgYm9vbCBmaXJzdExpbmUsIGludCBz
cGFjZUFkZCkKK0lubGluZUJveCogUmVuZGVyVGV4dDo6Y3JlYXRlSW5saW5lQm94KGJvb2wpCit7
CisgICAgLy8gRklYTUU6IEVpdGhlciBkaXRjaCB0aGUgYXJyYXkgb3IgZ2V0IHRoaXMgb2JqZWN0
IGludG8gaXQuCisgICAgcmV0dXJuIG5ldyAocmVuZGVyQXJlbmEoKSkgVGV4dFJ1bih0aGlzKTsK
K30KKwordm9pZCBSZW5kZXJUZXh0Ojpwb3NpdGlvbihJbmxpbmVCb3gqIGJveCwgaW50IGZyb20s
IGludCBsZW4sIGJvb2wgcmV2ZXJzZSwgaW50IHNwYWNlQWRkKQogeworLy9rZERlYnVnKDYwNDAp
IDw8ICJwb3NpdGlvbjogZnJvbT0iPDxmcm9tPDwiIGxlbj0iPDxsZW48PGVuZGw7CiAgICAgLy8g
IyMjIHNob3VsZCBub3QgYmUgbmVlZGVkISEhCiAgICAgLy8gYXNzZXJ0cyBzb21ldGltZXMgd2l0
aCBwcmUgKHRoYXQgdW5pYnctaGFtYnVyZyB0ZXN0Y2FzZSkuICMjIyBmaW5kIG91dCB3aHkKICAg
ICAvL0tIVE1MQXNzZXJ0KCEobGVuID09IDAgfHwgKHN0ci0+bCAmJiBsZW4gPT0gMSAmJiAqKHN0
ci0+cytmcm9tKSA9PSAnXG4nKSApKTsKLSAgICBpZiAobGVuID09IDAgfHwgKHN0ci0+bCAmJiBs
ZW4gPT0gMSAmJiAqKHN0ci0+cytmcm9tKSA9PSAnXG4nKSApIHJldHVybjsKKyAgICAvLyBJdCBp
cyBub3cgbmVlZGVkLiBCUnMgbmVlZCB0ZXh0IHJ1bnMgdG9vIG90aGVyd2lzZSBjYXJldCBuYXZp
Z2F0aW9uCisgICAgLy8gZ2V0cyBzdHVjayAoTFMpCisgICAgLy9pZiAobGVuID09IDAgfHwgKHN0
ci0+bCAmJiBsZW4gPT0gMSAmJiAqKHN0ci0+cytmcm9tKSA9PSAnXG4nKSApIHJldHVybjsKIAog
ICAgIHJldmVyc2UgPSByZXZlcnNlICYmICFzdHlsZSgpLT52aXN1YWxseU9yZGVyZWQoKTsKIAog
ICAgIC8vICMjIyBtYXJnaW5zIGFuZCBSVEwKICAgICBpZihmcm9tID09IDAgJiYgcGFyZW50KCkt
PmlzSW5saW5lKCkgJiYgcGFyZW50KCktPmZpcnN0Q2hpbGQoKT09dGhpcykKICAgICB7Ci0gICAg
ICAgIHggKz0gcGFkZGluZ0xlZnQoKSArIGJvcmRlckxlZnQoKSArIG1hcmdpbkxlZnQoKTsKLSAg
ICAgICAgd2lkdGggLT0gbWFyZ2luTGVmdCgpOworICAgICAgICBib3gtPm1feCArPSBwYWRkaW5n
TGVmdCgpICsgYm9yZGVyTGVmdCgpICsgbWFyZ2luTGVmdCgpOworICAgICAgICBib3gtPm1fd2lk
dGggLT0gbWFyZ2luTGVmdCgpOwogICAgIH0KIAogICAgIGlmKGZyb20gKyBsZW4gPj0gaW50KHN0
ci0+bCkgJiYgcGFyZW50KCktPmlzSW5saW5lKCkgJiYgcGFyZW50KCktPmxhc3RDaGlsZCgpPT10
aGlzKQotICAgICAgICB3aWR0aCAtPSBtYXJnaW5SaWdodCgpOworICAgICAgICBib3gtPm1fd2lk
dGggLT0gbWFyZ2luUmlnaHQoKTsKIAogI2lmZGVmIERFQlVHX0xBWU9VVAogICAgIFFDaGFyICpj
aCA9IHN0ci0+cytmcm9tOwogICAgIFFDb25zdFN0cmluZyBjc3RyKGNoLCBsZW4pOwogI2VuZGlm
CiAKLSAgICBUZXh0U2xhdmUgKnMgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFRleHRTbGF2ZSh4LCB5
LCBmcm9tLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZVBv
c2l0aW9uKCBmaXJzdExpbmUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoLCByZXZlcnNlLCBzcGFjZUFkZCwgZmlyc3RMaW5lKTsKKyAgICBLSFRNTEFzc2VydChib3gt
PmlzVGV4dFJ1bigpKTsKKyAgICBUZXh0UnVuICpzID0gc3RhdGljX2Nhc3Q8VGV4dFJ1biAqPihi
b3gpOworICAgIHMtPm1fc3RhcnQgPSBmcm9tOworICAgIHMtPm1fbGVuID0gbGVuOworICAgIHMt
Pm1fcmV2ZXJzZWQgPSByZXZlcnNlOworICAgIHMtPm1fdG9BZGQgPSBzcGFjZUFkZDsKKyAgICAv
L2tkRGVidWcoNjA0MCkgPDwgIm1fc3RhcnQ6ICIgPDwgcy0+bV9zdGFydCA8PCAiIG1fbGVuOiAi
IDw8IHMtPm1fbGVuIDw8IGVuZGw7CiAKICAgICBpZihtX2xpbmVzLmNvdW50KCkgPT0gbV9saW5l
cy5zaXplKCkpCiAgICAgICAgIG1fbGluZXMucmVzaXplKG1fbGluZXMuc2l6ZSgpKjIrMSk7CkBA
IC05MzcsNyArMTAxOCw3IEBAIHNob3J0IFJlbmRlclRleHQ6OndpZHRoKCkgY29uc3QKICAgICBp
bnQgbWF4eCA9IDA7CiAgICAgLy8gc2xvb293CiAgICAgZm9yKHVuc2lnbmVkIGludCBzaSA9IDA7
IHNpIDwgbV9saW5lcy5jb3VudCgpOyBzaSsrKSB7Ci0gICAgICAgIFRleHRTbGF2ZSogcyA9IG1f
bGluZXNbc2ldOworICAgICAgICBUZXh0UnVuKiBzID0gbV9saW5lc1tzaV07CiAgICAgICAgIGlm
KHMtPm1feCA8IG1pbngpCiAgICAgICAgICAgICBtaW54ID0gcy0+bV94OwogICAgICAgICBpZihz
LT5tX3ggKyBzLT5tX3dpZHRoID4gbWF4eCkKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfdGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfdGV4dC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgzCmRpZmYgLXUgLXAgLXIxLjgz
IHJlbmRlcl90ZXh0LmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfdGV4dC5oCTE3IE1heSAyMDAzIDIy
OjEyOjU5IC0wMDAwCTEuODMKKysrIHJlbmRlcmluZy9yZW5kZXJfdGV4dC5oCTkgQXVnIDIwMDMg
MDI6NDU6MjAgLTAwMDAKQEAgLTMsNiArMyw3IEBACiAgKgogICogKEMpIDE5OTktMjAwMyBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDAtMjAwMyBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5j
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw2ICsyOSw3IEBACiAjaW5jbHVkZSAieG1sL2Rv
bV9zdHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogI2luY2x1ZGUg
InJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCisjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9s
aW5lLmgiCiAKICNpbmNsdWRlIDxxcHRydmVjdG9yLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CkBA
IC00MCwyMiArNDIsMTIgQEAgbmFtZXNwYWNlIGtodG1sCiAgICAgY2xhc3MgUmVuZGVyVGV4dDsK
ICAgICBjbGFzcyBSZW5kZXJTdHlsZTsKIAotY2xhc3MgVGV4dFNsYXZlCitjbGFzcyBUZXh0UnVu
IDogcHVibGljIElubGluZUJveAogewogcHVibGljOgotICAgIFRleHRTbGF2ZShpbnQgeCwgaW50
IHksIGludCBzdGFydCwgaW50IGxlbiwKLQkgICAgICBpbnQgYmFzZWxpbmUsIGludCB3aWR0aCwK
LSAgICAgICAgICAgICAgYm9vbCByZXZlcnNlZCA9IGZhbHNlLCBpbnQgdG9BZGQgPSAwLCBib29s
IGZpcnN0TGluZSA9IGZhbHNlKQorICAgIFRleHRSdW4oUmVuZGVyT2JqZWN0ICpvYmopCisgICAg
OklubGluZUJveChvYmopCiAgICAgewotICAgICAgICBtX3ggPSB4OwotICAgICAgICBtX3kgPSB5
OwotICAgICAgICBtX3N0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIG1fbGVuID0gbGVuOwotICAgICAg
ICBtX2Jhc2VsaW5lID0gYmFzZWxpbmU7Ci0gICAgICAgIG1fd2lkdGggPSB3aWR0aDsKLSAgICAg
ICAgbV9yZXZlcnNlZCA9IHJldmVyc2VkOwotICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGlu
ZTsKLSAgICAgICAgbV90b0FkZCA9IHRvQWRkOwogICAgIH0KIAogICAgIHZvaWQgZGV0YWNoKFJl
bmRlckFyZW5hKiByZW5kZXJBcmVuYSk7CkBAIC03Myw2ICs2NSw4IEBAIHByaXZhdGU6CiAKIHB1
YmxpYzoKIAorICAgIHZpcnR1YWwgYm9vbCBpc1RleHRSdW4oKSB7IHJldHVybiB0cnVlOyB9CisK
ICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbiggUVBhaW50ZXIgKnB0LCBSZW5kZXJUZXh0KiBwLCBp
bnQgX3R4LCBpbnQgX3R5LCBpbnQgZGVjb3JhdGlvbiwgYm9vbCBiZWdpbiwgYm9vbCBlbmQpOwog
ICAgIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhRUGFpbnRlciAqcCwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJUZXh0ICpwYXJlbnQsIGludCBfdHgsIGludCBfdHksIGJvb2wgYmVnaW4sIGJv
b2wgZW5kKTsKICAgICB2b2lkIHBhaW50U2VsZWN0aW9uKGNvbnN0IEZvbnQgKmYsIFJlbmRlclRl
eHQgKnRleHQsIFFQYWludGVyICpwLCBSZW5kZXJTdHlsZSogc3R5bGUsIGludCB0eCwgaW50IHR5
LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOwpAQCAtODEsMjYgKzc1LDQyIEBAIHB1YmxpYzoK
ICAgICBGaW5kU2VsZWN0aW9uUmVzdWx0IGNoZWNrU2VsZWN0aW9uUG9pbnQoaW50IF94LCBpbnQg
X3ksIGludCBfdHgsIGludCBfdHksIGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQgKnRleHQsIGlu
dCAmIG9mZnNldCwgc2hvcnQgbGluZWhlaWdodCk7CiAKICAgICAvKioKLSAgICAgKiBpZiB0aGlz
IHRleHRzbGF2ZSB3YXMgcmVuZGVyZWQgQHJlZiBfdHkgcGl4ZWxzIGJlbG93IHRoZSB1cHBlciBl
ZGdlCisgICAgICogaWYgdGhpcyB0ZXh0IHJ1biB3YXMgcmVuZGVyZWQgQHJlZiBfdHkgcGl4ZWxz
IGJlbG93IHRoZSB1cHBlciBlZGdlCiAgICAgICogb2YgYSB2aWV3LCB3b3VsZCB0aGUgQHJlZiBf
eSAtY29vcmRpbmF0ZSBiZSBpbnNpZGUgdGhlIHZlcnRpY2FsIHJhbmdlCiAgICAgICogb2YgdGhp
cyBvYmplY3QncyByZXByZXNlbnRhdGlvbj8KICAgICAgKi8KICAgICBib29sIGNoZWNrVmVydGlj
YWxQb2ludChpbnQgX3ksIGludCBfdHksIGludCBfaCwgaW50IGhlaWdodCkKICAgICB7IGlmKChf
dHkgKyBtX3kgPiBfeSArIF9oKSB8fCAoX3R5ICsgbV95ICsgbV9iYXNlbGluZSArIGhlaWdodCA8
IF95KSkgcmV0dXJuIGZhbHNlOyByZXR1cm4gdHJ1ZTsgfQogCisgICAgLyoqCisgICAgICogZGV0
ZXJtaW5lcyB0aGUgb2Zmc2V0IGludG8gdGhlIERPTVN0cmluZyBvZiB0aGUgY2hhcmF0ZXIgdGhl
IGdpdmVuCisgICAgICogY29vcmRpbmF0ZSBwb2ludHMgdG8uCisgICAgICogVGhlIHJldHVybmVk
IG9mZnNldCBpcyBuZXZlciBvdXQgb2YgcmFuZ2UuCisgICAgICogQHBhcmFtIF94IGdpdmVuIGNv
b3JkaW5hdGUgKHJlbGF0aXZlIHRvIGNvbnRhaW5pbmcgYmxvY2spCisgICAgICogQHBhcmFtIGF4
IHJldHVybnMgZXhhY3QgY29vcmRpbmF0ZSB0aGUgb2Zmc2V0IGNvcnJlc3BvbmRzIHRvCisgICAg
ICoJCShyZWxhdGl2ZSB0byBjb250YWluaW5nIGJsb2NrKQorICAgICAqIEByZXR1cm4gdGhlIG9m
ZnNldCAocmVsYXRpdmUgdG8gdGhlIFJlbmRlclRleHQgb2JqZWN0LCBub3QgdG8gdGhpcyBydW4p
CisgICAgICovCisgICAgaW50IG9mZnNldEZvclBvaW50KGludCBfeCwgaW50ICZheCkgY29uc3Q7
CisKKyAgICAvKiogcmV0dXJucyB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlIHRoZSBjYXJldCBv
ZmZzZXQgbWF5IGhhdmUgdG8KKyAgICAgKiBzdGlsbCBwb2ludCB0byBhIHZhbGlkIHBvc2l0aW9u
LgorICAgICAqLworICAgIHZpcnR1YWwgbG9uZyBtaW5PZmZzZXQoKSBjb25zdDsKKyAgICAvKiog
cmV0dXJucyB0aGUgaGlnaGVzdCBwb3NzaWJsZSB2YWx1ZSB0aGUgY2FyZXQgb2Zmc2V0IG1heSBo
YXZlIHRvCisgICAgICogc3RpbGwgcG9pbnQgdG8gYSB2YWxpZCBwb3NpdGlvbi4KKyAgICAgKi8K
KyAgICB2aXJ0dWFsIGxvbmcgbWF4T2Zmc2V0KCkgY29uc3Q7CisKICAgICBpbnQgbV9zdGFydDsK
LSAgICBpbnQgbV95OwogICAgIHVuc2lnbmVkIHNob3J0IG1fbGVuOwotICAgIHNob3J0IG1feDsK
LSAgICBzaG9ydCBtX2Jhc2VsaW5lOwotICAgIHVuc2lnbmVkIHNob3J0IG1fd2lkdGg7CiAKICAg
ICBib29sIG1fcmV2ZXJzZWQgOiAxOwotICAgIGJvb2wgbV9maXJzdExpbmUgOiAxOwogICAgIGlu
dCBtX3RvQWRkIDogMTQ7IC8vIGZvciBqdXN0aWZpZWQgdGV4dAogcHJpdmF0ZToKICAgICAvLyB0
aGlzIGlzIGp1c3QgZm9yIFFWZWN0b3I6OmJzZWFyY2guIERvbid0IHVzZSBpdCBvdGhlcndpc2UK
LSAgICBUZXh0U2xhdmUoaW50IF94LCBpbnQgX3kpCisgICAgVGV4dFJ1bihpbnQgX3gsIGludCBf
eSkKKyAgICAgICAgOklubGluZUJveCgwKQogICAgIHsKICAgICAgICAgbV94ID0gX3g7CiAgICAg
ICAgIG1feSA9IF95OwpAQCAtMTA5LDEyICsxMTksMTIgQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyVGV4dDsKIH07CiAKLWNsYXNzIFRleHRTbGF2ZUFycmF5IDogcHVibGljIFFQ
dHJWZWN0b3I8VGV4dFNsYXZlPgorY2xhc3MgVGV4dFJ1bkFycmF5IDogcHVibGljIFFQdHJWZWN0
b3I8VGV4dFJ1bj4KIHsKIHB1YmxpYzoKLSAgICBUZXh0U2xhdmVBcnJheSgpOworICAgIFRleHRS
dW5BcnJheSgpOwogCi0gICAgVGV4dFNsYXZlKiBmaXJzdCgpOworICAgIFRleHRSdW4qIGZpcnN0
KCk7CiAKICAgICBpbnQJICBmaW5kRmlyc3RNYXRjaGluZyggSXRlbSApIGNvbnN0OwogICAgIHZp
cnR1YWwgaW50IGNvbXBhcmVJdGVtcyggSXRlbSwgSXRlbSApOwpAQCAtMTIyLDcgKzEzMiw3IEBA
IHB1YmxpYzoKIAogY2xhc3MgUmVuZGVyVGV4dCA6IHB1YmxpYyBSZW5kZXJPYmplY3QKIHsKLSAg
ICBmcmllbmQgY2xhc3MgVGV4dFNsYXZlOworICAgIGZyaWVuZCBjbGFzcyBUZXh0UnVuOwogCiBw
dWJsaWM6CiAgICAgUmVuZGVyVGV4dChET006Ok5vZGVJbXBsKiBub2RlLCBET006OkRPTVN0cmlu
Z0ltcGwgKl9zdHIpOwpAQCAtMTM5LDEyICsxNDksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBwYWludE9iamVjdCggUVBhaW50ZXIgKiwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHgsIGludCB0eSwgUGFpbnRBY3Rpb24gcGFp
bnRQaGFzZSk7CiAKLSAgICB2b2lkIGRlbGV0ZVNsYXZlcyggUmVuZGVyQXJlbmEgKiApOworICAg
IHZvaWQgZGVsZXRlUnVucyggUmVuZGVyQXJlbmEgKiApOwogICAgIHZvaWQgZGV0YWNoKCBSZW5k
ZXJBcmVuYSAqICk7CiAKICAgICBET006OkRPTVN0cmluZyBkYXRhKCkgY29uc3QgeyByZXR1cm4g
c3RyOyB9CiAgICAgRE9NOjpET01TdHJpbmdJbXBsICpzdHJpbmcoKSBjb25zdCB7IHJldHVybiBz
dHI7IH0KIAorICAgIHZpcnR1YWwgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCk7CisK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkge2Fzc2VydChmYWxzZSk7fQogCiAgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQgeCwgaW50IHksIGludCB0eCwg
aW50IHR5KTsKQEAgLTE1Niw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW50IGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0ci0+bDsgfQogICAgIFFDaGFyICp0ZXh0KCkgY29uc3Qg
eyByZXR1cm4gc3RyLT5zOyB9CiAgICAgdW5zaWduZWQgaW50IHN0cmluZ0xlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIHN0ci0+bDsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBsZW5n
dGgoKQotICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihpbnQgeCwgaW50IHksIGludCBmcm9tLCBp
bnQgbGVuLCBpbnQgd2lkdGgsIGJvb2wgcmV2ZXJzZSwgYm9vbCBmaXJzdExpbmUsIGludCBzcGFj
ZUFkZCk7CisgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uKElubGluZUJveCogYm94LCBpbnQgZnJv
bSwgaW50IGxlbiwgYm9vbCByZXZlcnNlLCBpbnQgc3BhY2VBZGQpOwogCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgd2lkdGgodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4sIGNv
bnN0IEZvbnQgKmYpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IHdpZHRoKHVuc2ln
bmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCBib29sIGZpcnN0TGluZSA9IGZhbHNlKSBj
b25zdDsKQEAgLTE3NSw3ICsxODcsNyBAQCBwdWJsaWM6CiAgICAgdXNob3J0IHN0YXJ0TWluKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFydE1pbjsgfQogICAgIHVzaG9ydCBlbmRNaW4oKSBjb25zdCB7
IHJldHVybiBtX2VuZE1pbjsgfQogCi0gICAgLy8gcmV0dXJucyB0aGUgbWluaW11bSB4IHBvc2l0
aW9uIG9mIGFsbCBzbGF2ZXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudC4KKyAgICAvLyByZXR1cm5z
IHRoZSBtaW5pbXVtIHggcG9zaXRpb24gb2YgYWxsIHJ1bnMgcmVsYXRpdmUgdG8gdGhlIHBhcmVu
dC4KICAgICAvLyBkZWZhdWx0cyB0byAwLgogICAgIGludCBtaW5YUG9zKCkgY29uc3Q7CiAKQEAg
LTE5Myw3ICsyMDUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNl
bGVjdGlvblN0YXRlKCkgY29uc3Qge3JldHVybiBtX3NlbGVjdGlvblN0YXRlO30KICAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgcykge21fc2VsZWN0aW9u
U3RhdGUgPSBzOyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1cnNvclBvcyhpbnQgb2Zmc2V0LCBpbnQg
Jl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIGNhcmV0UG9zKGlu
dCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGludCAmX3gsIGludCAmX3ksIGludCAmd2lkdGgsIGlu
dCAmaGVpZ2h0KTsKICAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQgJi8qeFBv
cyovLCBpbnQgJi8qeVBvcyovLCBib29sIGYgPSBmYWxzZSk7CiAgICAgYm9vbCBwb3NPZkNoYXIo
aW50IGNoLCBpbnQgJngsIGludCAmeSk7CiAKQEAgLTIxMCwxNiArMjIyLDI1IEBAIHB1YmxpYzoK
IAogICAgIERPTTo6VGV4dEltcGwgKmVsZW1lbnQoKSBjb25zdAogICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PERPTTo6VGV4dEltcGwqPihSZW5kZXJPYmplY3Q6OmVsZW1lbnQoKSk7IH0KKyAgICAK
KyAgICAvKiogcmV0dXJucyB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlIHRoZSBjYXJldCBvZmZz
ZXQgbWF5IGhhdmUgdG8KKyAgICAgKiBzdGlsbCBwb2ludCB0byBhIHZhbGlkIHBvc2l0aW9uLgor
ICAgICAqLworICAgIGxvbmcgbWluT2Zmc2V0KCkgY29uc3Q7CisgICAgLyoqIHJldHVybnMgdGhl
IGhpZ2hlc3QgcG9zc2libGUgdmFsdWUgdGhlIGNhcmV0IG9mZnNldCBtYXkgaGF2ZSB0bworICAg
ICAqIHN0aWxsIHBvaW50IHRvIGEgdmFsaWQgcG9zaXRpb24uCisgICAgICovCisgICAgbG9uZyBt
YXhPZmZzZXQoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnRUZXh0T3V0bGlu
ZShRUGFpbnRlciAqcCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFFSZWN0ICZwcmV2TGluZSwgY29u
c3QgUVJlY3QgJnRoaXNMaW5lLCBjb25zdCBRUmVjdCAmbmV4dExpbmUpOwogCi0gICAgLy8gRmlu
ZCB0aGUgdGV4dCBzbGF2ZSB0aGF0IGluY2x1ZGVzIHRoZSBjaGFyYWN0ZXIgYXQgQHAgb2Zmc2V0
Ci0gICAgLy8gYW5kIHJldHVybiBwb3MsIHdoaWNoIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hh
ciBpbiB0aGUgc2xhdmUuCi0gICAgVGV4dFNsYXZlICogZmluZFRleHRTbGF2ZSggaW50IG9mZnNl
dCwgaW50ICZwb3MgKTsKKyAgICAvLyBGaW5kIHRoZSB0ZXh0IHJ1biB0aGF0IGluY2x1ZGVzIHRo
ZSBjaGFyYWN0ZXIgYXQgQHAgb2Zmc2V0CisgICAgLy8gYW5kIHJldHVybiBwb3MsIHdoaWNoIGlz
IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhciBpbiB0aGUgcnVuLgorICAgIFRleHRSdW4gKiBmaW5k
VGV4dFJ1biggaW50IG9mZnNldCwgaW50ICZwb3MgKTsKIAogcHJvdGVjdGVkOiAvLyBtZW1iZXJz
Ci0gICAgVGV4dFNsYXZlQXJyYXkgbV9saW5lczsKKyAgICBUZXh0UnVuQXJyYXkgbV9saW5lczsK
ICAgICBET006OkRPTVN0cmluZ0ltcGwgKnN0cjsgLy8KIAogICAgIHNob3J0IG1fbGluZUhlaWdo
dDsKSW5kZXg6IHhtbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUv
a2RlL2tkZWxpYnMva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yMzIKZGlmZiAtdSAtcCAtcjEuMjMyIGRvbV9kb2NpbXBsLmNwcAotLS0geG1sL2RvbV9k
b2NpbXBsLmNwcAk1IEF1ZyAyMDAzIDE4OjIzOjQ0IC0wMDAwCTEuMjMyCisrKyB4bWwvZG9tX2Rv
Y2ltcGwuY3BwCTkgQXVnIDIwMDMgMDI6NDU6MjMgLTAwMDAKQEAgLTE5MTQsNiArMTkxNCwxNSBA
QCBib29sIERvY3VtZW50SW1wbDo6aXNVUkxBbGxvd2VkKGNvbnN0IFFTCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK3ZvaWQgRG9jdW1lbnRJbXBsOjpzZXREZXNpZ25Nb2RlKGJvb2wgYikgeworICAg
IGlmIChtX3ZpZXcpCisgICAgICAgICBtX3ZpZXctPnBhcnQoKS0+c2V0RWRpdGFibGUoYik7Cit9
CisKK2Jvb2wgRG9jdW1lbnRJbXBsOjpkZXNpZ25Nb2RlKCkgY29uc3QgeworICAgIHJldHVybiBt
X3ZpZXcgPyBtX3ZpZXctPnBhcnQoKS0+aXNFZGl0YWJsZSgpIDogZmFsc2U7Cit9CisKIEV2ZW50
SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVFdmVudChjb25zdCBET01TdHJpbmcgJmV2ZW50VHlw
ZSwgaW50ICZleGNlcHRpb25jb2RlKQogewogICAgIGlmIChldmVudFR5cGUgPT0gIlVJRXZlbnRz
IikKSW5kZXg6IHhtbC9kb21fZG9jaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tk
ZS9rZGVsaWJzL2todG1sL3htbC9kb21fZG9jaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjExNApkaWZmIC11IC1wIC1yMS4xMTQgZG9tX2RvY2ltcGwuaAotLS0geG1sL2RvbV9kb2NpbXBs
LmgJMjEgSnVuIDIwMDMgMDk6MTQ6NTMgLTAwMDAJMS4xMTQKKysrIHhtbC9kb21fZG9jaW1wbC5o
CTkgQXVnIDIwMDMgMDI6NDU6MjQgLTAwMDAKQEAgLTMyMSw2ICszMjEsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRUZXh0Q29sb3IoIFFDb2xvciBjb2xvciApIHsgbV90ZXh0Q29sb3IgPSBjb2xv
cjsgfQogICAgIFFDb2xvciB0ZXh0Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb2xvcjsg
fQogCisgICAgdm9pZCBzZXREZXNpZ25Nb2RlKGJvb2wgYik7CisgICAgYm9vbCBkZXNpZ25Nb2Rl
KCkgY29uc3Q7CisKICAgICAvLyBpbnRlcm5hbAogICAgIE5vZGVJbXBsICpmaW5kRWxlbWVudCgg
SWQgaWQgKTsKIApJbmRleDogeG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgxCmRpZmYgLXUgLXAgLXIxLjE4MSBkb21fZWxlbWVudGlt
cGwuY3BwCi0tLSB4bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAkxNyBNYXkgMjAwMyAyMjoxMjo1OSAt
MDAwMAkxLjE4MQorKysgeG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJOSBBdWcgMjAwMyAwMjo0NToy
NCAtMDAwMApAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgImNzcy9jc3NfdmFsdWVpbXBsLmgi
CiAjaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgogI2luY2x1ZGUgImNzcy9jc3Nz
dHlsZXNlbGVjdG9yLmgiCisjaW5jbHVkZSAiY3NzL2Nzc3ZhbHVlcy5oIgorI2luY2x1ZGUgImNz
cy9jc3Nwcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV94bWxpbXBsLmgiCiAKICNpbmNs
dWRlIDxxdGV4dHN0cmVhbS5oPgpAQCAtNTU5LDcgKzU2MSwxMCBAQCB2b2lkIEVsZW1lbnRJbXBs
OjpyZWNhbGNTdHlsZSggU3R5bGVDaGFuCiAKIGJvb2wgRWxlbWVudEltcGw6OmlzU2VsZWN0YWJs
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIE9ubHkgbWFrZSBlZGl0YWJs
ZSBlbGVtZW50cyBzZWxlY3RhYmxlIGlmIGl0cyBwYXJlbnQgZWxlbWVudAorICAgIC8vIGlzIG5v
dCBlZGl0YWJsZS4gRklYTUU6IHRoaXMgaXMgbm90IDEwMCUgcmlnaHQgYXMgbm9uLWVkaXRhYmxl
IGVsZW1lbnRzCisgICAgLy8gd2l0aGluIGVkaXRhYmxlIGVsZW1lbnRzIGFyZSBmb2N1c2FibGUg
dG9vLgorICAgIHJldHVybiBjb250ZW50RWRpdGFibGUoKSAmJiAoIXBhcmVudE5vZGUoKSB8fCAh
cGFyZW50Tm9kZSgpLT5jb250ZW50RWRpdGFibGUoKSk7CiB9CiAKIC8vIERPTSBTZWN0aW9uIDEu
MS4xCkBAIC02MjEsNiArNjI2LDM3IEBAIHZvaWQgRWxlbWVudEltcGw6OmRpc3BhdGNoQXR0ckFk
ZGl0aW9uRXYKICAgIC8vaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAgLy9kaXNwYXRjaEV2ZW50
KG5ldyBNdXRhdGlvbkV2ZW50SW1wbChFdmVudEltcGw6OkRPTUFUVFJNT0RJRklFRF9FVkVOVCx0
cnVlLGZhbHNlLGF0dHIsYXR0ci0+dmFsdWUoKSwKICAgIC8vYXR0ci0+dmFsdWUoKSxnZXREb2N1
bWVudCgpLT5hdHRyTmFtZShhdHRyLT5pZCgpKSxNdXRhdGlvbkV2ZW50OjpBRERJVElPTiksZXhj
ZXB0aW9uY29kZSk7Cit9CisKK2Jvb2wgRWxlbWVudEltcGw6OmNvbnRlbnRFZGl0YWJsZSgpIGNv
bnN0IHsKKyNpZiAwCisgICAgRE9NOjpDU1NQcmltaXRpdmVWYWx1ZUltcGwgKnZhbCA9IHN0YXRp
Y19jYXN0PERPTTo6Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICo+CisgICAgCQkoY29uc3RfY2FzdDxF
bGVtZW50SW1wbCAqPih0aGlzKS0+c3R5bGVSdWxlcygpCisJCS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NfUFJPUF9fS09OUV9VU0VSX0lOUFVUKSk7CisvLyAgICBrZERlYnVnKCkgPDwgInZhbCIg
PDwgdmFsIDw8IGVuZGw7CisgICAgcmV0dXJuIHZhbCA/IHZhbC0+Z2V0SWRlbnQoKSA9PSBDU1Nf
VkFMX0VOQUJMRUQgOiBmYWxzZTsKKyNlbmRpZgorICAgIHJldHVybiBOb2RlSW1wbDo6Y29udGVu
dEVkaXRhYmxlKCk7Cit9CisKK3ZvaWQgRWxlbWVudEltcGw6OnNldENvbnRlbnRFZGl0YWJsZShi
b29sIGVuYWJsZWQpIHsKKyAgICAvLyBGSVhNRTogdGhlIGFwcHJvYWNoIGlzIGZsYXdlZCwgYmV0
dGVyIHVzZSBhbiBlbnVtIGluc3RlYWQgb2YgYm9vbAorICAgIGludCB2YWx1ZTsKKyAgICBpZiAo
ZW5hYmxlZCkKKyAgICAgICAgdmFsdWUgPSBDU1NfVkFMX0VOQUJMRUQ7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIEludGVsbGlnZW50bHkgdXNlICJub25lIiBvciAiZGlzYWJsZWQiLCBkZXBlbmRp
bmcgb24gdGhlIHR5cGUgb2YKKyAgICAgICAgLy8gZWxlbWVudAorCS8vIEZJWE1FOiBpbnRlbGxp
Z2VuY2Ugbm90IGltcGwnZCB5ZXQKKwl2YWx1ZSA9IENTU19WQUxfTk9ORTsKKworICAgICAgICAv
LyBGSVhNRTogcmVzZXQgY2FyZXQgaWYgaXQgaXMgaW4gdGhpcyBub2RlIG9yIGEgY2hpbGQKKyAg
ICB9LyplbmQgaWYqLworICAgIC8vIEZJWE1FOiB1c2UgYWRkQ1NTUHJvcGVydHkgd2hlbiBJIGdl
dCBwZXJtaXNzaW9uIHRvIG1vdmUgaXQgaGVyZQorLy8gICAga2REZWJ1Zyg2MDAwKSA8PCAiQ1NT
X1BST1BfX0tPTlFfVVNFUl9JTlBVVDogIjw8IHZhbHVlIDw8IGVuZGw7CisgICAgc3R5bGVSdWxl
cygpLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9fS09OUV9VU0VSX0lOUFVULCB2YWx1ZSwgZmFsc2Us
IHRydWUpOworICAgIHNldENoYW5nZWQoKTsKKwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCklu
ZGV4OiB4bWwvZG9tX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2Rl
L2tkZWxpYnMva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEwOQpkaWZmIC11IC1wIC1yMS4xMDkgZG9tX2VsZW1lbnRpbXBsLmgKLS0tIHhtbC9kb21f
ZWxlbWVudGltcGwuaAkyNyBKdW4gMjAwMyAxNjoyNzozMSAtMDAwMAkxLjEwOQorKysgeG1sL2Rv
bV9lbGVtZW50aW1wbC5oCTkgQXVnIDIwMDMgMDI6NDU6MjUgLTAwMDAKQEAgLTE5NSw2ICsxOTUs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwYXRjaEF0dHJSZW1vdmFsRXZlbnQoTm9kZUltcGw6
OklkIGlkLCBET01TdHJpbmdJbXBsICp2YWx1ZSk7CiAgICAgdm9pZCBkaXNwYXRjaEF0dHJBZGRp
dGlvbkV2ZW50KE5vZGVJbXBsOjpJZCBpZCwgRE9NU3RyaW5nSW1wbCAqdmFsdWUpOwogCisgICAg
dmlydHVhbCBib29sIGNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVu
dEVkaXRhYmxlKGJvb2wgZW5hYmxlZCk7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGNyZWF0ZUF0
dHJpYnV0ZU1hcCgpIGNvbnN0OwogICAgIHZvaWQgY3JlYXRlRGVjbCgpOwpJbmRleDogeG1sL2Rv
bV9ub2RlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0
bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEyCmRpZmYg
LXUgLXAgLXIxLjIxMiBkb21fbm9kZWltcGwuY3BwCi0tLSB4bWwvZG9tX25vZGVpbXBsLmNwcAky
MiBKdW4gMjAwMyAxODoxNDo1OCAtMDAwMAkxLjIxMgorKysgeG1sL2RvbV9ub2RlaW1wbC5jcHAJ
OSBBdWcgMjAwMyAwMjo0NToyNiAtMDAwMApAQCAtMzE3LDEwICszMTcsMTAgQEAgUVN0cmluZyBO
b2RlSW1wbDo6cmVjdXJzaXZlX3RvSFRNTChib29sIAogICAgIHJldHVybiBtZTsKIH0KIAotdm9p
ZCBOb2RlSW1wbDo6Z2V0Q3Vyc29yKGludCBvZmZzZXQsIGludCAmX3gsIGludCAmX3ksIGludCAm
aGVpZ2h0KQordm9pZCBOb2RlSW1wbDo6Z2V0Q2FyZXQoaW50IG9mZnNldCwgYm9vbCBvdmVycmlk
ZSwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpCiB7Ci0gICAgaWYo
bV9yZW5kZXIpIG1fcmVuZGVyLT5jdXJzb3JQb3Mob2Zmc2V0LCBfeCwgX3ksIGhlaWdodCk7Ci0g
ICAgZWxzZSBfeCA9IF95ID0gaGVpZ2h0ID0gLTE7CisgICAgaWYobV9yZW5kZXIpIG1fcmVuZGVy
LT5jYXJldFBvcyhvZmZzZXQsIG92ZXJyaWRlLCBfeCwgX3ksIHdpZHRoLCBoZWlnaHQpOworICAg
IGVsc2UgX3ggPSBfeSA9IGhlaWdodCA9IC0xLCB3aWR0aCA9IDE7CiB9CiAKIFFSZWN0IE5vZGVJ
bXBsOjpnZXRSZWN0KCkgY29uc3QKQEAgLTk1Myw2ICs5NTMsNzAgQEAgUmVuZGVyT2JqZWN0ICog
Tm9kZUltcGw6Om5leHRSZW5kZXJlcigpCiAgICAgICAgICAgICByZXR1cm4gbi0+cmVuZGVyZXIo
KTsKICAgICB9CiAgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgTm9kZUltcGw6OmNvbnRlbnRFZGl0
YWJsZSgpIGNvbnN0IHsKKyAgICBSZW5kZXJPYmplY3QgKnIgPSByZW5kZXJlcigpOworICAgIGlm
ICghcikgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByLT5zdHlsZSgpLT51c2VySW5wdXQoKSA9
PSBVSV9FTkFCTEVEOworfQorCitOb2RlSW1wbCAqTm9kZUltcGw6OnByZXZMZWFmTm9kZSgpIGNv
bnN0IHsKKyAgY29uc3QgTm9kZUltcGwgKnIgPSB0aGlzOworICBjb25zdCBOb2RlSW1wbCAqbiA9
IGZpcnN0Q2hpbGQoKTsKKyAgaWYgKG4pIHsKKyAgICB3aGlsZSAobikgeyByID0gbjsgbiA9IG4t
PmZpcnN0Q2hpbGQoKTsgfQorICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGVJbXBsICo+KHIpOwor
ICB9LyplbmQgaWYqLworICBuID0gci0+cHJldmlvdXNTaWJsaW5nKCk7CisgIGlmIChuKSB7Cisg
ICAgciA9IG47CisgICAgd2hpbGUgKG4pIHsgciA9IG47IG4gPSBuLT5maXJzdENoaWxkKCk7IH0K
KyAgICByZXR1cm4gY29uc3RfY2FzdDxOb2RlSW1wbCAqPihyKTsKKyAgfS8qZW5kIGlmKi8KKwor
ICBuID0gci0+cGFyZW50Tm9kZSgpOworICB3aGlsZSAobikgeworICAgIHIgPSBuOworICAgIG4g
PSByLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBpZiAobikgeworICAgICAgciA9IG47CisgICAg
ICBuID0gci0+bGFzdENoaWxkKCk7CisgICAgICB3aGlsZSAobikgeyByID0gbjsgbiA9IG4tPmxh
c3RDaGlsZCgpOyB9CisgICAgICByZXR1cm4gY29uc3RfY2FzdDxOb2RlSW1wbCAqPihyKTsKKyAg
ICB9LyplbmQgaWYqLworICAgIG4gPSByLT5wYXJlbnROb2RlKCk7CisgIH0vKndlbmQqLworICBy
ZXR1cm4gMDsKK30KKworTm9kZUltcGwgKk5vZGVJbXBsOjpuZXh0TGVhZk5vZGUoKSBjb25zdCB7
CisgIGNvbnN0IE5vZGVJbXBsICpyID0gdGhpczsKKyAgY29uc3QgTm9kZUltcGwgKm4gPSBmaXJz
dENoaWxkKCk7CisgIGlmIChuKSB7CisgICAgd2hpbGUgKG4pIHsgciA9IG47IG4gPSBuLT5maXJz
dENoaWxkKCk7IH0KKyAgICByZXR1cm4gY29uc3RfY2FzdDxOb2RlSW1wbCAqPihyKTsKKyAgfS8q
ZW5kIGlmKi8KKyAgbiA9IHItPm5leHRTaWJsaW5nKCk7CisgIGlmIChuKSB7CisgICAgciA9IG47
CisgICAgd2hpbGUgKG4pIHsgciA9IG47IG4gPSBuLT5maXJzdENoaWxkKCk7IH0KKyAgICByZXR1
cm4gY29uc3RfY2FzdDxOb2RlSW1wbCAqPihyKTsKKyAgfS8qZW5kIGlmKi8KKworICBuID0gci0+
cGFyZW50Tm9kZSgpOworICB3aGlsZSAobikgeworICAgIHIgPSBuOworICAgIG4gPSByLT5uZXh0
U2libGluZygpOworICAgIGlmIChuKSB7CisgICAgICByID0gbjsKKyAgICAgIG4gPSByLT5maXJz
dENoaWxkKCk7CisgICAgICB3aGlsZSAobikgeyByID0gbjsgbiA9IG4tPmZpcnN0Q2hpbGQoKTsg
fQorICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Tm9kZUltcGwgKj4ocik7CisgICAgfS8qZW5kIGlm
Ki8KKyAgICBuID0gci0+cGFyZW50Tm9kZSgpOworICB9Lyp3ZW5kKi8KKyAgcmV0dXJuIDA7CiB9
CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogeG1sL2RvbV9ub2RlaW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3htbC9kb21fbm9kZWltcGwuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDUKZGlmZiAtdSAtcCAtcjEuMTQ1IGRvbV9ub2RlaW1w
bC5oCi0tLSB4bWwvZG9tX25vZGVpbXBsLmgJMjIgSnVuIDIwMDMgMTg6MTQ6NTggLTAwMDAJMS4x
NDUKKysrIHhtbC9kb21fbm9kZWltcGwuaAk5IEF1ZyAyMDAzIDAyOjQ1OjI3IC0wMDAwCkBAIC0x
MTEsNiArMTExLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1hNTEVsZW1lbnROb2Rl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNHZW5lcmljRm9y
bUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjb250
YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgY29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAKICAgICAvLyBoZWxwZXIgZnVuY3Rpb25z
IG5vdCBiZWluZyBwYXJ0IG9mIHRoZSBET00KICAgICAvLyBBdHRlbnRpb246IHRoZXkgYXNzdW1l
IHRoYXQgdGhlIGNhbGxlciBkaWQgdGhlIGNvbnNpc3RlbmN5IGNoZWNraW5nIQpAQCAtMTIwLDYg
KzEyMSwyNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEZpcnN0Q2hpbGQoTm9kZUlt
cGwgKmNoaWxkKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdENoaWxkKE5vZGVJbXBsICpjaGls
ZCk7CiAKKyAgICAvKiogKE5vdCBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBET00pCisgICAgICogUmV0
dXJucyB0aGUgbmV4dCBsZWFmIG5vZGUuCisgICAgICoKKyAgICAgKiBVc2luZyB0aGlzIGZ1bmN0
aW9uIGRlbGl2ZXJzIGxlYWYgbm9kZXMgYXMgaWYgdGhlIHdob2xlIERPTSB0cmVlCisgICAgICog
d2VyZSBhIGxpbmVhciBjaGFpbiBvZiBpdHMgbGVhZiBub2Rlcy4KKyAgICAgKiBAcmV0dXJuIG5l
eHQgbGVhZiBub2RlIG9yIDAgaWYgdGhlcmUgYXJlIG5vIG1vcmUuCisgICAgICovCisgICAgTm9k
ZUltcGwgKm5leHRMZWFmTm9kZSgpIGNvbnN0OworCisgICAgLyoqIChOb3QgcGFydCBvZiB0aGUg
b2ZmaWNpYWwgRE9NKQorICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIGxlYWYgbm9kZS4KKyAg
ICAgKgorICAgICAqIFVzaW5nIHRoaXMgZnVuY3Rpb24gZGVsaXZlcnMgbGVhZiBub2RlcyBhcyBp
ZiB0aGUgd2hvbGUgRE9NIHRyZWUKKyAgICAgKiB3ZXJlIGEgbGluZWFyIGNoYWluIG9mIGl0cyBs
ZWFmIG5vZGVzLgorICAgICAqIEByZXR1cm4gcHJldmlvdXMgbGVhZiBub2RlIG9yIDAgaWYgdGhl
cmUgYXJlIG5vIG1vcmUuCisgICAgICovCisgICAgTm9kZUltcGwgKnByZXZMZWFmTm9kZSgpIGNv
bnN0OworCiAgICAgLy8gdXNlZCBieSB0aGUgcGFyc2VyLiBEb2Vzbid0IGRvIGFzIG1hbnkgZXJy
b3IgY2hlY2tpbmdzIGFzCiAgICAgLy8gYXBwZW5kQ2hpbGQoKSwgYW5kIHJldHVybnMgdGhlIG5v
ZGUgaW50byB3aGljaCB3aWxsIGJlIHBhcnNlZCBuZXh0LgogICAgIHZpcnR1YWwgTm9kZUltcGwg
KmFkZENoaWxkKE5vZGVJbXBsICpuZXdDaGlsZCk7CkBAIC0yMDMsNyArMjIyLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgUVN0cmluZyB0b0hUTUwoKSBjb25zdDsKICAgICBRU3RyaW5nIHJlY3Vy
c2l2ZV90b0hUTUwoYm9vbCBzdGFydCA9IGZhbHNlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBnZXRDdXJzb3IoaW50IG9mZnNldCwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZoZWlnaHQpOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRDYXJldChpbnQgb2Zmc2V0LCBib29sIG92ZXJyaWRlLCBpbnQg
Jl94LCBpbnQgJl95LCBpbnQgJndpZHRoLCBpbnQgJmhlaWdodCk7CiAgICAgdmlydHVhbCBRUmVj
dCBnZXRSZWN0KCkgY29uc3Q7CiAKICAgICBlbnVtIFN0eWxlQ2hhbmdlIHsgTm9DaGFuZ2UsIE5v
SW5oZXJpdCwgSW5oZXJpdCwgRm9yY2UgfTsKQEAgLTI3Miw2ICsyOTEsMjEgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNBbmNlc3RvciggTm9kZUltcGwgKm90aGVyICk7CiAgICAgdmlydHVhbCBib29s
IGNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICk7CiAKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBtaW5pbXVtIGNhcmV0IG9mZnNldCB0aGF0IGlzIGFsbG93ZWQgZm9yIHRoaXMg
bm9kZS4KKyAgICAgKgorICAgICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhbHdheXMg
cmV0dXJucyAwLiBUZXh0dWFsIGNoaWxkIG5vZGVzCisgICAgICogbWF5IHJldHVybiBvdGhlciB2
YWx1ZXMuCisgICAgICovCisgICAgdmlydHVhbCBsb25nIG1pbk9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0gLy8gQXJyZ2ghIFlvdSdkIHRoaW5rICpldmVyeSogb2Zmc2V0IHN0YXJ0cyBhdCB6
ZXJvLCBidXQgbG9vLCB0aGVyZWZvcmUgd2UgbmVlZCB0aGlzIG1ldGhvZAorICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIG1heGltdW0gY2FyZXQgb2Zmc2V0IHRoYXQgaXMgYWxsb3dlZCBmb3Ig
dGhpcyBub2RlLgorICAgICAqCisgICAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFs
d2F5cyByZXR1cm5zIDEuIFRleHR1YWwgY2hpbGQgbm9kZXMKKyAgICAgKiByZXR1cm4gdGhlIGNo
YXJhY3RlciBjb3VudCBpbnN0ZWFkLgorICAgICAqLworICAgIHZpcnR1YWwgbG9uZyBtYXhPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiAxOyB9CisKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
ICAgIC8vIEludGVncmF0aW9uIHdpdGggcmVuZGVyaW5nIHRyZWUKIApAQCAtMjg5LDcgKzMyMyw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAKICAgICB2b2lkIGNsb3Nl
UmVuZGVyZXIoKTsKLSAgICAKKwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8g
TWV0aG9kcyBmb3IgbWFpbnRhaW5pbmcgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50IGJldHdlZW4g
aGlzdG9yeSBuYXZpZ2F0aW9uCiAKSW5kZXg6IHhtbC9kb21fdGV4dGltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3htbC9kb21fdGV4dGltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk0CmRpZmYgLXUgLXAgLXIxLjk0IGRvbV90ZXh0aW1w
bC5jcHAKLS0tIHhtbC9kb21fdGV4dGltcGwuY3BwCTI3IEphbiAyMDAzIDA3OjMzOjUyIC0wMDAw
CTEuOTQKKysrIHhtbC9kb21fdGV4dGltcGwuY3BwCTkgQXVnIDIwMDMgMDI6NDU6MjcgLTAwMDAK
QEAgLTIyOSw2ICsyMjksMTggQEAgdm9pZCBDaGFyYWN0ZXJEYXRhSW1wbDo6Y2hlY2tDaGFyRGF0
YU9wZQogICAgIH0KIH0KIAorbG9uZyBDaGFyYWN0ZXJEYXRhSW1wbDo6bWluT2Zmc2V0KCkgY29u
c3QgeworICBSZW5kZXJUZXh0ICpyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJl
cigpKTsKKyAgaWYgKCFyIHx8ICFyLT5pc1RleHQoKSkgcmV0dXJuIDA7CisgIHJldHVybiByLT5t
aW5PZmZzZXQoKTsKK30KKworbG9uZyBDaGFyYWN0ZXJEYXRhSW1wbDo6bWF4T2Zmc2V0KCkgY29u
c3QgeworICBSZW5kZXJUZXh0ICpyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJl
cigpKTsKKyAgaWYgKCFyIHx8ICFyLT5pc1RleHQoKSkgcmV0dXJuIChsb25nKWxlbmd0aCgpOwor
ICByZXR1cm4gci0+bWF4T2Zmc2V0KCk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBE
T01TdHJpbmcgQ29tbWVudEltcGw6Om5vZGVOYW1lKCkgY29uc3QKSW5kZXg6IHhtbC9kb21fdGV4
dGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC94bWwv
ZG9tX3RleHRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTcKZGlmZiAtdSAtcCAtcjEu
NTcgZG9tX3RleHRpbXBsLmgKLS0tIHhtbC9kb21fdGV4dGltcGwuaAkxMSBGZWIgMjAwMyAwMTo0
ODo1MSAtMDAwMAkxLjU3CisrKyB4bWwvZG9tX3RleHRpbXBsLmgJOSBBdWcgMjAwMyAwMjo0NToy
NyAtMDAwMApAQCAtNjYsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAgRE9NU3RyaW5nIGRhdGEoKSBj
b25zdCB7IHJldHVybiBzdHI7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBjaGVja0NoYXJEYXRhT3Bl
cmF0aW9uKCBjb25zdCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50ICZleGNlcHRpb25jb2RlICk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgIHZpcnR1YWwgbG9uZyBtaW5PZmZzZXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGxvbmcgbWF4T2Zmc2V0KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAg
ICAvLyBub3RlOiBzaW5jZSBET01TdHJpbmdzIGFyZSBzaGFyZWQsIHN0ciBzaG91bGQgYWx3YXlz
IGJlIGNvcGllZCB3aGVuIG1ha2luZwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2269</attachid>
            <date>2003-08-18 23:55:05 +0000</date>
            <delta_ts>2003-08-18 23:55:05 +0000</delta_ts>
            <desc>quite complete caret navigation</desc>
            <filename>khtml_navigation_13.diff</filename>
            <type>text/plain</type>
            <size>291228</size>
            <attacher name="Leo Savernik">l.savernik</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sX3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVs
aWJzL2todG1sL2todG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg3MgpkaWZm
IC11IC1wIC1yMS44NzIga2h0bWxfcGFydC5jcHAKLS0tIGtodG1sX3BhcnQuY3BwCTExIEF1ZyAy
MDAzIDE1OjA0OjQ1IC0wMDAwCTEuODcyCisrKyBraHRtbF9wYXJ0LmNwcAkxOCBBdWcgMjAwMyAy
MTo1MjoyMSAtMDAwMApAQCAtMTUyNSw2ICsxNTI1LDkgQEAgdm9pZCBLSFRNTFBhcnQ6OmJlZ2lu
KCBjb25zdCBLVVJMICZ1cmwsIAogICAgIGQtPm1fZG9jID0gRE9NSW1wbGVtZW50YXRpb25JbXBs
OjppbnN0YW5jZSgpLT5jcmVhdGVEb2N1bWVudCggZC0+bV92aWV3ICk7CiAgIGVsc2UKICAgICBk
LT5tX2RvYyA9IERPTUltcGxlbWVudGF0aW9uSW1wbDo6aW5zdGFuY2UoKS0+Y3JlYXRlSFRNTERv
Y3VtZW50KCBkLT5tX3ZpZXcgKTsKKyNpZm5kZWYgS0hUTUxfTk9fQ0FSRVQKKy8vICBkLT5tX3Zp
ZXctPmluaXRDYXJldCgpOworI2VuZGlmCiAKICAgZC0+bV9kb2MtPnJlZigpOwogICBkLT5tX2Rv
Yy0+c2V0VVJMKCBtX3VybC51cmwoKSApOwpAQCAtMjA5OSw2ICsyMTAyLDY3IEBAIHZvaWQgS0hU
TUxQYXJ0OjpzZXRPbmx5TG9jYWxSZWZlcmVuY2VzKGIKICAgZC0+bV9vbmx5TG9jYWxSZWZlcmVu
Y2VzID0gZW5hYmxlOwogfQogCit2b2lkIEtIVE1MUGFydFByaXZhdGU6OnNldEZsYWdSZWN1cnNp
dmVseSgKKwlib29sIEtIVE1MUGFydFByaXZhdGU6OipmbGFnLCBib29sIHZhbHVlKQoreworICAv
LyBmaXJzdCBzZXQgaXQgb24gdGhlIGN1cnJlbnQgb25lCisgIHRoaXMtPipmbGFnID0gdmFsdWU7
CisKKyAgLy8gZGVzY2VuZCBpbnRvIGNoaWxkIGZyYW1lcyByZWN1cnNpdmVseQorICBRVmFsdWVM
aXN0PGtodG1sOjpDaGlsZEZyYW1lPjo6SXRlcmF0b3IgaXQgPSBtX2ZyYW1lcy5iZWdpbigpOwor
ICBmb3IgKDsgaXQgIT0gbV9mcmFtZXMuZW5kKCk7ICsraXQpIHsKKyAgICBLSFRNTFBhcnQgKnBh
cnQgPSBzdGF0aWNfY2FzdDxLSFRNTFBhcnQgKj4oKEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICopKCpp
dCkubV9wYXJ0KTsKKyAgICBpZiAocGFydC0+aW5oZXJpdHMoIktIVE1MUGFydCIpKQorICAgICAg
cGFydC0+ZC0+c2V0RmxhZ1JlY3Vyc2l2ZWx5KGZsYWcsIHZhbHVlKTsKKyAgfS8qbmV4dCBpdCov
CisKKyAgLy8gZG8gdGhlIHNhbWUgYWdhaW4gZm9yIG9iamVjdHMKKyAgaXQgPSBtX29iamVjdHMu
YmVnaW4oKTsKKyAgZm9yICg7IGl0ICE9IG1fb2JqZWN0cy5lbmQoKTsgKytpdCkgeworICAgIEtI
VE1MUGFydCAqcGFydCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCAqPigoS1BhcnRzOjpSZWFkT25s
eVBhcnQgKikoKml0KS5tX3BhcnQpOworICAgIGlmIChwYXJ0LT5pbmhlcml0cygiS0hUTUxQYXJ0
IikpCisgICAgICBwYXJ0LT5kLT5zZXRGbGFnUmVjdXJzaXZlbHkoZmxhZywgdmFsdWUpOworICB9
LypuZXh0IGl0Ki8KK30KKwordm9pZCBLSFRNTFBhcnQ6OnNldENhcmV0TW9kZShib29sIGVuYWJs
ZSkKK3sKKyNpZm5kZWYgS0hUTUxfTk9fQ0FSRVQKKyAgZC0+c2V0RmxhZ1JlY3Vyc2l2ZWx5KCZL
SFRNTFBhcnRQcml2YXRlOjptX2NhcmV0TW9kZSwgZW5hYmxlKTsKKyAgLy8gRklYTUU6IHRoaXMg
d29uJ3Qgd29yayBvbiBmcmFtZXMgYXMgZXhwZWN0ZWQKKyAgaWYgKCFpc0VkaXRhYmxlKCkpIHsK
KyAgICBpZiAoZW5hYmxlKQorICAgICAgdmlldygpLT5pbml0Q2FyZXQoKTsKKyAgICBlbHNlCisg
ICAgICB2aWV3KCktPmNhcmV0T2ZmKCk7CisgIH0vKmVuZCBpZiovCisjZW5kaWYgLy8gS0hUTUxf
Tk9fQ0FSRVQKK30KKworYm9vbCBLSFRNTFBhcnQ6OmlzQ2FyZXRNb2RlKCkgY29uc3QKK3sKKyAg
cmV0dXJuIGQtPm1fY2FyZXRNb2RlOworfQorCit2b2lkIEtIVE1MUGFydDo6c2V0RWRpdGFibGUo
Ym9vbCBlbmFibGUpCit7CisjaWZuZGVmIEtIVE1MX05PX0NBUkVUCisgIGQtPnNldEZsYWdSZWN1
cnNpdmVseSgmS0hUTUxQYXJ0UHJpdmF0ZTo6bV9kZXNpZ25Nb2RlLCBlbmFibGUpOworICAvLyBG
SVhNRTogdGhpcyB3b24ndCB3b3JrIG9uIGZyYW1lcyBhcyBleHBlY3RlZAorICBpZiAoIWlzQ2Fy
ZXRNb2RlKCkpIHsKKyAgICBpZiAoZW5hYmxlKQorICAgICAgdmlldygpLT5pbml0Q2FyZXQoKTsK
KyAgICBlbHNlCisgICAgICB2aWV3KCktPmNhcmV0T2ZmKCk7CisgIH0vKmVuZCBpZiovCisjZW5k
aWYgLy8gS0hUTUxfTk9fQ0FSRVQKK30KKworYm9vbCBLSFRNTFBhcnQ6OmlzRWRpdGFibGUoKSBj
b25zdAoreworICByZXR1cm4gZC0+bV9kZXNpZ25Nb2RlOworfQorCiB2b2lkIEtIVE1MUGFydDo6
ZmluZFRleHRCZWdpbigpCiB7CiAgIGQtPm1fZmluZFBvcyA9IC0xOwpAQCAtMjUyMyw3ICsyNTg3
LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnNsb3RIaWdobGlnaHQoIGNvbnN0IFFTdAogICAgICAgewog
ICAgICAgICBpbnQgZHVtbXk7CiAgICAgICAgIHN0YXRpY19jYXN0PGtodG1sOjpSZW5kZXJUZXh0
ICo+KG5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgLT5jdXJzb3JQb3MoIGQtPm1fc3RhcnRP
ZmZzZXQsIHgsIHksIGR1bW15ICk7IC8vIG1vcmUgcHJlY2lzZSB0aGFuIHBvc09mQ2hhcgorICAg
ICAgICAgIC0+Y2FyZXRQb3MoIGQtPm1fc3RhcnRPZmZzZXQsIGZhbHNlLCB4LCB5LCBkdW1teSwg
ZHVtbXkgKTsgLy8gbW9yZSBwcmVjaXNlIHRoYW4gcG9zT2ZDaGFyCiAgICAgICAgIC8va2REZWJ1
Zyg2MDUwKSA8PCAidG9wbGVmdDogIiA8PCB4IDw8ICIsIiA8PCB5IDw8IGVuZGw7CiAgICAgICAg
IGlmICggeCAhPSAtMSB8fCB5ICE9IC0xICkKICAgICAgICAgewpAQCAtMjU2OCw5ICsyNjMyLDkg
QEAgdm9pZCBLSFRNTFBhcnQ6OnNsb3RIaWdobGlnaHQoIGNvbnN0IFFTdAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGQtPm1fc2VsZWN0aW9uRW5kLmhhbmRsZSgpLCBkLT5tX2VuZE9mZnNl
dCApOwogICAgIGlmIChkLT5tX3NlbGVjdGlvbkVuZC5oYW5kbGUoKS0+cmVuZGVyZXIoKSApCiAg
ICAgewotICAgICAgaW50IHgsIHksIGhlaWdodDsKKyAgICAgIGludCB4LCB5LCBoZWlnaHQsIGR1
bW15OwogICAgICAgc3RhdGljX2Nhc3Q8a2h0bWw6OlJlbmRlclRleHQgKj4oZC0+bV9zZWxlY3Rp
b25FbmQuaGFuZGxlKCktPnJlbmRlcmVyKCkpCi0gICAgICAgICAgLT5jdXJzb3JQb3MoIGQtPm1f
ZW5kT2Zmc2V0LCB4LCB5LCBoZWlnaHQgKTsgLy8gbW9yZSBwcmVjaXNlIHRoYW4gcG9zT2ZDaGFy
CisgICAgICAgICAgLT5jYXJldFBvcyggZC0+bV9lbmRPZmZzZXQsIGZhbHNlLCB4LCB5LCBkdW1t
eSwgaGVpZ2h0ICk7IC8vIG1vcmUgcHJlY2lzZSB0aGFuIHBvc09mQ2hhcgogICAgICAgLy9rZERl
YnVnKDYwNTApIDw8ICJib3R0b21yaWdodDogIiA8PCB4IDw8ICIsIiA8PCB5K2hlaWdodCA8PCBl
bmRsOwogICAgICAgaWYgKCB4ICE9IC0xIHx8IHkgIT0gLTEgKQogICAgICAgewpAQCAtMjczNiwx
OCArMjgwMCwzMiBAQCB2b2lkIEtIVE1MUGFydDo6c2V0U2VsZWN0aW9uKCBjb25zdCBET006CiAg
ICAgZC0+bV9lbmRPZmZzZXQgPSByLmVuZE9mZnNldCgpOwogICAgIGQtPm1fZG9jLT5zZXRTZWxl
Y3Rpb24oZC0+bV9zZWxlY3Rpb25TdGFydC5oYW5kbGUoKSxkLT5tX3N0YXJ0T2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9zZWxlY3Rpb25FbmQuaGFuZGxlKCksZC0+bV9l
bmRPZmZzZXQpOworI2lmbmRlZiBLSFRNTF9OT19DQVJFVAorICAgIGJvb2wgdiA9IGQtPm1fdmll
dy0+cGxhY2VDYXJldCgpOworICAgIGVtaXRDYXJldFBvc2l0aW9uQ2hhbmdlZCh2ID8gZC0+Y2Fy
ZXROb2RlKCkgOiAwLCBkLT5jYXJldE9mZnNldCgpKTsKKyNlbmRpZgogfQogCiB2b2lkIEtIVE1M
UGFydDo6c2xvdENsZWFyU2VsZWN0aW9uKCkKIHsKICAgICBib29sIGhhZFNlbGVjdGlvbiA9IGhh
c1NlbGVjdGlvbigpOworI2lmbmRlZiBLSFRNTF9OT19DQVJFVAorICAgIGtkRGVidWcoNjAwMCkg
PDwgImQtPm1fc2VsZWN0aW9uU3RhcnQgIiA8PCBkLT5tX3NlbGVjdGlvblN0YXJ0LmhhbmRsZSgp
CisgICAgCQk8PCAiIGQtPm1fc2VsZWN0aW9uRW5kICIgPDwgZC0+bV9zZWxlY3Rpb25FbmQuaGFu
ZGxlKCkgPDwgZW5kbDsKKyAgICAvLyBub3RoaW5nLCBsZWF2ZSBzZWxlY3Rpb24gcGFyYW1ldGVy
cyBhcyBpcworI2Vsc2UKICAgICBkLT5tX3NlbGVjdGlvblN0YXJ0ID0gMDsKICAgICBkLT5tX3N0
YXJ0T2Zmc2V0ID0gMDsKICAgICBkLT5tX3NlbGVjdGlvbkVuZCA9IDA7CiAgICAgZC0+bV9lbmRP
ZmZzZXQgPSAwOworI2VuZGlmCiAgICAgaWYgKCBkLT5tX2RvYyApIGQtPm1fZG9jLT5jbGVhclNl
bGVjdGlvbigpOwogICAgIGlmICggaGFkU2VsZWN0aW9uICkKICAgICAgIGVtaXRTZWxlY3Rpb25D
aGFuZ2VkKCk7CisjaWZuZGVmIEtIVE1MX05PX0NBUkVUCisgICAgYm9vbCB2ID0gZC0+bV92aWV3
LT5wbGFjZUNhcmV0KCk7CisgICAgZW1pdENhcmV0UG9zaXRpb25DaGFuZ2VkKHYgPyBkLT5jYXJl
dE5vZGUoKSA6IDAsIGQtPmNhcmV0T2Zmc2V0KCkpOworI2VuZGlmCiB9CiAKIHZvaWQgS0hUTUxQ
YXJ0OjpvdmVyVVJMKCBjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJnRhcmdldCwg
Ym9vbCAvKnNoaWZ0UHJlc3NlZCovICkKQEAgLTQ3NzEsNyArNDg0OSw2IEBAIHZvaWQgS0hUTUxQ
YXJ0OjpraHRtbE1vdXNlUHJlc3NFdmVudCgga2gKICAgICAgICAgICBpbm5lck5vZGUuaGFuZGxl
KCktPnJlbmRlcmVyKCktPmNoZWNrU2VsZWN0aW9uUG9pbnQoIGV2ZW50LT54KCksIGV2ZW50LT55
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBldmVudC0+YWJzWCgpLWlubmVyTm9kZS5oYW5kbGUoKS0+cmVuZGVyZXIoKS0+
eFBvcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnQtPmFic1koKS1pbm5lck5vZGUuaGFuZGxlKCktPnJlbmRlcmVy
KCktPnlQb3MoKSwgbm9kZSwgb2Zmc2V0KTsKLQogICAgICAgICAgIGQtPm1fc2VsZWN0aW9uU3Rh
cnQgPSBub2RlOwogICAgICAgICAgIGQtPm1fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAg
ICAgLy9pZiAoIG5vZGUgKQpAQCAtNDc4MiwxMSArNDg1OSwxOSBAQCB2b2lkIEtIVE1MUGFydDo6
a2h0bWxNb3VzZVByZXNzRXZlbnQoIGtoCiAgICAgICAgICAgZC0+bV9zZWxlY3Rpb25FbmQgPSBk
LT5tX3NlbGVjdGlvblN0YXJ0OwogICAgICAgICAgIGQtPm1fZW5kT2Zmc2V0ID0gZC0+bV9zdGFy
dE9mZnNldDsKICAgICAgICAgICBkLT5tX2RvYy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyNpZm5kZWYg
S0hUTUxfTk9fQ0FSRVQKKyAgICAgICAgICBib29sIHYgPSBkLT5tX3ZpZXctPnBsYWNlQ2FyZXQo
KTsKKyAgICAgICAgICBlbWl0Q2FyZXRQb3NpdGlvbkNoYW5nZWQodiA/IGQtPmNhcmV0Tm9kZSgp
IDogMCwgZC0+Y2FyZXRPZmZzZXQoKSk7CisjZW5kaWYKICAgICAgIH0KICAgICAgIGVsc2UKICAg
ICAgIHsKKyNpZm5kZWYgS0hUTUxfTk9fQ0FSRVQKKyAgICAgICAgLy8gc2ltcGx5IGxlYXZlIGl0
LiBJcyB0aGlzIGEgZ29vZCBpZGVhPworI2Vsc2UKICAgICAgICAgZC0+bV9zZWxlY3Rpb25TdGFy
dCA9IERPTTo6Tm9kZSgpOwogICAgICAgICBkLT5tX3NlbGVjdGlvbkVuZCA9IERPTTo6Tm9kZSgp
OworI2VuZGlmCiAgICAgICB9CiAgICAgICBlbWl0U2VsZWN0aW9uQ2hhbmdlZCgpOwogICAgICAg
c3RhcnRBdXRvU2Nyb2xsKCk7CkBAIC00ODQyLDYgKzQ5MjcsMTAgQEAgdm9pZCBLSFRNTFBhcnQ6
OmtodG1sTW91c2VEb3VibGVDbGlja0V2ZQogICAgICAgICBkLT5tX2RvYwogICAgICAgICAgIC0+
c2V0U2VsZWN0aW9uKGQtPm1fc2VsZWN0aW9uU3RhcnQuaGFuZGxlKCksZC0+bV9zdGFydE9mZnNl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX3NlbGVjdGlvbkVuZC5oYW5kbGUoKSxk
LT5tX2VuZE9mZnNldCk7CisjaWZuZGVmIEtIVE1MX05PX0NBUkVUCisgICAgICAgIGJvb2wgdiA9
IGQtPm1fdmlldy0+cGxhY2VDYXJldCgpOworICAgICAgICBlbWl0Q2FyZXRQb3NpdGlvbkNoYW5n
ZWQodiA/IGQtPmNhcmV0Tm9kZSgpIDogMCwgZC0+Y2FyZXRPZmZzZXQoKSk7CisjZW5kaWYKICAg
ICAgIH0KICAgICB9CiAgIH0KQEAgLTQ5MTAsNiArNDk5OSw1NSBAQCB2b2lkIEtIVE1MUGFydDo6
ZXh0ZW5kU2VsZWN0aW9uKCBET006Ok5vCiAgIH0gd2hpbGUgKCBzZWxlY3RQYXJhZ3JhcGggfHwg
KCFjaC5pc1NwYWNlKCkgJiYgIWNoLmlzUHVuY3QoKSkgKTsKIH0KIAorLy8gVGhpcyBpcyBub3Qg
c3RhdGljIGJlY2F1c2UgaXQncyB1c2VkIGluIGtodG1sdmlldy5jcHAsIHRvbworLyoqIERldGVy
bWluZXMgd2hldGhlciBAcCBzdGFydF9zcCBhcHBlYXJzIGJlZm9yZSBAcCBlbmRfc3AgaW4gZG9j
dW1lbnQgb3JkZXIKKyAqLworYm9vbCBpc0JlZm9yZU5vZGUoRE9NOjpOb2RlIHN0YXJ0X3NwLCBE
T006Ok5vZGUgZW5kX3NwKSB7CisgIGlmICggc3RhcnRfc3AuaXNOdWxsKCkgfHwgZW5kX3NwLmlz
TnVsbCgpICkgcmV0dXJuIHRydWU7CisgIAorICBib29sIHJlc3VsdCA9IGZhbHNlOworICBpbnQg
c3RhcnRfZGVwdGg9MCwgZW5kX2RlcHRoPTA7CisgIC8vIEZpcnN0IHdlIGZpbmQgdGhlIGRlcHRo
cyBvZiB0aGUgdHdvIG5vZGVzIGluIHRoZSB0cmVlIChzdGFydF9kZXB0aCwgZW5kX2RlcHRoKQor
ICBET006Ok5vZGUgbiA9IHN0YXJ0X3NwOworICB3aGlsZSggIW4ucGFyZW50Tm9kZSgpLmlzTnVs
bCgpICl7CisgICAgbiA9IG4ucGFyZW50Tm9kZSgpOworICAgIHN0YXJ0X2RlcHRoKys7CisgIH0K
KyAgbiA9IGVuZF9zcDsKKyAgd2hpbGUoICFuLnBhcmVudE5vZGUoKS5pc051bGwoKSApeworICAg
IG4gPSBuLnBhcmVudE5vZGUoKTsKKyAgICBlbmRfZGVwdGgrKzsKKyAgfQorICAvLyBzdGFydF9z
cCBhbmQgZW5kX3NwIGluaXRpYWxseSBwb2ludCB0byBzZWxlY3Rpb25TdGFydCBhbmQgc2VsZWN0
aW9uRW5kCisgIC8vIGhlcmUgd2UgY2xpbWIgdXAgdGhlIHRyZWUgd2l0aCB0aGUgZGVlcGVyIG5v
ZGUsIHVudGlsIGJvdGggbm9kZXMgaGF2ZSBlcXVhbCBkZXB0aAorICB3aGlsZSggZW5kX2RlcHRo
ID4gc3RhcnRfZGVwdGggKXsKKyAgICBlbmRfc3AgPSBlbmRfc3AucGFyZW50Tm9kZSgpOworICAg
IGVuZF9kZXB0aC0tOworICB9CisgIHdoaWxlKCBzdGFydF9kZXB0aCA+IGVuZF9kZXB0aCApewor
ICAgIHN0YXJ0X3NwID0gc3RhcnRfc3AucGFyZW50Tm9kZSgpOworICAgIHN0YXJ0X2RlcHRoLS07
CisgIH0KKyAgLy8gQ2xpbWIgdGhlIHRyZWUgd2l0aCBib3RoIHN0YXJ0X3NwIGFuZCBlbmRfc3Ag
dW50aWwgdGhleSBoYXZlIHRoZSBzYW1lIHBhcmVudAorICB3aGlsZSggc3RhcnRfc3AucGFyZW50
Tm9kZSgpICE9IGVuZF9zcC5wYXJlbnROb2RlKCkgKXsKKyAgICBzdGFydF9zcCA9IHN0YXJ0X3Nw
LnBhcmVudE5vZGUoKTsKKyAgICBlbmRfc3AgPSBlbmRfc3AucGFyZW50Tm9kZSgpOworICB9Cisg
IC8vIE5vdyB3ZSBpdGVyYXRvciB0aHJvdWdoIHRoZSBwYXJlbnQncyBjaGlsZHJlbiB1bnRpbCB3
ZSBmaW5kIHN0YXJ0X3NwIG9yIGVuZF9zcAorICBuID0gc3RhcnRfc3AucGFyZW50Tm9kZSgpLmZp
cnN0Q2hpbGQoKTsKKyAgd2hpbGUoICFuLmlzTnVsbCgpICl7CisgICAgaWYoIG4gPT0gc3RhcnRf
c3AgKXsKKyAgICAgIHJlc3VsdD10cnVlOworICAgICAgYnJlYWs7CisgICAgfWVsc2UgaWYoIG4g
PT0gZW5kX3NwICl7CisgICAgICByZXN1bHQ9ZmFsc2U7CisgICAgICBicmVhazsKKyAgICB9Cisg
ICAgbiA9IG4ubmV4dFNpYmxpbmcoKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lk
IEtIVE1MUGFydDo6a2h0bWxNb3VzZU1vdmVFdmVudCgga2h0bWw6Ok1vdXNlTW92ZUV2ZW50ICpl
dmVudCApCiB7CiAgIFFNb3VzZUV2ZW50ICpfbW91c2UgPSBldmVudC0+cW1vdXNlRXZlbnQoKTsK
QEAgLTUwMzQsNiArNTE3Miw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpraHRtbE1vdXNlTW92ZUV2ZW50
KCBraHQKICAgICAgIC8va2REZWJ1ZyggNjAwMCApIDw8ICJzZXR0aW5nIGVuZCBvZiBzZWxlY3Rp
b24gdG8gIiA8PCBkLT5tX3NlbGVjdGlvbkVuZC5oYW5kbGUoKSA8PCAiLyIgPDwgZC0+bV9lbmRP
ZmZzZXQgPDwgZW5kbDsKIAogICAgICAgLy8gd2UgaGF2ZSB0byBnZXQgdG8ga25vdyBpZiBlbmQg
aXMgYmVmb3JlIHN0YXJ0IG9yIG5vdC4uLgorI2lmIDAKICAgICAgIERPTTo6Tm9kZSBuID0gZC0+
bV9zZWxlY3Rpb25TdGFydDsKICAgICAgIGQtPm1fc3RhcnRCZWZvcmVFbmQgPSBmYWxzZTsKICAg
ICAgIHdoaWxlKCFuLmlzTnVsbCgpKSB7CkBAIC01MDUwLDYgKzUxODksOSBAQCB2b2lkIEtIVE1M
UGFydDo6a2h0bWxNb3VzZU1vdmVFdmVudCgga2h0CiAgICAgICAgIG4gPSBuZXh0OwogICAgICAg
ICAvL2QtPm1fdmlldy0+dmlld3BvcnQoKS0+cmVwYWludChmYWxzZSk7CiAgICAgICB9CisjZWxz
ZQorICAgICAgZC0+bV9zdGFydEJlZm9yZUVuZCA9IGlzQmVmb3JlTm9kZShkLT5tX3NlbGVjdGlv
blN0YXJ0LCBkLT5tX3NlbGVjdGlvbkVuZCk7CisjZW5kaWYKIAogICAgICAgaWYgKCAhZC0+bV9z
ZWxlY3Rpb25TdGFydC5pc051bGwoKSAmJiAhZC0+bV9zZWxlY3Rpb25FbmQuaXNOdWxsKCkgKQog
ICAgICAgewpAQCAtNTA2Niw2ICs1MjA4LDExIEBAIHZvaWQgS0hUTUxQYXJ0OjpraHRtbE1vdXNl
TW92ZUV2ZW50KCBraHQKICAgICAgICAgICAgIC0+c2V0U2VsZWN0aW9uKGQtPm1fc2VsZWN0aW9u
RW5kLmhhbmRsZSgpLGQtPm1fZW5kT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZC0+bV9zZWxlY3Rpb25TdGFydC5oYW5kbGUoKSxkLT5tX3N0YXJ0T2Zmc2V0KTsKICAgICAgIH0K
KyNpZm5kZWYgS0hUTUxfTk9fQ0FSRVQKKyAgICAgIGJvb2wgdiA9IGQtPm1fdmlldy0+cGxhY2VD
YXJldCgpOworICAgICAgZW1pdENhcmV0UG9zaXRpb25DaGFuZ2VkKHYgPyBkLT5jYXJldE5vZGUo
KSA6IDAsIGQtPmNhcmV0T2Zmc2V0KCkpOworI2VuZGlmCisKICNlbHNlCiAgICAgICBpZiAoIGQt
Pm1fZG9jICYmIGQtPm1fdmlldyApIHsKICAgICAgICAgUVBvaW50IGRpZmYoIF9tb3VzZS0+Z2xv
YmFsUG9zKCkgLSBkLT5tX2RyYWdMYXN0UG9zICk7CkBAIC01MTE0LDE5ICs1MjYxLDI1IEBAIHZv
aWQgS0hUTUxQYXJ0OjpraHRtbE1vdXNlUmVsZWFzZUV2ZW50KCAKICNpZm5kZWYgS0hUTUxfTk9f
U0VMRUNUSU9OCiAgIC8vIGRlbGV0ZSBzZWxlY3Rpb24gaW4gY2FzZSBzdGFydCBhbmQgZW5kIHBv
c2l0aW9uIGFyZSBhdCB0aGUgc2FtZSBwb2ludAogICBpZihkLT5tX3NlbGVjdGlvblN0YXJ0ID09
IGQtPm1fc2VsZWN0aW9uRW5kICYmIGQtPm1fc3RhcnRPZmZzZXQgPT0gZC0+bV9lbmRPZmZzZXQp
IHsKKyNpZm5kZWYgS0hUTUxfTk9fQ0FSRVQKKyAgICBkLT5tX2V4dGVuZEF0RW5kID0gdHJ1ZTsK
KyNlbHNlCiAgICAgZC0+bV9zZWxlY3Rpb25TdGFydCA9IDA7CiAgICAgZC0+bV9zZWxlY3Rpb25F
bmQgPSAwOwogICAgIGQtPm1fc3RhcnRPZmZzZXQgPSAwOwogICAgIGQtPm1fZW5kT2Zmc2V0ID0g
MDsKKyNlbmRpZgogICAgIGVtaXRTZWxlY3Rpb25DaGFuZ2VkKCk7CiAgIH0gZWxzZSB7CiAgICAg
Ly8gd2UgaGF2ZSB0byBnZXQgdG8ga25vdyBpZiBlbmQgaXMgYmVmb3JlIHN0YXJ0IG9yIG5vdC4u
LgogICAgIERPTTo6Tm9kZSBuID0gZC0+bV9zZWxlY3Rpb25TdGFydDsKICAgICBkLT5tX3N0YXJ0
QmVmb3JlRW5kID0gZmFsc2U7CisgICAgZC0+bV9leHRlbmRBdEVuZCA9IHRydWU7CiAgICAgaWYo
IGQtPm1fc2VsZWN0aW9uU3RhcnQgPT0gZC0+bV9zZWxlY3Rpb25FbmQgKSB7CiAgICAgICBpZigg
ZC0+bV9zdGFydE9mZnNldCA8IGQtPm1fZW5kT2Zmc2V0ICkKICAgICAgICAgZC0+bV9zdGFydEJl
Zm9yZUVuZCA9IHRydWU7CiAgICAgfSBlbHNlIHsKKyNpZiAwCiAgICAgICB3aGlsZSghbi5pc051
bGwoKSkgewogICAgICAgICBpZihuID09IGQtPm1fc2VsZWN0aW9uRW5kKSB7CiAgICAgICAgICAg
ZC0+bV9zdGFydEJlZm9yZUVuZCA9IHRydWU7CkBAIC01MTQwLDYgKzUyOTMsOSBAQCB2b2lkIEtI
VE1MUGFydDo6a2h0bWxNb3VzZVJlbGVhc2VFdmVudCggCiAgICAgICAgIH0KICAgICAgICAgbiA9
IG5leHQ7CiAgICAgICB9CisjZWxzZQorICAgICAgZC0+bV9zdGFydEJlZm9yZUVuZCA9IGlzQmVm
b3JlTm9kZShkLT5tX3NlbGVjdGlvblN0YXJ0LCBkLT5tX3NlbGVjdGlvbkVuZCk7CisjZW5kaWYK
ICAgICB9CiAgICAgaWYoIWQtPm1fc3RhcnRCZWZvcmVFbmQpCiAgICAgewpAQCAtNTE1MCwxMSAr
NTMwNiwxNiBAQCB2b2lkIEtIVE1MUGFydDo6a2h0bWxNb3VzZVJlbGVhc2VFdmVudCggCiAgICAg
ICBkLT5tX3NlbGVjdGlvbkVuZCA9IHRtcE5vZGU7CiAgICAgICBkLT5tX2VuZE9mZnNldCA9IHRt
cE9mZnNldDsKICAgICAgIGQtPm1fc3RhcnRCZWZvcmVFbmQgPSB0cnVlOworICAgICAgZC0+bV9l
eHRlbmRBdEVuZCA9IGZhbHNlOwogICAgIH0KKyNpZm5kZWYgS0hUTUxfTk9fQ0FSRVQKKyAgICBi
b29sIHYgPSBkLT5tX3ZpZXctPnBsYWNlQ2FyZXQoKTsKKyAgICBlbWl0Q2FyZXRQb3NpdGlvbkNo
YW5nZWQodiA/IGQtPmNhcmV0Tm9kZSgpIDogMCwgZC0+Y2FyZXRPZmZzZXQoKSk7CisjZW5kaWYK
ICAgICAvLyBnZXQgc2VsZWN0ZWQgdGV4dCBhbmQgcGFzdGUgdG8gdGhlIGNsaXBib2FyZAogI2lm
bmRlZiBRVF9OT19DTElQQk9BUkQKICAgICBRU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsK
LSAgICB0ZXh0LnJlcGxhY2UoUVJlZ0V4cChRQ2hhcigweGEwKSksICIgIik7CisgICAgdGV4dC5y
ZXBsYWNlKFFDaGFyKDB4YTApLCAnICcpOwogICAgIGRpc2Nvbm5lY3QoIGthcHAtPmNsaXBib2Fy
ZCgpLCBTSUdOQUwoIHNlbGVjdGlvbkNoYW5nZWQoKSksIHRoaXMsIFNMT1QoIHNsb3RDbGVhclNl
bGVjdGlvbigpKSk7CiAgICAga2FwcC0+Y2xpcGJvYXJkKCktPnNldFRleHQodGV4dCxRQ2xpcGJv
YXJkOjpTZWxlY3Rpb24pOwogICAgIGNvbm5lY3QoIGthcHAtPmNsaXBib2FyZCgpLCBTSUdOQUwo
IHNlbGVjdGlvbkNoYW5nZWQoKSksIFNMT1QoIHNsb3RDbGVhclNlbGVjdGlvbigpKSk7CkBAIC01
NTc5LDYgKzU3NDAsMTAgQEAga2h0bWw6OkRlY29kZXIgKktIVE1MUGFydDo6Y3JlYXRlRGVjb2Rl
cgogCiAgIGRlYy0+c2V0QXV0b0RldGVjdExhbmd1YWdlKCBkLT5tX2F1dG9EZXRlY3RMYW5ndWFn
ZSApOwogICByZXR1cm4gZGVjOworfQorCit2b2lkIEtIVE1MUGFydDo6ZW1pdENhcmV0UG9zaXRp
b25DaGFuZ2VkKGNvbnN0IERPTTo6Tm9kZSAmbm9kZSwgbG9uZyBvZmZzZXQpIHsKKyAgZW1pdCBj
YXJldFBvc2l0aW9uQ2hhbmdlZChub2RlLCBvZmZzZXQpOwogfQogCiB1c2luZyBuYW1lc3BhY2Ug
S1BhcnRzOwpJbmRleDoga2h0bWxfcGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tk
ZS9rZGVsaWJzL2todG1sL2todG1sX3BhcnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMjQK
ZGlmZiAtdSAtcCAtcjEuMjI0IGtodG1sX3BhcnQuaAotLS0ga2h0bWxfcGFydC5oCTE2IEF1ZyAy
MDAzIDE5OjQ1OjA2IC0wMDAwCTEuMjI0CisrKyBraHRtbF9wYXJ0LmgJMTggQXVnIDIwMDMgMjE6
NTI6MjIgLTAwMDAKQEAgLTk4LDcgKzk4LDcgQEAgbmFtZXNwYWNlIEtQYXJ0cwogICogVGhpcyBj
bGFzcyBpcyBraHRtbCdzIG1haW4gY2xhc3MuIEl0IGZlYXR1cmVzIGFuIGFsbW9zdCBjb21wbGV0
ZQogICogd2ViIGJyb3dzZXIsIGFuZCBodG1sIHJlbmRlcmVyLgogICoKLSAqIFRoZSBlYXNpZXN0
IHdheSB0byB1c2UgdGhpcyBjbGFzcyAoaWYgeW91IGp1c3Qgd2FudCB0byBkaXNwbGF5IGEgYW4g
SFRNTAorICogVGhlIGVhc2llc3Qgd2F5IHRvIHVzZSB0aGlzIGNsYXNzIChpZiB5b3UganVzdCB3
YW50IHRvIGRpc3BsYXkgYW4gSFRNTAogICogcGFnZSBhdCBzb21lIFVSTCkgaXMgdGhlIGZvbGxv
d2luZzoKICAqCiAgKiBcY29kZQpAQCAtMzczLDEwICszNzMsNDYgQEAgcHVibGljOgogICB2b2lk
IHNldE9ubHlMb2NhbFJlZmVyZW5jZXMoIGJvb2wgZW5hYmxlICk7CiAKICAgLyoqCi0gICAqIFJl
dHVybmQgd2hldGhlciByZWZlcmVuY2VzIHNob3VsZCBiZSBsb2FkZWQgKCBkZWZhdWx0IGZhbHNl
ICkKKyAgICogUmV0dXJucyB3aGV0aGVyIHJlZmVyZW5jZXMgc2hvdWxkIGJlIGxvYWRlZCAoIGRl
ZmF1bHQgZmFsc2UgKQogICAgKiovCiAgIGJvb2wgb25seUxvY2FsUmVmZXJlbmNlcygpIGNvbnN0
OwogCisgIC8qKgorICAgKiBFbmFibGVzL2Rpc2FibGVzIGNhcmV0IG1vZGUuCisgICAqCisgICAq
IEVuYWJsaW5nIGNhcmV0IG1vZGUgZGlzcGxheXMgYSBjYXJldCB3aGljaCBjYW4gYmUgdXNlZCB0
byBuYXZpZ2F0ZQorICAgKiB0aGUgZG9jdW1lbnQgdXNpbmcgdGhlIGtleWJvYXJkIG9ubHkuIENh
cmV0IG1vZGUgaXMgc3dpdGNoZWQgb2ZmIGJ5CisgICAqIGRlZmF1bHQuCisgICAqCisgICAqIEBw
YXJhbSBlbmFibGUgQHAgdHJ1ZSB0byBlbmFibGUsIEBwIGZhbHNlIHRvIGRpc2FibGUgY2FyZXQg
bW9kZS4KKyAgICogQHNpbmNlIDMuMiAocGVuZGluZywgZG8gbm90IHVzZSkKKyAgICovCisgIHZv
aWQgc2V0Q2FyZXRNb2RlKGJvb2wgZW5hYmxlKTsKKworICAvKiogUmV0dXJucyB3aGV0aGVyIGNh
cmV0IG1vZGUgaXMgb24vb2ZmLgorICAgKiBAc2luY2UgMy4yCisgICAqLworICBib29sIGlzQ2Fy
ZXRNb2RlKCkgY29uc3Q7CisKKyAgLyoqCisgICAqIE1ha2VzIHRoZSBkb2N1bWVudCBlZGl0YWJs
ZS4KKyAgICoKKyAgICogU2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIEBwIHRydWUgbWFrZXMgdGhl
IGRvY3VtZW50LCBhbmQgaXRzCisgICAqIHN1YmRvY3VtZW50cyAoc3VjaCBhcyBmcmFtZXMsIGlm
cmFtZXMsIG9iamVjdHMpIGVkaXRhYmxlIGFzIGEgd2hvbGUuCisgICAqIEZJWE1FOiBpbnNlcnQg
bW9yZSBpbmZvcm1hdGlvbiBhYm91dCBuYXZpZ2F0aW9uLCBmZWF0dXJlcyBldGMuIGFzIHNlZW4g
Zml0CisgICAqCisgICAqIEBwYXJhbSBlbmFibGUgQHAgdHJ1ZSB0byBzZXQgZG9jdW1lbnQgZWRp
dGFibGUsIEBwIGZhbHNlIHRvIHNldCBpdAorICAgKglyZWFkLW9ubHkuCisgICAqIEBzaW5jZSAz
LjIgKHBlbmRpbmcsIGRvIG5vdCB1c2UpCisgICAqLworICB2b2lkIHNldEVkaXRhYmxlKGJvb2wg
ZW5hYmxlKTsKKworICAvKioKKyAgICogUmV0dXJucyBAcCB0cnVlIGlmIHRoZSBkb2N1bWVudCBp
cyBlZGl0YWJsZSwgQHAgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKiBAc2luY2UgMy4yCisgICAqLwor
ICBib29sIGlzRWRpdGFibGUoKSBjb25zdDsKKwogI2lmbmRlZiBLREVfTk9fQ09NUEFUCiAgIHZv
aWQgZW5hYmxlSlNjcmlwdCggYm9vbCBlICkgeyBzZXRKU2NyaXB0RW5hYmxlZChlKTsgfQogICB2
b2lkIGVuYWJsZUphdmEoIGJvb2wgZSApIHsgc2V0SmF2YUVuYWJsZWQoZSk7IH0KQEAgLTc4NSw2
ICs4MjEsMTkgQEAgc2lnbmFsczoKICAgLyoqCiAgICAqIEBpbnRlcm5hbCAqLwogICB2b2lkIGRv
Y0NyZWF0ZWQoKTsKKyAgCisgIC8qKgorICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW5l
dmVyIHRoZSBjYXJldCBwb3NpdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLgorICAgKgorICAgKiBUaGUg
c2lnbmFsIHRyYW5zbWl0cyB0aGUgcG9zaXRpb24gdGhlIERPTTo6UmFuZ2Ugd2F5LCB0aGUgbm9k
ZSBhbmQKKyAgICogdGhlIHplcm8tYmFzZWQgb2Zmc2V0IHdpdGhpbiB0aGlzIG5vZGUuCisgICAq
IEBwYXJhbSBub2RlIG5vZGUgd2hpY2ggdGhlIGNhcmV0IGlzIGluLiBUaGlzIGNhbiBiZSBudWxs
IGlmIHRoZSBjYXJldAorICAgKgloYXMgYmVlbiBkZWFjdGl2YXRlZC4KKyAgICogQHBhcmFtIG9m
ZnNldCBvZmZzZXQgd2l0aGluIHRoZSBub2RlLiBJZiB0aGUgbm9kZSBpcyBudWxsLCB0aGUgb2Zm
c2V0CisgICAqCWlzIG1lYW5pbmdsZXNzLgorICAgKiBAc2luY2UgMy4yCisgICAqLworICB2b2lk
IGNhcmV0UG9zaXRpb25DaGFuZ2VkKGNvbnN0IERPTTo6Tm9kZSAmbm9kZSwgbG9uZyBvZmZzZXQp
OwogCiBwcm90ZWN0ZWQ6CiAKQEAgLTExNzksNiArMTIyOCw4IEBAIHByaXZhdGU6CiAgICAqIGdl
bmVyaWMgem9vbSBvdXQKICAgICovCiAgIHZvaWQgem9vbU91dChjb25zdCBpbnQgc3RlcHBpbmdb
XSwgaW50IGNvdW50KTsKKworICB2b2lkIGVtaXRDYXJldFBvc2l0aW9uQ2hhbmdlZChjb25zdCBE
T006Ok5vZGUgJm5vZGUsIGxvbmcgb2Zmc2V0KTsKIAogICBLSFRNTFBhcnRQcml2YXRlICpkOwog
ICBmcmllbmQgY2xhc3MgS0hUTUxQYXJ0UHJpdmF0ZTsKSW5kZXg6IGtodG1scGFydF9wLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwva2h0bWxwYXJ0X3AuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MApkaWZmIC11IC1wIC1yMS40MCBraHRtbHBhcnRfcC5o
Ci0tLSBraHRtbHBhcnRfcC5oCTQgSnVuIDIwMDMgMjM6MzY6MzAgLTAwMDAJMS40MAorKysga2h0
bWxwYXJ0X3AuaAkxOCBBdWcgMjAwMyAyMTo1MjoyMyAtMDAwMApAQCAtMTI2LDYgKzEyNiw3IEBA
IHB1YmxpYzoKICAgICBtX2JEbmQgPSB0cnVlOwogICAgIG1fc3RhcnRPZmZzZXQgPSBtX2VuZE9m
ZnNldCA9IDA7CiAgICAgbV9zdGFydEJlZm9yZUVuZCA9IHRydWU7CisgICAgbV9leHRlbmRBdEVu
ZCA9IHRydWU7CiAgICAgbV9saW5rQ3Vyc29yID0gS0N1cnNvcjo6aGFuZEN1cnNvcigpOwogICAg
IG1fbG9hZGVkT2JqZWN0cyA9IDA7CiAgICAgbV90b3RhbE9iamVjdENvdW50ID0gMDsKQEAgLTE1
NCw2ICsxNTUsOSBAQCBwdWJsaWM6CiAgICAgbV9iUGx1Z2luc092ZXJyaWRlID0gZmFsc2U7CiAg
ICAgbV9vbmx5TG9jYWxSZWZlcmVuY2VzID0gZmFsc2U7CiAKKyAgICBtX2NhcmV0TW9kZSA9IGZh
bHNlOworICAgIG1fZGVzaWduTW9kZSA9IGZhbHNlOworCiAgICAgbV9tZXRhUmVmcmVzaEVuYWJs
ZWQgPSB0cnVlOwogICAgIG1fc3RhdHVzTWVzc2FnZXNFbmFibGVkID0gdHJ1ZTsKIApAQCAtMTc3
LDYgKzE4MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFNhbWUgZm9yIFNTTCBzZXR0aW5n
cwogICAgICAgICAgICAgbV9zc2xfaW5fdXNlID0gcGFydC0+ZC0+bV9zc2xfaW5fdXNlOwogICAg
ICAgICAgICAgbV9vbmx5TG9jYWxSZWZlcmVuY2VzID0gcGFydC0+ZC0+bV9vbmx5TG9jYWxSZWZl
cmVuY2VzOworICAgICAgICAgICAgbV9jYXJldE1vZGUgPSBwYXJ0LT5kLT5tX2NhcmV0TW9kZTsK
KyAgICAgICAgICAgIG1fZGVzaWduTW9kZSA9IHBhcnQtPmQtPm1fZGVzaWduTW9kZTsKICAgICAg
ICAgICAgIG1fem9vbUZhY3RvciA9IHBhcnQtPmQtPm1fem9vbUZhY3RvcjsKICAgICAgICAgICAg
IG1fYXV0b0RldGVjdExhbmd1YWdlID0gcGFydC0+ZC0+bV9hdXRvRGV0ZWN0TGFuZ3VhZ2U7CiAg
ICAgICAgIH0KQEAgLTMzNSw2ICszNDEsMTQgQEAgcHVibGljOgogICBib29sIG1fYlJpZ2h0TW91
c2VQcmVzc2VkOwogICBET006Ok5vZGUgbV9tb3VzZVByZXNzTm9kZTsgLy9ub2RlIHVuZGVyIHRo
ZSBtb3VzZSB3aGVuIHRoZSBtb3VzZSB3YXMgcHJlc3NlZCAoc2V0IGluIHRoZSBtb3VzZSBoYW5k
bGVyKQogCisgIC8vIHNpbXBseSB1c2luZyB0aGUgc2VsZWN0aW9uIGxpbWl0cyBmb3IgdGhlIGNh
cmV0IHBvc2l0aW9uIGRvZXMgbm90IHN1ZmZpY2UKKyAgLy8gYXMgd2UgbmVlZCB0byBrbm93IG9u
IHdoaWNoIHNpZGUgdG8gZXh0ZW5kIHRoZSBzZWxlY3Rpb24KKy8vICBET006Ok5vZGUgbV9jYXJl
dE5vZGU7CS8vIG5vZGUgY29udGFpbmluZyB0aGUgY2FyZXQKKy8vICBsb25nIG1fY2FyZXRPZmZz
ZXQ7CQkvLyBvZmZzZXQgd2l0aGluIHRoaXMgbm9kZSAoMC1iYXNlZCkKKworICAvLyB0aGUgY2Fy
ZXQgdXNlcyB0aGUgc2VsZWN0aW9uIHZhcmlhYmxlcyBmb3IgaXRzIHBvc2l0aW9uLiBJZiBtX2V4
dGVuZEF0RW5kCisgIC8vIGlzIHRydWUsIG1fc2VsZWN0aW9uRW5kIGFuZCBtX2VuZE9mZnNldCBj
b250YWluIHRoZSBtYW5kYXRvcnkgY2FyZXQKKyAgLy8gcG9zaXRpb24sIG90aGVyd2lzZSBpdCdz
IG1fc2VsZWN0aW9uU3RhcnQgYW5kIG1fc3RhcnRPZmZzZXQuCiAgIERPTTo6Tm9kZSBtX3NlbGVj
dGlvblN0YXJ0OwogICBsb25nIG1fc3RhcnRPZmZzZXQ7CiAgIERPTTo6Tm9kZSBtX3NlbGVjdGlv
bkVuZDsKQEAgLTM0Myw2ICszNTcsNyBAQCBwdWJsaWM6CiAgIFFTdHJpbmcgbV9vdmVyVVJMVGFy
Z2V0OwogCiAgIGJvb2wgbV9zdGFydEJlZm9yZUVuZDoxOworICBib29sIG1fZXh0ZW5kQXRFbmQ6
MTsJCS8vIHRydWUgaWYgc2VsZWN0aW9uIGlzIHRvIGJlIGV4dGVuZGVkIGF0IGl0cyBlbmQKICAg
Ym9vbCBtX2JEbmQ6MTsKICAgYm9vbCBtX2JGaXJzdERhdGE6MTsKICAgYm9vbCBtX2JDbGVhcmlu
ZzoxOwpAQCAtMzU3LDYgKzM3Miw5IEBAIHB1YmxpYzoKICAgUVBvaW50IG1fZHJhZ0xhc3RQb3M7
CiAjZW5kaWYKIAorICBib29sIG1fZGVzaWduTW9kZTsKKyAgYm9vbCBtX2NhcmV0TW9kZTsKKwog
ICBRQ3Vyc29yIG1fbGlua0N1cnNvcjsKICAgUVRpbWVyIG1fc2Nyb2xsVGltZXI7CiAKQEAgLTQx
OCw2ICs0MzYsMTcgQEAgcHVibGljOgogICBraHRtbDo6RGVjb2Rlcjo6QXV0b0RldGVjdExhbmd1
YWdlIG1fYXV0b0RldGVjdExhbmd1YWdlOwogICBLUG9wdXBNZW51ICptX2F1dG9tYXRpY0RldGVj
dGlvbjsKICAgS1NlbGVjdEFjdGlvbiAqbV9tYW51YWxEZXRlY3Rpb247CisKKyAgdm9pZCBzZXRG
bGFnUmVjdXJzaXZlbHkoYm9vbCBLSFRNTFBhcnRQcml2YXRlOjoqZmxhZywgYm9vbCB2YWx1ZSk7
CisgIC8qKiByZXR1cm5zIHRoZSBjYXJldCBub2RlICovCisgIERPTTo6Tm9kZSAmY2FyZXROb2Rl
KCkgeworICAgIHJldHVybiBtX2V4dGVuZEF0RW5kID8gbV9zZWxlY3Rpb25FbmQgOiBtX3NlbGVj
dGlvblN0YXJ0OworICB9CisgIC8qKiByZXR1cm5zIHRoZSBjYXJldCBvZmZzZXQgKi8KKyAgbG9u
ZyAmY2FyZXRPZmZzZXQoKSB7CisgICAgcmV0dXJuIG1fZXh0ZW5kQXRFbmQgPyBtX2VuZE9mZnNl
dCA6IG1fc3RhcnRPZmZzZXQ7CisgIH0KKwogfTsKIAogI2VuZGlmCkluZGV4OiBraHRtbHZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2todG1sdmll
dy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTIzCmRpZmYgLXUgLXAgLXIxLjUyMyBraHRt
bHZpZXcuY3BwCi0tLSBraHRtbHZpZXcuY3BwCTUgQXVnIDIwMDMgMTE6MzY6MjEgLTAwMDAJMS41
MjMKKysrIGtodG1sdmlldy5jcHAJMTggQXVnIDIwMDMgMjE6NTI6MjcgLTAwMDAKQEAgLTQsNiAr
NCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgIDE5OTkgTGFycyBLbm9sbCA8a25vbGxAa2Rl
Lm9yZz4KICAqICAgICAgICAgICAgICAgICAgICAgMTk5OSBBbnR0aSBLb2l2aXN0byA8a29pdmlz
dG9Aa2RlLm9yZz4KICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBEaXJrIE11ZWxsZXIgPG11
ZWxsZXJAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgICAgICAgMjAwMyBMZW8gU2F2ZXJuaWsg
PGwuc2F2ZXJuaWtAYW9uLmF0PgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSwxMCArMzAsMTUg
QEAKIAogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJodG1s
L2h0bWxfaW5saW5laW1wbC5oIgorI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfYXJlbmEuaCIK
ICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3Jvb3QuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcv
cmVuZGVyX2ZyYW1lcy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuaCIK
ICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xheWVyLmgiCisjaW5jbHVkZSAicmVuZGVyaW5n
L3JlbmRlcl9saW5lLmgiCisjZGVmaW5lIHByb3RlY3RlZCBwdWJsaWMgLy8gRklYTUU6IHJlbW92
ZSB0aGF0IGFmdGVyIHRoZSBkZWJ1Z2dpbmcgcGhhc2UKKyNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX3RleHQuaCIKKyN1bmRlZiBwcm90ZWN0ZWQKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNp
bXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaCIKICNpbmNsdWRlICJtaXNj
L2h0bWxoYXNoZXMuaCIKQEAgLTQwLDYgKzQ2LDggQEAKICNpbmNsdWRlICJraHRtbF9zZXR0aW5n
cy5oIgogI2luY2x1ZGUgImtodG1sX3ByaW50c2V0dGluZ3MuaCIKIAorI2luY2x1ZGUgImtodG1s
cGFydF9wLmgiCisKICNpbmNsdWRlIDxrY3Vyc29yLmg+CiAjaW5jbHVkZSA8a3NpbXBsZWNvbmZp
Zy5oPgogI2luY2x1ZGUgPGtzdHJpbmdoYW5kbGVyLmg+CkBAIC02Miw2ICs3MCw4IEBACiAjaW5j
bHVkZSA8a2RpYWxvZ2Jhc2UuaD4KICNpbmNsdWRlIDxxcHRyZGljdC5oPgogCisjaW5jbHVkZSA8
aW9zdHJlYW0uaD4JLy8gRklYTUU6IHRlbXBvcmFyeSBrbHVnZGUsIHJlbW92ZSBhZnRlciB0ZXN0
aW5nIChMUykKKwogI2RlZmluZSBQQUlOVF9CVUZGRVJfSEVJR0hUIDEyOAogCiB1c2luZyBuYW1l
c3BhY2UgRE9NOwpAQCAtODksNiArOTksNDUgQEAgcHJpdmF0ZToKIAogI2VuZGlmCiAKKyNpZm5k
ZWYgS0hUTUxfTk9fQ0FSRVQKKy8qKiBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBj
YXJldCB3aGljaCBpcyByZWxhdGVkIHRvIHRoZSB2aWV3LgorICogQW4gb2JqZWN0IG9mIHRoaXMg
Y2xhc3MgaXMgb25seSBpbnN0YW50aWF0ZWQgd2hlbiBpdCBpcyBuZWVkZWQuCisgKi8KK3N0cnVj
dCBDYXJldFZpZXdDb250ZXh0IHsKKyAgICBpbnQgZnJlcVRpbWVySWQ7CQkvLyBjYXJldCBibGlu
ayBmcmVxdWVuY3kgdGltZXIgaWQKKyAgICBpbnQgeCwgeTsJCQkvLyBjYXJldCBwb3NpdGlvbiBp
biB2aWV3cG9ydCBjb29yZGluYXRlcworICAgIAkJCQkvLyAoeSBzcGVjaWZpZXMgdGhlIHRvcCwg
bm90IHRoZSBiYXNlbGluZSkKKyAgICBpbnQgaGVpZ2h0OwkJCS8vIGhlaWdodCBvZiBjYXJldCBp
biBwaXhlbHMKKyAgICBpbnQgd2lkdGg7CQkJLy8gd2lkdGggb2YgY2FyZXQgaW4gcGl4ZWxzCisg
ICAgYm9vbCB2aXNpYmxlOwkJLy8gdHJ1ZSBpZiBjdXJyZW50bHkgdmlzaWJsZS4KKyAgICBib29s
IGRpc3BsYXllZDsJCS8vIHRydWUgaWYgY2FyZXQgaXMgdG8gYmUgZGlzcGxheWVkIGF0IGFsbC4K
KworICAgIC8qKiBGb3IgbmF0dXJhbCB0cmF2ZXJzYWwgb2YgbGluZXMsIHRoZSBvcmlnaW5hbCB4
IHBvc2l0aW9uIGlzIHNhdmVkLCBhbmQKKyAgICAgKiB0aGUgYWN0dWFsIHggaXMgc2V0IHRvIHRo
ZSBmaXJzdCBjaGFyYWN0ZXIgd2hvc2UgeCBwb3NpdGlvbiBpcworICAgICAqIGdyZWF0ZXIgdGhh
biBvcmlnWC4KKyAgICAgKgorICAgICAqIG9yaWdYIGlzIHJlc2V0IHRvIHggd2hlbmV2ZXIgdGhl
IGNhcmV0IGlzIG1vdmVkIGhvcml6b250YWxseSBvciBwbGFjZWQKKyAgICAgKiBieSB0aGUgbW91
c2UuCisgICAgICovCisgICAgaW50IG9yaWdYOworCisgICAgQ2FyZXRWaWV3Q29udGV4dCgpIDog
ZnJlcVRpbWVySWQoLTEpLCB4KDApLCB5KDApLCBoZWlnaHQoMTYpLCB2aXNpYmxlKHRydWUpLAor
ICAgIAlkaXNwbGF5ZWQoZmFsc2UpLCBvcmlnWCgwKQorICAgIHt9Cit9OworCisvKiogY29udGV4
dHVhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZWRpdGluZyBzdGF0ZS4KKyAqIEFuIG9iamVjdCBv
ZiB0aGlzIGNsYXNzIGlzIG9ubHkgaW5zdGFudGlhdGVkIHdoZW4gaXQgaXMgbmVlZGVkLgorICov
CitzdHJ1Y3QgRWRpdG9yQ29udGV4dCB7CisgICAgYm9vbCBvdmVycmlkZTsJCS8vIHRydWUgaWYg
dHlwZWQgY2hhcmFjdGVycyBzaG91bGQgb3ZlcnJpZGUKKyAgICAJCQkJLy8gdGhlIGV4aXN0aW5n
IG9uZXMuCisKKyAgICBFZGl0b3JDb250ZXh0KCkgOiBvdmVycmlkZShmYWxzZSkKKyAgICB7fQor
fTsKKyNlbmRpZiAvLyBLSFRNTF9OT19DQVJFVAorCiBjbGFzcyBLSFRNTFZpZXdQcml2YXRlIHsK
ICAgICBmcmllbmQgY2xhc3MgS0hUTUxUb29sVGlwOwogcHVibGljOgpAQCAtMTAzLDYgKzE1Miwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIHByZXZTY3JvbGxiYXJWaXNpYmxlID0gdHJ1ZTsKIAl0b29s
dGlwID0gMDsKICAgICAgICAgcG9zc2libGVUcmlwbGVDbGljayA9IGZhbHNlOworI2lmbmRlZiBL
SFRNTF9OT19DQVJFVAorCW1fY2FyZXRWaWV3Q29udGV4dCA9IDA7CisJbV9lZGl0b3JDb250ZXh0
ID0gMDsKKyNlbmRpZiAvLyBLSFRNTF9OT19DQVJFVAogICAgIH0KICAgICB+S0hUTUxWaWV3UHJp
dmF0ZSgpCiAgICAgewpAQCAtMTEzLDYgKzE2Niw4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHVu
ZGVyTW91c2UpCiAJICAgIHVuZGVyTW91c2UtPmRlcmVmKCk7CiAJZGVsZXRlIHRvb2x0aXA7CisJ
ZGVsZXRlIG1fY2FyZXRWaWV3Q29udGV4dDsKKwlkZWxldGUgbV9lZGl0b3JDb250ZXh0OwogICAg
IH0KICAgICB2b2lkIHJlc2V0KCkKICAgICB7CkBAIC0xNTEsNiArMjA2LDcgQEAgcHVibGljOgog
ICAgICAgICByZXBhaW50TGF5b3V0ID0gZmFsc2U7CiAgICAgICAgIHVwZGF0ZVJlY3QgPSBRUmVj
dCgpOwogICAgICAgICBtX2RpYWxvZ3NBbGxvd2VkID0gdHJ1ZTsKKwkvLyBGSVhNRTogZGVjaWRl
IHdoYXQgdG8gZG8gd2l0aCBjYXJldCB2aWV3IGFuZCBlZGl0b3IgY29udGV4dHMgKExTKQogICAg
IH0KICAgICB2b2lkIG5ld1Njcm9sbFRpbWVyKFFXaWRnZXQgKnZpZXcsIGludCB0aWQpCiAgICAg
ewpAQCAtMTg0LDYgKzI0MCwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbmV3U2Nyb2xs
VGltZXIodmlldywgMCk7CiAgICAgICAgIH0KICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorI2lmbmRlZiBLSFRNTF9OT19DQVJFVAorICAgIC8qKiB0aGlzIGZ1bmN0aW9u
IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNhcmV0IHZpZXcgY29udGV4dC4gSWYgbm9uZQor
ICAgICAqIGV4aXN0cywgaXQgd2lsbCBiZSBpbnN0YW50aWF0ZWQuCisgICAgICovCisgICAgQ2Fy
ZXRWaWV3Q29udGV4dCAqY2FyZXRWaWV3Q29udGV4dCgpIHsKKyAgICAgIGlmICghbV9jYXJldFZp
ZXdDb250ZXh0KSBtX2NhcmV0Vmlld0NvbnRleHQgPSBuZXcgQ2FyZXRWaWV3Q29udGV4dCgpOwor
ICAgICAgcmV0dXJuIG1fY2FyZXRWaWV3Q29udGV4dDsKKyAgICB9CisgICAgLyoqIHRoaXMgZnVu
Y3Rpb24gcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgZWRpdG9yIGNvbnRleHQuIElmIG5vbmUK
KyAgICAgKiBleGlzdHMsIGl0IHdpbGwgYmUgaW5zdGFudGlhdGVkLgorICAgICAqLworICAgIEVk
aXRvckNvbnRleHQgKmVkaXRvckNvbnRleHQoKSB7CisgICAgICBpZiAoIW1fZWRpdG9yQ29udGV4
dCkgbV9lZGl0b3JDb250ZXh0ID0gbmV3IEVkaXRvckNvbnRleHQoKTsKKyAgICAgIHJldHVybiBt
X2VkaXRvckNvbnRleHQ7CisgICAgfQorI2VuZGlmIC8vIEtIVE1MX05PX0NBUkVUCiAKICAgICBR
UGFpbnRlciAqdHA7CiAgICAgUVBpeG1hcCAgKnBhaW50QnVmZmVyOwpAQCAtMjI5LDggKzMwMiwx
MjYgQEAgcHVibGljOgogICAgIFFSZWN0IHVwZGF0ZVJlY3Q7CiAgICAgS0hUTUxUb29sVGlwICp0
b29sdGlwOwogICAgIFFQdHJEaWN0PFFXaWRnZXQ+IHZpc2libGVXaWRnZXRzOworI2lmbmRlZiBL
SFRNTF9OT19DQVJFVAorICAgIENhcmV0Vmlld0NvbnRleHQgKm1fY2FyZXRWaWV3Q29udGV4dDsK
KyAgICBFZGl0b3JDb250ZXh0ICptX2VkaXRvckNvbnRleHQ7CisjZW5kaWYgLy8gS0hUTUxfTk9f
Q0FSRVQKIH07CiAKKy8vID09IGNhcmV0LXJlbGF0ZWQgaGVscGVyIGZ1bmN0aW9ucworCisjaWZu
ZGVmIEtIVE1MX05PX0NBUkVUCisKKy8vIGRlZmluZWQgaW4ga2h0bWxfcGFydC5jcHAKK2Jvb2wg
aXNCZWZvcmVOb2RlKERPTTo6Tm9kZSBub2RlMSwgRE9NOjpOb2RlIG5vZGUyKTsKKworbmFtZXNw
YWNlIGtodG1sIHsKKworLyoqIE1ha2Ugc3VyZSB0aGUgZ2l2ZW4gbm9kZSBpcyBhIGxlYWYgbm9k
ZS4gKi8KK2lubGluZSB2b2lkIGVuc3VyZUxlYWZOb2RlKE5vZGVJbXBsICombm9kZSkgeworICBp
ZiAobm9kZSAmJiBub2RlLT5oYXNDaGlsZE5vZGVzKCkpIG5vZGUgPSBub2RlLT5uZXh0TGVhZk5v
ZGUoKTsKK30KKworLyoqIEZpbmRzIHRoZSBuZXh0IG5vZGUgdGhhdCBoYXMgYSByZW5kZXJlci4K
KyAqCisgKiBOb3RlIHRoYXQgaWYgdGhlIGluaXRpYWwgQHAgbm9kZSBoYXMgYSByZW5kZXJlciwg
dGhpcyB3aWxsIGJlIHJldHVybmVkLAorICogcmVnYXJkbGVzcyBvZiBiZWluZyBhIGxlYWYgbm9k
ZS4KKyAqIE90aGVyd2lzZSwgZm9yIHRoZSBuZXh0IG5vZGVzLCBvbmx5IGxlYWYgbm9kZXMgYXJl
IGNvbnNpZGVyZWQuCisgKiBAcGFyYW0gbm9kZSBub2RlIHRvIHN0YXJ0IHdpdGgsIHdpbGwgYmUg
dXBkYXRlZCBhY2NvcmRpbmdseQorICogQHJldHVybiByZW5kZXJlciBvciAwIGlmIG5vIGZvbGxv
d2luZyBub2RlIGhhcyBhIHJlbmRlcmVyLgorICovCitpbmxpbmUgUmVuZGVyT2JqZWN0ICpmaW5k
UmVuZGVyZXIoTm9kZUltcGwgKiZub2RlKSB7CisgIGlmICghbm9kZSkgcmV0dXJuIDA7CisgIFJl
bmRlck9iamVjdCAqciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgIHdoaWxlICghcikgeworICAgIG5v
ZGUgPSBub2RlLT5uZXh0TGVhZk5vZGUoKTsKKyAgICBpZiAoIW5vZGUpIGJyZWFrOworICAgIHIg
PSBub2RlLT5yZW5kZXJlcigpOworICB9CisgIHJldHVybiByOworfQorCisvKiogQnJpbmcgY2Fy
ZXQgaW5mb3JtYXRpb24gcG9zaXRpb24gaW50byBhIHNhbmUgc3RhdGUgKi8KK3N0YXRpYyB2b2lk
IHNhbml0aXplQ2FyZXRTdGF0ZShOb2RlSW1wbCAqJmNhcmV0Tm9kZSwgbG9uZyAmb2Zmc2V0KSB7
CisgIGVuc3VyZUxlYWZOb2RlKGNhcmV0Tm9kZSk7CisKKyAgLy8gRklYTUU6IHRoaXMgbGVhdmVz
IGNhcmV0Tm9kZSB1bnRvdWNoZWQgaWYgdGhlcmUgYXJlIG5vIG1vcmUgcmVuZGVyZXJzLgorICAv
LyBJdCBiZXR0ZXIgc2hvdWxkIHNlYXJjaCBiYWNrd2FyZHMgdGhlbi4KKyAgLy8gVGhpcyBzdGls
bCB3b24ndCBzb2x2ZSB0aGUgcHJvYmxlbSB3aGF0IHRvIGRvIGlmICpubyogZWxlbWVudCBoYXMg
YQorICAvLyByZW5kZXJlci4KKyAgTm9kZUltcGwgKnRtcE5vZGUgPSBjYXJldE5vZGU7CisgIGlm
IChmaW5kUmVuZGVyZXIodG1wTm9kZSkpIGNhcmV0Tm9kZSA9IHRtcE5vZGU7CisKKyAgbG9uZyBt
YXggPSBjYXJldE5vZGUtPm1heE9mZnNldCgpOworICBsb25nIG1pbiA9IGNhcmV0Tm9kZS0+bWlu
T2Zmc2V0KCk7CisgIGlmIChvZmZzZXQgPCBtaW4pIG9mZnNldCA9IG1pbjsKKyAgZWxzZSBpZiAo
b2Zmc2V0ID4gbWF4KSBvZmZzZXQgPSBtYXg7Cit9CisKKy8qKiBSZXR1cm5zIHRoZSBwcmV2aW91
cyByZW5kZXIgb2JqZWN0IHRoYXQgaXMgYSBsZWFmIG9iamVjdC4gKi8KK3N0YXRpYyBSZW5kZXJP
YmplY3QgKnByZXZMZWFmUmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCAqcikgeworICBSZW5kZXJP
YmplY3QgKm4gPSByLT5vYmplY3RBYm92ZSgpOworICB3aGlsZSAobiAmJiBuID09IHItPnBhcmVu
dCgpKSB7CisgICAgaWYgKG4tPnByZXZpb3VzU2libGluZygpKSByZXR1cm4gbi0+b2JqZWN0QWJv
dmUoKTsKKyAgICByID0gbjsKKyAgICBuID0gci0+cGFyZW50KCk7CisgIH0KKyAgcmV0dXJuIG47
Cit9CisKKy8qKiBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgcmVuZGVyIG9iamVjdCB0aGF0IGlzIGEg
bGVhZiBvYmplY3QuICovCitzdGF0aWMgUmVuZGVyT2JqZWN0ICpuZXh0TGVhZlJlbmRlck9iamVj
dChSZW5kZXJPYmplY3QgKnIpIHsKKyAgUmVuZGVyT2JqZWN0ICpuID0gci0+b2JqZWN0QmVsb3co
KTsKKyAgciA9IG47CisgIHdoaWxlIChuKSByID0gbiwgbiA9IG4tPmZpcnN0Q2hpbGQoKTsKKyAg
cmV0dXJuIHI7Cit9CisKKy8qKiBTZWVrcyB0aGUgbmV4dCBsZWFmIGlubGluZSBib3guCisgKi8K
K2lubGluZSBJbmxpbmVCb3ggKnNlZWtMZWFmSW5saW5lQm94KElubGluZUJveCAqYm94KSB7Cisg
IHdoaWxlIChib3ggJiYgYm94LT5pc0lubGluZUZsb3dCb3goKSkgeworLy8gICAgaWYgKGJveC0+
aXNJbmxpbmVGbG93Qm94KCkpIHsKKyAgICAgIGJveCA9IHN0YXRpY19jYXN0PElubGluZUZsb3dC
b3ggKj4oYm94KS0+Zmlyc3RDaGlsZCgpOworLy8gICAgZWxzZSBpZiAoYm94LT5vYmplY3QoKS0+
aXNGbG93KCkpCisvLyAgICAgIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckZsb3cgKj4oYm94LT5v
YmplY3QoKSktPmZpcnN0TGluZUJveCgpOworLy8gICAgZWxzZQorLy8gICAgICBicmVhazsKKyAg
fS8qd2VuZCovCisgIHJldHVybiBib3g7Cit9CisKKy8qKiBTZWVrcyB0aGUgbmV4dCBsZWFmIGlu
bGluZSBib3gsIGJlZ2lubmluZyBmcm9tIHRoZSBlbmQuCisgKi8KK2lubGluZSBJbmxpbmVCb3gg
KnNlZWtMZWFmSW5saW5lQm94RnJvbUVuZChJbmxpbmVCb3ggKmJveCkgeworICB3aGlsZSAoYm94
ICYmIGJveC0+aXNJbmxpbmVGbG93Qm94KCkpIHsKKyAgICAgIGJveCA9IHN0YXRpY19jYXN0PElu
bGluZUZsb3dCb3ggKj4oYm94KS0+bGFzdENoaWxkKCk7CisgIH0vKndlbmQqLworICBrZERlYnVn
KDYyMDApIDw8ICJzZWVrTGVhZkZyb21FbmQ6IGJveCAiIDw8IGJveCA8PCAoYm94ICYmIGJveC0+
aXNJbmxpbmVUZXh0Qm94KCkgPyBRU3RyaW5nKCIgY29udGFpbnMgXCIlMVwiIikuYXJnKFFDb25z
dFN0cmluZyhzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KGJveC0+b2JqZWN0KCkpLT5zdHItPnMr
Ym94LT5taW5PZmZzZXQoKSwgYm94LT5tYXhPZmZzZXQoKSAtIGJveC0+bWluT2Zmc2V0KCkpLnN0
cmluZygpKSA6IFFTdHJpbmc6Om51bGwpIDw8IGVuZGw7CisgIHJldHVybiBib3g7Cit9CisKKyNp
ZiAwCisvKiogVHJhdmVyc2VzIHVwIHRvIHRoZSBuZXh0IGxlYWYgaW5saW5lIGJveC4KKyAqIEBy
ZXR1cm4gbGVhZiBvciAwIGlmIHRoZXJlIGFyZSBubyBtb3JlCisgKi8KK3N0YXRpYyBJbmxpbmVC
b3ggKm5leHRMZWFmSW5saW5lQm94KElubGluZUJveCAqYm94KSB7CisgIHJldHVybiAwOworfQor
CisvKiogVHJhdmVyc2VzIHVwIHRvIHRoZSBwcmV2aW91cyBsZWFmIGlubGluZSBib3guCisgKiBA
cmV0dXJuIGxlYWYgb3IgMCBpZiB0aGVyZSBhcmUgbm8gbW9yZQorICovCitzdGF0aWMgSW5saW5l
Qm94ICpwcmV2TGVhZklubGluZUJveChJbmxpbmVCb3ggKmJveCkgeworICByZXR1cm4gMDsKK30K
KyNlbmRpZgorCit9LyplbmQgbmFtZXNwYWNlKi8KKworLy8gPT0gZW5kIGNhcmV0LXJlbGF0ZWQK
KyNlbmRpZiAvLyBLSFRNTF9OT19DQVJFVAorCiAjaWZuZGVmIFFUX05PX1RPT0xUSVAKIAogdm9p
ZCBLSFRNTFRvb2xUaXA6Om1heWJlVGlwKGNvbnN0IFFQb2ludCYgcCkKQEAgLTMyMiw2ICs1MTMs
OSBAQCB2b2lkIEtIVE1MVmlldzo6Y2xlYXIoKQogewogICAgIC8vIHdvcmsgYXJvdW5kIFFTY3Jv
bGx2aWV3J3MgdW5iZWxpZXZhYmxlIGJ1Z2dpbmVzcwogICAgIHNldFN0YXRpY0JhY2tncm91bmQo
dHJ1ZSk7CisjaWZuZGVmIEtIVE1MX05PX0NBUkVUCisgICAgY2FyZXRPZmYoKTsKKyNlbmRpZgog
CiAgICAgZC0+cmVzZXQoKTsKICAgICBraWxsVGltZXJzKCk7CkBAIC0zNTgsNiArNTUyLDEzIEBA
IHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydFJlc2l6ZUV2ZW50IChRUmUKIAogICAgIGlmIChkLT5s
YXlvdXRTY2hlZHVsaW5nRW5hYmxlZCkKICAgICAgICAgbGF5b3V0KCk7CisjaWZuZGVmIEtIVE1M
X05PX0NBUkVUCisgICAgZWxzZSB7CisgICAgICAgIGhpZGVDYXJldCgpOworICAgICAgICByZWNh
bGNBbmRTdG9yZUNhcmV0UG9zKCk7CisJc2hvd0NhcmV0KCk7CisgICAgfS8qZW5kIGlmKi8KKyNl
bmRpZgogCiAgICAgS0FwcGxpY2F0aW9uOjpzZW5kUG9zdGVkRXZlbnRzKHZpZXdwb3J0KCksIFFF
dmVudDo6UGFpbnQpOwogfQpAQCAtNDA5LDYgKzYxMCwyMiBAQCB2b2lkIEtIVE1MVmlldzo6ZHJh
d0NvbnRlbnRzKCBRUGFpbnRlciAqCiAgICAgICAgIH0KICAgICB9CiAKKyNpZm5kZWYgS0hUTUxf
Tk9fQ0FSRVQKKyAgICBpZiAoZC0+bV9jYXJldFZpZXdDb250ZXh0ICYmIGQtPm1fY2FyZXRWaWV3
Q29udGV4dC0+dmlzaWJsZSkgeworICAgICAgICBRUmVjdCBwb3MoZC0+bV9jYXJldFZpZXdDb250
ZXh0LT54LCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnksCisJCWQtPm1fY2FyZXRWaWV3Q29udGV4
dC0+d2lkdGgsIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+aGVpZ2h0KTsKKyAgICAgICAgaWYgKHBv
cy5pbnRlcnNlY3RzKFFSZWN0KGV4LCBleSwgZXcsIGVoKSkpIHsKKyAgICAgICAgICAgIHAtPnNl
dFJhc3Rlck9wKFhvclJPUCk7CisJICAgIHAtPnNldFBlbih3aGl0ZSk7CisJICAgIGlmIChwb3Mu
aGVpZ2h0KCkgPT0gMSkKKyAgICAgICAgICAgICAgcC0+ZHJhd0xpbmUocG9zLnRvcExlZnQoKSwg
cG9zLmJvdHRvbVJpZ2h0KCkpOworCSAgICBlbHNlIHsKKwkgICAgICBwLT5maWxsUmVjdChwb3Ms
IHdoaXRlKTsKKwkgICAgfS8qZW5kIGlmKi8KKwl9LyplbmQgaWYqLworICAgIH0vKmVuZCBpZiov
CisjZW5kaWYgLy8gS0hUTUxfTk9fQ0FSRVQKKwogICAgIGtodG1sOjpEcmF3Q29udGVudHNFdmVu
dCBldmVudCggcCwgZXgsIGV5LCBldywgZWggKTsKICAgICBRQXBwbGljYXRpb246OnNlbmRFdmVu
dCggbV9wYXJ0LCAmZXZlbnQgKTsKIApAQCAtNDU4LDYgKzY3NSwxMSBAQCB2b2lkIEtIVE1MVmll
dzo6bGF5b3V0KCkKICAgICAgICAgcm9vdC0+c2V0TWluTWF4S25vd24oZmFsc2UpOwogICAgICAg
ICByb290LT5zZXRMYXlvdXRlZChmYWxzZSk7CiAgICAgICAgIHJvb3QtPmxheW91dCgpOworI2lm
bmRlZiBLSFRNTF9OT19DQVJFVAorICAgICAgICBoaWRlQ2FyZXQoKTsKKwlyZWNhbGNBbmRTdG9y
ZUNhcmV0UG9zKCk7CisJc2hvd0NhcmV0KCk7CisjZW5kaWYKICAgICAgICAgaWYoIGQtPnJlcGFp
bnRMYXlvdXQgKQogICAgICAgICAgIHJvb3QtPnJlcGFpbnQoKTsKICAgICAgICAgLy9rZERlYnVn
KCA2MDAwICkgPDwgIlRJTUU6IGxheW91dCgpIGR0PSIgPDwgcXQuZWxhcHNlZCgpIDw8IGVuZGw7
CkBAIC03NDEsNiArOTYzLDE1IEBAIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlUmVsZWFz
ZUV2ZW4KIHZvaWQgS0hUTUxWaWV3OjprZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKl9rZSApCiB7
CiAKKyNpZm5kZWYgS0hUTUxfTk9fQ0FSRVQKKyAgICBpZiAobV9wYXJ0LT5pc0VkaXRhYmxlKCkg
fHwgbV9wYXJ0LT5pc0NhcmV0TW9kZSgpCisgICAgICAgIHx8IChtX3BhcnQtPnhtbERvY0ltcGwo
KSAmJiBtX3BhcnQtPnhtbERvY0ltcGwoKS0+Zm9jdXNOb2RlKCkKKwkgICAgJiYgbV9wYXJ0LT54
bWxEb2NJbXBsKCktPmZvY3VzTm9kZSgpLT5jb250ZW50RWRpdGFibGUoKSkpIHsKKyAgICAgIGNh
cmV0S2V5UHJlc3NFdmVudChfa2UpOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBL
SFRNTF9OT19DQVJFVAorCiAgICAgaWYgKG1fcGFydC0+eG1sRG9jSW1wbCgpKSB7CiAgICAgICAg
IGlmIChtX3BhcnQtPnhtbERvY0ltcGwoKS0+Zm9jdXNOb2RlKCkpCiAgICAgICAgICAgICBpZiAo
bV9wYXJ0LT54bWxEb2NJbXBsKCktPmZvY3VzTm9kZSgpLT5kaXNwYXRjaEtleUV2ZW50KF9rZSkp
CkBAIC03NTUsNiArOTg2LDcgQEAgdm9pZCBLSFRNTFZpZXc6OmtleVByZXNzRXZlbnQoIFFLZXlF
dmVudAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICB9CisKICAg
ICBpbnQgb2ZmcyA9IChjbGlwcGVyKCktPmhlaWdodCgpIDwgMzApID8gY2xpcHBlcigpLT5oZWln
aHQoKSA6IDMwOwogICAgIGlmIChfa2UtPnN0YXRlKCkgJiBRdDo6U2hpZnRCdXR0b24pCiAgICAg
ICBzd2l0Y2goX2tlLT5rZXkoKSkKQEAgLTkzMyw4ICsxMTY1LDExIEBAIGJvb2wgS0hUTUxWaWV3
Ojpmb2N1c05leHRQcmV2Q2hpbGQoIGJvb2wKICAgICAvLyBOb3cgdHJ5IHRvIGZpbmQgdGhlIG5l
eHQgY2hpbGQKICAgICBpZiAobV9wYXJ0LT54bWxEb2NJbXBsKCkpIHsKICAgICAgICAgZm9jdXNO
ZXh0UHJldk5vZGUobmV4dCk7Ci0gICAgICAgIGlmIChtX3BhcnQtPnhtbERvY0ltcGwoKS0+Zm9j
dXNOb2RlKCkgIT0gMCkKKyAgICAgICAgaWYgKG1fcGFydC0+eG1sRG9jSW1wbCgpLT5mb2N1c05v
ZGUoKSAhPSAwKSB7CisJICBrZERlYnVnKCkgPDwgImZvY3VzTm9kZS5uYW1lOiAiCisJICA8PCBt
X3BhcnQtPnhtbERvY0ltcGwoKS0+Zm9jdXNOb2RlKCktPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwg
ZW5kbDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBmb2N1cyBub2RlIGZvdW5kCisJICAg
IH0KICAgICB9CiAKICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlcmUgaXMgbm8gbmV4dC9wcmV2
aW91cyBjaGlsZCB0byBnbyB0bywgc28gcGFzcyB1cCB0byB0aGUgbmV4dC9wcmV2aW91cyBjaGls
ZCBpbiBvdXIgcGFyZW50CkBAIC0xMTAxLDYgKzEzMzYsMTcgQEAgdm9pZCBLSFRNTFZpZXc6OmZv
Y3VzTmV4dFByZXZOb2RlKGJvb2wgbgogICAgIGVsc2UKICAgICAvLyBTY3JvbGwgdGhlIHZpZXcg
YXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgZm9jdXMgbm9kZSBpcyB2aXNpYmxl
CiAgICAgeworI2lmbmRlZiBLSFRNTF9OT19DQVJFVAorICAgICAgICAvLyBpZiBpdCdzIGFuIGVk
aXRhYmxlIGVsZW1lbnQsIGFjdGl2YXRlIHRoZSBjYXJldAorICAgICAgICBpZiAoIW1fcGFydC0+
aXNDYXJldE1vZGUoKSAmJiAhbV9wYXJ0LT5pc0VkaXRhYmxlKCkKKwkJJiYgbmV3Rm9jdXNOb2Rl
LT5jb250ZW50RWRpdGFibGUoKSkgeworCSAgICBkLT5jYXJldFZpZXdDb250ZXh0KCk7CisJICAg
IG1vdmVDYXJldFRvKG5ld0ZvY3VzTm9kZSwgMEwsIHRydWUpOworICAgICAgICB9IGVsc2Ugewor
CSAgICBjYXJldE9mZigpOworCX0KKyNlbmRpZiAvLyBLSFRNTF9OT19DQVJFVAorCiAgICAgICBp
ZiAob2xkRm9jdXNOb2RlKQogCXsKIAkgIGlmICghc2Nyb2xsVG8obmV3Rm9jdXNOb2RlLT5nZXRS
ZWN0KCkpKQpAQCAtMTExMSw2ICsxMzU3LDcgQEAgdm9pZCBLSFRNTFZpZXc6OmZvY3VzTmV4dFBy
ZXZOb2RlKGJvb2wgbgogCSAgZW5zdXJlVmlzaWJsZShjb250ZW50c1goKSwgbmV4dD8wOmNvbnRl
bnRzSGVpZ2h0KCkpOwogCSAgLy9yZXR1cm47CiAJfQorCiAgICAgfQogCiAgICAgLy8gU2V0IGZv
Y3VzIG5vZGUgb24gdGhlIGRvY3VtZW50CkBAIC0xNjA1LDkgKzE4NTIsMTYgQEAgdm9pZCBLSFRN
TFZpZXc6OmRyb3BFdmVudCggUURyb3BFdmVudCAqZQogICAgIFFTY3JvbGxWaWV3Ojpkcm9wRXZl
bnQoIGV2ICk7CiB9CiAKK3ZvaWQgS0hUTUxWaWV3Ojpmb2N1c0luRXZlbnQoIFFGb2N1c0V2ZW50
ICplICkKK3sKKyAgICBzaG93Q2FyZXQoKTsKKyAgICBRU2Nyb2xsVmlldzo6Zm9jdXNJbkV2ZW50
KCBlICk7Cit9CisKIHZvaWQgS0hUTUxWaWV3Ojpmb2N1c091dEV2ZW50KCBRRm9jdXNFdmVudCAq
ZSApCiB7CiAgICAgaWYobV9wYXJ0KSBtX3BhcnQtPnN0b3BBdXRvU2Nyb2xsKCk7CisgICAgaGlk
ZUNhcmV0KCk7CiAgICAgUVNjcm9sbFZpZXc6OmZvY3VzT3V0RXZlbnQoIGUgKTsKIH0KIApAQCAt
MTY1NCw2ICsxOTA4LDIwIEBAIHZvaWQgS0hUTUxWaWV3Ojp0aW1lckV2ZW50ICggUVRpbWVyRXZl
bnQKICAgICAgICAgZC0+ZGlydHlMYXlvdXQgPSB0cnVlOwogICAgICAgICBsYXlvdXQoKTsKICAg
ICB9CisjaWZuZGVmIEtIVE1MX05PX0NBUkVUCisgICAgZWxzZSBpZiAoZC0+bV9jYXJldFZpZXdD
b250ZXh0CisgICAgCSAgICAgJiYgZS0+dGltZXJJZCgpID09IGQtPm1fY2FyZXRWaWV3Q29udGV4
dC0+ZnJlcVRpbWVySWQpIHsKKyAgICAgICAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT52aXNpYmxl
ID0gIWQtPm1fY2FyZXRWaWV3Q29udGV4dC0+dmlzaWJsZTsKKwlpZiAoZC0+bV9jYXJldFZpZXdD
b250ZXh0LT5kaXNwbGF5ZWQpIHsKKwkgICAgdXBkYXRlQ29udGVudHMoZC0+bV9jYXJldFZpZXdD
b250ZXh0LT54LCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnksCisJCQlkLT5tX2NhcmV0Vmlld0Nv
bnRleHQtPndpZHRoLAorCQkJZC0+bV9jYXJldFZpZXdDb250ZXh0LT5oZWlnaHQpOworCX0vKmVu
ZCBpZiovCisvLwlpZiAoZC0+bV9jYXJldFZpZXdDb250ZXh0LT52aXNpYmxlKSBjb3V0IDw8ICJ8
IiA8PCBmbHVzaDsKKy8vCWVsc2UgY291dCA8PCAisCIgPDwgZmx1c2g7CisJcmV0dXJuOworICAg
IH0KKyNlbmRpZgogCiAgICAgaWYoIG1fcGFydC0+eG1sRG9jSW1wbCgpICkgewogCURPTTo6RG9j
dW1lbnRJbXBsICpkb2N1bWVudCA9IG1fcGFydC0+eG1sRG9jSW1wbCgpOwpAQCAtMTczNiw2ICsy
MDA0LDcgQEAgdm9pZCBLSFRNTFZpZXc6OnNjaGVkdWxlUmVwYWludChpbnQgeCwgaQogICAgIH0g
ZWxzZQogICAgICAgICBkLT51cGRhdGVSZWN0ID0gUVJlY3QoeCx5LHcsaCk7CiAKKy8vCWtkRGVi
dWcoNjAwMCkgPDwgInNjaGVkdWxlZCByZXBhaW50IGZvciAiIDw8IGQtPnVwZGF0ZVJlY3QgPDwg
ZW5kbDsKICAgICBkLT5yZXBhaW50VGltZXJJZCA9IHN0YXJ0VGltZXIoIHRpbWUgKTsKIAogLy8g
ICAgIGtkRGVidWcoKSA8PCAic3RhcnRpbmcgdGltZXIgIiA8PCB0aW1lIDw8IGVuZGw7CkBAIC0x
NzY1LDMgKzIwMzQsMTk0NCBAQCB2b2lkIEtIVE1MVmlldzo6Y29tcGxldGUoKQogICAgICAgICBk
LT5yZXBhaW50VGltZXJJZCA9IHN0YXJ0VGltZXIoIDIwICk7CiAgICAgfQogfQorCisjaWZuZGVm
IEtIVE1MX05PX0NBUkVUCisvLyA9PSBjYXJldC1yZWxhdGVkIHN0dWZmID09CisKK25hbWVzcGFj
ZSBraHRtbCB7CisKK2NsYXNzIExpbmVhckRvY3VtZW50OworCitzdGF0aWMgSW5saW5lRmxvd0Jv
eCAqZmluZEZsb3dCb3goRE9NOjpOb2RlSW1wbCAqbm9kZSwgbG9uZyBvZmZzZXQsCisJCVJlbmRl
ckFyZW5hICphcmVuYSwgUmVuZGVyRmxvdyAqJmNiKTsKKworLyoqCisgKiBJdGVyYXRlcyB0aHJv
dWdoIHRoZSBsaW5lcyBvZiBhIGRvY3VtZW50LgorICoKKyAqIFRoZSBsaW5lIGl0ZXJhdG9yIGJl
Y29tZXMgaW52YWxpZCB3aGVuIHRoZSBhc3NvY2lhdGVkIExpbmVhckRvY3VtZW50IG9iamVjdAor
ICogaXMgZGVzdHJveWVkLgorICogQHNpbmNlIDMuMgorICogQGludGVybmFsCisgKiBAYXV0aG9y
IExlbyBTYXZlcm5paworICovCitjbGFzcyBMaW5lSXRlcmF0b3IgeworcHJvdGVjdGVkOgorICBM
aW5lYXJEb2N1bWVudCAqbGluZXM7CS8vIGFzc29jaWF0ZWQgZG9jdW1lbnQKKyAgUmVuZGVyRmxv
dyAqY2I7CQkvLyBjb250YWluaW5nIGJsb2NrCisgIElubGluZUZsb3dCb3ggKmZsb3dCb3g7CS8v
IHRoZSBsaW5lIGl0c2VsZgorCisgIC8vIE5vdGU6IGNiID09IDAgaW5kaWNhdGVzIGEgcG9zaXRp
b24gYmV5b25kIHRoZSBiZWdpbm5pbmcgb3IgdGhlCisgIC8vIGVuZCBvZiBhIGRvY3VtZW50Lgor
CisgIC8qKiBEZWZhdWx0IGNvbnN0cnVjdG9yLCBvbmx5IGZvciBpbnRlcm5hbCB1c2UKKyAgICov
CisgIExpbmVJdGVyYXRvcigpIHt9CisKKyAgLyoqIEluaXRpYWxpemVzIGEgbmV3IGl0ZXJhdG9y
LgorICAgKgorICAgKiBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIG5laXRoZXIgY2FyZXMgYWJvdXQg
dGhlIGNvcnJlY3RuZXNzIG9mIEBwIG5vZGUKKyAgICogbm9yIGFib3V0IEBwIG9mZnNldC4gSXQg
aXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gZW5zdXJlCisgICAqIHRoYXQg
Ym90aCBwb2ludCB0byB2YWxpZCBwbGFjZXMuCisgICAqLworICBMaW5lSXRlcmF0b3IoTGluZWFy
RG9jdW1lbnQgKmwsIERPTTo6Tm9kZUltcGwgKm5vZGUsIGxvbmcgb2Zmc2V0KTsKKworcHVibGlj
OgorICAvKiogZGVyZWZlcmVuY2VzIGN1cnJlbnQgbGluZS4KKyAgICoKKyAgICogTm90ZTogVGhl
IHJldHVybmVkIGlubGluZSBmbG93IGJveCBtYXkgYmUgZW1wdHkuIFRoaXMgZG9lcyA8Yj5ub3Q8
Yj4KKyAgICoJaW5kaWNhdGUgdGhlIGVuZAorICAgKglvZiB0aGUgZG9jdW1lbnQsIGJ1dCBtZXJl
bHkgdGhhdCB0aGUgY3VycmVudCBwYXJhZ3JhcGggZG9lcyBub3QgY29udGFpbgorICAgKglhbnkg
bGluZXMuCisgICAqLworICBJbmxpbmVGbG93Qm94ICpvcGVyYXRvciAqKCkgY29uc3QgeyByZXR1
cm4gZmxvd0JveDsgfQorCisgIC8qKiBzZWVrIG5leHQgbGluZQorICAgKgorICAgKiBHdWFyYW50
ZWVkIHRvIGNyYXNoIGlmIGJleW9uZCBiZWdpbm5pbmcvZW5kIG9mIGRvY3VtZW50LgorICAgKi8K
KyAgTGluZUl0ZXJhdG9yICZvcGVyYXRvciArKygpOworICAvKiogc2VlayBuZXh0IGxpbmUuCisg
ICAqCisgICAqIEd1YXJhbnRlZWQgdG8gY3Jhc2ggaWYgYmV5b25kIGJlZ2lubmluZy9lbmQgb2Yg
ZG9jdW1lbnQuCisgICAqCisgICAqIE5vdGU6IFRoZSBwb3N0Zml4IG9wZXJhdG9yIGlzIHNsb3cu
IFVzZSB0aGUgcHJlZml4IG9wZXJhdG9yIHdoZW5ldmVyCisgICAqIHBvc3NpYmxlLgorICAgKi8K
KyAgTGluZUl0ZXJhdG9yIG9wZXJhdG9yICsrKGludCk7CisKKyAgLyoqIHNlZWsgcHJldmlvdXMg
bGluZS4KKyAgICoKKyAgICogR3VhcmFudGVlZCB0byBjcmFzaCBpZiBiZXlvbmQgYmVnaW5uaW5n
L2VuZCBvZiBkb2N1bWVudC4KKyAgICovCisgIExpbmVJdGVyYXRvciAmb3BlcmF0b3IgLS0oKTsK
KyAgLyoqIHNlZWsgcHJldmlvdXMgbGluZS4KKyAgICoKKyAgICogR3VhcmFudGVlZCB0byBjcmFz
aCBpZiBiZXlvbmQgYmVnaW5uaW5nL2VuZCBvZiBkb2N1bWVudC4KKyAgICoKKyAgICogTm90ZTog
VGhlIHBvc3RmaXggb3BlcmF0b3IgaXMgc2xvdy4gVXNlIHRoZSBwcmVmaXggb3BlcmF0b3Igd2hl
bmV2ZXIKKyAgICogcG9zc2libGUuCisgICAqLworICBMaW5lSXRlcmF0b3Igb3BlcmF0b3IgLS0o
aW50KTsKKworICAvKiogZG9lcyBwb2ludGVyIGFyaXRobWV0aWMuCisgICAqCisgICAqIFRoaXMg
ZnVuY3Rpb24gaXMgTygxKSBmb3IgdmFsdWVzIG9mICsvLTEsIE8obikgb3RoZXJ3aXNlLgorICAg
KiBAcGFyYW0gc3VtbWFuZCBhZGQgdGhlc2UgbWFueSBsaW5lcworICAgKi8KKyAgTGluZUl0ZXJh
dG9yIG9wZXJhdG9yICsoaW50IHN1bW1hbmQpIGNvbnN0OworICAvKiogZG9lcyBwb2ludGVyIGFy
aXRobWV0aWMuCisgICAqCisgICAqIFRoaXMgZnVuY3Rpb24gaXMgTygxKSBmb3IgdmFsdWVzIG9m
ICsvLTEsIE8obikgb3RoZXJ3aXNlLgorICAgKiBAcGFyYW0gc3VtbWFuZCBhZGQgdGhlc2UgbWFu
eSBsaW5lcworICAgKi8KKyAgTGluZUl0ZXJhdG9yIG9wZXJhdG9yIC0oaW50IHN1bW1hbmQpIGNv
bnN0OworCisgIC8qKiBkb2VzIHBvaW50ZXIgYXJpdGhtZXRpYyBhbmQgYXNzaWdubWVudC4KKyAg
ICoKKyAgICogVGhpcyBmdW5jdGlvbiBpcyBPKDEpIGZvciB2YWx1ZXMgb2YgKy8tMSwgTyhuKSBv
dGhlcndpc2UuCisgICAqIEBwYXJhbSBzdW1tYW5kIGFkZCB0aGVzZSBtYW55IGxpbmVzCisgICAq
LworICBMaW5lSXRlcmF0b3IgJm9wZXJhdG9yICs9KGludCBzdW1tYW5kKTsKKyAgLyoqIGRvZXMg
cG9pbnRlciBhcml0aG1ldGljIGFuZCBhc3NpZ25tZW50LgorICAgKgorICAgKiBUaGlzIGZ1bmN0
aW9uIGlzIE8oMSkgZm9yIHZhbHVlcyBvZiArLy0xLCBPKG4pIG90aGVyd2lzZS4KKyAgICogQHBh
cmFtIHN1bW1hbmQgYWRkIHRoZXNlIG1hbnkgbGluZXMKKyAgICovCisgIExpbmVJdGVyYXRvciAm
b3BlcmF0b3IgLT0oaW50IHN1bW1hbmQpOworCisgIC8qKiBjb21wYXJlcyB0d28gaXRlcmF0b3Jz
LiBUaGUgY29tcGFyYXRvciBhY3R1YWxseSB3b3JrcyBvbmx5IGZvcgorICAgKiBjb21wYXJpbmcg
YXJiaXRyYXJ5IGl0ZXJhdG9ycyB0byBiZWdpbigpIGFuZCBlbmQoKS4KKyAgICovCisgIGJvb2wg
b3BlcmF0b3IgPT0oY29uc3QgTGluZUl0ZXJhdG9yICZpdCkgY29uc3QgeworICAgIHJldHVybiBs
aW5lcyA9PSBpdC5saW5lcworICAgIAkJJiYgZmxvd0JveCA9PSBpdC5mbG93Qm94ICYmIGNiID09
IGl0LmNiOworICB9CisKKyAgLyoqIGNvbXBhcmVzIHR3byBpdGVyYXRvcnMKKyAgICovCisgIGJv
b2wgb3BlcmF0b3IgIT0oY29uc3QgTGluZUl0ZXJhdG9yICZpdCkgY29uc3QgeworICAgIHJldHVy
biAhb3BlcmF0b3IgPT0oaXQpOworICB9CisKK3Byb3RlY3RlZDoKKworICBmcmllbmQgY2xhc3Mg
SW5saW5lQm94SXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyBFZGl0YWJsZUlubGluZUJveEl0ZXJh
dG9yOworICBmcmllbmQgY2xhc3MgTGluZWFyRG9jdW1lbnQ7Cit9OworCisvKioKKyAqIFJlcHJl
c2VudHMgdGhlIHdob2xlIGRvY3VtZW50IGluIHRlcm1zIG9mIGxpbmVzLgorICoKKyAqIFNHTUwg
ZG9jdW1lbnRzIGFyZSB0cmVlcy4gQnV0IGZvciBuYXZpZ2F0aW9uLCB0aGlzIHJlcHJlc2VudGF0
aW9uIGlzCisgKiBub3QgcHJhY3RpY2FsLiBUaGVyZWZvcmUgdGhpcyBjbGFzcyBzZXJ2ZXMgYXMg
YSBoZWxwZXIgdG8gcmVwcmVzZW50IHRoZQorICogZG9jdW1lbnQgYXMgYSBsaW5lYXIgbGlzdCBv
ZiBsaW5lcy4gSXRzIHVzYWdlIHNvbWV3aGF0IHJlc2VtYmxlcyBTVEwKKyAqIHNlbWFudGljcyBs
aWtlIEByZWYgYmVnaW4gYW5kIEByZWYgZW5kIGFzIHdlbGwgYXMgaXRlcmF0b3JzLgorICoKKyAq
IFRoZSBsaW5lcyBpdHNlbGYgYXJlIHJlcHJlc2VudGVkIGFzIHBvaW50ZXJzIHRvIElubGluZUZs
b3dCb3ggb2JqZWN0cy4KKyAqCisgKiBMaW5lYXJEb2N1bWVudCBpbnN0YW5jZXMgYXJlIG5vdCBt
ZWFudCB0byBiZSBrZXB0IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZWlyCisgKiBhc3NvY2lhdGVk
IGRvY3VtZW50LCBidXQgY29uc3RydWN0ZWQgZnJvbSAobm9kZSwgb2Zmc2V0KSBwYWlycyB3aGVu
ZXZlciBsaW5lCisgKiB0cmF2ZXJzYWwgaXMgbmVlZGVkLiBUaGlzIGlzIGJlY2F1c2UgdGhlIHVu
ZGVybHlpbmcgSW5saW5lRmxvd0JveCBvYmplY3RzCisgKiBtYXkgYmUgZGVzdHJveWVkIGFuZCBy
ZWNyZWF0ZWQgKGUuIGcuIGJ5IHJlc2l6aW5nIHRoZSB3aW5kb3csIGFkZGluZy9yZW1vdmluZwor
ICogZWxlbWVudHMpLgorICoKKyAqIEBhdXRob3IgTGVvIFNhdmVybmlrCisgKiBAc2luY2UgMy4y
CisgKiBAaW50ZXJuYWwKKyAqLworY2xhc3MgTGluZWFyRG9jdW1lbnQgeworcHVibGljOgorICB0
eXBlZGVmIExpbmVJdGVyYXRvciBJdGVyYXRvcjsKKworICAvKioKKyAgICogQ3JlYXRlcyBhIG5l
dyBpbnN0YW5jZSwgYW5kIGluaXRpYWxpemVzIGl0IHRvIHRoZSBsaW5lIHNwZWNpZmllZCBieQor
ICAgKiB0aGUgcGFyYW1ldGVycyBiZWxvdy4KKyAgICoKKyAgICogQ3JlYXRpb24gd2lsbCBmYWls
IGlmIEBwIG5vZGUgaXMgaW52aXNpYmxlIG9yIGRlZmVjdC4KKyAgICogQHBhcmFtIHBhcnQgcGFy
dCB3aXRoaW4gd2hpY2ggZXZlcnl0aGluZyBpcyB0YWtpbmcgcGxhY2UuCisgICAqIEBwYXJhbSBu
b2RlIGRvY3VtZW50IG5vZGUgd2l0aCB3aGljaCB0byBzdGFydAorICAgKiBAcGFyYW0gb2Zmc2V0
IHplcm8tYmFzZWQgb2Zmc2V0IHdpdGhpbiB0aGlzIG5vZGUuCisgICAqLworICBMaW5lYXJEb2N1
bWVudChLSFRNTFBhcnQgKnBhcnQsIERPTTo6Tm9kZUltcGwgKm5vZGUsIGxvbmcgb2Zmc2V0KTsK
KworICB2aXJ0dWFsIH5MaW5lYXJEb2N1bWVudCgpOworCisgIC8qKgorICAgKiBUZWxscyB3aGV0
aGVyIHRoaXMgbGlzdCBjb250YWlucyBhbnkgbGluZXMuCisgICAqCisgICAqIEByZXR1cm5zIEBw
IHRydWUgaWYgdGhpcyBkb2N1bWVudCBjb250YWlucyBsaW5lcywgQHAgZmFsc2Ugb3RoZXJ3aXNl
LiBOb3RlCisgICAqCXRoYXQgYW4gZW1wdHkgZG9jdW1lbnQgY29udGFpbnMgYXQgbGVhc3Qgb25l
IGxpbmUsIHNvIHRoaXMgbWV0aG9kCisgICAqCW9ubHkgcmV0dXJucyBAcCBmYWxzZSBpZiB0aGUg
ZG9jdW1lbnQgY291bGQgbm90IGJlIGluaXRpYWxpc2VkIGZvcgorICAgKglzb21lIHJlYXNvbi4K
KyAgICovCisgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgLy8gRklYTUU6IG5vdCB5ZXQgaW1wbCdk
CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgY291bnQg
b2YgbGluZXMuCisgICAqCisgICAqIFdhcm5pbmc6IFRoaXMgZnVuY3Rpb24gaXMgZXhwZW5zaXZl
LiBDYWxsIGl0IG9uY2UgYW5kIGNhY2hlIHRoZSB2YWx1ZS4KKyAgICoKKyAgICogRklYTUU6IEl0
J3Mgbm90IGltcGxlbWVudGVkIHlldCAoYW5kIG1heWJlIG5ldmVyIHdpbGwpCisgICAqLworICBp
bnQgY291bnQoKSBjb25zdDsKKworICAvKioKKyAgICogUmV0dXJucyBhIGxpbmUgaXRlcmF0b3Ig
Y29udGFpbmluZyB0aGUgY3VycmVudCBwb3NpdGlvbiBhcyBpdHMgc3RhcnRpbmcKKyAgICogdmFs
dWUuCisgICAqLworICBJdGVyYXRvciBjdXJyZW50KCk7CisKKyAgLyoqCisgICAqIFJldHVybnMg
YSBsaW5lIGl0ZXJhdG9yIHBvaW50aW5nIHJpZ2h0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGRvY3Vt
ZW50LgorICAgKi8KKyAgY29uc3QgSXRlcmF0b3IgJmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9lbmQ7
IH0KKyAgICAgCisgIC8qKgorICAgKiBSZXR1cm5zIGEgbGluZSBpdGVyYXRvciBwb2ludGluZyB0
byB0aGUgdmVyeSBsYXN0IGxpbmUgb2YgdGhlIGRvY3VtZW50LgorICAgKi8KKyAgSXRlcmF0b3Ig
cHJlRW5kKCk7CisKKyAgLyoqCisgICAqIFJldHVybnMgYSBsaW5lIGl0ZXJhdG9yIHBvaW50aW5n
IHRvIHRoZSB2ZXJ5IGZpcnN0IGxpbmUgb2YgdGhlIGRvY3VtZW50LgorICAgKi8KKyAgSXRlcmF0
b3IgYmVnaW4oKTsKKworICAvKioKKyAgICogUmV0dXJucyBhIGxpbmUgaXRlcmF0b3IgcG9pbnRp
bmcganVzdCBiZWZvcmUgdGhlIHZlcnkgZmlyc3QgbGluZSBvZiB0aGUKKyAgICogZG9jdW1lbnQg
KHRoaXMgaXMgc29tZXdoYXQgYW4gZW11bGF0aW9uIG9mIHJldmVyc2UgaXRlcmF0b3JzKS4KKyAg
ICovCisgIGNvbnN0IEl0ZXJhdG9yICZwcmVCZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVCZWdp
bjsgfQorCitwcm90ZWN0ZWQ6CisgIHZvaWQgaW5pdFByZUJlZ2luSXRlcmF0b3IoKTsKKyAgdm9p
ZCBpbml0RW5kSXRlcmF0b3IoKTsKKworcHJvdGVjdGVkOgorICBSZW5kZXJBcmVuYSAqYXJlbmE7
CQkvLyBXZSBuZWVkIGFuIGFyZW5hIGZvciBpbnRlcm1lZGlhdGUgcmVuZGVyCisgIAkJCQkvLyBv
YmplY3RzIHRoYXQgaGF2ZSBubyBvd24gaW5saW5lIGJveAorICBET006Ok5vZGVJbXBsICpub2Rl
OworICBsb25nIG9mZnNldDsKKworICBJdGVyYXRvciBfcHJlQmVnaW47CisgIEl0ZXJhdG9yIF9l
bmQ7CisKKyAgS0hUTUxQYXJ0ICptX3BhcnQ7CisKKyAgZnJpZW5kIGNsYXNzIExpbmVJdGVyYXRv
cjsKKyAgZnJpZW5kIGNsYXNzIEVkaXRhYmxlTGluZUl0ZXJhdG9yOworICBmcmllbmQgY2xhc3Mg
SW5saW5lQm94SXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyBFZGl0YWJsZUlubGluZUJveEl0ZXJh
dG9yOworICBmcmllbmQgY2xhc3MgRWRpdGFibGVDaGFyYWN0ZXJJdGVyYXRvcjsKK307CisKKy8q
KgorICogSXRlcmF0ZXMgb3ZlciB0aGUgaW5uZXIgZWxlbWVudHMgb2YgYW4gaW5saW5lIGZsb3cg
Ym94LgorICoKKyAqIFRoZSBnaXZlbiBpbmxpbmUgZmxvdyBib3ggbXVzdCBiZSBhIGxpbmUgYm94
LiBUaGUgaW5jcmVtZW50b3Igd2lsbAorICogdHJhdmVyc2UgYWxsIGxlYWYgaW5saW5lIGJveGVz
LiBJdCB3aWxsIGFsc28gZ2VuZXJhdGUgdHJhbnNpZW50IGlubGluZSBib3hlcworICogZm9yIHRo
b3NlIHJlbmRlciBvYmplY3RzIHRoYXQgZG8gbm90IGhhdmUgb25lLgorICogQGF1dGhvciBMZW8g
U2F2ZXJuaWsKKyAqIEBpbnRlcm5hbAorICogQHNpbmNlIDMuMgorICovCitjbGFzcyBJbmxpbmVC
b3hJdGVyYXRvciB7Citwcm90ZWN0ZWQ6CisgIFJlbmRlckFyZW5hICphcmVuYTsJLy8gYXJlbmEg
Zm9yIGFsbG9jYXRpbmcgdHJhbnNpZW50IGlubGluZSBib3hlcworICBJbmxpbmVCb3ggKmJveDsJ
Ly8gY3VycmVudGx5IHRyYXZlcnNlZCBpbmxpbmUgYm94CisKK3B1YmxpYzoKKyAgLyoqIGNyZWF0
ZXMgYSBuZXcgaXRlcmF0b3IsIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIGZsb3cgYm94Lgor
ICAgKi8KKyAgSW5saW5lQm94SXRlcmF0b3IoUmVuZGVyQXJlbmEgKmFyZW5hLCBJbmxpbmVGbG93
Qm94ICpmbG93Qm94LCBib29sIGZyb21FbmQgPSBmYWxzZSkgOiBhcmVuYShhcmVuYSkgeworICAg
IGJveCA9IGZyb21FbmQgPyBzZWVrTGVhZklubGluZUJveEZyb21FbmQoZmxvd0JveCkgOiBzZWVr
TGVhZklubGluZUJveChmbG93Qm94KTsKKyAgfQorCisgIC8qKiBjcmVhdGVzIGEgbmV3IGl0ZXJh
dG9yLCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiBsaW5lIGl0ZXJhdG9yCisgICAqLworICBJ
bmxpbmVCb3hJdGVyYXRvcihMaW5lSXRlcmF0b3IgJmxpdCwgYm9vbCBmcm9tRW5kID0gZmFsc2Up
IDogYXJlbmEobGl0LmxpbmVzLT5hcmVuYSkgeworICAgIGJveCA9IGZyb21FbmQgPyBzZWVrTGVh
ZklubGluZUJveEZyb21FbmQoKmxpdCkgOiBzZWVrTGVhZklubGluZUJveCgqbGl0KTsKKyAgfQor
ICAKKyAgLyoqIGVtcHR5IGNvbnN0cnVjdG9yLgorICAgKi8KKyAgSW5saW5lQm94SXRlcmF0b3Io
KSB7fQorCisgIC8qKiByZXR1cm5zIHRoZSBjdXJyZW50IGxlYWYgaW5saW5lIGJveC4KKyAgICoK
KyAgICogQHJldHVybiB0aGUgYm94IG9yIDAgaWYgdGhlIGVuZCBoYXMgYmVlbiByZWFjaGVkLgor
ICAgKi8KKyAgSW5saW5lQm94ICpvcGVyYXRvciAqKCkgY29uc3QgeyByZXR1cm4gYm94OyB9CisK
KyAgLyoqIGluY3JlbWVudHMgdGhlIGl0ZXJhdG9yIHRvIHBvaW50IHRvIHRoZSBuZXh0IGlubGlu
ZSBib3ggb24gdGhpcyBsaW5lIGJveC4KKyAgICovCisgIElubGluZUJveEl0ZXJhdG9yICZvcGVy
YXRvciArKygpIHsKKyAgICBJbmxpbmVCb3ggKm5ld0JveCA9IGJveC0+bmV4dE9uTGluZSgpOwor
CisgICAgaWYgKG5ld0JveCkKKyAgICAgIGJveCA9IHNlZWtMZWFmSW5saW5lQm94KG5ld0JveCk7
CisgICAgZWxzZSB7CisgICAgICBJbmxpbmVGbG93Qm94ICpmbG93Qm94ID0gYm94LT5wYXJlbnQo
KTsKKyAgICAgIGJveCA9IDA7CisgICAgICB3aGlsZSAoZmxvd0JveCkgeworICAgICAgICBJbmxp
bmVCb3ggKm5ld0JveDIgPSBmbG93Qm94LT5uZXh0T25MaW5lKCk7CisJaWYgKG5ld0JveDIpIHsK
KwkgIGJveCA9IHNlZWtMZWFmSW5saW5lQm94KG5ld0JveDIpOworCSAgYnJlYWs7CisJfS8qZW5k
IGlmKi8KKworCWZsb3dCb3ggPSBmbG93Qm94LT5wYXJlbnQoKTsKKyAgICAgIH0vKndlbmQqLwor
ICAgIH0vKmVuZCBpZiovCisKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvKiogZGVjcmVt
ZW50cyB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIHByZXZpb3VzIGlubGluZSBib3ggb24g
dGhpcworICAgKiBsaW5lIGJveC4KKyAgICovCisgIElubGluZUJveEl0ZXJhdG9yICZvcGVyYXRv
ciAtLSgpIHsKKyAgICBJbmxpbmVCb3ggKm5ld0JveCA9IGJveC0+cHJldk9uTGluZSgpOworCisg
ICAgaWYgKG5ld0JveCkKKyAgICAgIGJveCA9IHNlZWtMZWFmSW5saW5lQm94RnJvbUVuZChuZXdC
b3gpOworICAgIGVsc2UgeworICAgICAgSW5saW5lRmxvd0JveCAqZmxvd0JveCA9IGJveC0+cGFy
ZW50KCk7CisgICAgICBib3ggPSAwOworICAgICAgd2hpbGUgKGZsb3dCb3gpIHsKKyAgICAgICAg
SW5saW5lQm94ICpuZXdCb3gyID0gZmxvd0JveC0+cHJldk9uTGluZSgpOworCWlmIChuZXdCb3gy
KSB7CisJICBib3ggPSBzZWVrTGVhZklubGluZUJveEZyb21FbmQobmV3Qm94Mik7CisJICBicmVh
azsKKwl9LyplbmQgaWYqLworCisJZmxvd0JveCA9IGZsb3dCb3gtPnBhcmVudCgpOworICAgICAg
fS8qd2VuZCovCisgICAgfS8qZW5kIGlmKi8KKworICAgIHJldHVybiAqdGhpczsKKyAgfQorCit9
OworCisvKioKKyAqIEl0ZXJhdGVzIG92ZXIgdGhlIGVkaXRhYmxlIGlubmVyIGVsZW1lbnRzIG9m
IGFuIGlubGluZSBmbG93IGJveC4KKyAqCisgKiBUaGUgZ2l2ZW4gaW5saW5lIGZsb3cgYm94IG11
c3QgYmUgYSBsaW5lIGJveC4gVGhlIGluY3JlbWVudG9yIHdpbGwKKyAqIHRyYXZlcnNlIGFsbCBs
ZWFmIGlubGluZSBib3hlcy4gSW4gY29udHJhc3QgdG8gQHAgSW5saW5lQm94SXRlcmF0b3IgdGhp
cworICogaXRlcmF0b3Igb25seSByZWdhcmRzIGlubGluZSBib3hlcyB3aGljaCBhcmUgZWRpdGFi
bGUuCisgKgorICogQGF1dGhvciBMZW8gU2F2ZXJuaWsKKyAqIEBpbnRlcm5hbAorICogQHNpbmNl
IDMuMgorICovCitjbGFzcyBFZGl0YWJsZUlubGluZUJveEl0ZXJhdG9yIDogcHVibGljIElubGlu
ZUJveEl0ZXJhdG9yIHsKK3Byb3RlY3RlZDoKKyAgS0hUTUxQYXJ0ICptX3BhcnQ7CisgIGJvb2wg
YWRqYWNlbnQ7CisKK3B1YmxpYzoKKyAgLyoqIGNyZWF0ZXMgYSBuZXcgaXRlcmF0b3IsIGluaXRp
YWxpemVkIHdpdGggdGhlIGdpdmVuIGZsb3cgYm94LgorICAgKiBAcGFyYW0gcGFydCBwYXJ0IHdp
dGhpbiB3aGljaCBhbGwgYWN0aW9ucyBhcmUgdGFraW5nIHBsYWNlLgorICAgKiBAcGFyYW0gYXJl
bmEgYXJlbmEgZm9yIHRyYW5zaWVudCBhbGxvY2F0aW9ucworICAgKiBAcGFyYW0gZmxvd0JveCBs
aW5lIGJveCB0byBiZSBpdGVyYXRlZAorICAgKiBAcGFyYW0gZnJvbUVuZCBAcCB0cnVlLCBzdGFy
dCB3aXRoIGxhc3QgYm94IGluIGxpbmUKKyAgICovCisgIEVkaXRhYmxlSW5saW5lQm94SXRlcmF0
b3IoS0hUTUxQYXJ0ICpwYXJ0LCBSZW5kZXJBcmVuYSAqYXJlbmEsCisgIAkJSW5saW5lRmxvd0Jv
eCAqZmxvd0JveCwgYm9vbCBmcm9tRW5kID0gZmFsc2UpCisgIAk6IElubGluZUJveEl0ZXJhdG9y
KGFyZW5hLCBmbG93Qm94LCBmcm9tRW5kKSwgbV9wYXJ0KHBhcnQpLCBhZGphY2VudCh0cnVlKQor
ICB7CisgICAgaWYgKGJveCAmJiAhaXNFZGl0YWJsZShib3gpKSBmcm9tRW5kID8gLS0qdGhpcyA6
ICsrKnRoaXM7CisgIH0KKworICAvKiogaW5pdGlhbGl6ZXMgYSBuZXcgaXRlcmF0b3IgZnJvbSB0
aGUgZ2l2ZW4gbGluZSBpdGVyYXRvcgorICAgKi8KKyAgRWRpdGFibGVJbmxpbmVCb3hJdGVyYXRv
cihMaW5lSXRlcmF0b3IgJmxpdCwgYm9vbCBmcm9tRW5kID0gZmFsc2UpCisgIAkJOiBJbmxpbmVC
b3hJdGVyYXRvcihsaXQsIGZyb21FbmQpLCBtX3BhcnQobGl0LmxpbmVzLT5tX3BhcnQpIHsKKyAg
ICBpZiAoYm94ICYmICFpc0VkaXRhYmxlKGJveCkpIGZyb21FbmQgPyAtLSp0aGlzIDogKysqdGhp
czsKKyAgfQorCisgIC8qKiBlbXB0eSBjb25zdHJ1Y3Rvci4gVXNlIG9ubHkgdG8gY29weSBhbm90
aGVyIGl0ZXJhdG9yIGludG8gdGhpcyBvbmUuCisgICAqLworICBFZGl0YWJsZUlubGluZUJveEl0
ZXJhdG9yKCkge30KKworICAvKiogcmV0dXJucyBAcCB0cnVlIHdoZW4gdGhlIGN1cnJlbnQgaW5s
aW5lIGJveCBpcyB2aXN1YWxseSBhZGphY2VudCB0byB0aGUKKyAgICogcHJldmlvdXMgaW5saW5l
IGJveCwgaS4gZS4gbm8gaW50ZXJ2ZW5pbmcgaW5saW5lIGJveGVzLgorICAgKi8KKyAgYm9vbCBp
c0FkamFjZW50KCkgY29uc3QgeyByZXR1cm4gYWRqYWNlbnQ7IH0KKworICAvKiogaW5jcmVtZW50
cyB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIG5leHQgZWRpdGFibGUgaW5saW5lIGJveAor
ICAgKiBvbiB0aGlzIGxpbmUgYm94LgorICAgKi8KKyAgRWRpdGFibGVJbmxpbmVCb3hJdGVyYXRv
ciAmb3BlcmF0b3IgKysoKSB7CisgICAgYWRqYWNlbnQgPSB0cnVlOworICAgIGRvIHsKKyAgICAg
IElubGluZUJveEl0ZXJhdG9yOjpvcGVyYXRvciArKygpOworICAgIH0gd2hpbGUgKGJveCAmJiAh
aXNFZGl0YWJsZShib3gpKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvKiogZGVjcmVt
ZW50cyB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIHByZXZpb3VzIGVkaXRhYmxlIGlubGlu
ZSBib3gKKyAgICogb24gdGhpcyBsaW5lIGJveC4KKyAgICovCisgIEVkaXRhYmxlSW5saW5lQm94
SXRlcmF0b3IgJm9wZXJhdG9yIC0tKCkgeworICAgIGFkamFjZW50ID0gdHJ1ZTsKKyAgICBkbyB7
CisgICAgICBJbmxpbmVCb3hJdGVyYXRvcjo6b3BlcmF0b3IgLS0oKTsKKyAgICB9IHdoaWxlIChi
b3ggJiYgIWlzRWRpdGFibGUoYm94KSk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKK3Byb3Rl
Y3RlZDoKKyAgLyoqIGZpbmRzIG91dCBpZiB0aGUgZ2l2ZW4gYm94IGlzIGVkaXRhYmxlLgorICAg
KiBAcGFyYW0gYiBnaXZlbiBpbmxpbmUgYm94CisgICAqIEByZXR1cm4gQHAgdHJ1ZSBpZiBib3gg
aXMgZWRpdGFibGUKKyAgICovCisgIGJvb2wgaXNFZGl0YWJsZShJbmxpbmVCb3ggKmIpIHsKKyAg
ICAvL2lmIChtX3BhcnQtPmlzQ2FyZXRNb2RlKCkgfHwgbV9wYXJ0LT5pc0VkaXRhYmxlKCkpIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgIAorICAgIFFfQVNTRVJUKGIpOworICAg
IFJlbmRlck9iamVjdCAqciA9IGItPm9iamVjdCgpOworICAgIGlmIChiLT5pc0lubGluZUZsb3dC
b3goKSkga2REZWJ1Zyg2MjAwKSA8PCAiYiBpcyBpbmxpbmUgZmxvdyBib3giIDw8IGVuZGw7Cisg
ICAgLy9rZERlYnVnKDYyMDApIDw8ICJpc0VkaXRhYmxlIHIiIDw8IHIgPDwgIjogIiA8PCAociA/
IHItPnJlbmRlck5hbWUoKSA6IFFTdHJpbmc6Om51bGwpIDw8IChyICYmIHItPmlzVGV4dCgpID8g
IiBjb250YWlucyBcIiIgKyBRU3RyaW5nKCgoUmVuZGVyVGV4dCAqKXIpLT5zdHItPnMsICgoUmVu
ZGVyVGV4dCAqKXIpLT5zdHItPmwpICsgIlwiIiA6IFFTdHJpbmc6Om51bGwpIDw8IGVuZGw7Cisg
ICAgLy8gTXVzdCBjaGVjayBjYXJldCBtb2RlIG9yIGRlc2lnbiBtb2RlICphZnRlciogciAmJiBy
LT5lbGVtZW50KCksIG90aGVyd2lzZQorICAgIC8vIGxpbmVzIHdpdGhvdXQgYSBiYWNraW5nIERP
TSBub2RlIGdldCByZWdhcmRlZC4KKyAgICAvLyAjIyMgY2hlY2sgc2hvdWxkIGFjdHVhbGx5IGJl
IGluIElubGluZUJveEl0ZXJhdG9yCisgICAgYm9vbCByZXN1bHQgPSByICYmIHItPmVsZW1lbnQo
KQorICAgIAkmJiAobV9wYXJ0LT5pc0NhcmV0TW9kZSgpIHx8IG1fcGFydC0+aXNFZGl0YWJsZSgp
CisgICAgICAgICAgIAl8fCByLT5zdHlsZSgpLT51c2VySW5wdXQoKSA9PSBVSV9FTkFCTEVEKTsK
KyAgICBpZiAoIXJlc3VsdCkgYWRqYWNlbnQgPSBmYWxzZTsKKyAgICByZXR1cm4gcmVzdWx0Owor
ICB9Cit9OworCisvKioKKyAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGVkaXRhYmxlIGxpbmVzIG9m
IGEgZG9jdW1lbnQuCisgKgorICogVGhpcyBpdGVyYXRvciwgb3Bwb3NpbmcgdG8gQHAgTGluZUl0
ZXJhdG9yLCBvbmx5IHJlZ2FyZHMgZWRpdGFibGUgbGluZXMuCisgKiBJZiBlaXRoZXIgQHJlZiBL
SFRNTFBhcnQ6OmVkaXRhYmxlIG9yIEByZWYgS0hUTUxQYXJ0OjpjYXJldE1vZGUgYXJlIHRydWUs
CisgKiB0aGlzIGNsYXNzIHdvcmtzIGV4YWN0bHkgYXMgaWYgaXQgd2VyZSBhIExpbmVJdGVyYXRv
ci4KKyAqCisgKiBUaGUgaXRlcmF0b3IgY2FuIGJlIGNvbXBhcmVkIHRvIG5vcm1hbCBMaW5lSXRl
cmF0b3JzLCBlc3BlY2lhbGx5IHRvCisgKiBAcmVmIExpbmVhckRvY3VtZW50OjpwcmVCZWdpbiBh
bmQgQHJlZiBMaW5lYXJEb2N1bWVudDo6ZW5kCisgKgorICogVGhlIGxpbmUgaXRlcmF0b3IgYmVj
b21lcyBpbnZhbGlkIHdoZW4gdGhlIGFzc29jaWF0ZWQgTGluZWFyRG9jdW1lbnQgb2JqZWN0Cisg
KiBpcyBkZXN0cm95ZWQuCisgKiBAc2luY2UgMy4yCisgKiBAaW50ZXJuYWwKKyAqIEBhdXRob3Ig
TGVvIFNhdmVybmlrCisgKi8KK2NsYXNzIEVkaXRhYmxlTGluZUl0ZXJhdG9yIDogcHVibGljIExp
bmVJdGVyYXRvciB7CitwdWJsaWM6CisgIC8qKiBJbml0aWFsaXplcyBhIG5ldyBpdGVyYXRvci4K
KyAgICoKKyAgICogVGhlIGl0ZXJhdG9yIGlzIHNldCB0byB0aGUgZmlyc3QgZm9sbG93aW5nIGVk
aXRhYmxlIGxpbmUgb3IgdG8gdGhlCisgICAqIGVuZCBpZiBubyBlZGl0YWJsZSBsaW5lIGZvbGxv
d3MuCisgICAqIEBwYXJhbSBpdCBhIGxpbmUgaXRlcmF0b3IgdG8gaW5pdGlhbGl6ZSB0aGlzIGZy
b20KKyAgICogQHBhcmFtIGZyb21FbmQgQHAgdHJ1ZSwgdHJhdmVyc2UgdG93YXJkcyB0aGUgYmVn
aW5uaW5nIGluIHNlYXJjaCBvZiBhbgorICAgKgllZGl0YWJsZSBsaW5lCisgICAqLworICBFZGl0
YWJsZUxpbmVJdGVyYXRvcihjb25zdCBMaW5lSXRlcmF0b3IgJml0LCBib29sIGZyb21FbmQgPSBm
YWxzZSkKKyAgCQk6IExpbmVJdGVyYXRvcihpdCkKKyAgeworICAgIGlmIChmbG93Qm94ICYmICFp
c0VkaXRhYmxlKCp0aGlzKSkgZnJvbUVuZCA/IG9wZXJhdG9yLS0oKSA6IG9wZXJhdG9yICsrKCk7
CisgICAgaWYgKCFmbG93Qm94IHx8ICFjYikgeworICAgICAga2REZWJ1Zyg2MjAwKSA8PCAiRWRp
dGFibGVMaW5lSXRlcmF0b3I6IGZpbmRGbG93Qm94IGZhaWxlZCIgPDwgZW5kbDsKKyAgICAgIGNi
ID0gMDsKKyAgICB9LyplbmQgaWYqLworICB9CisKKyAgLyoqIGVtcHR5IGNvbnN0cnVjdG9yLgor
ICAgKgorICAgKiBPbmx5IHVzZSBpZiB5b3Ugd2FudCB0byBjb3B5IGFub3RoZXIgaXRlcmF0b3Ig
b250byBpdCBsYXRlci4KKyAgICovCisgIEVkaXRhYmxlTGluZUl0ZXJhdG9yKCkge30KKworICAv
Kiogc2VlayBuZXh0IGxpbmUKKyAgICoKKyAgICogR3VhcmFudGVlZCB0byBjcmFzaCBpZiBiZXlv
bmQgYmVnaW5uaW5nL2VuZCBvZiBkb2N1bWVudC4KKyAgICovCisgIEVkaXRhYmxlTGluZUl0ZXJh
dG9yICZvcGVyYXRvciArKygpIHsKKyAgICAvLyBGSVhNRTogTUVHQS1GTEFXISBlZGl0YWJsZSBl
bXB0eSBpbmxpbmVzIGVsZW1lbnRzIG5vdAorICAgIC8vIHJlcHJlc2VudGVkIGJ5IGFuIGlubGlu
ZSBib3ggYXJlbid0IGNvbnNpZGVyZWQgYW55IG1vcmUuCisgICAgZG8geworICAgICAgTGluZUl0
ZXJhdG9yOjpvcGVyYXRvciArKygpOworICAgIH0gd2hpbGUgKGNiICYmICFpc0VkaXRhYmxlKCp0
aGlzKSk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIC8qKiBzZWVrIG5leHQgbGluZS4KKyAg
ICoKKyAgICogR3VhcmFudGVlZCB0byBjcmFzaCBpZiBiZXlvbmQgYmVnaW5uaW5nL2VuZCBvZiBk
b2N1bWVudC4KKyAgICoKKyAgICogTm90ZTogVGhlIHBvc3RmaXggb3BlcmF0b3IgaXMgc2xvdy4g
VXNlIHRoZSBwcmVmaXggb3BlcmF0b3Igd2hlbmV2ZXIKKyAgICogcG9zc2libGUuCisgICAqLwor
ICAvL0VkaXRhYmxlTGluZUl0ZXJhdG9yIG9wZXJhdG9yICsrKGludCk7CisKKyAgLyoqIHNlZWsg
cHJldmlvdXMgbGluZS4KKyAgICoKKyAgICogR3VhcmFudGVlZCB0byBjcmFzaCBpZiBiZXlvbmQg
YmVnaW5uaW5nL2VuZCBvZiBkb2N1bWVudC4KKyAgICovCisgIEVkaXRhYmxlTGluZUl0ZXJhdG9y
ICZvcGVyYXRvciAtLSgpIHsKKyAgICAvLyBGSVhNRTogTUVHQS1GTEFXISBlZGl0YWJsZSBlbXB0
eSBpbmxpbmVzIG5vdAorICAgIC8vIHJlcHJlc2VudGVkIGJ5IGFuIGlubGluZSBib3ggYXJlbid0
IGNvbnNpZGVyZWQgYW55IG1vcmUuCisgICAgZG8geworICAgICAgTGluZUl0ZXJhdG9yOjpvcGVy
YXRvciAtLSgpOworICAgIH0gd2hpbGUgKGNiICYmICFpc0VkaXRhYmxlKCp0aGlzKSk7CisgICAg
cmV0dXJuICp0aGlzOworICB9CisgIC8qKiBzZWVrIHByZXZpb3VzIGxpbmUuCisgICAqCisgICAq
IEd1YXJhbnRlZWQgdG8gY3Jhc2ggaWYgYmV5b25kIGJlZ2lubmluZy9lbmQgb2YgZG9jdW1lbnQu
CisgICAqCisgICAqIE5vdGU6IFRoZSBwb3N0Zml4IG9wZXJhdG9yIGlzIHNsb3cuIFVzZSB0aGUg
cHJlZml4IG9wZXJhdG9yIHdoZW5ldmVyCisgICAqIHBvc3NpYmxlLgorICAgKi8KKyAgLy9FZGl0
YWJsZUxpbmVJdGVyYXRvciBvcGVyYXRvciAtLShpbnQpOworCisjaWYgMAkvLyBpbXBsZW1lbnQg
d2hlbiBpdCdzIG5lZWRlZAorICAvKiogZG9lcyBwb2ludGVyIGFyaXRobWV0aWMuCisgICAqIEBw
YXJhbSBzdW1tYW5kIGFkZCB0aGVzZSBtYW55IGxpbmVzCisgICAqLworICBFZGl0YWJsZUxpbmVJ
dGVyYXRvciBvcGVyYXRvciArKGludCBzdW1tYW5kKSBjb25zdDsKKyAgLyoqIGRvZXMgcG9pbnRl
ciBhcml0aG1ldGljLgorICAgKiBAcGFyYW0gc3VtbWFuZCBhZGQgdGhlc2UgbWFueSBsaW5lcwor
ICAgKi8KKyAgRWRpdGFibGVMaW5lSXRlcmF0b3Igb3BlcmF0b3IgLShpbnQgc3VtbWFuZCkgY29u
c3Q7CisKKyAgLyoqIGRvZXMgcG9pbnRlciBhcml0aG1ldGljIGFuZCBhc3NpZ25tZW50LgorICAg
KiBAcGFyYW0gc3VtbWFuZCBhZGQgdGhlc2UgbWFueSBsaW5lcworICAgKi8KKyAgRWRpdGFibGVM
aW5lSXRlcmF0b3IgJm9wZXJhdG9yICs9KGludCBzdW1tYW5kKTsKKyAgLyoqIGRvZXMgcG9pbnRl
ciBhcml0aG1ldGljIGFuZCBhc3NpZ25tZW50LgorICAgKiBAcGFyYW0gc3VtbWFuZCBhZGQgdGhl
c2UgbWFueSBsaW5lcworICAgKi8KKyAgRWRpdGFibGVMaW5lSXRlcmF0b3IgJm9wZXJhdG9yIC09
KGludCBzdW1tYW5kKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgIC8qKiBmaW5kcyBvdXQgaWYg
dGhlIGN1cnJlbnQgbGluZSBpcyBlZGl0YWJsZS4KKyAgICogQHBhcmFtIGl0IGNoZWNrIGZsb3cg
Ym94IGl0ZXJhdG9yIHBvaW50cyB0bworICAgKiBAcmV0dXJuIEBwIHRydWUgaWYgbGluZSBpcyBl
ZGl0YWJsZQorICAgKi8KKyAgYm9vbCBpc0VkaXRhYmxlKExpbmVJdGVyYXRvciAmaXQpIHsKKyNp
ZiAwCisgICAgaWYgKGxpbmVzLT5tX3BhcnQtPmlzQ2FyZXRNb2RlKCkgfHwgbGluZXMtPm1fcGFy
dC0+aXNFZGl0YWJsZSgpKSByZXR1cm4gdHJ1ZTsKKworICAgIC8vIG9uIGR1bW15IGxpbmVzIGNo
ZWNrIHRoZSBjb250YWluaW5nIGJsb2NrIGl0c2VsZiBmb3IgZWRpdGFiaWxpdHkKKyAgICBpZiAo
ISgqaXQpLT5maXJzdENoaWxkKCkpIHsKKyAgICAgIGtkRGVidWcoNjIwMCkgPDwgImNiICIgPDwg
Y2ItPnJlbmRlck5hbWUoKSA8PCAiWyIgPDwgY2IgPDwgIl0oIiA8PCAoY2ItPmVsZW1lbnQoKSA/
IGNiLT5lbGVtZW50KCktPm5vZGVOYW1lKCkuc3RyaW5nKCkgOiBRU3RyaW5nOjpudWxsKSA8PCAi
KSBlZGl0YWJsZT8gIiA8PCAoY2ItPnN0eWxlKCktPnVzZXJJbnB1dCgpID09IFVJX0VOQUJMRUQp
IDw8IGVuZGw7CisgICAgICByZXR1cm4gY2ItPnN0eWxlKCktPnVzZXJJbnB1dCgpID09IFVJX0VO
QUJMRUQ7CisgICAgfS8qZW5kIGlmKi8KKyNlbmRpZgorCisgICAgRWRpdGFibGVJbmxpbmVCb3hJ
dGVyYXRvciBmYml0ID0gaXQ7CisgICAgcmV0dXJuICpmYml0OworICB9CisKK307CisKKy8qKiBJ
dGVyYXRlcyB0aHJvdWdoIHRoZSBlZGl0YWJsZSBsaW5lcyBvZiBhIGRvY3VtZW50LCBpbiBhIHRv
cG9sb2dpY2FsIG9yZGVyLgorICoKKyAqIFRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoaXMgYW5k
IHRoZSBFZGl0YWJsZUxpbmVJdGVyYXRvciBsaWVzIGluIHRoZSB3YXkKKyAqIGxpbmVzIGFyZSBp
bnF1aXJlZC4gV2hpbGUgdGhlIGxhdHRlciBzdGVwcyB0aHJvdWdoIHRoZSBsaW5lcyBpbiBkb2N1
bWVudAorICogb3JkZXIsIHRoZSBmb3JtZXIgdGFrZXMgaW50byBjb25zaWRlcmF0aW9uIGVyZ29u
b21pY3MuCisgKgorICogVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgdGFibGVzLiBFZGl0
YWJsZUxpbmVJdGVyYXRvciB0cmF2ZXJzZXMgYWxsCisgKiB0YWJsZSBjZWxscyBmcm9tIGxlZnQg
dG8gcmlnaHQsIHRvcCB0byBib3R0b20sIHdoaWxlIHRoaXMgb25lIHdpbGwKKyAqIGFjdHVhbGx5
IHNuYXAgdG8gdGhlIGNlbGwgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uLCBhbmQgdHJhdmVyc2Ugb25s
eQorICogdXB3YXJkcy9kb3dud2FyZHMsIHRodXMgcHJvdmlkaW5nIGEgbW9yZSBpbnR1aXRpdmUg
bmF2aWdhdGlvbi4KKyAqCisgKiBGSVhNRTogVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LCBh
bmQgbWlnaHQgYmUgc3VwZXJzZWRlZCBieSBzb21lIGdyYW5kaW91cworICogb3RoZXIgaWRlYSBv
ZiBtaW5lIGJlZm9yZSBpdCBpcy4KKyAqIEBhdXRob3IgTGVvIFNhdmVybmlrCisgKiBAaW50ZXJu
YWwKKyAqIEBzaW5jZSAzLjIKKyAqLworY2xhc3MgRXJnb25vbWljRWRpdGFibGVMaW5lSXRlcmF0
b3IgOiBwdWJsaWMgRWRpdGFibGVMaW5lSXRlcmF0b3IgeworcHVibGljOgorICBFcmdvbm9taWNF
ZGl0YWJsZUxpbmVJdGVyYXRvcihjb25zdCBMaW5lSXRlcmF0b3IgJml0KQorICAJOiBFZGl0YWJs
ZUxpbmVJdGVyYXRvcihpdCkge30KKworICBFcmdvbm9taWNFZGl0YWJsZUxpbmVJdGVyYXRvcigp
IHt9CisKK307CisKKy8qKgorICogUHJvdmlkZXMgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGRvY3Vt
ZW50IGluIHRlcm1zIG9mIGNoYXJhY3RlcnMuIE9ubHkgdGhlCisgKiBlZGl0YWJsZSBjaGFyYWN0
ZXJzIGFyZSByZWdhcmRlZC4KKyAqCisgKiBUaGlzIGl0ZXJhdG9yIHJlcHJlc2VudHMgdGhlIGRv
Y3VtZW50LCB3aGljaCBpcyBzdHJ1Y3R1cmVkIGFzIGEgdHJlZSBpdHNlbGYsCisgKiBhcyBhIGxp
bmVhciBzdHJlYW0gb2YgY2hhcmFjdGVycy4KKyAqLworY2xhc3MgRWRpdGFibGVDaGFyYWN0ZXJJ
dGVyYXRvciB7Citwcm90ZWN0ZWQ6CisgIExpbmVhckRvY3VtZW50ICpsZDsKKyAgRWRpdGFibGVM
aW5lSXRlcmF0b3IgX2l0OworICBFZGl0YWJsZUlubGluZUJveEl0ZXJhdG9yIGViaXQ7CisgIERP
TTo6Tm9kZUltcGwgKl9ub2RlOworICBsb25nIF9vZmZzZXQ7CisgIGludCBfY2hhcjsKKworcHVi
bGljOgorICAvKiogZW1wdHkgY29uc3RydWN0b3IuCisgICAqCisgICAqIE9ubHkgdXNlIGlmIHlv
dSB3YW50IHRvIGFzc2lnbiBhbm90aGVyIGNvbnN0cnVjdG9yIGFzIG5vIGZpZWxkcyB3aWxsCisg
ICAqIGJlIGluaXRpYWxpemVkLgorICAgKi8KKyAgRWRpdGFibGVDaGFyYWN0ZXJJdGVyYXRvcigp
IHt9CisKKyAgLyoqIGNvbnN0cnVjdHMgYSBuZXcgaXRlcmF0b3IgZnJvbSB0aGUgZ2l2ZW4gbGlu
ZWFyIGRvY3VtZW50LgorICAgKgorICAgKiBAcGFyYW0gbGQgbGluZWFyIHJlcHJlc2VudGF0aW9u
IG9mIGRvY3VtZW50LgorICAgKi8KKyAgRWRpdGFibGVDaGFyYWN0ZXJJdGVyYXRvcihMaW5lYXJE
b2N1bWVudCAqbGQpCisgIAkJOiBsZChsZCksIF9pdChsZC0+Y3VycmVudCgpKSwgZWJpdChfaXQp
LCBfY2hhcigtMSkKKyAgeworICAgIF9ub2RlID0gbGQtPm5vZGU7CisgICAgX29mZnNldCA9IGxk
LT5vZmZzZXQ7CisKKyAgICAvLyAjIyMgdGVtcG9yYXJ5IGZpeCBmb3IgaWxsZWdhbCBub2Rlcwor
ICAgIGlmIChfaXQgPT0gbGQtPmVuZCgpKSB7IF9ub2RlID0gMDsgcmV0dXJuOyB9CisKKyAgICAv
LyBzZWVrcyB0aGUgbm9kZSdzIGlubGluZSBib3gKKyAgICAvLyAjIyMgcmVkdW5kYW50LCBpbXBs
ZW1lbnQgbWVhbnMgdG8gZ2V0IGl0IGZyb20gbGQgb3IgX2l0CisgICAgLy8gIyMjIGlmIG5vZGUg
aXMgbm90IHRoZXJlPworICAgIEVkaXRhYmxlSW5saW5lQm94SXRlcmF0b3IgY29weSA9IGViaXQ7
CisgICAgZm9yICg7ICplYml0OyArK2ViaXQpIHsKKyAgICAgIGNvcHkgPSBlYml0OworICAgICAg
SW5saW5lQm94ICpiID0gKmViaXQ7CisKKyAgICAgIGlmIChiLT5vYmplY3QoKSA9PSBfbm9kZS0+
cmVuZGVyZXIoKSAmJiBfb2Zmc2V0ID49IGItPm1pbk9mZnNldCgpCisgICAgICAJCSYmIF9vZmZz
ZXQgPD0gYi0+bWF4T2Zmc2V0KCkpCisgICAgICAgIGJyZWFrOworICAgIH0vKm5leHQgZWJpdCov
CisgICAgLy8gSWYgbm8gbm9kZSBpcyBmb3VuZCwgd2UgdGFrZSB0aGUgbGFzdCBlZGl0YWJsZSBu
b2RlLiBJIGR1bm5vIGlmIHRoaXMKKyAgICAvLyBpcyBhIGdvb2QgYXBwcm94aW1hdGlvbiwgYnV0
IHRoaXMgY292ZXJzIHVwIGEgY2FzZSB0aGF0IHNob3VsZCBuZXZlcgorICAgIC8vIGhhcHBlbiBp
biB0aGVvcnkuCisgICAgaWYgKCEqZWJpdCkgeworICAgICAgZWJpdCA9IGNvcHk7CisgICAgICBJ
bmxpbmVCb3ggKmIgPSAqZWJpdDsKKyAgICAgIF9ub2RlID0gYi0+b2JqZWN0KCktPmVsZW1lbnQo
KTsKKyAgICAgIF9vZmZzZXQgPSBiLT5tYXhPZmZzZXQoKTsKKyAgICAgIGtkRGVidWcoNjIwMCkg
PDwgIlRoZXJlIHdhcyBubyBub2RlISBGaXh1cCBhcHBsaWVkISIgPDwgZW5kbDsKKyAgICB9Lypl
bmQgaWYqLworCisgICAgaW5pdEZpcnN0Q2hhcigpOworICB9CisKKyAgLyoqIHJldHVybnMgdGhl
IGN1cnJlbnQgY2hhcmFjdGVyLCBvciAtMSBpZiBub3Qgb24gYSB0ZXh0IG5vZGUsIG9yIGJleW9u
ZAorICAgKiB0aGUgZW5kLgorICAgKi8KKyAgaW50IGNocigpIGNvbnN0IHsgcmV0dXJuIF9jaGFy
OyB9CisKKyAgLyoqIHJldHVybnMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGFzIGEgdW5pY29kZSBz
eW1ib2wsIHN1YnN0aXR1dGluZworICAgKiBhIGJsYW5rIGZvciBhIG5vbi10ZXh0IG5vZGUuCisg
ICAqLworICBRQ2hhciBvcGVyYXRvciAqKCkgY29uc3QgeyByZXR1cm4gUUNoYXIoX2NoYXIgPj0g
MCA/IF9jaGFyIDogJyAnKTsgfQorCisgIC8qKiByZXR1cm5zIHRoZSBjdXJyZW50IG9mZnNldAor
ICAgKi8KKyAgbG9uZyBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBfb2Zmc2V0OyB9CisgIC8qKiBy
ZXR1cm5zIHRoZSBjdXJyZW50IG5vZGUuCisgICAqCisgICAqIElmIGl0J3MgMCwgdGhlbiB0aGVy
ZSBhcmUgbm8gbW9yZSBub2Rlcy4KKyAgICovCisgIERPTTo6Tm9kZUltcGwgKm5vZGUoKSBjb25z
dCB7IHJldHVybiBfbm9kZTsgfQorCisgIC8qKiBtb3ZlcyB0byB0aGUgbmV4dCBlZGl0YWJsZSBj
aGFyYWN0ZXIuCisgICAqLworICBFZGl0YWJsZUNoYXJhY3Rlckl0ZXJhdG9yICZvcGVyYXRvciAr
KygpOworCisgIC8qKiBtb3ZlcyB0byB0aGUgcHJldmlvdXMgZWRpdGFibGUgY2hhcmFjdGVyLgor
ICAgKi8KKyAgRWRpdGFibGVDaGFyYWN0ZXJJdGVyYXRvciAmb3BlcmF0b3IgLS0oKTsKKworcHJv
dGVjdGVkOgorICAvKiogaW5pdGlhbGl6ZXMgdGhlIF9jaGFyIG1lbWJlciBieSByZWFkaW5nIHRo
ZSBjaGFyYWN0ZXIgYXQgdGhlIGN1cnJlbnQKKyAgICogb2Zmc2V0LCBwZWVraW5nIGFoZWFkIGFz
IG5lY2Vzc2FyeS4KKyAgICovCisgIHZvaWQgaW5pdEZpcnN0Q2hhcigpOworICAvKiogcmVhZHMg
YWhlYWQgdGhlIG5leHQgbm9kZSBhbmQgdXBkYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFjY29y
ZGluZ2x5CisgICAqLworICB2b2lkIHBlZWtOZXh0KCkgeworICAgIEVkaXRhYmxlSW5saW5lQm94
SXRlcmF0b3IgY29weSA9IGViaXQ7CisgICAgKytjb3B5OworICAgIElubGluZUJveCAqYiA9ICpj
b3B5OworICAgIGlmIChiICYmIGItPmlzSW5saW5lVGV4dEJveCgpKQorICAgICAgX2NoYXIgPSBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KGItPm9iamVjdCgpKS0+c3RyLT5zW2ItPm1pbk9mZnNl
dCgpXS51bmljb2RlKCk7CisgICAgZWxzZQorICAgICAgX2NoYXIgPSAtMTsKKyAgfQorICAvKiog
cmVhZHMgYWhlYWQgdGhlIHByZXZpb3VzIG5vZGUgYW5kIHVwZGF0ZXMgdGhlIGRhdGEgc3RydWN0
dXJlcyBhY2NvcmRpbmdseQorICAgKi8KKyAgdm9pZCBwZWVrUHJldigpIHsKKyAgICAtLWViaXQ7
CisvLyAgICBfcGVla1ByZXYgPSAqZWJpdDsKKyAgfQorCit9OworCisvLyA9PSBjYXJldC1yZWxh
dGVkIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRoZSBhYm92ZSBkZWZpbmVkIGNsYXNzZXMK
KworLyoqIGdlbmVyYXRlcyBhIHRyYW5zaWVudCBpbmxpbmUgZmxvdyBib3guCisgKgorICogRW1w
dHkgYmxvY2tzIGRvbid0IGhhdmUgaW5saW5lIGZsb3cgYm94ZXMgY29uc3RydWN0ZWQuIFRoaXMg
ZnVuY3Rpb24KKyAqIGNvbnN0cnVjdHMgYSBkdW1teSBmbG93IGJveCB3aGljaCBjb250YWlucyBh
IHNpbmdsZSBlbXB0eSBpbmxpbmUgYm94IHdpdGgKKyAqIGNvb3JkaW5hdGUgaW5mb3JtYXRpb24g
dG8gYmUgYWJsZSB0byBkaXNwbGF5IHRoZSBjYXJldCBjb3JyZWN0bHkuCisgKgorICogWW91IGNh
biBmaW5kIG91dCB3aGV0aGVyIGFuIGlubGluZSBmbG93IGJveCBpcyB0cmFuc2llbnQgYnkgY2hl
Y2tpbmcgaXRzCisgKiByZW5kZXIgb2JqZWN0IGFuZCB0aGUgcmVuZGVyIG9iamVjdCBvZiBpdHMg
b25seSBjaGlsZC4gSWYgYm90aCBhcmUgZXF1YWwsCisgKiBpdCdzIHRyYW5zaWVudC4KKyAqCisg
KiBAcGFyYW0gYXJlbmEgcmVuZGVyIGFyZW5hIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZmxvdyBi
b3gKKyAqIEBwYXJhbSBjYiBjb250YWluaW5nIGJsb2NrIHdoaWNoIHRvIGNyZWF0ZSB0aGUgaW5s
aW5lIGZsb3cgYm94IGZvci4KKyAqIEByZXR1cm4gdGhlIGNvbnN0cnVjdGVkIGlubGluZSBmbG93
IGJveC4KKyAqLworc3RhdGljIElubGluZUZsb3dCb3ggKmdlbmVyYXRlRHVtbXlGbG93Qm94KFJl
bmRlckFyZW5hICphcmVuYSwgUmVuZGVyRmxvdyAqY2IpIHsKKyAgSW5saW5lRmxvd0JveCAqZmxv
d0JveCA9IG5ldyhhcmVuYSkgSW5saW5lRmxvd0JveChjYik7CisgIGludCB3aWR0aCA9IGNiLT53
aWR0aCgpOworICAvLyBGSVhNRTogdGhpcyBkb2VzIG5laXRoZXIgdGFrZSBpbnRvIHJlZ2FyZCA6
Zmlyc3QtbGluZSBub3IgOmZpcnN0LWxldHRlcgorICAvLyBIb3dldmVyLCBhcyBzb29uIGFzIHNv
bWUgY29udGVudCBpcyBlbnRlcmVkLCB0aGUgbGluZSBib3hlcyB3aWxsIGJlCisgIC8vIGNvbnN0
cnVjdGVkIHByb3Blcmx5IGFuZCB0aGlzIGtsdWRnZSBpcyBub3QgY2FsbGVkIGFueSBtb3JlLiBT
byBvbmx5CisgIC8vIHRoZSBjYXJldCBzaXplIG9mIGFuIGVtcHR5IDpmaXJzdC1saW5lJ2QgYmxv
Y2sgaXMgd3JvbmcsIGJ1dCBJIHRoaW5rIHdlCisgIC8vIGNhbiBsaXZlIHdpdGggdGhhdC4KKyAg
aW50IGhlaWdodCA9IGNiLT5zdHlsZSgpLT5mb250TWV0cmljcygpLmhlaWdodCgpOworICBmbG93
Qm94LT5zZXRXaWR0aCgwKTsKKyAgZmxvd0JveC0+c2V0SGVpZ2h0KGhlaWdodCk7CisKKyAgLy8g
QWRkIHNpbmdsZSBjaGlsZCBhdCB0aGUgcmlnaHQgcG9zaXRpb24KKyAgSW5saW5lQm94ICpjaGls
ZCA9IG5ldyhhcmVuYSkgSW5saW5lQm94KGNiKTsKKyAgLy8gIyMjIHJlZ2FyZCBkaXJlY3Rpb24K
KyAgc3dpdGNoIChjYi0+c3R5bGUoKS0+dGV4dEFsaWduKCkpIHsKKyAgICBjYXNlIExFRlQ6Cisg
ICAgY2FzZSBUQUFVVE86CS8vICMjIyBmaW5kIG91dCB3aGF0IHRoaXMgZG9lcworICAgIGNhc2Ug
SlVTVElGWToKKyAgICAgIGNoaWxkLT5zZXRYUG9zKDApOworICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDRU5URVI6CisgICAgY2FzZSBLT05RX0NFTlRFUjoKKyAgICAgIGNoaWxkLT5zZXRYUG9zKHdp
ZHRoIC8gMik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFJJR0hUOgorICAgICAgY2hpbGQtPnNl
dFhQb3Mod2lkdGgpOworICAgICAgYnJlYWs7CisgIH0vKmVuZCBzd2l0Y2gqLworICBjaGlsZC0+
c2V0WVBvcygwKTsKKyAgY2hpbGQtPnNldFdpZHRoKDEpOworICBjaGlsZC0+c2V0SGVpZ2h0KGhl
aWdodCk7CisKKyAgZmxvd0JveC0+c2V0WFBvcyhjaGlsZC0+eFBvcygpKTsKKyAgZmxvd0JveC0+
c2V0WVBvcyhjaGlsZC0+eVBvcygpKTsKKyAgZmxvd0JveC0+YWRkVG9MaW5lKGNoaWxkKTsKKyAg
Ly9rZERlYnVnKDYyMDApIDw8ICJnZW5lcmF0ZUR1bW15Rmxvd0JveDogIiA8PCBmbG93Qm94IDw8
ICIgd2l0aCBjaGlsZCAiIDw8IGNoaWxkIDw8IGVuZGw7CisgIHJldHVybiBmbG93Qm94OworfQor
CisvKiogZGV0ZXJtaW5lcyB0aGUgaW5saW5lIGZsb3cgYm94IHRoYXQgY29udGFpbnMgdGhlIGdp
dmVuIG5vZGUuCisgKgorICogSWYgdGhlIG5vZGUgZG9lcyBub3QgbWFwIHRvIGFuIGlubGluZSBm
bG93IGJveCwgdGhlIGZ1bmN0aW9uIHdpbGwgc25hcCB0bworICogdGhlIG5leHQgaW5saW5lIGJv
eCBmb2xsb3dpbmcgaXQuCisgKgorICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZWdpbiB3aXRoCisg
KiBAcGFyYW0gb2Zmc2V0IHplcm8tYmFzZWQgb2Zmc2V0IHdpdGhpbiBub2RlLgorICogQHBhcmFt
IGFyZW5hIHNvbWV0aW1lcyB0aGUgZnVuY3Rpb24gbXVzdCBjcmVhdGUgYSB0ZW1wb3JhcnkgaW5s
aW5lIGZsb3cgYm94CisgKgl0aGVyZWZvcmUgaXQgbmVlZHMgYSByZW5kZXIgYXJlbmEuCisgKiBA
cGFyYW0gY2IgcmV0dXJucyB0aGUgY29udGFpbmluZyBibG9jaworICogQHJldHVybiB0aGUgZm91
bmQgaW5saW5lRmxvd0JveCBvciAwIGlmIGVpdGhlciB0aGUgbm9kZSBpcyAwIG9yCisgKgl0aGVy
ZSBpcyBubyBpbmxpbmUgZmxvdyBib3ggY29udGFpbmluZyB0aGlzIG5vZGUuIFRoZSBjb250YWlu
aW5nIGJsb2NrCisgKgl3aWxsIHN0aWxsIGJlIHNldC4gSWYgaXQgaXMgMCB0b28sIEBwIG5vZGUg
d2FzIGludmFsaWQuCisgKi8KK3N0YXRpYyBJbmxpbmVGbG93Qm94ICpmaW5kRmxvd0JveChET006
Ok5vZGVJbXBsICpub2RlLCBsb25nIG9mZnNldCwKKwkJUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5k
ZXJGbG93IComY2IpIHsKKyAgUmVuZGVyT2JqZWN0ICpyID0gZmluZFJlbmRlcmVyKG5vZGUpOwor
ICBpZiAoIXIpIHsgY2IgPSAwOyByZXR1cm4gMDsgfQorICBrZERlYnVnKDYyMDApIDw8ICI9PT09
PT09PT09PT09PT09PT09IGZpbmRGbG93Qm94IiA8PCBlbmRsOworICBrZERlYnVnKDYyMDApIDw8
ICJub2RlICIgPDwgbm9kZSA8PCAiIHIgIiA8PCByLT5yZW5kZXJOYW1lKCkgPDwgIlsiIDw8IHIg
PDwgIl0iIDw8ICIgb2Zmc2V0OiAiIDw8IG9mZnNldCA8PCBlbmRsOworCisgIC8vIElmIHdlIGhh
dmUgYSB0b3RhbGx5IGVtcHR5IHJlbmRlciBibG9jaywgd2Ugc2ltcGx5IGNvbnN0cnVjdCBhCisg
IC8vIHRyYW5zaWVudCBpbmxpbmUgZmxvdyBib3gsIGFuZCBiZSBkb25lIHdpdGggaXQuCisgIC8v
IFRoaXMgY2FzZSBoYXBwZW5zIG9ubHkgd2hlbiB0aGUgcmVuZGVyIGJsb2NrIGlzIGEgbGVhZiBv
YmplY3QgaXRzZWxmLgorICBpZiAoci0+aXNGbG93KCkgJiYgIXN0YXRpY19jYXN0PFJlbmRlckZs
b3cgKj4ociktPmZpcnN0TGluZUJveCgpKSB7CisgICAgY2IgPSBzdGF0aWNfY2FzdDxSZW5kZXJG
bG93ICo+KHIpOworICAgIHJldHVybiBnZW5lcmF0ZUR1bW15Rmxvd0JveChhcmVuYSwgY2IpOwor
ICB9LyplbmQgaWYqLworCisgIC8vIFRoZXJlIGFyZSB0d28gc3RyYXRlZ2llcyB0byBmaW5kIHRo
ZSBjb3JyZWN0IGxpbmUgYm94LgorICAvLyAoQSkgRmlyc3QsIGlmIG5vZGUncyByZW5kZXJlciBp
cyBhIFJlbmRlclRleHQsIHdlIG9ubHkgdHJhdmVyc2UgaXRzIHRleHQKKyAgLy8gcnVucyBhbmQg
cmV0dXJuIHRoZSByb290IGxpbmUgYm94IChzYXZlcyBtdWNoIHRpbWUgZm9yIGxvbmcgYmxvY2tz
KS4KKyAgLy8gVGhpcyBzaG91bGQgYmUgdGhlIGNhc2UgOTklIG9mIHRoZSB0aW1lLgorICAvLyAo
QikgT3RoZXJ3aXNlLCB3ZSBpdGVyYXRlIGxpbmVhcmx5IHRocm91Z2ggYWxsIGxpbmUgYm94ZXMg
aW4gb3JkZXIgdG8gZmluZAorICAvLyB0aGUgcmVuZGVyZXIuIChBIHJldmVyc2UgbWFwcGluZyB3
b3VsZCBiZSBmYXZvdXJhYmxlLCBidXQgbmVlZHMgbWVtb3J5KQorICBpZiAoci0+aXNUZXh0KCkp
IGRvIHsKKyAgICBSZW5kZXJUZXh0ICp0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyKTsK
KyAgICBpbnQgZHVtbXk7CisgICAgSW5saW5lQm94ICpiID0gdC0+ZmluZElubGluZVRleHRCb3go
b2Zmc2V0LCBkdW1teSk7CisgICAgLy8gQWN0dWFsbHkgYiBzaG91bGQgbmV2ZXIgYmUgMCwgYnV0
IHNvbWUgcmVuZGVyIHRleHRzIGRvbid0IGhhdmUgcnVucywKKyAgICAvLyBzbyB3ZSBpbnNlcnQg
dGhlIGxhc3QgcnVuIGFzIGFuIGVycm9yIGNvcnJlY3Rpb24uCisgICAgLy8gSWYgdGhlcmUgaXMg
bm8gbGFzdCBydW4sIHdlIHJlc29ydCB0byAoQikKKyAgICBpZiAoIWIpIHsKKyAgICAgIGlmICh0
LT5tX2xpbmVzLmNvdW50KCkgPiAwKQorICAgICAgICBiID0gdC0+bV9saW5lc1t0LT5tX2xpbmVz
LmNvdW50KCkgLSAxXTsKKyAgICAgIGVsc2UKKyAgICAgICAgYnJlYWs7CisgICAgfS8qZW5kIGlm
Ki8KKyAgICBRX0FTU0VSVChiKTsKKyAgICB3aGlsZSAoYi0+cGFyZW50KCkpIHsJLy8gc2VlayBy
b290IGxpbmUgYm94CisgICAgICBiID0gYi0+cGFyZW50KCk7CisgICAgfS8qd2VuZCovCisgICAg
Ly8gRklYTUU6IHJlcGxhY2Ugd2l0aCBpc1Jvb3RJbmxpbmVCb3ggYWZ0ZXIgZnVsbCBXZWJDb3Jl
IG1lcmdlLgorICAgIC8vUV9BU1NFUlQoYi0+aXNSb290SW5saW5lQm94KCkpOworICAgIFFfQVNT
RVJUKGItPmlzSW5saW5lRmxvd0JveCgpKTsKKyAgICBjYiA9IHN0YXRpY19jYXN0PFJlbmRlckZs
b3cgKj4oYi0+b2JqZWN0KCkpOworICAgIFFfQVNTRVJUKGNiLT5pc0Zsb3coKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PElubGluZUZsb3dCb3ggKj4oYik7CisgIH0gd2hpbGUoZmFsc2UpOy8q
ZW5kIGlmKi8KKworICBjYiA9IHN0YXRpY19jYXN0PFJlbmRlckZsb3cgKj4oci0+Y29udGFpbmlu
Z0Jsb2NrKCkpOworICBRX0FTU0VSVChjYi0+aXNGbG93KCkpOworCisgIElubGluZUZsb3dCb3gg
KmZsb3dCb3ggPSBjYi0+Zmlyc3RMaW5lQm94KCk7CisgIC8vIFRoaXMgY2FzZSBzdHJpa2VzIHdo
ZW4gdGhlcmUgYXJlIGNoaWxkcmVuIGJ1dCBub25lIG9mIGl0IGlzIHJlcHJlc2VudGVkCisgIC8v
IGJ5IGFuIGlubGluZSBib3ggKGZvciBleGFtcGxlLCBhbGwgb2YgdGhlbSBhcmUgZW1wdHk6Cisg
IC8vIDxkaXY+PGI+PC9iPjxpPjwvaT48L2Rpdj4pCisgIGlmICghZmxvd0JveCkgeworICAgIGZs
b3dCb3ggPSBnZW5lcmF0ZUR1bW15Rmxvd0JveChhcmVuYSwgY2IpOworICAgIHJldHVybiBmbG93
Qm94OworICB9LyplbmQgaWYqLworCisgIC8vIFdlIGl0ZXJhdGUgdGhlIGlubGluZSBmbG93IGJv
eGVzIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIHVudGlsCisgIC8vIHdlIGZpbmQgdGhlIGdpdmVu
IG5vZGUuIFRoaXMgaGFzIG9uZSBtYWpvciBmbGF3OiBpdCBpcyBsaW5lYXIsIGFuZCB0aGVyZWZv
cmUKKyAgLy8gcGFpbmZ1bGx5IHNsb3cgZm9yIHJlYWxseSBsYXJnZSBibG9ja3MuCisgIGZvciAo
OyBmbG93Qm94OyBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCAqPihmbG93Qm94
LT5uZXh0TGluZUJveCgpKSkgeworICAgIGtkRGVidWcoNjIwMCkgPDwgIltzY2FuIGxpbmVdIiA8
PCBlbmRsOworCisgICAgLy8gSXRlcmF0ZSBjaGlsZHJlbiwgYW5kIGxvb2sgZm9yIG5vZGUKKyAg
ICBJbmxpbmVCb3ggKmJveDsKKyAgICBJbmxpbmVCb3hJdGVyYXRvciBpdChhcmVuYSwgZmxvd0Jv
eCk7CisgICAgZm9yICg7IChib3ggPSAqaXQpICE9IDA7ICsraXQpIHsKKyAgICAgIFJlbmRlck9i
amVjdCAqYnIgPSBib3gtPm9iamVjdCgpOworICAgICAgaWYgKCFicikgY29udGludWU7CisKKyAg
ICAgIGtkRGVidWcoNjIwMCkgPDwgImJveC0+b2JqICIgPDwgYnItPnJlbmRlck5hbWUoKSA8PCAi
WyIgPDwgYnIgPDwgIl0iIDw8ICIgbWluT2Zmc2V0OiAiIDw8IGJveC0+bWluT2Zmc2V0KCkgPDwg
IiBtYXhPZmZzZXQ6ICIgPDwgYm94LT5tYXhPZmZzZXQoKSA8PCBlbmRsOworICAgICAgaWYgKGJy
ID09IHIgJiYgb2Zmc2V0ID49IGJveC0+bWluT2Zmc2V0KCkgJiYgb2Zmc2V0IDw9IGJveC0+bWF4
T2Zmc2V0KCkpCisgICAgICAgIGJyZWFrOwkvLyBJZiBEaWprc3RyYSBoYWRuJ3QgYnJhaW53YXNo
ZWQgbWUsIEknZCBoYXZlIHVzZWQgYSBnb3RvIGhlcmUKKyAgICB9LypuZXh0IGl0Ki8KKyAgICBp
ZiAoYm94KSBicmVhazsKKworICB9LypuZXh0IGZsb3dCb3gqLworCisgIC8vIG5vIGlubGluZSBm
bG93IGJveCBmb3VuZCwgYXBwcm94aW1hdGUgdG8gbmVhcmVzdCBmb2xsb3dpbmcgbm9kZS4KKyAg
Ly8gRGFuZ2VyOiB0aGlzIGlzIE8obl4yKS4gSXQncyBvbmx5IGNhbGxlZCB0byByZWNvdmVyIGZy
b20KKyAgLy8gZXJyb3JzLCB0aGF0IG1lYW5zLCB0aGVvcmV0aWNhbGx5LCBuZXZlci4gKFByYWN0
aWNhbGx5LCBmYXIgdG9vIG9mdGVuIDotKCApCisgIGlmICghZmxvd0JveCkgZmxvd0JveCA9IGZp
bmRGbG93Qm94KG5vZGUtPm5leHRMZWFmTm9kZSgpLCAwLCBhcmVuYSwgY2IpOworCisgIHJldHVy
biBmbG93Qm94OworfQorCisvKiogY2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHR3byByZW5kZXJl
cnMgc2hhcmUgYSBjb21tb24gYmxvY2suCisgKi8KK2lubGluZSBib29sIGhhc0NvbW1vbkNvbnRh
aW5pbmdCbG9jayhSZW5kZXJPYmplY3QgKnIxLCBSZW5kZXJPYmplY3QgKnIyKSB7CisgIHJldHVy
biAocjEgPyByMS0+Y29udGFpbmluZ0Jsb2NrKCkgOiAwKQorICAJPT0gKHIyID8gcjItPmNvbnRh
aW5pbmdCbG9jaygpIDogMCk7Cit9CisKKy8vID09IGNsYXNzIExpbmVhckRvY3VtZW50IGltcGxl
bWVudGF0aW9uCisKK0xpbmVhckRvY3VtZW50OjpMaW5lYXJEb2N1bWVudChLSFRNTFBhcnQgKnBh
cnQsIE5vZGVJbXBsICpub2RlLCBsb25nIG9mZnNldCkKKwk6IGFyZW5hKDApLCBub2RlKG5vZGUp
LCBvZmZzZXQob2Zmc2V0KSwgbV9wYXJ0KHBhcnQpCit7CisgIGlmIChub2RlID09IDApIHJldHVy
bjsKKyAgc2FuaXRpemVDYXJldFN0YXRlKHRoaXMtPm5vZGUsIHRoaXMtPm9mZnNldCk7CisKKyAg
YXJlbmEgPSBuZXcgUmVuZGVyQXJlbmEoNTEyKTsKKworICBpbml0UHJlQmVnaW5JdGVyYXRvcigp
OworICBpbml0RW5kSXRlcmF0b3IoKTsKKyAgLy9tX3BhcnQgPSBub2RlLT5nZXREb2N1bWVudCgp
LT52aWV3KCktPnBhcnQoKTsKK30KKworTGluZWFyRG9jdW1lbnQ6On5MaW5lYXJEb2N1bWVudCgp
IHsKKyAgZGVsZXRlIGFyZW5hOworfQorCitpbnQgTGluZWFyRG9jdW1lbnQ6OmNvdW50KCkgY29u
c3QgeworICAvLyBGSVhNRTogbm90IGltcGxlbWVudGVkCisgIHJldHVybiAxOworfQorCitMaW5l
YXJEb2N1bWVudDo6SXRlcmF0b3IgTGluZWFyRG9jdW1lbnQ6OmN1cnJlbnQoKSB7CisgIHJldHVy
biBMaW5lSXRlcmF0b3IodGhpcywgbm9kZSwgb2Zmc2V0KTsKK30KKworTGluZWFyRG9jdW1lbnQ6
Okl0ZXJhdG9yIExpbmVhckRvY3VtZW50OjpiZWdpbigpIHsKKyAgRG9jdW1lbnRJbXBsICpkb2Mg
PSBub2RlID8gbm9kZS0+Z2V0RG9jdW1lbnQoKSA6IDA7CisgIGlmICghZG9jKSByZXR1cm4gZW5k
KCk7CisKKyAgTm9kZUltcGwgKmZpcnN0TGVhZiA9IGRvYy0+bmV4dExlYWZOb2RlKCk7CisgIGlm
ICghZmlyc3RMZWFmKSByZXR1cm4gZW5kKCk7CQkvLyBtdXN0IGJlIGVtcHR5IGRvY3VtZW50IChp
cyB0aGlzIHBvc3NpYmxlPykKKyAgcmV0dXJuIExpbmVJdGVyYXRvcih0aGlzLCBmaXJzdExlYWYs
IGZpcnN0TGVhZi0+bWluT2Zmc2V0KCkpOworfQorCitMaW5lYXJEb2N1bWVudDo6SXRlcmF0b3Ig
TGluZWFyRG9jdW1lbnQ6OnByZUVuZCgpIHsKKyAgRG9jdW1lbnRJbXBsICpkb2MgPSBub2RlID8g
bm9kZS0+Z2V0RG9jdW1lbnQoKSA6IDA7CisgIGlmICghZG9jKSByZXR1cm4gcHJlQmVnaW4oKTsK
KworICBOb2RlSW1wbCAqbGFzdExlYWYgPSBkb2M7CisgIHdoaWxlIChsYXN0TGVhZi0+bGFzdENo
aWxkKCkpIGxhc3RMZWFmID0gbGFzdExlYWYtPmxhc3RDaGlsZCgpOworCisgIGlmICghbGFzdExl
YWYpIHJldHVybiBwcmVCZWdpbigpOwkvLyBtdXN0IGJlIGVtcHR5IGRvY3VtZW50IChpcyB0aGlz
IHBvc3NpYmxlPykKKyAgcmV0dXJuIExpbmVJdGVyYXRvcih0aGlzLCBsYXN0TGVhZiwgbGFzdExl
YWYtPm1pbk9mZnNldCgpKTsKK30KKwordm9pZCBMaW5lYXJEb2N1bWVudDo6aW5pdFByZUJlZ2lu
SXRlcmF0b3IoKSB7CisgIF9wcmVCZWdpbiA9IExpbmVJdGVyYXRvcih0aGlzLCAwLCAwKTsKK30K
Kwordm9pZCBMaW5lYXJEb2N1bWVudDo6aW5pdEVuZEl0ZXJhdG9yKCkgeworICBfZW5kID0gTGlu
ZUl0ZXJhdG9yKHRoaXMsIDAsIDEpOworfQorCisvLyA9PSBjbGFzcyBMaW5lSXRlcmF0b3IgaW1w
bGVtZW50YXRpb24KKworTGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3IoTGluZWFyRG9jdW1lbnQg
KmwsIERPTTo6Tm9kZUltcGwgKm5vZGUsIGxvbmcgb2Zmc2V0KQorCQk6IGxpbmVzKGwpIHsKKyAg
Zmxvd0JveCA9IGZpbmRGbG93Qm94KG5vZGUsIG9mZnNldCwgbGluZXMtPmFyZW5hLCBjYik7Cisg
IGlmICghZmxvd0JveCkgeworICAgIGtkRGVidWcoNjIwMCkgPDwgIkxpbmVJdGVyYXRvcjogZmlu
ZEZsb3dCb3ggZmFpbGVkIiA8PCBlbmRsOworICAgIGNiID0gMDsKKyAgfS8qZW5kIGlmKi8KK30K
KworTGluZUl0ZXJhdG9yICZMaW5lSXRlcmF0b3I6Om9wZXJhdG9yICsrKCkgeworICBmbG93Qm94
ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCAqPihmbG93Qm94LT5uZXh0TGluZUJveCgpKTsK
KworICAvLyBpZiB0aGVyZSBhcmUgbm8gbW9yZSBsaW5lcyBpbiB0aGlzIGJsb2NrLCBiZWdpbiB3
aXRoIGZpcnN0IGxpbmUgb2YKKyAgLy8gbmV4dCBibG9jaworICBpZiAoIWZsb3dCb3gpIGRvIHsK
KyAgICBSZW5kZXJPYmplY3QgKnIgPSBjYjsKKyAgICBSZW5kZXJPYmplY3QgKm4gPSByLT5sYXN0
Q2hpbGQoKTsKKyAgICB3aGlsZSAobikgciA9IG4sIG4gPSByLT5sYXN0Q2hpbGQoKTsKKyAgICBy
ID0gbmV4dExlYWZSZW5kZXJPYmplY3Qocik7CisgICAga2REZWJ1Zyg2MjAwKSA8PCAiKys6IHIg
IiA8PCByIDw8ICJbIiA8PCAocj9yLT5yZW5kZXJOYW1lKCk6UVN0cmluZzo6bnVsbCkgPDwgIl0i
IDw8IGVuZGw7CisgICAgaWYgKCFyKSB7CisgICAgICBjYiA9IDA7CisgICAgICBicmVhazsKKyAg
ICB9LyplbmQgaWYqLworCisgICAgLy8gSWYgd2UgaGl0IGEgbGVhZiBibG9jayAod2hpY2ggY2Fu
IGhhcHBlbiBvbiBlbXB0eSBibG9ja3MpLCB1c2UgdGhpcworICAgIC8vIGFzIGl0cyBjb250YWlu
aW5nIGJsb2NrCisgICAgaWYgKHItPmlzRmxvdygpKQorICAgICAgY2IgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJGbG93ICo+KHIpOworICAgIGVsc2UKKyAgICAgIGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVy
RmxvdyAqPihyLT5jb250YWluaW5nQmxvY2soKSk7CisgICAgUV9BU1NFUlQoY2ItPmlzRmxvdygp
KTsKKyAgICBmbG93Qm94ID0gY2ItPmZpcnN0TGluZUJveCgpOworICAgIGtkRGVidWcoNjIwMCkg
PDwgIisrOiBmbG93Qm94ICIgPDwgZmxvd0JveCA8PCBlbmRsOworCisgICAgaWYgKCFmbG93Qm94
KSBmbG93Qm94ID0gZ2VuZXJhdGVEdW1teUZsb3dCb3gobGluZXMtPmFyZW5hLCBjYik7CisgICAg
aWYgKCFjYi0+Zmlyc3RMaW5lQm94KCkpIGtkRGVidWcoNjIwMCkgPDwgIisrOiBkdW1teSBmbG93
Qm94ICIgPDwgZmxvd0JveCA8PCBlbmRsOworICB9IHdoaWxlKGZhbHNlKTsvKmVuZCBpZiovCisK
KyAgcmV0dXJuICp0aGlzOworfQorCitMaW5lSXRlcmF0b3IgTGluZUl0ZXJhdG9yOjpvcGVyYXRv
ciArKyhpbnQpIHsKKyAgTGluZUl0ZXJhdG9yIGl0KCp0aGlzKTsKKyAgb3BlcmF0b3IgKysoKTsK
KyAgcmV0dXJuIGl0OworfQorCitMaW5lSXRlcmF0b3IgJkxpbmVJdGVyYXRvcjo6b3BlcmF0b3Ig
LS0oKSB7CisgIGZsb3dCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94ICo+KGZsb3dCb3gt
PnByZXZMaW5lQm94KCkpOworCisgIC8vIGlmIHRoZXJlIGFyZSBubyBtb3JlIGxpbmVzIGluIHRo
aXMgYmxvY2ssIGJlZ2luIHdpdGggbGFzdCBsaW5lIG9mCisgIC8vIHByZXZpb3VzIGJsb2NrCisg
IGlmICghZmxvd0JveCkgZG8geworICAgIFJlbmRlck9iamVjdCAqciA9IGNiOworICAgIFJlbmRl
ck9iamVjdCAqbiA9IHItPmZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAobikgciA9IG4sIG4gPSBy
LT5maXJzdENoaWxkKCk7CisgICAgciA9IHByZXZMZWFmUmVuZGVyT2JqZWN0KHIpOworICAgIGlm
ICghcikgeworICAgICAgY2IgPSAwOworICAgICAgYnJlYWs7CisgICAgfS8qZW5kIGlmKi8KKwor
ICAgIC8vIElmIHdlIGhpdCBhIGxlYWYgYmxvY2sgKHdoaWNoIGNhbiBoYXBwZW4gb24gZW1wdHkg
YmxvY2tzKSwgdXNlIHRoaXMKKyAgICAvLyBhcyBpdHMgY29udGFpbmluZyBibG9jaworICAgIGlm
IChyLT5pc0Zsb3coKSkKKyAgICAgIGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVyRmxvdyAqPihyKTsK
KyAgICBlbHNlCisgICAgICBjYiA9IHN0YXRpY19jYXN0PFJlbmRlckZsb3cgKj4oci0+Y29udGFp
bmluZ0Jsb2NrKCkpOworICAgIFFfQVNTRVJUKGNiLT5pc0Zsb3coKSk7CisgICAgZmxvd0JveCA9
IGNiLT5sYXN0TGluZUJveCgpOworCisgICAgaWYgKCFmbG93Qm94KSBmbG93Qm94ID0gZ2VuZXJh
dGVEdW1teUZsb3dCb3gobGluZXMtPmFyZW5hLCBjYik7CisgIH0gd2hpbGUoZmFsc2UpOy8qZW5k
IGlmKi8KKworICByZXR1cm4gKnRoaXM7Cit9CisKK0xpbmVJdGVyYXRvciBMaW5lSXRlcmF0b3I6
Om9wZXJhdG9yIC0tKGludCkgeworICBMaW5lSXRlcmF0b3IgaXQoKnRoaXMpOworICBvcGVyYXRv
ciAtLSgpOworICByZXR1cm4gaXQ7Cit9CisKKyNpZiAwIC8vIG5vdCBpbXBsZW1lbnRlZCBiZWNh
dXNlIGl0J3Mgbm90IG5lZWRlZAorTGluZUl0ZXJhdG9yIExpbmVJdGVyYXRvcjo6b3BlcmF0b3Ig
KyhpbnQgLypzdW1tYW5kKi8pIGNvbnN0IHsKKyAgLy8gRklYTUU6IG5vdCBpbXBsZW1lbnRlZAor
ICByZXR1cm4gTGluZUl0ZXJhdG9yKCk7Cit9CisKK0xpbmVJdGVyYXRvciBMaW5lSXRlcmF0b3I6
Om9wZXJhdG9yIC0oaW50IC8qc3VtbWFuZCovKSBjb25zdCB7CisgIC8vIEZJWE1FOiBub3QgaW1w
bGVtZW50ZWQKKyAgcmV0dXJuIExpbmVJdGVyYXRvcigpOworfQorI2VuZGlmCisKK0xpbmVJdGVy
YXRvciAmTGluZUl0ZXJhdG9yOjpvcGVyYXRvciArPShpbnQgc3VtbWFuZCkgeworICBpZiAoc3Vt
bWFuZCA+IDApCisgICAgd2hpbGUgKHN1bW1hbmQtLSAmJiAqdGhpcyAhPSBsaW5lcy0+ZW5kKCkp
ICsrKnRoaXM7CisgIGVsc2UgaWYgKHN1bW1hbmQgPCAwKQorICAgIG9wZXJhdG9yIC09KC1zdW1t
YW5kKTsKKyAgcmV0dXJuICp0aGlzOworfQorCitMaW5lSXRlcmF0b3IgJkxpbmVJdGVyYXRvcjo6
b3BlcmF0b3IgLT0oaW50IHN1bW1hbmQpIHsKKyAgaWYgKHN1bW1hbmQgPiAwKQorICAgIHdoaWxl
IChzdW1tYW5kLS0gJiYgKnRoaXMgIT0gbGluZXMtPnByZUJlZ2luKCkpIC0tKnRoaXM7CisgIGVs
c2UgaWYgKHN1bW1hbmQgPCAwKQorICAgIG9wZXJhdG9yICs9KC1zdW1tYW5kKTsKKyAgcmV0dXJu
ICp0aGlzOworfQorCisvLyA9PSBjbGFzcyBFZGl0YWJsZUNoYXJhY3Rlckl0ZXJhdG9yIGltcGxl
bWVudGF0aW9uCisKK3ZvaWQgRWRpdGFibGVDaGFyYWN0ZXJJdGVyYXRvcjo6aW5pdEZpcnN0Q2hh
cigpIHsKKyAgSW5saW5lQm94ICpiID0gKmViaXQ7CisgIGlmIChiKSB7CisgICAgaWYgKF9vZmZz
ZXQgPT0gYi0+bWF4T2Zmc2V0KCkpCisgICAgICBwZWVrTmV4dCgpOworICAgIGVsc2UgaWYgKGIt
PmlzSW5saW5lVGV4dEJveCgpKQorICAgICAgX2NoYXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0
ICo+KGItPm9iamVjdCgpKS0+c3RyLT5zW19vZmZzZXRdLnVuaWNvZGUoKTsKKyAgICBlbHNlCisg
ICAgICBfY2hhciA9IC0xOworICB9LyplbmQgaWYqLworfQorCitFZGl0YWJsZUNoYXJhY3Rlckl0
ZXJhdG9yICZFZGl0YWJsZUNoYXJhY3Rlckl0ZXJhdG9yOjpvcGVyYXRvciArKygpIHsKKyAgX29m
ZnNldCsrOworCisgIElubGluZUJveCAqYiA9ICplYml0OworICBSZW5kZXJPYmplY3QgKnIgPSBi
LT5vYmplY3QoKTsKKyAgLy8gQlJzIGhhdmUgbm8gZXh0ZW50LCBzbyB0aGVpciBtYXhpbXVtIG9m
ZnNldCBtdXN0IGJlIHRoZWlyIG1pbmltdW0uCisgIC8vIEEgYmxvY2sgZWxlbWVudCBjYW4gb25s
eSBiZSB0aGUgdGFyZ2V0IGlmIGl0IGlzIGVtcHR5IC0tIGluIHRoaXMgY2FzZQorICAvLyBpdHMg
ZXh0ZW50IGlzIHplcm8sIHRvby4KKyAgbG9uZyBtYXhvZnMgPSByLT5pc0JSKCkgfHwgci0+aXNG
bG93KCkgPyBiLT5taW5PZmZzZXQoKSA6IGItPm1heE9mZnNldCgpOworICBpZiAoX29mZnNldCA9
PSBtYXhvZnMpIHsKK2tkRGVidWcoNjIwMCkgPDwgIl9vZmZzZXQgPT0gbWF4b2ZzOiAiIDw8IF9v
ZmZzZXQgPDwgIiA9PSAiIDw8IG1heG9mcyA8PCBlbmRsOworLy8gICAgX3BlZWtQcmV2ID0gYjsK
KyAgICBwZWVrTmV4dCgpOworICB9IGVsc2UgaWYgKF9vZmZzZXQgPiBtYXhvZnMpIHsKK2tkRGVi
dWcoNjIwMCkgPDwgIl9vZmZzZXQgPiBtYXhvZnM6ICIgPDwgX29mZnNldCA8PCAiID4gIiA8PCBt
YXhvZnMgLyo8PCAiIF9wZWVrTmV4dDogIiA8PCBfcGVla05leHQqLyA8PCBlbmRsOworICAgIGlm
ICgvKiFfcGVla05leHQqL3RydWUpIHsKKyAgICAgIGlmICgqZWJpdCkKKyAgICAgICAgKytlYml0
OworICAgICAgaWYgKCEqZWJpdCkgewkJLy8gZW5kIG9mIGxpbmUgcmVhY2hlZCwgZ28gdG8gbmV4
dCBsaW5lCisgICAgICAgICsrX2l0Owora2REZWJ1Zyg2MjAwKSA8PCAiKytfaXQiIDw8IGVuZGw7
CisgICAgICAgIGlmIChfaXQgIT0gbGQtPmVuZCgpKSB7CisJICBlYml0ID0gX2l0OworICAgICAg
ICAgIGIgPSAqZWJpdDsKK2tkRGVidWcoNjIwMCkgPDwgImIgIiA8PCBiIDw8IGVuZGw7CisJICBf
bm9kZSA9IGItPm9iamVjdCgpLT5lbGVtZW50KCk7CitrZERlYnVnKDYyMDApIDw8ICJfbm9kZSAi
IDw8IF9ub2RlIDw8IGVuZGw7CisJICBfb2Zmc2V0ID0gYi0+bWluT2Zmc2V0KCk7CitrZERlYnVn
KDYyMDApIDw8ICJfb2Zmc2V0ICIgPDwgX29mZnNldCA8PCBlbmRsOworCX0gZWxzZSB7CisJICBf
bm9kZSA9IDA7CisJICBiID0gMDsKKwl9LyplbmQgaWYqLworICAgICAgICBnb3RvIHJlYWRjaGFy
OworICAgICAgfS8qZW5kIGlmKi8KKyAgICB9LyplbmQgaWYqLworICAgIGJvb2wgYWRqYWNlbnQg
PSBlYml0LmlzQWRqYWNlbnQoKTsKKyAgICAvLyBKdW1wIG92ZXIgZWxlbWVudCBpZiB0aGlzIG9u
ZSBpcyBub3QgYSB0ZXh0IG5vZGUuCisgICAgaWYgKGFkamFjZW50ICYmICEoKmViaXQpLT5pc0lu
bGluZVRleHRCb3goKSkgeworICAgICAgRWRpdGFibGVJbmxpbmVCb3hJdGVyYXRvciBjb3B5ID0g
ZWJpdDsKKyAgICAgICsrZWJpdDsKKyAgICAgIGlmICgqZWJpdCAmJiAoKmViaXQpLT5pc0lubGlu
ZVRleHRCb3goKSkgYWRqYWNlbnQgPSBmYWxzZTsKKyAgICAgIGVsc2UgZWJpdCA9IGNvcHk7Cisg
ICAgfS8qZW5kIGlmKi8KKyAgICBfbm9kZSA9ICgqZWJpdCktPm9iamVjdCgpLT5lbGVtZW50KCk7
CisgICAgX29mZnNldCA9ICgqZWJpdCktPm1pbk9mZnNldCgpICsgYWRqYWNlbnQ7CisgICAgLy9f
cGVla05leHQgPSAwOworICAgIGIgPSAqZWJpdDsKKyAgICBnb3RvIHJlYWRjaGFyOworICB9IGVs
c2UgeworcmVhZGNoYXI6CisgICAgLy8gZ2V0IGNoYXJhY3RlcgorICAgIGlmIChiICYmIGItPmlz
SW5saW5lVGV4dEJveCgpICYmIF9vZmZzZXQgPCBiLT5tYXhPZmZzZXQoKSkKKyAgICAgIF9jaGFy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihiLT5vYmplY3QoKSktPnN0ci0+c1tfb2Zmc2V0
XS51bmljb2RlKCk7CisgICAgZWxzZQorICAgICAgX2NoYXIgPSAtMTsKKyAgfS8qZW5kIGlmKi8K
K2tkRGVidWcoNjIwMCkgPDwgIl9vZmZzZXQ6ICIgPDwgX29mZnNldCAvKjw8ICIgX3BlZWtOZXh0
OiAiIDw8IF9wZWVrTmV4dCovIDw8ICIgY2hhciAnIiA8PCAoY2hhcilfY2hhciA8PCAiJyIgPDwg
ZW5kbDsKKworICBpZiAoKmViaXQpIHsKKyAgICBJbmxpbmVCb3ggKmJveCA9ICplYml0OworICAg
IGtkRGVidWcoNjIwMCkgPDwgImVjaGl0KysoMSk6IGJveCAiIDw8IGJveCA8PCAoYm94ICYmIGJv
eC0+aXNJbmxpbmVUZXh0Qm94KCkgPyBRU3RyaW5nKCIgY29udGFpbnMgXCIlMVwiIikuYXJnKFFD
b25zdFN0cmluZyhzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KGJveC0+b2JqZWN0KCkpLT5zdHIt
PnMrYm94LT5taW5PZmZzZXQoKSwgYm94LT5tYXhPZmZzZXQoKSAtIGJveC0+bWluT2Zmc2V0KCkp
LnN0cmluZygpKSA6IFFTdHJpbmc6Om51bGwpIDw8ICIgbm9kZSAiIDw8IChfbm9kZSA/IF9ub2Rl
LT5ub2RlTmFtZSgpLnN0cmluZygpIDogUVN0cmluZygiPG5pbD4iKSkgPDwgZW5kbDsKKyAgfQor
ICByZXR1cm4gKnRoaXM7Cit9CisKK0VkaXRhYmxlQ2hhcmFjdGVySXRlcmF0b3IgJkVkaXRhYmxl
Q2hhcmFjdGVySXRlcmF0b3I6Om9wZXJhdG9yIC0tKCkgeworICBfb2Zmc2V0LS07CisKKyAgSW5s
aW5lQm94ICpiID0gKmViaXQ7CisgIElubGluZUJveCAqX3BlZWtQcmV2ID0gMDsKKyAgSW5saW5l
Qm94ICpfcGVla05leHQgPSAwOworICBsb25nIG1pbm9mcyA9IGIgPyBiLT5taW5PZmZzZXQoKSA6
IF9vZmZzZXQgKyAxOworICBpZiAoX29mZnNldCA9PSBtaW5vZnMpIHsKKyAgICBfcGVla05leHQg
PSBiOworICAgIC8vIGdldCBjaGFyYWN0ZXIKKyAgICBpZiAoYiAmJiBiLT5pc0lubGluZVRleHRC
b3goKSkKKyAgICAgIF9jaGFyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihiLT5vYmplY3Qo
KSktPnN0ci0+c1tfb2Zmc2V0XS51bmljb2RlKCk7CisgICAgZWxzZQorICAgICAgX2NoYXIgPSAt
MTsKKworICAgIC8vcGVla1ByZXYoKTsKKyAgICBib29sIGRvX3ByZXYgPSBmYWxzZTsKKyAgICB7
CisgICAgICBFZGl0YWJsZUlubGluZUJveEl0ZXJhdG9yIGNvcHkgPSBlYml0OworICAgICAgLS1l
Yml0OworICAgICAgX3BlZWtQcmV2ID0gKmViaXQ7CisgICAgICAvLyBKdW1wIHRvIGVuZCBvZiBw
cmV2aW91cyBlbGVtZW50IGlmIGl0J3MgYWRqYWNlbnQsIGFuZCBhIHRleHQgYm94CisgICAgICBp
ZiAoZWJpdC5pc0FkamFjZW50KCkgJiYgKmViaXQgJiYgKCplYml0KS0+aXNJbmxpbmVUZXh0Qm94
KCkpCisgICAgICAgIC8vb3BlcmF0b3IgLS0oKTsKKwlkb19wcmV2ID0gdHJ1ZTsKKyAgICAgIGVs
c2UKKyAgICAgICAgZWJpdCA9IGNvcHk7CisgICAgfQorICAgIGlmIChkb19wcmV2KSBnb3RvIHBy
ZXY7CisgIH0gZWxzZSBpZiAoX29mZnNldCA8IG1pbm9mcykgeworcHJldjoKKyAgICBpZiAoIV9w
ZWVrUHJldikgeworICAgICAgX3BlZWtOZXh0ID0gKmViaXQ7CisgICAgICBpZiAoKmViaXQpCisg
ICAgICAgIC0tZWJpdDsKKyAgICAgIGlmICghKmViaXQpIHsJCS8vIGVuZCBvZiBsaW5lIHJlYWNo
ZWQsIGdvIHRvIHByZXZpb3VzIGxpbmUKKyAgICAgICAgLS1faXQ7CisgICAgICAgIGlmIChfaXQg
IT0gbGQtPnByZUJlZ2luKCkpIHsKKy8vCSAga2REZWJ1Zyg2MjAwKSA8PCAiYmVnaW4gZnJvbSBl
bmQhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISIgPDwgZW5kbDsKKwkgIGViaXQgPSBF
ZGl0YWJsZUlubGluZUJveEl0ZXJhdG9yKF9pdCwgdHJ1ZSk7CisJICBSZW5kZXJPYmplY3QgKnIg
PSAoKmViaXQpLT5vYmplY3QoKTsKKwkgIF9ub2RlID0gci0+ZWxlbWVudCgpOworCSAgX29mZnNl
dCA9IHItPmlzQlIoKSA/ICgqZWJpdCktPm1pbk9mZnNldCgpIDogKCplYml0KS0+bWF4T2Zmc2V0
KCk7CisJICBfY2hhciA9IC0xOworICAgICAgICAgIHtJbmxpbmVCb3ggKmJveCA9ICplYml0OyBr
ZERlYnVnKDYyMDApIDw8ICJlY2hpdC0tKDIpOiBib3ggIiA8PCBib3ggPDwgKGJveCAmJiBib3gt
PmlzSW5saW5lVGV4dEJveCgpID8gUVN0cmluZygiIGNvbnRhaW5zIFwiJTFcIiIpLmFyZyhRQ29u
c3RTdHJpbmcoc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihib3gtPm9iamVjdCgpKS0+c3RyLT5z
K2JveC0+bWluT2Zmc2V0KCksIGJveC0+bWF4T2Zmc2V0KCkgLSBib3gtPm1pbk9mZnNldCgpKS5z
dHJpbmcoKSkgOiBRU3RyaW5nOjpudWxsKSA8PCBlbmRsO30KKwl9IGVsc2UKKwkgIF9ub2RlID0g
MDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9LyplbmQgaWYqLworICAgIH0vKmVuZCBpZiovCisK
KyAgICBib29sIGFkamFjZW50ID0gZWJpdC5pc0FkamFjZW50KCk7CisgICAgLy8gSWdub3JlIHRo
aXMgYm94IGlmIGl0IGlzbid0IGEgdGV4dCBib3gsIGJ1dCB0aGUgcHJldmlvdXMgYm94IHdhcwor
ICAgIGtkRGVidWcoNjIwMCkgPDwgImFkamFjZW50ICIgPDwgYWRqYWNlbnQgPDwgIiBfcGVla05l
eHQgIiA8PCBfcGVla05leHQgPDwgIiBfcGVla05leHQtPmlzSW5saW5lVGV4dEJveDogIiA8PCAo
X3BlZWtOZXh0ID8gX3BlZWtOZXh0LT5pc0lubGluZVRleHRCb3goKSA6IGZhbHNlKSA8PCAiICEo
KCplYml0KS0+aXNJbmxpbmVUZXh0Qm94KTogIiA8PCAoKmViaXQgPyAhKCplYml0KS0+aXNJbmxp
bmVUZXh0Qm94KCkgOiB0cnVlKSA8PCBlbmRsOworICAgIGlmIChhZGphY2VudCAmJiBfcGVla05l
eHQgJiYgX3BlZWtOZXh0LT5pc0lubGluZVRleHRCb3goKQorICAgIAkmJiAhKCplYml0KS0+aXNJ
bmxpbmVUZXh0Qm94KCkpIHsKKyAgICAgIEVkaXRhYmxlSW5saW5lQm94SXRlcmF0b3IgY29weSA9
IGViaXQ7CisgICAgICAtLWViaXQ7CisgICAgICBpZiAoISplYml0KSAvKmFkamFjZW50ID0gZmFs
c2U7CisgICAgICBlbHNlICovZWJpdCA9IGNvcHk7CisgICAgfS8qZW5kIGlmKi8KKyAgICBrZERl
YnVnKDYyMDApIDw8ICIoKmViaXQpLT5vYmogIiA8PCAoKmViaXQpLT5vYmplY3QoKS0+cmVuZGVy
TmFtZSgpIDw8ICJbIiA8PCAoKmViaXQpLT5vYmplY3QoKSA8PCAiXSIgPDwgIiBtaW5PZmZzZXQ6
ICIgPDwgKCplYml0KS0+bWluT2Zmc2V0KCkgPDwgIiBtYXhPZmZzZXQ6ICIgPDwgKCplYml0KS0+
bWF4T2Zmc2V0KCkgPDwgZW5kbDsKKyAgICBfbm9kZSA9ICgqZWJpdCktPm9iamVjdCgpLT5lbGVt
ZW50KCk7CisgICAgX29mZnNldCA9ICgqZWJpdCktPm1heE9mZnNldCgpLyogLSBhZGphY2VudCov
OworICAgIF9wZWVrUHJldiA9IDA7CisgIH0gZWxzZSB7CitrZERlYnVnKDYyMDApIDw8ICJfb2Zm
c2V0OiAiIDw8IF9vZmZzZXQgPDwgIiBfcGVla05leHQ6ICIgPDwgX3BlZWtOZXh0IDw8IGVuZGw7
CisgICAgLy8gZ2V0IGNoYXJhY3RlcgorICAgIGlmIChfcGVla05leHQgJiYgX29mZnNldCA+PSBi
LT5tYXhPZmZzZXQoKSAmJiBfcGVla05leHQtPmlzSW5saW5lVGV4dEJveCgpKQorICAgICAgX2No
YXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KF9wZWVrTmV4dC0+b2JqZWN0KCkpLT5zdHIt
PnNbX3BlZWtOZXh0LT5taW5PZmZzZXQoKV0udW5pY29kZSgpOworICAgIGVsc2UgaWYgKGIgJiYg
X29mZnNldCA8IGItPm1heE9mZnNldCgpICYmIGItPmlzSW5saW5lVGV4dEJveCgpKQorICAgICAg
X2NoYXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KGItPm9iamVjdCgpKS0+c3RyLT5zW19v
ZmZzZXRdLnVuaWNvZGUoKTsKKyAgICBlbHNlCisgICAgICBfY2hhciA9IC0xOworICB9LyplbmQg
aWYqLworCisgIGlmICgqZWJpdCkgeworICAgIElubGluZUJveCAqYm94ID0gKmViaXQ7CisgICAg
a2REZWJ1Zyg2MjAwKSA8PCAiZWNoaXQtLSgxKTogYm94ICIgPDwgYm94IDw8IChib3ggJiYgYm94
LT5pc0lubGluZVRleHRCb3goKSA/IFFTdHJpbmcoIiBjb250YWlucyBcIiUxXCIiKS5hcmcoUUNv
bnN0U3RyaW5nKHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4oYm94LT5vYmplY3QoKSktPnN0ci0+
cytib3gtPm1pbk9mZnNldCgpLCBib3gtPm1heE9mZnNldCgpIC0gYm94LT5taW5PZmZzZXQoKSku
c3RyaW5nKCkpIDogUVN0cmluZzo6bnVsbCkgPDwgZW5kbDsKKyAgfQorICByZXR1cm4gKnRoaXM7
Cit9CisKK30vKmVuZCBuYW1lc3BhY2UqLworCit2b2lkIEtIVE1MVmlldzo6aW5pdENhcmV0KCkg
eworLy8gIGtkRGVidWcoNjIwMCkgPDwgImJlZ2luIGluaXRDYXJldCIgPDwgZW5kbDsKKyAgaWYg
KG1fcGFydC0+eG1sRG9jSW1wbCgpKSB7CisgICAgZC0+Y2FyZXRWaWV3Q29udGV4dCgpOworICAg
IGlmIChtX3BhcnQtPmQtPmNhcmV0Tm9kZSgpLmlzTnVsbCgpKSB7CisgICAgICAvLyBzZXQgdG8g
ZG9jdW1lbnQsIHBvc2l0aW9uIHdpbGwgYmUgc2FuaXRpemVkIGFueXdheQorICAgICAgbV9wYXJ0
LT5kLT5jYXJldE5vZGUoKSA9IG1fcGFydC0+ZG9jdW1lbnQoKTsKKyAgICAgIG1fcGFydC0+ZC0+
Y2FyZXRPZmZzZXQoKSA9IDBMOworICAgICAgLy8gVGhpcyBzYW5pdHkgY2hlY2sgaXMgbmVjZXNz
YXJ5IGZvciB0aGUgbm90IHNvIHVubGlrZWx5IGNhc2UgdGhhdAorICAgICAgLy8gc2V0RWRpdGFi
bGUgb3Igc2V0Q2FyZXRNb2RlIGlzIGNhbGxlZCBiZWZvcmUgYW55IHJlbmRlciBvYmplY3RzIGhh
dmUKKyAgICAgIC8vIGJlZW4gY3JlYXRlZC4KKyAgICAgIGlmICghbV9wYXJ0LT5kLT5jYXJldE5v
ZGUoKS5oYW5kbGUoKS0+cmVuZGVyZXIoKSkgcmV0dXJuOworICAgIH0vKmVuZCBpZiovCisvLyAg
ICBrZERlYnVnKDYyMDApIDw8ICJkLT5tX3NlbGVjdGlvblN0YXJ0ICIgPDwgbV9wYXJ0LT5kLT5t
X3NlbGVjdGlvblN0YXJ0LmhhbmRsZSgpCisvLyAgICAJCTw8ICIgZC0+bV9zZWxlY3Rpb25FbmQg
IiA8PCBtX3BhcnQtPmQtPm1fc2VsZWN0aW9uRW5kLmhhbmRsZSgpIDw8IGVuZGw7CisgICAgbW92
ZUNhcmV0VG8obV9wYXJ0LT5kLT5jYXJldE5vZGUoKS5oYW5kbGUoKSwgbV9wYXJ0LT5kLT5jYXJl
dE9mZnNldCgpLCB0cnVlKTsKKy8vICAgIGtkRGVidWcoNjIwMCkgPDwgImQtPm1fc2VsZWN0aW9u
U3RhcnQgIiA8PCBtX3BhcnQtPmQtPm1fc2VsZWN0aW9uU3RhcnQuaGFuZGxlKCkKKy8vICAgIAkJ
PDwgIiBkLT5tX3NlbGVjdGlvbkVuZCAiIDw8IG1fcGFydC0+ZC0+bV9zZWxlY3Rpb25FbmQuaGFu
ZGxlKCkgPDwgZW5kbDsKKyAgfS8qZW5kIGlmKi8KKy8vICBrZERlYnVnKDYyMDApIDw8ICJlbmQg
aW5pdENhcmV0IiA8PCBlbmRsOworfQorCitib29sIEtIVE1MVmlldzo6Y2FyZXRPdmVycmlkZXMo
KSB7CisgICAgYm9vbCBjbSA9IG1fcGFydC0+aXNDYXJldE1vZGUoKTsKKyAgICBib29sIGRtID0g
bV9wYXJ0LT5pc0VkaXRhYmxlKCk7CisgICAgcmV0dXJuIGNtICYmICFkbSA/IGZhbHNlCisgICAg
CTogKGRtIHx8IG1fcGFydC0+ZC0+Y2FyZXROb2RlKCkuaGFuZGxlKCktPmNvbnRlbnRFZGl0YWJs
ZSgpKQorCSAgJiYgZC0+ZWRpdG9yQ29udGV4dCgpLT5vdmVycmlkZTsKK30KKwordm9pZCBLSFRN
TFZpZXc6OmVuc3VyZU5vZGVIYXNGb2N1cyhOb2RlSW1wbCAqbm9kZSkgeworICBpZiAobV9wYXJ0
LT5pc0NhcmV0TW9kZSgpIHx8IG1fcGFydC0+aXNFZGl0YWJsZSgpKSByZXR1cm47CisgIGlmIChu
b2RlLT5mb2N1c2VkKCkpIHJldHVybjsKKworICAvLyBGaW5kIGZpcnN0IGFuY2VzdG9yIHdob3Nl
ICJ1c2VyLWlucHV0IiBpcyAiZW5hYmxlZCIKKyAgTm9kZUltcGwgKmZpcnN0QW5jZXN0b3IgPSAw
OworICB3aGlsZSAobm9kZSkgeworICAgIGlmIChub2RlLT5yZW5kZXJlcigpCisgICAgICAgJiYg
bm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlcklucHV0KCkgIT0gVUlfRU5BQkxFRCkKKyAg
ICAgIGJyZWFrOworICAgIGZpcnN0QW5jZXN0b3IgPSBub2RlOworICAgIG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCk7CisgIH0vKndlbmQqLworCisgIGlmICghbm9kZSkgZmlyc3RBbmNlc3RvciA9
IDA7CisKKyAgLy8gU2V0IGZvY3VzIG5vZGUgb24gdGhlIGRvY3VtZW50CisgIG1fcGFydC0+eG1s
RG9jSW1wbCgpLT5zZXRGb2N1c05vZGUoZmlyc3RBbmNlc3Rvcik7CisgIGVtaXQgbV9wYXJ0LT5u
b2RlQWN0aXZhdGVkKE5vZGUoZmlyc3RBbmNlc3RvcikpOworfQorCit2b2lkIEtIVE1MVmlldzo6
cmVjYWxjQW5kU3RvcmVDYXJldFBvcygpIHsKKyAgICBpZiAoIW1fcGFydCB8fCBtX3BhcnQtPmQt
PmNhcmV0Tm9kZSgpLmlzTnVsbCgpKSByZXR1cm47CisgICAgZC0+Y2FyZXRWaWV3Q29udGV4dCgp
OworLy8gIGtkRGVidWcoNjIwMCkgPDwgIm1vdmVDYXJldEJ5OiBjYXJldE5vZGU9IiA8PCBtX3Bh
cnQtPmQtPmNhcmV0Tm9kZSgpLmhhbmRsZSgpIDw8IGVuZGw7CisgICAgbV9wYXJ0LT5kLT5jYXJl
dE5vZGUoKS5oYW5kbGUoKS0+Z2V0Q2FyZXQobV9wYXJ0LT5kLT5jYXJldE9mZnNldCgpLAorICAg
ICAgICAgICAgICAgIGNhcmV0T3ZlcnJpZGVzKCksCisgICAgCQlkLT5tX2NhcmV0Vmlld0NvbnRl
eHQtPngsIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eSwKKwkJZC0+bV9jYXJldFZpZXdDb250ZXh0
LT53aWR0aCwKKwkJZC0+bV9jYXJldFZpZXdDb250ZXh0LT5oZWlnaHQpOworLy8gICAga2REZWJ1
Zyg2MjAwKSA8PCAiZnJlcVRpbWVySWQ6ICI8PGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+ZnJlcVRp
bWVySWQ8PGVuZGw7CisgICAga2REZWJ1Zyg2MjAwKSA8PCAiY2FyZXQ6IG9mcz0iPDxtX3BhcnQt
PmQtPmNhcmV0T2Zmc2V0KCk8PCIgIgorICAgIAk8PCIgeD0iPDxkLT5tX2NhcmV0Vmlld0NvbnRl
eHQtPng8PCIgeT0iPDxkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnkKKwk8PCIgaD0iPDxkLT5tX2Nh
cmV0Vmlld0NvbnRleHQtPmhlaWdodDw8ZW5kbDsKK30KKwordm9pZCBLSFRNTFZpZXc6OmNhcmV0
T24oKSB7CisgICAgaWYgKGQtPm1fY2FyZXRWaWV3Q29udGV4dCkgeworICAgICAgICBraWxsVGlt
ZXIoZC0+bV9jYXJldFZpZXdDb250ZXh0LT5mcmVxVGltZXJJZCk7CisgICAgICAgIGQtPm1fY2Fy
ZXRWaWV3Q29udGV4dC0+ZnJlcVRpbWVySWQgPSBzdGFydFRpbWVyKDUwMCk7CisgICAgICAgIGQt
Pm1fY2FyZXRWaWV3Q29udGV4dC0+dmlzaWJsZSA9IHRydWU7CisgICAgICAgIGQtPm1fY2FyZXRW
aWV3Q29udGV4dC0+ZGlzcGxheWVkID0gdHJ1ZTsKKwl1cGRhdGVDb250ZW50cyhkLT5tX2NhcmV0
Vmlld0NvbnRleHQtPngsIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eSwKKwkgICAgCQlkLT5tX2Nh
cmV0Vmlld0NvbnRleHQtPndpZHRoLAorCQkJZC0+bV9jYXJldFZpZXdDb250ZXh0LT5oZWlnaHQp
OworLy8gICAgICAgIGtkRGVidWcoNjIwMCkgPDwgImNhcmV0IG9uIiA8PCBlbmRsOworICAgIH0v
KmVuZCBpZiovCit9CisKK3ZvaWQgS0hUTUxWaWV3OjpjYXJldE9mZigpIHsKKyAgICBpZiAoZC0+
bV9jYXJldFZpZXdDb250ZXh0KSB7CisgICAgICAgIGtpbGxUaW1lcihkLT5tX2NhcmV0Vmlld0Nv
bnRleHQtPmZyZXFUaW1lcklkKTsKKwlkLT5tX2NhcmV0Vmlld0NvbnRleHQtPmZyZXFUaW1lcklk
ID0gLTE7CisgICAgICAgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+ZGlzcGxheWVkID0gZmFsc2U7
CisgICAgICAgIGlmIChkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnZpc2libGUpIHsKKyAgICAgICAg
ICAgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+dmlzaWJsZSA9IGZhbHNlOworCSAgICB1cGRhdGVD
b250ZW50cyhkLT5tX2NhcmV0Vmlld0NvbnRleHQtPngsIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+
eSwKKwkgICAgCQlkLT5tX2NhcmV0Vmlld0NvbnRleHQtPndpZHRoLAorCSAgICAJCWQtPm1fY2Fy
ZXRWaWV3Q29udGV4dC0+aGVpZ2h0KTsKKwl9LyplbmQgaWYqLworLy8gICAgICAgIGtkRGVidWco
NjIwMCkgPDwgImNhcmV0IG9mZiIgPDwgZW5kbDsKKyAgICB9LyplbmQgaWYqLworfQorCit2b2lk
IEtIVE1MVmlldzo6c2hvd0NhcmV0KCkgeworICAgIGlmIChkLT5tX2NhcmV0Vmlld0NvbnRleHQp
IHsKKyAgICAgICAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT5kaXNwbGF5ZWQgPSB0cnVlOworICAg
ICAgICBpZiAoZC0+bV9jYXJldFZpZXdDb250ZXh0LT52aXNpYmxlKSB7CisJICAgIHVwZGF0ZUNv
bnRlbnRzKGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eCwgZC0+bV9jYXJldFZpZXdDb250ZXh0LT55
LAorCSAgICAJCWQtPm1fY2FyZXRWaWV3Q29udGV4dC0+d2lkdGgsCisJCQlkLT5tX2NhcmV0Vmll
d0NvbnRleHQtPmhlaWdodCk7CisgICAJfS8qZW5kIGlmKi8KKy8vICAgICAgICBrZERlYnVnKDYy
MDApIDw8ICJjYXJldCBzaG93biIgPDwgZW5kbDsKKyAgICB9LyplbmQgaWYqLworfQorCitib29s
IEtIVE1MVmlldzo6Zm9sZFNlbGVjdGlvblRvQ2FyZXQoTm9kZUltcGwgKnN0YXJ0Tm9kZSwgbG9u
ZyBzdGFydE9mZnNldCwKKyAgICAJCQkJTm9kZUltcGwgKmVuZE5vZGUsIGxvbmcgZW5kT2Zmc2V0
KSB7CisgIG1fcGFydC0+ZC0+bV9zZWxlY3Rpb25TdGFydCA9IG1fcGFydC0+ZC0+bV9zZWxlY3Rp
b25FbmQgPSBtX3BhcnQtPmQtPmNhcmV0Tm9kZSgpOworICBtX3BhcnQtPmQtPm1fc3RhcnRPZmZz
ZXQgPSBtX3BhcnQtPmQtPm1fZW5kT2Zmc2V0ID0gbV9wYXJ0LT5kLT5jYXJldE9mZnNldCgpOwor
ICBtX3BhcnQtPmQtPm1fZXh0ZW5kQXRFbmQgPSB0cnVlOworCisgIGJvb2wgZm9sZGVkID0gc3Rh
cnROb2RlICE9IGVuZE5vZGUgfHwgc3RhcnRPZmZzZXQgIT0gZW5kT2Zmc2V0OworCisgIC8vIE9u
bHkgY2xlYXIgdGhlIHNlbGVjdGlvbiBpZiB0aGVyZSBoYXMgYmVlbiBvbmUuCisgIGlmIChmb2xk
ZWQpIHsKKyAgICBtX3BhcnQtPnhtbERvY0ltcGwoKS0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgfS8q
ZW5kIGlmKi8KKworICByZXR1cm4gZm9sZGVkOworfQorCit2b2lkIEtIVE1MVmlldzo6aGlkZUNh
cmV0KCkgeworICAgIGlmIChkLT5tX2NhcmV0Vmlld0NvbnRleHQpIHsKKyAgICAgICAgaWYgKGQt
Pm1fY2FyZXRWaWV3Q29udGV4dC0+dmlzaWJsZSkgeworLy8gICAgICAgICAgICBrZERlYnVnKDYy
MDApIDw8ICJyZWRyYXcgY2FyZXQgaGlkZGVuIiA8PCBlbmRsOworCSAgICBkLT5tX2NhcmV0Vmll
d0NvbnRleHQtPnZpc2libGUgPSBmYWxzZTsKKwkgICAgLy8gZm9yY2UgcmVwYWludCwgb3RoZXJ3
aXNlIHRoZSBldmVudCB3b24ndCBiZSBoYW5kbGVkCisJICAgIC8vIGJlZm9yZSB0aGUgZm9jdXMg
bGVhdmVzIHRoZSB3aW5kb3cKKwkgICAgcmVwYWludENvbnRlbnRzKGQtPm1fY2FyZXRWaWV3Q29u
dGV4dC0+eCwgZC0+bV9jYXJldFZpZXdDb250ZXh0LT55LAorCSAgICAJCWQtPm1fY2FyZXRWaWV3
Q29udGV4dC0+d2lkdGgsCisJICAgIAkJZC0+bV9jYXJldFZpZXdDb250ZXh0LT5oZWlnaHQpOwor
CSAgICBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnZpc2libGUgPSB0cnVlOworCX0vKmVuZCBpZiov
CisgICAgICAgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+ZGlzcGxheWVkID0gZmFsc2U7CisvLyAg
ICAgICAga2REZWJ1Zyg2MjAwKSA8PCAiY2FyZXQgaGlkZGVuIiA8PCBlbmRsOworICAgIH0vKmVu
ZCBpZiovCit9CisKK2Jvb2wgS0hUTUxWaWV3OjpwbGFjZUNhcmV0KCkgeworICBDYXJldFZpZXdD
b250ZXh0ICpjdiA9IGQtPmNhcmV0Vmlld0NvbnRleHQoKTsKKyAgY2FyZXRPZmYoKTsKKyAgcmVj
YWxjQW5kU3RvcmVDYXJldFBvcygpOworCisgIGN2LT5vcmlnWCA9IGN2LT54OworCisgIE5vZGVJ
bXBsICpjYXJldE5vZGUgPSBtX3BhcnQtPmQtPmNhcmV0Tm9kZSgpLmhhbmRsZSgpOworICAvLyAj
IyMgd2h5IGlzIGl0IHNvbWV0aW1lcyBudWxsPworICBpZiAoIWNhcmV0Tm9kZSkga2REZWJ1Zyg2
MjAwKSA8PCAicGxhY2VDYXJldCBjYXJldE5vZGUgaXMgTlVMTCEiIDw8IGVuZGw7CisgIC8vIHVt
cGYhIHNvbWV0aW1lcyBudWxsIG5vZGVzIGNyZWVwIGluLgorICBpZiAoIWNhcmV0Tm9kZSkgcmV0
dXJuIGZhbHNlOworICBlbnN1cmVOb2RlSGFzRm9jdXMoY2FyZXROb2RlKTsKKyAgaWYgKG1fcGFy
dC0+aXNDYXJldE1vZGUoKSB8fCBtX3BhcnQtPmlzRWRpdGFibGUoKQorICAgICB8fCBjYXJldE5v
ZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPnVzZXJJbnB1dCgpID09IFVJX0VOQUJMRUQpIHsKKyAg
ICBjYXJldE9uKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0vKmVuZCBpZiovCisgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBLSFRNTFZpZXc6OmNhcmV0S2V5UHJlc3NFdmVudChRS2V5RXZlbnQg
Kl9rZSkgeworICBOb2RlSW1wbCAqb2xkU3RhcnRTZWwgPSBtX3BhcnQtPmQtPm1fc2VsZWN0aW9u
U3RhcnQuaGFuZGxlKCk7CisgIGxvbmcgb2xkU3RhcnRPZnMgPSBtX3BhcnQtPmQtPm1fc3RhcnRP
ZmZzZXQ7CisgIE5vZGVJbXBsICpvbGRFbmRTZWwgPSBtX3BhcnQtPmQtPm1fc2VsZWN0aW9uRW5k
LmhhbmRsZSgpOworICBsb25nIG9sZEVuZE9mcyA9IG1fcGFydC0+ZC0+bV9lbmRPZmZzZXQ7CisK
KyAgTm9kZUltcGwgKm9sZENhcmV0Tm9kZSA9IG1fcGFydC0+ZC0+Y2FyZXROb2RlKCkuaGFuZGxl
KCk7CisgIGxvbmcgb2xkT2Zmc2V0ID0gbV9wYXJ0LT5kLT5jYXJldE9mZnNldCgpOworCisgIGJv
b2wgY3RybCA9IF9rZS0+c3RhdGUoKSAmIENvbnRyb2xCdXR0b247CisKKy8vIEZJWE1FOiB0aGlz
IGlzIHRoYXQgd2lkZWx5IGluZGVudGVkIGJlY2F1c2UgSSB3aWxsIHdyaXRlIGlmcyBhcm91bmQg
aXQuCisgICAgICBzd2l0Y2goX2tlLT5rZXkoKSkgeworICAgICAgICBjYXNlIEtleV9TcGFjZToK
KyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEtleV9Eb3duOgorCSAgbW92ZUNhcmV0
TmV4dExpbmUoMSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBLZXlfVXA6CisJ
ICBtb3ZlQ2FyZXRQcmV2TGluZSgxKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEtleV9MZWZ0OgorCSAgbW92ZUNhcmV0QnkoZmFsc2UsIGN0cmwgPyBDYXJldEJ5V29yZCA6IENh
cmV0QnlDaGFyYWN0ZXIsIDEpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgS2V5
X1JpZ2h0OgorCSAgbW92ZUNhcmV0QnkodHJ1ZSwgY3RybCA/IENhcmV0QnlXb3JkIDogQ2FyZXRC
eUNoYXJhY3RlciwgMSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBLZXlfTmV4
dDoKKwkgIG1vdmVDYXJldE5leHRQYWdlKCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBLZXlfUHJpb3I6CisJICBtb3ZlQ2FyZXRQcmV2UGFnZSgpOworICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgS2V5X0hvbWU6CisJICBpZiAoY3RybCkKKwkgICAgbW92ZUNhcmV0
VG9Eb2N1bWVudEJvdW5kYXJ5KGZhbHNlKTsKKwkgIGVsc2UKKwkgICAgbW92ZUNhcmV0VG9MaW5l
QmVnaW4oKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEtleV9FbmQ6CisJICBp
ZiAoY3RybCkKKwkgICAgbW92ZUNhcmV0VG9Eb2N1bWVudEJvdW5kYXJ5KHRydWUpOworCSAgZWxz
ZQorCSAgICBtb3ZlQ2FyZXRUb0xpbmVFbmQoKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAg
fS8qZW5kIHN3aXRjaCovCisKKyAgaWYgKChtX3BhcnQtPmQtPmNhcmV0Tm9kZSgpLmhhbmRsZSgp
ICE9IG9sZENhcmV0Tm9kZQorICAJfHwgbV9wYXJ0LT5kLT5jYXJldE9mZnNldCgpICE9IG9sZE9m
ZnNldCkKKwkvLyBub2RlIHNob3VsZCBuZXZlciBiZSBudWxsLCBidXQgZmF1bHR5IGNvbmRpdGlv
bnMgbWF5IGNhdXNlIGl0IHRvIGJlCisJJiYgIW1fcGFydC0+ZC0+Y2FyZXROb2RlKCkuaXNOdWxs
KCkpIHsKKworICAgIGlmIChfa2UtPnN0YXRlKCkgJiBTaGlmdEJ1dHRvbikgewkvLyBleHRlbmQg
c2VsZWN0aW9uCisKKyAgICAgIGlmIChtX3BhcnQtPmQtPm1fc2VsZWN0aW9uU3RhcnQgPT0gbV9w
YXJ0LT5kLT5tX3NlbGVjdGlvbkVuZAorICAgICAgICAgICYmIG1fcGFydC0+ZC0+bV9zdGFydE9m
ZnNldCA9PSBtX3BhcnQtPmQtPm1fZW5kT2Zmc2V0KSB7CisgICAgICAgIGlmIChmb2xkU2VsZWN0
aW9uVG9DYXJldChvbGRTdGFydFNlbCwgb2xkU3RhcnRPZnMsIG9sZEVuZFNlbCwgb2xkRW5kT2Zz
KSkKKyAgICAgICAgICBtX3BhcnQtPmVtaXRTZWxlY3Rpb25DaGFuZ2VkKCk7CisgICAgICAgIG1f
cGFydC0+ZC0+bV9leHRlbmRBdEVuZCA9IHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICAv
LyBjaGVjayBpZiB0aGUgZXh0ZW5kaW5nIGVuZCBoYXMgcGFzc2VkIHRoZSBpbW1vYmlsZSBlbmQK
KyAgICAgICAgaWYgKG1fcGFydC0+ZC0+bV9zZWxlY3Rpb25TdGFydCA9PSBtX3BhcnQtPmQtPm1f
c2VsZWN0aW9uRW5kKSB7CisJICBpZiAobV9wYXJ0LT5kLT5tX3N0YXJ0T2Zmc2V0ID4gbV9wYXJ0
LT5kLT5tX2VuZE9mZnNldCkgeworICAgICAgICAgICAgbG9uZyB0bXBPZmZzZXQgPSBtX3BhcnQt
PmQtPm1fc3RhcnRPZmZzZXQ7CisgICAgICAgICAgICBtX3BhcnQtPmQtPm1fc3RhcnRPZmZzZXQg
PSBtX3BhcnQtPmQtPm1fZW5kT2Zmc2V0OworICAgICAgICAgICAgbV9wYXJ0LT5kLT5tX2VuZE9m
ZnNldCA9IHRtcE9mZnNldDsKKyAgICAgICAgICAgIG1fcGFydC0+ZC0+bV9zdGFydEJlZm9yZUVu
ZCA9IHRydWU7CisgICAgICAgICAgICBtX3BhcnQtPmQtPm1fZXh0ZW5kQXRFbmQgPSAhbV9wYXJ0
LT5kLT5tX2V4dGVuZEF0RW5kOworCSAgfS8qZW5kIGlmKi8KKwl9IGVsc2UgaWYgKGlzQmVmb3Jl
Tm9kZShtX3BhcnQtPmQtPm1fc2VsZWN0aW9uRW5kLCBtX3BhcnQtPmQtPm1fc2VsZWN0aW9uU3Rh
cnQpKSB7CisgICAgICAgICAgRE9NOjpOb2RlIHRtcE5vZGUgPSBtX3BhcnQtPmQtPm1fc2VsZWN0
aW9uU3RhcnQ7CisgICAgICAgICAgbG9uZyB0bXBPZmZzZXQgPSBtX3BhcnQtPmQtPm1fc3RhcnRP
ZmZzZXQ7CisgICAgICAgICAgbV9wYXJ0LT5kLT5tX3NlbGVjdGlvblN0YXJ0ID0gbV9wYXJ0LT5k
LT5tX3NlbGVjdGlvbkVuZDsKKyAgICAgICAgICBtX3BhcnQtPmQtPm1fc3RhcnRPZmZzZXQgPSBt
X3BhcnQtPmQtPm1fZW5kT2Zmc2V0OworICAgICAgICAgIG1fcGFydC0+ZC0+bV9zZWxlY3Rpb25F
bmQgPSB0bXBOb2RlOworICAgICAgICAgIG1fcGFydC0+ZC0+bV9lbmRPZmZzZXQgPSB0bXBPZmZz
ZXQ7CisgICAgICAgICAgbV9wYXJ0LT5kLT5tX3N0YXJ0QmVmb3JlRW5kID0gdHJ1ZTsKKyAgICAg
ICAgICBtX3BhcnQtPmQtPm1fZXh0ZW5kQXRFbmQgPSAhbV9wYXJ0LT5kLT5tX2V4dGVuZEF0RW5k
OworCX0vKmVuZCBpZiovCisgICAgICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5zZXRTZWxlY3Rp
b24obV9wYXJ0LT5kLT5tX3NlbGVjdGlvblN0YXJ0LmhhbmRsZSgpLAorCQltX3BhcnQtPmQtPm1f
c3RhcnRPZmZzZXQsIG1fcGFydC0+ZC0+bV9zZWxlY3Rpb25FbmQuaGFuZGxlKCksCisJCW1fcGFy
dC0+ZC0+bV9lbmRPZmZzZXQpOworICAgICAgICBtX3BhcnQtPmVtaXRTZWxlY3Rpb25DaGFuZ2Vk
KCk7CisgICAgICB9LyplbmQgaWYqLworCisgICAgICBrZERlYnVnKDYyMDApIDw8ICJleHRlbmRB
dEVuZDogIiA8PCBtX3BhcnQtPmQtPm1fZXh0ZW5kQXRFbmQgPDwgZW5kbDsKKworICAgIH0gZWxz
ZSB7CQkJLy8gY2xlYXIgYW55IHNlbGVjdGlvbgorICAgICAgaWYgKGZvbGRTZWxlY3Rpb25Ub0Nh
cmV0KG9sZFN0YXJ0U2VsLCBvbGRTdGFydE9mcywgb2xkRW5kU2VsLCBvbGRFbmRPZnMpKQorICAg
ICAgICBtX3BhcnQtPmVtaXRTZWxlY3Rpb25DaGFuZ2VkKCk7CisgICAgfS8qZW5kIGlmKi8KKwor
ICAgIG1fcGFydC0+ZW1pdENhcmV0UG9zaXRpb25DaGFuZ2VkKG1fcGFydC0+ZC0+Y2FyZXROb2Rl
KCksIG1fcGFydC0+ZC0+Y2FyZXRPZmZzZXQoKSk7CisgIH0vKmVuZCBpZiovCisKKyAgX2tlLT5h
Y2NlcHQoKTsKK30KKworYm9vbCBLSFRNTFZpZXc6Om1vdmVDYXJldFRvKE5vZGVJbXBsICpub2Rl
LCBsb25nIG9mZnNldCwgYm9vbCBjbGVhclNlbCkgeworICBzYW5pdGl6ZUNhcmV0U3RhdGUobm9k
ZSwgb2Zmc2V0KTsKKworICBOb2RlSW1wbCAqb2xkU3RhcnRTZWwgPSBtX3BhcnQtPmQtPm1fc2Vs
ZWN0aW9uU3RhcnQuaGFuZGxlKCk7CisgIGxvbmcgb2xkU3RhcnRPZnMgPSBtX3BhcnQtPmQtPm1f
c3RhcnRPZmZzZXQ7CisgIE5vZGVJbXBsICpvbGRFbmRTZWwgPSBtX3BhcnQtPmQtPm1fc2VsZWN0
aW9uRW5kLmhhbmRsZSgpOworICBsb25nIG9sZEVuZE9mcyA9IG1fcGFydC0+ZC0+bV9lbmRPZmZz
ZXQ7CisKKyAgLy8gdGVzdCBmb3IgcG9zaXRpb24gY2hhbmdlCisgIGJvb2wgcG9zQ2hhbmdlZCA9
IG1fcGFydC0+ZC0+Y2FyZXROb2RlKCkuaGFuZGxlKCkgIT0gbm9kZQorICAJCXx8IG1fcGFydC0+
ZC0+Y2FyZXRPZmZzZXQoKSAhPSBvZmZzZXQ7CisgIGJvb2wgZm9sZGVkID0gZmFsc2U7CisKKyAg
bV9wYXJ0LT5kLT5jYXJldE5vZGUoKSA9IG5vZGU7CisgIG1fcGFydC0+ZC0+Y2FyZXRPZmZzZXQo
KSA9IG9mZnNldDsKKyAgaWYgKGNsZWFyU2VsKSB7CisgICAgZm9sZGVkID0gZm9sZFNlbGVjdGlv
blRvQ2FyZXQob2xkU3RhcnRTZWwsIG9sZFN0YXJ0T2ZzLCBvbGRFbmRTZWwsIG9sZEVuZE9mcyk7
CisgIH0vKmVuZCBpZiovCisKKyAgYm9vbCB2aXNpYmxlX2NhcmV0ID0gcGxhY2VDYXJldCgpOwor
CisgIC8vIEZJWE1FOiBpZiB0aGUgb2xkIHBvc2l0aW9uIHdhcyAhdmlzaWJsZV9jYXJldCwgYW5k
IHRoZSBuZXcgcG9zaXRpb24gaXMKKyAgLy8gYWxzbywgdGhlbiB0d28gY2FyZXRQb3NpdGlvbkNo
YW5nZWQgc2lnbmFscyB3aXRoIGEgbnVsbCBOb2RlIGFyZQorICAvLyBlbWl0dGVkIGluIHNlcmll
cy4KKyAgaWYgKHBvc0NoYW5nZWQpIHsKKyAgICBtX3BhcnQtPmVtaXRDYXJldFBvc2l0aW9uQ2hh
bmdlZCh2aXNpYmxlX2NhcmV0ID8gbm9kZSA6IDAsIG9mZnNldCk7CisgIH0vKmVuZCBpZiovCisK
KyAgcmV0dXJuIGZvbGRlZDsKK30KKworLyoqIHNlZWtzIHRoZSBpbmxpbmUgYm94IHdoaWNoIGNv
bnRhaW5zIG9yIGlzIHRoZSBuZWFyZXN0IHRvIEBwIHgKKyAqIEBwYXJhbSBpdCBsaW5lIGl0ZXJh
dG9yIHBvaW50aW5nIHRvIGxpbmUgdG8gYmUgc2VhcmNoZWQKKyAqIEBwYXJhbSBjdiBjYXJldCB2
aWV3IGNvbnRleHQKKyAqIEBwYXJhbSB4IHJldHVybnMgdGhlIGN2LT5vcmlnWCBhcHByb3hpbWF0
aW9uLCByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgdG8gdGhlCisgKgljb250YWluaW5nIGJsb2NrLgor
ICogQHBhcmFtIGFic3ggcmV0dXJucyBhYnNvbHV0ZSB4LWNvb3JkaW5hdGUgb2YgY29udGFpbmlu
ZyBibG9jaworICogQHBhcmFtIGFic3kgcmV0dXJucyBhYnNvbHV0ZSB5LWNvb3JkaW5hdGUgb2Yg
Y29udGFpbmluZyBibG9jaworICogQHJldHVybiB0aGUgbW9zdCBzdWl0YWJsZSBpbmxpbmUgYm94
CisgKi8KK3N0YXRpYyBJbmxpbmVCb3ggKm5lYXJlc3RJbmxpbmVCb3goTGluZUl0ZXJhdG9yICZp
dCwgQ2FyZXRWaWV3Q29udGV4dCAqY3YsCisJaW50ICZ4LCBpbnQgJmFic3gsIGludCAmYWJzeSkg
eworICBJbmxpbmVGbG93Qm94ICpmYm94ID0gKml0OworICAKKyAgLy8gRmluZCBjb250YWluaW5n
IGJsb2NrCisgIFJlbmRlck9iamVjdCAqY2IgPSBmYm94LT5vYmplY3QoKTsKKworICBpZiAoY2Ip
IGNiLT5hYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFic3kpOworICBlbHNlIGFic3ggPSBhYnN5ID0g
MDsKKworICAvLyBPdGhlcndpc2UgZmluZCBvdXQgaW4gd2hpY2ggaW5saW5lIGJveCB0aGUgY2Fy
ZXQgaXMgdG8gYmUgcGxhY2VkLgorCisgIC8vIHRoaXMgaG9yaXpvbnRhbCBwb3NpdGlvbiBpcyB0
byBiZSBhcHByb3hpbWF0ZWQKKyAgeCA9IGN2LT5vcmlnWCAtIGFic3g7CisgIElubGluZUJveCAq
Y2FyZXRCb3ggPSAwOyAvLyBJbmxpbmUgYm94IGNvbnRhaW5pbmcgdGhlIGNhcmV0CisvLyAgTm9k
ZUltcGwgKmxhc3Rub2RlID0gMDsgIC8vIG5vZGUgb2YgcHJldmlvdXNseSBjaGVja2VkIHJlbmRl
ciBvYmplY3QuCisgIGludCB4UG9zOwkJICAgLy8geC1jb29yZGluYXRlIG9mIGN1cnJlbnQgaW5s
aW5lIGJveAorICBpbnQgb2xkWFBvcyA9IC0xOwkgICAvLyB4LWNvb3JkaW5hdGUgb2YgbGFzdCBp
bmxpbmUgYm94CisgIEVkaXRhYmxlSW5saW5lQm94SXRlcmF0b3IgZmJpdCA9IGl0OworICBrZERl
YnVnKDYyMDApIDw8ICIqZmJpdCA9ICIgPDwgKmZiaXQgPDwgZW5kbDsKKyAgLy8gRWl0aGVyIGl0
ZXJhdGUgdGhyb3VnaCBhbGwgY2hpbGRyZW4gb3IgdGFrZSB0aGUgZmxvdyBib3ggaXRzZWxmIGFz
IGEKKyAgLy8gY2hpbGQgaWYgaXQgaGFzIG5vIGNoaWxkcmVuCisgIGZvciAoSW5saW5lQm94ICpi
OyAqZmJpdCAhPSAwOyArK2ZiaXQpIHsKKyAgICBiID0gKmZiaXQ7CisKKy8vICAgIFJlbmRlck9i
amVjdCAqciA9IGItPm9iamVjdCgpOworCWlmIChiLT5pc0lubGluZUZsb3dCb3goKSkga2REZWJ1
Zyg2MjAwKSA8PCAiYiBpcyBpbmxpbmUgZmxvdyBib3giIDw8IGVuZGw7CisvLwlrZERlYnVnKDYy
MDApIDw8ICJhcHByb3hpbWF0ZSByIiA8PCByIDw8ICI6ICIgPDwgKHIgPyByLT5yZW5kZXJOYW1l
KCkgOiBRU3RyaW5nOjpudWxsKSA8PCAociAmJiByLT5pc1RleHQoKSA/ICIgY29udGFpbnMgXCIi
ICsgUVN0cmluZygoKFJlbmRlclRleHQgKilyKS0+c3RyLT5zLCAoKFJlbmRlclRleHQgKilyKS0+
c3RyLT5sKSArICJcIiIgOiBRU3RyaW5nOjpudWxsKSA8PCBlbmRsOworLy8gICAgTm9kZUltcGwg
Km5vZGUgPSByLT5lbGVtZW50KCk7CisgICAgeFBvcyA9IGItPnhQb3MoKTsKKworICAgIC8vIHRo
ZSBjYXJldCBpcyBiZWZvcmUgdGhpcyBib3gKKyAgICBpZiAoeCA8IHhQb3MpIHsKKyAgICAgIC8v
IHNuYXAgdG8gbmVhcmVzdCBib3gKKyAgICAgIGlmIChvbGRYUG9zIDwgMCB8fCB4IC0gKG9sZFhQ
b3MgKyBjYXJldEJveC0+d2lkdGgoKSkgPiB4UG9zIC0geCkgeworCWNhcmV0Qm94ID0gYjsJLy8g
Y3VycmVudCBib3ggaXMgbmVhcmVyCisvLyAgICAgICAgbGFzdG5vZGUgPSBub2RlOworICAgICAg
fS8qZW5kIGlmKi8KKyAgICAgIGJyZWFrOwkJLy8gT3RoZXJ3aXNlLCBwcmVjZWRpbmcgYm94IGlz
IGltcGxpY2l0bHkgdXNlZAorICAgIH0KKworICAgIGNhcmV0Qm94ID0gYjsKKy8vICAgIGxhc3Ru
b2RlID0gbm9kZTsKKworICAgIC8vIHRoZSBjYXJldCBpcyB3aXRoaW4gdGhpcyBib3gKKyAgICBp
ZiAoeCA+PSB4UG9zICYmIHggPCB4UG9zICsgY2FyZXRCb3gtPndpZHRoKCkpCisgICAgICBicmVh
azsKKyAgICBvbGRYUG9zID0geFBvczsKKworICAgIC8vIHRoZSBjYXJldCBjYW4gb25seSBiZSBh
ZnRlciB0aGUgbGFzdCBib3ggd2hpY2ggaXMgYXV0b21hdGljYWxseQorICAgIC8vIGNvbnRhaW5l
ZCBpbiBjYXJldEJveCB3aGVuIHdlIGZhbGwgb3V0IG9mIHRoZSBsb29wLgorCisgICAgaWYgKGIg
PT0gZmJveCkgYnJlYWs7CisgIH0vKm5leHQgZmJpdCovCisKKyAgcmV0dXJuIGNhcmV0Qm94Owor
fQorCit2b2lkIEtIVE1MVmlldzo6bW92ZUNhcmV0QnlMaW5lKGJvb2wgbmV4dCwgaW50IGNvdW50
KSB7CisgIC8vIEZJWE1FOiB3aGF0IGlmIHRoZSBub2RlIGlzIHJlbW92ZWQgd2hpbHN0IHdlIGFj
Y2VzcyBpdD8KKyAgLy8gQ3VycmVudCBzb2x1dGlvbjogYmFpbCBvdXQKKyAgTm9kZSAmY2FyZXRO
b2RlUmVmID0gbV9wYXJ0LT5kLT5jYXJldE5vZGUoKTsKKyAgaWYgKGNhcmV0Tm9kZVJlZi5pc051
bGwoKSkgcmV0dXJuOworCisgIE5vZGVJbXBsICpjYXJldE5vZGUgPSBjYXJldE5vZGVSZWYuaGFu
ZGxlKCk7CisvLyAga2REZWJ1Zyg2MjAwKSA8PCAiOiBjYXJldE5vZGU9IiA8PCBjYXJldE5vZGUg
PDwgZW5kbDsKKyAgbG9uZyBvZmZzZXQgPSBtX3BhcnQtPmQtPmNhcmV0T2Zmc2V0KCk7CisKKyAg
TGluZWFyRG9jdW1lbnQgbGQobV9wYXJ0LCBjYXJldE5vZGUsIG9mZnNldCk7CisKKyAgRXJnb25v
bWljRWRpdGFibGVMaW5lSXRlcmF0b3IgaXQgPSBsZC5jdXJyZW50KCk7CisKKyAgLy8gbW92ZSBj
b3VudCBsaW5lcyB2ZXJ0aWNhbGx5CisgIHdoaWxlIChjb3VudCA+IDAgJiYgaXQgIT0gbGQuZW5k
KCkgJiYgaXQgIT0gbGQucHJlQmVnaW4oKSkgeworICAgIGNvdW50LS07CisgICAgaWYgKG5leHQp
ICsraXQ7IGVsc2UgLS1pdDsKKyAgfS8qd2VuZCovCisKKyAgLy8gTm90aGluZz8gVGhlbiBsZWF2
ZSBldmVyeXRoaW5nIGFzIGlzLgorICBpZiAoaXQgPT0gbGQuZW5kKCkgfHwgaXQgPT0gbGQucHJl
QmVnaW4oKSkgcmV0dXJuOworCisgIGludCB4LCBhYnN4LCBhYnN5OworICBJbmxpbmVCb3ggKmNh
cmV0Qm94ID0gbmVhcmVzdElubGluZUJveChpdCwgZC0+bV9jYXJldFZpZXdDb250ZXh0LCB4LCBh
YnN4LCBhYnN5KTsKKworICBwbGFjZUNhcmV0T25MaW5lKGNhcmV0Qm94LCB4LCBhYnN4LCBhYnN5
KTsKK30KKwordm9pZCBLSFRNTFZpZXc6OnBsYWNlQ2FyZXRPbkxpbmUoSW5saW5lQm94ICpjYXJl
dEJveCwgaW50IHgsIGludCBhYnN4LCBpbnQgYWJzeSkgeworICAvLyBwYXJhbm9pYSBzYW5pdHkg
Y2hlY2sKKyAgaWYgKCFjYXJldEJveCkgcmV0dXJuOworCisgIE5vZGVJbXBsICpjYXJldE5vZGUg
PSBjYXJldEJveC0+b2JqZWN0KCktPmVsZW1lbnQoKTsKKworICBrZERlYnVnKDYyMDApIDw8ICJn
b3QgdmFsaWQgY2FyZXRCb3ggIiA8PCBjYXJldEJveCA8PCBlbmRsOworICBrZERlYnVnKDYyMDAp
IDw8ICJ4UG9zOiAiIDw8IGNhcmV0Qm94LT54UG9zKCkgPDwgIiB5UG9zOiAiIDw8IGNhcmV0Qm94
LT55UG9zKCkKKyAgCQk8PCAiIHdpZHRoOiAiIDw8IGNhcmV0Qm94LT53aWR0aCgpIDw8ICIgaGVp
Z2h0OiAiIDw8IGNhcmV0Qm94LT5oZWlnaHQoKSA8PCBlbmRsOworICBpZiAoY2FyZXRCb3gtPmlz
SW5saW5lVGV4dEJveCgpKSB7IGtkRGVidWcoNjIwMCkgPDwgImNvbnRhaW5zIFwiIiA8PCBRU3Ry
aW5nKCgoUmVuZGVyVGV4dCAqKSgoSW5saW5lVGV4dEJveCAqKWNhcmV0Qm94KS0+b2JqZWN0KCkp
LT5zdHItPnMgKyAoKElubGluZVRleHRCb3ggKiljYXJldEJveCktPm1fc3RhcnQsICgoSW5saW5l
VGV4dEJveCAqKWNhcmV0Qm94KS0+bV9sZW4pIDw8ICJcIiIgPDwgZW5kbDt9CisgIC8vIGlucXVp
cmUgaGVpZ2h0IG9mIGNhcmV0CisgIGludCBjYXJldEhlaWdodCA9IGNhcmV0Qm94LT5oZWlnaHQo
KTsKKyAgYm9vbCBpc1RleHQgPSBjYXJldEJveC0+aXNJbmxpbmVUZXh0Qm94KCk7CisgIGlmIChp
c1RleHQpIHsKKyAgICAvLyB0ZXh0IGJveGVzIG5lZWQgZXh0cmF3dXJzdAorICAgIFJlbmRlclRl
eHQgKnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KGNhcmV0Qm94LT5vYmplY3QoKSk7Cisg
ICAgY2FyZXRIZWlnaHQgPSB0LT5tZXRyaWNzKGNhcmV0Qm94LT5tX2ZpcnN0TGluZSkuaGVpZ2h0
KCk7CisgIH0vKmVuZCBpZiovCisKKyAgY2FyZXRPZmYoKTsKKworICAvLyBzZXQgbmV3IGNhcmV0
IG5vZGUKKyAgbV9wYXJ0LT5kLT5jYXJldE5vZGUoKSA9IGNhcmV0Tm9kZTsKKyAgbG9uZyAmb2Zm
c2V0ID0gbV9wYXJ0LT5kLT5jYXJldE9mZnNldCgpOworCisgIC8vIHNldCBhbGwgdmFyaWFibGVz
IG5vdCBuZWVkaW5nIHNwZWNpYWwgdHJlYXRtZW50CisgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+
eSA9IGNhcmV0Qm94LT55UG9zKCk7CisgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+aGVpZ2h0ID0g
Y2FyZXRIZWlnaHQ7CisgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+d2lkdGggPSAxOyAvLyBGSVhN
RTogcmVnYXJkIG92ZXJyaWRlCisKKyAgaW50IHhQb3MgPSBjYXJldEJveC0+eFBvcygpOworICBp
bnQgY2FyZXRCb3hXaWR0aCA9IGNhcmV0Qm94LT53aWR0aCgpOworCisgIC8vIGJlZm9yZSBvciBh
dCBiZWdpbm5pbmcgb2YgaW5saW5lIGJveCAtPiBwbGFjZSBhdCBiZWdpbm5pbmcKKyAgaWYgKHgg
PD0geFBvcykgeworICAgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eCA9IHhQb3M7CisgICAgb2Zm
c2V0ID0gY2FyZXRCb3gtPm1pbk9mZnNldCgpOworICAvLyBzb21ld2hlcmUgd2l0aGluIHRoaXMg
YmxvY2sKKyAgfSBlbHNlIGlmICh4ID4geFBvcyAmJiB4IDw9IHhQb3MgKyBjYXJldEJveFdpZHRo
KSB7CisgICAgaWYgKGlzVGV4dCkgeyAvLyBmaW5kIG91dCB3aGVyZSBleGFjdGx5CisgICAgICBv
ZmZzZXQgPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94ICo+KGNhcmV0Qm94KS0+b2Zmc2V0Rm9y
UG9pbnQoeCwKKyAgICAgIAkJZC0+bV9jYXJldFZpZXdDb250ZXh0LT54KTsKKyAgICAgIGtkRGVi
dWcoNjIwMCkgPDwgImRldmlhdGlvbiBmcm9tIG9yaWdYICIgPDwgZC0+bV9jYXJldFZpZXdDb250
ZXh0LT54IC0geCA8PCBlbmRsOworICAgIH0gZWxzZSB7CS8vIHNuYXAgdG8gbmVhcmVzdCBlbmQK
KyAgICAgIGlmICh4UG9zICsgY2FyZXRCb3hXaWR0aCAtIHggPCB4IC0geFBvcykgeworICAgICAg
ICBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnggPSB4UG9zICsgY2FyZXRCb3hXaWR0aDsKKyAgICAg
ICAgb2Zmc2V0ID0gY2FyZXROb2RlID8gY2FyZXROb2RlLT5tYXhPZmZzZXQoKSA6IDE7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnggPSB4UG9zOworICAg
ICAgICBvZmZzZXQgPSBjYXJldE5vZGUgPyBjYXJldE5vZGUtPm1pbk9mZnNldCgpIDogMDsKKyAg
ICAgIH0vKmVuZCBpZiovCisgICAgfS8qZW5kIGlmKi8KKyAgfSBlbHNlIHsJCS8vIGFmdGVyIHRo
ZSBpbmxpbmUgYm94IC0+IHBsYWNlIGF0IGVuZAorICAgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+
eCA9IHhQb3MgKyBjYXJldEJveFdpZHRoOworICAgIG9mZnNldCA9IGNhcmV0Qm94LT5tYXhPZmZz
ZXQoKTsKKyAgfS8qZW5kIGlmKi8KKyAgICAgIGtkRGVidWcoNjIwMCkgPDwgIm5ldyBvZmZzZXQ6
ICIgPDwgb2Zmc2V0IDw8IGVuZGw7CisKKyAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT54ICs9IGFi
c3g7CisgIGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eSArPSBhYnN5OworCisgIGVuc3VyZVZpc2li
bGUoZC0+bV9jYXJldFZpZXdDb250ZXh0LT54LCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPnksCisg
IAlkLT5tX2NhcmV0Vmlld0NvbnRleHQtPndpZHRoLCBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPmhl
aWdodCk7CisgIGQtPnNjcm9sbEJhck1vdmVkID0gZmFsc2U7CisKKyAgZW5zdXJlTm9kZUhhc0Zv
Y3VzKGNhcmV0Tm9kZSk7CisgIGNhcmV0T24oKTsKK30KKwordm9pZCBLSFRNTFZpZXc6Om1vdmVD
YXJldFRvTGluZUJvdW5kYXJ5KGJvb2wgZW5kKSB7CisgIC8vIEZJWE1FOiB3aGF0IGlmIHRoZSBu
b2RlIGlzIHJlbW92ZWQgd2hpbHN0IHdlIGFjY2VzcyBpdD8KKyAgLy8gQ3VycmVudCBzb2x1dGlv
bjogYmFpbCBvdXQKKyAgTm9kZSAmY2FyZXROb2RlUmVmID0gbV9wYXJ0LT5kLT5jYXJldE5vZGUo
KTsKKyAgaWYgKGNhcmV0Tm9kZVJlZi5pc051bGwoKSkgcmV0dXJuOworCisgIE5vZGVJbXBsICpj
YXJldE5vZGUgPSBjYXJldE5vZGVSZWYuaGFuZGxlKCk7CisvLyAga2REZWJ1Zyg2MjAwKSA8PCAi
OiBjYXJldE5vZGU9IiA8PCBjYXJldE5vZGUgPDwgZW5kbDsKKyAgbG9uZyBvZmZzZXQgPSBtX3Bh
cnQtPmQtPmNhcmV0T2Zmc2V0KCk7CisKKyAgTGluZWFyRG9jdW1lbnQgbGQobV9wYXJ0LCBjYXJl
dE5vZGUsIG9mZnNldCk7CisKKyAgRWRpdGFibGVMaW5lSXRlcmF0b3IgaXQgPSBsZC5jdXJyZW50
KCk7CisgIGlmIChpdCA9PSBsZC5lbmQoKSkgcmV0dXJuOwkvLyBzaG91bGQgbm90IGhhcHBlbiwg
YnV0IHdobyBrbm93cworCisgIEVkaXRhYmxlSW5saW5lQm94SXRlcmF0b3IgZmJpdChpdCwgZW5k
KTsKKyAgSW5saW5lQm94ICpiID0gKmZiaXQ7CisgIFFfQVNTRVJUKGIpOworCisgIFJlbmRlck9i
amVjdCAqY2IgPSAoKml0KS0+b2JqZWN0KCk7CisgIGludCBhYnN4LCBhYnN5OworCisgIGlmIChj
YikgY2ItPmFic29sdXRlUG9zaXRpb24oYWJzeCxhYnN5KTsKKyAgZWxzZSBhYnN4ID0gYWJzeSA9
IDA7CisKKyAgaW50IHggPSBiLT54UG9zKCkgKyAoZW5kID8gYi0+d2lkdGgoKSA6IDApOworICBk
LT5tX2NhcmV0Vmlld0NvbnRleHQtPm9yaWdYID0gYWJzeCArIHg7CisgIHBsYWNlQ2FyZXRPbkxp
bmUoYiwgeCwgYWJzeCwgYWJzeSk7Cit9CisKK3ZvaWQgS0hUTUxWaWV3Ojptb3ZlQ2FyZXRUb0Rv
Y3VtZW50Qm91bmRhcnkoYm9vbCBlbmQpIHsKKyAgLy8gRklYTUU6IHdoYXQgaWYgdGhlIG5vZGUg
aXMgcmVtb3ZlZCB3aGlsc3Qgd2UgYWNjZXNzIGl0PworICAvLyBDdXJyZW50IHNvbHV0aW9uOiBi
YWlsIG91dAorICBOb2RlICZjYXJldE5vZGVSZWYgPSBtX3BhcnQtPmQtPmNhcmV0Tm9kZSgpOwor
ICBpZiAoY2FyZXROb2RlUmVmLmlzTnVsbCgpKSByZXR1cm47CisKKyAgTm9kZUltcGwgKmNhcmV0
Tm9kZSA9IGNhcmV0Tm9kZVJlZi5oYW5kbGUoKTsKKy8vICBrZERlYnVnKDYyMDApIDw8ICI6IGNh
cmV0Tm9kZT0iIDw8IGNhcmV0Tm9kZSA8PCBlbmRsOworICBsb25nIG9mZnNldCA9IG1fcGFydC0+
ZC0+Y2FyZXRPZmZzZXQoKTsKKworICBMaW5lYXJEb2N1bWVudCBsZChtX3BhcnQsIGNhcmV0Tm9k
ZSwgb2Zmc2V0KTsKKworICBFZGl0YWJsZUxpbmVJdGVyYXRvciBpdChlbmQgPyBsZC5wcmVFbmQo
KSA6IGxkLmJlZ2luKCksIGVuZCk7CisgIGlmIChpdCA9PSBsZC5lbmQoKSB8fCBpdCA9PSBsZC5w
cmVCZWdpbigpKSByZXR1cm47CS8vIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2hvIGtub3dzCisK
KyAgRWRpdGFibGVJbmxpbmVCb3hJdGVyYXRvciBmYml0ID0gaXQ7CisgIElubGluZUJveCAqYiA9
ICpmYml0OworICBRX0FTU0VSVChiKTsKKworICBSZW5kZXJPYmplY3QgKmNiID0gKCppdCktPm9i
amVjdCgpOworICBpbnQgYWJzeCwgYWJzeTsKKworICBpZiAoY2IpIGNiLT5hYnNvbHV0ZVBvc2l0
aW9uKGFic3gsIGFic3kpOworICBlbHNlIGFic3ggPSBhYnN5ID0gMDsKKworICBpbnQgeCA9IGIt
PnhQb3MoKS8qICsgKGVuZCA/IGItPndpZHRoKCkgOiAwKSByZWFjdGl2YXRlIGZvciBydGwqLzsK
KyAgZC0+bV9jYXJldFZpZXdDb250ZXh0LT5vcmlnWCA9IGFic3ggKyB4OworICBwbGFjZUNhcmV0
T25MaW5lKGIsIHgsIGFic3gsIGFic3kpOworfQorCisvKiogbW92ZXMgdGhlIGdpdmVuIGl0ZXJh
dG9yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgd29yZC4KKyAqCisgKiBJZiB0aGUgZW5k
IGlzIHJlYWNoZWQsIHRoZSBpdGVyYXRvciB3aWxsIGJlIHBvc2l0aW9uZWQgdGhlcmUuCisgKiBA
cGFyYW0gaXQgY2hhcmFjdGVyIGl0ZXJhdG9yIHRvIGJlIG1vdmVkCisgKi8KK3N0YXRpYyB2b2lk
IG1vdmVJdFRvTmV4dFdvcmQoRWRpdGFibGVDaGFyYWN0ZXJJdGVyYXRvciAmaXQpIHsKKyAga2RE
ZWJ1Zyg2MjAwKSA8PCAiJSUlJSUlJSUlJSUlJSUlJSUlJSUlIG1vdmVJdFRvTmV4dFdvcmQiIDw8
IGVuZGw7CisgIEVkaXRhYmxlQ2hhcmFjdGVySXRlcmF0b3IgY29weTsKKyAgd2hpbGUgKGl0Lm5v
ZGUoKSAmJiAhKCppdCkuaXNTcGFjZSgpICYmICEoKml0KS5pc1B1bmN0KCkpIHsKKyAgICBrZERl
YnVnKDYyMDApIDw8ICJyZWFkaW5nMSAnIiA8PCAoKml0KS5sYXRpbjEoKSA8PCAiJyIgPDwgZW5k
bDsKKyAgICBjb3B5ID0gaXQ7CisgICAgKytpdDsKKyAgfQorCisgIGlmICghaXQubm9kZSgpKSB7
CisgICAgaXQgPSBjb3B5OworICAgIHJldHVybjsKKyAgfS8qZW5kIGlmKi8KKworICB3aGlsZSAo
aXQubm9kZSgpICYmICgoKml0KS5pc1NwYWNlKCkgfHwgKCppdCkuaXNQdW5jdCgpKSkgeworICAg
IGtkRGVidWcoNjIwMCkgPDwgInJlYWRpbmcyICciIDw8ICgqaXQpLmxhdGluMSgpIDw8ICInIiA8
PCBlbmRsOworICAgIGNvcHkgPSBpdDsKKyAgICArK2l0OworICB9CisKKyAgaWYgKCFpdC5ub2Rl
KCkpIGl0ID0gY29weTsKK30KKworLyoqIG1vdmVzIHRoZSBnaXZlbiBpdGVyYXRvciB0byB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBwcmV2aW91cyB3b3JkLgorICoKKyAqIElmIHRoZSBiZWdpbm5pbmcg
aXMgcmVhY2hlZCwgdGhlIGl0ZXJhdG9yIHdpbGwgYmUgcG9zaXRpb25lZCB0aGVyZS4KKyAqIEBw
YXJhbSBpdCBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gYmUgbW92ZWQKKyAqLworc3RhdGljIHZvaWQg
bW92ZUl0VG9QcmV2V29yZChFZGl0YWJsZUNoYXJhY3Rlckl0ZXJhdG9yICZpdCkgeworICBpZiAo
IWl0Lm5vZGUoKSkgcmV0dXJuOworCisgIGtkRGVidWcoNjIwMCkgPDwgIiUlJSUlJSUlJSUlJSUl
JSUlJSUlJSBtb3ZlSXRUb1ByZXZXb3JkIiA8PCBlbmRsOworICBFZGl0YWJsZUNoYXJhY3Rlckl0
ZXJhdG9yIGNvcHk7CisKKyAgLy8gSnVtcCBvdmVyIGFsbCBzcGFjZSBhbmQgcHVuY3R1YXRpb24g
Y2hhcmFjdGVycyBmaXJzdAorICBkbyB7CisgICAgY29weSA9IGl0OworICAgIC0taXQ7CisgICAg
aWYgKGl0Lm5vZGUoKSkga2REZWJ1Zyg2MjAwKSA8PCAicmVhZGluZzEgJyIgPDwgKCppdCkubGF0
aW4xKCkgPDwgIiciIDw8IGVuZGw7CisgIH0gd2hpbGUgKGl0Lm5vZGUoKSAmJiAoKCppdCkuaXNT
cGFjZSgpIHx8ICgqaXQpLmlzUHVuY3QoKSkpOworCisgIGlmICghaXQubm9kZSgpKSB7CisgICAg
aXQgPSBjb3B5OworICAgIHJldHVybjsKKyAgfS8qZW5kIGlmKi8KKworICBkbyB7CisgICAgY29w
eSA9IGl0OworICAgIC0taXQ7CisgICAgaWYgKGl0Lm5vZGUoKSkga2REZWJ1Zyg2MjAwKSA8PCAi
cmVhZGluZzIgJyIgPDwgKCppdCkubGF0aW4xKCkgPDwgIiciIDw8IGVuZGw7CisgIH0gd2hpbGUg
KGl0Lm5vZGUoKSAmJiAhKCppdCkuaXNTcGFjZSgpICYmICEoKml0KS5pc1B1bmN0KCkpOworCisg
IGl0ID0gY29weTsKK30KKwordm9pZCBLSFRNTFZpZXc6Om1vdmVDYXJldEJ5KGJvb2wgbmV4dCwg
Q2FyZXRNb3ZlbWVudCBjbXYsIGludCBjb3VudCkgeworICBpZiAoIW1fcGFydCkgcmV0dXJuOwor
ICAvLyBGSVhNRTogd2hhdCBpZiB0aGUgbm9kZSBpcyByZW1vdmVkIHdoaWxzdCB3ZSBhY2Nlc3Mg
aXQ/CisgIC8vIEN1cnJlbnQgc29sdXRpb246IGJhaWwgb3V0CisgIE5vZGUgJmNhcmV0Tm9kZVJl
ZiA9IG1fcGFydC0+ZC0+Y2FyZXROb2RlKCk7CisgIGlmIChjYXJldE5vZGVSZWYuaXNOdWxsKCkp
IHJldHVybjsKKworICBOb2RlSW1wbCAqY2FyZXROb2RlID0gY2FyZXROb2RlUmVmLmhhbmRsZSgp
OworLy8gIGtkRGVidWcoNjIwMCkgPDwgIjogY2FyZXROb2RlPSIgPDwgY2FyZXROb2RlIDw8IGVu
ZGw7CisgIGxvbmcgJm9mZnNldCA9IG1fcGFydC0+ZC0+Y2FyZXRPZmZzZXQoKTsKKworICBMaW5l
YXJEb2N1bWVudCBsZChtX3BhcnQsIGNhcmV0Tm9kZSwgb2Zmc2V0KTsKKworICBFZGl0YWJsZUNo
YXJhY3Rlckl0ZXJhdG9yIGl0KCZsZCk7CisgIHdoaWxlIChpdC5ub2RlKCkgJiYgY291bnQgPiAw
KSB7CisgICAgY291bnQtLTsKKyAgICBpZiAoY212ID09IENhcmV0QnlDaGFyYWN0ZXIpIHsKKyAg
ICAgIGlmIChuZXh0KSArK2l0OworICAgICAgZWxzZSAtLWl0OworICAgIH0gZWxzZSBpZiAoY212
ID09IENhcmV0QnlXb3JkKSB7CisgICAgICBpZiAobmV4dCkgbW92ZUl0VG9OZXh0V29yZChpdCk7
CisgICAgICBlbHNlIG1vdmVJdFRvUHJldldvcmQoaXQpOworICAgIH0vKmVuZCBpZiovCisgIH0v
KndlbmQqLworICBpZiAoaXQubm9kZSgpKSB7CisgICAgY2FyZXROb2RlUmVmID0gaXQubm9kZSgp
OworICAgIG9mZnNldCA9IGl0Lm9mZnNldCgpOworICB9IGVsc2UgeworICAgIG9mZnNldCA9IG5l
eHQgPyBjYXJldE5vZGUtPm1heE9mZnNldCgpIDogY2FyZXROb2RlLT5taW5PZmZzZXQoKTsKKyAg
fS8qZW5kIGlmKi8KKyAgcGxhY2VDYXJldE9uQ2hhcigpOworfQorCit2b2lkIEtIVE1MVmlldzo6
cGxhY2VDYXJldE9uQ2hhcigpIHsKKyAgY2FyZXRPZmYoKTsKKyAgcmVjYWxjQW5kU3RvcmVDYXJl
dFBvcygpOworICBlbnN1cmVWaXNpYmxlKGQtPm1fY2FyZXRWaWV3Q29udGV4dC0+eCwgZC0+bV9j
YXJldFZpZXdDb250ZXh0LT55LAorICAJZC0+bV9jYXJldFZpZXdDb250ZXh0LT53aWR0aCwgZC0+
bV9jYXJldFZpZXdDb250ZXh0LT5oZWlnaHQpOworICBkLT5tX2NhcmV0Vmlld0NvbnRleHQtPm9y
aWdYID0gZC0+bV9jYXJldFZpZXdDb250ZXh0LT54OworICBkLT5zY3JvbGxCYXJNb3ZlZCA9IGZh
bHNlOworLy8gIGlmIChjYXJldE5vZGUtPmlzVGV4dE5vZGUoKSkgIGtkRGVidWcoNjIwMCkgPDwg
InRleHRbMF0gPSAiIDw8IChpbnQpKigoVGV4dEltcGwgKiljYXJldE5vZGUpLT5kYXRhKCkudW5p
Y29kZSgpIDw8ICIgdGV4dCA6XCIiIDw8ICgoVGV4dEltcGwgKiljYXJldE5vZGUpLT5kYXRhKCku
c3RyaW5nKCkgPDwgIlwiIiA8PCBlbmRsOworICBlbnN1cmVOb2RlSGFzRm9jdXMobV9wYXJ0LT5k
LT5jYXJldE5vZGUoKS5oYW5kbGUoKSk7CisgIGNhcmV0T24oKTsKK30KKworLyoqIG1vdmVzIHRo
ZSBpdGVyYXRvciBieSBvbmUgcGFnZS4KKyAqIEBwYXJhbSBsZCBsaW5lYXIgZG9jdW1lbnQKKyAq
IEBwYXJhbSBpdCBsaW5lIGl0ZXJhdG9yLCB3aWxsIGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkKKyAq
IEBwYXJhbSBtaW5kaXN0IG1pbmltdW0gZGlzdGFuY2UgaW4gcGl4ZWwgdGhlIGl0ZXJhdG9yIHNo
b3VsZCBiZSBtb3ZlZAorICoJKGlmIHBvc3NpYmxlKQorICogQHBhcmFtIG5leHQgQHAgdHJ1ZSwg
bW92ZSBkb3dud2FyZCwgQHAgZmFsc2UgbW92ZSB1cHdhcmQKKyAqLworc3RhdGljIHZvaWQgbW92
ZUl0ZXJhdG9yQnlQYWdlKExpbmVhckRvY3VtZW50ICZsZCwKKwkJRXJnb25vbWljRWRpdGFibGVM
aW5lSXRlcmF0b3IgJml0LCBpbnQgbWluZGlzdCwgYm9vbCBuZXh0KSB7CisgIGlmIChpdCA9PSBs
ZC5lbmQoKSB8fCBpdCA9PSBsZC5wcmVCZWdpbigpKSByZXR1cm47CisKKyAgRXJnb25vbWljRWRp
dGFibGVMaW5lSXRlcmF0b3IgY29weSA9IGl0OworICBrZERlYnVnKDYyMDApIDw8ICIgbWluZGlz
dDogIiA8PCBtaW5kaXN0IDw8IGVuZGw7CisKKyAgSW5saW5lRmxvd0JveCAqZmxvd0JveCA9ICpj
b3B5OworICBpbnQgYWJzeCA9IDAsIGFic3kgPSAwOworCisgIFJlbmRlckZsb3cgKmxhc3RjYiA9
IHN0YXRpY19jYXN0PFJlbmRlckZsb3cgKj4oZmxvd0JveC0+b2JqZWN0KCkpOworICBRX0FTU0VS
VChsYXN0Y2ItPmlzRmxvdygpKTsKKyAgbGFzdGNiLT5hYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFi
c3ksIGZhbHNlKTsJLy8gIyMjIHdoYXQgYWJvdXQgZml4ZWQ/CisKKyAgLy8gIyMjIGFjdHVhbGx5
IGZsb3dCb3gtPnlQb3MoKSBzaG91bGQgc3VmZmljZSwgYnV0IHRoaXMgaXMgbm90IHBvcnRlZAor
ICAvLyBvdmVyIHlldCBmcm9tIFdlYkNvcmUKKyAgaW50IGxhc3RmYnkgPSBmbG93Qm94LT5maXJz
dENoaWxkKCktPnlQb3MoKTsKKyAgaW50IGxhc3RoZWlnaHQgPSAwOworICBkbyB7CisgICAgaWYg
KG5leHQpICsrY29weTsgZWxzZSAtLWNvcHk7CisgICAgaWYgKGNvcHkgPT0gbGQuZW5kKCkgfHwg
Y29weSA9PSBsZC5wcmVCZWdpbigpKSBicmVhazsKKworICAgIC8vICMjIyBjaGFuZ2UgdG8gUm9v
dElubGluZUJveCBhZnRlciBmdWxsIFdlYkNvcmUgbWVyZ2UKKyAgICBmbG93Qm94ID0gc3RhdGlj
X2Nhc3Q8SW5saW5lRmxvd0JveCAqPigqY29weSk7CisgICAgUV9BU1NFUlQoZmxvd0JveC0+aXNJ
bmxpbmVGbG93Qm94KCkpOworCisgICAgUmVuZGVyRmxvdyAqY2IgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJGbG93ICo+KGZsb3dCb3gtPm9iamVjdCgpKTsKKyAgICBRX0FTU0VSVChjYi0+aXNGbG93KCkp
OworCisgICAgaW50IGRpZmYgPSAwOworICAgIC8vICMjIyBhY3R1YWxseSBmbG93Qm94LT55UG9z
KCkgc2hvdWxkIHN1ZmZpY2UsIGJ1dCB0aGlzIGlzIG5vdCBwb3J0ZWQKKyAgICAvLyBvdmVyIHll
dCBmcm9tIFdlYkNvcmUKKyAgICBpbnQgZmJ5ID0gZmxvd0JveC0+Zmlyc3RDaGlsZCgpLT55UG9z
KCk7CisgICAgaWYgKGNiICE9IGxhc3RjYikgeworICAgICAgaWYgKG5leHQpIHsKKyAgICAgICAg
ZGlmZiA9IGFic3kgKyBsYXN0ZmJ5ICsgbGFzdGhlaWdodDsKKyAgICAgICAgY2ItPmFic29sdXRl
UG9zaXRpb24oYWJzeCwgYWJzeSwgZmFsc2UpOwkvLyAjIyMgd2hhdCBhYm91dCBmaXhlZD8KKyAg
ICAgICAgZGlmZiA9IGFic3kgLSBkaWZmICsgZmJ5OworICAgICAgICBsYXN0ZmJ5ID0gMDsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIGRpZmYgPSBhYnN5OworICAgICAgICBjYi0+YWJzb2x1dGVQ
b3NpdGlvbihhYnN4LCBhYnN5LCBmYWxzZSk7CS8vICMjIyB3aGF0IGFib3V0IGZpeGVkPworICAg
ICAgICBkaWZmIC09IGFic3kgKyBmYnkgKyBsYXN0aGVpZ2h0OworCWxhc3RmYnkgPSBmYnkgLSBs
YXN0aGVpZ2h0OworICAgICAgfS8qZW5kIGlmKi8KKyAgICAgIGtkRGVidWcoNjIwMCkgPDwgImFi
c2RpZmYgIiA8PCBkaWZmIDw8IGVuZGw7CisgICAgfSBlbHNlIHsKKyAgICAgIGRpZmYgPSBRQUJT
KGZieSAtIGxhc3RmYnkpOworICAgIH0vKmVuZCBpZiovCisgICAga2REZWJ1Zyg2MjAwKSA8PCAi
Zmxvd0JveC0+Zmlyc3RDaGlsZC0+eVBvczogIiA8PCBmYnkgPDwgIiBkaWZmICIgPDwgZGlmZiA8
PCBlbmRsOworCisgICAgbWluZGlzdCAtPSBkaWZmOworCisgICAgbGFzdGhlaWdodCA9IFFBQlMo
ZmJ5IC0gbGFzdGZieSk7CisgICAgbGFzdGZieSA9IGZieTsKKyAgICBsYXN0Y2IgPSBjYjsKKyAg
ICBpdCA9IGNvcHk7CisgICAga2REZWJ1Zyg2MjAwKSA8PCAiIG1pbmRpc3Q6ICIgPDwgbWluZGlz
dCA8PCBlbmRsOworICAgIC8vIHRyaWNrOiBhY3R1YWxseSB0aGUgZGlzdGFuY2UgaXMgYWx3YXlz
IG9uZSBsaW5lIHNob3J0LCBidXQgd2UgY2Fubm90CisgICAgLy8gY2FsY3VsYXRlIHRoZSBoZWln
aHQgb2YgdGhlIGZpcnN0IGxpbmUgKCMjIyBXZWJDb3JlIHdpbGwgbWFrZSBpdCBiZXR0ZXIpCisg
ICAgLy8gVGhlcmVmb3JlLCB3ZSBzaW1wbHkgYXBwcm94aW1hdGUgdGhhdCBleGNlc3MgbGluZSBi
eSB1c2luZyB0aGUgbGFzdAorICAgIC8vIGNhbHVjdWxhdGVkIGxpbmUgaGVpZ2h0LgorICB9IHdo
aWxlIChtaW5kaXN0IC0gbGFzdGhlaWdodCA+IDApOworfQorCit2b2lkIEtIVE1MVmlldzo6bW92
ZUNhcmV0QnlQYWdlKGJvb2wgbmV4dCkgeworICAvLyBGSVhNRTogd2hhdCBpZiB0aGUgbm9kZSBp
cyByZW1vdmVkIHdoaWxzdCB3ZSBhY2Nlc3MgaXQ/CisgIC8vIEN1cnJlbnQgc29sdXRpb246IGJh
aWwgb3V0CisgIE5vZGUgJmNhcmV0Tm9kZVJlZiA9IG1fcGFydC0+ZC0+Y2FyZXROb2RlKCk7Cisg
IGlmIChjYXJldE5vZGVSZWYuaXNOdWxsKCkpIHJldHVybjsKKworICBOb2RlSW1wbCAqY2FyZXRO
b2RlID0gY2FyZXROb2RlUmVmLmhhbmRsZSgpOworLy8gIGtkRGVidWcoNjIwMCkgPDwgIjogY2Fy
ZXROb2RlPSIgPDwgY2FyZXROb2RlIDw8IGVuZGw7CisgIGxvbmcgb2Zmc2V0ID0gbV9wYXJ0LT5k
LT5jYXJldE9mZnNldCgpOworCisgIExpbmVhckRvY3VtZW50IGxkKG1fcGFydCwgY2FyZXROb2Rl
LCBvZmZzZXQpOworCisgIEVyZ29ub21pY0VkaXRhYmxlTGluZUl0ZXJhdG9yIGl0ID0gbGQuY3Vy
cmVudCgpOworCisgIGludCBvZmZzID0gKGNsaXBwZXIoKS0+aGVpZ2h0KCkgPCAzMCkgPyBjbGlw
cGVyKCktPmhlaWdodCgpIDogMzA7CisgIC8vIE1pbmltdW0gZGlzdGFuY2UgdGhlIGNhcmV0IG11
c3QgYmUgbW92ZWQKKyAgaW50IG1pbmRpc3QgPSBjbGlwcGVyKCktPmhlaWdodCgpIC0gb2ZmczsK
KworICBDYXJldFZpZXdDb250ZXh0ICpjdiA9IGQtPmNhcmV0Vmlld0NvbnRleHQoKTsKKyAgaW50
IHkgPSBjdi0+eTsJCS8vIHdlIGFsd2F5cyBtZWFzdXJlIHRoZSB0b3AgYm9yZGVyCisKKyAgbW92
ZUl0ZXJhdG9yQnlQYWdlKGxkLCBpdCwgbWluZGlzdCwgbmV4dCk7CisKKyAgaW50IHgsIGFic3gs
IGFic3k7CisgIElubGluZUJveCAqY2FyZXRCb3ggPSBuZWFyZXN0SW5saW5lQm94KGl0LCBkLT5t
X2NhcmV0Vmlld0NvbnRleHQsIHgsIGFic3gsIGFic3kpOworCisgIHBsYWNlQ2FyZXRPbkxpbmUo
Y2FyZXRCb3gsIHgsIGFic3gsIGFic3kpOworfQorCit2b2lkIEtIVE1MVmlldzo6bW92ZUNhcmV0
UHJldldvcmQoKSB7CisgIG1vdmVDYXJldEJ5KGZhbHNlLCBDYXJldEJ5V29yZCwgMSk7Cit9CisK
K3ZvaWQgS0hUTUxWaWV3Ojptb3ZlQ2FyZXROZXh0V29yZCgpIHsKKyAgbW92ZUNhcmV0QnkodHJ1
ZSwgQ2FyZXRCeVdvcmQsIDEpOworfQorCit2b2lkIEtIVE1MVmlldzo6bW92ZUNhcmV0UHJldkxp
bmUoaW50IG4pIHsKKyAgbW92ZUNhcmV0QnlMaW5lKGZhbHNlLCBuKTsKK30KKwordm9pZCBLSFRN
TFZpZXc6Om1vdmVDYXJldE5leHRMaW5lKGludCBuKSB7CisgIG1vdmVDYXJldEJ5TGluZSh0cnVl
LCBuKTsKK30KKwordm9pZCBLSFRNTFZpZXc6Om1vdmVDYXJldFByZXZQYWdlKCkgeworICBtb3Zl
Q2FyZXRCeVBhZ2UoZmFsc2UpOworfQorCit2b2lkIEtIVE1MVmlldzo6bW92ZUNhcmV0TmV4dFBh
Z2UoKSB7CisgIG1vdmVDYXJldEJ5UGFnZSh0cnVlKTsKK30KKwordm9pZCBLSFRNTFZpZXc6Om1v
dmVDYXJldFRvTGluZUJlZ2luKCkgeworICBtb3ZlQ2FyZXRUb0xpbmVCb3VuZGFyeShmYWxzZSk7
Cit9CisKK3ZvaWQgS0hUTUxWaWV3Ojptb3ZlQ2FyZXRUb0xpbmVFbmQoKSB7CisgIG1vdmVDYXJl
dFRvTGluZUJvdW5kYXJ5KHRydWUpOworfQorCisjZW5kaWYgLy8gS0hUTUxfTk9fQ0FSRVQKSW5k
ZXg6IGtodG1sdmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2to
dG1sL2todG1sdmlldy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4NApkaWZmIC11IC1wIC1y
MS4xODQga2h0bWx2aWV3LmgKLS0tIGtodG1sdmlldy5oCTE2IEF1ZyAyMDAzIDE5OjQ1OjA2IC0w
MDAwCTEuMTg0CisrKyBraHRtbHZpZXcuaAkxOCBBdWcgMjAwMyAyMTo1MjoyOCAtMDAwMApAQCAt
NjAsNiArNjAsNyBAQCBuYW1lc3BhY2Uga2h0bWwgewogICAgIGNsYXNzIFJlbmRlcldpZGdldDsK
ICAgICBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOwogICAgIGNsYXNzIExpbmVFZGl0V2lkZ2V0Owor
ICAgIGNsYXNzIElubGluZUJveDsKICAgICB2b2lkIGFwcGx5UnVsZShET006OkNTU1Byb3BlcnR5
ICpwcm9wKTsKIH0KIApAQCAtMTc0LDYgKzE3NSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgZHJhd0NvbnRlbnRzICggUVBhaW50ZXIgKiBwLCBpbnQgY2xpcHgsIGludCBjbGlweSwg
aW50IGNsaXB3LCBpbnQgY2xpcGggKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnRlbnRzKCBR
UGFpbnRlciogKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnRNb3VzZVByZXNzRXZlbnQoIFFN
b3VzZUV2ZW50ICogKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KCBRRm9jdXNFdmVu
dCAqICk7CiAgICAgdmlydHVhbCB2b2lkIGZvY3VzT3V0RXZlbnQoIFFGb2N1c0V2ZW50ICogKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnRNb3VzZURvdWJsZUNsaWNrRXZlbnQoIFFNb3VzZUV2
ZW50ICogKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnRNb3VzZU1vdmVFdmVudChRTW91c2VF
dmVudCAqKTsKQEAgLTI1Miw2ICsyNTQsMTk4IEBAIHByaXZhdGU6CiAJCQkgICAgaW50IG1vdXNl
RXZlbnRUeXBlKTsKIAogICAgIHZvaWQgY29tcGxldGUoKTsKKworICAgIC8vIC0tIGNhcmV0LXJl
bGF0ZWQgbWVtYmVyIGZ1bmN0aW9ucyAoZm9yIGNhcmV0TW9kZSBhcyB3ZWxsIGFzIGRlc2lnbk1v
ZGUpCisKKyAgICAvKiogaW5pdGlhbGl6ZXMgdGhlIGNhcmV0IGlmIGl0IGhhc24ndCBiZWVuIGlu
aXRpYWxpemVkIHlldC4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgYSBz
dWl0YWJsZSBzdGFydGluZyBwb3NpdGlvbiwgaW5pdGlhbGl6ZXMKKyAgICAgKiB0aGUgaW50ZXJu
YWwgc3RydWN0dXJlcywgYW5kIGNhbGN1bGF0ZXMgdGhlIGNhcmV0J3MgY29vcmRpbmF0ZXMgcmVh
ZHkKKyAgICAgKiBmb3IgZGlzcGxheS4KKyAgICAgKgorICAgICAqIFRvICJkZWluaXRpYWxpemUi
IHRoZSBjYXJldCwgY2FsbCBAcmVmIGNhcmV0T2ZmCisgICAgICovCisgICAgdm9pZCBpbml0Q2Fy
ZXQoKTsKKyAgICAvKiogcmV0dXJucyB3aGV0aGVyIHRoZSB0ZXh0IHVuZGVyIHRoZSBjYXJldCB3
aWxsIGJlIG92ZXJyaWRkZW4uCisgICAgICAqLworICAgIGJvb2wgY2FyZXRPdmVycmlkZXMoKTsK
KyAgICAvKiogZW5zdXJlcyB0aGF0IHRoZSBnaXZlbiBlbGVtZW50IGlzIHByb3Blcmx5IGZvY3Vz
ZWQuCisgICAgICoKKyAgICAgKiBJZiBub3QgaW4gY2FyZXQgbW9kZSBvciBkZXNpZ24gbW9kZSwg
a2V5Ym9hcmQgZXZlbnRzIGFyZSBvbmx5IHJlZ2FyZGVkIGZvcgorICAgICAqIGZvY3VzZWQgbm9k
ZXMuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIGVuc3VyZWQgdGhhdCB0aGUgZm9jdXMgd2lsbCBi
ZQorICAgICAqIHByb3Blcmx5IHNldCBvbiB1bmZvY3VzZWQgbm9kZXMgKG9yIG9uIGEgc3VpdGFi
bGUgYW5jZXN0b3IpLgorICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gZm9jdXMKKyAgICAgKi8K
KyAgICB2b2lkIGVuc3VyZU5vZGVIYXNGb2N1cyhET006Ok5vZGVJbXBsICpub2RlKTsKKyAgICAv
KiogaW5xdWlyZXMgdGhlIGN1cnJlbnQgY2FyZXQgcG9zaXRpb24gYW5kIHN0b3JlcyBpdCBpbiB0
aGUgY2FyZXQgdmlldworICAgICAqIGNvbnRleHQuIEFsc28gcmVzZXRzIHRoZSBibGluayBmcmVx
dWVuY3kgdGltZXIuIEl0IHdpbGwgbm90IGRpc3BsYXkKKyAgICAgKiB0aGUgY2FyZXQgb24gdGhl
IGNhbnZhcy4KKyAgICAgKi8KKyAgICB2b2lkIHJlY2FsY0FuZFN0b3JlQ2FyZXRQb3MoKTsKKyAg
ICAvKiogZGlzcGxheXMgdGhlIGNhcmV0IGFuZCByZWluaXRpYWxpemVzIHRoZSBibGluayBmcmVx
dWVuY3kgdGltZXIuICovCisgICAgdm9pZCBjYXJldE9uKCk7CisgICAgLyoqIGhpZGVzIHRoZSBj
YXJldCBhbmQga2lsbHMgdGhlIGJsaW5rIGZyZXF1ZW5jeSB0aW1lci4gKi8KKyAgICB2b2lkIGNh
cmV0T2ZmKCk7CisgICAgLyoqIG1ha2VzIHRoZSBjYXJldCB2aXNpYmxlLCBidXQgZG9lcyBub3Qg
aW5mbHVlbmNlIHRoZSBmcmVxdWVuY3kgdGltZXIuCisgICAgICogVGhhdCBtZWFucyBpdCBwcm9i
YWJseSB3b24ndCBnZXQgdmlzaWJsZSBpbW1lZGlhdGVseS4KKyAgICAgKi8KKyAgICB2b2lkIHNo
b3dDYXJldCgpOworICAgIC8qKiBtYWtlcyB0aGUgY2FyZXQgaW52aXNpYmxlLCBidXQgZG9lcyBu
b3QgaW5mbHVlbmNlIHRoZSBmcmVxdWVuY3kgdGltZXIuCisgICAgICogVGhlIGNhcmV0IGlzIGlt
bWVkaWF0ZWx5IGhpZGRlbi4KKyAgICAgKi8KKyAgICB2b2lkIGhpZGVDYXJldCgpOworCisgICAg
LyoqIGZvbGRzIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGN1cnJlbnQgY2FyZXQgcG9zaXRpb24uCisg
ICAgICoKKyAgICAgKiBXaGF0ZXZlciBzZWxlY3Rpb24gaGFzIGV4aXN0ZWQgYmVmb3JlIHdpbGwg
YmUgcmVtb3ZlZCBieSB0aGUgaW52b2NhdGlvbgorICAgICAqIG9mIHRoaXMgbWV0aG9kLiBVcGRh
dGVzIGFyZSBvbmx5IGRvbmUgaWYgYW4gYWN0dWFsIHNlbGVjdGlvbiBoYXMKKyAgICAgKiBiZWVu
IGZvbGRlZC4gQWZ0ZXIgdGhlIGNhbGwgb2YgdGhpcyBtZXRob2QsIG5vIHNlbGVjdGlvbiB3aWxs
IGV4aXN0CisgICAgICogYW55IG1vcmUuCisgICAgICoKKyAgICAgKiBObyB2YWxpZGl0eSBjaGVj
a2luZyBpcyBkb25lIG9uIHRoZSBwYXJhbWV0ZXJzLiBOb3RlIHRoYXQgdGhlIHBhcmFtZXRlcnMK
KyAgICAgKiByZWZlciB0byB0aGUgb2xkIHNlbGVjdGlvbiwgdGhlIGN1cnJlbnQgY2FyZXQgbWF5
IGJlIHdheSBvZmYuCisgICAgICogQHBhcmFtIHN0YXJ0Tm9kZSBzdGFydGluZyBub2RlIG9mIHNl
bGVjdGlvbgorICAgICAqIEBwYXJhbSBzdGFydE9mZnNldCBvZmZzZXQgd2l0aGluIHRoZSBzdGFy
dCBub2RlLgorICAgICAqIEBwYXJhbSBlbmROb2RlIGVuZGluZyBub2RlIG9mIHNlbGVjdGlvbgor
ICAgICAqIEBwYXJhbSBlbmRPZmZzZXQgb2Zmc2V0IHdpdGhpbiB0aGUgZW5kIG5vZGUuCisgICAg
ICogQHJldHVybiBAcCB0cnVlIGlmIHRoZXJlIGhhZCBiZWVuIGEgc2VsZWN0aW9uLCBhbmQgaXQg
d2FzIGZvbGRlZC4KKyAgICAgKi8KKyAgICBib29sIGZvbGRTZWxlY3Rpb25Ub0NhcmV0KERPTTo6
Tm9kZUltcGwgKnN0YXJ0Tm9kZSwgbG9uZyBzdGFydE9mZnNldCwKKyAgICAJCQkJRE9NOjpOb2Rl
SW1wbCAqZW5kTm9kZSwgbG9uZyBlbmRPZmZzZXQpOworCisgICAgLyoqIHBsYWNlcyB0aGUgY2Fy
ZXQgb24gdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICoKKyAgICAgKiBUaGUgY2FyZXQgaXMg
c3dpdGNoZWQgb2ZmLCB0aGUgcG9zaXRpb24gcmVjYWxjdWxhdGVkIHdpdGggcmVzcGVjdCB0bwor
ICAgICAqIHRoZSBuZXcgcG9zaXRpb24uIFRoZSBjYXJldCB3aWxsIG9ubHkgYmUgcmVkaXNwbGF5
ZWQgaWYgaXQgaXMgb24gYW4KKyAgICAgKiBlZGl0YWJsZSBub2RlLCBpbiBkZXNpZ24gbW9kZSwg
b3IgaW4gY2FyZXQgbW9kZS4KKyAgICAgKiBAcmV0dXJuIEBwIHRydWUgaWYgdGhlIGNhcmV0IGhh
cyBiZWVuIGRpc3BsYXllZC4KKyAgICAgKi8KKyAgICBib29sIHBsYWNlQ2FyZXQoKTsKKworICAg
IC8vIC0tIGNhcmV0IGV2ZW50IGhhbmRsZXIKKworICAgIC8qKgorICAgICAqIEV2YWx1YXRlcyBr
ZXkgcHJlc3NlcyBvbiBlZGl0YWJsZSBub2Rlcy4KKyAgICAgKi8KKyAgICB2b2lkIGNhcmV0S2V5
UHJlc3NFdmVudChRS2V5RXZlbnQgKik7CisKKyAgICAvLyAtLSBjYXJldCBuYXZpZ2F0aW9uIG1l
bWJlciBmdW5jdGlvbnMKKworICAgIC8qKiBtb3ZlcyB0aGUgY2FyZXQgdG8gdGhlIGdpdmVuIHBv
c2l0aW9uIGFuZCBkaXNwbGF5cyBpdC4KKyAgICAgKgorICAgICAqIElmIHRoZSBub2RlIGlzIGFu
IGludmFsaWQgcGxhY2UsIHRoZSBmdW5jdGlvbiBzZXRzIHRoZSBjYXJldCB0byBhbgorICAgICAq
IG5lYXJieSBub2RlIHRoYXQgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbm9kZSBu
b2RlIHRvIGJlIHNldCB0bworICAgICAqIEBwYXJhbSBvZmZzZXQgemVyby1iYXNlZCBvZmZzZXQg
d2l0aGluIHRoaXMgbm9kZQorICAgICAqIEBwYXJhbSBjbGVhclNlbGVjdGlvbiBAcCB0cnVlIGlm
IGFueSB0aGUgc2VsZWN0aW9uIHNob3VsZCBiZSBjbGVhcmVkCisgICAgICoJYXMgd2VsbC4gSXQg
aXMgaWdub3JlZCBpZiBAcCB0aG9yb3VnaGx5IGlzIGZhbHNlLgorICAgICAqIEByZXR1cm4gQHAg
dHJ1ZSBpZiBhIHByZXZpb3VzbHkgZXhpc3Rpbmcgc2VsZWN0aW9uIGhhcyBiZWVuIGNsZWFyZWQu
CisgICAgICovCisgICAgYm9vbCBtb3ZlQ2FyZXRUbyhET006Ok5vZGVJbXBsICpub2RlLCBsb25n
IG9mZnNldCwgYm9vbCBjbGVhclNlbGVjdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBNb3ZlbWVu
dCBlbnVtZXJhdGlvbgorICAgICAqIEBsaSBDYXJldEJ5Q2hhcmFjdGVyIG1vdmUgY2FyZXQgY2hh
cmFjdGVyLXdpc2UKKyAgICAgKiBAbGkgQ2FyZXRCeVdvcmQgbW92ZSBjYXJldCB3b3JkLXdpc2UK
KyAgICAgKi8KKyAgICBlbnVtIENhcmV0TW92ZW1lbnQgeyBDYXJldEJ5Q2hhcmFjdGVyLCBDYXJl
dEJ5V29yZCB9OworCisgICAgLyoqIG1vdmVzIHRoZSBjYXJldC4KKyAgICAgKgorICAgICAqIEBw
YXJhbSBuZXh0IEBwIHRydWUsIG1vdmUgdG93YXJkcyB0aGUgZm9sbG93aW5nIGNvbnRlbnQsIEBw
IGZhbHNlLAorICAgICAqCQltb3ZlIHRvd2FyZHMgdGhlIHByZXZpb3VzCisgICAgICogQHBhcmFt
IGNtdiBDYXJldE1vdmVtZW50IG9wZXJhdGlvbgorICAgICAqIEBwYXJhbSBuIGNvdW50IHRoZSBD
YXJldE1vdmVtZW50IGhhcyB0byBiZSBjYXJyaWVkIG91dC4KKyAgICAgKiBGb3IgbGF0aW4gZG9j
dW1lbnRzLCBhIHBvc2l0aXZlIG51bWJlciBtZWFucyBtb3ZpbmcgdGhlIGNhcmV0CisgICAgICog
dGhlc2UgbWFueSBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodC9kb3dud2FyZHMsIGEgbmVnYXRpdmUg
bnVtYmVyCisgICAgICogdG8gdGhlIGxlZnQvdXB3YXJkcy4gRm9yIFJUTCBkb2N1bWVudHMsIHRo
ZSBvcHBvc2l0ZSBhcHBsaWVzLgorICAgICAqLworICAgIHZvaWQgbW92ZUNhcmV0QnkoYm9vbCBu
ZXh0LCBDYXJldE1vdmVtZW50IGNtdiwgaW50IG4pOworCisgICAgLyoqIG1vdmVzIHRoZSBjYXJl
dCBieSBsaW5lLgorICAgICAqIEBpbnRlcm5hbCBvbmx5IG1lYW50IHRvIGJlIGNhbGxlZCBmcm9t
IHdpdGhpbiBtb3ZlQ2FyZXRCeQorICAgICAqLworICAgIHZvaWQgbW92ZUNhcmV0QnlMaW5lKGJv
b2wgbmV4dCwgaW50IG4pOworCisgICAgLyoqIG1vdmVzIHRoZSBjYXJldCB0byB0aGUgZ2l2ZW4g
bGluZSBib3VuZGFyeS4KKyAgICAgKiBAcGFyYW0gZW5kIEBwIHRydWUgaWYgdGhlIGNhcmV0IGlz
IHRvIGJlIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUsCisgICAgICoJCW90aGVyd2lzZSB0
byB0aGUgYmVnaW5uaW5nLgorICAgICAqLworICAgIHZvaWQgbW92ZUNhcmV0VG9MaW5lQm91bmRh
cnkoYm9vbCBlbmQpOworCisgICAgLyoqIG1vdmVzIHRoZSBjYXJldCB0byB0aGUgZ2l2ZW4gZG9j
dW1lbnQgYm91bmRhcnkuCisgICAgICogQHBhcmFtIGVuZCBAcCB0cnVlIGlmIHRoZSBjYXJldCBp
cyB0byBiZSBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZQorICAgICAqCQlkb2N1bWVudCwgb3RoZXJ3
aXNlIHRvIHRoZSBiZWdpbm5pbmcuCisgICAgICovCisgICAgdm9pZCBtb3ZlQ2FyZXRUb0RvY3Vt
ZW50Qm91bmRhcnkoYm9vbCBlbmQpOworCisgICAgLyoqIGRvZXMgdGhlIGFjdHVhbCBjYXJldCBw
bGFjZW1lbnQgc28gdGhhdCBpdCBiZWNvbWVzIHZpc2libGUgYXQKKyAgICAgKiB0aGUgbmV3IHBv
c2l0aW9uLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgaXMgb25seSBzdWl0YWJsZSBpZiB0
aGUgbmV3IGNhcmV0IHBvc2l0aW9uIGhhcyBhbHJlYWR5IGJlZW4KKyAgICAgKiBkZXRlcm1pbmVk
LgorICAgICAqLworICAgIHZvaWQgcGxhY2VDYXJldE9uQ2hhcigpOworCisgICAgLyoqIGRvZXMg
dGhlIGFjdHVhbCBjYXJldCBwbGFjZW1lbnQgc28gdGhhdCBpdCBiZWNvbWVzIHZpc2libGUgYXQK
KyAgICAgKiB0aGUgbmV3IHBvc2l0aW9uLgorICAgICAqCisgICAgICogQWRkaXRpb25hbGx5LCBp
dCBjYWxjdWxhdGVzIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gZnJvbSB0aGUgZ2l2ZW4KKyAgICAg
KiBib3ggYW5kIGNvb3JkaW5hdGVzLgorICAgICAqCisgICAgICogQHBhcmFtIGNhcmV0Qm94IGlu
bGluZSBib3ggc2VydmluZyBhcyBhIG1lYXN1cmVtZW50IHBvaW50IGZvciBvZmZzZXQuCisgICAg
ICogQHBhcmFtIHggeC1jb29yZGluYXRlIHJlbGF0aXZlIHRvIGNvbnRhaW5pbmcgYmxvY2suIFRo
ZSBvZmZzZXQgd2lsbAorICAgICAqCQliZSBhcHByb3hpbWF0ZWQgYXMgY2xvc2VseSBhcyBwb3Nz
aWJsZSB0byB0aGlzIGNvb3JkaW5hdGUsCisgICAgICoJCWJ1dCBuZXZlciBsZXNzIHRoYW4gY2Fy
ZXRCb3gtPnhQb3MoKSBhbmQgZ3JlYXRlciB0aGFuCisgICAgICoJCWNhcmV0Qm94LT54UG9zKCkg
KyBjYXJldEJveC0+d2lkdGgoKQorICAgICAqIEBwYXJhbSBhYnN4IGFic29sdXRlIHgtY29vcmRp
bmF0ZSBvZiBjb250YWluaW5nIGJsb2NrLCBuZWVkZWQgZm9yCisgICAgICoJCWNhbGN1bGF0aW9u
IG9mIGZpbmFsIGNhcmV0IHBvc2l0aW9uCisgICAgICogQHBhcmFtIGFic3kgYWJzb2x1dGUgeS1j
b29yZGluYXRlIG9mIGNvbnRhaW5pbmcgYmxvY2ssIG5lZWRlZCBmb3IKKyAgICAgKgkJY2FsY3Vs
YXRpb24gb2YgZmluYWwgY2FyZXQgcG9zaXRpb24KKyAgICAgKi8KKyAgICB2b2lkIHBsYWNlQ2Fy
ZXRPbkxpbmUoa2h0bWw6OklubGluZUJveCAqY2FyZXRCb3gsIGludCB4LCBpbnQgYWJzeCwgaW50
IGFic3kpOworCisgICAgLyoqIG1vdmVzIHRoZSBjYXJldCBieSBhIHBhZ2UgbGVuZ3RoLgorICAg
ICAqIEBwYXJhbSBuZXh0IEBwIHRydWUsIG1vdmUgZG93biwgQHAgZmFsc2UsIG1vdmUgdXAuCisg
ICAgICovCisgICAgdm9pZCBtb3ZlQ2FyZXRCeVBhZ2UoYm9vbCBuZXh0KTsKKworICAgIC8qKiBt
b3ZlcyB0aGUgY2FyZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJldmlvdXMgd29yZC4KKyAg
ICAgKi8KKyAgICB2b2lkIG1vdmVDYXJldFByZXZXb3JkKCk7CisKKyAgICAvKiogbW92ZXMgdGhl
IGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgd29yZC4KKyAgICAgKi8KKyAgICB2
b2lkIG1vdmVDYXJldE5leHRXb3JkKCk7CisKKyAgICAvKiogbW92ZXMgdGhlIGNhcmV0IHRvIHRo
ZSBwcmV2aW91cyBsaW5lLgorICAgICAqCisgICAgICogQHBhcmFtIG4gbnVtYmVyIG9mIGxpbmVz
IHRvIG1vdmUgY2FyZXQKKyAgICAgKi8KKyAgICB2b2lkIG1vdmVDYXJldFByZXZMaW5lKGludCBu
ID0gMSk7CisKKyAgICAvKiogbW92ZXMgdGhlIGNhcmV0IHRvIHRoZSBmb2xsb3dpbmcgbGluZS4K
KyAgICAgKgorICAgICAqIEBwYXJhbSBuIG51bWJlciBvZiBsaW5lcyB0byBtb3ZlIGNhcmV0Cisg
ICAgICovCisgICAgdm9pZCBtb3ZlQ2FyZXROZXh0TGluZShpbnQgbiA9IDEpOworICAgIAorICAg
IC8qKiBtb3ZlcyB0aGUgY2FyZXQgdG8gdGhlIHByZXZpb3VzIHBhZ2UKKyAgICAgKi8KKyAgICB2
b2lkIG1vdmVDYXJldFByZXZQYWdlKCk7CisgICAgCisgICAgLyoqIG1vdmVzIHRoZSBjYXJldCB0
byB0aGUgbmV4dCBwYWdlCisgICAgICovCisgICAgdm9pZCBtb3ZlQ2FyZXROZXh0UGFnZSgpOwor
CisgICAgLyoqIG1vdmVzIHRoZSBjYXJldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50
IGxpbmUuCisgICAgICovCisgICAgdm9pZCBtb3ZlQ2FyZXRUb0xpbmVCZWdpbigpOworCisgICAg
LyoqIG1vdmVzIHRoZSBjYXJldCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUuCisgICAg
ICovCisgICAgdm9pZCBtb3ZlQ2FyZXRUb0xpbmVFbmQoKTsKIAogICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYmVyIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBwcml2YXRlOgpJbmRleDogdGVzdGtodG1sLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC90ZXN0a2h0bWwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgxCmRpZmYgLXUgLXAgLXIxLjgxIHRlc3RraHRtbC5j
cHAKLS0tIHRlc3RraHRtbC5jcHAJMTAgSmFuIDIwMDMgMTU6MzM6MTQgLTAwMDAJMS44MQorKysg
dGVzdGtodG1sLmNwcAkxOCBBdWcgMjAwMyAyMTo1MjoyOCAtMDAwMApAQCAtODAsNiArODAsMTIg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAgICB2aWV3TWVudS5hcHBlbmRD
aGlsZCggZSApOwogICAgIFFEb21FbGVtZW50IHRvb2xCYXIgPSBkLmRvY3VtZW50RWxlbWVudCgp
LmZpcnN0Q2hpbGQoKS5uZXh0U2libGluZygpLnRvRWxlbWVudCgpOwogICAgIGUgPSBkLmNyZWF0
ZUVsZW1lbnQoICJhY3Rpb24iICk7CisgICAgZS5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgImVkaXRh
YmxlIiApOworICAgIHRvb2xCYXIuaW5zZXJ0QmVmb3JlKCBlLCB0b29sQmFyLmZpcnN0Q2hpbGQo
KSApOworICAgIGUgPSBkLmNyZWF0ZUVsZW1lbnQoICJhY3Rpb24iICk7CisgICAgZS5zZXRBdHRy
aWJ1dGUoICJuYW1lIiwgIm5hdmlnYWJsZSIgKTsKKyAgICB0b29sQmFyLmluc2VydEJlZm9yZSgg
ZSwgdG9vbEJhci5maXJzdENoaWxkKCkgKTsKKyAgICBlID0gZC5jcmVhdGVFbGVtZW50KCAiYWN0
aW9uIiApOwogICAgIGUuc2V0QXR0cmlidXRlKCAibmFtZSIsICJyZWxvYWQiICk7CiAgICAgdG9v
bEJhci5pbnNlcnRCZWZvcmUoIGUsIHRvb2xCYXIuZmlyc3RDaGlsZCgpICk7CiAgICAgZSA9IGQu
Y3JlYXRlRWxlbWVudCggImFjdGlvbiIgKTsKQEAgLTg5LDcgKzk1LDEyIEBAIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyICphcmd2W10pCiAgICAgKHZvaWQpbmV3IEtBY3Rpb24oICJSZWxvYWQiLCAi
cmVsb2FkIiwgUXQ6OktleV9GNSwgZHVtbXksIFNMT1QoIHJlbG9hZCgpICksIGRvYy0+YWN0aW9u
Q29sbGVjdGlvbigpLCAicmVsb2FkIiApOwogICAgIEtBY3Rpb24qIGtwcmludCA9IG5ldyBLQWN0
aW9uKCAiUHJpbnQiLCAicHJpbnQiLCAwLCBkb2MtPmJyb3dzZXJFeHRlbnNpb24oKSwgU0xPVCgg
cHJpbnQoKSApLCBkb2MtPmFjdGlvbkNvbGxlY3Rpb24oKSwgInByaW50IiApOwogICAgIGtwcmlu
dC0+c2V0RW5hYmxlZCh0cnVlKTsKLQorICAgIEtUb2dnbGVBY3Rpb24gKnRhID0gbmV3IEtUb2dn
bGVBY3Rpb24oICJOYXZpZ2FibGUiLCAiZWRpdGNsZWFyIiwgMCwgZG9jLT5hY3Rpb25Db2xsZWN0
aW9uKCksICJuYXZpZ2FibGUiICk7CisgICAgdGEtPnNldENoZWNrZWQoZG9jLT5pc0NhcmV0TW9k
ZSgpKTsKKyAgICBRV2lkZ2V0Ojpjb25uZWN0KHRhLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGR1
bW15LCBTTE9UKCB0b2dnbGVOYXZpZ2FibGUoYm9vbCkgKSk7CisgICAgdGEgPSBuZXcgS1RvZ2ds
ZUFjdGlvbiggIkVkaXRhYmxlIiwgImVkaXQiLCAwLCBkb2MtPmFjdGlvbkNvbGxlY3Rpb24oKSwg
ImVkaXRhYmxlIiApOworICAgIHRhLT5zZXRDaGVja2VkKGRvYy0+aXNFZGl0YWJsZSgpKTsKKyAg
ICBRV2lkZ2V0Ojpjb25uZWN0KHRhLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGR1bW15LCBTTE9U
KCB0b2dnbGVFZGl0YWJsZShib29sKSApKTsKICAgICB0b3BsZXZlbC0+Z3VpRmFjdG9yeSgpLT5h
ZGRDbGllbnQoIGRvYyApOwogCiAgICAgZG9jLT5zZXRKU2NyaXB0RW5hYmxlZCh0cnVlKTsKSW5k
ZXg6IHRlc3RraHRtbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2to
dG1sL3Rlc3RraHRtbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEu
NCB0ZXN0a2h0bWwuaAotLS0gdGVzdGtodG1sLmgJMiBBcHIgMjAwMSAyMDoyODo1NiAtMDAwMAkx
LjQKKysrIHRlc3RraHRtbC5oCTE4IEF1ZyAyMDAzIDIxOjUyOjI4IC0wMDAwCkBAIC0xLDYgKzEs
OCBAQAogI2lmbmRlZiBURVNUS0hUTUxfSAogI2RlZmluZSBURVNUS0hUTUxfSAogCisjaW5jbHVk
ZSA8a2RlYnVnLmg+CisKIC8qKgogICogQGludGVybmFsCiAgKi8KQEAgLTIxLDYgKzIzLDE3IEBA
IHByaXZhdGUgc2xvdHM6CiAgICAgICBLUGFydHM6OlVSTEFyZ3MgYXJnczsgYXJncy5yZWxvYWQg
PSB0cnVlOwogICAgICAgbV9wYXJ0LT5icm93c2VyRXh0ZW5zaW9uKCktPnNldFVSTEFyZ3MoIGFy
Z3MgKTsKICAgICAgIG1fcGFydC0+b3BlblVSTCggbV9wYXJ0LT51cmwoKSApOworICB9CisgIAor
ICB2b2lkIHRvZ2dsZU5hdmlnYWJsZShib29sIHMpCisgIHsKKyAgICAgIG1fcGFydC0+c2V0Q2Fy
ZXRNb2RlKHMpOworICB9CisKKyAgdm9pZCB0b2dnbGVFZGl0YWJsZShib29sIHMpCisgIHsKKyAg
a2REZWJ1ZygpIDw8ICJlZGl0YWJsZTogIiA8PCBzIDw8IGVuZGw7CisgICAgICBtX3BhcnQtPnNl
dEVkaXRhYmxlKHMpOwogICB9CiAKIHByaXZhdGU6CkluZGV4OiBjc3MvY3NzcGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9jc3MvY3NzcGFyc2Vy
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNjcKZGlmZiAtdSAtcCAtcjEuMjY3IGNzc3Bh
cnNlci5jcHAKLS0tIGNzcy9jc3NwYXJzZXIuY3BwCTI1IEp1biAyMDAzIDIyOjMyOjE0IC0wMDAw
CTEuMjY3CisrKyBjc3MvY3NzcGFyc2VyLmNwcAkxOCBBdWcgMjAwMyAyMTo1MjozMCAtMDAwMApA
QCAtOTYzLDYgKzk2MywxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZSggaW50IHByb3BJ
ZCwgCiAJICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CiAJYnJlYWs7CiAKKyAgICBjYXNlIENT
U19QUk9QX19LT05RX1VTRVJfSU5QVVQ6CS8vIG5vbmUgfCBlbmFibGVkIHwgZGlzYWJsZWQgfCBp
bmhlcml0CisJaWYgKCBpZCA9PSBDU1NfVkFMX05PTkUgfHwgaWQgPT0gQ1NTX1ZBTF9FTkFCTEVE
IHx8IGlkID09IENTU19WQUxfRElTQUJMRUQgKQorCSAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVl
OworLy8Ja2REZWJ1Zyg2MDgwKSA8PCAiQ1NTX1BST1BfX0tPTlFfVVNFUl9JTlBVVDogIiA8PCB2
YWxpZF9wcmltaXRpdmUgPDwgZW5kbDsKKwlicmVhazsKKwogCS8qIHNob3J0aGFuZCBwcm9wZXJ0
aWVzICovCiAgICAgY2FzZSBDU1NfUFJPUF9CQUNLR1JPVU5EOgogICAgIAkvLyBbJ2JhY2tncm91
bmQtY29sb3InIHx8ICdiYWNrZ3JvdW5kLWltYWdlJyB8fCdiYWNrZ3JvdW5kLXJlcGVhdCcgfHwK
SW5kZXg6IGNzcy9jc3Nwcm9wZXJ0aWVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2Rl
L2tkZWxpYnMva2h0bWwvY3NzL2Nzc3Byb3BlcnRpZXMuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xOQpkaWZmIC11IC1wIC1yMS4xOSBjc3Nwcm9wZXJ0aWVzLmMKLS0tIGNzcy9jc3Nwcm9wZXJ0
aWVzLmMJMTcgTWF5IDIwMDMgMjI6MTI6NTcgLTAwMDAJMS4xOQorKysgY3NzL2Nzc3Byb3BlcnRp
ZXMuYwkxOCBBdWcgMjAwMyAyMTo1MjozMCAtMDAwMApAQCAtMTE4LDcgKzExOCw3IEBAIGZpbmRQ
cm9wIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2kKIHsKICAgZW51bQogICAgIHsKLSAg
ICAgIFRPVEFMX0tFWVdPUkRTID0gMTA5LAorICAgICAgVE9UQUxfS0VZV09SRFMgPSAxMTAsCiAg
ICAgICBNSU5fV09SRF9MRU5HVEggPSAzLAogICAgICAgTUFYX1dPUkRfTEVOR1RIID0gMjYsCiAg
ICAgICBNSU5fSEFTSF9WQUxVRSA9IDUsCkBAIC0yMTIsNiArMjEyLDcgQEAgZmluZFByb3AgKHJl
Z2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaQogICAgICAgeyJ3aWRvd3MiLCBDU1NfUFJPUF9X
SURPV1N9LAogICAgICAgeyJ3b3JkLXNwYWNpbmciLCBDU1NfUFJPUF9XT1JEX1NQQUNJTkd9LAog
ICAgICAgeyJzY3JvbGxiYXItdHJhY2stY29sb3IiLCBDU1NfUFJPUF9TQ1JPTExCQVJfVFJBQ0tf
Q09MT1J9LAorICAgICAgeyIta29ucS11c2VyLWlucHV0IiwgQ1NTX1BST1BfX0tPTlFfVVNFUl9J
TlBVVH0sCiAgICAgICB7Im1hcmtlci1vZmZzZXQiLCBDU1NfUFJPUF9NQVJLRVJfT0ZGU0VUfSwK
ICAgICAgIHsibGlzdC1zdHlsZSIsIENTU19QUk9QX0xJU1RfU1RZTEV9LAogICAgICAgeyJwYWdl
LWJyZWFrLWJlZm9yZSIsIENTU19QUk9QX1BBR0VfQlJFQUtfQkVGT1JFfSwKQEAgLTI4NSwyOCAr
Mjg2LDI4IEBAIGZpbmRQcm9wIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2kKICAgICAg
ICAtMSwgIDc5LCAgLTEsICA4MCwgIC0xLCAgLTEsICAtMSwgIDgxLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIDgyLCAgODMsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIDg0LCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgIC0xLCAgLTEsICA4NSwgIC0xLCAgODYsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgIC0xLCAgODcsICA4OCwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICA4OSwKLSAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgOTAsICA5MSwKLSAgICAg
ICA5MiwgIC0xLCAgOTMsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICA5NCwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICA5NSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgIDk2LCAgLTEsICAtMSwgIDk3LCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgIDk4LCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIDk5LCAgLTEsICAtMSwKKyAgICAg
ICAtMSwgIDg1LCAgLTEsICA4NiwgIC0xLCAgODcsICAtMSwgIC0xLCAgLTEsICAtMSwKKyAgICAg
ICAtMSwgIC0xLCAgODgsICA4OSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICA5MCwKKyAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgOTEsICA5MiwKKyAgICAg
ICA5MywgIC0xLCAgOTQsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKKyAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICA5NSwgIC0xLCAgLTEsICAtMSwKKyAgICAg
ICA5NiwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKKyAgICAg
ICAtMSwgIDk3LCAgLTEsICAtMSwgIDk4LCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKKyAgICAg
ICAtMSwgIDk5LCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgMTAwLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsIDEwMCwKKyAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsIDEwMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgMTAxLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAxMDIsICAtMSwgIC0xLCAgLTEsICAtMSwKKyAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgMTAyLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKKyAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAxMDMsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgMTAzLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKKyAgICAg
ICAtMSwgMTA0LCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKLSAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsIDEwNCwgIC0xLCAgLTEsICAtMSwKKyAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsIDEwNSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKICAgICAg
ICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwKQEAgLTMx
NSwxNyArMzE2LDE3IEBAIGZpbmRQcm9wIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2kK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
LSAgICAgIDEwNSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsIDEwNiwK
KyAgICAgIDEwNiwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsIDEwNywK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
LSAgICAgICAtMSwgIC0xLCAxMDcsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
KyAgICAgICAtMSwgIC0xLCAxMDgsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
ICAgICAgICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwK
LSAgICAgICAtMSwgMTA4CisgICAgICAgLTEsIDEwOQogICAgIH07CiAKICAgaWYgKGxlbiA8PSBN
QVhfV09SRF9MRU5HVEggJiYgbGVuID49IE1JTl9XT1JEX0xFTkdUSCkKQEAgLTQ1OCw2ICs0NTks
NyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByb3BlcnR5TGlzdFtdCiAic2Nyb2xsYmFy
LXRyYWNrLWNvbG9yIiwgCiAic2Nyb2xsYmFyLWFycm93LWNvbG9yIiwgCiAiLWtvbnEtZmxvdy1t
b2RlIiwgCisiLWtvbnEtdXNlci1pbnB1dCIsIAogICAgIDAKIH07CiBET01TdHJpbmcgZ2V0UHJv
cGVydHlOYW1lKHVuc2lnbmVkIHNob3J0IGlkKQpAQCAtNDY2LDUgKzQ2OCw1IEBAIERPTVN0cmlu
ZyBnZXRQcm9wZXJ0eU5hbWUodW5zaWduZWQgc2hvcnQKICAgICAgIHJldHVybiBET01TdHJpbmco
KTsKICAgICBlbHNlCiAgICAgICByZXR1cm4gRE9NU3RyaW5nKHByb3BlcnR5TGlzdFtpZF0pOwot
fQorfTsKIApJbmRleDogY3NzL2Nzc3Byb3BlcnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
aG9tZS9rZGUva2RlbGlicy9raHRtbC9jc3MvY3NzcHJvcGVydGllcy5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjE1CmRpZmYgLXUgLXAgLXIxLjE1IGNzc3Byb3BlcnRpZXMuaAotLS0gY3NzL2Nz
c3Byb3BlcnRpZXMuaAkxMyBKYW4gMjAwMyAxODo0NjoyMSAtMDAwMAkxLjE1CisrKyBjc3MvY3Nz
cHJvcGVydGllcy5oCTE4IEF1ZyAyMDAzIDIxOjUyOjMwIC0wMDAwCkBAIC00LDcgKzQsNiBAQAog
I2lmbmRlZiBDU1NQUk9QRVJUSUVTX0gKICNkZWZpbmUgQ1NTUFJPUEVSVElFU19ICiAKLURPTTo6
RE9NU3RyaW5nIGdldFByb3BlcnR5TmFtZSh1bnNpZ25lZCBzaG9ydCBpZCk7CiAKICNkZWZpbmUg
Q1NTX1BST1BfSU5WQUxJRCAwCiAjZGVmaW5lIENTU19QUk9QX01JTiAxCkBAIC0xMTcsOCArMTE2
LDkgQEAgRE9NOjpET01TdHJpbmcgZ2V0UHJvcGVydHlOYW1lKHVuc2lnbmVkIAogI2RlZmluZSBD
U1NfUFJPUF9TQ1JPTExCQVJfVFJBQ0tfQ09MT1IgMTA3CiAjZGVmaW5lIENTU19QUk9QX1NDUk9M
TEJBUl9BUlJPV19DT0xPUiAxMDgKICNkZWZpbmUgQ1NTX1BST1BfX0tPTlFfRkxPV19NT0RFIDEw
OQorI2RlZmluZSBDU1NfUFJPUF9fS09OUV9VU0VSX0lOUFVUIDExMAogCiAjZGVmaW5lIENTU19Q
Uk9QX01BWCBDU1NfUFJPUF9aX0lOREVYCi0jZGVmaW5lIENTU19QUk9QX1RPVEFMIDExMAorI2Rl
ZmluZSBDU1NfUFJPUF9UT1RBTCAxMTEKICNlbmRpZgogCkluZGV4OiBjc3MvY3NzcHJvcGVydGll
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9jc3MvY3Nz
cHJvcGVydGllcy5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC11IC1wIC1yMS4x
NyBjc3Nwcm9wZXJ0aWVzLmluCi0tLSBjc3MvY3NzcHJvcGVydGllcy5pbgkyMyBKdW4gMjAwMyAy
MDowNDo0MSAtMDAwMAkxLjE3CisrKyBjc3MvY3NzcHJvcGVydGllcy5pbgkxOCBBdWcgMjAwMyAy
MTo1MjozMSAtMDAwMApAQCAtMTQ0LDQgKzE0NCw2IEBAIHNjcm9sbGJhci0zZGxpZ2h0LWNvbG9y
CiBzY3JvbGxiYXItZGFya3NoYWRvdy1jb2xvcgogc2Nyb2xsYmFyLXRyYWNrLWNvbG9yCiBzY3Jv
bGxiYXItYXJyb3ctY29sb3IKKyMga29ucXVlcm9yIGludGVybmFscwogLWtvbnEtZmxvdy1tb2Rl
Cista29ucS11c2VyLWlucHV0CkluZGV4OiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3OQpkaWZmIC11IC1wIC1yMS4yNzkgY3Nz
c3R5bGVzZWxlY3Rvci5jcHAKLS0tIGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkyMSBKdW4gMjAw
MyAwOToxNDo0OSAtMDAwMAkxLjI3OQorKysgY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTE4IEF1
ZyAyMDAzIDIxOjUyOjM0IC0wMDAwCkBAIC00MjMsNiArNDIzLDggQEAgUmVuZGVyU3R5bGUgKkNT
U1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRQogCQkgICAgZm9udERpcnR5ID0gZmFsc2U7CiAJCX0K
IAkJRE9NOjpDU1NQcm9wZXJ0eSAqcHJvcCA9IHByb3BzVG9BcHBseVtpXS0+cHJvcDsKKy8vCQlp
ZiAocHJvcC0+bV9pZCA9PSBDU1NfUFJPUF9fS09OUV9VU0VSX0lOUFVUKSBrZERlYnVnKDYwODAp
IDw8ICJFbDogIjw8ZS0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiIHVzZXItaW5wdXQ6ICI8PCgo
Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICopcHJvcC0+dmFsdWUoKSktPmdldElkZW50KCkgPDwgZW5k
bDsKKy8vCQlpZiAocHJvcC0+bV9pZCA9PSBDU1NfUFJPUF9URVhUX1RSQU5TRk9STSkga2REZWJ1
Zyg2MDgwKSA8PCAiRWw6ICI8PGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKICAgICAg
ICAgICAgICAgICBhcHBseVJ1bGUoIHByb3AtPm1faWQsIHByb3AtPnZhbHVlKCkgKTsKIAkgICAg
fQogCSAgICBpZiAoIGZvbnREaXJ0eSApIHsKQEAgLTMwMDYsNiArMzAwOCwyMyBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFwcGx5UnVsZSggaW50IGlkCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NfUFJPUF9fS09OUV9VU0VSX0lO
UFVUOiB7CisgICAgICAgIGlmKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NT
X0lOSEVSSVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCFwYXJlbnROb2RlKSByZXR1cm47
CisgICAgICAgICAgICBzdHlsZS0+c2V0VXNlcklucHV0KHBhcmVudFN0eWxlLT51c2VySW5wdXQo
KSk7CisvLwkgICAga2REZWJ1ZygpIDw8ICJVSSBlcm0iIDw8IGVuZGw7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYoIXByaW1pdGl2ZVZhbHVlKSByZXR1cm47Cisg
ICAgICAgIGludCBpZCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpOworCWlmIChpZCA9PSBD
U1NfVkFMX05PTkUpCisJICAgIHN0eWxlLT5zZXRVc2VySW5wdXQoVUlfTk9ORSk7CisJZWxzZQor
CSAgICBzdHlsZS0+c2V0VXNlcklucHV0KEVVc2VySW5wdXQoaWQgLSBDU1NfVkFMX0VOQUJMRUQp
KTsKKy8vCWtkRGVidWcoNjA4MCkgPDwgInVzZXJJbnB1dDogIiA8PCBzdHlsZS0+dXNlckVkaXQo
KSA8PCBlbmRsOworCXJldHVybjsKKyAgICB9CiAvLyAgICAgY2FzZSBDU1NfUFJPUF9WT0lDRV9G
QU1JTFk6CiAvLyAgICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgaQogLy8gICAgICAgICBi
cmVhazsKSW5kZXg6IGNzcy9jc3N2YWx1ZXMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9r
ZGUva2RlbGlicy9raHRtbC9jc3MvY3NzdmFsdWVzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzcKZGlmZiAtdSAtcCAtcjEuMzcgY3NzdmFsdWVzLmMKLS0tIGNzcy9jc3N2YWx1ZXMuYwkxNyBN
YXkgMjAwMyAyMjoxMjo1NyAtMDAwMAkxLjM3CisrKyBjc3MvY3NzdmFsdWVzLmMJMTggQXVnIDIw
MDMgMjE6NTI6MzUgLTAwMDAKQEAgLTcsNyArNyw3IEBAIHN0cnVjdCBjc3NfdmFsdWUgewogICAg
IGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgaW50IGlkOwogfTsKLS8qIG1heGltdW0ga2V5IHJhbmdl
ID0gMTQzMCwgZHVwbGljYXRlcyA9IDEgKi8KKy8qIG1heGltdW0ga2V5IHJhbmdlID0gMTU3MSwg
ZHVwbGljYXRlcyA9IDEgKi8KIAogI2lmZGVmIF9fR05VQ19fCiBfX2lubGluZQpAQCAtMjEsMzIg
KzIxLDMyIEBAIGhhc2hfdmFsIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2kKIHsKICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFzc29fdmFsdWVzW10gPQogICAgIHsKLSAgICAg
IDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0
MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMw
LCAxNDMwLCAxNDMwLAotICAgICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwg
MTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0
MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMw
LCAxNDMwLCAxNDMwLCAgICAwLCAxNDMwLCAxNDMwLCAgICAwLCAgICA1LAotICAgICAgICAxMCwg
ICAxNSwgICAyMCwgICAyNSwgICAzMCwgICAzNSwgICA0MCwgICAgMCwgMTQzMCwgMTQzMCwKLSAg
ICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAs
IDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAx
NDMwLCAxNDMwLCAxNDMwLAotICAgICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQz
MCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAs
IDE0MzAsIDE0MzAsIDE0MzAsICAgIDAsICAxODgsICAgMzQsCi0gICAgICAgIDc4LCAgMTcwLCAg
MTg1LCAgMjMwLCAgIDU1LCAgICAwLCAgICA1LCAgIDM0LCAgIDIwLCAgIDc5LAotICAgICAgICA4
MCwgICAzNSwgICAxNCwgIDE5NSwgICAyNSwgICAgNSwgICAgMCwgIDE2MCwgIDIxMywgIDI0MCwK
LSAgICAgICAyMTAsICAxNDksICAyNDAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0
MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMw
LCAxNDMwLCAxNDMwLCAxNDMwLAotICAgICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwg
MTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0
MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMw
LCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLAotICAgICAg
MTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQz
MCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAs
IDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAx
NDMwLCAxNDMwLCAxNDMwLCAxNDMwLAotICAgICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQz
MCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAs
IDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAx
NDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLAotICAg
ICAgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwgMTQzMCwg
MTQzMCwKLSAgICAgIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0MzAsIDE0
MzAsIDE0MzAsIDE0MzAsCi0gICAgICAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMw
CisgICAgICAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAx
NTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3
MSwgMTU3MSwgMTU3MSwgMTU3MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEs
IDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAxNTcxLCAx
NTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3
MSwgMTU3MSwgMTU3MSwgMTU3MSwgICAgMCwgMTU3MSwgMTU3MSwgICAgMCwgICAgNSwKKyAgICAg
ICAgMTAsICAgMTUsICAgMjAsICAgMjUsICAgMzAsICAgMzUsICAgNDAsICAgIDAsIDE1NzEsIDE1
NzEsCisgICAgICAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcx
LCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwg
MTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1
NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAxNTcx
LCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAgICAwLCAgIDQ0LCAgIDM0LAorICAgICAgICAzNSwg
IDE3MCwgIDIwMCwgICA5NSwgIDI0MCwgICAgMCwgICAgMCwgIDIzNCwgICAyMCwgIDE3OCwKKyAg
ICAgICAgODAsICAgMzUsICAgMTQsICAyMDUsICAgMjUsICAgIDUsICAgIDAsICAxNzgsICAyMDks
ICAxNjEsCisgICAgICAgMTIzLCAgMTMwLCAgMjUwLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAx
NTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3
MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEs
IDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAx
NTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3
MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwK
KyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1
NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcx
LCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwg
MTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1
NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcx
LCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAg
MTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3
MSwKKyAgICAgIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEsIDE1NzEs
IDE1NzEsIDE1NzEsCisgICAgICAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAxNTcxLCAx
NTcxLCAxNTcxLCAxNTcxLCAxNTcxLAorICAgICAgMTU3MSwgMTU3MSwgMTU3MSwgMTU3MSwgMTU3
MSwgMTU3MQogICAgIH07CiAgIHJlZ2lzdGVyIGludCBodmFsID0gMDsKIApAQCAtMTA4LDExICsx
MDgsMTEgQEAgZmluZFZhbHVlIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZwogewogICBl
bnVtCiAgICAgewotICAgICAgVE9UQUxfS0VZV09SRFMgPSAyMjgsCisgICAgICBUT1RBTF9LRVlX
T1JEUyA9IDIzMCwKICAgICAgIE1JTl9XT1JEX0xFTkdUSCA9IDMsCiAgICAgICBNQVhfV09SRF9M
RU5HVEggPSAyMSwKICAgICAgIE1JTl9IQVNIX1ZBTFVFID0gMCwKLSAgICAgIE1BWF9IQVNIX1ZB
TFVFID0gMTQyOQorICAgICAgTUFYX0hBU0hfVkFMVUUgPSAxNTcwCiAgICAgfTsKIAogICBzdGF0
aWMgY29uc3Qgc3RydWN0IGNzc192YWx1ZSB3b3JkbGlzdF92YWx1ZVtdID0KQEAgLTEzMSwyMjAg
KzEzMSwyMjIgQEAgZmluZFZhbHVlIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZwogICAg
ICAgeyJydGwiLCBDU1NfVkFMX1JUTH0sCiAgICAgICB7InRvcCIsIENTU19WQUxfVE9QfSwKICAg
ICAgIHsiaXRhbGljIiwgQ1NTX1ZBTF9JVEFMSUN9LAorICAgICAgeyJkaXNjIiwgQ1NTX1ZBTF9E
SVNDfSwKKyAgICAgIHsic29saWQiLCBDU1NfVkFMX1NPTElEfSwKICAgICAgIHsicG9ydHJhaXQi
LCBDU1NfVkFMX1BPUlRSQUlUfSwKICAgICAgIHsiY3Jvc3MiLCBDU1NfVkFMX0NST1NTfSwKICAg
ICAgIHsiY3JvcCIsIENTU19WQUxfQ1JPUH0sCi0gICAgICB7ImRpc2MiLCBDU1NfVkFMX0RJU0N9
LAotICAgICAgeyJ0aGljayIsIENTU19WQUxfVEhJQ0t9LAotICAgICAgeyJzbWFsbCIsIENTU19W
QUxfU01BTEx9LAotICAgICAgeyJ0aGluIiwgQ1NTX1ZBTF9USElOfSwKLSAgICAgIHsic29saWQi
LCBDU1NfVkFMX1NPTElEfSwKKyAgICAgIHsiYm9sZCIsIENTU19WQUxfQk9MRH0sCiAgICAgICB7
InNjcm9sbCIsIENTU19WQUxfU0NST0xMfSwKLSAgICAgIHsia2F0YWthbmEiLCBDU1NfVkFMX0tB
VEFLQU5BfSwKICAgICAgIHsiaWNvbiIsIENTU19WQUxfSUNPTn0sCisgICAgICB7IndhaXQiLCBD
U1NfVkFMX1dBSVR9LAogICAgICAgeyJjYXB0aW9uIiwgQ1NTX1ZBTF9DQVBUSU9OfSwKLSAgICAg
IHsic21hbGwtY2FwcyIsIENTU19WQUxfU01BTExfQ0FQU30sCi0gICAgICB7ImNyb3NzaGFpciIs
IENTU19WQUxfQ1JPU1NIQUlSfSwKICAgICAgIHsidGVhbCIsIENTU19WQUxfVEVBTH0sCi0gICAg
ICB7ImF1dG8iLCBDU1NfVkFMX0FVVE99LAotICAgICAgeyJjb21wYWN0IiwgQ1NTX1ZBTF9DT01Q
QUNUfSwKKyAgICAgIHsic2Nyb2xsYmFyIiwgQ1NTX1ZBTF9TQ1JPTExCQVJ9LAogICAgICAgeyJw
cmUiLCBDU1NfVkFMX1BSRX0sCi0gICAgICB7ImhhbmQiLCBDU1NfVkFMX0hBTkR9LAotICAgICAg
eyJub3JtYWwiLCBDU1NfVkFMX05PUk1BTH0sCi0gICAgICB7IndhaXQiLCBDU1NfVkFMX1dBSVR9
LAotICAgICAgeyJtYXJvb24iLCBDU1NfVkFMX01BUk9PTn0sCi0gICAgICB7Imluc2V0IiwgQ1NT
X1ZBTF9JTlNFVH0sCi0gICAgICB7ImhlbHAiLCBDU1NfVkFMX0hFTFB9LAotICAgICAgeyJrYXRh
a2FuYS1pcm9oYSIsIENTU19WQUxfS0FUQUtBTkFfSVJPSEF9LAotICAgICAgeyJsaW1lIiwgQ1NT
X1ZBTF9MSU1FfSwKKyAgICAgIHsiYXV0byIsIENTU19WQUxfQVVUT30sCisgICAgICB7InNtYWxs
IiwgQ1NTX1ZBTF9TTUFMTH0sCisgICAgICB7InN1YiIsIENTU19WQUxfU1VCfSwKICAgICAgIHsi
cmVkIiwgQ1NTX1ZBTF9SRUR9LAotICAgICAgeyJsaXN0LWl0ZW0iLCBDU1NfVkFMX0xJU1RfSVRF
TX0sCi0gICAgICB7ImJsYWNrIiwgQ1NTX1ZBTF9CTEFDS30sCi0gICAgICB7ImJvdGgiLCBDU1Nf
VkFMX0JPVEh9LAotICAgICAgeyJjaXJjbGUiLCBDU1NfVkFMX0NJUkNMRX0sCi0gICAgICB7InNt
YWxsLWNhcHRpb24iLCBDU1NfVkFMX1NNQUxMX0NBUFRJT059LAotICAgICAgeyJtaXgiLCBDU1Nf
VkFMX01JWH0sCisgICAgICB7InRhYmxlIiwgQ1NTX1ZBTF9UQUJMRX0sCisgICAgICB7ImdyYXki
LCBDU1NfVkFMX0dSQVl9LAorICAgICAgeyJpbnNldCIsIENTU19WQUxfSU5TRVR9LAorICAgICAg
eyJzdGF0dXMtYmFyIiwgQ1NTX1ZBTF9TVEFUVVNfQkFSfSwKICAgICAgIHsibG91ZCIsIENTU19W
QUxfTE9VRH0sCi0gICAgICB7ImNvbGxhcHNlIiwgQ1NTX1ZBTF9DT0xMQVBTRX0sCi0gICAgICB7
ImhpZGUiLCBDU1NfVkFMX0hJREV9LAotICAgICAgeyJyaWdodCIsIENTU19WQUxfUklHSFR9LAot
ICAgICAgeyJibG9jayIsIENTU19WQUxfQkxPQ0t9LAotICAgICAgeyJzbWFsbGVyIiwgQ1NTX1ZB
TF9TTUFMTEVSfSwKLSAgICAgIHsiYm9sZCIsIENTU19WQUxfQk9MRH0sCi0gICAgICB7ImJsaW5r
IiwgQ1NTX1ZBTF9CTElOS30sCi0gICAgICB7InBvaW50ZXIiLCBDU1NfVkFMX1BPSU5URVJ9LAor
ICAgICAgeyJkb3R0ZWQiLCBDU1NfVkFMX0RPVFRFRH0sCisgICAgICB7InNtYWxsLWNhcHMiLCBD
U1NfVkFMX1NNQUxMX0NBUFN9LAogICAgICAgeyJhdm9pZCIsIENTU19WQUxfQVZPSUR9LAotICAg
ICAgeyJpbmhlcml0IiwgQ1NTX1ZBTF9JTkhFUklUfSwKKyAgICAgIHsiY2lyY2xlIiwgQ1NTX1ZB
TF9DSVJDTEV9LAogICAgICAgeyJpbnNpZGUiLCBDU1NfVkFMX0lOU0lERX0sCi0gICAgICB7Ingt
c21hbGwiLCBDU1NfVkFMX1hfU01BTEx9LAotICAgICAgeyJzaG93IiwgQ1NTX1ZBTF9TSE9XfSwK
ICAgICAgIHsiYm90dG9tIiwgQ1NTX1ZBTF9CT1RUT019LAotICAgICAgeyJydW4taW4iLCBDU1Nf
VkFMX1JVTl9JTn0sCisgICAgICB7InRleHQiLCBDU1NfVkFMX1RFWFR9LAorICAgICAgeyJjb21w
YWN0IiwgQ1NTX1ZBTF9DT01QQUNUfSwKKyAgICAgIHsiY29sbGFwc2UiLCBDU1NfVkFMX0NPTExB
UFNFfSwKKyAgICAgIHsibWl4IiwgQ1NTX1ZBTF9NSVh9LAorICAgICAgeyJkaXNhYmxlZCIsIENT
U19WQUxfRElTQUJMRUR9LAorICAgICAgeyJsYXJnZSIsIENTU19WQUxfTEFSR0V9LAorICAgICAg
eyJub3dyYXAiLCBDU1NfVkFMX05PV1JBUH0sCisgICAgICB7ImFsd2F5cyIsIENTU19WQUxfQUxX
QVlTfSwKKyAgICAgIHsiYm90aCIsIENTU19WQUxfQk9USH0sCisgICAgICB7InRoaW4iLCBDU1Nf
VkFMX1RISU59LAorICAgICAgeyJwb2ludGVyIiwgQ1NTX1ZBTF9QT0lOVEVSfSwKKyAgICAgIHsi
cmlkZ2UiLCBDU1NfVkFMX1JJREdFfSwKKyAgICAgIHsiYm9sZGVyIiwgQ1NTX1ZBTF9CT0xERVJ9
LAorICAgICAgeyJibGFjayIsIENTU19WQUxfQkxBQ0t9LAorICAgICAgeyJsYXJnZXIiLCBDU1Nf
VkFMX0xBUkdFUn0sCisgICAgICB7Im5vcm1hbCIsIENTU19WQUxfTk9STUFMfSwKKyAgICAgIHsi
dGV4dC10b3AiLCBDU1NfVkFMX1RFWFRfVE9QfSwKKyAgICAgIHsieC1zbWFsbCIsIENTU19WQUxf
WF9TTUFMTH0sCiAgICAgICB7ImlubGluZSIsIENTU19WQUxfSU5MSU5FfSwKLSAgICAgIHsic2Ny
b2xsYmFyIiwgQ1NTX1ZBTF9TQ1JPTExCQVJ9LAotICAgICAgeyJzdWIiLCBDU1NfVkFMX1NVQn0s
Ci0gICAgICB7ImFxdWEiLCBDU1NfVkFMX0FRVUF9LAotICAgICAgeyJkb3R0ZWQiLCBDU1NfVkFM
X0RPVFRFRH0sCisgICAgICB7Im1hcm9vbiIsIENTU19WQUxfTUFST09OfSwKKyAgICAgIHsiaGFu
ZCIsIENTU19WQUxfSEFORH0sCisgICAgICB7ImxhbmRzY2FwZSIsIENTU19WQUxfTEFORFNDQVBF
fSwKKyAgICAgIHsicmlnaHQiLCBDU1NfVkFMX1JJR0hUfSwKKyAgICAgIHsicnVuLWluIiwgQ1NT
X1ZBTF9SVU5fSU59LAogICAgICAgeyJub25lIiwgQ1NTX1ZBTF9OT05FfSwKLSAgICAgIHsib3V0
c2V0IiwgQ1NTX1ZBTF9PVVRTRVR9LAotICAgICAgeyJzdXBlciIsIENTU19WQUxfU1VQRVJ9LAot
ICAgICAgeyJsZWZ0IiwgQ1NTX1ZBTF9MRUZUfSwKLSAgICAgIHsidGFibGUiLCBDU1NfVkFMX1RB
QkxFfSwKKyAgICAgIHsiYmxvY2siLCBDU1NfVkFMX0JMT0NLfSwKKyAgICAgIHsibGltZSIsIENT
U19WQUxfTElNRX0sCisgICAgICB7ImNyb3NzaGFpciIsIENTU19WQUxfQ1JPU1NIQUlSfSwKKyAg
ICAgIHsibGlzdC1pdGVtIiwgQ1NTX1ZBTF9MSVNUX0lURU19LAorICAgICAgeyJwcm9ncmVzcyIs
IENTU19WQUxfUFJPR1JFU1N9LAorICAgICAgeyJibGluayIsIENTU19WQUxfQkxJTkt9LAogICAg
ICAgeyJyZXBlYXQiLCBDU1NfVkFMX1JFUEVBVH0sCi0gICAgICB7InRleHQiLCBDU1NfVkFMX1RF
WFR9LAotICAgICAgeyJkZWNpbWFsIiwgQ1NTX1ZBTF9ERUNJTUFMfSwKLSAgICAgIHsic3RhdHVz
LWJhciIsIENTU19WQUxfU1RBVFVTX0JBUn0sCisgICAgICB7ImFxdWEiLCBDU1NfVkFMX0FRVUF9
LAogICAgICAgeyJzZXBhcmF0ZSIsIENTU19WQUxfU0VQQVJBVEV9LAotICAgICAgeyJzZXJpZiIs
IENTU19WQUxfU0VSSUZ9LAotICAgICAgeyJkYXNoZWQiLCBDU1NfVkFMX0RBU0hFRH0sCi0gICAg
ICB7ImhpcmFnYW5hIiwgQ1NTX1ZBTF9ISVJBR0FOQX0sCi0gICAgICB7Im5vd3JhcCIsIENTU19W
QUxfTk9XUkFQfSwKKyAgICAgIHsic21hbGwtY2FwdGlvbiIsIENTU19WQUxfU01BTExfQ0FQVElP
Tn0sCisgICAgICB7Im91dHNldCIsIENTU19WQUxfT1VUU0VUfSwKKyAgICAgIHsibGVmdCIsIENT
U19WQUxfTEVGVH0sCisgICAgICB7IndpZGVyIiwgQ1NTX1ZBTF9XSURFUn0sCisgICAgICB7InN1
cGVyIiwgQ1NTX1ZBTF9TVVBFUn0sCisgICAgICB7InRhYmxlLWNhcHRpb24iLCBDU1NfVkFMX1RB
QkxFX0NBUFRJT059LAogICAgICAgeyJ0cmFuc3BhcmVudCIsIENTU19WQUxfVFJBTlNQQVJFTlR9
LAotICAgICAgeyJsYW5kc2NhcGUiLCBDU1NfVkFMX0xBTkRTQ0FQRX0sCi0gICAgICB7InB1cnBs
ZSIsIENTU19WQUxfUFVSUExFfSwKLSAgICAgIHsiZ3JheSIsIENTU19WQUxfR1JBWX0sCi0gICAg
ICB7ImFsd2F5cyIsIENTU19WQUxfQUxXQVlTfSwKKyAgICAgIHsic2VyaWYiLCBDU1NfVkFMX1NF
UklGfSwKKyAgICAgIHsib3JhbmdlIiwgQ1NTX1ZBTF9PUkFOR0V9LAorICAgICAgeyJsb3dlciIs
IENTU19WQUxfTE9XRVJ9LAorICAgICAgeyJibHVlIiwgQ1NTX1ZBTF9CTFVFfSwKICAgICAgIHsi
ZmFudGFzeSIsIENTU19WQUxfRkFOVEFTWX0sCi0gICAgICB7Im1pZGRsZSIsIENTU19WQUxfTUlE
RExFfSwKLSAgICAgIHsidGV4dC10b3AiLCBDU1NfVkFMX1RFWFRfVE9QfSwKLSAgICAgIHsic2ls
dmVyIiwgQ1NTX1ZBTF9TSUxWRVJ9LAotICAgICAgeyJhcm1lbmlhbiIsIENTU19WQUxfQVJNRU5J
QU59LAotICAgICAgeyJvbGl2ZSIsIENTU19WQUxfT0xJVkV9LAotICAgICAgeyJmdWNoc2lhIiwg
Q1NTX1ZBTF9GVUNIU0lBfSwKKyAgICAgIHsic21hbGxlciIsIENTU19WQUxfU01BTExFUn0sCiAg
ICAgICB7Im5hdnkiLCBDU1NfVkFMX05BVll9LAotICAgICAgeyJsYXJnZSIsIENTU19WQUxfTEFS
R0V9LAorICAgICAgeyJncmV5IiwgQ1NTX1ZBTF9HUkVZfSwKKyAgICAgIHsicHVycGxlIiwgQ1NT
X1ZBTF9QVVJQTEV9LAogICAgICAgeyJvdXRzaWRlIiwgQ1NTX1ZBTF9PVVRTSURFfSwKLSAgICAg
IHsibW9ub3NwYWNlIiwgQ1NTX1ZBTF9NT05PU1BBQ0V9LAotICAgICAgeyJoaWRkZW4iLCBDU1Nf
VkFMX0hJRERFTn0sCi0gICAgICB7IndoaXRlIiwgQ1NTX1ZBTF9XSElURX0sCi0gICAgICB7Imxh
cmdlciIsIENTU19WQUxfTEFSR0VSfSwKLSAgICAgIHsidXBwZXItYWxwaGEiLCBDU1NfVkFMX1VQ
UEVSX0FMUEhBfSwKLSAgICAgIHsic2Fucy1zZXJpZiIsIENTU19WQUxfU0FOU19TRVJJRn0sCi0g
ICAgICB7ImNhcGl0YWxpemUiLCBDU1NfVkFMX0NBUElUQUxJWkV9LAorICAgICAgeyJzaWx2ZXIi
LCBDU1NfVkFMX1NJTFZFUn0sCisgICAgICB7ImJlbG93IiwgQ1NTX1ZBTF9CRUxPV30sCisgICAg
ICB7IngtbGFyZ2UiLCBDU1NfVkFMX1hfTEFSR0V9LAorICAgICAgeyJvbGl2ZSIsIENTU19WQUxf
T0xJVkV9LAorICAgICAgeyJkZWNpbWFsIiwgQ1NTX1ZBTF9ERUNJTUFMfSwKKyAgICAgIHsibWlk
ZGxlIiwgQ1NTX1ZBTF9NSURETEV9LAorICAgICAgeyJoaXJhZ2FuYSIsIENTU19WQUxfSElSQUdB
TkF9LAorICAgICAgeyJzaG93IiwgQ1NTX1ZBTF9TSE9XfSwKKyAgICAgIHsiaGVscCIsIENTU19W
QUxfSEVMUH0sCisgICAgICB7ImhpZGUiLCBDU1NfVkFMX0hJREV9LAorICAgICAgeyJ2aXNpYmxl
IiwgQ1NTX1ZBTF9WSVNJQkxFfSwKKyAgICAgIHsiYWJzb2x1dGUiLCBDU1NfVkFMX0FCU09MVVRF
fSwKKyAgICAgIHsidGFibGUtcm93IiwgQ1NTX1ZBTF9UQUJMRV9ST1d9LAorICAgICAgeyJjYXB0
aW9udGV4dCIsIENTU19WQUxfQ0FQVElPTlRFWFR9LAorICAgICAgeyJhYm92ZSIsIENTU19WQUxf
QUJPVkV9LAorICAgICAgeyJ4eC1zbWFsbCIsIENTU19WQUxfWFhfU01BTEx9LAorICAgICAgeyJ3
aW5kb3ciLCBDU1NfVkFMX1dJTkRPV30sCisgICAgICB7InRhYmxlLWNlbGwiLCBDU1NfVkFMX1RB
QkxFX0NFTEx9LAogICAgICAgeyJjZW50ZXIiLCBDU1NfVkFMX0NFTlRFUn0sCi0gICAgICB7InVw
cGVyLWxhdGluIiwgQ1NTX1ZBTF9VUFBFUl9MQVRJTn0sCisgICAgICB7ImRvdWJsZSIsIENTU19W
QUxfRE9VQkxFfSwKICAgICAgIHsiaW52ZXJ0IiwgQ1NTX1ZBTF9JTlZFUlR9LAotICAgICAgeyJt
ZW51IiwgQ1NTX1ZBTF9NRU5VfSwKLSAgICAgIHsibG93ZXIiLCBDU1NfVkFMX0xPV0VSfSwKKyAg
ICAgIHsiZGFzaGVkIiwgQ1NTX1ZBTF9EQVNIRUR9LAorICAgICAgeyJjYXBpdGFsaXplIiwgQ1NT
X1ZBTF9DQVBJVEFMSVpFfSwKKyAgICAgIHsiYmFzZWxpbmUiLCBDU1NfVkFMX0JBU0VMSU5FfSwK
KyAgICAgIHsic2Fucy1zZXJpZiIsIENTU19WQUxfU0FOU19TRVJJRn0sCiAgICAgICB7Im5vLXJl
cGVhdCIsIENTU19WQUxfTk9fUkVQRUFUfSwKLSAgICAgIHsibW92ZSIsIENTU19WQUxfTU9WRX0s
Ci0gICAgICB7ImxpZ2h0ZXIiLCBDU1NfVkFMX0xJR0hURVJ9LAotICAgICAgeyJyaWRnZSIsIENT
U19WQUxfUklER0V9LAotICAgICAgeyJqdXN0aWZ5IiwgQ1NTX1ZBTF9KVVNUSUZZfSwKLSAgICAg
IHsiaGlyYWdhbmEtaXJvaGEiLCBDU1NfVkFMX0hJUkFHQU5BX0lST0hBfSwKLSAgICAgIHsicHJv
Z3Jlc3MiLCBDU1NfVkFMX1BST0dSRVNTfSwKLSAgICAgIHsid2lkZXIiLCBDU1NfVkFMX1dJREVS
fSwKLSAgICAgIHsiYm9sZGVyIiwgQ1NTX1ZBTF9CT0xERVJ9LAotICAgICAgeyJyZXBlYXQteSIs
IENTU19WQUxfUkVQRUFUX1l9LAotICAgICAgeyJoaWdoZXIiLCBDU1NfVkFMX0hJR0hFUn0sCi0g
ICAgICB7ImJsdWUiLCBDU1NfVkFMX0JMVUV9LAotICAgICAgeyIta29ucS1hdXRvIiwgQ1NTX1ZB
TF9fS09OUV9BVVRPfSwKLSAgICAgIHsib3JhbmdlIiwgQ1NTX1ZBTF9PUkFOR0V9LAotICAgICAg
eyJ0YWJsZS1jYXB0aW9uIiwgQ1NTX1ZBTF9UQUJMRV9DQVBUSU9OfSwKLSAgICAgIHsiY2FwdGlv
bnRleHQiLCBDU1NfVkFMX0NBUFRJT05URVhUfSwKLSAgICAgIHsieHgtc21hbGwiLCBDU1NfVkFM
X1hYX1NNQUxMfSwKLSAgICAgIHsic3F1YXJlIiwgQ1NTX1ZBTF9TUVVBUkV9LAotICAgICAgeyJt
ZWRpdW0iLCBDU1NfVkFMX01FRElVTX0sCi0gICAgICB7ImdyZXkiLCBDU1NfVkFMX0dSRVl9LAot
ICAgICAgeyJhYnNvbHV0ZSIsIENTU19WQUxfQUJTT0xVVEV9LAotICAgICAgeyJsb3dlci1hbHBo
YSIsIENTU19WQUxfTE9XRVJfQUxQSEF9LAotICAgICAgeyJhY3RpdmVjYXB0aW9uIiwgQ1NTX1ZB
TF9BQ1RJVkVDQVBUSU9OfSwKLSAgICAgIHsiLWtvbnEtbm9ybWFsIiwgQ1NTX1ZBTF9fS09OUV9O
T1JNQUx9LAotICAgICAgeyJhcHB3b3Jrc3BhY2UiLCBDU1NfVkFMX0FQUFdPUktTUEFDRX0sCisg
ICAgICB7Imdlb3JnaWFuIiwgQ1NTX1ZBTF9HRU9SR0lBTn0sCisgICAgICB7InVwcGVyLWxhdGlu
IiwgQ1NTX1ZBTF9VUFBFUl9MQVRJTn0sCiAgICAgICB7InJlcGVhdC14IiwgQ1NTX1ZBTF9SRVBF
QVRfWH0sCisgICAgICB7InRoaWNrIiwgQ1NTX1ZBTF9USElDS30sCisgICAgICB7InJlcGVhdC15
IiwgQ1NTX1ZBTF9SRVBFQVRfWX0sCiAgICAgICB7Imxvd2VyLWxhdGluIiwgQ1NTX1ZBTF9MT1dF
Ul9MQVRJTn0sCi0gICAgICB7InVwcGVyY2FzZSIsIENTU19WQUxfVVBQRVJDQVNFfSwKLSAgICAg
IHsibGV2ZWwiLCBDU1NfVkFMX0xFVkVMfSwKLSAgICAgIHsidmlzaWJsZSIsIENTU19WQUxfVklT
SUJMRX0sCi0gICAgICB7InJlbGF0aXZlIiwgQ1NTX1ZBTF9SRUxBVElWRX0sCisgICAgICB7Imp1
c3RpZnkiLCBDU1NfVkFMX0pVU1RJRll9LAorICAgICAgeyJpbmhlcml0IiwgQ1NTX1ZBTF9JTkhF
UklUfSwKKyAgICAgIHsiZW5hYmxlZCIsIENTU19WQUxfRU5BQkxFRH0sCiAgICAgICB7Im5hcnJv
d2VyIiwgQ1NTX1ZBTF9OQVJST1dFUn0sCi0gICAgICB7InVwcGVyLXJvbWFuIiwgQ1NTX1ZBTF9V
UFBFUl9ST01BTn0sCi0gICAgICB7ImFib3ZlIiwgQ1NTX1ZBTF9BQk9WRX0sCi0gICAgICB7ImN1
cnNpdmUiLCBDU1NfVkFMX0NVUlNJVkV9LAotICAgICAgeyJkZWZhdWx0IiwgQ1NTX1ZBTF9ERUZB
VUxUfSwKLSAgICAgIHsicy1yZXNpemUiLCBDU1NfVkFMX1NfUkVTSVpFfSwKLSAgICAgIHsidGFi
bGUtY2VsbCIsIENTU19WQUxfVEFCTEVfQ0VMTH0sCi0gICAgICB7ImJhc2VsaW5lIiwgQ1NTX1ZB
TF9CQVNFTElORX0sCi0gICAgICB7InllbGxvdyIsIENTU19WQUxfWUVMTE9XfSwKICAgICAgIHsi
Zml4ZWQiLCBDU1NfVkFMX0ZJWEVEfSwKLSAgICAgIHsiaGlnaGxpZ2h0IiwgQ1NTX1ZBTF9ISUdI
TElHSFR9LAotICAgICAgeyJkb3VibGUiLCBDU1NfVkFMX0RPVUJMRX0sCi0gICAgICB7ImJlbG93
IiwgQ1NTX1ZBTF9CRUxPV30sCi0gICAgICB7IngtbGFyZ2UiLCBDU1NfVkFMX1hfTEFSR0V9LAot
ICAgICAgeyJpbmFjdGl2ZWNhcHRpb24iLCBDU1NfVkFMX0lOQUNUSVZFQ0FQVElPTn0sCi0gICAg
ICB7ImlubGluZS1ibG9jayIsIENTU19WQUxfSU5MSU5FX0JMT0NLfSwKLSAgICAgIHsid2luZG93
IiwgQ1NTX1ZBTF9XSU5ET1d9LAorICAgICAgeyJhcm1lbmlhbiIsIENTU19WQUxfQVJNRU5JQU59
LAorICAgICAgeyJ5ZWxsb3ciLCBDU1NfVkFMX1lFTExPV30sCiAgICAgICB7ImdyZWVuIiwgQ1NT
X1ZBTF9HUkVFTn0sCi0gICAgICB7InRhYmxlLXJvdyIsIENTU19WQUxfVEFCTEVfUk9XfSwKLSAg
ICAgIHsiaW5mb3RleHQiLCBDU1NfVkFMX0lORk9URVhUfSwKLSAgICAgIHsiZW1iZWQiLCBDU1Nf
VkFMX0VNQkVEfSwKLSAgICAgIHsibi1yZXNpemUiLCBDU1NfVkFMX05fUkVTSVpFfSwKLSAgICAg
IHsibG93ZXJjYXNlIiwgQ1NTX1ZBTF9MT1dFUkNBU0V9LAorICAgICAgeyJncmF5dGV4dCIsIENT
U19WQUxfR1JBWVRFWFR9LAorICAgICAgeyJrYXRha2FuYSIsIENTU19WQUxfS0FUQUtBTkF9LAor
ICAgICAgeyJsaWdodGVyIiwgQ1NTX1ZBTF9MSUdIVEVSfSwKKyAgICAgIHsibW9ub3NwYWNlIiwg
Q1NTX1ZBTF9NT05PU1BBQ0V9LAorICAgICAgeyJ4eC1sYXJnZSIsIENTU19WQUxfWFhfTEFSR0V9
LAorICAgICAgeyJoaWRkZW4iLCBDU1NfVkFMX0hJRERFTn0sCiAgICAgICB7Imdyb292ZSIsIENT
U19WQUxfR1JPT1ZFfSwKLSAgICAgIHsibG93ZXItcm9tYW4iLCBDU1NfVkFMX0xPV0VSX1JPTUFO
fSwKLSAgICAgIHsib3ZlcmxpbmUiLCBDU1NfVkFMX09WRVJMSU5FfSwKLSAgICAgIHsiY2prLWlk
ZW9ncmFwaGljIiwgQ1NTX1ZBTF9DSktfSURFT0dSQVBISUN9LAotICAgICAgeyJ0ZXh0LWJvdHRv
bSIsIENTU19WQUxfVEVYVF9CT1RUT019LAotICAgICAgeyIta29ucS10ZXh0IiwgQ1NTX1ZBTF9f
S09OUV9URVhUfSwKKyAgICAgIHsid2hpdGUiLCBDU1NfVkFMX1dISVRFfSwKKyAgICAgIHsiYWN0
aXZlY2FwdGlvbiIsIENTU19WQUxfQUNUSVZFQ0FQVElPTn0sCisgICAgICB7InNxdWFyZSIsIENT
U19WQUxfU1FVQVJFfSwKICAgICAgIHsiaW5saW5lLXRhYmxlIiwgQ1NTX1ZBTF9JTkxJTkVfVEFC
TEV9LAorICAgICAgeyJ0ZXh0LWJvdHRvbSIsIENTU19WQUxfVEVYVF9CT1RUT019LAorICAgICAg
eyJsZXZlbCIsIENTU19WQUxfTEVWRUx9LAorICAgICAgeyJtb3ZlIiwgQ1NTX1ZBTF9NT1ZFfSwK
KyAgICAgIHsicmVsYXRpdmUiLCBDU1NfVkFMX1JFTEFUSVZFfSwKKyAgICAgIHsiZW1iZWQiLCBD
U1NfVkFMX0VNQkVEfSwKKyAgICAgIHsiZGVmYXVsdCIsIENTU19WQUxfREVGQVVMVH0sCisgICAg
ICB7Im1lbnUiLCBDU1NfVkFMX01FTlV9LAorICAgICAgeyJpbmZvdGV4dCIsIENTU19WQUxfSU5G
T1RFWFR9LAorICAgICAgeyJ1cHBlcmNhc2UiLCBDU1NfVkFMX1VQUEVSQ0FTRX0sCisgICAgICB7
Imxvd2VyY2FzZSIsIENTU19WQUxfTE9XRVJDQVNFfSwKKyAgICAgIHsiY3Vyc2l2ZSIsIENTU19W
QUxfQ1VSU0lWRX0sCisgICAgICB7InMtcmVzaXplIiwgQ1NTX1ZBTF9TX1JFU0laRX0sCisgICAg
ICB7ImV4cGFuZGVkIiwgQ1NTX1ZBTF9FWFBBTkRFRH0sCisgICAgICB7ImJ1dHRvbnRleHQiLCBD
U1NfVkFMX0JVVFRPTlRFWFR9LAogICAgICAgeyJjb25kZW5zZWQiLCBDU1NfVkFMX0NPTkRFTlNF
RH0sCi0gICAgICB7Ii1rb25xLW5vd3JhcCIsIENTU19WQUxfX0tPTlFfTk9XUkFQfSwKICAgICAg
IHsib2JsaXF1ZSIsIENTU19WQUxfT0JMSVFVRX0sCi0gICAgICB7Imdlb3JnaWFuIiwgQ1NTX1ZB
TF9HRU9SR0lBTn0sCi0gICAgICB7ImUtcmVzaXplIiwgQ1NTX1ZBTF9FX1JFU0laRX0sCisgICAg
ICB7ImluYWN0aXZlY2FwdGlvbiIsIENTU19WQUxfSU5BQ1RJVkVDQVBUSU9OfSwKKyAgICAgIHsi
ZnVjaHNpYSIsIENTU19WQUxfRlVDSFNJQX0sCisgICAgICB7InVwcGVyLWFscGhhIiwgQ1NTX1ZB
TF9VUFBFUl9BTFBIQX0sCisgICAgICB7Imxvd2VyLWFscGhhIiwgQ1NTX1ZBTF9MT1dFUl9BTFBI
QX0sCisgICAgICB7Im4tcmVzaXplIiwgQ1NTX1ZBTF9OX1JFU0laRX0sCisgICAgICB7ImFwcHdv
cmtzcGFjZSIsIENTU19WQUxfQVBQV09SS1NQQUNFfSwKKyAgICAgIHsib3ZlcmxpbmUiLCBDU1Nf
VkFMX09WRVJMSU5FfSwKKyAgICAgIHsiaW5saW5lLWJsb2NrIiwgQ1NTX1ZBTF9JTkxJTkVfQkxP
Q0t9LAorICAgICAgeyJ1cHBlci1yb21hbiIsIENTU19WQUxfVVBQRVJfUk9NQU59LAorICAgICAg
eyJsb3dlci1yb21hbiIsIENTU19WQUxfTE9XRVJfUk9NQU59LAorICAgICAgeyJtZWRpdW0iLCBD
U1NfVkFMX01FRElVTX0sCisgICAgICB7ImhpcmFnYW5hLWlyb2hhIiwgQ1NTX1ZBTF9ISVJBR0FO
QV9JUk9IQX0sCisgICAgICB7ImJ1dHRvbmZhY2UiLCBDU1NfVkFMX0JVVFRPTkZBQ0V9LAorICAg
ICAgeyJhY3RpdmVib3JkZXIiLCBDU1NfVkFMX0FDVElWRUJPUkRFUn0sCisgICAgICB7ImJpZGkt
b3ZlcnJpZGUiLCBDU1NfVkFMX0JJRElfT1ZFUlJJREV9LAogICAgICAgeyJ1bmRlcmxpbmUiLCBD
U1NfVkFMX1VOREVSTElORX0sCi0gICAgICB7ImdyYXl0ZXh0IiwgQ1NTX1ZBTF9HUkFZVEVYVH0s
Ci0gICAgICB7InNlLXJlc2l6ZSIsIENTU19WQUxfU0VfUkVTSVpFfSwKICAgICAgIHsidGFibGUt
Y29sdW1uIiwgQ1NTX1ZBTF9UQUJMRV9DT0xVTU59LAotICAgICAgeyIta29ucS1ib2R5IiwgQ1NT
X1ZBTF9fS09OUV9CT0RZfSwKLSAgICAgIHsiZXhwYW5kZWQiLCBDU1NfVkFMX0VYUEFOREVEfSwK
LSAgICAgIHsiLWtvbnEtY2VudGVyIiwgQ1NTX1ZBTF9fS09OUV9DRU5URVJ9LAotICAgICAgeyJj
bG9zZS1xdW90ZSIsIENTU19WQUxfQ0xPU0VfUVVPVEV9LAotICAgICAgeyJsaW5lLXRocm91Z2gi
LCBDU1NfVkFMX0xJTkVfVEhST1VHSH0sCi0gICAgICB7ImJ1dHRvbnRleHQiLCBDU1NfVkFMX0JV
VFRPTlRFWFR9LAotICAgICAgeyJoZWJyZXciLCBDU1NfVkFMX0hFQlJFV30sCisgICAgICB7ImJh
Y2tncm91bmQiLCBDU1NfVkFMX0JBQ0tHUk9VTkR9LAorICAgICAgeyJ3aW5kb3d0ZXh0IiwgQ1NT
X1ZBTF9XSU5ET1dURVhUfSwKKyAgICAgIHsiLWtvbnEtYXV0byIsIENTU19WQUxfX0tPTlFfQVVU
T30sCisgICAgICB7ImhpZ2hlciIsIENTU19WQUxfSElHSEVSfSwKICAgICAgIHsidy1yZXNpemUi
LCBDU1NfVkFMX1dfUkVTSVpFfSwKLSAgICAgIHsiYnV0dG9uZmFjZSIsIENTU19WQUxfQlVUVE9O
RkFDRX0sCiAgICAgICB7InN3LXJlc2l6ZSIsIENTU19WQUxfU1dfUkVTSVpFfSwKLSAgICAgIHsi
b3Blbi1xdW90ZSIsIENTU19WQUxfT1BFTl9RVU9URX0sCi0gICAgICB7Im5lLXJlc2l6ZSIsIENT
U19WQUxfTkVfUkVTSVpFfSwKLSAgICAgIHsiYmFja2dyb3VuZCIsIENTU19WQUxfQkFDS0dST1VO
RH0sCi0gICAgICB7Inh4LWxhcmdlIiwgQ1NTX1ZBTF9YWF9MQVJHRX0sCi0gICAgICB7Im1lbnV0
ZXh0IiwgQ1NTX1ZBTF9NRU5VVEVYVH0sCisgICAgICB7ImUtcmVzaXplIiwgQ1NTX1ZBTF9FX1JF
U0laRX0sCisgICAgICB7InNlLXJlc2l6ZSIsIENTU19WQUxfU0VfUkVTSVpFfSwKKyAgICAgIHsi
LWtvbnEtYm9keSIsIENTU19WQUxfX0tPTlFfQk9EWX0sCisgICAgICB7InRhYmxlLXJvdy1ncm91
cCIsIENTU19WQUxfVEFCTEVfUk9XX0dST1VQfSwKKyAgICAgIHsiaGVicmV3IiwgQ1NTX1ZBTF9I
RUJSRVd9LAogICAgICAgeyJidXR0b25zaGFkb3ciLCBDU1NfVkFMX0JVVFRPTlNIQURPV30sCi0g
ICAgICB7InRocmVlZGZhY2UiLCBDU1NfVkFMX1RIUkVFREZBQ0V9LAotICAgICAgeyJ0aHJlZWRz
aGFkb3ciLCBDU1NfVkFMX1RIUkVFRFNIQURPV30sCisgICAgICB7Im1lc3NhZ2UtYm94IiwgQ1NT
X1ZBTF9NRVNTQUdFX0JPWH0sCisgICAgICB7ImluYWN0aXZlYm9yZGVyIiwgQ1NTX1ZBTF9JTkFD
VElWRUJPUkRFUn0sCisgICAgICB7Ii1rb25xLXRleHQiLCBDU1NfVkFMX19LT05RX1RFWFR9LAor
ICAgICAgeyJrYXRha2FuYS1pcm9oYSIsIENTU19WQUxfS0FUQUtBTkFfSVJPSEF9LAorICAgICAg
eyJ1bHRyYS1leHBhbmRlZCIsIENTU19WQUxfVUxUUkFfRVhQQU5ERUR9LAorICAgICAgeyJjbG9z
ZS1xdW90ZSIsIENTU19WQUxfQ0xPU0VfUVVPVEV9LAogICAgICAgeyJudy1yZXNpemUiLCBDU1Nf
VkFMX05XX1JFU0laRX0sCiAgICAgICB7InVsdHJhLWNvbmRlbnNlZCIsIENTU19WQUxfVUxUUkFf
Q09OREVOU0VEfSwKLSAgICAgIHsiYWN0aXZlYm9yZGVyIiwgQ1NTX1ZBTF9BQ1RJVkVCT1JERVJ9
LAotICAgICAgeyJuby1jbG9zZS1xdW90ZSIsIENTU19WQUxfTk9fQ0xPU0VfUVVPVEV9LAotICAg
ICAgeyIta29ucS1hcm91bmQtZmxvYXRzIiwgQ1NTX1ZBTF9fS09OUV9BUk9VTkRfRkxPQVRTfSwK
LSAgICAgIHsibm8tb3Blbi1xdW90ZSIsIENTU19WQUxfTk9fT1BFTl9RVU9URX0sCi0gICAgICB7
ImJpZGktb3ZlcnJpZGUiLCBDU1NfVkFMX0JJRElfT1ZFUlJJREV9LAotICAgICAgeyJzZW1pLWNv
bmRlbnNlZCIsIENTU19WQUxfU0VNSV9DT05ERU5TRUR9LAotICAgICAgeyJ1bHRyYS1leHBhbmRl
ZCIsIENTU19WQUxfVUxUUkFfRVhQQU5ERUR9LAotICAgICAgeyJpbmFjdGl2ZWJvcmRlciIsIENT
U19WQUxfSU5BQ1RJVkVCT1JERVJ9LAotICAgICAgeyJoaWdobGlnaHR0ZXh0IiwgQ1NTX1ZBTF9I
SUdITElHSFRURVhUfSwKKyAgICAgIHsiLWtvbnEtbm93cmFwIiwgQ1NTX1ZBTF9fS09OUV9OT1dS
QVB9LAorICAgICAgeyJuZS1yZXNpemUiLCBDU1NfVkFMX05FX1JFU0laRX0sCisgICAgICB7Im9w
ZW4tcXVvdGUiLCBDU1NfVkFMX09QRU5fUVVPVEV9LAorICAgICAgeyIta29ucS1ub3JtYWwiLCBD
U1NfVkFMX19LT05RX05PUk1BTH0sCisgICAgICB7Im1lbnV0ZXh0IiwgQ1NTX1ZBTF9NRU5VVEVY
VH0sCisgICAgICB7ImNqay1pZGVvZ3JhcGhpYyIsIENTU19WQUxfQ0pLX0lERU9HUkFQSElDfSwK
KyAgICAgIHsiaGlnaGxpZ2h0IiwgQ1NTX1ZBTF9ISUdITElHSFR9LAorICAgICAgeyJleHRyYS1l
eHBhbmRlZCIsIENTU19WQUxfRVhUUkFfRVhQQU5ERUR9LAogICAgICAgeyJpbmFjdGl2ZWNhcHRp
b250ZXh0IiwgQ1NTX1ZBTF9JTkFDVElWRUNBUFRJT05URVhUfSwKLSAgICAgIHsidGhyZWVkZGFy
a3NoYWRvdyIsIENTU19WQUxfVEhSRUVEREFSS1NIQURPV30sCi0gICAgICB7IndpbmRvd3RleHQi
LCBDU1NfVkFMX1dJTkRPV1RFWFR9LAorICAgICAgeyJleHRyYS1jb25kZW5zZWQiLCBDU1NfVkFM
X0VYVFJBX0NPTkRFTlNFRH0sCisgICAgICB7Im5vLWNsb3NlLXF1b3RlIiwgQ1NTX1ZBTF9OT19D
TE9TRV9RVU9URX0sCiAgICAgICB7InNlbWktZXhwYW5kZWQiLCBDU1NfVkFMX1NFTUlfRVhQQU5E
RUR9LAotICAgICAgeyJtZXNzYWdlLWJveCIsIENTU19WQUxfTUVTU0FHRV9CT1h9LAotICAgICAg
eyJidXR0b25oaWdobGlnaHQiLCBDU1NfVkFMX0JVVFRPTkhJR0hMSUdIVH0sCi0gICAgICB7Imxv
d2VyLWdyZWVrIiwgQ1NTX1ZBTF9MT1dFUl9HUkVFS30sCisgICAgICB7InNlbWktY29uZGVuc2Vk
IiwgQ1NTX1ZBTF9TRU1JX0NPTkRFTlNFRH0sCisgICAgICB7Im5vLW9wZW4tcXVvdGUiLCBDU1Nf
VkFMX05PX09QRU5fUVVPVEV9LAorICAgICAgeyIta29ucS1jZW50ZXIiLCBDU1NfVkFMX19LT05R
X0NFTlRFUn0sCisgICAgICB7InRocmVlZGZhY2UiLCBDU1NfVkFMX1RIUkVFREZBQ0V9LAogICAg
ICAgeyJ3aW5kb3dmcmFtZSIsIENTU19WQUxfV0lORE9XRlJBTUV9LAotICAgICAgeyJleHRyYS1j
b25kZW5zZWQiLCBDU1NfVkFMX0VYVFJBX0NPTkRFTlNFRH0sCi0gICAgICB7InRhYmxlLXJvdy1n
cm91cCIsIENTU19WQUxfVEFCTEVfUk9XX0dST1VQfSwKLSAgICAgIHsidGhyZWVkaGlnaGxpZ2h0
IiwgQ1NTX1ZBTF9USFJFRURISUdITElHSFR9LAorICAgICAgeyJ0YWJsZS1mb290ZXItZ3JvdXAi
LCBDU1NfVkFMX1RBQkxFX0ZPT1RFUl9HUk9VUH0sCiAgICAgICB7ImluZm9iYWNrZ3JvdW5kIiwg
Q1NTX1ZBTF9JTkZPQkFDS0dST1VORH0sCi0gICAgICB7ImV4dHJhLWV4cGFuZGVkIiwgQ1NTX1ZB
TF9FWFRSQV9FWFBBTkRFRH0sCi0gICAgICB7InRocmVlZGxpZ2h0c2hhZG93IiwgQ1NTX1ZBTF9U
SFJFRURMSUdIVFNIQURPV30sCisgICAgICB7ImxpbmUtdGhyb3VnaCIsIENTU19WQUxfTElORV9U
SFJPVUdIfSwKKyAgICAgIHsibG93ZXItZ3JlZWsiLCBDU1NfVkFMX0xPV0VSX0dSRUVLfSwKICAg
ICAgIHsidGFibGUtY29sdW1uLWdyb3VwIiwgQ1NTX1ZBTF9UQUJMRV9DT0xVTU5fR1JPVVB9LAot
ICAgICAgeyJ0YWJsZS1mb290ZXItZ3JvdXAiLCBDU1NfVkFMX1RBQkxFX0ZPT1RFUl9HUk9VUH0s
CisgICAgICB7InRocmVlZHNoYWRvdyIsIENTU19WQUxfVEhSRUVEU0hBRE9XfSwKKyAgICAgIHsi
LWtvbnEtYXJvdW5kLWZsb2F0cyIsIENTU19WQUxfX0tPTlFfQVJPVU5EX0ZMT0FUU30sCiAgICAg
ICB7InRhYmxlLWhlYWRlci1ncm91cCIsIENTU19WQUxfVEFCTEVfSEVBREVSX0dST1VQfSwKLSAg
ICAgIHsiLWtvbnEtYmFzZWxpbmUtbWlkZGxlIiwgQ1NTX1ZBTF9fS09OUV9CQVNFTElORV9NSURE
TEV9LAorICAgICAgeyJoaWdobGlnaHR0ZXh0IiwgQ1NTX1ZBTF9ISUdITElHSFRURVhUfSwKICAg
ICAgIHsiLWtvbnEteHh4LWxhcmdlIiwgQ1NTX1ZBTF9fS09OUV9YWFhfTEFSR0V9LAotICAgICAg
eyJkZWNpbWFsLWxlYWRpbmctemVybyIsIENTU19WQUxfREVDSU1BTF9MRUFESU5HX1pFUk99Cisg
ICAgICB7ImJ1dHRvbmhpZ2hsaWdodCIsIENTU19WQUxfQlVUVE9OSElHSExJR0hUfSwKKyAgICAg
IHsiZGVjaW1hbC1sZWFkaW5nLXplcm8iLCBDU1NfVkFMX0RFQ0lNQUxfTEVBRElOR19aRVJPfSwK
KyAgICAgIHsidGhyZWVkZGFya3NoYWRvdyIsIENTU19WQUxfVEhSRUVEREFSS1NIQURPV30sCisg
ICAgICB7InRocmVlZGxpZ2h0c2hhZG93IiwgQ1NTX1ZBTF9USFJFRURMSUdIVFNIQURPV30sCisg
ICAgICB7Ii1rb25xLWJhc2VsaW5lLW1pZGRsZSIsIENTU19WQUxfX0tPTlFfQkFTRUxJTkVfTUlE
RExFfSwKKyAgICAgIHsidGhyZWVkaGlnaGxpZ2h0IiwgQ1NTX1ZBTF9USFJFRURISUdITElHSFR9
CiAgICAgfTsKIAogICBzdGF0aWMgY29uc3Qgc2hvcnQgbG9va3VwW10gPQpAQCAtMzU0LDE2OSAr
MzU2LDE2NiBAQCBmaW5kVmFsdWUgKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnCiAgICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgICA0LCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAg
ICAtMSwgICAgNSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAgNiwgICAtMSwKICAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgIDcsICAgLTEsICAgLTEsICAgLTEsICAgIDgsCi0gICAgICAgICA5
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAtMjc1LCAtMjE4LCAgIC0yLAorICAgICAgICAgOSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgLTI3NywgLTIyMCwgICAtMiwKICAgICAgICAgLTEsICAg
MTIsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgMTMsICAgLTEsCiAgICAgICAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAg
MTQsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAxNSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAg
MTYsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIDE3LCAgIC0xLCAgIC0xLCAgIC0x
LCAgIDE4LCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIDE5LCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAyMCwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
MjEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAyMiwgICAtMSwgICAyMywgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAyNCwg
ICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAorICAgICAgICAyNSwgICAyNiwgICAtMSwgICAtMSwgICAtMSwgICAyNywgICAtMSwgICAtMSwK
KyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgMjgsCisg
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIDI5LCAgIC0xLCAgIC0xLCAgIDMwLCAgIC0xLAorICAg
ICAgICAtMSwgICAtMSwgICAzMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAg
IC0xLCAgIC0xLCAgIDMyLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDMzLAorICAgICAgICAt
MSwgICAzNCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgMzUsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIDM2LCAgIDM3LCAgIC0xLCAgIC0xLCAgIDM4LAorICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAzOSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEs
ICAgNDAsICAgLTEsICAgNDEsICAgNDIsICAgLTEsICAgNDMsCisgICAgICAgIC0xLCAgIC0xLCAg
IDQ0LCAgIC0xLCAgIC0xLCAgIDQ1LCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICA0NiwgICA0NywgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgNDgsICAgNDksICAgLTEsICAgLTEsICAgNTAsCisgICAgICAgIDUxLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIDUyLCAgIDUzLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICA1NCwgICAtMSwgICAt
MSwgICA1NSwgICAtMSwgICAtMSwgICA1NiwKKyAgICAgICAgLTEsICAgLTEsICAgNTcsICAgLTEs
ICAgLTEsICAgLTEsICAgNTgsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIDU5LCAgIC0xLCAg
IC0xLCAgIC0xLCAgIDYwLCAgIC0xLAorICAgICAgICAtMSwgICA2MSwgICAtMSwgICA2MiwgICAt
MSwgICAtMSwgICA2MywgICAtMSwKKyAgICAgICAgNjQsICAgLTEsICAgLTEsICAgNjUsICAgLTEs
ICAgNjYsICAgLTEsICAgNjcsCisgICAgICAgIDY4LCAgIDY5LCAgIC0xLCAgIC0xLCAgIC0xLCAg
IDcwLCAgIDcxLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICA3MiwgICA3MywgICAtMSwgICAt
MSwgICAtMSwgICA3NCwKKyAgICAgICAgNzUsICAgLTEsICAgNzYsICAgLTEsICAgNzcsICAgLTEs
ICAgNzgsICAgNzksCisgICAgICAgIDgwLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDgxLCAg
IC0xLCAgIDgyLAorICAgICAgICA4MywgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA4NCwgICAt
MSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgODUsICAgODYsICAgLTEsICAgLTEs
ICAgODcsCisgICAgICAgIC0xLCAgIC0xLCAgIDg4LCAgIDg5LCAgIDkwLCAgIDkxLCAgIC0xLCAg
IDkyLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA5MywgICA5NCwgICAt
MSwKKyAgICAgICAgLTEsICAgOTUsICAgOTYsICAgLTEsICAgLTEsICAgOTcsICAgOTgsICAgLTEs
CisgICAgICAgIDk5LCAgMTAwLCAgIC0xLCAgIC0xLCAgMTAxLCAgMTAyLCAgIC0xLCAgIC0xLAor
ICAgICAgIDEwMywgICAtMSwgICAtMSwgICAtMSwgIDEwNCwgICAtMSwgICAtMSwgIDEwNSwKKyAg
ICAgICAxMDYsICAgLTEsICAxMDcsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTA4LCAgIC0xLCAgIC0xLAorICAgICAg
IDEwOSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDExMCwgIDExMSwKKyAgICAgICAg
LTEsICAgLTEsICAxMTIsICAgLTEsICAxMTMsICAxMTQsICAgLTEsICAgLTEsCisgICAgICAgMTE1
LCAgMTE2LCAgMTE3LCAgIC0xLCAgIC0xLCAgIC0xLCAgMTE4LCAgIC0xLAorICAgICAgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgIDExOSwgIDEyMCwgIDEyMSwgICAtMSwKKyAgICAgICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAxMjIsICAxMjMsICAgLTEsICAxMjQsCisgICAgICAgIC0xLCAgMTI1
LCAgIC0xLCAgMTI2LCAgIC0xLCAgIC0xLCAgIC0xLCAgMTI3LAorICAgICAgICAtMSwgIDEyOCwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAxMjksICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAxMzAsICAgLTEsICAgLTEsCisgICAgICAgMTMxLCAgIC0xLCAgIC0x
LCAgIC0xLCAgMTMyLCAgIC0xLCAgIC0xLCAgMTMzLAorICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgIDEzNCwgICAtMSwgIDEzNSwgIDEzNiwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAxMzcsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgMTM4LCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgIDEzOSwgICAtMSwgIDE0MCwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAxNDEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAxNDIsCisgICAgICAgMTQzLCAgMTQ0LCAgIC0xLCAgIC0xLCAgIC0x
LCAgMTQ1LCAgIC0xLCAgIC0xLAorICAgICAgIDE0NiwgICAtMSwgIDE0NywgICAtMSwgICAtMSwg
IDE0OCwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAxNDksICAgLTEsICAg
LTEsICAxNTAsICAgLTEsCisgICAgICAgMTUxLCAgIC0xLCAgMTUyLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE1MywgIDE1NCwg
ICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAxNTUsICAgLTEsICAxNTYsICAgLTEsICAgLTEsICAx
NTcsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE1OCwgICAtMSwgICAtMSwg
ICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxNTksICAgLTEsICAgLTEsICAg
LTEsCisgICAgICAgMTYwLCAgMTYxLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
LSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0g
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIDE0LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAg
ICAgICAxNSwgICAtMSwgICAtMSwgICAtMSwgICAxNiwgICAtMSwgICAtMSwgICAtMSwKLSAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgMTcsICAgLTEsICAgLTEsCi0gICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIDE4LCAgIDE5LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAyMCwKLSAgICAgICAgLTEs
ICAgLTEsICAgMjEsICAgMjIsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIDIzLCAgIDI0LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgMjUsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAyNiwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgMjcsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgMjgsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAg
IDI5LCAgIDMwLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgMzEsICAgLTEsICAgLTEs
ICAgLTEsICAgMzIsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgMzMsCi0gICAgICAgIDM0LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAzNSwgICAzNiwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgMzcsICAgLTEsICAgLTEs
ICAgLTEsICAgMzgsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDM5LCAg
IC0xLCAgIC0xLAotICAgICAgICAtMSwgICA0MCwgICA0MSwgICAtMSwgICA0MiwgICAtMSwgICA0
MywgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgNDQsICAgLTEsICAgLTEsICAgLTEs
ICAgNDUsCi0gICAgICAgIC0xLCAgIDQ2LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDQ3LCAgIC0xLCAg
IC0xLAotICAgICAgICAtMSwgICAtMSwgICA0OCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA0
OSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgNTAsICAgNTEs
Ci0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDUyLAot
ICAgICAgICAtMSwgICA1MywgICA1NCwgICAtMSwgICA1NSwgICAtMSwgICA1NiwgICAtMSwKLSAg
ICAgICAgLTEsICAgLTEsICAgNTcsICAgLTEsICAgLTEsICAgNTgsICAgNTksICAgNjAsCi0gICAg
ICAgIC0xLCAgIDYxLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAg
ICAtMSwgICA2MiwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA2MywgICAtMSwKLSAgICAgICAg
NjQsICAgNjUsICAgLTEsICAgNjYsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0x
LCAgIDY3LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDY4LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwg
ICAtMSwgICA2OSwgICAtMSwgICAtMSwgICAtMSwgICA3MCwgICA3MSwKLSAgICAgICAgLTEsICAg
LTEsICAgNzIsICAgNzMsICAgNzQsICAgNzUsICAgLTEsICAgNzYsCi0gICAgICAgIDc3LCAgIDc4
LCAgIDc5LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDgwLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwg
ICA4MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA4MiwKLSAgICAgICAgLTEsICAgODMsICAg
LTEsICAgODQsICAgODUsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDg2LCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICA4NywgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgODgsICAgLTEsICAg
LTEsICAgLTEsICAgODksICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIDkwLCAgIDkxLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIDkyLCAgIDkzLAotICAgICAgICAtMSwgICAtMSwgICA5NCwgICAtMSwg
ICAtMSwgICA5NSwgICAtMSwgICAtMSwKLSAgICAgICAgOTYsICAgLTEsICAgLTEsICAgLTEsICAg
OTcsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIDk4LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICA5OSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgIDEwMCwgICAtMSwKLSAgICAgICAxMDEsICAgLTEsICAgLTEsICAxMDIsICAgLTEsICAg
LTEsICAxMDMsICAxMDQsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMTA1LCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAotICAgICAgIDEwNiwgIDEwNywgIDEwOCwgICAtMSwgICAtMSwgICAtMSwg
IDEwOSwgICAtMSwKLSAgICAgICAgLTEsICAxMTAsICAgLTEsICAgLTEsICAxMTEsICAgLTEsICAg
LTEsICAxMTIsCi0gICAgICAgMTEzLCAgMTE0LCAgIC0xLCAgIC0xLCAgIC0xLCAgMTE1LCAgIC0x
LCAgIC0xLAotICAgICAgICAtMSwgIDExNiwgICAtMSwgICAtMSwgIDExNywgICAtMSwgICAtMSwg
ICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsCi0gICAgICAgMTE4LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTE5
LAotICAgICAgICAtMSwgICAtMSwgIDEyMCwgIDEyMSwgIDEyMiwgIDEyMywgICAtMSwgIDEyNCwK
LSAgICAgICAxMjUsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0g
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMTI2LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAg
ICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDEyNywgICAtMSwKLSAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxMjgsICAgLTEsCi0gICAgICAg
IC0xLCAgIC0xLCAgMTI5LCAgMTMwLCAgMTMxLCAgIC0xLCAgIC0xLCAgMTMyLAotICAgICAgICAt
MSwgIDEzMywgICAtMSwgICAtMSwgICAtMSwgIDEzNCwgIDEzNSwgICAtMSwKLSAgICAgICAxMzYs
ICAxMzcsICAgLTEsICAgLTEsICAxMzgsICAgLTEsICAxMzksICAgLTEsCi0gICAgICAgMTQwLCAg
IC0xLCAgMTQxLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTQyLCAgMTQzLAotICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgIDE0NCwgICAtMSwgIDE0NSwKLSAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxNDYsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgIDE0NywgIDE0
OCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAxNDksICAgLTEsICAxNTAsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAg
MTUxLCAgIC0xLCAgMTUyLCAgIC0xLCAgMTUzLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgIDE1NCwgIDE1NSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgMTU2LCAgIC0xLCAgMTU3LCAg
IC0xLCAgIC0xLCAgMTU4LCAgIC0xLAotICAgICAgIDE1OSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgIDE2MCwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAxNjEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMTYyLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE2MywgIDE2
NCwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAxNjUsICAxNjYsICAgLTEsICAgLTEsICAxNjcs
ICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTY4LCAgIC0xLCAg
IC0xLCAgIC0xLAotICAgICAgIDE2OSwgICAtMSwgIDE3MCwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAxNzEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTYzLCAgIC0xLCAg
IC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxNjQsICAgLTEsICAgLTEsICAgLTEs
CisgICAgICAgIC0xLCAgIC0xLCAgMTY1LCAgIC0xLCAgIC0xLCAgMTY2LCAgIC0xLCAgIC0xLAor
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE2NywgICAtMSwgIDE2OCwKICAg
ICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAg
ICAgIC0xLCAgMTY5LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAg
ICAtMSwgICAtMSwgICAtMSwgIDE3MCwgIDE3MSwgIDE3MiwgICAtMSwgICAtMSwKKyAgICAgICAg
LTEsICAgLTEsICAgLTEsICAxNzMsICAxNzQsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTc1LCAgMTc2LAorICAgICAgIDE3Nywg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE3OCwgICAtMSwgIDE3OSwKKyAgICAgICAgLTEsICAg
LTEsICAxODAsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgMTgxLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwg
IDE4MiwgICAtMSwgICAtMSwgICAtMSwgIDE4MywgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAg
LTEsICAxODQsICAgLTEsICAgLTEsICAxODUsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgMTg2
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgIDE4Nywg
ICAtMSwgICAtMSwgIDE4OCwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgMTcyLCAgIC0xLCAgMTczLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
IDE3NCwgICAtMSwgICAtMSwgIDE3NSwKLSAgICAgICAxNzYsICAxNzcsICAxNzgsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgMTc5LCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgIDE4MCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAxODksICAgLTEsICAxOTAsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgIDE4MSwKLSAgICAgICAxODIsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAx
ODMsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgMTkxLAorICAgICAgIDE5MiwgICAtMSwgIDE5MywgICAtMSwgIDE5NCwgICAtMSwgICAtMSwg
ICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxOTUsICAgLTEsICAg
LTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMTk2LCAgIC0xLCAgMTk3LCAgMTk4LCAgIC0x
LAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
LSAgICAgICAgLTEsICAgLTEsICAgLTEsICAxODQsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0g
ICAgICAgMTg1LCAgIC0xLCAgMTg2LCAgIC0xLCAgMTg3LCAgIC0xLCAgIC0xLCAgMTg4LAotICAg
ICAgICAtMSwgICAtMSwgICAtMSwgIDE4OSwgIDE5MCwgICAtMSwgICAtMSwgICAtMSwKLSAgICAg
ICAxOTEsICAxOTIsICAgLTEsICAgLTEsICAgLTEsICAxOTMsICAgLTEsICAgLTEsCi0gICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTk0LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE5NSwKKyAgICAgICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxOTksCisgICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgMjAwLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAt
MSwgICAtMSwgIDIwMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgMjAyLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxOTYsCisgICAgICAgIC0xLCAgIC0xLCAgMjAzLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAyMDQsICAgLTEsICAgLTEs
ICAgLTEsICAyMDUsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgIDE5NywgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgIDE5OCwKLSAgICAgICAgLTEsICAgLTEsICAxOTksICAyMDAsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgMjA2LCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgMjA3LAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMDgsICAgLTEs
ICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgIDIwMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMDIs
ICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMjAzLCAg
IC0xLAotICAgICAgIDIwNCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMDksICAgLTEsICAgLTEs
CisgICAgICAgIC0xLCAgIC0xLCAgMjEwLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAog
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAg
ICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMDUsICAgLTEsICAgLTEsCiAgICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAg
ICAtMSwgICAtMSwgIDIwNiwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAg
LTEsICAyMDcsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgIDIwOCwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAyMDksICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAyMTAsICAyMTEsICAgLTEsCisgICAgICAgIC0xLCAgMjEx
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgIDIxMiwgIDIxMywgIDIxNCwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAy
MTUsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMjE2
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAy
MTIsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIxMywg
ICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAyMTQsCisgICAgICAgIC0xLCAgMjE3LCAgMjE4LCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIxOSwgICAtMSwg
ICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMjE1LCAgIC0xLCAgIC0x
LCAgMjE2LAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIxNywg
IDIxOCwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIxOSwgICAtMSwgICAtMSwgICAtMSwK
ICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAg
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAg
ICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIyMCwKICAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIyMCwgICAtMSwgICAtMSwKICAgICAgICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgMjIxLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgIDIy
MiwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAyMjEsICAgLTEsICAyMjIsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgIDIyMywgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMjMs
ICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgMjI0LCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsCiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMjI0LCAgIC0xLCAgIC0xLCAg
IC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDIyNSwgICAtMSwgICAt
MSwKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
CiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAog
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKQEAg
LTUyNCwxMCArNTIzLDMxIEBAIGZpbmRWYWx1ZSAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCBy
ZWcKICAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
CiAgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAog
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAg
ICAgICAgLTEsICAgLTEsICAyMjUsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAg
ICAtMSwgICAtMSwgICAtMSwgIDIyNiwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAyMjcKKyAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAyMjYsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgMjI3LAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwKKyAgICAgICAgLTEsICAyMjgsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
CisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAor
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAg
ICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwg
ICAtMSwgIDIyOQogICAgIH07CiAKICAgaWYgKGxlbiA8PSBNQVhfV09SRF9MRU5HVEggJiYgbGVu
ID49IE1JTl9XT1JEX0xFTkdUSCkKQEAgLTc5NCw2ICs4MTQsOCBAQCBzdGF0aWMgY29uc3QgY2hh
ciAqIGNvbnN0IHZhbHVlTGlzdFtdID0gCiAiLWtvbnEtbm93cmFwIiwgCiAiLWtvbnEtbm9ybWFs
IiwgCiAiLWtvbnEtYXJvdW5kLWZsb2F0cyIsIAorImVuYWJsZWQiLCAKKyJkaXNhYmxlZCIsIAog
ICAgIDAKIH07CiBET01TdHJpbmcgZ2V0VmFsdWVOYW1lKHVuc2lnbmVkIHNob3J0IGlkKQpAQCAt
ODAyLDUgKzgyNCw1IEBAIERPTVN0cmluZyBnZXRWYWx1ZU5hbWUodW5zaWduZWQgc2hvcnQgaWQK
ICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKICAgICBlbHNlCiAgICAgICByZXR1cm4gRE9NU3Ry
aW5nKHZhbHVlTGlzdFtpZF0pOwotfQorfTsKIApJbmRleDogY3NzL2Nzc3ZhbHVlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2Nzcy9jc3N2YWx1ZXMuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMgpkaWZmIC11IC1wIC1yMS4zMiBjc3N2YWx1ZXMuaAot
LS0gY3NzL2Nzc3ZhbHVlcy5oCTE3IEFwciAyMDAzIDE2OjA3OjQ0IC0wMDAwCTEuMzIKKysrIGNz
cy9jc3N2YWx1ZXMuaAkxOCBBdWcgMjAwMyAyMTo1MjozNSAtMDAwMApAQCAtMjM3LDcgKzIzNyw5
IEBAIERPTTo6RE9NU3RyaW5nIGdldFZhbHVlTmFtZSh1bnNpZ25lZCBzaG8KICNkZWZpbmUgQ1NT
X1ZBTF9fS09OUV9OT1dSQVAgMjI2CiAjZGVmaW5lIENTU19WQUxfX0tPTlFfTk9STUFMIDIyNwog
I2RlZmluZSBDU1NfVkFMX19LT05RX0FST1VORF9GTE9BVFMgMjI4CisjZGVmaW5lIENTU19WQUxf
RU5BQkxFRCAyMjkKKyNkZWZpbmUgQ1NTX1ZBTF9ESVNBQkxFRCAyMzAKIAotI2RlZmluZSBDU1Nf
VkFMX1RPVEFMIDIyOQorI2RlZmluZSBDU1NfVkFMX1RPVEFMIDIzMQogI2VuZGlmCiAKSW5kZXg6
IGNzcy9jc3N2YWx1ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMv
a2h0bWwvY3NzL2Nzc3ZhbHVlcy5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC11
IC1wIC1yMS4zMSBjc3N2YWx1ZXMuaW4KLS0tIGNzcy9jc3N2YWx1ZXMuaW4JMTcgQXByIDIwMDMg
MTY6MDc6NDQgLTAwMDAJMS4zMQorKysgY3NzL2Nzc3ZhbHVlcy5pbgkxOCBBdWcgMjAwMyAyMTo1
MjozNSAtMDAwMApAQCAtMzE1LDYgKzMxNSwxMCBAQCB1bmRlcmxpbmUKICMgQ1NTX1BST1BfX0tP
TlFfRkxPV19NT0RFCiAta29ucS1ub3JtYWwKIC1rb25xLWFyb3VuZC1mbG9hdHMKKyMgQ1NTX1BS
T1BfX0tPTlFfVVNFUl9JTlBVVAorZW5hYmxlZAorZGlzYWJsZWQKKyNub25lCiAjCiAjIE5vdCBz
dXBwb3J0ZWQgQ1NTIDIgQXVyYWwgdmFsdWVzCiAjCkluZGV4OiBkb20vZG9tX2RvYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvZG9tL2RvbV9kb2MuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ5CmRpZmYgLXUgLXAgLXIxLjQ5IGRvbV9kb2MuY3Bw
Ci0tLSBkb20vZG9tX2RvYy5jcHAJMjEgSnVuIDIwMDMgMjM6MjY6NTEgLTAwMDAJMS40OQorKysg
ZG9tL2RvbV9kb2MuY3BwCTE4IEF1ZyAyMDAzIDIxOjUyOjM2IC0wMDAwCkBAIC00NzcsNiArNDc3
LDIwIEBAIHZvaWQgRG9jdW1lbnQ6OmxvYWRYTUwoIGNvbnN0IERPTVN0cmluZyAKICAgICBzdGF0
aWNfY2FzdDxEb2N1bWVudEltcGwqPiggaW1wbCApLT5sb2FkWE1MKCBzb3VyY2UgKTsKIH0KIAor
Ym9vbCBEb2N1bWVudDo6ZGVzaWduTW9kZSgpIGNvbnN0IHsKKyAgICBpZiAoIWltcGwpCisgICAg
ICAgIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsK
KworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEb2N1bWVudEltcGwqPiggaW1wbCApLT5kZXNpZ25N
b2RlKCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnNldERlc2lnbk1vZGUoYm9vbCBlbmFibGUpIHsK
KyAgICBpZiAoIWltcGwpCisgICAgICAgIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246
OklOVkFMSURfU1RBVEVfRVJSKTsKKworICAgIHN0YXRpY19jYXN0PERvY3VtZW50SW1wbCo+KCBp
bXBsICktPnNldERlc2lnbk1vZGUoIGVuYWJsZSApOworfQorCiBET01TdHJpbmcgRG9jdW1lbnQ6
OmNvbXBsZXRlVVJMKGNvbnN0IERPTVN0cmluZyYgdXJsKQogewogICAgIGlmICggIWltcGwgKSBy
ZXR1cm4gdXJsOwpJbmRleDogZG9tL2RvbV9kb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9t
ZS9rZGUva2RlbGlicy9raHRtbC9kb20vZG9tX2RvYy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjM1CmRpZmYgLXUgLXAgLXIxLjM1IGRvbV9kb2MuaAotLS0gZG9tL2RvbV9kb2MuaAkxNiBBdWcg
MjAwMyAxOTo0NTowNyAtMDAwMAkxLjM1CisrKyBkb20vZG9tX2RvYy5oCTE4IEF1ZyAyMDAzIDIx
OjUyOjM3IC0wMDAwCkBAIC04NzAsNiArODcwLDI2IEBAIHB1YmxpYzoKICAgICAgKiBvdGhlcndp
c2UgZmFsc2UuCiAgICAgICovCiAgICAgdm9pZCBsb2FkWE1MKCBjb25zdCBET01TdHJpbmcgJnNv
dXJjZSApOworICAgIAorICAgIC8qKgorICAgICAqIG5vdCBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBE
T00KKyAgICAgKgorICAgICAqIERvY3VtZW50cyBhcmUgcmVhZC1vbmx5IGJ5IGRlZmF1bHQsIGJ1
dCB0aGV5IGNhbiBiZSBtYWRlIGVkaXRhYmxlIGJ5CisgICAgICogZW50ZXJpbmcgImRlc2lnbiBt
b2RlIi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gd2hldGhlciB0aGlzIGRvY3VtZW50IGlzIGlu
IGRlc2lnbiBtb2RlLgorICAgICAqIEBzaW5jZSAzLjIKKyAgICAgKi8KKyAgICBib29sIGRlc2ln
bk1vZGUoKSBjb25zdDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBub3QgcGFydCBvZiB0aGUgb2Zm
aWNpYWwgRE9NCisgICAgICoKKyAgICAgKiBAcGFyYW0gZW5hYmxlIEBwIHRydWUgdG8gZW5hYmxl
IGRlc2lnbiBtb2RlLCBAcCBmYWxzZSB0byBkaXNhYmxlLgorICAgICAqIEBzZWUgZGVzaWduTW9k
ZQorICAgICAqIEBzaW5jZSAzLjIKKyAgICAgKi8KKyAgICB2b2lkIHNldERlc2lnbk1vZGUoYm9v
bCBlbmFibGUpOwogCiAgICAgLyoqCiAgICAgICogbm90IHBhcnQgb2YgdGhlIERPTQpJbmRleDog
ZG9tL2RvbV9lbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGli
cy9raHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQzCmRp
ZmYgLXUgLXAgLXIxLjQzIGRvbV9lbGVtZW50LmNwcAotLS0gZG9tL2RvbV9lbGVtZW50LmNwcAkz
MCBKdW4gMjAwMyAyMzo1Mjo1NCAtMDAwMAkxLjQzCisrKyBkb20vZG9tX2VsZW1lbnQuY3BwCTE4
IEF1ZyAyMDAzIDIxOjUyOjM3IC0wMDAwCkBAIC0zNDQsNiArMzQ0LDE4IEBAIENTU1N0eWxlRGVj
bGFyYXRpb24gRWxlbWVudDo6c3R5bGUoKQogICAgIHJldHVybiAwOwogfQogCitib29sIEVsZW1l
bnQ6OmNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsKKyAgICBpZighaW1wbCkgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihpbXBsKS0+Y29udGVudEVk
aXRhYmxlKCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6c2V0Q29udGVudEVkaXRhYmxlKGJvb2wgZW5h
YmxlZCkgeworICAgIGlmKCFpbXBsKQorICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhj
ZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7CisKKyAgICBzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCAqPihpbXBsKS0+c2V0Q29udGVudEVkaXRhYmxlKGVuYWJsZWQpOworfQorCiBib29sIEVsZW1l
bnQ6OmtodG1sVmFsaWRBdHRyTmFtZShjb25zdCBET01TdHJpbmcgJm5hbWUpCiB7CiAgICAgLy8g
Q2hlY2sgaWYgbmFtZSBpcyB2YWxpZApJbmRleDogZG9tL2RvbV9lbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvZG9tL2RvbV9lbGVtZW50Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtdSAtcCAtcjEuMzAgZG9tX2VsZW1lbnQuaAot
LS0gZG9tL2RvbV9lbGVtZW50LmgJMTYgQXVnIDIwMDMgMTk6NDU6MDcgLTAwMDAJMS4zMAorKysg
ZG9tL2RvbV9lbGVtZW50LmgJMTggQXVnIDIwMDMgMjE6NTI6MzggLTAwMDAKQEAgLTUzNiw2ICs1
MzYsMzggQEAgcHVibGljOgogICAgICAqIFRoZSBzdHlsZSBhdHRyaWJ1dGUKICAgICAgKi8KICAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uIHN0eWxlICggICk7CisgICAgCisgICAgLyoqCisgICAgICog
bm90IHBhcnQgb2YgdGhlIG9mZmljaWFsIERPTQorICAgICAqCisgICAgICogVGhpcyBtZXRob2Qg
d2lsbCBhbHdheXMgcmVmbGVjdCB0aGUgZWRpdGFiaWxpdHkgc2V0dGluZyBvZiB0aGlzCisgICAg
ICogZWxlbWVudCBhcyBzcGVjaWZpZWQgYnkgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgKHRoYXQgbWVh
bnMsIGluaGVyaXRlZCkKKyAgICAgKiBhc3NpZ25tZW50IHRvIGNvbnRlbnRFZGl0YWJsZSBvciB0
aGUgcmVzcGVjdGl2ZSBDU1MgcnVsZSwgZXZlbiBpZgorICAgICAqIGRlc2lnbiBtb2RlIGlzIGFj
dGl2ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gd2hldGhlciB0aGlzIGVsZW1lbnQgaXMgZWRp
dGFibGUuCisgICAgICogQHNpbmNlIDMuMgorICAgICAqIEBzZWUgc2V0Q29udGVudEVkaXRhYmxl
CisgICAgICovCisgICAgYm9vbCBjb250ZW50RWRpdGFibGUoKSBjb25zdDsKKworICAgIC8qKgor
ICAgICAqIG5vdCBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBET00KKyAgICAgKgorICAgICAqIFRoaXMg
ZWxlbWVudCBjYW4gYmUgbWFkZSBlZGl0YWJsZSBieSBzZXR0aW5nIGl0cyBjb250ZW50RWRpdGFi
bGUKKyAgICAgKiBwcm9wZXJ0eSB0byBAcCB0cnVlLiBUaGUgc2V0dGluZyB3aWxsIGJlIGluaGVy
aXRlZCB0byBpdHMgY2hpbGRyZW4KKyAgICAgKiBhcyB3ZWxsLgorICAgICAqCisgICAgICogU2V0
dGluZyBvciBjbGVhcmluZyBjb250ZW50RWRpdGFibGUgd2hlbiBkZXNpZ24gbW9kZSBpcyBhY3Rp
dmUgd2lsbAorICAgICAqIHRha2Ugbm8gZWZmZWN0LiBIb3dldmVyLCBpdHMgc3RhdHVzIHdpbGwg
c3RpbGwgYmUgcHJvcGFnYXRlZCB0byBhbGwKKyAgICAgKiBjaGlsZCBlbGVtZW50cy4KKyAgICAg
KgorICAgICAqIEBwYXJhbSBlbmFibGVkIEBwIHRydWUgdG8gbWFrZSB0aGlzIGVsZW1lbnQgZWRp
dGFibGUsIEBwIGZhbHNlCisgICAgICogb3RoZXJ3aXNlLgorICAgICAqIEBzZWUgRE9NOjpEb2N1
bWVudDo6ZGVzaWduTW9kZQorICAgICAqIEBzaW5jZSAzLjIKKyAgICAgKi8KKyAgICB2b2lkIHNl
dENvbnRlbnRFZGl0YWJsZShib29sIGVuYWJsZWQpOwogCiAgICAgLyoqCiAgICAgICogQGludGVy
bmFsCkluZGV4OiBkb20vZG9tX25vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tk
ZS9rZGVsaWJzL2todG1sL2RvbS9kb21fbm9kZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NDkKZGlmZiAtdSAtcCAtcjEuNDkgZG9tX25vZGUuY3BwCi0tLSBkb20vZG9tX25vZGUuY3BwCTMw
IE1hciAyMDAzIDIxOjQyOjEzIC0wMDAwCTEuNDkKKysrIGRvbS9kb21fbm9kZS5jcHAJMTggQXVn
IDIwMDMgMjE6NTI6MzggLTAwMDAKQEAgLTQxMyw3ICs0MTMsOCBAQCB2b2lkIE5vZGU6OmFwcGx5
Q2hhbmdlcygpCiB2b2lkIE5vZGU6OmdldEN1cnNvcihpbnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQg
Jl95LCBpbnQgJmhlaWdodCkKIHsKICAgICBpZiAoIWltcGwpIHRocm93IERPTUV4Y2VwdGlvbihE
T01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIpOwotICAgIGltcGwtPmdldEN1cnNvcihvZmZzZXQs
IF94LCBfeSwgaGVpZ2h0KTsKKyAgICBpbnQgZHVtbXk7CisgICAgaW1wbC0+Z2V0Q2FyZXQob2Zm
c2V0LCBmYWxzZSwgX3gsIF95LCBkdW1teSwgaGVpZ2h0KTsKIH0KIAogUVJlY3QgTm9kZTo6Z2V0
UmVjdCgpCkluZGV4OiBkb20vZG9tX25vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9r
ZGUva2RlbGlicy9raHRtbC9kb20vZG9tX25vZGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4z
NApkaWZmIC11IC1wIC1yMS4zNCBkb21fbm9kZS5oCi0tLSBkb20vZG9tX25vZGUuaAkxNiBBdWcg
MjAwMyAxOTo0NTowNyAtMDAwMAkxLjM0CisrKyBkb20vZG9tX25vZGUuaAkxOCBBdWcgMjAwMyAy
MTo1MjozOSAtMDAwMApAQCAtODY5LDYgKzg2OSw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBs
b25nIGluZGV4KCkgY29uc3Q7CiAgICAgUVN0cmluZyB0b0hUTUwoKTsKICAgICB2b2lkIGFwcGx5
Q2hhbmdlcygpOworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIHdpdGhvdXQgc3Vic3RpdHV0
aW9uIHNpbmNlIDMuMgorICAgICAqLwogICAgIHZvaWQgZ2V0Q3Vyc29yKGludCBvZmZzZXQsIGlu
dCAmX3gsIGludCAmX3ksIGludCAmaGVpZ2h0KTsKICAgICAvKioKICAgICAgKiBub3QgcGFydCBv
ZiB0aGUgRE9NLgpJbmRleDogaHRtbC9odG1scGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjMyNwpkaWZmIC11IC1wIC1yMS4zMjcgaHRtbHBhcnNlci5jcHAKLS0tIGh0
bWwvaHRtbHBhcnNlci5jcHAJMjQgSnVuIDIwMDMgMjE6NTY6MDQgLTAwMDAJMS4zMjcKKysrIGh0
bWwvaHRtbHBhcnNlci5jcHAJMTggQXVnIDIwMDMgMjE6NTI6NDEgLTAwMDAKQEAgLTEwNDgsNiAr
MTA0OCw3IEBAIE5vZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKICAgICAg
ICAgYnJlYWs7CiAvLyB0ZXh0CiAgICAgY2FzZSBJRF9URVhUOgorLy8gICAgICAgIGtkRGVidWco
NjAzNSkgPDwgIklEX1RFWFQ6IFwiIiA8PCBET01TdHJpbmcodC0+dGV4dCkuc3RyaW5nKCkgPDwg
IlwiIiA8PCBlbmRsOwogICAgICAgICBuID0gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRF9DT01NRU5UOgpJbmRleDogaHRtbC9odG1s
dG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwv
aHRtbC9odG1sdG9rZW5pemVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzMKZGlmZiAtdSAt
cCAtcjEuNzMgaHRtbHRva2VuaXplci5oCi0tLSBodG1sL2h0bWx0b2tlbml6ZXIuaAkxNiBBdWcg
MjAwMyAxOTo0NTowOCAtMDAwMAkxLjczCisrKyBodG1sL2h0bWx0b2tlbml6ZXIuaAkxOCBBdWcg
MjAwMyAyMTo1Mjo0MSAtMDAwMApAQCAtMzI5LDcgKzMyOSw3IEBAIHByb3RlY3RlZDoKICAgICBp
bnQgc2NyaXB0U3RhcnRMaW5lbm87CiAgICAgaW50IHRhZ1N0YXJ0TGluZW5vOwogCi0jZGVmaW5l
IENCVUZMRU4gMTQKKyNkZWZpbmUgQ0JVRkxFTiAyMAogICAgIGNoYXIgY0J1ZmZlcltDQlVGTEVO
KzJdOwogICAgIHVuc2lnbmVkIGludCBjQnVmZmVyUG9zOwogCkluZGV4OiBtaXNjL2h0bWxhdHRy
cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL21pc2MvaHRt
bGF0dHJzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcgaHRt
bGF0dHJzLmMKLS0tIG1pc2MvaHRtbGF0dHJzLmMJMTcgTWF5IDIwMDMgMjI6MTI6NTggLTAwMDAJ
MS4yNworKysgbWlzYy9odG1sYXR0cnMuYwkxOCBBdWcgMjAwMyAyMTo1Mjo0MiAtMDAwMApAQCAt
OCw3ICs4LDcgQEAgc3RydWN0IGF0dHJzIHsKICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgIGlu
dCBpZDsKIH07Ci0vKiBtYXhpbXVtIGtleSByYW5nZSA9IDg5OCwgZHVwbGljYXRlcyA9IDEgKi8K
Ky8qIG1heGltdW0ga2V5IHJhbmdlID0gNTQ1LCBkdXBsaWNhdGVzID0gMSAqLwogCiAjaWZkZWYg
X19HTlVDX18KIF9faW5saW5lCkBAIC0yMiwzOCArMjIsNDAgQEAgaGFzaF9hdHRyIChyZWdpc3Rl
ciBjb25zdCBjaGFyICpzdHIsIHJlZwogewogICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQg
YXNzb192YWx1ZXNbXSA9CiAgICAgewotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsICAg
MCwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCAgMjAsICAzNSwgICAwLAotICAgICAgMTk1LCAgIDAsICAzNSwgIDQwLCAgOTUsICAx
NSwgICA1LCAgNTUsICAgMCwgIDcwLAotICAgICAgICAwLCAgIDAsICA0NSwgICAwLCAxODUsICAy
MCwgIDE1LCAgNjUsICA4MCwgIDQwLAotICAgICAgIDEwLCAxNDAsICA0NSwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MiwgOTIyLCA5MjIsIDkyMiwgOTIyLAotICAgICAgOTIyLCA5MjIsIDkyMiwgOTIyLCA5MjIsIDky
MgorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsICAgMCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCAgNDUsICA5NSwgIDEw
LAorICAgICAgIDUwLCAgIDAsIDE1NSwgIDQwLCAxMjAsICA0NSwgICAwLCAgNzAsICAgMCwgIDU1
LAorICAgICAgICAwLCAgIDAsICAgMCwgICAwLCAgMjUsICAgNSwgICAwLCAxNTUsIDEyNSwgIDgw
LAorICAgICAgICAwLCAxMDUsICAxNSwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OCwgNTQ4
LAorICAgICAgNTQ4LCA1NDgsIDU0OCwgNTQ4LCA1NDgsIDU0OAogICAgIH07CiAgIHJlZ2lzdGVy
IGludCBodmFsID0gbGVuOwogCiAgIHN3aXRjaCAoaHZhbCkKICAgICB7CiAgICAgICBkZWZhdWx0
OgorICAgICAgY2FzZSAxNToKKyAgICAgICAgaHZhbCArPSBhc3NvX3ZhbHVlc1sodW5zaWduZWQg
Y2hhcilzdHJbMTRdXTsKICAgICAgIGNhc2UgMTQ6CiAgICAgICAgIGh2YWwgKz0gYXNzb192YWx1
ZXNbKHVuc2lnbmVkIGNoYXIpc3RyWzEzXV07CiAgICAgICBjYXNlIDEzOgpAQCAtOTUsMjc5ICs5
NywyMzMgQEAgZmluZEF0dHIgKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaQogewogICBl
bnVtCiAgICAgewotICAgICAgVE9UQUxfS0VZV09SRFMgPSAxNDQsCisgICAgICBUT1RBTF9LRVlX
T1JEUyA9IDE0NSwKICAgICAgIE1JTl9XT1JEX0xFTkdUSCA9IDIsCi0gICAgICBNQVhfV09SRF9M
RU5HVEggPSAxNCwKLSAgICAgIE1JTl9IQVNIX1ZBTFVFID0gMjQsCi0gICAgICBNQVhfSEFTSF9W
QUxVRSA9IDkyMQorICAgICAgTUFYX1dPUkRfTEVOR1RIID0gMTUsCisgICAgICBNSU5fSEFTSF9W
QUxVRSA9IDMsCisgICAgICBNQVhfSEFTSF9WQUxVRSA9IDU0NwogICAgIH07CiAKICAgc3RhdGlj
IGNvbnN0IHN0cnVjdCBhdHRycyB3b3JkbGlzdF9hdHRyW10gPQogICAgIHsKLSAgICAgIHsiY29s
cyIsIEFUVFJfQ09MU30sCi0gICAgICB7ImNpdGUiLCBBVFRSX0NJVEV9LAotICAgICAgeyJjb250
ZW50IiwgQVRUUl9DT05URU5UfSwKLSAgICAgIHsiYWx0IiwgQVRUUl9BTFR9LAotICAgICAgeyJv
bnNlbGVjdCIsIEFUVFJfT05TRUxFQ1R9LAotICAgICAgeyJ0ZXh0IiwgQVRUUl9URVhUfSwKLSAg
ICAgIHsidGl0bGUiLCBBVFRSX1RJVExFfSwKLSAgICAgIHsibGVmdCIsIEFUVFJfTEVGVH0sCi0g
ICAgICB7ImFjdGlvbiIsIEFUVFJfQUNUSU9OfSwKLSAgICAgIHsiZmFjZSIsIEFUVFJfRkFDRX0s
Ci0gICAgICB7ImxhYmVsIiwgQVRUUl9MQUJFTH0sCi0gICAgICB7Im9iamVjdCIsIEFUVFJfT0JK
RUNUfSwKICAgICAgIHsidG9wIiwgQVRUUl9UT1B9LAotICAgICAgeyJsYW5nIiwgQVRUUl9MQU5H
fSwKLSAgICAgIHsiY2xhc3MiLCBBVFRSX0NMQVNTfSwKLSAgICAgIHsiYXhpcyIsIEFUVFJfQVhJ
U30sCisgICAgICB7InRleHQiLCBBVFRSX1RFWFR9LAorICAgICAgeyJjb250ZW50IiwgQVRUUl9D
T05URU5UfSwKKyAgICAgIHsiY29scyIsIEFUVFJfQ09MU30sCiAgICAgICB7InNjb3BlIiwgQVRU
Ul9TQ09QRX0sCi0gICAgICB7ImxpbmsiLCBBVFRSX0xJTkt9LAotICAgICAgeyJvbmNsaWNrIiwg
QVRUUl9PTkNMSUNLfSwKLSAgICAgIHsiYWxpZ24iLCBBVFRSX0FMSUdOfSwKLSAgICAgIHsic2l6
ZSIsIEFUVFJfU0laRX0sCi0gICAgICB7InBsYWluIiwgQVRUUl9QTEFJTn0sCi0gICAgICB7ImFj
Y2VwdCIsIEFUVFJfQUNDRVBUfSwKLSAgICAgIHsic3BhbiIsIEFUVFJfU1BBTn0sCi0gICAgICB7
ImNvbHNwYW4iLCBBVFRSX0NPTFNQQU59LAotICAgICAgeyJuYW1lIiwgQVRUUl9OQU1FfSwKLSAg
ICAgIHsiYWxpbmsiLCBBVFRSX0FMSU5LfSwKLSAgICAgIHsicGFnZXgiLCBBVFRSX1BBR0VYfSwK
LSAgICAgIHsibm9zYXZlIiwgQVRUUl9OT1NBVkV9LAotICAgICAgeyJvbmZvY3VzIiwgQVRUUl9P
TkZPQ1VTfSwKLSAgICAgIHsiY2VsbHNwYWNpbmciLCBBVFRSX0NFTExTUEFDSU5HfSwKLSAgICAg
IHsidmxpbmsiLCBBVFRSX1ZMSU5LfSwKLSAgICAgIHsiY29tcGFjdCIsIEFUVFJfQ09NUEFDVH0s
Ci0gICAgICB7InZhbGlnbiIsIEFUVFJfVkFMSUdOfSwKLSAgICAgIHsib25jaGFuZ2UiLCBBVFRS
X09OQ0hBTkdFfSwKLSAgICAgIHsiY2hhbGxlbmdlIiwgQVRUUl9DSEFMTEVOR0V9LAotICAgICAg
eyJ1bmtub3duIiwgQVRUUl9VTktOT1dOfSwKLSAgICAgIHsidmFsdWUiLCBBVFRSX1ZBTFVFfSwK
LSAgICAgIHsidnNwYWNlIiwgQVRUUl9WU1BBQ0V9LAotICAgICAgeyJpc21hcCIsIEFUVFJfSVNN
QVB9LAotICAgICAgeyJzdHlsZSIsIEFUVFJfU1RZTEV9LAotICAgICAgeyJodG1sIiwgQVRUUl9I
VE1MfSwKLSAgICAgIHsic2hhcGUiLCBBVFRSX1NIQVBFfSwKLSAgICAgIHsiaHNwYWNlIiwgQVRU
Ul9IU1BBQ0V9LAorICAgICAgeyJvbnNlbGVjdCIsIEFUVFJfT05TRUxFQ1R9LAogICAgICAgeyJy
ZWwiLCBBVFRSX1JFTH0sCisgICAgICB7Im9ucmVzZXQiLCBBVFRSX09OUkVTRVR9LAogICAgICAg
eyJjb2xvciIsIEFUVFJfQ09MT1J9LAotICAgICAgeyJzY2hlbWUiLCBBVFRSX1NDSEVNRX0sCi0g
ICAgICB7Imxhbmd1YWdlIiwgQVRUUl9MQU5HVUFHRX0sCi0gICAgICB7ImNvZGUiLCBBVFRSX0NP
REV9LAotICAgICAgeyJ0eXBlIiwgQVRUUl9UWVBFfSwKLSAgICAgIHsiZW5jdHlwZSIsIEFUVFJf
RU5DVFlQRX0sCiAgICAgICB7InNyYyIsIEFUVFJfU1JDfSwKKyAgICAgIHsiYWx0IiwgQVRUUl9B
TFR9LAorICAgICAgeyJ0aXRsZSIsIEFUVFJfVElUTEV9LAorICAgICAgeyJzcGFuIiwgQVRUUl9T
UEFOfSwKKyAgICAgIHsiY2l0ZSIsIEFUVFJfQ0lURX0sCisgICAgICB7ImNvZGUiLCBBVFRSX0NP
REV9LAorICAgICAgeyJjb2xzcGFuIiwgQVRUUl9DT0xTUEFOfSwKKyAgICAgIHsic2l6ZSIsIEFU
VFJfU0laRX0sCisgICAgICB7ImNsYXNzIiwgQVRUUl9DTEFTU30sCisgICAgICB7ImFjY2VwdCIs
IEFUVFJfQUNDRVBUfSwKKyAgICAgIHsic2VsZWN0ZWQiLCBBVFRSX1NFTEVDVEVEfSwKKyAgICAg
IHsic3RhcnQiLCBBVFRSX1NUQVJUfSwKKyAgICAgIHsib25lcnJvciIsIEFUVFJfT05FUlJPUn0s
CiAgICAgICB7ImNsZWFyIiwgQVRUUl9DTEVBUn0sCisgICAgICB7InByb21wdCIsIEFUVFJfUFJP
TVBUfSwKKyAgICAgIHsibGFuZyIsIEFUVFJfTEFOR30sCisgICAgICB7InBhZ2V4IiwgQVRUUl9Q
QUdFWH0sCisgICAgICB7InBsYWluIiwgQVRUUl9QTEFJTn0sCisgICAgICB7ImNvb3JkcyIsIEFU
VFJfQ09PUkRTfSwKICAgICAgIHsiaWQiLCBBVFRSX0lEfSwKLSAgICAgIHsibXVsdGlwbGUiLCBB
VFRSX01VTFRJUExFfSwKKyAgICAgIHsibm9yZXNpemUiLCBBVFRSX05PUkVTSVpFfSwKKyAgICAg
IHsib25yZXNpemUiLCBBVFRSX09OUkVTSVpFfSwKKyAgICAgIHsiYXhpcyIsIEFUVFJfQVhJU30s
CiAgICAgICB7Im9ubG9hZCIsIEFUVFJfT05MT0FEfSwKLSAgICAgIHsiZm9yIiwgQVRUUl9GT1J9
LAotICAgICAgeyJ1c2VtYXAiLCBBVFRSX1VTRU1BUH0sCi0gICAgICB7Im9ucmVzZXQiLCBBVFRS
X09OUkVTRVR9LAotICAgICAgeyJvbnN1Ym1pdCIsIEFUVFJfT05TVUJNSVR9LAotICAgICAgeyJz
ZWxlY3RlZCIsIEFUVFJfU0VMRUNURUR9LAotICAgICAgeyJhdXRvY29tcGxldGUiLCBBVFRSX0FV
VE9DT01QTEVURX0sCi0gICAgICB7Im9ubW91c2VvdXQiLCBBVFRSX09OTU9VU0VPVVR9LAorICAg
ICAgeyJuYW1lIiwgQVRUUl9OQU1FfSwKKyAgICAgIHsiYWN0aW9uIiwgQVRUUl9BQ1RJT059LAor
ICAgICAgeyJ0eXBlIiwgQVRUUl9UWVBFfSwKKyAgICAgIHsib2JqZWN0IiwgQVRUUl9PQkpFQ1R9
LAorICAgICAgeyJsb25nZGVzYyIsIEFUVFJfTE9OR0RFU0N9LAogICAgICAgeyJyb3dzIiwgQVRU
Ul9ST1dTfSwKLSAgICAgIHsicGFnZXkiLCBBVFRSX1BBR0VZfSwKKyAgICAgIHsic3R5bGUiLCBB
VFRSX1NUWUxFfSwKKyAgICAgIHsidGFyZ2V0IiwgQVRUUl9UQVJHRVR9LAorICAgICAgeyJ6LWlu
ZGV4IiwgQVRUUl9aX0lOREVYfSwKKyAgICAgIHsibGluayIsIEFUVFJfTElOS30sCisgICAgICB7
ImVuY3R5cGUiLCBBVFRSX0VOQ1RZUEV9LAorICAgICAgeyJkaXIiLCBBVFRSX0RJUn0sCisgICAg
ICB7ImNvbXBhY3QiLCBBVFRSX0NPTVBBQ1R9LAorICAgICAgeyJzY3JvbGxpbmciLCBBVFRSX1ND
Uk9MTElOR30sCisgICAgICB7ImFsaWduIiwgQVRUUl9BTElHTn0sCisgICAgICB7ImRlY2xhcmUi
LCBBVFRSX0RFQ0xBUkV9LAorICAgICAgeyJvbmNsaWNrIiwgQVRUUl9PTkNMSUNLfSwKICAgICAg
IHsiZGF0YSIsIEFUVFJfREFUQX0sCi0gICAgICB7Im1heGxlbmd0aCIsIEFUVFJfTUFYTEVOR1RI
fSwKLSAgICAgIHsic3RhcnQiLCBBVFRSX1NUQVJUfSwKKyAgICAgIHsibGFiZWwiLCBBVFRSX0xB
QkVMfSwKKyAgICAgIHsicmV2IiwgQVRUUl9SRVZ9LAorICAgICAgeyJ3cmFwIiwgQVRUUl9XUkFQ
fSwKKyAgICAgIHsiaXNtYXAiLCBBVFRSX0lTTUFQfSwKKyAgICAgIHsibm93cmFwIiwgQVRUUl9O
T1dSQVB9LAorICAgICAgeyJsZWZ0IiwgQVRUUl9MRUZUfSwKKyAgICAgIHsicm93c3BhbiIsIEFU
VFJfUk9XU1BBTn0sCisgICAgICB7ImFsaW5rIiwgQVRUUl9BTElOS30sCisgICAgICB7ImNlbGxz
cGFjaW5nIiwgQVRUUl9DRUxMU1BBQ0lOR30sCisgICAgICB7ImNsYXNzaWQiLCBBVFRSX0NMQVNT
SUR9LAogICAgICAgeyJvbmFib3J0IiwgQVRUUl9PTkFCT1JUfSwKLSAgICAgIHsibG9uZ2Rlc2Mi
LCBBVFRSX0xPTkdERVNDfSwKLSAgICAgIHsiYWNjZXNza2V5IiwgQVRUUl9BQ0NFU1NLRVl9LAot
ICAgICAgeyJoZWlnaHQiLCBBVFRSX0hFSUdIVH0sCisgICAgICB7ImNvZGV0eXBlIiwgQVRUUl9D
T0RFVFlQRX0sCisgICAgICB7InNoYXBlIiwgQVRUUl9TSEFQRX0sCiAgICAgICB7ImJnY29sb3Ii
LCBBVFRSX0JHQ09MT1J9LAotICAgICAgeyJyZXYiLCBBVFRSX1JFVn0sCi0gICAgICB7InNjcm9s
bGluZyIsIEFUVFJfU0NST0xMSU5HfSwKLSAgICAgIHsiei1pbmRleCIsIEFUVFJfWl9JTkRFWH0s
Ci0gICAgICB7Im5vcmVzaXplIiwgQVRUUl9OT1JFU0laRX0sCi0gICAgICB7Im9ucmVzaXplIiwg
QVRUUl9PTlJFU0laRX0sCi0gICAgICB7Im9ubW91c2V1cCIsIEFUVFJfT05NT1VTRVVQfSwKKyAg
ICAgIHsiaHRtbCIsIEFUVFJfSFRNTH0sCisgICAgICB7Im5vc2F2ZSIsIEFUVFJfTk9TQVZFfSwK
KyAgICAgIHsiZm9yIiwgQVRUUl9GT1J9LAorICAgICAgeyJoc3BhY2UiLCBBVFRSX0hTUEFDRX0s
CiAgICAgICB7InJ1bGVzIiwgQVRUUl9SVUxFU30sCi0gICAgICB7ImNsYXNzaWQiLCBBVFRSX0NM
QVNTSUR9LAorICAgICAgeyJ2c3BhY2UiLCBBVFRSX1ZTUEFDRX0sCisgICAgICB7InBhZ2V5Iiwg
QVRUUl9QQUdFWX0sCisgICAgICB7InNjaGVtZSIsIEFUVFJfU0NIRU1FfSwKKyAgICAgIHsib3Zl
cnNyYyIsIEFUVFJfT1ZFUlNSQ30sCisgICAgICB7Im1lZGlhIiwgQVRUUl9NRURJQX0sCisgICAg
ICB7ImJvcmRlciIsIEFUVFJfQk9SREVSfSwKKyAgICAgIHsiZGF0ZXRpbWUiLCBBVFRSX0RBVEVU
SU1FfSwKKyAgICAgIHsiY2hhciIsIEFUVFJfQ0hBUn0sCisgICAgICB7InZlcnNpb24iLCBBVFRS
X1ZFUlNJT059LAorICAgICAgeyJjaGFyc2V0IiwgQVRUUl9DSEFSU0VUfSwKICAgICAgIHsiY29k
ZWJhc2UiLCBBVFRSX0NPREVCQVNFfSwKLSAgICAgIHsiYWJiciIsIEFUVFJfQUJCUn0sCi0gICAg
ICB7InBsdWdpbnBhZ2UiLCBBVFRSX1BMVUdJTlBBR0V9LAotICAgICAgeyJ0YXJnZXQiLCBBVFRS
X1RBUkdFVH0sCisgICAgICB7ImZhY2UiLCBBVFRSX0ZBQ0V9LAorICAgICAgeyJ0b3BtYXJnaW4i
LCBBVFRSX1RPUE1BUkdJTn0sCisgICAgICB7Im9ua2V5cHJlc3MiLCBBVFRSX09OS0VZUFJFU1N9
LAorICAgICAgeyJvbmNoYW5nZSIsIEFUVFJfT05DSEFOR0V9LAorICAgICAgeyJjaGFsbGVuZ2Ui
LCBBVFRSX0NIQUxMRU5HRX0sCisgICAgICB7Im5vc2hhZGUiLCBBVFRSX05PU0hBREV9LAorICAg
ICAgeyJtZXRob2QiLCBBVFRSX01FVEhPRH0sCiAgICAgICB7InByb2ZpbGUiLCBBVFRSX1BST0ZJ
TEV9LAorICAgICAgeyJyZWFkb25seSIsIEFUVFJfUkVBRE9OTFl9LAorICAgICAgeyJkZWZlciIs
IEFUVFJfREVGRVJ9LAorICAgICAgeyJib3JkZXJjb2xvciIsIEFUVFJfQk9SREVSQ09MT1J9LAor
ICAgICAgeyJ0YWJpbmRleCIsIEFUVFJfVEFCSU5ERVh9LAorICAgICAgeyJ2bGluayIsIEFUVFJf
VkxJTkt9LAorICAgICAgeyJiZ3Byb3BlcnRpZXMiLCBBVFRSX0JHUFJPUEVSVElFU30sCisgICAg
ICB7ImNlbGxwYWRkaW5nIiwgQVRUUl9DRUxMUEFERElOR30sCisgICAgICB7ImhlYWRlcnMiLCBB
VFRSX0hFQURFUlN9LAogICAgICAgeyJvbnVubG9hZCIsIEFUVFJfT05VTkxPQUR9LAorICAgICAg
eyJhY2Nlc3NrZXkiLCBBVFRSX0FDQ0VTU0tFWX0sCisgICAgICB7ImNvbnRlbnRlZGl0YWJsZSIs
IEFUVFJfQ09OVEVOVEVESVRBQkxFfSwKKyAgICAgIHsidmFsaWduIiwgQVRUUl9WQUxJR059LAor
ICAgICAgeyJtdWx0aXBsZSIsIEFUVFJfTVVMVElQTEV9LAorICAgICAgeyJhYmJyIiwgQVRUUl9B
QkJSfSwKKyAgICAgIHsidXNlbWFwIiwgQVRUUl9VU0VNQVB9LAorICAgICAgeyJjaGVja2VkIiwg
QVRUUl9DSEVDS0VEfSwKKyAgICAgIHsibWF4bGVuZ3RoIiwgQVRUUl9NQVhMRU5HVEh9LAorICAg
ICAgeyJoaWRkZW4iLCBBVFRSX0hJRERFTn0sCisgICAgICB7ImF1dG9jb21wbGV0ZSIsIEFUVFJf
QVVUT0NPTVBMRVRFfSwKICAgICAgIHsib25ibHVyIiwgQVRUUl9PTkJMVVJ9LAotICAgICAgeyJ3
cmFwIiwgQVRUUl9XUkFQfSwKLSAgICAgIHsibm93cmFwIiwgQVRUUl9OT1dSQVB9LAotICAgICAg
eyJ0YWJpbmRleCIsIEFUVFJfVEFCSU5ERVh9LAotICAgICAgeyJwbHVnaW5zcGFnZSIsIEFUVFJf
UExVR0lOU1BBR0V9LAotICAgICAgeyJjaGFyIiwgQVRUUl9DSEFSfSwKLSAgICAgIHsibWVkaWEi
LCBBVFRSX01FRElBfSwKLSAgICAgIHsidmVyc2lvbiIsIEFUVFJfVkVSU0lPTn0sCi0gICAgICB7
Im9uZGJsY2xpY2siLCBBVFRSX09OREJMQ0xJQ0t9LAotICAgICAgeyJvbmtleXVwIiwgQVRUUl9P
TktFWVVQfSwKKyAgICAgIHsiYWNjZXB0LWNoYXJzZXQiLCBBVFRSX0FDQ0VQVF9DSEFSU0VUfSwK
ICAgICAgIHsiZnJhbWUiLCBBVFRSX0ZSQU1FfSwKLSAgICAgIHsib25tb3VzZW1vdmUiLCBBVFRS
X09OTU9VU0VNT1ZFfSwKLSAgICAgIHsicm93c3BhbiIsIEFUVFJfUk9XU1BBTn0sCisgICAgICB7
Im9uZGJsY2xpY2siLCBBVFRSX09OREJMQ0xJQ0t9LAorICAgICAgeyJkaXNhYmxlZCIsIEFUVFJf
RElTQUJMRUR9LAorICAgICAgeyJ3aWR0aCIsIEFUVFJfV0lEVEh9LAogICAgICAgeyJocmVmIiwg
QVRUUl9IUkVGfSwKICAgICAgIHsibm9ocmVmIiwgQVRUUl9OT0hSRUZ9LAotICAgICAgeyJub3No
YWRlIiwgQVRUUl9OT1NIQURFfSwKLSAgICAgIHsiZGF0ZXRpbWUiLCBBVFRSX0RBVEVUSU1FfSwK
LSAgICAgIHsiaHR0cC1lcXVpdiIsIEFUVFJfSFRUUF9FUVVJVn0sCi0gICAgICB7ImNoYXJzZXQi
LCBBVFRSX0NIQVJTRVR9LAotICAgICAgeyJjaGVja2VkIiwgQVRUUl9DSEVDS0VEfSwKLSAgICAg
IHsidmlzaWJpbGl0eSIsIEFUVFJfVklTSUJJTElUWX0sCi0gICAgICB7IndpZHRoIiwgQVRUUl9X
SURUSH0sCi0gICAgICB7InByb21wdCIsIEFUVFJfUFJPTVBUfSwKLSAgICAgIHsidmFsdWV0eXBl
IiwgQVRUUl9WQUxVRVRZUEV9LAotICAgICAgeyJjaGFyb2ZmIiwgQVRUUl9DSEFST0ZGfSwKLSAg
ICAgIHsibWV0aG9kIiwgQVRUUl9NRVRIT0R9LAotICAgICAgeyJocmVmbGFuZyIsIEFUVFJfSFJF
RkxBTkd9LAotICAgICAgeyJsZWZ0bWFyZ2luIiwgQVRUUl9MRUZUTUFSR0lOfSwKLSAgICAgIHsi
ZGlyIiwgQVRUUl9ESVJ9LAotICAgICAgeyJ0b3BtYXJnaW4iLCBBVFRSX1RPUE1BUkdJTn0sCisg
ICAgICB7InN0YW5kYnkiLCBBVFRSX1NUQU5EQll9LAorICAgICAgeyJ1bmtub3duIiwgQVRUUl9V
TktOT1dOfSwKKyAgICAgIHsib25rZXlkb3duIiwgQVRUUl9PTktFWURPV059LAorICAgICAgeyJ2
YWx1ZSIsIEFUVFJfVkFMVUV9LAorICAgICAgeyJoZWlnaHQiLCBBVFRSX0hFSUdIVH0sCisgICAg
ICB7Im9uZm9jdXMiLCBBVFRSX09ORk9DVVN9LAorICAgICAgeyJsYW5ndWFnZSIsIEFUVFJfTEFO
R1VBR0V9LAorICAgICAgeyJwbHVnaW5wYWdlIiwgQVRUUl9QTFVHSU5QQUdFfSwKKyAgICAgIHsi
b25rZXl1cCIsIEFUVFJfT05LRVlVUH0sCisgICAgICB7InBsdWdpbnNwYWdlIiwgQVRUUl9QTFVH
SU5TUEFHRX0sCiAgICAgICB7Im9ubW91c2Vkb3duIiwgQVRUUl9PTk1PVVNFRE9XTn0sCisgICAg
ICB7Im9uc3VibWl0IiwgQVRUUl9PTlNVQk1JVH0sCisgICAgICB7ImxlZnRtYXJnaW4iLCBBVFRS
X0xFRlRNQVJHSU59LAorICAgICAgeyJvbm1vdXNlb3ZlciIsIEFUVFJfT05NT1VTRU9WRVJ9LAog
ICAgICAgeyJhcmNoaXZlIiwgQVRUUl9BUkNISVZFfSwKLSAgICAgIHsiY29kZXR5cGUiLCBBVFRS
X0NPREVUWVBFfSwKLSAgICAgIHsiY29vcmRzIiwgQVRUUl9DT09SRFN9LAotICAgICAgeyJkZWNs
YXJlIiwgQVRUUl9ERUNMQVJFfSwKLSAgICAgIHsiZGVmZXIiLCBBVFRSX0RFRkVSfSwKKyAgICAg
IHsib25tb3VzZXVwIiwgQVRUUl9PTk1PVVNFVVB9LAorICAgICAgeyJvbm1vdXNlb3V0IiwgQVRU
Ul9PTk1PVVNFT1VUfSwKKyAgICAgIHsiaHJlZmxhbmciLCBBVFRSX0hSRUZMQU5HfSwKKyAgICAg
IHsib25tb3VzZW1vdmUiLCBBVFRSX09OTU9VU0VNT1ZFfSwKICAgICAgIHsicGx1Z2ludXJsIiwg
QVRUUl9QTFVHSU5VUkx9LAotICAgICAgeyJhY2NlcHQtY2hhcnNldCIsIEFUVFJfQUNDRVBUX0NI
QVJTRVR9LAotICAgICAgeyJvbm1vdXNlb3ZlciIsIEFUVFJfT05NT1VTRU9WRVJ9LAotICAgICAg
eyJzdGFuZGJ5IiwgQVRUUl9TVEFOREJZfSwKLSAgICAgIHsib25rZXlkb3duIiwgQVRUUl9PTktF
WURPV059LAotICAgICAgeyJvbmtleXByZXNzIiwgQVRUUl9PTktFWVBSRVNTfSwKLSAgICAgIHsi
b3ZlcnNyYyIsIEFUVFJfT1ZFUlNSQ30sCi0gICAgICB7ImRpc2FibGVkIiwgQVRUUl9ESVNBQkxF
RH0sCi0gICAgICB7ImhpZGRlbiIsIEFUVFJfSElEREVOfSwKLSAgICAgIHsiY2VsbHBhZGRpbmci
LCBBVFRSX0NFTExQQURESU5HfSwKLSAgICAgIHsiaGVhZGVycyIsIEFUVFJfSEVBREVSU30sCi0g
ICAgICB7InJlYWRvbmx5IiwgQVRUUl9SRUFET05MWX0sCi0gICAgICB7Im9uZXJyb3IiLCBBVFRS
X09ORVJST1J9LAorICAgICAgeyJ2YWx1ZXR5cGUiLCBBVFRSX1ZBTFVFVFlQRX0sCiAgICAgICB7
InN1bW1hcnkiLCBBVFRSX1NVTU1BUll9LAotICAgICAgeyJiZ3Byb3BlcnRpZXMiLCBBVFRSX0JH
UFJPUEVSVElFU30sCi0gICAgICB7Im1hcmdpbmhlaWdodCIsIEFUVFJfTUFSR0lOSEVJR0hUfSwK
KyAgICAgIHsiaHR0cC1lcXVpdiIsIEFUVFJfSFRUUF9FUVVJVn0sCisgICAgICB7ImZyYW1lYm9y
ZGVyIiwgQVRUUl9GUkFNRUJPUkRFUn0sCiAgICAgICB7ImJhY2tncm91bmQiLCBBVFRSX0JBQ0tH
Uk9VTkR9LAotICAgICAgeyJib3JkZXIiLCBBVFRSX0JPUkRFUn0sCiAgICAgICB7Im1hcmdpbndp
ZHRoIiwgQVRUUl9NQVJHSU5XSURUSH0sCi0gICAgICB7ImJvcmRlcmNvbG9yIiwgQVRUUl9CT1JE
RVJDT0xPUn0sCi0gICAgICB7ImZyYW1lYm9yZGVyIiwgQVRUUl9GUkFNRUJPUkRFUn0KKyAgICAg
IHsiY2hhcm9mZiIsIEFUVFJfQ0hBUk9GRn0sCisgICAgICB7InZpc2liaWxpdHkiLCBBVFRSX1ZJ
U0lCSUxJVFl9LAorICAgICAgeyJtYXJnaW5oZWlnaHQiLCBBVFRSX01BUkdJTkhFSUdIVH0KICAg
ICB9OwogCiAgIHN0YXRpYyBjb25zdCBzaG9ydCBsb29rdXBbXSA9CiAgICAgeworICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAgMCwgICAgMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAg
ICAyLCAgIC0xLCAgICAzLCAgICA0LCAgIC0xLCAgIC0xLCAgICA1LAorICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAgNiwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgIDcsICAgLTEsICAgLTEsCisgICAgICAgICA4LCAgIC0xLCAg
IC0xLCAgICA5LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAxMCwgICAtMSwgICAx
MSwgICAtMSwgICAtMSwgICAtMSwgICAxMiwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgMTMsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIDE0LCAgIC0xLCAgIC0xLCAg
IDE1LCAgIC0xLCAgIDE2LCAgIDE3LCAgIDE4LAorICAgICAgICAtMSwgICAxOSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgMjAsICAgLTEsICAgMjEsICAgLTEs
ICAgLTEsICAgMjIsICAgMjMsICAgLTEsCisgICAgICAgIC0xLCAgIDI0LCAgIDI1LCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIDI2LAorICAgICAgICAyNywgICAyOCwgLTI0OCwgICAzMSwgICAt
MSwgICAzMiwgLTExNiwgICAtMiwKKyAgICAgICAgMzMsICAgLTEsICAgMzQsICAgLTEsICAgLTEs
ICAgMzUsICAgLTEsICAgMzYsCisgICAgICAgIC0xLCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAg
IDQxLCAgIC0xLCAgIDQyLAorICAgICAgICAtMSwgICAtMSwgICA0MywgICA0NCwgICAtMSwgICAt
MSwgICAtMSwgICA0NSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgNDYsICAgNDcsCisgICAgICAgIC0xLCAgIDQ4LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IDQ5LCAgIC0xLAorICAgICAgICA1MCwgICA1MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwKKyAgICAgICAgLTEsICAgNTIsICAgNTMsICAgNTQsICAgNTUsICAgLTEsICAgLTEs
ICAgNTYsCisgICAgICAgIC0xLCAgIC0xLCAgIDU3LCAgIC0xLCAgIC0xLCAgIDU4LCAgIDU5LCAg
IDYwLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA2MSwgICA2MiwgICAtMSwgICA2
MywKKyAgICAgICAgLTEsICAgNjQsICAgLTEsICAgNjUsICAgLTEsICAgNjYsICAgLTEsICAgNjcs
CisgICAgICAgIC0xLCAgIC0xLCAgIDY4LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDY5LCAgIDcwLAor
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICA3MSwgICA3MiwgICA3MywgICAtMSwgICAtMSwKKyAg
ICAgICAgNzQsICAgNzUsICAgLTEsICAgNzYsICAgNzcsICAgLTEsICAgLTEsICAgNzgsCisgICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDc5LCAgIDgwLCAgIDgxLCAgIC0xLAorICAgICAg
ICAtMSwgICAtMSwgICAtMSwgICA4MiwgICA4MywgICAtMSwgICAtMSwgICA4NCwKKyAgICAgICAg
ODUsICAgLTEsICAgLTEsICAgODYsICAgLTEsICAgLTEsICAgLTEsICAgODcsCisgICAgICAgIDg4
LCAgIDg5LCAgIC0xLCAgIDkwLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwg
ICA5MSwgICAtMSwgICA5MiwgICAtMSwgICA5MywgICAtMSwgICA5NCwKKyAgICAgICAgLTEsICAg
LTEsICAgLTEsICAgOTUsICAgOTYsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0x
LCAgIDk3LCAgIDk4LCAgIDk5LCAgMTAwLCAgIC0xLCAgMTAxLAorICAgICAgIDEwMiwgICAtMSwg
IDEwMywgIDEwNCwgICAtMSwgIDEwNSwgICAtMSwgIDEwNiwKKyAgICAgICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAxMDcsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgMTA4LCAgIC0x
LCAgIC0xLCAgMTA5LCAgMTEwLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgIDExMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAxMTIsICAg
LTEsICAxMTMsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgMTE0LCAgIC0xLCAgMTE1LCAgMTE2
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgIDExNywgICAtMSwgIDExOCwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgMTE5LCAgMTIwLCAgMTIx
LCAgMTIyLCAgIC0xLCAgMTIzLAorICAgICAgICAtMSwgIDEyNCwgICAtMSwgICAtMSwgICAtMSwg
IDEyNSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTI2LCAgIC0x
LCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgIDEyNywgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwKKyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAxMjgsCisgICAgICAgMTI5LCAgMTMwLCAgIC0xLCAgMTMxLCAgMTMyLCAgIC0xLCAgIC0x
LCAgIC0xLAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwKKyAgICAgICAgLTEsICAxMzMsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsCisgICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTM0LCAgIC0x
LAorICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
KyAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisg
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTM1LCAgIC0xLCAgIC0xLAorICAg
ICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDEzNiwKKyAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTM3LCAgIC0xLCAgIC0xLCAgMTM4LAorICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKKyAgICAgICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAorICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDEzOSwgICAtMSwKICAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCisgICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgMTQwLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgIDAsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgICAxLCAg
IC0xLCAgIC0xLCAgICAyLCAgICAzLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAg
NCwgICAgNSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgIDYsICAgLTEs
ICAgLTEsICAgLTEsICAgIDcsICAgLTEsCi0gICAgICAgICA4LCAgIC0xLCAgIC0xLCAgICA5LCAg
IDEwLCAgIDExLCAgIC0xLCAgIDEyLAotICAgICAgICAxMywgICAxNCwgICAtMSwgICAtMSwgICAt
MSwgICAxNSwgICAxNiwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgMTcsICAgLTEsICAgLTEs
ICAgMTgsICAgLTEsICAgLTEsCi0gICAgICAgIDE5LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDIwLCAg
IDIxLCAgIDIyLCAgIC0xLAotICAgICAgICAtMSwgICAyMywgICAtMSwgICAtMSwgICAyNCwgICAt
MSwgICAyNSwgICAyNiwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwKLSAgICAgICAgMjcsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgMjgs
ICAgMjksCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgMzAs
Ci0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIDMxLCAgIC0xLCAgIDMyLCAgIC0xLCAgIC0xLAot
ICAgICAgICAtMSwgICAzMywgICAtMSwgICAzNCwgICAzNSwgICAtMSwgICAtMSwgICAzNiwKLSAg
ICAgICAgLTEsICAgLTEsICAgMzcsICAgMzgsICAgLTEsICAgLTEsICAgLTEsICAgMzksCi0gICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDQwLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAg
ICA0MSwgICA0MiwgICA0MywgICAtMSwgICA0NCwgICAtMSwgICA0NSwgICA0NiwKLSAgICAgICAg
LTEsICAgNDcsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgNDgsCi0gICAgICAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDQ5LCAgIC0xLCAgIC0xLCAgIDUwLAotICAgICAgICA1MSwg
ICAtMSwgICA1MiwgICAtMSwgICA1MywgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAg
LTEsICAgNTQsICAgLTEsICAgLTEsICAgNTUsICAgLTEsICAgNTYsCi0gICAgICAgIC0xLCAgIC0x
LCAgIDU3LCAgIDU4LCAgIDU5LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICA2MCwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAg
NjEsICAgLTEsICAgLTEsICAgNjIsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIDYzLCAgIDY0
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIDY1LCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICA2NiwgICA2NywgICAtMSwgICA2OCwgICA2OSwKLSAgICAgICAgNzAsICAgLTEsICAgNzEsICAg
NzIsICAgNzMsICAgNzQsICAgLTEsICAgLTEsCi0gICAgICAgIDc1LCAtNDI3LCAgIDc4LCAgIDc5
LCAgIC0xLCAgIDgwLCAgIDgxLCAgIDgyLAotICAgICAgICA4MywgICA4NCwgIC02OCwgICAtMiwg
ICAtMSwgICAtMSwgICAtMSwgICA4NSwKLSAgICAgICAgODYsICAgLTEsICAgLTEsICAgODcsICAg
LTEsICAgLTEsICAgODgsICAgLTEsCi0gICAgICAgIDg5LCAgIC0xLCAgIDkwLCAgIC0xLCAgIC0x
LCAgIDkxLCAgIC0xLCAgIC0xLAotICAgICAgICA5MiwgICA5MywgICAtMSwgICA5NCwgICAtMSwg
ICAtMSwgICA5NSwgICAtMSwKLSAgICAgICAgOTYsICAgLTEsICAgLTEsICAgOTcsICAgOTgsICAg
OTksICAgLTEsICAxMDAsCi0gICAgICAgIC0xLCAgMTAxLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAxMDIsICAxMDMsICAgLTEsICAxMDQsICAgLTEsICAx
MDUsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLAotICAgICAgIDEwNiwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwKLSAgICAgICAxMDcsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxMDgsICAxMDksICAg
LTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTEwLCAgIC0x
LAotICAgICAgICAtMSwgIDExMSwgICAtMSwgICAtMSwgICAtMSwgIDExMiwgICAtMSwgIDExMywK
LSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxMTQsICAgLTEsCi0g
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTE1LCAgMTE2LAotICAg
ICAgICAtMSwgIDExNywgIDExOCwgIDExOSwgICAtMSwgICAtMSwgIDEyMCwgIDEyMSwKLSAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgMTIyLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgIDEy
MywgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDEyNCwgICAtMSwgIDEyNSwKLSAgICAgICAxMjYs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAxMjcsCi0gICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAt
MSwgIDEyOCwgICAtMSwgIDEyOSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgMTMwLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAxMzEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgIDEzMiwgIDEzMywgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDEzNCwgICAt
MSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgMTM1LCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt
MSwgICAtMSwKLSAgICAgICAgLTEsICAxMzYsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs
ICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg
IC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDEzNywgICAtMSwgICAt
MSwKLSAgICAgICAgLTEsICAgLTEsICAxMzgsICAgLTEsICAgLTEsICAxMzksICAxNDAsICAgLTEs
Ci0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAor
ICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE0MSwgIDE0MiwgICAtMSwgICAtMSwKKyAg
ICAgICAxNDMsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAg
ICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgIDE0MSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg
ICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIDE0MiwgICAtMSwgICAtMSwg
ICAtMSwKLSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg
LTEsCi0gICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x
LAotICAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwK
LSAgICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0g
ICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAg
ICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAgLTEs
ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCi0gICAgICAgIC0xLCAgIC0xLCAg
IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAotICAgICAgICAtMSwgICAtMSwgICAt
MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKLSAgICAgICAgLTEsICAxNDMKKyAgICAg
ICAgLTEsICAgLTEsICAgLTEsICAxNDQKICAgICB9OwogCiAgIGlmIChsZW4gPD0gTUFYX1dPUkRf
TEVOR1RIICYmIGxlbiA+PSBNSU5fV09SRF9MRU5HVEgpCkBAIC00NDIsNiArMzk4LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdHRyTGlzdFtdID0gewogICAgICJDT0xTUEFOIiwKICAg
ICAiQ09NUEFDVCIsCiAgICAgIkNPTlRFTlQiLAorICAgICJDT05URU5URURJVEFCTEUiLAogICAg
ICJDT09SRFMiLAogICAgICJEQVRBIiwKICAgICAiREFURVRJTUUiLApAQCAtNTU2LDQgKzUxMyw0
IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXR0ckxpc3RbXSA9IHsKIERPTTo6RE9NU3Ry
aW5nIEtERV9OT19FWFBPUlQgZ2V0QXR0ck5hbWUodW5zaWduZWQgc2hvcnQgaWQpCiB7CiAgICAg
cmV0dXJuIGF0dHJMaXN0W2lkLTFdOwotfQorfTsKSW5kZXg6IG1pc2MvaHRtbGF0dHJzLmdwZXJm
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL21pc2MvaHRtbGF0
dHJzLmdwZXJmLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2IGh0
bWxhdHRycy5ncGVyZgotLS0gbWlzYy9odG1sYXR0cnMuZ3BlcmYJMTUgRGVjIDIwMDEgMTc6Mjg6
MTAgLTAwMDAJMS4xNgorKysgbWlzYy9odG1sYXR0cnMuZ3BlcmYJMTggQXVnIDIwMDMgMjE6NTI6
NDIgLTAwMDAKQEAgLTQ0LDYgKzQ0LDcgQEAgY29scywgQVRUUl9DT0xTCiBjb2xzcGFuLCBBVFRS
X0NPTFNQQU4KIGNvbXBhY3QsIEFUVFJfQ09NUEFDVAogY29udGVudCwgQVRUUl9DT05URU5UCitj
b250ZW50ZWRpdGFibGUsIEFUVFJfQ09OVEVOVEVESVRBQkxFCiBjb29yZHMsIEFUVFJfQ09PUkRT
CiBkYXRhLCBBVFRSX0RBVEEKIGRhdGV0aW1lLCBBVFRSX0RBVEVUSU1FCkluZGV4OiBtaXNjL2h0
bWxhdHRycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL21p
c2MvaHRtbGF0dHJzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtdSAtcCAtcjEu
MTggaHRtbGF0dHJzLmgKLS0tIG1pc2MvaHRtbGF0dHJzLmgJMzAgRGVjIDIwMDEgMTg6MDQ6MTYg
LTAwMDAJMS4xOAorKysgbWlzYy9odG1sYXR0cnMuaAkxOCBBdWcgMjAwMyAyMTo1Mjo0MiAtMDAw
MApAQCAtNDMsMTE2ICs0MywxMTcgQEAgdXNpbmcgbmFtZXNwYWNlIERPTTsKICNkZWZpbmUgQVRU
Ul9DT0xTUEFOIDMzCiAjZGVmaW5lIEFUVFJfQ09NUEFDVCAzNAogI2RlZmluZSBBVFRSX0NPTlRF
TlQgMzUKLSNkZWZpbmUgQVRUUl9DT09SRFMgMzYKLSNkZWZpbmUgQVRUUl9EQVRBIDM3Ci0jZGVm
aW5lIEFUVFJfREFURVRJTUUgMzgKLSNkZWZpbmUgQVRUUl9ERUNMQVJFIDM5Ci0jZGVmaW5lIEFU
VFJfREVGRVIgNDAKLSNkZWZpbmUgQVRUUl9ESVIgNDEKLSNkZWZpbmUgQVRUUl9ESVNBQkxFRCA0
MgotI2RlZmluZSBBVFRSX0VOQ1RZUEUgNDMKLSNkZWZpbmUgQVRUUl9GQUNFIDQ0Ci0jZGVmaW5l
IEFUVFJfRk9SIDQ1Ci0jZGVmaW5lIEFUVFJfRlJBTUUgNDYKLSNkZWZpbmUgQVRUUl9GUkFNRUJP
UkRFUiA0NwotI2RlZmluZSBBVFRSX0hFQURFUlMgNDgKLSNkZWZpbmUgQVRUUl9IRUlHSFQgNDkK
LSNkZWZpbmUgQVRUUl9ISURERU4gNTAKLSNkZWZpbmUgQVRUUl9IUkVGIDUxCi0jZGVmaW5lIEFU
VFJfSFJFRkxBTkcgNTIKLSNkZWZpbmUgQVRUUl9IU1BBQ0UgNTMKLSNkZWZpbmUgQVRUUl9IVE1M
IDU0Ci0jZGVmaW5lIEFUVFJfSFRUUF9FUVVJViA1NQotI2RlZmluZSBBVFRSX0lEIDU2Ci0jZGVm
aW5lIEFUVFJfSVNNQVAgNTcKLSNkZWZpbmUgQVRUUl9MQUJFTCA1OAotI2RlZmluZSBBVFRSX0xB
TkcgNTkKLSNkZWZpbmUgQVRUUl9MQU5HVUFHRSA2MAotI2RlZmluZSBBVFRSX0xFRlQgNjEKLSNk
ZWZpbmUgQVRUUl9MRUZUTUFSR0lOIDYyCi0jZGVmaW5lIEFUVFJfTElOSyA2MwotI2RlZmluZSBB
VFRSX0xPTkdERVNDIDY0Ci0jZGVmaW5lIEFUVFJfTUFSR0lOSEVJR0hUIDY1Ci0jZGVmaW5lIEFU
VFJfTUFSR0lOV0lEVEggNjYKLSNkZWZpbmUgQVRUUl9NQVhMRU5HVEggNjcKLSNkZWZpbmUgQVRU
Ul9NRURJQSA2OAotI2RlZmluZSBBVFRSX01FVEhPRCA2OQotI2RlZmluZSBBVFRSX01VTFRJUExF
IDcwCi0jZGVmaW5lIEFUVFJfTkFNRSA3MQotI2RlZmluZSBBVFRSX05PSFJFRiA3MgotI2RlZmlu
ZSBBVFRSX05PUkVTSVpFIDczCi0jZGVmaW5lIEFUVFJfTk9TQVZFIDc0Ci0jZGVmaW5lIEFUVFJf
Tk9TSEFERSA3NQotI2RlZmluZSBBVFRSX05PV1JBUCA3NgotI2RlZmluZSBBVFRSX09CSkVDVCA3
NwotI2RlZmluZSBBVFRSX09OQUJPUlQgNzgKLSNkZWZpbmUgQVRUUl9PTkJMVVIgNzkKLSNkZWZp
bmUgQVRUUl9PTkNIQU5HRSA4MAotI2RlZmluZSBBVFRSX09OQ0xJQ0sgODEKLSNkZWZpbmUgQVRU
Ul9PTkRCTENMSUNLIDgyCi0jZGVmaW5lIEFUVFJfT05FUlJPUiA4MwotI2RlZmluZSBBVFRSX09O
Rk9DVVMgODQKLSNkZWZpbmUgQVRUUl9PTktFWURPV04gODUKLSNkZWZpbmUgQVRUUl9PTktFWVBS
RVNTIDg2Ci0jZGVmaW5lIEFUVFJfT05LRVlVUCA4NwotI2RlZmluZSBBVFRSX09OTE9BRCA4OAot
I2RlZmluZSBBVFRSX09OTU9VU0VET1dOIDg5Ci0jZGVmaW5lIEFUVFJfT05NT1VTRU1PVkUgOTAK
LSNkZWZpbmUgQVRUUl9PTk1PVVNFT1VUIDkxCi0jZGVmaW5lIEFUVFJfT05NT1VTRU9WRVIgOTIK
LSNkZWZpbmUgQVRUUl9PTk1PVVNFVVAgOTMKLSNkZWZpbmUgQVRUUl9PTlJFU0VUIDk0Ci0jZGVm
aW5lIEFUVFJfT05SRVNJWkUgOTUKLSNkZWZpbmUgQVRUUl9PTlNFTEVDVCA5NgotI2RlZmluZSBB
VFRSX09OU1VCTUlUIDk3Ci0jZGVmaW5lIEFUVFJfT05VTkxPQUQgOTgKLSNkZWZpbmUgQVRUUl9P
VkVSU1JDIDk5Ci0jZGVmaW5lIEFUVFJfUEFHRVggMTAwCi0jZGVmaW5lIEFUVFJfUEFHRVkgMTAx
Ci0jZGVmaW5lIEFUVFJfUExBSU4gMTAyCi0jZGVmaW5lIEFUVFJfUExVR0lOUEFHRSAxMDMKLSNk
ZWZpbmUgQVRUUl9QTFVHSU5TUEFHRSAxMDQKLSNkZWZpbmUgQVRUUl9QTFVHSU5VUkwgMTA1Ci0j
ZGVmaW5lIEFUVFJfUFJPRklMRSAxMDYKLSNkZWZpbmUgQVRUUl9QUk9NUFQgMTA3Ci0jZGVmaW5l
IEFUVFJfUkVBRE9OTFkgMTA4Ci0jZGVmaW5lIEFUVFJfUkVMIDEwOQotI2RlZmluZSBBVFRSX1JF
ViAxMTAKLSNkZWZpbmUgQVRUUl9ST1dTIDExMQotI2RlZmluZSBBVFRSX1JPV1NQQU4gMTEyCi0j
ZGVmaW5lIEFUVFJfUlVMRVMgMTEzCi0jZGVmaW5lIEFUVFJfU0NIRU1FIDExNAotI2RlZmluZSBB
VFRSX1NDT1BFIDExNQotI2RlZmluZSBBVFRSX1NDUk9MTElORyAxMTYKLSNkZWZpbmUgQVRUUl9T
RUxFQ1RFRCAxMTcKLSNkZWZpbmUgQVRUUl9TSEFQRSAxMTgKLSNkZWZpbmUgQVRUUl9TSVpFIDEx
OQotI2RlZmluZSBBVFRSX1NQQU4gMTIwCi0jZGVmaW5lIEFUVFJfU1JDIDEyMQotI2RlZmluZSBB
VFRSX1NUQU5EQlkgMTIyCi0jZGVmaW5lIEFUVFJfU1RBUlQgMTIzCi0jZGVmaW5lIEFUVFJfU1RZ
TEUgMTI0Ci0jZGVmaW5lIEFUVFJfU1VNTUFSWSAxMjUKLSNkZWZpbmUgQVRUUl9UQUJJTkRFWCAx
MjYKLSNkZWZpbmUgQVRUUl9UQVJHRVQgMTI3Ci0jZGVmaW5lIEFUVFJfVEVYVCAxMjgKLSNkZWZp
bmUgQVRUUl9USVRMRSAxMjkKLSNkZWZpbmUgQVRUUl9UT1AgMTMwCi0jZGVmaW5lIEFUVFJfVE9Q
TUFSR0lOIDEzMQotI2RlZmluZSBBVFRSX1RZUEUgMTMyCi0jZGVmaW5lIEFUVFJfVU5LTk9XTiAx
MzMKLSNkZWZpbmUgQVRUUl9VU0VNQVAgMTM0Ci0jZGVmaW5lIEFUVFJfVkFMSUdOIDEzNQotI2Rl
ZmluZSBBVFRSX1ZBTFVFIDEzNgotI2RlZmluZSBBVFRSX1ZBTFVFVFlQRSAxMzcKLSNkZWZpbmUg
QVRUUl9WRVJTSU9OIDEzOAotI2RlZmluZSBBVFRSX1ZJU0lCSUxJVFkgMTM5Ci0jZGVmaW5lIEFU
VFJfVkxJTksgMTQwCi0jZGVmaW5lIEFUVFJfVlNQQUNFIDE0MQotI2RlZmluZSBBVFRSX1dJRFRI
IDE0MgotI2RlZmluZSBBVFRSX1dSQVAgMTQzCi0jZGVmaW5lIEFUVFJfWl9JTkRFWCAxNDQKLSNk
ZWZpbmUgQVRUUl9MQVNUX0FUVFIgMTQ0CisjZGVmaW5lIEFUVFJfQ09OVEVOVEVESVRBQkxFIDM2
CisjZGVmaW5lIEFUVFJfQ09PUkRTIDM3CisjZGVmaW5lIEFUVFJfREFUQSAzOAorI2RlZmluZSBB
VFRSX0RBVEVUSU1FIDM5CisjZGVmaW5lIEFUVFJfREVDTEFSRSA0MAorI2RlZmluZSBBVFRSX0RF
RkVSIDQxCisjZGVmaW5lIEFUVFJfRElSIDQyCisjZGVmaW5lIEFUVFJfRElTQUJMRUQgNDMKKyNk
ZWZpbmUgQVRUUl9FTkNUWVBFIDQ0CisjZGVmaW5lIEFUVFJfRkFDRSA0NQorI2RlZmluZSBBVFRS
X0ZPUiA0NgorI2RlZmluZSBBVFRSX0ZSQU1FIDQ3CisjZGVmaW5lIEFUVFJfRlJBTUVCT1JERVIg
NDgKKyNkZWZpbmUgQVRUUl9IRUFERVJTIDQ5CisjZGVmaW5lIEFUVFJfSEVJR0hUIDUwCisjZGVm
aW5lIEFUVFJfSElEREVOIDUxCisjZGVmaW5lIEFUVFJfSFJFRiA1MgorI2RlZmluZSBBVFRSX0hS
RUZMQU5HIDUzCisjZGVmaW5lIEFUVFJfSFNQQUNFIDU0CisjZGVmaW5lIEFUVFJfSFRNTCA1NQor
I2RlZmluZSBBVFRSX0hUVFBfRVFVSVYgNTYKKyNkZWZpbmUgQVRUUl9JRCA1NworI2RlZmluZSBB
VFRSX0lTTUFQIDU4CisjZGVmaW5lIEFUVFJfTEFCRUwgNTkKKyNkZWZpbmUgQVRUUl9MQU5HIDYw
CisjZGVmaW5lIEFUVFJfTEFOR1VBR0UgNjEKKyNkZWZpbmUgQVRUUl9MRUZUIDYyCisjZGVmaW5l
IEFUVFJfTEVGVE1BUkdJTiA2MworI2RlZmluZSBBVFRSX0xJTksgNjQKKyNkZWZpbmUgQVRUUl9M
T05HREVTQyA2NQorI2RlZmluZSBBVFRSX01BUkdJTkhFSUdIVCA2NgorI2RlZmluZSBBVFRSX01B
UkdJTldJRFRIIDY3CisjZGVmaW5lIEFUVFJfTUFYTEVOR1RIIDY4CisjZGVmaW5lIEFUVFJfTUVE
SUEgNjkKKyNkZWZpbmUgQVRUUl9NRVRIT0QgNzAKKyNkZWZpbmUgQVRUUl9NVUxUSVBMRSA3MQor
I2RlZmluZSBBVFRSX05BTUUgNzIKKyNkZWZpbmUgQVRUUl9OT0hSRUYgNzMKKyNkZWZpbmUgQVRU
Ul9OT1JFU0laRSA3NAorI2RlZmluZSBBVFRSX05PU0FWRSA3NQorI2RlZmluZSBBVFRSX05PU0hB
REUgNzYKKyNkZWZpbmUgQVRUUl9OT1dSQVAgNzcKKyNkZWZpbmUgQVRUUl9PQkpFQ1QgNzgKKyNk
ZWZpbmUgQVRUUl9PTkFCT1JUIDc5CisjZGVmaW5lIEFUVFJfT05CTFVSIDgwCisjZGVmaW5lIEFU
VFJfT05DSEFOR0UgODEKKyNkZWZpbmUgQVRUUl9PTkNMSUNLIDgyCisjZGVmaW5lIEFUVFJfT05E
QkxDTElDSyA4MworI2RlZmluZSBBVFRSX09ORVJST1IgODQKKyNkZWZpbmUgQVRUUl9PTkZPQ1VT
IDg1CisjZGVmaW5lIEFUVFJfT05LRVlET1dOIDg2CisjZGVmaW5lIEFUVFJfT05LRVlQUkVTUyA4
NworI2RlZmluZSBBVFRSX09OS0VZVVAgODgKKyNkZWZpbmUgQVRUUl9PTkxPQUQgODkKKyNkZWZp
bmUgQVRUUl9PTk1PVVNFRE9XTiA5MAorI2RlZmluZSBBVFRSX09OTU9VU0VNT1ZFIDkxCisjZGVm
aW5lIEFUVFJfT05NT1VTRU9VVCA5MgorI2RlZmluZSBBVFRSX09OTU9VU0VPVkVSIDkzCisjZGVm
aW5lIEFUVFJfT05NT1VTRVVQIDk0CisjZGVmaW5lIEFUVFJfT05SRVNFVCA5NQorI2RlZmluZSBB
VFRSX09OUkVTSVpFIDk2CisjZGVmaW5lIEFUVFJfT05TRUxFQ1QgOTcKKyNkZWZpbmUgQVRUUl9P
TlNVQk1JVCA5OAorI2RlZmluZSBBVFRSX09OVU5MT0FEIDk5CisjZGVmaW5lIEFUVFJfT1ZFUlNS
QyAxMDAKKyNkZWZpbmUgQVRUUl9QQUdFWCAxMDEKKyNkZWZpbmUgQVRUUl9QQUdFWSAxMDIKKyNk
ZWZpbmUgQVRUUl9QTEFJTiAxMDMKKyNkZWZpbmUgQVRUUl9QTFVHSU5QQUdFIDEwNAorI2RlZmlu
ZSBBVFRSX1BMVUdJTlNQQUdFIDEwNQorI2RlZmluZSBBVFRSX1BMVUdJTlVSTCAxMDYKKyNkZWZp
bmUgQVRUUl9QUk9GSUxFIDEwNworI2RlZmluZSBBVFRSX1BST01QVCAxMDgKKyNkZWZpbmUgQVRU
Ul9SRUFET05MWSAxMDkKKyNkZWZpbmUgQVRUUl9SRUwgMTEwCisjZGVmaW5lIEFUVFJfUkVWIDEx
MQorI2RlZmluZSBBVFRSX1JPV1MgMTEyCisjZGVmaW5lIEFUVFJfUk9XU1BBTiAxMTMKKyNkZWZp
bmUgQVRUUl9SVUxFUyAxMTQKKyNkZWZpbmUgQVRUUl9TQ0hFTUUgMTE1CisjZGVmaW5lIEFUVFJf
U0NPUEUgMTE2CisjZGVmaW5lIEFUVFJfU0NST0xMSU5HIDExNworI2RlZmluZSBBVFRSX1NFTEVD
VEVEIDExOAorI2RlZmluZSBBVFRSX1NIQVBFIDExOQorI2RlZmluZSBBVFRSX1NJWkUgMTIwCisj
ZGVmaW5lIEFUVFJfU1BBTiAxMjEKKyNkZWZpbmUgQVRUUl9TUkMgMTIyCisjZGVmaW5lIEFUVFJf
U1RBTkRCWSAxMjMKKyNkZWZpbmUgQVRUUl9TVEFSVCAxMjQKKyNkZWZpbmUgQVRUUl9TVFlMRSAx
MjUKKyNkZWZpbmUgQVRUUl9TVU1NQVJZIDEyNgorI2RlZmluZSBBVFRSX1RBQklOREVYIDEyNwor
I2RlZmluZSBBVFRSX1RBUkdFVCAxMjgKKyNkZWZpbmUgQVRUUl9URVhUIDEyOQorI2RlZmluZSBB
VFRSX1RJVExFIDEzMAorI2RlZmluZSBBVFRSX1RPUCAxMzEKKyNkZWZpbmUgQVRUUl9UT1BNQVJH
SU4gMTMyCisjZGVmaW5lIEFUVFJfVFlQRSAxMzMKKyNkZWZpbmUgQVRUUl9VTktOT1dOIDEzNAor
I2RlZmluZSBBVFRSX1VTRU1BUCAxMzUKKyNkZWZpbmUgQVRUUl9WQUxJR04gMTM2CisjZGVmaW5l
IEFUVFJfVkFMVUUgMTM3CisjZGVmaW5lIEFUVFJfVkFMVUVUWVBFIDEzOAorI2RlZmluZSBBVFRS
X1ZFUlNJT04gMTM5CisjZGVmaW5lIEFUVFJfVklTSUJJTElUWSAxNDAKKyNkZWZpbmUgQVRUUl9W
TElOSyAxNDEKKyNkZWZpbmUgQVRUUl9WU1BBQ0UgMTQyCisjZGVmaW5lIEFUVFJfV0lEVEggMTQz
CisjZGVmaW5lIEFUVFJfV1JBUCAxNDQKKyNkZWZpbmUgQVRUUl9aX0lOREVYIDE0NQorI2RlZmlu
ZSBBVFRSX0xBU1RfQVRUUiAxNDUKIERPTVN0cmluZyBnZXRBdHRyTmFtZSh1bnNpZ25lZCBzaG9y
dCBpZCk7CiAKICNlbmRpZgpJbmRleDogbWlzYy9odG1sYXR0cnMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvbWlzYy9odG1sYXR0cnMuaW4sdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtdSAtcCAtcjEuMTUgaHRtbGF0dHJzLmluCi0tLSBtaXNj
L2h0bWxhdHRycy5pbgkxNSBEZWMgMjAwMSAxNzoyODoxMCAtMDAwMAkxLjE1CisrKyBtaXNjL2h0
bWxhdHRycy5pbgkxOCBBdWcgMjAwMyAyMTo1Mjo0MiAtMDAwMApAQCAtMzMsNiArMzMsNyBAQCBj
b2xzCiBjb2xzcGFuCiBjb21wYWN0CiBjb250ZW50Citjb250ZW50ZWRpdGFibGUKIGNvb3Jkcwog
ZGF0YQogZGF0ZXRpbWUKSW5kZXg6IHJlbmRlcmluZy9NYWtlZmlsZS5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvTWFrZWZpbGUuYW0sdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMzMKZGlmZiAtdSAtcCAtcjEuMzMgTWFrZWZpbGUuYW0KLS0t
IHJlbmRlcmluZy9NYWtlZmlsZS5hbQkyMyBBcHIgMjAwMyAxMjo0MDo1NCAtMDAwMAkxLjMzCisr
KyByZW5kZXJpbmcvTWFrZWZpbGUuYW0JMTggQXVnIDIwMDMgMjE6NTI6NDIgLTAwMDAKQEAgLTI3
LDcgKzI3LDcgQEAgbGlia2h0bWxyZW5kZXJfbGFfU09VUkNFUyA9IFwKIAlyZW5kZXJfaW1hZ2Uu
Y3BwIHJlbmRlcl90YWJsZS5jcHAgdGFibGVfbGF5b3V0LmNwcCBcCiAJcmVuZGVyX3JlcGxhY2Vk
LmNwcCByZW5kZXJfZm9ybS5jcHAgcmVuZGVyX2xpc3QuY3BwIFwKIAlyZW5kZXJfcm9vdC5jcHAg
cmVuZGVyX2ZyYW1lcy5jcHAgcmVuZGVyX2JyLmNwcCBcCi0JcmVuZGVyX2h0bWwuY3BwIHJlbmRl
cl9ib2R5LmNwcCBmb250LmNwcCAKKwlyZW5kZXJfaHRtbC5jcHAgcmVuZGVyX2JvZHkuY3BwIGZv
bnQuY3BwIHJlbmRlcl9saW5lLmNwcAogCiBsaWJraHRtbHJlbmRlcl9sYV9NRVRBU09VUkNFUyA9
IEFVVE8KIApAQCAtMzcsNyArMzcsNyBAQCBub2luc3RfSEVBREVSUyA9IFwKIAlyZW5kZXJfc3R5
bGUuaCByZW5kZXJfb2JqZWN0LmggcmVuZGVyX2NvbnRhaW5lci5oIHJlbmRlcl9ib3guaCBcCiAJ
cmVuZGVyX2Zsb3cuaCByZW5kZXJfdGV4dC5oIHJlbmRlcl90YWJsZS5oIHJlbmRlcl9yZXBsYWNl
ZC5oIFwKIAlyZW5kZXJfZm9ybS5oIHJlbmRlcl9saXN0LmggcmVuZGVyX3Jvb3QuaCByZW5kZXJf
ZnJhbWVzLmggXAotCXJlbmRlcl9ici5oIHJlbmRlcl9hcHBsZXQuaCBmb250LmggdGFibGVfbGF5
b3V0LmgKKwlyZW5kZXJfYnIuaCByZW5kZXJfYXBwbGV0LmggZm9udC5oIHRhYmxlX2xheW91dC5o
IHJlbmRlcl9saW5lLmgKIAogSU5DTFVERVMgPSAtSSQodG9wX3NyY2Rpcikva2ltZ2lvIC1JJCh0
b3Bfc3JjZGlyKS9raW8gLUkkKHRvcF9zcmNkaXIpL2Rjb3AgXAogIC1JJCh0b3Bfc3JjZGlyKS9r
ZmlsZSAtSSQodG9wX3NyY2Rpcikva2h0bWwgLUkkKHRvcF9zcmNkaXIpICQoYWxsX2luY2x1ZGVz
KQpJbmRleDogcmVuZGVyaW5nL2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tk
ZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9iaWRpLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xNjUKZGlmZiAtdSAtcCAtcjEuMTY1IGJpZGkuY3BwCi0tLSByZW5kZXJpbmcvYmlkaS5jcHAJ
NiBGZWIgMjAwMyAwMDozMjo0NiAtMDAwMAkxLjE2NQorKysgcmVuZGVyaW5nL2JpZGkuY3BwCTE4
IEF1ZyAyMDAzIDIxOjUyOjQ0IC0wMDAwCkBAIC0zOTEsNiArMzkxLDg2IEBAIHN0YXRpYyB2b2lk
IGVtYmVkKCBRQ2hhcjo6RGlyZWN0aW9uIGQgKQogICAgIGFkanVzdEVtYmVkZGRpbmcgPSBiOwog
fQogCitJbmxpbmVGbG93Qm94KiBSZW5kZXJGbG93OjpjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2Jq
ZWN0KiBvYmopCit7CisgICAgLy8gU2VlIGlmIHdlIGhhdmUgYW4gdW5jb25zdHJ1Y3RlZCBsaW5l
IGJveCBmb3IgdGhpcyBvYmplY3QgdGhhdCBpcyBhbHNvCisgICAgLy8gdGhlIGxhc3QgaXRlbSBv
biB0aGUgbGluZS4KKyAgICBLSFRNTEFzc2VydChvYmotPmlzRmxvdygpIHx8IG9iaiA9PSB0aGlz
KTsKKyAgICBSZW5kZXJGbG93KiBmbG93ID0gc3RhdGljX2Nhc3Q8UmVuZGVyRmxvdyo+KG9iaik7
CisKKyAgICAvLyBHZXQgdGhlIGxhc3QgYm94IHdlIG1hZGUgZm9yIHRoaXMgcmVuZGVyIG9iamVj
dC4KKyAgICBJbmxpbmVGbG93Qm94KiBib3ggPSBmbG93LT5sYXN0TGluZUJveCgpOworCisgICAg
Ly8gSWYgdGhpcyBib3ggaXMgY29uc3RydWN0ZWQgdGhlbiBpdCBpcyBmcm9tIGEgcHJldmlvdXMg
bGluZSwgYW5kIHdlIG5lZWQKKyAgICAvLyB0byBtYWtlIGEgbmV3IGJveCBmb3Igb3VyIGxpbmUu
ICBJZiB0aGlzIGJveCBpcyB1bmNvbnN0cnVjdGVkIGJ1dCBpdCBoYXMKKyAgICAvLyBzb21ldGhp
bmcgZm9sbG93aW5nIGl0IG9uIHRoZSBsaW5lLCB0aGVuIHdlIGtub3cgd2UgaGF2ZSB0byBtYWtl
IGEgbmV3IGJveAorICAgIC8vIGFzIHdlbGwuICBJbiB0aGlzIHNpdHVhdGlvbiBvdXIgaW5saW5l
IGhhcyBhY3R1YWxseSBiZWVuIHNwbGl0IGluIHR3byBvbgorICAgIC8vIHRoZSBzYW1lIGxpbmUg
KHRoaXMgY2FuIGhhcHBlbiB3aXRoIHZlcnkgZmFuY3kgbGFuZ3VhZ2UgbWl4dHVyZXMpLgorICAg
IGlmICghYm94IHx8IGJveC0+aXNDb25zdHJ1Y3RlZCgpIHx8IGJveC0+bmV4dE9uTGluZSgpKSB7
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBhIG5ldyBib3ggZm9yIHRoaXMgcmVuZGVyIG9i
amVjdC4gIE9uY2UKKyAgICAgICAgLy8gbWFkZSwgd2UgbmVlZCB0byBwbGFjZSBpdCBhdCB0aGUg
ZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgIElubGluZUJveCogbmV3Qm94ID0gb2Jq
LT5jcmVhdGVJbmxpbmVCb3goZmFsc2UpOworICAgICAgICBLSFRNTEFzc2VydChuZXdCb3gtPmlz
SW5saW5lRmxvd0JveCgpKTsKKyAgICAgICAgYm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0Jv
eCo+KG5ld0JveCk7CisJLy8gRklYTUU6IG5vdCBwb3J0ZWQgeWV0LCBpdCBpcyBzZXQgZXhwbGlj
aXRseSBpbiBjb21wdXRlUG9zaXRpb25zLi4uCisvLyAgICAgICAgYm94LT5zZXRGaXJzdExpbmVT
dHlsZUJpdChtX2ZpcnN0TGluZSk7CisKKyAgICAgICAgLy8gV2UgaGF2ZSBhIG5ldyBib3guIEFw
cGVuZCBpdCB0byB0aGUgaW5saW5lIGJveCB3ZSBnZXQgYnkgY29uc3RydWN0aW5nIG91cgorICAg
ICAgICAvLyBwYXJlbnQuICBJZiB3ZSBoYXZlIGhpdCB0aGUgYmxvY2sgaXRzZWxmLCB0aGVuIHxi
b3h8IHJlcHJlc2VudHMgdGhlIHJvb3QKKyAgICAgICAgLy8gaW5saW5lIGJveCBmb3IgdGhlIGxp
bmUsIGFuZCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgYXBwZW5kZWQgdG8gYW55IHBhcmVudAorICAg
ICAgICAvLyBpbmxpbmUuCisgICAgICAgIGlmIChvYmogIT0gdGhpcykgeworICAgICAgICAgICAg
SW5saW5lRmxvd0JveCogcGFyZW50Qm94ID0gY3JlYXRlTGluZUJveGVzKG9iai0+cGFyZW50KCkp
OworICAgICAgICAgICAgcGFyZW50Qm94LT5hZGRUb0xpbmUoYm94KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBib3g7Cit9CisKK0lubGluZUZsb3dCb3gqIFJlbmRlckZsb3c6OmNv
bnN0cnVjdExpbmUoY29uc3QgQmlkaUl0ZXJhdG9yICZzdGFydCwgY29uc3QgQmlkaUl0ZXJhdG9y
ICZlbmQpCit7CisgICAgaWYgKCFzcnVucykKKyAgICAgICAgcmV0dXJuIDA7IC8vIFdlIGhhZCBu
byBydW5zLiBEb24ndCBtYWtlIGEgcm9vdCBpbmxpbmUgYm94IGF0IGFsbC4gVGhlIGxpbmUgaXMg
ZW1wdHkuCisKKyAgICBJbmxpbmVGbG93Qm94KiBwYXJlbnRCb3ggPSAwOworICAgIFFQdHJMaXN0
SXRlcmF0b3I8QmlkaVJ1bj4gaXQoKnNydW5zKTsKKyAgICBmb3IgKEJpZGlSdW4gKnI7IChyID0g
aXQuY3VycmVudCgpKTsgKytpdCkgeworICAgICAgICAvLyBDcmVhdGUgYSBib3ggZm9yIG91ciBv
YmplY3QuCisgICAgICAgIHItPmJveCA9IHItPm9iai0+Y3JlYXRlSW5saW5lQm94KHItPm9iai0+
aXNQb3NpdGlvbmVkKCkpOworCisgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gcGFyZW50IGJveCB5
ZXQsIG9yIGlmIHRoZSBydW4gaXMgbm90IHNpbXBseSBhIHNpYmxpbmcsCisgICAgICAgIC8vIHRo
ZW4gd2UgbmVlZCB0byBjb25zdHJ1Y3QgaW5saW5lIGJveGVzIGFzIG5lY2Vzc2FyeSB0byBwcm9w
ZXJseSBlbmNsb3NlIHRoZQorICAgICAgICAvLyBydW4ncyBpbmxpbmUgYm94LgorICAgICAgICBp
ZiAoIXBhcmVudEJveCB8fCAocGFyZW50Qm94LT5vYmplY3QoKSAhPSByLT5vYmotPnBhcmVudCgp
KSkKKyAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgaW5saW5lIGJveGVzIGFsbCB0aGUgd2F5IGJh
Y2sgdG8gdGhlIGFwcHJvcHJpYXRlIGluc2VydGlvbiBwb2ludC4KKyAgICAgICAgICAgIHBhcmVu
dEJveCA9IGNyZWF0ZUxpbmVCb3hlcyhyLT5vYmotPnBhcmVudCgpKTsKKworICAgICAgICAvLyBB
cHBlbmQgdGhlIGlubGluZSBib3ggdG8gdGhpcyBsaW5lLgorICAgICAgICBwYXJlbnRCb3gtPmFk
ZFRvTGluZShyLT5ib3gpOworICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBoYXZlIGEgcm9vdCBp
bmxpbmUgYm94LiAgSXQgc2hvdWxkIGJlIHVuY29uc3RydWN0ZWQgYW5kCisgICAgLy8gYmUgdGhl
IGxhc3QgY29udGludWF0aW9uIG9mIG91ciBsaW5lIGxpc3QuCisgICAgS0hUTUxBc3NlcnQobGFz
dExpbmVCb3goKSAmJiAhbGFzdExpbmVCb3goKS0+aXNDb25zdHJ1Y3RlZCgpKTsKKworICAgIC8v
IFNldCBiaXRzIG9uIG91ciBpbmxpbmUgZmxvdyBib3hlcyB0aGF0IGluZGljYXRlIHdoaWNoIHNp
ZGVzIHNob3VsZAorICAgIC8vIHBhaW50IGJvcmRlcnMvbWFyZ2lucy9wYWRkaW5nLiAgVGhpcyBr
bm93bGVkZ2Ugd2lsbCB1bHRpbWF0ZWx5IGJlIHVzZWQgd2hlbgorICAgIC8vIHdlIGRldGVybWlu
ZSB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbnMgYW5kIHdpZHRocyBvZiBhbGwgdGhlIGlubGluZSBi
b3hlcyBvbgorICAgIC8vIHRoZSBsaW5lLgorICAgIFJlbmRlck9iamVjdCogZW5kT2JqZWN0ID0g
MDsKKyAgICBib29sIGxhc3RMaW5lID0gIWVuZC5vYmo7CisgICAgaWYgKGVuZC5vYmogJiYgZW5k
LnBvcyA9PSAwKQorICAgICAgICBlbmRPYmplY3QgPSBlbmQub2JqOworICAgIC8vIEZJWE1FOiB0
aGlzIGlzIGEgZHVtbXkgY2FsbCwgdGhlIGZ1bmN0aW9uIGhhcyBubyBpbXBsZW1lbnRhdGlvbgor
ICAgIGxhc3RMaW5lQm94KCktPmRldGVybWluZVNwYWNpbmdGb3JGbG93Qm94ZXMobGFzdExpbmUs
IGVuZE9iamVjdCk7CisKKyAgICAvLyBOb3cgbWFyayB0aGUgbGluZSBib3hlcyBhcyBiZWluZyBj
b25zdHJ1Y3RlZC4KKyAgICBsYXN0TGluZUJveCgpLT5zZXRDb25zdHJ1Y3RlZCgpOworCisgICAg
Ly8gUmV0dXJuIHRoZSBsYXN0IGxpbmUuCisgICAgcmV0dXJuIGxhc3RMaW5lQm94KCk7Cit9CiAK
IC8vIGNvbGxlY3RzIG9uZSBsaW5lIG9mIHRoZSBwYXJhZ3JhcGggYW5kIHRyYW5zZm9ybXMgaXQg
dG8gdmlzdWFsIG9yZGVyCiB2b2lkIFJlbmRlckZsb3c6OmJpZGlSZW9yZGVyTGluZShjb25zdCBC
aWRpSXRlcmF0b3IgJnN0YXJ0LCBjb25zdCBCaWRpSXRlcmF0b3IgJmVuZCkKQEAgLTQwNSwxMCAr
NDg1LDYgQEAgdm9pZCBSZW5kZXJGbG93OjpiaWRpUmVvcmRlckxpbmUoY29uc3QgQgogICAgIGtk
RGVidWcoNjA0MSkgPDwgInJlb3JkZXJpbmcgTGluZSBmcm9tICIgPDwgc3RhcnQub2JqIDw8ICIv
IiA8PCBzdGFydC5wb3MgPDwgIiB0byAiIDw8IGVuZC5vYmogPDwgIi8iIDw8IGVuZC5wb3MgPDwg
ZW5kbDsKICNlbmRpZgogCi0gICAgUVB0ckxpc3Q8QmlkaVJ1bj4gcnVuczsKLSAgICBydW5zLnNl
dEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgc3J1bnMgPSAmcnVuczsKLQogICAgIC8vICAgIGNvbnRl
eHQtPnJlZigpOwogCiAgICAgZGlyID0gUUNoYXI6OkRpck9OOwpAQCAtNzkzLDcgKzg2OSw3IEBA
IHZvaWQgUmVuZGVyRmxvdzo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IEIKICAgICAvLyBmaXJzdCBm
aW5kIGhpZ2hlc3QgYW5kIGxvd2VzdCBsZXZlbHMKICAgICB1Y2hhciBsZXZlbExvdyA9IDEyODsK
ICAgICB1Y2hhciBsZXZlbEhpZ2ggPSAwOwotICAgIEJpZGlSdW4gKnIgPSBydW5zLmZpcnN0KCk7
CisgICAgQmlkaVJ1biAqciA9IHNydW5zLT5maXJzdCgpOwogCiAgICAgd2hpbGUgKCByICkgewog
ICAgICAgICAvL3BhaW50ZigibGV2ZWwgPSAlZFxuIiwgci0+bGV2ZWwpOwpAQCAtODAxLDcgKzg3
Nyw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IEIKICAgICAgICAg
ICAgIGxldmVsSGlnaCA9IHItPmxldmVsOwogICAgICAgICBpZiAoIHItPmxldmVsIDwgbGV2ZWxM
b3cgKQogICAgICAgICAgICAgbGV2ZWxMb3cgPSByLT5sZXZlbDsKLSAgICAgICAgciA9IHJ1bnMu
bmV4dCgpOworICAgICAgICByID0gc3J1bnMtPm5leHQoKTsKICAgICB9CiAKICAgICAvLyBpbXBs
ZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFjY29yZGluZyB0byBCaWRpIHNwZWMp
OgpAQCAtODIwLDE3ICs4OTYsMTcgQEAgdm9pZCBSZW5kZXJGbG93OjpiaWRpUmVvcmRlckxpbmUo
Y29uc3QgQgogICAgICAgICBrZERlYnVnKDYwNDEpIDw8ICIgICAgIiA8PCByMiA8PCAiICBzdGFy
dD0iIDw8IHIyLT5zdGFydCA8PCAiICBzdG9wPSIgPDwgcjItPnN0b3AgPDwgIiAgbGV2ZWw9IiA8
PCAodWludClyMi0+bGV2ZWwgPDwgZW5kbDsKICNlbmRpZgogCi0gICAgaW50IGNvdW50ID0gcnVu
cy5jb3VudCgpIC0gMTsKKyAgICBpbnQgY291bnQgPSBzcnVucy0+Y291bnQoKSAtIDE7CiAKICAg
ICAvLyBkbyBub3QgcmV2ZXJzZSBmb3IgdmlzdWFsbHkgb3JkZXJlZCB3ZWIgc2l0ZXMKICAgICBp
Zighc3R5bGUoKS0+dmlzdWFsbHlPcmRlcmVkKCkpIHsKICAgICAgICAgd2hpbGUobGV2ZWxIaWdo
ID49IGxldmVsTG93KSB7CiAgICAgICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgICAgICB3aGls
ZSAoIGkgPCBjb3VudCApIHsKLSAgICAgICAgICAgICAgICB3aGlsZShpIDwgY291bnQgJiYgcnVu
cy5hdChpKS0+bGV2ZWwgPCBsZXZlbEhpZ2gpCisgICAgICAgICAgICAgICAgd2hpbGUoaSA8IGNv
dW50ICYmIHNydW5zLT5hdChpKS0+bGV2ZWwgPCBsZXZlbEhpZ2gpCiAgICAgICAgICAgICAgICAg
ICAgIGkrKzsKICAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSBpOwotICAgICAgICAgICAgICAg
IHdoaWxlKGkgPD0gY291bnQgJiYgcnVucy5hdChpKS0+bGV2ZWwgPj0gbGV2ZWxIaWdoKQorICAg
ICAgICAgICAgICAgIHdoaWxlKGkgPD0gY291bnQgJiYgc3J1bnMtPmF0KGkpLT5sZXZlbCA+PSBs
ZXZlbEhpZ2gpCiAgICAgICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgICBpbnQg
ZW5kID0gaS0xOwogCkBAIC04MzgsMTAgKzkxNCwxMCBAQCB2b2lkIFJlbmRlckZsb3c6OmJpZGlS
ZW9yZGVyTGluZShjb25zdCBCCiAgICAgICAgICAgICAgICAgICAgIC8va2REZWJ1Zyg2MDQxKSA8
PCAicmV2ZXJzaW5nIGZyb20gIiA8PCBzdGFydCA8PCAiIHRvICIgPDwgZW5kIDw8IGVuZGw7CiAg
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCAoZW5kLXN0YXJ0KzEpLzI7IGor
KykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCaWRpUnVuICpmaXJzdCA9IHJ1bnMudGFrZShzdGFydCtqKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCaWRpUnVuICpsYXN0ID0gcnVucy50YWtlKGVuZC1qLTEpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJ1bnMuaW5zZXJ0KHN0YXJ0K2osIGxhc3QpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJ1bnMuaW5zZXJ0KGVuZC1qLCBmaXJzdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmlkaVJ1biAqZmlyc3QgPSBzcnVucy0+dGFrZShzdGFydCtqKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpUnVuICpsYXN0ID0gc3J1bnMtPnRha2Uo
ZW5kLWotMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J1bnMtPmluc2VydChzdGFy
dCtqLCBsYXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnVucy0+aW5zZXJ0KGVu
ZC1qLCBmaXJzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGkrKzsKQEAgLTg2MCw0NyArOTM2LDU0IEBAIHZvaWQgUmVuZGVy
Rmxvdzo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IEIKICAgICAgICAga2REZWJ1Zyg2MDQxKSA8PCAi
ICAgICIgPDwgcjMgPDwgZW5kbDsKICAgICB9CiAjZW5kaWYKK30KIAordm9pZCBSZW5kZXJGbG93
Ojpjb21wdXRlUG9zaXRpb25zRm9yTGluZShJbmxpbmVGbG93Qm94KiBsaW5lQm94LCBCaWRpQ29u
dGV4dCogZW5kRW1iZWQpCit7CiAgICAgaW50IG1heFBvc2l0aW9uVG9wID0gMDsKICAgICBpbnQg
bWF4UG9zaXRpb25Cb3R0b20gPSAwOwogICAgIGludCBtYXhBc2NlbnQgPSAwOwogICAgIGludCBt
YXhEZXNjZW50ID0gMDsKLSAgICByID0gcnVucy5maXJzdCgpOworICAgIEJpZGlSdW4gKnIgPSBz
cnVucy0+Zmlyc3QoKTsKICAgICB3aGlsZSAoIHIgKSB7Ci0gICAgICAgIHItPmhlaWdodCA9IHIt
Pm9iai0+bGluZUhlaWdodCggZmlyc3RMaW5lICk7Ci0Jci0+YmFzZWxpbmUgPSByLT5vYmotPmJh
c2VsaW5lUG9zaXRpb24oIGZpcnN0TGluZSApOworICAgICAgICBpbnQgaGVpZ2h0ID0gci0+b2Jq
LT5saW5lSGVpZ2h0KCBmaXJzdExpbmUgKTsKKwlpbnQgYmFzZWxpbmUgPSByLT5vYmotPmJhc2Vs
aW5lUG9zaXRpb24oIGZpcnN0TGluZSApOworICAgICAgICByLT5ib3gtPnNldEhlaWdodChoZWln
aHQpOworCXItPmJveC0+c2V0QmFzZWxpbmUoYmFzZWxpbmUpOwogLy8gCWlmICggci0+YmFzZWxp
bmUgPiByLT5oZWlnaHQgKQogLy8gCSAgICByLT5iYXNlbGluZSA9IHItPmhlaWdodDsKKwkvLyBG
SVhNRTogd2hlcmUgZGlkIHRoaXMgZ28gaW4gV2ViQ29yZT8KICAgICAgICAgci0+dmVydGljYWwg
PSByLT5vYmotPnZlcnRpY2FsUG9zaXRpb25IaW50KCBmaXJzdExpbmUgKTsKICAgICAgICAgLy9r
ZERlYnVnKDYwNDEpIDw8ICJvYmplY3Q9Ijw8IHItPm9iaiA8PCAiIGhlaWdodD0iPDxyLT5oZWln
aHQ8PCIgYmFzZWxpbmU9Ijw8IHItPmJhc2VsaW5lIDw8ICIgdmVydGljYWw9IiA8PCByLT52ZXJ0
aWNhbCA8PGVuZGw7CiAgICAgICAgIC8vaW50IGFzY2VudDsKICAgICAgICAgaWYgKCByLT52ZXJ0
aWNhbCA9PSBQb3NpdGlvblRvcCApIHsKLSAgICAgICAgICAgIGlmICggbWF4UG9zaXRpb25Ub3Ag
PCByLT5oZWlnaHQgKSBtYXhQb3NpdGlvblRvcCA9IHItPmhlaWdodDsKKyAgICAgICAgICAgIGlm
ICggbWF4UG9zaXRpb25Ub3AgPCBoZWlnaHQgKSBtYXhQb3NpdGlvblRvcCA9IGhlaWdodDsKICAg
ICAgICAgfQogICAgICAgICBlbHNlIGlmICggci0+dmVydGljYWwgPT0gUG9zaXRpb25Cb3R0b20g
KSB7Ci0gICAgICAgICAgICBpZiAoIG1heFBvc2l0aW9uQm90dG9tIDwgci0+aGVpZ2h0ICkgbWF4
UG9zaXRpb25Cb3R0b20gPSByLT5oZWlnaHQ7CisgICAgICAgICAgICBpZiAoIG1heFBvc2l0aW9u
Qm90dG9tIDwgaGVpZ2h0ICkgbWF4UG9zaXRpb25Cb3R0b20gPSBoZWlnaHQ7CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgYXNjZW50ID0gci0+YmFzZWxpbmUgLSBy
LT52ZXJ0aWNhbDsKLSAgICAgICAgICAgIGludCBkZXNjZW50ID0gci0+aGVpZ2h0IC0gYXNjZW50
OworICAgICAgICAgICAgaW50IGFzY2VudCA9IGJhc2VsaW5lIC0gci0+dmVydGljYWw7CisgICAg
ICAgICAgICBpbnQgZGVzY2VudCA9IGhlaWdodCAtIGFzY2VudDsKICAgICAgICAgICAgIGlmKG1h
eEFzY2VudCA8IGFzY2VudCkgbWF4QXNjZW50ID0gYXNjZW50OwogICAgICAgICAgICAgaWYobWF4
RGVzY2VudCA8IGRlc2NlbnQpIG1heERlc2NlbnQgPSBkZXNjZW50OwogICAgICAgICB9Ci0gICAg
ICAgIHIgPSBydW5zLm5leHQoKTsKKyAgICAgICAgciA9IHNydW5zLT5uZXh0KCk7CiAgICAgfQog
ICAgIGlmICggbWF4QXNjZW50K21heERlc2NlbnQgPCBRTUFYKCBtYXhQb3NpdGlvblRvcCwgbWF4
UG9zaXRpb25Cb3R0b20gKSApIHsKICAgICAgICAgLy8gbm93IHRoZSBjb21wdXRlZCBsaW5laGVp
Z2h0IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGZvciB0aGUKICAgICAgICAgLy8gcG9zaXRpb25lZCBl
bGVtZW50cwogICAgICAgICAvLyBzZWUga2h0bWx0ZXN0cy9yZW5kZXJpbmcvaHRtbF9hbGlnbi5o
dG1sCiAgICAgICAgIC8vICMjIyBvbmx5IGl0ZXJhdGUgb3ZlciB0aGUgcG9zaXRpb25lZCBvbmVz
IQotICAgICAgICBmb3IgKCByID0gcnVucy5maXJzdCgpOyByOyByID0gcnVucy5uZXh0KCkgKSB7
CisgICAgICAgIGZvciAoIHIgPSBzcnVucy0+Zmlyc3QoKTsgcjsgciA9IHNydW5zLT5uZXh0KCkg
KSB7CisJICAgIGludCBoZWlnaHQgPSByLT5ib3gtPmhlaWdodCgpOwogICAgICAgICAgICAgaWYg
KCByLT52ZXJ0aWNhbCA9PSBQb3NpdGlvblRvcCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIG1h
eEFzY2VudCArIG1heERlc2NlbnQgPCByLT5oZWlnaHQgKQotICAgICAgICAgICAgICAgICAgICBt
YXhEZXNjZW50ID0gci0+aGVpZ2h0IC0gbWF4QXNjZW50OworICAgICAgICAgICAgICAgIGlmICgg
bWF4QXNjZW50ICsgbWF4RGVzY2VudCA8IGhlaWdodCApCisgICAgICAgICAgICAgICAgICAgIG1h
eERlc2NlbnQgPSBoZWlnaHQgLSBtYXhBc2NlbnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlIGlmICggci0+dmVydGljYWwgPT0gUG9zaXRpb25Cb3R0b20gKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCBtYXhBc2NlbnQgKyBtYXhEZXNjZW50IDwgci0+aGVpZ2h0ICkKLSAgICAgICAg
ICAgICAgICAgICAgbWF4QXNjZW50ID0gci0+aGVpZ2h0IC0gbWF4RGVzY2VudDsKKyAgICAgICAg
ICAgICAgICBpZiAoIG1heEFzY2VudCArIG1heERlc2NlbnQgPCBoZWlnaHQgKQorICAgICAgICAg
ICAgICAgICAgICBtYXhBc2NlbnQgPSBoZWlnaHQgLSBtYXhEZXNjZW50OwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtOTEzLDcg
Kzk5Niw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IEIKICAgICBp
bnQgbWF4SGVpZ2h0ID0gbWF4QXNjZW50ICsgbWF4RGVzY2VudDsKICAgICAvLyBDU1MyOiAxMC44
LjE6IGxpbmUtaGVpZ2h0IG9uIHRoZSBibG9jayBsZXZlbCBlbGVtZW50IHNwZWNpZmllcyB0aGUg
Km1pbmltdW0qCiAgICAgLy8gaGVpZ2h0IG9mIHRoZSBnZW5lcmF0ZWQgbGluZSBib3gKLSAgICBy
ID0gcnVucy5maXJzdCgpOworICAgIHIgPSBzcnVucy0+Zmlyc3QoKTsKICAgICAvLyAjIyMgd2Ug
aGF2ZSBubyByZWxpYWJsZSB3YXkgb2YgZGV0ZWN0aW5nIGVtcHR5IGxpbmVib3hlcyAtIHdoaWNo
CiAgICAgLy8gYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgYW55IGhlaWdodC4gc2lnaC4oRGlyaykK
IC8vICAgICBpZiAoIHIgKSB7CkBAIC05MjYsMzAgKzEwMDksMzIgQEAgdm9pZCBSZW5kZXJGbG93
OjpiaWRpUmVvcmRlckxpbmUoY29uc3QgQgogICAgIGtkRGVidWcoIDYwNDAgKSA8PCAic3RhcnRp
bmcgcnVuLi4iIDw8IGVuZGw7CiAjZW5kaWYKICAgICB3aGlsZSAoIHIgKSB7CisgICAgICAgIGlu
dCB3aWR0aDsKICAgICAgICAgaWYoci0+dmVydGljYWwgPT0gUG9zaXRpb25Ub3ApCiAgICAgICAg
ICAgICByLT52ZXJ0aWNhbCA9IG1faGVpZ2h0OwogICAgICAgICBlbHNlIGlmKHItPnZlcnRpY2Fs
ID09IFBvc2l0aW9uQm90dG9tKQotICAgICAgICAgICAgci0+dmVydGljYWwgPSBtX2hlaWdodCAr
IG1heEhlaWdodCAtIHItPmhlaWdodDsKKyAgICAgICAgICAgIHItPnZlcnRpY2FsID0gbV9oZWln
aHQgKyBtYXhIZWlnaHQgLSByLT5ib3gtPmhlaWdodCgpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByLT52ZXJ0aWNhbCArPSBtX2hlaWdodCArIG1heEFzY2VudCAtIHItPmJhc2VsaW5lOwor
ICAgICAgICAgICAgci0+dmVydGljYWwgKz0gbV9oZWlnaHQgKyBtYXhBc2NlbnQgLSByLT5ib3gt
PmJhc2VsaW5lKCk7CiAKICAgICAgICAgaWYoci0+b2JqLT5pc1RleHQoKSkKLSAgICAgICAgICAg
IHItPndpZHRoID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyLT5vYmopLT53aWR0aChyLT5z
dGFydCwgci0+c3RvcC1yLT5zdGFydCwgZmlyc3RMaW5lKTsKKyAgICAgICAgICAgIHdpZHRoID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyLT5vYmopLT53aWR0aChyLT5zdGFydCwgci0+c3Rv
cC1yLT5zdGFydCwgZmlyc3RMaW5lKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByLT5v
YmotPmNhbGNXaWR0aCgpOwotICAgICAgICAgICAgci0+d2lkdGggPSByLT5vYmotPndpZHRoKCkr
ci0+b2JqLT5tYXJnaW5MZWZ0KCkrci0+b2JqLT5tYXJnaW5SaWdodCgpOworICAgICAgICAgICAg
d2lkdGggPSByLT5vYmotPndpZHRoKCkrci0+b2JqLT5tYXJnaW5MZWZ0KCkrci0+b2JqLT5tYXJn
aW5SaWdodCgpOwogICAgICAgICB9CisJci0+Ym94LT5zZXRXaWR0aCh3aWR0aCk7CiAjaWYgQklE
SV9ERUJVRyA+IDAKIAlrZERlYnVnKDYwNDApIDw8ICJvYmplY3Q9Ijw8IHItPm9iaiA8PCAiIHBs
YWNpbmcgYXQgdmVydGljYWw9IiA8PCByLT52ZXJ0aWNhbCA8PCIgd2lkdGg9IiA8PCByLT53aWR0
aCA8PGVuZGw7CiAjZW5kaWYKLSAgICAgICAgdG90V2lkdGggKz0gci0+d2lkdGg7Ci0gICAgICAg
IHIgPSBydW5zLm5leHQoKTsKKyAgICAgICAgdG90V2lkdGggKz0gd2lkdGg7CisgICAgICAgIHIg
PSBzcnVucy0+bmV4dCgpOwogICAgIH0KICAgICAvL2tkRGVidWcoNjA0MCkgPDwgInlQb3Mgb2Yg
bGluZT0iIDw8IG1faGVpZ2h0IDw8ICIgIGxpbmVCb3hIZWlnaHQ9IiA8PCBtYXhIZWlnaHQgPDwg
ZW5kbDsKIAogICAgIC8vIG5vdyBjb25zdHJ1Y3QgdGhlIHJlb3JkZXJlZCBzdHJpbmcgb3V0IG9m
IHRoZSBydW5zLi4uCiAKLSAgICByID0gcnVucy5maXJzdCgpOworICAgIHIgPSBzcnVucy0+Zmly
c3QoKTsKICAgICBpbnQgeCA9IGxlZnRPZmZzZXQobV9oZWlnaHQpOwogICAgIGludCBhdmFpbGFi
bGVXaWR0aCA9IGxpbmVXaWR0aChtX2hlaWdodCk7CiAgICAgc3dpdGNoKHN0eWxlKCktPnRleHRB
bGlnbigpKSB7CkBAIC05OTUsMTcgKzEwODAsMjMgQEAgdm9pZCBSZW5kZXJGbG93OjpiaWRpUmVv
cmRlckxpbmUoY29uc3QgQgogCQl0b3RXaWR0aCArPSBzcGFjZUFkZDsKIAkgICAgfQogCX0KLSAg
ICAgICAgci0+b2JqLT5wb3NpdGlvbih4LCByLT52ZXJ0aWNhbCwgci0+c3RhcnQsIHItPnN0b3Ag
LSByLT5zdGFydCwgci0+d2lkdGgsIHItPmxldmVsJTIsIGZpcnN0TGluZSwgc3BhY2VBZGQpOwot
ICAgICAgICB4ICs9IHItPndpZHRoICsgc3BhY2VBZGQ7Ci0gICAgICAgIHIgPSBydW5zLm5leHQo
KTsKKwlyLT5ib3gtPnNldFhQb3MoeCk7CisJci0+Ym94LT5zZXRZUG9zKHItPnZlcnRpY2FsKTsK
KwkvLyBGSVhNRTogdGhpcyBhc3NpZ25tZW50IGlzIHByb2JhYmx5IHJlZHVuZGFudAorLy8Jci0+
Ym94LT5zZXRCYXNlbGluZShiYXNlbGluZVBvc2l0aW9uKCBmaXJzdExpbmUgKSk7CisJci0+Ym94
LT5zZXRGaXJzdExpbmVTdHlsZUJpdChmaXJzdExpbmUpOworLy8Ja2REZWJ1Zyg2MDQwKSA8PCAi
c3RhcnQ6ICIgPDwgci0+c3RhcnQgPDwgIiBzdG9wOiAiIDw8IHItPnN0b3AgPDwgZW5kbDsKKyAg
ICAgICAgci0+b2JqLT5wb3NpdGlvbihyLT5ib3gsIHItPnN0YXJ0LCByLT5zdG9wIC0gci0+c3Rh
cnQsIHItPmxldmVsJTIsIHNwYWNlQWRkKTsKKyAgICAgICAgeCArPSByLT5ib3gtPndpZHRoKCkg
KyBzcGFjZUFkZDsKKwlpZiAoci0+Ym94LT5pc0lubGluZVRleHRCb3goKSkKKwkgICAgci0+Ym94
LT5zZXRXaWR0aChyLT5ib3gtPndpZHRoKCkgKyBzcGFjZUFkZCk7CisgICAgICAgIHIgPSBzcnVu
cy0+bmV4dCgpOwogICAgIH0KIAogICAgIG1faGVpZ2h0ICs9IG1heEhlaWdodDsKIAotICAgIHNy
dW5zID0gMDsKIH0KIAotCiB2b2lkIFJlbmRlckZsb3c6OmxheW91dElubGluZUNoaWxkcmVuKCBi
b29sIHJlbGF5b3V0Q2hpbGRyZW4gKQogewogICAgIGludmFsaWRhdGVWZXJ0aWNhbFBvc2l0aW9u
cygpOwpAQCAtMTAyNSw2ICsxMTE2LDkgQEAgdm9pZCBSZW5kZXJGbG93OjpsYXlvdXRJbmxpbmVD
aGlsZHJlbiggYgogICAgIG1faGVpZ2h0ICs9IHBhZGRpbmdUb3AoKTsKICAgICB0b0FkZCArPSBw
YWRkaW5nQm90dG9tKCk7CiAKKyAgICAvLyBDbGVhciBvdXQgb3VyIGxpbmUgYm94ZXMuCisgICAg
ZGVsZXRlTGluZUJveGVzKCk7CisKICAgICBpZihmaXJzdENoaWxkKCkpIHsKICAgICAgICAgLy8g
bGF5b3V0IHJlcGxhY2VkIGVsZW1lbnRzCiAgICAgICAgIFJlbmRlck9iamVjdCAqbyA9IGZpcnN0
KCB0aGlzICk7CkBAIC0xMDM3LDcgKzExMzEsOSBAQCB2b2lkIFJlbmRlckZsb3c6OmxheW91dElu
bGluZUNoaWxkcmVuKCBiCiAgICAgICAgICAgICAgICAgICAgIG8tPmxheW91dCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZihvLT5pc1RleHQoKSkKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5kZWxldGVTbGF2ZXMoIHJlbmRlckFyZW5h
KCkgKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5kZWxl
dGVUZXh0Qm94ZXMoIHJlbmRlckFyZW5hKCkgKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG8tPmlz
RmxvdygpLyogJiYgIWVuZE9mSW5saW5lKi8pCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
UmVuZGVyRmxvdyo+KG8pLT5kZWxldGVMaW5lQm94ZXMoKTsKICAgICAgICAgICAgIG8gPSBCaWRp
bmV4dCggdGhpcywgbyApOwogICAgICAgICB9CiAKQEAgLTEwNjAsMTIgKzExNTYsMzMgQEAgdm9p
ZCBSZW5kZXJGbG93OjpsYXlvdXRJbmxpbmVDaGlsZHJlbiggYgogCiAgICAgICAgIGZpcnN0TGlu
ZSA9IHRydWU7CiAgICAgICAgIHdoaWxlKCAhZW5kLmF0RW5kKCkgKSB7CisgICAgICAgICAgICBR
UHRyTGlzdDxCaWRpUnVuPiBydW5zOworICAgICAgICAgICAgcnVucy5zZXRBdXRvRGVsZXRlKHRy
dWUpOworICAgICAgICAgICAgc3J1bnMgPSAmcnVuczsKKwogICAgICAgICAgICAgc3RhcnQgPSBl
bmQ7CiAKICAgICAgICAgICAgIGVuZCA9IGZpbmROZXh0TGluZUJyZWFrKHN0YXJ0KTsKICAgICAg
ICAgICAgIGlmKCBzdGFydC5hdEVuZCgpICkgYnJlYWs7CiAJICAgIGJpZGlSZW9yZGVyTGluZShz
dGFydCwgZW5kKTsKIAorCSAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNydW5zICYmIHNydW5z
LT5jb3VudCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBsaW5l
Qm94ID0gY29uc3RydWN0TGluZShzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGxpbmVCb3gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwb3NpdGlvbiBh
bGwgb2Ygb3VyIHRleHQgYm94ZXMgaG9yaXpvbnRhbGx5LgorLy8gICAgICAgICAgICAgICAgICAg
ICAgICBjb21wdXRlSG9yaXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUobGluZUJveCwgY29udGV4dCk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBwb3NpdGlvbiBvdXIgdGV4dCBib3hl
cyB2ZXJ0aWNhbGx5LgorLy8gICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmVydGljYWxQ
b3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gpOworCQkJY29tcHV0ZVBvc2l0aW9uc0ZvckxpbmUobGlu
ZUJveCwgY29udGV4dCk7CisKKwkJCS8vIEZJWE1FOiBuZWVkcyBwb3J0aW5nIG9mIHNydW5zIHRv
IHMqQmlkaVJ1biBzdHVmZgorICAgICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGVCaWRpUnVu
cyhyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKwkgICAgfQorCiAgICAgICAgICAgICBpZiggZW5kID09IHN0YXJ0IHx8IChlbmQub2JqICYm
IGVuZC5vYmotPmlzQlIoKSAmJiAhc3RhcnQub2JqLT5pc0JSKCkgKSApIHsKIAkJYWRqdXN0RW1i
ZWRkZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgKytlbmQ7CkBAIC0xMDc5LDYgKzExOTYs
NyBAQCB2b2lkIFJlbmRlckZsb3c6OmxheW91dElubGluZUNoaWxkcmVuKCBiCiAgICAgICAgICAg
ICBuZXdMaW5lKCk7CiAgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKICAgICAgICAgfQor
CXNydW5zID0gMDsKIAogCS8vIGNsZWFuIHVwCiAJd2hpbGUgKCBjb250ZXh0ICkgewpAQCAtMTE1
MCw3ICsxMjY4LDcgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckZsb3c6OmZpbmROZXh0TGluZUJyZQog
CiAgICAgd2hpbGUoIG8gKSB7CiAjaWZkZWYgREVCVUdfTElORUJSRUFLUwotICAgICAgICBrZERl
YnVnKDYwNDEpIDw8ICJuZXcgb2JqZWN0ICI8PCBvIDw8IiB3aWR0aCA9ICIgPDwgdyA8PCIgdG1w
dyA9ICIgPDwgdG1wVyA8PCBlbmRsOworICAgICAgICBrZERlYnVnKDYwNDEpIDw8ICJuZXcgIjw8
IG8tPnJlbmRlck5hbWUoKSA8PCAiQCI8PCBvIDw8IiB3aWR0aCA9ICIgPDwgdyA8PCIgdG1wdyA9
ICIgPDwgdG1wVyA8PCBlbmRsOwogI2VuZGlmCiAgICAgICAgIGlmKG8tPmlzQlIoKSkgewogICAg
ICAgICAgICAgaWYoIHcgKyB0bXBXIDw9IHdpZHRoICkgewpJbmRleDogcmVuZGVyaW5nL2JpZGku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcv
YmlkaS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2IGJpZGku
aAotLS0gcmVuZGVyaW5nL2JpZGkuaAkxNyBNYXkgMjAwMyAyMjoxMjo1OCAtMDAwMAkxLjE2Cisr
KyByZW5kZXJpbmcvYmlkaS5oCTE4IEF1ZyAyMDAzIDIxOjUyOjQ0IC0wMDAwCkBAIC0yOSw2ICsy
OSw3IEBAIG5hbWVzcGFjZSBraHRtbCB7CiAgICAgY2xhc3MgUmVuZGVyRmxvdzsKICAgICBjbGFz
cyBSZW5kZXJPYmplY3Q7CiAgICAgY2xhc3MgUmVuZGVyQXJlbmE7CisgICAgY2xhc3MgSW5saW5l
Qm94OwogCiAgICAgY2xhc3MgQmlkaUNvbnRleHQgewogICAgIHB1YmxpYzoKQEAgLTUyLDggKzUz
LDggQEAgbmFtZXNwYWNlIGtodG1sIHsKIAogICAgIHN0cnVjdCBCaWRpUnVuIHsKIAlCaWRpUnVu
KGludCBfc3RhcnQsIGludCBfc3RvcCwgUmVuZGVyT2JqZWN0ICpfb2JqLCBCaWRpQ29udGV4dCAq
Y29udGV4dCwgUUNoYXI6OkRpcmVjdGlvbiBkaXIpCi0JICAgIDogIHZlcnRpY2FsKCAwICksIGJh
c2VsaW5lKCAwICksIGhlaWdodCggMCApLCB3aWR0aCggMCApLAotCSAgICAgICBzdGFydCggX3N0
YXJ0ICksIHN0b3AoIF9zdG9wICksIG9iaiggX29iaiApCisJICAgIDogIHZlcnRpY2FsKCAwICks
CisJICAgICAgIHN0YXJ0KCBfc3RhcnQgKSwgc3RvcCggX3N0b3AgKSwgb2JqKCBfb2JqICksIGJv
eCgwKQogCXsKIAkgICAgaWYoZGlyID09IFFDaGFyOjpEaXJPTikgZGlyID0gY29udGV4dC0+ZGly
OwogCkBAIC03MiwxMyArNzMsMTEgQEAgbmFtZXNwYWNlIGtodG1sIHsKIAl9CiAKIAlpbnQgdmVy
dGljYWw7Ci0Jc2hvcnQgYmFzZWxpbmU7Ci0Jc2hvcnQgaGVpZ2h0OwotCWludCB3aWR0aDsKIAog
CWludCBzdGFydDsKIAlpbnQgc3RvcDsKIAlSZW5kZXJPYmplY3QgKm9iajsKKyAgICAgICAgSW5s
aW5lQm94KiBib3g7CiAKIAkvLyBleHBsaWNpdCArIGltcGxpY2l0IGxldmVscyBoZXJlCiAJdWNo
YXIgbGV2ZWw7CkluZGV4OiByZW5kZXJpbmcvZm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9o
b21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9mb250LmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIgZm9udC5oCi0tLSByZW5kZXJpbmcvZm9udC5oCTIg
QXByIDIwMDMgMTY6NTk6NTAgLTAwMDAJMS4xMgorKysgcmVuZGVyaW5nL2ZvbnQuaAkxOCBBdWcg
MjAwMyAyMTo1Mjo0NCAtMDAwMApAQCAtODQsOSArODQsMzEgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBkcmF3VGV4dCggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgUUNoYXIgKnN0ciwgaW50IHNs
ZW4sIGludCBwb3MsIGludCBsZW4sIGludCB3aWR0aCwKICAgICAgICAgICAgICAgICAgICBRUGFp
bnRlcjo6VGV4dERpcmVjdGlvbiBkLCBpbnQgZnJvbT0tMSwgaW50IHRvPS0xLCBRQ29sb3IgYmc9
UUNvbG9yKCkgKSBjb25zdDsKLQorICAgICAgICAgICAgCisgICAgLyoqIHJldHVybnMgdGhlIHdp
ZHRoIG9mIHRoZSBnaXZlbiBzdHJpbmcgY2h1bmsgaW4gcGl4ZWxzLgorICAgICAqCisgICAgICog
VGhlIG1ldGhvZCBhbHNvIGNvbnNpZGVycyB2YXJpb3VzIHN0eWxlcyBsaWtlIHRleHQtYWxpZ24g
YW5kIGZvbnQtdmFyaWFudAorICAgICAqIEBwYXJhbSBzdHIgcG9pbnRlciB0byBzdHJpbmcKKyAg
ICAgKiBAcGFyYW0gc2xlbiB0b3RhbCBsZW5ndGggb2Ygc3RyaW5nCisgICAgICogQHBhcmFtIHBv
cyB6ZXJvLWJhc2VkIHBvc2l0aW9uIGluIHN0cmluZyB3aGVyZSB0byBzdGFydCBtZWFzdXJpbmcK
KyAgICAgKiBAcGFyYW0gbGVuIGNvdW50IG9mIGNoYXJhY3RlcnMgdXAgdG8gd2hpY2ggdGhlIHdp
ZHRoIHNob3VsZCBiZSBkZXRlcm1pbmVkCisgICAgICovCiAgICAgaW50IHdpZHRoKCBRQ2hhciAq
c3RyLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiApIGNvbnN0OwotICAgIGludCB3aWR0aCgg
UUNoYXIgKnN0ciwgaW50IHNsZW4sIGludCBwb3MgKSBjb25zdDsKKyAgICAvKiogcmV0dXJuIHRo
ZSB3aWR0aCBvZiB0aGUgZ2l2ZW4gY2hhciBpbiBwaXhlbHMuCisgICAgICoKKyAgICAgKiBUaGUg
bWV0aG9kIGFsc28gY29uc2lkZXJzIHZhcmlvdXMgc3R5bGVzIGxpa2UgdGV4dC1hbGlnbiBhbmQg
Zm9udC12YXJpYW50CisgICAgICogQHBhcmFtIHN0ciBwb2ludGVyIHRvIHN0cmluZworICAgICAq
IEBwYXJhbSBzbGVuIHRvdGFsIGxlbmd0aCBvZiBzdHJpbmcKKyAgICAgKiBAcGFyYW0gcG9zIHpl
cm8tYmFzZWQgcG9zaXRpb24gb2YgY2hhciBpbiBzdHJpbmcKKyAgICAgKi8KKyAgICBpbnQgd2lk
dGgoIFFDaGFyICpzdHIsIGludCBzbGVuLCBpbnQgcG9zKSBjb25zdDsKKyAgICAKKyAgICAvKiog
cmV0dXJucyBsZXR0ZXIgc3BhY2luZworICAgICAqLworICAgIGludCBnZXRMZXR0ZXJTcGFjaW5n
KCkgY29uc3QgeyByZXR1cm4gbGV0dGVyU3BhY2luZzsgfQorICAgIC8qKiByZXR1cm5zIHdvcmQg
c3BhY2luZworICAgICAqLworICAgIGludCBnZXRXb3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJu
IHdvcmRTcGFjaW5nOyB9CiAKIHByaXZhdGU6CiAgICAgRm9udERlZiBmb250RGVmOwpJbmRleDog
cmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9r
ZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xOTgKZGlmZiAtdSAtcCAtcjEuMTk4IHJlbmRlcl9ib3guY3BwCi0tLSByZW5kZXJpbmcv
cmVuZGVyX2JveC5jcHAJMTggRmViIDIwMDMgMjE6MTA6NDUgLTAwMDAJMS4xOTgKKysrIHJlbmRl
cmluZy9yZW5kZXJfYm94LmNwcAkxOCBBdWcgMjAwMyAyMTo1Mjo0NSAtMDAwMApAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgInJlbmRlcl9sYXllci5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGhh
c2hlcy5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIKKyNpbmNsdWRlICJyZW5kZXJf
bGluZS5oIgogCiAjaW5jbHVkZSA8a2h0bWx2aWV3Lmg+CiAjaW5jbHVkZSA8a2RlYnVnLmg+CkBA
IC00MTUsMTAgKzQxNiwxMCBAQCBib29sIFJlbmRlckJveDo6YWJzb2x1dGVQb3NpdGlvbihpbnQg
JnhQCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJveDo6cG9zaXRpb24oaW50IHgsIGludCB5LCBp
bnQsIGludCwgaW50LCBib29sLCBib29sLCBpbnQpCit2b2lkIFJlbmRlckJveDo6cG9zaXRpb24o
SW5saW5lQm94KiBib3gsIGludCAvKmZyb20qLywgaW50IC8qbGVuKi8sIGJvb2wgLypyZXZlcnNl
Ki8sIGludCkKIHsKLSAgICBtX3ggPSB4ICsgbWFyZ2luTGVmdCgpOwotICAgIG1feSA9IHk7Cisg
ICAgbV94ID0gYm94LT54UG9zKCkgKyBtYXJnaW5MZWZ0KCk7CisgICAgbV95ID0gYm94LT55UG9z
KCk7CiAgICAgLy8gIyMjIHBhZGRpbmdzCiAgICAgLy9tX3dpZHRoID0gd2lkdGg7CiB9CkBAIC0x
MDA4LDYgKzEwMDksNDcgQEAgaW50IFJlbmRlckJveDo6cmlnaHRtb3N0UG9zaXRpb24oKSBjb25z
dAogICAgIGlmICggbV9sYXllciApCiAJcmlnaHQgPSBRTUFYKCByaWdodCwgbV9sYXllci0+d2lk
dGgoKSApOwogICAgIHJldHVybiBtX3dpZHRoOworfQorCit2b2lkIFJlbmRlckJveDo6Y2FyZXRQ
b3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZ3aWR0
aCwgaW50ICZoZWlnaHQpCit7CisgICAgX3ggPSAtMTsKKworICAgIC8vIHByb3BhZ2F0ZSBpdCBk
b3dud2FyZHMgdG8gaXRzIGNoaWxkcmVuLCBzb21lb25lIHdpbGwgZmVlbCByZXNwb25zaWJsZQor
ICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgaWYgKGNoaWxkKSBr
ZERlYnVnKDYwNDApIDw8ICJkZWxlZ2F0aW5nIGNhcmV0UG9zIHRvICIgPDwgY2hpbGQtPnJlbmRl
ck5hbWUoKSA8PCBlbmRsOworICAgIGlmIChjaGlsZCkgY2hpbGQtPmNhcmV0UG9zKG9mZnNldCwg
b3ZlcnJpZGUsIF94LCBfeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBpZiBub3QsIHVzZSB0
aGUgZXh0ZW50cyBvZiB0aGlzIGJveC4gb2Zmc2V0IDAgbWVhbnMgbGVmdCwgb2Zmc2V0IDEgbWVh
bnMKKyAgICAvLyByaWdodAorICAgIGlmIChfeCA9PSAtMSkgeworICAgICAgICBrZERlYnVnKDYw
NDApIDw8ICJubyBkZWxlZ2F0aW9uIiA8PCBlbmRsOworICAgICAgICBfeCA9IHhQb3MoKSArIChv
ZmZzZXQgPT0gMCA/IDAgOiBtX3dpZHRoKTsKKwlfeSA9IHlQb3MoKTsKKwloZWlnaHQgPSBtX2hl
aWdodDsKKwl3aWR0aCA9IG92ZXJyaWRlICYmIG9mZnNldCA9PSAwID8gbV93aWR0aCA6IDE7CisJ
CisJLy8gSWYgaGVpZ2h0IG9mIGJveCBpcyBzbWFsbGVyIHRoYW4gZm9udCBoZWlnaHQsIHVzZSB0
aGUgbGF0dGVyIG9uZSwKKwkvLyBvdGhlcndpc2UgdGhlIGNhcmV0IG1pZ2h0IGJlY29tZSBpbnZp
c2libGUuCisJLy8gRklYTUU6IGlnbm9yaW5nIDpmaXJzdC1saW5lLCBtaXNzaW5nIGdvb2QgcmVh
c29uIHRvIHRha2UgY2FyZSBvZgorCWludCBmb250SGVpZ2h0ID0gc3R5bGUoKS0+Zm9udE1ldHJp
Y3MoKS5oZWlnaHQoKTsKKwlpZiAoZm9udEhlaWdodCA+IGhlaWdodCkKKwkgIGhlaWdodCA9IGZv
bnRIZWlnaHQ7CisKKyAgICAgICAgaW50IGFic3gsIGFic3k7CisKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0ICpjYiA9IGNvbnRhaW5pbmdCbG9jaygpOworCisgICAgICAgIGlmIChjYiAmJiBjYiAhPSB0
aGlzICYmIGNiLT5hYnNvbHV0ZVBvc2l0aW9uKGFic3gsYWJzeSkpIHsKKyAgICAgICAgICAgIC8v
a2REZWJ1Zyg2MDQwKSA8PCAiYWJzeD0iIDw8IGFic3ggPDwgIiBhYnN5PSIgPDwgYWJzeSA8PCBl
bmRsOworICAgICAgICAgICAgX3ggKz0gYWJzeDsKKyAgICAgICAgICAgIF95ICs9IGFic3k7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyB3ZSBkb24ndCBrbm93IG91ciBhYnNvbHV0
ZSBwb3NpdGlvbiwgYW5kIHRoZXJlIGlzIG5vIHBvaW50IHJldHVybmluZworICAgICAgICAgICAg
Ly8ganVzdCBhIHJlbGF0aXZlIG9uZQorICAgICAgICAgICAgX3ggPSBfeSA9IC0xOworICAgICAg
ICB9LyplbmQgaWYqLworICAgIH0vKmVuZCBpZiovCiB9CiAKICN1bmRlZiBERUJVR19MQVlPVVQK
SW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfYm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUv
a2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS42MwpkaWZmIC11IC1wIC1yMS42MyByZW5kZXJfYm94LmgKLS0tIHJlbmRlcmluZy9y
ZW5kZXJfYm94LmgJMTcgTWF5IDIwMDMgMjI6MTI6NTggLTAwMDAJMS42MworKysgcmVuZGVyaW5n
L3JlbmRlcl9ib3guaAkxOCBBdWcgMjAwMyAyMTo1Mjo0NiAtMDAwMApAQCAtNzMsNyArNzMsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFdpZHRoKCBpbnQgd2lkdGggKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0SGVpZ2h0KCBpbnQgaGVpZ2h0ICk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
cG9zaXRpb24oaW50IHgsIGludCB5LCBpbnQgZnJvbSwgaW50IGxlbiwgaW50IHdpZHRoLCBib29s
IHJldmVyc2UsIGJvb2wgZmlyc3RMaW5lLCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlv
bihJbmxpbmVCb3gqIGJveCwgaW50IGZyb20sIGludCBsZW4sIGJvb2wgcmV2ZXJzZSwgaW50KTsK
IAogICAgIHZpcnR1YWwgaW50IGxvd2VzdFBvc2l0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBp
bnQgcmlnaHRtb3N0UG9zaXRpb24oKSBjb25zdDsKQEAgLTk3LDYgKzk3LDggQEAgcHVibGljOgog
ICAgIHZvaWQgY2FsY1ZlcnRpY2FsTWFyZ2lucygpOwogCiAgICAgdmlydHVhbCBSZW5kZXJMYXll
ciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50ICZfeSwgaW50
ICZ3aWR0aCwgaW50ICZoZWlnaHQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50Qm94RGVjb3JhdGlvbnMoUVBhaW50ZXIgKnAsaW50IF94LCBpbnQgX3ksCkluZGV4OiByZW5k
ZXJpbmcvcmVuZGVyX2JyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGli
cy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NQpkaWZmIC11IC1wIC1yMS4xNSByZW5kZXJfYnIuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX2Jy
LmNwcAkxNCBKYW4gMjAwMiAxOTo1Njo0NSAtMDAwMAkxLjE1CisrKyByZW5kZXJpbmcvcmVuZGVy
X2JyLmNwcAkxOCBBdWcgMjAwMyAyMTo1Mjo0NiAtMDAwMApAQCAtMzUsMjEgKzM1LDI1IEBAIFJl
bmRlckJSOjp+UmVuZGVyQlIoKQogewogfQogCi12b2lkIFJlbmRlckJSOjpjdXJzb3JQb3MoaW50
IC8qb2Zmc2V0Ki8sIGludCAmX3gsIGludCAmX3ksIGludCAmaGVpZ2h0KQordm9pZCBSZW5kZXJC
Ujo6Y2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50ICZfeSwg
aW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpCiB7CisgIFJlbmRlclRleHQ6OmNhcmV0UG9zKG9mZnNl
dCxvdmVycmlkZSxfeCxfeSx3aWR0aCxoZWlnaHQpOworICByZXR1cm47CisjaWYgMAogICAgIGlm
IChwcmV2aW91c1NpYmxpbmcoKSAmJiAhcHJldmlvdXNTaWJsaW5nKCktPmlzQlIoKSAmJiAhcHJl
dmlvdXNTaWJsaW5nKCktPmlzRmxvYXRpbmcoKSkgewogICAgICAgICBpbnQgb2Zmc2V0ID0gMDsK
ICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZygpLT5pc1RleHQoKSkKLSAgICAgICAgICAgIG9m
ZnNldCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihwcmV2aW91c1NpYmxpbmcoKSktPmxlbmd0
aCgpOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHByZXZp
b3VzU2libGluZygpKS0+bWF4T2Zmc2V0KCk7CiAKLSAgICAgICAgcHJldmlvdXNTaWJsaW5nKCkt
PmN1cnNvclBvcyhvZmZzZXQsX3gsX3ksaGVpZ2h0KTsKKwkvLyBGSVhNRTogdGhpcyB3b24ndCBy
ZXR1cm4gYSBiaWcgd2lkdGggaW4gb3ZlcnJpZGUgbW9kZSAoTFMpCisgICAgICAgIHByZXZpb3Vz
U2libGluZygpLT5jYXJldFBvcyhvZmZzZXQsb3ZlcnJpZGUsX3gsX3ksd2lkdGgsaGVpZ2h0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGludCBhYnN4LCBhYnN5OwogICAgIGFic29s
dXRlUG9zaXRpb24oYWJzeCxhYnN5KTsKICAgICBpZiAoYWJzeCA9PSAtMSkgewotICAgICAgICAv
LyB3ZSBkb24ndCBrbm93IG91dCBhYnNvbHVhdGUgcG9zaXRpb24sIGFuZCB0aGVyZSBpcyBub3Qg
cG9pbnQgcmV0dXJuaW5nCisgICAgICAgIC8vIHdlIGRvbid0IGtub3cgb3V0IGFic29sdXRlIHBv
c2l0aW9uLCBhbmQgdGhlcmUgaXMgbm8gcG9pbnQgcmV0dXJuaW5nCiAgICAgICAgIC8vIGp1c3Qg
YSByZWxhdGl2ZSBvbmUKICAgICAgICAgX3ggPSBfeSA9IC0xOwogICAgIH0KQEAgLTU4LDYgKzYy
LDcgQEAgdm9pZCBSZW5kZXJCUjo6Y3Vyc29yUG9zKGludCAvKm9mZnNldCovLAogICAgICAgICBf
eSArPSBhYnN5OwogICAgIH0KICAgICBoZWlnaHQgPSBSZW5kZXJUZXh0Ojp2ZXJ0aWNhbFBvc2l0
aW9uSGludCggZmFsc2UgKTsKLQorICAgIHdpZHRoID0gb3ZlcnJpZGUgPyBoZWlnaHQgLyAyIDog
MTsKKyNlbmRpZgogfQogCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2JyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ici5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXUgLXAgLXIxLjE5IHJlbmRlcl9ici5oCi0t
LSByZW5kZXJpbmcvcmVuZGVyX2JyLmgJMTcgTWF5IDIwMDMgMjI6MTI6NTggLTAwMDAJMS4xOQor
KysgcmVuZGVyaW5nL3JlbmRlcl9ici5oCTE4IEF1ZyAyMDAzIDIxOjUyOjQ2IC0wMDAwCkBAIC01
NSw3ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBzaG9ydCBtYXhXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0JSKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBjdXJzb3JQb3MoaW50IG9mZnNldCwgaW50ICZfeCwg
aW50ICZfeSwgaW50ICZoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBjYXJldFBvcyhpbnQgb2Zm
c2V0LCBib29sIG92ZXJyaWRlLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJndpZHRoLCBpbnQgJmhl
aWdodCk7CisgICAgLyoqIHJldHVybnMgdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZSB0aGUgY2Fy
ZXQgb2Zmc2V0IG1heSBoYXZlIHRvCisgICAgICogc3RpbGwgcG9pbnQgdG8gYSB2YWxpZCBwb3Np
dGlvbi4KKyAgICAgKgorICAgICAqIFJldHVybnMgMC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGxv
bmcgbWluT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIC8qKiByZXR1cm5zIHRoZSBo
aWdoZXN0IHBvc3NpYmxlIHZhbHVlIHRoZSBjYXJldCBvZmZzZXQgbWF5IGhhdmUgdG8KKyAgICAg
KiBzdGlsbCBwb2ludCB0byBhIHZhbGlkIHBvc2l0aW9uLgorICAgICAqCisgICAgICogUmV0dXJu
cyBhbHNvIDAsIGFzIEJScyBoYXZlIG5vIHdpZHRoLgorICAgICAqLworICAgIHZpcnR1YWwgbG9u
ZyBtYXhPZmZzZXQoKSBjb25zdCB7IHJldHVybiAwOyB9CiB9OwogCiB9CkluZGV4OiByZW5kZXJp
bmcvcmVuZGVyX2Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJz
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzMwCmRpZmYgLXUgLXAgLXIxLjMzMCByZW5kZXJfZmxvdy5jcHAKLS0tIHJlbmRlcmluZy9yZW5k
ZXJfZmxvdy5jcHAJMjEgSnVuIDIwMDMgMDk6MTQ6NTIgLTAwMDAJMS4zMzAKKysrIHJlbmRlcmlu
Zy9yZW5kZXJfZmxvdy5jcHAJMTggQXVnIDIwMDMgMjE6NTI6NDggLTAwMDAKQEAgLTcyLDYgKzcy
LDU0IEBAIFJlbmRlckZsb3c6OlJlbmRlckZsb3coRE9NOjpOb2RlSW1wbCogbm8KICAgICBtX292
ZXJmbG93SGVpZ2h0ID0gMDsKIAogICAgIG1fY29udGludWF0aW9uID0gMDsKKyAgICBtX2ZpcnN0
TGluZUJveCA9IDA7CisgICAgbV9sYXN0TGluZUJveCA9IDA7Cit9CisKK3ZvaWQgUmVuZGVyRmxv
dzo6ZGVsZXRlTGluZUJveGVzKFJlbmRlckFyZW5hKiBhcmVuYSkKK3sKKyAgICBpZiAobV9maXJz
dExpbmVCb3gpIHsKKyAgICAgICAgaWYgKCFhcmVuYSkKKyAgICAgICAgICAgIGFyZW5hID0gcmVu
ZGVyQXJlbmEoKTsKKyAgICAgICAgSW5saW5lUnVuQm94ICpjdXJyPW1fZmlyc3RMaW5lQm94LCAq
bmV4dD0wOworICAgICAgICB3aGlsZSAoY3VycikgeworICAgICAgICAgICAgbmV4dCA9IGN1cnIt
Pm5leHRMaW5lQm94KCk7CisgICAgICAgICAgICBjdXJyLT5kZXRhY2goYXJlbmEpOworICAgICAg
ICAgICAgY3VyciA9IG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgbV9maXJzdExpbmVCb3ggPSAw
OworICAgICAgICBtX2xhc3RMaW5lQm94ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyRmxv
dzo6ZGV0YWNoKFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSkKK3sKKyAgICBkZWxldGVMaW5lQm94
ZXMocmVuZGVyQXJlbmEpOworICAgIFJlbmRlckJveDo6ZGV0YWNoKHJlbmRlckFyZW5hKTsKK30K
KworSW5saW5lQm94KiBSZW5kZXJGbG93OjpjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VI
b2xkZXJCb3gpCit7CisgICAgaWYgKGlzUmVwbGFjZWQoKSB8fCBtYWtlUGxhY2VIb2xkZXJCb3gp
ICAgICAgICAgIC8vIElubGluZSB0YWJsZXMgYW5kIGlubGluZSBibG9ja3MKKyAgICAgICAgcmV0
dXJuIFJlbmRlckJveDo6Y3JlYXRlSW5saW5lQm94KGZhbHNlKTsgICAgLy8gKG9yIHBvc2l0aW9u
ZWQgZWxlbWVudCBwbGFjZWhvbGRlcnMpLgorCisgICAgSW5saW5lRmxvd0JveCogZmxvd0JveCA9
IDA7CisgICAgLy8gRklYTUU6IGNhbm5vdCBiZSBkZWNpZGVkIGJlZm9yZSBmdWxsIG1lcmdlIGhh
cyBiZWVuIGRvbmUsIHNpbXBseSB0cmVhdAorICAgIC8vIGl0IGFzIGFuIElubGluZUZsb3dCb3gg
Yi9jIGl0J3MgaXJyZWxldmFudCBpbiB0aGUgb2xkIGNvZGUgKExTKQorLy8gICAgaWYgKGlzSW5s
aW5lRmxvdygpKQorICAgICAgICBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBJbmxpbmVG
bG93Qm94KHRoaXMpOworLy8gICAgZWxzZQorLy8gICAgICAgIGZsb3dCb3ggPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIFJvb3RJbmxpbmVCb3godGhpcyk7CisKKyAgICBpZiAoIW1fZmlyc3RMaW5lQm94
KQorICAgICAgICBtX2ZpcnN0TGluZUJveCA9IG1fbGFzdExpbmVCb3ggPSBmbG93Qm94OworICAg
IGVsc2UgeworICAgICAgICBtX2xhc3RMaW5lQm94LT5zZXROZXh0TGluZUJveChmbG93Qm94KTsK
KyAgICAgICAgZmxvd0JveC0+c2V0UHJldmlvdXNMaW5lQm94KG1fbGFzdExpbmVCb3gpOworICAg
ICAgICBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKKyAgICB9CisKKyAgICByZXR1cm4gZmxvd0Jv
eDsKIH0KIAogdm9pZCBSZW5kZXJGbG93OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqX3N0eWxlKQpA
QCAtMTg0MSw2ICsxODg5LDU0IEBAIGJvb2wgUmVuZGVyRmxvdzo6bm9kZUF0UG9pbnQoTm9kZUlu
Zm8mIGkKIAogICAgIGluQm94IHw9IFJlbmRlckJveDo6bm9kZUF0UG9pbnQoaW5mbywgX3gsIF95
LCBfdHgsIF90eSk7CiAgICAgcmV0dXJuIGluQm94OworfQorCit2b2lkIFJlbmRlckZsb3c6OmNh
cmV0UG9zKGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGludCAmX3gsIGludCAmX3ksIGludCAm
d2lkdGgsIGludCAmaGVpZ2h0KQoreworICAvLyBUaGlzIGlzIG9ubHkgbmVlZGVkIGZvciBhIHNw
ZWNpYWwgY2FzZToKKyAgLy8gVGhlIGVsZW1lbnQgaXMgbm90IGFuIGlubGluZSBlbGVtZW50LCBh
bmQgaXQncyBlbXB0eS4gU28gd2UgaGF2ZSB0bworICAvLyBjYWxjdWxhdGUgYSBmYWtlIHBvc2l0
aW9uIHRvIGluZGljYXRlIHdoZXJlIG9iamVjdHMgYXJlIHRvIGJlIGluc2VydGVkLgorCisgIFJl
bmRlclN0eWxlICpzdCA9IHN0eWxlKCk7CisgIGlmIChmaXJzdENoaWxkKCkKKyAgICB8fCBzdC0+
ZGlzcGxheSgpID09IElOTElORSkgeyAvLyAjIyMgaG1tLCB3aGF0IGVsc2UgaW5saW5pc2ggc3R1
ZmYgY2FuIGEgcmVuZGVyIGZsb3cgcmVwcmVzZW50PworICAgIFJlbmRlckJveDo6Y2FyZXRQb3Mo
b2Zmc2V0LCBvdmVycmlkZSwgX3gsIF95LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm47Cisg
IH0vKmVuZCBpZiovCisKKyAgLy8gRklYTUU6IHRoaXMgZG9lcyBuZWl0aGVyIHRha2UgaW50byBy
ZWdhcmQgOmZpcnN0LWxpbmUgbm9yIDpmaXJzdC1sZXR0ZXIKKyAgLy8gSG93ZXZlciwgYXMgc29v
biBhcyBzb21lIGNvbnRlbnQgaXMgZW50ZXJlZCwgdGhlIGxpbmUgYm94ZXMgd2lsbCBiZQorICAv
LyBjb25zdHJ1Y3RlZCBwcm9wZXJseSBhbmQgdGhpcyBrbHVkZ2UgaXMgbm90IGNhbGxlZCBhbnkg
bW9yZS4gU28gb25seQorICAvLyB0aGUgY2FyZXQgc2l6ZSBvZiBhbiBlbXB0eSA6Zmlyc3QtbGlu
ZSdkIGJsb2NrIGlzIHdyb25nLCBidXQgSSB0aGluayB3ZQorICAvLyBjYW4gbGl2ZSB3aXRoIHRo
YXQuCisgIGhlaWdodCA9IHN0LT5mb250TWV0cmljcygpLmhlaWdodCgpOworICB3aWR0aCA9IDE7
CisKKyAgLy8gIyMjIHJlZ2FyZCBkaXJlY3Rpb24KKyAgaW50IHcgPSB0aGlzLT53aWR0aCgpOwor
ICBzd2l0Y2ggKHN0LT50ZXh0QWxpZ24oKSkgeworICAgIGNhc2UgTEVGVDoKKyAgICBjYXNlIFRB
QVVUTzoJLy8gIyMjIGZpbmQgb3V0IHdoYXQgdGhpcyBkb2VzCisgICAgY2FzZSBKVVNUSUZZOgor
ICAgICAgX3ggPSAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDRU5URVI6CisgICAgY2FzZSBL
T05RX0NFTlRFUjoKKyAgICAgIF94ID0gdyAvIDI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFJJ
R0hUOgorICAgICAgX3ggPSB3OworICAgICAgYnJlYWs7CisgIH0vKmVuZCBzd2l0Y2gqLworCisg
IF95ID0gMDsKKy8vICBrZERlYnVnKDYwNDApIDw8ICJSZW5kZXJGbG93OjpjYXJldFBvczogeD0i
IDw8IF94IDw8ICIgeSA9ICIgPDwgX3kgPDwgZW5kbDsKKworICBpbnQgYWJzeCwgYWJzeTsKKyAg
YWJzb2x1dGVQb3NpdGlvbihhYnN4LCBhYnN5LCBmYWxzZSk7CisgIF94ICs9IGFic3g7CisgIF95
ICs9IGFic3k7CisvLyAga2REZWJ1Zyg2MDQwKSA8PCAiUmVuZGVyRmxvdzo6Y2FyZXRQb3MoMik6
IHg9IiA8PCBfeCA8PCAiIHkgPSAiIDw8IF95IDw8IGVuZGw7CiB9CiAKICNpZm5kZWYgTkRFQlVH
CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2Zsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9t
ZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS44MQpkaWZmIC11IC1wIC1yMS44MSByZW5kZXJfZmxvdy5oCi0tLSByZW5kZXJp
bmcvcmVuZGVyX2Zsb3cuaAkxNyBNYXkgMjAwMyAyMjoxMjo1OCAtMDAwMAkxLjgxCisrKyByZW5k
ZXJpbmcvcmVuZGVyX2Zsb3cuaAkxOCBBdWcgMjAwMyAyMTo1Mjo0OCAtMDAwMApAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgImJpZGkuaCIKIAogbmFtZXNwYWNlIGtodG1sIHsKKyAgY2xhc3Mg
SW5saW5lRmxvd0JveDsKIAogLyoqCiAgKiBhbGwgZ2VvbWV0cnkgbWFuYWdpbmcgc3R1ZmYgaXMg
b25seSBpbiB0aGUgYmxvY2sgZWxlbWVudHMuCkBAIC03MSw4ICs3MiwxNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIG1ha2VDaGlsZHJlbk5vbklubGluZShSZW5kZXJPYmplY3QgKmJveDJTdGFydCA9
IDApOwogCisgICAgdm9pZCBkZWxldGVMaW5lQm94ZXMoUmVuZGVyQXJlbmEqIGFyZW5hPTApOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goUmVuZGVyQXJlbmEqIGFyZW5hKTsKKworICAgIElubGlu
ZUZsb3dCb3gqIGZpcnN0TGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lQm94OyB9
CisgICAgSW5saW5lRmxvd0JveCogbGFzdExpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2xhc3RM
aW5lQm94OyB9CisKICAgICAvLyBvdmVycmlkZXMgUmVuZGVyT2JqZWN0CiAKKyAgICB2aXJ0dWFs
IElubGluZUJveCogY3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94KTsKKwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludCggUVBhaW50ZXIgKiwgaW50IHgsIGludCB5LCBpbnQgdywg
aW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHgsIGludCB0eSwgUGFpbnRBY3Rp
b24gcGFpbnRQaGFzZSk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KCBRUGFpbnRlciAq
LCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKQEAgLTExNCw2ICsxMjMsOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoTm9kZUluZm8mIGluZm8sIGludCB4LCBp
bnQgeSwgaW50IHR4LCBpbnQgdHkpOwogCisgICAgdmlydHVhbCB2b2lkIGNhcmV0UG9zKGludCBv
ZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGludCAmX3gsIGludCAmX3ksIGludCAmd2lkdGgsIGludCAm
aGVpZ2h0KTsKKwogcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIG5ld0xpbmUoKTsKQEAg
LTE0Myw2ICsxNTQsMTEgQEAgcHVibGljOgogICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIHRoZSBm
b2xsb3dpbmcgZnVuY3Rpb25zIGlzIGluIGJpZGkuY3BwCiAgICAgdm9pZCBiaWRpUmVvcmRlckxp
bmUoY29uc3QgQmlkaUl0ZXJhdG9yICZzdGFydCwgY29uc3QgQmlkaUl0ZXJhdG9yICZlbmQpOwog
ICAgIEJpZGlJdGVyYXRvciBmaW5kTmV4dExpbmVCcmVhayhCaWRpSXRlcmF0b3IgJnN0YXJ0KTsK
KyAgICBJbmxpbmVGbG93Qm94KiBjb25zdHJ1Y3RMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciYgc3Rh
cnQsIGNvbnN0IEJpZGlJdGVyYXRvciYgZW5kKTsKKyAgICBJbmxpbmVGbG93Qm94KiBjcmVhdGVM
aW5lQm94ZXMoUmVuZGVyT2JqZWN0KiBvYmopOworICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgc3Bs
aXQgaW50byBjb21wdXRlSG9yaXpvbnRhbC0vLVZlcnRpY2FsLi4uIGxpa2UgaW4KKyAgICAvLyBX
ZWJDb3JlIGJ1dCBhcyBpdCdsbCBnZXQgbWVyZ2VkIGFueXdheSBpdCdzIG5vdCB3b3J0aCBpdAor
ICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uc0ZvckxpbmUoSW5saW5lRmxvd0JveCogbGluZUJveCwg
QmlkaUNvbnRleHQqIGVuZEVtYmVkKTsKIAogICAgIC8vIFRoZSBoZWlnaHQgKGFuZCB3aWR0aCkg
b2YgYSBibG9jayB3aGVuIHlvdSBpbmNsdWRlIG92ZXJmbG93CiAgICAgLy8gc3BpbGxhZ2Ugb3V0
IG9mIHRoZSBib3R0b20gb2YgdGhlIGJsb2NrIChlLmcuLCBhIDxkaXYKQEAgLTIwNCw2ICsyMjAs
MTIgQEAgcHJpdmF0ZToKICAgICAvLyBzcGxpdCBpbnRvIGEgc2VxdWVuY2Ugb2YgaW5saW5lcyBh
bmQgYmxvY2tzLiAgVGhlIGNvbnRpbnVhdGlvbiB3aWxsIGVpdGhlciBiZQogICAgIC8vIGFuIGFu
b255bW91cyBibG9jayAodGhhdCBob3VzZXMgb3RoZXIgYmxvY2tzKSBvciBpdCB3aWxsIGJlIGFu
IGlubGluZSBmbG93LgogICAgIFJlbmRlckZsb3cqIG1fY29udGludWF0aW9uOworCisgICAgLy8g
Rm9yIGJsb2NrIGZsb3dzLCBlYWNoIGJveCByZXByZXNlbnRzIHRoZSByb290IGlubGluZSBib3gg
Zm9yIGEgbGluZSBpbiB0aGUKKyAgICAvLyBwYXJhZ3JhcGguCisgICAgLy8gRm9yIGlubGluZSBm
bG93cywgZWFjaCBib3ggcmVwcmVzZW50cyBhIHBvcnRpb24gb2YgdGhhdCBpbmxpbmUuCisgICAg
SW5saW5lRmxvd0JveCogbV9maXJzdExpbmVCb3g7CisgICAgSW5saW5lRmxvd0JveCogbV9sYXN0
TGluZUJveDsKIH07CiAKIApJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9p
bWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEwCmRpZmYgLXUgLXAgLXIxLjExMCBy
ZW5kZXJfaW1hZ2UuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAkzIEp1bCAyMDAz
IDAwOjE5OjE5IC0wMDAwCTEuMTEwCisrKyByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAkxOCBB
dWcgMjAwMyAyMTo1Mjo0OSAtMDAwMApAQCAtNDMwLDIyICs0MzAsMjYgQEAgaW50IFJlbmRlcklt
YWdlOjpjYWxjUmVwbGFjZWRIZWlnaHQoKSBjbwogICAgIHJldHVybiBSZW5kZXJSZXBsYWNlZDo6
Y2FsY1JlcGxhY2VkSGVpZ2h0KCk7CiB9CiAKLXZvaWQgUmVuZGVySW1hZ2U6OmN1cnNvclBvcyhp
bnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCkgewordm9pZCBSZW5kZXJJ
bWFnZTo6Y2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50ICZf
eSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpIHsKKyAgUmVuZGVyUmVwbGFjZWQ6OmNhcmV0UG9z
KG9mZnNldCwgb3ZlcnJpZGUsIF94LCBfeSwgd2lkdGgsIGhlaWdodCk7CisjaWYgMAkvLyBkb2Vz
bid0IHdvcmsgcmVsaWFibHkKICAgaGVpZ2h0ID0gaW50cmluc2ljSGVpZ2h0KCk7CisgIHdpZHRo
ID0gb3ZlcnJpZGUgJiYgb2Zmc2V0ID09IDAgPyBpbnRyaW5zaWNXaWR0aCgpIDogMDsKICAgX3gg
PSB4UG9zKCk7CiAgIF95ID0geVBvcygpOwogICBpZiAob2Zmc2V0ID4gMCkgX3ggKz0gaW50cmlu
c2ljV2lkdGgoKTsKIAogICBSZW5kZXJPYmplY3QgKmNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgIGlu
dCBhYnN4LCBhYnN5OwogICBpZiAoY2IgJiYgY2IgIT0gdGhpcyAmJiBjYi0+YWJzb2x1dGVQb3Np
dGlvbihhYnN4LGFic3kpKQogICB7CiAgICAgX3ggKz0gYWJzeDsKICAgICBfeSArPSBhYnN5Owog
ICB9IGVsc2UgewotICAgIC8vIHdlIGRvbid0IGtub3cgb3VyIGFic29sdXRlIHBvc2l0aW9uLCBh
bmQgdGhlcmUgaXMgbm90IHBvaW50IHJldHVybmluZworICAgIC8vIHdlIGRvbid0IGtub3cgb3Vy
IGFic29sdXRlIHBvc2l0aW9uLCBhbmQgdGhlcmUgaXMgbm8gcG9pbnQgcmV0dXJuaW5nCiAgICAg
Ly8ganVzdCBhIHJlbGF0aXZlIG9uZQogICAgIF94ID0gX3kgPSAtMTsKICAgfQorI2VuZGlmCiB9
CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hv
bWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAgLXIxLjQyIHJlbmRlcl9pbWFnZS5oCi0tLSByZW5k
ZXJpbmcvcmVuZGVyX2ltYWdlLmgJMyBKdWwgMjAwMyAwMDoxOToxOSAtMDAwMAkxLjQyCisrKyBy
ZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJMTggQXVnIDIwMDMgMjE6NTI6NDkgLTAwMDAKQEAgLTcx
LDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rp
b25TdGF0ZSgpIGNvbnN0IHtyZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTt9CiAgICAgdmlydHVhbCB2
b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHMpIHttX3NlbGVjdGlvblN0YXRl
ID0gczsgfQotICAgIHZpcnR1YWwgdm9pZCBjdXJzb3JQb3MoaW50IG9mZnNldCwgaW50ICZfeCwg
aW50ICZfeSwgaW50ICZoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBjYXJldFBvcyhpbnQgb2Zm
c2V0LCBib29sIG92ZXJyaWRlLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJndpZHRoLCBpbnQgJmhl
aWdodCk7CiAKIHByaXZhdGU6CiAgICAgLyoKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfbGluZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIx
LjEgcmVuZGVyX2xpbmUuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCTIzIEFwciAy
MDAzIDEyOjQwOjU0IC0wMDAwCTEuMQorKysgcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcAkxOCBB
dWcgMjAwMyAyMTo1Mjo1MCAtMDAwMApAQCAtMzIsMTMgKzMyLDEzIEBACiAjaW5jbHVkZSAieG1s
L2RvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUg
Imh0bWwvaHRtbF9mb3JtaW1wbC5oIgotI2luY2x1ZGUgInJlbmRlcl9pbmxpbmUuaCIKLSNpbmNs
dWRlICJyZW5kZXJfYmxvY2suaCIKKy8vI2luY2x1ZGUgInJlbmRlcl9pbmxpbmUuaCIKKy8vI2lu
Y2x1ZGUgInJlbmRlcl9ibG9jay5oIgogI2luY2x1ZGUgInJlbmRlcl9hcmVuYS5oIgogI2luY2x1
ZGUgInJlbmRlcl9saW5lLmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJo
dG1sdGFncy5oIgorI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNl
IERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKQEAgLTc5LDExICs3OSwxMSBAQCBpbnQgSW5s
aW5lRmxvd0JveDo6bWFyZ2luTGVmdCgpCiB7CiAgICAgaWYgKCFpbmNsdWRlTGVmdEVkZ2UoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBSZW5kZXJTdHlsZSogY3N0eWxlID0gb2Jq
ZWN0KCktPnN0eWxlKCk7CiAgICAgTGVuZ3RoIG1hcmdpbiA9IGNzdHlsZS0+bWFyZ2luTGVmdCgp
OwotICAgIGlmIChtYXJnaW4udHlwZSAhPSBWYXJpYWJsZSkKLSAgICAgICAgcmV0dXJuIChtYXJn
aW4udHlwZSA9PSBGaXhlZCA/IG1hcmdpbi52YWx1ZSA6IG9iamVjdCgpLT5tYXJnaW5MZWZ0KCkp
OworICAgIGlmIChtYXJnaW4udHlwZSgpICE9IFZhcmlhYmxlKQorICAgICAgICByZXR1cm4gKG1h
cmdpbi50eXBlKCkgPT0gRml4ZWQgPyBtYXJnaW4udmFsdWUoKSA6IG9iamVjdCgpLT5tYXJnaW5M
ZWZ0KCkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC05NCw4ICs5NCw4IEBAIGludCBJbmxpbmVG
bG93Qm94OjptYXJnaW5SaWdodCgpCiAgICAgCiAgICAgUmVuZGVyU3R5bGUqIGNzdHlsZSA9IG9i
amVjdCgpLT5zdHlsZSgpOwogICAgIExlbmd0aCBtYXJnaW4gPSBjc3R5bGUtPm1hcmdpblJpZ2h0
KCk7Ci0gICAgaWYgKG1hcmdpbi50eXBlICE9IFZhcmlhYmxlKQotICAgICAgICByZXR1cm4gKG1h
cmdpbi50eXBlID09IEZpeGVkID8gbWFyZ2luLnZhbHVlIDogb2JqZWN0KCktPm1hcmdpblJpZ2h0
KCkpOworICAgIGlmIChtYXJnaW4udHlwZSgpICE9IFZhcmlhYmxlKQorICAgICAgICByZXR1cm4g
KG1hcmdpbi50eXBlKCkgPT0gRml4ZWQgPyBtYXJnaW4udmFsdWUoKSA6IG9iamVjdCgpLT5tYXJn
aW5SaWdodCgpKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTQzLDkgKzE0MywxMCBAQCBib29s
IElubGluZUZsb3dCb3g6OnByZXZPbkxpbmVFeGlzdHMoKQogCiBib29sIElubGluZUZsb3dCb3g6
Om9uRW5kQ2hhaW4oUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpCiB7CisjaWYgMAkvLyBGSVhNRTog
bmVlZHMgbWVyZ2UKICAgICBpZiAoIWVuZE9iamVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAorCiAgICAgaWYgKGVuZE9iamVjdCA9PSBvYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKQEAgLTE1OSwyMiArMTYwLDI0IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6b25FbmRDaGFp
bihSZW5kZXJPYmoKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogfQogCiB2b2lk
IElubGluZUZsb3dCb3g6OmRldGVybWluZVNwYWNpbmdGb3JGbG93Qm94ZXMoYm9vbCBsYXN0TGlu
ZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpCiB7CisjaWYgMAkvLyBGSVhNRTogbmVlZHMgbWVy
Z2UKICAgICAvLyBBbGwgYm94ZXMgc3RhcnQgb2ZmIG9wZW4uICBUaGV5IHdpbGwgbm90IGFwcGx5
IGFueSBtYXJnaW5zL2JvcmRlci9wYWRkaW5nIG9uCiAgICAgLy8gYW55IHNpZGUuCiAgICAgYm9v
bCBpbmNsdWRlTGVmdEVkZ2UgPSBmYWxzZTsKICAgICBib29sIGluY2x1ZGVSaWdodEVkZ2UgPSBm
YWxzZTsKIAogICAgIFJlbmRlckZsb3cqIGZsb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4o
b2JqZWN0KCkpOwotICAgIAorCiAgICAgaWYgKCFmbG93LT5maXJzdENoaWxkKCkpCiAgICAgICAg
IGluY2x1ZGVMZWZ0RWRnZSA9IGluY2x1ZGVSaWdodEVkZ2UgPSB0cnVlOyAvLyBFbXB0eSBpbmxp
bmVzIG5ldmVyIHNwbGl0IGFjcm9zcyBsaW5lcy4KICAgICBlbHNlIGlmIChwYXJlbnQoKSkgeyAv
LyBUaGUgcm9vdCBpbmxpbmUgYm94IG5ldmVyIGhhcyBib3JkZXJzL21hcmdpbnMvcGFkZGluZy4K
ICAgICAgICAgYm9vbCBsdHIgPSBmbG93LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFI7Ci0g
ICAgICAgIAorCiAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhbGwgaW5pdGlhbCBsaW5lcyBh
cmUgdW5jb25zdHJ1Y3RlZC4gIElmIHNvLCB0aGVuCiAgICAgICAgIC8vIHdlIGtub3cgdGhlIGlu
bGluZSBiZWdhbiBvbiB0aGlzIGxpbmUuCiAgICAgICAgIGlmICghZmxvdy0+Zmlyc3RMaW5lQm94
KCktPmlzQ29uc3RydWN0ZWQoKSkgewpAQCAtMjE3LDEwICsyMjAsMTIgQEAgdm9pZCBJbmxpbmVG
bG93Qm94OjpkZXRlcm1pbmVTcGFjaW5nRm9yRgogICAgICAgICAgICAgY3VyckZsb3ctPmRldGVy
bWluZVNwYWNpbmdGb3JGbG93Qm94ZXMobGFzdExpbmUsIGVuZE9iamVjdCk7CiAgICAgICAgIH0K
ICAgICB9CisjZW5kaWYKIH0KIAogaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9u
dGFsbHkoaW50IHgpCiB7CisjaWYgMAkvLyBGSVhNRTogbmVlZHMgbWVyZ2UKICAgICAvLyBTZXQg
b3VyIHggcG9zaXRpb24uCiAgICAgc2V0WFBvcyh4KTsKIApAQCAtMjI5LDcgKzIzNCw3IEBAIGlu
dCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGwKICAgICAKICAgICBmb3IgKElu
bGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxp
bmUoKSkgewogICAgICAgICBpZiAoY3Vyci0+b2JqZWN0KCktPmlzVGV4dCgpKSB7Ci0gICAgICAg
ICAgICBUZXh0UnVuKiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dFJ1bio+KGN1cnIpOworICAgICAg
ICAgICAgSW5saW5lVGV4dEJveCogdGV4dCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihj
dXJyKTsKICAgICAgICAgICAgIHRleHQtPnNldFhQb3MoeCk7CiAgICAgICAgICAgICB4ICs9IHRl
eHQtPndpZHRoKCk7CiAgICAgICAgIH0KQEAgLTI1NywxMCArMjYyLDE0IEBAIGludCBJbmxpbmVG
bG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGwKICAgICB4ICs9IGJvcmRlclJpZ2h0KCkgKyBw
YWRkaW5nUmlnaHQoKTsKICAgICBzZXRXaWR0aCh4LXN0YXJ0WCk7CiAgICAgcmV0dXJuIHg7Cisj
ZWxzZQorICByZXR1cm4gMDsKKyNlbmRpZgogfQogCiB2b2lkIElubGluZUZsb3dCb3g6OnZlcnRp
Y2FsbHlBbGlnbkJveGVzKGludCYgaGVpZ2h0T2ZCbG9jaykKIHsKKyNpZiAwCS8vIEZJWE1FOiBu
ZWVkcyBtZXJnZQogICAgIGludCBtYXhQb3NpdGlvblRvcCA9IDA7CiAgICAgaW50IG1heFBvc2l0
aW9uQm90dG9tID0gMDsKICAgICBpbnQgbWF4QXNjZW50ID0gMDsKQEAgLTI3MSw3ICsyODAsNyBA
QCB2b2lkIElubGluZUZsb3dCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzCiAgICAgd2hpbGUgKGN1
cnIgJiYgIWN1cnItPmVsZW1lbnQoKSkKICAgICAgICAgY3VyciA9IGN1cnItPmNvbnRhaW5lcigp
OwogICAgIGJvb2wgc3RyaWN0TW9kZSA9IChjdXJyICYmIGN1cnItPmVsZW1lbnQoKS0+Z2V0RG9j
dW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkpOwotICAgIAorCiAgICAgY29tcHV0ZUxvZ2ljYWxCb3hI
ZWlnaHRzKG1heFBvc2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSwgbWF4QXNjZW50LCBtYXhE
ZXNjZW50LCBzdHJpY3RNb2RlKTsKIAogICAgIGlmIChtYXhBc2NlbnQgKyBtYXhEZXNjZW50IDwg
UU1BWChtYXhQb3NpdGlvblRvcCwgbWF4UG9zaXRpb25Cb3R0b20pKQpAQCAtMjg5LDYgKzI5OCw3
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMKICAgICAgICAgc2hy
aW5rQm94ZXNXaXRoTm9UZXh0Q2hpbGRyZW4odG9wUG9zaXRpb24sIGJvdHRvbVBvc2l0aW9uKTsK
ICAgICAKICAgICBoZWlnaHRPZkJsb2NrICs9IG1heEhlaWdodDsKKyNlbmRpZgogfQogCiB2b2lk
IElubGluZUZsb3dCb3g6OmFkanVzdE1heEFzY2VudEFuZERlc2NlbnQoaW50JiBtYXhBc2NlbnQs
IGludCYgbWF4RGVzY2VudCwKQEAgLTMxOSw2ICszMjksNyBAQCB2b2lkIElubGluZUZsb3dCb3g6
OmFkanVzdE1heEFzY2VudEFuZERlCiB2b2lkIElubGluZUZsb3dCb3g6OmNvbXB1dGVMb2dpY2Fs
Qm94SGVpZ2h0cyhpbnQmIG1heFBvc2l0aW9uVG9wLCBpbnQmIG1heFBvc2l0aW9uQm90dG9tLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhBc2Nl
bnQsIGludCYgbWF4RGVzY2VudCwgYm9vbCBzdHJpY3RNb2RlKQogeworI2lmIDAJLy8gRklYTUU6
IG5lZWRzIG1lcmdlCiAgICAgaWYgKGlzUm9vdElubGluZUJveCgpKSB7CiAgICAgICAgIC8vIEV4
YW1pbmUgb3VyIHJvb3QgYm94LgogICAgICAgICBzZXRIZWlnaHQob2JqZWN0KCktPmxpbmVIZWln
aHQobV9maXJzdExpbmUpKTsKQEAgLTMzOCw3ICszNDksNyBAQCB2b2lkIElubGluZUZsb3dCb3g6
OmNvbXB1dGVMb2dpY2FsQm94SGVpCiAgICAgICAgICAgICAgICAgbWF4RGVzY2VudCA9IGRlc2Nl
bnQ7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBmb3IgKElubGluZUJveCogY3VyciA9
IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewogICAgICAg
ICBjdXJyLT5zZXRIZWlnaHQoY3Vyci0+b2JqZWN0KCktPmxpbmVIZWlnaHQobV9maXJzdExpbmUp
KTsKICAgICAgICAgY3Vyci0+c2V0QmFzZWxpbmUoY3Vyci0+b2JqZWN0KCktPmJhc2VsaW5lUG9z
aXRpb24obV9maXJzdExpbmUpKTsKQEAgLTM2Myw2ICszNzQsNyBAQCB2b2lkIElubGluZUZsb3dC
b3g6OmNvbXB1dGVMb2dpY2FsQm94SGVpCiAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZUZsb3dC
b3goKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKS0+Y29t
cHV0ZUxvZ2ljYWxCb3hIZWlnaHRzKG1heFBvc2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSwg
bWF4QXNjZW50LCBtYXhEZXNjZW50LCBzdHJpY3RNb2RlKTsKICAgICB9CisjZW5kaWYKIH0KIAog
dm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzVmVydGljYWxseShpbnQgeSwgaW50IG1heEhl
aWdodCwgaW50IG1heEFzY2VudCwgYm9vbCBzdHJpY3RNb2RlLApAQCAtMzcwLDcgKzM4Miw3IEBA
IHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc1ZlcnRpY2FsbHkKIHsKICAgICBpZiAoaXNS
b290SW5saW5lQm94KCkpCiAgICAgICAgIHNldFlQb3MoeSArIG1heEFzY2VudCAtIGJhc2VsaW5l
KCkpOy8vIFBsYWNlIG91ciByb290IGJveC4KLSAgICAKKwogICAgIGZvciAoSW5saW5lQm94KiBj
dXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7CiAg
ICAgICAgIC8vIEFkanVzdCBib3hlcyB0byB1c2UgdGhlaXIgcmVhbCBib3ggeS9oZWlnaHQgYW5k
IG5vdCB0aGUgbG9naWNhbCBoZWlnaHQgKGFzIGRpY3RhdGVkIGJ5CiAgICAgICAgIC8vIGxpbmUt
aGVpZ2h0KS4KQEAgLTM5Miw3ICs0MDQsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94
ZXNWZXJ0aWNhbGx5CiAgICAgICAgIGludCBuZXdZID0gY3Vyci0+eVBvcygpOwogICAgICAgICBp
bnQgbmV3SGVpZ2h0ID0gY3Vyci0+aGVpZ2h0KCk7CiAgICAgICAgIGludCBuZXdCYXNlbGluZSA9
IGN1cnItPmJhc2VsaW5lKCk7Ci0gICAgICAgIGlmIChjdXJyLT5pc1RleHRSdW4oKSB8fCBjdXJy
LT5pc0lubGluZUZsb3dCb3goKSkgeworICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVUZXh0Qm94
KCkgfHwgY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpIHsKICAgICAgICAgICAgIGNvbnN0IFFGb250
TWV0cmljcyAmZm0gPSBjdXJyLT5vYmplY3QoKS0+Zm9udE1ldHJpY3MoIG1fZmlyc3RMaW5lICk7
CiAgICAgICAgICAgICBuZXdCYXNlbGluZSA9IGZtLmFzY2VudCgpOwogICAgICAgICAgICAgbmV3
WSArPSBjdXJyLT5iYXNlbGluZSgpIC0gbmV3QmFzZWxpbmU7CkBAIC00NTcsMTAgKzQ2OSwxMSBA
QCB2b2lkIElubGluZUZsb3dCb3g6OnNocmlua0JveGVzV2l0aE5vVGV4CiB2b2lkIElubGluZUZs
b3dCb3g6OnBhaW50QmFja2dyb3VuZEFuZEJvcmRlcihRUGFpbnRlciAqcCwgaW50IF94LCBpbnQg
X3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3cs
IGludCBfaCwgaW50IF90eCwgaW50IF90eSwgaW50IHhPZmZzZXRPbkxpbmUpCiB7CisjaWYgMAkv
LyBGSVhNRTogbmVlZHMgbWVyZ2UKICAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMu
CiAgICAgX3R4ICs9IG1feDsKICAgICBfdHkgKz0gbV95OwotICAgIAorCiAgICAgaW50IHcgPSB3
aWR0aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCk7CiAKQEAgLTUwOSwxMCArNTIyLDEyIEBAIHZv
aWQgSW5saW5lRmxvd0JveDo6cGFpbnRCYWNrZ3JvdW5kQW5kQm8KICAgICAgICAgaWYgKHBhcmVu
dCgpICYmIG9iamVjdCgpLT5zdHlsZSgpLT5oYXNCb3JkZXIoKSkKICAgICAgICAgICAgIG9iamVj
dCgpLT5wYWludEJvcmRlcihwLCBfdHgsIF90eSwgdywgaCwgb2JqZWN0KCktPnN0eWxlKCksIGlu
Y2x1ZGVMZWZ0RWRnZSgpLCBpbmNsdWRlUmlnaHRFZGdlKCkpOwogICAgIH0KKyNlbmRpZgogfQog
CiBzdGF0aWMgYm9vbCBzaG91bGREcmF3RGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG9iaikKIHsK
KyNpZiAwCS8vIEZJWE1FOiBuZWVkcyBtZXJnZQogICAgIGJvb2wgc2hvdWxkRHJhdyA9IGZhbHNl
OwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gb2JqLT5maXJzdENoaWxkKCk7CiAgICAg
ICAgICBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewpAQCAtNTI0LDE0ICs1Mzks
MTYgQEAgc3RhdGljIGJvb2wgc2hvdWxkRHJhd0RlY29yYXRpb24oUmVuZGVyTwogICAgICAgICAg
ICAgICAgICAhY3Vyci0+ZWxlbWVudCgpIHx8ICFjdXJyLT5lbGVtZW50KCktPmNvbnRhaW5zT25s
eVdoaXRlc3BhY2UoKSkpIHsKICAgICAgICAgICAgIHNob3VsZERyYXcgPSB0cnVlOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0JCisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHNo
b3VsZERyYXc7CisjZW5kaWYKIH0KIAogdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludERlY29yYXRp
b25zKFFQYWludGVyICpwLCBpbnQgX3gsIGludCBfeSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX3csIGludCBfaCwgaW50IF90eCwgaW50IF90eSkKIHsKKyNpZiAw
CS8vIEZJWE1FOiBuZWVkcyBtZXJnZQogICAgIC8vIE5vdyBwYWludCBvdXIgdGV4dCBkZWNvcmF0
aW9ucy4gV2Ugb25seSBkbyB0aGlzIGlmIHdlIGFyZW4ndCBpbiBxdWlya3MgbW9kZSAoaS5lLiwg
aW4KICAgICAvLyBhbG1vc3Qtc3RyaWN0IG1vZGUgb3Igc3RyaWN0IG1vZGUpLgogICAgIF90eCAr
PSBtX3g7CkBAIC01NTksNCArNTc2LDUgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludERlY29y
YXRpb25zKFFQYQogICAgICAgICAgICAgcC0+ZHJhd0xpbmVGb3JUZXh0KF90eCwgX3R5LCAyKm1f
YmFzZWxpbmUvMywgdyk7CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYKIH0KSW5kZXg6IHJlbmRl
cmluZy9yZW5kZXJfbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJz
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtdSAtcCAtcjEuMSByZW5kZXJfbGluZS5oCi0tLSByZW5kZXJpbmcvcmVuZGVyX2xpbmUu
aAkyMyBBcHIgMjAwMyAxMjo0MDo1NCAtMDAwMAkxLjEKKysrIHJlbmRlcmluZy9yZW5kZXJfbGlu
ZS5oCTE4IEF1ZyAyMDAzIDIxOjUyOjUwIC0wMDAwCkBAIC01MywxNCArNTMsMTQgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9ybWFsIG9wZXJhdG9yIG5ldyBpcyBkaXNhbGxvd2Vk
LgogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3opIHRocm93KCk7Ci0gICAgCisKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVCb3goKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZUZsb3dCb3goKSB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRhaW5lcigpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIGlzVGV4dFJ1bigpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
Um9vdElubGluZUJveCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCisgICAgdmlydHVhbCBib29s
IGlzSW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNJbmxpbmVGbG93Qm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0lubGluZVRleHRCb3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc1Jvb3RJbmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgYm9v
bCBpc0NvbnN0cnVjdGVkKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3RlZDsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRDb25zdHJ1Y3RlZCgpIHsKICAgICAgICAgbV9jb25zdHJ1Y3RlZCA9IHRydWU7CkBA
IC03OCwyNSArNzgsMzIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGFyZW50KElubGluZUZsb3dC
b3gqIHBhcikgeyBtX3BhcmVudCA9IHBhcjsgfQogCiAgICAgdm9pZCBzZXRXaWR0aChzaG9ydCB3
KSB7IG1fd2lkdGggPSB3OyB9Ci0gICAgc2hvcnQgd2lkdGgoKSB7IHJldHVybiBtX3dpZHRoOyB9
CisgICAgc2hvcnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAKICAgICB2b2lk
IHNldFhQb3Moc2hvcnQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgc2hvcnQgeFBvcygpIHsgcmV0dXJu
IG1feDsgfQorICAgIHNob3J0IHhQb3MoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KIAogICAgIHZv
aWQgc2V0WVBvcyhpbnQgeSkgeyBtX3kgPSB5OyB9Ci0gICAgaW50IHlQb3MoKSB7IHJldHVybiBt
X3k7IH0KKyAgICBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogCiAgICAgdm9pZCBz
ZXRIZWlnaHQoaW50IGgpIHsgbV9oZWlnaHQgPSBoOyB9Ci0gICAgaW50IGhlaWdodCgpIHsgcmV0
dXJuIG1faGVpZ2h0OyB9Ci0gICAgCisgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGVpZ2h0OyB9CisKICAgICB2b2lkIHNldEJhc2VsaW5lKGludCBiKSB7IG1fYmFzZWxpbmUgPSBi
OyB9Ci0gICAgaW50IGJhc2VsaW5lKCkgeyByZXR1cm4gbV9iYXNlbGluZTsgfQorICAgIGludCBi
YXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZWxpbmU7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBoYXNUZXh0Q2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaGFzVGV4dENoaWxkcmVuKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgaW50
IHRvcE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4geVBvcygpOyB9CisgICAgdmlydHVhbCBpbnQg
Ym90dG9tT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiB5UG9zKCkraGVpZ2h0KCk7IH0KKworICAg
IC8qKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mZnNldCB0aGlzIGlubGluZSBib3ggY29udGFpbnMu
IERlZmF1bHRzIHRvIDAuCisgICAgICovCisgICAgdmlydHVhbCBsb25nIG1pbk9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICAvKiogUmV0dXJucyB0aGUgbWF4aW11bSBvZmZzZXQgdGhp
cyBpbmxpbmUgYm94IGNvbnRhaW5zLiBEZWZhdWx0cyB0byAxLgorICAgICAqLworICAgIHZpcnR1
YWwgbG9uZyBtYXhPZmZzZXQoKSBjb25zdCB7IHJldHVybiAxOyB9CiAKLSAgICB2aXJ0dWFsIGlu
dCB0b3BPdmVyZmxvdygpIHsgcmV0dXJuIHlQb3MoKTsgfQotICAgIHZpcnR1YWwgaW50IGJvdHRv
bU92ZXJmbG93KCkgeyByZXR1cm4geVBvcygpK2hlaWdodCgpOyB9Ci0gICAgCiBwdWJsaWM6IC8v
IEZJWE1FOiBXb3VsZCBsaWtlIHRvIG1ha2UgdGhpcyBwcm90ZWN0ZWQsIGJ1dCBtZXRob2RzIGFy
ZSBhY2Nlc3NpbmcgdGhlc2UKICAgICAgICAgLy8gbWVtYmVycyBvdmVyIGluIHRoZSBwYXJ0Lgog
ICAgIFJlbmRlck9iamVjdCogbV9vYmplY3Q7CkBAIC0xMDYsNyArMTEzLDcgQEAgcHVibGljOiAv
LyBGSVhNRTogV291bGQgbGlrZSB0byBtYWtlIHRoaQogICAgIHNob3J0IG1fd2lkdGg7CiAgICAg
aW50IG1faGVpZ2h0OwogICAgIGludCBtX2Jhc2VsaW5lOwotICAgIAorCiAgICAgYm9vbCBtX2Zp
cnN0TGluZSA6IDE7CiAgICAgYm9vbCBtX2NvbnN0cnVjdGVkIDogMTsKIApAQCAtMTMxLDExICsx
MzgsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmV4dExpbmVCb3goSW5saW5lUnVuQm94KiBu
KSB7IG1fbmV4dExpbmUgPSBuOyB9CiAgICAgdm9pZCBzZXRQcmV2aW91c0xpbmVCb3goSW5saW5l
UnVuQm94KiBwKSB7IG1fcHJldkxpbmUgPSBwOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRC
YWNrZ3JvdW5kQW5kQm9yZGVyKFFQYWludGVyICpwLCBpbnQgX3gsIGludCBfeSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF93LCBpbnQgX2gsIGludCBfdHgsIGludCBfdHksIGludCB4T2Zm
c2V0T25MaW5lKSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnREZWNvcmF0aW9ucyhRUGFpbnRl
ciAqcCwgaW50IF94LCBpbnQgX3ksCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBfdywgaW50
IF9oLCBpbnQgX3R4LCBpbnQgX3R5KSB7fTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRC
YWNrZ3JvdW5kQW5kQm9yZGVyKFFQYWludGVyICovKnAqLywgaW50IC8qX3gqLywgaW50IC8qX3kq
LywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qX3cqLywgaW50IC8qX2gqLywgaW50IC8q
X3R4Ki8sIGludCAvKl90eSovLCBpbnQgLyp4T2Zmc2V0T25MaW5lKi8pIHt9OworICAgIHZpcnR1
YWwgdm9pZCBwYWludERlY29yYXRpb25zKFFQYWludGVyICovKnAqLywgaW50IC8qX3gqLywgaW50
IC8qX3kqLywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qX3cqLywgaW50IC8qX2gqLywg
aW50IC8qX3R4Ki8sIGludCAvKl90eSovKSB7fTsKKwogcHJvdGVjdGVkOgogICAgIElubGluZVJ1
bkJveCogbV9wcmV2TGluZTsgIC8vIFRoZSBwcmV2aW91cyBib3ggdGhhdCBhbHNvIHVzZXMgb3Vy
IFJlbmRlck9iamVjdAogICAgIElubGluZVJ1bkJveCogbV9uZXh0TGluZTsgIC8vIFRoZSBuZXh0
IGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0CkBAIC0xNTMsMTEgKzE2MCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIG1faGFzVGV4dENoaWxkcmVuID0gZmFsc2U7CiAgICAgfQogCi0g
ICAgdmlydHVhbCBib29sIGlzSW5saW5lRmxvd0JveCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNJbmxpbmVGbG93Qm94KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgSW5saW5lQm94KiBmaXJzdENoaWxkKCkgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CiAgICAg
SW5saW5lQm94KiBsYXN0Q2hpbGQoKSB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQotICAgIAorCiAg
ICAgdmlydHVhbCB2b2lkIHNldENvbnN0cnVjdGVkKCkgewogICAgICAgICBJbmxpbmVCb3g6OnNl
dENvbnN0cnVjdGVkKCk7CiAgICAgICAgIGlmIChtX2ZpcnN0Q2hpbGQpCkBAIC0xNzMsNyArMTgw
LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGNoaWxkLT5zZXRGaXJzdExpbmVTdHls
ZUJpdChtX2ZpcnN0TGluZSk7CiAgICAgICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7Ci0gICAg
ICAgIGlmIChjaGlsZC0+aXNUZXh0UnVuKCkpCisgICAgICAgIGlmIChjaGlsZC0+aXNJbmxpbmVU
ZXh0Qm94KCkpCiAgICAgICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IHRydWU7CiAgICAgfQog
CkBAIC0xODEsNyArMTg4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X3csIGludCBfaCwgaW50IF90eCwgaW50IF90eSwgaW50IHhPZmZzZXRPbkxpbmUpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludERlY29yYXRpb25zKFFQYWludGVyICpwLCBpbnQgX3gsIGludCBfeSwK
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF93LCBpbnQgX2gsIGludCBfdHgsIGludCBfdHkp
OwotICAgIAorCiAgICAgaW50IG1hcmdpbkJvcmRlclBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IG1h
cmdpbkJvcmRlclBhZGRpbmdSaWdodCgpOwogICAgIGludCBtYXJnaW5MZWZ0KCk7CkBAIC0xOTAs
MTQgKzE5NywxNCBAQCBwdWJsaWM6CiAgICAgaW50IGJvcmRlclJpZ2h0KCkgeyBpZiAoaW5jbHVk
ZVJpZ2h0RWRnZSgpKSByZXR1cm4gb2JqZWN0KCktPmJvcmRlclJpZ2h0KCk7IHJldHVybiAwOyB9
CiAgICAgaW50IHBhZGRpbmdMZWZ0KCkgeyBpZiAoaW5jbHVkZUxlZnRFZGdlKCkpIHJldHVybiBv
YmplY3QoKS0+cGFkZGluZ0xlZnQoKTsgcmV0dXJuIDA7IH0KICAgICBpbnQgcGFkZGluZ1JpZ2h0
KCkgeyBpZiAoaW5jbHVkZVJpZ2h0RWRnZSgpKSByZXR1cm4gb2JqZWN0KCktPnBhZGRpbmdSaWdo
dCgpOyByZXR1cm4gMDsgfQotICAgIAorCiAgICAgYm9vbCBpbmNsdWRlTGVmdEVkZ2UoKSB7IHJl
dHVybiBtX2luY2x1ZGVMZWZ0RWRnZTsgfQogICAgIGJvb2wgaW5jbHVkZVJpZ2h0RWRnZSgpIHsg
cmV0dXJuIG1faW5jbHVkZVJpZ2h0RWRnZTsgfQogICAgIHZvaWQgc2V0RWRnZXMoYm9vbCBpbmNs
dWRlTGVmdCwgYm9vbCBpbmNsdWRlUmlnaHQpIHsKICAgICAgICAgbV9pbmNsdWRlTGVmdEVkZ2Ug
PSBpbmNsdWRlTGVmdDsKICAgICAgICAgbV9pbmNsdWRlUmlnaHRFZGdlID0gaW5jbHVkZVJpZ2h0
OwogICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzVGV4dENoaWxkcmVuKCkgeyByZXR1cm4gbV9o
YXNUZXh0Q2hpbGRyZW47IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGV4dENoaWxkcmVuKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNUZXh0Q2hpbGRyZW47IH0KIAogICAgIC8vIEhlbHBlciBmdW5jdGlv
bnMgdXNlZCBkdXJpbmcgbGluZSBjb25zdHJ1Y3Rpb24gYW5kIHBsYWNlbWVudC4KICAgICB2b2lk
IGRldGVybWluZVNwYWNpbmdGb3JGbG93Qm94ZXMoYm9vbCBsYXN0TGluZSwgUmVuZGVyT2JqZWN0
KiBlbmRPYmplY3QpOwpAQCAtMjE0LDkgKzIyMSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHBsYWNl
Qm94ZXNWZXJ0aWNhbGx5KGludCB5LCBpbnQgbWF4SGVpZ2h0LCBpbnQgbWF4QXNjZW50LCBib29s
IHN0cmljdE1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHRvcFBvc2l0
aW9uLCBpbnQmIGJvdHRvbVBvc2l0aW9uKTsKICAgICB2b2lkIHNocmlua0JveGVzV2l0aE5vVGV4
dENoaWxkcmVuKGludCB0b3BQb3NpdGlvbiwgaW50IGJvdHRvbVBvc2l0aW9uKTsKLSAgICAKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcmZsb3dQb3NpdGlvbnMoaW50IHRvcCwgaW50IGJvdHRvbSkg
e30KLSAgICAKKworICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgLyp0
b3AqLywgaW50IC8qYm90dG9tKi8pIHt9CisKIHByb3RlY3RlZDoKICAgICBJbmxpbmVCb3gqIG1f
Zmlyc3RDaGlsZDsKICAgICBJbmxpbmVCb3gqIG1fbGFzdENoaWxkOwpAQCAtMjMzLDEwICsyNDAs
MTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV90b3BPdmVyZmxvdyA9IG1fYm90dG9tT3Zl
cmZsb3cgPSAwOwogICAgIH0KLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNSb290SW5saW5lQm94
KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgaW50IHRvcE92ZXJmbG93KCkgeyByZXR1
cm4gbV90b3BPdmVyZmxvdzsgfQotICAgIHZpcnR1YWwgaW50IGJvdHRvbU92ZXJmbG93KCkgeyBy
ZXR1cm4gbV9ib3R0b21PdmVyZmxvdzsgfQorCisgICAgdmlydHVhbCBib29sIGlzUm9vdElubGlu
ZUJveCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGludCB0b3BPdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIG1fdG9wT3ZlcmZsb3c7IH0KKyAgICB2aXJ0dWFsIGludCBib3R0
b21PdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tT3ZlcmZsb3c7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc2V0T3ZlcmZsb3dQb3NpdGlvbnMoaW50IHRvcCwgaW50IGJvdHRvbSkgeyBtX3Rv
cE92ZXJmbG93ID0gdG9wOyBtX2JvdHRvbU92ZXJmbG93ID0gYm90dG9tOyB9CiAKIHByb3RlY3Rl
ZDoKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMjExCmRpZmYgLXUgLXAgLXIxLjIxMSByZW5kZXJfb2JqZWN0
LmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTE3IEFwciAyMDAzIDE2OjA3OjQ2
IC0wMDAwCTEuMjExCisrKyByZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAJMTggQXVnIDIwMDMg
MjE6NTI6NTEgLTAwMDAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIK
ICNpbmNsdWRlICJyZW5kZXJfYXJlbmEuaCIKICNpbmNsdWRlICJyZW5kZXJfbGF5ZXIuaCIKKyNp
bmNsdWRlICJyZW5kZXJfbGluZS5oIgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiB1c2luZyBuYW1l
c3BhY2UgRE9NOwpAQCAtOTY2LDkgKzk2NywxMSBAQCBib29sIFJlbmRlck9iamVjdDo6YWJzb2x1
dGVQb3NpdGlvbihpbnQgCiAgICAgfQogfQogCi12b2lkIFJlbmRlck9iamVjdDo6Y3Vyc29yUG9z
KGludCAvKm9mZnNldCovLCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCkKK3ZvaWQgUmVu
ZGVyT2JqZWN0OjpjYXJldFBvcyhpbnQgLypvZmZzZXQqLywgYm9vbCAvKm92ZXJyaWRlKi8sIGlu
dCAmX3gsIGludCAmX3ksIGludCAmd2lkdGgsIGludCAmaGVpZ2h0KQogewogICAgIF94ID0gX3kg
PSBoZWlnaHQgPSAtMTsKKyAgICB3aWR0aCA9IDE7CS8vIHRoZSBjYXJldCBoYXMgYSBkZWZhdWx0
IHdpZHRoIG9mIG9uZSBwaXhlbC4gSWYgeW91IHdhbnQKKyAgICAJCS8vIHRvIGNoZWNrIGZvciB2
YWxpZGl0eSwgb25seSB0ZXN0IHRoZSB4LWNvb3JkaW5hdGUgZm9yID49IDAuCiB9CiAKIGludCBS
ZW5kZXJPYmplY3Q6OnBhZGRpbmdUb3AoKSBjb25zdApAQCAtMTM0OSwzICsxMzUyLDkgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OnNjaGVkdWxlUmVsYXlvdXQoYm9vbAogdm9pZCBSZW5kZXJPYmplY3Q6
OnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQm94ZXMoKQogewogfQorCitJbmxpbmVCb3gqIFJlbmRl
ck9iamVjdDo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94KQoreworICAg
IHJldHVybiBuZXcgKHJlbmRlckFyZW5hKCkpIElubGluZUJveCh0aGlzKTsKK30KKwpJbmRleDog
cmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUv
a2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjE1MApkaWZmIC11IC1wIC1yMS4xNTAgcmVuZGVyX29iamVjdC5oCi0tLSByZW5kZXJp
bmcvcmVuZGVyX29iamVjdC5oCTE2IEFwciAyMDAzIDIyOjU4OjA2IC0wMDAwCTEuMTUwCisrKyBy
ZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oCTE4IEF1ZyAyMDAzIDIxOjUyOjUyIC0wMDAwCkBAIC04
Nyw2ICs4Nyw4IEBAIG5hbWVzcGFjZSBraHRtbCB7CiAgICAgY2xhc3MgUmVuZGVyRnJhbWVTZXQ7
CiAgICAgY2xhc3MgUmVuZGVyQXJlbmE7CiAgICAgY2xhc3MgUmVuZGVyTGF5ZXI7CisgICAgY2xh
c3MgSW5saW5lQm94OworICAgIGNsYXNzIElubGluZUZsb3dCb3g7CiAKIC8qKgogICogQmFzZSBD
bGFzcyBmb3IgYWxsIHJlbmRlcmluZyB0cmVlIG9iamVjdHMuCkBAIC0yNTYsNiArMjU4LDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBzY2hlZHVsZVJlbGF5b3V0KGJvb2wgcmVwYWludCk7CiAKKyAg
ICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVy
Qm94KTsKKwogICAgIC8vIGZvciBkaXNjdXNzaW9uIG9mIGxpbmVIZWlnaHQgc2VlIENTUzIgc3Bl
YwogICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodCggYm9vbCBmaXJzdExpbmUgKSBjb25zdDsK
ICAgICAvLyBmb3IgdGhlIHZlcnRpY2FsLWFsaWduIHByb3BlcnR5IG9mIGlubGluZSBlbGVtZW50
cwpAQCAtNDYzLDcgKzQ2Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3Zlcmhh
bmdpbmdGbG9hdHMoKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gcG9zaXRpb25pbmcgb2Yg
aW5saW5lIGNoaWxkcyAoYmlkaSkKLSAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb24oaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGJvb2wsIGJvb2wsIGludCkge30KKyAgICB2aXJ0dWFsIHZvaWQgcG9z
aXRpb24oSW5saW5lQm94KiwgaW50LCBpbnQsIGJvb2wsIGludCkge30KKy8vICAgIHZpcnR1YWwg
dm9pZCBwb3NpdGlvbihpbnQsIGludCwgaW50LCBpbnQsIGludCwgYm9vbCwgYm9vbCwgaW50KSB7
fQogCiAgICAgZW51bSBTZWxlY3Rpb25TdGF0ZSB7CiAgICAgICAgIFNlbGVjdGlvbk5vbmUsCkBA
IC00NzYsNyArNDgxLDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNl
bGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gU2VsZWN0aW9uTm9uZTt9CiAgICAgdmlydHVh
bCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSB7fQogCi0gICAgdmlydHVh
bCB2b2lkIGN1cnNvclBvcyhpbnQgLypvZmZzZXQqLywgaW50ICYvKl94Ki8sIGludCAmLypfeSov
LCBpbnQgJi8qaGVpZ2h0Ki8pOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGNvbnRlbnQg
Y29vcmRpbmF0ZXMgb2YgdGhlIGNhcmV0IHdpdGhpbiB0aGlzIHJlbmRlciBvYmplY3QuCisgICAg
ICogQHBhcmFtIG9mZnNldCB6ZXJvLWJhc2VkIG9mZnNldCBkZXRlcm1pbmluZyBwb3NpdGlvbiB3
aXRoaW4gdGhlIHJlbmRlciBvYmplY3QuCisgICAgICogQHBhcmFtIG92ZXJyaWRlIEBwIHRydWUg
aWYgaW5wdXQgb3ZlcnJpZGVzIGV4aXN0aW5nIGNoYXJhY3RlcnMsCisgICAgICoJCUBwIGZhbHNl
IGlmIGl0IGluc2VydHMgdGhlbS4gVGhlIHdpZHRoIG9mIHRoZSBjYXJldCBkZXBlbmRzIG9uCisg
ICAgICoJCXRoaXMgb25lLgorICAgICAqIEBwYXJhbSBfeCByZXR1cm5zIHRoZSBsZWZ0IGNvb3Jk
aW5hdGUKKyAgICAgKiBAcGFyYW0gX3kgcmV0dXJucyB0aGUgdG9wIGNvb3JkaW5hdGUKKyAgICAg
KiBAcGFyYW0gd2lkdGggcmV0dXJucyB0aGUgY2FyZXQncyB3aWR0aAorICAgICAqIEBwYXJhbSBo
ZWlnaHQgcmV0dXJucyB0aGUgY2FyZXQncyBoZWlnaHQKKyAgICAgKi8KKyAgICB2aXJ0dWFsIHZv
aWQgY2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50ICZfeSwg
aW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpOwogCiAgICAgLy8gcmV0dXJucyB0aGUgbG93ZXN0IHBv
c2l0aW9uIG9mIHRoZSBsb3dlc3Qgb2JqZWN0IGluIHRoYXQgcGFydGljdWxhciBvYmplY3QuCiAg
ICAgLy8gVGhpcyAnaGVpZ2h0JyBpcyByZWxhdGl2ZSB0byB0aGUgdG9wbGVmdCBvZiB0aGUgbWFy
Z2luIGJveCBvZiB0aGUgb2JqZWN0LgpAQCAtNTAwLDYgKzUxNiwyMSBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgUUZvbnRNZXRyaWNzICZmb250TWV0cmljcyhib29sIGZpcnN0TGluZSkgY29uc3Qgewog
CXJldHVybiBzdHlsZSggZmlyc3RMaW5lICktPmZvbnRNZXRyaWNzKCk7CiAgICAgfQorCisgICAg
LyoqIHJldHVybnMgdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZSB0aGUgY2FyZXQgb2Zmc2V0IG1h
eSBoYXZlIHRvCisgICAgICogc3RpbGwgcG9pbnQgdG8gYSB2YWxpZCBwb3NpdGlvbi4KKyAgICAg
KgorICAgICAqIFJldHVybnMgMCBieSBkZWZhdWx0LgorICAgICAqLworICAgIHZpcnR1YWwgbG9u
ZyBtaW5PZmZzZXQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgLyoqIHJldHVybnMgdGhlIGhp
Z2hlc3QgcG9zc2libGUgdmFsdWUgdGhlIGNhcmV0IG9mZnNldCBtYXkgaGF2ZSB0bworICAgICAq
IHN0aWxsIHBvaW50IHRvIGEgdmFsaWQgcG9zaXRpb24uCisgICAgICoKKyAgICAgKiBSZXR1cm5z
IDAgYnkgZGVmYXVsdCwgYXMgZ2VuZXJpYyBlbGVtZW50cyBhcmUgY29uc2lkZXJlZCB0byBoYXZl
IG5vCisgICAgICogd2lkdGguCisgICAgICovCisgICAgdmlydHVhbCBsb25nIG1heE9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzZWxl
Y3Rpb25TdGFydEVuZChpbnQmIHNwb3MsIGludCYgZXBvcyk7CiAKSW5kZXg6IHJlbmRlcmluZy9y
ZW5kZXJfcmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJz
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjExNwpkaWZmIC11IC1wIC1yMS4xMTcgcmVuZGVyX3JlcGxhY2VkLmNwcAotLS0gcmVuZGVy
aW5nL3JlbmRlcl9yZXBsYWNlZC5jcHAJMzEgSnVsIDIwMDMgMTU6MDE6MzggLTAwMDAJMS4xMTcK
KysrIHJlbmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuY3BwCTE4IEF1ZyAyMDAzIDIxOjUyOjUzIC0w
MDAwCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KICNpbmNsdWRlICJyZW5kZXJfcmVwbGFjZWQuaCIK
ICNpbmNsdWRlICJyZW5kZXJfcm9vdC5oIgorI2luY2x1ZGUgInJlbmRlcl9saW5lLmgiCiAKICNp
bmNsdWRlICJyZW5kZXJfYXJlbmEuaCIKIApJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNl
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmlu
Zy9yZW5kZXJfcmVwbGFjZWQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OApkaWZmIC11IC1w
IC1yMS40OCByZW5kZXJfcmVwbGFjZWQuaAotLS0gcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5o
CTI1IEp1biAyMDAzIDIyOjM0OjE4IC0wMDAwCTEuNDgKKysrIHJlbmRlcmluZy9yZW5kZXJfcmVw
bGFjZWQuaAkxOCBBdWcgMjAwMyAyMTo1Mjo1MyAtMDAwMApAQCAtNTcsNiArNTcsMjAgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uKGludCB4LCBpbnQgeSwgaW50IGZyb20s
IGludCBsZW4sIGludCB3aWR0aCwgYm9vbCByZXZlcnNlLCBib29sIGZpcnN0TGluZSwgaW50KTsK
IAorICAgIC8qKiByZXR1cm5zIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUgdGhlIGNhcmV0IG9m
ZnNldCBtYXkgaGF2ZSB0bworICAgICAqIHN0aWxsIHBvaW50IHRvIGEgdmFsaWQgcG9zaXRpb24u
CisgICAgICoKKyAgICAgKiBSZXR1cm5zIDAuCisgICAgICovCisgICAgdmlydHVhbCBsb25nIG1p
bk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAvKiogcmV0dXJucyB0aGUgaGlnaGVz
dCBwb3NzaWJsZSB2YWx1ZSB0aGUgY2FyZXQgb2Zmc2V0IG1heSBoYXZlIHRvCisgICAgICogc3Rp
bGwgcG9pbnQgdG8gYSB2YWxpZCBwb3NpdGlvbi4KKyAgICAgKgorICAgICAqIFJldHVybnMgMSBh
cyByZXBsYWNlZCBlbGVtZW50cyBhcmUgY29uc2lkZXJlZCB0byBiZSBhbiBlbnRpdHkgdGhhdAor
ICAgICAqIGNhbiBoYXZlIHRoZSBjYXJldCBwb3NpdGlvbmVkIGF0IHRoZWlyIGJlZ2lubmluZyAo
MCksIGFuZCBhdCB0aGVpciBlbmQgKDEpLgorICAgICAqLworICAgIHZpcnR1YWwgbG9uZyBtYXhP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiAxOyB9CisKIHByb3RlY3RlZDoKICAgICBzaG9ydCBtX2lu
dHJpbnNpY1dpZHRoOwogICAgIHNob3J0IG1faW50cmluc2ljSGVpZ2h0OwpJbmRleDogcmVuZGVy
aW5nL3JlbmRlcl9zdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxp
YnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNTkKZGlmZiAtdSAtcCAtcjEuNTkgcmVuZGVyX3N0eWxlLmNwcAotLS0gcmVuZGVyaW5nL3Jl
bmRlcl9zdHlsZS5jcHAJNCBGZWIgMjAwMyAyMTozODoyMiAtMDAwMAkxLjU5CisrKyByZW5kZXJp
bmcvcmVuZGVyX3N0eWxlLmNwcAkxOCBBdWcgMjAwMyAyMTo1Mjo1MyAtMDAwMApAQCAtMzA3LDYg
KzMwNyw3IEBAIFJlbmRlclN0eWxlOjpEaWZmIFJlbmRlclN0eWxlOjpkaWZmKCBjb24KIAogICAg
IC8vIE5vblZpc2libGU6CiAvLyAJRUN1cnNvciBfY3Vyc29yX3N0eWxlIDogNDsKKy8vCUVVc2Vy
SW5wdXQgX3VzZXJfaW5wdXQgOiAyOwlhcyBsb25nIGFzIDplbmFibGVkIGlzIG5vdCBpbXBsJ2QK
IAogLy8gIyMjIHRoaXMgbmVlZHMgd29yayB0byBrbm93IG1vcmUgZXhhY3RseSBpZiB3ZSBuZWVk
IGEgcmVsYXlvdXQKIC8vICAgICBvciBqdXN0IGEgcmVwYWludApJbmRleDogcmVuZGVyaW5nL3Jl
bmRlcl9zdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1s
L3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44OApkaWZm
IC11IC1wIC1yMS44OCByZW5kZXJfc3R5bGUuaAotLS0gcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5o
CTE0IEF1ZyAyMDAzIDAxOjEyOjU3IC0wMDAwCTEuODgKKysrIHJlbmRlcmluZy9yZW5kZXJfc3R5
bGUuaAkxOCBBdWcgMjAwMyAyMTo1Mjo1NCAtMDAwMApAQCAtNDQ1LDYgKzQ0NSwxMCBAQCBlbnVt
IEVDdXJzb3IgewogICAgIENVUlNPUl9TX1JFU0laRSwgQ1VSU09SX1dfUkVTSVpFLCBDVVJTT1Jf
VEVYVCwgQ1VSU09SX1dBSVQsIENVUlNPUl9IRUxQCiB9OwogCitlbnVtIEVVc2VySW5wdXQgewor
ICAgIFVJX0VOQUJMRUQsIFVJX0RJU0FCTEVELCBVSV9OT05FCit9OworCiBlbnVtIENvbnRlbnRU
eXBlIHsKICAgICBDT05URU5UX05PTkUsIENPTlRFTlRfT0JKRUNULCBDT05URU5UX1RFWFQsCiAg
ICAgQ09OVEVOVF9BVFRSCkBAIC01MTMsNyArNTE3LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAg
ICAgICAgIC8vIG5vbiBDU1MyIGluaGVyaXRlZAogICAgICAgICAgICAgICAgIGJvb2wgX3Zpc3Vh
bGx5T3JkZXJlZCA6IDE7CiAgICAgICAgICAgICAgICAgYm9vbCBfaHRtbEhhY2tzIDoxOwotICAg
ICAgICAgICAgICAgIGludCBfdW51c2VkIDogMjsKKyAgICAgICAgICAgICAgICBFVXNlcklucHV0
IF91c2VyX2lucHV0IDogMjsKICAgICAgICAgICAgIH0gZjsKICAgICAgICAgICAgIFFfVUlOVDMy
IF9pZmxhZ3M7CiAgICAgICAgIH07CkBAIC01OTAsNyArNTk0LDcgQEAgcHJvdGVjdGVkOgogCWlu
aGVyaXRlZF9mbGFncy5mLl93aGl0ZV9zcGFjZSA9IE5PUk1BTDsKIAlpbmhlcml0ZWRfZmxhZ3Mu
Zi5fdmlzdWFsbHlPcmRlcmVkID0gZmFsc2U7CiAJaW5oZXJpdGVkX2ZsYWdzLmYuX2h0bWxIYWNr
cz1mYWxzZTsKLQlpbmhlcml0ZWRfZmxhZ3MuZi5fdW51c2VkID0gMDsKKwlpbmhlcml0ZWRfZmxh
Z3MuZi5fdXNlcl9pbnB1dCA9IFVJX05PTkU7CiAKIAlub25pbmhlcml0ZWRfZmxhZ3MuZi5fZGlz
cGxheSA9IElOTElORTsKIAlub25pbmhlcml0ZWRfZmxhZ3MuZi5fYmdfcmVwZWF0ID0gUkVQRUFU
OwpAQCAtNzQ4LDYgKzc1Miw4IEBAIHB1YmxpYzoKIAogICAgIEVDdXJzb3IgY3Vyc29yKCkgY29u
c3QgeyByZXR1cm4gaW5oZXJpdGVkX2ZsYWdzLmYuX2N1cnNvcl9zdHlsZTsgfQogCisgICAgRVVz
ZXJJbnB1dCB1c2VySW5wdXQoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWRfZmxhZ3MuZi5fdXNl
cl9pbnB1dDsgfQorCiAvLyBhdHRyaWJ1dGUgc2V0dGVyIG1ldGhvZHMKIAogICAgIHZvaWQgc2V0
RGlzcGxheShFRGlzcGxheSB2KSB7ICBub25pbmhlcml0ZWRfZmxhZ3MuZi5fZGlzcGxheSA9IHY7
IH0KQEAgLTg1Myw2ICs4NTksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQYWRkaW5nUmlnaHQo
TGVuZ3RoIHYpICB7ICBTRVRfVkFSKHN1cnJvdW5kLHBhZGRpbmcucmlnaHQsdikgfQogCiAgICAg
dm9pZCBzZXRDdXJzb3IoIEVDdXJzb3IgYyApIHsgaW5oZXJpdGVkX2ZsYWdzLmYuX2N1cnNvcl9z
dHlsZSA9IGM7IH0KKyAgICAKKyAgICB2b2lkIHNldFVzZXJJbnB1dChFVXNlcklucHV0IHVpKSB7
IGluaGVyaXRlZF9mbGFncy5mLl91c2VyX2lucHV0ID0gdWk7IH0KIAogICAgIGJvb2wgaHRtbEhh
Y2tzKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkX2ZsYWdzLmYuX2h0bWxIYWNrczsgfQogICAg
IHZvaWQgc2V0SHRtbEhhY2tzKGJvb2wgYj10cnVlKSB7IGluaGVyaXRlZF9mbGFncy5mLl9odG1s
SGFja3MgPSBiOyB9CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxl
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzcKZGlmZiAtdSAtcCAtcjEuMjM3IHJlbmRl
cl90YWJsZS5jcHAKLS0tIHJlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCTIxIEp1bCAyMDAzIDIy
OjEzOjA0IC0wMDAwCTEuMjM3CisrKyByZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAkxOCBBdWcg
MjAwMyAyMTo1Mjo1NiAtMDAwMApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImh0bWwvaHRt
bF90YWJsZWltcGwuaCIKICNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAibWlz
Yy9odG1sYXR0cnMuaCIKKyNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIKIAogI2lu
Y2x1ZGUgPGtnbG9iYWwuaD4KIApAQCAtMTAzLDExICsxMDQsMTEgQEAgdm9pZCBSZW5kZXJUYWJs
ZTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgKgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6
cG9zaXRpb24oaW50IHgsIGludCB5LCBpbnQsIGludCwgaW50LCBib29sLCBib29sLCBpbnQpCit2
b2lkIFJlbmRlclRhYmxlOjpwb3NpdGlvbihJbmxpbmVCb3ggKmJveCwgaW50LCBpbnQsIGJvb2ws
IGludCkKIHsKICAgICAvL2ZvciBpbmxpbmUgdGFibGVzIG9ubHkKLSAgICBtX3ggPSB4ICsgbWFy
Z2luTGVmdCgpOwotICAgIG1feSA9IHkgKyBtYXJnaW5Ub3AoKTsKKyAgICBtX3ggPSBib3gtPnhQ
b3MoKSArIG1hcmdpbkxlZnQoKTsKKyAgICBtX3kgPSBib3gtPnlQb3MoKSArIG1hcmdpblRvcCgp
OwogfQogCiBzaG9ydCBSZW5kZXJUYWJsZTo6bGluZUhlaWdodChib29sIGIpIGNvbnN0CkluZGV4
OiByZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2Rl
L2tkZWxpYnMva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjg4CmRpZmYgLXUgLXAgLXIxLjg4IHJlbmRlcl90YWJsZS5oCi0tLSByZW5kZXJpbmcv
cmVuZGVyX3RhYmxlLmgJMTQgQXVnIDIwMDMgMDE6MTI6NTcgLTAwMDAJMS44OAorKysgcmVuZGVy
aW5nL3JlbmRlcl90YWJsZS5oCTE4IEF1ZyAyMDAzIDIxOjUyOjU2IC0wMDAwCkBAIC0xMDYsNyAr
MTA2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldENlbGxXaWR0aHMoICk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb24oaW50IHgsIGludCB5LCBpbnQgZnJvbSwgaW50IGxl
biwgaW50IHdpZHRoLCBib29sIHJldmVyc2UsIGJvb2wgZmlyc3RMaW5lLCBpbnQpOworICAgIHZp
cnR1YWwgdm9pZCBwb3NpdGlvbihJbmxpbmVCb3ggKiwgaW50IGZyb20sIGludCBsZW4sIGJvb2wg
cmV2ZXJzZSwgaW50KTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjV2lkdGgoKTsKIApJbmRleDog
cmVuZGVyaW5nL3JlbmRlcl90ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUv
a2RlbGlicy9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjIwNApkaWZmIC11IC1wIC1yMS4yMDQgcmVuZGVyX3RleHQuY3BwCi0tLSByZW5kZXJp
bmcvcmVuZGVyX3RleHQuY3BwCTIyIE1hciAyMDAzIDIxOjIwOjM4IC0wMDAwCTEuMjA0CisrKyBy
ZW5kZXJpbmcvcmVuZGVyX3RleHQuY3BwCTE4IEF1ZyAyMDAzIDIxOjUyOjU4IC0wMDAwCkBAIC0z
LDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAtMjAwMyBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogICAgICAgICAgIChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTQyLDM4ICs0MiwzOCBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1c2lu
ZyBuYW1lc3BhY2UgRE9NOwogCiAjaWZuZGVmIE5ERUJVRwotc3RhdGljIGJvb2wgaW5UZXh0U2xh
dmVEZXRhY2g7CitzdGF0aWMgYm9vbCBpbklubGluZVRleHRCb3hEZXRhY2g7CiAjZW5kaWYKIAot
dm9pZCBUZXh0U2xhdmU6OmRldGFjaChSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpCit2b2lkIElu
bGluZVRleHRCb3g6OmRldGFjaChSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpCiB7CiAjaWZuZGVm
IE5ERUJVRwotICAgIGluVGV4dFNsYXZlRGV0YWNoID0gdHJ1ZTsKKyAgICBpbklubGluZVRleHRC
b3hEZXRhY2ggPSB0cnVlOwogI2VuZGlmCiAgICAgZGVsZXRlIHRoaXM7CiAjaWZuZGVmIE5ERUJV
RwotICAgIGluVGV4dFNsYXZlRGV0YWNoID0gZmFsc2U7CisgICAgaW5JbmxpbmVUZXh0Qm94RGV0
YWNoID0gZmFsc2U7CiAjZW5kaWYKIAogICAgIC8vIFJlY292ZXIgdGhlIHNpemUgbGVmdCB0aGVy
ZSBmb3IgdXMgYnkgb3BlcmF0b3IgZGVsZXRlIGFuZCBmcmVlIHRoZSBtZW1vcnkuCiAgICAgcmVu
ZGVyQXJlbmEtPmZyZWUoKihzaXplX3QgKil0aGlzLCB0aGlzKTsKIH0KIAotdm9pZCogVGV4dFNs
YXZlOjpvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpIHRo
cm93KCkKK3ZvaWQqIElubGluZVRleHRCb3g6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIFJlbmRl
ckFyZW5hKiByZW5kZXJBcmVuYSkgdGhyb3coKQogewogICAgIHJldHVybiByZW5kZXJBcmVuYS0+
YWxsb2NhdGUoc3opOwogfQogCi12b2lkIFRleHRTbGF2ZTo6b3BlcmF0b3IgZGVsZXRlKHZvaWQq
IHB0ciwgc2l6ZV90IHN6KQordm9pZCBJbmxpbmVUZXh0Qm94OjpvcGVyYXRvciBkZWxldGUodm9p
ZCogcHRyLCBzaXplX3Qgc3opCiB7Ci0gICAgYXNzZXJ0KGluVGV4dFNsYXZlRGV0YWNoKTsKKyAg
ICBhc3NlcnQoaW5JbmxpbmVUZXh0Qm94RGV0YWNoKTsKIAogICAgIC8vIFN0YXNoIHNpemUgd2hl
cmUgZGV0YWNoIGNhbiBmaW5kIGl0LgogICAgICooc2l6ZV90ICopcHRyID0gc3o7CiB9CiAKIAot
dm9pZCBUZXh0U2xhdmU6OnBhaW50U2VsZWN0aW9uKGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQg
KnRleHQsIFFQYWludGVyICpwLCBSZW5kZXJTdHlsZSogc3R5bGUsIGludCB0eCwgaW50IHR5LCBp
bnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0
aW9uKGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQgKnRleHQsIFFQYWludGVyICpwLCBSZW5kZXJT
dHlsZSogc3R5bGUsIGludCB0eCwgaW50IHR5LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCiB7
CiAgICAgaWYoc3RhcnRQb3MgPiBtX2xlbikgcmV0dXJuOwogICAgIGlmKHN0YXJ0UG9zIDwgMCkg
c3RhcnRQb3MgPSAwOwpAQCAtODMsMTIgKzgzLDEyIEBAIHZvaWQgVGV4dFNsYXZlOjpwYWludFNl
bGVjdGlvbihjb25zdCBGb24KIAogICAgIHR5ICs9IG1fYmFzZWxpbmU7CiAKLSAgICAvL2tkRGVi
dWcoIDYwNDAgKSA8PCAidGV4dFNsYXZlOjpwYWludGluZygiIDw8IHMuc3RyaW5nKCkgPDwgIikg
YXQoIiA8PCB4K190eCA8PCAiLyIgPDwgeStfdHkgPDwgIikiIDw8IGVuZGw7CisgICAgLy9rZERl
YnVnKCA2MDQwICkgPDwgInRleHRSdW46OnBhaW50aW5nKCIgPDwgUUNvbnN0U3RyaW5nKHRleHQt
PnN0ci0+cyArIG1fc3RhcnQsIG1fbGVuKS5zdHJpbmcoKSA8PCAiKSBhdCgiIDw8IG1feCt0eCA8
PCAiLyIgPDwgbV95K3R5IDw8ICIpIiA8PCBlbmRsOwogICAgIGYtPmRyYXdUZXh0KHAsIG1feCAr
IHR4LCBtX3kgKyB0eSwgdGV4dC0+c3RyLT5zLCB0ZXh0LT5zdHItPmwsIG1fc3RhcnQsIG1fbGVu
LAogCQltX3RvQWRkLCBtX3JldmVyc2VkID8gUVBhaW50ZXI6OlJUTCA6IFFQYWludGVyOjpMVFIs
IHN0YXJ0UG9zLCBlbmRQb3MsIGMpOwogfQogCi12b2lkIFRleHRTbGF2ZTo6cGFpbnREZWNvcmF0
aW9uKCBRUGFpbnRlciAqcHQsIFJlbmRlclRleHQqIHAsIGludCBfdHgsIGludCBfdHksIGludCBk
ZWNvLCBib29sIGJlZ2luLCBib29sIGVuZCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNv
cmF0aW9uKCBRUGFpbnRlciAqcHQsIFJlbmRlclRleHQqIHAsIGludCBfdHgsIGludCBfdHksIGlu
dCBkZWNvLCBib29sIGJlZ2luLCBib29sIGVuZCkKIHsKICAgICBfdHggKz0gbV94OwogICAgIF90
eSArPSBtX3k7CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBUZXh0U2xhdmU6OnBhaW50RGVjb3Jh
dGlvbiggUVBhaW50ZQogICAgIC8vIHN1cHBvcnQgaXQuIExhcnMKIH0KIAotdm9pZCBUZXh0U2xh
dmU6OnBhaW50Qm94RGVjb3JhdGlvbnMoUVBhaW50ZXIgKnB0LCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclRleHQgKnAsIGludCBfdHgsIGludCBfdHksIGJvb2wgYmVnaW4sIGJvb2wgZW5kKQor
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludEJveERlY29yYXRpb25zKFFQYWludGVyICpwdCwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJUZXh0ICpwLCBpbnQgX3R4LCBpbnQgX3R5LCBib29sIGJl
Z2luLCBib29sIGVuZCkKIHsKICAgICBpbnQgdG9wRXh0cmEgPSBwLT5ib3JkZXJUb3AoKSArIHAt
PnBhZGRpbmdUb3AoKTsKICAgICBpbnQgYm90dG9tRXh0cmEgPSBwLT5ib3JkZXJCb3R0b20oKSAr
IHAtPnBhZGRpbmdCb3R0b20oKTsKQEAgLTE1MSw5ICsxNTEsMjYgQEAgdm9pZCBUZXh0U2xhdmU6
OnBhaW50Qm94RGVjb3JhdGlvbnMoUVBhaQogICAgICAgICBwLT5wYWludEJvcmRlcihwdCwgX3R4
LCBfdHksIHdpZHRoLCBoZWlnaHQsIHN0eWxlLCBiZWdpbiwgZW5kKTsKIH0KIAotRmluZFNlbGVj
dGlvblJlc3VsdCBUZXh0U2xhdmU6OmNoZWNrU2VsZWN0aW9uUG9pbnQoaW50IF94LCBpbnQgX3ks
IGludCBfdHgsIGludCBfdHksIGNvbnN0IEZvbnQgKmYsIFJlbmRlclRleHQgKnRleHQsIGludCAm
IG9mZnNldCwgc2hvcnQgbGluZUhlaWdodCkKKy8qKgorICogRGlzdHJpYnV0ZXMgcGl4ZWxzIHRv
IGEganVzdGlmaWVkIHRleHQuCisgKiBAcGFyYW0gbnVtU3BhY2VzIHNwYWNlcyBsZWZ0LCB3aWxs
IGJlIGRlY3JlbWVudGVkIGJ5IG9uZQorICogQHBhcmFtIHRvQWRkIG51bWJlciBvZiBwaXhlbHMg
bGVmdCB0byBiZSBkaXN0cmlidXRlcywgd2lsbCBoYXZlIHRoZQorICoJYW1vdW50IG9mIHBpeGVs
cyBkaXN0cmlidXRlZCBpbiB0aGlzIGNhbGwgc3VidHJhY3RlZC4KKyAqIEByZXR1cm4gbnVtYmVy
IG9mIHBpeGVscyB0byBkaXN0cmlidXRlCisgKi8KK2lubGluZSBpbnQganVzdGlmeVdpZHRoKGlu
dCAmbnVtU3BhY2VzLCBpbnQgJnRvQWRkKSB7CisgIGludCBhID0gMDsKKyAgaWYgKCBudW1TcGFj
ZXMgKSB7CisgICAgYSA9IHRvQWRkL251bVNwYWNlczsKKyAgICB0b0FkZCAtPSBhOworICAgIG51
bVNwYWNlcy0tOworICB9LyplbmQgaWYqLworICByZXR1cm4gYTsKK30KKworRmluZFNlbGVjdGlv
blJlc3VsdCBJbmxpbmVUZXh0Qm94OjpjaGVja1NlbGVjdGlvblBvaW50KGludCBfeCwgaW50IF95
LCBpbnQgX3R4LCBpbnQgX3R5LCBjb25zdCBGb250ICpmLCBSZW5kZXJUZXh0ICp0ZXh0LCBpbnQg
JiBvZmZzZXQsIHNob3J0IGxpbmVIZWlnaHQpCiB7Ci0vLyAgICAgICBrZERlYnVnKDYwNDApIDw8
ICJUZXh0U2xhdmU6OmNoZWNrU2VsZWN0aW9uUG9pbnQgIiA8PCB0aGlzIDw8ICIgX3g9IiA8PCBf
eCA8PCAiIF95PSIgPDwgX3kKKy8vICAgICAgIGtkRGVidWcoNjA0MCkgPDwgIklubGluZVRleHRC
b3g6OmNoZWNrU2VsZWN0aW9uUG9pbnQgIiA8PCB0aGlzIDw8ICIgX3g9IiA8PCBfeCA8PCAiIF95
PSIgPDwgX3kKIC8vICAgICAgICAgICAgICAgICAgICAgPDwgIiBfdHgrbV94PSIgPDwgX3R4K21f
eCA8PCAiIF90eSttX3k9IiA8PCBfdHkrbV95IDw8IGVuZGw7CiAgICAgb2Zmc2V0ID0gMDsKIApA
QCAtMTc2LDEzICsxOTMsMjcgQEAgRmluZFNlbGVjdGlvblJlc3VsdCBUZXh0U2xhdmU6OmNoZWNr
U2VsZQogICAgICAgICByZXR1cm4gbV9yZXZlcnNlZCA/IFNlbGVjdGlvblBvaW50QWZ0ZXJJbkxp
bmUgOiBTZWxlY3Rpb25Qb2ludEJlZm9yZUluTGluZTsKICAgICB9CiAKKyAgICAvLyBjb25zaWRl
ciBzcGFjaW5nIGZvciBqdXN0aWZpZWQgdGV4dAorICAgIGludCB0b0FkZCA9IG1fdG9BZGQ7Cisg
ICAgYm9vbCBqdXN0aWZpZWQgPSB0ZXh0LT5zdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBKVVNUSUZZ
ICYmIHRvQWRkID4gMDsKKyAgICBpbnQgbnVtU3BhY2VzID0gMDsKKyAgICBpZiAoanVzdGlmaWVk
KSB7CisKKyAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBtX2xlbjsgaSsrICkKKyAgICAgICAg
ICAgIGlmICggdGV4dC0+c3RyLT5zW21fc3RhcnQraV0uZGlyZWN0aW9uKCkgPT0gUUNoYXI6OkRp
cldTICkKKwkgICAgICAgIG51bVNwYWNlcysrOworCisgICAgfS8qZW5kIGlmKi8KKwogICAgIGlu
dCBkZWx0YSA9IF94IC0gKF90eCArIG1feCk7Ci0gICAgLy9rZERlYnVnKDYwNDApIDw8ICJUZXh0
U2xhdmU6OmNoZWNrU2VsZWN0aW9uUG9pbnQgZGVsdGE9IiA8PCBkZWx0YSA8PCBlbmRsOworICAg
IC8va2REZWJ1Zyg2MDQwKSA8PCAiSW5saW5lVGV4dEJveDo6Y2hlY2tTZWxlY3Rpb25Qb2ludCBk
ZWx0YT0iIDw8IGRlbHRhIDw8IGVuZGw7CiAgICAgaW50IHBvcyA9IDA7CiAgICAgaWYgKCBtX3Jl
dmVyc2VkICkgewogCWRlbHRhIC09IG1fd2lkdGg7CiAJd2hpbGUocG9zIDwgbV9sZW4pIHsKIAkg
ICAgaW50IHcgPSBmLT53aWR0aCggdGV4dC0+c3RyLT5zLCB0ZXh0LT5zdHItPmwsIG1fc3RhcnQg
KyBwb3MpOworCSAgICBpZiAoanVzdGlmaWVkICYmIHRleHQtPnN0ci0+c1ttX3N0YXJ0ICsgcG9z
XS5pc1NwYWNlKCkpCisJICAgICAgICB3ICs9IGp1c3RpZnlXaWR0aChudW1TcGFjZXMsIHRvQWRk
KTsKIAkgICAgaW50IHcyID0gdy8yOwogCSAgICB3IC09IHcyOwogCSAgICBkZWx0YSArPSB3MjsK
QEAgLTE5Myw2ICsyMjQsOCBAQCBGaW5kU2VsZWN0aW9uUmVzdWx0IFRleHRTbGF2ZTo6Y2hlY2tT
ZWxlCiAgICAgfSBlbHNlIHsKIAl3aGlsZShwb3MgPCBtX2xlbikgewogCSAgICBpbnQgdyA9IGYt
PndpZHRoKCB0ZXh0LT5zdHItPnMsIHRleHQtPnN0ci0+bCwgbV9zdGFydCArIHBvcyk7CisJICAg
IGlmIChqdXN0aWZpZWQgJiYgdGV4dC0+c3RyLT5zW21fc3RhcnQgKyBwb3NdLmlzU3BhY2UoKSkK
KwkgICAgICAgIHcgKz0ganVzdGlmeVdpZHRoKG51bVNwYWNlcywgdG9BZGQpOwogCSAgICBpbnQg
dzIgPSB3LzI7CiAJICAgIHcgLT0gdzI7CiAJICAgIGRlbHRhIC09IHcyOwpAQCAtMjA2LDIzICsy
MzksMTE1IEBAIEZpbmRTZWxlY3Rpb25SZXN1bHQgVGV4dFNsYXZlOjpjaGVja1NlbGUKICAgICBy
ZXR1cm4gU2VsZWN0aW9uUG9pbnRJbnNpZGU7CiB9CiAKK2ludCBJbmxpbmVUZXh0Qm94OjpvZmZz
ZXRGb3JQb2ludChpbnQgX3gsIGludCAmYXgpIGNvbnN0Cit7CisgIGNvbnN0IFJlbmRlclRleHQg
KnQgPSByZW5kZXJUZXh0KCk7CisKKyAgLy8gRG8gYmluYXJ5IHNlYXJjaCBmb3IgZmluZGluZyBv
dXQgb2Zmc2V0LCBzYXZlcyBzb21lIHRpbWUgZm9yIGxvbmcKKyAgLy8gcnVucy4KKyAgaW50IHN0
YXJ0ID0gMDsKKyAgaW50IGVuZCA9IG1fbGVuOworICBheCA9IG1feDsKKyAgaW50IG9mZnNldCA9
IChzdGFydCArIGVuZCkgLyAyOworICB3aGlsZSAoZW5kIC0gc3RhcnQgPiAwKSB7CisgICAgLy8g
YWx3YXlzIHNuYXAgdG8gdGhlIHJpZ2h0IGNvbHVtbi4gVGhpcyBtYWtlcyB1cCBmb3IgImp1bXB5
IiB2ZXJ0aWNhbAorICAgIC8vIG5hdmlnYXRpb24uCisgICAgaWYgKGVuZCAtIHN0YXJ0ID09IDEp
IHN0YXJ0ID0gZW5kOworCisgICAgb2Zmc2V0ID0gKHN0YXJ0ICsgZW5kKSAvIDI7CisgICAgYXgg
PSBtX3ggKyB3aWR0aChvZmZzZXQpOworICAgIGlmIChheCA+IF94KSBlbmQgPSBvZmZzZXQ7Cisg
ICAgZWxzZSBpZiAoYXggPCBfeCkgc3RhcnQgPSBvZmZzZXQ7CisgICAgZWxzZSBicmVhazsKKyAg
fS8qd2VuZCovCisgIHJldHVybiBtX3N0YXJ0ICsgb2Zmc2V0OworfQorCitpbnQgSW5saW5lVGV4
dEJveDo6d2lkdGgoaW50IHBvcykgY29uc3QKK3sKKyAgLy8gZ2FzcCEgc29tZXRpbWVzIHBvcyBp
cyBpIDwgMCB3aGljaCBjcmFzaGVzIEZvbnQ6OndpZHRoCisgIHBvcyA9IFFNQVgocG9zLCAwKTsK
KworICBjb25zdCBSZW5kZXJUZXh0ICp0ID0gcmVuZGVyVGV4dCgpOworICBRX0FTU0VSVCh0LT5p
c1RleHQoKSk7CisgIGNvbnN0IEZvbnQgKmYgPSB0LT5odG1sRm9udChtX2ZpcnN0TGluZSk7Cisg
IGNvbnN0IFFGb250TWV0cmljcyAmZm0gPSB0LT5mb250TWV0cmljcyhtX2ZpcnN0TGluZSk7CisK
KyAgaW50IG51bVNwYWNlcyA9IDA7CisgIC8vIGNvbnNpZGVyIHNwYWNpbmcgZm9yIGp1c3RpZmll
ZCB0ZXh0CisgIGJvb2wganVzdGlmaWVkID0gdC0+c3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gSlVT
VElGWTsKKyAgLy9rZERlYnVnKDYwMDApIDw8ICJJbmxpbmVUZXh0Qm94Ojp3aWR0aChpbnQpIiA8
PCBlbmRsOworICBpZiAoanVzdGlmaWVkICYmIG1fdG9BZGQgPiAwKSBkbyB7CisgICAgLy9rZERl
YnVnKDYwMDApIDw8ICJqdXN0aWZ5IiA8PCBlbmRsOworCisvLyAgICBRQ29uc3RTdHJpbmcgY3N0
ciA9IFFDb25zdFN0cmluZyh0LT5zdHItPnMgKyBtX3N0YXJ0LCBtX2xlbik7CisgICAgZm9yKCBp
bnQgaSA9IDA7IGkgPCBtX2xlbjsgaSsrICkKKyAgICAgIGlmICggdC0+c3RyLT5zW21fc3RhcnQr
aV0uZGlyZWN0aW9uKCkgPT0gUUNoYXI6OkRpcldTICkKKwludW1TcGFjZXMrKzsKKyAgICBpZiAo
bnVtU3BhY2VzID09IDApIGJyZWFrOworCisgICAgaW50IHRvQWRkID0gbV90b0FkZDsKKyAgICBp
bnQgdyA9IDA7CQkvLyBhY2N1bXVsYXRlZCB3aWR0aAorICAgIGludCBzdGFydCA9IDA7CS8vIHN0
YXJ0IG9mIG5vbi1zcGFjZSBzZXF1ZW5jZQorICAgIGludCBjdXJyZW50ID0gMDsJLy8gY3VycmVu
dCBwb3NpdGlvbgorICAgIHdoaWxlIChjdXJyZW50IDwgcG9zKSB7CisgICAgICAvLyBhZGQgc3Bh
Y2luZworICAgICAgd2hpbGUgKGN1cnJlbnQgPCBwb3MgJiYgdC0+c3RyLT5zW21fc3RhcnQgKyBj
dXJyZW50XS5pc1NwYWNlKCkpIHsKKwl3ICs9IGYtPmdldFdvcmRTcGFjaW5nKCk7CisJdyArPSBm
LT5nZXRMZXR0ZXJTcGFjaW5nKCk7CisJdyArPSBqdXN0aWZ5V2lkdGgobnVtU3BhY2VzLCB0b0Fk
ZCk7CisgICAgICAgIHcgKz0gZm0ud2lkdGgoJyAnKTsJLy8gIyMjIHZhbGlkIGFzc3VtcHRpb24/
IChMUykKKyAgICAgICAgY3VycmVudCsrOyBzdGFydCsrOworICAgICAgfS8qd2VuZCovCisgICAg
ICBpZiAoY3VycmVudCA+PSBwb3MpIGJyZWFrOworCisgICAgICAvLyBzZWVrIG5leHQgc3BhY2UK
KyAgICAgIHdoaWxlIChjdXJyZW50IDwgcG9zICYmICF0LT5zdHItPnNbbV9zdGFydCArIGN1cnJl
bnRdLmlzU3BhY2UoKSkKKyAgICAgICAgY3VycmVudCsrOworCisgICAgICAvLyBjaGVjayBydW4g
d2l0aG91dCBzcGFjZXMKKyAgICAgIHcgKz0gZi0+d2lkdGgodC0+c3RyLT5zICsgbV9zdGFydCwg
bV9sZW4sIHN0YXJ0LCBjdXJyZW50IC0gc3RhcnQpOworICAgICAgc3RhcnQgPSBjdXJyZW50Owor
CisgICAgfS8qd2VuZCovCisKKyAgICByZXR1cm4gdzsKKworICB9IHdoaWxlKGZhbHNlKTsvKmVu
ZCBpZiovCisKKyAgLy9rZERlYnVnKDYwMDApIDw8ICJkZWZhdWx0IiA8PCBlbmRsOworICAvLyBl
bHNlIHVzZSBleGlzdGluZyB3aWR0aCBmdW5jdGlvbgorICByZXR1cm4gZi0+d2lkdGgodC0+c3Ry
LT5zICsgbV9zdGFydCwgbV9sZW4sIDAsIHBvcyk7CisKK30KKworbG9uZyBJbmxpbmVUZXh0Qm94
OjptaW5PZmZzZXQoKSBjb25zdAoreworICByZXR1cm4gbV9zdGFydDsKK30KKworbG9uZyBJbmxp
bmVUZXh0Qm94OjptYXhPZmZzZXQoKSBjb25zdAoreworICByZXR1cm4gbV9zdGFydCArIG1fbGVu
OworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UZXh0U2xhdmVBcnJheTo6VGV4dFNs
YXZlQXJyYXkoKQorSW5saW5lVGV4dEJveEFycmF5OjpJbmxpbmVUZXh0Qm94QXJyYXkoKQogewog
ICAgIHNldEF1dG9EZWxldGUoZmFsc2UpOwogfQogCi1pbnQgVGV4dFNsYXZlQXJyYXk6OmNvbXBh
cmVJdGVtcyggSXRlbSBkMSwgSXRlbSBkMiApCitpbnQgSW5saW5lVGV4dEJveEFycmF5Ojpjb21w
YXJlSXRlbXMoIEl0ZW0gZDEsIEl0ZW0gZDIgKQogewogICAgIGFzc2VydChkMSk7CiAgICAgYXNz
ZXJ0KGQyKTsKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0U2xhdmUqPihkMSktPm1feSAt
IHN0YXRpY19jYXN0PFRleHRTbGF2ZSo+KGQyKS0+bV95OworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxJbmxpbmVUZXh0Qm94Kj4oZDEpLT5tX3kgLSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4o
ZDIpLT5tX3k7CiB9CiAKIC8vIHJlbW92ZSB0aGlzIG9uY2UgUVZlY3Rvcjo6YnNlYXJjaCBpcyBm
aXhlZAotaW50IFRleHRTbGF2ZUFycmF5OjpmaW5kRmlyc3RNYXRjaGluZyhJdGVtIGQpIGNvbnN0
CitpbnQgSW5saW5lVGV4dEJveEFycmF5OjpmaW5kRmlyc3RNYXRjaGluZyhJdGVtIGQpIGNvbnN0
CiB7CiAgICAgaW50IGxlbiA9IGNvdW50KCk7CiAKQEAgLTI5NywxOCArNDIyLDE4IEBAIHZvaWQg
UmVuZGVyVGV4dDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgKl8KIAogUmVuZGVyVGV4dDo6flJlbmRl
clRleHQoKQogewotICAgIGRlbGV0ZVNsYXZlcyggcmVuZGVyQXJlbmEoKSApOworICAgIGRlbGV0
ZVRleHRCb3hlcyggcmVuZGVyQXJlbmEoKSApOwogICAgIGlmKHN0cikgc3RyLT5kZXJlZigpOwog
fQogCiAKIHZvaWQgUmVuZGVyVGV4dDo6ZGV0YWNoKFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSkK
IHsKLSAgICBkZWxldGVTbGF2ZXMocmVuZGVyQXJlbmEpOworICAgIGRlbGV0ZVRleHRCb3hlcyhy
ZW5kZXJBcmVuYSk7CiAgICAgUmVuZGVyT2JqZWN0OjpkZXRhY2gocmVuZGVyQXJlbmEpOwogfQog
Ci12b2lkIFJlbmRlclRleHQ6OmRlbGV0ZVNsYXZlcyhSZW5kZXJBcmVuYSAqYXJlbmEpCit2b2lk
IFJlbmRlclRleHQ6OmRlbGV0ZVRleHRCb3hlcyhSZW5kZXJBcmVuYSAqYXJlbmEpCiB7CiAgICAg
Ly8gdGhpcyBpcyBhIHNsaWdodCB2YXJpYW50IG9mIFFBcnJheTo6Y2xlYXIoKS4KICAgICAvLyBX
ZSBkb24ndCBkZWxldGUgdGhlIGFycmF5IGl0c2VsZiBoZXJlIGJlY2F1c2UgaXRzCkBAIC0zMTks
NyArNDQ0LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpkZWxldGVTbGF2ZXMoUmVuZGVyQXJlbgogICAg
ICAgICBpZiAoIWFyZW5hKQogICAgICAgICAgICAgYXJlbmEgPSByZW5kZXJBcmVuYSgpOwogICAg
ICAgICBmb3IodW5zaWduZWQgaW50IGk9MDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBU
ZXh0U2xhdmUqIHMgPSBtX2xpbmVzLmF0KGkpOworICAgICAgICAgICAgSW5saW5lVGV4dEJveCog
cyA9IG1fbGluZXMuYXQoaSk7CiAgICAgICAgICAgICBpZiAocykKICAgICAgICAgICAgICAgICBz
LT5kZXRhY2goYXJlbmEpOwogICAgICAgICBtX2xpbmVzLnJlbW92ZShpKTsKQEAgLTMyOSwyNiAr
NDU0LDQ1IEBAIHZvaWQgUmVuZGVyVGV4dDo6ZGVsZXRlU2xhdmVzKFJlbmRlckFyZW4KICAgICBL
SFRNTEFzc2VydChtX2xpbmVzLmNvdW50KCkgPT0gMCk7CiB9CiAKLVRleHRTbGF2ZSAqIFJlbmRl
clRleHQ6OmZpbmRUZXh0U2xhdmUoIGludCBvZmZzZXQsIGludCAmcG9zICkKK0lubGluZVRleHRC
b3ggKiBSZW5kZXJUZXh0OjpmaW5kSW5saW5lVGV4dEJveCggaW50IG9mZnNldCwgaW50ICZwb3Mg
KQogewotICAgIC8vIFRoZSB0ZXh0IHNsYXZlcyBwb2ludCB0byBwYXJ0cyBvZiB0aGUgcmVuZGVy
dGV4dCdzIHN0ciBzdHJpbmcKKyAgICAvLyBUaGUgdGV4dCBib3hlcyBwb2ludCB0byBwYXJ0cyBv
ZiB0aGUgcmVuZGVydGV4dCdzIHN0ciBzdHJpbmcKICAgICAvLyAodGhleSBkb24ndCBpbmNsdWRl
ICdcbicpCi0gICAgLy8gRmluZCB0aGUgdGV4dCBzbGF2ZSB0aGF0IGluY2x1ZGVzIHRoZSBjaGFy
YWN0ZXIgYXQgQHAgb2Zmc2V0Ci0gICAgLy8gYW5kIHJldHVybiBwb3MsIHdoaWNoIGlzIHRoZSBw
b3NpdGlvbiBvZiB0aGUgY2hhciBpbiB0aGUgc2xhdmUuCisgICAgLy8gRmluZCB0aGUgdGV4dCBi
b3ggdGhhdCBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGF0IEBwIG9mZnNldAorICAgIC8vIGFuZCBy
ZXR1cm4gcG9zLCB3aGljaCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXIgaW4gdGhlIHJ1bi4K
KworICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgdXNlIGJpbmFyeSBzZWFyY2g/IERpcmsgc2F5cyBp
dCB3b24ndCB3b3JrIDotKCAoTFMpCiAKICAgICBpZiAoIG1fbGluZXMuaXNFbXB0eSgpICkKICAg
ICAgICAgcmV0dXJuIDBMOwogCi0gICAgVGV4dFNsYXZlKiBzID0gbV9saW5lc1swXTsKKyAgICAv
LyBUaGUgdGV4dCBib3hlcyBkb24ndCByZXNlbWJsZSBhIGNvbnRpZ3VvdXMgY292ZXJhZ2Ugb2Yg
dGhlIHRleHQsIHRoZXJlCisgICAgLy8gbWF5IGJlIGhvbGVzLiBUaGVyZWZvcmUsIHdlIHNuYXAg
dG8gdGhlIG5lYXJlc3QgcHJldmlvdXMgdGV4dCBib3ggaWYKKyAgICAvLyB0aGUgZ2l2ZW4gb2Zm
c2V0IGhhcHBlbnMgdG8gcG9pbnQgdG8gc3VjaCBhIGhvbGUuCisKKyAgICBJbmxpbmVUZXh0Qm94
KiBzID0gbV9saW5lc1swXTsKKyAgICB1aW50IGNvdW50ID0gbV9saW5lcy5jb3VudCgpOwogICAg
IHVpbnQgc2kgPSAwOwotICAgIGludCBvZmYgPSBzLT5tX2xlbjsKLSAgICB3aGlsZShvZmZzZXQg
PiBvZmYgJiYgKytzaSA8IG1fbGluZXMuY291bnQoKSkKKyAgICB1aW50IG5lYXJlc3RfaWR4ID0g
MDsJCS8vIGluZGV4IG9mIG5lYXJlc3QgdGV4dCBib3gKKyAgICBpbnQgbmVhcmVzdCA9IElOVF9N
QVg7CQkvLyBuZWFyZXN0IGRpc3RhbmNlCisvL2tkRGVidWcoNjA0MCkgPDwgInNbIiA8PCBzaSA8
PCAiXSBtX3N0YXJ0ICIgPDwgcy0+bV9zdGFydCA8PCAiIG1fZW5kICIgPDwgKHMtPm1fc3RhcnQg
KyBzLT5tX2xlbikgPDwgZW5kbDsKKyAgICB3aGlsZSghKG9mZnNldCA+PSBzLT5tX3N0YXJ0ICYm
IG9mZnNldCA8PSBzLT5tX3N0YXJ0ICsgcy0+bV9sZW4pCisgICAgCQkmJiArK3NpIDwgY291bnQp
CiAgICAgeworICAgICAgICBpbnQgZGlzdCA9IG9mZnNldCAtIChzLT5tX3N0YXJ0ICsgcy0+bV9s
ZW4pOworLy9rZERlYnVnKDYwNDApIDw8ICJkaXN0ICIgPDwgZGlzdCA8PCAiIG5lYXJlc3QgIiA8
PCBuZWFyZXN0IDw8IGVuZGw7CisJaWYgKGRpc3QgPj0gMCAmJiBkaXN0IDw9IG5lYXJlc3QpIHsK
KwkgICAgbmVhcmVzdCA9IGRpc3Q7CisJICAgIG5lYXJlc3RfaWR4ID0gc2kgLSAxOworCX0vKmVu
ZCBpZiovCiAgICAgICAgIHMgPSBtX2xpbmVzW3NpXTsKLSAgICAgICAgb2ZmID0gcy0+bV9zdGFy
dCArIHMtPm1fbGVuOworLy9rZERlYnVnKDYwNDApIDw8ICJzWyIgPDwgc2kgPDwgIl0gbV9zdGFy
dCAiIDw8IHMtPm1fc3RhcnQgPDwgIiBtX2VuZCAiIDw8IChzLT5tX3N0YXJ0ICsgcy0+bV9sZW4p
IDw8IGVuZGw7CiAgICAgfQotICAgIC8vIHdlIGFyZSBub3cgaW4gdGhlIGNvcnJlY3QgdGV4dCBz
bGF2ZQotICAgIHBvcyA9IChvZmZzZXQgPiBvZmYgPyBzLT5tX2xlbiA6IG9mZnNldCAtIHMtPm1f
c3RhcnQgKTsKKy8va2REZWJ1Zyg2MDQwKSA8PCAibmVhcmVzdF9pZHggIiA8PCBuZWFyZXN0X2lk
eCA8PCAiIGNvdW50ICIgPDwgY291bnQgPDwgZW5kbDsKKyAgICBpZiAoc2kgPj0gY291bnQpIHMg
PSBtX2xpbmVzW25lYXJlc3RfaWR4XTsKKyAgICAvLyB3ZSBhcmUgbm93IGluIHRoZSBjb3JyZWN0
IHRleHQgYm94CisgICAgcG9zID0gUU1JTihvZmZzZXQgLSBzLT5tX3N0YXJ0LCBzLT5tX2xlbik7
CisgICAga2REZWJ1Zyg2MDQwKSA8PCAib2Zmc2V0PSIgPDwgb2Zmc2V0IDw8ICIgcy0+bV9zdGFy
dD0iIDw8IHMtPm1fc3RhcnQgPDwgZW5kbDsKICAgICByZXR1cm4gczsKIH0KIApAQCAtMzY0LDcg
KzUwOCw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6bm9kZUF0UG9pbnQoTm9kZUluZm8mIGkKIAogICAg
IGJvb2wgaW5zaWRlID0gZmFsc2U7CiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBI
SURERU4pIHsKLSAgICAgICAgVGV4dFNsYXZlICpzID0gbV9saW5lcy5jb3VudCgpID8gbV9saW5l
c1swXSA6IDA7CisgICAgICAgIElubGluZVRleHRCb3ggKnMgPSBtX2xpbmVzLmNvdW50KCkgPyBt
X2xpbmVzWzBdIDogMDsKICAgICAgICAgaW50IHNpID0gMDsKICAgICAgICAgd2hpbGUocykgewog
ICAgICAgICAgICAgaWYoKF95ID49X3R5ICsgcy0+bV95KSAmJiAoX3kgPCBfdHkgKyBzLT5tX3kg
KyBoZWlnaHQpICYmCkBAIC00MDUsMjQgKzU0OSwyNCBAQCBGaW5kU2VsZWN0aW9uUmVzdWx0IFJl
bmRlclRleHQ6OmNoZWNrU2VsCiB7CiAvLyAgICAgICBrZERlYnVnKDYwNDApIDw8ICJSZW5kZXJU
ZXh0OjpjaGVja1NlbGVjdGlvblBvaW50ICIgPDwgdGhpcyA8PCAiIF94PSIgPDwgX3ggPDwgIiBf
eT0iIDw8IF95CiAvLyAgICAgICAgICAgICAgICAgICAgIDw8ICIgX3R4PSIgPDwgX3R4IDw8ICIg
X3R5PSIgPDwgX3R5IDw8IGVuZGw7Ci0gICAgVGV4dFNsYXZlICpsYXN0UG9pbnRBZnRlcklubGlu
ZT0wOworICAgIElubGluZVRleHRCb3ggKmxhc3RQb2ludEFmdGVySW5saW5lPTA7CiAKICAgICBm
b3IodW5zaWduZWQgaW50IHNpID0gMDsgc2kgPCBtX2xpbmVzLmNvdW50KCk7IHNpKyspCiAgICAg
ewotICAgICAgICBUZXh0U2xhdmUqIHMgPSBtX2xpbmVzW3NpXTsKKyAgICAgICAgSW5saW5lVGV4
dEJveCogcyA9IG1fbGluZXNbc2ldOwogICAgICAgICBpbnQgcmVzdWx0OwogICAgICAgICBjb25z
dCBGb250ICpmID0gaHRtbEZvbnQoIHNpPT0wICk7CiAgICAgICAgIHJlc3VsdCA9IHMtPmNoZWNr
U2VsZWN0aW9uUG9pbnQoX3gsIF95LCBfdHgsIF90eSwgZiwgdGhpcywgb2Zmc2V0LCBtX2xpbmVI
ZWlnaHQpOwogCiAvLyAgICAgICAgIGtkRGVidWcoNjA0MCkgPDwgIlJlbmRlclRleHQ6OmNoZWNr
U2VsZWN0aW9uUG9pbnQgIiA8PCB0aGlzIDw8ICIgbGluZSAiIDw8IHNpIDw8ICIgcmVzdWx0PSIg
PDwgcmVzdWx0IDw8ICIgb2Zmc2V0PSIgPDwgb2Zmc2V0IDw8IGVuZGw7Ci0gICAgICAgIGlmICgg
cmVzdWx0ID09IFNlbGVjdGlvblBvaW50SW5zaWRlICkgLy8geCx5IGlzIGluc2lkZSB0aGUgdGV4
dHNsYXZlCisgICAgICAgIGlmICggcmVzdWx0ID09IFNlbGVjdGlvblBvaW50SW5zaWRlICkgLy8g
eCx5IGlzIGluc2lkZSB0aGUgdGV4dHJ1bgogICAgICAgICB7CiAgICAgICAgICAgICBvZmZzZXQg
Kz0gcy0+bV9zdGFydDsgLy8gYWRkIHRoZSBvZmZzZXQgZnJvbSB0aGUgcHJldmlvdXMgbGluZXMK
ICAgICAgICAgICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAiUmVuZGVyVGV4dDo6Y2hlY2tTZWxlY3Rp
b25Qb2ludCBpbnNpZGUgLT4gIiA8PCBvZmZzZXQgPDwgZW5kbDsKICAgICAgICAgICAgIG5vZGUg
PSBlbGVtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0aW9uUG9pbnRJbnNpZGU7CiAg
ICAgICAgIH0gZWxzZSBpZiAoIHJlc3VsdCA9PSBTZWxlY3Rpb25Qb2ludEJlZm9yZSB8fCByZXN1
bHQgPT0gU2VsZWN0aW9uUG9pbnRCZWZvcmVJbkxpbmUgKSB7Ci0gICAgICAgICAgICAvLyB4LHkg
aXMgYmVmb3JlIHRoZSB0ZXh0c2xhdmUgLT4gc3RvcCBoZXJlCisgICAgICAgICAgICAvLyB4LHkg
aXMgYmVmb3JlIHRoZSB0ZXh0cnVuIC0+IHN0b3AgaGVyZQogICAgICAgICAgICAgaWYgKCBzaSA+
IDAgJiYgbGFzdFBvaW50QWZ0ZXJJbmxpbmUgKSB7CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0g
bGFzdFBvaW50QWZ0ZXJJbmxpbmUtPm1fc3RhcnQgKyBsYXN0UG9pbnRBZnRlcklubGluZS0+bV9s
ZW47CiAgICAgICAgICAgICAgICAgLy9rZERlYnVnKDYwNDApIDw8ICJSZW5kZXJUZXh0OjpjaGVj
a1NlbGVjdGlvblBvaW50IGJlZm9yZSAtPiAiIDw8IG9mZnNldCA8PCBlbmRsOwpAQCAtNDQ3LDIz
ICs1OTEsMzUgQEAgRmluZFNlbGVjdGlvblJlc3VsdCBSZW5kZXJUZXh0OjpjaGVja1NlbAogICAg
IHJldHVybiBTZWxlY3Rpb25Qb2ludEFmdGVyOwogfQogCi12b2lkIFJlbmRlclRleHQ6OmN1cnNv
clBvcyhpbnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCkKK3ZvaWQgUmVu
ZGVyVGV4dDo6Y2FyZXRQb3MoaW50IG9mZnNldCwgYm9vbCBvdmVycmlkZSwgaW50ICZfeCwgaW50
ICZfeSwgaW50ICZ3aWR0aCwgaW50ICZoZWlnaHQpCiB7CiAgIGlmICghbV9saW5lcy5jb3VudCgp
KSB7CiAgICAgX3ggPSBfeSA9IGhlaWdodCA9IC0xOworICAgIHdpZHRoID0gMTsKICAgICByZXR1
cm47CiAgIH0KIAogICBpbnQgcG9zOwotICBUZXh0U2xhdmUgKiBzID0gZmluZFRleHRTbGF2ZSgg
b2Zmc2V0LCBwb3MgKTsKKyAgSW5saW5lVGV4dEJveCAqIHMgPSBmaW5kSW5saW5lVGV4dEJveCgg
b2Zmc2V0LCBwb3MgKTsKKy8vICBrZERlYnVnKDYwNDApIDw8ICJvZmZzZXQ9Ijw8b2Zmc2V0IDw8
ICIgcG9zPSI8PHBvcyA8PCBlbmRsOwogICBfeSA9IHMtPm1feTsKLSAgaGVpZ2h0ID0gbV9saW5l
SGVpZ2h0OyAvLyAjIyMgZmlyc3RMaW5lISEhIHMtPm1faGVpZ2h0OwogCi0gIGNvbnN0IFFGb250
TWV0cmljcyAmZm0gPSBtZXRyaWNzKCBmYWxzZSApOyAvLyAjIyMjIHdyb25nIGZvciBmaXJzdC1s
aW5lIQotICBRU3RyaW5nIHRla3N0KHN0ci0+cyArIHMtPm1fc3RhcnQsIHMtPm1fbGVuKTsKLSAg
X3ggPSBzLT5tX3ggKyAoZm0uYm91bmRpbmdSZWN0KHRla3N0LCBwb3MpKS5yaWdodCgpOwotICBp
Zihwb3MpCi0gICAgICBfeCArPSBmbS5yaWdodEJlYXJpbmcoICooc3RyLT5zICsgcy0+bV9zdGFy
dCArIHBvcyAtIDEgKSApOworICBjb25zdCBRRm9udE1ldHJpY3MgJmZtID0gbWV0cmljcyggcy0+
bV9maXJzdExpbmUgKTsKKyAgaGVpZ2h0ID0gZm0uaGVpZ2h0KCk7IC8vIHMtPm1faGVpZ2h0Owor
CisvLyAgUUNvbnN0U3RyaW5nIHRla3N0KHN0ci0+cyArIHMtPm1fc3RhcnQsIHMtPm1fbGVuKTsK
Ky8vICBfeCA9IHMtPm1feCArIChmbS5ib3VuZGluZ1JlY3QodGVrc3QsIHBvcykpLnJpZ2h0KCk7
CisvLyAgaWYocG9zKQorLy8gICAgICBfeCArPSBmbS5yaWdodEJlYXJpbmcoICooc3RyLT5zICsg
cy0+bV9zdGFydCArIHBvcyAtIDEgKSApOworICAvL194ID0gcy0+bV94ICsgZm0ud2lkdGgodGVr
c3Quc3RyaW5nKCksIHBvcyk7CisgIF94ID0gcy0+bV94ICsgcy0+d2lkdGgocG9zKTsKKyAgd2lk
dGggPSAxOworICBpZiAob3ZlcnJpZGUpIHsKKyAgICB3aWR0aCA9IG9mZnNldCA8IG1heE9mZnNl
dCgpID8gZm0ud2lkdGgoc3RyLT5zW29mZnNldF0pIDogMTsKKyAgfS8qZW5kIGlmKi8KKyAga2RE
ZWJ1Zyg2MDQwKSA8PCAiX3g9Ijw8X3ggPDwgIiBzLT5tX3g9Ijw8cy0+bV94CisgIAkJPDwgIiBz
LT5tX3N0YXJ0Ijw8cy0+bV9zdGFydAorCQk8PCAiIHMtPm1fbGVuIjw8cy0+bV9sZW4gPDwgZW5k
bDsKIAogICBpbnQgYWJzeCwgYWJzeTsKIApAQCAtNDcxLDE1ICs2MjcsMzkgQEAgdm9pZCBSZW5k
ZXJUZXh0OjpjdXJzb3JQb3MoaW50IG9mZnNldCwgaQogCiAgIGlmIChjYiAmJiBjYiAhPSB0aGlz
ICYmIGNiLT5hYnNvbHV0ZVBvc2l0aW9uKGFic3gsYWJzeSkpCiAgIHsKKyAgICAvL2tkRGVidWco
NjA0MCkgPDwgImFic3g9IiA8PCBhYnN4IDw8ICIgYWJzeT0iIDw8IGFic3kgPDwgZW5kbDsKICAg
ICBfeCArPSBhYnN4OwogICAgIF95ICs9IGFic3k7CiAgIH0gZWxzZSB7Ci0gICAgLy8gd2UgZG9u
J3Qga25vdyBvdXIgYWJzb2x1dGUgcG9zaXRpb24sIGFuZCB0aGVyZSBpcyBub3QgcG9pbnQgcmV0
dXJuaW5nCisgICAgLy8gd2UgZG9uJ3Qga25vdyBvdXIgYWJzb2x1dGUgcG9zaXRpb24sIGFuZCB0
aGVyZSBpcyBubyBwb2ludCByZXR1cm5pbmcKICAgICAvLyBqdXN0IGEgcmVsYXRpdmUgb25lCiAg
ICAgX3ggPSBfeSA9IC0xOwogICB9CiB9CiAKK2xvbmcgUmVuZGVyVGV4dDo6bWluT2Zmc2V0KCkg
Y29uc3QKK3sKKyAgaWYgKCFtX2xpbmVzLmNvdW50KCkpIHJldHVybiAwOworICAvLyBGSVhNRTog
aXQgaXMgKm5vdCogZ3VhcmFudGVlZCB0aGF0IHRoZSBmaXJzdCBydW4gY29udGFpbnMgdGhlIGxv
d2VzdCBvZmZzZXQKKyAgLy8gRWl0aGVyIG1ha2UgdGhpcyBhIGxpbmVhciBzZWFyY2ggKHNsb3cp
LAorICAvLyBvciBtYWludGFpbiBhbiBpbmRleCAobmVlZHMgbXVjaCBtZW0pLAorICAvLyBvciBj
YWxjdWxhdGUgYW5kIHN0b3JlIGl0IGluIGJpZGkuY3BwIChuZWVkcyBjYWxjdWxhdGlvbiBldmVu
IGlmIG5vdCBuZWVkZWQpCisgIC8vIChMUykKKyAgcmV0dXJuIG1fbGluZXNbMF0tPm1fc3RhcnQ7
Cit9CisKK2xvbmcgUmVuZGVyVGV4dDo6bWF4T2Zmc2V0KCkgY29uc3QKK3sKKyAgaW50IGNvdW50
ID0gbV9saW5lcy5jb3VudCgpOworICBpZiAoIWNvdW50KSByZXR1cm4gc3RyLT5sOworICAvLyBG
SVhNRTogaXQgaXMgKm5vdCogZ3VhcmFudGVlZCB0aGF0IHRoZSBsYXN0IHJ1biBjb250YWlucyB0
aGUgaGlnaGVzdCBvZmZzZXQKKyAgLy8gRWl0aGVyIG1ha2UgdGhpcyBhIGxpbmVhciBzZWFyY2gg
KHNsb3cpLAorICAvLyBvciBtYWludGFpbiBhbiBpbmRleCAobmVlZHMgbXVjaCBtZW0pLAorICAv
LyBvciBjYWxjdWxhdGUgYW5kIHN0b3JlIGl0IGluIGJpZGkuY3BwIChuZWVkcyBjYWxjdWxhdGlv
biBldmVuIGlmIG5vdCBuZWVkZWQpCisgIC8vIChMUykKKyAgcmV0dXJuIG1fbGluZXNbY291bnQg
LSAxXS0+bV9zdGFydCArIG1fbGluZXNbY291bnQgLSAxXS0+bV9sZW47Cit9CisKIGJvb2wgUmVu
ZGVyVGV4dDo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQb3MsIGludCAmeVBvcywgYm9vbCkKIHsK
ICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZh
bHNlKTsKQEAgLTUwMCw3ICs2ODAsNyBAQCBib29sIFJlbmRlclRleHQ6OnBvc09mQ2hhcihpbnQg
Y2hyLCBpbnQgCiAgICAgcGFyZW50KCktPmFic29sdXRlUG9zaXRpb24oIHgsIHksIGZhbHNlICk7
CiAKICAgICBpbnQgcG9zOwotICAgIFRleHRTbGF2ZSAqIHMgPSBmaW5kVGV4dFNsYXZlKCBjaHIs
IHBvcyApOworICAgIElubGluZVRleHRCb3ggKiBzID0gZmluZElubGluZVRleHRCb3goIGNociwg
cG9zICk7CiAKICAgICBpZiAoIHMgKSB7CiAgICAgICAgIC8vIHMgaXMgdGhlIGxpbmUgY29udGFp
bmluZyB0aGUgY2hhcmFjdGVyCkBAIC01MjYsNyArNzA2LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpw
YWludE9iamVjdCggUVBhaW50ZXIgKgogICAgIGludCBvdyA9IHN0eWxlKCktPm91dGxpbmVXaWR0
aCgpOwogICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IGhhc0ZpcnN0TGluZSgpID8gc3R5
bGUoKS0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJUlNUX0xJTkUpIDogMDsKICAgICBp
bnQgZCA9IHN0eWxlKCktPnRleHREZWNvcmF0aW9uKCk7Ci0gICAgVGV4dFNsYXZlIGYoMCwgeS10
eSk7CisgICAgSW5saW5lVGV4dEJveCBmKDAsIHktdHkpOwogICAgIGludCBzaSA9IG1fbGluZXMu
ZmluZEZpcnN0TWF0Y2hpbmcoJmYpOwogICAgIC8vIHNvbWV0aGluZyBtYXRjaGluZyBmb3VuZCwg
ZmluZCB0aGUgZmlyc3Qgb25lIHRvIHBhaW50CiAgICAgYm9vbCBpc1ByaW50aW5nID0gKHAtPmRl
dmljZSgpLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQcmludGVyKTsKQEAgLTU1NCw3ICs3MzQs
NyBAQCB2b2lkIFJlbmRlclRleHQ6OnBhaW50T2JqZWN0KCBRUGFpbnRlciAqCiAgICAgICAgICAg
ICAvL2tkRGVidWcoNjA0MCkgPDwgdGhpcyA8PCAiIFNlbGVjdGlvbiBmcm9tICIgPDwgc3RhcnRQ
b3MgPDwgIiB0byAiIDw8IGVuZFBvcyA8PCBlbmRsOwogICAgICAgICB9CiAKLSAgICAgICAgVGV4
dFNsYXZlKiBzOworICAgICAgICBJbmxpbmVUZXh0Qm94KiBzOwogICAgICAgICBpbnQgbWlueCA9
ICAxMDAwMDAwOwogICAgICAgICBpbnQgbWF4eCA9IC0xMDAwMDAwOwogICAgICAgICBpbnQgb3V0
bGluZWJveF95ID0gbV9saW5lc1tzaV0tPm1feTsKQEAgLTYwNyw2ICs3ODcsNyBAQCB2b2lkIFJl
bmRlclRleHQ6OnBhaW50T2JqZWN0KCBRUGFpbnRlciAqCiAgICAgICAgICAgICAgICAgcC0+c2V0
UGVuKF9zdHlsZS0+Y29sb3IoKSk7CiAKIAkgICAgaWYgKHMtPm1fbGVuID4gMCkKKwkgICAgICAg
IC8va2REZWJ1ZyggNjA0MCApIDw8ICJSZW5kZXJPYmplY3Q6OnBhaW50T2JqZWN0KCIgPDwgUUNv
bnN0U3RyaW5nKHN0ci0+cyArIHMtPm1fc3RhcnQsIHMtPm1fbGVuKS5zdHJpbmcoKSA8PCAiKSBh
dCgiIDw8IHMtPm1feCt0eCA8PCAiLyIgPDwgcy0+bV95K3R5IDw8ICIpIiA8PCBlbmRsOwogCQlm
b250LT5kcmF3VGV4dChwLCBzLT5tX3ggKyB0eCwgcy0+bV95ICsgdHkgKyBzLT5tX2Jhc2VsaW5l
LCBzdHItPnMsIHN0ci0+bCwgcy0+bV9zdGFydCwgcy0+bV9sZW4sCiAJCQkgICAgICAgcy0+bV90
b0FkZCwgcy0+bV9yZXZlcnNlZCA/IFFQYWludGVyOjpSVEwgOiBRUGFpbnRlcjo6TFRSKTsKIApA
QCAtODUzLDMzICsxMDM0LDQ2IEBAIHNob3J0IFJlbmRlclRleHQ6OmJhc2VsaW5lUG9zaXRpb24o
IGJvb2wKICAgICAgICAgKCBsaW5lSGVpZ2h0KCBmaXJzdExpbmUgKSAtIGZtLmhlaWdodCgpICkg
LyAyOwogfQogCi12b2lkIFJlbmRlclRleHQ6OnBvc2l0aW9uKGludCB4LCBpbnQgeSwgaW50IGZy
b20sIGludCBsZW4sIGludCB3aWR0aCwgYm9vbCByZXZlcnNlLCBib29sIGZpcnN0TGluZSwgaW50
IHNwYWNlQWRkKQorSW5saW5lQm94KiBSZW5kZXJUZXh0OjpjcmVhdGVJbmxpbmVCb3goYm9vbCkK
K3sKKyAgICAvLyBGSVhNRTogRWl0aGVyIGRpdGNoIHRoZSBhcnJheSBvciBnZXQgdGhpcyBvYmpl
Y3QgaW50byBpdC4KKyAgICByZXR1cm4gbmV3IChyZW5kZXJBcmVuYSgpKSBJbmxpbmVUZXh0Qm94
KHRoaXMpOworfQorCit2b2lkIFJlbmRlclRleHQ6OnBvc2l0aW9uKElubGluZUJveCogYm94LCBp
bnQgZnJvbSwgaW50IGxlbiwgYm9vbCByZXZlcnNlLCBpbnQgc3BhY2VBZGQpCiB7CisvL2tkRGVi
dWcoNjA0MCkgPDwgInBvc2l0aW9uOiBmcm9tPSI8PGZyb208PCIgbGVuPSI8PGxlbjw8ZW5kbDsK
ICAgICAvLyAjIyMgc2hvdWxkIG5vdCBiZSBuZWVkZWQhISEKICAgICAvLyBhc3NlcnRzIHNvbWV0
aW1lcyB3aXRoIHByZSAodGhhdCB1bmlidy1oYW1idXJnIHRlc3RjYXNlKS4gIyMjIGZpbmQgb3V0
IHdoeQogICAgIC8vS0hUTUxBc3NlcnQoIShsZW4gPT0gMCB8fCAoc3RyLT5sICYmIGxlbiA9PSAx
ICYmICooc3RyLT5zK2Zyb20pID09ICdcbicpICkpOwotICAgIGlmIChsZW4gPT0gMCB8fCAoc3Ry
LT5sICYmIGxlbiA9PSAxICYmICooc3RyLT5zK2Zyb20pID09ICdcbicpICkgcmV0dXJuOworICAg
IC8vIEl0IGlzIG5vdyBuZWVkZWQuIEJScyBuZWVkIHRleHQgYm94ZXMgdG9vIG90aGVyd2lzZSBj
YXJldCBuYXZpZ2F0aW9uCisgICAgLy8gZ2V0cyBzdHVjayAoTFMpCisgICAgLy9pZiAobGVuID09
IDAgfHwgKHN0ci0+bCAmJiBsZW4gPT0gMSAmJiAqKHN0ci0+cytmcm9tKSA9PSAnXG4nKSApIHJl
dHVybjsKIAogICAgIHJldmVyc2UgPSByZXZlcnNlICYmICFzdHlsZSgpLT52aXN1YWxseU9yZGVy
ZWQoKTsKIAogICAgIC8vICMjIyBtYXJnaW5zIGFuZCBSVEwKICAgICBpZihmcm9tID09IDAgJiYg
cGFyZW50KCktPmlzSW5saW5lKCkgJiYgcGFyZW50KCktPmZpcnN0Q2hpbGQoKT09dGhpcykKICAg
ICB7Ci0gICAgICAgIHggKz0gcGFkZGluZ0xlZnQoKSArIGJvcmRlckxlZnQoKSArIG1hcmdpbkxl
ZnQoKTsKLSAgICAgICAgd2lkdGggLT0gbWFyZ2luTGVmdCgpOworICAgICAgICBib3gtPm1feCAr
PSBwYWRkaW5nTGVmdCgpICsgYm9yZGVyTGVmdCgpICsgbWFyZ2luTGVmdCgpOworICAgICAgICBi
b3gtPm1fd2lkdGggLT0gbWFyZ2luTGVmdCgpOwogICAgIH0KIAogICAgIGlmKGZyb20gKyBsZW4g
Pj0gaW50KHN0ci0+bCkgJiYgcGFyZW50KCktPmlzSW5saW5lKCkgJiYgcGFyZW50KCktPmxhc3RD
aGlsZCgpPT10aGlzKQotICAgICAgICB3aWR0aCAtPSBtYXJnaW5SaWdodCgpOworICAgICAgICBi
b3gtPm1fd2lkdGggLT0gbWFyZ2luUmlnaHQoKTsKIAogI2lmZGVmIERFQlVHX0xBWU9VVAogICAg
IFFDaGFyICpjaCA9IHN0ci0+cytmcm9tOwogICAgIFFDb25zdFN0cmluZyBjc3RyKGNoLCBsZW4p
OwogI2VuZGlmCiAKLSAgICBUZXh0U2xhdmUgKnMgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFRleHRT
bGF2ZSh4LCB5LCBmcm9tLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
YXNlbGluZVBvc2l0aW9uKCBmaXJzdExpbmUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZHRoLCByZXZlcnNlLCBzcGFjZUFkZCwgZmlyc3RMaW5lKTsKKyAgICBLSFRNTEFz
c2VydChib3gtPmlzSW5saW5lVGV4dEJveCgpKTsKKyAgICBJbmxpbmVUZXh0Qm94ICpzID0gc3Rh
dGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihib3gpOworICAgIHMtPm1fc3RhcnQgPSBmcm9tOwor
ICAgIHMtPm1fbGVuID0gbGVuOworICAgIHMtPm1fcmV2ZXJzZWQgPSByZXZlcnNlOworICAgIHMt
Pm1fdG9BZGQgPSBzcGFjZUFkZDsKKyAgICAvL2tkRGVidWcoNjA0MCkgPDwgIm1fc3RhcnQ6ICIg
PDwgcy0+bV9zdGFydCA8PCAiIG1fbGVuOiAiIDw8IHMtPm1fbGVuIDw8IGVuZGw7CiAKICAgICBp
ZihtX2xpbmVzLmNvdW50KCkgPT0gbV9saW5lcy5zaXplKCkpCiAgICAgICAgIG1fbGluZXMucmVz
aXplKG1fbGluZXMuc2l6ZSgpKjIrMSk7CkBAIC05MzcsNyArMTEzMSw3IEBAIHNob3J0IFJlbmRl
clRleHQ6OndpZHRoKCkgY29uc3QKICAgICBpbnQgbWF4eCA9IDA7CiAgICAgLy8gc2xvb293CiAg
ICAgZm9yKHVuc2lnbmVkIGludCBzaSA9IDA7IHNpIDwgbV9saW5lcy5jb3VudCgpOyBzaSsrKSB7
Ci0gICAgICAgIFRleHRTbGF2ZSogcyA9IG1fbGluZXNbc2ldOworICAgICAgICBJbmxpbmVUZXh0
Qm94KiBzID0gbV9saW5lc1tzaV07CiAgICAgICAgIGlmKHMtPm1feCA8IG1pbngpCiAgICAgICAg
ICAgICBtaW54ID0gcy0+bV94OwogICAgICAgICBpZihzLT5tX3ggKyBzLT5tX3dpZHRoID4gbWF4
eCkKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfdGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9o
b21lL2tkZS9rZGVsaWJzL2todG1sL3JlbmRlcmluZy9yZW5kZXJfdGV4dC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjg1CmRpZmYgLXUgLXAgLXIxLjg1IHJlbmRlcl90ZXh0LmgKLS0tIHJlbmRl
cmluZy9yZW5kZXJfdGV4dC5oCTE2IEF1ZyAyMDAzIDE5OjQ1OjA4IC0wMDAwCTEuODUKKysrIHJl
bmRlcmluZy9yZW5kZXJfdGV4dC5oCTE4IEF1ZyAyMDAzIDIxOjUyOjU4IC0wMDAwCkBAIC0zLDYg
KzMsNyBAQAogICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
ICAqIChDKSAyMDAwLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiAoQykg
MjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw2ICsy
OSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV90ZXh0aW1wbC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCisjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl9saW5lLmgiCiAKICNpbmNsdWRlIDxxcHRydmVjdG9yLmg+
CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CkBAIC00MCwyMiArNDIsMTIgQEAgbmFtZXNwYWNlIGtodG1s
CiAgICAgY2xhc3MgUmVuZGVyVGV4dDsKICAgICBjbGFzcyBSZW5kZXJTdHlsZTsKIAotY2xhc3Mg
VGV4dFNsYXZlCitjbGFzcyBJbmxpbmVUZXh0Qm94IDogcHVibGljIElubGluZUJveAogewogcHVi
bGljOgotICAgIFRleHRTbGF2ZShpbnQgeCwgaW50IHksIGludCBzdGFydCwgaW50IGxlbiwKLQkg
ICAgICBpbnQgYmFzZWxpbmUsIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgYm9vbCByZXZlcnNl
ZCA9IGZhbHNlLCB1bnNpZ25lZCB0b0FkZCA9IDAsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2UpCisg
ICAgSW5saW5lVGV4dEJveChSZW5kZXJPYmplY3QgKm9iaikKKyAgICA6SW5saW5lQm94KG9iaikK
ICAgICB7Ci0gICAgICAgIG1feCA9IHg7Ci0gICAgICAgIG1feSA9IHk7Ci0gICAgICAgIG1fc3Rh
cnQgPSBzdGFydDsKLSAgICAgICAgbV9sZW4gPSBsZW47Ci0gICAgICAgIG1fYmFzZWxpbmUgPSBi
YXNlbGluZTsKLSAgICAgICAgbV93aWR0aCA9IHdpZHRoOwotICAgICAgICBtX3JldmVyc2VkID0g
cmV2ZXJzZWQ7Ci0gICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwotICAgICAgICBtX3Rv
QWRkID0gdG9BZGQ7CiAgICAgfQogCiAgICAgdm9pZCBkZXRhY2goUmVuZGVyQXJlbmEqIHJlbmRl
ckFyZW5hKTsKQEAgLTczLDYgKzY1LDggQEAgcHJpdmF0ZToKIAogcHVibGljOgogCisgICAgdmly
dHVhbCBib29sIGlzSW5saW5lVGV4dEJveCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKwogICAg
IHZvaWQgcGFpbnREZWNvcmF0aW9uKCBRUGFpbnRlciAqcHQsIFJlbmRlclRleHQqIHAsIGludCBf
dHgsIGludCBfdHksIGludCBkZWNvcmF0aW9uLCBib29sIGJlZ2luLCBib29sIGVuZCk7CiAgICAg
dm9pZCBwYWludEJveERlY29yYXRpb25zKFFQYWludGVyICpwLCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclRleHQgKnBhcmVudCwgaW50IF90eCwgaW50IF90eSwgYm9vbCBiZWdpbiwgYm9vbCBl
bmQpOwogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oY29uc3QgRm9udCAqZiwgUmVuZGVyVGV4dCAq
dGV4dCwgUVBhaW50ZXIgKnAsIFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IHR4LCBpbnQgdHksIGlu
dCBzdGFydFBvcywgaW50IGVuZFBvcyk7CkBAIC04MSwyNiArNzUsNTggQEAgcHVibGljOgogICAg
IEZpbmRTZWxlY3Rpb25SZXN1bHQgY2hlY2tTZWxlY3Rpb25Qb2ludChpbnQgX3gsIGludCBfeSwg
aW50IF90eCwgaW50IF90eSwgY29uc3QgRm9udCAqZiwgUmVuZGVyVGV4dCAqdGV4dCwgaW50ICYg
b2Zmc2V0LCBzaG9ydCBsaW5laGVpZ2h0KTsKIAogICAgIC8qKgotICAgICAqIGlmIHRoaXMgdGV4
dHNsYXZlIHdhcyByZW5kZXJlZCBfdHkgcGl4ZWxzIGJlbG93IHRoZSB1cHBlciBlZGdlCi0gICAg
ICogb2YgYSB2aWV3LCB3b3VsZCB0aGUgX3kgLWNvb3JkaW5hdGUgYmUgaW5zaWRlIHRoZSB2ZXJ0
aWNhbCByYW5nZQorICAgICAqIGlmIHRoaXMgdGV4dCBib3ggd2FzIHJlbmRlcmVkIEByZWYgX3R5
IHBpeGVscyBiZWxvdyB0aGUgdXBwZXIgZWRnZQorICAgICAqIG9mIGEgdmlldywgd291bGQgdGhl
IEByZWYgX3kgLWNvb3JkaW5hdGUgYmUgaW5zaWRlIHRoZSB2ZXJ0aWNhbCByYW5nZQogICAgICAq
IG9mIHRoaXMgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24/CiAgICAgICovCiAgICAgYm9vbCBjaGVj
a1ZlcnRpY2FsUG9pbnQoaW50IF95LCBpbnQgX3R5LCBpbnQgX2gsIGludCBoZWlnaHQpCiAgICAg
eyBpZigoX3R5ICsgbV95ID4gX3kgKyBfaCkgfHwgKF90eSArIG1feSArIG1fYmFzZWxpbmUgKyBo
ZWlnaHQgPCBfeSkpIHJldHVybiBmYWxzZTsgcmV0dXJuIHRydWU7IH0KIAorICAgIC8qKgorICAg
ICAqIGRldGVybWluZXMgdGhlIG9mZnNldCBpbnRvIHRoZSBET01TdHJpbmcgb2YgdGhlIGNoYXJh
dGVyIHRoZSBnaXZlbgorICAgICAqIGNvb3JkaW5hdGUgcG9pbnRzIHRvLgorICAgICAqIFRoZSBy
ZXR1cm5lZCBvZmZzZXQgaXMgbmV2ZXIgb3V0IG9mIHJhbmdlLgorICAgICAqIEBwYXJhbSBfeCBn
aXZlbiBjb29yZGluYXRlIChyZWxhdGl2ZSB0byBjb250YWluaW5nIGJsb2NrKQorICAgICAqIEBw
YXJhbSBheCByZXR1cm5zIGV4YWN0IGNvb3JkaW5hdGUgdGhlIG9mZnNldCBjb3JyZXNwb25kcyB0
bworICAgICAqCQkocmVsYXRpdmUgdG8gY29udGFpbmluZyBibG9jaykKKyAgICAgKiBAcmV0dXJu
IHRoZSBvZmZzZXQgKHJlbGF0aXZlIHRvIHRoZSBSZW5kZXJUZXh0IG9iamVjdCwgbm90IHRvIHRo
aXMgcnVuKQorICAgICAqLworICAgIGludCBvZmZzZXRGb3JQb2ludChpbnQgX3gsIGludCAmYXgp
IGNvbnN0OworICAgICAgICAgCisgICAgLyoqCisgICAgICogY2FsY3VsYXRlcyB0aGUgd2l0aCBv
ZiB0aGUgc3BlY2lmaWVkIGNodW5rIGluIHRoaXMgdGV4dCBib3guCisgICAgICogQHBhcmFtIHBv
cyB6ZXJvLWJhc2VkIHBvc2l0aW9uIHdpdGhpbiB0aGUgdGV4dCBib3ggdXAgdG8gd2hpY2gKKyAg
ICAgKgl0aGUgd2lkdGggaXMgdG8gYmUgZGV0ZXJtaW5lZAorICAgICAqIEByZXR1cm4gdGhlIHdp
ZHRoIGluIHBpeGVscworICAgICAqLworICAgIGludCB3aWR0aChpbnQgcG9zKSBjb25zdDsKKwor
ICAgIC8qKiByZXR1cm5zIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUgdGhlIGNhcmV0IG9mZnNl
dCBtYXkgaGF2ZSB0bworICAgICAqIHN0aWxsIHBvaW50IHRvIGEgdmFsaWQgcG9zaXRpb24uCisg
ICAgICovCisgICAgdmlydHVhbCBsb25nIG1pbk9mZnNldCgpIGNvbnN0OworICAgIC8qKiByZXR1
cm5zIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHZhbHVlIHRoZSBjYXJldCBvZmZzZXQgbWF5IGhhdmUg
dG8KKyAgICAgKiBzdGlsbCBwb2ludCB0byBhIHZhbGlkIHBvc2l0aW9uLgorICAgICAqLworICAg
IHZpcnR1YWwgbG9uZyBtYXhPZmZzZXQoKSBjb25zdDsKKyAgICAKKyAgICAvKiogcmV0dXJucyB0
aGUgYXNzb2NpYXRlZCByZW5kZXIgdGV4dAorICAgICAqLworICAgIGNvbnN0IFJlbmRlclRleHQg
KnJlbmRlclRleHQoKSBjb25zdAorICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmVuZGVy
VGV4dCAqPihjb25zdF9jYXN0PElubGluZVRleHRCb3ggKj4odGhpcyktPm9iamVjdCgpKTsgfQor
ICAgIC8qKiByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIHJlbmRlciB0ZXh0CisgICAgICovCisgICAg
UmVuZGVyVGV4dCAqcmVuZGVyVGV4dCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmVuZGVy
VGV4dCAqPihvYmplY3QoKSk7IH0KKwogICAgIGludCBtX3N0YXJ0OwotICAgIGludCBtX3k7CiAg
ICAgdW5zaWduZWQgc2hvcnQgbV9sZW47Ci0gICAgc2hvcnQgbV94OwotICAgIHNob3J0IG1fYmFz
ZWxpbmU7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV93aWR0aDsKIAogICAgIGJvb2wgbV9yZXZlcnNl
ZCA6IDE7Ci0gICAgYm9vbCBtX2ZpcnN0TGluZSA6IDE7CiAgICAgdW5zaWduZWQgbV90b0FkZCA6
IDE0OyAvLyBmb3IganVzdGlmaWVkIHRleHQKIHByaXZhdGU6CiAgICAgLy8gdGhpcyBpcyBqdXN0
IGZvciBRVmVjdG9yOjpic2VhcmNoLiBEb24ndCB1c2UgaXQgb3RoZXJ3aXNlCi0gICAgVGV4dFNs
YXZlKGludCBfeCwgaW50IF95KQorICAgIElubGluZVRleHRCb3goaW50IF94LCBpbnQgX3kpCisg
ICAgICAgIDpJbmxpbmVCb3goMCkKICAgICB7CiAgICAgICAgIG1feCA9IF94OwogICAgICAgICBt
X3kgPSBfeTsKQEAgLTEwOSwxMiArMTM1LDEyIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IFJlbmRlclRleHQ7CiB9OwogCi1jbGFzcyBUZXh0U2xhdmVBcnJheSA6IHB1YmxpYyBRUHRyVmVj
dG9yPFRleHRTbGF2ZT4KK2NsYXNzIElubGluZVRleHRCb3hBcnJheSA6IHB1YmxpYyBRUHRyVmVj
dG9yPElubGluZVRleHRCb3g+CiB7CiBwdWJsaWM6Ci0gICAgVGV4dFNsYXZlQXJyYXkoKTsKKyAg
ICBJbmxpbmVUZXh0Qm94QXJyYXkoKTsKIAotICAgIFRleHRTbGF2ZSogZmlyc3QoKTsKKyAgICBJ
bmxpbmVUZXh0Qm94KiBmaXJzdCgpOwogCiAgICAgaW50CSAgZmluZEZpcnN0TWF0Y2hpbmcoIEl0
ZW0gKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb21wYXJlSXRlbXMoIEl0ZW0sIEl0ZW0gKTsK
QEAgLTEyMiw3ICsxNDgsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIFJlbmRlclRleHQgOiBwdWJsaWMg
UmVuZGVyT2JqZWN0CiB7Ci0gICAgZnJpZW5kIGNsYXNzIFRleHRTbGF2ZTsKKyAgICBmcmllbmQg
Y2xhc3MgSW5saW5lVGV4dEJveDsKIAogcHVibGljOgogICAgIFJlbmRlclRleHQoRE9NOjpOb2Rl
SW1wbCogbm9kZSwgRE9NOjpET01TdHJpbmdJbXBsICpfc3RyKTsKQEAgLTEzOSwxMiArMTY1LDE0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoIFFQYWludGVyICosIGlu
dCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR4
LCBpbnQgdHksIFBhaW50QWN0aW9uIHBhaW50UGhhc2UpOwogCi0gICAgdm9pZCBkZWxldGVTbGF2
ZXMoIFJlbmRlckFyZW5hICogKTsKKyAgICB2b2lkIGRlbGV0ZVRleHRCb3hlcyggUmVuZGVyQXJl
bmEgKiApOwogICAgIHZvaWQgZGV0YWNoKCBSZW5kZXJBcmVuYSAqICk7CiAKICAgICBET006OkRP
TVN0cmluZyBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3RyOyB9CiAgICAgRE9NOjpET01TdHJpbmdJ
bXBsICpzdHJpbmcoKSBjb25zdCB7IHJldHVybiBzdHI7IH0KIAorICAgIHZpcnR1YWwgSW5saW5l
Qm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCk7CisKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkg
e2Fzc2VydChmYWxzZSk7fQogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZv
JiBpbmZvLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKQEAgLTE1Niw3ICsxODQsNyBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0ci0+
bDsgfQogICAgIFFDaGFyICp0ZXh0KCkgY29uc3QgeyByZXR1cm4gc3RyLT5zOyB9CiAgICAgdW5z
aWduZWQgaW50IHN0cmluZ0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0ci0+bDsgfSAvLyBub24g
dmlydHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBsZW5ndGgoKQotICAgIHZpcnR1YWwgdm9pZCBwb3Np
dGlvbihpbnQgeCwgaW50IHksIGludCBmcm9tLCBpbnQgbGVuLCBpbnQgd2lkdGgsIGJvb2wgcmV2
ZXJzZSwgYm9vbCBmaXJzdExpbmUsIGludCBzcGFjZUFkZCk7CisgICAgdmlydHVhbCB2b2lkIHBv
c2l0aW9uKElubGluZUJveCogYm94LCBpbnQgZnJvbSwgaW50IGxlbiwgYm9vbCByZXZlcnNlLCBp
bnQgc3BhY2VBZGQpOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgd2lkdGgodW5zaWduZWQg
aW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4sIGNvbnN0IEZvbnQgKmYpIGNvbnN0OwogICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IHdpZHRoKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQg
bGVuLCBib29sIGZpcnN0TGluZSA9IGZhbHNlKSBjb25zdDsKQEAgLTE3NSw3ICsyMDMsNyBAQCBw
dWJsaWM6CiAgICAgdXNob3J0IHN0YXJ0TWluKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE1pbjsg
fQogICAgIHVzaG9ydCBlbmRNaW4oKSBjb25zdCB7IHJldHVybiBtX2VuZE1pbjsgfQogCi0gICAg
Ly8gcmV0dXJucyB0aGUgbWluaW11bSB4IHBvc2l0aW9uIG9mIGFsbCBzbGF2ZXMgcmVsYXRpdmUg
dG8gdGhlIHBhcmVudC4KKyAgICAvLyByZXR1cm5zIHRoZSBtaW5pbXVtIHggcG9zaXRpb24gb2Yg
YWxsIHJ1bnMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudC4KICAgICAvLyBkZWZhdWx0cyB0byAwLgog
ICAgIGludCBtaW5YUG9zKCkgY29uc3Q7CiAKQEAgLTE5Myw3ICsyMjEsNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Qge3JldHVy
biBtX3NlbGVjdGlvblN0YXRlO30KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUo
U2VsZWN0aW9uU3RhdGUgcykge21fc2VsZWN0aW9uU3RhdGUgPSBzOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGN1cnNvclBvcyhpbnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCk7
CisgICAgdmlydHVhbCB2b2lkIGNhcmV0UG9zKGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGlu
dCAmX3gsIGludCAmX3ksIGludCAmd2lkdGgsIGludCAmaGVpZ2h0KTsKICAgICB2aXJ0dWFsIGJv
b2wgYWJzb2x1dGVQb3NpdGlvbihpbnQgJi8qeFBvcyovLCBpbnQgJi8qeVBvcyovLCBib29sIGYg
PSBmYWxzZSk7CiAgICAgYm9vbCBwb3NPZkNoYXIoaW50IGNoLCBpbnQgJngsIGludCAmeSk7CiAK
QEAgLTIxMSwxNSArMjM5LDI0IEBAIHB1YmxpYzoKICAgICBET006OlRleHRJbXBsICplbGVtZW50
KCkgY29uc3QKICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxET006OlRleHRJbXBsKj4oUmVuZGVy
T2JqZWN0OjplbGVtZW50KCkpOyB9CiAKKyAgICAvKiogcmV0dXJucyB0aGUgbG93ZXN0IHBvc3Np
YmxlIHZhbHVlIHRoZSBjYXJldCBvZmZzZXQgbWF5IGhhdmUgdG8KKyAgICAgKiBzdGlsbCBwb2lu
dCB0byBhIHZhbGlkIHBvc2l0aW9uLgorICAgICAqLworICAgIHZpcnR1YWwgbG9uZyBtaW5PZmZz
ZXQoKSBjb25zdDsKKyAgICAvKiogcmV0dXJucyB0aGUgaGlnaGVzdCBwb3NzaWJsZSB2YWx1ZSB0
aGUgY2FyZXQgb2Zmc2V0IG1heSBoYXZlIHRvCisgICAgICogc3RpbGwgcG9pbnQgdG8gYSB2YWxp
ZCBwb3NpdGlvbi4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGxvbmcgbWF4T2Zmc2V0KCkgY29uc3Q7
CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50VGV4dE91dGxpbmUoUVBhaW50ZXIgKnAsIGlu
dCB0eCwgaW50IHR5LCBjb25zdCBRUmVjdCAmcHJldkxpbmUsIGNvbnN0IFFSZWN0ICZ0aGlzTGlu
ZSwgY29uc3QgUVJlY3QgJm5leHRMaW5lKTsKIAotICAgIC8vIEZpbmQgdGhlIHRleHQgc2xhdmUg
dGhhdCBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGF0IEBwIG9mZnNldAotICAgIC8vIGFuZCByZXR1
cm4gcG9zLCB3aGljaCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXIgaW4gdGhlIHNsYXZlLgot
ICAgIFRleHRTbGF2ZSAqIGZpbmRUZXh0U2xhdmUoIGludCBvZmZzZXQsIGludCAmcG9zICk7Cisg
ICAgLy8gRmluZCB0aGUgdGV4dCBib3ggdGhhdCBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGF0IEBw
IG9mZnNldAorICAgIC8vIGFuZCByZXR1cm4gcG9zLCB3aGljaCBpcyB0aGUgcG9zaXRpb24gb2Yg
dGhlIGNoYXIgaW4gdGhlIHJ1bi4KKyAgICBJbmxpbmVUZXh0Qm94ICogZmluZElubGluZVRleHRC
b3goIGludCBvZmZzZXQsIGludCAmcG9zICk7CiAKIHByb3RlY3RlZDogLy8gbWVtYmVycwotICAg
IFRleHRTbGF2ZUFycmF5IG1fbGluZXM7CisgICAgSW5saW5lVGV4dEJveEFycmF5IG1fbGluZXM7
CiAgICAgRE9NOjpET01TdHJpbmdJbXBsICpzdHI7IC8vCiAKICAgICBzaG9ydCBtX2xpbmVIZWln
aHQ7CkluZGV4OiB4bWwvZG9tX2RvY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21l
L2tkZS9rZGVsaWJzL2todG1sL3htbC9kb21fZG9jaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMjMyCmRpZmYgLXUgLXAgLXIxLjIzMiBkb21fZG9jaW1wbC5jcHAKLS0tIHhtbC9kb21f
ZG9jaW1wbC5jcHAJNSBBdWcgMjAwMyAxODoyMzo0NCAtMDAwMAkxLjIzMgorKysgeG1sL2RvbV9k
b2NpbXBsLmNwcAkxOCBBdWcgMjAwMyAyMTo1MzowMCAtMDAwMApAQCAtMzMwLDcgKzMzMCw3IEBA
IERvY3VtZW50SW1wbDo6RG9jdW1lbnRJbXBsKERPTUltcGxlbWVudGEKIAogICAgIG1fdmlldyA9
IHY7CiAgICAgbV9yZW5kZXJBcmVuYSA9IDA7Ci0KKyAgICAgICAgICAgICAgICAgICAKICAgICBp
ZiAoIHYgKSB7CiAgICAgICAgIG1fZG9jTG9hZGVyID0gbmV3IERvY0xvYWRlcih2LT5wYXJ0KCks
IHRoaXMgKTsKICAgICAgICAgc2V0UGFpbnREZXZpY2UoIG1fdmlldyApOwpAQCAtMTkxMiw2ICsx
OTEyLDE3IEBAIGJvb2wgRG9jdW1lbnRJbXBsOjppc1VSTEFsbG93ZWQoY29uc3QgUVMKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEb2N1bWVudEltcGw6OnNldERlc2lnbk1v
ZGUoYm9vbCBiKQoreworICAgIGlmIChtX3ZpZXcpCisgICAgICAgICBtX3ZpZXctPnBhcnQoKS0+
c2V0RWRpdGFibGUoYik7Cit9CisKK2Jvb2wgRG9jdW1lbnRJbXBsOjpkZXNpZ25Nb2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV92aWV3ID8gbV92aWV3LT5wYXJ0KCktPmlzRWRpdGFibGUoKSA6
IGZhbHNlOwogfQogCiBFdmVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRXZlbnQoY29uc3Qg
RE9NU3RyaW5nICZldmVudFR5cGUsIGludCAmZXhjZXB0aW9uY29kZSkKSW5kZXg6IHhtbC9kb21f
ZG9jaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL3ht
bC9kb21fZG9jaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExNApkaWZmIC11IC1wIC1y
MS4xMTQgZG9tX2RvY2ltcGwuaAotLS0geG1sL2RvbV9kb2NpbXBsLmgJMjEgSnVuIDIwMDMgMDk6
MTQ6NTMgLTAwMDAJMS4xMTQKKysrIHhtbC9kb21fZG9jaW1wbC5oCTE4IEF1ZyAyMDAzIDIxOjUz
OjAxIC0wMDAwCkBAIC0zMjEsNiArMzIxLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dENv
bG9yKCBRQ29sb3IgY29sb3IgKSB7IG1fdGV4dENvbG9yID0gY29sb3I7IH0KICAgICBRQ29sb3Ig
dGV4dENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29sb3I7IH0KIAorICAgIHZvaWQgc2V0
RGVzaWduTW9kZShib29sIGIpOworICAgIGJvb2wgZGVzaWduTW9kZSgpIGNvbnN0OworCiAgICAg
Ly8gaW50ZXJuYWwKICAgICBOb2RlSW1wbCAqZmluZEVsZW1lbnQoIElkIGlkICk7CiAKSW5kZXg6
IHhtbC9kb21fZWxlbWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9r
ZGVsaWJzL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE4MQpkaWZmIC11IC1wIC1yMS4xODEgZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0geG1sL2Rv
bV9lbGVtZW50aW1wbC5jcHAJMTcgTWF5IDIwMDMgMjI6MTI6NTkgLTAwMDAJMS4xODEKKysrIHht
bC9kb21fZWxlbWVudGltcGwuY3BwCTE4IEF1ZyAyMDAzIDIxOjUzOjAyIC0wMDAwCkBAIC0zOCw2
ICszOCw4IEBACiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIKICNpbmNsdWRlICJjc3Mv
Y3NzX3N0eWxlc2hlZXRpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJjc3MvY3NzdmFsdWVzLmgiCisjaW5jbHVkZSAiY3NzL2Nzc3Byb3BlcnRpZXMu
aCIKICNpbmNsdWRlICJ4bWwvZG9tX3htbGltcGwuaCIKIAogI2luY2x1ZGUgPHF0ZXh0c3RyZWFt
Lmg+CkBAIC01NTksNyArNTYxLDEwIEBAIHZvaWQgRWxlbWVudEltcGw6OnJlY2FsY1N0eWxlKCBT
dHlsZUNoYW4KIAogYm9vbCBFbGVtZW50SW1wbDo6aXNTZWxlY3RhYmxlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgLy8gT25seSBtYWtlIGVkaXRhYmxlIGVsZW1lbnRzIHNlbGVj
dGFibGUgaWYgaXRzIHBhcmVudCBlbGVtZW50CisgICAgLy8gaXMgbm90IGVkaXRhYmxlLiBGSVhN
RTogdGhpcyBpcyBub3QgMTAwJSByaWdodCBhcyBub24tZWRpdGFibGUgZWxlbWVudHMKKyAgICAv
LyB3aXRoaW4gZWRpdGFibGUgZWxlbWVudHMgYXJlIGZvY3VzYWJsZSB0b28uCisgICAgcmV0dXJu
IGNvbnRlbnRFZGl0YWJsZSgpICYmICghcGFyZW50Tm9kZSgpIHx8ICFwYXJlbnROb2RlKCktPmNv
bnRlbnRFZGl0YWJsZSgpKTsKIH0KIAogLy8gRE9NIFNlY3Rpb24gMS4xLjEKQEAgLTYyMSw2ICs2
MjYsMzcgQEAgdm9pZCBFbGVtZW50SW1wbDo6ZGlzcGF0Y2hBdHRyQWRkaXRpb25FdgogICAgLy9p
bnQgZXhjZXB0aW9uY29kZSA9IDA7CiAgICAvL2Rpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZl
bnRJbXBsKEV2ZW50SW1wbDo6RE9NQVRUUk1PRElGSUVEX0VWRU5ULHRydWUsZmFsc2UsYXR0cixh
dHRyLT52YWx1ZSgpLAogICAgLy9hdHRyLT52YWx1ZSgpLGdldERvY3VtZW50KCktPmF0dHJOYW1l
KGF0dHItPmlkKCkpLE11dGF0aW9uRXZlbnQ6OkFERElUSU9OKSxleGNlcHRpb25jb2RlKTsKK30K
KworYm9vbCBFbGVtZW50SW1wbDo6Y29udGVudEVkaXRhYmxlKCkgY29uc3QgeworI2lmIDAKKyAg
ICBET006OkNTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqdmFsID0gc3RhdGljX2Nhc3Q8RE9NOjpDU1NQ
cmltaXRpdmVWYWx1ZUltcGwgKj4KKyAgICAJCShjb25zdF9jYXN0PEVsZW1lbnRJbXBsICo+KHRo
aXMpLT5zdHlsZVJ1bGVzKCkKKwkJLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19QUk9QX19LT05R
X1VTRVJfSU5QVVQpKTsKKy8vICAgIGtkRGVidWcoKSA8PCAidmFsIiA8PCB2YWwgPDwgZW5kbDsK
KyAgICByZXR1cm4gdmFsID8gdmFsLT5nZXRJZGVudCgpID09IENTU19WQUxfRU5BQkxFRCA6IGZh
bHNlOworI2VuZGlmCisgICAgcmV0dXJuIE5vZGVJbXBsOjpjb250ZW50RWRpdGFibGUoKTsKK30K
Kwordm9pZCBFbGVtZW50SW1wbDo6c2V0Q29udGVudEVkaXRhYmxlKGJvb2wgZW5hYmxlZCkgewor
ICAgIC8vIEZJWE1FOiB0aGUgYXBwcm9hY2ggaXMgZmxhd2VkLCBiZXR0ZXIgdXNlIGFuIGVudW0g
aW5zdGVhZCBvZiBib29sCisgICAgaW50IHZhbHVlOworICAgIGlmIChlbmFibGVkKQorICAgICAg
ICB2YWx1ZSA9IENTU19WQUxfRU5BQkxFRDsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSW50ZWxs
aWdlbnRseSB1c2UgIm5vbmUiIG9yICJkaXNhYmxlZCIsIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBv
ZgorICAgICAgICAvLyBlbGVtZW50CisJLy8gRklYTUU6IGludGVsbGlnZW5jZSBub3QgaW1wbCdk
IHlldAorCXZhbHVlID0gQ1NTX1ZBTF9OT05FOworCisgICAgICAgIC8vIEZJWE1FOiByZXNldCBj
YXJldCBpZiBpdCBpcyBpbiB0aGlzIG5vZGUgb3IgYSBjaGlsZAorICAgIH0vKmVuZCBpZiovCisg
ICAgLy8gRklYTUU6IHVzZSBhZGRDU1NQcm9wZXJ0eSB3aGVuIEkgZ2V0IHBlcm1pc3Npb24gdG8g
bW92ZSBpdCBoZXJlCisvLyAgICBrZERlYnVnKDYwMDApIDw8ICJDU1NfUFJPUF9fS09OUV9VU0VS
X0lOUFVUOiAiPDwgdmFsdWUgPDwgZW5kbDsKKyAgICBzdHlsZVJ1bGVzKCktPnNldFByb3BlcnR5
KENTU19QUk9QX19LT05RX1VTRVJfSU5QVVQsIHZhbHVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgc2V0
Q2hhbmdlZCgpOworCiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IHhtbC9kb21fZWxl
bWVudGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC94
bWwvZG9tX2VsZW1lbnRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA5CmRpZmYgLXUg
LXAgLXIxLjEwOSBkb21fZWxlbWVudGltcGwuaAotLS0geG1sL2RvbV9lbGVtZW50aW1wbC5oCTI3
IEp1biAyMDAzIDE2OjI3OjMxIC0wMDAwCTEuMTA5CisrKyB4bWwvZG9tX2VsZW1lbnRpbXBsLmgJ
MTggQXVnIDIwMDMgMjE6NTM6MDIgLTAwMDAKQEAgLTE5NSw2ICsxOTUsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaXNwYXRjaEF0dHJSZW1vdmFsRXZlbnQoTm9kZUltcGw6OklkIGlkLCBET01TdHJp
bmdJbXBsICp2YWx1ZSk7CiAgICAgdm9pZCBkaXNwYXRjaEF0dHJBZGRpdGlvbkV2ZW50KE5vZGVJ
bXBsOjpJZCBpZCwgRE9NU3RyaW5nSW1wbCAqdmFsdWUpOwogCisgICAgdmlydHVhbCBib29sIGNv
bnRlbnRFZGl0YWJsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudEVkaXRhYmxlKGJvb2wg
ZW5hYmxlZCk7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGNyZWF0ZUF0dHJpYnV0ZU1hcCgpIGNv
bnN0OwogICAgIHZvaWQgY3JlYXRlRGVjbCgpOwpJbmRleDogeG1sL2RvbV9ub2RlaW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwveG1sL2RvbV9ub2Rl
aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEyCmRpZmYgLXUgLXAgLXIxLjIxMiBk
b21fbm9kZWltcGwuY3BwCi0tLSB4bWwvZG9tX25vZGVpbXBsLmNwcAkyMiBKdW4gMjAwMyAxODox
NDo1OCAtMDAwMAkxLjIxMgorKysgeG1sL2RvbV9ub2RlaW1wbC5jcHAJMTggQXVnIDIwMDMgMjE6
NTM6MDQgLTAwMDAKQEAgLTMxNywxMCArMzE3LDEwIEBAIFFTdHJpbmcgTm9kZUltcGw6OnJlY3Vy
c2l2ZV90b0hUTUwoYm9vbCAKICAgICByZXR1cm4gbWU7CiB9CiAKLXZvaWQgTm9kZUltcGw6Omdl
dEN1cnNvcihpbnQgb2Zmc2V0LCBpbnQgJl94LCBpbnQgJl95LCBpbnQgJmhlaWdodCkKK3ZvaWQg
Tm9kZUltcGw6OmdldENhcmV0KGludCBvZmZzZXQsIGJvb2wgb3ZlcnJpZGUsIGludCAmX3gsIGlu
dCAmX3ksIGludCAmd2lkdGgsIGludCAmaGVpZ2h0KQogewotICAgIGlmKG1fcmVuZGVyKSBtX3Jl
bmRlci0+Y3Vyc29yUG9zKG9mZnNldCwgX3gsIF95LCBoZWlnaHQpOwotICAgIGVsc2UgX3ggPSBf
eSA9IGhlaWdodCA9IC0xOworICAgIGlmKG1fcmVuZGVyKSBtX3JlbmRlci0+Y2FyZXRQb3Mob2Zm
c2V0LCBvdmVycmlkZSwgX3gsIF95LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBlbHNlIF94ID0gX3kg
PSBoZWlnaHQgPSAtMSwgd2lkdGggPSAxOwogfQogCiBRUmVjdCBOb2RlSW1wbDo6Z2V0UmVjdCgp
IGNvbnN0CkBAIC05NTMsNiArOTUzLDg1IEBAIFJlbmRlck9iamVjdCAqIE5vZGVJbXBsOjpuZXh0
UmVuZGVyZXIoKQogICAgICAgICAgICAgcmV0dXJuIG4tPnJlbmRlcmVyKCk7CiAgICAgfQogICAg
IHJldHVybiAwOworfQorCitib29sIE5vZGVJbXBsOjpjb250ZW50RWRpdGFibGUoKSBjb25zdAor
eworICAgIFJlbmRlck9iamVjdCAqciA9IHJlbmRlcmVyKCk7CisgICAgaWYgKCFyKSByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHItPnN0eWxlKCktPnVzZXJJbnB1dCgpID09IFVJX0VOQUJMRUQ7
Cit9CisKK05vZGVJbXBsICpOb2RlSW1wbDo6cHJldkxlYWZOb2RlKCkgY29uc3QKK3sKKyAgY29u
c3QgTm9kZUltcGwgKnIgPSB0aGlzOworICBjb25zdCBOb2RlSW1wbCAqbiA9IGZpcnN0Q2hpbGQo
KTsKKyAgaWYgKG4pIHsKKyAgICB3aGlsZSAobikgeyByID0gbjsgbiA9IG4tPmZpcnN0Q2hpbGQo
KTsgfQorICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGVJbXBsICo+KHIpOworICB9LyplbmQgaWYq
LworICBuID0gci0+cHJldmlvdXNTaWJsaW5nKCk7CisgIGlmIChuKSB7CisgICAgciA9IG47Cisg
ICAgd2hpbGUgKG4pIHsgciA9IG47IG4gPSBuLT5maXJzdENoaWxkKCk7IH0KKyAgICByZXR1cm4g
Y29uc3RfY2FzdDxOb2RlSW1wbCAqPihyKTsKKyAgfS8qZW5kIGlmKi8KKworICBuID0gci0+cGFy
ZW50Tm9kZSgpOworICB3aGlsZSAobikgeworICAgIHIgPSBuOworICAgIG4gPSByLT5wcmV2aW91
c1NpYmxpbmcoKTsKKyAgICBpZiAobikgeworICAgICAgciA9IG47CisgICAgICBuID0gci0+bGFz
dENoaWxkKCk7CisgICAgICB3aGlsZSAobikgeyByID0gbjsgbiA9IG4tPmxhc3RDaGlsZCgpOyB9
CisgICAgICByZXR1cm4gY29uc3RfY2FzdDxOb2RlSW1wbCAqPihyKTsKKyAgICB9LyplbmQgaWYq
LworICAgIG4gPSByLT5wYXJlbnROb2RlKCk7CisgIH0vKndlbmQqLworICByZXR1cm4gMDsKK30K
KworTm9kZUltcGwgKk5vZGVJbXBsOjpuZXh0TGVhZk5vZGUoKSBjb25zdAoreworICBjb25zdCBO
b2RlSW1wbCAqciA9IHRoaXM7CisgIGNvbnN0IE5vZGVJbXBsICpuID0gZmlyc3RDaGlsZCgpOwor
ICBpZiAobikgeworICAgIHdoaWxlIChuKSB7IHIgPSBuOyBuID0gbi0+Zmlyc3RDaGlsZCgpOyB9
CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Tm9kZUltcGwgKj4ocik7CisgIH0vKmVuZCBpZiovCisg
IG4gPSByLT5uZXh0U2libGluZygpOworICBpZiAobikgeworICAgIHIgPSBuOworICAgIHdoaWxl
IChuKSB7IHIgPSBuOyBuID0gbi0+Zmlyc3RDaGlsZCgpOyB9CisgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8Tm9kZUltcGwgKj4ocik7CisgIH0vKmVuZCBpZiovCisKKyAgbiA9IHItPnBhcmVudE5vZGUo
KTsKKyAgd2hpbGUgKG4pIHsKKyAgICByID0gbjsKKyAgICBuID0gci0+bmV4dFNpYmxpbmcoKTsK
KyAgICBpZiAobikgeworICAgICAgciA9IG47CisgICAgICBuID0gci0+Zmlyc3RDaGlsZCgpOwor
ICAgICAgd2hpbGUgKG4pIHsgciA9IG47IG4gPSBuLT5maXJzdENoaWxkKCk7IH0KKyAgICAgIHJl
dHVybiBjb25zdF9jYXN0PE5vZGVJbXBsICo+KHIpOworICAgIH0vKmVuZCBpZiovCisgICAgbiA9
IHItPnBhcmVudE5vZGUoKTsKKyAgfS8qd2VuZCovCisgIHJldHVybiAwOworfQorCitsb25nIE5v
ZGVJbXBsOjptaW5PZmZzZXQoKSBjb25zdAoreworICAvLyBBcnJnaCEgWW91J2QgdGhpbmsgKmV2
ZXJ5KiBvZmZzZXQgc3RhcnRzIGF0IHplcm8sIGJ1dCBsb28sCisgIC8vIHRoZXJlZm9yZSB3ZSBu
ZWVkIHRoaXMgbWV0aG9kCisgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+bWluT2Zm
c2V0KCkgOiAwOworfQorCitsb25nIE5vZGVJbXBsOjptYXhPZmZzZXQoKSBjb25zdAoreworICBy
ZXR1cm4gcmVuZGVyZXIoKSA/IHJlbmRlcmVyKCktPm1heE9mZnNldCgpIDogMTsKIH0KIAogLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkluZGV4OiB4bWwvZG9tX25vZGVpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE0NgpkaWZmIC11IC1wIC1yMS4xNDYgZG9tX25vZGVpbXBsLmgKLS0t
IHhtbC9kb21fbm9kZWltcGwuaAkxNiBBdWcgMjAwMyAxOTo0NTowOCAtMDAwMAkxLjE0NgorKysg
eG1sL2RvbV9ub2RlaW1wbC5oCTE4IEF1ZyAyMDAzIDIxOjUzOjA1IC0wMDAwCkBAIC0xMTEsNiAr
MTExLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1hNTEVsZW1lbnROb2RlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNHZW5lcmljRm9ybUVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjb250YWluc09u
bHlXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
Y29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAKICAgICAvLyBoZWxwZXIgZnVuY3Rpb25zIG5vdCBi
ZWluZyBwYXJ0IG9mIHRoZSBET00KICAgICAvLyBBdHRlbnRpb246IHRoZXkgYXNzdW1lIHRoYXQg
dGhlIGNhbGxlciBkaWQgdGhlIGNvbnNpc3RlbmN5IGNoZWNraW5nIQpAQCAtMTIwLDYgKzEyMSwy
NCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEZpcnN0Q2hpbGQoTm9kZUltcGwgKmNo
aWxkKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdENoaWxkKE5vZGVJbXBsICpjaGlsZCk7CiAK
KyAgICAvKiogKE5vdCBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBET00pCisgICAgICogUmV0dXJucyB0
aGUgbmV4dCBsZWFmIG5vZGUuCisgICAgICoKKyAgICAgKiBVc2luZyB0aGlzIGZ1bmN0aW9uIGRl
bGl2ZXJzIGxlYWYgbm9kZXMgYXMgaWYgdGhlIHdob2xlIERPTSB0cmVlCisgICAgICogd2VyZSBh
IGxpbmVhciBjaGFpbiBvZiBpdHMgbGVhZiBub2Rlcy4KKyAgICAgKiBAcmV0dXJuIG5leHQgbGVh
ZiBub2RlIG9yIDAgaWYgdGhlcmUgYXJlIG5vIG1vcmUuCisgICAgICovCisgICAgTm9kZUltcGwg
Km5leHRMZWFmTm9kZSgpIGNvbnN0OworCisgICAgLyoqIChOb3QgcGFydCBvZiB0aGUgb2ZmaWNp
YWwgRE9NKQorICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIGxlYWYgbm9kZS4KKyAgICAgKgor
ICAgICAqIFVzaW5nIHRoaXMgZnVuY3Rpb24gZGVsaXZlcnMgbGVhZiBub2RlcyBhcyBpZiB0aGUg
d2hvbGUgRE9NIHRyZWUKKyAgICAgKiB3ZXJlIGEgbGluZWFyIGNoYWluIG9mIGl0cyBsZWFmIG5v
ZGVzLgorICAgICAqIEByZXR1cm4gcHJldmlvdXMgbGVhZiBub2RlIG9yIDAgaWYgdGhlcmUgYXJl
IG5vIG1vcmUuCisgICAgICovCisgICAgTm9kZUltcGwgKnByZXZMZWFmTm9kZSgpIGNvbnN0Owor
CiAgICAgLy8gdXNlZCBieSB0aGUgcGFyc2VyLiBEb2Vzbid0IGRvIGFzIG1hbnkgZXJyb3IgY2hl
Y2tpbmdzIGFzCiAgICAgLy8gYXBwZW5kQ2hpbGQoKSwgYW5kIHJldHVybnMgdGhlIG5vZGUgaW50
byB3aGljaCB3aWxsIGJlIHBhcnNlZCBuZXh0LgogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENo
aWxkKE5vZGVJbXBsICpuZXdDaGlsZCk7CkBAIC0yMDMsNyArMjIyLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgUVN0cmluZyB0b0hUTUwoKSBjb25zdDsKICAgICBRU3RyaW5nIHJlY3Vyc2l2ZV90
b0hUTUwoYm9vbCBzdGFydCA9IGZhbHNlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXRD
dXJzb3IoaW50IG9mZnNldCwgaW50ICZfeCwgaW50ICZfeSwgaW50ICZoZWlnaHQpOworICAgIHZp
cnR1YWwgdm9pZCBnZXRDYXJldChpbnQgb2Zmc2V0LCBib29sIG92ZXJyaWRlLCBpbnQgJl94LCBp
bnQgJl95LCBpbnQgJndpZHRoLCBpbnQgJmhlaWdodCk7CiAgICAgdmlydHVhbCBRUmVjdCBnZXRS
ZWN0KCkgY29uc3Q7CiAKICAgICBlbnVtIFN0eWxlQ2hhbmdlIHsgTm9DaGFuZ2UsIE5vSW5oZXJp
dCwgSW5oZXJpdCwgRm9yY2UgfTsKQEAgLTI3Miw2ICsyOTEsMjEgQEAgcHVibGljOgogICAgIGJv
b2wgaXNBbmNlc3RvciggTm9kZUltcGwgKm90aGVyICk7CiAgICAgdmlydHVhbCBib29sIGNoaWxk
QWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICk7CiAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IHRoZSBtaW5pbXVtIGNhcmV0IG9mZnNldCB0aGF0IGlzIGFsbG93ZWQgZm9yIHRoaXMgbm9kZS4K
KyAgICAgKgorICAgICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcmV0dXJu
cyAwLiBUZXh0dWFsIGNoaWxkIG5vZGVzCisgICAgICogbWF5IHJldHVybiBvdGhlciB2YWx1ZXMu
CisgICAgICovCisgICAgdmlydHVhbCBsb25nIG1pbk9mZnNldCgpIGNvbnN0OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gY2FyZXQgb2Zmc2V0IHRoYXQgaXMgYWxsb3dlZCBm
b3IgdGhpcyBub2RlLgorICAgICAqCisgICAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9u
IGFsd2F5cyByZXR1cm5zIDEuIFRleHR1YWwgY2hpbGQgbm9kZXMKKyAgICAgKiByZXR1cm4gdGhl
IGNoYXJhY3RlciBjb3VudCBpbnN0ZWFkLgorICAgICAqLworICAgIHZpcnR1YWwgbG9uZyBtYXhP
ZmZzZXQoKSBjb25zdDsKKwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gSW50
ZWdyYXRpb24gd2l0aCByZW5kZXJpbmcgdHJlZQogCkBAIC0yODksNyArMzIzLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKIAogICAgIHZvaWQgY2xvc2VSZW5kZXJlcigp
OwotICAgIAorCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBNZXRob2RzIGZv
ciBtYWludGFpbmluZyB0aGUgc3RhdGUgb2YgdGhlIGVsZW1lbnQgYmV0d2VlbiBoaXN0b3J5IG5h
dmlnYXRpb24KIApJbmRleDogeG1sL2RvbV90ZXh0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOTQKZGlmZiAtdSAtcCAtcjEuOTQgZG9tX3RleHRpbXBsLmNwcAotLS0g
eG1sL2RvbV90ZXh0aW1wbC5jcHAJMjcgSmFuIDIwMDMgMDc6MzM6NTIgLTAwMDAJMS45NAorKysg
eG1sL2RvbV90ZXh0aW1wbC5jcHAJMTggQXVnIDIwMDMgMjE6NTM6MDUgLTAwMDAKQEAgLTIyOSw2
ICsyMjksMTggQEAgdm9pZCBDaGFyYWN0ZXJEYXRhSW1wbDo6Y2hlY2tDaGFyRGF0YU9wZQogICAg
IH0KIH0KIAorbG9uZyBDaGFyYWN0ZXJEYXRhSW1wbDo6bWluT2Zmc2V0KCkgY29uc3QgeworICBS
ZW5kZXJUZXh0ICpyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJlcigpKTsKKyAg
aWYgKCFyIHx8ICFyLT5pc1RleHQoKSkgcmV0dXJuIDA7CisgIHJldHVybiByLT5taW5PZmZzZXQo
KTsKK30KKworbG9uZyBDaGFyYWN0ZXJEYXRhSW1wbDo6bWF4T2Zmc2V0KCkgY29uc3QgeworICBS
ZW5kZXJUZXh0ICpyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJlcigpKTsKKyAg
aWYgKCFyIHx8ICFyLT5pc1RleHQoKSkgcmV0dXJuIChsb25nKWxlbmd0aCgpOworICByZXR1cm4g
ci0+bWF4T2Zmc2V0KCk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBET01TdHJpbmcg
Q29tbWVudEltcGw6Om5vZGVOYW1lKCkgY29uc3QKSW5kZXg6IHhtbC9kb21fdGV4dGltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC94bWwvZG9tX3RleHRp
bXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTcKZGlmZiAtdSAtcCAtcjEuNTcgZG9tX3Rl
eHRpbXBsLmgKLS0tIHhtbC9kb21fdGV4dGltcGwuaAkxMSBGZWIgMjAwMyAwMTo0ODo1MSAtMDAw
MAkxLjU3CisrKyB4bWwvZG9tX3RleHRpbXBsLmgJMTggQXVnIDIwMDMgMjE6NTM6MDUgLTAwMDAK
QEAgLTY2LDYgKzY2LDkgQEAgcHVibGljOgogICAgIERPTVN0cmluZyBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gc3RyOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tDaGFyRGF0YU9wZXJhdGlvbigg
Y29uc3QgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICB2aXJ0dWFsIGxvbmcgbWluT2Zmc2V0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBsb25nIG1heE9mZnNldCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gbm90
ZTogc2luY2UgRE9NU3RyaW5ncyBhcmUgc2hhcmVkLCBzdHIgc2hvdWxkIGFsd2F5cyBiZSBjb3Bp
ZWQgd2hlbiBtYWtpbmcK
</data>

          </attachment>
      

    </bug>

</bugzilla>