<?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>88307</bug_id>
          
          <creation_ts>2012-06-05 01:19:04 -0700</creation_ts>
          <short_desc>Rename UTF8.h/cpp to WTF_UTF8.h/cpp to avoid clashes with ICU&apos;s utf8.h</short_desc>
          <delta_ts>2012-06-13 08:32:56 -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>Tools / Tests</component>
          <version>420+</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>70913</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P1</priority>
          <bug_severity>Blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>88300</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Csaba Osztrogonác">ossy</reporter>
          <assigned_to name="Csaba Osztrogonác">ossy</assigned_to>
          <cc>efidler</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>641286</commentid>
    <comment_count>0</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-05 01:19:04 -0700</bug_when>
    <thetext>- U8_MAX_LENGHT doesn&apos;t exist in Source/WebCore/platform/text/TextCodecUTF8.h
- U8_APPEND_UNSAFE doesn&apos;t exist in Source/WebCore/platform/text/TextCodecUTF8.cpp

It must be a missing include problem, because they are defined in ICU somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641518</commentid>
    <comment_count>1</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-05 07:24:16 -0700</bug_when>
    <thetext>Here is the exact error log:
f:\webkit\source\webcore\platform\text\TextCodecUTF8.h(50) : error C2065: &apos;U8_MAX_LENGTH&apos; : undeclared identifier
f:\WebKit\Source\WebCore\platform\text\TextCodecUTF8.cpp(311) : error C3861: &apos;U8_APPEND_UNSAFE&apos;: identifier not found</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641559</commentid>
    <comment_count>2</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-05 08:06:33 -0700</bug_when>
    <thetext>U8_MAX_LENGTH is 4 on my Linux machine and defined by /usr/include/unicode/utf8.h. Which is included by /usr/include/unicode/utf.h &lt;--- .... &lt;--- /usr/include/unicode/uchar.h &lt;--- Source/WTF/wtf/unicode/icu/UnicodeIcu.h &lt;--- Source/WTF/wtf/unicode/Unicode.h &lt;--- Source/WebCore/platform/text/TextCodec.h

Pffff ... I think I got it after preprocessing the source ...


Here is a part of ICU/include/unicode/utf.h:

[snip]

/* include the utfXX.h ------------------------------------------------------ */

#if !U_NO_DEFAULT_INCLUDE_UTF_HEADERS

#include &quot;unicode/utf8.h&quot; ----&gt; HERE is the problem !!!
#include &quot;unicode/utf16.h&quot; 

[end]

Unfortunately MSVC includes WebKit/Source/WTF/wtf/unicode/utf8.h here
instead of ICU&apos;s unicode/utf8.h and it caused all of these problem ...

Here I have no idea how can we fix it properly ... How I hate filename clashing ... Any idea?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641565</commentid>
    <comment_count>3</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-05 08:11:05 -0700</bug_when>
    <thetext>My collegue pointed out that Source/WTF/wtf/unicode/UTF8.h is uppercase,
but ICU/include/utf.8 is lowercase ... So it only clashes on Windows ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641579</commentid>
    <comment_count>4</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-05 08:19:05 -0700</bug_when>
    <thetext>What do you think about renaming UTF8.h/cpp to WTF_UTF8.h/cpp ?
(UTF8.h guards itself with WTF_UTF8_h ifdef guard right now.)

I have no better idea. :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641593</commentid>
    <comment_count>5</comment_count>
      <attachid>145806</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-05 08:39:46 -0700</bug_when>
    <thetext>Created attachment 145806
proposed patch

Patch for EWS bots. Let&apos;s see if renaming works or not. (I bet changes in Mac project files are wrong, because I didn&apos;t use XCode :) )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641597</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-05 08:42:07 -0700</bug_when>
    <thetext>Attachment 145806 did not pass style-queue:

Source/WTF/wtf/unicode/WTF_UTF8.cpp:65:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:122:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:220:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:233:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:233:  More than one command on the same line  [whitespace/newline] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:234:  More than one command on the same line  [whitespace/newline] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:235:  More than one command on the same line  [whitespace/newline] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:246:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:253:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:255:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:256:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:257:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:261:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:261:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:262:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:263:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:264:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:265:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:268:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:287:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:287:  More than one command on the same line  [whitespace/newline] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:288:  More than one command on the same line  [whitespace/newline] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:289:  More than one command on the same line  [whitespace/newline] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:290:  More than one command on the same line  [whitespace/newline] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:291:  More than one command on the same line  [whitespace/newline] [4]
Source/WTF/wtf/unicode/WTF_UTF8.cpp:328:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WTF/wtf/unicode/WTF_UTF8.h:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WTF/wtf/unicode/WTF_UTF8.h:45:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/unicode/WTF_UTF8.h:46:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/unicode/WTF_UTF8.h:47:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/unicode/WTF_UTF8.h:48:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/unicode/WTF_UTF8.h:53:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/unicode/WTF_UTF8.h:79:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/text/String.cpp:27:  Alphabetical sorting problem.  [build/include_order] [4]
SFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSClassRef.cpp&apos;,...&quot; exit_code: 1
ource/WTF/wtf/text/WTFString.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 35 in 22 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>643740</commentid>
    <comment_count>7</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-06-07 11:40:40 -0700</bug_when>
    <thetext>Should bug 70913 be marked as a duplicate of this one now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643879</commentid>
    <comment_count>8</comment_count>
      <attachid>145806</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-06-07 14:03:12 -0700</bug_when>
    <thetext>Comment on attachment 145806
proposed patch

I don&apos;t like WTF_UTF8.h. This is the same problem as with WTFString.h which does not have underscore, and generally our naming convention does not prefer underscores. I would name it to WTFUTF8.h. A sed on the diff file should be enough :) Furthermore, I would add a comment to the header explaining why has this file such a name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644412</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-08 00:20:52 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 145806 [details])
&gt; I don&apos;t like WTF_UTF8.h. This is the same problem as with WTFString.h which does not have underscore, and generally our naming convention does not prefer underscores. I would name it to WTFUTF8.h. A sed on the diff file should be enough :) Furthermore, I would add a comment to the header explaining why has this file such a name.

Good point. I didn&apos;t think about the proper name when I uploaded the patch.
First I wanted to test if the EWS bots like it or not.

(In reply to comment #7)
&gt; Should bug 70913 be marked as a duplicate of this one now?
Good to know if there is a bug about it. :) It does what Balázs suggested. :)
It is the elder one, so this one should be duplicated.

*** This bug has been marked as a duplicate of bug 70913 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145806</attachid>
            <date>2012-06-05 08:39:46 -0700</date>
            <delta_ts>2012-06-13 08:32:56 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>bug-88307-20120605173945.patch</filename>
            <type>text/plain</type>
            <size>59130</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NDg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NjQ3MmM4OWEzM2RiYWIzMzk0ZmQ2NjAxMzA4YzYxZDc5M2YyZTVkLi5mNDI1YTcyNjk3OTlmMmNi
