<?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>10696</bug_id>
          
          <creation_ts>2006-09-02 15:19:03 -0700</creation_ts>
          <short_desc>RenderPathQuartz and RenderPathQt should not be needed</short_desc>
          <delta_ts>2006-09-04 20:32:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rob Buis">rwlbuis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>54657</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-09-02 15:19:03 -0700</bug_when>
    <thetext>As shown by constructions in platform/, there is no need for above classes to exist!
Just do a construction like Path and cg/PathCG.mm. Even better would be if there
was just RenderPath.h and RenderPath.cpp for all platforms, this may need another
bug report.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54658</commentid>
    <comment_count>1</comment_count>
      <attachid>10371</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-09-02 15:41:26 -0700</bug_when>
    <thetext>Created attachment 10371
first attempt

This is part of the big kcanvas removal patch, basically. Also note that it fixes markers on
qt platform.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54676</commentid>
    <comment_count>2</comment_count>
      <attachid>10371</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-03 00:11:53 -0700</bug_when>
    <thetext>Comment on attachment 10371
first attempt

Unfortunately I lost all my good comments due to a Safari crash.  Here is an abridged version:

1.  Lots of style nits.  Pointers in the &quot;wrong&quot; place, missing spaces between ifs, {} misplaced.  While we&apos;re moving this code around we should fix the style.

2.  if/elseif/else sets for enums are used where switches should be.  Also some enum-based switches here use default: instead of mentioning each enum value.  Using a switch statement for an enum and mentioning each enum value by name is best as it allows for better compile-time error checking.

3. DrawMarkersData should use constructor-style initializers here:
+    elementIndex = 0;
+    midMarker = mid;
(yes, I know this is old code copied, but might as well fix it now.)

4.  createRoundedRectangle needs a bath:
+    double nrx = rx, nry = ry;
should be renamed (I have no clue what nrx is...)
0.552 should be turned into a nicely named constant (to make its use more understandable.

Not needed:
+    // Ellipse creation - nice &amp; clean agg2 code


+void CGPathTransformer(void *info, const CGPathElement *element)
 is completely unnecessary.  Use CGAddPath instead and pass a transform.

Lots of small stuff, but enough to add up to a r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54692</commentid>
    <comment_count>3</comment_count>
      <attachid>10377</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-09-03 06:37:28 -0700</bug_when>
    <thetext>Created attachment 10377
Improved patch

This patch should address Eric&apos;s comments.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54715</commentid>
    <comment_count>4</comment_count>
      <attachid>10377</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-03 12:10:18 -0700</bug_when>
    <thetext>Comment on attachment 10377
Improved patch

Wow, this is great!

+#define QUARTER 0.552 // approximation of control point positions on a bezier
+                      // to simulate a quarter of a circle.

We should use C++ const for this sort of thing, not macros.

+#include &quot;config.h&quot;
+
+#include &lt;math.h&gt;
+
+#include &quot;FloatRect.h&quot;
+#include &quot;FloatPoint.h&quot;
+#include &quot;Path.h&quot;

The way we do includes is:

    1) config.h
    2) my own header file (checks to see if it can stand alone)
    3) blank line
    4) all the other headers, sorted (as by &quot;sort&quot; tool)

So this should be:

#include &quot;config.h&quot;
#include &quot;Path.h&quot;

#include &quot;FloatRect.h&quot;
#include &lt;math.h&gt;

In Path::createRoundedRectangle, all those / 2 should really be * 0.5f instead.

I&apos;m slightly concerned about the mix of double and float.

+    typedef enum {
+        PathElementMoveToPoint,
+        PathElementAddLineToPoint,
+        PathElementAddQuadCurveToPoint,
+        PathElementAddCurveToPoint,
+        PathElementCloseSubpath
+    } PathElementType;

Since this is C++, not C, it should just enum X { }. No need for typedef. Same for struct X { }. No need for typedef struct X { } X.

+        static Path createRoundedRectangle(const FloatRect&amp; rectangle, const FloatSize&amp; roundingRadii);

We omit names like &quot;rectangle&quot; that are self-explanator. The name roundingRadii, on the other hand, is great.

+        void apply(void* info, PathApplierFunction function) const;

Similarly, &quot;function&quot; should be omitted here.

+        static Path createEllipse(const FloatPoint&amp; c, float rx, float ry);

Presumably &quot;c&quot; means &quot;center&quot; and it should either be omitted or spelled out.

+    typedef void (*PathApplierFunction) (
+        void* info,
+        const PathElement* element
+    );

I would write this:

    typedef void (*PathApplierFunction) (void* info, const PathElement*);

Omitting the redundant parameter name, and putting it all on one line since it fits nicely.

+    CGPathAddPath(path, (CGAffineTransform*)&amp;transform, m_path);

Typecast should not be needed here, and is dangerous in case AffineTransform&apos;s implementation details change later. AffineTransform is supposed to have a conversion operator that automatically turns it into a CGAffineTransform as needed.

I&apos;m tempted to say r=me since these are minor, but maybe would be best to fix some of them and get reviewed again, so review- for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54725</commentid>
    <comment_count>5</comment_count>
      <attachid>10381</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-09-03 13:24:33 -0700</bug_when>
    <thetext>Created attachment 10381
Even more improved patch

This patch should address Darin&apos;s comments.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54726</commentid>
    <comment_count>6</comment_count>
      <attachid>10381</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-03 13:27:15 -0700</bug_when>
    <thetext>Comment on attachment 10381
Even more improved patch

+typedef enum {
+    Start,
+    Mid,
+    End
+} MarkerType;

Should be just enum.

+    typedef void (*PathApplierFunction) ( void* info, const PathElement* element);

Extra space after parenthesis. No need to include the word element.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54738</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-09-03 15:58:15 -0700</bug_when>
    <thetext>ToT is broken.  The WebCore/platform/Path.cpp file is missing from the final patch and has not been checked in to Subversion.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54806</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-04 20:32:04 -0700</bug_when>
    <thetext>Rob landed this as 16206.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10371</attachid>
            <date>2006-09-02 15:41:26 -0700</date>
            <delta_ts>2006-09-03 00:11:53 -0700</delta_ts>
            <desc>first attempt</desc>
            <filename>10696.diff</filename>
            <type>text/plain</type>
            <size>62373</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTYxOTQpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC04NjYsNiArODY2LDcgQEAgc2V0KFdlYkNvcmVfU1JDUwogICAgIHBs
