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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>45532</bug_id>
          
          <creation_ts>2010-09-10 05:01:07 -0700</creation_ts>
          <short_desc>Rewrite SVG text layout code</short_desc>
          <delta_ts>2010-10-04 22:46:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>46887</dependson>
    
    <dependson>46888</dependson>
    
    <dependson>46889</dependson>
    
    <dependson>46964</dependson>
    
    <dependson>46969</dependson>
    
    <dependson>46971</dependson>
    
    <dependson>46972</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>krit</cc>
    
    <cc>mitz</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>277125</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-10 05:01:07 -0700</bug_when>
    <thetext>This is the master bug tracking the rewrite of the SVG text layout code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288178</commentid>
    <comment_count>1</comment_count>
      <attachid>69452</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 05:02:49 -0700</bug_when>
    <thetext>Created attachment 69452
Patch

All preparations are done, welcome the final patch for the new layout engine!
It&apos;s already much faster, but there&apos;s so much room for improvment!

When RenderSVGText::layout() was called, we used to relayout the whole text tree, including all characters every time.
This is still the case, but it&apos;s very easy to cache the results now, as the layout process is now a three phase process. More details later.

This patch doesn&apos;t yet contain a ChangeLog nor the build system changes, and it also won&apos;t build so far. I&apos;m waiting for my local build.
It&apos;s just a merge from my local &quot;WebKit + new layout engine&quot; branch into trunk. Uploading so Dirk can familiarize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288220</commentid>
    <comment_count>2</comment_count>
      <attachid>69463</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 06:36:43 -0700</bug_when>
    <thetext>Created attachment 69463
Patch: WebCore

It&apos;s not meant to be reviewed yet, as it&apos;s still missing a ChangeLog, I just want to trigger EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288222</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 06:38:46 -0700</bug_when>
    <thetext>For the curious: I&apos;ve been working on this patch the last 3 weeks. It fixes all known conceptual problems with the old layout engine - the code is much more readable, the patch is not, agreed.

All excuses to the poor soul Dirk!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288225</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-01 06:41:07 -0700</bug_when>
    <thetext>Attachment 69463 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/rendering/svg/RenderSVGInlineText.cpp:138:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/svg/SVGTextLayoutEngine.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/rendering/svg/SVGTextChunkBuilder.cpp:38:  Missing space before {  [whitespace/braces] [5]
WebCore/rendering/svg/SVGTextLayoutAttributes.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/rendering/svg/SVGTextQuery.cpp:537:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/WebCore.pro:3291:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 6 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288234</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-01 07:06:02 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=69452&amp;action=review

A really huge patch. You should stop working on SVGText. You suck the batteries of reviewers dry :-P Looks goo otherwise. Need to fix the mentioned issues of course.

&gt; WebCore/rendering/SVGRenderTreeAsText.cpp:413
&gt; +    for (unsigned i = 0; i &lt; fragments.size(); ++i) {

save fragment.size() in an extra varaibale

&gt; WebCore/rendering/svg/SVGTextLayoutAttributesBuilder.cpp:89
&gt; +        float length(list-&gt;getItem(i, ec));

I would take float length = ... and use length(..) just for objects.

&gt; WebCore/rendering/svg/SVGTextLayoutEngine.cpp:212
&gt; +    if (lengthAdjust == SVGTextContentElement::LENGTHADJUST_SPACING)
&gt; +        m_textPathSpacing = (desiredTextLength - totalLength) / totalCharacters;
&gt; +    else
&gt; +        m_textPathScaling = desiredTextLength / totalLength;

you could use:

m_textPathScaling = desiredTextLength / totalLength;
if (lengthAdjust == SVGTextContentElement::LENGTHADJUST_SPACING)
   m_textPathScaling /= totalCharacters;

&gt; WebCore/rendering/svg/SVGTextLayoutEngine.cpp:376
&gt; +    for (; metricsListOffset &lt; textMetricsSize &amp;&amp; positionListOffset &lt; xValues.size(); ++metricsListOffset) {

Save xValues.size() in a variable.

&gt; WebCore/rendering/svg/SVGTextQuery.cpp:354
&gt; +    if (startPosition &gt; 0) {

Isn&apos;t enough to just use if (startPosition) ?

&gt; WebCore/rendering/svg/SVGTextQuery.cpp:474
&gt; +    if (startPosition &gt; 0) {

ditto.

&gt; WebCore/rendering/svg/SVGTextQuery.cpp:529
&gt; +    for (unsigned i = 0; i &lt; fragment.length; ++i) {

save fragment.length in a variable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288245</commentid>
    <comment_count>6</comment_count>
      <attachid>69467</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 07:50:36 -0700</bug_when>
    <thetext>Created attachment 69467
Patch: WebCore - v2

This time with an extensive ChangeLog.
The LayoutTests side of this patch follows soon.

NOTE: Dirk has already reviewed my work during the last weeks, otherwhise I wouldn&apos;t have asked him to review this beast.
I already splitted the patch up before (see the depends section), but I couldn&apos;t split this thing up any further, without landing #if 0 code or lots of commented stuff with FIXMEs.
Text is really a hairy section, and when changing underlying core concepts (like removing text chunks &amp; text chunk parts), this affects several hundred k of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288250</commentid>
    <comment_count>7</comment_count>
      <attachid>69468</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 08:09:27 -0700</bug_when>
    <thetext>Created attachment 69468
Patch: LayoutTests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288251</commentid>
    <comment_count>8</comment_count>
      <attachid>69467</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-01 08:18:32 -0700</bug_when>
    <thetext>Comment on attachment 69467
Patch: WebCore - v2

r=me. Discussed a little change in the changelog on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288252</commentid>
    <comment_count>9</comment_count>
      <attachid>69468</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-01 08:19:10 -0700</bug_when>
    <thetext>Comment on attachment 69468
Patch: LayoutTests

r=me. Great explanations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288664</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-02 01:09:28 -0700</bug_when>
    <thetext>Committed r68976: &lt;http://trac.webkit.org/changeset/68976&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288669</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-02 02:28:36 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Committed r68976: &lt;http://trac.webkit.org/changeset/68976&gt;

Landed qt/win/gtk rebaselines in r68977.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288877</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-04 04:44:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/68976 might have broken Chromium Win Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288943</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-04 08:25:27 -0700</bug_when>
    <thetext>Rewrite again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288947</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-04 08:27:16 -0700</bug_when>
    <thetext>I&apos;m sad that this was such a huge patch with little (no?) Input from anyone who knows the text system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289454</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-04 22:45:04 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Rewrite again?

Again? :-)
You are referrring to the last larger text change, which chained the way SVG text is painted, sharing all of the selection logic etc. with InlineTextBox - this stuff has remained unchanged in the new patch.

This patch adressed the logic that deals with SVGs text layout code (parsing x/y/dx/dy/rotate value lists, storing their results) and the actual text-on-path/line layout.

The way HTML/SVG text is integrated hasn&apos;t been changed at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289455</commentid>
    <comment_count>16</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-04 22:46:59 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I&apos;m sad that this was such a huge patch with little (no?) Input from anyone who knows the text system.

Right, there was no input at all, but only because of the fact I didn&apos;t change anything related to HTML text. The patch is really about laying out a &lt;text&gt; subtree per-character, based on the SVG x/y/dx/dy/rotate values (baselines, glyph-orientation etc.) and the textPath calculations.

A whole load of the code has just been refactored from existing source files, dating back to 2007.
Does that satisfy you?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69452</attachid>
            <date>2010-10-01 05:02:49 -0700</date>
            <delta_ts>2010-10-01 06:36:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>NewLayoutEngine.diff</filename>
            <type>text/plain</type>
            <size>210544</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2ODg3OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMCBAQAogCQkwODBGQUUxQjBFRUVCREE4MDBBQUNE
RTkgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODBGQUUxOTBFRUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVF
bGVtZW50LmggKi87IH07CiAJCTA4MTA5M0RCMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgxMDkzRDkxMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlci5jcHAgKi87IH07CiAJCTA4MTA5M0RDMTI1NUYwRTcwMEVEOUQyOSAv
KiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MTA5M0RBMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCAqLzsgfTsKKwkJMDgxNjY4RDMxMjU2MDNCRjAw
NkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDExMjU2MDNCRjAwNkYyNURFIC8qIFNWR1Rl
eHRDaHVua0J1aWxkZXIuY3BwICovOyB9OworCQkwODE2NjhENDEyNTYwM0JGMDA2RjI1REUgLyog
U1ZHVGV4dENodW5rQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgxNjY4RDIxMjU2MDNCRjAwNkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxk
ZXIuaCAqLzsgfTsKKwkJMDgxNjY4RDkxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRF
bmdpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDgxNjY4RDcxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwICovOyB9
OworCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2
MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxOEFFRTIw
RURCODZCQzAwNjQ3QjY2IC8qIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MThBRUUwMEVEQjg2QkMwMDY0
N0I2NiAvKiBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5jcHAgKi87IH07CiAJCTA4MThBRUUzMEVE
Qjg2QkMwMDY0N0I2NiAvKiBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxOEFFRTEwRURCODZCQzAwNjQ3QjY2
IC8qIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmggKi87IH07CiAJCTA4MUFBOERBMTExMTIzN0Uw
MDJBQjA2RSAvKiBTVkdFbGVtZW50UmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MUFBOEQ5MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdFbGVt
ZW50UmFyZURhdGEuaCAqLzsgfTsKQEAgLTYwMTksNiArNjAyMywxMCBAQAogCQkwODBGQUUxOTBF
RUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdNTFRlbXBsYXRlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwODEwOTNEOTEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXNCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4MTA5M0RBMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXNCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MTY2
OEQxMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRDaHVua0J1aWxkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODE2NjhEMjEyNTYwM0JGMDA2RjI1REUgLyogU1ZH
VGV4dENodW5rQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdU
ZXh0Q2h1bmtCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MTY2OEQ3
MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwODE2NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4
dExheW91dEVuZ2luZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0
TGF5b3V0RW5naW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MThBRUUwMEVE
Qjg2QkMwMDY0N0I2NiAvKiBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MThBRUUxMEVEQjg2QkMwMDY0N0I2NiAvKiBX
TUxFdmVudEhhbmRsaW5nRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE2NjQsMTEgKzExNjcyLDE1IEBACiAJCQkJMDg1NEIw
MTExMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLywKIAkJCQkwOEYwQkZC
RDEyNTVDNTNDMDAwNzUxODUgLyogU1ZHVGV4dENodW5rLmNwcCAqLywKIAkJCQkwOEYwQkZCRTEy
NTVDNTNDMDAwNzUxODUgLyogU1ZHVGV4dENodW5rLmggKi8sCisJCQkJMDgxNjY4RDExMjU2MDNC
RjAwNkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxkZXIuY3BwICovLAorCQkJCTA4MTY2OEQyMTI1
NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggKi8sCiAJCQkJMDhGMEJGQkYx
MjU1QzUzQzAwMDc1MTg1IC8qIFNWR1RleHRGcmFnbWVudC5oICovLAogCQkJCTA4OEMyRjc1MTIz
OTAwODAwMDNENjVDRSAvKiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJMDg4
QzJGNzYxMjM5MDA4MDAwM0Q2NUNFIC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmggKi8sCiAJ
CQkJMDgxMDkzRDkxMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVp
bGRlci5jcHAgKi8sCiAJCQkJMDgxMDkzREExMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzQnVpbGRlci5oICovLAorCQkJCTA4MTY2OEQ3MTI1NjAzRDUwMDZGMjVERSAv
KiBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcCAqLywKKwkJCQkwODE2NjhEODEyNTYwM0Q1MDA2RjI1
REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oICovLAogCQkJCTA4MEU0OTIxMTI1NUYzQkQwMEVG
Q0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwICovLAogCQkJCTA4MEU0OTIy
MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCAqLywKIAkJ
CQkwODBFNDkyMzEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcu
Y3BwICovLApAQCAtMjA5NTEsNiArMjA5NjMsOCBAQAogCQkJCTA4MTA5M0RDMTI1NUYwRTcwMEVE
OUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA4MEU0OTI2MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxp
bmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdU
ZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDgxNjY4RDQxMjU2
MDNCRjAwNkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTA4MTY2OERBMTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTIzNDc5LDYgKzIzNDkzLDggQEAKIAkJCQkwODEwOTNEQjEyNTVGMEU3MDBF
RDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTA4MEU0OTI1MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFz
ZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgwRTQ5MjcxMjU1RjNCRDAwRUZDQTI3IC8q
IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4MTY2
OEQzMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTA4MTY2OEQ5MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5l
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDY4
ODY3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzOSw2ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzUm9vdElubGluZUJv
eCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjaWYgRU5BQkxFKFNWRykKICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdJbmxpbmVUZXh0Qm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmVGbG93Qm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290SW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lv
biA2ODg2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFJlY3Qgc2Vs
ZWN0aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGludCBzdGFydFBvcywgaW50IGVuZFBvcyk7
CiAgICAgYm9vbCBpc1NlbGVjdGVkKGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9zKTsK
KyAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9zKTsKIAogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0
eSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gNjg4NjcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4NCwz
NSArMTA4NCw2IEBAIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKFBhc3NSZWYKICAg
ICB9CiAgICAgQVNTRVJUKG1fdGV4dCk7CiAKLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChpc1NW
R0lubGluZVRleHQoKSkgewotICAgICAgICBpZiAoc3R5bGUoKSAmJiBzdHlsZSgpLT53aGl0ZVNw
YWNlKCkgPT0gUFJFKSB7Ci0gICAgICAgICAgICAvLyBTcGVjOiBXaGVuIHhtbDpzcGFjZT0icHJl
c2VydmUiLCB0aGUgU1ZHIHVzZXIgYWdlbnQgd2lsbCBkbyB0aGUgZm9sbG93aW5nIHVzaW5nIGEK
LSAgICAgICAgICAgIC8vIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGNoYXJhY3RlciBkYXRhIGNvbnRl
bnQuIEl0IHdpbGwgY29udmVydCBhbGwgbmV3bGluZSBhbmQgdGFiCi0gICAgICAgICAgICAvLyBj
aGFyYWN0ZXJzIGludG8gc3BhY2UgY2hhcmFjdGVycy4gVGhlbiwgaXQgd2lsbCBkcmF3IGFsbCBz
cGFjZSBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcKLSAgICAgICAgICAgIC8vIGxlYWRpbmcsIHRyYWls
aW5nIGFuZCBtdWx0aXBsZSBjb250aWd1b3VzIHNwYWNlIGNoYXJhY3RlcnMuCi0KLSAgICAgICAg
ICAgIG1fdGV4dC5yZXBsYWNlKCdcbicsICcgJyk7Ci0KLSAgICAgICAgICAgIC8vIElmIHhtbDpz
cGFjZT0icHJlc2VydmUiIGlzIHNldCwgd2hpdGUtc3BhY2UgaXMgc2V0IHRvICJwcmUiLCB3aGlj
aAotICAgICAgICAgICAgLy8gcHJlc2VydmVzIGxlYWRpbmcsIHRyYWlsaW5nICYgY29udGlndW91
cyBzcGFjZSBjaGFyYWN0ZXIgZm9yIHVzLgotICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBTcGVjOiBXaGVuIHhtbDpzcGFjZT0iZGVmYXVsdCIsIHRoZSBTVkcgdXNlciBhZ2VudCB3aWxs
IGRvIHRoZSBmb2xsb3dpbmcgdXNpbmcgYQotICAgICAgICAgICAgLy8gY29weSBvZiB0aGUgb3Jp
Z2luYWwgY2hhcmFjdGVyIGRhdGEgY29udGVudC4gRmlyc3QsIGl0IHdpbGwgcmVtb3ZlIGFsbCBu
ZXdsaW5lCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJzLiBUaGVuIGl0IHdpbGwgY29udmVydCBh
bGwgdGFiIGNoYXJhY3RlcnMgaW50byBzcGFjZSBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgLy8g
VGhlbiwgaXQgd2lsbCBzdHJpcCBvZmYgYWxsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIGNo
YXJhY3RlcnMuCi0gICAgICAgICAgICAvLyBUaGVuLCBhbGwgY29udGlndW91cyBzcGFjZSBjaGFy
YWN0ZXJzIHdpbGwgYmUgY29uc29saWRhdGVkLiAgICAKLQotICAgICAgICAgICBtX3RleHQucmVw
bGFjZSgnXG4nLCBTdHJpbmdJbXBsOjplbXB0eSgpKTsKLQotICAgICAgICAgICAvLyBJZiB4bWw6
c3BhY2U9ImRlZmF1bHQiIGlzIHNldCwgd2hpdGUtc3BhY2UgaXMgc2V0IHRvICJub3dyYXAiLCB3
aGljaCBoYW5kbGVzCi0gICAgICAgICAgIC8vIGxlYWRpbmcsIHRyYWlsaW5nICYgY29udGlndW91
cyBzcGFjZSBjaGFyYWN0ZXIgcmVtb3ZhbCBmb3IgdXMuCi0gICAgICAgIH0KLQotICAgICAgICBt
X3RleHQucmVwbGFjZSgnXHQnLCAnICcpOwotICAgIH0KLSNlbmRpZgotCiAgICAgaWYgKHN0eWxl
KCkpIHsKICAgICAgICAgdHJhbnNmb3JtVGV4dChtX3RleHQpOwogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNyArNTcsNiBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNW
R0NoYXJhY3RlckxheW91dEluZm8uaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAj
aW5jbHVkZSAiU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGF0dGVy
bkVsZW1lbnQuaCIKQEAgLTM4NywxMTYgKzM4Niw3MSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtCiBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlclNWR1RleHRCb3goVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckJsb2NrJiB0ZXh0KQogewogICAgIFNWR1Jvb3RJbmxp
bmVCb3gqIGJveCA9IHN0YXRpY19jYXN0PFNWR1Jvb3RJbmxpbmVCb3gqPih0ZXh0LmZpcnN0Um9v
dEJveCgpKTsKLQogICAgIGlmICghYm94KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8
U1ZHVGV4dENodW5rPiYgY2h1bmtzID0gY29uc3RfY2FzdDxWZWN0b3I8U1ZHVGV4dENodW5rPiYg
Pihib3gtPnN2Z1RleHRDaHVua3MoKSk7Ci0gICAgdHMgPDwgIiBhdCAoIiA8PCB0ZXh0LngoKSA8
PCAiLCIgPDwgdGV4dC55KCkgPDwgIikgc2l6ZSAiIDw8IGJveC0+bG9naWNhbFdpZHRoKCkgPDwg
IngiIDw8IGJveC0+bG9naWNhbEhlaWdodCgpIDw8ICIgY29udGFpbnMgIiA8PCBjaHVua3Muc2l6
ZSgpIDw8ICIgY2h1bmsocykiOworICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54KCkgPDwgIiwi
IDw8IHRleHQueSgpIDw8ICIpIHNpemUgIiA8PCBib3gtPmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8
PCBib3gtPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
aGFjaywgb25jZSB0aGUgbmV3IHRleHQgbGF5b3V0IGVuZ2luZSBpcyBjb21wbGV0bHkgbGFuZGVk
LiBXZSB3YW50IHRvIHByZXNlcnZlIHRoZSBvbGQgbGF5b3V0IHRlc3QgcmVzdWx0cyBmb3Igbm93
LgorICAgIHRzIDw8ICIgY29udGFpbnMgMSBjaHVuayhzKSI7CiAKICAgICBpZiAodGV4dC5wYXJl
bnQoKSAmJiAodGV4dC5wYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpICE9IHRleHQuc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpKSkKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3Ii
LCB0ZXh0LnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5u
YW1lKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNJbmxpbmVUZXh0Qm94KFNW
R1RleHRDaHVuayYgY2h1bmssIFNWR0lubGluZVRleHRCb3gqIGJveCkKLXsKLSAgICBWZWN0b3I8
U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+OjppdGVyYXRvciBib3hJdCA9IGNodW5rLmJveGVz
LmJlZ2luKCk7Ci0gICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0
b3IgYm94RW5kID0gY2h1bmsuYm94ZXMuZW5kKCk7Ci0KLSAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgZm9yICg7IGJveEl0ICE9IGJveEVuZDsgKytib3hJdCkgewotICAgICAgICBTVkdJbmxp
bmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94SXQ7Ci0KLSAgICAgICAgaWYgKGJveCA9
PSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4ocmFuZ2UuYm94KSkgewotICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gZm91bmQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVNWR0lubGlu
ZVRleHRCb3goVGV4dFN0cmVhbSYgdHMsIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGludCBp
bmRlbnQpCiB7Ci0gICAgU1ZHUm9vdElubGluZUJveCogcm9vdEJveCA9IHRleHRCb3gtPnN2Z1Jv
b3RJbmxpbmVCb3goKTsKLSAgICBpZiAoIXJvb3RCb3gpCisgICAgVmVjdG9yPFNWR1RleHRGcmFn
bWVudD4mIGZyYWdtZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKyAgICBpZiAoZnJh
Z21lbnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFNWR1RleHRD
aHVuaz4mIGNodW5rcyA9IGNvbnN0X2Nhc3Q8VmVjdG9yPFNWR1RleHRDaHVuaz4mID4ocm9vdEJv
eC0+c3ZnVGV4dENodW5rcygpKTsKLQotICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+OjppdGVyYXRv
ciBpdCA9IGNodW5rcy5iZWdpbigpOwotICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+OjppdGVyYXRv
ciBlbmQgPSBjaHVua3MuZW5kKCk7CisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRl
cmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHRleHRCb3gtPnRleHRSZW5kZXJlcigpKTsKKyAg
ICBBU1NFUlQodGV4dFJlbmRlcmVyKTsKIAotICAgIC8vIFdyaXRlIHRleHQgY2h1bmtzCi0gICAg
dW5zaWduZWQgaW50IGkgPSAxOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgU1ZHVGV4dENodW5rJiBjdXIgPSAqaXQ7Ci0KLSAgICAgICAgLy8gV3JpdGUgaW5saW5lIGJv
eCBjaGFyYWN0ZXIgcmFuZ2VzCi0gICAgICAgIFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJS
YW5nZT46Oml0ZXJhdG9yIGJveEl0ID0gY3VyLmJveGVzLmJlZ2luKCk7Ci0gICAgICAgIFZlY3Rv
cjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGJveEVuZCA9IGN1ci5ib3hl
cy5lbmQoKTsKLQotICAgICAgICBpZiAoIWNvbnRhaW5zSW5saW5lVGV4dEJveChjdXIsIHRleHRC
b3gpKSB7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQorICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHRleHRSZW5kZXJlci0+c3R5
bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBTdHJpbmcgdGV4dCA9IHRleHRCb3gtPnRleHRSZW5kZXJl
cigpLT50ZXh0KCk7CiAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVu
dHMuYXQoaSk7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKIAotICAgICAg
ICB1bnNpZ25lZCBpbnQgaiA9IDE7Ci0gICAgICAgIHRzIDw8ICJjaHVuayAiIDw8IGkgPDwgIiAi
OworICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IGZyYWdtZW50LnBvc2l0aW9uTGlzdE9m
ZnNldDsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gZnJhZ21lbnQucG9zaXRpb25MaXN0
T2Zmc2V0ICsgZnJhZ21lbnQubGVuZ3RoOwogCi0gICAgICAgIGlmIChjdXIuYW5jaG9yID09IFRB
X01JRERMRSkgeworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjaywgb25jZSB0aGUg
bmV3IHRleHQgbGF5b3V0IGVuZ2luZSBpcyBjb21wbGV0bHkgbGFuZGVkLiBXZSB3YW50IHRvIHBy
ZXNlcnZlIHRoZSBvbGQgbGF5b3V0IHRlc3QgcmVzdWx0cyBmb3Igbm93LgorICAgICAgICB0cyA8
PCAiY2h1bmsgMSAiOworICAgICAgICBFVGV4dEFuY2hvciBhbmNob3IgPSBzdmdTdHlsZS0+dGV4
dEFuY2hvcigpOworICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRp
bmdNb2RlKHN2Z1N0eWxlKTsKKyAgICAgICAgaWYgKGFuY2hvciA9PSBUQV9NSURETEUpIHsKICAg
ICAgICAgICAgIHRzIDw8ICIobWlkZGxlIGFuY2hvciI7Ci0gICAgICAgICAgICBpZiAoY3VyLmlz
VmVydGljYWxUZXh0KQorICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQogICAgICAgICAg
ICAgICAgIHRzIDw8ICIsIHZlcnRpY2FsIjsKICAgICAgICAgICAgIHRzIDw8ICIpICI7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoY3VyLmFuY2hvciA9PSBUQV9FTkQpIHsKKyAgICAgICAgfSBlbHNlIGlm
IChhbmNob3IgPT0gVEFfRU5EKSB7CiAgICAgICAgICAgICB0cyA8PCAiKGVuZCBhbmNob3IiOwot
ICAgICAgICAgICAgaWYgKGN1ci5pc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGlmIChpc1Zl
cnRpY2FsVGV4dCkKICAgICAgICAgICAgICAgICB0cyA8PCAiLCB2ZXJ0aWNhbCI7CiAgICAgICAg
ICAgICB0cyA8PCAiKSAiOwotICAgICAgICB9IGVsc2UgaWYgKGN1ci5pc1ZlcnRpY2FsVGV4dCkK
KyAgICAgICAgfSBlbHNlIGlmIChpc1ZlcnRpY2FsVGV4dCkKICAgICAgICAgICAgIHRzIDw8ICIo
dmVydGljYWwpICI7CisgICAgICAgIHN0YXJ0T2Zmc2V0IC09IHRleHRCb3gtPnN0YXJ0KCk7Cisg
ICAgICAgIGVuZE9mZnNldCAtPSB0ZXh0Qm94LT5zdGFydCgpOworICAgICAgICAvLyA8L2hhY2s+
CisKKyAgICAgICAgdHMgPDwgInRleHQgcnVuICIgPDwgaSArIDEgPDwgIiBhdCAoIiA8PCBmcmFn
bWVudC54IDw8ICIsIiA8PCBmcmFnbWVudC55IDw8ICIpIjsKKyAgICAgICAgdHMgPDwgIiBzdGFy
dE9mZnNldCAiIDw8IHN0YXJ0T2Zmc2V0IDw8ICIgZW5kT2Zmc2V0ICIgPDwgZW5kT2Zmc2V0Owor
ICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICB0cyA8PCAiIGhlaWdodCAi
IDw8IGZyYWdtZW50LmhlaWdodDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHMgPDwgIiB3
aWR0aCAiIDw8IGZyYWdtZW50LndpZHRoOwogCi0gICAgICAgIHVuc2lnbmVkIGludCB0b3RhbE9m
ZnNldCA9IDA7Ci0KLSAgICAgICAgZm9yICg7IGJveEl0ICE9IGJveEVuZDsgKytib3hJdCkgewot
ICAgICAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlID0gKmJveEl0Owot
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcmFuZ2UuZW5kT2Zmc2V0IC0gcmFu
Z2Uuc3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICBBU1NFUlQoY3VyLnN0YXJ0ICsgdG90YWxPZmZz
ZXQgPD0gY3VyLmVuZCk7Ci0gICAgCi0gICAgICAgICAgICB0b3RhbE9mZnNldCArPSBvZmZzZXQ7
Ci0gICAgICAKLSAgICAgICAgICAgIGlmICh0ZXh0Qm94ICE9IHN0YXRpY19jYXN0PFNWR0lubGlu
ZVRleHRCb3gqPihyYW5nZS5ib3gpKSB7Ci0gICAgICAgICAgICAgICAgaisrOwotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAKLSAgICAgICAgICAgIEZsb2F0UG9p
bnQgdG9wTGVmdCA9IHRvcExlZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UoY3VyLnN0YXJ0ICsg
dG90YWxPZmZzZXQgLSBvZmZzZXQsIGN1ci5zdGFydCArIHRvdGFsT2Zmc2V0KTsKLQotICAgICAg
ICAgICAgdHMgPDwgInRleHQgcnVuICIgPDwgaiA8PCAiIGF0ICgiIDw8IHRvcExlZnQueCgpIDw8
ICIsIiA8PCB0b3BMZWZ0LnkoKSA8PCAiKSAiOwotICAgICAgICAgICAgdHMgPDwgInN0YXJ0T2Zm
c2V0ICIgPDwgcmFuZ2Uuc3RhcnRPZmZzZXQgPDwgIiBlbmRPZmZzZXQgIiA8PCByYW5nZS5lbmRP
ZmZzZXQ7Ci0KLSAgICAgICAgICAgIGlmIChjdXIuaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAg
ICAgICAgdHMgPDwgIiBoZWlnaHQgIiA8PCBjdW1tdWxhdGVkSGVpZ2h0T2ZJbmxpbmVCb3hDaGFy
YWN0ZXJSYW5nZShyYW5nZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHMg
PDwgIiB3aWR0aCAiIDw8IGN1bW11bGF0ZWRXaWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2Uo
cmFuZ2UpOwotCi0gICAgICAgICAgICBpZiAoIXRleHRCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSB8fCB0ZXh0Qm94LT5tX2Rpck92ZXJyaWRlKSB7Ci0gICAgICAgICAgICAgICAgdHMgPDwg
KCF0ZXh0Qm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyAiIFJUTCIgOiAiIExUUiIpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHRleHRCb3gtPm1fZGlyT3ZlcnJpZGUpCi0gICAgICAgICAg
ICAgICAgICAgIHRzIDw8ICIgb3ZlcnJpZGUiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB0cyA8PCAiOiAiIDw8IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhTdHJpbmcodGV4dEJv
eC0+dGV4dFJlbmRlcmVyKCktPnRleHQoKSkuc3Vic3RyaW5nKHRleHRCb3gtPnN0YXJ0KCkgKyBy
YW5nZS5zdGFydE9mZnNldCwgb2Zmc2V0KSkgPDwgIlxuIjsKLQotICAgICAgICAgICAgaisrOwor
ICAgICAgICBpZiAoIXRleHRCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCB0ZXh0Qm94
LT5tX2Rpck92ZXJyaWRlKSB7CisgICAgICAgICAgICB0cyA8PCAodGV4dEJveC0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpID8gIiBMVFIiIDogIiBSVEwiKTsKKyAgICAgICAgICAgIGlmICh0ZXh0
Qm94LT5tX2Rpck92ZXJyaWRlKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgb3ZlcnJpZGUiOwog
ICAgICAgICB9CiAKLSAgICAgICAgaSsrOworICAgICAgICB0cyA8PCAiOiAiIDw8IHF1b3RlQW5k
RXNjYXBlTm9uUHJpbnRhYmxlcyh0ZXh0LnN1YnN0cmluZyhmcmFnbWVudC5wb3NpdGlvbkxpc3RP
ZmZzZXQsIGZyYWdtZW50Lmxlbmd0aCkpIDw8ICJcbiI7CiAgICAgfQogfQogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gNjg4
NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsMTggKzIyLDcgQEAKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0VXRp
bGl0aWVzLmgiCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNp
bmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5j
bHVkZSAiU1ZHQ2hhcmFjdGVyRGF0YS5oIgotI2luY2x1ZGUgIlNWR0NoYXJhY3RlckxheW91dElu
Zm8uaCIKLSNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCi0jaW5jbHVkZSAiU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oIgotI2luY2x1ZGUgIlRl
eHRSdW4uaCIKLSNpbmNsdWRlICJVbmljb2RlUmFuZ2UuaCIKLQotI2luY2x1ZGUgPGZsb2F0Lmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMzM0ICszMSw2IEBAIGJvb2wgaXNWZXJ0
aWNhbFdyaXRpbmdNb2RlKGNvbnN0IFNWR1JlbmQKICAgICByZXR1cm4gc3R5bGUtPndyaXRpbmdN
b2RlKCkgPT0gV01fVEJSTCB8fCBzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9UQjsgCiB9CiAK
LXN0YXRpYyBpbmxpbmUgRUFsaWdubWVudEJhc2VsaW5lIGRvbWluYW50QmFzZWxpbmVUb1NoaWZ0
KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dCwgY29uc3QgRm9u
dCYgZm9udCkKLXsKLSAgICBBU1NFUlQodGV4dCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpID8gdGV4dC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7
Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IHRleHQtPnBhcmVudCgpICYmIHRleHQtPnBhcmVudCgpLT5zdHlsZSgpID8gdGV4dC0+
cGFyZW50KCktPnN0eWxlKCktPnN2Z1N0eWxlKCkgOiAwOwotCi0gICAgRURvbWluYW50QmFzZWxp
bmUgYmFzZWxpbmUgPSBzdHlsZS0+ZG9taW5hbnRCYXNlbGluZSgpOwotICAgIGlmIChiYXNlbGlu
ZSA9PSBEQl9BVVRPKSB7Ci0gICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAg
IGJhc2VsaW5lID0gREJfQ0VOVFJBTDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZWxp
bmUgPSBEQl9BTFBIQUJFVElDOwotICAgIH0KLQotICAgIHN3aXRjaCAoYmFzZWxpbmUpIHsKLSAg
ICBjYXNlIERCX1VTRV9TQ1JJUFQ6Ci0gICAgICAgIC8vIFRPRE86IFRoZSBkb21pbmFudC1iYXNl
bGluZSBhbmQgdGhlIGJhc2VsaW5lLXRhYmxlIGNvbXBvbmVudHMgYXJlIHNldCBieQotICAgICAg
ICAvLyAgICAgICBkZXRlcm1pbmluZyB0aGUgcHJlZG9taW5hbnQgc2NyaXB0IG9mIHRoZSBjaGFy
YWN0ZXIgZGF0YSBjb250ZW50LgotICAgICAgICByZXR1cm4gQUJfQUxQSEFCRVRJQzsKLSAgICBj
YXNlIERCX05PX0NIQU5HRToKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxl
KQotICAgICAgICAgICAgICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRp
Y2FsVGV4dCwgdGV4dC0+cGFyZW50KCksIGZvbnQpOwotCi0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBBQl9BVVRPOwotICAgICAgICB9Ci0gICAg
Y2FzZSBEQl9SRVNFVF9TSVpFOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocGFyZW50U3R5
bGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRvbWluYW50QmFzZWxpbmVUb1NoaWZ0KGlzVmVy
dGljYWxUZXh0LCB0ZXh0LT5wYXJlbnQoKSwgZm9udCk7Ci0KLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEFCX0FVVE87ICAgIAotICAgICAgICB9
Ci0gICAgY2FzZSBEQl9JREVPR1JBUEhJQzoKLSAgICAgICAgcmV0dXJuIEFCX0lERU9HUkFQSElD
OwotICAgIGNhc2UgREJfQUxQSEFCRVRJQzoKLSAgICAgICAgcmV0dXJuIEFCX0FMUEhBQkVUSUM7
Ci0gICAgY2FzZSBEQl9IQU5HSU5HOgotICAgICAgICByZXR1cm4gQUJfSEFOR0lORzsKLSAgICBj
YXNlIERCX01BVEhFTUFUSUNBTDoKLSAgICAgICAgcmV0dXJuIEFCX01BVEhFTUFUSUNBTDsKLSAg
ICBjYXNlIERCX0NFTlRSQUw6Ci0gICAgICAgIHJldHVybiBBQl9DRU5UUkFMOwotICAgIGNhc2Ug
REJfTUlERExFOgotICAgICAgICByZXR1cm4gQUJfTUlERExFOwotICAgIGNhc2UgREJfVEVYVF9B
RlRFUl9FREdFOgotICAgICAgICByZXR1cm4gQUJfVEVYVF9BRlRFUl9FREdFOwotICAgIGNhc2Ug
REJfVEVYVF9CRUZPUkVfRURHRToKLSAgICAgICAgcmV0dXJuIEFCX1RFWFRfQkVGT1JFX0VER0U7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBBQl9BVVRPOwotICAgIH0KLX0KLQotZmxvYXQgYWxpZ25tZW50QmFzZWxpbmVUb1NoaWZ0
KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dCwgY29uc3QgRm9u
dCYgZm9udCkKLXsKLSAgICBBU1NFUlQodGV4dCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpID8gdGV4dC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7
Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IHRleHQtPnBhcmVudCgpICYmIHRleHQtPnBhcmVudCgpLT5zdHlsZSgpID8gdGV4dC0+
cGFyZW50KCktPnN0eWxlKCktPnN2Z1N0eWxlKCkgOiAwOwotCi0gICAgRUFsaWdubWVudEJhc2Vs
aW5lIGJhc2VsaW5lID0gc3R5bGUtPmFsaWdubWVudEJhc2VsaW5lKCk7Ci0gICAgaWYgKGJhc2Vs
aW5lID09IEFCX0FVVE8pIHsKLSAgICAgICAgaWYgKHBhcmVudFN0eWxlICYmIHN0eWxlLT5kb21p
bmFudEJhc2VsaW5lKCkgPT0gREJfQVVUTykKLSAgICAgICAgICAgIGJhc2VsaW5lID0gZG9taW5h
bnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZWxpbmUgPSBkb21pbmFudEJhc2VsaW5lVG9T
aGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dCwgZm9udCk7Ci0KLSAgICAgICAgQVNTRVJUKGJhc2Vs
aW5lICE9IEFCX0FVVE8pOyAgICAKLSAgICB9Ci0KLSAgICAvLyBOb3RlOiBodHRwOi8vd2lraS5h
cGFjaGUub3JnL3htbGdyYXBoaWNzLWZvcC9MaW5lTGF5b3V0L0FsaWdubWVudEhhbmRsaW5nCi0g
ICAgc3dpdGNoIChiYXNlbGluZSkgewotICAgIGNhc2UgQUJfQkFTRUxJTkU6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9t
aW5hbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQtPnBhcmVudCgpLCBmb250
KTsKLQotICAgICAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgICAgIH0KLSAgICBjYXNlIEFCX0JF
Rk9SRV9FREdFOgotICAgIGNhc2UgQUJfVEVYVF9CRUZPUkVfRURHRToKLSAgICAgICAgcmV0dXJu
IGZvbnQuYXNjZW50KCk7Ci0gICAgY2FzZSBBQl9NSURETEU6Ci0gICAgICAgIHJldHVybiBmb250
LnhIZWlnaHQoKSAvIDIuMGY7Ci0gICAgY2FzZSBBQl9DRU5UUkFMOgotICAgICAgICAvLyBOb3Qg
bmVlZGVkLCB3ZSdyZSB0YWtpbmcgdGhpcyBpbnRvIGFjY291bnQgYWxyZWFkeSBmb3IgdmVydGlj
YWwgdGV4dCEKLSAgICAgICAgLy8gcmV0dXJuIChmb250LmFzY2VudCgpIC0gZm9udC5kZXNjZW50
KCkpIC8gMi4wZjsKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgY2FzZSBBQl9BRlRFUl9FREdF
OgotICAgIGNhc2UgQUJfVEVYVF9BRlRFUl9FREdFOgotICAgIGNhc2UgQUJfSURFT0dSQVBISUM6
Ci0gICAgICAgIHJldHVybiBmb250LmRlc2NlbnQoKTsKLSAgICBjYXNlIEFCX0FMUEhBQkVUSUM6
Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIGNhc2UgQUJfSEFOR0lORzoKLSAgICAgICAgcmV0
dXJuIGZvbnQuYXNjZW50KCkgKiA4LjBmIC8gMTAuMGY7Ci0gICAgY2FzZSBBQl9NQVRIRU1BVElD
QUw6Ci0gICAgICAgIHJldHVybiBmb250LmFzY2VudCgpIC8gMi4wZjsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAg
fQotfQotCi1mbG9hdCBnbHlwaE9yaWVudGF0aW9uVG9BbmdsZShjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3ZnU3R5bGUsIGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFVDaGFyJiBjaGFyYWN0ZXIp
Ci17Ci0gICAgc3dpdGNoIChpc1ZlcnRpY2FsVGV4dCA/IHN2Z1N0eWxlLT5nbHlwaE9yaWVudGF0
aW9uVmVydGljYWwoKSA6IHN2Z1N0eWxlLT5nbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCgpKSB7
Ci0gICAgY2FzZSBHT19BVVRPOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTcGVjOiBGdWxs
d2lkdGggaWRlb2dyYXBoaWMgYW5kIGZ1bGx3aWR0aCBMYXRpbiB0ZXh0IHdpbGwgYmUgc2V0IHdp
dGggYSBnbHlwaC1vcmllbnRhdGlvbiBvZiAwLWRlZ3JlZXMuCi0gICAgICAgICAgICAvLyBUZXh0
IHdoaWNoIGlzIG5vdCBmdWxsd2lkdGggd2lsbCBiZSBzZXQgd2l0aCBhIGdseXBoLW9yaWVudGF0
aW9uIG9mIDkwLWRlZ3JlZXMuCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pY29kZVJhbmdl
ID0gZmluZENoYXJVbmljb2RlUmFuZ2UoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGlmICh1bmlj
b2RlUmFuZ2UgPT0gY1JhbmdlU2V0TGF0aW4gfHwgdW5pY29kZVJhbmdlID09IGNSYW5nZUFyYWJp
YykKLSAgICAgICAgICAgICAgICByZXR1cm4gOTAuMGY7Ci0KLSAgICAgICAgICAgIHJldHVybiAw
LjBmOwotICAgICAgICB9Ci0gICAgY2FzZSBHT185MERFRzoKLSAgICAgICAgcmV0dXJuIDkwLjBm
OwotICAgIGNhc2UgR09fMTgwREVHOgotICAgICAgICByZXR1cm4gMTgwLjBmOwotICAgIGNhc2Ug
R09fMjcwREVHOgotICAgICAgICByZXR1cm4gMjcwLjBmOwotICAgIGNhc2UgR09fMERFRzoKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBnbHlwaE9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcyhmbG9hdCBvcmll
bnRhdGlvbkFuZ2xlKQotewotICAgIHJldHVybiBmYWJzZihmbW9kZihvcmllbnRhdGlvbkFuZ2xl
LCAxODAuMGYpKSA9PSAwLjBmOwotfQotCi1mbG9hdCBhcHBseUdseXBoQWR2YW5jZUFuZFNoaWZ0
UmVzcGVjdGluZ09yaWVudGF0aW9uKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IG9yaWVudGF0
aW9uQW5nbGUsIGZsb2F0IGdseXBoV2lkdGgsIGZsb2F0IGdseXBoSGVpZ2h0LCBjb25zdCBGb250
JiBmb250LCBTVkdDaGFyJiBzdmdDaGFyLCBmbG9hdCYgeE9yaWVudGF0aW9uU2hpZnQsIGZsb2F0
JiB5T3JpZW50YXRpb25TaGlmdCkKLXsKLSAgICBib29sIG9yaWVudGF0aW9uSXNNdWx0aXBseU9m
MTgwRGVncmVlcyA9IGdseXBoT3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzKG9yaWVu
dGF0aW9uQW5nbGUpOwotCi0gICAgLy8gVGhlIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIHNwZWMgcmVx
dWlyZW1lbnRzOgotICAgIC8vCi0gICAgLy8gU3BlYzogSWYgdGhlICdnbHlwaC1vcmllbnRhdGlv
bi1ob3Jpem9udGFsJyByZXN1bHRzIGluIGFuIG9yaWVudGF0aW9uIGFuZ2xlIHRoYXQgaXMgbm90
IGEgbXVsdGlwbGUgb2YKLSAgICAvLyBvZiAxODAgZGVncmVlcywgdGhlbiB0aGUgY3VycmVudCB0
ZXh0IHBvc2l0aW9uIGlzIGluY3JlbWVudGVkIGFjY29yZGluZyB0byB0aGUgdmVydGljYWwgbWV0
cmljcyBvZiB0aGUgZ2x5cGguCi0gICAgLy8KLSAgICAvLyBTcGVjOiBJZiBpZiB0aGUgJ2dseXBo
LW9yaWVudGF0aW9uLXZlcnRpY2FsJyByZXN1bHRzIGluIGFuIG9yaWVudGF0aW9uIGFuZ2xlIHRo
YXQgaXMgbm90IGEgbXVsdGlwbGUgb2YKLSAgICAvLyAxODAgZGVncmVlcyx0aGVuIHRoZSBjdXJy
ZW50IHRleHQgcG9zaXRpb24gaXMgaW5jcmVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBob3Jpem9u
dGFsIG1ldHJpY3Mgb2YgdGhlIGdseXBoLgotCi0gICAgLy8gdmVydGljYWwgb3JpZW50YXRpb24g
aGFuZGxpbmcKLSAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgaWYgKG9yaWVudGF0
aW9uQW5nbGUgPT0gMC4wZikgewotICAgICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSAtZ2x5
cGhXaWR0aCAvIDIuMGY7Ci0gICAgICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IGZvbnQuYXNj
ZW50KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25BbmdsZSA9PSA5MC4wZikgewot
ICAgICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSAtZ2x5cGhIZWlnaHQ7Ci0gICAgICAgICAg
ICB5T3JpZW50YXRpb25TaGlmdCA9IGZvbnQuZGVzY2VudCgpOwotICAgICAgICAgICAgc3ZnQ2hh
ci5vcmllbnRhdGlvblNoaWZ0WSA9IC1mb250LmFzY2VudCgpOwotICAgICAgICB9IGVsc2UgaWYg
KG9yaWVudGF0aW9uQW5nbGUgPT0gMjcwLjBmKSB7Ci0gICAgICAgICAgICB4T3JpZW50YXRpb25T
aGlmdCA9IGdseXBoSGVpZ2h0OwotICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSBmb250
LmRlc2NlbnQoKTsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFggPSAtZ2x5
cGhXaWR0aDsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSAtZm9udC5h
c2NlbnQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDE4MC4wZikg
ewotICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSBmb250LmFzY2VudCgpOwotICAgICAg
ICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdpZHRoIC8gMi4wZjsKLSAg
ICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSBmb250LmFzY2VudCgpIC0gZm9u
dC5kZXNjZW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB2ZXJ0aWNhbCBhZHZhbmNlIGNh
bGN1bGF0aW9uCi0gICAgICAgIGlmIChvcmllbnRhdGlvbkFuZ2xlICE9IDAuMGYgJiYgIW9yaWVu
dGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcykKLSAgICAgICAgICAgIHJldHVybiBnbHlwaFdp
ZHRoOwotCi0gICAgICAgIHJldHVybiBnbHlwaEhlaWdodDsgCi0gICAgfQotCi0gICAgLy8gaG9y
aXpvbnRhbCBvcmllbnRhdGlvbiBoYW5kbGluZwotICAgIGlmIChvcmllbnRhdGlvbkFuZ2xlID09
IDkwLjBmKSB7Ci0gICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gZ2x5cGhXaWR0aCAvIDIuMGY7
Ci0gICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gLWZvbnQuZGVzY2VudCgpOwotICAgICAgICBz
dmdDaGFyLm9yaWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGggLyAyLjBmIC0gZm9udC5kZXNj
ZW50KCk7IAotICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gZm9udC5kZXNjZW50
KCk7Ci0gICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDI3MC4wZikgewotICAgICAg
ICB4T3JpZW50YXRpb25TaGlmdCA9IC1nbHlwaFdpZHRoIC8gMi4wZjsKLSAgICAgICAgeU9yaWVu
dGF0aW9uU2hpZnQgPSAtZm9udC5kZXNjZW50KCk7Ci0gICAgICAgIHN2Z0NoYXIub3JpZW50YXRp
b25TaGlmdFggPSAtZ2x5cGhXaWR0aCAvIDIuMGYgKyBmb250LmRlc2NlbnQoKTsKLSAgICAgICAg
c3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WSA9IGdseXBoSGVpZ2h0OwotICAgIH0gZWxzZSBpZiAo
b3JpZW50YXRpb25BbmdsZSA9PSAxODAuMGYpIHsKLSAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQg
PSBnbHlwaFdpZHRoIC8gMi4wZjsKLSAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WCA9
IC1nbHlwaFdpZHRoIC8gMi4wZjsKLSAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WSA9
IGZvbnQuYXNjZW50KCkgLSBmb250LmRlc2NlbnQoKTsKLSAgICB9Ci0KLSAgICAvLyBob3Jpem9u
dGFsIGFkdmFuY2UgY2FsY3VsYXRpb24KLSAgICBpZiAob3JpZW50YXRpb25BbmdsZSAhPSAwLjBm
ICYmICFvcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMpCi0gICAgICAgIHJldHVybiBn
bHlwaEhlaWdodDsKLQotICAgIHJldHVybiBnbHlwaFdpZHRoOwotfQotCi1GbG9hdFBvaW50IHRv
cExlZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UoVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBp
dCwgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBlbmQpCi17Ci0gICAgZmxvYXQgbG93WCA9IEZM
VF9NQVgsIGxvd1kgPSBGTFRfTUFYOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgaWYgKGl0LT5pc0hpZGRlbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgZmxvYXQgeCA9ICgqaXQpLng7Ci0gICAgICAgIGZsb2F0IHkgPSAoKml0KS55OwotCi0gICAg
ICAgIGlmICh4IDwgbG93WCkKLSAgICAgICAgICAgIGxvd1ggPSB4OwotCi0gICAgICAgIGlmICh5
IDwgbG93WSkKLSAgICAgICAgICAgIGxvd1kgPSB5OwotICAgIH0KLQotICAgIHJldHVybiBGbG9h
dFBvaW50KGxvd1gsIGxvd1kpOwotfQotCi1mbG9hdCBjdW1tdWxhdGVkV2lkdGhPZklubGluZUJv
eENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSkKLXsKLSAg
ICBBU1NFUlQoIXJhbmdlLmlzT3BlbigpKTsKLSAgICBBU1NFUlQocmFuZ2UuaXNDbG9zZWQoKSk7
Ci0gICAgQVNTRVJUKHJhbmdlLmJveC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpOwotCi0gICAgSW5s
aW5lVGV4dEJveCogdGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihyYW5nZS5i
b3gpOwotICAgIFJlbmRlclRleHQqIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKTsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwotICAgIHJldHVybiBzdHlsZS0+
Zm9udCgpLmZsb2F0V2lkdGgoc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dC0+Y2hhcmFj
dGVycygpICsgdGV4dEJveC0+c3RhcnQoKSArIHJhbmdlLnN0YXJ0T2Zmc2V0LCByYW5nZS5lbmRP
ZmZzZXQgLSByYW5nZS5zdGFydE9mZnNldCwgc3R5bGUsIHRleHRCb3gpKTsKLX0KLQotZmxvYXQg
Y3VtbXVsYXRlZEhlaWdodE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hh
cmFjdGVyUmFuZ2UmIHJhbmdlKQotewotICAgIEFTU0VSVCghcmFuZ2UuaXNPcGVuKCkpOwotICAg
IEFTU0VSVChyYW5nZS5pc0Nsb3NlZCgpKTsKLSAgICBBU1NFUlQocmFuZ2UuYm94LT5pc1NWR0lu
bGluZVRleHRCb3goKSk7Ci0KLSAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3RhdGljX2Nh
c3Q8SW5saW5lVGV4dEJveCo+KHJhbmdlLmJveCk7Ci0gICAgcmV0dXJuIChyYW5nZS5lbmRPZmZz
ZXQgLSByYW5nZS5zdGFydE9mZnNldCkgKiB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+c3R5bGUo
KS0+Zm9udCgpLmhlaWdodCgpOwotfQotCi1UZXh0UnVuIHN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0
Qm94KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUsIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gpCi17Ci0gICAgQVNTRVJUKHRl
eHRCb3gpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJz
Ci0gICAgICAgICAgICAgICAgLCBsZW5ndGgKLSAgICAgICAgICAgICAgICAsIGZhbHNlIC8qIGFs
bG93VGFicyAqLwotICAgICAgICAgICAgICAgICwgMCAvKiB4UG9zLCBvbmx5IHJlbGV2YW50IHdp
dGggYWxsb3dUYWJzPXRydWUgKi8KLSAgICAgICAgICAgICAgICAsIDAgLyogcGFkZGluZywgb25s
eSByZWxldmFudCBmb3IganVzdGlmaWVkIHRleHQsIG5vdCByZWxldmFudCBmb3IgU1ZHICovCi0g
ICAgICAgICAgICAgICAgLCAhdGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpCi0gICAg
ICAgICAgICAgICAgLCB0ZXh0Qm94LT5tX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9y
ZGVyZWQoKSAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKLQotI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgcnVuLnNldFJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KHRleHRCb3gtPnRleHRSZW5k
ZXJlcigpLT5wYXJlbnQoKSk7Ci0jZW5kaWYKLQotICAgIC8vIERpc2FibGUgYW55IHdvcmQvY2hh
cmFjdGVyIHJvdW5kaW5nLgotICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwotCi0gICAg
Ly8gV2UgaGFuZGxlIGxldHRlciAmIHdvcmQgc3BhY2luZyBvdXJzZWx2ZXMuCi0gICAgcnVuLmRp
c2FibGVTcGFjaW5nKCk7Ci0gICAgcmV0dXJuIHJ1bjsKLX0KLQotZmxvYXQgY2FsY3VsYXRlQ1NT
S2VybmluZyhTVkdFbGVtZW50KiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCi17
Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7Ci0gICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0KLSAgICBTVkdMZW5ndGgg
a2VybmluZ0xlbmd0aCA9IHN2Z1N0eWxlLT5rZXJuaW5nKCk7Ci0gICAgaWYgKGtlcm5pbmdMZW5n
dGgudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSkKLSAgICAgICAgcmV0dXJuIGtl
cm5pbmdMZW5ndGgudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIGZvbnQucGl4ZWxTaXplKCk7Ci0KLSAg
ICByZXR1cm4ga2VybmluZ0xlbmd0aC52YWx1ZShjb250ZXh0KTsKLX0KLQotYm9vbCBhcHBseVNW
R0tlcm5pbmcoU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYgaW5mbywgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBTVkdMYXN0R2x5cGhJbmZvJiBsYXN0R2x5cGgsIGNvbnN0IFN0cmluZyYgdW5pY29k
ZVN0cmluZywgY29uc3QgU3RyaW5nJiBnbHlwaE5hbWUsIGJvb2wgaXNWZXJ0aWNhbFRleHQpCi17
Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBmbG9hdCBrZXJuaW5nID0gMC4wZjsKLQotICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOwotICAgIGlmICghZm9udC5pc1NWR0Zv
bnQoKSkgewotICAgICAgICBsYXN0R2x5cGguaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgU1ZHRm9udEVsZW1lbnQqIHN2Z0ZvbnQgPSBmb250LnN2
Z0ZvbnQoKTsKLSAgICBBU1NFUlQoc3ZnRm9udCk7Ci0KLSAgICBpZiAobGFzdEdseXBoLmlzVmFs
aWQpIHsKLSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAga2VybmluZyA9
IHN2Z0ZvbnQtPnZlcnRpY2FsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMobGFzdEds
eXBoLnVuaWNvZGUsIGxhc3RHbHlwaC5nbHlwaE5hbWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoTmFt
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGtlcm5pbmcgPSBzdmdGb250LT5ob3Jpem9u
dGFsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMobGFzdEdseXBoLnVuaWNvZGUsIGxh
c3RHbHlwaC5nbHlwaE5hbWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoTmFtZSk7Ci0gICAgfQotCi0g
ICAgbGFzdEdseXBoLnVuaWNvZGUgPSB1bmljb2RlU3RyaW5nOwotICAgIGxhc3RHbHlwaC5nbHlw
aE5hbWUgPSBnbHlwaE5hbWU7Ci0gICAgbGFzdEdseXBoLmlzVmFsaWQgPSB0cnVlOwotICAgIGtl
cm5pbmcgKj0gc3R5bGUtPmZvbnQoKS5zaXplKCkgLyBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250
KCktPnVuaXRzUGVyRW0oKTsKLQotICAgIGlmIChrZXJuaW5nICE9IDAuMGYpIHsKLSAgICAgICAg
aWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgaW5mby5jdXJ5IC09IGtlcm5pbmc7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluZm8uY3VyeCAtPSBrZXJuaW5nOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKLSAgICBV
TlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxhc3RHbHlwaCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHVuaWNvZGVTdHJpbmcpOwotICAgIFVOVVNFRF9QQVJBTShnbHlwaE5hbWUpOwot
I2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB9CiAKICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuaAkocmV2aXNpb24gNjg4NjcpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDQ3ICsyMiwxMCBAQAogI2RlZmluZSBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzX2gK
IAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0
UG9pbnQ7Ci1jbGFzcyBGb250OwotY2xhc3MgSW5saW5lVGV4dEJveDsKLWNsYXNzIFJlbmRlck9i
amVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgU1ZHRWxlbWVudDsKIGNsYXNzIFNWR1Jl
bmRlclN0eWxlOwotY2xhc3MgVGV4dFJ1bjsKLQotc3RydWN0IFNWR0NoYXI7Ci1zdHJ1Y3QgU1ZH
Q2hhcmFjdGVyTGF5b3V0SW5mbzsKLXN0cnVjdCBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZTsK
LQotc3RydWN0IFNWR0xhc3RHbHlwaEluZm8gewotICAgIFNWR0xhc3RHbHlwaEluZm8oKQotICAg
ICAgICA6IGlzVmFsaWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgaXNWYWxpZDsK
LSAgICBTdHJpbmcgdW5pY29kZTsKLSAgICBTdHJpbmcgZ2x5cGhOYW1lOwotfTsKLQogYm9vbCBp
c1ZlcnRpY2FsV3JpdGluZ01vZGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUqKTsKLWZsb2F0IGFsaWdu
bWVudEJhc2VsaW5lVG9TaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIHRleHQsIGNvbnN0IEZvbnQmKTsKLWZsb2F0IGdseXBoT3JpZW50YXRpb25Ub0FuZ2xlKGNv
bnN0IFNWR1JlbmRlclN0eWxlKiwgYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgVUNoYXImKTsK
LWZsb2F0IGFwcGx5R2x5cGhBZHZhbmNlQW5kU2hpZnRSZXNwZWN0aW5nT3JpZW50YXRpb24oYm9v
bCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgb3JpZW50YXRpb25BbmdsZSwgZmxvYXQgZ2x5cGhXaWR0
aCwgZmxvYXQgZ2x5cGhIZWlnaHQsIGNvbnN0IEZvbnQmLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVkdDaGFyJiwgZmxvYXQmIHhPcmllbnRh
dGlvblNoaWZ0LCBmbG9hdCYgeU9yaWVudGF0aW9uU2hpZnQpOwotRmxvYXRQb2ludCB0b3BMZWZ0
UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3Igc3RhcnQs
IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgZW5kKTsKLWZsb2F0IGN1bW11bGF0ZWRXaWR0aE9m
SW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmKTsKLWZs
b2F0IGN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJveENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJv
eENoYXJhY3RlclJhbmdlJik7Ci1UZXh0UnVuIHN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KGNv
bnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBJbmxpbmVU
ZXh0Qm94Kik7Ci0KLWZsb2F0IGNhbGN1bGF0ZUNTU0tlcm5pbmcoU1ZHRWxlbWVudCogY29udGV4
dCwgY29uc3QgUmVuZGVyU3R5bGUqKTsKLWJvb2wgYXBwbHlTVkdLZXJuaW5nKFNWR0NoYXJhY3Rl
ckxheW91dEluZm8mLCBjb25zdCBSZW5kZXJTdHlsZSosIFNWR0xhc3RHbHlwaEluZm8mLCBjb25z
dCBTdHJpbmcmIHVuaWNvZGVTdHJpbmcsIGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lLCBib29sIGlz
VmVydGljYWxUZXh0KTsKIAogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCShyZXZpc2lvbiA2ODg2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDggKzI5NywxMiBAQCBTdHlsZURp
ZmZlcmVuY2UgUmVuZGVyU3R5bGU6OmRpZmYoY29uc3QgCiAgICAgY2hhbmdlZENvbnRleHRTZW5z
aXRpdmVQcm9wZXJ0aWVzID0gQ29udGV4dFNlbnNpdGl2ZVByb3BlcnR5Tm9uZTsKIAogI2lmIEVO
QUJMRShTVkcpCi0gICAgaWYgKG1fc3ZnU3R5bGUgIT0gb3RoZXItPm1fc3ZnU3R5bGUpCi0gICAg
ICAgIHJldHVybiBtX3N2Z1N0eWxlLT5kaWZmKG90aGVyLT5tX3N2Z1N0eWxlLmdldCgpKTsKKyAg
ICBTdHlsZURpZmZlcmVuY2Ugc3ZnQ2hhbmdlID0gU3R5bGVEaWZmZXJlbmNlRXF1YWw7CisgICAg
aWYgKG1fc3ZnU3R5bGUgIT0gb3RoZXItPm1fc3ZnU3R5bGUpIHsKKyAgICAgICAgc3ZnQ2hhbmdl
ID0gbV9zdmdTdHlsZS0+ZGlmZihvdGhlci0+bV9zdmdTdHlsZS5nZXQoKSk7CisgICAgICAgIGlm
IChzdmdDaGFuZ2UgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0KQorICAgICAgICAgICAgcmV0dXJu
IHN2Z0NoYW5nZTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChtX2JveC0+d2lkdGgoKSAhPSBv
dGhlci0+bV9ib3gtPndpZHRoKCkgfHwKQEAgLTQ3NSw2ICs0NzksMTUgQEAgU3R5bGVEaWZmZXJl
bmNlIFJlbmRlclN0eWxlOjpkaWZmKGNvbnN0IAogCiAgICAgaWYgKCh2aXNpYmlsaXR5KCkgPT0g
Q09MTEFQU0UpICE9IChvdGhlci0+dmlzaWJpbGl0eSgpID09IENPTExBUFNFKSkKICAgICAgICAg
cmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgICAgICAgICAgICAgCisjaWYg
RU5BQkxFKFNWRykKKyAgICAvLyBTVkdSZW5kZXJTdHlsZTo6ZGlmZigpIG1pZ2h0IGhhdmUgcmV0
dXJuZWQgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwgZWcuIGlmIGZpbGwgY2hhbmdlcy4KKyAgICAv
LyBJZiBlZy4gdGhlIGZvbnQtc2l6ZSBjaGFuZ2VkIGF0IHRoZSBzYW1lIHRpbWUsIHdlJ3JlIG5v
dCBhbGxvd2VkIHRvIHJldHVybiBTdHlsZURpZmZlcmVuY2VSZXBhaW50LAorICAgIC8vIGJ1dCBo
YXZlIHRvIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQsIHRoYXQncyB3aHkgIHRoaXMgaWYg
YnJhbmNoIGNvbWVzIGFmdGVyIGFsbCBicmFuY2hlcworICAgIC8vIHRoYXQgYXJlIHJlbGV2YW50
IGZvciBTVkcgYW5kIG1pZ2h0IHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQuCisgICAgaWYg
KHN2Z0NoYW5nZSAhPSBTdHlsZURpZmZlcmVuY2VFcXVhbCkKKyAgICAgICAgcmV0dXJuIHN2Z0No
YW5nZTsKKyNlbmRpZgogCiAgICAgLy8gTWFrZSBzdXJlIHRoZXNlIGxlZnQvdG9wL3JpZ2h0L2Jv
dHRvbSBjaGVja3Mgc3RheSBiZWxvdyBhbGwgbGF5b3V0IGNoZWNrcyBhbmQgYWJvdmUKICAgICAv
LyBhbGwgdmlzaWJsZSBjaGVja3MuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiA2ODg3NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTkg
KzM4LDQ1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyU1ZHSW5saW5lVGV4dDo6
UmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiBuLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN0cikg
Ci0gICAgOiBSZW5kZXJUZXh0KG4sIHN0cikKK3N0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IGFwcGx5U1ZHV2hpdGVzcGFjZVJ1bGVzKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyaW5nLCBi
b29sIHByZXNlcnZlV2hpdGVTcGFjZSkKK3sKKyAgICBpZiAocHJlc2VydmVXaGl0ZVNwYWNlKSB7
CisgICAgICAgIC8vIFNwZWM6IFdoZW4geG1sOnNwYWNlPSJwcmVzZXJ2ZSIsIHRoZSBTVkcgdXNl
ciBhZ2VudCB3aWxsIGRvIHRoZSBmb2xsb3dpbmcgdXNpbmcgYQorICAgICAgICAvLyBjb3B5IG9m
IHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIgZGF0YSBjb250ZW50LiBJdCB3aWxsIGNvbnZlcnQgYWxs
IG5ld2xpbmUgYW5kIHRhYgorICAgICAgICAvLyBjaGFyYWN0ZXJzIGludG8gc3BhY2UgY2hhcmFj
dGVycy4gVGhlbiwgaXQgd2lsbCBkcmF3IGFsbCBzcGFjZSBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcK
KyAgICAgICAgLy8gbGVhZGluZywgdHJhaWxpbmcgYW5kIG11bHRpcGxlIGNvbnRpZ3VvdXMgc3Bh
Y2UgY2hhcmFjdGVycy4KKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld1N0cmluZyA9IHN0
cmluZy0+cmVwbGFjZSgnXHQnLCAnICcpOworICAgICAgICBuZXdTdHJpbmcgPSBuZXdTdHJpbmct
PnJlcGxhY2UoJ1xuJywgJyAnKTsKKyAgICAgICAgbmV3U3RyaW5nID0gbmV3U3RyaW5nLT5yZXBs
YWNlKCdccicsICcgJyk7CisgICAgICAgIHJldHVybiBuZXdTdHJpbmcucmVsZWFzZSgpOworICAg
IH0KKworICAgIC8vIFNwZWM6IFdoZW4geG1sOnNwYWNlPSJkZWZhdWx0IiwgdGhlIFNWRyB1c2Vy
IGFnZW50IHdpbGwgZG8gdGhlIGZvbGxvd2luZyB1c2luZyBhCisgICAgLy8gY29weSBvZiB0aGUg
b3JpZ2luYWwgY2hhcmFjdGVyIGRhdGEgY29udGVudC4gRmlyc3QsIGl0IHdpbGwgcmVtb3ZlIGFs
bCBuZXdsaW5lCisgICAgLy8gY2hhcmFjdGVycy4gVGhlbiBpdCB3aWxsIGNvbnZlcnQgYWxsIHRh
YiBjaGFyYWN0ZXJzIGludG8gc3BhY2UgY2hhcmFjdGVycy4KKyAgICAvLyBUaGVuLCBpdCB3aWxs
IHN0cmlwIG9mZiBhbGwgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgY2hhcmFjdGVycy4KKyAg
ICAvLyBUaGVuLCBhbGwgY29udGlndW91cyBzcGFjZSBjaGFyYWN0ZXJzIHdpbGwgYmUgY29uc29s
aWRhdGVkLgorICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdTdHJpbmcgPSBzdHJpbmctPnJlcGxh
Y2UoJ1xuJywgU3RyaW5nSW1wbDo6ZW1wdHkoKSk7CisgICAgbmV3U3RyaW5nID0gbmV3U3RyaW5n
LT5yZXBsYWNlKCdccicsIFN0cmluZ0ltcGw6OmVtcHR5KCkpOworICAgIG5ld1N0cmluZyA9IG5l
d1N0cmluZy0+cmVwbGFjZSgnXHQnLCAnICcpOworICAgIHJldHVybiBuZXdTdHJpbmcucmVsZWFz
ZSgpOworfQorCitSZW5kZXJTVkdJbmxpbmVUZXh0OjpSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUq
IG4sIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyaW5nKQorICAgIDogUmVuZGVyVGV4dChuLCBh
cHBseVNWR1doaXRlc3BhY2VSdWxlcyhzdHJpbmcsIGZhbHNlKSkKIHsKIH0KIAogdm9pZCBSZW5k
ZXJTVkdJbmxpbmVUZXh0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hh
bmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICAKLSAgICAvLyBGSVhNRTogU2hvdWxkIG9wdGltaXpl
IHRoaXMuCi0gICAgLy8gU1ZHIHRleHQgaXMgYWx3YXlzIHRyYW5zZm9ybWVkLgotICAgIGlmIChS
ZWZQdHI8U3RyaW5nSW1wbD4gdGV4dFRvVHJhbnNmb3JtID0gb3JpZ2luYWxUZXh0KCkpCi0gICAg
ICAgIHNldFRleHQodGV4dFRvVHJhbnNmb3JtLnJlbGVhc2UoKSwgdHJ1ZSk7CisKKyAgICBjb25z
dCBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBzdHlsZSgpOworICAgIGlmICghbmV3U3R5bGUgfHwg
bmV3U3R5bGUtPndoaXRlU3BhY2UoKSAhPSBQUkUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghb2xkU3R5bGUgfHwgb2xkU3R5bGUtPndoaXRlU3BhY2UoKSAhPSBQUkUpCisgICAgICAgIHNl
dFRleHQoYXBwbHlTVkdXaGl0ZXNwYWNlUnVsZXMob3JpZ2luYWxUZXh0KCksIHRydWUpLCB0cnVl
KTsKIH0KIAogSW5saW5lVGV4dEJveCogUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y3JlYXRlVGV4dEJv
eCgpCkBAIC04MCwyMCArMTA2LDIyIEBAIGJvb2wgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFj
dGVyU3RhcnQKICAgICBBU1NFUlQocG9zaXRpb24gPj0gMCk7CiAgICAgQVNTRVJUKHBvc2l0aW9u
IDwgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0TGVuZ3RoKCkpKTsKIAorICAgIC8vIEVhY2ggPHRleHRQ
YXRoPiBlbGVtZW50IHN0YXJ0cyBhIG5ldyB0ZXh0IGNodW5rLCByZWdhcmRsZXNzIG9mIGFueSB4
L3kgdmFsdWVzLgorICAgIGlmICghcG9zaXRpb24gJiYgcGFyZW50KCktPmlzU1ZHVGV4dFBhdGgo
KSAmJiAhcHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgaW50
IGN1cnJlbnRQb3NpdGlvbiA9IDA7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1fYXR0cmlidXRlcy5j
aGFyYWN0ZXJEYXRhVmFsdWVzKCkuc2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemUgPSBtX2F0dHJp
YnV0ZXMudGV4dE1ldHJpY3NWYWx1ZXMoKS5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
czo6Q2hhcmFjdGVyRGF0YSYgZGF0YSA9IG1fYXR0cmlidXRlcy5jaGFyYWN0ZXJEYXRhVmFsdWVz
KCkuYXQoaSk7CisgICAgICAgIGNvbnN0IFNWR1RleHRNZXRyaWNzJiBtZXRyaWNzID0gbV9hdHRy
aWJ1dGVzLnRleHRNZXRyaWNzVmFsdWVzKCkuYXQoaSk7CiAKICAgICAgICAgLy8gV2UgZm91bmQg
dGhlIGRlc2lyZWQgY2hhcmFjdGVyLgogICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uID09IHBv
c2l0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN0eWxlKCkt
PnN2Z1N0eWxlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXMueVZhbHVl
cygpLmF0KHBvc2l0aW9uKSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgp
OwotCi0gICAgICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzLnhWYWx1ZXMoKS5hdChwb3NpdGlv
bikgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2F0dHJpYnV0ZXMueFZhbHVlcygpLmF0KHBvc2l0aW9uKSAhPSBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpCisgICAgICAgICAgICAgICAgfHwgbV9hdHRyaWJ1
dGVzLnlWYWx1ZXMoKS5hdChwb3NpdGlvbikgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVt
cHR5VmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSBkYXRh
LnNwYW5zQ2hhcmFjdGVyczsKKyAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IG1ldHJpY3MubGVu
Z3RoKCk7CiAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gPiBwb3NpdGlvbikKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTEwMiwxMCArMTMwLDYxIEBAIGJvb2wgUmVuZGVyU1ZHSW5s
aW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnQKICAgICAvLyBUaGF0IG1lYW5zIHRoZSBwcmV2aW91cyBj
aGFyYWN0ZXIgZGF0YSBkZXNjcmliZWQgYSBzaW5nbGUgZ2x5cGgsIGNvbnNpc3Rpbmcgb2YgbXVs
dGlwbGUgdW5pY29kZSBjaGFyYWN0ZXJzLgogICAgIC8vIFRoZSBjb25zZXF1ZW5jZSBpcyB0aGF0
IHRoZSBkZXNpcmVkIGNoYXJhY3RlciBkb2VzIG5vdCBkZWZpbmUgYSBuZXcgYWJzb2x1dGUgeC95
IHBvc2l0aW9uLCBldmVuIGlmIHByZXNlbnQgaW4gdGhlIHgveSB0ZXN0LgogICAgIC8vIFRoaXMg
Y29kZSBpcyB0ZXN0ZWQgYnkgc3ZnL1czQy1TVkctMS4xL3RleHQtdGV4dC0wNi10LnN2ZyAoYW5k
IGRlc2NyaWJlZCBpbiBkZXRhaWwsIHdoeSB0aGlzIGluZmx1ZW5jZXMgY2h1bmsgZGV0ZWN0aW9u
KS4KLSAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9uID4gcG9zaXRpb24pOwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNWR0lubGluZVRleHQ6OnBvc2l0aW9u
Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIGlmICghZmlyc3RUZXh0Qm94
KCkgfHwgdGV4dExlbmd0aCgpID09IDApCisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9z
aXRpb24oMCwgRE9XTlNUUkVBTSk7CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5z
dHlsZSgpOworICAgIEFTU0VSVChzdHlsZSk7CisgICAgaW50IGJhc2VsaW5lID0gc3R5bGUtPmZv
bnQoKS5hc2NlbnQoKTsKKworICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSB0aGlz
LT5jb250YWluaW5nQmxvY2soKTsKKyAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrKTsKKworICAg
IC8vIE1hcCBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBwb2ludCwgYXMgdGhlIGNoYXJhY3RlciBv
cmlnaW5zIHN0b3JlZCBpbiB0aGUgdGV4dCBmcmFnbWVudHMgdXNlIGFic29sdXRlIGNvb3JkaW5h
dGVzLgorICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludChwb2ludCk7CisgICAgYWJzb2x1dGVQ
b2ludC5tb3ZlKGNvbnRhaW5pbmdCbG9jay0+eCgpLCBjb250YWluaW5nQmxvY2stPnkoKSk7CisK
KyAgICBmbG9hdCBjbG9zZXN0RGlzdGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
bWF4KCk7CisgICAgZmxvYXQgY2xvc2VzdERpc3RhbmNlUG9zaXRpb24gPSAwOworICAgIGNvbnN0
IFNWR1RleHRGcmFnbWVudCogY2xvc2VzdERpc3RhbmNlRnJhZ21lbnQgPSAwOworICAgIFNWR0lu
bGluZVRleHRCb3gqIGNsb3Nlc3REaXN0YW5jZUJveCA9IDA7CisKKyAgICBmb3IgKElubGluZVRl
eHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3go
KSkgeworICAgICAgICBBU1NFUlQoYm94LT5pc1NWR0lubGluZVRleHRCb3goKSk7CisgICAgICAg
IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94
Kj4oYm94KTsKKyAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9IHRl
eHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKworICAgICAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRz
U2l6ZSA9IGZyYWdtZW50cy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTVkdUZXh0RnJh
Z21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICAgICAgRmxvYXRSZWN0
IGZyYWdtZW50UmVjdChmcmFnbWVudC54LCBmcmFnbWVudC55IC0gYmFzZWxpbmUsIGZyYWdtZW50
LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpOworICAgICAgICAgICAgaWYgKCFmcmFnbWVudC50cmFu
c2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZyYWdt
ZW50LnRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7CisKKyAgICAgICAgICAgIGZsb2F0
IGRpc3RhbmNlID0gcG93ZihmcmFnbWVudFJlY3QueCgpIC0gYWJzb2x1dGVQb2ludC54KCksIDIp
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93ZihmcmFnbWVudFJlY3QueSgpICsg
ZnJhZ21lbnRSZWN0LmhlaWdodCgpIC8gMiAtIGFic29sdXRlUG9pbnQueSgpLCAyKTsKKworICAg
ICAgICAgICAgaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7CisgICAgICAgICAgICAg
ICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgICAgICAgICAgY2xvc2VzdERp
c3RhbmNlQm94ID0gdGV4dEJveDsKKyAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VGcmFn
bWVudCA9ICZmcmFnbWVudDsKKyAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VQb3NpdGlv
biA9IGZyYWdtZW50UmVjdC54KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIWNsb3Nlc3REaXN0YW5jZUZyYWdtZW50KQorICAgICAgICByZXR1cm4gY3JlYXRl
VmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOworCisgICAgaW50IG9mZnNldCA9IGNsb3Nl
c3REaXN0YW5jZUJveC0+b2Zmc2V0Rm9yUG9zaXRpb25JbkZyYWdtZW50KCpjbG9zZXN0RGlzdGFu
Y2VGcmFnbWVudCwgYWJzb2x1dGVQb2ludC54KCkgLSBjbG9zZXN0RGlzdGFuY2VQb3NpdGlvbiwg
dHJ1ZSk7CisgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBjbG9zZXN0
RGlzdGFuY2VCb3gtPnN0YXJ0KCksIG9mZnNldCA+IDAgPyBWUF9VUFNUUkVBTV9JRl9QT1NTSUJM
RSA6IERPV05TVFJFQU0pOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lvbiA2
ODg3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIFNWR0lubGluZVRleHRCb3g7CisKIGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQgOiBw
dWJsaWMgUmVuZGVyVGV4dCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dChOb2Rl
KiwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPik7CiAKICAgICBib29sIGNoYXJhY3RlclN0YXJ0c05l
d1RleHRDaHVuayhpbnQgcG9zaXRpb24pIGNvbnN0OworCisgICAgU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXMmIGxheW91dEF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBj
b25zdCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgbGF5b3V0QXR0cmlidXRlcygpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgIHZvaWQgc3RvcmVMYXlvdXRBdHRyaWJ1dGVzKGNv
bnN0IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKSB7IG1fYXR0cmlidXRlcyA9
IGF0dHJpYnV0ZXM7IH0KIAogcHJpdmF0ZToKQEAgLTUwLDYgKzU1LDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzU1ZHSW5saW5lVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAorICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50
UG9pbnQmKTsKICAgICB2aXJ0dWFsIEludFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94Kiwg
aW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwogICAgIHZp
cnR1YWwgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgdmlydHVhbCBJbmxp
bmVUZXh0Qm94KiBjcmVhdGVUZXh0Qm94KCk7CkBAIC01Nyw4ICs2MywyMiBAQCBwcml2YXRlOgog
ICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKIH07CiAKK2lubGluZSBS
ZW5kZXJTVkdJbmxpbmVUZXh0KiB0b1JlbmRlclNWR0lubGluZVRleHQoUmVuZGVyT2JqZWN0KiBv
YmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR0lubGluZVRleHQo
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR0lubGluZVRleHQqPihvYmplY3Qp
OwogfQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKK2lubGluZSBjb25zdCBSZW5kZXJTVkdJbmxp
bmVUZXh0KiB0b1JlbmRlclNWR0lubGluZVRleHQoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR0lubGluZVRleHQoKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR0lubGluZVRleHQqPihvYmplY3Qp
OworfQogCi0jZW5kaWYgLy8gIVJlbmRlclNWR0lubGluZVRleHRfaAorLy8gVGhpcyB3aWxsIGNh
dGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclNWR0lu
bGluZVRleHQoY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCopOworCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoU1ZHKQorI2VuZGlmIC8vIFJlbmRlclNWR0lubGluZVRleHRfaApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gNjg4NzYpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisjaW5jbHVkZSAiVmlz
aWJsZVBvc2l0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODQsNiArODUsNyBA
QCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXNJblBhcmVudHMgPSB0cnVlOwogICAgIH0KIAorICAgIC8vIFBlcmZvcm0gU1ZHIHRleHQg
bGF5b3V0IHBoYXNlIG9uZSAoc2VlIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlciBmb3Ig
ZGV0YWlscykuCiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyIGxheW91dEF0dHJp
YnV0ZXNCdWlsZGVyOwogICAgIGxheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmJ1aWxkTGF5b3V0QXR0
cmlidXRlc0ZvclRleHRTdWJ0cmVlKHRoaXMpOwogCkBAIC0xNTMsNiArMTU1LDIzIEBAIGJvb2wg
UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGVudHMpCit7CisgICAgUm9vdElubGluZUJveCogcm9vdEJv
eCA9IGZpcnN0Um9vdEJveCgpOworICAgIGlmICghcm9vdEJveCkKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RSRUFNKTsKKworICAgIEFTU0VSVChyb290Qm94
LT5pc1NWR1Jvb3RJbmxpbmVCb3goKSk7CisgICAgQVNTRVJUKCFyb290Qm94LT5uZXh0Um9vdEJv
eCgpKTsKKyAgICBBU1NFUlQoY2hpbGRyZW5JbmxpbmUoKSk7CisKKyAgICBJbmxpbmVCb3gqIGNs
b3Nlc3RCb3ggPSBzdGF0aWNfY2FzdDxTVkdSb290SW5saW5lQm94Kj4ocm9vdEJveCktPmNsb3Nl
c3RMZWFmQ2hpbGRGb3JQb3NpdGlvbihwb2ludEluQ29udGVudHMpOworICAgIGlmICghY2xvc2Vz
dEJveCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RSRUFN
KTsKKworICAgIHJldHVybiBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50
KEludFBvaW50KHBvaW50SW5Db250ZW50cy54KCksIGNsb3Nlc3RCb3gtPm1feSkpOworfQorCiB2
b2lkIFJlbmRlclNWR1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRz
KQogewogICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHN0cm9rZUJvdW5kaW5n
Qm94KCkpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAkocmV2aXNp
b24gNjg4NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5
LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIG5vZGVB
dEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOwogCiAgICAg
dmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDY4ODc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMjgg
QEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3gu
aCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordm9pZCBTVkdJbmxpbmVGbG93Qm94OjpwYWludFNl
bGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8pCit7CisgICAgQVNTRVJUKHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7CisgICAgQVNTRVJUKCFwYWludEluZm8uY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKTsKKworICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWlu
dEluZm8pOworICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzU1ZH
SW5saW5lVGV4dEJveCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJv
eCo+KGNoaWxkKS0+cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKGNoaWxkUGFpbnRJbmZvKTsKKyAg
ICAgICAgZWxzZSBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lRmxvd0JveCgpKQorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8U1ZHSW5saW5lRmxvd0JveCo+KGNoaWxkKS0+cGFpbnRTZWxlY3Rpb25CYWNr
Z3JvdW5kKGNoaWxkUGFpbnRJbmZvKTsKKyAgICB9Cit9CisKIHZvaWQgU1ZHSW5saW5lRmxvd0Jv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQogewogICAgIEFTU0VSVChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxlY3Rpb24pOwpAQCAtNDIsOCArNjAsMTIgQEAgdm9pZCBTVkdJbmxp
bmVGbG93Qm94OjpwYWludChQYWludEluZm8mIAogICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQt
PnNhdmUoKTsKIAogICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdD
b250ZW50KGJveFJlbmRlcmVyLCBjaGlsZFBhaW50SW5mbykpIHsKLSAgICAgICAgZm9yIChJbmxp
bmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9u
TGluZSgpKQorICAgICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGls
ZC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpCisgICAgICAgICAgICAgICAgY29tcHV0ZVRleHRNYXRj
aE1hcmtlclJlY3RGb3JSZW5kZXJlcih0b1JlbmRlclNWR0lubGluZVRleHQoc3RhdGljX2Nhc3Q8
U1ZHSW5saW5lVGV4dEJveCo+KGNoaWxkKS0+dGV4dFJlbmRlcmVyKCkpKTsKKwogICAgICAgICAg
ICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJbmZvLCAwLCAwKTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQoYm94UmVuZGVy
ZXIsIGNoaWxkUGFpbnRJbmZvLCBwYWludEluZm8uY29udGV4dCk7CkBAIC01OCw2ICs4MCw2NCBA
QCBJbnRSZWN0IFNWR0lubGluZUZsb3dCb3g6OmNhbGN1bGF0ZUJvdW5kCiAgICAgcmV0dXJuIGNo
aWxkUmVjdDsKIH0KIAordm9pZCBTVkdJbmxpbmVGbG93Qm94Ojpjb21wdXRlVGV4dE1hdGNoTWFy
a2VyUmVjdEZvclJlbmRlcmVyKFJlbmRlclNWR0lubGluZVRleHQqIHRleHRSZW5kZXJlcikKK3sK
KyAgICBBU1NFUlQodGV4dFJlbmRlcmVyKTsKKworICAgIE5vZGUqIG5vZGUgPSB0ZXh0UmVuZGVy
ZXItPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dFJlbmRlcmVyLT5zdHls
ZSgpOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0ZXh0
UmVuZGVyZXItPmRvY3VtZW50KCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJz
ID0gZG9jdW1lbnQtPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUodGV4dFJlbmRlcmVyLT5ub2Rl
KCkpOworCisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPjo6aXRlcmF0b3IgbWFya2VyRW5kID0g
bWFya2Vycy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxEb2N1bWVudE1hcmtlcj46Oml0ZXJhdG9y
IG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigpOyBtYXJrZXJJdCAhPSBtYXJrZXJFbmQ7ICsrbWFy
a2VySXQpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9ICptYXJrZXJJ
dDsKKworICAgICAgICAvLyBTVkcgaXMgb25seSBpbnRlcmVzc3RlZCBpbiB0aGUgVGV4dE1hdGNo
IG1hcmtlciwgZm9yIG5vdy4KKyAgICAgICAgaWYgKG1hcmtlci50eXBlICE9IERvY3VtZW50TWFy
a2VyOjpUZXh0TWF0Y2gpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBGbG9hdFJl
Y3QgbWFya2VyUmVjdDsKKyAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0UmVu
ZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewor
ICAgICAgICAgICAgQVNTRVJUKGJveC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpOworICAgICAgICAg
ICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRC
b3gqPihib3gpOworCisgICAgICAgICAgICBpbnQgbWFya2VyU3RhcnRQb3NpdGlvbiA9IG1heDxp
bnQ+KG1hcmtlci5zdGFydE9mZnNldCAtIHRleHRCb3gtPnN0YXJ0KCksIDApOworICAgICAgICAg
ICAgaW50IG1hcmtlckVuZFBvc2l0aW9uID0gbWluPGludD4obWFya2VyLmVuZE9mZnNldCAtIHRl
eHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKTsKKworICAgICAgICAgICAgaWYgKG1hcmtl
clN0YXJ0UG9zaXRpb24gPj0gbWFya2VyRW5kUG9zaXRpb24pCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOworICAg
ICAgICAgICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOworCisgICAgICAgICAgICBjb25z
dCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdt
ZW50cygpOworICAgICAgICAgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBmcmFnbWVu
dHMuc2l6ZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFn
bWVudHNTaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworCisgICAgICAgICAgICAgICAgZnJhZ21lbnRT
dGFydFBvc2l0aW9uID0gbWFya2VyU3RhcnRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICBmcmFn
bWVudEVuZFBvc2l0aW9uID0gbWFya2VyRW5kUG9zaXRpb247CisgICAgICAgICAgICAgICAgaWYg
KCF0ZXh0Qm94LT5tYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZy
YWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24pKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBm
cmFnbWVudFJlY3QgPSB0ZXh0Qm94LT5zZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdt
ZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24sIHN0eWxlKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWZyYWdtZW50LnRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisg
ICAgICAgICAgICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZyYWdtZW50LnRyYW5zZm9ybS5tYXBS
ZWN0KGZyYWdtZW50UmVjdCk7CisKKyAgICAgICAgICAgICAgICBtYXJrZXJSZWN0LnVuaXRlKGZy
YWdtZW50UmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkb2N1bWVu
dC0+bWFya2VycygpLT5zZXRSZW5kZXJlZFJlY3RGb3JNYXJrZXIobm9kZSwgbWFya2VyLCB0ZXh0
UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQobWFya2VyUmVjdCkuZW5jbG9zaW5nQm91bmRp
bmdCb3goKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0Jv
eC5oCShyZXZpc2lvbiA2ODg3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVG
bG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0OworCiBjbGFzcyBTVkdJbmxpbmVG
bG93Qm94IDogcHVibGljIElubGluZUZsb3dCb3ggewogcHVibGljOgogICAgIFNWR0lubGluZUZs
b3dCb3goUmVuZGVyT2JqZWN0KiBvYmopCkBAIC0zNywxMyArMzksMTYgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmVGbG93Qm94KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgaW50IHZpcnR1YWxMb2dpY2FsSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0OyB9CiAgICAgdm9pZCBzZXRMb2dpY2FsSGVp
Z2h0KGludCBoKSB7IG1fbG9naWNhbEhlaWdodCA9IGg7IH0KIAorICAgIHZvaWQgcGFpbnRTZWxl
Y3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgY2FsY3VsYXRl
Qm91bmRhcmllcygpIGNvbnN0OwotICAgIHZvaWQgbGF5b3V0Rmxvd0JveCgpOworCisgICAgc3Rh
dGljIHZvaWQgY29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcihSZW5kZXJTVkdJ
bmxpbmVUZXh0Kik7CiAKIHByaXZhdGU6CiAgICAgaW50IG1fbG9naWNhbEhlaWdodDsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDY4
ODc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxNjYgKzI4LDE3OCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJTVkdU
ZXh0TGF5b3V0VXRpbGl0aWVzLmgiCiAKLSNpbmNsdWRlIDxmbG9hdC5oPgotCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0lubGluZVRleHRCb3g6OlNW
R0lubGluZVRleHRCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgOiBJbmxpbmVUZXh0Qm94
KG9iamVjdCkKLSAgICAsIG1fbG9naWNhbEhlaWdodCgwKQotICAgICwgbV9wYWludGluZ1Jlc291
cmNlKDApCisgICAgLCBtX2hlaWdodCgwKQogICAgICwgbV9wYWludGluZ1Jlc291cmNlTW9kZShB
cHBseVRvRGVmYXVsdE1vZGUpCisgICAgLCBtX3N0YXJ0c05ld1RleHRDaHVuayhmYWxzZSkKKyAg
ICAsIG1fcGFpbnRpbmdSZXNvdXJjZSgwKQogewogfQogCi1TVkdSb290SW5saW5lQm94KiBTVkdJ
bmxpbmVUZXh0Qm94OjpzdmdSb290SW5saW5lQm94KCkgY29uc3QKK2ludCBTVkdJbmxpbmVUZXh0
Qm94OjpvZmZzZXRGb3JQb3NpdGlvbihpbnQsIGJvb2wpIGNvbnN0CiB7Ci0gICAgLy8gRmluZCBh
c3NvY2lhdGVkIHJvb3QgaW5saW5lIGJveAotICAgIElubGluZUZsb3dCb3gqIHBhcmVudEJveCA9
IHBhcmVudCgpOworICAgIC8vIFNWRyBkb2Vzbid0IHVzZSB0aGUgc3RhbmRhcmQgb2Zmc2V0IDwt
PiBwb3NpdGlvbiBzZWxlY3Rpb24gc3lzdGVtLCBhcyBpdCdzIG5vdCBzdWl0YWJsZSBmb3IgU1ZH
cyBjb21wbGV4IG5lZWRzLgorICAgIC8vIHZlcnRpY2FsIHRleHQgc2VsZWN0aW9uLCBpbmxpbmUg
Ym94ZXMgc3Bhbm5pbmcgbXVsdGlwbGUgbGluZXMgKGNvbnRyYXJ5IHRvIEhUTUwsIGV0Yy4pCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICB3aGlsZSAo
cGFyZW50Qm94ICYmICFwYXJlbnRCb3gtPmlzUm9vdElubGluZUJveCgpKQotICAgICAgICBwYXJl
bnRCb3ggPSBwYXJlbnRCb3gtPnBhcmVudCgpOworaW50IFNWR0lubGluZVRleHRCb3g6Om9mZnNl
dEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBm
bG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICBS
ZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0aGlzLT50ZXh0UmVuZGVyZXIoKTsKKyAgICBBU1NF
UlQodGV4dFJlbmRlcmVyKTsKIAotICAgIEFTU0VSVChwYXJlbnRCb3gpOwotICAgIEFTU0VSVChw
YXJlbnRCb3gtPmlzUm9vdElubGluZUJveCgpKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0
ZXh0UmVuZGVyZXItPnN0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIFRleHRSdW4g
dGV4dFJ1bihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFnbWVudCkpOwogCi0gICAgaWYgKCFw
YXJlbnRCb3gtPmlzU1ZHUm9vdElubGluZUJveCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAv
LyBFdmVudHVhbGx5IGhhbmRsZSBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiLgorICAg
IC8vIEZJWE1FOiBIYW5kbGUgdmVydGljYWwgdGV4dC4KKyAgICBpZiAoIWZyYWdtZW50LnRyYW5z
Zm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIHRleHRSdW4uc2V0SG9yaXpvbnRhbEdseXBoU3Ry
ZXRjaChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZyYWdtZW50LnRyYW5zZm9ybS54U2NhbGUoKSkp
OwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1Jvb3RJbmxpbmVCb3gqPihwYXJlbnRCb3gp
OworICAgIHJldHVybiBmcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQgLSBzdGFydCgpICsgc3R5
bGUtPmZvbnQoKS5vZmZzZXRGb3JQb3NpdGlvbih0ZXh0UnVuLCBwb3NpdGlvbiwgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpOwogfQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6Om1lYXN1cmVDaGFyYWN0
ZXIoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcG9zaXRpb24sIGludCYgY2hhcnNDb25zdW1lZCwg
U3RyaW5nJiBnbHlwaE5hbWUsIFN0cmluZyYgdW5pY29kZVN0cmluZywgZmxvYXQmIGdseXBoV2lk
dGgsIGZsb2F0JiBnbHlwaEhlaWdodCkgY29uc3QKK2ludCBTVkdJbmxpbmVUZXh0Qm94Ojpwb3Np
dGlvbkZvck9mZnNldChpbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHN0eWxlKTsKKyAgICAvLyBT
VkcgZG9lc24ndCB1c2UgdGhlIG9mZnNldCA8LT4gcG9zaXRpb24gc2VsZWN0aW9uIHN5c3RlbS4g
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICBpbnQg
b2Zmc2V0ID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGVuZCgpIC0gcG9zaXRpb24gOiBz
dGFydCgpICsgcG9zaXRpb247Ci0gICAgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGUgPSBsZW4oKSAt
IHBvc2l0aW9uIC0gMTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHRSZW5kZXJl
cigpLT5jaGFyYWN0ZXJzKCk7CitGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9u
UmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQg
c3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSogc3R5bGUpCit7Cisg
ICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbik7CiAKICAgICBjb25zdCBGb250
JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKLSAgICBnbHlwaFdpZHRoID0gZm9udC5mbG9hdFdpZHRo
KHN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KGNoYXJhY3RlcnMgKyBvZmZzZXQsIDEsIHN0eWxl
LCB0aGlzKSwgZXh0cmFDaGFyc0F2YWlsYWJsZSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsK
LSAgICBnbHlwaEhlaWdodCA9IGZvbnQuaGVpZ2h0KCk7Ci0KLSAgICAvLyBUaGUgdW5pY29kZVN0
cmluZyAvIGdseXBoTmFtZSBwYWlyIGlzIG5lZWRlZCBmb3Iga2VybmluZyBjYWxjdWxhdGlvbnMu
Ci0gICAgdW5pY29kZVN0cmluZyA9IFN0cmluZyhjaGFyYWN0ZXJzICsgb2Zmc2V0LCBjaGFyc0Nv
bnN1bWVkKTsKKyAgICBGbG9hdFBvaW50IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQu
eSAtIGZvbnQuYXNjZW50KCkpOworICAgIHJldHVybiBmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0
KGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZyYWdtZW50KSwgdGV4dE9yaWdpbiwgZnJhZ21lbnQu
aGVpZ2h0LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiB9CiAKLWludCBTVkdJbmxpbmVU
ZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbihpbnQgeENvb3JkaW5hdGUsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CitJbnRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJl
Y3QoaW50LCBpbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCiB7Ci0gICAg
QVNTRVJUKCFtX2N1cnJlbnRDaHVua1BhcnQuaXNWYWxpZCgpKTsKLSAgICBmbG9hdCB4ID0geENv
b3JkaW5hdGU7CisgICAgaW50IGJveFN0YXJ0ID0gc3RhcnQoKTsKKyAgICBzdGFydFBvc2l0aW9u
ID0gbWF4KHN0YXJ0UG9zaXRpb24gLSBib3hTdGFydCwgMCk7CisgICAgZW5kUG9zaXRpb24gPSBt
aW4oZW5kUG9zaXRpb24gLSBib3hTdGFydCwgc3RhdGljX2Nhc3Q8aW50PihsZW4oKSkpOworICAg
IGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQorICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwogCi0gICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdGhpcy0+dGV4dFJlbmRlcmVy
KCk7Ci0gICAgQVNTRVJUKHRleHRSZW5kZXJlcik7CisgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRl
eHRSZW5kZXJlcigpOworICAgIEFTU0VSVCh0ZXh0KTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHRleHRSZW5kZXJlci0+c3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0
LT5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZSk7CiAKLSAgICBSZW5kZXJCbG9jayogY29udGFp
bmluZ0Jsb2NrID0gdGV4dFJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKLSAgICBBU1NFUlQo
Y29udGFpbmluZ0Jsb2NrKTsKLQotICAgIC8vIE1vdmUgaW5jb21pbmcgcmVsYXRpdmUgeCBwb3Np
dGlvbiB0byBhYnNvbHV0ZSBwb3NpdGlvbiwgYXMgdGhlIGNoYXJhY3RlciBvcmlnaW5zIHN0b3Jl
ZCBpbiB0aGUgY2h1bmsgcGFydHMgdXNlIGFic29sdXRlIGNvb3JkaW5hdGVzCi0gICAgeCArPSBj
b250YWluaW5nQmxvY2stPngoKTsKLQotICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdGV4dCBjaHVu
ayBwYXJ0IGlzIGhpdAotICAgIFNWR1RleHRDaHVua1BhcnQgaGl0UGFydDsKKyAgICBGbG9hdFJl
Y3Qgc2VsZWN0aW9uUmVjdDsKKyAgICBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKKyAg
ICBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAKLSAgICBjb25zdCBWZWN0b3I8U1ZHVGV4
dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3ZnVGV4dENodW5rUGFydHMuZW5k
KCk7Ci0gICAgZm9yIChWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9zdmdUZXh0Q2h1bmtQYXJ0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCA9ICppdDsKKyAgICB1bnNpZ25lZCB0ZXh0
RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IG1fdGV4dEZyYWdtZW50cy5hdChpKTsKKworICAgICAg
ICBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgICAgICBmcmFnbWVu
dEVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb247CisgICAgICAgIGlmICghbWFwU3RhcnRFbmRQb3Np
dGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0
aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIC8vIENoZWNrIHdoZXRoZXIgd2UncmUgcGFzdCB0aGUgaGl0IHBhcnQuCi0gICAgICAgIGlm
ICh4IDwgcGFydC5maXJzdENoYXJhY3Rlci0+eCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBGbG9hdFJlY3QgZnJhZ21lbnRSZWN0ID0gc2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChm
cmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uLCBzdHls
ZSk7CisgICAgICAgIGlmICghZnJhZ21lbnQudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAg
ICAgICAgIGZyYWdtZW50UmVjdCA9IGZyYWdtZW50LnRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50
UmVjdCk7CiAKLSAgICAgICAgaGl0UGFydCA9IHBhcnQ7CisgICAgICAgIHNlbGVjdGlvblJlY3Qu
dW5pdGUoZnJhZ21lbnRSZWN0KTsKICAgICB9CiAKLSAgICAvLyBJZiB3ZSBkaWQgbm90IGhpdCBh
bnl0aGluZywganVzdCBleGl0LgotICAgIGlmICghaGl0UGFydC5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgLy8gQmVmb3JlIGNhbGxpbmcgRm9udDo6b2Zmc2V0Rm9yUG9zaXRp
b24oKSwgc3VidHJhY3QgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIK
LSAgICAvLyBpbiB0aGUgaGl0IHRleHQgY2h1bmsgcGFydCwgdG8gcGFzcyBpbiBjb29yZGluYXRl
cywgd2hpY2ggYXJlIHJlbGF0aXZlIHRvIHRoZSB0ZXh0IGNodW5rIHBhcnQsIGFzCi0gICAgLy8g
Y29uc3RydWN0VGV4dFJ1bigpIG9ubHkgYnVpbGRzIGEgVGV4dFJ1biBmb3IgdGhlIGN1cnJlbnQg
Y2h1bmsgcGFydCwgbm90IHRoZSB3aG9sZSBpbmxpbmUgdGV4dCBib3guCi0gICAgeCAtPSBoaXRQ
YXJ0LmZpcnN0Q2hhcmFjdGVyLT54OworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNlbGVj
dGlvblJlY3QpOworfQogCi0gICAgbV9jdXJyZW50Q2h1bmtQYXJ0ID0gaGl0UGFydDsKLSAgICBU
ZXh0UnVuIHRleHRSdW4oY29uc3RydWN0VGV4dFJ1bihzdHlsZSkpOwotICAgIG1fY3VycmVudENo
dW5rUGFydCA9IFNWR1RleHRDaHVua1BhcnQoKTsKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFp
bnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIEFTU0VS
VChwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkpKTsKKyAgICBBU1NF
UlQocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKKyAgICBBU1NFUlQodHJ1bmNhdGlvbigpID09
IGNOb1RydW5jYXRpb24pOwogCi0gICAgLy8gRXZlbnR1YWxseSBoYW5kbGUgbGVuZ3RoQWRqdXN0
PSJzcGFjaW5nQW5kR2x5cGhzIi4KLSAgICAvLyBGSVhNRTogTmVlZCB0byByZXZpc2l0IHRoZSB3
aG9sZSBvZmZzZXRGb3JQb3NpdGlvbiBjb25jZXB0IGZvciB2ZXJ0aWNhbCB0ZXh0IHNlbGVjdGlv
bi4KLSAgICBpZiAoIW1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCi0gICAgICAg
IHRleHRSdW4uc2V0SG9yaXpvbnRhbEdseXBoU3RyZXRjaChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5hKCkpKTsKKyAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUo
KS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVy
biBoaXRQYXJ0Lm9mZnNldCArIHN0eWxlLT5mb250KCkub2Zmc2V0Rm9yUG9zaXRpb24odGV4dFJ1
biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQorICAgIFJlbmRlck9iamVjdCogcGFyZW50
UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBBU1NFUlQocGFyZW50UmVuZGVy
ZXIpOworICAgIEFTU0VSVCghcGFyZW50UmVuZGVyZXItPmRvY3VtZW50KCktPnByaW50aW5nKCkp
OwogCi1pbnQgU1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50KSBjb25zdAot
ewotICAgIC8vIFNWRyBkb2Vzbid0IHVzZSB0aGUgb2Zmc2V0IDwtPiBwb3NpdGlvbiBzZWxlY3Rp
b24gc3lzdGVtLiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0K
KyAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UncmUgc2VsZWN0ZWQuCisgICAgYm9v
bCBwYWludFNlbGVjdGVkVGV4dE9ubHkgPSBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNl
bGVjdGlvbjsKKyAgICBib29sIGhhc1NlbGVjdGlvbiA9IHNlbGVjdGlvblN0YXRlKCkgIT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOworICAgIGlmICghaGFzU2VsZWN0aW9uIHx8IHBhaW50
U2VsZWN0ZWRUZXh0T25seSkKKyAgICAgICAgcmV0dXJuOwogCi1GbG9hdFJlY3QgU1ZHSW5saW5l
VGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRDaHVua1BhcnQoY29uc3QgU1ZHVGV4dENodW5r
UGFydCYgcGFydCwgaW50IHBhcnRTdGFydFBvcywgaW50IHBhcnRFbmRQb3MsIFJlbmRlclN0eWxl
KiBzdHlsZSkKLXsKLSAgICAvLyBNYXAgc3RhcnRQb3MvZW5kUG9zIHBvc2l0aW9ucyBpbnRvIGNo
dW5rIHBhcnQKLSAgICBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9DaHVua1BhcnRDb29yZGluYXRl
cyhwYXJ0U3RhcnRQb3MsIHBhcnRFbmRQb3MsIHBhcnQpOworICAgIENvbG9yIGJhY2tncm91bmRD
b2xvciA9IHJlbmRlcmVyKCktPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworICAgIGlmICgh
YmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSB8fCAhYmFja2dyb3VuZENvbG9yLmFscGhhKCkpCisg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChwYXJ0U3RhcnRQb3MgPj0gcGFydEVuZFBvcykKLSAg
ICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhcmVu
dFJlbmRlcmVyLT5zdHlsZSgpOworICAgIEFTU0VSVChzdHlsZSk7CiAKLSAgICAvLyBTZXQgY3Vy
cmVudCBjaHVuayBwYXJ0LCBzbyBjb25zdHJ1Y3RUZXh0UnVuKCkgd29ya3MgcHJvcGVybHkuCi0g
ICAgbV9jdXJyZW50Q2h1bmtQYXJ0ID0gcGFydDsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOwogCi0g
ICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7Ci0gICAgVmVjdG9yPFNWR0NoYXI+
Ojpjb25zdF9pdGVyYXRvciBjaGFyYWN0ZXIgPSBwYXJ0LmZpcnN0Q2hhcmFjdGVyOwotICAgIEZs
b2F0UG9pbnQgdGV4dE9yaWdpbihjaGFyYWN0ZXItPngsIGNoYXJhY3Rlci0+eSAtIGZvbnQuYXNj
ZW50KCkpOworICAgIGJvb2wgaGFzRmlsbCA9IHN2Z1N0eWxlLT5oYXNGaWxsKCk7CisgICAgYm9v
bCBoYXNTdHJva2UgPSBzdmdTdHlsZS0+aGFzU3Ryb2tlKCk7CiAKLSAgICBGbG9hdFJlY3QgcGFy
dFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlKSwg
dGV4dE9yaWdpbiwgcGFydC5oZWlnaHQsIHBhcnRTdGFydFBvcywgcGFydEVuZFBvcykpOwotICAg
IG1fY3VycmVudENodW5rUGFydCA9IFNWR1RleHRDaHVua1BhcnQoKTsKKyAgICBSZW5kZXJTdHls
ZSogc2VsZWN0aW9uU3R5bGUgPSBzdHlsZTsKKyAgICBpZiAoaGFzU2VsZWN0aW9uKSB7CisgICAg
ICAgIHNlbGVjdGlvblN0eWxlID0gcGFyZW50UmVuZGVyZXItPmdldENhY2hlZFBzZXVkb1N0eWxl
KFNFTEVDVElPTik7CisgICAgICAgIGlmIChzZWxlY3Rpb25TdHlsZSkgeworICAgICAgICAgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1NlbGVjdGlvblN0eWxlID0gc2VsZWN0aW9uU3R5bGUt
PnN2Z1N0eWxlKCk7CisgICAgICAgICAgICBBU1NFUlQoc3ZnU2VsZWN0aW9uU3R5bGUpOwogCi0g
ICAgcmV0dXJuIGNoYXJhY3Rlci0+Y2hhcmFjdGVyVHJhbnNmb3JtKCkubWFwUmVjdChwYXJ0UmVj
dCk7Ci19CisgICAgICAgICAgICBpZiAoIWhhc0ZpbGwpCisgICAgICAgICAgICAgICAgaGFzRmls
bCA9IHN2Z1NlbGVjdGlvblN0eWxlLT5oYXNGaWxsKCk7CisgICAgICAgICAgICBpZiAoIWhhc1N0
cm9rZSkKKyAgICAgICAgICAgICAgICBoYXNTdHJva2UgPSBzdmdTZWxlY3Rpb25TdHlsZS0+aGFz
U3Ryb2tlKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2VsZWN0aW9uU3R5bGUgPSBz
dHlsZTsKKyAgICB9CiAKLUludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdChp
bnQsIGludCwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQotewotICAgIEFTU0VSVCghbV9jdXJy
ZW50Q2h1bmtQYXJ0LmlzVmFsaWQoKSk7CisgICAgaW50IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uOworICAgIHNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsK
IAotICAgIGludCBib3hTdGFydCA9IHN0YXJ0KCk7Ci0gICAgc3RhcnRQb3MgPSBtYXgoc3RhcnRQ
b3MgLSBib3hTdGFydCwgMCk7Ci0gICAgZW5kUG9zID0gbWluKGVuZFBvcyAtIGJveFN0YXJ0LCBz
dGF0aWNfY2FzdDxpbnQ+KGxlbigpKSk7CisgICAgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9
IDA7CisgICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIHRleHRG
cmFnbWVudHNTaXplID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgeworICAgICAgICBTVkdUZXh0RnJh
Z21lbnQmIGZyYWdtZW50ID0gbV90ZXh0RnJhZ21lbnRzLmF0KGkpOworICAgICAgICBBU1NFUlQo
IW1fcGFpbnRpbmdSZXNvdXJjZSk7CiAKLSAgICBpZiAoc3RhcnRQb3MgPj0gZW5kUG9zKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uOworICAgICAgICBmcmFnbWVudEVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb247
CisgICAgICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRl
cyhmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgUmVuZGVyVGV4dCogdGV4dCA9IHRleHRSZW5k
ZXJlcigpOwotICAgIEFTU0VSVCh0ZXh0KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNh
dmUoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7Ci0gICAgQVNT
RVJUKHN0eWxlKTsKKyAgICAgICAgaWYgKCFmcmFnbWVudC50cmFuc2Zvcm0uaXNJZGVudGl0eSgp
KQorICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShmcmFnbWVudC50cmFu
c2Zvcm0pOwogCi0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3Q7CisgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBzdHlsZS0+Y29sb3JTcGFj
ZSgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3RG
b3JUZXh0RnJhZ21lbnQoZnJhZ21lbnQsIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRF
bmRQb3NpdGlvbiwgc3R5bGUpLCBiYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5jb2xvclNwYWNlKCkp
OwogCi0gICAgLy8gRmlndXJlIG91dCB3aGljaCB0ZXh0IGNodW5rIHBhcnQgaXMgaGl0Ci0gICAg
Y29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N2
Z1RleHRDaHVua1BhcnRzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3ZnVGV4dENodW5rUGFydHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBzZWxlY3Rpb25SZWN0LnVuaXRlKHNlbGVjdGlvblJlY3RGb3JU
ZXh0Q2h1bmtQYXJ0KCppdCwgc3RhcnRQb3MsIGVuZFBvcywgc3R5bGUpKTsKLQotICAgIC8vIFJl
c2VwZWN0IHBvc3NpYmxlIGNodW5rIHRyYW5zZm9ybWF0aW9uCi0gICAgaWYgKG1fY2h1bmtUcmFu
c2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KHNlbGVjdGlvblJlY3QpOworICAgICAgICBtX3BhaW50aW5nUmVzb3VyY2VNb2RlID0gQXBwbHlU
b0RlZmF1bHRNb2RlOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworICAg
IH0KIAotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5t
YXBSZWN0KHNlbGVjdGlvblJlY3QpKTsKKyAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7
CiB9CiAKIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGludCwgaW50KQpAQCAtMjA1LDYgKzIxNywxMSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBh
aW50KFBhaW50SW5mbyYgCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVu
dCgpLT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CiAKKyAgICBib29s
IHBhaW50U2VsZWN0ZWRUZXh0T25seSA9IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2Vs
ZWN0aW9uOworICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIXBhcmVudFJlbmRlcmVyLT5kb2N1bWVu
dCgpLT5wcmludGluZygpICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25Ob25lOworICAgIGlmICghaGFzU2VsZWN0aW9uICYmIHBhaW50U2VsZWN0ZWRUZXh0T25s
eSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcGFyZW50UmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlKTsKIApAQCAtMjEzLDEzICsyMzAsNiBA
QCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgCiAKICAgICBib29sIGhh
c0ZpbGwgPSBzdmdTdHlsZS0+aGFzRmlsbCgpOwogICAgIGJvb2wgaGFzU3Ryb2tlID0gc3ZnU3R5
bGUtPmhhc1N0cm9rZSgpOwotICAgIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gcGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb247Ci0KLSAgICAvLyBEZXRlcm1pbmUgd2hl
dGhlciBvciBub3Qgd2UncmUgc2VsZWN0ZWQuCi0gICAgYm9vbCBpc1ByaW50aW5nID0gcGFyZW50
UmVuZGVyZXItPmRvY3VtZW50KCktPnByaW50aW5nKCk7Ci0gICAgYm9vbCBoYXNTZWxlY3Rpb24g
PSAhaXNQcmludGluZyAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uTm9uZTsKLSAgICBpZiAoIWhhc1NlbGVjdGlvbiAmJiBwYWludFNlbGVjdGVkVGV4dE9ubHkp
Ci0gICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSA9IHN0
eWxlOwogICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKQEAgLTIzNiw2MiArMjQ2LDQzIEBAIHZvaWQg
U1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgICAgIHNlbGVjdGlv
blN0eWxlID0gc3R5bGU7CiAgICAgfQogCi0gICAgLy8gQ29tcHV0ZSB0ZXh0IG1hdGNoIG1hcmtl
ciByZWN0cy4gSXQgbmVlZHMgdG8gdHJhdmVyc2UgYWxsIHRleHQgY2h1bmsgcGFydHMgdG8gZmln
dXJlCi0gICAgLy8gb3V0IHRoZSB1bmlvbiBzZWxlY3Rpb24gcmVjdCBvZiBhbGwgdGV4dCBjaHVu
ayBwYXJ0cyB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlIHNlbGVjdGlvbi4KLSAgICBjb21wdXRlVGV4
dE1hdGNoTWFya2VyUmVjdChzdHlsZSk7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRDaHVua1BhcnQu
aXNWYWxpZCgpKTsKLQotICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9zdmdUZXh0Q2h1bmtQYXJ0cy5lbmQoKTsKLSAgICBmb3IgKFZlY3Rv
cjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N2Z1RleHRDaHVua1Bh
cnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIHVuc2lnbmVkIHRleHRGcmFnbWVu
dHNTaXplID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgeworICAgICAgICBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50ID0gbV90ZXh0RnJhZ21lbnRzLmF0KGkpOwogICAgICAgICBBU1NFUlQoIW1fcGFp
bnRpbmdSZXNvdXJjZSk7CiAKLSAgICAgICAgLy8gY29uc3RydWN0VGV4dFJ1bigpIHVzZXMgdGhl
IGN1cnJlbnQgY2h1bmsgcGFydCB0byBmaWd1cmUgb3V0IHdoYXQgdGV4dCB0byByZW5kZXIuCi0g
ICAgICAgIG1fY3VycmVudENodW5rUGFydCA9ICppdDsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKIAotICAgICAgICAvLyBQcmVwYXJlIGNvbnRleHQgYW5kIGRyYXcgdGV4dAot
ICAgICAgICBpZiAoIW1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCi0gICAgICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKG1fY2h1bmtUcmFuc2Zvcm1hdGlvbik7
Ci0KLSAgICAgICAgVmVjdG9yPFNWR0NoYXI+Ojpjb25zdF9pdGVyYXRvciBmaXJzdENoYXJhY3Rl
ciA9IG1fY3VycmVudENodW5rUGFydC5maXJzdENoYXJhY3RlcjsKLSAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGNoYXJhY3RlclRyYW5zZm9ybSA9IGZpcnN0Q2hhcmFjdGVyLT5jaGFyYWN0ZXJUcmFu
c2Zvcm0oKTsKLSAgICAgICAgaWYgKCFjaGFyYWN0ZXJUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQot
ICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShjaGFyYWN0ZXJUcmFuc2Zv
cm0pOwotCi0gICAgICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmaXJzdENoYXJhY3Rlci0+eCwg
Zmlyc3RDaGFyYWN0ZXItPnkpOwotCi0gICAgICAgIC8vIERyYXcgYmFja2dyb3VuZCBvbmNlIChu
b3QgaW4gYm90aCBmaWxsL3N0cm9rZSBwaGFzZXMpCi0gICAgICAgIGlmICghaXNQcmludGluZyAm
JiAhcGFpbnRTZWxlY3RlZFRleHRPbmx5ICYmIGhhc1NlbGVjdGlvbikKLSAgICAgICAgICAgIHBh
aW50U2VsZWN0aW9uKHBhaW50SW5mby5jb250ZXh0LCB0ZXh0T3JpZ2luLCBzdHlsZSk7CisgICAg
ICAgIGlmICghZnJhZ21lbnQudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0oZnJhZ21lbnQudHJhbnNmb3JtKTsKIAogICAgICAg
ICAvLyBTcGVjOiBBbGwgdGV4dCBkZWNvcmF0aW9ucyBleGNlcHQgbGluZS10aHJvdWdoIHNob3Vs
ZCBiZSBkcmF3biBiZWZvcmUgdGhlIHRleHQgaXMgZmlsbGVkIGFuZCBzdHJva2VkOyB0aHVzLCB0
aGUgdGV4dCBpcyByZW5kZXJlZCBvbiB0b3Agb2YgdGhlc2UgZGVjb3JhdGlvbnMuCiAgICAgICAg
IGludCBkZWNvcmF0aW9ucyA9IHN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAg
ICAgICBpZiAoZGVjb3JhdGlvbnMgJiBVTkRFUkxJTkUpCi0gICAgICAgICAgICBwYWludERlY29y
YXRpb24ocGFpbnRJbmZvLmNvbnRleHQsIHRleHRPcmlnaW4sIFVOREVSTElORSwgaGFzU2VsZWN0
aW9uKTsKKyAgICAgICAgICAgIHBhaW50RGVjb3JhdGlvbihwYWludEluZm8uY29udGV4dCwgVU5E
RVJMSU5FLCBmcmFnbWVudCk7CiAgICAgICAgIGlmIChkZWNvcmF0aW9ucyAmIE9WRVJMSU5FKQot
ICAgICAgICAgICAgcGFpbnREZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0LCB0ZXh0T3JpZ2lu
LCBPVkVSTElORSwgaGFzU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIHBhaW50RGVjb3JhdGlvbihw
YWludEluZm8uY29udGV4dCwgT1ZFUkxJTkUsIGZyYWdtZW50KTsKIAogICAgICAgICAvLyBGaWxs
IHRleHQKICAgICAgICAgaWYgKGhhc0ZpbGwpIHsKICAgICAgICAgICAgIG1fcGFpbnRpbmdSZXNv
dXJjZU1vZGUgPSBBcHBseVRvRmlsbE1vZGUgfCBBcHBseVRvVGV4dE1vZGU7Ci0gICAgICAgICAg
ICBwYWludFRleHQocGFpbnRJbmZvLmNvbnRleHQsIHRleHRPcmlnaW4sIHN0eWxlLCBzZWxlY3Rp
b25TdHlsZSwgaGFzU2VsZWN0aW9uLCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOworICAgICAgICAg
ICAgcGFpbnRUZXh0KHBhaW50SW5mby5jb250ZXh0LCBzdHlsZSwgc2VsZWN0aW9uU3R5bGUsIGZy
YWdtZW50LCBoYXNTZWxlY3Rpb24sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBTdHJva2UgdGV4dAogICAgICAgICBpZiAoaGFzU3Ryb2tlKSB7CiAgICAg
ICAgICAgICBtX3BhaW50aW5nUmVzb3VyY2VNb2RlID0gQXBwbHlUb1N0cm9rZU1vZGUgfCBBcHBs
eVRvVGV4dE1vZGU7Ci0gICAgICAgICAgICBwYWludFRleHQocGFpbnRJbmZvLmNvbnRleHQsIHRl
eHRPcmlnaW4sIHN0eWxlLCBzZWxlY3Rpb25TdHlsZSwgaGFzU2VsZWN0aW9uLCBwYWludFNlbGVj
dGVkVGV4dE9ubHkpOworICAgICAgICAgICAgcGFpbnRUZXh0KHBhaW50SW5mby5jb250ZXh0LCBz
dHlsZSwgc2VsZWN0aW9uU3R5bGUsIGZyYWdtZW50LCBoYXNTZWxlY3Rpb24sIHBhaW50U2VsZWN0
ZWRUZXh0T25seSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTcGVjOiBMaW5lLXRocm91Z2gg
c2hvdWxkIGJlIGRyYXduIGFmdGVyIHRoZSB0ZXh0IGlzIGZpbGxlZCBhbmQgc3Ryb2tlZDsgdGh1
cywgdGhlIGxpbmUtdGhyb3VnaCBpcyByZW5kZXJlZCBvbiB0b3Agb2YgdGhlIHRleHQuCiAgICAg
ICAgIGlmIChkZWNvcmF0aW9ucyAmIExJTkVfVEhST1VHSCkKLSAgICAgICAgICAgIHBhaW50RGVj
b3JhdGlvbihwYWludEluZm8uY29udGV4dCwgdGV4dE9yaWdpbiwgTElORV9USFJPVUdILCBoYXNT
ZWxlY3Rpb24pOworICAgICAgICAgICAgcGFpbnREZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0
LCBMSU5FX1RIUk9VR0gsIGZyYWdtZW50KTsKIAogICAgICAgICBtX3BhaW50aW5nUmVzb3VyY2VN
b2RlID0gQXBwbHlUb0RlZmF1bHRNb2RlOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVz
dG9yZSgpOwogICAgIH0KIAotICAgIG1fY3VycmVudENodW5rUGFydCA9IFNWR1RleHRDaHVua1Bh
cnQoKTsKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7CiB9CiAKQEAgLTM1MCw4OCAr
MzQxLDYyIEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ28KICNlbmRp
ZgogfQogCi1UZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIEFTU0VSVChtX2N1cnJlbnRDaHVua1BhcnQuaXNW
YWxpZCgpKTsKLSAgICByZXR1cm4gc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dFJlbmRl
cmVyKCktPnRleHQoKS0+Y2hhcmFjdGVycygpICsgc3RhcnQoKSArIG1fY3VycmVudENodW5rUGFy
dC5vZmZzZXQsIG1fY3VycmVudENodW5rUGFydC5sZW5ndGgsIHN0eWxlLCB0aGlzKTsKLX0KLQot
dm9pZCBTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9DaHVua1BhcnRD
b29yZGluYXRlcyhpbnQmIHN0YXJ0UG9zLCBpbnQmIGVuZFBvcywgY29uc3QgU1ZHVGV4dENodW5r
UGFydCYgcGFydCkgY29uc3QKK1RleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4
dFJ1bihSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQp
IGNvbnN0CiB7Ci0gICAgaWYgKHN0YXJ0UG9zID49IGVuZFBvcykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gVGFrZSA8dGV4dCB4PSIxMCA1MCAxMDAiPkFCQzwvdGV4dD4gYXMgZXhhbXBsZS4g
V2UncmUgY2FsbGVkIHRocmVlIHRpbWVzIGZyb20gcGFpbnQoKSwgYmVjYXVzZSBhbGwgYWJzb2x1
dGUgcG9zaXRpb25lZAotICAgIC8vIGNoYXJhY3RlcnMgYXJlIGRyYXduIG9uIHRoZWlyIG93bi4g
Rm9yIGVhY2ggb2YgdGhlbSB3ZSB3YW50IHRvIGZpbmQgb3V0IHdoZWh0ZXIgaXQncyBzZWxlY3Rl
ZC4gc3RhcnRQb3M9MCwgZW5kUG9zPTEKLSAgICAvLyBjb3VsZCBtZWFuIEEsIEIgb3IgQyBpcyBo
aXQsIGRlcGVuZGluZyBvbiB3aGljaCBjaHVuayBwYXJ0IGlzIHByb2Nlc3NlZCBhdCB0aGUgbW9t
ZW50LiBXaXRoIHRoZSBvZmZzZXQgJiBsZW5ndGggdmFsdWVzCi0gICAgLy8gb2YgZWFjaCBjaHVu
ayBwYXJ0IHdlIGNhbiBlYXNpbHkgZmluZCBvdXQgd2hpY2ggb25lIGlzIG1lYW50IHRvIGJlIHNl
bGVjdGVkLiBCYWlsIG91dCBmb3IgdGhlIG90aGVyIGNodW5rIHBhcnRzLgotICAgIC8vIElmIHN0
YXJQb3MgaXMgYmVoaW5kIHRoZSBjdXJyZW50IGNodW5rIG9yIHRoZSBlbmRQb3MgZW5kcyBiZWZv
cmUgdGhpcyB0ZXh0IGNodW5rIHBhcnQsIHdlJ3JlIG5vdCBtZWFudCB0byBiZSBzZWxlY3RlZC4K
LSAgICBpZiAoc3RhcnRQb3MgPj0gcGFydC5vZmZzZXQgKyBwYXJ0Lmxlbmd0aCB8fCBlbmRQb3Mg
PD0gcGFydC5vZmZzZXQpIHsKLSAgICAgICAgc3RhcnRQb3MgPSAwOwotICAgICAgICBlbmRQb3Mg
PSAtMTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFT
U0VSVCh0ZXh0UmVuZGVyZXIoKSk7CiAKLSAgICAvLyBUaGUgY3VycmVudCBwcm9jZXNzZWQgY2h1
bmsgcGFydCBpcyBoaXQuIFdoZW4gcGFpbnRpbmcgdGhlIHNlbGVjdGlvbiwgY29uc3RydWN0VGV4
dFJ1bigpIGJ1aWxkcwotICAgIC8vIGEgVGV4dFJ1biBvYmplY3Qgd2hvc2Ugc3RhcnRQb3MgaXMg
MCBhbmQgZW5kUG9zIGlzIGNodW5rIHBhcnQgbGVuZ3RoLiBUaGUgY29kZSBiZWxvdyBtYXBzIHRo
ZSBpbmNvbWluZwotICAgIC8vIHN0YXJ0UG9zL2VuZFBvcyByYW5nZSBpbnRvIGEgWzAsIHBhcnQg
bGVuZ3RoXSBjb29yZGluYXRlIHN5c3RlbSwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgY2h1bmsg
cGFydC4KLSAgICBpZiAoc3RhcnRQb3MgPCBwYXJ0Lm9mZnNldCkKLSAgICAgICAgc3RhcnRQb3Mg
PSAwOwotICAgIGVsc2UKLSAgICAgICAgc3RhcnRQb3MgLT0gcGFydC5vZmZzZXQ7CisgICAgUmVu
ZGVyVGV4dCogdGV4dCA9IHRleHRSZW5kZXJlcigpOworICAgIEFTU0VSVCh0ZXh0KTsKIAotICAg
IGlmIChlbmRQb3MgPiBwYXJ0Lm9mZnNldCArIHBhcnQubGVuZ3RoKQotICAgICAgICBlbmRQb3Mg
PSBwYXJ0Lmxlbmd0aDsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGVuZFBvcyA+PSBwYXJ0
Lm9mZnNldCk7Ci0gICAgICAgIGVuZFBvcyAtPSBwYXJ0Lm9mZnNldDsKLSAgICB9CisgICAgVGV4
dFJ1biBydW4odGV4dC0+Y2hhcmFjdGVycygpICsgZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0
CisgICAgICAgICAgICAgICAgLCBmcmFnbWVudC5sZW5ndGgKKyAgICAgICAgICAgICAgICAsIGZh
bHNlIC8qIGFsbG93VGFicyAqLworICAgICAgICAgICAgICAgICwgMCAvKiB4UG9zLCBvbmx5IHJl
bGV2YW50IHdpdGggYWxsb3dUYWJzPXRydWUgKi8KKyAgICAgICAgICAgICAgICAsIDAgLyogcGFk
ZGluZywgb25seSByZWxldmFudCBmb3IganVzdGlmaWVkIHRleHQsIG5vdCByZWxldmFudCBmb3Ig
U1ZHICovCisgICAgICAgICAgICAgICAgLCBkaXJlY3Rpb24oKSA9PSBSVEwKKyAgICAgICAgICAg
ICAgICAsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpIC8qIGRpcmVj
dGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0gICAgQVNTRVJUKHN0YXJ0UG9zIDwgZW5kUG9zKTsKLX0K
KyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIg
PSBwYXJlbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwogCi12
b2lkIFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3RhcnRQb3MsIGlu
dCYgZW5kUG9zKQotewotICAgIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0
UG9zLCBlbmRQb3MpOworICAgIHJ1bi5zZXRSZWZlcmVuY2luZ1JlbmRlck9iamVjdChwYXJlbnRS
ZW5kZXJlcik7CisjZW5kaWYKIAotICAgIGlmICghbV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIERpc2FibGUgYW55IHdvcmQvY2hhcmFjdGVyIHJv
dW5kaW5nLgorICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCi0gICAgbWFwU3RhcnRF
bmRQb3NpdGlvbnNJbnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMoc3RhcnRQb3MsIGVuZFBvcywgbV9j
dXJyZW50Q2h1bmtQYXJ0KTsKKyAgICAvLyBXZSBoYW5kbGUgbGV0dGVyICYgd29yZCBzcGFjaW5n
IG91cnNlbHZlcy4KKyAgICBydW4uZGlzYWJsZVNwYWNpbmcoKTsKKyAgICByZXR1cm4gcnVuOwog
fQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0KFJl
bmRlclN0eWxlKiBzdHlsZSkKK2Jvb2wgU1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3Np
dGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdt
ZW50LCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKCFtX2N1cnJlbnRDaHVua1BhcnQuaXNWYWxpZCgpKTsKLSAgICBOb2RlKiBub2RlID0g
cmVuZGVyZXIoKS0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aW5Eb2N1bWVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZW5kZXJlcigp
LT5kb2N1bWVudCgpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IGRvY3Vt
ZW50LT5tYXJrZXJzKCktPm1hcmtlcnNGb3JOb2RlKHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAg
aWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj46Oml0ZXJhdG9yIG1hcmtlckVuZCA9IG1hcmtl
cnMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8RG9jdW1lbnRNYXJrZXI+OjppdGVyYXRvciBtYXJr
ZXJJdCA9IG1hcmtlcnMuYmVnaW4oKTsgbWFya2VySXQgIT0gbWFya2VyRW5kOyArK21hcmtlckl0
KSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSAqbWFya2VySXQ7Cisg
ICAgaW50IG9mZnNldCA9IHN0YXRpY19jYXN0PGludD4oZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zm
c2V0KSAtIHN0YXJ0KCk7CisgICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oZnJhZ21l
bnQubGVuZ3RoKTsKIAotICAgICAgICAvLyBTVkcgaXMgb25seSBpbnRlcmVzc3RlZCBpbiB0aGUg
VGV4dE1hdGNoIG1hcmtlciwgZm9yIG5vdy4KLSAgICAgICAgaWYgKG1hcmtlci50eXBlICE9IERv
Y3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBGbG9hdFJlY3QgbWFya2VyUmVjdDsKLSAgICAgICAgaW50IHBhcnRTdGFydFBvcyA9IG1heCht
YXJrZXIuc3RhcnRPZmZzZXQgLSBzdGFydCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwot
ICAgICAgICBpbnQgcGFydEVuZFBvcyA9IG1pbihtYXJrZXIuZW5kT2Zmc2V0IC0gc3RhcnQoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbigpKSk7Ci0KLSAgICAgICAgLy8gSXRlcmF0ZSBvdmVy
IGFsbCB0ZXh0IGNodW5rIHBhcnRzLCB0byBzZWUgd2hpY2ggb25lcyBoYXZlIHRvIGJlIGhpZ2hs
aWdodGVkCi0gICAgICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9zdmdUZXh0Q2h1bmtQYXJ0cy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0
b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdmdUZXh0Q2h1bmtQ
YXJ0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtYXJrZXJSZWN0LnVu
aXRlKHNlbGVjdGlvblJlY3RGb3JUZXh0Q2h1bmtQYXJ0KCppdCwgcGFydFN0YXJ0UG9zLCBwYXJ0
RW5kUG9zLCBzdHlsZSkpOworICAgIGlmIChzdGFydFBvc2l0aW9uID49IG9mZnNldCArIGxlbmd0
aCB8fCBlbmRQb3NpdGlvbiA8PSBvZmZzZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBpZiAoIW1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCi0gICAgICAgICAg
ICBtYXJrZXJSZWN0ID0gbV9jaHVua1RyYW5zZm9ybWF0aW9uLm1hcFJlY3QobWFya2VyUmVjdCk7
CisgICAgaWYgKHN0YXJ0UG9zaXRpb24gPCBvZmZzZXQpCisgICAgICAgIHN0YXJ0UG9zaXRpb24g
PSAwOworICAgIGVsc2UKKyAgICAgICAgc3RhcnRQb3NpdGlvbiAtPSBvZmZzZXQ7CiAKLSAgICAg
ICAgZG9jdW1lbnQtPm1hcmtlcnMoKS0+c2V0UmVuZGVyZWRSZWN0Rm9yTWFya2VyKG5vZGUsIG1h
cmtlciwgcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChtYXJrZXJSZWN0KS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpKTsKKyAgICBpZiAoZW5kUG9zaXRpb24gPiBvZmZzZXQgKyBsZW5ndGgp
CisgICAgICAgIGVuZFBvc2l0aW9uID0gbGVuZ3RoOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQoZW5kUG9zaXRpb24gPj0gb2Zmc2V0KTsKKyAgICAgICAgZW5kUG9zaXRpb24gLT0gb2Zmc2V0
OwogICAgIH0KKworICAgIEFTU0VSVChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pOworICAg
IHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW5saW5lIGZsb2F0IHBvc2l0aW9uT2Zmc2V0Rm9y
RGVjb3JhdGlvbihFVGV4dERlY29yYXRpb24gZGVjb3JhdGlvbiwgY29uc3QgRm9udCYgZm9udCwg
ZmxvYXQgdGhpY2tuZXNzKQpAQCAtNDU1LDE3ICs0MjAsMTUgQEAgc3RhdGljIGlubGluZSBmbG9h
dCB0aGlja25lc3NGb3JEZWNvcmF0aQogICAgIC8vIENvbXBhdGlibGUgd2l0aCBCYXRpay9PcGVy
YQogICAgIHJldHVybiBmb250LnNpemUoKSAvIDIwLjBmOwogfQotIAotc3RhdGljIGlubGluZSBS
ZW5kZXJPYmplY3QqIGZpbmRSZW5kZXJPYmplY3REZWZpbmluaW5nVGV4dERlY29yYXRpb24oSW5s
aW5lRmxvd0JveCogcGFyZW50Qm94LCBFVGV4dERlY29yYXRpb24gZGVjb3JhdGlvbikKKworc3Rh
dGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRSZW5kZXJPYmplY3REZWZpbmluaW5nVGV4dERl
Y29yYXRpb24oSW5saW5lRmxvd0JveCogcGFyZW50Qm94KQogewotICAgIC8vIExvb2t1cCByZW5k
ZXIgb2JqZWN0IHdoaWNoIGhhcyB0ZXh0LWRlY29yYXRpb24gc2V0LgorICAgIC8vIExvb2t1cCBm
aXJzdCByZW5kZXIgb2JqZWN0IGluIHBhcmVudCBoaWVyYXJjaHkgd2hpY2ggaGFzIHRleHQtZGVj
b3JhdGlvbiBzZXQuCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IDA7CiAgICAgd2hpbGUg
KHBhcmVudEJveCkgewogICAgICAgICByZW5kZXJlciA9IHBhcmVudEJveC0+cmVuZGVyZXIoKTsK
IAotICAgICAgICAvLyBFeHBsaWNpdGVseSBjaGVjayB0ZXh0RGVjb3JhdGlvbigpIG5vdCB0ZXh0
RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCB3aGljaCBpcyBpbmhlcml0ZWQgdG8KLSAgICAgICAgLy8g
Y2hpbGRyZW4sIGFzIHdlIHdhbnQgdG8gbG9va3VwIHRoZSByZW5kZXIgb2JqZWN0IHdob3NlIHN0
eWxlIGRlZmluZWQgdGhlIHRleHQtZGVjb3JhdGlvbi4KLSAgICAgICAgaWYgKHJlbmRlcmVyLT5z
dHlsZSgpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT50ZXh0RGVjb3JhdGlvbigpICYgZGVjb3JhdGlv
bikKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT50
ZXh0RGVjb3JhdGlvbigpICE9IFRETk9ORSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IHBhcmVudEJveCA9IHBhcmVudEJveC0+cGFyZW50KCk7CkBAIC00NzUsNTIgKzQzOCw0MCBAQCBz
dGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogZmluZFJlbmRlck9iCiAgICAgcmV0dXJuIHJlbmRl
cmVyOwogfQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIEVUZXh0RGVj
b3JhdGlvbiBkZWNvcmF0aW9uLCBib29sIGhhc1NlbGVjdGlvbikKK3ZvaWQgU1ZHSW5saW5lVGV4
dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgRVRleHREZWNv
cmF0aW9uIGRlY29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpCiB7Cisg
ICAgaWYgKHRleHRSZW5kZXJlcigpLT5zdHlsZSgpLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgp
ID09IFRETk9ORSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRmluZCBvdXQgd2hpY2ggcmVu
ZGVyIHN0eWxlIGRlZmluZWQgdGhlIHRleHQtZGVjb3JhdGlvbiwgYXMgaXRzIGZpbGwvc3Ryb2tl
IHByb3BlcnRpZXMgaGF2ZSB0byBiZSB1c2VkIGZvciBkcmF3aW5nIGluc3RlYWQgb2Ygb3Vycy4K
LSAgICBSZW5kZXJPYmplY3QqIGRlY29yYXRpb25SZW5kZXJlciA9IGZpbmRSZW5kZXJPYmplY3RE
ZWZpbmluaW5nVGV4dERlY29yYXRpb24ocGFyZW50KCksIGRlY29yYXRpb24pOworICAgIFJlbmRl
ck9iamVjdCogZGVjb3JhdGlvblJlbmRlcmVyID0gZmluZFJlbmRlck9iamVjdERlZmluaW5pbmdU
ZXh0RGVjb3JhdGlvbihwYXJlbnQoKSk7CiAgICAgUmVuZGVyU3R5bGUqIGRlY29yYXRpb25TdHls
ZSA9IGRlY29yYXRpb25SZW5kZXJlci0+c3R5bGUoKTsKICAgICBBU1NFUlQoZGVjb3JhdGlvblN0
eWxlKTsKIAorICAgIGlmIChkZWNvcmF0aW9uU3R5bGUtPnZpc2liaWxpdHkoKSA9PSBISURERU4p
CisgICAgICAgIHJldHVybjsKKwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdEZWNvcmF0
aW9uU3R5bGUgPSBkZWNvcmF0aW9uU3R5bGUtPnN2Z1N0eWxlKCk7CiAgICAgQVNTRVJUKHN2Z0Rl
Y29yYXRpb25TdHlsZSk7CiAKICAgICBib29sIGhhc0RlY29yYXRpb25GaWxsID0gc3ZnRGVjb3Jh
dGlvblN0eWxlLT5oYXNGaWxsKCk7CiAgICAgYm9vbCBoYXNEZWNvcmF0aW9uU3Ryb2tlID0gc3Zn
RGVjb3JhdGlvblN0eWxlLT5oYXNTdHJva2UoKTsKIAotICAgIGlmIChoYXNTZWxlY3Rpb24pIHsK
LSAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJl
ci0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKSkgewotICAgICAgICAgICAgZGVjb3Jh
dGlvblN0eWxlID0gcHNldWRvU3R5bGU7Ci0KLSAgICAgICAgICAgIHN2Z0RlY29yYXRpb25TdHls
ZSA9IGRlY29yYXRpb25TdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChzdmdE
ZWNvcmF0aW9uU3R5bGUpOwotCi0gICAgICAgICAgICBpZiAoIWhhc0RlY29yYXRpb25GaWxsKQot
ICAgICAgICAgICAgICAgIGhhc0RlY29yYXRpb25GaWxsID0gc3ZnRGVjb3JhdGlvblN0eWxlLT5o
YXNGaWxsKCk7Ci0gICAgICAgICAgICBpZiAoIWhhc0RlY29yYXRpb25TdHJva2UpCi0gICAgICAg
ICAgICAgICAgaGFzRGVjb3JhdGlvblN0cm9rZSA9IHN2Z0RlY29yYXRpb25TdHlsZS0+aGFzU3Ry
b2tlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGVjb3JhdGlvblN0eWxlLT52aXNp
YmlsaXR5KCkgPT0gSElEREVOKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoaGFzRGVjb3Jh
dGlvbkZpbGwpIHsKICAgICAgICAgbV9wYWludGluZ1Jlc291cmNlTW9kZSA9IEFwcGx5VG9GaWxs
TW9kZTsKLSAgICAgICAgcGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKGNvbnRleHQsIHRleHRPcmln
aW4sIGRlY29yYXRpb25SZW5kZXJlciwgZGVjb3JhdGlvbik7CisgICAgICAgIHBhaW50RGVjb3Jh
dGlvbldpdGhTdHlsZShjb250ZXh0LCBkZWNvcmF0aW9uLCBmcmFnbWVudCwgZGVjb3JhdGlvblJl
bmRlcmVyKTsKICAgICB9CiAKICAgICBpZiAoaGFzRGVjb3JhdGlvblN0cm9rZSkgewogICAgICAg
ICBtX3BhaW50aW5nUmVzb3VyY2VNb2RlID0gQXBwbHlUb1N0cm9rZU1vZGU7Ci0gICAgICAgIHBh
aW50RGVjb3JhdGlvbldpdGhTdHlsZShjb250ZXh0LCB0ZXh0T3JpZ2luLCBkZWNvcmF0aW9uUmVu
ZGVyZXIsIGRlY29yYXRpb24pOworICAgICAgICBwYWludERlY29yYXRpb25XaXRoU3R5bGUoY29u
dGV4dCwgZGVjb3JhdGlvbiwgZnJhZ21lbnQsIGRlY29yYXRpb25SZW5kZXJlcik7CiAgICAgfQog
fQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIFJlbmRl
ck9iamVjdCogZGVjb3JhdGlvblJlbmRlcmVyLCBFVGV4dERlY29yYXRpb24gZGVjb3JhdGlvbikK
K3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgRVRleHREZWNvcmF0aW9uIGRlY29yYXRpb24sIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYgZnJhZ21lbnQsIFJlbmRlck9iamVjdCogZGVjb3JhdGlvblJlbmRlcmVyKQog
ewogICAgIEFTU0VSVCghbV9wYWludGluZ1Jlc291cmNlKTsKICAgICBBU1NFUlQobV9wYWludGlu
Z1Jlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwotICAgIEFTU0VSVChtX2N1cnJl
bnRDaHVua1BhcnQuaXNWYWxpZCgpKTsKIAogICAgIFJlbmRlclN0eWxlKiBkZWNvcmF0aW9uU3R5
bGUgPSBkZWNvcmF0aW9uUmVuZGVyZXItPnN0eWxlKCk7CiAgICAgQVNTRVJUKGRlY29yYXRpb25T
dHlsZSk7CkBAIC01MjksMTIgKzQ4MCwxMSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50
RGVjb3JhdGlvbldpCiAKICAgICAvLyBUaGUgaW5pdGlhbCB5IHZhbHVlIHJlZmVycyB0byBvdmVy
bGluZSBwb3NpdGlvbi4KICAgICBmbG9hdCB0aGlja25lc3MgPSB0aGlja25lc3NGb3JEZWNvcmF0
aW9uKGRlY29yYXRpb24sIGZvbnQpOwotICAgIGZsb2F0IHggPSB0ZXh0T3JpZ2luLngoKTsKLSAg
ICBmbG9hdCB5ID0gdGV4dE9yaWdpbi55KCkgLSBmb250LmFzY2VudCgpICsgcG9zaXRpb25PZmZz
ZXRGb3JEZWNvcmF0aW9uKGRlY29yYXRpb24sIGZvbnQsIHRoaWNrbmVzcyk7CisgICAgZmxvYXQg
eSA9IGZyYWdtZW50LnkgLSBmb250LmFzY2VudCgpICsgcG9zaXRpb25PZmZzZXRGb3JEZWNvcmF0
aW9uKGRlY29yYXRpb24sIGZvbnQsIHRoaWNrbmVzcyk7CiAKICAgICBjb250ZXh0LT5zYXZlKCk7
CiAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgY29udGV4dC0+YWRkUGF0aChQYXRoOjpj
cmVhdGVSZWN0YW5nbGUoRmxvYXRSZWN0KHgsIHksIG1fY3VycmVudENodW5rUGFydC53aWR0aCwg
dGhpY2tuZXNzKSkpOworICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUmVjdGFuZ2xl
KEZsb2F0UmVjdChmcmFnbWVudC54LCB5LCBmcmFnbWVudC53aWR0aCwgdGhpY2tuZXNzKSkpOwog
CiAgICAgaWYgKGFjcXVpcmVQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIGRlY29yYXRpb25SZW5k
ZXJlciwgZGVjb3JhdGlvblN0eWxlKSkKICAgICAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2Uo
Y29udGV4dCk7CkBAIC01NDIsMzUgKzQ5MiwxNCBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBh
aW50RGVjb3JhdGlvbldpCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCi12b2lkIFNWR0lu
bGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIC8v
IFNlZSBpZiB3ZSBoYXZlIGEgc2VsZWN0aW9uIHRvIHBhaW50IGF0IGFsbC4KLSAgICBpbnQgc3Rh
cnRQb3MsIGVuZFBvczsKLSAgICBzZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsK
LSAgICBpZiAoc3RhcnRQb3MgPj0gZW5kUG9zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xv
ciBiYWNrZ3JvdW5kQ29sb3IgPSByZW5kZXJlcigpLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KTsKLSAgICBpZiAoIWJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgfHwgIWJhY2tncm91bmRDb2xv
ci5hbHBoYSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5
bGUtPmZvbnQoKTsKLQotICAgIEZsb2F0UG9pbnQgc2VsZWN0aW9uT3JpZ2luID0gdGV4dE9yaWdp
bjsKLSAgICBzZWxlY3Rpb25PcmlnaW4ubW92ZSgwLCAtZm9udC5hc2NlbnQoKSk7Ci0KLSAgICBj
b250ZXh0LT5zYXZlKCk7Ci0gICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xv
ciwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgY29udGV4dC0+ZmlsbFJlY3QoZm9udC5zZWxl
Y3Rpb25SZWN0Rm9yVGV4dChjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlKSwgc2VsZWN0aW9uT3JpZ2lu
LCBtX2N1cnJlbnRDaHVua1BhcnQuaGVpZ2h0LCBzdGFydFBvcywgZW5kUG9zKSwgYmFja2dyb3Vu
ZENvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19
Ci0KLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5kZXJTdHls
ZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4sIGludCBzdGFydFBvcywgaW50IGVuZFBvcykKK3Zv
aWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNW
R1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRp
b24pCiB7CiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7CiAgICAgY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93ID0gc3R5bGUtPnRleHRTaGFkb3coKTsKIAotICAgIEZsb2F0UmVj
dCBzaGFkb3dSZWN0KEZsb2F0UG9pbnQodGV4dE9yaWdpbi54KCksIHRleHRPcmlnaW4ueSgpIC0g
Zm9udC5hc2NlbnQoKSksIEZsb2F0U2l6ZShtX2N1cnJlbnRDaHVua1BhcnQud2lkdGgsIG1fY3Vy
cmVudENodW5rUGFydC5oZWlnaHQpKTsKKyAgICBGbG9hdFBvaW50IHRleHRPcmlnaW4oZnJhZ21l
bnQueCwgZnJhZ21lbnQueSk7CisgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QoRmxvYXRQb2ludCh0
ZXh0T3JpZ2luLngoKSwgdGV4dE9yaWdpbi55KCkgLSBmb250LmFzY2VudCgpKSwgRmxvYXRTaXpl
KGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpKTsKKwogICAgIGRvIHsKICAgICAgICAg
aWYgKCFwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKGNvbnRleHQsIHRleHRS
dW4sIHN0eWxlKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTc5LDcgKzUwOCw3IEBAIHZvaWQg
U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWQKICAgICAgICAgaWYgKHNoYWRvdykK
ICAgICAgICAgICAgIGV4dHJhT2Zmc2V0ID0gYXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dChj
b250ZXh0LCBzaGFkb3csIHNoYWRvd1JlY3QsIGZhbHNlIC8qIHN0cm9rZWQgKi8sIHRydWUgLyog
b3BhcXVlICovKTsKIAotICAgICAgICBmb250LmRyYXdUZXh0KGNvbnRleHQsIHRleHRSdW4sIHRl
eHRPcmlnaW4gKyBleHRyYU9mZnNldCwgc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgICAgIGZvbnQu
ZHJhd1RleHQoY29udGV4dCwgdGV4dFJ1biwgdGV4dE9yaWdpbiArIGV4dHJhT2Zmc2V0LCBzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAgICAgICAgIHJlc3RvcmVHcmFwaGljc0NvbnRleHRB
ZnRlclRleHRQYWludGluZyhjb250ZXh0LCB0ZXh0UnVuKTsKIAogICAgICAgICBpZiAoIXNoYWRv
dykKQEAgLTU5NCwyOTMgKzUyMyw2OSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4
dFdpdGhTaGFkCiAgICAgfSB3aGlsZSAoc2hhZG93KTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25T
dHlsZSwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQordm9p
ZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxl
Y3RlZFRleHRPbmx5KQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKHNlbGVjdGlv
blN0eWxlKTsKLSAgICBBU1NFUlQobV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFsaWQoKSk7CiAKLSAg
ICBpbnQgc3RhcnRQb3MgPSAwOwotICAgIGludCBlbmRQb3MgPSAwOwotICAgIHNlbGVjdGlvblN0
YXJ0RW5kKHN0YXJ0UG9zLCBlbmRQb3MpOworICAgIGludCBzdGFydFBvc2l0aW9uID0gMDsKKyAg
ICBpbnQgZW5kUG9zaXRpb24gPSAwOworICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKKyAgICAgICAg
c2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgICAgICBo
YXNTZWxlY3Rpb24gPSBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVz
KGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgfQogCiAgICAgLy8g
RmFzdCBwYXRoIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvbiwganVzdCBkcmF3IHRoZSB3aG9sZSBj
aHVuayBwYXJ0IHVzaW5nIHRoZSByZWd1bGFyIHN0eWxlCi0gICAgVGV4dFJ1biB0ZXh0UnVuKGNv
bnN0cnVjdFRleHRSdW4oc3R5bGUpKTsKLSAgICBpZiAoIWhhc1NlbGVjdGlvbiB8fCBzdGFydFBv
cyA+PSBlbmRQb3MpIHsKLSAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgdGV4
dE9yaWdpbiwgc3R5bGUsIHRleHRSdW4sIDAsIG1fY3VycmVudENodW5rUGFydC5sZW5ndGgpOwor
ICAgIFRleHRSdW4gdGV4dFJ1bihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFnbWVudCkpOwor
ICAgIGlmICghaGFzU2VsZWN0aW9uIHx8IHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pIHsK
KyAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgc3R5bGUsIHRleHRSdW4sIGZy
YWdtZW50LCAwLCBmcmFnbWVudC5sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgLy8gRXZlbnR1YWxseSBkcmF3IHRleHQgdXNpbmcgcmVndWxhciBzdHlsZSB1bnRpbCB0aGUg
c3RhcnQgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGlvbgotICAgIGlmIChzdGFydFBvcyA+IDAgJiYg
IXBhaW50U2VsZWN0ZWRUZXh0T25seSkKLSAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29u
dGV4dCwgdGV4dE9yaWdpbiwgc3R5bGUsIHRleHRSdW4sIDAsIHN0YXJ0UG9zKTsKKyAgICBpZiAo
c3RhcnRQb3NpdGlvbiA+IDAgJiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKKyAgICAgICAgcGFp
bnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgc3R5bGUsIHRleHRSdW4sIGZyYWdtZW50LCAwLCBz
dGFydFBvc2l0aW9uKTsKIAogICAgIC8vIERyYXcgdGV4dCB1c2luZyBzZWxlY3Rpb24gc3R5bGUg
ZnJvbSB0aGUgc3RhcnQgdG8gdGhlIGVuZCBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0aW9uCiAgICAg
aWYgKHN0eWxlICE9IHNlbGVjdGlvblN0eWxlKQogICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2xpZW50U3R5bGVDaGFuZ2VkKHBhcmVudCgpLT5yZW5kZXJlcigpLCBTdHlsZURpZmZlcmVuY2VS
ZXBhaW50LCBzZWxlY3Rpb25TdHlsZSk7CiAKLSAgICBUZXh0UnVuIHNlbGVjdGlvblRleHRSdW4o
Y29uc3RydWN0VGV4dFJ1bihzZWxlY3Rpb25TdHlsZSkpOwotICAgIHBhaW50VGV4dFdpdGhTaGFk
b3dzKGNvbnRleHQsIHRleHRPcmlnaW4sIHNlbGVjdGlvblN0eWxlLCB0ZXh0UnVuLCBzdGFydFBv
cywgZW5kUG9zKTsKKyAgICBUZXh0UnVuIHNlbGVjdGlvblRleHRSdW4oY29uc3RydWN0VGV4dFJ1
bihzZWxlY3Rpb25TdHlsZSwgZnJhZ21lbnQpKTsKKyAgICBwYWludFRleHRXaXRoU2hhZG93cyhj
b250ZXh0LCBzZWxlY3Rpb25TdHlsZSwgdGV4dFJ1biwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKTsKIAogICAgIGlmIChzdHlsZSAhPSBzZWxlY3Rpb25TdHlsZSkKICAgICAg
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZChwYXJlbnQoKS0+cmVuZGVy
ZXIoKSwgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwgc3R5bGUpOwogCiAgICAgLy8gRXZlbnR1YWxs
eSBkcmF3IHRleHQgdXNpbmcgcmVndWxhciBzdHlsZSBmcm9tIHRoZSBlbmQgcG9zaXRpb24gb2Yg
dGhlIHNlbGVjdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNodW5rIHBhcnQKLSAgICBp
ZiAoZW5kUG9zIDwgbV9jdXJyZW50Q2h1bmtQYXJ0Lmxlbmd0aCAmJiAhcGFpbnRTZWxlY3RlZFRl
eHRPbmx5KQotICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCB0ZXh0T3JpZ2lu
LCBzdHlsZSwgdGV4dFJ1biwgZW5kUG9zLCBtX2N1cnJlbnRDaHVua1BhcnQubGVuZ3RoKTsKKyAg
ICBpZiAoZW5kUG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50Lmxlbmd0aCkgJiYg
IXBhaW50U2VsZWN0ZWRUZXh0T25seSkKKyAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29u
dGV4dCwgc3R5bGUsIHRleHRSdW4sIGZyYWdtZW50LCBlbmRQb3NpdGlvbiwgZnJhZ21lbnQubGVu
Z3RoKTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpidWlsZExheW91dEluZm9ybWF0aW9u
KFNWR0NoYXJhY3RlckxheW91dEluZm8mIGluZm8sIFNWR0xhc3RHbHlwaEluZm8mIGxhc3RHbHlw
aCkKK0ludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0
CiB7CisgICAgRmxvYXRSZWN0IHRleHRSZWN0OworCiAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRl
cmVyID0gdGhpcy0+dGV4dFJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHRleHRSZW5kZXJlcik7CiAK
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0UmVuZGVyZXItPnN0eWxlKCk7CiAgICAgQVNT
RVJUKHN0eWxlKTsKIAotICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQo
KS0+cmVuZGVyZXIoKTsKLSAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwotICAgIEFTU0VSVChw
YXJlbnRSZW5kZXJlci0+bm9kZSgpKTsKLSAgICBBU1NFUlQocGFyZW50UmVuZGVyZXItPm5vZGUo
KS0+aXNTVkdFbGVtZW50KCkpOwotICAgIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQgPSBzdGF0
aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGFyZW50UmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBjb25z
dCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cyA9IHRleHRSZW5kZXJlci0+Y2hhcmFjdGVycygpOwotCi0gICAgdW5zaWduZWQgc3RhcnRQb3Np
dGlvbiA9IHN0YXJ0KCk7Ci0gICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBlbmQoKTsKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBsZW4oKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdT
dHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwotICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBpc1Zl
cnRpY2FsV3JpdGluZ01vZGUoc3ZnU3R5bGUpOwotCi0gICAgaW50IGNoYXJzQ29uc3VtZWQgPSAw
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gY2hhcnNDb25zdW1l
ZCkgewotICAgICAgICBTVkdDaGFyIHN2Z0NoYXI7Ci0KLSAgICAgICAgaWYgKGluZm8uaW5QYXRo
TGF5b3V0KCkpCi0gICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhID0gU1ZHQ2hhck9uUGF0aDo6
Y3JlYXRlKCk7Ci0KLSAgICAgICAgZmxvYXQgZ2x5cGhXaWR0aCA9IDAuMGY7Ci0gICAgICAgIGZs
b2F0IGdseXBoSGVpZ2h0ID0gMC4wZjsKLSAgICAgICAgU3RyaW5nIGdseXBoTmFtZTsKLSAgICAg
ICAgU3RyaW5nIHVuaWNvZGVTdHJpbmc7Ci0gICAgICAgIG1lYXN1cmVDaGFyYWN0ZXIoc3R5bGUs
IGksIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSwgdW5pY29kZVN0cmluZywgZ2x5cGhXaWR0aCwg
Z2x5cGhIZWlnaHQpOwotCi0gICAgICAgIGJvb2wgYXNzaWduZWRYID0gZmFsc2U7Ci0gICAgICAg
IGJvb2wgYXNzaWduZWRZID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGluZm8ueFZhbHVlQXZhaWxh
YmxlKCkgJiYgKCFpbmZvLmluUGF0aExheW91dCgpIHx8IChpbmZvLmluUGF0aExheW91dCgpICYm
ICFpc1ZlcnRpY2FsVGV4dCkpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzVmVydGljYWxUZXh0KQot
ICAgICAgICAgICAgICAgIHN2Z0NoYXIubmV3VGV4dENodW5rID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgYXNzaWduZWRYID0gdHJ1ZTsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQg
PSB0cnVlOwotICAgICAgICAgICAgaW5mby5jdXJ4ID0gaW5mby54VmFsdWVOZXh0KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoaW5mby55VmFsdWVBdmFpbGFibGUoKSAmJiAoIWluZm8uaW5Q
YXRoTGF5b3V0KCkgfHwgKGluZm8uaW5QYXRoTGF5b3V0KCkgJiYgaXNWZXJ0aWNhbFRleHQpKSkg
ewotICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAgIHN2Z0No
YXIubmV3VGV4dENodW5rID0gdHJ1ZTsKLQotICAgICAgICAgICAgYXNzaWduZWRZID0gdHJ1ZTsK
LSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAg
aW5mby5jdXJ5ID0gaW5mby55VmFsdWVOZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9h
dCBkeCA9IDAuMGY7Ci0gICAgICAgIGZsb2F0IGR5ID0gMC4wZjsKLQotICAgICAgICAvLyBBcHBs
eSB4LWF4aXMgc2hpZnQKLSAgICAgICAgaWYgKGluZm8uZHhWYWx1ZUF2YWlsYWJsZSgpKSB7Ci0g
ICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAg
ZHggPSBpbmZvLmR4VmFsdWVOZXh0KCk7Ci0gICAgICAgICAgICBpbmZvLmR4ICs9IGR4OwotCi0g
ICAgICAgICAgICBpZiAoIWluZm8uaW5QYXRoTGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgaW5m
by5jdXJ4ICs9IGR4OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQXBwbHkgeS1heGlzIHNoaWZ0
Ci0gICAgICAgIGlmIChpbmZvLmR5VmFsdWVBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgc3Zn
Q2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGR5ID0gaW5mby5keVZh
bHVlTmV4dCgpOwotICAgICAgICAgICAgaW5mby5keSArPSBkeTsKLQotICAgICAgICAgICAgaWYg
KCFpbmZvLmluUGF0aExheW91dCgpKQotICAgICAgICAgICAgICAgIGluZm8uY3VyeSArPSBkeTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFRha2UgbGV0dGVyICYgd29yZCBzcGFjaW5nIGFuZCBr
ZXJuaW5nIGludG8gYWNjb3VudAotICAgICAgICBmbG9hdCBzcGFjaW5nID0gZm9udC5sZXR0ZXJT
cGFjaW5nKCkgKyBjYWxjdWxhdGVDU1NLZXJuaW5nKGxlbmd0aENvbnRleHQsIHN0eWxlKTsKLQot
ICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlciA9IGNoYXJhY3RlcnMgKyAoIWlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGVuZFBvc2l0aW9uIC0gaSA6IHN0YXJ0UG9zaXRpb24g
KyBpKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIGxhc3RDaGFyYWN0ZXIgPSAwOwotCi0gICAgICAg
IGlmICghaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IGVu
ZFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIGxhc3RDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzICsg
ZW5kUG9zaXRpb24gLSBpICsgIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
aSA+IDApCi0gICAgICAgICAgICAgICAgbGFzdENoYXJhY3RlciA9IGNoYXJhY3RlcnMgKyBzdGFy
dFBvc2l0aW9uICsgaSAtIDE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogU1ZHIEtl
cm5pbmcgZG9lc24ndCBnZXQgYXBwbGllZCBvbiB0ZXh0cyBvbiBwYXRoLgotICAgICAgICBib29s
IGFwcGxpZWRTVkdLZXJuaW5nID0gYXBwbHlTVkdLZXJuaW5nKGluZm8sIHN0eWxlLCBsYXN0R2x5
cGgsIHVuaWNvZGVTdHJpbmcsIGdseXBoTmFtZSwgaXNWZXJ0aWNhbFRleHQpOwotICAgICAgICBp
ZiAoaW5mby5uZXh0RHJhd25TZXBlcmF0ZWQgfHwgc3BhY2luZyAhPSAwLjBmIHx8IGFwcGxpZWRT
VkdLZXJuaW5nKSB7Ci0gICAgICAgICAgICBpbmZvLm5leHREcmF3blNlcGVyYXRlZCA9IGZhbHNl
OwotICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciAmJiBGb250Ojp0cmVhdEFzU3BhY2UoKmN1
cnJlbnRDaGFyYWN0ZXIpICYmIGxhc3RDaGFyYWN0ZXIgJiYgIUZvbnQ6OnRyZWF0QXNTcGFjZSgq
bGFzdENoYXJhY3RlcikpIHsKLSAgICAgICAgICAgIHNwYWNpbmcgKz0gZm9udC53b3JkU3BhY2lu
ZygpOwotCi0gICAgICAgICAgICBpZiAoc3BhY2luZyAhPSAwLjBmICYmICFpbmZvLmluUGF0aExh
eW91dCgpKQotICAgICAgICAgICAgICAgIGluZm8ubmV4dERyYXduU2VwZXJhdGVkID0gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IG9yaWVudGF0aW9uQW5nbGUgPSBnbHlwaE9yaWVu
dGF0aW9uVG9BbmdsZShzdmdTdHlsZSwgaXNWZXJ0aWNhbFRleHQsICpjdXJyZW50Q2hhcmFjdGVy
KTsKLQotICAgICAgICBmbG9hdCB4T3JpZW50YXRpb25TaGlmdCA9IDAuMGY7Ci0gICAgICAgIGZs
b2F0IHlPcmllbnRhdGlvblNoaWZ0ID0gMC4wZjsKLSAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNl
ID0gYXBwbHlHbHlwaEFkdmFuY2VBbmRTaGlmdFJlc3BlY3RpbmdPcmllbnRhdGlvbihpc1ZlcnRp
Y2FsVGV4dCwgb3JpZW50YXRpb25BbmdsZSwgZ2x5cGhXaWR0aCwgZ2x5cGhIZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9udCwgc3ZnQ2hhciwgeE9yaWVudGF0aW9uU2hpZnQsIHlPcmllbnRh
dGlvblNoaWZ0KTsKLQotICAgICAgICAvLyBIYW5kbGUgdGV4dFBhdGggbGF5b3V0IG1vZGUKLSAg
ICAgICAgaWYgKGluZm8uaW5QYXRoTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IGV4dHJh
QWR2YW5jZSA9IGlzVmVydGljYWxUZXh0ID8gZHkgOiBkeDsKLSAgICAgICAgICAgIGZsb2F0IG5l
d09mZnNldCA9IEZMVF9NSU47Ci0KLSAgICAgICAgICAgIGlmIChhc3NpZ25lZFggJiYgIWlzVmVy
dGljYWxUZXh0KQotICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IGluZm8uY3VyeDsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGFzc2lnbmVkWSAmJiBpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAg
ICAgICBuZXdPZmZzZXQgPSBpbmZvLmN1cnk7Ci0KLSAgICAgICAgICAgIGZsb2F0IGNvcnJlY3Rl
ZEdseXBoQWR2YW5jZSA9IGdseXBoQWR2YW5jZTsKLQotICAgICAgICAgICAgLy8gSGFuZGxlIGxl
bmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgYnkgc3BlY2lmeWluZyBwZXItY2hhcmFjdGVy
IHNjYWxlIG9wZXJhdGlvbnMKLSAgICAgICAgICAgIGlmIChpbmZvLnBhdGhUZXh0TGVuZ3RoICYm
IGluZm8ucGF0aENodW5rTGVuZ3RoKSB7IAotICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2Fs
VGV4dCkgewotICAgICAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT55U2NhbGUgPSBp
bmZvLnBhdGhDaHVua0xlbmd0aCAvIGluZm8ucGF0aFRleHRMZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgICAgIHNwYWNpbmcgKj0gc3ZnQ2hhci5wYXRoRGF0YS0+eVNjYWxlOwotICAgICAgICAgICAg
ICAgICAgICBjb3JyZWN0ZWRHbHlwaEFkdmFuY2UgKj0gc3ZnQ2hhci5wYXRoRGF0YS0+eVNjYWxl
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN2Z0NoYXIu
cGF0aERhdGEtPnhTY2FsZSA9IGluZm8ucGF0aENodW5rTGVuZ3RoIC8gaW5mby5wYXRoVGV4dExl
bmd0aDsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2luZyAqPSBzdmdDaGFyLnBhdGhEYXRhLT54
U2NhbGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvcnJlY3RlZEdseXBoQWR2YW5jZSAqPSBzdmdD
aGFyLnBhdGhEYXRhLT54U2NhbGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBIYW5kbGUgbGV0dGVyICYgd29yZCBzcGFjaW5nIG9uIHRleHQgcGF0
aAotICAgICAgICAgICAgZmxvYXQgcGF0aEV4dHJhQWR2YW5jZSA9IGluZm8ucGF0aEV4dHJhQWR2
YW5jZTsKLSAgICAgICAgICAgIGluZm8ucGF0aEV4dHJhQWR2YW5jZSArPSBzcGFjaW5nOwotCi0g
ICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT5oaWRkZW4gPSAhaW5mby5uZXh0UGF0aExheW91
dFBvaW50QW5kQW5nbGUoY29ycmVjdGVkR2x5cGhBZHZhbmNlLCBleHRyYUFkdmFuY2UsIG5ld09m
ZnNldCk7Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLQotICAg
ICAgICAgICAgaW5mby5wYXRoRXh0cmFBZHZhbmNlID0gcGF0aEV4dHJhQWR2YW5jZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEFwcGx5IHJvdGF0aW9uCi0gICAgICAgIGlmIChpbmZvLmFuZ2xl
VmFsdWVBdmFpbGFibGUoKSkKLSAgICAgICAgICAgIGluZm8uYW5nbGUgPSBpbmZvLmFuZ2xlVmFs
dWVOZXh0KCk7Ci0KLSAgICAgICAgLy8gQXBwbHkgYmFzZWxpbmUtc2hpZnQKLSAgICAgICAgaWYg
KGluZm8uYmFzZWxpbmVTaGlmdFZhbHVlQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgICAgIHN2Z0No
YXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgZmxvYXQgc2hpZnQgPSBpbmZv
LmJhc2VsaW5lU2hpZnRWYWx1ZU5leHQoKTsKLQotICAgICAgICAgICAgaWYgKGlzVmVydGljYWxU
ZXh0KQotICAgICAgICAgICAgICAgIGluZm8uc2hpZnR4ICs9IHNoaWZ0OwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGluZm8uc2hpZnR5IC09IHNoaWZ0OwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gVGFrZSBkb21pbmFudC1iYXNlbGluZSAvIGFsaWdubWVudC1iYXNlbGluZSBp
bnRvIGFjY291bnQKLSAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgKz0gYWxpZ25tZW50QmFzZWxp
bmVUb1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0UmVuZGVyZXIsIGZvbnQpOworICAgIGludCBi
YXNlbGluZSA9IGJhc2VsaW5lUG9zaXRpb24odHJ1ZSk7CisgICAgaW50IGhlaWdodERpZmZlcmVu
Y2UgPSBiYXNlbGluZSAtIHN0eWxlLT5mb250KCkuYXNjZW50KCk7CiAKLSAgICAgICAgc3ZnQ2hh
ci54ID0gaW5mby5jdXJ4OwotICAgICAgICBzdmdDaGFyLnkgPSBpbmZvLmN1cnk7Ci0gICAgICAg
IHN2Z0NoYXIuYW5nbGUgPSBpbmZvLmFuZ2xlOwotCi0gICAgICAgIC8vIEZvciB0ZXh0IHBhdGhz
IGFueSBzaGlmdCAoZHgvZHkvYmFzZWxpbmUtc2hpZnQpIGhhcyB0byBiZSBhcHBsaWVkIGFmdGVy
IHRoZSByb3RhdGlvbgotICAgICAgICBpZiAoIWluZm8uaW5QYXRoTGF5b3V0KCkpIHsKLSAgICAg
ICAgICAgIHN2Z0NoYXIueCArPSBpbmZvLnNoaWZ0eCArIHhPcmllbnRhdGlvblNoaWZ0OwotICAg
ICAgICAgICAgc3ZnQ2hhci55ICs9IGluZm8uc2hpZnR5ICsgeU9yaWVudGF0aW9uU2hpZnQ7Ci0K
LSAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbkFuZ2xlICE9IDAuMGYpCi0gICAgICAgICAgICAg
ICAgc3ZnQ2hhci5hbmdsZSArPSBvcmllbnRhdGlvbkFuZ2xlOwotCi0gICAgICAgICAgICBpZiAo
c3ZnQ2hhci5hbmdsZSAhPSAwLjBmKQotICAgICAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBl
cmF0ZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ZnQ2hhci5wYXRo
RGF0YS0+b3JpZW50YXRpb25BbmdsZSA9IG9yaWVudGF0aW9uQW5nbGU7Ci0KLSAgICAgICAgICAg
IGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBzdmdDaGFyLmFuZ2xlIC09IDkw
LjBmOwotCi0gICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2hpZnQgPSBpbmZvLnNoaWZ0
eCArIHhPcmllbnRhdGlvblNoaWZ0OwotICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eVNo
aWZ0ID0gaW5mby5zaGlmdHkgKyB5T3JpZW50YXRpb25TaGlmdDsKLQotICAgICAgICAgICAgLy8g
VHJhbnNsYXRlIHRvIGdseXBoIG1pZHBvaW50Ci0gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRl
eHQpIHsKLSAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2hpZnQgKz0gaW5mby5k
eDsKLSAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT55U2hpZnQgLT0gZ2x5cGhBZHZh
bmNlIC8gMi4wZjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hh
ci5wYXRoRGF0YS0+eFNoaWZ0IC09IGdseXBoQWR2YW5jZSAvIDIuMGY7Ci0gICAgICAgICAgICAg
ICAgc3ZnQ2hhci5wYXRoRGF0YS0+eVNoaWZ0ICs9IGluZm8uZHk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KKyAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50
cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXpl
OyArK2kpIHsKKyAgICAgICAgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IG1fdGV4
dEZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdChmcmFnbWVu
dC54LCBmcmFnbWVudC55IC0gYmFzZWxpbmUsIGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWln
aHQgKyBoZWlnaHREaWZmZXJlbmNlKTsKIAotICAgICAgICAvLyBBZHZhbmNlIHRvIG5ldyBwb3Np
dGlvbgotICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAgIHN2Z0NoYXIu
ZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgaW5mby5jdXJ5ICs9IGdseXBoQWR2
YW5jZSArIHNwYWNpbmc7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW5mby5jdXJ4ICs9
IGdseXBoQWR2YW5jZSArIHNwYWNpbmc7CisgICAgICAgIGlmICghZnJhZ21lbnQudHJhbnNmb3Jt
LmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZyYWdtZW50LnRyYW5z
Zm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7CiAKLSAgICAgICAgLy8gQWR2YW5jZSB0byBuZXh0
IGNoYXJhY3RlciBncm91cAotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGNoYXJzQ29uc3Vt
ZWQ7ICsraykgewotICAgICAgICAgICAgaW5mby5zdmdDaGFycy5hcHBlbmQoc3ZnQ2hhcik7Ci0g
ICAgICAgICAgICBpbmZvLnByb2Nlc3NlZFNpbmdsZUNoYXJhY3RlcigpOwotICAgICAgICAgICAg
c3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgc3ZnQ2hhci5uZXdU
ZXh0Q2h1bmsgPSBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICB0ZXh0UmVjdC51bml0ZShmcmFn
bWVudFJlY3QpOwogICAgIH0KLX0KLQotRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmNhbGN1
bGF0ZUdseXBoQm91bmRhcmllcyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwb3NpdGlvbiwgY29u
c3QgU1ZHQ2hhciYgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGludCBjaGFyc0NvbnN1bWVkID0g
MDsKLSAgICBTdHJpbmcgZ2x5cGhOYW1lOwotICAgIFN0cmluZyB1bmljb2RlU3RyaW5nOwotICAg
IGZsb2F0IGdseXBoV2lkdGggPSAwLjBmOwotICAgIGZsb2F0IGdseXBoSGVpZ2h0ID0gMC4wZjsK
LSAgICBtZWFzdXJlQ2hhcmFjdGVyKHN0eWxlLCBwb3NpdGlvbiwgY2hhcnNDb25zdW1lZCwgZ2x5
cGhOYW1lLCB1bmljb2RlU3RyaW5nLCBnbHlwaFdpZHRoLCBnbHlwaEhlaWdodCk7Ci0KLSAgICBG
bG9hdFJlY3QgZ2x5cGhSZWN0KGNoYXJhY3Rlci54LCBjaGFyYWN0ZXIueSAtIHN0eWxlLT5mb250
KCkuYXNjZW50KCksIGdseXBoV2lkdGgsIGdseXBoSGVpZ2h0KTsKLSAgICBnbHlwaFJlY3QgPSBj
aGFyYWN0ZXIuY2hhcmFjdGVyVHJhbnNmb3JtKCkubWFwUmVjdChnbHlwaFJlY3QpOwotICAgIGlm
IChtX2NodW5rVHJhbnNmb3JtYXRpb24uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm4gZ2x5
cGhSZWN0OwotCi0gICAgcmV0dXJuIG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5tYXBSZWN0KGdseXBo
UmVjdCk7Ci19Ci0KLUludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlQm91bmRhcmll
cygpIGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IHRleHRSZWN0OwotICAgIGludCBiYXNlbGluZSA9
IGJhc2VsaW5lUG9zaXRpb24odHJ1ZSk7Ci0KLSAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5r
UGFydD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3ZnVGV4dENodW5rUGFydHMuZW5kKCk7Ci0g
ICAgZm9yIChWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9z
dmdUZXh0Q2h1bmtQYXJ0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRleHRS
ZWN0LnVuaXRlKGl0LT5maXJzdENoYXJhY3Rlci0+Y2hhcmFjdGVyVHJhbnNmb3JtKCkubWFwUmVj
dChGbG9hdFJlY3QoaXQtPmZpcnN0Q2hhcmFjdGVyLT54LCBpdC0+Zmlyc3RDaGFyYWN0ZXItPnkg
LSBiYXNlbGluZSwgaXQtPndpZHRoLCBpdC0+aGVpZ2h0KSkpOwotCi0gICAgaWYgKG1fY2h1bmtU
cmFuc2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KHRleHRSZWN0KTsKIAotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fY2h1bmtUcmFu
c2Zvcm1hdGlvbi5tYXBSZWN0KHRleHRSZWN0KSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QodGV4dFJlY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDY4ODc0KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNTUgKzI1LDQ3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIklubGluZVRleHRC
b3guaCIKLSNpbmNsdWRlICJTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgiCi0jaW5jbHVkZSAiU1ZH
VGV4dExheW91dFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZTsKIGNsYXNz
IFNWR1Jvb3RJbmxpbmVCb3g7CiAKLXN0cnVjdCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOwotc3Ry
dWN0IFNWR0xhc3RHbHlwaEluZm87Ci0KIGNsYXNzIFNWR0lubGluZVRleHRCb3ggOiBwdWJsaWMg
SW5saW5lVGV4dEJveCB7CiBwdWJsaWM6CiAgICAgU1ZHSW5saW5lVGV4dEJveChSZW5kZXJPYmpl
Y3QqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGluZVRleHRCb3goKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIGludCB2aXJ0dWFsTG9naWNhbEhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbEhlaWdodDsgfQotICAgIHZvaWQgc2V0TG9naWNhbEhlaWdo
dChpbnQgaGVpZ2h0KSB7IG1fbG9naWNhbEhlaWdodCA9IGhlaWdodDsgfQorICAgIHZpcnR1YWwg
aW50IHZpcnR1YWxMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAg
ICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoaW50IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsg
fQogCiAgICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uVG9wKCkgeyByZXR1cm4gbV95OyB9Ci0gICAg
dmlydHVhbCBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0OyB9
CisgICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkgeyByZXR1cm4gbV9oZWlnaHQ7IH0K
ICAgICB2aXJ0dWFsIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQgeCwgYm9vbCBpbmNsdWRlUGFy
dGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHBvc2l0aW9uRm9yT2Zm
c2V0KGludCBvZmZzZXQpIGNvbnN0OwogCisgICAgdm9pZCBwYWludFNlbGVjdGlvbkJhY2tncm91
bmQoUGFpbnRJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgYWJzeCwg
aW50IGFic3ksIGludCBzdGFydFBvcywgaW50IGVuZFBvcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c2VsZWN0aW9uU3RhcnRFbmQoaW50JiBzdGFydFBvcywgaW50JiBlbmRQb3MpOwotICAgIHZvaWQg
bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMoaW50JiBzdGFydFBv
cywgaW50JiBlbmRQb3MsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGludCBzdGFydFBv
c2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pOwogCi0gICAgU1ZHUm9vdElubGluZUJveCogc3ZnUm9v
dElubGluZUJveCgpIGNvbnN0OworICAgIGJvb2wgbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQmIHN0YXJ0UG9zaXRp
b24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0OwogCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBz
aGFyZWQgd2l0aCBTVkdSb290SW5saW5lQm94ICAgICAKLSAgICB2b2lkIG1lYXN1cmVDaGFyYWN0
ZXIoUmVuZGVyU3R5bGUqLCBpbnQgcG9zaXRpb24sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5n
JiBnbHlwaE5hbWUsIFN0cmluZyYgdW5pY29kZVN0cmluZywgZmxvYXQmIGdseXBoV2lkdGgsIGZs
b2F0JiBnbHlwaEhlaWdodCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUdseXBoQm91
bmRhcmllcyhSZW5kZXJTdHlsZSosIGludCBwb3NpdGlvbiwgY29uc3QgU1ZHQ2hhciYpIGNvbnN0
OworICAgIHZpcnR1YWwgSW50UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Q7CiAKLSAg
ICB2b2lkIGJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYsIFNW
R0xhc3RHbHlwaEluZm8mKTsKKyAgICB2b2lkIGNsZWFyVGV4dEZyYWdtZW50cygpIHsgbV90ZXh0
RnJhZ21lbnRzLmNsZWFyKCk7IH0KKyAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgdGV4dEZy
YWdtZW50cygpIHsgcmV0dXJuIG1fdGV4dEZyYWdtZW50czsgfQorICAgIGNvbnN0IFZlY3RvcjxT
VkdUZXh0RnJhZ21lbnQ+JiB0ZXh0RnJhZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RnJh
Z21lbnRzOyB9CiAKLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNodW5rVHJhbnNmb3JtYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2NodW5rVHJhbnNmb3JtYXRpb247IH0KLSAgICB2b2lkIHNl
dENodW5rVHJhbnNmb3JtYXRpb24oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsg
bV9jaHVua1RyYW5zZm9ybWF0aW9uID0gdHJhbnNmb3JtOyB9Ci0gICAgdm9pZCBhZGRDaHVua1Bh
cnRJbmZvcm1hdGlvbihjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSB7IG1fc3ZnVGV4dENo
dW5rUGFydHMuYXBwZW5kKHBhcnQpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1Bh
cnQ+JiBzdmdUZXh0Q2h1bmtQYXJ0cygpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnVGV4dENodW5rUGFy
dHM7IH0KKyAgICBib29sIHN0YXJ0c05ld1RleHRDaHVuaygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnRzTmV3VGV4dENodW5rOyB9CisgICAgdm9pZCBzZXRTdGFydHNOZXdUZXh0Q2h1bmsoYm9vbCBu
ZXdUZXh0Q2h1bmspIHsgbV9zdGFydHNOZXdUZXh0Q2h1bmsgPSBuZXdUZXh0Q2h1bms7IH0KIAot
ICAgIHZpcnR1YWwgSW50UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Q7CisgICAgaW50
IG9mZnNldEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgRmxvYXRS
ZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50Jiwg
aW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24sIFJlbmRl
clN0eWxlKik7CiAKIHByaXZhdGU6Ci0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGJ1aWxkQ2h1bmtUcmFuc2Zvcm1h
dGlvbihTVkdDaGFyJiBmaXJzdENoYXJhY3RlcikgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CiAK
ICAgICBib29sIGFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComLCBSZW5k
ZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcmVsZWFzZVBhaW50aW5nUmVzb3Vy
Y2UoR3JhcGhpY3NDb250ZXh0KiYpOwpAQCAtODEsMjIgKzczLDE3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4
dComLCBUZXh0UnVuJiwgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHJlc3RvcmVHcmFwaGljc0Nv
bnRleHRBZnRlclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgVGV4dFJ1biYpOwogCi0g
ICAgdm9pZCBjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdChSZW5kZXJTdHlsZSopOwotICAgIHZv
aWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIHRl
eHRPcmlnaW4sIEVUZXh0RGVjb3JhdGlvbiwgYm9vbCBoYXNTZWxlY3Rpb24pOwotICAgIHZvaWQg
cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9p
bnQmIHRleHRPcmlnaW4sIFJlbmRlck9iamVjdCosIEVUZXh0RGVjb3JhdGlvbik7Ci0gICAgdm9p
ZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0
T3JpZ2luLCBSZW5kZXJTdHlsZSopOwotICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHNlbGVjdGlvblN0eWxlLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVk
VGV4dE9ubHkpOwotICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwg
aW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKLQotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0
Rm9yVGV4dENodW5rUGFydChjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiwgaW50IHBhcnRTdGFydFBv
cywgaW50IHBhcnRFbmRQb3MsIFJlbmRlclN0eWxlKik7CisgICAgdm9pZCBwYWludERlY29yYXRp
b24oR3JhcGhpY3NDb250ZXh0KiwgRVRleHREZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmKTsKKyAgICB2b2lkIHBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQq
LCBFVGV4dERlY29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIFJlbmRlck9iamVjdCog
ZGVjb3JhdGlvblJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBo
aWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pOworICAgIHZvaWQgcGFpbnRU
ZXh0KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHNlbGVjdGlv
blN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBw
YWludFNlbGVjdGVkVGV4dE9ubHkpOwogCiBwcml2YXRlOgotICAgIGludCBtX2xvZ2ljYWxIZWln
aHQ7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fY2h1bmtUcmFuc2Zvcm1hdGlvbjsKLSAgICBWZWN0
b3I8U1ZHVGV4dENodW5rUGFydD4gbV9zdmdUZXh0Q2h1bmtQYXJ0czsKLSAgICBtdXRhYmxlIFNW
R1RleHRDaHVua1BhcnQgbV9jdXJyZW50Q2h1bmtQYXJ0OwotICAgIFJlbmRlclNWR1Jlc291cmNl
KiBtX3BhaW50aW5nUmVzb3VyY2U7CisgICAgaW50IG1faGVpZ2h0OwogICAgIGludCBtX3BhaW50
aW5nUmVzb3VyY2VNb2RlOworICAgIGJvb2wgbV9zdGFydHNOZXdUZXh0Q2h1bmsgOiAxOworICAg
IFJlbmRlclNWR1Jlc291cmNlKiBtX3BhaW50aW5nUmVzb3VyY2U7CisgICAgVmVjdG9yPFNWR1Rl
eHRGcmFnbWVudD4gbV90ZXh0RnJhZ21lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2
aXNpb24gNjg4NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+Ci0gKiAgICAg
ICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgotICogICAgICAgICAgIChDKSAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0yNywxNSArMjcsMTMgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHSW5saW5lVGV4dC5oIgogI2luY2x1ZGUgIlNWR0lubGluZUZsb3dCb3guaCIKICNpbmNsdWRl
ICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2lu
Y2x1ZGUgIlNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50LmgiCiAKLS8vIFRleHQgY2h1bmsgcGFydCBwcm9wYWdhdGlvbiBjYW4gYmUg
dHJhY2VkIGJ5IHNldHRpbmcgdGhpcyB2YXJpYWJsZSA+IDAuCi0jZGVmaW5lIERFQlVHX0NIVU5L
X1BBUlRfUFJPUEFHQVRJT04gMAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU1ZHUm9v
dElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQpAQCAtNDYs
MTIgKzQ0LDI4IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAg
ICBSZW5kZXJPYmplY3QqIGJveFJlbmRlcmVyID0gcmVuZGVyZXIoKTsKICAgICBBU1NFUlQoYm94
UmVuZGVyZXIpOwogCisgICAgYm9vbCBpc1ByaW50aW5nID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQo
KS0+cHJpbnRpbmcoKTsKKyAgICBib29sIGhhc1NlbGVjdGlvbiA9ICFpc1ByaW50aW5nICYmIHNl
bGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOworCiAgICAgUGFp
bnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CisgICAgaWYgKGhhc1NlbGVjdGlvbikg
eworICAgICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aXNT
VkdJbmxpbmVUZXh0Qm94KCkpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHSW5saW5l
VGV4dEJveCo+KGNoaWxkKS0+cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKGNoaWxkUGFpbnRJbmZv
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5pc1NWR0lubGluZUZsb3dCb3goKSkKKyAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxTVkdJbmxpbmVGbG93Qm94Kj4oY2hpbGQpLT5wYWlu
dFNlbGVjdGlvbkJhY2tncm91bmQoY2hpbGRQYWludEluZm8pOworICAgICAgICB9CisgICAgfQor
CiAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogCiAgICAgaWYgKFNWR1JlbmRl
clN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoYm94UmVuZGVyZXIsIGNoaWxkUGFp
bnRJbmZvKSkgewotICAgICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpCisgICAgICAgIGZvciAoSW5saW5l
Qm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxp
bmUoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR0lubGluZVRleHRCb3goKSkKKyAg
ICAgICAgICAgICAgICBTVkdJbmxpbmVGbG93Qm94Ojpjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVj
dEZvclJlbmRlcmVyKHRvUmVuZGVyU1ZHSW5saW5lVGV4dChzdGF0aWNfY2FzdDxTVkdJbmxpbmVU
ZXh0Qm94Kj4oY2hpbGQpLT50ZXh0UmVuZGVyZXIoKSkpOworCiAgICAgICAgICAgICBjaGlsZC0+
cGFpbnQoY2hpbGRQYWludEluZm8sIDAsIDApOworICAgICAgICB9CiAgICAgfQogCiAgICAgU1ZH
UmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudChib3hSZW5kZXJlciwgY2hpbGRQ
YWludEluZm8sIHBhaW50SW5mby5jb250ZXh0KTsKQEAgLTYwLDEzMCArNzQsNTAgQEAgdm9pZCBT
VkdSb290SW5saW5lQm94OjpwYWludChQYWludEluZm8mIAogCiB2b2lkIFNWR1Jvb3RJbmxpbmVC
b3g6OmNvbXB1dGVQZXJDaGFyYWN0ZXJMYXlvdXRJbmZvcm1hdGlvbigpCiB7Ci0gICAgLy8gQ2xl
YW4gdXAgYW55IHByZXZpb3VzIGxheW91dCBpbmZvcm1hdGlvbgotICAgIG1fc3ZnQ2hhcnMuY2xl
YXIoKTsKLSAgICBtX3N2Z1RleHRDaHVua3MuY2xlYXIoKTsKLQotICAgIC8vIEJ1aWxkIGxheW91
dCBpbmZvcm1hdGlvbiBmb3IgYWxsIGNvbnRhaW5lZCByZW5kZXIgb2JqZWN0cwotICAgIFNWR0No
YXJhY3RlckxheW91dEluZm8gY2hhckluZm87Ci0gICAgYnVpbGRMYXlvdXRJbmZvcm1hdGlvbih0
aGlzLCBjaGFySW5mbyk7Ci0gICAgbV9zdmdDaGFycyA9IGNoYXJJbmZvLnN2Z0NoYXJzOwotCi0g
ICAgLy8gTm93IGFsbCBsYXlvdXQgaW5mb3JtYXRpb24gYXJlIGF2YWlsYWJsZSBmb3IgZXZlcnkg
Y2hhcmFjdGVyCi0gICAgLy8gY29udGFpbmVkIGluIGFueSBvZiBvdXIgY2hpbGQgaW5saW5lL2Zs
b3cgYm94ZXMuIEJ1aWxkIGxpc3QKLSAgICAvLyBvZiB0ZXh0IGNodW5rcyBub3csIHRvIGJlIGFi
bGUgdG8gYXBwbHkgdGV4dC1hbmNob3Igc2hpZnRzLgotICAgIFNWR1RleHRDaHVua0xheW91dElu
Zm8gY2h1bmtJbmZvOwotICAgIGNodW5rSW5mby5idWlsZFRleHRDaHVua3MobV9zdmdDaGFycy5i
ZWdpbigpLCBtX3N2Z0NoYXJzLmVuZCgpLCB0aGlzKTsKLQotICAgIC8vIExheW91dCBhbGwgdGV4
dCBjaHVua3MKLSAgICAvLyB0ZXh0LWFuY2hvciBuZWVkcyB0byBiZSBhcHBsaWVkIHRvIGluZGl2
aWR1YWwgY2h1bmtzLgotICAgIGNodW5rSW5mby5sYXlvdXRUZXh0Q2h1bmtzKCk7Ci0gICAgbV9z
dmdUZXh0Q2h1bmtzID0gY2h1bmtJbmZvLnRleHRDaHVua3MoKTsKKyAgICAvLyBQZXJmb3JtIFNW
RyB0ZXh0IGxheW91dCBwaGFzZSB0d28gKHNlZSBTVkdUZXh0TGF5b3V0RW5naW5lIGZvciBkZXRh
aWxzKS4KKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lIGNoYXJhY3RlckxheW91dDsKKyAgICBsYXlv
dXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXModGhpcywgY2hhcmFjdGVyTGF5b3V0KTsKIAotICAgIC8v
IFByb3BhZ2F0ZSB0ZXh0IGNodW5rIHBhcnQgaW5mb3JtYXRpb24gdG8gYWxsIFNWR0lubGluZVRl
eHRCb3hlcywgc2VlIFNWR1RleHRDaHVua0xheW91dEluZm8uaCBmb3IgZGV0YWlscwotICAgIHBy
b3BhZ2F0ZVRleHRDaHVua1BhcnRJbmZvcm1hdGlvbigpOworICAgIC8vIFBlcmZvcm0gU1ZHIHRl
eHQgbGF5b3V0IHBoYXNlIHRocmVlIChzZWUgU1ZHVGV4dENodW5rQnVpbGRlciBmb3IgZGV0YWls
cykuCisgICAgY2hhcmFjdGVyTGF5b3V0LmZpbmlzaExheW91dCgpOwogCi0gICAgLy8gTGF5b3V0
IGFsbCBjaGlsZCBib3hlcy4KKyAgICAvLyBQZXJmb3JtIFNWRyB0ZXh0IGxheW91dCBwaGFzZSBm
b3VyCisgICAgLy8gUG9zaXRpb24gJiByZXNpemUgYWxsIFNWR0lubGluZVRleHQvRmxvd0JveGVz
IGluIHRoZSBpbmxpbmUgYm94IHRyZWUsIHJlc2l6ZSB0aGUgcm9vdCBib3ggYXMgd2VsbCBhcyB0
aGUgUmVuZGVyU1ZHVGV4dCBwYXJlbnQgYmxvY2suCiAgICAgbGF5b3V0Q2hpbGRCb3hlcyh0aGlz
KTsKLQotICAgIC8vIFJlc2l6ZSBvdXIgcm9vdCBib3ggYW5kIG91ciBSZW5kZXJTVkdUZXh0IHBh
cmVudCBibG9jawogICAgIGxheW91dFJvb3RCb3goKTsKIH0KIAotdm9pZCBTVkdSb290SW5saW5l
Qm94OjpidWlsZExheW91dEluZm9ybWF0aW9uKElubGluZUZsb3dCb3gqIHN0YXJ0LCBTVkdDaGFy
YWN0ZXJMYXlvdXRJbmZvJiBpbmZvKQordm9pZCBTVkdSb290SW5saW5lQm94OjpsYXlvdXRDaGFy
YWN0ZXJzSW5UZXh0Qm94ZXMoSW5saW5lRmxvd0JveCogc3RhcnQsIFNWR1RleHRMYXlvdXRFbmdp
bmUmIGNoYXJhY3RlckxheW91dCkKIHsKLSAgICBpZiAoc3RhcnQtPmlzUm9vdElubGluZUJveCgp
KSB7Ci0gICAgICAgIEFTU0VSVChzdGFydC0+cmVuZGVyZXIoKS0+bm9kZSgpLT5oYXNUYWdOYW1l
KFNWR05hbWVzOjp0ZXh0VGFnKSk7Ci0KLSAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dCogcG9zaXRpb25pbmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudCo+KHN0YXJ0LT5yZW5kZXJlcigpLT5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocG9zaXRp
b25pbmdFbGVtZW50KTsKLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uaW5nRWxlbWVudC0+cGFyZW50
Tm9kZSgpKTsKLQotICAgICAgICBpbmZvLmFkZExheW91dEluZm9ybWF0aW9uKHBvc2l0aW9uaW5n
RWxlbWVudCk7Ci0gICAgfQorICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IHN0YXJ0LT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAg
aWYgKGNoaWxkLT5pc1NWR0lubGluZVRleHRCb3goKSkgeworICAgICAgICAgICAgQVNTRVJUKGNo
aWxkLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+cmVuZGVyZXIoKS0+
aXNTVkdJbmxpbmVUZXh0KCkpOwogCi0gICAgU1ZHTGFzdEdseXBoSW5mbyBsYXN0R2x5cGg7Ci0g
ICAgCi0gICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjdXJy
OyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5yZW5kZXJl
cigpLT5pc1RleHQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gq
PihjdXJyKS0+YnVpbGRMYXlvdXRJbmZvcm1hdGlvbihpbmZvLCBsYXN0R2x5cGgpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyLT5pc0lubGluZUZsb3dCb3goKSk7Ci0g
ICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxv
d0JveCo+KGN1cnIpOworICAgICAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0
YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihjaGlsZCk7CisgICAgICAgICAgICBjaGFyYWN0
ZXJMYXlvdXQubGF5b3V0SW5saW5lVGV4dEJveCh0ZXh0Qm94KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+aXNJbmxpbmVGbG93Qm94KCkpOwogCiAgICAgICAg
ICAgICAvLyBTa2lwIGdlbmVyYXRlZCBjb250ZW50LgotICAgICAgICAgICAgaWYgKCFmbG93Qm94
LT5yZW5kZXJlcigpLT5ub2RlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gY2hpbGQtPnJl
bmRlcmVyKCktPm5vZGUoKTsKKyAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgYm9vbCBpc0FuY2hvciA9IGZsb3dCb3gtPnJlbmRl
cmVyKCktPm5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6YVRhZyk7Ci0gICAgICAgICAgICBi
b29sIGlzVGV4dFBhdGggPSBmbG93Qm94LT5yZW5kZXJlcigpLT5ub2RlKCktPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnRleHRQYXRoVGFnKTsKLQotICAgICAgICAgICAgaWYgKCFpc1RleHRQYXRoICYm
ICFpc0FuY2hvcikgewotICAgICAgICAgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQq
IHBvc2l0aW9uaW5nRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQqPihmbG93Qm94LT5yZW5kZXJlcigpLT5ub2RlKCkpOwotICAgICAgICAgICAgICAgIEFTU0VS
VChwb3NpdGlvbmluZ0VsZW1lbnQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbmlu
Z0VsZW1lbnQtPnBhcmVudE5vZGUoKSk7Ci0KLSAgICAgICAgICAgICAgICBpbmZvLmFkZExheW91
dEluZm9ybWF0aW9uKHBvc2l0aW9uaW5nRWxlbWVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KCFpc0FuY2hvcikgewotICAgICAgICAgICAgICAgIGluZm8uc2V0SW5QYXRoTGF5b3V0KHRydWUp
OwotCi0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRleHQtYW5jaG9yL3RleHRMZW5ndGggb24g
cGF0aCwgd2hpY2ggaXMgc3BlY2lhbC4KLSAgICAgICAgICAgICAgICBTVkdUZXh0Q29udGVudEVs
ZW1lbnQqIHRleHRDb250ZW50ID0gMDsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gZmxv
d0JveC0+cmVuZGVyZXIoKS0+bm9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChub2RlICYmIG5v
ZGUtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudCA9IHN0
YXRpY19jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudCo+KG5vZGUpOwotICAgICAgICAgICAgICAg
IEFTU0VSVCh0ZXh0Q29udGVudCk7Ci0KLSAgICAgICAgICAgICAgICBFTGVuZ3RoQWRqdXN0IGxl
bmd0aEFkanVzdCA9IChFTGVuZ3RoQWRqdXN0KSB0ZXh0Q29udGVudC0+bGVuZ3RoQWRqdXN0KCk7
Ci0gICAgICAgICAgICAgICAgRVRleHRBbmNob3IgYW5jaG9yID0gZmxvd0JveC0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+dGV4dEFuY2hvcigpOwotICAgICAgICAgICAgICAgIGZs
b2F0IHRleHRBbmNob3JTdGFydE9mZnNldCA9IDAuMGY7Ci0KLSAgICAgICAgICAgICAgICAvLyBJ
bml0aWFsaXplIHN1Yi1sYXlvdXQuIFdlIG5lZWQgdG8gY3JlYXRlIHRleHQgY2h1bmtzIGZyb20g
dGhlIHRleHRQYXRoCi0gICAgICAgICAgICAgICAgLy8gY2hpbGRyZW4gdXNpbmcgb3VyIHN0YW5k
YXJkIGxheW91dCBjb2RlLCB0byBiZSBhYmxlIHRvIG1lYXN1cmUgdGhlCi0gICAgICAgICAgICAg
ICAgLy8gdGV4dCBsZW5ndGggdXNpbmcgb3VyIG5vcm1hbCBtZXRob2RzIGFuZCBub3QgdGV4dFBh
dGggc3BlY2lmaWMgaGFja3MuCi0gICAgICAgICAgICAgICAgVmVjdG9yPFNWR1RleHRDaHVuaz4g
dGVtcENodW5rczsKLQotICAgICAgICAgICAgICAgIFNWR0NoYXJhY3RlckxheW91dEluZm8gdGVt
cENoYXJJbmZvOwotICAgICAgICAgICAgICAgIGJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oZmxvd0Jv
eCwgdGVtcENoYXJJbmZvKTsKLQotICAgICAgICAgICAgICAgIFNWR1RleHRDaHVua0xheW91dElu
Zm8gdGVtcENodW5rSW5mbzsKLSAgICAgICAgICAgICAgICB0ZW1wQ2h1bmtJbmZvLmJ1aWxkVGV4
dENodW5rcyh0ZW1wQ2hhckluZm8uc3ZnQ2hhcnMuYmVnaW4oKSwgdGVtcENoYXJJbmZvLnN2Z0No
YXJzLmVuZCgpLCBmbG93Qm94KTsKLSAgICAgICAgICAgICAgICB0ZW1wQ2h1bmtzID0gdGVtcENo
dW5rSW5mby50ZXh0Q2h1bmtzKCk7Ci0KLSAgICAgICAgICAgICAgICBWZWN0b3I8U1ZHVGV4dENo
dW5rPjo6aXRlcmF0b3IgaXQgPSB0ZW1wQ2h1bmtzLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAg
VmVjdG9yPFNWR1RleHRDaHVuaz46Oml0ZXJhdG9yIGVuZCA9IHRlbXBDaHVua3MuZW5kKCk7Ci0K
LSAgICAgICAgICAgICAgICBmbG9hdCBjb21wdXRlZExlbmd0aCA9IDAuMGY7Ci0gCi0gICAgICAg
ICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgICAgICBT
VkdUZXh0Q2h1bmsmIGNodW5rID0gKml0OwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5
IHRleHQtbGVuZ3RoIGNhbGN1bGF0aW9uCi0gICAgICAgICAgICAgICAgICAgIGluZm8ucGF0aEV4
dHJhQWR2YW5jZSArPSBjYWxjdWxhdGVUZXh0TGVuZ3RoQ29ycmVjdGlvbkZvclRleHRDaHVuayhj
aHVuaywgbGVuZ3RoQWRqdXN0LCBjb21wdXRlZExlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGxlbmd0aEFkanVzdCA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVT
VF9TUEFDSU5HQU5ER0xZUEhTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnBhdGhU
ZXh0TGVuZ3RoICs9IGNvbXB1dGVkTGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5m
by5wYXRoQ2h1bmtMZW5ndGggKz0gY2h1bmsudGV4dExlbmd0aDsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0ZXh0LWFuY2hvciBzdGFy
dCBvZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvciA9PSBUQV9TVEFSVCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIHRl
eHRBbmNob3JTdGFydE9mZnNldCArPSBjYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnRGb3JUZXh0Q2h1
bmsoY2h1bmssIGFuY2hvcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aW5mby5hZGRMYXlvdXRJbmZvcm1hdGlvbihmbG93Qm94LCB0ZXh0QW5jaG9yU3RhcnRPZmZzZXQp
OworICAgICAgICAgICAgU1ZHSW5saW5lRmxvd0JveCogZmxvd0JveCA9IHN0YXRpY19jYXN0PFNW
R0lubGluZUZsb3dCb3gqPihjaGlsZCk7CisgICAgICAgICAgICBib29sIGlzVGV4dFBhdGggPSBu
b2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0ZXh0UGF0aFRhZyk7CisgICAgICAgICAgICBpZiAo
aXNUZXh0UGF0aCkgeworICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHRleHQgY2h1bmtzIGZvciBh
bGwgPHRleHRQYXRoPiBjaGlsZHJlbiwgdXNpbmcgdGhlIGxpbmUgbGF5b3V0IGFsZ29yaXRobS4K
KyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZWQgYXMgdGV4dC1hbmNob3IgaXMganVz
dCBhbiBhZGRpdGlvbmFsIHN0YXJ0T2Zmc2V0IGZvciB0ZXh0IHBhdGhzLgorICAgICAgICAgICAg
ICAgIFNWR1RleHRMYXlvdXRFbmdpbmUgbGluZUxheW91dDsKKyAgICAgICAgICAgICAgICBsYXlv
dXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMoZmxvd0JveCwgbGluZUxheW91dCk7CisgICAgICAgICAg
ICAgICAgY2hhcmFjdGVyTGF5b3V0LmJlZ2luVGV4dFBhdGhMYXlvdXQoY2hpbGQtPnJlbmRlcmVy
KCksIGxpbmVMYXlvdXQpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmbG9hdCBzaGlm
dHhTYXZlZCA9IGluZm8uc2hpZnR4OwotICAgICAgICAgICAgZmxvYXQgc2hpZnR5U2F2ZWQgPSBp
bmZvLnNoaWZ0eTsKLQotICAgICAgICAgICAgYnVpbGRMYXlvdXRJbmZvcm1hdGlvbihmbG93Qm94
LCBpbmZvKTsKLSAgICAgICAgICAgIGluZm8ucHJvY2Vzc2VkQ2h1bmsoc2hpZnR4U2F2ZWQsIHNo
aWZ0eVNhdmVkKTsKKyAgICAgICAgICAgIGxheW91dENoYXJhY3RlcnNJblRleHRCb3hlcyhmbG93
Qm94LCBjaGFyYWN0ZXJMYXlvdXQpOwogCiAgICAgICAgICAgICBpZiAoaXNUZXh0UGF0aCkKLSAg
ICAgICAgICAgICAgICBpbmZvLnNldEluUGF0aExheW91dChmYWxzZSk7CisgICAgICAgICAgICAg
ICAgY2hhcmFjdGVyTGF5b3V0LmVuZFRleHRQYXRoTGF5b3V0KCk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC0xOTEsNyArMTI1LDEwIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRMYXlv
dXRJbmZvcm0KIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Q2hpbGRCb3hlcyhJbmxpbmVG
bG93Qm94KiBzdGFydCkKIHsKICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBzdGFydC0+Zmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAg
IGlmIChjaGlsZC0+cmVuZGVyZXIoKS0+aXNUZXh0KCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5p
c1NWR0lubGluZVRleHRCb3goKSkgeworICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5yZW5kZXJl
cigpKTsKKyAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+cmVuZGVyZXIoKS0+aXNTVkdJbmxpbmVU
ZXh0KCkpOworCiAgICAgICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3RhdGlj
X2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGNoaWxkKTsKICAgICAgICAgICAgIEludFJlY3QgYm94
UmVjdCA9IHRleHRCb3gtPmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKICAgICAgICAgICAgIHRleHRC
b3gtPnNldFgoYm94UmVjdC54KCkpOwpAQCAtMjAwLDcgKzEzNyw3IEBAIHZvaWQgU1ZHUm9vdElu
bGluZUJveDo6bGF5b3V0Q2hpbGRCb3hlcygKICAgICAgICAgICAgIHRleHRCb3gtPnNldExvZ2lj
YWxIZWlnaHQoYm94UmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBBU1NFUlQoY2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKTsKLSAgIAorCiAgICAgICAgICAgICAv
LyBTa2lwIGdlbmVyYXRlZCBjb250ZW50LgogICAgICAgICAgICAgaWYgKCFjaGlsZC0+cmVuZGVy
ZXIoKS0+bm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjU3LDEwNiArMTk0
LDI3IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Um9vdEJveCgpCiAgICAgc2V0TGlu
ZVRvcEJvdHRvbVBvc2l0aW9ucygwLCBoZWlnaHRCbG9jayk7CiB9CiAKLXZvaWQgU1ZHUm9vdElu
bGluZUJveDo6cHJvcGFnYXRlVGV4dENodW5rUGFydEluZm9ybWF0aW9uKCkKK0lubGluZUJveCog
U1ZHUm9vdElubGluZUJveDo6Y2xvc2VzdExlYWZDaGlsZEZvclBvc2l0aW9uKGNvbnN0IEludFBv
aW50JiBwb2ludCkKIHsKLSNpZiBERUJVR19DSFVOS19QQVJUX1BST1BBR0FUSU9OID4gMAotICAg
IExpc3RIYXNoU2V0PFNWR0lubGluZVRleHRCb3gqPiBib3hlczsKLSNlbmRpZgotCi0gICAgLy8g
TG9vcCB0aHJvdWdoIGFsbCB0ZXh0IGNodW5rcwotICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1
bms+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N2Z1RleHRDaHVua3MuZW5kKCk7Ci0gICAgZm9y
IChWZWN0b3I8U1ZHVGV4dENodW5rPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N2Z1RleHRDaHVu
a3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFNWR1RleHRDaHVu
ayYgY2h1bmsgPSAqaXQ7Ci0gICAgICAgIGludCBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnMgPSAw
OwotCi0gICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgcmFuZ2VzIGNvbnRhaW5lZCBpbiB0aGlz
IGNodW5rCi0gICAgICAgIGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46
OmNvbnN0X2l0ZXJhdG9yIGJveEVuZCA9IGNodW5rLmJveGVzLmVuZCgpOwotICAgICAgICBmb3Ig
KFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGJveEl0
ID0gY2h1bmsuYm94ZXMuYmVnaW4oKTsgYm94SXQgIT0gYm94RW5kOyArK2JveEl0KSB7Ci0gICAg
ICAgICAgICBjb25zdCBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94SXQ7
Ci0gICAgICAgICAgICBBU1NFUlQocmFuZ2UuYm94LT5pc1NWR0lubGluZVRleHRCb3goKSk7Ci0K
LSAgICAgICAgICAgIC8vIEFjY2VzcyBzdHlsZSAmIGZvbnQgaW5mb3JtYXRpb24gb2YgdGhpcyB0
ZXh0IGJveAotICAgICAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogcmFuZ2VUZXh0Qm94ID0gc3Rh
dGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KHJhbmdlLmJveCk7Ci0gICAgICAgICAgICByYW5n
ZVRleHRCb3gtPnNldENodW5rVHJhbnNmb3JtYXRpb24oY2h1bmsuY3RtKTsKLQotICAgICAgICAg
ICAgUmVuZGVyVGV4dCogdGV4dCA9IHJhbmdlVGV4dEJveC0+dGV4dFJlbmRlcmVyKCk7Ci0gICAg
ICAgICAgICBBU1NFUlQodGV4dCk7Ci0KLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHRleHQtPnN0eWxlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgICAgICAg
ICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKLSAKLSAgICAgICAgICAgIC8vIEZp
Z3VyZSBvdXQgZmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVyIG9mIHRoaXMgcmFuZ2UgaW4gdGhpcyBj
aHVuawotICAgICAgICAgICAgaW50IHJhbmdlTGVuZ3RoID0gcmFuZ2UuZW5kT2Zmc2V0IC0gcmFu
Z2Uuc3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0
Q2hhckJlZ2luID0gY2h1bmsuc3RhcnQgKyBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnM7Ci0gICAg
ICAgICAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0Q2hhckVuZCA9IGNodW5rLnN0YXJ0
ICsgcHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJzICsgcmFuZ2VMZW5ndGg7Ci0gICAgICAgICAgICBB
U1NFUlQoaXRDaGFyRW5kIDw9IGNodW5rLmVuZCk7Ci0KLSAgICAgICAgICAgIC8vIExvb3AgdGhy
b3VnaCBhbGwgY2hhcmFjdGVycyBpbiByYW5nZSAKLSAgICAgICAgICAgIGludCBwcm9jZXNzZWRS
YW5nZUNoYXJhY3RlcnMgPSAwOwotICAgICAgICAgICAgZm9yIChWZWN0b3I8U1ZHQ2hhcj46Oml0
ZXJhdG9yIGl0Q2hhciA9IGl0Q2hhckJlZ2luOyBpdENoYXIgIT0gaXRDaGFyRW5kOyArK2l0Q2hh
cikgewotICAgICAgICAgICAgICAgIGlmIChpdENoYXItPmlzSGlkZGVuKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgKytwcm9jZXNzZWRSYW5nZUNoYXJhY3RlcnM7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIERl
dGVybWluZSBob3cgbWFueSBjaGFyYWN0ZXJzIC0gc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAt
IGNhbiBiZSBkcmF3biBhdCBvbmNlLgotICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdDaGFyPjo6
aXRlcmF0b3IgaXRTZWFyY2ggPSBpdENoYXIgKyAxOwotICAgICAgICAgICAgICAgIHdoaWxlIChp
dFNlYXJjaCAhPSBpdENoYXJFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0U2VhcmNo
LT5kcmF3blNlcGVyYXRlZCB8fCBpdFNlYXJjaC0+aXNIaWRkZW4oKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgICsraXRTZWFyY2g7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRleHQgY2h1bmsg
cGFydCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjaHVuayBzdWItcmFuZ2UKLSAgICAgICAgICAgICAg
ICBjb25zdCBVQ2hhciogcGFydFN0YXJ0ID0gdGV4dC0+Y2hhcmFjdGVycygpICsgcmFuZ2VUZXh0
Qm94LT5zdGFydCgpICsgcmFuZ2Uuc3RhcnRPZmZzZXQgKyBwcm9jZXNzZWRSYW5nZUNoYXJhY3Rl
cnM7Ci0KLSAgICAgICAgICAgICAgICBTVkdUZXh0Q2h1bmtQYXJ0IHBhcnQ7Ci0gICAgICAgICAg
ICAgICAgcGFydC5maXJzdENoYXJhY3RlciA9IGl0Q2hhcjsKLSAgICAgICAgICAgICAgICBwYXJ0
Lmxlbmd0aCA9IGl0U2VhcmNoIC0gaXRDaGFyOwotICAgICAgICAgICAgICAgIHBhcnQud2lkdGgg
PSBmb250LmZsb2F0V2lkdGgoc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3gocGFydFN0YXJ0LCBw
YXJ0Lmxlbmd0aCwgc3R5bGUsIHJhbmdlVGV4dEJveCkpOwotICAgICAgICAgICAgICAgIHBhcnQu
aGVpZ2h0ID0gZm9udC5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBwYXJ0Lm9mZnNldCA9IHJh
bmdlLnN0YXJ0T2Zmc2V0ICsgcHJvY2Vzc2VkUmFuZ2VDaGFyYWN0ZXJzOwotICAgICAgICAgICAg
ICAgIHJhbmdlVGV4dEJveC0+YWRkQ2h1bmtQYXJ0SW5mb3JtYXRpb24ocGFydCk7Ci0gICAgICAg
ICAgICAgICAgcHJvY2Vzc2VkUmFuZ2VDaGFyYWN0ZXJzICs9IHBhcnQubGVuZ3RoOwotCi0gICAg
ICAgICAgICAgICAgLy8gU2tpcCBwcm9jZXNzZWQgY2hhcmFjdGVycwotICAgICAgICAgICAgICAg
IGl0Q2hhciA9IGl0U2VhcmNoIC0gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKHByb2Nlc3NlZFJhbmdlQ2hhcmFjdGVycyA9PSByYW5nZUxlbmd0aCk7Ci0gICAgICAgICAg
ICBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnMgKz0gcmFuZ2VMZW5ndGg7CisgICAgSW5saW5lQm94
KiBmaXJzdExlYWYgPSBmaXJzdExlYWZDaGlsZCgpOworICAgIElubGluZUJveCogbGFzdExlYWYg
PSBsYXN0TGVhZkNoaWxkKCk7CisgICAgaWYgKGZpcnN0TGVhZiA9PSBsYXN0TGVhZikKKyAgICAg
ICAgcmV0dXJuIGZpcnN0TGVhZjsKKworICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgdmVydGljYWwg
dGV4dCEKKyAgICBJbmxpbmVCb3gqIGNsb3Nlc3RMZWFmID0gMDsKKyAgICBmb3IgKElubGluZUJv
eCogbGVhZiA9IGZpcnN0TGVhZjsgbGVhZjsgbGVhZiA9IGxlYWYtPm5leHRMZWFmQ2hpbGQoKSkg
eworICAgICAgICBpZiAocG9pbnQueSgpIDwgbGVhZi0+bV95KQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChwb2ludC55KCkgPiBsZWFmLT5tX3kgKyBsZWFmLT52aXJ0dWFsTG9n
aWNhbEhlaWdodCgpKQorICAgICAgICAgICAgY29udGludWU7CiAKLSNpZiBERUJVR19DSFVOS19Q
QVJUX1BST1BBR0FUSU9OID4gMAotICAgICAgICAgICAgYm94ZXMuYWRkKHJhbmdlVGV4dEJveCk7
Ci0jZW5kaWYKLSAgICAgICAgfQorICAgICAgICBjbG9zZXN0TGVhZiA9IGxlYWY7CisgICAgICAg
IGlmIChwb2ludC54KCkgPCBsZWFmLT5tX3ggKyBsZWFmLT5tX2xvZ2ljYWxXaWR0aCkKKyAgICAg
ICAgICAgIHJldHVybiBsZWFmOwogICAgIH0KIAotI2lmIERFQlVHX0NIVU5LX1BBUlRfUFJPUEFH
QVRJT04gPiAwCi0gICAgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlByb3BhZ2F0ZWQgdGV4
dCBjaHVuayBwYXJ0IGluZm9ybWF0aW9uOlxuIik7Ci0KLSAgICAgICAgTGlzdEhhc2hTZXQ8U1ZH
SW5saW5lVGV4dEJveCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGJveGVzLmJlZ2luKCk7Ci0gICAg
ICAgIGNvbnN0IExpc3RIYXNoU2V0PFNWR0lubGluZVRleHRCb3gqPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gYm94ZXMuZW5kKCk7Ci0KLSAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgY29uc3QgU1ZHSW5saW5lVGV4dEJveCogYm94ID0gKml0OwotICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+JiBwYXJ0cyA9IGJveC0+c3ZnVGV4dENo
dW5rUGFydHMoKTsKLQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgQm94ICVwIGNvbnRh
aW5zICVpIHRleHQgY2h1bmsgcGFydHM6XG4iLCBib3gsIHN0YXRpY19jYXN0PGludD4ocGFydHMu
c2l6ZSgpKSk7Ci0gICAgICAgICAgICBWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0
ZXJhdG9yIHBhcnRJdCA9IHBhcnRzLmJlZ2luKCk7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8
U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIHBhcnRFbmQgPSBwYXJ0cy5lbmQoKTsK
LSAgICAgICAgICAgIGZvciAoOyBwYXJ0SXQgIT0gcGFydEVuZDsgKytwYXJ0SXQpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0ID0gKnBhcnRJdDsKLSAgICAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIC0+IGZpcnN0Q2hhcmFjdGVyIHg9JWxmLCB5
PSVsZiwgb2Zmc2V0PSVpLCBsZW5ndGg9JWksIHdpZHRoPSVsZiwgaGVpZ2h0PSVsZiwgdGV4dFJl
bmRlcmVyPSVwXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHBhcnQuZmlyc3RD
aGFyYWN0ZXItPngsIHBhcnQuZmlyc3RDaGFyYWN0ZXItPnksIHBhcnQub2Zmc2V0LCBwYXJ0Lmxl
bmd0aCwgcGFydC53aWR0aCwgcGFydC5oZWlnaHQsIGJveC0+dGV4dFJlbmRlcmVyKCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgcmV0dXJuIGNsb3Nlc3RM
ZWFmID8gY2xvc2VzdExlYWYgOiBsYXN0TGVhZjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lv
biA2ODg3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiw4IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1
ZGUgIlJvb3RJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJTVkdDaGFyYWN0ZXJEYXRhLmgiCi0jaW5j
bHVkZSAiU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBv
cnQuaCIKLSNpbmNsdWRlICJTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiU1ZH
VGV4dExheW91dEVuZ2luZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDE0ICsz
NywxNCBAQCBjbGFzcyBTVkdSb290SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpCiBwdWJsaWM6
CiAgICAgU1ZHUm9vdElubGluZUJveChSZW5kZXJCbG9jayogYmxvY2spCiAgICAgICAgIDogUm9v
dElubGluZUJveChibG9jaykKLSAgICAgICAgLCBtX2xvZ2ljYWxIZWlnaHQoMCkKKyAgICAgICAg
LCBtX2hlaWdodCgwKQogICAgIHsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290
SW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBpbnQgdmly
dHVhbExvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxIZWlnaHQ7IH0KLSAg
ICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoaW50IGhlaWdodCkgeyBtX2xvZ2ljYWxIZWlnaHQgPSBo
ZWlnaHQ7IH0KKyAgICB2aXJ0dWFsIGludCB2aXJ0dWFsTG9naWNhbEhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1faGVpZ2h0OyB9CisgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGludCBoZWlnaHQp
IHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBpbnQgdHgsIGludCB0eSk7CiAKQEAgLTU1LDIwICs1MywxNSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBGbG9h
dFJlY3QoKTsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAotICAgIC8vIFVzZWQgYnkg
U1ZHUmVuZGVyVHJlZUFzVGV4dAotICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bms+JiBzdmdU
ZXh0Q2h1bmtzKCkgY29uc3QgeyByZXR1cm4gbV9zdmdUZXh0Q2h1bmtzOyB9CisgICAgSW5saW5l
Qm94KiBjbG9zZXN0TGVhZkNoaWxkRm9yUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIHByb3BhZ2F0ZVRleHRDaHVua1BhcnRJbmZvcm1hdGlvbigpOwotICAg
IHZvaWQgYnVpbGRMYXlvdXRJbmZvcm1hdGlvbihJbmxpbmVGbG93Qm94KiBzdGFydCwgU1ZHQ2hh
cmFjdGVyTGF5b3V0SW5mbyYpOwotCisgICAgdm9pZCBsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94
ZXMoSW5saW5lRmxvd0JveCosIFNWR1RleHRMYXlvdXRFbmdpbmUmKTsKKyAgICB2b2lkIGxheW91
dENoaWxkQm94ZXMoSW5saW5lRmxvd0JveCopOwogICAgIHZvaWQgbGF5b3V0Um9vdEJveCgpOwot
ICAgIHZvaWQgbGF5b3V0Q2hpbGRCb3hlcyhJbmxpbmVGbG93Qm94KiBzdGFydCk7CiAKIHByaXZh
dGU6Ci0gICAgaW50IG1fbG9naWNhbEhlaWdodDsKLSAgICBWZWN0b3I8U1ZHQ2hhcj4gbV9zdmdD
aGFyczsKLSAgICBWZWN0b3I8U1ZHVGV4dENodW5rPiBtX3N2Z1RleHRDaHVua3M7CisgICAgaW50
IG1faGVpZ2h0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAJKHJldmlzaW9uIDY4ODczKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsy
NSw5IEBACiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR1RleHRG
cmFnbWVudC5oIgogCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLy8gRklYTUU6IFJlbmFtZSB0byBTVkdUZXh0Q2h1bmssIG9uY2UgdGhlIG5l
dyBsYXlvdXQgZW5naW5lIGhhcyBsYW5kZWQuCi1TVkdUZXh0Q2h1bmtOZXc6OlNWR1RleHRDaHVu
a05ldyhib29sIGlzVmVydGljYWxUZXh0LCBFVGV4dEFuY2hvciB0ZXh0QW5jaG9yLCBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFkanVzdFR5cGUgbGVuZ3RoQWRqdXN0LCBmbG9hdCBk
ZXNpcmVkVGV4dExlbmd0aCkKK1NWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKGJvb2wgaXNWZXJ0
aWNhbFRleHQsIEVUZXh0QW5jaG9yIHRleHRBbmNob3IsIFNWR1RleHRDb250ZW50RWxlbWVudDo6
U1ZHTGVuZ3RoQWRqdXN0VHlwZSBsZW5ndGhBZGp1c3QsIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3Ro
KQogICAgIDogbV9pc1ZlcnRpY2FsVGV4dChpc1ZlcnRpY2FsVGV4dCkKICAgICAsIG1fdGV4dEFu
Y2hvcih0ZXh0QW5jaG9yKQogICAgICwgbV9sZW5ndGhBZGp1c3QobGVuZ3RoQWRqdXN0KQpAQCAt
MzgsMTggKzM1LDE0IEBAIFNWR1RleHRDaHVua05ldzo6U1ZHVGV4dENodW5rTmV3KGJvb2wgaXMK
IHsKIH0KIAotdm9pZCBTVkdUZXh0Q2h1bmtOZXc6OmNhbGN1bGF0ZUxlbmd0aChmbG9hdCYgbGVu
Z3RoLCB1bnNpZ25lZCYgY2hhcmFjdGVycykgY29uc3QKK3ZvaWQgU1ZHVGV4dENodW5rOjpjYWxj
dWxhdGVMZW5ndGgoZmxvYXQmIGxlbmd0aCwgdW5zaWduZWQmIGNoYXJhY3RlcnMpIGNvbnN0CiB7
CiAgICAgU1ZHVGV4dEZyYWdtZW50KiBsYXN0RnJhZ21lbnQgPSAwOwogCiAgICAgdW5zaWduZWQg
Ym94Q291bnQgPSBtX2JveGVzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9u
ID0gMDsgYm94UG9zaXRpb24gPCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewogICAgICAgICBT
VkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gbV9ib3hlcy5hdChib3hQb3NpdGlvbik7Ci0KLSAg
ICAgICAgLy8gRklYTUU6IEVuYWJsZSB0aGlzIGNvZGUsIG9uY2UgdGhlIG5ldyBsYXlvdXQgZW5n
aW5lIGhhcyBsYW5kZWQhIFRoaXMgaXMgbm9uZnVuY3Rpb25hbCBmb3Igbm93LgotICAgICAgICAv
LyBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdt
ZW50cygpOwotICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiBmcmFnbWVudHM7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTSh0ZXh0Qm94KTsKKyAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVu
dD4mIGZyYWdtZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKIAogICAgICAgICB1bnNp
Z25lZCBzaXplID0gZnJhZ21lbnRzLnNpemUoKTsKICAgICAgICAgaWYgKCFzaXplKQpAQCAtODAs
NyArNzMsNyBAQCB2b2lkIFNWR1RleHRDaHVua05ldzo6Y2FsY3VsYXRlTGVuZ3RoKGZsCiAgICAg
fQogfQogCi1mbG9hdCBTVkdUZXh0Q2h1bmtOZXc6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChm
bG9hdCBsZW5ndGgpIGNvbnN0CitmbG9hdCBTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZVRleHRBbmNo
b3JTaGlmdChmbG9hdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3RleHRBbmNob3Ip
IHsKICAgICBjYXNlIFRBX1NUQVJUOgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRDaHVuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1
bmsuaAkocmV2aXNpb24gNjg4NzMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENo
dW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIFNWR0lubGluZVRleHRCb3g7CiAKIC8vIEEgU1ZHVGV4dENodW5rIGRlc2NyaWJl
cyBhIHJhbmdlIG9mIFNWR1RleHRGcmFnbWVudHMsIHNlZSB0aGUgU1ZHIHNwZWMgZGVmaW5pdGlv
biBvZiBhICJ0ZXh0IGNodW5rIi4KLS8vIEZJWE1FOiBSZW5hbWUgdG8gU1ZHVGV4dENodW5rLCBv
bmNlIHRoZSBuZXcgbGF5b3V0IGVuZ2luZSBoYXMgbGFuZGVkLgotY2xhc3MgU1ZHVGV4dENodW5r
TmV3IHsKK2NsYXNzIFNWR1RleHRDaHVuayB7CiBwdWJsaWM6Ci0gICAgU1ZHVGV4dENodW5rTmV3
KGJvb2wgaXNWZXJ0aWNhbFRleHQsIEVUZXh0QW5jaG9yLCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6
OlNWR0xlbmd0aEFkanVzdFR5cGUsIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoKTsKKyAgICBTVkdU
ZXh0Q2h1bmsoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgRVRleHRBbmNob3IsIFNWR1RleHRDb250ZW50
RWxlbWVudDo6U1ZHTGVuZ3RoQWRqdXN0VHlwZSwgZmxvYXQgZGVzaXJlZFRleHRMZW5ndGgpOwog
CiAgICAgdm9pZCBjYWxjdWxhdGVMZW5ndGgoZmxvYXQmIGxlbmd0aCwgdW5zaWduZWQmIGNoYXJh
Y3RlcnMpIGNvbnN0OwogICAgIGZsb2F0IGNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChmbG9hdCBs
ZW5ndGgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1
aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1
bmtCdWlsZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0Q2h1bmtCdWlsZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiU1ZHVGV4dENodW5rQnVpbGRlci5oIgorCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5l
VGV4dC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVUZXh0
Qm94LmgiCisjaW5jbHVkZSAiU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1NWR1RleHRDaHVua0J1aWxkZXI6OlNWR1RleHRDaHVua0J1aWxkZXIoKQor
eworfQorCit2b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OnRyYW5zZm9ybWF0aW9uRm9yVGV4dEJv
eChTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkg
Y29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEFmZmluZVRyYW5zZm9ybSwg
c19pZGVudGl0eVRyYW5zZm9ybSwgKCkpOworICAgIGlmICghbV90ZXh0Qm94VHJhbnNmb3JtYXRp
b25zLmNvbnRhaW5zKHRleHRCb3gpKXsKKyAgICAgICAgdHJhbnNmb3JtID0gc19pZGVudGl0eVRy
YW5zZm9ybTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRyYW5zZm9ybSA9IG1fdGV4
dEJveFRyYW5zZm9ybWF0aW9ucy5nZXQodGV4dEJveCk7Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5r
QnVpbGRlcjo6YnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVM
YXlvdXRCb3hlcykKK3sKKyAgICBpZiAobGluZUxheW91dEJveGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYm9vbCBmb3VuZFN0YXJ0ID0gZmFsc2U7CisgICAgdW5zaWduZWQg
bGFzdENodW5rU3RhcnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgYm94UG9zaXRpb24gPSAw
OworICAgIHVuc2lnbmVkIGJveENvdW50ID0gbGluZUxheW91dEJveGVzLnNpemUoKTsKKyAgICBm
b3IgKDsgYm94UG9zaXRpb24gPCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgeworICAgICAgICBT
VkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gbGluZUxheW91dEJveGVzLmF0KGJveFBvc2l0aW9u
KTsKKyAgICAgICAgaWYgKCF0ZXh0Qm94LT5zdGFydHNOZXdUZXh0Q2h1bmsoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghZm91bmRTdGFydCkgeworICAgICAgICAgICAg
bGFzdENodW5rU3RhcnRQb3NpdGlvbiA9IGJveFBvc2l0aW9uOworICAgICAgICAgICAgZm91bmRT
dGFydCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoYm94UG9z
aXRpb24gPiBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGFkZFRleHRDaHVu
ayhsaW5lTGF5b3V0Qm94ZXMsIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24sIGJveFBvc2l0aW9uIC0g
bGFzdENodW5rU3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICBsYXN0Q2h1bmtTdGFydFBvc2l0
aW9uID0gYm94UG9zaXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZvdW5kU3Rh
cnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChib3hQb3NpdGlvbiAtIGxhc3RDaHVua1N0
YXJ0UG9zaXRpb24gPiAwKQorICAgICAgICBhZGRUZXh0Q2h1bmsobGluZUxheW91dEJveGVzLCBs
YXN0Q2h1bmtTdGFydFBvc2l0aW9uLCBib3hQb3NpdGlvbiAtIGxhc3RDaHVua1N0YXJ0UG9zaXRp
b24pOworfQorCit2b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OmxheW91dFRleHRDaHVua3MoVmVj
dG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzKQoreworICAgIGJ1aWxkVGV4
dENodW5rcyhsaW5lTGF5b3V0Qm94ZXMpOworICAgIGlmIChtX3RleHRDaHVua3MuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjaHVua0NvdW50ID0gbV90ZXh0Q2h1
bmtzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2h1bmtDb3VudDsgKytp
KQorICAgICAgICBwcm9jZXNzVGV4dENodW5rKG1fdGV4dENodW5rcy5hdChpKSk7CisKKyAgICBt
X3RleHRDaHVua3MuY2xlYXIoKTsKK30KKwordm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjphZGRU
ZXh0Q2h1bmsoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzLCB1bnNp
Z25lZCBib3hTdGFydCwgdW5zaWduZWQgYm94Q291bnQpCit7CisgICAgU1ZHSW5saW5lVGV4dEJv
eCogdGV4dEJveCA9IGxpbmVMYXlvdXRCb3hlcy5hdChib3hTdGFydCk7CisgICAgQVNTRVJUKHRl
eHRCb3gpOworCisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5k
ZXJTVkdJbmxpbmVUZXh0KHRleHRCb3gtPnRleHRSZW5kZXJlcigpKTsKKyAgICBBU1NFUlQodGV4
dFJlbmRlcmVyKTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRSZW5kZXJl
ci0+c3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgQVNTRVJUKHN2Z1N0eWxlKTsK
KworICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHTGVuZ3RoQWRqdXN0VHlwZSBsZW5ndGhB
ZGp1c3QgPSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVTVF9VTktOT1dOOworICAg
IGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoID0gMDsKKworICAgIGlmIChTVkdUZXh0Q29udGVudEVs
ZW1lbnQqIHRleHRDb250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxlbWVu
dEZyb21SZW5kZXJlcih0ZXh0UmVuZGVyZXItPnBhcmVudCgpKSkgeworICAgICAgICBsZW5ndGhB
ZGp1c3QgPSBzdGF0aWNfY2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFkanVz
dFR5cGU+KHRleHRDb250ZW50RWxlbWVudC0+bGVuZ3RoQWRqdXN0KCkpOworICAgICAgICBkZXNp
cmVkVGV4dExlbmd0aCA9IHRleHRDb250ZW50RWxlbWVudC0+dGV4dExlbmd0aCgpLnZhbHVlKHRl
eHRDb250ZW50RWxlbWVudCk7CisgICAgfQorCisgICAgU1ZHVGV4dENodW5rIGNodW5rKGlzVmVy
dGljYWxXcml0aW5nTW9kZShzdmdTdHlsZSksIHN2Z1N0eWxlLT50ZXh0QW5jaG9yKCksIGxlbmd0
aEFkanVzdCwgZGVzaXJlZFRleHRMZW5ndGgpOworCisgICAgVmVjdG9yPFNWR0lubGluZVRleHRC
b3gqPiYgYm94ZXMgPSBjaHVuay5ib3hlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJveFN0
YXJ0OyBpIDwgYm94U3RhcnQgKyBib3hDb3VudDsgKytpKQorICAgICAgICBib3hlcy5hcHBlbmQo
bGluZUxheW91dEJveGVzLmF0KGkpKTsKKworICAgIG1fdGV4dENodW5rcy5hcHBlbmQoY2h1bmsp
OworfQorCit2b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0Q2h1bmsoY29uc3Qg
U1ZHVGV4dENodW5rJiBjaHVuaykKK3sKKyAgICBib29sIHByb2Nlc3NUZXh0TGVuZ3RoID0gY2h1
bmsuaGFzRGVzaXJlZFRleHRMZW5ndGgoKTsKKyAgICBib29sIHByb2Nlc3NUZXh0QW5jaG9yID0g
Y2h1bmsuaGFzVGV4dEFuY2hvcigpOworICAgIGlmICghcHJvY2Vzc1RleHRBbmNob3IgJiYgIXBy
b2Nlc3NUZXh0TGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBWZWN0b3I8U1ZH
SW5saW5lVGV4dEJveCo+JiBib3hlcyA9IGNodW5rLmJveGVzKCk7CisgICAgdW5zaWduZWQgYm94
Q291bnQgPSBib3hlcy5zaXplKCk7CisgICAgaWYgKCFib3hDb3VudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQ2FsY3VsYXRlIGFic29sdXRlIGxlbmd0aCBvZiB3aG9sZSB0ZXh0IGNodW5r
IChzdGFydGluZyBmcm9tIHRleHQgYm94ICdzdGFydCcsIHNwYW5uaW5nICdsZW5ndGgnIHRleHQg
Ym94ZXMpLgorICAgIGZsb2F0IGNodW5rTGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCBjaHVua0No
YXJhY3RlcnMgPSAwOworICAgIGNodW5rLmNhbGN1bGF0ZUxlbmd0aChjaHVua0xlbmd0aCwgY2h1
bmtDaGFyYWN0ZXJzKTsKKworICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBjaHVuay5pc1ZlcnRp
Y2FsVGV4dCgpOworICAgIGlmIChwcm9jZXNzVGV4dExlbmd0aCkgeworICAgICAgICBpZiAoY2h1
bmsubGVuZ3RoQWRqdXN0KCkgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpMRU5HVEhBREpVU1Rf
U1BBQ0lORykgeworICAgICAgICAgICAgZmxvYXQgdGV4dExlbmd0aFNoaWZ0ID0gKGNodW5rLmRl
c2lyZWRUZXh0TGVuZ3RoKCkgLSBjaHVua0xlbmd0aCkgLyBjaHVua0NoYXJhY3RlcnM7CisgICAg
ICAgICAgICB1bnNpZ25lZCBhdENoYXJhY3RlciA9IDA7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRpb24gPCBib3hDb3VudDsgKytib3hQb3NpdGlv
bikgeworICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMg
PSBib3hlcy5hdChib3hQb3NpdGlvbiktPnRleHRGcmFnbWVudHMoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZnJhZ21lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
ICAgIAorICAgICAgICAgICAgICAgIHByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24o
aXNWZXJ0aWNhbFRleHQsIHRleHRMZW5ndGhTaGlmdCwgZnJhZ21lbnRzLCBhdENoYXJhY3Rlcik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY2h1
bmsubGVuZ3RoQWRqdXN0KCkgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpMRU5HVEhBREpVU1Rf
U1BBQ0lOR0FOREdMWVBIUyk7CisgICAgICAgICAgICBmbG9hdCBzY2FsZSA9IGNodW5rLmRlc2ly
ZWRUZXh0TGVuZ3RoKCkgLyBjaHVua0xlbmd0aDsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtOworCisgICAgICAgICAgICBib29sIGZvdW5kRmly
c3RGcmFnbWVudCA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBib3hQb3NpdGlv
biA9IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKKyAgICAgICAg
ICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gYm94ZXMuYXQoYm94UG9zaXRpb24p
OworICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0
ZXh0Qm94LT50ZXh0RnJhZ21lbnRzKCk7CisgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50cy5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICAg
ICAgICAgIGlmICghZm91bmRGaXJzdEZyYWdtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGZv
dW5kRmlyc3RGcmFnbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkU3BhY2lu
Z0FuZEdseXBoc1RyYW5zZm9ybShpc1ZlcnRpY2FsVGV4dCwgc2NhbGUsIGZyYWdtZW50cy5maXJz
dCgpLCBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBtX3RleHRCb3hUcmFuc2Zvcm1hdGlvbnMuc2V0KHRleHRCb3gsIHNwYWNp
bmdBbmRHbHlwaHNUcmFuc2Zvcm0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKCFwcm9jZXNzVGV4dEFuY2hvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
SWYgd2UgcHJldmlvdXNseSBhcHBsaWVkIGEgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nIiBjb3JyZWN0
aW9uLCB3ZSBoYXZlIHRvIHJlY2FsY3VsYXRlIHRoZSBjaHVuayBsZW5ndGgsIHRvIGJlIGFibGUg
dG8gYXBwbHkgdGhlIHRleHQtYW5jaG9yIHNoaWZ0LgorICAgIGlmIChwcm9jZXNzVGV4dExlbmd0
aCAmJiBjaHVuay5sZW5ndGhBZGp1c3QoKSA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdU
SEFESlVTVF9TUEFDSU5HKSB7CisgICAgICAgIGNodW5rTGVuZ3RoID0gMDsKKyAgICAgICAgY2h1
bmtDaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgY2h1bmsuY2FsY3VsYXRlTGVuZ3RoKGNodW5rTGVu
Z3RoLCBjaHVua0NoYXJhY3RlcnMpOworICAgIH0KKworICAgIGZsb2F0IHRleHRBbmNob3JTaGlm
dCA9IGNodW5rLmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChjaHVua0xlbmd0aCk7CisgICAgZm9y
ICh1bnNpZ25lZCBib3hQb3NpdGlvbiA9IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94
UG9zaXRpb24pIHsKKyAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9
IGJveGVzLmF0KGJveFBvc2l0aW9uKS0+dGV4dEZyYWdtZW50cygpOworICAgICAgICBpZiAoZnJh
Z21lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwcm9jZXNz
VGV4dEFuY2hvckNvcnJlY3Rpb24oaXNWZXJ0aWNhbFRleHQsIHRleHRBbmNob3JTaGlmdCwgZnJh
Z21lbnRzKTsKKyAgICB9Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1Rl
eHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlvbihib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCB0ZXh0
TGVuZ3RoU2hpZnQsIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMsIHVuc2lnbmVk
JiBhdENoYXJhY3RlcikKK3sKKyAgICB1bnNpZ25lZCBmcmFnbWVudENvdW50ID0gZnJhZ21lbnRz
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRDb3VudDsgKytp
KSB7CisgICAgICAgIFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7
CisKKyAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgZnJhZ21lbnQueSAr
PSB0ZXh0TGVuZ3RoU2hpZnQgKiBhdENoYXJhY3RlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZnJhZ21lbnQueCArPSB0ZXh0TGVuZ3RoU2hpZnQgKiBhdENoYXJhY3RlcjsKKworICAgICAg
ICBhdENoYXJhY3RlciArPSBmcmFnbWVudC5sZW5ndGg7CisgICAgfQorfQorCit2b2lkIFNWR1Rl
eHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbihib29sIGlzVmVydGlj
YWxUZXh0LCBmbG9hdCB0ZXh0QW5jaG9yU2hpZnQsIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBm
cmFnbWVudHMpCit7CisgICAgdW5zaWduZWQgZnJhZ21lbnRDb3VudCA9IGZyYWdtZW50cy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50Q291bnQ7ICsraSkgewor
ICAgICAgICBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworCisg
ICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGZyYWdtZW50LnkgKz0gdGV4
dEFuY2hvclNoaWZ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcmFnbWVudC54ICs9IHRl
eHRBbmNob3JTaGlmdDsKKyAgICB9Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6YnVp
bGRTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IHNj
YWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBBZmZpbmVUcmFuc2Zvcm0mIHNw
YWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pCit7CisgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9y
bS50cmFuc2xhdGUoZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CisKKyAgICBpZiAoaXNWZXJ0aWNh
bFRleHQpCisgICAgICAgIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3Jt
KDEsIHNjYWxlKTsKKyAgICBlbHNlCisgICAgICAgIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0u
c2NhbGVOb25Vbmlmb3JtKHNjYWxlLCAxKTsKKworICAgIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zv
cm0udHJhbnNsYXRlKC1mcmFnbWVudC54LCAtZnJhZ21lbnQueSk7Cit9CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5r
QnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1
bmtCdWlsZGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dENodW5rQnVpbGRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFNWR1RleHRDaHVua0J1aWxkZXJfaAorI2RlZmluZSBTVkdUZXh0Q2h1
bmtCdWlsZGVyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHVGV4dENodW5rLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNWR0lubGluZVRleHRCb3g7CitzdHJ1Y3QgU1ZHVGV4dEZyYWdtZW50OworCisvLyBTVkdUZXh0
Q2h1bmtCdWlsZGVyIHBlcmZvcm1zIHRoZSB0aGlyZCBsYXlvdXQgcGhhc2UgZm9yIFNWRyB0ZXh0
LgorLy8KKy8vIFBoYXNlIG9uZSBidWlsdCB0aGUgbGF5b3V0IGluZm9ybWF0aW9uIGZyb20gdGhl
IFNWRyBET00gc3RvcmVkIGluIHRoZSBSZW5kZXJTVkdJbmxpbmVUZXh0IG9iamVjdHMgKFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzKS4KKy8vIFBoYXNlIHR3byBwZXJmb3JtZWQgdGhlIGFjdHVhbCBw
ZXItY2hhcmFjdGVyIGxheW91dCwgY29tcHV0aW5nIHRoZSBmaW5hbCBwb3NpdGlvbnMgZm9yIGVh
Y2ggY2hhcmFjdGVyLCBzdG9yZWQgaW4gdGhlIFNWR0lubGluZVRleHRCb3ggb2JqZWN0cyAoU1ZH
VGV4dEZyYWdtZW50KS4KKy8vIFBoYXNlIHRocmVlIHBlcmZvcm1zIGFsbCBtb2RpZmljYXRpb25z
IHRoYXQgaGF2ZSB0byBiZSBhcHBsaWVkIHRvIGVhY2ggaW5kaXZpZHVhbCB0ZXh0IGNodW5rICh0
ZXh0LWFuY2hvciAmIHRleHRMZW5ndGgpLgorCitjbGFzcyBTVkdUZXh0Q2h1bmtCdWlsZGVyIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBTVkdUZXh0Q2h1bmtCdWlsZGVyKCk7
CisKKyAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rPiYgdGV4dENodW5rcygpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dENodW5rczsgfQorICAgIHZvaWQgdHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94
KFNWR0lubGluZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsKKworICAgIHZvaWQg
YnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hl
cyk7CisgICAgdm9pZCBsYXlvdXRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4m
IGxpbmVMYXlvdXRCb3hlcyk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRUZXh0Q2h1bmsoVmVj
dG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzLCB1bnNpZ25lZCBib3hQb3Np
dGlvbiwgdW5zaWduZWQgYm94Q291bnQpOworICAgIHZvaWQgcHJvY2Vzc1RleHRDaHVuayhjb25z
dCBTVkdUZXh0Q2h1bmsmKTsKKworICAgIHZvaWQgcHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5nQ29y
cmVjdGlvbihib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCB0ZXh0TGVuZ3RoU2hpZnQsIFZlY3Rv
cjxTVkdUZXh0RnJhZ21lbnQ+JiwgdW5zaWduZWQmIGF0Q2hhcmFjdGVyKTsKKyAgICB2b2lkIHBy
b2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbihib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCB0ZXh0
QW5jaG9yU2hpZnQsIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+Jik7CisgICAgdm9pZCBidWlsZFNw
YWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgc2NhbGUs
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIEFmZmluZVRyYW5zZm9ybSYpOworCitwcml2YXRlOgor
ICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+IG1fdGV4dENodW5rczsKKyAgICBIYXNoTWFwPFNWR0lu
bGluZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0+IG1fdGV4dEJveFRyYW5zZm9ybWF0aW9uczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmNwcAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEs
MTMgQEAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OlNWR1RleHRMYXlvdXRBdAogewogfQogCi12
b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpmaWxsV2l0aEVtcHR5VmFsdWVzKHVuc2lnbmVk
IGxlbmd0aCkKK3ZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OnJlc2VydmVDYXBhY2l0eSh1
bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgbV94VmFsdWVzLmZpbGwoZW1wdHlWYWx1ZSgpLCBsZW5n
dGgpOwotICAgIG1feVZhbHVlcy5maWxsKGVtcHR5VmFsdWUoKSwgbGVuZ3RoKTsKLSAgICBtX2R4
VmFsdWVzLmZpbGwoZW1wdHlWYWx1ZSgpLCBsZW5ndGgpOwotICAgIG1fZHlWYWx1ZXMuZmlsbChl
bXB0eVZhbHVlKCksIGxlbmd0aCk7Ci0gICAgbV9yb3RhdGVWYWx1ZXMuZmlsbChlbXB0eVZhbHVl
KCksIGxlbmd0aCk7CisgICAgbV94VmFsdWVzLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOworICAg
IG1feVZhbHVlcy5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICBtX2R4VmFsdWVzLnJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpOworICAgIG1fZHlWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCk7CisgICAgbV9yb3RhdGVWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiB9CiAKIGZs
b2F0IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkKQEAgLTQ2LDcgKzQ2LDcg
QEAgZmxvYXQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdQogICAgIHJldHVybiBz
X2VtcHR5VmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wTGF5b3V0VmVjdG9yKFZl
Y3RvcjxmbG9hdD4mIHZhbHVlcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wTGF5b3V0VmVjdG9y
KGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKIHsKICAgICBpZiAodmFsdWVzLmlzRW1wdHko
KSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVtcHR5Iik7CkBAIC02Myw3ICs2Myw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wTGF5b3V0VmVjdG9yKFZlY3QKICAgICB9CiB9CiAKLXZv
aWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmR1bXAoKQordm9pZCBTVkdUZXh0TGF5b3V0QXR0
cmlidXRlczo6ZHVtcCgpIGNvbnN0CiB7CiAgICAgZnByaW50ZihzdGRlcnIsICJ4IHZhbHVlczog
Iik7CiAgICAgZHVtcExheW91dFZlY3RvcihtX3hWYWx1ZXMpOwpAQCAtODYsMTEgKzg2LDExIEBA
IHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmR1bXAoKQogICAgIGZwcmludGYoc3RkZXJy
LCAiXG4iKTsKIAogICAgIGZwcmludGYoc3RkZXJyLCAiY2hhcmFjdGVyIGRhdGEgdmFsdWVzOlxu
Iik7Ci0gICAgVmVjdG9yPENoYXJhY3RlckRhdGE+OjppdGVyYXRvciBlbmQgPSBtX2NoYXJhY3Rl
ckRhdGFWYWx1ZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8Q2hhcmFjdGVyRGF0YT46Oml0ZXJh
dG9yIGl0ID0gbV9jaGFyYWN0ZXJEYXRhVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBDaGFyYWN0ZXJEYXRhJiBkYXRhID0gKml0OwotICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgInwge3NwYW5zQ2hhcmFjdGVycz0laSwgZ2x5cGhOYW1lPSclcycsIHVuaWNvZGVTdHJp
bmc9JyVzJywgd2lkdGg9JWxmLCBoZWlnaHQ9JWxmfVxuIiwKLSAgICAgICAgICAgICAgICBkYXRh
LnNwYW5zQ2hhcmFjdGVycywgZGF0YS5nbHlwaE5hbWUudXRmOCgpLmRhdGEoKSwgZGF0YS51bmlj
b2RlU3RyaW5nLnV0ZjgoKS5kYXRhKCksIGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KTsKKyAgICB1
bnNpZ25lZCB0ZXh0TWV0cmljc1NpemUgPSBtX3RleHRNZXRyaWNzVmFsdWVzLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dE1ldHJpY3NTaXplOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgU1ZHVGV4dE1ldHJpY3MmIG1ldHJpY3MgPSBtX3RleHRNZXRyaWNzVmFsdWVzLmF0
KGkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInwge2xlbmd0aD0laSwgZ2x5cGhOYW1lPScl
cycsIHVuaWNvZGVTdHJpbmc9JyVzJywgd2lkdGg9JWxmLCBoZWlnaHQ9JWxmfVxuIiwKKyAgICAg
ICAgICAgICAgICBtZXRyaWNzLmxlbmd0aCgpLCBtZXRyaWNzLmdseXBoKCkubmFtZS51dGY4KCku
ZGF0YSgpLCBtZXRyaWNzLmdseXBoKCkudW5pY29kZVN0cmluZy51dGY4KCkuZGF0YSgpLCBtZXRy
aWNzLndpZHRoKCksIG1ldHJpY3MuaGVpZ2h0KCkpOwogICAgIH0KICAgICBmcHJpbnRmKHN0ZGVy
ciwgIlxuIik7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0
dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXMuaAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
NyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgIlNWR1RleHRNZXRyaWNzLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzAsOCArMzEsMTAgQEAgY2xhc3MgU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXMgewogcHVibGljOgogICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKCk7CiAK
LSAgICB2b2lkIGZpbGxXaXRoRW1wdHlWYWx1ZXModW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lk
IGR1bXAoKTsKKyAgICB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBsZW5ndGgpOworICAg
IHZvaWQgZHVtcCgpIGNvbnN0OworCisgICAgc3RhdGljIGZsb2F0IGVtcHR5VmFsdWUoKTsKIAog
ICAgIFZlY3RvcjxmbG9hdD4mIHhWYWx1ZXMoKSB7IHJldHVybiBtX3hWYWx1ZXM7IH0KICAgICBj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB4VmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV94VmFsdWVzOyB9
CkBAIC00OCwzMSArNTEsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPGZsb2F0PiYgcm90YXRlVmFs
dWVzKCkgeyByZXR1cm4gbV9yb3RhdGVWYWx1ZXM7IH0KICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+
JiByb3RhdGVWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3JvdGF0ZVZhbHVlczsgfQogCi0gICAg
c3RhdGljIGZsb2F0IGVtcHR5VmFsdWUoKTsKLQotICAgIHN0cnVjdCBDaGFyYWN0ZXJEYXRhIHsK
LSAgICAgICAgQ2hhcmFjdGVyRGF0YSgpCi0gICAgICAgICAgICA6IHNwYW5zQ2hhcmFjdGVycygw
KQotICAgICAgICAgICAgLCB3aWR0aCgwKQotICAgICAgICAgICAgLCBoZWlnaHQoMCkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2hlbiBtdWx0aXBsZSB1bmljb2RlIGNoYXJh
Y3RlcnMgbWFwIHRvIGEgc2luZ2xlIGdseXBoIChlZy4gJ2ZmaScgbGlnYXR1cmUpCi0gICAgICAg
IC8vICdzcGFuc0NoYXJhY3RlcnMnIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0
aGlzIGdseXBoIHNwYW5zLgotICAgICAgICBpbnQgc3BhbnNDaGFyYWN0ZXJzOwotICAgICAgICAK
LSAgICAgICAgLy8gVGhlICdnbHlwaE5hbWUnIC8gJ3VuaWNvZGVTdHJpbmcnIHBhaXIgaXMgbmVl
ZGVkIGZvciBrZXJuaW5nIGNhbGN1bGF0aW9ucy4KLSAgICAgICAgU3RyaW5nIGdseXBoTmFtZTsK
LSAgICAgICAgU3RyaW5nIHVuaWNvZGVTdHJpbmc7Ci0KLSAgICAgICAgLy8gJ3dpZHRoJyBhbmQg
J2hlaWdodCcgaG9sZCB0aGUgc2l6ZSBvZiB0aGlzIGdseXBoL2NoYXJhY3Rlci4KLSAgICAgICAg
ZmxvYXQgd2lkdGg7Ci0gICAgICAgIGZsb2F0IGhlaWdodDsKLSAgICB9OwotCi0gICAgVmVjdG9y
PENoYXJhY3RlckRhdGE+JiBjaGFyYWN0ZXJEYXRhVmFsdWVzKCkgeyByZXR1cm4gbV9jaGFyYWN0
ZXJEYXRhVmFsdWVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPENoYXJhY3RlckRhdGE+JiBjaGFyYWN0
ZXJEYXRhVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJEYXRhVmFsdWVzOyB9Cisg
ICAgVmVjdG9yPFNWR1RleHRNZXRyaWNzPiYgdGV4dE1ldHJpY3NWYWx1ZXMoKSB7IHJldHVybiBt
X3RleHRNZXRyaWNzVmFsdWVzOyB9CisgICAgY29uc3QgVmVjdG9yPFNWR1RleHRNZXRyaWNzPiYg
dGV4dE1ldHJpY3NWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3RleHRNZXRyaWNzVmFsdWVzOyB9
CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPGZsb2F0PiBtX3hWYWx1ZXM7CkBAIC04MCw3ICs2MCw3
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPGZsb2F0PiBtX2R4VmFsdWVzOwogICAgIFZlY3Rvcjxm
bG9hdD4gbV9keVZhbHVlczsKICAgICBWZWN0b3I8ZmxvYXQ+IG1fcm90YXRlVmFsdWVzOwotICAg
IFZlY3RvcjxDaGFyYWN0ZXJEYXRhPiBtX2NoYXJhY3RlckRhdGFWYWx1ZXM7CisgICAgVmVjdG9y
PFNWR1RleHRNZXRyaWNzPiBtX3RleHRNZXRyaWNzVmFsdWVzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAJKHJldmlzaW9uIDY4ODc2KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMCBAQAogCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5s
aW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKLSNpbmNsdWRlICJTVkdUZXh0
TGF5b3V0VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5o
IgogCi0vLyBTZXQgdG8gYSB2YWx1ZSA+IDAgdG8gZHVtcCB0aGUgbGF5b3V0IHZlY3RvcnMKLSNk
ZWZpbmUgRFVNUF9MQVlPVVRfVkVDVE9SUyAwCisvLyBTZXQgdG8gYSB2YWx1ZSA+IDAgdG8gZHVt
cCB0aGUgdGV4dCBsYXlvdXQgYXR0cmlidXRlcworI2RlZmluZSBEVU1QX1RFWFRfTEFZT1VUX0FU
VFJJQlVURVMgMAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDEwMCArNDAsMTI5IEBA
IHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWkKICAgICBBU1NFUlQodGV4
dFJvb3QpOwogICAgIG1fc2NvcGVzLmNsZWFyKCk7CiAKLSAgICAvLyBCdWlsZCBsYXlvdXQgc2Nv
cGVzLgorICAgIC8vIEJ1aWxkIGxpc3Qgb2YgeC95L2R4L2R5L3JvdGF0ZSB2YWx1ZXMgZm9yIGVh
Y2ggc3VidHJlZSBlbGVtZW50IHRoYXQgbWF5IGRlZmluZSB0aGVzZSB2YWx1ZXMgKHRzcGFuL3Rl
eHRQYXRoIGV0YykuCiAgICAgdW5zaWduZWQgYXRDaGFyYWN0ZXIgPSAwOwotICAgIGJ1aWxkTGF5
b3V0U2NvcGVzKHRleHRSb290LCBhdENoYXJhY3Rlcik7CisgICAgVUNoYXIgbGFzdENoYXJhY3Rl
ciA9ICdcMCc7CisgICAgYnVpbGRMYXlvdXRTY29wZXModGV4dFJvb3QsIGF0Q2hhcmFjdGVyLCBs
YXN0Q2hhcmFjdGVyKTsKIAogICAgIGlmICghYXRDaGFyYWN0ZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIC8vIEFkZCBvdXRlcm1vc3Qgc2NvcGUsIGFmdGVyIHRleHQgbGVuZ3RoIGlzIGtub3du
LgotICAgIExheW91dFNjb3BlIHNjb3BlOwotICAgIGJ1aWxkTGF5b3V0U2NvcGUoc2NvcGUsIHRl
eHRSb290LCAwLCBhdENoYXJhY3Rlcik7Ci0gICAgbV9zY29wZXMucHJlcGVuZChzY29wZSk7Ci0K
LSAgICAvLyBCdWlsZCBsYXlvdXQgaW5mb3JtYXRpb24gcmVzcGVjdGluZyBzY29wZSBvZiBhdHRy
aWJ1dGUgdmFsdWVzLgotICAgIGJ1aWxkTGF5b3V0QXR0cmlidXRlc0Zyb21TY29wZXMoKTsKKyAg
ICAvLyBCdWlsZCBsaXN0IG9mIHgveS9keC9keS9yb3RhdGUgdmFsdWVzIGZvciB0aGUgb3V0ZXJt
b3N0IDx0ZXh0PiBlbGVtZW50LgorICAgIGJ1aWxkT3V0ZXJtb3N0TGF5b3V0U2NvcGUodGV4dFJv
b3QsIGF0Q2hhcmFjdGVyKTsKIAorICAgIC8vIFByb3BhZ2F0ZSBsYXlvdXQgYXR0cmlidXRlcyB0
byBlYWNoIFJlbmRlclNWR0lubGluZVRleHQgb2JqZWN0LgogICAgIGF0Q2hhcmFjdGVyID0gMDsK
LSAgICBwcm9wYWdhdGVMYXlvdXRBdHRyaWJ1dGVzKHRleHRSb290LCBhdENoYXJhY3Rlcik7Cisg
ICAgbGFzdENoYXJhY3RlciA9ICdcMCc7CisgICAgcHJvcGFnYXRlTGF5b3V0QXR0cmlidXRlcyh0
ZXh0Um9vdCwgYXRDaGFyYWN0ZXIsIGxhc3RDaGFyYWN0ZXIpOwogfQogCi1zdGF0aWMgaW5saW5l
IHZvaWQgY29weVRvRGVzdGluYXRpb25WZWN0b3IoVmVjdG9yPGZsb2F0PiYgZGVzdGluYXRpb24s
IHVuc2lnbmVkIGRlc3RpbmF0aW9uU3RhcnRPZmZzZXQsIFZlY3RvcjxmbG9hdD4mIHNvdXJjZSwg
dW5zaWduZWQgc291cmNlU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBpbmxp
bmUgdm9pZCBleHRyYWN0RmxvYXRWYWx1ZXNGcm9tU1ZHTGVuZ3RoTGlzdChTVkdFbGVtZW50KiBs
ZW5ndGhDb250ZXh0LCBTVkdMZW5ndGhMaXN0KiBsaXN0LCBWZWN0b3I8ZmxvYXQ+JiBmbG9hdFZh
bHVlcywgdW5zaWduZWQgdGV4dENvbnRlbnRMZW5ndGgpCiB7Ci0gICAgQVNTRVJUKGRlc3RpbmF0
aW9uU3RhcnRPZmZzZXQgKyBsZW5ndGggPD0gZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICBBU1NF
UlQobGVuZ3RoQ29udGV4dCk7CisgICAgQVNTRVJUKGxpc3QpOworCisgICAgdW5zaWduZWQgbGVu
Z3RoID0gbGlzdC0+bnVtYmVyT2ZJdGVtcygpOworICAgIGlmIChsZW5ndGggPiB0ZXh0Q29udGVu
dExlbmd0aCkKKyAgICAgICAgbGVuZ3RoID0gdGV4dENvbnRlbnRMZW5ndGg7CisgICAgZmxvYXRW
YWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAKLSAgICBWZWN0b3I8ZmxvYXQ+OjppdGVy
YXRvciBzb3VyY2VCZWdpbiA9IHNvdXJjZS5iZWdpbigpICsgc291cmNlU3RhcnRPZmZzZXQ7Ci0g
ICAgc3RkOjpjb3B5KHNvdXJjZUJlZ2luLCBzb3VyY2VCZWdpbiArIGxlbmd0aCwgZGVzdGluYXRp
b24uYmVnaW4oKSArIGRlc3RpbmF0aW9uU3RhcnRPZmZzZXQpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICBTVkdMZW5ndGggbGVuZ3RoKGxpc3QtPmdldEl0ZW0oaSwgZWMpKTsKKyAgICAgICAgQVNT
RVJUKCFlYyk7CisgICAgICAgIGZsb2F0VmFsdWVzLmFwcGVuZChsZW5ndGgudmFsdWUobGVuZ3Ro
Q29udGV4dCkpOworICAgIH0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlUb0Rlc3RpbmF0
aW9uVmVjdG9ySWZTb3VyY2VSYW5nZUlzTm90RW1wdHkoVmVjdG9yPGZsb2F0PiYgZGVzdGluYXRp
b24sIHVuc2lnbmVkIGRlc3RpbmF0aW9uU3RhcnRPZmZzZXQsIFZlY3RvcjxmbG9hdD4mIHNvdXJj
ZSwgdW5zaWduZWQgc291cmNlU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBp
bmxpbmUgdm9pZCBleHRyYWN0RmxvYXRWYWx1ZXNGcm9tU1ZHTnVtYmVyTGlzdChTVkdOdW1iZXJM
aXN0KiBsaXN0LCBWZWN0b3I8ZmxvYXQ+JiBmbG9hdFZhbHVlcywgdW5zaWduZWQgdGV4dENvbnRl
bnRMZW5ndGgpCiB7Ci0gICAgYm9vbCByYW5nZUVtcHR5ID0gdHJ1ZTsKKyAgICBBU1NFUlQobGlz
dCk7CiAKLSAgICB1bnNpZ25lZCBzaXplID0gc291cmNlU3RhcnRPZmZzZXQgKyBsZW5ndGg7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gc291cmNlU3RhcnRPZmZzZXQ7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgaWYgKHNvdXJjZS5hdChpKSA9PSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1w
dHlWYWx1ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJhbmdlRW1wdHkgPSBm
YWxzZTsKLSAgICAgICAgYnJlYWs7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdC0+bnVtYmVy
T2ZJdGVtcygpOworICAgIGlmIChsZW5ndGggPiB0ZXh0Q29udGVudExlbmd0aCkKKyAgICAgICAg
bGVuZ3RoID0gdGV4dENvbnRlbnRMZW5ndGg7CisgICAgZmxvYXRWYWx1ZXMucmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZmxvYXQgbGVuZ3RoKGxpc3Qt
PmdldEl0ZW0oaSwgZWMpKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgICAgIGZsb2F0VmFs
dWVzLmFwcGVuZChsZW5ndGgpOwogICAgIH0KK30KIAotICAgIGlmIChyYW5nZUVtcHR5KQordm9p
ZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1aWxkTGF5b3V0U2NvcGUoTGF5b3V0
U2NvcGUmIHNjb3BlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCB1bnNpZ25lZCB0ZXh0Q29udGVu
dFN0YXJ0LCB1bnNpZ25lZCB0ZXh0Q29udGVudExlbmd0aCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
cmVuZGVyZXIpOworICAgIEFTU0VSVChyZW5kZXJlci0+c3R5bGUoKSk7CisKKyAgICBzY29wZS50
ZXh0Q29udGVudFN0YXJ0ID0gdGV4dENvbnRlbnRTdGFydDsKKyAgICBzY29wZS50ZXh0Q29udGVu
dExlbmd0aCA9IHRleHRDb250ZW50TGVuZ3RoOworCisgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudCogZWxlbWVudCA9IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmVsZW1lbnRGcm9tUmVu
ZGVyZXIocmVuZGVyZXIpOworICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZGVzdGluYXRpb24ucmVzaXplKGxlbmd0aCk7Ci0gICAgY29weVRvRGVzdGluYXRpb25WZWN0
b3IoZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uU3RhcnRPZmZzZXQsIHNvdXJjZSwgc291cmNlU3Rh
cnRPZmZzZXQsIGxlbmd0aCk7Ci19CisgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmIGF0dHJp
YnV0ZXMgPSBzY29wZS5hdHRyaWJ1dGVzOworICAgIGV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdM
ZW5ndGhMaXN0KGVsZW1lbnQsIGVsZW1lbnQtPngoKSwgYXR0cmlidXRlcy54VmFsdWVzKCksIHRl
eHRDb250ZW50TGVuZ3RoKTsKKyAgICBleHRyYWN0RmxvYXRWYWx1ZXNGcm9tU1ZHTGVuZ3RoTGlz
dChlbGVtZW50LCBlbGVtZW50LT55KCksIGF0dHJpYnV0ZXMueVZhbHVlcygpLCB0ZXh0Q29udGVu
dExlbmd0aCk7CisgICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR0xlbmd0aExpc3QoZWxlbWVu
dCwgZWxlbWVudC0+ZHgoKSwgYXR0cmlidXRlcy5keFZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0
aCk7CisgICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR0xlbmd0aExpc3QoZWxlbWVudCwgZWxl
bWVudC0+ZHkoKSwgYXR0cmlidXRlcy5keVZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0aCk7Cisg
ICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR051bWJlckxpc3QoZWxlbWVudC0+cm90YXRlKCks
IGF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCksIHRleHRDb250ZW50TGVuZ3RoKTsKIAotdm9pZCBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OnByb3BhZ2F0ZUxheW91dEF0dHJpYnV0ZXMo
UmVuZGVyT2JqZWN0KiBzdGFydCwgdW5zaWduZWQmIGF0Q2hhcmFjdGVyKQotewotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7IAotICAgICAgICBpZiAoIWNoaWxkLT5pc1NWR0lubGlu
ZVRleHQoKSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR0lubGluZSgpKQotICAgICAg
ICAgICAgICAgIHByb3BhZ2F0ZUxheW91dEF0dHJpYnV0ZXMoY2hpbGQsIGF0Q2hhcmFjdGVyKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgLy8gVGhlIGxhc3Qgcm90YXRp
b24gdmFsdWUgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgorICAgIFZlY3RvcjxmbG9hdD4mIHJvdGF0
ZVZhbHVlcyA9IGF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCk7CisgICAgaWYgKHJvdGF0ZVZhbHVl
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZW5kZXJTVkdJbmxpbmVU
ZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHSW5saW5lVGV4dCo+KGNoaWxkKTsKLSAg
ICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRleHQtPnRleHRMZW5ndGgoKTsKKyAgICB1bnNp
Z25lZCByb3RhdGVWYWx1ZXNTaXplID0gcm90YXRlVmFsdWVzLnNpemUoKTsKKyAgICBpZiAocm90
YXRlVmFsdWVzU2l6ZSA9PSB0ZXh0Q29udGVudExlbmd0aCkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIC8vIEJ1aWxkIGxheW91dCBhdHRyaWJ1dGVzIGZvciBhIHNpbmdsZSBSZW5kZXJTVkdJ
bmxpbmVUZXh0IHJlbmRlcmVyLgotICAgICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyBhdHRy
aWJ1dGVzOworICAgIGZsb2F0IGxhc3RSb3RhdGlvbiA9IHJvdGF0ZVZhbHVlcy5sYXN0KCk7CiAK
LSAgICAgICAgLy8gVGhlIHggdmFsdWUgbGlzdCBzaG91bGQgYWx3YXlzIGJlIGFzIGxhcmdlIGFz
IHRoZSB0ZXh0IGxlbmd0aC4KLSAgICAgICAgLy8gQW55IHZhbHVlcyB0aGF0IGFyZSBlbXB0eSB3
aWxsIGJlIGZpbGxlZCBpbiBieSB0aGUgYWN0dWFsIHRleHQgbGF5b3V0IHByb2Nlc3MgbGF0ZXIs
Ci0gICAgICAgIC8vIGFzIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBxdWVyeSB0aGUgeC95IHBvc2l0
aW9uIGZvciBldmVyeSBjaGFyYWN0ZXIgdGhyb3VnaCBTVkcgRE9NLgotICAgICAgICBhdHRyaWJ1
dGVzLnhWYWx1ZXMoKS5yZXNpemUodGV4dExlbmd0aCk7Ci0gICAgICAgIGNvcHlUb0Rlc3RpbmF0
aW9uVmVjdG9yKGF0dHJpYnV0ZXMueFZhbHVlcygpLCAwLCBtX2F0dHJpYnV0ZXMueFZhbHVlcygp
LCBhdENoYXJhY3RlciwgdGV4dExlbmd0aCk7Ci0KLSAgICAgICAgLy8gU2FtZSBmb3IgdGhlIHkg
dmFsdWUgbGlzdC4KLSAgICAgICAgYXR0cmlidXRlcy55VmFsdWVzKCkucmVzaXplKHRleHRMZW5n
dGgpOwotICAgICAgICBjb3B5VG9EZXN0aW5hdGlvblZlY3RvcihhdHRyaWJ1dGVzLnlWYWx1ZXMo
KSwgMCwgbV9hdHRyaWJ1dGVzLnlWYWx1ZXMoKSwgYXRDaGFyYWN0ZXIsIHRleHRMZW5ndGgpOwot
Ci0gICAgICAgIC8vIFRoZSBkeC9keS9yb3RhdGUgdmFsdWUgbGlzdHMgbWF5IGJlIGVtcHR5Lgot
ICAgICAgICBjb3B5VG9EZXN0aW5hdGlvblZlY3RvcklmU291cmNlUmFuZ2VJc05vdEVtcHR5KGF0
dHJpYnV0ZXMuZHhWYWx1ZXMoKSwgMCwgbV9hdHRyaWJ1dGVzLmR4VmFsdWVzKCksIGF0Q2hhcmFj
dGVyLCB0ZXh0TGVuZ3RoKTsKLSAgICAgICAgY29weVRvRGVzdGluYXRpb25WZWN0b3JJZlNvdXJj
ZVJhbmdlSXNOb3RFbXB0eShhdHRyaWJ1dGVzLmR5VmFsdWVzKCksIDAsIG1fYXR0cmlidXRlcy5k
eVZhbHVlcygpLCBhdENoYXJhY3RlciwgdGV4dExlbmd0aCk7Ci0gICAgICAgIGNvcHlUb0Rlc3Rp
bmF0aW9uVmVjdG9ySWZTb3VyY2VSYW5nZUlzTm90RW1wdHkoYXR0cmlidXRlcy5yb3RhdGVWYWx1
ZXMoKSwgMCwgbV9hdHRyaWJ1dGVzLnJvdGF0ZVZhbHVlcygpLCBhdENoYXJhY3RlciwgdGV4dExl
bmd0aCk7Ci0KLSAgICAgICAgLy8gQnVpbGQgQ2hhcmFjdGVyRGF0YSwgd2hpY2ggd2lsbCBiZSB1
c2VkIHRvIGRldGVjdCBsaWdhdHVyZXMsIGhvbGRzIGtlcm5pbmcgcGFpcnMgKGdseXBoIG5hbWUs
IHVuaWNvZGUgc3RyaW5nKSBhbmQgY2hhcmFjdGVyIG1ldHJpY3MuCi0gICAgICAgIG1lYXN1cmVD
aGFyYWN0ZXJzKHRleHQsIGF0dHJpYnV0ZXMpOwotCi0jaWYgRFVNUF9MQVlPVVRfVkVDVE9SUyA+
IDAKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJEdW1waW5nIGxheW91dCB2ZWN0b3IgZm9yIFJl
bmRlclNWR0lubGluZVRleHQsIHJlbmRlcmVyPSVwLCBub2RlPSVwXG4iLCB0ZXh0LCB0ZXh0LT5u
b2RlKCkpOwotICAgICAgICBhdHRyaWJ1dGVzLmR1bXAoKTsKLSNlbmRpZgorICAgIHJvdGF0ZVZh
bHVlcy5yZXNpemUodGV4dENvbnRlbnRMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IHJv
dGF0ZVZhbHVlc1NpemU7IGkgPCB0ZXh0Q29udGVudExlbmd0aDsgKytpKQorICAgICAgICByb3Rh
dGVWYWx1ZXMuYXQoaSkgPSBsYXN0Um90YXRpb247Cit9CiAKLSAgICAgICAgdGV4dC0+c3RvcmVM
YXlvdXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICBhdENoYXJhY3RlciArPSB0ZXh0
LT50ZXh0TGVuZ3RoKCk7Ci0gICAgfQorc3RhdGljIGlubGluZSBib29sIGNoYXJhY3RlcklzU3Bh
Y2UoY29uc3QgVUNoYXImIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID09ICcg
JzsKK30KKworc3RhdGljIGlubGluZSBib29sIGNoYXJhY3RlcklzU3BhY2VPck51bGwoY29uc3Qg
VUNoYXImIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFy
YWN0ZXIgPT0gJ1wwJzsKIH0KIAotdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6
OmJ1aWxkTGF5b3V0U2NvcGVzKFJlbmRlck9iamVjdCogc3RhcnQsIHVuc2lnbmVkJiBhdENoYXJh
Y3RlcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRQcmVzZXJ2ZUFsbFdoaXRlU3BhY2UoUmVu
ZGVyU3R5bGUqIHN0eWxlKQoreworICAgIEFTU0VSVChzdHlsZSk7CisgICAgcmV0dXJuIHN0eWxl
LT53aGl0ZVNwYWNlKCkgPT0gUFJFOworfQorIAordm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXI6OmJ1aWxkTGF5b3V0U2NvcGVzKFJlbmRlck9iamVjdCogc3RhcnQsIHVuc2lnbmVk
JiBhdENoYXJhY3RlciwgVUNoYXImIGxhc3RDaGFyYWN0ZXIpCiB7CiAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsgCiAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0KCkp
IHsKLSAgICAgICAgICAgIGF0Q2hhcmFjdGVyICs9IHRvUmVuZGVyVGV4dChjaGlsZCktPnRleHRM
ZW5ndGgoKTsKKyAgICAgICAgICAgIFJlbmRlclNWR0lubGluZVRleHQqIHRleHQgPSB0b1JlbmRl
clNWR0lubGluZVRleHQoY2hpbGQpOworCisgICAgICAgICAgICBpZiAoIXNob3VsZFByZXNlcnZl
QWxsV2hpdGVTcGFjZSh0ZXh0LT5zdHlsZSgpKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gdGV4dC0+Y2hhcmFjdGVycygpOworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0LT50ZXh0TGVuZ3RoKCk7ICAgIAorICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdGV4dFBvc2l0aW9uID0gMDsgdGV4dFBvc2l0aW9uIDwgdGV4dExl
bmd0aDsgKyt0ZXh0UG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIm
IGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW3RleHRQb3NpdGlvbl07CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjaGFyYWN0ZXJJc1NwYWNlKGN1cnJlbnRDaGFyYWN0ZXIpICYmIGNoYXJh
Y3RlcklzU3BhY2VPck51bGwobGFzdENoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICBsYXN0Q2hhcmFjdGVyID0gY3VycmVu
dENoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgKythdENoYXJhY3RlcjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhdENoYXJhY3Rl
ciArPSB0ZXh0LT50ZXh0TGVuZ3RoKCk7CisKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKQEAgLTE0Miw3ICsxNzAsNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVp
bGRlcjo6YnVpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICB1bnNpZ25lZCB0ZXh0
Q29udGVudFN0YXJ0ID0gYXRDaGFyYWN0ZXI7Ci0gICAgICAgIGJ1aWxkTGF5b3V0U2NvcGVzKGNo
aWxkLCBhdENoYXJhY3Rlcik7CisgICAgICAgIGJ1aWxkTGF5b3V0U2NvcGVzKGNoaWxkLCBhdENo
YXJhY3RlciwgbGFzdENoYXJhY3Rlcik7CiAKICAgICAgICAgTGF5b3V0U2NvcGUgc2NvcGU7CiAg
ICAgICAgIGJ1aWxkTGF5b3V0U2NvcGUoc2NvcGUsIGNoaWxkLCB0ZXh0Q29udGVudFN0YXJ0LCBh
dENoYXJhY3RlciAtIHRleHRDb250ZW50U3RhcnQpOwpAQCAtMTUwLDE1MyArMTc4LDEzOCBAQCB2
b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpCiAgICAgfQogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQgZmlsbERlc3RpbmF0aW9uVmVjdG9yV2l0aExhc3RTb3VyY2VWYWx1ZShW
ZWN0b3I8ZmxvYXQ+JiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgZGVzdGluYXRpb25TdGFydE9mZnNl
dCwgVmVjdG9yPGZsb2F0PiYgc291cmNlLCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpbGRPdXRlcm1vc3RMYXlvdXRTY29wZShSZW5kZXJT
VkdUZXh0KiB0ZXh0Um9vdCwgdW5zaWduZWQgdGV4dExlbmd0aCkKIHsKLSAgICBpZiAoc291cmNl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIExheW91dFNjb3BlIHNjb3BlOworICAg
IGJ1aWxkTGF5b3V0U2NvcGUoc2NvcGUsIHRleHRSb290LCAwLCB0ZXh0TGVuZ3RoKTsKIAotICAg
IGZsb2F0IGxhc3RWYWx1ZSA9IHNvdXJjZS5sYXN0KCk7CisgICAgLy8gSGFuZGxlIDx0ZXh0PiB4
L3kgZGVmYXVsdCBhdHRyaWJ1dGVzLgorICAgIFZlY3RvcjxmbG9hdD4mIHhWYWx1ZXMgPSBzY29w
ZS5hdHRyaWJ1dGVzLnhWYWx1ZXMoKTsKKyAgICBpZiAoeFZhbHVlcy5pc0VtcHR5KCkpCisgICAg
ICAgIHhWYWx1ZXMuYXBwZW5kKDApOworCisgICAgVmVjdG9yPGZsb2F0PiYgeVZhbHVlcyA9IHNj
b3BlLmF0dHJpYnV0ZXMueVZhbHVlcygpOworICAgIGlmICh5VmFsdWVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgeVZhbHVlcy5hcHBlbmQoMCk7CiAKLSAgICB1bnNpZ25lZCByb3RhdGVWYWx1ZXNTaXpl
ID0gc291cmNlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGVWYWx1ZXNTaXpl
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgQVNTRVJUKGkgKyBkZXN0aW5hdGlvblN0YXJ0
T2Zmc2V0IDwgZGVzdGluYXRpb24uc2l6ZSgpKTsKLSAgICAgICAgZGVzdGluYXRpb24uYXQoaSAr
IGRlc3RpbmF0aW9uU3RhcnRPZmZzZXQpID0gbGFzdFZhbHVlOwotICAgIH0KKyAgICBtX3Njb3Bl
cy5wcmVwZW5kKHNjb3BlKTsKIH0KIAotdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxk
ZXI6OmJ1aWxkTGF5b3V0QXR0cmlidXRlc0Zyb21TY29wZXMoKQordm9pZCBTVkdUZXh0TGF5b3V0
QXR0cmlidXRlc0J1aWxkZXI6OnByb3BhZ2F0ZUxheW91dEF0dHJpYnV0ZXMoUmVuZGVyT2JqZWN0
KiBzdGFydCwgdW5zaWduZWQmIGF0Q2hhcmFjdGVyLCBVQ2hhciYgbGFzdENoYXJhY3RlcikgY29u
c3QKIHsKLSAgICBBU1NFUlQoIW1fc2NvcGVzLmlzRW1wdHkoKSk7Ci0KLSAgICB1bnNpZ25lZCB0
b3RhbExlbmd0aCA9IG1fc2NvcGVzLmZpcnN0KCkudGV4dENvbnRlbnRMZW5ndGg7Ci0gICAgaWYg
KCF0b3RhbExlbmd0aCkKLSAgICAgICAgcmV0dXJuOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7IAorICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dCgpKSB7CisgICAg
ICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0ID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0
KGNoaWxkKTsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGV4dC0+Y2hh
cmFjdGVycygpOworICAgICAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRleHQtPnRleHRM
ZW5ndGgoKTsKKyAgICAgICAgICAgIGJvb2wgcHJlc2VydmVXaGl0ZVNwYWNlID0gc2hvdWxkUHJl
c2VydmVBbGxXaGl0ZVNwYWNlKHRleHQtPnN0eWxlKCkpOworCisgICAgICAgICAgICBTVkdUZXh0
TGF5b3V0QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAgICAgICAgYXR0cmlidXRlcy5yZXNl
cnZlQ2FwYWNpdHkodGV4dExlbmd0aCk7CisgICAgCisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1
ZUxpc3RQb3NpdGlvbiA9IGF0Q2hhcmFjdGVyOworICAgICAgICAgICAgdW5zaWduZWQgbWV0cmlj
c0xlbmd0aCA9IDE7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRleHRQb3NpdGlvbiA9IDA7
IHRleHRQb3NpdGlvbiA8IHRleHRMZW5ndGg7IHRleHRQb3NpdGlvbiArPSBtZXRyaWNzTGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVUNoYXImIGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGFy
YWN0ZXJzW3RleHRQb3NpdGlvbl07CisKKyAgICAgICAgICAgICAgICBTVkdUZXh0TWV0cmljcyBt
ZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZSh0ZXh0LCB0ZXh0
UG9zaXRpb24sIDEpOworICAgICAgICAgICAgICAgIG1ldHJpY3NMZW5ndGggPSBtZXRyaWNzLmxl
bmd0aCgpOworCisgICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVdoaXRlU3BhY2UgJiYgY2hh
cmFjdGVySXNTcGFjZShjdXJyZW50Q2hhcmFjdGVyKSAmJiBjaGFyYWN0ZXJJc1NwYWNlT3JOdWxs
KGxhc3RDaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2lnbkVtcHR5TGF5b3V0
QXR0cmlidXRlc0ZvckNoYXJhY3RlcihhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICAgICAg
YXR0cmlidXRlcy50ZXh0TWV0cmljc1ZhbHVlcygpLmFwcGVuZChTVkdUZXh0TWV0cmljczo6ZW1w
dHlNZXRyaWNzKCkpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBhc3NpZ25MYXlvdXRBdHRyaWJ1dGVzRm9yQ2hhcmFj
dGVyKGF0dHJpYnV0ZXMsIG1ldHJpY3MsIHZhbHVlTGlzdFBvc2l0aW9uKTsKKworICAgICAgICAg
ICAgICAgIGlmIChtZXRyaWNzTGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWV0cmljc0xlbmd0aCAtIDE7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFzc2lnbkVtcHR5TGF5b3V0QXR0cmlidXRlc0ZvckNoYXJhY3RlcihhdHRy
aWJ1dGVzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsYXN0Q2hhcmFj
dGVyID0gY3VycmVudENoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICB2YWx1ZUxpc3RQb3NpdGlv
biArPSBtZXRyaWNzTGVuZ3RoOworICAgICAgICAgICAgfQorCisjaWYgRFVNUF9URVhUX0xBWU9V
VF9BVFRSSUJVVEVTID4gMAorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbkR1bXBpbmcg
bGF5b3V0IGF0dHJpYnV0ZXMgZm9yIFJlbmRlclNWR0lubGluZVRleHQsIHJlbmRlcmVyPSVwLCBu
b2RlPSVwIChhdENoYXJhY3RlcjogJWkpXG4iLCB0ZXh0LCB0ZXh0LT5ub2RlKCksIGF0Q2hhcmFj
dGVyKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuZHVtcCgpOworI2VuZGlmCiAKLSAgICBtX2F0
dHJpYnV0ZXMuZmlsbFdpdGhFbXB0eVZhbHVlcyh0b3RhbExlbmd0aCk7CisgICAgICAgICAgICB0
ZXh0LT5zdG9yZUxheW91dEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgICAgICAgICBhdENo
YXJhY3RlciA9IHZhbHVlTGlzdFBvc2l0aW9uOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KIAotICAgIC8vIEJ1aWxkIGZpbmFsIGxpc3Qgb2YgeC95L2R4L2R5L3JvdGF0ZSB2YWx1
ZXMgZm9yIGVhY2ggY2hhcmFjdGVyIHN0b3JlcyBpbiB0aGUgPHRleHQ+IHN1YnRyZWUuCi0gICAg
Zm9yICh1bnNpZ25lZCBhdFNjb3BlID0gMDsgYXRTY29wZSA8IG1fc2NvcGVzLnNpemUoKTsgKyth
dFNjb3BlKSB7Ci0gICAgICAgIExheW91dFNjb3BlJiBzY29wZSA9IG1fc2NvcGVzLmF0KGF0U2Nv
cGUpOwotICAgICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IHNjb3Bl
LmF0dHJpYnV0ZXM7Ci0KLSAgICAgICAgY29weVRvRGVzdGluYXRpb25WZWN0b3IobV9hdHRyaWJ1
dGVzLnhWYWx1ZXMoKSwgc2NvcGUudGV4dENvbnRlbnRTdGFydCwgYXR0cmlidXRlcy54VmFsdWVz
KCksIDAsIGF0dHJpYnV0ZXMueFZhbHVlcygpLnNpemUoKSk7Ci0gICAgICAgIGNvcHlUb0Rlc3Rp
bmF0aW9uVmVjdG9yKG1fYXR0cmlidXRlcy55VmFsdWVzKCksIHNjb3BlLnRleHRDb250ZW50U3Rh
cnQsIGF0dHJpYnV0ZXMueVZhbHVlcygpLCAwLCBhdHRyaWJ1dGVzLnlWYWx1ZXMoKS5zaXplKCkp
OwotICAgICAgICBjb3B5VG9EZXN0aW5hdGlvblZlY3RvcihtX2F0dHJpYnV0ZXMuZHhWYWx1ZXMo
KSwgc2NvcGUudGV4dENvbnRlbnRTdGFydCwgYXR0cmlidXRlcy5keFZhbHVlcygpLCAwLCBhdHRy
aWJ1dGVzLmR4VmFsdWVzKCkuc2l6ZSgpKTsKLSAgICAgICAgY29weVRvRGVzdGluYXRpb25WZWN0
b3IobV9hdHRyaWJ1dGVzLmR5VmFsdWVzKCksIHNjb3BlLnRleHRDb250ZW50U3RhcnQsIGF0dHJp
YnV0ZXMuZHlWYWx1ZXMoKSwgMCwgYXR0cmlidXRlcy5keVZhbHVlcygpLnNpemUoKSk7Ci0gICAg
ICAgIGNvcHlUb0Rlc3RpbmF0aW9uVmVjdG9yKG1fYXR0cmlidXRlcy5yb3RhdGVWYWx1ZXMoKSwg
c2NvcGUudGV4dENvbnRlbnRTdGFydCwgYXR0cmlidXRlcy5yb3RhdGVWYWx1ZXMoKSwgMCwgYXR0
cmlidXRlcy5yb3RhdGVWYWx1ZXMoKS5zaXplKCkpOwotCi0gICAgICAgIC8vIEluIGhvcml6b250
YWwgKHZlcnRpY2FsKSB3cml0aW5nIG1vZGVzLCB0aGUgbGFzdCB5ICh4KSB2YWx1ZSBpbiB0aGUg
c2NvcGUgaXMgdGhlIGRlZmF1bHQgeSAoeCkgdmFsdWUgZm9yIGFsbCBmb2xsb3dpbmcgY2hhcmFj
dGVycywgdW5sZXNzIGV4cGxpY2l0ZWx5IG92ZXJyaWRlbi4KLSAgICAgICAgaWYgKHNjb3BlLmlz
VmVydGljYWxXcml0aW5nTW9kZSkKLSAgICAgICAgICAgIGZpbGxEZXN0aW5hdGlvblZlY3Rvcldp
dGhMYXN0U291cmNlVmFsdWUobV9hdHRyaWJ1dGVzLnhWYWx1ZXMoKSwgc2NvcGUudGV4dENvbnRl
bnRTdGFydCwgYXR0cmlidXRlcy54VmFsdWVzKCksIHNjb3BlLnRleHRDb250ZW50TGVuZ3RoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmlsbERlc3RpbmF0aW9uVmVjdG9yV2l0aExhc3RT
b3VyY2VWYWx1ZShtX2F0dHJpYnV0ZXMueVZhbHVlcygpLCBzY29wZS50ZXh0Q29udGVudFN0YXJ0
LCBhdHRyaWJ1dGVzLnlWYWx1ZXMoKSwgc2NvcGUudGV4dENvbnRlbnRMZW5ndGgpOworICAgICAg
ICBpZiAoIWNoaWxkLT5pc1NWR0lubGluZSgpKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgLy8gVGhlIGxhc3Qgcm90YXRpb24gdmFsdWUgaW4gdGhlIHNjb3BlIGlzIHRoZSBkZWZh
dWx0IHJvdGF0aW9uIGZvciBhbGwgZm9sbG93aW5nIGNoYXJhY3RlciwgdW5sZXNzIGV4cGxpY2l0
ZWx5IG92ZXJyaWRlbi4KLSAgICAgICAgZmlsbERlc3RpbmF0aW9uVmVjdG9yV2l0aExhc3RTb3Vy
Y2VWYWx1ZShtX2F0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCksIHNjb3BlLnRleHRDb250ZW50U3Rh
cnQsIGF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCksIHNjb3BlLnRleHRDb250ZW50TGVuZ3RoKTsK
KyAgICAgICAgcHJvcGFnYXRlTGF5b3V0QXR0cmlidXRlcyhjaGlsZCwgYXRDaGFyYWN0ZXIsIGxh
c3RDaGFyYWN0ZXIpOwogICAgIH0KIH0KIAotdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1
aWxkZXI6Om1lYXN1cmVDaGFyYWN0ZXJzKFJlbmRlclNWR0lubGluZVRleHQqIHRleHQsIFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQorZmxvYXQgU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXNCdWlsZGVyOjpuZXh0TGF5b3V0VmFsdWUoTGF5b3V0VmFsdWVUeXBlIHR5cGUsIHVuc2ln
bmVkIGF0Q2hhcmFjdGVyKSBjb25zdAogewotICAgIEFTU0VSVCh0ZXh0KTsKLSAgICBBU1NFUlQo
dGV4dC0+c3R5bGUoKSk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHRleHQtPnN0eWxlKCktPmZv
bnQoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHQtPmNoYXJhY3RlcnMoKTsK
LSAgICBpbnQgbGVuZ3RoID0gdGV4dC0+dGV4dExlbmd0aCgpOwotCi0gICAgVGV4dFJ1biBydW4o
MCwgMCk7Ci0gICAgcnVuLmRpc2FibGVTcGFjaW5nKCk7Ci0gICAgcnVuLmRpc2FibGVSb3VuZGlu
Z0hhY2tzKCk7Ci0KLSAgICBpbnQgY2hhcnNDb25zdW1lZCA9IDA7Ci0gICAgZm9yIChpbnQgcG9z
aXRpb24gPSAwOyBwb3NpdGlvbiA8IGxlbmd0aDsgcG9zaXRpb24gKz0gY2hhcnNDb25zdW1lZCkg
ewotICAgICAgICBydW4uc2V0VGV4dChjaGFyYWN0ZXJzICsgcG9zaXRpb24sIDEpOwotICAgICAg
ICBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSA9IGxlbmd0aCAtIHBvc2l0aW9uIC0gMTsKLQotICAg
ICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6Q2hhcmFjdGVyRGF0YSBjaGFyYWN0ZXJEYXRh
OwotICAgICAgICBjaGFyYWN0ZXJEYXRhLndpZHRoID0gZm9udC5mbG9hdFdpZHRoKHJ1biwgZXh0
cmFDaGFyc0F2YWlsYWJsZSwgY2hhcmFjdGVyRGF0YS5zcGFuc0NoYXJhY3RlcnMsIGNoYXJhY3Rl
ckRhdGEuZ2x5cGhOYW1lKTsKLSAgICAgICAgY2hhcmFjdGVyRGF0YS5oZWlnaHQgPSBmb250Lmhl
aWdodCgpOwotICAgICAgICBjaGFyYWN0ZXJEYXRhLnVuaWNvZGVTdHJpbmcgPSBTdHJpbmcoY2hh
cmFjdGVycyArIHBvc2l0aW9uLCBjaGFyYWN0ZXJEYXRhLnNwYW5zQ2hhcmFjdGVycyk7Ci0gICAg
ICAgIGF0dHJpYnV0ZXMuY2hhcmFjdGVyRGF0YVZhbHVlcygpLmFwcGVuZChjaGFyYWN0ZXJEYXRh
KTsKKyAgICBmb3IgKGludCBpID0gbV9zY29wZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsK
KyAgICAgICAgY29uc3QgTGF5b3V0U2NvcGUmIHNjb3BlID0gbV9zY29wZXMuYXQoaSk7CisgICAg
ICAgIGlmIChzY29wZS50ZXh0Q29udGVudFN0YXJ0ID4gYXRDaGFyYWN0ZXIgfHwgc2NvcGUudGV4
dENvbnRlbnRTdGFydCArIHNjb3BlLnRleHRDb250ZW50TGVuZ3RoIDwgYXRDaGFyYWN0ZXIpCisg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBjaGFyc0NvbnN1bWVkID0gY2hhcmFjdGVy
RGF0YS5zcGFuc0NoYXJhY3RlcnM7Ci0gICAgfQotfQorICAgICAgICBjb25zdCBWZWN0b3I8Zmxv
YXQ+KiB2YWx1ZXNQb2ludGVyID0gMDsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgWFZhbHVlOgorICAgICAgICAgICAgdmFsdWVzUG9pbnRlciA9ICZzY29wZS5hdHRyaWJ1
dGVzLnhWYWx1ZXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFlWYWx1ZToK
KyAgICAgICAgICAgIHZhbHVlc1BvaW50ZXIgPSAmc2NvcGUuYXR0cmlidXRlcy55VmFsdWVzKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEeFZhbHVlOgorICAgICAgICAgICAg
dmFsdWVzUG9pbnRlciA9ICZzY29wZS5hdHRyaWJ1dGVzLmR4VmFsdWVzKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBEeVZhbHVlOgorICAgICAgICAgICAgdmFsdWVzUG9pbnRl
ciA9ICZzY29wZS5hdHRyaWJ1dGVzLmR5VmFsdWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBSb3RhdGVWYWx1ZToKKyAgICAgICAgICAgIHZhbHVlc1BvaW50ZXIgPSAmc2Nv
cGUuYXR0cmlidXRlcy5yb3RhdGVWYWx1ZXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIGV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdMZW5ndGhMaXN0
KFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQsIFNWR0xlbmd0aExpc3QqIGxpc3QsIFZlY3Rvcjxm
bG9hdD4mIGZsb2F0VmFsdWVzLCBpbnQgdGV4dENvbnRlbnRMZW5ndGgpCi17Ci0gICAgQVNTRVJU
KGxlbmd0aENvbnRleHQpOwotICAgIEFTU0VSVChsaXN0KTsKLSAgICBBU1NFUlQodGV4dENvbnRl
bnRMZW5ndGggPj0gMCk7CisgICAgICAgIEFTU0VSVCh2YWx1ZXNQb2ludGVyKTsKKyAgICAgICAg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzID0gKnZhbHVlc1BvaW50ZXI7CisgICAgICAgIGlm
ICh2YWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBpbnQgbGVuZ3RoID0gbGlzdC0+bnVtYmVyT2ZJdGVtcygpOwot
ICAgIGlmIChsZW5ndGggPiB0ZXh0Q29udGVudExlbmd0aCkKLSAgICAgICAgbGVuZ3RoID0gdGV4
dENvbnRlbnRMZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gYXRDaGFyYWN0ZXIg
LSBzY29wZS50ZXh0Q29udGVudFN0YXJ0OworICAgICAgICBpZiAocG9zaXRpb24gPj0gdmFsdWVz
LnNpemUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBTVkdMZW5ndGggbGVuZ3RoKGxpc3QtPmdldEl0ZW0o
aSwgZWMpKTsKLSAgICAgICAgQVNTRVJUKCFlYyk7Ci0gICAgICAgIGZsb2F0VmFsdWVzLmFwcGVu
ZChsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCkpOworICAgICAgICByZXR1cm4gdmFsdWVzLmF0
KHBvc2l0aW9uKTsKICAgICB9Ci19CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBleHRyYWN0RmxvYXRW
YWx1ZXNGcm9tU1ZHTnVtYmVyTGlzdChTVkdOdW1iZXJMaXN0KiBsaXN0LCBWZWN0b3I8ZmxvYXQ+
JiBmbG9hdFZhbHVlcywgaW50IHRleHRDb250ZW50TGVuZ3RoKQotewotICAgIEFTU0VSVChsaXN0
KTsKLSAgICBBU1NFUlQodGV4dENvbnRlbnRMZW5ndGggPj0gMCk7Ci0KLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBpbnQgbGVuZ3RoID0gbGlzdC0+bnVtYmVyT2ZJdGVtcygpOwotICAg
IGlmIChsZW5ndGggPiB0ZXh0Q29udGVudExlbmd0aCkKLSAgICAgICAgbGVuZ3RoID0gdGV4dENv
bnRlbnRMZW5ndGg7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIGZsb2F0IGxlbmd0aChsaXN0LT5nZXRJdGVtKGksIGVjKSk7Ci0gICAgICAgIEFTU0VS
VCghZWMpOwotICAgICAgICBmbG9hdFZhbHVlcy5hcHBlbmQobGVuZ3RoKTsKLSAgICB9CisgICAg
cmV0dXJuIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCogc3ZnVGV4dFBvc2l0aW9uaW5nRWxl
bWVudEZvcklubGluZVJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2b2lkIFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YXNzaWduTGF5b3V0QXR0cmlidXRlc0ZvckNoYXJh
Y3RlcihTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgYXR0cmlidXRlcywgU1ZHVGV4dE1ldHJpY3Mm
IG1ldHJpY3MsIHVuc2lnbmVkIHZhbHVlTGlzdFBvc2l0aW9uKSBjb25zdAogewotICAgIEFTU0VS
VChyZW5kZXJlcik7Ci0gICAgQVNTRVJUKHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCByZW5kZXJl
ci0+aXNTVkdJbmxpbmUoKSk7Ci0KLSAgICBOb2RlKiBub2RlID0gcmVuZGVyZXItPm5vZGUoKTsK
LSAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlzU1ZHRWxlbWVudCgpKTsKLQot
ICAgIGlmICghbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFRhZykKLSAgICAgJiYgIW5v
ZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRzcGFuVGFnKQotI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0gICAgICYmICFub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbHRHbHlwaFRhZykKLSNlbmRp
ZgotICAgICAmJiAhbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dHJlZlRhZykpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQqPihub2RlKTsKKyAgICBhdHRyaWJ1dGVzLnhWYWx1ZXMoKS5hcHBlbmQobmV4dExheW91
dFZhbHVlKFhWYWx1ZSwgdmFsdWVMaXN0UG9zaXRpb24pKTsKKyAgICBhdHRyaWJ1dGVzLnlWYWx1
ZXMoKS5hcHBlbmQobmV4dExheW91dFZhbHVlKFlWYWx1ZSwgdmFsdWVMaXN0UG9zaXRpb24pKTsK
KyAgICBhdHRyaWJ1dGVzLmR4VmFsdWVzKCkuYXBwZW5kKG5leHRMYXlvdXRWYWx1ZShEeFZhbHVl
LCB2YWx1ZUxpc3RQb3NpdGlvbikpOworICAgIGF0dHJpYnV0ZXMuZHlWYWx1ZXMoKS5hcHBlbmQo
bmV4dExheW91dFZhbHVlKER5VmFsdWUsIHZhbHVlTGlzdFBvc2l0aW9uKSk7CisgICAgYXR0cmli
dXRlcy5yb3RhdGVWYWx1ZXMoKS5hcHBlbmQobmV4dExheW91dFZhbHVlKFJvdGF0ZVZhbHVlLCB2
YWx1ZUxpc3RQb3NpdGlvbikpOworICAgIGF0dHJpYnV0ZXMudGV4dE1ldHJpY3NWYWx1ZXMoKS5h
cHBlbmQobWV0cmljcyk7CiB9CiAKLXZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVy
OjpidWlsZExheW91dFNjb3BlKExheW91dFNjb3BlJiBzY29wZSwgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgdW5zaWduZWQgdGV4dENvbnRlbnRTdGFydCwgdW5zaWduZWQgdGV4dENvbnRlbnRMZW5n
dGgpCit2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YXNzaWduRW1wdHlMYXlv
dXRBdHRyaWJ1dGVzRm9yQ2hhcmFjdGVyKFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzKSBjb25zdAogewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgQVNTRVJUKHJlbmRlcmVy
LT5zdHlsZSgpKTsKLQotICAgIHNjb3BlLmlzVmVydGljYWxXcml0aW5nTW9kZSA9IGlzVmVydGlj
YWxXcml0aW5nTW9kZShyZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7Ci0gICAgc2NvcGUu
dGV4dENvbnRlbnRTdGFydCA9IHRleHRDb250ZW50U3RhcnQ7Ci0gICAgc2NvcGUudGV4dENvbnRl
bnRMZW5ndGggPSB0ZXh0Q29udGVudExlbmd0aDsKLQotICAgIFNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQqIGVsZW1lbnQgPSBzdmdUZXh0UG9zaXRpb25pbmdFbGVtZW50Rm9ySW5saW5lUmVuZGVy
ZXIocmVuZGVyZXIpOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBzY29wZS5hdHRyaWJ1dGVzOwot
ICAgIGV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdMZW5ndGhMaXN0KGVsZW1lbnQsIGVsZW1lbnQt
PngoKSwgYXR0cmlidXRlcy54VmFsdWVzKCksIHRleHRDb250ZW50TGVuZ3RoKTsKLSAgICBleHRy
YWN0RmxvYXRWYWx1ZXNGcm9tU1ZHTGVuZ3RoTGlzdChlbGVtZW50LCBlbGVtZW50LT55KCksIGF0
dHJpYnV0ZXMueVZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0aCk7Ci0gICAgZXh0cmFjdEZsb2F0
VmFsdWVzRnJvbVNWR0xlbmd0aExpc3QoZWxlbWVudCwgZWxlbWVudC0+ZHgoKSwgYXR0cmlidXRl
cy5keFZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0aCk7Ci0gICAgZXh0cmFjdEZsb2F0VmFsdWVz
RnJvbVNWR0xlbmd0aExpc3QoZWxlbWVudCwgZWxlbWVudC0+ZHkoKSwgYXR0cmlidXRlcy5keVZh
bHVlcygpLCB0ZXh0Q29udGVudExlbmd0aCk7Ci0gICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNW
R051bWJlckxpc3QoZWxlbWVudC0+cm90YXRlKCksIGF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCks
IHRleHRDb250ZW50TGVuZ3RoKTsKKyAgICBhdHRyaWJ1dGVzLnhWYWx1ZXMoKS5hcHBlbmQoU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSk7CisgICAgYXR0cmlidXRlcy55VmFs
dWVzKCkuYXBwZW5kKFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpOworICAg
IGF0dHJpYnV0ZXMuZHhWYWx1ZXMoKS5hcHBlbmQoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVt
cHR5VmFsdWUoKSk7CisgICAgYXR0cmlidXRlcy5keVZhbHVlcygpLmFwcGVuZChTVkdUZXh0TGF5
b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKTsKKyAgICBhdHRyaWJ1dGVzLnJvdGF0ZVZhbHVl
cygpLmFwcGVuZChTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKTsKKyAgICAv
LyBUaGlzIGRvZXNuJ3QgYWRkIGFuIGVtcHR5IHZhbHVlIHRvIHRleHRNZXRyaWNzVmFsdWVzKCkg
b24gcHVycG9zZSEKIH0KIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaAkocmV2aXNpb24gNjg4NzYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7CiBjbGFzcyBS
ZW5kZXJTVkdUZXh0OwogCisvLyBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIgcGVyZm9y
bXMgdGhlIGZpcnN0IGxheW91dCBwaGFzZSBmb3IgU1ZHIHRleHQuCisvLworLy8gSXQgZXh0cmFj
dHMgdGhlIHgveS9keC9keS9yb3RhdGUgdmFsdWVzIGZyb20gdGhlIFNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnRzIGluIHRoZSBET00sCisvLyBtZWFzdXJlcyBhbGwgY2hhcmFjdGVycyBpbiB0aGUg
UmVuZGVyU1ZHVGV4dCBzdWJ0cmVlIGFuZCBleHRyYWN0cyBrZXJuaW5nL2xpZ2F0dXJlIGluZm9y
bWF0aW9uLgorLy8gVGhlc2UgdmFsdWVzIGFyZSBwcm9wYWdhdGVkIHRvIHRoZSBjb3JyZXNwb25k
aW5nIFJlbmRlclNWR0lubGluZVRleHQgcmVuZGVyZXJzLgorLy8gVGhlIGZpcnN0IGxheW91dCBw
aGFzZSBvbmx5IGV4dHJhY3RzIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBuZWVkZWQgaW4gUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0CisvLyB0byBjcmVhdGUgdGhlIElubGluZUJveCB0cmVlIGJhc2Vk
IG9uIHRleHQgY2h1bmsgYm91bmRhcmllcyAmIEJpRGkgaW5mb3JtYXRpb24uCisvLyBUaGUgc2Vj
b25kIGxheW91dCBwaGFzZSBpcyBjYXJyaWVkIG91dCBieSBTVkdUZXh0TGF5b3V0RW5naW5lLgor
CiBjbGFzcyBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIgOiBwdWJsaWMgTm9uY29weWFi
bGUgewogcHVibGljOgogICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcigpOwpAQCAt
MzgsMjcgKzQ2LDM1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RydWN0IExheW91dFNjb3Bl
IHsKICAgICAgICAgTGF5b3V0U2NvcGUoKQotICAgICAgICAgICAgOiBpc1ZlcnRpY2FsV3JpdGlu
Z01vZGUoZmFsc2UpCi0gICAgICAgICAgICAsIHRleHRDb250ZW50U3RhcnQoMCkKKyAgICAgICAg
ICAgIDogdGV4dENvbnRlbnRTdGFydCgwKQogICAgICAgICAgICAgLCB0ZXh0Q29udGVudExlbmd0
aCgwKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIGlzVmVydGljYWxXcml0
aW5nTW9kZTsKICAgICAgICAgdW5zaWduZWQgdGV4dENvbnRlbnRTdGFydDsKICAgICAgICAgdW5z
aWduZWQgdGV4dENvbnRlbnRMZW5ndGg7CiAgICAgICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXM7CiAgICAgfTsKIAotICAgIHZvaWQgYnVpbGRMYXlvdXRTY29wZXMoUmVuZGVy
T2JqZWN0KiwgdW5zaWduZWQmIGF0Q2hhcmFjdGVyKTsKLSAgICB2b2lkIGJ1aWxkTGF5b3V0U2Nv
cGUoTGF5b3V0U2NvcGUmLCBSZW5kZXJPYmplY3QqLCB1bnNpZ25lZCB0ZXh0Q29udGVudFN0YXJ0
LCB1bnNpZ25lZCB0ZXh0Q29udGVudExlbmd0aCk7Ci0gICAgdm9pZCBidWlsZExheW91dEF0dHJp
YnV0ZXNGcm9tU2NvcGVzKCk7Ci0gICAgdm9pZCBwcm9wYWdhdGVMYXlvdXRBdHRyaWJ1dGVzKFJl
bmRlck9iamVjdCosIHVuc2lnbmVkJiBhdENoYXJhY3Rlcik7Ci0gICAgdm9pZCBtZWFzdXJlQ2hh
cmFjdGVycyhSZW5kZXJTVkdJbmxpbmVUZXh0KiwgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmKTsK
KyAgICB2b2lkIGJ1aWxkTGF5b3V0U2NvcGUoTGF5b3V0U2NvcGUmLCBSZW5kZXJPYmplY3QqLCB1
bnNpZ25lZCB0ZXh0Q29udGVudFN0YXJ0LCB1bnNpZ25lZCB0ZXh0Q29udGVudExlbmd0aCkgY29u
c3Q7CisgICAgdm9pZCBidWlsZExheW91dFNjb3BlcyhSZW5kZXJPYmplY3QqLCB1bnNpZ25lZCYg
YXRDaGFyYWN0ZXIsIFVDaGFyJiBsYXN0Q2hhcmFjdGVyKTsKKyAgICB2b2lkIGJ1aWxkT3V0ZXJt
b3N0TGF5b3V0U2NvcGUoUmVuZGVyU1ZHVGV4dCosIHVuc2lnbmVkIHRleHRMZW5ndGgpOworICAg
IHZvaWQgcHJvcGFnYXRlTGF5b3V0QXR0cmlidXRlcyhSZW5kZXJPYmplY3QqLCB1bnNpZ25lZCYg
YXRDaGFyYWN0ZXIsIFVDaGFyJiBsYXN0Q2hhcmFjdGVyKSBjb25zdDsKKworICAgIGVudW0gTGF5
b3V0VmFsdWVUeXBlIHsKKyAgICAgICAgWFZhbHVlLAorICAgICAgICBZVmFsdWUsCisgICAgICAg
IER4VmFsdWUsCisgICAgICAgIER5VmFsdWUsCisgICAgICAgIFJvdGF0ZVZhbHVlCisgICAgfTsK
KworICAgIGZsb2F0IG5leHRMYXlvdXRWYWx1ZShMYXlvdXRWYWx1ZVR5cGUsIHVuc2lnbmVkIGF0
Q2hhcmFjdGVyKSBjb25zdDsKKyAgICB2b2lkIGFzc2lnbkxheW91dEF0dHJpYnV0ZXNGb3JDaGFy
YWN0ZXIoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmLCBTVkdUZXh0TWV0cmljcyYsIHVuc2lnbmVk
IHZhbHVlTGlzdFBvc2l0aW9uKSBjb25zdDsKKyAgICB2b2lkIGFzc2lnbkVtcHR5TGF5b3V0QXR0
cmlidXRlc0ZvckNoYXJhY3RlcihTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIFZlY3RvcjxMYXlvdXRTY29wZT4gbV9zY29wZXM7Ci0gICAgU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5n
aW5lLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHVGV4
dExheW91dEVuZ2luZS5oIgorCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCisjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2lu
ZUJhc2VsaW5lLmgiCisjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCIKKyNp
bmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgorI2lu
Y2x1ZGUgIlNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCIKKworLy8gU2V0IHRvIGEgdmFsdWUgPiAw
IHRvIGR1bXAgdGhlIHRleHQgZnJhZ21lbnRzCisjZGVmaW5lIERVTVBfVEVYVF9GUkFHTUVOVFMg
MAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NWR1RleHRMYXlvdXRFbmdpbmU6OlNWR1RleHRM
YXlvdXRFbmdpbmUoKQorICAgIDogbV94KDApCisgICAgLCBtX3koMCkKKyAgICAsIG1fZHgoMCkK
KyAgICAsIG1fZHkoMCkKKyAgICAsIG1faXNWZXJ0aWNhbFRleHQoZmFsc2UpCisgICAgLCBtX2lu
UGF0aExheW91dChmYWxzZSkKKyAgICAsIG1fdGV4dFBhdGhMZW5ndGgoMCkKKyAgICAsIG1fdGV4
dFBhdGhDdXJyZW50T2Zmc2V0KDApCisgICAgLCBtX3RleHRQYXRoU3BhY2luZygwKQorICAgICwg
bV90ZXh0UGF0aFNjYWxpbmcoMSkKK3sKK30KKwordm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjp1
cGRhdGVDaGFyYWNlclBvc2l0aW9uSWZOZWVkZWQoZmxvYXQmIHgsIGZsb2F0JiB5KQoreworICAg
IGlmIChtX2luUGF0aExheW91dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUmVwbGFjZSBj
aGFyYWN0ZXJzIHgveSBwb3NpdGlvbiwgd2l0aCB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIHBs
dXMgYW55CisgICAgLy8gcmVsYXRpdmUgYWRqdXN0bWVudHMsIGlmIGl0IGRvZXNuJ3Qgc3BlY2lm
eSBhbiBhYnNvbHV0ZSBwb3NpdGlvbiBpdHNlbGYuCisgICAgaWYgKHggPT0gU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkgCisgICAgICAgIHggPSBtX3ggKyBtX2R4OworCisg
ICAgaWYgKHkgPT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkKKyAgICAg
ICAgeSA9IG1feSArIG1fZHk7CisKKyAgICBtX2R4ID0gMDsKKyAgICBtX2R5ID0gMDsKK30KKwor
dm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjp1cGRhdGVDdXJyZW50VGV4dFBvc2l0aW9uKGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IGdseXBoQWR2YW5jZSkKK3sKKyAgICAvLyBVcGRhdGUgY3VycmVu
dCB0ZXh0IHBvc2l0aW9uIGFmdGVyIHByb2Nlc3NpbmcgdGhlIGNoYXJhY3Rlci4KKyAgICBpZiAo
bV9pc1ZlcnRpY2FsVGV4dCkgeworICAgICAgICBtX3ggPSB4OworICAgICAgICBtX3kgPSB5ICsg
Z2x5cGhBZHZhbmNlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1feCA9IHggKyBnbHlwaEFkdmFu
Y2U7CisgICAgICAgIG1feSA9IHk7CisgICAgfQorfQorCit2b2lkIFNWR1RleHRMYXlvdXRFbmdp
bmU6OnVwZGF0ZVJlbGF0aXZlUG9zaXRpb25BZGp1c3RtZW50c0lmTmVlZGVkKFZlY3RvcjxmbG9h
dD4mIGR4VmFsdWVzLCBWZWN0b3I8ZmxvYXQ+JiBkeVZhbHVlcywgdW5zaWduZWQgcG9zaXRpb25M
aXN0T2Zmc2V0KQoreworICAgIC8vIFVwZGF0ZSByZWxhdGl2ZSBwb3NpdGlvbmluZyBpbmZvcm1h
dGlvbi4KKyAgICBpZiAoZHhWYWx1ZXMuaXNFbXB0eSgpICYmIGR5VmFsdWVzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgZHggPSAwOworICAgIGlmICghZHhWYWx1ZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGZsb2F0JiBkeEN1cnJlbnQgPSBkeFZhbHVlcy5hdChwb3Np
dGlvbkxpc3RPZmZzZXQpOworICAgICAgICBpZiAoZHhDdXJyZW50ICE9IFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCisgICAgICAgICAgICBkeCA9IGR4Q3VycmVudDsKKyAg
ICB9CisKKyAgICBmbG9hdCBkeSA9IDA7CisgICAgaWYgKCFkeVZhbHVlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgZmxvYXQmIGR5Q3VycmVudCA9IGR5VmFsdWVzLmF0KHBvc2l0aW9uTGlzdE9mZnNl
dCk7CisgICAgICAgIGlmIChkeUN1cnJlbnQgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVt
cHR5VmFsdWUoKSkKKyAgICAgICAgICAgIGR5ID0gZHlDdXJyZW50OworICAgIH0KKworICAgIGlm
IChtX2luUGF0aExheW91dCkgeworICAgICAgICBpZiAobV9pc1ZlcnRpY2FsVGV4dCkgeworICAg
ICAgICAgICAgbV9keCArPSBkeDsKKyAgICAgICAgICAgIG1fZHkgPSBkeTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG1fZHggPSBkeDsKKyAgICAgICAgICAgIG1fZHkgKz0gZHk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9keCA9IGR4OworICAg
IG1fZHkgPSBkeTsKK30KKwordm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpyZWNvcmRUZXh0RnJh
Z21lbnQoU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4
dCwgdW5zaWduZWQgcG9zaXRpb25MaXN0T2Zmc2V0LCBjb25zdCBTVkdUZXh0TWV0cmljcyYgbGFz
dENoYXJhY3Rlck1ldHJpY3MpCit7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRUZXh0RnJhZ21lbnQu
bGVuZ3RoKTsKKworICAgIC8vIEZpZ3VyZSBvdXQgbGVuZ3RoIG9mIGZyYWdtZW50LgorICAgIG1f
Y3VycmVudFRleHRGcmFnbWVudC5sZW5ndGggPSBwb3NpdGlvbkxpc3RPZmZzZXQgLSBtX2N1cnJl
bnRUZXh0RnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0OworCisgICAgLy8gRmlndXJlIG91dCBm
cmFnbWVudCBtZXRyaWNzLgorICAgIGlmIChtX2N1cnJlbnRUZXh0RnJhZ21lbnQubGVuZ3RoID09
IDEpIHsKKyAgICAgICAgLy8gRmFzdCBwYXRoLCBjYW4gcmVseSBvbiBhbHJlYWR5IGNvbXB1dGVk
IHBlci1jaGFyYWN0ZXIgbWV0cmljcy4KKyAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50Lndp
ZHRoID0gbGFzdENoYXJhY3Rlck1ldHJpY3Mud2lkdGgoKTsKKyAgICAgICAgbV9jdXJyZW50VGV4
dEZyYWdtZW50LmhlaWdodCA9IGxhc3RDaGFyYWN0ZXJNZXRyaWNzLmhlaWdodCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIE5lZWQgdG8gbWVhc3VyZSB0aGUgd2hvbGUgcmFuZ2UgKHJhbmdl
IG1ldHJpY3MgIT0gc3VtIG9mIGNoYXJhY3RlciBtZXRyaWNzKQorICAgICAgICBTVkdUZXh0TWV0
cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZSh0ZXh0
LCBtX2N1cnJlbnRUZXh0RnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0LCBtX2N1cnJlbnRUZXh0
RnJhZ21lbnQubGVuZ3RoKTsKKyAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50LndpZHRoID0g
bWV0cmljcy53aWR0aCgpOworICAgICAgICBtX2N1cnJlbnRUZXh0RnJhZ21lbnQuaGVpZ2h0ID0g
bWV0cmljcy5oZWlnaHQoKTsKKyAgICB9CisKKyAgICB0ZXh0Qm94LT50ZXh0RnJhZ21lbnRzKCku
YXBwZW5kKG1fY3VycmVudFRleHRGcmFnbWVudCk7CisgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50
ID0gU1ZHVGV4dEZyYWdtZW50KCk7Cit9CisKK2Jvb2wgU1ZHVGV4dExheW91dEVuZ2luZTo6cGFy
ZW50RGVmaW5lc1RleHRMZW5ndGgoUmVuZGVyT2JqZWN0KiBwYXJlbnQpIGNvbnN0Cit7CisgICAg
UmVuZGVyT2JqZWN0KiBjdXJyZW50UGFyZW50ID0gcGFyZW50OworICAgIHdoaWxlIChjdXJyZW50
UGFyZW50KSB7CisgICAgICAgIFNWR1RleHRDb250ZW50RWxlbWVudCogdGV4dENvbnRlbnRFbGVt
ZW50ID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjplbGVtZW50RnJvbVJlbmRlcmVyKGN1cnJlbnRQ
YXJlbnQpOworICAgICAgICBpZiAodGV4dENvbnRlbnRFbGVtZW50KSB7CisgICAgICAgICAgICBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFkanVzdFR5cGUgbGVuZ3RoQWRqdXN0ID0g
c3RhdGljX2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpTVkdMZW5ndGhBZGp1c3RUeXBlPih0
ZXh0Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpKTsKKyAgICAgICAgICAgIGlmIChsZW5n
dGhBZGp1c3QgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpMRU5HVEhBREpVU1RfU1BBQ0lORyAm
JiB0ZXh0Q29udGVudEVsZW1lbnQtPnRleHRMZW5ndGgoKS52YWx1ZSh0ZXh0Q29udGVudEVsZW1l
bnQpID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjdXJyZW50UGFyZW50LT5pc1NWR1RleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC0+cGFyZW50KCk7
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OmJlZ2luVGV4dFBhdGhMYXlvdXQoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIFNWR1RleHRMYXlvdXRFbmdpbmUmIGxpbmVMYXlvdXQpCit7CisgICAg
QVNTRVJUKG9iamVjdCk7CisKKyAgICBtX2luUGF0aExheW91dCA9IHRydWU7CisgICAgUmVuZGVy
U1ZHVGV4dFBhdGgqIHRleHRQYXRoID0gdG9SZW5kZXJTVkdUZXh0UGF0aChvYmplY3QpOworCisg
ICAgbV90ZXh0UGF0aCA9IHRleHRQYXRoLT5sYXlvdXRQYXRoKCk7CisgICAgbV90ZXh0UGF0aFN0
YXJ0T2Zmc2V0ID0gdGV4dFBhdGgtPnN0YXJ0T2Zmc2V0KCk7CisgICAgbV90ZXh0UGF0aExlbmd0
aCA9IG1fdGV4dFBhdGgubGVuZ3RoKCk7CisgICAgaWYgKG1fdGV4dFBhdGhTdGFydE9mZnNldCA+
IDAgJiYgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0IDw9IDEpCisgICAgICAgIG1fdGV4dFBhdGhTdGFy
dE9mZnNldCAqPSBtX3RleHRQYXRoTGVuZ3RoOworCisgICAgZmxvYXQgdG90YWxMZW5ndGggPSAw
OworICAgIHVuc2lnbmVkIHRvdGFsQ2hhcmFjdGVycyA9IDA7CisKKyAgICBsaW5lTGF5b3V0Lm1f
Y2h1bmtMYXlvdXRCdWlsZGVyLmJ1aWxkVGV4dENodW5rcyhsaW5lTGF5b3V0Lm1fbGluZUxheW91
dEJveGVzKTsKKyAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rPiYgdGV4dENodW5rcyA9IGxp
bmVMYXlvdXQubV9jaHVua0xheW91dEJ1aWxkZXIudGV4dENodW5rcygpOworCisgICAgdW5zaWdu
ZWQgc2l6ZSA9IHRleHRDaHVua3Muc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgU1ZHVGV4dENodW5rJiBjaHVuayA9IHRleHRD
aHVua3MuYXQoaSk7CisKKyAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhcmFjdGVycyA9IDA7CisgICAgICAgIGNodW5rLmNhbGN1bGF0ZUxlbmd0aChsZW5ndGgs
IGNoYXJhY3RlcnMpOworCisgICAgICAgIC8vIEhhbmRsZSB0ZXh0LWFuY2hvciBhcyBhZGRpdGlv
bmFsIHN0YXJ0IG9mZnNldCBmb3IgdGV4dCBwYXRocy4KKyAgICAgICAgbV90ZXh0UGF0aFN0YXJ0
T2Zmc2V0ICs9IGNodW5rLmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChsZW5ndGgpOworCisgICAg
ICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aDsKKyAgICAgICAgdG90YWxDaGFyYWN0ZXJzICs9IGNo
YXJhY3RlcnM7CisgICAgfQorCisgICAgbV90ZXh0UGF0aEN1cnJlbnRPZmZzZXQgPSBtX3RleHRQ
YXRoU3RhcnRPZmZzZXQ7CisKKyAgICAvLyBFdmVudHVhbGx5IGhhbmRsZSB0ZXh0TGVuZ3RoIGFk
anVzdG1lbnRzLgorICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHTGVuZ3RoQWRqdXN0VHlw
ZSBsZW5ndGhBZGp1c3QgPSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVTVF9VTktO
T1dOOworICAgIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoID0gMDsKKworICAgIGlmIChTVkdUZXh0
Q29udGVudEVsZW1lbnQqIHRleHRDb250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxlbWVu
dDo6ZWxlbWVudEZyb21SZW5kZXJlcih0ZXh0UGF0aCkpIHsKKyAgICAgICAgbGVuZ3RoQWRqdXN0
ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpTVkdMZW5ndGhBZGp1c3RUeXBl
Pih0ZXh0Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpKTsKKyAgICAgICAgZGVzaXJlZFRl
eHRMZW5ndGggPSB0ZXh0Q29udGVudEVsZW1lbnQtPnRleHRMZW5ndGgoKS52YWx1ZSh0ZXh0Q29u
dGVudEVsZW1lbnQpOworICAgIH0KKworICAgIGlmICghZGVzaXJlZFRleHRMZW5ndGgpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChsZW5ndGhBZGp1c3QgPT0gU1ZHVGV4dENvbnRlbnRFbGVt
ZW50OjpMRU5HVEhBREpVU1RfU1BBQ0lORykKKyAgICAgICAgbV90ZXh0UGF0aFNwYWNpbmcgPSAo
ZGVzaXJlZFRleHRMZW5ndGggLSB0b3RhbExlbmd0aCkgLyB0b3RhbENoYXJhY3RlcnM7CisgICAg
ZWxzZQorICAgICAgICBtX3RleHRQYXRoU2NhbGluZyA9IGRlc2lyZWRUZXh0TGVuZ3RoIC8gdG90
YWxMZW5ndGg7Cit9CisKK3ZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6ZW5kVGV4dFBhdGhMYXlv
dXQoKQoreworICAgIG1faW5QYXRoTGF5b3V0ID0gZmFsc2U7CisgICAgbV90ZXh0UGF0aCA9IFBh
dGgoKTsKKyAgICBtX3RleHRQYXRoTGVuZ3RoID0gMDsKKyAgICBtX3RleHRQYXRoU3RhcnRPZmZz
ZXQgPSAwOworICAgIG1fdGV4dFBhdGhDdXJyZW50T2Zmc2V0ID0gMDsKKyAgICBtX3RleHRQYXRo
U3BhY2luZyA9IDA7CisgICAgbV90ZXh0UGF0aFNjYWxpbmcgPSAxOworfQorCit2b2lkIFNWR1Rl
eHRMYXlvdXRFbmdpbmU6OmxheW91dElubGluZVRleHRCb3goU1ZHSW5saW5lVGV4dEJveCogdGV4
dEJveCkKK3sKKyAgICBBU1NFUlQodGV4dEJveCk7CisKKyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0
KiB0ZXh0ID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHRleHRCb3gtPnRleHRSZW5kZXJlcigpKTsK
KyAgICBBU1NFUlQodGV4dCk7CisgICAgQVNTRVJUKHRleHQtPnBhcmVudCgpKTsKKyAgICBBU1NF
UlQodGV4dC0+cGFyZW50KCktPm5vZGUoKSk7CisgICAgQVNTRVJUKHRleHQtPnBhcmVudCgpLT5u
b2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9
IHRleHQtPnN0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIHRleHRCb3gtPmNsZWFy
VGV4dEZyYWdtZW50cygpOworICAgIG1faXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGlu
Z01vZGUoc3R5bGUtPnN2Z1N0eWxlKCkpOworICAgIGxheW91dFRleHRPbkxpbmVPclBhdGgodGV4
dEJveCwgdGV4dCwgc3R5bGUpOworCisgICAgaWYgKG1faW5QYXRoTGF5b3V0KSB7CisgICAgICAg
IG1fcGF0aExheW91dEJveGVzLmFwcGVuZCh0ZXh0Qm94KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fbGluZUxheW91dEJveGVzLmFwcGVuZCh0ZXh0Qm94KTsKK30KKwordm9pZCBT
VkdUZXh0TGF5b3V0RW5naW5lOjpmaW5pc2hMYXlvdXQoKQoreworICAgIC8vIEFmdGVyIGFsbCB0
ZXh0IGZyYWdtZW50cyBhcmUgc3RvcmVkIGluIHRoZWlyIGNvcnJlcHNvbmRpbmcgU1ZHSW5saW5l
VGV4dEJveGVzLCB3ZSBjYW4gbGF5b3V0IGluZGl2aWR1YWwgdGV4dCBjaHVua3MuCisgICAgLy8g
Q2h1bmsgbGF5b3V0aW5nIGlzIG9ubHkgcGVyZm9ybWVkIGZvciBsaW5lIGxheW91dCBib3hlcywg
bm90IGZvciBwYXRoIGxheW91dCwgd2hlcmUgaXQgaGFzIGFscmVhZHkgYmVlbiBkb25lLgorICAg
IG1fY2h1bmtMYXlvdXRCdWlsZGVyLmxheW91dFRleHRDaHVua3MobV9saW5lTGF5b3V0Qm94ZXMp
OworCisgICAgLy8gRmluYWxpemUgdHJhbnNmb3JtIG1hdHJpY2VzLCBhZnRlciB0aGUgY2h1bmsg
bGF5b3V0IGNvcnJlY3Rpb25zIGhhdmUgYmVlbiBhcHBsaWVkLCBhbmQgYWxsIGZyYWdtZW50IHgv
eSBwb3NpdGlvbnMgYXJlIGZpbmFsaXplZC4KKyAgICBpZiAoIW1fbGluZUxheW91dEJveGVzLmlz
RW1wdHkoKSkgeworI2lmIERVTVBfVEVYVF9GUkFHTUVOVFMgPiAwCisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiTGluZSBsYXlvdXQ6ICIpOworI2VuZGlmCisKKyAgICAgICAgZmluYWxpemVUcmFu
c2Zvcm1NYXRyaWNlcyhtX2xpbmVMYXlvdXRCb3hlcyk7CisgICAgfQorCisgICAgaWYgKCFtX3Bh
dGhMYXlvdXRCb3hlcy5pc0VtcHR5KCkpIHsKKyNpZiBEVU1QX1RFWFRfRlJBR01FTlRTID4gMAor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBhdGggbGF5b3V0OiAiKTsKKyNlbmRpZgorICAgICAg
ICBmaW5hbGl6ZVRyYW5zZm9ybU1hdHJpY2VzKG1fcGF0aExheW91dEJveGVzKTsKKyAgICB9Cit9
CisKK3ZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6ZmluYWxpemVUcmFuc2Zvcm1NYXRyaWNlcyhW
ZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBib3hlcykKK3sKKyAgICB1bnNpZ25lZCBib3hDb3Vu
dCA9IGJveGVzLnNpemUoKTsKKworI2lmIERVTVBfVEVYVF9GUkFHTUVOVFMgPiAwCisgICAgZnBy
aW50ZihzdGRlcnIsICJEdW1waW5nIGFsbCB0ZXh0IGZyYWdtZW50cyBpbiB0ZXh0IHN1YiB0cmVl
LCAlaSBib3hlc1xuIiwgYm94Q291bnQpOworCisgICAgZm9yICh1bnNpZ25lZCBib3hQb3NpdGlv
biA9IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKKyAgICAgICAg
U1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IGJveGVzLmF0KGJveFBvc2l0aW9uKTsKKyAgICAg
ICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9IHRleHRCb3gtPnRleHRGcmFn
bWVudHMoKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICItPiBCb3ggJWk6IER1bXBpbmcgdGV4
dCBmcmFnbWVudHMgZm9yIFNWR0lubGluZVRleHRCb3gsIHRleHRCb3g9JXAsIHRleHRSZW5kZXJl
cj0lcFxuIiwgYm94UG9zaXRpb24sIHRleHRCb3gsIHRleHRCb3gtPnRleHRSZW5kZXJlcigpKTsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgICAgIHRleHRCb3ggcHJvcGVydGllcywgc3Rh
cnQ9JWksIGxlbj0laVxuIiwgdGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+bGVuKCkpOworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIHRleHRSZW5kZXJlciBwcm9wZXJ0aWVzLCB0ZXh0TGVu
Z3RoPSVpXG4iLCB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+dGV4dExlbmd0aCgpKTsKKworICAg
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT5j
aGFyYWN0ZXJzKCk7CisKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRDb3VudCA9IGZyYWdtZW50
cy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudENvdW50
OyArK2kpIHsKKyAgICAgICAgICAgIFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVu
dHMuYXQoaSk7CisgICAgICAgICAgICBTdHJpbmcgZnJhZ21lbnRTdHJpbmcoY2hhcmFjdGVycyAr
IGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCwgZnJhZ21lbnQubGVuZ3RoKTsKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiICAgIC0+IEZyYWdtZW50ICVpLCB4PSVsZiwgeT0lbGYsIHdp
ZHRoPSVsZiwgaGVpZ2h0PSVsZiwgcG9zaXRpb25MaXN0T2Zmc2V0PSVpLCBsZW5ndGg9JWksIGNo
YXJhY3RlcnM9JyVzJ1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAsIGksIGZyYWdtZW50
LngsIGZyYWdtZW50LnksIGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQsIGZyYWdtZW50
LnBvc2l0aW9uTGlzdE9mZnNldCwgZnJhZ21lbnQubGVuZ3RoLCBmcmFnbWVudFN0cmluZy51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisKKyAgICBpZiAoIWJveENv
dW50KQorICAgICAgICByZXR1cm47CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4dEJveFRyYW5z
Zm9ybWF0aW9uOworICAgIGZvciAodW5zaWduZWQgYm94UG9zaXRpb24gPSAwOyBib3hQb3NpdGlv
biA8IGJveENvdW50OyArK2JveFBvc2l0aW9uKSB7CisgICAgICAgIFNWR0lubGluZVRleHRCb3gq
IHRleHRCb3ggPSBib3hlcy5hdChib3hQb3NpdGlvbik7CisgICAgICAgIFZlY3RvcjxTVkdUZXh0
RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94LT50ZXh0RnJhZ21lbnRzKCk7CisKKyAgICAg
ICAgdW5zaWduZWQgZnJhZ21lbnRDb3VudCA9IGZyYWdtZW50cy5zaXplKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudENvdW50OyArK2kpIHsKKyAgICAgICAgICAg
IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7CisgICAgICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSA9IGZyYWdtZW50LnRyYW5zZm9ybTsKKyAgICAg
ICAgICAgIGlmICghdHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkgeworICAgICAgICAgICAgICAgIHRy
YW5zZm9ybS50cmFuc2xhdGVSaWdodChmcmFnbWVudC54LCBmcmFnbWVudC55KTsKKyAgICAgICAg
ICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1mcmFnbWVudC54LCAtZnJhZ21lbnQueSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fY2h1bmtMYXlvdXRCdWlsZGVyLnRyYW5zZm9y
bWF0aW9uRm9yVGV4dEJveCh0ZXh0Qm94LCB0ZXh0Qm94VHJhbnNmb3JtYXRpb24pOworICAgICAg
ICAgICAgaWYgKHRleHRCb3hUcmFuc2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgp
KQorICAgICAgICAgICAgICAgIHRyYW5zZm9ybSA9IHRleHRCb3hUcmFuc2Zvcm1hdGlvbjsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubXVsdGlwbHkodGV4dEJv
eFRyYW5zZm9ybWF0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJveGVzLmNsZWFyKCk7
Cit9CisKK3ZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aChT
VkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0LCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCA9
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0ZXh0LT5wYXJlbnQoKS0+bm9kZSgpKTsKKyAgICAK
KyAgICBSZW5kZXJPYmplY3QqIHRleHRQYXJlbnQgPSB0ZXh0LT5wYXJlbnQoKTsKKyAgICBib29s
IGRlZmluZXNUZXh0TGVuZ3RoID0gdGV4dFBhcmVudCA/IHBhcmVudERlZmluZXNUZXh0TGVuZ3Ro
KHRleHRQYXJlbnQpIDogZmFsc2U7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5
bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOworCisgICAgU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSB0ZXh0LT5sYXlvdXRBdHRyaWJ1dGVz
KCk7CisgICAgVmVjdG9yPGZsb2F0PiYgeFZhbHVlcyA9IGF0dHJpYnV0ZXMueFZhbHVlcygpOwor
ICAgIFZlY3RvcjxmbG9hdD4mIHlWYWx1ZXMgPSBhdHRyaWJ1dGVzLnlWYWx1ZXMoKTsKKyAgICBW
ZWN0b3I8ZmxvYXQ+JiBkeFZhbHVlcyA9IGF0dHJpYnV0ZXMuZHhWYWx1ZXMoKTsKKyAgICBWZWN0
b3I8ZmxvYXQ+JiBkeVZhbHVlcyA9IGF0dHJpYnV0ZXMuZHlWYWx1ZXMoKTsKKyAgICBWZWN0b3I8
ZmxvYXQ+JiByb3RhdGVWYWx1ZXMgPSBhdHRyaWJ1dGVzLnJvdGF0ZVZhbHVlcygpOworICAgIFZl
Y3RvcjxTVkdUZXh0TWV0cmljcz4mIHRleHRNZXRyaWNzVmFsdWVzID0gYXR0cmlidXRlcy50ZXh0
TWV0cmljc1ZhbHVlcygpOworCisgICAgdW5zaWduZWQgYm94U3RhcnQgPSB0ZXh0Qm94LT5zdGFy
dCgpOworICAgIHVuc2lnbmVkIGJveExlbmd0aCA9IHRleHRCb3gtPmxlbigpOworICAgIHVuc2ln
bmVkIHRleHRNZXRyaWNzU2l6ZSA9IHRleHRNZXRyaWNzVmFsdWVzLnNpemUoKTsKKyAgICBBU1NF
UlQodGV4dE1ldHJpY3NTaXplIDw9IHhWYWx1ZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQodGV4dE1l
dHJpY3NTaXplIDw9IHlWYWx1ZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoeFZhbHVlcy5zaXplKCkg
PT0geVZhbHVlcy5zaXplKCkpOworCisgICAgaWYgKGJveExlbmd0aCA+IHRleHRNZXRyaWNzU2l6
ZSkKKyAgICAgICAgdGV4dE1ldHJpY3NTaXplID0gYm94TGVuZ3RoOyAKKworICAgIHVuc2lnbmVk
IHBvc2l0aW9uTGlzdE9mZnNldCA9IDA7CisgICAgdW5zaWduZWQgbWV0cmljc0xpc3RPZmZzZXQg
PSAwOworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGV4dC0+Y2hhcmFjdGVycygpOwor
CisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7CisgICAgU1ZHVGV4dExheW91
dEVuZ2luZVNwYWNpbmcgc3BhY2luZ0xheW91dChmb250KTsKKyAgICBTVkdUZXh0TGF5b3V0RW5n
aW5lQmFzZWxpbmUgYmFzZWxpbmVMYXlvdXQoZm9udCk7CisKKyAgICBib29sIGRpZFN0YXJ0VGV4
dEZyYWdtZW50ID0gZmFsc2U7CisgICAgYm9vbCBhcHBseVNwYWNpbmdUb05leHRDaGFyYWN0ZXIg
PSBmYWxzZTsKKworICAgIGZsb2F0IGxhc3RBbmdsZSA9IDA7CisgICAgZmxvYXQgYmFzZWxpbmVT
aGlmdCA9IGJhc2VsaW5lTGF5b3V0LmNhbGN1bGF0ZUJhc2VsaW5lU2hpZnQoc3ZnU3R5bGUsIGxl
bmd0aENvbnRleHQpOworICAgIGJhc2VsaW5lU2hpZnQgLT0gYmFzZWxpbmVMYXlvdXQuY2FsY3Vs
YXRlQWxpZ25tZW50QmFzZWxpbmVTaGlmdChtX2lzVmVydGljYWxUZXh0LCB0ZXh0KTsKKworICAg
IC8vIE1haW4gbGF5b3V0IGFsZ29yaXRobS4KKyAgICBmb3IgKDsgbWV0cmljc0xpc3RPZmZzZXQg
PCB0ZXh0TWV0cmljc1NpemUgJiYgcG9zaXRpb25MaXN0T2Zmc2V0IDwgeFZhbHVlcy5zaXplKCk7
ICsrbWV0cmljc0xpc3RPZmZzZXQpIHsKKyAgICAgICAgU1ZHVGV4dE1ldHJpY3MmIG1ldHJpY3Mg
PSB0ZXh0TWV0cmljc1ZhbHVlcy5hdChtZXRyaWNzTGlzdE9mZnNldCk7CisgICAgICAgIC8vIEFk
dmFuY2UgdG8gdGV4dCBib3ggc3RhcnQgbG9jYXRpb24uCisgICAgICAgIGlmIChwb3NpdGlvbkxp
c3RPZmZzZXQgPCBib3hTdGFydCkgeworICAgICAgICAgICAgcG9zaXRpb25MaXN0T2Zmc2V0ICs9
IG1ldHJpY3MubGVuZ3RoKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFN0b3AgaWYgd2UndmUgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGlzIHRleHQgYm94
LgorICAgICAgICBpZiAocG9zaXRpb25MaXN0T2Zmc2V0ID49IGJveFN0YXJ0ICsgYm94TGVuZ3Ro
KQorICAgICAgICAgICAgYnJlYWs7CisgCisgICAgICAgIGZsb2F0IHggPSB4VmFsdWVzLmF0KHBv
c2l0aW9uTGlzdE9mZnNldCk7CisgICAgICAgIGZsb2F0IHkgPSB5VmFsdWVzLmF0KHBvc2l0aW9u
TGlzdE9mZnNldCk7CisKKyAgICAgICAgLy8gV2hlbiB3ZSd2ZSBhZHZhbmNlZCB0byB0aGUgYm94
IHN0YXJ0IG9mZnNldCwgZGV0ZXJtaW5lIHVzaW5nIHRoZSBvcmlnaW5hbCB4L3kgdmFsdWVzLAor
ICAgICAgICAvLyB3aGV0ZXIgdGhpcyBjaGFyYWN0ZXIgc3RhcnRzIGEgbmV3IHRleHQgY2h1bmss
IGJlZm9yZSBkb2luZyBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgorICAgICAgICBpZiAocG9zaXRp
b25MaXN0T2Zmc2V0ID09IGJveFN0YXJ0KQorICAgICAgICAgICAgdGV4dEJveC0+c2V0U3RhcnRz
TmV3VGV4dENodW5rKHRleHQtPmNoYXJhY3RlclN0YXJ0c05ld1RleHRDaHVuayhib3hTdGFydCkp
OworCisgICAgICAgIGlmIChtZXRyaWNzID09IFNWR1RleHRNZXRyaWNzOjplbXB0eU1ldHJpY3Mo
KSkgeworICAgICAgICAgICAgcG9zaXRpb25MaXN0T2Zmc2V0ICs9IG1ldHJpY3MubGVuZ3RoKCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFVDaGFy
KiBjdXJyZW50Q2hhcmFjdGVyID0gY2hhcmFjdGVycyArIHBvc2l0aW9uTGlzdE9mZnNldDsKKyAg
ICAgICAgZmxvYXQgYW5nbGUgPSAwOworICAgICAgICBpZiAoIXJvdGF0ZVZhbHVlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGZsb2F0IG5ld0FuZ2xlID0gcm90YXRlVmFsdWVzLmF0KHBvc2l0
aW9uTGlzdE9mZnNldCk7CisgICAgICAgICAgICBpZiAobmV3QW5nbGUgIT0gU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkKKyAgICAgICAgICAgICAgICBhbmdsZSA9IG5ld0Fu
Z2xlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIGdseXBoIG9yaWVudGF0aW9u
IGFuZ2xlLgorICAgICAgICBmbG9hdCBvcmllbnRhdGlvbkFuZ2xlID0gYmFzZWxpbmVMYXlvdXQu
Y2FsY3VsYXRlR2x5cGhPcmllbnRhdGlvbkFuZ2xlKG1faXNWZXJ0aWNhbFRleHQsIHN2Z1N0eWxl
LCAqY3VycmVudENoYXJhY3Rlcik7CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIGdseXBoIGFkdmFu
Y2UgJiB4L3kgb3JpZW50YXRpb24gc2hpZnRzLgorICAgICAgICBmbG9hdCB4T3JpZW50YXRpb25T
aGlmdCA9IDA7CisgICAgICAgIGZsb2F0IHlPcmllbnRhdGlvblNoaWZ0ID0gMDsKKyAgICAgICAg
ZmxvYXQgZ2x5cGhBZHZhbmNlID0gYmFzZWxpbmVMYXlvdXQuY2FsY3VsYXRlR2x5cGhBZHZhbmNl
QW5kT3JpZW50YXRpb24obV9pc1ZlcnRpY2FsVGV4dCwgbWV0cmljcywgb3JpZW50YXRpb25Bbmds
ZSwgeE9yaWVudGF0aW9uU2hpZnQsIHlPcmllbnRhdGlvblNoaWZ0KTsKKworICAgICAgICAvLyBB
c3NpZ24gY3VycmVudCB0ZXh0IHBvc2l0aW9uIHRvIHgveSB2YWx1ZXMsIGlmIG5lZWRlZC4KKyAg
ICAgICAgdXBkYXRlQ2hhcmFjZXJQb3NpdGlvbklmTmVlZGVkKHgsIHkpOworCisgICAgICAgIC8v
IEFwcGx5IGR4L2R5IHZhbHVlIGFkanVzdG1lbnRzIHRvIGN1cnJlbnQgdGV4dCBwb3NpdGlvbiwg
aWYgbmVlZGVkLgorICAgICAgICB1cGRhdGVSZWxhdGl2ZVBvc2l0aW9uQWRqdXN0bWVudHNJZk5l
ZWRlZChkeFZhbHVlcywgZHlWYWx1ZXMsIHBvc2l0aW9uTGlzdE9mZnNldCk7CisKKyAgICAgICAg
Ly8gQ2FsY3VsYXRlIFNWRyBGb250cyBrZXJuaW5nLCBpZiBuZWVkZWQuCisgICAgICAgIGZsb2F0
IGtlcm5pbmcgPSBzcGFjaW5nTGF5b3V0LmNhbGN1bGF0ZVNWR0tlcm5pbmcobV9pc1ZlcnRpY2Fs
VGV4dCwgbWV0cmljcy5nbHlwaCgpKTsKKworICAgICAgICAvLyBDYWxjdWxhdGUgQ1NTICdrZXJu
aW5nJywgJ2xldHRlci1zcGFjaW5nJyBhbmQgJ3dvcmQtc3BhY2luZycgZm9yIG5leHQgY2hhcmFj
dGVyLCBpZiBuZWVkZWQuCisgICAgICAgIGZsb2F0IHNwYWNpbmcgPSBzcGFjaW5nTGF5b3V0LmNh
bGN1bGF0ZUNTU0tlcm5pbmdBbmRTcGFjaW5nKHN2Z1N0eWxlLCBsZW5ndGhDb250ZXh0LCBjdXJy
ZW50Q2hhcmFjdGVyKTsKKworICAgICAgICBmbG9hdCB0ZXh0UGF0aE9mZnNldCA9IDA7CisgICAg
ICAgIGlmIChtX2luUGF0aExheW91dCkgeworICAgICAgICAgICAgZmxvYXQgc2NhbGVkR2x5cGhB
ZHZhbmNlID0gZ2x5cGhBZHZhbmNlICogbV90ZXh0UGF0aFNjYWxpbmc7CisgICAgICAgICAgICBp
ZiAobV9pc1ZlcnRpY2FsVGV4dCkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4g
YWJzb2x1dGUgeSBwb3NpdGlvbiBhdmFpbGFibGUsIGl0IG1hcmtzIHRoZSBiZWdpbm5pbmcgb2Yg
YSBuZXcgcG9zaXRpb24gYWxvbmcgdGhlIHBhdGguCisgICAgICAgICAgICAgICAgaWYgKHkgIT0g
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV90ZXh0UGF0aEN1cnJlbnRPZmZzZXQgPSB5ICsgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0Owor
CisgICAgICAgICAgICAgICAgbV90ZXh0UGF0aEN1cnJlbnRPZmZzZXQgKz0gbV9keSAtIGtlcm5p
bmc7CisgICAgICAgICAgICAgICAgbV9keSA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBBcHBs
eSBkeC9keSBjb3JyZWN0aW9uIGFuZCBzZXR1cCB0cmFuc2xhdGlvbnMgdGhhdCBtb3ZlIHRvIHRo
ZSBnbHlwaCBtaWRwb2ludC4KKyAgICAgICAgICAgICAgICB4T3JpZW50YXRpb25TaGlmdCArPSBt
X2R4ICsgYmFzZWxpbmVTaGlmdDsKKyAgICAgICAgICAgICAgICB5T3JpZW50YXRpb25TaGlmdCAt
PSBzY2FsZWRHbHlwaEFkdmFuY2UgLyAyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGFic29sdXRlIHggcG9zaXRpb24gYXZhaWxhYmxlLCBp
dCBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IHBvc2l0aW9uIGFsb25nIHRoZSBwYXRoLgor
ICAgICAgICAgICAgICAgIGlmICh4ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZh
bHVlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fdGV4dFBhdGhDdXJyZW50T2Zmc2V0ID0geCAr
IG1fdGV4dFBhdGhTdGFydE9mZnNldDsKKworICAgICAgICAgICAgICAgIG1fdGV4dFBhdGhDdXJy
ZW50T2Zmc2V0ICs9IG1fZHggLSBrZXJuaW5nOworICAgICAgICAgICAgICAgIG1fZHggPSAwOwor
CisgICAgICAgICAgICAgICAgLy8gQXBwbHkgZHgvZHkgY29ycmVjdGlvbiBhbmQgc2V0dXAgdHJh
bnNsYXRpb25zIHRoYXQgbW92ZSB0byB0aGUgZ2x5cGggbWlkcG9pbnQuCisgICAgICAgICAgICAg
ICAgeE9yaWVudGF0aW9uU2hpZnQgLT0gc2NhbGVkR2x5cGhBZHZhbmNlIC8gMjsKKyAgICAgICAg
ICAgICAgICB5T3JpZW50YXRpb25TaGlmdCArPSBtX2R5IC0gYmFzZWxpbmVTaGlmdDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGN1cnJlbnQgb2Zmc2V0IGFsb25n
IHBhdGguCisgICAgICAgICAgICB0ZXh0UGF0aE9mZnNldCA9IG1fdGV4dFBhdGhDdXJyZW50T2Zm
c2V0ICsgc2NhbGVkR2x5cGhBZHZhbmNlIC8gMjsKKworICAgICAgICAgICAgLy8gTW92ZSB0byBu
ZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgICAgIG1fdGV4dFBhdGhDdXJyZW50T2Zmc2V0ICs9IHNj
YWxlZEdseXBoQWR2YW5jZSArIG1fdGV4dFBhdGhTcGFjaW5nICsgc3BhY2luZyAqIG1fdGV4dFBh
dGhTY2FsaW5nOworCisgICAgICAgICAgICAvLyBTa2lwIGNoYXJhY3RlciwgaWYgd2UncmUgYmVm
b3JlIHRoZSBwYXRoLgorICAgICAgICAgICAgaWYgKHRleHRQYXRoT2Zmc2V0IDwgMCkgeworICAg
ICAgICAgICAgICAgIHBvc2l0aW9uTGlzdE9mZnNldCArPSBtZXRyaWNzLmxlbmd0aCgpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBT
dG9wIHByb2Nlc3NpbmcsIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBsaWVzIGJlaGluZCB0aGUgcGF0
aC4KKyAgICAgICAgICAgIGlmICh0ZXh0UGF0aE9mZnNldCA+IG1fdGV4dFBhdGhMZW5ndGgpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBtX3RleHRQYXRoLnBvaW50QXRMZW5ndGgodGV4
dFBhdGhPZmZzZXQsIG9rKTsKKyAgICAgICAgICAgIEFTU0VSVChvayk7CisKKyAgICAgICAgICAg
IHggPSBwb2ludC54KCk7CisgICAgICAgICAgICB5ID0gcG9pbnQueSgpOworICAgICAgICAgICAg
YW5nbGUgPSBtX3RleHRQYXRoLm5vcm1hbEFuZ2xlQXRMZW5ndGgodGV4dFBhdGhPZmZzZXQsIG9r
KTsKKyAgICAgICAgICAgIEFTU0VSVChvayk7CisKKyAgICAgICAgICAgIC8vIEZvciB2ZXJ0aWNh
bCB0ZXh0IG9uIHBhdGgsIHRoZSBhY3R1YWwgYW5nbGUgaGFzIHRvIGJlIHJvdGF0ZWQgOTAgZGVn
cmVlcyBhbnRpLWNsb2Nrd2lzZSwgbm90IHRoZSBvcmllbnRhdGlvbiBhbmdsZSEKKyAgICAgICAg
ICAgIGlmIChtX2lzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgICAgIGFuZ2xlIC09IDkwOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQXBwbHkgYWxsIHByZXZpb3VzbHkgY2Fs
Y3VsYXRlZCBzaGlmdCB2YWx1ZXMuCisgICAgICAgICAgICBpZiAobV9pc1ZlcnRpY2FsVGV4dCkg
eworICAgICAgICAgICAgICAgIHggKz0gYmFzZWxpbmVTaGlmdDsKKyAgICAgICAgICAgICAgICB5
IC09IGtlcm5pbmc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHggLT0g
a2VybmluZzsKKyAgICAgICAgICAgICAgICB5IC09IGJhc2VsaW5lU2hpZnQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHggKz0gbV9keDsKKyAgICAgICAgICAgIHkgKz0gbV9keTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIERldGVybWluZSB3aGV0ZXIgd2UgaGF2ZSB0byBzdGFydCBh
IG5ldyBmcmFnbWVudC4KKyAgICAgICAgYm9vbCBzaG91bGRTdGFydE5ld0ZyYWdtZW50ID0gZmFs
c2U7CisKKyAgICAgICAgaWYgKG1fZHggfHwgbV9keSkKKyAgICAgICAgICAgIHNob3VsZFN0YXJ0
TmV3RnJhZ21lbnQgPSB0cnVlOworCisgICAgICAgIGlmICghc2hvdWxkU3RhcnROZXdGcmFnbWVu
dCAmJiAobV9pc1ZlcnRpY2FsVGV4dCB8fCBtX2luUGF0aExheW91dCkpCisgICAgICAgICAgICBz
aG91bGRTdGFydE5ld0ZyYWdtZW50ID0gdHJ1ZTsKKworICAgICAgICBpZiAoIXNob3VsZFN0YXJ0
TmV3RnJhZ21lbnQgJiYgKGFuZ2xlIHx8IGFuZ2xlICE9IGxhc3RBbmdsZSB8fCBvcmllbnRhdGlv
bkFuZ2xlKSkKKyAgICAgICAgICAgIHNob3VsZFN0YXJ0TmV3RnJhZ21lbnQgPSB0cnVlOworCisg
ICAgICAgIGlmICghc2hvdWxkU3RhcnROZXdGcmFnbWVudCAmJiAoa2VybmluZyB8fCBhcHBseVNw
YWNpbmdUb05leHRDaGFyYWN0ZXIgfHwgZGVmaW5lc1RleHRMZW5ndGgpKQorICAgICAgICAgICAg
c2hvdWxkU3RhcnROZXdGcmFnbWVudCA9IHRydWU7CisKKyAgICAgICAgLy8gSWYgd2UgYWxyZWFk
eSBzdGFydGVkIGEgZnJhZ21lbnQsIGNsb3NlIGl0IG5vdy4KKyAgICAgICAgaWYgKGRpZFN0YXJ0
VGV4dEZyYWdtZW50ICYmIHNob3VsZFN0YXJ0TmV3RnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGFw
cGx5U3BhY2luZ1RvTmV4dENoYXJhY3RlciA9IGZhbHNlOworICAgICAgICAgICAgcmVjb3JkVGV4
dEZyYWdtZW50KHRleHRCb3gsIHRleHQsIHBvc2l0aW9uTGlzdE9mZnNldCwgdGV4dE1ldHJpY3NW
YWx1ZXMuYXQobWV0cmljc0xpc3RPZmZzZXQgLSAxKSk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBFdmVudHVhbGx5IHN0YXJ0IGEgbmV3IGZyYWdtZW50LCBpZiBub3QgeWV0IGRvbmUuCisgICAg
ICAgIGlmICghZGlkU3RhcnRUZXh0RnJhZ21lbnQgfHwgc2hvdWxkU3RhcnROZXdGcmFnbWVudCkg
eworICAgICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRUZXh0RnJhZ21lbnQucG9zaXRpb25MaXN0
T2Zmc2V0KTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9jdXJyZW50VGV4dEZyYWdtZW50Lmxlbmd0
aCk7CisKKyAgICAgICAgICAgIGRpZFN0YXJ0VGV4dEZyYWdtZW50ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIG1fY3VycmVudFRleHRGcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQgPSBwb3NpdGlvbkxp
c3RPZmZzZXQ7CisgICAgICAgICAgICBtX2N1cnJlbnRUZXh0RnJhZ21lbnQueCA9IHg7CisgICAg
ICAgICAgICBtX2N1cnJlbnRUZXh0RnJhZ21lbnQueSA9IHk7CisKKyAgICAgICAgICAgIC8vIFVu
Zm9ydHVuYXRlbHkgd2UgaGF2ZSB0byBzdG9yZSB0aGUgYW5nbGUsIHRvIGJlIGFibGUgdG8gcXVl
cnkgaXQgZnJvbSB0aGUgU1ZHVGV4dFF1ZXJ5IEFQSS4KKyAgICAgICAgICAgIC8vIFdlJ3JlIG5v
dCB1c2luZyBpdCBkaXJlY3RseSBmb3IgcmVuZGVyaW5nLCBhcyBpdCdzIGFscmVhZHkgaW5jb3Jw
b3JhdGVkIGluIHRoZSB0cmFuc2Zvcm0gYmVsb3cuCisgICAgICAgICAgICBtX2N1cnJlbnRUZXh0
RnJhZ21lbnQuYW5nbGUgPSBhbmdsZTsKKworICAgICAgICAgICAgLy8gQnVpbGQgZnJhZ21lbnQg
dHJhbnNmb3JtYXRpb24uCisgICAgICAgICAgICBpZiAoYW5nbGUpCisgICAgICAgICAgICAgICAg
bV9jdXJyZW50VGV4dEZyYWdtZW50LnRyYW5zZm9ybS5yb3RhdGUoYW5nbGUpOworCisgICAgICAg
ICAgICBpZiAoeE9yaWVudGF0aW9uU2hpZnQgfHwgeU9yaWVudGF0aW9uU2hpZnQpCisgICAgICAg
ICAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50LnRyYW5zZm9ybS50cmFuc2xhdGUoeE9yaWVu
dGF0aW9uU2hpZnQsIHlPcmllbnRhdGlvblNoaWZ0KTsKKworICAgICAgICAgICAgaWYgKG9yaWVu
dGF0aW9uQW5nbGUpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50LnRyYW5z
Zm9ybS5yb3RhdGUob3JpZW50YXRpb25BbmdsZSk7CisKKyAgICAgICAgICAgIGlmIChtX2luUGF0
aExheW91dCAmJiBtX3RleHRQYXRoU2NhbGluZyAhPSAxKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1faXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRleHRGcmFn
bWVudC50cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEsIG1fdGV4dFBhdGhTY2FsaW5nKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRleHRGcmFn
bWVudC50cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG1fdGV4dFBhdGhTY2FsaW5nLCAxKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSBjdXJyZW50IHRleHQg
cG9zaXRpb24sIGFmdGVyIHByb2Nlc3Npbmcgb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGZpbmlz
aGVkLgorICAgICAgICBpZiAobV9pblBhdGhMYXlvdXQpCisgICAgICAgICAgICB1cGRhdGVDdXJy
ZW50VGV4dFBvc2l0aW9uKHgsIHksIGdseXBoQWR2YW5jZSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLy8gQXBwbHkgQ1NTICdrZXJuaW5nJywgJ2xldHRlci1zcGFjaW5nJyBhbmQgJ3dv
cmQtc3BhY2luZycgdG8gbmV4dCBjaGFyYWN0ZXIsIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIGlm
IChzcGFjaW5nKQorICAgICAgICAgICAgICAgIGFwcGx5U3BhY2luZ1RvTmV4dENoYXJhY3RlciA9
IHRydWU7CisKKyAgICAgICAgICAgIGZsb2F0IHhOZXcgPSB4IC0gbV9keDsKKyAgICAgICAgICAg
IGZsb2F0IHlOZXcgPSB5IC0gbV9keTsKKworICAgICAgICAgICAgaWYgKG1faXNWZXJ0aWNhbFRl
eHQpCisgICAgICAgICAgICAgICAgeE5ldyAtPSBiYXNlbGluZVNoaWZ0OworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHlOZXcgKz0gYmFzZWxpbmVTaGlmdDsKKworICAgICAgICAg
ICAgdXBkYXRlQ3VycmVudFRleHRQb3NpdGlvbih4TmV3LCB5TmV3LCBnbHlwaEFkdmFuY2UgKyBz
cGFjaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIHBvc2l0aW9uTGlzdE9mZnNldCArPSBtZXRy
aWNzLmxlbmd0aCgpOworICAgICAgICBsYXN0QW5nbGUgPSBhbmdsZTsKKyAgICB9CisKKyAgICBp
ZiAoIWRpZFN0YXJ0VGV4dEZyYWdtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbG9z
ZSBsYXN0IG9wZW4gZnJhZ21lbnQsIGlmIG5lZWRlZC4KKyAgICByZWNvcmRUZXh0RnJhZ21lbnQo
dGV4dEJveCwgdGV4dCwgcG9zaXRpb25MaXN0T2Zmc2V0LCB0ZXh0TWV0cmljc1ZhbHVlcy5hdCht
ZXRyaWNzTGlzdE9mZnNldCAtIDEpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
U1ZHVGV4dExheW91dEVuZ2luZV9oCisjZGVmaW5lIFNWR1RleHRMYXlvdXRFbmdpbmVfaAorCisj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiU1ZHVGV4dENodW5r
QnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR1RleHRGcmFnbWVudC5oIgorI2luY2x1ZGUgIlNWR1Rl
eHRNZXRyaWNzLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgUmVu
ZGVyU1ZHSW5saW5lVGV4dDsKK2NsYXNzIFNWR0VsZW1lbnQ7CitjbGFzcyBTVkdJbmxpbmVUZXh0
Qm94OworY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CisKKy8vIFNWR1RleHRMYXlvdXRFbmdpbmUgcGVy
Zm9ybXMgdGhlIHNlY29uZCBsYXlvdXQgcGhhc2UgZm9yIFNWRyB0ZXh0LgorLy8KKy8vIFRoZSBJ
bmxpbmVCb3ggdHJlZSB3YXMgY3JlYXRlZCwgY29udGFpbmluZyB0aGUgdGV4dCBjaHVuayBpbmZv
cm1hdGlvbiwgbmVjZXNzYXJ5IHRvIGFwcGx5CisvLyBjZXJ0YWluIFNWRyBzcGVjaWZpYyB0ZXh0
IGxheW91dCBwcm9wZXJ0aWVzICh0ZXh0LWxlbmd0aCBhZGp1c3RtZW50cyBhbmQgdGV4dC1hbmNo
b3IpLgorLy8gVGhlIHNlY29uZCBsYXlvdXQgcGhhc2UgdXNlcyB0aGUgU1ZHVGV4dExheW91dEF0
dHJpYnV0ZXMgc3RvcmVkIGluIHRoZSBpbmRpdmlkdWFsCisvLyBSZW5kZXJTVkdJbmxpbmVUZXh0
IHJlbmRlcmVycyB0byBjb21wdXRlIHRoZSBmaW5hbCBwb3NpdGlvbnMgZm9yIGVhY2ggY2hhcmFj
dGVyCisvLyB3aGljaCBhcmUgc3RvcmVkIGluIHRoZSBTVkdJbmxpbmVUZXh0Qm94IG9iamVjdHMu
CisKK2NsYXNzIFNWR1RleHRMYXlvdXRFbmdpbmUgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVi
bGljOgorICAgIFNWR1RleHRMYXlvdXRFbmdpbmUoKTsKKyAgICBTVkdUZXh0Q2h1bmtCdWlsZGVy
JiBjaHVua0xheW91dEJ1aWxkZXIoKSB7IHJldHVybiBtX2NodW5rTGF5b3V0QnVpbGRlcjsgfQor
CisgICAgdm9pZCBiZWdpblRleHRQYXRoTGF5b3V0KFJlbmRlck9iamVjdCosIFNWR1RleHRMYXlv
dXRFbmdpbmUmIGxpbmVMYXlvdXQpOworICAgIHZvaWQgZW5kVGV4dFBhdGhMYXlvdXQoKTsKKwor
ICAgIHZvaWQgbGF5b3V0SW5saW5lVGV4dEJveChTVkdJbmxpbmVUZXh0Qm94Kik7CisgICAgdm9p
ZCBmaW5pc2hMYXlvdXQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZUNoYXJhY2VyUG9z
aXRpb25JZk5lZWRlZChmbG9hdCYgeCwgZmxvYXQmIHkpOworICAgIHZvaWQgdXBkYXRlQ3VycmVu
dFRleHRQb3NpdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBnbHlwaEFkdmFuY2UpOworICAg
IHZvaWQgdXBkYXRlUmVsYXRpdmVQb3NpdGlvbkFkanVzdG1lbnRzSWZOZWVkZWQoVmVjdG9yPGZs
b2F0PiYgZHhWYWx1ZXMsIFZlY3RvcjxmbG9hdD4mIGR5VmFsdWVzLCB1bnNpZ25lZCB2YWx1ZUxp
c3RQb3NpdGlvbik7CisKKyAgICB2b2lkIHJlY29yZFRleHRGcmFnbWVudChTVkdJbmxpbmVUZXh0
Qm94KiwgUmVuZGVyU1ZHSW5saW5lVGV4dCosIHVuc2lnbmVkIHBvc2l0aW9uTGlzdE9mZnNldCwg
Y29uc3QgU1ZHVGV4dE1ldHJpY3MmIGxhc3RDaGFyYWN0ZXJNZXRyaWNzKTsKKyAgICBib29sIHBh
cmVudERlZmluZXNUZXh0TGVuZ3RoKFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgdm9pZCBs
YXlvdXRUZXh0T25MaW5lT3JQYXRoKFNWR0lubGluZVRleHRCb3gqLCBSZW5kZXJTVkdJbmxpbmVU
ZXh0KiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKKyAgICB2b2lkIGZpbmFsaXplVHJhbnNmb3JtTWF0
cmljZXMoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYpOworCitwcml2YXRlOgorICAgIFZlY3Rv
cjxTVkdJbmxpbmVUZXh0Qm94Kj4gbV9saW5lTGF5b3V0Qm94ZXM7CisgICAgVmVjdG9yPFNWR0lu
bGluZVRleHRCb3gqPiBtX3BhdGhMYXlvdXRCb3hlczsKKyAgICBTVkdUZXh0Q2h1bmtCdWlsZGVy
IG1fY2h1bmtMYXlvdXRCdWlsZGVyOworCisgICAgU1ZHVGV4dEZyYWdtZW50IG1fY3VycmVudFRl
eHRGcmFnbWVudDsKKyAgICBmbG9hdCBtX3g7CisgICAgZmxvYXQgbV95OworICAgIGZsb2F0IG1f
ZHg7CisgICAgZmxvYXQgbV9keTsKKyAgICBib29sIG1faXNWZXJ0aWNhbFRleHQ7CisgICAgYm9v
bCBtX2luUGF0aExheW91dDsKKworICAgIC8vIFRleHQgb24gcGF0aCBsYXlvdXQKKyAgICBQYXRo
IG1fdGV4dFBhdGg7CisgICAgZmxvYXQgbV90ZXh0UGF0aExlbmd0aDsKKyAgICBmbG9hdCBtX3Rl
eHRQYXRoU3RhcnRPZmZzZXQ7CisgICAgZmxvYXQgbV90ZXh0UGF0aEN1cnJlbnRPZmZzZXQ7Cisg
ICAgZmxvYXQgbV90ZXh0UGF0aFNwYWNpbmc7CisgICAgZmxvYXQgbV90ZXh0UGF0aFNjYWxpbmc7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAkocmV2aXNp
b24gNjg4NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNyArMjUsMTAgQEAKICNpbmNsdWRlICJJbmxpbmVGbG93Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNp
bmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJv
eC5oIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJTVkdU
ZXh0TWV0cmljcy5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zMywxMSArMzYsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gQmFz
ZSBzdHJ1Y3R1cmUgZm9yIGNhbGxiYWNrIHVzZXIgZGF0YQogc3RydWN0IFNWR1RleHRRdWVyeTo6
RGF0YSB7CiAgICAgRGF0YSgpCi0gICAgICAgIDogcHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJzKDAp
CisgICAgICAgIDogaXNWZXJ0aWNhbFRleHQoZmFsc2UpCisgICAgICAgICwgcHJvY2Vzc2VkQ2hh
cmFjdGVycygwKQorICAgICAgICAsIHRleHRSZW5kZXJlcigwKQorICAgICAgICAsIHRleHRCb3go
MCkKICAgICB7CiAgICAgfQogCi0gICAgdW5zaWduZWQgcHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJz
OworICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQ7CisgICAgdW5zaWduZWQgcHJvY2Vzc2VkQ2hhcmFj
dGVyczsKKyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXI7CisgICAgY29uc3Qg
U1ZHSW5saW5lVGV4dEJveCogdGV4dEJveDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgSW5saW5lRmxv
d0JveCogZmxvd0JveEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCkBAIC03MCwx
MyArNzksMTUgQEAgc3RhdGljIGlubGluZSBJbmxpbmVGbG93Qm94KiBmbG93Qm94Rm9yUgogICAg
IHJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IG1hcExlbmd0aFRocm91Z2hDaHVu
a1RyYW5zZm9ybWF0aW9uKGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGJvb2wgaXNW
ZXJ0aWNhbFRleHQsIGZsb2F0IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgbWFwTGVuZ3Ro
VGhyb3VnaEZyYWdtZW50VHJhbnNmb3JtYXRpb24oY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFn
bWVudCwgYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgbGVuZ3RoKQogewotICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtID0gdGV4dEJveC0+Y2h1bmtUcmFuc2Zvcm1hdGlvbigp
OwotICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgIGlmIChmcmFnbWVudC50cmFu
c2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICByZXR1cm4gbGVuZ3RoOwotICAgICAgICAKLSAg
ICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGF0aWNfY2FzdDxkb3VibGU+KGxlbmd0
aCkgKiAoaXNWZXJ0aWNhbFRleHQgPyB0cmFuc2Zvcm0uZCgpIDogdHJhbnNmb3JtLmEoKSkpOwor
CisgICAgaWYgKGlzVmVydGljYWxUZXh0KQorICAgICAgICByZXR1cm4gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChzdGF0aWNfY2FzdDxkb3VibGU+KGxlbmd0aCkgKiBmcmFnbWVudC50cmFuc2Zvcm0u
eVNjYWxlKCkpOworCisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoc3RhdGljX2Nh
c3Q8ZG91YmxlPihsZW5ndGgpICogZnJhZ21lbnQudHJhbnNmb3JtLnhTY2FsZSgpKTsKIH0KIAog
U1ZHVGV4dFF1ZXJ5OjpTVkdUZXh0UXVlcnkoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKQEAgLTEw
NCw3NCArMTE1LDEzNyBAQCB2b2lkIFNWR1RleHRRdWVyeTo6Y29sbGVjdFRleHRCb3hlc0luRmxv
CiAgICAgfQogfQogCi1ib29sIFNWR1RleHRRdWVyeTo6ZXhlY3V0ZVF1ZXJ5KERhdGEqIHF1ZXJ5
RGF0YSwgUHJvY2Vzc1RleHRDaHVua1BhcnRDYWxsYmFjayBjaHVua1BhcnRDYWxsYmFjaykgY29u
c3QKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjpleGVjdXRlUXVlcnkoRGF0YSogcXVlcnlEYXRhLCBQcm9j
ZXNzVGV4dEZyYWdtZW50Q2FsbGJhY2sgZnJhZ21lbnRDYWxsYmFjaykgY29uc3QKIHsKICAgICBB
U1NFUlQoIW1fdGV4dEJveGVzLmlzRW1wdHkoKSk7Ci0gICAgYm9vbCBmaW5pc2hlZCA9IGZhbHNl
OworCisgICAgdW5zaWduZWQgcHJvY2Vzc2VkQ2hhcmFjdGVycyA9IDA7CisgICAgdW5zaWduZWQg
dGV4dEJveENvdW50ID0gbV90ZXh0Qm94ZXMuc2l6ZSgpOwogCiAgICAgLy8gTG9vcCBvdmVyIGFs
bCB0ZXh0IGJveGVzCi0gICAgY29uc3QgVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV90ZXh0Qm94ZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8U1ZHSW5s
aW5lVGV4dEJveCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGV4dEJveGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94
ID0gKml0OwotICAgICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rUGFydD4mIHBhcnRzID0g
dGV4dEJveC0+c3ZnVGV4dENodW5rUGFydHMoKTsKLQotICAgICAgICBpbnQgcHJvY2Vzc2VkQ2hh
cmFjdGVycyA9IDA7Ci0KLSAgICAgICAgLy8gTG9vcCBvdmVyIGFsbCB0ZXh0IGNodW5rIHBhcnRz
IGluIHRoaXMgdGV4dCBib3gsIGZpcmluZyBhIGNhbGxiYWNrIGZvciBlYWNoIGNodW5rIHBhcnQu
Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3RfaXRlcmF0b3Ig
cGFydEVuZCA9IHBhcnRzLmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxTVkdUZXh0Q2h1bmtQ
YXJ0Pjo6Y29uc3RfaXRlcmF0b3IgcGFydEl0ID0gcGFydHMuYmVnaW4oKTsgcGFydEl0ICE9IHBh
cnRFbmQ7ICsrcGFydEl0KSB7Ci0gICAgICAgICAgICBpZiAoKHRoaXMtPipjaHVua1BhcnRDYWxs
YmFjaykocXVlcnlEYXRhLCB0ZXh0Qm94LCAqcGFydEl0KSkgewotICAgICAgICAgICAgICAgIGZp
bmlzaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAg
ICBmb3IgKHVuc2lnbmVkIHRleHRCb3hQb3NpdGlvbiA9IDA7IHRleHRCb3hQb3NpdGlvbiA8IHRl
eHRCb3hDb3VudDsgKyt0ZXh0Qm94UG9zaXRpb24pIHsKKyAgICAgICAgcXVlcnlEYXRhLT50ZXh0
Qm94ID0gbV90ZXh0Qm94ZXMuYXQodGV4dEJveFBvc2l0aW9uKTsKKyAgICAgICAgcXVlcnlEYXRh
LT50ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocXVlcnlEYXRhLT50ZXh0Qm94
LT50ZXh0UmVuZGVyZXIoKSk7CisgICAgICAgIEFTU0VSVChxdWVyeURhdGEtPnRleHRSZW5kZXJl
cik7CisgICAgICAgIEFTU0VSVChxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+c3R5bGUoKSk7Cisg
ICAgICAgIEFTU0VSVChxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUo
KSk7CisKKyAgICAgICAgcXVlcnlEYXRhLT5pc1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0
aW5nTW9kZShxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7Cisg
ICAgICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSBxdWVyeURh
dGEtPnRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKyAgICAKKyAgICAgICAgLy8gTG9vcCBvdmVy
IGFsbCB0ZXh0IGZyYWdtZW50cyBpbiB0aGlzIHRleHQgYm94LCBmaXJpbmcgYSBjYWxsYmFjayBm
b3IgZWFjaC4KKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRDb3VudCA9IGZyYWdtZW50cy5zaXpl
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudENvdW50OyArK2kp
IHsKKyAgICAgICAgICAgIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVu
dHMuYXQoaSk7CisgICAgICAgICAgICBpZiAoKHRoaXMtPipmcmFnbWVudENhbGxiYWNrKShxdWVy
eURhdGEsIGZyYWdtZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAg
ICAgICAgcHJvY2Vzc2VkQ2hhcmFjdGVycyArPSBwYXJ0SXQtPmxlbmd0aDsKKyAgICAgICAgICAg
IHByb2Nlc3NlZENoYXJhY3RlcnMgKz0gZnJhZ21lbnQubGVuZ3RoOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKGZpbmlzaGVkKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcXVlcnlE
YXRhLT5wcm9jZXNzZWRDaHVua0NoYXJhY3RlcnMgKz0gcHJvY2Vzc2VkQ2hhcmFjdGVyczsKKyAg
ICAgICAgcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzID0gcHJvY2Vzc2VkQ2hhcmFjdGVy
czsKICAgICB9CiAKLSAgICByZXR1cm4gZmluaXNoZWQ7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRBbmRMZW5ndGhJbnRvQ2h1bmtQYXJ0Q29vcmRp
bmF0ZXMoRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBj
b25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0LCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5k
UG9zaXRpb24pIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFn
bWVudCYgZnJhZ21lbnQsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29u
c3QKIHsKLSAgICAvLyBSZXVzZSB0aGUgc2FtZSBsb2dpYyB1c2VkIGZvciB0ZXh0IHNlbGVjdGlv
biAmIHBhaW50aW5nLCB0byBtYXAgb3VyIHF1ZXJ5IHN0YXJ0L2xlbmd0aCBpbnRvIHN0YXJ0L2Vu
ZFBvc2l0aW9ucyBvZiB0aGUgY3VycmVudCB0ZXh0IGNodW5rIHBhcnQuCi0gICAgc3RhcnRQb3Np
dGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENodW5rQ2hhcmFjdGVyczsKLSAgICBlbmRQb3Np
dGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENodW5rQ2hhcmFjdGVyczsKLSAgICB0ZXh0Qm94
LT5tYXBTdGFydEVuZFBvc2l0aW9uc0ludG9DaHVua1BhcnRDb29yZGluYXRlcyhzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbiwgcGFydCk7CisgICAgLy8gUmV1c2UgdGhlIHNhbWUgbG9naWMgdXNl
ZCBmb3IgdGV4dCBzZWxlY3Rpb24gJiBwYWludGluZywgdG8gbWFwIG91ciBxdWVyeSBzdGFydC9s
ZW5ndGggaW50byBzdGFydC9lbmRQb3NpdGlvbnMgb2YgdGhlIGN1cnJlbnQgdGV4dCBmcmFnbWVu
dC4KKyAgICBzdGFydFBvc2l0aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVyczsK
KyAgICBlbmRQb3NpdGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnM7CisKKyAg
ICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbiB8fCBzdGFydFBvc2l0aW9uIDwgMCB8
fCBlbmRQb3NpdGlvbiA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcXVl
cnlEYXRhLT50ZXh0Qm94LT5tYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5h
dGVzKGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIC8vIElmIHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbiwgdGhlbiB0
aGUgcG9zaXRpb24gd2UncmUgc3VwcG9zZWQgdG8gbWVhc3VyZSBsaWVzIGluIHRoaXMgY2h1bmsg
cGFydC4KLSAgICByZXR1cm4gc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uOworICAgIG1vZGlm
eVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhxdWVyeURhdGEsIHN0YXJ0UG9z
aXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0
aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotZmxvYXQgU1ZHVGV4dFF1ZXJ5OjptZWFzdXJl
Q2hhcmFjdGVyUmFuZ2UoY29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBib29sIGlzVmVydGljYWxUZXh0LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGxl
bmd0aCkgY29uc3QKK3ZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jl
c3BlY3RpbmdMaWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCBpbnQmIHN0YXJ0UG9zaXRpb24sIGlu
dCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFZlcnRpY2FsIHdyaXRpbmcg
bW9kZSBuZWVkcyB0byBiZSBoYW5kbGVkIG1vcmUgYWNjdXJhdGUuCi0gICAgaWYgKGlzVmVydGlj
YWxUZXh0KQotICAgICAgICByZXR1cm4gbGVuZ3RoICogc3R5bGUtPmZvbnQoKS5oZWlnaHQoKTsK
KyAgICBjb25zdCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgbGF5b3V0QXR0cmlidXRlcyA9IHF1
ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5sYXlvdXRBdHRyaWJ1dGVzKCk7CisgICAgY29uc3QgVmVj
dG9yPGZsb2F0PiYgeFZhbHVlcyA9IGxheW91dEF0dHJpYnV0ZXMueFZhbHVlcygpOworICAgIGNv
bnN0IFZlY3RvcjxTVkdUZXh0TWV0cmljcz4mIHRleHRNZXRyaWNzVmFsdWVzID0gbGF5b3V0QXR0
cmlidXRlcy50ZXh0TWV0cmljc1ZhbHVlcygpOwogCi0gICAgY29uc3QgVUNoYXIqIHN0YXJ0Q2hh
cmFjdGVyID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPmNoYXJhY3RlcnMoKSArIHRleHRCb3gt
PnN0YXJ0KCkgKyBzdGFydFBvc2l0aW9uOwotICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLmZsb2F0
V2lkdGgoc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3goc3RhcnRDaGFyYWN0ZXIsIGxlbmd0aCwg
c3R5bGUsIHRleHRCb3gpKTsKLX0KKyAgICB1bnNpZ25lZCBib3hTdGFydCA9IHF1ZXJ5RGF0YS0+
dGV4dEJveC0+c3RhcnQoKTsKKyAgICB1bnNpZ25lZCBib3hMZW5ndGggPSBxdWVyeURhdGEtPnRl
eHRCb3gtPmxlbigpOwogCi0vLyBudW1iZXJPZkNoYXJhY3RlcnMoKSBpbXBsZW1lbnRhdGlvbgot
c3RydWN0IE51bWJlck9mQ2hhcmFjdGVyc0RhdGEgOiBTVkdUZXh0UXVlcnk6OkRhdGEgewotICAg
IE51bWJlck9mQ2hhcmFjdGVyc0RhdGEoKQotICAgICAgICA6IGNoYXJhY3RlcnMoMCkKLSAgICB7
CisgICAgdW5zaWduZWQgdGV4dE1ldHJpY3NPZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIHRleHRN
ZXRyaWNzU2l6ZSA9IHRleHRNZXRyaWNzVmFsdWVzLnNpemUoKTsKKworICAgIHVuc2lnbmVkIHBv
c2l0aW9uT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBwb3NpdGlvblNpemUgPSB4VmFsdWVzLnNp
emUoKTsKKworICAgIGJvb2wgYWx0ZXJTdGFydFBvc2l0aW9uID0gdHJ1ZTsKKyAgICBib29sIGFs
dGVyRW5kUG9zaXRpb24gPSB0cnVlOworCisgICAgaW50IGxhc3RQb3NpdGlvbk9mZnNldCA9IC0x
OworICAgIGZvciAoOyB0ZXh0TWV0cmljc09mZnNldCA8IHRleHRNZXRyaWNzU2l6ZSAmJiBwb3Np
dGlvbk9mZnNldCA8IHBvc2l0aW9uU2l6ZTsgKyt0ZXh0TWV0cmljc09mZnNldCkgeworICAgICAg
ICBjb25zdCBTVkdUZXh0TWV0cmljcyYgbWV0cmljcyA9IHRleHRNZXRyaWNzVmFsdWVzLmF0KHRl
eHRNZXRyaWNzT2Zmc2V0KTsKKworICAgICAgICAvLyBBZHZhbmNlIHRvIHRleHQgYm94IHN0YXJ0
IGxvY2F0aW9uLgorICAgICAgICBpZiAocG9zaXRpb25PZmZzZXQgPCBib3hTdGFydCkgeworICAg
ICAgICAgICAgcG9zaXRpb25PZmZzZXQgKz0gbWV0cmljcy5sZW5ndGgoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RvcCBpZiB3ZSd2ZSBmaW5pc2hl
ZCBwcm9jZXNzaW5nIHRoaXMgdGV4dCBib3guCisgICAgICAgIGlmIChwb3NpdGlvbk9mZnNldCA+
PSBib3hTdGFydCArIGJveExlbmd0aCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8v
IElmIHRoZSBzdGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBtZXRyaWNz
IGxpc3QsIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgorICAgICAgICBpZiAoc3RhcnRQb3Np
dGlvbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkKKyAgICAgICAgICAgIGFs
dGVyU3RhcnRQb3NpdGlvbiA9IGZhbHNlOworCisgICAgICAgIC8vIElmIHRoZSBzdGFydCBwb3Np
dGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBtZXRyaWNzIGxpc3QsIHdlIGRvbid0IG5l
ZWQgdG8gbW9kaWZ5IGl0LgorICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gc3RhdGljX2Nhc3Q8
aW50Pihwb3NpdGlvbk9mZnNldCkpCisgICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFs
c2U7CisKKyAgICAgICAgLy8gRGV0ZWN0IGxpZ2F0dXJlcy4KKyAgICAgICAgaWYgKGxhc3RQb3Np
dGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlvbk9mZnNldCA+
IDEpIHsKKyAgICAgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlv
biA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBzdGFydFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50
Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFz
dFBvc2l0aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIGFsdGVyU3RhcnRQb3NpdGlvbiA9IGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYWx0ZXJFbmRQb3NpdGlvbiAm
JiBlbmRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBlbmRQb3NpdGlvbiA8IHN0YXRp
Y19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgZW5kUG9zaXRp
b24gPSBwb3NpdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFsdGVyU3Rh
cnRQb3NpdGlvbiAmJiAhYWx0ZXJFbmRQb3NpdGlvbikKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGxhc3RQb3NpdGlvbk9mZnNldCA9IHBvc2l0aW9uT2Zmc2V0OworICAgICAgICBwb3Np
dGlvbk9mZnNldCArPSBtZXRyaWNzLmxlbmd0aCgpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGNo
YXJhY3RlcnM7Ci19OworICAgIGlmICghYWx0ZXJTdGFydFBvc2l0aW9uICYmICFhbHRlckVuZFBv
c2l0aW9uKQorICAgICAgICByZXR1cm47CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5OjpudW1iZXJPZkNo
YXJhY3RlcnNDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRleHRCb3gq
LCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSBjb25zdAorICAgIGlmIChsYXN0UG9zaXRp
b25PZmZzZXQgIT0gLTEgJiYgbGFzdFBvc2l0aW9uT2Zmc2V0IC0gcG9zaXRpb25PZmZzZXQgPiAx
KSB7CisgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxh
c3RQb3NpdGlvbk9mZnNldCAmJiBzdGFydFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3Np
dGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRpb25P
ZmZzZXQ7CisgICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4gbGFzdFBv
c2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9m
ZnNldCkpIHsKKyAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gcG9zaXRpb25PZmZzZXQ7CisgICAg
ICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CisK
Ky8vIG51bWJlck9mQ2hhcmFjdGVycygpIGltcGxlbWVudGF0aW9uCitib29sIFNWR1RleHRRdWVy
eTo6bnVtYmVyT2ZDaGFyYWN0ZXJzQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYpIGNvbnN0CiB7Ci0gICAgTnVtYmVyT2ZDaGFyYWN0ZXJzRGF0YSogZGF0YSA9IHN0YXRpY19j
YXN0PE51bWJlck9mQ2hhcmFjdGVyc0RhdGEqPihxdWVyeURhdGEpOwotICAgIGRhdGEtPmNoYXJh
Y3RlcnMgKz0gcGFydC5sZW5ndGg7CisgICAgLy8gbm8tb3AKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKQEAgLTE4MCwzOSArMjU0LDM0IEBAIHVuc2lnbmVkIFNWR1RleHRRdWVyeTo6bnVtYmVyT2ZD
aGFyYWN0ZXIKICAgICBpZiAobV90ZXh0Qm94ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIE51bWJlck9mQ2hhcmFjdGVyc0RhdGEgZGF0YTsKKyAgICBEYXRhIGRhdGE7CiAg
ICAgZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpudW1iZXJPZkNoYXJhY3RlcnND
YWxsYmFjayk7Ci0gICAgcmV0dXJuIGRhdGEuY2hhcmFjdGVyczsKKyAgICByZXR1cm4gZGF0YS5w
cm9jZXNzZWRDaGFyYWN0ZXJzOwogfQogCiAvLyB0ZXh0TGVuZ3RoKCkgaW1wbGVtZW50YXRpb24K
IHN0cnVjdCBUZXh0TGVuZ3RoRGF0YSA6IFNWR1RleHRRdWVyeTo6RGF0YSB7CiAgICAgVGV4dExl
bmd0aERhdGEoKQotICAgICAgICA6IHRleHRMZW5ndGgoMC4wZikKKyAgICAgICAgOiB0ZXh0TGVu
Z3RoKDApCiAgICAgewogICAgIH0KIAogICAgIGZsb2F0IHRleHRMZW5ndGg7CiB9OwogCi1ib29s
IFNWR1RleHRRdWVyeTo6dGV4dExlbmd0aENhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3Qg
U1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkg
Y29uc3QKK2Jvb2wgU1ZHVGV4dFF1ZXJ5Ojp0ZXh0TGVuZ3RoQ2FsbGJhY2soRGF0YSogcXVlcnlE
YXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdAogewogICAgIFRleHRM
ZW5ndGhEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8VGV4dExlbmd0aERhdGEqPihxdWVyeURhdGEp
OwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnN0
eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBp
c1ZlcnRpY2FsV3JpdGluZ01vZGUoc3R5bGUtPnN2Z1N0eWxlKCkpOwotICAgIGZsb2F0IHBhcnRM
ZW5ndGggPSBpc1ZlcnRpY2FsVGV4dCA/IHBhcnQuaGVpZ2h0IDogcGFydC53aWR0aDsKLQotICAg
IGRhdGEtPnRleHRMZW5ndGggKz0gbWFwTGVuZ3RoVGhyb3VnaENodW5rVHJhbnNmb3JtYXRpb24o
dGV4dEJveCwgaXNWZXJ0aWNhbFRleHQsIHBhcnRMZW5ndGgpOworICAgIGZsb2F0IGZyYWdtZW50
TGVuZ3RoID0gcXVlcnlEYXRhLT5pc1ZlcnRpY2FsVGV4dCA/IGZyYWdtZW50LmhlaWdodCA6IGZy
YWdtZW50LndpZHRoOworICAgIGRhdGEtPnRleHRMZW5ndGggKz0gbWFwTGVuZ3RoVGhyb3VnaEZy
YWdtZW50VHJhbnNmb3JtYXRpb24oZnJhZ21lbnQsIHF1ZXJ5RGF0YS0+aXNWZXJ0aWNhbFRleHQs
IGZyYWdtZW50TGVuZ3RoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGZsb2F0IFNWR1RleHRR
dWVyeTo6dGV4dExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fdGV4dEJveGVzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgVGV4dExl
bmd0aERhdGEgZGF0YTsKICAgICBleGVjdXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0UXVlcnk6OnRl
eHRMZW5ndGhDYWxsYmFjayk7CkBAIC0yMjQsNyArMjkzLDcgQEAgc3RydWN0IFN1YlN0cmluZ0xl
bmd0aERhdGEgOiBTVkdUZXh0UXVlcgogICAgIFN1YlN0cmluZ0xlbmd0aERhdGEodW5zaWduZWQg
cXVlcnlTdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBxdWVyeUxlbmd0aCkKICAgICAgICAgOiBzdGFy
dFBvc2l0aW9uKHF1ZXJ5U3RhcnRQb3NpdGlvbikKICAgICAgICAgLCBsZW5ndGgocXVlcnlMZW5n
dGgpCi0gICAgICAgICwgc3ViU3RyaW5nTGVuZ3RoKDAuMGYpCisgICAgICAgICwgc3ViU3RyaW5n
TGVuZ3RoKDApCiAgICAgewogICAgIH0KIApAQCAtMjM0LDI5ICszMDMsMjYgQEAgc3RydWN0IFN1
YlN0cmluZ0xlbmd0aERhdGEgOiBTVkdUZXh0UXVlcgogICAgIGZsb2F0IHN1YlN0cmluZ0xlbmd0
aDsKIH07CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayhEYXRh
KiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1Rl
eHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVu
Z3RoQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdt
ZW50KSBjb25zdAogewogICAgIFN1YlN0cmluZ0xlbmd0aERhdGEqIGRhdGEgPSBzdGF0aWNfY2Fz
dDxTdWJTdHJpbmdMZW5ndGhEYXRhKj4ocXVlcnlEYXRhKTsKIAogICAgIGludCBzdGFydFBvc2l0
aW9uID0gZGF0YS0+c3RhcnRQb3NpdGlvbjsKICAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBv
c2l0aW9uICsgZGF0YS0+bGVuZ3RoOwotICAgIGlmICghbWFwU3RhcnRBbmRMZW5ndGhJbnRvQ2h1
bmtQYXJ0Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCB0ZXh0Qm94LCBwYXJ0LCBzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbikpCisgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVu
dENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
dGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKKyAg
ICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0
ZXJSYW5nZShxdWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zm
c2V0ICsgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKKyAgICBm
bG9hdCBmcmFnbWVudExlbmd0aCA9IHF1ZXJ5RGF0YS0+aXNWZXJ0aWNhbFRleHQgPyBtZXRyaWNz
LmhlaWdodCgpIDogbWV0cmljcy53aWR0aCgpOwogCi0gICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9
IGlzVmVydGljYWxXcml0aW5nTW9kZShzdHlsZS0+c3ZnU3R5bGUoKSk7Ci0gICAgZmxvYXQgcGFy
dExlbmd0aCA9IG1lYXN1cmVDaGFyYWN0ZXJSYW5nZSh0ZXh0Qm94LCBzdHlsZSwgaXNWZXJ0aWNh
bFdyaXRpbmdNb2RlKHN0eWxlLT5zdmdTdHlsZSgpKSwgcGFydC5vZmZzZXQgKyBzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOwotCi0gICAgZGF0YS0+c3ViU3RyaW5n
TGVuZ3RoICs9IG1hcExlbmd0aFRocm91Z2hDaHVua1RyYW5zZm9ybWF0aW9uKHRleHRCb3gsIGlz
VmVydGljYWxUZXh0LCBwYXJ0TGVuZ3RoKTsKKyAgICBkYXRhLT5zdWJTdHJpbmdMZW5ndGggKz0g
bWFwTGVuZ3RoVGhyb3VnaEZyYWdtZW50VHJhbnNmb3JtYXRpb24oZnJhZ21lbnQsIHF1ZXJ5RGF0
YS0+aXNWZXJ0aWNhbFRleHQsIGZyYWdtZW50TGVuZ3RoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIGZsb2F0IFNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVkIHN0YXJ0UG9z
aXRpb24sIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAgICBpZiAobV90ZXh0Qm94ZXMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gMC4wZjsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBT
dWJTdHJpbmdMZW5ndGhEYXRhIGRhdGEoc3RhcnRQb3NpdGlvbiwgbGVuZ3RoKTsKICAgICBleGVj
dXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKTsK
QEAgLTI3NCwxNyArMzQwLDI5IEBAIHN0cnVjdCBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRh
IDogU1YKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9zaXRpb247CiB9OwogCi1ib29sIFNWR1RleHRR
dWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBj
b25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBw
YXJ0KSBjb25zdAorYm9vbCBTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNh
bGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkg
Y29uc3QKIHsKICAgICBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3RhdGlj
X2Nhc3Q8U3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKICAgICBp
bnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwogICAgIGludCBlbmRQb3NpdGlvbiA9
IHN0YXJ0UG9zaXRpb24gKyAxOwotICAgIGlmICghbWFwU3RhcnRBbmRMZW5ndGhJbnRvQ2h1bmtQ
YXJ0Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCB0ZXh0Qm94LCBwYXJ0LCBzdGFydFBvc2l0aW9uLCBl
bmRQb3NpdGlvbikpCisgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENv
b3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgU1ZHQ2hhciYgY2hhcmFjdGVy
ID0gKihwYXJ0LmZpcnN0Q2hhcmFjdGVyICsgc3RhcnRQb3NpdGlvbik7Ci0gICAgZGF0YS0+c3Rh
cnRQb3NpdGlvbiA9IHRleHRCb3gtPmNodW5rVHJhbnNmb3JtYXRpb24oKS5tYXBQb2ludChGbG9h
dFBvaW50KGNoYXJhY3Rlci54LCBjaGFyYWN0ZXIueSkpOworICAgIGRhdGEtPnN0YXJ0UG9zaXRp
b24gPSBGbG9hdFBvaW50KGZyYWdtZW50LngsIGZyYWdtZW50LnkpOworCisgICAgaWYgKHN0YXJ0
UG9zaXRpb24gPiAwKSB7CisgICAgICAgIFNWR1RleHRNZXRyaWNzIG1ldHJpY3MgPSBTVkdUZXh0
TWV0cmljczo6bWVhc3VyZUNoYXJhY3RlclJhbmdlKHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLCBm
cmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICBpZiAo
cXVlcnlEYXRhLT5pc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGRhdGEtPnN0YXJ0UG9zaXRp
b24ubW92ZSgwLCBtZXRyaWNzLmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZGF0YS0+c3RhcnRQb3NpdGlvbi5tb3ZlKG1ldHJpY3Mud2lkdGgoKSwgMCk7CisgICAgfQorCisg
ICAgaWYgKGZyYWdtZW50LnRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgZGF0YS0+c3RhcnRQb3NpdGlvbiA9IGZyYWdtZW50LnRyYW5zZm9ybS5tYXBQ
b2ludChkYXRhLT5zdGFydFBvc2l0aW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzA5
LDMwICszODcsMjcgQEAgc3RydWN0IEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhIDogU1ZHVAog
ICAgIEZsb2F0UG9pbnQgZW5kUG9zaXRpb247CiB9OwogCi1ib29sIFNWR1RleHRRdWVyeTo6ZW5k
UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHSW5s
aW5lVGV4dEJveCogdGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkgY29uc3QK
K2Jvb2wgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSog
cXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdAogewogICAg
IEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RW5kUG9zaXRp
b25PZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOwogCiAgICAgaW50IHN0YXJ0UG9zaXRpb24g
PSBkYXRhLT5wb3NpdGlvbjsKICAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsg
MTsKLSAgICBpZiAoIW1hcFN0YXJ0QW5kTGVuZ3RoSW50b0NodW5rUGFydENvb3JkaW5hdGVzKHF1
ZXJ5RGF0YSwgdGV4dEJveCwgcGFydCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQorICAg
IGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURh
dGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGNvbnN0IFNWR0NoYXImIGNoYXJhY3RlciA9ICoocGFydC5maXJzdENo
YXJhY3RlciArIHN0YXJ0UG9zaXRpb24pOwotICAgIGRhdGEtPmVuZFBvc2l0aW9uID0gRmxvYXRQ
b2ludChjaGFyYWN0ZXIueCwgY2hhcmFjdGVyLnkpOwotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsK
KyAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoZnJhZ21lbnQueCwgZnJhZ21lbnQu
eSk7CiAKLSAgICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN0
eWxlLT5zdmdTdHlsZSgpKTsKLSAgICBmbG9hdCBnbHlwaEFkdmFuY2UgPSBtZWFzdXJlQ2hhcmFj
dGVyUmFuZ2UodGV4dEJveCwgc3R5bGUsIGlzVmVydGljYWxUZXh0LCBwYXJ0Lm9mZnNldCArIHN0
YXJ0UG9zaXRpb24sIDEpOwotCi0gICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICBkYXRh
LT5lbmRQb3NpdGlvbi5tb3ZlKDAuMGYsIGdseXBoQWR2YW5jZSk7CisgICAgU1ZHVGV4dE1ldHJp
Y3MgbWV0cmljcyA9IFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlE
YXRhLT50ZXh0UmVuZGVyZXIsIGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCwgc3RhcnRQb3Np
dGlvbiArIDEpOworICAgIGlmIChxdWVyeURhdGEtPmlzVmVydGljYWxUZXh0KQorICAgICAgICBk
YXRhLT5lbmRQb3NpdGlvbi5tb3ZlKDAsIG1ldHJpY3MuaGVpZ2h0KCkpOwogICAgIGVsc2UKLSAg
ICAgICAgZGF0YS0+ZW5kUG9zaXRpb24ubW92ZShnbHlwaEFkdmFuY2UsIDAuMGYpOworICAgICAg
ICBkYXRhLT5lbmRQb3NpdGlvbi5tb3ZlKG1ldHJpY3Mud2lkdGgoKSwgMCk7CiAKLSAgICBkYXRh
LT5lbmRQb3NpdGlvbiA9IHRleHRCb3gtPmNodW5rVHJhbnNmb3JtYXRpb24oKS5tYXBQb2ludChk
YXRhLT5lbmRQb3NpdGlvbik7CisgICAgaWYgKGZyYWdtZW50LnRyYW5zZm9ybS5pc0lkZW50aXR5
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGF0YS0+ZW5kUG9zaXRpb24gPSBmcmFn
bWVudC50cmFuc2Zvcm0ubWFwUG9pbnQoZGF0YS0+ZW5kUG9zaXRpb24pOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0zNTAsNyArNDI1LDcgQEAgRmxvYXRQb2ludCBTVkdUZXh0UXVlcnk6OmVu
ZFBvc2l0aW9uT2ZDaAogc3RydWN0IFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhIDogU1ZHVGV4dFF1
ZXJ5OjpEYXRhIHsKICAgICBSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSh1bnNpZ25lZCBxdWVyeVBv
c2l0aW9uKQogICAgICAgICA6IHBvc2l0aW9uKHF1ZXJ5UG9zaXRpb24pCi0gICAgICAgICwgcm90
YXRpb24oMC4wZikKKyAgICAgICAgLCByb3RhdGlvbigwKQogICAgIHsKICAgICB9CiAKQEAgLTM1
OCwyNCArNDMzLDIzIEBAIHN0cnVjdCBSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSA6IFNWR1RleHQK
ICAgICBmbG9hdCByb3RhdGlvbjsKIH07CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlvbk9m
Q2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94
KiB0ZXh0Qm94LCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSBjb25zdAorYm9vbCBTVkdU
ZXh0UXVlcnk6OnJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNv
bnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgUm90YXRpb25PZkNo
YXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSo+
KHF1ZXJ5RGF0YSk7CiAKICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwog
ICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwotICAgIGlmICghbWFwU3Rh
cnRBbmRMZW5ndGhJbnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCB0ZXh0Qm94LCBw
YXJ0LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCisgICAgaWYgKCFtYXBTdGFydEVuZFBv
c2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29u
c3QgU1ZHQ2hhciYgY2hhcmFjdGVyID0gKihwYXJ0LmZpcnN0Q2hhcmFjdGVyICsgc3RhcnRQb3Np
dGlvbik7Ci0gICAgZGF0YS0+cm90YXRpb24gPSBjaGFyYWN0ZXIuYW5nbGU7CisgICAgZGF0YS0+
cm90YXRpb24gPSBmcmFnbWVudC5hbmdsZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogZmxvYXQg
U1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlvbk9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25z
dAogewogICAgIGlmIChtX3RleHRCb3hlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwLjBm
OworICAgICAgICByZXR1cm4gMDsKIAogICAgIFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhIGRhdGEo
cG9zaXRpb24pOwogICAgIGV4ZWN1dGVRdWVyeSgmZGF0YSwgJlNWR1RleHRRdWVyeTo6cm90YXRp
b25PZkNoYXJhY3RlckNhbGxiYWNrKTsKQEAgLTM5MywyMCArNDY3LDM3IEBAIHN0cnVjdCBFeHRl
bnRPZkNoYXJhY3RlckRhdGEgOiBTVkdUZXh0UXUKICAgICBGbG9hdFJlY3QgZXh0ZW50OwogfTsK
IAotYm9vbCBTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVl
cnlEYXRhLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBjb25zdCBTVkdUZXh0Q2h1
bmtQYXJ0JiBwYXJ0KSBjb25zdAorc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUdseXBoQm91
bmRhcmllcyhTVkdUZXh0UXVlcnk6OkRhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIEZsb2F0UmVjdCYgZXh0ZW50KQorewor
ICAgIGV4dGVudC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KGZyYWdtZW50LngsIGZyYWdtZW50Lnkg
LSBxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+c3R5bGUoKS0+Zm9udCgpLmFzY2VudCgpKSk7CisK
KyAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IDApIHsKKyAgICAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0
cmljcyA9IFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50
ZXh0UmVuZGVyZXIsIGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCwgc3RhcnRQb3NpdGlvbik7
CisgICAgICAgIGlmIChxdWVyeURhdGEtPmlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgZXh0
ZW50Lm1vdmUoMCwgbWV0cmljcy5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGV4dGVudC5tb3ZlKG1ldHJpY3Mud2lkdGgoKSwgMCk7CisgICAgfQorCisgICAgU1ZHVGV4dE1l
dHJpY3MgbWV0cmljcyA9IFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVl
cnlEYXRhLT50ZXh0UmVuZGVyZXIsIGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCArIHN0YXJ0
UG9zaXRpb24sIDEpOworICAgIGV4dGVudC5zZXRTaXplKEZsb2F0U2l6ZShtZXRyaWNzLndpZHRo
KCksIG1ldHJpY3MuaGVpZ2h0KCkpKTsKKworICAgIGlmIChmcmFnbWVudC50cmFuc2Zvcm0uaXNJ
ZGVudGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBleHRlbnQgPSBmcmFnbWVudC50cmFu
c2Zvcm0ubWFwUmVjdChleHRlbnQpOworfQorCitib29sIFNWR1RleHRRdWVyeTo6ZXh0ZW50T2ZD
aGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYg
ZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgRXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3Rh
dGljX2Nhc3Q8RXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAogICAgIGludCBz
dGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247CiAgICAgaW50IGVuZFBvc2l0aW9uID0gc3Rh
cnRQb3NpdGlvbiArIDE7Ci0gICAgaWYgKCFtYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRD
b29yZGluYXRlcyhxdWVyeURhdGEsIHRleHRCb3gsIHBhcnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKSkKKyAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRp
bmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJv
eC0+dGV4dFJlbmRlcmVyKCktPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKIAotICAgIGNv
bnN0IFNWR0NoYXImIGNoYXJhY3RlciA9ICoocGFydC5maXJzdENoYXJhY3RlciArIHN0YXJ0UG9z
aXRpb24pOwotICAgIGRhdGEtPmV4dGVudCA9IHRleHRCb3gtPmNhbGN1bGF0ZUdseXBoQm91bmRh
cmllcyhzdHlsZSwgcGFydC5vZmZzZXQgKyBzdGFydFBvc2l0aW9uLCBjaGFyYWN0ZXIpOworICAg
IGNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0
aW9uLCBkYXRhLT5leHRlbnQpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MjMsMjggKzUx
NCwzMCBAQCBGbG9hdFJlY3QgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlCiAvLyBjaGFy
YWN0ZXJOdW1iZXJBdFBvc2l0aW9uKCkgaW1wbGVtZW50YXRpb24KIHN0cnVjdCBDaGFyYWN0ZXJO
dW1iZXJBdFBvc2l0aW9uRGF0YSA6IFNWR1RleHRRdWVyeTo6RGF0YSB7CiAgICAgQ2hhcmFjdGVy
TnVtYmVyQXRQb3NpdGlvbkRhdGEoY29uc3QgRmxvYXRQb2ludCYgcXVlcnlQb3NpdGlvbikKLSAg
ICAgICAgOiBjaGFyYWN0ZXJOdW1iZXIoMCkKLSAgICAgICAgLCBwb3NpdGlvbihxdWVyeVBvc2l0
aW9uKQorICAgICAgICA6IHBvc2l0aW9uKHF1ZXJ5UG9zaXRpb24pCiAgICAgewogICAgIH0KIAot
ICAgIHVuc2lnbmVkIGNoYXJhY3Rlck51bWJlcjsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uOwog
fTsKIAotYm9vbCBTVkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFj
ayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0
IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6Y2hhcmFj
dGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0
aW9uRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRh
Kj4ocXVlcnlEYXRhKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPnRleHRS
ZW5kZXJlcigpLT5zdHlsZSgpOwotICAgIEFTU0VSVChzdHlsZSk7CisgICAgRmxvYXRSZWN0IGV4
dGVudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnQubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJz
ICsgaTsKKyAgICAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAg
ICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVy
eURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpIHsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnQu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgRmxvYXRSZWN0IGV4dGVudCh0ZXh0Qm94LT5jYWxjdWxh
dGVHbHlwaEJvdW5kYXJpZXMoc3R5bGUsIHBhcnQub2Zmc2V0ICsgaSwgKihwYXJ0LmZpcnN0Q2hh
cmFjdGVyICsgaSkpKTsKLSAgICAgICAgaWYgKGV4dGVudC5jb250YWlucyhkYXRhLT5wb3NpdGlv
bikpCisgICAgICAgIGNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhxdWVyeURhdGEsIGZyYWdtZW50
LCBzdGFydFBvc2l0aW9uLCBleHRlbnQpOworICAgICAgICBpZiAoZXh0ZW50LmNvbnRhaW5zKGRh
dGEtPnBvc2l0aW9uKSkgeworICAgICAgICAgICAgZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyAr
PSBpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgKytkYXRhLT5jaGFyYWN0
ZXJOdW1iZXI7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTks
NyArNTUyLDcgQEAgaW50IFNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdAogICAg
IGlmICghZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJB
dFBvc2l0aW9uQ2FsbGJhY2spKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICByZXR1cm4gZGF0
YS5jaGFyYWN0ZXJOdW1iZXI7CisgICAgcmV0dXJuIGRhdGEucHJvY2Vzc2VkQ2hhcmFjdGVyczsK
IH0KIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaAkocmV2aXNpb24g
Njg4NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDE1ICsyMiwxNCBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJTVkdUZXh0RnJhZ21lbnQuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5saW5lRmxvd0JveDsK
IGNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU1ZHSW5saW5l
VGV4dEJveDsKLXN0cnVjdCBTVkdUZXh0Q2h1bmtQYXJ0OwogCiBjbGFzcyBTVkdUZXh0UXVlcnkg
ewogcHVibGljOgpAQCAtNDksMjIgKzQ4LDIyIEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgRGF0YTsK
IAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIGJvb2wgKFNWR1RleHRRdWVyeTo6KlByb2Nlc3NUZXh0
Q2h1bmtQYXJ0Q2FsbGJhY2spKERhdGEqLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgY29uc3Qg
U1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OwotICAgIGJvb2wgZXhlY3V0ZVF1ZXJ5KERhdGEqLCBQ
cm9jZXNzVGV4dENodW5rUGFydENhbGxiYWNrKSBjb25zdDsKKyAgICB0eXBlZGVmIGJvb2wgKFNW
R1RleHRRdWVyeTo6KlByb2Nlc3NUZXh0RnJhZ21lbnRDYWxsYmFjaykoRGF0YSosIGNvbnN0IFNW
R1RleHRGcmFnbWVudCYpIGNvbnN0OworICAgIGJvb2wgZXhlY3V0ZVF1ZXJ5KERhdGEqLCBQcm9j
ZXNzVGV4dEZyYWdtZW50Q2FsbGJhY2spIGNvbnN0OwogCiAgICAgdm9pZCBjb2xsZWN0VGV4dEJv
eGVzSW5GbG93Qm94KElubGluZUZsb3dCb3gqKTsKLSAgICBmbG9hdCBtZWFzdXJlQ2hhcmFjdGVy
UmFuZ2UoY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc1ZlcnRp
Y2FsVGV4dCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBsZW5ndGgpIGNvbnN0OwotICAgIGJvb2wg
bWFwU3RhcnRBbmRMZW5ndGhJbnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMoRGF0YSosIGNvbnN0IFNW
R0lubGluZVRleHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiwgaW50JiBzdGFydFBvc2l0
aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRp
b25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYs
IGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7CisgICAgdm9pZCBt
b2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSosIGludCYgc3Rh
cnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgYm9v
bCBudW1iZXJPZkNoYXJhY3RlcnNDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJv
eCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25zdDsKLSAgICBib29sIHRleHRMZW5ndGhD
YWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVu
a1BhcnQmKSBjb25zdDsKLSAgICBib29sIHN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKERhdGEqLCBj
b25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0Owot
ICAgIGJvb2wgc3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNW
R0lubGluZVRleHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JikgY29uc3Q7Ci0gICAgYm9v
bCBlbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRl
eHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JikgY29uc3Q7Ci0gICAgYm9vbCByb3RhdGlv
bk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBjb25z
dCBTVkdUZXh0Q2h1bmtQYXJ0JikgY29uc3Q7Ci0gICAgYm9vbCBleHRlbnRPZkNoYXJhY3RlckNh
bGxiYWNrKERhdGEqLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENodW5r
UGFydCYpIGNvbnN0OwotICAgIGJvb2wgY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxiYWNr
KERhdGEqLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYp
IGNvbnN0OworICAgIGJvb2wgbnVtYmVyT2ZDaGFyYWN0ZXJzQ2FsbGJhY2soRGF0YSosIGNvbnN0
IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OworICAgIGJvb2wgdGV4dExlbmd0aENhbGxiYWNrKERh
dGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKKyAgICBib29sIHN1YlN0cmluZ0xl
bmd0aENhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKKyAgICBi
b29sIHN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdUZXh0
RnJhZ21lbnQmKSBjb25zdDsKKyAgICBib29sIGVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFj
ayhEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CisgICAgYm9vbCByb3RhdGlv
bk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0
OworICAgIGJvb2wgZXh0ZW50T2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHVGV4
dEZyYWdtZW50JikgY29uc3Q7CisgICAgYm9vbCBjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uQ2Fs
bGJhY2soRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4gbV90ZXh0Qm94ZXM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69463</attachid>
            <date>2010-10-01 06:36:43 -0700</date>
            <delta_ts>2010-10-01 07:50:36 -0700</delta_ts>
            <desc>Patch: WebCore</desc>
            <filename>FullTextPatch-WebCore.diff</filename>
            <type>text/plain</type>
            <size>303259</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODg4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTc1IEBACisyMDEwLTEwLTAxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJld3JpdGUgU1ZHIHRleHQgbGF5b3V0IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NTMyCisKKyAgICAgICAgVGVzdHM6IHN2Zy9j
dXN0b20vdGV4dC1yb3RhdGlvbi5zdmcKKyAgICAgICAgICAgICAgIHN2Zy9jdXN0b20vdGV4dC14
LWR5LWxpc3RzLnN2ZworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUJveDo6aXNTVkdJbmxpbmVGbG93Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdBbGxJbk9uZS5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHQ2hhcmFj
dGVyRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR0NoYXJhY3RlckRh
dGEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5m
by5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dElu
Zm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVJlbmRlclNWR1RleHRCb3gpOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVTVkdJbmxpbmVUZXh0Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZH
VGV4dENodW5rTGF5b3V0SW5mby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NW
R1RleHRDaHVua0xheW91dEluZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZH
VGV4dExheW91dFV0aWxpdGllcy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NW
R1RleHRMYXlvdXRVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmRpZmYp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6OmlzVmVydGljYWxXcml0aW5nTW9kZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5U1ZHV2hpdGVzcGFjZVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0lubGluZVRleHQ6OlJlbmRlclNWR0lubGluZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHSW5saW5lVGV4dDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6bGF5b3V0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjp0b1JlbmRlclNWR0lubGluZVRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpsYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6cG9zaXRpb25Gb3JQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGlu
ZUZsb3dCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93
Qm94Ojpjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lu
bGluZUZsb3dCb3g6OmlzU1ZHSW5saW5lRmxvd0JveCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRC
b3g6OlNWR0lubGluZVRleHRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJv
eDo6b2Zmc2V0Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJv
eDo6b2Zmc2V0Rm9yUG9zaXRpb25JbkZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lu
bGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lu
bGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSZW5kZXJPYmplY3REZWZpbmluaW5nVGV4dERlY29y
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlv
bldpdGhTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRl
eHRXaXRoU2hhZG93cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWlu
dFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlQm91
bmRhcmllcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojp2aXJ0dWFsTG9naWNhbEhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpzZXRMb2dpY2FsSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvbkhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpjbGVhclRleHRGcmFnbWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6dGV4dEZyYWdtZW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpzdGFydHNOZXdUZXh0Q2h1bmspOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2V0U3RhcnRzTmV3VGV4dENodW5rKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Um9vdElubGluZUJveDo6Y29tcHV0ZVBlckNoYXJhY3RlckxheW91dEluZm9ybWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dENoYXJhY3RlcnNJblRleHRC
b3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRDaGlsZEJv
eGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hp
bGRGb3JQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpTVkdSb290SW5saW5lQm94
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnZpcnR1YWxMb2dpY2FsSGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnNldExvZ2ljYWxIZWln
aHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRDaHVuazo6Y2FsY3VsYXRlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRDaHVuazo6Y2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1RleHRDaHVuay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5r
QnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRl
cjo6U1ZHVGV4dENodW5rQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtC
dWlsZGVyOjp0cmFuc2Zvcm1hdGlvbkZvclRleHRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dENodW5rQnVpbGRlcjo6YnVpbGRUZXh0Q2h1bmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDaHVua0J1aWxkZXI6OmxheW91dFRleHRDaHVua3MpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dENodW5rQnVpbGRlcjo6YWRkVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0Q2h1bmspOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWlsZGVyOjpwcm9jZXNzVGV4dEFuY2hv
ckNvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6YnVp
bGRTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R1RleHRDaHVua0J1aWxkZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1
bmtCdWlsZGVyOjp0ZXh0Q2h1bmtzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzOjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcExheW91dFZl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OnRleHRNZXRyaWNzVmFsdWVz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6
OmJ1aWxkTGF5b3V0QXR0cmlidXRlc0ZvclRleHRTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdMZW5ndGhMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdOdW1iZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpbGRMYXlvdXRTY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJJc1NwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJh
Y3RlcklzU3BhY2VPck51bGwpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkUHJlc2VydmVBbGxX
aGl0ZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVp
bGRlcjo6YnVpbGRMYXlvdXRTY29wZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91
dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZE91dGVybW9zdExheW91dFNjb3BlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6cHJvcGFnYXRlTGF5b3V0
QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1
aWxkZXI6Om5leHRMYXlvdXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0
QXR0cmlidXRlc0J1aWxkZXI6OmFzc2lnbkxheW91dEF0dHJpYnV0ZXNGb3JDaGFyYWN0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjphc3NpZ25F
bXB0eUxheW91dEF0dHJpYnV0ZXNGb3JDaGFyYWN0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OkxheW91dFNjb3BlOjpMYXlvdXRTY29wZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5naW5lOjpTVkdUZXh0TGF5b3V0RW5n
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OnVwZGF0ZUNoYXJh
Y2VyUG9zaXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5n
aW5lOjp1cGRhdGVDdXJyZW50VGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRMYXlvdXRFbmdpbmU6OnVwZGF0ZVJlbGF0aXZlUG9zaXRpb25BZGp1c3RtZW50c0lmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OnJlY29yZFRleHRGcmFn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5naW5lOjpwYXJlbnREZWZp
bmVzVGV4dExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5naW5lOjpi
ZWdpblRleHRQYXRoTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdp
bmU6OmVuZFRleHRQYXRoTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRF
bmdpbmU6OmxheW91dElubGluZVRleHRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExh
eW91dEVuZ2luZTo6ZmluaXNoTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlv
dXRFbmdpbmU6OmZpbmFsaXplVHJhbnNmb3JtTWF0cmljZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dExheW91dEVuZ2luZTo6Y2h1bmtMYXlvdXRCdWlsZGVyKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0UXVlcnk6OkRhdGE6OkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6bWFwTGVuZ3RoVGhyb3Vn
aEZyYWdtZW50VHJhbnNmb3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5
OjpleGVjdXRlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjptYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6bnVtYmVyT2ZDaGFyYWN0ZXJzQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpudW1iZXJPZkNoYXJhY3Rl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dExlbmd0aERhdGE6OlRleHRMZW5ndGhEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6dGV4dExlbmd0aENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6dGV4dExlbmd0aCk6CisgICAgICAgIChXZWJD
b3JlOjpTdWJTdHJpbmdMZW5ndGhEYXRhOjpTdWJTdHJpbmdMZW5ndGhEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVuZ3RoQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGgpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YTo6Um90YXRp
b25PZkNoYXJhY3RlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojpyb3Rh
dGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5
Ojpyb3RhdGlvbk9mQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUdseXBo
Qm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hh
cmFjdGVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyTnVtYmVyQXRQb3Np
dGlvbkRhdGE6OkNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbik6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaDoKKwogMjAxMC0xMC0wMSAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNjg4NzgpCisrKyBXZWJDb3JlL0FuZHJvaWQu
bWsJKHdvcmtpbmcgY29weSkKQEAgLTcxNiw4ICs3MTYsMTAgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcCBcCiAJcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0Q2h1bmsuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIu
Y3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcCBcCiAJcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIFwKKwlyZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZS5jcHAgXAogCXJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmcuY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcCBcCkBA
IC03NDksOCArNzUxLDYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBc
CiAKIGlmZXEgKCQoRU5BQkxFX1NWRyksIHRydWUpCiBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NB
TF9TUkNfRklMRVMpIFwKLQlyZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0YS5jcHAgXAotCXJlbmRl
cmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcCBcCiAJcmVuZGVyaW5nL1NWR0ltYWdlQnVm
ZmVyVG9vbHMuY3BwIFwKIAlyZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgXAogCXJl
bmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBcCkBAIC03NTgsOSArNzU4LDcgQEAgTE9DQUxf
U1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcmVuZGVyaW5nL1NWR1Jlc291cmNl
cy5jcHAgXAogCXJlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgXAogCXJlbmRlcmluZy9T
VkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAgXAotCXJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxl
bWVudHMuY3BwIFwKLQlyZW5kZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgXAotCXJl
bmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcAorCXJlbmRlcmluZy9TVkdTaGFkb3dU
cmVlRWxlbWVudHMuY3BwCiBlbmRpZgogCiBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNf
RklMRVMpIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNjg4NzgpCisrKyBXZWJDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNjgzLDggKzE2ODMsNiBAQCBJRiAoRU5BQkxFX1NW
RykKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNw
cAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAK
ICAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAotICAgICAg
ICByZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0YS5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1NWR0No
YXJhY3RlckxheW91dEluZm8uY3BwCiAgICAgICAgIHJlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcAogICAgICAgICByZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKICAgICAg
ICAgcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xNjkzLDggKzE2OTEsNiBAQCBJ
RiAoRU5BQkxFX1NWRykKICAgICAgICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlc0NhY2hlLmNwcAog
ICAgICAgICByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwCiAgICAgICAgIHJl
bmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCi0gICAgICAgIHJlbmRlcmluZy9TVkdU
ZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcAotICAgICAgICByZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0
aWxpdGllcy5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmNwcAog
ICAgICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAKQEAgLTE3MDYsMTAgKzE3MDIsMTIgQEAg
SUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0Q2h1bmtCdWlsZGVyLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QmFzZWxp
bmUuY3BwCi0gICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dFNwYWNpbmcuY3BwCisg
ICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAKKyAgICAgICAgcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCisgICAgICAgIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCiAgICAgICAgIHJlbmRlcmlu
Zy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1
ZXJ5LmNwcAogICAgICAgICBzdmcvQ29sb3JEaXN0YW5jZS5jcHAKSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gNjg4NzgpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzcyLDEwICsyNzcyLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TVkdSZW5kZXJTdHlsZURlZnMuaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVu
ZGVyU3R5bGUuaCBcCi0JV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0YS5jcHAgXAot
CVdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckRhdGEuaCBcCi0JV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAgXAotCVdlYkNvcmUvcmVuZGVyaW5nL1NWR0No
YXJhY3RlckxheW91dEluZm8uaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJU
b29scy5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuaCBcCiAJ
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHTWFya2VyRGF0YS5oIFwKQEAgLTI4MTEsMTEgKzI4MDcsMTUg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElu
bGluZUJveC5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBcCiAJ
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5oIFwKKwlXZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0Q2h1bmtCdWlsZGVyLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0RnJh
Z21lbnQuaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmgg
XAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
Y3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyLmggXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcCBc
CisJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuaCBcCiAJV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAgXAogCVdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBcCiAJV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCBcCkBAIC0yODI0
LDEwICsyODI0LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dE1ldHJpY3MuaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVy
eS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaCBcCi0JV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgXAotCVdlYkNvcmUvcmVuZGVy
aW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uaCBcCi0JV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4
dExheW91dFV0aWxpdGllcy5jcHAgXAotCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRV
dGlsaXRpZXMuaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaCBcCiAJV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBcCiAJV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY4ODc4
KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM0NTMsMTEgKzM0
NTMsMTUgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaCcs
CiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5oJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9T
VkdUZXh0RnJhZ21lbnQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlcy5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRFbmdpbmUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCcsCkBAIC0zNjk3LDEwICszNzAxLDYg
QEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuaCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1NoYWRvd0VsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
U2hhZG93RWxlbWVudC5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0
YS5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJEYXRhLmgnLAotICAg
ICAgICAgICAgJ3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcCcsCi0gICAgICAg
ICAgICAncmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uaCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHTWFy
a2VyRGF0YS5oJywKQEAgLTM3MTgsMTAgKzM3MTgsNiBAQAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZH
U2hhZG93VHJlZUVsZW1lbnRzLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1NWR1NoYWRv
d1RyZWVFbGVtZW50cy5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHVGV4dENodW5rTGF5
b3V0SW5mby5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJ
bmZvLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNw
cCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgnLAogICAgICAgICAgICAgJ3JlbmRl
cmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2ODg3NikKKysr
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTIyOTgsMTMgKzIyOTgsMTUg
QEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmggXAog
ICAgIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1NWR1RleHRDaHVuay5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIu
aCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0RnJhZ21lbnQuaCBcCiAgICAgcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmUuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFz
ZWxpbmUuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5o
IFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmggXAogICAgIHJlbmRlcmluZy9z
dmcvU1ZHVGV4dFF1ZXJ5LmggXAotICAgIHJlbmRlcmluZy9TVkdDaGFyYWN0ZXJEYXRhLmggXAot
ICAgIHJlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmggXAogICAgIHJlbmRlcmluZy9T
VkdJbWFnZUJ1ZmZlclRvb2xzLmggXAogICAgIHJlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmggXAog
ICAgIHJlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmggXApAQCAtMjMxNCw4ICsyMzE2LDYg
QEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlc0NhY2hlLmggXAogICAg
IHJlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIFwKICAgICByZW5kZXJpbmcvU1ZH
U2hhZG93VHJlZUVsZW1lbnRzLmggXAotICAgIHJlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJ
bmZvLmggXAotICAgIHJlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmggXAogICAgIHJl
bmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBcCiAgICAgcmVuZGVyaW5nL1RyYW5z
Zm9ybVN0YXRlLmggXAogICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaCBcCkBA
IC0zMjg3LDggKzMyODcsMTIgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAg
ICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgXAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0Q2h1bmsuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0
cmlidXRlcy5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIu
Y3BwIFwKKwkJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAgXAogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAgXAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwIFwKKyAgICAgICAg
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIFwKKyAgICAgICAg
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgXAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
U1ZHVGV4dFF1ZXJ5LmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9Qb2ludGVyRXZlbnRzSGl0UnVs
ZXMuY3BwIFwKQEAgLTM0NjgsMTcgKzM0NzIsMTMgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1NWRz0xKSB7CiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lci5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lci5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIu
Y3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NWR0NoYXJhY3RlckRhdGEuY3BwIFwKLSAgICAgICAg
cmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3BwIFwKICAgICAgICAgcmVuZGVyaW5n
L1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1NWR01hcmtlckxh
eW91dEluZm8uY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwIFwK
ICAgICAgICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5jcHAgXAogICAgICAgICByZW5kZXJpbmcv
U1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5
Y2xlU29sdmVyLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMu
Y3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uY3BwIFwKLSAg
ICAgICAgcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwCisgICAgICAgIHJlbmRl
cmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSPTEpIHsKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjg4NzgpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEzNSwxMTggKzMyMTM1LDYgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXFNWR0NoYXJhY3RlckRhdGEuY3BwIg0KLQkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVD
b25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiINCi0JCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiIN
Ci0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0J
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlX0Nh
aXJvfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJ
CQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9
IkRlYnVnX0FsbHxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJ
Pg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4N
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHQ2hhcmFjdGVyRGF0YS5oIg0KLQkJCQk+DQot
CQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNW
R0NoYXJhY3RlckxheW91dEluZm8uY3BwIg0KLQkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlv
bg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIN
Ci0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiINCi0JCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0J
CQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiINCi0J
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJv
fFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8
VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRl
YnVnX0FsbHxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0K
LQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0J
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oIg0KLQkJCQk+
DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XFNWR01hcmtlckRhdGEuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0zMjY0MywxMTggKzMy
NTMxLDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXFNWR1RleHRDaHVua0xheW91dEluZm8uY3BwIg0KLQkJCQk+DQotCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQot
CQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxX
aW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRv
b2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1
Z19DYWlyb3xXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0K
LQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0J
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlO
YW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
DQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQot
CQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24NCi0JCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQot
CQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHVGV4dENodW5rTGF5
b3V0SW5mby5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIg0KLQkJCQk+DQot
CQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0J
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5h
bHxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJ
PFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJE
ZWJ1Z19DYWlyb3xXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJ
Pg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4N
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
DQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+
DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHVGV4dExheW91
dFV0aWxpdGllcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFRhYmxlTGF5b3V0LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQpAQCAtMzM0NjYsNiArMzMyNDIsMTQgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dENodW5rQnVp
bGRlci5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdUZXh0Q2h1bmtCdWlsZGVyLmgiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXHN2Z1xTVkdUZXh0RnJhZ21lbnQuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTMz
NDg2LDYgKzMzMjcwLDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRMYXlvdXRFbmdpbmUuY3Bw
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dExheW91dEVuZ2luZS5oIg0KKwkJCQkJPg0KKwkJCQk8
L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdc
U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2ODg3OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMCBAQAogCQkwODBGQUUxQjBFRUVCREE4MDBBQUNE
RTkgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODBGQUUxOTBFRUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVF
bGVtZW50LmggKi87IH07CiAJCTA4MTA5M0RCMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgxMDkzRDkxMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlci5jcHAgKi87IH07CiAJCTA4MTA5M0RDMTI1NUYwRTcwMEVEOUQyOSAv
KiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MTA5M0RBMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCAqLzsgfTsKKwkJMDgxNjY4RDMxMjU2MDNCRjAw
NkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDExMjU2MDNCRjAwNkYyNURFIC8qIFNWR1Rl
eHRDaHVua0J1aWxkZXIuY3BwICovOyB9OworCQkwODE2NjhENDEyNTYwM0JGMDA2RjI1REUgLyog
U1ZHVGV4dENodW5rQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgxNjY4RDIxMjU2MDNCRjAwNkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxk
ZXIuaCAqLzsgfTsKKwkJMDgxNjY4RDkxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRF
bmdpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDgxNjY4RDcxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwICovOyB9
OworCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2
MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxOEFFRTIw
RURCODZCQzAwNjQ3QjY2IC8qIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MThBRUUwMEVEQjg2QkMwMDY0
N0I2NiAvKiBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5jcHAgKi87IH07CiAJCTA4MThBRUUzMEVE
Qjg2QkMwMDY0N0I2NiAvKiBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxOEFFRTEwRURCODZCQzAwNjQ3QjY2
IC8qIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmggKi87IH07CiAJCTA4MUFBOERBMTExMTIzN0Uw
MDJBQjA2RSAvKiBTVkdFbGVtZW50UmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MUFBOEQ5MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdFbGVt
ZW50UmFyZURhdGEuaCAqLzsgfTsKQEAgLTk0LDExICs5OCw2IEBACiAJCTA4M0RBRUE3MEYwMUE3
RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTMwRjAxQTdGQjAwMzQyNzU0
IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggKi87IH07CiAJCTA4M0RBRUE4MEYwMUE3
RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTQwRjAxQTdGQjAwMzQy
NzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi87IH07CiAJCTA4M0RBRUE5
MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RBRUE1MEYwMUE3RkIw
MDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCAqLzsgfTsKLQkJMDgzRjUy
OTkxMTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzRjUyOTcxMTk1N0ZCRTAw
NjUzRUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwICovOyB9OwotCQkwODNGNTI5QTEx
OTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzRjUyOTgxMTk1N0ZCRTAwNjUzRUJF
IC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCAqLzsgfTsKLQkJMDg0MkJDNzIxMTkwMTQ0MDAw
QzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0MkJDNzAxMTkwMTQ0MDAwQzdEMDhGIC8qIFNWR0NoYXJh
Y3RlckRhdGEuY3BwICovOyB9OwotCQkwODQyQkM3MzExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hh
cmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg0MkJDNzExMTkwMTQ0MDAwQzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuaCAqLzsgfTsK
LQkJMDg0MkJDODExMTkwMTQ3MjAwQzdEMDhGIC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDJCQzgwMTE5
MDE0NzIwMEM3RDA4RiAvKiBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmggKi87IH07CiAJCTA4NEFF
QkU0MEZCNTA1RkEwMDM4NDgzRSAvKiBTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NEFFQkUyMEZCNTA1RkEwMDM4NDgzRSAv
KiBTZWxlY3RFbGVtZW50LmNwcCAqLzsgfTsKIAkJMDg0QUVCRTUwRkI1MDVGQTAwMzg0ODNFIC8q
IFNlbGVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NEFFQkUzMEZCNTA1RkEwMDM4NDgzRSAvKiBTZWxlY3RFbGVtZW50LmggKi87IH07
CiAJCTA4NENFNUNCMEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0Q0U1QzcwRjI3
REFEQzAwRTYyNDBFIC8qIFdNTE9wdEdyb3VwRWxlbWVudC5jcHAgKi87IH07CkBAIC0xMTMsNyAr
MTEyLDYgQEAKIAkJMDg0RDI4MzQxMTBBN0ZDQjAwMzgyMzlBIC8qIFNWR0FuaW1hdGVkUHJvcGVy
dHlUcmFpdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NEQyODMyMTEwQTdGQ0IwMDM4MjM5QSAvKiBTVkdBbmltYXRlZFByb3BlcnR5VHJhaXRzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg0REJB
QTEwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODREQkE5RDBFRDM5RDM1MDAzOEMyMjYgLyog
V01MVmFyaWFibGVzLmNwcCAqLzsgfTsKIAkJMDg0REJBQTIwRUQzOUQzNjAwMzhDMjI2IC8qIFdN
TFZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg0REJBOUUwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5oICovOyB9OwotCQkw
ODUzRDczMjExQzkxMDkwMDBCMkZENDIgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODUzRDcyRjExQzkx
MDhGMDBCMkZENDIgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgKi87IH07CiAJCTA4NTRC
MDE0MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMDIxMjU1RTRFNjAwQjlDREQw
IC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi87IH07CiAJCTA4NTRCMDE1MTI1NUU0RTYwMEI5Q0RE
MCAvKiBSZW5kZXJTVkdJbmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NTRCMDAzMTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmUu
aCAqLzsgfTsKIAkJMDg1NEIwMTYxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRl
eHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1
NEIwMDQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovOyB9OwpA
QCAtNDIzMyw4ICs0MjMxLDYgQEAKIAkJQjJCMUY3MTcwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50
ZXJFdmVudHNIaXRSdWxlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJCMUY3MTUwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxl
cy5oICovOyB9OwogCQlCMkIyNjQ1QzBEMDBBNzdFMDAwQUNDMUQgLyogU3RyaW5nQ0YuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJCMjY0NUEwRDAw
QTc3RTAwMEFDQzFEIC8qIFN0cmluZ0NGLmNwcCAqLzsgfTsKIAkJQjJCMjY0NUQwRDAwQTc3RTAw
MEFDQzFEIC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkIyNjQ1QjBEMDBBNzdFMDAwQUNDMUQgLyogU3RyaW5nSW1wbENG
LmNwcCAqLzsgfTsKLQkJQjJCMzNBNUYwQjg4N0NFRjAwQzE1OTg0IC8qIFNWR0NoYXJhY3Rlckxh
eW91dEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjJCMzNBNUQwQjg4N0NFRjAwQzE1OTg0IC8qIFNWR0NoYXJhY3RlckxheW91dEluZm8uY3Bw
ICovOyB9OwotCQlCMkIzM0E2MDBCODg3Q0VGMDBDMTU5ODQgLyogU1ZHQ2hhcmFjdGVyTGF5b3V0
SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJC
MzNBNUUwQjg4N0NFRjAwQzE1OTg0IC8qIFNWR0NoYXJhY3RlckxheW91dEluZm8uaCAqLzsgfTsK
IAkJQjJDM0RBMjEwRDAwNkMxRDAwRUY2RjI2IC8qIEJhc2U2NC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzRDlGMDBEMDA2QzFEMDBFRjZGMjYg
LyogQmFzZTY0LmNwcCAqLzsgfTsKIAkJQjJDM0RBMjIwRDAwNkMxRDAwRUY2RjI2IC8qIEJhc2U2
NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0Q5
RjEwRDAwNkMxRDAwRUY2RjI2IC8qIEJhc2U2NC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTIzMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRp
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkMzRDlGMjBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQuY3BwICovOyB9OwpAQCAt
NjAxOSw2ICs2MDE1LDEwIEBACiAJCTA4MEZBRTE5MEVFRUJEQTgwMEFBQ0RFOSAvKiBXTUxUZW1w
bGF0ZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVGVtcGxh
dGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MTA5M0Q5MTI1NUYw
RTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxMDkzREExMjU1RjBFNzAw
RUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgxNjY4RDExMjU2MDNCRjAwNkYyNURFIC8qIFNW
R1RleHRDaHVua0J1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHVGV4dENodW5rQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTA4MTY2OEQyMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRDaHVua0J1aWxkZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgxNjY4RDcxMjU2MDNENTAwNkYyNURFIC8qIFNWR1Rl
eHRMYXlvdXRFbmdpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHVGV4dExheW91dEVuZ2luZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4
MTY2OEQ4MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRMYXlvdXRFbmdpbmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxOEFFRTAwRURCODZCQzAwNjQ3QjY2IC8qIFdNTEV2ZW50
SGFuZGxpbmdFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgxOEFFRTEwRURCODZCQzAwNjQ3QjY2IC8qIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MUFBOEQ5MTExMTIzN0UwMDJBQjA2
RSAvKiBTVkdFbGVtZW50UmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHRWxlbWVudFJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
MDM5LDExICs2MDM5LDYgQEAKIAkJMDgzREFFQTMwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA4M0RBRUE0MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTUw
RjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgzRjUyOTcxMTk1N0ZCRTAwNjUzRUJFIC8q
IFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTA4M0Y1Mjk4MTE5NTdGQkUwMDY1M0VCRSAvKiBTVkdUZXh0TGF5b3V0VXRpbGl0
aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRMYXlvdXRVdGls
aXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg0MkJDNzAxMTkwMTQ0MDAw
QzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHQ2hhcmFjdGVyRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTA4NDJCQzcxMTE5MDE0NDAwMEM3RDA4RiAvKiBTVkdDaGFyYWN0ZXJEYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0NoYXJhY3RlckRhdGEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg0MkJDODAxMTkwMTQ3MjAwQzdEMDhGIC8qIFNWR1Rl
eHRDaHVua0xheW91dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
VGV4dENodW5rTGF5b3V0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODRB
RUJFMjBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3RFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDg0QUVCRTMwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0RWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODRDRTVDNzBGMjdEQURDMDBFNjI0MEUgLyogV01M
T3B0R3JvdXBFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdNTE9wdEdyb3VwRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
MDU4LDcgKzYwNTMsNiBAQAogCQkwODREMjgzMjExMEE3RkNCMDAzODIzOUEgLyogU1ZHQW5pbWF0
ZWRQcm9wZXJ0eVRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdB
bmltYXRlZFByb3BlcnR5VHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
NERCQTlEMEVEMzlEMzUwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVmFyaWFibGVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDg0REJBOUUwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxWYXJpYWJsZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1M0Q3MkYxMUM5MTA4RjAwQjJGRDQyIC8qIFNWR1Rl
eHRDaHVua0xheW91dEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4NTRCMDAyMTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHSW5saW5lLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMDMxMjU1RTRFNjAwQjlDREQwIC8qIFJl
bmRlclNWR0lubGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJT
VkdJbmxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMDQxMjU1RTRF
NjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMDEzMiw4ICsxMDEyNiw2IEBACiAJCUIyQjFGNzE1MEQwMENBQTgw
MDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkIyNjQ1QTBEMDBBNzdFMDAwQUNDMUQgLyogU3RyaW5nQ0YuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ0NGLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJCMjY0NUIwRDAwQTc3RTAwMEFDQzFEIC8qIFN0cmluZ0lt
cGxDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nSW1w
bENGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJCMzNBNUQwQjg4N0NFRjAw
QzE1OTg0IC8qIFNWR0NoYXJhY3RlckxheW91dEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0NoYXJhY3RlckxheW91dEluZm8uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMkIzM0E1RTBCODg3Q0VGMDBDMTU5ODQgLyogU1ZHQ2hhcmFj
dGVyTGF5b3V0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQ2hh
cmFjdGVyTGF5b3V0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzRDlG
MDBEMDA2QzFEMDBFRjZGMjYgLyogQmFzZTY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCYXNlNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzRDlGMTBEMDA2QzFEMDBFRjZGMjYgLyogQmFzZTY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCYXNlNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJD
M0Q5RjIwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaWRpQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMTY2NCwxMSArMTE2NTYsMTUgQEAKIAkJCQkwODU0QjAxMTEyNTVFNEU2
MDBCOUNERDAgLyogU1ZHUm9vdElubGluZUJveC5oICovLAogCQkJCTA4RjBCRkJEMTI1NUM1M0Mw
MDA3NTE4NSAvKiBTVkdUZXh0Q2h1bmsuY3BwICovLAogCQkJCTA4RjBCRkJFMTI1NUM1M0MwMDA3
NTE4NSAvKiBTVkdUZXh0Q2h1bmsuaCAqLywKKwkJCQkwODE2NjhEMTEyNTYwM0JGMDA2RjI1REUg
LyogU1ZHVGV4dENodW5rQnVpbGRlci5jcHAgKi8sCisJCQkJMDgxNjY4RDIxMjU2MDNCRjAwNkYy
NURFIC8qIFNWR1RleHRDaHVua0J1aWxkZXIuaCAqLywKIAkJCQkwOEYwQkZCRjEyNTVDNTNDMDAw
NzUxODUgLyogU1ZHVGV4dEZyYWdtZW50LmggKi8sCiAJCQkJMDg4QzJGNzUxMjM5MDA4MDAwM0Q2
NUNFIC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcCAqLywKIAkJCQkwODhDMkY3NjEyMzkw
MDgwMDAzRDY1Q0UgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwODEwOTNE
OTEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCAq
LywKIAkJCQkwODEwOTNEQTEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyLmggKi8sCisJCQkJMDgxNjY4RDcxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRM
YXlvdXRFbmdpbmUuY3BwICovLAorCQkJCTA4MTY2OEQ4MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdU
ZXh0TGF5b3V0RW5naW5lLmggKi8sCiAJCQkJMDgwRTQ5MjExMjU1RjNCRDAwRUZDQTI3IC8qIFNW
R1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAgKi8sCiAJCQkJMDgwRTQ5MjIxMjU1RjNCRDAw
RUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oICovLAogCQkJCTA4MEU0OTIz
MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgKi8sCkBA
IC0xNzc1OSwxMCArMTc3NTUsNiBAQAogCQkJCTVEOTI1QjY2MEY2NEQ0REQwMEI4NDdGMCAvKiBT
Y3JvbGxCZWhhdmlvci5oICovLAogCQkJCUE3RjMzOEExMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFk
b3dFbGVtZW50LmNwcCAqLywKIAkJCQlBN0YzMzhBMjExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93
RWxlbWVudC5oICovLAotCQkJCTA4NDJCQzcwMTE5MDE0NDAwMEM3RDA4RiAvKiBTVkdDaGFyYWN0
ZXJEYXRhLmNwcCAqLywKLQkJCQkwODQyQkM3MTExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFj
dGVyRGF0YS5oICovLAotCQkJCUIyQjMzQTVEMEI4ODdDRUYwMEMxNTk4NCAvKiBTVkdDaGFyYWN0
ZXJMYXlvdXRJbmZvLmNwcCAqLywKLQkJCQlCMkIzM0E1RTBCODg3Q0VGMDBDMTU5ODQgLyogU1ZH
Q2hhcmFjdGVyTGF5b3V0SW5mby5oICovLAogCQkJCTA4QzQ2QjY3MTIxMkYxNUQwMDExQUY0MCAv
KiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCAqLywKIAkJCQkwOEM0NkI2ODEyMTJGMTVEMDAxMUFG
NDAgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5oICovLAogCQkJCTA4Mzg1RkY1MTBGMDE4NjAwMEJG
RTA3QiAvKiBTVkdNYXJrZXJEYXRhLmggKi8sCkBAIC0xNzc4MCwxMCArMTc3NzIsNiBAQAogCQkJ
CTA4NUIwNUMxMTFGQUUxNkMwMDRENjVGNiAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oICov
LAogCQkJCTA4REFCOUMwMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMu
Y3BwICovLAogCQkJCTA4REFCOUMxMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdTaGFkb3dUcmVlRWxl
bWVudHMuaCAqLywKLQkJCQkwODUzRDcyRjExQzkxMDhGMDBCMkZENDIgLyogU1ZHVGV4dENodW5r
TGF5b3V0SW5mby5jcHAgKi8sCi0JCQkJMDg0MkJDODAxMTkwMTQ3MjAwQzdEMDhGIC8qIFNWR1Rl
eHRDaHVua0xheW91dEluZm8uaCAqLywKLQkJCQkwODNGNTI5NzExOTU3RkJFMDA2NTNFQkUgLyog
U1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAgKi8sCi0JCQkJMDgzRjUyOTgxMTk1N0ZCRTAwNjUz
RUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCAqLywKIAkJCQlBOENGRjA0QzBBMTU0RjA5
MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywKIAkJCQlBQjAxNERFMTBFNjg5QTQzMDBFMTA0
NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLywKIAkJCQlBQjAxNERFMjBFNjg5
QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi8sCkBAIC0yMDUyNiw4
ICsyMDUxNCw2IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwODQyQkM3MzExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVyRGF0YS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQjJCMzNBNjAwQjg4N0NFRjAwQzE1OTg0IC8qIFNWR0NoYXJh
Y3RlckxheW91dEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTlDMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdDaXJjbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5RjBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHQ2xpcFBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyNzlBMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ29sb3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMjA2NjksMTEgKzIwNjU1LDkgQEAKIAkJCQlCMjIyN0FCRTBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHU3dpdGNoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQzEwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR1N5bWJvbEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUM1
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXN0cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDg0MkJD
ODExMTkwMTQ3MjAwQzdEMDhGIC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyMjI3QUM4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXh0Q29udGVudEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUNCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdU
ZXh0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QzJGN0ExMjM5MDA4MTAwM0Q2NUNF
IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwODNGNTI5
QTExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjdBQ0UwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQYXRoRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBRDEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUQ0MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdUaXRsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjA5NTEsNiAr
MjA5MzUsOCBAQAogCQkJCTA4MTA5M0RDMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0
QXR0cmlidXRlc0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MEU0OTI2MTI1NUYzQkQw
MEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2lu
Zy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDgxNjY4RDQxMjU2MDNCRjAwNkYyNURFIC8qIFNWR1Rl
eHRDaHVua0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA4MTY2OERBMTI1NjAzRDUwMDZG
MjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIzMTAzLDgg
KzIzMDg5LDYgQEAKIAkJCQlCMjIyNzk5MjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5OTQwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyMjI3OTk3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTA4NDJCQzcyMTE5MDE0NDAwMEM3RDA4RiAvKiBTVkdDaGFyYWN0ZXJE
YXRhLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyQjMzQTVGMEI4ODdDRUYwMEMxNTk4NCAvKiBT
VkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OTlCMEQw
MEJGMjIwMDcxQjc4MiAvKiBTVkdDaXJjbGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyMjI3OTlFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDbGlwUGF0aEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjIyMjc5QTEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NvbG9yLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjMyNDEsMTEgKzIzMjI1LDkgQEAKIAkJCQlCMjIyN0FCRDBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHU3dpdGNoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MjIyN0FDMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3ltYm9sRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMjIyN0FDNDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGVzdHMuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMDg1M0Q3MzIxMUM5MTA5MDAwQjJGRDQyIC8qIFNWR1RleHRDaHVua0xh
eW91dEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBQzcwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR1RleHRDb250ZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FD
QTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDg4QzJGNzkxMjM5MDA4MTAwM0Q2NUNFIC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTA4M0Y1Mjk5MTE5NTdGQkUwMDY1M0VCRSAvKiBTVkdUZXh0
TGF5b3V0VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUNEMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdUZXh0UGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
MjdBRDAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBRDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RpdGxlRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIzNDc5LDYgKzIzNDYxLDggQEAKIAkJCQkwODEw
OTNEQjEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA4MEU0OTI1MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgwRTQ5MjcxMjU1
RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTA4MTY2OEQzMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4MTY2OEQ5MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdU
ZXh0TGF5b3V0RW5naW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmgJKHJldmlzaW9uIDY4ODY3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGlzUm9vdElubGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjaWYgRU5BQkxFKFNW
RykKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmVUZXh0Qm94KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmVGbG93Qm94KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290SW5saW5lQm94KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCShyZXZpc2lvbiA2ODg2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGludCBzdGFydFBv
cywgaW50IGVuZFBvcyk7CiAgICAgYm9vbCBpc1NlbGVjdGVkKGludCBzdGFydFBvcywgaW50IGVu
ZFBvcykgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1Bv
cywgaW50JiBlUG9zKTsKKyAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50
JiBlUG9zKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBpbnQgdHgsIGludCB0eSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdBbGxJ
bk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQWxsSW5P
bmUuY3BwCShyZXZpc2lvbiA2ODg3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Fs
bEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNiBAQAogI2luY2x1ZGUgIlJl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lci5jcHAiCi0jaW5jbHVkZSAiU1ZHQ2hhcmFjdGVyRGF0YS5jcHAiCi0jaW5jbHVkZSAi
U1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29s
cy5jcHAiCiAjaW5jbHVkZSAiU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAiCiAjaW5jbHVkZSAiU1ZH
UmVuZGVyU3VwcG9ydC5jcHAiCkBAIC01Nyw4ICs1NSw2IEBACiAjaW5jbHVkZSAiU1ZHUmVzb3Vy
Y2VzQ2FjaGUuY3BwIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCIKICNp
bmNsdWRlICJTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIgotI2luY2x1ZGUgIlNWR1RleHRDaHVu
a0xheW91dEluZm8uY3BwIgotI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIgog
CiAvLyBGSVhNRTogQXMgc29vbiBhcyBhbGwgU1ZHIHJlbmRlcmVycyBsaXZlIGluIHJlbmRlcmlu
Zy9zdmcsIHRoaXMgZmlsZSBzaG91bGQgYmUgbW92ZWQgdGhlcmUgYXMgd2VsbCwgcmVtb3Zpbmcg
dGhlIG5lZWQgZm9yIHRoZSBzdmcvIGluY2x1ZGVzIGJlbG93LgogI2luY2x1ZGUgInN2Zy9SZW5k
ZXJTVkdJbmxpbmUuY3BwIgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9u
IDY4ODY3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwODQsMzUgKzEwODQsNiBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHRJbnRlcm5h
bChQYXNzUmVmCiAgICAgfQogICAgIEFTU0VSVChtX3RleHQpOwogCi0jaWYgRU5BQkxFKFNWRykK
LSAgICBpZiAoaXNTVkdJbmxpbmVUZXh0KCkpIHsKLSAgICAgICAgaWYgKHN0eWxlKCkgJiYgc3R5
bGUoKS0+d2hpdGVTcGFjZSgpID09IFBSRSkgewotICAgICAgICAgICAgLy8gU3BlYzogV2hlbiB4
bWw6c3BhY2U9InByZXNlcnZlIiwgdGhlIFNWRyB1c2VyIGFnZW50IHdpbGwgZG8gdGhlIGZvbGxv
d2luZyB1c2luZyBhCi0gICAgICAgICAgICAvLyBjb3B5IG9mIHRoZSBvcmlnaW5hbCBjaGFyYWN0
ZXIgZGF0YSBjb250ZW50LiBJdCB3aWxsIGNvbnZlcnQgYWxsIG5ld2xpbmUgYW5kIHRhYgotICAg
ICAgICAgICAgLy8gY2hhcmFjdGVycyBpbnRvIHNwYWNlIGNoYXJhY3RlcnMuIFRoZW4sIGl0IHdp
bGwgZHJhdyBhbGwgc3BhY2UgY2hhcmFjdGVycywgaW5jbHVkaW5nCi0gICAgICAgICAgICAvLyBs
ZWFkaW5nLCB0cmFpbGluZyBhbmQgbXVsdGlwbGUgY29udGlndW91cyBzcGFjZSBjaGFyYWN0ZXJz
LgotCi0gICAgICAgICAgICBtX3RleHQucmVwbGFjZSgnXG4nLCAnICcpOwotCi0gICAgICAgICAg
ICAvLyBJZiB4bWw6c3BhY2U9InByZXNlcnZlIiBpcyBzZXQsIHdoaXRlLXNwYWNlIGlzIHNldCB0
byAicHJlIiwgd2hpY2gKLSAgICAgICAgICAgIC8vIHByZXNlcnZlcyBsZWFkaW5nLCB0cmFpbGlu
ZyAmIGNvbnRpZ3VvdXMgc3BhY2UgY2hhcmFjdGVyIGZvciB1cy4KLSAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gU3BlYzogV2hlbiB4bWw6c3BhY2U9ImRlZmF1bHQiLCB0aGUgU1ZHIHVz
ZXIgYWdlbnQgd2lsbCBkbyB0aGUgZm9sbG93aW5nIHVzaW5nIGEKLSAgICAgICAgICAgIC8vIGNv
cHkgb2YgdGhlIG9yaWdpbmFsIGNoYXJhY3RlciBkYXRhIGNvbnRlbnQuIEZpcnN0LCBpdCB3aWxs
IHJlbW92ZSBhbGwgbmV3bGluZQotICAgICAgICAgICAgLy8gY2hhcmFjdGVycy4gVGhlbiBpdCB3
aWxsIGNvbnZlcnQgYWxsIHRhYiBjaGFyYWN0ZXJzIGludG8gc3BhY2UgY2hhcmFjdGVycy4KLSAg
ICAgICAgICAgIC8vIFRoZW4sIGl0IHdpbGwgc3RyaXAgb2ZmIGFsbCBsZWFkaW5nIGFuZCB0cmFp
bGluZyBzcGFjZSBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgLy8gVGhlbiwgYWxsIGNvbnRpZ3Vv
dXMgc3BhY2UgY2hhcmFjdGVycyB3aWxsIGJlIGNvbnNvbGlkYXRlZC4gICAgCi0KLSAgICAgICAg
ICAgbV90ZXh0LnJlcGxhY2UoJ1xuJywgU3RyaW5nSW1wbDo6ZW1wdHkoKSk7Ci0KLSAgICAgICAg
ICAgLy8gSWYgeG1sOnNwYWNlPSJkZWZhdWx0IiBpcyBzZXQsIHdoaXRlLXNwYWNlIGlzIHNldCB0
byAibm93cmFwIiwgd2hpY2ggaGFuZGxlcwotICAgICAgICAgICAvLyBsZWFkaW5nLCB0cmFpbGlu
ZyAmIGNvbnRpZ3VvdXMgc3BhY2UgY2hhcmFjdGVyIHJlbW92YWwgZm9yIHVzLgotICAgICAgICB9
Ci0KLSAgICAgICAgbV90ZXh0LnJlcGxhY2UoJ1x0JywgJyAnKTsKLSAgICB9Ci0jZW5kaWYKLQog
ICAgIGlmIChzdHlsZSgpKSB7CiAgICAgICAgIHRyYW5zZm9ybVRleHQobV90ZXh0KTsKIApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0YS5jcHAJKHJldmlzaW9uIDY4ODY3KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTVkdDaGFyYWN0ZXJEYXRhLmgiCi0KLSNpZiBFTkFCTEUoU1ZH
KQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWJvb2wgU1ZHQ2hhcjo6aXNIaWRkZW4oKSBjb25zdAotewotICAgIHJldHVybiBwYXRoRGF0YSAm
JiBwYXRoRGF0YS0+aGlkZGVuOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHQ2hhcjo6Y2hhcmFj
dGVyVHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotCi0gICAg
Ly8gUm90YXRlIGNoYXJhY3RlciBhcm91bmQgYW5nbGUsIGFuZCBwb3NzaWJseSBzY2FsZS4KLSAg
ICBjdG0udHJhbnNsYXRlKHgsIHkpOwotICAgIGN0bS5yb3RhdGUoYW5nbGUpOwotCi0gICAgaWYg
KHBhdGhEYXRhKSB7Ci0gICAgICAgIGN0bS5zY2FsZU5vblVuaWZvcm0ocGF0aERhdGEtPnhTY2Fs
ZSwgcGF0aERhdGEtPnlTY2FsZSk7Ci0gICAgICAgIGN0bS50cmFuc2xhdGUocGF0aERhdGEtPnhT
aGlmdCwgcGF0aERhdGEtPnlTaGlmdCk7Ci0gICAgICAgIGN0bS5yb3RhdGUocGF0aERhdGEtPm9y
aWVudGF0aW9uQW5nbGUpOwotICAgIH0KLQotICAgIGN0bS50cmFuc2xhdGUob3JpZW50YXRpb25T
aGlmdFggLSB4LCBvcmllbnRhdGlvblNoaWZ0WSAtIHkpOwotICAgIHJldHVybiBjdG07Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0YS5oCShyZXZpc2lvbiA2ODg2NykKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBTVkdDaGFyYWN0ZXJE
YXRhX2gKLSNkZWZpbmUgU1ZHQ2hhcmFjdGVyRGF0YV9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFm
ZmluZVRyYW5zZm9ybTsKLWNsYXNzIFJlbmRlck9iamVjdDsKLQotLy8gSG9sZHMgZXh0cmEgZGF0
YSwgd2hlbiB0aGUgY2hhcmFjdGVyIGlzIGxhaWQgb3V0IG9uIGEgcGF0aAotc3RydWN0IFNWR0No
YXJPblBhdGggOiBSZWZDb3VudGVkPFNWR0NoYXJPblBhdGg+IHsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTVkdDaGFyT25QYXRoPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQ2hh
ck9uUGF0aCk7IH0KLQotICAgIGZsb2F0IHhTY2FsZTsKLSAgICBmbG9hdCB5U2NhbGU7Ci0KLSAg
ICBmbG9hdCB4U2hpZnQ7Ci0gICAgZmxvYXQgeVNoaWZ0OwotCi0gICAgZmxvYXQgb3JpZW50YXRp
b25BbmdsZTsKLQotICAgIGJvb2wgaGlkZGVuIDogMTsKLQotcHJpdmF0ZToKLSAgICBTVkdDaGFy
T25QYXRoKCkKLSAgICAgICAgOiB4U2NhbGUoMS4wZikKLSAgICAgICAgLCB5U2NhbGUoMS4wZikK
LSAgICAgICAgLCB4U2hpZnQoMC4wZikKLSAgICAgICAgLCB5U2hpZnQoMC4wZikKLSAgICAgICAg
LCBvcmllbnRhdGlvbkFuZ2xlKDAuMGYpCi0gICAgICAgICwgaGlkZGVuKGZhbHNlKQotICAgIHsK
LSAgICB9Ci19OwotCi1zdHJ1Y3QgU1ZHQ2hhciB7Ci0gICAgU1ZHQ2hhcigpCi0gICAgICAgIDog
eCgwLjBmKQotICAgICAgICAsIHkoMC4wZikKLSAgICAgICAgLCBhbmdsZSgwLjBmKQotICAgICAg
ICAsIG9yaWVudGF0aW9uU2hpZnRYKDAuMGYpCi0gICAgICAgICwgb3JpZW50YXRpb25TaGlmdFko
MC4wZikKLSAgICAgICAgLCBkcmF3blNlcGVyYXRlZChmYWxzZSkKLSAgICAgICAgLCBuZXdUZXh0
Q2h1bmsoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IHg7Ci0gICAgZmxvYXQgeTsK
LSAgICBmbG9hdCBhbmdsZTsKLQotICAgIGZsb2F0IG9yaWVudGF0aW9uU2hpZnRYOwotICAgIGZs
b2F0IG9yaWVudGF0aW9uU2hpZnRZOwotCi0gICAgUmVmUHRyPFNWR0NoYXJPblBhdGg+IHBhdGhE
YXRhOwotCi0gICAgLy8gRGV0ZXJtaW5lcyB3aGV0ZXIgdGhpcyBjaGFyIG5lZWRzIHRvIGJlIGRy
YXduIHNlcGVyYXRlZAotICAgIGJvb2wgZHJhd25TZXBlcmF0ZWQgOiAxOwotCi0gICAgLy8gRGV0
ZXJtaW5lcyB3aGV0ZXIgdGhpcyBjaGFyIHN0YXJ0cyBhIG5ldyBjaHVuawotICAgIGJvb2wgbmV3
VGV4dENodW5rIDogMTsKLQotICAgIC8vIEhlbHBlciBtZXRob2RzCi0gICAgYm9vbCBpc0hpZGRl
bigpIGNvbnN0OwotICAgIEFmZmluZVRyYW5zZm9ybSBjaGFyYWN0ZXJUcmFuc2Zvcm0oKSBjb25z
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcp
Ci0jZW5kaWYgLy8gU1ZHQ2hhcmFjdGVyRGF0YV9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9T
VkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1MTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUg
IklubGluZUZsb3dCb3guaCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHVGV4dFBhdGguaCIKLSNpbmNsdWRlICJTVkdDaGFyYWN0ZXJEYXRhLmgiCi0jaW5j
bHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgotI2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKLSNpbmNs
dWRlICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCi0KLSNpbmNsdWRlIDxmbG9hdC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEhlbHBlciBmdW5jdGlvbgotc3RhdGljIGZsb2F0
IGNhbGN1bGF0ZUJhc2VsaW5lU2hpZnQoUmVuZGVyT2JqZWN0KiBpdGVtKQotewotICAgIEFTU0VS
VChpdGVtKTsKLSAgICBBU1NFUlQoaXRlbS0+c3R5bGUoKSk7Ci0gICAgQVNTRVJUKGl0ZW0tPm5v
ZGUoKSk7Ci0gICAgQVNTRVJUKGl0ZW0tPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotCi0gICAg
Y29uc3QgRm9udCYgZm9udCA9IGl0ZW0tPnN0eWxlKCktPmZvbnQoKTsKLSAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBpdGVtLT5zdHlsZSgpLT5zdmdTdHlsZSgpOwotCi0gICAg
ZmxvYXQgYmFzZWxpbmVTaGlmdCA9IDAuMGY7Ci0gICAgaWYgKHN2Z1N0eWxlLT5iYXNlbGluZVNo
aWZ0KCkgPT0gQlNfTEVOR1RIKSB7Ci0gICAgICAgIFNWR0xlbmd0aCBiYXNlbGluZVNoaWZ0VmFs
dWVMZW5ndGggPSBzdmdTdHlsZS0+YmFzZWxpbmVTaGlmdFZhbHVlKCk7Ci0gICAgICAgIGlmIChi
YXNlbGluZVNoaWZ0VmFsdWVMZW5ndGgudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFn
ZSkKLSAgICAgICAgICAgIGJhc2VsaW5lU2hpZnQgPSBiYXNlbGluZVNoaWZ0VmFsdWVMZW5ndGgu
dmFsdWVBc1BlcmNlbnRhZ2UoKSAqIGZvbnQucGl4ZWxTaXplKCk7Ci0gICAgICAgIGVsc2UgCi0g
ICAgICAgICAgICBiYXNlbGluZVNoaWZ0ID0gYmFzZWxpbmVTaGlmdFZhbHVlTGVuZ3RoLnZhbHVl
KHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihpdGVtLT5ub2RlKCkpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBmbG9hdCBiYXNlbGluZUFzY2VudCA9IGZvbnQuYXNjZW50KCkgKyBmb250LmRlc2Nl
bnQoKTsKLQotICAgICAgICBzd2l0Y2ggKHN2Z1N0eWxlLT5iYXNlbGluZVNoaWZ0KCkpIHsKLSAg
ICAgICAgY2FzZSBCU19CQVNFTElORToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEJTX1NVQjoKLSAgICAgICAgICAgIGJhc2VsaW5lU2hpZnQgPSAtYmFzZWxpbmVBc2NlbnQgLyAy
LjBmOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQlNfU1VQRVI6Ci0gICAgICAg
ICAgICBiYXNlbGluZVNoaWZ0ID0gYmFzZWxpbmVBc2NlbnQgLyAyLjBmOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBiYXNlbGluZVNoaWZ0OwotfQotCi1T
VkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvKCkKLSAgICA6IGN1
cngoMC4wZikKLSAgICAsIGN1cnkoMC4wZikKLSAgICAsIGFuZ2xlKDAuMGYpCi0gICAgLCBkeCgw
LjBmKQotICAgICwgZHkoMC4wZikKLSAgICAsIHNoaWZ0eCgwLjBmKQotICAgICwgc2hpZnR5KDAu
MGYpCi0gICAgLCBwYXRoRXh0cmFBZHZhbmNlKDAuMGYpCi0gICAgLCBwYXRoVGV4dExlbmd0aCgw
LjBmKQotICAgICwgcGF0aENodW5rTGVuZ3RoKDAuMGYpCi0gICAgLCBuZXh0RHJhd25TZXBlcmF0
ZWQoZmFsc2UpCi0gICAgLCB4U3RhY2tDaGFuZ2VkKGZhbHNlKQotICAgICwgeVN0YWNrQ2hhbmdl
ZChmYWxzZSkKLSAgICAsIGR4U3RhY2tDaGFuZ2VkKGZhbHNlKQotICAgICwgZHlTdGFja0NoYW5n
ZWQoZmFsc2UpCi0gICAgLCBhbmdsZVN0YWNrQ2hhbmdlZChmYWxzZSkKLSAgICAsIGJhc2VsaW5l
U2hpZnRTdGFja0NoYW5nZWQoZmFsc2UpCi0gICAgLCBwYXRoTGF5b3V0KGZhbHNlKQotICAgICwg
Y3VycmVudE9mZnNldCgwLjBmKQotICAgICwgc3RhcnRPZmZzZXQoMC4wZikKLSAgICAsIGxheW91
dFBhdGhMZW5ndGgoMC4wZikKLXsKLX0KLQotYm9vbCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjp4
VmFsdWVBdmFpbGFibGUoKSBjb25zdAotewotICAgIHJldHVybiB4U3RhY2suaXNFbXB0eSgpID8g
ZmFsc2UgOiB4U3RhY2subGFzdCgpLnBvc2l0aW9uKCkgPCB4U3RhY2subGFzdCgpLnNpemUoKTsK
LX0KLQotYm9vbCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjp5VmFsdWVBdmFpbGFibGUoKSBjb25z
dAotewotICAgIHJldHVybiB5U3RhY2suaXNFbXB0eSgpID8gZmFsc2UgOiB5U3RhY2subGFzdCgp
LnBvc2l0aW9uKCkgPCB5U3RhY2subGFzdCgpLnNpemUoKTsKLX0KLQotYm9vbCBTVkdDaGFyYWN0
ZXJMYXlvdXRJbmZvOjpkeFZhbHVlQXZhaWxhYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZHhT
dGFjay5pc0VtcHR5KCkgPyBmYWxzZSA6IGR4U3RhY2subGFzdCgpLnBvc2l0aW9uKCkgPCBkeFN0
YWNrLmxhc3QoKS5zaXplKCk7Ci19Ci0KLWJvb2wgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6ZHlW
YWx1ZUF2YWlsYWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR5U3RhY2suaXNFbXB0eSgpID8g
ZmFsc2UgOiBkeVN0YWNrLmxhc3QoKS5wb3NpdGlvbigpIDwgZHlTdGFjay5sYXN0KCkuc2l6ZSgp
OwotfQotCi1ib29sIFNWR0NoYXJhY3RlckxheW91dEluZm86OmFuZ2xlVmFsdWVBdmFpbGFibGUo
KSBjb25zdAotewotICAgIHJldHVybiBhbmdsZVN0YWNrLmlzRW1wdHkoKSA/IGZhbHNlIDogYW5n
bGVTdGFjay5sYXN0KCkucG9zaXRpb24oKSA8IGFuZ2xlU3RhY2subGFzdCgpLnNpemUoKTsKLX0K
LQotYm9vbCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpiYXNlbGluZVNoaWZ0VmFsdWVBdmFpbGFi
bGUoKSBjb25zdAotewotICAgIHJldHVybiAhYmFzZWxpbmVTaGlmdFN0YWNrLmlzRW1wdHkoKTsK
LX0KLQotZmxvYXQgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6eFZhbHVlTmV4dCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKCF4U3RhY2suaXNFbXB0eSgpKTsKLSAgICByZXR1cm4geFN0YWNrLmxhc3Qo
KS52YWx1ZUF0Q3VycmVudFBvc2l0aW9uKCk7Ci19Ci0KLWZsb2F0IFNWR0NoYXJhY3RlckxheW91
dEluZm86OnlWYWx1ZU5leHQoKSBjb25zdAotewotICAgIEFTU0VSVCgheVN0YWNrLmlzRW1wdHko
KSk7Ci0gICAgcmV0dXJuIHlTdGFjay5sYXN0KCkudmFsdWVBdEN1cnJlbnRQb3NpdGlvbigpOwot
fQotCi1mbG9hdCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpkeFZhbHVlTmV4dCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKCFkeFN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIGR4U3RhY2subGFz
dCgpLnZhbHVlQXRDdXJyZW50UG9zaXRpb24oKTsKLX0KLQotZmxvYXQgU1ZHQ2hhcmFjdGVyTGF5
b3V0SW5mbzo6ZHlWYWx1ZU5leHQoKSBjb25zdAotewotICAgIEFTU0VSVCghZHlTdGFjay5pc0Vt
cHR5KCkpOwotICAgIHJldHVybiBkeVN0YWNrLmxhc3QoKS52YWx1ZUF0Q3VycmVudFBvc2l0aW9u
KCk7Ci19Ci0KLWZsb2F0IFNWR0NoYXJhY3RlckxheW91dEluZm86OmFuZ2xlVmFsdWVOZXh0KCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIWFuZ2xlU3RhY2suaXNFbXB0eSgpKTsKLSAgICByZXR1cm4g
YW5nbGVTdGFjay5sYXN0KCkudmFsdWVBdEN1cnJlbnRQb3NpdGlvbigpOwotfQotCi1mbG9hdCBT
VkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpiYXNlbGluZVNoaWZ0VmFsdWVOZXh0KCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIWJhc2VsaW5lU2hpZnRTdGFjay5pc0VtcHR5KCkpOwotICAgIHJldHVybiBi
YXNlbGluZVNoaWZ0U3RhY2subGFzdCgpOwotfQotCi0KLWJvb2wgU1ZHQ2hhcmFjdGVyTGF5b3V0
SW5mbzo6aXNJbml0aWFsTGF5b3V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4geFN0YWNrLmlzRW1w
dHkoKQotICAgICAgICAmJiB5U3RhY2suaXNFbXB0eSgpCi0gICAgICAgICYmIGR4U3RhY2suaXNF
bXB0eSgpCi0gICAgICAgICYmIGR5U3RhY2suaXNFbXB0eSgpCi0gICAgICAgICYmIGFuZ2xlU3Rh
Y2suaXNFbXB0eSgpCi0gICAgICAgICYmIGJhc2VsaW5lU2hpZnRTdGFjay5pc0VtcHR5KCkKLSAg
ICAgICAgJiYgY3VyeCA9PSAwLjBmCi0gICAgICAgICYmIGN1cnkgPT0gMC4wZjsKLX0KLQotdm9p
ZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpwcm9jZXNzZWRTaW5nbGVDaGFyYWN0ZXIoKQotewot
ICAgIHhTdGFja1dhbGsoKTsKLSAgICB5U3RhY2tXYWxrKCk7Ci0gICAgZHhTdGFja1dhbGsoKTsK
LSAgICBkeVN0YWNrV2FsaygpOwotICAgIGFuZ2xlU3RhY2tXYWxrKCk7Ci0gICAgYmFzZWxpbmVT
aGlmdFN0YWNrV2FsaygpOwotfQotCi12b2lkIFNWR0NoYXJhY3RlckxheW91dEluZm86OnByb2Nl
c3NlZENodW5rKGZsb2F0IHNhdmVkU2hpZnRYLCBmbG9hdCBzYXZlZFNoaWZ0WSkKLXsKLSAgICAv
LyBiYXNlbGluZS1zaGlmdCBkb2Vzbid0IHNwYW4gYWNyb3NzIGFuY2VzdG9ycywgdW5saWtlIGR4
L2R5LgotICAgIGN1cnggKz0gc2F2ZWRTaGlmdFggLSBzaGlmdHg7Ci0gICAgY3VyeSArPSBzYXZl
ZFNoaWZ0WSAtIHNoaWZ0eTsKLQotICAgIGlmIChpblBhdGhMYXlvdXQoKSkgewotICAgICAgICBz
aGlmdHggPSBzYXZlZFNoaWZ0WDsKLSAgICAgICAgc2hpZnR5ID0gc2F2ZWRTaGlmdFk7Ci0gICAg
fQotCi0gICAgLy8gcm90YXRpb24gYWxzbyBkb2Vzbid0IHNwYW4KLSAgICBhbmdsZSA9IDAuMGY7
Ci0KLSAgICBpZiAoeFN0YWNrQ2hhbmdlZCkgewotICAgICAgICBBU1NFUlQoIXhTdGFjay5pc0Vt
cHR5KCkpOwotICAgICAgICB4U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICB4U3RhY2tDaGFu
Z2VkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHlTdGFja0NoYW5nZWQpIHsKLSAgICAgICAg
QVNTRVJUKCF5U3RhY2suaXNFbXB0eSgpKTsKLSAgICAgICAgeVN0YWNrLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgeVN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChkeFN0YWNr
Q2hhbmdlZCkgewotICAgICAgICBBU1NFUlQoIWR4U3RhY2suaXNFbXB0eSgpKTsKLSAgICAgICAg
ZHhTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIGR4U3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKGR5U3RhY2tDaGFuZ2VkKSB7Ci0gICAgICAgIEFTU0VSVCghZHlTdGFj
ay5pc0VtcHR5KCkpOwotICAgICAgICBkeVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgZHlT
dGFja0NoYW5nZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYW5nbGVTdGFja0NoYW5nZWQp
IHsKLSAgICAgICAgQVNTRVJUKCFhbmdsZVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgIGFuZ2xl
U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBhbmdsZVN0YWNrQ2hhbmdlZCA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChiYXNlbGluZVNoaWZ0U3RhY2tDaGFuZ2VkKSB7Ci0gICAgICAgIEFT
U0VSVCghYmFzZWxpbmVTaGlmdFN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgIGJhc2VsaW5lU2hp
ZnRTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIGJhc2VsaW5lU2hpZnRTdGFja0NoYW5nZWQg
PSBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6bmV4dFBh
dGhMYXlvdXRQb2ludEFuZEFuZ2xlKGZsb2F0IGdseXBoQWR2YW5jZSwgZmxvYXQgZXh0cmFBZHZh
bmNlLCBmbG9hdCBuZXdPZmZzZXQpCi17Ci0gICAgaWYgKGxheW91dFBhdGhMZW5ndGggPD0gMC4w
ZikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG5ld09mZnNldCAhPSBGTFRfTUlO
KQotICAgICAgICBjdXJyZW50T2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBuZXdPZmZzZXQ7Ci0KLSAg
ICAvLyBSZXNwZWN0IHRyYW5zbGF0aW9uIGFsb25nIHBhdGggKGV4dHJhQWR2YW5jZSBpcyBvcnRo
b2dvbmFsIHRvIHRoZSBwYXRoKQotICAgIGN1cnJlbnRPZmZzZXQgKz0gZXh0cmFBZHZhbmNlOwot
Ci0gICAgZmxvYXQgb2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGdseXBoQWR2YW5jZSAvIDIuMGY7
Ci0gICAgY3VycmVudE9mZnNldCArPSBnbHlwaEFkdmFuY2UgKyBwYXRoRXh0cmFBZHZhbmNlOwot
Ci0gICAgaWYgKG9mZnNldCA8IDAuMGYgfHwgb2Zmc2V0ID4gbGF5b3V0UGF0aExlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBvayA9IGZhbHNlOyAKLSAgICBGbG9hdFBv
aW50IHBvaW50ID0gbGF5b3V0UGF0aC5wb2ludEF0TGVuZ3RoKG9mZnNldCwgb2spOwotICAgIEFT
U0VSVChvayk7Ci0KLSAgICBjdXJ4ID0gcG9pbnQueCgpOwotICAgIGN1cnkgPSBwb2ludC55KCk7
Ci0KLSAgICBhbmdsZSA9IGxheW91dFBhdGgubm9ybWFsQW5nbGVBdExlbmd0aChvZmZzZXQsIG9r
KTsKLSAgICBBU1NFUlQob2spOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU1ZHQ2hh
cmFjdGVyTGF5b3V0SW5mbzo6aW5QYXRoTGF5b3V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGF0
aExheW91dDsKLX0KLQotdm9pZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpzZXRJblBhdGhMYXlv
dXQoYm9vbCB2YWx1ZSkKLXsKLSAgICBwYXRoTGF5b3V0ID0gdmFsdWU7Ci0KLSAgICBwYXRoRXh0
cmFBZHZhbmNlID0gMC4wZjsKLSAgICBwYXRoVGV4dExlbmd0aCA9IDAuMGY7Ci0gICAgcGF0aENo
dW5rTGVuZ3RoID0gMC4wZjsKLX0KLQotdm9pZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjphZGRM
YXlvdXRJbmZvcm1hdGlvbihJbmxpbmVGbG93Qm94KiBmbG93Qm94LCBmbG9hdCB0ZXh0QW5jaG9y
U3RhcnRPZmZzZXQpCi17Ci0gICAgYm9vbCB3YXNJbml0aWFsTGF5b3V0ID0gaXNJbml0aWFsTGF5
b3V0KCk7Ci0KLSAgICBSZW5kZXJTVkdUZXh0UGF0aCogdGV4dFBhdGggPSB0b1JlbmRlclNWR1Rl
eHRQYXRoKGZsb3dCb3gtPnJlbmRlcmVyKCkpOwotICAgIFBhdGggcGF0aCA9IHRleHRQYXRoLT5s
YXlvdXRQYXRoKCk7Ci0KLSAgICBmbG9hdCBiYXNlbGluZVNoaWZ0ID0gY2FsY3VsYXRlQmFzZWxp
bmVTaGlmdCh0ZXh0UGF0aCk7Ci0KLSAgICBsYXlvdXRQYXRoID0gcGF0aDsKLSAgICBsYXlvdXRQ
YXRoTGVuZ3RoID0gcGF0aC5sZW5ndGgoKTsKLQotICAgIGlmIChsYXlvdXRQYXRoTGVuZ3RoIDw9
IDAuMGYpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXJ0T2Zmc2V0ID0gdGV4dFBhdGgtPnN0
YXJ0T2Zmc2V0KCk7Ci0KLSAgICBpZiAodGV4dFBhdGgtPnN0YXJ0T2Zmc2V0KCkgPj0gMC4wZiAm
JiB0ZXh0UGF0aC0+c3RhcnRPZmZzZXQoKSA8PSAxLjBmKQotICAgICAgICBzdGFydE9mZnNldCAq
PSBsYXlvdXRQYXRoTGVuZ3RoOwotCi0gICAgc3RhcnRPZmZzZXQgKz0gdGV4dEFuY2hvclN0YXJ0
T2Zmc2V0OwotICAgIGN1cnJlbnRPZmZzZXQgPSBzdGFydE9mZnNldDsKLQotICAgIC8vIE9ubHkg
YmFzZWxpbmUtc2hpZnQgaXMgaGFuZGxlZCB0aHJvdWdoIHRoZSBub3JtYWwgbGF5b3V0IHN5c3Rl
bQotICAgIGFkZFN0YWNrQ29udGVudChCYXNlbGluZVNoaWZ0U3RhY2ssIGJhc2VsaW5lU2hpZnQp
OwotCi0gICAgaWYgKHdhc0luaXRpYWxMYXlvdXQpIHsKLSAgICAgICAgeFN0YWNrQ2hhbmdlZCA9
IGZhbHNlOwotICAgICAgICB5U3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGR4U3RhY2tD
aGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGR5U3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAg
IGFuZ2xlU3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGJhc2VsaW5lU2hpZnRTdGFja0No
YW5nZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6
YWRkTGF5b3V0SW5mb3JtYXRpb24oU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCogZWxlbWVudCkK
LXsKLSAgICBib29sIHdhc0luaXRpYWxMYXlvdXQgPSBpc0luaXRpYWxMYXlvdXQoKTsKLSAgICBm
bG9hdCBiYXNlbGluZVNoaWZ0ID0gY2FsY3VsYXRlQmFzZWxpbmVTaGlmdChlbGVtZW50LT5yZW5k
ZXJlcigpKTsKLQotICAgIGFkZFN0YWNrQ29udGVudChYU3RhY2ssIGVsZW1lbnQtPngoKSwgZWxl
bWVudCk7Ci0gICAgYWRkU3RhY2tDb250ZW50KFlTdGFjaywgZWxlbWVudC0+eSgpLCBlbGVtZW50
KTsKLSAgICBhZGRTdGFja0NvbnRlbnQoRHhTdGFjaywgZWxlbWVudC0+ZHgoKSwgZWxlbWVudCk7
Ci0gICAgYWRkU3RhY2tDb250ZW50KER5U3RhY2ssIGVsZW1lbnQtPmR5KCksIGVsZW1lbnQpOwot
ICAgIGFkZFN0YWNrQ29udGVudChBbmdsZVN0YWNrLCBlbGVtZW50LT5yb3RhdGUoKSk7Ci0gICAg
YWRkU3RhY2tDb250ZW50KEJhc2VsaW5lU2hpZnRTdGFjaywgYmFzZWxpbmVTaGlmdCk7Ci0KLSAg
ICBpZiAod2FzSW5pdGlhbExheW91dCkgewotICAgICAgICB4U3RhY2tDaGFuZ2VkID0gZmFsc2U7
Ci0gICAgICAgIHlTdGFja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZHhTdGFja0NoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgZHlTdGFja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgYW5nbGVT
dGFja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgYmFzZWxpbmVTaGlmdFN0YWNrQ2hhbmdlZCA9
IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjphZGRTdGFj
a0NvbnRlbnQoU3RhY2tUeXBlIHR5cGUsIFNWR051bWJlckxpc3QqIGxpc3QpCi17Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gbGlzdC0+bnVtYmVyT2ZJdGVtcygpOwotICAgIGlmICghbGVuZ3RoKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBQb3NpdGlvbmVkRmxvYXRWZWN0b3IgbmV3TGF5b3V0SW5m
bzsKLQotICAgIC8vIFRPRE86IENvbnZlcnQgbW9yZSBlZmZpY2llbnRseSEKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgZmxvYXQgdmFsdWUgPSBsaXN0LT5nZXRJdGVtKGksIGVjKTsKLSAgICAgICAg
QVNTRVJUKCFlYyk7Ci0KLSAgICAgICAgbmV3TGF5b3V0SW5mby5hcHBlbmQodmFsdWUpOwotICAg
IH0KLQotICAgIGFkZFN0YWNrQ29udGVudCh0eXBlLCBuZXdMYXlvdXRJbmZvKTsKLX0KLQotdm9p
ZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjphZGRTdGFja0NvbnRlbnQoU3RhY2tUeXBlIHR5cGUs
IFNWR0xlbmd0aExpc3QqIGxpc3QsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQpCi17Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gbGlzdC0+bnVtYmVyT2ZJdGVtcygpOwotICAgIGlmICghbGVuZ3Ro
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQb3NpdGlvbmVkRmxvYXRWZWN0b3IgbmV3TGF5b3V0
SW5mbzsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBmbG9hdCB2YWx1ZSA9IGxpc3QtPmdldEl0
ZW0oaSwgZWMpLnZhbHVlKGNvbnRleHQpOwotICAgICAgICBBU1NFUlQoIWVjKTsKLQotICAgICAg
ICBuZXdMYXlvdXRJbmZvLmFwcGVuZCh2YWx1ZSk7Ci0gICAgfQotCi0gICAgYWRkU3RhY2tDb250
ZW50KHR5cGUsIG5ld0xheW91dEluZm8pOwotfQotCi12b2lkIFNWR0NoYXJhY3RlckxheW91dElu
Zm86OmFkZFN0YWNrQ29udGVudChTdGFja1R5cGUgdHlwZSwgY29uc3QgUG9zaXRpb25lZEZsb2F0
VmVjdG9yJiBsaXN0KQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgWFN0YWNrOgot
ICAgICAgICB4U3RhY2tDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgeFN0YWNrLmFwcGVuZChsaXN0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBZU3RhY2s6Ci0gICAgICAgIHlTdGFja0NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICB5U3RhY2suYXBwZW5kKGxpc3QpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIER4U3RhY2s6Ci0gICAgICAgIGR4U3RhY2tDaGFuZ2VkID0gdHJ1ZTsKLSAgICAg
ICAgZHhTdGFjay5hcHBlbmQobGlzdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRHlTdGFj
azoKLSAgICAgICAgZHlTdGFja0NoYW5nZWQgPSB0cnVlOwotICAgICAgICBkeVN0YWNrLmFwcGVu
ZChsaXN0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmdsZVN0YWNrOgotICAgICAgICBh
bmdsZVN0YWNrQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIGFuZ2xlU3RhY2suYXBwZW5kKGxpc3Qp
OwotICAgICAgICBicmVhazsgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFNWR0NoYXJhY3RlckxheW91dEluZm86OmFkZFN0YWNr
Q29udGVudChTdGFja1R5cGUgdHlwZSwgZmxvYXQgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09
IDAuMGYpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Ug
QmFzZWxpbmVTaGlmdFN0YWNrOgotICAgICAgICBiYXNlbGluZVNoaWZ0U3RhY2tDaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgICAgYmFzZWxpbmVTaGlmdFN0YWNrLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLX0KLQotdm9pZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjp4U3RhY2tXYWxrKCkKLXsKLSAg
ICB1bnNpZ25lZCBpID0gMTsKLQotICAgIHdoaWxlICgheFN0YWNrLmlzRW1wdHkoKSkgewotICAg
ICAgICBQb3NpdGlvbmVkRmxvYXRWZWN0b3ImIGN1ciA9IHhTdGFjay5sYXN0KCk7Ci0gICAgICAg
IGlmIChpICsgY3VyLnBvc2l0aW9uKCkgPCBjdXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjdXIu
YWR2YW5jZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaSAr
PSBjdXIucG9zaXRpb24oKTsKLSAgICAgICAgeFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAg
eFN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBTVkdDaGFyYWN0ZXJMYXlv
dXRJbmZvOjp5U3RhY2tXYWxrKCkKLXsKLSAgICB1bnNpZ25lZCBpID0gMTsKLQotICAgIHdoaWxl
ICgheVN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBQb3NpdGlvbmVkRmxvYXRWZWN0b3ImIGN1
ciA9IHlTdGFjay5sYXN0KCk7Ci0gICAgICAgIGlmIChpICsgY3VyLnBvc2l0aW9uKCkgPCBjdXIu
c2l6ZSgpKSB7Ci0gICAgICAgICAgICBjdXIuYWR2YW5jZShpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgaSArPSBjdXIucG9zaXRpb24oKTsKLSAgICAgICAgeVN0
YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgeVN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0K
LX0KLQotdm9pZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpkeFN0YWNrV2FsaygpCi17Ci0gICAg
dW5zaWduZWQgaSA9IDE7Ci0KLSAgICB3aGlsZSAoIWR4U3RhY2suaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFBvc2l0aW9uZWRGbG9hdFZlY3RvciYgY3VyID0gZHhTdGFjay5sYXN0KCk7Ci0gICAgICAg
IGlmIChpICsgY3VyLnBvc2l0aW9uKCkgPCBjdXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjdXIu
YWR2YW5jZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaSAr
PSBjdXIucG9zaXRpb24oKTsKLSAgICAgICAgZHhTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
IGR4U3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFNWR0NoYXJhY3Rlckxh
eW91dEluZm86OmR5U3RhY2tXYWxrKCkKLXsKLSAgICB1bnNpZ25lZCBpID0gMTsKLQotICAgIHdo
aWxlICghZHlTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgUG9zaXRpb25lZEZsb2F0VmVjdG9y
JiBjdXIgPSBkeVN0YWNrLmxhc3QoKTsKLSAgICAgICAgaWYgKGkgKyBjdXIucG9zaXRpb24oKSA8
IGN1ci5zaXplKCkpIHsKLSAgICAgICAgICAgIGN1ci5hZHZhbmNlKGkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpICs9IGN1ci5wb3NpdGlvbigpOwotICAgICAg
ICBkeVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgZHlTdGFja0NoYW5nZWQgPSBmYWxzZTsK
LSAgICB9Ci19Ci0KLXZvaWQgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6YW5nbGVTdGFja1dhbGso
KQotewotICAgIHVuc2lnbmVkIGkgPSAxOwotCi0gICAgd2hpbGUgKCFhbmdsZVN0YWNrLmlzRW1w
dHkoKSkgewotICAgICAgICBQb3NpdGlvbmVkRmxvYXRWZWN0b3ImIGN1ciA9IGFuZ2xlU3RhY2su
bGFzdCgpOwotICAgICAgICBpZiAoaSArIGN1ci5wb3NpdGlvbigpIDwgY3VyLnNpemUoKSkgewot
ICAgICAgICAgICAgY3VyLmFkdmFuY2UoaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGkgKz0gY3VyLnBvc2l0aW9uKCk7Ci0gICAgICAgIGFuZ2xlU3RhY2sucmVt
b3ZlTGFzdCgpOwotICAgICAgICBhbmdsZVN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLX0K
LQotdm9pZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpiYXNlbGluZVNoaWZ0U3RhY2tXYWxrKCkK
LXsKLSAgICBpZiAoIWJhc2VsaW5lU2hpZnRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgYmFz
ZWxpbmVTaGlmdFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgYmFzZWxpbmVTaGlmdFN0YWNr
Q2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3Rl
ckxheW91dEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0
ZXJMYXlvdXRJbmZvLmgJKHJldmlzaW9uIDY4ODY3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
Q2hhcmFjdGVyTGF5b3V0SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqCi0gKi8KLQotI2lmbmRlZiBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvX2gKLSNkZWZpbmUgU1ZH
Q2hhcmFjdGVyTGF5b3V0SW5mb19oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlBhdGgu
aCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbmxpbmVGbG93Qm94OwotY2xhc3MgU1ZH
RWxlbWVudDsKLWNsYXNzIFNWR0xlbmd0aExpc3Q7Ci1jbGFzcyBTVkdOdW1iZXJMaXN0OwotY2xh
c3MgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDsKLQotdGVtcGxhdGU8Y2xhc3MgVHlwZT4KLWNs
YXNzIFBvc2l0aW9uZWRWZWN0b3IgOiBwdWJsaWMgVmVjdG9yPFR5cGU+IHsKLXB1YmxpYzoKLSAg
ICBQb3NpdGlvbmVkVmVjdG9yPFR5cGU+KCkKLSAgICAgICAgOiBtX3Bvc2l0aW9uKDApCi0gICAg
ewotICAgIH0KLQotICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3Bvc2l0aW9uOwotICAgIH0KLQotICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBw
b3NpdGlvbikKLSAgICB7Ci0gICAgICAgIG1fcG9zaXRpb24gKz0gcG9zaXRpb247Ci0gICAgICAg
IEFTU0VSVChtX3Bvc2l0aW9uIDwgVmVjdG9yPFR5cGU+OjpzaXplKCkpOwotICAgIH0KLQotICAg
IFR5cGUgdmFsdWVBdEN1cnJlbnRQb3NpdGlvbigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQobV9wb3NpdGlvbiA8IFZlY3RvcjxUeXBlPjo6c2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIFZl
Y3RvcjxUeXBlPjo6YXQobV9wb3NpdGlvbik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHVuc2ln
bmVkIG1fcG9zaXRpb247Ci19OwotCi1jbGFzcyBQb3NpdGlvbmVkRmxvYXRWZWN0b3IgOiBwdWJs
aWMgUG9zaXRpb25lZFZlY3RvcjxmbG9hdD4geyB9Owotc3RydWN0IFNWR0NoYXI7Ci0KLXN0cnVj
dCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvIHsKLSAgICBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvKCk7
Ci0KLSAgICBlbnVtIFN0YWNrVHlwZSB7IFhTdGFjaywgWVN0YWNrLCBEeFN0YWNrLCBEeVN0YWNr
LCBBbmdsZVN0YWNrLCBCYXNlbGluZVNoaWZ0U3RhY2sgfTsKLQotICAgIGJvb2wgeFZhbHVlQXZh
aWxhYmxlKCkgY29uc3Q7Ci0gICAgYm9vbCB5VmFsdWVBdmFpbGFibGUoKSBjb25zdDsKLSAgICBi
b29sIGR4VmFsdWVBdmFpbGFibGUoKSBjb25zdDsKLSAgICBib29sIGR5VmFsdWVBdmFpbGFibGUo
KSBjb25zdDsKLSAgICBib29sIGFuZ2xlVmFsdWVBdmFpbGFibGUoKSBjb25zdDsKLSAgICBib29s
IGJhc2VsaW5lU2hpZnRWYWx1ZUF2YWlsYWJsZSgpIGNvbnN0OwotCi0gICAgZmxvYXQgeFZhbHVl
TmV4dCgpIGNvbnN0OwotICAgIGZsb2F0IHlWYWx1ZU5leHQoKSBjb25zdDsKLSAgICBmbG9hdCBk
eFZhbHVlTmV4dCgpIGNvbnN0OwotICAgIGZsb2F0IGR5VmFsdWVOZXh0KCkgY29uc3Q7Ci0gICAg
ZmxvYXQgYW5nbGVWYWx1ZU5leHQoKSBjb25zdDsKLSAgICBmbG9hdCBiYXNlbGluZVNoaWZ0VmFs
dWVOZXh0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHByb2Nlc3NlZENodW5rKGZsb2F0IHNhdmVkU2hp
ZnRYLCBmbG9hdCBzYXZlZFNoaWZ0WSk7Ci0gICAgdm9pZCBwcm9jZXNzZWRTaW5nbGVDaGFyYWN0
ZXIoKTsKLQotICAgIGJvb2wgbmV4dFBhdGhMYXlvdXRQb2ludEFuZEFuZ2xlKGZsb2F0IGdseXBo
QWR2YW5jZSwgZmxvYXQgZXh0cmFBZHZhbmNlLCBmbG9hdCBuZXdPZmZzZXQpOwotCi0gICAgLy8g
VXNlZCBmb3IgdGV4dC1vbi1wYXRoLgotICAgIHZvaWQgYWRkTGF5b3V0SW5mb3JtYXRpb24oSW5s
aW5lRmxvd0JveCosIGZsb2F0IHRleHRBbmNob3JPZmZzZXQgPSAwLjBmKTsKLQotICAgIGJvb2wg
aW5QYXRoTGF5b3V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJblBhdGhMYXlvdXQoYm9vbCB2YWx1
ZSk7Ci0KLSAgICAvLyBVc2VkIGZvciBhbnl0aGluZyBlbHNlLgotICAgIHZvaWQgYWRkTGF5b3V0
SW5mb3JtYXRpb24oU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCopOwotCi0gICAgLy8gR2xvYmFs
IHBvc2l0aW9uCi0gICAgZmxvYXQgY3VyeDsKLSAgICBmbG9hdCBjdXJ5OwotCi0gICAgLy8gR2xv
YmFsIHJvdGF0aW9uCi0gICAgZmxvYXQgYW5nbGU7Ci0KLSAgICAvLyBBY2N1bXVsYXRlZCBkeC9k
eSB2YWx1ZXMKLSAgICBmbG9hdCBkeDsKLSAgICBmbG9hdCBkeTsKLQotICAgIC8vIEFjY3VtdWxh
dGVkIGJhc2VsaW5lLXNoaWZ0IHZhbHVlcwotICAgIGZsb2F0IHNoaWZ0eDsKLSAgICBmbG9hdCBz
aGlmdHk7Ci0KLSAgICAvLyBQYXRoIHNwZWNpZmljIGFkdmFuY2UgdmFsdWVzIHRvIGhhbmRsZSBs
ZW5ndGhBZGp1c3QKLSAgICBmbG9hdCBwYXRoRXh0cmFBZHZhbmNlOwotICAgIGZsb2F0IHBhdGhU
ZXh0TGVuZ3RoOwotICAgIGZsb2F0IHBhdGhDaHVua0xlbmd0aDsKLQotICAgIC8vIFJlc3VsdCB2
ZWN0b3IKLSAgICBWZWN0b3I8U1ZHQ2hhcj4gc3ZnQ2hhcnM7Ci0gICAgYm9vbCBuZXh0RHJhd25T
ZXBlcmF0ZWQgOiAxOwotCi1wcml2YXRlOgotICAgIC8vIFVzZWQgZm9yIGJhc2VsaW5lLXNoaWZ0
LgotICAgIHZvaWQgYWRkU3RhY2tDb250ZW50KFN0YWNrVHlwZSwgZmxvYXQpOwotCi0gICAgLy8g
VXNlZCBmb3IgYW5nbGUuCi0gICAgdm9pZCBhZGRTdGFja0NvbnRlbnQoU3RhY2tUeXBlLCBTVkdO
dW1iZXJMaXN0Kik7Ci0KLSAgICAvLyBVc2VkIGZvciB4L3kvZHgvZHkuICAgIAotICAgIHZvaWQg
YWRkU3RhY2tDb250ZW50KFN0YWNrVHlwZSwgU1ZHTGVuZ3RoTGlzdCosIGNvbnN0IFNWR0VsZW1l
bnQqKTsKLQotICAgIHZvaWQgYWRkU3RhY2tDb250ZW50KFN0YWNrVHlwZSwgY29uc3QgUG9zaXRp
b25lZEZsb2F0VmVjdG9yJik7Ci0KLSAgICB2b2lkIHhTdGFja1dhbGsoKTsKLSAgICB2b2lkIHlT
dGFja1dhbGsoKTsKLSAgICB2b2lkIGR4U3RhY2tXYWxrKCk7Ci0gICAgdm9pZCBkeVN0YWNrV2Fs
aygpOwotICAgIHZvaWQgYW5nbGVTdGFja1dhbGsoKTsKLSAgICB2b2lkIGJhc2VsaW5lU2hpZnRT
dGFja1dhbGsoKTsKLQotICAgIGJvb2wgaXNJbml0aWFsTGF5b3V0KCkgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgYm9vbCB4U3RhY2tDaGFuZ2VkIDogMTsKLSAgICBib29sIHlTdGFja0NoYW5nZWQg
OiAxOwotICAgIGJvb2wgZHhTdGFja0NoYW5nZWQgOiAxOwotICAgIGJvb2wgZHlTdGFja0NoYW5n
ZWQgOiAxOwotICAgIGJvb2wgYW5nbGVTdGFja0NoYW5nZWQgOiAxOwotICAgIGJvb2wgYmFzZWxp
bmVTaGlmdFN0YWNrQ2hhbmdlZCA6IDE7Ci0KLSAgICAvLyB0ZXh0IG9uIHBhdGggbGF5b3V0Ci0g
ICAgYm9vbCBwYXRoTGF5b3V0IDogMTsKLSAgICBmbG9hdCBjdXJyZW50T2Zmc2V0OwotICAgIGZs
b2F0IHN0YXJ0T2Zmc2V0OwotICAgIGZsb2F0IGxheW91dFBhdGhMZW5ndGg7Ci0gICAgUGF0aCBs
YXlvdXRQYXRoOwotCi0gICAgVmVjdG9yPFBvc2l0aW9uZWRGbG9hdFZlY3Rvcj4geFN0YWNrOwot
ICAgIFZlY3RvcjxQb3NpdGlvbmVkRmxvYXRWZWN0b3I+IHlTdGFjazsKLSAgICBWZWN0b3I8UG9z
aXRpb25lZEZsb2F0VmVjdG9yPiBkeFN0YWNrOwotICAgIFZlY3RvcjxQb3NpdGlvbmVkRmxvYXRW
ZWN0b3I+IGR5U3RhY2s7Ci0gICAgVmVjdG9yPFBvc2l0aW9uZWRGbG9hdFZlY3Rvcj4gYW5nbGVT
dGFjazsKLSAgICBWZWN0b3I8ZmxvYXQ+IGJhc2VsaW5lU2hpZnRTdGFjazsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYgLy8gU1ZH
Q2hhcmFjdGVyTGF5b3V0SW5mb19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNiBAQAogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR0NoYXJhY3RlckxheW91dElu
Zm8uaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIKQEAgLTY1
LDcgKzY0LDYgQEAKICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiU1ZH
U3RvcEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAi
U1ZHVGV4dExheW91dFV0aWxpdGllcy5oIgogCiAjaW5jbHVkZSA8bWF0aC5oPgogCkBAIC0zODcs
MTE2ICszODUsNzEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbQog
c3RhdGljIHZvaWQgd3JpdGVSZW5kZXJTVkdUZXh0Qm94KFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJCbG9jayYgdGV4dCkKIHsKICAgICBTVkdSb290SW5saW5lQm94KiBib3ggPSBzdGF0aWNf
Y2FzdDxTVkdSb290SW5saW5lQm94Kj4odGV4dC5maXJzdFJvb3RCb3goKSk7Ci0KICAgICBpZiAo
IWJveCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFNWR1RleHRDaHVuaz4mIGNodW5r
cyA9IGNvbnN0X2Nhc3Q8VmVjdG9yPFNWR1RleHRDaHVuaz4mID4oYm94LT5zdmdUZXh0Q2h1bmtz
KCkpOwotICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54KCkgPDwgIiwiIDw8IHRleHQueSgpIDw8
ICIpIHNpemUgIiA8PCBib3gtPmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBib3gtPmxvZ2ljYWxI
ZWlnaHQoKSA8PCAiIGNvbnRhaW5zICIgPDwgY2h1bmtzLnNpemUoKSA8PCAiIGNodW5rKHMpIjsK
KyAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQueCgpIDw8ICIsIiA8PCB0ZXh0LnkoKSA8PCAiKSBz
aXplICIgPDwgYm94LT5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgYm94LT5sb2dpY2FsSGVpZ2h0
KCk7CisgICAgCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2ssIG9uY2UgdGhlIG5ldyB0
ZXh0IGxheW91dCBlbmdpbmUgaXMgY29tcGxldGx5IGxhbmRlZC4gV2Ugd2FudCB0byBwcmVzZXJ2
ZSB0aGUgb2xkIGxheW91dCB0ZXN0IHJlc3VsdHMgZm9yIG5vdy4KKyAgICB0cyA8PCAiIGNvbnRh
aW5zIDEgY2h1bmsocykiOwogCiAgICAgaWYgKHRleHQucGFyZW50KCkgJiYgKHRleHQucGFyZW50
KCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSB0
ZXh0LnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkpCiAg
ICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImNvbG9yIiwgdGV4dC5zdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikubmFtZSgpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIGNvbnRhaW5zSW5saW5lVGV4dEJveChTVkdUZXh0Q2h1bmsmIGNodW5rLCBT
VkdJbmxpbmVUZXh0Qm94KiBib3gpCi17Ci0gICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3Rl
clJhbmdlPjo6aXRlcmF0b3IgYm94SXQgPSBjaHVuay5ib3hlcy5iZWdpbigpOwotICAgIFZlY3Rv
cjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGJveEVuZCA9IGNodW5rLmJv
eGVzLmVuZCgpOwotCi0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGZvciAoOyBib3hJdCAh
PSBib3hFbmQ7ICsrYm94SXQpIHsKLSAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2Um
IHJhbmdlID0gKmJveEl0OwotCi0gICAgICAgIGlmIChib3ggPT0gc3RhdGljX2Nhc3Q8U1ZHSW5s
aW5lVGV4dEJveCo+KHJhbmdlLmJveCkpIHsKLSAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvdW5kOwot
fQotCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0Qm94KFRleHRTdHJlYW0m
IHRzLCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgaW5kZW50KQogewotICAgIFNWR1Jv
b3RJbmxpbmVCb3gqIHJvb3RCb3ggPSB0ZXh0Qm94LT5zdmdSb290SW5saW5lQm94KCk7Ci0gICAg
aWYgKCFyb290Qm94KQorICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0
ZXh0Qm94LT50ZXh0RnJhZ21lbnRzKCk7CisgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+JiBjaHVua3MgPSBjb25z
dF9jYXN0PFZlY3RvcjxTVkdUZXh0Q2h1bms+JiA+KHJvb3RCb3gtPnN2Z1RleHRDaHVua3MoKSk7
Ci0KLSAgICBWZWN0b3I8U1ZHVGV4dENodW5rPjo6aXRlcmF0b3IgaXQgPSBjaHVua3MuYmVnaW4o
KTsKLSAgICBWZWN0b3I8U1ZHVGV4dENodW5rPjo6aXRlcmF0b3IgZW5kID0gY2h1bmtzLmVuZCgp
OworICAgIFJlbmRlclNWR0lubGluZVRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5s
aW5lVGV4dCh0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKSk7CisgICAgQVNTRVJUKHRleHRSZW5kZXJl
cik7CiAKLSAgICAvLyBXcml0ZSB0ZXh0IGNodW5rcwotICAgIHVuc2lnbmVkIGludCBpID0gMTsK
LSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR1RleHRDaHVuayYgY3Vy
ID0gKml0OwotCi0gICAgICAgIC8vIFdyaXRlIGlubGluZSBib3ggY2hhcmFjdGVyIHJhbmdlcwot
ICAgICAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+OjppdGVyYXRvciBib3hJ
dCA9IGN1ci5ib3hlcy5iZWdpbigpOwotICAgICAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFj
dGVyUmFuZ2U+OjppdGVyYXRvciBib3hFbmQgPSBjdXIuYm94ZXMuZW5kKCk7Ci0KLSAgICAgICAg
aWYgKCFjb250YWluc0lubGluZVRleHRCb3goY3VyLCB0ZXh0Qm94KSkgewotICAgICAgICAgICAg
aSsrOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSB0ZXh0UmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCk7Cisg
ICAgU3RyaW5nIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+dGV4dCgpOwogCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAg
ICBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOwogICAgICAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CiAKLSAgICAgICAgdW5zaWduZWQgaW50IGogPSAx
OwotICAgICAgICB0cyA8PCAiY2h1bmsgIiA8PCBpIDw8ICIgIjsKKyAgICAgICAgdW5zaWduZWQg
c3RhcnRPZmZzZXQgPSBmcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQ7CisgICAgICAgIHVuc2ln
bmVkIGVuZE9mZnNldCA9IGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCArIGZyYWdtZW50Lmxl
bmd0aDsKIAotICAgICAgICBpZiAoY3VyLmFuY2hvciA9PSBUQV9NSURETEUpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2ssIG9uY2UgdGhlIG5ldyB0ZXh0IGxheW91dCBlbmdp
bmUgaXMgY29tcGxldGx5IGxhbmRlZC4gV2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGUgb2xkIGxheW91
dCB0ZXN0IHJlc3VsdHMgZm9yIG5vdy4KKyAgICAgICAgdHMgPDwgImNodW5rIDEgIjsKKyAgICAg
ICAgRVRleHRBbmNob3IgYW5jaG9yID0gc3ZnU3R5bGUtPnRleHRBbmNob3IoKTsKKyAgICAgICAg
Ym9vbCBpc1ZlcnRpY2FsVGV4dCA9IHN2Z1N0eWxlLT5pc1ZlcnRpY2FsV3JpdGluZ01vZGUoKTsK
KyAgICAgICAgaWYgKGFuY2hvciA9PSBUQV9NSURETEUpIHsKICAgICAgICAgICAgIHRzIDw8ICIo
bWlkZGxlIGFuY2hvciI7Ci0gICAgICAgICAgICBpZiAoY3VyLmlzVmVydGljYWxUZXh0KQorICAg
ICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQogICAgICAgICAgICAgICAgIHRzIDw8ICIsIHZl
cnRpY2FsIjsKICAgICAgICAgICAgIHRzIDw8ICIpICI7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3Vy
LmFuY2hvciA9PSBUQV9FTkQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChhbmNob3IgPT0gVEFfRU5E
KSB7CiAgICAgICAgICAgICB0cyA8PCAiKGVuZCBhbmNob3IiOwotICAgICAgICAgICAgaWYgKGN1
ci5pc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKICAgICAg
ICAgICAgICAgICB0cyA8PCAiLCB2ZXJ0aWNhbCI7CiAgICAgICAgICAgICB0cyA8PCAiKSAiOwot
ICAgICAgICB9IGVsc2UgaWYgKGN1ci5pc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgfSBlbHNlIGlm
IChpc1ZlcnRpY2FsVGV4dCkKICAgICAgICAgICAgIHRzIDw8ICIodmVydGljYWwpICI7CisgICAg
ICAgIHN0YXJ0T2Zmc2V0IC09IHRleHRCb3gtPnN0YXJ0KCk7CisgICAgICAgIGVuZE9mZnNldCAt
PSB0ZXh0Qm94LT5zdGFydCgpOworICAgICAgICAvLyA8L2hhY2s+CisKKyAgICAgICAgdHMgPDwg
InRleHQgcnVuICIgPDwgaSArIDEgPDwgIiBhdCAoIiA8PCBmcmFnbWVudC54IDw8ICIsIiA8PCBm
cmFnbWVudC55IDw8ICIpIjsKKyAgICAgICAgdHMgPDwgIiBzdGFydE9mZnNldCAiIDw8IHN0YXJ0
T2Zmc2V0IDw8ICIgZW5kT2Zmc2V0ICIgPDwgZW5kT2Zmc2V0OworICAgICAgICBpZiAoaXNWZXJ0
aWNhbFRleHQpCisgICAgICAgICAgICB0cyA8PCAiIGhlaWdodCAiIDw8IGZyYWdtZW50LmhlaWdo
dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHMgPDwgIiB3aWR0aCAiIDw8IGZyYWdtZW50
LndpZHRoOwogCi0gICAgICAgIHVuc2lnbmVkIGludCB0b3RhbE9mZnNldCA9IDA7Ci0KLSAgICAg
ICAgZm9yICg7IGJveEl0ICE9IGJveEVuZDsgKytib3hJdCkgewotICAgICAgICAgICAgU1ZHSW5s
aW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlID0gKmJveEl0OwotCi0gICAgICAgICAgICB1bnNp
Z25lZCBpbnQgb2Zmc2V0ID0gcmFuZ2UuZW5kT2Zmc2V0IC0gcmFuZ2Uuc3RhcnRPZmZzZXQ7Ci0g
ICAgICAgICAgICBBU1NFUlQoY3VyLnN0YXJ0ICsgdG90YWxPZmZzZXQgPD0gY3VyLmVuZCk7Ci0g
ICAgCi0gICAgICAgICAgICB0b3RhbE9mZnNldCArPSBvZmZzZXQ7Ci0gICAgICAKLSAgICAgICAg
ICAgIGlmICh0ZXh0Qm94ICE9IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihyYW5nZS5i
b3gpKSB7Ci0gICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdG9wTGVmdCA9IHRvcExl
ZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UoY3VyLnN0YXJ0ICsgdG90YWxPZmZzZXQgLSBvZmZz
ZXQsIGN1ci5zdGFydCArIHRvdGFsT2Zmc2V0KTsKLQotICAgICAgICAgICAgdHMgPDwgInRleHQg
cnVuICIgPDwgaiA8PCAiIGF0ICgiIDw8IHRvcExlZnQueCgpIDw8ICIsIiA8PCB0b3BMZWZ0Lnko
KSA8PCAiKSAiOwotICAgICAgICAgICAgdHMgPDwgInN0YXJ0T2Zmc2V0ICIgPDwgcmFuZ2Uuc3Rh
cnRPZmZzZXQgPDwgIiBlbmRPZmZzZXQgIiA8PCByYW5nZS5lbmRPZmZzZXQ7Ci0KLSAgICAgICAg
ICAgIGlmIChjdXIuaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgdHMgPDwgIiBoZWln
aHQgIiA8PCBjdW1tdWxhdGVkSGVpZ2h0T2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShyYW5nZSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHMgPDwgIiB3aWR0aCAiIDw8IGN1
bW11bGF0ZWRXaWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UocmFuZ2UpOwotCi0gICAgICAg
ICAgICBpZiAoIXRleHRCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCB0ZXh0Qm94LT5t
X2Rpck92ZXJyaWRlKSB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgKCF0ZXh0Qm94LT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyAiIFJUTCIgOiAiIExUUiIpOwotCi0gICAgICAgICAgICAgICAg
aWYgKHRleHRCb3gtPm1fZGlyT3ZlcnJpZGUpCi0gICAgICAgICAgICAgICAgICAgIHRzIDw8ICIg
b3ZlcnJpZGUiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0cyA8PCAiOiAiIDw8IHF1
b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhTdHJpbmcodGV4dEJveC0+dGV4dFJlbmRlcmVyKCkt
PnRleHQoKSkuc3Vic3RyaW5nKHRleHRCb3gtPnN0YXJ0KCkgKyByYW5nZS5zdGFydE9mZnNldCwg
b2Zmc2V0KSkgPDwgIlxuIjsKLQotICAgICAgICAgICAgaisrOworICAgICAgICBpZiAoIXRleHRC
b3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCB0ZXh0Qm94LT5tX2Rpck92ZXJyaWRlKSB7
CisgICAgICAgICAgICB0cyA8PCAodGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
IiBMVFIiIDogIiBSVEwiKTsKKyAgICAgICAgICAgIGlmICh0ZXh0Qm94LT5tX2Rpck92ZXJyaWRl
KQorICAgICAgICAgICAgICAgIHRzIDw8ICIgb3ZlcnJpZGUiOwogICAgICAgICB9CiAKLSAgICAg
ICAgaSsrOworICAgICAgICB0cyA8PCAiOiAiIDw8IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxl
cyh0ZXh0LnN1YnN0cmluZyhmcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQsIGZyYWdtZW50Lmxl
bmd0aCkpIDw8ICJcbiI7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdU
ZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0
OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgiCi0KLSNpZiBFTkFCTEUoU1ZH
KQotI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKLSNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94
LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKLQotLy8gVGV4dCBjaHVuayBjcmVhdGlv
biBpcyBjb21wbGV4IGFuZCB0aGUgd2hvbGUgcHJvY2VzcwotLy8gY2FuIGVhc2lseSBiZSB0cmFj
ZWQgYnkgc2V0dGluZyB0aGlzIHZhcmlhYmxlID4gMC4KLSNkZWZpbmUgREVCVUdfQ0hVTktfQlVJ
TERJTkcgMAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBmbG9hdCBjdW1tdWxhdGVk
V2lkdGhPckhlaWdodE9mVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmssIGJvb2wgY2FsY1dp
ZHRoT25seSkKLXsKLSAgICBmbG9hdCBsZW5ndGggPSAwLjBmOwotICAgIFZlY3RvcjxTVkdDaGFy
Pjo6aXRlcmF0b3IgY2hhckl0ID0gY2h1bmsuc3RhcnQ7Ci0KLSAgICBWZWN0b3I8U1ZHSW5saW5l
Qm94Q2hhcmFjdGVyUmFuZ2U+OjppdGVyYXRvciBpdCA9IGNodW5rLmJveGVzLmJlZ2luKCk7Ci0g
ICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0b3IgZW5kID0gY2h1
bmsuYm94ZXMuZW5kKCk7Ci0KLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSA9ICppdDsKLQotICAgICAgICBTVkdJ
bmxpbmVUZXh0Qm94KiBib3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4ocmFuZ2Uu
Ym94KTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gYm94LT5yZW5kZXJlcigpLT5zdHls
ZSgpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSByYW5nZS5zdGFydE9mZnNldDsgaSA8IHJhbmdl
LmVuZE9mZnNldDsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2hhckl0IDw9IGNodW5rLmVu
ZCk7Ci0KLSAgICAgICAgICAgIC8vIERldGVybWluZSBob3cgbWFueSBjaGFyYWN0ZXJzIC0gc3Rh
cnRpbmcgZnJvbSB0aGUgY3VycmVudCAtIGNhbiBiZSBtZWFzdXJlZCBhdCBvbmNlLgotICAgICAg
ICAgICAgLy8gSW1wb3J0YW50IGZvciBub24tYWJzb2x1dGUgcG9zaXRpb25lZCBub24tbGF0aW4x
IHRleHQgKGllLiBBcmFiaWMpIHdoZXJlIGllLiB0aGUgd2lkdGgKLSAgICAgICAgICAgIC8vIG9m
IGEgc3RyaW5nIGlzIG5vdCB0aGUgc3VtIG9mIHRoZSBib3VuZGFyaWVzIG9mIGFsbCBjb250YWlu
ZWQgZ2x5cGhzLgotICAgICAgICAgICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBpdFNlYXJj
aCA9IGNoYXJJdCArIDE7Ci0gICAgICAgICAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGVu
ZFNlYXJjaCA9IGNoYXJJdCArIHJhbmdlLmVuZE9mZnNldCAtIGk7Ci0gICAgICAgICAgICB3aGls
ZSAoaXRTZWFyY2ggIT0gZW5kU2VhcmNoKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm8gbmVlZCB0
byBjaGVjayBmb3IgJ2lzSGlkZGVuKCknIGhlcmUgYXMgdGhpcyBmdW5jdGlvbiBpcyBub3QgY2Fs
bGVkIGZvciB0ZXh0IHBhdGhzLgotICAgICAgICAgICAgICAgIGlmIChpdFNlYXJjaC0+ZHJhd25T
ZXBlcmF0ZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
aXRTZWFyY2grKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdW5zaWduZWQgaW50IHBv
c2l0aW9uT2Zmc2V0ID0gaXRTZWFyY2ggLSBjaGFySXQ7Ci0KLSAgICAgICAgICAgIC8vIENhbGN1
bGF0ZSB3aWR0aC9oZWlnaHQgb2Ygc3VicmFuZ2UKLSAgICAgICAgICAgIFNWR0lubGluZUJveENo
YXJhY3RlclJhbmdlIHN1YlJhbmdlOwotICAgICAgICAgICAgc3ViUmFuZ2UuYm94ID0gcmFuZ2Uu
Ym94OwotICAgICAgICAgICAgc3ViUmFuZ2Uuc3RhcnRPZmZzZXQgPSBpOwotICAgICAgICAgICAg
c3ViUmFuZ2UuZW5kT2Zmc2V0ID0gaSArIHBvc2l0aW9uT2Zmc2V0OwotCi0gICAgICAgICAgICBp
ZiAoY2FsY1dpZHRoT25seSkKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gY3VtbXVsYXRlZFdp
ZHRoT2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShzdWJSYW5nZSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IGN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJveENo
YXJhY3RlclJhbmdlKHN1YlJhbmdlKTsKLQotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGdhcCBi
ZXR3ZWVuIHRoZSBwcmV2aW91cyAmIGN1cnJlbnQgcmFuZ2UKLSAgICAgICAgICAgIC8vIDx0ZXh0
IHg9IjEwIDUwIDcwIj5BQkNEPC90ZXh0PiAtIHdlIG5lZWQgdG8gdGFrZSB0aGUgZ2FwcyBiZXR3
ZWVuIEEgJiBCIGludG8gYWNjb3VudAotICAgICAgICAgICAgLy8gc28gYWRkICI0MCIgYXMgd2lk
dGgsIGFuZCBhbmFsb2dvdXMgZm9yIEIgJiBDLCBhZGQgIjIwIiBhcyB3aWR0aC4KLSAgICAgICAg
ICAgIGlmIChpdFNlYXJjaCA+IGNodW5rLnN0YXJ0ICYmIGl0U2VhcmNoIDwgY2h1bmsuZW5kKSB7
Ci0gICAgICAgICAgICAgICAgU1ZHQ2hhciYgbGFzdENoYXJhY3RlciA9ICooaXRTZWFyY2ggLSAx
KTsKLSAgICAgICAgICAgICAgICBTVkdDaGFyJiBjdXJyZW50Q2hhcmFjdGVyID0gKml0U2VhcmNo
OwotCi0gICAgICAgICAgICAgICAgaW50IGNoYXJzQ29uc3VtZWQgPSAwOwotICAgICAgICAgICAg
ICAgIGZsb2F0IGdseXBoV2lkdGggPSAwLjBmOwotICAgICAgICAgICAgICAgIGZsb2F0IGdseXBo
SGVpZ2h0ID0gMC4wZjsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZ2x5cGhOYW1lOwotICAgICAg
ICAgICAgICAgIFN0cmluZyB1bmljb2RlU3RyaW5nOwotICAgICAgICAgICAgICAgIGJveC0+bWVh
c3VyZUNoYXJhY3RlcihzdHlsZSwgaSArIHBvc2l0aW9uT2Zmc2V0IC0gMSwgY2hhcnNDb25zdW1l
ZCwgZ2x5cGhOYW1lLCB1bmljb2RlU3RyaW5nLCBnbHlwaFdpZHRoLCBnbHlwaEhlaWdodCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoY2FsY1dpZHRoT25seSkKLSAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoICs9IGN1cnJlbnRDaGFyYWN0ZXIueCAtIGxhc3RDaGFyYWN0ZXIueCAtIGdseXBoV2lk
dGg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0g
Y3VycmVudENoYXJhY3Rlci55IC0gbGFzdENoYXJhY3Rlci55IC0gZ2x5cGhIZWlnaHQ7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkdmFuY2UgcHJvY2Vzc2VkIGNoYXJhY3RlcnMK
LSAgICAgICAgICAgIGkgKz0gcG9zaXRpb25PZmZzZXQgLSAxOwotICAgICAgICAgICAgY2hhckl0
ID0gaXRTZWFyY2g7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlQoY2hhckl0ID09IGNo
dW5rLmVuZCk7Ci0gICAgcmV0dXJuIGxlbmd0aDsKLX0KLQotc3RhdGljIGZsb2F0IGN1bW11bGF0
ZWRXaWR0aE9mVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmspCi17Ci0gICAgcmV0dXJuIGN1
bW11bGF0ZWRXaWR0aE9ySGVpZ2h0T2ZUZXh0Q2h1bmsoY2h1bmssIHRydWUpOwotfQotCi1zdGF0
aWMgZmxvYXQgY3VtbXVsYXRlZEhlaWdodE9mVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmsp
Ci17Ci0gICAgcmV0dXJuIGN1bW11bGF0ZWRXaWR0aE9ySGVpZ2h0T2ZUZXh0Q2h1bmsoY2h1bmss
IGZhbHNlKTsKLX0KLQotZmxvYXQgY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0Rm9yVGV4dENodW5r
KFNWR1RleHRDaHVuayYgY2h1bmssIEVUZXh0QW5jaG9yIGFuY2hvcikKLXsKLSAgICBmbG9hdCBz
aGlmdCA9IDAuMGY7Ci0KLSAgICBpZiAoY2h1bmsuaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgIHNo
aWZ0ID0gY3VtbXVsYXRlZEhlaWdodE9mVGV4dENodW5rKGNodW5rKTsKLSAgICBlbHNlCi0gICAg
ICAgIHNoaWZ0ID0gY3VtbXVsYXRlZFdpZHRoT2ZUZXh0Q2h1bmsoY2h1bmspOwotCi0gICAgaWYg
KGFuY2hvciA9PSBUQV9NSURETEUpCi0gICAgICAgIHNoaWZ0ICo9IC0wLjVmOwotICAgIGVsc2UK
LSAgICAgICAgc2hpZnQgKj0gLTEuMGY7Ci0KLSAgICByZXR1cm4gc2hpZnQ7Ci19Ci0KLXN0YXRp
YyB2b2lkIGFwcGx5VGV4dEFuY2hvclRvVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmspCi17
Ci0gICAgLy8gVGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBmb3IgY2h1bmtzIGNvbnRhaW5pbmcg
Y2hhcnMgYWxpZ25lZCBvbiBhIHBhdGguCi0gICAgLy8gLT4gYWxsIGNoYXJhY3RlcnMgYXJlIHZp
c2libGUsIG5vIG5lZWQgdG8gY2hlY2sgZm9yICJpc0hpZGRlbigpIiBhbnl3aGVyZS4KLQotICAg
IGlmIChjaHVuay5hbmNob3IgPT0gVEFfU1RBUlQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZs
b2F0IHNoaWZ0ID0gY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0Rm9yVGV4dENodW5rKGNodW5rLCBj
aHVuay5hbmNob3IpOwotCi0gICAgLy8gQXBwbHkgY29ycmVjdGlvbiB0byBjaHVuawotICAgIFZl
Y3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgY2h1bmtJdCA9IGNodW5rLnN0YXJ0OwotICAgIGZvciAo
OyBjaHVua0l0ICE9IGNodW5rLmVuZDsgKytjaHVua0l0KSB7Ci0gICAgICAgIFNWR0NoYXImIGN1
ckNoYXIgPSAqY2h1bmtJdDsKLQotICAgICAgICBpZiAoY2h1bmsuaXNWZXJ0aWNhbFRleHQpCi0g
ICAgICAgICAgICBjdXJDaGFyLnkgKz0gc2hpZnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGN1ckNoYXIueCArPSBzaGlmdDsKLSAgICB9Ci0KLSAgICAvLyBNb3ZlIGlubGluZSBib3hlcwot
ICAgIFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGJveEl0ID0g
Y2h1bmsuYm94ZXMuYmVnaW4oKTsKLSAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFu
Z2U+OjppdGVyYXRvciBib3hFbmQgPSBjaHVuay5ib3hlcy5lbmQoKTsKLQotICAgIGZvciAoOyBi
b3hJdCAhPSBib3hFbmQ7ICsrYm94SXQpIHsKLSAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVy
UmFuZ2UmIHJhbmdlID0gKmJveEl0OwotCi0gICAgICAgIElubGluZUJveCogY3VyQm94ID0gcmFu
Z2UuYm94OwotICAgICAgICBBU1NFUlQoY3VyQm94LT5pc1NWR0lubGluZVRleHRCb3goKSk7Ci0K
LSAgICAgICAgLy8gTW92ZSB0YXJnZXQgYm94Ci0gICAgICAgIGlmIChjaHVuay5pc1ZlcnRpY2Fs
VGV4dCkKLSAgICAgICAgICAgIGN1ckJveC0+c2V0WShjdXJCb3gtPnkoKSArIHN0YXRpY19jYXN0
PGludD4oc2hpZnQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VyQm94LT5zZXRYKGN1
ckJveC0+eCgpICsgc3RhdGljX2Nhc3Q8aW50PihzaGlmdCkpOwotICAgIH0KLX0KLQotZmxvYXQg
Y2FsY3VsYXRlVGV4dExlbmd0aENvcnJlY3Rpb25Gb3JUZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBj
aHVuaywgRUxlbmd0aEFkanVzdCBsZW5ndGhBZGp1c3QsIGZsb2F0JiBjb21wdXRlZExlbmd0aCkK
LXsKLSAgICBpZiAoY2h1bmsudGV4dExlbmd0aCA8PSAwLjBmKQotICAgICAgICByZXR1cm4gMC4w
ZjsKLQotICAgIGNvbXB1dGVkTGVuZ3RoID0gMC4wZjsKLQotICAgIGZsb2F0IGNvbXB1dGVkV2lk
dGggPSBjdW1tdWxhdGVkV2lkdGhPZlRleHRDaHVuayhjaHVuayk7Ci0gICAgZmxvYXQgY29tcHV0
ZWRIZWlnaHQgPSBjdW1tdWxhdGVkSGVpZ2h0T2ZUZXh0Q2h1bmsoY2h1bmspOwotICAgIGlmICgo
Y29tcHV0ZWRXaWR0aCA8PSAwLjBmICYmICFjaHVuay5pc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAg
fHwgKGNvbXB1dGVkSGVpZ2h0IDw9IDAuMGYgJiYgY2h1bmsuaXNWZXJ0aWNhbFRleHQpKQotICAg
ICAgICByZXR1cm4gMC4wZjsKLQotICAgIGNvbXB1dGVkTGVuZ3RoID0gY2h1bmsuaXNWZXJ0aWNh
bFRleHQgPyBjb21wdXRlZEhlaWdodCA6IGNvbXB1dGVkV2lkdGg7Ci0gICAgaWYgKGxlbmd0aEFk
anVzdCA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVTVF9TUEFDSU5HQU5ER0xZ
UEhTKSB7Ci0gICAgICAgIGlmIChjaHVuay5pc1ZlcnRpY2FsVGV4dCkgICAgCi0gICAgICAgICAg
ICBjaHVuay5jdG0uc2NhbGVOb25Vbmlmb3JtKDEuMGYsIGNodW5rLnRleHRMZW5ndGggLyBjb21w
dXRlZExlbmd0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNodW5rLmN0bS5zY2FsZU5v
blVuaWZvcm0oY2h1bmsudGV4dExlbmd0aCAvIGNvbXB1dGVkTGVuZ3RoLCAxLjBmKTsKLQotICAg
ICAgICByZXR1cm4gMC4wZjsKLSAgICB9Ci0KLSAgICByZXR1cm4gKGNodW5rLnRleHRMZW5ndGgg
LSBjb21wdXRlZExlbmd0aCkgLyBmbG9hdChjaHVuay5lbmQgLSBjaHVuay5zdGFydCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGFwcGx5VGV4dExlbmd0aENvcnJlY3Rpb25Ub1RleHRDaHVuayhTVkdUZXh0
Q2h1bmsmIGNodW5rKQotewotICAgIC8vIFRoaXMgbWV0aG9kIGlzIG5vdCBjYWxsZWQgZm9yIGNo
dW5rcyBjb250YWluaW5nIGNoYXJzIGFsaWduZWQgb24gYSBwYXRoLgotICAgIC8vIC0+IGFsbCBj
aGFyYWN0ZXJzIGFyZSB2aXNpYmxlLCBubyBuZWVkIHRvIGNoZWNrIGZvciAiaXNIaWRkZW4oKSIg
YW55d2hlcmUuCi0KLSAgICAvLyBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIGlzIGhh
bmRsZWQgYnkgc2V0dGluZyBhIHNjYWxlIGZhY3RvciBmb3IgdGhlIHdob2xlIGNodW5rCi0gICAg
ZmxvYXQgdGV4dExlbmd0aCA9IDAuMGY7Ci0gICAgZmxvYXQgc3BhY2luZ1RvQXBwbHkgPSBjYWxj
dWxhdGVUZXh0TGVuZ3RoQ29ycmVjdGlvbkZvclRleHRDaHVuayhjaHVuaywgY2h1bmsubGVuZ3Ro
QWRqdXN0LCB0ZXh0TGVuZ3RoKTsKLQotICAgIGlmICghY2h1bmsuY3RtLmlzSWRlbnRpdHkoKSAm
JiBjaHVuay5sZW5ndGhBZGp1c3QgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpMRU5HVEhBREpV
U1RfU1BBQ0lOR0FOREdMWVBIUykgewotICAgICAgICBTVkdDaGFyJiBmaXJzdENoYXIgPSAqKGNo
dW5rLnN0YXJ0KTsKLQotICAgICAgICAvLyBBc3N1cmUgd2UgYXBwbHkgdGhlIGNodW5rIHNjYWxp
bmcgaW4gdGhlIHJpZ2h0IG9yaWdpbgotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3Q2h1bmtD
dG0oY2h1bmsuY3RtKTsKLSAgICAgICAgbmV3Q2h1bmtDdG0udHJhbnNsYXRlUmlnaHQoZmlyc3RD
aGFyLngsIGZpcnN0Q2hhci55KTsKLSAgICAgICAgbmV3Q2h1bmtDdG0udHJhbnNsYXRlKC1maXJz
dENoYXIueCwgLWZpcnN0Q2hhci55KTsKLQotICAgICAgICBjaHVuay5jdG0gPSBuZXdDaHVua0N0
bTsKLSAgICB9Ci0KLSAgICAvLyBBcHBseSBjb3JyZWN0aW9uIHRvIGNodW5rIAotICAgIGlmIChz
cGFjaW5nVG9BcHBseSAhPSAwLjBmKSB7Ci0gICAgICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0
b3IgY2h1bmtJdCA9IGNodW5rLnN0YXJ0OwotICAgICAgICBmb3IgKDsgY2h1bmtJdCAhPSBjaHVu
ay5lbmQ7ICsrY2h1bmtJdCkgewotICAgICAgICAgICAgU1ZHQ2hhciYgY3VyQ2hhciA9ICpjaHVu
a0l0OwotICAgICAgICAgICAgY3VyQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0KLSAgICAg
ICAgICAgIGlmIChjaHVuay5pc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBjdXJDaGFy
LnkgKz0gKGNodW5rSXQgLSBjaHVuay5zdGFydCkgKiBzcGFjaW5nVG9BcHBseTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdXJDaGFyLnggKz0gKGNodW5rSXQgLSBjaHVuay5z
dGFydCkgKiBzcGFjaW5nVG9BcHBseTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBTVkdU
ZXh0Q2h1bmtMYXlvdXRJbmZvOjpzdGFydFRleHRDaHVuaygpCi17Ci0gICAgbV9jaHVuay5ib3hl
cy5jbGVhcigpOwotICAgIG1fY2h1bmsuYm94ZXMuYXBwZW5kKFNWR0lubGluZUJveENoYXJhY3Rl
clJhbmdlKCkpOwotCi0gICAgbV9jaHVuay5zdGFydCA9IG1fY2hhcnNJdDsKLSAgICBtX2Fzc2ln
bkNodW5rUHJvcGVydGllcyA9IHRydWU7Ci19Ci0KLXZvaWQgU1ZHVGV4dENodW5rTGF5b3V0SW5m
bzo6Y2xvc2VUZXh0Q2h1bmsoKQotewotICAgIEFTU0VSVCghbV9jaHVuay5ib3hlcy5sYXN0KCku
aXNPcGVuKCkpOwotICAgIEFTU0VSVChtX2NodW5rLmJveGVzLmxhc3QoKS5pc0Nsb3NlZCgpKTsK
LQotICAgIG1fY2h1bmsuZW5kID0gbV9jaGFyc0l0OwotICAgIEFTU0VSVChtX2NodW5rLmVuZCA+
PSBtX2NodW5rLnN0YXJ0KTsKLQotICAgIG1fc3ZnVGV4dENodW5rcy5hcHBlbmQobV9jaHVuayk7
Ci19Ci0KLXZvaWQgU1ZHVGV4dENodW5rTGF5b3V0SW5mbzo6YnVpbGRUZXh0Q2h1bmtzKFZlY3Rv
cjxTVkdDaGFyPjo6aXRlcmF0b3IgYmVnaW4sIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgZW5k
LCBJbmxpbmVGbG93Qm94KiBzdGFydCkKLXsKLSAgICBtX2NoYXJzQmVnaW4gPSBiZWdpbjsKLSAg
ICBtX2NoYXJzRW5kID0gZW5kOwotCi0gICAgbV9jaGFyc0l0ID0gYmVnaW47Ci0gICAgbV9jaHVu
ayA9IFNWR1RleHRDaHVuayhiZWdpbik7Ci0KLSAgICByZWN1cnNpdmVCdWlsZFRleHRDaHVua3Mo
c3RhcnQpOwotICAgIEFTU0VSVChtX2NoYXJzSXQgPT0gbV9jaGFyc0VuZCk7Ci19Ci0KLXZvaWQg
U1ZHVGV4dENodW5rTGF5b3V0SW5mbzo6cmVjdXJzaXZlQnVpbGRUZXh0Q2h1bmtzKElubGluZUZs
b3dCb3gqIHN0YXJ0KQotewotI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQotICAgIGZwcmlu
dGYoc3RkZXJyLCAiIC0+IGJ1aWxkVGV4dENodW5rcyhzdGFydD0lcClcbiIsIHN0YXJ0KTsKLSNl
bmRpZgotCi0gICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5yZW5k
ZXJlcigpLT5pc1RleHQoKSkgewotICAgICAgICAgICAgSW5saW5lVGV4dEJveCogdGV4dEJveCA9
IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihjdXJyKTsKLQotICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGV4dEJveC0+bGVuKCk7Ci0gICAgICAgICAgICBBU1NFUlQobGVuZ3RoID4g
MCk7Ci0KLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEKLSAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiIC0+IEhhbmRsZSBpbmxpbmUgdGV4dCBib3ggKCVwKSB3aXRoICVpIGNoYXJhY3Rl
cnMgKHN0YXJ0OiAlaSwgZW5kOiAlaSksIGhhbmRsaW5nVGV4dFBhdGg9JWlcbiIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dEJveCwgbGVuZ3RoLCB0ZXh0Qm94LT5zdGFydCgpLCB0
ZXh0Qm94LT5lbmQoKSwgKGludCkgbV9oYW5kbGluZ1RleHRQYXRoKTsKLSNlbmRpZgotCi0gICAg
ICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCk7Ci0gICAg
ICAgICAgICBBU1NFUlQodGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQodGV4dC0+bm9kZSgpKTsK
LQotICAgICAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50KiB0ZXh0Q29udGVudCA9IDA7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gdGV4dC0+bm9kZSgpLT5wYXJlbnQoKTsKLSAgICAgICAg
ICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzU1ZHRWxlbWVudCgpICYmICF0ZXh0Q29udGVudCkg
ewotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSktPmlz
VGV4dENvbnRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQgPSBzdGF0aWNf
Y2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQodGV4dENvbnRlbnQpOwotCi0gICAgICAgICAgICAv
LyBTdGFydCBuZXcgY2hhcmFjdGVyIHJhbmdlIGZvciB0aGUgZmlyc3QgY2h1bmsKLSAgICAgICAg
ICAgIGJvb2wgaXNGaXJzdENoYXJhY3RlciA9IG1fc3ZnVGV4dENodW5rcy5pc0VtcHR5KCkgJiYg
bV9jaHVuay5zdGFydCA9PSBtX2NoYXJzSXQgJiYgbV9jaHVuay5zdGFydCA9PSBtX2NodW5rLmVu
ZDsKLSAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fY2h1bmsuYm94ZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICBtX2NodW5r
LmJveGVzLmFwcGVuZChTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSgpKTsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9jaHVuay5ib3hlcy5pc0VtcHR5KCkp
OwotCi0gICAgICAgICAgICAvLyBXYWxrIHN0cmluZyB0byBmaW5kIG91dCBuZXcgY2h1bmsgcG9z
aXRpb25zLCBpZiBleGlzdGVudAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fY2hhcnNJdCAhPSBtX2No
YXJzRW5kKTsKLQotICAgICAgICAgICAgICAgIFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiBy
YW5nZSA9IG1fY2h1bmsuYm94ZXMubGFzdCgpOwotICAgICAgICAgICAgICAgIGlmIChyYW5nZS5p
c09wZW4oKSkgewotICAgICAgICAgICAgICAgICAgICByYW5nZS5ib3ggPSBjdXJyOwotICAgICAg
ICAgICAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCA9ICFpID8gMCA6IGkgLSAxOwotCi0jaWYg
REVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCi0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiIHwgLT4gUmFuZ2UgaXMgb3BlbiEgYm94PSVwLCBzdGFydE9mZnNldD0laVxuIiwgcmFu
Z2UuYm94LCByYW5nZS5zdGFydE9mZnNldCk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBJZiBhIG5ldyAob3IgdGhlIGZpcnN0KSBjaHVuayBoYXMgYmVl
biBzdGFydGVkLCByZWNvcmQgaXQncyB0ZXh0LWFuY2hvciBhbmQgd3JpdGluZyBtb2RlLgotICAg
ICAgICAgICAgICAgIGlmIChtX2Fzc2lnbkNodW5rUHJvcGVydGllcykgewotICAgICAgICAgICAg
ICAgICAgICBtX2Fzc2lnbkNodW5rUHJvcGVydGllcyA9IGZhbHNlOwotCi0gICAgICAgICAgICAg
ICAgICAgIG1fY2h1bmsuaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUodGV4
dC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2h1bmsuaXNU
ZXh0UGF0aCA9IG1faGFuZGxpbmdUZXh0UGF0aDsKLSAgICAgICAgICAgICAgICAgICAgbV9jaHVu
ay5hbmNob3IgPSB0ZXh0LT5zdHlsZSgpLT5zdmdTdHlsZSgpLT50ZXh0QW5jaG9yKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fY2h1bmsudGV4dExlbmd0aCA9IHRleHRDb250ZW50LT50ZXh0TGVu
Z3RoKCkudmFsdWUodGV4dENvbnRlbnQpOwotICAgICAgICAgICAgICAgICAgICBtX2NodW5rLmxl
bmd0aEFkanVzdCA9IChFTGVuZ3RoQWRqdXN0KSB0ZXh0Q29udGVudC0+bGVuZ3RoQWRqdXN0KCk7
Ci0KLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEKLSAgICAgICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgfCAtPiBBc3NpZ24gY2h1bmsgcHJvcGVydGllcywgaXNWZXJ0aWNhbFRl
eHQ9JWksIGFuY2hvcj0laVxuIiwgbV9jaHVuay5pc1ZlcnRpY2FsVGV4dCwgbV9jaHVuay5hbmNo
b3IpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGkg
PiAwICYmICFpc0ZpcnN0Q2hhcmFjdGVyICYmIG1fY2hhcnNJdC0+bmV3VGV4dENodW5rKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIG1pZCBjaHVuayAmIGNoYXJhY3RlciByYW5nZQot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXJhbmdlLmlzT3BlbigpKTsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFyYW5nZS5pc0Nsb3NlZCgpKTsKLQotICAgICAgICAgICAgICAgICAg
ICByYW5nZS5lbmRPZmZzZXQgPSBpOwotICAgICAgICAgICAgICAgICAgICBjbG9zZVRleHRDaHVu
aygpOwotCi0jaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCi0gICAgICAgICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiIHwgLT4gQ2xvc2UgbWlkLXRleHQgY2h1bmssIGF0IGVuZE9mZnNl
dDogJWkgYW5kIHN0YXJ0aW5nIG5ldyBtaWQgY2h1bmshXG4iLCByYW5nZS5lbmRPZmZzZXQpOwot
I2VuZGlmCi0gICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIFByZXBhcmUgZm9yIG5leHQgY2h1
bmssIGlmIHdlJ3JlIG5vdCBhdCB0aGUgZW5kCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0VGV4
dENodW5rKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpIHsKLSNp
ZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiIHwgLT4gUmVjb3JkIGxhc3QgY2h1bmsgb2YgaW5saW5lIHRleHQgYm94IVxu
Iik7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRUZXh0Q2h1bmsoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5n
ZSA9IG1fY2h1bmsuYm94ZXMubGFzdCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2Fz
c2lnbkNodW5rUHJvcGVydGllcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9j
aHVuay5pc1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZSh0ZXh0LT5zdHlsZSgp
LT5zdmdTdHlsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY2h1bmsuaXNUZXh0UGF0
aCA9IG1faGFuZGxpbmdUZXh0UGF0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY2h1bmsu
YW5jaG9yID0gdGV4dC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+dGV4dEFuY2hvcigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jaHVuay50ZXh0TGVuZ3RoID0gdGV4dENvbnRlbnQtPnRleHRM
ZW5ndGgoKS52YWx1ZSh0ZXh0Q29udGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2No
dW5rLmxlbmd0aEFkanVzdCA9IChFTGVuZ3RoQWRqdXN0KSB0ZXh0Q29udGVudC0+bGVuZ3RoQWRq
dXN0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLmJveCA9IGN1cnI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCA9IGk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghcmFuZ2UuaXNPcGVuKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFyYW5nZS5pc0Nsb3NlZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkg
aG9sZCB0cnVlIGZvciB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdCBjaHVuawotICAg
ICAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2hhcmFjdGVyKQotICAgICAgICAgICAgICAgICAgICBp
c0ZpcnN0Q2hhcmFjdGVyID0gZmFsc2U7Ci0gICAgCi0gICAgICAgICAgICAgICAgKyttX2NoYXJz
SXQ7Ci0gICAgICAgICAgICB9Ci0KLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEgICAgCi0g
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiBGaW5pc2hlZCBpbmxpbmUgdGV4dCBib3gh
XG4iKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYg
cmFuZ2UgPSBtX2NodW5rLmJveGVzLmxhc3QoKTsKLSAgICAgICAgICAgIGlmICghcmFuZ2UuaXNP
cGVuKCkgJiYgIXJhbmdlLmlzQ2xvc2VkKCkpIHsKLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+
IDEKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiBMYXN0IHJhbmdlIG5vdCBj
bG9zZWQgLSBjbG9zaW5nIHdpdGggZW5kT2Zmc2V0OiAlaVxuIiwgbGVuZ3RoKTsKLSNlbmRpZgot
Ci0gICAgICAgICAgICAgICAgLy8gQ3VycmVudCB0ZXh0IGNodW5rIGlzIG5vdCB5ZXQgY2xvc2Vk
LiBGaW5pc2ggdGhlIGN1cnJlbnQgcmFuZ2UsIGJ1dCBkb24ndCBzdGFydCBhIG5ldyBjaHVuay4K
LSAgICAgICAgICAgICAgICByYW5nZS5lbmRPZmZzZXQgPSBsZW5ndGg7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAobV9jaGFyc0l0ICE9IG1fY2hhcnNFbmQpIHsKLSNpZiBERUJVR19DSFVOS19CVUlM
RElORyA+IDEKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gTm90IGF0
IGxhc3QgY2hhcmFjdGVyIHlldCFcbiIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgd2UncmUgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgYm94IHRvIGJlIHByb2Nlc3Nl
ZCwgYW5kIGlmIHRoZSBuZXh0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlciBzdGFy
dHMgYSBuZXcgY2h1bmssIHRoZW4gY2xvc2UgdGhlIGN1cnJlbnQgY2h1bmsgYW5kIHN0YXJ0IGEg
bmV3IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY2hhcnNJdC0+bmV3VGV4dENodW5r
KSB7Ci0jaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiAtPiBOZXh0IGNoYXJhY3RlciBzdGFydHMgbmV3IGNodW5rISBD
bG9zaW5nIGN1cnJlbnQgY2h1bmssIGFuZCBzdGFydGluZyBhIG5ldyBvbmUuLi5cbiIpOwotI2Vu
ZGlmCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlVGV4dENodW5rKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydFRleHRDaHVuaygpOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBzdGFydCBhIG5ldyBjaGFy
YWN0ZXIgcmFuZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY2h1bmsuYm94ZXMuYXBwZW5k
KFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlKCkpOwotCi0jaWYgREVCVUdfQ0hVTktfQlVJTERJ
TkcgPiAxCi0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiBOZXh0
IGNoYXJhY3RlciBkb2VzIE5PVCBzdGFydCBhIG5ldyBjaHVuayEgU3RhcnRpbmcgbmV3IGNoYXJh
Y3RlciByYW5nZS4uLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0jaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCi0gICAgICAg
ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IENsb3NpbmcgZmluYWwgY2h1bmshIEZp
bmlzaGVkIHByb2Nlc3NpbmchXG4iKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgICAgIC8v
IENsb3NlIGZpbmFsIGNodW5rLCBvbmNlIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgYm94
Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlVGV4dENodW5rKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGN1
cnItPmlzSW5saW5lRmxvd0JveCgpKTsKLSAgICAgICAgICAgIElubGluZUZsb3dCb3gqIGZsb3dC
b3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY3Vycik7Ci0KLSAgICAgICAgICAgIC8v
IFNraXAgZ2VuZXJhdGVkIGNvbnRlbnQuCi0gICAgICAgICAgICBpZiAoIWZsb3dCb3gtPnJlbmRl
cmVyKCktPm5vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
Ym9vbCBpc1RleHRQYXRoID0gZmxvd0JveC0+cmVuZGVyZXIoKS0+bm9kZSgpLT5oYXNUYWdOYW1l
KFNWR05hbWVzOjp0ZXh0UGF0aFRhZyk7Ci0KLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEK
LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IEhhbmRsZSBpbmxpbmUgZmxvdyBib3gg
KCVwKSwgaXNUZXh0UGF0aD0laVxuIiwgZmxvd0JveCwgKGludCkgaXNUZXh0UGF0aCk7Ci0jZW5k
aWYKLQotICAgICAgICAgICAgaWYgKGlzVGV4dFBhdGgpCi0gICAgICAgICAgICAgICAgbV9oYW5k
bGluZ1RleHRQYXRoID0gdHJ1ZTsKLQotICAgICAgICAgICAgcmVjdXJzaXZlQnVpbGRUZXh0Q2h1
bmtzKGZsb3dCb3gpOwotCi0gICAgICAgICAgICBpZiAoaXNUZXh0UGF0aCkKLSAgICAgICAgICAg
ICAgICBtX2hhbmRsaW5nVGV4dFBhdGggPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotI2lm
IERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQotICAgIGZwcmludGYoc3RkZXJyLCAiIDwtIGJ1aWxk
VGV4dENodW5rcyhzdGFydD0lcClcbiIsIHN0YXJ0KTsKLSNlbmRpZgotfQotCi12b2lkIFNWR1Rl
eHRDaHVua0xheW91dEluZm86OmxheW91dFRleHRDaHVua3MoKQotewotICAgIFZlY3RvcjxTVkdU
ZXh0Q2h1bms+OjppdGVyYXRvciBpdCA9IG1fc3ZnVGV4dENodW5rcy5iZWdpbigpOwotICAgIFZl
Y3RvcjxTVkdUZXh0Q2h1bms+OjppdGVyYXRvciBlbmQgPSBtX3N2Z1RleHRDaHVua3MuZW5kKCk7
Ci0KLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR1RleHRDaHVuayYg
Y2h1bmsgPSAqaXQ7Ci0KLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDAKLSAgICAgICAgewot
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJIYW5kbGUgVEVYVCBDSFVOSyEgYW5jaG9yPSVp
LCB0ZXh0TGVuZ3RoPSVmLCBsZW5ndGhBZGp1c3Q9JWksIGlzVmVydGljYWxUZXh0PSVpLCBpc1Rl
eHRQYXRoPSVpIHN0YXJ0PSVwLCBlbmQ9JXAgLT4gZGlzdDogJWlcbiIsCi0gICAgICAgICAgICAg
ICAgICAgIChpbnQpIGNodW5rLmFuY2hvciwgY2h1bmsudGV4dExlbmd0aCwgKGludCkgY2h1bmsu
bGVuZ3RoQWRqdXN0LCAoaW50KSBjaHVuay5pc1ZlcnRpY2FsVGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgKGludCkgY2h1bmsuaXNUZXh0UGF0aCwgY2h1bmsuc3RhcnQsIGNodW5rLmVuZCwgKHVu
c2lnbmVkIGludCkgKGNodW5rLmVuZCAtIGNodW5rLnN0YXJ0KSk7Ci0KLSAgICAgICAgICAgIFZl
Y3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGJveEl0ID0gY2h1bmsu
Ym94ZXMuYmVnaW4oKTsKLSAgICAgICAgICAgIFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJS
YW5nZT46Oml0ZXJhdG9yIGJveEVuZCA9IGNodW5rLmJveGVzLmVuZCgpOwotCi0gICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgaSA9IDA7Ci0gICAgICAgICAgICBmb3IgKDsgYm94SXQgIT0gYm94RW5k
OyArK2JveEl0KSB7Ci0gICAgICAgICAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2Um
IHJhbmdlID0gKmJveEl0OwotICAgICAgICAgICAgICAgICsraTsKLSAgICAgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAtPiBSQU5HRSAlaSBTVEFSVE9GRlNFVDogJWksIEVORE9GRlNFVDog
JWksIEJPWDogJXBcbiIsIGksIHJhbmdlLnN0YXJ0T2Zmc2V0LCByYW5nZS5lbmRPZmZzZXQsIHJh
bmdlLmJveCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGlm
IChjaHVuay5pc1RleHRQYXRoKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8g
dGV4dC1wYXRoICYgdGV4dExlbmd0aCwgd2l0aCBsZW5ndGhBZGp1c3Q9InNwYWNpbmciIGlzIGFs
cmVhZHkgaGFuZGxlZCBmb3IgdGV4dFBhdGggbGF5b3V0cy4KLSAgICAgICAgYXBwbHlUZXh0TGVu
Z3RoQ29ycmVjdGlvblRvVGV4dENodW5rKGNodW5rKTsKLSAKLSAgICAgICAgLy8gdGV4dC1hbmNo
b3IgaXMgYWxyZWFkeSBoYW5kbGVkIGZvciB0ZXh0UGF0aCBsYXlvdXRzLgotICAgICAgICBhcHBs
eVRleHRBbmNob3JUb1RleHRDaHVuayhjaHVuayk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uaAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFNWR1RleHRD
aHVua0xheW91dEluZm9faAotI2RlZmluZSBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvX2gKLQotI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiU1ZH
Q2hhcmFjdGVyRGF0YS5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAi
U1ZHVGV4dENvbnRlbnRFbGVtZW50LmgiCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJ
bmxpbmVCb3g7Ci1jbGFzcyBJbmxpbmVGbG93Qm94OwotY2xhc3MgU1ZHSW5saW5lVGV4dEJveDsK
LQotLy8gQSBTVkdUZXh0Q2h1bmsgZGlyZWN0bHkgY29ycmVzcG9uZHMgdG8gdGhlIGRlZmluaXRp
b24gb2YgYSAidGV4dCBjaHVuayIgcGVyIFNWRyAxLjEgc3BlY2lmaWNhdGlvbgotLy8gRm9yIGV4
YW1wbGUsIGVhY2ggYWJzb2x1dGUgcG9zaXRpb25lZCBjaGFyYWN0ZXIgc3RhcnRzIGEgdGV4dCBj
aHVuayAobXVjaCBtb3JlIHRvIHJlc3BlY3QsIHNlZSBzcGVjKS4KLS8vIEVhY2ggU1ZHVGV4dENo
dW5rIGNvbnRhaW5zIGEgVmVjdG9yIG9mIFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlLCBkZXNj
cmliaW5nIGhvdyBtYW55IGJveGVzIGFyZSBzcGFubmVkCi0vLyBieSB0aGlzIGNodW5rLiBGb2xs
b3dpbmcgdHdvIGV4YW1wbGVzIHNob3VsZCBjbGFyaWZ5IHRoZSBjb2RlIGEgYml0OgotLy8KLS8v
IDEuIDx0ZXh0IHg9IjEwIDIwIDMwIj5BQkM8L3RleHQ+IC0gb25lIElubGluZVRleHRCb3ggaXMg
Y3JlYXRlZCwgdGhyZWUgU1ZHVGV4dENodW5rcyBlYWNoIHdpdGggb25lIFNWR0lubGluZUJveENo
YXJhdGVyUmFuZ2UKLS8vIFtTVkdUZXh0Q2h1bmsgMV0KLS8vICAgIFtTVkdJbmxpbmVCb3hDaGFy
YWN0ZXJSYW5nZSAxLCBzdGFydE9mZnNldD0wLCBlbmRPZmZzZXQ9MSwgYm94PTB4MV0KLS8vIFtT
VkdUZXh0Q2h1bmsgMl0KLS8vICAgIFtTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSAxLCBzdGFy
dE9mZnNldD0xLCBlbmRPZmZzZXQ9MiwgYm94PTB4MV0KLS8vIFtTVkdUZXh0Q2h1bmsgM10KLS8v
ICAgIFtTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSAxLCBzdGFydE9mZnNldD0yLCBlbmRPZmZz
ZXQ9MywgYm94PTB4MV0KLS8vCi0vLyAyLiA8dGV4dCB4PSIxMCI+QTx0c3Bhbj5CPC90c3Bhbj5D
PC90ZXh0PiAtIHRocmVlIElubGluZVRleHRCb3hzIGFyZSBjcmVhdGVkLCBvbmUgU1ZHVGV4dENo
dW5rLCB3aXRoIHRocmVlIFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlcwotLy8gW1NWR1RleHRD
aHVuayAxXQotLy8gICAgW1NWR0lubGluZUJveENoYXJhY3RlclJhbmdlIDEsIHN0YXJ0T2Zmc2V0
PTAsIGVuZE9mZnNldD0xLCBib3g9MHgxXQotLy8gICAgW1NWR0lubGluZUJveENoYXJhY3RlclJh
bmdlIDIsIHN0YXJ0T2Zmc2V0PTAsIGVuZE9mZnNldD0xLCBib3g9MHgyXQotLy8gICAgW1NWR0lu
bGluZUJveENoYXJhY3RlclJhbmdlIDMsIHN0YXJ0T2Zmc2V0PTAsIGVuZE9mZnNldD0xLCBib3g9
MHgzXQotLy8KLS8vIEhpZ2ggbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIFNWRyB0ZXh0IGxheW91dCBj
b2RlOgotLy8gU3RlcCAjMSkgLSBCdWlsZCBWZWN0b3Igb2YgU1ZHQ2hhciBvYmplY3RzIHN0YXJ0
aW5nIGZyb20gcm9vdCA8dGV4dD4gZGl2aW5nIGludG8gY2hpbGRyZW4KLS8vIFN0ZXAgIzIpIC0g
QnVpbGQgVmVjdG9yIG9mIFNWR1RleHRDaHVuayBvYmplY3RzLCBjb250YWluaW5nIG9mZnNldHMg
aW50byB0aGUgSW5saW5lVGV4dEJveGVzIGFuZCBTVkdDaGFyIHZlY3RvcnMKLS8vIFN0ZXAgIzMp
IC0gQXBwbHkgY2h1bmsgcG9zdCBwcm9jZXNzaW5nICh0ZXh0LWFuY2hvciAvIHRleHRMZW5ndGgg
c3VwcG9ydCwgd2hpY2ggb3BlcmF0ZSBvbiB0ZXh0IGNodW5rcyEpCi0vLyBTdGVwICM0KSAtIFBy
b3BhZ2F0ZSBpbmZvcm1hdGlvbiwgaG93IG1hbnkgY2h1bmsgInBhcnRzIiBhcmUgYXNzb2NpYXRl
ZCB3aXRoIGVhY2ggU1ZHSW5saW5lVGV4dEJveCAoc2VlIGJlbG93KQotLy8gU3RlcCAjNSkgLSBM
YXlvdXQgYWxsIElubGluZUJveGVzLCBvbmx5IGJ5IG1lYXN1cmluZyB0aGVpciBjb250ZXh0IHJl
Y3QgKHgveS93aWR0aC9oZWlnaHQgZGVmaW5lZCB0aHJvdWdoIFNWR0NoYXJzIGFuZCB0cmFuc2Zv
cm1hdGlvbnMpCi0vLyBTdGVwICM2KSAtIExheW91dCBTVkdSb290SW5saW5lQm94LCBpdCdzIHBh
cmVudCBSZW5kZXJTVkdUZXh0IGJsb2NrIGFuZCBmaXh1cCBjaGlsZCBwb3NpdGlvbnMsIHRvIGJl
IHJlbGF0aXZlIHRvIHRoZSByb290IGJveAotLy8KLS8vIFdoZW4gcGFpbnRpbmcgYSByYW5nZSBv
ZiBjaGFyYWN0ZXJzLCB3ZSBoYXZlIHRvIGRldGVybWluZSBob3cgbWFueSBjYW4gYmUgZHJhd24g
aW4gYSByb3cuIEVhY2ggYWJzb2x1dGUgcG9zdGlvbmVkCi0vLyBjaGFyYWN0ZXIgaXMgZHJhd24g
aW5kaXZpZHVhbGx5LiBBZnRlciBzdGVwICMyKSB3ZSBrbm93IGFsbCB0ZXh0IGNodW5rcywgYW5k
IGhvdyB0aGV5IHNwYW4gYWNyb3NzIHRoZSBTVkdJbmxpbmVUZXh0Qm94ZXMuCi0vLyBJbiBzdGVw
ICM0KSB3ZSBidWlsZCBhIGxpc3Qgb2YgdGV4dCBjaHVuayAicGFydHMiIGFuZCBzdG9yZSBpdCBp
biBlYWNoIFNWR0lubGluZVRleHRCb3guIEEgY2h1bmsgInBhcnQiIGlzIGEgcGFydCBvZiBhCi0v
LyB0ZXh0IGNodW5rIHRoYXQgbGl2ZXMgaW4gYSBTVkdJbmxpbmVUZXh0Qm94IChjb25zaXN0cyBv
ZiBhIGxlbmd0aCwgd2lkdGgsIGhlaWdodCBhbmQgYSBtb25vdG9uaWMgb2Zmc2V0IGZyb20gdGhl
IGNodW5rIGJlZ2luKQotLy8gVGhlIFNWR1RleHRDaHVua1BhcnQgb2JqZWN0IGRlc2NyaWJlcyB0
aGlzIGluZm9ybWF0aW9uLgotLy8gV2hlbiBwYWludGluZyB3ZSBjYW4gZm9sbG93IHRoZSByZWd1
bGFyIElubGluZUJveCBmbG93LCB3ZSBzdGFydCBwYWludGluZyB0aGUgU1ZHUm9vdElubGluZUJv
eCwgd2hpY2gganVzdCBhc2tzIGl0cyBjaGlsZHJlbgotLy8gdG8gcGFpbnQuIFRoZXkgY2FuIHBh
aW50IG9uIHRoZWlyIG93biBiZWNhdXNlIGFsbCBwb3NpdGlvbiBpbmZvcm1hdGlvbiBhcmUga25v
d24uIFByZXZpb3VzbHkgd2UgdXNlZCB0byBkcmF3IF9hbGxfIGNoYXJhY3RlcnMKLS8vIGZyb20g
dGhlIFNWR1Jvb3RJbmxpbmVCb3gsIHdoaWNoIHZpb2xhdGVzIHRoZSB3aG9sZSBjb25jZXB0IG9m
IHRoZSBtdWx0aXBsZSBJbmxpbmVCb3hlcywgYW5kIG1hZGUgdGV4dCBzZWxlY3Rpb24gdmVyeSBo
YXJkIHRvCi0vLyBpbXBsZW1lbnQuCi0KLXN0cnVjdCBTVkdUZXh0Q2h1bmtQYXJ0IHsKLSAgICBT
VkdUZXh0Q2h1bmtQYXJ0KCkKLSAgICAgICAgOiBvZmZzZXQoLTEpCi0gICAgICAgICwgbGVuZ3Ro
KC0xKQotICAgICAgICAsIHdpZHRoKDApCi0gICAgICAgICwgaGVpZ2h0KDApCi0gICAgewotICAg
IH0KLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb2Zm
c2V0ICE9IC0xCi0gICAgICAgICAgICAmJiBsZW5ndGggIT0gLTEKLSAgICAgICAgICAgICYmIHdp
ZHRoCi0gICAgICAgICAgICAmJiBoZWlnaHQ7Ci0gICAgfQotCi0gICAgLy8gRmlyc3QgY2hhcmFj
dGVyIG9mIHRoaXMgdGV4dCBjaHVuayBwYXJ0LCBkZWZpbmluZyB0aGUgb3JpZ2luIHRvIGJlIGRy
YXduCi0gICAgVmVjdG9yPFNWR0NoYXI+Ojpjb25zdF9pdGVyYXRvciBmaXJzdENoYXJhY3RlcjsK
LQotICAgIC8vIFN0YXJ0IG9mZnNldCBpbiB0ZXh0UmVuZGVyZXIoKS0+Y2hhcmFjdGVycygpIGJ1
ZmZlci4KLSAgICBpbnQgb2Zmc2V0OwotCi0gICAgLy8gbGVuZ3RoL3dpZHRoL2hlaWdodCBvZiBj
aHVuayBwYXJ0Ci0gICAgaW50IGxlbmd0aDsKLSAgICBmbG9hdCB3aWR0aDsKLSAgICBmbG9hdCBo
ZWlnaHQ7Ci19OwotCi1zdHJ1Y3QgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UgewotICAgIFNW
R0lubGluZUJveENoYXJhY3RlclJhbmdlKCkKLSAgICAgICAgOiBzdGFydE9mZnNldChJTlRfTUlO
KQotICAgICAgICAsIGVuZE9mZnNldChJTlRfTUlOKQotICAgICAgICAsIGJveCgwKQotICAgIHsK
LSAgICB9Ci0KLSAgICBib29sIGlzT3BlbigpIGNvbnN0IHsgcmV0dXJuIChzdGFydE9mZnNldCA9
PSBlbmRPZmZzZXQpICYmIChlbmRPZmZzZXQgPT0gSU5UX01JTik7IH0KLSAgICBib29sIGlzQ2xv
c2VkKCkgY29uc3QgeyByZXR1cm4gc3RhcnRPZmZzZXQgIT0gSU5UX01JTiAmJiBlbmRPZmZzZXQg
IT0gSU5UX01JTjsgfQotCi0gICAgaW50IHN0YXJ0T2Zmc2V0OwotICAgIGludCBlbmRPZmZzZXQ7
Ci0KLSAgICBJbmxpbmVCb3gqIGJveDsKLX07Ci0KLXN0cnVjdCBTVkdDaGFyOwotCi0vLyBDb252
ZW5pZW5jZSB0eXBlZGVmCi10eXBlZGVmIFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHTGVuZ3Ro
QWRqdXN0VHlwZSBFTGVuZ3RoQWRqdXN0OwotCi1zdHJ1Y3QgU1ZHVGV4dENodW5rIHsKLSAgICBT
VkdUZXh0Q2h1bmsoVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBpdCkKLSAgICAgICAgOiBhbmNo
b3IoVEFfU1RBUlQpCi0gICAgICAgICwgdGV4dExlbmd0aCgwLjBmKQotICAgICAgICAsIGxlbmd0
aEFkanVzdChTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVTVF9TUEFDSU5HKQotICAg
ICAgICAsIGlzVmVydGljYWxUZXh0KGZhbHNlKQotICAgICAgICAsIGlzVGV4dFBhdGgoZmFsc2Up
Ci0gICAgICAgICwgc3RhcnQoaXQpCi0gICAgICAgICwgZW5kKGl0KQotICAgIHsKLSAgICB9Ci0K
LSAgICAvLyB0ZXh0LWFuY2hvciBzdXBwb3J0Ci0gICAgRVRleHRBbmNob3IgYW5jaG9yOwotCi0g
ICAgLy8gdGV4dExlbmd0aCAmIGxlbmd0aEFkanVzdCBzdXBwb3J0Ci0gICAgZmxvYXQgdGV4dExl
bmd0aDsKLSAgICBFTGVuZ3RoQWRqdXN0IGxlbmd0aEFkanVzdDsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gY3RtOwotCi0gICAgLy8gc3RhdHVzIGZsYWdzCi0gICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA6
IDE7Ci0gICAgYm9vbCBpc1RleHRQYXRoIDogMTsKLQotICAgIC8vIG1haW4gY2h1bmsgZGF0YQot
ICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3Igc3RhcnQ7Ci0gICAgVmVjdG9yPFNWR0NoYXI+
OjppdGVyYXRvciBlbmQ7Ci0KLSAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+
IGJveGVzOwotfTsKLQotc3RydWN0IFNWR1RleHRDaHVua0xheW91dEluZm8gewotICAgIFNWR1Rl
eHRDaHVua0xheW91dEluZm8oKQotICAgICAgICA6IG1fYXNzaWduQ2h1bmtQcm9wZXJ0aWVzKHRy
dWUpCi0gICAgICAgICwgbV9oYW5kbGluZ1RleHRQYXRoKGZhbHNlKQotICAgICAgICAsIG1fY2hh
cnNJdCgwKQotICAgICAgICAsIG1fY2hhcnNCZWdpbigwKQotICAgICAgICAsIG1fY2hhcnNFbmQo
MCkKLSAgICAgICAgLCBtX2NodW5rKDApCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IFZlY3Rv
cjxTVkdUZXh0Q2h1bms+JiB0ZXh0Q2h1bmtzKCkgY29uc3QgeyByZXR1cm4gbV9zdmdUZXh0Q2h1
bmtzOyB9Ci0KLSAgICB2b2lkIGJ1aWxkVGV4dENodW5rcyhWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJh
dG9yIGNoYXJzQmVnaW4sIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgY2hhcnNFbmQsIElubGlu
ZUZsb3dCb3gqIHN0YXJ0KTsKLSAgICB2b2lkIGxheW91dFRleHRDaHVua3MoKTsKLQotcHJpdmF0
ZToKLSAgICB2b2lkIHN0YXJ0VGV4dENodW5rKCk7Ci0gICAgdm9pZCBjbG9zZVRleHRDaHVuaygp
OwotICAgIHZvaWQgcmVjdXJzaXZlQnVpbGRUZXh0Q2h1bmtzKElubGluZUZsb3dCb3gqIHN0YXJ0
KTsKLQotICAgIGJvb2wgbV9hc3NpZ25DaHVua1Byb3BlcnRpZXMgOiAxOwotICAgIGJvb2wgbV9o
YW5kbGluZ1RleHRQYXRoIDogMTsKLQotICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgbV9j
aGFyc0l0OwotICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgbV9jaGFyc0JlZ2luOwotICAg
IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgbV9jaGFyc0VuZDsKLQotICAgIFZlY3RvcjxTVkdU
ZXh0Q2h1bms+IG1fc3ZnVGV4dENodW5rczsKLSAgICBTVkdUZXh0Q2h1bmsgbV9jaHVuazsKLX07
Ci0KLS8vIEhlbHBlciBmdW5jdGlvbnMKLWZsb2F0IGNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdEZv
clRleHRDaHVuayhTVkdUZXh0Q2h1bmsmLCBFVGV4dEFuY2hvcik7Ci1mbG9hdCBjYWxjdWxhdGVU
ZXh0TGVuZ3RoQ29ycmVjdGlvbkZvclRleHRDaHVuayhTVkdUZXh0Q2h1bmsmLCBFTGVuZ3RoQWRq
dXN0LCBmbG9hdCYgY29tcHV0ZWRMZW5ndGgpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotI2VuZGlmIC8vIFNWR1RleHRDaHVua0xheW91dEluZm9f
aApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAJ
KHJldmlzaW9uIDY4ODY3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzc1ICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICAg
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1ZHVGV4dExh
eW91dFV0aWxpdGllcy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCi0jaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgotI2luY2x1ZGUgIlNWR0NoYXJhY3RlckRhdGEuaCIKLSNpbmNsdWRlICJTVkdDaGFyYWN0ZXJM
YXlvdXRJbmZvLmgiCi0jaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdS
ZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR1RleHRDaHVua0xheW91dEluZm8uaCIKLSNpbmNs
dWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSAiVW5pY29kZVJhbmdlLmgiCi0KLSNpbmNsdWRlIDxm
bG9hdC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdN
b2RlKGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICByZXR1cm4gc3R5bGUtPndy
aXRpbmdNb2RlKCkgPT0gV01fVEJSTCB8fCBzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9UQjsg
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRUFsaWdubWVudEJhc2VsaW5lIGRvbWluYW50QmFzZWxpbmVU
b1NoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dCwgY29u
c3QgRm9udCYgZm9udCkKLXsKLSAgICBBU1NFUlQodGV4dCk7Ci0KLSAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpID8gdGV4dC0+c3R5bGUoKS0+c3ZnU3R5bGUo
KSA6IDA7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSA9IHRleHQtPnBhcmVudCgpICYmIHRleHQtPnBhcmVudCgpLT5zdHlsZSgpID8g
dGV4dC0+cGFyZW50KCktPnN0eWxlKCktPnN2Z1N0eWxlKCkgOiAwOwotCi0gICAgRURvbWluYW50
QmFzZWxpbmUgYmFzZWxpbmUgPSBzdHlsZS0+ZG9taW5hbnRCYXNlbGluZSgpOwotICAgIGlmIChi
YXNlbGluZSA9PSBEQl9BVVRPKSB7Ci0gICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAg
ICAgICAgIGJhc2VsaW5lID0gREJfQ0VOVFJBTDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YmFzZWxpbmUgPSBEQl9BTFBIQUJFVElDOwotICAgIH0KLQotICAgIHN3aXRjaCAoYmFzZWxpbmUp
IHsKLSAgICBjYXNlIERCX1VTRV9TQ1JJUFQ6Ci0gICAgICAgIC8vIFRPRE86IFRoZSBkb21pbmFu
dC1iYXNlbGluZSBhbmQgdGhlIGJhc2VsaW5lLXRhYmxlIGNvbXBvbmVudHMgYXJlIHNldCBieQot
ICAgICAgICAvLyAgICAgICBkZXRlcm1pbmluZyB0aGUgcHJlZG9taW5hbnQgc2NyaXB0IG9mIHRo
ZSBjaGFyYWN0ZXIgZGF0YSBjb250ZW50LgotICAgICAgICByZXR1cm4gQUJfQUxQSEFCRVRJQzsK
LSAgICBjYXNlIERCX05PX0NIQU5HRToKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHBhcmVu
dFN0eWxlKQotICAgICAgICAgICAgICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChp
c1ZlcnRpY2FsVGV4dCwgdGV4dC0+cGFyZW50KCksIGZvbnQpOwotCi0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBBQl9BVVRPOwotICAgICAgICB9
Ci0gICAgY2FzZSBEQl9SRVNFVF9TSVpFOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocGFy
ZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRvbWluYW50QmFzZWxpbmVUb1NoaWZ0
KGlzVmVydGljYWxUZXh0LCB0ZXh0LT5wYXJlbnQoKSwgZm9udCk7Ci0KLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEFCX0FVVE87ICAgIAotICAg
ICAgICB9Ci0gICAgY2FzZSBEQl9JREVPR1JBUEhJQzoKLSAgICAgICAgcmV0dXJuIEFCX0lERU9H
UkFQSElDOwotICAgIGNhc2UgREJfQUxQSEFCRVRJQzoKLSAgICAgICAgcmV0dXJuIEFCX0FMUEhB
QkVUSUM7Ci0gICAgY2FzZSBEQl9IQU5HSU5HOgotICAgICAgICByZXR1cm4gQUJfSEFOR0lORzsK
LSAgICBjYXNlIERCX01BVEhFTUFUSUNBTDoKLSAgICAgICAgcmV0dXJuIEFCX01BVEhFTUFUSUNB
TDsKLSAgICBjYXNlIERCX0NFTlRSQUw6Ci0gICAgICAgIHJldHVybiBBQl9DRU5UUkFMOwotICAg
IGNhc2UgREJfTUlERExFOgotICAgICAgICByZXR1cm4gQUJfTUlERExFOwotICAgIGNhc2UgREJf
VEVYVF9BRlRFUl9FREdFOgotICAgICAgICByZXR1cm4gQUJfVEVYVF9BRlRFUl9FREdFOwotICAg
IGNhc2UgREJfVEVYVF9CRUZPUkVfRURHRToKLSAgICAgICAgcmV0dXJuIEFCX1RFWFRfQkVGT1JF
X0VER0U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBBQl9BVVRPOwotICAgIH0KLX0KLQotZmxvYXQgYWxpZ25tZW50QmFzZWxpbmVU
b1NoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dCwgY29u
c3QgRm9udCYgZm9udCkKLXsKLSAgICBBU1NFUlQodGV4dCk7Ci0KLSAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpID8gdGV4dC0+c3R5bGUoKS0+c3ZnU3R5bGUo
KSA6IDA7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSA9IHRleHQtPnBhcmVudCgpICYmIHRleHQtPnBhcmVudCgpLT5zdHlsZSgpID8g
dGV4dC0+cGFyZW50KCktPnN0eWxlKCktPnN2Z1N0eWxlKCkgOiAwOwotCi0gICAgRUFsaWdubWVu
dEJhc2VsaW5lIGJhc2VsaW5lID0gc3R5bGUtPmFsaWdubWVudEJhc2VsaW5lKCk7Ci0gICAgaWYg
KGJhc2VsaW5lID09IEFCX0FVVE8pIHsKLSAgICAgICAgaWYgKHBhcmVudFN0eWxlICYmIHN0eWxl
LT5kb21pbmFudEJhc2VsaW5lKCkgPT0gREJfQVVUTykKLSAgICAgICAgICAgIGJhc2VsaW5lID0g
ZG9taW5hbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQtPnBhcmVudCgpLCBm
b250KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZWxpbmUgPSBkb21pbmFudEJhc2Vs
aW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dCwgZm9udCk7Ci0KLSAgICAgICAgQVNTRVJU
KGJhc2VsaW5lICE9IEFCX0FVVE8pOyAgICAKLSAgICB9Ci0KLSAgICAvLyBOb3RlOiBodHRwOi8v
d2lraS5hcGFjaGUub3JnL3htbGdyYXBoaWNzLWZvcC9MaW5lTGF5b3V0L0FsaWdubWVudEhhbmRs
aW5nCi0gICAgc3dpdGNoIChiYXNlbGluZSkgewotICAgIGNhc2UgQUJfQkFTRUxJTkU6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZG9taW5hbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQtPnBhcmVudCgp
LCBmb250KTsKLQotICAgICAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgICAgIH0KLSAgICBjYXNl
IEFCX0JFRk9SRV9FREdFOgotICAgIGNhc2UgQUJfVEVYVF9CRUZPUkVfRURHRToKLSAgICAgICAg
cmV0dXJuIGZvbnQuYXNjZW50KCk7Ci0gICAgY2FzZSBBQl9NSURETEU6Ci0gICAgICAgIHJldHVy
biBmb250LnhIZWlnaHQoKSAvIDIuMGY7Ci0gICAgY2FzZSBBQl9DRU5UUkFMOgotICAgICAgICAv
LyBOb3QgbmVlZGVkLCB3ZSdyZSB0YWtpbmcgdGhpcyBpbnRvIGFjY291bnQgYWxyZWFkeSBmb3Ig
dmVydGljYWwgdGV4dCEKLSAgICAgICAgLy8gcmV0dXJuIChmb250LmFzY2VudCgpIC0gZm9udC5k
ZXNjZW50KCkpIC8gMi4wZjsKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgY2FzZSBBQl9BRlRF
Ul9FREdFOgotICAgIGNhc2UgQUJfVEVYVF9BRlRFUl9FREdFOgotICAgIGNhc2UgQUJfSURFT0dS
QVBISUM6Ci0gICAgICAgIHJldHVybiBmb250LmRlc2NlbnQoKTsKLSAgICBjYXNlIEFCX0FMUEhB
QkVUSUM6Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIGNhc2UgQUJfSEFOR0lORzoKLSAgICAg
ICAgcmV0dXJuIGZvbnQuYXNjZW50KCkgKiA4LjBmIC8gMTAuMGY7Ci0gICAgY2FzZSBBQl9NQVRI
RU1BVElDQUw6Ci0gICAgICAgIHJldHVybiBmb250LmFzY2VudCgpIC8gMi4wZjsKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDAuMGY7
Ci0gICAgfQotfQotCi1mbG9hdCBnbHlwaE9yaWVudGF0aW9uVG9BbmdsZShjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUsIGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFVDaGFyJiBjaGFy
YWN0ZXIpCi17Ci0gICAgc3dpdGNoIChpc1ZlcnRpY2FsVGV4dCA/IHN2Z1N0eWxlLT5nbHlwaE9y
aWVudGF0aW9uVmVydGljYWwoKSA6IHN2Z1N0eWxlLT5nbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRh
bCgpKSB7Ci0gICAgY2FzZSBHT19BVVRPOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTcGVj
OiBGdWxsd2lkdGggaWRlb2dyYXBoaWMgYW5kIGZ1bGx3aWR0aCBMYXRpbiB0ZXh0IHdpbGwgYmUg
c2V0IHdpdGggYSBnbHlwaC1vcmllbnRhdGlvbiBvZiAwLWRlZ3JlZXMuCi0gICAgICAgICAgICAv
LyBUZXh0IHdoaWNoIGlzIG5vdCBmdWxsd2lkdGggd2lsbCBiZSBzZXQgd2l0aCBhIGdseXBoLW9y
aWVudGF0aW9uIG9mIDkwLWRlZ3JlZXMuCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pY29k
ZVJhbmdlID0gZmluZENoYXJVbmljb2RlUmFuZ2UoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGlm
ICh1bmljb2RlUmFuZ2UgPT0gY1JhbmdlU2V0TGF0aW4gfHwgdW5pY29kZVJhbmdlID09IGNSYW5n
ZUFyYWJpYykKLSAgICAgICAgICAgICAgICByZXR1cm4gOTAuMGY7Ci0KLSAgICAgICAgICAgIHJl
dHVybiAwLjBmOwotICAgICAgICB9Ci0gICAgY2FzZSBHT185MERFRzoKLSAgICAgICAgcmV0dXJu
IDkwLjBmOwotICAgIGNhc2UgR09fMTgwREVHOgotICAgICAgICByZXR1cm4gMTgwLjBmOwotICAg
IGNhc2UgR09fMjcwREVHOgotICAgICAgICByZXR1cm4gMjcwLjBmOwotICAgIGNhc2UgR09fMERF
RzoKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICB9Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBnbHlwaE9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcyhmbG9h
dCBvcmllbnRhdGlvbkFuZ2xlKQotewotICAgIHJldHVybiBmYWJzZihmbW9kZihvcmllbnRhdGlv
bkFuZ2xlLCAxODAuMGYpKSA9PSAwLjBmOwotfQotCi1mbG9hdCBhcHBseUdseXBoQWR2YW5jZUFu
ZFNoaWZ0UmVzcGVjdGluZ09yaWVudGF0aW9uKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IG9y
aWVudGF0aW9uQW5nbGUsIGZsb2F0IGdseXBoV2lkdGgsIGZsb2F0IGdseXBoSGVpZ2h0LCBjb25z
dCBGb250JiBmb250LCBTVkdDaGFyJiBzdmdDaGFyLCBmbG9hdCYgeE9yaWVudGF0aW9uU2hpZnQs
IGZsb2F0JiB5T3JpZW50YXRpb25TaGlmdCkKLXsKLSAgICBib29sIG9yaWVudGF0aW9uSXNNdWx0
aXBseU9mMTgwRGVncmVlcyA9IGdseXBoT3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVz
KG9yaWVudGF0aW9uQW5nbGUpOwotCi0gICAgLy8gVGhlIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIHNw
ZWMgcmVxdWlyZW1lbnRzOgotICAgIC8vCi0gICAgLy8gU3BlYzogSWYgdGhlICdnbHlwaC1vcmll
bnRhdGlvbi1ob3Jpem9udGFsJyByZXN1bHRzIGluIGFuIG9yaWVudGF0aW9uIGFuZ2xlIHRoYXQg
aXMgbm90IGEgbXVsdGlwbGUgb2YKLSAgICAvLyBvZiAxODAgZGVncmVlcywgdGhlbiB0aGUgY3Vy
cmVudCB0ZXh0IHBvc2l0aW9uIGlzIGluY3JlbWVudGVkIGFjY29yZGluZyB0byB0aGUgdmVydGlj
YWwgbWV0cmljcyBvZiB0aGUgZ2x5cGguCi0gICAgLy8KLSAgICAvLyBTcGVjOiBJZiBpZiB0aGUg
J2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyByZXN1bHRzIGluIGFuIG9yaWVudGF0aW9uIGFu
Z2xlIHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YKLSAgICAvLyAxODAgZGVncmVlcyx0aGVuIHRo
ZSBjdXJyZW50IHRleHQgcG9zaXRpb24gaXMgaW5jcmVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBo
b3Jpem9udGFsIG1ldHJpY3Mgb2YgdGhlIGdseXBoLgotCi0gICAgLy8gdmVydGljYWwgb3JpZW50
YXRpb24gaGFuZGxpbmcKLSAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgaWYgKG9y
aWVudGF0aW9uQW5nbGUgPT0gMC4wZikgewotICAgICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQg
PSAtZ2x5cGhXaWR0aCAvIDIuMGY7Ci0gICAgICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IGZv
bnQuYXNjZW50KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25BbmdsZSA9PSA5MC4w
ZikgewotICAgICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSAtZ2x5cGhIZWlnaHQ7Ci0gICAg
ICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IGZvbnQuZGVzY2VudCgpOwotICAgICAgICAgICAg
c3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WSA9IC1mb250LmFzY2VudCgpOwotICAgICAgICB9IGVs
c2UgaWYgKG9yaWVudGF0aW9uQW5nbGUgPT0gMjcwLjBmKSB7Ci0gICAgICAgICAgICB4T3JpZW50
YXRpb25TaGlmdCA9IGdseXBoSGVpZ2h0OwotICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQg
PSBmb250LmRlc2NlbnQoKTsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFgg
PSAtZ2x5cGhXaWR0aDsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSAt
Zm9udC5hc2NlbnQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDE4
MC4wZikgewotICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSBmb250LmFzY2VudCgpOwot
ICAgICAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdpZHRoIC8gMi4w
ZjsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSBmb250LmFzY2VudCgp
IC0gZm9udC5kZXNjZW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB2ZXJ0aWNhbCBhZHZh
bmNlIGNhbGN1bGF0aW9uCi0gICAgICAgIGlmIChvcmllbnRhdGlvbkFuZ2xlICE9IDAuMGYgJiYg
IW9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcykKLSAgICAgICAgICAgIHJldHVybiBn
bHlwaFdpZHRoOwotCi0gICAgICAgIHJldHVybiBnbHlwaEhlaWdodDsgCi0gICAgfQotCi0gICAg
Ly8gaG9yaXpvbnRhbCBvcmllbnRhdGlvbiBoYW5kbGluZwotICAgIGlmIChvcmllbnRhdGlvbkFu
Z2xlID09IDkwLjBmKSB7Ci0gICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gZ2x5cGhXaWR0aCAv
IDIuMGY7Ci0gICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gLWZvbnQuZGVzY2VudCgpOwotICAg
ICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGggLyAyLjBmIC0gZm9u
dC5kZXNjZW50KCk7IAotICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gZm9udC5k
ZXNjZW50KCk7Ci0gICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDI3MC4wZikgewot
ICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IC1nbHlwaFdpZHRoIC8gMi4wZjsKLSAgICAgICAg
eU9yaWVudGF0aW9uU2hpZnQgPSAtZm9udC5kZXNjZW50KCk7Ci0gICAgICAgIHN2Z0NoYXIub3Jp
ZW50YXRpb25TaGlmdFggPSAtZ2x5cGhXaWR0aCAvIDIuMGYgKyBmb250LmRlc2NlbnQoKTsKLSAg
ICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WSA9IGdseXBoSGVpZ2h0OwotICAgIH0gZWxz
ZSBpZiAob3JpZW50YXRpb25BbmdsZSA9PSAxODAuMGYpIHsKLSAgICAgICAgeE9yaWVudGF0aW9u
U2hpZnQgPSBnbHlwaFdpZHRoIC8gMi4wZjsKLSAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNo
aWZ0WCA9IC1nbHlwaFdpZHRoIC8gMi4wZjsKLSAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNo
aWZ0WSA9IGZvbnQuYXNjZW50KCkgLSBmb250LmRlc2NlbnQoKTsKLSAgICB9Ci0KLSAgICAvLyBo
b3Jpem9udGFsIGFkdmFuY2UgY2FsY3VsYXRpb24KLSAgICBpZiAob3JpZW50YXRpb25BbmdsZSAh
PSAwLjBmICYmICFvcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMpCi0gICAgICAgIHJl
dHVybiBnbHlwaEhlaWdodDsKLQotICAgIHJldHVybiBnbHlwaFdpZHRoOwotfQotCi1GbG9hdFBv
aW50IHRvcExlZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UoVmVjdG9yPFNWR0NoYXI+OjppdGVy
YXRvciBpdCwgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBlbmQpCi17Ci0gICAgZmxvYXQgbG93
WCA9IEZMVF9NQVgsIGxvd1kgPSBGTFRfTUFYOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5pc0hpZGRlbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgZmxvYXQgeCA9ICgqaXQpLng7Ci0gICAgICAgIGZsb2F0IHkgPSAoKml0KS55Owot
Ci0gICAgICAgIGlmICh4IDwgbG93WCkKLSAgICAgICAgICAgIGxvd1ggPSB4OwotCi0gICAgICAg
IGlmICh5IDwgbG93WSkKLSAgICAgICAgICAgIGxvd1kgPSB5OwotICAgIH0KLQotICAgIHJldHVy
biBGbG9hdFBvaW50KGxvd1gsIGxvd1kpOwotfQotCi1mbG9hdCBjdW1tdWxhdGVkV2lkdGhPZklu
bGluZUJveENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSkK
LXsKLSAgICBBU1NFUlQoIXJhbmdlLmlzT3BlbigpKTsKLSAgICBBU1NFUlQocmFuZ2UuaXNDbG9z
ZWQoKSk7Ci0gICAgQVNTRVJUKHJhbmdlLmJveC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpOwotCi0g
ICAgSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihy
YW5nZS5ib3gpOwotICAgIFJlbmRlclRleHQqIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIo
KTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwotICAgIHJldHVybiBz
dHlsZS0+Zm9udCgpLmZsb2F0V2lkdGgoc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dC0+
Y2hhcmFjdGVycygpICsgdGV4dEJveC0+c3RhcnQoKSArIHJhbmdlLnN0YXJ0T2Zmc2V0LCByYW5n
ZS5lbmRPZmZzZXQgLSByYW5nZS5zdGFydE9mZnNldCwgc3R5bGUsIHRleHRCb3gpKTsKLX0KLQot
ZmxvYXQgY3VtbXVsYXRlZEhlaWdodE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5l
Qm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlKQotewotICAgIEFTU0VSVCghcmFuZ2UuaXNPcGVuKCkp
OwotICAgIEFTU0VSVChyYW5nZS5pc0Nsb3NlZCgpKTsKLSAgICBBU1NFUlQocmFuZ2UuYm94LT5p
c1NWR0lubGluZVRleHRCb3goKSk7Ci0KLSAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3Rh
dGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KHJhbmdlLmJveCk7Ci0gICAgcmV0dXJuIChyYW5nZS5l
bmRPZmZzZXQgLSByYW5nZS5zdGFydE9mZnNldCkgKiB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+
c3R5bGUoKS0+Zm9udCgpLmhlaWdodCgpOwotfQotCi1UZXh0UnVuIHN2Z1RleHRSdW5Gb3JJbmxp
bmVUZXh0Qm94KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gpCi17Ci0gICAgQVNT
RVJUKHRleHRCb3gpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBUZXh0UnVuIHJ1bihjaGFy
YWN0ZXJzCi0gICAgICAgICAgICAgICAgLCBsZW5ndGgKLSAgICAgICAgICAgICAgICAsIGZhbHNl
IC8qIGFsbG93VGFicyAqLwotICAgICAgICAgICAgICAgICwgMCAvKiB4UG9zLCBvbmx5IHJlbGV2
YW50IHdpdGggYWxsb3dUYWJzPXRydWUgKi8KLSAgICAgICAgICAgICAgICAsIDAgLyogcGFkZGlu
Zywgb25seSByZWxldmFudCBmb3IganVzdGlmaWVkIHRleHQsIG5vdCByZWxldmFudCBmb3IgU1ZH
ICovCi0gICAgICAgICAgICAgICAgLCAhdGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
Ci0gICAgICAgICAgICAgICAgLCB0ZXh0Qm94LT5tX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1
YWxseU9yZGVyZWQoKSAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKLQotI2lmIEVOQUJMRShT
VkdfRk9OVFMpCi0gICAgcnVuLnNldFJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KHRleHRCb3gtPnRl
eHRSZW5kZXJlcigpLT5wYXJlbnQoKSk7Ci0jZW5kaWYKLQotICAgIC8vIERpc2FibGUgYW55IHdv
cmQvY2hhcmFjdGVyIHJvdW5kaW5nLgotICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwot
Ci0gICAgLy8gV2UgaGFuZGxlIGxldHRlciAmIHdvcmQgc3BhY2luZyBvdXJzZWx2ZXMuCi0gICAg
cnVuLmRpc2FibGVTcGFjaW5nKCk7Ci0gICAgcmV0dXJuIHJ1bjsKLX0KLQotZmxvYXQgY2FsY3Vs
YXRlQ1NTS2VybmluZyhTVkdFbGVtZW50KiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUpCi17Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7Ci0gICAgY29uc3Qg
U1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0KLSAgICBTVkdM
ZW5ndGgga2VybmluZ0xlbmd0aCA9IHN2Z1N0eWxlLT5rZXJuaW5nKCk7Ci0gICAgaWYgKGtlcm5p
bmdMZW5ndGgudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSkKLSAgICAgICAgcmV0
dXJuIGtlcm5pbmdMZW5ndGgudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIGZvbnQucGl4ZWxTaXplKCk7
Ci0KLSAgICByZXR1cm4ga2VybmluZ0xlbmd0aC52YWx1ZShjb250ZXh0KTsKLX0KLQotYm9vbCBh
cHBseVNWR0tlcm5pbmcoU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYgaW5mbywgY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlLCBTVkdMYXN0R2x5cGhJbmZvJiBsYXN0R2x5cGgsIGNvbnN0IFN0cmluZyYg
dW5pY29kZVN0cmluZywgY29uc3QgU3RyaW5nJiBnbHlwaE5hbWUsIGJvb2wgaXNWZXJ0aWNhbFRl
eHQpCi17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBmbG9hdCBrZXJuaW5nID0gMC4wZjsK
LQotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOwotICAgIGlmICghZm9udC5p
c1NWR0ZvbnQoKSkgewotICAgICAgICBsYXN0R2x5cGguaXNWYWxpZCA9IGZhbHNlOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgU1ZHRm9udEVsZW1lbnQqIHN2Z0ZvbnQgPSBm
b250LnN2Z0ZvbnQoKTsKLSAgICBBU1NFUlQoc3ZnRm9udCk7Ci0KLSAgICBpZiAobGFzdEdseXBo
LmlzVmFsaWQpIHsKLSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAga2Vy
bmluZyA9IHN2Z0ZvbnQtPnZlcnRpY2FsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMo
bGFzdEdseXBoLnVuaWNvZGUsIGxhc3RHbHlwaC5nbHlwaE5hbWUsIHVuaWNvZGVTdHJpbmcsIGds
eXBoTmFtZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGtlcm5pbmcgPSBzdmdGb250LT5o
b3Jpem9udGFsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMobGFzdEdseXBoLnVuaWNv
ZGUsIGxhc3RHbHlwaC5nbHlwaE5hbWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoTmFtZSk7Ci0gICAg
fQotCi0gICAgbGFzdEdseXBoLnVuaWNvZGUgPSB1bmljb2RlU3RyaW5nOwotICAgIGxhc3RHbHlw
aC5nbHlwaE5hbWUgPSBnbHlwaE5hbWU7Ci0gICAgbGFzdEdseXBoLmlzVmFsaWQgPSB0cnVlOwot
ICAgIGtlcm5pbmcgKj0gc3R5bGUtPmZvbnQoKS5zaXplKCkgLyBzdHlsZS0+Zm9udCgpLnByaW1h
cnlGb250KCktPnVuaXRzUGVyRW0oKTsKLQotICAgIGlmIChrZXJuaW5nICE9IDAuMGYpIHsKLSAg
ICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgaW5mby5jdXJ5IC09IGtlcm5p
bmc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluZm8uY3VyeCAtPSBrZXJuaW5nOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpbmZvKTsK
LSAgICBVTlVTRURfUEFSQU0oaXRlbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxhc3RHbHlwaCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHVuaWNvZGVTdHJpbmcpOwotICAgIFVOVVNFRF9QQVJBTShnbHlwaE5h
bWUpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuaAkocmV2aXNpb24gNjg4
NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpZm5kZWYgU1ZHVGV4dExheW91dFV0aWxpdGllc19oCi0jZGVmaW5lIFNWR1RleHRMYXlvdXRV
dGlsaXRpZXNfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZvbnQ7Ci1jbGFzcyBJbmxpbmVUZXh0Qm94OwotY2xh
c3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBTVkdFbGVtZW50Owot
Y2xhc3MgU1ZHUmVuZGVyU3R5bGU7Ci1jbGFzcyBUZXh0UnVuOwotCi1zdHJ1Y3QgU1ZHQ2hhcjsK
LXN0cnVjdCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOwotc3RydWN0IFNWR0lubGluZUJveENoYXJh
Y3RlclJhbmdlOwotCi1zdHJ1Y3QgU1ZHTGFzdEdseXBoSW5mbyB7Ci0gICAgU1ZHTGFzdEdseXBo
SW5mbygpCi0gICAgICAgIDogaXNWYWxpZChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9v
bCBpc1ZhbGlkOwotICAgIFN0cmluZyB1bmljb2RlOwotICAgIFN0cmluZyBnbHlwaE5hbWU7Ci19
OwotCi1ib29sIGlzVmVydGljYWxXcml0aW5nTW9kZShjb25zdCBTVkdSZW5kZXJTdHlsZSopOwot
ZmxvYXQgYWxpZ25tZW50QmFzZWxpbmVUb1NoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0
IFJlbmRlck9iamVjdCogdGV4dCwgY29uc3QgRm9udCYpOwotZmxvYXQgZ2x5cGhPcmllbnRhdGlv
blRvQW5nbGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUqLCBib29sIGlzVmVydGljYWxUZXh0LCBjb25z
dCBVQ2hhciYpOwotZmxvYXQgYXBwbHlHbHlwaEFkdmFuY2VBbmRTaGlmdFJlc3BlY3RpbmdPcmll
bnRhdGlvbihib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCBvcmllbnRhdGlvbkFuZ2xlLCBmbG9h
dCBnbHlwaFdpZHRoLCBmbG9hdCBnbHlwaEhlaWdodCwgY29uc3QgRm9udCYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNWR0NoYXImLCBmbG9h
dCYgeE9yaWVudGF0aW9uU2hpZnQsIGZsb2F0JiB5T3JpZW50YXRpb25TaGlmdCk7Ci1GbG9hdFBv
aW50IHRvcExlZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UoVmVjdG9yPFNWR0NoYXI+OjppdGVy
YXRvciBzdGFydCwgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBlbmQpOwotZmxvYXQgY3VtbXVs
YXRlZFdpZHRoT2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShTVkdJbmxpbmVCb3hDaGFyYWN0ZXJS
YW5nZSYpOwotZmxvYXQgY3VtbXVsYXRlZEhlaWdodE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2Uo
U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmKTsKLVRleHRSdW4gc3ZnVGV4dFJ1bkZvcklubGlu
ZVRleHRCb3goY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IElubGluZVRleHRCb3gqKTsKLQotZmxvYXQgY2FsY3VsYXRlQ1NTS2VybmluZyhTVkdFbGVt
ZW50KiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSopOwotYm9vbCBhcHBseVNWR0tlcm5pbmco
U1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYsIGNvbnN0IFJlbmRlclN0eWxlKiwgU1ZHTGFzdEdseXBo
SW5mbyYsIGNvbnN0IFN0cmluZyYgdW5pY29kZVN0cmluZywgY29uc3QgU3RyaW5nJiBnbHlwaE5h
bWUsIGJvb2wgaXNWZXJ0aWNhbFRleHQpOwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiA2ODg2NykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjk3LDggKzI5NywxMiBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyU3R5bGU6OmRpZmYoY29u
c3QgCiAgICAgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzID0gQ29udGV4dFNlbnNp
dGl2ZVByb3BlcnR5Tm9uZTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG1fc3ZnU3R5bGUg
IT0gb3RoZXItPm1fc3ZnU3R5bGUpCi0gICAgICAgIHJldHVybiBtX3N2Z1N0eWxlLT5kaWZmKG90
aGVyLT5tX3N2Z1N0eWxlLmdldCgpKTsKKyAgICBTdHlsZURpZmZlcmVuY2Ugc3ZnQ2hhbmdlID0g
U3R5bGVEaWZmZXJlbmNlRXF1YWw7CisgICAgaWYgKG1fc3ZnU3R5bGUgIT0gb3RoZXItPm1fc3Zn
U3R5bGUpIHsKKyAgICAgICAgc3ZnQ2hhbmdlID0gbV9zdmdTdHlsZS0+ZGlmZihvdGhlci0+bV9z
dmdTdHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChzdmdDaGFuZ2UgPT0gU3R5bGVEaWZmZXJlbmNl
TGF5b3V0KQorICAgICAgICAgICAgcmV0dXJuIHN2Z0NoYW5nZTsKKyAgICB9CiAjZW5kaWYKIAog
ICAgIGlmIChtX2JveC0+d2lkdGgoKSAhPSBvdGhlci0+bV9ib3gtPndpZHRoKCkgfHwKQEAgLTQ3
NSw2ICs0NzksMTUgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlclN0eWxlOjpkaWZmKGNvbnN0IAog
CiAgICAgaWYgKCh2aXNpYmlsaXR5KCkgPT0gQ09MTEFQU0UpICE9IChvdGhlci0+dmlzaWJpbGl0
eSgpID09IENPTExBUFNFKSkKICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsK
KyAgICAgICAgICAgICAgICAgICAgCisjaWYgRU5BQkxFKFNWRykKKyAgICAvLyBTVkdSZW5kZXJT
dHlsZTo6ZGlmZigpIG1pZ2h0IGhhdmUgcmV0dXJuZWQgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwg
ZWcuIGlmIGZpbGwgY2hhbmdlcy4KKyAgICAvLyBJZiBlZy4gdGhlIGZvbnQtc2l6ZSBjaGFuZ2Vk
IGF0IHRoZSBzYW1lIHRpbWUsIHdlJ3JlIG5vdCBhbGxvd2VkIHRvIHJldHVybiBTdHlsZURpZmZl
cmVuY2VSZXBhaW50LAorICAgIC8vIGJ1dCBoYXZlIHRvIHJldHVybiBTdHlsZURpZmZlcmVuY2VM
YXlvdXQsIHRoYXQncyB3aHkgIHRoaXMgaWYgYnJhbmNoIGNvbWVzIGFmdGVyIGFsbCBicmFuY2hl
cworICAgIC8vIHRoYXQgYXJlIHJlbGV2YW50IGZvciBTVkcgYW5kIG1pZ2h0IHJldHVybiBTdHls
ZURpZmZlcmVuY2VMYXlvdXQuCisgICAgaWYgKHN2Z0NoYW5nZSAhPSBTdHlsZURpZmZlcmVuY2VF
cXVhbCkKKyAgICAgICAgcmV0dXJuIHN2Z0NoYW5nZTsKKyNlbmRpZgogCiAgICAgLy8gTWFrZSBz
dXJlIHRoZXNlIGxlZnQvdG9wL3JpZ2h0L2JvdHRvbSBjaGVja3Mgc3RheSBiZWxvdyBhbGwgbGF5
b3V0IGNoZWNrcyBhbmQgYWJvdmUKICAgICAvLyBhbGwgdmlzaWJsZSBjaGVja3MuCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDY4ODY3KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzE0LDYgKzMxNCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc01hcmtlcnMoKSBjb25z
dCB7IHJldHVybiAhbWFya2VyU3RhcnRSZXNvdXJjZSgpLmlzRW1wdHkoKSB8fCAhbWFya2VyTWlk
UmVzb3VyY2UoKS5pc0VtcHR5KCkgfHwgIW1hcmtlckVuZFJlc291cmNlKCkuaXNFbXB0eSgpOyB9
CiAgICAgYm9vbCBoYXNTdHJva2UoKSBjb25zdCB7IHJldHVybiBzdHJva2VQYWludCgpLT5wYWlu
dFR5cGUoKSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9OT05FOyB9CiAgICAgYm9vbCBoYXNG
aWxsKCkgY29uc3QgeyByZXR1cm4gZmlsbFBhaW50KCktPnBhaW50VHlwZSgpICE9IFNWR1BhaW50
OjpTVkdfUEFJTlRUWVBFX05PTkU7IH0KKyAgICBib29sIGlzVmVydGljYWxXcml0aW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIHdyaXRpbmdNb2RlKCkgPT0gV01fVEJSTCB8fCB3cml0aW5nTW9kZSgp
ID09IFdNX1RCOyB9CiAKIHByb3RlY3RlZDoKICAgICAvLyBpbmhlcml0CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiA2ODg3
NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsMTkgKzM4LDQ1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UmVuZGVyU1ZHSW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiBuLCBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IHN0cikgCi0gICAgOiBSZW5kZXJUZXh0KG4sIHN0cikKK3N0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFwcGx5U1ZHV2hpdGVzcGFjZVJ1bGVzKFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gc3RyaW5nLCBib29sIHByZXNlcnZlV2hpdGVTcGFjZSkKK3sKKyAgICBpZiAo
cHJlc2VydmVXaGl0ZVNwYWNlKSB7CisgICAgICAgIC8vIFNwZWM6IFdoZW4geG1sOnNwYWNlPSJw
cmVzZXJ2ZSIsIHRoZSBTVkcgdXNlciBhZ2VudCB3aWxsIGRvIHRoZSBmb2xsb3dpbmcgdXNpbmcg
YQorICAgICAgICAvLyBjb3B5IG9mIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIgZGF0YSBjb250ZW50
LiBJdCB3aWxsIGNvbnZlcnQgYWxsIG5ld2xpbmUgYW5kIHRhYgorICAgICAgICAvLyBjaGFyYWN0
ZXJzIGludG8gc3BhY2UgY2hhcmFjdGVycy4gVGhlbiwgaXQgd2lsbCBkcmF3IGFsbCBzcGFjZSBj
aGFyYWN0ZXJzLCBpbmNsdWRpbmcKKyAgICAgICAgLy8gbGVhZGluZywgdHJhaWxpbmcgYW5kIG11
bHRpcGxlIGNvbnRpZ3VvdXMgc3BhY2UgY2hhcmFjdGVycy4KKyAgICAgICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IG5ld1N0cmluZyA9IHN0cmluZy0+cmVwbGFjZSgnXHQnLCAnICcpOworICAgICAgICBu
ZXdTdHJpbmcgPSBuZXdTdHJpbmctPnJlcGxhY2UoJ1xuJywgJyAnKTsKKyAgICAgICAgbmV3U3Ry
aW5nID0gbmV3U3RyaW5nLT5yZXBsYWNlKCdccicsICcgJyk7CisgICAgICAgIHJldHVybiBuZXdT
dHJpbmcucmVsZWFzZSgpOworICAgIH0KKworICAgIC8vIFNwZWM6IFdoZW4geG1sOnNwYWNlPSJk
ZWZhdWx0IiwgdGhlIFNWRyB1c2VyIGFnZW50IHdpbGwgZG8gdGhlIGZvbGxvd2luZyB1c2luZyBh
CisgICAgLy8gY29weSBvZiB0aGUgb3JpZ2luYWwgY2hhcmFjdGVyIGRhdGEgY29udGVudC4gRmly
c3QsIGl0IHdpbGwgcmVtb3ZlIGFsbCBuZXdsaW5lCisgICAgLy8gY2hhcmFjdGVycy4gVGhlbiBp
dCB3aWxsIGNvbnZlcnQgYWxsIHRhYiBjaGFyYWN0ZXJzIGludG8gc3BhY2UgY2hhcmFjdGVycy4K
KyAgICAvLyBUaGVuLCBpdCB3aWxsIHN0cmlwIG9mZiBhbGwgbGVhZGluZyBhbmQgdHJhaWxpbmcg
c3BhY2UgY2hhcmFjdGVycy4KKyAgICAvLyBUaGVuLCBhbGwgY29udGlndW91cyBzcGFjZSBjaGFy
YWN0ZXJzIHdpbGwgYmUgY29uc29saWRhdGVkLgorICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdT
dHJpbmcgPSBzdHJpbmctPnJlcGxhY2UoJ1xuJywgU3RyaW5nSW1wbDo6ZW1wdHkoKSk7CisgICAg
bmV3U3RyaW5nID0gbmV3U3RyaW5nLT5yZXBsYWNlKCdccicsIFN0cmluZ0ltcGw6OmVtcHR5KCkp
OworICAgIG5ld1N0cmluZyA9IG5ld1N0cmluZy0+cmVwbGFjZSgnXHQnLCAnICcpOworICAgIHJl
dHVybiBuZXdTdHJpbmcucmVsZWFzZSgpOworfQorCitSZW5kZXJTVkdJbmxpbmVUZXh0OjpSZW5k
ZXJTVkdJbmxpbmVUZXh0KE5vZGUqIG4sIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyaW5nKQor
ICAgIDogUmVuZGVyVGV4dChuLCBhcHBseVNWR1doaXRlc3BhY2VSdWxlcyhzdHJpbmcsIGZhbHNl
KSkKIHsKIH0KIAogdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0OjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIFJl
bmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICAKLSAgICAvLyBG
SVhNRTogU2hvdWxkIG9wdGltaXplIHRoaXMuCi0gICAgLy8gU1ZHIHRleHQgaXMgYWx3YXlzIHRy
YW5zZm9ybWVkLgotICAgIGlmIChSZWZQdHI8U3RyaW5nSW1wbD4gdGV4dFRvVHJhbnNmb3JtID0g
b3JpZ2luYWxUZXh0KCkpCi0gICAgICAgIHNldFRleHQodGV4dFRvVHJhbnNmb3JtLnJlbGVhc2Uo
KSwgdHJ1ZSk7CisKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBzdHlsZSgpOwor
ICAgIGlmICghbmV3U3R5bGUgfHwgbmV3U3R5bGUtPndoaXRlU3BhY2UoKSAhPSBQUkUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghb2xkU3R5bGUgfHwgb2xkU3R5bGUtPndoaXRlU3BhY2Uo
KSAhPSBQUkUpCisgICAgICAgIHNldFRleHQoYXBwbHlTVkdXaGl0ZXNwYWNlUnVsZXMob3JpZ2lu
YWxUZXh0KCksIHRydWUpLCB0cnVlKTsKIH0KIAogSW5saW5lVGV4dEJveCogUmVuZGVyU1ZHSW5s
aW5lVGV4dDo6Y3JlYXRlVGV4dEJveCgpCkBAIC04MCwyMCArMTA2LDIyIEBAIGJvb2wgUmVuZGVy
U1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnQKICAgICBBU1NFUlQocG9zaXRpb24gPj0gMCk7
CiAgICAgQVNTRVJUKHBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0TGVuZ3RoKCkpKTsK
IAorICAgIC8vIEVhY2ggPHRleHRQYXRoPiBlbGVtZW50IHN0YXJ0cyBhIG5ldyB0ZXh0IGNodW5r
LCByZWdhcmRsZXNzIG9mIGFueSB4L3kgdmFsdWVzLgorICAgIGlmICghcG9zaXRpb24gJiYgcGFy
ZW50KCktPmlzU1ZHVGV4dFBhdGgoKSAmJiAhcHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCiAgICAgaW50IGN1cnJlbnRQb3NpdGlvbiA9IDA7Ci0gICAgdW5zaWduZWQg
c2l6ZSA9IG1fYXR0cmlidXRlcy5jaGFyYWN0ZXJEYXRhVmFsdWVzKCkuc2l6ZSgpOworICAgIHVu
c2lnbmVkIHNpemUgPSBtX2F0dHJpYnV0ZXMudGV4dE1ldHJpY3NWYWx1ZXMoKS5zaXplKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlczo6Q2hhcmFjdGVyRGF0YSYgZGF0YSA9IG1fYXR0cmlidXRl
cy5jaGFyYWN0ZXJEYXRhVmFsdWVzKCkuYXQoaSk7CisgICAgICAgIGNvbnN0IFNWR1RleHRNZXRy
aWNzJiBtZXRyaWNzID0gbV9hdHRyaWJ1dGVzLnRleHRNZXRyaWNzVmFsdWVzKCkuYXQoaSk7CiAK
ICAgICAgICAgLy8gV2UgZm91bmQgdGhlIGRlc2lyZWQgY2hhcmFjdGVyLgogICAgICAgICBpZiAo
Y3VycmVudFBvc2l0aW9uID09IHBvc2l0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoaXNWZXJ0aWNh
bFdyaXRpbmdNb2RlKHN0eWxlKCktPnN2Z1N0eWxlKCkpKQotICAgICAgICAgICAgICAgIHJldHVy
biBtX2F0dHJpYnV0ZXMueVZhbHVlcygpLmF0KHBvc2l0aW9uKSAhPSBTVkdUZXh0TGF5b3V0QXR0
cmlidXRlczo6ZW1wdHlWYWx1ZSgpOwotCi0gICAgICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVz
LnhWYWx1ZXMoKS5hdChwb3NpdGlvbikgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5
VmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXMueFZhbHVlcygpLmF0KHBv
c2l0aW9uKSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpCisgICAgICAg
ICAgICAgICAgfHwgbV9hdHRyaWJ1dGVzLnlWYWx1ZXMoKS5hdChwb3NpdGlvbikgIT0gU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGN1
cnJlbnRQb3NpdGlvbiArPSBkYXRhLnNwYW5zQ2hhcmFjdGVyczsKKyAgICAgICAgY3VycmVudFBv
c2l0aW9uICs9IG1ldHJpY3MubGVuZ3RoKCk7CiAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24g
PiBwb3NpdGlvbikKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwMiwxMCArMTMwLDYx
IEBAIGJvb2wgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnQKICAgICAvLyBUaGF0
IG1lYW5zIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZGF0YSBkZXNjcmliZWQgYSBzaW5nbGUgZ2x5
cGgsIGNvbnNpc3Rpbmcgb2YgbXVsdGlwbGUgdW5pY29kZSBjaGFyYWN0ZXJzLgogICAgIC8vIFRo
ZSBjb25zZXF1ZW5jZSBpcyB0aGF0IHRoZSBkZXNpcmVkIGNoYXJhY3RlciBkb2VzIG5vdCBkZWZp
bmUgYSBuZXcgYWJzb2x1dGUgeC95IHBvc2l0aW9uLCBldmVuIGlmIHByZXNlbnQgaW4gdGhlIHgv
eSB0ZXN0LgogICAgIC8vIFRoaXMgY29kZSBpcyB0ZXN0ZWQgYnkgc3ZnL1czQy1TVkctMS4xL3Rl
eHQtdGV4dC0wNi10LnN2ZyAoYW5kIGRlc2NyaWJlZCBpbiBkZXRhaWwsIHdoeSB0aGlzIGluZmx1
ZW5jZXMgY2h1bmsgZGV0ZWN0aW9uKS4KLSAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9uID4gcG9z
aXRpb24pOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNW
R0lubGluZVRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQorewor
ICAgIGlmICghZmlyc3RUZXh0Qm94KCkgfHwgdGV4dExlbmd0aCgpID09IDApCisgICAgICAgIHJl
dHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9XTlNUUkVBTSk7CisKKyAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOworICAgIEFTU0VSVChzdHlsZSk7CisgICAgaW50
IGJhc2VsaW5lID0gc3R5bGUtPmZvbnQoKS5hc2NlbnQoKTsKKworICAgIFJlbmRlckJsb2NrKiBj
b250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKKyAgICBBU1NFUlQoY29u
dGFpbmluZ0Jsb2NrKTsKKworICAgIC8vIE1hcCBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBwb2lu
dCwgYXMgdGhlIGNoYXJhY3RlciBvcmlnaW5zIHN0b3JlZCBpbiB0aGUgdGV4dCBmcmFnbWVudHMg
dXNlIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludChw
b2ludCk7CisgICAgYWJzb2x1dGVQb2ludC5tb3ZlKGNvbnRhaW5pbmdCbG9jay0+eCgpLCBjb250
YWluaW5nQmxvY2stPnkoKSk7CisKKyAgICBmbG9hdCBjbG9zZXN0RGlzdGFuY2UgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CisgICAgZmxvYXQgY2xvc2VzdERpc3RhbmNlUG9z
aXRpb24gPSAwOworICAgIGNvbnN0IFNWR1RleHRGcmFnbWVudCogY2xvc2VzdERpc3RhbmNlRnJh
Z21lbnQgPSAwOworICAgIFNWR0lubGluZVRleHRCb3gqIGNsb3Nlc3REaXN0YW5jZUJveCA9IDA7
CisKKyAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJv
eCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICBBU1NFUlQoYm94LT5pc1NWR0lubGlu
ZVRleHRCb3goKSk7CisgICAgICAgIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBzdGF0aWNf
Y2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oYm94KTsKKyAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFn
bWVudD4mIGZyYWdtZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKworICAgICAgICB1
bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IGZyYWdtZW50cy5zaXplKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7CisgICAgICAg
ICAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOwor
ICAgICAgICAgICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdChmcmFnbWVudC54LCBmcmFnbWVudC55
IC0gYmFzZWxpbmUsIGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpOworICAgICAgICAg
ICAgaWYgKCFmcmFnbWVudC50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgICAg
IGZyYWdtZW50UmVjdCA9IGZyYWdtZW50LnRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7
CisKKyAgICAgICAgICAgIGZsb2F0IGRpc3RhbmNlID0gcG93ZihmcmFnbWVudFJlY3QueCgpIC0g
YWJzb2x1dGVQb2ludC54KCksIDIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93
ZihmcmFnbWVudFJlY3QueSgpICsgZnJhZ21lbnRSZWN0LmhlaWdodCgpIC8gMiAtIGFic29sdXRl
UG9pbnQueSgpLCAyKTsKKworICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3Rh
bmNlKSB7CisgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7CisgICAg
ICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlQm94ID0gdGV4dEJveDsKKyAgICAgICAgICAgICAg
ICBjbG9zZXN0RGlzdGFuY2VGcmFnbWVudCA9ICZmcmFnbWVudDsKKyAgICAgICAgICAgICAgICBj
bG9zZXN0RGlzdGFuY2VQb3NpdGlvbiA9IGZyYWdtZW50UmVjdC54KCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWNsb3Nlc3REaXN0YW5jZUZyYWdtZW50KQor
ICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOworCisg
ICAgaW50IG9mZnNldCA9IGNsb3Nlc3REaXN0YW5jZUJveC0+b2Zmc2V0Rm9yUG9zaXRpb25JbkZy
YWdtZW50KCpjbG9zZXN0RGlzdGFuY2VGcmFnbWVudCwgYWJzb2x1dGVQb2ludC54KCkgLSBjbG9z
ZXN0RGlzdGFuY2VQb3NpdGlvbiwgdHJ1ZSk7CisgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3Np
dGlvbihvZmZzZXQgKyBjbG9zZXN0RGlzdGFuY2VCb3gtPnN0YXJ0KCksIG9mZnNldCA+IDAgPyBW
UF9VUFNUUkVBTV9JRl9QT1NTSUJMRSA6IERPV05TVFJFQU0pOworfQorCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5oCShyZXZpc2lvbiA2ODg3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0lubGluZVRleHRCb3g7CisKIGNsYXNzIFJl
bmRlclNWR0lubGluZVRleHQgOiBwdWJsaWMgUmVuZGVyVGV4dCB7CiBwdWJsaWM6CiAgICAgUmVu
ZGVyU1ZHSW5saW5lVGV4dChOb2RlKiwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPik7CiAKICAgICBi
b29sIGNoYXJhY3RlclN0YXJ0c05ld1RleHRDaHVuayhpbnQgcG9zaXRpb24pIGNvbnN0OworCisg
ICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmIGxheW91dEF0dHJpYnV0ZXMoKSB7IHJldHVybiBt
X2F0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgbGF5b3V0
QXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgIHZvaWQgc3Rv
cmVMYXlvdXRBdHRyaWJ1dGVzKGNvbnN0IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzKSB7IG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7IH0KIAogcHJpdmF0ZToKQEAgLTUwLDYg
KzU1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSW5saW5lVGV4dCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIEludFJlY3QgbG9jYWxD
YXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSA9IDApOwogICAgIHZpcnR1YWwgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkgY29u
c3Q7CiAgICAgdmlydHVhbCBJbmxpbmVUZXh0Qm94KiBjcmVhdGVUZXh0Qm94KCk7CkBAIC01Nyw4
ICs2MywyMiBAQCBwcml2YXRlOgogICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzIG1fYXR0cmli
dXRlczsKIH07CiAKK2lubGluZSBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0b1JlbmRlclNWR0lubGlu
ZVRleHQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2Jq
ZWN0LT5pc1NWR0lubGluZVRleHQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNW
R0lubGluZVRleHQqPihvYmplY3QpOwogfQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKK2lubGlu
ZSBjb25zdCBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0b1JlbmRlclNWR0lubGluZVRleHQoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5p
c1NWR0lubGluZVRleHQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNW
R0lubGluZVRleHQqPihvYmplY3QpOworfQogCi0jZW5kaWYgLy8gIVJlbmRlclNWR0lubGluZVRl
eHRfaAorLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0
Lgordm9pZCB0b1JlbmRlclNWR0lubGluZVRleHQoY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCop
OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFJlbmRlclNWR0lubGlu
ZVRleHRfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2
aXNpb24gNjg4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJTVkdVUklSZWZlcmVu
Y2UuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0
YXRlLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtODQsNiArODUsNyBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAg
ICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwogICAgIH0KIAorICAg
IC8vIFBlcmZvcm0gU1ZHIHRleHQgbGF5b3V0IHBoYXNlIG9uZSAoc2VlIFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlciBmb3IgZGV0YWlscykuCiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyIGxheW91dEF0dHJpYnV0ZXNCdWlsZGVyOwogICAgIGxheW91dEF0dHJpYnV0ZXNC
dWlsZGVyLmJ1aWxkTGF5b3V0QXR0cmlidXRlc0ZvclRleHRTdWJ0cmVlKHRoaXMpOwogCkBAIC0x
NTMsNiArMTU1LDIzIEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdUZXh0Ojpw
b3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGVudHMpCit7CisgICAg
Um9vdElubGluZUJveCogcm9vdEJveCA9IGZpcnN0Um9vdEJveCgpOworICAgIGlmICghcm9vdEJv
eCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RSRUFNKTsK
KworICAgIEFTU0VSVChyb290Qm94LT5pc1NWR1Jvb3RJbmxpbmVCb3goKSk7CisgICAgQVNTRVJU
KCFyb290Qm94LT5uZXh0Um9vdEJveCgpKTsKKyAgICBBU1NFUlQoY2hpbGRyZW5JbmxpbmUoKSk7
CisKKyAgICBJbmxpbmVCb3gqIGNsb3Nlc3RCb3ggPSBzdGF0aWNfY2FzdDxTVkdSb290SW5saW5l
Qm94Kj4ocm9vdEJveCktPmNsb3Nlc3RMZWFmQ2hpbGRGb3JQb3NpdGlvbihwb2ludEluQ29udGVu
dHMpOworICAgIGlmICghY2xvc2VzdEJveCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQ
b3NpdGlvbigwLCBET1dOU1RSRUFNKTsKKworICAgIHJldHVybiBjbG9zZXN0Qm94LT5yZW5kZXJl
cigpLT5wb3NpdGlvbkZvclBvaW50KEludFBvaW50KHBvaW50SW5Db250ZW50cy54KCksIGNsb3Nl
c3RCb3gtPm1feSkpOworfQorCiB2b2lkIFJlbmRlclNWR1RleHQ6OmFic29sdXRlUXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mIHF1YWRzKQogewogICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1
dGVRdWFkKHN0cm9rZUJvdW5kaW5nQm94KCkpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuaAkocmV2aXNpb24gNjg4NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAg
ICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFj
dGlvbik7CisgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25z
dCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDY4ODc0KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMCArMjYsMjggQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorI2luY2x1
ZGUgIlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAK
K3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordm9pZCBTVkdJ
bmxpbmVGbG93Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludElu
Zm8pCit7CisgICAgQVNTRVJUKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7CisgICAgQVNTRVJU
KCFwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKTsKKworICAgIFBhaW50SW5m
byBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOworICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgeworICAg
ICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dEJveCgpKQorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGNoaWxkKS0+cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5k
KGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lRmxv
d0JveCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHSW5saW5lRmxvd0JveCo+KGNoaWxk
KS0+cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKGNoaWxkUGFpbnRJbmZvKTsKKyAgICB9Cit9CisK
IHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwg
aW50KQogewogICAgIEFTU0VSVChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91
bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pOwpAQCAtNDIsOCAr
NjAsMTIgQEAgdm9pZCBTVkdJbmxpbmVGbG93Qm94OjpwYWludChQYWludEluZm8mIAogICAgIGNo
aWxkUGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKIAogICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0
OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KGJveFJlbmRlcmVyLCBjaGlsZFBhaW50SW5mbykp
IHsKLSAgICAgICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKQorICAgICAgICBmb3IgKElubGluZUJveCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsK
KyAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpCisgICAgICAgICAg
ICAgICAgY29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcih0b1JlbmRlclNWR0lu
bGluZVRleHQoc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGNoaWxkKS0+dGV4dFJlbmRl
cmVyKCkpKTsKKwogICAgICAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJbmZvLCAwLCAw
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRl
clNWR0NvbnRlbnQoYm94UmVuZGVyZXIsIGNoaWxkUGFpbnRJbmZvLCBwYWludEluZm8uY29udGV4
dCk7CkBAIC01OCw2ICs4MCw2NCBAQCBJbnRSZWN0IFNWR0lubGluZUZsb3dCb3g6OmNhbGN1bGF0
ZUJvdW5kCiAgICAgcmV0dXJuIGNoaWxkUmVjdDsKIH0KIAordm9pZCBTVkdJbmxpbmVGbG93Qm94
Ojpjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKFJlbmRlclNWR0lubGluZVRl
eHQqIHRleHRSZW5kZXJlcikKK3sKKyAgICBBU1NFUlQodGV4dFJlbmRlcmVyKTsKKworICAgIE5v
ZGUqIG5vZGUgPSB0ZXh0UmVuZGVyZXItPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PmluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gdGV4dFJlbmRlcmVyLT5zdHlsZSgpOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSB0ZXh0UmVuZGVyZXItPmRvY3VtZW50KCk7CisgICAgVmVjdG9yPERv
Y3VtZW50TWFya2VyPiBtYXJrZXJzID0gZG9jdW1lbnQtPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5v
ZGUodGV4dFJlbmRlcmVyLT5ub2RlKCkpOworCisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPjo6
aXRlcmF0b3IgbWFya2VyRW5kID0gbWFya2Vycy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxEb2N1
bWVudE1hcmtlcj46Oml0ZXJhdG9yIG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigpOyBtYXJrZXJJ
dCAhPSBtYXJrZXJFbmQ7ICsrbWFya2VySXQpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciA9ICptYXJrZXJJdDsKKworICAgICAgICAvLyBTVkcgaXMgb25seSBpbnRlcmVz
c3RlZCBpbiB0aGUgVGV4dE1hdGNoIG1hcmtlciwgZm9yIG5vdy4KKyAgICAgICAgaWYgKG1hcmtl
ci50eXBlICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBGbG9hdFJlY3QgbWFya2VyUmVjdDsKKyAgICAgICAgZm9yIChJbmxpbmVU
ZXh0Qm94KiBib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJv
eC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICAgICAgQVNTRVJUKGJveC0+aXNTVkdJbmxpbmVU
ZXh0Qm94KCkpOworICAgICAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0YXRp
Y19jYXN0PFNWR0lubGluZVRleHRCb3gqPihib3gpOworCisgICAgICAgICAgICBpbnQgbWFya2Vy
U3RhcnRQb3NpdGlvbiA9IG1heDxpbnQ+KG1hcmtlci5zdGFydE9mZnNldCAtIHRleHRCb3gtPnN0
YXJ0KCksIDApOworICAgICAgICAgICAgaW50IG1hcmtlckVuZFBvc2l0aW9uID0gbWluPGludD4o
bWFya2VyLmVuZE9mZnNldCAtIHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKTsKKwor
ICAgICAgICAgICAgaWYgKG1hcmtlclN0YXJ0UG9zaXRpb24gPj0gbWFya2VyRW5kUG9zaXRpb24p
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGludCBmcmFnbWVudFN0
YXJ0UG9zaXRpb24gPSAwOworICAgICAgICAgICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAw
OworCisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRz
ID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOworICAgICAgICAgICAgdW5zaWduZWQgdGV4dEZy
YWdtZW50c1NpemUgPSBmcmFnbWVudHMuc2l6ZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworCisgICAg
ICAgICAgICAgICAgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gbWFya2VyU3RhcnRQb3NpdGlvbjsK
KyAgICAgICAgICAgICAgICBmcmFnbWVudEVuZFBvc2l0aW9uID0gbWFya2VyRW5kUG9zaXRpb247
CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Qm94LT5tYXBTdGFydEVuZFBvc2l0aW9uc0ludG9G
cmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdt
ZW50RW5kUG9zaXRpb24pKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgIEZsb2F0UmVjdCBmcmFnbWVudFJlY3QgPSB0ZXh0Qm94LT5zZWxlY3Rpb25SZWN0
Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50
RW5kUG9zaXRpb24sIHN0eWxlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZyYWdtZW50LnRyYW5z
Zm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZy
YWdtZW50LnRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7CisKKyAgICAgICAgICAgICAg
ICBtYXJrZXJSZWN0LnVuaXRlKGZyYWdtZW50UmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBkb2N1bWVudC0+bWFya2VycygpLT5zZXRSZW5kZXJlZFJlY3RGb3JNYXJr
ZXIobm9kZSwgbWFya2VyLCB0ZXh0UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQobWFya2Vy
UmVjdCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA2ODg3NCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0
OworCiBjbGFzcyBTVkdJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUZsb3dCb3ggewogcHVi
bGljOgogICAgIFNWR0lubGluZUZsb3dCb3goUmVuZGVyT2JqZWN0KiBvYmopCkBAIC0zNywxMyAr
MzksMTYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJ
bmxpbmVGbG93Qm94KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgaW50IHZp
cnR1YWxMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0OyB9CiAg
ICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGludCBoKSB7IG1fbG9naWNhbEhlaWdodCA9IGg7IH0K
IAorICAgIHZvaWQgcGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0
dWFsIEludFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0OwotICAgIHZvaWQgbGF5b3V0
Rmxvd0JveCgpOworCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RG
b3JSZW5kZXJlcihSZW5kZXJTVkdJbmxpbmVUZXh0Kik7CiAKIHByaXZhdGU6CiAgICAgaW50IG1f
bG9naWNhbEhlaWdodDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5jcHAJKHJldmlzaW9uIDY4ODc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsOSBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3gu
aCIKLSNpbmNsdWRlICJTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlIDxmbG9h
dC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC00MCwxNTQgKzM4LDE2NyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFNWR0lubGluZVRleHRCb3g6OlNWR0lubGluZVRleHRCb3goUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgOiBJbmxpbmVUZXh0Qm94KG9iamVjdCkKLSAgICAsIG1f
bG9naWNhbEhlaWdodCgwKQotICAgICwgbV9wYWludGluZ1Jlc291cmNlKDApCisgICAgLCBtX2hl
aWdodCgwKQogICAgICwgbV9wYWludGluZ1Jlc291cmNlTW9kZShBcHBseVRvRGVmYXVsdE1vZGUp
CisgICAgLCBtX3N0YXJ0c05ld1RleHRDaHVuayhmYWxzZSkKKyAgICAsIG1fcGFpbnRpbmdSZXNv
dXJjZSgwKQogewogfQogCi1TVkdSb290SW5saW5lQm94KiBTVkdJbmxpbmVUZXh0Qm94OjpzdmdS
b290SW5saW5lQm94KCkgY29uc3QKK2ludCBTVkdJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3Np
dGlvbihpbnQsIGJvb2wpIGNvbnN0CiB7Ci0gICAgLy8gRmluZCBhc3NvY2lhdGVkIHJvb3QgaW5s
aW5lIGJveAotICAgIElubGluZUZsb3dCb3gqIHBhcmVudEJveCA9IHBhcmVudCgpOworICAgIC8v
IFNWRyBkb2Vzbid0IHVzZSB0aGUgc3RhbmRhcmQgb2Zmc2V0IDwtPiBwb3NpdGlvbiBzZWxlY3Rp
b24gc3lzdGVtLCBhcyBpdCdzIG5vdCBzdWl0YWJsZSBmb3IgU1ZHcyBjb21wbGV4IG5lZWRzLgor
ICAgIC8vIHZlcnRpY2FsIHRleHQgc2VsZWN0aW9uLCBpbmxpbmUgYm94ZXMgc3Bhbm5pbmcgbXVs
dGlwbGUgbGluZXMgKGNvbnRyYXJ5IHRvIEhUTUwsIGV0Yy4pCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICB3aGlsZSAocGFyZW50Qm94ICYmICFwYXJl
bnRCb3gtPmlzUm9vdElubGluZUJveCgpKQotICAgICAgICBwYXJlbnRCb3ggPSBwYXJlbnRCb3gt
PnBhcmVudCgpOworaW50IFNWR0lubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uSW5GcmFn
bWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICBSZW5kZXJUZXh0KiB0ZXh0UmVu
ZGVyZXIgPSB0aGlzLT50ZXh0UmVuZGVyZXIoKTsKKyAgICBBU1NFUlQodGV4dFJlbmRlcmVyKTsK
IAotICAgIEFTU0VSVChwYXJlbnRCb3gpOwotICAgIEFTU0VSVChwYXJlbnRCb3gtPmlzUm9vdElu
bGluZUJveCgpKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0UmVuZGVyZXItPnN0eWxl
KCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIFRleHRSdW4gdGV4dFJ1bihjb25zdHJ1Y3RU
ZXh0UnVuKHN0eWxlLCBmcmFnbWVudCkpOwogCi0gICAgaWYgKCFwYXJlbnRCb3gtPmlzU1ZHUm9v
dElubGluZUJveCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBFdmVudHVhbGx5IGhhbmRs
ZSBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiLgorICAgIC8vIEZJWE1FOiBIYW5kbGUg
dmVydGljYWwgdGV4dC4KKyAgICBpZiAoIWZyYWdtZW50LnRyYW5zZm9ybS5pc0lkZW50aXR5KCkp
CisgICAgICAgIHRleHRSdW4uc2V0SG9yaXpvbnRhbEdseXBoU3RyZXRjaChuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGZyYWdtZW50LnRyYW5zZm9ybS54U2NhbGUoKSkpOwogCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFNWR1Jvb3RJbmxpbmVCb3gqPihwYXJlbnRCb3gpOworICAgIHJldHVybiBmcmFn
bWVudC5wb3NpdGlvbkxpc3RPZmZzZXQgLSBzdGFydCgpICsgc3R5bGUtPmZvbnQoKS5vZmZzZXRG
b3JQb3NpdGlvbih0ZXh0UnVuLCBwb3NpdGlvbiwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQog
Ci12b2lkIFNWR0lubGluZVRleHRCb3g6Om1lYXN1cmVDaGFyYWN0ZXIoUmVuZGVyU3R5bGUqIHN0
eWxlLCBpbnQgcG9zaXRpb24sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUs
IFN0cmluZyYgdW5pY29kZVN0cmluZywgZmxvYXQmIGdseXBoV2lkdGgsIGZsb2F0JiBnbHlwaEhl
aWdodCkgY29uc3QKK2ludCBTVkdJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKHN0eWxlKTsKKyAgICAvLyBTVkcgZG9lc24ndCB1c2UgdGhl
IG9mZnNldCA8LT4gcG9zaXRpb24gc2VsZWN0aW9uIHN5c3RlbS4gCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICBpbnQgb2Zmc2V0ID0gIWlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IGVuZCgpIC0gcG9zaXRpb24gOiBzdGFydCgpICsgcG9zaXRpb247
Ci0gICAgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGUgPSBsZW4oKSAtIHBvc2l0aW9uIC0gMTsKLSAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHRSZW5kZXJlcigpLT5jaGFyYWN0ZXJzKCk7
CitGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVu
dChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50
IGVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgQVNTRVJUKHN0YXJ0UG9z
aXRpb24gPCBlbmRQb3NpdGlvbik7CiAKICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZv
bnQoKTsKLSAgICBnbHlwaFdpZHRoID0gZm9udC5mbG9hdFdpZHRoKHN2Z1RleHRSdW5Gb3JJbmxp
bmVUZXh0Qm94KGNoYXJhY3RlcnMgKyBvZmZzZXQsIDEsIHN0eWxlLCB0aGlzKSwgZXh0cmFDaGFy
c0F2YWlsYWJsZSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKLSAgICBnbHlwaEhlaWdodCA9
IGZvbnQuaGVpZ2h0KCk7Ci0KLSAgICAvLyBUaGUgdW5pY29kZVN0cmluZyAvIGdseXBoTmFtZSBw
YWlyIGlzIG5lZWRlZCBmb3Iga2VybmluZyBjYWxjdWxhdGlvbnMuCi0gICAgdW5pY29kZVN0cmlu
ZyA9IFN0cmluZyhjaGFyYWN0ZXJzICsgb2Zmc2V0LCBjaGFyc0NvbnN1bWVkKTsKKyAgICBGbG9h
dFBvaW50IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQueSAtIGZvbnQuYXNjZW50KCkp
OworICAgIHJldHVybiBmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0cnVjdFRleHRSdW4o
c3R5bGUsIGZyYWdtZW50KSwgdGV4dE9yaWdpbiwgZnJhZ21lbnQuaGVpZ2h0LCBzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbik7CiB9CiAKLWludCBTVkdJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQ
b3NpdGlvbihpbnQgeENvb3JkaW5hdGUsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
CitJbnRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QoaW50LCBpbnQsIGludCBz
dGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCiB7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRD
aHVua1BhcnQuaXNWYWxpZCgpKTsKLSAgICBmbG9hdCB4ID0geENvb3JkaW5hdGU7CisgICAgaW50
IGJveFN0YXJ0ID0gc3RhcnQoKTsKKyAgICBzdGFydFBvc2l0aW9uID0gbWF4KHN0YXJ0UG9zaXRp
b24gLSBib3hTdGFydCwgMCk7CisgICAgZW5kUG9zaXRpb24gPSBtaW4oZW5kUG9zaXRpb24gLSBi
b3hTdGFydCwgc3RhdGljX2Nhc3Q8aW50PihsZW4oKSkpOworICAgIGlmIChzdGFydFBvc2l0aW9u
ID49IGVuZFBvc2l0aW9uKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgUmVuZGVy
VGV4dCogdGV4dFJlbmRlcmVyID0gdGhpcy0+dGV4dFJlbmRlcmVyKCk7Ci0gICAgQVNTRVJUKHRl
eHRSZW5kZXJlcik7CisgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRleHRSZW5kZXJlcigpOworICAg
IEFTU0VSVCh0ZXh0KTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRSZW5kZXJlci0+
c3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwogICAgIEFT
U0VSVChzdHlsZSk7CiAKLSAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gdGV4dFJl
bmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKLSAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrKTsK
LQotICAgIC8vIE1vdmUgaW5jb21pbmcgcmVsYXRpdmUgeCBwb3NpdGlvbiB0byBhYnNvbHV0ZSBw
b3NpdGlvbiwgYXMgdGhlIGNoYXJhY3RlciBvcmlnaW5zIHN0b3JlZCBpbiB0aGUgY2h1bmsgcGFy
dHMgdXNlIGFic29sdXRlIGNvb3JkaW5hdGVzCi0gICAgeCArPSBjb250YWluaW5nQmxvY2stPngo
KTsKLQotICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdGV4dCBjaHVuayBwYXJ0IGlzIGhpdAotICAg
IFNWR1RleHRDaHVua1BhcnQgaGl0UGFydDsKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdDsK
KyAgICBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKKyAgICBpbnQgZnJhZ21lbnRFbmRQ
b3NpdGlvbiA9IDA7CiAKLSAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fc3ZnVGV4dENodW5rUGFydHMuZW5kKCk7Ci0gICAgZm9yIChWZWN0
b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdmdUZXh0Q2h1bmtQ
YXJ0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgU1ZHVGV4dENo
dW5rUGFydCYgcGFydCA9ICppdDsKKyAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1f
dGV4dEZyYWdtZW50cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRG
cmFnbWVudHNTaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFn
bWVudCA9IG1fdGV4dEZyYWdtZW50cy5hdChpKTsKKworICAgICAgICBmcmFnbWVudFN0YXJ0UG9z
aXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgICAgICBmcmFnbWVudEVuZFBvc2l0aW9uID0gZW5k
UG9zaXRpb247CisgICAgICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRD
b29yZGluYXRlcyhmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBv
c2l0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIC8vIENoZWNrIHdoZXRo
ZXIgd2UncmUgcGFzdCB0aGUgaGl0IHBhcnQuCi0gICAgICAgIGlmICh4IDwgcGFydC5maXJzdENo
YXJhY3Rlci0+eCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBGbG9hdFJlY3QgZnJhZ21l
bnRSZWN0ID0gc2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChmcmFnbWVudCwgZnJhZ21lbnRT
dGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uLCBzdHlsZSk7CisgICAgICAgIGlmICgh
ZnJhZ21lbnQudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAgIGZyYWdtZW50UmVj
dCA9IGZyYWdtZW50LnRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7CiAKLSAgICAgICAg
aGl0UGFydCA9IHBhcnQ7CisgICAgICAgIHNlbGVjdGlvblJlY3QudW5pdGUoZnJhZ21lbnRSZWN0
KTsKICAgICB9CiAKLSAgICAvLyBJZiB3ZSBkaWQgbm90IGhpdCBhbnl0aGluZywganVzdCBleGl0
LgotICAgIGlmICghaGl0UGFydC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Ly8gQmVmb3JlIGNhbGxpbmcgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oKSwgc3VidHJhY3QgdGhl
IHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIKLSAgICAvLyBpbiB0aGUgaGl0
IHRleHQgY2h1bmsgcGFydCwgdG8gcGFzcyBpbiBjb29yZGluYXRlcywgd2hpY2ggYXJlIHJlbGF0
aXZlIHRvIHRoZSB0ZXh0IGNodW5rIHBhcnQsIGFzCi0gICAgLy8gY29uc3RydWN0VGV4dFJ1bigp
IG9ubHkgYnVpbGRzIGEgVGV4dFJ1biBmb3IgdGhlIGN1cnJlbnQgY2h1bmsgcGFydCwgbm90IHRo
ZSB3aG9sZSBpbmxpbmUgdGV4dCBib3guCi0gICAgeCAtPSBoaXRQYXJ0LmZpcnN0Q2hhcmFjdGVy
LT54OworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpOworfQogCi0g
ICAgbV9jdXJyZW50Q2h1bmtQYXJ0ID0gaGl0UGFydDsKLSAgICBUZXh0UnVuIHRleHRSdW4oY29u
c3RydWN0VGV4dFJ1bihzdHlsZSkpOwotICAgIG1fY3VycmVudENodW5rUGFydCA9IFNWR1RleHRD
aHVua1BhcnQoKTsKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3Jv
dW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIEFTU0VSVChwYWludEluZm8uc2hvdWxk
UGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkpKTsKKyAgICBBU1NFUlQocGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
U2VsZWN0aW9uKTsKKyAgICBBU1NFUlQodHJ1bmNhdGlvbigpID09IGNOb1RydW5jYXRpb24pOwog
Ci0gICAgLy8gRXZlbnR1YWxseSBoYW5kbGUgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhz
Ii4KLSAgICAvLyBGSVhNRTogTmVlZCB0byByZXZpc2l0IHRoZSB3aG9sZSBvZmZzZXRGb3JQb3Np
dGlvbiBjb25jZXB0IGZvciB2ZXJ0aWNhbCB0ZXh0IHNlbGVjdGlvbi4KLSAgICBpZiAoIW1fY2h1
bmtUcmFuc2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCi0gICAgICAgIHRleHRSdW4uc2V0SG9yaXpv
bnRhbEdseXBoU3RyZXRjaChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fY2h1bmtUcmFuc2Zvcm1h
dGlvbi5hKCkpKTsKKyAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBoaXRQYXJ0Lm9mZnNldCAr
IHN0eWxlLT5mb250KCkub2Zmc2V0Rm9yUG9zaXRpb24odGV4dFJ1biwgeCwgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpOwotfQorICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQo
KS0+cmVuZGVyZXIoKTsKKyAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOworICAgIEFTU0VSVCgh
cGFyZW50UmVuZGVyZXItPmRvY3VtZW50KCktPnByaW50aW5nKCkpOwogCi1pbnQgU1ZHSW5saW5l
VGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50KSBjb25zdAotewotICAgIC8vIFNWRyBkb2Vz
bid0IHVzZSB0aGUgb2Zmc2V0IDwtPiBwb3NpdGlvbiBzZWxlY3Rpb24gc3lzdGVtLiAKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KKyAgICAvLyBEZXRlcm1pbmUg
d2hldGhlciBvciBub3Qgd2UncmUgc2VsZWN0ZWQuCisgICAgYm9vbCBwYWludFNlbGVjdGVkVGV4
dE9ubHkgPSBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbjsKKyAgICBib29s
IGhhc1NlbGVjdGlvbiA9IHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25Ob25lOworICAgIGlmICghaGFzU2VsZWN0aW9uIHx8IHBhaW50U2VsZWN0ZWRUZXh0T25seSkK
KyAgICAgICAgcmV0dXJuOwogCi1GbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9u
UmVjdEZvclRleHRDaHVua1BhcnQoY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCwgaW50IHBh
cnRTdGFydFBvcywgaW50IHBhcnRFbmRQb3MsIFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICAv
LyBNYXAgc3RhcnRQb3MvZW5kUG9zIHBvc2l0aW9ucyBpbnRvIGNodW5rIHBhcnQKLSAgICBtYXBT
dGFydEVuZFBvc2l0aW9uc0ludG9DaHVua1BhcnRDb29yZGluYXRlcyhwYXJ0U3RhcnRQb3MsIHBh
cnRFbmRQb3MsIHBhcnQpOworICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyKCkt
PnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworICAgIGlmICghYmFja2dyb3VuZENvbG9yLmlz
VmFsaWQoKSB8fCAhYmFja2dyb3VuZENvbG9yLmFscGhhKCkpCisgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChwYXJ0U3RhcnRQb3MgPj0gcGFydEVuZFBvcykKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLT5zdHlsZSgp
OworICAgIEFTU0VSVChzdHlsZSk7CiAKLSAgICAvLyBTZXQgY3VycmVudCBjaHVuayBwYXJ0LCBz
byBjb25zdHJ1Y3RUZXh0UnVuKCkgd29ya3MgcHJvcGVybHkuCi0gICAgbV9jdXJyZW50Q2h1bmtQ
YXJ0ID0gcGFydDsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+
c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOwogCi0gICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlLT5mb250KCk7Ci0gICAgVmVjdG9yPFNWR0NoYXI+Ojpjb25zdF9pdGVyYXRvciBj
aGFyYWN0ZXIgPSBwYXJ0LmZpcnN0Q2hhcmFjdGVyOwotICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdp
bihjaGFyYWN0ZXItPngsIGNoYXJhY3Rlci0+eSAtIGZvbnQuYXNjZW50KCkpOworICAgIGJvb2wg
aGFzRmlsbCA9IHN2Z1N0eWxlLT5oYXNGaWxsKCk7CisgICAgYm9vbCBoYXNTdHJva2UgPSBzdmdT
dHlsZS0+aGFzU3Ryb2tlKCk7CiAKLSAgICBGbG9hdFJlY3QgcGFydFJlY3QoZm9udC5zZWxlY3Rp
b25SZWN0Rm9yVGV4dChjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlKSwgdGV4dE9yaWdpbiwgcGFydC5o
ZWlnaHQsIHBhcnRTdGFydFBvcywgcGFydEVuZFBvcykpOwotICAgIG1fY3VycmVudENodW5rUGFy
dCA9IFNWR1RleHRDaHVua1BhcnQoKTsKKyAgICBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUg
PSBzdHlsZTsKKyAgICBpZiAoaGFzU2VsZWN0aW9uKSB7CisgICAgICAgIHNlbGVjdGlvblN0eWxl
ID0gcGFyZW50UmVuZGVyZXItPmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTik7CisgICAg
ICAgIGlmIChzZWxlY3Rpb25TdHlsZSkgeworICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN2Z1NlbGVjdGlvblN0eWxlID0gc2VsZWN0aW9uU3R5bGUtPnN2Z1N0eWxlKCk7CisgICAg
ICAgICAgICBBU1NFUlQoc3ZnU2VsZWN0aW9uU3R5bGUpOwogCi0gICAgcmV0dXJuIGNoYXJhY3Rl
ci0+Y2hhcmFjdGVyVHJhbnNmb3JtKCkubWFwUmVjdChwYXJ0UmVjdCk7Ci19CisgICAgICAgICAg
ICBpZiAoIWhhc0ZpbGwpCisgICAgICAgICAgICAgICAgaGFzRmlsbCA9IHN2Z1NlbGVjdGlvblN0
eWxlLT5oYXNGaWxsKCk7CisgICAgICAgICAgICBpZiAoIWhhc1N0cm9rZSkKKyAgICAgICAgICAg
ICAgICBoYXNTdHJva2UgPSBzdmdTZWxlY3Rpb25TdHlsZS0+aGFzU3Ryb2tlKCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgc2VsZWN0aW9uU3R5bGUgPSBzdHlsZTsKKyAgICB9CiAKLUlu
dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdChpbnQsIGludCwgaW50IHN0YXJ0
UG9zLCBpbnQgZW5kUG9zKQotewotICAgIEFTU0VSVCghbV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFs
aWQoKSk7CisgICAgaW50IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uOworICAgIHNlbGVjdGlv
blN0YXJ0RW5kKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAotICAgIGludCBib3hTdGFy
dCA9IHN0YXJ0KCk7Ci0gICAgc3RhcnRQb3MgPSBtYXgoc3RhcnRQb3MgLSBib3hTdGFydCwgMCk7
Ci0gICAgZW5kUG9zID0gbWluKGVuZFBvcyAtIGJveFN0YXJ0LCBzdGF0aWNfY2FzdDxpbnQ+KGxl
bigpKSk7CisgICAgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7CisgICAgaW50IGZyYWdt
ZW50RW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNTaXplID0gbV90
ZXh0RnJhZ21lbnRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZy
YWdtZW50c1NpemU7ICsraSkgeworICAgICAgICBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0g
bV90ZXh0RnJhZ21lbnRzLmF0KGkpOworICAgICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJj
ZSk7CiAKLSAgICBpZiAoc3RhcnRQb3MgPj0gZW5kUG9zKQotICAgICAgICByZXR1cm4gSW50UmVj
dCgpOworICAgICAgICBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAg
ICAgICBmcmFnbWVudEVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb247CisgICAgICAgIGlmICghbWFw
U3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwgZnJhZ21l
bnRTdGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgUmVuZGVyVGV4dCogdGV4dCA9IHRleHRSZW5kZXJlcigpOwotICAgIEFTU0VS
VCh0ZXh0KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKIAotICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKKyAgICAg
ICAgaWYgKCFmcmFnbWVudC50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShmcmFnbWVudC50cmFuc2Zvcm0pOwogCi0gICAgRmxv
YXRSZWN0IHNlbGVjdGlvblJlY3Q7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxs
Q29sb3IoYmFja2dyb3VuZENvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoZnJh
Z21lbnQsIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbiwgc3R5bGUp
LCBiYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5jb2xvclNwYWNlKCkpOwogCi0gICAgLy8gRmlndXJl
IG91dCB3aGljaCB0ZXh0IGNodW5rIHBhcnQgaXMgaGl0Ci0gICAgY29uc3QgVmVjdG9yPFNWR1Rl
eHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N2Z1RleHRDaHVua1BhcnRzLmVu
ZCgpOwotICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fc3ZnVGV4dENodW5rUGFydHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBzZWxlY3Rpb25SZWN0LnVuaXRlKHNlbGVjdGlvblJlY3RGb3JUZXh0Q2h1bmtQYXJ0KCppdCwg
c3RhcnRQb3MsIGVuZFBvcywgc3R5bGUpKTsKLQotICAgIC8vIFJlc2VwZWN0IHBvc3NpYmxlIGNo
dW5rIHRyYW5zZm9ybWF0aW9uCi0gICAgaWYgKG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5pc0lkZW50
aXR5KCkpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpOwor
ICAgICAgICBtX3BhaW50aW5nUmVzb3VyY2VNb2RlID0gQXBwbHlUb0RlZmF1bHRNb2RlOworICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworICAgIH0KIAotICAgIHJldHVybiBl
bmNsb3NpbmdJbnRSZWN0KG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5tYXBSZWN0KHNlbGVjdGlvblJl
Y3QpKTsKKyAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7CiB9CiAKIHZvaWQgU1ZHSW5s
aW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQpAQCAtMjA1
LDYgKzIxNiwxMSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgCiAg
ICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5kZXJlcigpOwog
ICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CiAKKyAgICBib29sIHBhaW50U2VsZWN0ZWRUZXh0
T25seSA9IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uOworICAgIGJvb2wg
aGFzU2VsZWN0aW9uID0gIXBhcmVudFJlbmRlcmVyLT5kb2N1bWVudCgpLT5wcmludGluZygpICYm
IHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOworICAgIGlm
ICghaGFzU2VsZWN0aW9uICYmIHBhaW50U2VsZWN0ZWRUZXh0T25seSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcGFyZW50UmVuZGVyZXItPnN0eWxlKCk7CiAg
ICAgQVNTRVJUKHN0eWxlKTsKIApAQCAtMjEzLDEzICsyMjksNiBAQCB2b2lkIFNWR0lubGluZVRl
eHRCb3g6OnBhaW50KFBhaW50SW5mbyYgCiAKICAgICBib29sIGhhc0ZpbGwgPSBzdmdTdHlsZS0+
aGFzRmlsbCgpOwogICAgIGJvb2wgaGFzU3Ryb2tlID0gc3ZnU3R5bGUtPmhhc1N0cm9rZSgpOwot
ICAgIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gcGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VTZWxlY3Rpb247Ci0KLSAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UncmUg
c2VsZWN0ZWQuCi0gICAgYm9vbCBpc1ByaW50aW5nID0gcGFyZW50UmVuZGVyZXItPmRvY3VtZW50
KCktPnByaW50aW5nKCk7Ci0gICAgYm9vbCBoYXNTZWxlY3Rpb24gPSAhaXNQcmludGluZyAmJiBz
ZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKLSAgICBpZiAo
IWhhc1NlbGVjdGlvbiAmJiBwYWludFNlbGVjdGVkVGV4dE9ubHkpCi0gICAgICAgIHJldHVybjsK
IAogICAgIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSA9IHN0eWxlOwogICAgIGlmIChoYXNT
ZWxlY3Rpb24pIHsKQEAgLTIzNiw2MiArMjQ1LDQzIEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6
cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgICAgIHNlbGVjdGlvblN0eWxlID0gc3R5bGU7CiAg
ICAgfQogCi0gICAgLy8gQ29tcHV0ZSB0ZXh0IG1hdGNoIG1hcmtlciByZWN0cy4gSXQgbmVlZHMg
dG8gdHJhdmVyc2UgYWxsIHRleHQgY2h1bmsgcGFydHMgdG8gZmlndXJlCi0gICAgLy8gb3V0IHRo
ZSB1bmlvbiBzZWxlY3Rpb24gcmVjdCBvZiBhbGwgdGV4dCBjaHVuayBwYXJ0cyB0aGF0IGNvbnRy
aWJ1dGUgdG8gdGhlIHNlbGVjdGlvbi4KLSAgICBjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdChz
dHlsZSk7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRDaHVua1BhcnQuaXNWYWxpZCgpKTsKLQotICAg
IGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9z
dmdUZXh0Q2h1bmtQYXJ0cy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N2Z1RleHRDaHVua1BhcnRzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNTaXplID0gbV90ZXh0RnJh
Z21lbnRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50
c1NpemU7ICsraSkgeworICAgICAgICBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gbV90ZXh0
RnJhZ21lbnRzLmF0KGkpOwogICAgICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7CiAK
LSAgICAgICAgLy8gY29uc3RydWN0VGV4dFJ1bigpIHVzZXMgdGhlIGN1cnJlbnQgY2h1bmsgcGFy
dCB0byBmaWd1cmUgb3V0IHdoYXQgdGV4dCB0byByZW5kZXIuCi0gICAgICAgIG1fY3VycmVudENo
dW5rUGFydCA9ICppdDsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKIAotICAg
ICAgICAvLyBQcmVwYXJlIGNvbnRleHQgYW5kIGRyYXcgdGV4dAotICAgICAgICBpZiAoIW1fY2h1
bmtUcmFuc2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCi0gICAgICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+Y29uY2F0Q1RNKG1fY2h1bmtUcmFuc2Zvcm1hdGlvbik7Ci0KLSAgICAgICAgVmVjdG9y
PFNWR0NoYXI+Ojpjb25zdF9pdGVyYXRvciBmaXJzdENoYXJhY3RlciA9IG1fY3VycmVudENodW5r
UGFydC5maXJzdENoYXJhY3RlcjsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGNoYXJhY3RlclRy
YW5zZm9ybSA9IGZpcnN0Q2hhcmFjdGVyLT5jaGFyYWN0ZXJUcmFuc2Zvcm0oKTsKLSAgICAgICAg
aWYgKCFjaGFyYWN0ZXJUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmNvbmNhdENUTShjaGFyYWN0ZXJUcmFuc2Zvcm0pOwotCi0gICAgICAgIEZs
b2F0UG9pbnQgdGV4dE9yaWdpbihmaXJzdENoYXJhY3Rlci0+eCwgZmlyc3RDaGFyYWN0ZXItPnkp
OwotCi0gICAgICAgIC8vIERyYXcgYmFja2dyb3VuZCBvbmNlIChub3QgaW4gYm90aCBmaWxsL3N0
cm9rZSBwaGFzZXMpCi0gICAgICAgIGlmICghaXNQcmludGluZyAmJiAhcGFpbnRTZWxlY3RlZFRl
eHRPbmx5ICYmIGhhc1NlbGVjdGlvbikKLSAgICAgICAgICAgIHBhaW50U2VsZWN0aW9uKHBhaW50
SW5mby5jb250ZXh0LCB0ZXh0T3JpZ2luLCBzdHlsZSk7CisgICAgICAgIGlmICghZnJhZ21lbnQu
dHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5j
b25jYXRDVE0oZnJhZ21lbnQudHJhbnNmb3JtKTsKIAogICAgICAgICAvLyBTcGVjOiBBbGwgdGV4
dCBkZWNvcmF0aW9ucyBleGNlcHQgbGluZS10aHJvdWdoIHNob3VsZCBiZSBkcmF3biBiZWZvcmUg
dGhlIHRleHQgaXMgZmlsbGVkIGFuZCBzdHJva2VkOyB0aHVzLCB0aGUgdGV4dCBpcyByZW5kZXJl
ZCBvbiB0b3Agb2YgdGhlc2UgZGVjb3JhdGlvbnMuCiAgICAgICAgIGludCBkZWNvcmF0aW9ucyA9
IHN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgICAgICBpZiAoZGVjb3JhdGlv
bnMgJiBVTkRFUkxJTkUpCi0gICAgICAgICAgICBwYWludERlY29yYXRpb24ocGFpbnRJbmZvLmNv
bnRleHQsIHRleHRPcmlnaW4sIFVOREVSTElORSwgaGFzU2VsZWN0aW9uKTsKKyAgICAgICAgICAg
IHBhaW50RGVjb3JhdGlvbihwYWludEluZm8uY29udGV4dCwgVU5ERVJMSU5FLCBmcmFnbWVudCk7
CiAgICAgICAgIGlmIChkZWNvcmF0aW9ucyAmIE9WRVJMSU5FKQotICAgICAgICAgICAgcGFpbnRE
ZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0LCB0ZXh0T3JpZ2luLCBPVkVSTElORSwgaGFzU2Vs
ZWN0aW9uKTsKKyAgICAgICAgICAgIHBhaW50RGVjb3JhdGlvbihwYWludEluZm8uY29udGV4dCwg
T1ZFUkxJTkUsIGZyYWdtZW50KTsKIAogICAgICAgICAvLyBGaWxsIHRleHQKICAgICAgICAgaWYg
KGhhc0ZpbGwpIHsKICAgICAgICAgICAgIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUgPSBBcHBseVRv
RmlsbE1vZGUgfCBBcHBseVRvVGV4dE1vZGU7Ci0gICAgICAgICAgICBwYWludFRleHQocGFpbnRJ
bmZvLmNvbnRleHQsIHRleHRPcmlnaW4sIHN0eWxlLCBzZWxlY3Rpb25TdHlsZSwgaGFzU2VsZWN0
aW9uLCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOworICAgICAgICAgICAgcGFpbnRUZXh0KHBhaW50
SW5mby5jb250ZXh0LCBzdHlsZSwgc2VsZWN0aW9uU3R5bGUsIGZyYWdtZW50LCBoYXNTZWxlY3Rp
b24sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTdHJv
a2UgdGV4dAogICAgICAgICBpZiAoaGFzU3Ryb2tlKSB7CiAgICAgICAgICAgICBtX3BhaW50aW5n
UmVzb3VyY2VNb2RlID0gQXBwbHlUb1N0cm9rZU1vZGUgfCBBcHBseVRvVGV4dE1vZGU7Ci0gICAg
ICAgICAgICBwYWludFRleHQocGFpbnRJbmZvLmNvbnRleHQsIHRleHRPcmlnaW4sIHN0eWxlLCBz
ZWxlY3Rpb25TdHlsZSwgaGFzU2VsZWN0aW9uLCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOworICAg
ICAgICAgICAgcGFpbnRUZXh0KHBhaW50SW5mby5jb250ZXh0LCBzdHlsZSwgc2VsZWN0aW9uU3R5
bGUsIGZyYWdtZW50LCBoYXNTZWxlY3Rpb24sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBTcGVjOiBMaW5lLXRocm91Z2ggc2hvdWxkIGJlIGRyYXduIGFm
dGVyIHRoZSB0ZXh0IGlzIGZpbGxlZCBhbmQgc3Ryb2tlZDsgdGh1cywgdGhlIGxpbmUtdGhyb3Vn
aCBpcyByZW5kZXJlZCBvbiB0b3Agb2YgdGhlIHRleHQuCiAgICAgICAgIGlmIChkZWNvcmF0aW9u
cyAmIExJTkVfVEhST1VHSCkKLSAgICAgICAgICAgIHBhaW50RGVjb3JhdGlvbihwYWludEluZm8u
Y29udGV4dCwgdGV4dE9yaWdpbiwgTElORV9USFJPVUdILCBoYXNTZWxlY3Rpb24pOworICAgICAg
ICAgICAgcGFpbnREZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0LCBMSU5FX1RIUk9VR0gsIGZy
YWdtZW50KTsKIAogICAgICAgICBtX3BhaW50aW5nUmVzb3VyY2VNb2RlID0gQXBwbHlUb0RlZmF1
bHRNb2RlOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIH0KIAot
ICAgIG1fY3VycmVudENodW5rUGFydCA9IFNWR1RleHRDaHVua1BhcnQoKTsKICAgICBBU1NFUlQo
IW1fcGFpbnRpbmdSZXNvdXJjZSk7CiB9CiAKQEAgLTM1MCw4OCArMzQwLDYyIEBAIHZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ28KICNlbmRpZgogfQogCi1UZXh0UnVuIFNW
R0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAotewotICAgIEFTU0VSVChtX2N1cnJlbnRDaHVua1BhcnQuaXNWYWxpZCgpKTsKLSAgICByZXR1
cm4gc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hh
cmFjdGVycygpICsgc3RhcnQoKSArIG1fY3VycmVudENodW5rUGFydC5vZmZzZXQsIG1fY3VycmVu
dENodW5rUGFydC5sZW5ndGgsIHN0eWxlLCB0aGlzKTsKLX0KLQotdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9DaHVua1BhcnRDb29yZGluYXRlcyhpbnQmIHN0
YXJ0UG9zLCBpbnQmIGVuZFBvcywgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkgY29uc3QK
K1RleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7Ci0gICAgaWYg
KHN0YXJ0UG9zID49IGVuZFBvcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGFrZSA8dGV4
dCB4PSIxMCA1MCAxMDAiPkFCQzwvdGV4dD4gYXMgZXhhbXBsZS4gV2UncmUgY2FsbGVkIHRocmVl
IHRpbWVzIGZyb20gcGFpbnQoKSwgYmVjYXVzZSBhbGwgYWJzb2x1dGUgcG9zaXRpb25lZAotICAg
IC8vIGNoYXJhY3RlcnMgYXJlIGRyYXduIG9uIHRoZWlyIG93bi4gRm9yIGVhY2ggb2YgdGhlbSB3
ZSB3YW50IHRvIGZpbmQgb3V0IHdoZWh0ZXIgaXQncyBzZWxlY3RlZC4gc3RhcnRQb3M9MCwgZW5k
UG9zPTEKLSAgICAvLyBjb3VsZCBtZWFuIEEsIEIgb3IgQyBpcyBoaXQsIGRlcGVuZGluZyBvbiB3
aGljaCBjaHVuayBwYXJ0IGlzIHByb2Nlc3NlZCBhdCB0aGUgbW9tZW50LiBXaXRoIHRoZSBvZmZz
ZXQgJiBsZW5ndGggdmFsdWVzCi0gICAgLy8gb2YgZWFjaCBjaHVuayBwYXJ0IHdlIGNhbiBlYXNp
bHkgZmluZCBvdXQgd2hpY2ggb25lIGlzIG1lYW50IHRvIGJlIHNlbGVjdGVkLiBCYWlsIG91dCBm
b3IgdGhlIG90aGVyIGNodW5rIHBhcnRzLgotICAgIC8vIElmIHN0YXJQb3MgaXMgYmVoaW5kIHRo
ZSBjdXJyZW50IGNodW5rIG9yIHRoZSBlbmRQb3MgZW5kcyBiZWZvcmUgdGhpcyB0ZXh0IGNodW5r
IHBhcnQsIHdlJ3JlIG5vdCBtZWFudCB0byBiZSBzZWxlY3RlZC4KLSAgICBpZiAoc3RhcnRQb3Mg
Pj0gcGFydC5vZmZzZXQgKyBwYXJ0Lmxlbmd0aCB8fCBlbmRQb3MgPD0gcGFydC5vZmZzZXQpIHsK
LSAgICAgICAgc3RhcnRQb3MgPSAwOwotICAgICAgICBlbmRQb3MgPSAtMTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VSVCh0ZXh0UmVuZGVyZXIo
KSk7CiAKLSAgICAvLyBUaGUgY3VycmVudCBwcm9jZXNzZWQgY2h1bmsgcGFydCBpcyBoaXQuIFdo
ZW4gcGFpbnRpbmcgdGhlIHNlbGVjdGlvbiwgY29uc3RydWN0VGV4dFJ1bigpIGJ1aWxkcwotICAg
IC8vIGEgVGV4dFJ1biBvYmplY3Qgd2hvc2Ugc3RhcnRQb3MgaXMgMCBhbmQgZW5kUG9zIGlzIGNo
dW5rIHBhcnQgbGVuZ3RoLiBUaGUgY29kZSBiZWxvdyBtYXBzIHRoZSBpbmNvbWluZwotICAgIC8v
IHN0YXJ0UG9zL2VuZFBvcyByYW5nZSBpbnRvIGEgWzAsIHBhcnQgbGVuZ3RoXSBjb29yZGluYXRl
IHN5c3RlbSwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgY2h1bmsgcGFydC4KLSAgICBpZiAoc3Rh
cnRQb3MgPCBwYXJ0Lm9mZnNldCkKLSAgICAgICAgc3RhcnRQb3MgPSAwOwotICAgIGVsc2UKLSAg
ICAgICAgc3RhcnRQb3MgLT0gcGFydC5vZmZzZXQ7CisgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRl
eHRSZW5kZXJlcigpOworICAgIEFTU0VSVCh0ZXh0KTsKIAotICAgIGlmIChlbmRQb3MgPiBwYXJ0
Lm9mZnNldCArIHBhcnQubGVuZ3RoKQotICAgICAgICBlbmRQb3MgPSBwYXJ0Lmxlbmd0aDsKLSAg
ICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGVuZFBvcyA+PSBwYXJ0Lm9mZnNldCk7Ci0gICAgICAg
IGVuZFBvcyAtPSBwYXJ0Lm9mZnNldDsKLSAgICB9CisgICAgVGV4dFJ1biBydW4odGV4dC0+Y2hh
cmFjdGVycygpICsgZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0CisgICAgICAgICAgICAgICAg
LCBmcmFnbWVudC5sZW5ndGgKKyAgICAgICAgICAgICAgICAsIGZhbHNlIC8qIGFsbG93VGFicyAq
LworICAgICAgICAgICAgICAgICwgMCAvKiB4UG9zLCBvbmx5IHJlbGV2YW50IHdpdGggYWxsb3dU
YWJzPXRydWUgKi8KKyAgICAgICAgICAgICAgICAsIDAgLyogcGFkZGluZywgb25seSByZWxldmFu
dCBmb3IganVzdGlmaWVkIHRleHQsIG5vdCByZWxldmFudCBmb3IgU1ZHICovCisgICAgICAgICAg
ICAgICAgLCBkaXJlY3Rpb24oKSA9PSBSVEwKKyAgICAgICAgICAgICAgICAsIG1fZGlyT3ZlcnJp
ZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8p
OwogCi0gICAgQVNTRVJUKHN0YXJ0UG9zIDwgZW5kUG9zKTsKLX0KKyNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQorICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVy
ZXIoKTsKKyAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwogCi12b2lkIFNWR0lubGluZVRleHRC
b3g6OnNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3RhcnRQb3MsIGludCYgZW5kUG9zKQotewotICAg
IElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0UG9zLCBlbmRQb3MpOworICAg
IHJ1bi5zZXRSZWZlcmVuY2luZ1JlbmRlck9iamVjdChwYXJlbnRSZW5kZXJlcik7CisjZW5kaWYK
IAotICAgIGlmICghbV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIC8vIERpc2FibGUgYW55IHdvcmQvY2hhcmFjdGVyIHJvdW5kaW5nLgorICAgIHJ1bi5k
aXNhYmxlUm91bmRpbmdIYWNrcygpOwogCi0gICAgbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvQ2h1
bmtQYXJ0Q29vcmRpbmF0ZXMoc3RhcnRQb3MsIGVuZFBvcywgbV9jdXJyZW50Q2h1bmtQYXJ0KTsK
KyAgICAvLyBXZSBoYW5kbGUgbGV0dGVyICYgd29yZCBzcGFjaW5nIG91cnNlbHZlcy4KKyAgICBy
dW4uZGlzYWJsZVNwYWNpbmcoKTsKKyAgICByZXR1cm4gcnVuOwogfQogCi12b2lkIFNWR0lubGlu
ZVRleHRCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0KFJlbmRlclN0eWxlKiBzdHlsZSkK
K2Jvb2wgU1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRD
b29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQmIHN0YXJ0UG9z
aXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRD
aHVua1BhcnQuaXNWYWxpZCgpKTsKLSAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIoKS0+bm9kZSgp
OwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpOwotICAg
IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IGRvY3VtZW50LT5tYXJrZXJzKCktPm1h
cmtlcnNGb3JOb2RlKHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAgaWYgKHN0YXJ0UG9zaXRpb24g
Pj0gZW5kUG9zaXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3RvcjxEb2N1
bWVudE1hcmtlcj46Oml0ZXJhdG9yIG1hcmtlckVuZCA9IG1hcmtlcnMuZW5kKCk7Ci0gICAgZm9y
IChWZWN0b3I8RG9jdW1lbnRNYXJrZXI+OjppdGVyYXRvciBtYXJrZXJJdCA9IG1hcmtlcnMuYmVn
aW4oKTsgbWFya2VySXQgIT0gbWFya2VyRW5kOyArK21hcmtlckl0KSB7Ci0gICAgICAgIGNvbnN0
IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSAqbWFya2VySXQ7CisgICAgaW50IG9mZnNldCA9IHN0
YXRpY19jYXN0PGludD4oZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0KSAtIHN0YXJ0KCk7Cisg
ICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oZnJhZ21lbnQubGVuZ3RoKTsKIAotICAg
ICAgICAvLyBTVkcgaXMgb25seSBpbnRlcmVzc3RlZCBpbiB0aGUgVGV4dE1hdGNoIG1hcmtlciwg
Zm9yIG5vdy4KLSAgICAgICAgaWYgKG1hcmtlci50eXBlICE9IERvY3VtZW50TWFya2VyOjpUZXh0
TWF0Y2gpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBGbG9hdFJlY3QgbWFya2Vy
UmVjdDsKLSAgICAgICAgaW50IHBhcnRTdGFydFBvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQg
LSBzdGFydCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwotICAgICAgICBpbnQgcGFydEVu
ZFBvcyA9IG1pbihtYXJrZXIuZW5kT2Zmc2V0IC0gc3RhcnQoKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGxlbigpKSk7Ci0KLSAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCB0ZXh0IGNodW5rIHBh
cnRzLCB0byBzZWUgd2hpY2ggb25lcyBoYXZlIHRvIGJlIGhpZ2hsaWdodGVkCi0gICAgICAgIGNv
bnN0IFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdmdU
ZXh0Q2h1bmtQYXJ0cy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8U1ZHVGV4dENodW5rUGFy
dD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdmdUZXh0Q2h1bmtQYXJ0cy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtYXJrZXJSZWN0LnVuaXRlKHNlbGVjdGlvblJlY3RG
b3JUZXh0Q2h1bmtQYXJ0KCppdCwgcGFydFN0YXJ0UG9zLCBwYXJ0RW5kUG9zLCBzdHlsZSkpOwor
ICAgIGlmIChzdGFydFBvc2l0aW9uID49IG9mZnNldCArIGxlbmd0aCB8fCBlbmRQb3NpdGlvbiA8
PSBvZmZzZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIW1fY2h1bmtU
cmFuc2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCi0gICAgICAgICAgICBtYXJrZXJSZWN0ID0gbV9j
aHVua1RyYW5zZm9ybWF0aW9uLm1hcFJlY3QobWFya2VyUmVjdCk7CisgICAgaWYgKHN0YXJ0UG9z
aXRpb24gPCBvZmZzZXQpCisgICAgICAgIHN0YXJ0UG9zaXRpb24gPSAwOworICAgIGVsc2UKKyAg
ICAgICAgc3RhcnRQb3NpdGlvbiAtPSBvZmZzZXQ7CiAKLSAgICAgICAgZG9jdW1lbnQtPm1hcmtl
cnMoKS0+c2V0UmVuZGVyZWRSZWN0Rm9yTWFya2VyKG5vZGUsIG1hcmtlciwgcmVuZGVyZXIoKS0+
bG9jYWxUb0Fic29sdXRlUXVhZChtYXJrZXJSZWN0KS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsK
KyAgICBpZiAoZW5kUG9zaXRpb24gPiBvZmZzZXQgKyBsZW5ndGgpCisgICAgICAgIGVuZFBvc2l0
aW9uID0gbGVuZ3RoOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoZW5kUG9zaXRpb24gPj0g
b2Zmc2V0KTsKKyAgICAgICAgZW5kUG9zaXRpb24gLT0gb2Zmc2V0OwogICAgIH0KKworICAgIEFT
U0VSVChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pOworICAgIHJldHVybiB0cnVlOwogfQog
CiBzdGF0aWMgaW5saW5lIGZsb2F0IHBvc2l0aW9uT2Zmc2V0Rm9yRGVjb3JhdGlvbihFVGV4dERl
Y29yYXRpb24gZGVjb3JhdGlvbiwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgdGhpY2tuZXNzKQpA
QCAtNDU1LDE3ICs0MTksMTUgQEAgc3RhdGljIGlubGluZSBmbG9hdCB0aGlja25lc3NGb3JEZWNv
cmF0aQogICAgIC8vIENvbXBhdGlibGUgd2l0aCBCYXRpay9PcGVyYQogICAgIHJldHVybiBmb250
LnNpemUoKSAvIDIwLjBmOwogfQotIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRS
ZW5kZXJPYmplY3REZWZpbmluaW5nVGV4dERlY29yYXRpb24oSW5saW5lRmxvd0JveCogcGFyZW50
Qm94LCBFVGV4dERlY29yYXRpb24gZGVjb3JhdGlvbikKKworc3RhdGljIGlubGluZSBSZW5kZXJP
YmplY3QqIGZpbmRSZW5kZXJPYmplY3REZWZpbmluaW5nVGV4dERlY29yYXRpb24oSW5saW5lRmxv
d0JveCogcGFyZW50Qm94KQogewotICAgIC8vIExvb2t1cCByZW5kZXIgb2JqZWN0IHdoaWNoIGhh
cyB0ZXh0LWRlY29yYXRpb24gc2V0LgorICAgIC8vIExvb2t1cCBmaXJzdCByZW5kZXIgb2JqZWN0
IGluIHBhcmVudCBoaWVyYXJjaHkgd2hpY2ggaGFzIHRleHQtZGVjb3JhdGlvbiBzZXQuCiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IDA7CiAgICAgd2hpbGUgKHBhcmVudEJveCkgewogICAg
ICAgICByZW5kZXJlciA9IHBhcmVudEJveC0+cmVuZGVyZXIoKTsKIAotICAgICAgICAvLyBFeHBs
aWNpdGVseSBjaGVjayB0ZXh0RGVjb3JhdGlvbigpIG5vdCB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCgpLCB3aGljaCBpcyBpbmhlcml0ZWQgdG8KLSAgICAgICAgLy8gY2hpbGRyZW4sIGFzIHdlIHdh
bnQgdG8gbG9va3VwIHRoZSByZW5kZXIgb2JqZWN0IHdob3NlIHN0eWxlIGRlZmluZWQgdGhlIHRl
eHQtZGVjb3JhdGlvbi4KLSAgICAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpICYmIHJlbmRlcmVy
LT5zdHlsZSgpLT50ZXh0RGVjb3JhdGlvbigpICYgZGVjb3JhdGlvbikKKyAgICAgICAgaWYgKHJl
bmRlcmVyLT5zdHlsZSgpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT50ZXh0RGVjb3JhdGlvbigpICE9
IFRETk9ORSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIHBhcmVudEJveCA9IHBhcmVu
dEJveC0+cGFyZW50KCk7CkBAIC00NzUsNTIgKzQzNyw0MCBAQCBzdGF0aWMgaW5saW5lIFJlbmRl
ck9iamVjdCogZmluZFJlbmRlck9iCiAgICAgcmV0dXJuIHJlbmRlcmVyOwogfQogCi12b2lkIFNW
R0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIEVUZXh0RGVjb3JhdGlvbiBkZWNvcmF0aW9u
LCBib29sIGhhc1NlbGVjdGlvbikKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0
aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgRVRleHREZWNvcmF0aW9uIGRlY29yYXRpb24s
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpCiB7CisgICAgaWYgKHRleHRSZW5kZXJl
cigpLT5zdHlsZSgpLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpID09IFRETk9ORSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgLy8gRmluZCBvdXQgd2hpY2ggcmVuZGVyIHN0eWxlIGRlZmluZWQg
dGhlIHRleHQtZGVjb3JhdGlvbiwgYXMgaXRzIGZpbGwvc3Ryb2tlIHByb3BlcnRpZXMgaGF2ZSB0
byBiZSB1c2VkIGZvciBkcmF3aW5nIGluc3RlYWQgb2Ygb3Vycy4KLSAgICBSZW5kZXJPYmplY3Qq
IGRlY29yYXRpb25SZW5kZXJlciA9IGZpbmRSZW5kZXJPYmplY3REZWZpbmluaW5nVGV4dERlY29y
YXRpb24ocGFyZW50KCksIGRlY29yYXRpb24pOworICAgIFJlbmRlck9iamVjdCogZGVjb3JhdGlv
blJlbmRlcmVyID0gZmluZFJlbmRlck9iamVjdERlZmluaW5pbmdUZXh0RGVjb3JhdGlvbihwYXJl
bnQoKSk7CiAgICAgUmVuZGVyU3R5bGUqIGRlY29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5k
ZXJlci0+c3R5bGUoKTsKICAgICBBU1NFUlQoZGVjb3JhdGlvblN0eWxlKTsKIAorICAgIGlmIChk
ZWNvcmF0aW9uU3R5bGUtPnZpc2liaWxpdHkoKSA9PSBISURERU4pCisgICAgICAgIHJldHVybjsK
KwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdEZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0
aW9uU3R5bGUtPnN2Z1N0eWxlKCk7CiAgICAgQVNTRVJUKHN2Z0RlY29yYXRpb25TdHlsZSk7CiAK
ICAgICBib29sIGhhc0RlY29yYXRpb25GaWxsID0gc3ZnRGVjb3JhdGlvblN0eWxlLT5oYXNGaWxs
KCk7CiAgICAgYm9vbCBoYXNEZWNvcmF0aW9uU3Ryb2tlID0gc3ZnRGVjb3JhdGlvblN0eWxlLT5o
YXNTdHJva2UoKTsKIAotICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKLSAgICAgICAgaWYgKFJlbmRl
clN0eWxlKiBwc2V1ZG9TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci0+Z2V0Q2FjaGVkUHNldWRv
U3R5bGUoU0VMRUNUSU9OKSkgewotICAgICAgICAgICAgZGVjb3JhdGlvblN0eWxlID0gcHNldWRv
U3R5bGU7Ci0KLSAgICAgICAgICAgIHN2Z0RlY29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25TdHls
ZS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChzdmdEZWNvcmF0aW9uU3R5bGUpOwot
Ci0gICAgICAgICAgICBpZiAoIWhhc0RlY29yYXRpb25GaWxsKQotICAgICAgICAgICAgICAgIGhh
c0RlY29yYXRpb25GaWxsID0gc3ZnRGVjb3JhdGlvblN0eWxlLT5oYXNGaWxsKCk7Ci0gICAgICAg
ICAgICBpZiAoIWhhc0RlY29yYXRpb25TdHJva2UpCi0gICAgICAgICAgICAgICAgaGFzRGVjb3Jh
dGlvblN0cm9rZSA9IHN2Z0RlY29yYXRpb25TdHlsZS0+aGFzU3Ryb2tlKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoZGVjb3JhdGlvblN0eWxlLT52aXNpYmlsaXR5KCkgPT0gSElEREVO
KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoaGFzRGVjb3JhdGlvbkZpbGwpIHsKICAgICAg
ICAgbV9wYWludGluZ1Jlc291cmNlTW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKLSAgICAgICAgcGFp
bnREZWNvcmF0aW9uV2l0aFN0eWxlKGNvbnRleHQsIHRleHRPcmlnaW4sIGRlY29yYXRpb25SZW5k
ZXJlciwgZGVjb3JhdGlvbik7CisgICAgICAgIHBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShjb250
ZXh0LCBkZWNvcmF0aW9uLCBmcmFnbWVudCwgZGVjb3JhdGlvblJlbmRlcmVyKTsKICAgICB9CiAK
ICAgICBpZiAoaGFzRGVjb3JhdGlvblN0cm9rZSkgewogICAgICAgICBtX3BhaW50aW5nUmVzb3Vy
Y2VNb2RlID0gQXBwbHlUb1N0cm9rZU1vZGU7Ci0gICAgICAgIHBhaW50RGVjb3JhdGlvbldpdGhT
dHlsZShjb250ZXh0LCB0ZXh0T3JpZ2luLCBkZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29yYXRpb24p
OworICAgICAgICBwYWludERlY29yYXRpb25XaXRoU3R5bGUoY29udGV4dCwgZGVjb3JhdGlvbiwg
ZnJhZ21lbnQsIGRlY29yYXRpb25SZW5kZXJlcik7CiAgICAgfQogfQogCi12b2lkIFNWR0lubGlu
ZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIFJlbmRlck9iamVjdCogZGVjb3JhdGlv
blJlbmRlcmVyLCBFVGV4dERlY29yYXRpb24gZGVjb3JhdGlvbikKK3ZvaWQgU1ZHSW5saW5lVGV4
dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
RVRleHREZWNvcmF0aW9uIGRlY29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21l
bnQsIFJlbmRlck9iamVjdCogZGVjb3JhdGlvblJlbmRlcmVyKQogewogICAgIEFTU0VSVCghbV9w
YWludGluZ1Jlc291cmNlKTsKICAgICBBU1NFUlQobV9wYWludGluZ1Jlc291cmNlTW9kZSAhPSBB
cHBseVRvRGVmYXVsdE1vZGUpOwotICAgIEFTU0VSVChtX2N1cnJlbnRDaHVua1BhcnQuaXNWYWxp
ZCgpKTsKIAogICAgIFJlbmRlclN0eWxlKiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9uUmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgQVNTRVJUKGRlY29yYXRpb25TdHlsZSk7CkBAIC01MjksMTIg
KzQ3OSwxMSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAKICAg
ICAvLyBUaGUgaW5pdGlhbCB5IHZhbHVlIHJlZmVycyB0byBvdmVybGluZSBwb3NpdGlvbi4KICAg
ICBmbG9hdCB0aGlja25lc3MgPSB0aGlja25lc3NGb3JEZWNvcmF0aW9uKGRlY29yYXRpb24sIGZv
bnQpOwotICAgIGZsb2F0IHggPSB0ZXh0T3JpZ2luLngoKTsKLSAgICBmbG9hdCB5ID0gdGV4dE9y
aWdpbi55KCkgLSBmb250LmFzY2VudCgpICsgcG9zaXRpb25PZmZzZXRGb3JEZWNvcmF0aW9uKGRl
Y29yYXRpb24sIGZvbnQsIHRoaWNrbmVzcyk7CisgICAgZmxvYXQgeSA9IGZyYWdtZW50LnkgLSBm
b250LmFzY2VudCgpICsgcG9zaXRpb25PZmZzZXRGb3JEZWNvcmF0aW9uKGRlY29yYXRpb24sIGZv
bnQsIHRoaWNrbmVzcyk7CiAKICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgY29udGV4dC0+YmVn
aW5QYXRoKCk7Ci0gICAgY29udGV4dC0+YWRkUGF0aChQYXRoOjpjcmVhdGVSZWN0YW5nbGUoRmxv
YXRSZWN0KHgsIHksIG1fY3VycmVudENodW5rUGFydC53aWR0aCwgdGhpY2tuZXNzKSkpOworICAg
IGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKEZsb2F0UmVjdChmcmFnbWVu
dC54LCB5LCBmcmFnbWVudC53aWR0aCwgdGhpY2tuZXNzKSkpOwogCiAgICAgaWYgKGFjcXVpcmVQ
YWludGluZ1Jlc291cmNlKGNvbnRleHQsIGRlY29yYXRpb25SZW5kZXJlciwgZGVjb3JhdGlvblN0
eWxlKSkKICAgICAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCk7CkBAIC01NDIs
MzUgKzQ5MSwxNCBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAg
ICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50
U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgdGV4
dE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEg
c2VsZWN0aW9uIHRvIHBhaW50IGF0IGFsbC4KLSAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKLSAg
ICBzZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKLSAgICBpZiAoc3RhcnRQb3Mg
Pj0gZW5kUG9zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3Ig
PSByZW5kZXJlcigpLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICBpZiAoIWJhY2tn
cm91bmRDb2xvci5pc1ZhbGlkKCkgfHwgIWJhY2tncm91bmRDb2xvci5hbHBoYSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKLQotICAg
IEZsb2F0UG9pbnQgc2VsZWN0aW9uT3JpZ2luID0gdGV4dE9yaWdpbjsKLSAgICBzZWxlY3Rpb25P
cmlnaW4ubW92ZSgwLCAtZm9udC5hc2NlbnQoKSk7Ci0KLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0g
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvciwgc3R5bGUtPmNvbG9yU3Bh
Y2UoKSk7Ci0gICAgY29udGV4dC0+ZmlsbFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChj
b25zdHJ1Y3RUZXh0UnVuKHN0eWxlKSwgc2VsZWN0aW9uT3JpZ2luLCBtX2N1cnJlbnRDaHVua1Bh
cnQuaGVpZ2h0LCBzdGFydFBvcywgZW5kUG9zKSwgYmFja2dyb3VuZENvbG9yLCBzdHlsZS0+Y29s
b3JTcGFjZSgpKTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgU1ZHSW5saW5l
VGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW4m
IHRleHRSdW4sIGludCBzdGFydFBvcywgaW50IGVuZFBvcykKK3ZvaWQgU1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJT
dHlsZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJh
Z21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCiB7CiAgICAgY29uc3Qg
Rm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7CiAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
ID0gc3R5bGUtPnRleHRTaGFkb3coKTsKIAotICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KEZsb2F0
UG9pbnQodGV4dE9yaWdpbi54KCksIHRleHRPcmlnaW4ueSgpIC0gZm9udC5hc2NlbnQoKSksIEZs
b2F0U2l6ZShtX2N1cnJlbnRDaHVua1BhcnQud2lkdGgsIG1fY3VycmVudENodW5rUGFydC5oZWln
aHQpKTsKKyAgICBGbG9hdFBvaW50IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7
CisgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QoRmxvYXRQb2ludCh0ZXh0T3JpZ2luLngoKSwgdGV4
dE9yaWdpbi55KCkgLSBmb250LmFzY2VudCgpKSwgRmxvYXRTaXplKGZyYWdtZW50LndpZHRoLCBm
cmFnbWVudC5oZWlnaHQpKTsKKwogICAgIGRvIHsKICAgICAgICAgaWYgKCFwcmVwYXJlR3JhcGhp
Y3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKGNvbnRleHQsIHRleHRSdW4sIHN0eWxlKSkKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNTc5LDcgKzUwNyw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0V2l0aFNoYWQKICAgICAgICAgaWYgKHNoYWRvdykKICAgICAgICAgICAgIGV4dHJh
T2Zmc2V0ID0gYXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dChjb250ZXh0LCBzaGFkb3csIHNo
YWRvd1JlY3QsIGZhbHNlIC8qIHN0cm9rZWQgKi8sIHRydWUgLyogb3BhcXVlICovKTsKIAotICAg
ICAgICBmb250LmRyYXdUZXh0KGNvbnRleHQsIHRleHRSdW4sIHRleHRPcmlnaW4gKyBleHRyYU9m
ZnNldCwgc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgICAgIGZvbnQuZHJhd1RleHQoY29udGV4dCwg
dGV4dFJ1biwgdGV4dE9yaWdpbiArIGV4dHJhT2Zmc2V0LCBzdGFydFBvc2l0aW9uLCBlbmRQb3Np
dGlvbik7CiAgICAgICAgIHJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyhj
b250ZXh0LCB0ZXh0UnVuKTsKIAogICAgICAgICBpZiAoIXNoYWRvdykKQEAgLTU5NCwyOTMgKzUy
Miw2OSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkCiAgICAgfSB3
aGlsZSAoc2hhZG93KTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgYm9vbCBoYXNTZWxl
Y3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQordm9pZCBTVkdJbmxpbmVUZXh0Qm94
OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFn
bWVudCwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQogewog
ICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKHNlbGVjdGlvblN0eWxlKTsKLSAgICBBU1NF
UlQobV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFsaWQoKSk7CiAKLSAgICBpbnQgc3RhcnRQb3MgPSAw
OwotICAgIGludCBlbmRQb3MgPSAwOwotICAgIHNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0UG9zLCBl
bmRQb3MpOworICAgIGludCBzdGFydFBvc2l0aW9uID0gMDsKKyAgICBpbnQgZW5kUG9zaXRpb24g
PSAwOworICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKKyAgICAgICAgc2VsZWN0aW9uU3RhcnRFbmQo
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgICAgICBoYXNTZWxlY3Rpb24gPSBtYXBT
dGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50LCBzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgfQogCiAgICAgLy8gRmFzdCBwYXRoIGlmIHRoZXJl
IGlzIG5vIHNlbGVjdGlvbiwganVzdCBkcmF3IHRoZSB3aG9sZSBjaHVuayBwYXJ0IHVzaW5nIHRo
ZSByZWd1bGFyIHN0eWxlCi0gICAgVGV4dFJ1biB0ZXh0UnVuKGNvbnN0cnVjdFRleHRSdW4oc3R5
bGUpKTsKLSAgICBpZiAoIWhhc1NlbGVjdGlvbiB8fCBzdGFydFBvcyA+PSBlbmRQb3MpIHsKLSAg
ICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgdGV4dE9yaWdpbiwgc3R5bGUsIHRl
eHRSdW4sIDAsIG1fY3VycmVudENodW5rUGFydC5sZW5ndGgpOworICAgIFRleHRSdW4gdGV4dFJ1
bihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFnbWVudCkpOworICAgIGlmICghaGFzU2VsZWN0
aW9uIHx8IHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pIHsKKyAgICAgICAgcGFpbnRUZXh0
V2l0aFNoYWRvd3MoY29udGV4dCwgc3R5bGUsIHRleHRSdW4sIGZyYWdtZW50LCAwLCBmcmFnbWVu
dC5sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gRXZlbnR1YWxseSBk
cmF3IHRleHQgdXNpbmcgcmVndWxhciBzdHlsZSB1bnRpbCB0aGUgc3RhcnQgcG9zaXRpb24gb2Yg
dGhlIHNlbGVjdGlvbgotICAgIGlmIChzdGFydFBvcyA+IDAgJiYgIXBhaW50U2VsZWN0ZWRUZXh0
T25seSkKLSAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgdGV4dE9yaWdpbiwg
c3R5bGUsIHRleHRSdW4sIDAsIHN0YXJ0UG9zKTsKKyAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IDAg
JiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKKyAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3Mo
Y29udGV4dCwgc3R5bGUsIHRleHRSdW4sIGZyYWdtZW50LCAwLCBzdGFydFBvc2l0aW9uKTsKIAog
ICAgIC8vIERyYXcgdGV4dCB1c2luZyBzZWxlY3Rpb24gc3R5bGUgZnJvbSB0aGUgc3RhcnQgdG8g
dGhlIGVuZCBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0aW9uCiAgICAgaWYgKHN0eWxlICE9IHNlbGVj
dGlvblN0eWxlKQogICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2Vk
KHBhcmVudCgpLT5yZW5kZXJlcigpLCBTdHlsZURpZmZlcmVuY2VSZXBhaW50LCBzZWxlY3Rpb25T
dHlsZSk7CiAKLSAgICBUZXh0UnVuIHNlbGVjdGlvblRleHRSdW4oY29uc3RydWN0VGV4dFJ1bihz
ZWxlY3Rpb25TdHlsZSkpOwotICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIHRleHRP
cmlnaW4sIHNlbGVjdGlvblN0eWxlLCB0ZXh0UnVuLCBzdGFydFBvcywgZW5kUG9zKTsKKyAgICBU
ZXh0UnVuIHNlbGVjdGlvblRleHRSdW4oY29uc3RydWN0VGV4dFJ1bihzZWxlY3Rpb25TdHlsZSwg
ZnJhZ21lbnQpKTsKKyAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCBzZWxlY3Rpb25T
dHlsZSwgdGV4dFJ1biwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAog
ICAgIGlmIChzdHlsZSAhPSBzZWxlY3Rpb25TdHlsZSkKICAgICAgICAgU1ZHUmVzb3VyY2VzQ2Fj
aGU6OmNsaWVudFN0eWxlQ2hhbmdlZChwYXJlbnQoKS0+cmVuZGVyZXIoKSwgU3R5bGVEaWZmZXJl
bmNlUmVwYWludCwgc3R5bGUpOwogCiAgICAgLy8gRXZlbnR1YWxseSBkcmF3IHRleHQgdXNpbmcg
cmVndWxhciBzdHlsZSBmcm9tIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGlvbiB0byB0
aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNodW5rIHBhcnQKLSAgICBpZiAoZW5kUG9zIDwgbV9jdXJy
ZW50Q2h1bmtQYXJ0Lmxlbmd0aCAmJiAhcGFpbnRTZWxlY3RlZFRleHRPbmx5KQotICAgICAgICBw
YWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCB0ZXh0T3JpZ2luLCBzdHlsZSwgdGV4dFJ1biwg
ZW5kUG9zLCBtX2N1cnJlbnRDaHVua1BhcnQubGVuZ3RoKTsKKyAgICBpZiAoZW5kUG9zaXRpb24g
PCBzdGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50Lmxlbmd0aCkgJiYgIXBhaW50U2VsZWN0ZWRUZXh0
T25seSkKKyAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgc3R5bGUsIHRleHRS
dW4sIGZyYWdtZW50LCBlbmRQb3NpdGlvbiwgZnJhZ21lbnQubGVuZ3RoKTsKIH0KIAotdm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpidWlsZExheW91dEluZm9ybWF0aW9uKFNWR0NoYXJhY3RlckxheW91
dEluZm8mIGluZm8sIFNWR0xhc3RHbHlwaEluZm8mIGxhc3RHbHlwaCkKK0ludFJlY3QgU1ZHSW5s
aW5lVGV4dEJveDo6Y2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0CiB7CisgICAgRmxvYXRSZWN0
IHRleHRSZWN0OworCiAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdGhpcy0+dGV4dFJl
bmRlcmVyKCk7CiAgICAgQVNTRVJUKHRleHRSZW5kZXJlcik7CiAKICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSB0ZXh0UmVuZGVyZXItPnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlKTsKIAotICAg
IFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKTsKLSAg
ICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwotICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlci0+bm9k
ZSgpKTsKLSAgICBBU1NFUlQocGFyZW50UmVuZGVyZXItPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkp
OwotICAgIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4ocGFyZW50UmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5
bGUtPmZvbnQoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHRSZW5kZXJlci0+
Y2hhcmFjdGVycygpOwotCi0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0KCk7Ci0g
ICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBlbmQoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBs
ZW4oKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdT
dHlsZSgpOwotICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUo
c3ZnU3R5bGUpOwotCi0gICAgaW50IGNoYXJzQ29uc3VtZWQgPSAwOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gY2hhcnNDb25zdW1lZCkgewotICAgICAgICBTVkdD
aGFyIHN2Z0NoYXI7Ci0KLSAgICAgICAgaWYgKGluZm8uaW5QYXRoTGF5b3V0KCkpCi0gICAgICAg
ICAgICBzdmdDaGFyLnBhdGhEYXRhID0gU1ZHQ2hhck9uUGF0aDo6Y3JlYXRlKCk7Ci0KLSAgICAg
ICAgZmxvYXQgZ2x5cGhXaWR0aCA9IDAuMGY7Ci0gICAgICAgIGZsb2F0IGdseXBoSGVpZ2h0ID0g
MC4wZjsKLSAgICAgICAgU3RyaW5nIGdseXBoTmFtZTsKLSAgICAgICAgU3RyaW5nIHVuaWNvZGVT
dHJpbmc7Ci0gICAgICAgIG1lYXN1cmVDaGFyYWN0ZXIoc3R5bGUsIGksIGNoYXJzQ29uc3VtZWQs
IGdseXBoTmFtZSwgdW5pY29kZVN0cmluZywgZ2x5cGhXaWR0aCwgZ2x5cGhIZWlnaHQpOwotCi0g
ICAgICAgIGJvb2wgYXNzaWduZWRYID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgYXNzaWduZWRZID0g
ZmFsc2U7Ci0KLSAgICAgICAgaWYgKGluZm8ueFZhbHVlQXZhaWxhYmxlKCkgJiYgKCFpbmZvLmlu
UGF0aExheW91dCgpIHx8IChpbmZvLmluUGF0aExheW91dCgpICYmICFpc1ZlcnRpY2FsVGV4dCkp
KSB7Ci0gICAgICAgICAgICBpZiAoIWlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAgIHN2
Z0NoYXIubmV3VGV4dENodW5rID0gdHJ1ZTsKLQotICAgICAgICAgICAgYXNzaWduZWRYID0gdHJ1
ZTsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICAg
ICAgaW5mby5jdXJ4ID0gaW5mby54VmFsdWVOZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoaW5mby55VmFsdWVBdmFpbGFibGUoKSAmJiAoIWluZm8uaW5QYXRoTGF5b3V0KCkgfHwgKGlu
Zm8uaW5QYXRoTGF5b3V0KCkgJiYgaXNWZXJ0aWNhbFRleHQpKSkgewotICAgICAgICAgICAgaWYg
KGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAgIHN2Z0NoYXIubmV3VGV4dENodW5rID0g
dHJ1ZTsKLQotICAgICAgICAgICAgYXNzaWduZWRZID0gdHJ1ZTsKLSAgICAgICAgICAgIHN2Z0No
YXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgaW5mby5jdXJ5ID0gaW5mby55
VmFsdWVOZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBkeCA9IDAuMGY7Ci0gICAg
ICAgIGZsb2F0IGR5ID0gMC4wZjsKLQotICAgICAgICAvLyBBcHBseSB4LWF4aXMgc2hpZnQKLSAg
ICAgICAgaWYgKGluZm8uZHhWYWx1ZUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgICAgICBzdmdDaGFy
LmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgZHggPSBpbmZvLmR4VmFsdWVO
ZXh0KCk7Ci0gICAgICAgICAgICBpbmZvLmR4ICs9IGR4OwotCi0gICAgICAgICAgICBpZiAoIWlu
Zm8uaW5QYXRoTGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgaW5mby5jdXJ4ICs9IGR4OwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQXBwbHkgeS1heGlzIHNoaWZ0Ci0gICAgICAgIGlmIChpbmZv
LmR5VmFsdWVBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRl
ZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGR5ID0gaW5mby5keVZhbHVlTmV4dCgpOwotICAgICAg
ICAgICAgaW5mby5keSArPSBkeTsKLQotICAgICAgICAgICAgaWYgKCFpbmZvLmluUGF0aExheW91
dCgpKQotICAgICAgICAgICAgICAgIGluZm8uY3VyeSArPSBkeTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFRha2UgbGV0dGVyICYgd29yZCBzcGFjaW5nIGFuZCBrZXJuaW5nIGludG8gYWNjb3Vu
dAotICAgICAgICBmbG9hdCBzcGFjaW5nID0gZm9udC5sZXR0ZXJTcGFjaW5nKCkgKyBjYWxjdWxh
dGVDU1NLZXJuaW5nKGxlbmd0aENvbnRleHQsIHN0eWxlKTsKLQotICAgICAgICBjb25zdCBVQ2hh
ciogY3VycmVudENoYXJhY3RlciA9IGNoYXJhY3RlcnMgKyAoIWlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IGVuZFBvc2l0aW9uIC0gaSA6IHN0YXJ0UG9zaXRpb24gKyBpKTsKLSAgICAgICAgY29u
c3QgVUNoYXIqIGxhc3RDaGFyYWN0ZXIgPSAwOwotCi0gICAgICAgIGlmICghaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IGVuZFBvc2l0aW9uKQotICAgICAg
ICAgICAgICAgIGxhc3RDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzICsgZW5kUG9zaXRpb24gLSBpICsg
IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAg
ICAgICAgbGFzdENoYXJhY3RlciA9IGNoYXJhY3RlcnMgKyBzdGFydFBvc2l0aW9uICsgaSAtIDE7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogU1ZHIEtlcm5pbmcgZG9lc24ndCBnZXQg
YXBwbGllZCBvbiB0ZXh0cyBvbiBwYXRoLgotICAgICAgICBib29sIGFwcGxpZWRTVkdLZXJuaW5n
ID0gYXBwbHlTVkdLZXJuaW5nKGluZm8sIHN0eWxlLCBsYXN0R2x5cGgsIHVuaWNvZGVTdHJpbmcs
IGdseXBoTmFtZSwgaXNWZXJ0aWNhbFRleHQpOwotICAgICAgICBpZiAoaW5mby5uZXh0RHJhd25T
ZXBlcmF0ZWQgfHwgc3BhY2luZyAhPSAwLjBmIHx8IGFwcGxpZWRTVkdLZXJuaW5nKSB7Ci0gICAg
ICAgICAgICBpbmZvLm5leHREcmF3blNlcGVyYXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgc3Zn
Q2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3Vy
cmVudENoYXJhY3RlciAmJiBGb250Ojp0cmVhdEFzU3BhY2UoKmN1cnJlbnRDaGFyYWN0ZXIpICYm
IGxhc3RDaGFyYWN0ZXIgJiYgIUZvbnQ6OnRyZWF0QXNTcGFjZSgqbGFzdENoYXJhY3RlcikpIHsK
LSAgICAgICAgICAgIHNwYWNpbmcgKz0gZm9udC53b3JkU3BhY2luZygpOwotCi0gICAgICAgICAg
ICBpZiAoc3BhY2luZyAhPSAwLjBmICYmICFpbmZvLmluUGF0aExheW91dCgpKQotICAgICAgICAg
ICAgICAgIGluZm8ubmV4dERyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZsb2F0IG9yaWVudGF0aW9uQW5nbGUgPSBnbHlwaE9yaWVudGF0aW9uVG9BbmdsZShzdmdT
dHlsZSwgaXNWZXJ0aWNhbFRleHQsICpjdXJyZW50Q2hhcmFjdGVyKTsKLQotICAgICAgICBmbG9h
dCB4T3JpZW50YXRpb25TaGlmdCA9IDAuMGY7Ci0gICAgICAgIGZsb2F0IHlPcmllbnRhdGlvblNo
aWZ0ID0gMC4wZjsKLSAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlID0gYXBwbHlHbHlwaEFkdmFu
Y2VBbmRTaGlmdFJlc3BlY3RpbmdPcmllbnRhdGlvbihpc1ZlcnRpY2FsVGV4dCwgb3JpZW50YXRp
b25BbmdsZSwgZ2x5cGhXaWR0aCwgZ2x5cGhIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9u
dCwgc3ZnQ2hhciwgeE9yaWVudGF0aW9uU2hpZnQsIHlPcmllbnRhdGlvblNoaWZ0KTsKLQotICAg
ICAgICAvLyBIYW5kbGUgdGV4dFBhdGggbGF5b3V0IG1vZGUKLSAgICAgICAgaWYgKGluZm8uaW5Q
YXRoTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IGV4dHJhQWR2YW5jZSA9IGlzVmVydGlj
YWxUZXh0ID8gZHkgOiBkeDsKLSAgICAgICAgICAgIGZsb2F0IG5ld09mZnNldCA9IEZMVF9NSU47
Ci0KLSAgICAgICAgICAgIGlmIChhc3NpZ25lZFggJiYgIWlzVmVydGljYWxUZXh0KQotICAgICAg
ICAgICAgICAgIG5ld09mZnNldCA9IGluZm8uY3VyeDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGFz
c2lnbmVkWSAmJiBpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBp
bmZvLmN1cnk7Ci0KLSAgICAgICAgICAgIGZsb2F0IGNvcnJlY3RlZEdseXBoQWR2YW5jZSA9IGds
eXBoQWR2YW5jZTsKLQotICAgICAgICAgICAgLy8gSGFuZGxlIGxlbmd0aEFkanVzdD0ic3BhY2lu
Z0FuZEdseXBocyIgYnkgc3BlY2lmeWluZyBwZXItY2hhcmFjdGVyIHNjYWxlIG9wZXJhdGlvbnMK
LSAgICAgICAgICAgIGlmIChpbmZvLnBhdGhUZXh0TGVuZ3RoICYmIGluZm8ucGF0aENodW5rTGVu
Z3RoKSB7IAotICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkgewotICAgICAgICAg
ICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT55U2NhbGUgPSBpbmZvLnBhdGhDaHVua0xlbmd0
aCAvIGluZm8ucGF0aFRleHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNpbmcgKj0g
c3ZnQ2hhci5wYXRoRGF0YS0+eVNjYWxlOwotICAgICAgICAgICAgICAgICAgICBjb3JyZWN0ZWRH
bHlwaEFkdmFuY2UgKj0gc3ZnQ2hhci5wYXRoRGF0YS0+eVNjYWxlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPnhTY2FsZSA9
IGluZm8ucGF0aENodW5rTGVuZ3RoIC8gaW5mby5wYXRoVGV4dExlbmd0aDsKLSAgICAgICAgICAg
ICAgICAgICAgc3BhY2luZyAqPSBzdmdDaGFyLnBhdGhEYXRhLT54U2NhbGU7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvcnJlY3RlZEdseXBoQWR2YW5jZSAqPSBzdmdDaGFyLnBhdGhEYXRhLT54U2Nh
bGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBI
YW5kbGUgbGV0dGVyICYgd29yZCBzcGFjaW5nIG9uIHRleHQgcGF0aAotICAgICAgICAgICAgZmxv
YXQgcGF0aEV4dHJhQWR2YW5jZSA9IGluZm8ucGF0aEV4dHJhQWR2YW5jZTsKLSAgICAgICAgICAg
IGluZm8ucGF0aEV4dHJhQWR2YW5jZSArPSBzcGFjaW5nOwotCi0gICAgICAgICAgICBzdmdDaGFy
LnBhdGhEYXRhLT5oaWRkZW4gPSAhaW5mby5uZXh0UGF0aExheW91dFBvaW50QW5kQW5nbGUoY29y
cmVjdGVkR2x5cGhBZHZhbmNlLCBleHRyYUFkdmFuY2UsIG5ld09mZnNldCk7Ci0gICAgICAgICAg
ICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgaW5mby5wYXRo
RXh0cmFBZHZhbmNlID0gcGF0aEV4dHJhQWR2YW5jZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IEFwcGx5IHJvdGF0aW9uCi0gICAgICAgIGlmIChpbmZvLmFuZ2xlVmFsdWVBdmFpbGFibGUoKSkK
LSAgICAgICAgICAgIGluZm8uYW5nbGUgPSBpbmZvLmFuZ2xlVmFsdWVOZXh0KCk7Ci0KLSAgICAg
ICAgLy8gQXBwbHkgYmFzZWxpbmUtc2hpZnQKLSAgICAgICAgaWYgKGluZm8uYmFzZWxpbmVTaGlm
dFZhbHVlQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQg
PSB0cnVlOwotICAgICAgICAgICAgZmxvYXQgc2hpZnQgPSBpbmZvLmJhc2VsaW5lU2hpZnRWYWx1
ZU5leHQoKTsKLQotICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAg
ICAgIGluZm8uc2hpZnR4ICs9IHNoaWZ0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGluZm8uc2hpZnR5IC09IHNoaWZ0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGFrZSBk
b21pbmFudC1iYXNlbGluZSAvIGFsaWdubWVudC1iYXNlbGluZSBpbnRvIGFjY291bnQKLSAgICAg
ICAgeU9yaWVudGF0aW9uU2hpZnQgKz0gYWxpZ25tZW50QmFzZWxpbmVUb1NoaWZ0KGlzVmVydGlj
YWxUZXh0LCB0ZXh0UmVuZGVyZXIsIGZvbnQpOworICAgIGludCBiYXNlbGluZSA9IGJhc2VsaW5l
UG9zaXRpb24odHJ1ZSk7CisgICAgaW50IGhlaWdodERpZmZlcmVuY2UgPSBiYXNlbGluZSAtIHN0
eWxlLT5mb250KCkuYXNjZW50KCk7CiAKLSAgICAgICAgc3ZnQ2hhci54ID0gaW5mby5jdXJ4Owot
ICAgICAgICBzdmdDaGFyLnkgPSBpbmZvLmN1cnk7Ci0gICAgICAgIHN2Z0NoYXIuYW5nbGUgPSBp
bmZvLmFuZ2xlOwotCi0gICAgICAgIC8vIEZvciB0ZXh0IHBhdGhzIGFueSBzaGlmdCAoZHgvZHkv
YmFzZWxpbmUtc2hpZnQpIGhhcyB0byBiZSBhcHBsaWVkIGFmdGVyIHRoZSByb3RhdGlvbgotICAg
ICAgICBpZiAoIWluZm8uaW5QYXRoTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIHN2Z0NoYXIueCAr
PSBpbmZvLnNoaWZ0eCArIHhPcmllbnRhdGlvblNoaWZ0OwotICAgICAgICAgICAgc3ZnQ2hhci55
ICs9IGluZm8uc2hpZnR5ICsgeU9yaWVudGF0aW9uU2hpZnQ7Ci0KLSAgICAgICAgICAgIGlmIChv
cmllbnRhdGlvbkFuZ2xlICE9IDAuMGYpCi0gICAgICAgICAgICAgICAgc3ZnQ2hhci5hbmdsZSAr
PSBvcmllbnRhdGlvbkFuZ2xlOwotCi0gICAgICAgICAgICBpZiAoc3ZnQ2hhci5hbmdsZSAhPSAw
LjBmKQotICAgICAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+b3JpZW50YXRpb25B
bmdsZSA9IG9yaWVudGF0aW9uQW5nbGU7Ci0KLSAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4
dCkKLSAgICAgICAgICAgICAgICBzdmdDaGFyLmFuZ2xlIC09IDkwLjBmOwotCi0gICAgICAgICAg
ICBzdmdDaGFyLnBhdGhEYXRhLT54U2hpZnQgPSBpbmZvLnNoaWZ0eCArIHhPcmllbnRhdGlvblNo
aWZ0OwotICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eVNoaWZ0ID0gaW5mby5zaGlmdHkg
KyB5T3JpZW50YXRpb25TaGlmdDsKLQotICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHRvIGdseXBo
IG1pZHBvaW50Ci0gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAg
ICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2hpZnQgKz0gaW5mby5keDsKLSAgICAgICAgICAgICAg
ICBzdmdDaGFyLnBhdGhEYXRhLT55U2hpZnQgLT0gZ2x5cGhBZHZhbmNlIC8gMi4wZjsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNoaWZ0
IC09IGdseXBoQWR2YW5jZSAvIDIuMGY7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0
YS0+eVNoaWZ0ICs9IGluZm8uZHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICB1bnNp
Z25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IG1fdGV4dEZyYWdtZW50cy5hdChpKTsK
KyAgICAgICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdChmcmFnbWVudC54LCBmcmFnbWVudC55IC0g
YmFzZWxpbmUsIGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQgKyBoZWlnaHREaWZmZXJl
bmNlKTsKIAotICAgICAgICAvLyBBZHZhbmNlIHRvIG5ldyBwb3NpdGlvbgotICAgICAgICBpZiAo
aXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0
cnVlOwotICAgICAgICAgICAgaW5mby5jdXJ5ICs9IGdseXBoQWR2YW5jZSArIHNwYWNpbmc7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW5mby5jdXJ4ICs9IGdseXBoQWR2YW5jZSArIHNw
YWNpbmc7CisgICAgICAgIGlmICghZnJhZ21lbnQudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAg
ICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZyYWdtZW50LnRyYW5zZm9ybS5tYXBSZWN0KGZyYWdt
ZW50UmVjdCk7CiAKLSAgICAgICAgLy8gQWR2YW5jZSB0byBuZXh0IGNoYXJhY3RlciBncm91cAot
ICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGNoYXJzQ29uc3VtZWQ7ICsraykgewotICAgICAg
ICAgICAgaW5mby5zdmdDaGFycy5hcHBlbmQoc3ZnQ2hhcik7Ci0gICAgICAgICAgICBpbmZvLnBy
b2Nlc3NlZFNpbmdsZUNoYXJhY3RlcigpOwotICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVy
YXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgc3ZnQ2hhci5uZXdUZXh0Q2h1bmsgPSBmYWxzZTsK
LSAgICAgICAgfQorICAgICAgICB0ZXh0UmVjdC51bml0ZShmcmFnbWVudFJlY3QpOwogICAgIH0K
LX0KLQotRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmNhbGN1bGF0ZUdseXBoQm91bmRhcmll
cyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwb3NpdGlvbiwgY29uc3QgU1ZHQ2hhciYgY2hhcmFj
dGVyKSBjb25zdAotewotICAgIGludCBjaGFyc0NvbnN1bWVkID0gMDsKLSAgICBTdHJpbmcgZ2x5
cGhOYW1lOwotICAgIFN0cmluZyB1bmljb2RlU3RyaW5nOwotICAgIGZsb2F0IGdseXBoV2lkdGgg
PSAwLjBmOwotICAgIGZsb2F0IGdseXBoSGVpZ2h0ID0gMC4wZjsKLSAgICBtZWFzdXJlQ2hhcmFj
dGVyKHN0eWxlLCBwb3NpdGlvbiwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lLCB1bmljb2RlU3Ry
aW5nLCBnbHlwaFdpZHRoLCBnbHlwaEhlaWdodCk7Ci0KLSAgICBGbG9hdFJlY3QgZ2x5cGhSZWN0
KGNoYXJhY3Rlci54LCBjaGFyYWN0ZXIueSAtIHN0eWxlLT5mb250KCkuYXNjZW50KCksIGdseXBo
V2lkdGgsIGdseXBoSGVpZ2h0KTsKLSAgICBnbHlwaFJlY3QgPSBjaGFyYWN0ZXIuY2hhcmFjdGVy
VHJhbnNmb3JtKCkubWFwUmVjdChnbHlwaFJlY3QpOwotICAgIGlmIChtX2NodW5rVHJhbnNmb3Jt
YXRpb24uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm4gZ2x5cGhSZWN0OwotCi0gICAgcmV0
dXJuIG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5tYXBSZWN0KGdseXBoUmVjdCk7Ci19Ci0KLUludFJl
Y3QgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0Ci17Ci0gICAg
RmxvYXRSZWN0IHRleHRSZWN0OwotICAgIGludCBiYXNlbGluZSA9IGJhc2VsaW5lUG9zaXRpb24o
dHJ1ZSk7Ci0KLSAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fc3ZnVGV4dENodW5rUGFydHMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8U1ZH
VGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdmdUZXh0Q2h1bmtQYXJ0cy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRleHRSZWN0LnVuaXRlKGl0LT5maXJz
dENoYXJhY3Rlci0+Y2hhcmFjdGVyVHJhbnNmb3JtKCkubWFwUmVjdChGbG9hdFJlY3QoaXQtPmZp
cnN0Q2hhcmFjdGVyLT54LCBpdC0+Zmlyc3RDaGFyYWN0ZXItPnkgLSBiYXNlbGluZSwgaXQtPndp
ZHRoLCBpdC0+aGVpZ2h0KSkpOwotCi0gICAgaWYgKG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5pc0lk
ZW50aXR5KCkpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KTsKIAot
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5tYXBSZWN0
KHRleHRSZWN0KSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDY4ODc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNTUgKzI1LDQ3IEBACiAK
ICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKLSNpbmNsdWRlICJT
VkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgiCi0jaW5jbHVkZSAiU1ZHVGV4dExheW91dFV0aWxpdGll
cy5oIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZTsKIGNsYXNzIFNWR1Jvb3RJbmxpbmVCb3g7
CiAKLXN0cnVjdCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOwotc3RydWN0IFNWR0xhc3RHbHlwaElu
Zm87Ci0KIGNsYXNzIFNWR0lubGluZVRleHRCb3ggOiBwdWJsaWMgSW5saW5lVGV4dEJveCB7CiBw
dWJsaWM6CiAgICAgU1ZHSW5saW5lVGV4dEJveChSZW5kZXJPYmplY3QqKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc1NWR0lubGluZVRleHRCb3goKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAg
ICB2aXJ0dWFsIGludCB2aXJ0dWFsTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
aWNhbEhlaWdodDsgfQotICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChpbnQgaGVpZ2h0KSB7IG1f
bG9naWNhbEhlaWdodCA9IGhlaWdodDsgfQorICAgIHZpcnR1YWwgaW50IHZpcnR1YWxMb2dpY2Fs
SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxI
ZWlnaHQoaW50IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQogCiAgICAgdmlydHVhbCBp
bnQgc2VsZWN0aW9uVG9wKCkgeyByZXR1cm4gbV95OyB9Ci0gICAgdmlydHVhbCBpbnQgc2VsZWN0
aW9uSGVpZ2h0KCkgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0OyB9CisgICAgdmlydHVhbCBpbnQg
c2VsZWN0aW9uSGVpZ2h0KCkgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICB2aXJ0dWFsIGludCBv
ZmZzZXRGb3JQb3NpdGlvbihpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyA9IHRydWUp
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNv
bnN0OwogCisgICAgdm9pZCBwYWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJik7CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAgICB2
aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGludCBzdGFy
dFBvcywgaW50IGVuZFBvcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQo
aW50JiBzdGFydFBvcywgaW50JiBlbmRQb3MpOwotICAgIHZvaWQgbWFwU3RhcnRFbmRQb3NpdGlv
bnNJbnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMoaW50JiBzdGFydFBvcywgaW50JiBlbmRQb3MsIGNv
bnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0
aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9z
aXRpb24pOwogCi0gICAgU1ZHUm9vdElubGluZUJveCogc3ZnUm9vdElubGluZUJveCgpIGNvbnN0
OworICAgIGJvb2wgbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhj
b25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRp
b24pIGNvbnN0OwogCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBzaGFyZWQgd2l0aCBTVkdSb290
SW5saW5lQm94ICAgICAKLSAgICB2b2lkIG1lYXN1cmVDaGFyYWN0ZXIoUmVuZGVyU3R5bGUqLCBp
bnQgcG9zaXRpb24sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUsIFN0cmlu
ZyYgdW5pY29kZVN0cmluZywgZmxvYXQmIGdseXBoV2lkdGgsIGZsb2F0JiBnbHlwaEhlaWdodCkg
Y29uc3Q7Ci0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhSZW5kZXJTdHls
ZSosIGludCBwb3NpdGlvbiwgY29uc3QgU1ZHQ2hhciYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50
UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Q7CiAKLSAgICB2b2lkIGJ1aWxkTGF5b3V0
SW5mb3JtYXRpb24oU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYsIFNWR0xhc3RHbHlwaEluZm8mKTsK
KyAgICB2b2lkIGNsZWFyVGV4dEZyYWdtZW50cygpIHsgbV90ZXh0RnJhZ21lbnRzLmNsZWFyKCk7
IH0KKyAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgdGV4dEZyYWdtZW50cygpIHsgcmV0dXJu
IG1fdGV4dEZyYWdtZW50czsgfQorICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiB0
ZXh0RnJhZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RnJhZ21lbnRzOyB9CiAKLSAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNodW5rVHJhbnNmb3JtYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2NodW5rVHJhbnNmb3JtYXRpb247IH0KLSAgICB2b2lkIHNldENodW5rVHJhbnNmb3JtYXRp
b24oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsgbV9jaHVua1RyYW5zZm9ybWF0
aW9uID0gdHJhbnNmb3JtOyB9Ci0gICAgdm9pZCBhZGRDaHVua1BhcnRJbmZvcm1hdGlvbihjb25z
dCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSB7IG1fc3ZnVGV4dENodW5rUGFydHMuYXBwZW5kKHBh
cnQpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+JiBzdmdUZXh0Q2h1bmtQ
YXJ0cygpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnVGV4dENodW5rUGFydHM7IH0KKyAgICBib29sIHN0
YXJ0c05ld1RleHRDaHVuaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRzTmV3VGV4dENodW5rOyB9
CisgICAgdm9pZCBzZXRTdGFydHNOZXdUZXh0Q2h1bmsoYm9vbCBuZXdUZXh0Q2h1bmspIHsgbV9z
dGFydHNOZXdUZXh0Q2h1bmsgPSBuZXdUZXh0Q2h1bms7IH0KIAotICAgIHZpcnR1YWwgSW50UmVj
dCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Q7CisgICAgaW50IG9mZnNldEZvclBvc2l0aW9u
SW5GcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBp
bmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RG
b3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IGZyYWdtZW50U3RhcnRQ
b3NpdGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24sIFJlbmRlclN0eWxlKik7CiAKIHByaXZh
dGU6Ci0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIGJ1aWxkQ2h1bmtUcmFuc2Zvcm1hdGlvbihTVkdDaGFyJiBmaXJz
dENoYXJhY3RlcikgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0
eWxlKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CiAKICAgICBib29sIGFjcXVpcmVQ
YWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComLCBSZW5kZXJPYmplY3QqLCBSZW5kZXJT
dHlsZSopOwogICAgIHZvaWQgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0
KiYpOwpAQCAtODEsMjIgKzczLDE3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwcmVwYXJlR3JhcGhp
Y3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBUZXh0UnVuJiwgUmVu
ZGVyU3R5bGUqKTsKICAgICB2b2lkIHJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHQqJiwgVGV4dFJ1biYpOwogCi0gICAgdm9pZCBjb21wdXRlVGV4
dE1hdGNoTWFya2VyUmVjdChSZW5kZXJTdHlsZSopOwotICAgIHZvaWQgcGFpbnREZWNvcmF0aW9u
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIEVUZXh0RGVj
b3JhdGlvbiwgYm9vbCBoYXNTZWxlY3Rpb24pOwotICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uV2l0
aFN0eWxlKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIFJl
bmRlck9iamVjdCosIEVUZXh0RGVjb3JhdGlvbik7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5kZXJTdHls
ZSopOwotICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9p
bnQmIHRleHRPcmlnaW4sIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxl
LCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOwotICAgIHZv
aWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2lu
dCYgdGV4dE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgaW50IHN0YXJ0UG9zLCBpbnQg
ZW5kUG9zKTsKLQotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dENodW5rUGFydChj
b25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiwgaW50IHBhcnRTdGFydFBvcywgaW50IHBhcnRFbmRQb3Ms
IFJlbmRlclN0eWxlKik7CisgICAgdm9pZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0
KiwgRVRleHREZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKTsKKyAgICB2b2lkIHBh
aW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQqLCBFVGV4dERlY29yYXRpb24s
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIFJlbmRlck9iamVjdCogZGVjb3JhdGlvblJlbmRlcmVy
KTsKKyAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCosIFJlbmRl
clN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0
aW9uLCBpbnQgZW5kUG9zaXRpb24pOworICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4
dCosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9u
bHkpOwogCiBwcml2YXRlOgotICAgIGludCBtX2xvZ2ljYWxIZWlnaHQ7Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIG1fY2h1bmtUcmFuc2Zvcm1hdGlvbjsKLSAgICBWZWN0b3I8U1ZHVGV4dENodW5rUGFy
dD4gbV9zdmdUZXh0Q2h1bmtQYXJ0czsKLSAgICBtdXRhYmxlIFNWR1RleHRDaHVua1BhcnQgbV9j
dXJyZW50Q2h1bmtQYXJ0OwotICAgIFJlbmRlclNWR1Jlc291cmNlKiBtX3BhaW50aW5nUmVzb3Vy
Y2U7CisgICAgaW50IG1faGVpZ2h0OwogICAgIGludCBtX3BhaW50aW5nUmVzb3VyY2VNb2RlOwor
ICAgIGJvb2wgbV9zdGFydHNOZXdUZXh0Q2h1bmsgOiAxOworICAgIFJlbmRlclNWR1Jlc291cmNl
KiBtX3BhaW50aW5nUmVzb3VyY2U7CisgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4gbV90ZXh0
RnJhZ21lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gNjg4NzQpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxv
amgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+Ci0gKiAgICAgICAgICAgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIgSW5jLgotICogICAgICAgICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNywxNSArMjcs
MTIgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgog
I2luY2x1ZGUgIlNWR0lubGluZUZsb3dCb3guaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUgIlNWR1RleHRMYXlv
dXRVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCiAK
LS8vIFRleHQgY2h1bmsgcGFydCBwcm9wYWdhdGlvbiBjYW4gYmUgdHJhY2VkIGJ5IHNldHRpbmcg
dGhpcyB2YXJpYWJsZSA+IDAuCi0jZGVmaW5lIERFQlVHX0NIVU5LX1BBUlRfUFJPUEFHQVRJT04g
MAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQpAQCAtNDYsMTIgKzQzLDI4IEBAIHZvaWQg
U1ZHUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBSZW5kZXJPYmplY3QqIGJv
eFJlbmRlcmVyID0gcmVuZGVyZXIoKTsKICAgICBBU1NFUlQoYm94UmVuZGVyZXIpOwogCisgICAg
Ym9vbCBpc1ByaW50aW5nID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKTsKKyAg
ICBib29sIGhhc1NlbGVjdGlvbiA9ICFpc1ByaW50aW5nICYmIHNlbGVjdGlvblN0YXRlKCkgIT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOworCiAgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJ
bmZvKHBhaW50SW5mbyk7CisgICAgaWYgKGhhc1NlbGVjdGlvbikgeworICAgICAgICBmb3IgKElu
bGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
T25MaW5lKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkp
CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGNoaWxkKS0+
cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGNoaWxkLT5pc1NWR0lubGluZUZsb3dCb3goKSkKKyAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxTVkdJbmxpbmVGbG93Qm94Kj4oY2hpbGQpLT5wYWludFNlbGVjdGlvbkJhY2tncm91
bmQoY2hpbGRQYWludEluZm8pOworICAgICAgICB9CisgICAgfQorCiAgICAgY2hpbGRQYWludElu
Zm8uY29udGV4dC0+c2F2ZSgpOwogCiAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVU
b1JlbmRlclNWR0NvbnRlbnQoYm94UmVuZGVyZXIsIGNoaWxkUGFpbnRJbmZvKSkgewotICAgICAg
ICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0T25MaW5lKCkpCisgICAgICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgeworICAgICAgICAg
ICAgaWYgKGNoaWxkLT5pc1NWR0lubGluZVRleHRCb3goKSkKKyAgICAgICAgICAgICAgICBTVkdJ
bmxpbmVGbG93Qm94Ojpjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKHRvUmVu
ZGVyU1ZHSW5saW5lVGV4dChzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oY2hpbGQpLT50
ZXh0UmVuZGVyZXIoKSkpOworCiAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRQYWludElu
Zm8sIDAsIDApOworICAgICAgICB9CiAgICAgfQogCiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Zmlu
aXNoUmVuZGVyU1ZHQ29udGVudChib3hSZW5kZXJlciwgY2hpbGRQYWludEluZm8sIHBhaW50SW5m
by5jb250ZXh0KTsKQEAgLTYwLDEzMCArNzMsNTAgQEAgdm9pZCBTVkdSb290SW5saW5lQm94Ojpw
YWludChQYWludEluZm8mIAogCiB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmNvbXB1dGVQZXJDaGFy
YWN0ZXJMYXlvdXRJbmZvcm1hdGlvbigpCiB7Ci0gICAgLy8gQ2xlYW4gdXAgYW55IHByZXZpb3Vz
IGxheW91dCBpbmZvcm1hdGlvbgotICAgIG1fc3ZnQ2hhcnMuY2xlYXIoKTsKLSAgICBtX3N2Z1Rl
eHRDaHVua3MuY2xlYXIoKTsKLQotICAgIC8vIEJ1aWxkIGxheW91dCBpbmZvcm1hdGlvbiBmb3Ig
YWxsIGNvbnRhaW5lZCByZW5kZXIgb2JqZWN0cwotICAgIFNWR0NoYXJhY3RlckxheW91dEluZm8g
Y2hhckluZm87Ci0gICAgYnVpbGRMYXlvdXRJbmZvcm1hdGlvbih0aGlzLCBjaGFySW5mbyk7Ci0g
ICAgbV9zdmdDaGFycyA9IGNoYXJJbmZvLnN2Z0NoYXJzOwotCi0gICAgLy8gTm93IGFsbCBsYXlv
dXQgaW5mb3JtYXRpb24gYXJlIGF2YWlsYWJsZSBmb3IgZXZlcnkgY2hhcmFjdGVyCi0gICAgLy8g
Y29udGFpbmVkIGluIGFueSBvZiBvdXIgY2hpbGQgaW5saW5lL2Zsb3cgYm94ZXMuIEJ1aWxkIGxp
c3QKLSAgICAvLyBvZiB0ZXh0IGNodW5rcyBub3csIHRvIGJlIGFibGUgdG8gYXBwbHkgdGV4dC1h
bmNob3Igc2hpZnRzLgotICAgIFNWR1RleHRDaHVua0xheW91dEluZm8gY2h1bmtJbmZvOwotICAg
IGNodW5rSW5mby5idWlsZFRleHRDaHVua3MobV9zdmdDaGFycy5iZWdpbigpLCBtX3N2Z0NoYXJz
LmVuZCgpLCB0aGlzKTsKLQotICAgIC8vIExheW91dCBhbGwgdGV4dCBjaHVua3MKLSAgICAvLyB0
ZXh0LWFuY2hvciBuZWVkcyB0byBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgY2h1bmtzLgotICAg
IGNodW5rSW5mby5sYXlvdXRUZXh0Q2h1bmtzKCk7Ci0gICAgbV9zdmdUZXh0Q2h1bmtzID0gY2h1
bmtJbmZvLnRleHRDaHVua3MoKTsKKyAgICAvLyBQZXJmb3JtIFNWRyB0ZXh0IGxheW91dCBwaGFz
ZSB0d28gKHNlZSBTVkdUZXh0TGF5b3V0RW5naW5lIGZvciBkZXRhaWxzKS4KKyAgICBTVkdUZXh0
TGF5b3V0RW5naW5lIGNoYXJhY3RlckxheW91dDsKKyAgICBsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0
Qm94ZXModGhpcywgY2hhcmFjdGVyTGF5b3V0KTsKIAotICAgIC8vIFByb3BhZ2F0ZSB0ZXh0IGNo
dW5rIHBhcnQgaW5mb3JtYXRpb24gdG8gYWxsIFNWR0lubGluZVRleHRCb3hlcywgc2VlIFNWR1Rl
eHRDaHVua0xheW91dEluZm8uaCBmb3IgZGV0YWlscwotICAgIHByb3BhZ2F0ZVRleHRDaHVua1Bh
cnRJbmZvcm1hdGlvbigpOworICAgIC8vIFBlcmZvcm0gU1ZHIHRleHQgbGF5b3V0IHBoYXNlIHRo
cmVlIChzZWUgU1ZHVGV4dENodW5rQnVpbGRlciBmb3IgZGV0YWlscykuCisgICAgY2hhcmFjdGVy
TGF5b3V0LmZpbmlzaExheW91dCgpOwogCi0gICAgLy8gTGF5b3V0IGFsbCBjaGlsZCBib3hlcy4K
KyAgICAvLyBQZXJmb3JtIFNWRyB0ZXh0IGxheW91dCBwaGFzZSBmb3VyCisgICAgLy8gUG9zaXRp
b24gJiByZXNpemUgYWxsIFNWR0lubGluZVRleHQvRmxvd0JveGVzIGluIHRoZSBpbmxpbmUgYm94
IHRyZWUsIHJlc2l6ZSB0aGUgcm9vdCBib3ggYXMgd2VsbCBhcyB0aGUgUmVuZGVyU1ZHVGV4dCBw
YXJlbnQgYmxvY2suCiAgICAgbGF5b3V0Q2hpbGRCb3hlcyh0aGlzKTsKLQotICAgIC8vIFJlc2l6
ZSBvdXIgcm9vdCBib3ggYW5kIG91ciBSZW5kZXJTVkdUZXh0IHBhcmVudCBibG9jawogICAgIGxh
eW91dFJvb3RCb3goKTsKIH0KIAotdm9pZCBTVkdSb290SW5saW5lQm94OjpidWlsZExheW91dElu
Zm9ybWF0aW9uKElubGluZUZsb3dCb3gqIHN0YXJ0LCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvJiBp
bmZvKQordm9pZCBTVkdSb290SW5saW5lQm94OjpsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMo
SW5saW5lRmxvd0JveCogc3RhcnQsIFNWR1RleHRMYXlvdXRFbmdpbmUmIGNoYXJhY3RlckxheW91
dCkKIHsKLSAgICBpZiAoc3RhcnQtPmlzUm9vdElubGluZUJveCgpKSB7Ci0gICAgICAgIEFTU0VS
VChzdGFydC0+cmVuZGVyZXIoKS0+bm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0ZXh0VGFn
KSk7Ci0KLSAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCogcG9zaXRpb25pbmdFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCo+KHN0YXJ0LT5yZW5k
ZXJlcigpLT5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocG9zaXRpb25pbmdFbGVtZW50KTsKLSAg
ICAgICAgQVNTRVJUKHBvc2l0aW9uaW5nRWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKLQotICAgICAg
ICBpbmZvLmFkZExheW91dEluZm9ybWF0aW9uKHBvc2l0aW9uaW5nRWxlbWVudCk7Ci0gICAgfQor
ICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1NWR0lu
bGluZVRleHRCb3goKSkgeworICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5yZW5kZXJlcigpKTsK
KyAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+cmVuZGVyZXIoKS0+aXNTVkdJbmxpbmVUZXh0KCkp
OwogCi0gICAgU1ZHTGFzdEdseXBoSW5mbyBsYXN0R2x5cGg7Ci0gICAgCi0gICAgZm9yIChJbmxp
bmVCb3gqIGN1cnIgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4
dE9uTGluZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLT5pc1RleHQoKSkKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihjdXJyKS0+YnVpbGRMYXlv
dXRJbmZvcm1hdGlvbihpbmZvLCBsYXN0R2x5cGgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVChjdXJyLT5pc0lubGluZUZsb3dCb3goKSk7Ci0gICAgICAgICAgICBJbmxpbmVG
bG93Qm94KiBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIpOworICAg
ICAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0YXRpY19jYXN0PFNWR0lubGlu
ZVRleHRCb3gqPihjaGlsZCk7CisgICAgICAgICAgICBjaGFyYWN0ZXJMYXlvdXQubGF5b3V0SW5s
aW5lVGV4dEJveCh0ZXh0Qm94KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChjaGlsZC0+aXNJbmxpbmVGbG93Qm94KCkpOwogCiAgICAgICAgICAgICAvLyBTa2lwIGdlbmVy
YXRlZCBjb250ZW50LgotICAgICAgICAgICAgaWYgKCFmbG93Qm94LT5yZW5kZXJlcigpLT5ub2Rl
KCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gY2hpbGQtPnJlbmRlcmVyKCktPm5vZGUoKTsK
KyAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAgICAgYm9vbCBpc0FuY2hvciA9IGZsb3dCb3gtPnJlbmRlcmVyKCktPm5vZGUoKS0+aGFz
VGFnTmFtZShTVkdOYW1lczo6YVRhZyk7Ci0gICAgICAgICAgICBib29sIGlzVGV4dFBhdGggPSBm
bG93Qm94LT5yZW5kZXJlcigpLT5ub2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRleHRQYXRo
VGFnKTsKLQotICAgICAgICAgICAgaWYgKCFpc1RleHRQYXRoICYmICFpc0FuY2hvcikgewotICAg
ICAgICAgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqIHBvc2l0aW9uaW5nRWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihmbG93Qm94LT5yZW5k
ZXJlcigpLT5ub2RlKCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbmluZ0VsZW1l
bnQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbmluZ0VsZW1lbnQtPnBhcmVudE5v
ZGUoKSk7Ci0KLSAgICAgICAgICAgICAgICBpbmZvLmFkZExheW91dEluZm9ybWF0aW9uKHBvc2l0
aW9uaW5nRWxlbWVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0FuY2hvcikgewotICAg
ICAgICAgICAgICAgIGluZm8uc2V0SW5QYXRoTGF5b3V0KHRydWUpOwotCi0gICAgICAgICAgICAg
ICAgLy8gSGFuZGxlIHRleHQtYW5jaG9yL3RleHRMZW5ndGggb24gcGF0aCwgd2hpY2ggaXMgc3Bl
Y2lhbC4KLSAgICAgICAgICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQqIHRleHRDb250ZW50
ID0gMDsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gZmxvd0JveC0+cmVuZGVyZXIoKS0+
bm9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUtPmlzU1ZHRWxlbWVudCgp
KQotICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudCA9IHN0YXRpY19jYXN0PFNWR1RleHRD
b250ZW50RWxlbWVudCo+KG5vZGUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXh0Q29udGVu
dCk7Ci0KLSAgICAgICAgICAgICAgICBFTGVuZ3RoQWRqdXN0IGxlbmd0aEFkanVzdCA9IChFTGVu
Z3RoQWRqdXN0KSB0ZXh0Q29udGVudC0+bGVuZ3RoQWRqdXN0KCk7Ci0gICAgICAgICAgICAgICAg
RVRleHRBbmNob3IgYW5jaG9yID0gZmxvd0JveC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+c3ZnU3R5
bGUoKS0+dGV4dEFuY2hvcigpOwotICAgICAgICAgICAgICAgIGZsb2F0IHRleHRBbmNob3JTdGFy
dE9mZnNldCA9IDAuMGY7Ci0KLSAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIHN1Yi1sYXlv
dXQuIFdlIG5lZWQgdG8gY3JlYXRlIHRleHQgY2h1bmtzIGZyb20gdGhlIHRleHRQYXRoCi0gICAg
ICAgICAgICAgICAgLy8gY2hpbGRyZW4gdXNpbmcgb3VyIHN0YW5kYXJkIGxheW91dCBjb2RlLCB0
byBiZSBhYmxlIHRvIG1lYXN1cmUgdGhlCi0gICAgICAgICAgICAgICAgLy8gdGV4dCBsZW5ndGgg
dXNpbmcgb3VyIG5vcm1hbCBtZXRob2RzIGFuZCBub3QgdGV4dFBhdGggc3BlY2lmaWMgaGFja3Mu
Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFNWR1RleHRDaHVuaz4gdGVtcENodW5rczsKLQotICAg
ICAgICAgICAgICAgIFNWR0NoYXJhY3RlckxheW91dEluZm8gdGVtcENoYXJJbmZvOwotICAgICAg
ICAgICAgICAgIGJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oZmxvd0JveCwgdGVtcENoYXJJbmZvKTsK
LQotICAgICAgICAgICAgICAgIFNWR1RleHRDaHVua0xheW91dEluZm8gdGVtcENodW5rSW5mbzsK
LSAgICAgICAgICAgICAgICB0ZW1wQ2h1bmtJbmZvLmJ1aWxkVGV4dENodW5rcyh0ZW1wQ2hhcklu
Zm8uc3ZnQ2hhcnMuYmVnaW4oKSwgdGVtcENoYXJJbmZvLnN2Z0NoYXJzLmVuZCgpLCBmbG93Qm94
KTsKLSAgICAgICAgICAgICAgICB0ZW1wQ2h1bmtzID0gdGVtcENodW5rSW5mby50ZXh0Q2h1bmtz
KCk7Ci0KLSAgICAgICAgICAgICAgICBWZWN0b3I8U1ZHVGV4dENodW5rPjo6aXRlcmF0b3IgaXQg
PSB0ZW1wQ2h1bmtzLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFNWR1RleHRDaHVu
az46Oml0ZXJhdG9yIGVuZCA9IHRlbXBDaHVua3MuZW5kKCk7Ci0KLSAgICAgICAgICAgICAgICBm
bG9hdCBjb21wdXRlZExlbmd0aCA9IDAuMGY7Ci0gCi0gICAgICAgICAgICAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgICAgICBTVkdUZXh0Q2h1bmsmIGNodW5r
ID0gKml0OwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IHRleHQtbGVuZ3RoIGNhbGN1
bGF0aW9uCi0gICAgICAgICAgICAgICAgICAgIGluZm8ucGF0aEV4dHJhQWR2YW5jZSArPSBjYWxj
dWxhdGVUZXh0TGVuZ3RoQ29ycmVjdGlvbkZvclRleHRDaHVuayhjaHVuaywgbGVuZ3RoQWRqdXN0
LCBjb21wdXRlZExlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aEFkanVz
dCA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVTVF9TUEFDSU5HQU5ER0xZUEhT
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnBhdGhUZXh0TGVuZ3RoICs9IGNvbXB1
dGVkTGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5wYXRoQ2h1bmtMZW5ndGgg
Kz0gY2h1bmsudGV4dExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIENhbGN1bGF0ZSB0ZXh0LWFuY2hvciBzdGFydCBvZmZzZXQKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGFuY2hvciA9PSBUQV9TVEFSVCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIHRleHRBbmNob3JTdGFydE9mZnNl
dCArPSBjYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnRGb3JUZXh0Q2h1bmsoY2h1bmssIGFuY2hvcik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaW5mby5hZGRMYXlvdXRJbmZv
cm1hdGlvbihmbG93Qm94LCB0ZXh0QW5jaG9yU3RhcnRPZmZzZXQpOworICAgICAgICAgICAgU1ZH
SW5saW5lRmxvd0JveCogZmxvd0JveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZUZsb3dCb3gqPihj
aGlsZCk7CisgICAgICAgICAgICBib29sIGlzVGV4dFBhdGggPSBub2RlLT5oYXNUYWdOYW1lKFNW
R05hbWVzOjp0ZXh0UGF0aFRhZyk7CisgICAgICAgICAgICBpZiAoaXNUZXh0UGF0aCkgeworICAg
ICAgICAgICAgICAgIC8vIEJ1aWxkIHRleHQgY2h1bmtzIGZvciBhbGwgPHRleHRQYXRoPiBjaGls
ZHJlbiwgdXNpbmcgdGhlIGxpbmUgbGF5b3V0IGFsZ29yaXRobS4KKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIG5lZWRlZWQgYXMgdGV4dC1hbmNob3IgaXMganVzdCBhbiBhZGRpdGlvbmFsIHN0
YXJ0T2Zmc2V0IGZvciB0ZXh0IHBhdGhzLgorICAgICAgICAgICAgICAgIFNWR1RleHRMYXlvdXRF
bmdpbmUgbGluZUxheW91dDsKKyAgICAgICAgICAgICAgICBsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0
Qm94ZXMoZmxvd0JveCwgbGluZUxheW91dCk7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyTGF5
b3V0LmJlZ2luVGV4dFBhdGhMYXlvdXQoY2hpbGQtPnJlbmRlcmVyKCksIGxpbmVMYXlvdXQpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmbG9hdCBzaGlmdHhTYXZlZCA9IGluZm8uc2hp
ZnR4OwotICAgICAgICAgICAgZmxvYXQgc2hpZnR5U2F2ZWQgPSBpbmZvLnNoaWZ0eTsKLQotICAg
ICAgICAgICAgYnVpbGRMYXlvdXRJbmZvcm1hdGlvbihmbG93Qm94LCBpbmZvKTsKLSAgICAgICAg
ICAgIGluZm8ucHJvY2Vzc2VkQ2h1bmsoc2hpZnR4U2F2ZWQsIHNoaWZ0eVNhdmVkKTsKKyAgICAg
ICAgICAgIGxheW91dENoYXJhY3RlcnNJblRleHRCb3hlcyhmbG93Qm94LCBjaGFyYWN0ZXJMYXlv
dXQpOwogCiAgICAgICAgICAgICBpZiAoaXNUZXh0UGF0aCkKLSAgICAgICAgICAgICAgICBpbmZv
LnNldEluUGF0aExheW91dChmYWxzZSk7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyTGF5b3V0
LmVuZFRleHRQYXRoTGF5b3V0KCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xOTEsNyArMTI0
LDEwIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRMYXlvdXRJbmZvcm0KIHZvaWQgU1ZH
Um9vdElubGluZUJveDo6bGF5b3V0Q2hpbGRCb3hlcyhJbmxpbmVGbG93Qm94KiBzdGFydCkKIHsK
ICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+cmVuZGVy
ZXIoKS0+aXNUZXh0KCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1NWR0lubGluZVRleHRCb3go
KSkgeworICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAg
IEFTU0VSVChjaGlsZC0+cmVuZGVyZXIoKS0+aXNTVkdJbmxpbmVUZXh0KCkpOworCiAgICAgICAg
ICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4
dEJveCo+KGNoaWxkKTsKICAgICAgICAgICAgIEludFJlY3QgYm94UmVjdCA9IHRleHRCb3gtPmNh
bGN1bGF0ZUJvdW5kYXJpZXMoKTsKICAgICAgICAgICAgIHRleHRCb3gtPnNldFgoYm94UmVjdC54
KCkpOwpAQCAtMjAwLDcgKzEzNiw3IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Q2hp
bGRCb3hlcygKICAgICAgICAgICAgIHRleHRCb3gtPnNldExvZ2ljYWxIZWlnaHQoYm94UmVjdC5o
ZWlnaHQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmlz
SW5saW5lRmxvd0JveCgpKTsKLSAgIAorCiAgICAgICAgICAgICAvLyBTa2lwIGdlbmVyYXRlZCBj
b250ZW50LgogICAgICAgICAgICAgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS0+bm9kZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjU3LDEwNiArMTkzLDI3IEBAIHZvaWQgU1ZHUm9v
dElubGluZUJveDo6bGF5b3V0Um9vdEJveCgpCiAgICAgc2V0TGluZVRvcEJvdHRvbVBvc2l0aW9u
cygwLCBoZWlnaHRCbG9jayk7CiB9CiAKLXZvaWQgU1ZHUm9vdElubGluZUJveDo6cHJvcGFnYXRl
VGV4dENodW5rUGFydEluZm9ybWF0aW9uKCkKK0lubGluZUJveCogU1ZHUm9vdElubGluZUJveDo6
Y2xvc2VzdExlYWZDaGlsZEZvclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKLSNp
ZiBERUJVR19DSFVOS19QQVJUX1BST1BBR0FUSU9OID4gMAotICAgIExpc3RIYXNoU2V0PFNWR0lu
bGluZVRleHRCb3gqPiBib3hlczsKLSNlbmRpZgotCi0gICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0
ZXh0IGNodW5rcwotICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bms+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3N2Z1RleHRDaHVua3MuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8U1ZHVGV4dENo
dW5rPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N2Z1RleHRDaHVua3MuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFNWR1RleHRDaHVuayYgY2h1bmsgPSAqaXQ7Ci0g
ICAgICAgIGludCBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnMgPSAwOwotCi0gICAgICAgIC8vIExv
b3AgdGhyb3VnaCBhbGwgcmFuZ2VzIGNvbnRhaW5lZCBpbiB0aGlzIGNodW5rCi0gICAgICAgIGNv
bnN0IFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGJv
eEVuZCA9IGNodW5rLmJveGVzLmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxTVkdJbmxpbmVC
b3hDaGFyYWN0ZXJSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGJveEl0ID0gY2h1bmsuYm94ZXMuYmVn
aW4oKTsgYm94SXQgIT0gYm94RW5kOyArK2JveEl0KSB7Ci0gICAgICAgICAgICBjb25zdCBTVkdJ
bmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94SXQ7Ci0gICAgICAgICAgICBBU1NF
UlQocmFuZ2UuYm94LT5pc1NWR0lubGluZVRleHRCb3goKSk7Ci0KLSAgICAgICAgICAgIC8vIEFj
Y2VzcyBzdHlsZSAmIGZvbnQgaW5mb3JtYXRpb24gb2YgdGhpcyB0ZXh0IGJveAotICAgICAgICAg
ICAgU1ZHSW5saW5lVGV4dEJveCogcmFuZ2VUZXh0Qm94ID0gc3RhdGljX2Nhc3Q8U1ZHSW5saW5l
VGV4dEJveCo+KHJhbmdlLmJveCk7Ci0gICAgICAgICAgICByYW5nZVRleHRCb3gtPnNldENodW5r
VHJhbnNmb3JtYXRpb24oY2h1bmsuY3RtKTsKLQotICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4
dCA9IHJhbmdlVGV4dEJveC0+dGV4dFJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBBU1NFUlQodGV4
dCk7Ci0KLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgICAgICAgICBjb25zdCBGb250JiBmb250
ID0gc3R5bGUtPmZvbnQoKTsKLSAKLSAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgZmlyc3QgYW5k
IGxhc3QgY2hhcmFjdGVyIG9mIHRoaXMgcmFuZ2UgaW4gdGhpcyBjaHVuawotICAgICAgICAgICAg
aW50IHJhbmdlTGVuZ3RoID0gcmFuZ2UuZW5kT2Zmc2V0IC0gcmFuZ2Uuc3RhcnRPZmZzZXQ7Ci0g
ICAgICAgICAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0Q2hhckJlZ2luID0gY2h1bmsu
c3RhcnQgKyBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnM7Ci0gICAgICAgICAgICBWZWN0b3I8U1ZH
Q2hhcj46Oml0ZXJhdG9yIGl0Q2hhckVuZCA9IGNodW5rLnN0YXJ0ICsgcHJvY2Vzc2VkQ2h1bmtD
aGFyYWN0ZXJzICsgcmFuZ2VMZW5ndGg7Ci0gICAgICAgICAgICBBU1NFUlQoaXRDaGFyRW5kIDw9
IGNodW5rLmVuZCk7Ci0KLSAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgY2hhcmFjdGVy
cyBpbiByYW5nZSAKLSAgICAgICAgICAgIGludCBwcm9jZXNzZWRSYW5nZUNoYXJhY3RlcnMgPSAw
OwotICAgICAgICAgICAgZm9yIChWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0Q2hhciA9IGl0
Q2hhckJlZ2luOyBpdENoYXIgIT0gaXRDaGFyRW5kOyArK2l0Q2hhcikgewotICAgICAgICAgICAg
ICAgIGlmIChpdENoYXItPmlzSGlkZGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgKytwcm9j
ZXNzZWRSYW5nZUNoYXJhY3RlcnM7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIERldGVybWluZSBob3cgbWFueSBj
aGFyYWN0ZXJzIC0gc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAtIGNhbiBiZSBkcmF3biBhdCBv
bmNlLgotICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgaXRTZWFyY2gg
PSBpdENoYXIgKyAxOwotICAgICAgICAgICAgICAgIHdoaWxlIChpdFNlYXJjaCAhPSBpdENoYXJF
bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0U2VhcmNoLT5kcmF3blNlcGVyYXRlZCB8
fCBpdFNlYXJjaC0+aXNIaWRkZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICAgICAgICAgICsraXRTZWFyY2g7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRleHQgY2h1bmsgcGFydCBpbmZvcm1hdGlvbiBm
b3IgdGhpcyBjaHVuayBzdWItcmFuZ2UKLSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcGFy
dFN0YXJ0ID0gdGV4dC0+Y2hhcmFjdGVycygpICsgcmFuZ2VUZXh0Qm94LT5zdGFydCgpICsgcmFu
Z2Uuc3RhcnRPZmZzZXQgKyBwcm9jZXNzZWRSYW5nZUNoYXJhY3RlcnM7Ci0KLSAgICAgICAgICAg
ICAgICBTVkdUZXh0Q2h1bmtQYXJ0IHBhcnQ7Ci0gICAgICAgICAgICAgICAgcGFydC5maXJzdENo
YXJhY3RlciA9IGl0Q2hhcjsKLSAgICAgICAgICAgICAgICBwYXJ0Lmxlbmd0aCA9IGl0U2VhcmNo
IC0gaXRDaGFyOwotICAgICAgICAgICAgICAgIHBhcnQud2lkdGggPSBmb250LmZsb2F0V2lkdGgo
c3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3gocGFydFN0YXJ0LCBwYXJ0Lmxlbmd0aCwgc3R5bGUs
IHJhbmdlVGV4dEJveCkpOwotICAgICAgICAgICAgICAgIHBhcnQuaGVpZ2h0ID0gZm9udC5oZWln
aHQoKTsKLSAgICAgICAgICAgICAgICBwYXJ0Lm9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0ICsg
cHJvY2Vzc2VkUmFuZ2VDaGFyYWN0ZXJzOwotICAgICAgICAgICAgICAgIHJhbmdlVGV4dEJveC0+
YWRkQ2h1bmtQYXJ0SW5mb3JtYXRpb24ocGFydCk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2Vk
UmFuZ2VDaGFyYWN0ZXJzICs9IHBhcnQubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgLy8gU2tp
cCBwcm9jZXNzZWQgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgIGl0Q2hhciA9IGl0U2VhcmNo
IC0gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHByb2Nlc3NlZFJhbmdl
Q2hhcmFjdGVycyA9PSByYW5nZUxlbmd0aCk7Ci0gICAgICAgICAgICBwcm9jZXNzZWRDaHVua0No
YXJhY3RlcnMgKz0gcmFuZ2VMZW5ndGg7CisgICAgSW5saW5lQm94KiBmaXJzdExlYWYgPSBmaXJz
dExlYWZDaGlsZCgpOworICAgIElubGluZUJveCogbGFzdExlYWYgPSBsYXN0TGVhZkNoaWxkKCk7
CisgICAgaWYgKGZpcnN0TGVhZiA9PSBsYXN0TGVhZikKKyAgICAgICAgcmV0dXJuIGZpcnN0TGVh
ZjsKKworICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgdmVydGljYWwgdGV4dCEKKyAgICBJbmxpbmVC
b3gqIGNsb3Nlc3RMZWFmID0gMDsKKyAgICBmb3IgKElubGluZUJveCogbGVhZiA9IGZpcnN0TGVh
ZjsgbGVhZjsgbGVhZiA9IGxlYWYtPm5leHRMZWFmQ2hpbGQoKSkgeworICAgICAgICBpZiAocG9p
bnQueSgpIDwgbGVhZi0+bV95KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChw
b2ludC55KCkgPiBsZWFmLT5tX3kgKyBsZWFmLT52aXJ0dWFsTG9naWNhbEhlaWdodCgpKQorICAg
ICAgICAgICAgY29udGludWU7CiAKLSNpZiBERUJVR19DSFVOS19QQVJUX1BST1BBR0FUSU9OID4g
MAotICAgICAgICAgICAgYm94ZXMuYWRkKHJhbmdlVGV4dEJveCk7Ci0jZW5kaWYKLSAgICAgICAg
fQorICAgICAgICBjbG9zZXN0TGVhZiA9IGxlYWY7CisgICAgICAgIGlmIChwb2ludC54KCkgPCBs
ZWFmLT5tX3ggKyBsZWFmLT5tX2xvZ2ljYWxXaWR0aCkKKyAgICAgICAgICAgIHJldHVybiBsZWFm
OwogICAgIH0KIAotI2lmIERFQlVHX0NIVU5LX1BBUlRfUFJPUEFHQVRJT04gPiAwCi0gICAgewot
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlByb3BhZ2F0ZWQgdGV4dCBjaHVuayBwYXJ0IGluZm9y
bWF0aW9uOlxuIik7Ci0KLSAgICAgICAgTGlzdEhhc2hTZXQ8U1ZHSW5saW5lVGV4dEJveCo+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGJveGVzLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IExpc3RIYXNo
U2V0PFNWR0lubGluZVRleHRCb3gqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYm94ZXMuZW5kKCk7
Ci0KLSAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgY29uc3Qg
U1ZHSW5saW5lVGV4dEJveCogYm94ID0gKml0OwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNW
R1RleHRDaHVua1BhcnQ+JiBwYXJ0cyA9IGJveC0+c3ZnVGV4dENodW5rUGFydHMoKTsKLQotICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgQm94ICVwIGNvbnRhaW5zICVpIHRleHQgY2h1bmsg
cGFydHM6XG4iLCBib3gsIHN0YXRpY19jYXN0PGludD4ocGFydHMuc2l6ZSgpKSk7Ci0gICAgICAg
ICAgICBWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIHBhcnRJdCA9IHBh
cnRzLmJlZ2luKCk7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46
OmNvbnN0X2l0ZXJhdG9yIHBhcnRFbmQgPSBwYXJ0cy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAo
OyBwYXJ0SXQgIT0gcGFydEVuZDsgKytwYXJ0SXQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBT
VkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0ID0gKnBhcnRJdDsKLSAgICAgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiAgIC0+IGZpcnN0Q2hhcmFjdGVyIHg9JWxmLCB5PSVsZiwgb2Zmc2V0PSVpLCBs
ZW5ndGg9JWksIHdpZHRoPSVsZiwgaGVpZ2h0PSVsZiwgdGV4dFJlbmRlcmVyPSVwXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHBhcnQuZmlyc3RDaGFyYWN0ZXItPngsIHBhcnQu
Zmlyc3RDaGFyYWN0ZXItPnksIHBhcnQub2Zmc2V0LCBwYXJ0Lmxlbmd0aCwgcGFydC53aWR0aCwg
cGFydC5oZWlnaHQsIGJveC0+dGV4dFJlbmRlcmVyKCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotI2VuZGlmCisgICAgcmV0dXJuIGNsb3Nlc3RMZWFmID8gY2xvc2VzdExlYWYg
OiBsYXN0TGVhZjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lvbiA2ODg3NCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDEwICsyNiw4IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3gu
aCIKLSNpbmNsdWRlICJTVkdDaGFyYWN0ZXJEYXRhLmgiCi0jaW5jbHVkZSAiU1ZHQ2hhcmFjdGVy
TGF5b3V0SW5mby5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJT
VkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDE0ICszNywxNCBAQCBjbGFzcyBTVkdS
b290SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpCiBwdWJsaWM6CiAgICAgU1ZHUm9vdElubGlu
ZUJveChSZW5kZXJCbG9jayogYmxvY2spCiAgICAgICAgIDogUm9vdElubGluZUJveChibG9jaykK
LSAgICAgICAgLCBtX2xvZ2ljYWxIZWlnaHQoMCkKKyAgICAgICAgLCBtX2hlaWdodCgwKQogICAg
IHsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290SW5saW5lQm94KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBpbnQgdmlydHVhbExvZ2ljYWxIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxIZWlnaHQ7IH0KLSAgICB2b2lkIHNldExvZ2ljYWxI
ZWlnaHQoaW50IGhlaWdodCkgeyBtX2xvZ2ljYWxIZWlnaHQgPSBoZWlnaHQ7IH0KKyAgICB2aXJ0
dWFsIGludCB2aXJ0dWFsTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9
CisgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGludCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWln
aHQ7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0
eSk7CiAKQEAgLTU1LDIwICs1MywxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyBy
ZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAotICAgIC8vIFVzZWQgYnkgU1ZHUmVuZGVyVHJlZUFzVGV4
dAotICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bms+JiBzdmdUZXh0Q2h1bmtzKCkgY29uc3Qg
eyByZXR1cm4gbV9zdmdUZXh0Q2h1bmtzOyB9CisgICAgSW5saW5lQm94KiBjbG9zZXN0TGVhZkNo
aWxkRm9yUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHBy
b3BhZ2F0ZVRleHRDaHVua1BhcnRJbmZvcm1hdGlvbigpOwotICAgIHZvaWQgYnVpbGRMYXlvdXRJ
bmZvcm1hdGlvbihJbmxpbmVGbG93Qm94KiBzdGFydCwgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYp
OwotCisgICAgdm9pZCBsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMoSW5saW5lRmxvd0JveCos
IFNWR1RleHRMYXlvdXRFbmdpbmUmKTsKKyAgICB2b2lkIGxheW91dENoaWxkQm94ZXMoSW5saW5l
Rmxvd0JveCopOwogICAgIHZvaWQgbGF5b3V0Um9vdEJveCgpOwotICAgIHZvaWQgbGF5b3V0Q2hp
bGRCb3hlcyhJbmxpbmVGbG93Qm94KiBzdGFydCk7CiAKIHByaXZhdGU6Ci0gICAgaW50IG1fbG9n
aWNhbEhlaWdodDsKLSAgICBWZWN0b3I8U1ZHQ2hhcj4gbV9zdmdDaGFyczsKLSAgICBWZWN0b3I8
U1ZHVGV4dENodW5rPiBtX3N2Z1RleHRDaHVua3M7CisgICAgaW50IG1faGVpZ2h0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRDaHVuay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRD
aHVuay5jcHAJKHJldmlzaW9uIDY4ODczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRDaHVuay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSw5IEBACiAjaW5jbHVkZSAi
U1ZHSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR1RleHRGcmFnbWVudC5oIgogCi0jaW5j
bHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklY
TUU6IFJlbmFtZSB0byBTVkdUZXh0Q2h1bmssIG9uY2UgdGhlIG5ldyBsYXlvdXQgZW5naW5lIGhh
cyBsYW5kZWQuCi1TVkdUZXh0Q2h1bmtOZXc6OlNWR1RleHRDaHVua05ldyhib29sIGlzVmVydGlj
YWxUZXh0LCBFVGV4dEFuY2hvciB0ZXh0QW5jaG9yLCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlNW
R0xlbmd0aEFkanVzdFR5cGUgbGVuZ3RoQWRqdXN0LCBmbG9hdCBkZXNpcmVkVGV4dExlbmd0aCkK
K1NWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKGJvb2wgaXNWZXJ0aWNhbFRleHQsIEVUZXh0QW5j
aG9yIHRleHRBbmNob3IsIFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHTGVuZ3RoQWRqdXN0VHlw
ZSBsZW5ndGhBZGp1c3QsIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoKQogICAgIDogbV9pc1ZlcnRp
Y2FsVGV4dChpc1ZlcnRpY2FsVGV4dCkKICAgICAsIG1fdGV4dEFuY2hvcih0ZXh0QW5jaG9yKQog
ICAgICwgbV9sZW5ndGhBZGp1c3QobGVuZ3RoQWRqdXN0KQpAQCAtMzgsMTggKzM1LDE0IEBAIFNW
R1RleHRDaHVua05ldzo6U1ZHVGV4dENodW5rTmV3KGJvb2wgaXMKIHsKIH0KIAotdm9pZCBTVkdU
ZXh0Q2h1bmtOZXc6OmNhbGN1bGF0ZUxlbmd0aChmbG9hdCYgbGVuZ3RoLCB1bnNpZ25lZCYgY2hh
cmFjdGVycykgY29uc3QKK3ZvaWQgU1ZHVGV4dENodW5rOjpjYWxjdWxhdGVMZW5ndGgoZmxvYXQm
IGxlbmd0aCwgdW5zaWduZWQmIGNoYXJhY3RlcnMpIGNvbnN0CiB7CiAgICAgU1ZHVGV4dEZyYWdt
ZW50KiBsYXN0RnJhZ21lbnQgPSAwOwogCiAgICAgdW5zaWduZWQgYm94Q291bnQgPSBtX2JveGVz
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRpb24g
PCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewogICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0
ZXh0Qm94ID0gbV9ib3hlcy5hdChib3hQb3NpdGlvbik7Ci0KLSAgICAgICAgLy8gRklYTUU6IEVu
YWJsZSB0aGlzIGNvZGUsIG9uY2UgdGhlIG5ldyBsYXlvdXQgZW5naW5lIGhhcyBsYW5kZWQhIFRo
aXMgaXMgbm9uZnVuY3Rpb25hbCBmb3Igbm93LgotICAgICAgICAvLyBWZWN0b3I8U1ZHVGV4dEZy
YWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOwotICAgICAgICBW
ZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiBmcmFnbWVudHM7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0
ZXh0Qm94KTsKKyAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9IHRl
eHRCb3gtPnRleHRGcmFnbWVudHMoKTsKIAogICAgICAgICB1bnNpZ25lZCBzaXplID0gZnJhZ21l
bnRzLnNpemUoKTsKICAgICAgICAgaWYgKCFzaXplKQpAQCAtODAsNyArNzMsNyBAQCB2b2lkIFNW
R1RleHRDaHVua05ldzo6Y2FsY3VsYXRlTGVuZ3RoKGZsCiAgICAgfQogfQogCi1mbG9hdCBTVkdU
ZXh0Q2h1bmtOZXc6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChmbG9hdCBsZW5ndGgpIGNvbnN0
CitmbG9hdCBTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChmbG9hdCBsZW5n
dGgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3RleHRBbmNob3IpIHsKICAgICBjYXNlIFRBX1NU
QVJUOgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaAkocmV2aXNpb24gNjg4
NzMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEwICsyOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNWR0lubGlu
ZVRleHRCb3g7CiAKIC8vIEEgU1ZHVGV4dENodW5rIGRlc2NyaWJlcyBhIHJhbmdlIG9mIFNWR1Rl
eHRGcmFnbWVudHMsIHNlZSB0aGUgU1ZHIHNwZWMgZGVmaW5pdGlvbiBvZiBhICJ0ZXh0IGNodW5r
Ii4KLS8vIEZJWE1FOiBSZW5hbWUgdG8gU1ZHVGV4dENodW5rLCBvbmNlIHRoZSBuZXcgbGF5b3V0
IGVuZ2luZSBoYXMgbGFuZGVkLgotY2xhc3MgU1ZHVGV4dENodW5rTmV3IHsKK2NsYXNzIFNWR1Rl
eHRDaHVuayB7CiBwdWJsaWM6Ci0gICAgU1ZHVGV4dENodW5rTmV3KGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIEVUZXh0QW5jaG9yLCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFkanVzdFR5
cGUsIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoKTsKKyAgICBTVkdUZXh0Q2h1bmsoYm9vbCBpc1Zl
cnRpY2FsVGV4dCwgRVRleHRBbmNob3IsIFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHTGVuZ3Ro
QWRqdXN0VHlwZSwgZmxvYXQgZGVzaXJlZFRleHRMZW5ndGgpOwogCiAgICAgdm9pZCBjYWxjdWxh
dGVMZW5ndGgoZmxvYXQmIGxlbmd0aCwgdW5zaWduZWQmIGNoYXJhY3RlcnMpIGNvbnN0OwogICAg
IGZsb2F0IGNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChmbG9hdCBsZW5ndGgpIGNvbnN0OwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHVGV4dENodW5r
QnVpbGRlci5oIgorCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorI2luY2x1ZGUg
IlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU1ZHVGV4dENodW5rQnVpbGRlcjo6U1ZHVGV4dENodW5rQnVpbGRlcigp
Cit7Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6dHJhbnNmb3JtYXRpb25Gb3JUZXh0
Qm94KFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KSBjb25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
LCBzX2lkZW50aXR5VHJhbnNmb3JtLCAoKSk7CisgICAgaWYgKCFtX3RleHRCb3hUcmFuc2Zvcm1h
dGlvbnMuY29udGFpbnModGV4dEJveCkpeworICAgICAgICB0cmFuc2Zvcm0gPSBzX2lkZW50aXR5
VHJhbnNmb3JtOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdHJhbnNmb3JtID0gbV90
ZXh0Qm94VHJhbnNmb3JtYXRpb25zLmdldCh0ZXh0Qm94KTsKK30KKwordm9pZCBTVkdUZXh0Q2h1
bmtCdWlsZGVyOjpidWlsZFRleHRDaHVua3MoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGlu
ZUxheW91dEJveGVzKQoreworICAgIGlmIChsaW5lTGF5b3V0Qm94ZXMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBib29sIGZvdW5kU3RhcnQgPSBmYWxzZTsKKyAgICB1bnNpZ25l
ZCBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBib3hQb3NpdGlvbiA9
IDA7CisgICAgdW5zaWduZWQgYm94Q291bnQgPSBsaW5lTGF5b3V0Qm94ZXMuc2l6ZSgpOworICAg
IGZvciAoOyBib3hQb3NpdGlvbiA8IGJveENvdW50OyArK2JveFBvc2l0aW9uKSB7CisgICAgICAg
IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBsaW5lTGF5b3V0Qm94ZXMuYXQoYm94UG9zaXRp
b24pOworICAgICAgICBpZiAoIXRleHRCb3gtPnN0YXJ0c05ld1RleHRDaHVuaygpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFmb3VuZFN0YXJ0KSB7CisgICAgICAgICAg
ICBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uID0gYm94UG9zaXRpb247CisgICAgICAgICAgICBmb3Vu
ZFN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChib3hQ
b3NpdGlvbiA+IGxhc3RDaHVua1N0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgYWRkVGV4dENo
dW5rKGxpbmVMYXlvdXRCb3hlcywgbGFzdENodW5rU3RhcnRQb3NpdGlvbiwgYm94UG9zaXRpb24g
LSBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGxhc3RDaHVua1N0YXJ0UG9z
aXRpb24gPSBib3hQb3NpdGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZm91bmRT
dGFydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGJveFBvc2l0aW9uIC0gbGFzdENodW5r
U3RhcnRQb3NpdGlvbiA+IDApCisgICAgICAgIGFkZFRleHRDaHVuayhsaW5lTGF5b3V0Qm94ZXMs
IGxhc3RDaHVua1N0YXJ0UG9zaXRpb24sIGJveFBvc2l0aW9uIC0gbGFzdENodW5rU3RhcnRQb3Np
dGlvbik7Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6bGF5b3V0VGV4dENodW5rcyhW
ZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpCit7CisgICAgYnVpbGRU
ZXh0Q2h1bmtzKGxpbmVMYXlvdXRCb3hlcyk7CisgICAgaWYgKG1fdGV4dENodW5rcy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGNodW5rQ291bnQgPSBtX3RleHRD
aHVua3Muc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaHVua0NvdW50OyAr
K2kpCisgICAgICAgIHByb2Nlc3NUZXh0Q2h1bmsobV90ZXh0Q2h1bmtzLmF0KGkpKTsKKworICAg
IG1fdGV4dENodW5rcy5jbGVhcigpOworfQorCit2b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OmFk
ZFRleHRDaHVuayhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVu
c2lnbmVkIGJveFN0YXJ0LCB1bnNpZ25lZCBib3hDb3VudCkKK3sKKyAgICBTVkdJbmxpbmVUZXh0
Qm94KiB0ZXh0Qm94ID0gbGluZUxheW91dEJveGVzLmF0KGJveFN0YXJ0KTsKKyAgICBBU1NFUlQo
dGV4dEJveCk7CisKKyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1Jl
bmRlclNWR0lubGluZVRleHQodGV4dEJveC0+dGV4dFJlbmRlcmVyKCkpOworICAgIEFTU0VSVCh0
ZXh0UmVuZGVyZXIpOworCisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dFJlbmRl
cmVyLT5zdHlsZSgpOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUp
OworCisgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpTVkdMZW5ndGhBZGp1c3RUeXBlIGxlbmd0
aEFkanVzdCA9IFNWR1RleHRDb250ZW50RWxlbWVudDo6TEVOR1RIQURKVVNUX1VOS05PV047Cisg
ICAgZmxvYXQgZGVzaXJlZFRleHRMZW5ndGggPSAwOworCisgICAgaWYgKFNWR1RleHRDb250ZW50
RWxlbWVudCogdGV4dENvbnRlbnRFbGVtZW50ID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjplbGVt
ZW50RnJvbVJlbmRlcmVyKHRleHRSZW5kZXJlci0+cGFyZW50KCkpKSB7CisgICAgICAgIGxlbmd0
aEFkanVzdCA9IHN0YXRpY19jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHTGVuZ3RoQWRq
dXN0VHlwZT4odGV4dENvbnRlbnRFbGVtZW50LT5sZW5ndGhBZGp1c3QoKSk7CisgICAgICAgIGRl
c2lyZWRUZXh0TGVuZ3RoID0gdGV4dENvbnRlbnRFbGVtZW50LT50ZXh0TGVuZ3RoKCkudmFsdWUo
dGV4dENvbnRlbnRFbGVtZW50KTsKKyAgICB9CisKKyAgICBTVkdUZXh0Q2h1bmsgY2h1bmsoc3Zn
U3R5bGUtPmlzVmVydGljYWxXcml0aW5nTW9kZSgpLCBzdmdTdHlsZS0+dGV4dEFuY2hvcigpLCBs
ZW5ndGhBZGp1c3QsIGRlc2lyZWRUZXh0TGVuZ3RoKTsKKworICAgIFZlY3RvcjxTVkdJbmxpbmVU
ZXh0Qm94Kj4mIGJveGVzID0gY2h1bmsuYm94ZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBi
b3hTdGFydDsgaSA8IGJveFN0YXJ0ICsgYm94Q291bnQ7ICsraSkKKyAgICAgICAgYm94ZXMuYXBw
ZW5kKGxpbmVMYXlvdXRCb3hlcy5hdChpKSk7CisKKyAgICBtX3RleHRDaHVua3MuYXBwZW5kKGNo
dW5rKTsKK30KKwordm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpwcm9jZXNzVGV4dENodW5rKGNv
bnN0IFNWR1RleHRDaHVuayYgY2h1bmspCit7CisgICAgYm9vbCBwcm9jZXNzVGV4dExlbmd0aCA9
IGNodW5rLmhhc0Rlc2lyZWRUZXh0TGVuZ3RoKCk7CisgICAgYm9vbCBwcm9jZXNzVGV4dEFuY2hv
ciA9IGNodW5rLmhhc1RleHRBbmNob3IoKTsKKyAgICBpZiAoIXByb2Nlc3NUZXh0QW5jaG9yICYm
ICFwcm9jZXNzVGV4dExlbmd0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVmVjdG9y
PFNWR0lubGluZVRleHRCb3gqPiYgYm94ZXMgPSBjaHVuay5ib3hlcygpOworICAgIHVuc2lnbmVk
IGJveENvdW50ID0gYm94ZXMuc2l6ZSgpOworICAgIGlmICghYm94Q291bnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIENhbGN1bGF0ZSBhYnNvbHV0ZSBsZW5ndGggb2Ygd2hvbGUgdGV4dCBj
aHVuayAoc3RhcnRpbmcgZnJvbSB0ZXh0IGJveCAnc3RhcnQnLCBzcGFubmluZyAnbGVuZ3RoJyB0
ZXh0IGJveGVzKS4KKyAgICBmbG9hdCBjaHVua0xlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgY2h1
bmtDaGFyYWN0ZXJzID0gMDsKKyAgICBjaHVuay5jYWxjdWxhdGVMZW5ndGgoY2h1bmtMZW5ndGgs
IGNodW5rQ2hhcmFjdGVycyk7CisKKyAgICBib29sIGlzVmVydGljYWxUZXh0ID0gY2h1bmsuaXNW
ZXJ0aWNhbFRleHQoKTsKKyAgICBpZiAocHJvY2Vzc1RleHRMZW5ndGgpIHsKKyAgICAgICAgaWYg
KGNodW5rLmxlbmd0aEFkanVzdCgpID09IFNWR1RleHRDb250ZW50RWxlbWVudDo6TEVOR1RIQURK
VVNUX1NQQUNJTkcpIHsKKyAgICAgICAgICAgIGZsb2F0IHRleHRMZW5ndGhTaGlmdCA9IChjaHVu
ay5kZXNpcmVkVGV4dExlbmd0aCgpIC0gY2h1bmtMZW5ndGgpIC8gY2h1bmtDaGFyYWN0ZXJzOwor
ICAgICAgICAgICAgdW5zaWduZWQgYXRDaGFyYWN0ZXIgPSAwOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBib3hQb3NpdGlvbiA9IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9z
aXRpb24pIHsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21l
bnRzID0gYm94ZXMuYXQoYm94UG9zaXRpb24pLT50ZXh0RnJhZ21lbnRzKCk7CisgICAgICAgICAg
ICAgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOyAgICAKKyAgICAgICAgICAgICAgICBwcm9jZXNzVGV4dExlbmd0aFNwYWNpbmdDb3JyZWN0
aW9uKGlzVmVydGljYWxUZXh0LCB0ZXh0TGVuZ3RoU2hpZnQsIGZyYWdtZW50cywgYXRDaGFyYWN0
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KGNodW5rLmxlbmd0aEFkanVzdCgpID09IFNWR1RleHRDb250ZW50RWxlbWVudDo6TEVOR1RIQURK
VVNUX1NQQUNJTkdBTkRHTFlQSFMpOworICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBjaHVuay5k
ZXNpcmVkVGV4dExlbmd0aCgpIC8gY2h1bmtMZW5ndGg7CisgICAgICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybTsKKworICAgICAgICAgICAgYm9vbCBmb3Vu
ZEZpcnN0RnJhZ21lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYm94UG9z
aXRpb24gPSAwOyBib3hQb3NpdGlvbiA8IGJveENvdW50OyArK2JveFBvc2l0aW9uKSB7CisgICAg
ICAgICAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IGJveGVzLmF0KGJveFBvc2l0
aW9uKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRz
ID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOworICAgICAgICAgICAgICAgIGlmIChmcmFnbWVu
dHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoIWZvdW5kRmlyc3RGcmFnbWVudCkgeworICAgICAgICAgICAgICAgICAg
ICBmb3VuZEZpcnN0RnJhZ21lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBidWlsZFNw
YWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oaXNWZXJ0aWNhbFRleHQsIHNjYWxlLCBmcmFnbWVudHMu
Zmlyc3QoKSwgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgbV90ZXh0Qm94VHJhbnNmb3JtYXRpb25zLnNldCh0ZXh0Qm94LCBz
cGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghcHJvY2Vzc1RleHRBbmNob3IpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIElmIHdlIHByZXZpb3VzbHkgYXBwbGllZCBhIGxlbmd0aEFkanVzdD0ic3BhY2luZyIgY29y
cmVjdGlvbiwgd2UgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGUgY2h1bmsgbGVuZ3RoLCB0byBiZSBh
YmxlIHRvIGFwcGx5IHRoZSB0ZXh0LWFuY2hvciBzaGlmdC4KKyAgICBpZiAocHJvY2Vzc1RleHRM
ZW5ndGggJiYgY2h1bmsubGVuZ3RoQWRqdXN0KCkgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpM
RU5HVEhBREpVU1RfU1BBQ0lORykgeworICAgICAgICBjaHVua0xlbmd0aCA9IDA7CisgICAgICAg
IGNodW5rQ2hhcmFjdGVycyA9IDA7CisgICAgICAgIGNodW5rLmNhbGN1bGF0ZUxlbmd0aChjaHVu
a0xlbmd0aCwgY2h1bmtDaGFyYWN0ZXJzKTsKKyAgICB9CisKKyAgICBmbG9hdCB0ZXh0QW5jaG9y
U2hpZnQgPSBjaHVuay5jYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnQoY2h1bmtMZW5ndGgpOworICAg
IGZvciAodW5zaWduZWQgYm94UG9zaXRpb24gPSAwOyBib3hQb3NpdGlvbiA8IGJveENvdW50OyAr
K2JveFBvc2l0aW9uKSB7CisgICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVu
dHMgPSBib3hlcy5hdChib3hQb3NpdGlvbiktPnRleHRGcmFnbWVudHMoKTsKKyAgICAgICAgaWYg
KGZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcHJv
Y2Vzc1RleHRBbmNob3JDb3JyZWN0aW9uKGlzVmVydGljYWxUZXh0LCB0ZXh0QW5jaG9yU2hpZnQs
IGZyYWdtZW50cyk7CisgICAgfQorfQorCit2b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OnByb2Nl
c3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQg
dGV4dExlbmd0aFNoaWZ0LCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzLCB1bnNp
Z25lZCYgYXRDaGFyYWN0ZXIpCit7CisgICAgdW5zaWduZWQgZnJhZ21lbnRDb3VudCA9IGZyYWdt
ZW50cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50Q291bnQ7
ICsraSkgeworICAgICAgICBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0
KGkpOworCisgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGZyYWdtZW50
LnkgKz0gdGV4dExlbmd0aFNoaWZ0ICogYXRDaGFyYWN0ZXI7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGZyYWdtZW50LnggKz0gdGV4dExlbmd0aFNoaWZ0ICogYXRDaGFyYWN0ZXI7CisKKyAg
ICAgICAgYXRDaGFyYWN0ZXIgKz0gZnJhZ21lbnQubGVuZ3RoOworICAgIH0KK30KKwordm9pZCBT
VkdUZXh0Q2h1bmtCdWlsZGVyOjpwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24oYm9vbCBpc1Zl
cnRpY2FsVGV4dCwgZmxvYXQgdGV4dEFuY2hvclNoaWZ0LCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50
PiYgZnJhZ21lbnRzKQoreworICAgIHVuc2lnbmVkIGZyYWdtZW50Q291bnQgPSBmcmFnbWVudHMu
c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudENvdW50OyArK2kp
IHsKKyAgICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsK
KworICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICBmcmFnbWVudC55ICs9
IHRleHRBbmNob3JTaGlmdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnJhZ21lbnQueCAr
PSB0ZXh0QW5jaG9yU2hpZnQ7CisgICAgfQorfQorCit2b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6
OmJ1aWxkU3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybShib29sIGlzVmVydGljYWxUZXh0LCBmbG9h
dCBzY2FsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgQWZmaW5lVHJhbnNmb3Jt
JiBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKQoreworICAgIHNwYWNpbmdBbmRHbHlwaHNUcmFu
c2Zvcm0udHJhbnNsYXRlKGZyYWdtZW50LngsIGZyYWdtZW50LnkpOworCisgICAgaWYgKGlzVmVy
dGljYWxUZXh0KQorICAgICAgICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtLnNjYWxlTm9uVW5p
Zm9ybSgxLCBzY2FsZSk7CisgICAgZWxzZQorICAgICAgICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNm
b3JtLnNjYWxlTm9uVW5pZm9ybShzY2FsZSwgMSk7CisKKyAgICBzcGFjaW5nQW5kR2x5cGhzVHJh
bnNmb3JtLnRyYW5zbGF0ZSgtZnJhZ21lbnQueCwgLWZyYWdtZW50LnkpOworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRD
aHVua0J1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dENodW5rQnVpbGRlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRDaHVua0J1aWxkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBTVkdUZXh0Q2h1bmtCdWlsZGVyX2gKKyNkZWZpbmUgU1ZHVGV4
dENodW5rQnVpbGRlcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR1RleHRDaHVu
ay5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTVkdJbmxpbmVUZXh0Qm94Oworc3RydWN0IFNWR1RleHRGcmFnbWVudDsKKworLy8gU1ZH
VGV4dENodW5rQnVpbGRlciBwZXJmb3JtcyB0aGUgdGhpcmQgbGF5b3V0IHBoYXNlIGZvciBTVkcg
dGV4dC4KKy8vCisvLyBQaGFzZSBvbmUgYnVpbHQgdGhlIGxheW91dCBpbmZvcm1hdGlvbiBmcm9t
IHRoZSBTVkcgRE9NIHN0b3JlZCBpbiB0aGUgUmVuZGVyU1ZHSW5saW5lVGV4dCBvYmplY3RzIChT
VkdUZXh0TGF5b3V0QXR0cmlidXRlcykuCisvLyBQaGFzZSB0d28gcGVyZm9ybWVkIHRoZSBhY3R1
YWwgcGVyLWNoYXJhY3RlciBsYXlvdXQsIGNvbXB1dGluZyB0aGUgZmluYWwgcG9zaXRpb25zIGZv
ciBlYWNoIGNoYXJhY3Rlciwgc3RvcmVkIGluIHRoZSBTVkdJbmxpbmVUZXh0Qm94IG9iamVjdHMg
KFNWR1RleHRGcmFnbWVudCkuCisvLyBQaGFzZSB0aHJlZSBwZXJmb3JtcyBhbGwgbW9kaWZpY2F0
aW9ucyB0aGF0IGhhdmUgdG8gYmUgYXBwbGllZCB0byBlYWNoIGluZGl2aWR1YWwgdGV4dCBjaHVu
ayAodGV4dC1hbmNob3IgJiB0ZXh0TGVuZ3RoKS4KKworY2xhc3MgU1ZHVGV4dENodW5rQnVpbGRl
ciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgU1ZHVGV4dENodW5rQnVpbGRl
cigpOworCisgICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVuaz4mIHRleHRDaHVua3MoKSBjb25z
dCB7IHJldHVybiBtX3RleHRDaHVua3M7IH0KKyAgICB2b2lkIHRyYW5zZm9ybWF0aW9uRm9yVGV4
dEJveChTVkdJbmxpbmVUZXh0Qm94KiwgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7CisKKyAgICB2
b2lkIGJ1aWxkVGV4dENodW5rcyhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0
Qm94ZXMpOworICAgIHZvaWQgbGF5b3V0VGV4dENodW5rcyhWZWN0b3I8U1ZHSW5saW5lVGV4dEJv
eCo+JiBsaW5lTGF5b3V0Qm94ZXMpOworCitwcml2YXRlOgorICAgIHZvaWQgYWRkVGV4dENodW5r
KFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcywgdW5zaWduZWQgYm94
UG9zaXRpb24sIHVuc2lnbmVkIGJveENvdW50KTsKKyAgICB2b2lkIHByb2Nlc3NUZXh0Q2h1bmso
Y29uc3QgU1ZHVGV4dENodW5rJik7CisKKyAgICB2b2lkIHByb2Nlc3NUZXh0TGVuZ3RoU3BhY2lu
Z0NvcnJlY3Rpb24oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgdGV4dExlbmd0aFNoaWZ0LCBW
ZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYsIHVuc2lnbmVkJiBhdENoYXJhY3Rlcik7CisgICAgdm9p
ZCBwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQg
dGV4dEFuY2hvclNoaWZ0LCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYpOworICAgIHZvaWQgYnVp
bGRTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IHNj
YWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBBZmZpbmVUcmFuc2Zvcm0mKTsKKworcHJpdmF0
ZToKKyAgICBWZWN0b3I8U1ZHVGV4dENodW5rPiBtX3RleHRDaHVua3M7CisgICAgSGFzaE1hcDxT
VkdJbmxpbmVUZXh0Qm94KiwgQWZmaW5lVHJhbnNmb3JtPiBtX3RleHRCb3hUcmFuc2Zvcm1hdGlv
bnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlcy5jcHAJKHJldmlzaW9uIDY4ODY3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMg
KzMxLDEzIEBAIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpTVkdUZXh0TGF5b3V0QXQKIHsKIH0K
IAotdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZmlsbFdpdGhFbXB0eVZhbHVlcyh1bnNp
Z25lZCBsZW5ndGgpCit2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpyZXNlcnZlQ2FwYWNp
dHkodW5zaWduZWQgbGVuZ3RoKQogewotICAgIG1feFZhbHVlcy5maWxsKGVtcHR5VmFsdWUoKSwg
bGVuZ3RoKTsKLSAgICBtX3lWYWx1ZXMuZmlsbChlbXB0eVZhbHVlKCksIGxlbmd0aCk7Ci0gICAg
bV9keFZhbHVlcy5maWxsKGVtcHR5VmFsdWUoKSwgbGVuZ3RoKTsKLSAgICBtX2R5VmFsdWVzLmZp
bGwoZW1wdHlWYWx1ZSgpLCBsZW5ndGgpOwotICAgIG1fcm90YXRlVmFsdWVzLmZpbGwoZW1wdHlW
YWx1ZSgpLCBsZW5ndGgpOworICAgIG1feFZhbHVlcy5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsK
KyAgICBtX3lWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgbV9keFZhbHVlcy5y
ZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICBtX2R5VmFsdWVzLnJlc2VydmVDYXBhY2l0eShs
ZW5ndGgpOworICAgIG1fcm90YXRlVmFsdWVzLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogfQog
CiBmbG9hdCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpCkBAIC00Niw3ICs0
Niw3IEBAIGZsb2F0IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHUKICAgICByZXR1
cm4gc19lbXB0eVZhbHVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcExheW91dFZlY3Rv
cihWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtcExheW91dFZl
Y3Rvcihjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCiB7CiAgICAgaWYgKHZhbHVlcy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJlbXB0eSIpOwpAQCAtNjMsNyArNjMs
NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcExheW91dFZlY3RvcihWZWN0CiAgICAgfQogfQog
Ci12b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkKK3ZvaWQgU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXM6OmR1bXAoKSBjb25zdAogewogICAgIGZwcmludGYoc3RkZXJyLCAieCB2YWx1
ZXM6ICIpOwogICAgIGR1bXBMYXlvdXRWZWN0b3IobV94VmFsdWVzKTsKQEAgLTg2LDExICs4Niwx
MSBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkKICAgICBmcHJpbnRmKHN0
ZGVyciwgIlxuIik7CiAKICAgICBmcHJpbnRmKHN0ZGVyciwgImNoYXJhY3RlciBkYXRhIHZhbHVl
czpcbiIpOwotICAgIFZlY3RvcjxDaGFyYWN0ZXJEYXRhPjo6aXRlcmF0b3IgZW5kID0gbV9jaGFy
YWN0ZXJEYXRhVmFsdWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPENoYXJhY3RlckRhdGE+Ojpp
dGVyYXRvciBpdCA9IG1fY2hhcmFjdGVyRGF0YVZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgQ2hhcmFjdGVyRGF0YSYgZGF0YSA9ICppdDsKLSAgICAgICAgZnByaW50
ZihzdGRlcnIsICJ8IHtzcGFuc0NoYXJhY3RlcnM9JWksIGdseXBoTmFtZT0nJXMnLCB1bmljb2Rl
U3RyaW5nPSclcycsIHdpZHRoPSVsZiwgaGVpZ2h0PSVsZn1cbiIsCi0gICAgICAgICAgICAgICAg
ZGF0YS5zcGFuc0NoYXJhY3RlcnMsIGRhdGEuZ2x5cGhOYW1lLnV0ZjgoKS5kYXRhKCksIGRhdGEu
dW5pY29kZVN0cmluZy51dGY4KCkuZGF0YSgpLCBkYXRhLndpZHRoLCBkYXRhLmhlaWdodCk7Cisg
ICAgdW5zaWduZWQgdGV4dE1ldHJpY3NTaXplID0gbV90ZXh0TWV0cmljc1ZhbHVlcy5zaXplKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRNZXRyaWNzU2l6ZTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IFNWR1RleHRNZXRyaWNzJiBtZXRyaWNzID0gbV90ZXh0TWV0cmljc1ZhbHVl
cy5hdChpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ8IHtsZW5ndGg9JWksIGdseXBoTmFt
ZT0nJXMnLCB1bmljb2RlU3RyaW5nPSclcycsIHdpZHRoPSVsZiwgaGVpZ2h0PSVsZn1cbiIsCisg
ICAgICAgICAgICAgICAgbWV0cmljcy5sZW5ndGgoKSwgbWV0cmljcy5nbHlwaCgpLm5hbWUudXRm
OCgpLmRhdGEoKSwgbWV0cmljcy5nbHlwaCgpLnVuaWNvZGVTdHJpbmcudXRmOCgpLmRhdGEoKSwg
bWV0cmljcy53aWR0aCgpLCBtZXRyaWNzLmhlaWdodCgpKTsKICAgICB9CiAgICAgZnByaW50Zihz
dGRlcnIsICJcbiIpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzLmgJKHJldmlzaW9uIDY4ODY3KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYg
KzIzLDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlICJTVkdUZXh0TWV0cmljcy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMwLDggKzMxLDEwIEBAIGNsYXNzIFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzIHsKIHB1YmxpYzoKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcygp
OwogCi0gICAgdm9pZCBmaWxsV2l0aEVtcHR5VmFsdWVzKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
dm9pZCBkdW1wKCk7CisgICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbGVuZ3RoKTsK
KyAgICB2b2lkIGR1bXAoKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9hdCBlbXB0eVZhbHVlKCk7
CiAKICAgICBWZWN0b3I8ZmxvYXQ+JiB4VmFsdWVzKCkgeyByZXR1cm4gbV94VmFsdWVzOyB9CiAg
ICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgeFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1feFZhbHVl
czsgfQpAQCAtNDgsMzEgKzUxLDggQEAgcHVibGljOgogICAgIFZlY3RvcjxmbG9hdD4mIHJvdGF0
ZVZhbHVlcygpIHsgcmV0dXJuIG1fcm90YXRlVmFsdWVzOyB9CiAgICAgY29uc3QgVmVjdG9yPGZs
b2F0PiYgcm90YXRlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9yb3RhdGVWYWx1ZXM7IH0KIAot
ICAgIHN0YXRpYyBmbG9hdCBlbXB0eVZhbHVlKCk7Ci0KLSAgICBzdHJ1Y3QgQ2hhcmFjdGVyRGF0
YSB7Ci0gICAgICAgIENoYXJhY3RlckRhdGEoKQotICAgICAgICAgICAgOiBzcGFuc0NoYXJhY3Rl
cnMoMCkKLSAgICAgICAgICAgICwgd2lkdGgoMCkKLSAgICAgICAgICAgICwgaGVpZ2h0KDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdoZW4gbXVsdGlwbGUgdW5pY29kZSBj
aGFyYWN0ZXJzIG1hcCB0byBhIHNpbmdsZSBnbHlwaCAoZWcuICdmZmknIGxpZ2F0dXJlKQotICAg
ICAgICAvLyAnc3BhbnNDaGFyYWN0ZXJzJyBjb250YWlucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgdGhpcyBnbHlwaCBzcGFucy4KLSAgICAgICAgaW50IHNwYW5zQ2hhcmFjdGVyczsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFRoZSAnZ2x5cGhOYW1lJyAvICd1bmljb2RlU3RyaW5nJyBwYWlyIGlz
IG5lZWRlZCBmb3Iga2VybmluZyBjYWxjdWxhdGlvbnMuCi0gICAgICAgIFN0cmluZyBnbHlwaE5h
bWU7Ci0gICAgICAgIFN0cmluZyB1bmljb2RlU3RyaW5nOwotCi0gICAgICAgIC8vICd3aWR0aCcg
YW5kICdoZWlnaHQnIGhvbGQgdGhlIHNpemUgb2YgdGhpcyBnbHlwaC9jaGFyYWN0ZXIuCi0gICAg
ICAgIGZsb2F0IHdpZHRoOwotICAgICAgICBmbG9hdCBoZWlnaHQ7Ci0gICAgfTsKLQotICAgIFZl
Y3RvcjxDaGFyYWN0ZXJEYXRhPiYgY2hhcmFjdGVyRGF0YVZhbHVlcygpIHsgcmV0dXJuIG1fY2hh
cmFjdGVyRGF0YVZhbHVlczsgfQotICAgIGNvbnN0IFZlY3RvcjxDaGFyYWN0ZXJEYXRhPiYgY2hh
cmFjdGVyRGF0YVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyRGF0YVZhbHVlczsg
fQorICAgIFZlY3RvcjxTVkdUZXh0TWV0cmljcz4mIHRleHRNZXRyaWNzVmFsdWVzKCkgeyByZXR1
cm4gbV90ZXh0TWV0cmljc1ZhbHVlczsgfQorICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0TWV0cmlj
cz4mIHRleHRNZXRyaWNzVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0TWV0cmljc1ZhbHVl
czsgfQogCiBwcml2YXRlOgogICAgIFZlY3RvcjxmbG9hdD4gbV94VmFsdWVzOwpAQCAtODAsNyAr
NjAsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxmbG9hdD4gbV9keFZhbHVlczsKICAgICBWZWN0
b3I8ZmxvYXQ+IG1fZHlWYWx1ZXM7CiAgICAgVmVjdG9yPGZsb2F0PiBtX3JvdGF0ZVZhbHVlczsK
LSAgICBWZWN0b3I8Q2hhcmFjdGVyRGF0YT4gbV9jaGFyYWN0ZXJEYXRhVmFsdWVzOworICAgIFZl
Y3RvcjxTVkdUZXh0TWV0cmljcz4gbV90ZXh0TWV0cmljc1ZhbHVlczsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
QXR0cmlidXRlc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCShyZXZpc2lvbiA2ODg3NikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTAgQEAKIAogI2luY2x1ZGUgIlJlbmRlclNW
R0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCi0jaW5jbHVkZSAiU1ZH
VGV4dExheW91dFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQuaCIKIAotLy8gU2V0IHRvIGEgdmFsdWUgPiAwIHRvIGR1bXAgdGhlIGxheW91dCB2ZWN0b3Jz
Ci0jZGVmaW5lIERVTVBfTEFZT1VUX1ZFQ1RPUlMgMAorLy8gU2V0IHRvIGEgdmFsdWUgPiAwIHRv
IGR1bXAgdGhlIHRleHQgbGF5b3V0IGF0dHJpYnV0ZXMKKyNkZWZpbmUgRFVNUF9URVhUX0xBWU9V
VF9BVFRSSUJVVEVTIDAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSwxMDAgKzQwLDEy
OSBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpCiAgICAgQVNTRVJU
KHRleHRSb290KTsKICAgICBtX3Njb3Blcy5jbGVhcigpOwogCi0gICAgLy8gQnVpbGQgbGF5b3V0
IHNjb3Blcy4KKyAgICAvLyBCdWlsZCBsaXN0IG9mIHgveS9keC9keS9yb3RhdGUgdmFsdWVzIGZv
ciBlYWNoIHN1YnRyZWUgZWxlbWVudCB0aGF0IG1heSBkZWZpbmUgdGhlc2UgdmFsdWVzICh0c3Bh
bi90ZXh0UGF0aCBldGMpLgogICAgIHVuc2lnbmVkIGF0Q2hhcmFjdGVyID0gMDsKLSAgICBidWls
ZExheW91dFNjb3Blcyh0ZXh0Um9vdCwgYXRDaGFyYWN0ZXIpOworICAgIFVDaGFyIGxhc3RDaGFy
YWN0ZXIgPSAnXDAnOworICAgIGJ1aWxkTGF5b3V0U2NvcGVzKHRleHRSb290LCBhdENoYXJhY3Rl
ciwgbGFzdENoYXJhY3Rlcik7CiAKICAgICBpZiAoIWF0Q2hhcmFjdGVyKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBBZGQgb3V0ZXJtb3N0IHNjb3BlLCBhZnRlciB0ZXh0IGxlbmd0aCBpcyBr
bm93bi4KLSAgICBMYXlvdXRTY29wZSBzY29wZTsKLSAgICBidWlsZExheW91dFNjb3BlKHNjb3Bl
LCB0ZXh0Um9vdCwgMCwgYXRDaGFyYWN0ZXIpOwotICAgIG1fc2NvcGVzLnByZXBlbmQoc2NvcGUp
OwotCi0gICAgLy8gQnVpbGQgbGF5b3V0IGluZm9ybWF0aW9uIHJlc3BlY3Rpbmcgc2NvcGUgb2Yg
YXR0cmlidXRlIHZhbHVlcy4KLSAgICBidWlsZExheW91dEF0dHJpYnV0ZXNGcm9tU2NvcGVzKCk7
CisgICAgLy8gQnVpbGQgbGlzdCBvZiB4L3kvZHgvZHkvcm90YXRlIHZhbHVlcyBmb3IgdGhlIG91
dGVybW9zdCA8dGV4dD4gZWxlbWVudC4KKyAgICBidWlsZE91dGVybW9zdExheW91dFNjb3BlKHRl
eHRSb290LCBhdENoYXJhY3Rlcik7CiAKKyAgICAvLyBQcm9wYWdhdGUgbGF5b3V0IGF0dHJpYnV0
ZXMgdG8gZWFjaCBSZW5kZXJTVkdJbmxpbmVUZXh0IG9iamVjdC4KICAgICBhdENoYXJhY3RlciA9
IDA7Ci0gICAgcHJvcGFnYXRlTGF5b3V0QXR0cmlidXRlcyh0ZXh0Um9vdCwgYXRDaGFyYWN0ZXIp
OworICAgIGxhc3RDaGFyYWN0ZXIgPSAnXDAnOworICAgIHByb3BhZ2F0ZUxheW91dEF0dHJpYnV0
ZXModGV4dFJvb3QsIGF0Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyKTsKIH0KIAotc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlUb0Rlc3RpbmF0aW9uVmVjdG9yKFZlY3RvcjxmbG9hdD4mIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBkZXN0aW5hdGlvblN0YXJ0T2Zmc2V0LCBWZWN0b3I8ZmxvYXQ+JiBzb3Vy
Y2UsIHVuc2lnbmVkIHNvdXJjZVN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMg
aW5saW5lIHZvaWQgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR0xlbmd0aExpc3QoU1ZHRWxlbWVu
dCogbGVuZ3RoQ29udGV4dCwgU1ZHTGVuZ3RoTGlzdCogbGlzdCwgVmVjdG9yPGZsb2F0PiYgZmxv
YXRWYWx1ZXMsIHVuc2lnbmVkIHRleHRDb250ZW50TGVuZ3RoKQogewotICAgIEFTU0VSVChkZXN0
aW5hdGlvblN0YXJ0T2Zmc2V0ICsgbGVuZ3RoIDw9IGRlc3RpbmF0aW9uLnNpemUoKSk7CisgICAg
QVNTRVJUKGxlbmd0aENvbnRleHQpOworICAgIEFTU0VSVChsaXN0KTsKKworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGxpc3QtPm51bWJlck9mSXRlbXMoKTsKKyAgICBpZiAobGVuZ3RoID4gdGV4dENv
bnRlbnRMZW5ndGgpCisgICAgICAgIGxlbmd0aCA9IHRleHRDb250ZW50TGVuZ3RoOworICAgIGZs
b2F0VmFsdWVzLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogCi0gICAgVmVjdG9yPGZsb2F0Pjo6
aXRlcmF0b3Igc291cmNlQmVnaW4gPSBzb3VyY2UuYmVnaW4oKSArIHNvdXJjZVN0YXJ0T2Zmc2V0
OwotICAgIHN0ZDo6Y29weShzb3VyY2VCZWdpbiwgc291cmNlQmVnaW4gKyBsZW5ndGgsIGRlc3Rp
bmF0aW9uLmJlZ2luKCkgKyBkZXN0aW5hdGlvblN0YXJ0T2Zmc2V0KTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgU1ZHTGVuZ3RoIGxlbmd0aChsaXN0LT5nZXRJdGVtKGksIGVjKSk7CisgICAgICAg
IEFTU0VSVCghZWMpOworICAgICAgICBmbG9hdFZhbHVlcy5hcHBlbmQobGVuZ3RoLnZhbHVlKGxl
bmd0aENvbnRleHQpKTsKKyAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VG9EZXN0
aW5hdGlvblZlY3RvcklmU291cmNlUmFuZ2VJc05vdEVtcHR5KFZlY3RvcjxmbG9hdD4mIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBkZXN0aW5hdGlvblN0YXJ0T2Zmc2V0LCBWZWN0b3I8ZmxvYXQ+JiBz
b3VyY2UsIHVuc2lnbmVkIHNvdXJjZVN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0
aWMgaW5saW5lIHZvaWQgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR051bWJlckxpc3QoU1ZHTnVt
YmVyTGlzdCogbGlzdCwgVmVjdG9yPGZsb2F0PiYgZmxvYXRWYWx1ZXMsIHVuc2lnbmVkIHRleHRD
b250ZW50TGVuZ3RoKQogewotICAgIGJvb2wgcmFuZ2VFbXB0eSA9IHRydWU7CisgICAgQVNTRVJU
KGxpc3QpOwogCi0gICAgdW5zaWduZWQgc2l6ZSA9IHNvdXJjZVN0YXJ0T2Zmc2V0ICsgbGVuZ3Ro
OwotICAgIGZvciAodW5zaWduZWQgaSA9IHNvdXJjZVN0YXJ0T2Zmc2V0OyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIGlmIChzb3VyY2UuYXQoaSkgPT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6
OmVtcHR5VmFsdWUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByYW5nZUVtcHR5
ID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPm51
bWJlck9mSXRlbXMoKTsKKyAgICBpZiAobGVuZ3RoID4gdGV4dENvbnRlbnRMZW5ndGgpCisgICAg
ICAgIGxlbmd0aCA9IHRleHRDb250ZW50TGVuZ3RoOworICAgIGZsb2F0VmFsdWVzLnJlc2VydmVD
YXBhY2l0eShsZW5ndGgpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGZsb2F0IGxlbmd0aChs
aXN0LT5nZXRJdGVtKGksIGVjKSk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAgICAgICBmbG9h
dFZhbHVlcy5hcHBlbmQobGVuZ3RoKTsKICAgICB9Cit9CiAKLSAgICBpZiAocmFuZ2VFbXB0eSkK
K3ZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZExheW91dFNjb3BlKExh
eW91dFNjb3BlJiBzY29wZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgdW5zaWduZWQgdGV4dENv
bnRlbnRTdGFydCwgdW5zaWduZWQgdGV4dENvbnRlbnRMZW5ndGgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHJlbmRlcmVyKTsKKyAgICBBU1NFUlQocmVuZGVyZXItPnN0eWxlKCkpOworCisgICAgc2Nv
cGUudGV4dENvbnRlbnRTdGFydCA9IHRleHRDb250ZW50U3RhcnQ7CisgICAgc2NvcGUudGV4dENv
bnRlbnRMZW5ndGggPSB0ZXh0Q29udGVudExlbmd0aDsKKworICAgIFNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQqIGVsZW1lbnQgPSBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjplbGVtZW50RnJv
bVJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGRlc3RpbmF0aW9uLnJlc2l6ZShsZW5ndGgpOwotICAgIGNvcHlUb0Rlc3RpbmF0aW9u
VmVjdG9yKGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvblN0YXJ0T2Zmc2V0LCBzb3VyY2UsIHNvdXJj
ZVN0YXJ0T2Zmc2V0LCBsZW5ndGgpOwotfQorICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzJiBh
dHRyaWJ1dGVzID0gc2NvcGUuYXR0cmlidXRlczsKKyAgICBleHRyYWN0RmxvYXRWYWx1ZXNGcm9t
U1ZHTGVuZ3RoTGlzdChlbGVtZW50LCBlbGVtZW50LT54KCksIGF0dHJpYnV0ZXMueFZhbHVlcygp
LCB0ZXh0Q29udGVudExlbmd0aCk7CisgICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR0xlbmd0
aExpc3QoZWxlbWVudCwgZWxlbWVudC0+eSgpLCBhdHRyaWJ1dGVzLnlWYWx1ZXMoKSwgdGV4dENv
bnRlbnRMZW5ndGgpOworICAgIGV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdMZW5ndGhMaXN0KGVs
ZW1lbnQsIGVsZW1lbnQtPmR4KCksIGF0dHJpYnV0ZXMuZHhWYWx1ZXMoKSwgdGV4dENvbnRlbnRM
ZW5ndGgpOworICAgIGV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdMZW5ndGhMaXN0KGVsZW1lbnQs
IGVsZW1lbnQtPmR5KCksIGF0dHJpYnV0ZXMuZHlWYWx1ZXMoKSwgdGV4dENvbnRlbnRMZW5ndGgp
OworICAgIGV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdOdW1iZXJMaXN0KGVsZW1lbnQtPnJvdGF0
ZSgpLCBhdHRyaWJ1dGVzLnJvdGF0ZVZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0aCk7CiAKLXZv
aWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpwcm9wYWdhdGVMYXlvdXRBdHRyaWJ1
dGVzKFJlbmRlck9iamVjdCogc3RhcnQsIHVuc2lnbmVkJiBhdENoYXJhY3RlcikKLXsKLSAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeyAKLSAgICAgICAgaWYgKCFjaGlsZC0+aXNTVkdJ
bmxpbmVUZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdJbmxpbmUoKSkKLSAg
ICAgICAgICAgICAgICBwcm9wYWdhdGVMYXlvdXRBdHRyaWJ1dGVzKGNoaWxkLCBhdENoYXJhY3Rl
cik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAgIC8vIFRoZSBsYXN0IHJv
dGF0aW9uIHZhbHVlIHNwYW5zIHRoZSB3aG9sZSBzY29wZS4KKyAgICBWZWN0b3I8ZmxvYXQ+JiBy
b3RhdGVWYWx1ZXMgPSBhdHRyaWJ1dGVzLnJvdGF0ZVZhbHVlcygpOworICAgIGlmIChyb3RhdGVW
YWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVuZGVyU1ZHSW5s
aW5lVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclNWR0lubGluZVRleHQqPihjaGlsZCk7
Ci0gICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0LT50ZXh0TGVuZ3RoKCk7CisgICAg
dW5zaWduZWQgcm90YXRlVmFsdWVzU2l6ZSA9IHJvdGF0ZVZhbHVlcy5zaXplKCk7CisgICAgaWYg
KHJvdGF0ZVZhbHVlc1NpemUgPT0gdGV4dENvbnRlbnRMZW5ndGgpCisgICAgICAgIHJldHVybjsK
IAotICAgICAgICAvLyBCdWlsZCBsYXlvdXQgYXR0cmlidXRlcyBmb3IgYSBzaW5nbGUgUmVuZGVy
U1ZHSW5saW5lVGV4dCByZW5kZXJlci4KLSAgICAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMg
YXR0cmlidXRlczsKKyAgICBmbG9hdCBsYXN0Um90YXRpb24gPSByb3RhdGVWYWx1ZXMubGFzdCgp
OwogCi0gICAgICAgIC8vIFRoZSB4IHZhbHVlIGxpc3Qgc2hvdWxkIGFsd2F5cyBiZSBhcyBsYXJn
ZSBhcyB0aGUgdGV4dCBsZW5ndGguCi0gICAgICAgIC8vIEFueSB2YWx1ZXMgdGhhdCBhcmUgZW1w
dHkgd2lsbCBiZSBmaWxsZWQgaW4gYnkgdGhlIGFjdHVhbCB0ZXh0IGxheW91dCBwcm9jZXNzIGxh
dGVyLAotICAgICAgICAvLyBhcyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gcXVlcnkgdGhlIHgveSBw
b3NpdGlvbiBmb3IgZXZlcnkgY2hhcmFjdGVyIHRocm91Z2ggU1ZHIERPTS4KLSAgICAgICAgYXR0
cmlidXRlcy54VmFsdWVzKCkucmVzaXplKHRleHRMZW5ndGgpOwotICAgICAgICBjb3B5VG9EZXN0
aW5hdGlvblZlY3RvcihhdHRyaWJ1dGVzLnhWYWx1ZXMoKSwgMCwgbV9hdHRyaWJ1dGVzLnhWYWx1
ZXMoKSwgYXRDaGFyYWN0ZXIsIHRleHRMZW5ndGgpOwotCi0gICAgICAgIC8vIFNhbWUgZm9yIHRo
ZSB5IHZhbHVlIGxpc3QuCi0gICAgICAgIGF0dHJpYnV0ZXMueVZhbHVlcygpLnJlc2l6ZSh0ZXh0
TGVuZ3RoKTsKLSAgICAgICAgY29weVRvRGVzdGluYXRpb25WZWN0b3IoYXR0cmlidXRlcy55VmFs
dWVzKCksIDAsIG1fYXR0cmlidXRlcy55VmFsdWVzKCksIGF0Q2hhcmFjdGVyLCB0ZXh0TGVuZ3Ro
KTsKLQotICAgICAgICAvLyBUaGUgZHgvZHkvcm90YXRlIHZhbHVlIGxpc3RzIG1heSBiZSBlbXB0
eS4KLSAgICAgICAgY29weVRvRGVzdGluYXRpb25WZWN0b3JJZlNvdXJjZVJhbmdlSXNOb3RFbXB0
eShhdHRyaWJ1dGVzLmR4VmFsdWVzKCksIDAsIG1fYXR0cmlidXRlcy5keFZhbHVlcygpLCBhdENo
YXJhY3RlciwgdGV4dExlbmd0aCk7Ci0gICAgICAgIGNvcHlUb0Rlc3RpbmF0aW9uVmVjdG9ySWZT
b3VyY2VSYW5nZUlzTm90RW1wdHkoYXR0cmlidXRlcy5keVZhbHVlcygpLCAwLCBtX2F0dHJpYnV0
ZXMuZHlWYWx1ZXMoKSwgYXRDaGFyYWN0ZXIsIHRleHRMZW5ndGgpOwotICAgICAgICBjb3B5VG9E
ZXN0aW5hdGlvblZlY3RvcklmU291cmNlUmFuZ2VJc05vdEVtcHR5KGF0dHJpYnV0ZXMucm90YXRl
VmFsdWVzKCksIDAsIG1fYXR0cmlidXRlcy5yb3RhdGVWYWx1ZXMoKSwgYXRDaGFyYWN0ZXIsIHRl
eHRMZW5ndGgpOwotCi0gICAgICAgIC8vIEJ1aWxkIENoYXJhY3RlckRhdGEsIHdoaWNoIHdpbGwg
YmUgdXNlZCB0byBkZXRlY3QgbGlnYXR1cmVzLCBob2xkcyBrZXJuaW5nIHBhaXJzIChnbHlwaCBu
YW1lLCB1bmljb2RlIHN0cmluZykgYW5kIGNoYXJhY3RlciBtZXRyaWNzLgotICAgICAgICBtZWFz
dXJlQ2hhcmFjdGVycyh0ZXh0LCBhdHRyaWJ1dGVzKTsKLQotI2lmIERVTVBfTEFZT1VUX1ZFQ1RP
UlMgPiAwCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRHVtcGluZyBsYXlvdXQgdmVjdG9yIGZv
ciBSZW5kZXJTVkdJbmxpbmVUZXh0LCByZW5kZXJlcj0lcCwgbm9kZT0lcFxuIiwgdGV4dCwgdGV4
dC0+bm9kZSgpKTsKLSAgICAgICAgYXR0cmlidXRlcy5kdW1wKCk7Ci0jZW5kaWYKKyAgICByb3Rh
dGVWYWx1ZXMucmVzaXplKHRleHRDb250ZW50TGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSByb3RhdGVWYWx1ZXNTaXplOyBpIDwgdGV4dENvbnRlbnRMZW5ndGg7ICsraSkKKyAgICAgICAg
cm90YXRlVmFsdWVzLmF0KGkpID0gbGFzdFJvdGF0aW9uOworfQogCi0gICAgICAgIHRleHQtPnN0
b3JlTGF5b3V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgYXRDaGFyYWN0ZXIgKz0g
dGV4dC0+dGV4dExlbmd0aCgpOwotICAgIH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBjaGFyYWN0ZXJJ
c1NwYWNlKGNvbnN0IFVDaGFyJiBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlciA9
PSAnICc7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjaGFyYWN0ZXJJc1NwYWNlT3JOdWxsKGNv
bnN0IFVDaGFyJiBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnICcgfHwg
Y2hhcmFjdGVyID09ICdcMCc7CiB9CiAKLXZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyOjpidWlsZExheW91dFNjb3BlcyhSZW5kZXJPYmplY3QqIHN0YXJ0LCB1bnNpZ25lZCYgYXRD
aGFyYWN0ZXIpCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkUHJlc2VydmVBbGxXaGl0ZVNwYWNl
KFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBBU1NFUlQoc3R5bGUpOworICAgIHJldHVybiBz
dHlsZS0+d2hpdGVTcGFjZSgpID09IFBSRTsKK30KKyAKK3ZvaWQgU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXNCdWlsZGVyOjpidWlsZExheW91dFNjb3BlcyhSZW5kZXJPYmplY3QqIHN0YXJ0LCB1bnNp
Z25lZCYgYXRDaGFyYWN0ZXIsIFVDaGFyJiBsYXN0Q2hhcmFjdGVyKQogewogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7IAogICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4
dCgpKSB7Ci0gICAgICAgICAgICBhdENoYXJhY3RlciArPSB0b1JlbmRlclRleHQoY2hpbGQpLT50
ZXh0TGVuZ3RoKCk7CisgICAgICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0ID0gdG9S
ZW5kZXJTVkdJbmxpbmVUZXh0KGNoaWxkKTsKKworICAgICAgICAgICAgaWYgKCFzaG91bGRQcmVz
ZXJ2ZUFsbFdoaXRlU3BhY2UodGV4dC0+c3R5bGUoKSkpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHQtPmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gdGV4dC0+dGV4dExlbmd0aCgpOyAgICAKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHRleHRQb3NpdGlvbiA9IDA7IHRleHRQb3NpdGlvbiA8IHRl
eHRMZW5ndGg7ICsrdGV4dFBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyJiBjdXJyZW50Q2hhcmFjdGVyID0gY2hhcmFjdGVyc1t0ZXh0UG9zaXRpb25dOworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVySXNTcGFjZShjdXJyZW50Q2hhcmFjdGVyKSAmJiBj
aGFyYWN0ZXJJc1NwYWNlT3JOdWxsKGxhc3RDaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgbGFzdENoYXJhY3RlciA9IGN1
cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgICAgICsrYXRDaGFyYWN0ZXI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYXRDaGFy
YWN0ZXIgKz0gdGV4dC0+dGV4dExlbmd0aCgpOworCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCkBAIC0xNDIsNyArMTcwLDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXI6OmJ1aQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgdW5zaWduZWQg
dGV4dENvbnRlbnRTdGFydCA9IGF0Q2hhcmFjdGVyOwotICAgICAgICBidWlsZExheW91dFNjb3Bl
cyhjaGlsZCwgYXRDaGFyYWN0ZXIpOworICAgICAgICBidWlsZExheW91dFNjb3BlcyhjaGlsZCwg
YXRDaGFyYWN0ZXIsIGxhc3RDaGFyYWN0ZXIpOwogCiAgICAgICAgIExheW91dFNjb3BlIHNjb3Bl
OwogICAgICAgICBidWlsZExheW91dFNjb3BlKHNjb3BlLCBjaGlsZCwgdGV4dENvbnRlbnRTdGFy
dCwgYXRDaGFyYWN0ZXIgLSB0ZXh0Q29udGVudFN0YXJ0KTsKQEAgLTE1MCwxNTMgKzE3OCwxMzgg
QEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1aQogICAgIH0KIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIGZpbGxEZXN0aW5hdGlvblZlY3RvcldpdGhMYXN0U291cmNlVmFs
dWUoVmVjdG9yPGZsb2F0PiYgZGVzdGluYXRpb24sIHVuc2lnbmVkIGRlc3RpbmF0aW9uU3RhcnRP
ZmZzZXQsIFZlY3RvcjxmbG9hdD4mIHNvdXJjZSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1aWxkT3V0ZXJtb3N0TGF5b3V0U2NvcGUoUmVu
ZGVyU1ZHVGV4dCogdGV4dFJvb3QsIHVuc2lnbmVkIHRleHRMZW5ndGgpCiB7Ci0gICAgaWYgKHNv
dXJjZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBMYXlvdXRTY29wZSBzY29wZTsK
KyAgICBidWlsZExheW91dFNjb3BlKHNjb3BlLCB0ZXh0Um9vdCwgMCwgdGV4dExlbmd0aCk7CiAK
LSAgICBmbG9hdCBsYXN0VmFsdWUgPSBzb3VyY2UubGFzdCgpOworICAgIC8vIEhhbmRsZSA8dGV4
dD4geC95IGRlZmF1bHQgYXR0cmlidXRlcy4KKyAgICBWZWN0b3I8ZmxvYXQ+JiB4VmFsdWVzID0g
c2NvcGUuYXR0cmlidXRlcy54VmFsdWVzKCk7CisgICAgaWYgKHhWYWx1ZXMuaXNFbXB0eSgpKQor
ICAgICAgICB4VmFsdWVzLmFwcGVuZCgwKTsKKworICAgIFZlY3RvcjxmbG9hdD4mIHlWYWx1ZXMg
PSBzY29wZS5hdHRyaWJ1dGVzLnlWYWx1ZXMoKTsKKyAgICBpZiAoeVZhbHVlcy5pc0VtcHR5KCkp
CisgICAgICAgIHlWYWx1ZXMuYXBwZW5kKDApOwogCi0gICAgdW5zaWduZWQgcm90YXRlVmFsdWVz
U2l6ZSA9IHNvdXJjZS5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlVmFsdWVz
U2l6ZTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChpICsgZGVzdGluYXRpb25T
dGFydE9mZnNldCA8IGRlc3RpbmF0aW9uLnNpemUoKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uLmF0
KGkgKyBkZXN0aW5hdGlvblN0YXJ0T2Zmc2V0KSA9IGxhc3RWYWx1ZTsKLSAgICB9CisgICAgbV9z
Y29wZXMucHJlcGVuZChzY29wZSk7CiB9CiAKLXZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyOjpidWlsZExheW91dEF0dHJpYnV0ZXNGcm9tU2NvcGVzKCkKK3ZvaWQgU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpwcm9wYWdhdGVMYXlvdXRBdHRyaWJ1dGVzKFJlbmRlck9i
amVjdCogc3RhcnQsIHVuc2lnbmVkJiBhdENoYXJhY3RlciwgVUNoYXImIGxhc3RDaGFyYWN0ZXIp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX3Njb3Blcy5pc0VtcHR5KCkpOwotCi0gICAgdW5zaWdu
ZWQgdG90YWxMZW5ndGggPSBtX3Njb3Blcy5maXJzdCgpLnRleHRDb250ZW50TGVuZ3RoOwotICAg
IGlmICghdG90YWxMZW5ndGgpCi0gICAgICAgIHJldHVybjsKKyAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeyAKKyAgICAgICAgaWYgKGNoaWxkLT5pc1NWR0lubGluZVRleHQoKSkgewor
ICAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCA9IHRvUmVuZGVyU1ZHSW5saW5l
VGV4dChjaGlsZCk7CisgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHQt
PmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0LT50
ZXh0TGVuZ3RoKCk7CisgICAgICAgICAgICBib29sIHByZXNlcnZlV2hpdGVTcGFjZSA9IHNob3Vs
ZFByZXNlcnZlQWxsV2hpdGVTcGFjZSh0ZXh0LT5zdHlsZSgpKTsKKworICAgICAgICAgICAgU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMu
cmVzZXJ2ZUNhcGFjaXR5KHRleHRMZW5ndGgpOworICAgIAorICAgICAgICAgICAgdW5zaWduZWQg
dmFsdWVMaXN0UG9zaXRpb24gPSBhdENoYXJhY3RlcjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1l
dHJpY3NMZW5ndGggPSAxOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0ZXh0UG9zaXRpb24g
PSAwOyB0ZXh0UG9zaXRpb24gPCB0ZXh0TGVuZ3RoOyB0ZXh0UG9zaXRpb24gKz0gbWV0cmljc0xl
bmd0aCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyJiBjdXJyZW50Q2hhcmFjdGVyID0g
Y2hhcmFjdGVyc1t0ZXh0UG9zaXRpb25dOworCisgICAgICAgICAgICAgICAgU1ZHVGV4dE1ldHJp
Y3MgbWV0cmljcyA9IFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UodGV4dCwg
dGV4dFBvc2l0aW9uLCAxKTsKKyAgICAgICAgICAgICAgICBtZXRyaWNzTGVuZ3RoID0gbWV0cmlj
cy5sZW5ndGgoKTsKKworICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVXaGl0ZVNwYWNlICYm
IGNoYXJhY3RlcklzU3BhY2UoY3VycmVudENoYXJhY3RlcikgJiYgY2hhcmFjdGVySXNTcGFjZU9y
TnVsbChsYXN0Q2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgICAgICBhc3NpZ25FbXB0eUxh
eW91dEF0dHJpYnV0ZXNGb3JDaGFyYWN0ZXIoYXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZXMudGV4dE1ldHJpY3NWYWx1ZXMoKS5hcHBlbmQoU1ZHVGV4dE1ldHJpY3M6
OmVtcHR5TWV0cmljcygpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXNzaWduTGF5b3V0QXR0cmlidXRlc0ZvckNo
YXJhY3RlcihhdHRyaWJ1dGVzLCBtZXRyaWNzLCB2YWx1ZUxpc3RQb3NpdGlvbik7CisKKyAgICAg
ICAgICAgICAgICBpZiAobWV0cmljc0xlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1ldHJpY3NMZW5ndGggLSAxOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NpZ25FbXB0eUxheW91dEF0dHJpYnV0ZXNGb3JDaGFyYWN0ZXIo
YXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbGFzdENo
YXJhY3RlciA9IGN1cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgdmFsdWVMaXN0UG9z
aXRpb24gKz0gbWV0cmljc0xlbmd0aDsKKyAgICAgICAgICAgIH0KKworI2lmIERVTVBfVEVYVF9M
QVlPVVRfQVRUUklCVVRFUyA+IDAKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5EdW1w
aW5nIGxheW91dCBhdHRyaWJ1dGVzIGZvciBSZW5kZXJTVkdJbmxpbmVUZXh0LCByZW5kZXJlcj0l
cCwgbm9kZT0lcCAoYXRDaGFyYWN0ZXI6ICVpKVxuIiwgdGV4dCwgdGV4dC0+bm9kZSgpLCBhdENo
YXJhY3Rlcik7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLmR1bXAoKTsKKyNlbmRpZgogCi0gICAg
bV9hdHRyaWJ1dGVzLmZpbGxXaXRoRW1wdHlWYWx1ZXModG90YWxMZW5ndGgpOworICAgICAgICAg
ICAgdGV4dC0+c3RvcmVMYXlvdXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgICAgICAgICAg
YXRDaGFyYWN0ZXIgPSB2YWx1ZUxpc3RQb3NpdGlvbjsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CiAKLSAgICAvLyBCdWlsZCBmaW5hbCBsaXN0IG9mIHgveS9keC9keS9yb3RhdGUg
dmFsdWVzIGZvciBlYWNoIGNoYXJhY3RlciBzdG9yZXMgaW4gdGhlIDx0ZXh0PiBzdWJ0cmVlLgot
ICAgIGZvciAodW5zaWduZWQgYXRTY29wZSA9IDA7IGF0U2NvcGUgPCBtX3Njb3Blcy5zaXplKCk7
ICsrYXRTY29wZSkgewotICAgICAgICBMYXlvdXRTY29wZSYgc2NvcGUgPSBtX3Njb3Blcy5hdChh
dFNjb3BlKTsKLSAgICAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBz
Y29wZS5hdHRyaWJ1dGVzOwotCi0gICAgICAgIGNvcHlUb0Rlc3RpbmF0aW9uVmVjdG9yKG1fYXR0
cmlidXRlcy54VmFsdWVzKCksIHNjb3BlLnRleHRDb250ZW50U3RhcnQsIGF0dHJpYnV0ZXMueFZh
bHVlcygpLCAwLCBhdHRyaWJ1dGVzLnhWYWx1ZXMoKS5zaXplKCkpOwotICAgICAgICBjb3B5VG9E
ZXN0aW5hdGlvblZlY3RvcihtX2F0dHJpYnV0ZXMueVZhbHVlcygpLCBzY29wZS50ZXh0Q29udGVu
dFN0YXJ0LCBhdHRyaWJ1dGVzLnlWYWx1ZXMoKSwgMCwgYXR0cmlidXRlcy55VmFsdWVzKCkuc2l6
ZSgpKTsKLSAgICAgICAgY29weVRvRGVzdGluYXRpb25WZWN0b3IobV9hdHRyaWJ1dGVzLmR4VmFs
dWVzKCksIHNjb3BlLnRleHRDb250ZW50U3RhcnQsIGF0dHJpYnV0ZXMuZHhWYWx1ZXMoKSwgMCwg
YXR0cmlidXRlcy5keFZhbHVlcygpLnNpemUoKSk7Ci0gICAgICAgIGNvcHlUb0Rlc3RpbmF0aW9u
VmVjdG9yKG1fYXR0cmlidXRlcy5keVZhbHVlcygpLCBzY29wZS50ZXh0Q29udGVudFN0YXJ0LCBh
dHRyaWJ1dGVzLmR5VmFsdWVzKCksIDAsIGF0dHJpYnV0ZXMuZHlWYWx1ZXMoKS5zaXplKCkpOwot
ICAgICAgICBjb3B5VG9EZXN0aW5hdGlvblZlY3RvcihtX2F0dHJpYnV0ZXMucm90YXRlVmFsdWVz
KCksIHNjb3BlLnRleHRDb250ZW50U3RhcnQsIGF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCksIDAs
IGF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCkuc2l6ZSgpKTsKLQotICAgICAgICAvLyBJbiBob3Jp
em9udGFsICh2ZXJ0aWNhbCkgd3JpdGluZyBtb2RlcywgdGhlIGxhc3QgeSAoeCkgdmFsdWUgaW4g
dGhlIHNjb3BlIGlzIHRoZSBkZWZhdWx0IHkgKHgpIHZhbHVlIGZvciBhbGwgZm9sbG93aW5nIGNo
YXJhY3RlcnMsIHVubGVzcyBleHBsaWNpdGVseSBvdmVycmlkZW4uCi0gICAgICAgIGlmIChzY29w
ZS5pc1ZlcnRpY2FsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICBmaWxsRGVzdGluYXRpb25WZWN0
b3JXaXRoTGFzdFNvdXJjZVZhbHVlKG1fYXR0cmlidXRlcy54VmFsdWVzKCksIHNjb3BlLnRleHRD
b250ZW50U3RhcnQsIGF0dHJpYnV0ZXMueFZhbHVlcygpLCBzY29wZS50ZXh0Q29udGVudExlbmd0
aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZpbGxEZXN0aW5hdGlvblZlY3RvcldpdGhM
YXN0U291cmNlVmFsdWUobV9hdHRyaWJ1dGVzLnlWYWx1ZXMoKSwgc2NvcGUudGV4dENvbnRlbnRT
dGFydCwgYXR0cmlidXRlcy55VmFsdWVzKCksIHNjb3BlLnRleHRDb250ZW50TGVuZ3RoKTsKKyAg
ICAgICAgaWYgKCFjaGlsZC0+aXNTVkdJbmxpbmUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIC8vIFRoZSBsYXN0IHJvdGF0aW9uIHZhbHVlIGluIHRoZSBzY29wZSBpcyB0aGUg
ZGVmYXVsdCByb3RhdGlvbiBmb3IgYWxsIGZvbGxvd2luZyBjaGFyYWN0ZXIsIHVubGVzcyBleHBs
aWNpdGVseSBvdmVycmlkZW4uCi0gICAgICAgIGZpbGxEZXN0aW5hdGlvblZlY3RvcldpdGhMYXN0
U291cmNlVmFsdWUobV9hdHRyaWJ1dGVzLnJvdGF0ZVZhbHVlcygpLCBzY29wZS50ZXh0Q29udGVu
dFN0YXJ0LCBhdHRyaWJ1dGVzLnJvdGF0ZVZhbHVlcygpLCBzY29wZS50ZXh0Q29udGVudExlbmd0
aCk7CisgICAgICAgIHByb3BhZ2F0ZUxheW91dEF0dHJpYnV0ZXMoY2hpbGQsIGF0Q2hhcmFjdGVy
LCBsYXN0Q2hhcmFjdGVyKTsKICAgICB9CiB9CiAKLXZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyOjptZWFzdXJlQ2hhcmFjdGVycyhSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0LCBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgYXR0cmlidXRlcykKK2Zsb2F0IFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlcjo6bmV4dExheW91dFZhbHVlKExheW91dFZhbHVlVHlwZSB0eXBlLCB1
bnNpZ25lZCBhdENoYXJhY3RlcikgY29uc3QKIHsKLSAgICBBU1NFUlQodGV4dCk7Ci0gICAgQVNT
RVJUKHRleHQtPnN0eWxlKCkpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSB0ZXh0LT5zdHlsZSgp
LT5mb250KCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0LT5jaGFyYWN0ZXJz
KCk7Ci0gICAgaW50IGxlbmd0aCA9IHRleHQtPnRleHRMZW5ndGgoKTsKLQotICAgIFRleHRSdW4g
cnVuKDAsIDApOwotICAgIHJ1bi5kaXNhYmxlU3BhY2luZygpOwotICAgIHJ1bi5kaXNhYmxlUm91
bmRpbmdIYWNrcygpOwotCi0gICAgaW50IGNoYXJzQ29uc3VtZWQgPSAwOwotICAgIGZvciAoaW50
IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBsZW5ndGg7IHBvc2l0aW9uICs9IGNoYXJzQ29uc3Vt
ZWQpIHsKLSAgICAgICAgcnVuLnNldFRleHQoY2hhcmFjdGVycyArIHBvc2l0aW9uLCAxKTsKLSAg
ICAgICAgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGUgPSBsZW5ndGggLSBwb3NpdGlvbiAtIDE7Ci0K
LSAgICAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OkNoYXJhY3RlckRhdGEgY2hhcmFjdGVy
RGF0YTsKLSAgICAgICAgY2hhcmFjdGVyRGF0YS53aWR0aCA9IGZvbnQuZmxvYXRXaWR0aChydW4s
IGV4dHJhQ2hhcnNBdmFpbGFibGUsIGNoYXJhY3RlckRhdGEuc3BhbnNDaGFyYWN0ZXJzLCBjaGFy
YWN0ZXJEYXRhLmdseXBoTmFtZSk7Ci0gICAgICAgIGNoYXJhY3RlckRhdGEuaGVpZ2h0ID0gZm9u
dC5oZWlnaHQoKTsKLSAgICAgICAgY2hhcmFjdGVyRGF0YS51bmljb2RlU3RyaW5nID0gU3RyaW5n
KGNoYXJhY3RlcnMgKyBwb3NpdGlvbiwgY2hhcmFjdGVyRGF0YS5zcGFuc0NoYXJhY3RlcnMpOwot
ICAgICAgICBhdHRyaWJ1dGVzLmNoYXJhY3RlckRhdGFWYWx1ZXMoKS5hcHBlbmQoY2hhcmFjdGVy
RGF0YSk7CisgICAgZm9yIChpbnQgaSA9IG1fc2NvcGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7CisgICAgICAgIGNvbnN0IExheW91dFNjb3BlJiBzY29wZSA9IG1fc2NvcGVzLmF0KGkpOwor
ICAgICAgICBpZiAoc2NvcGUudGV4dENvbnRlbnRTdGFydCA+IGF0Q2hhcmFjdGVyIHx8IHNjb3Bl
LnRleHRDb250ZW50U3RhcnQgKyBzY29wZS50ZXh0Q29udGVudExlbmd0aCA8IGF0Q2hhcmFjdGVy
KQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgY2hhcnNDb25zdW1lZCA9IGNoYXJh
Y3RlckRhdGEuc3BhbnNDaGFyYWN0ZXJzOwotICAgIH0KLX0KKyAgICAgICAgY29uc3QgVmVjdG9y
PGZsb2F0PiogdmFsdWVzUG9pbnRlciA9IDA7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIFhWYWx1ZToKKyAgICAgICAgICAgIHZhbHVlc1BvaW50ZXIgPSAmc2NvcGUuYXR0
cmlidXRlcy54VmFsdWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBZVmFs
dWU6CisgICAgICAgICAgICB2YWx1ZXNQb2ludGVyID0gJnNjb3BlLmF0dHJpYnV0ZXMueVZhbHVl
cygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRHhWYWx1ZToKKyAgICAgICAg
ICAgIHZhbHVlc1BvaW50ZXIgPSAmc2NvcGUuYXR0cmlidXRlcy5keFZhbHVlcygpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRHlWYWx1ZToKKyAgICAgICAgICAgIHZhbHVlc1Bv
aW50ZXIgPSAmc2NvcGUuYXR0cmlidXRlcy5keVZhbHVlcygpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUm90YXRlVmFsdWU6CisgICAgICAgICAgICB2YWx1ZXNQb2ludGVyID0g
JnNjb3BlLmF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBleHRyYWN0RmxvYXRWYWx1ZXNGcm9tU1ZHTGVuZ3Ro
TGlzdChTVkdFbGVtZW50KiBsZW5ndGhDb250ZXh0LCBTVkdMZW5ndGhMaXN0KiBsaXN0LCBWZWN0
b3I8ZmxvYXQ+JiBmbG9hdFZhbHVlcywgaW50IHRleHRDb250ZW50TGVuZ3RoKQotewotICAgIEFT
U0VSVChsZW5ndGhDb250ZXh0KTsKLSAgICBBU1NFUlQobGlzdCk7Ci0gICAgQVNTRVJUKHRleHRD
b250ZW50TGVuZ3RoID49IDApOworICAgICAgICBBU1NFUlQodmFsdWVzUG9pbnRlcik7CisgICAg
ICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcyA9ICp2YWx1ZXNQb2ludGVyOworICAgICAg
ICBpZiAodmFsdWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50IGxlbmd0aCA9IGxpc3QtPm51bWJlck9mSXRlbXMo
KTsKLSAgICBpZiAobGVuZ3RoID4gdGV4dENvbnRlbnRMZW5ndGgpCi0gICAgICAgIGxlbmd0aCA9
IHRleHRDb250ZW50TGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IGF0Q2hhcmFj
dGVyIC0gc2NvcGUudGV4dENvbnRlbnRTdGFydDsKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IHZh
bHVlcy5zaXplKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgU1ZHTGVuZ3RoIGxlbmd0aChsaXN0LT5nZXRJ
dGVtKGksIGVjKSk7Ci0gICAgICAgIEFTU0VSVCghZWMpOwotICAgICAgICBmbG9hdFZhbHVlcy5h
cHBlbmQobGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVl
cy5hdChwb3NpdGlvbik7CiAgICAgfQotfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZXh0cmFjdEZs
b2F0VmFsdWVzRnJvbVNWR051bWJlckxpc3QoU1ZHTnVtYmVyTGlzdCogbGlzdCwgVmVjdG9yPGZs
b2F0PiYgZmxvYXRWYWx1ZXMsIGludCB0ZXh0Q29udGVudExlbmd0aCkKLXsKLSAgICBBU1NFUlQo
bGlzdCk7Ci0gICAgQVNTRVJUKHRleHRDb250ZW50TGVuZ3RoID49IDApOwotCi0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50IGxlbmd0aCA9IGxpc3QtPm51bWJlck9mSXRlbXMoKTsK
LSAgICBpZiAobGVuZ3RoID4gdGV4dENvbnRlbnRMZW5ndGgpCi0gICAgICAgIGxlbmd0aCA9IHRl
eHRDb250ZW50TGVuZ3RoOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBmbG9hdCBsZW5ndGgobGlzdC0+Z2V0SXRlbShpLCBlYykpOwotICAgICAgICBB
U1NFUlQoIWVjKTsKLSAgICAgICAgZmxvYXRWYWx1ZXMuYXBwZW5kKGxlbmd0aCk7Ci0gICAgfQor
ICAgIHJldHVybiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpOwogfQogCi1z
dGF0aWMgaW5saW5lIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqIHN2Z1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnRGb3JJbmxpbmVSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmFzc2lnbkxheW91dEF0dHJpYnV0ZXNGb3JD
aGFyYWN0ZXIoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIFNWR1RleHRNZXRy
aWNzJiBtZXRyaWNzLCB1bnNpZ25lZCB2YWx1ZUxpc3RQb3NpdGlvbikgY29uc3QKIHsKLSAgICBB
U1NFUlQocmVuZGVyZXIpOwotICAgIEFTU0VSVChyZW5kZXJlci0+aXNTVkdUZXh0KCkgfHwgcmVu
ZGVyZXItPmlzU1ZHSW5saW5lKCkpOwotCi0gICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2Rl
KCk7Ci0gICAgQVNTRVJUKG5vZGUpOwotICAgIEFTU0VSVChub2RlLT5pc1NWR0VsZW1lbnQoKSk7
Ci0KLSAgICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRleHRUYWcpCi0gICAgICYm
ICFub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0c3BhblRhZykKLSNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQotICAgICAmJiAhbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6YWx0R2x5cGhUYWcpCi0j
ZW5kaWYKLSAgICAgJiYgIW5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRyZWZUYWcpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50Kj4obm9kZSk7CisgICAgYXR0cmlidXRlcy54VmFsdWVzKCkuYXBwZW5kKG5leHRM
YXlvdXRWYWx1ZShYVmFsdWUsIHZhbHVlTGlzdFBvc2l0aW9uKSk7CisgICAgYXR0cmlidXRlcy55
VmFsdWVzKCkuYXBwZW5kKG5leHRMYXlvdXRWYWx1ZShZVmFsdWUsIHZhbHVlTGlzdFBvc2l0aW9u
KSk7CisgICAgYXR0cmlidXRlcy5keFZhbHVlcygpLmFwcGVuZChuZXh0TGF5b3V0VmFsdWUoRHhW
YWx1ZSwgdmFsdWVMaXN0UG9zaXRpb24pKTsKKyAgICBhdHRyaWJ1dGVzLmR5VmFsdWVzKCkuYXBw
ZW5kKG5leHRMYXlvdXRWYWx1ZShEeVZhbHVlLCB2YWx1ZUxpc3RQb3NpdGlvbikpOworICAgIGF0
dHJpYnV0ZXMucm90YXRlVmFsdWVzKCkuYXBwZW5kKG5leHRMYXlvdXRWYWx1ZShSb3RhdGVWYWx1
ZSwgdmFsdWVMaXN0UG9zaXRpb24pKTsKKyAgICBhdHRyaWJ1dGVzLnRleHRNZXRyaWNzVmFsdWVz
KCkuYXBwZW5kKG1ldHJpY3MpOwogfQogCi12b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVp
bGRlcjo6YnVpbGRMYXlvdXRTY29wZShMYXlvdXRTY29wZSYgc2NvcGUsIFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIHVuc2lnbmVkIHRleHRDb250ZW50U3RhcnQsIHVuc2lnbmVkIHRleHRDb250ZW50
TGVuZ3RoKQordm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmFzc2lnbkVtcHR5
TGF5b3V0QXR0cmlidXRlc0ZvckNoYXJhY3RlcihTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgYXR0
cmlidXRlcykgY29uc3QKIHsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgIEFTU0VSVChyZW5k
ZXJlci0+c3R5bGUoKSk7Ci0KLSAgICBzY29wZS5pc1ZlcnRpY2FsV3JpdGluZ01vZGUgPSBpc1Zl
cnRpY2FsV3JpdGluZ01vZGUocmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCkpOwotICAgIHNj
b3BlLnRleHRDb250ZW50U3RhcnQgPSB0ZXh0Q29udGVudFN0YXJ0OwotICAgIHNjb3BlLnRleHRD
b250ZW50TGVuZ3RoID0gdGV4dENvbnRlbnRMZW5ndGg7Ci0KLSAgICBTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50KiBlbGVtZW50ID0gc3ZnVGV4dFBvc2l0aW9uaW5nRWxlbWVudEZvcklubGluZVJl
bmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gc2NvcGUuYXR0cmlidXRl
czsKLSAgICBleHRyYWN0RmxvYXRWYWx1ZXNGcm9tU1ZHTGVuZ3RoTGlzdChlbGVtZW50LCBlbGVt
ZW50LT54KCksIGF0dHJpYnV0ZXMueFZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0aCk7Ci0gICAg
ZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR0xlbmd0aExpc3QoZWxlbWVudCwgZWxlbWVudC0+eSgp
LCBhdHRyaWJ1dGVzLnlWYWx1ZXMoKSwgdGV4dENvbnRlbnRMZW5ndGgpOwotICAgIGV4dHJhY3RG
bG9hdFZhbHVlc0Zyb21TVkdMZW5ndGhMaXN0KGVsZW1lbnQsIGVsZW1lbnQtPmR4KCksIGF0dHJp
YnV0ZXMuZHhWYWx1ZXMoKSwgdGV4dENvbnRlbnRMZW5ndGgpOwotICAgIGV4dHJhY3RGbG9hdFZh
bHVlc0Zyb21TVkdMZW5ndGhMaXN0KGVsZW1lbnQsIGVsZW1lbnQtPmR5KCksIGF0dHJpYnV0ZXMu
ZHlWYWx1ZXMoKSwgdGV4dENvbnRlbnRMZW5ndGgpOwotICAgIGV4dHJhY3RGbG9hdFZhbHVlc0Zy
b21TVkdOdW1iZXJMaXN0KGVsZW1lbnQtPnJvdGF0ZSgpLCBhdHRyaWJ1dGVzLnJvdGF0ZVZhbHVl
cygpLCB0ZXh0Q29udGVudExlbmd0aCk7CisgICAgYXR0cmlidXRlcy54VmFsdWVzKCkuYXBwZW5k
KFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpOworICAgIGF0dHJpYnV0ZXMu
eVZhbHVlcygpLmFwcGVuZChTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKTsK
KyAgICBhdHRyaWJ1dGVzLmR4VmFsdWVzKCkuYXBwZW5kKFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
OjplbXB0eVZhbHVlKCkpOworICAgIGF0dHJpYnV0ZXMuZHlWYWx1ZXMoKS5hcHBlbmQoU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSk7CisgICAgYXR0cmlidXRlcy5yb3RhdGVW
YWx1ZXMoKS5hcHBlbmQoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSk7Cisg
ICAgLy8gVGhpcyBkb2Vzbid0IGFkZCBhbiBlbXB0eSB2YWx1ZSB0byB0ZXh0TWV0cmljc1ZhbHVl
cygpIG9uIHB1cnBvc2UhCiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmgJKHJldmlzaW9uIDY4ODc2
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0OwogY2xh
c3MgUmVuZGVyU1ZHVGV4dDsKIAorLy8gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyIHBl
cmZvcm1zIHRoZSBmaXJzdCBsYXlvdXQgcGhhc2UgZm9yIFNWRyB0ZXh0LgorLy8KKy8vIEl0IGV4
dHJhY3RzIHRoZSB4L3kvZHgvZHkvcm90YXRlIHZhbHVlcyBmcm9tIHRoZSBTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50cyBpbiB0aGUgRE9NLAorLy8gbWVhc3VyZXMgYWxsIGNoYXJhY3RlcnMgaW4g
dGhlIFJlbmRlclNWR1RleHQgc3VidHJlZSBhbmQgZXh0cmFjdHMga2VybmluZy9saWdhdHVyZSBp
bmZvcm1hdGlvbi4KKy8vIFRoZXNlIHZhbHVlcyBhcmUgcHJvcGFnYXRlZCB0byB0aGUgY29ycmVz
cG9uZGluZyBSZW5kZXJTVkdJbmxpbmVUZXh0IHJlbmRlcmVycy4KKy8vIFRoZSBmaXJzdCBsYXlv
dXQgcGhhc2Ugb25seSBleHRyYWN0cyB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gbmVlZGVkIGlu
IFJlbmRlckJsb2NrTGluZUxheW91dAorLy8gdG8gY3JlYXRlIHRoZSBJbmxpbmVCb3ggdHJlZSBi
YXNlZCBvbiB0ZXh0IGNodW5rIGJvdW5kYXJpZXMgJiBCaURpIGluZm9ybWF0aW9uLgorLy8gVGhl
IHNlY29uZCBsYXlvdXQgcGhhc2UgaXMgY2FycmllZCBvdXQgYnkgU1ZHVGV4dExheW91dEVuZ2lu
ZS4KKwogY2xhc3MgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKIHB1YmxpYzoKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIoKTsK
QEAgLTM4LDI3ICs0NiwzNSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0cnVjdCBMYXlvdXRT
Y29wZSB7CiAgICAgICAgIExheW91dFNjb3BlKCkKLSAgICAgICAgICAgIDogaXNWZXJ0aWNhbFdy
aXRpbmdNb2RlKGZhbHNlKQotICAgICAgICAgICAgLCB0ZXh0Q29udGVudFN0YXJ0KDApCisgICAg
ICAgICAgICA6IHRleHRDb250ZW50U3RhcnQoMCkKICAgICAgICAgICAgICwgdGV4dENvbnRlbnRM
ZW5ndGgoMCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBpc1ZlcnRpY2Fs
V3JpdGluZ01vZGU7CiAgICAgICAgIHVuc2lnbmVkIHRleHRDb250ZW50U3RhcnQ7CiAgICAgICAg
IHVuc2lnbmVkIHRleHRDb250ZW50TGVuZ3RoOwogICAgICAgICBTVkdUZXh0TGF5b3V0QXR0cmli
dXRlcyBhdHRyaWJ1dGVzOwogICAgIH07CiAKLSAgICB2b2lkIGJ1aWxkTGF5b3V0U2NvcGVzKFJl
bmRlck9iamVjdCosIHVuc2lnbmVkJiBhdENoYXJhY3Rlcik7Ci0gICAgdm9pZCBidWlsZExheW91
dFNjb3BlKExheW91dFNjb3BlJiwgUmVuZGVyT2JqZWN0KiwgdW5zaWduZWQgdGV4dENvbnRlbnRT
dGFydCwgdW5zaWduZWQgdGV4dENvbnRlbnRMZW5ndGgpOwotICAgIHZvaWQgYnVpbGRMYXlvdXRB
dHRyaWJ1dGVzRnJvbVNjb3BlcygpOwotICAgIHZvaWQgcHJvcGFnYXRlTGF5b3V0QXR0cmlidXRl
cyhSZW5kZXJPYmplY3QqLCB1bnNpZ25lZCYgYXRDaGFyYWN0ZXIpOwotICAgIHZvaWQgbWVhc3Vy
ZUNoYXJhY3RlcnMoUmVuZGVyU1ZHSW5saW5lVGV4dCosIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
Jik7CisgICAgdm9pZCBidWlsZExheW91dFNjb3BlKExheW91dFNjb3BlJiwgUmVuZGVyT2JqZWN0
KiwgdW5zaWduZWQgdGV4dENvbnRlbnRTdGFydCwgdW5zaWduZWQgdGV4dENvbnRlbnRMZW5ndGgp
IGNvbnN0OworICAgIHZvaWQgYnVpbGRMYXlvdXRTY29wZXMoUmVuZGVyT2JqZWN0KiwgdW5zaWdu
ZWQmIGF0Q2hhcmFjdGVyLCBVQ2hhciYgbGFzdENoYXJhY3Rlcik7CisgICAgdm9pZCBidWlsZE91
dGVybW9zdExheW91dFNjb3BlKFJlbmRlclNWR1RleHQqLCB1bnNpZ25lZCB0ZXh0TGVuZ3RoKTsK
KyAgICB2b2lkIHByb3BhZ2F0ZUxheW91dEF0dHJpYnV0ZXMoUmVuZGVyT2JqZWN0KiwgdW5zaWdu
ZWQmIGF0Q2hhcmFjdGVyLCBVQ2hhciYgbGFzdENoYXJhY3RlcikgY29uc3Q7CisKKyAgICBlbnVt
IExheW91dFZhbHVlVHlwZSB7CisgICAgICAgIFhWYWx1ZSwKKyAgICAgICAgWVZhbHVlLAorICAg
ICAgICBEeFZhbHVlLAorICAgICAgICBEeVZhbHVlLAorICAgICAgICBSb3RhdGVWYWx1ZQorICAg
IH07CisKKyAgICBmbG9hdCBuZXh0TGF5b3V0VmFsdWUoTGF5b3V0VmFsdWVUeXBlLCB1bnNpZ25l
ZCBhdENoYXJhY3RlcikgY29uc3Q7CisgICAgdm9pZCBhc3NpZ25MYXlvdXRBdHRyaWJ1dGVzRm9y
Q2hhcmFjdGVyKFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzJiwgU1ZHVGV4dE1ldHJpY3MmLCB1bnNp
Z25lZCB2YWx1ZUxpc3RQb3NpdGlvbikgY29uc3Q7CisgICAgdm9pZCBhc3NpZ25FbXB0eUxheW91
dEF0dHJpYnV0ZXNGb3JDaGFyYWN0ZXIoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBWZWN0b3I8TGF5b3V0U2NvcGU+IG1fc2NvcGVzOwotICAgIFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNW
R1RleHRMYXlvdXRFbmdpbmUuaCIKKworI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5oIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5oIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgi
CisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIK
KworLy8gU2V0IHRvIGEgdmFsdWUgPiAwIHRvIGR1bXAgdGhlIHRleHQgZnJhZ21lbnRzCisjZGVm
aW5lIERVTVBfVEVYVF9GUkFHTUVOVFMgMAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NWR1Rl
eHRMYXlvdXRFbmdpbmU6OlNWR1RleHRMYXlvdXRFbmdpbmUoKQorICAgIDogbV94KDApCisgICAg
LCBtX3koMCkKKyAgICAsIG1fZHgoMCkKKyAgICAsIG1fZHkoMCkKKyAgICAsIG1faXNWZXJ0aWNh
bFRleHQoZmFsc2UpCisgICAgLCBtX2luUGF0aExheW91dChmYWxzZSkKKyAgICAsIG1fdGV4dFBh
dGhMZW5ndGgoMCkKKyAgICAsIG1fdGV4dFBhdGhDdXJyZW50T2Zmc2V0KDApCisgICAgLCBtX3Rl
eHRQYXRoU3BhY2luZygwKQorICAgICwgbV90ZXh0UGF0aFNjYWxpbmcoMSkKK3sKK30KKwordm9p
ZCBTVkdUZXh0TGF5b3V0RW5naW5lOjp1cGRhdGVDaGFyYWNlclBvc2l0aW9uSWZOZWVkZWQoZmxv
YXQmIHgsIGZsb2F0JiB5KQoreworICAgIGlmIChtX2luUGF0aExheW91dCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gUmVwbGFjZSBjaGFyYWN0ZXJzIHgveSBwb3NpdGlvbiwgd2l0aCB0aGUg
Y3VycmVudCB0ZXh0IHBvc2l0aW9uIHBsdXMgYW55CisgICAgLy8gcmVsYXRpdmUgYWRqdXN0bWVu
dHMsIGlmIGl0IGRvZXNuJ3Qgc3BlY2lmeSBhbiBhYnNvbHV0ZSBwb3NpdGlvbiBpdHNlbGYuCisg
ICAgaWYgKHggPT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkgCisgICAg
ICAgIHggPSBtX3ggKyBtX2R4OworCisgICAgaWYgKHkgPT0gU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXM6OmVtcHR5VmFsdWUoKSkKKyAgICAgICAgeSA9IG1feSArIG1fZHk7CisKKyAgICBtX2R4ID0g
MDsKKyAgICBtX2R5ID0gMDsKK30KKwordm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjp1cGRhdGVD
dXJyZW50VGV4dFBvc2l0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGdseXBoQWR2YW5jZSkK
K3sKKyAgICAvLyBVcGRhdGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGFmdGVyIHByb2Nlc3Npbmcg
dGhlIGNoYXJhY3Rlci4KKyAgICBpZiAobV9pc1ZlcnRpY2FsVGV4dCkgeworICAgICAgICBtX3gg
PSB4OworICAgICAgICBtX3kgPSB5ICsgZ2x5cGhBZHZhbmNlOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1feCA9IHggKyBnbHlwaEFkdmFuY2U7CisgICAgICAgIG1feSA9IHk7CisgICAgfQorfQor
Cit2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OnVwZGF0ZVJlbGF0aXZlUG9zaXRpb25BZGp1c3Rt
ZW50c0lmTmVlZGVkKFZlY3RvcjxmbG9hdD4mIGR4VmFsdWVzLCBWZWN0b3I8ZmxvYXQ+JiBkeVZh
bHVlcywgdW5zaWduZWQgcG9zaXRpb25MaXN0T2Zmc2V0KQoreworICAgIC8vIFVwZGF0ZSByZWxh
dGl2ZSBwb3NpdGlvbmluZyBpbmZvcm1hdGlvbi4KKyAgICBpZiAoZHhWYWx1ZXMuaXNFbXB0eSgp
ICYmIGR5VmFsdWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgZHgg
PSAwOworICAgIGlmICghZHhWYWx1ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGZsb2F0JiBkeEN1
cnJlbnQgPSBkeFZhbHVlcy5hdChwb3NpdGlvbkxpc3RPZmZzZXQpOworICAgICAgICBpZiAoZHhD
dXJyZW50ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCisgICAgICAg
ICAgICBkeCA9IGR4Q3VycmVudDsKKyAgICB9CisKKyAgICBmbG9hdCBkeSA9IDA7CisgICAgaWYg
KCFkeVZhbHVlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZmxvYXQmIGR5Q3VycmVudCA9IGR5VmFs
dWVzLmF0KHBvc2l0aW9uTGlzdE9mZnNldCk7CisgICAgICAgIGlmIChkeUN1cnJlbnQgIT0gU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkKKyAgICAgICAgICAgIGR5ID0gZHlD
dXJyZW50OworICAgIH0KKworICAgIGlmIChtX2luUGF0aExheW91dCkgeworICAgICAgICBpZiAo
bV9pc1ZlcnRpY2FsVGV4dCkgeworICAgICAgICAgICAgbV9keCArPSBkeDsKKyAgICAgICAgICAg
IG1fZHkgPSBkeTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZHggPSBkeDsKKyAg
ICAgICAgICAgIG1fZHkgKz0gZHk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9keCA9IGR4OworICAgIG1fZHkgPSBkeTsKK30KKwordm9pZCBTVkdUZXh0TGF5
b3V0RW5naW5lOjpyZWNvcmRUZXh0RnJhZ21lbnQoU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwg
UmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgdW5zaWduZWQgcG9zaXRpb25MaXN0T2Zmc2V0LCBj
b25zdCBTVkdUZXh0TWV0cmljcyYgbGFzdENoYXJhY3Rlck1ldHJpY3MpCit7CisgICAgQVNTRVJU
KCFtX2N1cnJlbnRUZXh0RnJhZ21lbnQubGVuZ3RoKTsKKworICAgIC8vIEZpZ3VyZSBvdXQgbGVu
Z3RoIG9mIGZyYWdtZW50LgorICAgIG1fY3VycmVudFRleHRGcmFnbWVudC5sZW5ndGggPSBwb3Np
dGlvbkxpc3RPZmZzZXQgLSBtX2N1cnJlbnRUZXh0RnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0
OworCisgICAgLy8gRmlndXJlIG91dCBmcmFnbWVudCBtZXRyaWNzLgorICAgIGlmIChtX2N1cnJl
bnRUZXh0RnJhZ21lbnQubGVuZ3RoID09IDEpIHsKKyAgICAgICAgLy8gRmFzdCBwYXRoLCBjYW4g
cmVseSBvbiBhbHJlYWR5IGNvbXB1dGVkIHBlci1jaGFyYWN0ZXIgbWV0cmljcy4KKyAgICAgICAg
bV9jdXJyZW50VGV4dEZyYWdtZW50LndpZHRoID0gbGFzdENoYXJhY3Rlck1ldHJpY3Mud2lkdGgo
KTsKKyAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50LmhlaWdodCA9IGxhc3RDaGFyYWN0ZXJN
ZXRyaWNzLmhlaWdodCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5lZWQgdG8gbWVhc3Vy
ZSB0aGUgd2hvbGUgcmFuZ2UgKHJhbmdlIG1ldHJpY3MgIT0gc3VtIG9mIGNoYXJhY3RlciBtZXRy
aWNzKQorICAgICAgICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1l
YXN1cmVDaGFyYWN0ZXJSYW5nZSh0ZXh0LCBtX2N1cnJlbnRUZXh0RnJhZ21lbnQucG9zaXRpb25M
aXN0T2Zmc2V0LCBtX2N1cnJlbnRUZXh0RnJhZ21lbnQubGVuZ3RoKTsKKyAgICAgICAgbV9jdXJy
ZW50VGV4dEZyYWdtZW50LndpZHRoID0gbWV0cmljcy53aWR0aCgpOworICAgICAgICBtX2N1cnJl
bnRUZXh0RnJhZ21lbnQuaGVpZ2h0ID0gbWV0cmljcy5oZWlnaHQoKTsKKyAgICB9CisKKyAgICB0
ZXh0Qm94LT50ZXh0RnJhZ21lbnRzKCkuYXBwZW5kKG1fY3VycmVudFRleHRGcmFnbWVudCk7Cisg
ICAgbV9jdXJyZW50VGV4dEZyYWdtZW50ID0gU1ZHVGV4dEZyYWdtZW50KCk7Cit9CisKK2Jvb2wg
U1ZHVGV4dExheW91dEVuZ2luZTo6cGFyZW50RGVmaW5lc1RleHRMZW5ndGgoUmVuZGVyT2JqZWN0
KiBwYXJlbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50UGFyZW50ID0gcGFy
ZW50OworICAgIHdoaWxlIChjdXJyZW50UGFyZW50KSB7CisgICAgICAgIFNWR1RleHRDb250ZW50
RWxlbWVudCogdGV4dENvbnRlbnRFbGVtZW50ID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjplbGVt
ZW50RnJvbVJlbmRlcmVyKGN1cnJlbnRQYXJlbnQpOworICAgICAgICBpZiAodGV4dENvbnRlbnRF
bGVtZW50KSB7CisgICAgICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFk
anVzdFR5cGUgbGVuZ3RoQWRqdXN0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpTVkdMZW5ndGhBZGp1c3RUeXBlPih0ZXh0Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgp
KTsKKyAgICAgICAgICAgIGlmIChsZW5ndGhBZGp1c3QgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpMRU5HVEhBREpVU1RfU1BBQ0lORyAmJiB0ZXh0Q29udGVudEVsZW1lbnQtPnRleHRMZW5ndGgo
KS52YWx1ZSh0ZXh0Q29udGVudEVsZW1lbnQpID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXJyZW50UGFyZW50LT5pc1NWR1RleHQo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjdXJyZW50UGFyZW50ID0g
Y3VycmVudFBhcmVudC0+cGFyZW50KCk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OmJl
Z2luVGV4dFBhdGhMYXlvdXQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1RleHRMYXlvdXRFbmdp
bmUmIGxpbmVMYXlvdXQpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICBtX2luUGF0aExh
eW91dCA9IHRydWU7CisgICAgUmVuZGVyU1ZHVGV4dFBhdGgqIHRleHRQYXRoID0gdG9SZW5kZXJT
VkdUZXh0UGF0aChvYmplY3QpOworCisgICAgbV90ZXh0UGF0aCA9IHRleHRQYXRoLT5sYXlvdXRQ
YXRoKCk7CisgICAgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0ID0gdGV4dFBhdGgtPnN0YXJ0T2Zmc2V0
KCk7CisgICAgbV90ZXh0UGF0aExlbmd0aCA9IG1fdGV4dFBhdGgubGVuZ3RoKCk7CisgICAgaWYg
KG1fdGV4dFBhdGhTdGFydE9mZnNldCA+IDAgJiYgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0IDw9IDEp
CisgICAgICAgIG1fdGV4dFBhdGhTdGFydE9mZnNldCAqPSBtX3RleHRQYXRoTGVuZ3RoOworCisg
ICAgZmxvYXQgdG90YWxMZW5ndGggPSAwOworICAgIHVuc2lnbmVkIHRvdGFsQ2hhcmFjdGVycyA9
IDA7CisKKyAgICBsaW5lTGF5b3V0Lm1fY2h1bmtMYXlvdXRCdWlsZGVyLmJ1aWxkVGV4dENodW5r
cyhsaW5lTGF5b3V0Lm1fbGluZUxheW91dEJveGVzKTsKKyAgICBjb25zdCBWZWN0b3I8U1ZHVGV4
dENodW5rPiYgdGV4dENodW5rcyA9IGxpbmVMYXlvdXQubV9jaHVua0xheW91dEJ1aWxkZXIudGV4
dENodW5rcygpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRleHRDaHVua3Muc2l6ZSgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgU1ZH
VGV4dENodW5rJiBjaHVuayA9IHRleHRDaHVua3MuYXQoaSk7CisKKyAgICAgICAgZmxvYXQgbGVu
Z3RoID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2hhcmFjdGVycyA9IDA7CisgICAgICAgIGNodW5r
LmNhbGN1bGF0ZUxlbmd0aChsZW5ndGgsIGNoYXJhY3RlcnMpOworCisgICAgICAgIC8vIEhhbmRs
ZSB0ZXh0LWFuY2hvciBhcyBhZGRpdGlvbmFsIHN0YXJ0IG9mZnNldCBmb3IgdGV4dCBwYXRocy4K
KyAgICAgICAgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0ICs9IGNodW5rLmNhbGN1bGF0ZVRleHRBbmNo
b3JTaGlmdChsZW5ndGgpOworCisgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aDsKKyAgICAg
ICAgdG90YWxDaGFyYWN0ZXJzICs9IGNoYXJhY3RlcnM7CisgICAgfQorCisgICAgbV90ZXh0UGF0
aEN1cnJlbnRPZmZzZXQgPSBtX3RleHRQYXRoU3RhcnRPZmZzZXQ7CisKKyAgICAvLyBFdmVudHVh
bGx5IGhhbmRsZSB0ZXh0TGVuZ3RoIGFkanVzdG1lbnRzLgorICAgIFNWR1RleHRDb250ZW50RWxl
bWVudDo6U1ZHTGVuZ3RoQWRqdXN0VHlwZSBsZW5ndGhBZGp1c3QgPSBTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6OkxFTkdUSEFESlVTVF9VTktOT1dOOworICAgIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3Ro
ID0gMDsKKworICAgIGlmIChTVkdUZXh0Q29udGVudEVsZW1lbnQqIHRleHRDb250ZW50RWxlbWVu
dCA9IFNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxlbWVudEZyb21SZW5kZXJlcih0ZXh0UGF0aCkp
IHsKKyAgICAgICAgbGVuZ3RoQWRqdXN0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVt
ZW50OjpTVkdMZW5ndGhBZGp1c3RUeXBlPih0ZXh0Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVz
dCgpKTsKKyAgICAgICAgZGVzaXJlZFRleHRMZW5ndGggPSB0ZXh0Q29udGVudEVsZW1lbnQtPnRl
eHRMZW5ndGgoKS52YWx1ZSh0ZXh0Q29udGVudEVsZW1lbnQpOworICAgIH0KKworICAgIGlmICgh
ZGVzaXJlZFRleHRMZW5ndGgpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsZW5ndGhBZGp1
c3QgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpMRU5HVEhBREpVU1RfU1BBQ0lORykKKyAgICAg
ICAgbV90ZXh0UGF0aFNwYWNpbmcgPSAoZGVzaXJlZFRleHRMZW5ndGggLSB0b3RhbExlbmd0aCkg
LyB0b3RhbENoYXJhY3RlcnM7CisgICAgZWxzZQorICAgICAgICBtX3RleHRQYXRoU2NhbGluZyA9
IGRlc2lyZWRUZXh0TGVuZ3RoIC8gdG90YWxMZW5ndGg7Cit9CisKK3ZvaWQgU1ZHVGV4dExheW91
dEVuZ2luZTo6ZW5kVGV4dFBhdGhMYXlvdXQoKQoreworICAgIG1faW5QYXRoTGF5b3V0ID0gZmFs
c2U7CisgICAgbV90ZXh0UGF0aCA9IFBhdGgoKTsKKyAgICBtX3RleHRQYXRoTGVuZ3RoID0gMDsK
KyAgICBtX3RleHRQYXRoU3RhcnRPZmZzZXQgPSAwOworICAgIG1fdGV4dFBhdGhDdXJyZW50T2Zm
c2V0ID0gMDsKKyAgICBtX3RleHRQYXRoU3BhY2luZyA9IDA7CisgICAgbV90ZXh0UGF0aFNjYWxp
bmcgPSAxOworfQorCit2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dElubGluZVRleHRC
b3goU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCkKK3sKKyAgICBBU1NFUlQodGV4dEJveCk7CisK
KyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0ID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHRl
eHRCb3gtPnRleHRSZW5kZXJlcigpKTsKKyAgICBBU1NFUlQodGV4dCk7CisgICAgQVNTRVJUKHRl
eHQtPnBhcmVudCgpKTsKKyAgICBBU1NFUlQodGV4dC0+cGFyZW50KCktPm5vZGUoKSk7CisgICAg
QVNTRVJUKHRleHQtPnBhcmVudCgpLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKworICAgIGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxl
KTsKKworICAgIHRleHRCb3gtPmNsZWFyVGV4dEZyYWdtZW50cygpOworICAgIG1faXNWZXJ0aWNh
bFRleHQgPSBzdHlsZS0+c3ZnU3R5bGUoKS0+aXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCk7CisgICAg
bGF5b3V0VGV4dE9uTGluZU9yUGF0aCh0ZXh0Qm94LCB0ZXh0LCBzdHlsZSk7CisKKyAgICBpZiAo
bV9pblBhdGhMYXlvdXQpIHsKKyAgICAgICAgbV9wYXRoTGF5b3V0Qm94ZXMuYXBwZW5kKHRleHRC
b3gpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9saW5lTGF5b3V0Qm94ZXMuYXBw
ZW5kKHRleHRCb3gpOworfQorCit2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OmZpbmlzaExheW91
dCgpCit7CisgICAgLy8gQWZ0ZXIgYWxsIHRleHQgZnJhZ21lbnRzIGFyZSBzdG9yZWQgaW4gdGhl
aXIgY29ycmVwc29uZGluZyBTVkdJbmxpbmVUZXh0Qm94ZXMsIHdlIGNhbiBsYXlvdXQgaW5kaXZp
ZHVhbCB0ZXh0IGNodW5rcy4KKyAgICAvLyBDaHVuayBsYXlvdXRpbmcgaXMgb25seSBwZXJmb3Jt
ZWQgZm9yIGxpbmUgbGF5b3V0IGJveGVzLCBub3QgZm9yIHBhdGggbGF5b3V0LCB3aGVyZSBpdCBo
YXMgYWxyZWFkeSBiZWVuIGRvbmUuCisgICAgbV9jaHVua0xheW91dEJ1aWxkZXIubGF5b3V0VGV4
dENodW5rcyhtX2xpbmVMYXlvdXRCb3hlcyk7CisKKyAgICAvLyBGaW5hbGl6ZSB0cmFuc2Zvcm0g
bWF0cmljZXMsIGFmdGVyIHRoZSBjaHVuayBsYXlvdXQgY29ycmVjdGlvbnMgaGF2ZSBiZWVuIGFw
cGxpZWQsIGFuZCBhbGwgZnJhZ21lbnQgeC95IHBvc2l0aW9ucyBhcmUgZmluYWxpemVkLgorICAg
IGlmICghbV9saW5lTGF5b3V0Qm94ZXMuaXNFbXB0eSgpKSB7CisjaWYgRFVNUF9URVhUX0ZSQUdN
RU5UUyA+IDAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJMaW5lIGxheW91dDogIik7CisjZW5k
aWYKKworICAgICAgICBmaW5hbGl6ZVRyYW5zZm9ybU1hdHJpY2VzKG1fbGluZUxheW91dEJveGVz
KTsKKyAgICB9CisKKyAgICBpZiAoIW1fcGF0aExheW91dEJveGVzLmlzRW1wdHkoKSkgeworI2lm
IERVTVBfVEVYVF9GUkFHTUVOVFMgPiAwCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUGF0aCBs
YXlvdXQ6ICIpOworI2VuZGlmCisgICAgICAgIGZpbmFsaXplVHJhbnNmb3JtTWF0cmljZXMobV9w
YXRoTGF5b3V0Qm94ZXMpOworICAgIH0KK30KKwordm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpm
aW5hbGl6ZVRyYW5zZm9ybU1hdHJpY2VzKFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGJveGVz
KQoreworICAgIHVuc2lnbmVkIGJveENvdW50ID0gYm94ZXMuc2l6ZSgpOworCisjaWYgRFVNUF9U
RVhUX0ZSQUdNRU5UUyA+IDAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkR1bXBpbmcgYWxsIHRleHQg
ZnJhZ21lbnRzIGluIHRleHQgc3ViIHRyZWUsICVpIGJveGVzXG4iLCBib3hDb3VudCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRpb24gPCBib3hDb3VudDsg
Kytib3hQb3NpdGlvbikgeworICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gYm94
ZXMuYXQoYm94UG9zaXRpb24pOworICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJh
Z21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIi0+IEJveCAlaTogRHVtcGluZyB0ZXh0IGZyYWdtZW50cyBmb3IgU1ZHSW5saW5lVGV4dEJv
eCwgdGV4dEJveD0lcCwgdGV4dFJlbmRlcmVyPSVwXG4iLCBib3hQb3NpdGlvbiwgdGV4dEJveCwg
dGV4dEJveC0+dGV4dFJlbmRlcmVyKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAg
ICAgdGV4dEJveCBwcm9wZXJ0aWVzLCBzdGFydD0laSwgbGVuPSVpXG4iLCB0ZXh0Qm94LT5zdGFy
dCgpLCB0ZXh0Qm94LT5sZW4oKSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgdGV4dFJl
bmRlcmVyIHByb3BlcnRpZXMsIHRleHRMZW5ndGg9JWlcbiIsIHRleHRCb3gtPnRleHRSZW5kZXJl
cigpLT50ZXh0TGVuZ3RoKCkpOworCisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0g
dGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPmNoYXJhY3RlcnMoKTsKKworICAgICAgICB1bnNpZ25l
ZCBmcmFnbWVudENvdW50ID0gZnJhZ21lbnRzLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGZyYWdtZW50Q291bnQ7ICsraSkgeworICAgICAgICAgICAgU1ZHVGV4dEZy
YWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgICAgIFN0cmluZyBm
cmFnbWVudFN0cmluZyhjaGFyYWN0ZXJzICsgZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0LCBm
cmFnbWVudC5sZW5ndGgpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgLT4gRnJh
Z21lbnQgJWksIHg9JWxmLCB5PSVsZiwgd2lkdGg9JWxmLCBoZWlnaHQ9JWxmLCBwb3NpdGlvbkxp
c3RPZmZzZXQ9JWksIGxlbmd0aD0laSwgY2hhcmFjdGVycz0nJXMnXG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgaSwgZnJhZ21lbnQueCwgZnJhZ21lbnQueSwgZnJhZ21lbnQud2lkdGgs
IGZyYWdtZW50LmhlaWdodCwgZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0LCBmcmFnbWVudC5s
ZW5ndGgsIGZyYWdtZW50U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQor
I2VuZGlmCisKKworICAgIGlmICghYm94Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEFm
ZmluZVRyYW5zZm9ybSB0ZXh0Qm94VHJhbnNmb3JtYXRpb247CisgICAgZm9yICh1bnNpZ25lZCBi
b3hQb3NpdGlvbiA9IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsK
KyAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IGJveGVzLmF0KGJveFBvc2l0aW9u
KTsKKyAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9IHRleHRCb3gt
PnRleHRGcmFnbWVudHMoKTsKKworICAgICAgICB1bnNpZ25lZCBmcmFnbWVudENvdW50ID0gZnJh
Z21lbnRzLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZy
YWdtZW50cy5hdChpKTsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtID0g
ZnJhZ21lbnQudHJhbnNmb3JtOworICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm0uaXNJZGVudGl0
eSgpKSB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGZyYWdtZW50
LngsIGZyYWdtZW50LnkpOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWZy
YWdtZW50LngsIC1mcmFnbWVudC55KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9j
aHVua0xheW91dEJ1aWxkZXIudHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94KHRleHRCb3gsIHRleHRC
b3hUcmFuc2Zvcm1hdGlvbik7CisgICAgICAgICAgICBpZiAodGV4dEJveFRyYW5zZm9ybWF0aW9u
LmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0g
dGV4dEJveFRyYW5zZm9ybWF0aW9uOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHRyYW5zZm9ybS5tdWx0aXBseSh0ZXh0Qm94VHJhbnNmb3JtYXRpb24pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgYm94ZXMuY2xlYXIoKTsKK30KKwordm9pZCBTVkdUZXh0TGF5b3V0RW5naW5l
OjpsYXlvdXRUZXh0T25MaW5lT3JQYXRoKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIFJlbmRl
clNWR0lubGluZVRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBT
VkdFbGVtZW50KiBsZW5ndGhDb250ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRleHQt
PnBhcmVudCgpLT5ub2RlKCkpOworICAgIAorICAgIFJlbmRlck9iamVjdCogdGV4dFBhcmVudCA9
IHRleHQtPnBhcmVudCgpOworICAgIGJvb2wgZGVmaW5lc1RleHRMZW5ndGggPSB0ZXh0UGFyZW50
ID8gcGFyZW50RGVmaW5lc1RleHRMZW5ndGgodGV4dFBhcmVudCkgOiBmYWxzZTsKKworICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOworICAgIEFT
U0VSVChzdmdTdHlsZSk7CisKKyAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgYXR0cmlidXRl
cyA9IHRleHQtPmxheW91dEF0dHJpYnV0ZXMoKTsKKyAgICBWZWN0b3I8ZmxvYXQ+JiB4VmFsdWVz
ID0gYXR0cmlidXRlcy54VmFsdWVzKCk7CisgICAgVmVjdG9yPGZsb2F0PiYgeVZhbHVlcyA9IGF0
dHJpYnV0ZXMueVZhbHVlcygpOworICAgIFZlY3RvcjxmbG9hdD4mIGR4VmFsdWVzID0gYXR0cmli
dXRlcy5keFZhbHVlcygpOworICAgIFZlY3RvcjxmbG9hdD4mIGR5VmFsdWVzID0gYXR0cmlidXRl
cy5keVZhbHVlcygpOworICAgIFZlY3RvcjxmbG9hdD4mIHJvdGF0ZVZhbHVlcyA9IGF0dHJpYnV0
ZXMucm90YXRlVmFsdWVzKCk7CisgICAgVmVjdG9yPFNWR1RleHRNZXRyaWNzPiYgdGV4dE1ldHJp
Y3NWYWx1ZXMgPSBhdHRyaWJ1dGVzLnRleHRNZXRyaWNzVmFsdWVzKCk7CisKKyAgICB1bnNpZ25l
ZCBib3hTdGFydCA9IHRleHRCb3gtPnN0YXJ0KCk7CisgICAgdW5zaWduZWQgYm94TGVuZ3RoID0g
dGV4dEJveC0+bGVuKCk7CisgICAgdW5zaWduZWQgdGV4dE1ldHJpY3NTaXplID0gdGV4dE1ldHJp
Y3NWYWx1ZXMuc2l6ZSgpOworICAgIEFTU0VSVCh0ZXh0TWV0cmljc1NpemUgPD0geFZhbHVlcy5z
aXplKCkpOworICAgIEFTU0VSVCh0ZXh0TWV0cmljc1NpemUgPD0geVZhbHVlcy5zaXplKCkpOwor
ICAgIEFTU0VSVCh4VmFsdWVzLnNpemUoKSA9PSB5VmFsdWVzLnNpemUoKSk7CisKKyAgICBpZiAo
Ym94TGVuZ3RoID4gdGV4dE1ldHJpY3NTaXplKQorICAgICAgICB0ZXh0TWV0cmljc1NpemUgPSBi
b3hMZW5ndGg7IAorCisgICAgdW5zaWduZWQgcG9zaXRpb25MaXN0T2Zmc2V0ID0gMDsKKyAgICB1
bnNpZ25lZCBtZXRyaWNzTGlzdE9mZnNldCA9IDA7CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMgPSB0ZXh0LT5jaGFyYWN0ZXJzKCk7CisKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUt
PmZvbnQoKTsKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyBzcGFjaW5nTGF5b3V0KGZv
bnQpOworICAgIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZSBiYXNlbGluZUxheW91dChmb250
KTsKKworICAgIGJvb2wgZGlkU3RhcnRUZXh0RnJhZ21lbnQgPSBmYWxzZTsKKyAgICBib29sIGFw
cGx5U3BhY2luZ1RvTmV4dENoYXJhY3RlciA9IGZhbHNlOworCisgICAgZmxvYXQgbGFzdEFuZ2xl
ID0gMDsKKyAgICBmbG9hdCBiYXNlbGluZVNoaWZ0ID0gYmFzZWxpbmVMYXlvdXQuY2FsY3VsYXRl
QmFzZWxpbmVTaGlmdChzdmdTdHlsZSwgbGVuZ3RoQ29udGV4dCk7CisgICAgYmFzZWxpbmVTaGlm
dCAtPSBiYXNlbGluZUxheW91dC5jYWxjdWxhdGVBbGlnbm1lbnRCYXNlbGluZVNoaWZ0KG1faXNW
ZXJ0aWNhbFRleHQsIHRleHQpOworCisgICAgLy8gTWFpbiBsYXlvdXQgYWxnb3JpdGhtLgorICAg
IGZvciAoOyBtZXRyaWNzTGlzdE9mZnNldCA8IHRleHRNZXRyaWNzU2l6ZSAmJiBwb3NpdGlvbkxp
c3RPZmZzZXQgPCB4VmFsdWVzLnNpemUoKTsgKyttZXRyaWNzTGlzdE9mZnNldCkgeworICAgICAg
ICBTVkdUZXh0TWV0cmljcyYgbWV0cmljcyA9IHRleHRNZXRyaWNzVmFsdWVzLmF0KG1ldHJpY3NM
aXN0T2Zmc2V0KTsKKyAgICAgICAgLy8gQWR2YW5jZSB0byB0ZXh0IGJveCBzdGFydCBsb2NhdGlv
bi4KKyAgICAgICAgaWYgKHBvc2l0aW9uTGlzdE9mZnNldCA8IGJveFN0YXJ0KSB7CisgICAgICAg
ICAgICBwb3NpdGlvbkxpc3RPZmZzZXQgKz0gbWV0cmljcy5sZW5ndGgoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RvcCBpZiB3ZSd2ZSBmaW5pc2hl
ZCBwcm9jZXNzaW5nIHRoaXMgdGV4dCBib3guCisgICAgICAgIGlmIChwb3NpdGlvbkxpc3RPZmZz
ZXQgPj0gYm94U3RhcnQgKyBib3hMZW5ndGgpCisgICAgICAgICAgICBicmVhazsKKyAKKyAgICAg
ICAgZmxvYXQgeCA9IHhWYWx1ZXMuYXQocG9zaXRpb25MaXN0T2Zmc2V0KTsKKyAgICAgICAgZmxv
YXQgeSA9IHlWYWx1ZXMuYXQocG9zaXRpb25MaXN0T2Zmc2V0KTsKKworICAgICAgICAvLyBXaGVu
IHdlJ3ZlIGFkdmFuY2VkIHRvIHRoZSBib3ggc3RhcnQgb2Zmc2V0LCBkZXRlcm1pbmUgdXNpbmcg
dGhlIG9yaWdpbmFsIHgveSB2YWx1ZXMsCisgICAgICAgIC8vIHdoZXRlciB0aGlzIGNoYXJhY3Rl
ciBzdGFydHMgYSBuZXcgdGV4dCBjaHVuaywgYmVmb3JlIGRvaW5nIGFueSBmdXJ0aGVyIHByb2Nl
c3NpbmcuCisgICAgICAgIGlmIChwb3NpdGlvbkxpc3RPZmZzZXQgPT0gYm94U3RhcnQpCisgICAg
ICAgICAgICB0ZXh0Qm94LT5zZXRTdGFydHNOZXdUZXh0Q2h1bmsodGV4dC0+Y2hhcmFjdGVyU3Rh
cnRzTmV3VGV4dENodW5rKGJveFN0YXJ0KSk7CisKKyAgICAgICAgaWYgKG1ldHJpY3MgPT0gU1ZH
VGV4dE1ldHJpY3M6OmVtcHR5TWV0cmljcygpKSB7CisgICAgICAgICAgICBwb3NpdGlvbkxpc3RP
ZmZzZXQgKz0gbWV0cmljcy5sZW5ndGgoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJz
ICsgcG9zaXRpb25MaXN0T2Zmc2V0OworICAgICAgICBmbG9hdCBhbmdsZSA9IDA7CisgICAgICAg
IGlmICghcm90YXRlVmFsdWVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZmxvYXQgbmV3QW5n
bGUgPSByb3RhdGVWYWx1ZXMuYXQocG9zaXRpb25MaXN0T2Zmc2V0KTsKKyAgICAgICAgICAgIGlm
IChuZXdBbmdsZSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQorICAg
ICAgICAgICAgICAgIGFuZ2xlID0gbmV3QW5nbGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBD
YWxjdWxhdGUgZ2x5cGggb3JpZW50YXRpb24gYW5nbGUuCisgICAgICAgIGZsb2F0IG9yaWVudGF0
aW9uQW5nbGUgPSBiYXNlbGluZUxheW91dC5jYWxjdWxhdGVHbHlwaE9yaWVudGF0aW9uQW5nbGUo
bV9pc1ZlcnRpY2FsVGV4dCwgc3ZnU3R5bGUsICpjdXJyZW50Q2hhcmFjdGVyKTsKKworICAgICAg
ICAvLyBDYWxjdWxhdGUgZ2x5cGggYWR2YW5jZSAmIHgveSBvcmllbnRhdGlvbiBzaGlmdHMuCisg
ICAgICAgIGZsb2F0IHhPcmllbnRhdGlvblNoaWZ0ID0gMDsKKyAgICAgICAgZmxvYXQgeU9yaWVu
dGF0aW9uU2hpZnQgPSAwOworICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2UgPSBiYXNlbGluZUxh
eW91dC5jYWxjdWxhdGVHbHlwaEFkdmFuY2VBbmRPcmllbnRhdGlvbihtX2lzVmVydGljYWxUZXh0
LCBtZXRyaWNzLCBvcmllbnRhdGlvbkFuZ2xlLCB4T3JpZW50YXRpb25TaGlmdCwgeU9yaWVudGF0
aW9uU2hpZnQpOworCisgICAgICAgIC8vIEFzc2lnbiBjdXJyZW50IHRleHQgcG9zaXRpb24gdG8g
eC95IHZhbHVlcywgaWYgbmVlZGVkLgorICAgICAgICB1cGRhdGVDaGFyYWNlclBvc2l0aW9uSWZO
ZWVkZWQoeCwgeSk7CisKKyAgICAgICAgLy8gQXBwbHkgZHgvZHkgdmFsdWUgYWRqdXN0bWVudHMg
dG8gY3VycmVudCB0ZXh0IHBvc2l0aW9uLCBpZiBuZWVkZWQuCisgICAgICAgIHVwZGF0ZVJlbGF0
aXZlUG9zaXRpb25BZGp1c3RtZW50c0lmTmVlZGVkKGR4VmFsdWVzLCBkeVZhbHVlcywgcG9zaXRp
b25MaXN0T2Zmc2V0KTsKKworICAgICAgICAvLyBDYWxjdWxhdGUgU1ZHIEZvbnRzIGtlcm5pbmcs
IGlmIG5lZWRlZC4KKyAgICAgICAgZmxvYXQga2VybmluZyA9IHNwYWNpbmdMYXlvdXQuY2FsY3Vs
YXRlU1ZHS2VybmluZyhtX2lzVmVydGljYWxUZXh0LCBtZXRyaWNzLmdseXBoKCkpOworCisgICAg
ICAgIC8vIENhbGN1bGF0ZSBDU1MgJ2tlcm5pbmcnLCAnbGV0dGVyLXNwYWNpbmcnIGFuZCAnd29y
ZC1zcGFjaW5nJyBmb3IgbmV4dCBjaGFyYWN0ZXIsIGlmIG5lZWRlZC4KKyAgICAgICAgZmxvYXQg
c3BhY2luZyA9IHNwYWNpbmdMYXlvdXQuY2FsY3VsYXRlQ1NTS2VybmluZ0FuZFNwYWNpbmcoc3Zn
U3R5bGUsIGxlbmd0aENvbnRleHQsIGN1cnJlbnRDaGFyYWN0ZXIpOworCisgICAgICAgIGZsb2F0
IHRleHRQYXRoT2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKG1faW5QYXRoTGF5b3V0KSB7CisgICAg
ICAgICAgICBmbG9hdCBzY2FsZWRHbHlwaEFkdmFuY2UgPSBnbHlwaEFkdmFuY2UgKiBtX3RleHRQ
YXRoU2NhbGluZzsKKyAgICAgICAgICAgIGlmIChtX2lzVmVydGljYWxUZXh0KSB7CisgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlcmUncyBhbiBhYnNvbHV0ZSB5IHBvc2l0aW9uIGF2YWlsYWJsZSwg
aXQgbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBwb3NpdGlvbiBhbG9uZyB0aGUgcGF0aC4K
KyAgICAgICAgICAgICAgICBpZiAoeSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlW
YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBtX3RleHRQYXRoQ3VycmVudE9mZnNldCA9IHkg
KyBtX3RleHRQYXRoU3RhcnRPZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBtX3RleHRQYXRoQ3Vy
cmVudE9mZnNldCArPSBtX2R5IC0ga2VybmluZzsKKyAgICAgICAgICAgICAgICBtX2R5ID0gMDsK
KworICAgICAgICAgICAgICAgIC8vIEFwcGx5IGR4L2R5IGNvcnJlY3Rpb24gYW5kIHNldHVwIHRy
YW5zbGF0aW9ucyB0aGF0IG1vdmUgdG8gdGhlIGdseXBoIG1pZHBvaW50LgorICAgICAgICAgICAg
ICAgIHhPcmllbnRhdGlvblNoaWZ0ICs9IG1fZHggKyBiYXNlbGluZVNoaWZ0OworICAgICAgICAg
ICAgICAgIHlPcmllbnRhdGlvblNoaWZ0IC09IHNjYWxlZEdseXBoQWR2YW5jZSAvIDI7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gYWJzb2x1
dGUgeCBwb3NpdGlvbiBhdmFpbGFibGUsIGl0IG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcg
cG9zaXRpb24gYWxvbmcgdGhlIHBhdGguCisgICAgICAgICAgICAgICAgaWYgKHggIT0gU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgbV90
ZXh0UGF0aEN1cnJlbnRPZmZzZXQgPSB4ICsgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0OworCisgICAg
ICAgICAgICAgICAgbV90ZXh0UGF0aEN1cnJlbnRPZmZzZXQgKz0gbV9keCAtIGtlcm5pbmc7Cisg
ICAgICAgICAgICAgICAgbV9keCA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBBcHBseSBkeC9k
eSBjb3JyZWN0aW9uIGFuZCBzZXR1cCB0cmFuc2xhdGlvbnMgdGhhdCBtb3ZlIHRvIHRoZSBnbHlw
aCBtaWRwb2ludC4KKyAgICAgICAgICAgICAgICB4T3JpZW50YXRpb25TaGlmdCAtPSBzY2FsZWRH
bHlwaEFkdmFuY2UgLyAyOworICAgICAgICAgICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ICs9IG1f
ZHkgLSBiYXNlbGluZVNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDYWxj
dWxhdGUgY3VycmVudCBvZmZzZXQgYWxvbmcgcGF0aC4KKyAgICAgICAgICAgIHRleHRQYXRoT2Zm
c2V0ID0gbV90ZXh0UGF0aEN1cnJlbnRPZmZzZXQgKyBzY2FsZWRHbHlwaEFkdmFuY2UgLyAyOwor
CisgICAgICAgICAgICAvLyBNb3ZlIHRvIG5leHQgY2hhcmFjdGVyLgorICAgICAgICAgICAgbV90
ZXh0UGF0aEN1cnJlbnRPZmZzZXQgKz0gc2NhbGVkR2x5cGhBZHZhbmNlICsgbV90ZXh0UGF0aFNw
YWNpbmcgKyBzcGFjaW5nICogbV90ZXh0UGF0aFNjYWxpbmc7CisKKyAgICAgICAgICAgIC8vIFNr
aXAgY2hhcmFjdGVyLCBpZiB3ZSdyZSBiZWZvcmUgdGhlIHBhdGguCisgICAgICAgICAgICBpZiAo
dGV4dFBhdGhPZmZzZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgcG9zaXRpb25MaXN0T2Zmc2V0
ICs9IG1ldHJpY3MubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0b3AgcHJvY2Vzc2luZywgaWYgdGhlIG5leHQgY2hh
cmFjdGVyIGxpZXMgYmVoaW5kIHRoZSBwYXRoLgorICAgICAgICAgICAgaWYgKHRleHRQYXRoT2Zm
c2V0ID4gbV90ZXh0UGF0aExlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgYm9vbCBvayA9IGZhbHNlOworICAgICAgICAgICAgRmxvYXRQb2ludCBwb2ludCA9IG1f
dGV4dFBhdGgucG9pbnRBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spOworICAgICAgICAgICAg
QVNTRVJUKG9rKTsKKworICAgICAgICAgICAgeCA9IHBvaW50LngoKTsKKyAgICAgICAgICAgIHkg
PSBwb2ludC55KCk7CisgICAgICAgICAgICBhbmdsZSA9IG1fdGV4dFBhdGgubm9ybWFsQW5nbGVB
dExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spOworICAgICAgICAgICAgQVNTRVJUKG9rKTsKKwor
ICAgICAgICAgICAgLy8gRm9yIHZlcnRpY2FsIHRleHQgb24gcGF0aCwgdGhlIGFjdHVhbCBhbmds
ZSBoYXMgdG8gYmUgcm90YXRlZCA5MCBkZWdyZWVzIGFudGktY2xvY2t3aXNlLCBub3QgdGhlIG9y
aWVudGF0aW9uIGFuZ2xlIQorICAgICAgICAgICAgaWYgKG1faXNWZXJ0aWNhbFRleHQpCisgICAg
ICAgICAgICAgICAgYW5nbGUgLT0gOTA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBBcHBseSBhbGwgcHJldmlvdXNseSBjYWxjdWxhdGVkIHNoaWZ0IHZhbHVlcy4KKyAgICAgICAg
ICAgIGlmIChtX2lzVmVydGljYWxUZXh0KSB7CisgICAgICAgICAgICAgICAgeCArPSBiYXNlbGlu
ZVNoaWZ0OworICAgICAgICAgICAgICAgIHkgLT0ga2VybmluZzsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgeCAtPSBrZXJuaW5nOworICAgICAgICAgICAgICAgIHkgLT0g
YmFzZWxpbmVTaGlmdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeCArPSBtX2R4Owor
ICAgICAgICAgICAgeSArPSBtX2R5OworICAgICAgICB9CisKKyAgICAgICAgLy8gRGV0ZXJtaW5l
IHdoZXRlciB3ZSBoYXZlIHRvIHN0YXJ0IGEgbmV3IGZyYWdtZW50LgorICAgICAgICBib29sIHNo
b3VsZFN0YXJ0TmV3RnJhZ21lbnQgPSBmYWxzZTsKKworICAgICAgICBpZiAobV9keCB8fCBtX2R5
KQorICAgICAgICAgICAgc2hvdWxkU3RhcnROZXdGcmFnbWVudCA9IHRydWU7CisKKyAgICAgICAg
aWYgKCFzaG91bGRTdGFydE5ld0ZyYWdtZW50ICYmIChtX2lzVmVydGljYWxUZXh0IHx8IG1faW5Q
YXRoTGF5b3V0KSkKKyAgICAgICAgICAgIHNob3VsZFN0YXJ0TmV3RnJhZ21lbnQgPSB0cnVlOwor
CisgICAgICAgIGlmICghc2hvdWxkU3RhcnROZXdGcmFnbWVudCAmJiAoYW5nbGUgfHwgYW5nbGUg
IT0gbGFzdEFuZ2xlIHx8IG9yaWVudGF0aW9uQW5nbGUpKQorICAgICAgICAgICAgc2hvdWxkU3Rh
cnROZXdGcmFnbWVudCA9IHRydWU7CisKKyAgICAgICAgaWYgKCFzaG91bGRTdGFydE5ld0ZyYWdt
ZW50ICYmIChrZXJuaW5nIHx8IGFwcGx5U3BhY2luZ1RvTmV4dENoYXJhY3RlciB8fCBkZWZpbmVz
VGV4dExlbmd0aCkpCisgICAgICAgICAgICBzaG91bGRTdGFydE5ld0ZyYWdtZW50ID0gdHJ1ZTsK
KworICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IHN0YXJ0ZWQgYSBmcmFnbWVudCwgY2xvc2UgaXQg
bm93LgorICAgICAgICBpZiAoZGlkU3RhcnRUZXh0RnJhZ21lbnQgJiYgc2hvdWxkU3RhcnROZXdG
cmFnbWVudCkgeworICAgICAgICAgICAgYXBwbHlTcGFjaW5nVG9OZXh0Q2hhcmFjdGVyID0gZmFs
c2U7CisgICAgICAgICAgICByZWNvcmRUZXh0RnJhZ21lbnQodGV4dEJveCwgdGV4dCwgcG9zaXRp
b25MaXN0T2Zmc2V0LCB0ZXh0TWV0cmljc1ZhbHVlcy5hdChtZXRyaWNzTGlzdE9mZnNldCAtIDEp
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEV2ZW50dWFsbHkgc3RhcnQgYSBuZXcgZnJhZ21l
bnQsIGlmIG5vdCB5ZXQgZG9uZS4KKyAgICAgICAgaWYgKCFkaWRTdGFydFRleHRGcmFnbWVudCB8
fCBzaG91bGRTdGFydE5ld0ZyYWdtZW50KSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVu
dFRleHRGcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKCFt
X2N1cnJlbnRUZXh0RnJhZ21lbnQubGVuZ3RoKTsKKworICAgICAgICAgICAgZGlkU3RhcnRUZXh0
RnJhZ21lbnQgPSB0cnVlOworICAgICAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50LnBvc2l0
aW9uTGlzdE9mZnNldCA9IHBvc2l0aW9uTGlzdE9mZnNldDsKKyAgICAgICAgICAgIG1fY3VycmVu
dFRleHRGcmFnbWVudC54ID0geDsKKyAgICAgICAgICAgIG1fY3VycmVudFRleHRGcmFnbWVudC55
ID0geTsKKworICAgICAgICAgICAgLy8gQnVpbGQgZnJhZ21lbnQgdHJhbnNmb3JtYXRpb24uCisg
ICAgICAgICAgICBpZiAoYW5nbGUpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdt
ZW50LnRyYW5zZm9ybS5yb3RhdGUoYW5nbGUpOworCisgICAgICAgICAgICBpZiAoeE9yaWVudGF0
aW9uU2hpZnQgfHwgeU9yaWVudGF0aW9uU2hpZnQpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
VGV4dEZyYWdtZW50LnRyYW5zZm9ybS50cmFuc2xhdGUoeE9yaWVudGF0aW9uU2hpZnQsIHlPcmll
bnRhdGlvblNoaWZ0KTsKKworICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uQW5nbGUpCisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50LnRyYW5zZm9ybS5yb3RhdGUob3JpZW50
YXRpb25BbmdsZSk7CisKKyAgICAgICAgICAgIGlmIChtX2luUGF0aExheW91dCAmJiBtX3RleHRQ
YXRoU2NhbGluZyAhPSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKG1faXNWZXJ0aWNhbFRleHQp
CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRleHRGcmFnbWVudC50cmFuc2Zvcm0uc2Nh
bGVOb25Vbmlmb3JtKDEsIG1fdGV4dFBhdGhTY2FsaW5nKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRleHRGcmFnbWVudC50cmFuc2Zvcm0uc2Nh
bGVOb25Vbmlmb3JtKG1fdGV4dFBhdGhTY2FsaW5nLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSBjdXJyZW50IHRleHQgcG9zaXRpb24sIGFmdGVyIHBy
b2Nlc3Npbmcgb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGZpbmlzaGVkLgorICAgICAgICBpZiAo
bV9pblBhdGhMYXlvdXQpCisgICAgICAgICAgICB1cGRhdGVDdXJyZW50VGV4dFBvc2l0aW9uKHgs
IHksIGdseXBoQWR2YW5jZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gQXBwbHkg
Q1NTICdrZXJuaW5nJywgJ2xldHRlci1zcGFjaW5nJyBhbmQgJ3dvcmQtc3BhY2luZycgdG8gbmV4
dCBjaGFyYWN0ZXIsIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIGlmIChzcGFjaW5nKQorICAgICAg
ICAgICAgICAgIGFwcGx5U3BhY2luZ1RvTmV4dENoYXJhY3RlciA9IHRydWU7CisKKyAgICAgICAg
ICAgIGZsb2F0IHhOZXcgPSB4IC0gbV9keDsKKyAgICAgICAgICAgIGZsb2F0IHlOZXcgPSB5IC0g
bV9keTsKKworICAgICAgICAgICAgaWYgKG1faXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAg
ICAgeE5ldyAtPSBiYXNlbGluZVNoaWZ0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHlOZXcgKz0gYmFzZWxpbmVTaGlmdDsKKworICAgICAgICAgICAgdXBkYXRlQ3VycmVudFRl
eHRQb3NpdGlvbih4TmV3LCB5TmV3LCBnbHlwaEFkdmFuY2UgKyBzcGFjaW5nKTsKKyAgICAgICAg
fQorCisgICAgICAgIHBvc2l0aW9uTGlzdE9mZnNldCArPSBtZXRyaWNzLmxlbmd0aCgpOworICAg
ICAgICBsYXN0QW5nbGUgPSBhbmdsZTsKKyAgICB9CisKKyAgICBpZiAoIWRpZFN0YXJ0VGV4dEZy
YWdtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbG9zZSBsYXN0IG9wZW4gZnJhZ21l
bnQsIGlmIG5lZWRlZC4KKyAgICByZWNvcmRUZXh0RnJhZ21lbnQodGV4dEJveCwgdGV4dCwgcG9z
aXRpb25MaXN0T2Zmc2V0LCB0ZXh0TWV0cmljc1ZhbHVlcy5hdChtZXRyaWNzTGlzdE9mZnNldCAt
IDEpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHVGV4dExheW91dEVuZ2lu
ZV9oCisjZGVmaW5lIFNWR1RleHRMYXlvdXRFbmdpbmVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiU1ZHVGV4dENodW5rQnVpbGRlci5oIgorI2luY2x1
ZGUgIlNWR1RleHRGcmFnbWVudC5oIgorI2luY2x1ZGUgIlNWR1RleHRNZXRyaWNzLmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRl
ck9iamVjdDsKK2NsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgUmVuZGVyU1ZHSW5saW5lVGV4dDsK
K2NsYXNzIFNWR0VsZW1lbnQ7CitjbGFzcyBTVkdJbmxpbmVUZXh0Qm94OworY2xhc3MgU1ZHUmVu
ZGVyU3R5bGU7CisKKy8vIFNWR1RleHRMYXlvdXRFbmdpbmUgcGVyZm9ybXMgdGhlIHNlY29uZCBs
YXlvdXQgcGhhc2UgZm9yIFNWRyB0ZXh0LgorLy8KKy8vIFRoZSBJbmxpbmVCb3ggdHJlZSB3YXMg
Y3JlYXRlZCwgY29udGFpbmluZyB0aGUgdGV4dCBjaHVuayBpbmZvcm1hdGlvbiwgbmVjZXNzYXJ5
IHRvIGFwcGx5CisvLyBjZXJ0YWluIFNWRyBzcGVjaWZpYyB0ZXh0IGxheW91dCBwcm9wZXJ0aWVz
ICh0ZXh0LWxlbmd0aCBhZGp1c3RtZW50cyBhbmQgdGV4dC1hbmNob3IpLgorLy8gVGhlIHNlY29u
ZCBsYXlvdXQgcGhhc2UgdXNlcyB0aGUgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMgc3RvcmVkIGlu
IHRoZSBpbmRpdmlkdWFsCisvLyBSZW5kZXJTVkdJbmxpbmVUZXh0IHJlbmRlcmVycyB0byBjb21w
dXRlIHRoZSBmaW5hbCBwb3NpdGlvbnMgZm9yIGVhY2ggY2hhcmFjdGVyCisvLyB3aGljaCBhcmUg
c3RvcmVkIGluIHRoZSBTVkdJbmxpbmVUZXh0Qm94IG9iamVjdHMuCisKK2NsYXNzIFNWR1RleHRM
YXlvdXRFbmdpbmUgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIFNWR1RleHRM
YXlvdXRFbmdpbmUoKTsKKyAgICBTVkdUZXh0Q2h1bmtCdWlsZGVyJiBjaHVua0xheW91dEJ1aWxk
ZXIoKSB7IHJldHVybiBtX2NodW5rTGF5b3V0QnVpbGRlcjsgfQorCisgICAgdm9pZCBiZWdpblRl
eHRQYXRoTGF5b3V0KFJlbmRlck9iamVjdCosIFNWR1RleHRMYXlvdXRFbmdpbmUmIGxpbmVMYXlv
dXQpOworICAgIHZvaWQgZW5kVGV4dFBhdGhMYXlvdXQoKTsKKworICAgIHZvaWQgbGF5b3V0SW5s
aW5lVGV4dEJveChTVkdJbmxpbmVUZXh0Qm94Kik7CisgICAgdm9pZCBmaW5pc2hMYXlvdXQoKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZUNoYXJhY2VyUG9zaXRpb25JZk5lZWRlZChmbG9h
dCYgeCwgZmxvYXQmIHkpOworICAgIHZvaWQgdXBkYXRlQ3VycmVudFRleHRQb3NpdGlvbihmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCBnbHlwaEFkdmFuY2UpOworICAgIHZvaWQgdXBkYXRlUmVsYXRp
dmVQb3NpdGlvbkFkanVzdG1lbnRzSWZOZWVkZWQoVmVjdG9yPGZsb2F0PiYgZHhWYWx1ZXMsIFZl
Y3RvcjxmbG9hdD4mIGR5VmFsdWVzLCB1bnNpZ25lZCB2YWx1ZUxpc3RQb3NpdGlvbik7CisKKyAg
ICB2b2lkIHJlY29yZFRleHRGcmFnbWVudChTVkdJbmxpbmVUZXh0Qm94KiwgUmVuZGVyU1ZHSW5s
aW5lVGV4dCosIHVuc2lnbmVkIHBvc2l0aW9uTGlzdE9mZnNldCwgY29uc3QgU1ZHVGV4dE1ldHJp
Y3MmIGxhc3RDaGFyYWN0ZXJNZXRyaWNzKTsKKyAgICBib29sIHBhcmVudERlZmluZXNUZXh0TGVu
Z3RoKFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgdm9pZCBsYXlvdXRUZXh0T25MaW5lT3JQ
YXRoKFNWR0lubGluZVRleHRCb3gqLCBSZW5kZXJTVkdJbmxpbmVUZXh0KiwgY29uc3QgUmVuZGVy
U3R5bGUqKTsKKyAgICB2b2lkIGZpbmFsaXplVHJhbnNmb3JtTWF0cmljZXMoVmVjdG9yPFNWR0lu
bGluZVRleHRCb3gqPiYpOworCitwcml2YXRlOgorICAgIFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94
Kj4gbV9saW5lTGF5b3V0Qm94ZXM7CisgICAgVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiBtX3Bh
dGhMYXlvdXRCb3hlczsKKyAgICBTVkdUZXh0Q2h1bmtCdWlsZGVyIG1fY2h1bmtMYXlvdXRCdWls
ZGVyOworCisgICAgU1ZHVGV4dEZyYWdtZW50IG1fY3VycmVudFRleHRGcmFnbWVudDsKKyAgICBm
bG9hdCBtX3g7CisgICAgZmxvYXQgbV95OworICAgIGZsb2F0IG1fZHg7CisgICAgZmxvYXQgbV9k
eTsKKyAgICBib29sIG1faXNWZXJ0aWNhbFRleHQ7CisgICAgYm9vbCBtX2luUGF0aExheW91dDsK
KworICAgIC8vIFRleHQgb24gcGF0aCBsYXlvdXQKKyAgICBQYXRoIG1fdGV4dFBhdGg7CisgICAg
ZmxvYXQgbV90ZXh0UGF0aExlbmd0aDsKKyAgICBmbG9hdCBtX3RleHRQYXRoU3RhcnRPZmZzZXQ7
CisgICAgZmxvYXQgbV90ZXh0UGF0aEN1cnJlbnRPZmZzZXQ7CisgICAgZmxvYXQgbV90ZXh0UGF0
aFNwYWNpbmc7CisgICAgZmxvYXQgbV90ZXh0UGF0aFNjYWxpbmc7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAkocmV2aXNpb24gNjg4NzQpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTkgKzI1LDI5IEBACiAjaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlJlbmRl
ckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
SW5saW5lVGV4dC5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJT
VkdUZXh0TWV0cmljcy5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogCisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBCYXNlIHN0
cnVjdHVyZSBmb3IgY2FsbGJhY2sgdXNlciBkYXRhCiBzdHJ1Y3QgU1ZHVGV4dFF1ZXJ5OjpEYXRh
IHsKICAgICBEYXRhKCkKLSAgICAgICAgOiBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnMoMCkKKyAg
ICAgICAgOiBpc1ZlcnRpY2FsVGV4dChmYWxzZSkKKyAgICAgICAgLCBwcm9jZXNzZWRDaGFyYWN0
ZXJzKDApCisgICAgICAgICwgdGV4dFJlbmRlcmVyKDApCisgICAgICAgICwgdGV4dEJveCgwKQog
ICAgIHsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnM7Cisg
ICAgYm9vbCBpc1ZlcnRpY2FsVGV4dDsKKyAgICB1bnNpZ25lZCBwcm9jZXNzZWRDaGFyYWN0ZXJz
OworICAgIFJlbmRlclNWR0lubGluZVRleHQqIHRleHRSZW5kZXJlcjsKKyAgICBjb25zdCBTVkdJ
bmxpbmVUZXh0Qm94KiB0ZXh0Qm94OwogfTsKIAogc3RhdGljIGlubGluZSBJbmxpbmVGbG93Qm94
KiBmbG93Qm94Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKQEAgLTcwLDEzICs4
MCwxNSBAQCBzdGF0aWMgaW5saW5lIElubGluZUZsb3dCb3gqIGZsb3dCb3hGb3JSCiAgICAgcmV0
dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgbWFwTGVuZ3RoVGhyb3VnaENodW5rVHJh
bnNmb3JtYXRpb24oY29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgYm9vbCBpc1ZlcnRp
Y2FsVGV4dCwgZmxvYXQgbGVuZ3RoKQorc3RhdGljIGlubGluZSBmbG9hdCBtYXBMZW5ndGhUaHJv
dWdoRnJhZ21lbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50
LCBib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCBsZW5ndGgpCiB7Ci0gICAgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0gPSB0ZXh0Qm94LT5jaHVua1RyYW5zZm9ybWF0aW9uKCk7Ci0g
ICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgaWYgKGZyYWdtZW50LnRyYW5zZm9y
bS5pc0lkZW50aXR5KCkpCiAgICAgICAgIHJldHVybiBsZW5ndGg7Ci0gICAgICAgIAotICAgIHJl
dHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0PGRvdWJsZT4obGVuZ3RoKSAq
IChpc1ZlcnRpY2FsVGV4dCA/IHRyYW5zZm9ybS5kKCkgOiB0cmFuc2Zvcm0uYSgpKSk7CisKKyAg
ICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KHN0YXRpY19jYXN0PGRvdWJsZT4obGVuZ3RoKSAqIGZyYWdtZW50LnRyYW5zZm9ybS55U2Nh
bGUoKSk7CisKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGF0aWNfY2FzdDxk
b3VibGU+KGxlbmd0aCkgKiBmcmFnbWVudC50cmFuc2Zvcm0ueFNjYWxlKCkpOwogfQogCiBTVkdU
ZXh0UXVlcnk6OlNWR1RleHRRdWVyeShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQpAQCAtMTA0LDc0
ICsxMTYsMTM3IEBAIHZvaWQgU1ZHVGV4dFF1ZXJ5Ojpjb2xsZWN0VGV4dEJveGVzSW5GbG8KICAg
ICB9CiB9CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5OjpleGVjdXRlUXVlcnkoRGF0YSogcXVlcnlEYXRh
LCBQcm9jZXNzVGV4dENodW5rUGFydENhbGxiYWNrIGNodW5rUGFydENhbGxiYWNrKSBjb25zdAor
Ym9vbCBTVkdUZXh0UXVlcnk6OmV4ZWN1dGVRdWVyeShEYXRhKiBxdWVyeURhdGEsIFByb2Nlc3NU
ZXh0RnJhZ21lbnRDYWxsYmFjayBmcmFnbWVudENhbGxiYWNrKSBjb25zdAogewogICAgIEFTU0VS
VCghbV90ZXh0Qm94ZXMuaXNFbXB0eSgpKTsKLSAgICBib29sIGZpbmlzaGVkID0gZmFsc2U7CisK
KyAgICB1bnNpZ25lZCBwcm9jZXNzZWRDaGFyYWN0ZXJzID0gMDsKKyAgICB1bnNpZ25lZCB0ZXh0
Qm94Q291bnQgPSBtX3RleHRCb3hlcy5zaXplKCk7CiAKICAgICAvLyBMb29wIG92ZXIgYWxsIHRl
eHQgYm94ZXMKLSAgICBjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3RleHRCb3hlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTVkdJbmxpbmVU
ZXh0Qm94Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90ZXh0Qm94ZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSAq
aXQ7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0PiYgcGFydHMgPSB0ZXh0
Qm94LT5zdmdUZXh0Q2h1bmtQYXJ0cygpOwotCi0gICAgICAgIGludCBwcm9jZXNzZWRDaGFyYWN0
ZXJzID0gMDsKLQotICAgICAgICAvLyBMb29wIG92ZXIgYWxsIHRleHQgY2h1bmsgcGFydHMgaW4g
dGhpcyB0ZXh0IGJveCwgZmlyaW5nIGEgY2FsbGJhY2sgZm9yIGVhY2ggY2h1bmsgcGFydC4KLSAg
ICAgICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBwYXJ0
RW5kID0gcGFydHMuZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+
Ojpjb25zdF9pdGVyYXRvciBwYXJ0SXQgPSBwYXJ0cy5iZWdpbigpOyBwYXJ0SXQgIT0gcGFydEVu
ZDsgKytwYXJ0SXQpIHsKLSAgICAgICAgICAgIGlmICgodGhpcy0+KmNodW5rUGFydENhbGxiYWNr
KShxdWVyeURhdGEsIHRleHRCb3gsICpwYXJ0SXQpKSB7Ci0gICAgICAgICAgICAgICAgZmluaXNo
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgIGZv
ciAodW5zaWduZWQgdGV4dEJveFBvc2l0aW9uID0gMDsgdGV4dEJveFBvc2l0aW9uIDwgdGV4dEJv
eENvdW50OyArK3RleHRCb3hQb3NpdGlvbikgeworICAgICAgICBxdWVyeURhdGEtPnRleHRCb3gg
PSBtX3RleHRCb3hlcy5hdCh0ZXh0Qm94UG9zaXRpb24pOworICAgICAgICBxdWVyeURhdGEtPnRl
eHRSZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChxdWVyeURhdGEtPnRleHRCb3gtPnRl
eHRSZW5kZXJlcigpKTsKKyAgICAgICAgQVNTRVJUKHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyKTsK
KyAgICAgICAgQVNTRVJUKHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5zdHlsZSgpKTsKKyAgICAg
ICAgQVNTRVJUKHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsK
KworICAgICAgICBxdWVyeURhdGEtPmlzVmVydGljYWxUZXh0ID0gcXVlcnlEYXRhLT50ZXh0UmVu
ZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCktPmlzVmVydGljYWxXcml0aW5nTW9kZSgpOworICAg
ICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gcXVlcnlEYXRh
LT50ZXh0Qm94LT50ZXh0RnJhZ21lbnRzKCk7CisgICAgCisgICAgICAgIC8vIExvb3Agb3ZlciBh
bGwgdGV4dCBmcmFnbWVudHMgaW4gdGhpcyB0ZXh0IGJveCwgZmlyaW5nIGEgY2FsbGJhY2sgZm9y
IGVhY2guCisgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50Q291bnQgPSBmcmFnbWVudHMuc2l6ZSgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRDb3VudDsgKytpKSB7
CisgICAgICAgICAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRz
LmF0KGkpOworICAgICAgICAgICAgaWYgKCh0aGlzLT4qZnJhZ21lbnRDYWxsYmFjaykocXVlcnlE
YXRhLCBmcmFnbWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAg
ICAgIHByb2Nlc3NlZENoYXJhY3RlcnMgKz0gcGFydEl0LT5sZW5ndGg7CisgICAgICAgICAgICBw
cm9jZXNzZWRDaGFyYWN0ZXJzICs9IGZyYWdtZW50Lmxlbmd0aDsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChmaW5pc2hlZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHF1ZXJ5RGF0
YS0+cHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJzICs9IHByb2Nlc3NlZENoYXJhY3RlcnM7CisgICAg
ICAgIHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyA9IHByb2Nlc3NlZENoYXJhY3RlcnM7
CiAgICAgfQogCi0gICAgcmV0dXJuIGZpbmlzaGVkOworICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0QW5kTGVuZ3RoSW50b0NodW5rUGFydENvb3JkaW5h
dGVzKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgY29u
c3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBv
c2l0aW9uKSBjb25zdAorYm9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50
b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmIGZyYWdtZW50LCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0
CiB7Ci0gICAgLy8gUmV1c2UgdGhlIHNhbWUgbG9naWMgdXNlZCBmb3IgdGV4dCBzZWxlY3Rpb24g
JiBwYWludGluZywgdG8gbWFwIG91ciBxdWVyeSBzdGFydC9sZW5ndGggaW50byBzdGFydC9lbmRQ
b3NpdGlvbnMgb2YgdGhlIGN1cnJlbnQgdGV4dCBjaHVuayBwYXJ0LgotICAgIHN0YXJ0UG9zaXRp
b24gLT0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaHVua0NoYXJhY3RlcnM7Ci0gICAgZW5kUG9zaXRp
b24gLT0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaHVua0NoYXJhY3RlcnM7Ci0gICAgdGV4dEJveC0+
bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMoc3RhcnRQb3NpdGlv
biwgZW5kUG9zaXRpb24sIHBhcnQpOworICAgIC8vIFJldXNlIHRoZSBzYW1lIGxvZ2ljIHVzZWQg
Zm9yIHRleHQgc2VsZWN0aW9uICYgcGFpbnRpbmcsIHRvIG1hcCBvdXIgcXVlcnkgc3RhcnQvbGVu
Z3RoIGludG8gc3RhcnQvZW5kUG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IHRleHQgZnJhZ21lbnQu
CisgICAgc3RhcnRQb3NpdGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnM7Cisg
ICAgZW5kUG9zaXRpb24gLT0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzOwogCi0gICAg
Ly8gSWYgc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uLCB0aGVuIHRoZSBwb3NpdGlvbiB3ZSdy
ZSBzdXBwb3NlZCB0byBtZWFzdXJlIGxpZXMgaW4gdGhpcyBjaHVuayBwYXJ0LgotICAgIHJldHVy
biBzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb247CisgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0g
ZW5kUG9zaXRpb24gfHwgc3RhcnRQb3NpdGlvbiA8IDAgfHwgZW5kUG9zaXRpb24gPCAwKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXF1ZXJ5RGF0YS0+dGV4dEJveC0+bWFwU3Rh
cnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwgc3RhcnRQb3Np
dGlvbiwgZW5kUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtb2RpZnlT
dGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMocXVlcnlEYXRhLCBzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbik7CisgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlv
bik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWZsb2F0IFNWR1RleHRRdWVyeTo6bWVhc3VyZUNo
YXJhY3RlclJhbmdlKGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIFJlbmRlclN0eWxl
KiBzdHlsZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBsZW5n
dGgpIGNvbnN0Cit2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNw
ZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQm
IGVuZFBvc2l0aW9uKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBWZXJ0aWNhbCB3cml0aW5nIG1v
ZGUgbmVlZHMgdG8gYmUgaGFuZGxlZCBtb3JlIGFjY3VyYXRlLgotICAgIGlmIChpc1ZlcnRpY2Fs
VGV4dCkKLSAgICAgICAgcmV0dXJuIGxlbmd0aCAqIHN0eWxlLT5mb250KCkuaGVpZ2h0KCk7Cisg
ICAgY29uc3QgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmIGxheW91dEF0dHJpYnV0ZXMgPSBxdWVy
eURhdGEtPnRleHRSZW5kZXJlci0+bGF5b3V0QXR0cmlidXRlcygpOworICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHhWYWx1ZXMgPSBsYXlvdXRBdHRyaWJ1dGVzLnhWYWx1ZXMoKTsKKyAgICBjb25z
dCBWZWN0b3I8U1ZHVGV4dE1ldHJpY3M+JiB0ZXh0TWV0cmljc1ZhbHVlcyA9IGxheW91dEF0dHJp
YnV0ZXMudGV4dE1ldHJpY3NWYWx1ZXMoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBzdGFydENoYXJh
Y3RlciA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT5jaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94LT5z
dGFydCgpICsgc3RhcnRQb3NpdGlvbjsKLSAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5mbG9hdFdp
ZHRoKHN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KHN0YXJ0Q2hhcmFjdGVyLCBsZW5ndGgsIHN0
eWxlLCB0ZXh0Qm94KSk7Ci19CisgICAgdW5zaWduZWQgYm94U3RhcnQgPSBxdWVyeURhdGEtPnRl
eHRCb3gtPnN0YXJ0KCk7CisgICAgdW5zaWduZWQgYm94TGVuZ3RoID0gcXVlcnlEYXRhLT50ZXh0
Qm94LT5sZW4oKTsKIAotLy8gbnVtYmVyT2ZDaGFyYWN0ZXJzKCkgaW1wbGVtZW50YXRpb24KLXN0
cnVjdCBOdW1iZXJPZkNoYXJhY3RlcnNEYXRhIDogU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKLSAgICBO
dW1iZXJPZkNoYXJhY3RlcnNEYXRhKCkKLSAgICAgICAgOiBjaGFyYWN0ZXJzKDApCi0gICAgewor
ICAgIHVuc2lnbmVkIHRleHRNZXRyaWNzT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCB0ZXh0TWV0
cmljc1NpemUgPSB0ZXh0TWV0cmljc1ZhbHVlcy5zaXplKCk7CisKKyAgICB1bnNpZ25lZCBwb3Np
dGlvbk9mZnNldCA9IDA7CisgICAgdW5zaWduZWQgcG9zaXRpb25TaXplID0geFZhbHVlcy5zaXpl
KCk7CisKKyAgICBib29sIGFsdGVyU3RhcnRQb3NpdGlvbiA9IHRydWU7CisgICAgYm9vbCBhbHRl
ckVuZFBvc2l0aW9uID0gdHJ1ZTsKKworICAgIGludCBsYXN0UG9zaXRpb25PZmZzZXQgPSAtMTsK
KyAgICBmb3IgKDsgdGV4dE1ldHJpY3NPZmZzZXQgPCB0ZXh0TWV0cmljc1NpemUgJiYgcG9zaXRp
b25PZmZzZXQgPCBwb3NpdGlvblNpemU7ICsrdGV4dE1ldHJpY3NPZmZzZXQpIHsKKyAgICAgICAg
Y29uc3QgU1ZHVGV4dE1ldHJpY3MmIG1ldHJpY3MgPSB0ZXh0TWV0cmljc1ZhbHVlcy5hdCh0ZXh0
TWV0cmljc09mZnNldCk7CisKKyAgICAgICAgLy8gQWR2YW5jZSB0byB0ZXh0IGJveCBzdGFydCBs
b2NhdGlvbi4KKyAgICAgICAgaWYgKHBvc2l0aW9uT2Zmc2V0IDwgYm94U3RhcnQpIHsKKyAgICAg
ICAgICAgIHBvc2l0aW9uT2Zmc2V0ICs9IG1ldHJpY3MubGVuZ3RoKCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0b3AgaWYgd2UndmUgZmluaXNoZWQg
cHJvY2Vzc2luZyB0aGlzIHRleHQgYm94LgorICAgICAgICBpZiAocG9zaXRpb25PZmZzZXQgPj0g
Ym94U3RhcnQgKyBib3hMZW5ndGgpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBJ
ZiB0aGUgc3RhcnQgcG9zaXRpb24gbWFwcyB0byBhIGNoYXJhY3RlciBpbiB0aGUgbWV0cmljcyBs
aXN0LCB3ZSBkb24ndCBuZWVkIHRvIG1vZGlmeSBpdC4KKyAgICAgICAgaWYgKHN0YXJ0UG9zaXRp
b24gPT0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpCisgICAgICAgICAgICBhbHRl
clN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKKworICAgICAgICAvLyBJZiB0aGUgc3RhcnQgcG9zaXRp
b24gbWFwcyB0byBhIGNoYXJhY3RlciBpbiB0aGUgbWV0cmljcyBsaXN0LCB3ZSBkb24ndCBuZWVk
IHRvIG1vZGlmeSBpdC4KKyAgICAgICAgaWYgKGVuZFBvc2l0aW9uID09IHN0YXRpY19jYXN0PGlu
dD4ocG9zaXRpb25PZmZzZXQpKQorICAgICAgICAgICAgYWx0ZXJFbmRQb3NpdGlvbiA9IGZhbHNl
OworCisgICAgICAgIC8vIERldGVjdCBsaWdhdHVyZXMuCisgICAgICAgIGlmIChsYXN0UG9zaXRp
b25PZmZzZXQgIT0gLTEgJiYgbGFzdFBvc2l0aW9uT2Zmc2V0IC0gcG9zaXRpb25PZmZzZXQgPiAx
KSB7CisgICAgICAgICAgICBpZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24g
PiBsYXN0UG9zaXRpb25PZmZzZXQgJiYgc3RhcnRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4o
cG9zaXRpb25PZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGxhc3RQ
b3NpdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYg
ZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQgJiYgZW5kUG9zaXRpb24gPCBzdGF0aWNf
Y2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkgeworICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9u
ID0gcG9zaXRpb25PZmZzZXQ7CisgICAgICAgICAgICAgICAgYWx0ZXJFbmRQb3NpdGlvbiA9IGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFhbHRlclN0YXJ0
UG9zaXRpb24gJiYgIWFsdGVyRW5kUG9zaXRpb24pCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBsYXN0UG9zaXRpb25PZmZzZXQgPSBwb3NpdGlvbk9mZnNldDsKKyAgICAgICAgcG9zaXRp
b25PZmZzZXQgKz0gbWV0cmljcy5sZW5ndGgoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBjaGFy
YWN0ZXJzOwotfTsKKyAgICBpZiAoIWFsdGVyU3RhcnRQb3NpdGlvbiAmJiAhYWx0ZXJFbmRQb3Np
dGlvbikKKyAgICAgICAgcmV0dXJuOwogCi1ib29sIFNWR1RleHRRdWVyeTo6bnVtYmVyT2ZDaGFy
YWN0ZXJzQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94Kiwg
Y29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkgY29uc3QKKyAgICBpZiAobGFzdFBvc2l0aW9u
T2Zmc2V0ICE9IC0xICYmIGxhc3RQb3NpdGlvbk9mZnNldCAtIHBvc2l0aW9uT2Zmc2V0ID4gMSkg
eworICAgICAgICBpZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBsYXN0
UG9zaXRpb25PZmZzZXQgJiYgc3RhcnRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRp
b25PZmZzZXQpKSB7CisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uT2Zm
c2V0OworICAgICAgICAgICAgYWx0ZXJTdGFydFBvc2l0aW9uID0gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoYWx0ZXJFbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+IGxhc3RQb3Np
dGlvbk9mZnNldCAmJiBlbmRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZz
ZXQpKSB7CisgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHBvc2l0aW9uT2Zmc2V0OworICAgICAg
ICAgICAgYWx0ZXJFbmRQb3NpdGlvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorfQorCisv
LyBudW1iZXJPZkNoYXJhY3RlcnMoKSBpbXBsZW1lbnRhdGlvbgorYm9vbCBTVkdUZXh0UXVlcnk6
Om51bWJlck9mQ2hhcmFjdGVyc0NhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
KSBjb25zdAogewotICAgIE51bWJlck9mQ2hhcmFjdGVyc0RhdGEqIGRhdGEgPSBzdGF0aWNfY2Fz
dDxOdW1iZXJPZkNoYXJhY3RlcnNEYXRhKj4ocXVlcnlEYXRhKTsKLSAgICBkYXRhLT5jaGFyYWN0
ZXJzICs9IHBhcnQubGVuZ3RoOworICAgIC8vIG5vLW9wCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC0xODAsMzkgKzI1NSwzNCBAQCB1bnNpZ25lZCBTVkdUZXh0UXVlcnk6Om51bWJlck9mQ2hh
cmFjdGVyCiAgICAgaWYgKG1fdGV4dEJveGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBOdW1iZXJPZkNoYXJhY3RlcnNEYXRhIGRhdGE7CisgICAgRGF0YSBkYXRhOwogICAg
IGV4ZWN1dGVRdWVyeSgmZGF0YSwgJlNWR1RleHRRdWVyeTo6bnVtYmVyT2ZDaGFyYWN0ZXJzQ2Fs
bGJhY2spOwotICAgIHJldHVybiBkYXRhLmNoYXJhY3RlcnM7CisgICAgcmV0dXJuIGRhdGEucHJv
Y2Vzc2VkQ2hhcmFjdGVyczsKIH0KIAogLy8gdGV4dExlbmd0aCgpIGltcGxlbWVudGF0aW9uCiBz
dHJ1Y3QgVGV4dExlbmd0aERhdGEgOiBTVkdUZXh0UXVlcnk6OkRhdGEgewogICAgIFRleHRMZW5n
dGhEYXRhKCkKLSAgICAgICAgOiB0ZXh0TGVuZ3RoKDAuMGYpCisgICAgICAgIDogdGV4dExlbmd0
aCgwKQogICAgIHsKICAgICB9CiAKICAgICBmbG9hdCB0ZXh0TGVuZ3RoOwogfTsKIAotYm9vbCBT
VkdUZXh0UXVlcnk6OnRleHRMZW5ndGhDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNW
R0lubGluZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNv
bnN0Citib29sIFNWR1RleHRRdWVyeTo6dGV4dExlbmd0aENhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0
YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBUZXh0TGVu
Z3RoRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRleHRMZW5ndGhEYXRhKj4ocXVlcnlEYXRhKTsK
IAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT5zdHls
ZSgpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNW
ZXJ0aWNhbFdyaXRpbmdNb2RlKHN0eWxlLT5zdmdTdHlsZSgpKTsKLSAgICBmbG9hdCBwYXJ0TGVu
Z3RoID0gaXNWZXJ0aWNhbFRleHQgPyBwYXJ0LmhlaWdodCA6IHBhcnQud2lkdGg7Ci0KLSAgICBk
YXRhLT50ZXh0TGVuZ3RoICs9IG1hcExlbmd0aFRocm91Z2hDaHVua1RyYW5zZm9ybWF0aW9uKHRl
eHRCb3gsIGlzVmVydGljYWxUZXh0LCBwYXJ0TGVuZ3RoKTsKKyAgICBmbG9hdCBmcmFnbWVudExl
bmd0aCA9IHF1ZXJ5RGF0YS0+aXNWZXJ0aWNhbFRleHQgPyBmcmFnbWVudC5oZWlnaHQgOiBmcmFn
bWVudC53aWR0aDsKKyAgICBkYXRhLT50ZXh0TGVuZ3RoICs9IG1hcExlbmd0aFRocm91Z2hGcmFn
bWVudFRyYW5zZm9ybWF0aW9uKGZyYWdtZW50LCBxdWVyeURhdGEtPmlzVmVydGljYWxUZXh0LCBm
cmFnbWVudExlbmd0aCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBmbG9hdCBTVkdUZXh0UXVl
cnk6OnRleHRMZW5ndGgoKSBjb25zdAogewogICAgIGlmIChtX3RleHRCb3hlcy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiAwLjBmOworICAgICAgICByZXR1cm4gMDsKIAogICAgIFRleHRMZW5n
dGhEYXRhIGRhdGE7CiAgICAgZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5Ojp0ZXh0
TGVuZ3RoQ2FsbGJhY2spOwpAQCAtMjI0LDcgKzI5NCw3IEBAIHN0cnVjdCBTdWJTdHJpbmdMZW5n
dGhEYXRhIDogU1ZHVGV4dFF1ZXIKICAgICBTdWJTdHJpbmdMZW5ndGhEYXRhKHVuc2lnbmVkIHF1
ZXJ5U3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgcXVlcnlMZW5ndGgpCiAgICAgICAgIDogc3RhcnRQ
b3NpdGlvbihxdWVyeVN0YXJ0UG9zaXRpb24pCiAgICAgICAgICwgbGVuZ3RoKHF1ZXJ5TGVuZ3Ro
KQotICAgICAgICAsIHN1YlN0cmluZ0xlbmd0aCgwLjBmKQorICAgICAgICAsIHN1YlN0cmluZ0xl
bmd0aCgwKQogICAgIHsKICAgICB9CiAKQEAgLTIzNCwyOSArMzA0LDI2IEBAIHN0cnVjdCBTdWJT
dHJpbmdMZW5ndGhEYXRhIDogU1ZHVGV4dFF1ZXIKICAgICBmbG9hdCBzdWJTdHJpbmdMZW5ndGg7
CiB9OwogCi1ib29sIFNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVuZ3RoQ2FsbGJhY2soRGF0YSog
cXVlcnlEYXRhLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBjb25zdCBTVkdUZXh0
Q2h1bmtQYXJ0JiBwYXJ0KSBjb25zdAorYm9vbCBTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0
aENhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVu
dCkgY29uc3QKIHsKICAgICBTdWJTdHJpbmdMZW5ndGhEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8
U3ViU3RyaW5nTGVuZ3RoRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKICAgICBpbnQgc3RhcnRQb3NpdGlv
biA9IGRhdGEtPnN0YXJ0UG9zaXRpb247CiAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3Np
dGlvbiArIGRhdGEtPmxlbmd0aDsKLSAgICBpZiAoIW1hcFN0YXJ0QW5kTGVuZ3RoSW50b0NodW5r
UGFydENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgdGV4dEJveCwgcGFydCwgc3RhcnRQb3NpdGlvbiwg
ZW5kUG9zaXRpb24pKQorICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRD
b29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
bikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRl
eHRCb3gtPnRleHRSZW5kZXJlcigpLT5zdHlsZSgpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAg
ICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN0eWxlLT5zdmdT
dHlsZSgpKTsKLSAgICBmbG9hdCBwYXJ0TGVuZ3RoID0gbWVhc3VyZUNoYXJhY3RlclJhbmdlKHRl
eHRCb3gsIHN0eWxlLCBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoc3R5bGUtPnN2Z1N0eWxlKCkpLCBw
YXJ0Lm9mZnNldCArIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7
CisgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hh
cmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXIsIGZyYWdtZW50LnBvc2l0aW9uTGlz
dE9mZnNldCArIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7Cisg
ICAgZmxvYXQgZnJhZ21lbnRMZW5ndGggPSBxdWVyeURhdGEtPmlzVmVydGljYWxUZXh0ID8gbWV0
cmljcy5oZWlnaHQoKSA6IG1ldHJpY3Mud2lkdGgoKTsKIAotICAgIGRhdGEtPnN1YlN0cmluZ0xl
bmd0aCArPSBtYXBMZW5ndGhUaHJvdWdoQ2h1bmtUcmFuc2Zvcm1hdGlvbih0ZXh0Qm94LCBpc1Zl
cnRpY2FsVGV4dCwgcGFydExlbmd0aCk7CisgICAgZGF0YS0+c3ViU3RyaW5nTGVuZ3RoICs9IG1h
cExlbmd0aFRocm91Z2hGcmFnbWVudFRyYW5zZm9ybWF0aW9uKGZyYWdtZW50LCBxdWVyeURhdGEt
PmlzVmVydGljYWxUZXh0LCBmcmFnbWVudExlbmd0aCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CiBmbG9hdCBTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBzdGFydFBvc2l0
aW9uLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgaWYgKG1fdGV4dEJveGVzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgU3Vi
U3RyaW5nTGVuZ3RoRGF0YSBkYXRhKHN0YXJ0UG9zaXRpb24sIGxlbmd0aCk7CiAgICAgZXhlY3V0
ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayk7CkBA
IC0yNzQsMTcgKzM0MSwyOSBAQCBzdHJ1Y3QgU3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSA6
IFNWCiAgICAgRmxvYXRQb2ludCBzdGFydFBvc2l0aW9uOwogfTsKIAotYm9vbCBTVkdUZXh0UXVl
cnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29u
c3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFy
dCkgY29uc3QKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxs
YmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNv
bnN0CiB7CiAgICAgU3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19j
YXN0PFN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOwogCiAgICAgaW50
IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKICAgICBpbnQgZW5kUG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uICsgMTsKLSAgICBpZiAoIW1hcFN0YXJ0QW5kTGVuZ3RoSW50b0NodW5rUGFy
dENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgdGV4dEJveCwgcGFydCwgc3RhcnRQb3NpdGlvbiwgZW5k
UG9zaXRpb24pKQorICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29y
ZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFNWR0NoYXImIGNoYXJhY3RlciA9
ICoocGFydC5maXJzdENoYXJhY3RlciArIHN0YXJ0UG9zaXRpb24pOwotICAgIGRhdGEtPnN0YXJ0
UG9zaXRpb24gPSB0ZXh0Qm94LT5jaHVua1RyYW5zZm9ybWF0aW9uKCkubWFwUG9pbnQoRmxvYXRQ
b2ludChjaGFyYWN0ZXIueCwgY2hhcmFjdGVyLnkpKTsKKyAgICBkYXRhLT5zdGFydFBvc2l0aW9u
ID0gRmxvYXRQb2ludChmcmFnbWVudC54LCBmcmFnbWVudC55KTsKKworICAgIGlmIChzdGFydFBv
c2l0aW9uID4gMCkgeworICAgICAgICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1l
dHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJh
Z21lbnQucG9zaXRpb25MaXN0T2Zmc2V0LCBzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHF1
ZXJ5RGF0YS0+aXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICBkYXRhLT5zdGFydFBvc2l0aW9u
Lm1vdmUoMCwgbWV0cmljcy5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRh
dGEtPnN0YXJ0UG9zaXRpb24ubW92ZShtZXRyaWNzLndpZHRoKCksIDApOworICAgIH0KKworICAg
IGlmIChmcmFnbWVudC50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGRhdGEtPnN0YXJ0UG9zaXRpb24gPSBmcmFnbWVudC50cmFuc2Zvcm0ubWFwUG9p
bnQoZGF0YS0+c3RhcnRQb3NpdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMwOSwz
MCArMzg4LDI3IEBAIHN0cnVjdCBFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSA6IFNWR1QKICAg
ICBGbG9hdFBvaW50IGVuZFBvc2l0aW9uOwogfTsKIAotYm9vbCBTVkdUZXh0UXVlcnk6OmVuZFBv
c2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGlu
ZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Citi
b29sIFNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1
ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBF
bmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEVuZFBvc2l0aW9u
T2ZDaGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAogICAgIGludCBzdGFydFBvc2l0aW9uID0g
ZGF0YS0+cG9zaXRpb247CiAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7
Ci0gICAgaWYgKCFtYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRDb29yZGluYXRlcyhxdWVy
eURhdGEsIHRleHRCb3gsIHBhcnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKKyAgICBp
ZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRh
LCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBjb25zdCBTVkdDaGFyJiBjaGFyYWN0ZXIgPSAqKHBhcnQuZmlyc3RDaGFy
YWN0ZXIgKyBzdGFydFBvc2l0aW9uKTsKLSAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEZsb2F0UG9p
bnQoY2hhcmFjdGVyLngsIGNoYXJhY3Rlci55KTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT5zdHlsZSgpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0K
LSAgICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN0eWxlLT5z
dmdTdHlsZSgpKTsKLSAgICBmbG9hdCBnbHlwaEFkdmFuY2UgPSBtZWFzdXJlQ2hhcmFjdGVyUmFu
Z2UodGV4dEJveCwgc3R5bGUsIGlzVmVydGljYWxUZXh0LCBwYXJ0Lm9mZnNldCArIHN0YXJ0UG9z
aXRpb24sIDEpOworICAgIGRhdGEtPmVuZFBvc2l0aW9uID0gRmxvYXRQb2ludChmcmFnbWVudC54
LCBmcmFnbWVudC55KTsKIAotICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgZGF0YS0+
ZW5kUG9zaXRpb24ubW92ZSgwLjBmLCBnbHlwaEFkdmFuY2UpOworICAgIFNWR1RleHRNZXRyaWNz
IG1ldHJpY3MgPSBTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoYXJhY3RlclJhbmdlKHF1ZXJ5RGF0
YS0+dGV4dFJlbmRlcmVyLCBmcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQsIHN0YXJ0UG9zaXRp
b24gKyAxKTsKKyAgICBpZiAocXVlcnlEYXRhLT5pc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgZGF0
YS0+ZW5kUG9zaXRpb24ubW92ZSgwLCBtZXRyaWNzLmhlaWdodCgpKTsKICAgICBlbHNlCi0gICAg
ICAgIGRhdGEtPmVuZFBvc2l0aW9uLm1vdmUoZ2x5cGhBZHZhbmNlLCAwLjBmKTsKKyAgICAgICAg
ZGF0YS0+ZW5kUG9zaXRpb24ubW92ZShtZXRyaWNzLndpZHRoKCksIDApOworCisgICAgaWYgKGZy
YWdtZW50LnRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgZGF0YS0+ZW5kUG9zaXRpb24gPSB0ZXh0Qm94LT5jaHVua1RyYW5zZm9ybWF0aW9uKCkubWFw
UG9pbnQoZGF0YS0+ZW5kUG9zaXRpb24pOworICAgIGRhdGEtPmVuZFBvc2l0aW9uID0gZnJhZ21l
bnQudHJhbnNmb3JtLm1hcFBvaW50KGRhdGEtPmVuZFBvc2l0aW9uKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMzUwLDcgKzQyNiw3IEBAIEZsb2F0UG9pbnQgU1ZHVGV4dFF1ZXJ5OjplbmRQ
b3NpdGlvbk9mQ2gKIHN0cnVjdCBSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSA6IFNWR1RleHRRdWVy
eTo6RGF0YSB7CiAgICAgUm90YXRpb25PZkNoYXJhY3RlckRhdGEodW5zaWduZWQgcXVlcnlQb3Np
dGlvbikKICAgICAgICAgOiBwb3NpdGlvbihxdWVyeVBvc2l0aW9uKQotICAgICAgICAsIHJvdGF0
aW9uKDAuMGYpCisgICAgICAgICwgcm90YXRpb24oMCkKICAgICB7CiAgICAgfQogCkBAIC0zNTgs
MjQgKzQzNCwyNSBAQCBzdHJ1Y3QgUm90YXRpb25PZkNoYXJhY3RlckRhdGEgOiBTVkdUZXh0CiAg
ICAgZmxvYXQgcm90YXRpb247CiB9OwogCi1ib29sIFNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNo
YXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCog
dGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkgY29uc3QKK2Jvb2wgU1ZHVGV4
dFF1ZXJ5Ojpyb3RhdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25z
dCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdAogewogICAgIFJvdGF0aW9uT2ZDaGFy
YWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8Um90YXRpb25PZkNoYXJhY3RlckRhdGEqPihx
dWVyeURhdGEpOwogCiAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKICAg
ICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKLSAgICBpZiAoIW1hcFN0YXJ0
QW5kTGVuZ3RoSW50b0NodW5rUGFydENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgdGV4dEJveCwgcGFy
dCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQorICAgIGlmICghbWFwU3RhcnRFbmRQb3Np
dGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0
IFNWR0NoYXImIGNoYXJhY3RlciA9ICoocGFydC5maXJzdENoYXJhY3RlciArIHN0YXJ0UG9zaXRp
b24pOwotICAgIGRhdGEtPnJvdGF0aW9uID0gY2hhcmFjdGVyLmFuZ2xlOworICAgIEFmZmluZVRy
YW5zZm9ybSBuZXdUcmFuc2Zvcm0oZnJhZ21lbnQudHJhbnNmb3JtKTsKKyAgICBuZXdUcmFuc2Zv
cm0uc2NhbGUoMSAvIGZyYWdtZW50LnRyYW5zZm9ybS54U2NhbGUoKSwgMSAvIGZyYWdtZW50LnRy
YW5zZm9ybS55U2NhbGUoKSk7CisgICAgZGF0YS0+cm90YXRpb24gPSBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KHJhZDJkZWcoYXRhbjIobmV3VHJhbnNmb3JtLmIoKSwgbmV3VHJhbnNmb3JtLmEoKSkp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogZmxvYXQgU1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlvbk9m
Q2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChtX3RleHRCb3hl
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwLjBmOworICAgICAgICByZXR1cm4gMDsKIAog
ICAgIFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhIGRhdGEocG9zaXRpb24pOwogICAgIGV4ZWN1dGVR
dWVyeSgmZGF0YSwgJlNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKTsK
QEAgLTM5MywyMCArNDcwLDM3IEBAIHN0cnVjdCBFeHRlbnRPZkNoYXJhY3RlckRhdGEgOiBTVkdU
ZXh0UXUKICAgICBGbG9hdFJlY3QgZXh0ZW50OwogfTsKIAotYm9vbCBTVkdUZXh0UXVlcnk6OmV4
dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdJbmxpbmVU
ZXh0Qm94KiB0ZXh0Qm94LCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSBjb25zdAorc3Rh
dGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhTVkdUZXh0UXVlcnk6OkRh
dGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0
UG9zaXRpb24sIEZsb2F0UmVjdCYgZXh0ZW50KQoreworICAgIGV4dGVudC5zZXRMb2NhdGlvbihG
bG9hdFBvaW50KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBxdWVyeURhdGEtPnRleHRSZW5kZXJl
ci0+c3R5bGUoKS0+Zm9udCgpLmFzY2VudCgpKSk7CisKKyAgICBpZiAoc3RhcnRQb3NpdGlvbiA+
IDApIHsKKyAgICAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNWR1RleHRNZXRyaWNzOjpt
ZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXIsIGZyYWdtZW50LnBv
c2l0aW9uTGlzdE9mZnNldCwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgIGlmIChxdWVyeURhdGEt
PmlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgZXh0ZW50Lm1vdmUoMCwgbWV0cmljcy5oZWln
aHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4dGVudC5tb3ZlKG1ldHJpY3Mud2lk
dGgoKSwgMCk7CisgICAgfQorCisgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNWR1RleHRN
ZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXIsIGZy
YWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCArIHN0YXJ0UG9zaXRpb24sIDEpOworICAgIGV4dGVu
dC5zZXRTaXplKEZsb2F0U2l6ZShtZXRyaWNzLndpZHRoKCksIG1ldHJpY3MuaGVpZ2h0KCkpKTsK
KworICAgIGlmIChmcmFnbWVudC50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBleHRlbnQgPSBmcmFnbWVudC50cmFuc2Zvcm0ubWFwUmVjdChleHRlbnQpOwor
fQorCitib29sIFNWR1RleHRRdWVyeTo6ZXh0ZW50T2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBx
dWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAg
RXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RXh0ZW50T2ZDaGFyYWN0
ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAogICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9z
aXRpb247CiAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7Ci0gICAgaWYg
KCFtYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRDb29yZGluYXRlcyhxdWVyeURhdGEsIHRl
eHRCb3gsIHBhcnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKKyAgICBpZiAoIW1hcFN0
YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVu
dCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnN0eWxl
KCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKIAotICAgIGNvbnN0IFNWR0NoYXImIGNoYXJhY3RlciA9
ICoocGFydC5maXJzdENoYXJhY3RlciArIHN0YXJ0UG9zaXRpb24pOwotICAgIGRhdGEtPmV4dGVu
dCA9IHRleHRCb3gtPmNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhzdHlsZSwgcGFydC5vZmZzZXQg
KyBzdGFydFBvc2l0aW9uLCBjaGFyYWN0ZXIpOworICAgIGNhbGN1bGF0ZUdseXBoQm91bmRhcmll
cyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBkYXRhLT5leHRlbnQpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC00MjMsMjggKzUxNywzMCBAQCBGbG9hdFJlY3QgU1ZHVGV4
dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlCiAvLyBjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uKCkg
aW1wbGVtZW50YXRpb24KIHN0cnVjdCBDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YSA6IFNW
R1RleHRRdWVyeTo6RGF0YSB7CiAgICAgQ2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEoY29u
c3QgRmxvYXRQb2ludCYgcXVlcnlQb3NpdGlvbikKLSAgICAgICAgOiBjaGFyYWN0ZXJOdW1iZXIo
MCkKLSAgICAgICAgLCBwb3NpdGlvbihxdWVyeVBvc2l0aW9uKQorICAgICAgICA6IHBvc2l0aW9u
KHF1ZXJ5UG9zaXRpb24pCiAgICAgewogICAgIH0KIAotICAgIHVuc2lnbmVkIGNoYXJhY3Rlck51
bWJlcjsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uOwogfTsKIAotYm9vbCBTVkdUZXh0UXVlcnk6
OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0
IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQp
IGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxi
YWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29u
c3QKIHsKICAgICBDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YSogZGF0YSA9IHN0YXRpY19j
YXN0PENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT5zdHlsZSgpOwotICAg
IEFTU0VSVChzdHlsZSk7CisgICAgRmxvYXRSZWN0IGV4dGVudDsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZnJhZ21lbnQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaW50IHN0YXJ0UG9z
aXRpb24gPSBkYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzICsgaTsKKyAgICAgICAgaW50IGVuZFBv
c2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgICAgIGlmICghbWFwU3RhcnRFbmRQb3Np
dGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbikpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
RmxvYXRSZWN0IGV4dGVudCh0ZXh0Qm94LT5jYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMoc3R5bGUs
IHBhcnQub2Zmc2V0ICsgaSwgKihwYXJ0LmZpcnN0Q2hhcmFjdGVyICsgaSkpKTsKLSAgICAgICAg
aWYgKGV4dGVudC5jb250YWlucyhkYXRhLT5wb3NpdGlvbikpCisgICAgICAgIGNhbGN1bGF0ZUds
eXBoQm91bmRhcmllcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBleHRlbnQp
OworICAgICAgICBpZiAoZXh0ZW50LmNvbnRhaW5zKGRhdGEtPnBvc2l0aW9uKSkgeworICAgICAg
ICAgICAgZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArPSBpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAgICAgKytkYXRhLT5jaGFyYWN0ZXJOdW1iZXI7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTksNyArNTU1LDcgQEAgaW50IFNWR1RleHRR
dWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdAogICAgIGlmICghZXhlY3V0ZVF1ZXJ5KCZkYXRh
LCAmU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uQ2FsbGJhY2spKQogICAg
ICAgICByZXR1cm4gLTE7CiAKLSAgICByZXR1cm4gZGF0YS5jaGFyYWN0ZXJOdW1iZXI7CisgICAg
cmV0dXJuIGRhdGEucHJvY2Vzc2VkQ2hhcmFjdGVyczsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0UXVlcnkuaAkocmV2aXNpb24gNjg4NzQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDE1ICsyMiwxNCBA
QAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJT
VkdUZXh0RnJhZ21lbnQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgSW5saW5lRmxvd0JveDsKIGNsYXNzIFJlbmRlck9iamVjdDsKLWNs
YXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU1ZHSW5saW5lVGV4dEJveDsKLXN0cnVjdCBTVkdUZXh0
Q2h1bmtQYXJ0OwogCiBjbGFzcyBTVkdUZXh0UXVlcnkgewogcHVibGljOgpAQCAtNDksMjIgKzQ4
LDIyIEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgRGF0YTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVm
IGJvb2wgKFNWR1RleHRRdWVyeTo6KlByb2Nlc3NUZXh0Q2h1bmtQYXJ0Q2FsbGJhY2spKERhdGEq
LCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0
OwotICAgIGJvb2wgZXhlY3V0ZVF1ZXJ5KERhdGEqLCBQcm9jZXNzVGV4dENodW5rUGFydENhbGxi
YWNrKSBjb25zdDsKKyAgICB0eXBlZGVmIGJvb2wgKFNWR1RleHRRdWVyeTo6KlByb2Nlc3NUZXh0
RnJhZ21lbnRDYWxsYmFjaykoRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0Owor
ICAgIGJvb2wgZXhlY3V0ZVF1ZXJ5KERhdGEqLCBQcm9jZXNzVGV4dEZyYWdtZW50Q2FsbGJhY2sp
IGNvbnN0OwogCiAgICAgdm9pZCBjb2xsZWN0VGV4dEJveGVzSW5GbG93Qm94KElubGluZUZsb3dC
b3gqKTsKLSAgICBmbG9hdCBtZWFzdXJlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU1ZHSW5saW5lVGV4
dEJveCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc1ZlcnRpY2FsVGV4dCwgaW50IHN0YXJ0UG9zaXRp
b24sIGludCBsZW5ndGgpIGNvbnN0OwotICAgIGJvb2wgbWFwU3RhcnRBbmRMZW5ndGhJbnRvQ2h1
bmtQYXJ0Q29vcmRpbmF0ZXMoRGF0YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBjb25zdCBT
VkdUZXh0Q2h1bmtQYXJ0JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBj
b25zdDsKKyAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0
ZXMoRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50
JiBlbmRQb3NpdGlvbikgY29uc3Q7CisgICAgdm9pZCBtb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jl
c3BlY3RpbmdMaWdhdHVyZXMoRGF0YSosIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3Np
dGlvbikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBudW1iZXJPZkNoYXJhY3RlcnNDYWxs
YmFjayhEYXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1Bh
cnQmKSBjb25zdDsKLSAgICBib29sIHRleHRMZW5ndGhDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZH
SW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25zdDsKLSAgICBib29s
IHN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94Kiwg
Y29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OwotICAgIGJvb2wgc3RhcnRQb3NpdGlvbk9m
Q2hhcmFjdGVyQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBjb25zdCBT
VkdUZXh0Q2h1bmtQYXJ0JikgY29uc3Q7Ci0gICAgYm9vbCBlbmRQb3NpdGlvbk9mQ2hhcmFjdGVy
Q2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1
bmtQYXJ0JikgY29uc3Q7Ci0gICAgYm9vbCByb3RhdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0
YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JikgY29u
c3Q7Ci0gICAgYm9vbCBleHRlbnRPZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdJ
bmxpbmVUZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OwotICAgIGJvb2wg
Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdJbmxpbmVU
ZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OworICAgIGJvb2wgbnVtYmVy
T2ZDaGFyYWN0ZXJzQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0
OworICAgIGJvb2wgdGV4dExlbmd0aENhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmKSBjb25zdDsKKyAgICBib29sIHN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKERhdGEqLCBjb25z
dCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKKyAgICBib29sIHN0YXJ0UG9zaXRpb25PZkNoYXJh
Y3RlckNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKKyAgICBi
b29sIGVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHVGV4dEZy
YWdtZW50JikgY29uc3Q7CisgICAgYm9vbCByb3RhdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0
YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OworICAgIGJvb2wgZXh0ZW50T2ZDaGFy
YWN0ZXJDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CisgICAg
Ym9vbCBjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxTVkdJbmxpbmVUZXh0
Qm94Kj4gbV90ZXh0Qm94ZXM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69467</attachid>
            <date>2010-10-01 07:50:36 -0700</date>
            <delta_ts>2010-10-01 08:18:31 -0700</delta_ts>
            <desc>Patch: WebCore - v2</desc>
            <filename>FullTextPatch-WebCore.diff</filename>
            <type>text/plain</type>
            <size>305301</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODg4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTY5IEBACisyMDEwLTEwLTAxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJld3JpdGUgU1ZHIHRleHQgbGF5b3V0IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NTMyCisKKyAgICAgICAgTW9kZXJuaXplIFNW
RyB0ZXh0IGxheW91dCBlbmdpbmUsIHNwbGl0IHRoZSBsYXlvdXQgcHJvY2VzcyBpbnRvIHRocmVl
IHBoYXNlcywgc28gdGhhdCBlYWNoIHJlc3VsdHMgY2FuIGJlIGNhY2hlZCAod2hpY2ggd2lsbCBi
ZSBkb25lIGluIGEgZm9sbG93LXVwIHBhdGNoKS4KKyAgICAgICAgQ29uc3VtZXMgbXVjaCBsZXNz
IG1lbW9yeSwgYW5kIHlvdSBjYW4gYWxyZWFkeSBmZWVsIHRoZSBzcGVlZCBkaWZmZXJlbmNlLCBl
dmVuIGlmIHdlJ3JlIG5vdCBjYWNoaW5nIHRoZSByZXN1bHRzIChSZW5kZXJTVkdUZXh0OjpsYXlv
dXQsIGFsd2F5cyByZWxheW91dHMgdGhlIHdob2xlIHN1YnRyZWUpLgorCisgICAgICAgIFBoYXNl
ICMxKSAtIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcgorICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBQYXJzZSB4L3kvZHgv
ZHkvcm90YXRlIHZhbHVlcyBvZiB0aGUgPHRleHQ+IHN1YnRyZWUgKDx0ZXh0IHg9IjMwIDQwIj5B
PHRzcGFuPkI8dHNwYW4geD0iNTAiPkM8L3RzcGFuPjwvdHNwYW4+PC90ZXh0PikKKyAgICAgICAg
VGhpcyBpcyBkb25lIGJ5IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci4gSXQgYnVpbGRz
IGEgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMgb2JqZWN0IGZvciBlYWNoIFJlbmRlclNWR0lubGlu
ZVRleHQgcmVuZGVyZXIsIGFuZCBzdG9yZXMgaXQgdGhlcmUuCisgICAgICAgIFBoYXNlICMxIGlz
IHN0YXJ0ZWQgZnJvbSBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKSwgYmVmb3JlIFJlbmRlckJsb2Nr
TGluZUxheW91dCBpcyBsYXlpbmcgb3V0IHRoZSBpbmxpbmUgY2hpbGRyZW4sIGFuZCB0aHVzIGJl
Zm9yZSB0aGUgSW5saW5lQm94IHRyZWUgaXMgY3JlYXRlZC4KKworICAgICAgICBOb3cgd2Uga25v
dyB3aGljaCBjaGFyYWN0ZXIgaGFzIGFuIGFzc29jaWF0ZWQgYWJzb2x1dGUgeCBvciB5IHBvc2l0
aW9uLCBkZW5vdGluZyB0aGUgc3RhcnQgb2YgYSBuZXcgdGV4dCBjaHVuay4gV2hlbmV2ZXIgd2Ug
ZW5jb3VudGVyIGEgbmV3IHRleHQgY2h1bmsKKyAgICAgICAgUmVuZGVyQmxvY2tMaW5lTGF5b3V0
IHNob3VsZCBjcmVhdGUgYSBuZXcgU1ZHSW5saW5lVGV4dEJveC4gVGhpcyBpcyB2ZXJ5IGltcG9y
dGFudCwgYXMgQmlEaSByZW9yZGVyaW5nIHNob3VsZG4ndCBoYXBwZW4gYWNyb3NzIHRleHQgY2h1
bmtzLCBhcyB3ZWxsIGFzIGxpZ2F0dXJlIGRldGVjdGlvbi4KKworICAgICAgICBUaGUgdGV4dCBj
aHVuayBjb25jZXB0IGlzIG5vdyBtZXJnZWQgcmlnaHQgaW50byB0aGUgSW5saW5lQm94IHRyZWUs
IHNvIHdlIGRvbid0IG5lZWQgdG8gaGFjayBhcm91bmQgdGhlIGxhY2sgb2YgdGhhdCwgYXMgZG9u
ZSBmb3IgdGhlIHByZXZpb3VzIHllYXJzLgorCisgICAgICAgIFBoYXNlICMyKSAtIFNWR1RleHRM
YXlvdXRFbmdpbmUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICAgICAgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkgY2FsbHMgUmVuZGVyQmxv
Y2s6OmxheW91dElubGluZUNoaWxkcmVuKCkgcmlnaHQgYWZ0ZXIgcGhhc2UgIzEgZW5kcy4gVGhl
IElubGluZUJveCB0cmVlIGlzIGNyZWF0ZWQuIER1cmluZyB0aGF0IHByb2Nlc3MgZmluZE5leHRM
aW5lQnJlYWsoKQorICAgICAgICBkZWNpZGVzIGhvdyB0byBzcGxpdCB1cCB0aGUgdGV4dCBpbnRv
IElubGluZVRleHRCb3hlcy4gSXQgaGFzIGFscmVhZHkgYmVlbiBwYXRjaGVkLCB0byBhc2sgUmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKGludCBwb3NpdGlv
biksIHdoZXRoZXIgdGhlCisgICAgICAgIGN1cnJlbnQgY2hhcmFjdGVyIHNob3VsZCBnbyBpbiBh
IG5ldyBTVkdJbmxpbmVUZXh0Qm94IG9yIG5vdC4gVGhpcyByZXF1aXJlcyB0aGF0IHBoYXNlICMx
IGFscmVhZHkgc3RvcmVkIHRoZXNlIGluZm9ybWF0aW9uIGluIHRoZSBSZW5kZXJTVkdJbmxpbmVU
ZXh0IG9iamVjdHMuCisKKyAgICAgICAgRm9yIGVhY2ggPHRleHQ+IG9iamVjdCBhIFNWR1Jvb3RJ
bmxpbmVCb3ggaXMgY3JlYXRlZCAoaW4gY29uc3RydWN0TGluZSgpKSBhbmQgYWxsIGNoaWxkIGJv
eGVzIGFyZSBhZGRlZC4gQWZ0ZXIgdGhhdCBTVkdSb290SW5saW5lQm94Ojpjb21wdXRlUGVyQ2hh
cmFjdGVyTGF5b3V0SW5mb3JtYXRpb24oKQorICAgICAgICBpcyBjYWxsZWQgKHVubGlrZSBIVE1M
IHRleHQsIHdoaWNoIHNwbGl0cyB0aGUgdmVydGljYWwgJiBob3Jpem9udGFsIGxheW91dCBpbiB0
d28gcGhhc2VzLCBpdCdzIGp1c3Qgb25lIHNpbmdsZSBwaGFzZSBmb3IgU1ZHKS4gVGhpcyBmdW5j
dGlvbiBpbnZva2VzIFNWR1RleHRMYXlvdXRFbmdpbmUKKyAgICAgICAgYW5kIHN0YXJ0cyBwaGFz
ZSAjMiBvZiB0aGUgbGF5b3V0IHByb2Nlc3MuCisKKyAgICAgICAgU1ZHVGV4dExheW91dEVuZ2lu
ZSBsYXlzIG91dCB0aGUgY29udGVudCBvZiBlYWNoIFNWR0lubGluZVRleHRCb3ggZWl0aGVyIG9u
IGEgbGluZSBvciBhIHBhdGguIEl0IGNvbnRhaW5zIGFsbCB0aGUgbG9naWMgaGFuZGxpbmcsIGFs
aWdubWVudC1iYXNlbGluZSwgZG9taW5hbnQtYmFzZWxpbmUsCisgICAgICAgIGxldHRlci1zcGFj
aW5nLCB3b3JkLXNwYWNpbmcsIGtlcm5pbmcsIGdseXBoLW9yaWVudGF0aW9uLShob3Jpem9udGFs
fHZlcnRpY2FsKSwgcm90YXRpb24sIGV0Yy4gZXRjLgorCisgICAgICAgIEFzIHJlc3VsdCBpdCBn
ZW5lcmF0ZXMgYSBzZXQgb2YgU1ZHVGV4dEZyYWdtZW50IG9iamVjdHMgd2hpY2ggYXJlIHN0b3Jl
ZCBpbiBlYWNoIFNWR0lubGluZVRleHRCb3guIEVhY2ggU1ZHVGV4dEZyYWdtZW50IGlzIGEgcG9y
dGlvbiBvZiB0ZXh0IHRoYXQgY2FuIGJlIHJlbmRlcmVkL21lYXN1cmVkCisgICAgICAgIGF0IG9u
Y2UuIFNvbWUgZXhhbXBsZXMgdG8gaWxsdXN0cmF0ZSB3aGF0J3MgZ29pbmcgb246CisKKyAgICAg
ICAgPHRleHQgeD0iMjAiPkFCQ0Q8L3RleHQ+OgorICAgICAgICAtIFNWR0lubGluZVRleHRCb3gK
KyAgICAgICAgICAtIFNWR1RleHRGcmFnbWVudCwgc3RhcnQgMCBsZW5ndGggNCwgIkFCQ0QiICh4
PTIwKQorCisgICAgICAgIDx0ZXh0IHg9IjIwIDEwMCI+QUJDRDwvdGV4dD46CisgICAgICAgIC0g
U1ZHSW5saW5lVGV4dEJveAorICAgICAgICAgIC0gU1ZHVGV4dEZyYWdtZW50LCBzdGFydCAwIGxl
bmd0aCAxLCAiQSIgKHg9MjApCisgICAgICAgIC0gU1ZHSW5saW5lVGV4dEJveAorICAgICAgICAg
IC0gU1ZHVGV4dEZyYWdtZW50LCBzdGFydCAwIGxlbmd0aCAxLCAiQiIgKHg9MTAwKQorICAgICAg
ICAgIC0gU1ZHVGV4dEZyYWdtZW50LCBzdGFydCAxIGxlbmd0aCAyLCAiQ0QiICh4PTEwMCArIGFk
dmFuY2Vfb2ZfbGFzdCkKKworICAgICAgICA8dGV4dD48dGV4dFBhdGggeGxpbms6aHJlZj0iI3Nv
bWVQYXRoIj5BQkNEPC90ZXh0UGF0aD48L3RleHQ+OgorICAgICAgICAtIFNWR0lubGluZVRleHRC
b3gKKyAgICAgICAgICAtIFNWR1RleHRGcmFnbWVudCwgc3RhcnQgMCBsZW5ndGggMSwgIkEiIChy
b3RhdGVkISkKKyAgICAgICAgICAtIFNWR1RleHRGcmFnbWVudCwgc3RhcnQgMSBsZW5ndGggMSwg
IkIiIChyb3RhdGVkISkKKyAgICAgICAgICAtIFNWR1RleHRGcmFnbWVudCwgc3RhcnQgMiBsZW5n
dGggMSwgIkMiIChyb3RhdGVkISkKKyAgICAgICAgICAtIFNWR1RleHRGcmFnbWVudCwgc3RhcnQg
MyBsZW5ndGggMSwgIkQiIChyb3RhdGVkISkKKworICAgICAgICA8dGV4dCB4PSIwIDUwIDEwMCI+
QTx0c3Bhbj5CPC90c3Bhbj5DPC90ZXh0PgorICAgICAgICAtIFNWR0lubGluZVRleHRCb3gKKyAg
ICAgICAgICAtIFNWR1RleHRGcmFnbWVudCwgc3RhcnQgMCBsZW5ndGggMSwgIkEiICh4PTApCisg
ICAgICAgIC0gU1ZHSW5saW5lRmxvd0JveAorICAgICAgICAgIC0gU1ZHSW5saW5lVGV4dEJveAor
ICAgICAgICAgICAgLSBTVkdUZXh0RnJhZ21lbnQsIHN0YXJ0IDAgbGVuZ3RoIDEsICJCIiAoeD01
MCkKKyAgICAgICAgLSBTVkdJbmxpbmVUZXh0Qm94CisgICAgICAgICAgLSBTVkdUZXh0RnJhZ21l
bnQsIHN0YXJ0IDAgbGVuZ3RoIDEsICJDIiAoeD0xMDApCisKKyAgICAgICAgV2hlbiBwYWludGlu
ZyB0ZXh0IFNWR0lubGluZVRleHRCb3gganVzdCB3YWxrcyBpdHMgZnJhZ21lbnRzIGFuZCBwYWlu
dHMgdGhlbS4gVGV4dCBzZWxlY3Rpb24gd29ya3MgdGhlIHNhbWUuCisgICAgICAgIEFsbCB0ZXh0
IG1lYXN1cmVtZW50cyAod2lkdGgvaGVpZ2h0IGV0Yy4pIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUg
aW4gcGhhc2UgIzIgYW5kIGFyZW4ndCByZXF1aXJlZCBhbnltb3JlIHdoaWxlIHBhaW50aW5nL3Nl
bGVjdGluZy4KKyAgICAgICAgVGhpcyBpcyBvbmUgb2YgdGhlIG1haW4gYmVuZWZpdHMgb2YgdGhl
IG5ldyB0ZXh0IGxheW91dCBlbmdpbmUsIHBhaW50aW5nICYgc2VsZWN0aW9uIGlzIGNoZWFwIG5v
dywgY29tcGFyZWQgdG8gdGhlIGxheW91dCBwcm9jZXNzLgorCisgICAgICAgIFdlJ3JlIG5vdyBk
b2luZyBwaGFzZSAjMSBldmVyeXRpbWUgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkgaXMgY2FsbGVk
LiBUaGlzIGlzIG5vdCBuZWNlc3NhcnksIHdlIG9ubHkgaGF2ZSB0byByZWNvbXB1dGUgdGhlc2Ug
aW5mb3JtYXRpb24KKyAgICAgICAgaWYgdGhlIHgveS9keC9keSBvciByb3RhdGUgbGlzdCBvZiBh
biBlbGVtZW50IGluIHRoZSA8dGV4dD4gc3VidHJlZSBjaGFuZ2VzIG9yIHRoZSB0ZXh0IGNvbnRl
bnQgaXRzZWxmIC0+IHRoaXMgd2lsbCBiZSBkb25lIGluIGEgZm9sbG93LXVwIHBhdGNoLgorICAg
ICAgICBJdCdzIGxpa2VseSB0aGF0IHdlJ2xsIGFsc28gZmluZCB3YXlzIHRvIHNraXAgcGhhc2Ug
IzIgaW4gY2VydGFpbiBzaXR1YXRpb25zLgorCisgICAgICAgIFBoYXNlICMzKSAtIFNWR1RleHRD
aHVua0J1aWxkZXIKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICAgICAgQWZ0ZXIgcGhhc2UgIzIgZmluaXNoZWQsIHdlIGNhbiBwb3N0LXBy
b2Nlc3MgdGhlIHRleHQgZnJhZ21lbnRzLiBDZXJ0YWluIG9wZXJhdGlvbnMgaGF2ZSB0byBiZSBh
cHBsaWVkIG9uIGEgInBlciBjaHVuayIgYmFzaXMuCisgICAgICAgIHRleHQtYW5jaG9yIHNob3Vs
ZCBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgdGV4dCBjaHVua3MsIGFzIHdlbGwgYXMgdGV4dExl
bmd0aCBjb3JyZWN0aW9ucyAobGVuZ3RoQWRqdXN0PSJzcGFjaW5nIiAvIGxlbmd0aEFkanVzdD0i
c3BhY2luZ0FuZEdseXBocyIpLgorCisgICAgICAgIFNWR1RleHRDaHVua0J1aWxkZXIganVzdCB3
YWxrcyB0aGUgU1ZHSW5saW5lVGV4dEJveCwgYW5kIGNvbGxlY3RzIGFsbCBib3hlcyBiZWxvbmdp
bmcgdG8gYSBjZXJ0YWluIGNodW5rLiBGb3IgZWFjaCBvZiB0aGUgY2h1bmtzIGFsbCBmcmFnbWVu
dHMKKyAgICAgICAgYXJlIHBvc3QtcHJvY2Vzc2VkLiBGb3IgaW5zdGFuY2UgZm9yIHRleHQtYW5j
aG9yPSJtaWRkbGUiLCBhbGwgeCBwb3NpdGlvbnMgb2YgYWxsIGZyYWdtZW50cyBhcmUgc2hpZnRl
ZCBieSAtZnJhZ21lbnRXaWR0aC8yIChmb3IgaG9yaXpvbmFsIHRleHQpLgorCisgICAgICAgIEFm
dGVyIHBoYXNlICMxIC0gIzMgZmluaXNoZWQsIFNWR1Jvb3RJbmxpbmVCb3g6OmNvbXB1dGVQZXJD
aGFyYWN0ZXJMYXlvdXRJbmZvcm1hdGlvbigpIHV0aWxpemllcyB0aGUgc3RvcmVkIFNWR1RleHRG
cmFnbWVudHMgdG8gbGF5IG91dCBhbGwgY2hpbGQKKyAgICAgICAgYm94ZXMgaW4gdGhlIElubGlu
ZUJveCB0cmVlIChzZXRXaWR0aC9IZWlnaHQsIGV0Yy4pLCB0aGUgc2l6ZSBhbmQgcG9zaXRpb24g
b2YgdGhlIFNWR1Jvb3RJbmxpbmVCb3ggYW5kIGl0J3MgcGFyZW50IFJlbmRlclNWR1RleHQgb2Jq
ZWN0LgorCisgICAgICAgIFRoaXMgc2hvdWxkIGdpdmUgaW50ZXJlc3N0ZWQgcmVhZGVycyBhIGdv
b2Qgc3VtbWFyeSBvZiBob3cgdGhlIG5ldyB0ZXh0IGxheW91dCBlbmdpbmUgd29ya3MuCisgICAg
ICAgIFNlZSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgZm9yIG1vcmUgZGV0YWlscyBvbiB0ZXN0IHBy
b2dyZXNzaW9uLgorCisgICAgICAgIFRlc3RzOiBzdmcvY3VzdG9tL3RleHQtcm90YXRpb24uc3Zn
CisgICAgICAgICAgICAgICBzdmcvY3VzdG9tL3RleHQteC1keS1saXN0cy5zdmcKKworICAgICAg
ICAqIEFuZHJvaWQubWs6IEFkZCBTVkdUZXh0TGF5b3V0RW5naW5lLiogLyBTVkdUZXh0Q2h1bmtC
dWlsZGVyLiogdG8gYnVpbGQuIFJlbW92ZSBTVkdDaGFyYWN0ZXJEYXRhLiogLyBTVkdUZXh0Q2h1
bmtMYXlvdXRJbmZvLiogLyBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLiogZnJvbSBidWlsZC4KKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAgICAgICogV2ViQ29y
ZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBE
aXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUJveDo6aXNTVkdJbmxpbmVGbG93Qm94KTogQWRkIGhlbHBlciBmdW5jdGlvbiB0byBpZGVu
dGlmeSBTVkdJbmxpbmVGbG93Qm94ZXMuIFRoZSB2YXJpYW50cyBmb3IgU1ZHSW5saW5lVGV4dEJv
eCBldGMuIGFscmVhZHkgZXhpc3QuCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aDogRGV2aXJ0dWFsaXplIHNlbGVjdGlvblN0YXJ0RW5kLCBTVkcgaXMgbm8gbG9uZ2VyIG92ZXJy
aWRpbmcgaXQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0FsbEluT25lLmNwcDogcmVt
b3ZlcworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHQ6OnNldFRleHRJbnRlcm5hbCk6IFJlbW92ZSBTVkcgc3BlY2lmaWMgaGFj
a3MsIG1vdmVkIHRvIFJlbmRlclNWR0lubGluZVRleHQuCisgICAgICAgICogcmVuZGVyaW5nL1NW
R0NoYXJhY3RlckRhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdDaGFy
YWN0ZXJEYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR0NoYXJhY3Rlckxh
eW91dEluZm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdDaGFyYWN0ZXJM
YXlvdXRJbmZvLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwOiBIYWNrIERSVCBvdXRwdXQgdG8gYmUgc29tZXdoYXQgY29tcGF0aWJsZSB3aXRo
IHRoZSBjdXJyZW50IG91dHB1dCwgdGhlIHBsYW4gaXMgdG8gY2hhbmdlIGl0IGNvbXBsZXRseSBh
ZnRlciB0aGlzIHBhdGNoLgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVSZW5kZXJTVkdUZXh0Qm94
KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHSW5saW5lVGV4dEJveCk6CisgICAgICAgICog
cmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHJlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmg6IFJlbW92ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHJlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN0eWxlOjpkaWZmKTogT25seSByZXR1cm4gaW1tZWRpYXRlbHkgaWYgU1ZHUmVuZGVyU3R5bGU6
OmRpZmYgcHJvZHVjZWQgU3R5bGVEaWZmZXJlbmNlTGF5b3V0LCBpdCBpdCdzIHN0aC4gZWxzZSBi
ZSBzdXJlIHRvIGFzayBSZW5kZXJTdHlsZSBpdHNlbGYgd2hhdCB0byBkby4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
bmRlclN0eWxlOjppc1ZlcnRpY2FsV3JpdGluZ01vZGUpOiBOZXcgaGVscGVyIG1ldGhvZCwgbW92
ZWQgZnJvbSBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseVNWR1doaXRl
c3BhY2VSdWxlcyk6IE1vdmVkIGZyb20gUmVuZGVyVGV4dCBpbnRvIGEgU1ZHIHNwZWNpZmljIHBs
YWNlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5s
aW5lVGV4dCk6IFVzZSBhcHBseVNWR1doaXRlc3BhY2VSdWxlcyBvbiB0aGUgaW5jb21pbmcgdGV4
dC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OnN0eWxlRGlkQ2hhbmdl
KTogT25seSBhcHBseSBTVkcgd2hpdGUgc3BhY2UgcnVsZXMsIHdoZW4gdXNpbmcgeG1sOnNwYWNl
PSJwcmVzZXJ2ZSIsIG90aGVyd2hpc2UgdGhlIGNvbnN0cnVjdG9yIGFscmVhZHkgaGFuZGxlZCBp
dC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3RlclN0YXJ0
c05ld1RleHRDaHVuayk6IENyZWF0ZSB0ZXh0IGNodW5rcyBmb3IgYWJzb2x1dGUgeSB2YWx1ZXMg
YXMgd2VsbCwgU1ZHIDEuMSAybmQgRWRpdGlvbiBkZW1hbmRzIHRoYXQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KTogTmV3IGZ1bmN0aW9u
IG9wZXJhdGluZyBvbiBhbGwgU1ZHSW5saW5lVGV4dEJveGVzIGFuZCB0aGVpciBTVkdUZXh0RnJh
Z21lbnRzLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6bGF5b3V0QXR0cmlidXRlcyk6
IFN0b3JlcyB0aGUgbGF5b3V0IGF0dHJpYnV0ZXMgZ2VuZXJhdGVkIGJ5IFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlci4KKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyU1ZHSW5saW5lVGV4
dCk6IE5ldyBoZWxwZXIgbWV0aG9kcyBmb3IgY2FzdGluZy4KKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6
bGF5b3V0KTogQWRkIGNvbW1lbnQsIHRoYXQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVy
IGlzIGp1c3QgcGhhc2Ugb25lIG9mIHRoZSBsYXlvdXQgcHJvY2Vzcy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1RleHQ6OnBvc2l0aW9uRm9yUG9pbnQpOiBTaW1wbGlmaWVkIGltcGxlbWVu
dGF0aW9uIGZvciBTVkdzIG5lZWRzLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91
bmQpOiBTZXBlcmF0ZWQgc2VsZWN0aW9uIGJhY2tncm91bmQgZHJhd2luZyBmcm9tIGFjdHVhbCB0
ZXh0IHJlbmRlcmluZywgdG8gbWFrZSBzdXJlIHNlbGVjdGlvbiBpcyBhbHdheXMgaW4gYmFja2dy
b3VuZCBmb3IgU1ZHLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lRmxvd0JveDo6cGFpbnQp
OiBDYWxsIGNvbXB1dGV0ZXh0TWF0Y2hNYXJrZXJSZWN0Rm9yUmVuZGVyZXIsIGJlZm9yZSBwYWlu
dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0
Y2hNYXJrZXJSZWN0Rm9yUmVuZGVyZXIpOiBOZXcgbWV0aG9kLgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lRmxvd0JveC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lRmxv
d0JveDo6aXNTVkdJbmxpbmVGbG93Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwOiBDb21wbGV0bHkgcmV3cml0dGVuLCBvcGVyYXRlcyBvbiBTVkdUZXh0
RnJhZ21lbnRzLCBwcm9kdWNlZCBieSB0aGUgU1ZHVGV4dExheW91dEVuZ2luZS4gV2hvbGUgbmV3
IGNvbmNlcHQsIGNvbXBhcmVkIHRvIHRoZSBvbGQgaGFjay4KKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRC
b3g6OmNsZWFyVGV4dEZyYWdtZW50cyk6IE9ubHkgdXNlZCBieSBTVkdUZXh0TGF5b3V0RW5naW5l
LCB0byBjbGVhbiB1cCBwcmV2aW91c2x5IGNvbXB1dGVkIGZyYWdtZW50cy4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnRleHRGcmFnbWVudHMpOiBPZmZlcnMgYWNjZXNzIHRv
IHRoZSBmcmFnbWVudHMgaW4gdGhlIGJveC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRl
eHRCb3g6OnN0YXJ0c05ld1RleHRDaHVuayk6IERvZXMgdGhpcyBib3ggc3RhcnQgYSBuZXcgdGV4
dCBjaHVuaz8KKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnNldFN0YXJ0c05l
d1RleHRDaHVuayk6IFNWR1RleHRMYXlvdXRFbmdpbmUgbWFya3MgdGhpcyBib3gsIGlmIGl0IHN0
YXJ0cyBhIG5ldyB0ZXh0IGNodW5rLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElu
bGluZUJveC5jcHA6IFJlbW92ZSBvbGQgY29kZSByZWdhcmRpbmcgdGV4dCBjaHVuayBwYXJ0cy4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KTogU2VsZWN0aW9uIGlz
IG5vdyBwYWludGVkIGJlZm9yZSB0ZXh0LCB0byBhc3N1cmUgaXQncyByZWFsbHkgaW4gdGhlIGJh
Y2tncm91bmQuCisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94Ojpjb21wdXRlUGVy
Q2hhcmFjdGVyTGF5b3V0SW5mb3JtYXRpb24pOiBVc2UgbmV3IFNWR1RleHRMYXlvdXRFbmdpbmUu
CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRDaGFyYWN0ZXJzSW5U
ZXh0Qm94ZXMpOiBGZWVkIFNWR1RleHRMYXlvdXRFbmdpbmUgd2l0aCBTVkdJbmxpbmVUZXh0Qm94
ZXMsIGRldGVjdCB0aGUgYmVnaW4vZW5kIG9mIHBhdGggbGF5b3V0cy4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dENoaWxkQm94ZXMpOiBVc2UgbmV3IGlzU1ZHSW5s
aW5lVGV4dEJveCgpIGhlbHBlciBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5s
aW5lQm94OjpjbG9zZXN0TGVhZkNoaWxkRm9yUG9zaXRpb24pOiBTaW1wbGlmaWVkIHZlcnNpb24g
Zm9yIFNWRy4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaDogUmVt
b3ZlIGFjY2VzcyB0byB0ZXh0IGNodW5rcywgdGhleSdyZSBub3cgbG9uZ2VyIHN0b3JlZCBpbiB0
aGUgU1ZHUm9vdElubGluZUJveC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVu
ay5jcHA6IHMvU1ZHVGV4dENodW5rTmV3L1NWR1RleHRDaHVuay8KKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1RleHRDaHVuay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENo
dW5rQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENo
dW5rQnVpbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzLmNwcDogQ29uc3RpZnkgZHVtcCgpIG1ldGhvZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXh0TGF5b3V0QXR0cmlidXRlczo6dGV4dE1ldHJpY3NWYWx1ZXMpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcDogUmV3cml0dGVu
LCBjb25zdW1lIGxlc3MgbWVtb3J5LCB3aGlsZSBidWlsZGluZyB0aGUgbGF5b3V0IGF0dHJpYnV0
ZXMuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxk
ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuaDogQWRk
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwOiBSZXdyaXR0ZW4g
dG8gZGVhbCB3aXRoIHRoZSBuZXcgU1ZHVGV4dEZyYWdtZW50L1NWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzIGxvZ2ljLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5Lmg6CisKIDIw
MTAtMTAtMDEgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDY4ODc4KQorKysgV2ViQ29y
ZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC03MTYsOCArNzE2LDEwIEBAIExPQ0FMX1NS
Q19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXJlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAgXAogCXJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAgXAogCXJl
bmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1
bmtCdWlsZGVyLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5j
cHAgXAogCXJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBc
CisJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcCBcCiAJcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmlj
cy5jcHAgXApAQCAtNzQ5LDggKzc1MSw2IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NS
Q19GSUxFUykgXAogCiBpZmVxICgkKEVOQUJMRV9TVkcpLCB0cnVlKQogTE9DQUxfU1JDX0ZJTEVT
IDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCi0JcmVuZGVyaW5nL1NWR0NoYXJhY3RlckRhdGEuY3Bw
IFwKLQlyZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAgXAogCXJlbmRlcmluZy9T
VkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCBcCiAJcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8u
Y3BwIFwKIAlyZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgXApAQCAtNzU4LDkgKzc1OCw3
IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXJlbmRlcmluZy9T
VkdSZXNvdXJjZXMuY3BwIFwKIAlyZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIFwKIAly
ZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIFwKLQlyZW5kZXJpbmcvU1ZHU2hh
ZG93VHJlZUVsZW1lbnRzLmNwcCBcCi0JcmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8u
Y3BwIFwKLQlyZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAKKwlyZW5kZXJpbmcv
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAogZW5kaWYKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQo
TE9DQUxfU1JDX0ZJTEVTKSBcCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDY4ODc4KQorKysgV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTY4Myw4ICsxNjgzLDYgQEAgSUYg
KEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENv
bnRhaW5lci5jcHAKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250
YWluZXIuY3BwCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5j
cHAKLSAgICAgICAgcmVuZGVyaW5nL1NWR0NoYXJhY3RlckRhdGEuY3BwCi0gICAgICAgIHJlbmRl
cmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcAogICAgICAgICByZW5kZXJpbmcvU1ZHSW1h
Z2VCdWZmZXJUb29scy5jcHAKICAgICAgICAgcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8u
Y3BwCiAgICAgICAgIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMTY5Myw4ICsx
NjkxLDYgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9TVkdSZXNvdXJjZXND
YWNoZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAog
ICAgICAgICByZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAotICAgICAgICByZW5k
ZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1NWR1Rl
eHRMYXlvdXRVdGlsaXRpZXMuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJT
dHlsZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAK
ICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCkBAIC0xNzA2LDEwICsx
NzAyLDEyIEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAK
ICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCisgICAgICAgIHJlbmRlcmlu
Zy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCi0gICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEJhc2VsaW5lLmNwcAotICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRTcGFj
aW5nLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCisg
ICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAorICAg
ICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAogICAgICAg
ICByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAogICAgICAgICByZW5kZXJpbmcvc3Zn
L1NWR1RleHRRdWVyeS5jcHAKICAgICAgICAgc3ZnL0NvbG9yRGlzdGFuY2UuY3BwCkluZGV4OiBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDY4ODc4KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjc3MiwxMCArMjc3Miw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCiAJV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NWR1JlbmRlclN0eWxlLmggXAotCVdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckRh
dGEuY3BwIFwKLQlXZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJEYXRhLmggXAotCVdlYkNv
cmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3BwIFwKLQlXZWJDb3JlL3JlbmRl
cmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR0lt
YWdlQnVmZmVyVG9vbHMuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckRhdGEuaCBcCkBAIC0yODExLDEx
ICsyODA3LDE1IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1Jvb3RJbmxpbmVCb3guaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVu
ay5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaCBcCisJV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwIFwKKwlXZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dEZyYWdtZW50LmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
QXR0cmlidXRlcy5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0
cmlidXRlcy5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzQnVpbGRlci5oIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVu
Z2luZS5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmgg
XAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3Bw
IFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgg
XAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAg
XApAQCAtMjgyNCwxMCArMjgyNCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UXVlcnkuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5Lmgg
XAotCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uY3BwIFwKLQlXZWJD
b3JlL3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmggXAotCVdlYkNvcmUvcmVuZGVy
aW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIFwKLQlXZWJDb3JlL3JlbmRlcmluZy9TVkdU
ZXh0TGF5b3V0VXRpbGl0aWVzLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL1RhYmxlTGF5b3V0Lmgg
XAogCVdlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgXAogCVdl
YkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA2ODg3OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDUzLDExICszNDUzLDE1IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdSb290SW5s
aW5lQm94LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCcs
CiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmgnLAogICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvU1ZHVGV4dEZyYWdtZW50LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcCcsCisgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAnLApAQCAtMzY5Nywx
MCArMzcwMSw2IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmgnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9TaGFkb3dFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL1NoYWRvd0VsZW1lbnQuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1NWR0No
YXJhY3RlckRhdGEuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0
YS5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAn
LAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmgnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuaCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL1NWR01hcmtlckRhdGEuaCcsCkBAIC0zNzE4LDEwICszNzE4LDYgQEAKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1NWR1Rl
eHRDaHVua0xheW91dEluZm8uY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHVGV4dENo
dW5rTGF5b3V0SW5mby5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0
aWxpdGllcy5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0
aWVzLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UYWJsZUxheW91dC5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oJywKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24g
Njg4NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMjk4LDEz
ICsyMjk4LDE1IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaCBcCiAgICAgcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1
bmtCdWlsZGVyLmggXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dEZyYWdtZW50LmggXAogICAg
IHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaCBcCiAgICAgcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCBcCisgICAgcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmggXAorICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZUJhc2VsaW5lLmggXAorICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZVNwYWNpbmcuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5oIFwKICAgICBy
ZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIFwKLSAgICByZW5kZXJpbmcvU1ZHQ2hhcmFjdGVy
RGF0YS5oIFwKLSAgICByZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oIFwKICAgICBy
ZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5oIFwKICAgICByZW5kZXJpbmcvU1ZHTWFya2Vy
RGF0YS5oIFwKICAgICByZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oIFwKQEAgLTIzMTQs
OCArMjMxNiw2IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNo
ZS5oIFwKICAgICByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCBcCiAgICAgcmVu
ZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oIFwKLSAgICByZW5kZXJpbmcvU1ZHVGV4dENo
dW5rTGF5b3V0SW5mby5oIFwKLSAgICByZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5o
IFwKICAgICByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggXAogICAgIHJlbmRl
cmluZy9UcmFuc2Zvcm1TdGF0ZS5oIFwKICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFp
bmVyLmggXApAQCAtMzI4Nyw4ICszMjg3LDEyIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9T
Vkc9MSkgewogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIFwKICAg
ICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcCBcCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4
dENodW5rQnVpbGRlci5jcHAgXAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXNCdWlsZGVyLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVu
Z2luZS5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNl
bGluZS5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwIFwKICAg
ICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwIFwKICAgICAgICAgcmVuZGVyaW5n
L1BvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgXApAQCAtMzQ2OCwxNyArMzQ3MiwxMyBAQCBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lci5jcHAgXAotICAgICAgICByZW5kZXJpbmcvU1ZHQ2hhcmFjdGVy
RGF0YS5jcHAgXAotICAgICAgICByZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAg
XAogICAgICAgICByZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAgXAogICAgICAgICBy
ZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgXAogICAgICAgICByZW5kZXJpbmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAgXAogICAgICAgICByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzLmNwcCBc
CiAgICAgICAgIHJlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgXAogICAgICAgICByZW5k
ZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NW
R1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgXAotICAgICAgICByZW5kZXJpbmcvU1ZHVGV4dENodW5r
TGF5b3V0SW5mby5jcHAgXAotICAgICAgICByZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGll
cy5jcHAKKyAgICAgICAgcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAKIH0KIAog
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVI9MSkgewpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2ODg3OCkKKysrIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTMy
MTM1LDExOCArMzIxMzUsNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHQ2hhcmFjdGVyRGF0YS5jcHAiDQotCQkJCT4N
Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0K
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnX0ludGVy
bmFsfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJ
CQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9
IkRlYnVnX0NhaXJvfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJ
CQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkv
Pg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0J
CQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmls
ZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdDaGFyYWN0
ZXJEYXRhLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAiDQotCQkJCT4NCi0J
CQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnX0ludGVybmFs
fFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8
VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRl
YnVnX0NhaXJvfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+
DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0K
LQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJ
CU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIN
Ci0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbg0KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4N
Ci0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdDaGFyYWN0ZXJM
YXlvdXRJbmZvLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHTWFya2VyRGF0YS5oIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KQEAgLTMyNjQzLDExOCArMzI1MzEsNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHVGV4dENodW5rTGF5b3V0SW5m
by5jcHAiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJ
PFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJS
ZWxlYXNlfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQot
CQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5h
bWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
DQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQot
CQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24NCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQot
CQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIg0KLQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRl
cmluZ1xTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJ
PEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHVGV4dExheW91dFV0aWxp
dGllcy5jcHAiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJ
CQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1l
PSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+
DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0K
LQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJ
CU5hbWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
DQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIg0K
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQot
CQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcVGFibGVMYXlvdXQuaCIN
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0zMzQ2Niw2ICszMzI0MiwxNCBAQAogCQkJCQk+DQog
CQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XHN2Z1xTVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRDaHVu
a0J1aWxkZXIuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRGcmFnbWVudC5oIg0KIAkJCQkJPg0K
IAkJCQk8L0ZpbGU+DQpAQCAtMzM0ODYsNiArMzMyNzAsMTQgQEAKIAkJCQkJPg0KIAkJCQk8L0Zp
bGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZH
VGV4dExheW91dEVuZ2luZS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdUZXh0TGF5b3V0RW5naW5l
LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIg0KIAkJ
CQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDY4ODc4KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDEwIEBACiAJCTA4
MEZBRTFCMEVFRUJEQTgwMEFBQ0RFOSAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEZBRTE5MEVFRUJEQTgwMEFB
Q0RFOSAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCAqLzsgfTsKIAkJMDgxMDkzREIxMjU1RjBFNzAw
RUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODEwOTNEOTEyNTVGMEU3MDBFRDlE
MjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCAqLzsgfTsKIAkJMDgxMDkz
REMxMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxMDkzREExMjU1
RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oICovOyB9Owor
CQkwODE2NjhEMzEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMTEyNTYw
M0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5jcHAgKi87IH07CisJCTA4MTY2OEQ0
MTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JGMDA2RjI1REUg
LyogU1ZHVGV4dENodW5rQnVpbGRlci5oICovOyB9OworCQkwODE2NjhEOTEyNTYwM0Q1MDA2RjI1
REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhENzEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExh
eW91dEVuZ2luZS5jcHAgKi87IH07CisJCTA4MTY2OERBMTI1NjAzRDUwMDZGMjVERSAvKiBTVkdU
ZXh0TGF5b3V0RW5naW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODE2NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5o
ICovOyB9OwogCQkwODE4QUVFMjBFREI4NkJDMDA2NDdCNjYgLyogV01MRXZlbnRIYW5kbGluZ0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDgxOEFFRTAwRURCODZCQzAwNjQ3QjY2IC8qIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmNwcCAq
LzsgfTsKIAkJMDgxOEFFRTMwRURCODZCQzAwNjQ3QjY2IC8qIFdNTEV2ZW50SGFuZGxpbmdFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE4
QUVFMTBFREI4NkJDMDA2NDdCNjYgLyogV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQuaCAqLzsgfTsK
IAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3
RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovOyB9OwpAQCAtOTQsMTEgKzk4LDYg
QEAKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNE
QUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsg
fTsKIAkJMDgzREFFQTgwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cCAqLzsgfTsKIAkJMDgzREFFQTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDgzREFFQTUwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oICovOyB9OwotCQkwODNGNTI5OTExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0
aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODNGNTI5NzExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAg
Ki87IH07Ci0JCTA4M0Y1MjlBMTE5NTdGQkUwMDY1M0VCRSAvKiBTVkdUZXh0TGF5b3V0VXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNG
NTI5ODExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5oICovOyB9Owot
CQkwODQyQkM3MjExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVyRGF0YS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQyQkM3MDExOTAxNDQw
MDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVyRGF0YS5jcHAgKi87IH07Ci0JCTA4NDJCQzczMTE5MDE0
NDAwMEM3RDA4RiAvKiBTVkdDaGFyYWN0ZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQyQkM3MTExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hh
cmFjdGVyRGF0YS5oICovOyB9OwotCQkwODQyQkM4MTExOTAxNDcyMDBDN0QwOEYgLyogU1ZHVGV4
dENodW5rTGF5b3V0SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDg0MkJDODAxMTkwMTQ3MjAwQzdEMDhGIC8qIFNWR1RleHRDaHVua0xheW91dElu
Zm8uaCAqLzsgfTsKIAkJMDg0QUVCRTQwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0QUVC
RTIwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQuY3BwICovOyB9OwogCQkwODRBRUJF
NTBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0QUVCRTMwRkI1MDVGQTAwMzg0ODNFIC8qIFNl
bGVjdEVsZW1lbnQuaCAqLzsgfTsKIAkJMDg0Q0U1Q0IwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9w
dEdyb3VwRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODRDRTVDNzBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0R3JvdXBFbGVtZW50LmNw
cCAqLzsgfTsKQEAgLTExMyw3ICsxMTIsNiBAQAogCQkwODREMjgzNDExMEE3RkNCMDAzODIzOUEg
LyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0RDI4MzIxMTBBN0ZDQjAwMzgyMzlBIC8qIFNWR0FuaW1h
dGVkUHJvcGVydHlUcmFpdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwODREQkFBMTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NERCQTlE
MEVEMzlEMzUwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuY3BwICovOyB9OwogCQkwODREQkFBMjBF
RDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODREQkE5RTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFy
aWFibGVzLmggKi87IH07Ci0JCTA4NTNENzMyMTFDOTEwOTAwMEIyRkQ0MiAvKiBTVkdUZXh0Q2h1
bmtMYXlvdXRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NTNENzJGMTFDOTEwOEYwMEIyRkQ0MiAvKiBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZv
LmNwcCAqLzsgfTsKIAkJMDg1NEIwMTQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGlu
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0
QjAwMjEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLzsgfTsKIAkJMDg1
NEIwMTUxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMDMxMjU1RTRFNjAwQjlDREQw
IC8qIFJlbmRlclNWR0lubGluZS5oICovOyB9OwogCQkwODU0QjAxNjEyNTVFNEU2MDBCOUNERDAg
LyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAwNDEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHAgKi87IH07CkBAIC00MjMzLDggKzQyMzEsNiBAQAogCQlCMkIxRjcxNzBEMDBD
QUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkIxRjcxNTBEMDBDQUE4MDA0QUVBNjQgLyog
UG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggKi87IH07CiAJCUIyQjI2NDVDMEQwMEE3N0UwMDBBQ0Mx
RCAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkIyNjQ1QTBEMDBBNzdFMDAwQUNDMUQgLyogU3RyaW5nQ0YuY3BwICovOyB9Owog
CQlCMkIyNjQ1RDBEMDBBNzdFMDAwQUNDMUQgLyogU3RyaW5nSW1wbENGLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQjI2NDVCMEQwMEE3N0UwMDBB
Q0MxRCAvKiBTdHJpbmdJbXBsQ0YuY3BwICovOyB9OwotCQlCMkIzM0E1RjBCODg3Q0VGMDBDMTU5
ODQgLyogU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkIzM0E1RDBCODg3Q0VGMDBDMTU5ODQgLyogU1ZHQ2hh
cmFjdGVyTGF5b3V0SW5mby5jcHAgKi87IH07Ci0JCUIyQjMzQTYwMEI4ODdDRUYwMEMxNTk4NCAv
KiBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkIzM0E1RTBCODg3Q0VGMDBDMTU5ODQgLyogU1ZHQ2hhcmFjdGVy
TGF5b3V0SW5mby5oICovOyB9OwogCQlCMkMzREEyMTBEMDA2QzFEMDBFRjZGMjYgLyogQmFzZTY0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNE
OUYwMEQwMDZDMUQwMEVGNkYyNiAvKiBCYXNlNjQuY3BwICovOyB9OwogCQlCMkMzREEyMjBEMDA2
QzFEMDBFRjZGMjYgLyogQmFzZTY0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMkMzRDlGMTBEMDA2QzFEMDBFRjZGMjYgLyogQmFzZTY0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBMjMwRDAw
NkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEOUYyMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29u
dGV4dC5jcHAgKi87IH07CkBAIC02MDE5LDYgKzYwMTUsMTAgQEAKIAkJMDgwRkFFMTkwRUVFQkRB
ODAwQUFDREU5IC8qIFdNTFRlbXBsYXRlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDgxMDkzRDkxMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
QnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0
TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwODEwOTNEQTEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODE2NjhEMTEy
NTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgxNjY4RDIxMjU2MDNCRjAwNkYyNURFIC8qIFNWR1RleHRD
aHVua0J1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dENo
dW5rQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODE2NjhENzEyNTYw
M0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlv
dXRFbmdpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91
dEVuZ2luZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODE4QUVFMDBFREI4NkJD
MDA2NDdCNjYgLyogV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODE4QUVFMTBFREI4NkJDMDA2NDdCNjYgLyogV01MRXZl
bnRIYW5kbGluZ0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
RXZlbnRIYW5kbGluZ0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgx
QUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdFbGVtZW50UmFyZURhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTYwMzksMTEgKzYwMzksNiBAQAogCQkwODNEQUVBMzBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODNGNTI5
NzExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgzRjUyOTgxMTk1N0ZCRTAwNjUzRUJFIC8q
IFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHVGV4dExheW91dFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwODQyQkM3MDExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVyRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdDaGFyYWN0ZXJEYXRhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg0MkJDNzExMTkwMTQ0MDAwQzdEMDhGIC8qIFNW
R0NoYXJhY3RlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQ2hh
cmFjdGVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODQyQkM4MDExOTAx
NDcyMDBDN0QwOEYgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4NEFFQkUyMEZCNTA1RkEwMDM4NDgzRSAvKiBTZWxlY3RFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODRBRUJFMzBGQjUwNUZBMDAzODQ4
M0UgLyogU2VsZWN0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZWxlY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NENFNUM3MEYy
N0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV01MT3B0R3JvdXBFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTYwNTgsNyArNjA1Myw2IEBACiAJCTA4NEQyODMyMTEwQTdGQ0Iw
MDM4MjM5QSAvKiBTVkdBbmltYXRlZFByb3BlcnR5VHJhaXRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlUcmFpdHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDg0REJBOUQwRUQzOUQzNTAwMzhDMjI2IC8qIFdNTFZhcmlhYmxl
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxWYXJpYWJsZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODREQkE5RTBFRDM5RDM2MDAzOEMy
MjYgLyogV01MVmFyaWFibGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdN
TFZhcmlhYmxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODUzRDcyRjExQzkx
MDhGMDBCMkZENDIgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMDIxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRl
clNWR0lubGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJTVkdJbmxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0QjAwMzEy
NTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODU0QjAwNDEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTMyLDggKzEwMTI2LDYgQEAK
IAkJQjJCMUY3MTUwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQjI2NDVBMEQwMEE3N0UwMDBBQ0MxRCAv
KiBTdHJpbmdDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Ry
aW5nQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIyNjQ1QjBEMDBBNzdF
MDAwQUNDMUQgLyogU3RyaW5nSW1wbENGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHJpbmdJbXBsQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlCMkIzM0E1RDBCODg3Q0VGMDBDMTU5ODQgLyogU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHQ2hhcmFjdGVyTGF5b3V0
SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQjMzQTVFMEI4ODdDRUYw
MEMxNTk4NCAvKiBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEOUYwMEQwMDZDMUQwMEVGNkYyNiAvKiBCYXNlNjQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2U2NC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEOUYxMEQwMDZDMUQwMEVGNkYyNiAvKiBCYXNlNjQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2U2NC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMkMzRDlGMjBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpZGlDb250ZXh0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNjY0LDExICsxMTY1NiwxNSBAQAog
CQkJCTA4NTRCMDExMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94LmggKi8sCiAJ
CQkJMDhGMEJGQkQxMjU1QzUzQzAwMDc1MTg1IC8qIFNWR1RleHRDaHVuay5jcHAgKi8sCiAJCQkJ
MDhGMEJGQkUxMjU1QzUzQzAwMDc1MTg1IC8qIFNWR1RleHRDaHVuay5oICovLAorCQkJCTA4MTY2
OEQxMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCAqLywKKwkJCQkw
ODE2NjhEMjEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5oICovLAogCQkJ
CTA4RjBCRkJGMTI1NUM1M0MwMDA3NTE4NSAvKiBTVkdUZXh0RnJhZ21lbnQuaCAqLywKIAkJCQkw
ODhDMkY3NTEyMzkwMDgwMDAzRDY1Q0UgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwICov
LAogCQkJCTA4OEMyRjc2MTIzOTAwODAwMDNENjVDRSAvKiBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
cy5oICovLAogCQkJCTA4MTA5M0Q5MTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0
cmlidXRlc0J1aWxkZXIuY3BwICovLAogCQkJCTA4MTA5M0RBMTI1NUYwRTcwMEVEOUQyOSAvKiBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCAqLywKKwkJCQkwODE2NjhENzEyNTYwM0Q1
MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8sCisJCQkJMDgxNjY4RDgxMjU2
MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLywKIAkJCQkwODBFNDkyMTEy
NTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCAqLywKIAkJ
CQkwODBFNDkyMjEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5l
LmggKi8sCiAJCQkJMDgwRTQ5MjMxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nLmNwcCAqLywKQEAgLTE3NzU5LDEwICsxNzc1NSw2IEBACiAJCQkJNUQ5MjVCNjYw
RjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEJlaGF2aW9yLmggKi8sCiAJCQkJQTdGMzM4QTExMUMw
RUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovLAogCQkJCUE3RjMzOEEyMTFDMEVG
Q0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVtZW50LmggKi8sCi0JCQkJMDg0MkJDNzAxMTkwMTQ0MDAw
QzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuY3BwICovLAotCQkJCTA4NDJCQzcxMTE5MDE0NDAw
MEM3RDA4RiAvKiBTVkdDaGFyYWN0ZXJEYXRhLmggKi8sCi0JCQkJQjJCMzNBNUQwQjg4N0NFRjAw
QzE1OTg0IC8qIFNWR0NoYXJhY3RlckxheW91dEluZm8uY3BwICovLAotCQkJCUIyQjMzQTVFMEI4
ODdDRUYwMEMxNTk4NCAvKiBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmggKi8sCiAJCQkJMDhDNDZC
NjcxMjEyRjE1RDAwMTFBRjQwIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwICovLAogCQkJCTA4
QzQ2QjY4MTIxMkYxNUQwMDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmggKi8sCiAJCQkJ
MDgzODVGRjUxMEYwMTg2MDAwQkZFMDdCIC8qIFNWR01hcmtlckRhdGEuaCAqLywKQEAgLTE3Nzgw
LDEwICsxNzc3Miw2IEBACiAJCQkJMDg1QjA1QzExMUZBRTE2QzAwNEQ2NUY2IC8qIFNWR1Jlc291
cmNlc0N5Y2xlU29sdmVyLmggKi8sCiAJCQkJMDhEQUI5QzAxMTAzRDlDMTAwM0U3QUJBIC8qIFNW
R1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgKi8sCiAJCQkJMDhEQUI5QzExMTAzRDlDMTAwM0U3QUJB
IC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oICovLAotCQkJCTA4NTNENzJGMTFDOTEwOEYwMEIy
RkQ0MiAvKiBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCAqLywKLQkJCQkwODQyQkM4MDExOTAx
NDcyMDBDN0QwOEYgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oICovLAotCQkJCTA4M0Y1Mjk3
MTE5NTdGQkUwMDY1M0VCRSAvKiBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcCAqLywKLQkJCQkw
ODNGNTI5ODExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5oICovLAog
CQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJCUFC
MDE0REUxMEU2ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwICov
LAogCQkJCUFCMDE0REUyMEU2ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuaCAqLywKQEAgLTIwNTI2LDggKzIwNTE0LDYgQEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlv
bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4NDJCQzczMTE5MDE0NDAwMEM3RDA4RiAv
KiBTVkdDaGFyYWN0ZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkIzM0E2MDBCODg3Q0VG
MDBDMTU5ODQgLyogU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjc5OUMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyMjI3OTlGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDbGlwUGF0aEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUEyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDb2xv
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDY2OSwxMSArMjA2NTUsOSBAQAogCQkJCUIyMjI3QUJF
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTd2l0Y2hFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyN0FDMTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3ltYm9sRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjIyMjdBQzUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1Rlc3RzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwODQyQkM4MTExOTAxNDcyMDBDN0QwOEYgLyogU1ZHVGV4dENodW5rTGF5
b3V0SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQzgwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1RleHRDb250ZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQ0IwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1RleHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODhD
MkY3QTEyMzkwMDgxMDAzRDY1Q0UgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTA4M0Y1MjlBMTE5NTdGQkUwMDY1M0VCRSAvKiBTVkdUZXh0TGF5b3V0VXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FDRTBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHVGV4dFBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FEMTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBRDQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RpdGxlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yMDk1MSw2ICsyMDkzNSw4IEBACiAJCQkJMDgxMDkzREMxMjU1RjBFNzAwRUQ5
RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDgwRTQ5MjYxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGlu
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgwRTQ5MjgxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1Rl
eHRMYXlvdXRFbmdpbmVTcGFjaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwODE2NjhENDEyNTYw
M0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MDgxNjY4REExMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMjMxMDMsOCArMjMwODksNiBAQAogCQkJCUIyMjI3OTkyMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MjIyNzk5NDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5OTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg0MkJDNzIxMTkwMTQ0MDAwQzdE
MDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjJCMzNBNUYw
Qjg4N0NFRjAwQzE1OTg0IC8qIFNWR0NoYXJhY3RlckxheW91dEluZm8uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjIyMjc5OUIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5OUUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NsaXBQ
YXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlBMTBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMzI0MSwxMSArMjMyMjUsOSBA
QAogCQkJCUIyMjI3QUJEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTd2l0Y2hFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3QUMwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTeW1ib2xF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUM0MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdUZXN0cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwODUzRDczMjExQzkxMDkwMDBCMkZE
NDIgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIy
N0FDNzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyMjI3QUNBMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXh0RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwODhDMkY3OTEyMzkwMDgxMDAzRDY1Q0UgLyogU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDgzRjUyOTkxMTk1N0ZC
RTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjIyMjdBQ0QwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQYXRoRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyN0FEMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FEMzBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHVGl0bGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjM0NzksNiAr
MjM0NjEsOCBAQAogCQkJCTA4MTA5M0RCMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0
QXR0cmlidXRlc0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgwRTQ5MjUxMjU1RjNC
RDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwODBFNDkyNzEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNw
YWNpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDgxNjY4RDMxMjU2MDNCRjAwNkYyNURFIC8q
IFNWR1RleHRDaHVua0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDgxNjY4RDkxMjU2
MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaXNSb290SW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICNpZiBFTkFCTEUoU1ZHKQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGluZVRleHRC
b3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGlu
ZUZsb3dCb3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1Jvb3RJbmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDY4ODY3KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0KGludCBhYnN4LCBp
bnQgYWJzeSwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKICAgICBib29sIGlzU2VsZWN0ZWQo
aW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0
aW9uU3RhcnRFbmQoaW50JiBzUG9zLCBpbnQmIGVQb3MpOworICAgIHZvaWQgc2VsZWN0aW9uU3Rh
cnRFbmQoaW50JiBzUG9zLCBpbnQmIGVQb3MpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDY4ODc0KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0
Nyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgog
I2luY2x1ZGUgIlJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIgogI2luY2x1ZGUg
IlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCIKLSNpbmNsdWRlICJTVkdDaGFyYWN0ZXJE
YXRhLmNwcCIKLSNpbmNsdWRlICJTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcCIKICNpbmNsdWRl
ICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCIKICNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZv
LmNwcCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmNwcCIKQEAgLTU3LDggKzU1LDYgQEAK
ICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5jcHAiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2Vz
Q3ljbGVTb2x2ZXIuY3BwIgogI2luY2x1ZGUgIlNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAiCi0j
aW5jbHVkZSAiU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAiCi0jaW5jbHVkZSAiU1ZHVGV4dExh
eW91dFV0aWxpdGllcy5jcHAiCiAKIC8vIEZJWE1FOiBBcyBzb29uIGFzIGFsbCBTVkcgcmVuZGVy
ZXJzIGxpdmUgaW4gcmVuZGVyaW5nL3N2ZywgdGhpcyBmaWxlIHNob3VsZCBiZSBtb3ZlZCB0aGVy
ZSBhcyB3ZWxsLCByZW1vdmluZyB0aGUgbmVlZCBmb3IgdGhlIHN2Zy8gaW5jbHVkZXMgYmVsb3cu
CiAjaW5jbHVkZSAic3ZnL1JlbmRlclNWR0lubGluZS5jcHAiCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4NCwzNSArMTA4NCw2IEBAIHZvaWQgUmVuZGVy
VGV4dDo6c2V0VGV4dEludGVybmFsKFBhc3NSZWYKICAgICB9CiAgICAgQVNTRVJUKG1fdGV4dCk7
CiAKLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChpc1NWR0lubGluZVRleHQoKSkgewotICAgICAg
ICBpZiAoc3R5bGUoKSAmJiBzdHlsZSgpLT53aGl0ZVNwYWNlKCkgPT0gUFJFKSB7Ci0gICAgICAg
ICAgICAvLyBTcGVjOiBXaGVuIHhtbDpzcGFjZT0icHJlc2VydmUiLCB0aGUgU1ZHIHVzZXIgYWdl
bnQgd2lsbCBkbyB0aGUgZm9sbG93aW5nIHVzaW5nIGEKLSAgICAgICAgICAgIC8vIGNvcHkgb2Yg
dGhlIG9yaWdpbmFsIGNoYXJhY3RlciBkYXRhIGNvbnRlbnQuIEl0IHdpbGwgY29udmVydCBhbGwg
bmV3bGluZSBhbmQgdGFiCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIGludG8gc3BhY2UgY2hh
cmFjdGVycy4gVGhlbiwgaXQgd2lsbCBkcmF3IGFsbCBzcGFjZSBjaGFyYWN0ZXJzLCBpbmNsdWRp
bmcKLSAgICAgICAgICAgIC8vIGxlYWRpbmcsIHRyYWlsaW5nIGFuZCBtdWx0aXBsZSBjb250aWd1
b3VzIHNwYWNlIGNoYXJhY3RlcnMuCi0KLSAgICAgICAgICAgIG1fdGV4dC5yZXBsYWNlKCdcbics
ICcgJyk7Ci0KLSAgICAgICAgICAgIC8vIElmIHhtbDpzcGFjZT0icHJlc2VydmUiIGlzIHNldCwg
d2hpdGUtc3BhY2UgaXMgc2V0IHRvICJwcmUiLCB3aGljaAotICAgICAgICAgICAgLy8gcHJlc2Vy
dmVzIGxlYWRpbmcsIHRyYWlsaW5nICYgY29udGlndW91cyBzcGFjZSBjaGFyYWN0ZXIgZm9yIHVz
LgotICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBTcGVjOiBXaGVuIHhtbDpzcGFjZT0i
ZGVmYXVsdCIsIHRoZSBTVkcgdXNlciBhZ2VudCB3aWxsIGRvIHRoZSBmb2xsb3dpbmcgdXNpbmcg
YQotICAgICAgICAgICAgLy8gY29weSBvZiB0aGUgb3JpZ2luYWwgY2hhcmFjdGVyIGRhdGEgY29u
dGVudC4gRmlyc3QsIGl0IHdpbGwgcmVtb3ZlIGFsbCBuZXdsaW5lCi0gICAgICAgICAgICAvLyBj
aGFyYWN0ZXJzLiBUaGVuIGl0IHdpbGwgY29udmVydCBhbGwgdGFiIGNoYXJhY3RlcnMgaW50byBz
cGFjZSBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgLy8gVGhlbiwgaXQgd2lsbCBzdHJpcCBvZmYg
YWxsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIGNoYXJhY3RlcnMuCi0gICAgICAgICAgICAv
LyBUaGVuLCBhbGwgY29udGlndW91cyBzcGFjZSBjaGFyYWN0ZXJzIHdpbGwgYmUgY29uc29saWRh
dGVkLiAgICAKLQotICAgICAgICAgICBtX3RleHQucmVwbGFjZSgnXG4nLCBTdHJpbmdJbXBsOjpl
bXB0eSgpKTsKLQotICAgICAgICAgICAvLyBJZiB4bWw6c3BhY2U9ImRlZmF1bHQiIGlzIHNldCwg
d2hpdGUtc3BhY2UgaXMgc2V0IHRvICJub3dyYXAiLCB3aGljaCBoYW5kbGVzCi0gICAgICAgICAg
IC8vIGxlYWRpbmcsIHRyYWlsaW5nICYgY29udGlndW91cyBzcGFjZSBjaGFyYWN0ZXIgcmVtb3Zh
bCBmb3IgdXMuCi0gICAgICAgIH0KLQotICAgICAgICBtX3RleHQucmVwbGFjZSgnXHQnLCAnICcp
OwotICAgIH0KLSNlbmRpZgotCiAgICAgaWYgKHN0eWxlKCkpIHsKICAgICAgICAgdHJhbnNmb3Jt
VGV4dChtX3RleHQpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJEYXRhLmNw
cAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJEYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR0NoYXJhY3RlckRhdGEu
aCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBTVkdDaGFyOjppc0hpZGRlbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHBhdGhEYXRhICYmIHBhdGhEYXRhLT5oaWRkZW47Ci19Ci0KLUFmZmluZVRyYW5z
Zm9ybSBTVkdDaGFyOjpjaGFyYWN0ZXJUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIEFmZmluZVRy
YW5zZm9ybSBjdG07Ci0KLSAgICAvLyBSb3RhdGUgY2hhcmFjdGVyIGFyb3VuZCBhbmdsZSwgYW5k
IHBvc3NpYmx5IHNjYWxlLgotICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7Ci0gICAgY3RtLnJvdGF0
ZShhbmdsZSk7Ci0KLSAgICBpZiAocGF0aERhdGEpIHsKLSAgICAgICAgY3RtLnNjYWxlTm9uVW5p
Zm9ybShwYXRoRGF0YS0+eFNjYWxlLCBwYXRoRGF0YS0+eVNjYWxlKTsKLSAgICAgICAgY3RtLnRy
YW5zbGF0ZShwYXRoRGF0YS0+eFNoaWZ0LCBwYXRoRGF0YS0+eVNoaWZ0KTsKLSAgICAgICAgY3Rt
LnJvdGF0ZShwYXRoRGF0YS0+b3JpZW50YXRpb25BbmdsZSk7Ci0gICAgfQotCi0gICAgY3RtLnRy
YW5zbGF0ZShvcmllbnRhdGlvblNoaWZ0WCAtIHgsIG9yaWVudGF0aW9uU2hpZnRZIC0geSk7Ci0g
ICAgcmV0dXJuIGN0bTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJEYXRhLmgJKHJldmlz
aW9uIDY4ODY3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0j
aWZuZGVmIFNWR0NoYXJhY3RlckRhdGFfaAotI2RlZmluZSBTVkdDaGFyYWN0ZXJEYXRhX2gKLQot
I2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgUmVuZGVyT2JqZWN0Owot
Ci0vLyBIb2xkcyBleHRyYSBkYXRhLCB3aGVuIHRoZSBjaGFyYWN0ZXIgaXMgbGFpZCBvdXQgb24g
YSBwYXRoCi1zdHJ1Y3QgU1ZHQ2hhck9uUGF0aCA6IFJlZkNvdW50ZWQ8U1ZHQ2hhck9uUGF0aD4g
ewotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0NoYXJPblBhdGg+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTVkdDaGFyT25QYXRoKTsgfQotCi0gICAgZmxvYXQgeFNjYWxlOwotICAg
IGZsb2F0IHlTY2FsZTsKLQotICAgIGZsb2F0IHhTaGlmdDsKLSAgICBmbG9hdCB5U2hpZnQ7Ci0K
LSAgICBmbG9hdCBvcmllbnRhdGlvbkFuZ2xlOwotCi0gICAgYm9vbCBoaWRkZW4gOiAxOwotCi1w
cml2YXRlOgotICAgIFNWR0NoYXJPblBhdGgoKQotICAgICAgICA6IHhTY2FsZSgxLjBmKQotICAg
ICAgICAsIHlTY2FsZSgxLjBmKQotICAgICAgICAsIHhTaGlmdCgwLjBmKQotICAgICAgICAsIHlT
aGlmdCgwLjBmKQotICAgICAgICAsIG9yaWVudGF0aW9uQW5nbGUoMC4wZikKLSAgICAgICAgLCBo
aWRkZW4oZmFsc2UpCi0gICAgewotICAgIH0KLX07Ci0KLXN0cnVjdCBTVkdDaGFyIHsKLSAgICBT
VkdDaGFyKCkKLSAgICAgICAgOiB4KDAuMGYpCi0gICAgICAgICwgeSgwLjBmKQotICAgICAgICAs
IGFuZ2xlKDAuMGYpCi0gICAgICAgICwgb3JpZW50YXRpb25TaGlmdFgoMC4wZikKLSAgICAgICAg
LCBvcmllbnRhdGlvblNoaWZ0WSgwLjBmKQotICAgICAgICAsIGRyYXduU2VwZXJhdGVkKGZhbHNl
KQotICAgICAgICAsIG5ld1RleHRDaHVuayhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxv
YXQgeDsKLSAgICBmbG9hdCB5OwotICAgIGZsb2F0IGFuZ2xlOwotCi0gICAgZmxvYXQgb3JpZW50
YXRpb25TaGlmdFg7Ci0gICAgZmxvYXQgb3JpZW50YXRpb25TaGlmdFk7Ci0KLSAgICBSZWZQdHI8
U1ZHQ2hhck9uUGF0aD4gcGF0aERhdGE7Ci0KLSAgICAvLyBEZXRlcm1pbmVzIHdoZXRlciB0aGlz
IGNoYXIgbmVlZHMgdG8gYmUgZHJhd24gc2VwZXJhdGVkCi0gICAgYm9vbCBkcmF3blNlcGVyYXRl
ZCA6IDE7Ci0KLSAgICAvLyBEZXRlcm1pbmVzIHdoZXRlciB0aGlzIGNoYXIgc3RhcnRzIGEgbmV3
IGNodW5rCi0gICAgYm9vbCBuZXdUZXh0Q2h1bmsgOiAxOwotCi0gICAgLy8gSGVscGVyIG1ldGhv
ZHMKLSAgICBib29sIGlzSGlkZGVuKCkgY29uc3Q7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGNoYXJh
Y3RlclRyYW5zZm9ybSgpIGNvbnN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFNWRykKLSNlbmRpZiAvLyBTVkdDaGFyYWN0ZXJEYXRhX2gKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3BwCShyZXZpc2lv
biA2ODg2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR0NoYXJhY3RlckxheW91dEluZm8uaCIKLQotI2lmIEVO
QUJMRShTVkcpCi0jaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgotI2luY2x1ZGUgIklubGluZVRl
eHRCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5oIgotI2luY2x1ZGUgIlNWR0No
YXJhY3RlckRhdGEuaCIKLSNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCi0jaW5jbHVkZSAiU1ZH
TnVtYmVyTGlzdC5oIgotI2luY2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKLQot
I2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSGVscGVyIGZ1
bmN0aW9uCi1zdGF0aWMgZmxvYXQgY2FsY3VsYXRlQmFzZWxpbmVTaGlmdChSZW5kZXJPYmplY3Qq
IGl0ZW0pCi17Ci0gICAgQVNTRVJUKGl0ZW0pOwotICAgIEFTU0VSVChpdGVtLT5zdHlsZSgpKTsK
LSAgICBBU1NFUlQoaXRlbS0+bm9kZSgpKTsKLSAgICBBU1NFUlQoaXRlbS0+bm9kZSgpLT5pc1NW
R0VsZW1lbnQoKSk7Ci0KLSAgICBjb25zdCBGb250JiBmb250ID0gaXRlbS0+c3R5bGUoKS0+Zm9u
dCgpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IGl0ZW0tPnN0eWxlKCkt
PnN2Z1N0eWxlKCk7Ci0KLSAgICBmbG9hdCBiYXNlbGluZVNoaWZ0ID0gMC4wZjsKLSAgICBpZiAo
c3ZnU3R5bGUtPmJhc2VsaW5lU2hpZnQoKSA9PSBCU19MRU5HVEgpIHsKLSAgICAgICAgU1ZHTGVu
Z3RoIGJhc2VsaW5lU2hpZnRWYWx1ZUxlbmd0aCA9IHN2Z1N0eWxlLT5iYXNlbGluZVNoaWZ0VmFs
dWUoKTsKLSAgICAgICAgaWYgKGJhc2VsaW5lU2hpZnRWYWx1ZUxlbmd0aC51bml0VHlwZSgpID09
IExlbmd0aFR5cGVQZXJjZW50YWdlKQotICAgICAgICAgICAgYmFzZWxpbmVTaGlmdCA9IGJhc2Vs
aW5lU2hpZnRWYWx1ZUxlbmd0aC52YWx1ZUFzUGVyY2VudGFnZSgpICogZm9udC5waXhlbFNpemUo
KTsKLSAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIGJhc2VsaW5lU2hpZnQgPSBiYXNlbGluZVNo
aWZ0VmFsdWVMZW5ndGgudmFsdWUoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGl0ZW0tPm5vZGUo
KSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGJhc2VsaW5lQXNjZW50ID0gZm9udC5h
c2NlbnQoKSArIGZvbnQuZGVzY2VudCgpOwotCi0gICAgICAgIHN3aXRjaCAoc3ZnU3R5bGUtPmJh
c2VsaW5lU2hpZnQoKSkgewotICAgICAgICBjYXNlIEJTX0JBU0VMSU5FOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQlNfU1VCOgotICAgICAgICAgICAgYmFzZWxpbmVTaGlmdCA9
IC1iYXNlbGluZUFzY2VudCAvIDIuMGY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBCU19TVVBFUjoKLSAgICAgICAgICAgIGJhc2VsaW5lU2hpZnQgPSBiYXNlbGluZUFzY2VudCAv
IDIuMGY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJh
c2VsaW5lU2hpZnQ7Ci19Ci0KLVNWR0NoYXJhY3RlckxheW91dEluZm86OlNWR0NoYXJhY3Rlckxh
eW91dEluZm8oKQotICAgIDogY3VyeCgwLjBmKQotICAgICwgY3VyeSgwLjBmKQotICAgICwgYW5n
bGUoMC4wZikKLSAgICAsIGR4KDAuMGYpCi0gICAgLCBkeSgwLjBmKQotICAgICwgc2hpZnR4KDAu
MGYpCi0gICAgLCBzaGlmdHkoMC4wZikKLSAgICAsIHBhdGhFeHRyYUFkdmFuY2UoMC4wZikKLSAg
ICAsIHBhdGhUZXh0TGVuZ3RoKDAuMGYpCi0gICAgLCBwYXRoQ2h1bmtMZW5ndGgoMC4wZikKLSAg
ICAsIG5leHREcmF3blNlcGVyYXRlZChmYWxzZSkKLSAgICAsIHhTdGFja0NoYW5nZWQoZmFsc2Up
Ci0gICAgLCB5U3RhY2tDaGFuZ2VkKGZhbHNlKQotICAgICwgZHhTdGFja0NoYW5nZWQoZmFsc2Up
Ci0gICAgLCBkeVN0YWNrQ2hhbmdlZChmYWxzZSkKLSAgICAsIGFuZ2xlU3RhY2tDaGFuZ2VkKGZh
bHNlKQotICAgICwgYmFzZWxpbmVTaGlmdFN0YWNrQ2hhbmdlZChmYWxzZSkKLSAgICAsIHBhdGhM
YXlvdXQoZmFsc2UpCi0gICAgLCBjdXJyZW50T2Zmc2V0KDAuMGYpCi0gICAgLCBzdGFydE9mZnNl
dCgwLjBmKQotICAgICwgbGF5b3V0UGF0aExlbmd0aCgwLjBmKQotewotfQotCi1ib29sIFNWR0No
YXJhY3RlckxheW91dEluZm86OnhWYWx1ZUF2YWlsYWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHhTdGFjay5pc0VtcHR5KCkgPyBmYWxzZSA6IHhTdGFjay5sYXN0KCkucG9zaXRpb24oKSA8IHhT
dGFjay5sYXN0KCkuc2l6ZSgpOwotfQotCi1ib29sIFNWR0NoYXJhY3RlckxheW91dEluZm86OnlW
YWx1ZUF2YWlsYWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHlTdGFjay5pc0VtcHR5KCkgPyBm
YWxzZSA6IHlTdGFjay5sYXN0KCkucG9zaXRpb24oKSA8IHlTdGFjay5sYXN0KCkuc2l6ZSgpOwot
fQotCi1ib29sIFNWR0NoYXJhY3RlckxheW91dEluZm86OmR4VmFsdWVBdmFpbGFibGUoKSBjb25z
dAotewotICAgIHJldHVybiBkeFN0YWNrLmlzRW1wdHkoKSA/IGZhbHNlIDogZHhTdGFjay5sYXN0
KCkucG9zaXRpb24oKSA8IGR4U3RhY2subGFzdCgpLnNpemUoKTsKLX0KLQotYm9vbCBTVkdDaGFy
YWN0ZXJMYXlvdXRJbmZvOjpkeVZhbHVlQXZhaWxhYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZHlTdGFjay5pc0VtcHR5KCkgPyBmYWxzZSA6IGR5U3RhY2subGFzdCgpLnBvc2l0aW9uKCkgPCBk
eVN0YWNrLmxhc3QoKS5zaXplKCk7Ci19Ci0KLWJvb2wgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6
YW5nbGVWYWx1ZUF2YWlsYWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFuZ2xlU3RhY2suaXNF
bXB0eSgpID8gZmFsc2UgOiBhbmdsZVN0YWNrLmxhc3QoKS5wb3NpdGlvbigpIDwgYW5nbGVTdGFj
ay5sYXN0KCkuc2l6ZSgpOwotfQotCi1ib29sIFNWR0NoYXJhY3RlckxheW91dEluZm86OmJhc2Vs
aW5lU2hpZnRWYWx1ZUF2YWlsYWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFiYXNlbGluZVNo
aWZ0U3RhY2suaXNFbXB0eSgpOwotfQotCi1mbG9hdCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjp4
VmFsdWVOZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIXhTdGFjay5pc0VtcHR5KCkpOwotICAg
IHJldHVybiB4U3RhY2subGFzdCgpLnZhbHVlQXRDdXJyZW50UG9zaXRpb24oKTsKLX0KLQotZmxv
YXQgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6eVZhbHVlTmV4dCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCF5U3RhY2suaXNFbXB0eSgpKTsKLSAgICByZXR1cm4geVN0YWNrLmxhc3QoKS52YWx1ZUF0
Q3VycmVudFBvc2l0aW9uKCk7Ci19Ci0KLWZsb2F0IFNWR0NoYXJhY3RlckxheW91dEluZm86OmR4
VmFsdWVOZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWR4U3RhY2suaXNFbXB0eSgpKTsKLSAg
ICByZXR1cm4gZHhTdGFjay5sYXN0KCkudmFsdWVBdEN1cnJlbnRQb3NpdGlvbigpOwotfQotCi1m
bG9hdCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpkeVZhbHVlTmV4dCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKCFkeVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIGR5U3RhY2subGFzdCgpLnZh
bHVlQXRDdXJyZW50UG9zaXRpb24oKTsKLX0KLQotZmxvYXQgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5m
bzo6YW5nbGVWYWx1ZU5leHQoKSBjb25zdAotewotICAgIEFTU0VSVCghYW5nbGVTdGFjay5pc0Vt
cHR5KCkpOwotICAgIHJldHVybiBhbmdsZVN0YWNrLmxhc3QoKS52YWx1ZUF0Q3VycmVudFBvc2l0
aW9uKCk7Ci19Ci0KLWZsb2F0IFNWR0NoYXJhY3RlckxheW91dEluZm86OmJhc2VsaW5lU2hpZnRW
YWx1ZU5leHQoKSBjb25zdAotewotICAgIEFTU0VSVCghYmFzZWxpbmVTaGlmdFN0YWNrLmlzRW1w
dHkoKSk7Ci0gICAgcmV0dXJuIGJhc2VsaW5lU2hpZnRTdGFjay5sYXN0KCk7Ci19Ci0KLQotYm9v
bCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjppc0luaXRpYWxMYXlvdXQoKSBjb25zdAotewotICAg
IHJldHVybiB4U3RhY2suaXNFbXB0eSgpCi0gICAgICAgICYmIHlTdGFjay5pc0VtcHR5KCkKLSAg
ICAgICAgJiYgZHhTdGFjay5pc0VtcHR5KCkKLSAgICAgICAgJiYgZHlTdGFjay5pc0VtcHR5KCkK
LSAgICAgICAgJiYgYW5nbGVTdGFjay5pc0VtcHR5KCkKLSAgICAgICAgJiYgYmFzZWxpbmVTaGlm
dFN0YWNrLmlzRW1wdHkoKQotICAgICAgICAmJiBjdXJ4ID09IDAuMGYKLSAgICAgICAgJiYgY3Vy
eSA9PSAwLjBmOwotfQotCi12b2lkIFNWR0NoYXJhY3RlckxheW91dEluZm86OnByb2Nlc3NlZFNp
bmdsZUNoYXJhY3RlcigpCi17Ci0gICAgeFN0YWNrV2FsaygpOwotICAgIHlTdGFja1dhbGsoKTsK
LSAgICBkeFN0YWNrV2FsaygpOwotICAgIGR5U3RhY2tXYWxrKCk7Ci0gICAgYW5nbGVTdGFja1dh
bGsoKTsKLSAgICBiYXNlbGluZVNoaWZ0U3RhY2tXYWxrKCk7Ci19Ci0KLXZvaWQgU1ZHQ2hhcmFj
dGVyTGF5b3V0SW5mbzo6cHJvY2Vzc2VkQ2h1bmsoZmxvYXQgc2F2ZWRTaGlmdFgsIGZsb2F0IHNh
dmVkU2hpZnRZKQotewotICAgIC8vIGJhc2VsaW5lLXNoaWZ0IGRvZXNuJ3Qgc3BhbiBhY3Jvc3Mg
YW5jZXN0b3JzLCB1bmxpa2UgZHgvZHkuCi0gICAgY3VyeCArPSBzYXZlZFNoaWZ0WCAtIHNoaWZ0
eDsKLSAgICBjdXJ5ICs9IHNhdmVkU2hpZnRZIC0gc2hpZnR5OwotCi0gICAgaWYgKGluUGF0aExh
eW91dCgpKSB7Ci0gICAgICAgIHNoaWZ0eCA9IHNhdmVkU2hpZnRYOwotICAgICAgICBzaGlmdHkg
PSBzYXZlZFNoaWZ0WTsKLSAgICB9Ci0KLSAgICAvLyByb3RhdGlvbiBhbHNvIGRvZXNuJ3Qgc3Bh
bgotICAgIGFuZ2xlID0gMC4wZjsKLQotICAgIGlmICh4U3RhY2tDaGFuZ2VkKSB7Ci0gICAgICAg
IEFTU0VSVCgheFN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgIHhTdGFjay5yZW1vdmVMYXN0KCk7
Ci0gICAgICAgIHhTdGFja0NoYW5nZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoeVN0YWNr
Q2hhbmdlZCkgewotICAgICAgICBBU1NFUlQoIXlTdGFjay5pc0VtcHR5KCkpOwotICAgICAgICB5
U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICB5U3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKGR4U3RhY2tDaGFuZ2VkKSB7Ci0gICAgICAgIEFTU0VSVCghZHhTdGFjay5p
c0VtcHR5KCkpOwotICAgICAgICBkeFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgZHhTdGFj
a0NoYW5nZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZHlTdGFja0NoYW5nZWQpIHsKLSAg
ICAgICAgQVNTRVJUKCFkeVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgIGR5U3RhY2sucmVtb3Zl
TGFzdCgpOwotICAgICAgICBkeVN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGlm
IChhbmdsZVN0YWNrQ2hhbmdlZCkgewotICAgICAgICBBU1NFUlQoIWFuZ2xlU3RhY2suaXNFbXB0
eSgpKTsKLSAgICAgICAgYW5nbGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIGFuZ2xlU3Rh
Y2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGJhc2VsaW5lU2hpZnRTdGFja0No
YW5nZWQpIHsKLSAgICAgICAgQVNTRVJUKCFiYXNlbGluZVNoaWZ0U3RhY2suaXNFbXB0eSgpKTsK
LSAgICAgICAgYmFzZWxpbmVTaGlmdFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgYmFzZWxp
bmVTaGlmdFN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBTVkdDaGFyYWN0
ZXJMYXlvdXRJbmZvOjpuZXh0UGF0aExheW91dFBvaW50QW5kQW5nbGUoZmxvYXQgZ2x5cGhBZHZh
bmNlLCBmbG9hdCBleHRyYUFkdmFuY2UsIGZsb2F0IG5ld09mZnNldCkKLXsKLSAgICBpZiAobGF5
b3V0UGF0aExlbmd0aCA8PSAwLjBmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
bmV3T2Zmc2V0ICE9IEZMVF9NSU4pCi0gICAgICAgIGN1cnJlbnRPZmZzZXQgPSBzdGFydE9mZnNl
dCArIG5ld09mZnNldDsKLQotICAgIC8vIFJlc3BlY3QgdHJhbnNsYXRpb24gYWxvbmcgcGF0aCAo
ZXh0cmFBZHZhbmNlIGlzIG9ydGhvZ29uYWwgdG8gdGhlIHBhdGgpCi0gICAgY3VycmVudE9mZnNl
dCArPSBleHRyYUFkdmFuY2U7Ci0KLSAgICBmbG9hdCBvZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsg
Z2x5cGhBZHZhbmNlIC8gMi4wZjsKLSAgICBjdXJyZW50T2Zmc2V0ICs9IGdseXBoQWR2YW5jZSAr
IHBhdGhFeHRyYUFkdmFuY2U7Ci0KLSAgICBpZiAob2Zmc2V0IDwgMC4wZiB8fCBvZmZzZXQgPiBs
YXlvdXRQYXRoTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIG9rID0g
ZmFsc2U7IAotICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBsYXlvdXRQYXRoLnBvaW50QXRMZW5ndGgo
b2Zmc2V0LCBvayk7Ci0gICAgQVNTRVJUKG9rKTsKLQotICAgIGN1cnggPSBwb2ludC54KCk7Ci0g
ICAgY3VyeSA9IHBvaW50LnkoKTsKLQotICAgIGFuZ2xlID0gbGF5b3V0UGF0aC5ub3JtYWxBbmds
ZUF0TGVuZ3RoKG9mZnNldCwgb2spOwotICAgIEFTU0VSVChvayk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjppblBhdGhMYXlvdXQoKSBjb25z
dAotewotICAgIHJldHVybiBwYXRoTGF5b3V0OwotfQotCi12b2lkIFNWR0NoYXJhY3RlckxheW91
dEluZm86OnNldEluUGF0aExheW91dChib29sIHZhbHVlKQotewotICAgIHBhdGhMYXlvdXQgPSB2
YWx1ZTsKLQotICAgIHBhdGhFeHRyYUFkdmFuY2UgPSAwLjBmOwotICAgIHBhdGhUZXh0TGVuZ3Ro
ID0gMC4wZjsKLSAgICBwYXRoQ2h1bmtMZW5ndGggPSAwLjBmOwotfQotCi12b2lkIFNWR0NoYXJh
Y3RlckxheW91dEluZm86OmFkZExheW91dEluZm9ybWF0aW9uKElubGluZUZsb3dCb3gqIGZsb3dC
b3gsIGZsb2F0IHRleHRBbmNob3JTdGFydE9mZnNldCkKLXsKLSAgICBib29sIHdhc0luaXRpYWxM
YXlvdXQgPSBpc0luaXRpYWxMYXlvdXQoKTsKLQotICAgIFJlbmRlclNWR1RleHRQYXRoKiB0ZXh0
UGF0aCA9IHRvUmVuZGVyU1ZHVGV4dFBhdGgoZmxvd0JveC0+cmVuZGVyZXIoKSk7Ci0gICAgUGF0
aCBwYXRoID0gdGV4dFBhdGgtPmxheW91dFBhdGgoKTsKLQotICAgIGZsb2F0IGJhc2VsaW5lU2hp
ZnQgPSBjYWxjdWxhdGVCYXNlbGluZVNoaWZ0KHRleHRQYXRoKTsKLQotICAgIGxheW91dFBhdGgg
PSBwYXRoOwotICAgIGxheW91dFBhdGhMZW5ndGggPSBwYXRoLmxlbmd0aCgpOwotCi0gICAgaWYg
KGxheW91dFBhdGhMZW5ndGggPD0gMC4wZikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhcnRP
ZmZzZXQgPSB0ZXh0UGF0aC0+c3RhcnRPZmZzZXQoKTsKLQotICAgIGlmICh0ZXh0UGF0aC0+c3Rh
cnRPZmZzZXQoKSA+PSAwLjBmICYmIHRleHRQYXRoLT5zdGFydE9mZnNldCgpIDw9IDEuMGYpCi0g
ICAgICAgIHN0YXJ0T2Zmc2V0ICo9IGxheW91dFBhdGhMZW5ndGg7Ci0KLSAgICBzdGFydE9mZnNl
dCArPSB0ZXh0QW5jaG9yU3RhcnRPZmZzZXQ7Ci0gICAgY3VycmVudE9mZnNldCA9IHN0YXJ0T2Zm
c2V0OwotCi0gICAgLy8gT25seSBiYXNlbGluZS1zaGlmdCBpcyBoYW5kbGVkIHRocm91Z2ggdGhl
IG5vcm1hbCBsYXlvdXQgc3lzdGVtCi0gICAgYWRkU3RhY2tDb250ZW50KEJhc2VsaW5lU2hpZnRT
dGFjaywgYmFzZWxpbmVTaGlmdCk7Ci0KLSAgICBpZiAod2FzSW5pdGlhbExheW91dCkgewotICAg
ICAgICB4U3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIHlTdGFja0NoYW5nZWQgPSBmYWxz
ZTsKLSAgICAgICAgZHhTdGFja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZHlTdGFja0NoYW5n
ZWQgPSBmYWxzZTsKLSAgICAgICAgYW5nbGVTdGFja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAg
YmFzZWxpbmVTaGlmdFN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBTVkdD
aGFyYWN0ZXJMYXlvdXRJbmZvOjphZGRMYXlvdXRJbmZvcm1hdGlvbihTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50KiBlbGVtZW50KQotewotICAgIGJvb2wgd2FzSW5pdGlhbExheW91dCA9IGlzSW5p
dGlhbExheW91dCgpOwotICAgIGZsb2F0IGJhc2VsaW5lU2hpZnQgPSBjYWxjdWxhdGVCYXNlbGlu
ZVNoaWZ0KGVsZW1lbnQtPnJlbmRlcmVyKCkpOwotCi0gICAgYWRkU3RhY2tDb250ZW50KFhTdGFj
aywgZWxlbWVudC0+eCgpLCBlbGVtZW50KTsKLSAgICBhZGRTdGFja0NvbnRlbnQoWVN0YWNrLCBl
bGVtZW50LT55KCksIGVsZW1lbnQpOwotICAgIGFkZFN0YWNrQ29udGVudChEeFN0YWNrLCBlbGVt
ZW50LT5keCgpLCBlbGVtZW50KTsKLSAgICBhZGRTdGFja0NvbnRlbnQoRHlTdGFjaywgZWxlbWVu
dC0+ZHkoKSwgZWxlbWVudCk7Ci0gICAgYWRkU3RhY2tDb250ZW50KEFuZ2xlU3RhY2ssIGVsZW1l
bnQtPnJvdGF0ZSgpKTsKLSAgICBhZGRTdGFja0NvbnRlbnQoQmFzZWxpbmVTaGlmdFN0YWNrLCBi
YXNlbGluZVNoaWZ0KTsKLQotICAgIGlmICh3YXNJbml0aWFsTGF5b3V0KSB7Ci0gICAgICAgIHhT
dGFja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgeVN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAg
ICAgICBkeFN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBkeVN0YWNrQ2hhbmdlZCA9IGZh
bHNlOwotICAgICAgICBhbmdsZVN0YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBiYXNlbGlu
ZVNoaWZ0U3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFNWR0NoYXJhY3Rl
ckxheW91dEluZm86OmFkZFN0YWNrQ29udGVudChTdGFja1R5cGUgdHlwZSwgU1ZHTnVtYmVyTGlz
dCogbGlzdCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBsaXN0LT5udW1iZXJPZkl0ZW1zKCk7
Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uZWRGbG9h
dFZlY3RvciBuZXdMYXlvdXRJbmZvOwotCi0gICAgLy8gVE9ETzogQ29udmVydCBtb3JlIGVmZmlj
aWVudGx5IQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBmbG9hdCB2YWx1ZSA9IGxpc3QtPmdldEl0
ZW0oaSwgZWMpOwotICAgICAgICBBU1NFUlQoIWVjKTsKLQotICAgICAgICBuZXdMYXlvdXRJbmZv
LmFwcGVuZCh2YWx1ZSk7Ci0gICAgfQotCi0gICAgYWRkU3RhY2tDb250ZW50KHR5cGUsIG5ld0xh
eW91dEluZm8pOwotfQotCi12b2lkIFNWR0NoYXJhY3RlckxheW91dEluZm86OmFkZFN0YWNrQ29u
dGVudChTdGFja1R5cGUgdHlwZSwgU1ZHTGVuZ3RoTGlzdCogbGlzdCwgY29uc3QgU1ZHRWxlbWVu
dCogY29udGV4dCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBsaXN0LT5udW1iZXJPZkl0ZW1z
KCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uZWRG
bG9hdFZlY3RvciBuZXdMYXlvdXRJbmZvOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGZsb2F0
IHZhbHVlID0gbGlzdC0+Z2V0SXRlbShpLCBlYykudmFsdWUoY29udGV4dCk7Ci0gICAgICAgIEFT
U0VSVCghZWMpOwotCi0gICAgICAgIG5ld0xheW91dEluZm8uYXBwZW5kKHZhbHVlKTsKLSAgICB9
Ci0KLSAgICBhZGRTdGFja0NvbnRlbnQodHlwZSwgbmV3TGF5b3V0SW5mbyk7Ci19Ci0KLXZvaWQg
U1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6YWRkU3RhY2tDb250ZW50KFN0YWNrVHlwZSB0eXBlLCBj
b25zdCBQb3NpdGlvbmVkRmxvYXRWZWN0b3ImIGxpc3QpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgY2FzZSBYU3RhY2s6Ci0gICAgICAgIHhTdGFja0NoYW5nZWQgPSB0cnVlOwotICAgICAg
ICB4U3RhY2suYXBwZW5kKGxpc3QpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFlTdGFjazoK
LSAgICAgICAgeVN0YWNrQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIHlTdGFjay5hcHBlbmQobGlz
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRHhTdGFjazoKLSAgICAgICAgZHhTdGFja0No
YW5nZWQgPSB0cnVlOwotICAgICAgICBkeFN0YWNrLmFwcGVuZChsaXN0KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBEeVN0YWNrOgotICAgICAgICBkeVN0YWNrQ2hhbmdlZCA9IHRydWU7Ci0g
ICAgICAgIGR5U3RhY2suYXBwZW5kKGxpc3QpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFu
Z2xlU3RhY2s6Ci0gICAgICAgIGFuZ2xlU3RhY2tDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgYW5n
bGVTdGFjay5hcHBlbmQobGlzdCk7Ci0gICAgICAgIGJyZWFrOyAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHQ2hhcmFjdGVy
TGF5b3V0SW5mbzo6YWRkU3RhY2tDb250ZW50KFN0YWNrVHlwZSB0eXBlLCBmbG9hdCB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUgPT0gMC4wZikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgY2FzZSBCYXNlbGluZVNoaWZ0U3RhY2s6Ci0gICAgICAgIGJhc2VsaW5l
U2hpZnRTdGFja0NoYW5nZWQgPSB0cnVlOwotICAgICAgICBiYXNlbGluZVNoaWZ0U3RhY2suYXBw
ZW5kKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFNWR0NoYXJhY3RlckxheW91dEluZm86
OnhTdGFja1dhbGsoKQotewotICAgIHVuc2lnbmVkIGkgPSAxOwotCi0gICAgd2hpbGUgKCF4U3Rh
Y2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBvc2l0aW9uZWRGbG9hdFZlY3RvciYgY3VyID0geFN0
YWNrLmxhc3QoKTsKLSAgICAgICAgaWYgKGkgKyBjdXIucG9zaXRpb24oKSA8IGN1ci5zaXplKCkp
IHsKLSAgICAgICAgICAgIGN1ci5hZHZhbmNlKGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpICs9IGN1ci5wb3NpdGlvbigpOwotICAgICAgICB4U3RhY2sucmVt
b3ZlTGFzdCgpOwotICAgICAgICB4U3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAgfQotfQotCi12
b2lkIFNWR0NoYXJhY3RlckxheW91dEluZm86OnlTdGFja1dhbGsoKQotewotICAgIHVuc2lnbmVk
IGkgPSAxOwotCi0gICAgd2hpbGUgKCF5U3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBvc2l0
aW9uZWRGbG9hdFZlY3RvciYgY3VyID0geVN0YWNrLmxhc3QoKTsKLSAgICAgICAgaWYgKGkgKyBj
dXIucG9zaXRpb24oKSA8IGN1ci5zaXplKCkpIHsKLSAgICAgICAgICAgIGN1ci5hZHZhbmNlKGkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpICs9IGN1ci5wb3Np
dGlvbigpOwotICAgICAgICB5U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICB5U3RhY2tDaGFu
Z2VkID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFNWR0NoYXJhY3RlckxheW91dEluZm86OmR4
U3RhY2tXYWxrKCkKLXsKLSAgICB1bnNpZ25lZCBpID0gMTsKLQotICAgIHdoaWxlICghZHhTdGFj
ay5pc0VtcHR5KCkpIHsKLSAgICAgICAgUG9zaXRpb25lZEZsb2F0VmVjdG9yJiBjdXIgPSBkeFN0
YWNrLmxhc3QoKTsKLSAgICAgICAgaWYgKGkgKyBjdXIucG9zaXRpb24oKSA8IGN1ci5zaXplKCkp
IHsKLSAgICAgICAgICAgIGN1ci5hZHZhbmNlKGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpICs9IGN1ci5wb3NpdGlvbigpOwotICAgICAgICBkeFN0YWNrLnJl
bW92ZUxhc3QoKTsKLSAgICAgICAgZHhTdGFja0NoYW5nZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0K
LXZvaWQgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6ZHlTdGFja1dhbGsoKQotewotICAgIHVuc2ln
bmVkIGkgPSAxOwotCi0gICAgd2hpbGUgKCFkeVN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBQ
b3NpdGlvbmVkRmxvYXRWZWN0b3ImIGN1ciA9IGR5U3RhY2subGFzdCgpOwotICAgICAgICBpZiAo
aSArIGN1ci5wb3NpdGlvbigpIDwgY3VyLnNpemUoKSkgewotICAgICAgICAgICAgY3VyLmFkdmFu
Y2UoaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGkgKz0gY3Vy
LnBvc2l0aW9uKCk7Ci0gICAgICAgIGR5U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBkeVN0
YWNrQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBTVkdDaGFyYWN0ZXJMYXlvdXRJ
bmZvOjphbmdsZVN0YWNrV2FsaygpCi17Ci0gICAgdW5zaWduZWQgaSA9IDE7Ci0KLSAgICB3aGls
ZSAoIWFuZ2xlU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBvc2l0aW9uZWRGbG9hdFZlY3Rv
ciYgY3VyID0gYW5nbGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIGlmIChpICsgY3VyLnBvc2l0aW9u
KCkgPCBjdXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjdXIuYWR2YW5jZShpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaSArPSBjdXIucG9zaXRpb24oKTsKLSAg
ICAgICAgYW5nbGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIGFuZ2xlU3RhY2tDaGFuZ2Vk
ID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFNWR0NoYXJhY3RlckxheW91dEluZm86OmJhc2Vs
aW5lU2hpZnRTdGFja1dhbGsoKQotewotICAgIGlmICghYmFzZWxpbmVTaGlmdFN0YWNrLmlzRW1w
dHkoKSkgewotICAgICAgICBiYXNlbGluZVNoaWZ0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAg
ICBiYXNlbGluZVNoaWZ0U3RhY2tDaGFuZ2VkID0gZmFsc2U7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uaAkocmV2aXNpb24gNjg4NjcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFNWR0NoYXJhY3RlckxheW91
dEluZm9faAotI2RlZmluZSBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvX2gKLQotI2lmIEVOQUJMRShT
VkcpCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElubGlu
ZUZsb3dCb3g7Ci1jbGFzcyBTVkdFbGVtZW50OwotY2xhc3MgU1ZHTGVuZ3RoTGlzdDsKLWNsYXNz
IFNWR051bWJlckxpc3Q7Ci1jbGFzcyBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OwotCi10ZW1w
bGF0ZTxjbGFzcyBUeXBlPgotY2xhc3MgUG9zaXRpb25lZFZlY3RvciA6IHB1YmxpYyBWZWN0b3I8
VHlwZT4gewotcHVibGljOgotICAgIFBvc2l0aW9uZWRWZWN0b3I8VHlwZT4oKQotICAgICAgICA6
IG1fcG9zaXRpb24oMCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcG9zaXRpb24oKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcG9zaXRpb247Ci0gICAgfQotCi0gICAgdm9p
ZCBhZHZhbmNlKHVuc2lnbmVkIHBvc2l0aW9uKQotICAgIHsKLSAgICAgICAgbV9wb3NpdGlvbiAr
PSBwb3NpdGlvbjsKLSAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gPCBWZWN0b3I8VHlwZT46OnNp
emUoKSk7Ci0gICAgfQotCi0gICAgVHlwZSB2YWx1ZUF0Q3VycmVudFBvc2l0aW9uKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3Bvc2l0aW9uIDwgVmVjdG9yPFR5cGU+OjpzaXplKCkp
OwotICAgICAgICByZXR1cm4gVmVjdG9yPFR5cGU+OjphdChtX3Bvc2l0aW9uKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKLX07Ci0KLWNsYXNzIFBvc2l0aW9u
ZWRGbG9hdFZlY3RvciA6IHB1YmxpYyBQb3NpdGlvbmVkVmVjdG9yPGZsb2F0PiB7IH07Ci1zdHJ1
Y3QgU1ZHQ2hhcjsKLQotc3RydWN0IFNWR0NoYXJhY3RlckxheW91dEluZm8gewotICAgIFNWR0No
YXJhY3RlckxheW91dEluZm8oKTsKLQotICAgIGVudW0gU3RhY2tUeXBlIHsgWFN0YWNrLCBZU3Rh
Y2ssIER4U3RhY2ssIER5U3RhY2ssIEFuZ2xlU3RhY2ssIEJhc2VsaW5lU2hpZnRTdGFjayB9Owot
Ci0gICAgYm9vbCB4VmFsdWVBdmFpbGFibGUoKSBjb25zdDsKLSAgICBib29sIHlWYWx1ZUF2YWls
YWJsZSgpIGNvbnN0OwotICAgIGJvb2wgZHhWYWx1ZUF2YWlsYWJsZSgpIGNvbnN0OwotICAgIGJv
b2wgZHlWYWx1ZUF2YWlsYWJsZSgpIGNvbnN0OwotICAgIGJvb2wgYW5nbGVWYWx1ZUF2YWlsYWJs
ZSgpIGNvbnN0OwotICAgIGJvb2wgYmFzZWxpbmVTaGlmdFZhbHVlQXZhaWxhYmxlKCkgY29uc3Q7
Ci0KLSAgICBmbG9hdCB4VmFsdWVOZXh0KCkgY29uc3Q7Ci0gICAgZmxvYXQgeVZhbHVlTmV4dCgp
IGNvbnN0OwotICAgIGZsb2F0IGR4VmFsdWVOZXh0KCkgY29uc3Q7Ci0gICAgZmxvYXQgZHlWYWx1
ZU5leHQoKSBjb25zdDsKLSAgICBmbG9hdCBhbmdsZVZhbHVlTmV4dCgpIGNvbnN0OwotICAgIGZs
b2F0IGJhc2VsaW5lU2hpZnRWYWx1ZU5leHQoKSBjb25zdDsKLQotICAgIHZvaWQgcHJvY2Vzc2Vk
Q2h1bmsoZmxvYXQgc2F2ZWRTaGlmdFgsIGZsb2F0IHNhdmVkU2hpZnRZKTsKLSAgICB2b2lkIHBy
b2Nlc3NlZFNpbmdsZUNoYXJhY3RlcigpOwotCi0gICAgYm9vbCBuZXh0UGF0aExheW91dFBvaW50
QW5kQW5nbGUoZmxvYXQgZ2x5cGhBZHZhbmNlLCBmbG9hdCBleHRyYUFkdmFuY2UsIGZsb2F0IG5l
d09mZnNldCk7Ci0KLSAgICAvLyBVc2VkIGZvciB0ZXh0LW9uLXBhdGguCi0gICAgdm9pZCBhZGRM
YXlvdXRJbmZvcm1hdGlvbihJbmxpbmVGbG93Qm94KiwgZmxvYXQgdGV4dEFuY2hvck9mZnNldCA9
IDAuMGYpOwotCi0gICAgYm9vbCBpblBhdGhMYXlvdXQoKSBjb25zdDsKLSAgICB2b2lkIHNldElu
UGF0aExheW91dChib29sIHZhbHVlKTsKLQotICAgIC8vIFVzZWQgZm9yIGFueXRoaW5nIGVsc2Uu
Ci0gICAgdm9pZCBhZGRMYXlvdXRJbmZvcm1hdGlvbihTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
Kik7Ci0KLSAgICAvLyBHbG9iYWwgcG9zaXRpb24KLSAgICBmbG9hdCBjdXJ4OwotICAgIGZsb2F0
IGN1cnk7Ci0KLSAgICAvLyBHbG9iYWwgcm90YXRpb24KLSAgICBmbG9hdCBhbmdsZTsKLQotICAg
IC8vIEFjY3VtdWxhdGVkIGR4L2R5IHZhbHVlcwotICAgIGZsb2F0IGR4OwotICAgIGZsb2F0IGR5
OwotCi0gICAgLy8gQWNjdW11bGF0ZWQgYmFzZWxpbmUtc2hpZnQgdmFsdWVzCi0gICAgZmxvYXQg
c2hpZnR4OwotICAgIGZsb2F0IHNoaWZ0eTsKLQotICAgIC8vIFBhdGggc3BlY2lmaWMgYWR2YW5j
ZSB2YWx1ZXMgdG8gaGFuZGxlIGxlbmd0aEFkanVzdAotICAgIGZsb2F0IHBhdGhFeHRyYUFkdmFu
Y2U7Ci0gICAgZmxvYXQgcGF0aFRleHRMZW5ndGg7Ci0gICAgZmxvYXQgcGF0aENodW5rTGVuZ3Ro
OwotCi0gICAgLy8gUmVzdWx0IHZlY3RvcgotICAgIFZlY3RvcjxTVkdDaGFyPiBzdmdDaGFyczsK
LSAgICBib29sIG5leHREcmF3blNlcGVyYXRlZCA6IDE7Ci0KLXByaXZhdGU6Ci0gICAgLy8gVXNl
ZCBmb3IgYmFzZWxpbmUtc2hpZnQuCi0gICAgdm9pZCBhZGRTdGFja0NvbnRlbnQoU3RhY2tUeXBl
LCBmbG9hdCk7Ci0KLSAgICAvLyBVc2VkIGZvciBhbmdsZS4KLSAgICB2b2lkIGFkZFN0YWNrQ29u
dGVudChTdGFja1R5cGUsIFNWR051bWJlckxpc3QqKTsKLQotICAgIC8vIFVzZWQgZm9yIHgveS9k
eC9keS4gICAgCi0gICAgdm9pZCBhZGRTdGFja0NvbnRlbnQoU3RhY2tUeXBlLCBTVkdMZW5ndGhM
aXN0KiwgY29uc3QgU1ZHRWxlbWVudCopOwotCi0gICAgdm9pZCBhZGRTdGFja0NvbnRlbnQoU3Rh
Y2tUeXBlLCBjb25zdCBQb3NpdGlvbmVkRmxvYXRWZWN0b3ImKTsKLQotICAgIHZvaWQgeFN0YWNr
V2FsaygpOwotICAgIHZvaWQgeVN0YWNrV2FsaygpOwotICAgIHZvaWQgZHhTdGFja1dhbGsoKTsK
LSAgICB2b2lkIGR5U3RhY2tXYWxrKCk7Ci0gICAgdm9pZCBhbmdsZVN0YWNrV2FsaygpOwotICAg
IHZvaWQgYmFzZWxpbmVTaGlmdFN0YWNrV2FsaygpOwotCi0gICAgYm9vbCBpc0luaXRpYWxMYXlv
dXQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBib29sIHhTdGFja0NoYW5nZWQgOiAxOwotICAg
IGJvb2wgeVN0YWNrQ2hhbmdlZCA6IDE7Ci0gICAgYm9vbCBkeFN0YWNrQ2hhbmdlZCA6IDE7Ci0g
ICAgYm9vbCBkeVN0YWNrQ2hhbmdlZCA6IDE7Ci0gICAgYm9vbCBhbmdsZVN0YWNrQ2hhbmdlZCA6
IDE7Ci0gICAgYm9vbCBiYXNlbGluZVNoaWZ0U3RhY2tDaGFuZ2VkIDogMTsKLQotICAgIC8vIHRl
eHQgb24gcGF0aCBsYXlvdXQKLSAgICBib29sIHBhdGhMYXlvdXQgOiAxOwotICAgIGZsb2F0IGN1
cnJlbnRPZmZzZXQ7Ci0gICAgZmxvYXQgc3RhcnRPZmZzZXQ7Ci0gICAgZmxvYXQgbGF5b3V0UGF0
aExlbmd0aDsKLSAgICBQYXRoIGxheW91dFBhdGg7Ci0KLSAgICBWZWN0b3I8UG9zaXRpb25lZEZs
b2F0VmVjdG9yPiB4U3RhY2s7Ci0gICAgVmVjdG9yPFBvc2l0aW9uZWRGbG9hdFZlY3Rvcj4geVN0
YWNrOwotICAgIFZlY3RvcjxQb3NpdGlvbmVkRmxvYXRWZWN0b3I+IGR4U3RhY2s7Ci0gICAgVmVj
dG9yPFBvc2l0aW9uZWRGbG9hdFZlY3Rvcj4gZHlTdGFjazsKLSAgICBWZWN0b3I8UG9zaXRpb25l
ZEZsb2F0VmVjdG9yPiBhbmdsZVN0YWNrOwotICAgIFZlY3RvcjxmbG9hdD4gYmFzZWxpbmVTaGlm
dFN0YWNrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykKLSNlbmRpZiAvLyBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvX2gKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA2ODg2NykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAi
U1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIK
ICNpbmNsdWRlICJTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYXR0
ZXJuRWxlbWVudC5oIgpAQCAtNjUsNyArNjQsNiBAQAogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVC
b3guaCIKICNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgiCiAKICNpbmNsdWRl
IDxtYXRoLmg+CiAKQEAgLTM4NywxMTYgKzM4NSw3MiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtCiBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlclNWR1RleHRCb3goVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckJsb2NrJiB0ZXh0KQogewogICAgIFNWR1Jvb3RJbmxp
bmVCb3gqIGJveCA9IHN0YXRpY19jYXN0PFNWR1Jvb3RJbmxpbmVCb3gqPih0ZXh0LmZpcnN0Um9v
dEJveCgpKTsKLQogICAgIGlmICghYm94KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8
U1ZHVGV4dENodW5rPiYgY2h1bmtzID0gY29uc3RfY2FzdDxWZWN0b3I8U1ZHVGV4dENodW5rPiYg
Pihib3gtPnN2Z1RleHRDaHVua3MoKSk7Ci0gICAgdHMgPDwgIiBhdCAoIiA8PCB0ZXh0LngoKSA8
PCAiLCIgPDwgdGV4dC55KCkgPDwgIikgc2l6ZSAiIDw8IGJveC0+bG9naWNhbFdpZHRoKCkgPDwg
IngiIDw8IGJveC0+bG9naWNhbEhlaWdodCgpIDw8ICIgY29udGFpbnMgIiA8PCBjaHVua3Muc2l6
ZSgpIDw8ICIgY2h1bmsocykiOworICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54KCkgPDwgIiwi
IDw8IHRleHQueSgpIDw8ICIpIHNpemUgIiA8PCBib3gtPmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8
PCBib3gtPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
aGFjaywgb25jZSB0aGUgbmV3IHRleHQgbGF5b3V0IGVuZ2luZSBpcyBjb21wbGV0bHkgbGFuZGVk
LiBXZSB3YW50IHRvIHByZXNlcnZlIHRoZSBvbGQgbGF5b3V0IHRlc3QgcmVzdWx0cyBmb3Igbm93
LgorICAgIHRzIDw8ICIgY29udGFpbnMgMSBjaHVuayhzKSI7CiAKICAgICBpZiAodGV4dC5wYXJl
bnQoKSAmJiAodGV4dC5wYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpICE9IHRleHQuc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpKSkKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3Ii
LCB0ZXh0LnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5u
YW1lKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNJbmxpbmVUZXh0Qm94KFNW
R1RleHRDaHVuayYgY2h1bmssIFNWR0lubGluZVRleHRCb3gqIGJveCkKLXsKLSAgICBWZWN0b3I8
U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+OjppdGVyYXRvciBib3hJdCA9IGNodW5rLmJveGVz
LmJlZ2luKCk7Ci0gICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0
b3IgYm94RW5kID0gY2h1bmsuYm94ZXMuZW5kKCk7Ci0KLSAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgZm9yICg7IGJveEl0ICE9IGJveEVuZDsgKytib3hJdCkgewotICAgICAgICBTVkdJbmxp
bmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94SXQ7Ci0KLSAgICAgICAgaWYgKGJveCA9
PSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4ocmFuZ2UuYm94KSkgewotICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gZm91bmQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVNWR0lubGlu
ZVRleHRCb3goVGV4dFN0cmVhbSYgdHMsIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGludCBp
bmRlbnQpCiB7Ci0gICAgU1ZHUm9vdElubGluZUJveCogcm9vdEJveCA9IHRleHRCb3gtPnN2Z1Jv
b3RJbmxpbmVCb3goKTsKLSAgICBpZiAoIXJvb3RCb3gpCisgICAgVmVjdG9yPFNWR1RleHRGcmFn
bWVudD4mIGZyYWdtZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKyAgICBpZiAoZnJh
Z21lbnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFNWR1RleHRD
aHVuaz4mIGNodW5rcyA9IGNvbnN0X2Nhc3Q8VmVjdG9yPFNWR1RleHRDaHVuaz4mID4ocm9vdEJv
eC0+c3ZnVGV4dENodW5rcygpKTsKLQotICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+OjppdGVyYXRv
ciBpdCA9IGNodW5rcy5iZWdpbigpOwotICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+OjppdGVyYXRv
ciBlbmQgPSBjaHVua3MuZW5kKCk7CisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRl
cmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHRleHRCb3gtPnRleHRSZW5kZXJlcigpKTsKKyAg
ICBBU1NFUlQodGV4dFJlbmRlcmVyKTsKIAotICAgIC8vIFdyaXRlIHRleHQgY2h1bmtzCi0gICAg
dW5zaWduZWQgaW50IGkgPSAxOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgU1ZHVGV4dENodW5rJiBjdXIgPSAqaXQ7Ci0KLSAgICAgICAgLy8gV3JpdGUgaW5saW5lIGJv
eCBjaGFyYWN0ZXIgcmFuZ2VzCi0gICAgICAgIFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJS
YW5nZT46Oml0ZXJhdG9yIGJveEl0ID0gY3VyLmJveGVzLmJlZ2luKCk7Ci0gICAgICAgIFZlY3Rv
cjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGJveEVuZCA9IGN1ci5ib3hl
cy5lbmQoKTsKLQotICAgICAgICBpZiAoIWNvbnRhaW5zSW5saW5lVGV4dEJveChjdXIsIHRleHRC
b3gpKSB7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQorICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHRleHRSZW5kZXJlci0+c3R5
bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBTdHJpbmcgdGV4dCA9IHRleHRCb3gtPnRleHRSZW5kZXJl
cigpLT50ZXh0KCk7CiAKKyAgICB1bnNpZ25lZCBmcmFnbWVudHNTaXplID0gZnJhZ21lbnRzLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRzU2l6ZTsgKytpKSB7
CisgICAgICAgIFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7CiAg
ICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKIAotICAgICAgICB1bnNpZ25lZCBp
bnQgaiA9IDE7Ci0gICAgICAgIHRzIDw8ICJjaHVuayAiIDw8IGkgPDwgIiAiOworICAgICAgICB1
bnNpZ25lZCBzdGFydE9mZnNldCA9IGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldDsKKyAgICAg
ICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0ICsgZnJh
Z21lbnQubGVuZ3RoOwogCi0gICAgICAgIGlmIChjdXIuYW5jaG9yID09IFRBX01JRERMRSkgewor
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjaywgb25jZSB0aGUgbmV3IHRleHQgbGF5
b3V0IGVuZ2luZSBpcyBjb21wbGV0bHkgbGFuZGVkLiBXZSB3YW50IHRvIHByZXNlcnZlIHRoZSBv
bGQgbGF5b3V0IHRlc3QgcmVzdWx0cyBmb3Igbm93LgorICAgICAgICB0cyA8PCAiY2h1bmsgMSAi
OworICAgICAgICBFVGV4dEFuY2hvciBhbmNob3IgPSBzdmdTdHlsZS0+dGV4dEFuY2hvcigpOwor
ICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gc3ZnU3R5bGUtPmlzVmVydGljYWxXcml0aW5n
TW9kZSgpOworICAgICAgICBpZiAoYW5jaG9yID09IFRBX01JRERMRSkgewogICAgICAgICAgICAg
dHMgPDwgIihtaWRkbGUgYW5jaG9yIjsKLSAgICAgICAgICAgIGlmIChjdXIuaXNWZXJ0aWNhbFRl
eHQpCisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCiAgICAgICAgICAgICAgICAgdHMg
PDwgIiwgdmVydGljYWwiOwogICAgICAgICAgICAgdHMgPDwgIikgIjsKLSAgICAgICAgfSBlbHNl
IGlmIChjdXIuYW5jaG9yID09IFRBX0VORCkgeworICAgICAgICB9IGVsc2UgaWYgKGFuY2hvciA9
PSBUQV9FTkQpIHsKICAgICAgICAgICAgIHRzIDw8ICIoZW5kIGFuY2hvciI7Ci0gICAgICAgICAg
ICBpZiAoY3VyLmlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0
KQogICAgICAgICAgICAgICAgIHRzIDw8ICIsIHZlcnRpY2FsIjsKICAgICAgICAgICAgIHRzIDw8
ICIpICI7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VyLmlzVmVydGljYWxUZXh0KQorICAgICAgICB9
IGVsc2UgaWYgKGlzVmVydGljYWxUZXh0KQogICAgICAgICAgICAgdHMgPDwgIih2ZXJ0aWNhbCkg
IjsKKyAgICAgICAgc3RhcnRPZmZzZXQgLT0gdGV4dEJveC0+c3RhcnQoKTsKKyAgICAgICAgZW5k
T2Zmc2V0IC09IHRleHRCb3gtPnN0YXJ0KCk7CisgICAgICAgIC8vIDwvaGFjaz4KKworICAgICAg
ICB0cyA8PCAidGV4dCBydW4gIiA8PCBpICsgMSA8PCAiIGF0ICgiIDw8IGZyYWdtZW50LnggPDwg
IiwiIDw8IGZyYWdtZW50LnkgPDwgIikiOworICAgICAgICB0cyA8PCAiIHN0YXJ0T2Zmc2V0ICIg
PDwgc3RhcnRPZmZzZXQgPDwgIiBlbmRPZmZzZXQgIiA8PCBlbmRPZmZzZXQ7CisgICAgICAgIGlm
IChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgIHRzIDw8ICIgaGVpZ2h0ICIgPDwgZnJhZ21l
bnQuaGVpZ2h0OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cyA8PCAiIHdpZHRoICIgPDwg
ZnJhZ21lbnQud2lkdGg7CiAKLSAgICAgICAgdW5zaWduZWQgaW50IHRvdGFsT2Zmc2V0ID0gMDsK
LQotICAgICAgICBmb3IgKDsgYm94SXQgIT0gYm94RW5kOyArK2JveEl0KSB7Ci0gICAgICAgICAg
ICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94SXQ7Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSByYW5nZS5lbmRPZmZzZXQgLSByYW5nZS5zdGFydE9m
ZnNldDsKLSAgICAgICAgICAgIEFTU0VSVChjdXIuc3RhcnQgKyB0b3RhbE9mZnNldCA8PSBjdXIu
ZW5kKTsKLSAgICAKLSAgICAgICAgICAgIHRvdGFsT2Zmc2V0ICs9IG9mZnNldDsKLSAgICAgIAot
ICAgICAgICAgICAgaWYgKHRleHRCb3ggIT0gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+
KHJhbmdlLmJveCkpIHsKLSAgICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gIAotICAgICAgICAgICAgRmxvYXRQb2ludCB0b3BMZWZ0
ID0gdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShjdXIuc3RhcnQgKyB0b3RhbE9mZnNl
dCAtIG9mZnNldCwgY3VyLnN0YXJ0ICsgdG90YWxPZmZzZXQpOwotCi0gICAgICAgICAgICB0cyA8
PCAidGV4dCBydW4gIiA8PCBqIDw8ICIgYXQgKCIgPDwgdG9wTGVmdC54KCkgPDwgIiwiIDw8IHRv
cExlZnQueSgpIDw8ICIpICI7Ci0gICAgICAgICAgICB0cyA8PCAic3RhcnRPZmZzZXQgIiA8PCBy
YW5nZS5zdGFydE9mZnNldCA8PCAiIGVuZE9mZnNldCAiIDw8IHJhbmdlLmVuZE9mZnNldDsKLQot
ICAgICAgICAgICAgaWYgKGN1ci5pc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICB0cyA8
PCAiIGhlaWdodCAiIDw8IGN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJveENoYXJhY3RlclJhbmdl
KHJhbmdlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0cyA8PCAiIHdpZHRo
ICIgPDwgY3VtbXVsYXRlZFdpZHRoT2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShyYW5nZSk7Ci0K
LSAgICAgICAgICAgIGlmICghdGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHRl
eHRCb3gtPm1fZGlyT3ZlcnJpZGUpIHsKLSAgICAgICAgICAgICAgICB0cyA8PCAoIXRleHRCb3gt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/ICIgUlRMIiA6ICIgTFRSIik7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAodGV4dEJveC0+bV9kaXJPdmVycmlkZSkKLSAgICAgICAgICAgICAgICAgICAg
dHMgPDwgIiBvdmVycmlkZSI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRzIDw8ICI6
ICIgPDwgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKFN0cmluZyh0ZXh0Qm94LT50ZXh0UmVu
ZGVyZXIoKS0+dGV4dCgpKS5zdWJzdHJpbmcodGV4dEJveC0+c3RhcnQoKSArIHJhbmdlLnN0YXJ0
T2Zmc2V0LCBvZmZzZXQpKSA8PCAiXG4iOwotCi0gICAgICAgICAgICBqKys7CisgICAgICAgIGlm
ICghdGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHRleHRCb3gtPm1fZGlyT3Zl
cnJpZGUpIHsKKyAgICAgICAgICAgIHRzIDw8ICh0ZXh0Qm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyAiIExUUiIgOiAiIFJUTCIpOworICAgICAgICAgICAgaWYgKHRleHRCb3gtPm1fZGly
T3ZlcnJpZGUpCisgICAgICAgICAgICAgICAgdHMgPDwgIiBvdmVycmlkZSI7CiAgICAgICAgIH0K
IAotICAgICAgICBpKys7CisgICAgICAgIHRzIDw8ICI6ICIgPDwgcXVvdGVBbmRFc2NhcGVOb25Q
cmludGFibGVzKHRleHQuc3Vic3RyaW5nKGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCwgZnJh
Z21lbnQubGVuZ3RoKSkgPDwgIlxuIjsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uY3BwCShyZXZpc2lvbiA2ODg2NykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQ5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR1RleHRDaHVua0xheW91dEluZm8uaCIKLQotI2lmIEVO
QUJMRShTVkcpCi0jaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgotI2luY2x1ZGUgIlNWR0lubGlu
ZVRleHRCb3guaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotCi0vLyBUZXh0IGNodW5r
IGNyZWF0aW9uIGlzIGNvbXBsZXggYW5kIHRoZSB3aG9sZSBwcm9jZXNzCi0vLyBjYW4gZWFzaWx5
IGJlIHRyYWNlZCBieSBzZXR0aW5nIHRoaXMgdmFyaWFibGUgPiAwLgotI2RlZmluZSBERUJVR19D
SFVOS19CVUlMRElORyAwCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGZsb2F0IGN1
bW11bGF0ZWRXaWR0aE9ySGVpZ2h0T2ZUZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVuaywgYm9v
bCBjYWxjV2lkdGhPbmx5KQotewotICAgIGZsb2F0IGxlbmd0aCA9IDAuMGY7Ci0gICAgVmVjdG9y
PFNWR0NoYXI+OjppdGVyYXRvciBjaGFySXQgPSBjaHVuay5zdGFydDsKLQotICAgIFZlY3RvcjxT
VkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGl0ID0gY2h1bmsuYm94ZXMuYmVn
aW4oKTsKLSAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+OjppdGVyYXRvciBl
bmQgPSBjaHVuay5ib3hlcy5lbmQoKTsKLQotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlID0gKml0OwotCi0gICAg
ICAgIFNWR0lubGluZVRleHRCb3gqIGJveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gq
PihyYW5nZS5ib3gpOwotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBib3gtPnJlbmRlcmVy
KCktPnN0eWxlKCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IHJhbmdlLnN0YXJ0T2Zmc2V0OyBp
IDwgcmFuZ2UuZW5kT2Zmc2V0OyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVChjaGFySXQgPD0g
Y2h1bmsuZW5kKTsKLQotICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGhvdyBtYW55IGNoYXJhY3Rl
cnMgLSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IC0gY2FuIGJlIG1lYXN1cmVkIGF0IG9uY2Uu
Ci0gICAgICAgICAgICAvLyBJbXBvcnRhbnQgZm9yIG5vbi1hYnNvbHV0ZSBwb3NpdGlvbmVkIG5v
bi1sYXRpbjEgdGV4dCAoaWUuIEFyYWJpYykgd2hlcmUgaWUuIHRoZSB3aWR0aAotICAgICAgICAg
ICAgLy8gb2YgYSBzdHJpbmcgaXMgbm90IHRoZSBzdW0gb2YgdGhlIGJvdW5kYXJpZXMgb2YgYWxs
IGNvbnRhaW5lZCBnbHlwaHMuCi0gICAgICAgICAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9y
IGl0U2VhcmNoID0gY2hhckl0ICsgMTsKLSAgICAgICAgICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRl
cmF0b3IgZW5kU2VhcmNoID0gY2hhckl0ICsgcmFuZ2UuZW5kT2Zmc2V0IC0gaTsKLSAgICAgICAg
ICAgIHdoaWxlIChpdFNlYXJjaCAhPSBlbmRTZWFyY2gpIHsKLSAgICAgICAgICAgICAgICAvLyBO
byBuZWVkIHRvIGNoZWNrIGZvciAnaXNIaWRkZW4oKScgaGVyZSBhcyB0aGlzIGZ1bmN0aW9uIGlz
IG5vdCBjYWxsZWQgZm9yIHRleHQgcGF0aHMuCi0gICAgICAgICAgICAgICAgaWYgKGl0U2VhcmNo
LT5kcmF3blNlcGVyYXRlZCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgICAgICBpdFNlYXJjaCsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgcG9zaXRpb25PZmZzZXQgPSBpdFNlYXJjaCAtIGNoYXJJdDsKLQotICAgICAgICAgICAg
Ly8gQ2FsY3VsYXRlIHdpZHRoL2hlaWdodCBvZiBzdWJyYW5nZQotICAgICAgICAgICAgU1ZHSW5s
aW5lQm94Q2hhcmFjdGVyUmFuZ2Ugc3ViUmFuZ2U7Ci0gICAgICAgICAgICBzdWJSYW5nZS5ib3gg
PSByYW5nZS5ib3g7Ci0gICAgICAgICAgICBzdWJSYW5nZS5zdGFydE9mZnNldCA9IGk7Ci0gICAg
ICAgICAgICBzdWJSYW5nZS5lbmRPZmZzZXQgPSBpICsgcG9zaXRpb25PZmZzZXQ7Ci0KLSAgICAg
ICAgICAgIGlmIChjYWxjV2lkdGhPbmx5KQotICAgICAgICAgICAgICAgIGxlbmd0aCArPSBjdW1t
dWxhdGVkV2lkdGhPZklubGluZUJveENoYXJhY3RlclJhbmdlKHN1YlJhbmdlKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gY3VtbXVsYXRlZEhlaWdodE9mSW5s
aW5lQm94Q2hhcmFjdGVyUmFuZ2Uoc3ViUmFuZ2UpOwotCi0gICAgICAgICAgICAvLyBDYWxjdWxh
dGUgZ2FwIGJldHdlZW4gdGhlIHByZXZpb3VzICYgY3VycmVudCByYW5nZQotICAgICAgICAgICAg
Ly8gPHRleHQgeD0iMTAgNTAgNzAiPkFCQ0Q8L3RleHQ+IC0gd2UgbmVlZCB0byB0YWtlIHRoZSBn
YXBzIGJldHdlZW4gQSAmIEIgaW50byBhY2NvdW50Ci0gICAgICAgICAgICAvLyBzbyBhZGQgIjQw
IiBhcyB3aWR0aCwgYW5kIGFuYWxvZ291cyBmb3IgQiAmIEMsIGFkZCAiMjAiIGFzIHdpZHRoLgot
ICAgICAgICAgICAgaWYgKGl0U2VhcmNoID4gY2h1bmsuc3RhcnQgJiYgaXRTZWFyY2ggPCBjaHVu
ay5lbmQpIHsKLSAgICAgICAgICAgICAgICBTVkdDaGFyJiBsYXN0Q2hhcmFjdGVyID0gKihpdFNl
YXJjaCAtIDEpOwotICAgICAgICAgICAgICAgIFNWR0NoYXImIGN1cnJlbnRDaGFyYWN0ZXIgPSAq
aXRTZWFyY2g7Ci0KLSAgICAgICAgICAgICAgICBpbnQgY2hhcnNDb25zdW1lZCA9IDA7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgZ2x5cGhXaWR0aCA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgZmxv
YXQgZ2x5cGhIZWlnaHQgPSAwLjBmOwotICAgICAgICAgICAgICAgIFN0cmluZyBnbHlwaE5hbWU7
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHVuaWNvZGVTdHJpbmc7Ci0gICAgICAgICAgICAgICAg
Ym94LT5tZWFzdXJlQ2hhcmFjdGVyKHN0eWxlLCBpICsgcG9zaXRpb25PZmZzZXQgLSAxLCBjaGFy
c0NvbnN1bWVkLCBnbHlwaE5hbWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoV2lkdGgsIGdseXBoSGVp
Z2h0KTsKLQotICAgICAgICAgICAgICAgIGlmIChjYWxjV2lkdGhPbmx5KQotICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggKz0gY3VycmVudENoYXJhY3Rlci54IC0gbGFzdENoYXJhY3Rlci54IC0g
Z2x5cGhXaWR0aDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGxl
bmd0aCArPSBjdXJyZW50Q2hhcmFjdGVyLnkgLSBsYXN0Q2hhcmFjdGVyLnkgLSBnbHlwaEhlaWdo
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWR2YW5jZSBwcm9jZXNzZWQgY2hh
cmFjdGVycwotICAgICAgICAgICAgaSArPSBwb3NpdGlvbk9mZnNldCAtIDE7Ci0gICAgICAgICAg
ICBjaGFySXQgPSBpdFNlYXJjaDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVChjaGFy
SXQgPT0gY2h1bmsuZW5kKTsKLSAgICByZXR1cm4gbGVuZ3RoOwotfQotCi1zdGF0aWMgZmxvYXQg
Y3VtbXVsYXRlZFdpZHRoT2ZUZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVuaykKLXsKLSAgICBy
ZXR1cm4gY3VtbXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRleHRDaHVuayhjaHVuaywgdHJ1ZSk7Ci19
Ci0KLXN0YXRpYyBmbG9hdCBjdW1tdWxhdGVkSGVpZ2h0T2ZUZXh0Q2h1bmsoU1ZHVGV4dENodW5r
JiBjaHVuaykKLXsKLSAgICByZXR1cm4gY3VtbXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRleHRDaHVu
ayhjaHVuaywgZmFsc2UpOwotfQotCi1mbG9hdCBjYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnRGb3JU
ZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVuaywgRVRleHRBbmNob3IgYW5jaG9yKQotewotICAg
IGZsb2F0IHNoaWZ0ID0gMC4wZjsKLQotICAgIGlmIChjaHVuay5pc1ZlcnRpY2FsVGV4dCkKLSAg
ICAgICAgc2hpZnQgPSBjdW1tdWxhdGVkSGVpZ2h0T2ZUZXh0Q2h1bmsoY2h1bmspOwotICAgIGVs
c2UKLSAgICAgICAgc2hpZnQgPSBjdW1tdWxhdGVkV2lkdGhPZlRleHRDaHVuayhjaHVuayk7Ci0K
LSAgICBpZiAoYW5jaG9yID09IFRBX01JRERMRSkKLSAgICAgICAgc2hpZnQgKj0gLTAuNWY7Ci0g
ICAgZWxzZQotICAgICAgICBzaGlmdCAqPSAtMS4wZjsKLQotICAgIHJldHVybiBzaGlmdDsKLX0K
LQotc3RhdGljIHZvaWQgYXBwbHlUZXh0QW5jaG9yVG9UZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBj
aHVuaykKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGZvciBjaHVua3MgY29u
dGFpbmluZyBjaGFycyBhbGlnbmVkIG9uIGEgcGF0aC4KLSAgICAvLyAtPiBhbGwgY2hhcmFjdGVy
cyBhcmUgdmlzaWJsZSwgbm8gbmVlZCB0byBjaGVjayBmb3IgImlzSGlkZGVuKCkiIGFueXdoZXJl
LgotCi0gICAgaWYgKGNodW5rLmFuY2hvciA9PSBUQV9TVEFSVCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZmxvYXQgc2hpZnQgPSBjYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnRGb3JUZXh0Q2h1bmso
Y2h1bmssIGNodW5rLmFuY2hvcik7Ci0KLSAgICAvLyBBcHBseSBjb3JyZWN0aW9uIHRvIGNodW5r
Ci0gICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBjaHVua0l0ID0gY2h1bmsuc3RhcnQ7Ci0g
ICAgZm9yICg7IGNodW5rSXQgIT0gY2h1bmsuZW5kOyArK2NodW5rSXQpIHsKLSAgICAgICAgU1ZH
Q2hhciYgY3VyQ2hhciA9ICpjaHVua0l0OwotCi0gICAgICAgIGlmIChjaHVuay5pc1ZlcnRpY2Fs
VGV4dCkKLSAgICAgICAgICAgIGN1ckNoYXIueSArPSBzaGlmdDsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY3VyQ2hhci54ICs9IHNoaWZ0OwotICAgIH0KLQotICAgIC8vIE1vdmUgaW5saW5l
IGJveGVzCi0gICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0b3Ig
Ym94SXQgPSBjaHVuay5ib3hlcy5iZWdpbigpOwotICAgIFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFy
YWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGJveEVuZCA9IGNodW5rLmJveGVzLmVuZCgpOwotCi0gICAg
Zm9yICg7IGJveEl0ICE9IGJveEVuZDsgKytib3hJdCkgewotICAgICAgICBTVkdJbmxpbmVCb3hD
aGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94SXQ7Ci0KLSAgICAgICAgSW5saW5lQm94KiBjdXJC
b3ggPSByYW5nZS5ib3g7Ci0gICAgICAgIEFTU0VSVChjdXJCb3gtPmlzU1ZHSW5saW5lVGV4dEJv
eCgpKTsKLQotICAgICAgICAvLyBNb3ZlIHRhcmdldCBib3gKLSAgICAgICAgaWYgKGNodW5rLmlz
VmVydGljYWxUZXh0KQotICAgICAgICAgICAgY3VyQm94LT5zZXRZKGN1ckJveC0+eSgpICsgc3Rh
dGljX2Nhc3Q8aW50PihzaGlmdCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJCb3gt
PnNldFgoY3VyQm94LT54KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNoaWZ0KSk7Ci0gICAgfQotfQot
Ci1mbG9hdCBjYWxjdWxhdGVUZXh0TGVuZ3RoQ29ycmVjdGlvbkZvclRleHRDaHVuayhTVkdUZXh0
Q2h1bmsmIGNodW5rLCBFTGVuZ3RoQWRqdXN0IGxlbmd0aEFkanVzdCwgZmxvYXQmIGNvbXB1dGVk
TGVuZ3RoKQotewotICAgIGlmIChjaHVuay50ZXh0TGVuZ3RoIDw9IDAuMGYpCi0gICAgICAgIHJl
dHVybiAwLjBmOwotCi0gICAgY29tcHV0ZWRMZW5ndGggPSAwLjBmOwotCi0gICAgZmxvYXQgY29t
cHV0ZWRXaWR0aCA9IGN1bW11bGF0ZWRXaWR0aE9mVGV4dENodW5rKGNodW5rKTsKLSAgICBmbG9h
dCBjb21wdXRlZEhlaWdodCA9IGN1bW11bGF0ZWRIZWlnaHRPZlRleHRDaHVuayhjaHVuayk7Ci0g
ICAgaWYgKChjb21wdXRlZFdpZHRoIDw9IDAuMGYgJiYgIWNodW5rLmlzVmVydGljYWxUZXh0KQot
ICAgICAgICB8fCAoY29tcHV0ZWRIZWlnaHQgPD0gMC4wZiAmJiBjaHVuay5pc1ZlcnRpY2FsVGV4
dCkpCi0gICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgY29tcHV0ZWRMZW5ndGggPSBjaHVuay5p
c1ZlcnRpY2FsVGV4dCA/IGNvbXB1dGVkSGVpZ2h0IDogY29tcHV0ZWRXaWR0aDsKLSAgICBpZiAo
bGVuZ3RoQWRqdXN0ID09IFNWR1RleHRDb250ZW50RWxlbWVudDo6TEVOR1RIQURKVVNUX1NQQUNJ
TkdBTkRHTFlQSFMpIHsKLSAgICAgICAgaWYgKGNodW5rLmlzVmVydGljYWxUZXh0KSAgICAKLSAg
ICAgICAgICAgIGNodW5rLmN0bS5zY2FsZU5vblVuaWZvcm0oMS4wZiwgY2h1bmsudGV4dExlbmd0
aCAvIGNvbXB1dGVkTGVuZ3RoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2h1bmsuY3Rt
LnNjYWxlTm9uVW5pZm9ybShjaHVuay50ZXh0TGVuZ3RoIC8gY29tcHV0ZWRMZW5ndGgsIDEuMGYp
OwotCi0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLQotICAgIHJldHVybiAoY2h1bmsudGV4
dExlbmd0aCAtIGNvbXB1dGVkTGVuZ3RoKSAvIGZsb2F0KGNodW5rLmVuZCAtIGNodW5rLnN0YXJ0
KTsKLX0KLQotc3RhdGljIHZvaWQgYXBwbHlUZXh0TGVuZ3RoQ29ycmVjdGlvblRvVGV4dENodW5r
KFNWR1RleHRDaHVuayYgY2h1bmspCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgaXMgbm90IGNhbGxl
ZCBmb3IgY2h1bmtzIGNvbnRhaW5pbmcgY2hhcnMgYWxpZ25lZCBvbiBhIHBhdGguCi0gICAgLy8g
LT4gYWxsIGNoYXJhY3RlcnMgYXJlIHZpc2libGUsIG5vIG5lZWQgdG8gY2hlY2sgZm9yICJpc0hp
ZGRlbigpIiBhbnl3aGVyZS4KLQotICAgIC8vIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBo
cyIgaXMgaGFuZGxlZCBieSBzZXR0aW5nIGEgc2NhbGUgZmFjdG9yIGZvciB0aGUgd2hvbGUgY2h1
bmsKLSAgICBmbG9hdCB0ZXh0TGVuZ3RoID0gMC4wZjsKLSAgICBmbG9hdCBzcGFjaW5nVG9BcHBs
eSA9IGNhbGN1bGF0ZVRleHRMZW5ndGhDb3JyZWN0aW9uRm9yVGV4dENodW5rKGNodW5rLCBjaHVu
ay5sZW5ndGhBZGp1c3QsIHRleHRMZW5ndGgpOwotCi0gICAgaWYgKCFjaHVuay5jdG0uaXNJZGVu
dGl0eSgpICYmIGNodW5rLmxlbmd0aEFkanVzdCA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxF
TkdUSEFESlVTVF9TUEFDSU5HQU5ER0xZUEhTKSB7Ci0gICAgICAgIFNWR0NoYXImIGZpcnN0Q2hh
ciA9ICooY2h1bmsuc3RhcnQpOwotCi0gICAgICAgIC8vIEFzc3VyZSB3ZSBhcHBseSB0aGUgY2h1
bmsgc2NhbGluZyBpbiB0aGUgcmlnaHQgb3JpZ2luCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBu
ZXdDaHVua0N0bShjaHVuay5jdG0pOwotICAgICAgICBuZXdDaHVua0N0bS50cmFuc2xhdGVSaWdo
dChmaXJzdENoYXIueCwgZmlyc3RDaGFyLnkpOwotICAgICAgICBuZXdDaHVua0N0bS50cmFuc2xh
dGUoLWZpcnN0Q2hhci54LCAtZmlyc3RDaGFyLnkpOwotCi0gICAgICAgIGNodW5rLmN0bSA9IG5l
d0NodW5rQ3RtOwotICAgIH0KLQotICAgIC8vIEFwcGx5IGNvcnJlY3Rpb24gdG8gY2h1bmsgCi0g
ICAgaWYgKHNwYWNpbmdUb0FwcGx5ICE9IDAuMGYpIHsKLSAgICAgICAgVmVjdG9yPFNWR0NoYXI+
OjppdGVyYXRvciBjaHVua0l0ID0gY2h1bmsuc3RhcnQ7Ci0gICAgICAgIGZvciAoOyBjaHVua0l0
ICE9IGNodW5rLmVuZDsgKytjaHVua0l0KSB7Ci0gICAgICAgICAgICBTVkdDaGFyJiBjdXJDaGFy
ID0gKmNodW5rSXQ7Ci0gICAgICAgICAgICBjdXJDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsK
LQotICAgICAgICAgICAgaWYgKGNodW5rLmlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAg
IGN1ckNoYXIueSArPSAoY2h1bmtJdCAtIGNodW5rLnN0YXJ0KSAqIHNwYWNpbmdUb0FwcGx5Owot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN1ckNoYXIueCArPSAoY2h1bmtJdCAt
IGNodW5rLnN0YXJ0KSAqIHNwYWNpbmdUb0FwcGx5OwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIFNWR1RleHRDaHVua0xheW91dEluZm86OnN0YXJ0VGV4dENodW5rKCkKLXsKLSAgICBtX2No
dW5rLmJveGVzLmNsZWFyKCk7Ci0gICAgbV9jaHVuay5ib3hlcy5hcHBlbmQoU1ZHSW5saW5lQm94
Q2hhcmFjdGVyUmFuZ2UoKSk7Ci0KLSAgICBtX2NodW5rLnN0YXJ0ID0gbV9jaGFyc0l0OwotICAg
IG1fYXNzaWduQ2h1bmtQcm9wZXJ0aWVzID0gdHJ1ZTsKLX0KLQotdm9pZCBTVkdUZXh0Q2h1bmtM
YXlvdXRJbmZvOjpjbG9zZVRleHRDaHVuaygpCi17Ci0gICAgQVNTRVJUKCFtX2NodW5rLmJveGVz
Lmxhc3QoKS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKG1fY2h1bmsuYm94ZXMubGFzdCgpLmlzQ2xv
c2VkKCkpOwotCi0gICAgbV9jaHVuay5lbmQgPSBtX2NoYXJzSXQ7Ci0gICAgQVNTRVJUKG1fY2h1
bmsuZW5kID49IG1fY2h1bmsuc3RhcnQpOwotCi0gICAgbV9zdmdUZXh0Q2h1bmtzLmFwcGVuZCht
X2NodW5rKTsKLX0KLQotdm9pZCBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvOjpidWlsZFRleHRDaHVu
a3MoVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBiZWdpbiwgVmVjdG9yPFNWR0NoYXI+OjppdGVy
YXRvciBlbmQsIElubGluZUZsb3dCb3gqIHN0YXJ0KQotewotICAgIG1fY2hhcnNCZWdpbiA9IGJl
Z2luOwotICAgIG1fY2hhcnNFbmQgPSBlbmQ7Ci0KLSAgICBtX2NoYXJzSXQgPSBiZWdpbjsKLSAg
ICBtX2NodW5rID0gU1ZHVGV4dENodW5rKGJlZ2luKTsKLQotICAgIHJlY3Vyc2l2ZUJ1aWxkVGV4
dENodW5rcyhzdGFydCk7Ci0gICAgQVNTRVJUKG1fY2hhcnNJdCA9PSBtX2NoYXJzRW5kKTsKLX0K
LQotdm9pZCBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvOjpyZWN1cnNpdmVCdWlsZFRleHRDaHVua3Mo
SW5saW5lRmxvd0JveCogc3RhcnQpCi17Ci0jaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCi0g
ICAgZnByaW50ZihzdGRlcnIsICIgLT4gYnVpbGRUZXh0Q2h1bmtzKHN0YXJ0PSVwKVxuIiwgc3Rh
cnQpOwotI2VuZGlmCi0KLSAgICBmb3IgKElubGluZUJveCogY3VyciA9IHN0YXJ0LT5maXJzdENo
aWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKLSAgICAgICAgaWYgKGN1
cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiB0
ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KGN1cnIpOwotCi0gICAgICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Qm94LT5sZW4oKTsKLSAgICAgICAgICAgIEFTU0VSVChs
ZW5ndGggPiAwKTsKLQotI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQotICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIgLT4gSGFuZGxlIGlubGluZSB0ZXh0IGJveCAoJXApIHdpdGggJWkg
Y2hhcmFjdGVycyAoc3RhcnQ6ICVpLCBlbmQ6ICVpKSwgaGFuZGxpbmdUZXh0UGF0aD0laVxuIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94LCBsZW5ndGgsIHRleHRCb3gtPnN0
YXJ0KCksIHRleHRCb3gtPmVuZCgpLCAoaW50KSBtX2hhbmRsaW5nVGV4dFBhdGgpOwotI2VuZGlm
Ci0KLSAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIo
KTsKLSAgICAgICAgICAgIEFTU0VSVCh0ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVCh0ZXh0LT5u
b2RlKCkpOwotCi0gICAgICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQqIHRleHRDb250ZW50
ID0gMDsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSB0ZXh0LT5ub2RlKCktPnBhcmVudCgpOwot
ICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNTVkdFbGVtZW50KCkgJiYgIXRleHRD
b250ZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihu
b2RlKS0+aXNUZXh0Q29udGVudCgpKQotICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudCA9
IHN0YXRpY19jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudCo+KG5vZGUpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCh0ZXh0Q29udGVudCk7Ci0KLSAgICAg
ICAgICAgIC8vIFN0YXJ0IG5ldyBjaGFyYWN0ZXIgcmFuZ2UgZm9yIHRoZSBmaXJzdCBjaHVuawot
ICAgICAgICAgICAgYm9vbCBpc0ZpcnN0Q2hhcmFjdGVyID0gbV9zdmdUZXh0Q2h1bmtzLmlzRW1w
dHkoKSAmJiBtX2NodW5rLnN0YXJ0ID09IG1fY2hhcnNJdCAmJiBtX2NodW5rLnN0YXJ0ID09IG1f
Y2h1bmsuZW5kOwotICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGFyYWN0ZXIpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQobV9jaHVuay5ib3hlcy5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAg
IG1fY2h1bmsuYm94ZXMuYXBwZW5kKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlKCkpOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFtX2NodW5rLmJveGVzLmlz
RW1wdHkoKSk7Ci0KLSAgICAgICAgICAgIC8vIFdhbGsgc3RyaW5nIHRvIGZpbmQgb3V0IG5ldyBj
aHVuayBwb3NpdGlvbnMsIGlmIGV4aXN0ZW50Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jaGFyc0l0
ICE9IG1fY2hhcnNFbmQpOwotCi0gICAgICAgICAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVy
UmFuZ2UmIHJhbmdlID0gbV9jaHVuay5ib3hlcy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHJhbmdlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlLmJveCA9IGN1cnI7
Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID0gIWkgPyAwIDogaSAtIDE7
Ci0KLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEKLSAgICAgICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgfCAtPiBSYW5nZSBpcyBvcGVuISBib3g9JXAsIHN0YXJ0T2Zmc2V0PSVp
XG4iLCByYW5nZS5ib3gsIHJhbmdlLnN0YXJ0T2Zmc2V0KTsKLSNlbmRpZgotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElmIGEgbmV3IChvciB0aGUgZmlyc3QpIGNodW5r
IGhhcyBiZWVuIHN0YXJ0ZWQsIHJlY29yZCBpdCdzIHRleHQtYW5jaG9yIGFuZCB3cml0aW5nIG1v
ZGUuCi0gICAgICAgICAgICAgICAgaWYgKG1fYXNzaWduQ2h1bmtQcm9wZXJ0aWVzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fYXNzaWduQ2h1bmtQcm9wZXJ0aWVzID0gZmFsc2U7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgbV9jaHVuay5pc1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5n
TW9kZSh0ZXh0LT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9j
aHVuay5pc1RleHRQYXRoID0gbV9oYW5kbGluZ1RleHRQYXRoOwotICAgICAgICAgICAgICAgICAg
ICBtX2NodW5rLmFuY2hvciA9IHRleHQtPnN0eWxlKCktPnN2Z1N0eWxlKCktPnRleHRBbmNob3Io
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaHVuay50ZXh0TGVuZ3RoID0gdGV4dENvbnRlbnQt
PnRleHRMZW5ndGgoKS52YWx1ZSh0ZXh0Q29udGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Y2h1bmsubGVuZ3RoQWRqdXN0ID0gKEVMZW5ndGhBZGp1c3QpIHRleHRDb250ZW50LT5sZW5ndGhB
ZGp1c3QoKTsKLQotI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQotICAgICAgICAgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8IC0+IEFzc2lnbiBjaHVuayBwcm9wZXJ0aWVzLCBpc1Zl
cnRpY2FsVGV4dD0laSwgYW5jaG9yPSVpXG4iLCBtX2NodW5rLmlzVmVydGljYWxUZXh0LCBtX2No
dW5rLmFuY2hvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoaSA+IDAgJiYgIWlzRmlyc3RDaGFyYWN0ZXIgJiYgbV9jaGFyc0l0LT5uZXdUZXh0Q2h1
bmspIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgbWlkIGNodW5rICYgY2hhcmFjdGVy
IHJhbmdlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghcmFuZ2UuaXNPcGVuKCkpOwotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIXJhbmdlLmlzQ2xvc2VkKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIGNsb3Nl
VGV4dENodW5rKCk7Ci0KLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEKLSAgICAgICAgICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfCAtPiBDbG9zZSBtaWQtdGV4dCBjaHVuaywgYXQg
ZW5kT2Zmc2V0OiAlaSBhbmQgc3RhcnRpbmcgbmV3IG1pZCBjaHVuayFcbiIsIHJhbmdlLmVuZE9m
ZnNldCk7Ci0jZW5kaWYKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGFyZSBmb3Ig
bmV4dCBjaHVuaywgaWYgd2UncmUgbm90IGF0IHRoZSBlbmQKLSAgICAgICAgICAgICAgICAgICAg
c3RhcnRUZXh0Q2h1bmsoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0
aCkgewotI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQotICAgICAgICAgICAgICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIgfCAtPiBSZWNvcmQgbGFzdCBjaHVuayBvZiBpbmxpbmUgdGV4
dCBib3ghXG4iKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRleHRD
aHVuaygpOwotICAgICAgICAgICAgICAgICAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFu
Z2UmIHJhbmdlID0gbV9jaHVuay5ib3hlcy5sYXN0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fYXNzaWduQ2h1bmtQcm9wZXJ0aWVzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2NodW5rLmlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHRleHQt
PnN0eWxlKCktPnN2Z1N0eWxlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jaHVuay5p
c1RleHRQYXRoID0gbV9oYW5kbGluZ1RleHRQYXRoOwotICAgICAgICAgICAgICAgICAgICAgICAg
bV9jaHVuay5hbmNob3IgPSB0ZXh0LT5zdHlsZSgpLT5zdmdTdHlsZSgpLT50ZXh0QW5jaG9yKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NodW5rLnRleHRMZW5ndGggPSB0ZXh0Q29udGVu
dC0+dGV4dExlbmd0aCgpLnZhbHVlKHRleHRDb250ZW50KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY2h1bmsubGVuZ3RoQWRqdXN0ID0gKEVMZW5ndGhBZGp1c3QpIHRleHRDb250ZW50LT5s
ZW5ndGhBZGp1c3QoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuYm94ID0gY3Vy
cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID0gaTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFyYW5nZS5pc09wZW4oKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIXJhbmdlLmlzQ2xvc2VkKCkpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91
bGQgb25seSBob2xkIHRydWUgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IGNo
dW5rCi0gICAgICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGFyYWN0ZXIpCi0gICAgICAgICAgICAg
ICAgICAgIGlzRmlyc3RDaGFyYWN0ZXIgPSBmYWxzZTsKLSAgICAKLSAgICAgICAgICAgICAgICAr
K21fY2hhcnNJdDsKLSAgICAgICAgICAgIH0KLQotI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4g
MSAgICAKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IEZpbmlzaGVkIGlubGluZSB0
ZXh0IGJveCFcbiIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIFNWR0lubGluZUJveENoYXJhY3Rl
clJhbmdlJiByYW5nZSA9IG1fY2h1bmsuYm94ZXMubGFzdCgpOwotICAgICAgICAgICAgaWYgKCFy
YW5nZS5pc09wZW4oKSAmJiAhcmFuZ2UuaXNDbG9zZWQoKSkgewotI2lmIERFQlVHX0NIVU5LX0JV
SUxESU5HID4gMQotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IExhc3QgcmFu
Z2Ugbm90IGNsb3NlZCAtIGNsb3Npbmcgd2l0aCBlbmRPZmZzZXQ6ICVpXG4iLCBsZW5ndGgpOwot
I2VuZGlmCi0KLSAgICAgICAgICAgICAgICAvLyBDdXJyZW50IHRleHQgY2h1bmsgaXMgbm90IHll
dCBjbG9zZWQuIEZpbmlzaCB0aGUgY3VycmVudCByYW5nZSwgYnV0IGRvbid0IHN0YXJ0IGEgbmV3
IGNodW5rLgotICAgICAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IGxlbmd0aDsKLQotICAg
ICAgICAgICAgICAgIGlmIChtX2NoYXJzSXQgIT0gbV9jaGFyc0VuZCkgewotI2lmIERFQlVHX0NI
VU5LX0JVSUxESU5HID4gMQotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAt
PiBOb3QgYXQgbGFzdCBjaGFyYWN0ZXIgeWV0IVxuIik7Ci0jZW5kaWYKLQotICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSdyZSBub3QgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBib3ggdG8gYmUg
cHJvY2Vzc2VkLCBhbmQgaWYgdGhlIG5leHQKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFj
dGVyIHN0YXJ0cyBhIG5ldyBjaHVuaywgdGhlbiBjbG9zZSB0aGUgY3VycmVudCBjaHVuayBhbmQg
c3RhcnQgYSBuZXcgb25lLgotICAgICAgICAgICAgICAgICAgICBpZiAobV9jaGFyc0l0LT5uZXdU
ZXh0Q2h1bmspIHsKLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IE5leHQgY2hhcmFjdGVyIHN0YXJ0cyBuZXcg
Y2h1bmshIENsb3NpbmcgY3VycmVudCBjaHVuaywgYW5kIHN0YXJ0aW5nIGEgbmV3IG9uZS4uLlxu
Iik7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VUZXh0Q2h1bmsoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGV4dENodW5rKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHN0YXJ0IGEg
bmV3IGNoYXJhY3RlciByYW5nZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jaHVuay5ib3hl
cy5hcHBlbmQoU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoKSk7Ci0KLSNpZiBERUJVR19DSFVO
S19CVUlMRElORyA+IDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
IC0+IE5leHQgY2hhcmFjdGVyIGRvZXMgTk9UIHN0YXJ0IGEgbmV3IGNodW5rISBTdGFydGluZyBu
ZXcgY2hhcmFjdGVyIHJhbmdlLi4uXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEK
LSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gQ2xvc2luZyBmaW5hbCBj
aHVuayEgRmluaXNoZWQgcHJvY2Vzc2luZyFcbiIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gQ2xvc2UgZmluYWwgY2h1bmssIG9uY2Ugd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUg
bGFzdCBib3gKLSAgICAgICAgICAgICAgICAgICAgY2xvc2VUZXh0Q2h1bmsoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBB
U1NFUlQoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpOwotICAgICAgICAgICAgSW5saW5lRmxvd0Jv
eCogZmxvd0JveCA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKTsKLQotICAgICAg
ICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgY29udGVudC4KLSAgICAgICAgICAgIGlmICghZmxvd0Jv
eC0+cmVuZGVyZXIoKS0+bm9kZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBib29sIGlzVGV4dFBhdGggPSBmbG93Qm94LT5yZW5kZXJlcigpLT5ub2RlKCktPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnRleHRQYXRoVGFnKTsKLQotI2lmIERFQlVHX0NIVU5LX0JVSUxE
SU5HID4gMQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gSGFuZGxlIGlubGluZSBm
bG93IGJveCAoJXApLCBpc1RleHRQYXRoPSVpXG4iLCBmbG93Qm94LCAoaW50KSBpc1RleHRQYXRo
KTsKLSNlbmRpZgotCi0gICAgICAgICAgICBpZiAoaXNUZXh0UGF0aCkKLSAgICAgICAgICAgICAg
ICBtX2hhbmRsaW5nVGV4dFBhdGggPSB0cnVlOwotCi0gICAgICAgICAgICByZWN1cnNpdmVCdWls
ZFRleHRDaHVua3MoZmxvd0JveCk7Ci0KLSAgICAgICAgICAgIGlmIChpc1RleHRQYXRoKQotICAg
ICAgICAgICAgICAgIG1faGFuZGxpbmdUZXh0UGF0aCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0jaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCi0gICAgZnByaW50ZihzdGRlcnIsICIg
PC0gYnVpbGRUZXh0Q2h1bmtzKHN0YXJ0PSVwKVxuIiwgc3RhcnQpOwotI2VuZGlmCi19Ci0KLXZv
aWQgU1ZHVGV4dENodW5rTGF5b3V0SW5mbzo6bGF5b3V0VGV4dENodW5rcygpCi17Ci0gICAgVmVj
dG9yPFNWR1RleHRDaHVuaz46Oml0ZXJhdG9yIGl0ID0gbV9zdmdUZXh0Q2h1bmtzLmJlZ2luKCk7
Ci0gICAgVmVjdG9yPFNWR1RleHRDaHVuaz46Oml0ZXJhdG9yIGVuZCA9IG1fc3ZnVGV4dENodW5r
cy5lbmQoKTsKLQotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHVGV4
dENodW5rJiBjaHVuayA9ICppdDsKLQotI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMAotICAg
ICAgICB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkhhbmRsZSBURVhUIENIVU5LISBh
bmNob3I9JWksIHRleHRMZW5ndGg9JWYsIGxlbmd0aEFkanVzdD0laSwgaXNWZXJ0aWNhbFRleHQ9
JWksIGlzVGV4dFBhdGg9JWkgc3RhcnQ9JXAsIGVuZD0lcCAtPiBkaXN0OiAlaVxuIiwKLSAgICAg
ICAgICAgICAgICAgICAgKGludCkgY2h1bmsuYW5jaG9yLCBjaHVuay50ZXh0TGVuZ3RoLCAoaW50
KSBjaHVuay5sZW5ndGhBZGp1c3QsIChpbnQpIGNodW5rLmlzVmVydGljYWxUZXh0LAotICAgICAg
ICAgICAgICAgICAgICAoaW50KSBjaHVuay5pc1RleHRQYXRoLCBjaHVuay5zdGFydCwgY2h1bmsu
ZW5kLCAodW5zaWduZWQgaW50KSAoY2h1bmsuZW5kIC0gY2h1bmsuc3RhcnQpKTsKLQotICAgICAg
ICAgICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0b3IgYm94SXQg
PSBjaHVuay5ib3hlcy5iZWdpbigpOwotICAgICAgICAgICAgVmVjdG9yPFNWR0lubGluZUJveENo
YXJhY3RlclJhbmdlPjo6aXRlcmF0b3IgYm94RW5kID0gY2h1bmsuYm94ZXMuZW5kKCk7Ci0KLSAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBpID0gMDsKLSAgICAgICAgICAgIGZvciAoOyBib3hJdCAh
PSBib3hFbmQ7ICsrYm94SXQpIHsKLSAgICAgICAgICAgICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0
ZXJSYW5nZSYgcmFuZ2UgPSAqYm94SXQ7Ci0gICAgICAgICAgICAgICAgKytpOwotICAgICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IFJBTkdFICVpIFNUQVJUT0ZGU0VUOiAlaSwgRU5E
T0ZGU0VUOiAlaSwgQk9YOiAlcFxuIiwgaSwgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLmVuZE9m
ZnNldCwgcmFuZ2UuYm94KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0KLSAg
ICAgICAgaWYgKGNodW5rLmlzVGV4dFBhdGgpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAvLyB0ZXh0LXBhdGggJiB0ZXh0TGVuZ3RoLCB3aXRoIGxlbmd0aEFkanVzdD0ic3BhY2lu
ZyIgaXMgYWxyZWFkeSBoYW5kbGVkIGZvciB0ZXh0UGF0aCBsYXlvdXRzLgotICAgICAgICBhcHBs
eVRleHRMZW5ndGhDb3JyZWN0aW9uVG9UZXh0Q2h1bmsoY2h1bmspOwotIAotICAgICAgICAvLyB0
ZXh0LWFuY2hvciBpcyBhbHJlYWR5IGhhbmRsZWQgZm9yIHRleHRQYXRoIGxheW91dHMuCi0gICAg
ICAgIGFwcGx5VGV4dEFuY2hvclRvVGV4dENodW5rKGNodW5rKTsKLSAgICB9Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oCShyZXZpc2lvbiA2ODg2NykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYg
U1ZHVGV4dENodW5rTGF5b3V0SW5mb19oCi0jZGVmaW5lIFNWR1RleHRDaHVua0xheW91dEluZm9f
aAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJTVkdDaGFyYWN0ZXJEYXRhLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKLSNp
bmNsdWRlICJTVkdUZXh0Q29udGVudEVsZW1lbnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIElubGluZUJveDsKLWNsYXNzIElubGluZUZsb3dCb3g7Ci1jbGFzcyBTVkdJbmxpbmVU
ZXh0Qm94OwotCi0vLyBBIFNWR1RleHRDaHVuayBkaXJlY3RseSBjb3JyZXNwb25kcyB0byB0aGUg
ZGVmaW5pdGlvbiBvZiBhICJ0ZXh0IGNodW5rIiBwZXIgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uCi0v
LyBGb3IgZXhhbXBsZSwgZWFjaCBhYnNvbHV0ZSBwb3NpdGlvbmVkIGNoYXJhY3RlciBzdGFydHMg
YSB0ZXh0IGNodW5rIChtdWNoIG1vcmUgdG8gcmVzcGVjdCwgc2VlIHNwZWMpLgotLy8gRWFjaCBT
VkdUZXh0Q2h1bmsgY29udGFpbnMgYSBWZWN0b3Igb2YgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFu
Z2UsIGRlc2NyaWJpbmcgaG93IG1hbnkgYm94ZXMgYXJlIHNwYW5uZWQKLS8vIGJ5IHRoaXMgY2h1
bmsuIEZvbGxvd2luZyB0d28gZXhhbXBsZXMgc2hvdWxkIGNsYXJpZnkgdGhlIGNvZGUgYSBiaXQ6
Ci0vLwotLy8gMS4gPHRleHQgeD0iMTAgMjAgMzAiPkFCQzwvdGV4dD4gLSBvbmUgSW5saW5lVGV4
dEJveCBpcyBjcmVhdGVkLCB0aHJlZSBTVkdUZXh0Q2h1bmtzIGVhY2ggd2l0aCBvbmUgU1ZHSW5s
aW5lQm94Q2hhcmF0ZXJSYW5nZQotLy8gW1NWR1RleHRDaHVuayAxXQotLy8gICAgW1NWR0lubGlu
ZUJveENoYXJhY3RlclJhbmdlIDEsIHN0YXJ0T2Zmc2V0PTAsIGVuZE9mZnNldD0xLCBib3g9MHgx
XQotLy8gW1NWR1RleHRDaHVuayAyXQotLy8gICAgW1NWR0lubGluZUJveENoYXJhY3RlclJhbmdl
IDEsIHN0YXJ0T2Zmc2V0PTEsIGVuZE9mZnNldD0yLCBib3g9MHgxXQotLy8gW1NWR1RleHRDaHVu
ayAzXQotLy8gICAgW1NWR0lubGluZUJveENoYXJhY3RlclJhbmdlIDEsIHN0YXJ0T2Zmc2V0PTIs
IGVuZE9mZnNldD0zLCBib3g9MHgxXQotLy8KLS8vIDIuIDx0ZXh0IHg9IjEwIj5BPHRzcGFuPkI8
L3RzcGFuPkM8L3RleHQ+IC0gdGhyZWUgSW5saW5lVGV4dEJveHMgYXJlIGNyZWF0ZWQsIG9uZSBT
VkdUZXh0Q2h1bmssIHdpdGggdGhyZWUgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2VzCi0vLyBb
U1ZHVGV4dENodW5rIDFdCi0vLyAgICBbU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UgMSwgc3Rh
cnRPZmZzZXQ9MCwgZW5kT2Zmc2V0PTEsIGJveD0weDFdCi0vLyAgICBbU1ZHSW5saW5lQm94Q2hh
cmFjdGVyUmFuZ2UgMiwgc3RhcnRPZmZzZXQ9MCwgZW5kT2Zmc2V0PTEsIGJveD0weDJdCi0vLyAg
ICBbU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UgMywgc3RhcnRPZmZzZXQ9MCwgZW5kT2Zmc2V0
PTEsIGJveD0weDNdCi0vLwotLy8gSGlnaCBsZXZlbCBvdmVydmlldyBvZiB0aGUgU1ZHIHRleHQg
bGF5b3V0IGNvZGU6Ci0vLyBTdGVwICMxKSAtIEJ1aWxkIFZlY3RvciBvZiBTVkdDaGFyIG9iamVj
dHMgc3RhcnRpbmcgZnJvbSByb290IDx0ZXh0PiBkaXZpbmcgaW50byBjaGlsZHJlbgotLy8gU3Rl
cCAjMikgLSBCdWlsZCBWZWN0b3Igb2YgU1ZHVGV4dENodW5rIG9iamVjdHMsIGNvbnRhaW5pbmcg
b2Zmc2V0cyBpbnRvIHRoZSBJbmxpbmVUZXh0Qm94ZXMgYW5kIFNWR0NoYXIgdmVjdG9ycwotLy8g
U3RlcCAjMykgLSBBcHBseSBjaHVuayBwb3N0IHByb2Nlc3NpbmcgKHRleHQtYW5jaG9yIC8gdGV4
dExlbmd0aCBzdXBwb3J0LCB3aGljaCBvcGVyYXRlIG9uIHRleHQgY2h1bmtzISkKLS8vIFN0ZXAg
IzQpIC0gUHJvcGFnYXRlIGluZm9ybWF0aW9uLCBob3cgbWFueSBjaHVuayAicGFydHMiIGFyZSBh
c3NvY2lhdGVkIHdpdGggZWFjaCBTVkdJbmxpbmVUZXh0Qm94IChzZWUgYmVsb3cpCi0vLyBTdGVw
ICM1KSAtIExheW91dCBhbGwgSW5saW5lQm94ZXMsIG9ubHkgYnkgbWVhc3VyaW5nIHRoZWlyIGNv
bnRleHQgcmVjdCAoeC95L3dpZHRoL2hlaWdodCBkZWZpbmVkIHRocm91Z2ggU1ZHQ2hhcnMgYW5k
IHRyYW5zZm9ybWF0aW9ucykKLS8vIFN0ZXAgIzYpIC0gTGF5b3V0IFNWR1Jvb3RJbmxpbmVCb3gs
IGl0J3MgcGFyZW50IFJlbmRlclNWR1RleHQgYmxvY2sgYW5kIGZpeHVwIGNoaWxkIHBvc2l0aW9u
cywgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHJvb3QgYm94Ci0vLwotLy8gV2hlbiBwYWludGluZyBh
IHJhbmdlIG9mIGNoYXJhY3RlcnMsIHdlIGhhdmUgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGNhbiBi
ZSBkcmF3biBpbiBhIHJvdy4gRWFjaCBhYnNvbHV0ZSBwb3N0aW9uZWQKLS8vIGNoYXJhY3RlciBp
cyBkcmF3biBpbmRpdmlkdWFsbHkuIEFmdGVyIHN0ZXAgIzIpIHdlIGtub3cgYWxsIHRleHQgY2h1
bmtzLCBhbmQgaG93IHRoZXkgc3BhbiBhY3Jvc3MgdGhlIFNWR0lubGluZVRleHRCb3hlcy4KLS8v
IEluIHN0ZXAgIzQpIHdlIGJ1aWxkIGEgbGlzdCBvZiB0ZXh0IGNodW5rICJwYXJ0cyIgYW5kIHN0
b3JlIGl0IGluIGVhY2ggU1ZHSW5saW5lVGV4dEJveC4gQSBjaHVuayAicGFydCIgaXMgYSBwYXJ0
IG9mIGEKLS8vIHRleHQgY2h1bmsgdGhhdCBsaXZlcyBpbiBhIFNWR0lubGluZVRleHRCb3ggKGNv
bnNpc3RzIG9mIGEgbGVuZ3RoLCB3aWR0aCwgaGVpZ2h0IGFuZCBhIG1vbm90b25pYyBvZmZzZXQg
ZnJvbSB0aGUgY2h1bmsgYmVnaW4pCi0vLyBUaGUgU1ZHVGV4dENodW5rUGFydCBvYmplY3QgZGVz
Y3JpYmVzIHRoaXMgaW5mb3JtYXRpb24uCi0vLyBXaGVuIHBhaW50aW5nIHdlIGNhbiBmb2xsb3cg
dGhlIHJlZ3VsYXIgSW5saW5lQm94IGZsb3csIHdlIHN0YXJ0IHBhaW50aW5nIHRoZSBTVkdSb290
SW5saW5lQm94LCB3aGljaCBqdXN0IGFza3MgaXRzIGNoaWxkcmVuCi0vLyB0byBwYWludC4gVGhl
eSBjYW4gcGFpbnQgb24gdGhlaXIgb3duIGJlY2F1c2UgYWxsIHBvc2l0aW9uIGluZm9ybWF0aW9u
IGFyZSBrbm93bi4gUHJldmlvdXNseSB3ZSB1c2VkIHRvIGRyYXcgX2FsbF8gY2hhcmFjdGVycwot
Ly8gZnJvbSB0aGUgU1ZHUm9vdElubGluZUJveCwgd2hpY2ggdmlvbGF0ZXMgdGhlIHdob2xlIGNv
bmNlcHQgb2YgdGhlIG11bHRpcGxlIElubGluZUJveGVzLCBhbmQgbWFkZSB0ZXh0IHNlbGVjdGlv
biB2ZXJ5IGhhcmQgdG8KLS8vIGltcGxlbWVudC4KLQotc3RydWN0IFNWR1RleHRDaHVua1BhcnQg
ewotICAgIFNWR1RleHRDaHVua1BhcnQoKQotICAgICAgICA6IG9mZnNldCgtMSkKLSAgICAgICAg
LCBsZW5ndGgoLTEpCi0gICAgICAgICwgd2lkdGgoMCkKLSAgICAgICAgLCBoZWlnaHQoMCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBvZmZzZXQgIT0gLTEKLSAgICAgICAgICAgICYmIGxlbmd0aCAhPSAtMQotICAgICAgICAg
ICAgJiYgd2lkdGgKLSAgICAgICAgICAgICYmIGhlaWdodDsKLSAgICB9Ci0KLSAgICAvLyBGaXJz
dCBjaGFyYWN0ZXIgb2YgdGhpcyB0ZXh0IGNodW5rIHBhcnQsIGRlZmluaW5nIHRoZSBvcmlnaW4g
dG8gYmUgZHJhd24KLSAgICBWZWN0b3I8U1ZHQ2hhcj46OmNvbnN0X2l0ZXJhdG9yIGZpcnN0Q2hh
cmFjdGVyOwotCi0gICAgLy8gU3RhcnQgb2Zmc2V0IGluIHRleHRSZW5kZXJlcigpLT5jaGFyYWN0
ZXJzKCkgYnVmZmVyLgotICAgIGludCBvZmZzZXQ7Ci0KLSAgICAvLyBsZW5ndGgvd2lkdGgvaGVp
Z2h0IG9mIGNodW5rIHBhcnQKLSAgICBpbnQgbGVuZ3RoOwotICAgIGZsb2F0IHdpZHRoOwotICAg
IGZsb2F0IGhlaWdodDsKLX07Ci0KLXN0cnVjdCBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSB7
Ci0gICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoKQotICAgICAgICA6IHN0YXJ0T2Zmc2V0
KElOVF9NSU4pCi0gICAgICAgICwgZW5kT2Zmc2V0KElOVF9NSU4pCi0gICAgICAgICwgYm94KDAp
Ci0gICAgewotICAgIH0KLQotICAgIGJvb2wgaXNPcGVuKCkgY29uc3QgeyByZXR1cm4gKHN0YXJ0
T2Zmc2V0ID09IGVuZE9mZnNldCkgJiYgKGVuZE9mZnNldCA9PSBJTlRfTUlOKTsgfQotICAgIGJv
b2wgaXNDbG9zZWQoKSBjb25zdCB7IHJldHVybiBzdGFydE9mZnNldCAhPSBJTlRfTUlOICYmIGVu
ZE9mZnNldCAhPSBJTlRfTUlOOyB9Ci0KLSAgICBpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgaW50IGVu
ZE9mZnNldDsKLQotICAgIElubGluZUJveCogYm94OwotfTsKLQotc3RydWN0IFNWR0NoYXI7Ci0K
LS8vIENvbnZlbmllbmNlIHR5cGVkZWYKLXR5cGVkZWYgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpT
VkdMZW5ndGhBZGp1c3RUeXBlIEVMZW5ndGhBZGp1c3Q7Ci0KLXN0cnVjdCBTVkdUZXh0Q2h1bmsg
ewotICAgIFNWR1RleHRDaHVuayhWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0KQotICAgICAg
ICA6IGFuY2hvcihUQV9TVEFSVCkKLSAgICAgICAgLCB0ZXh0TGVuZ3RoKDAuMGYpCi0gICAgICAg
ICwgbGVuZ3RoQWRqdXN0KFNWR1RleHRDb250ZW50RWxlbWVudDo6TEVOR1RIQURKVVNUX1NQQUNJ
TkcpCi0gICAgICAgICwgaXNWZXJ0aWNhbFRleHQoZmFsc2UpCi0gICAgICAgICwgaXNUZXh0UGF0
aChmYWxzZSkKLSAgICAgICAgLCBzdGFydChpdCkKLSAgICAgICAgLCBlbmQoaXQpCi0gICAgewot
ICAgIH0KLQotICAgIC8vIHRleHQtYW5jaG9yIHN1cHBvcnQKLSAgICBFVGV4dEFuY2hvciBhbmNo
b3I7Ci0KLSAgICAvLyB0ZXh0TGVuZ3RoICYgbGVuZ3RoQWRqdXN0IHN1cHBvcnQKLSAgICBmbG9h
dCB0ZXh0TGVuZ3RoOwotICAgIEVMZW5ndGhBZGp1c3QgbGVuZ3RoQWRqdXN0OwotICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdG07Ci0KLSAgICAvLyBzdGF0dXMgZmxhZ3MKLSAgICBib29sIGlzVmVydGlj
YWxUZXh0IDogMTsKLSAgICBib29sIGlzVGV4dFBhdGggOiAxOwotCi0gICAgLy8gbWFpbiBjaHVu
ayBkYXRhCi0gICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBzdGFydDsKLSAgICBWZWN0b3I8
U1ZHQ2hhcj46Oml0ZXJhdG9yIGVuZDsKLQotICAgIFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0
ZXJSYW5nZT4gYm94ZXM7Ci19OwotCi1zdHJ1Y3QgU1ZHVGV4dENodW5rTGF5b3V0SW5mbyB7Ci0g
ICAgU1ZHVGV4dENodW5rTGF5b3V0SW5mbygpCi0gICAgICAgIDogbV9hc3NpZ25DaHVua1Byb3Bl
cnRpZXModHJ1ZSkKLSAgICAgICAgLCBtX2hhbmRsaW5nVGV4dFBhdGgoZmFsc2UpCi0gICAgICAg
ICwgbV9jaGFyc0l0KDApCi0gICAgICAgICwgbV9jaGFyc0JlZ2luKDApCi0gICAgICAgICwgbV9j
aGFyc0VuZCgwKQotICAgICAgICAsIG1fY2h1bmsoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29u
c3QgVmVjdG9yPFNWR1RleHRDaHVuaz4mIHRleHRDaHVua3MoKSBjb25zdCB7IHJldHVybiBtX3N2
Z1RleHRDaHVua3M7IH0KLQotICAgIHZvaWQgYnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdDaGFy
Pjo6aXRlcmF0b3IgY2hhcnNCZWdpbiwgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBjaGFyc0Vu
ZCwgSW5saW5lRmxvd0JveCogc3RhcnQpOwotICAgIHZvaWQgbGF5b3V0VGV4dENodW5rcygpOwot
Ci1wcml2YXRlOgotICAgIHZvaWQgc3RhcnRUZXh0Q2h1bmsoKTsKLSAgICB2b2lkIGNsb3NlVGV4
dENodW5rKCk7Ci0gICAgdm9pZCByZWN1cnNpdmVCdWlsZFRleHRDaHVua3MoSW5saW5lRmxvd0Jv
eCogc3RhcnQpOwotCi0gICAgYm9vbCBtX2Fzc2lnbkNodW5rUHJvcGVydGllcyA6IDE7Ci0gICAg
Ym9vbCBtX2hhbmRsaW5nVGV4dFBhdGggOiAxOwotCi0gICAgVmVjdG9yPFNWR0NoYXI+OjppdGVy
YXRvciBtX2NoYXJzSXQ7Ci0gICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBtX2NoYXJzQmVn
aW47Ci0gICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBtX2NoYXJzRW5kOwotCi0gICAgVmVj
dG9yPFNWR1RleHRDaHVuaz4gbV9zdmdUZXh0Q2h1bmtzOwotICAgIFNWR1RleHRDaHVuayBtX2No
dW5rOwotfTsKLQotLy8gSGVscGVyIGZ1bmN0aW9ucwotZmxvYXQgY2FsY3VsYXRlVGV4dEFuY2hv
clNoaWZ0Rm9yVGV4dENodW5rKFNWR1RleHRDaHVuayYsIEVUZXh0QW5jaG9yKTsKLWZsb2F0IGNh
bGN1bGF0ZVRleHRMZW5ndGhDb3JyZWN0aW9uRm9yVGV4dENodW5rKFNWR1RleHRDaHVuayYsIEVM
ZW5ndGhBZGp1c3QsIGZsb2F0JiBjb21wdXRlZExlbmd0aCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYgLy8gU1ZHVGV4dENodW5rTGF5
b3V0SW5mb19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0
aWVzLmNwcAkocmV2aXNpb24gNjg4NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5
b3V0VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNzUgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
VkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCi0jaW5jbHVkZSAiU1ZHQ2hhcmFjdGVyRGF0YS5oIgotI2luY2x1ZGUgIlNWR0No
YXJhY3RlckxheW91dEluZm8uaCIKLSNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHVGV4dENodW5rTGF5b3V0SW5mby5o
IgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJVbmljb2RlUmFuZ2UuaCIKLQotI2lu
Y2x1ZGUgPGZsb2F0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBpc1ZlcnRpY2Fs
V3JpdGluZ01vZGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIHJldHVybiBz
dHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9UQlJMIHx8IHN0eWxlLT53cml0aW5nTW9kZSgpID09
IFdNX1RCOyAKLX0KLQotc3RhdGljIGlubGluZSBFQWxpZ25tZW50QmFzZWxpbmUgZG9taW5hbnRC
YXNlbGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0
ZXh0LCBjb25zdCBGb250JiBmb250KQotewotICAgIEFTU0VSVCh0ZXh0KTsKLQotICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCkgPyB0ZXh0LT5zdHlsZSgpLT5z
dmdTdHlsZSgpIDogMDsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gdGV4dC0+cGFyZW50KCkgJiYgdGV4dC0+cGFyZW50KCktPnN0
eWxlKCkgPyB0ZXh0LT5wYXJlbnQoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7Ci0KLSAgICBF
RG9taW5hbnRCYXNlbGluZSBiYXNlbGluZSA9IHN0eWxlLT5kb21pbmFudEJhc2VsaW5lKCk7Ci0g
ICAgaWYgKGJhc2VsaW5lID09IERCX0FVVE8pIHsKLSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0
KQotICAgICAgICAgICAgYmFzZWxpbmUgPSBEQl9DRU5UUkFMOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBiYXNlbGluZSA9IERCX0FMUEhBQkVUSUM7Ci0gICAgfQotCi0gICAgc3dpdGNoIChi
YXNlbGluZSkgewotICAgIGNhc2UgREJfVVNFX1NDUklQVDoKLSAgICAgICAgLy8gVE9ETzogVGhl
IGRvbWluYW50LWJhc2VsaW5lIGFuZCB0aGUgYmFzZWxpbmUtdGFibGUgY29tcG9uZW50cyBhcmUg
c2V0IGJ5Ci0gICAgICAgIC8vICAgICAgIGRldGVybWluaW5nIHRoZSBwcmVkb21pbmFudCBzY3Jp
cHQgb2YgdGhlIGNoYXJhY3RlciBkYXRhIGNvbnRlbnQuCi0gICAgICAgIHJldHVybiBBQl9BTFBI
QUJFVElDOwotICAgIGNhc2UgREJfTk9fQ0hBTkdFOgotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRvbWluYW50QmFzZWxpbmVU
b1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0LT5wYXJlbnQoKSwgZm9udCk7Ci0KLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEFCX0FVVE87Ci0g
ICAgICAgIH0KLSAgICBjYXNlIERCX1JFU0VUX1NJWkU6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNlbGlu
ZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsKLQotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gQUJfQVVUTzsg
ICAgCi0gICAgICAgIH0KLSAgICBjYXNlIERCX0lERU9HUkFQSElDOgotICAgICAgICByZXR1cm4g
QUJfSURFT0dSQVBISUM7Ci0gICAgY2FzZSBEQl9BTFBIQUJFVElDOgotICAgICAgICByZXR1cm4g
QUJfQUxQSEFCRVRJQzsKLSAgICBjYXNlIERCX0hBTkdJTkc6Ci0gICAgICAgIHJldHVybiBBQl9I
QU5HSU5HOwotICAgIGNhc2UgREJfTUFUSEVNQVRJQ0FMOgotICAgICAgICByZXR1cm4gQUJfTUFU
SEVNQVRJQ0FMOwotICAgIGNhc2UgREJfQ0VOVFJBTDoKLSAgICAgICAgcmV0dXJuIEFCX0NFTlRS
QUw7Ci0gICAgY2FzZSBEQl9NSURETEU6Ci0gICAgICAgIHJldHVybiBBQl9NSURETEU7Ci0gICAg
Y2FzZSBEQl9URVhUX0FGVEVSX0VER0U6Ci0gICAgICAgIHJldHVybiBBQl9URVhUX0FGVEVSX0VE
R0U7Ci0gICAgY2FzZSBEQl9URVhUX0JFRk9SRV9FREdFOgotICAgICAgICByZXR1cm4gQUJfVEVY
VF9CRUZPUkVfRURHRTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIEFCX0FVVE87Ci0gICAgfQotfQotCi1mbG9hdCBhbGlnbm1lbnRC
YXNlbGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0
ZXh0LCBjb25zdCBGb250JiBmb250KQotewotICAgIEFTU0VSVCh0ZXh0KTsKLQotICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCkgPyB0ZXh0LT5zdHlsZSgpLT5z
dmdTdHlsZSgpIDogMDsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gdGV4dC0+cGFyZW50KCkgJiYgdGV4dC0+cGFyZW50KCktPnN0
eWxlKCkgPyB0ZXh0LT5wYXJlbnQoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7Ci0KLSAgICBF
QWxpZ25tZW50QmFzZWxpbmUgYmFzZWxpbmUgPSBzdHlsZS0+YWxpZ25tZW50QmFzZWxpbmUoKTsK
LSAgICBpZiAoYmFzZWxpbmUgPT0gQUJfQVVUTykgewotICAgICAgICBpZiAocGFyZW50U3R5bGUg
JiYgc3R5bGUtPmRvbWluYW50QmFzZWxpbmUoKSA9PSBEQl9BVVRPKQotICAgICAgICAgICAgYmFz
ZWxpbmUgPSBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dC0+cGFy
ZW50KCksIGZvbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlbGluZSA9IGRvbWlu
YW50QmFzZWxpbmVUb1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0LCBmb250KTsKLQotICAgICAg
ICBBU1NFUlQoYmFzZWxpbmUgIT0gQUJfQVVUTyk7ICAgIAotICAgIH0KLQotICAgIC8vIE5vdGU6
IGh0dHA6Ly93aWtpLmFwYWNoZS5vcmcveG1sZ3JhcGhpY3MtZm9wL0xpbmVMYXlvdXQvQWxpZ25t
ZW50SGFuZGxpbmcKLSAgICBzd2l0Y2ggKGJhc2VsaW5lKSB7Ci0gICAgY2FzZSBBQl9CQVNFTElO
RToKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dC0+
cGFyZW50KCksIGZvbnQpOwotCi0gICAgICAgICAgICByZXR1cm4gMC4wZjsKLSAgICAgICAgfQot
ICAgIGNhc2UgQUJfQkVGT1JFX0VER0U6Ci0gICAgY2FzZSBBQl9URVhUX0JFRk9SRV9FREdFOgot
ICAgICAgICByZXR1cm4gZm9udC5hc2NlbnQoKTsKLSAgICBjYXNlIEFCX01JRERMRToKLSAgICAg
ICAgcmV0dXJuIGZvbnQueEhlaWdodCgpIC8gMi4wZjsKLSAgICBjYXNlIEFCX0NFTlRSQUw6Ci0g
ICAgICAgIC8vIE5vdCBuZWVkZWQsIHdlJ3JlIHRha2luZyB0aGlzIGludG8gYWNjb3VudCBhbHJl
YWR5IGZvciB2ZXJ0aWNhbCB0ZXh0IQotICAgICAgICAvLyByZXR1cm4gKGZvbnQuYXNjZW50KCkg
LSBmb250LmRlc2NlbnQoKSkgLyAyLjBmOwotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICBjYXNl
IEFCX0FGVEVSX0VER0U6Ci0gICAgY2FzZSBBQl9URVhUX0FGVEVSX0VER0U6Ci0gICAgY2FzZSBB
Ql9JREVPR1JBUEhJQzoKLSAgICAgICAgcmV0dXJuIGZvbnQuZGVzY2VudCgpOwotICAgIGNhc2Ug
QUJfQUxQSEFCRVRJQzoKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgY2FzZSBBQl9IQU5HSU5H
OgotICAgICAgICByZXR1cm4gZm9udC5hc2NlbnQoKSAqIDguMGYgLyAxMC4wZjsKLSAgICBjYXNl
IEFCX01BVEhFTUFUSUNBTDoKLSAgICAgICAgcmV0dXJuIGZvbnQuYXNjZW50KCkgLyAyLjBmOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gMC4wZjsKLSAgICB9Ci19Ci0KLWZsb2F0IGdseXBoT3JpZW50YXRpb25Ub0FuZ2xlKGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgVUNo
YXImIGNoYXJhY3RlcikKLXsKLSAgICBzd2l0Y2ggKGlzVmVydGljYWxUZXh0ID8gc3ZnU3R5bGUt
PmdseXBoT3JpZW50YXRpb25WZXJ0aWNhbCgpIDogc3ZnU3R5bGUtPmdseXBoT3JpZW50YXRpb25I
b3Jpem9udGFsKCkpIHsKLSAgICBjYXNlIEdPX0FVVE86Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIFNwZWM6IEZ1bGx3aWR0aCBpZGVvZ3JhcGhpYyBhbmQgZnVsbHdpZHRoIExhdGluIHRleHQg
d2lsbCBiZSBzZXQgd2l0aCBhIGdseXBoLW9yaWVudGF0aW9uIG9mIDAtZGVncmVlcy4KLSAgICAg
ICAgICAgIC8vIFRleHQgd2hpY2ggaXMgbm90IGZ1bGx3aWR0aCB3aWxsIGJlIHNldCB3aXRoIGEg
Z2x5cGgtb3JpZW50YXRpb24gb2YgOTAtZGVncmVlcy4KLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB1bmljb2RlUmFuZ2UgPSBmaW5kQ2hhclVuaWNvZGVSYW5nZShjaGFyYWN0ZXIpOwotICAgICAg
ICAgICAgaWYgKHVuaWNvZGVSYW5nZSA9PSBjUmFuZ2VTZXRMYXRpbiB8fCB1bmljb2RlUmFuZ2Ug
PT0gY1JhbmdlQXJhYmljKQotICAgICAgICAgICAgICAgIHJldHVybiA5MC4wZjsKLQotICAgICAg
ICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgICAgIH0KLSAgICBjYXNlIEdPXzkwREVHOgotICAgICAg
ICByZXR1cm4gOTAuMGY7Ci0gICAgY2FzZSBHT18xODBERUc6Ci0gICAgICAgIHJldHVybiAxODAu
MGY7Ci0gICAgY2FzZSBHT18yNzBERUc6Ci0gICAgICAgIHJldHVybiAyNzAuMGY7Ci0gICAgY2Fz
ZSBHT18wREVHOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLX0K
LQotc3RhdGljIGlubGluZSBib29sIGdseXBoT3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdy
ZWVzKGZsb2F0IG9yaWVudGF0aW9uQW5nbGUpCi17Ci0gICAgcmV0dXJuIGZhYnNmKGZtb2RmKG9y
aWVudGF0aW9uQW5nbGUsIDE4MC4wZikpID09IDAuMGY7Ci19Ci0KLWZsb2F0IGFwcGx5R2x5cGhB
ZHZhbmNlQW5kU2hpZnRSZXNwZWN0aW5nT3JpZW50YXRpb24oYm9vbCBpc1ZlcnRpY2FsVGV4dCwg
ZmxvYXQgb3JpZW50YXRpb25BbmdsZSwgZmxvYXQgZ2x5cGhXaWR0aCwgZmxvYXQgZ2x5cGhIZWln
aHQsIGNvbnN0IEZvbnQmIGZvbnQsIFNWR0NoYXImIHN2Z0NoYXIsIGZsb2F0JiB4T3JpZW50YXRp
b25TaGlmdCwgZmxvYXQmIHlPcmllbnRhdGlvblNoaWZ0KQotewotICAgIGJvb2wgb3JpZW50YXRp
b25Jc011bHRpcGx5T2YxODBEZWdyZWVzID0gZ2x5cGhPcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4
MERlZ3JlZXMob3JpZW50YXRpb25BbmdsZSk7Ci0KLSAgICAvLyBUaGUgZnVuY3Rpb24gaXMgYmFz
ZWQgb24gc3BlYyByZXF1aXJlbWVudHM6Ci0gICAgLy8KLSAgICAvLyBTcGVjOiBJZiB0aGUgJ2ds
eXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnIHJlc3VsdHMgaW4gYW4gb3JpZW50YXRpb24gYW5n
bGUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgotICAgIC8vIG9mIDE4MCBkZWdyZWVzLCB0aGVu
IHRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24gaXMgaW5jcmVtZW50ZWQgYWNjb3JkaW5nIHRvIHRo
ZSB2ZXJ0aWNhbCBtZXRyaWNzIG9mIHRoZSBnbHlwaC4KLSAgICAvLwotICAgIC8vIFNwZWM6IElm
IGlmIHRoZSAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnIHJlc3VsdHMgaW4gYW4gb3JpZW50
YXRpb24gYW5nbGUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgotICAgIC8vIDE4MCBkZWdyZWVz
LHRoZW4gdGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbiBpcyBpbmNyZW1lbnRlZCBhY2NvcmRpbmcg
dG8gdGhlIGhvcml6b250YWwgbWV0cmljcyBvZiB0aGUgZ2x5cGguCi0KLSAgICAvLyB2ZXJ0aWNh
bCBvcmllbnRhdGlvbiBoYW5kbGluZwotICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkgewotICAgICAg
ICBpZiAob3JpZW50YXRpb25BbmdsZSA9PSAwLjBmKSB7Ci0gICAgICAgICAgICB4T3JpZW50YXRp
b25TaGlmdCA9IC1nbHlwaFdpZHRoIC8gMi4wZjsKLSAgICAgICAgICAgIHlPcmllbnRhdGlvblNo
aWZ0ID0gZm9udC5hc2NlbnQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xl
ID09IDkwLjBmKSB7Ci0gICAgICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IC1nbHlwaEhlaWdo
dDsKLSAgICAgICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gZm9udC5kZXNjZW50KCk7Ci0gICAg
ICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gLWZvbnQuYXNjZW50KCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25BbmdsZSA9PSAyNzAuMGYpIHsKLSAgICAgICAgICAg
IHhPcmllbnRhdGlvblNoaWZ0ID0gZ2x5cGhIZWlnaHQ7Ci0gICAgICAgICAgICB5T3JpZW50YXRp
b25TaGlmdCA9IGZvbnQuZGVzY2VudCgpOwotICAgICAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlv
blNoaWZ0WCA9IC1nbHlwaFdpZHRoOwotICAgICAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNo
aWZ0WSA9IC1mb250LmFzY2VudCgpOwotICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uQW5n
bGUgPT0gMTgwLjBmKSB7Ci0gICAgICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IGZvbnQuYXNj
ZW50KCk7Ci0gICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lk
dGggLyAyLjBmOwotICAgICAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WSA9IGZvbnQu
YXNjZW50KCkgLSBmb250LmRlc2NlbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHZlcnRp
Y2FsIGFkdmFuY2UgY2FsY3VsYXRpb24KLSAgICAgICAgaWYgKG9yaWVudGF0aW9uQW5nbGUgIT0g
MC4wZiAmJiAhb3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzKQotICAgICAgICAgICAg
cmV0dXJuIGdseXBoV2lkdGg7Ci0KLSAgICAgICAgcmV0dXJuIGdseXBoSGVpZ2h0OyAKLSAgICB9
Ci0KLSAgICAvLyBob3Jpem9udGFsIG9yaWVudGF0aW9uIGhhbmRsaW5nCi0gICAgaWYgKG9yaWVu
dGF0aW9uQW5nbGUgPT0gOTAuMGYpIHsKLSAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSBnbHlw
aFdpZHRoIC8gMi4wZjsKLSAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSAtZm9udC5kZXNjZW50
KCk7Ci0gICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFggPSAtZ2x5cGhXaWR0aCAvIDIu
MGYgLSBmb250LmRlc2NlbnQoKTsgCi0gICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkg
PSBmb250LmRlc2NlbnQoKTsKLSAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uQW5nbGUgPT0gMjcw
LjBmKSB7Ci0gICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gLWdseXBoV2lkdGggLyAyLjBmOwot
ICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IC1mb250LmRlc2NlbnQoKTsKLSAgICAgICAgc3Zn
Q2hhci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdpZHRoIC8gMi4wZiArIGZvbnQuZGVzY2Vu
dCgpOwotICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gZ2x5cGhIZWlnaHQ7Ci0g
ICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDE4MC4wZikgewotICAgICAgICB4T3Jp
ZW50YXRpb25TaGlmdCA9IGdseXBoV2lkdGggLyAyLjBmOwotICAgICAgICBzdmdDaGFyLm9yaWVu
dGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGggLyAyLjBmOwotICAgICAgICBzdmdDaGFyLm9yaWVu
dGF0aW9uU2hpZnRZID0gZm9udC5hc2NlbnQoKSAtIGZvbnQuZGVzY2VudCgpOwotICAgIH0KLQot
ICAgIC8vIGhvcml6b250YWwgYWR2YW5jZSBjYWxjdWxhdGlvbgotICAgIGlmIChvcmllbnRhdGlv
bkFuZ2xlICE9IDAuMGYgJiYgIW9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcykKLSAg
ICAgICAgcmV0dXJuIGdseXBoSGVpZ2h0OwotCi0gICAgcmV0dXJuIGdseXBoV2lkdGg7Ci19Ci0K
LUZsb2F0UG9pbnQgdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShWZWN0b3I8U1ZHQ2hh
cj46Oml0ZXJhdG9yIGl0LCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGVuZCkKLXsKLSAgICBm
bG9hdCBsb3dYID0gRkxUX01BWCwgbG93WSA9IEZMVF9NQVg7Ci0gICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPmlzSGlkZGVuKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBmbG9hdCB4ID0gKCppdCkueDsKLSAgICAgICAgZmxvYXQgeSA9ICgq
aXQpLnk7Ci0KLSAgICAgICAgaWYgKHggPCBsb3dYKQotICAgICAgICAgICAgbG93WCA9IHg7Ci0K
LSAgICAgICAgaWYgKHkgPCBsb3dZKQotICAgICAgICAgICAgbG93WSA9IHk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEZsb2F0UG9pbnQobG93WCwgbG93WSk7Ci19Ci0KLWZsb2F0IGN1bW11bGF0ZWRX
aWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2Um
IHJhbmdlKQotewotICAgIEFTU0VSVCghcmFuZ2UuaXNPcGVuKCkpOwotICAgIEFTU0VSVChyYW5n
ZS5pc0Nsb3NlZCgpKTsKLSAgICBBU1NFUlQocmFuZ2UuYm94LT5pc1NWR0lubGluZVRleHRCb3go
KSk7Ci0KLSAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4
dEJveCo+KHJhbmdlLmJveCk7Ci0gICAgUmVuZGVyVGV4dCogdGV4dCA9IHRleHRCb3gtPnRleHRS
ZW5kZXJlcigpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7Ci0gICAg
cmV0dXJuIHN0eWxlLT5mb250KCkuZmxvYXRXaWR0aChzdmdUZXh0UnVuRm9ySW5saW5lVGV4dEJv
eCh0ZXh0LT5jaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94LT5zdGFydCgpICsgcmFuZ2Uuc3RhcnRPZmZz
ZXQsIHJhbmdlLmVuZE9mZnNldCAtIHJhbmdlLnN0YXJ0T2Zmc2V0LCBzdHlsZSwgdGV4dEJveCkp
OwotfQotCi1mbG9hdCBjdW1tdWxhdGVkSGVpZ2h0T2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShT
VkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UpCi17Ci0gICAgQVNTRVJUKCFyYW5nZS5p
c09wZW4oKSk7Ci0gICAgQVNTRVJUKHJhbmdlLmlzQ2xvc2VkKCkpOwotICAgIEFTU0VSVChyYW5n
ZS5ib3gtPmlzU1ZHSW5saW5lVGV4dEJveCgpKTsKLQotICAgIElubGluZVRleHRCb3gqIHRleHRC
b3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4ocmFuZ2UuYm94KTsKLSAgICByZXR1cm4g
KHJhbmdlLmVuZE9mZnNldCAtIHJhbmdlLnN0YXJ0T2Zmc2V0KSAqIHRleHRCb3gtPnRleHRSZW5k
ZXJlcigpLT5zdHlsZSgpLT5mb250KCkuaGVpZ2h0KCk7Ci19Ci0KLVRleHRSdW4gc3ZnVGV4dFJ1
bkZvcklubGluZVRleHRCb3goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCkKLXsK
LSAgICBBU1NFUlQodGV4dEJveCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIFRleHRSdW4g
cnVuKGNoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICAsIGxlbmd0aAotICAgICAgICAgICAgICAg
ICwgZmFsc2UgLyogYWxsb3dUYWJzICovCi0gICAgICAgICAgICAgICAgLCAwIC8qIHhQb3MsIG9u
bHkgcmVsZXZhbnQgd2l0aCBhbGxvd1RhYnM9dHJ1ZSAqLwotICAgICAgICAgICAgICAgICwgMCAv
KiBwYWRkaW5nLCBvbmx5IHJlbGV2YW50IGZvciBqdXN0aWZpZWQgdGV4dCwgbm90IHJlbGV2YW50
IGZvciBTVkcgKi8KLSAgICAgICAgICAgICAgICAsICF0ZXh0Qm94LT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkKLSAgICAgICAgICAgICAgICAsIHRleHRCb3gtPm1fZGlyT3ZlcnJpZGUgfHwgc3R5
bGUtPnZpc3VhbGx5T3JkZXJlZCgpIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwotCi0jaWYg
RU5BQkxFKFNWR19GT05UUykKLSAgICBydW4uc2V0UmVmZXJlbmNpbmdSZW5kZXJPYmplY3QodGV4
dEJveC0+dGV4dFJlbmRlcmVyKCktPnBhcmVudCgpKTsKLSNlbmRpZgotCi0gICAgLy8gRGlzYWJs
ZSBhbnkgd29yZC9jaGFyYWN0ZXIgcm91bmRpbmcuCi0gICAgcnVuLmRpc2FibGVSb3VuZGluZ0hh
Y2tzKCk7Ci0KLSAgICAvLyBXZSBoYW5kbGUgbGV0dGVyICYgd29yZCBzcGFjaW5nIG91cnNlbHZl
cy4KLSAgICBydW4uZGlzYWJsZVNwYWNpbmcoKTsKLSAgICByZXR1cm4gcnVuOwotfQotCi1mbG9h
dCBjYWxjdWxhdGVDU1NLZXJuaW5nKFNWR0VsZW1lbnQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkKLXsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKLSAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLQot
ICAgIFNWR0xlbmd0aCBrZXJuaW5nTGVuZ3RoID0gc3ZnU3R5bGUtPmtlcm5pbmcoKTsKLSAgICBp
ZiAoa2VybmluZ0xlbmd0aC51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlKQotICAg
ICAgICByZXR1cm4ga2VybmluZ0xlbmd0aC52YWx1ZUFzUGVyY2VudGFnZSgpICogZm9udC5waXhl
bFNpemUoKTsKLQotICAgIHJldHVybiBrZXJuaW5nTGVuZ3RoLnZhbHVlKGNvbnRleHQpOwotfQot
Ci1ib29sIGFwcGx5U1ZHS2VybmluZyhTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvJiBpbmZvLCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUsIFNWR0xhc3RHbHlwaEluZm8mIGxhc3RHbHlwaCwgY29uc3Qg
U3RyaW5nJiB1bmljb2RlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGdseXBoTmFtZSwgYm9vbCBpc1Zl
cnRpY2FsVGV4dCkKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGZsb2F0IGtlcm5pbmcg
PSAwLjBmOwotCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7Ci0gICAgaWYg
KCFmb250LmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgIGxhc3RHbHlwaC5pc1ZhbGlkID0gZmFsc2U7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBTVkdGb250RWxlbWVudCogc3Zn
Rm9udCA9IGZvbnQuc3ZnRm9udCgpOwotICAgIEFTU0VSVChzdmdGb250KTsKLQotICAgIGlmIChs
YXN0R2x5cGguaXNWYWxpZCkgewotICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAg
ICAgICBrZXJuaW5nID0gc3ZnRm9udC0+dmVydGljYWxLZXJuaW5nRm9yUGFpck9mU3RyaW5nc0Fu
ZEdseXBocyhsYXN0R2x5cGgudW5pY29kZSwgbGFzdEdseXBoLmdseXBoTmFtZSwgdW5pY29kZVN0
cmluZywgZ2x5cGhOYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAga2VybmluZyA9IHN2
Z0ZvbnQtPmhvcml6b250YWxLZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhsYXN0R2x5
cGgudW5pY29kZSwgbGFzdEdseXBoLmdseXBoTmFtZSwgdW5pY29kZVN0cmluZywgZ2x5cGhOYW1l
KTsKLSAgICB9Ci0KLSAgICBsYXN0R2x5cGgudW5pY29kZSA9IHVuaWNvZGVTdHJpbmc7Ci0gICAg
bGFzdEdseXBoLmdseXBoTmFtZSA9IGdseXBoTmFtZTsKLSAgICBsYXN0R2x5cGguaXNWYWxpZCA9
IHRydWU7Ci0gICAga2VybmluZyAqPSBzdHlsZS0+Zm9udCgpLnNpemUoKSAvIHN0eWxlLT5mb250
KCkucHJpbWFyeUZvbnQoKS0+dW5pdHNQZXJFbSgpOwotCi0gICAgaWYgKGtlcm5pbmcgIT0gMC4w
ZikgewotICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICBpbmZvLmN1cnkg
LT0ga2VybmluZzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5mby5jdXJ4IC09IGtlcm5p
bmc7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGluZm8pOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICBVTlVTRURfUEFSQU0obGFzdEds
eXBoKTsKLSAgICBVTlVTRURfUEFSQU0odW5pY29kZVN0cmluZyk7Ci0gICAgVU5VU0VEX1BBUkFN
KGdseXBoTmFtZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5oCShyZXZp
c2lvbiA2ODg2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAgICBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2lmbmRlZiBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzX2gKLSNkZWZpbmUgU1ZHVGV4
dExheW91dFV0aWxpdGllc19oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRm9udDsKLWNsYXNzIElubGluZVRleHRC
b3g7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLWNsYXNzIFNWR0Vs
ZW1lbnQ7Ci1jbGFzcyBTVkdSZW5kZXJTdHlsZTsKLWNsYXNzIFRleHRSdW47Ci0KLXN0cnVjdCBT
VkdDaGFyOwotc3RydWN0IFNWR0NoYXJhY3RlckxheW91dEluZm87Ci1zdHJ1Y3QgU1ZHSW5saW5l
Qm94Q2hhcmFjdGVyUmFuZ2U7Ci0KLXN0cnVjdCBTVkdMYXN0R2x5cGhJbmZvIHsKLSAgICBTVkdM
YXN0R2x5cGhJbmZvKCkKLSAgICAgICAgOiBpc1ZhbGlkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGlzVmFsaWQ7Ci0gICAgU3RyaW5nIHVuaWNvZGU7Ci0gICAgU3RyaW5nIGdseXBo
TmFtZTsKLX07Ci0KLWJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKGNvbnN0IFNWR1JlbmRlclN0
eWxlKik7Ci1mbG9hdCBhbGlnbm1lbnRCYXNlbGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4
dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0LCBjb25zdCBGb250Jik7Ci1mbG9hdCBnbHlwaE9y
aWVudGF0aW9uVG9BbmdsZShjb25zdCBTVkdSZW5kZXJTdHlsZSosIGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIGNvbnN0IFVDaGFyJik7Ci1mbG9hdCBhcHBseUdseXBoQWR2YW5jZUFuZFNoaWZ0UmVzcGVj
dGluZ09yaWVudGF0aW9uKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IG9yaWVudGF0aW9uQW5n
bGUsIGZsb2F0IGdseXBoV2lkdGgsIGZsb2F0IGdseXBoSGVpZ2h0LCBjb25zdCBGb250JiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1ZHQ2hh
ciYsIGZsb2F0JiB4T3JpZW50YXRpb25TaGlmdCwgZmxvYXQmIHlPcmllbnRhdGlvblNoaWZ0KTsK
LUZsb2F0UG9pbnQgdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShWZWN0b3I8U1ZHQ2hh
cj46Oml0ZXJhdG9yIHN0YXJ0LCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGVuZCk7Ci1mbG9h
dCBjdW1tdWxhdGVkV2lkdGhPZklubGluZUJveENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJveENo
YXJhY3RlclJhbmdlJik7Ci1mbG9hdCBjdW1tdWxhdGVkSGVpZ2h0T2ZJbmxpbmVCb3hDaGFyYWN0
ZXJSYW5nZShTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYpOwotVGV4dFJ1biBzdmdUZXh0UnVu
Rm9ySW5saW5lVGV4dEJveChjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0
eWxlKiwgY29uc3QgSW5saW5lVGV4dEJveCopOwotCi1mbG9hdCBjYWxjdWxhdGVDU1NLZXJuaW5n
KFNWR0VsZW1lbnQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKik7Ci1ib29sIGFwcGx5U1ZH
S2VybmluZyhTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvJiwgY29uc3QgUmVuZGVyU3R5bGUqLCBTVkdM
YXN0R2x5cGhJbmZvJiwgY29uc3QgU3RyaW5nJiB1bmljb2RlU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGdseXBoTmFtZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCk7Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDY4
ODY3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTcsOCArMjk3LDEyIEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJTdHlsZTo6
ZGlmZihjb25zdCAKICAgICBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMgPSBDb250
ZXh0U2Vuc2l0aXZlUHJvcGVydHlOb25lOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICBpZiAobV9z
dmdTdHlsZSAhPSBvdGhlci0+bV9zdmdTdHlsZSkKLSAgICAgICAgcmV0dXJuIG1fc3ZnU3R5bGUt
PmRpZmYob3RoZXItPm1fc3ZnU3R5bGUuZ2V0KCkpOworICAgIFN0eWxlRGlmZmVyZW5jZSBzdmdD
aGFuZ2UgPSBTdHlsZURpZmZlcmVuY2VFcXVhbDsKKyAgICBpZiAobV9zdmdTdHlsZSAhPSBvdGhl
ci0+bV9zdmdTdHlsZSkgeworICAgICAgICBzdmdDaGFuZ2UgPSBtX3N2Z1N0eWxlLT5kaWZmKG90
aGVyLT5tX3N2Z1N0eWxlLmdldCgpKTsKKyAgICAgICAgaWYgKHN2Z0NoYW5nZSA9PSBTdHlsZURp
ZmZlcmVuY2VMYXlvdXQpCisgICAgICAgICAgICByZXR1cm4gc3ZnQ2hhbmdlOworICAgIH0KICNl
bmRpZgogCiAgICAgaWYgKG1fYm94LT53aWR0aCgpICE9IG90aGVyLT5tX2JveC0+d2lkdGgoKSB8
fApAQCAtNDc1LDYgKzQ3OSwxNSBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyU3R5bGU6OmRpZmYo
Y29uc3QgCiAKICAgICBpZiAoKHZpc2liaWxpdHkoKSA9PSBDT0xMQVBTRSkgIT0gKG90aGVyLT52
aXNpYmlsaXR5KCkgPT0gQ09MTEFQU0UpKQogICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNl
TGF5b3V0OworICAgICAgICAgICAgICAgICAgICAKKyNpZiBFTkFCTEUoU1ZHKQorICAgIC8vIFNW
R1JlbmRlclN0eWxlOjpkaWZmKCkgbWlnaHQgaGF2ZSByZXR1cm5lZCBTdHlsZURpZmZlcmVuY2VS
ZXBhaW50LCBlZy4gaWYgZmlsbCBjaGFuZ2VzLgorICAgIC8vIElmIGVnLiB0aGUgZm9udC1zaXpl
IGNoYW5nZWQgYXQgdGhlIHNhbWUgdGltZSwgd2UncmUgbm90IGFsbG93ZWQgdG8gcmV0dXJuIFN0
eWxlRGlmZmVyZW5jZVJlcGFpbnQsCisgICAgLy8gYnV0IGhhdmUgdG8gcmV0dXJuIFN0eWxlRGlm
ZmVyZW5jZUxheW91dCwgdGhhdCdzIHdoeSAgdGhpcyBpZiBicmFuY2ggY29tZXMgYWZ0ZXIgYWxs
IGJyYW5jaGVzCisgICAgLy8gdGhhdCBhcmUgcmVsZXZhbnQgZm9yIFNWRyBhbmQgbWlnaHQgcmV0
dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dC4KKyAgICBpZiAoc3ZnQ2hhbmdlICE9IFN0eWxlRGlm
ZmVyZW5jZUVxdWFsKQorICAgICAgICByZXR1cm4gc3ZnQ2hhbmdlOworI2VuZGlmCiAKICAgICAv
LyBNYWtlIHN1cmUgdGhlc2UgbGVmdC90b3AvcmlnaHQvYm90dG9tIGNoZWNrcyBzdGF5IGJlbG93
IGFsbCBsYXlvdXQgY2hlY2tzIGFuZCBhYm92ZQogICAgIC8vIGFsbCB2aXNpYmxlIGNoZWNrcy4K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaAkocmV2aXNpb24g
Njg4NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTQsNiArMzE0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzTWFya2Vy
cygpIGNvbnN0IHsgcmV0dXJuICFtYXJrZXJTdGFydFJlc291cmNlKCkuaXNFbXB0eSgpIHx8ICFt
YXJrZXJNaWRSZXNvdXJjZSgpLmlzRW1wdHkoKSB8fCAhbWFya2VyRW5kUmVzb3VyY2UoKS5pc0Vt
cHR5KCk7IH0KICAgICBib29sIGhhc1N0cm9rZSgpIGNvbnN0IHsgcmV0dXJuIHN0cm9rZVBhaW50
KCktPnBhaW50VHlwZSgpICE9IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX05PTkU7IH0KICAgICBi
b29sIGhhc0ZpbGwoKSBjb25zdCB7IHJldHVybiBmaWxsUGFpbnQoKS0+cGFpbnRUeXBlKCkgIT0g
U1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfTk9ORTsgfQorICAgIGJvb2wgaXNWZXJ0aWNhbFdyaXRp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gd3JpdGluZ01vZGUoKSA9PSBXTV9UQlJMIHx8IHdyaXRp
bmdNb2RlKCkgPT0gV01fVEI7IH0KIAogcHJvdGVjdGVkOgogICAgIC8vIGluaGVyaXQKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlz
aW9uIDY4ODc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxOSArMzgsNDUgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1SZW5kZXJTVkdJbmxpbmVUZXh0OjpSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqIG4s
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyKSAKLSAgICA6IFJlbmRlclRleHQobiwgc3RyKQor
c3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYXBwbHlTVkdXaGl0ZXNwYWNlUnVsZXMoUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJpbmcsIGJvb2wgcHJlc2VydmVXaGl0ZVNwYWNlKQorewor
ICAgIGlmIChwcmVzZXJ2ZVdoaXRlU3BhY2UpIHsKKyAgICAgICAgLy8gU3BlYzogV2hlbiB4bWw6
c3BhY2U9InByZXNlcnZlIiwgdGhlIFNWRyB1c2VyIGFnZW50IHdpbGwgZG8gdGhlIGZvbGxvd2lu
ZyB1c2luZyBhCisgICAgICAgIC8vIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGNoYXJhY3RlciBkYXRh
IGNvbnRlbnQuIEl0IHdpbGwgY29udmVydCBhbGwgbmV3bGluZSBhbmQgdGFiCisgICAgICAgIC8v
IGNoYXJhY3RlcnMgaW50byBzcGFjZSBjaGFyYWN0ZXJzLiBUaGVuLCBpdCB3aWxsIGRyYXcgYWxs
IHNwYWNlIGNoYXJhY3RlcnMsIGluY2x1ZGluZworICAgICAgICAvLyBsZWFkaW5nLCB0cmFpbGlu
ZyBhbmQgbXVsdGlwbGUgY29udGlndW91cyBzcGFjZSBjaGFyYWN0ZXJzLgorICAgICAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gbmV3U3RyaW5nID0gc3RyaW5nLT5yZXBsYWNlKCdcdCcsICcgJyk7Cisg
ICAgICAgIG5ld1N0cmluZyA9IG5ld1N0cmluZy0+cmVwbGFjZSgnXG4nLCAnICcpOworICAgICAg
ICBuZXdTdHJpbmcgPSBuZXdTdHJpbmctPnJlcGxhY2UoJ1xyJywgJyAnKTsKKyAgICAgICAgcmV0
dXJuIG5ld1N0cmluZy5yZWxlYXNlKCk7CisgICAgfQorCisgICAgLy8gU3BlYzogV2hlbiB4bWw6
c3BhY2U9ImRlZmF1bHQiLCB0aGUgU1ZHIHVzZXIgYWdlbnQgd2lsbCBkbyB0aGUgZm9sbG93aW5n
IHVzaW5nIGEKKyAgICAvLyBjb3B5IG9mIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIgZGF0YSBjb250
ZW50LiBGaXJzdCwgaXQgd2lsbCByZW1vdmUgYWxsIG5ld2xpbmUKKyAgICAvLyBjaGFyYWN0ZXJz
LiBUaGVuIGl0IHdpbGwgY29udmVydCBhbGwgdGFiIGNoYXJhY3RlcnMgaW50byBzcGFjZSBjaGFy
YWN0ZXJzLgorICAgIC8vIFRoZW4sIGl0IHdpbGwgc3RyaXAgb2ZmIGFsbCBsZWFkaW5nIGFuZCB0
cmFpbGluZyBzcGFjZSBjaGFyYWN0ZXJzLgorICAgIC8vIFRoZW4sIGFsbCBjb250aWd1b3VzIHNw
YWNlIGNoYXJhY3RlcnMgd2lsbCBiZSBjb25zb2xpZGF0ZWQuCisgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IG5ld1N0cmluZyA9IHN0cmluZy0+cmVwbGFjZSgnXG4nLCBTdHJpbmdJbXBsOjplbXB0eSgp
KTsKKyAgICBuZXdTdHJpbmcgPSBuZXdTdHJpbmctPnJlcGxhY2UoJ1xyJywgU3RyaW5nSW1wbDo6
ZW1wdHkoKSk7CisgICAgbmV3U3RyaW5nID0gbmV3U3RyaW5nLT5yZXBsYWNlKCdcdCcsICcgJyk7
CisgICAgcmV0dXJuIG5ld1N0cmluZy5yZWxlYXNlKCk7Cit9CisKK1JlbmRlclNWR0lubGluZVRl
eHQ6OlJlbmRlclNWR0lubGluZVRleHQoTm9kZSogbiwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBz
dHJpbmcpCisgICAgOiBSZW5kZXJUZXh0KG4sIGFwcGx5U1ZHV2hpdGVzcGFjZVJ1bGVzKHN0cmlu
ZywgZmFsc2UpKQogewogfQogCiB2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7
CiAgICAgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotICAgIAot
ICAgIC8vIEZJWE1FOiBTaG91bGQgb3B0aW1pemUgdGhpcy4KLSAgICAvLyBTVkcgdGV4dCBpcyBh
bHdheXMgdHJhbnNmb3JtZWQuCi0gICAgaWYgKFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0VG9UcmFu
c2Zvcm0gPSBvcmlnaW5hbFRleHQoKSkKLSAgICAgICAgc2V0VGV4dCh0ZXh0VG9UcmFuc2Zvcm0u
cmVsZWFzZSgpLCB0cnVlKTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IHN0
eWxlKCk7CisgICAgaWYgKCFuZXdTdHlsZSB8fCBuZXdTdHlsZS0+d2hpdGVTcGFjZSgpICE9IFBS
RSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFvbGRTdHlsZSB8fCBvbGRTdHlsZS0+d2hp
dGVTcGFjZSgpICE9IFBSRSkKKyAgICAgICAgc2V0VGV4dChhcHBseVNWR1doaXRlc3BhY2VSdWxl
cyhvcmlnaW5hbFRleHQoKSwgdHJ1ZSksIHRydWUpOwogfQogCiBJbmxpbmVUZXh0Qm94KiBSZW5k
ZXJTVkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KCkKQEAgLTgwLDIwICsxMDYsMjIgQEAgYm9v
bCBSZW5kZXJTVkdJbmxpbmVUZXh0OjpjaGFyYWN0ZXJTdGFydAogICAgIEFTU0VSVChwb3NpdGlv
biA+PSAwKTsKICAgICBBU1NFUlQocG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KHRleHRMZW5n
dGgoKSkpOwogCisgICAgLy8gRWFjaCA8dGV4dFBhdGg+IGVsZW1lbnQgc3RhcnRzIGEgbmV3IHRl
eHQgY2h1bmssIHJlZ2FyZGxlc3Mgb2YgYW55IHgveSB2YWx1ZXMuCisgICAgaWYgKCFwb3NpdGlv
biAmJiBwYXJlbnQoKS0+aXNTVkdUZXh0UGF0aCgpICYmICFwcmV2aW91c1NpYmxpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpbnQgY3VycmVudFBvc2l0aW9uID0gMDsKLSAgICB1
bnNpZ25lZCBzaXplID0gbV9hdHRyaWJ1dGVzLmNoYXJhY3RlckRhdGFWYWx1ZXMoKS5zaXplKCk7
CisgICAgdW5zaWduZWQgc2l6ZSA9IG1fYXR0cmlidXRlcy50ZXh0TWV0cmljc1ZhbHVlcygpLnNp
emUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpDaGFyYWN0ZXJEYXRhJiBkYXRhID0gbV9h
dHRyaWJ1dGVzLmNoYXJhY3RlckRhdGFWYWx1ZXMoKS5hdChpKTsKKyAgICAgICAgY29uc3QgU1ZH
VGV4dE1ldHJpY3MmIG1ldHJpY3MgPSBtX2F0dHJpYnV0ZXMudGV4dE1ldHJpY3NWYWx1ZXMoKS5h
dChpKTsKIAogICAgICAgICAvLyBXZSBmb3VuZCB0aGUgZGVzaXJlZCBjaGFyYWN0ZXIuCiAgICAg
ICAgIGlmIChjdXJyZW50UG9zaXRpb24gPT0gcG9zaXRpb24pIHsKLSAgICAgICAgICAgIGlmIChp
c1ZlcnRpY2FsV3JpdGluZ01vZGUoc3R5bGUoKS0+c3ZnU3R5bGUoKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1fYXR0cmlidXRlcy55VmFsdWVzKCkuYXQocG9zaXRpb24pICE9IFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBtX2F0
dHJpYnV0ZXMueFZhbHVlcygpLmF0KHBvc2l0aW9uKSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
czo6ZW1wdHlWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlcy54VmFsdWVz
KCkuYXQocG9zaXRpb24pICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkK
KyAgICAgICAgICAgICAgICB8fCBtX2F0dHJpYnV0ZXMueVZhbHVlcygpLmF0KHBvc2l0aW9uKSAh
PSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgY3VycmVudFBvc2l0aW9uICs9IGRhdGEuc3BhbnNDaGFyYWN0ZXJzOworICAgICAgICBj
dXJyZW50UG9zaXRpb24gKz0gbWV0cmljcy5sZW5ndGgoKTsKICAgICAgICAgaWYgKGN1cnJlbnRQ
b3NpdGlvbiA+IHBvc2l0aW9uKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTAyLDEw
ICsxMzAsNjEgQEAgYm9vbCBSZW5kZXJTVkdJbmxpbmVUZXh0OjpjaGFyYWN0ZXJTdGFydAogICAg
IC8vIFRoYXQgbWVhbnMgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBkYXRhIGRlc2NyaWJlZCBhIHNp
bmdsZSBnbHlwaCwgY29uc2lzdGluZyBvZiBtdWx0aXBsZSB1bmljb2RlIGNoYXJhY3RlcnMuCiAg
ICAgLy8gVGhlIGNvbnNlcXVlbmNlIGlzIHRoYXQgdGhlIGRlc2lyZWQgY2hhcmFjdGVyIGRvZXMg
bm90IGRlZmluZSBhIG5ldyBhYnNvbHV0ZSB4L3kgcG9zaXRpb24sIGV2ZW4gaWYgcHJlc2VudCBp
biB0aGUgeC95IHRlc3QuCiAgICAgLy8gVGhpcyBjb2RlIGlzIHRlc3RlZCBieSBzdmcvVzNDLVNW
Ry0xLjEvdGV4dC10ZXh0LTA2LXQuc3ZnIChhbmQgZGVzY3JpYmVkIGluIGRldGFpbCwgd2h5IHRo
aXMgaW5mbHVlbmNlcyBjaHVuayBkZXRlY3Rpb24pLgotICAgIEFTU0VSVChjdXJyZW50UG9zaXRp
b24gPiBwb3NpdGlvbik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitWaXNpYmxlUG9zaXRpb24g
UmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9p
bnQpCit7CisgICAgaWYgKCFmaXJzdFRleHRCb3goKSB8fCAhdGV4dExlbmd0aCgpKQorICAgICAg
ICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOworCisgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAg
IGludCBiYXNlbGluZSA9IHN0eWxlLT5mb250KCkuYXNjZW50KCk7CisKKyAgICBSZW5kZXJCbG9j
ayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgQVNTRVJU
KGNvbnRhaW5pbmdCbG9jayk7CisKKyAgICAvLyBNYXAgbG9jYWwgcG9pbnQgdG8gYWJzb2x1dGUg
cG9pbnQsIGFzIHRoZSBjaGFyYWN0ZXIgb3JpZ2lucyBzdG9yZWQgaW4gdGhlIHRleHQgZnJhZ21l
bnRzIHVzZSBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICBGbG9hdFBvaW50IGFic29sdXRlUG9p
bnQocG9pbnQpOworICAgIGFic29sdXRlUG9pbnQubW92ZShjb250YWluaW5nQmxvY2stPngoKSwg
Y29udGFpbmluZ0Jsb2NrLT55KCkpOworCisgICAgZmxvYXQgY2xvc2VzdERpc3RhbmNlID0gc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworICAgIGZsb2F0IGNsb3Nlc3REaXN0YW5j
ZVBvc2l0aW9uID0gMDsKKyAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQqIGNsb3Nlc3REaXN0YW5j
ZUZyYWdtZW50ID0gMDsKKyAgICBTVkdJbmxpbmVUZXh0Qm94KiBjbG9zZXN0RGlzdGFuY2VCb3gg
PSAwOworCisgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94
OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgQVNTRVJUKGJveC0+aXNTVkdJ
bmxpbmVUZXh0Qm94KCkpOworICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3Rh
dGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGJveCk7CisgICAgICAgIFZlY3RvcjxTVkdUZXh0
RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94LT50ZXh0RnJhZ21lbnRzKCk7CisKKyAgICAg
ICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBmcmFnbWVudHMuc2l6ZSgpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgeworICAg
ICAgICAgICAgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChp
KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBmcmFnbWVudFJlY3QoZnJhZ21lbnQueCwgZnJhZ21l
bnQueSAtIGJhc2VsaW5lLCBmcmFnbWVudC53aWR0aCwgZnJhZ21lbnQuaGVpZ2h0KTsKKyAgICAg
ICAgICAgIGlmICghZnJhZ21lbnQudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAg
ICAgICBmcmFnbWVudFJlY3QgPSBmcmFnbWVudC50cmFuc2Zvcm0ubWFwUmVjdChmcmFnbWVudFJl
Y3QpOworCisgICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IHBvd2YoZnJhZ21lbnRSZWN0Lngo
KSAtIGFic29sdXRlUG9pbnQueCgpLCAyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvd2YoZnJhZ21lbnRSZWN0LnkoKSArIGZyYWdtZW50UmVjdC5oZWlnaHQoKSAvIDIgLSBhYnNv
bHV0ZVBvaW50LnkoKSwgMik7CisKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IGNsb3Nlc3RE
aXN0YW5jZSkgeworICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlOwor
ICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZUJveCA9IHRleHRCb3g7CisgICAgICAgICAg
ICAgICAgY2xvc2VzdERpc3RhbmNlRnJhZ21lbnQgPSAmZnJhZ21lbnQ7CisgICAgICAgICAgICAg
ICAgY2xvc2VzdERpc3RhbmNlUG9zaXRpb24gPSBmcmFnbWVudFJlY3QueCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjbG9zZXN0RGlzdGFuY2VGcmFnbWVu
dCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RSRUFNKTsK
KworICAgIGludCBvZmZzZXQgPSBjbG9zZXN0RGlzdGFuY2VCb3gtPm9mZnNldEZvclBvc2l0aW9u
SW5GcmFnbWVudCgqY2xvc2VzdERpc3RhbmNlRnJhZ21lbnQsIGFic29sdXRlUG9pbnQueCgpIC0g
Y2xvc2VzdERpc3RhbmNlUG9zaXRpb24sIHRydWUpOworICAgIHJldHVybiBjcmVhdGVWaXNpYmxl
UG9zaXRpb24ob2Zmc2V0ICsgY2xvc2VzdERpc3RhbmNlQm94LT5zdGFydCgpLCBvZmZzZXQgPiAw
ID8gVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgOiBET1dOU1RSRUFNKTsKK30KKwogfQogCiAjZW5k
aWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuaAkocmV2aXNpb24gNjg4NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTVkdJbmxpbmVUZXh0Qm94OworCiBjbGFz
cyBSZW5kZXJTVkdJbmxpbmVUZXh0IDogcHVibGljIFJlbmRlclRleHQgewogcHVibGljOgogICAg
IFJlbmRlclNWR0lubGluZVRleHQoTm9kZSosIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4pOwogCiAg
ICAgYm9vbCBjaGFyYWN0ZXJTdGFydHNOZXdUZXh0Q2h1bmsoaW50IHBvc2l0aW9uKSBjb25zdDsK
KworICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzJiBsYXlvdXRBdHRyaWJ1dGVzKCkgeyByZXR1
cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAgY29uc3QgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmIGxh
eW91dEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KICAgICB2b2lk
IHN0b3JlTGF5b3V0QXR0cmlidXRlcyhjb25zdCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgYXR0
cmlidXRlcykgeyBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOyB9CiAKIHByaXZhdGU6CkBAIC01
MCw2ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGluZVRleHQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCBJbnRSZWN0IGxv
Y2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUgPSAwKTsKICAgICB2aXJ0dWFsIEludFJlY3QgbGluZXNCb3VuZGluZ0JveCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgSW5saW5lVGV4dEJveCogY3JlYXRlVGV4dEJveCgpOwpAQCAt
NTcsOCArNjMsMjIgQEAgcHJpdmF0ZToKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyBtX2F0
dHJpYnV0ZXM7CiB9OwogCitpbmxpbmUgUmVuZGVyU1ZHSW5saW5lVGV4dCogdG9SZW5kZXJTVkdJ
bmxpbmVUZXh0KFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8
IG9iamVjdC0+aXNTVkdJbmxpbmVUZXh0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJTVkdJbmxpbmVUZXh0Kj4ob2JqZWN0KTsKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpCitp
bmxpbmUgY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCogdG9SZW5kZXJTVkdJbmxpbmVUZXh0KGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVj
dC0+aXNTVkdJbmxpbmVUZXh0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5k
ZXJTVkdJbmxpbmVUZXh0Kj4ob2JqZWN0KTsKK30KIAotI2VuZGlmIC8vICFSZW5kZXJTVkdJbmxp
bmVUZXh0X2gKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3Nhcnkg
Y2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdJbmxpbmVUZXh0KGNvbnN0IFJlbmRlclNWR0lubGluZVRl
eHQqKTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBSZW5kZXJTVkdJ
bmxpbmVUZXh0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJ
KHJldmlzaW9uIDY4ODc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiU1ZHVVJJUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1TdGF0ZS5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTg0LDYgKzg1LDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQog
ICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKICAgICB9CiAK
KyAgICAvLyBQZXJmb3JtIFNWRyB0ZXh0IGxheW91dCBwaGFzZSBvbmUgKHNlZSBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXIgZm9yIGRldGFpbHMpLgogICAgIFNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzQnVpbGRlciBsYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjsKICAgICBsYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlci5idWlsZExheW91dEF0dHJpYnV0ZXNGb3JUZXh0U3VidHJlZSh0aGlzKTsKIApA
QCAtMTUzLDYgKzE1NSwyMyBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KGNvbnN0
IEhpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHVGV4
dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRlbnRzKQorewor
ICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBmaXJzdFJvb3RCb3goKTsKKyAgICBpZiAoIXJv
b3RCb3gpCisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9XTlNUUkVB
TSk7CisKKyAgICBBU1NFUlQocm9vdEJveC0+aXNTVkdSb290SW5saW5lQm94KCkpOworICAgIEFT
U0VSVCghcm9vdEJveC0+bmV4dFJvb3RCb3goKSk7CisgICAgQVNTRVJUKGNoaWxkcmVuSW5saW5l
KCkpOworCisgICAgSW5saW5lQm94KiBjbG9zZXN0Qm94ID0gc3RhdGljX2Nhc3Q8U1ZHUm9vdElu
bGluZUJveCo+KHJvb3RCb3gpLT5jbG9zZXN0TGVhZkNoaWxkRm9yUG9zaXRpb24ocG9pbnRJbkNv
bnRlbnRzKTsKKyAgICBpZiAoIWNsb3Nlc3RCb3gpCisgICAgICAgIHJldHVybiBjcmVhdGVWaXNp
YmxlUG9zaXRpb24oMCwgRE9XTlNUUkVBTSk7CisKKyAgICByZXR1cm4gY2xvc2VzdEJveC0+cmVu
ZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChwb2ludEluQ29udGVudHMueCgpLCBj
bG9zZXN0Qm94LT5tX3kpKTsKK30KKwogdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKIHsKICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fi
c29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDY4ODc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRl
c3RBY3Rpb24pOworICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA2ODg3
NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDI4IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKKyNp
bmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5o
IgogCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQg
U1ZHSW5saW5lRmxvd0JveDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFp
bnRJbmZvKQoreworICAgIEFTU0VSVChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVn
cm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pOworICAgIEFT
U0VSVCghcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSk7CisKKyAgICBQYWlu
dEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBmb3IgKElubGluZUJveCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsK
KyAgICAgICAgaWYgKGNoaWxkLT5pc1NWR0lubGluZVRleHRCb3goKSkKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihjaGlsZCktPnBhaW50U2VsZWN0aW9uQmFja2dy
b3VuZChjaGlsZFBhaW50SW5mbyk7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5pc1NWR0lubGlu
ZUZsb3dCb3goKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR0lubGluZUZsb3dCb3gqPihj
aGlsZCktPnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChjaGlsZFBhaW50SW5mbyk7CisgICAgfQor
fQorCiB2b2lkIFNWR0lubGluZUZsb3dCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQsIGludCkKIHsKICAgICBBU1NFUlQocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKQEAgLTQy
LDggKzYwLDEyIEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAg
ICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKICAgICBpZiAoU1ZHUmVuZGVyU3Vw
cG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChib3hSZW5kZXJlciwgY2hpbGRQYWludElu
Zm8pKSB7Ci0gICAgICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkKKyAgICAgICAgZm9yIChJbmxpbmVCb3gq
IGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgp
KSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dEJveCgpKQorICAgICAg
ICAgICAgICAgIGNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0Rm9yUmVuZGVyZXIodG9SZW5kZXJT
VkdJbmxpbmVUZXh0KHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihjaGlsZCktPnRleHRS
ZW5kZXJlcigpKSk7CisKICAgICAgICAgICAgIGNoaWxkLT5wYWludChjaGlsZFBhaW50SW5mbywg
MCwgMCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hS
ZW5kZXJTVkdDb250ZW50KGJveFJlbmRlcmVyLCBjaGlsZFBhaW50SW5mbywgcGFpbnRJbmZvLmNv
bnRleHQpOwpAQCAtNTgsNiArODAsNjQgQEAgSW50UmVjdCBTVkdJbmxpbmVGbG93Qm94OjpjYWxj
dWxhdGVCb3VuZAogICAgIHJldHVybiBjaGlsZFJlY3Q7CiB9CiAKK3ZvaWQgU1ZHSW5saW5lRmxv
d0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcihSZW5kZXJTVkdJbmxp
bmVUZXh0KiB0ZXh0UmVuZGVyZXIpCit7CisgICAgQVNTRVJUKHRleHRSZW5kZXJlcik7CisKKyAg
ICBOb2RlKiBub2RlID0gdGV4dFJlbmRlcmVyLT5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHRleHRSZW5kZXJlci0+c3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gdGV4dFJlbmRlcmVyLT5kb2N1bWVudCgpOworICAgIFZlY3Rv
cjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IGRvY3VtZW50LT5tYXJrZXJzKCktPm1hcmtlcnNG
b3JOb2RlKHRleHRSZW5kZXJlci0+bm9kZSgpKTsKKworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtl
cj46Oml0ZXJhdG9yIG1hcmtlckVuZCA9IG1hcmtlcnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8
RG9jdW1lbnRNYXJrZXI+OjppdGVyYXRvciBtYXJrZXJJdCA9IG1hcmtlcnMuYmVnaW4oKTsgbWFy
a2VySXQgIT0gbWFya2VyRW5kOyArK21hcmtlckl0KSB7CisgICAgICAgIGNvbnN0IERvY3VtZW50
TWFya2VyJiBtYXJrZXIgPSAqbWFya2VySXQ7CisKKyAgICAgICAgLy8gU1ZHIGlzIG9ubHkgaW50
ZXJlc3N0ZWQgaW4gdGhlIFRleHRNYXRjaCBtYXJrZXIsIGZvciBub3cuCisgICAgICAgIGlmICht
YXJrZXIudHlwZSAhPSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgRmxvYXRSZWN0IG1hcmtlclJlY3Q7CisgICAgICAgIGZvciAoSW5s
aW5lVGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3gg
PSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChib3gtPmlzU1ZHSW5s
aW5lVGV4dEJveCgpKTsKKyAgICAgICAgICAgIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBz
dGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oYm94KTsKKworICAgICAgICAgICAgaW50IG1h
cmtlclN0YXJ0UG9zaXRpb24gPSBtYXg8aW50PihtYXJrZXIuc3RhcnRPZmZzZXQgLSB0ZXh0Qm94
LT5zdGFydCgpLCAwKTsKKyAgICAgICAgICAgIGludCBtYXJrZXJFbmRQb3NpdGlvbiA9IG1pbjxp
bnQ+KG1hcmtlci5lbmRPZmZzZXQgLSB0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSk7
CisKKyAgICAgICAgICAgIGlmIChtYXJrZXJTdGFydFBvc2l0aW9uID49IG1hcmtlckVuZFBvc2l0
aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpbnQgZnJhZ21l
bnRTdGFydFBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIGludCBmcmFnbWVudEVuZFBvc2l0aW9u
ID0gMDsKKworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdt
ZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRl
eHRGcmFnbWVudHNTaXplID0gZnJhZ21lbnRzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKwor
ICAgICAgICAgICAgICAgIGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IG1hcmtlclN0YXJ0UG9zaXRp
b247CisgICAgICAgICAgICAgICAgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IG1hcmtlckVuZFBvc2l0
aW9uOworICAgICAgICAgICAgICAgIGlmICghdGV4dEJveC0+bWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBm
cmFnbWVudEVuZFBvc2l0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICBGbG9hdFJlY3QgZnJhZ21lbnRSZWN0ID0gdGV4dEJveC0+c2VsZWN0aW9u
UmVjdEZvclRleHRGcmFnbWVudChmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFn
bWVudEVuZFBvc2l0aW9uLCBzdHlsZSk7CisgICAgICAgICAgICAgICAgaWYgKCFmcmFnbWVudC50
cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFJlY3Qg
PSBmcmFnbWVudC50cmFuc2Zvcm0ubWFwUmVjdChmcmFnbWVudFJlY3QpOworCisgICAgICAgICAg
ICAgICAgbWFya2VyUmVjdC51bml0ZShmcmFnbWVudFJlY3QpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS0+c2V0UmVuZGVyZWRSZWN0Rm9y
TWFya2VyKG5vZGUsIG1hcmtlciwgdGV4dFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKG1h
cmtlclJlY3QpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgIH0KK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gNjg4NzQpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyU1ZHSW5saW5l
VGV4dDsKKwogY2xhc3MgU1ZHSW5saW5lRmxvd0JveCA6IHB1YmxpYyBJbmxpbmVGbG93Qm94IHsK
IHB1YmxpYzoKICAgICBTVkdJbmxpbmVGbG93Qm94KFJlbmRlck9iamVjdCogb2JqKQpAQCAtMzcs
MTMgKzM5LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgdmlydHVhbCBib29sIGlz
U1ZHSW5saW5lRmxvd0JveCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGlu
dCB2aXJ0dWFsTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbEhlaWdodDsg
fQogICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChpbnQgaCkgeyBtX2xvZ2ljYWxIZWlnaHQgPSBo
OyB9CiAKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChQYWludEluZm8mKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAg
dmlydHVhbCBJbnRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdDsKLSAgICB2b2lkIGxh
eW91dEZsb3dCb3goKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJS
ZWN0Rm9yUmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dCopOwogCiBwcml2YXRlOgogICAgIGlu
dCBtX2xvZ2ljYWxIZWlnaHQ7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCShyZXZpc2lvbiA2ODg3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDkgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVGbG93Qm94LmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdSb290SW5saW5l
Qm94LmgiCi0jaW5jbHVkZSAiU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIgotCi0jaW5jbHVkZSA8
ZmxvYXQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNDEsMTUzICszOSwxNjYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogU1ZHSW5saW5lVGV4dEJveDo6U1ZHSW5saW5lVGV4dEJveChS
ZW5kZXJPYmplY3QqIG9iamVjdCkKICAgICA6IElubGluZVRleHRCb3gob2JqZWN0KQogICAgICwg
bV9sb2dpY2FsSGVpZ2h0KDApCi0gICAgLCBtX3BhaW50aW5nUmVzb3VyY2UoMCkKICAgICAsIG1f
cGFpbnRpbmdSZXNvdXJjZU1vZGUoQXBwbHlUb0RlZmF1bHRNb2RlKQorICAgICwgbV9zdGFydHNO
ZXdUZXh0Q2h1bmsoZmFsc2UpCisgICAgLCBtX3BhaW50aW5nUmVzb3VyY2UoMCkKIHsKIH0KIAot
U1ZHUm9vdElubGluZUJveCogU1ZHSW5saW5lVGV4dEJveDo6c3ZnUm9vdElubGluZUJveCgpIGNv
bnN0CitpbnQgU1ZHSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50LCBib29sKSBj
b25zdAogewotICAgIC8vIEZpbmQgYXNzb2NpYXRlZCByb290IGlubGluZSBib3gKLSAgICBJbmxp
bmVGbG93Qm94KiBwYXJlbnRCb3ggPSBwYXJlbnQoKTsKKyAgICAvLyBTVkcgZG9lc24ndCB1c2Ug
dGhlIHN0YW5kYXJkIG9mZnNldCA8LT4gcG9zaXRpb24gc2VsZWN0aW9uIHN5c3RlbSwgYXMgaXQn
cyBub3Qgc3VpdGFibGUgZm9yIFNWR3MgY29tcGxleCBuZWVkcy4KKyAgICAvLyB2ZXJ0aWNhbCB0
ZXh0IHNlbGVjdGlvbiwgaW5saW5lIGJveGVzIHNwYW5uaW5nIG11bHRpcGxlIGxpbmVzIChjb250
cmFyeSB0byBIVE1MLCBldGMuKQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biAwOworfQogCi0gICAgd2hpbGUgKHBhcmVudEJveCAmJiAhcGFyZW50Qm94LT5pc1Jvb3RJbmxp
bmVCb3goKSkKLSAgICAgICAgcGFyZW50Qm94ID0gcGFyZW50Qm94LT5wYXJlbnQoKTsKK2ludCBT
VkdJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQoY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiBmcmFnbWVudCwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0Cit7CisgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdGhpcy0+dGV4
dFJlbmRlcmVyKCk7CisgICAgQVNTRVJUKHRleHRSZW5kZXJlcik7CiAKLSAgICBBU1NFUlQocGFy
ZW50Qm94KTsKLSAgICBBU1NFUlQocGFyZW50Qm94LT5pc1Jvb3RJbmxpbmVCb3goKSk7CisgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dFJlbmRlcmVyLT5zdHlsZSgpOworICAgIEFTU0VSVChz
dHlsZSk7CisKKyAgICBUZXh0UnVuIHRleHRSdW4oY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZnJh
Z21lbnQpKTsKIAotICAgIGlmICghcGFyZW50Qm94LT5pc1NWR1Jvb3RJbmxpbmVCb3goKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgLy8gRXZlbnR1YWxseSBoYW5kbGUgbGVuZ3RoQWRqdXN0PSJz
cGFjaW5nQW5kR2x5cGhzIi4KKyAgICAvLyBGSVhNRTogSGFuZGxlIHZlcnRpY2FsIHRleHQuCisg
ICAgaWYgKCFmcmFnbWVudC50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICB0ZXh0UnVu
LnNldEhvcml6b250YWxHbHlwaFN0cmV0Y2gobmFycm93UHJlY2lzaW9uVG9GbG9hdChmcmFnbWVu
dC50cmFuc2Zvcm0ueFNjYWxlKCkpKTsKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdSb290
SW5saW5lQm94Kj4ocGFyZW50Qm94KTsKKyAgICByZXR1cm4gZnJhZ21lbnQucG9zaXRpb25MaXN0
T2Zmc2V0IC0gc3RhcnQoKSArIHN0eWxlLT5mb250KCkub2Zmc2V0Rm9yUG9zaXRpb24odGV4dFJ1
biwgcG9zaXRpb24sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotdm9pZCBTVkdJbmxpbmVU
ZXh0Qm94OjptZWFzdXJlQ2hhcmFjdGVyKFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IHBvc2l0aW9u
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lLCBTdHJpbmcmIHVuaWNvZGVT
dHJpbmcsIGZsb2F0JiBnbHlwaFdpZHRoLCBmbG9hdCYgZ2x5cGhIZWlnaHQpIGNvbnN0CitpbnQg
U1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50KSBjb25zdAogewotICAgIEFT
U0VSVChzdHlsZSk7CisgICAgLy8gU1ZHIGRvZXNuJ3QgdXNlIHRoZSBvZmZzZXQgPC0+IHBvc2l0
aW9uIHNlbGVjdGlvbiBzeXN0ZW0uIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQogCi0gICAgaW50IG9mZnNldCA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBlbmQoKSAtIHBvc2l0aW9uIDogc3RhcnQoKSArIHBvc2l0aW9uOwotICAgIGludCBleHRyYUNo
YXJzQXZhaWxhYmxlID0gbGVuKCkgLSBwb3NpdGlvbiAtIDE7Ci0gICAgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMgPSB0ZXh0UmVuZGVyZXIoKS0+Y2hhcmFjdGVycygpOworRmxvYXRSZWN0IFNWR0lu
bGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwgUmVu
ZGVyU3R5bGUqIHN0eWxlKQoreworICAgIEFTU0VSVChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRp
b24pOwogCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7Ci0gICAgZ2x5cGhX
aWR0aCA9IGZvbnQuZmxvYXRXaWR0aChzdmdUZXh0UnVuRm9ySW5saW5lVGV4dEJveChjaGFyYWN0
ZXJzICsgb2Zmc2V0LCAxLCBzdHlsZSwgdGhpcyksIGV4dHJhQ2hhcnNBdmFpbGFibGUsIGNoYXJz
Q29uc3VtZWQsIGdseXBoTmFtZSk7Ci0gICAgZ2x5cGhIZWlnaHQgPSBmb250LmhlaWdodCgpOwot
Ci0gICAgLy8gVGhlIHVuaWNvZGVTdHJpbmcgLyBnbHlwaE5hbWUgcGFpciBpcyBuZWVkZWQgZm9y
IGtlcm5pbmcgY2FsY3VsYXRpb25zLgotICAgIHVuaWNvZGVTdHJpbmcgPSBTdHJpbmcoY2hhcmFj
dGVycyArIG9mZnNldCwgY2hhcnNDb25zdW1lZCk7CisgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2lu
KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBmb250LmFzY2VudCgpKTsKKyAgICByZXR1cm4gZm9u
dC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFnbWVudCks
IHRleHRPcmlnaW4sIGZyYWdtZW50LmhlaWdodCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24p
OwogfQogCi1pbnQgU1ZHSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHhDb29y
ZGluYXRlLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAorSW50UmVjdCBTVkdJbmxp
bmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KGludCwgaW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50
IGVuZFBvc2l0aW9uKQogewotICAgIEFTU0VSVCghbV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFsaWQo
KSk7Ci0gICAgZmxvYXQgeCA9IHhDb29yZGluYXRlOworICAgIGludCBib3hTdGFydCA9IHN0YXJ0
KCk7CisgICAgc3RhcnRQb3NpdGlvbiA9IG1heChzdGFydFBvc2l0aW9uIC0gYm94U3RhcnQsIDAp
OworICAgIGVuZFBvc2l0aW9uID0gbWluKGVuZFBvc2l0aW9uIC0gYm94U3RhcnQsIHN0YXRpY19j
YXN0PGludD4obGVuKCkpKTsKKyAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJl
ciA9IHRoaXMtPnRleHRSZW5kZXJlcigpOwotICAgIEFTU0VSVCh0ZXh0UmVuZGVyZXIpOworICAg
IFJlbmRlclRleHQqIHRleHQgPSB0ZXh0UmVuZGVyZXIoKTsKKyAgICBBU1NFUlQodGV4dCk7CiAK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0UmVuZGVyZXItPnN0eWxlKCk7CisgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUoKTsKICAgICBBU1NFUlQoc3R5bGUpOwogCi0g
ICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IHRleHRSZW5kZXJlci0+Y29udGFpbmlu
Z0Jsb2NrKCk7Ci0gICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jayk7Ci0KLSAgICAvLyBNb3ZlIGlu
Y29taW5nIHJlbGF0aXZlIHggcG9zaXRpb24gdG8gYWJzb2x1dGUgcG9zaXRpb24sIGFzIHRoZSBj
aGFyYWN0ZXIgb3JpZ2lucyBzdG9yZWQgaW4gdGhlIGNodW5rIHBhcnRzIHVzZSBhYnNvbHV0ZSBj
b29yZGluYXRlcwotICAgIHggKz0gY29udGFpbmluZ0Jsb2NrLT54KCk7Ci0KLSAgICAvLyBGaWd1
cmUgb3V0IHdoaWNoIHRleHQgY2h1bmsgcGFydCBpcyBoaXQKLSAgICBTVkdUZXh0Q2h1bmtQYXJ0
IGhpdFBhcnQ7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3Q7CisgICAgaW50IGZyYWdtZW50
U3RhcnRQb3NpdGlvbiA9IDA7CisgICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOwogCi0g
ICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3N2Z1RleHRDaHVua1BhcnRzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVua1Bh
cnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3ZnVGV4dENodW5rUGFydHMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQgPSAq
aXQ7CisgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBtX3RleHRGcmFnbWVudHMuc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytp
KSB7CisgICAgICAgIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBtX3RleHRGcmFn
bWVudHMuYXQoaSk7CisKKyAgICAgICAgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gc3RhcnRQb3Np
dGlvbjsKKyAgICAgICAgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uOworICAgICAg
ICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoZnJhZ21l
bnQsIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbikpCisgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlJ3JlIHBhc3QgdGhl
IGhpdCBwYXJ0LgotICAgICAgICBpZiAoeCA8IHBhcnQuZmlyc3RDaGFyYWN0ZXItPngpCi0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdCA9IHNlbGVjdGlv
blJlY3RGb3JUZXh0RnJhZ21lbnQoZnJhZ21lbnQsIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgZnJh
Z21lbnRFbmRQb3NpdGlvbiwgc3R5bGUpOworICAgICAgICBpZiAoIWZyYWdtZW50LnRyYW5zZm9y
bS5pc0lkZW50aXR5KCkpCisgICAgICAgICAgICBmcmFnbWVudFJlY3QgPSBmcmFnbWVudC50cmFu
c2Zvcm0ubWFwUmVjdChmcmFnbWVudFJlY3QpOwogCi0gICAgICAgIGhpdFBhcnQgPSBwYXJ0Owor
ICAgICAgICBzZWxlY3Rpb25SZWN0LnVuaXRlKGZyYWdtZW50UmVjdCk7CiAgICAgfQogCi0gICAg
Ly8gSWYgd2UgZGlkIG5vdCBoaXQgYW55dGhpbmcsIGp1c3QgZXhpdC4KLSAgICBpZiAoIWhpdFBh
cnQuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEJlZm9yZSBjYWxsaW5n
IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCksIHN1YnRyYWN0IHRoZSBzdGFydCBwb3NpdGlvbiBv
ZiB0aGUgZmlyc3QgY2hhcmFjdGVyCi0gICAgLy8gaW4gdGhlIGhpdCB0ZXh0IGNodW5rIHBhcnQs
IHRvIHBhc3MgaW4gY29vcmRpbmF0ZXMsIHdoaWNoIGFyZSByZWxhdGl2ZSB0byB0aGUgdGV4dCBj
aHVuayBwYXJ0LCBhcwotICAgIC8vIGNvbnN0cnVjdFRleHRSdW4oKSBvbmx5IGJ1aWxkcyBhIFRl
eHRSdW4gZm9yIHRoZSBjdXJyZW50IGNodW5rIHBhcnQsIG5vdCB0aGUgd2hvbGUgaW5saW5lIHRl
eHQgYm94LgotICAgIHggLT0gaGl0UGFydC5maXJzdENoYXJhY3Rlci0+eDsKKyAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKK30KIAotICAgIG1fY3VycmVudENodW5r
UGFydCA9IGhpdFBhcnQ7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKGNvbnN0cnVjdFRleHRSdW4oc3R5
bGUpKTsKLSAgICBtX2N1cnJlbnRDaHVua1BhcnQgPSBTVkdUZXh0Q2h1bmtQYXJ0KCk7Cit2b2lk
IFNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChQYWludEluZm8mIHBh
aW50SW5mbykKK3sKKyAgICBBU1NFUlQocGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChy
ZW5kZXJlcigpKSk7CisgICAgQVNTRVJUKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7CisgICAg
QVNTRVJUKHRydW5jYXRpb24oKSA9PSBjTm9UcnVuY2F0aW9uKTsKIAotICAgIC8vIEV2ZW50dWFs
bHkgaGFuZGxlIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIuCi0gICAgLy8gRklYTUU6
IE5lZWQgdG8gcmV2aXNpdCB0aGUgd2hvbGUgb2Zmc2V0Rm9yUG9zaXRpb24gY29uY2VwdCBmb3Ig
dmVydGljYWwgdGV4dCBzZWxlY3Rpb24uCi0gICAgaWYgKCFtX2NodW5rVHJhbnNmb3JtYXRpb24u
aXNJZGVudGl0eSgpKQotICAgICAgICB0ZXh0UnVuLnNldEhvcml6b250YWxHbHlwaFN0cmV0Y2go
bmFycm93UHJlY2lzaW9uVG9GbG9hdChtX2NodW5rVHJhbnNmb3JtYXRpb24uYSgpKSk7CisgICAg
aWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAg
ICByZXR1cm47CiAKLSAgICByZXR1cm4gaGl0UGFydC5vZmZzZXQgKyBzdHlsZS0+Zm9udCgpLm9m
ZnNldEZvclBvc2l0aW9uKHRleHRSdW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKLX0KKyAg
ICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7Cisg
ICAgQVNTRVJUKHBhcmVudFJlbmRlcmVyKTsKKyAgICBBU1NFUlQoIXBhcmVudFJlbmRlcmVyLT5k
b2N1bWVudCgpLT5wcmludGluZygpKTsKIAotaW50IFNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9u
Rm9yT2Zmc2V0KGludCkgY29uc3QKLXsKLSAgICAvLyBTVkcgZG9lc24ndCB1c2UgdGhlIG9mZnNl
dCA8LT4gcG9zaXRpb24gc2VsZWN0aW9uIHN5c3RlbS4gCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIDA7Ci19CisgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdl
J3JlIHNlbGVjdGVkLgorICAgIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gcGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb247CisgICAgYm9vbCBoYXNTZWxlY3Rpb24gPSBz
ZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKyAgICBpZiAo
IWhhc1NlbGVjdGlvbiB8fCBwYWludFNlbGVjdGVkVGV4dE9ubHkpCisgICAgICAgIHJldHVybjsK
IAotRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0Q2h1bmtQ
YXJ0KGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQsIGludCBwYXJ0U3RhcnRQb3MsIGludCBw
YXJ0RW5kUG9zLCBSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgLy8gTWFwIHN0YXJ0UG9zL2Vu
ZFBvcyBwb3NpdGlvbnMgaW50byBjaHVuayBwYXJ0Ci0gICAgbWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMocGFydFN0YXJ0UG9zLCBwYXJ0RW5kUG9zLCBwYXJ0KTsK
KyAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSByZW5kZXJlcigpLT5zZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKTsKKyAgICBpZiAoIWJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgfHwgIWJhY2tn
cm91bmRDb2xvci5hbHBoYSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGFydFN0YXJ0
UG9zID49IHBhcnRFbmRQb3MpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSBwYXJlbnRSZW5kZXJlci0+c3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5
bGUpOwogCi0gICAgLy8gU2V0IGN1cnJlbnQgY2h1bmsgcGFydCwgc28gY29uc3RydWN0VGV4dFJ1
bigpIHdvcmtzIHByb3Blcmx5LgotICAgIG1fY3VycmVudENodW5rUGFydCA9IHBhcnQ7CisgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAg
QVNTRVJUKHN2Z1N0eWxlKTsKIAotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgp
OwotICAgIFZlY3RvcjxTVkdDaGFyPjo6Y29uc3RfaXRlcmF0b3IgY2hhcmFjdGVyID0gcGFydC5m
aXJzdENoYXJhY3RlcjsKLSAgICBGbG9hdFBvaW50IHRleHRPcmlnaW4oY2hhcmFjdGVyLT54LCBj
aGFyYWN0ZXItPnkgLSBmb250LmFzY2VudCgpKTsKKyAgICBib29sIGhhc0ZpbGwgPSBzdmdTdHls
ZS0+aGFzRmlsbCgpOworICAgIGJvb2wgaGFzU3Ryb2tlID0gc3ZnU3R5bGUtPmhhc1N0cm9rZSgp
OwogCi0gICAgRmxvYXRSZWN0IHBhcnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29u
c3RydWN0VGV4dFJ1bihzdHlsZSksIHRleHRPcmlnaW4sIHBhcnQuaGVpZ2h0LCBwYXJ0U3RhcnRQ
b3MsIHBhcnRFbmRQb3MpKTsKLSAgICBtX2N1cnJlbnRDaHVua1BhcnQgPSBTVkdUZXh0Q2h1bmtQ
YXJ0KCk7CisgICAgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlID0gc3R5bGU7CisgICAgaWYg
KGhhc1NlbGVjdGlvbikgeworICAgICAgICBzZWxlY3Rpb25TdHlsZSA9IHBhcmVudFJlbmRlcmVy
LT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShTRUxFQ1RJT04pOworICAgICAgICBpZiAoc2VsZWN0aW9u
U3R5bGUpIHsKKyAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTZWxlY3Rpb25T
dHlsZSA9IHNlbGVjdGlvblN0eWxlLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgQVNTRVJUKHN2
Z1NlbGVjdGlvblN0eWxlKTsKIAotICAgIHJldHVybiBjaGFyYWN0ZXItPmNoYXJhY3RlclRyYW5z
Zm9ybSgpLm1hcFJlY3QocGFydFJlY3QpOwotfQorICAgICAgICAgICAgaWYgKCFoYXNGaWxsKQor
ICAgICAgICAgICAgICAgIGhhc0ZpbGwgPSBzdmdTZWxlY3Rpb25TdHlsZS0+aGFzRmlsbCgpOwor
ICAgICAgICAgICAgaWYgKCFoYXNTdHJva2UpCisgICAgICAgICAgICAgICAgaGFzU3Ryb2tlID0g
c3ZnU2VsZWN0aW9uU3R5bGUtPmhhc1N0cm9rZSgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHNlbGVjdGlvblN0eWxlID0gc3R5bGU7CisgICAgfQogCi1JbnRSZWN0IFNWR0lubGluZVRl
eHRCb3g6OnNlbGVjdGlvblJlY3QoaW50LCBpbnQsIGludCBzdGFydFBvcywgaW50IGVuZFBvcykK
LXsKLSAgICBBU1NFUlQoIW1fY3VycmVudENodW5rUGFydC5pc1ZhbGlkKCkpOworICAgIGludCBz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbjsKKyAgICBzZWxlY3Rpb25TdGFydEVuZChzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbik7CiAKLSAgICBpbnQgYm94U3RhcnQgPSBzdGFydCgpOwotICAg
IHN0YXJ0UG9zID0gbWF4KHN0YXJ0UG9zIC0gYm94U3RhcnQsIDApOwotICAgIGVuZFBvcyA9IG1p
bihlbmRQb3MgLSBib3hTdGFydCwgc3RhdGljX2Nhc3Q8aW50PihsZW4oKSkpOworICAgIGludCBm
cmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOworICAgIGludCBmcmFnbWVudEVuZFBvc2l0aW9uID0g
MDsKKyAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kp
IHsKKyAgICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IG1fdGV4dEZyYWdtZW50cy5h
dChpKTsKKyAgICAgICAgQVNTRVJUKCFtX3BhaW50aW5nUmVzb3VyY2UpOwogCi0gICAgaWYgKHN0
YXJ0UG9zID49IGVuZFBvcykKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgZnJh
Z21lbnRTdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgZnJhZ21lbnRFbmRQ
b3NpdGlvbiA9IGVuZFBvc2l0aW9uOworICAgICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25z
SW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoZnJhZ21lbnQsIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwg
ZnJhZ21lbnRFbmRQb3NpdGlvbikpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgIFJlbmRl
clRleHQqIHRleHQgPSB0ZXh0UmVuZGVyZXIoKTsKLSAgICBBU1NFUlQodGV4dCk7CisgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0
ZXh0LT5zdHlsZSgpOwotICAgIEFTU0VSVChzdHlsZSk7CisgICAgICAgIGlmICghZnJhZ21lbnQu
dHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5j
b25jYXRDVE0oZnJhZ21lbnQudHJhbnNmb3JtKTsKIAotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25S
ZWN0OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKGJhY2tncm91bmRD
b2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5m
aWxsUmVjdChzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBmcmFnbWVudFN0
YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24sIHN0eWxlKSwgYmFja2dyb3VuZENvbG9y
LCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIAotICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdGV4dCBj
aHVuayBwYXJ0IGlzIGhpdAotICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9zdmdUZXh0Q2h1bmtQYXJ0cy5lbmQoKTsKLSAgICBmb3IgKFZl
Y3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N2Z1RleHRDaHVu
a1BhcnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgc2VsZWN0aW9uUmVjdC51
bml0ZShzZWxlY3Rpb25SZWN0Rm9yVGV4dENodW5rUGFydCgqaXQsIHN0YXJ0UG9zLCBlbmRQb3Ms
IHN0eWxlKSk7Ci0KLSAgICAvLyBSZXNlcGVjdCBwb3NzaWJsZSBjaHVuayB0cmFuc2Zvcm1hdGlv
bgotICAgIGlmIChtX2NodW5rVHJhbnNmb3JtYXRpb24uaXNJZGVudGl0eSgpKQotICAgICAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKKyAgICAgICAgbV9wYWludGlu
Z1Jlc291cmNlTW9kZSA9IEFwcGx5VG9EZWZhdWx0TW9kZTsKKyAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnJlc3RvcmUoKTsKKyAgICB9CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCht
X2NodW5rVHJhbnNmb3JtYXRpb24ubWFwUmVjdChzZWxlY3Rpb25SZWN0KSk7CisgICAgQVNTRVJU
KCFtX3BhaW50aW5nUmVzb3VyY2UpOwogfQogCiB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKQEAgLTIwNSw2ICsyMTYsMTEgQEAgdm9p
ZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIAogICAgIFJlbmRlck9iamVjdCog
cGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKTsKICAgICBBU1NFUlQocGFyZW50
UmVuZGVyZXIpOwogCisgICAgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkgPSBwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbjsKKyAgICBib29sIGhhc1NlbGVjdGlvbiA9ICFw
YXJlbnRSZW5kZXJlci0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSAmJiBzZWxlY3Rpb25TdGF0ZSgp
ICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKyAgICBpZiAoIWhhc1NlbGVjdGlvbiAm
JiBwYWludFNlbGVjdGVkVGV4dE9ubHkpCisgICAgICAgIHJldHVybjsKKwogICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLT5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZSk7
CiAKQEAgLTIxMywxMyArMjI5LDYgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIAogCiAgICAgYm9vbCBoYXNGaWxsID0gc3ZnU3R5bGUtPmhhc0ZpbGwoKTsKICAgICBi
b29sIGhhc1N0cm9rZSA9IHN2Z1N0eWxlLT5oYXNTdHJva2UoKTsKLSAgICBib29sIHBhaW50U2Vs
ZWN0ZWRUZXh0T25seSA9IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uOwot
Ci0gICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlJ3JlIHNlbGVjdGVkLgotICAgIGJv
b2wgaXNQcmludGluZyA9IHBhcmVudFJlbmRlcmVyLT5kb2N1bWVudCgpLT5wcmludGluZygpOwot
ICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9uU3RhdGUoKSAh
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7Ci0gICAgaWYgKCFoYXNTZWxlY3Rpb24gJiYg
cGFpbnRTZWxlY3RlZFRleHRPbmx5KQotICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJTdHls
ZSogc2VsZWN0aW9uU3R5bGUgPSBzdHlsZTsKICAgICBpZiAoaGFzU2VsZWN0aW9uKSB7CkBAIC0y
MzYsNjIgKzI0NSw0MyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYg
CiAgICAgICAgICAgICBzZWxlY3Rpb25TdHlsZSA9IHN0eWxlOwogICAgIH0KIAotICAgIC8vIENv
bXB1dGUgdGV4dCBtYXRjaCBtYXJrZXIgcmVjdHMuIEl0IG5lZWRzIHRvIHRyYXZlcnNlIGFsbCB0
ZXh0IGNodW5rIHBhcnRzIHRvIGZpZ3VyZQotICAgIC8vIG91dCB0aGUgdW5pb24gc2VsZWN0aW9u
IHJlY3Qgb2YgYWxsIHRleHQgY2h1bmsgcGFydHMgdGhhdCBjb250cmlidXRlIHRvIHRoZSBzZWxl
Y3Rpb24uCi0gICAgY29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3Qoc3R5bGUpOwotICAgIEFTU0VS
VCghbV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFsaWQoKSk7Ci0KLSAgICBjb25zdCBWZWN0b3I8U1ZH
VGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3ZnVGV4dENodW5rUGFydHMu
ZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9zdmdUZXh0Q2h1bmtQYXJ0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKKyAg
ICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IG1fdGV4dEZyYWdtZW50cy5hdChpKTsK
ICAgICAgICAgQVNTRVJUKCFtX3BhaW50aW5nUmVzb3VyY2UpOwogCi0gICAgICAgIC8vIGNvbnN0
cnVjdFRleHRSdW4oKSB1c2VzIHRoZSBjdXJyZW50IGNodW5rIHBhcnQgdG8gZmlndXJlIG91dCB3
aGF0IHRleHQgdG8gcmVuZGVyLgotICAgICAgICBtX2N1cnJlbnRDaHVua1BhcnQgPSAqaXQ7CiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICAgICAgLy8gUHJlcGFyZSBj
b250ZXh0IGFuZCBkcmF3IHRleHQKLSAgICAgICAgaWYgKCFtX2NodW5rVHJhbnNmb3JtYXRpb24u
aXNJZGVudGl0eSgpKQotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTSht
X2NodW5rVHJhbnNmb3JtYXRpb24pOwotCi0gICAgICAgIFZlY3RvcjxTVkdDaGFyPjo6Y29uc3Rf
aXRlcmF0b3IgZmlyc3RDaGFyYWN0ZXIgPSBtX2N1cnJlbnRDaHVua1BhcnQuZmlyc3RDaGFyYWN0
ZXI7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjaGFyYWN0ZXJUcmFuc2Zvcm0gPSBmaXJzdENo
YXJhY3Rlci0+Y2hhcmFjdGVyVHJhbnNmb3JtKCk7Ci0gICAgICAgIGlmICghY2hhcmFjdGVyVHJh
bnNmb3JtLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25j
YXRDVE0oY2hhcmFjdGVyVHJhbnNmb3JtKTsKLQotICAgICAgICBGbG9hdFBvaW50IHRleHRPcmln
aW4oZmlyc3RDaGFyYWN0ZXItPngsIGZpcnN0Q2hhcmFjdGVyLT55KTsKLQotICAgICAgICAvLyBE
cmF3IGJhY2tncm91bmQgb25jZSAobm90IGluIGJvdGggZmlsbC9zdHJva2UgcGhhc2VzKQotICAg
ICAgICBpZiAoIWlzUHJpbnRpbmcgJiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSAmJiBoYXNTZWxl
Y3Rpb24pCi0gICAgICAgICAgICBwYWludFNlbGVjdGlvbihwYWludEluZm8uY29udGV4dCwgdGV4
dE9yaWdpbiwgc3R5bGUpOworICAgICAgICBpZiAoIWZyYWdtZW50LnRyYW5zZm9ybS5pc0lkZW50
aXR5KCkpCisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKGZyYWdtZW50
LnRyYW5zZm9ybSk7CiAKICAgICAgICAgLy8gU3BlYzogQWxsIHRleHQgZGVjb3JhdGlvbnMgZXhj
ZXB0IGxpbmUtdGhyb3VnaCBzaG91bGQgYmUgZHJhd24gYmVmb3JlIHRoZSB0ZXh0IGlzIGZpbGxl
ZCBhbmQgc3Ryb2tlZDsgdGh1cywgdGhlIHRleHQgaXMgcmVuZGVyZWQgb24gdG9wIG9mIHRoZXNl
IGRlY29yYXRpb25zLgogICAgICAgICBpbnQgZGVjb3JhdGlvbnMgPSBzdHlsZS0+dGV4dERlY29y
YXRpb25zSW5FZmZlY3QoKTsKICAgICAgICAgaWYgKGRlY29yYXRpb25zICYgVU5ERVJMSU5FKQot
ICAgICAgICAgICAgcGFpbnREZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0LCB0ZXh0T3JpZ2lu
LCBVTkRFUkxJTkUsIGhhc1NlbGVjdGlvbik7CisgICAgICAgICAgICBwYWludERlY29yYXRpb24o
cGFpbnRJbmZvLmNvbnRleHQsIFVOREVSTElORSwgZnJhZ21lbnQpOwogICAgICAgICBpZiAoZGVj
b3JhdGlvbnMgJiBPVkVSTElORSkKLSAgICAgICAgICAgIHBhaW50RGVjb3JhdGlvbihwYWludElu
Zm8uY29udGV4dCwgdGV4dE9yaWdpbiwgT1ZFUkxJTkUsIGhhc1NlbGVjdGlvbik7CisgICAgICAg
ICAgICBwYWludERlY29yYXRpb24ocGFpbnRJbmZvLmNvbnRleHQsIE9WRVJMSU5FLCBmcmFnbWVu
dCk7CiAKICAgICAgICAgLy8gRmlsbCB0ZXh0CiAgICAgICAgIGlmIChoYXNGaWxsKSB7CiAgICAg
ICAgICAgICBtX3BhaW50aW5nUmVzb3VyY2VNb2RlID0gQXBwbHlUb0ZpbGxNb2RlIHwgQXBwbHlU
b1RleHRNb2RlOwotICAgICAgICAgICAgcGFpbnRUZXh0KHBhaW50SW5mby5jb250ZXh0LCB0ZXh0
T3JpZ2luLCBzdHlsZSwgc2VsZWN0aW9uU3R5bGUsIGhhc1NlbGVjdGlvbiwgcGFpbnRTZWxlY3Rl
ZFRleHRPbmx5KTsKKyAgICAgICAgICAgIHBhaW50VGV4dChwYWludEluZm8uY29udGV4dCwgc3R5
bGUsIHNlbGVjdGlvblN0eWxlLCBmcmFnbWVudCwgaGFzU2VsZWN0aW9uLCBwYWludFNlbGVjdGVk
VGV4dE9ubHkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gU3Ryb2tlIHRleHQKICAgICAgICAg
aWYgKGhhc1N0cm9rZSkgewogICAgICAgICAgICAgbV9wYWludGluZ1Jlc291cmNlTW9kZSA9IEFw
cGx5VG9TdHJva2VNb2RlIHwgQXBwbHlUb1RleHRNb2RlOwotICAgICAgICAgICAgcGFpbnRUZXh0
KHBhaW50SW5mby5jb250ZXh0LCB0ZXh0T3JpZ2luLCBzdHlsZSwgc2VsZWN0aW9uU3R5bGUsIGhh
c1NlbGVjdGlvbiwgcGFpbnRTZWxlY3RlZFRleHRPbmx5KTsKKyAgICAgICAgICAgIHBhaW50VGV4
dChwYWludEluZm8uY29udGV4dCwgc3R5bGUsIHNlbGVjdGlvblN0eWxlLCBmcmFnbWVudCwgaGFz
U2VsZWN0aW9uLCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gU3BlYzogTGluZS10aHJvdWdoIHNob3VsZCBiZSBkcmF3biBhZnRlciB0aGUgdGV4dCBpcyBm
aWxsZWQgYW5kIHN0cm9rZWQ7IHRodXMsIHRoZSBsaW5lLXRocm91Z2ggaXMgcmVuZGVyZWQgb24g
dG9wIG9mIHRoZSB0ZXh0LgogICAgICAgICBpZiAoZGVjb3JhdGlvbnMgJiBMSU5FX1RIUk9VR0gp
Ci0gICAgICAgICAgICBwYWludERlY29yYXRpb24ocGFpbnRJbmZvLmNvbnRleHQsIHRleHRPcmln
aW4sIExJTkVfVEhST1VHSCwgaGFzU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIHBhaW50RGVjb3Jh
dGlvbihwYWludEluZm8uY29udGV4dCwgTElORV9USFJPVUdILCBmcmFnbWVudCk7CiAKICAgICAg
ICAgbV9wYWludGluZ1Jlc291cmNlTW9kZSA9IEFwcGx5VG9EZWZhdWx0TW9kZTsKICAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiAKLSAgICBtX2N1cnJlbnRDaHVu
a1BhcnQgPSBTVkdUZXh0Q2h1bmtQYXJ0KCk7CiAgICAgQVNTRVJUKCFtX3BhaW50aW5nUmVzb3Vy
Y2UpOwogfQogCkBAIC0zNTAsODggKzM0MCw2MiBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJl
c3RvcmVHcmFwaGljc0NvCiAjZW5kaWYKIH0KIAotVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpj
b25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBBU1NFUlQo
bV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIHN2Z1RleHRSdW5Gb3JJ
bmxpbmVUZXh0Qm94KHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIHN0YXJ0
KCkgKyBtX2N1cnJlbnRDaHVua1BhcnQub2Zmc2V0LCBtX2N1cnJlbnRDaHVua1BhcnQubGVuZ3Ro
LCBzdHlsZSwgdGhpcyk7Ci19Ci0KLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQ
b3NpdGlvbnNJbnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMoaW50JiBzdGFydFBvcywgaW50JiBlbmRQ
b3MsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0CitUZXh0UnVuIFNWR0lubGlu
ZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdAogewotICAgIGlmIChzdGFydFBvcyA+PSBlbmRQ
b3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRha2UgPHRleHQgeD0iMTAgNTAgMTAwIj5B
QkM8L3RleHQ+IGFzIGV4YW1wbGUuIFdlJ3JlIGNhbGxlZCB0aHJlZSB0aW1lcyBmcm9tIHBhaW50
KCksIGJlY2F1c2UgYWxsIGFic29sdXRlIHBvc2l0aW9uZWQKLSAgICAvLyBjaGFyYWN0ZXJzIGFy
ZSBkcmF3biBvbiB0aGVpciBvd24uIEZvciBlYWNoIG9mIHRoZW0gd2Ugd2FudCB0byBmaW5kIG91
dCB3aGVodGVyIGl0J3Mgc2VsZWN0ZWQuIHN0YXJ0UG9zPTAsIGVuZFBvcz0xCi0gICAgLy8gY291
bGQgbWVhbiBBLCBCIG9yIEMgaXMgaGl0LCBkZXBlbmRpbmcgb24gd2hpY2ggY2h1bmsgcGFydCBp
cyBwcm9jZXNzZWQgYXQgdGhlIG1vbWVudC4gV2l0aCB0aGUgb2Zmc2V0ICYgbGVuZ3RoIHZhbHVl
cwotICAgIC8vIG9mIGVhY2ggY2h1bmsgcGFydCB3ZSBjYW4gZWFzaWx5IGZpbmQgb3V0IHdoaWNo
IG9uZSBpcyBtZWFudCB0byBiZSBzZWxlY3RlZC4gQmFpbCBvdXQgZm9yIHRoZSBvdGhlciBjaHVu
ayBwYXJ0cy4KLSAgICAvLyBJZiBzdGFyUG9zIGlzIGJlaGluZCB0aGUgY3VycmVudCBjaHVuayBv
ciB0aGUgZW5kUG9zIGVuZHMgYmVmb3JlIHRoaXMgdGV4dCBjaHVuayBwYXJ0LCB3ZSdyZSBub3Qg
bWVhbnQgdG8gYmUgc2VsZWN0ZWQuCi0gICAgaWYgKHN0YXJ0UG9zID49IHBhcnQub2Zmc2V0ICsg
cGFydC5sZW5ndGggfHwgZW5kUG9zIDw9IHBhcnQub2Zmc2V0KSB7Ci0gICAgICAgIHN0YXJ0UG9z
ID0gMDsKLSAgICAgICAgZW5kUG9zID0gLTE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
QVNTRVJUKHN0eWxlKTsKKyAgICBBU1NFUlQodGV4dFJlbmRlcmVyKCkpOwogCi0gICAgLy8gVGhl
IGN1cnJlbnQgcHJvY2Vzc2VkIGNodW5rIHBhcnQgaXMgaGl0LiBXaGVuIHBhaW50aW5nIHRoZSBz
ZWxlY3Rpb24sIGNvbnN0cnVjdFRleHRSdW4oKSBidWlsZHMKLSAgICAvLyBhIFRleHRSdW4gb2Jq
ZWN0IHdob3NlIHN0YXJ0UG9zIGlzIDAgYW5kIGVuZFBvcyBpcyBjaHVuayBwYXJ0IGxlbmd0aC4g
VGhlIGNvZGUgYmVsb3cgbWFwcyB0aGUgaW5jb21pbmcKLSAgICAvLyBzdGFydFBvcy9lbmRQb3Mg
cmFuZ2UgaW50byBhIFswLCBwYXJ0IGxlbmd0aF0gY29vcmRpbmF0ZSBzeXN0ZW0sIHJlbGF0aXZl
IHRvIHRoZSBjdXJyZW50IGNodW5rIHBhcnQuCi0gICAgaWYgKHN0YXJ0UG9zIDwgcGFydC5vZmZz
ZXQpCi0gICAgICAgIHN0YXJ0UG9zID0gMDsKLSAgICBlbHNlCi0gICAgICAgIHN0YXJ0UG9zIC09
IHBhcnQub2Zmc2V0OworICAgIFJlbmRlclRleHQqIHRleHQgPSB0ZXh0UmVuZGVyZXIoKTsKKyAg
ICBBU1NFUlQodGV4dCk7CiAKLSAgICBpZiAoZW5kUG9zID4gcGFydC5vZmZzZXQgKyBwYXJ0Lmxl
bmd0aCkKLSAgICAgICAgZW5kUG9zID0gcGFydC5sZW5ndGg7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IEFTU0VSVChlbmRQb3MgPj0gcGFydC5vZmZzZXQpOwotICAgICAgICBlbmRQb3MgLT0gcGFydC5v
ZmZzZXQ7Ci0gICAgfQorICAgIFRleHRSdW4gcnVuKHRleHQtPmNoYXJhY3RlcnMoKSArIGZyYWdt
ZW50LnBvc2l0aW9uTGlzdE9mZnNldAorICAgICAgICAgICAgICAgICwgZnJhZ21lbnQubGVuZ3Ro
CisgICAgICAgICAgICAgICAgLCBmYWxzZSAvKiBhbGxvd1RhYnMgKi8KKyAgICAgICAgICAgICAg
ICAsIDAgLyogeFBvcywgb25seSByZWxldmFudCB3aXRoIGFsbG93VGFicz10cnVlICovCisgICAg
ICAgICAgICAgICAgLCAwIC8qIHBhZGRpbmcsIG9ubHkgcmVsZXZhbnQgZm9yIGp1c3RpZmllZCB0
ZXh0LCBub3QgcmVsZXZhbnQgZm9yIFNWRyAqLworICAgICAgICAgICAgICAgICwgZGlyZWN0aW9u
KCkgPT0gUlRMCisgICAgICAgICAgICAgICAgLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1
YWxseU9yZGVyZWQoKSAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAotICAgIEFTU0VSVChz
dGFydFBvcyA8IGVuZFBvcyk7Ci19CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBSZW5kZXJP
YmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7CisgICAgQVNTRVJU
KHBhcmVudFJlbmRlcmVyKTsKIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFy
dEVuZChpbnQmIHN0YXJ0UG9zLCBpbnQmIGVuZFBvcykKLXsKLSAgICBJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICBydW4uc2V0UmVmZXJlbmNp
bmdSZW5kZXJPYmplY3QocGFyZW50UmVuZGVyZXIpOworI2VuZGlmCiAKLSAgICBpZiAoIW1fY3Vy
cmVudENodW5rUGFydC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBEaXNhYmxl
IGFueSB3b3JkL2NoYXJhY3RlciByb3VuZGluZy4KKyAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFj
a3MoKTsKIAotICAgIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0NodW5rUGFydENvb3JkaW5hdGVz
KHN0YXJ0UG9zLCBlbmRQb3MsIG1fY3VycmVudENodW5rUGFydCk7CisgICAgLy8gV2UgaGFuZGxl
IGxldHRlciAmIHdvcmQgc3BhY2luZyBvdXJzZWx2ZXMuCisgICAgcnVuLmRpc2FibGVTcGFjaW5n
KCk7CisgICAgcmV0dXJuIHJ1bjsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpjb21wdXRl
VGV4dE1hdGNoTWFya2VyUmVjdChSZW5kZXJTdHlsZSogc3R5bGUpCitib29sIFNWR0lubGluZVRl
eHRCb3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBv
c2l0aW9uKSBjb25zdAogewotICAgIEFTU0VSVCghbV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFsaWQo
KSk7Ci0gICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyKCktPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUg
fHwgIW5vZGUtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI+IG1hcmtlcnMgPSBkb2N1bWVudC0+bWFya2VycygpLT5tYXJrZXJzRm9yTm9kZShyZW5k
ZXJlcigpLT5ub2RlKCkpOworICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+OjppdGVy
YXRvciBtYXJrZXJFbmQgPSBtYXJrZXJzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPERvY3VtZW50
TWFya2VyPjo6aXRlcmF0b3IgbWFya2VySXQgPSBtYXJrZXJzLmJlZ2luKCk7IG1hcmtlckl0ICE9
IG1hcmtlckVuZDsgKyttYXJrZXJJdCkgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYg
bWFya2VyID0gKm1hcmtlckl0OworICAgIGludCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZy
YWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCkgLSBzdGFydCgpOworICAgIGludCBsZW5ndGggPSBz
dGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50Lmxlbmd0aCk7CiAKLSAgICAgICAgLy8gU1ZHIGlzIG9u
bHkgaW50ZXJlc3N0ZWQgaW4gdGhlIFRleHRNYXRjaCBtYXJrZXIsIGZvciBub3cuCi0gICAgICAg
IGlmIChtYXJrZXIudHlwZSAhPSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgRmxvYXRSZWN0IG1hcmtlclJlY3Q7Ci0gICAgICAgIGlu
dCBwYXJ0U3RhcnRQb3MgPSBtYXgobWFya2VyLnN0YXJ0T2Zmc2V0IC0gc3RhcnQoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KDApKTsKLSAgICAgICAgaW50IHBhcnRFbmRQb3MgPSBtaW4obWFya2Vy
LmVuZE9mZnNldCAtIHN0YXJ0KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW4oKSkpOwotCi0g
ICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgdGV4dCBjaHVuayBwYXJ0cywgdG8gc2VlIHdoaWNo
IG9uZXMgaGF2ZSB0byBiZSBoaWdobGlnaHRlZAotICAgICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4
dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3ZnVGV4dENodW5rUGFydHMuZW5k
KCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc3ZnVGV4dENodW5rUGFydHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgbWFya2VyUmVjdC51bml0ZShzZWxlY3Rpb25SZWN0Rm9yVGV4dENodW5rUGFydCgq
aXQsIHBhcnRTdGFydFBvcywgcGFydEVuZFBvcywgc3R5bGUpKTsKKyAgICBpZiAoc3RhcnRQb3Np
dGlvbiA+PSBvZmZzZXQgKyBsZW5ndGggfHwgZW5kUG9zaXRpb24gPD0gb2Zmc2V0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKCFtX2NodW5rVHJhbnNmb3JtYXRpb24uaXNJ
ZGVudGl0eSgpKQotICAgICAgICAgICAgbWFya2VyUmVjdCA9IG1fY2h1bmtUcmFuc2Zvcm1hdGlv
bi5tYXBSZWN0KG1hcmtlclJlY3QpOworICAgIGlmIChzdGFydFBvc2l0aW9uIDwgb2Zmc2V0KQor
ICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKKyAgICBlbHNlCisgICAgICAgIHN0YXJ0UG9zaXRp
b24gLT0gb2Zmc2V0OwogCi0gICAgICAgIGRvY3VtZW50LT5tYXJrZXJzKCktPnNldFJlbmRlcmVk
UmVjdEZvck1hcmtlcihub2RlLCBtYXJrZXIsIHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1
YWQobWFya2VyUmVjdCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgaWYgKGVuZFBvc2l0
aW9uID4gb2Zmc2V0ICsgbGVuZ3RoKQorICAgICAgICBlbmRQb3NpdGlvbiA9IGxlbmd0aDsKKyAg
ICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGVuZFBvc2l0aW9uID49IG9mZnNldCk7CisgICAgICAg
IGVuZFBvc2l0aW9uIC09IG9mZnNldDsKICAgICB9CisKKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlv
biA8IGVuZFBvc2l0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGlubGluZSBm
bG9hdCBwb3NpdGlvbk9mZnNldEZvckRlY29yYXRpb24oRVRleHREZWNvcmF0aW9uIGRlY29yYXRp
b24sIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHRoaWNrbmVzcykKQEAgLTQ1NSwxNyArNDE5LDE1
IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgdGhpY2tuZXNzRm9yRGVjb3JhdGkKICAgICAvLyBDb21w
YXRpYmxlIHdpdGggQmF0aWsvT3BlcmEKICAgICByZXR1cm4gZm9udC5zaXplKCkgLyAyMC4wZjsK
IH0KLSAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaW5kUmVuZGVyT2JqZWN0RGVmaW5p
bmluZ1RleHREZWNvcmF0aW9uKElubGluZUZsb3dCb3gqIHBhcmVudEJveCwgRVRleHREZWNvcmF0
aW9uIGRlY29yYXRpb24pCisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaW5kUmVuZGVy
T2JqZWN0RGVmaW5pbmluZ1RleHREZWNvcmF0aW9uKElubGluZUZsb3dCb3gqIHBhcmVudEJveCkK
IHsKLSAgICAvLyBMb29rdXAgcmVuZGVyIG9iamVjdCB3aGljaCBoYXMgdGV4dC1kZWNvcmF0aW9u
IHNldC4KKyAgICAvLyBMb29rdXAgZmlyc3QgcmVuZGVyIG9iamVjdCBpbiBwYXJlbnQgaGllcmFy
Y2h5IHdoaWNoIGhhcyB0ZXh0LWRlY29yYXRpb24gc2V0LgogICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSAwOwogICAgIHdoaWxlIChwYXJlbnRCb3gpIHsKICAgICAgICAgcmVuZGVyZXIgPSBw
YXJlbnRCb3gtPnJlbmRlcmVyKCk7CiAKLSAgICAgICAgLy8gRXhwbGljaXRlbHkgY2hlY2sgdGV4
dERlY29yYXRpb24oKSBub3QgdGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgd2hpY2ggaXMgaW5o
ZXJpdGVkIHRvCi0gICAgICAgIC8vIGNoaWxkcmVuLCBhcyB3ZSB3YW50IHRvIGxvb2t1cCB0aGUg
cmVuZGVyIG9iamVjdCB3aG9zZSBzdHlsZSBkZWZpbmVkIHRoZSB0ZXh0LWRlY29yYXRpb24uCi0g
ICAgICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKSAmJiByZW5kZXJlci0+c3R5bGUoKS0+dGV4dERl
Y29yYXRpb24oKSAmIGRlY29yYXRpb24pCisgICAgICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKSAm
JiByZW5kZXJlci0+c3R5bGUoKS0+dGV4dERlY29yYXRpb24oKSAhPSBURE5PTkUpCiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBwYXJlbnRCb3ggPSBwYXJlbnRCb3gtPnBhcmVudCgpOwpA
QCAtNDc1LDUyICs0MzcsNDAgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRSZW5k
ZXJPYgogICAgIHJldHVybiByZW5kZXJlcjsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLCBFVGV4dERlY29yYXRpb24gZGVjb3JhdGlvbiwgYm9vbCBoYXNTZWxlY3Rp
b24pCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIEVUZXh0RGVjb3JhdGlvbiBkZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJh
Z21lbnQmIGZyYWdtZW50KQogeworICAgIGlmICh0ZXh0UmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4
dERlY29yYXRpb25zSW5FZmZlY3QoKSA9PSBURE5PTkUpCisgICAgICAgIHJldHVybjsKKwogICAg
IC8vIEZpbmQgb3V0IHdoaWNoIHJlbmRlciBzdHlsZSBkZWZpbmVkIHRoZSB0ZXh0LWRlY29yYXRp
b24sIGFzIGl0cyBmaWxsL3N0cm9rZSBwcm9wZXJ0aWVzIGhhdmUgdG8gYmUgdXNlZCBmb3IgZHJh
d2luZyBpbnN0ZWFkIG9mIG91cnMuCi0gICAgUmVuZGVyT2JqZWN0KiBkZWNvcmF0aW9uUmVuZGVy
ZXIgPSBmaW5kUmVuZGVyT2JqZWN0RGVmaW5pbmluZ1RleHREZWNvcmF0aW9uKHBhcmVudCgpLCBk
ZWNvcmF0aW9uKTsKKyAgICBSZW5kZXJPYmplY3QqIGRlY29yYXRpb25SZW5kZXJlciA9IGZpbmRS
ZW5kZXJPYmplY3REZWZpbmluaW5nVGV4dERlY29yYXRpb24ocGFyZW50KCkpOwogICAgIFJlbmRl
clN0eWxlKiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9uUmVuZGVyZXItPnN0eWxlKCk7CiAg
ICAgQVNTRVJUKGRlY29yYXRpb25TdHlsZSk7CiAKKyAgICBpZiAoZGVjb3JhdGlvblN0eWxlLT52
aXNpYmlsaXR5KCkgPT0gSElEREVOKQorICAgICAgICByZXR1cm47CisKICAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnRGVjb3JhdGlvblN0eWxlID0gZGVjb3JhdGlvblN0eWxlLT5zdmdTdHls
ZSgpOwogICAgIEFTU0VSVChzdmdEZWNvcmF0aW9uU3R5bGUpOwogCiAgICAgYm9vbCBoYXNEZWNv
cmF0aW9uRmlsbCA9IHN2Z0RlY29yYXRpb25TdHlsZS0+aGFzRmlsbCgpOwogICAgIGJvb2wgaGFz
RGVjb3JhdGlvblN0cm9rZSA9IHN2Z0RlY29yYXRpb25TdHlsZS0+aGFzU3Ryb2tlKCk7CiAKLSAg
ICBpZiAoaGFzU2VsZWN0aW9uKSB7Ci0gICAgICAgIGlmIChSZW5kZXJTdHlsZSogcHNldWRvU3R5
bGUgPSBkZWNvcmF0aW9uUmVuZGVyZXItPmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTikp
IHsKLSAgICAgICAgICAgIGRlY29yYXRpb25TdHlsZSA9IHBzZXVkb1N0eWxlOwotCi0gICAgICAg
ICAgICBzdmdEZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9uU3R5bGUtPnN2Z1N0eWxlKCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoc3ZnRGVjb3JhdGlvblN0eWxlKTsKLQotICAgICAgICAgICAgaWYg
KCFoYXNEZWNvcmF0aW9uRmlsbCkKLSAgICAgICAgICAgICAgICBoYXNEZWNvcmF0aW9uRmlsbCA9
IHN2Z0RlY29yYXRpb25TdHlsZS0+aGFzRmlsbCgpOwotICAgICAgICAgICAgaWYgKCFoYXNEZWNv
cmF0aW9uU3Ryb2tlKQotICAgICAgICAgICAgICAgIGhhc0RlY29yYXRpb25TdHJva2UgPSBzdmdE
ZWNvcmF0aW9uU3R5bGUtPmhhc1N0cm9rZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGRlY29yYXRpb25TdHlsZS0+dmlzaWJpbGl0eSgpID09IEhJRERFTikKLSAgICAgICAgcmV0dXJu
OwotCiAgICAgaWYgKGhhc0RlY29yYXRpb25GaWxsKSB7CiAgICAgICAgIG1fcGFpbnRpbmdSZXNv
dXJjZU1vZGUgPSBBcHBseVRvRmlsbE1vZGU7Ci0gICAgICAgIHBhaW50RGVjb3JhdGlvbldpdGhT
dHlsZShjb250ZXh0LCB0ZXh0T3JpZ2luLCBkZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29yYXRpb24p
OworICAgICAgICBwYWludERlY29yYXRpb25XaXRoU3R5bGUoY29udGV4dCwgZGVjb3JhdGlvbiwg
ZnJhZ21lbnQsIGRlY29yYXRpb25SZW5kZXJlcik7CiAgICAgfQogCiAgICAgaWYgKGhhc0RlY29y
YXRpb25TdHJva2UpIHsKICAgICAgICAgbV9wYWludGluZ1Jlc291cmNlTW9kZSA9IEFwcGx5VG9T
dHJva2VNb2RlOwotICAgICAgICBwYWludERlY29yYXRpb25XaXRoU3R5bGUoY29udGV4dCwgdGV4
dE9yaWdpbiwgZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNvcmF0aW9uKTsKKyAgICAgICAgcGFpbnRE
ZWNvcmF0aW9uV2l0aFN0eWxlKGNvbnRleHQsIGRlY29yYXRpb24sIGZyYWdtZW50LCBkZWNvcmF0
aW9uUmVuZGVyZXIpOwogICAgIH0KIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERl
Y29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiB0ZXh0T3JpZ2luLCBSZW5kZXJPYmplY3QqIGRlY29yYXRpb25SZW5kZXJlciwgRVRleHRE
ZWNvcmF0aW9uIGRlY29yYXRpb24pCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3Jh
dGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEVUZXh0RGVjb3JhdGlvbiBk
ZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBSZW5kZXJPYmplY3Qq
IGRlY29yYXRpb25SZW5kZXJlcikKIHsKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7
CiAgICAgQVNTRVJUKG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2Rl
KTsKLSAgICBBU1NFUlQobV9jdXJyZW50Q2h1bmtQYXJ0LmlzVmFsaWQoKSk7CiAKICAgICBSZW5k
ZXJTdHlsZSogZGVjb3JhdGlvblN0eWxlID0gZGVjb3JhdGlvblJlbmRlcmVyLT5zdHlsZSgpOwog
ICAgIEFTU0VSVChkZWNvcmF0aW9uU3R5bGUpOwpAQCAtNTI5LDEyICs0NzksMTEgQEAgdm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaQogCiAgICAgLy8gVGhlIGluaXRpYWwg
eSB2YWx1ZSByZWZlcnMgdG8gb3ZlcmxpbmUgcG9zaXRpb24uCiAgICAgZmxvYXQgdGhpY2tuZXNz
ID0gdGhpY2tuZXNzRm9yRGVjb3JhdGlvbihkZWNvcmF0aW9uLCBmb250KTsKLSAgICBmbG9hdCB4
ID0gdGV4dE9yaWdpbi54KCk7Ci0gICAgZmxvYXQgeSA9IHRleHRPcmlnaW4ueSgpIC0gZm9udC5h
c2NlbnQoKSArIHBvc2l0aW9uT2Zmc2V0Rm9yRGVjb3JhdGlvbihkZWNvcmF0aW9uLCBmb250LCB0
aGlja25lc3MpOworICAgIGZsb2F0IHkgPSBmcmFnbWVudC55IC0gZm9udC5hc2NlbnQoKSArIHBv
c2l0aW9uT2Zmc2V0Rm9yRGVjb3JhdGlvbihkZWNvcmF0aW9uLCBmb250LCB0aGlja25lc3MpOwog
CiAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNv
bnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKEZsb2F0UmVjdCh4LCB5LCBtX2N1
cnJlbnRDaHVua1BhcnQud2lkdGgsIHRoaWNrbmVzcykpKTsKKyAgICBjb250ZXh0LT5hZGRQYXRo
KFBhdGg6OmNyZWF0ZVJlY3RhbmdsZShGbG9hdFJlY3QoZnJhZ21lbnQueCwgeSwgZnJhZ21lbnQu
d2lkdGgsIHRoaWNrbmVzcykpKTsKIAogICAgIGlmIChhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShj
b250ZXh0LCBkZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29yYXRpb25TdHlsZSkpCiAgICAgICAgIHJl
bGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQpOwpAQCAtNTQyLDM1ICs0OTEsMTQgQEAgdm9p
ZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaQogICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIFJlbmRlclN0
eWxlKiBzdHlsZSkKLXsKLSAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHNlbGVjdGlvbiB0byBwYWlu
dCBhdCBhbGwuCi0gICAgaW50IHN0YXJ0UG9zLCBlbmRQb3M7Ci0gICAgc2VsZWN0aW9uU3RhcnRF
bmQoc3RhcnRQb3MsIGVuZFBvcyk7Ci0gICAgaWYgKHN0YXJ0UG9zID49IGVuZFBvcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gcmVuZGVyZXIoKS0+c2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7Ci0gICAgaWYgKCFiYWNrZ3JvdW5kQ29sb3IuaXNWYWxp
ZCgpIHx8ICFiYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7Ci0KLSAgICBGbG9hdFBvaW50IHNlbGVj
dGlvbk9yaWdpbiA9IHRleHRPcmlnaW47Ci0gICAgc2VsZWN0aW9uT3JpZ2luLm1vdmUoMCwgLWZv
bnQuYXNjZW50KCkpOwotCi0gICAgY29udGV4dC0+c2F2ZSgpOwotICAgIGNvbnRleHQtPnNldEZp
bGxDb2xvcihiYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5jb2xvclNwYWNlKCkpOwotICAgIGNvbnRl
eHQtPmZpbGxSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3RydWN0VGV4dFJ1bihz
dHlsZSksIHNlbGVjdGlvbk9yaWdpbiwgbV9jdXJyZW50Q2h1bmtQYXJ0LmhlaWdodCwgc3RhcnRQ
b3MsIGVuZFBvcyksIGJhY2tncm91bmRDb2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAg
Y29udGV4dC0+cmVzdG9yZSgpOwotfQotCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4
dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYg
dGV4dE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuJiB0ZXh0UnVuLCBpbnQgc3Rh
cnRQb3MsIGludCBlbmRQb3MpCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhT
aGFkb3dzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0
UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQ
b3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKQogewogICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHls
ZS0+Zm9udCgpOwogICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN0eWxlLT50ZXh0U2hh
ZG93KCk7CiAKLSAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChGbG9hdFBvaW50KHRleHRPcmlnaW4u
eCgpLCB0ZXh0T3JpZ2luLnkoKSAtIGZvbnQuYXNjZW50KCkpLCBGbG9hdFNpemUobV9jdXJyZW50
Q2h1bmtQYXJ0LndpZHRoLCBtX2N1cnJlbnRDaHVua1BhcnQuaGVpZ2h0KSk7CisgICAgRmxvYXRQ
b2ludCB0ZXh0T3JpZ2luKGZyYWdtZW50LngsIGZyYWdtZW50LnkpOworICAgIEZsb2F0UmVjdCBz
aGFkb3dSZWN0KEZsb2F0UG9pbnQodGV4dE9yaWdpbi54KCksIHRleHRPcmlnaW4ueSgpIC0gZm9u
dC5hc2NlbnQoKSksIEZsb2F0U2l6ZShmcmFnbWVudC53aWR0aCwgZnJhZ21lbnQuaGVpZ2h0KSk7
CisKICAgICBkbyB7CiAgICAgICAgIGlmICghcHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQ
YWludGluZyhjb250ZXh0LCB0ZXh0UnVuLCBzdHlsZSkpCiAgICAgICAgICAgICBicmVhazsKQEAg
LTU3OSw3ICs1MDcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFk
CiAgICAgICAgIGlmIChzaGFkb3cpCiAgICAgICAgICAgICBleHRyYU9mZnNldCA9IGFwcGx5U2hh
ZG93VG9HcmFwaGljc0NvbnRleHQoY29udGV4dCwgc2hhZG93LCBzaGFkb3dSZWN0LCBmYWxzZSAv
KiBzdHJva2VkICovLCB0cnVlIC8qIG9wYXF1ZSAqLyk7CiAKLSAgICAgICAgZm9udC5kcmF3VGV4
dChjb250ZXh0LCB0ZXh0UnVuLCB0ZXh0T3JpZ2luICsgZXh0cmFPZmZzZXQsIHN0YXJ0UG9zLCBl
bmRQb3MpOworICAgICAgICBmb250LmRyYXdUZXh0KGNvbnRleHQsIHRleHRSdW4sIHRleHRPcmln
aW4gKyBleHRyYU9mZnNldCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogICAgICAgICBy
ZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRpbmcoY29udGV4dCwgdGV4dFJ1bik7
CiAKICAgICAgICAgaWYgKCFzaGFkb3cpCkBAIC01OTQsMjkzICs1MjIsNjkgQEAgdm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZAogICAgIH0gd2hpbGUgKHNoYWRvdyk7CiB9
CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBS
ZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50
U2VsZWN0ZWRUZXh0T25seSkKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogc2Vs
ZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGJvb2wgaGFzU2Vs
ZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSkKIHsKICAgICBBU1NFUlQoc3R5bGUp
OwogICAgIEFTU0VSVChzZWxlY3Rpb25TdHlsZSk7Ci0gICAgQVNTRVJUKG1fY3VycmVudENodW5r
UGFydC5pc1ZhbGlkKCkpOwogCi0gICAgaW50IHN0YXJ0UG9zID0gMDsKLSAgICBpbnQgZW5kUG9z
ID0gMDsKLSAgICBzZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICBpbnQg
c3RhcnRQb3NpdGlvbiA9IDA7CisgICAgaW50IGVuZFBvc2l0aW9uID0gMDsKKyAgICBpZiAoaGFz
U2VsZWN0aW9uKSB7CisgICAgICAgIHNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKTsKKyAgICAgICAgaGFzU2VsZWN0aW9uID0gbWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pOworICAgIH0KIAogICAgIC8vIEZhc3QgcGF0aCBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24s
IGp1c3QgZHJhdyB0aGUgd2hvbGUgY2h1bmsgcGFydCB1c2luZyB0aGUgcmVndWxhciBzdHlsZQot
ICAgIFRleHRSdW4gdGV4dFJ1bihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlKSk7Ci0gICAgaWYgKCFo
YXNTZWxlY3Rpb24gfHwgc3RhcnRQb3MgPj0gZW5kUG9zKSB7Ci0gICAgICAgIHBhaW50VGV4dFdp
dGhTaGFkb3dzKGNvbnRleHQsIHRleHRPcmlnaW4sIHN0eWxlLCB0ZXh0UnVuLCAwLCBtX2N1cnJl
bnRDaHVua1BhcnQubGVuZ3RoKTsKKyAgICBUZXh0UnVuIHRleHRSdW4oY29uc3RydWN0VGV4dFJ1
bihzdHlsZSwgZnJhZ21lbnQpKTsKKyAgICBpZiAoIWhhc1NlbGVjdGlvbiB8fCBzdGFydFBvc2l0
aW9uID49IGVuZFBvc2l0aW9uKSB7CisgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRl
eHQsIHN0eWxlLCB0ZXh0UnVuLCBmcmFnbWVudCwgMCwgZnJhZ21lbnQubGVuZ3RoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEV2ZW50dWFsbHkgZHJhdyB0ZXh0IHVzaW5nIHJl
Z3VsYXIgc3R5bGUgdW50aWwgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzZWxlY3Rpb24KLSAg
ICBpZiAoc3RhcnRQb3MgPiAwICYmICFwYWludFNlbGVjdGVkVGV4dE9ubHkpCi0gICAgICAgIHBh
aW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIHRleHRPcmlnaW4sIHN0eWxlLCB0ZXh0UnVuLCAw
LCBzdGFydFBvcyk7CisgICAgaWYgKHN0YXJ0UG9zaXRpb24gPiAwICYmICFwYWludFNlbGVjdGVk
VGV4dE9ubHkpCisgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIHN0eWxlLCB0
ZXh0UnVuLCBmcmFnbWVudCwgMCwgc3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBEcmF3IHRleHQg
dXNpbmcgc2VsZWN0aW9uIHN0eWxlIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmQgcG9zaXRpb24g
b2YgdGhlIHNlbGVjdGlvbgogICAgIGlmIChzdHlsZSAhPSBzZWxlY3Rpb25TdHlsZSkKICAgICAg
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZChwYXJlbnQoKS0+cmVuZGVy
ZXIoKSwgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwgc2VsZWN0aW9uU3R5bGUpOwogCi0gICAgVGV4
dFJ1biBzZWxlY3Rpb25UZXh0UnVuKGNvbnN0cnVjdFRleHRSdW4oc2VsZWN0aW9uU3R5bGUpKTsK
LSAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCB0ZXh0T3JpZ2luLCBzZWxlY3Rpb25T
dHlsZSwgdGV4dFJ1biwgc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgVGV4dFJ1biBzZWxlY3Rpb25U
ZXh0UnVuKGNvbnN0cnVjdFRleHRSdW4oc2VsZWN0aW9uU3R5bGUsIGZyYWdtZW50KSk7CisgICAg
cGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgc2VsZWN0aW9uU3R5bGUsIHRleHRSdW4sIGZy
YWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAKICAgICBpZiAoc3R5bGUgIT0g
c2VsZWN0aW9uU3R5bGUpCiAgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNo
YW5nZWQocGFyZW50KCktPnJlbmRlcmVyKCksIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQsIHN0eWxl
KTsKIAogICAgIC8vIEV2ZW50dWFsbHkgZHJhdyB0ZXh0IHVzaW5nIHJlZ3VsYXIgc3R5bGUgZnJv
bSB0aGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUgY3Vy
cmVudCBjaHVuayBwYXJ0Ci0gICAgaWYgKGVuZFBvcyA8IG1fY3VycmVudENodW5rUGFydC5sZW5n
dGggJiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKLSAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRv
d3MoY29udGV4dCwgdGV4dE9yaWdpbiwgc3R5bGUsIHRleHRSdW4sIGVuZFBvcywgbV9jdXJyZW50
Q2h1bmtQYXJ0Lmxlbmd0aCk7CisgICAgaWYgKGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50
PihmcmFnbWVudC5sZW5ndGgpICYmICFwYWludFNlbGVjdGVkVGV4dE9ubHkpCisgICAgICAgIHBh
aW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIHN0eWxlLCB0ZXh0UnVuLCBmcmFnbWVudCwgZW5k
UG9zaXRpb24sIGZyYWdtZW50Lmxlbmd0aCk7CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6
YnVpbGRMYXlvdXRJbmZvcm1hdGlvbihTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvJiBpbmZvLCBTVkdM
YXN0R2x5cGhJbmZvJiBsYXN0R2x5cGgpCitJbnRSZWN0IFNWR0lubGluZVRleHRCb3g6OmNhbGN1
bGF0ZUJvdW5kYXJpZXMoKSBjb25zdAogeworICAgIEZsb2F0UmVjdCB0ZXh0UmVjdDsKKwogICAg
IFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRoaXMtPnRleHRSZW5kZXJlcigpOwogICAgIEFT
U0VSVCh0ZXh0UmVuZGVyZXIpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dFJlbmRl
cmVyLT5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZSk7CiAKLSAgICBSZW5kZXJPYmplY3QqIHBh
cmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7Ci0gICAgQVNTRVJUKHBhcmVudFJl
bmRlcmVyKTsKLSAgICBBU1NFUlQocGFyZW50UmVuZGVyZXItPm5vZGUoKSk7Ci0gICAgQVNTRVJU
KHBhcmVudFJlbmRlcmVyLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKLSAgICBTVkdFbGVtZW50
KiBsZW5ndGhDb250ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhcmVudFJlbmRlcmVy
LT5ub2RlKCkpOwotCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0UmVuZGVyZXItPmNoYXJhY3RlcnMoKTsKLQot
ICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBzdGFydCgpOwotICAgIHVuc2lnbmVkIGVuZFBv
c2l0aW9uID0gZW5kKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuKCk7Ci0KLSAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICBib29s
IGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN2Z1N0eWxlKTsKLQotICAg
IGludCBjaGFyc0NvbnN1bWVkID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpICs9IGNoYXJzQ29uc3VtZWQpIHsKLSAgICAgICAgU1ZHQ2hhciBzdmdDaGFyOwotCi0g
ICAgICAgIGlmIChpbmZvLmluUGF0aExheW91dCgpKQotICAgICAgICAgICAgc3ZnQ2hhci5wYXRo
RGF0YSA9IFNWR0NoYXJPblBhdGg6OmNyZWF0ZSgpOwotCi0gICAgICAgIGZsb2F0IGdseXBoV2lk
dGggPSAwLjBmOwotICAgICAgICBmbG9hdCBnbHlwaEhlaWdodCA9IDAuMGY7Ci0gICAgICAgIFN0
cmluZyBnbHlwaE5hbWU7Ci0gICAgICAgIFN0cmluZyB1bmljb2RlU3RyaW5nOwotICAgICAgICBt
ZWFzdXJlQ2hhcmFjdGVyKHN0eWxlLCBpLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUsIHVuaWNv
ZGVTdHJpbmcsIGdseXBoV2lkdGgsIGdseXBoSGVpZ2h0KTsKLQotICAgICAgICBib29sIGFzc2ln
bmVkWCA9IGZhbHNlOwotICAgICAgICBib29sIGFzc2lnbmVkWSA9IGZhbHNlOwotCi0gICAgICAg
IGlmIChpbmZvLnhWYWx1ZUF2YWlsYWJsZSgpICYmICghaW5mby5pblBhdGhMYXlvdXQoKSB8fCAo
aW5mby5pblBhdGhMYXlvdXQoKSAmJiAhaXNWZXJ0aWNhbFRleHQpKSkgewotICAgICAgICAgICAg
aWYgKCFpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBzdmdDaGFyLm5ld1RleHRDaHVu
ayA9IHRydWU7Ci0KLSAgICAgICAgICAgIGFzc2lnbmVkWCA9IHRydWU7Ci0gICAgICAgICAgICBz
dmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZm8uY3VyeCA9IGlu
Zm8ueFZhbHVlTmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluZm8ueVZhbHVlQXZh
aWxhYmxlKCkgJiYgKCFpbmZvLmluUGF0aExheW91dCgpIHx8IChpbmZvLmluUGF0aExheW91dCgp
ICYmIGlzVmVydGljYWxUZXh0KSkpIHsKLSAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkK
LSAgICAgICAgICAgICAgICBzdmdDaGFyLm5ld1RleHRDaHVuayA9IHRydWU7Ci0KLSAgICAgICAg
ICAgIGFzc2lnbmVkWSA9IHRydWU7Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZm8uY3VyeSA9IGluZm8ueVZhbHVlTmV4dCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZmxvYXQgZHggPSAwLjBmOwotICAgICAgICBmbG9hdCBkeSA9IDAu
MGY7Ci0KLSAgICAgICAgLy8gQXBwbHkgeC1heGlzIHNoaWZ0Ci0gICAgICAgIGlmIChpbmZvLmR4
VmFsdWVBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9
IHRydWU7Ci0KLSAgICAgICAgICAgIGR4ID0gaW5mby5keFZhbHVlTmV4dCgpOwotICAgICAgICAg
ICAgaW5mby5keCArPSBkeDsKLQotICAgICAgICAgICAgaWYgKCFpbmZvLmluUGF0aExheW91dCgp
KQotICAgICAgICAgICAgICAgIGluZm8uY3VyeCArPSBkeDsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIEFwcGx5IHktYXhpcyBzaGlmdAotICAgICAgICBpZiAoaW5mby5keVZhbHVlQXZhaWxhYmxl
KCkpIHsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotCi0gICAg
ICAgICAgICBkeSA9IGluZm8uZHlWYWx1ZU5leHQoKTsKLSAgICAgICAgICAgIGluZm8uZHkgKz0g
ZHk7Ci0KLSAgICAgICAgICAgIGlmICghaW5mby5pblBhdGhMYXlvdXQoKSkKLSAgICAgICAgICAg
ICAgICBpbmZvLmN1cnkgKz0gZHk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUYWtlIGxldHRl
ciAmIHdvcmQgc3BhY2luZyBhbmQga2VybmluZyBpbnRvIGFjY291bnQKLSAgICAgICAgZmxvYXQg
c3BhY2luZyA9IGZvbnQubGV0dGVyU3BhY2luZygpICsgY2FsY3VsYXRlQ1NTS2VybmluZyhsZW5n
dGhDb250ZXh0LCBzdHlsZSk7Ci0KLSAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0
ZXIgPSBjaGFyYWN0ZXJzICsgKCFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBlbmRQb3NpdGlv
biAtIGkgOiBzdGFydFBvc2l0aW9uICsgaSk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBsYXN0Q2hh
cmFjdGVyID0gMDsKLQotICAgICAgICBpZiAoIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewot
ICAgICAgICAgICAgaWYgKGkgPCBlbmRQb3NpdGlvbikKLSAgICAgICAgICAgICAgICBsYXN0Q2hh
cmFjdGVyID0gY2hhcmFjdGVycyArIGVuZFBvc2l0aW9uIC0gaSArICAxOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAgIGxhc3RDaGFyYWN0
ZXIgPSBjaGFyYWN0ZXJzICsgc3RhcnRQb3NpdGlvbiArIGkgLSAxOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gRklYTUU6IFNWRyBLZXJuaW5nIGRvZXNuJ3QgZ2V0IGFwcGxpZWQgb24gdGV4dHMg
b24gcGF0aC4KLSAgICAgICAgYm9vbCBhcHBsaWVkU1ZHS2VybmluZyA9IGFwcGx5U1ZHS2Vybmlu
ZyhpbmZvLCBzdHlsZSwgbGFzdEdseXBoLCB1bmljb2RlU3RyaW5nLCBnbHlwaE5hbWUsIGlzVmVy
dGljYWxUZXh0KTsKLSAgICAgICAgaWYgKGluZm8ubmV4dERyYXduU2VwZXJhdGVkIHx8IHNwYWNp
bmcgIT0gMC4wZiB8fCBhcHBsaWVkU1ZHS2VybmluZykgewotICAgICAgICAgICAgaW5mby5uZXh0
RHJhd25TZXBlcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0
ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgJiYg
Rm9udDo6dHJlYXRBc1NwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSAmJiBsYXN0Q2hhcmFjdGVyICYm
ICFGb250Ojp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBzcGFj
aW5nICs9IGZvbnQud29yZFNwYWNpbmcoKTsKLQotICAgICAgICAgICAgaWYgKHNwYWNpbmcgIT0g
MC4wZiAmJiAhaW5mby5pblBhdGhMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICBpbmZvLm5leHRE
cmF3blNlcGVyYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBvcmllbnRh
dGlvbkFuZ2xlID0gZ2x5cGhPcmllbnRhdGlvblRvQW5nbGUoc3ZnU3R5bGUsIGlzVmVydGljYWxU
ZXh0LCAqY3VycmVudENoYXJhY3Rlcik7Ci0KLSAgICAgICAgZmxvYXQgeE9yaWVudGF0aW9uU2hp
ZnQgPSAwLjBmOwotICAgICAgICBmbG9hdCB5T3JpZW50YXRpb25TaGlmdCA9IDAuMGY7Ci0gICAg
ICAgIGZsb2F0IGdseXBoQWR2YW5jZSA9IGFwcGx5R2x5cGhBZHZhbmNlQW5kU2hpZnRSZXNwZWN0
aW5nT3JpZW50YXRpb24oaXNWZXJ0aWNhbFRleHQsIG9yaWVudGF0aW9uQW5nbGUsIGdseXBoV2lk
dGgsIGdseXBoSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQsIHN2Z0NoYXIsIHhPcmll
bnRhdGlvblNoaWZ0LCB5T3JpZW50YXRpb25TaGlmdCk7Ci0KLSAgICAgICAgLy8gSGFuZGxlIHRl
eHRQYXRoIGxheW91dCBtb2RlCi0gICAgICAgIGlmIChpbmZvLmluUGF0aExheW91dCgpKSB7Ci0g
ICAgICAgICAgICBmbG9hdCBleHRyYUFkdmFuY2UgPSBpc1ZlcnRpY2FsVGV4dCA/IGR5IDogZHg7
Ci0gICAgICAgICAgICBmbG9hdCBuZXdPZmZzZXQgPSBGTFRfTUlOOwotCi0gICAgICAgICAgICBp
ZiAoYXNzaWduZWRYICYmICFpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBuZXdPZmZz
ZXQgPSBpbmZvLmN1cng7Ci0gICAgICAgICAgICBlbHNlIGlmIChhc3NpZ25lZFkgJiYgaXNWZXJ0
aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gaW5mby5jdXJ5OwotCi0gICAg
ICAgICAgICBmbG9hdCBjb3JyZWN0ZWRHbHlwaEFkdmFuY2UgPSBnbHlwaEFkdmFuY2U7Ci0KLSAg
ICAgICAgICAgIC8vIEhhbmRsZSBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIGJ5IHNw
ZWNpZnlpbmcgcGVyLWNoYXJhY3RlciBzY2FsZSBvcGVyYXRpb25zCi0gICAgICAgICAgICBpZiAo
aW5mby5wYXRoVGV4dExlbmd0aCAmJiBpbmZvLnBhdGhDaHVua0xlbmd0aCkgeyAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3ZnQ2hh
ci5wYXRoRGF0YS0+eVNjYWxlID0gaW5mby5wYXRoQ2h1bmtMZW5ndGggLyBpbmZvLnBhdGhUZXh0
TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBzcGFjaW5nICo9IHN2Z0NoYXIucGF0aERhdGEt
PnlTY2FsZTsKLSAgICAgICAgICAgICAgICAgICAgY29ycmVjdGVkR2x5cGhBZHZhbmNlICo9IHN2
Z0NoYXIucGF0aERhdGEtPnlTY2FsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2NhbGUgPSBpbmZvLnBhdGhDaHVua0xl
bmd0aCAvIGluZm8ucGF0aFRleHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNpbmcg
Kj0gc3ZnQ2hhci5wYXRoRGF0YS0+eFNjYWxlOwotICAgICAgICAgICAgICAgICAgICBjb3JyZWN0
ZWRHbHlwaEFkdmFuY2UgKj0gc3ZnQ2hhci5wYXRoRGF0YS0+eFNjYWxlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSGFuZGxlIGxldHRlciAmIHdv
cmQgc3BhY2luZyBvbiB0ZXh0IHBhdGgKLSAgICAgICAgICAgIGZsb2F0IHBhdGhFeHRyYUFkdmFu
Y2UgPSBpbmZvLnBhdGhFeHRyYUFkdmFuY2U7Ci0gICAgICAgICAgICBpbmZvLnBhdGhFeHRyYUFk
dmFuY2UgKz0gc3BhY2luZzsKLQotICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+aGlkZGVu
ID0gIWluZm8ubmV4dFBhdGhMYXlvdXRQb2ludEFuZEFuZ2xlKGNvcnJlY3RlZEdseXBoQWR2YW5j
ZSwgZXh0cmFBZHZhbmNlLCBuZXdPZmZzZXQpOwotICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNl
cGVyYXRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGluZm8ucGF0aEV4dHJhQWR2YW5jZSA9IHBh
dGhFeHRyYUFkdmFuY2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBcHBseSByb3RhdGlvbgot
ICAgICAgICBpZiAoaW5mby5hbmdsZVZhbHVlQXZhaWxhYmxlKCkpCi0gICAgICAgICAgICBpbmZv
LmFuZ2xlID0gaW5mby5hbmdsZVZhbHVlTmV4dCgpOwotCi0gICAgICAgIC8vIEFwcGx5IGJhc2Vs
aW5lLXNoaWZ0Ci0gICAgICAgIGlmIChpbmZvLmJhc2VsaW5lU2hpZnRWYWx1ZUF2YWlsYWJsZSgp
KSB7Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGZsb2F0IHNoaWZ0ID0gaW5mby5iYXNlbGluZVNoaWZ0VmFsdWVOZXh0KCk7Ci0KLSAgICAg
ICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBpbmZvLnNoaWZ0eCAr
PSBzaGlmdDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpbmZvLnNoaWZ0eSAt
PSBzaGlmdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRha2UgZG9taW5hbnQtYmFzZWxpbmUg
LyBhbGlnbm1lbnQtYmFzZWxpbmUgaW50byBhY2NvdW50Ci0gICAgICAgIHlPcmllbnRhdGlvblNo
aWZ0ICs9IGFsaWdubWVudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dFJlbmRl
cmVyLCBmb250KTsKKyAgICBpbnQgYmFzZWxpbmUgPSBiYXNlbGluZVBvc2l0aW9uKHRydWUpOwor
ICAgIGludCBoZWlnaHREaWZmZXJlbmNlID0gYmFzZWxpbmUgLSBzdHlsZS0+Zm9udCgpLmFzY2Vu
dCgpOwogCi0gICAgICAgIHN2Z0NoYXIueCA9IGluZm8uY3VyeDsKLSAgICAgICAgc3ZnQ2hhci55
ID0gaW5mby5jdXJ5OwotICAgICAgICBzdmdDaGFyLmFuZ2xlID0gaW5mby5hbmdsZTsKLQotICAg
ICAgICAvLyBGb3IgdGV4dCBwYXRocyBhbnkgc2hpZnQgKGR4L2R5L2Jhc2VsaW5lLXNoaWZ0KSBo
YXMgdG8gYmUgYXBwbGllZCBhZnRlciB0aGUgcm90YXRpb24KLSAgICAgICAgaWYgKCFpbmZvLmlu
UGF0aExheW91dCgpKSB7Ci0gICAgICAgICAgICBzdmdDaGFyLnggKz0gaW5mby5zaGlmdHggKyB4
T3JpZW50YXRpb25TaGlmdDsKLSAgICAgICAgICAgIHN2Z0NoYXIueSArPSBpbmZvLnNoaWZ0eSAr
IHlPcmllbnRhdGlvblNoaWZ0OwotCi0gICAgICAgICAgICBpZiAob3JpZW50YXRpb25BbmdsZSAh
PSAwLjBmKQotICAgICAgICAgICAgICAgIHN2Z0NoYXIuYW5nbGUgKz0gb3JpZW50YXRpb25Bbmds
ZTsKLQotICAgICAgICAgICAgaWYgKHN2Z0NoYXIuYW5nbGUgIT0gMC4wZikKLSAgICAgICAgICAg
ICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPm9yaWVudGF0aW9uQW5nbGUgPSBvcmllbnRhdGlv
bkFuZ2xlOwotCi0gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAg
ICAgc3ZnQ2hhci5hbmdsZSAtPSA5MC4wZjsKLQotICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0
YS0+eFNoaWZ0ID0gaW5mby5zaGlmdHggKyB4T3JpZW50YXRpb25TaGlmdDsKLSAgICAgICAgICAg
IHN2Z0NoYXIucGF0aERhdGEtPnlTaGlmdCA9IGluZm8uc2hpZnR5ICsgeU9yaWVudGF0aW9uU2hp
ZnQ7Ci0KLSAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSB0byBnbHlwaCBtaWRwb2ludAotICAgICAg
ICAgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRo
RGF0YS0+eFNoaWZ0ICs9IGluZm8uZHg7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0
YS0+eVNoaWZ0IC09IGdseXBoQWR2YW5jZSAvIDIuMGY7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPnhTaGlmdCAtPSBnbHlwaEFkdmFuY2Ug
LyAyLjBmOwotICAgICAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPnlTaGlmdCArPSBpbmZv
LmR5OwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50
c1NpemUgPSBtX3RleHRGcmFnbWVudHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IFNWR1RleHRGcmFn
bWVudCYgZnJhZ21lbnQgPSBtX3RleHRGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIEZsb2F0UmVj
dCBmcmFnbWVudFJlY3QoZnJhZ21lbnQueCwgZnJhZ21lbnQueSAtIGJhc2VsaW5lLCBmcmFnbWVu
dC53aWR0aCwgZnJhZ21lbnQuaGVpZ2h0ICsgaGVpZ2h0RGlmZmVyZW5jZSk7CiAKLSAgICAgICAg
Ly8gQWR2YW5jZSB0byBuZXcgcG9zaXRpb24KLSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7
Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
IGluZm8uY3VyeSArPSBnbHlwaEFkdmFuY2UgKyBzcGFjaW5nOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGluZm8uY3VyeCArPSBnbHlwaEFkdmFuY2UgKyBzcGFjaW5nOworICAgICAgICBp
ZiAoIWZyYWdtZW50LnRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgICAgICBmcmFnbWVu
dFJlY3QgPSBmcmFnbWVudC50cmFuc2Zvcm0ubWFwUmVjdChmcmFnbWVudFJlY3QpOwogCi0gICAg
ICAgIC8vIEFkdmFuY2UgdG8gbmV4dCBjaGFyYWN0ZXIgZ3JvdXAKLSAgICAgICAgZm9yIChpbnQg
ayA9IDA7IGsgPCBjaGFyc0NvbnN1bWVkOyArK2spIHsKLSAgICAgICAgICAgIGluZm8uc3ZnQ2hh
cnMuYXBwZW5kKHN2Z0NoYXIpOwotICAgICAgICAgICAgaW5mby5wcm9jZXNzZWRTaW5nbGVDaGFy
YWN0ZXIoKTsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHN2Z0NoYXIubmV3VGV4dENodW5rID0gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAg
ICAgdGV4dFJlY3QudW5pdGUoZnJhZ21lbnRSZWN0KTsKICAgICB9Ci19Ci0KLUZsb2F0UmVjdCBT
VkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMoUmVuZGVyU3R5bGUqIHN0
eWxlLCBpbnQgcG9zaXRpb24sIGNvbnN0IFNWR0NoYXImIGNoYXJhY3RlcikgY29uc3QKLXsKLSAg
ICBpbnQgY2hhcnNDb25zdW1lZCA9IDA7Ci0gICAgU3RyaW5nIGdseXBoTmFtZTsKLSAgICBTdHJp
bmcgdW5pY29kZVN0cmluZzsKLSAgICBmbG9hdCBnbHlwaFdpZHRoID0gMC4wZjsKLSAgICBmbG9h
dCBnbHlwaEhlaWdodCA9IDAuMGY7Ci0gICAgbWVhc3VyZUNoYXJhY3RlcihzdHlsZSwgcG9zaXRp
b24sIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSwgdW5pY29kZVN0cmluZywgZ2x5cGhXaWR0aCwg
Z2x5cGhIZWlnaHQpOwotCi0gICAgRmxvYXRSZWN0IGdseXBoUmVjdChjaGFyYWN0ZXIueCwgY2hh
cmFjdGVyLnkgLSBzdHlsZS0+Zm9udCgpLmFzY2VudCgpLCBnbHlwaFdpZHRoLCBnbHlwaEhlaWdo
dCk7Ci0gICAgZ2x5cGhSZWN0ID0gY2hhcmFjdGVyLmNoYXJhY3RlclRyYW5zZm9ybSgpLm1hcFJl
Y3QoZ2x5cGhSZWN0KTsKLSAgICBpZiAobV9jaHVua1RyYW5zZm9ybWF0aW9uLmlzSWRlbnRpdHko
KSkKLSAgICAgICAgcmV0dXJuIGdseXBoUmVjdDsKLQotICAgIHJldHVybiBtX2NodW5rVHJhbnNm
b3JtYXRpb24ubWFwUmVjdChnbHlwaFJlY3QpOwotfQotCi1JbnRSZWN0IFNWR0lubGluZVRleHRC
b3g6OmNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdAotewotICAgIEZsb2F0UmVjdCB0ZXh0UmVj
dDsKLSAgICBpbnQgYmFzZWxpbmUgPSBiYXNlbGluZVBvc2l0aW9uKHRydWUpOwotCi0gICAgY29u
c3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N2Z1Rl
eHRDaHVua1BhcnRzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fc3ZnVGV4dENodW5rUGFydHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICB0ZXh0UmVjdC51bml0ZShpdC0+Zmlyc3RDaGFyYWN0ZXItPmNoYXJh
Y3RlclRyYW5zZm9ybSgpLm1hcFJlY3QoRmxvYXRSZWN0KGl0LT5maXJzdENoYXJhY3Rlci0+eCwg
aXQtPmZpcnN0Q2hhcmFjdGVyLT55IC0gYmFzZWxpbmUsIGl0LT53aWR0aCwgaXQtPmhlaWdodCkp
KTsKLQotICAgIGlmIChtX2NodW5rVHJhbnNmb3JtYXRpb24uaXNJZGVudGl0eSgpKQotICAgICAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdCk7CiAKLSAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChtX2NodW5rVHJhbnNmb3JtYXRpb24ubWFwUmVjdCh0ZXh0UmVjdCkpOworICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCShy
ZXZpc2lvbiA2ODg3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsyNSwxMyBAQAogCiAjaWYgRU5BQkxFKFNWRykK
ICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiU1ZHVGV4dENodW5rTGF5b3V0
SW5mby5oIgotI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJT
VkdUZXh0TGF5b3V0RW5naW5lLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVu
ZGVyU1ZHUmVzb3VyY2U7CiBjbGFzcyBTVkdSb290SW5saW5lQm94OwogCi1zdHJ1Y3QgU1ZHQ2hh
cmFjdGVyTGF5b3V0SW5mbzsKLXN0cnVjdCBTVkdMYXN0R2x5cGhJbmZvOwotCiBjbGFzcyBTVkdJ
bmxpbmVUZXh0Qm94IDogcHVibGljIElubGluZVRleHRCb3ggewogcHVibGljOgogICAgIFNWR0lu
bGluZVRleHRCb3goUmVuZGVyT2JqZWN0Kik7CkBAIC01MCwzMCArNDYsMjYgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgaW50IG9mZnNldEZvclBvc2l0aW9uKGludCB4LCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgcG9zaXRpb25Gb3JPZmZz
ZXQoaW50IG9mZnNldCkgY29uc3Q7CiAKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uQmFja2dyb3Vu
ZChQYWludEluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOwotICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0KGludCBhYnN4LCBp
bnQgYWJzeSwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
ZWxlY3Rpb25TdGFydEVuZChpbnQmIHN0YXJ0UG9zLCBpbnQmIGVuZFBvcyk7Ci0gICAgdm9pZCBt
YXBTdGFydEVuZFBvc2l0aW9uc0ludG9DaHVua1BhcnRDb29yZGluYXRlcyhpbnQmIHN0YXJ0UG9z
LCBpbnQmIGVuZFBvcywgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OworICAgIHZpcnR1
YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0KGludCBhYnN4LCBpbnQgYWJzeSwgaW50IHN0YXJ0UG9z
aXRpb24sIGludCBlbmRQb3NpdGlvbik7CiAKLSAgICBTVkdSb290SW5saW5lQm94KiBzdmdSb290
SW5saW5lQm94KCkgY29uc3Q7CisgICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCYgc3RhcnRQb3NpdGlv
biwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKLSAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHNo
YXJlZCB3aXRoIFNWR1Jvb3RJbmxpbmVCb3ggICAgIAotICAgIHZvaWQgbWVhc3VyZUNoYXJhY3Rl
cihSZW5kZXJTdHlsZSosIGludCBwb3NpdGlvbiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcm
IGdseXBoTmFtZSwgU3RyaW5nJiB1bmljb2RlU3RyaW5nLCBmbG9hdCYgZ2x5cGhXaWR0aCwgZmxv
YXQmIGdseXBoSGVpZ2h0KSBjb25zdDsKLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlR2x5cGhCb3Vu
ZGFyaWVzKFJlbmRlclN0eWxlKiwgaW50IHBvc2l0aW9uLCBjb25zdCBTVkdDaGFyJikgY29uc3Q7
CisgICAgdmlydHVhbCBJbnRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdDsKIAotICAg
IHZvaWQgYnVpbGRMYXlvdXRJbmZvcm1hdGlvbihTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvJiwgU1ZH
TGFzdEdseXBoSW5mbyYpOworICAgIHZvaWQgY2xlYXJUZXh0RnJhZ21lbnRzKCkgeyBtX3RleHRG
cmFnbWVudHMuY2xlYXIoKTsgfQorICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiB0ZXh0RnJh
Z21lbnRzKCkgeyByZXR1cm4gbV90ZXh0RnJhZ21lbnRzOyB9CisgICAgY29uc3QgVmVjdG9yPFNW
R1RleHRGcmFnbWVudD4mIHRleHRGcmFnbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3RleHRGcmFn
bWVudHM7IH0KIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY2h1bmtUcmFuc2Zvcm1hdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fY2h1bmtUcmFuc2Zvcm1hdGlvbjsgfQotICAgIHZvaWQgc2V0
Q2h1bmtUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBt
X2NodW5rVHJhbnNmb3JtYXRpb24gPSB0cmFuc2Zvcm07IH0KLSAgICB2b2lkIGFkZENodW5rUGFy
dEluZm9ybWF0aW9uKGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIHsgbV9zdmdUZXh0Q2h1
bmtQYXJ0cy5hcHBlbmQocGFydCk7IH0KLSAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rUGFy
dD4mIHN2Z1RleHRDaHVua1BhcnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdmdUZXh0Q2h1bmtQYXJ0
czsgfQorICAgIGJvb2wgc3RhcnRzTmV3VGV4dENodW5rKCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dHNOZXdUZXh0Q2h1bms7IH0KKyAgICB2b2lkIHNldFN0YXJ0c05ld1RleHRDaHVuayhib29sIG5l
d1RleHRDaHVuaykgeyBtX3N0YXJ0c05ld1RleHRDaHVuayA9IG5ld1RleHRDaHVuazsgfQogCi0g
ICAgdmlydHVhbCBJbnRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdDsKKyAgICBpbnQg
b2Zmc2V0Rm9yUG9zaXRpb25JbkZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGZsb2F0
IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKKyAgICBGbG9hdFJl
Y3Qgc2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBp
bnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgUmVuZGVy
U3R5bGUqKTsKIAogcHJpdmF0ZToKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVy
U3R5bGUqKSBjb25zdDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYnVpbGRDaHVua1RyYW5zZm9ybWF0
aW9uKFNWR0NoYXImIGZpcnN0Q2hhcmFjdGVyKSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKIAog
ICAgIGJvb2wgYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYsIFJlbmRl
ck9iamVjdCosIFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCByZWxlYXNlUGFpbnRpbmdSZXNvdXJj
ZShHcmFwaGljc0NvbnRleHQqJik7CkBAIC04MSwyMiArNzMsMTcgQEAgcHJpdmF0ZToKICAgICBi
b29sIHByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0
KiYsIFRleHRSdW4mLCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcmVzdG9yZUdyYXBoaWNzQ29u
dGV4dEFmdGVyVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBUZXh0UnVuJik7CiAKLSAg
ICB2b2lkIGNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0KFJlbmRlclN0eWxlKik7Ci0gICAgdm9p
ZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgdGV4
dE9yaWdpbiwgRVRleHREZWNvcmF0aW9uLCBib29sIGhhc1NlbGVjdGlvbik7Ci0gICAgdm9pZCBw
YWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2lu
dCYgdGV4dE9yaWdpbiwgUmVuZGVyT2JqZWN0KiwgRVRleHREZWNvcmF0aW9uKTsKLSAgICB2b2lk
IHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRP
cmlnaW4sIFJlbmRlclN0eWxlKik7Ci0gICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHls
ZSogc2VsZWN0aW9uU3R5bGUsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRU
ZXh0T25seSk7Ci0gICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5kZXJTdHlsZSosIFRleHRSdW4mLCBp
bnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOwotCi0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RG
b3JUZXh0Q2h1bmtQYXJ0KGNvbnN0IFNWR1RleHRDaHVua1BhcnQmLCBpbnQgcGFydFN0YXJ0UG9z
LCBpbnQgcGFydEVuZFBvcywgUmVuZGVyU3R5bGUqKTsKKyAgICB2b2lkIHBhaW50RGVjb3JhdGlv
bihHcmFwaGljc0NvbnRleHQqLCBFVGV4dERlY29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYpOworICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4dCos
IEVUZXh0RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgUmVuZGVyT2JqZWN0KiBk
ZWNvcmF0aW9uUmVuZGVyZXIpOworICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhp
Y3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50
JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbik7CisgICAgdm9pZCBwYWludFRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9u
U3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBh
aW50U2VsZWN0ZWRUZXh0T25seSk7CiAKIHByaXZhdGU6CiAgICAgaW50IG1fbG9naWNhbEhlaWdo
dDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jaHVua1RyYW5zZm9ybWF0aW9uOwotICAgIFZlY3Rv
cjxTVkdUZXh0Q2h1bmtQYXJ0PiBtX3N2Z1RleHRDaHVua1BhcnRzOwotICAgIG11dGFibGUgU1ZH
VGV4dENodW5rUGFydCBtX2N1cnJlbnRDaHVua1BhcnQ7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2Uq
IG1fcGFpbnRpbmdSZXNvdXJjZTsKICAgICBpbnQgbV9wYWludGluZ1Jlc291cmNlTW9kZTsKKyAg
ICBib29sIG1fc3RhcnRzTmV3VGV4dENodW5rIDogMTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSog
bV9wYWludGluZ1Jlc291cmNlOworICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+IG1fdGV4dEZy
YWdtZW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDY4ODc0KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2po
MTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgotICogICAgICAgICAgIChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyIEluYy4KLSAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjcsMTUgKzI3LDEy
IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNp
bmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5o
IgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdUZXh0TGF5b3V0
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgogCi0v
LyBUZXh0IGNodW5rIHBhcnQgcHJvcGFnYXRpb24gY2FuIGJlIHRyYWNlZCBieSBzZXR0aW5nIHRo
aXMgdmFyaWFibGUgPiAwLgotI2RlZmluZSBERUJVR19DSFVOS19QQVJUX1BST1BBR0FUSU9OIDAK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKQEAgLTQ2LDEyICs0MywyOCBAQCB2b2lkIFNW
R1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgUmVuZGVyT2JqZWN0KiBib3hS
ZW5kZXJlciA9IHJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKGJveFJlbmRlcmVyKTsKIAorICAgIGJv
b2wgaXNQcmludGluZyA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPnByaW50aW5nKCk7CisgICAg
Ym9vbCBoYXNTZWxlY3Rpb24gPSAhaXNQcmludGluZyAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKwogICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5m
byhwYWludEluZm8pOworICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKKyAgICAgICAgZm9yIChJbmxp
bmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9u
TGluZSgpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dEJveCgpKQor
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihjaGlsZCktPnBh
aW50U2VsZWN0aW9uQmFja2dyb3VuZChjaGlsZFBhaW50SW5mbyk7CisgICAgICAgICAgICBlbHNl
IGlmIChjaGlsZC0+aXNTVkdJbmxpbmVGbG93Qm94KCkpCisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8U1ZHSW5saW5lRmxvd0JveCo+KGNoaWxkKS0+cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5k
KGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGNoaWxkUGFpbnRJbmZv
LmNvbnRleHQtPnNhdmUoKTsKIAogICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9S
ZW5kZXJTVkdDb250ZW50KGJveFJlbmRlcmVyLCBjaGlsZFBhaW50SW5mbykpIHsKLSAgICAgICAg
Zm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dE9uTGluZSgpKQorICAgICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgICAg
IGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpCisgICAgICAgICAgICAgICAgU1ZHSW5s
aW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcih0b1JlbmRl
clNWR0lubGluZVRleHQoc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGNoaWxkKS0+dGV4
dFJlbmRlcmVyKCkpKTsKKwogICAgICAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJbmZv
LCAwLCAwKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlz
aFJlbmRlclNWR0NvbnRlbnQoYm94UmVuZGVyZXIsIGNoaWxkUGFpbnRJbmZvLCBwYWludEluZm8u
Y29udGV4dCk7CkBAIC02MCwxMzAgKzczLDUwIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFp
bnQoUGFpbnRJbmZvJiAKIAogdm9pZCBTVkdSb290SW5saW5lQm94Ojpjb21wdXRlUGVyQ2hhcmFj
dGVyTGF5b3V0SW5mb3JtYXRpb24oKQogewotICAgIC8vIENsZWFuIHVwIGFueSBwcmV2aW91cyBs
YXlvdXQgaW5mb3JtYXRpb24KLSAgICBtX3N2Z0NoYXJzLmNsZWFyKCk7Ci0gICAgbV9zdmdUZXh0
Q2h1bmtzLmNsZWFyKCk7Ci0KLSAgICAvLyBCdWlsZCBsYXlvdXQgaW5mb3JtYXRpb24gZm9yIGFs
bCBjb250YWluZWQgcmVuZGVyIG9iamVjdHMKLSAgICBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvIGNo
YXJJbmZvOwotICAgIGJ1aWxkTGF5b3V0SW5mb3JtYXRpb24odGhpcywgY2hhckluZm8pOwotICAg
IG1fc3ZnQ2hhcnMgPSBjaGFySW5mby5zdmdDaGFyczsKLQotICAgIC8vIE5vdyBhbGwgbGF5b3V0
IGluZm9ybWF0aW9uIGFyZSBhdmFpbGFibGUgZm9yIGV2ZXJ5IGNoYXJhY3RlcgotICAgIC8vIGNv
bnRhaW5lZCBpbiBhbnkgb2Ygb3VyIGNoaWxkIGlubGluZS9mbG93IGJveGVzLiBCdWlsZCBsaXN0
Ci0gICAgLy8gb2YgdGV4dCBjaHVua3Mgbm93LCB0byBiZSBhYmxlIHRvIGFwcGx5IHRleHQtYW5j
aG9yIHNoaWZ0cy4KLSAgICBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvIGNodW5rSW5mbzsKLSAgICBj
aHVua0luZm8uYnVpbGRUZXh0Q2h1bmtzKG1fc3ZnQ2hhcnMuYmVnaW4oKSwgbV9zdmdDaGFycy5l
bmQoKSwgdGhpcyk7Ci0KLSAgICAvLyBMYXlvdXQgYWxsIHRleHQgY2h1bmtzCi0gICAgLy8gdGV4
dC1hbmNob3IgbmVlZHMgdG8gYmUgYXBwbGllZCB0byBpbmRpdmlkdWFsIGNodW5rcy4KLSAgICBj
aHVua0luZm8ubGF5b3V0VGV4dENodW5rcygpOwotICAgIG1fc3ZnVGV4dENodW5rcyA9IGNodW5r
SW5mby50ZXh0Q2h1bmtzKCk7CisgICAgLy8gUGVyZm9ybSBTVkcgdGV4dCBsYXlvdXQgcGhhc2Ug
dHdvIChzZWUgU1ZHVGV4dExheW91dEVuZ2luZSBmb3IgZGV0YWlscykuCisgICAgU1ZHVGV4dExh
eW91dEVuZ2luZSBjaGFyYWN0ZXJMYXlvdXQ7CisgICAgbGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJv
eGVzKHRoaXMsIGNoYXJhY3RlckxheW91dCk7CiAKLSAgICAvLyBQcm9wYWdhdGUgdGV4dCBjaHVu
ayBwYXJ0IGluZm9ybWF0aW9uIHRvIGFsbCBTVkdJbmxpbmVUZXh0Qm94ZXMsIHNlZSBTVkdUZXh0
Q2h1bmtMYXlvdXRJbmZvLmggZm9yIGRldGFpbHMKLSAgICBwcm9wYWdhdGVUZXh0Q2h1bmtQYXJ0
SW5mb3JtYXRpb24oKTsKKyAgICAvLyBQZXJmb3JtIFNWRyB0ZXh0IGxheW91dCBwaGFzZSB0aHJl
ZSAoc2VlIFNWR1RleHRDaHVua0J1aWxkZXIgZm9yIGRldGFpbHMpLgorICAgIGNoYXJhY3Rlckxh
eW91dC5maW5pc2hMYXlvdXQoKTsKIAotICAgIC8vIExheW91dCBhbGwgY2hpbGQgYm94ZXMuCisg
ICAgLy8gUGVyZm9ybSBTVkcgdGV4dCBsYXlvdXQgcGhhc2UgZm91cgorICAgIC8vIFBvc2l0aW9u
ICYgcmVzaXplIGFsbCBTVkdJbmxpbmVUZXh0L0Zsb3dCb3hlcyBpbiB0aGUgaW5saW5lIGJveCB0
cmVlLCByZXNpemUgdGhlIHJvb3QgYm94IGFzIHdlbGwgYXMgdGhlIFJlbmRlclNWR1RleHQgcGFy
ZW50IGJsb2NrLgogICAgIGxheW91dENoaWxkQm94ZXModGhpcyk7Ci0KLSAgICAvLyBSZXNpemUg
b3VyIHJvb3QgYm94IGFuZCBvdXIgUmVuZGVyU1ZHVGV4dCBwYXJlbnQgYmxvY2sKICAgICBsYXlv
dXRSb290Qm94KCk7CiB9CiAKLXZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRMYXlvdXRJbmZv
cm1hdGlvbihJbmxpbmVGbG93Qm94KiBzdGFydCwgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYgaW5m
bykKK3ZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJveGVzKElu
bGluZUZsb3dCb3gqIHN0YXJ0LCBTVkdUZXh0TGF5b3V0RW5naW5lJiBjaGFyYWN0ZXJMYXlvdXQp
CiB7Ci0gICAgaWYgKHN0YXJ0LT5pc1Jvb3RJbmxpbmVCb3goKSkgewotICAgICAgICBBU1NFUlQo
c3RhcnQtPnJlbmRlcmVyKCktPm5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFRhZykp
OwotCi0gICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqIHBvc2l0aW9uaW5nRWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihzdGFydC0+cmVuZGVy
ZXIoKS0+bm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uaW5nRWxlbWVudCk7Ci0gICAg
ICAgIEFTU0VSVChwb3NpdGlvbmluZ0VsZW1lbnQtPnBhcmVudE5vZGUoKSk7Ci0KLSAgICAgICAg
aW5mby5hZGRMYXlvdXRJbmZvcm1hdGlvbihwb3NpdGlvbmluZ0VsZW1lbnQpOwotICAgIH0KKyAg
ICBmb3IgKElubGluZUJveCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNTVkdJbmxp
bmVUZXh0Qm94KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+cmVuZGVyZXIoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoY2hpbGQtPnJlbmRlcmVyKCktPmlzU1ZHSW5saW5lVGV4dCgpKTsK
IAotICAgIFNWR0xhc3RHbHlwaEluZm8gbGFzdEdseXBoOwotICAgIAotICAgIGZvciAoSW5saW5l
Qm94KiBjdXJyID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRP
bkxpbmUoKSkgewotICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkpCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oY3VyciktPmJ1aWxkTGF5b3V0
SW5mb3JtYXRpb24oaW5mbywgbGFzdEdseXBoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpOwotICAgICAgICAgICAgSW5saW5lRmxv
d0JveCogZmxvd0JveCA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKTsKKyAgICAg
ICAgICAgIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVU
ZXh0Qm94Kj4oY2hpbGQpOworICAgICAgICAgICAgY2hhcmFjdGVyTGF5b3V0LmxheW91dElubGlu
ZVRleHRCb3godGV4dEJveCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQo
Y2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKTsKIAogICAgICAgICAgICAgLy8gU2tpcCBnZW5lcmF0
ZWQgY29udGVudC4KLSAgICAgICAgICAgIGlmICghZmxvd0JveC0+cmVuZGVyZXIoKS0+bm9kZSgp
KQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGNoaWxkLT5yZW5kZXJlcigpLT5ub2RlKCk7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgICAgIGJvb2wgaXNBbmNob3IgPSBmbG93Qm94LT5yZW5kZXJlcigpLT5ub2RlKCktPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmFUYWcpOwotICAgICAgICAgICAgYm9vbCBpc1RleHRQYXRoID0gZmxv
d0JveC0+cmVuZGVyZXIoKS0+bm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0ZXh0UGF0aFRh
Zyk7Ci0KLSAgICAgICAgICAgIGlmICghaXNUZXh0UGF0aCAmJiAhaXNBbmNob3IpIHsKLSAgICAg
ICAgICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KiBwb3NpdGlvbmluZ0VsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Kj4oZmxvd0JveC0+cmVuZGVy
ZXIoKS0+bm9kZSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocG9zaXRpb25pbmdFbGVtZW50
KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocG9zaXRpb25pbmdFbGVtZW50LT5wYXJlbnROb2Rl
KCkpOwotCi0gICAgICAgICAgICAgICAgaW5mby5hZGRMYXlvdXRJbmZvcm1hdGlvbihwb3NpdGlv
bmluZ0VsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghaXNBbmNob3IpIHsKLSAgICAg
ICAgICAgICAgICBpbmZvLnNldEluUGF0aExheW91dCh0cnVlKTsKLQotICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSB0ZXh0LWFuY2hvci90ZXh0TGVuZ3RoIG9uIHBhdGgsIHdoaWNoIGlzIHNwZWNp
YWwuCi0gICAgICAgICAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50KiB0ZXh0Q29udGVudCA9
IDA7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGZsb3dCb3gtPnJlbmRlcmVyKCktPm5v
ZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5pc1NWR0VsZW1lbnQoKSkK
LSAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0Q29u
dGVudEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodGV4dENvbnRlbnQp
OwotCi0gICAgICAgICAgICAgICAgRUxlbmd0aEFkanVzdCBsZW5ndGhBZGp1c3QgPSAoRUxlbmd0
aEFkanVzdCkgdGV4dENvbnRlbnQtPmxlbmd0aEFkanVzdCgpOwotICAgICAgICAgICAgICAgIEVU
ZXh0QW5jaG9yIGFuY2hvciA9IGZsb3dCb3gtPnJlbmRlcmVyKCktPnN0eWxlKCktPnN2Z1N0eWxl
KCktPnRleHRBbmNob3IoKTsKLSAgICAgICAgICAgICAgICBmbG9hdCB0ZXh0QW5jaG9yU3RhcnRP
ZmZzZXQgPSAwLjBmOwotCi0gICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBzdWItbGF5b3V0
LiBXZSBuZWVkIHRvIGNyZWF0ZSB0ZXh0IGNodW5rcyBmcm9tIHRoZSB0ZXh0UGF0aAotICAgICAg
ICAgICAgICAgIC8vIGNoaWxkcmVuIHVzaW5nIG91ciBzdGFuZGFyZCBsYXlvdXQgY29kZSwgdG8g
YmUgYWJsZSB0byBtZWFzdXJlIHRoZQotICAgICAgICAgICAgICAgIC8vIHRleHQgbGVuZ3RoIHVz
aW5nIG91ciBub3JtYWwgbWV0aG9kcyBhbmQgbm90IHRleHRQYXRoIHNwZWNpZmljIGhhY2tzLgot
ICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+IHRlbXBDaHVua3M7Ci0KLSAgICAg
ICAgICAgICAgICBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvIHRlbXBDaGFySW5mbzsKLSAgICAgICAg
ICAgICAgICBidWlsZExheW91dEluZm9ybWF0aW9uKGZsb3dCb3gsIHRlbXBDaGFySW5mbyk7Ci0K
LSAgICAgICAgICAgICAgICBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvIHRlbXBDaHVua0luZm87Ci0g
ICAgICAgICAgICAgICAgdGVtcENodW5rSW5mby5idWlsZFRleHRDaHVua3ModGVtcENoYXJJbmZv
LnN2Z0NoYXJzLmJlZ2luKCksIHRlbXBDaGFySW5mby5zdmdDaGFycy5lbmQoKSwgZmxvd0JveCk7
Ci0gICAgICAgICAgICAgICAgdGVtcENodW5rcyA9IHRlbXBDaHVua0luZm8udGV4dENodW5rcygp
OwotCi0gICAgICAgICAgICAgICAgVmVjdG9yPFNWR1RleHRDaHVuaz46Oml0ZXJhdG9yIGl0ID0g
dGVtcENodW5rcy5iZWdpbigpOwotICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+
OjppdGVyYXRvciBlbmQgPSB0ZW1wQ2h1bmtzLmVuZCgpOwotCi0gICAgICAgICAgICAgICAgZmxv
YXQgY29tcHV0ZWRMZW5ndGggPSAwLjBmOwotIAotICAgICAgICAgICAgICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAgICAgU1ZHVGV4dENodW5rJiBjaHVuayA9
ICppdDsKLQotICAgICAgICAgICAgICAgICAgICAvLyBBcHBseSB0ZXh0LWxlbmd0aCBjYWxjdWxh
dGlvbgotICAgICAgICAgICAgICAgICAgICBpbmZvLnBhdGhFeHRyYUFkdmFuY2UgKz0gY2FsY3Vs
YXRlVGV4dExlbmd0aENvcnJlY3Rpb25Gb3JUZXh0Q2h1bmsoY2h1bmssIGxlbmd0aEFkanVzdCwg
Y29tcHV0ZWRMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGhBZGp1c3Qg
PT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpMRU5HVEhBREpVU1RfU1BBQ0lOR0FOREdMWVBIUykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5wYXRoVGV4dExlbmd0aCArPSBjb21wdXRl
ZExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucGF0aENodW5rTGVuZ3RoICs9
IGNodW5rLnRleHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAvLyBDYWxjdWxhdGUgdGV4dC1hbmNob3Igc3RhcnQgb2Zmc2V0Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhbmNob3IgPT0gVEFfU1RBUlQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICB0ZXh0QW5jaG9yU3RhcnRPZmZzZXQg
Kz0gY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0Rm9yVGV4dENodW5rKGNodW5rLCBhbmNob3IpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGluZm8uYWRkTGF5b3V0SW5mb3Jt
YXRpb24oZmxvd0JveCwgdGV4dEFuY2hvclN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIFNWR0lu
bGluZUZsb3dCb3gqIGZsb3dCb3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVGbG93Qm94Kj4oY2hp
bGQpOworICAgICAgICAgICAgYm9vbCBpc1RleHRQYXRoID0gbm9kZS0+aGFzVGFnTmFtZShTVkdO
YW1lczo6dGV4dFBhdGhUYWcpOworICAgICAgICAgICAgaWYgKGlzVGV4dFBhdGgpIHsKKyAgICAg
ICAgICAgICAgICAvLyBCdWlsZCB0ZXh0IGNodW5rcyBmb3IgYWxsIDx0ZXh0UGF0aD4gY2hpbGRy
ZW4sIHVzaW5nIHRoZSBsaW5lIGxheW91dCBhbGdvcml0aG0uCisgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBuZWVkZWVkIGFzIHRleHQtYW5jaG9yIGlzIGp1c3QgYW4gYWRkaXRpb25hbCBzdGFy
dE9mZnNldCBmb3IgdGV4dCBwYXRocy4KKyAgICAgICAgICAgICAgICBTVkdUZXh0TGF5b3V0RW5n
aW5lIGxpbmVMYXlvdXQ7CisgICAgICAgICAgICAgICAgbGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJv
eGVzKGZsb3dCb3gsIGxpbmVMYXlvdXQpOworICAgICAgICAgICAgICAgIGNoYXJhY3RlckxheW91
dC5iZWdpblRleHRQYXRoTGF5b3V0KGNoaWxkLT5yZW5kZXJlcigpLCBsaW5lTGF5b3V0KTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmxvYXQgc2hpZnR4U2F2ZWQgPSBpbmZvLnNoaWZ0
eDsKLSAgICAgICAgICAgIGZsb2F0IHNoaWZ0eVNhdmVkID0gaW5mby5zaGlmdHk7Ci0KLSAgICAg
ICAgICAgIGJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oZmxvd0JveCwgaW5mbyk7Ci0gICAgICAgICAg
ICBpbmZvLnByb2Nlc3NlZENodW5rKHNoaWZ0eFNhdmVkLCBzaGlmdHlTYXZlZCk7CisgICAgICAg
ICAgICBsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMoZmxvd0JveCwgY2hhcmFjdGVyTGF5b3V0
KTsKIAogICAgICAgICAgICAgaWYgKGlzVGV4dFBhdGgpCi0gICAgICAgICAgICAgICAgaW5mby5z
ZXRJblBhdGhMYXlvdXQoZmFsc2UpOworICAgICAgICAgICAgICAgIGNoYXJhY3RlckxheW91dC5l
bmRUZXh0UGF0aExheW91dCgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTkxLDcgKzEyNCwx
MCBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmJ1aWxkTGF5b3V0SW5mb3JtCiB2b2lkIFNWR1Jv
b3RJbmxpbmVCb3g6OmxheW91dENoaWxkQm94ZXMoSW5saW5lRmxvd0JveCogc3RhcnQpCiB7CiAg
ICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewotICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVy
KCktPmlzVGV4dCgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICBB
U1NFUlQoY2hpbGQtPnJlbmRlcmVyKCktPmlzU1ZHSW5saW5lVGV4dCgpKTsKKwogICAgICAgICAg
ICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRC
b3gqPihjaGlsZCk7CiAgICAgICAgICAgICBJbnRSZWN0IGJveFJlY3QgPSB0ZXh0Qm94LT5jYWxj
dWxhdGVCb3VuZGFyaWVzKCk7CiAgICAgICAgICAgICB0ZXh0Qm94LT5zZXRYKGJveFJlY3QueCgp
KTsKQEAgLTIwMCw3ICsxMzYsNyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dENoaWxk
Qm94ZXMoCiAgICAgICAgICAgICB0ZXh0Qm94LT5zZXRMb2dpY2FsSGVpZ2h0KGJveFJlY3QuaGVp
Z2h0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5pc0lu
bGluZUZsb3dCb3goKSk7Ci0gICAKKwogICAgICAgICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgY29u
dGVudC4KICAgICAgICAgICAgIGlmICghY2hpbGQtPnJlbmRlcmVyKCktPm5vZGUoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTI1NywxMDYgKzE5MywyNyBAQCB2b2lkIFNWR1Jvb3RJ
bmxpbmVCb3g6OmxheW91dFJvb3RCb3goKQogICAgIHNldExpbmVUb3BCb3R0b21Qb3NpdGlvbnMo
MCwgaGVpZ2h0QmxvY2spOwogfQogCi12b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnByb3BhZ2F0ZVRl
eHRDaHVua1BhcnRJbmZvcm1hdGlvbigpCitJbmxpbmVCb3gqIFNWR1Jvb3RJbmxpbmVCb3g6OmNs
b3Nlc3RMZWFmQ2hpbGRGb3JQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7Ci0jaWYg
REVCVUdfQ0hVTktfUEFSVF9QUk9QQUdBVElPTiA+IDAKLSAgICBMaXN0SGFzaFNldDxTVkdJbmxp
bmVUZXh0Qm94Kj4gYm94ZXM7Ci0jZW5kaWYKLQotICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGV4
dCBjaHVua3MKLSAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9zdmdUZXh0Q2h1bmtzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVu
az46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdmdUZXh0Q2h1bmtzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBjb25zdCBTVkdUZXh0Q2h1bmsmIGNodW5rID0gKml0OwotICAg
ICAgICBpbnQgcHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJzID0gMDsKLQotICAgICAgICAvLyBMb29w
IHRocm91Z2ggYWxsIHJhbmdlcyBjb250YWluZWQgaW4gdGhpcyBjaHVuawotICAgICAgICBjb25z
dCBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBib3hF
bmQgPSBjaHVuay5ib3hlcy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8U1ZHSW5saW5lQm94
Q2hhcmFjdGVyUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBib3hJdCA9IGNodW5rLmJveGVzLmJlZ2lu
KCk7IGJveEl0ICE9IGJveEVuZDsgKytib3hJdCkgewotICAgICAgICAgICAgY29uc3QgU1ZHSW5s
aW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlID0gKmJveEl0OwotICAgICAgICAgICAgQVNTRVJU
KHJhbmdlLmJveC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpOwotCi0gICAgICAgICAgICAvLyBBY2Nl
c3Mgc3R5bGUgJiBmb250IGluZm9ybWF0aW9uIG9mIHRoaXMgdGV4dCBib3gKLSAgICAgICAgICAg
IFNWR0lubGluZVRleHRCb3gqIHJhbmdlVGV4dEJveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRl
eHRCb3gqPihyYW5nZS5ib3gpOwotICAgICAgICAgICAgcmFuZ2VUZXh0Qm94LT5zZXRDaHVua1Ry
YW5zZm9ybWF0aW9uKGNodW5rLmN0bSk7Ci0KLSAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHQg
PSByYW5nZVRleHRCb3gtPnRleHRSZW5kZXJlcigpOwotICAgICAgICAgICAgQVNTRVJUKHRleHQp
OwotCi0gICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwotICAg
ICAgICAgICAgQVNTRVJUKHN0eWxlKTsKLQotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9
IHN0eWxlLT5mb250KCk7Ci0gCi0gICAgICAgICAgICAvLyBGaWd1cmUgb3V0IGZpcnN0IGFuZCBs
YXN0IGNoYXJhY3RlciBvZiB0aGlzIHJhbmdlIGluIHRoaXMgY2h1bmsKLSAgICAgICAgICAgIGlu
dCByYW5nZUxlbmd0aCA9IHJhbmdlLmVuZE9mZnNldCAtIHJhbmdlLnN0YXJ0T2Zmc2V0OwotICAg
ICAgICAgICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBpdENoYXJCZWdpbiA9IGNodW5rLnN0
YXJ0ICsgcHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJzOwotICAgICAgICAgICAgVmVjdG9yPFNWR0No
YXI+OjppdGVyYXRvciBpdENoYXJFbmQgPSBjaHVuay5zdGFydCArIHByb2Nlc3NlZENodW5rQ2hh
cmFjdGVycyArIHJhbmdlTGVuZ3RoOwotICAgICAgICAgICAgQVNTRVJUKGl0Q2hhckVuZCA8PSBj
aHVuay5lbmQpOwotCi0gICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIGNoYXJhY3RlcnMg
aW4gcmFuZ2UgCi0gICAgICAgICAgICBpbnQgcHJvY2Vzc2VkUmFuZ2VDaGFyYWN0ZXJzID0gMDsK
LSAgICAgICAgICAgIGZvciAoVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBpdENoYXIgPSBpdENo
YXJCZWdpbjsgaXRDaGFyICE9IGl0Q2hhckVuZDsgKytpdENoYXIpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaXRDaGFyLT5pc0hpZGRlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICsrcHJvY2Vz
c2VkUmFuZ2VDaGFyYWN0ZXJzOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaG93IG1hbnkgY2hh
cmFjdGVycyAtIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgLSBjYW4gYmUgZHJhd24gYXQgb25j
ZS4KLSAgICAgICAgICAgICAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0U2VhcmNoID0g
aXRDaGFyICsgMTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoaXRTZWFyY2ggIT0gaXRDaGFyRW5k
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdFNlYXJjaC0+ZHJhd25TZXBlcmF0ZWQgfHwg
aXRTZWFyY2gtPmlzSGlkZGVuKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgICAgICAgICArK2l0U2VhcmNoOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0ZXh0IGNodW5rIHBhcnQgaW5mb3JtYXRpb24gZm9y
IHRoaXMgY2h1bmsgc3ViLXJhbmdlCi0gICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHBhcnRT
dGFydCA9IHRleHQtPmNoYXJhY3RlcnMoKSArIHJhbmdlVGV4dEJveC0+c3RhcnQoKSArIHJhbmdl
LnN0YXJ0T2Zmc2V0ICsgcHJvY2Vzc2VkUmFuZ2VDaGFyYWN0ZXJzOwotCi0gICAgICAgICAgICAg
ICAgU1ZHVGV4dENodW5rUGFydCBwYXJ0OwotICAgICAgICAgICAgICAgIHBhcnQuZmlyc3RDaGFy
YWN0ZXIgPSBpdENoYXI7Ci0gICAgICAgICAgICAgICAgcGFydC5sZW5ndGggPSBpdFNlYXJjaCAt
IGl0Q2hhcjsKLSAgICAgICAgICAgICAgICBwYXJ0LndpZHRoID0gZm9udC5mbG9hdFdpZHRoKHN2
Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KHBhcnRTdGFydCwgcGFydC5sZW5ndGgsIHN0eWxlLCBy
YW5nZVRleHRCb3gpKTsKLSAgICAgICAgICAgICAgICBwYXJ0LmhlaWdodCA9IGZvbnQuaGVpZ2h0
KCk7Ci0gICAgICAgICAgICAgICAgcGFydC5vZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldCArIHBy
b2Nlc3NlZFJhbmdlQ2hhcmFjdGVyczsKLSAgICAgICAgICAgICAgICByYW5nZVRleHRCb3gtPmFk
ZENodW5rUGFydEluZm9ybWF0aW9uKHBhcnQpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NlZFJh
bmdlQ2hhcmFjdGVycyArPSBwYXJ0Lmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIC8vIFNraXAg
cHJvY2Vzc2VkIGNoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICBpdENoYXIgPSBpdFNlYXJjaCAt
IDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChwcm9jZXNzZWRSYW5nZUNo
YXJhY3RlcnMgPT0gcmFuZ2VMZW5ndGgpOwotICAgICAgICAgICAgcHJvY2Vzc2VkQ2h1bmtDaGFy
YWN0ZXJzICs9IHJhbmdlTGVuZ3RoOworICAgIElubGluZUJveCogZmlyc3RMZWFmID0gZmlyc3RM
ZWFmQ2hpbGQoKTsKKyAgICBJbmxpbmVCb3gqIGxhc3RMZWFmID0gbGFzdExlYWZDaGlsZCgpOwor
ICAgIGlmIChmaXJzdExlYWYgPT0gbGFzdExlYWYpCisgICAgICAgIHJldHVybiBmaXJzdExlYWY7
CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgZm9yIHZlcnRpY2FsIHRleHQhCisgICAgSW5saW5lQm94
KiBjbG9zZXN0TGVhZiA9IDA7CisgICAgZm9yIChJbmxpbmVCb3gqIGxlYWYgPSBmaXJzdExlYWY7
IGxlYWY7IGxlYWYgPSBsZWFmLT5uZXh0TGVhZkNoaWxkKCkpIHsKKyAgICAgICAgaWYgKHBvaW50
LnkoKSA8IGxlYWYtPm1feSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAocG9p
bnQueSgpID4gbGVhZi0+bV95ICsgbGVhZi0+dmlydHVhbExvZ2ljYWxIZWlnaHQoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0jaWYgREVCVUdfQ0hVTktfUEFSVF9QUk9QQUdBVElPTiA+IDAK
LSAgICAgICAgICAgIGJveGVzLmFkZChyYW5nZVRleHRCb3gpOwotI2VuZGlmCi0gICAgICAgIH0K
KyAgICAgICAgY2xvc2VzdExlYWYgPSBsZWFmOworICAgICAgICBpZiAocG9pbnQueCgpIDwgbGVh
Zi0+bV94ICsgbGVhZi0+bV9sb2dpY2FsV2lkdGgpCisgICAgICAgICAgICByZXR1cm4gbGVhZjsK
ICAgICB9CiAKLSNpZiBERUJVR19DSFVOS19QQVJUX1BST1BBR0FUSU9OID4gMAotICAgIHsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJQcm9wYWdhdGVkIHRleHQgY2h1bmsgcGFydCBpbmZvcm1h
dGlvbjpcbiIpOwotCi0gICAgICAgIExpc3RIYXNoU2V0PFNWR0lubGluZVRleHRCb3gqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBib3hlcy5iZWdpbigpOwotICAgICAgICBjb25zdCBMaXN0SGFzaFNl
dDxTVkdJbmxpbmVUZXh0Qm94Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGJveGVzLmVuZCgpOwot
Ci0gICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFNW
R0lubGluZVRleHRCb3gqIGJveCA9ICppdDsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdU
ZXh0Q2h1bmtQYXJ0PiYgcGFydHMgPSBib3gtPnN2Z1RleHRDaHVua1BhcnRzKCk7Ci0KLSAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiIEJveCAlcCBjb250YWlucyAlaSB0ZXh0IGNodW5rIHBh
cnRzOlxuIiwgYm94LCBzdGF0aWNfY2FzdDxpbnQ+KHBhcnRzLnNpemUoKSkpOwotICAgICAgICAg
ICAgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBwYXJ0SXQgPSBwYXJ0
cy5iZWdpbigpOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpj
b25zdF9pdGVyYXRvciBwYXJ0RW5kID0gcGFydHMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKDsg
cGFydEl0ICE9IHBhcnRFbmQ7ICsrcGFydEl0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZH
VGV4dENodW5rUGFydCYgcGFydCA9ICpwYXJ0SXQ7Ci0gICAgICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICIgICAtPiBmaXJzdENoYXJhY3RlciB4PSVsZiwgeT0lbGYsIG9mZnNldD0laSwgbGVu
Z3RoPSVpLCB3aWR0aD0lbGYsIGhlaWdodD0lbGYsIHRleHRSZW5kZXJlcj0lcFxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBwYXJ0LmZpcnN0Q2hhcmFjdGVyLT54LCBwYXJ0LmZp
cnN0Q2hhcmFjdGVyLT55LCBwYXJ0Lm9mZnNldCwgcGFydC5sZW5ndGgsIHBhcnQud2lkdGgsIHBh
cnQuaGVpZ2h0LCBib3gtPnRleHRSZW5kZXJlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSNlbmRpZgorICAgIHJldHVybiBjbG9zZXN0TGVhZiA/IGNsb3Nlc3RMZWFmIDog
bGFzdExlYWY7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gNjg4NzQpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MCArMjYsOCBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJSb290SW5saW5lQm94Lmgi
Ci0jaW5jbHVkZSAiU1ZHQ2hhcmFjdGVyRGF0YS5oIgotI2luY2x1ZGUgIlNWR0NoYXJhY3Rlckxh
eW91dEluZm8uaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0jaW5jbHVkZSAiU1ZH
VGV4dENodW5rTGF5b3V0SW5mby5oIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSwyMCArNTMsMTUgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gRmxv
YXRSZWN0KCk7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKLSAgICAvLyBVc2VkIGJ5
IFNWR1JlbmRlclRyZWVBc1RleHQKLSAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rPiYgc3Zn
VGV4dENodW5rcygpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnVGV4dENodW5rczsgfQorICAgIElubGlu
ZUJveCogY2xvc2VzdExlYWZDaGlsZEZvclBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBwcm9wYWdhdGVUZXh0Q2h1bmtQYXJ0SW5mb3JtYXRpb24oKTsKLSAg
ICB2b2lkIGJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oSW5saW5lRmxvd0JveCogc3RhcnQsIFNWR0No
YXJhY3RlckxheW91dEluZm8mKTsKLQorICAgIHZvaWQgbGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJv
eGVzKElubGluZUZsb3dCb3gqLCBTVkdUZXh0TGF5b3V0RW5naW5lJik7CisgICAgdm9pZCBsYXlv
dXRDaGlsZEJveGVzKElubGluZUZsb3dCb3gqKTsKICAgICB2b2lkIGxheW91dFJvb3RCb3goKTsK
LSAgICB2b2lkIGxheW91dENoaWxkQm94ZXMoSW5saW5lRmxvd0JveCogc3RhcnQpOwogCiBwcml2
YXRlOgogICAgIGludCBtX2xvZ2ljYWxIZWlnaHQ7Ci0gICAgVmVjdG9yPFNWR0NoYXI+IG1fc3Zn
Q2hhcnM7Ci0gICAgVmVjdG9yPFNWR1RleHRDaHVuaz4gbV9zdmdUZXh0Q2h1bmtzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRDaHVuay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRD
aHVuay5jcHAJKHJldmlzaW9uIDY4ODczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRDaHVuay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSw5IEBACiAjaW5jbHVkZSAi
U1ZHSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR1RleHRGcmFnbWVudC5oIgogCi0jaW5j
bHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklY
TUU6IFJlbmFtZSB0byBTVkdUZXh0Q2h1bmssIG9uY2UgdGhlIG5ldyBsYXlvdXQgZW5naW5lIGhh
cyBsYW5kZWQuCi1TVkdUZXh0Q2h1bmtOZXc6OlNWR1RleHRDaHVua05ldyhib29sIGlzVmVydGlj
YWxUZXh0LCBFVGV4dEFuY2hvciB0ZXh0QW5jaG9yLCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlNW
R0xlbmd0aEFkanVzdFR5cGUgbGVuZ3RoQWRqdXN0LCBmbG9hdCBkZXNpcmVkVGV4dExlbmd0aCkK
K1NWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKGJvb2wgaXNWZXJ0aWNhbFRleHQsIEVUZXh0QW5j
aG9yIHRleHRBbmNob3IsIFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHTGVuZ3RoQWRqdXN0VHlw
ZSBsZW5ndGhBZGp1c3QsIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoKQogICAgIDogbV9pc1ZlcnRp
Y2FsVGV4dChpc1ZlcnRpY2FsVGV4dCkKICAgICAsIG1fdGV4dEFuY2hvcih0ZXh0QW5jaG9yKQog
ICAgICwgbV9sZW5ndGhBZGp1c3QobGVuZ3RoQWRqdXN0KQpAQCAtMzgsMTggKzM1LDE0IEBAIFNW
R1RleHRDaHVua05ldzo6U1ZHVGV4dENodW5rTmV3KGJvb2wgaXMKIHsKIH0KIAotdm9pZCBTVkdU
ZXh0Q2h1bmtOZXc6OmNhbGN1bGF0ZUxlbmd0aChmbG9hdCYgbGVuZ3RoLCB1bnNpZ25lZCYgY2hh
cmFjdGVycykgY29uc3QKK3ZvaWQgU1ZHVGV4dENodW5rOjpjYWxjdWxhdGVMZW5ndGgoZmxvYXQm
IGxlbmd0aCwgdW5zaWduZWQmIGNoYXJhY3RlcnMpIGNvbnN0CiB7CiAgICAgU1ZHVGV4dEZyYWdt
ZW50KiBsYXN0RnJhZ21lbnQgPSAwOwogCiAgICAgdW5zaWduZWQgYm94Q291bnQgPSBtX2JveGVz
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRpb24g
PCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewogICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0
ZXh0Qm94ID0gbV9ib3hlcy5hdChib3hQb3NpdGlvbik7Ci0KLSAgICAgICAgLy8gRklYTUU6IEVu
YWJsZSB0aGlzIGNvZGUsIG9uY2UgdGhlIG5ldyBsYXlvdXQgZW5naW5lIGhhcyBsYW5kZWQhIFRo
aXMgaXMgbm9uZnVuY3Rpb25hbCBmb3Igbm93LgotICAgICAgICAvLyBWZWN0b3I8U1ZHVGV4dEZy
YWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOwotICAgICAgICBW
ZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiBmcmFnbWVudHM7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0
ZXh0Qm94KTsKKyAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9IHRl
eHRCb3gtPnRleHRGcmFnbWVudHMoKTsKIAogICAgICAgICB1bnNpZ25lZCBzaXplID0gZnJhZ21l
bnRzLnNpemUoKTsKICAgICAgICAgaWYgKCFzaXplKQpAQCAtODAsNyArNzMsNyBAQCB2b2lkIFNW
R1RleHRDaHVua05ldzo6Y2FsY3VsYXRlTGVuZ3RoKGZsCiAgICAgfQogfQogCi1mbG9hdCBTVkdU
ZXh0Q2h1bmtOZXc6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChmbG9hdCBsZW5ndGgpIGNvbnN0
CitmbG9hdCBTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChmbG9hdCBsZW5n
dGgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3RleHRBbmNob3IpIHsKICAgICBjYXNlIFRBX1NU
QVJUOgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaAkocmV2aXNpb24gNjg4
NzMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEwICsyOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNWR0lubGlu
ZVRleHRCb3g7CiAKIC8vIEEgU1ZHVGV4dENodW5rIGRlc2NyaWJlcyBhIHJhbmdlIG9mIFNWR1Rl
eHRGcmFnbWVudHMsIHNlZSB0aGUgU1ZHIHNwZWMgZGVmaW5pdGlvbiBvZiBhICJ0ZXh0IGNodW5r
Ii4KLS8vIEZJWE1FOiBSZW5hbWUgdG8gU1ZHVGV4dENodW5rLCBvbmNlIHRoZSBuZXcgbGF5b3V0
IGVuZ2luZSBoYXMgbGFuZGVkLgotY2xhc3MgU1ZHVGV4dENodW5rTmV3IHsKK2NsYXNzIFNWR1Rl
eHRDaHVuayB7CiBwdWJsaWM6Ci0gICAgU1ZHVGV4dENodW5rTmV3KGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIEVUZXh0QW5jaG9yLCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFkanVzdFR5
cGUsIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoKTsKKyAgICBTVkdUZXh0Q2h1bmsoYm9vbCBpc1Zl
cnRpY2FsVGV4dCwgRVRleHRBbmNob3IsIFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHTGVuZ3Ro
QWRqdXN0VHlwZSwgZmxvYXQgZGVzaXJlZFRleHRMZW5ndGgpOwogCiAgICAgdm9pZCBjYWxjdWxh
dGVMZW5ndGgoZmxvYXQmIGxlbmd0aCwgdW5zaWduZWQmIGNoYXJhY3RlcnMpIGNvbnN0OwogICAg
IGZsb2F0IGNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChmbG9hdCBsZW5ndGgpIGNvbnN0OwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHVGV4dENodW5r
QnVpbGRlci5oIgorCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorI2luY2x1ZGUg
IlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU1ZHVGV4dENodW5rQnVpbGRlcjo6U1ZHVGV4dENodW5rQnVpbGRlcigp
Cit7Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6dHJhbnNmb3JtYXRpb25Gb3JUZXh0
Qm94KFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KSBjb25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
LCBzX2lkZW50aXR5VHJhbnNmb3JtLCAoKSk7CisgICAgaWYgKCFtX3RleHRCb3hUcmFuc2Zvcm1h
dGlvbnMuY29udGFpbnModGV4dEJveCkpIHsKKyAgICAgICAgdHJhbnNmb3JtID0gc19pZGVudGl0
eVRyYW5zZm9ybTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRyYW5zZm9ybSA9IG1f
dGV4dEJveFRyYW5zZm9ybWF0aW9ucy5nZXQodGV4dEJveCk7Cit9CisKK3ZvaWQgU1ZHVGV4dENo
dW5rQnVpbGRlcjo6YnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxp
bmVMYXlvdXRCb3hlcykKK3sKKyAgICBpZiAobGluZUxheW91dEJveGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYm9vbCBmb3VuZFN0YXJ0ID0gZmFsc2U7CisgICAgdW5zaWdu
ZWQgbGFzdENodW5rU3RhcnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgYm94UG9zaXRpb24g
PSAwOworICAgIHVuc2lnbmVkIGJveENvdW50ID0gbGluZUxheW91dEJveGVzLnNpemUoKTsKKyAg
ICBmb3IgKDsgYm94UG9zaXRpb24gPCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgeworICAgICAg
ICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gbGluZUxheW91dEJveGVzLmF0KGJveFBvc2l0
aW9uKTsKKyAgICAgICAgaWYgKCF0ZXh0Qm94LT5zdGFydHNOZXdUZXh0Q2h1bmsoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghZm91bmRTdGFydCkgeworICAgICAgICAg
ICAgbGFzdENodW5rU3RhcnRQb3NpdGlvbiA9IGJveFBvc2l0aW9uOworICAgICAgICAgICAgZm91
bmRTdGFydCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoYm94
UG9zaXRpb24gPiBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGFkZFRleHRD
aHVuayhsaW5lTGF5b3V0Qm94ZXMsIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24sIGJveFBvc2l0aW9u
IC0gbGFzdENodW5rU3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICBsYXN0Q2h1bmtTdGFydFBv
c2l0aW9uID0gYm94UG9zaXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZvdW5k
U3RhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChib3hQb3NpdGlvbiAtIGxhc3RDaHVu
a1N0YXJ0UG9zaXRpb24gPiAwKQorICAgICAgICBhZGRUZXh0Q2h1bmsobGluZUxheW91dEJveGVz
LCBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uLCBib3hQb3NpdGlvbiAtIGxhc3RDaHVua1N0YXJ0UG9z
aXRpb24pOworfQorCit2b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OmxheW91dFRleHRDaHVua3Mo
VmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzKQoreworICAgIGJ1aWxk
VGV4dENodW5rcyhsaW5lTGF5b3V0Qm94ZXMpOworICAgIGlmIChtX3RleHRDaHVua3MuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjaHVua0NvdW50ID0gbV90ZXh0
Q2h1bmtzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2h1bmtDb3VudDsg
KytpKQorICAgICAgICBwcm9jZXNzVGV4dENodW5rKG1fdGV4dENodW5rcy5hdChpKSk7CisKKyAg
ICBtX3RleHRDaHVua3MuY2xlYXIoKTsKK30KKwordm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjph
ZGRUZXh0Q2h1bmsoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzLCB1
bnNpZ25lZCBib3hTdGFydCwgdW5zaWduZWQgYm94Q291bnQpCit7CisgICAgU1ZHSW5saW5lVGV4
dEJveCogdGV4dEJveCA9IGxpbmVMYXlvdXRCb3hlcy5hdChib3hTdGFydCk7CisgICAgQVNTRVJU
KHRleHRCb3gpOworCisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9S
ZW5kZXJTVkdJbmxpbmVUZXh0KHRleHRCb3gtPnRleHRSZW5kZXJlcigpKTsKKyAgICBBU1NFUlQo
dGV4dFJlbmRlcmVyKTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRSZW5k
ZXJlci0+c3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgQVNTRVJUKHN2Z1N0eWxl
KTsKKworICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHTGVuZ3RoQWRqdXN0VHlwZSBsZW5n
dGhBZGp1c3QgPSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVTVF9VTktOT1dOOwor
ICAgIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoID0gMDsKKworICAgIGlmIChTVkdUZXh0Q29udGVu
dEVsZW1lbnQqIHRleHRDb250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxl
bWVudEZyb21SZW5kZXJlcih0ZXh0UmVuZGVyZXItPnBhcmVudCgpKSkgeworICAgICAgICBsZW5n
dGhBZGp1c3QgPSBzdGF0aWNfY2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFk
anVzdFR5cGU+KHRleHRDb250ZW50RWxlbWVudC0+bGVuZ3RoQWRqdXN0KCkpOworICAgICAgICBk
ZXNpcmVkVGV4dExlbmd0aCA9IHRleHRDb250ZW50RWxlbWVudC0+dGV4dExlbmd0aCgpLnZhbHVl
KHRleHRDb250ZW50RWxlbWVudCk7CisgICAgfQorCisgICAgU1ZHVGV4dENodW5rIGNodW5rKHN2
Z1N0eWxlLT5pc1ZlcnRpY2FsV3JpdGluZ01vZGUoKSwgc3ZnU3R5bGUtPnRleHRBbmNob3IoKSwg
bGVuZ3RoQWRqdXN0LCBkZXNpcmVkVGV4dExlbmd0aCk7CisKKyAgICBWZWN0b3I8U1ZHSW5saW5l
VGV4dEJveCo+JiBib3hlcyA9IGNodW5rLmJveGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
Ym94U3RhcnQ7IGkgPCBib3hTdGFydCArIGJveENvdW50OyArK2kpCisgICAgICAgIGJveGVzLmFw
cGVuZChsaW5lTGF5b3V0Qm94ZXMuYXQoaSkpOworCisgICAgbV90ZXh0Q2h1bmtzLmFwcGVuZChj
aHVuayk7Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRDaHVuayhj
b25zdCBTVkdUZXh0Q2h1bmsmIGNodW5rKQoreworICAgIGJvb2wgcHJvY2Vzc1RleHRMZW5ndGgg
PSBjaHVuay5oYXNEZXNpcmVkVGV4dExlbmd0aCgpOworICAgIGJvb2wgcHJvY2Vzc1RleHRBbmNo
b3IgPSBjaHVuay5oYXNUZXh0QW5jaG9yKCk7CisgICAgaWYgKCFwcm9jZXNzVGV4dEFuY2hvciAm
JiAhcHJvY2Vzc1RleHRMZW5ndGgpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFZlY3Rv
cjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGJveGVzID0gY2h1bmsuYm94ZXMoKTsKKyAgICB1bnNpZ25l
ZCBib3hDb3VudCA9IGJveGVzLnNpemUoKTsKKyAgICBpZiAoIWJveENvdW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgbGVuZ3RoIG9mIHdob2xlIHRleHQg
Y2h1bmsgKHN0YXJ0aW5nIGZyb20gdGV4dCBib3ggJ3N0YXJ0Jywgc3Bhbm5pbmcgJ2xlbmd0aCcg
dGV4dCBib3hlcykuCisgICAgZmxvYXQgY2h1bmtMZW5ndGggPSAwOworICAgIHVuc2lnbmVkIGNo
dW5rQ2hhcmFjdGVycyA9IDA7CisgICAgY2h1bmsuY2FsY3VsYXRlTGVuZ3RoKGNodW5rTGVuZ3Ro
LCBjaHVua0NoYXJhY3RlcnMpOworCisgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGNodW5rLmlz
VmVydGljYWxUZXh0KCk7CisgICAgaWYgKHByb2Nlc3NUZXh0TGVuZ3RoKSB7CisgICAgICAgIGlm
IChjaHVuay5sZW5ndGhBZGp1c3QoKSA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFE
SlVTVF9TUEFDSU5HKSB7CisgICAgICAgICAgICBmbG9hdCB0ZXh0TGVuZ3RoU2hpZnQgPSAoY2h1
bmsuZGVzaXJlZFRleHRMZW5ndGgoKSAtIGNodW5rTGVuZ3RoKSAvIGNodW5rQ2hhcmFjdGVyczsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGF0Q2hhcmFjdGVyID0gMDsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYm94UG9zaXRpb24gPSAwOyBib3hQb3NpdGlvbiA8IGJveENvdW50OyArK2JveFBv
c2l0aW9uKSB7CisgICAgICAgICAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdt
ZW50cyA9IGJveGVzLmF0KGJveFBvc2l0aW9uKS0+dGV4dEZyYWdtZW50cygpOworICAgICAgICAg
ICAgICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsgICAgCisgICAgICAgICAgICAgICAgcHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5nQ29ycmVj
dGlvbihpc1ZlcnRpY2FsVGV4dCwgdGV4dExlbmd0aFNoaWZ0LCBmcmFnbWVudHMsIGF0Q2hhcmFj
dGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChjaHVuay5sZW5ndGhBZGp1c3QoKSA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFE
SlVTVF9TUEFDSU5HQU5ER0xZUEhTKTsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gY2h1bmsu
ZGVzaXJlZFRleHRMZW5ndGgoKSAvIGNodW5rTGVuZ3RoOworICAgICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm07CisKKyAgICAgICAgICAgIGJvb2wgZm91
bmRGaXJzdEZyYWdtZW50ID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJveFBv
c2l0aW9uID0gMDsgYm94UG9zaXRpb24gPCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgeworICAg
ICAgICAgICAgICAgIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBib3hlcy5hdChib3hQb3Np
dGlvbik7CisgICAgICAgICAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50
cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKyAgICAgICAgICAgICAgICBpZiAoZnJhZ21l
bnRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCFmb3VuZEZpcnN0RnJhZ21lbnQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm91bmRGaXJzdEZyYWdtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRT
cGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGlzVmVydGljYWxUZXh0LCBzY2FsZSwgZnJhZ21lbnRz
LmZpcnN0KCksIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG1fdGV4dEJveFRyYW5zZm9ybWF0aW9ucy5zZXQodGV4dEJveCwg
c3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIXByb2Nlc3NUZXh0QW5jaG9yKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBJZiB3ZSBwcmV2aW91c2x5IGFwcGxpZWQgYSBsZW5ndGhBZGp1c3Q9InNwYWNpbmciIGNv
cnJlY3Rpb24sIHdlIGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhlIGNodW5rIGxlbmd0aCwgdG8gYmUg
YWJsZSB0byBhcHBseSB0aGUgdGV4dC1hbmNob3Igc2hpZnQuCisgICAgaWYgKHByb2Nlc3NUZXh0
TGVuZ3RoICYmIGNodW5rLmxlbmd0aEFkanVzdCgpID09IFNWR1RleHRDb250ZW50RWxlbWVudDo6
TEVOR1RIQURKVVNUX1NQQUNJTkcpIHsKKyAgICAgICAgY2h1bmtMZW5ndGggPSAwOworICAgICAg
ICBjaHVua0NoYXJhY3RlcnMgPSAwOworICAgICAgICBjaHVuay5jYWxjdWxhdGVMZW5ndGgoY2h1
bmtMZW5ndGgsIGNodW5rQ2hhcmFjdGVycyk7CisgICAgfQorCisgICAgZmxvYXQgdGV4dEFuY2hv
clNoaWZ0ID0gY2h1bmsuY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0KGNodW5rTGVuZ3RoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRpb24gPCBib3hDb3VudDsg
Kytib3hQb3NpdGlvbikgeworICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21l
bnRzID0gYm94ZXMuYXQoYm94UG9zaXRpb24pLT50ZXh0RnJhZ21lbnRzKCk7CisgICAgICAgIGlm
IChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHBy
b2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbihpc1ZlcnRpY2FsVGV4dCwgdGV4dEFuY2hvclNoaWZ0
LCBmcmFnbWVudHMpOworICAgIH0KK30KKwordm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpwcm9j
ZXNzVGV4dExlbmd0aFNwYWNpbmdDb3JyZWN0aW9uKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0
IHRleHRMZW5ndGhTaGlmdCwgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cywgdW5z
aWduZWQmIGF0Q2hhcmFjdGVyKQoreworICAgIHVuc2lnbmVkIGZyYWdtZW50Q291bnQgPSBmcmFn
bWVudHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudENvdW50
OyArK2kpIHsKKyAgICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5h
dChpKTsKKworICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICBmcmFnbWVu
dC55ICs9IHRleHRMZW5ndGhTaGlmdCAqIGF0Q2hhcmFjdGVyOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBmcmFnbWVudC54ICs9IHRleHRMZW5ndGhTaGlmdCAqIGF0Q2hhcmFjdGVyOworCisg
ICAgICAgIGF0Q2hhcmFjdGVyICs9IGZyYWdtZW50Lmxlbmd0aDsKKyAgICB9Cit9CisKK3ZvaWQg
U1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRBbmNob3JDb3JyZWN0aW9uKGJvb2wgaXNW
ZXJ0aWNhbFRleHQsIGZsb2F0IHRleHRBbmNob3JTaGlmdCwgVmVjdG9yPFNWR1RleHRGcmFnbWVu
dD4mIGZyYWdtZW50cykKK3sKKyAgICB1bnNpZ25lZCBmcmFnbWVudENvdW50ID0gZnJhZ21lbnRz
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRDb3VudDsgKytp
KSB7CisgICAgICAgIFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7
CisKKyAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgZnJhZ21lbnQueSAr
PSB0ZXh0QW5jaG9yU2hpZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZyYWdtZW50Lngg
Kz0gdGV4dEFuY2hvclNoaWZ0OworICAgIH0KK30KKwordm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVy
OjpidWlsZFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxv
YXQgc2NhbGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIEFmZmluZVRyYW5zZm9y
bSYgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSkKK3sKKyAgICBzcGFjaW5nQW5kR2x5cGhzVHJh
bnNmb3JtLnRyYW5zbGF0ZShmcmFnbWVudC54LCBmcmFnbWVudC55KTsKKworICAgIGlmIChpc1Zl
cnRpY2FsVGV4dCkKKyAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS5zY2FsZU5vblVu
aWZvcm0oMSwgc2NhbGUpOworICAgIGVsc2UKKyAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5z
Zm9ybS5zY2FsZU5vblVuaWZvcm0oc2NhbGUsIDEpOworCisgICAgc3BhY2luZ0FuZEdseXBoc1Ry
YW5zZm9ybS50cmFuc2xhdGUoLWZyYWdtZW50LngsIC1mcmFnbWVudC55KTsKK30KKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
Q2h1bmtCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRDaHVua0J1aWxkZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0Q2h1bmtCdWlsZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgU1ZHVGV4dENodW5rQnVpbGRlcl9oCisjZGVmaW5lIFNWR1Rl
eHRDaHVua0J1aWxkZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdUZXh0Q2h1
bmsuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU1ZHSW5saW5lVGV4dEJveDsKK3N0cnVjdCBTVkdUZXh0RnJhZ21lbnQ7CisKKy8vIFNW
R1RleHRDaHVua0J1aWxkZXIgcGVyZm9ybXMgdGhlIHRoaXJkIGxheW91dCBwaGFzZSBmb3IgU1ZH
IHRleHQuCisvLworLy8gUGhhc2Ugb25lIGJ1aWx0IHRoZSBsYXlvdXQgaW5mb3JtYXRpb24gZnJv
bSB0aGUgU1ZHIERPTSBzdG9yZWQgaW4gdGhlIFJlbmRlclNWR0lubGluZVRleHQgb2JqZWN0cyAo
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMpLgorLy8gUGhhc2UgdHdvIHBlcmZvcm1lZCB0aGUgYWN0
dWFsIHBlci1jaGFyYWN0ZXIgbGF5b3V0LCBjb21wdXRpbmcgdGhlIGZpbmFsIHBvc2l0aW9ucyBm
b3IgZWFjaCBjaGFyYWN0ZXIsIHN0b3JlZCBpbiB0aGUgU1ZHSW5saW5lVGV4dEJveCBvYmplY3Rz
IChTVkdUZXh0RnJhZ21lbnQpLgorLy8gUGhhc2UgdGhyZWUgcGVyZm9ybXMgYWxsIG1vZGlmaWNh
dGlvbnMgdGhhdCBoYXZlIHRvIGJlIGFwcGxpZWQgdG8gZWFjaCBpbmRpdmlkdWFsIHRleHQgY2h1
bmsgKHRleHQtYW5jaG9yICYgdGV4dExlbmd0aCkuCisKK2NsYXNzIFNWR1RleHRDaHVua0J1aWxk
ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIFNWR1RleHRDaHVua0J1aWxk
ZXIoKTsKKworICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bms+JiB0ZXh0Q2h1bmtzKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0Q2h1bmtzOyB9CisgICAgdm9pZCB0cmFuc2Zvcm1hdGlvbkZvclRl
eHRCb3goU1ZHSW5saW5lVGV4dEJveCosIEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OworCisgICAg
dm9pZCBidWlsZFRleHRDaHVua3MoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91
dEJveGVzKTsKKyAgICB2b2lkIGxheW91dFRleHRDaHVua3MoVmVjdG9yPFNWR0lubGluZVRleHRC
b3gqPiYgbGluZUxheW91dEJveGVzKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZFRleHRDaHVu
ayhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVuc2lnbmVkIGJv
eFBvc2l0aW9uLCB1bnNpZ25lZCBib3hDb3VudCk7CisgICAgdm9pZCBwcm9jZXNzVGV4dENodW5r
KGNvbnN0IFNWR1RleHRDaHVuayYpOworCisgICAgdm9pZCBwcm9jZXNzVGV4dExlbmd0aFNwYWNp
bmdDb3JyZWN0aW9uKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IHRleHRMZW5ndGhTaGlmdCwg
VmVjdG9yPFNWR1RleHRGcmFnbWVudD4mLCB1bnNpZ25lZCYgYXRDaGFyYWN0ZXIpOworICAgIHZv
aWQgcHJvY2Vzc1RleHRBbmNob3JDb3JyZWN0aW9uKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0
IHRleHRBbmNob3JTaGlmdCwgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mKTsKKyAgICB2b2lkIGJ1
aWxkU3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybShib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCBz
Y2FsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgQWZmaW5lVHJhbnNmb3JtJik7CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPFNWR1RleHRDaHVuaz4gbV90ZXh0Q2h1bmtzOworICAgIEhhc2hNYXA8
U1ZHSW5saW5lVGV4dEJveCosIEFmZmluZVRyYW5zZm9ybT4gbV90ZXh0Qm94VHJhbnNmb3JtYXRp
b25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNW
RykKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXMuY3BwCShyZXZpc2lvbiA2ODg2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEz
ICszMSwxMyBAQCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6U1ZHVGV4dExheW91dEF0CiB7CiB9
CiAKLXZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmZpbGxXaXRoRW1wdHlWYWx1ZXModW5z
aWduZWQgbGVuZ3RoKQordm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6cmVzZXJ2ZUNhcGFj
aXR5KHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBtX3hWYWx1ZXMuZmlsbChlbXB0eVZhbHVlKCks
IGxlbmd0aCk7Ci0gICAgbV95VmFsdWVzLmZpbGwoZW1wdHlWYWx1ZSgpLCBsZW5ndGgpOwotICAg
IG1fZHhWYWx1ZXMuZmlsbChlbXB0eVZhbHVlKCksIGxlbmd0aCk7Ci0gICAgbV9keVZhbHVlcy5m
aWxsKGVtcHR5VmFsdWUoKSwgbGVuZ3RoKTsKLSAgICBtX3JvdGF0ZVZhbHVlcy5maWxsKGVtcHR5
VmFsdWUoKSwgbGVuZ3RoKTsKKyAgICBtX3hWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7
CisgICAgbV95VmFsdWVzLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOworICAgIG1fZHhWYWx1ZXMu
cmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgbV9keVZhbHVlcy5yZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKTsKKyAgICBtX3JvdGF0ZVZhbHVlcy5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKIH0K
IAogZmxvYXQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKQpAQCAtNDYsNyAr
NDYsNyBAQCBmbG9hdCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1CiAgICAgcmV0
dXJuIHNfZW1wdHlWYWx1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGR1bXBMYXlvdXRWZWN0
b3IoVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQorc3RhdGljIGlubGluZSB2b2lkIGR1bXBMYXlvdXRW
ZWN0b3IoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQogewogICAgIGlmICh2YWx1ZXMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZW1wdHkiKTsKQEAgLTYzLDcgKzYz
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGR1bXBMYXlvdXRWZWN0b3IoVmVjdAogICAgIH0KIH0K
IAotdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCgpCit2b2lkIFNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzOjpkdW1wKCkgY29uc3QKIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgInggdmFs
dWVzOiAiKTsKICAgICBkdW1wTGF5b3V0VmVjdG9yKG1feFZhbHVlcyk7CkBAIC04NiwxMSArODYs
MTEgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCgpCiAgICAgZnByaW50Zihz
dGRlcnIsICJcbiIpOwogCiAgICAgZnByaW50ZihzdGRlcnIsICJjaGFyYWN0ZXIgZGF0YSB2YWx1
ZXM6XG4iKTsKLSAgICBWZWN0b3I8Q2hhcmFjdGVyRGF0YT46Oml0ZXJhdG9yIGVuZCA9IG1fY2hh
cmFjdGVyRGF0YVZhbHVlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxDaGFyYWN0ZXJEYXRhPjo6
aXRlcmF0b3IgaXQgPSBtX2NoYXJhY3RlckRhdGFWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIENoYXJhY3RlckRhdGEmIGRhdGEgPSAqaXQ7Ci0gICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAifCB7c3BhbnNDaGFyYWN0ZXJzPSVpLCBnbHlwaE5hbWU9JyVzJywgdW5pY29k
ZVN0cmluZz0nJXMnLCB3aWR0aD0lbGYsIGhlaWdodD0lbGZ9XG4iLAotICAgICAgICAgICAgICAg
IGRhdGEuc3BhbnNDaGFyYWN0ZXJzLCBkYXRhLmdseXBoTmFtZS51dGY4KCkuZGF0YSgpLCBkYXRh
LnVuaWNvZGVTdHJpbmcudXRmOCgpLmRhdGEoKSwgZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpOwor
ICAgIHVuc2lnbmVkIHRleHRNZXRyaWNzU2l6ZSA9IG1fdGV4dE1ldHJpY3NWYWx1ZXMuc2l6ZSgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0TWV0cmljc1NpemU7ICsraSkgewor
ICAgICAgICBjb25zdCBTVkdUZXh0TWV0cmljcyYgbWV0cmljcyA9IG1fdGV4dE1ldHJpY3NWYWx1
ZXMuYXQoaSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAifCB7bGVuZ3RoPSVpLCBnbHlwaE5h
bWU9JyVzJywgdW5pY29kZVN0cmluZz0nJXMnLCB3aWR0aD0lbGYsIGhlaWdodD0lbGZ9XG4iLAor
ICAgICAgICAgICAgICAgIG1ldHJpY3MubGVuZ3RoKCksIG1ldHJpY3MuZ2x5cGgoKS5uYW1lLnV0
ZjgoKS5kYXRhKCksIG1ldHJpY3MuZ2x5cGgoKS51bmljb2RlU3RyaW5nLnV0ZjgoKS5kYXRhKCks
IG1ldHJpY3Mud2lkdGgoKSwgbWV0cmljcy5oZWlnaHQoKSk7CiAgICAgfQogICAgIGZwcmludGYo
c3RkZXJyLCAiXG4iKTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcy5oCShyZXZpc2lvbiA2ODg2NykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2
ICsyMSw3IEBACiAjZGVmaW5lIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzX2gKIAogI2lmIEVOQUJM
RShTVkcpCisjaW5jbHVkZSAiU1ZHVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTMwLDggKzMxLDEwIEBA
IGNsYXNzIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzIHsKIHB1YmxpYzoKICAgICBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlcygpOwogCi0gICAgdm9pZCBmaWxsV2l0aEVtcHR5VmFsdWVzKHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgdm9pZCBkdW1wKCk7CisgICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5z
aWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGR1bXAoKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9h
dCBlbXB0eVZhbHVlKCk7CiAKICAgICBWZWN0b3I8ZmxvYXQ+JiB4VmFsdWVzKCkgeyByZXR1cm4g
bV94VmFsdWVzOyB9CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgeFZhbHVlcygpIGNvbnN0IHsg
cmV0dXJuIG1feFZhbHVlczsgfQpAQCAtNDgsMzEgKzUxLDggQEAgcHVibGljOgogICAgIFZlY3Rv
cjxmbG9hdD4mIHJvdGF0ZVZhbHVlcygpIHsgcmV0dXJuIG1fcm90YXRlVmFsdWVzOyB9CiAgICAg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgcm90YXRlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9yb3Rh
dGVWYWx1ZXM7IH0KIAotICAgIHN0YXRpYyBmbG9hdCBlbXB0eVZhbHVlKCk7Ci0KLSAgICBzdHJ1
Y3QgQ2hhcmFjdGVyRGF0YSB7Ci0gICAgICAgIENoYXJhY3RlckRhdGEoKQotICAgICAgICAgICAg
OiBzcGFuc0NoYXJhY3RlcnMoMCkKLSAgICAgICAgICAgICwgd2lkdGgoMCkKLSAgICAgICAgICAg
ICwgaGVpZ2h0KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdoZW4gbXVs
dGlwbGUgdW5pY29kZSBjaGFyYWN0ZXJzIG1hcCB0byBhIHNpbmdsZSBnbHlwaCAoZWcuICdmZmkn
IGxpZ2F0dXJlKQotICAgICAgICAvLyAnc3BhbnNDaGFyYWN0ZXJzJyBjb250YWlucyB0aGUgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgdGhpcyBnbHlwaCBzcGFucy4KLSAgICAgICAgaW50IHNwYW5zQ2hh
cmFjdGVyczsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSAnZ2x5cGhOYW1lJyAvICd1bmljb2Rl
U3RyaW5nJyBwYWlyIGlzIG5lZWRlZCBmb3Iga2VybmluZyBjYWxjdWxhdGlvbnMuCi0gICAgICAg
IFN0cmluZyBnbHlwaE5hbWU7Ci0gICAgICAgIFN0cmluZyB1bmljb2RlU3RyaW5nOwotCi0gICAg
ICAgIC8vICd3aWR0aCcgYW5kICdoZWlnaHQnIGhvbGQgdGhlIHNpemUgb2YgdGhpcyBnbHlwaC9j
aGFyYWN0ZXIuCi0gICAgICAgIGZsb2F0IHdpZHRoOwotICAgICAgICBmbG9hdCBoZWlnaHQ7Ci0g
ICAgfTsKLQotICAgIFZlY3RvcjxDaGFyYWN0ZXJEYXRhPiYgY2hhcmFjdGVyRGF0YVZhbHVlcygp
IHsgcmV0dXJuIG1fY2hhcmFjdGVyRGF0YVZhbHVlczsgfQotICAgIGNvbnN0IFZlY3RvcjxDaGFy
YWN0ZXJEYXRhPiYgY2hhcmFjdGVyRGF0YVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFj
dGVyRGF0YVZhbHVlczsgfQorICAgIFZlY3RvcjxTVkdUZXh0TWV0cmljcz4mIHRleHRNZXRyaWNz
VmFsdWVzKCkgeyByZXR1cm4gbV90ZXh0TWV0cmljc1ZhbHVlczsgfQorICAgIGNvbnN0IFZlY3Rv
cjxTVkdUZXh0TWV0cmljcz4mIHRleHRNZXRyaWNzVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0TWV0cmljc1ZhbHVlczsgfQogCiBwcml2YXRlOgogICAgIFZlY3RvcjxmbG9hdD4gbV94VmFs
dWVzOwpAQCAtODAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxmbG9hdD4gbV9keFZh
bHVlczsKICAgICBWZWN0b3I8ZmxvYXQ+IG1fZHlWYWx1ZXM7CiAgICAgVmVjdG9yPGZsb2F0PiBt
X3JvdGF0ZVZhbHVlczsKLSAgICBWZWN0b3I8Q2hhcmFjdGVyRGF0YT4gbV9jaGFyYWN0ZXJEYXRh
VmFsdWVzOworICAgIFZlY3RvcjxTVkdUZXh0TWV0cmljcz4gbV90ZXh0TWV0cmljc1ZhbHVlczsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCShyZXZp
c2lvbiA2ODg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTAgQEAKIAogI2lu
Y2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0Lmgi
Ci0jaW5jbHVkZSAiU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQuaCIKIAotLy8gU2V0IHRvIGEgdmFsdWUgPiAwIHRvIGR1bXAgdGhl
IGxheW91dCB2ZWN0b3JzCi0jZGVmaW5lIERVTVBfTEFZT1VUX1ZFQ1RPUlMgMAorLy8gU2V0IHRv
IGEgdmFsdWUgPiAwIHRvIGR1bXAgdGhlIHRleHQgbGF5b3V0IGF0dHJpYnV0ZXMKKyNkZWZpbmUg
RFVNUF9URVhUX0xBWU9VVF9BVFRSSUJVVEVTIDAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00MSwxMDAgKzQwLDEyOSBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6
YnVpCiAgICAgQVNTRVJUKHRleHRSb290KTsKICAgICBtX3Njb3Blcy5jbGVhcigpOwogCi0gICAg
Ly8gQnVpbGQgbGF5b3V0IHNjb3Blcy4KKyAgICAvLyBCdWlsZCBsaXN0IG9mIHgveS9keC9keS9y
b3RhdGUgdmFsdWVzIGZvciBlYWNoIHN1YnRyZWUgZWxlbWVudCB0aGF0IG1heSBkZWZpbmUgdGhl
c2UgdmFsdWVzICh0c3Bhbi90ZXh0UGF0aCBldGMpLgogICAgIHVuc2lnbmVkIGF0Q2hhcmFjdGVy
ID0gMDsKLSAgICBidWlsZExheW91dFNjb3Blcyh0ZXh0Um9vdCwgYXRDaGFyYWN0ZXIpOworICAg
IFVDaGFyIGxhc3RDaGFyYWN0ZXIgPSAnXDAnOworICAgIGJ1aWxkTGF5b3V0U2NvcGVzKHRleHRS
b290LCBhdENoYXJhY3RlciwgbGFzdENoYXJhY3Rlcik7CiAKICAgICBpZiAoIWF0Q2hhcmFjdGVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBBZGQgb3V0ZXJtb3N0IHNjb3BlLCBhZnRlciB0
ZXh0IGxlbmd0aCBpcyBrbm93bi4KLSAgICBMYXlvdXRTY29wZSBzY29wZTsKLSAgICBidWlsZExh
eW91dFNjb3BlKHNjb3BlLCB0ZXh0Um9vdCwgMCwgYXRDaGFyYWN0ZXIpOwotICAgIG1fc2NvcGVz
LnByZXBlbmQoc2NvcGUpOwotCi0gICAgLy8gQnVpbGQgbGF5b3V0IGluZm9ybWF0aW9uIHJlc3Bl
Y3Rpbmcgc2NvcGUgb2YgYXR0cmlidXRlIHZhbHVlcy4KLSAgICBidWlsZExheW91dEF0dHJpYnV0
ZXNGcm9tU2NvcGVzKCk7CisgICAgLy8gQnVpbGQgbGlzdCBvZiB4L3kvZHgvZHkvcm90YXRlIHZh
bHVlcyBmb3IgdGhlIG91dGVybW9zdCA8dGV4dD4gZWxlbWVudC4KKyAgICBidWlsZE91dGVybW9z
dExheW91dFNjb3BlKHRleHRSb290LCBhdENoYXJhY3Rlcik7CiAKKyAgICAvLyBQcm9wYWdhdGUg
bGF5b3V0IGF0dHJpYnV0ZXMgdG8gZWFjaCBSZW5kZXJTVkdJbmxpbmVUZXh0IG9iamVjdC4KICAg
ICBhdENoYXJhY3RlciA9IDA7Ci0gICAgcHJvcGFnYXRlTGF5b3V0QXR0cmlidXRlcyh0ZXh0Um9v
dCwgYXRDaGFyYWN0ZXIpOworICAgIGxhc3RDaGFyYWN0ZXIgPSAnXDAnOworICAgIHByb3BhZ2F0
ZUxheW91dEF0dHJpYnV0ZXModGV4dFJvb3QsIGF0Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyKTsK
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlUb0Rlc3RpbmF0aW9uVmVjdG9yKFZlY3Rvcjxm
bG9hdD4mIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBkZXN0aW5hdGlvblN0YXJ0T2Zmc2V0LCBWZWN0
b3I8ZmxvYXQ+JiBzb3VyY2UsIHVuc2lnbmVkIHNvdXJjZVN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCitzdGF0aWMgaW5saW5lIHZvaWQgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR0xlbmd0
aExpc3QoU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCwgU1ZHTGVuZ3RoTGlzdCogbGlzdCwgVmVj
dG9yPGZsb2F0PiYgZmxvYXRWYWx1ZXMsIHVuc2lnbmVkIHRleHRDb250ZW50TGVuZ3RoKQogewot
ICAgIEFTU0VSVChkZXN0aW5hdGlvblN0YXJ0T2Zmc2V0ICsgbGVuZ3RoIDw9IGRlc3RpbmF0aW9u
LnNpemUoKSk7CisgICAgQVNTRVJUKGxlbmd0aENvbnRleHQpOworICAgIEFTU0VSVChsaXN0KTsK
KworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPm51bWJlck9mSXRlbXMoKTsKKyAgICBpZiAo
bGVuZ3RoID4gdGV4dENvbnRlbnRMZW5ndGgpCisgICAgICAgIGxlbmd0aCA9IHRleHRDb250ZW50
TGVuZ3RoOworICAgIGZsb2F0VmFsdWVzLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogCi0gICAg
VmVjdG9yPGZsb2F0Pjo6aXRlcmF0b3Igc291cmNlQmVnaW4gPSBzb3VyY2UuYmVnaW4oKSArIHNv
dXJjZVN0YXJ0T2Zmc2V0OwotICAgIHN0ZDo6Y29weShzb3VyY2VCZWdpbiwgc291cmNlQmVnaW4g
KyBsZW5ndGgsIGRlc3RpbmF0aW9uLmJlZ2luKCkgKyBkZXN0aW5hdGlvblN0YXJ0T2Zmc2V0KTsK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgU1ZHTGVuZ3RoIGxlbmd0aCA9IGxpc3QtPmdldEl0ZW0o
aSwgZWMpOworICAgICAgICBBU1NFUlQoIWVjKTsKKyAgICAgICAgZmxvYXRWYWx1ZXMuYXBwZW5k
KGxlbmd0aC52YWx1ZShsZW5ndGhDb250ZXh0KSk7CisgICAgfQogfQogCi1zdGF0aWMgaW5saW5l
IHZvaWQgY29weVRvRGVzdGluYXRpb25WZWN0b3JJZlNvdXJjZVJhbmdlSXNOb3RFbXB0eShWZWN0
b3I8ZmxvYXQ+JiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgZGVzdGluYXRpb25TdGFydE9mZnNldCwg
VmVjdG9yPGZsb2F0PiYgc291cmNlLCB1bnNpZ25lZCBzb3VyY2VTdGFydE9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQorc3RhdGljIGlubGluZSB2b2lkIGV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdO
dW1iZXJMaXN0KFNWR051bWJlckxpc3QqIGxpc3QsIFZlY3RvcjxmbG9hdD4mIGZsb2F0VmFsdWVz
LCB1bnNpZ25lZCB0ZXh0Q29udGVudExlbmd0aCkKIHsKLSAgICBib29sIHJhbmdlRW1wdHkgPSB0
cnVlOworICAgIEFTU0VSVChsaXN0KTsKIAotICAgIHVuc2lnbmVkIHNpemUgPSBzb3VyY2VTdGFy
dE9mZnNldCArIGxlbmd0aDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzb3VyY2VTdGFydE9mZnNl
dDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoc291cmNlLmF0KGkpID09IFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgcmFuZ2VFbXB0eSA9IGZhbHNlOwotICAgICAgICBicmVhazsKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBsaXN0LT5udW1iZXJPZkl0ZW1zKCk7CisgICAgaWYgKGxlbmd0aCA+IHRleHRDb250
ZW50TGVuZ3RoKQorICAgICAgICBsZW5ndGggPSB0ZXh0Q29udGVudExlbmd0aDsKKyAgICBmbG9h
dFZhbHVlcy5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICBmbG9hdCBsZW5ndGggPSBsaXN0LT5nZXRJdGVtKGksIGVjKTsKKyAgICAgICAgQVNTRVJUKCFl
Yyk7CisgICAgICAgIGZsb2F0VmFsdWVzLmFwcGVuZChsZW5ndGgpOwogICAgIH0KK30KKwordm9p
ZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1aWxkTGF5b3V0U2NvcGUoTGF5b3V0
U2NvcGUmIHNjb3BlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCB1bnNpZ25lZCB0ZXh0Q29udGVu
dFN0YXJ0LCB1bnNpZ25lZCB0ZXh0Q29udGVudExlbmd0aCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
cmVuZGVyZXIpOworICAgIEFTU0VSVChyZW5kZXJlci0+c3R5bGUoKSk7CisKKyAgICBzY29wZS50
ZXh0Q29udGVudFN0YXJ0ID0gdGV4dENvbnRlbnRTdGFydDsKKyAgICBzY29wZS50ZXh0Q29udGVu
dExlbmd0aCA9IHRleHRDb250ZW50TGVuZ3RoOwogCi0gICAgaWYgKHJhbmdlRW1wdHkpCisgICAg
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCogZWxlbWVudCA9IFNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQ6OmVsZW1lbnRGcm9tUmVuZGVyZXIocmVuZGVyZXIpOworICAgIGlmICghZWxlbWVudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZGVzdGluYXRpb24ucmVzaXplKGxlbmd0aCk7Ci0gICAg
Y29weVRvRGVzdGluYXRpb25WZWN0b3IoZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uU3RhcnRPZmZz
ZXQsIHNvdXJjZSwgc291cmNlU3RhcnRPZmZzZXQsIGxlbmd0aCk7Ci19CisgICAgU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBzY29wZS5hdHRyaWJ1dGVzOworICAgIGV4dHJh
Y3RGbG9hdFZhbHVlc0Zyb21TVkdMZW5ndGhMaXN0KGVsZW1lbnQsIGVsZW1lbnQtPngoKSwgYXR0
cmlidXRlcy54VmFsdWVzKCksIHRleHRDb250ZW50TGVuZ3RoKTsKKyAgICBleHRyYWN0RmxvYXRW
YWx1ZXNGcm9tU1ZHTGVuZ3RoTGlzdChlbGVtZW50LCBlbGVtZW50LT55KCksIGF0dHJpYnV0ZXMu
eVZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0aCk7CisgICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJv
bVNWR0xlbmd0aExpc3QoZWxlbWVudCwgZWxlbWVudC0+ZHgoKSwgYXR0cmlidXRlcy5keFZhbHVl
cygpLCB0ZXh0Q29udGVudExlbmd0aCk7CisgICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR0xl
bmd0aExpc3QoZWxlbWVudCwgZWxlbWVudC0+ZHkoKSwgYXR0cmlidXRlcy5keVZhbHVlcygpLCB0
ZXh0Q29udGVudExlbmd0aCk7CisgICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR051bWJlckxp
c3QoZWxlbWVudC0+cm90YXRlKCksIGF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCksIHRleHRDb250
ZW50TGVuZ3RoKTsKIAotdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OnByb3Bh
Z2F0ZUxheW91dEF0dHJpYnV0ZXMoUmVuZGVyT2JqZWN0KiBzdGFydCwgdW5zaWduZWQmIGF0Q2hh
cmFjdGVyKQotewotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7IAotICAgICAgICBp
ZiAoIWNoaWxkLT5pc1NWR0lubGluZVRleHQoKSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5p
c1NWR0lubGluZSgpKQotICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUxheW91dEF0dHJpYnV0ZXMo
Y2hpbGQsIGF0Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Cisg
ICAgLy8gVGhlIGxhc3Qgcm90YXRpb24gdmFsdWUgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgorICAg
IFZlY3RvcjxmbG9hdD4mIHJvdGF0ZVZhbHVlcyA9IGF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCk7
CisgICAgaWYgKHJvdGF0ZVZhbHVlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHSW5s
aW5lVGV4dCo+KGNoaWxkKTsKLSAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRleHQtPnRl
eHRMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCByb3RhdGVWYWx1ZXNTaXplID0gcm90YXRlVmFsdWVz
LnNpemUoKTsKKyAgICBpZiAocm90YXRlVmFsdWVzU2l6ZSA9PSB0ZXh0Q29udGVudExlbmd0aCkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIEJ1aWxkIGxheW91dCBhdHRyaWJ1dGVzIGZv
ciBhIHNpbmdsZSBSZW5kZXJTVkdJbmxpbmVUZXh0IHJlbmRlcmVyLgotICAgICAgICBTVkdUZXh0
TGF5b3V0QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgIGZsb2F0IGxhc3RSb3RhdGlvbiA9IHJv
dGF0ZVZhbHVlcy5sYXN0KCk7CiAKLSAgICAgICAgLy8gVGhlIHggdmFsdWUgbGlzdCBzaG91bGQg
YWx3YXlzIGJlIGFzIGxhcmdlIGFzIHRoZSB0ZXh0IGxlbmd0aC4KLSAgICAgICAgLy8gQW55IHZh
bHVlcyB0aGF0IGFyZSBlbXB0eSB3aWxsIGJlIGZpbGxlZCBpbiBieSB0aGUgYWN0dWFsIHRleHQg
bGF5b3V0IHByb2Nlc3MgbGF0ZXIsCi0gICAgICAgIC8vIGFzIHdlIG5lZWQgdG8gYmUgYWJsZSB0
byBxdWVyeSB0aGUgeC95IHBvc2l0aW9uIGZvciBldmVyeSBjaGFyYWN0ZXIgdGhyb3VnaCBTVkcg
RE9NLgotICAgICAgICBhdHRyaWJ1dGVzLnhWYWx1ZXMoKS5yZXNpemUodGV4dExlbmd0aCk7Ci0g
ICAgICAgIGNvcHlUb0Rlc3RpbmF0aW9uVmVjdG9yKGF0dHJpYnV0ZXMueFZhbHVlcygpLCAwLCBt
X2F0dHJpYnV0ZXMueFZhbHVlcygpLCBhdENoYXJhY3RlciwgdGV4dExlbmd0aCk7Ci0KLSAgICAg
ICAgLy8gU2FtZSBmb3IgdGhlIHkgdmFsdWUgbGlzdC4KLSAgICAgICAgYXR0cmlidXRlcy55VmFs
dWVzKCkucmVzaXplKHRleHRMZW5ndGgpOwotICAgICAgICBjb3B5VG9EZXN0aW5hdGlvblZlY3Rv
cihhdHRyaWJ1dGVzLnlWYWx1ZXMoKSwgMCwgbV9hdHRyaWJ1dGVzLnlWYWx1ZXMoKSwgYXRDaGFy
YWN0ZXIsIHRleHRMZW5ndGgpOwotCi0gICAgICAgIC8vIFRoZSBkeC9keS9yb3RhdGUgdmFsdWUg
bGlzdHMgbWF5IGJlIGVtcHR5LgotICAgICAgICBjb3B5VG9EZXN0aW5hdGlvblZlY3RvcklmU291
cmNlUmFuZ2VJc05vdEVtcHR5KGF0dHJpYnV0ZXMuZHhWYWx1ZXMoKSwgMCwgbV9hdHRyaWJ1dGVz
LmR4VmFsdWVzKCksIGF0Q2hhcmFjdGVyLCB0ZXh0TGVuZ3RoKTsKLSAgICAgICAgY29weVRvRGVz
dGluYXRpb25WZWN0b3JJZlNvdXJjZVJhbmdlSXNOb3RFbXB0eShhdHRyaWJ1dGVzLmR5VmFsdWVz
KCksIDAsIG1fYXR0cmlidXRlcy5keVZhbHVlcygpLCBhdENoYXJhY3RlciwgdGV4dExlbmd0aCk7
Ci0gICAgICAgIGNvcHlUb0Rlc3RpbmF0aW9uVmVjdG9ySWZTb3VyY2VSYW5nZUlzTm90RW1wdHko
YXR0cmlidXRlcy5yb3RhdGVWYWx1ZXMoKSwgMCwgbV9hdHRyaWJ1dGVzLnJvdGF0ZVZhbHVlcygp
LCBhdENoYXJhY3RlciwgdGV4dExlbmd0aCk7Ci0KLSAgICAgICAgLy8gQnVpbGQgQ2hhcmFjdGVy
RGF0YSwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRldGVjdCBsaWdhdHVyZXMsIGhvbGRzIGtlcm5p
bmcgcGFpcnMgKGdseXBoIG5hbWUsIHVuaWNvZGUgc3RyaW5nKSBhbmQgY2hhcmFjdGVyIG1ldHJp
Y3MuCi0gICAgICAgIG1lYXN1cmVDaGFyYWN0ZXJzKHRleHQsIGF0dHJpYnV0ZXMpOwotCi0jaWYg
RFVNUF9MQVlPVVRfVkVDVE9SUyA+IDAKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJEdW1waW5n
IGxheW91dCB2ZWN0b3IgZm9yIFJlbmRlclNWR0lubGluZVRleHQsIHJlbmRlcmVyPSVwLCBub2Rl
PSVwXG4iLCB0ZXh0LCB0ZXh0LT5ub2RlKCkpOwotICAgICAgICBhdHRyaWJ1dGVzLmR1bXAoKTsK
LSNlbmRpZgorICAgIHJvdGF0ZVZhbHVlcy5yZXNpemUodGV4dENvbnRlbnRMZW5ndGgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IHJvdGF0ZVZhbHVlc1NpemU7IGkgPCB0ZXh0Q29udGVudExlbmd0
aDsgKytpKQorICAgICAgICByb3RhdGVWYWx1ZXMuYXQoaSkgPSBsYXN0Um90YXRpb247Cit9CiAK
LSAgICAgICAgdGV4dC0+c3RvcmVMYXlvdXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAg
ICBhdENoYXJhY3RlciArPSB0ZXh0LT50ZXh0TGVuZ3RoKCk7Ci0gICAgfQorc3RhdGljIGlubGlu
ZSBib29sIGNoYXJhY3RlcklzU3BhY2UoY29uc3QgVUNoYXImIGNoYXJhY3RlcikKK3sKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyID09ICcgJzsKK30KKworc3RhdGljIGlubGluZSBib29sIGNoYXJhY3Rl
cklzU3BhY2VPck51bGwoY29uc3QgVUNoYXImIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hh
cmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1wwJzsKIH0KIAotdm9pZCBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1aWxkTGF5b3V0U2NvcGVzKFJlbmRlck9iamVjdCogc3Rh
cnQsIHVuc2lnbmVkJiBhdENoYXJhY3RlcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRQcmVz
ZXJ2ZUFsbFdoaXRlU3BhY2UoUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAgIEFTU0VSVChzdHls
ZSk7CisgICAgcmV0dXJuIHN0eWxlLT53aGl0ZVNwYWNlKCkgPT0gUFJFOworfQorIAordm9pZCBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1aWxkTGF5b3V0U2NvcGVzKFJlbmRlck9i
amVjdCogc3RhcnQsIHVuc2lnbmVkJiBhdENoYXJhY3RlciwgVUNoYXImIGxhc3RDaGFyYWN0ZXIp
CiB7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsgCiAgICAgICAgIGlmIChjaGls
ZC0+aXNTVkdJbmxpbmVUZXh0KCkpIHsKLSAgICAgICAgICAgIGF0Q2hhcmFjdGVyICs9IHRvUmVu
ZGVyVGV4dChjaGlsZCktPnRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIFJlbmRlclNWR0lubGlu
ZVRleHQqIHRleHQgPSB0b1JlbmRlclNWR0lubGluZVRleHQoY2hpbGQpOworCisgICAgICAgICAg
ICBpZiAoIXNob3VsZFByZXNlcnZlQWxsV2hpdGVTcGFjZSh0ZXh0LT5zdHlsZSgpKSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGV4dC0+Y2hhcmFjdGVycygp
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0LT50ZXh0TGVuZ3Ro
KCk7ICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdGV4dFBvc2l0aW9uID0gMDsg
dGV4dFBvc2l0aW9uIDwgdGV4dExlbmd0aDsgKyt0ZXh0UG9zaXRpb24pIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVUNoYXImIGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW3RleHRQ
b3NpdGlvbl07CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJc1NwYWNlKGN1cnJl
bnRDaGFyYWN0ZXIpICYmIGNoYXJhY3RlcklzU3BhY2VPck51bGwobGFzdENoYXJhY3RlcikpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICBs
YXN0Q2hhcmFjdGVyID0gY3VycmVudENoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgKyth
dENoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBhdENoYXJhY3RlciArPSB0ZXh0LT50ZXh0TGVuZ3RoKCk7CisKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTE0Miw3ICsxNzAsNyBAQCB2b2lkIFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpCiAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICB1bnNpZ25lZCB0ZXh0Q29udGVudFN0YXJ0ID0gYXRDaGFyYWN0ZXI7Ci0gICAgICAg
IGJ1aWxkTGF5b3V0U2NvcGVzKGNoaWxkLCBhdENoYXJhY3Rlcik7CisgICAgICAgIGJ1aWxkTGF5
b3V0U2NvcGVzKGNoaWxkLCBhdENoYXJhY3RlciwgbGFzdENoYXJhY3Rlcik7CiAKICAgICAgICAg
TGF5b3V0U2NvcGUgc2NvcGU7CiAgICAgICAgIGJ1aWxkTGF5b3V0U2NvcGUoc2NvcGUsIGNoaWxk
LCB0ZXh0Q29udGVudFN0YXJ0LCBhdENoYXJhY3RlciAtIHRleHRDb250ZW50U3RhcnQpOwpAQCAt
MTUwLDE1MyArMTc4LDEzOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6
YnVpCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbERlc3RpbmF0aW9uVmVjdG9y
V2l0aExhc3RTb3VyY2VWYWx1ZShWZWN0b3I8ZmxvYXQ+JiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
ZGVzdGluYXRpb25TdGFydE9mZnNldCwgVmVjdG9yPGZsb2F0PiYgc291cmNlLCB1bnNpZ25lZCBs
ZW5ndGgpCit2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpbGRPdXRlcm1v
c3RMYXlvdXRTY29wZShSZW5kZXJTVkdUZXh0KiB0ZXh0Um9vdCwgdW5zaWduZWQgdGV4dExlbmd0
aCkKIHsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIExh
eW91dFNjb3BlIHNjb3BlOworICAgIGJ1aWxkTGF5b3V0U2NvcGUoc2NvcGUsIHRleHRSb290LCAw
LCB0ZXh0TGVuZ3RoKTsKIAotICAgIGZsb2F0IGxhc3RWYWx1ZSA9IHNvdXJjZS5sYXN0KCk7Cisg
ICAgLy8gSGFuZGxlIDx0ZXh0PiB4L3kgZGVmYXVsdCBhdHRyaWJ1dGVzLgorICAgIFZlY3Rvcjxm
bG9hdD4mIHhWYWx1ZXMgPSBzY29wZS5hdHRyaWJ1dGVzLnhWYWx1ZXMoKTsKKyAgICBpZiAoeFZh
bHVlcy5pc0VtcHR5KCkpCisgICAgICAgIHhWYWx1ZXMuYXBwZW5kKDApOworCisgICAgVmVjdG9y
PGZsb2F0PiYgeVZhbHVlcyA9IHNjb3BlLmF0dHJpYnV0ZXMueVZhbHVlcygpOworICAgIGlmICh5
VmFsdWVzLmlzRW1wdHkoKSkKKyAgICAgICAgeVZhbHVlcy5hcHBlbmQoMCk7CiAKLSAgICB1bnNp
Z25lZCByb3RhdGVWYWx1ZXNTaXplID0gc291cmNlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSByb3RhdGVWYWx1ZXNTaXplOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgQVNTRVJU
KGkgKyBkZXN0aW5hdGlvblN0YXJ0T2Zmc2V0IDwgZGVzdGluYXRpb24uc2l6ZSgpKTsKLSAgICAg
ICAgZGVzdGluYXRpb24uYXQoaSArIGRlc3RpbmF0aW9uU3RhcnRPZmZzZXQpID0gbGFzdFZhbHVl
OwotICAgIH0KKyAgICBtX3Njb3Blcy5wcmVwZW5kKHNjb3BlKTsKIH0KIAotdm9pZCBTVkdUZXh0
TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1aWxkTGF5b3V0QXR0cmlidXRlc0Zyb21TY29wZXMo
KQordm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OnByb3BhZ2F0ZUxheW91dEF0
dHJpYnV0ZXMoUmVuZGVyT2JqZWN0KiBzdGFydCwgdW5zaWduZWQmIGF0Q2hhcmFjdGVyLCBVQ2hh
ciYgbGFzdENoYXJhY3RlcikgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1fc2NvcGVzLmlzRW1wdHko
KSk7Ci0KLSAgICB1bnNpZ25lZCB0b3RhbExlbmd0aCA9IG1fc2NvcGVzLmZpcnN0KCkudGV4dENv
bnRlbnRMZW5ndGg7Ci0gICAgaWYgKCF0b3RhbExlbmd0aCkKLSAgICAgICAgcmV0dXJuOworICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7IAorICAgICAgICBpZiAoY2hpbGQtPmlzU1ZH
SW5saW5lVGV4dCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0ID0g
dG9SZW5kZXJTVkdJbmxpbmVUZXh0KGNoaWxkKTsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzID0gdGV4dC0+Y2hhcmFjdGVycygpOworICAgICAgICAgICAgdW5zaWduZWQgdGV4
dExlbmd0aCA9IHRleHQtPnRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIGJvb2wgcHJlc2VydmVX
aGl0ZVNwYWNlID0gc2hvdWxkUHJlc2VydmVBbGxXaGl0ZVNwYWNlKHRleHQtPnN0eWxlKCkpOwor
CisgICAgICAgICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAg
ICAgICAgYXR0cmlidXRlcy5yZXNlcnZlQ2FwYWNpdHkodGV4dExlbmd0aCk7CisgICAgCisgICAg
ICAgICAgICB1bnNpZ25lZCB2YWx1ZUxpc3RQb3NpdGlvbiA9IGF0Q2hhcmFjdGVyOworICAgICAg
ICAgICAgdW5zaWduZWQgbWV0cmljc0xlbmd0aCA9IDE7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHRleHRQb3NpdGlvbiA9IDA7IHRleHRQb3NpdGlvbiA8IHRleHRMZW5ndGg7IHRleHRQb3Np
dGlvbiArPSBtZXRyaWNzTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY29uc3QgVUNoYXImIGN1
cnJlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW3RleHRQb3NpdGlvbl07CisKKyAgICAgICAgICAg
ICAgICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFy
YWN0ZXJSYW5nZSh0ZXh0LCB0ZXh0UG9zaXRpb24sIDEpOworICAgICAgICAgICAgICAgIG1ldHJp
Y3NMZW5ndGggPSBtZXRyaWNzLmxlbmd0aCgpOworCisgICAgICAgICAgICAgICAgaWYgKCFwcmVz
ZXJ2ZVdoaXRlU3BhY2UgJiYgY2hhcmFjdGVySXNTcGFjZShjdXJyZW50Q2hhcmFjdGVyKSAmJiBj
aGFyYWN0ZXJJc1NwYWNlT3JOdWxsKGxhc3RDaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFzc2lnbkVtcHR5TGF5b3V0QXR0cmlidXRlc0ZvckNoYXJhY3RlcihhdHRyaWJ1dGVzKTsK
KyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy50ZXh0TWV0cmljc1ZhbHVlcygpLmFwcGVu
ZChTVkdUZXh0TWV0cmljczo6ZW1wdHlNZXRyaWNzKCkpOworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhc3NpZ25MYXlv
dXRBdHRyaWJ1dGVzRm9yQ2hhcmFjdGVyKGF0dHJpYnV0ZXMsIG1ldHJpY3MsIHZhbHVlTGlzdFBv
c2l0aW9uKTsKKworICAgICAgICAgICAgICAgIGlmIChtZXRyaWNzTGVuZ3RoID4gMSkgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWV0cmljc0xlbmd0aCAt
IDE7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbkVtcHR5TGF5b3V0QXR0cmli
dXRlc0ZvckNoYXJhY3RlcihhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBsYXN0Q2hhcmFjdGVyID0gY3VycmVudENoYXJhY3RlcjsKKyAgICAgICAgICAg
ICAgICB2YWx1ZUxpc3RQb3NpdGlvbiArPSBtZXRyaWNzTGVuZ3RoOworICAgICAgICAgICAgfQor
CisjaWYgRFVNUF9URVhUX0xBWU9VVF9BVFRSSUJVVEVTID4gMAorICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJcbkR1bXBpbmcgbGF5b3V0IGF0dHJpYnV0ZXMgZm9yIFJlbmRlclNWR0lubGlu
ZVRleHQsIHJlbmRlcmVyPSVwLCBub2RlPSVwIChhdENoYXJhY3RlcjogJWkpXG4iLCB0ZXh0LCB0
ZXh0LT5ub2RlKCksIGF0Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuZHVtcCgp
OworI2VuZGlmCiAKLSAgICBtX2F0dHJpYnV0ZXMuZmlsbFdpdGhFbXB0eVZhbHVlcyh0b3RhbExl
bmd0aCk7CisgICAgICAgICAgICB0ZXh0LT5zdG9yZUxheW91dEF0dHJpYnV0ZXMoYXR0cmlidXRl
cyk7CisgICAgICAgICAgICBhdENoYXJhY3RlciA9IHZhbHVlTGlzdFBvc2l0aW9uOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KIAotICAgIC8vIEJ1aWxkIGZpbmFsIGxpc3Qgb2Yg
eC95L2R4L2R5L3JvdGF0ZSB2YWx1ZXMgZm9yIGVhY2ggY2hhcmFjdGVyIHN0b3JlcyBpbiB0aGUg
PHRleHQ+IHN1YnRyZWUuCi0gICAgZm9yICh1bnNpZ25lZCBhdFNjb3BlID0gMDsgYXRTY29wZSA8
IG1fc2NvcGVzLnNpemUoKTsgKythdFNjb3BlKSB7Ci0gICAgICAgIExheW91dFNjb3BlJiBzY29w
ZSA9IG1fc2NvcGVzLmF0KGF0U2NvcGUpOwotICAgICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
cyYgYXR0cmlidXRlcyA9IHNjb3BlLmF0dHJpYnV0ZXM7Ci0KLSAgICAgICAgY29weVRvRGVzdGlu
YXRpb25WZWN0b3IobV9hdHRyaWJ1dGVzLnhWYWx1ZXMoKSwgc2NvcGUudGV4dENvbnRlbnRTdGFy
dCwgYXR0cmlidXRlcy54VmFsdWVzKCksIDAsIGF0dHJpYnV0ZXMueFZhbHVlcygpLnNpemUoKSk7
Ci0gICAgICAgIGNvcHlUb0Rlc3RpbmF0aW9uVmVjdG9yKG1fYXR0cmlidXRlcy55VmFsdWVzKCks
IHNjb3BlLnRleHRDb250ZW50U3RhcnQsIGF0dHJpYnV0ZXMueVZhbHVlcygpLCAwLCBhdHRyaWJ1
dGVzLnlWYWx1ZXMoKS5zaXplKCkpOwotICAgICAgICBjb3B5VG9EZXN0aW5hdGlvblZlY3Rvciht
X2F0dHJpYnV0ZXMuZHhWYWx1ZXMoKSwgc2NvcGUudGV4dENvbnRlbnRTdGFydCwgYXR0cmlidXRl
cy5keFZhbHVlcygpLCAwLCBhdHRyaWJ1dGVzLmR4VmFsdWVzKCkuc2l6ZSgpKTsKLSAgICAgICAg
Y29weVRvRGVzdGluYXRpb25WZWN0b3IobV9hdHRyaWJ1dGVzLmR5VmFsdWVzKCksIHNjb3BlLnRl
eHRDb250ZW50U3RhcnQsIGF0dHJpYnV0ZXMuZHlWYWx1ZXMoKSwgMCwgYXR0cmlidXRlcy5keVZh
bHVlcygpLnNpemUoKSk7Ci0gICAgICAgIGNvcHlUb0Rlc3RpbmF0aW9uVmVjdG9yKG1fYXR0cmli
dXRlcy5yb3RhdGVWYWx1ZXMoKSwgc2NvcGUudGV4dENvbnRlbnRTdGFydCwgYXR0cmlidXRlcy5y
b3RhdGVWYWx1ZXMoKSwgMCwgYXR0cmlidXRlcy5yb3RhdGVWYWx1ZXMoKS5zaXplKCkpOwotCi0g
ICAgICAgIC8vIEluIGhvcml6b250YWwgKHZlcnRpY2FsKSB3cml0aW5nIG1vZGVzLCB0aGUgbGFz
dCB5ICh4KSB2YWx1ZSBpbiB0aGUgc2NvcGUgaXMgdGhlIGRlZmF1bHQgeSAoeCkgdmFsdWUgZm9y
IGFsbCBmb2xsb3dpbmcgY2hhcmFjdGVycywgdW5sZXNzIGV4cGxpY2l0ZWx5IG92ZXJyaWRlbi4K
LSAgICAgICAgaWYgKHNjb3BlLmlzVmVydGljYWxXcml0aW5nTW9kZSkKLSAgICAgICAgICAgIGZp
bGxEZXN0aW5hdGlvblZlY3RvcldpdGhMYXN0U291cmNlVmFsdWUobV9hdHRyaWJ1dGVzLnhWYWx1
ZXMoKSwgc2NvcGUudGV4dENvbnRlbnRTdGFydCwgYXR0cmlidXRlcy54VmFsdWVzKCksIHNjb3Bl
LnRleHRDb250ZW50TGVuZ3RoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmlsbERlc3Rp
bmF0aW9uVmVjdG9yV2l0aExhc3RTb3VyY2VWYWx1ZShtX2F0dHJpYnV0ZXMueVZhbHVlcygpLCBz
Y29wZS50ZXh0Q29udGVudFN0YXJ0LCBhdHRyaWJ1dGVzLnlWYWx1ZXMoKSwgc2NvcGUudGV4dENv
bnRlbnRMZW5ndGgpOworICAgICAgICBpZiAoIWNoaWxkLT5pc1NWR0lubGluZSgpKQorICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgLy8gVGhlIGxhc3Qgcm90YXRpb24gdmFsdWUgaW4g
dGhlIHNjb3BlIGlzIHRoZSBkZWZhdWx0IHJvdGF0aW9uIGZvciBhbGwgZm9sbG93aW5nIGNoYXJh
Y3RlciwgdW5sZXNzIGV4cGxpY2l0ZWx5IG92ZXJyaWRlbi4KLSAgICAgICAgZmlsbERlc3RpbmF0
aW9uVmVjdG9yV2l0aExhc3RTb3VyY2VWYWx1ZShtX2F0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCks
IHNjb3BlLnRleHRDb250ZW50U3RhcnQsIGF0dHJpYnV0ZXMucm90YXRlVmFsdWVzKCksIHNjb3Bl
LnRleHRDb250ZW50TGVuZ3RoKTsKKyAgICAgICAgcHJvcGFnYXRlTGF5b3V0QXR0cmlidXRlcyhj
aGlsZCwgYXRDaGFyYWN0ZXIsIGxhc3RDaGFyYWN0ZXIpOwogICAgIH0KIH0KIAotdm9pZCBTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6Om1lYXN1cmVDaGFyYWN0ZXJzKFJlbmRlclNWR0lu
bGluZVRleHQqIHRleHQsIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQorZmxv
YXQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpuZXh0TGF5b3V0VmFsdWUoTGF5b3V0
VmFsdWVUeXBlIHR5cGUsIHVuc2lnbmVkIGF0Q2hhcmFjdGVyKSBjb25zdAogewotICAgIEFTU0VS
VCh0ZXh0KTsKLSAgICBBU1NFUlQodGV4dC0+c3R5bGUoKSk7Ci0gICAgY29uc3QgRm9udCYgZm9u
dCA9IHRleHQtPnN0eWxlKCktPmZvbnQoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9
IHRleHQtPmNoYXJhY3RlcnMoKTsKLSAgICBpbnQgbGVuZ3RoID0gdGV4dC0+dGV4dExlbmd0aCgp
OwotCi0gICAgVGV4dFJ1biBydW4oMCwgMCk7Ci0gICAgcnVuLmRpc2FibGVTcGFjaW5nKCk7Ci0g
ICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7Ci0KLSAgICBpbnQgY2hhcnNDb25zdW1lZCA9
IDA7Ci0gICAgZm9yIChpbnQgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IGxlbmd0aDsgcG9zaXRp
b24gKz0gY2hhcnNDb25zdW1lZCkgewotICAgICAgICBydW4uc2V0VGV4dChjaGFyYWN0ZXJzICsg
cG9zaXRpb24sIDEpOwotICAgICAgICBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSA9IGxlbmd0aCAt
IHBvc2l0aW9uIC0gMTsKLQotICAgICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6Q2hhcmFj
dGVyRGF0YSBjaGFyYWN0ZXJEYXRhOwotICAgICAgICBjaGFyYWN0ZXJEYXRhLndpZHRoID0gZm9u
dC5mbG9hdFdpZHRoKHJ1biwgZXh0cmFDaGFyc0F2YWlsYWJsZSwgY2hhcmFjdGVyRGF0YS5zcGFu
c0NoYXJhY3RlcnMsIGNoYXJhY3RlckRhdGEuZ2x5cGhOYW1lKTsKLSAgICAgICAgY2hhcmFjdGVy
RGF0YS5oZWlnaHQgPSBmb250LmhlaWdodCgpOwotICAgICAgICBjaGFyYWN0ZXJEYXRhLnVuaWNv
ZGVTdHJpbmcgPSBTdHJpbmcoY2hhcmFjdGVycyArIHBvc2l0aW9uLCBjaGFyYWN0ZXJEYXRhLnNw
YW5zQ2hhcmFjdGVycyk7Ci0gICAgICAgIGF0dHJpYnV0ZXMuY2hhcmFjdGVyRGF0YVZhbHVlcygp
LmFwcGVuZChjaGFyYWN0ZXJEYXRhKTsKKyAgICBmb3IgKGludCBpID0gbV9zY29wZXMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgTGF5b3V0U2NvcGUmIHNjb3BlID0g
bV9zY29wZXMuYXQoaSk7CisgICAgICAgIGlmIChzY29wZS50ZXh0Q29udGVudFN0YXJ0ID4gYXRD
aGFyYWN0ZXIgfHwgc2NvcGUudGV4dENvbnRlbnRTdGFydCArIHNjb3BlLnRleHRDb250ZW50TGVu
Z3RoIDwgYXRDaGFyYWN0ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBjaGFy
c0NvbnN1bWVkID0gY2hhcmFjdGVyRGF0YS5zcGFuc0NoYXJhY3RlcnM7Ci0gICAgfQotfQorICAg
ICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+KiB2YWx1ZXNQb2ludGVyID0gMDsKKyAgICAgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgWFZhbHVlOgorICAgICAgICAgICAgdmFsdWVzUG9p
bnRlciA9ICZzY29wZS5hdHRyaWJ1dGVzLnhWYWx1ZXMoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFlWYWx1ZToKKyAgICAgICAgICAgIHZhbHVlc1BvaW50ZXIgPSAmc2NvcGUu
YXR0cmlidXRlcy55VmFsdWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBE
eFZhbHVlOgorICAgICAgICAgICAgdmFsdWVzUG9pbnRlciA9ICZzY29wZS5hdHRyaWJ1dGVzLmR4
VmFsdWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEeVZhbHVlOgorICAg
ICAgICAgICAgdmFsdWVzUG9pbnRlciA9ICZzY29wZS5hdHRyaWJ1dGVzLmR5VmFsdWVzKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSb3RhdGVWYWx1ZToKKyAgICAgICAgICAg
IHZhbHVlc1BvaW50ZXIgPSAmc2NvcGUuYXR0cmlidXRlcy5yb3RhdGVWYWx1ZXMoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGV4dHJhY3RGbG9hdFZh
bHVlc0Zyb21TVkdMZW5ndGhMaXN0KFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQsIFNWR0xlbmd0
aExpc3QqIGxpc3QsIFZlY3RvcjxmbG9hdD4mIGZsb2F0VmFsdWVzLCBpbnQgdGV4dENvbnRlbnRM
ZW5ndGgpCi17Ci0gICAgQVNTRVJUKGxlbmd0aENvbnRleHQpOwotICAgIEFTU0VSVChsaXN0KTsK
LSAgICBBU1NFUlQodGV4dENvbnRlbnRMZW5ndGggPj0gMCk7CisgICAgICAgIEFTU0VSVCh2YWx1
ZXNQb2ludGVyKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzID0gKnZhbHVl
c1BvaW50ZXI7CisgICAgICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbnQgbGVuZ3RoID0gbGlz
dC0+bnVtYmVyT2ZJdGVtcygpOwotICAgIGlmIChsZW5ndGggPiB0ZXh0Q29udGVudExlbmd0aCkK
LSAgICAgICAgbGVuZ3RoID0gdGV4dENvbnRlbnRMZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIHBv
c2l0aW9uID0gYXRDaGFyYWN0ZXIgLSBzY29wZS50ZXh0Q29udGVudFN0YXJ0OworICAgICAgICBp
ZiAocG9zaXRpb24gPj0gdmFsdWVzLnNpemUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBTVkdMZW5ndGgg
bGVuZ3RoKGxpc3QtPmdldEl0ZW0oaSwgZWMpKTsKLSAgICAgICAgQVNTRVJUKCFlYyk7Ci0gICAg
ICAgIGZsb2F0VmFsdWVzLmFwcGVuZChsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCkpOworICAg
ICAgICByZXR1cm4gdmFsdWVzLmF0KHBvc2l0aW9uKTsKICAgICB9Ci19CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBleHRyYWN0RmxvYXRWYWx1ZXNGcm9tU1ZHTnVtYmVyTGlzdChTVkdOdW1iZXJMaXN0
KiBsaXN0LCBWZWN0b3I8ZmxvYXQ+JiBmbG9hdFZhbHVlcywgaW50IHRleHRDb250ZW50TGVuZ3Ro
KQotewotICAgIEFTU0VSVChsaXN0KTsKLSAgICBBU1NFUlQodGV4dENvbnRlbnRMZW5ndGggPj0g
MCk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbnQgbGVuZ3RoID0gbGlzdC0+
bnVtYmVyT2ZJdGVtcygpOwotICAgIGlmIChsZW5ndGggPiB0ZXh0Q29udGVudExlbmd0aCkKLSAg
ICAgICAgbGVuZ3RoID0gdGV4dENvbnRlbnRMZW5ndGg7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGZsb2F0IGxlbmd0aChsaXN0LT5nZXRJdGVtKGks
IGVjKSk7Ci0gICAgICAgIEFTU0VSVCghZWMpOwotICAgICAgICBmbG9hdFZhbHVlcy5hcHBlbmQo
bGVuZ3RoKTsKLSAgICB9CisgICAgcmV0dXJuIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0
eVZhbHVlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCog
c3ZnVGV4dFBvc2l0aW9uaW5nRWxlbWVudEZvcklubGluZVJlbmRlcmVyKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCit2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YXNzaWduTGF5
b3V0QXR0cmlidXRlc0ZvckNoYXJhY3RlcihTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgYXR0cmli
dXRlcywgU1ZHVGV4dE1ldHJpY3MmIG1ldHJpY3MsIHVuc2lnbmVkIHZhbHVlTGlzdFBvc2l0aW9u
KSBjb25zdAogewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgQVNTRVJUKHJlbmRlcmVyLT5p
c1NWR1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbmxpbmUoKSk7Ci0KLSAgICBOb2RlKiBub2Rl
ID0gcmVuZGVyZXItPm5vZGUoKTsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUt
PmlzU1ZHRWxlbWVudCgpKTsKLQotICAgIGlmICghbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6
dGV4dFRhZykKLSAgICAgJiYgIW5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRzcGFuVGFnKQot
I2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICYmICFub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVz
OjphbHRHbHlwaFRhZykKLSNlbmRpZgotICAgICAmJiAhbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1l
czo6dHJlZlRhZykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihub2RlKTsKKyAgICBhdHRyaWJ1dGVzLnhWYWx1
ZXMoKS5hcHBlbmQobmV4dExheW91dFZhbHVlKFhWYWx1ZSwgdmFsdWVMaXN0UG9zaXRpb24pKTsK
KyAgICBhdHRyaWJ1dGVzLnlWYWx1ZXMoKS5hcHBlbmQobmV4dExheW91dFZhbHVlKFlWYWx1ZSwg
dmFsdWVMaXN0UG9zaXRpb24pKTsKKyAgICBhdHRyaWJ1dGVzLmR4VmFsdWVzKCkuYXBwZW5kKG5l
eHRMYXlvdXRWYWx1ZShEeFZhbHVlLCB2YWx1ZUxpc3RQb3NpdGlvbikpOworICAgIGF0dHJpYnV0
ZXMuZHlWYWx1ZXMoKS5hcHBlbmQobmV4dExheW91dFZhbHVlKER5VmFsdWUsIHZhbHVlTGlzdFBv
c2l0aW9uKSk7CisgICAgYXR0cmlidXRlcy5yb3RhdGVWYWx1ZXMoKS5hcHBlbmQobmV4dExheW91
dFZhbHVlKFJvdGF0ZVZhbHVlLCB2YWx1ZUxpc3RQb3NpdGlvbikpOworICAgIGF0dHJpYnV0ZXMu
dGV4dE1ldHJpY3NWYWx1ZXMoKS5hcHBlbmQobWV0cmljcyk7CiB9CiAKLXZvaWQgU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZExheW91dFNjb3BlKExheW91dFNjb3BlJiBzY29w
ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgdW5zaWduZWQgdGV4dENvbnRlbnRTdGFydCwgdW5z
aWduZWQgdGV4dENvbnRlbnRMZW5ndGgpCit2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVp
bGRlcjo6YXNzaWduRW1wdHlMYXlvdXRBdHRyaWJ1dGVzRm9yQ2hhcmFjdGVyKFNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKSBjb25zdAogewotICAgIEFTU0VSVChyZW5kZXJlcik7
Ci0gICAgQVNTRVJUKHJlbmRlcmVyLT5zdHlsZSgpKTsKLQotICAgIHNjb3BlLmlzVmVydGljYWxX
cml0aW5nTW9kZSA9IGlzVmVydGljYWxXcml0aW5nTW9kZShyZW5kZXJlci0+c3R5bGUoKS0+c3Zn
U3R5bGUoKSk7Ci0gICAgc2NvcGUudGV4dENvbnRlbnRTdGFydCA9IHRleHRDb250ZW50U3RhcnQ7
Ci0gICAgc2NvcGUudGV4dENvbnRlbnRMZW5ndGggPSB0ZXh0Q29udGVudExlbmd0aDsKLQotICAg
IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqIGVsZW1lbnQgPSBzdmdUZXh0UG9zaXRpb25pbmdF
bGVtZW50Rm9ySW5saW5lUmVuZGVyZXIocmVuZGVyZXIpOwotICAgIGlmICghZWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMg
PSBzY29wZS5hdHRyaWJ1dGVzOwotICAgIGV4dHJhY3RGbG9hdFZhbHVlc0Zyb21TVkdMZW5ndGhM
aXN0KGVsZW1lbnQsIGVsZW1lbnQtPngoKSwgYXR0cmlidXRlcy54VmFsdWVzKCksIHRleHRDb250
ZW50TGVuZ3RoKTsKLSAgICBleHRyYWN0RmxvYXRWYWx1ZXNGcm9tU1ZHTGVuZ3RoTGlzdChlbGVt
ZW50LCBlbGVtZW50LT55KCksIGF0dHJpYnV0ZXMueVZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0
aCk7Ci0gICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR0xlbmd0aExpc3QoZWxlbWVudCwgZWxl
bWVudC0+ZHgoKSwgYXR0cmlidXRlcy5keFZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0aCk7Ci0g
ICAgZXh0cmFjdEZsb2F0VmFsdWVzRnJvbVNWR0xlbmd0aExpc3QoZWxlbWVudCwgZWxlbWVudC0+
ZHkoKSwgYXR0cmlidXRlcy5keVZhbHVlcygpLCB0ZXh0Q29udGVudExlbmd0aCk7Ci0gICAgZXh0
cmFjdEZsb2F0VmFsdWVzRnJvbVNWR051bWJlckxpc3QoZWxlbWVudC0+cm90YXRlKCksIGF0dHJp
YnV0ZXMucm90YXRlVmFsdWVzKCksIHRleHRDb250ZW50TGVuZ3RoKTsKKyAgICBhdHRyaWJ1dGVz
LnhWYWx1ZXMoKS5hcHBlbmQoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSk7
CisgICAgYXR0cmlidXRlcy55VmFsdWVzKCkuYXBwZW5kKFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
OjplbXB0eVZhbHVlKCkpOworICAgIGF0dHJpYnV0ZXMuZHhWYWx1ZXMoKS5hcHBlbmQoU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSk7CisgICAgYXR0cmlidXRlcy5keVZhbHVl
cygpLmFwcGVuZChTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKTsKKyAgICBh
dHRyaWJ1dGVzLnJvdGF0ZVZhbHVlcygpLmFwcGVuZChTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6
ZW1wdHlWYWx1ZSgpKTsKKyAgICAvLyBUaGlzIGRvZXNuJ3QgYWRkIGFuIGVtcHR5IHZhbHVlIHRv
IHRleHRNZXRyaWNzVmFsdWVzKCkgb24gcHVycG9zZSEKIH0KIAogfQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
aAkocmV2aXNpb24gNjg4NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXNCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDE3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclNW
R0lubGluZVRleHQ7CiBjbGFzcyBSZW5kZXJTVkdUZXh0OwogCisvLyBTVkdUZXh0TGF5b3V0QXR0
cmlidXRlc0J1aWxkZXIgcGVyZm9ybXMgdGhlIGZpcnN0IGxheW91dCBwaGFzZSBmb3IgU1ZHIHRl
eHQuCisvLworLy8gSXQgZXh0cmFjdHMgdGhlIHgveS9keC9keS9yb3RhdGUgdmFsdWVzIGZyb20g
dGhlIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnRzIGluIHRoZSBET00sCisvLyBtZWFzdXJlcyBh
bGwgY2hhcmFjdGVycyBpbiB0aGUgUmVuZGVyU1ZHVGV4dCBzdWJ0cmVlIGFuZCBleHRyYWN0cyBr
ZXJuaW5nL2xpZ2F0dXJlIGluZm9ybWF0aW9uLgorLy8gVGhlc2UgdmFsdWVzIGFyZSBwcm9wYWdh
dGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIFJlbmRlclNWR0lubGluZVRleHQgcmVuZGVyZXJzLgor
Ly8gVGhlIGZpcnN0IGxheW91dCBwaGFzZSBvbmx5IGV4dHJhY3RzIHRoZSByZWxldmFudCBpbmZv
cm1hdGlvbiBuZWVkZWQgaW4gUmVuZGVyQmxvY2tMaW5lTGF5b3V0CisvLyB0byBjcmVhdGUgdGhl
IElubGluZUJveCB0cmVlIGJhc2VkIG9uIHRleHQgY2h1bmsgYm91bmRhcmllcyAmIEJpRGkgaW5m
b3JtYXRpb24uCisvLyBUaGUgc2Vjb25kIGxheW91dCBwaGFzZSBpcyBjYXJyaWVkIG91dCBieSBT
VkdUZXh0TGF5b3V0RW5naW5lLgorCiBjbGFzcyBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxk
ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIFNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzQnVpbGRlcigpOwpAQCAtMzgsMjcgKzQ2LDM1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgc3RydWN0IExheW91dFNjb3BlIHsKICAgICAgICAgTGF5b3V0U2NvcGUoKQotICAgICAgICAg
ICAgOiBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoZmFsc2UpCi0gICAgICAgICAgICAsIHRleHRDb250
ZW50U3RhcnQoMCkKKyAgICAgICAgICAgIDogdGV4dENvbnRlbnRTdGFydCgwKQogICAgICAgICAg
ICAgLCB0ZXh0Q29udGVudExlbmd0aCgwKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAg
ICBib29sIGlzVmVydGljYWxXcml0aW5nTW9kZTsKICAgICAgICAgdW5zaWduZWQgdGV4dENvbnRl
bnRTdGFydDsKICAgICAgICAgdW5zaWduZWQgdGV4dENvbnRlbnRMZW5ndGg7CiAgICAgICAgIFNW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CiAgICAgfTsKIAotICAgIHZvaWQgYnVp
bGRMYXlvdXRTY29wZXMoUmVuZGVyT2JqZWN0KiwgdW5zaWduZWQmIGF0Q2hhcmFjdGVyKTsKLSAg
ICB2b2lkIGJ1aWxkTGF5b3V0U2NvcGUoTGF5b3V0U2NvcGUmLCBSZW5kZXJPYmplY3QqLCB1bnNp
Z25lZCB0ZXh0Q29udGVudFN0YXJ0LCB1bnNpZ25lZCB0ZXh0Q29udGVudExlbmd0aCk7Ci0gICAg
dm9pZCBidWlsZExheW91dEF0dHJpYnV0ZXNGcm9tU2NvcGVzKCk7Ci0gICAgdm9pZCBwcm9wYWdh
dGVMYXlvdXRBdHRyaWJ1dGVzKFJlbmRlck9iamVjdCosIHVuc2lnbmVkJiBhdENoYXJhY3Rlcik7
Ci0gICAgdm9pZCBtZWFzdXJlQ2hhcmFjdGVycyhSZW5kZXJTVkdJbmxpbmVUZXh0KiwgU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXMmKTsKKyAgICB2b2lkIGJ1aWxkTGF5b3V0U2NvcGUoTGF5b3V0U2Nv
cGUmLCBSZW5kZXJPYmplY3QqLCB1bnNpZ25lZCB0ZXh0Q29udGVudFN0YXJ0LCB1bnNpZ25lZCB0
ZXh0Q29udGVudExlbmd0aCkgY29uc3Q7CisgICAgdm9pZCBidWlsZExheW91dFNjb3BlcyhSZW5k
ZXJPYmplY3QqLCB1bnNpZ25lZCYgYXRDaGFyYWN0ZXIsIFVDaGFyJiBsYXN0Q2hhcmFjdGVyKTsK
KyAgICB2b2lkIGJ1aWxkT3V0ZXJtb3N0TGF5b3V0U2NvcGUoUmVuZGVyU1ZHVGV4dCosIHVuc2ln
bmVkIHRleHRMZW5ndGgpOworICAgIHZvaWQgcHJvcGFnYXRlTGF5b3V0QXR0cmlidXRlcyhSZW5k
ZXJPYmplY3QqLCB1bnNpZ25lZCYgYXRDaGFyYWN0ZXIsIFVDaGFyJiBsYXN0Q2hhcmFjdGVyKSBj
b25zdDsKKworICAgIGVudW0gTGF5b3V0VmFsdWVUeXBlIHsKKyAgICAgICAgWFZhbHVlLAorICAg
ICAgICBZVmFsdWUsCisgICAgICAgIER4VmFsdWUsCisgICAgICAgIER5VmFsdWUsCisgICAgICAg
IFJvdGF0ZVZhbHVlCisgICAgfTsKKworICAgIGZsb2F0IG5leHRMYXlvdXRWYWx1ZShMYXlvdXRW
YWx1ZVR5cGUsIHVuc2lnbmVkIGF0Q2hhcmFjdGVyKSBjb25zdDsKKyAgICB2b2lkIGFzc2lnbkxh
eW91dEF0dHJpYnV0ZXNGb3JDaGFyYWN0ZXIoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMmLCBTVkdU
ZXh0TWV0cmljcyYsIHVuc2lnbmVkIHZhbHVlTGlzdFBvc2l0aW9uKSBjb25zdDsKKyAgICB2b2lk
IGFzc2lnbkVtcHR5TGF5b3V0QXR0cmlidXRlc0ZvckNoYXJhY3RlcihTVkdUZXh0TGF5b3V0QXR0
cmlidXRlcyYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxMYXlvdXRTY29wZT4gbV9z
Y29wZXM7Ci0gICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRFbmdpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1Nzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShT
VkcpCisjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZS5oIgorCisjaW5jbHVkZSAiUmVuZGVy
U1ZHSW5saW5lVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCisjaW5jbHVk
ZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKKyNpbmNsdWRl
ICJTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZy5oIgorCisvLyBTZXQgdG8gYSB2YWx1ZSA+IDAgdG8gZHVtcCB0aGUgdGV4
dCBmcmFnbWVudHMKKyNkZWZpbmUgRFVNUF9URVhUX0ZSQUdNRU5UUyAwCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU1ZHVGV4dExheW91dEVuZ2luZTo6U1ZHVGV4dExheW91dEVuZ2luZSgpCisg
ICAgOiBtX3goMCkKKyAgICAsIG1feSgwKQorICAgICwgbV9keCgwKQorICAgICwgbV9keSgwKQor
ICAgICwgbV9pc1ZlcnRpY2FsVGV4dChmYWxzZSkKKyAgICAsIG1faW5QYXRoTGF5b3V0KGZhbHNl
KQorICAgICwgbV90ZXh0UGF0aExlbmd0aCgwKQorICAgICwgbV90ZXh0UGF0aEN1cnJlbnRPZmZz
ZXQoMCkKKyAgICAsIG1fdGV4dFBhdGhTcGFjaW5nKDApCisgICAgLCBtX3RleHRQYXRoU2NhbGlu
ZygxKQoreworfQorCit2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OnVwZGF0ZUNoYXJhY2VyUG9z
aXRpb25JZk5lZWRlZChmbG9hdCYgeCwgZmxvYXQmIHkpCit7CisgICAgaWYgKG1faW5QYXRoTGF5
b3V0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZXBsYWNlIGNoYXJhY3RlcnMgeC95IHBv
c2l0aW9uLCB3aXRoIHRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24gcGx1cyBhbnkKKyAgICAvLyBy
ZWxhdGl2ZSBhZGp1c3RtZW50cywgaWYgaXQgZG9lc24ndCBzcGVjaWZ5IGFuIGFic29sdXRlIHBv
c2l0aW9uIGl0c2VsZi4KKyAgICBpZiAoeCA9PSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1w
dHlWYWx1ZSgpKSAKKyAgICAgICAgeCA9IG1feCArIG1fZHg7CisKKyAgICBpZiAoeSA9PSBTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQorICAgICAgICB5ID0gbV95ICsgbV9k
eTsKKworICAgIG1fZHggPSAwOworICAgIG1fZHkgPSAwOworfQorCit2b2lkIFNWR1RleHRMYXlv
dXRFbmdpbmU6OnVwZGF0ZUN1cnJlbnRUZXh0UG9zaXRpb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgZ2x5cGhBZHZhbmNlKQoreworICAgIC8vIFVwZGF0ZSBjdXJyZW50IHRleHQgcG9zaXRpb24g
YWZ0ZXIgcHJvY2Vzc2luZyB0aGUgY2hhcmFjdGVyLgorICAgIGlmIChtX2lzVmVydGljYWxUZXh0
KSB7CisgICAgICAgIG1feCA9IHg7CisgICAgICAgIG1feSA9IHkgKyBnbHlwaEFkdmFuY2U7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV94ID0geCArIGdseXBoQWR2YW5jZTsKKyAgICAgICAgbV95
ID0geTsKKyAgICB9Cit9CisKK3ZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6dXBkYXRlUmVsYXRp
dmVQb3NpdGlvbkFkanVzdG1lbnRzSWZOZWVkZWQoVmVjdG9yPGZsb2F0PiYgZHhWYWx1ZXMsIFZl
Y3RvcjxmbG9hdD4mIGR5VmFsdWVzLCB1bnNpZ25lZCBwb3NpdGlvbkxpc3RPZmZzZXQpCit7Cisg
ICAgLy8gVXBkYXRlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uLgorICAgIGlmIChk
eFZhbHVlcy5pc0VtcHR5KCkgJiYgZHlWYWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBmbG9hdCBkeCA9IDA7CisgICAgaWYgKCFkeFZhbHVlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZmxvYXQmIGR4Q3VycmVudCA9IGR4VmFsdWVzLmF0KHBvc2l0aW9uTGlzdE9mZnNldCk7
CisgICAgICAgIGlmIChkeEN1cnJlbnQgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5
VmFsdWUoKSkKKyAgICAgICAgICAgIGR4ID0gZHhDdXJyZW50OworICAgIH0KKworICAgIGZsb2F0
IGR5ID0gMDsKKyAgICBpZiAoIWR5VmFsdWVzLmlzRW1wdHkoKSkgeworICAgICAgICBmbG9hdCYg
ZHlDdXJyZW50ID0gZHlWYWx1ZXMuYXQocG9zaXRpb25MaXN0T2Zmc2V0KTsKKyAgICAgICAgaWYg
KGR5Q3VycmVudCAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQorICAg
ICAgICAgICAgZHkgPSBkeUN1cnJlbnQ7CisgICAgfQorCisgICAgaWYgKG1faW5QYXRoTGF5b3V0
KSB7CisgICAgICAgIGlmIChtX2lzVmVydGljYWxUZXh0KSB7CisgICAgICAgICAgICBtX2R4ICs9
IGR4OworICAgICAgICAgICAgbV9keSA9IGR5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbV9keCA9IGR4OworICAgICAgICAgICAgbV9keSArPSBkeTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2R4ID0gZHg7CisgICAgbV9keSA9IGR5OworfQor
Cit2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OnJlY29yZFRleHRGcmFnbWVudChTVkdJbmxpbmVU
ZXh0Qm94KiB0ZXh0Qm94LCBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0LCB1bnNpZ25lZCBwb3Np
dGlvbkxpc3RPZmZzZXQsIGNvbnN0IFNWR1RleHRNZXRyaWNzJiBsYXN0Q2hhcmFjdGVyTWV0cmlj
cykKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudFRleHRGcmFnbWVudC5sZW5ndGgpOworCisgICAg
Ly8gRmlndXJlIG91dCBsZW5ndGggb2YgZnJhZ21lbnQuCisgICAgbV9jdXJyZW50VGV4dEZyYWdt
ZW50Lmxlbmd0aCA9IHBvc2l0aW9uTGlzdE9mZnNldCAtIG1fY3VycmVudFRleHRGcmFnbWVudC5w
b3NpdGlvbkxpc3RPZmZzZXQ7CisKKyAgICAvLyBGaWd1cmUgb3V0IGZyYWdtZW50IG1ldHJpY3Mu
CisgICAgaWYgKG1fY3VycmVudFRleHRGcmFnbWVudC5sZW5ndGggPT0gMSkgeworICAgICAgICAv
LyBGYXN0IHBhdGgsIGNhbiByZWx5IG9uIGFscmVhZHkgY29tcHV0ZWQgcGVyLWNoYXJhY3RlciBt
ZXRyaWNzLgorICAgICAgICBtX2N1cnJlbnRUZXh0RnJhZ21lbnQud2lkdGggPSBsYXN0Q2hhcmFj
dGVyTWV0cmljcy53aWR0aCgpOworICAgICAgICBtX2N1cnJlbnRUZXh0RnJhZ21lbnQuaGVpZ2h0
ID0gbGFzdENoYXJhY3Rlck1ldHJpY3MuaGVpZ2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gTmVlZCB0byBtZWFzdXJlIHRoZSB3aG9sZSByYW5nZSAocmFuZ2UgbWV0cmljcyAhPSBzdW0g
b2YgY2hhcmFjdGVyIG1ldHJpY3MpCisgICAgICAgIFNWR1RleHRNZXRyaWNzIG1ldHJpY3MgPSBT
VkdUZXh0TWV0cmljczo6bWVhc3VyZUNoYXJhY3RlclJhbmdlKHRleHQsIG1fY3VycmVudFRleHRG
cmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQsIG1fY3VycmVudFRleHRGcmFnbWVudC5sZW5ndGgp
OworICAgICAgICBtX2N1cnJlbnRUZXh0RnJhZ21lbnQud2lkdGggPSBtZXRyaWNzLndpZHRoKCk7
CisgICAgICAgIG1fY3VycmVudFRleHRGcmFnbWVudC5oZWlnaHQgPSBtZXRyaWNzLmhlaWdodCgp
OworICAgIH0KKworICAgIHRleHRCb3gtPnRleHRGcmFnbWVudHMoKS5hcHBlbmQobV9jdXJyZW50
VGV4dEZyYWdtZW50KTsKKyAgICBtX2N1cnJlbnRUZXh0RnJhZ21lbnQgPSBTVkdUZXh0RnJhZ21l
bnQoKTsKK30KKworYm9vbCBTVkdUZXh0TGF5b3V0RW5naW5lOjpwYXJlbnREZWZpbmVzVGV4dExl
bmd0aChSZW5kZXJPYmplY3QqIHBhcmVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmplY3QqIGN1
cnJlbnRQYXJlbnQgPSBwYXJlbnQ7CisgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnQpIHsKKyAgICAg
ICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50KiB0ZXh0Q29udGVudEVsZW1lbnQgPSBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OmVsZW1lbnRGcm9tUmVuZGVyZXIoY3VycmVudFBhcmVudCk7CisgICAgICAg
IGlmICh0ZXh0Q29udGVudEVsZW1lbnQpIHsKKyAgICAgICAgICAgIFNWR1RleHRDb250ZW50RWxl
bWVudDo6U1ZHTGVuZ3RoQWRqdXN0VHlwZSBsZW5ndGhBZGp1c3QgPSBzdGF0aWNfY2FzdDxTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFkanVzdFR5cGU+KHRleHRDb250ZW50RWxlbWVu
dC0+bGVuZ3RoQWRqdXN0KCkpOworICAgICAgICAgICAgaWYgKGxlbmd0aEFkanVzdCA9PSBTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVTVF9TUEFDSU5HICYmIHRleHRDb250ZW50RWxl
bWVudC0+dGV4dExlbmd0aCgpLnZhbHVlKHRleHRDb250ZW50RWxlbWVudCkgPiAwKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnJlbnRQ
YXJlbnQtPmlzU1ZHVGV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50LT5wYXJlbnQoKTsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU1ZHVGV4
dExheW91dEVuZ2luZTo6YmVnaW5UZXh0UGF0aExheW91dChSZW5kZXJPYmplY3QqIG9iamVjdCwg
U1ZHVGV4dExheW91dEVuZ2luZSYgbGluZUxheW91dCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsK
KworICAgIG1faW5QYXRoTGF5b3V0ID0gdHJ1ZTsKKyAgICBSZW5kZXJTVkdUZXh0UGF0aCogdGV4
dFBhdGggPSB0b1JlbmRlclNWR1RleHRQYXRoKG9iamVjdCk7CisKKyAgICBtX3RleHRQYXRoID0g
dGV4dFBhdGgtPmxheW91dFBhdGgoKTsKKyAgICBtX3RleHRQYXRoU3RhcnRPZmZzZXQgPSB0ZXh0
UGF0aC0+c3RhcnRPZmZzZXQoKTsKKyAgICBtX3RleHRQYXRoTGVuZ3RoID0gbV90ZXh0UGF0aC5s
ZW5ndGgoKTsKKyAgICBpZiAobV90ZXh0UGF0aFN0YXJ0T2Zmc2V0ID4gMCAmJiBtX3RleHRQYXRo
U3RhcnRPZmZzZXQgPD0gMSkKKyAgICAgICAgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0ICo9IG1fdGV4
dFBhdGhMZW5ndGg7CisKKyAgICBmbG9hdCB0b3RhbExlbmd0aCA9IDA7CisgICAgdW5zaWduZWQg
dG90YWxDaGFyYWN0ZXJzID0gMDsKKworICAgIGxpbmVMYXlvdXQubV9jaHVua0xheW91dEJ1aWxk
ZXIuYnVpbGRUZXh0Q2h1bmtzKGxpbmVMYXlvdXQubV9saW5lTGF5b3V0Qm94ZXMpOworICAgIGNv
bnN0IFZlY3RvcjxTVkdUZXh0Q2h1bms+JiB0ZXh0Q2h1bmtzID0gbGluZUxheW91dC5tX2NodW5r
TGF5b3V0QnVpbGRlci50ZXh0Q2h1bmtzKCk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGV4dENo
dW5rcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBjb25zdCBTVkdUZXh0Q2h1bmsmIGNodW5rID0gdGV4dENodW5rcy5hdChpKTsKKwor
ICAgICAgICBmbG9hdCBsZW5ndGggPSAwOworICAgICAgICB1bnNpZ25lZCBjaGFyYWN0ZXJzID0g
MDsKKyAgICAgICAgY2h1bmsuY2FsY3VsYXRlTGVuZ3RoKGxlbmd0aCwgY2hhcmFjdGVycyk7CisK
KyAgICAgICAgLy8gSGFuZGxlIHRleHQtYW5jaG9yIGFzIGFkZGl0aW9uYWwgc3RhcnQgb2Zmc2V0
IGZvciB0ZXh0IHBhdGhzLgorICAgICAgICBtX3RleHRQYXRoU3RhcnRPZmZzZXQgKz0gY2h1bmsu
Y2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0KGxlbmd0aCk7CisKKyAgICAgICAgdG90YWxMZW5ndGgg
Kz0gbGVuZ3RoOworICAgICAgICB0b3RhbENoYXJhY3RlcnMgKz0gY2hhcmFjdGVyczsKKyAgICB9
CisKKyAgICBtX3RleHRQYXRoQ3VycmVudE9mZnNldCA9IG1fdGV4dFBhdGhTdGFydE9mZnNldDsK
KworICAgIC8vIEV2ZW50dWFsbHkgaGFuZGxlIHRleHRMZW5ndGggYWRqdXN0bWVudHMuCisgICAg
U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpTVkdMZW5ndGhBZGp1c3RUeXBlIGxlbmd0aEFkanVzdCA9
IFNWR1RleHRDb250ZW50RWxlbWVudDo6TEVOR1RIQURKVVNUX1VOS05PV047CisgICAgZmxvYXQg
ZGVzaXJlZFRleHRMZW5ndGggPSAwOworCisgICAgaWYgKFNWR1RleHRDb250ZW50RWxlbWVudCog
dGV4dENvbnRlbnRFbGVtZW50ID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjplbGVtZW50RnJvbVJl
bmRlcmVyKHRleHRQYXRoKSkgeworICAgICAgICBsZW5ndGhBZGp1c3QgPSBzdGF0aWNfY2FzdDxT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFkanVzdFR5cGU+KHRleHRDb250ZW50RWxl
bWVudC0+bGVuZ3RoQWRqdXN0KCkpOworICAgICAgICBkZXNpcmVkVGV4dExlbmd0aCA9IHRleHRD
b250ZW50RWxlbWVudC0+dGV4dExlbmd0aCgpLnZhbHVlKHRleHRDb250ZW50RWxlbWVudCk7Cisg
ICAgfQorCisgICAgaWYgKCFkZXNpcmVkVGV4dExlbmd0aCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGxlbmd0aEFkanVzdCA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVT
VF9TUEFDSU5HKQorICAgICAgICBtX3RleHRQYXRoU3BhY2luZyA9IChkZXNpcmVkVGV4dExlbmd0
aCAtIHRvdGFsTGVuZ3RoKSAvIHRvdGFsQ2hhcmFjdGVyczsKKyAgICBlbHNlCisgICAgICAgIG1f
dGV4dFBhdGhTY2FsaW5nID0gZGVzaXJlZFRleHRMZW5ndGggLyB0b3RhbExlbmd0aDsKK30KKwor
dm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjplbmRUZXh0UGF0aExheW91dCgpCit7CisgICAgbV9p
blBhdGhMYXlvdXQgPSBmYWxzZTsKKyAgICBtX3RleHRQYXRoID0gUGF0aCgpOworICAgIG1fdGV4
dFBhdGhMZW5ndGggPSAwOworICAgIG1fdGV4dFBhdGhTdGFydE9mZnNldCA9IDA7CisgICAgbV90
ZXh0UGF0aEN1cnJlbnRPZmZzZXQgPSAwOworICAgIG1fdGV4dFBhdGhTcGFjaW5nID0gMDsKKyAg
ICBtX3RleHRQYXRoU2NhbGluZyA9IDE7Cit9CisKK3ZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6
bGF5b3V0SW5saW5lVGV4dEJveChTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94KQoreworICAgIEFT
U0VSVCh0ZXh0Qm94KTsKKworICAgIFJlbmRlclNWR0lubGluZVRleHQqIHRleHQgPSB0b1JlbmRl
clNWR0lubGluZVRleHQodGV4dEJveC0+dGV4dFJlbmRlcmVyKCkpOworICAgIEFTU0VSVCh0ZXh0
KTsKKyAgICBBU1NFUlQodGV4dC0+cGFyZW50KCkpOworICAgIEFTU0VSVCh0ZXh0LT5wYXJlbnQo
KS0+bm9kZSgpKTsKKyAgICBBU1NFUlQodGV4dC0+cGFyZW50KCktPm5vZGUoKS0+aXNTVkdFbGVt
ZW50KCkpOworCisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUoKTsK
KyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgdGV4dEJveC0+Y2xlYXJUZXh0RnJhZ21lbnRzKCk7
CisgICAgbV9pc1ZlcnRpY2FsVGV4dCA9IHN0eWxlLT5zdmdTdHlsZSgpLT5pc1ZlcnRpY2FsV3Jp
dGluZ01vZGUoKTsKKyAgICBsYXlvdXRUZXh0T25MaW5lT3JQYXRoKHRleHRCb3gsIHRleHQsIHN0
eWxlKTsKKworICAgIGlmIChtX2luUGF0aExheW91dCkgeworICAgICAgICBtX3BhdGhMYXlvdXRC
b3hlcy5hcHBlbmQodGV4dEJveCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2xp
bmVMYXlvdXRCb3hlcy5hcHBlbmQodGV4dEJveCk7Cit9CisKK3ZvaWQgU1ZHVGV4dExheW91dEVu
Z2luZTo6ZmluaXNoTGF5b3V0KCkKK3sKKyAgICAvLyBBZnRlciBhbGwgdGV4dCBmcmFnbWVudHMg
YXJlIHN0b3JlZCBpbiB0aGVpciBjb3JyZXBzb25kaW5nIFNWR0lubGluZVRleHRCb3hlcywgd2Ug
Y2FuIGxheW91dCBpbmRpdmlkdWFsIHRleHQgY2h1bmtzLgorICAgIC8vIENodW5rIGxheW91dGlu
ZyBpcyBvbmx5IHBlcmZvcm1lZCBmb3IgbGluZSBsYXlvdXQgYm94ZXMsIG5vdCBmb3IgcGF0aCBs
YXlvdXQsIHdoZXJlIGl0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4KKyAgICBtX2NodW5rTGF5b3V0
QnVpbGRlci5sYXlvdXRUZXh0Q2h1bmtzKG1fbGluZUxheW91dEJveGVzKTsKKworICAgIC8vIEZp
bmFsaXplIHRyYW5zZm9ybSBtYXRyaWNlcywgYWZ0ZXIgdGhlIGNodW5rIGxheW91dCBjb3JyZWN0
aW9ucyBoYXZlIGJlZW4gYXBwbGllZCwgYW5kIGFsbCBmcmFnbWVudCB4L3kgcG9zaXRpb25zIGFy
ZSBmaW5hbGl6ZWQuCisgICAgaWYgKCFtX2xpbmVMYXlvdXRCb3hlcy5pc0VtcHR5KCkpIHsKKyNp
ZiBEVU1QX1RFWFRfRlJBR01FTlRTID4gMAorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxpbmUg
bGF5b3V0OiAiKTsKKyNlbmRpZgorCisgICAgICAgIGZpbmFsaXplVHJhbnNmb3JtTWF0cmljZXMo
bV9saW5lTGF5b3V0Qm94ZXMpOworICAgIH0KKworICAgIGlmICghbV9wYXRoTGF5b3V0Qm94ZXMu
aXNFbXB0eSgpKSB7CisjaWYgRFVNUF9URVhUX0ZSQUdNRU5UUyA+IDAKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJQYXRoIGxheW91dDogIik7CisjZW5kaWYKKyAgICAgICAgZmluYWxpemVUcmFu
c2Zvcm1NYXRyaWNlcyhtX3BhdGhMYXlvdXRCb3hlcyk7CisgICAgfQorfQorCit2b2lkIFNWR1Rl
eHRMYXlvdXRFbmdpbmU6OmZpbmFsaXplVHJhbnNmb3JtTWF0cmljZXMoVmVjdG9yPFNWR0lubGlu
ZVRleHRCb3gqPiYgYm94ZXMpCit7CisgICAgdW5zaWduZWQgYm94Q291bnQgPSBib3hlcy5zaXpl
KCk7CisKKyNpZiBEVU1QX1RFWFRfRlJBR01FTlRTID4gMAorICAgIGZwcmludGYoc3RkZXJyLCAi
RHVtcGluZyBhbGwgdGV4dCBmcmFnbWVudHMgaW4gdGV4dCBzdWIgdHJlZSwgJWkgYm94ZXNcbiIs
IGJveENvdW50KTsKKworICAgIGZvciAodW5zaWduZWQgYm94UG9zaXRpb24gPSAwOyBib3hQb3Np
dGlvbiA8IGJveENvdW50OyArK2JveFBvc2l0aW9uKSB7CisgICAgICAgIFNWR0lubGluZVRleHRC
b3gqIHRleHRCb3ggPSBib3hlcy5hdChib3hQb3NpdGlvbik7CisgICAgICAgIFZlY3RvcjxTVkdU
ZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94LT50ZXh0RnJhZ21lbnRzKCk7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiLT4gQm94ICVpOiBEdW1waW5nIHRleHQgZnJhZ21lbnRzIGZv
ciBTVkdJbmxpbmVUZXh0Qm94LCB0ZXh0Qm94PSVwLCB0ZXh0UmVuZGVyZXI9JXBcbiIsIGJveFBv
c2l0aW9uLCB0ZXh0Qm94LCB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKSk7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiICAgICAgICB0ZXh0Qm94IHByb3BlcnRpZXMsIHN0YXJ0PSVpLCBsZW49JWlc
biIsIHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKTsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICIgICB0ZXh0UmVuZGVyZXIgcHJvcGVydGllcywgdGV4dExlbmd0aD0laVxuIiwgdGV4
dEJveC0+dGV4dFJlbmRlcmVyKCktPnRleHRMZW5ndGgoKSk7CisKKyAgICAgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+Y2hhcmFjdGVycygpOwor
CisgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50Q291bnQgPSBmcmFnbWVudHMuc2l6ZSgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRDb3VudDsgKytpKSB7CisgICAg
ICAgICAgICBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAg
ICAgICAgICAgU3RyaW5nIGZyYWdtZW50U3RyaW5nKGNoYXJhY3RlcnMgKyBmcmFnbWVudC5wb3Np
dGlvbkxpc3RPZmZzZXQsIGZyYWdtZW50Lmxlbmd0aCk7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAgICAtPiBGcmFnbWVudCAlaSwgeD0lbGYsIHk9JWxmLCB3aWR0aD0lbGYsIGhlaWdo
dD0lbGYsIHBvc2l0aW9uTGlzdE9mZnNldD0laSwgbGVuZ3RoPSVpLCBjaGFyYWN0ZXJzPSclcydc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpLCBmcmFnbWVudC54LCBmcmFnbWVudC55
LCBmcmFnbWVudC53aWR0aCwgZnJhZ21lbnQuaGVpZ2h0LCBmcmFnbWVudC5wb3NpdGlvbkxpc3RP
ZmZzZXQsIGZyYWdtZW50Lmxlbmd0aCwgZnJhZ21lbnRTdHJpbmcudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworCisgICAgaWYgKCFib3hDb3VudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHRleHRCb3hUcmFuc2Zvcm1hdGlvbjsKKyAg
ICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRpb24gPCBib3hDb3VudDsg
Kytib3hQb3NpdGlvbikgeworICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gYm94
ZXMuYXQoYm94UG9zaXRpb24pOworICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJh
Z21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOworCisgICAgICAgIHVuc2lnbmVkIGZy
YWdtZW50Q291bnQgPSBmcmFnbWVudHMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZnJhZ21lbnRDb3VudDsgKytpKSB7CisgICAgICAgICAgICBTVkdUZXh0RnJhZ21l
bnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICAgICAgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0gPSBmcmFnbWVudC50cmFuc2Zvcm07CisgICAgICAgICAgICBpZiAoIXRy
YW5zZm9ybS5pc0lkZW50aXR5KCkpIHsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlUmlnaHQoZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CisgICAgICAgICAgICAgICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZSgtZnJhZ21lbnQueCwgLWZyYWdtZW50LnkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBtX2NodW5rTGF5b3V0QnVpbGRlci50cmFuc2Zvcm1hdGlvbkZvclRleHRC
b3godGV4dEJveCwgdGV4dEJveFRyYW5zZm9ybWF0aW9uKTsKKyAgICAgICAgICAgIGlmICh0ZXh0
Qm94VHJhbnNmb3JtYXRpb24uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAg
ICAgICB0cmFuc2Zvcm0gPSB0ZXh0Qm94VHJhbnNmb3JtYXRpb247CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm11bHRpcGx5KHRleHRCb3hUcmFuc2Zvcm1hdGlv
bik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib3hlcy5jbGVhcigpOworfQorCit2b2lkIFNW
R1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpbmVPclBhdGgoU1ZHSW5saW5lVGV4dEJv
eCogdGV4dEJveCwgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlKQoreworICAgIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQgPSBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4odGV4dC0+cGFyZW50KCktPm5vZGUoKSk7CisgICAgCisgICAgUmVuZGVyT2Jq
ZWN0KiB0ZXh0UGFyZW50ID0gdGV4dC0+cGFyZW50KCk7CisgICAgYm9vbCBkZWZpbmVzVGV4dExl
bmd0aCA9IHRleHRQYXJlbnQgPyBwYXJlbnREZWZpbmVzVGV4dExlbmd0aCh0ZXh0UGFyZW50KSA6
IGZhbHNlOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2
Z1N0eWxlKCk7CisgICAgQVNTRVJUKHN2Z1N0eWxlKTsKKworICAgIFNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzID0gdGV4dC0+bGF5b3V0QXR0cmlidXRlcygpOworICAgIFZlY3Rv
cjxmbG9hdD4mIHhWYWx1ZXMgPSBhdHRyaWJ1dGVzLnhWYWx1ZXMoKTsKKyAgICBWZWN0b3I8Zmxv
YXQ+JiB5VmFsdWVzID0gYXR0cmlidXRlcy55VmFsdWVzKCk7CisgICAgVmVjdG9yPGZsb2F0PiYg
ZHhWYWx1ZXMgPSBhdHRyaWJ1dGVzLmR4VmFsdWVzKCk7CisgICAgVmVjdG9yPGZsb2F0PiYgZHlW
YWx1ZXMgPSBhdHRyaWJ1dGVzLmR5VmFsdWVzKCk7CisgICAgVmVjdG9yPGZsb2F0PiYgcm90YXRl
VmFsdWVzID0gYXR0cmlidXRlcy5yb3RhdGVWYWx1ZXMoKTsKKyAgICBWZWN0b3I8U1ZHVGV4dE1l
dHJpY3M+JiB0ZXh0TWV0cmljc1ZhbHVlcyA9IGF0dHJpYnV0ZXMudGV4dE1ldHJpY3NWYWx1ZXMo
KTsKKworICAgIHVuc2lnbmVkIGJveFN0YXJ0ID0gdGV4dEJveC0+c3RhcnQoKTsKKyAgICB1bnNp
Z25lZCBib3hMZW5ndGggPSB0ZXh0Qm94LT5sZW4oKTsKKyAgICB1bnNpZ25lZCB0ZXh0TWV0cmlj
c1NpemUgPSB0ZXh0TWV0cmljc1ZhbHVlcy5zaXplKCk7CisgICAgQVNTRVJUKHRleHRNZXRyaWNz
U2l6ZSA8PSB4VmFsdWVzLnNpemUoKSk7CisgICAgQVNTRVJUKHRleHRNZXRyaWNzU2l6ZSA8PSB5
VmFsdWVzLnNpemUoKSk7CisgICAgQVNTRVJUKHhWYWx1ZXMuc2l6ZSgpID09IHlWYWx1ZXMuc2l6
ZSgpKTsKKworICAgIGlmIChib3hMZW5ndGggPiB0ZXh0TWV0cmljc1NpemUpCisgICAgICAgIHRl
eHRNZXRyaWNzU2l6ZSA9IGJveExlbmd0aDsgCisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbkxpc3RP
ZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIG1ldHJpY3NMaXN0T2Zmc2V0ID0gMDsKKyAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHQtPmNoYXJhY3RlcnMoKTsKKworICAgIGNvbnN0IEZv
bnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
IHNwYWNpbmdMYXlvdXQoZm9udCk7CisgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lIGJh
c2VsaW5lTGF5b3V0KGZvbnQpOworCisgICAgYm9vbCBkaWRTdGFydFRleHRGcmFnbWVudCA9IGZh
bHNlOworICAgIGJvb2wgYXBwbHlTcGFjaW5nVG9OZXh0Q2hhcmFjdGVyID0gZmFsc2U7CisKKyAg
ICBmbG9hdCBsYXN0QW5nbGUgPSAwOworICAgIGZsb2F0IGJhc2VsaW5lU2hpZnQgPSBiYXNlbGlu
ZUxheW91dC5jYWxjdWxhdGVCYXNlbGluZVNoaWZ0KHN2Z1N0eWxlLCBsZW5ndGhDb250ZXh0KTsK
KyAgICBiYXNlbGluZVNoaWZ0IC09IGJhc2VsaW5lTGF5b3V0LmNhbGN1bGF0ZUFsaWdubWVudEJh
c2VsaW5lU2hpZnQobV9pc1ZlcnRpY2FsVGV4dCwgdGV4dCk7CisKKyAgICAvLyBNYWluIGxheW91
dCBhbGdvcml0aG0uCisgICAgdW5zaWduZWQgcG9zaXRpb25MaXN0U2l6ZSA9IHhWYWx1ZXMuc2l6
ZSgpOworICAgIGZvciAoOyBtZXRyaWNzTGlzdE9mZnNldCA8IHRleHRNZXRyaWNzU2l6ZSAmJiBw
b3NpdGlvbkxpc3RPZmZzZXQgPCBwb3NpdGlvbkxpc3RTaXplOyArK21ldHJpY3NMaXN0T2Zmc2V0
KSB7CisgICAgICAgIFNWR1RleHRNZXRyaWNzJiBtZXRyaWNzID0gdGV4dE1ldHJpY3NWYWx1ZXMu
YXQobWV0cmljc0xpc3RPZmZzZXQpOworICAgICAgICAvLyBBZHZhbmNlIHRvIHRleHQgYm94IHN0
YXJ0IGxvY2F0aW9uLgorICAgICAgICBpZiAocG9zaXRpb25MaXN0T2Zmc2V0IDwgYm94U3RhcnQp
IHsKKyAgICAgICAgICAgIHBvc2l0aW9uTGlzdE9mZnNldCArPSBtZXRyaWNzLmxlbmd0aCgpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdG9wIGlmIHdl
J3ZlIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhpcyB0ZXh0IGJveC4KKyAgICAgICAgaWYgKHBvc2l0
aW9uTGlzdE9mZnNldCA+PSBib3hTdGFydCArIGJveExlbmd0aCkKKyAgICAgICAgICAgIGJyZWFr
OworIAorICAgICAgICBmbG9hdCB4ID0geFZhbHVlcy5hdChwb3NpdGlvbkxpc3RPZmZzZXQpOwor
ICAgICAgICBmbG9hdCB5ID0geVZhbHVlcy5hdChwb3NpdGlvbkxpc3RPZmZzZXQpOworCisgICAg
ICAgIC8vIFdoZW4gd2UndmUgYWR2YW5jZWQgdG8gdGhlIGJveCBzdGFydCBvZmZzZXQsIGRldGVy
bWluZSB1c2luZyB0aGUgb3JpZ2luYWwgeC95IHZhbHVlcywKKyAgICAgICAgLy8gd2hldGVyIHRo
aXMgY2hhcmFjdGVyIHN0YXJ0cyBhIG5ldyB0ZXh0IGNodW5rLCBiZWZvcmUgZG9pbmcgYW55IGZ1
cnRoZXIgcHJvY2Vzc2luZy4KKyAgICAgICAgaWYgKHBvc2l0aW9uTGlzdE9mZnNldCA9PSBib3hT
dGFydCkKKyAgICAgICAgICAgIHRleHRCb3gtPnNldFN0YXJ0c05ld1RleHRDaHVuayh0ZXh0LT5j
aGFyYWN0ZXJTdGFydHNOZXdUZXh0Q2h1bmsoYm94U3RhcnQpKTsKKworICAgICAgICBpZiAobWV0
cmljcyA9PSBTVkdUZXh0TWV0cmljczo6ZW1wdHlNZXRyaWNzKCkpIHsKKyAgICAgICAgICAgIHBv
c2l0aW9uTGlzdE9mZnNldCArPSBtZXRyaWNzLmxlbmd0aCgpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlciA9
IGNoYXJhY3RlcnMgKyBwb3NpdGlvbkxpc3RPZmZzZXQ7CisgICAgICAgIGZsb2F0IGFuZ2xlID0g
MDsKKyAgICAgICAgaWYgKCFyb3RhdGVWYWx1ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBm
bG9hdCBuZXdBbmdsZSA9IHJvdGF0ZVZhbHVlcy5hdChwb3NpdGlvbkxpc3RPZmZzZXQpOworICAg
ICAgICAgICAgaWYgKG5ld0FuZ2xlICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZh
bHVlKCkpCisgICAgICAgICAgICAgICAgYW5nbGUgPSBuZXdBbmdsZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIENhbGN1bGF0ZSBnbHlwaCBvcmllbnRhdGlvbiBhbmdsZS4KKyAgICAgICAgZmxv
YXQgb3JpZW50YXRpb25BbmdsZSA9IGJhc2VsaW5lTGF5b3V0LmNhbGN1bGF0ZUdseXBoT3JpZW50
YXRpb25BbmdsZShtX2lzVmVydGljYWxUZXh0LCBzdmdTdHlsZSwgKmN1cnJlbnRDaGFyYWN0ZXIp
OworCisgICAgICAgIC8vIENhbGN1bGF0ZSBnbHlwaCBhZHZhbmNlICYgeC95IG9yaWVudGF0aW9u
IHNoaWZ0cy4KKyAgICAgICAgZmxvYXQgeE9yaWVudGF0aW9uU2hpZnQgPSAwOworICAgICAgICBm
bG9hdCB5T3JpZW50YXRpb25TaGlmdCA9IDA7CisgICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZSA9
IGJhc2VsaW5lTGF5b3V0LmNhbGN1bGF0ZUdseXBoQWR2YW5jZUFuZE9yaWVudGF0aW9uKG1faXNW
ZXJ0aWNhbFRleHQsIG1ldHJpY3MsIG9yaWVudGF0aW9uQW5nbGUsIHhPcmllbnRhdGlvblNoaWZ0
LCB5T3JpZW50YXRpb25TaGlmdCk7CisKKyAgICAgICAgLy8gQXNzaWduIGN1cnJlbnQgdGV4dCBw
b3NpdGlvbiB0byB4L3kgdmFsdWVzLCBpZiBuZWVkZWQuCisgICAgICAgIHVwZGF0ZUNoYXJhY2Vy
UG9zaXRpb25JZk5lZWRlZCh4LCB5KTsKKworICAgICAgICAvLyBBcHBseSBkeC9keSB2YWx1ZSBh
ZGp1c3RtZW50cyB0byBjdXJyZW50IHRleHQgcG9zaXRpb24sIGlmIG5lZWRlZC4KKyAgICAgICAg
dXBkYXRlUmVsYXRpdmVQb3NpdGlvbkFkanVzdG1lbnRzSWZOZWVkZWQoZHhWYWx1ZXMsIGR5VmFs
dWVzLCBwb3NpdGlvbkxpc3RPZmZzZXQpOworCisgICAgICAgIC8vIENhbGN1bGF0ZSBTVkcgRm9u
dHMga2VybmluZywgaWYgbmVlZGVkLgorICAgICAgICBmbG9hdCBrZXJuaW5nID0gc3BhY2luZ0xh
eW91dC5jYWxjdWxhdGVTVkdLZXJuaW5nKG1faXNWZXJ0aWNhbFRleHQsIG1ldHJpY3MuZ2x5cGgo
KSk7CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIENTUyAna2VybmluZycsICdsZXR0ZXItc3BhY2lu
ZycgYW5kICd3b3JkLXNwYWNpbmcnIGZvciBuZXh0IGNoYXJhY3RlciwgaWYgbmVlZGVkLgorICAg
ICAgICBmbG9hdCBzcGFjaW5nID0gc3BhY2luZ0xheW91dC5jYWxjdWxhdGVDU1NLZXJuaW5nQW5k
U3BhY2luZyhzdmdTdHlsZSwgbGVuZ3RoQ29udGV4dCwgY3VycmVudENoYXJhY3Rlcik7CisKKyAg
ICAgICAgZmxvYXQgdGV4dFBhdGhPZmZzZXQgPSAwOworICAgICAgICBpZiAobV9pblBhdGhMYXlv
dXQpIHsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlZEdseXBoQWR2YW5jZSA9IGdseXBoQWR2YW5j
ZSAqIG1fdGV4dFBhdGhTY2FsaW5nOworICAgICAgICAgICAgaWYgKG1faXNWZXJ0aWNhbFRleHQp
IHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGFic29sdXRlIHkgcG9zaXRpb24g
YXZhaWxhYmxlLCBpdCBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IHBvc2l0aW9uIGFsb25n
IHRoZSBwYXRoLgorICAgICAgICAgICAgICAgIGlmICh5ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzOjplbXB0eVZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fdGV4dFBhdGhDdXJyZW50
T2Zmc2V0ID0geSArIG1fdGV4dFBhdGhTdGFydE9mZnNldDsKKworICAgICAgICAgICAgICAgIG1f
dGV4dFBhdGhDdXJyZW50T2Zmc2V0ICs9IG1fZHkgLSBrZXJuaW5nOworICAgICAgICAgICAgICAg
IG1fZHkgPSAwOworCisgICAgICAgICAgICAgICAgLy8gQXBwbHkgZHgvZHkgY29ycmVjdGlvbiBh
bmQgc2V0dXAgdHJhbnNsYXRpb25zIHRoYXQgbW92ZSB0byB0aGUgZ2x5cGggbWlkcG9pbnQuCisg
ICAgICAgICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgKz0gbV9keCArIGJhc2VsaW5lU2hpZnQ7
CisgICAgICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgLT0gc2NhbGVkR2x5cGhBZHZhbmNl
IC8gMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUn
cyBhbiBhYnNvbHV0ZSB4IHBvc2l0aW9uIGF2YWlsYWJsZSwgaXQgbWFya3MgdGhlIGJlZ2lubmlu
ZyBvZiBhIG5ldyBwb3NpdGlvbiBhbG9uZyB0aGUgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAo
eCAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQorICAgICAgICAgICAg
ICAgICAgICBtX3RleHRQYXRoQ3VycmVudE9mZnNldCA9IHggKyBtX3RleHRQYXRoU3RhcnRPZmZz
ZXQ7CisKKyAgICAgICAgICAgICAgICBtX3RleHRQYXRoQ3VycmVudE9mZnNldCArPSBtX2R4IC0g
a2VybmluZzsKKyAgICAgICAgICAgICAgICBtX2R4ID0gMDsKKworICAgICAgICAgICAgICAgIC8v
IEFwcGx5IGR4L2R5IGNvcnJlY3Rpb24gYW5kIHNldHVwIHRyYW5zbGF0aW9ucyB0aGF0IG1vdmUg
dG8gdGhlIGdseXBoIG1pZHBvaW50LgorICAgICAgICAgICAgICAgIHhPcmllbnRhdGlvblNoaWZ0
IC09IHNjYWxlZEdseXBoQWR2YW5jZSAvIDI7CisgICAgICAgICAgICAgICAgeU9yaWVudGF0aW9u
U2hpZnQgKz0gbV9keSAtIGJhc2VsaW5lU2hpZnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIENhbGN1bGF0ZSBjdXJyZW50IG9mZnNldCBhbG9uZyBwYXRoLgorICAgICAgICAgICAg
dGV4dFBhdGhPZmZzZXQgPSBtX3RleHRQYXRoQ3VycmVudE9mZnNldCArIHNjYWxlZEdseXBoQWR2
YW5jZSAvIDI7CisKKyAgICAgICAgICAgIC8vIE1vdmUgdG8gbmV4dCBjaGFyYWN0ZXIuCisgICAg
ICAgICAgICBtX3RleHRQYXRoQ3VycmVudE9mZnNldCArPSBzY2FsZWRHbHlwaEFkdmFuY2UgKyBt
X3RleHRQYXRoU3BhY2luZyArIHNwYWNpbmcgKiBtX3RleHRQYXRoU2NhbGluZzsKKworICAgICAg
ICAgICAgLy8gU2tpcCBjaGFyYWN0ZXIsIGlmIHdlJ3JlIGJlZm9yZSB0aGUgcGF0aC4KKyAgICAg
ICAgICAgIGlmICh0ZXh0UGF0aE9mZnNldCA8IDApIHsKKyAgICAgICAgICAgICAgICBwb3NpdGlv
bkxpc3RPZmZzZXQgKz0gbWV0cmljcy5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3RvcCBwcm9jZXNzaW5nLCBpZiB0
aGUgbmV4dCBjaGFyYWN0ZXIgbGllcyBiZWhpbmQgdGhlIHBhdGguCisgICAgICAgICAgICBpZiAo
dGV4dFBhdGhPZmZzZXQgPiBtX3RleHRQYXRoTGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBib29sIG9rID0gZmFsc2U7CisgICAgICAgICAgICBGbG9hdFBvaW50
IHBvaW50ID0gbV90ZXh0UGF0aC5wb2ludEF0TGVuZ3RoKHRleHRQYXRoT2Zmc2V0LCBvayk7Cisg
ICAgICAgICAgICBBU1NFUlQob2spOworCisgICAgICAgICAgICB4ID0gcG9pbnQueCgpOworICAg
ICAgICAgICAgeSA9IHBvaW50LnkoKTsKKyAgICAgICAgICAgIGFuZ2xlID0gbV90ZXh0UGF0aC5u
b3JtYWxBbmdsZUF0TGVuZ3RoKHRleHRQYXRoT2Zmc2V0LCBvayk7CisgICAgICAgICAgICBBU1NF
UlQob2spOworCisgICAgICAgICAgICAvLyBGb3IgdmVydGljYWwgdGV4dCBvbiBwYXRoLCB0aGUg
YWN0dWFsIGFuZ2xlIGhhcyB0byBiZSByb3RhdGVkIDkwIGRlZ3JlZXMgYW50aS1jbG9ja3dpc2Us
IG5vdCB0aGUgb3JpZW50YXRpb24gYW5nbGUhCisgICAgICAgICAgICBpZiAobV9pc1ZlcnRpY2Fs
VGV4dCkKKyAgICAgICAgICAgICAgICBhbmdsZSAtPSA5MDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIEFwcGx5IGFsbCBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgc2hpZnQgdmFsdWVz
LgorICAgICAgICAgICAgaWYgKG1faXNWZXJ0aWNhbFRleHQpIHsKKyAgICAgICAgICAgICAgICB4
ICs9IGJhc2VsaW5lU2hpZnQ7CisgICAgICAgICAgICAgICAgeSAtPSBrZXJuaW5nOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB4IC09IGtlcm5pbmc7CisgICAgICAgICAg
ICAgICAgeSAtPSBiYXNlbGluZVNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB4
ICs9IG1fZHg7CisgICAgICAgICAgICB5ICs9IG1fZHk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBEZXRlcm1pbmUgd2hldGVyIHdlIGhhdmUgdG8gc3RhcnQgYSBuZXcgZnJhZ21lbnQuCisgICAg
ICAgIGJvb2wgc2hvdWxkU3RhcnROZXdGcmFnbWVudCA9IGZhbHNlOworCisgICAgICAgIGlmICht
X2R4IHx8IG1fZHkpCisgICAgICAgICAgICBzaG91bGRTdGFydE5ld0ZyYWdtZW50ID0gdHJ1ZTsK
KworICAgICAgICBpZiAoIXNob3VsZFN0YXJ0TmV3RnJhZ21lbnQgJiYgKG1faXNWZXJ0aWNhbFRl
eHQgfHwgbV9pblBhdGhMYXlvdXQpKQorICAgICAgICAgICAgc2hvdWxkU3RhcnROZXdGcmFnbWVu
dCA9IHRydWU7CisKKyAgICAgICAgaWYgKCFzaG91bGRTdGFydE5ld0ZyYWdtZW50ICYmIChhbmds
ZSB8fCBhbmdsZSAhPSBsYXN0QW5nbGUgfHwgb3JpZW50YXRpb25BbmdsZSkpCisgICAgICAgICAg
ICBzaG91bGRTdGFydE5ld0ZyYWdtZW50ID0gdHJ1ZTsKKworICAgICAgICBpZiAoIXNob3VsZFN0
YXJ0TmV3RnJhZ21lbnQgJiYgKGtlcm5pbmcgfHwgYXBwbHlTcGFjaW5nVG9OZXh0Q2hhcmFjdGVy
IHx8IGRlZmluZXNUZXh0TGVuZ3RoKSkKKyAgICAgICAgICAgIHNob3VsZFN0YXJ0TmV3RnJhZ21l
bnQgPSB0cnVlOworCisgICAgICAgIC8vIElmIHdlIGFscmVhZHkgc3RhcnRlZCBhIGZyYWdtZW50
LCBjbG9zZSBpdCBub3cuCisgICAgICAgIGlmIChkaWRTdGFydFRleHRGcmFnbWVudCAmJiBzaG91
bGRTdGFydE5ld0ZyYWdtZW50KSB7CisgICAgICAgICAgICBhcHBseVNwYWNpbmdUb05leHRDaGFy
YWN0ZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHJlY29yZFRleHRGcmFnbWVudCh0ZXh0Qm94LCB0
ZXh0LCBwb3NpdGlvbkxpc3RPZmZzZXQsIHRleHRNZXRyaWNzVmFsdWVzLmF0KG1ldHJpY3NMaXN0
T2Zmc2V0IC0gMSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRXZlbnR1YWxseSBzdGFydCBh
IG5ldyBmcmFnbWVudCwgaWYgbm90IHlldCBkb25lLgorICAgICAgICBpZiAoIWRpZFN0YXJ0VGV4
dEZyYWdtZW50IHx8IHNob3VsZFN0YXJ0TmV3RnJhZ21lbnQpIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbV9jdXJyZW50VGV4dEZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCk7CisgICAgICAgICAg
ICBBU1NFUlQoIW1fY3VycmVudFRleHRGcmFnbWVudC5sZW5ndGgpOworCisgICAgICAgICAgICBk
aWRTdGFydFRleHRGcmFnbWVudCA9IHRydWU7CisgICAgICAgICAgICBtX2N1cnJlbnRUZXh0RnJh
Z21lbnQucG9zaXRpb25MaXN0T2Zmc2V0ID0gcG9zaXRpb25MaXN0T2Zmc2V0OworICAgICAgICAg
ICAgbV9jdXJyZW50VGV4dEZyYWdtZW50LnggPSB4OworICAgICAgICAgICAgbV9jdXJyZW50VGV4
dEZyYWdtZW50LnkgPSB5OworCisgICAgICAgICAgICAvLyBCdWlsZCBmcmFnbWVudCB0cmFuc2Zv
cm1hdGlvbi4KKyAgICAgICAgICAgIGlmIChhbmdsZSkKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRUZXh0RnJhZ21lbnQudHJhbnNmb3JtLnJvdGF0ZShhbmdsZSk7CisKKyAgICAgICAgICAgIGlm
ICh4T3JpZW50YXRpb25TaGlmdCB8fCB5T3JpZW50YXRpb25TaGlmdCkKKyAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRUZXh0RnJhZ21lbnQudHJhbnNmb3JtLnRyYW5zbGF0ZSh4T3JpZW50YXRpb25T
aGlmdCwgeU9yaWVudGF0aW9uU2hpZnQpOworCisgICAgICAgICAgICBpZiAob3JpZW50YXRpb25B
bmdsZSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRUZXh0RnJhZ21lbnQudHJhbnNmb3JtLnJv
dGF0ZShvcmllbnRhdGlvbkFuZ2xlKTsKKworICAgICAgICAgICAgaWYgKG1faW5QYXRoTGF5b3V0
ICYmIG1fdGV4dFBhdGhTY2FsaW5nICE9IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9pc1Zl
cnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50LnRy
YW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oMSwgbV90ZXh0UGF0aFNjYWxpbmcpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VGV4dEZyYWdtZW50LnRy
YW5zZm9ybS5zY2FsZU5vblVuaWZvcm0obV90ZXh0UGF0aFNjYWxpbmcsIDEpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVXBkYXRlIGN1cnJlbnQgdGV4dCBwb3NpdGlv
biwgYWZ0ZXIgcHJvY2Vzc2luZyBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgZmluaXNoZWQuCisg
ICAgICAgIGlmIChtX2luUGF0aExheW91dCkKKyAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRUZXh0
UG9zaXRpb24oeCwgeSwgZ2x5cGhBZHZhbmNlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAvLyBBcHBseSBDU1MgJ2tlcm5pbmcnLCAnbGV0dGVyLXNwYWNpbmcnIGFuZCAnd29yZC1zcGFj
aW5nJyB0byBuZXh0IGNoYXJhY3RlciwgaWYgbmVlZGVkLgorICAgICAgICAgICAgaWYgKHNwYWNp
bmcpCisgICAgICAgICAgICAgICAgYXBwbHlTcGFjaW5nVG9OZXh0Q2hhcmFjdGVyID0gdHJ1ZTsK
KworICAgICAgICAgICAgZmxvYXQgeE5ldyA9IHggLSBtX2R4OworICAgICAgICAgICAgZmxvYXQg
eU5ldyA9IHkgLSBtX2R5OworCisgICAgICAgICAgICBpZiAobV9pc1ZlcnRpY2FsVGV4dCkKKyAg
ICAgICAgICAgICAgICB4TmV3IC09IGJhc2VsaW5lU2hpZnQ7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeU5ldyArPSBiYXNlbGluZVNoaWZ0OworCisgICAgICAgICAgICB1cGRh
dGVDdXJyZW50VGV4dFBvc2l0aW9uKHhOZXcsIHlOZXcsIGdseXBoQWR2YW5jZSArIHNwYWNpbmcp
OworICAgICAgICB9CisKKyAgICAgICAgcG9zaXRpb25MaXN0T2Zmc2V0ICs9IG1ldHJpY3MubGVu
Z3RoKCk7CisgICAgICAgIGxhc3RBbmdsZSA9IGFuZ2xlOworICAgIH0KKworICAgIGlmICghZGlk
U3RhcnRUZXh0RnJhZ21lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENsb3NlIGxhc3Qg
b3BlbiBmcmFnbWVudCwgaWYgbmVlZGVkLgorICAgIHJlY29yZFRleHRGcmFnbWVudCh0ZXh0Qm94
LCB0ZXh0LCBwb3NpdGlvbkxpc3RPZmZzZXQsIHRleHRNZXRyaWNzVmFsdWVzLmF0KG1ldHJpY3NM
aXN0T2Zmc2V0IC0gMSkpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdUZXh0
TGF5b3V0RW5naW5lX2gKKyNkZWZpbmUgU1ZHVGV4dExheW91dEVuZ2luZV9oCisKKyNpZiBFTkFC
TEUoU1ZHKQorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJTVkdUZXh0Q2h1bmtCdWlsZGVy
LmgiCisjaW5jbHVkZSAiU1ZHVGV4dEZyYWdtZW50LmgiCisjaW5jbHVkZSAiU1ZHVGV4dE1ldHJp
Y3MuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVuZGVyU3R5bGU7CitjbGFzcyBSZW5kZXJTVkdJ
bmxpbmVUZXh0OworY2xhc3MgU1ZHRWxlbWVudDsKK2NsYXNzIFNWR0lubGluZVRleHRCb3g7Citj
bGFzcyBTVkdSZW5kZXJTdHlsZTsKKworLy8gU1ZHVGV4dExheW91dEVuZ2luZSBwZXJmb3JtcyB0
aGUgc2Vjb25kIGxheW91dCBwaGFzZSBmb3IgU1ZHIHRleHQuCisvLworLy8gVGhlIElubGluZUJv
eCB0cmVlIHdhcyBjcmVhdGVkLCBjb250YWluaW5nIHRoZSB0ZXh0IGNodW5rIGluZm9ybWF0aW9u
LCBuZWNlc3NhcnkgdG8gYXBwbHkKKy8vIGNlcnRhaW4gU1ZHIHNwZWNpZmljIHRleHQgbGF5b3V0
IHByb3BlcnRpZXMgKHRleHQtbGVuZ3RoIGFkanVzdG1lbnRzIGFuZCB0ZXh0LWFuY2hvcikuCisv
LyBUaGUgc2Vjb25kIGxheW91dCBwaGFzZSB1c2VzIHRoZSBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
cyBzdG9yZWQgaW4gdGhlIGluZGl2aWR1YWwKKy8vIFJlbmRlclNWR0lubGluZVRleHQgcmVuZGVy
ZXJzIHRvIGNvbXB1dGUgdGhlIGZpbmFsIHBvc2l0aW9ucyBmb3IgZWFjaCBjaGFyYWN0ZXIKKy8v
IHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIFNWR0lubGluZVRleHRCb3ggb2JqZWN0cy4KKworY2xh
c3MgU1ZHVGV4dExheW91dEVuZ2luZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6Cisg
ICAgU1ZHVGV4dExheW91dEVuZ2luZSgpOworICAgIFNWR1RleHRDaHVua0J1aWxkZXImIGNodW5r
TGF5b3V0QnVpbGRlcigpIHsgcmV0dXJuIG1fY2h1bmtMYXlvdXRCdWlsZGVyOyB9CisKKyAgICB2
b2lkIGJlZ2luVGV4dFBhdGhMYXlvdXQoUmVuZGVyT2JqZWN0KiwgU1ZHVGV4dExheW91dEVuZ2lu
ZSYgbGluZUxheW91dCk7CisgICAgdm9pZCBlbmRUZXh0UGF0aExheW91dCgpOworCisgICAgdm9p
ZCBsYXlvdXRJbmxpbmVUZXh0Qm94KFNWR0lubGluZVRleHRCb3gqKTsKKyAgICB2b2lkIGZpbmlz
aExheW91dCgpOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlQ2hhcmFjZXJQb3NpdGlvbklm
TmVlZGVkKGZsb2F0JiB4LCBmbG9hdCYgeSk7CisgICAgdm9pZCB1cGRhdGVDdXJyZW50VGV4dFBv
c2l0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGdseXBoQWR2YW5jZSk7CisgICAgdm9pZCB1
cGRhdGVSZWxhdGl2ZVBvc2l0aW9uQWRqdXN0bWVudHNJZk5lZWRlZChWZWN0b3I8ZmxvYXQ+JiBk
eFZhbHVlcywgVmVjdG9yPGZsb2F0PiYgZHlWYWx1ZXMsIHVuc2lnbmVkIHZhbHVlTGlzdFBvc2l0
aW9uKTsKKworICAgIHZvaWQgcmVjb3JkVGV4dEZyYWdtZW50KFNWR0lubGluZVRleHRCb3gqLCBS
ZW5kZXJTVkdJbmxpbmVUZXh0KiwgdW5zaWduZWQgcG9zaXRpb25MaXN0T2Zmc2V0LCBjb25zdCBT
VkdUZXh0TWV0cmljcyYgbGFzdENoYXJhY3Rlck1ldHJpY3MpOworICAgIGJvb2wgcGFyZW50RGVm
aW5lc1RleHRMZW5ndGgoUmVuZGVyT2JqZWN0KikgY29uc3Q7CisKKyAgICB2b2lkIGxheW91dFRl
eHRPbkxpbmVPclBhdGgoU1ZHSW5saW5lVGV4dEJveCosIFJlbmRlclNWR0lubGluZVRleHQqLCBj
b25zdCBSZW5kZXJTdHlsZSopOworICAgIHZvaWQgZmluYWxpemVUcmFuc2Zvcm1NYXRyaWNlcyhW
ZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+Jik7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFNWR0lu
bGluZVRleHRCb3gqPiBtX2xpbmVMYXlvdXRCb3hlczsKKyAgICBWZWN0b3I8U1ZHSW5saW5lVGV4
dEJveCo+IG1fcGF0aExheW91dEJveGVzOworICAgIFNWR1RleHRDaHVua0J1aWxkZXIgbV9jaHVu
a0xheW91dEJ1aWxkZXI7CisKKyAgICBTVkdUZXh0RnJhZ21lbnQgbV9jdXJyZW50VGV4dEZyYWdt
ZW50OworICAgIGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7CisgICAgZmxvYXQgbV9keDsKKyAg
ICBmbG9hdCBtX2R5OworICAgIGJvb2wgbV9pc1ZlcnRpY2FsVGV4dDsKKyAgICBib29sIG1faW5Q
YXRoTGF5b3V0OworCisgICAgLy8gVGV4dCBvbiBwYXRoIGxheW91dAorICAgIFBhdGggbV90ZXh0
UGF0aDsKKyAgICBmbG9hdCBtX3RleHRQYXRoTGVuZ3RoOworICAgIGZsb2F0IG1fdGV4dFBhdGhT
dGFydE9mZnNldDsKKyAgICBmbG9hdCBtX3RleHRQYXRoQ3VycmVudE9mZnNldDsKKyAgICBmbG9h
dCBtX3RleHRQYXRoU3BhY2luZzsKKyAgICBmbG9hdCBtX3RleHRQYXRoU2NhbGluZzsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCShyZXZpc2lvbiA2ODg3
NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSwxOSArMjUsMjkgQEAKICNpbmNsdWRlICJJbmxpbmVGbG93Qm94LmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdJbmxpbmVUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgor
I2luY2x1ZGUgIlNWR1RleHRNZXRyaWNzLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgi
CiAKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IC8vIEJhc2Ugc3RydWN0dXJlIGZvciBjYWxsYmFjayB1c2VyIGRhdGEKIHN0cnVjdCBTVkdUZXh0
UXVlcnk6OkRhdGEgewogICAgIERhdGEoKQotICAgICAgICA6IHByb2Nlc3NlZENodW5rQ2hhcmFj
dGVycygwKQorICAgICAgICA6IGlzVmVydGljYWxUZXh0KGZhbHNlKQorICAgICAgICAsIHByb2Nl
c3NlZENoYXJhY3RlcnMoMCkKKyAgICAgICAgLCB0ZXh0UmVuZGVyZXIoMCkKKyAgICAgICAgLCB0
ZXh0Qm94KDApCiAgICAgewogICAgIH0KIAotICAgIHVuc2lnbmVkIHByb2Nlc3NlZENodW5rQ2hh
cmFjdGVyczsKKyAgICBib29sIGlzVmVydGljYWxUZXh0OworICAgIHVuc2lnbmVkIHByb2Nlc3Nl
ZENoYXJhY3RlcnM7CisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyOworICAg
IGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3g7CiB9OwogCiBzdGF0aWMgaW5saW5lIElu
bGluZUZsb3dCb3gqIGZsb3dCb3hGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQpA
QCAtNzAsMTMgKzgwLDE1IEBAIHN0YXRpYyBpbmxpbmUgSW5saW5lRmxvd0JveCogZmxvd0JveEZv
clIKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBtYXBMZW5ndGhUaHJv
dWdoQ2h1bmtUcmFuc2Zvcm1hdGlvbihjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBi
b29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIGZsb2F0IG1h
cExlbmd0aFRocm91Z2hGcmFnbWVudFRyYW5zZm9ybWF0aW9uKGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYgZnJhZ21lbnQsIGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IGxlbmd0aCkKIHsKLSAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSA9IHRleHRCb3gtPmNodW5rVHJhbnNmb3Jt
YXRpb24oKTsKLSAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICBpZiAoZnJhZ21l
bnQudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgcmV0dXJuIGxlbmd0aDsKLSAgICAg
ICAgCi0gICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoc3RhdGljX2Nhc3Q8ZG91Ymxl
PihsZW5ndGgpICogKGlzVmVydGljYWxUZXh0ID8gdHJhbnNmb3JtLmQoKSA6IHRyYW5zZm9ybS5h
KCkpKTsKKworICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgcmV0dXJuIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5ndGgpICogZnJhZ21lbnQudHJh
bnNmb3JtLnlTY2FsZSgpKTsKKworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0
YXRpY19jYXN0PGRvdWJsZT4obGVuZ3RoKSAqIGZyYWdtZW50LnRyYW5zZm9ybS54U2NhbGUoKSk7
CiB9CiAKIFNWR1RleHRRdWVyeTo6U1ZHVGV4dFF1ZXJ5KFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CkBAIC0xMDQsNzQgKzExNiwxMzcgQEAgdm9pZCBTVkdUZXh0UXVlcnk6OmNvbGxlY3RUZXh0Qm94
ZXNJbkZsbwogICAgIH0KIH0KIAotYm9vbCBTVkdUZXh0UXVlcnk6OmV4ZWN1dGVRdWVyeShEYXRh
KiBxdWVyeURhdGEsIFByb2Nlc3NUZXh0Q2h1bmtQYXJ0Q2FsbGJhY2sgY2h1bmtQYXJ0Q2FsbGJh
Y2spIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6ZXhlY3V0ZVF1ZXJ5KERhdGEqIHF1ZXJ5RGF0
YSwgUHJvY2Vzc1RleHRGcmFnbWVudENhbGxiYWNrIGZyYWdtZW50Q2FsbGJhY2spIGNvbnN0CiB7
CiAgICAgQVNTRVJUKCFtX3RleHRCb3hlcy5pc0VtcHR5KCkpOwotICAgIGJvb2wgZmluaXNoZWQg
PSBmYWxzZTsKKworICAgIHVuc2lnbmVkIHByb2Nlc3NlZENoYXJhY3RlcnMgPSAwOworICAgIHVu
c2lnbmVkIHRleHRCb3hDb3VudCA9IG1fdGV4dEJveGVzLnNpemUoKTsKIAogICAgIC8vIExvb3Ag
b3ZlciBhbGwgdGV4dCBib3hlcwotICAgIGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGV4dEJveGVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9y
PFNWR0lubGluZVRleHRCb3gqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RleHRCb3hlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgU1ZHSW5saW5lVGV4dEJveCog
dGV4dEJveCA9ICppdDsKLSAgICAgICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+JiBw
YXJ0cyA9IHRleHRCb3gtPnN2Z1RleHRDaHVua1BhcnRzKCk7Ci0KLSAgICAgICAgaW50IHByb2Nl
c3NlZENoYXJhY3RlcnMgPSAwOwotCi0gICAgICAgIC8vIExvb3Agb3ZlciBhbGwgdGV4dCBjaHVu
ayBwYXJ0cyBpbiB0aGlzIHRleHQgYm94LCBmaXJpbmcgYSBjYWxsYmFjayBmb3IgZWFjaCBjaHVu
ayBwYXJ0LgotICAgICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0
ZXJhdG9yIHBhcnRFbmQgPSBwYXJ0cy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8U1ZHVGV4
dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIHBhcnRJdCA9IHBhcnRzLmJlZ2luKCk7IHBhcnRJ
dCAhPSBwYXJ0RW5kOyArK3BhcnRJdCkgewotICAgICAgICAgICAgaWYgKCh0aGlzLT4qY2h1bmtQ
YXJ0Q2FsbGJhY2spKHF1ZXJ5RGF0YSwgdGV4dEJveCwgKnBhcnRJdCkpIHsKLSAgICAgICAgICAg
ICAgICBmaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9CisgICAgZm9yICh1bnNpZ25lZCB0ZXh0Qm94UG9zaXRpb24gPSAwOyB0ZXh0Qm94UG9zaXRp
b24gPCB0ZXh0Qm94Q291bnQ7ICsrdGV4dEJveFBvc2l0aW9uKSB7CisgICAgICAgIHF1ZXJ5RGF0
YS0+dGV4dEJveCA9IG1fdGV4dEJveGVzLmF0KHRleHRCb3hQb3NpdGlvbik7CisgICAgICAgIHF1
ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHF1ZXJ5RGF0YS0+
dGV4dEJveC0+dGV4dFJlbmRlcmVyKCkpOworICAgICAgICBBU1NFUlQocXVlcnlEYXRhLT50ZXh0
UmVuZGVyZXIpOworICAgICAgICBBU1NFUlQocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXItPnN0eWxl
KCkpOworICAgICAgICBBU1NFUlQocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXItPnN0eWxlKCktPnN2
Z1N0eWxlKCkpOworCisgICAgICAgIHF1ZXJ5RGF0YS0+aXNWZXJ0aWNhbFRleHQgPSBxdWVyeURh
dGEtPnRleHRSZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+aXNWZXJ0aWNhbFdyaXRpbmdN
b2RlKCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMg
PSBxdWVyeURhdGEtPnRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKyAgICAKKyAgICAgICAgLy8g
TG9vcCBvdmVyIGFsbCB0ZXh0IGZyYWdtZW50cyBpbiB0aGlzIHRleHQgYm94LCBmaXJpbmcgYSBj
YWxsYmFjayBmb3IgZWFjaC4KKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRDb3VudCA9IGZyYWdt
ZW50cy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudENv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQg
PSBmcmFnbWVudHMuYXQoaSk7CisgICAgICAgICAgICBpZiAoKHRoaXMtPipmcmFnbWVudENhbGxi
YWNrKShxdWVyeURhdGEsIGZyYWdtZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgICAgICAgICAgcHJvY2Vzc2VkQ2hhcmFjdGVycyArPSBwYXJ0SXQtPmxlbmd0aDsKKyAg
ICAgICAgICAgIHByb2Nlc3NlZENoYXJhY3RlcnMgKz0gZnJhZ21lbnQubGVuZ3RoOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKGZpbmlzaGVkKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgcXVlcnlEYXRhLT5wcm9jZXNzZWRDaHVua0NoYXJhY3RlcnMgKz0gcHJvY2Vzc2VkQ2hhcmFj
dGVyczsKKyAgICAgICAgcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzID0gcHJvY2Vzc2Vk
Q2hhcmFjdGVyczsKICAgICB9CiAKLSAgICByZXR1cm4gZmluaXNoZWQ7CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRBbmRMZW5ndGhJbnRvQ2h1bmtQ
YXJ0Q29vcmRpbmF0ZXMoRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0
ZXh0Qm94LCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0LCBpbnQmIHN0YXJ0UG9zaXRpb24s
IGludCYgZW5kUG9zaXRpb24pIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRFbmRQ
b3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNW
R1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3Np
dGlvbikgY29uc3QKIHsKLSAgICAvLyBSZXVzZSB0aGUgc2FtZSBsb2dpYyB1c2VkIGZvciB0ZXh0
IHNlbGVjdGlvbiAmIHBhaW50aW5nLCB0byBtYXAgb3VyIHF1ZXJ5IHN0YXJ0L2xlbmd0aCBpbnRv
IHN0YXJ0L2VuZFBvc2l0aW9ucyBvZiB0aGUgY3VycmVudCB0ZXh0IGNodW5rIHBhcnQuCi0gICAg
c3RhcnRQb3NpdGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENodW5rQ2hhcmFjdGVyczsKLSAg
ICBlbmRQb3NpdGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENodW5rQ2hhcmFjdGVyczsKLSAg
ICB0ZXh0Qm94LT5tYXBTdGFydEVuZFBvc2l0aW9uc0ludG9DaHVua1BhcnRDb29yZGluYXRlcyhz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgcGFydCk7CisgICAgLy8gUmV1c2UgdGhlIHNhbWUg
bG9naWMgdXNlZCBmb3IgdGV4dCBzZWxlY3Rpb24gJiBwYWludGluZywgdG8gbWFwIG91ciBxdWVy
eSBzdGFydC9sZW5ndGggaW50byBzdGFydC9lbmRQb3NpdGlvbnMgb2YgdGhlIGN1cnJlbnQgdGV4
dCBmcmFnbWVudC4KKyAgICBzdGFydFBvc2l0aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hh
cmFjdGVyczsKKyAgICBlbmRQb3NpdGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3Rl
cnM7CiAKLSAgICAvLyBJZiBzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24sIHRoZW4gdGhlIHBv
c2l0aW9uIHdlJ3JlIHN1cHBvc2VkIHRvIG1lYXN1cmUgbGllcyBpbiB0aGlzIGNodW5rIHBhcnQu
Ci0gICAgcmV0dXJuIHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbjsKKyAgICBpZiAoc3RhcnRQ
b3NpdGlvbiA+PSBlbmRQb3NpdGlvbiB8fCBzdGFydFBvc2l0aW9uIDwgMCB8fCBlbmRQb3NpdGlv
biA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcXVlcnlEYXRhLT50ZXh0
Qm94LT5tYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50
LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhxdWVyeURhdGEs
IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8
IGVuZFBvc2l0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotZmxvYXQgU1ZHVGV4dFF1ZXJ5
OjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzVmVydGljYWxUZXh0LCBpbnQgc3RhcnRQb3NpdGlv
biwgaW50IGxlbmd0aCkgY29uc3QKK3ZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVuZFBv
c2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCBpbnQmIHN0YXJ0UG9z
aXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFZlcnRpY2Fs
IHdyaXRpbmcgbW9kZSBuZWVkcyB0byBiZSBoYW5kbGVkIG1vcmUgYWNjdXJhdGUuCi0gICAgaWYg
KGlzVmVydGljYWxUZXh0KQotICAgICAgICByZXR1cm4gbGVuZ3RoICogc3R5bGUtPmZvbnQoKS5o
ZWlnaHQoKTsKKyAgICBjb25zdCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyYgbGF5b3V0QXR0cmli
dXRlcyA9IHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5sYXlvdXRBdHRyaWJ1dGVzKCk7CisgICAg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgeFZhbHVlcyA9IGxheW91dEF0dHJpYnV0ZXMueFZhbHVlcygp
OworICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0TWV0cmljcz4mIHRleHRNZXRyaWNzVmFsdWVzID0g
bGF5b3V0QXR0cmlidXRlcy50ZXh0TWV0cmljc1ZhbHVlcygpOwogCi0gICAgY29uc3QgVUNoYXIq
IHN0YXJ0Q2hhcmFjdGVyID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPmNoYXJhY3RlcnMoKSAr
IHRleHRCb3gtPnN0YXJ0KCkgKyBzdGFydFBvc2l0aW9uOwotICAgIHJldHVybiBzdHlsZS0+Zm9u
dCgpLmZsb2F0V2lkdGgoc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3goc3RhcnRDaGFyYWN0ZXIs
IGxlbmd0aCwgc3R5bGUsIHRleHRCb3gpKTsKLX0KKyAgICB1bnNpZ25lZCBib3hTdGFydCA9IHF1
ZXJ5RGF0YS0+dGV4dEJveC0+c3RhcnQoKTsKKyAgICB1bnNpZ25lZCBib3hMZW5ndGggPSBxdWVy
eURhdGEtPnRleHRCb3gtPmxlbigpOwogCi0vLyBudW1iZXJPZkNoYXJhY3RlcnMoKSBpbXBsZW1l
bnRhdGlvbgotc3RydWN0IE51bWJlck9mQ2hhcmFjdGVyc0RhdGEgOiBTVkdUZXh0UXVlcnk6OkRh
dGEgewotICAgIE51bWJlck9mQ2hhcmFjdGVyc0RhdGEoKQotICAgICAgICA6IGNoYXJhY3RlcnMo
MCkKLSAgICB7CisgICAgdW5zaWduZWQgdGV4dE1ldHJpY3NPZmZzZXQgPSAwOworICAgIHVuc2ln
bmVkIHRleHRNZXRyaWNzU2l6ZSA9IHRleHRNZXRyaWNzVmFsdWVzLnNpemUoKTsKKworICAgIHVu
c2lnbmVkIHBvc2l0aW9uT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBwb3NpdGlvblNpemUgPSB4
VmFsdWVzLnNpemUoKTsKKworICAgIGJvb2wgYWx0ZXJTdGFydFBvc2l0aW9uID0gdHJ1ZTsKKyAg
ICBib29sIGFsdGVyRW5kUG9zaXRpb24gPSB0cnVlOworCisgICAgaW50IGxhc3RQb3NpdGlvbk9m
ZnNldCA9IC0xOworICAgIGZvciAoOyB0ZXh0TWV0cmljc09mZnNldCA8IHRleHRNZXRyaWNzU2l6
ZSAmJiBwb3NpdGlvbk9mZnNldCA8IHBvc2l0aW9uU2l6ZTsgKyt0ZXh0TWV0cmljc09mZnNldCkg
eworICAgICAgICBjb25zdCBTVkdUZXh0TWV0cmljcyYgbWV0cmljcyA9IHRleHRNZXRyaWNzVmFs
dWVzLmF0KHRleHRNZXRyaWNzT2Zmc2V0KTsKKworICAgICAgICAvLyBBZHZhbmNlIHRvIHRleHQg
Ym94IHN0YXJ0IGxvY2F0aW9uLgorICAgICAgICBpZiAocG9zaXRpb25PZmZzZXQgPCBib3hTdGFy
dCkgeworICAgICAgICAgICAgcG9zaXRpb25PZmZzZXQgKz0gbWV0cmljcy5sZW5ndGgoKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RvcCBpZiB3ZSd2
ZSBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoaXMgdGV4dCBib3guCisgICAgICAgIGlmIChwb3NpdGlv
bk9mZnNldCA+PSBib3hTdGFydCArIGJveExlbmd0aCkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIC8vIElmIHRoZSBzdGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRo
ZSBtZXRyaWNzIGxpc3QsIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgorICAgICAgICBpZiAo
c3RhcnRQb3NpdGlvbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkKKyAgICAg
ICAgICAgIGFsdGVyU3RhcnRQb3NpdGlvbiA9IGZhbHNlOworCisgICAgICAgIC8vIElmIHRoZSBz
dGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBtZXRyaWNzIGxpc3QsIHdl
IGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgorICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gc3Rh
dGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpCisgICAgICAgICAgICBhbHRlckVuZFBvc2l0
aW9uID0gZmFsc2U7CisKKyAgICAgICAgLy8gRGV0ZWN0IGxpZ2F0dXJlcy4KKyAgICAgICAgaWYg
KGxhc3RQb3NpdGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlv
bk9mZnNldCA+IDEpIHsKKyAgICAgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3Rh
cnRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBzdGFydFBvc2l0aW9uIDwgc3RhdGlj
X2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICBzdGFydFBvc2l0
aW9uID0gbGFzdFBvc2l0aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIGFsdGVyU3RhcnRQb3Np
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYWx0ZXJFbmRQ
b3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBlbmRQb3NpdGlv
biA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKSB7CisgICAgICAgICAgICAgICAg
ZW5kUG9zaXRpb24gPSBwb3NpdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBhbHRlckVuZFBv
c2l0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IWFsdGVyU3RhcnRQb3NpdGlvbiAmJiAhYWx0ZXJFbmRQb3NpdGlvbikKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGxhc3RQb3NpdGlvbk9mZnNldCA9IHBvc2l0aW9uT2Zmc2V0OworICAg
ICAgICBwb3NpdGlvbk9mZnNldCArPSBtZXRyaWNzLmxlbmd0aCgpOwogICAgIH0KIAotICAgIHVu
c2lnbmVkIGNoYXJhY3RlcnM7Ci19OworICAgIGlmICghYWx0ZXJTdGFydFBvc2l0aW9uICYmICFh
bHRlckVuZFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5Ojpu
dW1iZXJPZkNoYXJhY3RlcnNDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGlu
ZVRleHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSBjb25zdAorICAgIGlmIChs
YXN0UG9zaXRpb25PZmZzZXQgIT0gLTEgJiYgbGFzdFBvc2l0aW9uT2Zmc2V0IC0gcG9zaXRpb25P
ZmZzZXQgPiAxKSB7CisgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3Np
dGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBzdGFydFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8
aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0
UG9zaXRpb25PZmZzZXQ7CisgICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9u
ID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihw
b3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gcG9zaXRpb25PZmZz
ZXQ7CisgICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKKy8vIG51bWJlck9mQ2hhcmFjdGVycygpIGltcGxlbWVudGF0aW9uCitib29sIFNW
R1RleHRRdWVyeTo6bnVtYmVyT2ZDaGFyYWN0ZXJzQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYpIGNvbnN0CiB7Ci0gICAgTnVtYmVyT2ZDaGFyYWN0ZXJzRGF0YSogZGF0YSA9
IHN0YXRpY19jYXN0PE51bWJlck9mQ2hhcmFjdGVyc0RhdGEqPihxdWVyeURhdGEpOwotICAgIGRh
dGEtPmNoYXJhY3RlcnMgKz0gcGFydC5sZW5ndGg7CisgICAgLy8gbm8tb3AKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTE4MCwzOSArMjU1LDM0IEBAIHVuc2lnbmVkIFNWR1RleHRRdWVyeTo6
bnVtYmVyT2ZDaGFyYWN0ZXIKICAgICBpZiAobV90ZXh0Qm94ZXMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIE51bWJlck9mQ2hhcmFjdGVyc0RhdGEgZGF0YTsKKyAgICBEYXRh
IGRhdGE7CiAgICAgZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpudW1iZXJPZkNo
YXJhY3RlcnNDYWxsYmFjayk7Ci0gICAgcmV0dXJuIGRhdGEuY2hhcmFjdGVyczsKKyAgICByZXR1
cm4gZGF0YS5wcm9jZXNzZWRDaGFyYWN0ZXJzOwogfQogCiAvLyB0ZXh0TGVuZ3RoKCkgaW1wbGVt
ZW50YXRpb24KIHN0cnVjdCBUZXh0TGVuZ3RoRGF0YSA6IFNWR1RleHRRdWVyeTo6RGF0YSB7CiAg
ICAgVGV4dExlbmd0aERhdGEoKQotICAgICAgICA6IHRleHRMZW5ndGgoMC4wZikKKyAgICAgICAg
OiB0ZXh0TGVuZ3RoKDApCiAgICAgewogICAgIH0KIAogICAgIGZsb2F0IHRleHRMZW5ndGg7CiB9
OwogCi1ib29sIFNWR1RleHRRdWVyeTo6dGV4dExlbmd0aENhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0
YSwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFy
dCYgcGFydCkgY29uc3QKK2Jvb2wgU1ZHVGV4dFF1ZXJ5Ojp0ZXh0TGVuZ3RoQ2FsbGJhY2soRGF0
YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdAogewog
ICAgIFRleHRMZW5ndGhEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8VGV4dExlbmd0aERhdGEqPihx
dWVyeURhdGEpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+dGV4dFJlbmRl
cmVyKCktPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIGJvb2wgaXNWZXJ0aWNh
bFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoc3R5bGUtPnN2Z1N0eWxlKCkpOwotICAgIGZs
b2F0IHBhcnRMZW5ndGggPSBpc1ZlcnRpY2FsVGV4dCA/IHBhcnQuaGVpZ2h0IDogcGFydC53aWR0
aDsKLQotICAgIGRhdGEtPnRleHRMZW5ndGggKz0gbWFwTGVuZ3RoVGhyb3VnaENodW5rVHJhbnNm
b3JtYXRpb24odGV4dEJveCwgaXNWZXJ0aWNhbFRleHQsIHBhcnRMZW5ndGgpOworICAgIGZsb2F0
IGZyYWdtZW50TGVuZ3RoID0gcXVlcnlEYXRhLT5pc1ZlcnRpY2FsVGV4dCA/IGZyYWdtZW50Lmhl
aWdodCA6IGZyYWdtZW50LndpZHRoOworICAgIGRhdGEtPnRleHRMZW5ndGggKz0gbWFwTGVuZ3Ro
VGhyb3VnaEZyYWdtZW50VHJhbnNmb3JtYXRpb24oZnJhZ21lbnQsIHF1ZXJ5RGF0YS0+aXNWZXJ0
aWNhbFRleHQsIGZyYWdtZW50TGVuZ3RoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGZsb2F0
IFNWR1RleHRRdWVyeTo6dGV4dExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fdGV4dEJveGVz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgICAgIHJldHVybiAwOwogCiAg
ICAgVGV4dExlbmd0aERhdGEgZGF0YTsKICAgICBleGVjdXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0
UXVlcnk6OnRleHRMZW5ndGhDYWxsYmFjayk7CkBAIC0yMjQsNyArMjk0LDcgQEAgc3RydWN0IFN1
YlN0cmluZ0xlbmd0aERhdGEgOiBTVkdUZXh0UXVlcgogICAgIFN1YlN0cmluZ0xlbmd0aERhdGEo
dW5zaWduZWQgcXVlcnlTdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBxdWVyeUxlbmd0aCkKICAgICAg
ICAgOiBzdGFydFBvc2l0aW9uKHF1ZXJ5U3RhcnRQb3NpdGlvbikKICAgICAgICAgLCBsZW5ndGgo
cXVlcnlMZW5ndGgpCi0gICAgICAgICwgc3ViU3RyaW5nTGVuZ3RoKDAuMGYpCisgICAgICAgICwg
c3ViU3RyaW5nTGVuZ3RoKDApCiAgICAgewogICAgIH0KIApAQCAtMjM0LDI5ICszMDQsMjYgQEAg
c3RydWN0IFN1YlN0cmluZ0xlbmd0aERhdGEgOiBTVkdUZXh0UXVlcgogICAgIGZsb2F0IHN1YlN0
cmluZ0xlbmd0aDsKIH07CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxs
YmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGNv
bnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6c3Vi
U3RyaW5nTGVuZ3RoQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmIGZyYWdtZW50KSBjb25zdAogewogICAgIFN1YlN0cmluZ0xlbmd0aERhdGEqIGRhdGEgPSBz
dGF0aWNfY2FzdDxTdWJTdHJpbmdMZW5ndGhEYXRhKj4ocXVlcnlEYXRhKTsKIAogICAgIGludCBz
dGFydFBvc2l0aW9uID0gZGF0YS0+c3RhcnRQb3NpdGlvbjsKICAgICBpbnQgZW5kUG9zaXRpb24g
PSBzdGFydFBvc2l0aW9uICsgZGF0YS0+bGVuZ3RoOwotICAgIGlmICghbWFwU3RhcnRBbmRMZW5n
dGhJbnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCB0ZXh0Qm94LCBwYXJ0LCBzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCisgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0lu
dG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0
eWxlKTsKLQotICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUo
c3R5bGUtPnN2Z1N0eWxlKCkpOwotICAgIGZsb2F0IHBhcnRMZW5ndGggPSBtZWFzdXJlQ2hhcmFj
dGVyUmFuZ2UodGV4dEJveCwgc3R5bGUsIGlzVmVydGljYWxXcml0aW5nTW9kZShzdHlsZS0+c3Zn
U3R5bGUoKSksIHBhcnQub2Zmc2V0ICsgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFy
dFBvc2l0aW9uKTsKKyAgICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6
Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21lbnQu
cG9zaXRpb25MaXN0T2Zmc2V0ICsgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBv
c2l0aW9uKTsKKyAgICBmbG9hdCBmcmFnbWVudExlbmd0aCA9IHF1ZXJ5RGF0YS0+aXNWZXJ0aWNh
bFRleHQgPyBtZXRyaWNzLmhlaWdodCgpIDogbWV0cmljcy53aWR0aCgpOwogCi0gICAgZGF0YS0+
c3ViU3RyaW5nTGVuZ3RoICs9IG1hcExlbmd0aFRocm91Z2hDaHVua1RyYW5zZm9ybWF0aW9uKHRl
eHRCb3gsIGlzVmVydGljYWxUZXh0LCBwYXJ0TGVuZ3RoKTsKKyAgICBkYXRhLT5zdWJTdHJpbmdM
ZW5ndGggKz0gbWFwTGVuZ3RoVGhyb3VnaEZyYWdtZW50VHJhbnNmb3JtYXRpb24oZnJhZ21lbnQs
IHF1ZXJ5RGF0YS0+aXNWZXJ0aWNhbFRleHQsIGZyYWdtZW50TGVuZ3RoKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIGZsb2F0IFNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVk
IHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAgICBpZiAobV90ZXh0
Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMC4wZjsKKyAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBTdWJTdHJpbmdMZW5ndGhEYXRhIGRhdGEoc3RhcnRQb3NpdGlvbiwgbGVuZ3RoKTsK
ICAgICBleGVjdXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aENh
bGxiYWNrKTsKQEAgLTI3NCwxNyArMzQxLDI5IEBAIHN0cnVjdCBTdGFydFBvc2l0aW9uT2ZDaGFy
YWN0ZXJEYXRhIDogU1YKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9zaXRpb247CiB9OwogCi1ib29s
IFNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVl
cnlEYXRhLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBjb25zdCBTVkdUZXh0Q2h1
bmtQYXJ0JiBwYXJ0KSBjb25zdAorYm9vbCBTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNo
YXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBm
cmFnbWVudCkgY29uc3QKIHsKICAgICBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRh
ID0gc3RhdGljX2Nhc3Q8U3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7
CiAKICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwogICAgIGludCBlbmRQ
b3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwotICAgIGlmICghbWFwU3RhcnRBbmRMZW5ndGhJ
bnRvQ2h1bmtQYXJ0Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCB0ZXh0Qm94LCBwYXJ0LCBzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbikpCisgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9G
cmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgU1ZHQ2hhciYg
Y2hhcmFjdGVyID0gKihwYXJ0LmZpcnN0Q2hhcmFjdGVyICsgc3RhcnRQb3NpdGlvbik7Ci0gICAg
ZGF0YS0+c3RhcnRQb3NpdGlvbiA9IHRleHRCb3gtPmNodW5rVHJhbnNmb3JtYXRpb24oKS5tYXBQ
b2ludChGbG9hdFBvaW50KGNoYXJhY3Rlci54LCBjaGFyYWN0ZXIueSkpOworICAgIGRhdGEtPnN0
YXJ0UG9zaXRpb24gPSBGbG9hdFBvaW50KGZyYWdtZW50LngsIGZyYWdtZW50LnkpOworCisgICAg
aWYgKHN0YXJ0UG9zaXRpb24pIHsKKyAgICAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNW
R1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVy
ZXIsIGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCwgc3RhcnRQb3NpdGlvbik7CisgICAgICAg
IGlmIChxdWVyeURhdGEtPmlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgZGF0YS0+c3RhcnRQ
b3NpdGlvbi5tb3ZlKDAsIG1ldHJpY3MuaGVpZ2h0KCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkYXRhLT5zdGFydFBvc2l0aW9uLm1vdmUobWV0cmljcy53aWR0aCgpLCAwKTsKKyAgICB9
CisKKyAgICBpZiAoZnJhZ21lbnQudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBkYXRhLT5zdGFydFBvc2l0aW9uID0gZnJhZ21lbnQudHJhbnNmb3Jt
Lm1hcFBvaW50KGRhdGEtPnN0YXJ0UG9zaXRpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0zMDksMzAgKzM4OCwyNyBAQCBzdHJ1Y3QgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEgOiBT
VkdUCiAgICAgRmxvYXRQb2ludCBlbmRQb3NpdGlvbjsKIH07CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5
OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBT
VkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSBj
b25zdAorYm9vbCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhE
YXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7
CiAgICAgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFbmRQ
b3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKICAgICBpbnQgc3RhcnRQb3Np
dGlvbiA9IGRhdGEtPnBvc2l0aW9uOwogICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRp
b24gKyAxOwotICAgIGlmICghbWFwU3RhcnRBbmRMZW5ndGhJbnRvQ2h1bmtQYXJ0Q29vcmRpbmF0
ZXMocXVlcnlEYXRhLCB0ZXh0Qm94LCBwYXJ0LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikp
CisgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1
ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgU1ZHQ2hhciYgY2hhcmFjdGVyID0gKihwYXJ0LmZp
cnN0Q2hhcmFjdGVyICsgc3RhcnRQb3NpdGlvbik7Ci0gICAgZGF0YS0+ZW5kUG9zaXRpb24gPSBG
bG9hdFBvaW50KGNoYXJhY3Rlci54LCBjaGFyYWN0ZXIueSk7Ci0KLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBBU1NFUlQoc3R5
bGUpOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShz
dHlsZS0+c3ZnU3R5bGUoKSk7Ci0gICAgZmxvYXQgZ2x5cGhBZHZhbmNlID0gbWVhc3VyZUNoYXJh
Y3RlclJhbmdlKHRleHRCb3gsIHN0eWxlLCBpc1ZlcnRpY2FsVGV4dCwgcGFydC5vZmZzZXQgKyBz
dGFydFBvc2l0aW9uLCAxKTsKKyAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoZnJh
Z21lbnQueCwgZnJhZ21lbnQueSk7CiAKLSAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAg
IGRhdGEtPmVuZFBvc2l0aW9uLm1vdmUoMC4wZiwgZ2x5cGhBZHZhbmNlKTsKKyAgICBTVkdUZXh0
TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShx
dWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0LCBzdGFy
dFBvc2l0aW9uICsgMSk7CisgICAgaWYgKHF1ZXJ5RGF0YS0+aXNWZXJ0aWNhbFRleHQpCisgICAg
ICAgIGRhdGEtPmVuZFBvc2l0aW9uLm1vdmUoMCwgbWV0cmljcy5oZWlnaHQoKSk7CiAgICAgZWxz
ZQotICAgICAgICBkYXRhLT5lbmRQb3NpdGlvbi5tb3ZlKGdseXBoQWR2YW5jZSwgMC4wZik7Cisg
ICAgICAgIGRhdGEtPmVuZFBvc2l0aW9uLm1vdmUobWV0cmljcy53aWR0aCgpLCAwKTsKKworICAg
IGlmIChmcmFnbWVudC50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGRhdGEtPmVuZFBvc2l0aW9uID0gdGV4dEJveC0+Y2h1bmtUcmFuc2Zvcm1hdGlv
bigpLm1hcFBvaW50KGRhdGEtPmVuZFBvc2l0aW9uKTsKKyAgICBkYXRhLT5lbmRQb3NpdGlvbiA9
IGZyYWdtZW50LnRyYW5zZm9ybS5tYXBQb2ludChkYXRhLT5lbmRQb3NpdGlvbik7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTM1MCw3ICs0MjYsNyBAQCBGbG9hdFBvaW50IFNWR1RleHRRdWVy
eTo6ZW5kUG9zaXRpb25PZkNoCiBzdHJ1Y3QgUm90YXRpb25PZkNoYXJhY3RlckRhdGEgOiBTVkdU
ZXh0UXVlcnk6OkRhdGEgewogICAgIFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhKHVuc2lnbmVkIHF1
ZXJ5UG9zaXRpb24pCiAgICAgICAgIDogcG9zaXRpb24ocXVlcnlQb3NpdGlvbikKLSAgICAgICAg
LCByb3RhdGlvbigwLjBmKQorICAgICAgICAsIHJvdGF0aW9uKDApCiAgICAgewogICAgIH0KIApA
QCAtMzU4LDI0ICs0MzQsMjUgQEAgc3RydWN0IFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhIDogU1ZH
VGV4dAogICAgIGZsb2F0IHJvdGF0aW9uOwogfTsKIAotYm9vbCBTVkdUZXh0UXVlcnk6OnJvdGF0
aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRl
eHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Citib29s
IFNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0
YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBSb3RhdGlv
bk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFJvdGF0aW9uT2ZDaGFyYWN0ZXJE
YXRhKj4ocXVlcnlEYXRhKTsKIAogICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRp
b247CiAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7Ci0gICAgaWYgKCFt
YXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRDb29yZGluYXRlcyhxdWVyeURhdGEsIHRleHRC
b3gsIHBhcnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKKyAgICBpZiAoIW1hcFN0YXJ0
RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwg
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBjb25zdCBTVkdDaGFyJiBjaGFyYWN0ZXIgPSAqKHBhcnQuZmlyc3RDaGFyYWN0ZXIgKyBzdGFy
dFBvc2l0aW9uKTsKLSAgICBkYXRhLT5yb3RhdGlvbiA9IGNoYXJhY3Rlci5hbmdsZTsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtKGZyYWdtZW50LnRyYW5zZm9ybSk7CisgICAgbmV3
VHJhbnNmb3JtLnNjYWxlKDEgLyBmcmFnbWVudC50cmFuc2Zvcm0ueFNjYWxlKCksIDEgLyBmcmFn
bWVudC50cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGRhdGEtPnJvdGF0aW9uID0gbmFycm93UHJl
Y2lzaW9uVG9GbG9hdChyYWQyZGVnKGF0YW4yKG5ld1RyYW5zZm9ybS5iKCksIG5ld1RyYW5zZm9y
bS5hKCkpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGZsb2F0IFNWR1RleHRRdWVyeTo6cm90
YXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAobV90
ZXh0Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMC4wZjsKKyAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSBkYXRhKHBvc2l0aW9uKTsKICAgICBl
eGVjdXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0UXVlcnk6OnJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxs
YmFjayk7CkBAIC0zOTMsMjAgKzQ3MCwzNyBAQCBzdHJ1Y3QgRXh0ZW50T2ZDaGFyYWN0ZXJEYXRh
IDogU1ZHVGV4dFF1CiAgICAgRmxvYXRSZWN0IGV4dGVudDsKIH07CiAKLWJvb2wgU1ZHVGV4dFF1
ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZH
SW5saW5lVGV4dEJveCogdGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkgY29u
c3QKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMoU1ZHVGV4dFF1
ZXJ5OjpEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGlu
dCBzdGFydFBvc2l0aW9uLCBGbG9hdFJlY3QmIGV4dGVudCkKK3sKKyAgICBleHRlbnQuc2V0TG9j
YXRpb24oRmxvYXRQb2ludChmcmFnbWVudC54LCBmcmFnbWVudC55IC0gcXVlcnlEYXRhLT50ZXh0
UmVuZGVyZXItPnN0eWxlKCktPmZvbnQoKS5hc2NlbnQoKSkpOworCisgICAgaWYgKHN0YXJ0UG9z
aXRpb24pIHsKKyAgICAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNWR1RleHRNZXRyaWNz
OjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXIsIGZyYWdtZW50
LnBvc2l0aW9uTGlzdE9mZnNldCwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgIGlmIChxdWVyeURh
dGEtPmlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgZXh0ZW50Lm1vdmUoMCwgbWV0cmljcy5o
ZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4dGVudC5tb3ZlKG1ldHJpY3Mu
d2lkdGgoKSwgMCk7CisgICAgfQorCisgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNWR1Rl
eHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXIs
IGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCArIHN0YXJ0UG9zaXRpb24sIDEpOworICAgIGV4
dGVudC5zZXRTaXplKEZsb2F0U2l6ZShtZXRyaWNzLndpZHRoKCksIG1ldHJpY3MuaGVpZ2h0KCkp
KTsKKworICAgIGlmIChmcmFnbWVudC50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBleHRlbnQgPSBmcmFnbWVudC50cmFuc2Zvcm0ubWFwUmVjdChleHRlbnQp
OworfQorCitib29sIFNWR1RleHRRdWVyeTo6ZXh0ZW50T2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRh
KiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7CiAg
ICAgRXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RXh0ZW50T2ZDaGFy
YWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAogICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+
cG9zaXRpb247CiAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7Ci0gICAg
aWYgKCFtYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRDb29yZGluYXRlcyhxdWVyeURhdGEs
IHRleHRCb3gsIHBhcnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKKyAgICBpZiAoIW1h
cFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFn
bWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnN0
eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKIAotICAgIGNvbnN0IFNWR0NoYXImIGNoYXJhY3Rl
ciA9ICoocGFydC5maXJzdENoYXJhY3RlciArIHN0YXJ0UG9zaXRpb24pOwotICAgIGRhdGEtPmV4
dGVudCA9IHRleHRCb3gtPmNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhzdHlsZSwgcGFydC5vZmZz
ZXQgKyBzdGFydFBvc2l0aW9uLCBjaGFyYWN0ZXIpOworICAgIGNhbGN1bGF0ZUdseXBoQm91bmRh
cmllcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBkYXRhLT5leHRlbnQpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MjMsMjggKzUxNywyOSBAQCBGbG9hdFJlY3QgU1ZH
VGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlCiAvLyBjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9u
KCkgaW1wbGVtZW50YXRpb24KIHN0cnVjdCBDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YSA6
IFNWR1RleHRRdWVyeTo6RGF0YSB7CiAgICAgQ2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEo
Y29uc3QgRmxvYXRQb2ludCYgcXVlcnlQb3NpdGlvbikKLSAgICAgICAgOiBjaGFyYWN0ZXJOdW1i
ZXIoMCkKLSAgICAgICAgLCBwb3NpdGlvbihxdWVyeVBvc2l0aW9uKQorICAgICAgICA6IHBvc2l0
aW9uKHF1ZXJ5UG9zaXRpb24pCiAgICAgewogICAgIH0KIAotICAgIHVuc2lnbmVkIGNoYXJhY3Rl
ck51bWJlcjsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uOwogfTsKIAotYm9vbCBTVkdUZXh0UXVl
cnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNv
bnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBh
cnQpIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNh
bGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkg
Y29uc3QKIHsKICAgICBDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YSogZGF0YSA9IHN0YXRp
Y19jYXN0PENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhKj4ocXVlcnlEYXRhKTsKIAotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT5zdHlsZSgpOwot
ICAgIEFTU0VSVChzdHlsZSk7CisgICAgRmxvYXRSZWN0IGV4dGVudDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZnJhZ21lbnQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaW50IHN0YXJ0
UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzICsgaTsKKyAgICAgICAgaW50IGVu
ZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgICAgIGlmICghbWFwU3RhcnRFbmRQ
b3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcGFydC5sZW5ndGg7ICsraSkgewotICAgICAgICBGbG9hdFJlY3Qg
ZXh0ZW50KHRleHRCb3gtPmNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhzdHlsZSwgcGFydC5vZmZz
ZXQgKyBpLCAqKHBhcnQuZmlyc3RDaGFyYWN0ZXIgKyBpKSkpOwotICAgICAgICBpZiAoZXh0ZW50
LmNvbnRhaW5zKGRhdGEtPnBvc2l0aW9uKSkKKyAgICAgICAgY2FsY3VsYXRlR2x5cGhCb3VuZGFy
aWVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGV4dGVudCk7CisgICAgICAg
IGlmIChleHRlbnQuY29udGFpbnMoZGF0YS0+cG9zaXRpb24pKSB7CisgICAgICAgICAgICBkYXRh
LT5wcm9jZXNzZWRDaGFyYWN0ZXJzICs9IGk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICArK2RhdGEtPmNoYXJhY3Rlck51bWJlcjsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IHJldHVybiBmYWxzZTsKQEAgLTQ1OSw3ICs1NTQsNyBAQCBpbnQgU1ZHVGV4dFF1ZXJ5OjpjaGFy
YWN0ZXJOdW1iZXJBdFBvc2l0CiAgICAgaWYgKCFleGVjdXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0
UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjaykpCiAgICAgICAgIHJldHVy
biAtMTsKIAotICAgIHJldHVybiBkYXRhLmNoYXJhY3Rlck51bWJlcjsKKyAgICByZXR1cm4gZGF0
YS5wcm9jZXNzZWRDaGFyYWN0ZXJzOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dFF1ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRRdWVyeS5oCShyZXZpc2lvbiA2ODg3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UXVlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTUgKzIyLDE0IEBACiAKICNpZiBF
TkFCTEUoU1ZHKQogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlNWR1RleHRGcmFn
bWVudC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBJbmxpbmVGbG93Qm94OwogY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVy
U3R5bGU7CiBjbGFzcyBTVkdJbmxpbmVUZXh0Qm94Owotc3RydWN0IFNWR1RleHRDaHVua1BhcnQ7
CiAKIGNsYXNzIFNWR1RleHRRdWVyeSB7CiBwdWJsaWM6CkBAIC00OSwyMiArNDgsMjIgQEAgcHVi
bGljOgogICAgIHN0cnVjdCBEYXRhOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgYm9vbCAoU1ZH
VGV4dFF1ZXJ5OjoqUHJvY2Vzc1RleHRDaHVua1BhcnRDYWxsYmFjaykoRGF0YSosIGNvbnN0IFNW
R0lubGluZVRleHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JikgY29uc3Q7Ci0gICAgYm9v
bCBleGVjdXRlUXVlcnkoRGF0YSosIFByb2Nlc3NUZXh0Q2h1bmtQYXJ0Q2FsbGJhY2spIGNvbnN0
OworICAgIHR5cGVkZWYgYm9vbCAoU1ZHVGV4dFF1ZXJ5OjoqUHJvY2Vzc1RleHRGcmFnbWVudENh
bGxiYWNrKShEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CisgICAgYm9vbCBl
eGVjdXRlUXVlcnkoRGF0YSosIFByb2Nlc3NUZXh0RnJhZ21lbnRDYWxsYmFjaykgY29uc3Q7CiAK
ICAgICB2b2lkIGNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3goSW5saW5lRmxvd0JveCopOwotICAg
IGZsb2F0IG1lYXN1cmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgUmVu
ZGVyU3R5bGUqLCBib29sIGlzVmVydGljYWxUZXh0LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGxl
bmd0aCkgY29uc3Q7Ci0gICAgYm9vbCBtYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRDb29y
ZGluYXRlcyhEYXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVu
a1BhcnQmLCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0OworICAg
IGJvb2wgbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiwg
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0
aW9uKSBjb25zdDsKKyAgICB2b2lkIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xp
Z2F0dXJlcyhEYXRhKiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25z
dDsKIAogcHJpdmF0ZToKLSAgICBib29sIG51bWJlck9mQ2hhcmFjdGVyc0NhbGxiYWNrKERhdGEq
LCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0
OwotICAgIGJvb2wgdGV4dExlbmd0aENhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdJbmxpbmVUZXh0
Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OwotICAgIGJvb2wgc3ViU3RyaW5n
TGVuZ3RoQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBjb25zdCBTVkdU
ZXh0Q2h1bmtQYXJ0JikgY29uc3Q7Ci0gICAgYm9vbCBzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJD
YWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVu
a1BhcnQmKSBjb25zdDsKLSAgICBib29sIGVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhE
YXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBj
b25zdDsKLSAgICBib29sIHJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiwgY29uc3Qg
U1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25zdDsKLSAgICBi
b29sIGV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRleHRC
b3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JikgY29uc3Q7Ci0gICAgYm9vbCBjaGFyYWN0ZXJO
dW1iZXJBdFBvc2l0aW9uQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBj
b25zdCBTVkdUZXh0Q2h1bmtQYXJ0JikgY29uc3Q7CisgICAgYm9vbCBudW1iZXJPZkNoYXJhY3Rl
cnNDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CisgICAgYm9v
bCB0ZXh0TGVuZ3RoQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0
OworICAgIGJvb2wgc3ViU3RyaW5nTGVuZ3RoQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR1RleHRG
cmFnbWVudCYpIGNvbnN0OworICAgIGJvb2wgc3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJh
Y2soRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OworICAgIGJvb2wgZW5kUG9z
aXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBj
b25zdDsKKyAgICBib29sIHJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiwgY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CisgICAgYm9vbCBleHRlbnRPZkNoYXJhY3RlckNhbGxi
YWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKKyAgICBib29sIGNoYXJh
Y3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50
JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiBtX3Rl
eHRCb3hlczsK
</data>
<flag name="review"
          id="59166"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69468</attachid>
            <date>2010-10-01 08:09:27 -0700</date>
            <delta_ts>2010-10-01 08:19:10 -0700</delta_ts>
            <desc>Patch: LayoutTests</desc>
            <filename>FullTextPatch-LayoutTests.diff</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64"></data>
<flag name="review"
          id="59167"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>