OGFiY2I3MTZiYzFiMjk4YjA2MDczN2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxMi0wNi0wNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFtRdF1bV2luXSBGaXggbWlzYyBJQ1UgcmVsYXRlZCBidWlsZCBwcm9i
bGVtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgz
MDcKKworICAgICAgICBSZW5hbWluZyBXVEYvd3RmL3VuaWNvZGUvVVRGOC57aHxjcHB9IHRvIFVU
Rjgue2h8Y3BwfSB0byBhdm9pZAorICAgICAgICBjbGFzaGVzIHdpdGggSUNVJ3MgdW5pY29kZS91
dGY4Lmggb24gY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAg
ICAgICAgKiBBUEkvSlNTdHJpbmdSZWYuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmluZy5jcHA6CisKIDIw
MTItMDYtMDUgIERvbmd3b28gSW0gIDxkdy5pbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBBZGQg
J2lzUHJvdG9jb2xIYW5kbGVyUmVnaXN0ZXJlZCcgYW5kICd1bnJlZ2lzdGVyUHJvdG9jb2xIYW5k
bGVyJy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKaW5kZXggMzFlOTEzNjk2MzMyZGRmMjVmODE3ZTZjODlhMzMwMDIxMTgwM2JlNy4uZGJh
ZmNkNTNjODk3M2E2M2Q5NTVhMjY2MjI1NDQzYjgwN2I2NWVkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBA
QAorMjAxMi0wNi0wNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFtRdF1bV2luXSBGaXggbWlzYyBJQ1UgcmVsYXRlZCBidWlsZCBwcm9ibGVtcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgzMDcKKworICAg
ICAgICBSZW5hbWluZyBXVEYvd3RmL3VuaWNvZGUvVVRGOC57aHxjcHB9IHRvIFVURjgue2h8Y3Bw
fSB0byBhdm9pZAorICAgICAgICBjbGFzaGVzIHdpdGggSUNVJ3MgdW5pY29kZS91dGY4Lmggb24g
Y2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICog
V1RGLmd5cGk6CisgICAgICAgICogV1RGLnBybzoKKyAgICAgICAgKiBXVEYudmNwcm9qL1dURi52
Y3Byb2o6CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZy5j
cHA6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKiB3dGYvdW5p
Y29kZS9XVEZfVVRGOC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VU
RjguY3BwLgorICAgICAgICAoVW5pY29kZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlubGlu
ZVVURjhTZXF1ZW5jZUxlbmd0aE5vbkFTQ0lJKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aW5s
aW5lVVRGOFNlcXVlbmNlTGVuZ3RoKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6VVRGOFNlcXVl
bmNlTGVuZ3RoKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6ZGVjb2RlVVRGOFNlcXVlbmNlKToK
KyAgICAgICAgKFdURjo6VW5pY29kZTo6Y29udmVydExhdGluMVRvVVRGOCk6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmNvbnZlcnRVVEYxNlRvVVRGOCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6
OmlzTGVnYWxVVEY4KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6cmVhZFVURjhTZXF1ZW5jZSk6
CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRVVEY4VG9VVEYxNik6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmNhbGN1bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhGcm9tVVRGOCk6CisgICAg
ICAgIChXVEY6OlVuaWNvZGU6OmVxdWFsVVRGMTZXaXRoVVRGOCk6CisgICAgICAgICogd3RmL3Vu
aWNvZGUvV1RGX1VURjguaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRG
OC5oLgorICAgICAgICAoVW5pY29kZSk6CisgICAgICAgICogd3RmL3VuaWNvZGUvZ2xpYi9Vbmlj
b2RlR0xpYi5jcHA6CisKIDIwMTItMDYtMDQgIFRha2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJTb2NrZXRdIFNlbmQgcmVxdWlyZXMgc3VwZXIg
bGluZWFyIHRpbWUgYWdhaW5zdCBkYXRhIHNpemUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1YzNhZjhhMTlmMTM5
ZTc3NWU3YTIzNjJhMGNlMmU3OWQ4NTdhYWQ5Li5hNmM1ZDQzOWU3YzM5M2ViODJkNDE5ZjM3NjVi
NWU3ZjQzZDQxYjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDYtMDUgIENz
YWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdW1dpbl0g
Rml4IG1pc2MgSUNVIHJlbGF0ZWQgYnVpbGQgcHJvYmxlbXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4MzA3CisKKyAgICAgICAgUmVuYW1pbmcgV1RG
L3d0Zi91bmljb2RlL1VURjgue2h8Y3BwfSB0byBVVEY4LntofGNwcH0gdG8gYXZvaWQKKyAgICAg
ICAgY2xhc2hlcyB3aXRoIElDVSdzIHVuaWNvZGUvdXRmOC5oIG9uIGNhc2UgaW5zZW5zaXRpdmUg
ZmlsZXN5c3RlbXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6CisgICAgICAgICogeG1sL1hTTFRQcm9j
ZXNzb3JMaWJ4c2x0LmNwcDoKKwogMjAxMi0wNi0wNSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2
aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEx
OTQ2NywgcjExOTQ3MSwgYW5kIHIxMTk0NzYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzhhZDU1NTUyZmE1MmRj
YWM4Mjk0NTVhN2E5YWY5NGMxNDE4YWUxNS4uZmQ0MDE2MDMzYWFkYTc1ZDk3YjdmZWExZDhlNzkz
ZjU3M2FkYTc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTA1ICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1F0XVtXaW5dIEZp
eCBtaXNjIElDVSByZWxhdGVkIGJ1aWxkIHByb2JsZW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODMwNworCisgICAgICAgIFJlbmFtaW5nIFdURi93
dGYvdW5pY29kZS9VVEY4LntofGNwcH0gdG8gVVRGOC57aHxjcHB9IHRvIGF2b2lkCisgICAgICAg
IGNsYXNoZXMgd2l0aCBJQ1UncyB1bmljb2RlL3V0ZjguaCBvbiBjYXNlIGluc2Vuc2l0aXZlIGZp
bGVzeXN0ZW1zLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU2hhcmVkL1dlYlN0cmluZy5oOgorCiAyMDEyLTA2LTA1ICBEb25nd29vIEltICA8ZHcu
aW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRkICdpc1Byb3RvY29sSGFuZGxlclJlZ2lzdGVy
ZWQnIGFuZCAndW5yZWdpc3RlclByb3RvY29sSGFuZGxlcicuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NsYXNzUmVmLmNwcAppbmRleCAxMzQ0MzE2NTQ3ODkxNWY4YTEzYTRkYmQzODA0NDFl
ZDI0YmM0ZDJkLi44YTVjNGYxNDlkMGE4ZTU2Y2JhMzE4YTM0YzcwYTU4MzEyNDRlNDFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAgLTM0LDcgKzM0LDcgQEAK
ICNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRl
IDx3dGYvdW5pY29kZS9VVEY4Lmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvV1RGX1VURjguaD4K
IAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3BwCmluZGV4IGVhMzFkYTY2YmI5NDBkN2VkZjU2
MzlmYjIxYzIyYWQ0YmQ1NWMwYmQuLmQ2OGI0MzAwZDM2OGJkOWEwYTY3MjIyZGU2MDZmYWE4YjA0
MzY1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWYu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3BwCkBAIC0y
OCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVk
ZSAiT3BhcXVlSlNTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CisjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvV1RGX1VURjguaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIHVz
aW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKaW5kZXggZTgwMTdi
OTA0M2JlZmM3MzMxNjI0MzdjNjM2YWRiYWUzYzFkMTQ2Ny4uMDc2N2U2ZDFiMDRkMGFhY2M1ZDUy
MWY4OGI4MThiYTcxNjNlYjhjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApAQCAtNDIsNyArNDIsNyBA
QAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUv
VVRGOC5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1dURl9VVEY4Lmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggNWIxZTlhMGUwYjEyYTBhN2FlZmM2MjcxOTI1NjJh
YjQzMzc3ZDRkYy4uYTdhNWIzNmY3MzdjYjNkZjJmYWIyYjZiYzVhYTEyZTllMTBjM2FkYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKQEAgLTM5LDcgKzM5LDcg
QEAKICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi9kdG9hLmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgor
I2luY2x1ZGUgPHd0Zi91bmljb2RlL1dURl9VVEY4Lmg+CiAKICNpZiBIQVZFKFNUUklOR1NfSCkK
ICNpbmNsdWRlIDxzdHJpbmdzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMjI2NzgxMGNk
ZTAxZjI4YTcwZTUxYmM1YzcyZjJjODVjY2JhMjVlMi4uNjZmOWRiNzAwMDkxNTBkN2UzMjAwMjc5
ZWQ2ZGNjOTc5N2ZmYzAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjE3LDggKzIxNyw4
IEBAIHd0Zl9zb3VyY2VzICs9IFwKICAgICBTb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NoYXJhY3Rl
ck5hbWVzLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3IuaCBcCiAgICAg
U291cmNlL1dURi93dGYvdW5pY29kZS9Db2xsYXRvckRlZmF1bHQuY3BwIFwKLSAgICBTb3VyY2Uv
V1RGL3d0Zi91bmljb2RlL1VURjguY3BwIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VU
RjguaCBcCisgICAgU291cmNlL1dURi93dGYvdW5pY29kZS9XVEZfVVRGOC5jcHAgXAorICAgIFNv
dXJjZS9XVEYvd3RmL3VuaWNvZGUvV1RGX1VURjguaCBcCiAgICAgU291cmNlL1dURi93dGYvdW5p
Y29kZS9Vbmljb2RlLmgKIAogaWYgVEFSR0VUX1dJTjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi5neXBpIGIvU291cmNlL1dURi9XVEYuZ3lwaQppbmRleCA4Njc1ODU1MDYxZDM3NGVmYWZm
ZTdkNjJlMTUzZGViMTFiYmFkMDM5Li44YWU5YzE2OTNhMjJhMDc3NmFiMmJjYWMxMDJhNDc4N2Uz
MWM5NWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi5neXBpCisrKyBiL1NvdXJjZS9XVEYv
V1RGLmd5cGkKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgICAgICAgJ3d0Zi90aHJlYWRzL0Jp
bmFyeVNlbWFwaG9yZS5oJywKICAgICAgICAgICAgICd3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1l
cy5oJywKICAgICAgICAgICAgICd3dGYvdW5pY29kZS9Db2xsYXRvci5oJywKLSAgICAgICAgICAg
ICd3dGYvdW5pY29kZS9VVEY4LmgnLAorICAgICAgICAgICAgJ3d0Zi91bmljb2RlL1dURl9VVEY4
LmgnLAogICAgICAgICAgICAgJ3d0Zi91bmljb2RlL1VuaWNvZGUuaCcsCiAgICAgICAgICAgICAn
d3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaCcsCiAgICAgICAgIF0sCkBAIC0yMjMsNyArMjIz
LDcgQEAKICAgICAgICAgICAgICd3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwJywKICAg
ICAgICAgICAgICd3dGYvdW5pY29kZS9Db2xsYXRvckRlZmF1bHQuY3BwJywKICAgICAgICAgICAg
ICd3dGYvdW5pY29kZS9TY3JpcHRDb2Rlc0Zyb21JQ1UuaCcsCi0gICAgICAgICAgICAnd3RmL3Vu
aWNvZGUvVVRGOC5jcHAnLAorICAgICAgICAgICAgJ3d0Zi91bmljb2RlL1dURl9VVEY4LmNwcCcs
CiAgICAgICAgICAgICAnd3RmL3VuaWNvZGUvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCcsCiAgICAg
ICAgICAgICAnd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAnLAogICAgICAgICAgICAg
J3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi5wcm8gYi9Tb3VyY2UvV1RGL1dURi5wcm8KaW5kZXggMzM4NDc3MGE4ZWQ3ZGZkMzk0NjM3
ODFjZGE5ZTg5OGU5OGVkMWJhYS4uMTE4MGE2ZTQ5ODg1NjZkYWU4MzNhOWEwYmU5YjU3YjgyNmVh
MzFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYucHJvCisrKyBiL1NvdXJjZS9XVEYvV1RG
LnBybwpAQCAtMTU0LDcgKzE1NCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHVuaWNvZGUvU2NyaXB0
Q29kZXNGcm9tSUNVLmggXAogICAgIHVuaWNvZGUvVW5pY29kZS5oIFwKICAgICB1bmljb2RlL1Vu
aWNvZGVNYWNyb3NGcm9tSUNVLmggXAotICAgIHVuaWNvZGUvVVRGOC5oIFwKKyAgICB1bmljb2Rl
L1dURl9VVEY4LmggXAogICAgIFVudXNlZFBhcmFtLmggXAogICAgIFZhbHVlQ2hlY2suaCBcCiAg
ICAgVmVjdG9yLmggXApAQCAtMjE1LDcgKzIxNSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHRleHQv
V1RGU3RyaW5nLmNwcCBcCiAgICAgdW5pY29kZS9Db2xsYXRvckRlZmF1bHQuY3BwIFwKICAgICB1
bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAgXAotICAgIHVuaWNvZGUvVVRGOC5jcHAKKyAgICB1
bmljb2RlL1dURl9VVEY4LmNwcAogCiB1bml4OiBTT1VSQ0VTICs9IFwKICAgICBPU0FsbG9jYXRv
clBvc2l4LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJv
aiBiL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYudmNwcm9qCmluZGV4IDIxOTBkYWUxZWZmZWFl
MzM5NTMzMjdlM2NiNzNlNzdlNmVlNDZkNTguLmZlZjQxMWUxODcxZTZmNjE5ZGM5NTM3N2Q0YmM5
Njc5ZTgxNWMxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYudmNwcm9q
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYudmNwcm9qCkBAIC0zNjQsMTEgKzM2NCwx
MSBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlx3
dGZcdW5pY29kZVxVVEY4LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0Zlx1bmljb2RlXFdU
Rl9VVEY4LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5cd3RmXHVuaWNvZGVcVVRGOC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXHVuaWNv
ZGVcV1RGX1VURjguaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsdGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiYTQ1NzY0M2ZiM2JhMWQ1MTZiM2Vm
OTExNjlhYWExYmM3MGE1NTdlLi41ZjAyYzkxMDY0ODFlOGI2ZGE1YTYwMGU5ZmMzNTEyZmFlZmE2
NGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIxNiw4
ICsyMTYsOCBAQAogCQlBOEE0NzQ2NjE1MUE4MjVCMDA0MTIzRkYgLyogU2NyaXB0Q29kZXNGcm9t
SUNVLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0
NzM1NDE1MUE4MjVCMDA0MTIzRkYgLyogU2NyaXB0Q29kZXNGcm9tSUNVLmggKi87IH07CiAJCUE4
QTQ3NDY3MTUxQTgyNUIwMDQxMjNGRiAvKiBVbmljb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM1NTE1MUE4MjVCMDA0MTIzRkYgLyogVW5p
Y29kZS5oICovOyB9OwogCQlBOEE0NzQ2ODE1MUE4MjVCMDA0MTIzRkYgLyogVW5pY29kZU1hY3Jv
c0Zyb21JQ1UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzU2MTUxQTgyNUIwMDQxMjNGRiAvKiBVbmljb2RlTWFjcm9zRnJvbUlDVS5oICovOyB9
OwotCQlBOEE0NzQ2OTE1MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM1NzE1MUE4MjVCMDA0MTIzRkYg
LyogVVRGOC5jcHAgKi87IH07Ci0JCUE4QTQ3NDZBMTUxQTgyNUIwMDQxMjNGRiAvKiBVVEY4Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM1ODE1
MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5oICovOyB9OworCQlBOEE0NzQ2OTE1MUE4MjVCMDA0MTIz
RkYgLyogV1RGX1VURjguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczNTcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURl9VVEY4LmNwcCAqLzsgfTsK
KwkJQThBNDc0NkExNTFBODI1QjAwNDEyM0ZGIC8qIFdURl9VVEY4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM1ODE1MUE4MjVCMDA0MTIzRkYg
LyogV1RGX1VURjguaCAqLzsgfTsKIAkJQThBNDc0NkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9u
RmluZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThB
NDczNUMxNTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmluZC5oICovOyB9OwogCQlBOEE0NzQ2RTE1
MUE4MjVCMDA0MTIzRkYgLyogVW51c2VkUGFyYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzVEMTUxQTgyNUIwMDQxMjNGRiAvKiBVbnVzZWRQ
YXJhbS5oICovOyB9OwogCQlBOEE0NzQ2RjE1MUE4MjVCMDA0MTIzRkYgLyogUGFyc2VkVVJMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzYw
MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJzZWRVUkwuY3BwICovOyB9OwpAQCAtNDYzLDggKzQ2Myw4
IEBACiAJCUE4QTQ3MzU0MTUxQTgyNUIwMDQxMjNGRiAvKiBTY3JpcHRDb2Rlc0Zyb21JQ1UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q29kZXNGcm9tSUNVLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzU1MTUxQTgyNUIwMDQxMjNGRiAvKiBV
bmljb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaWNvZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczNTYxNTFBODI1QjAwNDEyM0ZGIC8qIFVu
aWNvZGVNYWNyb3NGcm9tSUNVLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVu
aWNvZGVNYWNyb3NGcm9tSUNVLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3
MzU3MTUxQTgyNUIwMDQxMjNGRiAvKiBVVEY4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFVURjguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0
NzM1ODE1MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVVEY4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4QTQ3MzU3MTUx
QTgyNUIwMDQxMjNGRiAvKiBXVEZfVVRGOC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXVEZfVVRGOC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4
QTQ3MzU4MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZfVVRGOC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXVEZfVVRGOC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEE0NzM1QzE1MUE4MjVCMDA0MTIzRkYgLyogVW5pb25GaW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFVuaW9uRmluZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBOEE0NzM1RDE1MUE4MjVCMDA0MTIzRkYgLyogVW51c2VkUGFyYW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVW51c2VkUGFyYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQThBNDczNjAxNTFBODI1QjAwNDEyM0ZGIC8qIFBhcnNlZFVSTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZWRVUkwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODAzLDggKzgwMyw4IEBACiAJCQkJQThBNDczNTQxNTFBODI1
QjAwNDEyM0ZGIC8qIFNjcmlwdENvZGVzRnJvbUlDVS5oICovLAogCQkJCUE4QTQ3MzU1MTUxQTgy
NUIwMDQxMjNGRiAvKiBVbmljb2RlLmggKi8sCiAJCQkJQThBNDczNTYxNTFBODI1QjAwNDEyM0ZG
IC8qIFVuaWNvZGVNYWNyb3NGcm9tSUNVLmggKi8sCi0JCQkJQThBNDczNTcxNTFBODI1QjAwNDEy
M0ZGIC8qIFVURjguY3BwICovLAotCQkJCUE4QTQ3MzU4MTUxQTgyNUIwMDQxMjNGRiAvKiBVVEY4
LmggKi8sCisJCQkJQThBNDczNTcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURl9VVEY4LmNwcCAqLywK
KwkJCQlBOEE0NzM1ODE1MUE4MjVCMDA0MTIzRkYgLyogV1RGX1VURjguaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gdW5pY29kZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDE3LDcg
KzEwMTcsNyBAQAogCQkJCUE4QTQ3NDY2MTUxQTgyNUIwMDQxMjNGRiAvKiBTY3JpcHRDb2Rlc0Zy
b21JQ1UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDY3MTUxQTgyNUIwMDQxMjNGRiAvKiBV
bmljb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ2ODE1MUE4MjVCMDA0MTIzRkYgLyog
VW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDZBMTUxQTgy
NUIwMDQxMjNGRiAvKiBVVEY4LmggaW4gSGVhZGVycyAqLywKKwkJCQlBOEE0NzQ2QTE1MUE4MjVC
MDA0MTIzRkYgLyogV1RGX1VURjguaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDZEMTUxQTgy
NUIwMDQxMjNGRiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDZFMTUx
QTgyNUIwMDQxMjNGRiAvKiBVbnVzZWRQYXJhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NzAxNTFBODI1QjAwNDEyM0ZGIC8qIFBhcnNlZFVSTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTc3
LDcgKzExNzcsNyBAQAogCQkJCUE4QTQ3NDU4MTUxQTgyNUIwMDQxMjNGRiAvKiBUeXBlVHJhaXRz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDYwMTUxQTgyNUIwMDQxMjNGRiAvKiBDb2xs
YXRvckRlZmF1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NjMxNTFBODI1QjAwNDEy
M0ZGIC8qIENvbGxhdG9ySUNVLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4QTQ3NDY5MTUxQTgy
NUIwMDQxMjNGRiAvKiBVVEY4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4QTQ3NDY5MTUxQTgy
NUIwMDQxMjNGRiAvKiBXVEZfVVRGOC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ2RjE1
MUE4MjVCMDA0MTIzRkYgLyogUGFyc2VkVVJMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3
NDc0MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzQ3NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCAyNzRmMDRjOTc0OTMxOWFlZjQ4MDQ0Nzkx
NmRkMjI4MjcyNTA4NjhmLi4xNjYwMjY4MjEzZTllNGEwNTBmM2M0M2QwNzE0YjZjNTRmMTFkMjhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMTI4LDcgKzEyOCw3IEBAIFNFVChXVEZfSEVBREVS
UwogCiAgICAgdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oCiAgICAgdW5pY29kZS9Db2xsYXRvci5o
Ci0gICAgdW5pY29kZS9VVEY4LmgKKyAgICB1bmljb2RlL1dURl9VVEY4LmgKICAgICB1bmljb2Rl
L1VuaWNvZGUuaAogKQogCkBAIC0xODIsNyArMTgyLDcgQEAgU0VUKFdURl9TT1VSQ0VTCiAKICAg
ICB0aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5jcHAKIAotICAgIHVuaWNvZGUvVVRGOC5jcHAKKyAg
ICB1bmljb2RlL1dURl9VVEY4LmNwcAogKQogCiBTRVQoV1RGX0lOQ0xVREVfRElSRUNUT1JJRVMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAppbmRleCA2NmJkNzg1MWEwMDUyZGM0ZTE5
NmMxYmI0MGE1ZDNhODEzOTVlNjBlLi5hYmYwZTMzMGYwNWE2ZTJlZjIyYWMxNWZlN2UzYmIzY2Qw
MjkxOGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
VEY4Lmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvV1RGX1VURjguaD4KIAogbmFtZXNwYWNlIFdU
RiB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCAwNWZjMjFlMTVhYWQwODQxYjNj
MzY2NzMyNGI1ZGU4YmMwOWI4Y2QwLi4wMTk5YjYwYTk0NmRjZWVhNjY2YzdjMGExMWYyNDAxYzMx
MGE1ODdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvZHRvYS5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KKyNpbmNs
dWRlIDx3dGYvdW5pY29kZS9XVEZfVVRGOC5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNv
ZGUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3VuaWNvZGUvVVRGOC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VURjguY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWE1YzY5OTI1MDYwZTZmMDdhNzM2YTA3NDgwMjQ5
MDVjZTBjNWUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJv
Z2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVU
RjguaCIKLQotI2luY2x1ZGUgIkFTQ0lJQ1R5cGUuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nSGFz
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KLQotbmFtZXNw
YWNlIFdURiB7Ci1uYW1lc3BhY2UgVW5pY29kZSB7Ci0KLWlubGluZSBpbnQgaW5saW5lVVRGOFNl
cXVlbmNlTGVuZ3RoTm9uQVNDSUkoY2hhciBiMCkKLXsKLSAgICBpZiAoKGIwICYgMHhDMCkgIT0g
MHhDMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKChiMCAmIDB4RTApID09IDB4QzApCi0g
ICAgICAgIHJldHVybiAyOwotICAgIGlmICgoYjAgJiAweEYwKSA9PSAweEUwKQotICAgICAgICBy
ZXR1cm4gMzsKLSAgICBpZiAoKGIwICYgMHhGOCkgPT0gMHhGMCkKLSAgICAgICAgcmV0dXJuIDQ7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBpbnQgaW5saW5lVVRGOFNlcXVlbmNlTGVuZ3Ro
KGNoYXIgYjApCi17Ci0gICAgcmV0dXJuIGlzQVNDSUkoYjApID8gMSA6IGlubGluZVVURjhTZXF1
ZW5jZUxlbmd0aE5vbkFTQ0lJKGIwKTsKLX0KLQotaW50IFVURjhTZXF1ZW5jZUxlbmd0aChjaGFy
IGIwKQotewotICAgIHJldHVybiBpc0FTQ0lJKGIwKSA/IDEgOiBpbmxpbmVVVEY4U2VxdWVuY2VM
ZW5ndGhOb25BU0NJSShiMCk7Ci19Ci0KLWludCBkZWNvZGVVVEY4U2VxdWVuY2UoY29uc3QgY2hh
ciogc2VxdWVuY2UpCi17Ci0gICAgLy8gSGFuZGxlIDAtYnl0ZSBzZXF1ZW5jZXMgKG5ldmVyIHZh
bGlkKS4KLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGIwID0gc2VxdWVuY2VbMF07Ci0gICAgY29u
c3QgaW50IGxlbmd0aCA9IGlubGluZVVURjhTZXF1ZW5jZUxlbmd0aChiMCk7Ci0gICAgaWYgKGxl
bmd0aCA9PSAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvLyBIYW5kbGUgMS1ieXRlIHNl
cXVlbmNlcyAocGxhaW4gQVNDSUkpLgotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYjEgPSBzZXF1
ZW5jZVsxXTsKLSAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgaWYgKGIxKQotICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXR1cm4gYjA7Ci0gICAgfQotCi0gICAgLy8gSGFu
ZGxlIDItYnl0ZSBzZXF1ZW5jZXMuCi0gICAgaWYgKChiMSAmIDB4QzApICE9IDB4ODApCi0gICAg
ICAgIHJldHVybiAtMTsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGIyID0gc2VxdWVuY2VbMl07
Ci0gICAgaWYgKGxlbmd0aCA9PSAyKSB7Ci0gICAgICAgIGlmIChiMikKLSAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgY29uc3QgaW50IGMgPSAoKGIwICYgMHgxRikgPDwgNikgfCAoYjEg
JiAweDNGKTsKLSAgICAgICAgaWYgKGMgPCAweDgwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwot
ICAgICAgICByZXR1cm4gYzsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgMy1ieXRlIHNlcXVlbmNl
cy4KLSAgICBpZiAoKGIyICYgMHhDMCkgIT0gMHg4MCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgYjMgPSBzZXF1ZW5jZVszXTsKLSAgICBpZiAobGVuZ3RoID09
IDMpIHsKLSAgICAgICAgaWYgKGIzKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBj
b25zdCBpbnQgYyA9ICgoYjAgJiAweEYpIDw8IDEyKSB8ICgoYjEgJiAweDNGKSA8PCA2KSB8IChi
MiAmIDB4M0YpOwotICAgICAgICBpZiAoYyA8IDB4ODAwKQotICAgICAgICAgICAgcmV0dXJuIC0x
OwotICAgICAgICAvLyBVVEYtMTYgc3Vycm9nYXRlcyBzaG91bGQgbmV2ZXIgYXBwZWFyIGluIFVU
Ri04IGRhdGEuCi0gICAgICAgIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikKLSAgICAg
ICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcmV0dXJuIGM7Ci0gICAgfQotCi0gICAgLy8gSGFu
ZGxlIDQtYnl0ZSBzZXF1ZW5jZXMuCi0gICAgaWYgKChiMyAmIDB4QzApICE9IDB4ODApCi0gICAg
ICAgIHJldHVybiAtMTsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGI0ID0gc2VxdWVuY2VbNF07
Ci0gICAgaWYgKGxlbmd0aCA9PSA0KSB7Ci0gICAgICAgIGlmIChiNCkKLSAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgY29uc3QgaW50IGMgPSAoKGIwICYgMHg3KSA8PCAxOCkgfCAoKGIx
ICYgMHgzRikgPDwgMTIpIHwgKChiMiAmIDB4M0YpIDw8IDYpIHwgKGIzICYgMHgzRik7Ci0gICAg
ICAgIGlmIChjIDwgMHgxMDAwMCB8fCBjID4gMHgxMEZGRkYpCi0gICAgICAgICAgICByZXR1cm4g
LTE7Ci0gICAgICAgIHJldHVybiBjOwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotLy8g
T25jZSB0aGUgYml0cyBhcmUgc3BsaXQgb3V0IGludG8gYnl0ZXMgb2YgVVRGLTgsIHRoaXMgaXMg
YSBtYXNrIE9SLWVkCi0vLyBpbnRvIHRoZSBmaXJzdCBieXRlLCBkZXBlbmRpbmcgb24gaG93IG1h
bnkgYnl0ZXMgZm9sbG93LiAgVGhlcmUgYXJlCi0vLyBhcyBtYW55IGVudHJpZXMgaW4gdGhpcyB0
YWJsZSBhcyB0aGVyZSBhcmUgVVRGLTggc2VxdWVuY2UgdHlwZXMuCi0vLyAoSS5lLiwgb25lIGJ5
dGUgc2VxdWVuY2UsIHR3byBieXRlLi4uIGV0Yy4pLiBSZW1lbWJlciB0aGF0IHNlcXVlbmNzCi0v
LyBmb3IgKmxlZ2FsKiBVVEYtOCB3aWxsIGJlIDQgb3IgZmV3ZXIgYnl0ZXMgdG90YWwuCi1zdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciBmaXJzdEJ5dGVNYXJrWzddID0geyAweDAwLCAweDAwLCAw
eEMwLCAweEUwLCAweEYwLCAweEY4LCAweEZDIH07Ci0KLUNvbnZlcnNpb25SZXN1bHQgY29udmVy
dExhdGluMVRvVVRGOCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBMQ2hhcioqIHNvdXJjZVN0YXJ0LCBjb25zdCBMQ2hhciogc291cmNlRW5kLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiogdGFyZ2V0U3RhcnQsIGNoYXIqIHRh
cmdldEVuZCkKLXsKLSAgICBDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnNpb25PSzsK
LSAgICBjb25zdCBMQ2hhciogc291cmNlID0gKnNvdXJjZVN0YXJ0OwotICAgIGNoYXIqIHRhcmdl
dCA9ICp0YXJnZXRTdGFydDsKLSAgICB3aGlsZSAoc291cmNlIDwgc291cmNlRW5kKSB7Ci0gICAg
ICAgIFVDaGFyMzIgY2g7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IGJ5dGVzVG9Xcml0ZSA9IDA7
Ci0gICAgICAgIGNvbnN0IFVDaGFyMzIgYnl0ZU1hc2sgPSAweEJGOwotICAgICAgICBjb25zdCBV
Q2hhcjMyIGJ5dGVNYXJrID0gMHg4MDsgCi0gICAgICAgIGNvbnN0IExDaGFyKiBvbGRTb3VyY2Ug
PSBzb3VyY2U7IC8vIEluIGNhc2Ugd2UgaGF2ZSB0byBiYWNrIHVwIGJlY2F1c2Ugb2YgdGFyZ2V0
IG92ZXJmbG93LgotICAgICAgICBjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigqc291
cmNlKyspOwotCi0gICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IG1hbnkgYnl0ZXMgdGhlIHJlc3Vs
dCB3aWxsIHJlcXVpcmUKLSAgICAgICAgaWYgKGNoIDwgKFVDaGFyMzIpMHg4MCkKLSAgICAgICAg
ICAgIGJ5dGVzVG9Xcml0ZSA9IDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ5dGVzVG9X
cml0ZSA9IDI7Ci0KLSAgICAgICAgdGFyZ2V0ICs9IGJ5dGVzVG9Xcml0ZTsKLSAgICAgICAgaWYg
KHRhcmdldCA+IHRhcmdldEVuZCkgewotICAgICAgICAgICAgc291cmNlID0gb2xkU291cmNlOyAv
LyBCYWNrIHVwIHNvdXJjZSBwb2ludGVyIQotICAgICAgICAgICAgdGFyZ2V0IC09IGJ5dGVzVG9X
cml0ZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRhcmdldEV4aGF1c3RlZDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoYnl0ZXNUb1dyaXRlKSB7IC8vIG5v
dGU6IGV2ZXJ5dGhpbmcgZmFsbHMgdGhyb3VnaC4KLSAgICAgICAgY2FzZSAyOgotICAgICAgICAg
ICAgKi0tdGFyZ2V0ID0gKGNoYXIpKChjaCB8IGJ5dGVNYXJrKSAmIGJ5dGVNYXNrKTsKLSAgICAg
ICAgICAgIGNoID4+PSA2OwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAqLS10YXJnZXQg
PSAgKGNoYXIpKGNoIHwgZmlyc3RCeXRlTWFya1tieXRlc1RvV3JpdGVdKTsKLSAgICAgICAgfQot
ICAgICAgICB0YXJnZXQgKz0gYnl0ZXNUb1dyaXRlOwotICAgIH0KLSAgICAqc291cmNlU3RhcnQg
PSBzb3VyY2U7Ci0gICAgKnRhcmdldFN0YXJ0ID0gdGFyZ2V0OwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLUNvbnZlcnNpb25SZXN1bHQgY29udmVydFVURjE2VG9VVEY4KAotICAgIGNvbnN0IFVD
aGFyKiogc291cmNlU3RhcnQsIGNvbnN0IFVDaGFyKiBzb3VyY2VFbmQsIAotICAgIGNoYXIqKiB0
YXJnZXRTdGFydCwgY2hhciogdGFyZ2V0RW5kLCBib29sIHN0cmljdCkKLXsKLSAgICBDb252ZXJz
aW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnNpb25PSzsKLSAgICBjb25zdCBVQ2hhciogc291cmNl
ID0gKnNvdXJjZVN0YXJ0OwotICAgIGNoYXIqIHRhcmdldCA9ICp0YXJnZXRTdGFydDsKLSAgICB3
aGlsZSAoc291cmNlIDwgc291cmNlRW5kKSB7Ci0gICAgICAgIFVDaGFyMzIgY2g7Ci0gICAgICAg
IHVuc2lnbmVkIHNob3J0IGJ5dGVzVG9Xcml0ZSA9IDA7Ci0gICAgICAgIGNvbnN0IFVDaGFyMzIg
Ynl0ZU1hc2sgPSAweEJGOwotICAgICAgICBjb25zdCBVQ2hhcjMyIGJ5dGVNYXJrID0gMHg4MDsg
Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBvbGRTb3VyY2UgPSBzb3VyY2U7IC8vIEluIGNhc2Ugd2Ug
aGF2ZSB0byBiYWNrIHVwIGJlY2F1c2Ugb2YgdGFyZ2V0IG92ZXJmbG93LgotICAgICAgICBjaCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigqc291cmNlKyspOwotICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgc3Vycm9nYXRlIHBhaXIsIGNvbnZlcnQgdG8gVUNoYXIzMiBmaXJzdC4KLSAgICAg
ICAgaWYgKGNoID49IDB4RDgwMCAmJiBjaCA8PSAweERCRkYpIHsKLSAgICAgICAgICAgIC8vIElm
IHRoZSAxNiBiaXRzIGZvbGxvd2luZyB0aGUgaGlnaCBzdXJyb2dhdGUgYXJlIGluIHRoZSBzb3Vy
Y2UgYnVmZmVyLi4uCi0gICAgICAgICAgICBpZiAoc291cmNlIDwgc291cmNlRW5kKSB7Ci0gICAg
ICAgICAgICAgICAgVUNoYXIzMiBjaDIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oKnNv
dXJjZSk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhIGxvdyBzdXJyb2dhdGUsIGNvbnZl
cnQgdG8gVUNoYXIzMi4KLSAgICAgICAgICAgICAgICBpZiAoY2gyID49IDB4REMwMCAmJiBjaDIg
PD0gMHhERkZGKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gKChjaCAtIDB4RDgwMCkgPDwg
MTApICsgKGNoMiAtIDB4REMwMCkgKyAweDAwMTAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICsr
c291cmNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0KSB7IC8vIGl0J3MgYW4g
dW5wYWlyZWQgaGlnaCBzdXJyb2dhdGUKLSAgICAgICAgICAgICAgICAgICAgLS1zb3VyY2U7IC8v
IHJldHVybiB0byB0aGUgaWxsZWdhbCB2YWx1ZSBpdHNlbGYKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gc291cmNlSWxsZWdhbDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsgLy8gV2UgZG9uJ3QgaGF2ZSB0aGUg
MTYgYml0cyBmb2xsb3dpbmcgdGhlIGhpZ2ggc3Vycm9nYXRlLgotICAgICAgICAgICAgICAgIC0t
c291cmNlOyAvLyByZXR1cm4gdG8gdGhlIGhpZ2ggc3Vycm9nYXRlCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gc291cmNlRXhoYXVzdGVkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCkgewotICAgICAgICAgICAgLy8gVVRG
LTE2IHN1cnJvZ2F0ZSB2YWx1ZXMgYXJlIGlsbGVnYWwgaW4gVVRGLTMyCi0gICAgICAgICAgICBp
ZiAoY2ggPj0gMHhEQzAwICYmIGNoIDw9IDB4REZGRikgewotICAgICAgICAgICAgICAgIC0tc291
cmNlOyAvLyByZXR1cm4gdG8gdGhlIGlsbGVnYWwgdmFsdWUgaXRzZWxmCi0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gc291cmNlSWxsZWdhbDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBGaWd1cmUgb3V0IGhvdyBtYW55IGJ5dGVz
IHRoZSByZXN1bHQgd2lsbCByZXF1aXJlCi0gICAgICAgIGlmIChjaCA8IChVQ2hhcjMyKTB4ODAp
IHsKLSAgICAgICAgICAgIGJ5dGVzVG9Xcml0ZSA9IDE7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2gg
PCAoVUNoYXIzMikweDgwMCkgewotICAgICAgICAgICAgYnl0ZXNUb1dyaXRlID0gMjsKLSAgICAg
ICAgfSBlbHNlIGlmIChjaCA8IChVQ2hhcjMyKTB4MTAwMDApIHsKLSAgICAgICAgICAgIGJ5dGVz
VG9Xcml0ZSA9IDM7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2ggPCAoVUNoYXIzMikweDExMDAwMCkg
ewotICAgICAgICAgICAgYnl0ZXNUb1dyaXRlID0gNDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGJ5dGVzVG9Xcml0ZSA9IDM7Ci0gICAgICAgICAgICBjaCA9IHJlcGxhY2VtZW50Q2hh
cmFjdGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgdGFyZ2V0ICs9IGJ5dGVzVG9Xcml0ZTsKLSAg
ICAgICAgaWYgKHRhcmdldCA+IHRhcmdldEVuZCkgewotICAgICAgICAgICAgc291cmNlID0gb2xk
U291cmNlOyAvLyBCYWNrIHVwIHNvdXJjZSBwb2ludGVyIQotICAgICAgICAgICAgdGFyZ2V0IC09
IGJ5dGVzVG9Xcml0ZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRhcmdldEV4aGF1c3RlZDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoYnl0ZXNUb1dyaXRl
KSB7IC8vIG5vdGU6IGV2ZXJ5dGhpbmcgZmFsbHMgdGhyb3VnaC4KLSAgICAgICAgICAgIGNhc2Ug
NDogKi0tdGFyZ2V0ID0gKGNoYXIpKChjaCB8IGJ5dGVNYXJrKSAmIGJ5dGVNYXNrKTsgY2ggPj49
IDY7Ci0gICAgICAgICAgICBjYXNlIDM6ICotLXRhcmdldCA9IChjaGFyKSgoY2ggfCBieXRlTWFy
aykgJiBieXRlTWFzayk7IGNoID4+PSA2OwotICAgICAgICAgICAgY2FzZSAyOiAqLS10YXJnZXQg
PSAoY2hhcikoKGNoIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2spOyBjaCA+Pj0gNjsKLSAgICAgICAg
ICAgIGNhc2UgMTogKi0tdGFyZ2V0ID0gIChjaGFyKShjaCB8IGZpcnN0Qnl0ZU1hcmtbYnl0ZXNU
b1dyaXRlXSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGFyZ2V0ICs9IGJ5dGVzVG9Xcml0ZTsKLSAg
ICB9Ci0gICAgKnNvdXJjZVN0YXJ0ID0gc291cmNlOwotICAgICp0YXJnZXRTdGFydCA9IHRhcmdl
dDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGgg
dGhlIGxlbmd0aCBwcmUtZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYnl0ZS4KLS8vIElmIHByZXNl
bnRlZCB3aXRoIGEgbGVuZ3RoID4gNCwgdGhpcyByZXR1cm5zIGZhbHNlLiAgVGhlIFVuaWNvZGUK
LS8vIGRlZmluaXRpb24gb2YgVVRGLTggZ29lcyB1cCB0byA0LWJ5dGUgc2VxdWVuY2VzLgotc3Rh
dGljIGJvb2wgaXNMZWdhbFVURjgoY29uc3QgdW5zaWduZWQgY2hhciogc291cmNlLCBpbnQgbGVu
Z3RoKQotewotICAgIHVuc2lnbmVkIGNoYXIgYTsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBz
cmNwdHIgPSBzb3VyY2UgKyBsZW5ndGg7Ci0gICAgc3dpdGNoIChsZW5ndGgpIHsKLSAgICAgICAg
ZGVmYXVsdDogcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgZmFsbHMg
dGhyb3VnaCB3aGVuICJ0cnVlIi4uLgotICAgICAgICBjYXNlIDQ6IGlmICgoYSA9ICgqLS1zcmNw
dHIpKSA8IDB4ODAgfHwgYSA+IDB4QkYpIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSAzOiBp
ZiAoKGEgPSAoKi0tc3JjcHRyKSkgPCAweDgwIHx8IGEgPiAweEJGKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGNhc2UgMjogaWYgKChhID0gKCotLXNyY3B0cikpID4gMHhCRikgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIHN3aXRjaCAoKnNvdXJjZSkgewotICAgICAgICAgICAgLy8gbm8gZmFsbC10
aHJvdWdoIGluIHRoaXMgaW5uZXIgc3dpdGNoCi0gICAgICAgICAgICBjYXNlIDB4RTA6IGlmIChh
IDwgMHhBMCkgcmV0dXJuIGZhbHNlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHhFRDogaWYg
KGEgPiAweDlGKSByZXR1cm4gZmFsc2U7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweEYwOiBp
ZiAoYSA8IDB4OTApIHJldHVybiBmYWxzZTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4RjQ6
IGlmIChhID4gMHg4RikgcmV0dXJuIGZhbHNlOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
ICAgaWYgKGEgPCAweDgwKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNl
IDE6IGlmICgqc291cmNlID49IDB4ODAgJiYgKnNvdXJjZSA8IDB4QzIpIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKCpzb3VyY2UgPiAweEY0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIE1hZ2ljIHZhbHVlcyBzdWJ0cmFjdGVkIGZyb20gYSBi
dWZmZXIgdmFsdWUgZHVyaW5nIFVURjggY29udmVyc2lvbi4KLS8vIFRoaXMgdGFibGUgY29udGFp
bnMgYXMgbWFueSB2YWx1ZXMgYXMgdGhlcmUgbWlnaHQgYmUgdHJhaWxpbmcgYnl0ZXMKLS8vIGlu
IGEgVVRGLTggc2VxdWVuY2UuCi1zdGF0aWMgY29uc3QgVUNoYXIzMiBvZmZzZXRzRnJvbVVURjhb
Nl0gPSB7IDB4MDAwMDAwMDBVTCwgMHgwMDAwMzA4MFVMLCAweDAwMEUyMDgwVUwsIAotICAgICAg
ICAgICAgMHgwM0M4MjA4MFVMLCAweEZBMDgyMDgwVUwsIDB4ODIwODIwODBVTCB9OwotCi1zdGF0
aWMgaW5saW5lIFVDaGFyMzIgcmVhZFVURjhTZXF1ZW5jZShjb25zdCBjaGFyKiYgc2VxdWVuY2Us
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IDA7Ci0KLSAgICAv
LyBUaGUgY2FzZXMgYWxsIGZhbGwgdGhyb3VnaC4KLSAgICBzd2l0Y2ggKGxlbmd0aCkgewotICAg
ICAgICBjYXNlIDY6IGNoYXJhY3RlciArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqc2Vx
dWVuY2UrKyk7IGNoYXJhY3RlciA8PD0gNjsKLSAgICAgICAgY2FzZSA1OiBjaGFyYWN0ZXIgKz0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKnNlcXVlbmNlKyspOyBjaGFyYWN0ZXIgPDw9IDY7
Ci0gICAgICAgIGNhc2UgNDogY2hhcmFjdGVyICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KCpzZXF1ZW5jZSsrKTsgY2hhcmFjdGVyIDw8PSA2OwotICAgICAgICBjYXNlIDM6IGNoYXJhY3Rl
ciArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqc2VxdWVuY2UrKyk7IGNoYXJhY3RlciA8
PD0gNjsKLSAgICAgICAgY2FzZSAyOiBjaGFyYWN0ZXIgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oKnNlcXVlbmNlKyspOyBjaGFyYWN0ZXIgPDw9IDY7Ci0gICAgICAgIGNhc2UgMTogY2hh
cmFjdGVyICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpzZXF1ZW5jZSsrKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gY2hhcmFjdGVyIC0gb2Zmc2V0c0Zyb21VVEY4W2xlbmd0aCAtIDFdOwot
fQotCi1Db252ZXJzaW9uUmVzdWx0IGNvbnZlcnRVVEY4VG9VVEYxNigKLSAgICBjb25zdCBjaGFy
Kiogc291cmNlU3RhcnQsIGNvbnN0IGNoYXIqIHNvdXJjZUVuZCwgCi0gICAgVUNoYXIqKiB0YXJn
ZXRTdGFydCwgVUNoYXIqIHRhcmdldEVuZCwgYm9vbCBzdHJpY3QpCi17Ci0gICAgQ29udmVyc2lv
blJlc3VsdCByZXN1bHQgPSBjb252ZXJzaW9uT0s7Ci0gICAgY29uc3QgY2hhciogc291cmNlID0g
KnNvdXJjZVN0YXJ0OwotICAgIFVDaGFyKiB0YXJnZXQgPSAqdGFyZ2V0U3RhcnQ7Ci0gICAgd2hp
bGUgKHNvdXJjZSA8IHNvdXJjZUVuZCkgewotICAgICAgICBpbnQgdXRmOFNlcXVlbmNlTGVuZ3Ro
ID0gaW5saW5lVVRGOFNlcXVlbmNlTGVuZ3RoKCpzb3VyY2UpOwotICAgICAgICBpZiAoc291cmNl
RW5kIC0gc291cmNlIDwgdXRmOFNlcXVlbmNlTGVuZ3RoKSAgewotICAgICAgICAgICAgcmVzdWx0
ID0gc291cmNlRXhoYXVzdGVkOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gRG8gdGhpcyBjaGVjayB3aGV0aGVyIGxlbmllbnQgb3Igc3RyaWN0Ci0gICAgICAgIGlm
ICghaXNMZWdhbFVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc291
cmNlKSwgdXRmOFNlcXVlbmNlTGVuZ3RoKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gc291cmNl
SWxsZWdhbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgVUNoYXIz
MiBjaGFyYWN0ZXIgPSByZWFkVVRGOFNlcXVlbmNlKHNvdXJjZSwgdXRmOFNlcXVlbmNlTGVuZ3Ro
KTsKLQotICAgICAgICBpZiAodGFyZ2V0ID49IHRhcmdldEVuZCkgewotICAgICAgICAgICAgc291
cmNlIC09IHV0ZjhTZXF1ZW5jZUxlbmd0aDsgLy8gQmFjayB1cCBzb3VyY2UgcG9pbnRlciEKLSAg
ICAgICAgICAgIHJlc3VsdCA9IHRhcmdldEV4aGF1c3RlZDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKLSAgICAgICAg
ICAgIC8vIFVURi0xNiBzdXJyb2dhdGUgdmFsdWVzIGFyZSBpbGxlZ2FsIGluIFVURi0zMgotICAg
ICAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSAtPSB1dGY4U2VxdWVu
Y2VMZW5ndGg7IC8vIHJldHVybiB0byB0aGUgaWxsZWdhbCB2YWx1ZSBpdHNlbGYKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gc291cmNlSWxsZWdhbDsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICp0YXJn
ZXQrKyA9IHJlcGxhY2VtZW50Q2hhcmFjdGVyOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgKnRhcmdldCsrID0gY2hhcmFjdGVyOyAvLyBub3JtYWwgY2FzZQotICAgICAgICB9
IGVsc2UgaWYgKFVfSVNfU1VQUExFTUVOVEFSWShjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICAv
LyB0YXJnZXQgaXMgYSBjaGFyYWN0ZXIgaW4gcmFuZ2UgMHhGRkZGIC0gMHgxMEZGRkYKLSAgICAg
ICAgICAgIGlmICh0YXJnZXQgKyAxID49IHRhcmdldEVuZCkgewotICAgICAgICAgICAgICAgIHNv
dXJjZSAtPSB1dGY4U2VxdWVuY2VMZW5ndGg7IC8vIEJhY2sgdXAgc291cmNlIHBvaW50ZXIhCi0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0RXhoYXVzdGVkOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnRhcmdldCsrID0gVTE2X0xFQUQo
Y2hhcmFjdGVyKTsKLSAgICAgICAgICAgICp0YXJnZXQrKyA9IFUxNl9UUkFJTChjaGFyYWN0ZXIp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHN0cmljdCkgewotICAgICAgICAg
ICAgICAgIHNvdXJjZSAtPSB1dGY4U2VxdWVuY2VMZW5ndGg7IC8vIHJldHVybiB0byB0aGUgc3Rh
cnQKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzb3VyY2VJbGxlZ2FsOwotICAgICAgICAgICAg
ICAgIGJyZWFrOyAvLyBCYWlsIG91dDsgc2hvdWxkbid0IGNvbnRpbnVlCi0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAqdGFyZ2V0KysgPSByZXBsYWNlbWVudENoYXJhY3RlcjsK
LSAgICAgICAgfQotICAgIH0KLSAgICAqc291cmNlU3RhcnQgPSBzb3VyY2U7Ci0gICAgKnRhcmdl
dFN0YXJ0ID0gdGFyZ2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXVuc2lnbmVkIGNhbGN1
bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhGcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhLCBjb25zdCBj
aGFyKiBkYXRhRW5kLCB1bnNpZ25lZCYgZGF0YUxlbmd0aCwgdW5zaWduZWQmIHV0ZjE2TGVuZ3Ro
KQotewotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTdHJpbmdIYXNo
ZXIgc3RyaW5nSGFzaGVyOwotICAgIGRhdGFMZW5ndGggPSAwOwotICAgIHV0ZjE2TGVuZ3RoID0g
MDsKLQotICAgIHdoaWxlIChkYXRhIDwgZGF0YUVuZCB8fCAoIWRhdGFFbmQgJiYgKmRhdGEpKSB7
Ci0gICAgICAgIGlmIChpc0FTQ0lJKCpkYXRhKSkgewotICAgICAgICAgICAgc3RyaW5nSGFzaGVy
LmFkZENoYXJhY3RlcigqZGF0YSsrKTsKLSAgICAgICAgICAgIGRhdGFMZW5ndGgrKzsKLSAgICAg
ICAgICAgIHV0ZjE2TGVuZ3RoKys7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGludCB1dGY4U2VxdWVuY2VMZW5ndGggPSBpbmxpbmVVVEY4U2VxdWVuY2VMZW5n
dGhOb25BU0NJSSgqZGF0YSk7Ci0gICAgICAgIGRhdGFMZW5ndGggKz0gdXRmOFNlcXVlbmNlTGVu
Z3RoOwotCi0gICAgICAgIGlmICghZGF0YUVuZCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDE7IGkgPCB1dGY4U2VxdWVuY2VMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGlmICgh
ZGF0YVtpXSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAoZGF0YUVuZCAtIGRhdGEgPCB1dGY4U2VxdWVuY2VMZW5ndGgpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAoIWlzTGVnYWxVVEY4KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCB1dGY4U2VxdWVuY2VMZW5ndGgp
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBy
ZWFkVVRGOFNlcXVlbmNlKGRhdGEsIHV0ZjhTZXF1ZW5jZUxlbmd0aCk7Ci0gICAgICAgIEFTU0VS
VCghaXNBU0NJSShjaGFyYWN0ZXIpKTsKLQotICAgICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVy
KSkgewotICAgICAgICAgICAgLy8gVVRGLTE2IHN1cnJvZ2F0ZSB2YWx1ZXMgYXJlIGlsbGVnYWwg
aW4gVVRGLTMyCi0gICAgICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY2hhcmFjdGVyKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHN0cmluZ0hhc2hlci5hZGRDaGFy
YWN0ZXIoc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3RlcikpOyAvLyBub3JtYWwgY2FzZQotICAg
ICAgICAgICAgdXRmMTZMZW5ndGgrKzsKLSAgICAgICAgfSBlbHNlIGlmIChVX0lTX1NVUFBMRU1F
TlRBUlkoY2hhcmFjdGVyKSkgewotICAgICAgICAgICAgc3RyaW5nSGFzaGVyLmFkZENoYXJhY3Rl
cnMoc3RhdGljX2Nhc3Q8VUNoYXI+KFUxNl9MRUFEKGNoYXJhY3RlcikpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VUNoYXI+KFUxNl9UUkFJTChj
aGFyYWN0ZXIpKSk7Ci0gICAgICAgICAgICB1dGYxNkxlbmd0aCArPSAyOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBzdHJpbmdIYXNo
ZXIuaGFzaCgpOwotfQotCi1ib29sIGVxdWFsVVRGMTZXaXRoVVRGOChjb25zdCBVQ2hhciogYSwg
Y29uc3QgVUNoYXIqIGFFbmQsIGNvbnN0IGNoYXIqIGIsIGNvbnN0IGNoYXIqIGJFbmQpCi17Ci0g
ICAgd2hpbGUgKGIgPCBiRW5kKSB7Ci0gICAgICAgIGlmIChpc0FTQ0lJKCpiKSkgewotICAgICAg
ICAgICAgaWYgKCphKysgIT0gKmIrKykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCB1dGY4U2VxdWVu
Y2VMZW5ndGggPSBpbmxpbmVVVEY4U2VxdWVuY2VMZW5ndGhOb25BU0NJSSgqYik7Ci0KLSAgICAg
ICAgaWYgKGJFbmQgLSBiIDwgdXRmOFNlcXVlbmNlTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmICghaXNMZWdhbFVURjgocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oYiksIHV0ZjhTZXF1ZW5jZUxlbmd0aCkpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLQotICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IHJlYWRVVEY4U2VxdWVuY2Uo
YiwgdXRmOFNlcXVlbmNlTGVuZ3RoKTsKLSAgICAgICAgQVNTRVJUKCFpc0FTQ0lJKGNoYXJhY3Rl
cikpOwotCi0gICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICAv
LyBVVEYtMTYgc3Vycm9nYXRlIHZhbHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYtMzIKLSAgICAgICAg
ICAgIGlmIChVX0lTX1NVUlJPR0FURShjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGlmICgqYSsrICE9IGNoYXJhY3RlcikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoVV9JU19TVVBQTEVNRU5UQVJZ
KGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAgIGlmICgqYSsrICE9IFUxNl9MRUFEKGNoYXJhY3Rl
cikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCphKysg
IT0gVTE2X1RSQUlMKGNoYXJhY3RlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gYSA9PSBhRW5kOwotfQotCi19IC8vIG5hbWVzcGFjZSBVbmljb2RlCi19IC8vIG5hbWVz
cGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOC5oIGIvU291
cmNlL1dURi93dGYvdW5pY29kZS9VVEY4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU5ZjY5OTRiZWNmMjdiODM3YTI5MjczZDA1ODgxY2ZlZTAwYmYxZWEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdW5pY29kZS9V
VEY4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
V1RGX1VURjhfaAotI2RlZmluZSBXVEZfVVRGOF9oCi0KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
bmljb2RlLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotbmFtZXNwYWNlIFVuaWNvZGUgewotCi0gICAg
Ly8gR2l2ZW4gYSBmaXJzdCBieXRlLCBnaXZlcyB0aGUgbGVuZ3RoIG9mIHRoZSBVVEYtOCBzZXF1
ZW5jZSBpdCBiZWdpbnMuCi0gICAgLy8gUmV0dXJucyAwIGZvciBieXRlcyB0aGF0IGFyZSBub3Qg
bGVnYWwgc3RhcnRzIG9mIFVURi04IHNlcXVlbmNlcy4KLSAgICAvLyBPbmx5IGFsbG93cyBzZXF1
ZW5jZXMgb2YgdXAgdG8gNCBieXRlcywgc2luY2UgdGhhdCB3b3JrcyBmb3IgYWxsIFVuaWNvZGUg
Y2hhcmFjdGVycyAoVS0wMDAwMDAwMCB0byBVLTAwMTBGRkZGKS4KLSAgICBpbnQgVVRGOFNlcXVl
bmNlTGVuZ3RoKGNoYXIpOwotCi0gICAgLy8gVGFrZXMgYSBudWxsLXRlcm1pbmF0ZWQgQy1zdHls
ZSBzdHJpbmcgd2l0aCBhIFVURi04IHNlcXVlbmNlIGluIGl0IGFuZCBjb252ZXJ0cyBpdCB0byBh
IGNoYXJhY3Rlci4KLSAgICAvLyBPbmx5IGFsbG93cyBVbmljb2RlIGNoYXJhY3RlcnMgKFUtMDAw
MDAwMDAgdG8gVS0wMDEwRkZGRikuCi0gICAgLy8gUmV0dXJucyAtMSBpZiB0aGUgc2VxdWVuY2Ug
aXMgbm90IHZhbGlkIChpbmNsdWRpbmcgcHJlc2VuY2Ugb2YgZXh0cmEgYnl0ZXMpLgotICAgIGlu
dCBkZWNvZGVVVEY4U2VxdWVuY2UoY29uc3QgY2hhciopOwotCi0gICAgdHlwZWRlZiBlbnVtIHsK
LSAgICAgICAgICAgIGNvbnZlcnNpb25PSywgICAgICAgLy8gY29udmVyc2lvbiBzdWNjZXNzZnVs
Ci0gICAgICAgICAgICBzb3VyY2VFeGhhdXN0ZWQsICAgIC8vIHBhcnRpYWwgY2hhcmFjdGVyIGlu
IHNvdXJjZSwgYnV0IGhpdCBlbmQKLSAgICAgICAgICAgIHRhcmdldEV4aGF1c3RlZCwgICAgLy8g
aW5zdWZmLiByb29tIGluIHRhcmdldCBmb3IgY29udmVyc2lvbgotICAgICAgICAgICAgc291cmNl
SWxsZWdhbCAgICAgICAvLyBzb3VyY2Ugc2VxdWVuY2UgaXMgaWxsZWdhbC9tYWxmb3JtZWQKLSAg
ICB9IENvbnZlcnNpb25SZXN1bHQ7Ci0KLSAgICAvLyBUaGVzZSBjb252ZXJzaW9uIGZ1bmN0aW9u
cyB0YWtlIGEgInN0cmljdCIgYXJndW1lbnQuIFdoZW4gdGhpcwotICAgIC8vIGZsYWcgaXMgc2V0
IHRvIHN0cmljdCwgYm90aCBpcnJlZ3VsYXIgc2VxdWVuY2VzIGFuZCBpc29sYXRlZCBzdXJyb2dh
dGVzCi0gICAgLy8gd2lsbCBjYXVzZSBhbiBlcnJvci4gIFdoZW4gdGhlIGZsYWcgaXMgc2V0IHRv
IGxlbmllbnQsIGJvdGggaXJyZWd1bGFyCi0gICAgLy8gc2VxdWVuY2VzIGFuZCBpc29sYXRlZCBz
dXJyb2dhdGVzIGFyZSBjb252ZXJ0ZWQuCi0gICAgLy8gCi0gICAgLy8gV2hldGhlciB0aGUgZmxh
ZyBpcyBzdHJpY3Qgb3IgbGVuaWVudCwgYWxsIGlsbGVnYWwgc2VxdWVuY2VzIHdpbGwgY2F1c2UK
LSAgICAvLyBhbiBlcnJvciByZXR1cm4uIFRoaXMgaW5jbHVkZXMgc2VxdWVuY2VzIHN1Y2ggYXM6
IDxGNCA5MCA4MCA4MD4sIDxDMCA4MD4sCi0gICAgLy8gb3IgPEEwPiBpbiBVVEYtOCwgYW5kIHZh
bHVlcyBhYm92ZSAweDEwRkZGRiBpbiBVVEYtMzIuIENvbmZvcm1hbnQgY29kZQotICAgIC8vIG11
c3QgY2hlY2sgZm9yIGlsbGVnYWwgc2VxdWVuY2VzLgotICAgIC8vIAotICAgIC8vIFdoZW4gdGhl
IGZsYWcgaXMgc2V0IHRvIGxlbmllbnQsIGNoYXJhY3RlcnMgb3ZlciAweDEwRkZGRiBhcmUgY29u
dmVydGVkCi0gICAgLy8gdG8gdGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlcjsgb3RoZXJ3aXNlICh3
aGVuIHRoZSBmbGFnIGlzIHNldCB0byBzdHJpY3QpCi0gICAgLy8gdGhleSBjb25zdGl0dXRlIGFu
IGVycm9yLgotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIENvbnZlcnNpb25SZXN1bHQgY29udmVy
dFVURjhUb1VURjE2KAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogc291cmNlU3Rh
cnQsIGNvbnN0IGNoYXIqIHNvdXJjZUVuZCwgCi0gICAgICAgICAgICAgICAgICAgIFVDaGFyKiog
dGFyZ2V0U3RhcnQsIFVDaGFyKiB0YXJnZXRFbmQsIGJvb2wgc3RyaWN0ID0gdHJ1ZSk7Ci0KLSAg
ICBDb252ZXJzaW9uUmVzdWx0IGNvbnZlcnRMYXRpbjFUb1VURjgoCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0IExDaGFyKiogc291cmNlU3RhcnQsIGNvbnN0IExDaGFyKiBzb3VyY2VFbmQsIAot
ICAgICAgICAgICAgICAgICAgICBjaGFyKiogdGFyZ2V0U3RhcnQsIGNoYXIqIHRhcmdldEVuZCk7
Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0VVRGMTZU
b1VURjgoCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiogc291cmNlU3RhcnQsIGNv
bnN0IFVDaGFyKiBzb3VyY2VFbmQsIAotICAgICAgICAgICAgICAgICAgICBjaGFyKiogdGFyZ2V0
U3RhcnQsIGNoYXIqIHRhcmdldEVuZCwgYm9vbCBzdHJpY3QgPSB0cnVlKTsKLQotICAgIHVuc2ln
bmVkIGNhbGN1bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhGcm9tVVRGOChjb25zdCBjaGFyKiBkYXRh
LCBjb25zdCBjaGFyKiBkYXRhRW5kLCB1bnNpZ25lZCYgZGF0YUxlbmd0aCwgdW5zaWduZWQmIHV0
ZjE2TGVuZ3RoKTsKLQotICAgIGJvb2wgZXF1YWxVVEYxNldpdGhVVEY4KGNvbnN0IFVDaGFyKiBh
LCBjb25zdCBVQ2hhciogYUVuZCwgY29uc3QgY2hhciogYiwgY29uc3QgY2hhciogYkVuZCk7Ci0K
LX0gLy8gbmFtZXNwYWNlIFVuaWNvZGUKLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8g
V1RGX1VURjhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9XVEZfVVRGOC5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1dURl9VVEY4LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNGMx
NzEyYjExYjM3ZjBmZjQzZWFhNWNkODRjN2IyOTcxY2Q5NTY2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvdW5pY29kZS9XVEZfVVRGOC5jcHAKQEAgLTAsMCArMSw0NDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXVEZfVVRGOC5oIgor
CisjaW5jbHVkZSAiQVNDSUlDVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorCituYW1lc3BhY2UgV1RG
IHsKK25hbWVzcGFjZSBVbmljb2RlIHsKKworaW5saW5lIGludCBpbmxpbmVVVEY4U2VxdWVuY2VM
ZW5ndGhOb25BU0NJSShjaGFyIGIwKQoreworICAgIGlmICgoYjAgJiAweEMwKSAhPSAweEMwKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoKGIwICYgMHhFMCkgPT0gMHhDMCkKKyAgICAgICAg
cmV0dXJuIDI7CisgICAgaWYgKChiMCAmIDB4RjApID09IDB4RTApCisgICAgICAgIHJldHVybiAz
OworICAgIGlmICgoYjAgJiAweEY4KSA9PSAweEYwKQorICAgICAgICByZXR1cm4gNDsKKyAgICBy
ZXR1cm4gMDsKK30KKworaW5saW5lIGludCBpbmxpbmVVVEY4U2VxdWVuY2VMZW5ndGgoY2hhciBi
MCkKK3sKKyAgICByZXR1cm4gaXNBU0NJSShiMCkgPyAxIDogaW5saW5lVVRGOFNlcXVlbmNlTGVu
Z3RoTm9uQVNDSUkoYjApOworfQorCitpbnQgVVRGOFNlcXVlbmNlTGVuZ3RoKGNoYXIgYjApCit7
CisgICAgcmV0dXJuIGlzQVNDSUkoYjApID8gMSA6IGlubGluZVVURjhTZXF1ZW5jZUxlbmd0aE5v
bkFTQ0lJKGIwKTsKK30KKworaW50IGRlY29kZVVURjhTZXF1ZW5jZShjb25zdCBjaGFyKiBzZXF1
ZW5jZSkKK3sKKyAgICAvLyBIYW5kbGUgMC1ieXRlIHNlcXVlbmNlcyAobmV2ZXIgdmFsaWQpLgor
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYjAgPSBzZXF1ZW5jZVswXTsKKyAgICBjb25zdCBpbnQg
bGVuZ3RoID0gaW5saW5lVVRGOFNlcXVlbmNlTGVuZ3RoKGIwKTsKKyAgICBpZiAobGVuZ3RoID09
IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8vIEhhbmRsZSAxLWJ5dGUgc2VxdWVuY2Vz
IChwbGFpbiBBU0NJSSkuCisgICAgY29uc3QgdW5zaWduZWQgY2hhciBiMSA9IHNlcXVlbmNlWzFd
OworICAgIGlmIChsZW5ndGggPT0gMSkgeworICAgICAgICBpZiAoYjEpCisgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBiMDsKKyAgICB9CisKKyAgICAvLyBIYW5kbGUgMi1i
eXRlIHNlcXVlbmNlcy4KKyAgICBpZiAoKGIxICYgMHhDMCkgIT0gMHg4MCkKKyAgICAgICAgcmV0
dXJuIC0xOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYjIgPSBzZXF1ZW5jZVsyXTsKKyAgICBp
ZiAobGVuZ3RoID09IDIpIHsKKyAgICAgICAgaWYgKGIyKQorICAgICAgICAgICAgcmV0dXJuIC0x
OworICAgICAgICBjb25zdCBpbnQgYyA9ICgoYjAgJiAweDFGKSA8PCA2KSB8IChiMSAmIDB4M0Yp
OworICAgICAgICBpZiAoYyA8IDB4ODApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
IHJldHVybiBjOworICAgIH0KKworICAgIC8vIEhhbmRsZSAzLWJ5dGUgc2VxdWVuY2VzLgorICAg
IGlmICgoYjIgJiAweEMwKSAhPSAweDgwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgY29uc3Qg
dW5zaWduZWQgY2hhciBiMyA9IHNlcXVlbmNlWzNdOworICAgIGlmIChsZW5ndGggPT0gMykgewor
ICAgICAgICBpZiAoYjMpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGNvbnN0IGlu
dCBjID0gKChiMCAmIDB4RikgPDwgMTIpIHwgKChiMSAmIDB4M0YpIDw8IDYpIHwgKGIyICYgMHgz
Rik7CisgICAgICAgIGlmIChjIDwgMHg4MDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIC8vIFVURi0xNiBzdXJyb2dhdGVzIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gVVRGLTggZGF0
YS4KKyAgICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKQorICAgICAgICAgICAg
cmV0dXJuIC0xOworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisKKyAgICAvLyBIYW5kbGUgNC1i
eXRlIHNlcXVlbmNlcy4KKyAgICBpZiAoKGIzICYgMHhDMCkgIT0gMHg4MCkKKyAgICAgICAgcmV0
dXJuIC0xOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYjQgPSBzZXF1ZW5jZVs0XTsKKyAgICBp
ZiAobGVuZ3RoID09IDQpIHsKKyAgICAgICAgaWYgKGI0KQorICAgICAgICAgICAgcmV0dXJuIC0x
OworICAgICAgICBjb25zdCBpbnQgYyA9ICgoYjAgJiAweDcpIDw8IDE4KSB8ICgoYjEgJiAweDNG
KSA8PCAxMikgfCAoKGIyICYgMHgzRikgPDwgNikgfCAoYjMgJiAweDNGKTsKKyAgICAgICAgaWYg
KGMgPCAweDEwMDAwIHx8IGMgPiAweDEwRkZGRikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg
ICAgICAgcmV0dXJuIGM7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisvLyBPbmNlIHRo
ZSBiaXRzIGFyZSBzcGxpdCBvdXQgaW50byBieXRlcyBvZiBVVEYtOCwgdGhpcyBpcyBhIG1hc2sg
T1ItZWQKKy8vIGludG8gdGhlIGZpcnN0IGJ5dGUsIGRlcGVuZGluZyBvbiBob3cgbWFueSBieXRl
cyBmb2xsb3cuICBUaGVyZSBhcmUKKy8vIGFzIG1hbnkgZW50cmllcyBpbiB0aGlzIHRhYmxlIGFz
IHRoZXJlIGFyZSBVVEYtOCBzZXF1ZW5jZSB0eXBlcy4KKy8vIChJLmUuLCBvbmUgYnl0ZSBzZXF1
ZW5jZSwgdHdvIGJ5dGUuLi4gZXRjLikuIFJlbWVtYmVyIHRoYXQgc2VxdWVuY3MKKy8vIGZvciAq
bGVnYWwqIFVURi04IHdpbGwgYmUgNCBvciBmZXdlciBieXRlcyB0b3RhbC4KK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIGZpcnN0Qnl0ZU1hcmtbN10gPSB7IDB4MDAsIDB4MDAsIDB4QzAsIDB4
RTAsIDB4RjAsIDB4RjgsIDB4RkMgfTsKKworQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0TGF0aW4x
VG9VVEY4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExDaGFy
Kiogc291cmNlU3RhcnQsIGNvbnN0IExDaGFyKiBzb3VyY2VFbmQsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIqKiB0YXJnZXRTdGFydCwgY2hhciogdGFyZ2V0RW5k
KQoreworICAgIENvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gY29udmVyc2lvbk9LOworICAgIGNv
bnN0IExDaGFyKiBzb3VyY2UgPSAqc291cmNlU3RhcnQ7CisgICAgY2hhciogdGFyZ2V0ID0gKnRh
cmdldFN0YXJ0OworICAgIHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKKyAgICAgICAgVUNo
YXIzMiBjaDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgYnl0ZXNUb1dyaXRlID0gMDsKKyAgICAg
ICAgY29uc3QgVUNoYXIzMiBieXRlTWFzayA9IDB4QkY7CisgICAgICAgIGNvbnN0IFVDaGFyMzIg
Ynl0ZU1hcmsgPSAweDgwOyAKKyAgICAgICAgY29uc3QgTENoYXIqIG9sZFNvdXJjZSA9IHNvdXJj
ZTsgLy8gSW4gY2FzZSB3ZSBoYXZlIHRvIGJhY2sgdXAgYmVjYXVzZSBvZiB0YXJnZXQgb3ZlcmZs
b3cuCisgICAgICAgIGNoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KCpzb3VyY2UrKyk7
CisKKyAgICAgICAgLy8gRmlndXJlIG91dCBob3cgbWFueSBieXRlcyB0aGUgcmVzdWx0IHdpbGwg
cmVxdWlyZQorICAgICAgICBpZiAoY2ggPCAoVUNoYXIzMikweDgwKQorICAgICAgICAgICAgYnl0
ZXNUb1dyaXRlID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnl0ZXNUb1dyaXRlID0g
MjsKKworICAgICAgICB0YXJnZXQgKz0gYnl0ZXNUb1dyaXRlOworICAgICAgICBpZiAodGFyZ2V0
ID4gdGFyZ2V0RW5kKSB7CisgICAgICAgICAgICBzb3VyY2UgPSBvbGRTb3VyY2U7IC8vIEJhY2sg
dXAgc291cmNlIHBvaW50ZXIhCisgICAgICAgICAgICB0YXJnZXQgLT0gYnl0ZXNUb1dyaXRlOwor
ICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0RXhoYXVzdGVkOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChieXRlc1RvV3JpdGUpIHsgLy8gbm90ZTogZXZl
cnl0aGluZyBmYWxscyB0aHJvdWdoLgorICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAqLS10
YXJnZXQgPSAoY2hhcikoKGNoIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2spOworICAgICAgICAgICAg
Y2ggPj49IDY7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICotLXRhcmdldCA9ICAoY2hh
cikoY2ggfCBmaXJzdEJ5dGVNYXJrW2J5dGVzVG9Xcml0ZV0pOworICAgICAgICB9CisgICAgICAg
IHRhcmdldCArPSBieXRlc1RvV3JpdGU7CisgICAgfQorICAgICpzb3VyY2VTdGFydCA9IHNvdXJj
ZTsKKyAgICAqdGFyZ2V0U3RhcnQgPSB0YXJnZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Q29udmVyc2lvblJlc3VsdCBjb252ZXJ0VVRGMTZUb1VURjgoCisgICAgY29uc3QgVUNoYXIqKiBz
b3VyY2VTdGFydCwgY29uc3QgVUNoYXIqIHNvdXJjZUVuZCwgCisgICAgY2hhcioqIHRhcmdldFN0
YXJ0LCBjaGFyKiB0YXJnZXRFbmQsIGJvb2wgc3RyaWN0KQoreworICAgIENvbnZlcnNpb25SZXN1
bHQgcmVzdWx0ID0gY29udmVyc2lvbk9LOworICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UgPSAqc291
cmNlU3RhcnQ7CisgICAgY2hhciogdGFyZ2V0ID0gKnRhcmdldFN0YXJ0OworICAgIHdoaWxlIChz
b3VyY2UgPCBzb3VyY2VFbmQpIHsKKyAgICAgICAgVUNoYXIzMiBjaDsKKyAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgYnl0ZXNUb1dyaXRlID0gMDsKKyAgICAgICAgY29uc3QgVUNoYXIzMiBieXRlTWFz
ayA9IDB4QkY7CisgICAgICAgIGNvbnN0IFVDaGFyMzIgYnl0ZU1hcmsgPSAweDgwOyAKKyAgICAg
ICAgY29uc3QgVUNoYXIqIG9sZFNvdXJjZSA9IHNvdXJjZTsgLy8gSW4gY2FzZSB3ZSBoYXZlIHRv
IGJhY2sgdXAgYmVjYXVzZSBvZiB0YXJnZXQgb3ZlcmZsb3cuCisgICAgICAgIGNoID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KCpzb3VyY2UrKyk7CisgICAgICAgIC8vIElmIHdlIGhhdmUg
YSBzdXJyb2dhdGUgcGFpciwgY29udmVydCB0byBVQ2hhcjMyIGZpcnN0LgorICAgICAgICBpZiAo
Y2ggPj0gMHhEODAwICYmIGNoIDw9IDB4REJGRikgeworICAgICAgICAgICAgLy8gSWYgdGhlIDE2
IGJpdHMgZm9sbG93aW5nIHRoZSBoaWdoIHN1cnJvZ2F0ZSBhcmUgaW4gdGhlIHNvdXJjZSBidWZm
ZXIuLi4KKyAgICAgICAgICAgIGlmIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKKyAgICAgICAgICAg
ICAgICBVQ2hhcjMyIGNoMiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigqc291cmNlKTsK
KyAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGEgbG93IHN1cnJvZ2F0ZSwgY29udmVydCB0byBV
Q2hhcjMyLgorICAgICAgICAgICAgICAgIGlmIChjaDIgPj0gMHhEQzAwICYmIGNoMiA8PSAweERG
RkYpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAoKGNoIC0gMHhEODAwKSA8PCAxMCkgKyAo
Y2gyIC0gMHhEQzAwKSArIDB4MDAxMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgKytzb3VyY2U7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QpIHsgLy8gaXQncyBhbiB1bnBhaXJl
ZCBoaWdoIHN1cnJvZ2F0ZQorICAgICAgICAgICAgICAgICAgICAtLXNvdXJjZTsgLy8gcmV0dXJu
IHRvIHRoZSBpbGxlZ2FsIHZhbHVlIGl0c2VsZgorICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBzb3VyY2VJbGxlZ2FsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeyAvLyBXZSBkb24ndCBoYXZlIHRoZSAxNiBiaXRz
IGZvbGxvd2luZyB0aGUgaGlnaCBzdXJyb2dhdGUuCisgICAgICAgICAgICAgICAgLS1zb3VyY2U7
IC8vIHJldHVybiB0byB0aGUgaGlnaCBzdXJyb2dhdGUKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBzb3VyY2VFeGhhdXN0ZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAvLyBVVEYtMTYgc3Vy
cm9nYXRlIHZhbHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYtMzIKKyAgICAgICAgICAgIGlmIChjaCA+
PSAweERDMDAgJiYgY2ggPD0gMHhERkZGKSB7CisgICAgICAgICAgICAgICAgLS1zb3VyY2U7IC8v
IHJldHVybiB0byB0aGUgaWxsZWdhbCB2YWx1ZSBpdHNlbGYKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBzb3VyY2VJbGxlZ2FsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IG1hbnkgYnl0ZXMgdGhlIHJl
c3VsdCB3aWxsIHJlcXVpcmUKKyAgICAgICAgaWYgKGNoIDwgKFVDaGFyMzIpMHg4MCkgeworICAg
ICAgICAgICAgYnl0ZXNUb1dyaXRlID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChjaCA8IChVQ2hh
cjMyKTB4ODAwKSB7CisgICAgICAgICAgICBieXRlc1RvV3JpdGUgPSAyOworICAgICAgICB9IGVs
c2UgaWYgKGNoIDwgKFVDaGFyMzIpMHgxMDAwMCkgeworICAgICAgICAgICAgYnl0ZXNUb1dyaXRl
ID0gMzsKKyAgICAgICAgfSBlbHNlIGlmIChjaCA8IChVQ2hhcjMyKTB4MTEwMDAwKSB7CisgICAg
ICAgICAgICBieXRlc1RvV3JpdGUgPSA0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ynl0ZXNUb1dyaXRlID0gMzsKKyAgICAgICAgICAgIGNoID0gcmVwbGFjZW1lbnRDaGFyYWN0ZXI7
CisgICAgICAgIH0KKworICAgICAgICB0YXJnZXQgKz0gYnl0ZXNUb1dyaXRlOworICAgICAgICBp
ZiAodGFyZ2V0ID4gdGFyZ2V0RW5kKSB7CisgICAgICAgICAgICBzb3VyY2UgPSBvbGRTb3VyY2U7
IC8vIEJhY2sgdXAgc291cmNlIHBvaW50ZXIhCisgICAgICAgICAgICB0YXJnZXQgLT0gYnl0ZXNU
b1dyaXRlOworICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0RXhoYXVzdGVkOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChieXRlc1RvV3JpdGUpIHsgLy8g
bm90ZTogZXZlcnl0aGluZyBmYWxscyB0aHJvdWdoLgorICAgICAgICAgICAgY2FzZSA0OiAqLS10
YXJnZXQgPSAoY2hhcikoKGNoIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2spOyBjaCA+Pj0gNjsKKyAg
ICAgICAgICAgIGNhc2UgMzogKi0tdGFyZ2V0ID0gKGNoYXIpKChjaCB8IGJ5dGVNYXJrKSAmIGJ5
dGVNYXNrKTsgY2ggPj49IDY7CisgICAgICAgICAgICBjYXNlIDI6ICotLXRhcmdldCA9IChjaGFy
KSgoY2ggfCBieXRlTWFyaykgJiBieXRlTWFzayk7IGNoID4+PSA2OworICAgICAgICAgICAgY2Fz
ZSAxOiAqLS10YXJnZXQgPSAgKGNoYXIpKGNoIHwgZmlyc3RCeXRlTWFya1tieXRlc1RvV3JpdGVd
KTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gYnl0ZXNUb1dyaXRlOworICAgIH0KKyAg
ICAqc291cmNlU3RhcnQgPSBzb3VyY2U7CisgICAgKnRhcmdldFN0YXJ0ID0gdGFyZ2V0OworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbGVu
Z3RoIHByZS1kZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBieXRlLgorLy8gSWYgcHJlc2VudGVkIHdp
dGggYSBsZW5ndGggPiA0LCB0aGlzIHJldHVybnMgZmFsc2UuICBUaGUgVW5pY29kZQorLy8gZGVm
aW5pdGlvbiBvZiBVVEYtOCBnb2VzIHVwIHRvIDQtYnl0ZSBzZXF1ZW5jZXMuCitzdGF0aWMgYm9v
bCBpc0xlZ2FsVVRGOChjb25zdCB1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIGludCBsZW5ndGgpCit7
CisgICAgdW5zaWduZWQgY2hhciBhOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY3B0ciA9
IHNvdXJjZSArIGxlbmd0aDsKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgICAgICBkZWZhdWx0
OiByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBmYWxscyB0aHJvdWdo
IHdoZW4gInRydWUiLi4uCisgICAgICAgIGNhc2UgNDogaWYgKChhID0gKCotLXNyY3B0cikpIDwg
MHg4MCB8fCBhID4gMHhCRikgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIDM6IGlmICgoYSA9
ICgqLS1zcmNwdHIpKSA8IDB4ODAgfHwgYSA+IDB4QkYpIHJldHVybiBmYWxzZTsKKyAgICAgICAg
Y2FzZSAyOiBpZiAoKGEgPSAoKi0tc3JjcHRyKSkgPiAweEJGKSByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgc3dpdGNoICgqc291cmNlKSB7CisgICAgICAgICAgICAvLyBubyBmYWxsLXRocm91Z2gg
aW4gdGhpcyBpbm5lciBzd2l0Y2gKKyAgICAgICAgICAgIGNhc2UgMHhFMDogaWYgKGEgPCAweEEw
KSByZXR1cm4gZmFsc2U7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAweEVEOiBpZiAoYSA+IDB4
OUYpIHJldHVybiBmYWxzZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4RjA6IGlmIChhIDwg
MHg5MCkgcmV0dXJuIGZhbHNlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHhGNDogaWYgKGEg
PiAweDhGKSByZXR1cm4gZmFsc2U7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogICBpZiAo
YSA8IDB4ODApIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgMTogaWYg
KCpzb3VyY2UgPj0gMHg4MCAmJiAqc291cmNlIDwgMHhDMikgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBpZiAoKnNvdXJjZSA+IDB4RjQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8gTWFnaWMgdmFsdWVzIHN1YnRyYWN0ZWQgZnJvbSBhIGJ1ZmZlciB2
YWx1ZSBkdXJpbmcgVVRGOCBjb252ZXJzaW9uLgorLy8gVGhpcyB0YWJsZSBjb250YWlucyBhcyBt
YW55IHZhbHVlcyBhcyB0aGVyZSBtaWdodCBiZSB0cmFpbGluZyBieXRlcworLy8gaW4gYSBVVEYt
OCBzZXF1ZW5jZS4KK3N0YXRpYyBjb25zdCBVQ2hhcjMyIG9mZnNldHNGcm9tVVRGOFs2XSA9IHsg
MHgwMDAwMDAwMFVMLCAweDAwMDAzMDgwVUwsIDB4MDAwRTIwODBVTCwgCisgICAgICAgICAgICAw
eDAzQzgyMDgwVUwsIDB4RkEwODIwODBVTCwgMHg4MjA4MjA4MFVMIH07CisKK3N0YXRpYyBpbmxp
bmUgVUNoYXIzMiByZWFkVVRGOFNlcXVlbmNlKGNvbnN0IGNoYXIqJiBzZXF1ZW5jZSwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gMDsKKworICAgIC8vIFRoZSBj
YXNlcyBhbGwgZmFsbCB0aHJvdWdoLgorICAgIHN3aXRjaCAobGVuZ3RoKSB7CisgICAgICAgIGNh
c2UgNjogY2hhcmFjdGVyICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpzZXF1ZW5jZSsr
KTsgY2hhcmFjdGVyIDw8PSA2OworICAgICAgICBjYXNlIDU6IGNoYXJhY3RlciArPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPigqc2VxdWVuY2UrKyk7IGNoYXJhY3RlciA8PD0gNjsKKyAgICAg
ICAgY2FzZSA0OiBjaGFyYWN0ZXIgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKnNlcXVl
bmNlKyspOyBjaGFyYWN0ZXIgPDw9IDY7CisgICAgICAgIGNhc2UgMzogY2hhcmFjdGVyICs9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpzZXF1ZW5jZSsrKTsgY2hhcmFjdGVyIDw8PSA2Owor
ICAgICAgICBjYXNlIDI6IGNoYXJhY3RlciArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigq
c2VxdWVuY2UrKyk7IGNoYXJhY3RlciA8PD0gNjsKKyAgICAgICAgY2FzZSAxOiBjaGFyYWN0ZXIg
Kz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKnNlcXVlbmNlKyspOworICAgIH0KKworICAg
IHJldHVybiBjaGFyYWN0ZXIgLSBvZmZzZXRzRnJvbVVURjhbbGVuZ3RoIC0gMV07Cit9CisKK0Nv
bnZlcnNpb25SZXN1bHQgY29udmVydFVURjhUb1VURjE2KAorICAgIGNvbnN0IGNoYXIqKiBzb3Vy
Y2VTdGFydCwgY29uc3QgY2hhciogc291cmNlRW5kLCAKKyAgICBVQ2hhcioqIHRhcmdldFN0YXJ0
LCBVQ2hhciogdGFyZ2V0RW5kLCBib29sIHN0cmljdCkKK3sKKyAgICBDb252ZXJzaW9uUmVzdWx0
IHJlc3VsdCA9IGNvbnZlcnNpb25PSzsKKyAgICBjb25zdCBjaGFyKiBzb3VyY2UgPSAqc291cmNl
U3RhcnQ7CisgICAgVUNoYXIqIHRhcmdldCA9ICp0YXJnZXRTdGFydDsKKyAgICB3aGlsZSAoc291
cmNlIDwgc291cmNlRW5kKSB7CisgICAgICAgIGludCB1dGY4U2VxdWVuY2VMZW5ndGggPSBpbmxp
bmVVVEY4U2VxdWVuY2VMZW5ndGgoKnNvdXJjZSk7CisgICAgICAgIGlmIChzb3VyY2VFbmQgLSBz
b3VyY2UgPCB1dGY4U2VxdWVuY2VMZW5ndGgpICB7CisgICAgICAgICAgICByZXN1bHQgPSBzb3Vy
Y2VFeGhhdXN0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvLyBE
byB0aGlzIGNoZWNrIHdoZXRoZXIgbGVuaWVudCBvciBzdHJpY3QKKyAgICAgICAgaWYgKCFpc0xl
Z2FsVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzb3VyY2UpLCB1
dGY4U2VxdWVuY2VMZW5ndGgpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBzb3VyY2VJbGxlZ2Fs
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhcjMyIGNoYXJh
Y3RlciA9IHJlYWRVVEY4U2VxdWVuY2Uoc291cmNlLCB1dGY4U2VxdWVuY2VMZW5ndGgpOworCisg
ICAgICAgIGlmICh0YXJnZXQgPj0gdGFyZ2V0RW5kKSB7CisgICAgICAgICAgICBzb3VyY2UgLT0g
dXRmOFNlcXVlbmNlTGVuZ3RoOyAvLyBCYWNrIHVwIHNvdXJjZSBwb2ludGVyIQorICAgICAgICAg
ICAgcmVzdWx0ID0gdGFyZ2V0RXhoYXVzdGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgLy8g
VVRGLTE2IHN1cnJvZ2F0ZSB2YWx1ZXMgYXJlIGlsbGVnYWwgaW4gVVRGLTMyCisgICAgICAgICAg
ICBpZiAoVV9JU19TVVJST0dBVEUoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlmIChz
dHJpY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIC09IHV0ZjhTZXF1ZW5jZUxlbmd0
aDsgLy8gcmV0dXJuIHRvIHRoZSBpbGxlZ2FsIHZhbHVlIGl0c2VsZgorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzb3VyY2VJbGxlZ2FsOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKnRhcmdldCsrID0g
cmVwbGFjZW1lbnRDaGFyYWN0ZXI7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAqdGFyZ2V0KysgPSBjaGFyYWN0ZXI7IC8vIG5vcm1hbCBjYXNlCisgICAgICAgIH0gZWxzZSBp
ZiAoVV9JU19TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIC8vIHRhcmdl
dCBpcyBhIGNoYXJhY3RlciBpbiByYW5nZSAweEZGRkYgLSAweDEwRkZGRgorICAgICAgICAgICAg
aWYgKHRhcmdldCArIDEgPj0gdGFyZ2V0RW5kKSB7CisgICAgICAgICAgICAgICAgc291cmNlIC09
IHV0ZjhTZXF1ZW5jZUxlbmd0aDsgLy8gQmFjayB1cCBzb3VyY2UgcG9pbnRlciEKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSB0YXJnZXRFeGhhdXN0ZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqdGFyZ2V0KysgPSBVMTZfTEVBRChjaGFyYWN0
ZXIpOworICAgICAgICAgICAgKnRhcmdldCsrID0gVTE2X1RSQUlMKGNoYXJhY3Rlcik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAgICAg
c291cmNlIC09IHV0ZjhTZXF1ZW5jZUxlbmd0aDsgLy8gcmV0dXJuIHRvIHRoZSBzdGFydAorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHNvdXJjZUlsbGVnYWw7CisgICAgICAgICAgICAgICAgYnJl
YWs7IC8vIEJhaWwgb3V0OyBzaG91bGRuJ3QgY29udGludWUKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICp0YXJnZXQrKyA9IHJlcGxhY2VtZW50Q2hhcmFjdGVyOworICAgICAg
ICB9CisgICAgfQorICAgICpzb3VyY2VTdGFydCA9IHNvdXJjZTsKKyAgICAqdGFyZ2V0U3RhcnQg
PSB0YXJnZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordW5zaWduZWQgY2FsY3VsYXRlU3Ry
aW5nSGFzaEFuZExlbmd0aEZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEsIGNvbnN0IGNoYXIqIGRh
dGFFbmQsIHVuc2lnbmVkJiBkYXRhTGVuZ3RoLCB1bnNpZ25lZCYgdXRmMTZMZW5ndGgpCit7Cisg
ICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZ0hhc2hlciBzdHJp
bmdIYXNoZXI7CisgICAgZGF0YUxlbmd0aCA9IDA7CisgICAgdXRmMTZMZW5ndGggPSAwOworCisg
ICAgd2hpbGUgKGRhdGEgPCBkYXRhRW5kIHx8ICghZGF0YUVuZCAmJiAqZGF0YSkpIHsKKyAgICAg
ICAgaWYgKGlzQVNDSUkoKmRhdGEpKSB7CisgICAgICAgICAgICBzdHJpbmdIYXNoZXIuYWRkQ2hh
cmFjdGVyKCpkYXRhKyspOworICAgICAgICAgICAgZGF0YUxlbmd0aCsrOworICAgICAgICAgICAg
dXRmMTZMZW5ndGgrKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaW50IHV0ZjhTZXF1ZW5jZUxlbmd0aCA9IGlubGluZVVURjhTZXF1ZW5jZUxlbmd0aE5vbkFT
Q0lJKCpkYXRhKTsKKyAgICAgICAgZGF0YUxlbmd0aCArPSB1dGY4U2VxdWVuY2VMZW5ndGg7CisK
KyAgICAgICAgaWYgKCFkYXRhRW5kKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
IHV0ZjhTZXF1ZW5jZUxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFkYXRhW2ld
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChkYXRhRW5kIC0gZGF0YSA8IHV0ZjhTZXF1ZW5jZUxlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworCisgICAgICAgIGlmICghaXNMZWdhbFVURjgocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIHV0ZjhTZXF1ZW5jZUxlbmd0aCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IHJlYWRVVEY4
U2VxdWVuY2UoZGF0YSwgdXRmOFNlcXVlbmNlTGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKCFpc0FT
Q0lJKGNoYXJhY3RlcikpOworCisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICAvLyBVVEYtMTYgc3Vycm9nYXRlIHZhbHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYt
MzIKKyAgICAgICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjaGFyYWN0ZXIpKQorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc3RyaW5nSGFzaGVyLmFkZENoYXJhY3Rlcihz
dGF0aWNfY2FzdDxVQ2hhcj4oY2hhcmFjdGVyKSk7IC8vIG5vcm1hbCBjYXNlCisgICAgICAgICAg
ICB1dGYxNkxlbmd0aCsrOworICAgICAgICB9IGVsc2UgaWYgKFVfSVNfU1VQUExFTUVOVEFSWShj
aGFyYWN0ZXIpKSB7CisgICAgICAgICAgICBzdHJpbmdIYXNoZXIuYWRkQ2hhcmFjdGVycyhzdGF0
aWNfY2FzdDxVQ2hhcj4oVTE2X0xFQUQoY2hhcmFjdGVyKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxVQ2hhcj4oVTE2X1RSQUlMKGNoYXJhY3Rl
cikpKTsKKyAgICAgICAgICAgIHV0ZjE2TGVuZ3RoICs9IDI7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0hhc2hlci5oYXNo
KCk7Cit9CisKK2Jvb2wgZXF1YWxVVEYxNldpdGhVVEY4KGNvbnN0IFVDaGFyKiBhLCBjb25zdCBV
Q2hhciogYUVuZCwgY29uc3QgY2hhciogYiwgY29uc3QgY2hhciogYkVuZCkKK3sKKyAgICB3aGls
ZSAoYiA8IGJFbmQpIHsKKyAgICAgICAgaWYgKGlzQVNDSUkoKmIpKSB7CisgICAgICAgICAgICBp
ZiAoKmErKyAhPSAqYisrKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaW50IHV0ZjhTZXF1ZW5jZUxlbmd0
aCA9IGlubGluZVVURjhTZXF1ZW5jZUxlbmd0aE5vbkFTQ0lJKCpiKTsKKworICAgICAgICBpZiAo
YkVuZCAtIGIgPCB1dGY4U2VxdWVuY2VMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaWYgKCFpc0xlZ2FsVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihiKSwgdXRmOFNlcXVlbmNlTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiAw
OworCisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gcmVhZFVURjhTZXF1ZW5jZShiLCB1dGY4
U2VxdWVuY2VMZW5ndGgpOworICAgICAgICBBU1NFUlQoIWlzQVNDSUkoY2hhcmFjdGVyKSk7CisK
KyAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIC8vIFVURi0x
NiBzdXJyb2dhdGUgdmFsdWVzIGFyZSBpbGxlZ2FsIGluIFVURi0zMgorICAgICAgICAgICAgaWYg
KFVfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaWYgKCphKysgIT0gY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChVX0lTX1NVUFBMRU1FTlRBUlkoY2hhcmFj
dGVyKSkgeworICAgICAgICAgICAgaWYgKCphKysgIT0gVTE2X0xFQUQoY2hhcmFjdGVyKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoKmErKyAhPSBVMTZf
VFJBSUwoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBh
ID09IGFFbmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVuaWNvZGUKK30gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9XVEZfVVRGOC5oIGIvU291cmNl
L1dURi93dGYvdW5pY29kZS9XVEZfVVRGOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ZjY5OTRiZWNmMjdiODM3
YTI5MjczZDA1ODgxY2ZlZTAwYmYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi91bmljb2RlL1dURl9VVEY4LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFdURl9VVEY4X2gKKyNkZWZpbmUgV1RGX1VURjhfaAorCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
VW5pY29kZS5oPgorCituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBVbmljb2RlIHsKKworICAg
IC8vIEdpdmVuIGEgZmlyc3QgYnl0ZSwgZ2l2ZXMgdGhlIGxlbmd0aCBvZiB0aGUgVVRGLTggc2Vx
dWVuY2UgaXQgYmVnaW5zLgorICAgIC8vIFJldHVybnMgMCBmb3IgYnl0ZXMgdGhhdCBhcmUgbm90
IGxlZ2FsIHN0YXJ0cyBvZiBVVEYtOCBzZXF1ZW5jZXMuCisgICAgLy8gT25seSBhbGxvd3Mgc2Vx
dWVuY2VzIG9mIHVwIHRvIDQgYnl0ZXMsIHNpbmNlIHRoYXQgd29ya3MgZm9yIGFsbCBVbmljb2Rl
IGNoYXJhY3RlcnMgKFUtMDAwMDAwMDAgdG8gVS0wMDEwRkZGRikuCisgICAgaW50IFVURjhTZXF1
ZW5jZUxlbmd0aChjaGFyKTsKKworICAgIC8vIFRha2VzIGEgbnVsbC10ZXJtaW5hdGVkIEMtc3R5
bGUgc3RyaW5nIHdpdGggYSBVVEYtOCBzZXF1ZW5jZSBpbiBpdCBhbmQgY29udmVydHMgaXQgdG8g
YSBjaGFyYWN0ZXIuCisgICAgLy8gT25seSBhbGxvd3MgVW5pY29kZSBjaGFyYWN0ZXJzIChVLTAw
MDAwMDAwIHRvIFUtMDAxMEZGRkYpLgorICAgIC8vIFJldHVybnMgLTEgaWYgdGhlIHNlcXVlbmNl
IGlzIG5vdCB2YWxpZCAoaW5jbHVkaW5nIHByZXNlbmNlIG9mIGV4dHJhIGJ5dGVzKS4KKyAgICBp
bnQgZGVjb2RlVVRGOFNlcXVlbmNlKGNvbnN0IGNoYXIqKTsKKworICAgIHR5cGVkZWYgZW51bSB7
CisgICAgICAgICAgICBjb252ZXJzaW9uT0ssICAgICAgIC8vIGNvbnZlcnNpb24gc3VjY2Vzc2Z1
bAorICAgICAgICAgICAgc291cmNlRXhoYXVzdGVkLCAgICAvLyBwYXJ0aWFsIGNoYXJhY3RlciBp
biBzb3VyY2UsIGJ1dCBoaXQgZW5kCisgICAgICAgICAgICB0YXJnZXRFeGhhdXN0ZWQsICAgIC8v
IGluc3VmZi4gcm9vbSBpbiB0YXJnZXQgZm9yIGNvbnZlcnNpb24KKyAgICAgICAgICAgIHNvdXJj
ZUlsbGVnYWwgICAgICAgLy8gc291cmNlIHNlcXVlbmNlIGlzIGlsbGVnYWwvbWFsZm9ybWVkCisg
ICAgfSBDb252ZXJzaW9uUmVzdWx0OworCisgICAgLy8gVGhlc2UgY29udmVyc2lvbiBmdW5jdGlv
bnMgdGFrZSBhICJzdHJpY3QiIGFyZ3VtZW50LiBXaGVuIHRoaXMKKyAgICAvLyBmbGFnIGlzIHNl
dCB0byBzdHJpY3QsIGJvdGggaXJyZWd1bGFyIHNlcXVlbmNlcyBhbmQgaXNvbGF0ZWQgc3Vycm9n
YXRlcworICAgIC8vIHdpbGwgY2F1c2UgYW4gZXJyb3IuICBXaGVuIHRoZSBmbGFnIGlzIHNldCB0
byBsZW5pZW50LCBib3RoIGlycmVndWxhcgorICAgIC8vIHNlcXVlbmNlcyBhbmQgaXNvbGF0ZWQg
c3Vycm9nYXRlcyBhcmUgY29udmVydGVkLgorICAgIC8vIAorICAgIC8vIFdoZXRoZXIgdGhlIGZs
YWcgaXMgc3RyaWN0IG9yIGxlbmllbnQsIGFsbCBpbGxlZ2FsIHNlcXVlbmNlcyB3aWxsIGNhdXNl
CisgICAgLy8gYW4gZXJyb3IgcmV0dXJuLiBUaGlzIGluY2x1ZGVzIHNlcXVlbmNlcyBzdWNoIGFz
OiA8RjQgOTAgODAgODA+LCA8QzAgODA+LAorICAgIC8vIG9yIDxBMD4gaW4gVVRGLTgsIGFuZCB2
YWx1ZXMgYWJvdmUgMHgxMEZGRkYgaW4gVVRGLTMyLiBDb25mb3JtYW50IGNvZGUKKyAgICAvLyBt
dXN0IGNoZWNrIGZvciBpbGxlZ2FsIHNlcXVlbmNlcy4KKyAgICAvLyAKKyAgICAvLyBXaGVuIHRo
ZSBmbGFnIGlzIHNldCB0byBsZW5pZW50LCBjaGFyYWN0ZXJzIG92ZXIgMHgxMEZGRkYgYXJlIGNv
bnZlcnRlZAorICAgIC8vIHRvIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXI7IG90aGVyd2lzZSAo
d2hlbiB0aGUgZmxhZyBpcyBzZXQgdG8gc3RyaWN0KQorICAgIC8vIHRoZXkgY29uc3RpdHV0ZSBh
biBlcnJvci4KKworICAgIFdURl9FWFBPUlRfUFJJVkFURSBDb252ZXJzaW9uUmVzdWx0IGNvbnZl
cnRVVEY4VG9VVEYxNigKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIHNvdXJjZVN0
YXJ0LCBjb25zdCBjaGFyKiBzb3VyY2VFbmQsIAorICAgICAgICAgICAgICAgICAgICBVQ2hhcioq
IHRhcmdldFN0YXJ0LCBVQ2hhciogdGFyZ2V0RW5kLCBib29sIHN0cmljdCA9IHRydWUpOworCisg
ICAgQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0TGF0aW4xVG9VVEY4KAorICAgICAgICAgICAgICAg
ICAgICBjb25zdCBMQ2hhcioqIHNvdXJjZVN0YXJ0LCBjb25zdCBMQ2hhciogc291cmNlRW5kLCAK
KyAgICAgICAgICAgICAgICAgICAgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQp
OworCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIENvbnZlcnNpb25SZXN1bHQgY29udmVydFVURjE2
VG9VVEY4KAorICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhcioqIHNvdXJjZVN0YXJ0LCBj
b25zdCBVQ2hhciogc291cmNlRW5kLCAKKyAgICAgICAgICAgICAgICAgICAgY2hhcioqIHRhcmdl
dFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQsIGJvb2wgc3RyaWN0ID0gdHJ1ZSk7CisKKyAgICB1bnNp
Z25lZCBjYWxjdWxhdGVTdHJpbmdIYXNoQW5kTGVuZ3RoRnJvbVVURjgoY29uc3QgY2hhciogZGF0
YSwgY29uc3QgY2hhciogZGF0YUVuZCwgdW5zaWduZWQmIGRhdGFMZW5ndGgsIHVuc2lnbmVkJiB1
dGYxNkxlbmd0aCk7CisKKyAgICBib29sIGVxdWFsVVRGMTZXaXRoVVRGOChjb25zdCBVQ2hhciog
YSwgY29uc3QgVUNoYXIqIGFFbmQsIGNvbnN0IGNoYXIqIGIsIGNvbnN0IGNoYXIqIGJFbmQpOwor
Cit9IC8vIG5hbWVzcGFjZSBVbmljb2RlCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IFdURl9VVEY4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvZ2xpYi9Vbmlj
b2RlR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuY3Bw
CmluZGV4IGEwMWMzZWU5ZGI1N2NiNDNiODkwYTJlNjYzYTM3NmViNTQwNjEwODguLjdmYjA0MDc1
NDRjMjI1MzU2N2FlOTA5NTZiNTdhZjgwYjU5MTU0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5p
Y29kZS9nbGliL1VuaWNvZGVHTGliLmNwcApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIlVu
aWNvZGVHTGliLmgiCiAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3Vu
aWNvZGUvVVRGOC5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1dURl9VVEY4Lmg+CiAKICNkZWZp
bmUgVVRGOF9JU19TVVJST0dBVEUoY2hhcmFjdGVyKSAoY2hhcmFjdGVyID49IDB4MTAwMDAgJiYg
Y2hhcmFjdGVyIDw9IDB4MTBGRkZGKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1N0cmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmlu
Zy5jcHAKaW5kZXggNTkwYjdhM2MxOTA3Y2RhNDFjZDMxMDFjZGYzOGZhOTg4YzE2ZTRlYi4uNjk2
ZmNiMjhkYzE1MzM3Y2IzZWQ3MWRjNDFkYWVlM2RhY2RhZmNiOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvU3RyaW5nLmNwcApAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3
dGYvdW5pY29kZS9VVEY4Lmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvV1RGX1VURjguaD4KICNp
bmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAppbmRleCAwNzZhODUy
ZDA2ZDgzNzEwMzc2MjI2NDViMDExOTQ1MmVjYmUyNGQ0Li45NDZhOTQ5NWM3ZTAzNzkxNjU1YjM1
YjQ2NzIxNWM1ZmIzZmExM2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3NvckxpYnhzbHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
TGlieHNsdC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KKyNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9XVEZfVVRGOC5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIlNvZnRMaW5r
aW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmgKaW5kZXggMThiM2ZjOGZlOTMwODc2N2Qz
NTIzOGE5ZGI2MmQ2YTgxNDFkNDFlYy4uNGU2ZGU2NDIzMTVjOGIyNjJkOWZjYjY4MTA2OWI0ZTFj
NmYwMjZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlN0cmluZy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJTdHJpbmcuaApAQCAtMzAsNyArMzAsNyBAQAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvdW5pY29kZS9VVEY4Lmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvV1RGX1VURjguaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>