YXRmb3JtL1N0cmluZ0ltcGwuY3BwCiAgICAgcGxhdGZvcm0vRmxvYXRSZWN0LmNwcAogICAgIHBs
YXRmb3JtL1Jlc291cmNlTG9hZGVyLmNwcAorICAgIHBsYXRmb3JtL1BhdGguY3BwCiAgICAgcGxh
dGZvcm0vcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwCiAgICAgcGxhdGZvcm0vcXQvU3RyaW5nUXQu
Y3BwCiAgICAgcGxhdGZvcm0vcXQvQ29sb3JRdC5jcHAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjE5NCkKKysrIFdl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMDYtMDkt
MDMgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA2OTYKKyAgICAgICAgUmVuZGVyUGF0aFF1YXJ0eiBhbmQgUmVuZGVyUGF0
aFF0IHNob3VsZCBub3QgYmUgbmVlZGVkCisKKyAgICAgICAgQ2xlYW51cCBvZiBjb2RlIHJlbGF0
ZWQgdG8gUmVuZGVyUGF0aC4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVE
IE9SIENIQU5HRUQKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXND
cmVhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg6
IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9SZW5kZXJQYXRoLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3TWFya2Vyc0RhdGE6OkRyYXdNYXJrZXJz
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3TWFya2VyV2l0aERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6dXBkYXRlTWFya2VyRGF0YUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
ZHJhd1N0YXJ0QW5kTWlkTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpk
cmF3TWFya2Vyc0lmTmVlZGVkKToKKyAgICAgICAgKiBrY2FudmFzL1JlbmRlclBhdGguaDoKKyAg
ICAgICAgKiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg6CisgICAgICAgICoga2Nh
bnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcDoKKyAgICAgICAgKiBrY2FudmFz
L2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaDoKKyAgICAgICAgKiBrY2FudmFzL2Rldmlj
ZS9xdC9SZW5kZXJQYXRoUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ry
b2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQkJveCk6
CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lmg6IFJlbW92
ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1t
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQkJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyk6CisgICAgICAgICoga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaDoKKyAgICAgICAgKiBrY2FudmFz
L2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbToKKyAgICAgICAgKiBrY2Fu
dmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdBRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlw
c2VFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHR0VsZW1lbnQu
Y3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdMaW5lRWxlbWVudDo6
dG9QYXRoRGF0YSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUG9seWdv
bkVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3Bw
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxl
bWVudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vUGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjpjcmVhdGVSZWN0YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y3JlYXRl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjcmVhdGVDaXJjbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6Y3JlYXRlTGluZSk6CisgICAgICAgICogcGxhdGZvcm0vUGF0aC5o
OgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZy9QYXRoQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0dQYXRoQXBwbGllclRvUGF0aEFwcGxpZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0dQYXRoVHJhbnNm
b3JtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9QYXRoUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YXBwbHkpOgor
CiAyMDA2LTA5LTAyICBHcmFoYW0gRGVubmlzICA8Z3JhaGFtLmRlbm5pc0BnbWFpbC5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgSnVzdGluLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MTk0KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyNDIsOCArMTI0
Miw2IEBACiAJCUE4OEFEM0I2MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNzcwODk3
MDFGODAwQkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQubW0gKi87IH07CiAJCUE4OEFEM0I5MDk1MjQ4
NkUwMDFERDE5NiAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCN0EwODk3MDFGODAwQkE1MTE0IC8qIFJl
bmRlclNWR0NvbnRhaW5lci5jcHAgKi87IH07CiAJCUE4OEFEM0JBMDk1MjQ4NkUwMDFERDE5NiAv
KiBSZW5kZXJTVkdDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QzBGQjdCMDg5NzAxRjgwMEJBNTExNCAvKiBSZW5kZXJTVkdDb250YWlu
ZXIuaCAqLzsgfTsKLQkJQTg4QUQzQkIwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNDcmVhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBG
QjdDMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzQ3JlYXRvci5jcHAgKi87IH07Ci0JCUE4OEFE
M0JDMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzQ3JlYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCN0QwODk3MDFGODAwQkE1MTE0IC8q
IEtDYW52YXNDcmVhdG9yLmggKi87IH07CiAJCUE4OEFEM0JEMDk1MjQ4NkUwMDFERDE5NiAvKiBL
Q2FudmFzRmlsdGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEMwRkI3RTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ZpbHRlcnMuY3BwICov
OyB9OwogCQlBODhBRDNCRTA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0ZpbHRlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjdGMDg5NzAx
RjgwMEJBNTExNCAvKiBLQ2FudmFzRmlsdGVycy5oICovOyB9OwogCQlBODhBRDNDMDA5NTI0ODZF
MDAxREQxOTYgLyogS0NhbnZhc0ltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI4MTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ltYWdl
LmggKi87IH07CkBAIC0xNjYzLDYgKzE2NjEsNyBAQAogCQlBOEZFRkIzMjA5NzlGNEY2MDA1ODM5
RkQgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkVGQjMwMDk3OUY0RjYwMDU4MzlGRCAvKiBTVkdGb3Jl
aWduT2JqZWN0RWxlbWVudC5oICovOyB9OwogCQlBQTg0RkM4NTBBQTBGRTA4MDA3Njk5QUYgLyog
SlNTVkdNZXRhZGF0YUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUE4NEZDODMwQUEwRkUwODAwNzY5OUFGIC8qIEpTU1ZHTWV0YWRhdGFF
bGVtZW50LmNwcCAqLzsgfTsKIAkJQUE4NEZDODYwQUEwRkUwODAwNzY5OUFGIC8qIEpTU1ZHTWV0
YWRhdGFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQTg0RkM4NDBBQTBGRTA4MDA3Njk5QUYgLyogSlNTVkdNZXRhZGF0YUVsZW1lbnQuaCAq
LzsgfTsKKwkJQUE5OEI4N0QwQUFBMDJGODAwMUE0NEMyIC8qIFBhdGguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE5OEI4N0MwQUFBMDJGODAwMUE0
NEMyIC8qIFBhdGguY3BwICovOyB9OwogCQlBQUM4REFCMTBBQTEwMDIwMDBEQzA5MDcgLyogU1ZH
TWV0YWRhdGFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFBQzhEQUFGMEFBMTAwMjAwMERDMDkwNyAvKiBTVkdNZXRhZGF0YUVsZW1lbnQu
Y3BwICovOyB9OwogCQlBQUM4REFCMjBBQTEwMDIwMDBEQzA5MDcgLyogU1ZHTWV0YWRhdGFFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUM4
REFCMDBBQTEwMDIwMDBEQzA5MDcgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmggKi87IH07CiAJCUFC
MjNBMzEyMDlCQkE3NzYwMDY3Q0M1MyAvKiBIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMjNBMzEwMDlC
QkE3NzYwMDY3Q0M1MyAvKiBIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50LmNwcCAqLzsgfTsKQEAg
LTM1MzQsOCArMzUzMyw2IEBACiAJCUE4QzBGQjc3MDg5NzAxRjgwMEJBNTExNCAvKiBRdWFydHpT
dXBwb3J0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBRdWFydHpTdXBwb3J0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQThDMEZCN0EwODk3MDFGODAwQkE1MTE0IC8q
IFJlbmRlclNWR0NvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0NvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRkI3QjA4
OTcwMUY4MDBCQTUxMTQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHQ29udGFpbmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlB
OEMwRkI3QzA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0NyZWF0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLQ2FudmFzQ3JlYXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwotCQlBOEMwRkI3RDA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0NyZWF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzQ3Jl
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJQThDMEZCN0UwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNGaWx0ZXJzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS0Nh
bnZhc0ZpbHRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJQThDMEZCN0YwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNGaWx0
ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
S0NhbnZhc0ZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjgxMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzSW1h
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBL
Q2FudmFzSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CkBAIC0zNzMwLDYgKzM3MjcsNyBAQAogCQlBOEZFRkIzMDA5NzlGNEY2MDA1
ODM5RkQgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBODRGQzgzMEFBMEZFMDgwMDc2OTlBRiAvKiBKU1NWR01ldGFkYXRhRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdNZXRh
ZGF0YUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTg0RkM4NDBB
QTBGRTA4MDA3Njk5QUYgLyogSlNTVkdNZXRhZGF0YUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHTWV0YWRhdGFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUFBOThCODdDMEFBQTAyRjgwMDFBNDRDMiAvKiBQYXRoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXRoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUFDOERBQUYwQUExMDAyMDAwREMwOTA3IC8qIFNWR01ldGFkYXRh
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHTWV0
YWRhdGFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFDOERBQjAw
QUExMDAyMDAwREMwOTA3IC8qIFNWR01ldGFkYXRhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWV0YWRhdGFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFCMjNBMzEwMDlCQkE3NzYwMDY3Q0M1MyAvKiBIVE1MVGV4dEZpZWxkSW5u
ZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1M
VGV4dEZpZWxkSW5uZXJFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU2MjIsOCArNTYyMCw2IEBACiAJCQkJQThDMEZCNTMwODk3MDFGNzAwQkE1MTE0IC8qIGRldmlj
ZSAqLywKIAkJCQlBOEMwRkI3QTA4OTcwMUY4MDBCQTUxMTQgLyogUmVuZGVyU1ZHQ29udGFpbmVy
LmNwcCAqLywKIAkJCQlBOEMwRkI3QjA4OTcwMUY4MDBCQTUxMTQgLyogUmVuZGVyU1ZHQ29udGFp
bmVyLmggKi8sCi0JCQkJQThDMEZCN0MwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNDcmVhdG9y
LmNwcCAqLywKLQkJCQlBOEMwRkI3RDA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0NyZWF0b3Iu
aCAqLywKIAkJCQlBOEMwRkI3RTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ZpbHRlcnMuY3Bw
ICovLAogCQkJCUE4QzBGQjdGMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzRmlsdGVycy5oICov
LAogCQkJCUE4QzBGQjgxMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzSW1hZ2UuaCAqLywKQEAg
LTU4ODIsNiArNTg3OCw3IEBACiAJCUJDRjFBNUJBMDk3ODMyMDkwMDYxQTEyMyAvKiBwbGF0Zm9y
bSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQUE5OEI4
N0MwQUFBMDJGODAwMUE0NEMyIC8qIFBhdGguY3BwICovLAogCQkJCTFBRTQyRjY3MEFBNEI4Q0Iw
MEM4NjEyRCAvKiBjZiAqLywKIAkJCQk5MzAzMkNDQzA5QUVDMzYyMDBGODJBMTggLyogY2cgKi8s
CiAJCQkJNjU4MkExNDgwOTk5OUQ2QzAwQkVFQjZEIC8qIG1hYyAqLywKQEAgLTY1MzAsNyArNjUy
Nyw2IEBACiAJCQkJQTg4QUQzQjMwOTUyNDg2RTAwMUREMTk2IC8qIEtSZW5kZXJpbmdQYWludFNl
cnZlclF1YXJ0ei5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQzQjUwOTUyNDg2RTAwMUREMTk2
IC8qIFF1YXJ0elN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEM0JBMDk1MjQ4NkUw
MDFERDE5NiAvKiBSZW5kZXJTVkdDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4OEFE
M0JDMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzQ3JlYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTg4QUQzQkUwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNGaWx0ZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODhBRDNDMDA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0ltYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODhBRDNDMjA5NTI0ODZFMDAxREQxOTYgLyogUmVuZGVyUGF0aC5o
IGluIEhlYWRlcnMgKi8sCkBAIC03NTU0LDcgKzc1NTAsNiBAQAogCQkJCUE4OEFEM0I0MDk1MjQ4
NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHoubW0gaW4gU291cmNlcyAq
LywKIAkJCQlBODhBRDNCNjA5NTI0ODZFMDAxREQxOTYgLyogUXVhcnR6U3VwcG9ydC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUE4OEFEM0I5MDk1MjQ4NkUwMDFERDE5NiAvKiBSZW5kZXJTVkdDb250
YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTg4QUQzQkIwOTUyNDg2RTAwMUREMTk2IC8q
IEtDYW52YXNDcmVhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEM0JEMDk1MjQ4NkUw
MDFERDE5NiAvKiBLQ2FudmFzRmlsdGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDND
MTA5NTI0ODZFMDAxREQxOTYgLyogUmVuZGVyUGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODhBRDNDODA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc1Jlc291cmNlcy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTgzMjgsNiArODMyMyw3IEBACiAJCQkJODUyQjlFOEEwQUE3OUM0NzAwMkFEQTZF
IC8qIERPTUhUTUxPcHRpb25FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE5ODk1NUMw
QUE3ODE0OTAwNUVGNUVGIC8qIENTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE5ODk1
NkIwQUE3OEY4MDAwNUVGNUVGIC8qIEtVUkxDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
QTk4Qjg3RDBBQUEwMkY4MDAxQTQ0QzIgLyogUGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6
IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rY2FudmFzL0tDYW52YXNDcmVhdG9yLmNwcAkocmV2aXNpb24gMTYxOTQpCisrKyBXZWJDb3Jl
L2tjYW52YXMvS0NhbnZhc0NyZWF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4MCArMCww
IEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KLSAgICAKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBh
aW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAi
S0NhbnZhc0NyZWF0b3IuaCIKLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgIktSZW5k
ZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRl
ICJQYXRoLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotS0NhbnZhc0NyZWF0b3IgKktDYW52
YXNDcmVhdG9yOjpzX2NyZWF0b3IgPSAwOwotCi1LQ2FudmFzQ3JlYXRvcjo6S0NhbnZhc0NyZWF0
b3IoKQotewotfQotCi1LQ2FudmFzQ3JlYXRvcjo6fktDYW52YXNDcmVhdG9yKCkKLXsKLX0KLQot
S0NhbnZhc0NyZWF0b3IgKktDYW52YXNDcmVhdG9yOjpzZWxmKCkKLXsKLSAgICBpZighc19jcmVh
dG9yKQotICAgICAgICBzX2NyZWF0b3IgPSBuZXcgS0NhbnZhc0NyZWF0b3IoKTsKLQotICAgIHJl
dHVybiBzX2NyZWF0b3I7Ci19Ci0KLVBhdGggS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVJvdW5kZWRS
ZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiBib3gsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdS
YWRpaSkgY29uc3QKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgZmxvYXQgeCA9IGJveC54KCk7Ci0g
ICAgZmxvYXQgeSA9IGJveC55KCk7Ci0gICAgZmxvYXQgd2lkdGggPSBib3gud2lkdGgoKTsKLSAg
ICBmbG9hdCBoZWlnaHQgPSBib3guaGVpZ2h0KCk7Ci0gICAgZmxvYXQgcnggPSByb3VuZGluZ1Jh
ZGlpLndpZHRoKCk7Ci0gICAgZmxvYXQgcnkgPSByb3VuZGluZ1JhZGlpLmhlaWdodCgpOwotICAg
IGlmICh3aWR0aCA8PSAwLjBmIHx8IGhlaWdodCA8PSAwLjBmKQotICAgICAgICByZXR1cm4gcGF0
aDsKLQotICAgIGRvdWJsZSBucnggPSByeCwgbnJ5ID0gcnk7Ci0gICAgLy8gSWYgcnggaXMgZ3Jl
YXRlciB0aGFuIGhhbGYgb2YgdGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUKLSAgICAvLyB0aGVu
IHNldCByeCB0byBoYWxmIG9mIHRoZSB3aWR0aCAocmVxdWlyZWQgaW4gU1ZHIHNwZWMpCi0gICAg
aWYgKG5yeCA+IHdpZHRoIC8gMikKLSAgICAgICAgbnJ4ID0gd2lkdGggLyAyOwotCi0gICAgLy8g
SWYgcnkgaXMgZ3JlYXRlciB0aGFuIGhhbGYgb2YgdGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xl
Ci0gICAgLy8gdGhlbiBzZXQgcnkgdG8gaGFsZiBvZiB0aGUgaGVpZ2h0IChyZXF1aXJlZCBpbiBT
Vkcgc3BlYykKLSAgICBpZiAobnJ5ID4gaGVpZ2h0IC8gMikKLSAgICAgICAgbnJ5ID0gaGVpZ2h0
IC8gMjsKLQotICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCArIG5yeCwgeSkpOwotCi0gICAg
aWYgKG5yeCA8IHdpZHRoIC8gMikKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4
ICsgd2lkdGggLSByeCwgeSkpOwotCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9p
bnQoeCArIHdpZHRoIC0gbnJ4ICogKDEgLSAwLjU1MiksIHkpLCBGbG9hdFBvaW50KHggKyB3aWR0
aCwgeSArIG5yeSAqICgxIC0gMC41NTIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBucnkp
KTsKLQotICAgIGlmIChucnkgPCBoZWlnaHQgLyAyKQotICAgICAgICBwYXRoLmFkZExpbmVUbyhG
bG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIG5yeSkpOwotCi0gICAgcGF0aC5hZGRC
ZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gbnJ5ICogKDEg
LSAwLjU1MikpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIG5yeCAqICgxIC0gMC41NTIpLCB5ICsg
aGVpZ2h0KSwgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBucngsIHkgKyBoZWlnaHQpKTsKLQotICAg
IGlmIChucnggPCB3aWR0aCAvIDIpCi0gICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQo
eCArIG5yeCwgeSArIGhlaWdodCkpOwotCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0
UG9pbnQoeCArIG5yeCAqICgxIC0gMC41NTIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4LCB5
ICsgaGVpZ2h0IC0gbnJ5ICogKDEgLSAwLjU1MikpLCBGbG9hdFBvaW50KHgsIHkgKyBoZWlnaHQg
LSBucnkpKTsKLQotICAgIGlmIChucnkgPCBoZWlnaHQgLyAyKQotICAgICAgICBwYXRoLmFkZExp
bmVUbyhGbG9hdFBvaW50KHgsIHkgKyBucnkpKTsKLQotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVU
byhGbG9hdFBvaW50KHgsIHkgKyBucnkgKiAoMSAtIDAuNTUyKSksIEZsb2F0UG9pbnQoeCArIG5y
eCAqICgxIC0gMC41NTIpLCB5KSwgRmxvYXRQb2ludCh4ICsgbnJ4LCB5KSk7Ci0KLSAgICBwYXRo
LmNsb3NlU3VicGF0aCgpOwotCi0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLVBhdGggS0NhbnZhc0Ny
ZWF0b3I6OmNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIGJveCkgY29uc3QKLXsKLSAg
ICBQYXRoIHBhdGg7Ci0gICAgZmxvYXQgeCA9IGJveC54KCk7Ci0gICAgZmxvYXQgeSA9IGJveC55
KCk7Ci0gICAgZmxvYXQgd2lkdGggPSBib3gud2lkdGgoKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBi
b3guaGVpZ2h0KCk7Ci0gICAgaWYgKHdpZHRoIDwgMC4wZiB8fCBoZWlnaHQgPCAwLjBmKQotICAg
ICAgICByZXR1cm4gcGF0aDsKLSAgICAKLSAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgsIHkp
KTsKLSAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSkpOwotICAgIHBh
dGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0KSk7Ci0gICAgcGF0
aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0KSk7Ci0gICAgcGF0aC5jbG9zZVN1
YnBhdGgoKTsKLQotICAgIHJldHVybiBwYXRoOwotfQotCi1QYXRoIEtDYW52YXNDcmVhdG9yOjpj
cmVhdGVFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmYywgZmxvYXQgcngsIGZsb2F0IHJ5KSBjb25z
dAotewotICAgIGZsb2F0IGN4ID0gYy54KCk7Ci0gICAgZmxvYXQgY3kgPSBjLnkoKTsKLSAgICBQ
YXRoIHBhdGg7Ci0gICAgaWYgKHJ4IDw9IDAuMGYgfHwgcnkgPD0gMC4wZikKLSAgICAgICAgcmV0
dXJuIHBhdGg7Ci0KLSAgICAvLyBFbGxpcHNlIGNyZWF0aW9uIC0gbmljZSAmIGNsZWFuIGFnZzIg
Y29kZQotICAgIGRvdWJsZSB4ID0gY3gsIHkgPSBjeTsKLQotICAgIHVuc2lnbmVkIHN0ZXAgPSAw
LCBudW0gPSAxMDA7Ci0gICAgYm9vbCBydW5uaW5nID0gdHJ1ZTsKLSAgICB3aGlsZShydW5uaW5n
KQotICAgIHsKLSAgICAgICAgaWYoc3RlcCA9PSBudW0pCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJ1bm5pbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZG91YmxlIGFuZ2xlID0gZG91YmxlKHN0ZXApIC8gZG91YmxlKG51bSkgKiAyLjAgKiBNX1BJ
OwotICAgICAgICB4ID0gY3ggKyBjb3MoYW5nbGUpICogcng7Ci0gICAgICAgIHkgPSBjeSArIHNp
bihhbmdsZSkgKiByeTsKLQotICAgICAgICBzdGVwKys7Ci0gICAgICAgIGlmKHN0ZXAgPT0gMSkK
LSAgICAgICAgICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCwgeSkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKLSAgICB9Ci0K
LSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotCi0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLVBhdGgg
S0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjLCBmbG9hdCBy
KSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGVFbGxpcHNlKGMsIHIsIHIpOwotfQotCi1QYXRo
IEtDYW52YXNDcmVhdG9yOjpjcmVhdGVMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0LCBjb25z
dCBGbG9hdFBvaW50JiBlbmQpIGNvbnN0Ci17Ci0gICAgUGF0aCBwYXRoOwotICAgIGlmIChzdGFy
dC54KCkgPT0gZW5kLngoKSAmJiBzdGFydC55KCkgPT0gZW5kLnkoKSkKLSAgICAgICAgcmV0dXJu
IHBhdGg7Ci0KLSAgICBwYXRoLm1vdmVUbyhzdGFydCk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oZW5k
KTsKLQotICAgIHJldHVybiBwYXRoOwotfQotCi19Ci0KLS8vIHZpbTp0cz00Om5vZXQKLSNlbmRp
ZiAvLyBTVkdfU1VQUE9SVAotCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc0NyZWF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc0NyZWF0b3IuaAkocmV2aXNp
b24gMTYxOTQpCisrKyBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc0NyZWF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBO
aWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCi0qLwotCi0jaWZuZGVmIEtDYW52YXNDcmVhdG9yX0gKLSNkZWZpbmUgS0Nh
bnZhc0NyZWF0b3JfSAotI2lmZGVmIFNWR19TVVBQT1JUCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgUGF0aDsKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFz
cyBGbG9hdFNpemU7Ci0KLWNsYXNzIEtDYW52YXNDcmVhdG9yCi17Ci1wdWJsaWM6Ci0gICAgS0Nh
bnZhc0NyZWF0b3IoKTsKLSAgICB2aXJ0dWFsIH5LQ2FudmFzQ3JlYXRvcigpOwotCi0gICAgc3Rh
dGljIEtDYW52YXNDcmVhdG9yICpzZWxmKCk7Ci0KLSAgICAvLyBDYW52YXMgcGF0aCBjcmVhdGlv
bgotICAgIFBhdGggY3JlYXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFNpemUmKSBjb25zdDsKLSAgICBQYXRoIGNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9h
dFJlY3QmKSBjb25zdDsKLSAgICBQYXRoIGNyZWF0ZUVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHJ4LCBmbG9hdCByeSkgY29uc3Q7Ci0gICAgUGF0aCBjcmVhdGVDaXJjbGUoY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0IHIpIGNvbnN0OwotICAgIFBhdGggY3JlYXRlTGluZShjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHN0
YXRpYyBLQ2FudmFzQ3JlYXRvciAqc19jcmVhdG9yOwotfTsKLQotfQotCi0jZW5kaWYgLy8gU1ZH
X1NVUFBPUlQKLSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52
YXMvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL1JlbmRlclBh
dGguY3BwCShyZXZpc2lvbiAxNjE5NCkKKysrIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJQYXRoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAj
aW5jbHVkZSAiUmVuZGVyUGF0aC5oIgogCisjaW5jbHVkZSA8bWF0aC5oPgorCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5j
bHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgpAQCAtMzEyLDggKzMxNCwxMzggQEAgYm9vbCBSZW5k
ZXJQYXRoOjpub2RlQXRQb2ludChOb2RlSW5mbyYgaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
dHlwZWRlZiBlbnVtIHsKKyAgICBTdGFydCwKKyAgICBNaWQsCisgICAgRW5kCit9IE1hcmtlclR5
cGU7CisKK3N0cnVjdCBNYXJrZXJEYXRhIHsKKyAgICBGbG9hdFBvaW50IG9yaWdpbjsKKyAgICBk
b3VibGUgc3Ryb2tlV2lkdGg7CisgICAgRmxvYXRQb2ludCBpbnNsb3BlUG9pbnRzWzJdOworICAg
IEZsb2F0UG9pbnQgb3V0c2xvcGVQb2ludHNbMl07CisgICAgTWFya2VyVHlwZSB0eXBlOworICAg
IEtDYW52YXNNYXJrZXIgKm1hcmtlcjsKK307CisKK3N0cnVjdCBEcmF3TWFya2Vyc0RhdGEgewor
ICAgIERyYXdNYXJrZXJzRGF0YShHcmFwaGljc0NvbnRleHQqLCBLQ2FudmFzTWFya2VyKiBzdGFy
dE1hcmtlciwgS0NhbnZhc01hcmtlciogbWlkTWFya2VyLCBkb3VibGUgc3Ryb2tlV2lkdGgpOwor
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dDsKKyAgICBpbnQgZWxlbWVudEluZGV4OworICAg
IE1hcmtlckRhdGEgcHJldmlvdXNNYXJrZXJEYXRhOworICAgIEtDYW52YXNNYXJrZXIqIG1pZE1h
cmtlcjsKK307CisKK0RyYXdNYXJrZXJzRGF0YTo6RHJhd01hcmtlcnNEYXRhKEdyYXBoaWNzQ29u
dGV4dCogYywgS0NhbnZhc01hcmtlciAqc3RhcnQsIEtDYW52YXNNYXJrZXIgKm1pZCwgZG91Ymxl
IHN0cm9rZVdpZHRoKQorICAgIDogY29udGV4dChjKQoreworICAgIGVsZW1lbnRJbmRleCA9IDA7
CisgICAgbWlkTWFya2VyID0gbWlkOworICAgIAorICAgIHByZXZpb3VzTWFya2VyRGF0YS5vcmln
aW4gPSBGbG9hdFBvaW50KCk7CisgICAgcHJldmlvdXNNYXJrZXJEYXRhLnN0cm9rZVdpZHRoID0g
c3Ryb2tlV2lkdGg7CisgICAgcHJldmlvdXNNYXJrZXJEYXRhLm1hcmtlciA9IHN0YXJ0OworICAg
IHByZXZpb3VzTWFya2VyRGF0YS50eXBlID0gU3RhcnQ7CiB9CiAKLS8vIHZpbTp0cz00Om5vZXQK
LSNlbmRpZiAvLyBTVkdfU1VQUE9SVAorc3RhdGljIHZvaWQgZHJhd01hcmtlcldpdGhEYXRhKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgTWFya2VyRGF0YSAmZGF0YSkKK3sKKyAgICBpZiAoIWRh
dGEubWFya2VyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgRmxvYXRQb2ludCBpbnNsb3Bl
Q2hhbmdlID0gZGF0YS5pbnNsb3BlUG9pbnRzWzFdIC0gRmxvYXRTaXplKGRhdGEuaW5zbG9wZVBv
aW50c1swXS54KCksIGRhdGEuaW5zbG9wZVBvaW50c1swXS55KCkpOworICAgIEZsb2F0UG9pbnQg
b3V0c2xvcGVDaGFuZ2UgPSBkYXRhLm91dHNsb3BlUG9pbnRzWzFdIC0gRmxvYXRTaXplKGRhdGEu
b3V0c2xvcGVQb2ludHNbMF0ueCgpLCBkYXRhLm91dHNsb3BlUG9pbnRzWzBdLnkoKSk7CisgICAg
CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkZWcycmFkID0gTV9QSS8xODAuMDsKKyAgICBkb3Vi
bGUgaW5zbG9wZSA9IGF0YW4yKGluc2xvcGVDaGFuZ2UueSgpLCBpbnNsb3BlQ2hhbmdlLngoKSkg
LyBkZWcycmFkOworICAgIGRvdWJsZSBvdXRzbG9wZSA9IGF0YW4yKG91dHNsb3BlQ2hhbmdlLnko
KSwgb3V0c2xvcGVDaGFuZ2UueCgpKSAvIGRlZzJyYWQ7CisgICAgCisgICAgZG91YmxlIGFuZ2xl
OworICAgIGlmIChkYXRhLnR5cGUgPT0gU3RhcnQpCisgICAgICAgIGFuZ2xlID0gb3V0c2xvcGU7
CisgICAgZWxzZSBpZiAoZGF0YS50eXBlID09IE1pZCkKKyAgICAgICAgYW5nbGUgPSAoaW5zbG9w
ZSArIG91dHNsb3BlKSAvIDI7CisgICAgZWxzZSAvLyAoZGF0YS50eXBlID09IEVuZCkKKyAgICAg
ICAgYW5nbGUgPSBpbnNsb3BlOworICAgIAorICAgIGRhdGEubWFya2VyLT5kcmF3KGNvbnRleHQs
IEZsb2F0UmVjdCgpLCBkYXRhLm9yaWdpbi54KCksIGRhdGEub3JpZ2luLnkoKSwgZGF0YS5zdHJv
a2VXaWR0aCwgYW5nbGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlTWFya2VyRGF0
YUZvckVsZW1lbnQoTWFya2VyRGF0YSAmcHJldmlvdXNNYXJrZXJEYXRhLCBjb25zdCBQYXRoRWxl
bWVudCAqZWxlbWVudCkKK3sKKyAgICBGbG9hdFBvaW50ICpwb2ludHMgPSBlbGVtZW50LT5wb2lu
dHM7CisgICAgCisgICAgc3dpdGNoIChlbGVtZW50LT50eXBlKSB7CisgICAgY2FzZSBQYXRoRWxl
bWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6CisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgcHJldmlv
dXNNYXJrZXJEYXRhLm9yaWdpbiA9IHBvaW50c1sxXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRh
Lmluc2xvcGVQb2ludHNbMF0gPSBwb2ludHNbMV07CisgICAgICAgIHByZXZpb3VzTWFya2VyRGF0
YS5pbnNsb3BlUG9pbnRzWzFdID0gcG9pbnRzWzJdOworICAgICAgICBwcmV2aW91c01hcmtlckRh
dGEub3JpZ2luID0gcG9pbnRzWzJdOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBwcmV2aW91c01hcmtlckRhdGEuaW5zbG9wZVBvaW50c1swXSA9IHByZXZpb3VzTWFya2Vy
RGF0YS5vcmlnaW47CisgICAgICAgIHByZXZpb3VzTWFya2VyRGF0YS5pbnNsb3BlUG9pbnRzWzFd
ID0gcG9pbnRzWzBdOworICAgICAgICBwcmV2aW91c01hcmtlckRhdGEub3JpZ2luID0gcG9pbnRz
WzBdOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdTdGFydEFu
ZE1pZE1hcmtlcnModm9pZCAqaW5mbywgY29uc3QgUGF0aEVsZW1lbnQgKmVsZW1lbnQpCit7Cisg
ICAgRHJhd01hcmtlcnNEYXRhICZkYXRhID0gKihEcmF3TWFya2Vyc0RhdGEgKilpbmZvOworCisg
ICAgaW50IGVsZW1lbnRJbmRleCA9IGRhdGEuZWxlbWVudEluZGV4OworICAgIE1hcmtlckRhdGEg
JnByZXZpb3VzTWFya2VyRGF0YSA9IGRhdGEucHJldmlvdXNNYXJrZXJEYXRhOworCisgICAgRmxv
YXRQb2ludCAqcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwogCisgICAgLy8gRmlyc3QgdXBkYXRl
IHRoZSBvdXRzbG9wZSBmb3IgdGhlIHByZXZpb3VzIGVsZW1lbnQKKyAgICBwcmV2aW91c01hcmtl
ckRhdGEub3V0c2xvcGVQb2ludHNbMF0gPSBwcmV2aW91c01hcmtlckRhdGEub3JpZ2luOworICAg
IHByZXZpb3VzTWFya2VyRGF0YS5vdXRzbG9wZVBvaW50c1sxXSA9IHBvaW50c1swXTsKKworICAg
IC8vIERyYXcgdGhlIG1hcmtlciBmb3IgdGhlIHByZXZpb3VzIGVsZW1lbnQKKyAgICBpZiAoZWxl
bWVudEluZGV4ICE9IDApCisgICAgICAgIGRyYXdNYXJrZXJXaXRoRGF0YShkYXRhLmNvbnRleHQs
IHByZXZpb3VzTWFya2VyRGF0YSk7CisKKyAgICAvLyBVcGRhdGUgb3VyIG1hcmtlciBkYXRhIGZv
ciB0aGlzIGVsZW1lbnQKKyAgICB1cGRhdGVNYXJrZXJEYXRhRm9yRWxlbWVudChwcmV2aW91c01h
cmtlckRhdGEsIGVsZW1lbnQpOworCisgICAgaWYgKGVsZW1lbnRJbmRleCA9PSAxKSB7CisgICAg
ICAgIC8vIEFmdGVyIGRyYXdpbmcgdGhlIHN0YXJ0IG1hcmtlciwgc3dpdGNoIHRvIGRyYXdpbmcg
bWlkIG1hcmtlcnMKKyAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLm1hcmtlciA9IGRhdGEubWlk
TWFya2VyOworICAgICAgICBwcmV2aW91c01hcmtlckRhdGEudHlwZSA9IE1pZDsKKyAgICB9CisK
KyAgICBkYXRhLmVsZW1lbnRJbmRleCsrOworfQorCit2b2lkIFJlbmRlclBhdGg6OmRyYXdNYXJr
ZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IFBhdGgmIHBhdGgpIGNvbnN0Cit7CisgICAgRG9jdW1lbnQgKmRvYyA9IGRvY3Vt
ZW50KCk7CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUgKnN2Z1N0eWxlID0gc3R5bGUoKS0+c3Zn
U3R5bGUoKTsKKworICAgIEtDYW52YXNNYXJrZXIgKnN0YXJ0TWFya2VyID0gZ2V0TWFya2VyQnlJ
ZChkb2MsIHN2Z1N0eWxlLT5zdGFydE1hcmtlcigpLm1pZCgxKSk7CisgICAgS0NhbnZhc01hcmtl
ciAqbWlkTWFya2VyID0gZ2V0TWFya2VyQnlJZChkb2MsIHN2Z1N0eWxlLT5taWRNYXJrZXIoKS5t
aWQoMSkpOworICAgIEtDYW52YXNNYXJrZXIgKmVuZE1hcmtlciA9IGdldE1hcmtlckJ5SWQoZG9j
LCBzdmdTdHlsZS0+ZW5kTWFya2VyKCkubWlkKDEpKTsKKyAgICAKKyAgICBpZiAoIXN0YXJ0TWFy
a2VyICYmICFtaWRNYXJrZXIgJiYgIWVuZE1hcmtlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZG91YmxlIHN0cm9rZVdpZHRoID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xl
bmd0aCh0aGlzLCBzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApOworCisg
ICAgRHJhd01hcmtlcnNEYXRhIGRhdGEoY29udGV4dCwgc3RhcnRNYXJrZXIsIG1pZE1hcmtlciwg
c3Ryb2tlV2lkdGgpOworCisgICAgcGF0aC5hcHBseSgmZGF0YSwgZHJhd1N0YXJ0QW5kTWlkTWFy
a2Vycyk7CisKKyAgICBkYXRhLnByZXZpb3VzTWFya2VyRGF0YS5tYXJrZXIgPSBlbmRNYXJrZXI7
CisgICAgZGF0YS5wcmV2aW91c01hcmtlckRhdGEudHlwZSA9IEVuZDsKKyAgICBkcmF3TWFya2Vy
V2l0aERhdGEoY29udGV4dCwgZGF0YS5wcmV2aW91c01hcmtlckRhdGEpOworfQorCit9CisKKyNl
bmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDogV2ViQ29yZS9rY2FudmFzL1JlbmRlclBhdGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvUmVuZGVyUGF0aC5oCShyZXZpc2lvbiAxNjE5
NCkKKysrIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICovCiAKLSNpZm5k
ZWYgS0NhbnZhc0l0ZW1fSAotI2RlZmluZSBLQ2FudmFzSXRlbV9ICisjaWZuZGVmIFJlbmRlclBh
dGhfSAorI2RlZmluZSBSZW5kZXJQYXRoX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVk
ZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UK
ICAgICB2aXJ0dWFsIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJl
cXVpcmVzRmlsbCA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdHJva2VDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJv
b2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgYW4gdW5z
Y2FsZWQgYm91bmRpbmcgYm94IChub3QgZXZlbiBpbmNsdWRpbmcgbG9jYWxUcmFuc2Zvcm0oKSkg
Zm9yIHRoaXMgdmVjdG9yIHBhdGgKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWxhdGl2ZUJCb3go
Ym9vbCBpbmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7CkBAIC04OSw5ICs4OSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgYm9vbCBjYW5IaXRGaWxsOyAgCiAgICAgfTsKIAotcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgdm9pZCBkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJl
Y3Qgc3Ryb2tlQkJveCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd01hcmtlcnNJ
Zk5lZWRlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBQYXRoJikg
Y29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQkJveCgpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIEZsb2F0UG9pbnQgbWFwQWJzb2x1dGVQb2ludFRvTG9jYWwoY29uc3QgRmxvYXRQ
b2ludCYpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2
aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2
aWNlLmgJKHJldmlzaW9uIDE2MTk0KQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVy
aW5nRGV2aWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCAqY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IEtD
RmlsdGVyRWZmZWN0VHlwZSAmdHlwZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgS1JlbmRlcmlu
Z1BhaW50U2VydmVyICpjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1BhaW50U2VydmVyVHlwZSAm
dHlwZSkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZW5kZXJQYXRoICpjcmVhdGVJdGVtKFJl
bmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlLCBTVkdTdHlsZWRFbGVtZW50ICpu
b2RlLCBjb25zdCBQYXRoJiBwYXRoKSBjb25zdCA9IDA7Ci0KIHByaXZhdGU6CiAgICAgVmVjdG9y
PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kj4gbV9jb250ZXh0U3RhY2s7CiB9OwpJbmRleDogV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcAkocmV2
aXNpb24gMTYxOTQpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZp
Y2VRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxNCArMTgzLDYgQEAgS0NhbnZhc0ZpbHRl
ckVmZmVjdCogS1JlbmRlcmluZ0RldmljZVF0OgogICAgIHJldHVybiAwOwogfQogCi0vLyBpdGVt
IGNyZWF0aW9uCi1SZW5kZXJQYXRoKiBLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZUl0ZW0oUmVu
ZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUsIFNWR1N0eWxlZEVsZW1lbnQqIG5v
ZGUsIGNvbnN0IFBhdGgmIHBhdGgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyUGF0aCogaXRlbSA9IG5l
dyAoYXJlbmEpIFJlbmRlclBhdGhRdChzdHlsZSwgbm9kZSk7Ci0gICAgaXRlbS0+c2V0UGF0aChw
YXRoKTsKLSAgICByZXR1cm4gaXRlbTsKLX0KLQogS1JlbmRlcmluZ0RldmljZSogcmVuZGVyaW5n
RGV2aWNlKCkKIHsKICAgICBzdGF0aWMgS1JlbmRlcmluZ0RldmljZSAqc2hhcmVkUmVuZGVyaW5n
RGV2aWNlID0gbmV3IEtSZW5kZXJpbmdEZXZpY2VRdCgpOwpJbmRleDogV2ViQ29yZS9rY2FudmFz
L2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tj
YW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5oCShyZXZpc2lvbiAxNjE5NCkKKysr
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDkgKzgwLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgS0NhbnZhc1Jlc291
cmNlKiBjcmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSYpIGNvbnN0OwogICAgIHZp
cnR1YWwgS1JlbmRlcmluZ1BhaW50U2VydmVyKiBjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1Bh
aW50U2VydmVyVHlwZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCog
Y3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSYpIGNvbnN0OwotCi0g
ICAgLy8gaXRlbSBjcmVhdGlvbgotICAgIHZpcnR1YWwgUmVuZGVyUGF0aCogY3JlYXRlSXRlbShS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKiwgU1ZHU3R5bGVkRWxlbWVudCosIGNvbnN0IFBhdGgm
KSBjb25zdDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVy
UGF0aFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRl
clBhdGhRdC5jcHAJKHJldmlzaW9uIDE2MTk0KQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9x
dC9SZW5kZXJQYXRoUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyUGF0aFF0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyUGF0aC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2lu
Y2x1ZGUgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCiAKQEAgLTMxLDE3ICszMSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLVJlbmRlclBhdGhRdDo6UmVuZGVyUGF0aFF0KFJl
bmRlclN0eWxlKiBzdHlsZSwgU1ZHU3R5bGVkRWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclBh
dGgoc3R5bGUsIG5vZGUpCi17Ci19Ci0KLXZvaWQgUmVuZGVyUGF0aFF0OjpkcmF3TWFya2Vyc0lm
TmVlZGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgmKSBj
b25zdAotewotICAgIHFEZWJ1ZygiUmVuZGVyUGF0aFF0OjpkcmF3TWFya2Vyc0lmTmVlZGVkKCkg
VE9ETyEiKTsKLX0KLQotYm9vbCBSZW5kZXJQYXRoUXQ6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKSBjb25zdAorYm9vbCBSZW5kZXJQ
YXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJl
c1N0cm9rZSkgY29uc3QKIHsKICAgICBpZiAocGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtODMsNyArNzMsNyBAQCBzdGF0aWMgUVBhaW50ZXJQYXRoIGdldFBhdGhT
dHJva2UoY29uc3QgCiAgICAgcmV0dXJuIHMuY3JlYXRlU3Ryb2tlKHBhdGgpOwogfQogCi1GbG9h
dFJlY3QgUmVuZGVyUGF0aFF0OjpzdHJva2VCQm94KCkgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJQ
YXRoOjpzdHJva2VCQm94KCkgY29uc3QKIHsKICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBz
dHJva2VQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludGVyKHN0eWxlKCks
IHRoaXMpOwogICAgIFFQYWludGVyUGF0aCBvdXRsaW5lID0gZ2V0UGF0aFN0cm9rZSgqKHBhdGgo
KS5wbGF0Zm9ybVBhdGgoKSksIHN0cm9rZVBhaW50ZXIpOwpJbmRleDogV2ViQ29yZS9rY2FudmFz
L2RldmljZS9xdC9SZW5kZXJQYXRoUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5oCShyZXZpc2lvbiAxNjE5NCkKKysrIFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAy
MDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljLnNlaWRlbEBrZGVtYWlsLm5ldD4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCi0qLwotCi0jaWZuZGVmIFJlbmRlclBhdGhRdF9ICi0jZGVmaW5lIFJlbmRl
clBhdGhRdF9ICi0KLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgUmVuZGVyUGF0aFF0IDogcHVibGljIFJlbmRlclBhdGgKLXsKLXB1YmxpYzoK
LSAgICBSZW5kZXJQYXRoUXQoUmVuZGVyU3R5bGUqLCBTVkdTdHlsZWRFbGVtZW50Kik7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVx
dWlyZXNTdHJva2UpIGNvbnN0OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJCb3goKSBj
b25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBkcmF3TWFya2Vyc0lmTmVlZGVk
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgmKSBjb25zdDsK
LX07Ci0KLX0KLQotI2VuZGlmCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHouaAkocmV2aXNpb24g
MTYxOTQpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0
ei5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgS0NhbnZhc0l0ZW1RdWFydHpfaAotI2RlZmluZSBLQ2FudmFzSXRlbVF1YXJ0el9o
Ci0KLSNpbXBvcnQgImtjYW52YXMvUmVuZGVyUGF0aC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS0NhbnZhc0l0ZW1RdWFy
dHogOiBwdWJsaWMgUmVuZGVyUGF0aCB7Ci1wdWJsaWM6Ci0gICAgS0NhbnZhc0l0ZW1RdWFydHoo
UmVuZGVyU3R5bGUqLCBTVkdTdHlsZWRFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+S0NhbnZhc0l0
ZW1RdWFydHooKSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgZHJhd01hcmtlcnNJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBQYXRoJikgY29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQkJveCgp
IGNvbnN0OwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZh
cy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1tCShyZXZpc2lvbiAxNjE5NCkKKysr
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRl
ZiBTVkdfU1VQUE9SVAotI2ltcG9ydCAiS0NhbnZhc0l0ZW1RdWFydHouaCIKIAogI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KIApAQCAtNDksMTQ0ICs0OCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotS0NhbnZhc0l0ZW1RdWFydHo6OktDYW52YXNJdGVtUXVhcnR6KFJlbmRlclN0eWxl
ICpzdHlsZSwgU1ZHU3R5bGVkRWxlbWVudCAqbm9kZSkgOiBSZW5kZXJQYXRoKHN0eWxlLCBub2Rl
KQotewotfQotCi10eXBlZGVmIGVudW0gewotICAgIFN0YXJ0LAotICAgIE1pZCwKLSAgICBFbmQK
LX0gTWFya2VyVHlwZTsKLQotc3RydWN0IE1hcmtlckRhdGEgewotICAgIENHUG9pbnQgb3JpZ2lu
OwotICAgIGRvdWJsZSBzdHJva2VXaWR0aDsKLSAgICBDR1BvaW50IGluc2xvcGVQb2ludHNbMl07
Ci0gICAgQ0dQb2ludCBvdXRzbG9wZVBvaW50c1syXTsKLSAgICBNYXJrZXJUeXBlIHR5cGU7Ci0g
ICAgS0NhbnZhc01hcmtlciAqbWFya2VyOwotfTsKLQotc3RydWN0IERyYXdNYXJrZXJzRGF0YSB7
Ci0gICAgRHJhd01hcmtlcnNEYXRhKEdyYXBoaWNzQ29udGV4dCosIEtDYW52YXNNYXJrZXIqIHN0
YXJ0TWFya2VyLCBLQ2FudmFzTWFya2VyKiBtaWRNYXJrZXIsIGRvdWJsZSBzdHJva2VXaWR0aCk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0OwotICAgIGludCBlbGVtZW50SW5kZXg7Ci0g
ICAgTWFya2VyRGF0YSBwcmV2aW91c01hcmtlckRhdGE7Ci0gICAgS0NhbnZhc01hcmtlciogbWlk
TWFya2VyOwotfTsKLQotRHJhd01hcmtlcnNEYXRhOjpEcmF3TWFya2Vyc0RhdGEoR3JhcGhpY3ND
b250ZXh0KiBjLCBLQ2FudmFzTWFya2VyICpzdGFydCwgS0NhbnZhc01hcmtlciAqbWlkLCBkb3Vi
bGUgc3Ryb2tlV2lkdGgpCi0gICAgOiBjb250ZXh0KGMpCi17Ci0gICAgZWxlbWVudEluZGV4ID0g
MDsKLSAgICBtaWRNYXJrZXIgPSBtaWQ7Ci0gICAgCi0gICAgcHJldmlvdXNNYXJrZXJEYXRhLm9y
aWdpbiA9IENHUG9pbnRaZXJvOwotICAgIHByZXZpb3VzTWFya2VyRGF0YS5zdHJva2VXaWR0aCA9
IHN0cm9rZVdpZHRoOwotICAgIHByZXZpb3VzTWFya2VyRGF0YS5tYXJrZXIgPSBzdGFydDsKLSAg
ICBwcmV2aW91c01hcmtlckRhdGEudHlwZSA9IFN0YXJ0OwotfQotCi1zdGF0aWMgdm9pZCBkcmF3
TWFya2VyV2l0aERhdGEoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBNYXJrZXJEYXRhICZkYXRh
KQotewotICAgIGlmICghZGF0YS5tYXJrZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBD
R1BvaW50IGluc2xvcGVDaGFuZ2UgPSBDR1BvaW50U3VidHJhY3RQb2ludHMoZGF0YS5pbnNsb3Bl
UG9pbnRzWzFdLCBkYXRhLmluc2xvcGVQb2ludHNbMF0pOwotICAgIENHUG9pbnQgb3V0c2xvcGVD
aGFuZ2UgPSBDR1BvaW50U3VidHJhY3RQb2ludHMoZGF0YS5vdXRzbG9wZVBvaW50c1sxXSwgZGF0
YS5vdXRzbG9wZVBvaW50c1swXSk7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkZWcy
cmFkID0gTV9QSS8xODAuMDsKLSAgICBkb3VibGUgaW5zbG9wZSA9IGF0YW4yKGluc2xvcGVDaGFu
Z2UueSwgaW5zbG9wZUNoYW5nZS54KSAvIGRlZzJyYWQ7Ci0gICAgZG91YmxlIG91dHNsb3BlID0g
YXRhbjIob3V0c2xvcGVDaGFuZ2UueSwgb3V0c2xvcGVDaGFuZ2UueCkgLyBkZWcycmFkOwotICAg
IAotICAgIGRvdWJsZSBhbmdsZTsKLSAgICBpZiAoZGF0YS50eXBlID09IFN0YXJ0KQotICAgICAg
ICBhbmdsZSA9IG91dHNsb3BlOwotICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PSBNaWQpCi0gICAg
ICAgIGFuZ2xlID0gKGluc2xvcGUgKyBvdXRzbG9wZSkgLyAyOwotICAgIGVsc2UgLy8gKGRhdGEu
dHlwZSA9PSBFbmQpCi0gICAgICAgIGFuZ2xlID0gaW5zbG9wZTsKLSAgICAKLSAgICBkYXRhLm1h
cmtlci0+ZHJhdyhjb250ZXh0LCBGbG9hdFJlY3QoKSwgZGF0YS5vcmlnaW4ueCwgZGF0YS5vcmln
aW4ueSwgZGF0YS5zdHJva2VXaWR0aCwgYW5nbGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQg
dXBkYXRlTWFya2VyRGF0YUZvckVsZW1lbnQoTWFya2VyRGF0YSAmcHJldmlvdXNNYXJrZXJEYXRh
LCBjb25zdCBDR1BhdGhFbGVtZW50ICplbGVtZW50KQotewotICAgIENHUG9pbnQgKnBvaW50cyA9
IGVsZW1lbnQtPnBvaW50czsKLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5cGUpIHsKLSAg
ICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKLSAgICAgICAgLy8gVE9E
TwotICAgICAgICBwcmV2aW91c01hcmtlckRhdGEub3JpZ2luID0gcG9pbnRzWzFdOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OgotICAgICAg
ICBwcmV2aW91c01hcmtlckRhdGEuaW5zbG9wZVBvaW50c1swXSA9IHBvaW50c1sxXTsKLSAgICAg
ICAgcHJldmlvdXNNYXJrZXJEYXRhLmluc2xvcGVQb2ludHNbMV0gPSBwb2ludHNbMl07Ci0gICAg
ICAgIHByZXZpb3VzTWFya2VyRGF0YS5vcmlnaW4gPSBwb2ludHNbMl07Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByZXZpb3VzTWFya2VyRGF0YS5pbnNsb3BlUG9pbnRz
WzBdID0gcHJldmlvdXNNYXJrZXJEYXRhLm9yaWdpbjsKLSAgICAgICAgcHJldmlvdXNNYXJrZXJE
YXRhLmluc2xvcGVQb2ludHNbMV0gPSBwb2ludHNbMF07Ci0gICAgICAgIHByZXZpb3VzTWFya2Vy
RGF0YS5vcmlnaW4gPSBwb2ludHNbMF07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3Rh
dGljIHZvaWQgZHJhd1N0YXJ0QW5kTWlkTWFya2Vycyh2b2lkICppbmZvLCBjb25zdCBDR1BhdGhF
bGVtZW50ICplbGVtZW50KQotewotICAgIERyYXdNYXJrZXJzRGF0YSAmZGF0YSA9ICooRHJhd01h
cmtlcnNEYXRhICopaW5mbzsKLQotICAgIGludCBlbGVtZW50SW5kZXggPSBkYXRhLmVsZW1lbnRJ
bmRleDsKLSAgICBNYXJrZXJEYXRhICZwcmV2aW91c01hcmtlckRhdGEgPSBkYXRhLnByZXZpb3Vz
TWFya2VyRGF0YTsKLQotICAgIENHUG9pbnQgKnBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKLQot
ICAgIC8vIEZpcnN0IHVwZGF0ZSB0aGUgb3V0c2xvcGUgZm9yIHRoZSBwcmV2aW91cyBlbGVtZW50
Ci0gICAgcHJldmlvdXNNYXJrZXJEYXRhLm91dHNsb3BlUG9pbnRzWzBdID0gcHJldmlvdXNNYXJr
ZXJEYXRhLm9yaWdpbjsKLSAgICBwcmV2aW91c01hcmtlckRhdGEub3V0c2xvcGVQb2ludHNbMV0g
PSBwb2ludHNbMF07Ci0KLSAgICAvLyBEcmF3IHRoZSBtYXJrZXIgZm9yIHRoZSBwcmV2aW91cyBl
bGVtZW50Ci0gICAgaWYgKGVsZW1lbnRJbmRleCAhPSAwKQotICAgICAgICBkcmF3TWFya2VyV2l0
aERhdGEoZGF0YS5jb250ZXh0LCBwcmV2aW91c01hcmtlckRhdGEpOwotCi0gICAgLy8gVXBkYXRl
IG91ciBtYXJrZXIgZGF0YSBmb3IgdGhpcyBlbGVtZW50Ci0gICAgdXBkYXRlTWFya2VyRGF0YUZv
ckVsZW1lbnQocHJldmlvdXNNYXJrZXJEYXRhLCBlbGVtZW50KTsKLQotICAgIGlmIChlbGVtZW50
SW5kZXggPT0gMSkgewotICAgICAgICAvLyBBZnRlciBkcmF3aW5nIHRoZSBzdGFydCBtYXJrZXIs
IHN3aXRjaCB0byBkcmF3aW5nIG1pZCBtYXJrZXJzCi0gICAgICAgIHByZXZpb3VzTWFya2VyRGF0
YS5tYXJrZXIgPSBkYXRhLm1pZE1hcmtlcjsKLSAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLnR5
cGUgPSBNaWQ7Ci0gICAgfQotCi0gICAgZGF0YS5lbGVtZW50SW5kZXgrKzsKLX0KLQotdm9pZCBL
Q2FudmFzSXRlbVF1YXJ0ejo6ZHJhd01hcmtlcnNJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgUGF0aCYgcGF0aCkgY29uc3QKLXsK
LSAgICBEb2N1bWVudCAqZG9jID0gZG9jdW1lbnQoKTsKLSAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSAqc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotCi0gICAgS0NhbnZhc01hcmtlciAq
c3RhcnRNYXJrZXIgPSBnZXRNYXJrZXJCeUlkKGRvYywgc3ZnU3R5bGUtPnN0YXJ0TWFya2VyKCku
bWlkKDEpKTsKLSAgICBLQ2FudmFzTWFya2VyICptaWRNYXJrZXIgPSBnZXRNYXJrZXJCeUlkKGRv
Yywgc3ZnU3R5bGUtPm1pZE1hcmtlcigpLm1pZCgxKSk7Ci0gICAgS0NhbnZhc01hcmtlciAqZW5k
TWFya2VyID0gZ2V0TWFya2VyQnlJZChkb2MsIHN2Z1N0eWxlLT5lbmRNYXJrZXIoKS5taWQoMSkp
OwotICAgIAotICAgIGlmICghc3RhcnRNYXJrZXIgJiYgIW1pZE1hcmtlciAmJiAhZW5kTWFya2Vy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBLU1ZHUGFpbnRl
ckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKHRoaXMsIHN0eWxlKCktPnN2Z1N0eWxlKCkt
PnN0cm9rZVdpZHRoKCksIDEuMCk7Ci0KLSAgICBEcmF3TWFya2Vyc0RhdGEgZGF0YShjb250ZXh0
LCBzdGFydE1hcmtlciwgbWlkTWFya2VyLCBzdHJva2VXaWR0aCk7Ci0KLSAgICBDR1BhdGhSZWYg
Y2dQYXRoID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKLSAgICBDR1BhdGhBcHBseShjZ1BhdGgsICZk
YXRhLCBkcmF3U3RhcnRBbmRNaWRNYXJrZXJzKTsKLQotICAgIGRhdGEucHJldmlvdXNNYXJrZXJE
YXRhLm1hcmtlciA9IGVuZE1hcmtlcjsKLSAgICBkYXRhLnByZXZpb3VzTWFya2VyRGF0YS50eXBl
ID0gRW5kOwotICAgIGRyYXdNYXJrZXJXaXRoRGF0YShjb250ZXh0LCBkYXRhLnByZXZpb3VzTWFy
a2VyRGF0YSk7Ci19Ci0KLUZsb2F0UmVjdCBLQ2FudmFzSXRlbVF1YXJ0ejo6c3Ryb2tlQkJveCgp
IGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyUGF0aDo6c3Ryb2tlQkJveCgpIGNvbnN0CiB7CiAgICAg
aWYgKEtTVkdQYWludGVyRmFjdG9yeTo6aXNTdHJva2VkKHN0eWxlKCkpKSB7CiAgICAgICAgIEtS
ZW5kZXJpbmdTdHJva2VQYWludGVyIHN0cm9rZVBhaW50ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6
OnN0cm9rZVBhaW50ZXIoc3R5bGUoKSwgdGhpcyk7CkBAIC0xOTcsNyArNTksNyBAQCBGbG9hdFJl
Y3QgS0NhbnZhc0l0ZW1RdWFydHo6OnN0cm9rZUJCb3goCiB9CiAKIAotYm9vbCBLQ2FudmFzSXRl
bVF1YXJ0ejo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVx
dWlyZXNTdHJva2UpIGNvbnN0Citib29sIFJlbmRlclBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKSBjb25zdAogewogICAgIGlm
IChwYXRoKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0
ei5oCShyZXZpc2lvbiAxNjE5NCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tS
ZW5kZXJpbmdEZXZpY2VRdWFydHouaAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmNyZWF0ZVBhaW50U2Vy
dmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlICZ0eXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIEtD
YW52YXNGaWx0ZXJFZmZlY3QgKmNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVj
dFR5cGUgJnR5cGUpIGNvbnN0OwogICAgIAotICAgIC8vIGl0ZW0gY3JlYXRpb24KLSAgICB2aXJ0
dWFsIFJlbmRlclBhdGggKmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHls
ZSAqc3R5bGUsIFNWR1N0eWxlZEVsZW1lbnQgKm5vZGUsIGNvbnN0IFBhdGgmIHBhdGgpIGNvbnN0
OwotCiAgICAgLy8gZmlsdGVycyAobW9zdGx5IGRlYnVnZ2luZykKICAgICBzdGF0aWMgYm9vbCBm
aWx0ZXJzRW5hYmxlZCgpOwogICAgIHN0YXRpYyB2b2lkIHNldEZpbHRlcnNFbmFibGVkKGJvb2wg
ZW5hYmxlZCk7CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5n
RGV2aWNlUXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JKHJldmlzaW9uIDE2MTk0KQorKysgV2ViQ29y
ZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgog
I2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJLQ2FudmFzRmlsdGVyUXVhcnR6
LmgiCi0jaW1wb3J0ICJLQ2FudmFzSXRlbVF1YXJ0ei5oIgogI2ltcG9ydCAiS0NhbnZhc01hc2tl
clF1YXJ0ei5oIgogI2ltcG9ydCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIgogI2ltcG9ydCAi
S1JlbmRlcmluZ0ZpbGxQYWludGVyLmgiCkBAIC0xODQsMTMgKzE4Myw2IEBAIEtSZW5kZXJpbmdQ
YWludFNlcnZlciAqS1JlbmRlcmluZ0RldmljZVEKICAgICByZXR1cm4gbmV3U2VydmVyOwogfQog
Ci1SZW5kZXJQYXRoICpLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjcmVhdGVJdGVtKFJlbmRlckFy
ZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlLCBTVkdTdHlsZWRFbGVtZW50ICpub2RlLCBj
b25zdCBQYXRoJiBwYXRoKSBjb25zdAotewotICAgIFJlbmRlclBhdGggKml0ZW0gPSBuZXcgKGFy
ZW5hKSBLQ2FudmFzSXRlbVF1YXJ0eihzdHlsZSwgbm9kZSk7Ci0gICAgaXRlbS0+c2V0UGF0aChw
YXRoKTsKLSAgICByZXR1cm4gaXRlbTsKLX0KLQogS0NhbnZhc1Jlc291cmNlICpLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6OjpjcmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSAmdHlwZSkg
Y29uc3QKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmgJKHJldmlzaW9uIDE2MTk0KQorKysgV2ViQ29y
ZS9rY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OSwxMSArNzksNiBAQCBzdGF0aWMgaW5saW5lIENHTGluZUpvaW4gQ0dMaW5lSm9pbkZyb21L
CiAgICAgcmV0dXJuIGtDR0xpbmVKb2luTWl0ZXI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgQ0dQb2lu
dCBDR1BvaW50U3VidHJhY3RQb2ludHMoQ0dQb2ludCBhLCBDR1BvaW50IGIpCi17Ci0gICAgcmV0
dXJuIENHUG9pbnRNYWtlKGEueCAtIGIueCwgYS55IC0gYi55KTsKLX0KLQogfQogCiAjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE2MTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJj
c3NoZWxwZXIuaCIKICNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2lu
Y2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL2Rldmlj
ZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE5NCkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4
ICszMSw2IEBACiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkTGVuZ3RoLmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+Ci0K
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBTVkdDaXJjbGVFbGVtZW50OjpTVkdDaXJjbGVF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCkBAIC04
Miw3ICs4MCw3IEBAIFBhdGggU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnMKICAg
ICBmbG9hdCBfY3ggPSBjeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9jeSA9IGN5KCktPmJhc2VW
YWwoKS0+dmFsdWUoKTsKICAgICBmbG9hdCBfciA9IHIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwog
Ci0gICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZUNpcmNsZShGbG9hdFBv
aW50KF9jeCwgX2N5KSwgX3IpOworICAgIHJldHVybiBQYXRoOjpjcmVhdGVDaXJjbGUoRmxvYXRQ
b2ludChfY3gsIF9jeSksIF9yKTsKIH0KIAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHQ2ly
Y2xlRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAq
Y29udGV4dCkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE2MTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw2IEBACiAjaW5jbHVkZSAiU1ZHRWxsaXBzZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgogCi0jaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzQ3JlYXRvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0VsbGlw
c2VFbGVtZW50OjpTVkdFbGxpcHNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCAqZG9jKQpAQCAtODksNyArODcsNyBAQCBQYXRoIFNWR0VsbGlwc2VFbGVtZW50
Ojp0b1BhdGhEYXRhKCkgY29uCiAgICAgZmxvYXQgX2N4ID0gY3goKS0+YmFzZVZhbCgpLT52YWx1
ZSgpLCBfY3kgPSBjeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgZmxvYXQgX3J4ID0gcngo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfcnkgPSByeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAK
LSAgICByZXR1cm4gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlRWxsaXBzZShGbG9hdFBv
aW50KF9jeCwgX2N5KSwgX3J4LCBfcnkpOworICAgIHJldHVybiBQYXRoOjpjcmVhdGVFbGxpcHNl
KEZsb2F0UG9pbnQoX2N4LCBfY3kpLCBfcngsIF9yeSk7CiB9CiAKIGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQgKlNWR0VsbGlwc2VFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdT
dHlsZWRFbGVtZW50ICpjb250ZXh0KQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dFbGVtZW50LmNwcAko
cmV2aXNpb24gMTYxOTQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1
ZGUgIlNWR0dFbGVtZW50LmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+
CiAjaW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuaD4KICNpbmNsdWRlIDxrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
SW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTYxOTQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5j
bHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRl
IDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZh
c0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNJbWFnZS5oPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE2MTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw2IEBACiAjaW5jbHVkZSAiU1ZHTGluZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgogCi0jaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzQ3JlYXRvci5oPgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogU1ZH
TGluZUVsZW1lbnQ6OlNWR0xpbmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50ICpkb2MpCkBAIC04OSw3ICs4Nyw3IEBAIFBhdGggU1ZHTGluZUVsZW1lbnQ6OnRv
UGF0aERhdGEoKSBjb25zdAogICAgIGZsb2F0IF94MSA9IHgxKCktPmJhc2VWYWwoKS0+dmFsdWUo
KSwgX3kxID0geTEoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAgIGZsb2F0IF94MiA9IHgyKCkt
PmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kyID0geTIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogCi0g
ICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZUxpbmUoRmxvYXRQb2ludChf
eDEsIF95MSksIEZsb2F0UG9pbnQoX3gyLCBfeTIpKTsKKyAgICByZXR1cm4gUGF0aDo6Y3JlYXRl
TGluZShGbG9hdFBvaW50KF94MSwgX3kxKSwgRmxvYXRQb2ludChfeDIsIF95MikpOwogfQogCiBj
b25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdMaW5lRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRl
eHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR01hcmtlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE5NCkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBA
CiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgImtzdmcuaCIKICNpbmNsdWRl
IDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZh
c0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vb3RoLmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAj
aW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjE5NCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFp
bmVyLmgiCi0jaW5jbHVkZSAiS0NhbnZhc0NyZWF0b3IuaCIKICNpbmNsdWRlICJLQ2FudmFzSW1h
Z2UuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLUmVu
ZGVyaW5nRGV2aWNlLmgiCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNjE5NCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIlNWR1Bv
aW50TGlzdC5oIgogI2luY2x1ZGUgIlNWR1BvbHlnb25FbGVtZW50LmgiCiAKLSNpbmNsdWRlIDxr
Y2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRl
cmluZ0RldmljZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYxOTQpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9s
eWxpbmVFbGVtZW50LmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAj
aW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE2MTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2Uv
S1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdG
aWxsUGFpbnRlci5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNl
cnZlclNvbGlkLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExMSwxMCArMTEwLDEwIEBAIFBhdGggU1ZHUmVjdEVsZW1l
bnQ6OnRvUGF0aERhdGEoKSBjb25zdAogICAgIHsKICAgICAgICAgZmxvYXQgX3J4ID0gaGFzUngg
PyByeCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiByeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAg
ICAgICAgIGZsb2F0IF9yeSA9IGhhc1J5ID8gcnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogcngo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgICAgICByZXR1cm4gS0NhbnZhc0NyZWF0b3I6OnNl
bGYoKS0+Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShGbG9hdFJlY3QoX3gsIF95LCBfd2lkdGgsIF9o
ZWlnaHQpLCBGbG9hdFNpemUoX3J4LCBfcnkpKTsKKyAgICAgICAgcmV0dXJuIFBhdGg6OmNyZWF0
ZVJvdW5kZWRSZWN0YW5nbGUoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSwgRmxv
YXRTaXplKF9yeCwgX3J5KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpz
ZWxmKCktPmNyZWF0ZVJlY3RhbmdsZShGbG9hdFJlY3QoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQp
KTsKKyAgICByZXR1cm4gUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKEZsb2F0UmVjdChfeCwgX3ksIF93
aWR0aCwgX2hlaWdodCkpOwogfQogCiBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdSZWN0RWxl
bWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4
dCkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE5NCkK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiU1ZHWm9vbUV2ZW50LmgiCiAjaW5jbHVkZSAia3N2
Zy5oIgogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8
a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5k
ZXJpbmdEZXZpY2UuaD4KICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE5NCkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw2IEBACiAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJLQ2FudmFzQ3JlYXRvci5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5o
IgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgpAQCAtNzEsNyArNzAsMTAgQEAgUmVuZGVyT2JqZWN0KiBTVkdTdHlsZWRFbGVtZW50Ojpj
cmVhdGVSZQogICAgIFBhdGggcGF0aERhdGEgPSB0b1BhdGhEYXRhKCk7CiAgICAgaWYgKHBhdGhE
YXRhLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHJlbmRlcmluZ0Rl
dmljZSgpLT5jcmVhdGVJdGVtKGFyZW5hLCBzdHlsZSwgdGhpcywgcGF0aERhdGEpOworCisgICAg
UmVuZGVyUGF0aCAqaXRlbSA9IG5ldyAoYXJlbmEpIFJlbmRlclBhdGgoc3R5bGUsIHRoaXMpOwor
ICAgIGl0ZW0tPnNldFBhdGgocGF0aERhdGEpOworICAgIHJldHVybiBpdGVtOwogfQogCiB2b2lk
IFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjE5NCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRl
ICJBdHRyLmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAjaW5jbHVk
ZSA8a2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuaD4KICNpbmNsdWRlIDxrY2FudmFzL2Rldmlj
ZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiU1ZHUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdUU3BhbkVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRl
IDxrY2FudmFzL1JlbmRlclNWR1RleHQuaD4KICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MTk0KQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDYgQEAKICNpbmNsdWRlICJTVkdTeW1ib2xFbGVtZW50LmgiCiAjaW5jbHVkZSAia3N2Zy5o
IgogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJp
bmdEZXZpY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BhdGguY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgICAg
ICAgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGF0aCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVj
dCYgYm94LCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpCit7CisgICAgUGF0aCBwYXRo
OworICAgIGZsb2F0IHggPSBib3gueCgpOworICAgIGZsb2F0IHkgPSBib3gueSgpOworICAgIGZs
b2F0IHdpZHRoID0gYm94LndpZHRoKCk7CisgICAgZmxvYXQgaGVpZ2h0ID0gYm94LmhlaWdodCgp
OworICAgIGZsb2F0IHJ4ID0gcm91bmRpbmdSYWRpaS53aWR0aCgpOworICAgIGZsb2F0IHJ5ID0g
cm91bmRpbmdSYWRpaS5oZWlnaHQoKTsKKyAgICBpZiAod2lkdGggPD0gMC4wZiB8fCBoZWlnaHQg
PD0gMC4wZikKKyAgICAgICAgcmV0dXJuIHBhdGg7CisKKyAgICBkb3VibGUgbnJ4ID0gcngsIG5y
eSA9IHJ5OworICAgIC8vIElmIHJ4IGlzIGdyZWF0ZXIgdGhhbiBoYWxmIG9mIHRoZSB3aWR0aCBv
ZiB0aGUgcmVjdGFuZ2xlCisgICAgLy8gdGhlbiBzZXQgcnggdG8gaGFsZiBvZiB0aGUgd2lkdGgg
KHJlcXVpcmVkIGluIFNWRyBzcGVjKQorICAgIGlmIChucnggPiB3aWR0aCAvIDIpCisgICAgICAg
IG5yeCA9IHdpZHRoIC8gMjsKKworICAgIC8vIElmIHJ5IGlzIGdyZWF0ZXIgdGhhbiBoYWxmIG9m
IHRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZQorICAgIC8vIHRoZW4gc2V0IHJ5IHRvIGhhbGYg
b2YgdGhlIGhlaWdodCAocmVxdWlyZWQgaW4gU1ZHIHNwZWMpCisgICAgaWYgKG5yeSA+IGhlaWdo
dCAvIDIpCisgICAgICAgIG5yeSA9IGhlaWdodCAvIDI7CisKKyAgICBwYXRoLm1vdmVUbyhGbG9h
dFBvaW50KHggKyBucngsIHkpKTsKKworICAgIGlmIChucnggPCB3aWR0aCAvIDIpCisgICAgICAg
IHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gcngsIHkpKTsKKworICAgIHBh
dGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIG5yeCAqICgxIC0gMC41
NTIpLCB5KSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBucnkgKiAoMSAtIDAuNTUyKSksIEZs
b2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgbnJ5KSk7CisKKyAgICBpZiAobnJ5IDwgaGVpZ2h0IC8g
MikKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWln
aHQgLSBucnkpKTsKKworICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3
aWR0aCwgeSArIGhlaWdodCAtIG5yeSAqICgxIC0gMC41NTIpKSwgRmxvYXRQb2ludCh4ICsgd2lk
dGggLSBucnggKiAoMSAtIDAuNTUyKSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCArIHdpZHRo
IC0gbnJ4LCB5ICsgaGVpZ2h0KSk7CisKKyAgICBpZiAobnJ4IDwgd2lkdGggLyAyKQorICAgICAg
ICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyBucngsIHkgKyBoZWlnaHQpKTsKKworICAg
IHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyBucnggKiAoMSAtIDAuNTUyKSwg
eSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIG5yeSAqICgxIC0gMC41NTIp
KSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0IC0gbnJ5KSk7CisKKyAgICBpZiAobnJ5IDwgaGVp
Z2h0IC8gMikKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5ICsgbnJ5KSk7
CisKKyAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4LCB5ICsgbnJ5ICogKDEg
LSAwLjU1MikpLCBGbG9hdFBvaW50KHggKyBucnggKiAoMSAtIDAuNTUyKSwgeSksIEZsb2F0UG9p
bnQoeCArIG5yeCwgeSkpOworCisgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKKworICAgIHJldHVy
biBwYXRoOworfQorCitQYXRoIFBhdGg6OmNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3Qm
IGJveCkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgZmxvYXQgeCA9IGJveC54KCk7CisgICAgZmxv
YXQgeSA9IGJveC55KCk7CisgICAgZmxvYXQgd2lkdGggPSBib3gud2lkdGgoKTsKKyAgICBmbG9h
dCBoZWlnaHQgPSBib3guaGVpZ2h0KCk7CisgICAgaWYgKHdpZHRoIDwgMC4wZiB8fCBoZWlnaHQg
PCAwLjBmKQorICAgICAgICByZXR1cm4gcGF0aDsKKyAgICAKKyAgICBwYXRoLm1vdmVUbyhGbG9h
dFBvaW50KHgsIHkpKTsKKyAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwg
eSkpOworICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0
KSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0KSk7CisgICAg
cGF0aC5jbG9zZVN1YnBhdGgoKTsKKworICAgIHJldHVybiBwYXRoOworfQorCitQYXRoIFBhdGg6
OmNyZWF0ZUVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCZjLCBmbG9hdCByeCwgZmxvYXQgcnkpCit7
CisgICAgZmxvYXQgY3ggPSBjLngoKTsKKyAgICBmbG9hdCBjeSA9IGMueSgpOworICAgIFBhdGgg
cGF0aDsKKyAgICBpZiAocnggPD0gMC4wZiB8fCByeSA8PSAwLjBmKQorICAgICAgICByZXR1cm4g
cGF0aDsKKworICAgIC8vIEVsbGlwc2UgY3JlYXRpb24gLSBuaWNlICYgY2xlYW4gYWdnMiBjb2Rl
CisgICAgZG91YmxlIHggPSBjeCwgeSA9IGN5OworCisgICAgdW5zaWduZWQgc3RlcCA9IDAsIG51
bSA9IDEwMDsKKyAgICBib29sIHJ1bm5pbmcgPSB0cnVlOworICAgIHdoaWxlKHJ1bm5pbmcpCisg
ICAgeworICAgICAgICBpZihzdGVwID09IG51bSkKKyAgICAgICAgeworICAgICAgICAgICAgcnVu
bmluZyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBk
b3VibGUgYW5nbGUgPSBkb3VibGUoc3RlcCkgLyBkb3VibGUobnVtKSAqIDIuMCAqIE1fUEk7Cisg
ICAgICAgIHggPSBjeCArIGNvcyhhbmdsZSkgKiByeDsKKyAgICAgICAgeSA9IGN5ICsgc2luKGFu
Z2xlKSAqIHJ5OworCisgICAgICAgIHN0ZXArKzsKKyAgICAgICAgaWYoc3RlcCA9PSAxKQorICAg
ICAgICAgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSkpOworICAgIH0KKworICAg
IHBhdGguY2xvc2VTdWJwYXRoKCk7CisKKyAgICByZXR1cm4gcGF0aDsKK30KKworUGF0aCBQYXRo
OjpjcmVhdGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgYywgZmxvYXQgcikKK3sKKyAgICByZXR1
cm4gY3JlYXRlRWxsaXBzZShjLCByLCByKTsKK30KKworUGF0aCBQYXRoOjpjcmVhdGVMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0LCBjb25zdCBGbG9hdFBvaW50JiBlbmQpCit7CisgICAgUGF0
aCBwYXRoOworICAgIGlmIChzdGFydC54KCkgPT0gZW5kLngoKSAmJiBzdGFydC55KCkgPT0gZW5k
LnkoKSkKKyAgICAgICAgcmV0dXJuIHBhdGg7CisKKyAgICBwYXRoLm1vdmVUbyhzdGFydCk7Cisg
ICAgcGF0aC5hZGRMaW5lVG8oZW5kKTsKKworICAgIHJldHVybiBwYXRoOworfQorCit9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L1BhdGguaAkocmV2aXNpb24gMTYxOTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BhdGguaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsMTUgKzM4LDM0IEBAIHR5cGVkZWYgdm9pZCBQbGF0Zm9ybVBhdGg7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKKyAg
ICBjbGFzcyBGbG9hdFBvaW50OworICAgIGNsYXNzIEZsb2F0U2l6ZTsKKyAgICBjbGFzcyBGbG9h
dFJlY3Q7CisgICAgY2xhc3MgU3RyaW5nOworCiAgICAgZW51bSBXaW5kUnVsZSB7CiAgICAgICAg
IFJVTEVfTk9OWkVSTyA9IDAsCiAgICAgICAgIFJVTEVfRVZFTk9ERCA9IDEKICAgICB9OwogCi0g
ICAgY2xhc3MgRmxvYXRQb2ludDsKLSAgICBjbGFzcyBGbG9hdFNpemU7Ci0gICAgY2xhc3MgRmxv
YXRSZWN0OwotICAgIGNsYXNzIFN0cmluZzsKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBQ
YXRoRWxlbWVudE1vdmVUb1BvaW50LAorICAgICAgICBQYXRoRWxlbWVudEFkZExpbmVUb1BvaW50
LAorICAgICAgICBQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQsCisgICAgICAgIFBhdGhF
bGVtZW50QWRkQ3VydmVUb1BvaW50LAorICAgICAgICBQYXRoRWxlbWVudENsb3NlU3VicGF0aAor
ICAgIH0gUGF0aEVsZW1lbnRUeXBlOworCisgICAgdHlwZWRlZiBzdHJ1Y3QgUGF0aEVsZW1lbnQg
eworICAgICAgICBQYXRoRWxlbWVudFR5cGUgdHlwZTsKKyAgICAgICAgRmxvYXRQb2ludCAqcG9p
bnRzOworICAgIH0gUGF0aEVsZW1lbnQ7CisKKyAgICB0eXBlZGVmIHZvaWQgKCpQYXRoQXBwbGll
ckZ1bmN0aW9uKSAoCisgICAgICAgIHZvaWQqIGluZm8sCisgICAgICAgIGNvbnN0IFBhdGhFbGVt
ZW50KiBlbGVtZW50CisgICAgKTsKIAogICAgIGNsYXNzIFBhdGggewogICAgIHB1YmxpYzoKQEAg
LTgyLDYgKzEwMSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGxhdGZvcm1Q
YXRoKiBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAorICAgICAgICBz
dGF0aWMgUGF0aCBjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0U2l6ZSYpOworICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVSZWN0YW5nbGUoY29uc3Qg
RmxvYXRSZWN0Jik7CisgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUVsbGlwc2UoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0LCBmbG9hdCk7CisgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUNpcmNs
ZShjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQpOworICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICAgICAgdm9p
ZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdDsK
KyAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisKICAgICBw
cml2YXRlOgogICAgICAgICBQbGF0Zm9ybVBhdGgqIG1fcGF0aDsKICAgICAgICAgV2luZFJ1bGUg
bV9ydWxlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jZy9QYXRoQ0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vY2cvUGF0aENHLmNwcAkocmV2aXNpb24gMTYxOTQpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2NnL1BhdGhDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25T
ZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTE4NSw2ICsxODYsOTEgQEAgU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCit0eXBlZGVmIHN0cnVjdCBQYXRoQXBwbGllckluZm8geworICAg
IHZvaWQqIGluZm87CisgICAgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbjsKK30gUGF0aEFw
cGxpZXJJbmZvOworCit2b2lkIENHUGF0aEFwcGxpZXJUb1BhdGhBcHBsaWVyKHZvaWQgKmluZm8s
IGNvbnN0IENHUGF0aEVsZW1lbnQgKmVsZW1lbnQpCit7CisgICAgUGF0aEFwcGxpZXJJbmZvKiBw
aW5mbyA9IChQYXRoQXBwbGllckluZm8qKWluZm87CisgICAgRmxvYXRQb2ludCBwb2ludHNbMl07
CisgICAgUGF0aEVsZW1lbnQgcGVsZW1lbnQ7CisgICAgcGVsZW1lbnQudHlwZSA9IChQYXRoRWxl
bWVudFR5cGUpZWxlbWVudC0+dHlwZTsKKyAgICBwZWxlbWVudC5wb2ludHMgPSBwb2ludHM7Cisg
ICAgQ0dQb2ludCAqY2dQb2ludHMgPSBlbGVtZW50LT5wb2ludHM7CisgICAgc3dpdGNoKGVsZW1l
bnQtPnR5cGUpIHsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50TW92ZVRvUG9pbnQ6CisgICAgY2Fz
ZSBrQ0dQYXRoRWxlbWVudEFkZExpbmVUb1BvaW50OgorICAgICAgICBwb2ludHNbMF0gPSBjZ1Bv
aW50c1swXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dQYXRoRWxlbWVudEFkZFF1YWRD
dXJ2ZVRvUG9pbnQ6CisgICAgICAgIHBvaW50c1swXSA9IGNnUG9pbnRzWzBdOworICAgICAgICBw
b2ludHNbMV0gPSBjZ1BvaW50c1sxXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dQYXRo
RWxlbWVudEFkZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgcG9pbnRzWzBdID0gY2dQb2ludHNbMF07
CisgICAgICAgIHBvaW50c1sxXSA9IGNnUG9pbnRzWzFdOworICAgICAgICBwb2ludHNbMl0gPSBj
Z1BvaW50c1syXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dQYXRoRWxlbWVudENsb3Nl
U3VicGF0aDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHBpbmZvLT5mdW5jdGlvbihwaW5m
by0+aW5mbywgJnBlbGVtZW50KTsKK30KKwordm9pZCBQYXRoOjphcHBseSh2b2lkICppbmZvLCBQ
YXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdAoreworICAgIFBhdGhBcHBsaWVySW5m
byBwaW5mbzsKKyAgICBwaW5mby5pbmZvID0gaW5mbzsKKyAgICBwaW5mby5mdW5jdGlvbiA9IGZ1
bmN0aW9uOworICAgIENHUGF0aEFwcGx5KG1fcGF0aCwgJnBpbmZvLCBDR1BhdGhBcHBsaWVyVG9Q
YXRoQXBwbGllcik7Cit9CisKK3R5cGVkZWYgc3RydWN0IFBhdGhUcmFuc2Zvcm1JbmZvIHsKKyAg
ICBDR011dGFibGVQYXRoUmVmIHBhdGg7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
OworfSBQYXRoVHJhbnNmb3JtSW5mbzsKKwordm9pZCBDR1BhdGhUcmFuc2Zvcm1lcih2b2lkICpp
bmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICplbGVtZW50KQoreworICAgIFBhdGhUcmFuc2Zvcm1J
bmZvKiBwaW5mbyA9IChQYXRoVHJhbnNmb3JtSW5mbyopaW5mbzsKKyAgICBDR011dGFibGVQYXRo
UmVmIHBhdGggPSBwaW5mby0+cGF0aDsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSogdHJhbnNmb3Jt
ID0gJnBpbmZvLT50cmFuc2Zvcm07CisgICAgQ0dQb2ludCAqcG9pbnRzID0gZWxlbWVudC0+cG9p
bnRzOworICAgIHN3aXRjaChlbGVtZW50LT50eXBlKSB7CisgICAgY2FzZSBrQ0dQYXRoRWxlbWVu
dE1vdmVUb1BvaW50OgorICAgICAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCB0cmFuc2Zvcm0s
IHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NH
UGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDoKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQo
cGF0aCwgdHJhbnNmb3JtLCBwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKKyAgICAgICAg
Q0dQYXRoQWRkUXVhZEN1cnZlVG9Qb2ludChwYXRoLCB0cmFuc2Zvcm0sIHBvaW50c1swXS54LCBw
b2ludHNbMF0ueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbMV0u
eCwgcG9pbnRzWzFdLnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50
QWRkQ3VydmVUb1BvaW50OgorICAgICAgICBDR1BhdGhBZGRDdXJ2ZVRvUG9pbnQocGF0aCwgdHJh
bnNmb3JtLCBwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb2ludHNbMV0ueCwgcG9pbnRzWzFdLnksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb2ludHNbMl0ueCwgcG9pbnRzWzJdLnkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGtDR1BhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgorICAgICAgICBDR1BhdGhDbG9zZVN1YnBh
dGgocGF0aCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBQYXRoOjp0cmFuc2Zv
cm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgQ0dNdXRhYmxlUGF0
aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOworICAgIFBhdGhUcmFuc2Zvcm1JbmZv
IHBpbmZvOworICAgIHBpbmZvLnBhdGggPSBwYXRoOworICAgIHBpbmZvLnRyYW5zZm9ybSA9IChD
R0FmZmluZVRyYW5zZm9ybSl0cmFuc2Zvcm07CisgICAgQ0dQYXRoQXBwbHkobV9wYXRoLCAmcGlu
Zm8sIENHUGF0aFRyYW5zZm9ybWVyKTsKKyAgICBDR1BhdGhSZWxlYXNlKG1fcGF0aCk7CisgICAg
bV9wYXRoID0gcGF0aDsKK30KKwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ0cpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3F0L1BhdGhRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9xdC9QYXRoUXQuY3BwCShyZXZpc2lvbiAxNjE5NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
cXQvUGF0aFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDYgKzIxOSw0OSBAQCBTdHJpbmcg
UGF0aDo6ZGVidWdTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiByZXQ7CiB9CiAKK3ZvaWQgUGF0
aDo6YXBwbHkodm9pZCAqaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QK
K3sKKyAgICBQYXRoRWxlbWVudCBwZWxlbWVudDsKKyAgICBGbG9hdFBvaW50IHBvaW50c1syXTsK
KyAgICBwZWxlbWVudC5wb2ludHMgPSBwb2ludHM7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBt
X3BhdGgtPmVsZW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUVBhaW50ZXJQYXRo
OjpFbGVtZW50ICZjdXIgPSBtX3BhdGgtPmVsZW1lbnRBdChpKTsKKworICAgICAgICBzd2l0Y2gg
KGN1ci50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFFQYWludGVyUGF0aDo6TW92ZVRvRWxlbWVu
dDoKKyAgICAgICAgICAgICAgICBwZWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRNb3ZlVG9Qb2lu
dDsKKyAgICAgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBjdXI7CisgICAgICAgICAg
ICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgUVBhaW50ZXJQYXRoOjpMaW5lVG9FbGVtZW50OgorICAgICAgICAg
ICAgICAgIHBlbGVtZW50LnR5cGUgPSBQYXRoRWxlbWVudEFkZExpbmVUb1BvaW50OworICAgICAg
ICAgICAgICAgIHBlbGVtZW50LnBvaW50c1swXSA9IGN1cjsKKyAgICAgICAgICAgICAgICBmdW5j
dGlvbihpbmZvLCAmcGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBRUGFpbnRlclBhdGg6OkN1cnZlVG9FbGVtZW50OgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFFQYWludGVyUGF0aDo6RWxlbWVudCAmYzEgPSBtX3BhdGgtPmVs
ZW1lbnRBdChpICsgMSk7CisgICAgICAgICAgICAgICAgY29uc3QgUVBhaW50ZXJQYXRoOjpFbGVt
ZW50ICZjMiA9IG1fcGF0aC0+ZWxlbWVudEF0KGkgKyAyKTsKKworICAgICAgICAgICAgICAgIFFf
QVNTRVJUKGMxLnR5cGUgPT0gUVBhaW50ZXJQYXRoOjpDdXJ2ZVRvRGF0YUVsZW1lbnQpOworICAg
ICAgICAgICAgICAgIFFfQVNTRVJUKGMyLnR5cGUgPT0gUVBhaW50ZXJQYXRoOjpDdXJ2ZVRvRGF0
YUVsZW1lbnQpOworCisgICAgICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50
QWRkQ3VydmVUb1BvaW50OworICAgICAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1swXSA9IGN1
cjsKKyAgICAgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMV0gPSBjMTsKKyAgICAgICAgICAg
ICAgICBwZWxlbWVudC5wb2ludHNbMl0gPSBjMjsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihp
bmZvLCAmcGVsZW1lbnQpOworCisgICAgICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBRUGFpbnRlclBhdGg6
OkN1cnZlVG9EYXRhRWxlbWVudDoKKyAgICAgICAgICAgICAgICBRX0FTU0VSVChmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0KIAogLy8gdmlt
OiB0cz00IHN3PTQgZXQK
</data>
<flag name="review"
          id="3302"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10377</attachid>
            <date>2006-09-03 06:37:28 -0700</date>
            <delta_ts>2006-09-03 13:24:33 -0700</delta_ts>
            <desc>Improved patch</desc>
            <filename>10696-2.diff</filename>
            <type>text/plain</type>
            <size>62623</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTYxOTYpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC04NjYsNiArODY2LDcgQEAgc2V0KFdlYkNvcmVfU1JDUwogICAgIHBs
YXRmb3JtL1N0cmluZ0ltcGwuY3BwCiAgICAgcGxhdGZvcm0vRmxvYXRSZWN0LmNwcAogICAgIHBs
YXRmb3JtL1Jlc291cmNlTG9hZGVyLmNwcAorICAgIHBsYXRmb3JtL1BhdGguY3BwCiAgICAgcGxh
dGZvcm0vcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwCiAgICAgcGxhdGZvcm0vcXQvU3RyaW5nUXQu
Y3BwCiAgICAgcGxhdGZvcm0vcXQvQ29sb3JRdC5jcHAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjE5NikKKysrIFdl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMDYtMDkt
MDMgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA2OTYKKyAgICAgICAgUmVuZGVyUGF0aFF1YXJ0eiBhbmQgUmVuZGVyUGF0
aFF0IHNob3VsZCBub3QgYmUgbmVlZGVkCisKKyAgICAgICAgQ2xlYW51cCBvZiBjb2RlIHJlbGF0
ZWQgdG8gUmVuZGVyUGF0aC4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVE
IE9SIENIQU5HRUQKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXND
cmVhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg6
IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9SZW5kZXJQYXRoLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3TWFya2Vyc0RhdGE6OkRyYXdNYXJrZXJz
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3TWFya2VyV2l0aERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6dXBkYXRlTWFya2VyRGF0YUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
ZHJhd1N0YXJ0QW5kTWlkTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpk
cmF3TWFya2Vyc0lmTmVlZGVkKToKKyAgICAgICAgKiBrY2FudmFzL1JlbmRlclBhdGguaDoKKyAg
ICAgICAgKiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg6CisgICAgICAgICoga2Nh
bnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcDoKKyAgICAgICAgKiBrY2FudmFz
L2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaDoKKyAgICAgICAgKiBrY2FudmFzL2Rldmlj
ZS9xdC9SZW5kZXJQYXRoUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ry
b2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQkJveCk6
CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lmg6IFJlbW92
ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1t
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQkJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyk6CisgICAgICAgICoga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaDoKKyAgICAgICAgKiBrY2FudmFz
L2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbToKKyAgICAgICAgKiBrY2Fu
dmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdBRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlw
c2VFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHR0VsZW1lbnQu
Y3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdMaW5lRWxlbWVudDo6
dG9QYXRoRGF0YSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUG9seWdv
bkVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3Bw
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxl
bWVudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vUGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjpjcmVhdGVSZWN0YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y3JlYXRl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjcmVhdGVDaXJjbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6Y3JlYXRlTGluZSk6CisgICAgICAgICogcGxhdGZvcm0vUGF0aC5o
OgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZy9QYXRoQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0dQYXRoQXBwbGllclRvUGF0aEFwcGxpZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0dQYXRoVHJhbnNm
b3JtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9QYXRoUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YXBwbHkpOgor
CiAyMDA2LTA5LTAyICBTYW0gV2VpbmlnICA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgVGltIEguCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYxOTYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI5Miw4ICsxMjkyLDYgQEAK
IAkJQTg4QUQzQjYwOTUyNDg2RTAwMUREMTk2IC8qIFF1YXJ0elN1cHBvcnQubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3NzA4OTcwMUY4MDBC
QTUxMTQgLyogUXVhcnR6U3VwcG9ydC5tbSAqLzsgfTsKIAkJQTg4QUQzQjkwOTUyNDg2RTAwMURE
MTk2IC8qIFJlbmRlclNWR0NvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3QTA4OTcwMUY4MDBCQTUxMTQgLyogUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcCAqLzsgfTsKIAkJQTg4QUQzQkEwOTUyNDg2RTAwMUREMTk2IC8qIFJlbmRl
clNWR0NvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThDMEZCN0IwODk3MDFGODAwQkE1MTE0IC8qIFJlbmRlclNWR0NvbnRhaW5lci5oICov
OyB9OwotCQlBODhBRDNCQjA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0NyZWF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCN0MwODk3
MDFGODAwQkE1MTE0IC8qIEtDYW52YXNDcmVhdG9yLmNwcCAqLzsgfTsKLQkJQTg4QUQzQkMwOTUy
NDg2RTAwMUREMTk2IC8qIEtDYW52YXNDcmVhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3RDA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZh
c0NyZWF0b3IuaCAqLzsgfTsKIAkJQTg4QUQzQkQwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNG
aWx0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QzBGQjdFMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzRmlsdGVycy5jcHAgKi87IH07CiAJ
CUE4OEFEM0JFMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzRmlsdGVycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCN0YwODk3MDFGODAwQkE1
MTE0IC8qIEtDYW52YXNGaWx0ZXJzLmggKi87IH07CiAJCUE4OEFEM0MwMDk1MjQ4NkUwMDFERDE5
NiAvKiBLQ2FudmFzSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzBGQjgxMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzSW1hZ2UuaCAqLzsg
fTsKQEAgLTE3MTMsNiArMTcxMSw3IEBACiAJCUE4RkVGQjMyMDk3OUY0RjYwMDU4MzlGRCAvKiBT
VkdGb3JlaWduT2JqZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThGRUZCMzAwOTc5RjRGNjAwNTgzOUZEIC8qIFNWR0ZvcmVpZ25PYmpl
Y3RFbGVtZW50LmggKi87IH07CiAJCUFBODRGQzg1MEFBMEZFMDgwMDc2OTlBRiAvKiBKU1NWR01l
dGFkYXRhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBQTg0RkM4MzBBQTBGRTA4MDA3Njk5QUYgLyogSlNTVkdNZXRhZGF0YUVsZW1lbnQu
Y3BwICovOyB9OwogCQlBQTg0RkM4NjBBQTBGRTA4MDA3Njk5QUYgLyogSlNTVkdNZXRhZGF0YUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFB
ODRGQzg0MEFBMEZFMDgwMDc2OTlBRiAvKiBKU1NWR01ldGFkYXRhRWxlbWVudC5oICovOyB9Owor
CQlBQTk4Qjg3RDBBQUEwMkY4MDAxQTQ0QzIgLyogUGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTk4Qjg3QzBBQUEwMkY4MDAxQTQ0QzIgLyog
UGF0aC5jcHAgKi87IH07CiAJCUFBQzhEQUIxMEFBMTAwMjAwMERDMDkwNyAvKiBTVkdNZXRhZGF0
YUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUFDOERBQUYwQUExMDAyMDAwREMwOTA3IC8qIFNWR01ldGFkYXRhRWxlbWVudC5jcHAgKi87
IH07CiAJCUFBQzhEQUIyMEFBMTAwMjAwMERDMDkwNyAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBQzhEQUIwMEFB
MTAwMjAwMERDMDkwNyAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuaCAqLzsgfTsKIAkJQUIyM0EzMTIw
OUJCQTc3NjAwNjdDQzUzIC8qIEhUTUxUZXh0RmllbGRJbm5lckVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUIyM0EzMTAwOUJCQTc3NjAw
NjdDQzUzIC8qIEhUTUxUZXh0RmllbGRJbm5lckVsZW1lbnQuY3BwICovOyB9OwpAQCAtMzY0NCw4
ICszNjQzLDYgQEAKIAkJQThDMEZCNzcwODk3MDFGODAwQkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFF1YXJ0elN1cHBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRkI3QTA4OTcwMUY4MDBCQTUxMTQgLyogUmVuZGVy
U1ZHQ29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjdCMDg5NzAxRjgw
MEJBNTExNCAvKiBSZW5kZXJTVkdDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdDb250YWluZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUE4QzBGQjdD
MDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzQ3JlYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNDcmVhdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0J
CUE4QzBGQjdEMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzQ3JlYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtDYW52YXNDcmVhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlBOEMwRkI3RTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ZpbHRlcnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLQ2FudmFzRmls
dGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQlBOEMwRkI3RjA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ZpbHRlcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFz
RmlsdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJQThDMEZCODEwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNJbWFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtDYW52YXNJ
bWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKQEAgLTM4NDAsNiArMzgzNyw3IEBACiAJCUE4RkVGQjMwMDk3OUY0RjYwMDU4MzlGRCAv
KiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQUE4NEZDODMwQUEwRkUwODAwNzY5OUFGIC8qIEpTU1ZHTWV0YWRhdGFFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR01ldGFkYXRhRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBODRGQzg0MEFBMEZFMDgw
MDc2OTlBRiAvKiBKU1NWR01ldGFkYXRhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNTVkdNZXRhZGF0YUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQUE5OEI4N0MwQUFBMDJGODAwMUE0NEMyIC8qIFBhdGguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBQUM4REFBRjBBQTEwMDIwMDBEQzA5MDcgLyogU1ZHTWV0YWRhdGFFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdNZXRhZGF0YUVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUM4REFCMDBBQTEwMDIw
MDBEQzA5MDcgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdNZXRhZGF0YUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQUIyM0EzMTAwOUJCQTc3NjAwNjdDQzUzIC8qIEhUTUxUZXh0RmllbGRJbm5lckVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxUZXh0Rmll
bGRJbm5lckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc5Nyw4
ICs1Nzk1LDYgQEAKIAkJCQlBOEMwRkI1MzA4OTcwMUY3MDBCQTUxMTQgLyogZGV2aWNlICovLAog
CQkJCUE4QzBGQjdBMDg5NzAxRjgwMEJBNTExNCAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwICov
LAogCQkJCUE4QzBGQjdCMDg5NzAxRjgwMEJBNTExNCAvKiBSZW5kZXJTVkdDb250YWluZXIuaCAq
LywKLQkJCQlBOEMwRkI3QzA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0NyZWF0b3IuY3BwICov
LAotCQkJCUE4QzBGQjdEMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzQ3JlYXRvci5oICovLAog
CQkJCUE4QzBGQjdFMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzRmlsdGVycy5jcHAgKi8sCiAJ
CQkJQThDMEZCN0YwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNGaWx0ZXJzLmggKi8sCiAJCQkJ
QThDMEZCODEwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNJbWFnZS5oICovLApAQCAtNjA1OCw2
ICs2MDU0LDcgQEAKIAkJQkNGMUE1QkEwOTc4MzIwOTAwNjFBMTIzIC8qIHBsYXRmb3JtICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBQTk4Qjg3QzBBQUEw
MkY4MDAxQTQ0QzIgLyogUGF0aC5jcHAgKi8sCiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJE
IC8qIGNmICovLAogCQkJCTkzMDMyQ0NDMDlBRUMzNjIwMEY4MkExOCAvKiBjZyAqLywKIAkJCQk2
NTgyQTE0ODA5OTk5RDZDMDBCRUVCNkQgLyogbWFjICovLApAQCAtNjcxNiw3ICs2NzEzLDYgQEAK
IAkJCQlBODhBRDNCMzA5NTI0ODZFMDAxREQxOTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUXVh
cnR6LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDNCNTA5NTI0ODZFMDAxREQxOTYgLyogUXVh
cnR6U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQzQkEwOTUyNDg2RTAwMUREMTk2
IC8qIFJlbmRlclNWR0NvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTg4QUQzQkMwOTUy
NDg2RTAwMUREMTk2IC8qIEtDYW52YXNDcmVhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhB
RDNCRTA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0ZpbHRlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OEFEM0MwMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzSW1hZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4OEFEM0MyMDk1MjQ4NkUwMDFERDE5NiAvKiBSZW5kZXJQYXRoLmggaW4gSGVh
ZGVycyAqLywKQEAgLTc3NTcsNyArNzc1Myw2IEBACiAJCQkJQTg4QUQzQjQwOTUyNDg2RTAwMURE
MTk2IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUE4OEFEM0I2MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTg4QUQzQjkwOTUyNDg2RTAwMUREMTk2IC8qIFJlbmRlclNWR0NvbnRhaW5lci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBODhBRDNCQjA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZh
c0NyZWF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQzQkQwOTUyNDg2RTAwMUREMTk2
IC8qIEtDYW52YXNGaWx0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEM0MxMDk1MjQ4
NkUwMDFERDE5NiAvKiBSZW5kZXJQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEM0M4
MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUmVzb3VyY2VzLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODUzMSw2ICs4NTI2LDcgQEAKIAkJCQk4NTJCOUU4QTBBQTc5QzQ3MDAyQURBNkUgLyogRE9N
SFRNTE9wdGlvbkVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTk4OTU1QzBBQTc4MTQ5
MDA1RUY1RUYgLyogQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTk4OTU2QjBBQTc4
RjgwMDA1RUY1RUYgLyogS1VSTENGTmV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUFBOThCODdE
MEFBQTAyRjgwMDFBNDRDMiAvKiBQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1MDMyREQ4
MEFBOEM5QkUwMDdEM0I3RCAvKiBET01DU1NDaGFyc2V0UnVsZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTg1MDMyRERBMEFBOEM5QkUwMDdEM0I3RCAvKiBET01DU1NGb250RmFjZVJ1bGUubW0gaW4g
U291cmNlcyAqLywKIAkJCQk4NTAzMkREQzBBQThDOUJFMDA3RDNCN0QgLyogRE9NQ1NTSW1wb3J0
UnVsZS5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDcmVh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc0NyZWF0b3IuY3Bw
CShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTgwICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICAgIAotICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAg
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJLQ2FudmFzQ3JlYXRvci5oIgotCi0jaW5jbHVk
ZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIlJl
bmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIlBhdGguaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1LQ2FudmFzQ3JlYXRvciAqS0NhbnZhc0NyZWF0b3I6OnNfY3JlYXRvciA9IDA7Ci0K
LUtDYW52YXNDcmVhdG9yOjpLQ2FudmFzQ3JlYXRvcigpCi17Ci19Ci0KLUtDYW52YXNDcmVhdG9y
Ojp+S0NhbnZhc0NyZWF0b3IoKQotewotfQotCi1LQ2FudmFzQ3JlYXRvciAqS0NhbnZhc0NyZWF0
b3I6OnNlbGYoKQotewotICAgIGlmKCFzX2NyZWF0b3IpCi0gICAgICAgIHNfY3JlYXRvciA9IG5l
dyBLQ2FudmFzQ3JlYXRvcigpOwotCi0gICAgcmV0dXJuIHNfY3JlYXRvcjsKLX0KLQotUGF0aCBL
Q2FudmFzQ3JlYXRvcjo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIGJv
eCwgY29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1JhZGlpKSBjb25zdAotewotICAgIFBhdGggcGF0
aDsKLSAgICBmbG9hdCB4ID0gYm94LngoKTsKLSAgICBmbG9hdCB5ID0gYm94LnkoKTsKLSAgICBm
bG9hdCB3aWR0aCA9IGJveC53aWR0aCgpOwotICAgIGZsb2F0IGhlaWdodCA9IGJveC5oZWlnaHQo
KTsKLSAgICBmbG9hdCByeCA9IHJvdW5kaW5nUmFkaWkud2lkdGgoKTsKLSAgICBmbG9hdCByeSA9
IHJvdW5kaW5nUmFkaWkuaGVpZ2h0KCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAuMGYgfHwgaGVpZ2h0
IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRoOwotCi0gICAgZG91YmxlIG5yeCA9IHJ4LCBu
cnkgPSByeTsKLSAgICAvLyBJZiByeCBpcyBncmVhdGVyIHRoYW4gaGFsZiBvZiB0aGUgd2lkdGgg
b2YgdGhlIHJlY3RhbmdsZQotICAgIC8vIHRoZW4gc2V0IHJ4IHRvIGhhbGYgb2YgdGhlIHdpZHRo
IChyZXF1aXJlZCBpbiBTVkcgc3BlYykKLSAgICBpZiAobnJ4ID4gd2lkdGggLyAyKQotICAgICAg
ICBucnggPSB3aWR0aCAvIDI7Ci0KLSAgICAvLyBJZiByeSBpcyBncmVhdGVyIHRoYW4gaGFsZiBv
ZiB0aGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUKLSAgICAvLyB0aGVuIHNldCByeSB0byBoYWxm
IG9mIHRoZSBoZWlnaHQgKHJlcXVpcmVkIGluIFNWRyBzcGVjKQotICAgIGlmIChucnkgPiBoZWln
aHQgLyAyKQotICAgICAgICBucnkgPSBoZWlnaHQgLyAyOwotCi0gICAgcGF0aC5tb3ZlVG8oRmxv
YXRQb2ludCh4ICsgbnJ4LCB5KSk7Ci0KLSAgICBpZiAobnJ4IDwgd2lkdGggLyAyKQotICAgICAg
ICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIHJ4LCB5KSk7Ci0KLSAgICBw
YXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSBucnggKiAoMSAtIDAu
NTUyKSwgeSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgbnJ5ICogKDEgLSAwLjU1MikpLCBG
bG9hdFBvaW50KHggKyB3aWR0aCwgeSArIG5yeSkpOwotCi0gICAgaWYgKG5yeSA8IGhlaWdodCAv
IDIpCi0gICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVp
Z2h0IC0gbnJ5KSk7Ci0KLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsg
d2lkdGgsIHkgKyBoZWlnaHQgLSBucnkgKiAoMSAtIDAuNTUyKSksIEZsb2F0UG9pbnQoeCArIHdp
ZHRoIC0gbnJ4ICogKDEgLSAwLjU1MiksIHkgKyBoZWlnaHQpLCBGbG9hdFBvaW50KHggKyB3aWR0
aCAtIG5yeCwgeSArIGhlaWdodCkpOwotCi0gICAgaWYgKG5yeCA8IHdpZHRoIC8gMikKLSAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgbnJ4LCB5ICsgaGVpZ2h0KSk7Ci0KLSAg
ICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgbnJ4ICogKDEgLSAwLjU1Miks
IHkgKyBoZWlnaHQpLCBGbG9hdFBvaW50KHgsIHkgKyBoZWlnaHQgLSBucnkgKiAoMSAtIDAuNTUy
KSksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIG5yeSkpOwotCi0gICAgaWYgKG5yeSA8IGhl
aWdodCAvIDIpCi0gICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSArIG5yeSkp
OwotCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCwgeSArIG5yeSAqICgx
IC0gMC41NTIpKSwgRmxvYXRQb2ludCh4ICsgbnJ4ICogKDEgLSAwLjU1MiksIHkpLCBGbG9hdFBv
aW50KHggKyBucngsIHkpKTsKLQotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1
cm4gcGF0aDsKLX0KLQotUGF0aCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlUmVjdGFuZ2xlKGNvbnN0
IEZsb2F0UmVjdCYgYm94KSBjb25zdAotewotICAgIFBhdGggcGF0aDsKLSAgICBmbG9hdCB4ID0g
Ym94LngoKTsKLSAgICBmbG9hdCB5ID0gYm94LnkoKTsKLSAgICBmbG9hdCB3aWR0aCA9IGJveC53
aWR0aCgpOwotICAgIGZsb2F0IGhlaWdodCA9IGJveC5oZWlnaHQoKTsKLSAgICBpZiAod2lkdGgg
PCAwLjBmIHx8IGhlaWdodCA8IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRoOwotICAgIAotICAg
IHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCwgeSkpOwotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0
UG9pbnQoeCArIHdpZHRoLCB5KSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsg
d2lkdGgsIHkgKyBoZWlnaHQpKTsKLSAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkg
KyBoZWlnaHQpKTsKLSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotCi0gICAgcmV0dXJuIHBhdGg7
Ci19Ci0KLVBhdGggS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUVsbGlwc2UoY29uc3QgRmxvYXRQb2lu
dCZjLCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0Ci17Ci0gICAgZmxvYXQgY3ggPSBjLngoKTsK
LSAgICBmbG9hdCBjeSA9IGMueSgpOwotICAgIFBhdGggcGF0aDsKLSAgICBpZiAocnggPD0gMC4w
ZiB8fCByeSA8PSAwLjBmKQotICAgICAgICByZXR1cm4gcGF0aDsKLQotICAgIC8vIEVsbGlwc2Ug
Y3JlYXRpb24gLSBuaWNlICYgY2xlYW4gYWdnMiBjb2RlCi0gICAgZG91YmxlIHggPSBjeCwgeSA9
IGN5OwotCi0gICAgdW5zaWduZWQgc3RlcCA9IDAsIG51bSA9IDEwMDsKLSAgICBib29sIHJ1bm5p
bmcgPSB0cnVlOwotICAgIHdoaWxlKHJ1bm5pbmcpCi0gICAgewotICAgICAgICBpZihzdGVwID09
IG51bSkKLSAgICAgICAgewotICAgICAgICAgICAgcnVubmluZyA9IGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkb3VibGUgYW5nbGUgPSBkb3VibGUoc3Rl
cCkgLyBkb3VibGUobnVtKSAqIDIuMCAqIE1fUEk7Ci0gICAgICAgIHggPSBjeCArIGNvcyhhbmds
ZSkgKiByeDsKLSAgICAgICAgeSA9IGN5ICsgc2luKGFuZ2xlKSAqIHJ5OwotCi0gICAgICAgIHN0
ZXArKzsKLSAgICAgICAgaWYoc3RlcCA9PSAxKQotICAgICAgICAgICAgcGF0aC5tb3ZlVG8oRmxv
YXRQb2ludCh4LCB5KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRv
KEZsb2F0UG9pbnQoeCwgeSkpOwotICAgIH0KLQotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0K
LSAgICByZXR1cm4gcGF0aDsKLX0KLQotUGF0aCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlQ2lyY2xl
KGNvbnN0IEZsb2F0UG9pbnQmIGMsIGZsb2F0IHIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0
ZUVsbGlwc2UoYywgciwgcik7Ci19Ci0KLVBhdGggS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUxpbmUo
Y29uc3QgRmxvYXRQb2ludCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkgY29uc3QKLXsK
LSAgICBQYXRoIHBhdGg7Ci0gICAgaWYgKHN0YXJ0LngoKSA9PSBlbmQueCgpICYmIHN0YXJ0Lnko
KSA9PSBlbmQueSgpKQotICAgICAgICByZXR1cm4gcGF0aDsKLQotICAgIHBhdGgubW92ZVRvKHN0
YXJ0KTsKLSAgICBwYXRoLmFkZExpbmVUbyhlbmQpOwotCi0gICAgcmV0dXJuIHBhdGg7Ci19Ci0K
LX0KLQotLy8gdmltOnRzPTQ6bm9ldAotI2VuZGlmIC8vIFNWR19TVVBQT1JUCi0KSW5kZXg6IFdl
YkNvcmUva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2Nh
bnZhcy9LQ2FudmFzQ3JlYXRvci5oCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUva2NhbnZh
cy9LQ2FudmFzQ3JlYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSovCi0KLSNpZm5kZWYg
S0NhbnZhc0NyZWF0b3JfSAotI2RlZmluZSBLQ2FudmFzQ3JlYXRvcl9ICi0jaWZkZWYgU1ZHX1NV
UFBPUlQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQYXRoOwotY2xhc3MgRmxvYXRQ
b2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKLQotY2xhc3MgS0NhbnZh
c0NyZWF0b3IKLXsKLXB1YmxpYzoKLSAgICBLQ2FudmFzQ3JlYXRvcigpOwotICAgIHZpcnR1YWwg
fktDYW52YXNDcmVhdG9yKCk7Ci0KLSAgICBzdGF0aWMgS0NhbnZhc0NyZWF0b3IgKnNlbGYoKTsK
LQotICAgIC8vIENhbnZhcyBwYXRoIGNyZWF0aW9uCi0gICAgUGF0aCBjcmVhdGVSb3VuZGVkUmVj
dGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwotICAgIFBh
dGggY3JlYXRlUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotICAgIFBhdGggY3Jl
YXRlRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcngsIGZsb2F0IHJ5KSBjb25zdDsK
LSAgICBQYXRoIGNyZWF0ZUNpcmNsZShjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcikgY29uc3Q7
Ci0gICAgUGF0aCBjcmVhdGVMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEtDYW52YXNDcmVhdG9yICpzX2NyZWF0
b3I7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBTVkdfU1VQUE9SVAotI2VuZGlmCi0KLS8vIHZpbTp0
cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9SZW5kZXJQYXRoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tjYW52YXMvUmVuZGVyUGF0aC5jcHAJKHJldmlzaW9uIDE2MTk2KQorKysg
V2ViQ29yZS9rY2FudmFzL1JlbmRlclBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsy
NSw4IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAKKyNp
bmNsdWRlIDxtYXRoLmg+CisKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCkBA
IC0zMTIsOCArMzE0LDE0MiBAQCBib29sIFJlbmRlclBhdGg6Om5vZGVBdFBvaW50KE5vZGVJbmZv
JiBpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit0eXBlZGVmIGVudW0geworICAgIFN0YXJ0LAor
ICAgIE1pZCwKKyAgICBFbmQKK30gTWFya2VyVHlwZTsKKworc3RydWN0IE1hcmtlckRhdGEgewor
ICAgIEZsb2F0UG9pbnQgb3JpZ2luOworICAgIGRvdWJsZSBzdHJva2VXaWR0aDsKKyAgICBGbG9h
dFBvaW50IGluc2xvcGVQb2ludHNbMl07CisgICAgRmxvYXRQb2ludCBvdXRzbG9wZVBvaW50c1sy
XTsKKyAgICBNYXJrZXJUeXBlIHR5cGU7CisgICAgS0NhbnZhc01hcmtlciAqbWFya2VyOworfTsK
Kworc3RydWN0IERyYXdNYXJrZXJzRGF0YSB7CisgICAgRHJhd01hcmtlcnNEYXRhKEdyYXBoaWNz
Q29udGV4dCosIEtDYW52YXNNYXJrZXIqIHN0YXJ0TWFya2VyLCBLQ2FudmFzTWFya2VyKiBtaWRN
YXJrZXIsIGRvdWJsZSBzdHJva2VXaWR0aCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
OworICAgIGludCBlbGVtZW50SW5kZXg7CisgICAgTWFya2VyRGF0YSBwcmV2aW91c01hcmtlckRh
dGE7CisgICAgS0NhbnZhc01hcmtlciogbWlkTWFya2VyOworfTsKKworRHJhd01hcmtlcnNEYXRh
OjpEcmF3TWFya2Vyc0RhdGEoR3JhcGhpY3NDb250ZXh0KiBjLCBLQ2FudmFzTWFya2VyICpzdGFy
dCwgS0NhbnZhc01hcmtlciAqbWlkLCBkb3VibGUgc3Ryb2tlV2lkdGgpCisgICAgOiBjb250ZXh0
KGMpCisgICAgLCBlbGVtZW50SW5kZXgoMCkKKyAgICAsIG1pZE1hcmtlcihtaWQpCit7CisgICAg
cHJldmlvdXNNYXJrZXJEYXRhLm9yaWdpbiA9IEZsb2F0UG9pbnQoKTsKKyAgICBwcmV2aW91c01h
cmtlckRhdGEuc3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aDsKKyAgICBwcmV2aW91c01hcmtlckRh
dGEubWFya2VyID0gc3RhcnQ7CisgICAgcHJldmlvdXNNYXJrZXJEYXRhLnR5cGUgPSBTdGFydDsK
IH0KIAotLy8gdmltOnRzPTQ6bm9ldAotI2VuZGlmIC8vIFNWR19TVVBQT1JUCitzdGF0aWMgdm9p
ZCBkcmF3TWFya2VyV2l0aERhdGEoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBNYXJrZXJEYXRh
ICZkYXRhKQoreworICAgIGlmICghZGF0YS5tYXJrZXIpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBGbG9hdFBvaW50IGluc2xvcGVDaGFuZ2UgPSBkYXRhLmluc2xvcGVQb2ludHNbMV0gLSBG
bG9hdFNpemUoZGF0YS5pbnNsb3BlUG9pbnRzWzBdLngoKSwgZGF0YS5pbnNsb3BlUG9pbnRzWzBd
LnkoKSk7CisgICAgRmxvYXRQb2ludCBvdXRzbG9wZUNoYW5nZSA9IGRhdGEub3V0c2xvcGVQb2lu
dHNbMV0gLSBGbG9hdFNpemUoZGF0YS5vdXRzbG9wZVBvaW50c1swXS54KCksIGRhdGEub3V0c2xv
cGVQb2ludHNbMF0ueSgpKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRlZzJyYWQg
PSBNX1BJLzE4MC4wOworICAgIGRvdWJsZSBpbnNsb3BlID0gYXRhbjIoaW5zbG9wZUNoYW5nZS55
KCksIGluc2xvcGVDaGFuZ2UueCgpKSAvIGRlZzJyYWQ7CisgICAgZG91YmxlIG91dHNsb3BlID0g
YXRhbjIob3V0c2xvcGVDaGFuZ2UueSgpLCBvdXRzbG9wZUNoYW5nZS54KCkpIC8gZGVnMnJhZDsK
KyAgICAKKyAgICBkb3VibGUgYW5nbGUgPSAwLjA7CisgICAgc3dpdGNoIChkYXRhLnR5cGUpIHsK
KyAgICAgICAgY2FzZSBTdGFydDoKKyAgICAgICAgICAgIGFuZ2xlID0gb3V0c2xvcGU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNaWQ6CisgICAgICAgICAgICBhbmdsZSA9IChp
bnNsb3BlICsgb3V0c2xvcGUpIC8gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVuZDoKKyAgICAgICAgICAgIGFuZ2xlID0gaW5zbG9wZTsKKyAgICB9CisgICAgCisgICAgZGF0
YS5tYXJrZXItPmRyYXcoY29udGV4dCwgRmxvYXRSZWN0KCksIGRhdGEub3JpZ2luLngoKSwgZGF0
YS5vcmlnaW4ueSgpLCBkYXRhLnN0cm9rZVdpZHRoLCBhbmdsZSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCB1cGRhdGVNYXJrZXJEYXRhRm9yRWxlbWVudChNYXJrZXJEYXRhICZwcmV2aW91c01h
cmtlckRhdGEsIGNvbnN0IFBhdGhFbGVtZW50ICplbGVtZW50KQoreworICAgIEZsb2F0UG9pbnQg
KnBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKKyAgICAKKyAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5
cGUpIHsKKyAgICBjYXNlIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKKyAgICAgICAg
Ly8gVE9ETworICAgICAgICBwcmV2aW91c01hcmtlckRhdGEub3JpZ2luID0gcG9pbnRzWzFdOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OgorICAg
ICAgICBwcmV2aW91c01hcmtlckRhdGEuaW5zbG9wZVBvaW50c1swXSA9IHBvaW50c1sxXTsKKyAg
ICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLmluc2xvcGVQb2ludHNbMV0gPSBwb2ludHNbMl07Cisg
ICAgICAgIHByZXZpb3VzTWFya2VyRGF0YS5vcmlnaW4gPSBwb2ludHNbMl07CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDoKKyAgICBjYXNlIFBhdGhFbGVt
ZW50QWRkTGluZVRvUG9pbnQ6CisgICAgY2FzZSBQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKKyAg
ICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLmluc2xvcGVQb2ludHNbMF0gPSBwcmV2aW91c01hcmtl
ckRhdGEub3JpZ2luOworICAgICAgICBwcmV2aW91c01hcmtlckRhdGEuaW5zbG9wZVBvaW50c1sx
XSA9IHBvaW50c1swXTsKKyAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLm9yaWdpbiA9IHBvaW50
c1swXTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdTdGFydEFuZE1pZE1hcmtlcnModm9p
ZCAqaW5mbywgY29uc3QgUGF0aEVsZW1lbnQgKmVsZW1lbnQpCit7CisgICAgRHJhd01hcmtlcnNE
YXRhICZkYXRhID0gKihEcmF3TWFya2Vyc0RhdGEgKilpbmZvOworCisgICAgaW50IGVsZW1lbnRJ
bmRleCA9IGRhdGEuZWxlbWVudEluZGV4OworICAgIE1hcmtlckRhdGEgJnByZXZpb3VzTWFya2Vy
RGF0YSA9IGRhdGEucHJldmlvdXNNYXJrZXJEYXRhOworCisgICAgRmxvYXRQb2ludCAqcG9pbnRz
ID0gZWxlbWVudC0+cG9pbnRzOwogCisgICAgLy8gRmlyc3QgdXBkYXRlIHRoZSBvdXRzbG9wZSBm
b3IgdGhlIHByZXZpb3VzIGVsZW1lbnQKKyAgICBwcmV2aW91c01hcmtlckRhdGEub3V0c2xvcGVQ
b2ludHNbMF0gPSBwcmV2aW91c01hcmtlckRhdGEub3JpZ2luOworICAgIHByZXZpb3VzTWFya2Vy
RGF0YS5vdXRzbG9wZVBvaW50c1sxXSA9IHBvaW50c1swXTsKKworICAgIC8vIERyYXcgdGhlIG1h
cmtlciBmb3IgdGhlIHByZXZpb3VzIGVsZW1lbnQKKyAgICBpZiAoZWxlbWVudEluZGV4ICE9IDAp
CisgICAgICAgIGRyYXdNYXJrZXJXaXRoRGF0YShkYXRhLmNvbnRleHQsIHByZXZpb3VzTWFya2Vy
RGF0YSk7CisKKyAgICAvLyBVcGRhdGUgb3VyIG1hcmtlciBkYXRhIGZvciB0aGlzIGVsZW1lbnQK
KyAgICB1cGRhdGVNYXJrZXJEYXRhRm9yRWxlbWVudChwcmV2aW91c01hcmtlckRhdGEsIGVsZW1l
bnQpOworCisgICAgaWYgKGVsZW1lbnRJbmRleCA9PSAxKSB7CisgICAgICAgIC8vIEFmdGVyIGRy
YXdpbmcgdGhlIHN0YXJ0IG1hcmtlciwgc3dpdGNoIHRvIGRyYXdpbmcgbWlkIG1hcmtlcnMKKyAg
ICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLm1hcmtlciA9IGRhdGEubWlkTWFya2VyOworICAgICAg
ICBwcmV2aW91c01hcmtlckRhdGEudHlwZSA9IE1pZDsKKyAgICB9CisKKyAgICBkYXRhLmVsZW1l
bnRJbmRleCsrOworfQorCit2b2lkIFJlbmRlclBhdGg6OmRyYXdNYXJrZXJzSWZOZWVkZWQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFBhdGgm
IHBhdGgpIGNvbnN0Cit7CisgICAgRG9jdW1lbnQgKmRvYyA9IGRvY3VtZW50KCk7CisgICAgY29u
c3QgU1ZHUmVuZGVyU3R5bGUgKnN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKworICAg
IEtDYW52YXNNYXJrZXIgKnN0YXJ0TWFya2VyID0gZ2V0TWFya2VyQnlJZChkb2MsIHN2Z1N0eWxl
LT5zdGFydE1hcmtlcigpLm1pZCgxKSk7CisgICAgS0NhbnZhc01hcmtlciAqbWlkTWFya2VyID0g
Z2V0TWFya2VyQnlJZChkb2MsIHN2Z1N0eWxlLT5taWRNYXJrZXIoKS5taWQoMSkpOworICAgIEtD
YW52YXNNYXJrZXIgKmVuZE1hcmtlciA9IGdldE1hcmtlckJ5SWQoZG9jLCBzdmdTdHlsZS0+ZW5k
TWFya2VyKCkubWlkKDEpKTsKKyAgICAKKyAgICBpZiAoIXN0YXJ0TWFya2VyICYmICFtaWRNYXJr
ZXIgJiYgIWVuZE1hcmtlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIHN0cm9rZVdp
ZHRoID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aCh0aGlzLCBzdHls
ZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApOworCisgICAgRHJhd01hcmtlcnNE
YXRhIGRhdGEoY29udGV4dCwgc3RhcnRNYXJrZXIsIG1pZE1hcmtlciwgc3Ryb2tlV2lkdGgpOwor
CisgICAgcGF0aC5hcHBseSgmZGF0YSwgZHJhd1N0YXJ0QW5kTWlkTWFya2Vycyk7CisKKyAgICBk
YXRhLnByZXZpb3VzTWFya2VyRGF0YS5tYXJrZXIgPSBlbmRNYXJrZXI7CisgICAgZGF0YS5wcmV2
aW91c01hcmtlckRhdGEudHlwZSA9IEVuZDsKKyAgICBkcmF3TWFya2VyV2l0aERhdGEoY29udGV4
dCwgZGF0YS5wcmV2aW91c01hcmtlckRhdGEpOworfQorCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQ
UE9SVApJbmRleDogV2ViQ29yZS9rY2FudmFzL1JlbmRlclBhdGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tjYW52YXMvUmVuZGVyUGF0aC5oCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUv
a2NhbnZhcy9SZW5kZXJQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICAg
ICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICovCiAKLSNpZm5kZWYgS0NhbnZhc0l0ZW1f
SAotI2RlZmluZSBLQ2FudmFzSXRlbV9ICisjaWZuZGVmIFJlbmRlclBhdGhfSAorI2RlZmluZSBS
ZW5kZXJQYXRoX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFZh
bHVlTGlzdC5oIgpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBIaXQtZGV0ZWN0
aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKICAgICB2aXJ0dWFsIGJv
b2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzRmlsbCA9IHRy
dWUpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJv
a2UgPSB0cnVlKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgYW4gdW5zY2FsZWQgYm91bmRpbmcg
Ym94IChub3QgZXZlbiBpbmNsdWRpbmcgbG9jYWxUcmFuc2Zvcm0oKSkgZm9yIHRoaXMgdmVjdG9y
IHBhdGgKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ry
b2tlID0gdHJ1ZSkgY29uc3Q7CkBAIC04OSw5ICs4OSw4IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBjYW5IaXRGaWxsOyAgCiAgICAgfTsKIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBk
cmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IFBhdGgmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQkJveCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd01hcmtlcnNJZk5lZWRlZChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBQYXRoJikgY29uc3Q7CisgICAgdmly
dHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQkJveCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEZsb2F0
UG9pbnQgbWFwQWJzb2x1dGVQb2ludFRvTG9jYWwoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwpJ
bmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgJKHJldmlzaW9u
IDE2MTk2KQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgS0NhbnZh
c0ZpbHRlckVmZmVjdCAqY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlw
ZSAmdHlwZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgS1JlbmRlcmluZ1BhaW50U2VydmVyICpj
cmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1BhaW50U2VydmVyVHlwZSAmdHlwZSkgY29uc3QgPSAw
OwogCi0gICAgdmlydHVhbCBSZW5kZXJQYXRoICpjcmVhdGVJdGVtKFJlbmRlckFyZW5hICphcmVu
YSwgUmVuZGVyU3R5bGUgKnN0eWxlLCBTVkdTdHlsZWRFbGVtZW50ICpub2RlLCBjb25zdCBQYXRo
JiBwYXRoKSBjb25zdCA9IDA7Ci0KIHByaXZhdGU6CiAgICAgVmVjdG9yPEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0Kj4gbV9jb250ZXh0U3RhY2s7CiB9OwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcAkocmV2aXNpb24gMTYxOTYpCisr
KyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MywxNCArMTgzLDYgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCogS1JlbmRl
cmluZ0RldmljZVF0OgogICAgIHJldHVybiAwOwogfQogCi0vLyBpdGVtIGNyZWF0aW9uCi1SZW5k
ZXJQYXRoKiBLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEqIGFyZW5h
LCBSZW5kZXJTdHlsZSogc3R5bGUsIFNWR1N0eWxlZEVsZW1lbnQqIG5vZGUsIGNvbnN0IFBhdGgm
IHBhdGgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyUGF0aCogaXRlbSA9IG5ldyAoYXJlbmEpIFJlbmRl
clBhdGhRdChzdHlsZSwgbm9kZSk7Ci0gICAgaXRlbS0+c2V0UGF0aChwYXRoKTsKLSAgICByZXR1
cm4gaXRlbTsKLX0KLQogS1JlbmRlcmluZ0RldmljZSogcmVuZGVyaW5nRGV2aWNlKCkKIHsKICAg
ICBzdGF0aWMgS1JlbmRlcmluZ0RldmljZSAqc2hhcmVkUmVuZGVyaW5nRGV2aWNlID0gbmV3IEtS
ZW5kZXJpbmdEZXZpY2VRdCgpOwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVu
ZGVyaW5nRGV2aWNlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0
L0tSZW5kZXJpbmdEZXZpY2VRdC5oCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUva2NhbnZh
cy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkg
KzgwLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgS0NhbnZhc1Jlc291cmNlKiBjcmVhdGVSZXNv
dXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgS1JlbmRlcmlu
Z1BhaW50U2VydmVyKiBjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1BhaW50U2VydmVyVHlwZSYp
IGNvbnN0OwogICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCogY3JlYXRlRmlsdGVyRWZm
ZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSYpIGNvbnN0OwotCi0gICAgLy8gaXRlbSBjcmVh
dGlvbgotICAgIHZpcnR1YWwgUmVuZGVyUGF0aCogY3JlYXRlSXRlbShSZW5kZXJBcmVuYSosIFJl
bmRlclN0eWxlKiwgU1ZHU3R5bGVkRWxlbWVudCosIGNvbnN0IFBhdGgmKSBjb25zdDsKIH07CiAK
IH0KSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5jcHAJKHJl
dmlzaW9uIDE2MTk2KQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyUGF0aFF0LmgiCisjaW5jbHVkZSAiUmVuZGVyUGF0aC5o
IgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJp
bmdTdHJva2VQYWludGVyLmgiCiAKQEAgLTMxLDE3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAKLVJlbmRlclBhdGhRdDo6UmVuZGVyUGF0aFF0KFJlbmRlclN0eWxlKiBzdHls
ZSwgU1ZHU3R5bGVkRWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclBhdGgoc3R5bGUsIG5vZGUp
Ci17Ci19Ci0KLXZvaWQgUmVuZGVyUGF0aFF0OjpkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgmKSBjb25zdAotewotICAgIHFE
ZWJ1ZygiUmVuZGVyUGF0aFF0OjpkcmF3TWFya2Vyc0lmTmVlZGVkKCkgVE9ETyEiKTsKLX0KLQot
Ym9vbCBSZW5kZXJQYXRoUXQ6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBib29sIHJlcXVpcmVzU3Ryb2tlKSBjb25zdAorYm9vbCBSZW5kZXJQYXRoOjpzdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkgY29uc3QK
IHsKICAgICBpZiAocGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
ODMsNyArNzMsNyBAQCBzdGF0aWMgUVBhaW50ZXJQYXRoIGdldFBhdGhTdHJva2UoY29uc3QgCiAg
ICAgcmV0dXJuIHMuY3JlYXRlU3Ryb2tlKHBhdGgpOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyUGF0
aFF0OjpzdHJva2VCQm94KCkgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJQYXRoOjpzdHJva2VCQm94
KCkgY29uc3QKIHsKICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyID0g
S1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludGVyKHN0eWxlKCksIHRoaXMpOwogICAgIFFQ
YWludGVyUGF0aCBvdXRsaW5lID0gZ2V0UGF0aFN0cm9rZSgqKHBhdGgoKS5wbGF0Zm9ybVBhdGgo
KSksIHN0cm9rZVBhaW50ZXIpOwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9SZW5k
ZXJQYXRoUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRl
clBhdGhRdC5oCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQv
UmVuZGVyUGF0aFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljLnNl
aWRlbEBrZGVtYWlsLm5ldD4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0q
LwotCi0jaWZuZGVmIFJlbmRlclBhdGhRdF9ICi0jZGVmaW5lIFJlbmRlclBhdGhRdF9ICi0KLSNp
bmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVu
ZGVyUGF0aFF0IDogcHVibGljIFJlbmRlclBhdGgKLXsKLXB1YmxpYzoKLSAgICBSZW5kZXJQYXRo
UXQoUmVuZGVyU3R5bGUqLCBTVkdTdHlsZWRFbGVtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJva2UpIGNv
bnN0OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJCb3goKSBjb25zdDsKLQotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgdm9pZCBkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgmKSBjb25zdDsKLX07Ci0KLX0KLQotI2Vu
ZGlmCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tDYW52YXNJdGVtUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHouaAkocmV2aXNpb24gMTYxOTYpCisrKyBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgS0NhbnZh
c0l0ZW1RdWFydHpfaAotI2RlZmluZSBLQ2FudmFzSXRlbVF1YXJ0el9oCi0KLSNpbXBvcnQgImtj
YW52YXMvUmVuZGVyUGF0aC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS0NhbnZhc0l0ZW1RdWFydHogOiBwdWJsaWMgUmVu
ZGVyUGF0aCB7Ci1wdWJsaWM6Ci0gICAgS0NhbnZhc0l0ZW1RdWFydHooUmVuZGVyU3R5bGUqLCBT
VkdTdHlsZWRFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+S0NhbnZhc0l0ZW1RdWFydHooKSB7IH0K
LSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGJvb2wgPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd01hcmtlcnNJ
Zk5lZWRlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBQYXRoJikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQkJveCgpIGNvbnN0OwotfTsKLQot
fQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJ
dGVtUXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6
L0tDYW52YXNJdGVtUXVhcnR6Lm1tCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUva2NhbnZh
cy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAot
I2ltcG9ydCAiS0NhbnZhc0l0ZW1RdWFydHouaCIKIAogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KIApAQCAtNDksMTQ0ICs0OCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotS0NhbnZh
c0l0ZW1RdWFydHo6OktDYW52YXNJdGVtUXVhcnR6KFJlbmRlclN0eWxlICpzdHlsZSwgU1ZHU3R5
bGVkRWxlbWVudCAqbm9kZSkgOiBSZW5kZXJQYXRoKHN0eWxlLCBub2RlKQotewotfQotCi10eXBl
ZGVmIGVudW0gewotICAgIFN0YXJ0LAotICAgIE1pZCwKLSAgICBFbmQKLX0gTWFya2VyVHlwZTsK
LQotc3RydWN0IE1hcmtlckRhdGEgewotICAgIENHUG9pbnQgb3JpZ2luOwotICAgIGRvdWJsZSBz
dHJva2VXaWR0aDsKLSAgICBDR1BvaW50IGluc2xvcGVQb2ludHNbMl07Ci0gICAgQ0dQb2ludCBv
dXRzbG9wZVBvaW50c1syXTsKLSAgICBNYXJrZXJUeXBlIHR5cGU7Ci0gICAgS0NhbnZhc01hcmtl
ciAqbWFya2VyOwotfTsKLQotc3RydWN0IERyYXdNYXJrZXJzRGF0YSB7Ci0gICAgRHJhd01hcmtl
cnNEYXRhKEdyYXBoaWNzQ29udGV4dCosIEtDYW52YXNNYXJrZXIqIHN0YXJ0TWFya2VyLCBLQ2Fu
dmFzTWFya2VyKiBtaWRNYXJrZXIsIGRvdWJsZSBzdHJva2VXaWR0aCk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0OwotICAgIGludCBlbGVtZW50SW5kZXg7Ci0gICAgTWFya2VyRGF0YSBw
cmV2aW91c01hcmtlckRhdGE7Ci0gICAgS0NhbnZhc01hcmtlciogbWlkTWFya2VyOwotfTsKLQot
RHJhd01hcmtlcnNEYXRhOjpEcmF3TWFya2Vyc0RhdGEoR3JhcGhpY3NDb250ZXh0KiBjLCBLQ2Fu
dmFzTWFya2VyICpzdGFydCwgS0NhbnZhc01hcmtlciAqbWlkLCBkb3VibGUgc3Ryb2tlV2lkdGgp
Ci0gICAgOiBjb250ZXh0KGMpCi17Ci0gICAgZWxlbWVudEluZGV4ID0gMDsKLSAgICBtaWRNYXJr
ZXIgPSBtaWQ7Ci0gICAgCi0gICAgcHJldmlvdXNNYXJrZXJEYXRhLm9yaWdpbiA9IENHUG9pbnRa
ZXJvOwotICAgIHByZXZpb3VzTWFya2VyRGF0YS5zdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoOwot
ICAgIHByZXZpb3VzTWFya2VyRGF0YS5tYXJrZXIgPSBzdGFydDsKLSAgICBwcmV2aW91c01hcmtl
ckRhdGEudHlwZSA9IFN0YXJ0OwotfQotCi1zdGF0aWMgdm9pZCBkcmF3TWFya2VyV2l0aERhdGEo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBNYXJrZXJEYXRhICZkYXRhKQotewotICAgIGlmICgh
ZGF0YS5tYXJrZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDR1BvaW50IGluc2xvcGVD
aGFuZ2UgPSBDR1BvaW50U3VidHJhY3RQb2ludHMoZGF0YS5pbnNsb3BlUG9pbnRzWzFdLCBkYXRh
Lmluc2xvcGVQb2ludHNbMF0pOwotICAgIENHUG9pbnQgb3V0c2xvcGVDaGFuZ2UgPSBDR1BvaW50
U3VidHJhY3RQb2ludHMoZGF0YS5vdXRzbG9wZVBvaW50c1sxXSwgZGF0YS5vdXRzbG9wZVBvaW50
c1swXSk7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkZWcycmFkID0gTV9QSS8xODAu
MDsKLSAgICBkb3VibGUgaW5zbG9wZSA9IGF0YW4yKGluc2xvcGVDaGFuZ2UueSwgaW5zbG9wZUNo
YW5nZS54KSAvIGRlZzJyYWQ7Ci0gICAgZG91YmxlIG91dHNsb3BlID0gYXRhbjIob3V0c2xvcGVD
aGFuZ2UueSwgb3V0c2xvcGVDaGFuZ2UueCkgLyBkZWcycmFkOwotICAgIAotICAgIGRvdWJsZSBh
bmdsZTsKLSAgICBpZiAoZGF0YS50eXBlID09IFN0YXJ0KQotICAgICAgICBhbmdsZSA9IG91dHNs
b3BlOwotICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PSBNaWQpCi0gICAgICAgIGFuZ2xlID0gKGlu
c2xvcGUgKyBvdXRzbG9wZSkgLyAyOwotICAgIGVsc2UgLy8gKGRhdGEudHlwZSA9PSBFbmQpCi0g
ICAgICAgIGFuZ2xlID0gaW5zbG9wZTsKLSAgICAKLSAgICBkYXRhLm1hcmtlci0+ZHJhdyhjb250
ZXh0LCBGbG9hdFJlY3QoKSwgZGF0YS5vcmlnaW4ueCwgZGF0YS5vcmlnaW4ueSwgZGF0YS5zdHJv
a2VXaWR0aCwgYW5nbGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlTWFya2VyRGF0
YUZvckVsZW1lbnQoTWFya2VyRGF0YSAmcHJldmlvdXNNYXJrZXJEYXRhLCBjb25zdCBDR1BhdGhF
bGVtZW50ICplbGVtZW50KQotewotICAgIENHUG9pbnQgKnBvaW50cyA9IGVsZW1lbnQtPnBvaW50
czsKLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5cGUpIHsKLSAgICBjYXNlIGtDR1BhdGhF
bGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKLSAgICAgICAgLy8gVE9ETwotICAgICAgICBwcmV2
aW91c01hcmtlckRhdGEub3JpZ2luID0gcG9pbnRzWzFdOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIGtDR1BhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OgotICAgICAgICBwcmV2aW91c01hcmtl
ckRhdGEuaW5zbG9wZVBvaW50c1swXSA9IHBvaW50c1sxXTsKLSAgICAgICAgcHJldmlvdXNNYXJr
ZXJEYXRhLmluc2xvcGVQb2ludHNbMV0gPSBwb2ludHNbMl07Ci0gICAgICAgIHByZXZpb3VzTWFy
a2VyRGF0YS5vcmlnaW4gPSBwb2ludHNbMl07Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHByZXZpb3VzTWFya2VyRGF0YS5pbnNsb3BlUG9pbnRzWzBdID0gcHJldmlvdXNN
YXJrZXJEYXRhLm9yaWdpbjsKLSAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLmluc2xvcGVQb2lu
dHNbMV0gPSBwb2ludHNbMF07Ci0gICAgICAgIHByZXZpb3VzTWFya2VyRGF0YS5vcmlnaW4gPSBw
b2ludHNbMF07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZHJhd1N0
YXJ0QW5kTWlkTWFya2Vycyh2b2lkICppbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICplbGVtZW50
KQotewotICAgIERyYXdNYXJrZXJzRGF0YSAmZGF0YSA9ICooRHJhd01hcmtlcnNEYXRhICopaW5m
bzsKLQotICAgIGludCBlbGVtZW50SW5kZXggPSBkYXRhLmVsZW1lbnRJbmRleDsKLSAgICBNYXJr
ZXJEYXRhICZwcmV2aW91c01hcmtlckRhdGEgPSBkYXRhLnByZXZpb3VzTWFya2VyRGF0YTsKLQot
ICAgIENHUG9pbnQgKnBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKLQotICAgIC8vIEZpcnN0IHVw
ZGF0ZSB0aGUgb3V0c2xvcGUgZm9yIHRoZSBwcmV2aW91cyBlbGVtZW50Ci0gICAgcHJldmlvdXNN
YXJrZXJEYXRhLm91dHNsb3BlUG9pbnRzWzBdID0gcHJldmlvdXNNYXJrZXJEYXRhLm9yaWdpbjsK
LSAgICBwcmV2aW91c01hcmtlckRhdGEub3V0c2xvcGVQb2ludHNbMV0gPSBwb2ludHNbMF07Ci0K
LSAgICAvLyBEcmF3IHRoZSBtYXJrZXIgZm9yIHRoZSBwcmV2aW91cyBlbGVtZW50Ci0gICAgaWYg
KGVsZW1lbnRJbmRleCAhPSAwKQotICAgICAgICBkcmF3TWFya2VyV2l0aERhdGEoZGF0YS5jb250
ZXh0LCBwcmV2aW91c01hcmtlckRhdGEpOwotCi0gICAgLy8gVXBkYXRlIG91ciBtYXJrZXIgZGF0
YSBmb3IgdGhpcyBlbGVtZW50Ci0gICAgdXBkYXRlTWFya2VyRGF0YUZvckVsZW1lbnQocHJldmlv
dXNNYXJrZXJEYXRhLCBlbGVtZW50KTsKLQotICAgIGlmIChlbGVtZW50SW5kZXggPT0gMSkgewot
ICAgICAgICAvLyBBZnRlciBkcmF3aW5nIHRoZSBzdGFydCBtYXJrZXIsIHN3aXRjaCB0byBkcmF3
aW5nIG1pZCBtYXJrZXJzCi0gICAgICAgIHByZXZpb3VzTWFya2VyRGF0YS5tYXJrZXIgPSBkYXRh
Lm1pZE1hcmtlcjsKLSAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLnR5cGUgPSBNaWQ7Ci0gICAg
fQotCi0gICAgZGF0YS5lbGVtZW50SW5kZXgrKzsKLX0KLQotdm9pZCBLQ2FudmFzSXRlbVF1YXJ0
ejo6ZHJhd01hcmtlcnNJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgUGF0aCYgcGF0aCkgY29uc3QKLXsKLSAgICBEb2N1bWVudCAq
ZG9jID0gZG9jdW1lbnQoKTsKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSAqc3ZnU3R5bGUgPSBz
dHlsZSgpLT5zdmdTdHlsZSgpOwotCi0gICAgS0NhbnZhc01hcmtlciAqc3RhcnRNYXJrZXIgPSBn
ZXRNYXJrZXJCeUlkKGRvYywgc3ZnU3R5bGUtPnN0YXJ0TWFya2VyKCkubWlkKDEpKTsKLSAgICBL
Q2FudmFzTWFya2VyICptaWRNYXJrZXIgPSBnZXRNYXJrZXJCeUlkKGRvYywgc3ZnU3R5bGUtPm1p
ZE1hcmtlcigpLm1pZCgxKSk7Ci0gICAgS0NhbnZhc01hcmtlciAqZW5kTWFya2VyID0gZ2V0TWFy
a2VyQnlJZChkb2MsIHN2Z1N0eWxlLT5lbmRNYXJrZXIoKS5taWQoMSkpOwotICAgIAotICAgIGlm
ICghc3RhcnRNYXJrZXIgJiYgIW1pZE1hcmtlciAmJiAhZW5kTWFya2VyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1By
aW1pdGl2ZVRvTGVuZ3RoKHRoaXMsIHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCks
IDEuMCk7Ci0KLSAgICBEcmF3TWFya2Vyc0RhdGEgZGF0YShjb250ZXh0LCBzdGFydE1hcmtlciwg
bWlkTWFya2VyLCBzdHJva2VXaWR0aCk7Ci0KLSAgICBDR1BhdGhSZWYgY2dQYXRoID0gcGF0aC5w
bGF0Zm9ybVBhdGgoKTsKLSAgICBDR1BhdGhBcHBseShjZ1BhdGgsICZkYXRhLCBkcmF3U3RhcnRB
bmRNaWRNYXJrZXJzKTsKLQotICAgIGRhdGEucHJldmlvdXNNYXJrZXJEYXRhLm1hcmtlciA9IGVu
ZE1hcmtlcjsKLSAgICBkYXRhLnByZXZpb3VzTWFya2VyRGF0YS50eXBlID0gRW5kOwotICAgIGRy
YXdNYXJrZXJXaXRoRGF0YShjb250ZXh0LCBkYXRhLnByZXZpb3VzTWFya2VyRGF0YSk7Ci19Ci0K
LUZsb2F0UmVjdCBLQ2FudmFzSXRlbVF1YXJ0ejo6c3Ryb2tlQkJveCgpIGNvbnN0CitGbG9hdFJl
Y3QgUmVuZGVyUGF0aDo6c3Ryb2tlQkJveCgpIGNvbnN0CiB7CiAgICAgaWYgKEtTVkdQYWludGVy
RmFjdG9yeTo6aXNTdHJva2VkKHN0eWxlKCkpKSB7CiAgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQ
YWludGVyIHN0cm9rZVBhaW50ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50ZXIo
c3R5bGUoKSwgdGhpcyk7CkBAIC0xOTcsNyArNTksNyBAQCBGbG9hdFJlY3QgS0NhbnZhc0l0ZW1R
dWFydHo6OnN0cm9rZUJCb3goCiB9CiAKIAotYm9vbCBLQ2FudmFzSXRlbVF1YXJ0ejo6c3Ryb2tl
Q29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpIGNv
bnN0Citib29sIFJlbmRlclBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKSBjb25zdAogewogICAgIGlmIChwYXRoKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNl
L3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oCShyZXZpc2lvbiAx
NjE5NikKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VR
dWFydHouaAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFp
bnRTZXJ2ZXJUeXBlICZ0eXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZl
Y3QgKmNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUgJnR5cGUpIGNv
bnN0OwogICAgIAotICAgIC8vIGl0ZW0gY3JlYXRpb24KLSAgICB2aXJ0dWFsIFJlbmRlclBhdGgg
KmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUsIFNWR1N0
eWxlZEVsZW1lbnQgKm5vZGUsIGNvbnN0IFBhdGgmIHBhdGgpIGNvbnN0OwotCiAgICAgLy8gZmls
dGVycyAobW9zdGx5IGRlYnVnZ2luZykKICAgICBzdGF0aWMgYm9vbCBmaWx0ZXJzRW5hYmxlZCgp
OwogICAgIHN0YXRpYyB2b2lkIHNldEZpbHRlcnNFbmFibGVkKGJvb2wgZW5hYmxlZCk7CkluZGV4
OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdE
ZXZpY2VRdWFydHoubW0JKHJldmlzaW9uIDE2MTk2KQorKysgV2ViQ29yZS9rY2FudmFzL2Rldmlj
ZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNiBAQAogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW1wb3J0ICJLQ2FudmFzRmlsdGVyUXVhcnR6LmgiCi0jaW1wb3J0ICJL
Q2FudmFzSXRlbVF1YXJ0ei5oIgogI2ltcG9ydCAiS0NhbnZhc01hc2tlclF1YXJ0ei5oIgogI2lt
cG9ydCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ0ZpbGxQ
YWludGVyLmgiCkBAIC0xODQsMTMgKzE4Myw2IEBAIEtSZW5kZXJpbmdQYWludFNlcnZlciAqS1Jl
bmRlcmluZ0RldmljZVEKICAgICByZXR1cm4gbmV3U2VydmVyOwogfQogCi1SZW5kZXJQYXRoICpL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjcmVhdGVJdGVtKFJlbmRlckFyZW5hICphcmVuYSwgUmVu
ZGVyU3R5bGUgKnN0eWxlLCBTVkdTdHlsZWRFbGVtZW50ICpub2RlLCBjb25zdCBQYXRoJiBwYXRo
KSBjb25zdAotewotICAgIFJlbmRlclBhdGggKml0ZW0gPSBuZXcgKGFyZW5hKSBLQ2FudmFzSXRl
bVF1YXJ0eihzdHlsZSwgbm9kZSk7Ci0gICAgaXRlbS0+c2V0UGF0aChwYXRoKTsKLSAgICByZXR1
cm4gaXRlbTsKLX0KLQogS0NhbnZhc1Jlc291cmNlICpLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Ojpj
cmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSAmdHlwZSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1YXJ0
elN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9R
dWFydHpTdXBwb3J0LmgJKHJldmlzaW9uIDE2MTk2KQorKysgV2ViQ29yZS9rY2FudmFzL2Rldmlj
ZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMSArNzksNiBA
QCBzdGF0aWMgaW5saW5lIENHTGluZUpvaW4gQ0dMaW5lSm9pbkZyb21LCiAgICAgcmV0dXJuIGtD
R0xpbmVKb2luTWl0ZXI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgQ0dQb2ludCBDR1BvaW50U3VidHJh
Y3RQb2ludHMoQ0dQb2ludCBhLCBDR1BvaW50IGIpCi17Ci0gICAgcmV0dXJuIENHUG9pbnRNYWtl
KGEueCAtIGIueCwgYS55IC0gYi55KTsKLX0KLQogfQogCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MTk2KQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw2IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJjc3NoZWxwZXIuaCIKICNp
bmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUgPGtjYW52YXMv
S0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2
aWNlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw2IEBACiAjaW5j
bHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgi
CiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+Ci0KIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBTVkdDaXJjbGVFbGVtZW50OjpTVkdDaXJjbGVFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCkBAIC04Miw3ICs4MCw3IEBAIFBh
dGggU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnMKICAgICBmbG9hdCBfY3ggPSBj
eCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9jeSA9IGN5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsK
ICAgICBmbG9hdCBfciA9IHIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogCi0gICAgcmV0dXJuIEtD
YW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZUNpcmNsZShGbG9hdFBvaW50KF9jeCwgX2N5KSwg
X3IpOworICAgIHJldHVybiBQYXRoOjpjcmVhdGVDaXJjbGUoRmxvYXRQb2ludChfY3gsIF9jeSks
IF9yKTsKIH0KIAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHQ2lyY2xlRWxlbWVudDo6cHVz
aEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MTk2KQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw4ICszMSw2IEBACiAjaW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgogCi0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3Jl
YXRvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0VsbGlwc2VFbGVtZW50OjpTVkdF
bGxpcHNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9j
KQpAQCAtODksNyArODcsNyBAQCBQYXRoIFNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKCkg
Y29uCiAgICAgZmxvYXQgX2N4ID0gY3goKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfY3kgPSBjeSgp
LT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgZmxvYXQgX3J4ID0gcngoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpLCBfcnkgPSByeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAKLSAgICByZXR1cm4gS0Nh
bnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlRWxsaXBzZShGbG9hdFBvaW50KF9jeCwgX2N5KSwg
X3J4LCBfcnkpOworICAgIHJldHVybiBQYXRoOjpjcmVhdGVFbGxpcHNlKEZsb2F0UG9pbnQoX2N4
LCBfY3kpLCBfcngsIF9yeSk7CiB9CiAKIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0VsbGlw
c2VFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpj
b250ZXh0KQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2
aXNpb24gMTYxOTYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJTVkdBbmltYXRlZFN0
cmluZy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0j
aW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogI2luY2x1ZGUgPGtjYW52YXMvS0Nh
bnZhc0ltYWdlLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5o
PgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oPgpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0dFbGVtZW50LmNwcAkocmV2aXNpb24gMTYxOTYpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYg
QEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0dFbGVtZW50LmgiCiAKLSNpbmNs
dWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJT
VkdDb250YWluZXIuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNl
Lmg+CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24g
MTYxOTYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5l
ci5oPgotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2Fu
dmFzL0tDYW52YXNJbWFnZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MTk2KQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4
ICszMSw2IEBACiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdBbmlt
YXRlZExlbmd0aC5oIgogCi0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgotCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogU1ZHTGluZUVsZW1lbnQ6OlNWR0xpbmVFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCkBAIC04OSw3ICs4
Nyw3IEBAIFBhdGggU1ZHTGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogICAgIGZsb2F0
IF94MSA9IHgxKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kxID0geTEoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpOwogICAgIGZsb2F0IF94MiA9IHgyKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kyID0g
eTIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogCi0gICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpz
ZWxmKCktPmNyZWF0ZUxpbmUoRmxvYXRQb2ludChfeDEsIF95MSksIEZsb2F0UG9pbnQoX3gyLCBf
eTIpKTsKKyAgICByZXR1cm4gUGF0aDo6Y3JlYXRlTGluZShGbG9hdFBvaW50KF94MSwgX3kxKSwg
RmxvYXRQb2ludChfeDIsIF95MikpOwogfQogCiBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdM
aW5lRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAq
Y29udGV4dCkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjE5NikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgogI2luY2x1ZGUgImtzdmcuaCIKICNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5l
ci5oPgotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MTk2KQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oIgog
I2luY2x1ZGUgIlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgiCiAKLSNpbmNsdWRl
IDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1Jl
bmRlcmluZ0RldmljZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiS0NhbnZhc0Ny
ZWF0b3IuaCIKICNpbmNsdWRlICJLQ2FudmFzSW1hZ2UuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVu
ZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE5NikKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgogI2luY2x1ZGUgIlNWR1Bv
bHlnb25FbGVtZW50LmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAj
aW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50
LmNwcAkocmV2aXNpb24gMTYxOTYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5bGluZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiU1ZH
UG9pbnRMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9seWxpbmVFbGVtZW50LmgiCiAKLSNpbmNsdWRl
IDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1Jl
bmRlcmluZ0RldmljZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MTk2KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2
IEBACiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1
ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oPgogI2luY2x1ZGUgPGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmg+Ci0jaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExMSwx
MCArMTEwLDEwIEBAIFBhdGggU1ZHUmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogICAg
IHsKICAgICAgICAgZmxvYXQgX3J4ID0gaGFzUnggPyByeCgpLT5iYXNlVmFsKCktPnZhbHVlKCkg
OiByeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgICAgIGZsb2F0IF9yeSA9IGhhc1J5ID8g
cnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogcngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAg
ICAgICByZXR1cm4gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlUm91bmRlZFJlY3Rhbmds
ZShGbG9hdFJlY3QoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpLCBGbG9hdFNpemUoX3J4LCBfcnkp
KTsKKyAgICAgICAgcmV0dXJuIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoRmxvYXRSZWN0
KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSwgRmxvYXRTaXplKF9yeCwgX3J5KSk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZVJlY3RhbmdsZShGbG9h
dFJlY3QoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpKTsKKyAgICByZXR1cm4gUGF0aDo6Y3JlYXRl
UmVjdGFuZ2xlKEZsb2F0UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkpOwogfQogCiBjb25z
dCBTVkdTdHlsZWRFbGVtZW50ICpTVkdSZWN0RWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQo
Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NW
R0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NW
R0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAi
U1ZHWm9vbUV2ZW50LmgiCiAjaW5jbHVkZSAia3N2Zy5oIgogI2luY2x1ZGUgPGtjYW52YXMvUmVu
ZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgog
I2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KICNpbmNsdWRlICJU
ZXh0U3RyZWFtLmgiCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlICJBdHRyLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJLQ2FudmFzQ3JlYXRvci5oIgogI2lu
Y2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZp
Y2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNzEsNyArNzAsMTAgQEAgUmVu
ZGVyT2JqZWN0KiBTVkdTdHlsZWRFbGVtZW50OjpjcmVhdGVSZQogICAgIFBhdGggcGF0aERhdGEg
PSB0b1BhdGhEYXRhKCk7CiAgICAgaWYgKHBhdGhEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVJdGVtKGFyZW5hLCBz
dHlsZSwgdGhpcywgcGF0aERhdGEpOworCisgICAgUmVuZGVyUGF0aCAqaXRlbSA9IG5ldyAoYXJl
bmEpIFJlbmRlclBhdGgoc3R5bGUsIHRoaXMpOworICAgIGl0ZW0tPnNldFBhdGgocGF0aERhdGEp
OworICAgIHJldHVybiBpdGVtOwogfQogCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1N3aXRjaEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBA
CiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJBdHRyLmgiCiAKLSNpbmNsdWRlIDxrY2Fu
dmFzL0tDYW52YXNDcmVhdG9yLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJTVkdDb250YWlu
ZXIuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MTk2KQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw2IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdU
U3BhbkVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgPGtjYW52
YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR1RleHQuaD4K
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MTk2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJTVkdTeW1i
b2xFbGVtZW50LmgiCiAjaW5jbHVkZSAia3N2Zy5oIgogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVy
U1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogI2lu
Y2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BhdGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL1BhdGguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPG1hdGguaD4K
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNs
dWRlICJQYXRoLmgiCisKKyNkZWZpbmUgUVVBUlRFUiAwLjU1MiAvLyBhcHByb3hpbWF0aW9uIG9m
IGNvbnRyb2wgcG9pbnQgcG9zaXRpb25zIG9uIGEgYmV6aWVyCisgICAgICAgICAgICAgICAgICAg
ICAgLy8gdG8gc2ltdWxhdGUgYSBxdWFydGVyIG9mIGEgY2lyY2xlLgorbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQYXRoIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSkKK3sKKyAgICBQYXRo
IHBhdGg7CisgICAgZmxvYXQgeCA9IHJlY3RhbmdsZS54KCk7CisgICAgZmxvYXQgeSA9IHJlY3Rh
bmdsZS55KCk7CisgICAgZmxvYXQgd2lkdGggPSByZWN0YW5nbGUud2lkdGgoKTsKKyAgICBmbG9h
dCBoZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0KCk7CisgICAgZmxvYXQgcnggPSByb3VuZGluZ1Jh
ZGlpLndpZHRoKCk7CisgICAgZmxvYXQgcnkgPSByb3VuZGluZ1JhZGlpLmhlaWdodCgpOworICAg
IGlmICh3aWR0aCA8PSAwLjBmIHx8IGhlaWdodCA8PSAwLjBmKQorICAgICAgICByZXR1cm4gcGF0
aDsKKworICAgIGRvdWJsZSBkeCA9IHJ4LCBkeSA9IHJ5OworICAgIC8vIElmIHJ4IGlzIGdyZWF0
ZXIgdGhhbiBoYWxmIG9mIHRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlCisgICAgLy8gdGhlbiBz
ZXQgcnggdG8gaGFsZiBvZiB0aGUgd2lkdGggKHJlcXVpcmVkIGluIFNWRyBzcGVjKQorICAgIGlm
IChkeCA+IHdpZHRoIC8gMikKKyAgICAgICAgZHggPSB3aWR0aCAvIDI7CisKKyAgICAvLyBJZiBy
eSBpcyBncmVhdGVyIHRoYW4gaGFsZiBvZiB0aGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUKKyAg
ICAvLyB0aGVuIHNldCByeSB0byBoYWxmIG9mIHRoZSBoZWlnaHQgKHJlcXVpcmVkIGluIFNWRyBz
cGVjKQorICAgIGlmIChkeSA+IGhlaWdodCAvIDIpCisgICAgICAgIGR5ID0gaGVpZ2h0IC8gMjsK
KworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCArIGR4LCB5KSk7CisKKyAgICBpZiAoZHgg
PCB3aWR0aCAvIDIpCisgICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRo
IC0gcngsIHkpKTsKKworICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3
aWR0aCAtIGR4ICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsg
ZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBkeSkpOworCisg
ICAgaWYgKGR5IDwgaGVpZ2h0IC8gMikKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2lu
dCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBkeSkpOworCisgICAgcGF0aC5hZGRCZXppZXJDdXJ2
ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gZHkgKiAoMSAtIFFVQVJURVIp
KSwgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBkeCAqICgxIC0gUVVBUlRFUiksIHkgKyBoZWlnaHQp
LCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIGR4LCB5ICsgaGVpZ2h0KSk7CisKKyAgICBpZiAoZHgg
PCB3aWR0aCAvIDIpCisgICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIGR4LCB5
ICsgaGVpZ2h0KSk7CisKKyAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsg
ZHggKiAoMSAtIFFVQVJURVIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0
IC0gZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0IC0gZHkpKTsK
KworICAgIGlmIChkeSA8IGhlaWdodCAvIDIpCisgICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0
UG9pbnQoeCwgeSArIGR5KSk7CisKKyAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2lu
dCh4LCB5ICsgZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgZHggKiAoMSAtIFFV
QVJURVIpLCB5KSwgRmxvYXRQb2ludCh4ICsgZHgsIHkpKTsKKworICAgIHBhdGguY2xvc2VTdWJw
YXRoKCk7CisKKyAgICByZXR1cm4gcGF0aDsKK30KKworUGF0aCBQYXRoOjpjcmVhdGVSZWN0YW5n
bGUoY29uc3QgRmxvYXRSZWN0JiByZWN0YW5nbGUpCit7CisgICAgUGF0aCBwYXRoOworICAgIGZs
b2F0IHggPSByZWN0YW5nbGUueCgpOworICAgIGZsb2F0IHkgPSByZWN0YW5nbGUueSgpOworICAg
IGZsb2F0IHdpZHRoID0gcmVjdGFuZ2xlLndpZHRoKCk7CisgICAgZmxvYXQgaGVpZ2h0ID0gcmVj
dGFuZ2xlLmhlaWdodCgpOworICAgIGlmICh3aWR0aCA8IDAuMGYgfHwgaGVpZ2h0IDwgMC4wZikK
KyAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgCisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4
LCB5KSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkpKTsKKyAg
ICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCkpOworICAg
IHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCkpOworICAgIHBhdGguY2xv
c2VTdWJwYXRoKCk7CisKKyAgICByZXR1cm4gcGF0aDsKK30KKworUGF0aCBQYXRoOjpjcmVhdGVF
bGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmYywgZmxvYXQgcngsIGZsb2F0IHJ5KQoreworICAgIGZs
b2F0IGN4ID0gYy54KCk7CisgICAgZmxvYXQgY3kgPSBjLnkoKTsKKyAgICBQYXRoIHBhdGg7Cisg
ICAgaWYgKHJ4IDw9IDAuMGYgfHwgcnkgPD0gMC4wZikKKyAgICAgICAgcmV0dXJuIHBhdGg7CisK
KyAgICBkb3VibGUgeCA9IGN4LCB5ID0gY3k7CisKKyAgICB1bnNpZ25lZCBzdGVwID0gMCwgbnVt
ID0gMTAwOworICAgIGJvb2wgcnVubmluZyA9IHRydWU7CisgICAgd2hpbGUgKHJ1bm5pbmcpCisg
ICAgeworICAgICAgICBpZiAoc3RlcCA9PSBudW0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ1
bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
ZG91YmxlIGFuZ2xlID0gZG91YmxlKHN0ZXApIC8gZG91YmxlKG51bSkgKiAyLjAgKiBNX1BJOwor
ICAgICAgICB4ID0gY3ggKyBjb3MoYW5nbGUpICogcng7CisgICAgICAgIHkgPSBjeSArIHNpbihh
bmdsZSkgKiByeTsKKworICAgICAgICBzdGVwKys7CisgICAgICAgIGlmIChzdGVwID09IDEpCisg
ICAgICAgICAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgfQorCisg
ICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKKworICAgIHJldHVybiBwYXRoOworfQorCitQYXRoIFBh
dGg6OmNyZWF0ZUNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjLCBmbG9hdCByKQoreworICAgIHJl
dHVybiBjcmVhdGVFbGxpcHNlKGMsIHIsIHIpOworfQorCitQYXRoIFBhdGg6OmNyZWF0ZUxpbmUo
Y29uc3QgRmxvYXRQb2ludCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkKK3sKKyAgICBQ
YXRoIHBhdGg7CisgICAgaWYgKHN0YXJ0LngoKSA9PSBlbmQueCgpICYmIHN0YXJ0LnkoKSA9PSBl
bmQueSgpKQorICAgICAgICByZXR1cm4gcGF0aDsKKworICAgIHBhdGgubW92ZVRvKHN0YXJ0KTsK
KyAgICBwYXRoLmFkZExpbmVUbyhlbmQpOworCisgICAgcmV0dXJuIHBhdGg7Cit9CisKK30KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vUGF0aC5oCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCwxNSArMzgsMzQgQEAgdHlwZWRlZiB2b2lkIFBsYXRmb3JtUGF0
aDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwor
ICAgIGNsYXNzIEZsb2F0UG9pbnQ7CisgICAgY2xhc3MgRmxvYXRTaXplOworICAgIGNsYXNzIEZs
b2F0UmVjdDsKKyAgICBjbGFzcyBTdHJpbmc7CisKICAgICBlbnVtIFdpbmRSdWxlIHsKICAgICAg
ICAgUlVMRV9OT05aRVJPID0gMCwKICAgICAgICAgUlVMRV9FVkVOT0REID0gMQogICAgIH07CiAK
LSAgICBjbGFzcyBGbG9hdFBvaW50OwotICAgIGNsYXNzIEZsb2F0U2l6ZTsKLSAgICBjbGFzcyBG
bG9hdFJlY3Q7Ci0gICAgY2xhc3MgU3RyaW5nOworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAg
IFBhdGhFbGVtZW50TW92ZVRvUG9pbnQsCisgICAgICAgIFBhdGhFbGVtZW50QWRkTGluZVRvUG9p
bnQsCisgICAgICAgIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludCwKKyAgICAgICAgUGF0
aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQsCisgICAgICAgIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRo
CisgICAgfSBQYXRoRWxlbWVudFR5cGU7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBQYXRoRWxlbWVu
dCB7CisgICAgICAgIFBhdGhFbGVtZW50VHlwZSB0eXBlOworICAgICAgICBGbG9hdFBvaW50KiBw
b2ludHM7CisgICAgfSBQYXRoRWxlbWVudDsKKworICAgIHR5cGVkZWYgdm9pZCAoKlBhdGhBcHBs
aWVyRnVuY3Rpb24pICgKKyAgICAgICAgdm9pZCogaW5mbywKKyAgICAgICAgY29uc3QgUGF0aEVs
ZW1lbnQqIGVsZW1lbnQKKyAgICApOwogCiAgICAgY2xhc3MgUGF0aCB7CiAgICAgcHVibGljOgpA
QCAtODIsNiArMTAxLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBQbGF0Zm9y
bVBhdGgqIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCisgICAgICAg
IHN0YXRpYyBQYXRoIGNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSk7CisgICAgICAgIHN0YXRpYyBQ
YXRoIGNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgc3RhdGljIFBh
dGggY3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBjLCBmbG9hdCByeCwgZmxvYXQgcnkp
OworICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgYywg
ZmxvYXQgcik7CisgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUxpbmUoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgICAgICB2b2lkIGFwcGx5KHZvaWQqIGluZm8s
IFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0OworICAgICAgICB2b2lkIHRyYW5z
Zm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFBs
YXRmb3JtUGF0aCogbV9wYXRoOwogICAgICAgICBXaW5kUnVsZSBtX3J1bGU7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2NnL1BhdGhDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9jZy9QYXRoQ0cuY3BwCShyZXZpc2lvbiAxNjE5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2cv
UGF0aENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9u
U2VydmljZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTMzLDEyICsxMzQsMTIgQEAg
Ym9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKICAgICByZXR1cm4gQ0dQYXRoSXNFbXB0eShtX3Bh
dGgpOwogIH0KIAotdm9pZCBDR1BhdGhUb0NGU3RyaW5nQXBwbGllckZ1bmN0aW9uKHZvaWQgKmlu
Zm8sIGNvbnN0IENHUGF0aEVsZW1lbnQgKmVsZW1lbnQpCit2b2lkIENHUGF0aFRvQ0ZTdHJpbmdB
cHBsaWVyRnVuY3Rpb24odm9pZCogaW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCAqZWxlbWVudCkK
IHsKICAgICBDRk11dGFibGVTdHJpbmdSZWYgc3RyaW5nID0gKENGTXV0YWJsZVN0cmluZ1JlZilp
bmZvOwogICAgIENGU3RyaW5nUmVmIHR5cGVTdHJpbmcgPSBDRlNUUigiIik7Ci0gICAgQ0dQb2lu
dCAqcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwotICAgIHN3aXRjaChlbGVtZW50LT50eXBlKSB7
CisgICAgQ0dQb2ludCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOworICAgIHN3aXRjaCAoZWxl
bWVudC0+dHlwZSkgewogICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDoKICAgICAg
ICAgQ0ZTdHJpbmdBcHBlbmRGb3JtYXQoc3RyaW5nLCAwLCBDRlNUUigiTSUuMmYsJS4yZiIpLCBw
b2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpOwogICAgICAgICBicmVhazsKQEAgLTE4NSw2ICsxODYs
NTUgQEAgU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCit0eXBlZGVmIHN0cnVjdCBQYXRoQXBwbGllckluZm8geworICAgIHZvaWQqIGluZm87
CisgICAgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbjsKK30gUGF0aEFwcGxpZXJJbmZvOwor
Cit2b2lkIENHUGF0aEFwcGxpZXJUb1BhdGhBcHBsaWVyKHZvaWQgKmluZm8sIGNvbnN0IENHUGF0
aEVsZW1lbnQgKmVsZW1lbnQpCit7CisgICAgUGF0aEFwcGxpZXJJbmZvKiBwaW5mbyA9IChQYXRo
QXBwbGllckluZm8qKWluZm87CisgICAgRmxvYXRQb2ludCBwb2ludHNbMl07CisgICAgUGF0aEVs
ZW1lbnQgcGVsZW1lbnQ7CisgICAgcGVsZW1lbnQudHlwZSA9IChQYXRoRWxlbWVudFR5cGUpZWxl
bWVudC0+dHlwZTsKKyAgICBwZWxlbWVudC5wb2ludHMgPSBwb2ludHM7CisgICAgQ0dQb2ludCog
Y2dQb2ludHMgPSBlbGVtZW50LT5wb2ludHM7CisgICAgc3dpdGNoIChlbGVtZW50LT50eXBlKSB7
CisgICAgY2FzZSBrQ0dQYXRoRWxlbWVudE1vdmVUb1BvaW50OgorICAgIGNhc2Uga0NHUGF0aEVs
ZW1lbnRBZGRMaW5lVG9Qb2ludDoKKyAgICAgICAgcG9pbnRzWzBdID0gY2dQb2ludHNbMF07Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50
OgorICAgICAgICBwb2ludHNbMF0gPSBjZ1BvaW50c1swXTsKKyAgICAgICAgcG9pbnRzWzFdID0g
Y2dQb2ludHNbMV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRBZGRD
dXJ2ZVRvUG9pbnQ6CisgICAgICAgIHBvaW50c1swXSA9IGNnUG9pbnRzWzBdOworICAgICAgICBw
b2ludHNbMV0gPSBjZ1BvaW50c1sxXTsKKyAgICAgICAgcG9pbnRzWzJdID0gY2dQb2ludHNbMl07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwaW5mby0+ZnVuY3Rpb24ocGluZm8tPmluZm8sICZw
ZWxlbWVudCk7Cit9CisKK3ZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJG
dW5jdGlvbiBmdW5jdGlvbikgY29uc3QKK3sKKyAgICBQYXRoQXBwbGllckluZm8gcGluZm87Cisg
ICAgcGluZm8uaW5mbyA9IGluZm87CisgICAgcGluZm8uZnVuY3Rpb24gPSBmdW5jdGlvbjsKKyAg
ICBDR1BhdGhBcHBseShtX3BhdGgsICZwaW5mbywgQ0dQYXRoQXBwbGllclRvUGF0aEFwcGxpZXIp
OworfQorCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKK3sKKyAgICBDR011dGFibGVQYXRoUmVmIHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxl
KCk7CisgICAgQ0dQYXRoQWRkUGF0aChwYXRoLCAoQ0dBZmZpbmVUcmFuc2Zvcm0qKSZ0cmFuc2Zv
cm0sIG1fcGF0aCk7CisgICAgQ0dQYXRoUmVsZWFzZShtX3BhdGgpOworICAgIG1fcGF0aCA9IHBh
dGg7Cit9CisKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9QYXRoUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUGF0
aFF0LmNwcAkocmV2aXNpb24gMTYxOTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1BhdGhRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw2ICsyMTksNDggQEAgU3RyaW5nIFBhdGg6OmRlYnVn
U3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4gcmV0OwogfQogCit2b2lkIFBhdGg6OmFwcGx5KHZv
aWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Cit7CisgICAgUGF0
aEVsZW1lbnQgcGVsZW1lbnQ7CisgICAgRmxvYXRQb2ludCBwb2ludHNbMl07CisgICAgcGVsZW1l
bnQucG9pbnRzID0gcG9pbnRzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9wYXRoLT5lbGVt
ZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFFQYWludGVyUGF0aDo6RWxlbWVudCYg
Y3VyID0gbV9wYXRoLT5lbGVtZW50QXQoaSk7CisKKyAgICAgICAgc3dpdGNoIChjdXIudHlwZSkg
eworICAgICAgICAgICAgY2FzZSBRUGFpbnRlclBhdGg6Ok1vdmVUb0VsZW1lbnQ6CisgICAgICAg
ICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50TW92ZVRvUG9pbnQ7CisgICAgICAg
ICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzBdID0gY3VyOworICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKGluZm8sICZwZWxlbWVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFFQYWludGVyUGF0aDo6TGluZVRvRWxlbWVudDoKKyAgICAgICAgICAgICAgICBwZWxl
bWVudC50eXBlID0gUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDsKKyAgICAgICAgICAgICAgICBw
ZWxlbWVudC5wb2ludHNbMF0gPSBjdXI7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oaW5mbywg
JnBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUVBh
aW50ZXJQYXRoOjpDdXJ2ZVRvRWxlbWVudDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBRUGFpbnRlclBhdGg6OkVsZW1lbnQmIGMxID0gbV9wYXRoLT5lbGVtZW50QXQoaSAr
IDEpOworICAgICAgICAgICAgICAgIGNvbnN0IFFQYWludGVyUGF0aDo6RWxlbWVudCYgYzIgPSBt
X3BhdGgtPmVsZW1lbnRBdChpICsgMik7CisKKyAgICAgICAgICAgICAgICBRX0FTU0VSVChjMS50
eXBlID09IFFQYWludGVyUGF0aDo6Q3VydmVUb0RhdGFFbGVtZW50KTsKKyAgICAgICAgICAgICAg
ICBRX0FTU0VSVChjMi50eXBlID09IFFQYWludGVyUGF0aDo6Q3VydmVUb0RhdGFFbGVtZW50KTsK
KworICAgICAgICAgICAgICAgIHBlbGVtZW50LnR5cGUgPSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Q
b2ludDsKKyAgICAgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBjdXI7CisgICAgICAg
ICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzFdID0gYzE7CisgICAgICAgICAgICAgICAgcGVsZW1l
bnQucG9pbnRzWzJdID0gYzI7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVt
ZW50KTsKKworICAgICAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgUVBhaW50ZXJQYXRoOjpDdXJ2ZVRvRGF0
YUVsZW1lbnQ6CisgICAgICAgICAgICAgICAgUV9BU1NFUlQoZmFsc2UpOworICAgICAgICB9Cisg
ICAgfQorfQorCiB9CiAKIC8vIHZpbTogdHM9NCBzdz00IGV0Cg==
</data>
<flag name="review"
          id="3305"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10381</attachid>
            <date>2006-09-03 13:24:33 -0700</date>
            <delta_ts>2006-09-03 13:27:15 -0700</delta_ts>
            <desc>Even more improved patch</desc>
            <filename>10696-3.diff</filename>
            <type>text/plain</type>
            <size>56942</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTYyMDApCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC04NjYsNiArODY2LDcgQEAgc2V0KFdlYkNvcmVfU1JDUwogICAgIHBs
YXRmb3JtL1N0cmluZ0ltcGwuY3BwCiAgICAgcGxhdGZvcm0vRmxvYXRSZWN0LmNwcAogICAgIHBs
YXRmb3JtL1Jlc291cmNlTG9hZGVyLmNwcAorICAgIHBsYXRmb3JtL1BhdGguY3BwCiAgICAgcGxh
dGZvcm0vcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwCiAgICAgcGxhdGZvcm0vcXQvU3RyaW5nUXQu
Y3BwCiAgICAgcGxhdGZvcm0vcXQvQ29sb3JRdC5jcHAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjIwMCkKKysrIFdl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMDYtMDkt
MDMgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA2OTYKKyAgICAgICAgUmVuZGVyUGF0aFF1YXJ0eiBhbmQgUmVuZGVyUGF0
aFF0IHNob3VsZCBub3QgYmUgbmVlZGVkCisKKyAgICAgICAgQ2xlYW51cCBvZiBjb2RlIHJlbGF0
ZWQgdG8gUmVuZGVyUGF0aC4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVE
IE9SIENIQU5HRUQKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXND
cmVhdG9yLmNwcDoKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg6CisgICAgICAg
ICoga2NhbnZhcy9SZW5kZXJQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3TWFya2Vyc0RhdGE6OkRyYXdNYXJrZXJzRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpkcmF3TWFya2VyV2l0aERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlTWFy
a2VyRGF0YUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1N0YXJ0QW5kTWlkTWFy
a2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpkcmF3TWFya2Vyc0lmTmVlZGVk
KToKKyAgICAgICAgKiBrY2FudmFzL1JlbmRlclBhdGguaDoKKyAgICAgICAgKiBrY2FudmFzL2Rl
dmljZS9LUmVuZGVyaW5nRGV2aWNlLmg6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS1Jl
bmRlcmluZ0RldmljZVF0LmNwcDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVy
aW5nRGV2aWNlUXQuaDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQkJveCk6CisgICAgICAgICoga2NhbnZh
cy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0Lmg6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tDYW52YXNJdGVtUXVhcnR6Lmg6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L0tDYW52YXNJdGVtUXVhcnR6Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ry
b2tlQkJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyk6
CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHou
aDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0
ei5tbToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRo
RGF0YSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdH
RWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHA6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0xpbmVF
bGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVu
dC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdQb2x5Z29uRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxl
bWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0eWxlZEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6Y3JlYXRlUmVu
ZGVyZXIpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXRoLmg6CisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAqIHBsYXRmb3JtL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDR1BhdGhUb0NGU3RyaW5nQXBwbGllckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNHUGF0aEFwcGxpZXJUb1BhdGhBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6
OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvUGF0aFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFwcGx5KToK
KwogMjAwNi0wOS0wMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQG55cG9wLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBUaW0gSC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjIwMCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjkyLDggKzEyOTIsNiBA
QAogCQlBODhBRDNCNjA5NTI0ODZFMDAxREQxOTYgLyogUXVhcnR6U3VwcG9ydC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjc3MDg5NzAxRjgw
MEJBNTExNCAvKiBRdWFydHpTdXBwb3J0Lm1tICovOyB9OwogCQlBODhBRDNCOTA5NTI0ODZFMDAx
REQxOTYgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjdBMDg5NzAxRjgwMEJBNTExNCAvKiBSZW5kZXJT
VkdDb250YWluZXIuY3BwICovOyB9OwogCQlBODhBRDNCQTA5NTI0ODZFMDAxREQxOTYgLyogUmVu
ZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEMwRkI3QjA4OTcwMUY4MDBCQTUxMTQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmgg
Ki87IH07Ci0JCUE4OEFEM0JCMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzQ3JlYXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3QzA4
OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0NyZWF0b3IuY3BwICovOyB9OwotCQlBODhBRDNCQzA5
NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0NyZWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjdEMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2Fu
dmFzQ3JlYXRvci5oICovOyB9OwogCQlBODhBRDNCRDA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZh
c0ZpbHRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThDMEZCN0UwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNGaWx0ZXJzLmNwcCAqLzsgfTsK
IAkJQTg4QUQzQkUwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNGaWx0ZXJzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3RjA4OTcwMUY4MDBC
QTUxMTQgLyogS0NhbnZhc0ZpbHRlcnMuaCAqLzsgfTsKIAkJQTg4QUQzQzAwOTUyNDg2RTAwMURE
MTk2IC8qIEtDYW52YXNJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThDMEZCODEwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNJbWFnZS5oICov
OyB9OwpAQCAtMTcxMyw2ICsxNzExLDcgQEAKIAkJQThGRUZCMzIwOTc5RjRGNjAwNTgzOUZEIC8q
IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEZFRkIzMDA5NzlGNEY2MDA1ODM5RkQgLyogU1ZHRm9yZWlnbk9i
amVjdEVsZW1lbnQuaCAqLzsgfTsKIAkJQUE4NEZDODUwQUEwRkUwODAwNzY5OUFGIC8qIEpTU1ZH
TWV0YWRhdGFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFBODRGQzgzMEFBMEZFMDgwMDc2OTlBRiAvKiBKU1NWR01ldGFkYXRhRWxlbWVu
dC5jcHAgKi87IH07CiAJCUFBODRGQzg2MEFBMEZFMDgwMDc2OTlBRiAvKiBKU1NWR01ldGFkYXRh
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QUE4NEZDODQwQUEwRkUwODAwNzY5OUFGIC8qIEpTU1ZHTWV0YWRhdGFFbGVtZW50LmggKi87IH07
CisJCUFBOThCODdEMEFBQTAyRjgwMDFBNDRDMiAvKiBQYXRoLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBOThCODdDMEFBQTAyRjgwMDFBNDRDMiAv
KiBQYXRoLmNwcCAqLzsgfTsKIAkJQUFDOERBQjEwQUExMDAyMDAwREMwOTA3IC8qIFNWR01ldGFk
YXRhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQUM4REFBRjBBQTEwMDIwMDBEQzA5MDcgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmNwcCAq
LzsgfTsKIAkJQUFDOERBQjIwQUExMDAyMDAwREMwOTA3IC8qIFNWR01ldGFkYXRhRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFDOERBQjAw
QUExMDAyMDAwREMwOTA3IC8qIFNWR01ldGFkYXRhRWxlbWVudC5oICovOyB9OwogCQlBQjIzQTMx
MjA5QkJBNzc2MDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElubmVyRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjIzQTMxMDA5QkJBNzc2
MDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElubmVyRWxlbWVudC5jcHAgKi87IH07CkBAIC0zNjQ0
LDggKzM2NDMsNiBAQAogCQlBOEMwRkI3NzA4OTcwMUY4MDBCQTUxMTQgLyogUXVhcnR6U3VwcG9y
dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gUXVhcnR6U3VwcG9ydC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjdBMDg5NzAxRjgwMEJBNTExNCAvKiBSZW5k
ZXJTVkdDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQThDMEZCN0IwODk3MDFG
ODAwQkE1MTE0IC8qIFJlbmRlclNWR0NvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0NvbnRhaW5lci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQThDMEZC
N0MwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNDcmVhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS0NhbnZhc0NyZWF0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
LQkJQThDMEZCN0QwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNDcmVhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc0NyZWF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUE4QzBGQjdFMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzRmlsdGVycy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNG
aWx0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUE4QzBGQjdGMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzRmlsdGVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtDYW52
YXNGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQlBOEMwRkI4MTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ltYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZh
c0ltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwpAQCAtMzg0MCw2ICszODM3LDcgQEAKIAkJQThGRUZCMzAwOTc5RjRGNjAwNTgzOUZE
IC8qIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBQTg0RkM4MzBBQTBGRTA4MDA3Njk5QUYgLyogSlNTVkdNZXRhZGF0YUVsZW1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHTWV0YWRhdGFF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUE4NEZDODQwQUEwRkUw
ODAwNzY5OUFGIC8qIEpTU1ZHTWV0YWRhdGFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1NWR01ldGFkYXRhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBQTk4Qjg3QzBBQUEwMkY4MDAxQTQ0QzIgLyogUGF0aC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBQzhEQUFGMEFBMTAwMjAwMERDMDkwNyAvKiBTVkdNZXRhZGF0YUVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR01ldGFkYXRh
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBQzhEQUIwMEFBMTAw
MjAwMERDMDkwNyAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR01ldGFkYXRhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBQjIzQTMxMDA5QkJBNzc2MDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElubmVyRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRleHRG
aWVsZElubmVyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Nzk3
LDggKzU3OTUsNiBAQAogCQkJCUE4QzBGQjUzMDg5NzAxRjcwMEJBNTExNCAvKiBkZXZpY2UgKi8s
CiAJCQkJQThDMEZCN0EwODk3MDFGODAwQkE1MTE0IC8qIFJlbmRlclNWR0NvbnRhaW5lci5jcHAg
Ki8sCiAJCQkJQThDMEZCN0IwODk3MDFGODAwQkE1MTE0IC8qIFJlbmRlclNWR0NvbnRhaW5lci5o
ICovLAotCQkJCUE4QzBGQjdDMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzQ3JlYXRvci5jcHAg
Ki8sCi0JCQkJQThDMEZCN0QwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNDcmVhdG9yLmggKi8s
CiAJCQkJQThDMEZCN0UwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNGaWx0ZXJzLmNwcCAqLywK
IAkJCQlBOEMwRkI3RjA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ZpbHRlcnMuaCAqLywKIAkJ
CQlBOEMwRkI4MTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ltYWdlLmggKi8sCkBAIC02MDU4
LDYgKzYwNTQsNyBAQAogCQlCQ0YxQTVCQTA5NzgzMjA5MDA2MUExMjMgLyogcGxhdGZvcm0gKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFBOThCODdDMEFB
QTAyRjgwMDFBNDRDMiAvKiBQYXRoLmNwcCAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYx
MkQgLyogY2YgKi8sCiAJCQkJOTMwMzJDQ0MwOUFFQzM2MjAwRjgyQTE4IC8qIGNnICovLAogCQkJ
CTY1ODJBMTQ4MDk5OTlENkMwMEJFRUI2RCAvKiBtYWMgKi8sCkBAIC02NzE2LDcgKzY3MTMsNiBA
QAogCQkJCUE4OEFEM0IzMDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJR
dWFydHouaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEM0I1MDk1MjQ4NkUwMDFERDE5NiAvKiBR
dWFydHpTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDNCQTA5NTI0ODZFMDAxREQx
OTYgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBODhBRDNCQzA5
NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0NyZWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
OEFEM0JFMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzRmlsdGVycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTg4QUQzQzAwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNJbWFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTg4QUQzQzIwOTUyNDg2RTAwMUREMTk2IC8qIFJlbmRlclBhdGguaCBpbiBI
ZWFkZXJzICovLApAQCAtNzc1Nyw3ICs3NzUzLDYgQEAKIAkJCQlBODhBRDNCNDA5NTI0ODZFMDAx
REQxOTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg4QUQzQjYwOTUyNDg2RTAwMUREMTk2IC8qIFF1YXJ0elN1cHBvcnQubW0gaW4gU291cmNl
cyAqLywKIAkJCQlBODhBRDNCOTA5NTI0ODZFMDAxREQxOTYgLyogUmVuZGVyU1ZHQ29udGFpbmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4OEFEM0JCMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2Fu
dmFzQ3JlYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDNCRDA5NTI0ODZFMDAxREQx
OTYgLyogS0NhbnZhc0ZpbHRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQzQzEwOTUy
NDg2RTAwMUREMTk2IC8qIFJlbmRlclBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQz
QzgwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNSZXNvdXJjZXMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC04NTMxLDYgKzg1MjYsNyBAQAogCQkJCTg1MkI5RThBMEFBNzlDNDcwMDJBREE2RSAvKiBE
T01IVE1MT3B0aW9uRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBOTg5NTVDMEFBNzgx
NDkwMDVFRjVFRiAvKiBDU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOTg5NTZCMEFB
NzhGODAwMDVFRjVFRiAvKiBLVVJMQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUE5OEI4
N0QwQUFBMDJGODAwMUE0NEMyIC8qIFBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwMzJE
RDgwQUE4QzlCRTAwN0QzQjdEIC8qIERPTUNTU0NoYXJzZXRSdWxlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJODUwMzJEREEwQUE4QzlCRTAwN0QzQjdEIC8qIERPTUNTU0ZvbnRGYWNlUnVsZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTg1MDMyRERDMEFBOEM5QkUwMDdEM0I3RCAvKiBET01DU1NJbXBv
cnRSdWxlLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc0Ny
ZWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5j
cHAJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDcmVhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgCi0gICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAg
ICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIktDYW52YXNDcmVhdG9yLmgiCi0KLSNpbmNs
dWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUtDYW52YXNDcmVhdG9yICpLQ2FudmFzQ3JlYXRvcjo6c19jcmVhdG9yID0gMDsK
LQotS0NhbnZhc0NyZWF0b3I6OktDYW52YXNDcmVhdG9yKCkKLXsKLX0KLQotS0NhbnZhc0NyZWF0
b3I6On5LQ2FudmFzQ3JlYXRvcigpCi17Ci19Ci0KLUtDYW52YXNDcmVhdG9yICpLQ2FudmFzQ3Jl
YXRvcjo6c2VsZigpCi17Ci0gICAgaWYoIXNfY3JlYXRvcikKLSAgICAgICAgc19jcmVhdG9yID0g
bmV3IEtDYW52YXNDcmVhdG9yKCk7Ci0KLSAgICByZXR1cm4gc19jcmVhdG9yOwotfQotCi1QYXRo
IEtDYW52YXNDcmVhdG9yOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYg
Ym94LCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpIGNvbnN0Ci17Ci0gICAgUGF0aCBw
YXRoOwotICAgIGZsb2F0IHggPSBib3gueCgpOwotICAgIGZsb2F0IHkgPSBib3gueSgpOwotICAg
IGZsb2F0IHdpZHRoID0gYm94LndpZHRoKCk7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gYm94LmhlaWdo
dCgpOwotICAgIGZsb2F0IHJ4ID0gcm91bmRpbmdSYWRpaS53aWR0aCgpOwotICAgIGZsb2F0IHJ5
ID0gcm91bmRpbmdSYWRpaS5oZWlnaHQoKTsKLSAgICBpZiAod2lkdGggPD0gMC4wZiB8fCBoZWln
aHQgPD0gMC4wZikKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICBkb3VibGUgbnJ4ID0gcngs
IG5yeSA9IHJ5OwotICAgIC8vIElmIHJ4IGlzIGdyZWF0ZXIgdGhhbiBoYWxmIG9mIHRoZSB3aWR0
aCBvZiB0aGUgcmVjdGFuZ2xlCi0gICAgLy8gdGhlbiBzZXQgcnggdG8gaGFsZiBvZiB0aGUgd2lk
dGggKHJlcXVpcmVkIGluIFNWRyBzcGVjKQotICAgIGlmIChucnggPiB3aWR0aCAvIDIpCi0gICAg
ICAgIG5yeCA9IHdpZHRoIC8gMjsKLQotICAgIC8vIElmIHJ5IGlzIGdyZWF0ZXIgdGhhbiBoYWxm
IG9mIHRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZQotICAgIC8vIHRoZW4gc2V0IHJ5IHRvIGhh
bGYgb2YgdGhlIGhlaWdodCAocmVxdWlyZWQgaW4gU1ZHIHNwZWMpCi0gICAgaWYgKG5yeSA+IGhl
aWdodCAvIDIpCi0gICAgICAgIG5yeSA9IGhlaWdodCAvIDI7Ci0KLSAgICBwYXRoLm1vdmVUbyhG
bG9hdFBvaW50KHggKyBucngsIHkpKTsKLQotICAgIGlmIChucnggPCB3aWR0aCAvIDIpCi0gICAg
ICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gcngsIHkpKTsKLQotICAg
IHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIG5yeCAqICgxIC0g
MC41NTIpLCB5KSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBucnkgKiAoMSAtIDAuNTUyKSks
IEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgbnJ5KSk7Ci0KLSAgICBpZiAobnJ5IDwgaGVpZ2h0
IC8gMikKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBo
ZWlnaHQgLSBucnkpKTsKLQotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHgg
KyB3aWR0aCwgeSArIGhlaWdodCAtIG5yeSAqICgxIC0gMC41NTIpKSwgRmxvYXRQb2ludCh4ICsg
d2lkdGggLSBucnggKiAoMSAtIDAuNTUyKSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCArIHdp
ZHRoIC0gbnJ4LCB5ICsgaGVpZ2h0KSk7Ci0KLSAgICBpZiAobnJ4IDwgd2lkdGggLyAyKQotICAg
ICAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyBucngsIHkgKyBoZWlnaHQpKTsKLQot
ICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyBucnggKiAoMSAtIDAuNTUy
KSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIG5yeSAqICgxIC0gMC41
NTIpKSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0IC0gbnJ5KSk7Ci0KLSAgICBpZiAobnJ5IDwg
aGVpZ2h0IC8gMikKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5ICsgbnJ5
KSk7Ci0KLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4LCB5ICsgbnJ5ICog
KDEgLSAwLjU1MikpLCBGbG9hdFBvaW50KHggKyBucnggKiAoMSAtIDAuNTUyKSwgeSksIEZsb2F0
UG9pbnQoeCArIG5yeCwgeSkpOwotCi0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLQotICAgIHJl
dHVybiBwYXRoOwotfQotCi1QYXRoIEtDYW52YXNDcmVhdG9yOjpjcmVhdGVSZWN0YW5nbGUoY29u
c3QgRmxvYXRSZWN0JiBib3gpIGNvbnN0Ci17Ci0gICAgUGF0aCBwYXRoOwotICAgIGZsb2F0IHgg
PSBib3gueCgpOwotICAgIGZsb2F0IHkgPSBib3gueSgpOwotICAgIGZsb2F0IHdpZHRoID0gYm94
LndpZHRoKCk7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gYm94LmhlaWdodCgpOwotICAgIGlmICh3aWR0
aCA8IDAuMGYgfHwgaGVpZ2h0IDwgMC4wZikKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgCi0g
ICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxv
YXRQb2ludCh4ICsgd2lkdGgsIHkpKTsKLSAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgg
KyB3aWR0aCwgeSArIGhlaWdodCkpOwotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwg
eSArIGhlaWdodCkpOwotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0
aDsKLX0KLQotUGF0aCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBv
aW50JmMsIGZsb2F0IHJ4LCBmbG9hdCByeSkgY29uc3QKLXsKLSAgICBmbG9hdCBjeCA9IGMueCgp
OwotICAgIGZsb2F0IGN5ID0gYy55KCk7Ci0gICAgUGF0aCBwYXRoOwotICAgIGlmIChyeCA8PSAw
LjBmIHx8IHJ5IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRoOwotCi0gICAgLy8gRWxsaXBz
ZSBjcmVhdGlvbiAtIG5pY2UgJiBjbGVhbiBhZ2cyIGNvZGUKLSAgICBkb3VibGUgeCA9IGN4LCB5
ID0gY3k7Ci0KLSAgICB1bnNpZ25lZCBzdGVwID0gMCwgbnVtID0gMTAwOwotICAgIGJvb2wgcnVu
bmluZyA9IHRydWU7Ci0gICAgd2hpbGUocnVubmluZykKLSAgICB7Ci0gICAgICAgIGlmKHN0ZXAg
PT0gbnVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBydW5uaW5nID0gZmFsc2U7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRvdWJsZSBhbmdsZSA9IGRvdWJsZShz
dGVwKSAvIGRvdWJsZShudW0pICogMi4wICogTV9QSTsKLSAgICAgICAgeCA9IGN4ICsgY29zKGFu
Z2xlKSAqIHJ4OwotICAgICAgICB5ID0gY3kgKyBzaW4oYW5nbGUpICogcnk7Ci0KLSAgICAgICAg
c3RlcCsrOwotICAgICAgICBpZihzdGVwID09IDEpCi0gICAgICAgICAgICBwYXRoLm1vdmVUbyhG
bG9hdFBvaW50KHgsIHkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGF0aC5hZGRMaW5l
VG8oRmxvYXRQb2ludCh4LCB5KSk7Ci0gICAgfQotCi0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsK
LQotICAgIHJldHVybiBwYXRoOwotfQotCi1QYXRoIEtDYW52YXNDcmVhdG9yOjpjcmVhdGVDaXJj
bGUoY29uc3QgRmxvYXRQb2ludCYgYywgZmxvYXQgcikgY29uc3QKLXsKLSAgICByZXR1cm4gY3Jl
YXRlRWxsaXBzZShjLCByLCByKTsKLX0KLQotUGF0aCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlTGlu
ZShjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3QgRmxvYXRQb2ludCYgZW5kKSBjb25zdAot
ewotICAgIFBhdGggcGF0aDsKLSAgICBpZiAoc3RhcnQueCgpID09IGVuZC54KCkgJiYgc3RhcnQu
eSgpID09IGVuZC55KCkpCi0gICAgICAgIHJldHVybiBwYXRoOwotCi0gICAgcGF0aC5tb3ZlVG8o
c3RhcnQpOwotICAgIHBhdGguYWRkTGluZVRvKGVuZCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0K
LQotfQotCi0vLyB2aW06dHM9NDpub2V0Ci0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLQpJbmRleDog
V2ViQ29yZS9rY2FudmFzL0tDYW52YXNDcmVhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
Y2FudmFzL0tDYW52YXNDcmVhdG9yLmgJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rY2Fu
dmFzL0tDYW52YXNDcmVhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAotICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotKi8KLQotI2lmbmRl
ZiBLQ2FudmFzQ3JlYXRvcl9ICi0jZGVmaW5lIEtDYW52YXNDcmVhdG9yX0gKLSNpZmRlZiBTVkdf
U1VQUE9SVAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBhdGg7Ci1jbGFzcyBGbG9h
dFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRTaXplOwotCi1jbGFzcyBLQ2Fu
dmFzQ3JlYXRvcgotewotcHVibGljOgotICAgIEtDYW52YXNDcmVhdG9yKCk7Ci0gICAgdmlydHVh
bCB+S0NhbnZhc0NyZWF0b3IoKTsKLQotICAgIHN0YXRpYyBLQ2FudmFzQ3JlYXRvciAqc2VsZigp
OwotCi0gICAgLy8gQ2FudmFzIHBhdGggY3JlYXRpb24KLSAgICBQYXRoIGNyZWF0ZVJvdW5kZWRS
ZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJikgY29uc3Q7Ci0gICAg
UGF0aCBjcmVhdGVSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgUGF0aCBj
cmVhdGVFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0
OwotICAgIFBhdGggY3JlYXRlQ2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByKSBjb25z
dDsKLSAgICBQYXRoIGNyZWF0ZUxpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgS0NhbnZhc0NyZWF0b3IgKnNfY3Jl
YXRvcjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCi0jZW5kaWYKLQotLy8gdmlt
OnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL1JlbmRlclBhdGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJQYXRoLmNwcAkocmV2aXNpb24gMTYyMDApCisr
KyBXZWJDb3JlL2tjYW52YXMvUmVuZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYg
KzI1LDggQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKIAor
I2luY2x1ZGUgPG1hdGguaD4KKwogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIK
QEAgLTMxMiw4ICszMTQsMTQyIEBAIGJvb2wgUmVuZGVyUGF0aDo6bm9kZUF0UG9pbnQoTm9kZUlu
Zm8mIGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3R5cGVkZWYgZW51bSB7CisgICAgU3RhcnQs
CisgICAgTWlkLAorICAgIEVuZAorfSBNYXJrZXJUeXBlOworCitzdHJ1Y3QgTWFya2VyRGF0YSB7
CisgICAgRmxvYXRQb2ludCBvcmlnaW47CisgICAgZG91YmxlIHN0cm9rZVdpZHRoOworICAgIEZs
b2F0UG9pbnQgaW5zbG9wZVBvaW50c1syXTsKKyAgICBGbG9hdFBvaW50IG91dHNsb3BlUG9pbnRz
WzJdOworICAgIE1hcmtlclR5cGUgdHlwZTsKKyAgICBLQ2FudmFzTWFya2VyICptYXJrZXI7Cit9
OworCitzdHJ1Y3QgRHJhd01hcmtlcnNEYXRhIHsKKyAgICBEcmF3TWFya2Vyc0RhdGEoR3JhcGhp
Y3NDb250ZXh0KiwgS0NhbnZhc01hcmtlciogc3RhcnRNYXJrZXIsIEtDYW52YXNNYXJrZXIqIG1p
ZE1hcmtlciwgZG91YmxlIHN0cm9rZVdpZHRoKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQ7CisgICAgaW50IGVsZW1lbnRJbmRleDsKKyAgICBNYXJrZXJEYXRhIHByZXZpb3VzTWFya2Vy
RGF0YTsKKyAgICBLQ2FudmFzTWFya2VyKiBtaWRNYXJrZXI7Cit9OworCitEcmF3TWFya2Vyc0Rh
dGE6OkRyYXdNYXJrZXJzRGF0YShHcmFwaGljc0NvbnRleHQqIGMsIEtDYW52YXNNYXJrZXIgKnN0
YXJ0LCBLQ2FudmFzTWFya2VyICptaWQsIGRvdWJsZSBzdHJva2VXaWR0aCkKKyAgICA6IGNvbnRl
eHQoYykKKyAgICAsIGVsZW1lbnRJbmRleCgwKQorICAgICwgbWlkTWFya2VyKG1pZCkKK3sKKyAg
ICBwcmV2aW91c01hcmtlckRhdGEub3JpZ2luID0gRmxvYXRQb2ludCgpOworICAgIHByZXZpb3Vz
TWFya2VyRGF0YS5zdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoOworICAgIHByZXZpb3VzTWFya2Vy
RGF0YS5tYXJrZXIgPSBzdGFydDsKKyAgICBwcmV2aW91c01hcmtlckRhdGEudHlwZSA9IFN0YXJ0
OwogfQogCi0vLyB2aW06dHM9NDpub2V0Ci0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKK3N0YXRpYyB2
b2lkIGRyYXdNYXJrZXJXaXRoRGF0YShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE1hcmtlckRh
dGEgJmRhdGEpCit7CisgICAgaWYgKCFkYXRhLm1hcmtlcikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIEZsb2F0UG9pbnQgaW5zbG9wZUNoYW5nZSA9IGRhdGEuaW5zbG9wZVBvaW50c1sxXSAt
IEZsb2F0U2l6ZShkYXRhLmluc2xvcGVQb2ludHNbMF0ueCgpLCBkYXRhLmluc2xvcGVQb2ludHNb
MF0ueSgpKTsKKyAgICBGbG9hdFBvaW50IG91dHNsb3BlQ2hhbmdlID0gZGF0YS5vdXRzbG9wZVBv
aW50c1sxXSAtIEZsb2F0U2l6ZShkYXRhLm91dHNsb3BlUG9pbnRzWzBdLngoKSwgZGF0YS5vdXRz
bG9wZVBvaW50c1swXS55KCkpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGVnMnJh
ZCA9IE1fUEkvMTgwLjA7CisgICAgZG91YmxlIGluc2xvcGUgPSBhdGFuMihpbnNsb3BlQ2hhbmdl
LnkoKSwgaW5zbG9wZUNoYW5nZS54KCkpIC8gZGVnMnJhZDsKKyAgICBkb3VibGUgb3V0c2xvcGUg
PSBhdGFuMihvdXRzbG9wZUNoYW5nZS55KCksIG91dHNsb3BlQ2hhbmdlLngoKSkgLyBkZWcycmFk
OworICAgIAorICAgIGRvdWJsZSBhbmdsZSA9IDAuMDsKKyAgICBzd2l0Y2ggKGRhdGEudHlwZSkg
eworICAgICAgICBjYXNlIFN0YXJ0OgorICAgICAgICAgICAgYW5nbGUgPSBvdXRzbG9wZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1pZDoKKyAgICAgICAgICAgIGFuZ2xlID0g
KGluc2xvcGUgKyBvdXRzbG9wZSkgLyAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRW5kOgorICAgICAgICAgICAgYW5nbGUgPSBpbnNsb3BlOworICAgIH0KKyAgICAKKyAgICBk
YXRhLm1hcmtlci0+ZHJhdyhjb250ZXh0LCBGbG9hdFJlY3QoKSwgZGF0YS5vcmlnaW4ueCgpLCBk
YXRhLm9yaWdpbi55KCksIGRhdGEuc3Ryb2tlV2lkdGgsIGFuZ2xlKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIHVwZGF0ZU1hcmtlckRhdGFGb3JFbGVtZW50KE1hcmtlckRhdGEgJnByZXZpb3Vz
TWFya2VyRGF0YSwgY29uc3QgUGF0aEVsZW1lbnQgKmVsZW1lbnQpCit7CisgICAgRmxvYXRQb2lu
dCAqcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOworICAgIAorICAgIHN3aXRjaCAoZWxlbWVudC0+
dHlwZSkgeworICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgorICAgICAg
ICAvLyBUT0RPCisgICAgICAgIHByZXZpb3VzTWFya2VyRGF0YS5vcmlnaW4gPSBwb2ludHNbMV07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ6Cisg
ICAgICAgIHByZXZpb3VzTWFya2VyRGF0YS5pbnNsb3BlUG9pbnRzWzBdID0gcG9pbnRzWzFdOwor
ICAgICAgICBwcmV2aW91c01hcmtlckRhdGEuaW5zbG9wZVBvaW50c1sxXSA9IHBvaW50c1syXTsK
KyAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLm9yaWdpbiA9IHBvaW50c1syXTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OgorICAgIGNhc2UgUGF0aEVs
ZW1lbnRBZGRMaW5lVG9Qb2ludDoKKyAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgor
ICAgICAgICBwcmV2aW91c01hcmtlckRhdGEuaW5zbG9wZVBvaW50c1swXSA9IHByZXZpb3VzTWFy
a2VyRGF0YS5vcmlnaW47CisgICAgICAgIHByZXZpb3VzTWFya2VyRGF0YS5pbnNsb3BlUG9pbnRz
WzFdID0gcG9pbnRzWzBdOworICAgICAgICBwcmV2aW91c01hcmtlckRhdGEub3JpZ2luID0gcG9p
bnRzWzBdOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZHJhd1N0YXJ0QW5kTWlkTWFya2Vycyh2
b2lkICppbmZvLCBjb25zdCBQYXRoRWxlbWVudCAqZWxlbWVudCkKK3sKKyAgICBEcmF3TWFya2Vy
c0RhdGEgJmRhdGEgPSAqKERyYXdNYXJrZXJzRGF0YSAqKWluZm87CisKKyAgICBpbnQgZWxlbWVu
dEluZGV4ID0gZGF0YS5lbGVtZW50SW5kZXg7CisgICAgTWFya2VyRGF0YSAmcHJldmlvdXNNYXJr
ZXJEYXRhID0gZGF0YS5wcmV2aW91c01hcmtlckRhdGE7CisKKyAgICBGbG9hdFBvaW50ICpwb2lu
dHMgPSBlbGVtZW50LT5wb2ludHM7CiAKKyAgICAvLyBGaXJzdCB1cGRhdGUgdGhlIG91dHNsb3Bl
IGZvciB0aGUgcHJldmlvdXMgZWxlbWVudAorICAgIHByZXZpb3VzTWFya2VyRGF0YS5vdXRzbG9w
ZVBvaW50c1swXSA9IHByZXZpb3VzTWFya2VyRGF0YS5vcmlnaW47CisgICAgcHJldmlvdXNNYXJr
ZXJEYXRhLm91dHNsb3BlUG9pbnRzWzFdID0gcG9pbnRzWzBdOworCisgICAgLy8gRHJhdyB0aGUg
bWFya2VyIGZvciB0aGUgcHJldmlvdXMgZWxlbWVudAorICAgIGlmIChlbGVtZW50SW5kZXggIT0g
MCkKKyAgICAgICAgZHJhd01hcmtlcldpdGhEYXRhKGRhdGEuY29udGV4dCwgcHJldmlvdXNNYXJr
ZXJEYXRhKTsKKworICAgIC8vIFVwZGF0ZSBvdXIgbWFya2VyIGRhdGEgZm9yIHRoaXMgZWxlbWVu
dAorICAgIHVwZGF0ZU1hcmtlckRhdGFGb3JFbGVtZW50KHByZXZpb3VzTWFya2VyRGF0YSwgZWxl
bWVudCk7CisKKyAgICBpZiAoZWxlbWVudEluZGV4ID09IDEpIHsKKyAgICAgICAgLy8gQWZ0ZXIg
ZHJhd2luZyB0aGUgc3RhcnQgbWFya2VyLCBzd2l0Y2ggdG8gZHJhd2luZyBtaWQgbWFya2Vycwor
ICAgICAgICBwcmV2aW91c01hcmtlckRhdGEubWFya2VyID0gZGF0YS5taWRNYXJrZXI7CisgICAg
ICAgIHByZXZpb3VzTWFya2VyRGF0YS50eXBlID0gTWlkOworICAgIH0KKworICAgIGRhdGEuZWxl
bWVudEluZGV4Kys7Cit9CisKK3ZvaWQgUmVuZGVyUGF0aDo6ZHJhd01hcmtlcnNJZk5lZWRlZChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgUGF0
aCYgcGF0aCkgY29uc3QKK3sKKyAgICBEb2N1bWVudCAqZG9jID0gZG9jdW1lbnQoKTsKKyAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSAqc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworCisg
ICAgS0NhbnZhc01hcmtlciAqc3RhcnRNYXJrZXIgPSBnZXRNYXJrZXJCeUlkKGRvYywgc3ZnU3R5
bGUtPnN0YXJ0TWFya2VyKCkubWlkKDEpKTsKKyAgICBLQ2FudmFzTWFya2VyICptaWRNYXJrZXIg
PSBnZXRNYXJrZXJCeUlkKGRvYywgc3ZnU3R5bGUtPm1pZE1hcmtlcigpLm1pZCgxKSk7CisgICAg
S0NhbnZhc01hcmtlciAqZW5kTWFya2VyID0gZ2V0TWFya2VyQnlJZChkb2MsIHN2Z1N0eWxlLT5l
bmRNYXJrZXIoKS5taWQoMSkpOworICAgIAorICAgIGlmICghc3RhcnRNYXJrZXIgJiYgIW1pZE1h
cmtlciAmJiAhZW5kTWFya2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3VibGUgc3Ryb2tl
V2lkdGggPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKHRoaXMsIHN0
eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMCk7CisKKyAgICBEcmF3TWFya2Vy
c0RhdGEgZGF0YShjb250ZXh0LCBzdGFydE1hcmtlciwgbWlkTWFya2VyLCBzdHJva2VXaWR0aCk7
CisKKyAgICBwYXRoLmFwcGx5KCZkYXRhLCBkcmF3U3RhcnRBbmRNaWRNYXJrZXJzKTsKKworICAg
IGRhdGEucHJldmlvdXNNYXJrZXJEYXRhLm1hcmtlciA9IGVuZE1hcmtlcjsKKyAgICBkYXRhLnBy
ZXZpb3VzTWFya2VyRGF0YS50eXBlID0gRW5kOworICAgIGRyYXdNYXJrZXJXaXRoRGF0YShjb250
ZXh0LCBkYXRhLnByZXZpb3VzTWFya2VyRGF0YSk7Cit9CisKK30KKworI2VuZGlmIC8vIFNWR19T
VVBQT1JUCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvUmVuZGVyUGF0aC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2NhbnZhcy9SZW5kZXJQYXRoLmgJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29y
ZS9rY2FudmFzL1JlbmRlclBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
ICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogKi8KIAotI2lmbmRlZiBLQ2FudmFzSXRl
bV9ICi0jZGVmaW5lIEtDYW52YXNJdGVtX0gKKyNpZm5kZWYgUmVuZGVyUGF0aF9ICisjZGVmaW5l
IFJlbmRlclBhdGhfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJEZXByZWNhdGVk
VmFsdWVMaXN0LmgiCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEhpdC1kZXRl
Y3Rpb24gc2VwZXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9rZQogICAgIHZpcnR1YWwg
Ym9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0g
dHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0
cm9rZSA9IHRydWUpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyBhbiB1bnNjYWxlZCBib3VuZGlu
ZyBib3ggKG5vdCBldmVuIGluY2x1ZGluZyBsb2NhbFRyYW5zZm9ybSgpKSBmb3IgdGhpcyB2ZWN0
b3IgcGF0aAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlbGF0aXZlQkJveChib29sIGluY2x1ZGVT
dHJva2UgPSB0cnVlKSBjb25zdDsKQEAgLTg5LDkgKzg5LDggQEAgcHVibGljOgogICAgICAgICBi
b29sIGNhbkhpdEZpbGw7ICAKICAgICB9OwogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgUGF0aCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCQm94
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCQm94KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRmxv
YXRQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAkocmV2aXNp
b24gMTYyMDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBLQ2Fu
dmFzRmlsdGVyRWZmZWN0ICpjcmVhdGVGaWx0ZXJFZmZlY3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RU
eXBlICZ0eXBlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIg
KmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlICZ0eXBlKSBjb25zdCA9
IDA7CiAKLSAgICB2aXJ0dWFsIFJlbmRlclBhdGggKmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEgKmFy
ZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUsIFNWR1N0eWxlZEVsZW1lbnQgKm5vZGUsIGNvbnN0IFBh
dGgmIHBhdGgpIGNvbnN0ID0gMDsKLQogcHJpdmF0ZToKICAgICBWZWN0b3I8S1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqPiBtX2NvbnRleHRTdGFjazsKIH07CkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwCShyZXZpc2lvbiAxNjIwMCkK
KysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgzLDE0ICsxODMsNiBAQCBLQ2FudmFzRmlsdGVyRWZmZWN0KiBLUmVu
ZGVyaW5nRGV2aWNlUXQ6CiAgICAgcmV0dXJuIDA7CiB9CiAKLS8vIGl0ZW0gY3JlYXRpb24KLVJl
bmRlclBhdGgqIEtSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlSXRlbShSZW5kZXJBcmVuYSogYXJl
bmEsIFJlbmRlclN0eWxlKiBzdHlsZSwgU1ZHU3R5bGVkRWxlbWVudCogbm9kZSwgY29uc3QgUGF0
aCYgcGF0aCkgY29uc3QKLXsKLSAgICBSZW5kZXJQYXRoKiBpdGVtID0gbmV3IChhcmVuYSkgUmVu
ZGVyUGF0aFF0KHN0eWxlLCBub2RlKTsKLSAgICBpdGVtLT5zZXRQYXRoKHBhdGgpOwotICAgIHJl
dHVybiBpdGVtOwotfQotCiBLUmVuZGVyaW5nRGV2aWNlKiByZW5kZXJpbmdEZXZpY2UoKQogewog
ICAgIHN0YXRpYyBLUmVuZGVyaW5nRGV2aWNlICpzaGFyZWRSZW5kZXJpbmdEZXZpY2UgPSBuZXcg
S1JlbmRlcmluZ0RldmljZVF0KCk7CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tS
ZW5kZXJpbmdEZXZpY2VRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
cXQvS1JlbmRlcmluZ0RldmljZVF0LmgJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaAkod29ya2luZyBjb3B5KQpAQCAtODAs
OSArODAsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBLQ2FudmFzUmVzb3VyY2UqIGNyZWF0ZVJl
c291cmNlKGNvbnN0IEtDUmVzb3VyY2VUeXBlJikgY29uc3Q7CiAgICAgdmlydHVhbCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXIqIGNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBl
JikgY29uc3Q7CiAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyRWZmZWN0KiBjcmVhdGVGaWx0ZXJF
ZmZlY3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlJikgY29uc3Q7Ci0KLSAgICAvLyBpdGVtIGNy
ZWF0aW9uCi0gICAgdmlydHVhbCBSZW5kZXJQYXRoKiBjcmVhdGVJdGVtKFJlbmRlckFyZW5hKiwg
UmVuZGVyU3R5bGUqLCBTVkdTdHlsZWRFbGVtZW50KiwgY29uc3QgUGF0aCYpIGNvbnN0OwogfTsK
IAogfQpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0LmNwcAko
cmV2aXNpb24gMTYyMDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoUXQuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXRo
LmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiS1JlbmRl
cmluZ1N0cm9rZVBhaW50ZXIuaCIKIApAQCAtMzEsMTcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIAotUmVuZGVyUGF0aFF0OjpSZW5kZXJQYXRoUXQoUmVuZGVyU3R5bGUqIHN0
eWxlLCBTVkdTdHlsZWRFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyUGF0aChzdHlsZSwgbm9k
ZSkKLXsKLX0KLQotdm9pZCBSZW5kZXJQYXRoUXQ6OmRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUGF0aCYpIGNvbnN0Ci17Ci0gICAg
cURlYnVnKCJSZW5kZXJQYXRoUXQ6OmRyYXdNYXJrZXJzSWZOZWVkZWQoKSBUT0RPISIpOwotfQot
Ci1ib29sIFJlbmRlclBhdGhRdDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpIGNvbnN0Citib29sIFJlbmRlclBhdGg6OnN0cm9rZUNv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKSBjb25z
dAogewogICAgIGlmIChwYXRoKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC04Myw3ICs3Myw3IEBAIHN0YXRpYyBRUGFpbnRlclBhdGggZ2V0UGF0aFN0cm9rZShjb25zdCAK
ICAgICByZXR1cm4gcy5jcmVhdGVTdHJva2UocGF0aCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJQ
YXRoUXQ6OnN0cm9rZUJCb3goKSBjb25zdAorRmxvYXRSZWN0IFJlbmRlclBhdGg6OnN0cm9rZUJC
b3goKSBjb25zdAogewogICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyIHN0cm9rZVBhaW50ZXIg
PSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50ZXIoc3R5bGUoKSwgdGhpcyk7CiAgICAg
UVBhaW50ZXJQYXRoIG91dGxpbmUgPSBnZXRQYXRoU3Ryb2tlKCoocGF0aCgpLnBsYXRmb3JtUGF0
aCgpKSwgc3Ryb2tlUGFpbnRlcik7CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1Jl
bmRlclBhdGhRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvUmVu
ZGVyUGF0aFF0LmgJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9x
dC9SZW5kZXJQYXRoUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWMu
c2VpZGVsQGtkZW1haWwubmV0PgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAg
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
LSovCi0KLSNpZm5kZWYgUmVuZGVyUGF0aFF0X0gKLSNkZWZpbmUgUmVuZGVyUGF0aFF0X0gKLQot
I2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBS
ZW5kZXJQYXRoUXQgOiBwdWJsaWMgUmVuZGVyUGF0aAotewotcHVibGljOgotICAgIFJlbmRlclBh
dGhRdChSZW5kZXJTdHlsZSosIFNWR1N0eWxlZEVsZW1lbnQqKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQkJveCgpIGNvbnN0OwotCi1wcm90
ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUGF0aCYpIGNvbnN0OwotfTsKLQotfQotCi0j
ZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9x
dWFydHovS0NhbnZhc0l0ZW1RdWFydHouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5oCShyZXZpc2lvbiAxNjIwMCkKKysrIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBLQ2Fu
dmFzSXRlbVF1YXJ0el9oCi0jZGVmaW5lIEtDYW52YXNJdGVtUXVhcnR6X2gKLQotI2ltcG9ydCAi
a2NhbnZhcy9SZW5kZXJQYXRoLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBLQ2FudmFzSXRlbVF1YXJ0eiA6IHB1YmxpYyBS
ZW5kZXJQYXRoIHsKLXB1YmxpYzoKLSAgICBLQ2FudmFzSXRlbVF1YXJ0eihSZW5kZXJTdHlsZSos
IFNWR1N0eWxlZEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5LQ2FudmFzSXRlbVF1YXJ0eigpIHsg
fQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgYm9vbCA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TWFya2Vy
c0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgm
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCQm94KCkgY29uc3Q7Ci19Owot
Ci19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZh
c0l0ZW1RdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFy
dHovS0NhbnZhc0l0ZW1RdWFydHoubW0JKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JU
Ci0jaW1wb3J0ICJLQ2FudmFzSXRlbVF1YXJ0ei5oIgogCiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgogCkBAIC00OSwxNDQgKzQ4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LQ2Fu
dmFzSXRlbVF1YXJ0ejo6S0NhbnZhc0l0ZW1RdWFydHooUmVuZGVyU3R5bGUgKnN0eWxlLCBTVkdT
dHlsZWRFbGVtZW50ICpub2RlKSA6IFJlbmRlclBhdGgoc3R5bGUsIG5vZGUpCi17Ci19Ci0KLXR5
cGVkZWYgZW51bSB7Ci0gICAgU3RhcnQsCi0gICAgTWlkLAotICAgIEVuZAotfSBNYXJrZXJUeXBl
OwotCi1zdHJ1Y3QgTWFya2VyRGF0YSB7Ci0gICAgQ0dQb2ludCBvcmlnaW47Ci0gICAgZG91Ymxl
IHN0cm9rZVdpZHRoOwotICAgIENHUG9pbnQgaW5zbG9wZVBvaW50c1syXTsKLSAgICBDR1BvaW50
IG91dHNsb3BlUG9pbnRzWzJdOwotICAgIE1hcmtlclR5cGUgdHlwZTsKLSAgICBLQ2FudmFzTWFy
a2VyICptYXJrZXI7Ci19OwotCi1zdHJ1Y3QgRHJhd01hcmtlcnNEYXRhIHsKLSAgICBEcmF3TWFy
a2Vyc0RhdGEoR3JhcGhpY3NDb250ZXh0KiwgS0NhbnZhc01hcmtlciogc3RhcnRNYXJrZXIsIEtD
YW52YXNNYXJrZXIqIG1pZE1hcmtlciwgZG91YmxlIHN0cm9rZVdpZHRoKTsKLSAgICBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQ7Ci0gICAgaW50IGVsZW1lbnRJbmRleDsKLSAgICBNYXJrZXJEYXRh
IHByZXZpb3VzTWFya2VyRGF0YTsKLSAgICBLQ2FudmFzTWFya2VyKiBtaWRNYXJrZXI7Ci19Owot
Ci1EcmF3TWFya2Vyc0RhdGE6OkRyYXdNYXJrZXJzRGF0YShHcmFwaGljc0NvbnRleHQqIGMsIEtD
YW52YXNNYXJrZXIgKnN0YXJ0LCBLQ2FudmFzTWFya2VyICptaWQsIGRvdWJsZSBzdHJva2VXaWR0
aCkKLSAgICA6IGNvbnRleHQoYykKLXsKLSAgICBlbGVtZW50SW5kZXggPSAwOwotICAgIG1pZE1h
cmtlciA9IG1pZDsKLSAgICAKLSAgICBwcmV2aW91c01hcmtlckRhdGEub3JpZ2luID0gQ0dQb2lu
dFplcm87Ci0gICAgcHJldmlvdXNNYXJrZXJEYXRhLnN0cm9rZVdpZHRoID0gc3Ryb2tlV2lkdGg7
Ci0gICAgcHJldmlvdXNNYXJrZXJEYXRhLm1hcmtlciA9IHN0YXJ0OwotICAgIHByZXZpb3VzTWFy
a2VyRGF0YS50eXBlID0gU3RhcnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdNYXJrZXJXaXRoRGF0
YShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE1hcmtlckRhdGEgJmRhdGEpCi17Ci0gICAgaWYg
KCFkYXRhLm1hcmtlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENHUG9pbnQgaW5zbG9w
ZUNoYW5nZSA9IENHUG9pbnRTdWJ0cmFjdFBvaW50cyhkYXRhLmluc2xvcGVQb2ludHNbMV0sIGRh
dGEuaW5zbG9wZVBvaW50c1swXSk7Ci0gICAgQ0dQb2ludCBvdXRzbG9wZUNoYW5nZSA9IENHUG9p
bnRTdWJ0cmFjdFBvaW50cyhkYXRhLm91dHNsb3BlUG9pbnRzWzFdLCBkYXRhLm91dHNsb3BlUG9p
bnRzWzBdKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRlZzJyYWQgPSBNX1BJLzE4
MC4wOwotICAgIGRvdWJsZSBpbnNsb3BlID0gYXRhbjIoaW5zbG9wZUNoYW5nZS55LCBpbnNsb3Bl
Q2hhbmdlLngpIC8gZGVnMnJhZDsKLSAgICBkb3VibGUgb3V0c2xvcGUgPSBhdGFuMihvdXRzbG9w
ZUNoYW5nZS55LCBvdXRzbG9wZUNoYW5nZS54KSAvIGRlZzJyYWQ7Ci0gICAgCi0gICAgZG91Ymxl
IGFuZ2xlOwotICAgIGlmIChkYXRhLnR5cGUgPT0gU3RhcnQpCi0gICAgICAgIGFuZ2xlID0gb3V0
c2xvcGU7Ci0gICAgZWxzZSBpZiAoZGF0YS50eXBlID09IE1pZCkKLSAgICAgICAgYW5nbGUgPSAo
aW5zbG9wZSArIG91dHNsb3BlKSAvIDI7Ci0gICAgZWxzZSAvLyAoZGF0YS50eXBlID09IEVuZCkK
LSAgICAgICAgYW5nbGUgPSBpbnNsb3BlOwotICAgIAotICAgIGRhdGEubWFya2VyLT5kcmF3KGNv
bnRleHQsIEZsb2F0UmVjdCgpLCBkYXRhLm9yaWdpbi54LCBkYXRhLm9yaWdpbi55LCBkYXRhLnN0
cm9rZVdpZHRoLCBhbmdsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVNYXJrZXJE
YXRhRm9yRWxlbWVudChNYXJrZXJEYXRhICZwcmV2aW91c01hcmtlckRhdGEsIGNvbnN0IENHUGF0
aEVsZW1lbnQgKmVsZW1lbnQpCi17Ci0gICAgQ0dQb2ludCAqcG9pbnRzID0gZWxlbWVudC0+cG9p
bnRzOwotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgewotICAgIGNhc2Uga0NHUGF0
aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgotICAgICAgICAvLyBUT0RPCi0gICAgICAgIHBy
ZXZpb3VzTWFya2VyRGF0YS5vcmlnaW4gPSBwb2ludHNbMV07Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Uga0NHUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ6Ci0gICAgICAgIHByZXZpb3VzTWFy
a2VyRGF0YS5pbnNsb3BlUG9pbnRzWzBdID0gcG9pbnRzWzFdOwotICAgICAgICBwcmV2aW91c01h
cmtlckRhdGEuaW5zbG9wZVBvaW50c1sxXSA9IHBvaW50c1syXTsKLSAgICAgICAgcHJldmlvdXNN
YXJrZXJEYXRhLm9yaWdpbiA9IHBvaW50c1syXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLmluc2xvcGVQb2ludHNbMF0gPSBwcmV2aW91
c01hcmtlckRhdGEub3JpZ2luOwotICAgICAgICBwcmV2aW91c01hcmtlckRhdGEuaW5zbG9wZVBv
aW50c1sxXSA9IHBvaW50c1swXTsKLSAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLm9yaWdpbiA9
IHBvaW50c1swXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBkcmF3
U3RhcnRBbmRNaWRNYXJrZXJzKHZvaWQgKmluZm8sIGNvbnN0IENHUGF0aEVsZW1lbnQgKmVsZW1l
bnQpCi17Ci0gICAgRHJhd01hcmtlcnNEYXRhICZkYXRhID0gKihEcmF3TWFya2Vyc0RhdGEgKilp
bmZvOwotCi0gICAgaW50IGVsZW1lbnRJbmRleCA9IGRhdGEuZWxlbWVudEluZGV4OwotICAgIE1h
cmtlckRhdGEgJnByZXZpb3VzTWFya2VyRGF0YSA9IGRhdGEucHJldmlvdXNNYXJrZXJEYXRhOwot
Ci0gICAgQ0dQb2ludCAqcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwotCi0gICAgLy8gRmlyc3Qg
dXBkYXRlIHRoZSBvdXRzbG9wZSBmb3IgdGhlIHByZXZpb3VzIGVsZW1lbnQKLSAgICBwcmV2aW91
c01hcmtlckRhdGEub3V0c2xvcGVQb2ludHNbMF0gPSBwcmV2aW91c01hcmtlckRhdGEub3JpZ2lu
OwotICAgIHByZXZpb3VzTWFya2VyRGF0YS5vdXRzbG9wZVBvaW50c1sxXSA9IHBvaW50c1swXTsK
LQotICAgIC8vIERyYXcgdGhlIG1hcmtlciBmb3IgdGhlIHByZXZpb3VzIGVsZW1lbnQKLSAgICBp
ZiAoZWxlbWVudEluZGV4ICE9IDApCi0gICAgICAgIGRyYXdNYXJrZXJXaXRoRGF0YShkYXRhLmNv
bnRleHQsIHByZXZpb3VzTWFya2VyRGF0YSk7Ci0KLSAgICAvLyBVcGRhdGUgb3VyIG1hcmtlciBk
YXRhIGZvciB0aGlzIGVsZW1lbnQKLSAgICB1cGRhdGVNYXJrZXJEYXRhRm9yRWxlbWVudChwcmV2
aW91c01hcmtlckRhdGEsIGVsZW1lbnQpOwotCi0gICAgaWYgKGVsZW1lbnRJbmRleCA9PSAxKSB7
Ci0gICAgICAgIC8vIEFmdGVyIGRyYXdpbmcgdGhlIHN0YXJ0IG1hcmtlciwgc3dpdGNoIHRvIGRy
YXdpbmcgbWlkIG1hcmtlcnMKLSAgICAgICAgcHJldmlvdXNNYXJrZXJEYXRhLm1hcmtlciA9IGRh
dGEubWlkTWFya2VyOwotICAgICAgICBwcmV2aW91c01hcmtlckRhdGEudHlwZSA9IE1pZDsKLSAg
ICB9Ci0KLSAgICBkYXRhLmVsZW1lbnRJbmRleCsrOwotfQotCi12b2lkIEtDYW52YXNJdGVtUXVh
cnR6OjpkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBQYXRoJiBwYXRoKSBjb25zdAotewotICAgIERvY3VtZW50
ICpkb2MgPSBkb2N1bWVudCgpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlICpzdmdTdHlsZSA9
IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0KLSAgICBLQ2FudmFzTWFya2VyICpzdGFydE1hcmtlciA9
IGdldE1hcmtlckJ5SWQoZG9jLCBzdmdTdHlsZS0+c3RhcnRNYXJrZXIoKS5taWQoMSkpOwotICAg
IEtDYW52YXNNYXJrZXIgKm1pZE1hcmtlciA9IGdldE1hcmtlckJ5SWQoZG9jLCBzdmdTdHlsZS0+
bWlkTWFya2VyKCkubWlkKDEpKTsKLSAgICBLQ2FudmFzTWFya2VyICplbmRNYXJrZXIgPSBnZXRN
YXJrZXJCeUlkKGRvYywgc3ZnU3R5bGUtPmVuZE1hcmtlcigpLm1pZCgxKSk7Ci0gICAgCi0gICAg
aWYgKCFzdGFydE1hcmtlciAmJiAhbWlkTWFya2VyICYmICFlbmRNYXJrZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IEtTVkdQYWludGVyRmFjdG9yeTo6Y3Nz
UHJpbWl0aXZlVG9MZW5ndGgodGhpcywgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgo
KSwgMS4wKTsKLQotICAgIERyYXdNYXJrZXJzRGF0YSBkYXRhKGNvbnRleHQsIHN0YXJ0TWFya2Vy
LCBtaWRNYXJrZXIsIHN0cm9rZVdpZHRoKTsKLQotICAgIENHUGF0aFJlZiBjZ1BhdGggPSBwYXRo
LnBsYXRmb3JtUGF0aCgpOwotICAgIENHUGF0aEFwcGx5KGNnUGF0aCwgJmRhdGEsIGRyYXdTdGFy
dEFuZE1pZE1hcmtlcnMpOwotCi0gICAgZGF0YS5wcmV2aW91c01hcmtlckRhdGEubWFya2VyID0g
ZW5kTWFya2VyOwotICAgIGRhdGEucHJldmlvdXNNYXJrZXJEYXRhLnR5cGUgPSBFbmQ7Ci0gICAg
ZHJhd01hcmtlcldpdGhEYXRhKGNvbnRleHQsIGRhdGEucHJldmlvdXNNYXJrZXJEYXRhKTsKLX0K
LQotRmxvYXRSZWN0IEtDYW52YXNJdGVtUXVhcnR6OjpzdHJva2VCQm94KCkgY29uc3QKK0Zsb2F0
UmVjdCBSZW5kZXJQYXRoOjpzdHJva2VCQm94KCkgY29uc3QKIHsKICAgICBpZiAoS1NWR1BhaW50
ZXJGYWN0b3J5Ojppc1N0cm9rZWQoc3R5bGUoKSkpIHsKICAgICAgICAgS1JlbmRlcmluZ1N0cm9r
ZVBhaW50ZXIgc3Ryb2tlUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRl
cihzdHlsZSgpLCB0aGlzKTsKQEAgLTE5Nyw3ICs1OSw3IEBAIEZsb2F0UmVjdCBLQ2FudmFzSXRl
bVF1YXJ0ejo6c3Ryb2tlQkJveCgKIH0KIAogCi1ib29sIEtDYW52YXNJdGVtUXVhcnR6OjpzdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkg
Y29uc3QKK2Jvb2wgUmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpIGNvbnN0CiB7CiAgICAgaWYgKHBhdGgoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgJKHJldmlzaW9u
IDE2MjAwKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0ei5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw5ICs4Myw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIEtSZW5kZXJpbmdQYWludFNlcnZlciAqY3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQ
YWludFNlcnZlclR5cGUgJnR5cGUpIGNvbnN0OwogICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVm
ZmVjdCAqY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSAmdHlwZSkg
Y29uc3Q7CiAgICAgCi0gICAgLy8gaXRlbSBjcmVhdGlvbgotICAgIHZpcnR1YWwgUmVuZGVyUGF0
aCAqY3JlYXRlSXRlbShSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSwgU1ZH
U3R5bGVkRWxlbWVudCAqbm9kZSwgY29uc3QgUGF0aCYgcGF0aCkgY29uc3Q7Ci0KICAgICAvLyBm
aWx0ZXJzIChtb3N0bHkgZGVidWdnaW5nKQogICAgIHN0YXRpYyBib29sIGZpbHRlcnNFbmFibGVk
KCk7CiAgICAgc3RhdGljIHZvaWQgc2V0RmlsdGVyc0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKSW5k
ZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHou
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5tbQkocmV2aXNpb24gMTYyMDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw2IEBACiAjaW1wb3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbXBvcnQgIktDYW52YXNGaWx0ZXJRdWFydHouaCIKLSNpbXBvcnQg
IktDYW52YXNJdGVtUXVhcnR6LmgiCiAjaW1wb3J0ICJLQ2FudmFzTWFza2VyUXVhcnR6LmgiCiAj
aW1wb3J0ICJLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nRmls
bFBhaW50ZXIuaCIKQEAgLTE4NCwxMyArMTgzLDYgQEAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpL
UmVuZGVyaW5nRGV2aWNlUQogICAgIHJldHVybiBuZXdTZXJ2ZXI7CiB9CiAKLVJlbmRlclBhdGgg
KktSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEgKmFyZW5hLCBS
ZW5kZXJTdHlsZSAqc3R5bGUsIFNWR1N0eWxlZEVsZW1lbnQgKm5vZGUsIGNvbnN0IFBhdGgmIHBh
dGgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyUGF0aCAqaXRlbSA9IG5ldyAoYXJlbmEpIEtDYW52YXNJ
dGVtUXVhcnR6KHN0eWxlLCBub2RlKTsKLSAgICBpdGVtLT5zZXRQYXRoKHBhdGgpOwotICAgIHJl
dHVybiBpdGVtOwotfQotCiBLQ2FudmFzUmVzb3VyY2UgKktSZW5kZXJpbmdEZXZpY2VRdWFydHo6
OmNyZWF0ZVJlc291cmNlKGNvbnN0IEtDUmVzb3VyY2VUeXBlICZ0eXBlKSBjb25zdAogewogICAg
IHN3aXRjaCAodHlwZSkgewpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovUXVh
cnR6U3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6
L1F1YXJ0elN1cHBvcnQuaAkocmV2aXNpb24gMTYyMDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDExICs3OSw2
IEBAIHN0YXRpYyBpbmxpbmUgQ0dMaW5lSm9pbiBDR0xpbmVKb2luRnJvbUsKICAgICByZXR1cm4g
a0NHTGluZUpvaW5NaXRlcjsKIH0KIAotc3RhdGljIGlubGluZSBDR1BvaW50IENHUG9pbnRTdWJ0
cmFjdFBvaW50cyhDR1BvaW50IGEsIENHUG9pbnQgYikKLXsKLSAgICByZXR1cm4gQ0dQb2ludE1h
a2UoYS54IC0gYi54LCBhLnkgLSBiLnkpOwotfQotCiB9CiAKICNlbmRpZiAvLyBTVkdfU1VQUE9S
VApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMDApCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDYgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgImNzc2hlbHBlci5oIgog
I2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZh
cy9LQ2FudmFzQ3JlYXRvci5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdE
ZXZpY2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHQ2lyY2xlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Q2lyY2xlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDYgQEAKICNp
bmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGgu
aCIKIAotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KLQogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIFNWR0NpcmNsZUVsZW1lbnQ6OlNWR0NpcmNsZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKQEAgLTgyLDcgKzgwLDcgQEAg
UGF0aCBTVkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29ucwogICAgIGZsb2F0IF9jeCA9
IGN4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+YmFzZVZhbCgpLT52YWx1ZSgp
OwogICAgIGZsb2F0IF9yID0gcigpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAKLSAgICByZXR1cm4g
S0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlQ2lyY2xlKEZsb2F0UG9pbnQoX2N4LCBfY3kp
LCBfcik7CisgICAgcmV0dXJuIFBhdGg6OmNyZWF0ZUNpcmNsZShGbG9hdFBvaW50KF9jeCwgX2N5
KSwgX3IpOwogfQogCiBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdDaXJjbGVFbGVtZW50Ojpw
dXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMDAp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDggKzMxLDYgQEAKICNpbmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXND
cmVhdG9yLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHRWxsaXBzZUVsZW1lbnQ6OlNW
R0VsbGlwc2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpk
b2MpCkBAIC04OSw3ICs4Nyw3IEBAIFBhdGggU1ZHRWxsaXBzZUVsZW1lbnQ6OnRvUGF0aERhdGEo
KSBjb24KICAgICBmbG9hdCBfY3ggPSBjeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9jeSA9IGN5
KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKICAgICBmbG9hdCBfcnggPSByeCgpLT5iYXNlVmFsKCkt
PnZhbHVlKCksIF9yeSA9IHJ5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKIAotICAgIHJldHVybiBL
Q2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVFbGxpcHNlKEZsb2F0UG9pbnQoX2N4LCBfY3kp
LCBfcngsIF9yeSk7CisgICAgcmV0dXJuIFBhdGg6OmNyZWF0ZUVsbGlwc2UoRmxvYXRQb2ludChf
Y3gsIF9jeSksIF9yeCwgX3J5KTsKIH0KIAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHRWxs
aXBzZUVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQg
KmNvbnRleHQpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjIwMCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlNWR0FuaW1hdGVk
U3RyaW5nLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
LSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9L
Q2FudmFzSW1hZ2UuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNl
Lmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0ZpbGxQYWludGVyLmg+Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIwMCkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NiBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHR0VsZW1lbnQuaCIKIAotI2lu
Y2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL1JlbmRl
clNWR0NvbnRhaW5lci5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZp
Y2UuaD4KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjIwMCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAj
aW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFp
bmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogI2luY2x1ZGUgPGtj
YW52YXMvS0NhbnZhc0ltYWdlLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMDApCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDggKzMxLDYgQEAKICNpbmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkTGVuZ3RoLmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+Ci0K
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBTVkdMaW5lRWxlbWVudDo6U1ZHTGluZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKQEAgLTg5LDcg
Kzg3LDcgQEAgUGF0aCBTVkdMaW5lRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CiAgICAgZmxv
YXQgX3gxID0geDEoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTEgPSB5MSgpLT5iYXNlVmFsKCkt
PnZhbHVlKCk7CiAgICAgZmxvYXQgX3gyID0geDIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTIg
PSB5MigpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAKLSAgICByZXR1cm4gS0NhbnZhc0NyZWF0b3I6
OnNlbGYoKS0+Y3JlYXRlTGluZShGbG9hdFBvaW50KF94MSwgX3kxKSwgRmxvYXRQb2ludChfeDIs
IF95MikpOworICAgIHJldHVybiBQYXRoOjpjcmVhdGVMaW5lKEZsb2F0UG9pbnQoX3gxLCBfeTEp
LCBGbG9hdFBvaW50KF94MiwgX3kyKSk7CiB9CiAKIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNW
R0xpbmVFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50
ICpjb250ZXh0KQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50
LmgiCiAjaW5jbHVkZSAia3N2Zy5oIgogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFp
bmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogI2luY2x1ZGUgPGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMDApCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgi
CiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaCIKIAotI2luY2x1
ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9L
UmVuZGVyaW5nRGV2aWNlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRlICJLQ2FudmFz
Q3JlYXRvci5oIgogI2luY2x1ZGUgIktDYW52YXNJbWFnZS5oIgogI2luY2x1ZGUgIktDYW52YXNS
ZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKSW5kZXg6IFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjAwKQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCiAjaW5jbHVkZSAiU1ZH
UG9seWdvbkVsZW1lbnQuaCIKIAotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4K
ICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNjIwMCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlsaW5l
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJT
VkdQb2ludExpc3QuaCIKICNpbmNsdWRlICJTVkdQb2x5bGluZUVsZW1lbnQuaCIKIAotI2luY2x1
ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9L
UmVuZGVyaW5nRGV2aWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMDApCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDYgQEAKICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAjaW5j
bHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0ZpbGxQYWludGVyLmg+CiAjaW5jbHVkZSA8
a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuaD4KLSNpbmNsdWRlIDxr
Y2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTEx
LDEwICsxMTAsMTAgQEAgUGF0aCBTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CiAg
ICAgewogICAgICAgICBmbG9hdCBfcnggPSBoYXNSeCA/IHJ4KCktPmJhc2VWYWwoKS0+dmFsdWUo
KSA6IHJ5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKICAgICAgICAgZmxvYXQgX3J5ID0gaGFzUnkg
PyByeSgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiByeCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0g
ICAgICAgIHJldHVybiBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVSb3VuZGVkUmVjdGFu
Z2xlKEZsb2F0UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCksIEZsb2F0U2l6ZShfcngsIF9y
eSkpOworICAgICAgICByZXR1cm4gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShGbG9hdFJl
Y3QoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpLCBGbG9hdFNpemUoX3J4LCBfcnkpKTsKICAgICB9
CiAKLSAgICByZXR1cm4gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlUmVjdGFuZ2xlKEZs
b2F0UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkpOworICAgIHJldHVybiBQYXRoOjpjcmVh
dGVSZWN0YW5nbGUoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSk7CiB9CiAKIGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR1JlY3RFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4
dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQpJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
U1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
U1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRl
ICJTVkdab29tRXZlbnQuaCIKICNpbmNsdWRlICJrc3ZnLmgiCiAjaW5jbHVkZSA8a2NhbnZhcy9S
ZW5kZXJTVkdDb250YWluZXIuaD4KLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+
CiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUg
IlRleHRTdHJlYW0uaCIKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkF0dHIu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIktDYW52YXNDcmVhdG9yLmgiCiAj
aW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0Rl
dmljZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC03MSw3ICs3MCwxMCBAQCBS
ZW5kZXJPYmplY3QqIFNWR1N0eWxlZEVsZW1lbnQ6OmNyZWF0ZVJlCiAgICAgUGF0aCBwYXRoRGF0
YSA9IHRvUGF0aERhdGEoKTsKICAgICBpZiAocGF0aERhdGEuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gcmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUl0ZW0oYXJlbmEs
IHN0eWxlLCB0aGlzLCBwYXRoRGF0YSk7CisKKyAgICBSZW5kZXJQYXRoICppdGVtID0gbmV3IChh
cmVuYSkgUmVuZGVyUGF0aChzdHlsZSwgdGhpcyk7CisgICAgaXRlbS0+c2V0UGF0aChwYXRoRGF0
YSk7CisgICAgcmV0dXJuIGl0ZW07CiB9CiAKIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYg
QEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIkF0dHIuaCIKIAotI2luY2x1ZGUgPGtj
YW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRh
aW5lci5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIApJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMDApCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNW
R1RTcGFuRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5o
PgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdV
c2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYyMDApCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIlNWR1N5
bWJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJrc3ZnLmgiCiAjaW5jbHVkZSA8a2NhbnZhcy9SZW5k
ZXJTVkdDb250YWluZXIuaD4KLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAj
aW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5oCShyZXZpc2lvbiAxNjIwMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNSArMzgsMzEgQEAgdHlwZWRl
ZiB2b2lkIFBsYXRmb3JtUGF0aDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3Mg
QWZmaW5lVHJhbnNmb3JtOworICAgIGNsYXNzIEZsb2F0UG9pbnQ7CisgICAgY2xhc3MgRmxvYXRT
aXplOworICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBTdHJpbmc7CisKICAgICBlbnVt
IFdpbmRSdWxlIHsKICAgICAgICAgUlVMRV9OT05aRVJPID0gMCwKICAgICAgICAgUlVMRV9FVkVO
T0REID0gMQogICAgIH07CiAKLSAgICBjbGFzcyBGbG9hdFBvaW50OwotICAgIGNsYXNzIEZsb2F0
U2l6ZTsKLSAgICBjbGFzcyBGbG9hdFJlY3Q7Ci0gICAgY2xhc3MgU3RyaW5nOworICAgIGVudW0g
UGF0aEVsZW1lbnRUeXBlIHsKKyAgICAgICAgUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludCwKKyAgICAg
ICAgUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludCwKKyAgICAgICAgUGF0aEVsZW1lbnRBZGRRdWFk
Q3VydmVUb1BvaW50LAorICAgICAgICBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludCwKKyAgICAg
ICAgUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGgKKyAgICB9OworCisgICAgc3RydWN0IFBhdGhFbGVt
ZW50IHsKKyAgICAgICAgUGF0aEVsZW1lbnRUeXBlIHR5cGU7CisgICAgICAgIEZsb2F0UG9pbnQq
IHBvaW50czsKKyAgICB9OworCisgICAgdHlwZWRlZiB2b2lkICgqUGF0aEFwcGxpZXJGdW5jdGlv
bikgKCB2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCk7CiAKICAgICBjbGFz
cyBQYXRoIHsKICAgICBwdWJsaWM6CkBAIC04Miw2ICs5OCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgUGxhdGZvcm1QYXRoKiBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVy
biBtX3BhdGg7IH0KIAorICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVSb3VuZGVkUmVjdGFuZ2xl
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSk7CisgICAg
ICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAg
ICAgc3RhdGljIFBhdGggY3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZs
b2F0IHJ4LCBmbG9hdCByeSk7CisgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUNpcmNsZShjb25z
dCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHIpOworICAgICAgICBzdGF0aWMgUGF0aCBjcmVh
dGVMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICAgICAg
dm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uKSBjb25zdDsKKyAgICAg
ICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisKICAgICBwcml2YXRl
OgogICAgICAgICBQbGF0Zm9ybVBhdGgqIG1fcGF0aDsKICAgICAgICAgV2luZFJ1bGUgbV9ydWxl
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jZy9QYXRoQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vY2cvUGF0aENHLmNwcAkocmV2aXNpb24gMTYyMDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2NnL1BhdGhDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
IAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEzMywx
MiArMTM0LDEyIEBAIGJvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0CiAgICAgcmV0dXJuIENHUGF0
aElzRW1wdHkobV9wYXRoKTsKICB9CiAKLXZvaWQgQ0dQYXRoVG9DRlN0cmluZ0FwcGxpZXJGdW5j
dGlvbih2b2lkICppbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICplbGVtZW50KQordm9pZCBDR1Bh
dGhUb0NGU3RyaW5nQXBwbGllckZ1bmN0aW9uKHZvaWQqIGluZm8sIGNvbnN0IENHUGF0aEVsZW1l
bnQgKmVsZW1lbnQpCiB7CiAgICAgQ0ZNdXRhYmxlU3RyaW5nUmVmIHN0cmluZyA9IChDRk11dGFi
bGVTdHJpbmdSZWYpaW5mbzsKICAgICBDRlN0cmluZ1JlZiB0eXBlU3RyaW5nID0gQ0ZTVFIoIiIp
OwotICAgIENHUG9pbnQgKnBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKLSAgICBzd2l0Y2goZWxl
bWVudC0+dHlwZSkgeworICAgIENHUG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKKyAg
ICBzd2l0Y2ggKGVsZW1lbnQtPnR5cGUpIHsKICAgICBjYXNlIGtDR1BhdGhFbGVtZW50TW92ZVRv
UG9pbnQ6CiAgICAgICAgIENGU3RyaW5nQXBwZW5kRm9ybWF0KHN0cmluZywgMCwgQ0ZTVFIoIk0l
LjJmLCUuMmYiKSwgcG9pbnRzWzBdLngsIHBvaW50c1swXS55KTsKICAgICAgICAgYnJlYWs7CkBA
IC0xODUsNiArMTg2LDU2IEBAIFN0cmluZyBQYXRoOjpkZWJ1Z1N0cmluZygpIGNvbnN0CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAorc3RydWN0IFBhdGhBcHBsaWVySW5mbyB7CisgICAgdm9pZCog
aW5mbzsKKyAgICBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uOworfTsKKwordm9pZCBDR1Bh
dGhBcHBsaWVyVG9QYXRoQXBwbGllcih2b2lkICppbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICpl
bGVtZW50KQoreworICAgIFBhdGhBcHBsaWVySW5mbyogcGluZm8gPSAoUGF0aEFwcGxpZXJJbmZv
KilpbmZvOworICAgIEZsb2F0UG9pbnQgcG9pbnRzWzJdOworICAgIFBhdGhFbGVtZW50IHBlbGVt
ZW50OworICAgIHBlbGVtZW50LnR5cGUgPSAoUGF0aEVsZW1lbnRUeXBlKWVsZW1lbnQtPnR5cGU7
CisgICAgcGVsZW1lbnQucG9pbnRzID0gcG9pbnRzOworICAgIENHUG9pbnQqIGNnUG9pbnRzID0g
ZWxlbWVudC0+cG9pbnRzOworICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgeworICAgIGNhc2Ug
a0NHUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDoKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkTGlu
ZVRvUG9pbnQ6CisgICAgICAgIHBvaW50c1swXSA9IGNnUG9pbnRzWzBdOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKKyAgICAgICAg
cG9pbnRzWzBdID0gY2dQb2ludHNbMF07CisgICAgICAgIHBvaW50c1sxXSA9IGNnUG9pbnRzWzFd
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50
OgorICAgICAgICBwb2ludHNbMF0gPSBjZ1BvaW50c1swXTsKKyAgICAgICAgcG9pbnRzWzFdID0g
Y2dQb2ludHNbMV07CisgICAgICAgIHBvaW50c1syXSA9IGNnUG9pbnRzWzJdOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcGluZm8tPmZ1bmN0aW9uKHBpbmZvLT5pbmZvLCAmcGVsZW1lbnQpOwor
fQorCit2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVu
Y3Rpb24pIGNvbnN0Cit7CisgICAgUGF0aEFwcGxpZXJJbmZvIHBpbmZvOworICAgIHBpbmZvLmlu
Zm8gPSBpbmZvOworICAgIHBpbmZvLmZ1bmN0aW9uID0gZnVuY3Rpb247CisgICAgQ0dQYXRoQXBw
bHkobV9wYXRoLCAmcGluZm8sIENHUGF0aEFwcGxpZXJUb1BhdGhBcHBsaWVyKTsKK30KKwordm9p
ZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7Cisg
ICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOworICAgIENH
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybUNHID0gdHJhbnNmb3JtOworICAgIENHUGF0aEFkZFBh
dGgocGF0aCwgJnRyYW5zZm9ybUNHLCBtX3BhdGgpOworICAgIENHUGF0aFJlbGVhc2UobV9wYXRo
KTsKKyAgICBtX3BhdGggPSBwYXRoOworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShDRykK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUGF0aFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3F0L1BhdGhRdC5jcHAJKHJldmlzaW9uIDE2MjAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9xdC9QYXRoUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNiArMjE5LDQ4IEBA
IFN0cmluZyBQYXRoOjpkZWJ1Z1N0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIHJldDsKIH0KIAor
dm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9u
KSBjb25zdAoreworICAgIFBhdGhFbGVtZW50IHBlbGVtZW50OworICAgIEZsb2F0UG9pbnQgcG9p
bnRzWzJdOworICAgIHBlbGVtZW50LnBvaW50cyA9IHBvaW50czsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1fcGF0aC0+ZWxlbWVudENvdW50KCk7ICsraSkgeworICAgICAgICBjb25zdCBRUGFp
bnRlclBhdGg6OkVsZW1lbnQmIGN1ciA9IG1fcGF0aC0+ZWxlbWVudEF0KGkpOworCisgICAgICAg
IHN3aXRjaCAoY3VyLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgUVBhaW50ZXJQYXRoOjpNb3Zl
VG9FbGVtZW50OgorICAgICAgICAgICAgICAgIHBlbGVtZW50LnR5cGUgPSBQYXRoRWxlbWVudE1v
dmVUb1BvaW50OworICAgICAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1swXSA9IGN1cjsKKyAg
ICAgICAgICAgICAgICBmdW5jdGlvbihpbmZvLCAmcGVsZW1lbnQpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBRUGFpbnRlclBhdGg6OkxpbmVUb0VsZW1lbnQ6Cisg
ICAgICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ7
CisgICAgICAgICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzBdID0gY3VyOworICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGluZm8sICZwZWxlbWVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFFQYWludGVyUGF0aDo6Q3VydmVUb0VsZW1lbnQ6CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgUVBhaW50ZXJQYXRoOjpFbGVtZW50JiBjMSA9IG1f
cGF0aC0+ZWxlbWVudEF0KGkgKyAxKTsKKyAgICAgICAgICAgICAgICBjb25zdCBRUGFpbnRlclBh
dGg6OkVsZW1lbnQmIGMyID0gbV9wYXRoLT5lbGVtZW50QXQoaSArIDIpOworCisgICAgICAgICAg
ICAgICAgUV9BU1NFUlQoYzEudHlwZSA9PSBRUGFpbnRlclBhdGg6OkN1cnZlVG9EYXRhRWxlbWVu
dCk7CisgICAgICAgICAgICAgICAgUV9BU1NFUlQoYzIudHlwZSA9PSBRUGFpbnRlclBhdGg6OkN1
cnZlVG9EYXRhRWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBwZWxlbWVudC50eXBlID0gUGF0
aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ7CisgICAgICAgICAgICAgICAgcGVsZW1lbnQucG9pbnRz
WzBdID0gY3VyOworICAgICAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1sxXSA9IGMxOworICAg
ICAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1syXSA9IGMyOworICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKGluZm8sICZwZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBpICs9IDI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFFQYWlu
dGVyUGF0aDo6Q3VydmVUb0RhdGFFbGVtZW50OgorICAgICAgICAgICAgICAgIFFfQVNTRVJUKGZh
bHNlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldAo=
</data>
<flag name="review"
          id="3308"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>