<?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>10383</bug_id>
          
          <creation_ts>2006-08-13 21:50:32 -0700</creation_ts>
          <short_desc>KRenderingDeviceContextQuartz must DIE</short_desc>
          <delta_ts>2006-12-01 13:54:21 -0800</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>SVGHitList</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>8824</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52508</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-13 21:50:32 -0700</bug_when>
    <thetext>KRenderingGraphicsContextQuartz must DIE

It pains me every time I read this code:

    KRenderingDeviceContext* context = device-&gt;currentContext();
    bool shouldPopContext = false;
    if (context)
        paintInfo.p-&gt;save();
    else {
        // Need to set up KCanvas rendering if it hasn&apos;t already been done.
        context = paintInfo.p-&gt;createRenderingDeviceContext();
        device-&gt;pushContext(context);
        shouldPopContext = true;
    }

.
.
.

    // restore drawing state
    if (!shouldPopContext)
        paintInfo.p-&gt;restore();
    else {
        device-&gt;popContext();
        delete context;
    }

This is totally unnecessary.  GraphicsContext should be able to do all of this for us.  GraphicsContext needs to be extended and KRenderingDeviceContextQuartz (and the associated KRenderingDevice containing a stack of these buggers) must die!

We can&apos;t ship SVG with this monstrosity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52509</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-13 21:52:10 -0700</bug_when>
    <thetext>I believe our current KRenderingDeviceContext usage is actually causing a host of bugs, including our printing problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56700</commentid>
    <comment_count>2</comment_count>
      <attachid>10818</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-27 23:47:06 -0700</bug_when>
    <thetext>Created attachment 10818
A half finished patch to remove KRenderingDevice*

I&apos;m tired.  going to bed.  Eventually I&apos;ll find time to get back to this, or someone else will.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56866</commentid>
    <comment_count>3</comment_count>
      <attachid>10853</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-10-01 02:30:23 -0700</bug_when>
    <thetext>Created attachment 10853
updated (but still broken) patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56868</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-10-01 02:52:14 -0700</bug_when>
    <thetext>Things missing from this patch include:
1.  Need a KCanvasCreator to make all of these resources (since we still want to support certain platforms not implementing all of the resources).  Otherwise we&apos;d just new them where they&apos;re needed.
2.  Need to augment GraphicsContext to have addPath and clearPath (or beginPath) functions.
3.  Need to fix a few &quot;context managment&quot; places, namely: applyFilter, prepareFilter, as well as the context swapping done in Gradient text stroke drawing.
I think that&apos;s it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53412</commentid>
    <comment_count>5</comment_count>
      <attachid>11043</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-10-12 02:50:45 -0700</bug_when>
    <thetext>Created attachment 11043
another completely independant (and unfinished) attempt at this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44162</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-11-27 08:32:11 -0800</bug_when>
    <thetext>Just in case anyone is looking at this bug, I&apos;m currently
working on a new version of this patch, which will remove
whole kcanvas/ directory &amp; KRenderingDevice* classes.

Attaching patch in a few hours...
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43778</commentid>
    <comment_count>7</comment_count>
      <attachid>11681</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-11-30 09:34:14 -0800</bug_when>
    <thetext>Created attachment 11681
Initial complete patch for Cg &amp; Qt

It may still have some flaky places, but it passes layout &amp; pixel tests w/o new regressions and even fix some (see ChangeLog)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43784</commentid>
    <comment_count>8</comment_count>
      <attachid>11681</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-11-30 10:35:19 -0800</bug_when>
    <thetext>Comment on attachment 11681
Initial complete patch for Cg &amp; Qt

Looks fine.

CgSupport should really be CGSupport

There are a couple old spacing issues, on lines which were touched (but the spacing not corrected).

I really really really really think that Image::createGraphicsContext() needs to be added ASAP.  That&apos;s the *correct* way to do masking and patterns etc.   The current solution is a bad hack.  I would encourage you to add Image::createGraphicsContext either before this patch lands or right after.

This is a huge change for someone so out-of-touch with the project to approve alone.  I&apos;ve reviewed the code for sanity, but I think you should have an Apple reviewer rubber stamp that this large of a change is OK to land given whatever the current project state is.

(You and I had some additional discussion over IRC, and you said you had an updated patch.  I&apos;m going to r+ this one, but you should land the updated patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43796</commentid>
    <comment_count>9</comment_count>
      <attachid>11687</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-11-30 11:53:07 -0800</bug_when>
    <thetext>Created attachment 11687
Updated final patch

Incorporated Erics comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43797</commentid>
    <comment_count>10</comment_count>
      <attachid>11687</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-11-30 11:57:47 -0800</bug_when>
    <thetext>Comment on attachment 11687
Updated final patch

I skimmed through the updated patch.

WildFox agreed that he would work on the Image::createGraphicsContext() stuff next (or very soon).

Also, waiting to land until someone on the Safari team and approve that landing a large patch like this is OK right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43620</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-12-01 13:54:21 -0800</bug_when>
    <thetext>Landed in r17947.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10818</attachid>
            <date>2006-09-27 23:47:06 -0700</date>
            <delta_ts>2006-10-01 02:30:23 -0700</delta_ts>
            <desc>A half finished patch to remove KRenderingDevice*</desc>
            <filename>half.patch</filename>
            <type>text/plain</type>
            <size>101984</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NjA4KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkzLDcg
KzEzOTMsNiBAQAogCQlBODcxREZFMzBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFjZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFERkRG
MEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJSZXBsYWNlZC5oICovOyB9OwogCQlBODcxREZFNDBB
MTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcxREZFMDBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVy
V2lkZ2V0LmggKi87IH07CiAJCUE4NzFERkU1MEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRn
ZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3
MURGRTEwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlcldpZGdldC5jcHAgKi87IH07Ci0JCUE4OEFE
Mzg2MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjU0MDg5NzAxRjcwMEJBNTEx
NCAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCAqLzsgfTsKIAkJQTg4QUQzODcwOTUyNDg2RDAwMURE
MTk2IC8qIEtSZW5kZXJpbmdEZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QzBGQjU1MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2
aWNlLmggKi87IH07CiAJCUE4OEFEMzg4MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRmls
bFBhaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThDMEZCNTkwODk3MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAg
Ki87IH07CiAJCUE4OEFEMzg5MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRmlsbFBhaW50
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBG
QjVBMDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCAqLzsgfTsKQEAg
LTE0MzIsNyArMTQzMSw2IEBACiAJCUE4OEFEM0FEMDk1MjQ4NkQwMDFERDE5NiAvKiBLQ2FudmFz
SXRlbVF1YXJ0ei5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QzBGQjZDMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzSXRlbVF1YXJ0ei5tbSAqLzsg
fTsKIAkJQTg4QUQzQUUwOTUyNDg2RDAwMUREMTk2IC8qIEtDYW52YXNSZXNvdXJjZXNRdWFydHou
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjZE
MDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmggKi87IH07CiAJCUE4
OEFEM0FGMDk1MjQ4NkQwMDFERDE5NiAvKiBLQ2FudmFzUmVzb3VyY2VzUXVhcnR6Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNkUwODk3MDFG
ODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZXNRdWFydHoubW0gKi87IH07Ci0JCUE4OEFEM0Iw
MDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3MTA4OTcwMUY4MDBCQTUx
MTQgLyogS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oICovOyB9OwogCQlBODhBRDNCMTA5NTI0ODZF
MDAxREQxOTYgLyogS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjcyMDg5NzAxRjgwMEJBNTExNCAvKiBL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tICovOyB9OwogCQlBODhBRDNCMjA5NTI0ODZFMDAxREQx
OTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3MzA4OTcwMUY4MDBCQTUx
MTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoubW0gKi87IH07CiAJCUE4
OEFEM0IzMDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjc0MDg5
NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCAqLzsgfTsKQEAg
LTM5OTUsNyArMzk5Myw2IEBACiAJCUE4QzBGOEVCMDg5NzAxRjQwMEJBNTExNCAvKiBTVkdab29t
QW5kUGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHWm9vbUFuZFBhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRjhFQzA4OTcwMUY0MDBCQTUxMTQgLyog
U1ZHWm9vbUFuZFBhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR1pvb21BbmRQYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGOEVEMDg5NzAxRjQwMEJBNTExNCAvKiBr
c3ZnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
a3N2Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKLQkJQThDMEZCNTQwODk3MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBL
UmVuZGVyaW5nRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjU1MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVy
aW5nRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gS1JlbmRlcmluZ0RldmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQThDMEZCNTkwODk3MDFGNzAwQkE1MTE0IC8qIEtS
ZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRkI1
QTA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0ZpbGxQYWludGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1JlbmRlcmluZ0ZpbGxQYWlu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwpAQCAtNDAxMyw3ICs0MDEwLDYgQEAKIAkJQThDMEZCNkMwODk3MDFGODAwQkE1MTE0IC8q
IEtDYW52YXNJdGVtUXVhcnR6Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLQ2FudmFzSXRlbVF1YXJ0ei5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjZEMDg5
NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc1Jlc291cmNlc1F1YXJ0
ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJQThDMEZCNkUwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZXNRdWFydHou
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEtDYW52YXNSZXNvdXJjZXNRdWFydHoubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlBOEMwRkI3MTA4OTcwMUY4MDBCQTUxMTQg
LyogS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtSZW5kZXJpbmdEZXZpY2VRdWFydHouaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjcy
MDg5NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJQThDMEZCNzMwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50UXVhcnR6Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dFF1YXJ0ei5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUE4QzBGQjc0MDg5NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJRdWFydHouaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC02OTYwLDcgKzY5NTYsNiBA
QAogCQlBOEMwRkI1MzA4OTcwMUY3MDBCQTUxMTQgLyogZGV2aWNlICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBOEMwRkI1NDA4OTcwMUY3MDBCQTUxMTQg
LyogS1JlbmRlcmluZ0RldmljZS5jcHAgKi8sCiAJCQkJQThDMEZCNTUwODk3MDFGNzAwQkE1MTE0
IC8qIEtSZW5kZXJpbmdEZXZpY2UuaCAqLywKIAkJCQlBOEMwRkI1OTA4OTcwMUY3MDBCQTUxMTQg
LyogS1JlbmRlcmluZ0ZpbGxQYWludGVyLmNwcCAqLywKIAkJCQlBOEMwRkI1QTA4OTcwMUY3MDBC
QTUxMTQgLyogS1JlbmRlcmluZ0ZpbGxQYWludGVyLmggKi8sCkBAIC02OTg5LDcgKzY5ODQsNiBA
QAogCQkJCUE4MTY1NUQzMDk2QkJFQUMwMDYwMTA1OCAvKiBLQ2FudmFzTWFza2VyUXVhcnR6Lm1t
ICovLAogCQkJCUE4QzBGQjZEMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzUXVh
cnR6LmggKi8sCiAJCQkJQThDMEZCNkUwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJj
ZXNRdWFydHoubW0gKi8sCi0JCQkJQThDMEZCNzEwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJp
bmdEZXZpY2VRdWFydHouaCAqLywKIAkJCQlBOEMwRkI3MjA4OTcwMUY4MDBCQTUxMTQgLyogS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5tbSAqLywKIAkJCQlBOEMwRkI3MzA4OTcwMUY4MDBCQTUxMTQg
LyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoubW0gKi8sCiAJCQkJQThDMEZC
NzQwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oICovLApA
QCAtNzg2NCw3ICs3ODU4LDYgQEAKIAkJCQlBODhBRDNBODA5NTI0ODZEMDAxREQxOTYgLyogV0tT
cG90TGlnaHRGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEM0FBMDk1MjQ4NkQwMDFE
RDE5NiAvKiBLQ2FudmFzRmlsdGVyUXVhcnR6LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDNB
RTA5NTI0ODZEMDAxREQxOTYgLyogS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQTg4QUQzQjAwOTUyNDg2RTAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFy
dHouaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEM0IzMDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEM0I1MDk1
MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhB
RDNCQTA5NTI0ODZFMDAxREQxOTYgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTkwODcsNyArOTA4MCw2IEBACiAJCQkJQThGRDhCODYwODdDQjQ0QzAwREMzNzA3IC8q
IEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTZGRUVEOTA4OTg1ODIz
MDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM5ODg1QzMwOEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQTg4QUQzODYwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQzODgwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdG
aWxsUGFpbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDM4QjA5NTI0ODZEMDAxREQx
OTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg4QUQzOEYwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRl
cm4uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBrY2FudmFzL0tDYW52YXNDbGlwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzQ2xpcHBlci5oCShyZXZpc2lvbiAxNjYwOCkKKysr
IGtjYW52YXMvS0NhbnZhc0NsaXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZXNldENsaXBEYXRhKCk7CiAgICAgdm9pZCBhZGRDbGlwRGF0
YShjb25zdCBQYXRoJiwgV2luZFJ1bGUsIGJvb2wgYmJveFVuaXRzKTsKICAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlDbGlwKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlDbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0ID0gMDsKIAogICAgIEtDQ2xpcERhdGFMaXN0IGNs
aXBEYXRhKCkgY29uc3Q7CiAKSW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysr
IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCwz
MCBAQCBUZXh0U3RyZWFtJiBLQ2FudmFzRmlsdGVyOjpleHRlcm5hbFJlcHJlCiAgICAgcmV0dXJu
IHRzOwogfQogCitzdGF0aWMgYm9vbCBfX3VzZUZpbHRlcnMgPSB0cnVlOworCitib29sIEtDYW52
YXNGaWx0ZXI6OmZpbHRlcnNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gX191c2VGaWx0ZXJzOwor
fQorCit2b2lkIEtDYW52YXNGaWx0ZXI6OnNldEZpbHRlcnNFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBfX3VzZUZpbHRlcnMgPSBlbmFibGVkOworfQorCitzdGF0aWMgYm9vbCBfX3VzZUhh
cmR3YXJlUmVuZGVyaW5nID0gdHJ1ZTsKKworYm9vbCBLQ2FudmFzRmlsdGVyOjpoYXJkd2FyZVJl
bmRlcmluZ0VuYWJsZWQoKQoreworICAgIHJldHVybiBfX3VzZUhhcmR3YXJlUmVuZGVyaW5nOwor
fQorCit2b2lkIEtDYW52YXNGaWx0ZXI6OnNldEhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZChib29s
IGVuYWJsZWQpCit7CisgICAgX191c2VIYXJkd2FyZVJlbmRlcmluZyA9IGVuYWJsZWQ7Cit9CisK
IEtDYW52YXNGaWx0ZXIgKmdldEZpbHRlckJ5SWQoRG9jdW1lbnQgKmRvY3VtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcgJmlkKQogewogICAgIEtDYW52YXNSZXNvdXJjZSAqcmVzb3VyY2UgPSBnZXRS
ZXNvdXJjZUJ5SWQoZG9jdW1lbnQsIGlkKTsKSW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJKHJldmlzaW9uIDE2NjA4
KQorKysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5
NCw2IEBAIHByaXZhdGU6CiB9OwogCiBjbGFzcyBLQ2FudmFzRmlsdGVyRWZmZWN0OwotY2xhc3Mg
S1JlbmRlcmluZ0RldmljZTsKIAogY2xhc3MgS0NhbnZhc0ZpbHRlciA6IHB1YmxpYyBLQ2FudmFz
UmVzb3VyY2UgewogcHVibGljOgpAQCAtMTEwLDE3ICsxMDksMjMgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RWZmZWN0Qm91bmRpbmdCb3hNb2RlKGJvb2wgYmJveE1vZGUpIHsgbV9lZmZlY3RCQm94
TW9kZSA9IGJib3hNb2RlOyB9ICAgIAogCiAgICAgRmxvYXRSZWN0IGZpbHRlclJlY3QoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlclJlY3Q7IH0KLSAgICB2b2lkIHNldEZpbHRlclJlY3QoY29uc3Qg
RmxvYXRSZWN0ICZyZWN0KSB7IG1fZmlsdGVyUmVjdCA9IHJlY3Q7IH0KKyAgICB2b2lkIHNldEZp
bHRlclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fZmlsdGVyUmVjdCA9IHJlY3Q7IH0K
ICAgICAKLSAgICBGbG9hdFJlY3QgZmlsdGVyQkJveEZvckl0ZW1CQm94KEZsb2F0UmVjdCBpdGVt
QkJveCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGZpbHRlckJCb3hGb3JJdGVtQkJveChGbG9hdFJl
Y3QpIGNvbnN0OwogCiAgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKICAgICB2b2lkIGFkZEZpbHRl
ckVmZmVjdChLQ2FudmFzRmlsdGVyRWZmZWN0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZUZpbHRlcihjb25zdCBGbG9hdFJlY3QgJmJib3gpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlGaWx0ZXIoY29uc3QgRmxvYXRSZWN0ICZiYm94KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVGaWx0ZXIoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IEZsb2F0UmVjdCYgYmJveCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbHRlcihHcmFwaGljc0NvbnRleHQqJiwgY29uc3Qg
RmxvYXRSZWN0JiBiYm94LCBHcmFwaGljc0NvbnRleHQqIG9yaWdpbmFsQ29udGV4dCkgPSAwOwog
CiAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29u
c3Q7CisgICAgCisgICAgLy8gZmlsdGVycyAobW9zdGx5IGRlYnVnZ2luZykKKyAgICBzdGF0aWMg
Ym9vbCBmaWx0ZXJzRW5hYmxlZCgpOworICAgIHN0YXRpYyB2b2lkIHNldEZpbHRlcnNFbmFibGVk
KGJvb2wpOworICAgIHN0YXRpYyBib29sIGhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZCgpOworICAg
IHN0YXRpYyB2b2lkIHNldEhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZChib29sKTsKIAogcHJvdGVj
dGVkOgogICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlY3Q7CkluZGV4OiBrY2FudmFzL0tDYW52YXNN
YXNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNNYXNrZXIuaAkocmV2aXNpb24g
MTY2MDgpCisrKyBrY2FudmFzL0tDYW52YXNNYXNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDsKIGNsYXNzIFRleHRTdHJlYW07CiBjbGFzcyBLQ2FudmFzSW1hZ2U7CiAKQEAgLTQxLDcgKzQy
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFzayhLQ2FudmFzSW1hZ2UqKTsKICAgICBLQ2Fu
dmFzSW1hZ2UqIG1hc2soKSBjb25zdCB7IHJldHVybiBtX21hc2s7IH0KICAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlNYXNrKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlNYXNrKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0ID0gMDsKIAogICAgIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OyAKIHByb3RlY3RlZDoKSW5kZXg6
IGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9LQ2Fu
dmFzVHJlZURlYnVnLmNwcAkocmV2aXNpb24gMTY2MDgpCisrKyBrY2FudmFzL0tDYW52YXNUcmVl
RGVidWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiUmVu
ZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1
ZGUgIktDYW52YXNDbGlwcGVyLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2lu
Y2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWlu
dFNlcnZlckdyYWRpZW50LmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVy
bi5oIgpJbmRleDoga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysrIGtj
YW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1
LDYgQEAKICNpbmNsdWRlICJSZW5kZXJGb3JlaWduT2JqZWN0LmgiCiAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAi
U1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKIApAQCAt
NDQsNDQgKzQzLDMwIEBAIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0Ojp0cmEK
IAogdm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
aW50IHBhcmVudFgsIGludCBwYXJlbnRZKQogewotICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5w
OworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
LQotICAgIEtSZW5kZXJpbmdEZXZpY2UgKmRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwotICAg
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4
dCgpOwotICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwotICAgIGlmICghY29udGV4
dCkgewotICAgICAgICAvLyBPbmx5IG5lZWQgdG8gc2V0dXAgZm9yIEtDYW52YXMgcmVuZGVyaW5n
IGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4KLSAgICAgICAgY29udGV4dCA9IHBhaW50
SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIGRldmljZS0+
cHVzaENvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHNob3VsZFBvcENvbnRleHQgPSB0cnVlOwot
ICAgIH0KLQotICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CisgICAgCisgICAgY29udGV4dC0+c2F2
ZSgpOwogCiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0
ZShwYXJlbnRYLCBwYXJlbnRZKSk7CiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNm
b3JtKCkpOwogICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KSk7CiAKLSAgICBwYWludEluZm8ucC0+YWRkQ2xpcChnZXRDbGlwUmVjdChwYXJlbnRYLCBwYXJl
bnRZKSk7CisgICAgY29udGV4dC0+YWRkQ2xpcChnZXRDbGlwUmVjdChwYXJlbnRYLCBwYXJlbnRZ
KSk7CiAKICAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+b3BhY2l0eSgpOwogICAgIGlmIChv
cGFjaXR5IDwgMS4wZikKLSAgICAgICAgcGFpbnRJbmZvLnAtPmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7CisgICAgICAgIGNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7CiAKICAgICBQYWludEluZm8gcGkocGFpbnRJbmZvKTsKICAgICBwaS5yID0gYWJzb2x1
dGVUcmFuc2Zvcm0oKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKICAgICBSZW5kZXJC
bG9jazo6cGFpbnQocGksIDAsIDApOwogCiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAgICAg
ICBwYWludEluZm8ucC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICAKLSAgICBpZiAoc2hv
dWxkUG9wQ29udGV4dCkgewotICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAgICAgICAg
ZGVsZXRlIGNvbnRleHQ7Ci0gICAgfQorICAgICAgICBjb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lM
YXllcigpOwogCi0gICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICBjb250ZXh0LT5yZXN0
b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6Y29tcHV0ZUFic29sdXRlUmVw
YWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmKQpJbmRleDoga2NhbnZhcy9SZW5kZXJQYXRoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclBhdGguY3BwCShyZXZpc2lvbiAxNjYwOCkK
KysrIGtjYW52YXMvUmVuZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDEw
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29u
dGFpbmVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXIuaCIKKyNpbmNsdWRlICJLQ2FudmFz
RmlsdGVycy5oIgogI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKICNpbmNsdWRlICJLQ2FudmFz
TWFya2VyLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2luY2x1ZGUgIktSZW5k
ZXJpbmdQYWludFNlcnZlci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgog
I2luY2x1ZGUgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVk
RWxlbWVudC5oIgpAQCAtMTc0LDYxICsxNzUsNDMgQEAgdm9pZCBSZW5kZXJQYXRoOjpwYWludChQ
YWludEluZm8gJnBhaW50SQogICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgp
IHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHx8IHN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgcGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0Rldmlj
ZSgpOwotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJy
ZW50Q29udGV4dCgpOwotICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwotICAgIGlm
IChjb250ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+c2F2ZSgpOwotICAgIGVsc2UgewotICAg
ICAgICAvLyBOZWVkIHRvIHNldCB1cCBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxy
ZWFkeSBiZWVuIGRvbmUuCi0gICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCgpOwotICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRl
eHQpOwotICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKLSAgICB9Ci0KKyAgICBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8ucDsKKyAgICBjb250ZXh0LT5zYXZlKCk7
CiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gc2V0
dXAgdG8gYXBwbHkgZmlsdGVycwogICAgIEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRl
ckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsdGVyKCkuc3Vic3RyaW5n
KDEpKTsKLSAgICBpZiAoZmlsdGVyKSB7Ci0gICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihy
ZWxhdGl2ZUJCb3godHJ1ZSkpOwotICAgICAgICBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29u
dGV4dCgpOwotICAgIH0KKyAgICBpZiAoZmlsdGVyKQorICAgICAgICBmaWx0ZXItPnByZXBhcmVG
aWx0ZXIoY29udGV4dCwgcmVsYXRpdmVCQm94KHRydWUpKTsKIAogICAgIGlmIChLQ2FudmFzQ2xp
cHBlciogY2xpcHBlciA9IGdldENsaXBwZXJCeUlkKGRvY3VtZW50KCksIHN0eWxlKCktPnN2Z1N0
eWxlKCktPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKLSAgICAgICAgY2xpcHBlci0+YXBwbHlD
bGlwKHJlbGF0aXZlQkJveCh0cnVlKSk7CisgICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChjb250
ZXh0LCByZWxhdGl2ZUJCb3godHJ1ZSkpOwogCiAgICAgaWYgKEtDYW52YXNNYXNrZXIqIG1hc2tl
ciA9IGdldE1hc2tlckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+bWFza0Vs
ZW1lbnQoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhyZWxhdGl2
ZUJCb3godHJ1ZSkpOworICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhjb250ZXh0LCByZWxhdGl2
ZUJCb3godHJ1ZSkpOwogCiAgICAgY29udGV4dC0+Y2xlYXJQYXRoKCk7CiAgICAgCi0gICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6
OmZpbGxQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKTsKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXIqIGZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVy
KHN0eWxlKCksIHRoaXMpOwogICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgY29u
dGV4dC0+YWRkUGF0aChwYXRoKCkpOwogICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldEFjdGl2
ZUNsaWVudCh0aGlzKTsKICAgICAgICAgZmlsbFBhaW50U2VydmVyLT5kcmF3KGNvbnRleHQsIHRo
aXMsIEFQUExZX1RPX0ZJTEwpOwogICAgIH0KLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0
cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihz
dHlsZSgpLCB0aGlzKTsKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIHN0cm9rZVBhaW50U2Vy
dmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0aGlz
KTsKICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgY29udGV4dC0+YWRkUGF0
aChwYXRoKCkpOyAvLyBwYXRoIGlzIGNsZWFyZWQgd2hlbiBmaWxsZWQuCiAgICAgICAgIHN0cm9r
ZVBhaW50U2VydmVyLT5zZXRBY3RpdmVDbGllbnQodGhpcyk7CiAgICAgICAgIHN0cm9rZVBhaW50
U2VydmVyLT5kcmF3KGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX1NUUk9LRSk7CiAgICAgfQogCi0g
ICAgZHJhd01hcmtlcnNJZk5lZWRlZChwYWludEluZm8ucCwgcGFpbnRJbmZvLnIsIHBhdGgoKSk7
CisgICAgZHJhd01hcmtlcnNJZk5lZWRlZChjb250ZXh0LCBwYWludEluZm8uciwgcGF0aCgpKTsK
IAogICAgIC8vIGFjdHVhbGx5IGFwcGx5IHRoZSBmaWx0ZXIKICAgICBpZiAoZmlsdGVyKQotICAg
ICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKHJlbGF0aXZlQkJveCh0cnVlKSk7CisgICAgICAgIGZp
bHRlci0+YXBwbHlGaWx0ZXIoY29udGV4dCwgcmVsYXRpdmVCQm94KHRydWUpLCBwYWludEluZm8u
cCk7CiAKLSAgICAvLyByZXN0b3JlIGRyYXdpbmcgc3RhdGUKLSAgICBpZiAoIXNob3VsZFBvcENv
bnRleHQpCi0gICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGRldmljZS0+cG9wQ29udGV4dCgpOwotICAgICAgICBkZWxldGUgY29udGV4dDsKLSAgICB9
CisgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKIH0KIAogdm9pZCBSZW5kZXJQYXRoOjphYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCBfdHgsIGludCBfdHkpCkluZGV4
OiBrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysrIGtjYW52YXMvUmVuZGVy
U1ZHQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsOSBAQAogI2luY2x1
ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXIuaCIK
KyNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgogI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIK
ICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzcsNyArMzcsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRlclNWR0NvbnRhaW5lcjo6UmVuZGVyU1ZHQ29u
dGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQgKm5vZGUpCitSZW5kZXJTVkdDb250YWluZXI6OlJlbmRl
clNWR0NvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50KiBub2RlKQogICAgIDogUmVuZGVyQ29udGFp
bmVyKG5vZGUpCiAgICAgLCBtX2RyYXdzQ29udGVudHModHJ1ZSkKICAgICAsIG1fc2xpY2UoZmFs
c2UpCkBAIC0xNDgsNjIgKzE0OCw0OSBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQo
UGFpbnRJbmZvCiAgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIWZpbHRlcikKICAgICAgICAgcmV0
dXJuOyAvLyBTcGVjOiBncm91cHMgdy9vIGNoaWxkcmVuIHN0aWxsIG1heSByZW5kZXIgZmlsdGVy
IGNvbnRlbnQuCiAgICAgCi0gICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5n
RGV2aWNlKCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGRldmljZUNvbnRleHQgPSBk
ZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFs
c2U7Ci0gICAgaWYgKCFkZXZpY2VDb250ZXh0KSB7Ci0gICAgICAgIC8vIEkgb25seSBuZWVkIHRv
IHNldHVwIGZvciBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRv
bmUuCi0gICAgICAgIGRldmljZUNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCgpOwotICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGRldmljZUNvbnRl
eHQpOwotICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBw
YWludEluZm8ucDsKKyAgICBwYWludEluZm8ucC0+c2F2ZSgpOwogICAgIAogICAgIGlmIChwYXJl
bnRYICE9IDAgfHwgcGFyZW50WSAhPSAwKSB7CiAgICAgICAgIC8vIFRyYW5zbGF0ZSBmcm9tIHBh
cmVudCBvZmZzZXRzIChraHRtbCkgdG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKGtzdmcyL2tjYW52
YXMpCi0gICAgICAgIGRldmljZUNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50
cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOworICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0o
QWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKICAgICAgICAg
cGFyZW50WCA9IHBhcmVudFkgPSAwOwogICAgIH0KICAgICAKICAgICBpZiAoIXZpZXdwb3J0KCku
aXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPVklTSUJM
RSkKLSAgICAgICAgICAgIHBhaW50SW5mby5wLT5hZGRDbGlwKGVuY2xvc2luZ0ludFJlY3Qodmll
d3BvcnQoKSkpOyAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSdsbCB3YW50IGZsb2F0LXByZWNpc2lv
biBjbGlwcGluZwotICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNm
b3JtKCkudHJhbnNsYXRlKHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSkpOworICAgICAg
ICAgICAgY29udGV4dC0+YWRkQ2xpcChlbmNsb3NpbmdJbnRSZWN0KHZpZXdwb3J0KCkpKTsgLy8g
RklYTUU6IEV2ZW50dWFsbHkgd2UnbGwgd2FudCBmbG9hdC1wcmVjaXNpb24gY2xpcHBpbmcKKyAg
ICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSh2aWV3
cG9ydCgpLngoKSwgdmlld3BvcnQoKS55KCkpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFsb2Nh
bFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgZGV2aWNlQ29udGV4dC0+Y29uY2F0
Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOworICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0obG9jYWxU
cmFuc2Zvcm0oKSk7CiAgICAgCi0gICAgaWYgKEtDYW52YXNDbGlwcGVyICpjbGlwcGVyID0gZ2V0
Q2xpcHBlckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcFBhdGgoKS5z
dWJzdHJpbmcoMSkpKQotICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAocmVsYXRpdmVCQm94KHRy
dWUpKTsKKyAgICBpZiAoS0NhbnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChk
b2N1bWVudCgpLCBzdHlsZSgpLT5zdmdTdHlsZSgpLT5jbGlwUGF0aCgpLnN1YnN0cmluZygxKSkp
CisgICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChjb250ZXh0LCByZWxhdGl2ZUJCb3godHJ1ZSkp
OwogCi0gICAgaWYgKEtDYW52YXNNYXNrZXIgKm1hc2tlciA9IGdldE1hc2tlckJ5SWQoZG9jdW1l
bnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+bWFza0VsZW1lbnQoKS5zdWJzdHJpbmcoMSkpKQot
ICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhyZWxhdGl2ZUJCb3godHJ1ZSkpOworICAgIGlmIChL
Q2FudmFzTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRvY3VtZW50KCksIHN0eWxlKCkt
PnN2Z1N0eWxlKCktPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAgbWFza2Vy
LT5hcHBseU1hc2soY29udGV4dCwgcmVsYXRpdmVCQm94KHRydWUpKTsKIAogICAgIGZsb2F0IG9w
YWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7CiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAg
ICAgICBwYWludEluZm8ucC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICAg
ICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgIGlmIChm
aWx0ZXIpCi0gICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihyZWxhdGl2ZUJCb3godHJ1ZSkp
OworICAgICAgICBmaWx0ZXItPnByZXBhcmVGaWx0ZXIoY29udGV4dCwgcmVsYXRpdmVCQm94KHRy
dWUpKTsKICAgICAKICAgICBpZiAoIXZpZXdCb3goKS5pc0VtcHR5KCkpCi0gICAgICAgIGRldmlj
ZUNvbnRleHQtPmNvbmNhdENUTSh2aWV3cG9ydFRyYW5zZm9ybSgpKTsKKyAgICAgICAgY29udGV4
dC0+Y29uY2F0Q1RNKHZpZXdwb3J0VHJhbnNmb3JtKCkpOwogICAgIAotICAgIFJlbmRlckNvbnRh
aW5lcjo6cGFpbnQocGFpbnRJbmZvLCAwLCAwKTsKKyAgICBSZW5kZXJDb250YWluZXI6OnBhaW50
KHBhaW50SW5mbywgMCwgMCk7IC8vIEZJWE1FIQogICAgIAogICAgIGlmIChmaWx0ZXIpCi0gICAg
ICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIocmVsYXRpdmVCQm94KHRydWUpKTsKKyAgICAgICAgZmls
dGVyLT5hcHBseUZpbHRlcihjb250ZXh0LCByZWxhdGl2ZUJCb3godHJ1ZSksIHBhaW50SW5mby5w
KTsKICAgICAKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIHBhaW50SW5mby5wLT5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgICAgICBjb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lM
YXllcigpOwogICAgIAotICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQotICAgIGlmIChzaG91
bGRQb3BDb250ZXh0KSB7Ci0gICAgICAgIGRldmljZS0+cG9wQ29udGV4dCgpOwotICAgICAgICBk
ZWxldGUgZGV2aWNlQ29udGV4dDsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFpbnRJbmZvLnAtPnJl
c3RvcmUoKTsKKyAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOwogfQogCiBGbG9hdFJlY3QgUmVu
ZGVyU1ZHQ29udGFpbmVyOjp2aWV3cG9ydCgpIGNvbnN0CkluZGV4OiBrY2FudmFzL1JlbmRlclNW
R0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2
aXNpb24gMTY2MDgpCisrKyBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIktDYW52
YXNGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgogI2luY2x1ZGUgIktDYW52
YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNs
dWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAj
aW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCkBAIC0xMjgsNDggKzEyOCwzNiBAQCB2b2lkIFJl
bmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAgICAgaWYgKHBhaW50SW5mby5wLT5w
YWludGluZ0Rpc2FibGVkKCkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdy
b3VuZCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTikKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgp
OwotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50
Q29udGV4dCgpOwotICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwotICAgIGlmIChj
b250ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+c2F2ZSgpOwotICAgIGVsc2UgewotICAgICAg
ICAvLyBOZWVkIHRvIHB1c2ggYSBkZXZpY2UgY29udGV4dCBvbiB0aGUgc3RhY2sgaWYgZW1wdHku
Ci0gICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCgpOwotICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBz
aG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKLSAgICB9CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0ID0gcGFpbnRJbmZvLnA7CisgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKIAogICAgIGNvbnRl
eHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50
WSkpOwogICAgIGNvbnRleHQtPmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICB0cmFu
c2xhdGVGb3JBdHRyaWJ1dGVzKCk7CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zbGF0aW9u
Rm9yQXR0cmlidXRlcygpKTsKICAgICAKICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBGbG9h
dFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
KiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CiAgICAgICAgICAgICAKICAgICBpZiAo
S0NhbnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChkb2N1bWVudCgpLCBzdmdT
dHlsZS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBjbGlwcGVyLT5hcHBseUNs
aXAoYm91bmRpbmdCb3gpOworICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAoY29udGV4dCwgYm91
bmRpbmdCb3gpOwogCiAgICAgaWYgKEtDYW52YXNNYXNrZXIqIG1hc2tlciA9IGdldE1hc2tlckJ5
SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5nKDEpKSkKLSAg
ICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRpbmdCb3gpOworICAgICAgICBtYXNrZXItPmFw
cGx5TWFzayhjb250ZXh0LCBib3VuZGluZ0JveCk7CiAKICAgICBLQ2FudmFzRmlsdGVyKiBmaWx0
ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5maWx0ZXIoKS5zdWJzdHJp
bmcoMSkpOwogICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihi
b3VuZGluZ0JveCk7Ci0gICAgCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2Ut
PmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICAgICAgZmls
dGVyLT5wcmVwYXJlRmlsdGVyKGNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIGZsb2F0IG9w
YWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7CiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAg
ICAgICBjLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgICAgICBjb250ZXh0
LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogCi0gICAgUGFpbnRJbmZvIHBpKHBh
aW50SW5mbyk7Ci0gICAgcGkucCA9IGMuZ2V0KCk7CisgICAgUGFpbnRJbmZvIHBpKHBhaW50SW5m
byk7IC8vIEZJWE1FISEKICAgICBwaS5yID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5pbnZlcnQoKS5t
YXBSZWN0KHBhaW50SW5mby5yKTsKIAogICAgIGludCB4ID0gMCwgeSA9IDA7CiAgICAgaWYgKHNo
b3VsZFBhaW50KHBpLCB4LCB5KSkgewotICAgICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlRWx0
ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAgICAgU1ZHSW1h
Z2VFbGVtZW50KiBpbWFnZUVsdCA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUo
KSk7CiAgICAgICAgIAogICAgICAgICBpZiAoaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW8o
KS0+YWxpZ24oKSA9PSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19OT05FKQogICAgICAgICAgICAgUmVuZGVySW1hZ2U6OnBhaW50KHBpLCAwLCAwKTsKQEAg
LTE3NywyMyArMTY1LDE3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYg
cGEKICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdChtX3gsIG1feSwgY29udGVudFdpZHRo
KCksIGNvbnRlbnRIZWlnaHQoKSk7CiAgICAgICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAw
LCBpbWFnZSgpLT53aWR0aCgpLCBpbWFnZSgpLT5oZWlnaHQoKSk7CiAgICAgICAgICAgICBhZGp1
c3RSZWN0c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBpbWFnZUVsdC0+cHJlc2Vy
dmVBc3BlY3RSYXRpbygpKTsKLSAgICAgICAgICAgIGMtPmRyYXdJbWFnZShpbWFnZSgpLCBkZXN0
UmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZpbHRlcikKLSAg
ICAgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgICAgICAgICAg
ZmlsdGVyLT5hcHBseUZpbHRlcihjb250ZXh0LCBib3VuZGluZ0JveCwgcGFpbnRJbmZvLnApOwog
ICAgIH0KICAgICAKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIGMtPmVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7CisgICAgICAgIGNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CiAKLSAgICAvLyByZXN0b3JlIGRyYXdpbmcgc3RhdGUKLSAgICBpZiAoIXNob3VsZFBvcENvbnRl
eHQpCi0gICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGRldmljZS0+cG9wQ29udGV4dCgpOwotICAgICAgICBkZWxldGUgY29udGV4dDsKLSAgICB9Cisg
ICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRlclNWR0ltYWdlOjpjb21wdXRl
QWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGYpCkBAIC0yODAsMTIgKzI2Miw2
IEBAIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdJbWFnZTo6dHJhbnNsYXQKICAgICByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKGltYWdlLT54KCktPnZhbHVlKCksIGltYWdlLT55
KCktPnZhbHVlKCkpOwogfQogCi12b2lkIFJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdGVGb3JBdHRy
aWJ1dGVzKCkKLXsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IHJlbmRl
cmluZ0RldmljZSgpLT5jdXJyZW50Q29udGV4dCgpOwotICAgIGNvbnRleHQtPmNvbmNhdENUTSh0
cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZh
cy9SZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lvbiAxNjYwOCkKKysrIGtjYW52YXMvUmVuZGVyU1ZH
SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGludCBfeCwg
aW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIHZvaWQgdHJhbnNsYXRlRm9yQXR0cmlidXRlcygpOwogICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKICAgICAgICAgSW50UmVjdCBtX2Fic29sdXRlQm91bmRzOwpJbmRl
eDoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRl
clNWR1RleHQuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDEwIEBACiAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIktDYW52
YXNGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgogI2luY2x1ZGUgIktDYW52
YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNs
dWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhMaXN0Lmgi
CiAjaW5jbHVkZSAiU1ZHVGV4dEVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBA
IC02MCwyMCArNjEsOSBAQCBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHVGV4dDo6dHJhbnNsYXRp
CiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBw
YXJlbnRYLCBpbnQgcGFyZW50WSkKIHsKLSAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8ucDsKKyAg
ICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAg
ICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKLSAgICBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmljZS0+Y3VycmVudENvbnRleHQoKTsK
LSAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKLSAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTmVlZCB0
byBzZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25l
LgotICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNv
bnRleHQoKTsKLSAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAg
c2hvdWxkUG9wQ29udGV4dCA9IHRydWU7Ci0gICAgfQogICAgIAogICAgIGNvbnRleHQtPmNvbmNh
dENUTShsb2NhbFRyYW5zZm9ybSgpKTsKICAgICBjb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJh
bnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKQEAgLTg0LDIzICs3NCwyMiBA
QCB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAg
IAogICAgIGlmIChLQ2FudmFzQ2xpcHBlciogY2xpcHBlciA9IGdldENsaXBwZXJCeUlkKGRvY3Vt
ZW50KCksIHN2Z1N0eWxlLT5jbGlwUGF0aCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIGNsaXBw
ZXItPmFwcGx5Q2xpcChib3VuZGluZ0JveCk7CisgICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChj
b250ZXh0LCBib3VuZGluZ0JveCk7CiAKICAgICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0g
Z2V0TWFza2VyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+bWFza0VsZW1lbnQoKS5zdWJzdHJp
bmcoMSkpKQotICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhib3VuZGluZ0JveCk7CisgICAgICAg
IG1hc2tlci0+YXBwbHlNYXNrKGNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIEtDYW52YXNG
aWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRl
cigpLnN1YnN0cmluZygxKSk7CiAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5wcmVw
YXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKKyAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGNv
bnRleHQsIGJvdW5kaW5nQm94KTsKICAgICAgICAgCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsK
ICAgICBQYWludEluZm8gcGkgPSBwYWludEluZm87Ci0gICAgcGkucCA9IGMuZ2V0KCk7CisgICAg
cGkucCA9IGNvbnRleHQ7CiAgICAgcGkuciA9ICh0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSAq
IHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpICogYWJzb2x1dGVUcmFuc2Zvcm0oKSkuaW52ZXJ0
KCkubWFwUmVjdChwYWludEluZm8ucik7CiAKICAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+
b3BhY2l0eSgpOwogICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICAgICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihvcGFjaXR5KTsKIAogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50
U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhp
cyk7CiAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewpAQCAtMTI0LDE5ICsxMTMsMTMgQEAgdm9p
ZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAgICBzdHJva2VQYWlu
dFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAoZmlsdGVy
KQotICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKGJvdW5kaW5nQm94KTsKLQogICAgIGlmIChv
cGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICAg
ICAgY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAotICAgIC8vIHJlc3RvcmUgZHJh
d2luZyBzdGF0ZQotICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZv
LnAtPnJlc3RvcmUoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7
Ci0gICAgICAgIGRlbGV0ZSBjb250ZXh0OwotICAgIH0KKyAgICBpZiAoZmlsdGVyKQorICAgICAg
ICBmaWx0ZXItPmFwcGx5RmlsdGVyKGNvbnRleHQsIGJvdW5kaW5nQm94LCBwYWludEluZm8ucCk7
CisgICAgCisgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRlclNWR1RleHQ6
OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJvb2wgZikKSW5kZXg6IGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysrIGtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNiAgICAgICBBbGV4YW5kZXIgS2Vs
bGV0dCA8bHlwYW5vdkBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1
ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1LUmVuZGVy
aW5nRGV2aWNlOjpLUmVuZGVyaW5nRGV2aWNlKCkKLXsKLX0KLQotS1JlbmRlcmluZ0RldmljZTo6
fktSZW5kZXJpbmdEZXZpY2UoKQotewotfQotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogS1Jl
bmRlcmluZ0RldmljZTo6Y3VycmVudENvbnRleHQoKSBjb25zdAotewotICAgIGlmIChtX2NvbnRl
eHRTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2NvbnRl
eHRTdGFjay5sYXN0KCk7Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5n
RGV2aWNlOjpwb3BDb250ZXh0KCkKLXsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVz
dWx0ID0gbV9jb250ZXh0U3RhY2subGFzdCgpOwotICAgIG1fY29udGV4dFN0YWNrLnJlbW92ZUxh
c3QoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2U6OnB1
c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0KQotewotICAgIG1fY29u
dGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKLX0KLQotfQotCi0vLyB2aW06dHM9NDpub2V0Ci0j
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLQpJbmRleDoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rl
dmljZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAko
cmV2aXNpb24gMTY2MDgpCisrKyBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDUyICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8vIGFrYSB3aGVyZSB0byBkcmF3Ci1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dAotewot
cHVibGljOgotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCkgeyB9Ci0gICAgdmlydHVhbCB+
S1JlbmRlcmluZ0RldmljZUNvbnRleHQoKSB7IH0KLQotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNm
b3JtIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gY3RtKCkgY29uc3QgPSAwOwotICAgICAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJQYXRoKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGRQYXRoKGNvbnN0IFBhdGgm
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogY3JlYXRlR3JhcGhpY3NDb250
ZXh0KCkgPSAwOwotfTsKLQogY2xhc3MgS0NhbnZhc0ltYWdlOwogY2xhc3MgS0NhbnZhc0ZpbHRl
ckVmZmVjdDsKLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2UKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVy
aW5nRGV2aWNlKCk7Ci0gICAgdmlydHVhbCB+S1JlbmRlcmluZ0RldmljZSgpOwotCi0gICAgLy8g
VGhlIHJlbmRlcmluZyBkZXZpY2Ugd2lsbCBiZSBkaXJlY3RseSBpbml0ZWQKLSAgICAvLyBhZnRl
ciB0aGUgY2FudmFzIHRhcmdldCwgaXQgbWF5IGJlIG92ZXJ3cml0dGVuLgotICAgIHZpcnR1YWwg
Ym9vbCBpc0J1ZmZlcmVkKCkgY29uc3QgPSAwOwotCi0gICAgLy8gR2xvYmFsIHJlbmRlcmluZyBk
ZXZpY2UgY29udGV4dAotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjdXJyZW50Q29udGV4
dCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcG9wQ29u
dGV4dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwdXNoQ29udGV4dChLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCopOwotICAgIAotICAgIHZpcnR1YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRl
eHRGb3JJbWFnZShLQ2FudmFzSW1hZ2UqKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBDcmVhdGlvbiB0
b29scwotICAgIHZpcnR1YWwgS0NhbnZhc1Jlc291cmNlKiBjcmVhdGVSZXNvdXJjZShjb25zdCBL
Q1Jlc291cmNlVHlwZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZl
Y3QqIGNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIGNyZWF0ZVBhaW50U2VydmVy
KGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJikgY29uc3QgPSAwOwotCi1wcml2YXRlOgotICAgIFZl
Y3RvcjxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCo+IG1fY29udGV4dFN0YWNrOwotfTsKIAotS1Jl
bmRlcmluZ0RldmljZSogcmVuZGVyaW5nRGV2aWNlKCk7IC8qIHJldHVybnMgdGhlIHNpbmdsZSBn
bG9iYWwgcmVuZGVyaW5nIGRldmljZSAqLworR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0Rm9ySW1h
Z2UoS0NhbnZhc0ltYWdlKik7CitLQ2FudmFzUmVzb3VyY2UqIGNyZWF0ZVJlc291cmNlKGNvbnN0
IEtDUmVzb3VyY2VUeXBlJik7CitLQ2FudmFzRmlsdGVyRWZmZWN0KiBjcmVhdGVGaWx0ZXJFZmZl
Y3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlJik7CitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIGNy
ZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJik7CiAKIH0KIApJbmRleDog
a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0ZpbGxQYWludGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuY3BwCShyZXZpc2lvbiAxNjYwOCkK
KysrIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19T
VVBQT1JUCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIktSZW5kZXJp
bmdGaWxsUGFpbnRlci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlci5oIgogCklu
ZGV4OiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaAkocmV2aXNpb24gMTY2MDgp
CisrKyBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOCArMjgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEtSZW5k
ZXJpbmdQYWludFNlcnZlcjsKLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0OwogY2xhc3Mg
S1JlbmRlcmluZ0ZpbGxQYWludGVyCiB7CiBwdWJsaWM6CkluZGV4OiBrY2FudmFzL2RldmljZS9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24gMTY2MDgpCisrKyBrY2FudmFzL2RldmljZS9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Owog
Y2xhc3MgUmVuZGVyUGF0aDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgVGV4dFN0cmVhbTsK
QEAgLTcwLDE3ICs2OSwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBLQ1BhaW50U2VydmVyVHlw
ZSB0eXBlKCkgY29uc3QgPSAwOwogICAgIAogICAgIC8vIEFjdHVhbCByZW5kZXJpbmcgZnVuY3Rp
b24KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0
IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFy
Z2V0VHlwZSkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZWFy
ZG93bihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0
VHlwZSkgY29uc3QgPSAwOwogICAgIAogICAgIGJvb2wgaXNQYWludGluZ1RleHQoKSBjb25zdCB7
IHJldHVybiBtX3BhaW50aW5nVGV4dDsgfQogICAgIHZvaWQgc2V0UGFpbnRpbmdUZXh0KGJvb2wg
cGFpbnRpbmdUZXh0KSB7IG1fcGFpbnRpbmdUZXh0ID0gcGFpbnRpbmdUZXh0OyB9CiAKICAgICB2
aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNv
bnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7CiBwcml2YXRlOgogICAgIGNv
bnN0IFJlbmRlclBhdGgqIG1fYWN0aXZlQ2xpZW50OwogICAgIFN0cmluZyBtX3JlZ2lzdHJ5SWQ7
CkluZGV4OiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdTdHJva2VQYWludGVyLmgJKHJldmlzaW9u
IDE2NjA4KQorKysga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsOSArMjcsNyBAQAogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdT
dHlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBLQ2FudmFzUmVuZGVyaW5nU3R5
bGU7Ci1jbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI7Ci1jbGFzcyBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dDsKKwogY2xhc3MgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIKIHsKIHB1YmxpYzoKSW5k
ZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAkocmV2aXNp
b24gMTY2MDgpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNSArMzcsMTMgQEAgY2xhc3MgQ0lJbWFnZTsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlOwotCiBjbGFzcyBLQ2Fu
dmFzRmlsdGVyUXVhcnR6IDogcHVibGljIEtDYW52YXNGaWx0ZXIgewogcHVibGljOgogICAgIEtD
YW52YXNGaWx0ZXJRdWFydHooKTsKICAgICB2aXJ0dWFsIH5LQ2FudmFzRmlsdGVyUXVhcnR6KCk7
CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVGaWx0ZXIoY29uc3QgRmxvYXRSZWN0JiBi
Ym94KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWx0ZXIoY29uc3QgRmxvYXRSZWN0JiBiYm94
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZpbHRlcihHcmFwaGljc0NvbnRleHQqJiwgY29u
c3QgRmxvYXRSZWN0JiBiYm94KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWx0ZXIoR3JhcGhp
Y3NDb250ZXh0KiYsIGNvbnN0IEZsb2F0UmVjdCYgYmJveCwgR3JhcGhpY3NDb250ZXh0KiBvcmln
aW5hbENvbnRleHQpOwogICAgIAogICAgIENJSW1hZ2UqIGltYWdlRm9yTmFtZShjb25zdCBTdHJp
bmcmKSBjb25zdDsKICAgICB2b2lkIHNldEltYWdlRm9yTmFtZShDSUltYWdlKiwgY29uc3QgU3Ry
aW5nJik7CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0
ei5tbQkocmV2aXNpb24gMTY2MDgpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0Zp
bHRlclF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQAogI2ltcG9ydCAi
QmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDYWNoZWRJbWFnZS5oIgogI2ltcG9ydCAiRm91
bmRhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJJ
bWFnZS5oIgotI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogI2ltcG9ydCAiUXVh
cnR6U3VwcG9ydC5oIgogI2ltcG9ydCAiV0tBcml0aG1ldGljRmlsdGVyLmgiCiAjaW1wb3J0ICJX
S0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oIgpAQCAtMTA2LDE1ICsxMDYsMTMgQEAgS0NhbnZhc0Zp
bHRlclF1YXJ0ejo6fktDYW52YXNGaWx0ZXJRdWFydAogICAgIEhhcmRSZWxlYXNlKG1faW1hZ2Vz
QnlOYW1lKTsKIH0KIAotdm9pZCBLQ2FudmFzRmlsdGVyUXVhcnR6OjpwcmVwYXJlRmlsdGVyKGNv
bnN0IEZsb2F0UmVjdCAmYmJveCkKK3ZvaWQgS0NhbnZhc0ZpbHRlclF1YXJ0ejo6cHJlcGFyZUZp
bHRlcihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QgJmJib3gpCiB7
Ci0gICAgaWYgKGJib3guaXNFbXB0eSgpIHx8ICFLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpmaWx0
ZXJzRW5hYmxlZCgpIHx8IG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKGJib3guaXNFbXB0
eSgpIHx8ICFLQ2FudmFzRmlsdGVyOjpmaWx0ZXJzRW5hYmxlZCgpIHx8IG1fZWZmZWN0cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBz
dGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Kj4ocmVuZGVyaW5nRGV2aWNlKCkpLT5j
dXJyZW50Q0dDb250ZXh0KCk7CiAgICAgCiAgICAgLy8gZ2V0IGEgQ0lDb250ZXh0LCBhbmQgQ0dM
YXllciBmb3IgZHJhd2luZyBpbi4KLSAgICBib29sIHVzZVNvZnR3YXJlID0gISBLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6OjpoYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoKTsKKyAgICBib29sIHVzZVNv
ZnR3YXJlID0gISBLQ2FudmFzRmlsdGVyOjpoYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoKTsKICAg
ICBOU0RpY3Rpb25hcnkgKmNvbnRleHRPcHRpb25zID0gbmlsOwogICAgIAogICAgIGlmICh1c2VT
b2Z0d2FyZSkKQEAgLTEyNywyNCArMTI1LDIzIEBAIHZvaWQgS0NhbnZhc0ZpbHRlclF1YXJ0ejo6
cHJlcGFyZUZpbHRlcigKICAgICAvLyA8aHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3No
b3dfYnVnLmNnaT9pZD02OTQ3PgogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjQ3NzM1PgogICAg
IE5TQXV0b3JlbGVhc2VQb29sICpmaWx0ZXJDb250ZXh0UG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBv
b2wgYWxsb2NdIGluaXRdOwotICAgIG1fZmlsdGVyQ0lDb250ZXh0ID0gSGFyZFJldGFpbihbQ0lD
b250ZXh0IGNvbnRleHRXaXRoQ0dDb250ZXh0OmNnQ29udGV4dCBvcHRpb25zOmNvbnRleHRPcHRp
b25zXSk7CisgICAgbV9maWx0ZXJDSUNvbnRleHQgPSBIYXJkUmV0YWluKFtDSUNvbnRleHQgY29u
dGV4dFdpdGhDR0NvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgb3B0aW9uczpjb250
ZXh0T3B0aW9uc10pOwogICAgIFtmaWx0ZXJDb250ZXh0UG9vbCBkcmFpbl07CiAgICAgCiAgICAg
bV9maWx0ZXJDR0xheWVyID0gW21fZmlsdGVyQ0lDb250ZXh0IGNyZWF0ZUNHTGF5ZXJXaXRoU2l6
ZTpDR1JlY3QoYmJveCkuc2l6ZSBpbmZvOk5VTExdOwogICAgIAotICAgIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gbmV3IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVh
cnR6KENHTGF5ZXJHZXRDb250ZXh0KG1fZmlsdGVyQ0dMYXllcikpOwotICAgIHJlbmRlcmluZ0Rl
dmljZSgpLT5wdXNoQ29udGV4dChmaWx0ZXJDb250ZXh0KTsKKyAgICBjb250ZXh0ID0gbmV3IEdy
YXBoaWNzQ29udGV4dChDR0xheWVyR2V0Q29udGV4dChtX2ZpbHRlckNHTGF5ZXIpKTsKICAgICAK
LSAgICBmaWx0ZXJDb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRl
KC0xLjBmICogYmJveC54KCksIC0xLjBmICogYmJveC55KCkpKTsKKyAgICBjb250ZXh0LT5jb25j
YXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKC0xLjBmICogYmJveC54KCksIC0xLjBm
ICogYmJveC55KCkpKTsKIH0KIAotdm9pZCBLQ2FudmFzRmlsdGVyUXVhcnR6OjphcHBseUZpbHRl
cihjb25zdCBGbG9hdFJlY3QgJmJib3gpCit2b2lkIEtDYW52YXNGaWx0ZXJRdWFydHo6OmFwcGx5
RmlsdGVyKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCAmYmJveCwg
R3JhcGhpY3NDb250ZXh0KiBvcmlnaW5hbENvbnRleHQpCiB7Ci0gICAgaWYgKGJib3guaXNFbXB0
eSgpIHx8ICFLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpmaWx0ZXJzRW5hYmxlZCgpIHx8IG1fZWZm
ZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKGJib3guaXNFbXB0eSgpIHx8ICFLQ2FudmFzRmlsdGVy
OjpmaWx0ZXJzRW5hYmxlZCgpIHx8IG1fZWZmZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKLQotICAgIC8vIHJlc3RvcmUgdGhlIHByZXZpb3VzIGNvbnRleHQsIGRlbGV0ZSB0aGUgZmls
dGVyIGNvbnRleHQuCi0gICAgZGVsZXRlIChyZW5kZXJpbmdEZXZpY2UoKS0+cG9wQ29udGV4dCgp
KTsKKyAgICAKKyAgICBkZWxldGUgY29udGV4dDsKKyAgICBjb250ZXh0ID0gb3JpZ2luYWxDb250
ZXh0OwogCiAgICAgLy8gYWN0dWFsbHkgYXBwbHkgdGhlIGZpbHRlciBlZmZlY3RzCiAgICAgQ0lJ
bWFnZSAqaW5wdXRJbWFnZSA9IFtDSUltYWdlIGltYWdlV2l0aENHTGF5ZXI6bV9maWx0ZXJDR0xh
eWVyXTsKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW0J
KHJldmlzaW9uIDE2NjA4KQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVh
cnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAjaW1wb3J0ICJLUmVuZGVy
aW5nRmlsbFBhaW50ZXIuaCIKICNpbXBvcnQgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCiAK
LSNpbXBvcnQgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQgIktDYW52YXNGaWx0
ZXJRdWFydHouaCIKICNpbXBvcnQgIktDYW52YXNSZXNvdXJjZXNRdWFydHouaCIKICNpbXBvcnQg
IktDYW52YXNNYXNrZXJRdWFydHouaCIKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2Fu
dmFzTWFza2VyUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tD
YW52YXNNYXNrZXJRdWFydHouaAkocmV2aXNpb24gMTY2MDgpCisrKyBrY2FudmFzL2RldmljZS9x
dWFydHovS0NhbnZhc01hc2tlclF1YXJ0ei5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIGNsYXNzIEtDYW52YXNNYXNrZXJRdWFydHogOiBwdWJsaWMgS0NhbnYKIHB1YmxpYzoKICAg
ICBLQ2FudmFzTWFza2VyUXVhcnR6KCkgeyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5
TWFzayhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlNYXNrKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdC
b3gpIGNvbnN0OwogfTsKIAogfQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNN
YXNrZXJRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52
YXNNYXNrZXJRdWFydHoubW0JKHJldmlzaW9uIDE2NjA4KQorKysga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tDYW52YXNNYXNrZXJRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYg
QEAKICNpbXBvcnQgIlNWR1JlbmRlclN0eWxlLmgiCiAKICNpbXBvcnQgIktDYW52YXNSZXNvdXJj
ZXNRdWFydHouaCIKLSNpbXBvcnQgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQg
IlF1YXJ0elN1cHBvcnQuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KQEAg
LTg2LDcgKzg1LDcgQEAgc3RhdGljIENJSW1hZ2UgKnRyYW5zZm9ybUltYWdlSW50b0dyYXlzYwog
ICAgIHJldHVybiBbbXVsdGlwbGllZEdyYXlzY2FsZSB2YWx1ZUZvcktleTpAIm91dHB1dEltYWdl
Il07CiB9CiAKLXZvaWQgS0NhbnZhc01hc2tlclF1YXJ0ejo6YXBwbHlNYXNrKGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0Cit2b2lkIEtDYW52YXNNYXNrZXJRdWFydHo6OmFwcGx5
TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdC
b3gpIGNvbnN0CiB7CiAgICAgaWYgKCFtX21hc2spCiAgICAgICAgIHJldHVybjsKQEAgLTEwNCw3
ICsxMDMsNyBAQCB2b2lkIEtDYW52YXNNYXNrZXJRdWFydHo6OmFwcGx5TWFzayhjb25zCiAgICAg
W2NpR3JheXNjYWxlQ29udGV4dCBkcmF3SW1hZ2U6Z3JheXNjYWxlTWFzayBhdFBvaW50OkNHUG9p
bnRaZXJvIGZyb21SZWN0OkNHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdodCldOwogCiAgICAg
Q0dJbWFnZVJlZiBncmF5c2NhbGVJbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGdy
YXlzY2FsZUNvbnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBzdGF0aWNfY2Fz
dDxLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Kj4ocmVuZGVyaW5nRGV2aWNlKCkpLT5jdXJyZW50Q0dD
b250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIENHQ29udGV4dENsaXBUb01hc2soY2dDb250ZXh0LCBDR1JlY3RNYWtl
KDAsIDAsIHdpZHRoLCBoZWlnaHQpLCBncmF5c2NhbGVJbWFnZSk7CiAgICAgCiAgICAgQ0dJbWFn
ZVJlbGVhc2UoZ3JheXNjYWxlSW1hZ2UpOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tD
YW52YXNSZXNvdXJjZXNRdWFydHouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFy
dHovS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oCShyZXZpc2lvbiAxNjYwOCkKKysrIGtjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAgY2xhc3MgS0NhbnZhc0NsaXBwZXJRdWFydHogOiBwdWJsaWMgS0Nhbgog
cHVibGljOgogICAgIEtDYW52YXNDbGlwcGVyUXVhcnR6KCkgeyB9CiAgICAgCi0gICAgdmlydHVh
bCB2b2lkIGFwcGx5Q2xpcChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlDbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRpbmdCb3gpIGNvbnN0OwogfTsKIAogY2xhc3MgS0NhbnZhc0ltYWdlUXVhcnR6IDog
cHVibGljIEtDYW52YXNJbWFnZSB7CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZh
c1Jlc291cmNlc1F1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHov
S0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5tbQkocmV2aXNpb24gMTY2MDgpCisrKyBrY2FudmFzL2Rl
dmljZS9xdWFydHovS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTUgKzMyLDEzIEBACiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIktD
YW52YXNGaWx0ZXJRdWFydHouaCIKICNpbXBvcnQgIktDYW52YXNNYXNrZXJRdWFydHouaCIKLSNp
bXBvcnQgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQgIlF1YXJ0elN1cHBvcnQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEtDYW52YXNDbGlwcGVyUXVhcnR6Ojph
cHBseUNsaXAoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3QKK3ZvaWQgS0NhbnZh
c0NsaXBwZXJRdWFydHo6OmFwcGx5Q2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqIGNvbnRleHQgPSByZW5kZXJpbmdEZXZpY2UoKS0+Y3VycmVudENvbnRleHQoKTsKLSAg
ICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdWFydHoqPihjb250ZXh0KS0+Y2dDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGlmIChtX2NsaXBEYXRh
LmNvdW50KCkgPCAxKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAkocmV2aXNpb24gMTY2MDgpCisrKyBr
Y2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgICAgIDIwMDYg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotCi0jaWZuZGVmIEtSZW5kZXJpbmdEZXZp
Y2VRdWFydHpfSAotI2RlZmluZSBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6X0gKLSNpZmRlZiBTVkdf
U1VQUE9SVAotCi0jaW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlLmgiCi0KLXR5cGVkZWYgc3RydWN0
IENHUmVjdCBDR1JlY3Q7Ci10eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgKkNHQ29udGV4dFJlZjsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1
YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dDb250ZXh0UmVmKTsKLSAgICB2aXJ0dWFsIH5L
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eigpOwotICAgIAotICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2aXJ0dWFs
IEFmZmluZVRyYW5zZm9ybSBjdG0oKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJQYXRoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYpOwotCi0gICAg
dmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgIAot
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NnQ29udGV4dDsg
fTsKLSAgICAKLXByaXZhdGU6Ci0gICAgQ0dDb250ZXh0UmVmIG1fY2dDb250ZXh0OwotfTsKLQot
Y2xhc3MgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlIHsK
LXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6KCkgeyB9Ci0gICAgdmlydHVhbCB+
S1JlbmRlcmluZ0RldmljZVF1YXJ0eigpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQnVmZmVy
ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gY29udGV4dCBtYW5hZ2VtZW50
LgotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0KCkgY29u
c3Q7Ci0gICAgQ0dDb250ZXh0UmVmIGN1cnJlbnRDR0NvbnRleHQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdl
KikgY29uc3Q7Ci0KLSAgICAvLyBSZXNvdXJjZSBjcmVhdGlvbgotICAgIHZpcnR1YWwgS0NhbnZh
c1Jlc291cmNlICpjcmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSYpIGNvbnN0Owot
ICAgIHZpcnR1YWwgS1JlbmRlcmluZ1BhaW50U2VydmVyICpjcmVhdGVQYWludFNlcnZlcihjb25z
dCBLQ1BhaW50U2VydmVyVHlwZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVm
ZmVjdCAqY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSYpIGNvbnN0
OwotICAgIAotICAgIC8vIGZpbHRlcnMgKG1vc3RseSBkZWJ1Z2dpbmcpCi0gICAgc3RhdGljIGJv
b2wgZmlsdGVyc0VuYWJsZWQoKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRGaWx0ZXJzRW5hYmxlZChi
b29sKTsKLSAgICBzdGF0aWMgYm9vbCBoYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoKTsKLSAgICBz
dGF0aWMgdm9pZCBzZXRIYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoYm9vbCk7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTVkdfU1VQUE9SVAotI2VuZGlmIC8vIEtS
ZW5kZXJpbmdEZXZpY2VRdWFydHpfSApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5k
ZXJpbmdEZXZpY2VRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JKHJldmlzaW9uIDE2NjA4KQorKysga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI2LDEzOSArMjYsNTUgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQ
T1JUCi0jaW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAKICNpbXBvcnQgIkZvdW5k
YXRpb25FeHRyYXMuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIktD
YW52YXNNYXJrZXIuaCIKKyNpbXBvcnQgIktDYW52YXNNYXJrZXIuaCIKICNpbXBvcnQgIktDYW52
YXNGaWx0ZXJRdWFydHouaCIKICNpbXBvcnQgIktDYW52YXNNYXNrZXJRdWFydHouaCIKICNpbXBv
cnQgIktDYW52YXNSZXNvdXJjZXNRdWFydHouaCIKLSNpbXBvcnQgIktSZW5kZXJpbmdGaWxsUGFp
bnRlci5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmgiCi0jaW1wb3J0
ICJLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9y
dCAiUXVhcnR6U3VwcG9ydC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjpLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dFF1YXJ0eihDR0NvbnRleHRSZWYgY29udGV4dCkKLSAgICA6IG1fY2dDb250ZXh0
KENHQ29udGV4dFJldGFpbihjb250ZXh0KSkKLXsKLSAgICBBU1NFUlQobV9jZ0NvbnRleHQpOwot
fQotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6fktSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXVhcnR6KCkKLXsKLSAgICBDR0NvbnRleHRSZWxlYXNlKG1fY2dDb250ZXh0KTsKLX0KLQot
QWZmaW5lVHJhbnNmb3JtIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojpjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB3b3JsZE1hdHJpeCkKLXsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gcmV0ID0gY3RtKCk7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gd01hdHJpeCA9IHdvcmxkTWF0
cml4OwotICAgIENHQ29udGV4dENvbmNhdENUTShtX2NnQ29udGV4dCwgd01hdHJpeCk7Ci0gICAg
cmV0dXJuIHJldDsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
UXVhcnR6OjpjdG0oKSBjb25zdAotewotICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0obV9jZ0Nv
bnRleHQpOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjpjbGVhclBh
dGgoKQotewotICAgIENHQ29udGV4dEJlZ2luUGF0aChtX2NnQ29udGV4dCk7Ci19Ci0KLXZvaWQg
S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBDR0NvbnRleHRBZGRQYXRoKG1fY2dDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgp
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4
dChtX2NnQ29udGV4dCk7Ci19Ci0KLXN0YXRpYyBib29sIF9fdXNlRmlsdGVycyA9IHRydWU7Ci0K
LWJvb2wgS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6ZmlsdGVyc0VuYWJsZWQoKQotewotICAgIHJl
dHVybiBfX3VzZUZpbHRlcnM7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6c2V0
RmlsdGVyc0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIF9fdXNlRmlsdGVycyA9IGVuYWJs
ZWQ7Ci19Ci0KLXN0YXRpYyBib29sIF9fdXNlSGFyZHdhcmVSZW5kZXJpbmcgPSB0cnVlOwotCi1i
b29sIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZCgpCi17
Ci0gICAgcmV0dXJuIF9fdXNlSGFyZHdhcmVSZW5kZXJpbmc7Ci19Ci0KLXZvaWQgS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ejo6c2V0SGFyZHdhcmVSZW5kZXJpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkK
LXsKLSAgICBfX3VzZUhhcmR3YXJlUmVuZGVyaW5nID0gZW5hYmxlZDsKLX0KLQotI3ByYWdtYSBt
YXJrIC0KLSNwcmFnbWEgbWFyayBDb250ZXh0IE1hbmFnZW1lbnQKLQotS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdWFydHoqIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OnF1YXJ0ekNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1
YXJ0eio+KGN1cnJlbnRDb250ZXh0KCkpOwotfQotCi1DR0NvbnRleHRSZWYgS1JlbmRlcmluZ0Rl
dmljZVF1YXJ0ejo6Y3VycmVudENHQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHF1YXJ0
ekNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIHF1YXJ0ekNvbnRleHQoKS0+Y2dDb250ZXh0KCk7Ci19
Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Ojpjb250
ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdlICppbWFnZSkgY29uc3QKK0dyYXBoaWNzQ29udGV4dCog
S1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6Y29udGV4dEZvckltYWdlKEtDYW52YXNJbWFnZSogaW1h
Z2UpIGNvbnN0CiB7CiAgICAgS0NhbnZhc0ltYWdlUXVhcnR6KiBxdWFydHpJbWFnZSA9IHN0YXRp
Y19jYXN0PEtDYW52YXNJbWFnZVF1YXJ0eio+KGltYWdlKTsKICAgICBDR0xheWVyUmVmIGNnTGF5
ZXIgPSBxdWFydHpJbWFnZS0+Y2dMYXllcigpOwogICAgIGlmICghY2dMYXllcikgewogICAgICAg
ICAvLyBGSVhNRTogd2UgbWlnaHQgbm90IGdldCBiYWNrIGEgbGF5ZXIgaWYgdGhpcyBpcyBhIGxv
YWRlZCBpbWFnZQogICAgICAgICAvLyBtYXliZSB0aGlzIGxvZ2ljIHNob3VsZCBnbyBpbnRvIEtD
YW52YXNJbWFnZT8KLSAgICAgICAgY2dMYXllciA9IENHTGF5ZXJDcmVhdGVXaXRoQ29udGV4dChj
dXJyZW50Q0dDb250ZXh0KCksIENHU2l6ZShpbWFnZS0+c2l6ZSgpICsgSW50U2l6ZSgxLDEpKSwg
TlVMTCk7ICAvLyBGSVhNRSArIDEgaXMgYSBoYWNrCisgICAgICAgIGNnTGF5ZXIgPSBDR0xheWVy
Q3JlYXRlV2l0aENvbnRleHQoY3VycmVudENvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIENH
U2l6ZShpbWFnZS0+c2l6ZSgpICsgSW50U2l6ZSgxLDEpKSwgTlVMTCk7ICAvLyBGSVhNRSArIDEg
aXMgYSBoYWNrCiAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgY29tcG9zaXRlIHRoZSBvcmln
aW5hbCBpbWFnZSBvbnRvIHRoZSBsYXllci4uLgogICAgICAgICBxdWFydHpJbWFnZS0+c2V0Q0dM
YXllcihjZ0xheWVyKTsKICAgICAgICAgQ0dMYXllclJlbGVhc2UoY2dMYXllcik7CiAgICAgfQot
ICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dMYXllckdldENv
bnRleHQoY2dMYXllcikpOworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0KENHTGF5ZXJH
ZXRDb250ZXh0KGNnTGF5ZXIpKTsKIH0KIAogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBS
ZXNvdXJjZSBDcmVhdGlvbgogCi1LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKktSZW5kZXJpbmdEZXZp
Y2VRdWFydHo6OmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJiB0eXBl
KSBjb25zdAorS1JlbmRlcmluZ1BhaW50U2VydmVyKiBjcmVhdGVQYWludFNlcnZlcihjb25zdCBL
Q1BhaW50U2VydmVyVHlwZSYgdHlwZSkKIHsKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKm5l
d1NlcnZlciA9IE5VTEw7CiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFBTX1NPTElEOgot
ICAgICAgICBuZXdTZXJ2ZXIgPSBuZXcgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHoo
KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyU29saWRRdWFydHooKTsKICAgICBjYXNlIFBTX1BBVFRFUk46Ci0gICAgICAgIG5ld1NlcnZl
ciA9IG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6KCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFy
dHooKTsKICAgICBjYXNlIFBTX0xJTkVBUl9HUkFESUVOVDoKLSAgICAgICAgbmV3U2VydmVyID0g
bmV3IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXVhcnR6KCk7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50UXVhcnR6KCk7CiAgICAgY2FzZSBQU19SQURJQUxfR1JBRElFTlQ6Ci0gICAgICAgIG5l
d1NlcnZlciA9IG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF1YXJ0eigp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJSYWRpYWxHcmFkaWVudFF1YXJ0eigpOwogICAgIH0KLSAgICByZXR1cm4gbmV3U2VydmVyOwor
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwYWludCBzZXJ2ZXIgb2YgdHlwZTogJWki
LCB0eXBlKTsKKyAgICByZXR1cm4gMDsKIH0KIAotS0NhbnZhc1Jlc291cmNlICpLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6OjpjcmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSYgdHlwZSkg
Y29uc3QKK0tDYW52YXNSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5
cGUmIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBSU19DTElQUEVSOgpA
QCAtMTc2LDcgKzkyLDcgQEAgS0NhbnZhc1Jlc291cmNlICpLUmVuZGVyaW5nRGV2aWNlUXVhcnR6
OgogICAgIHJldHVybiAwOwogfQogCi1LQ2FudmFzRmlsdGVyRWZmZWN0ICpLUmVuZGVyaW5nRGV2
aWNlUXVhcnR6OjpjcmVhdGVGaWx0ZXJFZmZlY3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlJiB0
eXBlKSBjb25zdAorS0NhbnZhc0ZpbHRlckVmZmVjdCogY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0
IEtDRmlsdGVyRWZmZWN0VHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2godHlwZSkKICAgICB7CkBA
IC0yMDYsMTIgKzEyMiw2IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3QgKktSZW5kZXJpbmdEZXZpY2VR
dWEKICAgICB9CiB9CiAKLUtSZW5kZXJpbmdEZXZpY2UqIHJlbmRlcmluZ0RldmljZSgpCi17Ci0g
ICAgc3RhdGljIEtSZW5kZXJpbmdEZXZpY2UqIHNoYXJlZFJlbmRlcmluZ0RldmljZSA9IG5ldyBL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6KCk7Ci0gICAgcmV0dXJuIHNoYXJlZFJlbmRlcmluZ0Rldmlj
ZTsKLX0KLQogfQogCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRR
dWFydHoubW0JKHJldmlzaW9uIDE2NjA4KQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
OCArMjksMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAogI2lt
cG9ydCAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmgiCi0jaW1wb3J0ICJRdWFydHpTdXBw
b3J0LmgiCi0KLSNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgogCisjaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbXBvcnQgIktDYW52YXNJbWFnZS5oIgogI2ltcG9ydCAiS0NhbnZhc1JlbmRl
cmluZ1N0eWxlLmgiCi0jaW1wb3J0ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKKyNpbXBvcnQg
IktDYW52YXNSZXNvdXJjZXNRdWFydHouaCIKICNpbXBvcnQgIktSZW5kZXJpbmdGaWxsUGFpbnRl
ci5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKLSNpbXBvcnQgIktSZW5k
ZXJpbmdEZXZpY2VRdWFydHouaCIKLQotI2ltcG9ydCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5o
IgotI2ltcG9ydCAiS0NhbnZhc0ltYWdlLmgiCisjaW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCisj
aW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKIAogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KIApA
QCAtNDksNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgdm9pZCBjZ0dyYWRp
ZW50Q2FsbGJhY2sodm9pZCogaW5mbywgY29uc3QgQ0dGbG9hdCogaW5WYWx1ZXMsIENHRmxvYXQq
IG91dENvbG9yKQogewogICAgIGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVh
cnR6KiBzZXJ2ZXIgPSAoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoq
KWluZm87Ci0gICAgUXVhcnR6R3JhZGllbnRTdG9wICpzdG9wcyA9IHNlcnZlci0+bV9zdG9wc0Nh
Y2hlOworICAgIFF1YXJ0ekdyYWRpZW50U3RvcCogc3RvcHMgPSBzZXJ2ZXItPm1fc3RvcHNDYWNo
ZTsKICAgICBpbnQgc3RvcHNDb3VudCA9IHNlcnZlci0+bV9zdG9wc0NvdW50OwogICAgIAogICAg
IENHRmxvYXQgaW5WYWx1ZSA9IGluVmFsdWVzWzBdOwpAQCAtMjEyLDcgKzIwOSw3IEBAIHZvaWQg
S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQKICAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudDo6aW52YWxpZGF0ZSgpOwogfQogCi12b2lkIEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50UXVhcnR6OjpkcmF3KGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250
ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25z
dAordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6ZHJhdyhjb25zdCBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCogc2VydmVyLCBHcmFwaGljc0NvbnRleHQqIHJl
bmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKCFzZXR1cChzZXJ2ZXIsIHJlbmRlcmluZ0NvbnRleHQs
IHBhdGgsIHR5cGUpKQogICAgICAgICByZXR1cm47CkBAIC0yMjAsNyArMjE3LDcgQEAgdm9pZCBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0egogICAgIHRlYXJkb3duKHNlcnZlciwg
cmVuZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSk7CiB9CiAKLWJvb2wgS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnRRdWFydHo6OnNldHVwKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0
LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlw
ZSkgY29uc3QKK2Jvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OnNldHVw
KGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEdyYXBoaWNzQ29u
dGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKHNlcnZlci0+bGlzdGVu
ZXIoKSkgLy8gdGhpcyBzZWVtcyBsaWtlIGJhZCBkZXNpZ24gdG8gbWUsIHNob3VsZCBiZSBpbiBh
IGNvbW1vbiBiYXNlY2xhc3MuIC0tIGVjcyA4LzYvMDUKICAgICAgICAgc2VydmVyLT5saXN0ZW5l
cigpLT5yZXNvdXJjZU5vdGlmaWNhdGlvbigpOwpAQCAtMjMzLDggKzIzMCw3IEBAIGJvb2wgS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoKICAgICBpZiAoIW1fc2hhZGluZ0NhY2hl
KQogICAgICAgICBjb25zdF9jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6
Kj4odGhpcyktPnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2FjaGUoc2VydmVyKTsKICAgICAKLSAgICBL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6KiBxdWFydHpEZXZpY2UgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nRGV2aWNlUXVhcnR6Kj4ocmVuZGVyaW5nRGV2aWNlKCkpOwotICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcXVhcnR6RGV2aWNlLT5jdXJyZW50Q0dDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJPYmplY3QtPnN0eWxlKCk7CiAgICAgQVNT
RVJUKGNvbnRleHQgIT0gTlVMTCk7CiAgICAgCkBAIC0yNTEsMTQgKzI0NywxNCBAQCBib29sIEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6CiAgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7CiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4
dCwgcmVuZGVyU3R5bGUsIHJlbmRlck9iamVjdCk7IC8vIEZJWE1FOiB0aGlzIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHBsYWNlIGZvciB0aGlzLgogICAgICAgICBpZiAoc2VydmVyLT5pc1BhaW50aW5n
VGV4dCgpKSB7Ci0gICAgICAgICAgICBtX21hc2tJbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJ
bWFnZSo+KHF1YXJ0ekRldmljZS0+Y3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsKKyAgICAgICAg
ICAgIG1fbWFza0ltYWdlID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ltYWdlKj4oY3JlYXRlUmVzb3Vy
Y2UoUlNfSU1BR0UpKTsKICAgICAgICAgICAgIGludCB3aWR0aCAgPSAyMDQ4OwogICAgICAgICAg
ICAgaW50IGhlaWdodCA9IDIwNDg7IC8vIEZJWE1FPz8/CiAgICAgICAgICAgICBJbnRTaXplIHNp
emUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgbV9tYXNrSW1hZ2UtPmlu
aXQoc2l6ZSk7Ci0gICAgICAgICAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogbWFza0ltYWdl
Q29udGV4dCA9IHF1YXJ0ekRldmljZS0+Y29udGV4dEZvckltYWdlKG1fbWFza0ltYWdlKTsKKyAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IGNvbnRleHRGb3JJ
bWFnZShtX21hc2tJbWFnZSk7CiAgICAgICAgICAgICBxdWFydHpEZXZpY2UtPnB1c2hDb250ZXh0
KG1hc2tJbWFnZUNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0UmVmIG1hc2tDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihtYXNrSW1hZ2VD
b250ZXh0KS0+Y2dDb250ZXh0KCk7CisgICAgICAgICAgICBDR0NvbnRleHRSZWYgbWFza0NvbnRl
eHQgPSBtYXNrSW1hZ2VDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4ocmVuZGVyT2JqZWN0KS0+c3R5bGUoKS0+c2V0Q29sb3Io
Q29sb3IoMjU1LCAyNTUsIDI1NSkpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdp
bmdNb2RlKG1hc2tDb250ZXh0LCBrQ0dUZXh0U3Ryb2tlKTsKICAgICAgICAgfQpAQCAtMjY2LDEw
ICsyNjIsOSBAQCBib29sIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFy
dHo6OnJlbmRlclBhdGgoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZl
ciwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRl
clBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6OjpyZW5kZXJQYXRoKGNvbnN0IEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29u
dGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29u
c3QKIHsgICAgCi0gICAgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiogcXVhcnR6RGV2aWNlID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZVF1YXJ0eio+KHJlbmRlcmluZ0RldmljZSgpKTsKLSAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0ekRldmljZS0+Y3VycmVudENHQ29udGV4dCgp
OworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcGF0aC0+c3R5bGUoKTsK
ICAgICBBU1NFUlQoY29udGV4dCAhPSBOVUxMKTsKICAgICAKQEAgLTI5NCwxMiArMjg5LDExIEBA
IHZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoKICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgZ3JhZGllbnRUcmFuc2Zvcm0pOwogfQogCi12b2lkIEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Ojp0ZWFyZG93bihjb25zdCBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudCAqc2VydmVyLCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVuZGVy
aW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVh
cnR6Ojp0ZWFyZG93bihjb25zdCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqc2VydmVy
LCBHcmFwaGljc0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogeyAKICAgICBDR1No
YWRpbmdSZWYgc2hhZGluZyA9IG1fc2hhZGluZ0NhY2hlOwogICAgIEtDYW52YXNJbWFnZSogbWFz
a0ltYWdlID0gbV9tYXNrSW1hZ2U7Ci0gICAgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiogcXVhcnR6
RGV2aWNlID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZVF1YXJ0eio+KHJlbmRlcmluZ0Rl
dmljZSgpKTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0ekRldmljZS0+Y3VycmVu
dENHQ29udGV4dCgpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcmVu
ZGVyT2JqZWN0LT5zdHlsZSgpOwogICAgIEFTU0VSVChjb250ZXh0ICE9IE5VTEwpOwogICAgIApJ
bmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJRdWFydHouaAkocmV2aXNpb24gMTY2MDgpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS1Jl
bmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbXBvcnQgIktSZW5kZXJpbmdEZXZpY2UuaCIK
ICNpbXBvcnQgIktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmgiCiAjaW1wb3J0ICJLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJH
cmFkaWVudC5oIgpAQCAtNDQsMjEgKzQzLDIxIEBAIHB1YmxpYzoKIGNsYXNzIEtSZW5kZXJpbmdQ
YWludFNlcnZlclNvbGlkUXVhcnR6IDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlk
IHsKIHB1YmxpYzoKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0eigpIHt9Owot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0
dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50
VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRl
clBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNldHVw
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwogcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29u
c3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWlu
dFRhcmdldFR5cGUpIGNvbnN0OwogfTsKIAogY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0
dGVyblF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuIHsKIHB1Ymxp
YzoKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6KCkge30KLSAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgq
LCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5
cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwg
S0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRl
ck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIHByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRl
clBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlbmRl
clBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRU
eXBlKSBjb25zdDsKIHByaXZhdGU6CiAgICAgbXV0YWJsZSBDR0NvbG9yU3BhY2VSZWYgbV9wYXR0
ZXJuU3BhY2U7CiAgICAgbXV0YWJsZSBDR1BhdHRlcm5SZWYgbV9wYXR0ZXJuOwpAQCAtODAsMTAg
Kzc5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVF1YXJ0ekdyYWRpZW50U3RvcHNDYWNo
ZShjb25zdCBWZWN0b3I8S0NHcmFkaWVudFN0b3A+JiBzdG9wcyk7CiAgICAgdm9pZCB1cGRhdGVR
dWFydHpHcmFkaWVudENhY2hlKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBz
ZXJ2ZXIpOwogCi0gICAgdm9pZCBkcmF3KGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRp
ZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCos
IEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLSAgICBib29sIHNldHVwKGNvbnN0IEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwotICAgIHZvaWQg
dGVhcmRvd24oY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlciwgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0
VHlwZSkgY29uc3Q7Ci0gICAgdm9pZCByZW5kZXJQYXRoKGNvbnN0IEtSZW5kZXJpbmdQYWludFNl
cnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2b2lkIGRyYXcoY29uc3Qg
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlciwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICBib29sIHNl
dHVwKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsK
KyAgICB2b2lkIHRlYXJkb3duKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBz
ZXJ2ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJn
ZXRUeXBlKSBjb25zdDsKKyAgICB2b2lkIHJlbmRlclBhdGgoY29uc3QgS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnQqIHNlcnZlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0
aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIAogcHVibGljOgogICAgIC8vIGR1ZSB0byBj
IGZ1bmN0aW9ucwpAQCAtMTAxLDEzICsxMDAsMTMgQEAgY2xhc3MgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyTGluZWFyR3JhZGllbgogcHVibGljOgogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50UXVhcnR6KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29u
c3QgUmVuZGVyUGF0aCogcmVuZGVyUGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJl
bmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiAgICAg
ICAgIHsgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OmRyYXcodGhpcywgY29u
dGV4dCwgcmVuZGVyUGF0aCwgdHlwZSk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorICAgIHZpcnR1YWwgYm9vbCBzZXR1
cChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAgICAgICB7IHJldHVybiBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6c2V0dXAodGhpcywgY29udGV4dCwgcmVu
ZGVyT2JqZWN0LCB0eXBlKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3du
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiAgICAgICAgIHsgS1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnRRdWFydHo6OnRlYXJkb3duKHRoaXMsIGNvbnRleHQsIHJlbmRlck9i
amVjdCwgdHlwZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcmVuZGVyUGF0aCwgS0NQYWlu
dFRhcmdldFR5cGUgdHlwZSkgY29uc3QKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFp
bnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiAgICAgICAgIHsgS1JlbmRlcmluZ1BhaW50U2VydmVy
R3JhZGllbnRRdWFydHo6OnJlbmRlclBhdGgodGhpcywgY29udGV4dCwgcmVuZGVyUGF0aCwgdHlw
ZSk7IH0KIH07CiAKQEAgLTExNiwxMyArMTE1LDEzIEBAIGNsYXNzIEtSZW5kZXJpbmdQYWludFNl
cnZlclJhZGlhbEdyYWRpZW4KIHB1YmxpYzoKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRp
YWxHcmFkaWVudFF1YXJ0eigpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0
CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAg
ICAgICB7IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6OjpkcmF3KHRoaXMsIGNv
bnRleHQsIHJlbmRlclBhdGgsIHR5cGUpOyB9Ci0gICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgc2V0
dXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OnNldHVwKHRoaXMsIGNvbnRleHQsIHJl
bmRlck9iamVjdCwgdHlwZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAgICAgICB7IEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50UXVhcnR6Ojp0ZWFyZG93bih0aGlzLCBjb250ZXh0LCByZW5kZXJP
YmplY3QsIHR5cGUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFp
bnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1Bh
aW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAgICAgICB7IEtSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50UXVhcnR6OjpyZW5kZXJQYXRoKHRoaXMsIGNvbnRleHQsIHJlbmRlclBhdGgsIHR5
cGUpOyB9CiB9OwogCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50
U2VydmVyUXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHoubW0JKHJldmlzaW9uIDE2NjA4KQorKysga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjksMTUgKzI5LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NV
UFBPUlQKICNpbXBvcnQgIktSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oIgotI2ltcG9ydCAi
UXVhcnR6U3VwcG9ydC5oIgotI2ltcG9ydCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIgotI2lt
cG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogCisjaW1wb3J0ICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbXBvcnQgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2ltcG9ydCAiS1JlbmRl
cmluZ1BhaW50U2VydmVyLmgiCisjaW1wb3J0ICJLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmgiCiAj
aW1wb3J0ICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKKyNpbXBvcnQgIktSZW5kZXJpbmdQYWlu
dFNlcnZlci5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKLSNpbXBvcnQg
IktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbXBvcnQgIlF1YXJ0elN1cHBvcnQuaCIKIAogI2ltcG9y
dCAiTG9nZ2luZy5oIgogCkBAIC03MCw3ICs2OSw3IEBAIHZvaWQgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyUXVhcnR6SGVscGVyOjoKICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKIH0gICAg
CiAKLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OmRyYXcoS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgs
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZl
clNvbGlkUXVhcnR6OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29u
c3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAg
ICBpZiAoIXNldHVwKHJlbmRlcmluZ0NvbnRleHQsIHBhdGgsIHR5cGUpKQogICAgICAgICByZXR1
cm47CkBAIC03OCwxMCArNzcsOSBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXVh
cnR6OjpkCiAgICAgdGVhcmRvd24ocmVuZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSk7CiB9CiAK
LWJvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OnNldHVwKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK2Jvb2wgS1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWRRdWFydHo6OnNldHVwKEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29u
dGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0
ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KHJl
bmRlcmluZ0NvbnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcXVhcnR6Q29udGV4
dC0+Y2dDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSByZW5kZXJpbmdDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBy
ZW5kZXJPYmplY3QtPnN0eWxlKCk7CiAKICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBy
ZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsKQEAgLTExNCwxOCArMTEyLDE3IEBAIGJvb2wgS1JlbmRl
cmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0ejo6cmVuZGVyUGF0aChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcmVuZGVy
UGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRRdWFydHo6OnJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiByZW5kZXJpbmdD
b250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0
eXBlKSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHJlbmRlclBhdGgt
PnN0eWxlKCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0ekNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KHJlbmRlcmlu
Z0NvbnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcXVhcnR6Q29udGV4dC0+Y2dD
b250ZXh0KCk7ICAgIAorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7ICAgIAogICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwp
ICYmIEtTVkdQYWludGVyRmFjdG9yeTo6aXNGaWxsZWQocmVuZGVyU3R5bGUpKQogICAgICAgICBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHpIZWxwZXI6OmZpbGxQYXRoKGNvbnRleHQsIHJlbmRl
clBhdGgpOwogICAgIGlmICgodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgS1NWR1BhaW50ZXJG
YWN0b3J5Ojppc1N0cm9rZWQocmVuZGVyU3R5bGUpKQogICAgICAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJRdWFydHpIZWxwZXI6OnN0cm9rZVBhdGgoY29udGV4dCwgcmVuZGVyUGF0aCk7CiB9CiAK
LXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OnRlYXJkb3duKEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgS1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWRRdWFydHo6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dCogcmVuZGVy
aW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiB9CiAKQEAgLTEzNSw3ICsxMzIsNyBAQCB2b2lkIHBhdHRl
cm5DYWxsYmFjayh2b2lkICppbmZvLCBDR0NvbnRlCiAgICAgQ0dDb250ZXh0RHJhd0xheWVyQXRQ
b2ludChjb250ZXh0LCBDR1BvaW50WmVybywgbGF5ZXIpOwogfQogCi12b2lkIEtSZW5kZXJpbmdQ
YWludFNlcnZlclBhdHRlcm5RdWFydHo6OmRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJl
bmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBw
YXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIGlmICghc2V0dXAocmVu
ZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MywxNSAr
MTQwLDE0IEBAIHZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF1YXJ0ejoKICAgICB0
ZWFyZG93bihyZW5kZXJpbmdDb250ZXh0LCBwYXRoLCB0eXBlKTsKIH0KIAotYm9vbCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6OjpzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtD
UGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Citib29sIEtSZW5kZXJpbmdQYWludFNlcnZlclBh
dHRlcm5RdWFydHo6OnNldHVwKEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29u
c3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNv
bnN0CiB7CiAgICAgaWYobGlzdGVuZXIoKSkgLy8gdGhpcyBzZWVtcyBsaWtlIGJhZCBkZXNpZ24g
dG8gbWUsIHNob3VsZCBiZSBpbiBhIGNvbW1vbiBiYXNlY2xhc3MuIC0tIGVjcyA4LzYvMDUKICAg
ICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsKIAogICAgIFJlbmRlclN0
eWxlKiByZW5kZXJTdHlsZSA9IHJlbmRlck9iamVjdC0+c3R5bGUoKTsKIAotICAgIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRl
cmluZ0RldmljZUNvbnRleHRRdWFydHoqPihyZW5kZXJpbmdDb250ZXh0KTsKLSAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOworICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKICAg
ICBLQ2FudmFzSW1hZ2UqIGNlbGwgPSB0aWxlKCk7CiAgICAgaWYgKCFjZWxsKQpAQCAtMjA4LDEy
ICsyMDQsMTAgQEAgYm9vbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6OgogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFy
dHo6OnJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQs
IGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNv
bnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6OnJlbmRlclBhdGgo
R3JhcGhpY3NDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5k
ZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIFJlbmRlclN0eWxl
KiByZW5kZXJTdHlsZSA9IHJlbmRlclBhdGgtPnN0eWxlKCk7Ci0KLSAgICBLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dFF1YXJ0eiogcXVhcnR6Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0UXVhcnR6Kj4ocmVuZGVyaW5nQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBxdWFydHpDb250ZXh0LT5jZ0NvbnRleHQoKTsKKyAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYg
KCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojppc0ZpbGxlZChy
ZW5kZXJTdHlsZSkpCiAgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ekhlbHBlcjo6
ZmlsbFBhdGgoY29udGV4dCwgcmVuZGVyUGF0aCk7CkBAIC0yMjIsMTMgKzIxNiwxMSBAQCB2b2lk
IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6CiAgICAgICAgIEtSZW5kZXJpbmdQ
YWludFNlcnZlclF1YXJ0ekhlbHBlcjo6c3Ryb2tlUGF0aChjb250ZXh0LCByZW5kZXJQYXRoKTsK
IH0KIAotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6Ojp0ZWFyZG93bihL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4
dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtD
UGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdWFydHoqIHF1YXJ0ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dFF1YXJ0eio+KHJlbmRlcmluZ0NvbnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcXVhcnR6Q29udGV4dC0+Y2dDb250ZXh0KCk7CiAgICAgQ0dQYXR0ZXJuUmVsZWFzZShtX3Bh
dHRlcm4pOwogICAgIENHQ29sb3JTcGFjZVJlbGVhc2UobV9wYXR0ZXJuU3BhY2UpOwotICAgIENH
Q29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShyZW5kZXJpbmdDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKIH0KSW5kZXg6IGtz
dmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9t
aXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDE2NjA4KQorKysga3N2ZzIv
bWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw2IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgiCiAjaW5jbHVkZSAi
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJTb2xpZC5oIgpAQCAtNDQsNyArNDMsNyBAQCBzdGF0aWMgS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWQqIHNoYXJlCiB7CiAgICAgc3RhdGljIEtSZW5kZXJpbmdQYWludFNlcnZlclNv
bGlkKiBfc2hhcmVkU29saWRQYWludFNlcnZlciA9IDA7CiAgICAgaWYgKCFfc2hhcmVkU29saWRQ
YWludFNlcnZlcikKLSAgICAgICAgX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIgPSBzdGF0aWNfY2Fz
dDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQ
YWludFNlcnZlcihQU19TT0xJRCkpOworICAgICAgICBfc2hhcmVkU29saWRQYWludFNlcnZlciA9
IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkKj4oY3JlYXRlUGFpbnRTZXJ2
ZXIoUFNfU09MSUQpKTsKICAgICByZXR1cm4gX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXI7CiB9CiAK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gMTY2MDgpCisrKyBrc3ZnMi9zdmcvU1ZHQUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBACiAjaW5jbHVkZSAiU1ZHSGVs
cGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJjc3NoZWxwZXIuaCIKLSNp
bmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUgPGtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNw
cAkocmV2aXNpb24gMTY2MDgpCisrKyBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBl
cy5oIgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTc4LDcgKzc3LDcgQEAgS0NhbnZhc0NsaXBwZXIg
KlNWR0NsaXBQYXRoRWxlbWVudDo6Y2FudgogICAgIGlmICghdmlldygpKQogICAgICAgICByZXR1
cm4gMDsKICAgICBpZiAoIW1fY2xpcHBlcikKLSAgICAgICAgbV9jbGlwcGVyID0gc3RhdGljX2Nh
c3Q8S0NhbnZhc0NsaXBwZXIgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJT
X0NMSVBQRVIpKTsKKyAgICAgICAgbV9jbGlwcGVyID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0NsaXBw
ZXIgKj4oY3JlYXRlUmVzb3VyY2UoUlNfQ0xJUFBFUikpOwogICAgIGVsc2UKICAgICAgICAgbV9j
bGlwcGVyLT5yZXNldENsaXBEYXRhKCk7CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUJsZW5kRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTY2MDgpCisrKyBrc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogCiAjaW5jbHVk
ZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tS
ZW5kZXJpbmdEZXZpY2UuaD4KIAogI2luY2x1ZGUgImtzdmcuaCIKICNpbmNsdWRlICJTVkdIZWxw
ZXIuaCIKQEAgLTc3LDcgKzc2LDcgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaQogS0NhbnZhc0ZFQmxlbmQgKlNWR0ZFQmxlbmRFbGVtZW50OjpmaWx0ZXJFZmZlY3Qo
KSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZm
ZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFQmxlbmQgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNy
ZWF0ZUZpbHRlckVmZmVjdChGRV9CTEVORCkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0
YXRpY19jYXN0PEtDYW52YXNGRUJsZW5kICo+KGNyZWF0ZUZpbHRlckVmZmVjdChGRV9CTEVORCkp
OwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRCbGVuZE1vZGUoKEtDQmxlbmRNb2RlVHlwZSkobW9kZSgpLTEpKTsKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gMTY2MDgpCisr
KyBrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc0Zp
bHRlcnMuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiS1JlbmRl
cmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgImtzdmcuaCIKQEAgLTc4LDcg
Kzc3LDcgQEAgdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VNYXBwZQogS0NhbnZh
c0ZFQ29sb3JNYXRyaXggKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBj
b25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0
ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFQ29sb3JNYXRyaXggKj4ocmVuZGVyaW5nRGV2aWNlKCkt
PmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT0xPUl9NQVRSSVgpKTsKKyAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVDb2xvck1hdHJpeCAqPihjcmVhdGVGaWx0ZXJF
ZmZlY3QoRkVfQ09MT1JfTUFUUklYKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysrIGtzdmcyL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYg
QEAKICNpbmNsdWRlICJBdHRyLmgiCiAKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgotI2lu
Y2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKIAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5j
bHVkZSAiU1ZHSGVscGVyLmgiCkBAIC02Myw3ICs2Miw3IEBAIHZvaWQgU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQ6OnBhcnMKIEtDYW52YXNGRUNvbXBvbmVudFRyYW5zZmVyICpTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtD
YW52YXNGRUNvbXBvbmVudFRyYW5zZmVyICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfQ09NUE9ORU5UX1RSQU5TRkVSKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0
ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFQ29tcG9uZW50VHJhbnNmZXIgKj4oY3JlYXRlRmlsdGVy
RWZmZWN0KEZFX0NPTVBPTkVOVF9UUkFOU0ZFUikpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3Qp
CiAgICAgICAgIHJldHVybiAwOwogICAgIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2NjA4KQorKysga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJBdHRyLmgi
CiAKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZp
Y2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgogCiAjaW5j
bHVkZSAia3N2Zy5oIgpAQCAtOTcsNyArOTYsNyBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVu
dDo6cGFyc2VNYXBwZWRBCiBLQ2FudmFzRkVDb21wb3NpdGUgKlNWR0ZFQ29tcG9zaXRlRWxlbWVu
dDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAg
ICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUNvbXBvc2l0ZSAqPihy
ZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0NPTVBPU0lURSkpOworICAg
ICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUNvbXBvc2l0ZSAqPihj
cmVhdGVGaWx0ZXJFZmZlY3QoRkVfQ09NUE9TSVRFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVj
dCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldE9wZXJhdGlvbigo
S0NDb21wb3NpdGVPcGVyYXRpb25UeXBlKShfb3BlcmF0b3IoKSAtIDEpKTsKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysr
IGtzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogCiAjaW5jbHVkZSA8a2NhbnZh
cy9LQ2FudmFzRmlsdGVycy5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdE
ZXZpY2UuaD4KIAogI2luY2x1ZGUgImtzdmcuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAt
ODIsNyArODEsNyBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNCiBL
Q2FudmFzRmlsdGVyRWZmZWN0ICpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVm
ZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkgCi0gICAgICAgIG1fZmls
dGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nICo+KHJlbmRl
cmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElGRlVTRV9MSUdIVElORykpOwor
ICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURpZmZ1c2VMaWdo
dGluZyAqPihjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElGRlVTRV9MSUdIVElORykpOwogICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRJbihpbjEoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1f
ZmlsdGVyRWZmZWN0KTsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RGlmZnVzZUNvbnN0YW50KChk
aWZmdXNlQ29uc3RhbnQoKSkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjA4KQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNs
dWRlICJBdHRyLmgiCiAKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmg+Ci0jaW5j
bHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiAjaW5jbHVkZSAia3N2
Zy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgpAQCAtODYsNyArODUsNyBAQCB2b2lkIFNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudDo6cGFyc2VNCiBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAq
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19j
YXN0PEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRl
RmlsdGVyRWZmZWN0KEZFX0RJU1BMQUNFTUVOVF9NQVApKTsKKyAgICAgICAgbV9maWx0ZXJFZmZl
Y3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAgKj4oY3JlYXRlRmlsdGVy
RWZmZWN0KEZFX0RJU1BMQUNFTUVOVF9NQVApKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQog
ICAgICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0WENoYW5uZWxTZWxlY3Rv
cigoS0NDaGFubmVsU2VsZWN0b3JUeXBlKSh4Q2hhbm5lbFNlbGVjdG9yKCkpKTsKSW5kZXg6IGtz
dmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R0ZFRmxvb2RFbGVtZW50LmNwcAkocmV2aXNpb24gMTY2MDgpCisrKyBrc3ZnMi9zdmcvU1ZHRkVG
bG9vZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIktD
YW52YXNGaWx0ZXJzLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTU5LDcgKzU4LDcgQEAgdm9pZCBTVkdGRUZsb29kRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaQogS0NhbnZhc0ZFRmxvb2QgKlNWR0ZFRmxvb2RFbGVtZW50OjpmaWx0
ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1f
ZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRmxvb2QgKj4ocmVuZGVyaW5nRGV2
aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9GTE9PRCkpOworICAgICAgICBtX2ZpbHRlckVm
ZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUZsb29kICo+KGNyZWF0ZUZpbHRlckVmZmVjdChG
RV9GTE9PRCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihpbjEoKSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTY2MDgpCisrKyBrc3ZnMi9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAog
I2luY2x1ZGUgIkF0dHIuaCIKIAogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCi0jaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50LmgiCiAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtNzgsNyArNzcsNyBAQCB2b2lk
IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6cGFyc2VNYXBwCiBLQ2FudmFzRkVHYXVzc2lhbkJs
dXIgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19j
YXN0PEtDYW52YXNGRUdhdXNzaWFuQmx1ciAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmls
dGVyRWZmZWN0KEZFX0dBVVNTSUFOX0JMVVIpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKj4oY3JlYXRlRmlsdGVyRWZmZWN0KEZF
X0dBVVNTSUFOX0JMVVIpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1
cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4xKCkpOwpJbmRleDoga3N2ZzIvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVJbWFn
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysrIGtzdmcyL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJTVkdI
ZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZh
c0ltYWdlLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgog
I2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC05Miw3ICs5MSw3IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6
Om5vdGlmeUZpbmlzaGVkKEMKIEtDYW52YXNGRUltYWdlICpTVkdGRUltYWdlRWxlbWVudDo6Zmls
dGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBt
X2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUltYWdlICo+KHJlbmRlcmluZ0Rl
dmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfSU1BR0UpKTsKKyAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVJbWFnZSAqPihjcmVhdGVGaWx0ZXJFZmZlY3Qo
RkVfSU1BR0UpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsK
ICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwpJbmRleDoga3N2ZzIv
c3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVM
aWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysrIGtzdmcyL3N2Zy9TVkdGRUxpZ2h0
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJB
dHRyLmgiCiAKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgotI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2UuaCIKIAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjA4KQorKysga3N2
ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUs
NiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKIAogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ZpbHRl
cnMuaD4KLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKICNp
bmNsdWRlICJrc3ZnLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCkBAIC00OSw3ICs0OCw3IEBA
IFNWR0ZFTWVyZ2VFbGVtZW50Ojp+U1ZHRkVNZXJnZUVsZW1lbnQoKQogS0NhbnZhc0ZFTWVyZ2Ug
KlNWR0ZFTWVyZ2VFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9m
aWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZh
c0ZFTWVyZ2UgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9NRVJH
RSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRU1lcmdl
ICo+KGNyZWF0ZUZpbHRlckVmZmVjdChGRV9NRVJHRSkpOwogICAgIGlmICghbV9maWx0ZXJFZmZl
Y3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRl
ckVmZmVjdCk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTY2MDgp
CisrKyBrc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKIAogI2luY2x1ZGUgIktDYW52YXNGaWx0
ZXJzLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIktSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50LmgiCiAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKQEAgLTY3
LDcgKzY2LDcgQEAgdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cgogS0Nh
bnZhc0ZFT2Zmc2V0ICpTVkdGRU9mZnNldEVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0
aWNfY2FzdDxLQ2FudmFzRkVPZmZzZXQgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRl
ckVmZmVjdChGRV9PRkZTRVQpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2Fz
dDxLQ2FudmFzRkVPZmZzZXQgKj4oY3JlYXRlRmlsdGVyRWZmZWN0KEZFX09GRlNFVCkpOwogICAg
IGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRJbihpbjEoKSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysrIGtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2lu
Y2x1ZGUgIkF0dHIuaCIKIAogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KLSNp
bmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgpAQCAtOTAsNyArODksNyBAQCB2b2lk
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNlCiBLQ2FudmFzRkVTcGVjdWxhckxp
Z2h0aW5nICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25z
dAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIAotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9
IHN0YXRpY19jYXN0PEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKj4ocmVuZGVyaW5nRGV2aWNl
KCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9TUEVDVUxBUl9MSUdIVElORykpOworICAgICAgICBt
X2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKj4o
Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1NQRUNVTEFSX0xJR0hUSU5HKSk7CiAgICAgbV9maWx0ZXJF
ZmZlY3QtPnNldEluKGluMSgpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJF
ZmZlY3QpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTcGVjdWxhckNvbnN0YW50KChzcGVjdWxh
ckNvbnN0YW50KCkpKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjA4
KQorKysga3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2Fu
dmFzRmlsdGVycy5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2Uu
aD4KIAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgi
CkBAIC01OCw3ICs1Nyw3IEBAIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWIKIEtDYW52YXNGRVRpbGUgKlNWR0ZFVGlsZUVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzRkVUaWxlICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfVElMRSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0
PEtDYW52YXNGRVRpbGUgKj4oY3JlYXRlRmlsdGVyRWZmZWN0KEZFX1RJTEUpKTsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4oaW4xKCkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkocmV2
aXNpb24gMTY2MDgpCisrKyBrc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAKICNpbmNs
dWRlICJLQ2FudmFzRmlsdGVycy5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNp
bmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgogCiAjaW5jbHVkZSAia3N2
Zy5oIgpAQCAtOTgsNyArOTcsNyBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkCiBLQ2FudmFzRkVUdXJidWxlbmNlICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpmaWx0
ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1f
ZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFVHVyYnVsZW5jZSAqPihyZW5kZXJp
bmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1RVUkJVTEVOQ0UpKTsKKyAgICAgICAg
bV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVUdXJidWxlbmNlICo+KGNyZWF0
ZUZpbHRlckVmZmVjdChGRV9UVVJCVUxFTkNFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjYwOCkKKysrIGtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNiBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiQXR0
ci5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIktDYW52YXNG
aWx0ZXJzLmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKQEAgLTEyMSw3ICsxMjAsNyBAQCBLQ2FudmFzRmlsdGVyICpTVkdGaWx0ZXJFbGVtZW50Ojpj
YW52YXNSCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2ZpbHRlcikKLSAgICAgICAg
bV9maWx0ZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRmlsdGVyICo+KHJlbmRlcmluZ0RldmljZSgp
LT5jcmVhdGVSZXNvdXJjZShSU19GSUxURVIpKTsKKyAgICAgICAgbV9maWx0ZXIgPSBzdGF0aWNf
Y2FzdDxLQ2FudmFzRmlsdGVyICo+KGNyZWF0ZVJlc291cmNlKFJTX0ZJTFRFUikpOwogCiAgICAg
Ym9vbCBmaWx0ZXJCQm94TW9kZSA9IGZpbHRlclVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdf
VU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJCb3Vu
ZGluZ0JveE1vZGUoZmlsdGVyQkJveE1vZGUpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0dFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NjYwOCkKKysrIGtzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDYgQEAKICNpbmNsdWRlICJTVkdHRWxlbWVudC5oIgogCiAjaW5jbHVkZSA8a2NhbnZh
cy9SZW5kZXJTVkdDb250YWluZXIuaD4KLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVy
aW5nRGV2aWNlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDoga3N2ZzIvc3ZnL1NW
R0dyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0dyYWRpZW50
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjA4KQorKysga3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJTVkdU
cmFuc2Zvcm1hYmxlLmgiCiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUg
IlNWR1VuaXRUeXBlcy5oIgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZp
Y2UuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFk
aWVudC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTExMiw3ICsxMTEsNyBAQCB2
b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6bm90aWZ5QXR0cmlidXRlCiBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudCAqU1ZHR3JhZGllbnRFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCiB7CiAg
ICAgaWYgKCFtX3Jlc291cmNlKSB7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqdGVt
cCA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihncmFkaWVudFR5cGUoKSk7
CisgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqdGVtcCA9IGNyZWF0ZVBhaW50U2VydmVy
KGdyYWRpZW50VHlwZSgpKTsKICAgICAgICAgbV9yZXNvdXJjZSA9IHN0YXRpY19jYXN0PEtSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50ICo+KHRlbXApOwogICAgICAgICBtX3Jlc291cmNlLT5z
ZXRMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgYnVpbGRHcmFkaWVudChtX3Jlc291cmNlKTsKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjYwOCkK
KysrIGtzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0Rl
dmljZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
NjA4KQorKysga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiU1ZHTWFya2VyRWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiQXR0ci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlNWR0FuZ2xlLmgiCkBAIC0xMDgsNyArMTA3LDcgQEAgdm9pZCBTVkdNYXJrZXJFbGVtZW50Ojpz
ZXRPcmllbnRUb0F1dG8oKQogICAgIHNldE9yaWVudFR5cGVCYXNlVmFsdWUoU1ZHX01BUktFUl9P
UklFTlRfQVVUTyk7CiB9CiAKLXZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c2V0T3JpZW50VG9Bbmds
ZShTVkdBbmdsZSAqYW5nbGUpCit2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnNldE9yaWVudFRvQW5n
bGUoU1ZHQW5nbGUqIGFuZ2xlKQogewogICAgIHNldE9yaWVudFR5cGVCYXNlVmFsdWUoU1ZHX01B
UktFUl9PUklFTlRfQU5HTEUpOwogICAgIHNldE9yaWVudEFuZ2xlQmFzZVZhbHVlKGFuZ2xlKTsK
QEAgLTExNyw3ICsxMTYsNyBAQCB2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnNldE9yaWVudFRvQW5n
bGUoCiBLQ2FudmFzTWFya2VyICpTVkdNYXJrZXJFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCiB7
CiAgICAgaWYoIW1fbWFya2VyKQotICAgICAgICBtX21hcmtlciA9IHN0YXRpY19jYXN0PEtDYW52
YXNNYXJrZXIqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUmVzb3VyY2UoUlNfTUFSS0VSKSk7
CisgICAgICAgIG1fbWFya2VyID0gc3RhdGljX2Nhc3Q8S0NhbnZhc01hcmtlcio+KGNyZWF0ZVJl
c291cmNlKFJTX01BUktFUikpOwogICAgIAogICAgIG1fbWFya2VyLT5zZXRNYXJrZXIoc3RhdGlj
X2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4ocmVuZGVyZXIoKSkpOwogCkluZGV4OiBrc3ZnMi9z
dmcvU1ZHTWFza0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdNYXNrRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2NjA4KQorKysga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIktDYW52
YXNJbWFnZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJTVkdM
ZW5ndGguaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpA
QCAtMTA2LDI5ICsxMDUsMjAgQEAgdm9pZCBTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dAogCiBLQ2FudmFzSW1hZ2UgKlNWR01hc2tFbGVtZW50OjpkcmF3TWFza2VyQ29udGVudCgp
CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZSAqZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0g
ICAgaWYgKCFkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCkpIC8vIEZJWE1FOiBoYWNrIGZvciBub3cg
dW50aWwgSW1hZ2U6OmxvY2tGb2N1cyBleGlzdHMKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBLQ2FudmFzSW1hZ2UgKm1hc2tJ
bWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZSAqPihkZXZpY2UtPmNyZWF0ZVJlc291cmNl
KFJTX0lNQUdFKSk7CisgICAgS0NhbnZhc0ltYWdlKiBtYXNrSW1hZ2UgPSBzdGF0aWNfY2FzdDxL
Q2FudmFzSW1hZ2UqPihjcmVhdGVSZXNvdXJjZShSU19JTUFHRSkpOwogCiAgICAgSW50U2l6ZSBz
aXplID0gSW50U2l6ZShscm91bmRmKHdpZHRoKCktPnZhbHVlKCkpLCBscm91bmRmKGhlaWdodCgp
LT52YWx1ZSgpKSk7CiAgICAgbWFza0ltYWdlLT5pbml0KHNpemUpOwogCi0gICAgS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQgKnBhdHRlcm5Db250ZXh0ID0gZGV2aWNlLT5jb250ZXh0Rm9ySW1hZ2Uo
bWFza0ltYWdlKTsKLSAgICBkZXZpY2UtPnB1c2hDb250ZXh0KHBhdHRlcm5Db250ZXh0KTsKLQot
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQocGF0dGVybkNvbnRleHQtPmNyZWF0
ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBwYXR0ZXJu
Q29udGV4dCA9IGNvbnRleHRGb3JJbWFnZShtYXNrSW1hZ2UpOwogCi0gICAgUmVuZGVyU1ZHQ29u
dGFpbmVyICptYXNrQ29udGFpbmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVyICo+
KHJlbmRlcmVyKCkpOwotICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIGluZm8oY29udGV4dC5n
ZXQoKSwgSW50UmVjdCgpLCBQYWludFBoYXNlRm9yZWdyb3VuZCwgMCwgMCwgMCk7CisgICAgUmVu
ZGVyU1ZHQ29udGFpbmVyKiBtYXNrQ29udGFpbmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29u
dGFpbmVyKj4ocmVuZGVyZXIoKSk7CisgICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gaW5mbyhw
YXR0ZXJuQ29udGV4dC5nZXQoKSwgSW50UmVjdCgpLCBQYWludFBoYXNlRm9yZWdyb3VuZCwgMCwg
MCwgMCk7CiAgICAgbWFza0NvbnRhaW5lci0+c2V0RHJhd3NDb250ZW50cyh0cnVlKTsKICAgICBt
YXNrQ29udGFpbmVyLT5wYWludChpbmZvLCAwLCAwKTsKICAgICBtYXNrQ29udGFpbmVyLT5zZXRE
cmF3c0NvbnRlbnRzKGZhbHNlKTsKLSAgICAKLSAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAg
ICBkZWxldGUgcGF0dGVybkNvbnRleHQ7CiAKICAgICByZXR1cm4gbWFza0ltYWdlOwogfQpAQCAt
MTQzLDcgKzEzMyw3IEBAIFJlbmRlck9iamVjdCogU1ZHTWFza0VsZW1lbnQ6OmNyZWF0ZVJlbmQK
IEtDYW52YXNNYXNrZXIgKlNWR01hc2tFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCiB7CiAgICAg
aWYgKCFtX21hc2tlcikgewotICAgICAgICBtX21hc2tlciA9IHN0YXRpY19jYXN0PEtDYW52YXNN
YXNrZXIgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJTX01BU0tFUikpOwor
ICAgICAgICBtX21hc2tlciA9IHN0YXRpY19jYXN0PEtDYW52YXNNYXNrZXIgKj4oY3JlYXRlUmVz
b3VyY2UoUlNfTUFTS0VSKSk7CiAgICAgICAgIG1fZGlydHkgPSB0cnVlOwogICAgIH0KICAgICBp
ZiAobV9kaXJ0eSkgewpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysr
IGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDYgQEAKICNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgiCiAjaW5jbHVk
ZSAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaCIKIAotI2luY2x1ZGUgPGtjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjA4KQorKysga3N2ZzIvc3Zn
L1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAog
I2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIktDYW52YXNJbWFnZS5o
IgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCiAj
aW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgpAQCAt
MTcxLDggKzE3MCw2IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVzRnIK
IAogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZW50SW50b1RpbGUoY29u
c3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgQWZm
aW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpCiB7Ci0gICAgS1JlbmRlcmluZ0Rl
dmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgCiAgICAgU1ZHU3R5bGVkRWxl
bWVudCogYWN0aXZlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihtX3Bh
aW50U2VydmVyLT5hY3RpdmVDbGllbnQoKS0+ZWxlbWVudCgpKTsKIAogICAgIGJvb2wgYmJveCA9
IChwYXR0ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1gpOwpAQCAtMTg4LDc1ICsxODUsMjcgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6
ZHJhd1BhdHRlcm5Db250ZQogICAgIH0KICAgICAKICAgICBkZWxldGUgbV90aWxlOwotICAgIG1f
dGlsZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZSo+KGRldmljZS0+Y3JlYXRlUmVzb3VyY2Uo
UlNfSU1BR0UpKTsKKyAgICBtX3RpbGUgPSBzdGF0aWNfY2FzdDxLQ2FudmFzSW1hZ2UqPihjcmVh
dGVSZXNvdXJjZShSU19JTUFHRSkpOwogICAgIG1fdGlsZS0+aW5pdChuZXdTaXplKTsKIAotICAg
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4
dEZvckltYWdlKG1fdGlsZSk7Ci0gICAgZGV2aWNlLT5wdXNoQ29udGV4dChwYXR0ZXJuQ29udGV4
dCk7CiAgICAgRmxvYXRSZWN0IHJlY3QoeCgpLT52YWx1ZSgpLCB5KCktPnZhbHVlKCksIHdpZHRo
KCktPnZhbHVlKCksIGhlaWdodCgpLT52YWx1ZSgpKTsKICAgICBtX3BhaW50U2VydmVyLT5zZXRC
Ym94KHJlY3QpOwogICAgIG1fcGFpbnRTZXJ2ZXItPnNldFBhdHRlcm5UcmFuc2Zvcm0ocGF0dGVy
blRyYW5zZm9ybU1hdHJpeCk7CiAgICAgbV9wYWludFNlcnZlci0+c2V0VGlsZShtX3RpbGUpOwog
Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dChwYXR0ZXJuQ29udGV4dC0+Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRl
eHQoZGV2aWNlLT5jb250ZXh0Rm9ySW1hZ2UobV90aWxlKSk7CiAKLSAgICBmb3IoTm9kZSAqbiA9
IHRhcmdldC0+Zmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKQotICAg
IHsKKyAgICBmb3IgKE5vZGUqIG4gPSB0YXJnZXQtPmZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0g
bi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBTVkdFbGVtZW50KiBlbGVtID0gc3ZnX2R5bmFt
aWNfY2FzdChuKTsKICAgICAgICAgaWYgKCFlbGVtIHx8ICFlbGVtLT5pc1N0eWxlZCgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQqIGUgPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRFbGVtZW50KiA+KGVsZW0pOwotICAgICAgICBSZW5kZXJPYmplY3QgKml0
ZW0gPSBlLT5yZW5kZXJlcigpOworICAgICAgICBSZW5kZXJPYmplY3QqIGl0ZW0gPSBlLT5yZW5k
ZXJlcigpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICBjb250aW51ZTsKLSNpZiAw
Ci0gICAgICAgIC8vIEZJWE1FOiBOb25lIG9mIHRoaXMgY29kZSBzZWVtcyB0byBiZSBuZWNlc3Nh
cnkKLSAgICAgICAgLy8gdG8gcGFzcyB0aGUgdzNjIHRlc3RzIChhbmQgaW5mYWN0IGJyZWFrcyB0
aGVtKQotICAgICAgICAvLyBIb3dldmVyLCBJJ20gbGVhdmluZyBpdCAjaWYgMCdkIGZvciBub3cg
dW50aWwKLSAgICAgICAgLy8gSSBjYW4gcXVpeiBXaWxkRm94IG9uIHRoZSBzdWJqZWN0IC0tIGVj
cyAxMS8yNC8wNQotICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgVzNDLVNWRy0xLjEvY29v
cmRzLXVuaXRzLTAxLWIKLSAgICAgICAgLy8gaXMgZmFpbGluZyBkdWUgdG8gbGFjayBvZiB0aGlz
IGNvZGUuCi0gICAgICAgIEtDYW52YXNNYXRyaXggc2F2ZWRNYXRyaXggPSBpdGVtLT5sb2NhbFRy
YW5zZm9ybSgpOwotCi0gICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIHNhdmVkQ29udGV4
dCA9IDA7Ci0gICAgICAgIGlmIChwYXR0ZXJuQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVz
OjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoYWN0aXZlRWxlbWVudCkKLSAgICAgICAgICAgICAgICBzYXZlZENvbnRleHQgPSBlLT5w
dXNoQXR0cmlidXRlQ29udGV4dChhY3RpdmVFbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRha2UgaW50byBhY2NvdW50IHZpZXdwb3J0RWxlbWVudCdzIHZpZXdCb3gsIGlmIGV4aXN0
YW50Li4uCi0gICAgICAgIGlmICh2aWV3cG9ydEVsZW1lbnQoKSAmJiB2aWV3cG9ydEVsZW1lbnQo
KS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkKLSAgICAgICAgewotICAgICAgICAgICAg
U1ZHU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqID4o
dmlld3BvcnRFbGVtZW50KCkpOwotCi0gICAgICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiBzdmdD
VE0gPSBzdmdFbGVtZW50LT5nZXRDVE0oKTsKLSAgICAgICAgICAgIFJlZlB0cjxTVkdNYXRyaXg+
IGN0bSA9IGdldENUTSgpOwotCi0gICAgICAgICAgICBLQ2FudmFzTWF0cml4IG5ld01hdHJpeChz
dmdDVE0tPm1hdHJpeCgpKTsKLSAgICAgICAgICAgIG5ld01hdHJpeC5tdWx0aXBseShzYXZlZE1h
dHJpeCk7Ci0gICAgICAgICAgICBuZXdNYXRyaXguc2NhbGUoMS4wIC8gY3RtLT5hKCksIDEuMCAv
IGN0bS0+ZCgpKTsKLQotICAgICAgICAgICAgaXRlbS0+c2V0TG9jYWxUcmFuc2Zvcm0obmV3TWF0
cml4Lm1hdHJpeCgpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICAgICAgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8gaW5mbyhjb250ZXh0LmdldCgpLCBJbnRSZWN0KCksIFBhaW50UGhhc2VGb3Jl
Z3JvdW5kLCAwLCAwLCAwKTsKICAgICAgICAgaXRlbS0+cGFpbnQoaW5mbywgMCwgMCk7Ci0KLSNp
ZiAwCi0gICAgICAgIGlmIChzYXZlZENvbnRleHQpCi0gICAgICAgICAgICBlLT5wdXNoQXR0cmli
dXRlQ29udGV4dChzYXZlZENvbnRleHQpOwotCi0gICAgICAgIGl0ZW0tPnNldExvY2FsVHJhbnNm
b3JtKHNhdmVkTWF0cml4Lm1hdHJpeCgpKTsKLSNlbmRpZgogICAgIH0KLQotICAgIGlmIChzYXZl
ZENvbnRleHQpCi0gICAgICAgIGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqID4odGhpcykt
PnB1c2hBdHRyaWJ1dGVDb250ZXh0KHNhdmVkQ29udGV4dCk7Ci0KLSAgICBkZXZpY2UtPnBvcENv
bnRleHQoKTsKLSAgICBkZWxldGUgcGF0dGVybkNvbnRleHQ7CiB9CiAKIHZvaWQgU1ZHUGF0dGVy
bkVsZW1lbnQ6Om5vdGlmeUNsaWVudHNUb1JlcGFpbnQoKSBjb25zdApAQCAtMzM4LDcgKzI4Nyw3
IEBAIFJlbmRlck9iamVjdCogU1ZHUGF0dGVybkVsZW1lbnQ6OmNyZWF0ZVIKIEtSZW5kZXJpbmdQ
YWludFNlcnZlclBhdHRlcm4gKlNWR1BhdHRlcm5FbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCiB7
CiAgICAgaWYgKCFtX3BhaW50U2VydmVyKSB7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZl
ciAqcHNlcnZlciA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihLQ1BhaW50
U2VydmVyVHlwZShQU19QQVRURVJOKSk7CisgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAq
cHNlcnZlciA9IGNyZWF0ZVBhaW50U2VydmVyKEtDUGFpbnRTZXJ2ZXJUeXBlKFBTX1BBVFRFUk4p
KTsKICAgICAgICAgbV9wYWludFNlcnZlciA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm4gKj4ocHNlcnZlcik7CiAgICAgICAgIG1fcGFpbnRTZXJ2ZXItPnNldExpc3Rl
bmVyKGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqID4odGhpcykpOwogICAgIH0KSW5kZXg6
IGtzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR1BvbHlnb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTY2MDgpCisrKyBrc3ZnMi9zdmcvU1ZH
UG9seWdvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5j
bHVkZSAiU1ZHUG9pbnRMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9seWdvbkVsZW1lbnQuaCIKIAot
I2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjYwOCkKKysrIGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCiAjaW5jbHVk
ZSAiU1ZHUG9seWxpbmVFbGVtZW50LmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTY2MDgpCisrKyBrc3Zn
Mi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNiBAQAogI2luY2x1ZGUgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKIAotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5k
ZXJpbmdEZXZpY2UuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBrc3ZnMi9zdmcv
U1ZHUmVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2NjA4KQorKysga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgog
CiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCi0jaW5jbHVkZSA8a2NhbnZhcy9k
ZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5k
ZXJpbmdGaWxsUGFpbnRlci5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQ
YWludFNlcnZlclNvbGlkLmg+CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjA4
KQorKysga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw2IEBACiAjaW5jbHVkZSAiU1ZHWm9vbUV2ZW50LmgiCiAjaW5jbHVkZSAia3N2Zy5oIgog
I2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZh
cy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDoga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24g
MTY2MDgpCisrKyBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIktS
ZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCkluZGV4OiBrc3ZnMi9zdmcv
U1ZHU3dpdGNoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1N3aXRjaEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjYwOCkKKysrIGtzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIK
IAogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2Nh
bnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKSW5kZXg6IGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
NjA4KQorKysga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw2IEBACiAjaW5jbHVkZSAiU1ZHU3ltYm9sRWxlbWVudC5oIgogI2luY2x1ZGUgImtz
dmcuaCIKICNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUg
PGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNjYwOCkKKysrIHBsYXRmb3Jt
L0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMCArNjQsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgVGV4dFJ1bjsKICAgICBjbGFzcyBUZXh0U3R5bGU7
CiAKLSNpZmRlZiBTVkdfU1VQUE9SVAotICAgIGNsYXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
OwotI2VuZGlmCi0KICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQgOiBOb25jb3B5YWJsZSB7CiAg
ICAgcHVibGljOgogICAgICAgICBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqKTsKQEAgLTE2NCwxMCArMTYwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCi0jaWZkZWYgU1ZHX1NV
UFBPUlQKLSAgICAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNyZWF0ZVJlbmRlcmluZ0Rl
dmljZUNvbnRleHQoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBHcmFw
aGljc0NvbnRleHQoSERDKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCiAgICAgICAgIEhEQyBn
ZXRXaW5kb3dzQ29udGV4dCgpOwpJbmRleDogcGxhdGZvcm0vY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2
aXNpb24gMTY2MDgpCisrKyBwbGF0Zm9ybS9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDEwICszMyw2IEBACiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIktSZW5k
ZXJpbmdEZXZpY2VRdWFydHouaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC01MjAsMTMgKzUx
Niw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKICAgICBDR0Nv
bnRleHRFT0NsaXAoY29udGV4dCk7CiB9CiAKLSNpZmRlZiBTVkdfU1VQUE9SVAotS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCgpCi17Ci0gICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eihw
bGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0jZW5kaWYKLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10853</attachid>
            <date>2006-10-01 02:30:23 -0700</date>
            <delta_ts>2006-11-30 09:34:14 -0800</delta_ts>
            <desc>updated (but still broken) patch</desc>
            <filename>remove-krenderingdevice.patch</filename>
            <type>text/plain</type>
            <size>103481</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NjkyKQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAyLDcg
KzE1MDIsNiBAQAogCQlBODcxREZFMzBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFjZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFERkRG
MEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJSZXBsYWNlZC5oICovOyB9OwogCQlBODcxREZFNDBB
MTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcxREZFMDBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVy
V2lkZ2V0LmggKi87IH07CiAJCUE4NzFERkU1MEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRn
ZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3
MURGRTEwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlcldpZGdldC5jcHAgKi87IH07Ci0JCUE4OEFE
Mzg2MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjU0MDg5NzAxRjcwMEJBNTEx
NCAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCAqLzsgfTsKIAkJQTg4QUQzODcwOTUyNDg2RDAwMURE
MTk2IC8qIEtSZW5kZXJpbmdEZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QzBGQjU1MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2
aWNlLmggKi87IH07CiAJCUE4OEFEMzg4MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRmls
bFBhaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThDMEZCNTkwODk3MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAg
Ki87IH07CiAJCUE4OEFEMzg5MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRmlsbFBhaW50
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBG
QjVBMDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCAqLzsgfTsKQEAg
LTE1NDEsNyArMTU0MCw2IEBACiAJCUE4OEFEM0FEMDk1MjQ4NkQwMDFERDE5NiAvKiBLQ2FudmFz
SXRlbVF1YXJ0ei5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QzBGQjZDMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzSXRlbVF1YXJ0ei5tbSAqLzsg
fTsKIAkJQTg4QUQzQUUwOTUyNDg2RDAwMUREMTk2IC8qIEtDYW52YXNSZXNvdXJjZXNRdWFydHou
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjZE
MDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmggKi87IH07CiAJCUE4
OEFEM0FGMDk1MjQ4NkQwMDFERDE5NiAvKiBLQ2FudmFzUmVzb3VyY2VzUXVhcnR6Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNkUwODk3MDFG
ODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZXNRdWFydHoubW0gKi87IH07Ci0JCUE4OEFEM0Iw
MDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3MTA4OTcwMUY4MDBCQTUx
MTQgLyogS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oICovOyB9OwogCQlBODhBRDNCMTA5NTI0ODZF
MDAxREQxOTYgLyogS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjcyMDg5NzAxRjgwMEJBNTExNCAvKiBL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tICovOyB9OwogCQlBODhBRDNCMjA5NTI0ODZFMDAxREQx
OTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3MzA4OTcwMUY4MDBCQTUx
MTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoubW0gKi87IH07CiAJCUE4
OEFEM0IzMDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjc0MDg5
NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCAqLzsgfTsKQEAg
LTQyMTcsNyArNDIxNSw2IEBACiAJCUE4QzBGOEVCMDg5NzAxRjQwMEJBNTExNCAvKiBTVkdab29t
QW5kUGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHWm9vbUFuZFBhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRjhFQzA4OTcwMUY0MDBCQTUxMTQgLyog
U1ZHWm9vbUFuZFBhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR1pvb21BbmRQYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGOEVEMDg5NzAxRjQwMEJBNTExNCAvKiBr
c3ZnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
a3N2Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKLQkJQThDMEZCNTQwODk3MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBL
UmVuZGVyaW5nRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjU1MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVy
aW5nRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gS1JlbmRlcmluZ0RldmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQThDMEZCNTkwODk3MDFGNzAwQkE1MTE0IC8qIEtS
ZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRkI1
QTA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0ZpbGxQYWludGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1JlbmRlcmluZ0ZpbGxQYWlu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwpAQCAtNDIzNSw3ICs0MjMyLDYgQEAKIAkJQThDMEZCNkMwODk3MDFGODAwQkE1MTE0IC8q
IEtDYW52YXNJdGVtUXVhcnR6Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLQ2FudmFzSXRlbVF1YXJ0ei5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjZEMDg5
NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc1Jlc291cmNlc1F1YXJ0
ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJQThDMEZCNkUwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZXNRdWFydHou
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEtDYW52YXNSZXNvdXJjZXNRdWFydHoubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlBOEMwRkI3MTA4OTcwMUY4MDBCQTUxMTQg
LyogS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtSZW5kZXJpbmdEZXZpY2VRdWFydHouaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjcy
MDg5NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJQThDMEZCNzMwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50UXVhcnR6Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dFF1YXJ0ei5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUE4QzBGQjc0MDg5NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJRdWFydHouaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC03MjkyLDcgKzcyODgsNiBA
QAogCQlBOEMwRkI1MzA4OTcwMUY3MDBCQTUxMTQgLyogZGV2aWNlICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBOEMwRkI1NDA4OTcwMUY3MDBCQTUxMTQg
LyogS1JlbmRlcmluZ0RldmljZS5jcHAgKi8sCiAJCQkJQThDMEZCNTUwODk3MDFGNzAwQkE1MTE0
IC8qIEtSZW5kZXJpbmdEZXZpY2UuaCAqLywKIAkJCQlBOEMwRkI1OTA4OTcwMUY3MDBCQTUxMTQg
LyogS1JlbmRlcmluZ0ZpbGxQYWludGVyLmNwcCAqLywKIAkJCQlBOEMwRkI1QTA4OTcwMUY3MDBC
QTUxMTQgLyogS1JlbmRlcmluZ0ZpbGxQYWludGVyLmggKi8sCkBAIC03MzIxLDcgKzczMTYsNiBA
QAogCQkJCUE4MTY1NUQzMDk2QkJFQUMwMDYwMTA1OCAvKiBLQ2FudmFzTWFza2VyUXVhcnR6Lm1t
ICovLAogCQkJCUE4QzBGQjZEMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzUXVh
cnR6LmggKi8sCiAJCQkJQThDMEZCNkUwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJj
ZXNRdWFydHoubW0gKi8sCi0JCQkJQThDMEZCNzEwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJp
bmdEZXZpY2VRdWFydHouaCAqLywKIAkJCQlBOEMwRkI3MjA4OTcwMUY4MDBCQTUxMTQgLyogS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5tbSAqLywKIAkJCQlBOEMwRkI3MzA4OTcwMUY4MDBCQTUxMTQg
LyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoubW0gKi8sCiAJCQkJQThDMEZC
NzQwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oICovLApA
QCAtODE5Niw3ICs4MTkwLDYgQEAKIAkJCQlBODhBRDNBODA5NTI0ODZEMDAxREQxOTYgLyogV0tT
cG90TGlnaHRGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEM0FBMDk1MjQ4NkQwMDFE
RDE5NiAvKiBLQ2FudmFzRmlsdGVyUXVhcnR6LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDNB
RTA5NTI0ODZEMDAxREQxOTYgLyogS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQTg4QUQzQjAwOTUyNDg2RTAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFy
dHouaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEM0IzMDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEM0I1MDk1
MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhB
RDNCQTA5NTI0ODZFMDAxREQxOTYgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTk1MDAsNyArOTQ5Myw2IEBACiAJCQkJQThGRDhCODYwODdDQjQ0QzAwREMzNzA3IC8q
IEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTZGRUVEOTA4OTg1ODIz
MDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM5ODg1QzMwOEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQTg4QUQzODYwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQzODgwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdG
aWxsUGFpbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDM4QjA5NTI0ODZEMDAxREQx
OTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg4QUQzOEYwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRl
cm4uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBrY2FudmFzL0tDYW52YXNDbGlwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzQ2xpcHBlci5oCShyZXZpc2lvbiAxNjY5MikKKysr
IGtjYW52YXMvS0NhbnZhc0NsaXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZXNldENsaXBEYXRhKCk7CiAgICAgdm9pZCBhZGRDbGlwRGF0
YShjb25zdCBQYXRoJiwgV2luZFJ1bGUsIGJvb2wgYmJveFVuaXRzKTsKICAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlDbGlwKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlDbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0ID0gMDsKIAogICAgIEtDQ2xpcERhdGFMaXN0IGNs
aXBEYXRhKCkgY29uc3Q7CiAKSW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCShyZXZpc2lvbiAxNjY5MikKKysr
IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCwz
MCBAQCBUZXh0U3RyZWFtJiBLQ2FudmFzRmlsdGVyOjpleHRlcm5hbFJlcHJlCiAgICAgcmV0dXJu
IHRzOwogfQogCitzdGF0aWMgYm9vbCBfX3VzZUZpbHRlcnMgPSB0cnVlOworCitib29sIEtDYW52
YXNGaWx0ZXI6OmZpbHRlcnNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gX191c2VGaWx0ZXJzOwor
fQorCit2b2lkIEtDYW52YXNGaWx0ZXI6OnNldEZpbHRlcnNFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBfX3VzZUZpbHRlcnMgPSBlbmFibGVkOworfQorCitzdGF0aWMgYm9vbCBfX3VzZUhh
cmR3YXJlUmVuZGVyaW5nID0gdHJ1ZTsKKworYm9vbCBLQ2FudmFzRmlsdGVyOjpoYXJkd2FyZVJl
bmRlcmluZ0VuYWJsZWQoKQoreworICAgIHJldHVybiBfX3VzZUhhcmR3YXJlUmVuZGVyaW5nOwor
fQorCit2b2lkIEtDYW52YXNGaWx0ZXI6OnNldEhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZChib29s
IGVuYWJsZWQpCit7CisgICAgX191c2VIYXJkd2FyZVJlbmRlcmluZyA9IGVuYWJsZWQ7Cit9CisK
IEtDYW52YXNGaWx0ZXIgKmdldEZpbHRlckJ5SWQoRG9jdW1lbnQgKmRvY3VtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcgJmlkKQogewogICAgIEtDYW52YXNSZXNvdXJjZSAqcmVzb3VyY2UgPSBnZXRS
ZXNvdXJjZUJ5SWQoZG9jdW1lbnQsIGlkKTsKSW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJKHJldmlzaW9uIDE2Njky
KQorKysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5
NCw2IEBAIHByaXZhdGU6CiB9OwogCiBjbGFzcyBLQ2FudmFzRmlsdGVyRWZmZWN0OwotY2xhc3Mg
S1JlbmRlcmluZ0RldmljZTsKIAogY2xhc3MgS0NhbnZhc0ZpbHRlciA6IHB1YmxpYyBLQ2FudmFz
UmVzb3VyY2UgewogcHVibGljOgpAQCAtMTEwLDE3ICsxMDksMjMgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RWZmZWN0Qm91bmRpbmdCb3hNb2RlKGJvb2wgYmJveE1vZGUpIHsgbV9lZmZlY3RCQm94
TW9kZSA9IGJib3hNb2RlOyB9ICAgIAogCiAgICAgRmxvYXRSZWN0IGZpbHRlclJlY3QoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlclJlY3Q7IH0KLSAgICB2b2lkIHNldEZpbHRlclJlY3QoY29uc3Qg
RmxvYXRSZWN0ICZyZWN0KSB7IG1fZmlsdGVyUmVjdCA9IHJlY3Q7IH0KKyAgICB2b2lkIHNldEZp
bHRlclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fZmlsdGVyUmVjdCA9IHJlY3Q7IH0K
ICAgICAKLSAgICBGbG9hdFJlY3QgZmlsdGVyQkJveEZvckl0ZW1CQm94KEZsb2F0UmVjdCBpdGVt
QkJveCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGZpbHRlckJCb3hGb3JJdGVtQkJveChGbG9hdFJl
Y3QpIGNvbnN0OwogCiAgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKICAgICB2b2lkIGFkZEZpbHRl
ckVmZmVjdChLQ2FudmFzRmlsdGVyRWZmZWN0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZUZpbHRlcihjb25zdCBGbG9hdFJlY3QgJmJib3gpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlGaWx0ZXIoY29uc3QgRmxvYXRSZWN0ICZiYm94KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVGaWx0ZXIoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IEZsb2F0UmVjdCYgYmJveCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbHRlcihHcmFwaGljc0NvbnRleHQqJiwgY29uc3Qg
RmxvYXRSZWN0JiBiYm94LCBHcmFwaGljc0NvbnRleHQqIG9yaWdpbmFsQ29udGV4dCkgPSAwOwog
CiAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29u
c3Q7CisgICAgCisgICAgLy8gZmlsdGVycyAobW9zdGx5IGRlYnVnZ2luZykKKyAgICBzdGF0aWMg
Ym9vbCBmaWx0ZXJzRW5hYmxlZCgpOworICAgIHN0YXRpYyB2b2lkIHNldEZpbHRlcnNFbmFibGVk
KGJvb2wpOworICAgIHN0YXRpYyBib29sIGhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZCgpOworICAg
IHN0YXRpYyB2b2lkIHNldEhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZChib29sKTsKIAogcHJvdGVj
dGVkOgogICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlY3Q7CkluZGV4OiBrY2FudmFzL0tDYW52YXNN
YXNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNNYXNrZXIuaAkocmV2aXNpb24g
MTY2OTIpCisrKyBrY2FudmFzL0tDYW52YXNNYXNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDsKIGNsYXNzIFRleHRTdHJlYW07CiBjbGFzcyBLQ2FudmFzSW1hZ2U7CiAKQEAgLTQxLDcgKzQy
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFzayhLQ2FudmFzSW1hZ2UqKTsKICAgICBLQ2Fu
dmFzSW1hZ2UqIG1hc2soKSBjb25zdCB7IHJldHVybiBtX21hc2s7IH0KICAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlNYXNrKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlNYXNrKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0ID0gMDsKIAogICAgIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OyAKIHByb3RlY3RlZDoKSW5kZXg6
IGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9LQ2Fu
dmFzVHJlZURlYnVnLmNwcAkocmV2aXNpb24gMTY2OTIpCisrKyBrY2FudmFzL0tDYW52YXNUcmVl
RGVidWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiUmVu
ZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1
ZGUgIktDYW52YXNDbGlwcGVyLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2lu
Y2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWlu
dFNlcnZlckdyYWRpZW50LmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVy
bi5oIgpJbmRleDoga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtj
YW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1
LDYgQEAKICNpbmNsdWRlICJSZW5kZXJGb3JlaWduT2JqZWN0LmgiCiAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAi
U1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKIApAQCAt
NDQsNDQgKzQzLDMwIEBAIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0Ojp0cmEK
IAogdm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
aW50IHBhcmVudFgsIGludCBwYXJlbnRZKQogewotICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5w
OworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
LQotICAgIEtSZW5kZXJpbmdEZXZpY2UgKmRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwotICAg
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4
dCgpOwotICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwotICAgIGlmICghY29udGV4
dCkgewotICAgICAgICAvLyBPbmx5IG5lZWQgdG8gc2V0dXAgZm9yIEtDYW52YXMgcmVuZGVyaW5n
IGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4KLSAgICAgICAgY29udGV4dCA9IHBhaW50
SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIGRldmljZS0+
cHVzaENvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHNob3VsZFBvcENvbnRleHQgPSB0cnVlOwot
ICAgIH0KLQotICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CisgICAgCisgICAgY29udGV4dC0+c2F2
ZSgpOwogCiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0
ZShwYXJlbnRYLCBwYXJlbnRZKSk7CiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNm
b3JtKCkpOwogICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KSk7CiAKLSAgICBwYWludEluZm8ucC0+YWRkQ2xpcChnZXRDbGlwUmVjdChwYXJlbnRYLCBwYXJl
bnRZKSk7CisgICAgY29udGV4dC0+YWRkQ2xpcChnZXRDbGlwUmVjdChwYXJlbnRYLCBwYXJlbnRZ
KSk7CiAKICAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+b3BhY2l0eSgpOwogICAgIGlmIChv
cGFjaXR5IDwgMS4wZikKLSAgICAgICAgcGFpbnRJbmZvLnAtPmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7CisgICAgICAgIGNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7CiAKICAgICBQYWludEluZm8gcGkocGFpbnRJbmZvKTsKICAgICBwaS5yID0gYWJzb2x1
dGVUcmFuc2Zvcm0oKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKICAgICBSZW5kZXJC
bG9jazo6cGFpbnQocGksIDAsIDApOwogCiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAgICAg
ICBwYWludEluZm8ucC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICAKLSAgICBpZiAoc2hv
dWxkUG9wQ29udGV4dCkgewotICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAgICAgICAg
ZGVsZXRlIGNvbnRleHQ7Ci0gICAgfQorICAgICAgICBjb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lM
YXllcigpOwogCi0gICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICBjb250ZXh0LT5yZXN0
b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6Y29tcHV0ZUFic29sdXRlUmVw
YWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmKQpJbmRleDoga2NhbnZhcy9SZW5kZXJQYXRoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclBhdGguY3BwCShyZXZpc2lvbiAxNjY5MikK
KysrIGtjYW52YXMvUmVuZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDEw
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29u
dGFpbmVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXIuaCIKKyNpbmNsdWRlICJLQ2FudmFz
RmlsdGVycy5oIgogI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKICNpbmNsdWRlICJLQ2FudmFz
TWFya2VyLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2luY2x1ZGUgIktSZW5k
ZXJpbmdQYWludFNlcnZlci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgog
I2luY2x1ZGUgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVk
RWxlbWVudC5oIgpAQCAtMTc0LDYxICsxNzUsNDMgQEAgdm9pZCBSZW5kZXJQYXRoOjpwYWludChQ
YWludEluZm8gJnBhaW50SQogICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgp
IHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHx8IHN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgcGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0Rldmlj
ZSgpOwotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJy
ZW50Q29udGV4dCgpOwotICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwotICAgIGlm
IChjb250ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+c2F2ZSgpOwotICAgIGVsc2UgewotICAg
ICAgICAvLyBOZWVkIHRvIHNldCB1cCBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxy
ZWFkeSBiZWVuIGRvbmUuCi0gICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCgpOwotICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRl
eHQpOwotICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKLSAgICB9Ci0KKyAgICBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8ucDsKKyAgICBjb250ZXh0LT5zYXZlKCk7
CiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gc2V0
dXAgdG8gYXBwbHkgZmlsdGVycwogICAgIEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRl
ckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsdGVyKCkuc3Vic3RyaW5n
KDEpKTsKLSAgICBpZiAoZmlsdGVyKSB7Ci0gICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihy
ZWxhdGl2ZUJCb3godHJ1ZSkpOwotICAgICAgICBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29u
dGV4dCgpOwotICAgIH0KKyAgICBpZiAoZmlsdGVyKQorICAgICAgICBmaWx0ZXItPnByZXBhcmVG
aWx0ZXIoY29udGV4dCwgcmVsYXRpdmVCQm94KHRydWUpKTsKIAogICAgIGlmIChLQ2FudmFzQ2xp
cHBlciogY2xpcHBlciA9IGdldENsaXBwZXJCeUlkKGRvY3VtZW50KCksIHN0eWxlKCktPnN2Z1N0
eWxlKCktPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKLSAgICAgICAgY2xpcHBlci0+YXBwbHlD
bGlwKHJlbGF0aXZlQkJveCh0cnVlKSk7CisgICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChjb250
ZXh0LCByZWxhdGl2ZUJCb3godHJ1ZSkpOwogCiAgICAgaWYgKEtDYW52YXNNYXNrZXIqIG1hc2tl
ciA9IGdldE1hc2tlckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+bWFza0Vs
ZW1lbnQoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhyZWxhdGl2
ZUJCb3godHJ1ZSkpOworICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhjb250ZXh0LCByZWxhdGl2
ZUJCb3godHJ1ZSkpOwogCiAgICAgY29udGV4dC0+Y2xlYXJQYXRoKCk7CiAgICAgCi0gICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6
OmZpbGxQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKTsKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXIqIGZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVy
KHN0eWxlKCksIHRoaXMpOwogICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgY29u
dGV4dC0+YWRkUGF0aChwYXRoKCkpOwogICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldEFjdGl2
ZUNsaWVudCh0aGlzKTsKICAgICAgICAgZmlsbFBhaW50U2VydmVyLT5kcmF3KGNvbnRleHQsIHRo
aXMsIEFQUExZX1RPX0ZJTEwpOwogICAgIH0KLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0
cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihz
dHlsZSgpLCB0aGlzKTsKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIHN0cm9rZVBhaW50U2Vy
dmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0aGlz
KTsKICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgY29udGV4dC0+YWRkUGF0
aChwYXRoKCkpOyAvLyBwYXRoIGlzIGNsZWFyZWQgd2hlbiBmaWxsZWQuCiAgICAgICAgIHN0cm9r
ZVBhaW50U2VydmVyLT5zZXRBY3RpdmVDbGllbnQodGhpcyk7CiAgICAgICAgIHN0cm9rZVBhaW50
U2VydmVyLT5kcmF3KGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX1NUUk9LRSk7CiAgICAgfQogCi0g
ICAgZHJhd01hcmtlcnNJZk5lZWRlZChwYWludEluZm8ucCwgcGFpbnRJbmZvLnIsIHBhdGgoKSk7
CisgICAgZHJhd01hcmtlcnNJZk5lZWRlZChjb250ZXh0LCBwYWludEluZm8uciwgcGF0aCgpKTsK
IAogICAgIC8vIGFjdHVhbGx5IGFwcGx5IHRoZSBmaWx0ZXIKICAgICBpZiAoZmlsdGVyKQotICAg
ICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKHJlbGF0aXZlQkJveCh0cnVlKSk7CisgICAgICAgIGZp
bHRlci0+YXBwbHlGaWx0ZXIoY29udGV4dCwgcmVsYXRpdmVCQm94KHRydWUpLCBwYWludEluZm8u
cCk7CiAKLSAgICAvLyByZXN0b3JlIGRyYXdpbmcgc3RhdGUKLSAgICBpZiAoIXNob3VsZFBvcENv
bnRleHQpCi0gICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGRldmljZS0+cG9wQ29udGV4dCgpOwotICAgICAgICBkZWxldGUgY29udGV4dDsKLSAgICB9
CisgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKIH0KIAogdm9pZCBSZW5kZXJQYXRoOjphYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCBfdHgsIGludCBfdHkpCkluZGV4
OiBrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtjYW52YXMvUmVuZGVy
U1ZHQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsOSBAQAogI2luY2x1
ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXIuaCIK
KyNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgogI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIK
ICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzcsNyArMzcsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRlclNWR0NvbnRhaW5lcjo6UmVuZGVyU1ZHQ29u
dGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQgKm5vZGUpCitSZW5kZXJTVkdDb250YWluZXI6OlJlbmRl
clNWR0NvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50KiBub2RlKQogICAgIDogUmVuZGVyQ29udGFp
bmVyKG5vZGUpCiAgICAgLCBtX2RyYXdzQ29udGVudHModHJ1ZSkKICAgICAsIG1fc2xpY2UoZmFs
c2UpCkBAIC0xNDgsNjIgKzE0OCw0OSBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQo
UGFpbnRJbmZvCiAgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIWZpbHRlcikKICAgICAgICAgcmV0
dXJuOyAvLyBTcGVjOiBncm91cHMgdy9vIGNoaWxkcmVuIHN0aWxsIG1heSByZW5kZXIgZmlsdGVy
IGNvbnRlbnQuCiAgICAgCi0gICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5n
RGV2aWNlKCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGRldmljZUNvbnRleHQgPSBk
ZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFs
c2U7Ci0gICAgaWYgKCFkZXZpY2VDb250ZXh0KSB7Ci0gICAgICAgIC8vIEkgb25seSBuZWVkIHRv
IHNldHVwIGZvciBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRv
bmUuCi0gICAgICAgIGRldmljZUNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCgpOwotICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGRldmljZUNvbnRl
eHQpOwotICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBw
YWludEluZm8ucDsKKyAgICBwYWludEluZm8ucC0+c2F2ZSgpOwogICAgIAogICAgIGlmIChwYXJl
bnRYICE9IDAgfHwgcGFyZW50WSAhPSAwKSB7CiAgICAgICAgIC8vIFRyYW5zbGF0ZSBmcm9tIHBh
cmVudCBvZmZzZXRzIChraHRtbCkgdG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKGtzdmcyL2tjYW52
YXMpCi0gICAgICAgIGRldmljZUNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50
cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOworICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0o
QWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKICAgICAgICAg
cGFyZW50WCA9IHBhcmVudFkgPSAwOwogICAgIH0KICAgICAKICAgICBpZiAoIXZpZXdwb3J0KCku
aXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPVklTSUJM
RSkKLSAgICAgICAgICAgIHBhaW50SW5mby5wLT5hZGRDbGlwKGVuY2xvc2luZ0ludFJlY3Qodmll
d3BvcnQoKSkpOyAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSdsbCB3YW50IGZsb2F0LXByZWNpc2lv
biBjbGlwcGluZwotICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNm
b3JtKCkudHJhbnNsYXRlKHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSkpOworICAgICAg
ICAgICAgY29udGV4dC0+YWRkQ2xpcChlbmNsb3NpbmdJbnRSZWN0KHZpZXdwb3J0KCkpKTsgLy8g
RklYTUU6IEV2ZW50dWFsbHkgd2UnbGwgd2FudCBmbG9hdC1wcmVjaXNpb24gY2xpcHBpbmcKKyAg
ICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSh2aWV3
cG9ydCgpLngoKSwgdmlld3BvcnQoKS55KCkpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFsb2Nh
bFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgZGV2aWNlQ29udGV4dC0+Y29uY2F0
Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOworICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0obG9jYWxU
cmFuc2Zvcm0oKSk7CiAgICAgCi0gICAgaWYgKEtDYW52YXNDbGlwcGVyICpjbGlwcGVyID0gZ2V0
Q2xpcHBlckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcFBhdGgoKS5z
dWJzdHJpbmcoMSkpKQotICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAocmVsYXRpdmVCQm94KHRy
dWUpKTsKKyAgICBpZiAoS0NhbnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChk
b2N1bWVudCgpLCBzdHlsZSgpLT5zdmdTdHlsZSgpLT5jbGlwUGF0aCgpLnN1YnN0cmluZygxKSkp
CisgICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChjb250ZXh0LCByZWxhdGl2ZUJCb3godHJ1ZSkp
OwogCi0gICAgaWYgKEtDYW52YXNNYXNrZXIgKm1hc2tlciA9IGdldE1hc2tlckJ5SWQoZG9jdW1l
bnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+bWFza0VsZW1lbnQoKS5zdWJzdHJpbmcoMSkpKQot
ICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhyZWxhdGl2ZUJCb3godHJ1ZSkpOworICAgIGlmIChL
Q2FudmFzTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRvY3VtZW50KCksIHN0eWxlKCkt
PnN2Z1N0eWxlKCktPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAgbWFza2Vy
LT5hcHBseU1hc2soY29udGV4dCwgcmVsYXRpdmVCQm94KHRydWUpKTsKIAogICAgIGZsb2F0IG9w
YWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7CiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAg
ICAgICBwYWludEluZm8ucC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICAg
ICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgIGlmIChm
aWx0ZXIpCi0gICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihyZWxhdGl2ZUJCb3godHJ1ZSkp
OworICAgICAgICBmaWx0ZXItPnByZXBhcmVGaWx0ZXIoY29udGV4dCwgcmVsYXRpdmVCQm94KHRy
dWUpKTsKICAgICAKICAgICBpZiAoIXZpZXdCb3goKS5pc0VtcHR5KCkpCi0gICAgICAgIGRldmlj
ZUNvbnRleHQtPmNvbmNhdENUTSh2aWV3cG9ydFRyYW5zZm9ybSgpKTsKKyAgICAgICAgY29udGV4
dC0+Y29uY2F0Q1RNKHZpZXdwb3J0VHJhbnNmb3JtKCkpOwogICAgIAotICAgIFJlbmRlckNvbnRh
aW5lcjo6cGFpbnQocGFpbnRJbmZvLCAwLCAwKTsKKyAgICBSZW5kZXJDb250YWluZXI6OnBhaW50
KHBhaW50SW5mbywgMCwgMCk7IC8vIEZJWE1FIQogICAgIAogICAgIGlmIChmaWx0ZXIpCi0gICAg
ICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIocmVsYXRpdmVCQm94KHRydWUpKTsKKyAgICAgICAgZmls
dGVyLT5hcHBseUZpbHRlcihjb250ZXh0LCByZWxhdGl2ZUJCb3godHJ1ZSksIHBhaW50SW5mby5w
KTsKICAgICAKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIHBhaW50SW5mby5wLT5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgICAgICBjb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lM
YXllcigpOwogICAgIAotICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQotICAgIGlmIChzaG91
bGRQb3BDb250ZXh0KSB7Ci0gICAgICAgIGRldmljZS0+cG9wQ29udGV4dCgpOwotICAgICAgICBk
ZWxldGUgZGV2aWNlQ29udGV4dDsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFpbnRJbmZvLnAtPnJl
c3RvcmUoKTsKKyAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOwogfQogCiBGbG9hdFJlY3QgUmVu
ZGVyU1ZHQ29udGFpbmVyOjp2aWV3cG9ydCgpIGNvbnN0CkluZGV4OiBrY2FudmFzL1JlbmRlclNW
R0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2
aXNpb24gMTY2OTIpCisrKyBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIktDYW52
YXNGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgogI2luY2x1ZGUgIktDYW52
YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNs
dWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAj
aW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCkBAIC0xMjgsNDggKzEyOCwzNiBAQCB2b2lkIFJl
bmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAgICAgaWYgKHBhaW50SW5mby5wLT5w
YWludGluZ0Rpc2FibGVkKCkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdy
b3VuZCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTikKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgp
OwotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50
Q29udGV4dCgpOwotICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwotICAgIGlmIChj
b250ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+c2F2ZSgpOwotICAgIGVsc2UgewotICAgICAg
ICAvLyBOZWVkIHRvIHB1c2ggYSBkZXZpY2UgY29udGV4dCBvbiB0aGUgc3RhY2sgaWYgZW1wdHku
Ci0gICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCgpOwotICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBz
aG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKLSAgICB9CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0ID0gcGFpbnRJbmZvLnA7CisgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKIAogICAgIGNvbnRl
eHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50
WSkpOwogICAgIGNvbnRleHQtPmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICB0cmFu
c2xhdGVGb3JBdHRyaWJ1dGVzKCk7CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zbGF0aW9u
Rm9yQXR0cmlidXRlcygpKTsKICAgICAKICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBGbG9h
dFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
KiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CiAgICAgICAgICAgICAKICAgICBpZiAo
S0NhbnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChkb2N1bWVudCgpLCBzdmdT
dHlsZS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBjbGlwcGVyLT5hcHBseUNs
aXAoYm91bmRpbmdCb3gpOworICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAoY29udGV4dCwgYm91
bmRpbmdCb3gpOwogCiAgICAgaWYgKEtDYW52YXNNYXNrZXIqIG1hc2tlciA9IGdldE1hc2tlckJ5
SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5nKDEpKSkKLSAg
ICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRpbmdCb3gpOworICAgICAgICBtYXNrZXItPmFw
cGx5TWFzayhjb250ZXh0LCBib3VuZGluZ0JveCk7CiAKICAgICBLQ2FudmFzRmlsdGVyKiBmaWx0
ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5maWx0ZXIoKS5zdWJzdHJp
bmcoMSkpOwogICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihi
b3VuZGluZ0JveCk7Ci0gICAgCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2Ut
PmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICAgICAgZmls
dGVyLT5wcmVwYXJlRmlsdGVyKGNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIGZsb2F0IG9w
YWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7CiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAg
ICAgICBjLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgICAgICBjb250ZXh0
LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogCi0gICAgUGFpbnRJbmZvIHBpKHBh
aW50SW5mbyk7Ci0gICAgcGkucCA9IGMuZ2V0KCk7CisgICAgUGFpbnRJbmZvIHBpKHBhaW50SW5m
byk7IC8vIEZJWE1FISEKICAgICBwaS5yID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5pbnZlcnQoKS5t
YXBSZWN0KHBhaW50SW5mby5yKTsKIAogICAgIGludCB4ID0gMCwgeSA9IDA7CiAgICAgaWYgKHNo
b3VsZFBhaW50KHBpLCB4LCB5KSkgewotICAgICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlRWx0
ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAgICAgU1ZHSW1h
Z2VFbGVtZW50KiBpbWFnZUVsdCA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUo
KSk7CiAgICAgICAgIAogICAgICAgICBpZiAoaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW8o
KS0+YWxpZ24oKSA9PSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19OT05FKQogICAgICAgICAgICAgUmVuZGVySW1hZ2U6OnBhaW50KHBpLCAwLCAwKTsKQEAg
LTE3NywyMyArMTY1LDE3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYg
cGEKICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdChtX3gsIG1feSwgY29udGVudFdpZHRo
KCksIGNvbnRlbnRIZWlnaHQoKSk7CiAgICAgICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAw
LCBpbWFnZSgpLT53aWR0aCgpLCBpbWFnZSgpLT5oZWlnaHQoKSk7CiAgICAgICAgICAgICBhZGp1
c3RSZWN0c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBpbWFnZUVsdC0+cHJlc2Vy
dmVBc3BlY3RSYXRpbygpKTsKLSAgICAgICAgICAgIGMtPmRyYXdJbWFnZShpbWFnZSgpLCBkZXN0
UmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZpbHRlcikKLSAg
ICAgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgICAgICAgICAg
ZmlsdGVyLT5hcHBseUZpbHRlcihjb250ZXh0LCBib3VuZGluZ0JveCwgcGFpbnRJbmZvLnApOwog
ICAgIH0KICAgICAKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIGMtPmVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7CisgICAgICAgIGNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CiAKLSAgICAvLyByZXN0b3JlIGRyYXdpbmcgc3RhdGUKLSAgICBpZiAoIXNob3VsZFBvcENvbnRl
eHQpCi0gICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGRldmljZS0+cG9wQ29udGV4dCgpOwotICAgICAgICBkZWxldGUgY29udGV4dDsKLSAgICB9Cisg
ICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRlclNWR0ltYWdlOjpjb21wdXRl
QWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGYpCkBAIC0yODAsMTIgKzI2Miw2
IEBAIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdJbWFnZTo6dHJhbnNsYXQKICAgICByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKGltYWdlLT54KCktPnZhbHVlKCksIGltYWdlLT55
KCktPnZhbHVlKCkpOwogfQogCi12b2lkIFJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdGVGb3JBdHRy
aWJ1dGVzKCkKLXsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IHJlbmRl
cmluZ0RldmljZSgpLT5jdXJyZW50Q29udGV4dCgpOwotICAgIGNvbnRleHQtPmNvbmNhdENUTSh0
cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZh
cy9SZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lvbiAxNjY5MikKKysrIGtjYW52YXMvUmVuZGVyU1ZH
SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGludCBfeCwg
aW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIHZvaWQgdHJhbnNsYXRlRm9yQXR0cmlidXRlcygpOwogICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKICAgICAgICAgSW50UmVjdCBtX2Fic29sdXRlQm91bmRzOwpJbmRl
eDoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRl
clNWR1RleHQuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDEwIEBACiAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIktDYW52
YXNGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgogI2luY2x1ZGUgIktDYW52
YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNs
dWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhMaXN0Lmgi
CiAjaW5jbHVkZSAiU1ZHVGV4dEVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBA
IC02MCwyMCArNjEsOSBAQCBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHVGV4dDo6dHJhbnNsYXRp
CiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBw
YXJlbnRYLCBpbnQgcGFyZW50WSkKIHsKLSAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8ucDsKKyAg
ICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAg
ICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKLSAgICBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmljZS0+Y3VycmVudENvbnRleHQoKTsK
LSAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKLSAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTmVlZCB0
byBzZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25l
LgotICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNv
bnRleHQoKTsKLSAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAg
c2hvdWxkUG9wQ29udGV4dCA9IHRydWU7Ci0gICAgfQogICAgIAogICAgIGNvbnRleHQtPmNvbmNh
dENUTShsb2NhbFRyYW5zZm9ybSgpKTsKICAgICBjb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJh
bnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKQEAgLTg0LDIzICs3NCwyMiBA
QCB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAg
IAogICAgIGlmIChLQ2FudmFzQ2xpcHBlciogY2xpcHBlciA9IGdldENsaXBwZXJCeUlkKGRvY3Vt
ZW50KCksIHN2Z1N0eWxlLT5jbGlwUGF0aCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIGNsaXBw
ZXItPmFwcGx5Q2xpcChib3VuZGluZ0JveCk7CisgICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChj
b250ZXh0LCBib3VuZGluZ0JveCk7CiAKICAgICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0g
Z2V0TWFza2VyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+bWFza0VsZW1lbnQoKS5zdWJzdHJp
bmcoMSkpKQotICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhib3VuZGluZ0JveCk7CisgICAgICAg
IG1hc2tlci0+YXBwbHlNYXNrKGNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIEtDYW52YXNG
aWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRl
cigpLnN1YnN0cmluZygxKSk7CiAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5wcmVw
YXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKKyAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGNv
bnRleHQsIGJvdW5kaW5nQm94KTsKICAgICAgICAgCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsK
ICAgICBQYWludEluZm8gcGkgPSBwYWludEluZm87Ci0gICAgcGkucCA9IGMuZ2V0KCk7CisgICAg
cGkucCA9IGNvbnRleHQ7CiAgICAgcGkuciA9ICh0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSAq
IHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpICogYWJzb2x1dGVUcmFuc2Zvcm0oKSkuaW52ZXJ0
KCkubWFwUmVjdChwYWludEluZm8ucik7CiAKICAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+
b3BhY2l0eSgpOwogICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICAgICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihvcGFjaXR5KTsKIAogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50
U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhp
cyk7CiAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewpAQCAtMTI0LDE5ICsxMTMsMTMgQEAgdm9p
ZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAgICBzdHJva2VQYWlu
dFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAoZmlsdGVy
KQotICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKGJvdW5kaW5nQm94KTsKLQogICAgIGlmIChv
cGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICAg
ICAgY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAotICAgIC8vIHJlc3RvcmUgZHJh
d2luZyBzdGF0ZQotICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZv
LnAtPnJlc3RvcmUoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7
Ci0gICAgICAgIGRlbGV0ZSBjb250ZXh0OwotICAgIH0KKyAgICBpZiAoZmlsdGVyKQorICAgICAg
ICBmaWx0ZXItPmFwcGx5RmlsdGVyKGNvbnRleHQsIGJvdW5kaW5nQm94LCBwYWludEluZm8ucCk7
CisgICAgCisgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRlclNWR1RleHQ6
OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJvb2wgZikKSW5kZXg6IGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNiAgICAgICBBbGV4YW5kZXIgS2Vs
bGV0dCA8bHlwYW5vdkBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1
ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1LUmVuZGVy
aW5nRGV2aWNlOjpLUmVuZGVyaW5nRGV2aWNlKCkKLXsKLX0KLQotS1JlbmRlcmluZ0RldmljZTo6
fktSZW5kZXJpbmdEZXZpY2UoKQotewotfQotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogS1Jl
bmRlcmluZ0RldmljZTo6Y3VycmVudENvbnRleHQoKSBjb25zdAotewotICAgIGlmIChtX2NvbnRl
eHRTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2NvbnRl
eHRTdGFjay5sYXN0KCk7Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5n
RGV2aWNlOjpwb3BDb250ZXh0KCkKLXsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVz
dWx0ID0gbV9jb250ZXh0U3RhY2subGFzdCgpOwotICAgIG1fY29udGV4dFN0YWNrLnJlbW92ZUxh
c3QoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2U6OnB1
c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0KQotewotICAgIG1fY29u
dGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKLX0KLQotfQotCi0vLyB2aW06dHM9NDpub2V0Ci0j
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLQpJbmRleDoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rl
dmljZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAko
cmV2aXNpb24gMTY2OTIpCisrKyBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDUyICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8vIGFrYSB3aGVyZSB0byBkcmF3Ci1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dAotewot
cHVibGljOgotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCkgeyB9Ci0gICAgdmlydHVhbCB+
S1JlbmRlcmluZ0RldmljZUNvbnRleHQoKSB7IH0KLQotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNm
b3JtIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gY3RtKCkgY29uc3QgPSAwOwotICAgICAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJQYXRoKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGRQYXRoKGNvbnN0IFBhdGgm
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogY3JlYXRlR3JhcGhpY3NDb250
ZXh0KCkgPSAwOwotfTsKLQogY2xhc3MgS0NhbnZhc0ltYWdlOwogY2xhc3MgS0NhbnZhc0ZpbHRl
ckVmZmVjdDsKLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2UKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVy
aW5nRGV2aWNlKCk7Ci0gICAgdmlydHVhbCB+S1JlbmRlcmluZ0RldmljZSgpOwotCi0gICAgLy8g
VGhlIHJlbmRlcmluZyBkZXZpY2Ugd2lsbCBiZSBkaXJlY3RseSBpbml0ZWQKLSAgICAvLyBhZnRl
ciB0aGUgY2FudmFzIHRhcmdldCwgaXQgbWF5IGJlIG92ZXJ3cml0dGVuLgotICAgIHZpcnR1YWwg
Ym9vbCBpc0J1ZmZlcmVkKCkgY29uc3QgPSAwOwotCi0gICAgLy8gR2xvYmFsIHJlbmRlcmluZyBk
ZXZpY2UgY29udGV4dAotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjdXJyZW50Q29udGV4
dCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcG9wQ29u
dGV4dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwdXNoQ29udGV4dChLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCopOwotICAgIAotICAgIHZpcnR1YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRl
eHRGb3JJbWFnZShLQ2FudmFzSW1hZ2UqKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBDcmVhdGlvbiB0
b29scwotICAgIHZpcnR1YWwgS0NhbnZhc1Jlc291cmNlKiBjcmVhdGVSZXNvdXJjZShjb25zdCBL
Q1Jlc291cmNlVHlwZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZl
Y3QqIGNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIGNyZWF0ZVBhaW50U2VydmVy
KGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJikgY29uc3QgPSAwOwotCi1wcml2YXRlOgotICAgIFZl
Y3RvcjxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCo+IG1fY29udGV4dFN0YWNrOwotfTsKIAotS1Jl
bmRlcmluZ0RldmljZSogcmVuZGVyaW5nRGV2aWNlKCk7IC8qIHJldHVybnMgdGhlIHNpbmdsZSBn
bG9iYWwgcmVuZGVyaW5nIGRldmljZSAqLworR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0Rm9ySW1h
Z2UoS0NhbnZhc0ltYWdlKik7CitLQ2FudmFzUmVzb3VyY2UqIGNyZWF0ZVJlc291cmNlKGNvbnN0
IEtDUmVzb3VyY2VUeXBlJik7CitLQ2FudmFzRmlsdGVyRWZmZWN0KiBjcmVhdGVGaWx0ZXJFZmZl
Y3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlJik7CitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIGNy
ZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJik7CiAKIH0KIApJbmRleDog
a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0ZpbGxQYWludGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuY3BwCShyZXZpc2lvbiAxNjY5MikK
KysrIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19T
VVBQT1JUCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIktSZW5kZXJp
bmdGaWxsUGFpbnRlci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlci5oIgogCklu
ZGV4OiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaAkocmV2aXNpb24gMTY2OTIp
CisrKyBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOCArMjgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEtSZW5k
ZXJpbmdQYWludFNlcnZlcjsKLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0OwogY2xhc3Mg
S1JlbmRlcmluZ0ZpbGxQYWludGVyCiB7CiBwdWJsaWM6CkluZGV4OiBrY2FudmFzL2RldmljZS9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24gMTY2OTIpCisrKyBrY2FudmFzL2RldmljZS9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Owog
Y2xhc3MgUmVuZGVyUGF0aDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgVGV4dFN0cmVhbTsK
QEAgLTcwLDE3ICs2OSwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBLQ1BhaW50U2VydmVyVHlw
ZSB0eXBlKCkgY29uc3QgPSAwOwogICAgIAogICAgIC8vIEFjdHVhbCByZW5kZXJpbmcgZnVuY3Rp
b24KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0
IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFy
Z2V0VHlwZSkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZWFy
ZG93bihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0
VHlwZSkgY29uc3QgPSAwOwogICAgIAogICAgIGJvb2wgaXNQYWludGluZ1RleHQoKSBjb25zdCB7
IHJldHVybiBtX3BhaW50aW5nVGV4dDsgfQogICAgIHZvaWQgc2V0UGFpbnRpbmdUZXh0KGJvb2wg
cGFpbnRpbmdUZXh0KSB7IG1fcGFpbnRpbmdUZXh0ID0gcGFpbnRpbmdUZXh0OyB9CiAKICAgICB2
aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNv
bnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7CiBwcml2YXRlOgogICAgIGNv
bnN0IFJlbmRlclBhdGgqIG1fYWN0aXZlQ2xpZW50OwogICAgIFN0cmluZyBtX3JlZ2lzdHJ5SWQ7
CkluZGV4OiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdTdHJva2VQYWludGVyLmgJKHJldmlzaW9u
IDE2NjkyKQorKysga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsOSArMjcsNyBAQAogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdT
dHlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBLQ2FudmFzUmVuZGVyaW5nU3R5
bGU7Ci1jbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI7Ci1jbGFzcyBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dDsKKwogY2xhc3MgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIKIHsKIHB1YmxpYzoKSW5k
ZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAkocmV2aXNp
b24gMTY2OTIpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNSArMzcsMTMgQEAgY2xhc3MgQ0lJbWFnZTsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlOwotCiBjbGFzcyBLQ2Fu
dmFzRmlsdGVyUXVhcnR6IDogcHVibGljIEtDYW52YXNGaWx0ZXIgewogcHVibGljOgogICAgIEtD
YW52YXNGaWx0ZXJRdWFydHooKTsKICAgICB2aXJ0dWFsIH5LQ2FudmFzRmlsdGVyUXVhcnR6KCk7
CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVGaWx0ZXIoY29uc3QgRmxvYXRSZWN0JiBi
Ym94KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWx0ZXIoY29uc3QgRmxvYXRSZWN0JiBiYm94
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZpbHRlcihHcmFwaGljc0NvbnRleHQqJiwgY29u
c3QgRmxvYXRSZWN0JiBiYm94KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWx0ZXIoR3JhcGhp
Y3NDb250ZXh0KiYsIGNvbnN0IEZsb2F0UmVjdCYgYmJveCwgR3JhcGhpY3NDb250ZXh0KiBvcmln
aW5hbENvbnRleHQpOwogICAgIAogICAgIENJSW1hZ2UqIGltYWdlRm9yTmFtZShjb25zdCBTdHJp
bmcmKSBjb25zdDsKICAgICB2b2lkIHNldEltYWdlRm9yTmFtZShDSUltYWdlKiwgY29uc3QgU3Ry
aW5nJik7CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0
ei5tbQkocmV2aXNpb24gMTY2OTIpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0Zp
bHRlclF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQAogI2ltcG9ydCAi
QmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDYWNoZWRJbWFnZS5oIgogI2ltcG9ydCAiRm91
bmRhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJJ
bWFnZS5oIgotI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogI2ltcG9ydCAiUXVh
cnR6U3VwcG9ydC5oIgogI2ltcG9ydCAiV0tBcml0aG1ldGljRmlsdGVyLmgiCiAjaW1wb3J0ICJX
S0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oIgpAQCAtMTA2LDE1ICsxMDYsMTMgQEAgS0NhbnZhc0Zp
bHRlclF1YXJ0ejo6fktDYW52YXNGaWx0ZXJRdWFydAogICAgIEhhcmRSZWxlYXNlKG1faW1hZ2Vz
QnlOYW1lKTsKIH0KIAotdm9pZCBLQ2FudmFzRmlsdGVyUXVhcnR6OjpwcmVwYXJlRmlsdGVyKGNv
bnN0IEZsb2F0UmVjdCAmYmJveCkKK3ZvaWQgS0NhbnZhc0ZpbHRlclF1YXJ0ejo6cHJlcGFyZUZp
bHRlcihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QgJmJib3gpCiB7
Ci0gICAgaWYgKGJib3guaXNFbXB0eSgpIHx8ICFLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpmaWx0
ZXJzRW5hYmxlZCgpIHx8IG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKGJib3guaXNFbXB0
eSgpIHx8ICFLQ2FudmFzRmlsdGVyOjpmaWx0ZXJzRW5hYmxlZCgpIHx8IG1fZWZmZWN0cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBz
dGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Kj4ocmVuZGVyaW5nRGV2aWNlKCkpLT5j
dXJyZW50Q0dDb250ZXh0KCk7CiAgICAgCiAgICAgLy8gZ2V0IGEgQ0lDb250ZXh0LCBhbmQgQ0dM
YXllciBmb3IgZHJhd2luZyBpbi4KLSAgICBib29sIHVzZVNvZnR3YXJlID0gISBLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6OjpoYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoKTsKKyAgICBib29sIHVzZVNv
ZnR3YXJlID0gISBLQ2FudmFzRmlsdGVyOjpoYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoKTsKICAg
ICBOU0RpY3Rpb25hcnkgKmNvbnRleHRPcHRpb25zID0gbmlsOwogICAgIAogICAgIGlmICh1c2VT
b2Z0d2FyZSkKQEAgLTEyNywyNCArMTI1LDIzIEBAIHZvaWQgS0NhbnZhc0ZpbHRlclF1YXJ0ejo6
cHJlcGFyZUZpbHRlcigKICAgICAvLyA8aHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3No
b3dfYnVnLmNnaT9pZD02OTQ3PgogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjQ3NzM1PgogICAg
IE5TQXV0b3JlbGVhc2VQb29sICpmaWx0ZXJDb250ZXh0UG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBv
b2wgYWxsb2NdIGluaXRdOwotICAgIG1fZmlsdGVyQ0lDb250ZXh0ID0gSGFyZFJldGFpbihbQ0lD
b250ZXh0IGNvbnRleHRXaXRoQ0dDb250ZXh0OmNnQ29udGV4dCBvcHRpb25zOmNvbnRleHRPcHRp
b25zXSk7CisgICAgbV9maWx0ZXJDSUNvbnRleHQgPSBIYXJkUmV0YWluKFtDSUNvbnRleHQgY29u
dGV4dFdpdGhDR0NvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgb3B0aW9uczpjb250
ZXh0T3B0aW9uc10pOwogICAgIFtmaWx0ZXJDb250ZXh0UG9vbCBkcmFpbl07CiAgICAgCiAgICAg
bV9maWx0ZXJDR0xheWVyID0gW21fZmlsdGVyQ0lDb250ZXh0IGNyZWF0ZUNHTGF5ZXJXaXRoU2l6
ZTpDR1JlY3QoYmJveCkuc2l6ZSBpbmZvOk5VTExdOwogICAgIAotICAgIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gbmV3IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVh
cnR6KENHTGF5ZXJHZXRDb250ZXh0KG1fZmlsdGVyQ0dMYXllcikpOwotICAgIHJlbmRlcmluZ0Rl
dmljZSgpLT5wdXNoQ29udGV4dChmaWx0ZXJDb250ZXh0KTsKKyAgICBjb250ZXh0ID0gbmV3IEdy
YXBoaWNzQ29udGV4dChDR0xheWVyR2V0Q29udGV4dChtX2ZpbHRlckNHTGF5ZXIpKTsKICAgICAK
LSAgICBmaWx0ZXJDb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRl
KC0xLjBmICogYmJveC54KCksIC0xLjBmICogYmJveC55KCkpKTsKKyAgICBjb250ZXh0LT5jb25j
YXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKC0xLjBmICogYmJveC54KCksIC0xLjBm
ICogYmJveC55KCkpKTsKIH0KIAotdm9pZCBLQ2FudmFzRmlsdGVyUXVhcnR6OjphcHBseUZpbHRl
cihjb25zdCBGbG9hdFJlY3QgJmJib3gpCit2b2lkIEtDYW52YXNGaWx0ZXJRdWFydHo6OmFwcGx5
RmlsdGVyKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCAmYmJveCwg
R3JhcGhpY3NDb250ZXh0KiBvcmlnaW5hbENvbnRleHQpCiB7Ci0gICAgaWYgKGJib3guaXNFbXB0
eSgpIHx8ICFLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpmaWx0ZXJzRW5hYmxlZCgpIHx8IG1fZWZm
ZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKGJib3guaXNFbXB0eSgpIHx8ICFLQ2FudmFzRmlsdGVy
OjpmaWx0ZXJzRW5hYmxlZCgpIHx8IG1fZWZmZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKLQotICAgIC8vIHJlc3RvcmUgdGhlIHByZXZpb3VzIGNvbnRleHQsIGRlbGV0ZSB0aGUgZmls
dGVyIGNvbnRleHQuCi0gICAgZGVsZXRlIChyZW5kZXJpbmdEZXZpY2UoKS0+cG9wQ29udGV4dCgp
KTsKKyAgICAKKyAgICBkZWxldGUgY29udGV4dDsKKyAgICBjb250ZXh0ID0gb3JpZ2luYWxDb250
ZXh0OwogCiAgICAgLy8gYWN0dWFsbHkgYXBwbHkgdGhlIGZpbHRlciBlZmZlY3RzCiAgICAgQ0lJ
bWFnZSAqaW5wdXRJbWFnZSA9IFtDSUltYWdlIGltYWdlV2l0aENHTGF5ZXI6bV9maWx0ZXJDR0xh
eWVyXTsKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW0J
KHJldmlzaW9uIDE2NjkyKQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVh
cnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAjaW1wb3J0ICJLUmVuZGVy
aW5nRmlsbFBhaW50ZXIuaCIKICNpbXBvcnQgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCiAK
LSNpbXBvcnQgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQgIktDYW52YXNGaWx0
ZXJRdWFydHouaCIKICNpbXBvcnQgIktDYW52YXNSZXNvdXJjZXNRdWFydHouaCIKICNpbXBvcnQg
IktDYW52YXNNYXNrZXJRdWFydHouaCIKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2Fu
dmFzTWFza2VyUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tD
YW52YXNNYXNrZXJRdWFydHouaAkocmV2aXNpb24gMTY2OTIpCisrKyBrY2FudmFzL2RldmljZS9x
dWFydHovS0NhbnZhc01hc2tlclF1YXJ0ei5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIGNsYXNzIEtDYW52YXNNYXNrZXJRdWFydHogOiBwdWJsaWMgS0NhbnYKIHB1YmxpYzoKICAg
ICBLQ2FudmFzTWFza2VyUXVhcnR6KCkgeyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5
TWFzayhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlNYXNrKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdC
b3gpIGNvbnN0OwogfTsKIAogfQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNN
YXNrZXJRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52
YXNNYXNrZXJRdWFydHoubW0JKHJldmlzaW9uIDE2NjkyKQorKysga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tDYW52YXNNYXNrZXJRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYg
QEAKICNpbXBvcnQgIlNWR1JlbmRlclN0eWxlLmgiCiAKICNpbXBvcnQgIktDYW52YXNSZXNvdXJj
ZXNRdWFydHouaCIKLSNpbXBvcnQgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQg
IlF1YXJ0elN1cHBvcnQuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KQEAg
LTg2LDcgKzg1LDcgQEAgc3RhdGljIENJSW1hZ2UgKnRyYW5zZm9ybUltYWdlSW50b0dyYXlzYwog
ICAgIHJldHVybiBbbXVsdGlwbGllZEdyYXlzY2FsZSB2YWx1ZUZvcktleTpAIm91dHB1dEltYWdl
Il07CiB9CiAKLXZvaWQgS0NhbnZhc01hc2tlclF1YXJ0ejo6YXBwbHlNYXNrKGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0Cit2b2lkIEtDYW52YXNNYXNrZXJRdWFydHo6OmFwcGx5
TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdC
b3gpIGNvbnN0CiB7CiAgICAgaWYgKCFtX21hc2spCiAgICAgICAgIHJldHVybjsKQEAgLTEwNCw3
ICsxMDMsNyBAQCB2b2lkIEtDYW52YXNNYXNrZXJRdWFydHo6OmFwcGx5TWFzayhjb25zCiAgICAg
W2NpR3JheXNjYWxlQ29udGV4dCBkcmF3SW1hZ2U6Z3JheXNjYWxlTWFzayBhdFBvaW50OkNHUG9p
bnRaZXJvIGZyb21SZWN0OkNHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdodCldOwogCiAgICAg
Q0dJbWFnZVJlZiBncmF5c2NhbGVJbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGdy
YXlzY2FsZUNvbnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBzdGF0aWNfY2Fz
dDxLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Kj4ocmVuZGVyaW5nRGV2aWNlKCkpLT5jdXJyZW50Q0dD
b250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIENHQ29udGV4dENsaXBUb01hc2soY2dDb250ZXh0LCBDR1JlY3RNYWtl
KDAsIDAsIHdpZHRoLCBoZWlnaHQpLCBncmF5c2NhbGVJbWFnZSk7CiAgICAgCiAgICAgQ0dJbWFn
ZVJlbGVhc2UoZ3JheXNjYWxlSW1hZ2UpOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tD
YW52YXNSZXNvdXJjZXNRdWFydHouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFy
dHovS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oCShyZXZpc2lvbiAxNjY5MikKKysrIGtjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAgY2xhc3MgS0NhbnZhc0NsaXBwZXJRdWFydHogOiBwdWJsaWMgS0Nhbgog
cHVibGljOgogICAgIEtDYW52YXNDbGlwcGVyUXVhcnR6KCkgeyB9CiAgICAgCi0gICAgdmlydHVh
bCB2b2lkIGFwcGx5Q2xpcChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlDbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRpbmdCb3gpIGNvbnN0OwogfTsKIAogY2xhc3MgS0NhbnZhc0ltYWdlUXVhcnR6IDog
cHVibGljIEtDYW52YXNJbWFnZSB7CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZh
c1Jlc291cmNlc1F1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHov
S0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5tbQkocmV2aXNpb24gMTY2OTIpCisrKyBrY2FudmFzL2Rl
dmljZS9xdWFydHovS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTUgKzMyLDEzIEBACiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIktD
YW52YXNGaWx0ZXJRdWFydHouaCIKICNpbXBvcnQgIktDYW52YXNNYXNrZXJRdWFydHouaCIKLSNp
bXBvcnQgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQgIlF1YXJ0elN1cHBvcnQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEtDYW52YXNDbGlwcGVyUXVhcnR6Ojph
cHBseUNsaXAoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3QKK3ZvaWQgS0NhbnZh
c0NsaXBwZXJRdWFydHo6OmFwcGx5Q2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqIGNvbnRleHQgPSByZW5kZXJpbmdEZXZpY2UoKS0+Y3VycmVudENvbnRleHQoKTsKLSAg
ICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdWFydHoqPihjb250ZXh0KS0+Y2dDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGlmIChtX2NsaXBEYXRh
LmNvdW50KCkgPCAxKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAkocmV2aXNpb24gMTY2OTIpCisrKyBr
Y2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgICAgIDIwMDYg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotCi0jaWZuZGVmIEtSZW5kZXJpbmdEZXZp
Y2VRdWFydHpfSAotI2RlZmluZSBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6X0gKLSNpZmRlZiBTVkdf
U1VQUE9SVAotCi0jaW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlLmgiCi0KLXR5cGVkZWYgc3RydWN0
IENHUmVjdCBDR1JlY3Q7Ci10eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgKkNHQ29udGV4dFJlZjsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1
YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dDb250ZXh0UmVmKTsKLSAgICB2aXJ0dWFsIH5L
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eigpOwotICAgIAotICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2aXJ0dWFs
IEFmZmluZVRyYW5zZm9ybSBjdG0oKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJQYXRoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYpOwotCi0gICAg
dmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgIAot
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NnQ29udGV4dDsg
fTsKLSAgICAKLXByaXZhdGU6Ci0gICAgQ0dDb250ZXh0UmVmIG1fY2dDb250ZXh0OwotfTsKLQot
Y2xhc3MgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlIHsK
LXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6KCkgeyB9Ci0gICAgdmlydHVhbCB+
S1JlbmRlcmluZ0RldmljZVF1YXJ0eigpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQnVmZmVy
ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gY29udGV4dCBtYW5hZ2VtZW50
LgotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0KCkgY29u
c3Q7Ci0gICAgQ0dDb250ZXh0UmVmIGN1cnJlbnRDR0NvbnRleHQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdl
KikgY29uc3Q7Ci0KLSAgICAvLyBSZXNvdXJjZSBjcmVhdGlvbgotICAgIHZpcnR1YWwgS0NhbnZh
c1Jlc291cmNlICpjcmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSYpIGNvbnN0Owot
ICAgIHZpcnR1YWwgS1JlbmRlcmluZ1BhaW50U2VydmVyICpjcmVhdGVQYWludFNlcnZlcihjb25z
dCBLQ1BhaW50U2VydmVyVHlwZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVm
ZmVjdCAqY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSYpIGNvbnN0
OwotICAgIAotICAgIC8vIGZpbHRlcnMgKG1vc3RseSBkZWJ1Z2dpbmcpCi0gICAgc3RhdGljIGJv
b2wgZmlsdGVyc0VuYWJsZWQoKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRGaWx0ZXJzRW5hYmxlZChi
b29sKTsKLSAgICBzdGF0aWMgYm9vbCBoYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoKTsKLSAgICBz
dGF0aWMgdm9pZCBzZXRIYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoYm9vbCk7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTVkdfU1VQUE9SVAotI2VuZGlmIC8vIEtS
ZW5kZXJpbmdEZXZpY2VRdWFydHpfSApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5k
ZXJpbmdEZXZpY2VRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JKHJldmlzaW9uIDE2NjkyKQorKysga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI2LDEzOSArMjYsNTUgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQ
T1JUCi0jaW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAKICNpbXBvcnQgIkZvdW5k
YXRpb25FeHRyYXMuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIktD
YW52YXNNYXJrZXIuaCIKKyNpbXBvcnQgIktDYW52YXNNYXJrZXIuaCIKICNpbXBvcnQgIktDYW52
YXNGaWx0ZXJRdWFydHouaCIKICNpbXBvcnQgIktDYW52YXNNYXNrZXJRdWFydHouaCIKICNpbXBv
cnQgIktDYW52YXNSZXNvdXJjZXNRdWFydHouaCIKLSNpbXBvcnQgIktSZW5kZXJpbmdGaWxsUGFp
bnRlci5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmgiCi0jaW1wb3J0
ICJLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9y
dCAiUXVhcnR6U3VwcG9ydC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjpLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dFF1YXJ0eihDR0NvbnRleHRSZWYgY29udGV4dCkKLSAgICA6IG1fY2dDb250ZXh0
KENHQ29udGV4dFJldGFpbihjb250ZXh0KSkKLXsKLSAgICBBU1NFUlQobV9jZ0NvbnRleHQpOwot
fQotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6fktSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXVhcnR6KCkKLXsKLSAgICBDR0NvbnRleHRSZWxlYXNlKG1fY2dDb250ZXh0KTsKLX0KLQot
QWZmaW5lVHJhbnNmb3JtIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojpjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB3b3JsZE1hdHJpeCkKLXsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gcmV0ID0gY3RtKCk7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gd01hdHJpeCA9IHdvcmxkTWF0
cml4OwotICAgIENHQ29udGV4dENvbmNhdENUTShtX2NnQ29udGV4dCwgd01hdHJpeCk7Ci0gICAg
cmV0dXJuIHJldDsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
UXVhcnR6OjpjdG0oKSBjb25zdAotewotICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0obV9jZ0Nv
bnRleHQpOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjpjbGVhclBh
dGgoKQotewotICAgIENHQ29udGV4dEJlZ2luUGF0aChtX2NnQ29udGV4dCk7Ci19Ci0KLXZvaWQg
S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBDR0NvbnRleHRBZGRQYXRoKG1fY2dDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgp
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4
dChtX2NnQ29udGV4dCk7Ci19Ci0KLXN0YXRpYyBib29sIF9fdXNlRmlsdGVycyA9IHRydWU7Ci0K
LWJvb2wgS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6ZmlsdGVyc0VuYWJsZWQoKQotewotICAgIHJl
dHVybiBfX3VzZUZpbHRlcnM7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6c2V0
RmlsdGVyc0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIF9fdXNlRmlsdGVycyA9IGVuYWJs
ZWQ7Ci19Ci0KLXN0YXRpYyBib29sIF9fdXNlSGFyZHdhcmVSZW5kZXJpbmcgPSB0cnVlOwotCi1i
b29sIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZCgpCi17
Ci0gICAgcmV0dXJuIF9fdXNlSGFyZHdhcmVSZW5kZXJpbmc7Ci19Ci0KLXZvaWQgS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ejo6c2V0SGFyZHdhcmVSZW5kZXJpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkK
LXsKLSAgICBfX3VzZUhhcmR3YXJlUmVuZGVyaW5nID0gZW5hYmxlZDsKLX0KLQotI3ByYWdtYSBt
YXJrIC0KLSNwcmFnbWEgbWFyayBDb250ZXh0IE1hbmFnZW1lbnQKLQotS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdWFydHoqIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OnF1YXJ0ekNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1
YXJ0eio+KGN1cnJlbnRDb250ZXh0KCkpOwotfQotCi1DR0NvbnRleHRSZWYgS1JlbmRlcmluZ0Rl
dmljZVF1YXJ0ejo6Y3VycmVudENHQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHF1YXJ0
ekNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIHF1YXJ0ekNvbnRleHQoKS0+Y2dDb250ZXh0KCk7Ci19
Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Ojpjb250
ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdlICppbWFnZSkgY29uc3QKK0dyYXBoaWNzQ29udGV4dCog
S1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6Y29udGV4dEZvckltYWdlKEtDYW52YXNJbWFnZSogaW1h
Z2UpIGNvbnN0CiB7CiAgICAgS0NhbnZhc0ltYWdlUXVhcnR6KiBxdWFydHpJbWFnZSA9IHN0YXRp
Y19jYXN0PEtDYW52YXNJbWFnZVF1YXJ0eio+KGltYWdlKTsKICAgICBDR0xheWVyUmVmIGNnTGF5
ZXIgPSBxdWFydHpJbWFnZS0+Y2dMYXllcigpOwogICAgIGlmICghY2dMYXllcikgewogICAgICAg
ICAvLyBGSVhNRTogd2UgbWlnaHQgbm90IGdldCBiYWNrIGEgbGF5ZXIgaWYgdGhpcyBpcyBhIGxv
YWRlZCBpbWFnZQogICAgICAgICAvLyBtYXliZSB0aGlzIGxvZ2ljIHNob3VsZCBnbyBpbnRvIEtD
YW52YXNJbWFnZT8KLSAgICAgICAgY2dMYXllciA9IENHTGF5ZXJDcmVhdGVXaXRoQ29udGV4dChj
dXJyZW50Q0dDb250ZXh0KCksIENHU2l6ZShpbWFnZS0+c2l6ZSgpICsgSW50U2l6ZSgxLDEpKSwg
TlVMTCk7ICAvLyBGSVhNRSArIDEgaXMgYSBoYWNrCisgICAgICAgIGNnTGF5ZXIgPSBDR0xheWVy
Q3JlYXRlV2l0aENvbnRleHQoY3VycmVudENvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIENH
U2l6ZShpbWFnZS0+c2l6ZSgpICsgSW50U2l6ZSgxLDEpKSwgTlVMTCk7ICAvLyBGSVhNRSArIDEg
aXMgYSBoYWNrCiAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgY29tcG9zaXRlIHRoZSBvcmln
aW5hbCBpbWFnZSBvbnRvIHRoZSBsYXllci4uLgogICAgICAgICBxdWFydHpJbWFnZS0+c2V0Q0dM
YXllcihjZ0xheWVyKTsKICAgICAgICAgQ0dMYXllclJlbGVhc2UoY2dMYXllcik7CiAgICAgfQot
ICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dMYXllckdldENv
bnRleHQoY2dMYXllcikpOworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0KENHTGF5ZXJH
ZXRDb250ZXh0KGNnTGF5ZXIpKTsKIH0KIAogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBS
ZXNvdXJjZSBDcmVhdGlvbgogCi1LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKktSZW5kZXJpbmdEZXZp
Y2VRdWFydHo6OmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJiB0eXBl
KSBjb25zdAorS1JlbmRlcmluZ1BhaW50U2VydmVyKiBjcmVhdGVQYWludFNlcnZlcihjb25zdCBL
Q1BhaW50U2VydmVyVHlwZSYgdHlwZSkKIHsKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKm5l
d1NlcnZlciA9IE5VTEw7CiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFBTX1NPTElEOgot
ICAgICAgICBuZXdTZXJ2ZXIgPSBuZXcgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHoo
KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyU29saWRRdWFydHooKTsKICAgICBjYXNlIFBTX1BBVFRFUk46Ci0gICAgICAgIG5ld1NlcnZl
ciA9IG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6KCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFy
dHooKTsKICAgICBjYXNlIFBTX0xJTkVBUl9HUkFESUVOVDoKLSAgICAgICAgbmV3U2VydmVyID0g
bmV3IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXVhcnR6KCk7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50UXVhcnR6KCk7CiAgICAgY2FzZSBQU19SQURJQUxfR1JBRElFTlQ6Ci0gICAgICAgIG5l
d1NlcnZlciA9IG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF1YXJ0eigp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJSYWRpYWxHcmFkaWVudFF1YXJ0eigpOwogICAgIH0KLSAgICByZXR1cm4gbmV3U2VydmVyOwor
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwYWludCBzZXJ2ZXIgb2YgdHlwZTogJWki
LCB0eXBlKTsKKyAgICByZXR1cm4gMDsKIH0KIAotS0NhbnZhc1Jlc291cmNlICpLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6OjpjcmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSYgdHlwZSkg
Y29uc3QKK0tDYW52YXNSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5
cGUmIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBSU19DTElQUEVSOgpA
QCAtMTc2LDcgKzkyLDcgQEAgS0NhbnZhc1Jlc291cmNlICpLUmVuZGVyaW5nRGV2aWNlUXVhcnR6
OgogICAgIHJldHVybiAwOwogfQogCi1LQ2FudmFzRmlsdGVyRWZmZWN0ICpLUmVuZGVyaW5nRGV2
aWNlUXVhcnR6OjpjcmVhdGVGaWx0ZXJFZmZlY3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlJiB0
eXBlKSBjb25zdAorS0NhbnZhc0ZpbHRlckVmZmVjdCogY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0
IEtDRmlsdGVyRWZmZWN0VHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2godHlwZSkKICAgICB7CkBA
IC0yMDYsMTIgKzEyMiw2IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3QgKktSZW5kZXJpbmdEZXZpY2VR
dWEKICAgICB9CiB9CiAKLUtSZW5kZXJpbmdEZXZpY2UqIHJlbmRlcmluZ0RldmljZSgpCi17Ci0g
ICAgc3RhdGljIEtSZW5kZXJpbmdEZXZpY2UqIHNoYXJlZFJlbmRlcmluZ0RldmljZSA9IG5ldyBL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6KCk7Ci0gICAgcmV0dXJuIHNoYXJlZFJlbmRlcmluZ0Rldmlj
ZTsKLX0KLQogfQogCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRR
dWFydHoubW0JKHJldmlzaW9uIDE2NjkyKQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
OCArMjksMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAogI2lt
cG9ydCAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmgiCi0jaW1wb3J0ICJRdWFydHpTdXBw
b3J0LmgiCi0KLSNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgogCisjaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbXBvcnQgIktDYW52YXNJbWFnZS5oIgogI2ltcG9ydCAiS0NhbnZhc1JlbmRl
cmluZ1N0eWxlLmgiCi0jaW1wb3J0ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKKyNpbXBvcnQg
IktDYW52YXNSZXNvdXJjZXNRdWFydHouaCIKICNpbXBvcnQgIktSZW5kZXJpbmdGaWxsUGFpbnRl
ci5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKLSNpbXBvcnQgIktSZW5k
ZXJpbmdEZXZpY2VRdWFydHouaCIKLQotI2ltcG9ydCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5o
IgotI2ltcG9ydCAiS0NhbnZhc0ltYWdlLmgiCisjaW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCisj
aW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKIAogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KIApA
QCAtNDksNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgdm9pZCBjZ0dyYWRp
ZW50Q2FsbGJhY2sodm9pZCogaW5mbywgY29uc3QgQ0dGbG9hdCogaW5WYWx1ZXMsIENHRmxvYXQq
IG91dENvbG9yKQogewogICAgIGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVh
cnR6KiBzZXJ2ZXIgPSAoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoq
KWluZm87Ci0gICAgUXVhcnR6R3JhZGllbnRTdG9wICpzdG9wcyA9IHNlcnZlci0+bV9zdG9wc0Nh
Y2hlOworICAgIFF1YXJ0ekdyYWRpZW50U3RvcCogc3RvcHMgPSBzZXJ2ZXItPm1fc3RvcHNDYWNo
ZTsKICAgICBpbnQgc3RvcHNDb3VudCA9IHNlcnZlci0+bV9zdG9wc0NvdW50OwogICAgIAogICAg
IENHRmxvYXQgaW5WYWx1ZSA9IGluVmFsdWVzWzBdOwpAQCAtMjEyLDcgKzIwOSw3IEBAIHZvaWQg
S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQKICAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudDo6aW52YWxpZGF0ZSgpOwogfQogCi12b2lkIEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50UXVhcnR6OjpkcmF3KGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250
ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25z
dAordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6ZHJhdyhjb25zdCBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCogc2VydmVyLCBHcmFwaGljc0NvbnRleHQqIHJl
bmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKCFzZXR1cChzZXJ2ZXIsIHJlbmRlcmluZ0NvbnRleHQs
IHBhdGgsIHR5cGUpKQogICAgICAgICByZXR1cm47CkBAIC0yMjAsNyArMjE3LDcgQEAgdm9pZCBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0egogICAgIHRlYXJkb3duKHNlcnZlciwg
cmVuZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSk7CiB9CiAKLWJvb2wgS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnRRdWFydHo6OnNldHVwKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0
LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlw
ZSkgY29uc3QKK2Jvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OnNldHVw
KGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEdyYXBoaWNzQ29u
dGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKHNlcnZlci0+bGlzdGVu
ZXIoKSkgLy8gdGhpcyBzZWVtcyBsaWtlIGJhZCBkZXNpZ24gdG8gbWUsIHNob3VsZCBiZSBpbiBh
IGNvbW1vbiBiYXNlY2xhc3MuIC0tIGVjcyA4LzYvMDUKICAgICAgICAgc2VydmVyLT5saXN0ZW5l
cigpLT5yZXNvdXJjZU5vdGlmaWNhdGlvbigpOwpAQCAtMjMzLDggKzIzMCw3IEBAIGJvb2wgS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoKICAgICBpZiAoIW1fc2hhZGluZ0NhY2hl
KQogICAgICAgICBjb25zdF9jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6
Kj4odGhpcyktPnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2FjaGUoc2VydmVyKTsKICAgICAKLSAgICBL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6KiBxdWFydHpEZXZpY2UgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nRGV2aWNlUXVhcnR6Kj4ocmVuZGVyaW5nRGV2aWNlKCkpOwotICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcXVhcnR6RGV2aWNlLT5jdXJyZW50Q0dDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJPYmplY3QtPnN0eWxlKCk7CiAgICAgQVNT
RVJUKGNvbnRleHQgIT0gTlVMTCk7CiAgICAgCkBAIC0yNTEsMTQgKzI0NywxNCBAQCBib29sIEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6CiAgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7CiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4
dCwgcmVuZGVyU3R5bGUsIHJlbmRlck9iamVjdCk7IC8vIEZJWE1FOiB0aGlzIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHBsYWNlIGZvciB0aGlzLgogICAgICAgICBpZiAoc2VydmVyLT5pc1BhaW50aW5n
VGV4dCgpKSB7Ci0gICAgICAgICAgICBtX21hc2tJbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJ
bWFnZSo+KHF1YXJ0ekRldmljZS0+Y3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsKKyAgICAgICAg
ICAgIG1fbWFza0ltYWdlID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ltYWdlKj4oY3JlYXRlUmVzb3Vy
Y2UoUlNfSU1BR0UpKTsKICAgICAgICAgICAgIGludCB3aWR0aCAgPSAyMDQ4OwogICAgICAgICAg
ICAgaW50IGhlaWdodCA9IDIwNDg7IC8vIEZJWE1FPz8/CiAgICAgICAgICAgICBJbnRTaXplIHNp
emUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgbV9tYXNrSW1hZ2UtPmlu
aXQoc2l6ZSk7Ci0gICAgICAgICAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogbWFza0ltYWdl
Q29udGV4dCA9IHF1YXJ0ekRldmljZS0+Y29udGV4dEZvckltYWdlKG1fbWFza0ltYWdlKTsKKyAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IGNvbnRleHRGb3JJ
bWFnZShtX21hc2tJbWFnZSk7CiAgICAgICAgICAgICBxdWFydHpEZXZpY2UtPnB1c2hDb250ZXh0
KG1hc2tJbWFnZUNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0UmVmIG1hc2tDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihtYXNrSW1hZ2VD
b250ZXh0KS0+Y2dDb250ZXh0KCk7CisgICAgICAgICAgICBDR0NvbnRleHRSZWYgbWFza0NvbnRl
eHQgPSBtYXNrSW1hZ2VDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4ocmVuZGVyT2JqZWN0KS0+c3R5bGUoKS0+c2V0Q29sb3Io
Q29sb3IoMjU1LCAyNTUsIDI1NSkpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdp
bmdNb2RlKG1hc2tDb250ZXh0LCBrQ0dUZXh0U3Ryb2tlKTsKICAgICAgICAgfQpAQCAtMjY2LDEw
ICsyNjIsOSBAQCBib29sIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFy
dHo6OnJlbmRlclBhdGgoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZl
ciwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRl
clBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6OjpyZW5kZXJQYXRoKGNvbnN0IEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29u
dGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29u
c3QKIHsgICAgCi0gICAgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiogcXVhcnR6RGV2aWNlID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZVF1YXJ0eio+KHJlbmRlcmluZ0RldmljZSgpKTsKLSAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0ekRldmljZS0+Y3VycmVudENHQ29udGV4dCgp
OworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcGF0aC0+c3R5bGUoKTsK
ICAgICBBU1NFUlQoY29udGV4dCAhPSBOVUxMKTsKICAgICAKQEAgLTI5NCwxMiArMjg5LDExIEBA
IHZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoKICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgZ3JhZGllbnRUcmFuc2Zvcm0pOwogfQogCi12b2lkIEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Ojp0ZWFyZG93bihjb25zdCBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudCAqc2VydmVyLCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVuZGVy
aW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVh
cnR6Ojp0ZWFyZG93bihjb25zdCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqc2VydmVy
LCBHcmFwaGljc0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogeyAKICAgICBDR1No
YWRpbmdSZWYgc2hhZGluZyA9IG1fc2hhZGluZ0NhY2hlOwogICAgIEtDYW52YXNJbWFnZSogbWFz
a0ltYWdlID0gbV9tYXNrSW1hZ2U7Ci0gICAgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiogcXVhcnR6
RGV2aWNlID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZVF1YXJ0eio+KHJlbmRlcmluZ0Rl
dmljZSgpKTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0ekRldmljZS0+Y3VycmVu
dENHQ29udGV4dCgpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcmVu
ZGVyT2JqZWN0LT5zdHlsZSgpOwogICAgIEFTU0VSVChjb250ZXh0ICE9IE5VTEwpOwogICAgIApJ
bmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJRdWFydHouaAkocmV2aXNpb24gMTY2OTIpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS1Jl
bmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbXBvcnQgIktSZW5kZXJpbmdEZXZpY2UuaCIK
ICNpbXBvcnQgIktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmgiCiAjaW1wb3J0ICJLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJH
cmFkaWVudC5oIgpAQCAtNDQsMjEgKzQzLDIxIEBAIHB1YmxpYzoKIGNsYXNzIEtSZW5kZXJpbmdQ
YWludFNlcnZlclNvbGlkUXVhcnR6IDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlk
IHsKIHB1YmxpYzoKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0eigpIHt9Owot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0
dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50
VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRl
clBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNldHVw
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwogcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29u
c3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWlu
dFRhcmdldFR5cGUpIGNvbnN0OwogfTsKIAogY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0
dGVyblF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuIHsKIHB1Ymxp
YzoKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6KCkge30KLSAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgq
LCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5
cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwg
S0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRl
ck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIHByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRl
clBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlbmRl
clBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRU
eXBlKSBjb25zdDsKIHByaXZhdGU6CiAgICAgbXV0YWJsZSBDR0NvbG9yU3BhY2VSZWYgbV9wYXR0
ZXJuU3BhY2U7CiAgICAgbXV0YWJsZSBDR1BhdHRlcm5SZWYgbV9wYXR0ZXJuOwpAQCAtODAsMTAg
Kzc5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVF1YXJ0ekdyYWRpZW50U3RvcHNDYWNo
ZShjb25zdCBWZWN0b3I8S0NHcmFkaWVudFN0b3A+JiBzdG9wcyk7CiAgICAgdm9pZCB1cGRhdGVR
dWFydHpHcmFkaWVudENhY2hlKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBz
ZXJ2ZXIpOwogCi0gICAgdm9pZCBkcmF3KGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRp
ZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCos
IEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLSAgICBib29sIHNldHVwKGNvbnN0IEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwotICAgIHZvaWQg
dGVhcmRvd24oY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlciwgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0
VHlwZSkgY29uc3Q7Ci0gICAgdm9pZCByZW5kZXJQYXRoKGNvbnN0IEtSZW5kZXJpbmdQYWludFNl
cnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2b2lkIGRyYXcoY29uc3Qg
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlciwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICBib29sIHNl
dHVwKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsK
KyAgICB2b2lkIHRlYXJkb3duKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBz
ZXJ2ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJn
ZXRUeXBlKSBjb25zdDsKKyAgICB2b2lkIHJlbmRlclBhdGgoY29uc3QgS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnQqIHNlcnZlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0
aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIAogcHVibGljOgogICAgIC8vIGR1ZSB0byBj
IGZ1bmN0aW9ucwpAQCAtMTAxLDEzICsxMDAsMTMgQEAgY2xhc3MgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyTGluZWFyR3JhZGllbgogcHVibGljOgogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50UXVhcnR6KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29u
c3QgUmVuZGVyUGF0aCogcmVuZGVyUGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJl
bmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiAgICAg
ICAgIHsgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OmRyYXcodGhpcywgY29u
dGV4dCwgcmVuZGVyUGF0aCwgdHlwZSk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorICAgIHZpcnR1YWwgYm9vbCBzZXR1
cChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAgICAgICB7IHJldHVybiBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6c2V0dXAodGhpcywgY29udGV4dCwgcmVu
ZGVyT2JqZWN0LCB0eXBlKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3du
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiAgICAgICAgIHsgS1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnRRdWFydHo6OnRlYXJkb3duKHRoaXMsIGNvbnRleHQsIHJlbmRlck9i
amVjdCwgdHlwZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcmVuZGVyUGF0aCwgS0NQYWlu
dFRhcmdldFR5cGUgdHlwZSkgY29uc3QKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFp
bnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiAgICAgICAgIHsgS1JlbmRlcmluZ1BhaW50U2VydmVy
R3JhZGllbnRRdWFydHo6OnJlbmRlclBhdGgodGhpcywgY29udGV4dCwgcmVuZGVyUGF0aCwgdHlw
ZSk7IH0KIH07CiAKQEAgLTExNiwxMyArMTE1LDEzIEBAIGNsYXNzIEtSZW5kZXJpbmdQYWludFNl
cnZlclJhZGlhbEdyYWRpZW4KIHB1YmxpYzoKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRp
YWxHcmFkaWVudFF1YXJ0eigpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0
CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAg
ICAgICB7IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6OjpkcmF3KHRoaXMsIGNv
bnRleHQsIHJlbmRlclBhdGgsIHR5cGUpOyB9Ci0gICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgc2V0
dXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OnNldHVwKHRoaXMsIGNvbnRleHQsIHJl
bmRlck9iamVjdCwgdHlwZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAgICAgICB7IEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50UXVhcnR6Ojp0ZWFyZG93bih0aGlzLCBjb250ZXh0LCByZW5kZXJP
YmplY3QsIHR5cGUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFp
bnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1Bh
aW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAgICAgICB7IEtSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50UXVhcnR6OjpyZW5kZXJQYXRoKHRoaXMsIGNvbnRleHQsIHJlbmRlclBhdGgsIHR5
cGUpOyB9CiB9OwogCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50
U2VydmVyUXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHoubW0JKHJldmlzaW9uIDE2NjkyKQorKysga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjksMTUgKzI5LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NV
UFBPUlQKICNpbXBvcnQgIktSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oIgotI2ltcG9ydCAi
UXVhcnR6U3VwcG9ydC5oIgotI2ltcG9ydCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIgotI2lt
cG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogCisjaW1wb3J0ICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbXBvcnQgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2ltcG9ydCAiS1JlbmRl
cmluZ1BhaW50U2VydmVyLmgiCisjaW1wb3J0ICJLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmgiCiAj
aW1wb3J0ICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKKyNpbXBvcnQgIktSZW5kZXJpbmdQYWlu
dFNlcnZlci5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKLSNpbXBvcnQg
IktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbXBvcnQgIlF1YXJ0elN1cHBvcnQuaCIKIAogI2ltcG9y
dCAiTG9nZ2luZy5oIgogCkBAIC03MCw3ICs2OSw3IEBAIHZvaWQgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyUXVhcnR6SGVscGVyOjoKICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKIH0gICAg
CiAKLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OmRyYXcoS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgs
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZl
clNvbGlkUXVhcnR6OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29u
c3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAg
ICBpZiAoIXNldHVwKHJlbmRlcmluZ0NvbnRleHQsIHBhdGgsIHR5cGUpKQogICAgICAgICByZXR1
cm47CkBAIC03OCwxMCArNzcsOSBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXVh
cnR6OjpkCiAgICAgdGVhcmRvd24ocmVuZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSk7CiB9CiAK
LWJvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OnNldHVwKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK2Jvb2wgS1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWRRdWFydHo6OnNldHVwKEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29u
dGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0
ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KHJl
bmRlcmluZ0NvbnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcXVhcnR6Q29udGV4
dC0+Y2dDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSByZW5kZXJpbmdDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBy
ZW5kZXJPYmplY3QtPnN0eWxlKCk7CiAKICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBy
ZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsKQEAgLTExNCwxOCArMTEyLDE3IEBAIGJvb2wgS1JlbmRl
cmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0ejo6cmVuZGVyUGF0aChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcmVuZGVy
UGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRRdWFydHo6OnJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiByZW5kZXJpbmdD
b250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0
eXBlKSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHJlbmRlclBhdGgt
PnN0eWxlKCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0ekNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KHJlbmRlcmlu
Z0NvbnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcXVhcnR6Q29udGV4dC0+Y2dD
b250ZXh0KCk7ICAgIAorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7ICAgIAogICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwp
ICYmIEtTVkdQYWludGVyRmFjdG9yeTo6aXNGaWxsZWQocmVuZGVyU3R5bGUpKQogICAgICAgICBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHpIZWxwZXI6OmZpbGxQYXRoKGNvbnRleHQsIHJlbmRl
clBhdGgpOwogICAgIGlmICgodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgS1NWR1BhaW50ZXJG
YWN0b3J5Ojppc1N0cm9rZWQocmVuZGVyU3R5bGUpKQogICAgICAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJRdWFydHpIZWxwZXI6OnN0cm9rZVBhdGgoY29udGV4dCwgcmVuZGVyUGF0aCk7CiB9CiAK
LXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OnRlYXJkb3duKEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgS1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWRRdWFydHo6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dCogcmVuZGVy
aW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiB9CiAKQEAgLTEzNSw3ICsxMzIsNyBAQCB2b2lkIHBhdHRl
cm5DYWxsYmFjayh2b2lkICppbmZvLCBDR0NvbnRlCiAgICAgQ0dDb250ZXh0RHJhd0xheWVyQXRQ
b2ludChjb250ZXh0LCBDR1BvaW50WmVybywgbGF5ZXIpOwogfQogCi12b2lkIEtSZW5kZXJpbmdQ
YWludFNlcnZlclBhdHRlcm5RdWFydHo6OmRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJl
bmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBw
YXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIGlmICghc2V0dXAocmVu
ZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MywxNSAr
MTQwLDE0IEBAIHZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF1YXJ0ejoKICAgICB0
ZWFyZG93bihyZW5kZXJpbmdDb250ZXh0LCBwYXRoLCB0eXBlKTsKIH0KIAotYm9vbCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6OjpzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtD
UGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Citib29sIEtSZW5kZXJpbmdQYWludFNlcnZlclBh
dHRlcm5RdWFydHo6OnNldHVwKEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29u
c3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNv
bnN0CiB7CiAgICAgaWYobGlzdGVuZXIoKSkgLy8gdGhpcyBzZWVtcyBsaWtlIGJhZCBkZXNpZ24g
dG8gbWUsIHNob3VsZCBiZSBpbiBhIGNvbW1vbiBiYXNlY2xhc3MuIC0tIGVjcyA4LzYvMDUKICAg
ICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsKIAogICAgIFJlbmRlclN0
eWxlKiByZW5kZXJTdHlsZSA9IHJlbmRlck9iamVjdC0+c3R5bGUoKTsKIAotICAgIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRl
cmluZ0RldmljZUNvbnRleHRRdWFydHoqPihyZW5kZXJpbmdDb250ZXh0KTsKLSAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOworICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKICAg
ICBLQ2FudmFzSW1hZ2UqIGNlbGwgPSB0aWxlKCk7CiAgICAgaWYgKCFjZWxsKQpAQCAtMjA4LDEy
ICsyMDQsMTAgQEAgYm9vbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6OgogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFy
dHo6OnJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQs
IGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNv
bnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6OnJlbmRlclBhdGgo
R3JhcGhpY3NDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5k
ZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIFJlbmRlclN0eWxl
KiByZW5kZXJTdHlsZSA9IHJlbmRlclBhdGgtPnN0eWxlKCk7Ci0KLSAgICBLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dFF1YXJ0eiogcXVhcnR6Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0UXVhcnR6Kj4ocmVuZGVyaW5nQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBxdWFydHpDb250ZXh0LT5jZ0NvbnRleHQoKTsKKyAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYg
KCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojppc0ZpbGxlZChy
ZW5kZXJTdHlsZSkpCiAgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ekhlbHBlcjo6
ZmlsbFBhdGgoY29udGV4dCwgcmVuZGVyUGF0aCk7CkBAIC0yMjIsMTMgKzIxNiwxMSBAQCB2b2lk
IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6CiAgICAgICAgIEtSZW5kZXJpbmdQ
YWludFNlcnZlclF1YXJ0ekhlbHBlcjo6c3Ryb2tlUGF0aChjb250ZXh0LCByZW5kZXJQYXRoKTsK
IH0KIAotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6Ojp0ZWFyZG93bihL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4
dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtD
UGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdWFydHoqIHF1YXJ0ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dFF1YXJ0eio+KHJlbmRlcmluZ0NvbnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcXVhcnR6Q29udGV4dC0+Y2dDb250ZXh0KCk7CiAgICAgQ0dQYXR0ZXJuUmVsZWFzZShtX3Bh
dHRlcm4pOwogICAgIENHQ29sb3JTcGFjZVJlbGVhc2UobV9wYXR0ZXJuU3BhY2UpOwotICAgIENH
Q29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShyZW5kZXJpbmdDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKIH0KSW5kZXg6IGtz
dmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9t
aXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDE2NjkyKQorKysga3N2ZzIv
bWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw2IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgiCiAjaW5jbHVkZSAi
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJTb2xpZC5oIgpAQCAtNDQsNyArNDMsNyBAQCBzdGF0aWMgS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWQqIHNoYXJlCiB7CiAgICAgc3RhdGljIEtSZW5kZXJpbmdQYWludFNlcnZlclNv
bGlkKiBfc2hhcmVkU29saWRQYWludFNlcnZlciA9IDA7CiAgICAgaWYgKCFfc2hhcmVkU29saWRQ
YWludFNlcnZlcikKLSAgICAgICAgX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIgPSBzdGF0aWNfY2Fz
dDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQ
YWludFNlcnZlcihQU19TT0xJRCkpOworICAgICAgICBfc2hhcmVkU29saWRQYWludFNlcnZlciA9
IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkKj4oY3JlYXRlUGFpbnRTZXJ2
ZXIoUFNfU09MSUQpKTsKICAgICByZXR1cm4gX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXI7CiB9CiAK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gMTY2OTIpCisrKyBrc3ZnMi9zdmcvU1ZHQUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBACiAjaW5jbHVkZSAiU1ZHSGVs
cGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJjc3NoZWxwZXIuaCIKLSNp
bmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUgPGtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5nbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmdsZS5jcHAJKHJldmlzaW9uIDE2NjkyKQor
Kysga3N2ZzIvc3ZnL1NWR0FuZ2xlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBA
QAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSA8bWF0aC5oPgogCi0jaW5jbHVkZSA8a3N2
ZzIva3N2Zy5oPgorI2luY2x1ZGUgImtzdmcuaCIKIAogI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJp
bmcuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgpJbmRleDoga3N2ZzIvc3ZnL1NWR0NsaXBQYXRo
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE2NjkyKQorKysga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJTVkdSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIKICNpbmNsdWRlICJTVkdVbml0VHlw
ZXMuaCIKLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC03OCw3ICs3Nyw3IEBAIEtDYW52YXNDbGlwcGVy
ICpTVkdDbGlwUGF0aEVsZW1lbnQ6OmNhbnYKICAgICBpZiAoIXZpZXcoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKCFtX2NsaXBwZXIpCi0gICAgICAgIG1fY2xpcHBlciA9IHN0YXRpY19j
YXN0PEtDYW52YXNDbGlwcGVyICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVSZXNvdXJjZShS
U19DTElQUEVSKSk7CisgICAgICAgIG1fY2xpcHBlciA9IHN0YXRpY19jYXN0PEtDYW52YXNDbGlw
cGVyKj4oY3JlYXRlUmVzb3VyY2UoUlNfQ0xJUFBFUikpOwogICAgIGVsc2UKICAgICAgICAgbV9j
bGlwcGVyLT5yZXNldENsaXBEYXRhKCk7CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUJsZW5kRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTY2OTIpCisrKyBrc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRl
ICJBdHRyLmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmg+Ci0jaW5jbHVk
ZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgorI2luY2x1ZGUgIktDYW52YXNG
aWx0ZXJzLmgiCiAKICNpbmNsdWRlICJrc3ZnLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCkBA
IC03Nyw3ICs3Niw3IEBAIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkK
IEtDYW52YXNGRUJsZW5kICpTVkdGRUJsZW5kRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QK
IHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0
YXRpY19jYXN0PEtDYW52YXNGRUJsZW5kICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfQkxFTkQpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2Fz
dDxLQ2FudmFzRkVCbGVuZCo+KGNyZWF0ZUZpbHRlckVmZmVjdChGRV9CTEVORCkpOwogICAgIGlm
ICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRCbGVuZE1vZGUoKEtDQmxlbmRNb2RlVHlwZSkobW9kZSgpLTEpKTsKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gMTY2OTIpCisrKyBrc3ZnMi9z
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIK
LSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgImtzdmcuaCIKQEAgLTc4LDcgKzc3LDcgQEAg
dm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VNYXBwZQogS0NhbnZhc0ZFQ29sb3JN
YXRyaXggKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewog
ICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGlj
X2Nhc3Q8S0NhbnZhc0ZFQ29sb3JNYXRyaXggKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZp
bHRlckVmZmVjdChGRV9DT0xPUl9NQVRSSVgpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzRkVDb2xvck1hdHJpeCo+KGNyZWF0ZUZpbHRlckVmZmVjdChGRV9D
T0xPUl9NQVRSSVgpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2NjkyKQorKysga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1
ZGUgIkF0dHIuaCIKIAogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCi0jaW5jbHVkZSAiS1Jl
bmRlcmluZ0RldmljZS5oIgogCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdI
ZWxwZXIuaCIKQEAgLTYzLDcgKzYyLDcgQEAgdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6cGFycwogS0NhbnZhc0ZFQ29tcG9uZW50VHJhbnNmZXIgKlNWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJF
ZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFQ29t
cG9uZW50VHJhbnNmZXIgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChG
RV9DT01QT05FTlRfVFJBTlNGRVIpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNf
Y2FzdDxLQ2FudmFzRkVDb21wb25lbnRUcmFuc2Zlcio+KGNyZWF0ZUZpbHRlckVmZmVjdChGRV9D
T01QT05FTlRfVFJBTlNGRVIpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjY5MikKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogCiAjaW5jbHVk
ZSAiS0NhbnZhc0ZpbHRlcnMuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5j
bHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgImtzdmcu
aCIKQEAgLTk3LDcgKzk2LDcgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQQogS0NhbnZhc0ZFQ29tcG9zaXRlICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmZpbHRlckVm
ZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAgICAgICAgbV9maWx0
ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVDb21wb3NpdGUgKj4ocmVuZGVyaW5nRGV2
aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT01QT1NJVEUpKTsKKyAgICAgICAgbV9maWx0
ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVDb21wb3NpdGUqPihjcmVhdGVGaWx0ZXJF
ZmZlY3QoRkVfQ09NUE9TSVRFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldE9wZXJhdGlvbigoS0NDb21wb3NpdGVP
cGVyYXRpb25UeXBlKShfb3BlcmF0b3IoKSAtIDEpKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtzdmcyL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsy
MSw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJBdHRyLmgiCiAKLSNpbmNsdWRl
IDxrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1Jl
bmRlcmluZ0RldmljZS5oPgorI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCiAKICNpbmNsdWRl
ICJrc3ZnLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAgLTgyLDcgKzgxLDcgQEAgdm9pZCBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnBhcnNlTQogS0NhbnZhc0ZpbHRlckVmZmVjdCAq
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAg
IGlmICghbV9maWx0ZXJFZmZlY3QpIAotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19j
YXN0PEtDYW52YXNGRURpZmZ1c2VMaWdodGluZyAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRl
RmlsdGVyRWZmZWN0KEZFX0RJRkZVU0VfTElHSFRJTkcpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZl
Y3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcqPihjcmVhdGVGaWx0ZXJF
ZmZlY3QoRkVfRElGRlVTRV9MSUdIVElORykpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihp
bjEoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0RGlmZnVzZUNvbnN0YW50KChkaWZmdXNlQ29uc3RhbnQoKSkpOwpJ
bmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE2NjkyKQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDE1ICsyMiwxNCBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5j
bHVkZSAiQXR0ci5oIgogCi0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgotI2lu
Y2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlICJLQ2Fu
dmFzRmlsdGVycy5oIgogCiAjaW5jbHVkZSAia3N2Zy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5o
IgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OlNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQog
ICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykK
QEAgLTg2LDcgKzg1LDcgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnBhcnNl
TQogS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6
OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAgICAg
ICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAg
Kj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9ESVNQTEFDRU1FTlRf
TUFQKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRGlz
cGxhY2VtZW50TWFwKj4oY3JlYXRlRmlsdGVyRWZmZWN0KEZFX0RJU1BMQUNFTUVOVF9NQVApKTsK
ICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0WENoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2VsZWN0b3JUeXBlKSh4Q2hh
bm5lbFNlbGVjdG9yKCkpKTsKQEAgLTk3LDQgKzk2LDcgQEAgS0NhbnZhc0ZFRGlzcGxhY2VtZW50
TWFwKiBTVkdGRURpc3BsYWNlbQogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVm
ZmVjdCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQorCit9CisKICNlbmRpZiAvLyBT
VkdfU1VQUE9SVApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjY5MikK
KysrIGtzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDYgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTksNyArNTgsNyBAQCB2b2lk
IFNWR0ZFRmxvb2RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiBLQ2FudmFzRkVGbG9vZCAqU1ZH
RkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRl
ckVmZmVjdCkKLSAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVG
bG9vZCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0ZMT09EKSk7
CisgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRmxvb2QqPihj
cmVhdGVGaWx0ZXJFZmZlY3QoRkVfRkxPT0QpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQog
ICAgICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4xKCkpOwpJbmRl
eDoga3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjkyKQor
Kysga3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAKICNpbmNsdWRlICJLQ2FudmFz
RmlsdGVycy5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgogCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAg
LTc4LDcgKzc3LDcgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlTWFwcAog
S0NhbnZhc0ZFR2F1c3NpYW5CbHVyICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVm
ZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAgICAgICAgbV9maWx0
ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKj4ocmVuZGVyaW5n
RGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9HQVVTU0lBTl9CTFVSKSk7CisgICAgICAg
IG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFR2F1c3NpYW5CbHVyKj4oY3Jl
YXRlRmlsdGVyRWZmZWN0KEZFX0dBVVNTSUFOX0JMVVIpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZm
ZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4xKCkp
OwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtzdmcy
L3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgPGtjYW52YXMvS0NhbnZhc0ltYWdlLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1Jl
bmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxs
UGFpbnRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05Miw3ICs5MSw3IEBAIHZvaWQg
U1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKEMKIEtDYW52YXNGRUltYWdlICpTVkdG
RUltYWdlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVy
RWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUlt
YWdlICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfSU1BR0UpKTsK
KyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVJbWFnZSo+KGNy
ZWF0ZUZpbHRlckVmZmVjdChGRV9JTUFHRSkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVj
dCk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjkyKQorKysga3N2
ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKIAogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCi0j
aW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdIZWxwZXIuaCIKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAkocmV2aXNp
b24gMTY2OTIpCisrKyBrc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw4ICsyNCw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJBdHRy
LmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmg+Ci0jaW5jbHVkZSA8a2Nh
bnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgorI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJz
LmgiCiAKICNpbmNsdWRlICJrc3ZnLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCkBAIC00OSw3
ICs0OCw3IEBAIFNWR0ZFTWVyZ2VFbGVtZW50Ojp+U1ZHRkVNZXJnZUVsZW1lbnQoKQogS0NhbnZh
c0ZFTWVyZ2UgKlNWR0ZFTWVyZ2VFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAg
IGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nh
c3Q8S0NhbnZhc0ZFTWVyZ2UgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVj
dChGRV9NRVJHRSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52
YXNGRU1lcmdlKj4oY3JlYXRlRmlsdGVyRWZmZWN0KEZFX01FUkdFKSk7CiAgICAgaWYgKCFtX2Zp
bHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVz
KG1fZmlsdGVyRWZmZWN0KTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjY5MikKKysrIGtzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogCiAjaW5jbHVkZSAiS0Nh
bnZhc0ZpbHRlcnMuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAi
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgIlNWR0hlbHBlci5o
IgpAQCAtNjcsNyArNjYsNyBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyCiBLQ2FudmFzRkVPZmZzZXQgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVj
dCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRU9mZnNldCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3Jl
YXRlRmlsdGVyRWZmZWN0KEZFX09GRlNFVCkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0
YXRpY19jYXN0PEtDYW52YXNGRU9mZnNldCo+KGNyZWF0ZUZpbHRlckVmZmVjdChGRV9PRkZTRVQp
KTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0SW4oaW4xKCkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMTY2OTIpCisrKyBrc3ZnMi9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDcg
QEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKIAotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ZpbHRl
cnMuaD4KLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CisjaW5j
bHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKIAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVk
ZSAiU1ZHSGVscGVyLmgiCkBAIC05MCw3ICs4OSw3IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudDo6cGFyc2UKIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKlNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Zp
bHRlckVmZmVjdCkgCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZh
c0ZFU3BlY3VsYXJMaWdodGluZyAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZm
ZWN0KEZFX1NQRUNVTEFSX0xJR0hUSU5HKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3Rh
dGljX2Nhc3Q8S0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyo+KGNyZWF0ZUZpbHRlckVmZmVjdChG
RV9TUEVDVUxBUl9MSUdIVElORykpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihpbjEoKSk7
CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0U3BlY3VsYXJDb25zdGFudCgoc3BlY3VsYXJDb25zdGFudCgpKSk7CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0ZFVGlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtzdmcyL3N2Zy9TVkdG
RVRpbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsNyBAQAogI2lmZGVm
IFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiQXR0ci5oIgogCi0jaW5jbHVkZSA8a2NhbnZhcy9LQ2Fu
dmFzRmlsdGVycy5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2Uu
aD4KKyNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgogCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgi
CiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTU4LDcgKzU3LDcgQEAgdm9pZCBTVkdG
RVRpbGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogS0NhbnZhc0ZFVGlsZSAqU1ZHRkVUaWxl
RWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0
KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRVRpbGUgKj4o
cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9USUxFKSk7CisgICAgICAg
IG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFVGlsZSo+KGNyZWF0ZUZpbHRl
ckVmZmVjdChGRV9USUxFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGluMSgpKTsKSW5kZXg6IGtzdmcyL3N2
Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
RkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjkyKQorKysga3N2ZzIvc3ZnL1NW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBA
CiAjaW5jbHVkZSAiQXR0ci5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKLSNpbmNs
dWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVy
R3JhZGllbnQuaCIKIAogI2luY2x1ZGUgImtzdmcuaCIKQEAgLTk4LDcgKzk3LDcgQEAgdm9pZCBT
VkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwYXJzZU1hcHBlZAogS0NhbnZhc0ZFVHVyYnVsZW5jZSAq
U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtD
YW52YXNGRVR1cmJ1bGVuY2UgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVj
dChGRV9UVVJCVUxFTkNFKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8
S0NhbnZhc0ZFVHVyYnVsZW5jZSo+KGNyZWF0ZUZpbHRlckVmZmVjdChGRV9UVVJCVUxFTkNFKSk7
CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkluZGV4
OiBrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0ZpbHRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtzdmcyL3N2Zy9TVkdG
aWx0ZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNiBAQAogI2lmZGVm
IFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiQXR0ci5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0Rl
dmljZS5oIgogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5
cGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAgLTEyMSw3ICsxMjAsNyBAQCBLQ2FudmFz
RmlsdGVyICpTVkdGaWx0ZXJFbGVtZW50OjpjYW52YXNSCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKCFtX2ZpbHRlcikKLSAgICAgICAgbV9maWx0ZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFz
RmlsdGVyICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVSZXNvdXJjZShSU19GSUxURVIpKTsK
KyAgICAgICAgbV9maWx0ZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRmlsdGVyKj4oY3JlYXRlUmVz
b3VyY2UoUlNfRklMVEVSKSk7CiAKICAgICBib29sIGZpbHRlckJCb3hNb2RlID0gZmlsdGVyVW5p
dHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CiAg
ICAgbV9maWx0ZXItPnNldEZpbHRlckJvdW5kaW5nQm94TW9kZShmaWx0ZXJCQm94TW9kZSk7Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmNwcAkocmV2aXNpb24gMTY2OTIpCisrKyBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
I2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50
LmgiCiAKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmg+CisjaW5jbHVkZSAiS0Nh
bnZhc0ZpbHRlcnMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0dFbGVtZW50
LmNwcAkocmV2aXNpb24gMTY2OTIpCisrKyBrc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiU1ZHR0VsZW1lbnQuaCIKIAog
I2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZh
cy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtzdmcyL3N2
Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBA
CiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5oIgogI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0
b3IuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlIDxrY2FudmFzL2Rldmlj
ZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0x
MTIsNyArMTExLDcgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZQog
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKlNWR0dyYWRpZW50RWxlbWVudDo6Y2FudmFz
UmVzb3VyY2UoKQogewogICAgIGlmICghbV9yZXNvdXJjZSkgewotICAgICAgICBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXIgKnRlbXAgPSByZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGFpbnRTZXJ2ZXIo
Z3JhZGllbnRUeXBlKCkpOworICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnRlbXAgPSBj
cmVhdGVQYWludFNlcnZlcihncmFkaWVudFR5cGUoKSk7CiAgICAgICAgIG1fcmVzb3VyY2UgPSBz
dGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqPih0ZW1wKTsKICAgICAg
ICAgbV9yZXNvdXJjZS0+c2V0TGlzdGVuZXIodGhpcyk7CiAgICAgICAgIGJ1aWxkR3JhZGllbnQo
bV9yZXNvdXJjZSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTY2OTIpCisrKyBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIlNWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKIAotI2luY2x1
ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJH
cmFkaWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHTWFy
a2VyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIlNWR01hcmtlckVsZW1l
bnQuaCIKIAogI2luY2x1ZGUgIkF0dHIuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWlu
ZXIuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgpAQCAtMTA4LDcgKzEwNyw3IEBAIHZvaWQgU1ZH
TWFya2VyRWxlbWVudDo6c2V0T3JpZW50VG9BdXRvKCkKICAgICBzZXRPcmllbnRUeXBlQmFzZVZh
bHVlKFNWR19NQVJLRVJfT1JJRU5UX0FVVE8pOwogfQogCi12b2lkIFNWR01hcmtlckVsZW1lbnQ6
OnNldE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUgKmFuZ2xlKQordm9pZCBTVkdNYXJrZXJFbGVtZW50
OjpzZXRPcmllbnRUb0FuZ2xlKFNWR0FuZ2xlKiBhbmdsZSkKIHsKICAgICBzZXRPcmllbnRUeXBl
QmFzZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKTsKICAgICBzZXRPcmllbnRBbmdsZUJh
c2VWYWx1ZShhbmdsZSk7CkBAIC0xMTcsNyArMTE2LDcgQEAgdm9pZCBTVkdNYXJrZXJFbGVtZW50
OjpzZXRPcmllbnRUb0FuZ2xlKAogS0NhbnZhc01hcmtlciAqU1ZHTWFya2VyRWxlbWVudDo6Y2Fu
dmFzUmVzb3VyY2UoKQogewogICAgIGlmKCFtX21hcmtlcikKLSAgICAgICAgbV9tYXJrZXIgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzTWFya2VyKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291
cmNlKFJTX01BUktFUikpOworICAgICAgICBtX21hcmtlciA9IHN0YXRpY19jYXN0PEtDYW52YXNN
YXJrZXIqPihjcmVhdGVSZXNvdXJjZShSU19NQVJLRVIpKTsKICAgICAKICAgICBtX21hcmtlci0+
c2V0TWFya2VyKHN0YXRpY19jYXN0PFJlbmRlclNWR0NvbnRhaW5lcio+KHJlbmRlcmVyKCkpKTsK
IApJbmRleDoga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtzdmcyL3N2Zy9T
VkdNYXNrRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIK
ICNpbmNsdWRlICJLQ2FudmFzSW1hZ2UuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKQEAgLTEwNiwyOSArMTA1LDIwIEBAIHZvaWQgU1ZHTWFza0VsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXQKIAogS0NhbnZhc0ltYWdlICpTVkdNYXNrRWxlbWVudDo6ZHJh
d01hc2tlckNvbnRlbnQoKQogewotICAgIEtSZW5kZXJpbmdEZXZpY2UgKmRldmljZSA9IHJlbmRl
cmluZ0RldmljZSgpOwotICAgIGlmICghZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpKSAvLyBGSVhN
RTogaGFjayBmb3Igbm93IHVudGlsIEltYWdlOjpsb2NrRm9jdXMgZXhpc3RzCi0gICAgICAgIHJl
dHVybiAwOwogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgS0Nh
bnZhc0ltYWdlICptYXNrSW1hZ2UgPSBzdGF0aWNfY2FzdDxLQ2FudmFzSW1hZ2UgKj4oZGV2aWNl
LT5jcmVhdGVSZXNvdXJjZShSU19JTUFHRSkpOworICAgIEtDYW52YXNJbWFnZSogbWFza0ltYWdl
ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ltYWdlKj4oY3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsK
IAogICAgIEludFNpemUgc2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aCgpLT52YWx1ZSgpKSwg
bHJvdW5kZihoZWlnaHQoKS0+dmFsdWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5pdChzaXplKTsK
IAotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+
Y29udGV4dEZvckltYWdlKG1hc2tJbWFnZSk7Ci0gICAgZGV2aWNlLT5wdXNoQ29udGV4dChwYXR0
ZXJuQ29udGV4dCk7Ci0KLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0KHBhdHRl
cm5Db250ZXh0LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKSk7CisgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gcGF0dGVybkNvbnRleHQgPSBjb250ZXh0Rm9ySW1hZ2UobWFza0ltYWdlKTsKIAot
ICAgIFJlbmRlclNWR0NvbnRhaW5lciAqbWFza0NvbnRhaW5lciA9IHN0YXRpY19jYXN0PFJlbmRl
clNWR0NvbnRhaW5lciAqPihyZW5kZXJlcigpKTsKLSAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byBpbmZvKGNvbnRleHQuZ2V0KCksIEludFJlY3QoKSwgUGFpbnRQaGFzZUZvcmVncm91bmQsIDAs
IDAsIDApOworICAgIFJlbmRlclNWR0NvbnRhaW5lciogbWFza0NvbnRhaW5lciA9IHN0YXRpY19j
YXN0PFJlbmRlclNWR0NvbnRhaW5lcio+KHJlbmRlcmVyKCkpOworICAgIFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvIGluZm8ocGF0dGVybkNvbnRleHQuZ2V0KCksIEludFJlY3QoKSwgUGFpbnRQaGFz
ZUZvcmVncm91bmQsIDAsIDAsIDApOwogICAgIG1hc2tDb250YWluZXItPnNldERyYXdzQ29udGVu
dHModHJ1ZSk7CiAgICAgbWFza0NvbnRhaW5lci0+cGFpbnQoaW5mbywgMCwgMCk7CiAgICAgbWFz
a0NvbnRhaW5lci0+c2V0RHJhd3NDb250ZW50cyhmYWxzZSk7Ci0gICAgCi0gICAgZGV2aWNlLT5w
b3BDb250ZXh0KCk7Ci0gICAgZGVsZXRlIHBhdHRlcm5Db250ZXh0OwogCiAgICAgcmV0dXJuIG1h
c2tJbWFnZTsKIH0KQEAgLTE0Myw3ICsxMzMsNyBAQCBSZW5kZXJPYmplY3QqIFNWR01hc2tFbGVt
ZW50OjpjcmVhdGVSZW5kCiBLQ2FudmFzTWFza2VyICpTVkdNYXNrRWxlbWVudDo6Y2FudmFzUmVz
b3VyY2UoKQogewogICAgIGlmICghbV9tYXNrZXIpIHsKLSAgICAgICAgbV9tYXNrZXIgPSBzdGF0
aWNfY2FzdDxLQ2FudmFzTWFza2VyICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVSZXNvdXJj
ZShSU19NQVNLRVIpKTsKKyAgICAgICAgbV9tYXNrZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzTWFz
a2VyKj4oY3JlYXRlUmVzb3VyY2UoUlNfTUFTS0VSKSk7CiAgICAgICAgIG1fZGlydHkgPSB0cnVl
OwogICAgIH0KICAgICBpZiAobV9kaXJ0eSkgewpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjY5MikKKysrIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaCIKIAot
I2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2Njky
KQorKysga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUg
IktDYW52YXNJbWFnZS5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2lu
Y2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNm
b3JtTGlzdC5oIgpAQCAtMTcxLDggKzE3MCw2IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmZp
bGxBdHRyaWJ1dGVzRnIKIAogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250
ZW50SW50b1RpbGUoY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgY29uc3QgSW50U2l6
ZSYgbmV3U2l6ZSwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpCiB7Ci0g
ICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgCiAg
ICAgU1ZHU3R5bGVkRWxlbWVudCogYWN0aXZlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxl
ZEVsZW1lbnQqPihtX3BhaW50U2VydmVyLT5hY3RpdmVDbGllbnQoKS0+ZWxlbWVudCgpKTsKIAog
ICAgIGJvb2wgYmJveCA9IChwYXR0ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwpAQCAtMTg4LDc1ICsxODUsMjcgQEAgdm9pZCBTVkdQ
YXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZQogICAgIH0KICAgICAKICAgICBkZWxldGUg
bV90aWxlOwotICAgIG1fdGlsZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZSo+KGRldmljZS0+
Y3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsKKyAgICBtX3RpbGUgPSBzdGF0aWNfY2FzdDxLQ2Fu
dmFzSW1hZ2UqPihjcmVhdGVSZXNvdXJjZShSU19JTUFHRSkpOwogICAgIG1fdGlsZS0+aW5pdChu
ZXdTaXplKTsKIAotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBwYXR0ZXJuQ29udGV4dCA9
IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1fdGlsZSk7Ci0gICAgZGV2aWNlLT5wdXNoQ29udGV4
dChwYXR0ZXJuQ29udGV4dCk7CiAgICAgRmxvYXRSZWN0IHJlY3QoeCgpLT52YWx1ZSgpLCB5KCkt
PnZhbHVlKCksIHdpZHRoKCktPnZhbHVlKCksIGhlaWdodCgpLT52YWx1ZSgpKTsKICAgICBtX3Bh
aW50U2VydmVyLT5zZXRCYm94KHJlY3QpOwogICAgIG1fcGFpbnRTZXJ2ZXItPnNldFBhdHRlcm5U
cmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7CiAgICAgbV9wYWludFNlcnZlci0+c2V0
VGlsZShtX3RpbGUpOwogCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dChwYXR0
ZXJuQ29udGV4dC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQ+IGNvbnRleHQoZGV2aWNlLT5jb250ZXh0Rm9ySW1hZ2UobV90aWxlKSk7CiAKLSAg
ICBmb3IoTm9kZSAqbiA9IHRhcmdldC0+Zmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0
U2libGluZygpKQotICAgIHsKKyAgICBmb3IgKE5vZGUqIG4gPSB0YXJnZXQtPmZpcnN0Q2hpbGQo
KTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBTVkdFbGVtZW50KiBl
bGVtID0gc3ZnX2R5bmFtaWNfY2FzdChuKTsKICAgICAgICAgaWYgKCFlbGVtIHx8ICFlbGVtLT5p
c1N0eWxlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFNWR1N0eWxlZEVsZW1l
bnQqIGUgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50KiA+KGVsZW0pOwotICAgICAgICBS
ZW5kZXJPYmplY3QgKml0ZW0gPSBlLT5yZW5kZXJlcigpOworICAgICAgICBSZW5kZXJPYmplY3Qq
IGl0ZW0gPSBlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICBj
b250aW51ZTsKLSNpZiAwCi0gICAgICAgIC8vIEZJWE1FOiBOb25lIG9mIHRoaXMgY29kZSBzZWVt
cyB0byBiZSBuZWNlc3NhcnkKLSAgICAgICAgLy8gdG8gcGFzcyB0aGUgdzNjIHRlc3RzIChhbmQg
aW5mYWN0IGJyZWFrcyB0aGVtKQotICAgICAgICAvLyBIb3dldmVyLCBJJ20gbGVhdmluZyBpdCAj
aWYgMCdkIGZvciBub3cgdW50aWwKLSAgICAgICAgLy8gSSBjYW4gcXVpeiBXaWxkRm94IG9uIHRo
ZSBzdWJqZWN0IC0tIGVjcyAxMS8yNC8wNQotICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQg
VzNDLVNWRy0xLjEvY29vcmRzLXVuaXRzLTAxLWIKLSAgICAgICAgLy8gaXMgZmFpbGluZyBkdWUg
dG8gbGFjayBvZiB0aGlzIGNvZGUuCi0gICAgICAgIEtDYW52YXNNYXRyaXggc2F2ZWRNYXRyaXgg
PSBpdGVtLT5sb2NhbFRyYW5zZm9ybSgpOwotCi0gICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1l
bnQqIHNhdmVkQ29udGV4dCA9IDA7Ci0gICAgICAgIGlmIChwYXR0ZXJuQ29udGVudFVuaXRzKCkg
PT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudCkKLSAgICAgICAgICAgICAgICBzYXZl
ZENvbnRleHQgPSBlLT5wdXNoQXR0cmlidXRlQ29udGV4dChhY3RpdmVFbGVtZW50KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIFRha2UgaW50byBhY2NvdW50IHZpZXdwb3J0RWxlbWVudCdzIHZp
ZXdCb3gsIGlmIGV4aXN0YW50Li4uCi0gICAgICAgIGlmICh2aWV3cG9ydEVsZW1lbnQoKSAmJiB2
aWV3cG9ydEVsZW1lbnQoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgU1ZHU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R1NWR0VsZW1lbnQqID4odmlld3BvcnRFbGVtZW50KCkpOwotCi0gICAgICAgICAgICBSZWZQdHI8
U1ZHTWF0cml4PiBzdmdDVE0gPSBzdmdFbGVtZW50LT5nZXRDVE0oKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxTVkdNYXRyaXg+IGN0bSA9IGdldENUTSgpOwotCi0gICAgICAgICAgICBLQ2FudmFzTWF0
cml4IG5ld01hdHJpeChzdmdDVE0tPm1hdHJpeCgpKTsKLSAgICAgICAgICAgIG5ld01hdHJpeC5t
dWx0aXBseShzYXZlZE1hdHJpeCk7Ci0gICAgICAgICAgICBuZXdNYXRyaXguc2NhbGUoMS4wIC8g
Y3RtLT5hKCksIDEuMCAvIGN0bS0+ZCgpKTsKLQotICAgICAgICAgICAgaXRlbS0+c2V0TG9jYWxU
cmFuc2Zvcm0obmV3TWF0cml4Lm1hdHJpeCgpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICAg
ICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gaW5mbyhjb250ZXh0LmdldCgpLCBJbnRSZWN0KCks
IFBhaW50UGhhc2VGb3JlZ3JvdW5kLCAwLCAwLCAwKTsKICAgICAgICAgaXRlbS0+cGFpbnQoaW5m
bywgMCwgMCk7Ci0KLSNpZiAwCi0gICAgICAgIGlmIChzYXZlZENvbnRleHQpCi0gICAgICAgICAg
ICBlLT5wdXNoQXR0cmlidXRlQ29udGV4dChzYXZlZENvbnRleHQpOwotCi0gICAgICAgIGl0ZW0t
PnNldExvY2FsVHJhbnNmb3JtKHNhdmVkTWF0cml4Lm1hdHJpeCgpKTsKLSNlbmRpZgogICAgIH0K
LQotICAgIGlmIChzYXZlZENvbnRleHQpCi0gICAgICAgIGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVs
ZW1lbnQqID4odGhpcyktPnB1c2hBdHRyaWJ1dGVDb250ZXh0KHNhdmVkQ29udGV4dCk7Ci0KLSAg
ICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAgICBkZWxldGUgcGF0dGVybkNvbnRleHQ7CiB9CiAK
IHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6Om5vdGlmeUNsaWVudHNUb1JlcGFpbnQoKSBjb25zdApA
QCAtMzM4LDcgKzI4Nyw3IEBAIFJlbmRlck9iamVjdCogU1ZHUGF0dGVybkVsZW1lbnQ6OmNyZWF0
ZVIKIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4gKlNWR1BhdHRlcm5FbGVtZW50OjpjYW52
YXNSZXNvdXJjZSgpCiB7CiAgICAgaWYgKCFtX3BhaW50U2VydmVyKSB7Ci0gICAgICAgIEtSZW5k
ZXJpbmdQYWludFNlcnZlciAqcHNlcnZlciA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWlu
dFNlcnZlcihLQ1BhaW50U2VydmVyVHlwZShQU19QQVRURVJOKSk7CisgICAgICAgIEtSZW5kZXJp
bmdQYWludFNlcnZlciAqcHNlcnZlciA9IGNyZWF0ZVBhaW50U2VydmVyKEtDUGFpbnRTZXJ2ZXJU
eXBlKFBTX1BBVFRFUk4pKTsKICAgICAgICAgbV9wYWludFNlcnZlciA9IHN0YXRpY19jYXN0PEtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4gKj4ocHNlcnZlcik7CiAgICAgICAgIG1fcGFpbnRT
ZXJ2ZXItPnNldExpc3RlbmVyKGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqID4odGhpcykp
OwogICAgIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTY2OTIpCisr
KyBrc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw2IEBACiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9seWdv
bkVsZW1lbnQuaCIKIAotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2Uu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQb2x5
bGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiU1ZHUG9pbnRM
aXN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9seWxpbmVFbGVtZW50LmgiCiAKLSNpbmNsdWRlIDxrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
MTY2OTIpCisrKyBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlNWR1JhZGlhbEdyYWRpZW50RWxl
bWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKIAotI2luY2x1ZGUgPGtjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2
Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjkyKQorKysga3N2ZzIvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCi0jaW5j
bHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgPGtjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmg+CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdT
VkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE2NjkyKQorKysga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiU1ZHWm9vbUV2ZW50LmgiCiAjaW5j
bHVkZSAia3N2Zy5oIgogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+Ci0j
aW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgIlRl
eHRTdHJlYW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDoga3N2ZzIvc3ZnL1NWR1N0
eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmNwcAkocmV2aXNpb24gMTY2OTIpCisrKyBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5o
IgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIv
c3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjY5MikKKysrIGtzdmcyL3N2Zy9T
VkdTd2l0Y2hFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2lu
Y2x1ZGUgIkF0dHIuaCIKIAogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+
Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE2NjkyKQorKysga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiU1ZHU3ltYm9sRWxlbWVudC5o
IgogI2luY2x1ZGUgImtzdmcuaCIKICNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5l
ci5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNjY5
MikKKysrIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwx
MCArNjQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgVGV4dFJ1bjsKICAgICBj
bGFzcyBUZXh0U3R5bGU7CiAKLSNpZmRlZiBTVkdfU1VQUE9SVAotICAgIGNsYXNzIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0OwotI2VuZGlmCi0KICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQgOiBO
b25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBHcmFwaGljc0NvbnRleHQoUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqKTsKQEAgLTE2NCwxMCArMTYwLDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwog
Ci0jaWZkZWYgU1ZHX1NVUFBPUlQKLSAgICAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNy
ZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lO
KQogICAgICAgICBHcmFwaGljc0NvbnRleHQoSERDKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQu
CiAgICAgICAgIEhEQyBnZXRXaW5kb3dzQ29udGV4dCgpOwpJbmRleDogcGxhdGZvcm0vY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcAkocmV2aXNpb24gMTY2OTIpCisrKyBwbGF0Zm9ybS9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMyw2IEBACiAjaW5jbHVkZSAiUGF0
aC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZmRlZiBTVkdfU1VQUE9SVAot
I2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CkBAIC01MjAsMTMgKzUxNiw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5k
ZWRSZWMKICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiB9CiAKLSNpZmRlZiBTVkdfU1VQ
UE9SVAotS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF1YXJ0eihwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0jZW5kaWYKLQogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11043</attachid>
            <date>2006-10-12 02:50:45 -0700</date>
            <delta_ts>2006-11-30 09:34:14 -0800</delta_ts>
            <desc>another completely independant (and unfinished) attempt at this</desc>
            <filename>remove-krenderingdevice-second-unrelated.patch</filename>
            <type>text/plain</type>
            <size>82029</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvS0NhbnZhc0NsaXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tD
YW52YXNDbGlwcGVyLmgJKHJldmlzaW9uIDE2OTgyKQorKysga2NhbnZhcy9LQ2FudmFzQ2xpcHBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
c2V0Q2xpcERhdGEoKTsKICAgICB2b2lkIGFkZENsaXBEYXRhKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSwgYm9vbCBiYm94VW5pdHMpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseUNsaXAoY29u
c3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3QgPSAwOworICAgIHZvaWQgYXBwbHlDbGlw
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0Owog
CiAgICAgS0NDbGlwRGF0YUxpc3QgY2xpcERhdGEoKSBjb25zdDsKIApJbmRleDoga2NhbnZhcy9L
Q2FudmFzRmlsdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAko
cmV2aXNpb24gMTY5ODIpCisrKyBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDcgKzk0LDYgQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIEtDYW52YXNGaWx0ZXJF
ZmZlY3Q7Ci1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlOwogCiBjbGFzcyBLQ2FudmFzRmlsdGVyIDog
cHVibGljIEtDYW52YXNSZXNvdXJjZSB7CiBwdWJsaWM6CkBAIC0xMTcsMTAgKzExNiwxMyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKICAgICB2b2lkIGFkZEZpbHRlckVmZmVj
dChLQ2FudmFzRmlsdGVyRWZmZWN0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZpbHRl
cihjb25zdCBGbG9hdFJlY3QgJmJib3gpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWx0
ZXIoY29uc3QgRmxvYXRSZWN0ICZiYm94KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVG
aWx0ZXIoY29uc3QgRmxvYXRSZWN0JiBiYm94KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5
RmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYgYmJveCkgPSAwOwogCiAgICAgVGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gRklY
TUU6IFRoaXMgd2lsbCBnbyBhd2F5IG9uY2UgYXQgbGVhc3Qgb25lIHBsYXRmb3JtIGhhcyBpbXBs
ZW1lbnRlZCBhbGwgb2YgdGhlIGZpbHRlciBlZmZlY3RzCisgICAgc3RhdGljIEtDYW52YXNGaWx0
ZXJFZmZlY3QqIGNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmKTsK
IAogcHJvdGVjdGVkOgogICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlY3Q7CkluZGV4OiBrY2FudmFz
L0tDYW52YXNJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc0ltYWdlLmgJKHJl
dmlzaW9uIDE2OTgyKQorKysga2NhbnZhcy9LQ2FudmFzSW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTMgKzMzLDEwIEBAIGNsYXNzIEltYWdlOwogY2xhc3MgS0NhbnZhc0ltYWdlIDogcHVi
bGljIEtDYW52YXNSZXNvdXJjZQogewogcHVibGljOgotICAgIEtDYW52YXNJbWFnZSgpIHsgfTsK
LSAgICB2aXJ0dWFsIH5LQ2FudmFzSW1hZ2UoKSB7IH07CisgICAgS0NhbnZhc0ltYWdlKGNvbnN0
IEludFNpemUmKTsKKyAgICB+S0NhbnZhc0ltYWdlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5p
dChjb25zdCBJbWFnZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdChJbnRTaXplKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpID0gMDsKKyAgICBJbnRTaXplIHNpemUoKSBj
b25zdDsKIH07CiAKIH0KSW5kZXg6IGtjYW52YXMvS0NhbnZhc01hc2tlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtjYW52YXMvS0NhbnZhc01hc2tlci5oCShyZXZpc2lvbiAxNjk4MikKKysrIGtjYW52YXMv
S0NhbnZhc01hc2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldE1hc2soS0NhbnZhc0ltYWdlKik7CiAgICAgS0NhbnZhc0ltYWdlKiBtYXNr
KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrOyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5
TWFzayhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdCA9IDA7CisgICAgdm9pZCBh
cHBseU1hc2soR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkg
Y29uc3Q7CiAKICAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mKSBjb25zdDsgCiBwcm90ZWN0ZWQ6CkluZGV4OiBrY2FudmFzL0tDYW52YXNSZXNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc1Jlc291cmNlLmgJKHJldmlzaW9uIDE2OTgy
KQorKysga2NhbnZhcy9LQ2FudmFzUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTcg
KzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdHlwZWRlZiBEZXByZWNhdGVkVmFsdWVMaXN0
PGNvbnN0IFJlbmRlclBhdGgqPiBSZW5kZXJQYXRoTGlzdDsKIAogY2xhc3MgVGV4dFN0cmVhbTsK
LQotdHlwZWRlZiBlbnVtCi17Ci0gICAgLy8gUGFpbnRpbmcgbW9kZQotICAgIFJTX0NMSVBQRVIg
PSAwLAotICAgIFJTX01BUktFUiA9IDEsCi0gICAgUlNfSU1BR0UgPSAyLAotICAgIFJTX0ZJTFRF
UiA9IDMsCi0gICAgUlNfTUFTS0VSID0gNAotfSBLQ1Jlc291cmNlVHlwZTsKLQogY2xhc3MgS1Jl
bmRlcmluZ1BhaW50U2VydmVyOwogCiBjbGFzcyBLQ2FudmFzUmVzb3VyY2UKSW5kZXg6IGtjYW52
YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzVHJl
ZURlYnVnLmNwcAkocmV2aXNpb24gMTY5ODIpCisrKyBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJl
ZUFzVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIktD
YW52YXNDbGlwcGVyLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUg
IktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50LmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oIgpJ
bmRleDoga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2Fu
dmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiAxNjk4MikKKysrIGtjYW52YXMv
UmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAK
ICNpbmNsdWRlICJSZW5kZXJGb3JlaWduT2JqZWN0LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVu
Z3RoLmgiCiAjaW5jbHVkZSAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKIApAQCAtNDcsMjEg
KzQ2LDExIEBAIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmYKICAgICBp
ZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgS1JlbmRlcmluZ0RldmljZSAqZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7
Ci0gICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7Ci0gICAgaWYgKCFjb250ZXh0KSB7
Ci0gICAgICAgIC8vIE9ubHkgbmVlZCB0byBzZXR1cCBmb3IgS0NhbnZhcyByZW5kZXJpbmcgaWYg
aXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgotICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZv
LnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKLSAgICAgICAgZGV2aWNlLT5wdXNo
Q29udGV4dChjb250ZXh0KTsKLSAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7Ci0gICAg
fQotCiAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKIAotICAgIGNvbnRleHQtPmNvbmNhdENUTShB
ZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOwotICAgIGNvbnRl
eHQtPmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICBjb250ZXh0LT5jb25jYXRDVE0o
dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkpOworICAgIHBhaW50SW5mby5wLT5jb25jYXRDVE0o
QWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKKyAgICBwYWlu
dEluZm8ucC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOworICAgIHBhaW50SW5mby5wLT5j
b25jYXRDVE0odHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkpOwogCiAgICAgcGFpbnRJbmZvLnAt
PmNsaXAoZ2V0Q2xpcFJlY3QocGFyZW50WCwgcGFyZW50WSkpOwogCkBAIC03NiwxMSArNjUsNiBA
QCB2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OnBhaW50KFBhaW50SW5mCiAKICAgICBpZiAob3Bh
Y2l0eSA8IDEuMGYpCiAgICAgICAgIHBhaW50SW5mby5wLT5lbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotICAgIAotICAgIGlmIChzaG91bGRQb3BDb250ZXh0KSB7Ci0gICAgICAgIGRldmljZS0+cG9w
Q29udGV4dCgpOwotICAgICAgICBkZWxldGUgY29udGV4dDsKLSAgICB9CiAKICAgICBwYWludElu
Zm8ucC0+cmVzdG9yZSgpOwogfQpJbmRleDoga2NhbnZhcy9SZW5kZXJQYXRoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrY2FudmFzL1JlbmRlclBhdGguY3BwCShyZXZpc2lvbiAxNjk4MikKKysrIGtjYW52
YXMvUmVuZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIK
ICNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgi
CiAjaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgogI2luY2x1ZGUgIktDYW52YXNNYXJrZXIuaCIK
LSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0ZpbGxQ
YWludGVyLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKICNpbmNsdWRl
ICJTVkdTdHlsZWRFbGVtZW50LmgiCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lv
biAxNjk4MikKKysrIGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsOSArMjQsOSBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHQ29udGFpbmVyLmgiCiAKKyNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgogI2luY2x1ZGUg
IktDYW52YXNDbGlwcGVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgotI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC0xNDcs
MTYgKzE0Nyw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8KICAg
ICBpZiAoIWZpcnN0Q2hpbGQoKSAmJiAhZmlsdGVyKQogICAgICAgICByZXR1cm47IC8vIFNwZWM6
IGdyb3VwcyB3L28gY2hpbGRyZW4gc3RpbGwgbWF5IHJlbmRlciBmaWx0ZXIgY29udGVudC4KICAg
ICAKLSAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKLSAg
ICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogZGV2aWNlQ29udGV4dCA9IGRldmljZS0+Y3VycmVu
dENvbnRleHQoKTsKLSAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKLSAgICBpZiAo
IWRldmljZUNvbnRleHQpIHsKLSAgICAgICAgLy8gSSBvbmx5IG5lZWQgdG8gc2V0dXAgZm9yIEtD
YW52YXMgcmVuZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4KLSAgICAgICAg
ZGV2aWNlQ29udGV4dCA9IHBhaW50SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KCk7Ci0gICAgICAgIGRldmljZS0+cHVzaENvbnRleHQoZGV2aWNlQ29udGV4dCk7Ci0gICAgICAg
IHNob3VsZFBvcENvbnRleHQgPSB0cnVlOwotICAgIH0gZWxzZQotICAgICAgICBwYWludEluZm8u
cC0+c2F2ZSgpOworICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CiAgICAgCiAgICAgaWYgKHBhcmVu
dFggIT0gMCB8fCBwYXJlbnRZICE9IDApIHsKICAgICAgICAgLy8gVHJhbnNsYXRlIGZyb20gcGFy
ZW50IG9mZnNldHMgKGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAoc3Zn
IHJlbmRlcmVycykKQEAgLTIwMSwxMiArMTkyLDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6
OnBhaW50KFBhaW50SW5mbwogICAgIGlmIChvcGFjaXR5IDwgMS4wZikKICAgICAgICAgcGFpbnRJ
bmZvLnAtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgCi0gICAgLy8gcmVzdG9yZSBkcmF3
aW5nIHN0YXRlCi0gICAgaWYgKHNob3VsZFBvcENvbnRleHQpIHsKLSAgICAgICAgZGV2aWNlLT5w
b3BDb250ZXh0KCk7Ci0gICAgICAgIGRlbGV0ZSBkZXZpY2VDb250ZXh0OwotICAgIH0gZWxzZQot
ICAgICAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOworICAgIHBhaW50SW5mby5wLT5yZXN0b3Jl
KCk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdDb250YWluZXI6OnZpZXdwb3J0KCkgY29uc3QK
SW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMv
UmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjk4MikKKysrIGtjYW52YXMvUmVuZGVyU1ZH
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiQXR0
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktDYW52YXNDbGlw
cGVyLmgiCisjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKICNpbmNsdWRlICJLQ2FudmFzTWFz
a2VyLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0
aC5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTVkdJ
bWFnZUVsZW1lbnQuaCIKQEAgLTEyNywzMCArMTI3LDIwIEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6
OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJs
ZWQoKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB8fCBzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
S1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7Ci0g
ICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHBhaW50SW5mby5wLT5zYXZlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE5lZWQgdG8g
cHVzaCBhIGRldmljZSBjb250ZXh0IG9uIHRoZSBzdGFjayBpZiBlbXB0eS4KLSAgICAgICAgY29u
dGV4dCA9IHBhaW50SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7Ci0gICAg
ICAgIGRldmljZS0+cHVzaENvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHNob3VsZFBvcENvbnRl
eHQgPSB0cnVlOwotICAgIH0KKyAgICBwYWludEluZm8ucC0+c2F2ZSgpOwogCi0gICAgY29udGV4
dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRYLCBwYXJlbnRZ
KSk7Ci0gICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwotICAgIHRyYW5z
bGF0ZUZvckF0dHJpYnV0ZXMoKTsKKyAgICBwYWludEluZm8ucC0+Y29uY2F0Q1RNKEFmZmluZVRy
YW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRYLCBwYXJlbnRZKSk7CisgICAgcGFpbnRJbmZvLnAt
PmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKKyAgICBwYWludEluZm8ucC0+Y29uY2F0Q1RN
KHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpKTsKICAgICAKICAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3ggPSBGbG9hdFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CiAgICAgICAgICAg
ICAKICAgICBpZiAoS0NhbnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChkb2N1
bWVudCgpLCBzdmdTdHlsZS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBjbGlw
cGVyLT5hcHBseUNsaXAoYm91bmRpbmdCb3gpOworICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAo
cGFpbnRJbmZvLnAsIGJvdW5kaW5nQm94KTsKIAogICAgIGlmIChLQ2FudmFzTWFza2VyKiBtYXNr
ZXIgPSBnZXRNYXNrZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1
YnN0cmluZygxKSkpCi0gICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKKyAg
ICAgICAgbWFza2VyLT5hcHBseU1hc2socGFpbnRJbmZvLnAsIGJvdW5kaW5nQm94KTsKIAogICAg
IEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5
bGUtPmZpbHRlcigpLnN1YnN0cmluZygxKSk7CiAgICAgaWYgKGZpbHRlcikKQEAgLTE4OCwxMyAr
MTc4LDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYQogICAgIGlm
IChvcGFjaXR5IDwgMS4wZikKICAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAot
ICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQotICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkK
LSAgICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZGV2
aWNlLT5wb3BDb250ZXh0KCk7Ci0gICAgICAgIGRlbGV0ZSBjb250ZXh0OwotICAgIH0KKyAgICBw
YWludEluZm8ucC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRlclNWR0ltYWdlOjpjb21wdXRl
QWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGYpCkBAIC0yODEsMTIgKzI2NSw2
IEBAIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdJbWFnZTo6dHJhbnNsYXQKICAgICByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKGltYWdlLT54KCktPnZhbHVlKCksIGltYWdlLT55
KCktPnZhbHVlKCkpOwogfQogCi12b2lkIFJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdGVGb3JBdHRy
aWJ1dGVzKCkKLXsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IHJlbmRl
cmluZ0RldmljZSgpLT5jdXJyZW50Q29udGV4dCgpOwotICAgIGNvbnRleHQtPmNvbmNhdENUTSh0
cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZh
cy9SZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lvbiAxNjk4MikKKysrIGtjYW52YXMvUmVuZGVyU1ZH
SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGludCBfeCwg
aW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIHZvaWQgdHJhbnNsYXRlRm9yQXR0cmlidXRlcygpOwogICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKICAgICAgICAgSW50UmVjdCBtX2Fic29sdXRlQm91bmRzOwpJbmRl
eDoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2Nh
bnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAJKHJldmlzaW9uIDE2OTgyKQorKysga2Nh
bnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJt
YW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA2ICAgICAgIEFsZXhhbmRl
ciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lmZGVmIFNWR19TVVBQT1JUCi0j
aW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUtS
ZW5kZXJpbmdEZXZpY2U6OktSZW5kZXJpbmdEZXZpY2UoKQotewotfQotCi1LUmVuZGVyaW5nRGV2
aWNlOjp+S1JlbmRlcmluZ0RldmljZSgpCi17Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiBLUmVuZGVyaW5nRGV2aWNlOjpjdXJyZW50Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
Y29udGV4dFN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1f
Y29udGV4dFN0YWNrLmxhc3QoKTsKLX0KLQotS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIEtSZW5k
ZXJpbmdEZXZpY2U6OnBvcENvbnRleHQoKQotewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiByZXN1bHQgPSBtX2NvbnRleHRTdGFjay5sYXN0KCk7Ci0gICAgbV9jb250ZXh0U3RhY2sucmVt
b3ZlTGFzdCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ0Rldmlj
ZTo6cHVzaENvbnRleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAg
bV9jb250ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwotfQotCi19Ci0KLS8vIHZpbTp0cz00Om5v
ZXQKLSNlbmRpZiAvLyBTVkdfU1VQUE9SVAotCkluZGV4OiBrY2FudmFzL2RldmljZS9LUmVuZGVy
aW5nRGV2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rldmlj
ZS5oCShyZXZpc2lvbiAxNjk4MikKKysrIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0qLwotCi0jaWZuZGVmIEtSZW5kZXJpbmdEZXZpY2Vf
SAotI2RlZmluZSBLUmVuZGVyaW5nRGV2aWNlX0gKLSNpZmRlZiBTVkdfU1VQUE9SVAotCi0jaW5j
bHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBha2Egd2hlcmUgdG8gZHJhdwotY2xhc3Mg
S1JlbmRlcmluZ0RldmljZUNvbnRleHQKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dCgpIHsgfQotICAgIHZpcnR1YWwgfktSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCkgeyB9
Ci0KLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgPSAwOwotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGN0bSgpIGNvbnN0ID0g
MDsKLSAgICAgICAgCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGF0aCgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJikgPSAwOwotCi0gICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpID0gMDsKLX07Ci0KLWNsYXNzIEtDYW52
YXNJbWFnZTsKLWNsYXNzIEtDYW52YXNGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBLUmVuZGVyaW5nRGV2
aWNlCi17Ci1wdWJsaWM6Ci0gICAgS1JlbmRlcmluZ0RldmljZSgpOwotICAgIHZpcnR1YWwgfktS
ZW5kZXJpbmdEZXZpY2UoKTsKLQotICAgIC8vIFRoZSByZW5kZXJpbmcgZGV2aWNlIHdpbGwgYmUg
ZGlyZWN0bHkgaW5pdGVkCi0gICAgLy8gYWZ0ZXIgdGhlIGNhbnZhcyB0YXJnZXQsIGl0IG1heSBi
ZSBvdmVyd3JpdHRlbi4KLSAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXJlZCgpIGNvbnN0ID0gMDsK
LQotICAgIC8vIEdsb2JhbCByZW5kZXJpbmcgZGV2aWNlIGNvbnRleHQKLSAgICBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogY3VycmVudENvbnRleHQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqIHBvcENvbnRleHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVz
aENvbnRleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqKTsKLSAgICAKLSAgICB2aXJ0dWFsIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdlKikgY29u
c3QgPSAwOwotCi0gICAgLy8gQ3JlYXRpb24gdG9vbHMKLSAgICB2aXJ0dWFsIEtDYW52YXNSZXNv
dXJjZSogY3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5cGUmKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyRWZmZWN0KiBjcmVhdGVGaWx0ZXJFZmZlY3QoY29uc3Qg
S0NGaWx0ZXJFZmZlY3RUeXBlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgS1JlbmRlcmluZ1Bh
aW50U2VydmVyKiBjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1BhaW50U2VydmVyVHlwZSYpIGNv
bnN0ID0gMDsKLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8S1JlbmRlcmluZ0RldmljZUNvbnRleHQq
PiBtX2NvbnRleHRTdGFjazsKLX07Ci0KLUtSZW5kZXJpbmdEZXZpY2UqIHJlbmRlcmluZ0Rldmlj
ZSgpOyAvKiByZXR1cm5zIHRoZSBzaW5nbGUgZ2xvYmFsIHJlbmRlcmluZyBkZXZpY2UgKi8KLQot
fQotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0Cklu
ZGV4OiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAJKHJldmlzaW9uIDE2
OTgyKQorKysga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0ZpbGxQYWludGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYg
U1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiS1Jl
bmRlcmluZ0ZpbGxQYWludGVyLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyLmgi
CiAKSW5kZXg6IGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oCShyZXZpc2lvbiAx
Njk4MikKKysrIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEtS
ZW5kZXJpbmdQYWludFNlcnZlcjsKLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0OwogY2xh
c3MgS1JlbmRlcmluZ0ZpbGxQYWludGVyCiB7CiBwdWJsaWM6CkluZGV4OiBrY2FudmFzL2Rldmlj
ZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24gMTY5ODIpCisrKyBrY2FudmFzL2Rldmlj
ZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
OwogY2xhc3MgUmVuZGVyUGF0aDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgVGV4dFN0cmVh
bTsKQEAgLTcwLDE3ICs2OSwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBLQ1BhaW50U2VydmVy
VHlwZSB0eXBlKCkgY29uc3QgPSAwOwogICAgIAogICAgIC8vIEFjdHVhbCByZW5kZXJpbmcgZnVu
Y3Rpb24KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNv
bnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50
VGFyZ2V0VHlwZSkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJP
YmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0
ZWFyZG93bihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFy
Z2V0VHlwZSkgY29uc3QgPSAwOwogICAgIAogICAgIGJvb2wgaXNQYWludGluZ1RleHQoKSBjb25z
dCB7IHJldHVybiBtX3BhaW50aW5nVGV4dDsgfQogICAgIHZvaWQgc2V0UGFpbnRpbmdUZXh0KGJv
b2wgcGFpbnRpbmdUZXh0KSB7IG1fcGFpbnRpbmdUZXh0ID0gcGFpbnRpbmdUZXh0OyB9CiAKICAg
ICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYp
IGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
UmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7CiBwcml2YXRlOgogICAg
IGNvbnN0IFJlbmRlclBhdGgqIG1fYWN0aXZlQ2xpZW50OwogICAgIFN0cmluZyBtX3JlZ2lzdHJ5
SWQ7CkluZGV4OiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdTdHJva2VQYWludGVyLmgJKHJldmlz
aW9uIDE2OTgyKQorKysga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI7Ci1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dDsKIGNsYXNzIEtSZW5kZXJpbmdTdHJva2VQYWludGVyCiB7CiBwdWJsaWM6CkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6LmgJKHJldmlzaW9uIDE2OTgy
KQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDE0IEBAIGNsYXNzIENJSW1hZ2U7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgS1JlbmRlcmluZ0RldmljZTsKIAogY2xhc3MgS0NhbnZhc0ZpbHRl
clF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyIHsKIHB1YmxpYzoKICAgICBLQ2FudmFzRmls
dGVyUXVhcnR6KCk7CiAgICAgdmlydHVhbCB+S0NhbnZhc0ZpbHRlclF1YXJ0eigpOwogICAgIAot
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYgYmJveCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGx5RmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYgYmJveCk7CisgICAg
dmlydHVhbCB2b2lkIHByZXBhcmVGaWx0ZXIoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IEZsb2F0
UmVjdCYgYmJveCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5RmlsdGVyKEdyYXBoaWNzQ29udGV4
dComLCBjb25zdCBGbG9hdFJlY3QmIGJib3gpOwogICAgIAogICAgIENJSW1hZ2UqIGltYWdlRm9y
TmFtZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHNldEltYWdlRm9yTmFtZShDSUlt
YWdlKiwgY29uc3QgU3RyaW5nJik7CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZh
c0ZpbHRlclF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0Nh
bnZhc0ZpbHRlclF1YXJ0ei5tbQkocmV2aXNpb24gMTY5ODIpCisrKyBrY2FudmFzL2RldmljZS9x
dWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQs
OCBAQAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDYWNoZWRJbWFnZS5o
IgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW1wb3J0ICJJbWFnZS5oIgotI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5o
IgogI2ltcG9ydCAiUXVhcnR6U3VwcG9ydC5oIgogI2ltcG9ydCAiV0tBcml0aG1ldGljRmlsdGVy
LmgiCiAjaW1wb3J0ICJXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oIgpAQCAtNTUsNiArNTUsMzUg
QEAKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgCitLQ2FudmFzRmlsdGVyRWZmZWN0KiBLQ2FudmFzRmlsdGVyOjpjcmVhdGVGaWx0
ZXJFZmZlY3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlJiB0eXBlKQoreworICAgIHN3aXRjaCh0
eXBlKSB7CisgICAgICAgIC8qIExpZ2h0IHNvdXJjZXMgYXJlIGNvbnRhaW5lZCBieSB0aGUgZGlm
ZnVzZS9zcGVjdWxhciBsaWdodCBibG9ja3MgCisgICAgICAgIGNhc2UgRkVfRElTVEFOVF9MSUdI
VDogCisgICAgICAgIGNhc2UgRkVfUE9JTlRfTElHSFQ6IAorICAgICAgICBjYXNlIEZFX1NQT1Rf
TElHSFQ6IAorICAgICAgICAqLworICAgICAgICBjYXNlIEZFX0JMRU5EOiByZXR1cm4gbmV3IEtD
YW52YXNGRUJsZW5kUXVhcnR6KCk7CisgICAgICAgIGNhc2UgRkVfQ09MT1JfTUFUUklYOiByZXR1
cm4gbmV3IEtDYW52YXNGRUNvbG9yTWF0cml4UXVhcnR6KCk7CisgICAgICAgIGNhc2UgRkVfQ09N
UE9ORU5UX1RSQU5TRkVSOiByZXR1cm4gbmV3IEtDYW52YXNGRUNvbXBvbmVudFRyYW5zZmVyUXVh
cnR6KCk7CisgICAgICAgIGNhc2UgRkVfQ09NUE9TSVRFOiByZXR1cm4gbmV3IEtDYW52YXNGRUNv
bXBvc2l0ZVF1YXJ0eigpOworICAgIC8vICBjYXNlIEZFX0NPTlZPTFZFX01BVFJJWDogCisgICAg
ICAgIGNhc2UgRkVfRElGRlVTRV9MSUdIVElORzogcmV0dXJuIG5ldyBLQ2FudmFzRkVEaWZmdXNl
TGlnaHRpbmdRdWFydHooKTsKKyAgICAgICAgY2FzZSBGRV9ESVNQTEFDRU1FTlRfTUFQOiByZXR1
cm4gbmV3IEtDYW52YXNGRURpc3BsYWNlbWVudE1hcFF1YXJ0eigpOworICAgICAgICBjYXNlIEZF
X0ZMT09EOiByZXR1cm4gbmV3IEtDYW52YXNGRUZsb29kUXVhcnR6KCk7CisgICAgICAgIGNhc2Ug
RkVfR0FVU1NJQU5fQkxVUjogcmV0dXJuIG5ldyBLQ2FudmFzRkVHYXVzc2lhbkJsdXJRdWFydHoo
KTsKKyAgICAgICAgY2FzZSBGRV9JTUFHRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVJbWFnZVF1YXJ0
eigpOworICAgICAgICBjYXNlIEZFX01FUkdFOiByZXR1cm4gbmV3IEtDYW52YXNGRU1lcmdlUXVh
cnR6KCk7CisgICAgLy8gIGNhc2UgRkVfTU9SUEhPTE9HWToKKyAgICAgICAgY2FzZSBGRV9PRkZT
RVQ6IHJldHVybiBuZXcgS0NhbnZhc0ZFT2Zmc2V0UXVhcnR6KCk7CisgICAgICAgIGNhc2UgRkVf
U1BFQ1VMQVJfTElHSFRJTkc6IHJldHVybiBuZXcgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1
YXJ0eigpOworICAgICAgICBjYXNlIEZFX1RJTEU6IHJldHVybiBuZXcgS0NhbnZhc0ZFVGlsZVF1
YXJ0eigpOworICAgIC8vICBjYXNlIEZFX1RVUkJVTEVOQ0U6CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBLQ1ByZXZpb3VzRmlsdGVyT3V0cHV0TmFtZSA9ICJfX3ByZXZpb3VzT3V0cHV0X18iOwogCkBA
IC0xMDYsMTkgKzEzNSwxMiBAQCBLQ2FudmFzRmlsdGVyUXVhcnR6Ojp+S0NhbnZhc0ZpbHRlclF1
YXJ0CiAgICAgSGFyZFJlbGVhc2UobV9pbWFnZXNCeU5hbWUpOwogfQogCi12b2lkIEtDYW52YXNG
aWx0ZXJRdWFydHo6OnByZXBhcmVGaWx0ZXIoY29uc3QgRmxvYXRSZWN0ICZiYm94KQordm9pZCBL
Q2FudmFzRmlsdGVyUXVhcnR6OjpwcmVwYXJlRmlsdGVyKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCAmYmJveCkKIHsKLSAgICBpZiAoYmJveC5pc0VtcHR5KCkgfHwg
IUtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmZpbHRlcnNFbmFibGVkKCkgfHwgbV9lZmZlY3RzLmlz
RW1wdHkoKSkKKyAgICBpZiAoYmJveC5pc0VtcHR5KCkgfHwgbV9lZmZlY3RzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHN0YXRpY19j
YXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdEZXZpY2UoKSktPmN1cnJlbnRD
R0NvbnRleHQoKTsKLSAgICAKLSAgICAvLyBnZXQgYSBDSUNvbnRleHQsIGFuZCBDR0xheWVyIGZv
ciBkcmF3aW5nIGluLgotICAgIGJvb2wgdXNlU29mdHdhcmUgPSAhIEtSZW5kZXJpbmdEZXZpY2VR
dWFydHo6OmhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZCgpOwotICAgIE5TRGljdGlvbmFyeSAqY29u
dGV4dE9wdGlvbnMgPSBuaWw7Ci0gICAgCi0gICAgaWYgKHVzZVNvZnR3YXJlKQotICAgICAgICBj
b250ZXh0T3B0aW9ucyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwga0NJQ29udGV4dFVzZVNvZnR3YXJlUmVu
ZGVyZXIsIG5pbF07CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwogICAgIAogICAgIC8vIFVzZSBvZiBDR0JlZ2luL0VuZFRyYW5zcGFyZW5j
eUxheWVyIGFyb3VuZCB0aGlzIGNhbGwgY2F1c2VzIG92ZXIgcmVsZWFzZQogICAgIC8vIG9mIGNn
Q29udGV4dCBkdWUgdG8gaXQgYmVpbmcgY3JlYXRlZCBvbiBhbiBhdXRvcmVsZWFzZSBwb29sLCBh
bmQgcmVsZWFzZWQKQEAgLTEyNyw3ICsxNDksNyBAQCB2b2lkIEtDYW52YXNGaWx0ZXJRdWFydHo6
OnByZXBhcmVGaWx0ZXIoCiAgICAgLy8gPGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njk0Nz4KICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY0NzczNT4KICAg
ICBOU0F1dG9yZWxlYXNlUG9vbCAqZmlsdGVyQ29udGV4dFBvb2wgPSBbW05TQXV0b3JlbGVhc2VQ
b29sIGFsbG9jXSBpbml0XTsKLSAgICBtX2ZpbHRlckNJQ29udGV4dCA9IEhhcmRSZXRhaW4oW0NJ
Q29udGV4dCBjb250ZXh0V2l0aENHQ29udGV4dDpjZ0NvbnRleHQgb3B0aW9uczpjb250ZXh0T3B0
aW9uc10pOworICAgIG1fZmlsdGVyQ0lDb250ZXh0ID0gSGFyZFJldGFpbihbQ0lDb250ZXh0IGNv
bnRleHRXaXRoQ0dDb250ZXh0OmNnQ29udGV4dCBvcHRpb25zOm5pbF0pOwogICAgIFtmaWx0ZXJD
b250ZXh0UG9vbCBkcmFpbl07CiAgICAgCiAgICAgbV9maWx0ZXJDR0xheWVyID0gW21fZmlsdGVy
Q0lDb250ZXh0IGNyZWF0ZUNHTGF5ZXJXaXRoU2l6ZTpDR1JlY3QoYmJveCkuc2l6ZSBpbmZvOk5V
TExdOwpAQCAtMTQwLDcgKzE2Miw3IEBAIHZvaWQgS0NhbnZhc0ZpbHRlclF1YXJ0ejo6cHJlcGFy
ZUZpbHRlcigKIAogdm9pZCBLQ2FudmFzRmlsdGVyUXVhcnR6OjphcHBseUZpbHRlcihjb25zdCBG
bG9hdFJlY3QgJmJib3gpCiB7Ci0gICAgaWYgKGJib3guaXNFbXB0eSgpIHx8ICFLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6OjpmaWx0ZXJzRW5hYmxlZCgpIHx8IG1fZWZmZWN0cy5pc0VtcHR5KCkpCisg
ICAgaWYgKGJib3guaXNFbXB0eSgpIHx8IG1fZWZmZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIHJlc3RvcmUgdGhlIHByZXZpb3VzIGNvbnRleHQsIGRlbGV0ZSB0aGUg
ZmlsdGVyIGNvbnRleHQuCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ltYWdl
UXVhcnR6LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0lt
YWdlUXVhcnR6LmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2Fu
dmFzSW1hZ2VRdWFydHouY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICAKK0tDYW52YXNJbWFnZTo6S0NhbnZhc0ltYWdlKCkK
K3sKKyAgICAKK30KKyAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBr
Y2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1tCShyZXZpc2lvbiAxNjk4
MikKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
ICAgICAgICAgKEMpIDIwMDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KICAq
ICAgICAgICAgICAgICAgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICoKQEAgLTI4LDE4
ICsyOCwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNp
bXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAot
I2ltcG9ydCAiS0NhbnZhc0ZpbHRlclF1YXJ0ei5oIgotI2ltcG9ydCAiS0NhbnZhc01hc2tlclF1
YXJ0ei5oIgotI2ltcG9ydCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIgotI2ltcG9ydCAiS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5oIgotI2ltcG9ydCAiS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgi
Ci0jaW1wb3J0ICJLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5oIgotI2ltcG9ydCAiUXVhcnR6U3Vw
cG9ydC5oIgotI2ltcG9ydCAiUmVuZGVyUGF0aC5oIgotI2ltcG9ydCAiU1ZHUmVuZGVyU3R5bGUu
aCIKLSNpbXBvcnQgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJLQ2FudmFzRmlsdGVy
UXVhcnR6LmgiCisjaW5jbHVkZSAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIgorI2luY2x1ZGUg
IktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdTdHJva2VQYWlu
dGVyLmgiCisjaW5jbHVkZSAiUXVhcnR6U3VwcG9ydC5oIgorI2luY2x1ZGUgIlJlbmRlclBhdGgu
aCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1l
bnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFy
dHovS0NhbnZhc01hc2tlclF1YXJ0ei5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LQ2FudmFzTWFza2VyUXVhcnR6LmgJKHJldmlzaW9uIDE2OTgyKQorKysga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tDYW52YXNNYXNrZXJRdWFydHouaAkod29ya2luZyBjb3B5KQpAQCAtMSwz
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICAgICAgICAgICAgICAyMDA1LCAyMDA2IEFsZXhh
bmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJLQ2FudmFz
TWFza2VyLmgiCi0jaW5jbHVkZSAiS0NhbnZhc0ltYWdlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgS0NhbnZhc01hc2tlclF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzTWFza2VyIHsK
LXB1YmxpYzoKLSAgICBLQ2FudmFzTWFza2VyUXVhcnR6KCkgeyB9Ci0gICAgCi0gICAgdmlydHVh
bCB2b2lkIGFwcGx5TWFzayhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKLX07
Ci0KLX0KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzTWFza2VyUXVhcnR6Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzTWFza2VyUXVhcnR6
Lm1tCShyZXZpc2lvbiAxNjk4MikKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzTWFz
a2VyUXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTEgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW1wb3J0ICJLQ2FudmFzTWFza2Vy
UXVhcnR6LmgiCisjaW1wb3J0ICJLQ2FudmFzTWFza2VyLmgiCiAKKyNpbXBvcnQgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2ltcG9ydCAiU1ZHUmVuZGVyU3R5bGUuaCIKLQogI2ltcG9ydCAiS0NhbnZh
c1Jlc291cmNlc1F1YXJ0ei5oIgotI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgog
I2ltcG9ydCAiUXVhcnR6U3VwcG9ydC5oIgogCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFn
ZS5oPgpAQCAtODYsMjYgKzg1LDI1IEBAIHN0YXRpYyBDSUltYWdlICp0cmFuc2Zvcm1JbWFnZUlu
dG9HcmF5c2MKICAgICByZXR1cm4gW211bHRpcGxpZWRHcmF5c2NhbGUgdmFsdWVGb3JLZXk6QCJv
dXRwdXRJbWFnZSJdOwogfQogCi12b2lkIEtDYW52YXNNYXNrZXJRdWFydHo6OmFwcGx5TWFzayhj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdAordm9pZCBLQ2FudmFzTWFza2VyOjph
cHBseU1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5k
aW5nQm94KSBjb25zdAogewogICAgIGlmICghbV9tYXNrKQogICAgICAgICByZXR1cm47CiAgICAg
Ly8gQ3JlYXRlIGdyYXlzY2FsZSBiaXRtYXAgY29udGV4dAogICAgIGludCB3aWR0aCA9IG1fbWFz
ay0+c2l6ZSgpLndpZHRoKCk7CiAgICAgaW50IGhlaWdodCA9IG1fbWFzay0+c2l6ZSgpLmhlaWdo
dCgpOwotICAgIHZvaWQgKmltYWdlQnVmZmVyID0gZmFzdE1hbGxvYyh3aWR0aCAqIGhlaWdodCk7
CisgICAgdm9pZCogaW1hZ2VCdWZmZXIgPSBmYXN0TWFsbG9jKHdpZHRoICogaGVpZ2h0KTsKICAg
ICBDR0NvbG9yU3BhY2VSZWYgZ3JheUNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZp
Y2VHcmF5KCk7CiAgICAgQ0dDb250ZXh0UmVmIGdyYXlzY2FsZUNvbnRleHQgPSBDR0JpdG1hcENv
bnRleHRDcmVhdGUoaW1hZ2VCdWZmZXIsIHdpZHRoLCBoZWlnaHQsIDgsIHdpZHRoLCBncmF5Q29s
b3JTcGFjZSwga0NHSW1hZ2VBbHBoYU5vbmUpOwogICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoZ3Jh
eUNvbG9yU3BhY2UpOwotICAgIENJQ29udGV4dCAqY2lHcmF5c2NhbGVDb250ZXh0ID0gW0NJQ29u
dGV4dCBjb250ZXh0V2l0aENHQ29udGV4dDpncmF5c2NhbGVDb250ZXh0IG9wdGlvbnM6bmlsXTsK
KyAgICBDSUNvbnRleHQqIGNpR3JheXNjYWxlQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdp
dGhDR0NvbnRleHQ6Z3JheXNjYWxlQ29udGV4dCBvcHRpb25zOm5pbF07CiAKICAgICBLQ2FudmFz
SW1hZ2VRdWFydHoqIG1hc2tJbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZVF1YXJ0eio+
KG1fbWFzayk7Ci0gICAgQ0lJbWFnZSAqZ3JheXNjYWxlTWFzayA9IHRyYW5zZm9ybUltYWdlSW50
b0dyYXlzY2FsZU1hc2soW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dMYXllcjptYXNrSW1hZ2UtPmNnTGF5
ZXIoKV0pOworICAgIENJSW1hZ2UqIGdyYXlzY2FsZU1hc2sgPSB0cmFuc2Zvcm1JbWFnZUludG9H
cmF5c2NhbGVNYXNrKFtDSUltYWdlIGltYWdlV2l0aENHTGF5ZXI6bWFza0ltYWdlLT5jZ0xheWVy
KCldKTsKICAgICBbY2lHcmF5c2NhbGVDb250ZXh0IGRyYXdJbWFnZTpncmF5c2NhbGVNYXNrIGF0
UG9pbnQ6Q0dQb2ludFplcm8gZnJvbVJlY3Q6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0
KV07CiAKICAgICBDR0ltYWdlUmVmIGdyYXlzY2FsZUltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlSW1hZ2UoZ3JheXNjYWxlQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9
IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdEZXZpY2UoKSkt
PmN1cnJlbnRDR0NvbnRleHQoKTsKLSAgICBDR0NvbnRleHRDbGlwVG9NYXNrKGNnQ29udGV4dCwg
Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSwgZ3JheXNjYWxlSW1hZ2UpOworICAgIENH
Q29udGV4dENsaXBUb01hc2soY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIENHUmVjdE1ha2Uo
MCwgMCwgd2lkdGgsIGhlaWdodCksIGdyYXlzY2FsZUltYWdlKTsKICAgICAKICAgICBDR0ltYWdl
UmVsZWFzZShncmF5c2NhbGVJbWFnZSk7CiAgICAgQ0dDb250ZXh0UmVsZWFzZShncmF5c2NhbGVD
b250ZXh0KTsKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUmVzb3VyY2VzUXVh
cnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNSZXNvdXJj
ZXNRdWFydHouaAkocmV2aXNpb24gMTY5ODIpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0Nh
bnZhc1Jlc291cmNlc1F1YXJ0ei5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgS0NhbnZhc1Jlc291cmNlc1F1YXJ0el9oCi0jZGVm
aW5lIEtDYW52YXNSZXNvdXJjZXNRdWFydHpfaAotCi0jaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXIu
aCIKLQotI2luY2x1ZGUgIktDYW52YXNJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRh
aW5lci5oIgotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotCi10eXBlZGVmIHN0cnVjdCBD
R0NvbnRleHQgKkNHQ29udGV4dFJlZjsKLXR5cGVkZWYgc3RydWN0IENHTGF5ZXIgKkNHTGF5ZXJS
ZWY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS0NhbnZhc0NsaXBwZXJRdWFydHog
OiBwdWJsaWMgS0NhbnZhc0NsaXBwZXIgewotcHVibGljOgotICAgIEtDYW52YXNDbGlwcGVyUXVh
cnR6KCkgeyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5Q2xpcChjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94KSBjb25zdDsKLX07Ci0KLWNsYXNzIEtDYW52YXNJbWFnZVF1YXJ0eiA6
IHB1YmxpYyBLQ2FudmFzSW1hZ2UgewotcHVibGljOgotICAgIEtDYW52YXNJbWFnZVF1YXJ0eigp
IDogbV9jZ0xheWVyKDApIHsgfQotICAgIH5LQ2FudmFzSW1hZ2VRdWFydHooKTsKLSAgICB2b2lk
IGluaXQoY29uc3QgSW1hZ2UmKSB7IH0KLSAgICB2b2lkIGluaXQoSW50U2l6ZSBzaXplKSB7IG1f
c2l6ZSA9IHNpemU7IH0KLSAgICAKLSAgICBDR0xheWVyUmVmIGNnTGF5ZXIoKTsKLSAgICB2b2lk
IHNldENHTGF5ZXIoQ0dMYXllclJlZiBsYXllcik7Ci0KLSAgICBJbnRTaXplIHNpemUoKSB7IHJl
dHVybiBtX3NpemU7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAg
Q0dMYXllclJlZiBtX2NnTGF5ZXI7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDoga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tDYW52YXNSZXNvdXJjZXNRdWFydHoubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNSZXNvdXJjZXNRdWFydHoubW0JKHJldmlzaW9uIDE2
OTgyKQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNSZXNvdXJjZXNRdWFydHoubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogICAgICAgICAgICAgICAyMDA1IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5v
cmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMSwyMyArMzEsMjAgQEAKIAogI2ltcG9ydCAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJLQ2FudmFzRmlsdGVyUXVhcnR6LmgiCi0jaW1wb3J0
ICJLQ2FudmFzTWFza2VyUXVhcnR6LmgiCi0jaW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6
LmgiCiAjaW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBLQ2FudmFzQ2xpcHBlclF1YXJ0ejo6YXBwbHlDbGlwKGNvbnN0IEZsb2F0UmVjdCYgYm91
bmRpbmdCb3gpIGNvbnN0Cit2b2lkIEtDYW52YXNDbGlwcGVyOjphcHBseUNsaXAoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdAogewot
ICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gcmVuZGVyaW5nRGV2aWNlKCkt
PmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHN0YXRpY19j
YXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Kj4oY29udGV4dCktPmNnQ29udGV4dCgp
OworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBpZiAobV9jbGlwRGF0YS5jb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQk9PTCBoZXRlcm9nZW5vdXNDbGlwUnVsZXMgPSBOTzsKICAgICBXaW5kUnVsZSBjbGlwUnVs
ZSA9IG1fY2xpcERhdGFbMF0ud2luZFJ1bGUoKTsKIAotICAgIGNvbnRleHQtPmNsZWFyUGF0aCgp
OworICAgIENHQ29udGV4dEJlZ2luUGF0aChjZ0NvbnRleHQpOwogCiAgICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gYmJveFRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdlZW5SZWN0
cyhDR1JlY3RNYWtlKDAsMCwxLDEpLCBDR1JlY3QoYm91bmRpbmdCb3gpKTsKIApAQCAtODEsMjMg
Kzc4LDUgQEAgdm9pZCBLQ2FudmFzQ2xpcHBlclF1YXJ0ejo6YXBwbHlDbGlwKGNvbgogICAgIH0K
IH0KIAotS0NhbnZhc0ltYWdlUXVhcnR6Ojp+S0NhbnZhc0ltYWdlUXVhcnR6KCkKLXsKLSAgICBD
R0xheWVyUmVsZWFzZShtX2NnTGF5ZXIpOwotfQotCi1DR0xheWVyUmVmIEtDYW52YXNJbWFnZVF1
YXJ0ejo6Y2dMYXllcigpCi17Ci0gICAgcmV0dXJuIG1fY2dMYXllcjsKLX0KLQotdm9pZCBLQ2Fu
dmFzSW1hZ2VRdWFydHo6OnNldENHTGF5ZXIoQ0dMYXllclJlZiBsYXllcikKLXsKLSAgICBpZiAo
bV9jZ0xheWVyICE9IGxheWVyKSB7Ci0gICAgICAgIENHTGF5ZXJSZWxlYXNlKG1fY2dMYXllcik7
Ci0gICAgICAgIG1fY2dMYXllciA9IENHTGF5ZXJSZXRhaW4obGF5ZXIpOwotICAgIH0KLX0KLQog
fQogI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgJKHJldmlzaW9uIDE2OTgyKQorKysga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAkod29ya2luZyBjb3B5KQpAQCAt
MSw4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICAgICAgICAgICAgICAyMDA2IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLQotI2lmbmRlZiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6
X0gKLSNkZWZpbmUgS1JlbmRlcmluZ0RldmljZVF1YXJ0el9ICi0jaWZkZWYgU1ZHX1NVUFBPUlQK
LQotI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZS5oIgotCi10eXBlZGVmIHN0cnVjdCBDR1JlY3Qg
Q0dSZWN0OwotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0ICpDR0NvbnRleHRSZWY7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHogOiBw
dWJsaWMgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgewotcHVibGljOgotICAgIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0UXVhcnR6KENHQ29udGV4dFJlZik7Ci0gICAgdmlydHVhbCB+S1JlbmRlcmlu
Z0RldmljZUNvbnRleHRRdWFydHooKTsKLSAgICAKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9y
bSBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gY3RtKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGF0aCgp
OwotICAgIHZpcnR1YWwgdm9pZCBhZGRQYXRoKGNvbnN0IFBhdGgmKTsKLQotICAgIHZpcnR1YWwg
R3JhcGhpY3NDb250ZXh0KiBjcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBDR0Nv
bnRleHRSZWYgY2dDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jZ0NvbnRleHQ7IH07Ci0gICAg
Ci1wcml2YXRlOgotICAgIENHQ29udGV4dFJlZiBtX2NnQ29udGV4dDsKLX07Ci0KLWNsYXNzIEtS
ZW5kZXJpbmdEZXZpY2VRdWFydHogOiBwdWJsaWMgS1JlbmRlcmluZ0RldmljZSB7Ci1wdWJsaWM6
Ci0gICAgS1JlbmRlcmluZ0RldmljZVF1YXJ0eigpIHsgfQotICAgIHZpcnR1YWwgfktSZW5kZXJp
bmdEZXZpY2VRdWFydHooKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcmVkKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIGNvbnRleHQgbWFuYWdlbWVudC4KLSAgICBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiogcXVhcnR6Q29udGV4dCgpIGNvbnN0OwotICAg
IENHQ29udGV4dFJlZiBjdXJyZW50Q0dDb250ZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dEZvckltYWdlKEtDYW52YXNJbWFnZSopIGNvbnN0
OwotCi0gICAgLy8gUmVzb3VyY2UgY3JlYXRpb24KLSAgICB2aXJ0dWFsIEtDYW52YXNSZXNvdXJj
ZSAqY3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5cGUmKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEtSZW5kZXJpbmdQYWludFNlcnZlciAqY3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWlu
dFNlcnZlclR5cGUmKSBjb25zdDsKLSAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QgKmNy
ZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmKSBjb25zdDsKLSAgICAK
LSAgICAvLyBmaWx0ZXJzIChtb3N0bHkgZGVidWdnaW5nKQotICAgIHN0YXRpYyBib29sIGZpbHRl
cnNFbmFibGVkKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0RmlsdGVyc0VuYWJsZWQoYm9vbCk7Ci0g
ICAgc3RhdGljIGJvb2wgaGFyZHdhcmVSZW5kZXJpbmdFbmFibGVkKCk7Ci0gICAgc3RhdGljIHZv
aWQgc2V0SGFyZHdhcmVSZW5kZXJpbmdFbmFibGVkKGJvb2wpOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLSNlbmRpZiAvLyBLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6X0gKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9x
dWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoubW0JKHJldmlzaW9uIDE2
OTgyKQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRp
ZW50UXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5IEBACiAjaWZkZWYgU1ZH
X1NVUFBPUlQKICNpbXBvcnQgIktSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oIgogCisjaW1w
b3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIktDYW52YXNJbWFnZS5oIgogI2ltcG9y
dCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIgotI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1
YXJ0ei5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgiCiAjaW1wb3J0ICJLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKICNpbXBvcnQgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgi
CkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFk
aWVudAogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50OjppbnZhbGlkYXRl
KCk7CiB9CiAKLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OmRyYXco
Y29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlciwgS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtD
UGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50UXVhcnR6OjpkcmF3KGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBz
ZXJ2ZXIsIEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyUGF0
aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBpZiAoIXNldHVw
KHNlcnZlciwgcmVuZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSkpCiAgICAgICAgIHJldHVybjsK
QEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVh
cnR6CiAgICAgdGVhcmRvd24oc2VydmVyLCByZW5kZXJpbmdDb250ZXh0LCBwYXRoLCB0eXBlKTsK
IH0KIAotYm9vbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6c2V0dXAoY29u
c3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlciwgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorYm9vbCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6c2V0dXAoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnQqIHNlcnZlciwgR3JhcGhpY3NDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBS
ZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QK
IHsKICAgICBpZiAoc2VydmVyLT5saXN0ZW5lcigpKSAvLyB0aGlzIHNlZW1zIGxpa2UgYmFkIGRl
c2lnbiB0byBtZSwgc2hvdWxkIGJlIGluIGEgY29tbW9uIGJhc2VjbGFzcy4gLS0gZWNzIDgvNi8w
NQogICAgICAgICBzZXJ2ZXItPmxpc3RlbmVyKCktPnJlc291cmNlTm90aWZpY2F0aW9uKCk7CkBA
IC0yMzAsMjUgKzIzMCwyMiBAQCBib29sIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVh
cnR6CiAgICAgaWYgKCFtX3NoYWRpbmdDYWNoZSkKICAgICAgICAgY29uc3RfY2FzdDxLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0eio+KHRoaXMpLT51cGRhdGVRdWFydHpHcmFkaWVu
dENhY2hlKHNlcnZlcik7CiAgICAgCi0gICAgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiogcXVhcnR6
RGV2aWNlID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZVF1YXJ0eio+KHJlbmRlcmluZ0Rl
dmljZSgpKTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0ekRldmljZS0+Y3VycmVu
dENHQ29udGV4dCgpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcmVu
ZGVyT2JqZWN0LT5zdHlsZSgpOwotICAgIEFTU0VSVChjb250ZXh0ICE9IE5VTEwpOwotICAgIAot
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0QWxwaGEo
Y29udGV4dCwgcmVuZGVyU3R5bGUtPm9wYWNpdHkoKSk7CisgICAgcmVuZGVyaW5nQ29udGV4dC0+
c2F2ZSgpOworICAgIHJlbmRlcmluZ0NvbnRleHQtPnNldEFscGhhKHJlbmRlclN0eWxlLT5vcGFj
aXR5KCkpOwogICAgIAogICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIHJlbmRlclN0
eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpIHsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShjb250ZXh0KTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dC0+c2F2ZSgpOwogICAgICAgICBp
ZiAoc2VydmVyLT5pc1BhaW50aW5nVGV4dCgpKQogICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4
dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRDbGlwKTsKICAgICB9CiAKICAgICBpZiAoKHR5
cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJv
a2UoKSkgewotICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworICAgICAgICBy
ZW5kZXJpbmdDb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRl
eHQoY29udGV4dCwgcmVuZGVyU3R5bGUsIHJlbmRlck9iamVjdCk7IC8vIEZJWE1FOiB0aGlzIHNl
ZW1zIGxpa2UgdGhlIHdyb25nIHBsYWNlIGZvciB0aGlzLgogICAgICAgICBpZiAoc2VydmVyLT5p
c1BhaW50aW5nVGV4dCgpKSB7Ci0gICAgICAgICAgICBtX21hc2tJbWFnZSA9IHN0YXRpY19jYXN0
PEtDYW52YXNJbWFnZSo+KHF1YXJ0ekRldmljZS0+Y3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsK
KyAgICAgICAgICAgIG1fbWFza0ltYWdlID0gbmV3IEtDYW52YXNJbWFnZTsKICAgICAgICAgICAg
IGludCB3aWR0aCAgPSAyMDQ4OwogICAgICAgICAgICAgaW50IGhlaWdodCA9IDIwNDg7IC8vIEZJ
WE1FPz8/CiAgICAgICAgICAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQp
OwpAQCAtMjYzLDEyICsyNjAsMTAgQEAgYm9vbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dFF1YXJ0egogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEtSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50UXVhcnR6OjpyZW5kZXJQYXRoKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0
LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAor
dm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6cmVuZGVyUGF0aChjb25z
dCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCogc2VydmVyLCBHcmFwaGljc0NvbnRleHQq
IHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRU
eXBlIHR5cGUpIGNvbnN0CiB7ICAgIAotICAgIEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqIHF1YXJ0
ekRldmljZSA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdE
ZXZpY2UoKSk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBxdWFydHpEZXZpY2UtPmN1cnJl
bnRDR0NvbnRleHQoKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHJlbmRlcmluZ0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHBh
dGgtPnN0eWxlKCk7Ci0gICAgQVNTRVJUKGNvbnRleHQgIT0gTlVMTCk7CiAgICAgCiAgICAgQ0dS
ZWN0IG9iamVjdEJCb3g7CiAgICAgaWYgKHNlcnZlci0+Ym91bmRpbmdCb3hNb2RlKCkpCkBAIC0y
OTEsMjAgKzI4NiwxOCBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6
CiAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIGdyYWRpZW50VHJhbnNmb3JtKTsKIH0K
IAotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6dGVhcmRvd24oY29u
c3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKnNlcnZlciwgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAordm9pZCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6dGVhcmRvd24oY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVy
R3JhZGllbnQqIHNlcnZlciwgR3JhcGhpY3NDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25z
dCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29u
c3QKIHsgCiAgICAgQ0dTaGFkaW5nUmVmIHNoYWRpbmcgPSBtX3NoYWRpbmdDYWNoZTsKICAgICBL
Q2FudmFzSW1hZ2UqIG1hc2tJbWFnZSA9IG1fbWFza0ltYWdlOwotICAgIEtSZW5kZXJpbmdEZXZp
Y2VRdWFydHoqIHF1YXJ0ekRldmljZSA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFy
dHoqPihyZW5kZXJpbmdEZXZpY2UoKSk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBxdWFy
dHpEZXZpY2UtPmN1cnJlbnRDR0NvbnRleHQoKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHJlbmRlcmluZ0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIFJlbmRlclN0eWxlKiBy
ZW5kZXJTdHlsZSA9IHJlbmRlck9iamVjdC0+c3R5bGUoKTsKLSAgICBBU1NFUlQoY29udGV4dCAh
PSBOVUxMKTsKICAgICAKICAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiByZW5kZXJT
dHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7CiAgICAgICAgIC8vIHdvcmthcm91bmQgZm9y
IGZpbGxpbmcgdGhlIGVudGlyZSBzY3JlZW4gd2l0aCB0aGUgc2hhZGluZyBpbiB0aGUgY2FzZSB0
aGF0IG5vIHRleHQgd2FzIGludGVyc2VjdGVkIHdpdGggdGhlIGNsaXAKICAgICAgICAgaWYgKCFz
ZXJ2ZXItPmlzUGFpbnRpbmdUZXh0KCkgfHwgKHJlbmRlck9iamVjdC0+d2lkdGgoKSA+IDAgJiYg
cmVuZGVyT2JqZWN0LT5oZWlnaHQoKSA+IDApKQogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1No
YWRpbmcoY29udGV4dCwgc2hhZGluZyk7Ci0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
Y29udGV4dCk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiByZW5kZXJTdHlsZS0+c3Zn
U3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKQEAgLTMyNSwxMCArMzE4LDEwIEBAIHZvaWQgS1JlbmRl
cmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoKICAgICAgICAgICAgIENHSW1hZ2VSZWxlYXNl
KGdyYXlzY2FsZUltYWdlKTsKICAgICAgICAgfQogICAgICAgICBDR0NvbnRleHREcmF3U2hhZGlu
Zyhjb250ZXh0LCBzaGFkaW5nKTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dC0+cmVzdG9yZSgpOwogICAgIH0KICAgICAK
LSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworICAgIHJlbmRlcmluZ0NvbnRl
eHQtPnJlc3RvcmUoKTsKIH0KIAogfQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5k
ZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaAkocmV2aXNpb24gMTY5ODIpCisrKyBr
Y2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbXBv
cnQgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbXBvcnQgIktSZW5kZXJpbmdQYWludFNlcnZlclNv
bGlkLmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCiAjaW1wb3J0
ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgpAQCAtNDQsMjEgKzQzLDIxIEBAIHB1
YmxpYzoKIGNsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXVhcnR6IDogcHVibGljIEtS
ZW5kZXJpbmdQYWludFNlcnZlclNvbGlkIHsKIHB1YmxpYzoKICAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZFF1YXJ0eigpIHt9OwotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25z
dCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0
KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHNldHVwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlck9i
amVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdGVhcmRv
d24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5
cGUpIGNvbnN0OwogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwogfTsKIAogY2xhc3Mg
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJQYXR0ZXJuIHsKIHB1YmxpYzoKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuUXVhcnR6KCkge30KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVy
T2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB0ZWFy
ZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFp
bnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBzZXR1cChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBL
Q1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25z
dDsKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBDR0NvbG9yU3BhY2VSZWYgbV9wYXR0ZXJuU3BhY2U7CiAgICAgbXV0YWJsZSBDR1BhdHRlcm5S
ZWYgbV9wYXR0ZXJuOwpAQCAtODAsMjAgKzc5LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0
ZVF1YXJ0ekdyYWRpZW50U3RvcHNDYWNoZShjb25zdCBWZWN0b3I8S0NHcmFkaWVudFN0b3A+JiBz
dG9wcyk7CiAgICAgdm9pZCB1cGRhdGVRdWFydHpHcmFkaWVudENhY2hlKGNvbnN0IEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIpOwogCi0gICAgdm9pZCBkcmF3KGNvbnN0IEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLSAgICBi
b29sIHNldHVwKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdl
dFR5cGUpIGNvbnN0OwotICAgIHZvaWQgdGVhcmRvd24oY29uc3QgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnQqIHNlcnZlciwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5k
ZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgdm9pZCByZW5kZXJQYXRo
KGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25z
dDsKKyAgICB2b2lkIGRyYXcoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNl
cnZlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRU
eXBlKSBjb25zdDsKKyAgICBib29sIHNldHVwKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50KiBzZXJ2ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtD
UGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2b2lkIHRlYXJkb3duKGNvbnN0IEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJl
bmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2b2lkIHJlbmRlclBh
dGgoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlciwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIAog
cHVibGljOgogICAgIC8vIGR1ZSB0byBjIGZ1bmN0aW9ucwotICAgIFF1YXJ0ekdyYWRpZW50U3Rv
cCAqbV9zdG9wc0NhY2hlOworICAgIFF1YXJ0ekdyYWRpZW50U3RvcCogbV9zdG9wc0NhY2hlOwog
ICAgIGludCAgICAgICAgICAgICAgICAgbV9zdG9wc0NvdW50OwogCiBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBpbnZhbGlkYXRlQ2FjaGVzKCk7CiAgICAgQ0dTaGFkaW5nUmVmIG1fc2hhZGluZ0NhY2hl
OwotICAgIG11dGFibGUgS0NhbnZhc0ltYWdlICptX21hc2tJbWFnZTsKKyAgICBtdXRhYmxlIEtD
YW52YXNJbWFnZSogbV9tYXNrSW1hZ2U7CiB9OwogCiBjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudFF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFk
aWVudFF1YXJ0eiwKQEAgLTEwMSwxMyArMTAwLDEzIEBAIGNsYXNzIEtSZW5kZXJpbmdQYWludFNl
cnZlckxpbmVhckdyYWRpZW4KIHB1YmxpYzoKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudFF1YXJ0eigpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0
CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAg
ICAgICB7IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6OjpkcmF3KHRoaXMsIGNv
bnRleHQsIHJlbmRlclBhdGgsIHR5cGUpOyB9Ci0gICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgc2V0
dXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OnNldHVwKHRoaXMsIGNvbnRleHQsIHJl
bmRlck9iamVjdCwgdHlwZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAgICAgICB7IEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50UXVhcnR6Ojp0ZWFyZG93bih0aGlzLCBjb250ZXh0LCByZW5kZXJP
YmplY3QsIHR5cGUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFp
bnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1Bh
aW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogICAgICAgICB7IEtSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50UXVhcnR6OjpyZW5kZXJQYXRoKHRoaXMsIGNvbnRleHQsIHJlbmRlclBhdGgsIHR5
cGUpOyB9CiB9OwogCkBAIC0xMTYsMTMgKzExNSwxMyBAQCBjbGFzcyBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVuCiBwdWJsaWM6CiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFk
aWFsR3JhZGllbnRRdWFydHooKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25z
dAorICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVuZGVyUGF0aCogcmVuZGVyUGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKICAg
ICAgICAgeyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6ZHJhdyh0aGlzLCBj
b250ZXh0LCByZW5kZXJQYXRoLCB0eXBlKTsgfQotICAgIHZpcnR1YWwgYm9vbCBzZXR1cChLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CisgICAgdmlydHVhbCBib29sIHNl
dHVwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6OjpzZXR1cCh0aGlzLCBjb250ZXh0LCBy
ZW5kZXJPYmplY3QsIHR5cGUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKKyAgICB2aXJ0dWFsIHZvaWQgdGVhcmRv
d24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKICAgICAgICAgeyBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6dGVhcmRvd24odGhpcywgY29udGV4dCwgcmVuZGVy
T2JqZWN0LCB0eXBlKTsgfQotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1Bh
aW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcmVuZGVyUGF0aCwgS0NQ
YWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKICAgICAgICAgeyBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudFF1YXJ0ejo6cmVuZGVyUGF0aCh0aGlzLCBjb250ZXh0LCByZW5kZXJQYXRoLCB0
eXBlKTsgfQogfTsKIApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWlu
dFNlcnZlclF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1Jl
bmRlcmluZ1BhaW50U2VydmVyUXVhcnR6Lm1tCShyZXZpc2lvbiAxNjk4MikKKysrIGtjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHoubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDEzICszMSwxMiBAQAogI2ltcG9ydCAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXVh
cnR6LmgiCiAjaW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCiAjaW1wb3J0ICJLQ2FudmFzUmVzb3Vy
Y2VzUXVhcnR6LmgiCi0jaW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAKKyNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgi
CiAjaW1wb3J0ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKICNpbXBvcnQgIktSZW5kZXJpbmdG
aWxsUGFpbnRlci5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKLSNpbXBv
cnQgIktSZW5kZXJpbmdEZXZpY2UuaCIKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogCkBAIC03MCw3
ICs2OSw3IEBAIHZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6SGVscGVyOjoKICAgICAg
ICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKIH0gICAgCiAKLXZvaWQgS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRRdWFydHo6OmRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRlcmlu
Z0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUp
IGNvbnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXVhcnR6OjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQ
YWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBpZiAoIXNldHVwKHJlbmRlcmluZ0Nv
bnRleHQsIHBhdGgsIHR5cGUpKQogICAgICAgICByZXR1cm47CkBAIC03OCwxMyArNzcsMTIgQEAg
dm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0ejo6ZAogICAgIHRlYXJkb3duKHJl
bmRlcmluZ0NvbnRleHQsIHBhdGgsIHR5cGUpOwogfQogCi1ib29sIEtSZW5kZXJpbmdQYWludFNl
cnZlclNvbGlkUXVhcnR6OjpzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVuZGVyaW5n
Q29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJnZXRU
eXBlIHR5cGUpIGNvbnN0Citib29sIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXVhcnR6Ojpz
ZXR1cChHcmFwaGljc0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewotICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihyZW5kZXJpbmdDb250ZXh0KTsKLSAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOworICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpOwog
Ci0gICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgcmVuZGVyU3R5bGUtPm9wYWNpdHkoKSk7
CisgICAgcmVuZGVyaW5nQ29udGV4dC0+c2V0QWxwaGEocmVuZGVyU3R5bGUtPm9wYWNpdHkoKSk7
CiAgICAgCiAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0JDb2xvclNwYWNlID0g
Q0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7IC8vIFRoaXMgc2hvdWxkIGJlIHNoYXJlZCBm
cm9tIEdyYXBoaWNzQ29udGV4dCwgb3Igc29tZSBvdGhlciBjZW50cmFsIGxvY2F0aW9uCiAKQEAg
LTExOCwxOCArMTE2LDE3IEBAIGJvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6
OnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xp
ZFF1YXJ0ejo6cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVuZGVyaW5nQ29u
dGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcmVuZGVyUGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlw
ZSkgY29uc3QKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OnJlbmRlclBh
dGgoR3JhcGhpY3NDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBy
ZW5kZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIFJlbmRlclN0
eWxlKiByZW5kZXJTdHlsZSA9IHJlbmRlclBhdGgtPnN0eWxlKCk7Ci0gICAgS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRRdWFydHoqIHF1YXJ0ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dFF1YXJ0eio+KHJlbmRlcmluZ0NvbnRleHQpOwotICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcXVhcnR6Q29udGV4dC0+Y2dDb250ZXh0KCk7ICAgIAorICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7ICAgIAog
ICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgp
LT5oYXNGaWxsKCkpCiAgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ekhlbHBlcjo6
ZmlsbFBhdGgoY29udGV4dCwgcmVuZGVyUGF0aCk7CiAgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9f
U1RST0tFKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpCiAgICAgICAg
IEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ekhlbHBlcjo6c3Ryb2tlUGF0aChjb250ZXh0LCBy
ZW5kZXJQYXRoKTsKIH0KIAotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0ejo6
dGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25z
dAordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0ejo6dGVhcmRvd24oR3JhcGhp
Y3NDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKIH0KIApAQCAtMTM5LDcgKzEz
Niw3IEBAIHZvaWQgcGF0dGVybkNhbGxiYWNrKHZvaWQgKmluZm8sIENHQ29udGUKICAgICBDR0Nv
bnRleHREcmF3TGF5ZXJBdFBvaW50KGNvbnRleHQsIENHUG9pbnRaZXJvLCBsYXllcik7CiB9CiAK
LXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF1YXJ0ejo6ZHJhdyhLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwg
S0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVy
UGF0dGVyblF1YXJ0ejo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNv
bnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAg
ICAgaWYgKCFzZXR1cChyZW5kZXJpbmdDb250ZXh0LCBwYXRoLCB0eXBlKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTQ3LDE1ICsxNDQsMTQgQEAgdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuUXVhcnR6OgogICAgIHRlYXJkb3duKHJlbmRlcmluZ0NvbnRleHQsIHBhdGgsIHR5cGUpOwog
fQogCi1ib29sIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6OnNldHVwKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK2Jvb2wgS1JlbmRl
cmluZ1BhaW50U2VydmVyUGF0dGVyblF1YXJ0ejo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiByZW5k
ZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgS0NQYWludFRh
cmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBpZihsaXN0ZW5lcigpKSAvLyB0aGlzIHNlZW1z
IGxpa2UgYmFkIGRlc2lnbiB0byBtZSwgc2hvdWxkIGJlIGluIGEgY29tbW9uIGJhc2VjbGFzcy4g
LS0gZWNzIDgvNi8wNQogICAgICAgICBsaXN0ZW5lcigpLT5yZXNvdXJjZU5vdGlmaWNhdGlvbigp
OwogCiAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgp
OwogCi0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0ekNvbnRleHQgPSBz
dGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KHJlbmRlcmluZ0NvbnRl
eHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcXVhcnR6Q29udGV4dC0+Y2dDb250ZXh0
KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKIAogICAgIEtDYW52YXNJbWFnZSogY2VsbCA9IHRpbGUoKTsKICAgICBpZiAo
IWNlbGwpCkBAIC0xODYsNyArMTgyLDcgQEAgYm9vbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuUXVhcnR6OgogICAgICAgICB0cnVlLCAvLyBoYXMgY29sb3IKICAgICAgICAgJmNhbGxiYWNr
cyk7CiAKLSAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCByZW5kZXJTdHlsZS0+b3BhY2l0
eSgpKTsgLy8gb3IgZG8gSSBzZXQgdGhlIGFscGhhIGFib3ZlPworICAgIHJlbmRlcmluZ0NvbnRl
eHQtPnNldEFscGhhKHJlbmRlclN0eWxlLT5vcGFjaXR5KCkpOwogCiAgICAgbV9wYXR0ZXJuU3Bh
Y2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKE5VTEwpOwogCkBAIC0yMTIsMTIgKzIwOCwx
MSBAQCBib29sIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF1YXJ0ejo6cmVu
ZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3Qg
UmVuZGVyUGF0aCogcmVuZGVyUGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3Zv
aWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF1YXJ0ejo6cmVuZGVyUGF0aChHcmFwaGlj
c0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgs
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHJlbmRl
clN0eWxlID0gcmVuZGVyUGF0aC0+c3R5bGUoKTsKIAotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdWFydHoqPihyZW5kZXJpbmdDb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcmVuZGVyaW5nQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAoKHR5cGUg
JiBBUFBMWV9UT19GSUxMKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQog
ICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHpIZWxwZXI6OmZpbGxQYXRoKGNvbnRl
eHQsIHJlbmRlclBhdGgpOwpAQCAtMjI2LDEwICsyMjEsOSBAQCB2b2lkIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm5RdWFydHo6CiAgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0
ekhlbHBlcjo6c3Ryb2tlUGF0aChjb250ZXh0LCByZW5kZXJQYXRoKTsKIH0KIAotdm9pZCBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6Ojp0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIEtSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm5RdWFydHo6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dCogcmVuZGVyaW5nQ29u
dGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0
ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KHJl
bmRlcmluZ0NvbnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcXVhcnR6Q29udGV4
dC0+Y2dDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSByZW5kZXJpbmdDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR1BhdHRlcm5SZWxlYXNlKG1fcGF0dGVybik7
CiAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShtX3BhdHRlcm5TcGFjZSk7CiAgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKSW5kZXg6IGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHls
ZS5jcHAJKHJldmlzaW9uIDE2OTgyKQorKysga3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ1NTVmFs
dWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVy
aW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiS1Jl
bmRlcmluZ0ZpbGxQYWludGVyLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnQuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oIgpAQCAtNDQs
NyArNDMsNyBAQCBzdGF0aWMgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQqIHNoYXJlCiB7CiAg
ICAgc3RhdGljIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkKiBfc2hhcmVkU29saWRQYWludFNl
cnZlciA9IDA7CiAgICAgaWYgKCFfc2hhcmVkU29saWRQYWludFNlcnZlcikKLSAgICAgICAgX3No
YXJlZFNvbGlkUGFpbnRTZXJ2ZXIgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJT
b2xpZCo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihQU19TT0xJRCkpOwor
ICAgICAgICBfc2hhcmVkU29saWRQYWludFNlcnZlciA9IG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJTb2xpZDsKICAgICByZXR1cm4gX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXI7CiB9CiAKSW5kZXg6
IGtzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FF
bGVtZW50LmNwcAkocmV2aXNpb24gMTY5ODIpCisrKyBrc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJjc3NoZWxwZXIuaCIKLSNpbmNsdWRl
IDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNl
L0tSZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAkocmV2
aXNpb24gMTY5ODIpCisrKyBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgot
I2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTc4LDcgKzc3LDcgQEAgS0NhbnZhc0NsaXBwZXIgKlNWR0Ns
aXBQYXRoRWxlbWVudDo6Y2FudgogICAgIGlmICghdmlldygpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAoIW1fY2xpcHBlcikKLSAgICAgICAgbV9jbGlwcGVyID0gc3RhdGljX2Nhc3Q8S0Nh
bnZhc0NsaXBwZXIgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJTX0NMSVBQ
RVIpKTsKKyAgICAgICAgbV9jbGlwcGVyID0gbmV3IEtDYW52YXNDbGlwcGVyOwogICAgIGVsc2UK
ICAgICAgICAgbV9jbGlwcGVyLT5yZXNldENsaXBEYXRhKCk7CiAKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTY5ODIpCisrKyBrc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaWZkZWYgU1ZHX1NVUFBP
UlQKICNpbmNsdWRlICJTVkdGRUJsZW5kRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmlu
Z0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC03MCw3ICs2OSw3IEBAIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmkKIEtDYW52YXNGRUJsZW5kKiBTVkdGRUJsZW5kRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29u
c3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9
IHN0YXRpY19jYXN0PEtDYW52YXNGRUJsZW5kKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZp
bHRlckVmZmVjdChGRV9CTEVORCkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19j
YXN0PEtDYW52YXNGRUJsZW5kKj4oS0NhbnZhc0ZpbHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZF
X0JMRU5EKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldEJsZW5kTW9kZSgoS0NCbGVuZE1vZGVUeXBlKShtb2RlKCkt
MSkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
Njk4MikKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgi
CiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRl
ICJTVkdOdW1iZXJMaXN0LmgiCkBAIC03Miw3ICs3MSw3IEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OnBhcnNlTWFwcGUKIEtDYW52YXNGRUNvbG9yTWF0cml4KiBTVkdGRUNvbG9yTWF0
cml4RWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZm
ZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUNvbG9y
TWF0cml4Kj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT0xPUl9N
QVRSSVgpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVD
b2xvck1hdHJpeCo+KEtDYW52YXNGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT0xPUl9N
QVRSSVgpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE2OTgyKQorKysga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkF0
dHIuaCIKIAogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmlu
Z0RldmljZS5oIgogCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIu
aCIKQEAgLTYzLDcgKzYyLDcgQEAgdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
cGFycwogS0NhbnZhc0ZFQ29tcG9uZW50VHJhbnNmZXIgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3Qp
Ci0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFQ29tcG9uZW50
VHJhbnNmZXIgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT01Q
T05FTlRfVFJBTlNGRVIpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxL
Q2FudmFzRkVDb21wb25lbnRUcmFuc2ZlciAqPihLQ2FudmFzRmlsdGVyOjpjcmVhdGVGaWx0ZXJF
ZmZlY3QoRkVfQ09NUE9ORU5UX1RSQU5TRkVSKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmNwcAkocmV2aXNpb24gMTY5ODIpCisrKyBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNiBAQAogI2lmZGVmIFNWR19TVVBQT1JU
CiAjaW5jbHVkZSAiU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJLUmVuZGVy
aW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKIApAQCAtOTEsNyArOTAsNyBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VN
YXBwZWRBCiBLQ2FudmFzRkVDb21wb3NpdGUgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6ZmlsdGVy
RWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2Zp
bHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUNvbXBvc2l0ZSAqPihyZW5kZXJpbmdE
ZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0NPTVBPU0lURSkpOworICAgICAgICBtX2Zp
bHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUNvbXBvc2l0ZSAqPihLQ2FudmFzRmls
dGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfQ09NUE9TSVRFKSk7CiAgICAgaWYgKCFtX2ZpbHRl
ckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldE9wZXJh
dGlvbigoS0NDb21wb3NpdGVPcGVyYXRpb25UeXBlKShfb3BlcmF0b3IoKSAtIDEpKTsKSW5kZXg6
IGtzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk4
MikKKysrIGtzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogCiAjaW5jbHVkZSA8
a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5k
ZXJpbmdEZXZpY2UuaD4KIAogI2luY2x1ZGUgImtzdmcuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgpAQCAtODIsNyArODEsNyBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6cGFy
c2VNCiBLQ2FudmFzRmlsdGVyRWZmZWN0ICpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmZp
bHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkgCi0gICAgICAg
IG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nICo+
KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElGRlVTRV9MSUdIVElO
RykpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURpZmZ1
c2VMaWdodGluZyAqPihLQ2FudmFzRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElGRlVT
RV9MSUdIVElORykpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihpbjEoKSk7CiAgICAgc2V0
U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0RGlmZnVzZUNvbnN0YW50KChkaWZmdXNlQ29uc3RhbnQoKSkpOwpJbmRleDoga3N2ZzIvc3Zn
L1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2OTgyKQorKysga3N2
ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDcgKzIyLDYgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2lu
Y2x1ZGUgIlNWR0hlbHBlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04MSw3ICs4MCw3
IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpwYXJzZU0KIEtDYW52YXNGRURp
c3BsYWNlbWVudE1hcCogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZlY3Qo
KSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZm
ZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwICo+KHJlbmRlcmluZ0Rl
dmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElTUExBQ0VNRU5UX01BUCkpOworICAgICAg
ICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCAq
PihLQ2FudmFzRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElTUExBQ0VNRU5UX01BUCkp
OwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUpKHhD
aGFubmVsU2VsZWN0b3IoKSkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjk4MikKKysrIGtzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKLSNpbmNsdWRlICJL
UmVuZGVyaW5nRGV2aWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTksNyArNTgs
NyBAQCB2b2lkIFNWR0ZFRmxvb2RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiBLQ2FudmFzRkVG
bG9vZCAqU1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2ZpbHRlckVmZmVjdCkKLSAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxL
Q2FudmFzRkVGbG9vZCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZF
X0ZMT09EKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZF
Rmxvb2QgKj4oS0NhbnZhc0ZpbHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0ZMT09EKSk7CiAg
ICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9maWx0ZXJF
ZmZlY3QtPnNldEluKGluMSgpKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNjk4MikKKysrIGtzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaWZkZWYgU1ZHX1NV
UFBPUlQKICNpbmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCIKIAotI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFk
aWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBA
IC03MSw3ICs3MCw3IEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwYXJzZU1hcHAK
IEtDYW52YXNGRUdhdXNzaWFuQmx1ciogU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpmaWx0ZXJF
ZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmls
dGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFR2F1c3NpYW5CbHVyKj4ocmVuZGVyaW5n
RGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9HQVVTU0lBTl9CTFVSKSk7CisgICAgICAg
IG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFR2F1c3NpYW5CbHVyKj4oS0Nh
bnZhc0ZpbHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0dBVVNTSUFOX0JMVVIpKTsKICAgICBp
ZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0SW4oaW4xKCkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
Njk4MikKKysrIGtzdmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIktDYW52YXNJbWFnZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdE
ZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKICNpbmNsdWRlICJT
VkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKQEAgLTkwLDcgKzg5LDcgQEAgdm9p
ZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQwogS0NhbnZhc0ZFSW1hZ2UgKlNW
R0ZFSW1hZ2VFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0
ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZF
SW1hZ2UgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9JTUFHRSkp
OworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUltYWdlICo+
KEtDYW52YXNGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9JTUFHRSkpOwogICAgIGlmICgh
bV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIHNldFN0YW5kYXJkQXR0cmli
dXRlcyhtX2ZpbHRlckVmZmVjdCk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE2OTgyKQorKysga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNiBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZH
RkVNZXJnZUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNs
dWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKIApA
QCAtNDQsNyArNDMsNyBAQCBTVkdGRU1lcmdlRWxlbWVudDo6flNWR0ZFTWVyZ2VFbGVtZW50KCkK
IEtDYW52YXNGRU1lcmdlKiBTVkdGRU1lcmdlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QK
IHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0
YXRpY19jYXN0PEtDYW52YXNGRU1lcmdlKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRl
ckVmZmVjdChGRV9NRVJHRSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0
PEtDYW52YXNGRU1lcmdlKj4oS0NhbnZhc0ZpbHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX01F
UkdFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRU9mZnNl
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk4MikKKysrIGtzdmcyL3N2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQXR0
ci5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKIAog
I2luY2x1ZGUgIlNWR0hlbHBlci5oIgpAQCAtNjcsNyArNjYsNyBAQCB2b2lkIFNWR0ZFT2Zmc2V0
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyCiBLQ2FudmFzRkVPZmZzZXQgKlNWR0ZFT2Zmc2V0RWxl
bWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQot
ICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRU9mZnNldCAqPihy
ZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX09GRlNFVCkpOworICAgICAg
ICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRU9mZnNldCAqPihLQ2FudmFz
RmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfT0ZGU0VUKSk7CiAgICAgaWYgKCFtX2ZpbHRl
ckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGlu
MSgpKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE2OTgyKQorKysga3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAjaWZkZWYgU1ZHX1NVUFBP
UlQKICNpbmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgiCiAKLSNpbmNsdWRl
ICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKICNpbmNsdWRlICJT
VkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtODMsNyArODIsNyBAQCB2b2lk
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNlCiBLQ2FudmFzRkVTcGVjdWxhckxp
Z2h0aW5nKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25z
dAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIAotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9
IHN0YXRpY19jYXN0PEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcqPihyZW5kZXJpbmdEZXZpY2Uo
KS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1NQRUNVTEFSX0xJR0hUSU5HKSk7CisgICAgICAgIG1f
ZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyo+KEtD
YW52YXNGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9TUEVDVUxBUl9MSUdIVElORykpOwog
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihpbjEoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJDb25z
dGFudCgoc3BlY3VsYXJDb25zdGFudCgpKSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjk4MikKKysrIGtzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKIAogI2luY2x1ZGUg
PGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+CiAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdS
ZW5kZXJTdHlsZS5oIgpAQCAtNTgsNyArNTcsNyBAQCB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmliCiBLQ2FudmFzRkVUaWxlICpTVkdGRVRpbGVFbGVtZW50OjpmaWx0ZXJF
ZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmls
dGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFVGlsZSAqPihyZW5kZXJpbmdEZXZpY2Uo
KS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1RJTEUpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3Qg
PSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVUaWxlICo+KEtDYW52YXNGaWx0ZXI6OmNyZWF0ZUZpbHRl
ckVmZmVjdChGRV9USUxFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGluMSgpKTsKSW5kZXg6IGtzdmcyL3N2
Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
RkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2OTgyKQorKysga3N2ZzIvc3ZnL1NW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBA
CiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmgi
CiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtODMsNyArODIsNyBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkCiBLQ2FudmFzRkVUdXJidWxlbmNlKiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpmaWx0ZXJF
ZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmls
dGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFVHVyYnVsZW5jZSo+KHJlbmRlcmluZ0Rl
dmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfVFVSQlVMRU5DRSkpOworICAgICAgICBtX2Zp
bHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRVR1cmJ1bGVuY2UqPihLQ2FudmFzRmls
dGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfVFVSQlVMRU5DRSkpOwogICAgIGlmICghbV9maWx0
ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIApJbmRleDoga3N2ZzIvc3ZnL1NWR0Zp
bHRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50
LmNwcAkocmV2aXNpb24gMTY5ODIpCisrKyBrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVt
ZW50LmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5o
IgogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCkBAIC0xMTYs
NyArMTE1LDcgQEAgS0NhbnZhc0ZpbHRlciogU1ZHRmlsdGVyRWxlbWVudDo6Y2FudmFzUgogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9maWx0ZXIpCi0gICAgICAgIG1fZmlsdGVyID0g
c3RhdGljX2Nhc3Q8S0NhbnZhc0ZpbHRlcio+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVSZXNv
dXJjZShSU19GSUxURVIpKTsKKyAgICAgICAgbV9maWx0ZXIgPSBuZXcgS0NhbnZhc0ZpbHRlcjsK
IAogICAgIGJvb2wgZmlsdGVyQkJveE1vZGUgPSBmaWx0ZXJVbml0cygpID09IFNWR1VuaXRUeXBl
czo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKICAgICBtX2ZpbHRlci0+c2V0Rmls
dGVyQm91bmRpbmdCb3hNb2RlKGZpbHRlckJCb3hNb2RlKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdH
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0dFbGVtZW50LmNwcAkocmV2
aXNpb24gMTY5ODIpCisrKyBrc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw4ICsyNCw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdHRWxl
bWVudC5oIgogCi0jaW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuaD4KLSNpbmNs
dWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CisjaW5jbHVkZSAiUmVuZGVy
U1ZHQ29udGFpbmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDoga3N2ZzIvc3Zn
L1NWR0dyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0dyYWRp
ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2OTgyKQorKysga3N2ZzIvc3ZnL1NWR0dyYWRpZW50
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJT
VkdUcmFuc2Zvcm1hYmxlLmgiCiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1
ZGUgIlNWR1VuaXRUeXBlcy5oIgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdE
ZXZpY2UuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJH
cmFkaWVudC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTExMiw4ICsxMTEsNyBA
QCB2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6bm90aWZ5QXR0cmlidXRlCiBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudCAqU1ZHR3JhZGllbnRFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCiB7
CiAgICAgaWYgKCFtX3Jlc291cmNlKSB7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAq
dGVtcCA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihncmFkaWVudFR5cGUo
KSk7Ci0gICAgICAgIG1fcmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudCAqPih0ZW1wKTsKKyAgICAgICAgbV9yZXNvdXJjZSA9IChncmFkaWVudFR5cGUo
KSA9PSBQU19SQURJQUxfR1JBRElFTlQpID8gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50IDogbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50OwogICAg
ICAgICBtX3Jlc291cmNlLT5zZXRMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgYnVpbGRHcmFkaWVu
dChtX3Jlc291cmNlKTsKICAgICB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTY5ODIpCisrKyBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIlNW
R0xpbmVhckdyYWRpZW50RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIK
IAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR01hcmtl
ckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk4MikKKysrIGtzdmcyL3N2Zy9TVkdNYXJrZXJFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIlNWR01h
cmtlckVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHIuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgpAQCAtMTE3LDcgKzExNiw3IEBA
IHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c2V0T3JpZW50VG9BbmdsZSgKIEtDYW52YXNNYXJrZXIg
KlNWR01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKIHsKICAgICBpZighbV9tYXJrZXIp
Ci0gICAgICAgIG1fbWFya2VyID0gc3RhdGljX2Nhc3Q8S0NhbnZhc01hcmtlcio+KHJlbmRlcmlu
Z0RldmljZSgpLT5jcmVhdGVSZXNvdXJjZShSU19NQVJLRVIpKTsKKyAgICAgICAgbV9tYXJrZXIg
PSBuZXcgS0NhbnZhc01hcmtlcjsKICAgICAKICAgICBtX21hcmtlci0+c2V0TWFya2VyKHN0YXRp
Y19jYXN0PFJlbmRlclNWR0NvbnRhaW5lcio+KHJlbmRlcmVyKCkpKTsKIApJbmRleDoga3N2ZzIv
c3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTWFza0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk4MikKKysrIGtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJLQ2Fu
dmFzSW1hZ2UuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZH
TGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
QEAgLTExMSw3ICsxMTAsNyBAQCBLQ2FudmFzSW1hZ2UgKlNWR01hc2tFbGVtZW50OjpkcmF3TWFz
a2VyCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgS0NhbnZhc0ltYWdlICptYXNrSW1hZ2UgPSBzdGF0aWNfY2FzdDxLQ2FudmFz
SW1hZ2UgKj4oZGV2aWNlLT5jcmVhdGVSZXNvdXJjZShSU19JTUFHRSkpOworICAgIEtDYW52YXNJ
bWFnZSogbWFza0ltYWdlID0gbmV3IEtDYW52YXNJbWFnZTsKIAogICAgIEludFNpemUgc2l6ZSA9
IEludFNpemUobHJvdW5kZih3aWR0aCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+dmFs
dWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5pdChzaXplKTsKQEAgLTE0MywxMSArMTQyLDExIEBA
IFJlbmRlck9iamVjdCogU1ZHTWFza0VsZW1lbnQ6OmNyZWF0ZVJlbmQKIEtDYW52YXNNYXNrZXIg
KlNWR01hc2tFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCiB7CiAgICAgaWYgKCFtX21hc2tlcikg
ewotICAgICAgICBtX21hc2tlciA9IHN0YXRpY19jYXN0PEtDYW52YXNNYXNrZXIgKj4ocmVuZGVy
aW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJTX01BU0tFUikpOworICAgICAgICBtX21hc2tl
ciA9IG5ldyBLQ2FudmFzTWFza2VyOwogICAgICAgICBtX2RpcnR5ID0gdHJ1ZTsKICAgICB9CiAg
ICAgaWYgKG1fZGlydHkpIHsKLSAgICAgICAgS0NhbnZhc0ltYWdlICpuZXdNYXNrSW1hZ2UgPSBk
cmF3TWFza2VyQ29udGVudCgpOworICAgICAgICBLQ2FudmFzSW1hZ2UqIG5ld01hc2tJbWFnZSA9
IGRyYXdNYXNrZXJDb250ZW50KCk7CiAgICAgICAgIG1fbWFza2VyLT5zZXRNYXNrKG5ld01hc2tJ
bWFnZSk7CiAgICAgICAgIG1fZGlydHkgPSAobmV3TWFza0ltYWdlICE9IDApOwogICAgIH0KSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIv
c3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMTY5ODIpCisrKyBrc3ZnMi9zdmcv
U1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ltYWdlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0Rldmlj
ZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uaCIKICNpbmNsdWRl
ICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCkBAIC0xODcsNyAr
MTg2LDcgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZQogICAgIH0K
ICAgICAKICAgICBkZWxldGUgbV90aWxlOwotICAgIG1fdGlsZSA9IHN0YXRpY19jYXN0PEtDYW52
YXNJbWFnZSo+KGRldmljZS0+Y3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsKKyAgICBtX3RpbGUg
PSBuZXcgS0NhbnZhc0ltYWdlOwogICAgIG1fdGlsZS0+aW5pdChuZXdTaXplKTsKIAogICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZv
ckltYWdlKG1fdGlsZSk7CkBAIC0xOTksOCArMTk4LDcgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVu
dDo6ZHJhd1BhdHRlcm5Db250ZQogCiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4
dChwYXR0ZXJuQ29udGV4dC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOwogCi0gICAgZm9yKE5v
ZGUgKm4gPSB0YXJnZXQtPmZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmco
KSkKLSAgICB7CisgICAgZm9yIChOb2RlICpuID0gdGFyZ2V0LT5maXJzdENoaWxkKCk7IG4gIT0g
MDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgU1ZHRWxlbWVudCogZWxlbSA9IHN2
Z19keW5hbWljX2Nhc3Qobik7CiAgICAgICAgIGlmICghZWxlbSB8fCAhZWxlbS0+aXNTdHlsZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzM3LDkgKzMzNSw4IEBAIFJlbmRlck9iamVj
dCogU1ZHUGF0dGVybkVsZW1lbnQ6OmNyZWF0ZVIKIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRl
cm4gKlNWR1BhdHRlcm5FbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCiB7CiAgICAgaWYgKCFtX3Bh
aW50U2VydmVyKSB7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlciA9IHJl
bmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihLQ1BhaW50U2VydmVyVHlwZShQU19Q
QVRURVJOKSk7Ci0gICAgICAgIG1fcGFpbnRTZXJ2ZXIgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuICo+KHBzZXJ2ZXIpOwotICAgICAgICBtX3BhaW50U2VydmVyLT5z
ZXRMaXN0ZW5lcihjb25zdF9jYXN0PFNWR1BhdHRlcm5FbGVtZW50KiA+KHRoaXMpKTsKKyAgICAg
ICAgbV9wYWludFNlcnZlciA9IG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuOworICAg
ICAgICBtX3BhaW50U2VydmVyLT5zZXRMaXN0ZW5lcihjb25zdF9jYXN0PFNWR1BhdHRlcm5FbGVt
ZW50Kj4odGhpcykpOwogICAgIH0KICAgICByZXR1cm4gbV9wYWludFNlcnZlcjsKIH0KSW5kZXg6
IGtzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk4MikKKysr
IGtzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCi0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2Uv
S1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2OTgyKQorKysga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw3IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiU1ZHWm9vbUV2ZW50LmgiCiAjaW5jbHVkZSAia3N2Zy5oIgotI2luY2x1
ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZp
Y2UvS1JlbmRlcmluZ0RldmljZS5oPgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDoga3N2
ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdT
dHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTY5ODIpCisrKyBrc3ZnMi9zdmcvU1ZHU3R5bGVk
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJB
dHRyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgpJbmRleDog
a3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
U3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiAxNjk4MikKKysrIGtzdmcyL3N2Zy9TVkdTdHlsZWRF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDggKzIwLDggQEAKICAgICBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KICovCiAKLSNpZm5kZWYgS1NWR19TVkdTdHlsZWRFbGVtZW50SW1w
bF9ICi0jZGVmaW5lIEtTVkdfU1ZHU3R5bGVkRWxlbWVudEltcGxfSAorI2lmbmRlZiBTVkdTdHls
ZWRFbGVtZW50X0gKKyNkZWZpbmUgU1ZHU3R5bGVkRWxlbWVudF9ICiAjaWZkZWYgU1ZHX1NVUFBP
UlQKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgpAQCAtMzQsNyArMzQsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogICAgIGNs
YXNzIEtDYW52YXNSZXNvdXJjZTsKLSAgICBjbGFzcyBLUmVuZGVyaW5nRGV2aWNlOwogICAgIGNs
YXNzIFJlbmRlclBhdGg7CiAgICAgY2xhc3MgUmVuZGVyVmlldzsKIApAQCAtNzgsNiArNzcsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBTVkdfU1VQUE9SVAotI2VuZGlmIC8vIEtTVkdfU1ZHU3R5bGVkRWxlbWVudEltcGxfSAorI2Vu
ZGlmIC8vIFNWR1N0eWxlZEVsZW1lbnRfSAogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1N3
aXRjaEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk4MikKKysrIGtzdmcyL3N2Zy9TVkdTd2l0Y2hF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsNyBAQAogI2lmZGVmIFNWR19T
VVBQT1JUCiAjaW5jbHVkZSAiQXR0ci5oIgogCi0jaW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJTVkdD
b250YWluZXIuaD4KLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+
CisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgpJbmRleDoga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24g
MTY5ODIpCisrKyBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJTVkdTeW1ib2xFbGVtZW50LmgiCiAjaW5jbHVkZSAi
a3N2Zy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIktSZW5k
ZXJpbmdEZXZpY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBwbGF0Zm9ybS9H
cmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQu
aAkocmV2aXNpb24gMTY5ODIpCisrKyBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsMTAgKzY0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IFRleHRSdW47CiAgICAgY2xhc3MgVGV4dFN0eWxlOwogCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLSAg
ICBjbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dDsKLSNlbmRpZgotCiAgICAgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0IDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CkBAIC0xNjQsMTAgKzE2MCw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKIAotI2lmZGVmIFNWR19TVVBQT1JUCi0gICAgICAgIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBjcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7Ci0jZW5kaWYKLQog
I2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KEhEQyk7IC8vIEZJWE1F
OiBUbyBiZSByZW1vdmVkLgogICAgICAgICBIREMgZ2V0V2luZG93c0NvbnRleHQoKTsKSW5kZXg6
IHBsYXRmb3JtL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9y
bS9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDE2OTgyKQorKysgcGxhdGZvcm0v
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsNiBA
QAogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCi0jaWZk
ZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCi0jZW5k
aWYKLQogI2luY2x1ZGUgPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oPiAvLyBGSVhN
RTogVGVtcG9yYXJ5LgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNTI3LDEzICs1MjMsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgQ0dDb250ZXh0
RU9DbGlwKGNvbnRleHQpOwogfQogCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLUtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQo
KQotewotICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoocGxhdGZv
cm1Db250ZXh0KCkpOwotfQotI2VuZGlmCi0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11681</attachid>
            <date>2006-11-30 09:34:14 -0800</date>
            <delta_ts>2006-11-30 11:53:07 -0800</delta_ts>
            <desc>Initial complete patch for Cg &amp; Qt</desc>
            <filename>kill-kcanvas.diff</filename>
            <type>text/plain</type>
            <size>219058</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xOSw5ICsxOSw2IEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiAgICAk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZWRpdGluZwogICAgJHtDTUFLRV9DVVJSRU5UX0JJ
TkFSWV9ESVJ9L2h0bWwKICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9odG1sCi0gICAk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0va2NhbnZhcwotICAgJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L2tjYW52YXMvZGV2aWNlCi0gICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
a2NhbnZhcy9kZXZpY2UvcXQgCiAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0va3N2ZzIg
CiAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0va3N2ZzIvY3NzCiAgICAke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0va3N2ZzIvZXZlbnRzIApAQCAtNTM0LDEwICs1MzEsNiBAQCBzZXQg
KFNWR19TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNTVkdQb2ludC5jcHAKICAgICBiaW5kaW5n
cy9qcy9KU1NWR1JlY3QuY3BwCiAKLSAgICBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNl
LmNwcAotICAgIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHAKLSAgICBr
Y2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuY3BwCi0KICAgICBrc3ZnMi9jc3MvU1ZHQ1NT
UGFyc2VyLmNwcAogICAgIGtzdmcyL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAogICAgIGtz
dmcyL2Nzcy9TVkdSZW5kZXJTdHlsZS5jcHAKQEAgLTEwNzMsNiArMTA2Niw3IEBAIHNldChXZWJD
b3JlX1NSQ1MKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvZmlsdGVycy9TVkdGaWx0ZXJFZmZl
Y3QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2Uu
Y3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvUmVuZGVyUGF0aFF0LmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRR
dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
UXQuY3BwCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIxNCBAQAorMjAwNi0xMS0zMCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8
emltbWVybWFubkBrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpeGVzOiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDM4MworICAgICAKKyAgICAgICAgVGhpcyBpcyB0aGUgZmluYWwgcGF0Y2ggYWZ0ZXIgdGhl
IGxvbmcgImRpZSBrY2FudmFzIiBqb3VybmV5LgorCisgICAgICAgIEFsbCBvbGQga2NhbnZhcyBj
b2RlIGlzIGdvbmUgbm93LCBhbmQgcHJvcGVybHkgaW50ZWdyYXRlZCB3aXRoaW4KKyAgICAgICAg
V2ViQ29yZSAoc3R1ZmYgbGlrZSBHcmFwaGljc0NvbnRleHQgY2hhbmdlcyBldGMuKS4gSXQgc2hh
cmVzCisgICAgICAgIHRoZSBwbGF0Zm9ybS8gZGVzaWduIGNvbmNlcHQ6IG5vIHN1YmNsYXNzaW5n
LCBidXQgaW5zdGVhZAorICAgICAgICBpbXBsZW1lbnRpbmcgcGFydHMgb2YgdGhlIGNsYXNzZXMv
bWV0aG9kcyBwZXItcGxhdGZvcm0uCisKKyAgICAgICAgVGhpcyBjb21taXQgcmVtb3ZlcyB0aGUg
bGFzdCBwaWVjZXM6IEtSZW5kZXJpbmdEZXZpY2UgJiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dC4K
KyAgICAgICAgVGhpcyBsYXllciB3YXMganVzdCBvYnNvbGV0ZSwgZ2l2ZW4gdGhlIHBvd2VyZnVs
IEdyYXBoaWNzQ29udGV4dCBBUEkgd2UgaGF2ZQorICAgICAgICBzaW5jZSBxdWl0ZSBhIHdoaWxl
IG5vdy4gQWxsIHRoZSB1Z2x5IHB1c2hDb250ZXh0L3BvcENvbnRleHQgc3R1ZmYgaXMgZ29uZSBu
b3cuCisKKyAgICAgICAgTGF5b3V0VGVzdHMgYWZmZWN0ZWQ6IHN2Zy9XM0MtU1ZHLTEuMS9wc2Vy
dmVycy1ncmFkLTExLWIuc3ZnCisgICAgICAgIFJhZGlhbCBncmFkaWVudHMgYXMgZmlsbCBjb2xv
ciBmb3IgdGV4dHMsIHdvcmsgYWdhaW4hCisgICAgICAgIFRob3VnaCAiR3JhZGllbnQgb24gdGV4
dCBzdHJva2UiIHJlbWFpbnMgYnJva2VuLiBGdW5ueSB0aGluZzoKKyAgICAgICAgV2l0aCB0aGlz
IHBhdGNoLCBpZiB5b3UgInNlbGVjdCIgdGhlIHRleHQgdXNpbmcgdGhlIG1vdXNlLCBhcworICAg
ICAgICBzb29uIGFzIHRoZSBzZWxlY3Rpb24gcmVjdGFuZ2xlIGlzIGRyYXduLCB5b3Ugc2VlIHRo
ZSBjb3JyZWN0CisgICAgICAgIGdyYWRpZW50IG9uIHN0cm9rZSByZW5kZXJpbmcgLSBhdCBsZWFz
dCBhIGhpbnQgd2hlcmUgaXQgYnJlYWtzIQorCisgICAgICAgIEFsbCBzdmcgbGF5b3V0IHRlc3Rz
IGhhdmUgc3VidGxlIHRleHQgcmVuZGVyaW5nIGNoYW5nZXMgLSB3aXRoIGFuZCB3aXRob3V0IHRo
aXMKKyAgICAgICAgcGF0Y2gsIGl0IHNlZW1zIGl0IHdhcyBmb3Jnb3R0b24gdG8gdXBkYXRlIHN2
ZyBwaXhlbCB0ZXN0IGJhc2VsaW5lLCBhIHdoaWxlIGFnby4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg6IFJlbW92ZWQuCisgICAg
ICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuY3BwOiBNb3ZlZCB0
byBwbGF0Zm9ybS9ncmFwaGljcy9xdAorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9L
Q2FudmFzSXRlbVF1YXJ0ei5jcHA6IE1vdmVkIHRvIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9S
ZW5kZXJQYXRoQ2cuY3BwCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJp
bmdEZXZpY2VRdWFydHouY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lmg6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQuY3BwOiBNb3ZlZCB0byBwbGF0Zm9ybS9ncmFw
aGljcy9zdmcvY2cvQ2dTdXBwb3J0LmNwcAorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9RdWFydHpTdXBwb3J0Lmg6IE1vdmVkIHRvIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9DZ1N1
cHBvcnQuaAorICAgICAgICAqIGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIpOgorICAgICAgICAqIGtz
dmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0FFbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50OjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojp1cGRhdGVMaWdodHMp
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZl
Y3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpTVkdGRURpc3RhbnRM
aWdodEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
OjpsaWdodFNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpTVkdGRUZsb29kRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVj
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFRnVuY0FFbGVtZW50LmNwcDoKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHRkVGdW5jQkVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdGRUZ1bmNHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUZ1bmNHRWxlbWVu
dDo6U1ZHRkVGdW5jR0VsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUZ1bmNSRWxl
bWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVm
ZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpTVkdGRUltYWdlRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VFbGVt
ZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVs
ZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpTVkdGRU9mZnNldEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6OmZpbHRlckVmZmVj
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OlNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQ6OnVwZGF0ZUxpZ2h0cyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZF
U3BvdExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwb3RMaWdodEVs
ZW1lbnQ6OlNWR0ZFU3BvdExpZ2h0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNw
b3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpTVkdG
RVRpbGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmZp
bHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6ZmlsdGVyRWZm
ZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJFbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdH
cmFkaWVudEVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTWFya2Vy
RWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6ZHJhd01hc2tlckNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0dGVybkVsZW1lbnQ6OmRyYXdQYXR0ZXJuQ29udGVudEludG9UaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHls
ZWRFbGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
OiBNb3ZlZCB0byBPYmotQysrLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdp
blBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRleHRGb3JJbWFnZSk6IFRoaXMgbWV0aG9kIG5lZWRzIE9iakMu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyR3JhZGllbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVy
R3JhZGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQ
YWludFNlcnZlclBhdHRlcm4uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZH
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3N2Zy9TVkdQYWludFNlcnZlclNvbGlkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL1NWR1Jlc291cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZH
UmVzb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VD
bGlwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlRmls
dGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlTWFza2Vy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1JlbmRlclBhdGhDZy5jcHA6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZl
ckNnLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjpkcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjp0ZWFyZG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYWludFNlcnZlcjo6cmVuZGVyUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3ZnL2NnL1NWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdmcvY2cvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWlu
dFNlcnZlclBhdHRlcm46OnRlYXJkb3duKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
dmcvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
aW50U2VydmVyU29saWQ6OnNldHVwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcv
Y2cvU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVzb3Vy
Y2VDbGlwcGVyOjphcHBseUNsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9j
Zy9TVkdSZXNvdXJjZUZpbHRlckNnLm1tOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVzb3VyY2VG
aWx0ZXI6OlNWR1Jlc291cmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNl
RmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnByZXBhcmVGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cv
U1ZHUmVzb3VyY2VNYXNrZXJDZy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlTWFz
a2VyOjphcHBseU1hc2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9maWx0ZXJz
L2NnL1NWR0ZFSW1hZ2VDZy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQv
U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ6OnNldHVwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGFpbnRTZXJ2ZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXI6
OnRlYXJkb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjpyZW5kZXJQYXRo
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRp
YWxHcmFkaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VDbGlwcGVyUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXApOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdSZXNvdXJjZUZpbHRlclF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmVzb3VyY2VGaWx0ZXI6OnByZXBhcmVGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VNYXNrZXJRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlNYXNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmN1cnJlbnRQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZXh0Rm9ySW1hZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmplY3Q6OnBhaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJQYXRoOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHSW1hZ2U6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1h
Z2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0lubGluZTo6UmVuZGVyU1ZHSW5saW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0lubGluZTo6Y3JlYXRlSW5saW5lQm94KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdJbmxpbmVUZXh0OjpSZW5kZXJTVkdJbmxpbmVUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyU1ZHVFNwYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVFNwYW46OlJl
bmRlclNWR1RTcGFuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1NWR0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTVkdJbmxp
bmVGbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZVN0eWxlKToKKwogMjAwNi0xMS0yOSAgQW5kZXJzIENhcmxz
c29uICA8YWNhcmxzc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCcmFkeS4K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNzkzOCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xODM2LDEzICsxODM2LDYgQEAKIAkJQTg3MURGRTMwQTE1Mzc2QjAw
QjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODcxREZERjBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFj
ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
ODcxREZFNDBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcxREZFMDBBMTUzNzZCMDBCMTJBNjgg
LyogUmVuZGVyV2lkZ2V0LmggKi87IH07CiAJCUE4NzFERkU1MEExNTM3NkIwMEIxMkE2OCAvKiBS
ZW5kZXJXaWRnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTg3MURGRTEwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlcldpZGdldC5jcHAgKi87IH07
Ci0JCUE4OEFEMzg2MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjU0MDg5NzAx
RjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCAqLzsgfTsKLQkJQTg4QUQzODcwOTUy
NDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjU1MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVu
ZGVyaW5nRGV2aWNlLmggKi87IH07Ci0JCUE4OEFEM0FEMDk1MjQ4NkQwMDFERDE5NiAvKiBLQ2Fu
dmFzSXRlbVF1YXJ0ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEMwRkI2QzA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0l0ZW1RdWFydHouY3Bw
ICovOyB9OwotCQlBODhBRDNCMDA5NTI0ODZFMDAxREQxOTYgLyogS1JlbmRlcmluZ0RldmljZVF1
YXJ0ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThD
MEZCNzEwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFydHouaCAqLzsgfTsK
LQkJQTg4QUQzQjEwOTUyNDg2RTAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFydHouY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNzIw
ODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFydHouY3BwICovOyB9OwotCQlB
ODhBRDNCNTA5NTI0ODZFMDAxREQxOTYgLyogUXVhcnR6U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNzYwODk3MDFGODAwQkE1MTE0
IC8qIFF1YXJ0elN1cHBvcnQuaCAqLzsgfTsKLQkJQTg4QUQzQjYwOTUyNDg2RTAwMUREMTk2IC8q
IFF1YXJ0elN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThDMEZCNzcwODk3MDFGODAwQkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQuY3BwICov
OyB9OwogCQlBODhBRDQwMTA5NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEY2RkYwODk3
MDFGMTAwQkE1MTE0IC8qIFNWR1JlbmRlclN0eWxlLmNwcCAqLzsgfTsKIAkJQTg4QUQ0MDIwOTUy
NDhGMDAwMUREMTk2IC8qIFNWR1JlbmRlclN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRjcwMDA4OTcwMUYxMDBCQTUxMTQgLyogU1ZHUmVu
ZGVyU3R5bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlBODhBRDQwMzA5NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGNzAxMDg5
NzAxRjEwMEJBNTExNCAvKiBTVkdSZW5kZXJTdHlsZURlZnMuY3BwICovOyB9OwpAQCAtMjIzMywx
MyArMjIyNiwxNiBAQAogCQlCMjIyRjY5OTBBQjc3MTk1MDAyMkVGQUQgLyogSlNTVkdBbmdsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2OTcw
QUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZHQW5nbGUuaCAqLzsgfTsKIAkJQjIyMkY2OUMwQUI3NzFC
ODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyRjY5QTBBQjc3MUI4MDAyMkVGQUQgLyogSlNTVkdFbGVt
ZW50LmNwcCAqLzsgfTsKIAkJQjIyMkY2OUQwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2
OUIwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5oICovOyB9OworCQlCMjMxMEI3MjBC
MUY0NjZGMDBENTVEODcgLyogR3JhcGhpY3NDb250ZXh0Q0cubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjMxMEI3MTBCMUY0NjZGMDBENTVEODcgLyog
R3JhcGhpY3NDb250ZXh0Q0cubW0gKi87IH07CisJCUIyMzEwQjc2MEIxRjQ2QTIwMEQ1NUQ4NyAv
KiBDZ1N1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjIzMTBCNzMwQjFGNDZBMjAwRDU1RDg3IC8qIENnU3VwcG9ydC5jcHAgKi87IH07CisJ
CUIyMzEwQjc3MEIxRjQ2QTIwMEQ1NUQ4NyAvKiBDZ1N1cHBvcnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzEwQjc0MEIxRjQ2QTIwMEQ1NUQ4NyAv
KiBDZ1N1cHBvcnQuaCAqLzsgfTsKKwkJQjIzMTBCNzgwQjFGNDZBMzAwRDU1RDg3IC8qIFJlbmRl
clBhdGhDZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjMxMEI3NTBCMUY0NkEyMDBENTVEODcgLyogUmVuZGVyUGF0aENnLmNwcCAqLzsgfTsKIAkJ
QjI3NTM1NTYwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyNzBCMDUzODE0MDAy
Q0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtLmNwcCAqLzsgfTsKIAkJQjI3NTM1NTcwQjA1MzgxNDAw
MkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MjgwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5z
Zm9ybS5oICovOyB9OwogCQlCMjc1MzU1ODBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNm
b3JtQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybUNHLmNwcCAqLzsgfTsK
IAkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyQjBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUEwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAg
Ki87IH07CiAJCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyRDBCMDUz
ODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovOyB9OwotCQlCMjc1MzU1QzBCMDUzODE0
MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkUwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBo
aWNzQ29udGV4dENHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUQwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkYwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oICovOyB9OwogCQlCMjc1MzU1RTBCMDUzODE0MDAyQ0U2
NEYgLyogSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgKi87IH07CiAJ
CUIyNzUzNTVGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMxMEIwNTM4MTQwMDJD
RTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLzsgfTsKQEAgLTUwMDEsMTMgKzQ5OTcsNiBAQAog
CQlBOEMwRjhFQTA4OTcwMUY0MDBCQTUxMTQgLyogU1ZHVmlld0VsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWaWV3RWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJQThDMEY4RUIwODk3MDFGNDAwQkE1MTE0IC8qIFNWR1pvb21BbmRQYW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdab29tQW5k
UGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCUE4QzBGOEVDMDg5NzAxRjQwMEJBNTExNCAvKiBTVkdab29tQW5kUGFuLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHWm9vbUFu
ZFBhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKLQkJQThDMEZCNTQwODk3MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBL
UmVuZGVyaW5nRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07Ci0JCUE4QzBGQjU1MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVy
aW5nRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gS1JlbmRlcmluZ0RldmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQThDMEZCNkMwODk3MDFGODAwQkE1MTE0IC8qIEtD
YW52YXNJdGVtUXVhcnR6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gS0NhbnZhc0l0ZW1RdWFydHouY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQThDMEZCNzEwODk3MDFG
ODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFydHouaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owot
CQlBOEMwRkI3MjA4OTcwMUY4MDBCQTUxMTQgLyogS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtS
ZW5kZXJpbmdEZXZpY2VRdWFydHouY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQThDMEZCNzYwODk3MDFGODAwQkE1MTE0IC8qIFF1
YXJ0elN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBRdWFydHpTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlBOEMwRkI3NzA4OTcwMUY4MDBCQTUxMTQgLyogUXVh
cnR6U3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFF1YXJ0elN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQThDMzI5NUMwOTNCQjdCMjAwMEI5Q0FD
IC8qIFNWR0ZFTGlnaHRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVMaWdodEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzMyOTVEMDkzQkI3QjIw
MDBCOUNBQyAvKiBTVkdGRUxpZ2h0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFTGlnaHRFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4
QzMyOTVFMDkzQkI3QjIwMDBCOUNBQyAvKiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURpc3Rh
bnRMaWdodEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CkBAIC01MTkwLDEzICs1MTc5LDE2IEBACiAJCUIyMjJGNjk3MEFCNzcx
OTUwMDIyRUZBRCAvKiBKU1NWR0FuZ2xlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1NWR0FuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyMjJGNjlB
MEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyMjJGNjlCMEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHRWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCMjMxMEI3MTBCMUY0NjZGMDBENTVEODcgLyogR3JhcGhpY3ND
b250ZXh0Q0cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3Jh
cGhpY3NDb250ZXh0Q0cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyMzEwQjcz
MEIxRjQ2QTIwMEQ1NUQ4NyAvKiBDZ1N1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENnU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUIyMzEwQjc0MEIxRjQ2QTIwMEQ1NUQ4NyAvKiBDZ1N1cHBvcnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENnU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCMjMxMEI3NTBCMUY0NkEyMDBENTVEODcgLyogUmVuZGVyUGF0aENnLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJQYXRoQ2cuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUyNzBCMDUzODE0MDAyQ0U2NEYgLyogQWZm
aW5lVHJhbnNmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
ZmZpbmVUcmFuc2Zvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUy
ODBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBZmZpbmVUcmFuc2Zvcm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybUNHLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBZmZpbmVUcmFuc2Zvcm1D
Ry5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTJCMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZsb2F0UG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
NzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRSZWN0Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0U2l6ZUNHLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1MkUwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzQ29udGV4dENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzMDBC
MDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
NzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZVNvdXJjZUNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU5OTUsNyArNTk4Nyw2IEBACiAJCQkJRjUyM0QzMjQwMkRFNDQ3
ODAxODYzNUNBIC8qIGRvbSAqLywKIAkJCQk5MzMwOUQ4NjA5OUU2NDkxMDA1NkU1ODEgLyogZWRp
dGluZyAqLywKIAkJCQk5M0VFQzFFQzA5QzI4Nzc3MDBDNTE1RDEgLyogaHRtbCAqLywKLQkJCQlB
OEMwRkI1MTA4OTcwMUY3MDBCQTUxMTQgLyoga2NhbnZhcyAqLywKIAkJCQlBOEMwRjZFOTA4OTcw
MUYxMDBCQTUxMTQgLyoga3N2ZzIgKi8sCiAJCQkJQkNCMTZCRkIwOTc5QzM4NzAwNDY3NzQxIC8q
IGxvYWRlciAqLywKIAkJCQk2NUJGMDIxODA5NzQ4MDYzMDBDNDMxOTYgLyogcGFnZSAqLywKQEAg
LTgzNzQsMzYgKzgzNjUsNiBAQAogCQkJcGF0aCA9IHN2ZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07Ci0JCUE4QzBGQjUxMDg5NzAxRjcwMEJBNTExNCAvKiBrY2FudmFzICovID0g
ewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBOEMwRkI1MzA4OTcw
MUY3MDBCQTUxMTQgLyogZGV2aWNlICovLAotCQkJKTsKLQkJCXBhdGggPSBrY2FudmFzOwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQThDMEZCNTMwODk3MDFGNzAwQkE1MTE0
IC8qIGRldmljZSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0J
CQkJQThDMEZCNTQwODk3MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2UuY3BwICovLAot
CQkJCUE4QzBGQjU1MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2aWNlLmggKi8sCi0J
CQkJQThDMEZCNjgwODk3MDFGODAwQkE1MTE0IC8qIHF1YXJ0eiAqLywKLQkJCSk7Ci0JCQlwYXRo
ID0gZGV2aWNlOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQThDMEZCNjgw
ODk3MDFGODAwQkE1MTE0IC8qIHF1YXJ0eiAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJQThDMEZCNkMwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNJdGVt
UXVhcnR6LmNwcCAqLywKLQkJCQlBOEMwRkI3MTA4OTcwMUY4MDBCQTUxMTQgLyogS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5oICovLAotCQkJCUE4QzBGQjcyMDg5NzAxRjgwMEJBNTExNCAvKiBLUmVu
ZGVyaW5nRGV2aWNlUXVhcnR6LmNwcCAqLywKLQkJCQlBOEMwRkI3NjA4OTcwMUY4MDBCQTUxMTQg
LyogUXVhcnR6U3VwcG9ydC5oICovLAotCQkJCUE4QzBGQjc3MDg5NzAxRjgwMEJBNTExNCAvKiBR
dWFydHpTdXBwb3J0LmNwcCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gcXVhcnR6OwotCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNn
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTg0MTEsNyAr
ODM3Miw3IEBACiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5j
cHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAq
LywKIAkJCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovLAot
CQkJCUIyNzUzNTJFMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi8s
CisJCQkJQjIzMTBCNzEwQjFGNDY2RjAwRDU1RDg3IC8qIEdyYXBoaWNzQ29udGV4dENHLm1tICov
LAogCQkJCUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUuaCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5j
cHAgKi8sCiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3Bw
ICovLApAQCAtODUxNiw2ICs4NDc3LDkgQEAKIAkJQjJBMDE1OTcwQUY2Q0Q1MzAwNkJDRTBFIC8q
IGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCMjMx
MEI3MzBCMUY0NkEyMDBENTVEODcgLyogQ2dTdXBwb3J0LmNwcCAqLywKKwkJCQlCMjMxMEI3NDBC
MUY0NkEyMDBENTVEODcgLyogQ2dTdXBwb3J0LmggKi8sCisJCQkJQjIzMTBCNzUwQjFGNDZBMjAw
RDU1RDg3IC8qIFJlbmRlclBhdGhDZy5jcHAgKi8sCiAJCQkJQjJEODdDODMwQjEyNEU5NTAwQjBE
RTFFIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwICovLAogCQkJCUIyRDg3Qzg0MEIxMjRFOTUwMEIw
REUxRSAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwICovLAogCQkJCUIyRDg3Qzg1MEIx
MjRFOTUwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgKi8sCkBAIC05NDU3
LDkgKzk0MjEsNiBAQAogCQkJCTdFNkZFRUQ4MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2Ny
aXB0RGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTg4NUM0MDhCN0UzRDEwMEU3MDdD
NCAvKiBFdmVudE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUM5N0FGMzA4RUE5MDg4MDBB
Q0QyNzMgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKLQkJCQlBODhBRDM4NzA5NTI0ODZEMDAx
REQxOTYgLyogS1JlbmRlcmluZ0RldmljZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTg4QUQzQjAw
OTUyNDg2RTAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFydHouaCBpbiBIZWFkZXJzICov
LAotCQkJCUE4OEFEM0I1MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODhBRDQwMjA5NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5bGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFENDA0MDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5k
ZXJTdHlsZURlZnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFENDBCMDk1MjQ4RjAwMDFERDE5
NiAvKiBTVkdab29tRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTA4MzksNiArMTA4MDAsNyBA
QAogCQkJCUE3MzUyQzFBMEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNEI4QUY0QUEwQjFDRTAyQjAwNjg3NjkwIC8qIENsaXBib2FyZEFjY2Vz
c1BvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDYwMjdDQUQwQjFDQkZDMDAwODg0QjJEIC8q
IENvbnRleHRNZW51SXRlbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjIzMTBCNzcwQjFGNDZBMjAw
RDU1RDg3IC8qIENnU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMTAzOSwxMCArMTEwMDEs
NiBAQAogCQkJCUJDRUYzNDM0MDg3QjU2M0UwMEJCRjgzMyAvKiBIVE1MRWxlbWVudEZhY3Rvcnku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U2RkVFRDkwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNv
cmVTY3JpcHREZWJ1Z2dlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTg4NUMzMDhCN0UzRDEw
MEU3MDdDNCAvKiBFdmVudE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4OEFEMzg2MDk1
MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUE4OEFEM0FEMDk1MjQ4NkQwMDFERDE5NiAvKiBLQ2FudmFzSXRlbVF1YXJ0ei5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBODhBRDNCMTA5NTI0ODZFMDAxREQxOTYgLyogS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0ei5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODhBRDNCNjA5NTI0ODZFMDAxREQxOTYg
LyogUXVhcnR6U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDQwMTA5NTI0OEYw
MDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQ0
MDMwOTUyNDhGMDAwMUREMTk2IC8qIFNWR1JlbmRlclN0eWxlRGVmcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBODhBRDQwQTA5NTI0OEYwMDAxREQxOTYgLyogU1ZHWm9vbUV2ZW50LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTIwNjMsNyArMTIwMjEsNiBAQAogCQkJCUIyNzUzNTU5MEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NUEw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
NzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlCMjc1MzU1QzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NUUwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NUYwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291
cmNlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjAwQjA1MzgxNDAwMkNFNjRGIC8q
IEludFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMjE1Niw2ICsxMjExMyw5IEBACiAJ
CQkJMUFEOENGQ0UwQjFDRUQ4OTAwNjk2REUwIC8qIFJlc291cmNlUmVxdWVzdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwNjAyN0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVt
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4MTgwQTUwQjFENEU0MzAwQ0U0NkM0IC8qIFJl
c291cmNlUmVzcG9uc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjIzMTBCNzIwQjFGNDY2RjAw
RDU1RDg3IC8qIEdyYXBoaWNzQ29udGV4dENHLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjIzMTBC
NzYwQjFGNDZBMjAwRDU1RDg3IC8qIENnU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
MjMxMEI3ODBCMUY0NkEzMDBENTVEODcgLyogUmVuZGVyUGF0aENnLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCShy
ZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rldmlj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAg
ICAgICAgICAgICAyMDA2ICAgICAgIEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+
Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAotICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUtSZW5kZXJpbmdEZXZpY2U6OktSZW5kZXJpbmdE
ZXZpY2UoKQotewotfQotCi1LUmVuZGVyaW5nRGV2aWNlOjp+S1JlbmRlcmluZ0RldmljZSgpCi17
Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlOjpjdXJyZW50
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY29udGV4dFN0YWNrLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fY29udGV4dFN0YWNrLmxhc3QoKTsKLX0KLQot
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2U6OnBvcENvbnRleHQoKQot
ewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiByZXN1bHQgPSBtX2NvbnRleHRTdGFjay5s
YXN0KCk7Ci0gICAgbV9jb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ0RldmljZTo6cHVzaENvbnRleHQoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9jb250ZXh0U3RhY2suYXBwZW5kKGNvbnRl
eHQpOwotfQotCi19Ci0KLS8vIHZpbTp0cz00Om5vZXQKLSNlbmRpZiAvLyBTVkdfU1VQUE9SVAot
CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAkocmV2aXNp
b24gMTc5MzgpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCi0qLwotCi0jaWZuZGVmIEtSZW5kZXJpbmdEZXZpY2VfSAot
I2RlZmluZSBLUmVuZGVyaW5nRGV2aWNlX0gKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0KLSNpbmNs
dWRlICJTVkdGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKLWNsYXNzIFBhdGg7Ci0KLS8vIGFrYSB3aGVyZSB0byBkcmF3Ci1jbGFzcyBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dAotewotcHVibGljOgotICAgIEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KCkgeyB9Ci0gICAgdmlydHVhbCB+S1JlbmRlcmluZ0RldmljZUNvbnRleHQoKSB7IH0K
LQotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gY3RtKCkgY29uc3QgPSAw
OwotICAgICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXRoKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBhZGRQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdyYXBoaWNz
Q29udGV4dCogY3JlYXRlR3JhcGhpY3NDb250ZXh0KCkgPSAwOwotfTsKLQotY2xhc3MgU1ZHUmVz
b3VyY2VJbWFnZTsKLWNsYXNzIFNWR1Jlc291cmNlRmlsdGVyRWZmZWN0OwotY2xhc3MgS1JlbmRl
cmluZ0RldmljZQotewotcHVibGljOgotICAgIEtSZW5kZXJpbmdEZXZpY2UoKTsKLSAgICB2aXJ0
dWFsIH5LUmVuZGVyaW5nRGV2aWNlKCk7Ci0KLSAgICAvLyBUaGUgcmVuZGVyaW5nIGRldmljZSB3
aWxsIGJlIGRpcmVjdGx5IGluaXRlZAotICAgIC8vIGFmdGVyIHRoZSBjYW52YXMgdGFyZ2V0LCBp
dCBtYXkgYmUgb3ZlcndyaXR0ZW4uCi0gICAgdmlydHVhbCBib29sIGlzQnVmZmVyZWQoKSBjb25z
dCA9IDA7Ci0KLSAgICAvLyBHbG9iYWwgcmVuZGVyaW5nIGRldmljZSBjb250ZXh0Ci0gICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqIGN1cnJlbnRDb250ZXh0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBwb3BDb250ZXh0KCk7Ci0gICAgdmlydHVhbCB2
b2lkIHB1c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kik7Ci0gICAgCi0gICAgdmly
dHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dEZvckltYWdlKFNWR1Jlc291cmNl
SW1hZ2UqKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBDcmVhdGlvbiB0b29scwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxTVkdSZXNvdXJjZT4gY3JlYXRlUmVzb3VyY2UoY29uc3QgU1ZHUmVzb3VyY2VU
eXBlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU1ZHRmlsdGVyRWZmZWN0KiBjcmVhdGVGaWx0
ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVyRWZmZWN0VHlwZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXI+IGNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IFNW
R1BhaW50U2VydmVyVHlwZSYpIGNvbnN0ID0gMDsKLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8S1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqPiBtX2NvbnRleHRTdGFjazsKLX07Ci0KLUtSZW5kZXJpbmdE
ZXZpY2UqIHJlbmRlcmluZ0RldmljZSgpOyAvKiByZXR1cm5zIHRoZSBzaW5nbGUgZ2xvYmFsIHJl
bmRlcmluZyBkZXZpY2UgKi8KLQotfQotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLSNlbmRpZgot
Ci0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5k
ZXJpbmdEZXZpY2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9x
dC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxOTYgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNl
Q2xpcHBlci5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlTWFya2VyLmgiCi0jaW5jbHVkZSAiS1Jl
bmRlcmluZ0RldmljZVF0LmgiCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgotI2lu
Y2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKLSNpbmNsdWRlICJTVkdQYWlu
dFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6
S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdChRUGFpbnRlciogcGFpbnRlcikKLSAgICA6IG1fcGFp
bnRlcihwYWludGVyKQotICAgICwgbV9wYXRoKCkKLXsKLSAgICBRX0FTU0VSVChtX3BhaW50ZXIg
IT0gMCk7Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6On5LUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF0KCkKLXsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHdvcmxkTWF0cml4KQotewot
ICAgIEFmZmluZVRyYW5zZm9ybSByZXQgPSBjdG0oKTsKLSAgICBtX3BhaW50ZXItPnNldE1hdHJp
eCh3b3JsZE1hdHJpeCwgdHJ1ZSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotQWZmaW5lVHJhbnNm
b3JtIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6OmN0bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybShtX3BhaW50ZXItPm1hdHJpeCgpKTsKLX0KLQotSW50UmVjdCBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF0OjptYXBGcm9tVmlzdWFsKGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotSW50UmVjdCBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF0OjptYXBUb1Zpc3VhbChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVy
biBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6Y2xlYXJQ
YXRoKCkKLXsKLSAgICBtX3BhdGggPSBRUGFpbnRlclBhdGgoKTsKLX0KLQotdm9pZCBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9w
YXRoLmFkZFBhdGgoKihwYXRoLnBsYXRmb3JtUGF0aCgpKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4
dCogS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKLXsK
LSAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dChtX3BhaW50ZXIpOwotfQotCi1RUGFpbnRl
ciYgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6cGFpbnRlcigpCi17Ci0gICAgcmV0dXJuICpt
X3BhaW50ZXI7Ci19Ci0KLVFSZWN0RiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpwYXRoQkJv
eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKLX0KLQotdm9p
ZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpzZXRGaWxsUnVsZShXaW5kUnVsZSBydWxlKQot
ewotICAgIG1fcGF0aC5zZXRGaWxsUnVsZShydWxlID09IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRF
dmVuRmlsbCA6IFF0OjpXaW5kaW5nRmlsbCk7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdDo6ZmlsbFBhdGgoKQotewotICAgIG1fcGFpbnRlci0+ZmlsbFBhdGgobV9wYXRoLCBt
X3BhaW50ZXItPmJydXNoKCkpOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6
OnN0cm9rZVBhdGgoKQotewotICAgIG1fcGFpbnRlci0+c3Ryb2tlUGF0aChtX3BhdGgsIG1fcGFp
bnRlci0+cGVuKCkpOwotfQotCi0vLyBLUmVuZGVyaW5nRGV2aWNlUXQKLUtSZW5kZXJpbmdEZXZp
Y2VRdDo6S1JlbmRlcmluZ0RldmljZVF0KCkgOiBLUmVuZGVyaW5nRGV2aWNlKCkKLXsKLX0KLQot
S1JlbmRlcmluZ0RldmljZVF0Ojp+S1JlbmRlcmluZ0RldmljZVF0KCkKLXsKLX0KLQotS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2VRdDo6cG9wQ29udGV4dCgpCi17Ci0g
ICAgLy8gQW55IHNwZWNpYWwgdGhpbmdzIG5lZWRlZD8KLSAgICByZXR1cm4gS1JlbmRlcmluZ0Rl
dmljZTo6cG9wQ29udGV4dCgpOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VRdDo6cHVzaENv
bnRleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgLy8gQW55IHNw
ZWNpYWwgdGhpbmdzIG5lZWRlZD8KLSAgICBLUmVuZGVyaW5nRGV2aWNlOjpwdXNoQ29udGV4dChj
b250ZXh0KTsKLX0KLQotLy8gY29udGV4dCBtYW5hZ2VtZW50LgotS1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdCogS1JlbmRlcmluZ0RldmljZVF0OjpxdENvbnRleHQoKSBjb25zdAotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Kj4oY3VycmVudENvbnRl
eHQoKSk7Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlUXQ6
OmNvbnRleHRGb3JJbWFnZShTVkdSZXNvdXJjZUltYWdlKiBpbWFnZSkgY29uc3QKLXsKLSAgICBx
RGVidWcoIktSZW5kZXJpbmdEZXZpY2VRdDo6Y29udGV4dEZvckltYWdlKCkgVE9ETyEiKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotLy8gUmVzb3VyY2UgY3JlYXRpb24KLVBhc3NSZWZQdHI8U1ZHUmVz
b3VyY2U+IEtSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlUmVzb3VyY2UoY29uc3QgU1ZHUmVzb3Vy
Y2VUeXBlJiB0eXBlKSBjb25zdAotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICAg
IGNhc2UgQ2xpcHBlclJlc291cmNlVHlwZToKLSAgICAgICAgICAgIHJldHVybiBuZXcgU1ZHUmVz
b3VyY2VDbGlwcGVyKCk7Ci0gICAgICAgIGNhc2UgTWFya2VyUmVzb3VyY2VUeXBlOgotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBTVkdSZXNvdXJjZU1hcmtlcigpOyAvLyBVc2UgZGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbi4uLgotICAgICAgICBjYXNlIEltYWdlUmVzb3VyY2VUeXBlOgotICAgICAgICAg
ICAgLy8gcmV0dXJuIG5ldyBTVkdSZXNvdXJjZUltYWdlUXQoKTsKLSAgICAgICAgY2FzZSBGaWx0
ZXJSZXNvdXJjZVR5cGU6Ci0gICAgICAgICAgICAvLyByZXR1cm4gbmV3IEtDYW52YXNGaWx0ZXJR
dCgpOwotICAgICAgICBjYXNlIE1hc2tlclJlc291cmNlVHlwZToKLSAgICAgICAgICAgIC8vIHJl
dHVybiBuZXcgS0NhbnZhc01hc2tlclF0KCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXI+IEtSZW5k
ZXJpbmdEZXZpY2VRdDo6Y3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJUeXBl
JiB0eXBlKSBjb25zdAotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICAgIGNhc2Ug
U29saWRQYWludFNlcnZlcjoKLSAgICAgICAgICAgIHJldHVybiBuZXcgU1ZHUGFpbnRTZXJ2ZXJT
b2xpZCgpOwotICAgICAgICBjYXNlIFBhdHRlcm5QYWludFNlcnZlcjoKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuKCk7Ci0gICAgICAgIGNhc2UgTGluZWFyR3Jh
ZGllbnRQYWludFNlcnZlcjoKLSAgICAgICAgICAgIHJldHVybiBuZXcgU1ZHUGFpbnRTZXJ2ZXJM
aW5lYXJHcmFkaWVudCgpOwotICAgICAgICBjYXNlIFJhZGlhbEdyYWRpZW50UGFpbnRTZXJ2ZXI6
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQoKTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotU1ZH
RmlsdGVyRWZmZWN0KiBLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZUZpbHRlckVmZmVjdChjb25z
dCBTVkdGaWx0ZXJFZmZlY3RUeXBlJiB0eXBlKSBjb25zdAotewotICAgIHFEZWJ1ZygiS1JlbmRl
cmluZ0RldmljZVF0OjpjcmVhdGVGaWx0ZXJFZmZlY3QoKSBUT0RPISIpOwotICAgIHJldHVybiAw
OwotfQotCi1LUmVuZGVyaW5nRGV2aWNlKiByZW5kZXJpbmdEZXZpY2UoKQotewotICAgIHN0YXRp
YyBLUmVuZGVyaW5nRGV2aWNlICpzaGFyZWRSZW5kZXJpbmdEZXZpY2UgPSBuZXcgS1JlbmRlcmlu
Z0RldmljZVF0KCk7Ci0gICAgcmV0dXJuIHNoYXJlZFJlbmRlcmluZ0RldmljZTsKLX0KLQotfQot
Ci0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5k
ZXJpbmdEZXZpY2VRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQv
S1JlbmRlcmluZ0RldmljZVF0LmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rY2FudmFz
L2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5MCAr
MCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSovCi0KLSNpZm5kZWYgS1JlbmRlcmluZ0RldmljZVF0X0gKLSNkZWZpbmUgS1JlbmRl
cmluZ0RldmljZVF0X0gKLQotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFQYWludGVy
UGF0aD4KLQotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dCA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dAotewotcHVibGljOgotICAgIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0UXQoUVBhaW50ZXIqKTsKLSAgICB2aXJ0dWFsIH5LUmVuZGVyaW5n
RGV2aWNlQ29udGV4dFF0KCk7Ci0KLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBjb25jYXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
Y3RtKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEludFJlY3QgbWFwRnJvbVZpc3VhbChjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IG1hcFRvVmlzdWFsKGNvbnN0IEludFJlY3Qm
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhdGgoKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
UGF0aChjb25zdCBQYXRoJik7Ci0KLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogY3JlYXRl
R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgCi0gICAgLy8gUXQgc3BlY2lmaWMgc3R1ZmYKLSAgICBR
UGFpbnRlciYgcGFpbnRlcigpOwotICAgIFFSZWN0RiBwYXRoQkJveCgpIGNvbnN0OwotCi0gICAg
dm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7Ci0KLSAgICB2b2lkIGZpbGxQYXRoKCk7Ci0gICAg
dm9pZCBzdHJva2VQYXRoKCk7Ci0KLXByaXZhdGU6Ci0gICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsK
LSAgICBRUGFpbnRlclBhdGggbV9wYXRoOwotfTsKLQotY2xhc3MgS1JlbmRlcmluZ0RldmljZVF0
IDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2UKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nRGV2
aWNlUXQoKTsKLSAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nRGV2aWNlUXQoKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBpc0J1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1
YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHBvcENvbnRleHQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcHVzaENvbnRleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqKTsKLQotICAgIC8vIGNvbnRl
eHQgbWFuYWdlbWVudC4KLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBxdENvbnRleHQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0Rm9y
SW1hZ2UoU1ZHUmVzb3VyY2VJbWFnZSopIGNvbnN0OwotCi0gICAgLy8gUmVzb3VyY2UgY3JlYXRp
b24KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U1ZHUmVzb3VyY2U+IGNyZWF0ZVJlc291cmNlKGNv
bnN0IFNWR1Jlc291cmNlVHlwZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTVkdQ
YWludFNlcnZlcj4gY3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJUeXBlJikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBTVkdGaWx0ZXJFZmZlY3QqIGNyZWF0ZUZpbHRlckVmZmVjdChj
b25zdCBTVkdGaWx0ZXJFZmZlY3RUeXBlJikgY29uc3Q7Ci19OwotCi19Ci0KLSNlbmRpZgotCi0v
LyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBh
dGhRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9SZW5kZXJQ
YXRoUXQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQv
UmVuZGVyUGF0aFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4OCArMCwwIEBACi0vKgotICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWMu
c2VpZGVsQGtkZW1haWwubmV0PgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAg
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0jaW5j
bHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCi0KLSNpbmNsdWRlIDxRRGVidWc+Ci0jaW5j
bHVkZSA8UVBhaW50ZXJQYXRoU3Ryb2tlcj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAot
Ym9vbCBSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Ym9vbCByZXF1aXJlc1N0cm9rZSkgY29uc3QKLXsKLSAgICBpZiAocGF0aCgpLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFLU1ZH
UGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBRUGFpbnRl
clBhdGggZ2V0UGF0aFN0cm9rZShjb25zdCBRUGFpbnRlclBhdGggJnBhdGgsIGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCi17IAotICAgIFFQYWlu
dGVyUGF0aFN0cm9rZXIgczsKLSAgICBzLnNldFdpZHRoKEtTVkdQYWludGVyRmFjdG9yeTo6Y3Nz
UHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgo
KSwgMS4wKSk7Ci0KLSAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gQnV0
dENhcCkKLSAgICAgICAgcy5zZXRDYXBTdHlsZShRdDo6RmxhdENhcCk7Ci0gICAgZWxzZSBpZiAo
c3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gUm91bmRDYXApCi0gICAgICAgIHMuc2V0
Q2FwU3R5bGUoUXQ6OlJvdW5kQ2FwKTsKLQotICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+am9p
blN0eWxlKCkgPT0gTWl0ZXJKb2luKSB7Ci0gICAgICAgIHMuc2V0Sm9pblN0eWxlKFF0OjpNaXRl
ckpvaW4pOwotICAgICAgICBzLnNldE1pdGVyTGltaXQoKHFyZWFsKSBzdHlsZS0+c3ZnU3R5bGUo
KS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLSAgICB9IGVsc2UgaWYoc3R5bGUtPnN2Z1N0eWxlKCkt
PmpvaW5TdHlsZSgpID09IFJvdW5kSm9pbikKLSAgICAgICAgcy5zZXRKb2luU3R5bGUoUXQ6OlJv
dW5kSm9pbik7Ci0KLSAgICBjb25zdCBLQ0Rhc2hBcnJheSYgZGFzaGVzID0gS1NWR1BhaW50ZXJG
YWN0b3J5OjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUpOwotICAgIGRvdWJsZSBk
YXNoT2Zmc2V0ID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmpl
Y3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0KLSAgICB1
bnNpZ25lZCBpbnQgZGFzaExlbmd0aCA9ICFkYXNoZXMuaXNFbXB0eSgpID8gZGFzaGVzLnNpemUo
KSA6IDA7Ci0gICAgaWYoZGFzaExlbmd0aCkgewotICAgICAgICBRVmVjdG9yPHFyZWFsPiBwYXR0
ZXJuOwotICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAoZGFzaExlbmd0aCAlIDIpID09IDAg
PyBkYXNoTGVuZ3RoIDogZGFzaExlbmd0aCAqIDI7Ci0KLSAgICAgICAgZm9yKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICBwYXR0ZXJuLmFwcGVuZChkYXNo
ZXNbaSAlIGRhc2hMZW5ndGhdIC8gKGZsb2F0KXMud2lkdGgoKSk7Ci0KLSAgICAgICAgcy5zZXRE
YXNoUGF0dGVybihwYXR0ZXJuKTsKLSAgICAKLSAgICAgICAgUV9VTlVTRUQoZGFzaE9mZnNldCk7
Ci0gICAgICAgIC8vIFRPRE86IGRhc2gtb2Zmc2V0LCBkb2VzL3dpbGwgcXQ0IEFQSSBhbGxvdyBp
dD8gKFJvYikKLSAgICB9Ci0KLSAgICByZXR1cm4gcy5jcmVhdGVTdHJva2UocGF0aCk7Ci19Ci0K
LUZsb2F0UmVjdCBSZW5kZXJQYXRoOjpzdHJva2VCQm94KCkgY29uc3QKLXsKLSAgICBRUGFpbnRl
clBhdGggb3V0bGluZSA9IGdldFBhdGhTdHJva2UoKihwYXRoKCkucGxhdGZvcm1QYXRoKCkpLCB0
aGlzLCBzdHlsZSgpKTsKLSAgICByZXR1cm4gb3V0bGluZS5ib3VuZGluZ1JlY3QoKTsKLX0KLQot
fQotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0
ei9LQ2FudmFzSXRlbVF1YXJ0ei5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHouY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICAgICAgICAgIChDKSAy
MDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAg
IDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2lmZGVmIFNWR19TVVBQT1JUCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0j
aW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jaW5j
bHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0ei5oIgotI2luY2x1ZGUgIlF1YXJ0elN1cHBvcnQuaCIKLSNpbmNsdWRlICJSZW5kZXJQ
YXRoLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRF
bGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRSZWN0IFJlbmRlclBhdGg6
OnN0cm9rZUJCb3goKSBjb25zdAotewotICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNT
dHJva2UoKSkKLSAgICAgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94KHBhdGgoKSwgc3R5bGUo
KSwgdGhpcyk7Ci0KLSAgICByZXR1cm4gcGF0aCgpLmJvdW5kaW5nUmVjdCgpOwotfQotCi0KLWJv
b2wgUmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJv
b2wgcmVxdWlyZXNTdHJva2UpIGNvbnN0Ci17Ci0gICAgaWYgKHBhdGgoKS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhS1NWR1Bh
aW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgQ0dNdXRhYmxlUGF0aFJlZiBjZ1BhdGggPSBwYXRoKCkucGxh
dGZvcm1QYXRoKCk7Ci0gICAgCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBzY3JhdGNoQ29u
dGV4dCgpOwotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgCi0gICAgQ0dD
b250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwg
Y2dQYXRoKTsKLSAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlKCks
IHRoaXMpOwotICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhDb250YWluc1BvaW50
KGNvbnRleHQsIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOwotICAgIAotICAgIHJldHVybiBoaXRTdWNjZXNzOwotfQotCi19Ci0KLSNl
bmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHov
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFz
L2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5jcHAJKHJldmlzaW9uIDE3OTM4
KQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0
ei5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAg
ICAgICAgICAgICAgIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
U1ZHRkVCbGVuZC5oIgotI2luY2x1ZGUgIlNWR0ZFQ29sb3JNYXRyaXguaCIKLSNpbmNsdWRlICJT
VkdGRUNvbXBvbmVudFRyYW5zZmVyLmgiCi0jaW5jbHVkZSAiU1ZHRkVDb21wb3NpdGUuaCIKLSNp
bmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZy5oIgotI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2Vt
ZW50TWFwLmgiCi0jaW5jbHVkZSAiU1ZHRkVGbG9vZC5oIgotI2luY2x1ZGUgIlNWR0ZFR2F1c3Np
YW5CbHVyLmgiCi0jaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgotI2luY2x1ZGUgIlNWR0ZFTWVyZ2Uu
aCIKLSNpbmNsdWRlICJTVkdGRU9mZnNldC5oIgotI2luY2x1ZGUgIlNWR0ZFU3BlY3VsYXJMaWdo
dGluZy5oIgotI2luY2x1ZGUgIlNWR0ZFVGlsZS5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlQ2xp
cHBlci5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCi0jaW5jbHVkZSAiU1ZHUmVz
b3VyY2VJbWFnZS5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlTWFya2VyLmgiCi0jaW5jbHVkZSAi
U1ZHUmVzb3VyY2VNYXNrZXIuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCi0j
aW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oIgotI2luY2x1ZGUgIlNWR1Bh
aW50U2VydmVyUmFkaWFsR3JhZGllbnQuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclBhdHRl
cm4uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUXVhcnR6U3VwcG9ydC5oIgot
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1LUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dD
b250ZXh0UmVmIGNvbnRleHQpCi0gICAgOiBtX2NnQ29udGV4dChDR0NvbnRleHRSZXRhaW4oY29u
dGV4dCkpCi17Ci0gICAgQVNTRVJUKG1fY2dDb250ZXh0KTsKLX0KLQotS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdWFydHo6On5LUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eigpCi17Ci0gICAg
Q0dDb250ZXh0UmVsZWFzZShtX2NnQ29udGV4dCk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgd29ybGRNYXRyaXgpCi17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHJldCA9IGN0bSgpOwotICAg
IENHQWZmaW5lVHJhbnNmb3JtIHdNYXRyaXggPSB3b3JsZE1hdHJpeDsKLSAgICBDR0NvbnRleHRD
b25jYXRDVE0obV9jZ0NvbnRleHQsIHdNYXRyaXgpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLUFm
ZmluZVRyYW5zZm9ybSBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6Y3RtKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gQ0dDb250ZXh0R2V0Q1RNKG1fY2dDb250ZXh0KTsKLX0KLQotdm9pZCBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6Y2xlYXJQYXRoKCkKLXsKLSAgICBDR0NvbnRl
eHRCZWdpblBhdGgobV9jZ0NvbnRleHQpOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXVhcnR6OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgQ0dDb250ZXh0QWRk
UGF0aChtX2NnQ29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci19Ci0KLUdyYXBoaWNzQ29u
dGV4dCogS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCgpCi17Ci0gICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQobV9jZ0NvbnRleHQpOwotfQot
Ci1zdGF0aWMgYm9vbCBfX3VzZUZpbHRlcnMgPSB0cnVlOwotCi1ib29sIEtSZW5kZXJpbmdEZXZp
Y2VRdWFydHo6OmZpbHRlcnNFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gX191c2VGaWx0ZXJzOwot
fQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OnNldEZpbHRlcnNFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICBfX3VzZUZpbHRlcnMgPSBlbmFibGVkOwotfQotCi1zdGF0aWMgYm9v
bCBfX3VzZUhhcmR3YXJlUmVuZGVyaW5nID0gdHJ1ZTsKLQotYm9vbCBLUmVuZGVyaW5nRGV2aWNl
UXVhcnR6OjpoYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoKQotewotICAgIHJldHVybiBfX3VzZUhh
cmR3YXJlUmVuZGVyaW5nOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OnNldEhh
cmR3YXJlUmVuZGVyaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgX191c2VIYXJkd2Fy
ZVJlbmRlcmluZyA9IGVuYWJsZWQ7Ci19Ci0KLSNwcmFnbWEgbWFyayAtCi0jcHJhZ21hIG1hcmsg
Q29udGV4dCBNYW5hZ2VtZW50Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBLUmVu
ZGVyaW5nRGV2aWNlUXVhcnR6OjpxdWFydHpDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihjdXJyZW50Q29udGV4
dCgpKTsKLX0KLQotQ0dDb250ZXh0UmVmIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmN1cnJlbnRD
R0NvbnRleHQoKSBjb25zdAotewotICAgIEFTU0VSVChxdWFydHpDb250ZXh0KCkpOwotICAgIHJl
dHVybiBxdWFydHpDb250ZXh0KCktPmNnQ29udGV4dCgpOwotfQotCi1LUmVuZGVyaW5nRGV2aWNl
Q29udGV4dCogS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6Y29udGV4dEZvckltYWdlKFNWR1Jlc291
cmNlSW1hZ2UgKmltYWdlKSBjb25zdAotewotICAgIENHTGF5ZXJSZWYgY2dMYXllciA9IGltYWdl
LT5jZ0xheWVyKCk7Ci0gICAgaWYgKCFjZ0xheWVyKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB3ZSBt
aWdodCBub3QgZ2V0IGJhY2sgYSBsYXllciBpZiB0aGlzIGlzIGEgbG9hZGVkIGltYWdlCi0gICAg
ICAgIC8vIG1heWJlIHRoaXMgbG9naWMgc2hvdWxkIGdvIGludG8gU1ZHUmVzb3VyY2VJbWFnZT8K
LSAgICAgICAgY2dMYXllciA9IENHTGF5ZXJDcmVhdGVXaXRoQ29udGV4dChjdXJyZW50Q0dDb250
ZXh0KCksIENHU2l6ZShpbWFnZS0+c2l6ZSgpICsgSW50U2l6ZSgxLDEpKSwgTlVMTCk7ICAvLyBG
SVhNRSArIDEgaXMgYSBoYWNrCi0gICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgY29tcG9zaXRl
IHRoZSBvcmlnaW5hbCBpbWFnZSBvbnRvIHRoZSBsYXllci4uLgotICAgICAgICBpbWFnZS0+c2V0
Q0dMYXllcihjZ0xheWVyKTsKLSAgICAgICAgQ0dMYXllclJlbGVhc2UoY2dMYXllcik7Ci0gICAg
fQotICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dMYXllckdl
dENvbnRleHQoY2dMYXllcikpOwotfQotCi0jcHJhZ21hIG1hcmsgLQotI3ByYWdtYSBtYXJrIFJl
c291cmNlIENyZWF0aW9uCi0KLVBhc3NSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXI+IEtSZW5kZXJpbmdE
ZXZpY2VRdWFydHo6OmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IFNWR1BhaW50U2VydmVyVHlwZSYg
dHlwZSkgY29uc3QKLXsKLSAgICBTVkdQYWludFNlcnZlciogbmV3U2VydmVyID0gTlVMTDsKLSAg
ICBzd2l0Y2godHlwZSkgewotICAgIGNhc2UgU29saWRQYWludFNlcnZlcjoKLSAgICAgICAgbmV3
U2VydmVyID0gbmV3IFNWR1BhaW50U2VydmVyU29saWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQYXR0ZXJuUGFpbnRTZXJ2ZXI6Ci0gICAgICAgIG5ld1NlcnZlciA9IG5ldyBTVkdQYWlu
dFNlcnZlclBhdHRlcm4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lYXJHcmFkaWVu
dFBhaW50U2VydmVyOgotICAgICAgICBuZXdTZXJ2ZXIgPSBuZXcgU1ZHUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJhZGlhbEdyYWRpZW50UGFp
bnRTZXJ2ZXI6Ci0gICAgICAgIG5ld1NlcnZlciA9IG5ldyBTVkdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gbmV3U2VydmVyOwot
fQotCi1QYXNzUmVmUHRyPFNWR1Jlc291cmNlPiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjcmVh
dGVSZXNvdXJjZShjb25zdCBTVkdSZXNvdXJjZVR5cGUmIHR5cGUpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDbGlwcGVyUmVzb3VyY2VUeXBlOgotICAgICAgICByZXR1
cm4gbmV3IFNWR1Jlc291cmNlQ2xpcHBlcigpOwotICAgIGNhc2UgTWFya2VyUmVzb3VyY2VUeXBl
OgotICAgICAgICByZXR1cm4gbmV3IFNWR1Jlc291cmNlTWFya2VyKCk7Ci0gICAgY2FzZSBJbWFn
ZVJlc291cmNlVHlwZToKLSAgICAgICAgcmV0dXJuIG5ldyBTVkdSZXNvdXJjZUltYWdlKCk7Ci0g
ICAgY2FzZSBGaWx0ZXJSZXNvdXJjZVR5cGU6Ci0gICAgICAgIHJldHVybiBuZXcgU1ZHUmVzb3Vy
Y2VGaWx0ZXIoKTsKLSAgICBjYXNlIE1hc2tlclJlc291cmNlVHlwZToKLSAgICAgICAgcmV0dXJu
IG5ldyBTVkdSZXNvdXJjZU1hc2tlcigpOwotICAgIH0KLSAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgcmVzb3VyY2Ugb2YgdHlwZTogJWkiLCB0eXBlKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotU1ZHRmlsdGVyRWZmZWN0KiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjcmVhdGVGaWx0ZXJF
ZmZlY3QoY29uc3QgU1ZHRmlsdGVyRWZmZWN0VHlwZSYgdHlwZSkgY29uc3QKLXsKLSAgICBzd2l0
Y2godHlwZSkKLSAgICB7Ci0gICAgLyogTGlnaHQgc291cmNlcyBhcmUgY29udGFpbmVkIGJ5IHRo
ZSBkaWZmdXNlL3NwZWN1bGFyIGxpZ2h0IGJsb2NrcyAKLSAgICBjYXNlIEZFX0RJU1RBTlRfTElH
SFQ6IAotICAgIGNhc2UgRkVfUE9JTlRfTElHSFQ6IAotICAgIGNhc2UgRkVfU1BPVF9MSUdIVDog
Ci0gICAgKi8KLSAgICBjYXNlIEZFX0JMRU5EOiByZXR1cm4gbmV3IFNWR0ZFQmxlbmQoKTsKLSAg
ICBjYXNlIEZFX0NPTE9SX01BVFJJWDogcmV0dXJuIG5ldyBTVkdGRUNvbG9yTWF0cml4KCk7Ci0g
ICAgY2FzZSBGRV9DT01QT05FTlRfVFJBTlNGRVI6IHJldHVybiBuZXcgU1ZHRkVDb21wb25lbnRU
cmFuc2ZlcigpOwotICAgIGNhc2UgRkVfQ09NUE9TSVRFOiByZXR1cm4gbmV3IFNWR0ZFQ29tcG9z
aXRlKCk7Ci0vLyAgY2FzZSBGRV9DT05WT0xWRV9NQVRSSVg6IAotICAgIGNhc2UgRkVfRElGRlVT
RV9MSUdIVElORzogcmV0dXJuIG5ldyBTVkdGRURpZmZ1c2VMaWdodGluZygpOwotICAgIGNhc2Ug
RkVfRElTUExBQ0VNRU5UX01BUDogcmV0dXJuIG5ldyBTVkdGRURpc3BsYWNlbWVudE1hcCgpOwot
ICAgIGNhc2UgRkVfRkxPT0Q6IHJldHVybiBuZXcgU1ZHRkVGbG9vZCgpOwotICAgIGNhc2UgRkVf
R0FVU1NJQU5fQkxVUjogcmV0dXJuIG5ldyBTVkdGRUdhdXNzaWFuQmx1cigpOwotICAgIGNhc2Ug
RkVfSU1BR0U6IHJldHVybiBuZXcgU1ZHRkVJbWFnZSgpOwotICAgIGNhc2UgRkVfTUVSR0U6IHJl
dHVybiBuZXcgU1ZHRkVNZXJnZSgpOwotLy8gIGNhc2UgRkVfTU9SUEhPTE9HWTogCi0gICAgY2Fz
ZSBGRV9PRkZTRVQ6IHJldHVybiBuZXcgU1ZHRkVPZmZzZXQoKTsKLSAgICBjYXNlIEZFX1NQRUNV
TEFSX0xJR0hUSU5HOiByZXR1cm4gbmV3IFNWR0ZFU3BlY3VsYXJMaWdodGluZygpOwotICAgIGNh
c2UgRkVfVElMRTogcmV0dXJuIG5ldyBTVkdGRVRpbGUoKTsKLS8vICBjYXNlIEZFX1RVUkJVTEVO
Q0U6IAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotS1JlbmRl
cmluZ0RldmljZSogcmVuZGVyaW5nRGV2aWNlKCkKLXsKLSAgICBzdGF0aWMgS1JlbmRlcmluZ0Rl
dmljZSogc2hhcmVkUmVuZGVyaW5nRGV2aWNlID0gbmV3IEtSZW5kZXJpbmdEZXZpY2VRdWFydHoo
KTsKLSAgICByZXR1cm4gc2hhcmVkUmVuZGVyaW5nRGV2aWNlOwotfQotCi19Ci0KLSNlbmRpZiAv
LyBTVkdfU1VQUE9SVApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRl
cmluZ0RldmljZVF1YXJ0ei5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAgICAg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0KLSNpZm5kZWYgS1JlbmRlcmlu
Z0RldmljZVF1YXJ0el9ICi0jZGVmaW5lIEtSZW5kZXJpbmdEZXZpY2VRdWFydHpfSAotI2lmZGVm
IFNWR19TVVBQT1JUCi0KLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCi0KLXR5cGVkZWYg
c3RydWN0IENHUmVjdCBDR1JlY3Q7Ci10eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgKkNHQ29udGV4
dFJlZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dFF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCB7Ci1wdWJsaWM6Ci0g
ICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dDb250ZXh0UmVmKTsKLSAgICB2aXJ0
dWFsIH5LUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eigpOwotICAgIAotICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBjdG0oKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJQYXRoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYpOwot
Ci0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwot
ICAgIAotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NnQ29u
dGV4dDsgfTsKLSAgICAKLXByaXZhdGU6Ci0gICAgQ0dDb250ZXh0UmVmIG1fY2dDb250ZXh0Owot
fTsKLQotY2xhc3MgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2
aWNlIHsKLXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6KCkgeyB9Ci0gICAgdmly
dHVhbCB+S1JlbmRlcmluZ0RldmljZVF1YXJ0eigpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlz
QnVmZmVyZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gY29udGV4dCBtYW5h
Z2VtZW50LgotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0
KCkgY29uc3Q7Ci0gICAgQ0dDb250ZXh0UmVmIGN1cnJlbnRDR0NvbnRleHQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0Rm9ySW1hZ2UoU1ZHUmVz
b3VyY2VJbWFnZSopIGNvbnN0OwotCi0gICAgLy8gUmVzb3VyY2UgY3JlYXRpb24KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8U1ZHUmVzb3VyY2U+IGNyZWF0ZVJlc291cmNlKGNvbnN0IFNWR1Jlc291
cmNlVHlwZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTVkdQYWludFNlcnZlcj4g
Y3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJUeXBlJikgY29uc3Q7Ci0gICAg
dmlydHVhbCBTVkdGaWx0ZXJFZmZlY3QgKmNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0
ZXJFZmZlY3RUeXBlJikgY29uc3Q7Ci0gICAgCi0gICAgLy8gZmlsdGVycyAobW9zdGx5IGRlYnVn
Z2luZykKLSAgICBzdGF0aWMgYm9vbCBmaWx0ZXJzRW5hYmxlZCgpOwotICAgIHN0YXRpYyB2b2lk
IHNldEZpbHRlcnNFbmFibGVkKGJvb2wpOwotICAgIHN0YXRpYyBib29sIGhhcmR3YXJlUmVuZGVy
aW5nRW5hYmxlZCgpOwotICAgIHN0YXRpYyB2b2lkIHNldEhhcmR3YXJlUmVuZGVyaW5nRW5hYmxl
ZChib29sKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNWR19T
VVBQT1JUCi0jZW5kaWYgLy8gS1JlbmRlcmluZ0RldmljZVF1YXJ0el9ICkluZGV4OiBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmNwcAkocmV2aXNpb24g
MTc5MzgpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAg
ICAgICAgICAgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2Vy
dmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2luY2x1ZGUgIlF1YXJ0elN1cHBvcnQuaCIK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIktDYW52YXNSZW5kZXJp
bmdTdHlsZS5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAid3RmL0Fzc2Vy
dGlvbnMuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUNGU3RyaW5nUmVmIENGU3RyaW5nRnJvbUNHQWZmaW5lVHJhbnNmb3JtKENHQWZmaW5l
VHJhbnNmb3JtIHQpCi17Ci0gICAgcmV0dXJuIENGU3RyaW5nQ3JlYXRlV2l0aEZvcm1hdCgwLCAw
LCBDRlNUUigiYTogJWYgYjogJWYgYzogJWYgZDogJWYgdHg6ICVmIHR5OiAlZiIpLCB0LmEsIHQu
YiwgdC5jLCB0LmQsIHQudHgsIHQudHkpOwotfQotCi1DR0FmZmluZVRyYW5zZm9ybSBDR0FmZmlu
ZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoQ0dSZWN0IHNvdXJjZSwgQ0dSZWN0IGRlc3Qp
Ci17Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1N
YWtlVHJhbnNsYXRpb24oZGVzdC5vcmlnaW4ueCAtIHNvdXJjZS5vcmlnaW4ueCwgZGVzdC5vcmln
aW4ueSAtIHNvdXJjZS5vcmlnaW4ueSk7Ci0gICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zv
cm1TY2FsZSh0cmFuc2Zvcm0sIGRlc3Quc2l6ZS53aWR0aC9zb3VyY2Uuc2l6ZS53aWR0aCwgZGVz
dC5zaXplLmhlaWdodC9zb3VyY2Uuc2l6ZS5oZWlnaHQpOwotICAgIHJldHVybiB0cmFuc2Zvcm07
Ci19Ci0KLXZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4
dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAg
ICAvKiBTaG91bGRuJ3QgYWxsIHRoZXNlIGJlIGluIHRoZSBzdHJva2UgcGFpbnRlcj8gKi8KLSAg
ICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgS1NWR1BhaW50ZXJGYWN0b3J5Ojpjc3NQ
cmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgp
LCAxLjApKTsKLQotICAgIENHQ29udGV4dFNldExpbmVDYXAoY29udGV4dCwgQ0dMaW5lQ2FwRnJv
bUtDKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKSk7Ci0gICAgQ0dDb250ZXh0U2V0TGlu
ZUpvaW4oY29udGV4dCwgQ0dMaW5lSm9pbkZyb21LQyhzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0
eWxlKCkpKTsKLQotICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQoY29udGV4dCwgc3R5bGUtPnN2
Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAgICBjb25zdCBLQ0Rhc2hBcnJheSYg
ZGFzaGVzID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUo
c3R5bGUpOwotICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpjc3NQ
cmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoT2Zm
c2V0KCksIDAuMCk7Ci0KLSAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChjb250ZXh0LCBkYXNoT2Zm
c2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKLX0KLQotQ0dDb250ZXh0UmVmIHNj
cmF0Y2hDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgQ0dDb250ZXh0UmVmIHNjcmF0Y2ggPSAwOwot
ICAgIGlmICghc2NyYXRjaCkgewotICAgICAgICBDRk11dGFibGVEYXRhUmVmIGVtcHR5ID0gQ0ZE
YXRhQ3JlYXRlTXV0YWJsZShOVUxMLCAwKTsKLSAgICAgICAgQ0dEYXRhQ29uc3VtZXJSZWYgY29u
c3VtZXIgPSBDR0RhdGFDb25zdW1lckNyZWF0ZVdpdGhDRkRhdGEoZW1wdHkpOwotICAgICAgICBz
Y3JhdGNoID0gQ0dQREZDb250ZXh0Q3JlYXRlKGNvbnN1bWVyLCBOVUxMLCBOVUxMKTsKLSAgICAg
ICAgQ0dEYXRhQ29uc3VtZXJSZWxlYXNlKGNvbnN1bWVyKTsKLSAgICAgICAgQ0ZSZWxlYXNlKGVt
cHR5KTsKLQotICAgICAgICBDR0Zsb2F0IGJsYWNrWzRdID0gezAsIDAsIDAsIDF9OwotICAgICAg
ICBDR0NvbnRleHRTZXRGaWxsQ29sb3Ioc2NyYXRjaCwgYmxhY2spOwotICAgICAgICBDR0NvbnRl
eHRTZXRTdHJva2VDb2xvcihzY3JhdGNoLCBibGFjayk7Ci0gICAgIH0KLSAgICByZXR1cm4gc2Ny
YXRjaDsKLX0KLQotRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0IFBhdGgmIHBhdGgs
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi0gewotICAg
IC8vIHRoZSBiYm94IG1pZ2h0IGdyb3cgaWYgdGhlIHBhdGggaXMgc3Ryb2tlZC4KLSAgICAvLyBh
bmQgQ0dQYXRoR2V0Qm91bmRpbmdCb3ggZG9lc24ndCBzdXBwb3J0IHRoYXQsIHNvIHdlJ2xsIGhh
dmUKLSAgICAvLyB0byBtYWtlIGFuIGFsdGVybmF0aXZlIGNhbGwuLi4KLSAKLSAgICAvLyBGSVhN
RTogc2luY2UgdGhpcyBpcyBtYWlubHkgdXNlZCB0byBkZWNpZGUgd2hhdCB0byByZXBhaW50LAot
ICAgIC8vIHBlcmhhcHMgaXQgd291bGQgYmUgc3VmZmljaWVuIHRvIGp1c3Qgb3V0c2V0IHRoZSBm
aWxsIGJib3ggYnkKLSAgICAvLyB0aGUgc3Ryb2tlIHdpZHRoIC0gdGhhdCBzaG91bGQgYmUgd2F5
IGNoZWFwZXIgYW5kIHNpbXBsZXIgdGhhbgotICAgIC8vIHdoYXQgd2UgZG8gaGVyZS4KLSAKLSAg
ICBDR1BhdGhSZWYgY2dQYXRoID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKLQotICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gc2NyYXRjaENvbnRleHQoKTsKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KGNvbnRleHQpOwotCi0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29u
dGV4dEFkZFBhdGgoY29udGV4dCwgY2dQYXRoKTsKLSAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwotICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0
aFN0cm9rZWRQYXRoKGNvbnRleHQpOwotICAgIENHUmVjdCBib3ggPSBDR0NvbnRleHRHZXRQYXRo
Qm91bmRpbmdCb3goY29udGV4dCk7Ci0gICAgICAgIAotICAgIENHQ29udGV4dFJlc3RvcmVHU3Rh
dGUoY29udGV4dCk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KGJveCk7Ci19Ci0KLX0KLQotI2Vu
ZGlmIC8vIFNWR19TVVBQT1JUCi0KSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6
L1F1YXJ0elN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1
YXJ0ei9RdWFydHpTdXBwb3J0LmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rY2FudmFz
L2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUXVhcnR6U3VwcG9ydF9ICi0jZGVm
aW5lIFF1YXJ0elN1cHBvcnRfSAotCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIHN0cnVjdCBDR1Bh
dGggKkNHTXV0YWJsZVBhdGhSZWY7Ci0KLWNsYXNzIFBhdGg7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1j
bGFzcyBSZW5kZXJTdHlsZTsKLWNsYXNzIFJlbmRlck9iamVjdDsKLQotQ0ZTdHJpbmdSZWYgQ0ZT
dHJpbmdGcm9tQ0dQYXRoKENHUGF0aFJlZik7Ci1DRlN0cmluZ1JlZiBDRlN0cmluZ0Zyb21DR0Fm
ZmluZVRyYW5zZm9ybShDR0FmZmluZVRyYW5zZm9ybSk7Ci1DR0FmZmluZVRyYW5zZm9ybSBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoQ0dSZWN0IHNvdXJjZSwgQ0dSZWN0IGRl
c3QpOwotCi12b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoQ0dDb250ZXh0UmVmLCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOwotCi1DR0NvbnRleHRSZWYgc2NyYXRjaENv
bnRleHQoKTsKLUZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveChjb25zdCBQYXRoJiBwYXRoLCBS
ZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOwotCi1zdGF0aWMgaW5saW5lIENHTGlu
ZUNhcCBDR0xpbmVDYXBGcm9tS0MoTGluZUNhcCBjYXApCi17Ci0gICAgaWYgKGNhcCA9PSBCdXR0
Q2FwKQotICAgICAgICByZXR1cm4ga0NHTGluZUNhcEJ1dHQ7Ci0gICAgZWxzZSBpZiAoY2FwID09
IFJvdW5kQ2FwKQotICAgICAgICByZXR1cm4ga0NHTGluZUNhcFJvdW5kOwotICAgIGVsc2UgaWYg
KGNhcCA9PSBTcXVhcmVDYXApCi0gICAgICAgIHJldHVybiBrQ0dMaW5lQ2FwU3F1YXJlOwotICAg
IAotICAgIHJldHVybiBrQ0dMaW5lQ2FwQnV0dDsKLX0KLQotc3RhdGljIGlubGluZSBDR0xpbmVK
b2luIENHTGluZUpvaW5Gcm9tS0MoTGluZUpvaW4gam9pbikKLXsKLSAgICBpZiAoam9pbiA9PSBN
aXRlckpvaW4pCi0gICAgICAgIHJldHVybiBrQ0dMaW5lSm9pbk1pdGVyOwotICAgIGVsc2UgaWYg
KGpvaW4gPT0gUm91bmRKb2luKQotICAgICAgICByZXR1cm4ga0NHTGluZUpvaW5Sb3VuZDsKLSAg
ICBlbHNlIGlmIChqb2luID09IEJldmVsSm9pbikKLSAgICAgICAgcmV0dXJuIGtDR0xpbmVKb2lu
QmV2ZWw7Ci0gICAgCi0gICAgcmV0dXJuIGtDR0xpbmVKb2luTWl0ZXI7Ci19Ci0KLX0KLQotI2Vu
ZGlmIC8vIFNWR19TVVBQT1JUCi0jZW5kaWYgLy8gIVF1YXJ0elN1cHBvcnRfSApJbmRleDogV2Vi
Q29yZS9rc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDE3
OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgog
I2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIKICNpbmNsdWRlICJTVkdQYWludFNl
cnZlclNvbGlkLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCkBAIC00NCw3ICs0Myw3IEBA
IHN0YXRpYyBTVkdQYWludFNlcnZlclNvbGlkKiBzaGFyZWRTb2xpZFAKIHsKICAgICBzdGF0aWMg
U1ZHUGFpbnRTZXJ2ZXJTb2xpZCogX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIgPSAwOwogICAgIGlm
ICghX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIpCi0gICAgICAgIF9zaGFyZWRTb2xpZFBhaW50U2Vy
dmVyID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJTb2xpZCo+KHJlbmRlcmluZ0RldmljZSgp
LT5jcmVhdGVQYWludFNlcnZlcihTb2xpZFBhaW50U2VydmVyKS5yZWxlYXNlUmVmKCkpOworICAg
ICAgICBfc2hhcmVkU29saWRQYWludFNlcnZlciA9IG5ldyBTVkdQYWludFNlcnZlclNvbGlkKCk7
CiAgICAgcmV0dXJuIF9zaGFyZWRTb2xpZFBhaW50U2VydmVyOwogfQogCkluZGV4OiBXZWJDb3Jl
L2tzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5oCShyZXZpc2lvbiAxNzkzOCkKKysr
IFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRG
T1JNKENHKQotI2luY2x1ZGUgIlF1YXJ0elN1cHBvcnQuaCIKKyNpbmNsdWRlICJDZ1N1cHBvcnQu
aCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsNiBAQAogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0j
aW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdD
bGlwUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Ns
aXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAog
I2luY2x1ZGUgIlNWR0NsaXBQYXRoRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
I2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDggKzI0LDggQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZFQmxlbmRF
bGVtZW50LmgiCiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZH
SGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmkKIFNWR0ZFQmxlbmQqIFNWR0ZFQmxlbmRFbGVtZW50OjpmaWx0ZXJFZmZlY3Qo
KSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZm
ZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVCbGVuZCo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVG
aWx0ZXJFZmZlY3QoRkVfQkxFTkQpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNf
Y2FzdDxTVkdGRUJsZW5kKj4oU1ZHUmVzb3VyY2VGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChG
RV9CTEVORCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCbGVuZE1vZGUoKFNWR0JsZW5kTW9kZVR5cGUpIG1vZGUo
KSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTMgKzIxLDE0IEBACiAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAj
aW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdOdW1iZXJMaXN0LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC03Miw3ICs3Myw3IEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQ6OnBhcnNlTWFwcGUKIFNWR0ZFQ29sb3JNYXRyaXgqIFNWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0g
ICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVDb2xvck1hdHJpeCo+KHJl
bmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfQ09MT1JfTUFUUklYKSk7Cisg
ICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVDb2xvck1hdHJpeCo+KFNW
R1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfQ09MT1JfTUFUUklYKSk7CiAg
ICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIApAQCAt
OTMsNiArOTQsNiBAQCBTVkdGRUNvbG9yTWF0cml4KiBTVkdGRUNvbG9yTWF0cml4RWxlbWVuCiAK
IH0KIAotLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKKy8vIHZpbTp0
cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwyMyArMjEsMjMgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpZmRlZiBTVkdfU1VQ
UE9SVAotI2luY2x1ZGUgIkF0dHIuaCIKIAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIK
KyNpZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50LmgiCiAKKyNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
IlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVGdW5jUkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRUZ1bmNHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZF
RnVuY0JFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVGdW5jQUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdSZXNvdXJjZUZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50OjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQ6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQogICAgICwgbV9maWx0ZXJFZmZlY3Qo
MCkKIHsKQEAgLTUwLDcgKzUwLDcgQEAgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6On5T
VkdGRUNvbQogCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4xLCBpbjEsIFNWR05hbWVz
OjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4xKQogCi12b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2
b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQpAQCAt
NTksMTAgKzU5LDEwIEBAIHZvaWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnMK
ICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotU1ZHRkVDb21wb25lbnRUcmFuc2ZlciAqU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CitTVkdGRUNvbXBvbmVu
dFRyYW5zZmVyKiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVj
dCA9IHN0YXRpY19jYXN0PFNWR0ZFQ29tcG9uZW50VHJhbnNmZXIgKj4ocmVuZGVyaW5nRGV2aWNl
KCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT01QT05FTlRfVFJBTlNGRVIpKTsKKyAgICAgICAg
bV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRUNvbXBvbmVudFRyYW5zZmVyKj4oU1ZH
UmVzb3VyY2VGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT01QT05FTlRfVFJBTlNGRVIp
KTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAg
LTcxLDEzICs3MSwxMyBAQCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyICpTVkdGRUNvbXBvbmVudFRy
CiAgICAgCiAgICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZUZ1
bmNSVGFnKSkKLSAgICAgICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRSZWRGdW5jdGlvbihzdGF0
aWNfY2FzdDxTVkdGRUZ1bmNSRWxlbWVudCAqPihuKS0+dHJhbnNmZXJGdW5jdGlvbigpKTsKKyAg
ICAgICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRSZWRGdW5jdGlvbihzdGF0aWNfY2FzdDxTVkdG
RUZ1bmNSRWxlbWVudCo+KG4pLT50cmFuc2ZlckZ1bmN0aW9uKCkpOwogICAgICAgICBlbHNlIGlm
IChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZUZ1bmNHVGFnKSkKLSAgICAgICAgICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRHcmVlbkZ1bmN0aW9uKHN0YXRpY19jYXN0PFNWR0ZFRnVuY0dFbGVtZW50
ICo+KG4pLT50cmFuc2ZlckZ1bmN0aW9uKCkpOworICAgICAgICAgICAgbV9maWx0ZXJFZmZlY3Qt
PnNldEdyZWVuRnVuY3Rpb24oc3RhdGljX2Nhc3Q8U1ZHRkVGdW5jR0VsZW1lbnQqPihuKS0+dHJh
bnNmZXJGdW5jdGlvbigpKTsKICAgICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShTVkdOYW1l
czo6ZmVGdW5jQlRhZykpCi0gICAgICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0Qmx1ZUZ1bmN0
aW9uKHN0YXRpY19jYXN0PFNWR0ZFRnVuY0JFbGVtZW50ICo+KG4pLT50cmFuc2ZlckZ1bmN0aW9u
KCkpOworICAgICAgICAgICAgbV9maWx0ZXJFZmZlY3QtPnNldEJsdWVGdW5jdGlvbihzdGF0aWNf
Y2FzdDxTVkdGRUZ1bmNCRWxlbWVudCo+KG4pLT50cmFuc2ZlckZ1bmN0aW9uKCkpOwogICAgICAg
ICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZUZ1bmNBVGFnKSkKLSAgICAgICAg
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRBbHBoYUZ1bmN0aW9uKHN0YXRpY19jYXN0PFNWR0ZFRnVu
Y0FFbGVtZW50ICo+KG4pLT50cmFuc2ZlckZ1bmN0aW9uKCkpOworICAgICAgICAgICAgbV9maWx0
ZXJFZmZlY3QtPnNldEFscGhhRnVuY3Rpb24oc3RhdGljX2Nhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQq
PihuKS0+dHJhbnNmZXJGdW5jdGlvbigpKTsKICAgICB9CiAKICAgICByZXR1cm4gbV9maWx0ZXJF
ZmZlY3Q7CkBAIC04NSw2ICs4NSw2IEBAIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXIgKlNWR0ZFQ29t
cG9uZW50VHIKIAogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQK
IAorLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE2ICsyMSwxNyBA
QAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNs
dWRlICJTVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZp
Y2UuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2lu
Y2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZH
RkVDb21wb3NpdGVFbGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZH
RkVDb21wb3NpdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MpCiAgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFt
ZSwgZG9jKQogICAgICwgbV9fb3BlcmF0b3IoMCkKICAgICAsIG1fazEoMC4wKQpAQCAtODgsMTAg
Kzg5LDEwIEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZU1hcHBlZEEKICAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKIH0KIAotU1ZHRkVDb21wb3NpdGUgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6
ZmlsdGVyRWZmZWN0KCkgY29uc3QKK1NWR0ZFQ29tcG9zaXRlKiBTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAg
ICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRUNvbXBvc2l0ZSAqPihyZW5k
ZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0NPTVBPU0lURSkpOworICAgICAg
ICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFQ29tcG9zaXRlKj4oU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT01QT1NJVEUpKTsKICAgICBpZiAoIW1f
ZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
T3BlcmF0aW9uKChTVkdDb21wb3NpdGVPcGVyYXRpb25UeXBlKSBfb3BlcmF0b3IoKSk7CkBAIC0x
MDcsNiArMTA4LDYgQEAgU1ZHRkVDb21wb3NpdGUgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6Zgog
CiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCisvLyB2aW06
dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMjEg
KzIwLDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZmRlZiBTVkdfU1VQUE9SVAotCiAj
aW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRy
LmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0NvbG9yLmgi
CiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5j
bHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dDo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MpCitTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OlNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jKQogICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05h
bWUsIGRvYykKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KDAuMCkKICAgICAsIG1fc3VyZmFjZVNj
YWxlKDAuMCkKQEAgLTc5LDE2ICs3OCwxOSBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudDo6cGFyc2VNCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLVNWR0ZpbHRlckVmZmVjdCAqU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAorU1ZHRmlsdGVy
RWZmZWN0KiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkgCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0g
c3RhdGljX2Nhc3Q8U1ZHRkVEaWZmdXNlTGlnaHRpbmcgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNy
ZWF0ZUZpbHRlckVmZmVjdChGRV9ESUZGVVNFX0xJR0hUSU5HKSk7CisgICAgICAgIG1fZmlsdGVy
RWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVEaWZmdXNlTGlnaHRpbmcqPihTVkdSZXNvdXJjZUZp
bHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0RJRkZVU0VfTElHSFRJTkcpKTsKKyAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQorICAgICAgICByZXR1cm4gMDsKKwogICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRJbihpbjEoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0
KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RGlmZnVzZUNvbnN0YW50KChkaWZmdXNlQ29uc3Rh
bnQoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZhY2VTY2Fs
ZSgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxV
bml0TGVuZ3RoWCgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZ
KChrZXJuZWxVbml0TGVuZ3RoWSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldERpZmZ1c2VD
b25zdGFudChkaWZmdXNlQ29uc3RhbnQoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFN1cmZh
Y2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVu
aXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRL
ZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSgpKTsKICAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0TGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKCktPmNvbG9yKCkpOwogICAgIHVwZGF0
ZUxpZ2h0cygpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKQEAgLTk5LDE0ICsxMDEsMTcg
QEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnVwZGF0ZQogICAgIGlmICghbV9m
aWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTVkdMaWdodFNvdXJjZSAq
bGlnaHQgPSAwOwotICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZlRGlz
dGFudExpZ2h0VGFnKXx8bi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVQb2ludExpZ2h0VGFnKXx8
bi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVTcG90TGlnaHRUYWcpKSB7Ci0gICAgICAgICAgICBT
VkdGRUxpZ2h0RWxlbWVudCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1l
bnQgKj4obik7IAorICAgIFNWR0xpZ2h0U291cmNlKiBsaWdodCA9IDA7CisgICAgZm9yIChOb2Rl
KiBuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBp
ZiAobi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVEaXN0YW50TGlnaHRUYWcpIHx8CisgICAgICAg
ICAgICBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZVBvaW50TGlnaHRUYWcpIHx8CisgICAgICAg
ICAgICBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZVNwb3RMaWdodFRhZykpIHsKKyAgICAgICAg
ICAgIFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodE5vZGUgPSBzdGF0aWNfY2FzdDxTVkdGRUxpZ2h0
RWxlbWVudCo+KG4pOyAKICAgICAgICAgICAgIGxpZ2h0ID0gbGlnaHROb2RlLT5saWdodFNvdXJj
ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKICAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0TGlnaHRTb3VyY2UobGlnaHQpOwogfQogCkBAIC0xMTQsMyArMTE5LDQgQEAg
dm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnVwZGF0ZQogCiAjZW5kaWYgLy8gU1ZH
X1NVUFBPUlQKIAorLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5LDExICsxOSwxMiBAQAogCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwog
I2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmgiCiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC04MSwxMSArODIsMTEgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6
OnBhcnNlTQogU1ZHRkVEaXNwbGFjZW1lbnRNYXAqIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAg
ICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFRGlzcGxhY2VtZW50TWFwICo+
KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElTUExBQ0VNRU5UX01B
UCkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwKj4oU1ZHUmVzb3VyY2VGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9ESVNQTEFD
RU1FTlRfTUFQKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFhDaGFubmVsU2VsZWN0b3IoKFNWR0NoYW5uZWxTZWxl
Y3RvclR5cGUpKHhDaGFubmVsU2VsZWN0b3IoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRZ
Q2hhbm5lbFNlbGVjdG9yKChTVkdDaGFubmVsU2VsZWN0b3JUeXBlKSh5Q2hhbm5lbFNlbGVjdG9y
KCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0WENoYW5uZWxTZWxlY3RvcigoU1ZHQ2hhbm5l
bFNlbGVjdG9yVHlwZSkgeENoYW5uZWxTZWxlY3RvcigpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0WUNoYW5uZWxTZWxlY3RvcigoU1ZHQ2hhbm5lbFNlbGVjdG9yVHlwZSkgeUNoYW5uZWxTZWxl
Y3RvcigpKTsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4xKCkpOwogICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRJbjIoaW4yKCkpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTY2FsZShzY2Fs
ZSgpKTsKQEAgLTk0LDQgKzk1LDcgQEAgU1ZHRkVEaXNwbGFjZW1lbnRNYXAqIFNWR0ZFRGlzcGxh
Y2VtZW50TQogfQogCiB9CisKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAorCisvLyB2aW06dHM9NDpu
b2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaXN0YW50
TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsMTQgKzE4LDE1IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJT
VkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdEaXN0YW50TGlnaHRTb3Vy
Y2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6
OlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCAqZG9jKSA6IAotU1ZHRkVMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHRkVE
aXN0YW50TGlnaHRFbGVtZW50OjpTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykgOiAKKyAgICBTVkdGRUxpZ2h0RWxlbWVu
dCh0YWdOYW1lLCBkb2MpCiB7CiB9CiAKQEAgLTMzLDcgKzM0LDcgQEAgU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50Ojp+U1ZHRkVEaXN0YW50TAogewogfQogCi1TVkdMaWdodFNvdXJjZSAqU1ZHRkVE
aXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CitTVkdMaWdodFNvdXJjZSog
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG5ldyBTVkdEaXN0YW50TGlnaHRTb3VyY2UoYXppbXV0aCgpLCBlbGV2YXRpb24oKSk7CiB9
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAj
aWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRUZsb29kRWxlbWVudC5oIgogCkBAIC0y
OSwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0Rl
dmljZS5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU1ZHRkVGbG9vZEVsZW1lbnQ6OlNWR0ZFRmxvb2RFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdGRUZsb29kRWxlbWVudDo6U1ZH
RkVGbG9vZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YykKICAgICA6IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBk
b2MpCiAgICAgLCBtX2ZpbHRlckVmZmVjdCgwKQogewpAQCAtNDYsNyArNDcsNyBAQCBTVkdGRUZs
b29kRWxlbWVudDo6flNWR0ZFRmxvb2RFbGVtZW50KCkKIAogQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHRkVGbG9vZEVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIEluMSwg
aW4xLCBTVkdOYW1lczo6aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luMSkKIAotdm9pZCBTVkdGRUZs
b29kRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQor
dm9pZCBTVkdGRUZsb29kRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKiBhdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwog
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKQEAgLTU1LDE2ICs1Niwx
NiBAQCB2b2lkIFNWR0ZFRmxvb2RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiB9CiAKLVNWR0ZFRmxvb2QgKlNWR0ZFRmxvb2RFbGVtZW50OjpmaWx0ZXJFZmZlY3Qo
KSBjb25zdAorU1ZHRkVGbG9vZCogU1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAgICAgICAgbV9maWx0ZXJFZmZlY3Qg
PSBzdGF0aWNfY2FzdDxTVkdGRUZsb29kICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfRkxPT0QpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2Fz
dDxTVkdGRUZsb29kKj4oU1ZHUmVzb3VyY2VGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9G
TE9PRCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRJbihpbjEoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVz
KG1fZmlsdGVyRWZmZWN0KTsKLSAgICBSZW5kZXJTdHlsZSAqZmlsdGVyU3R5bGUgPSBjb25zdF9j
YXN0PFNWR0ZFRmxvb2RFbGVtZW50ICo+KHRoaXMpLT5zdHlsZUZvclJlbmRlcmVyKHBhcmVudE5v
ZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUgKnN2Z1N0eWxlID0g
ZmlsdGVyU3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUqIGZpbHRlclN0eWxlID0g
Y29uc3RfY2FzdDxTVkdGRUZsb29kRWxlbWVudCAqPih0aGlzKS0+c3R5bGVGb3JSZW5kZXJlcihw
YXJlbnROb2RlKCktPnJlbmRlcmVyKCkpOworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdT
dHlsZSA9IGZpbHRlclN0eWxlLT5zdmdTdHlsZSgpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRG
bG9vZENvbG9yKHN2Z1N0eWxlLT5mbG9vZENvbG9yKCkpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRGbG9vZE9wYWNpdHkoc3ZnU3R5bGUtPmZsb29kT3BhY2l0eSgpKTsKICAgICBmaWx0ZXJTdHls
ZS0+ZGVyZWYodmlldygpLT5yZW5kZXJBcmVuYSgpKTsKQEAgLTc0LDYgKzc1LDYgQEAgU1ZHRkVG
bG9vZCAqU1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZgogCiB9CiAKLS8vIHZpbTp0cz00Om5v
ZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jQUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY0FFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEsNiArMjEsNyBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NV
UFBPUlQKICNpbmNsdWRlICJTVkdGRUZ1bmNBRWxlbWVudC5oIgogCkBAIC0zNyw2ICszOCw2IEBA
IFNWR0ZFRnVuY0FFbGVtZW50Ojp+U1ZHRkVGdW5jQUVsZW1lbnQoKQogCiB9CiAKLS8vIHZpbTp0
cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCisvLyB2aW06dHM9NDpub2V0CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNCRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jQkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY0JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNiArMjEsNyBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYg
U1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRUZ1bmNCRWxlbWVudC5oIgogCkBAIC0zNyw2ICsz
OCw2IEBAIFNWR0ZFRnVuY0JFbGVtZW50Ojp+U1ZHRkVGdW5jQkVsZW1lbnQoKQogCiB9CiAKLS8v
IHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCisvLyB2aW06dHM9NDpub2V0
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNHRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY0dFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsMTMgKzIxLDE0IEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisK
ICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZFRnVuY0dFbGVtZW50LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHRkVGdW5jR0VsZW1lbnQ6OlNWR0ZFRnVuY0dFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpIDogCi1TVkdDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zNyw2
ICszOCw2IEBAIFNWR0ZFRnVuY0dFbGVtZW50Ojp+U1ZHRkVGdW5jR0VsZW1lbnQoKQogCiB9CiAK
LS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCisvLyB2aW06dHM9NDpu
b2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNSRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jUkVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY1JFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
CiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRUZ1bmNSRWxlbWVudC5oIgogCkBA
IC0zNyw2ICszOCw2IEBAIFNWR0ZFRnVuY1JFbGVtZW50Ojp+U1ZHRkVGdW5jUkVsZW1lbnQoKQog
CiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCisvLyB2aW06
dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTIgKzIxLDEzIEBA
CiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1
ZGUgIlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0Rl
dmljZS5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisj
aW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC03MCw3ICs3MSw3IEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwYXJzZU1hcHAK
IFNWR0ZFR2F1c3NpYW5CbHVyKiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVj
dCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRUdhdXNzaWFuQmx1cio+KHJlbmRlcmluZ0RldmljZSgp
LT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfR0FVU1NJQU5fQkxVUikpOworICAgICAgICBtX2ZpbHRl
ckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFR2F1c3NpYW5CbHVyKj4oU1ZHUmVzb3VyY2VGaWx0
ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9HQVVTU0lBTl9CTFVSKSk7CiAgICAgaWYgKCFtX2Zp
bHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldElu
KGluMSgpKTsKQEAgLTgyLDYgKzgzLDYgQEAgU1ZHRkVHYXVzc2lhbkJsdXIqIFNWR0ZFR2F1c3Np
YW5CbHVyRWxlbQogCiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9S
VAogCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRUlt
YWdlRWxlbWVudC5oIgogCkBAIC0yOSwxNSArMzAsMTUgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlSW1hZ2UuaCIK
LSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAj
aW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGRUltYWdlRWxlbWVudDo6U1ZHRkVJbWFnZUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0ZF
SW1hZ2VFbGVtZW50OjpTVkdGRUltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzKHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCiAgICAgLCBTVkdM
YW5nU3BhY2UoKQpAQCAtNTcsNyArNTgsNyBAQCBTVkdGRUltYWdlRWxlbWVudDo6flNWR0ZFSW1h
Z2VFbGVtZW50KCkKIAogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVJbWFnZUVs
ZW1lbnQsIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlv
LCBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIubG9jYWxOYW1lKCksIG1fcHJlc2Vy
dmVBc3BlY3RSYXRpby5nZXQoKSkKIAotdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdGRUltYWdlRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQpAQCAtODAsMTYgKzgxLDE2IEBA
IHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICB9CiB9CiAKLXZv
aWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlICpmaW5p
c2hlZE9iaikKK3ZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJl
c291cmNlKiBmaW5pc2hlZE9iaikKIHsKICAgICBpZiAoZmluaXNoZWRPYmogPT0gbV9jYWNoZWRJ
bWFnZSAmJiBmaWx0ZXJFZmZlY3QoKSkKICAgICAgICAgZmlsdGVyRWZmZWN0KCktPnNldENhY2hl
ZEltYWdlKG1fY2FjaGVkSW1hZ2UpOwogfQogCi1TVkdGRUltYWdlICpTVkdGRUltYWdlRWxlbWVu
dDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKK1NWR0ZFSW1hZ2UqIFNWR0ZFSW1hZ2VFbGVtZW50Ojpm
aWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAg
IG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVJbWFnZSAqPihyZW5kZXJpbmdEZXZp
Y2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0lNQUdFKSk7CisgICAgICAgIG1fZmlsdGVyRWZm
ZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVJbWFnZSo+KFNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVG
aWx0ZXJFZmZlY3QoRkVfSU1BR0UpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAg
ICByZXR1cm4gMDsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwpA
QCAtOTgsNiArOTksNiBAQCBTVkdGRUltYWdlICpTVkdGRUltYWdlRWxlbWVudDo6ZmlsdGVyRWZm
CiAKIH0KIAotLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKKy8vIHZp
bTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw3IEBACiAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50
LmgiCiAKQEAgLTkwLDMgKzkxLDQgQEAgdm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaQogCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAorLy8gdmltOnRzPTQ6bm9ldApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5Mzgp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDEyICsyMSwxMyBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRU1lcmdlRWxlbWVudC5oIgogCi0jaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNyArNDUsNyBAQCBTVkdGRU1lcmdlRWxl
bWVudDo6flNWR0ZFTWVyZ2VFbGVtZW50KCkKIFNWR0ZFTWVyZ2UqIFNWR0ZFTWVyZ2VFbGVtZW50
OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAg
ICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVNZXJnZSo+KHJlbmRlcmluZ0Rl
dmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfTUVSR0UpKTsKKyAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRU1lcmdlKj4oU1ZHUmVzb3VyY2VGaWx0ZXI6OmNyZWF0
ZUZpbHRlckVmZmVjdChGRV9NRVJHRSkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7
CkBAIC01NiwxMiArNTcsMTIgQEAgU1ZHRkVNZXJnZSogU1ZHRkVNZXJnZUVsZW1lbnQ6OmZpbHRl
ckVmZgogICAgIH0KIAogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRNZXJnZUlucHV0cyhtZXJnZUlu
cHV0cyk7Ci0KICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAKIH0KIAotLy8gdmltOnRz
PTQ6bm9ldAorCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAorLy8gdmltOnRzPTQ6bm9ldApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50
LmgiCiAKQEAgLTUwLDYgKzUxLDYgQEAgdm9pZCBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQQogCiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAog
CisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTggKzIxLDE4IEBACiAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgi
CiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNp
bmNsdWRlICJTVkdGRU9mZnNldEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNs
dWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
IlNWR0ZFT2Zmc2V0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRkVPZmZzZXRFbGVtZW50OjpTVkdGRU9mZnNldEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0ZF
T2Zmc2V0RWxlbWVudDo6U1ZHRkVPZmZzZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXModGFnTmFtZSwgZG9jKQogICAgICwgbV9keCgwLjApCiAgICAgLCBtX2R5KDAuMCkK
QEAgLTQ5LDcgKzQ5LDcgQEAgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVPZmZz
ZQogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVPZmZzZXRFbGVtZW50LCBkb3Vi
bGUsIE51bWJlciwgbnVtYmVyLCBEeCwgZHgsIFNWR05hbWVzOjpkeEF0dHIubG9jYWxOYW1lKCks
IG1fZHgpCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRU9mZnNldEVsZW1lbnQs
IGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIER5LCBkeSwgU1ZHTmFtZXM6OmR5QXR0ci5sb2NhbE5h
bWUoKSwgbV9keSkKIAotdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgY29uc3QgU3Ry
aW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6ZHhBdHRyKQpAQCAtNjIsMTAgKzYyLDEwIEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHIKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotU1ZHRkVPZmZzZXQgKlNW
R0ZFT2Zmc2V0RWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKK1NWR0ZFT2Zmc2V0KiBTVkdG
RU9mZnNldEVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRl
ckVmZmVjdCkKLSAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRU9mZnNl
dCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX09GRlNFVCkpOwor
ICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFT2Zmc2V0Kj4oU1ZHUmVz
b3VyY2VGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9PRkZTRVQpKTsKICAgICBpZiAoIW1f
ZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
SW4oaW4xKCkpOwpAQCAtNzcsNiArNzcsNiBAQCBTVkdGRU9mZnNldCAqU1ZHRkVPZmZzZXRFbGVt
ZW50OjpmaWx0ZXJFCiAKIH0KIAotLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCiAKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFUG9p
bnRMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
UG9pbnRMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsx
OCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQK
ICNpbmNsdWRlICJTVkdGRVBvaW50TGlnaHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnRM
aWdodFNvdXJjZS5oIgpAQCAtMzMsMTIgKzM0LDE0IEBAIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6
On5TVkdGRVBvaW50TGlnaHQKIHsKIH0KIAotU1ZHTGlnaHRTb3VyY2UgKlNWR0ZFUG9pbnRMaWdo
dEVsZW1lbnQ6OmxpZ2h0U291cmNlKCkgY29uc3QKK1NWR0xpZ2h0U291cmNlKiBTVkdGRVBvaW50
TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludDNEIHBv
cyh4KCksIHkoKSwgeigpKTsKICAgICByZXR1cm4gbmV3IFNWR1BvaW50TGlnaHRTb3VyY2UocG9z
KTsKIH0KIAogfQorCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAorLy8gdmltOnRzPTQ6bm9ldApJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDE0ICsyMCwxNSBA
QAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNs
dWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJLUmVuZGVy
aW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0zNiw3ICszNyw3IEBAIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OlNWR0ZFU3Bl
Y3UKICAgICAsIG1fc3BlY3VsYXJDb25zdGFudCgwLjApCiAgICAgLCBtX3NwZWN1bGFyRXhwb25l
bnQoMC4wKQogICAgICwgbV9zdXJmYWNlU2NhbGUoMC4wKQotICAgICwgbV9saWdodGluZ0NvbG9y
KG5ldyBTVkdDb2xvcigpKQorICAgICwgbV9saWdodGluZ0NvbG9yKG5ldyBTVkdDb2xvcikKICAg
ICAsIG1fa2VybmVsVW5pdExlbmd0aFgoMC4wKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWSgw
LjApCiAgICAgLCBtX2ZpbHRlckVmZmVjdCgwKQpAQCAtODMsNyArODQsOSBAQCB2b2lkIFNWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNlCiBTVkdGRVNwZWN1bGFyTGlnaHRpbmcqIFNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2ZpbHRlckVmZmVjdCkgCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nh
c3Q8U1ZHRkVTcGVjdWxhckxpZ2h0aW5nKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRl
ckVmZmVjdChGRV9TUEVDVUxBUl9MSUdIVElORykpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9
IHN0YXRpY19jYXN0PFNWR0ZFU3BlY3VsYXJMaWdodGluZyo+KFNWR1Jlc291cmNlRmlsdGVyOjpj
cmVhdGVGaWx0ZXJFZmZlY3QoRkVfU1BFQ1VMQVJfTElHSFRJTkcpKTsKKwlpZiAoIW1fZmlsdGVy
RWZmZWN0KQorCQlyZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4xKCkpOwog
ICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgbV9maWx0ZXJF
ZmZlY3QtPnNldFNwZWN1bGFyQ29uc3RhbnQoKHNwZWN1bGFyQ29uc3RhbnQoKSkpOwpAQCAtMTAz
LDcgKzEwNiw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6dXBkYXQKIAog
ICAgIFNWR0xpZ2h0U291cmNlKiBsaWdodCA9IDA7ICAgIAogICAgIGZvciAoTm9kZSogbiA9IGZp
cnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmZlRGlzdGFudExpZ2h0VGFnKXx8bi0+aGFzVGFnTmFtZShTVkdO
YW1lczo6ZmVQb2ludExpZ2h0VGFnKXx8bi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVTcG90TGln
aHRUYWcpKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZURpc3RhbnRM
aWdodFRhZykgfHwgCisJCQluLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZVBvaW50TGlnaHRUYWcp
IHx8CisJCQluLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZVNwb3RMaWdodFRhZykpIHsKICAgICAg
ICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodE5vZGUgPSBzdGF0aWNfY2FzdDxTVkdGRUxp
Z2h0RWxlbWVudCo+KG4pOyAKICAgICAgICAgICAgIGxpZ2h0ID0gbGlnaHROb2RlLT5saWdodFNv
dXJjZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTYsMyArMTIxLDQgQEAgdm9pZCBTVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Ojp1cGRhdAogCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQK
IAorLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcG90TGln
aHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVNwb3RM
aWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDE0ICsxOCwxNSBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5j
bHVkZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3BvdExpZ2h0U291
cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpT
VkdGRVNwb3RMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQgKmRvYykgOiAKLVNWR0ZFTGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvYykKK1NWR0ZFU3BvdExp
Z2h0RWxlbWVudDo6U1ZHRkVTcG90TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBTVkdGRUxpZ2h0RWxlbWVudCh0YWdOYW1lLCBk
b2MpCiB7CiB9CiAKQEAgLTMzLDEwICszNCwxMSBAQCBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6On5T
VkdGRVNwb3RMaWdodEVsCiB7CiB9CiAKLVNWR0xpZ2h0U291cmNlICpTVkdGRVNwb3RMaWdodEVs
ZW1lbnQ6OmxpZ2h0U291cmNlKCkgY29uc3QKK1NWR0xpZ2h0U291cmNlKiBTVkdGRVNwb3RMaWdo
dEVsZW1lbnQ6OmxpZ2h0U291cmNlKCkgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zKHgo
KSwgeSgpLCB6KCkpOwotICAgIC8vY29udmVydCBsb29rQXQgdG8gYSBkaXJlY3Rpb24KKworCS8v
IGNvbnZlcnQgbG9va0F0IHRvIGEgZGlyZWN0aW9uCiAgICAgRmxvYXRQb2ludDNEIGRpcmVjdGlv
bihwb2ludHNBdFgoKSAtIHBvcy54KCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b2ludHNBdFkoKSAtIHBvcy55KCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2lu
dHNBdFooKSAtIHBvcy56KCkpOwpAQCAtNDUsNSArNDcsNyBAQCBTVkdMaWdodFNvdXJjZSAqU1ZH
RkVTcG90TGlnaHRFbGVtZW50OjpsCiB9CiAKIH0KKwogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAK
Ky8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNyArMjMsMTYgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKIAogI2lmZGVmIFNWR19TVVBQT1JUCi0KICNpbmNsdWRlICJTVkdGRVRpbGVFbGVtZW50
LmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgog
I2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5j
bHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdG
RVRpbGVFbGVtZW50OjpTVkdGRVRpbGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MpCitTVkdGRVRpbGVFbGVtZW50OjpTVkdGRVRpbGVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQogICAgICwgbV9maWx0
ZXJFZmZlY3QoMCkKIHsKQEAgLTQ2LDcgKzQ1LDcgQEAgU1ZHRkVUaWxlRWxlbWVudDo6flNWR0ZF
VGlsZUVsZW1lbnQoKQogCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVRpbGVF
bGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBJbjEsIGluMSwgU1ZHTmFtZXM6OmluQXR0
ci5sb2NhbE5hbWUoKSwgbV9pbjEpCiAKLXZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdGRVRpbGVFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgY29u
c3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aW5BdHRyKQpAQCAtNTUsMTAgKzU0LDEwIEBAIHZvaWQgU1ZHRkVUaWxlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotU1ZHRkVUaWxl
ICpTVkdGRVRpbGVFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAorU1ZHRkVUaWxlKiBTVkdG
RVRpbGVFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJF
ZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVUaWxlICo+
KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfVElMRSkpOworICAgICAg
ICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFVGlsZSo+KFNWR1Jlc291cmNlRmls
dGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfVElMRSkpOwogICAgIGlmICghbV9maWx0ZXJFZmZl
Y3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihpbjEoKSk7
CkBAIC02OCw2ICs2Nyw2IEBAIFNWR0ZFVGlsZSAqU1ZHRkVUaWxlRWxlbWVudDo6ZmlsdGVyRWZm
ZWMKIAogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAorLy8g
dmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVU
dXJidWxlbmNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSwxMCBAQAog
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRl
ICJTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgiCi0KLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNl
LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VN
YXBwZWQKIFNWR0ZFVHVyYnVsZW5jZSogU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6ZmlsdGVyRWZm
ZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRl
ckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFVHVyYnVsZW5jZSo+KHJlbmRlcmluZ0RldmljZSgp
LT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfVFVSQlVMRU5DRSkpOworICAgICAgICBtX2ZpbHRlckVm
ZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFVHVyYnVsZW5jZSo+KFNWR1Jlc291cmNlRmlsdGVyOjpj
cmVhdGVGaWx0ZXJFZmZlY3QoRkVfVFVSQlVMRU5DRSkpOwogICAgIGlmICghbV9maWx0ZXJFZmZl
Y3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIApAQCAtOTksNiArOTksNiBAQCBTVkdGRVR1cmJ1
bGVuY2UqIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6CiAKIH0KIAotLy8gdmltOnRzPTQ6bm9ldAog
I2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMSAr
MjIsMTEgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JU
CiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0ci5oIgotI2lu
Y2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5o
IgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2lu
Y2x1ZGUgIlNWR0hlbHBlci5oIgpAQCAtMTEzLDcgKzExMyw3IEBAIFNWR1Jlc291cmNlKiBTVkdG
aWx0ZXJFbGVtZW50OjpjYW52YXNSZXMKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1f
ZmlsdGVyKQotICAgICAgICBtX2ZpbHRlciA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdS
ZXNvdXJjZUZpbHRlcj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKEZpbHRlclJl
c291cmNlVHlwZSkpOworICAgICAgICBtX2ZpbHRlciA9IG5ldyBTVkdSZXNvdXJjZUZpbHRlcigp
OwogCiAgICAgYm9vbCBmaWx0ZXJCQm94TW9kZSA9IGZpbHRlclVuaXRzKCkgPT0gU1ZHVW5pdFR5
cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogICAgIG1fZmlsdGVyLT5zZXRG
aWx0ZXJCb3VuZGluZ0JveE1vZGUoZmlsdGVyQkJveE1vZGUpOwpJbmRleDogV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEw
ICsyMSwxMSBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBP
UlQKICNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2UuaCIKKyNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIu
aCIKQEAgLTMzLDcgKzM0LDggQEAKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgotI2lu
Y2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwNiw3ICsxMDgsMTEgQEAgdm9pZCBTVkdHcmFk
aWVudEVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZQogU1ZHUmVzb3VyY2UqIFNWR0dyYWRpZW50RWxl
bWVudDo6Y2FudmFzUmVzb3VyY2UoKQogewogICAgIGlmICghbV9yZXNvdXJjZSkgewotICAgICAg
ICBtX3Jlc291cmNlID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1BhaW50U2VydmVyR3Jh
ZGllbnQ+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihncmFkaWVudFR5cGUo
KSkpOworICAgICAgICBpZiAoZ3JhZGllbnRUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRQYWludFNl
cnZlcikKKyAgICAgICAgICAgIG1fcmVzb3VyY2UgPSBuZXcgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJH
cmFkaWVudCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3Jlc291cmNlID0gbmV3IFNW
R1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQoKTsKKwogICAgICAgICBtX3Jlc291cmNlLT5zZXRM
aXN0ZW5lcih0aGlzKTsKICAgICAgICAgYnVpbGRHcmFkaWVudChtX3Jlc291cmNlKTsKICAgICB9
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5j
cHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIxLDEwIEBACiAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0xp
bmVhckdyYWRpZW50RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgog
I2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKICNpbmNsdWRlICJTVkdI
ZWxwZXIuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R01hcmtlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTAgQEAK
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVk
ZSAiU1ZHTWFya2VyRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01h
c2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNrRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFza0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMiArMjIsMTIgQEAKICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHTWFza0Vs
ZW1lbnQuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1Jl
c291cmNlSW1hZ2UuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHTGVuZ3RoLmgiCkBAIC05OSwzMyArOTksMjQgQEAgdm9pZCBTVkdNYXNrRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dAogICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9Ci0KIFNWR1Jlc291cmNlSW1hZ2UqIFNWR01hc2tFbGVt
ZW50OjpkcmF3TWFza2VyQ29udGVudCgpCiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNl
ID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgaWYgKCFkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCkp
IC8vIEZJWE1FOiBoYWNrIGZvciBub3cgdW50aWwgSW1hZ2U6OmxvY2tGb2N1cyBleGlzdHMKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFyZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gMDsK
LQorICAgIC8vIEZJWE1FOiBNYXNrcyBhcmUgYnJva2VuISBUaGlzIHdheSBpdCBjYW4gTk9UIHdv
cmshCisgICAgLy8gV2UgaGF2ZSB0byBidWlsZCBtYXNrIGltYWdlcyBhdCBhIGxhdGVyIHN0YWdl
LCBub3QgaW4gY2FudmFzUmVzb3VyY2UoKSBjYWxsCisgICAgLy8gT3RoZXJ3aGlzZSB0aGUgY3Vy
cmVudCBjb250ZXh0IGlzIG5vdCBhdmFpbGFibGUhCisgICAgcmV0dXJuIDA7CiAgICAgU1ZHUmVz
b3VyY2VJbWFnZSogbWFza0ltYWdlID0gbmV3IFNWR1Jlc291cmNlSW1hZ2UoKTsKIAogICAgIElu
dFNpemUgc2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aCgpLT52YWx1ZSgpKSwgbHJvdW5kZiho
ZWlnaHQoKS0+dmFsdWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5pdChzaXplKTsKIAotICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZv
ckltYWdlKG1hc2tJbWFnZSk7Ci0gICAgZGV2aWNlLT5wdXNoQ29udGV4dChwYXR0ZXJuQ29udGV4
dCk7Ci0KLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0KHBhdHRlcm5Db250ZXh0
LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
Y29udGV4dChjb250ZXh0Rm9ySW1hZ2UobWFza0ltYWdlKSk7CiAKICAgICBSZW5kZXJTVkdDb250
YWluZXIqIG1hc2tDb250YWluZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihy
ZW5kZXJlcigpKTsKICAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBpbmZvKGNvbnRleHQuZ2V0
KCksIEludFJlY3QoKSwgUGFpbnRQaGFzZUZvcmVncm91bmQsIDAsIDAsIDApOwogICAgIG1hc2tD
b250YWluZXItPnNldERyYXdzQ29udGVudHModHJ1ZSk7CiAgICAgbWFza0NvbnRhaW5lci0+cGFp
bnQoaW5mbywgMCwgMCk7CiAgICAgbWFza0NvbnRhaW5lci0+c2V0RHJhd3NDb250ZW50cyhmYWxz
ZSk7Ci0gICAgCi0gICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7Ci0gICAgZGVsZXRlIHBhdHRlcm5D
b250ZXh0OwogCiAgICAgcmV0dXJuIG1hc2tJbWFnZTsKIH0KQEAgLTE0Niw3ICsxMzcsNyBAQCBT
VkdSZXNvdXJjZSogU1ZHTWFza0VsZW1lbnQ6OmNhbnZhc1Jlc291CiAgICAgaWYgKG1fZGlydHkp
IHsKICAgICAgICAgUmVmUHRyPFNWR1Jlc291cmNlSW1hZ2U+IG1hc2soZHJhd01hc2tlckNvbnRl
bnQoKSk7CiAgICAgICAgIG1fbWFza2VyLT5zZXRNYXNrKG1hc2spOwotICAgICAgICBtX2RpcnR5
ID0gKG1hc2sgIT0gMCk7CisgICAgICAgIG1fZGlydHkgPSAobWFzayA9PSAwKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1fbWFza2VyLmdldCgpOwogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
UGF0dGVybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Bh
dHRlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdQYXR0ZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEzICsyMSwxMyBAQAog
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRl
ICJTVkdQYXR0ZXJuRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZUltYWdlLmgiCi0jaW5j
bHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUGF0dGVy
bi5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0hlbHBl
ci5oIgpAQCAtMTY2LDggKzE2Niw2IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmZpbGxBdHRy
aWJ1dGVzRnIKIAogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZW50SW50
b1RpbGUoY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpCiB7Ci0gICAgS1Jl
bmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgCiAgICAgU1ZH
U3R5bGVkRWxlbWVudCogYWN0aXZlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1l
bnQqPihtX3BhaW50U2VydmVyLT5hY3RpdmVDbGllbnQoKS0+ZWxlbWVudCgpKTsKIAogICAgIGJv
b2wgYmJveCA9IChwYXR0ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1gpOwpAQCAtMTg1LDE1ICsxODMsMTMgQEAgdm9pZCBTVkdQYXR0ZXJu
RWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZQogICAgIG1fdGlsZSA9IG5ldyBTVkdSZXNvdXJjZUlt
YWdlKCk7CiAgICAgbV90aWxlLT5pbml0KG5ld1NpemUpOwogCi0gICAgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqIHBhdHRlcm5Db250ZXh0ID0gZGV2aWNlLT5jb250ZXh0Rm9ySW1hZ2UobV90aWxl
LmdldCgpKTsKLSAgICBkZXZpY2UtPnB1c2hDb250ZXh0KHBhdHRlcm5Db250ZXh0KTsKKwlPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBwYXR0ZXJuQ29udGV4dChjb250ZXh0Rm9ySW1hZ2UobV90aWxl
LmdldCgpKSk7CisKICAgICBGbG9hdFJlY3QgcmVjdCh4KCktPnZhbHVlKCksIHkoKS0+dmFsdWUo
KSwgd2lkdGgoKS0+dmFsdWUoKSwgaGVpZ2h0KCktPnZhbHVlKCkpOwogICAgIG1fcGFpbnRTZXJ2
ZXItPnNldEJib3gocmVjdCk7CiAgICAgbV9wYWludFNlcnZlci0+c2V0UGF0dGVyblRyYW5zZm9y
bShwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KTsKICAgICBtX3BhaW50U2VydmVyLT5zZXRUaWxlKG1f
dGlsZS5nZXQoKSk7CiAKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0KHBhdHRl
cm5Db250ZXh0LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKSk7Ci0KICAgICBmb3IgKE5vZGUqIG4g
PSB0YXJnZXQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgU1ZHRWxlbWVudCogZWxlbSA9IHN2Z19keW5hbWljX2Nhc3Qobik7CiAgICAgICAgIGlmICgh
ZWxlbSB8fCAhZWxlbS0+aXNTdHlsZWQoKSkKQEAgLTIzMyw4ICsyMjksOCBAQCB2b2lkIFNWR1Bh
dHRlcm5FbGVtZW50OjpkcmF3UGF0dGVybkNvbnRlCiAgICAgICAgICAgICBpdGVtLT5zZXRMb2Nh
bFRyYW5zZm9ybShuZXdNYXRyaXgubWF0cml4KCkpOwogICAgICAgICB9CiAjZW5kaWYKLQotICAg
ICAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBpbmZvKGNvbnRleHQuZ2V0KCksIEludFJlY3Qo
KSwgUGFpbnRQaGFzZUZvcmVncm91bmQsIDAsIDAsIDApOworIAorICAgICAgICBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyBpbmZvKHBhdHRlcm5Db250ZXh0LmdldCgpLCBJbnRSZWN0KCksIFBhaW50
UGhhc2VGb3JlZ3JvdW5kLCAwLCAwLCAwKTsKICAgICAgICAgaXRlbS0+cGFpbnQoaW5mbywgMCwg
MCk7CiAKICNpZiAwCkBAIC0yNDcsOSArMjQzLDYgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6
ZHJhd1BhdHRlcm5Db250ZQogCiAgICAgaWYgKHNhdmVkQ29udGV4dCkKICAgICAgICAgY29uc3Rf
Y2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KHRoaXMpLT5wdXNoQXR0cmlidXRlQ29udGV4dChzYXZl
ZENvbnRleHQpOwotCi0gICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7Ci0gICAgZGVsZXRlIHBhdHRl
cm5Db250ZXh0OwogfQogCiB2b2lkIFNWR1BhdHRlcm5FbGVtZW50Ojpub3RpZnlDbGllbnRzVG9S
ZXBhaW50KCkgY29uc3QKQEAgLTMyNiw3ICszMTksNyBAQCBSZW5kZXJPYmplY3QqIFNWR1BhdHRl
cm5FbGVtZW50OjpjcmVhdGVSCiBTVkdSZXNvdXJjZSogU1ZHUGF0dGVybkVsZW1lbnQ6OmNhbnZh
c1Jlc291cmNlKCkKIHsKICAgICBpZiAoIW1fcGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgbV9wYWlu
dFNlcnZlciA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQYWludFNlcnZlclBhdHRlcm4+
KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihTVkdQYWludFNlcnZlclR5cGUo
UGF0dGVyblBhaW50U2VydmVyKSkpOworICAgICAgICBtX3BhaW50U2VydmVyID0gbmV3IFNWR1Bh
aW50U2VydmVyUGF0dGVybigpOwogICAgICAgICBtX3BhaW50U2VydmVyLT5zZXRMaXN0ZW5lcihj
b25zdF9jYXN0PFNWR1BhdHRlcm5FbGVtZW50Kj4odGhpcykpOwogICAgIH0KICAgICByZXR1cm4g
bV9wYWludFNlcnZlci5nZXQoKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMyArMjEsMTMgQEAKICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHU3R5bGVk
RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlJlbmRlclBhdGguaCIKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJ
KHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwotICAgIGNsYXNzIEtSZW5kZXJpbmdEZXZp
Y2U7CiAgICAgY2xhc3MgUmVuZGVyUGF0aDsKICAgICBjbGFzcyBSZW5kZXJWaWV3OwogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9u
IDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgog
I2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhdGgu
aCIKICNpbmNsdWRlICJQZW4uaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiVUNoYXIuaCIKQEAgLTYyLDEzICs2MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogICAgIGNsYXNzIEtVUkw7CiAg
ICAgY2xhc3MgUGF0aDsKKyAgICBjbGFzcyBTVkdSZXNvdXJjZUltYWdlOwogICAgIGNsYXNzIFRl
eHRSdW47CiAgICAgY2xhc3MgVGV4dFN0eWxlOwogCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLSAgICBj
bGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dDsKLSNlbmRpZgotCiAgICAgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0IDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CkBAIC0xNTcsNiArMTU1LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yKTsKIAorICAgICAgICB2b2lkIGJlZ2luUGF0aCgpOworICAgICAgICB2
b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCk7CisKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0
IFBhdGgmKTsKIAogICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwpAQCAtMTY4
LDE2ICsxNjksMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgY29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLSAgICAg
ICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQo
KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBHcmFwaGljc0NvbnRleHQo
SERDKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCiAgICAgICAgIEhEQyBnZXRXaW5kb3dzQ29u
dGV4dChib29sIHN1cHBvcnRBbHBoYUJsZW5kID0gZmFsc2UsIGNvbnN0IEludFJlY3QqID0gMCk7
IC8vIFRoZSBwYXNzZWQgaW4gcmVjdCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGJpdG1hcCBmb3IgY29t
cG9zaXRpbmcgaW5zaWRlIHRyYW5zcGFyZW5jeSBsYXllcnMuCiAgICAgICAgIHZvaWQgcmVsZWFz
ZVdpbmRvd3NDb250ZXh0KEhEQywgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCA9IGZhbHNlLCBjb25z
dCBJbnRSZWN0KiA9IDApOyAgICAvLyBUaGUgcGFzc2VkIGluIEhEQyBzaG91bGQgYmUgdGhlIG9u
ZSBoYW5kZWQgYmFjayBieSBnZXRXaW5kb3dzQ29udGV4dC4KICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oUVQpCisgICAgICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOworICAgICAgICBQbGF0
Zm9ybVBhdGgqIGN1cnJlbnRQYXRoKCk7CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlUGxhdGZvcm1T
dGF0ZSgpOwpAQCAtMTk2LDYgKzE5OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRhOwogICAgIH07CiAKKyNpZmRl
ZiBTVkdfU1VQUE9SVAorICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dEZvckltYWdlKFNWR1Jl
c291cmNlSW1hZ2UqKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBHcmFwaGljc0NvbnRleHRfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsODA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNkZWZpbmUgX1VTRV9NQVRIX0RFRklORVMgMQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaWYgUExBVEZPUk0oQ0cpCi0KLSNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUGF0
aC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpZmRlZiBTVkdfU1VQUE9SVAot
I2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlLmg+IC8vIEZJWE1FOiBUZW1wb3JhcnkuCi0K
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKLSAgICA6IG1f
Y29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCkpCi17Ci0gICAgc2V0UGFp
bnRpbmdEaXNhYmxlZCghY2dDb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhp
Y3NDb250ZXh0KCkKLXsKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1v
bik7Ci0gICAgZGVsZXRlIG1fZGF0YTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZv
Y3VzUmluZ0NsaXAoY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBvbmx5
IGV4aXN0cyB0byB3b3JrIGFyb3VuZCBidWdzIGluIE1hYyBmb2N1cyByaW5nIGNsaXBwaW5nLgot
ICAgIG1fZGF0YS0+bV9mb2N1c1JpbmdDbGlwID0gcjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyRm9jdXNSaW5nQ2xpcCgpCi17Ci0gICAgLy8gVGhpcyBtZXRob2Qgb25seSBleGlz
dHMgdG8gd29yayBhcm91bmQgYnVncyBpbiBNYWMgZm9jdXMgcmluZyBjbGlwcGluZy4KLSAgICBt
X2RhdGEtPm1fZm9jdXNSaW5nQ2xpcCA9IEludFJlY3QoKTsKLX0KLQotQ0dDb250ZXh0UmVmIEdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIXBh
aW50aW5nRGlzYWJsZWQoKSk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwotICAg
IHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0OwotfQotCi1zdGF0aWMgdm9pZCBzZXRDR0ZpbGxD
b2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIENH
RmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgY29sb3IuZ2V0UkdCQShyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQs
IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0Q0dTdHJva2VD
b2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIENH
RmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgY29sb3IuZ2V0UkdCQShyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4
dCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2F2ZVBsYXRmb3JtU3RhdGUoKQotewotICAgIC8vIE5vdGU6IERvIG5vdCB1c2UgdGhpcyBmdW5j
dGlvbiB3aXRoaW4gdGhpcyBjbGFzcyBpbXBsZW1lbnRhdGlvbiwgc2luY2Ugd2Ugd2FudCB0byBh
dm9pZCB0aGUgZXh0cmEKLSAgICAvLyBzYXZlIG9mIHRoZSBzZWNvbmRhcnkgY29udGV4dCAoaW4g
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlLmgpLgotICAgIENHQ29udGV4dFNhdmVHU3Rh
dGUocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIG1fZGF0YS0+c2F2ZSgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQotewotICAgIC8vIE5vdGU6IERv
IG5vdCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjbGFzcyBpbXBsZW1lbnRhdGlvbiwg
c2luY2Ugd2Ugd2FudCB0byBhdm9pZCB0aGUgZXh0cmEKLSAgICAvLyByZXN0b3JlIG9mIHRoZSBz
ZWNvbmRhcnkgY29udGV4dCAoaW4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlLmgpLgot
ICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIG1fZGF0
YS0+cmVzdG9yZSgpOwotfQotCi0vLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0
cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLQotICAg
IGlmIChmaWxsQ29sb3IoKS5hbHBoYSgpKSB7Ci0gICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRl
eHQsIGZpbGxDb2xvcigpKTsKLSAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVj
dCk7Ci0gICAgfQotCi0gICAgaWYgKHBlbigpLnN0eWxlKCkgIT0gUGVuOjpOb1BlbikgewotICAg
ICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBwZW4oKS5jb2xvcigpKTsKLSAgICAgICAgQ0dS
ZWN0IHJlY3RzWzRdID0gewotICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCAxKSwKLSAgICAgICAgICAgIEZsb2F0UmVjdChyZWN0LngoKSwgcmVj
dC5ib3R0b20oKSAtIDEsIHJlY3Qud2lkdGgoKSwgMSksCi0gICAgICAgICAgICBGbG9hdFJlY3Qo
cmVjdC54KCksIHJlY3QueSgpICsgMSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpLAotICAgICAgICAg
ICAgRmxvYXRSZWN0KHJlY3QucmlnaHQoKSAtIDEsIHJlY3QueSgpICsgMSwgMSwgcmVjdC5oZWln
aHQoKSAtIDIpCi0gICAgICAgIH07Ci0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0cyhjb250ZXh0
LCByZWN0cywgNCk7Ci0gICAgfQotfQotCi0vLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJv
cmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBv
aW50MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQZW46OlBlblN0eWxlIHBlblN0eWxlID0gcGVu
KCkuc3R5bGUoKTsKLSAgICBpZiAocGVuU3R5bGUgPT0gUGVuOjpOb1BlbikKLSAgICAgICAgcmV0
dXJuOwotICAgIGZsb2F0IHdpZHRoID0gcGVuKCkud2lkdGgoKTsKLSAgICBpZiAod2lkdGggPCAx
KQotICAgICAgICB3aWR0aCA9IDE7Ci0KLSAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwotICAg
IEZsb2F0UG9pbnQgcDIgPSBwb2ludDI7Ci0gICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwMS54
KCkgPT0gcDIueCgpKTsKLSAgICAKLSAgICAvLyBGb3Igb2RkIHdpZHRocywgd2UgYWRkIGluIDAu
NSB0byB0aGUgYXBwcm9wcmlhdGUgeC95IHNvIHRoYXQgdGhlIGZsb2F0IGFyaXRobWV0aWMKLSAg
ICAvLyB3b3JrcyBvdXQuICBGb3IgZXhhbXBsZSwgd2l0aCBhIGJvcmRlciB3aWR0aCBvZiAzLCBL
SFRNTCB3aWxsIHBhc3MgdXMgKHkxK3kyKS8yLCBlLmcuLAotICAgIC8vICg1MCs1MykvMiA9IDEw
My8yID0gNTEgd2hlbiB3ZSB3YW50IDUxLjUuICBJdCBpcyBhbHdheXMgdHJ1ZSB0aGF0IGFuIGV2
ZW4gd2lkdGggZ2F2ZQotICAgIC8vIHVzIGEgcGVyZmVjdCBwb3NpdGlvbiwgYnV0IGFuIG9kZCB3
aWR0aCBnYXZlIHVzIGEgcG9zaXRpb24gdGhhdCBpcyBvZmYgYnkgZXhhY3RseSAwLjUuCi0gICAg
aWYgKHBlblN0eWxlID09IFBlbjo6RG90TGluZSB8fCBwZW5TdHlsZSA9PSBQZW46OkRhc2hMaW5l
KSB7Ci0gICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewotICAgICAgICAgICAgcDEubW92ZSgw
LCB3aWR0aCk7Ci0gICAgICAgICAgICBwMi5tb3ZlKDAsIC13aWR0aCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBwMS5tb3ZlKHdpZHRoLCAwKTsKLSAgICAgICAgICAgIHAyLm1vdmUo
LXdpZHRoLCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoKChpbnQpd2lkdGgp
ICUgMikgewotICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgICAgIC8vIFdl
J3JlIGEgdmVydGljYWwgbGluZS4gIEFkanVzdCBvdXIgeC4KLSAgICAgICAgICAgIHAxLm1vdmUo
MC41LCAwKTsKLSAgICAgICAgICAgIHAyLm1vdmUoMC41LCAwKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFdlJ3JlIGEgaG9yaXpvbnRhbCBsaW5lLiBBZGp1c3Qgb3VyIHkuCi0g
ICAgICAgICAgICBwMS5tb3ZlKDAsIDAuNSk7Ci0gICAgICAgICAgICBwMi5tb3ZlKDAsIDAuNSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaW50IHBhdFdpZHRoID0gMDsKLSAgICBzd2l0
Y2ggKHBlblN0eWxlKSB7Ci0gICAgICAgIGNhc2UgUGVuOjpOb1BlbjoKLSAgICAgICAgY2FzZSBQ
ZW46OlNvbGlkTGluZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBlbjo6RG90
TGluZToKLSAgICAgICAgICAgIHBhdFdpZHRoID0gKGludCl3aWR0aDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFBlbjo6RGFzaExpbmU6Ci0gICAgICAgICAgICBwYXRXaWR0aCA9
IDMgKiAoaW50KXdpZHRoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7Ci0KLSAgICBzZXRDR1N0cm9rZUNvbG9yKGNvbnRleHQsIHBlbigpLmNv
bG9yKCkpOwotCi0gICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIGZhbHNl
KTsKLQotICAgIGlmIChwYXRXaWR0aCkgewotICAgICAgICAvLyBEbyBhIHJlY3QgZmlsbCBvZiBv
dXIgZW5kcG9pbnRzLiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIHRoZQotICAgICAgICAv
LyBhcHBlYXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBhY3R1YWwg
ZG90dGVkL2Rhc2hlZCBsaW5lLgotICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBwZW4o
KS5jb2xvcigpKTsKLSAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAgICAgICBD
R0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpIC0gd2lkdGggLyAyLCBw
MS55KCkgLSB3aWR0aCwgd2lkdGgsIHdpZHRoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRGaWxs
UmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpIC0gd2lkdGggLyAyLCBwMi55KCksIHdpZHRo
LCB3aWR0aCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJl
Y3QoY29udGV4dCwgRmxvYXRSZWN0KHAxLngoKSAtIHdpZHRoLCBwMS55KCkgLSB3aWR0aCAvIDIs
IHdpZHRoLCB3aWR0aCkpOwotICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwg
RmxvYXRSZWN0KHAyLngoKSwgcDIueSgpIC0gd2lkdGggLyAyLCB3aWR0aCwgd2lkdGgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEV4YW1wbGU6IDgwIHBpeGVscyB3aXRoIGEgd2lkdGggb2Yg
MzAgcGl4ZWxzLgotICAgICAgICAvLyBSZW1haW5kZXIgaXMgMjAuICBUaGUgbWF4aW11bSBwaXhl
bHMgb2YgbGluZSB3ZSBjb3VsZCBwYWludAotICAgICAgICAvLyB3aWxsIGJlIDUwIHBpeGVscy4K
LSAgICAgICAgaW50IGRpc3RhbmNlID0gKGlzVmVydGljYWxMaW5lID8gKHBvaW50Mi55KCkgLSBw
b2ludDEueSgpKSA6IChwb2ludDIueCgpIC0gcG9pbnQxLngoKSkpIC0gMiooaW50KXdpZHRoOwot
ICAgICAgICBpbnQgcmVtYWluZGVyID0gZGlzdGFuY2UgJSBwYXRXaWR0aDsKLSAgICAgICAgaW50
IGNvdmVyYWdlID0gZGlzdGFuY2UgLSByZW1haW5kZXI7Ci0gICAgICAgIGludCBudW1TZWdtZW50
cyA9IGNvdmVyYWdlIC8gcGF0V2lkdGg7Ci0KLSAgICAgICAgZmxvYXQgcGF0dGVybk9mZnNldCA9
IDA7Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSAxcHggZG90dGVkIGJvcmRlcnMgZm9yIHNwZWVk
LgotICAgICAgICBpZiAocGF0V2lkdGggPT0gMSkKLSAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQg
PSAxLjA7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYm9vbCBldmVuTnVtYmVyT2ZTZWdt
ZW50cyA9IG51bVNlZ21lbnRzICUgMiA9PSAwOwotICAgICAgICAgICAgaWYgKHJlbWFpbmRlcikK
LSAgICAgICAgICAgICAgICBldmVuTnVtYmVyT2ZTZWdtZW50cyA9ICFldmVuTnVtYmVyT2ZTZWdt
ZW50czsKLSAgICAgICAgICAgIGlmIChldmVuTnVtYmVyT2ZTZWdtZW50cykgewotICAgICAgICAg
ICAgICAgIGlmIChyZW1haW5kZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9mZnNl
dCArPSBwYXRXaWR0aCAtIHJlbWFpbmRlcjsKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9m
ZnNldCArPSByZW1haW5kZXIgLyAyOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0gcGF0V2lkdGggLyAyOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyKQotICAgICAgICAgICAgICAgICAg
ICBwYXR0ZXJuT2Zmc2V0ID0gKHBhdFdpZHRoIC0gcmVtYWluZGVyKS8yOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb25zdCBDR0Zsb2F0IGRvdHRlZExpbmVb
Ml0gPSB7IHBhdFdpZHRoLCBwYXRXaWR0aCB9OwotICAgICAgICBDR0NvbnRleHRTZXRMaW5lRGFz
aChjb250ZXh0LCBwYXR0ZXJuT2Zmc2V0LCBkb3R0ZWRMaW5lLCAyKTsKLSAgICB9Ci0gICAgCi0g
ICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHdpZHRoKTsKLQotICAgIENHQ29udGV4
dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBDR0NvbnRleHRNb3ZlVG9Qb2ludChjb250ZXh0LCBw
MS54KCksIHAxLnkoKSk7Ci0gICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQoY29udGV4dCwgcDIu
eCgpLCBwMi55KCkpOwotCi0gICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKLQotICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlz
IG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgLy8gRklYTUU6IENHIGFkZGVkIENHQ29udGV4dEFkZEVsbGlwc2VpblJlY3QgaW4gVGlnZXIs
IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHF1aXRlIGVhc2lseSBkcmF3IGFuIGVsbGlwc2UuCi0g
ICAgLy8gVGhpcyBjb2RlIGNhbiBvbmx5IGhhbmRsZSBjaXJjbGVzLCBub3QgZWxsaXBzZXMuIEJ1
dCBraHRtbCBvbmx5Ci0gICAgLy8gdXNlcyBpdCBmb3IgY2lyY2xlcy4KLSAgICBBU1NFUlQocmVj
dC53aWR0aCgpID09IHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAg
ICBmbG9hdCByID0gKGZsb2F0KXJlY3Qud2lkdGgoKSAvIDI7Ci0gICAgQ0dDb250ZXh0QWRkQXJj
KGNvbnRleHQsIHJlY3QueCgpICsgciwgcmVjdC55KCkgKyByLCByLCAwLCAyKk1fUEksIHRydWUp
OwotICAgIENHQ29udGV4dENsb3NlUGF0aChjb250ZXh0KTsKLQotICAgIGlmIChmaWxsQ29sb3Io
KS5hbHBoYSgpKSB7Ci0gICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGZpbGxDb2xvcigp
KTsKLSAgICAgICAgaWYgKHBlbigpLnN0eWxlKCkgIT0gUGVuOjpOb1BlbikgewotICAgICAgICAg
ICAgLy8gc3Ryb2tlIGFuZCBmaWxsCi0gICAgICAgICAgICBzZXRDR1N0cm9rZUNvbG9yKGNvbnRl
eHQsIHBlbigpLmNvbG9yKCkpOwotICAgICAgICAgICAgdW5zaWduZWQgcGVuV2lkdGggPSBwZW4o
KS53aWR0aCgpOwotICAgICAgICAgICAgaWYgKHBlbldpZHRoID09IDApIAotICAgICAgICAgICAg
ICAgIHBlbldpZHRoKys7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4
dCwgcGVuV2lkdGgpOwotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29udGV4dCwga0NH
UGF0aEZpbGxTdHJva2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIENHQ29udGV4dEZp
bGxQYXRoKGNvbnRleHQpOwotICAgIH0gZWxzZSBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5v
UGVuKSB7Ci0gICAgICAgIHNldENHU3Ryb2tlQ29sb3IoY29udGV4dCwgcGVuKCkuY29sb3IoKSk7
Ci0gICAgICAgIHVuc2lnbmVkIHBlbldpZHRoID0gcGVuKCkud2lkdGgoKTsKLSAgICAgICAgaWYg
KHBlbldpZHRoID09IDApIAotICAgICAgICAgICAgcGVuV2lkdGgrKzsKLSAgICAgICAgQ0dDb250
ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHBlbldpZHRoKTsKLSAgICAgICAgQ0dDb250ZXh0U3Ry
b2tlUGF0aChjb250ZXh0KTsKLSAgICB9Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgdGhpY2tuZXNzLCBpbnQgc3RhcnRBbmds
ZSwgaW50IGFuZ2xlU3BhbikKLXsgCi0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLSAgICBDR0NvbnRleHRC
ZWdpblBhdGgoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRl
eHQsIGZhbHNlKTsKLSAgICAKLSAgICBpbnQgeCA9IHJlY3QueCgpOwotICAgIGludCB5ID0gcmVj
dC55KCk7Ci0gICAgZmxvYXQgdyA9IChmbG9hdClyZWN0LndpZHRoKCk7Ci0gICAgZmxvYXQgaCA9
IChmbG9hdClyZWN0LmhlaWdodCgpOwotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gaCAvIHc7Ci0g
ICAgZmxvYXQgcmV2ZXJzZVNjYWxlRmFjdG9yID0gdyAvIGg7Ci0gICAgCi0gICAgaWYgKHcgIT0g
aCkKLSAgICAgICAgc2NhbGUoRmxvYXRTaXplKDEsIHNjYWxlRmFjdG9yKSk7Ci0gICAgCi0gICAg
ZmxvYXQgaFJhZGl1cyA9IHcgLyAyOwotICAgIGZsb2F0IHZSYWRpdXMgPSBoIC8gMjsKLSAgICBm
bG9hdCBmYSA9IHN0YXJ0QW5nbGU7Ci0gICAgZmxvYXQgZmFsZW4gPSAgZmEgKyBhbmdsZVNwYW47
Ci0gICAgZmxvYXQgc3RhcnQgPSAtZmEgKiBNX1BJLzE4MDsKLSAgICBmbG9hdCBlbmQgPSAtZmFs
ZW4gKiBNX1BJLzE4MDsKLSAgICBDR0NvbnRleHRBZGRBcmMoY29udGV4dCwgeCArIGhSYWRpdXMs
ICh5ICsgdlJhZGl1cykgKiByZXZlcnNlU2NhbGVGYWN0b3IsIGhSYWRpdXMsIHN0YXJ0LCBlbmQs
IHRydWUpOwotCi0gICAgaWYgKHcgIT0gaCkKLSAgICAgICAgc2NhbGUoRmxvYXRTaXplKDEsIHJl
dmVyc2VTY2FsZUZhY3RvcikpOwotICAgIAotICAgIGlmIChwZW4oKS5zdHlsZSgpID09IFBlbjo6
Tm9QZW4pIHsKLSAgICAgICAgc2V0Q0dTdHJva2VDb2xvcihjb250ZXh0LCBmaWxsQ29sb3IoKSk7
Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCB0aGlja25lc3MpOwotICAg
ICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFBlbjo6UGVuU3R5bGUgcGVuU3R5bGUgPSBwZW4oKS5zdHlsZSgpOwotICAgICAgICBmbG9hdCB3
aWR0aCA9IHBlbigpLndpZHRoKCk7Ci0gICAgICAgIGlmICh3aWR0aCA8IDEpCi0gICAgICAgICAg
ICB3aWR0aCA9IDE7Ci0gICAgICAgIGludCBwYXRXaWR0aCA9IDA7Ci0gICAgICAgIAotICAgICAg
ICBzd2l0Y2ggKHBlblN0eWxlKSB7Ci0gICAgICAgICAgICBjYXNlIFBlbjo6Tm9QZW46Ci0gICAg
ICAgICAgICBjYXNlIFBlbjo6U29saWRMaW5lOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBQZW46OkRvdExpbmU6Ci0gICAgICAgICAgICAgICAgcGF0V2lkdGggPSAo
aW50KSh3aWR0aCAvIDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBQZW46OkRhc2hMaW5lOgotICAgICAgICAgICAgICAgIHBhdFdpZHRoID0gMyAqIChpbnQpKHdp
ZHRoIC8gMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwotICAgICAgICBzZXRDR1N0cm9rZUNvbG9yKGNv
bnRleHQsIHBlbigpLmNvbG9yKCkpOwotCi0gICAgICAgIGlmIChwYXRXaWR0aCkgewotICAgICAg
ICAgICAgLy8gRXhhbXBsZTogODAgcGl4ZWxzIHdpdGggYSB3aWR0aCBvZiAzMCBwaXhlbHMuCi0g
ICAgICAgICAgICAvLyBSZW1haW5kZXIgaXMgMjAuICBUaGUgbWF4aW11bSBwaXhlbHMgb2YgbGlu
ZSB3ZSBjb3VsZCBwYWludAotICAgICAgICAgICAgLy8gd2lsbCBiZSA1MCBwaXhlbHMuCi0gICAg
ICAgICAgICBpbnQgZGlzdGFuY2U7Ci0gICAgICAgICAgICBpZiAoaFJhZGl1cyA9PSB2UmFkaXVz
KQotICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gKGludCkoTV9QSSAqIGhSYWRpdXMpIC8gMjsK
LSAgICAgICAgICAgIGVsc2UgLy8gV2UgYXJlIGVsbGlwdGljYWwgYW5kIHdpbGwgaGF2ZSB0byBl
c3RpbWF0ZSB0aGUgZGlzdGFuY2UKLSAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IChpbnQpKE1f
UEkgKiBzcXJ0KChoUmFkaXVzICogaFJhZGl1cyArIHZSYWRpdXMgKiB2UmFkaXVzKSAvIDIpKSAv
IDI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludCByZW1haW5kZXIgPSBkaXN0YW5jZSAl
IHBhdFdpZHRoOwotICAgICAgICAgICAgaW50IGNvdmVyYWdlID0gZGlzdGFuY2UgLSByZW1haW5k
ZXI7Ci0gICAgICAgICAgICBpbnQgbnVtU2VnbWVudHMgPSBjb3ZlcmFnZSAvIHBhdFdpZHRoOwot
Ci0gICAgICAgICAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIC8vIFNw
ZWNpYWwgY2FzZSAxcHggZG90dGVkIGJvcmRlcnMgZm9yIHNwZWVkLgotICAgICAgICAgICAgaWYg
KHBhdFdpZHRoID09IDEpCi0gICAgICAgICAgICAgICAgcGF0dGVybk9mZnNldCA9IDEuMDsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGJvb2wgZXZlbk51bWJlck9mU2VnbWVu
dHMgPSBudW1TZWdtZW50cyAlIDIgPT0gMDsKLSAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVy
KQotICAgICAgICAgICAgICAgICAgICBldmVuTnVtYmVyT2ZTZWdtZW50cyA9ICFldmVuTnVtYmVy
T2ZTZWdtZW50czsKLSAgICAgICAgICAgICAgICBpZiAoZXZlbk51bWJlck9mU2VnbWVudHMpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmRlcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcGF0dGVybk9mZnNldCArPSBwYXRXaWR0aCAtIHJlbWFpbmRlcjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcmVtYWluZGVyIC8gMjsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0g
cGF0V2lkdGggLyAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChyZW1haW5kZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0
ID0gKHBhdFdpZHRoIC0gcmVtYWluZGVyKSAvIDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IENHRmxvYXQgZG90dGVkTGluZVsy
XSA9IHsgcGF0V2lkdGgsIHBhdFdpZHRoIH07Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5l
RGFzaChjb250ZXh0LCBwYXR0ZXJuT2Zmc2V0LCBkb3R0ZWRMaW5lLCAyKTsKLSAgICAgICAgfQot
ICAgIAotICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgd2lkdGgpOwotICAg
ICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwotICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHln
b24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRB
bnRpYWxpYXMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG5wb2ludHMgPD0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7Ci0KLSAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4
dCwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICAKLSAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4
dCk7Ci0gICAgQ0dDb250ZXh0TW92ZVRvUG9pbnQoY29udGV4dCwgcG9pbnRzWzBdLngoKSwgcG9p
bnRzWzBdLnkoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBucG9pbnRzOyBpKyspCi0g
ICAgICAgIENHQ29udGV4dEFkZExpbmVUb1BvaW50KGNvbnRleHQsIHBvaW50c1tpXS54KCksIHBv
aW50c1tpXS55KCkpOwotICAgIENHQ29udGV4dENsb3NlUGF0aChjb250ZXh0KTsKLQotICAgIGlm
IChmaWxsQ29sb3IoKS5hbHBoYSgpKSB7Ci0gICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQs
IGZpbGxDb2xvcigpKTsKLSAgICAgICAgQ0dDb250ZXh0RU9GaWxsUGF0aChjb250ZXh0KTsKLSAg
ICB9Ci0KLSAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7Ci0gICAgICAgIHNl
dENHU3Ryb2tlQ29sb3IoY29udGV4dCwgcGVuKCkuY29sb3IoKSk7Ci0gICAgICAgIENHQ29udGV4
dFNldExpbmVXaWR0aChjb250ZXh0LCBwZW4oKS53aWR0aCgpKTsKLSAgICAgICAgQ0dDb250ZXh0
U3Ryb2tlUGF0aChjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRl
KGNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoY29sb3IuYWxwaGEoKSkgewotICAgICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgICAgICBzZXRD
R0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7Ci0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNv
bnRleHQsIHJlY3QpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoY29sb3IuYWxwaGEo
KSkgewotICAgICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwot
ICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7Ci0gICAgICAgIENHQ29udGV4
dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChwbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdCk7Ci0gICAgbV9kYXRhLT5jbGlwKHJlY3QpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0
IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LAotICAgIGNvbnN0IElu
dFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5lZWQgc3Vm
ZmljaWVudCB3aWR0aCBhbmQgaGVpZ2h0IHRvIGNvbnRhaW4gdGhlc2UgY3VydmVzLiAgU2FuaXR5
IGNoZWNrIG91ciB0b3AvYm90dG9tCi0gICAgLy8gdmFsdWVzIGFuZCBvdXIgd2lkdGgvaGVpZ2h0
IHZhbHVlcyB0byBtYWtlIHN1cmUgdGhlIGN1cnZlcyBjYW4gYWxsIGZpdC4KLSAgICBpbnQgcmVx
dWlyZWRXaWR0aCA9IG1heCh0b3BMZWZ0LndpZHRoKCkgKyB0b3BSaWdodC53aWR0aCgpLCBib3R0
b21MZWZ0LndpZHRoKCkgKyBib3R0b21SaWdodC53aWR0aCgpKTsKLSAgICBpZiAocmVxdWlyZWRX
aWR0aCA+IHJlY3Qud2lkdGgoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCByZXF1aXJlZEhl
aWdodCA9IG1heCh0b3BMZWZ0LmhlaWdodCgpICsgYm90dG9tTGVmdC5oZWlnaHQoKSwgdG9wUmln
aHQuaGVpZ2h0KCkgKyBib3R0b21SaWdodC5oZWlnaHQoKSk7Ci0gICAgaWYgKHJlcXVpcmVkSGVp
Z2h0ID4gcmVjdC5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotIAotICAgIC8vIENsaXAgdG8g
b3VyIHJlY3QuCi0gICAgY2xpcChyZWN0KTsKLQotICAgIC8vIE9LLCB0aGUgY3VydmVzIGNhbiBm
aXQuCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAK
LSAgICAvLyBBZGQgdGhlIGZvdXIgZWxsaXBzZXMgdG8gdGhlIHBhdGguICBUZWNobmljYWxseSB0
aGlzIHJlYWxseSBpc24ndCBnb29kIGVub3VnaCwgc2luY2Ugd2UgY291bGQgZW5kIHVwCi0gICAg
Ly8gbm90IGNsaXBwaW5nIHRoZSBvdGhlciAzLzQgb2YgdGhlIGVsbGlwc2Ugd2UgZG9uJ3QgY2Fy
ZSBhYm91dC4gIFdlJ3JlIHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCBmb3IKLSAgICAvLyBub3Jt
YWwgdXNlIGNhc2VzIHRoZXNlIGVsbGlwc2VzIHdvbid0IG92ZXJsYXAgb25lIGFub3RoZXIgKG9y
IHdoZW4gdGhleSBkbyB0aGUgY3VydmF0dXJlIG9mIG9uZSB3aWxsCi0gICAgLy8gYmUgc3Vic3Vt
ZWQgYnkgdGhlIG90aGVyKS4KLSAgICBDR0NvbnRleHRBZGRFbGxpcHNlSW5SZWN0KGNvbnRleHQs
IENHUmVjdE1ha2UocmVjdC54KCksIHJlY3QueSgpLCB0b3BMZWZ0LndpZHRoKCkgKiAyLCB0b3BM
ZWZ0LmhlaWdodCgpICogMikpOwotICAgIENHQ29udGV4dEFkZEVsbGlwc2VJblJlY3QoY29udGV4
dCwgQ0dSZWN0TWFrZShyZWN0LnJpZ2h0KCkgLSB0b3BSaWdodC53aWR0aCgpICogMiwgcmVjdC55
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
cFJpZ2h0LndpZHRoKCkgKiAyLCB0b3BSaWdodC5oZWlnaHQoKSAqIDIpKTsKLSAgICBDR0NvbnRl
eHRBZGRFbGxpcHNlSW5SZWN0KGNvbnRleHQsIENHUmVjdE1ha2UocmVjdC54KCksIHJlY3QuYm90
dG9tKCkgLSBib3R0b21MZWZ0LmhlaWdodCgpICogMiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tTGVmdC53aWR0aCgpICogMiwgYm90dG9t
TGVmdC5oZWlnaHQoKSAqIDIpKTsKLSAgICBDR0NvbnRleHRBZGRFbGxpcHNlSW5SZWN0KGNvbnRl
eHQsIENHUmVjdE1ha2UocmVjdC5yaWdodCgpIC0gYm90dG9tUmlnaHQud2lkdGgoKSAqIDIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuYm90
dG9tKCkgLSBib3R0b21SaWdodC5oZWlnaHQoKSAqIDIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAyLCBib3R0
b21SaWdodC5oZWlnaHQoKSAqIDIpKTsKLSAgICAKLSAgICAvLyBOb3cgYWRkIGZpdmUgcmVjdHMg
KG9uZSBmb3IgZWFjaCBlZGdlIHJlY3QgaW4gYmV0d2VlbiB0aGUgcm91bmRlZCBjb3JuZXJzIGFu
ZCBvbmUgZm9yIHRoZSBpbnRlcmlvcikuCi0gICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCBD
R1JlY3RNYWtlKHJlY3QueCgpICsgdG9wTGVmdC53aWR0aCgpLCByZWN0LnkoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gdG9wTGVmdC53
aWR0aCgpIC0gdG9wUmlnaHQud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF4KHRvcExlZnQuaGVpZ2h0KCksIHRvcFJpZ2h0LmhlaWdodCgpKSkpOwot
ICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgQ0dSZWN0TWFrZShyZWN0LngoKSArIGJvdHRv
bUxlZnQud2lkdGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlY3QuYm90dG9tKCkgLSBtYXgoYm90dG9tTGVmdC5oZWlnaHQoKSwgYm90dG9tUmlnaHQuaGVp
Z2h0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0Lndp
ZHRoKCkgLSBib3R0b21MZWZ0LndpZHRoKCkgLSBib3R0b21SaWdodC53aWR0aCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoYm90dG9tTGVmdC5oZWlnaHQo
KSwgYm90dG9tUmlnaHQuaGVpZ2h0KCkpKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0
LCBDR1JlY3RNYWtlKHJlY3QueCgpLCByZWN0LnkoKSArIHRvcExlZnQuaGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCh0b3BMZWZ0LndpZHRoKCks
IGJvdHRvbUxlZnQud2lkdGgoKSksIHJlY3QuaGVpZ2h0KCkgLSB0b3BMZWZ0LmhlaWdodCgpIC0g
Ym90dG9tTGVmdC5oZWlnaHQoKSkpOwotICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgQ0dS
ZWN0TWFrZShyZWN0LnJpZ2h0KCkgLSBtYXgodG9wUmlnaHQud2lkdGgoKSwgYm90dG9tUmlnaHQu
d2lkdGgoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
eSgpICsgdG9wUmlnaHQuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1heCh0b3BSaWdodC53aWR0aCgpLCBib3R0b21SaWdodC53aWR0aCgpKSwgcmVj
dC5oZWlnaHQoKSAtIHRvcFJpZ2h0LmhlaWdodCgpIC0gYm90dG9tUmlnaHQuaGVpZ2h0KCkpKTsK
LSAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIENHUmVjdE1ha2UocmVjdC54KCkgKyBtYXgo
dG9wTGVmdC53aWR0aCgpLCBib3R0b21MZWZ0LndpZHRoKCkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSArIG1heCh0b3BMZWZ0LmhlaWdodCgpLCB0
b3BSaWdodC5oZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlY3Qud2lkdGgoKSAtIG1heCh0b3BMZWZ0LndpZHRoKCksIGJvdHRvbUxlZnQud2lkdGgo
KSkgLSBtYXgodG9wUmlnaHQud2lkdGgoKSwgYm90dG9tUmlnaHQud2lkdGgoKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSBtYXgodG9w
TGVmdC5oZWlnaHQoKSwgdG9wUmlnaHQuaGVpZ2h0KCkpIC0gbWF4KGJvdHRvbUxlZnQuaGVpZ2h0
KCksIGJvdHRvbVJpZ2h0LmhlaWdodCgpKSkpOwotICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25z
dCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsaXAocmVjdCk7Ci0gICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAKLSAgICAvLyBBZGQgb3V0ZXIg
ZWxsaXBzZQotICAgIENHQ29udGV4dEFkZEVsbGlwc2VJblJlY3QoY29udGV4dCwgQ0dSZWN0TWFr
ZShyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotICAg
IC8vIEFkZCBpbm5lciBlbGxpcHNlLgotICAgIENHQ29udGV4dEFkZEVsbGlwc2VJblJlY3QoY29u
dGV4dCwgQ0dSZWN0TWFrZShyZWN0LngoKSArIHRoaWNrbmVzcywgcmVjdC55KCkgKyB0aGlja25l
c3MsCi0gICAgICAgIHJlY3Qud2lkdGgoKSAtICh0aGlja25lc3MgKiAyKSwgcmVjdC5oZWlnaHQo
KSAtICh0aGlja25lc3MgKiAyKSkpOwotICAgIAotICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0
KTsKLX0KLQotI2lmZGVmIFNWR19TVVBQT1JUCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogR3Jh
cGhpY3NDb250ZXh0OjpjcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCkKLXsKLSAgICByZXR1
cm4gbmV3IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KHBsYXRmb3JtQ29udGV4dCgpKTsK
LX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0QWxwaGEo
Y29udGV4dCwgb3BhY2l0eSk7Ci0gICAgQ0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcihj
b250ZXh0LCAwKTsKLSAgICBtX2RhdGEtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lM
YXllcihjb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwotICAg
IG1fZGF0YS0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFNoYWRvdyhjb25zdCBJbnRTaXplJiBzaXplLCBpbnQgYmx1ciwgY29uc3QgQ29sb3Im
IGNvbG9yKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAvLyBDaGVjayBmb3IgYW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFucyB0aGF0IHRo
ZSBjb2xvciB3YXMgbm90IHNldCBmb3IgdGhlIHNoYWRvdwotICAgIC8vIGFuZCB3ZSBzaG91bGQg
dGhlcmVmb3JlIGp1c3QgdXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KLSAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIGlmICghY29sb3IuaXNWYWxp
ZCgpKQotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3coY29udGV4dCwgQ0dTaXplTWFrZShzaXpl
LndpZHRoKCksIC1zaXplLmhlaWdodCgpKSwgYmx1cik7IC8vIHkgaXMgZmxpcHBlZC4KLSAgICBl
bHNlIHsKLSAgICAgICAgQ0dDb2xvclJlZiBjb2xvckNHID0gY2dDb2xvcihjb2xvcik7Ci0gICAg
ICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0dTaXplTWFrZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdo
dCgpKSwgLy8geSBpcyBmbGlwcGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmx1ciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckNHKTsK
LSAgICAgICAgQ0dDb2xvclJlbGVhc2UoY29sb3JDRyk7Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZv
cm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0TGluZVdpZHRoKGZsb2F0IHdpZHRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgocGxhdGZvcm1D
b250ZXh0KCksIHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGlt
aXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxp
bWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IGFscGhhKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDR0Nv
bnRleHRTZXRBbHBoYShwbGF0Zm9ybUNvbnRleHQoKSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0Q2xlYXJSZWN0
KHBsYXRmb3JtQ29udGV4dCgpLCByKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dFN0cm9rZVJl
Y3RXaXRoV2lkdGgocGxhdGZvcm1Db250ZXh0KCksIHIsIGxpbmVXaWR0aCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKGNhcCkgewotICAg
ICAgICBjYXNlIEJ1dHRDYXA6Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRm
b3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBSb3VuZENhcDoKLSAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZv
cm1Db250ZXh0KCksIGtDR0xpbmVDYXBSb3VuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTcXVhcmVDYXA6Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRm
b3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwU3F1YXJlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4p
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3
aXRjaCAoam9pbikgewotICAgICAgICBjYXNlIE1pdGVySm9pbjoKLSAgICAgICAgICAgIENHQ29u
dGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pbk1pdGVyKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJvdW5kSm9pbjoKLSAgICAgICAgICAgIENH
Q29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pblJvdW5kKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJldmVsSm9pbjoKLSAgICAgICAgICAg
IENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pbkJldmVs
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0QWRk
UGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICBDR0NvbnRleHRDbGlwKGNv
bnRleHQpOwotICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1D
b250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9kYXRhLT5zY2Fs
ZShzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dD
b250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Ci0gICAgbV9kYXRhLT5y
b3RhdGUoYW5nbGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7
Ci0gICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dENvbmNh
dENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPmNvbmNhdENU
TSh0cmFuc2Zvcm0pOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBJdCBpcyBub3QgZW5v
dWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFjZS4gVGhlIHJvdGF0aW9u
IHBhcnQgb2YgdGhlIAotICAgIC8vIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHRvIGRldmljZSBz
cGFjZSBjYW4gbWVzcyB3aXRoIHRoaXMgY29udmVyc2lvbiBpZiB3ZSBoYXZlIGEKLSAgICAvLyBy
b3RhdGluZyBpbWFnZSBsaWtlIHRoZSBoYW5kcyBvZiB0aGUgd29ybGQgY2xvY2sgd2lkZ2V0LiBX
ZSBqdXN0IG5lZWQgdGhlIHNjYWxlLCBzbyAKLSAgICAvLyB3ZSBnZXQgdGhlIGFmZmluZSB0cmFu
c2Zvcm0gbWF0cml4IGFuZCBleHRyYWN0IHRoZSBzY2FsZS4KLSAgICBDR0FmZmluZVRyYW5zZm9y
bSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNm
b3JtKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBmbG9hdCBkZXZpY2VTY2FsZVggPSBzcXJ0Zihk
ZXZpY2VNYXRyaXguYSAqIGRldmljZU1hdHJpeC5hICsgZGV2aWNlTWF0cml4LmIgKiBkZXZpY2VN
YXRyaXguYik7Ci0gICAgZmxvYXQgZGV2aWNlU2NhbGVZID0gc3FydGYoZGV2aWNlTWF0cml4LmMg
KiBkZXZpY2VNYXRyaXguYyArIGRldmljZU1hdHJpeC5kICogZGV2aWNlTWF0cml4LmQpOwotCi0g
ICAgQ0dQb2ludCBkZXZpY2VPcmlnaW4gPSBDR1BvaW50TWFrZShyZWN0LngoKSAqIGRldmljZVNj
YWxlWCwgcmVjdC55KCkgKiBkZXZpY2VTY2FsZVkpOwotICAgIENHUG9pbnQgZGV2aWNlTG93ZXJS
aWdodCA9IENHUG9pbnRNYWtlKChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSkgKiBkZXZpY2VTY2Fs
ZVgsCi0gICAgICAgIChyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpICogZGV2aWNlU2NhbGVZKTsK
LQotICAgIGRldmljZU9yaWdpbi54ID0gcm91bmRmKGRldmljZU9yaWdpbi54KTsKLSAgICBkZXZp
Y2VPcmlnaW4ueSA9IHJvdW5kZihkZXZpY2VPcmlnaW4ueSk7Ci0gICAgZGV2aWNlTG93ZXJSaWdo
dC54ID0gcm91bmRmKGRldmljZUxvd2VyUmlnaHQueCk7Ci0gICAgZGV2aWNlTG93ZXJSaWdodC55
ID0gcm91bmRmKGRldmljZUxvd2VyUmlnaHQueSk7Ci0gICAgCi0gICAgLy8gRG9uJ3QgbGV0IHRo
ZSBoZWlnaHQgb3Igd2lkdGggcm91bmQgdG8gMCB1bmxlc3MgZWl0aGVyIHdhcyBvcmlnaW5hbGx5
IDAKLSAgICBpZiAoZGV2aWNlT3JpZ2luLnkgPT0gZGV2aWNlTG93ZXJSaWdodC55ICYmIHJlY3Qu
aGVpZ2h0KCkgIT0gMCkKLSAgICAgICAgZGV2aWNlTG93ZXJSaWdodC55ICs9IDE7Ci0gICAgaWYg
KGRldmljZU9yaWdpbi54ID09IGRldmljZUxvd2VyUmlnaHQueCAmJiByZWN0LndpZHRoKCkgIT0g
MCkKLSAgICAgICAgZGV2aWNlTG93ZXJSaWdodC54ICs9IDE7Ci0KLSAgICBGbG9hdFBvaW50IHJv
dW5kZWRPcmlnaW4gPSBGbG9hdFBvaW50KGRldmljZU9yaWdpbi54IC8gZGV2aWNlU2NhbGVYLCBk
ZXZpY2VPcmlnaW4ueSAvIGRldmljZVNjYWxlWSk7Ci0gICAgRmxvYXRQb2ludCByb3VuZGVkTG93
ZXJSaWdodCA9IEZsb2F0UG9pbnQoZGV2aWNlTG93ZXJSaWdodC54IC8gZGV2aWNlU2NhbGVYLCBk
ZXZpY2VMb3dlclJpZ2h0LnkgLyBkZXZpY2VTY2FsZVkpOwotICAgIHJldHVybiBGbG9hdFJlY3Qo
cm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBJbnRQb2ludCYgcG9p
bnQsIGludCB5T2Zmc2V0LCBpbnQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIE5vdGU6IFRo
aXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHBvaW50LnggYW5kIHBvaW50LnkgYXJlIGludGVnZXJz
IChhbmQgdGhhdCdzIGN1cnJlbnRseSBhbHdheXMgdGhlIGNhc2UpLgotICAgIGZsb2F0IHggPSBw
b2ludC54KCk7Ci0gICAgZmxvYXQgeSA9IHBvaW50LnkoKSArIHlPZmZzZXQ7Ci0KLSAgICAvLyBM
ZWF2ZSAxLjAgaW4gdXNlciBzcGFjZSBiZXR3ZWVuIHRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCBh
bmQgdGhlIHRvcCBvZiB0aGUgdW5kZXJsaW5lLgotICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSBy
aWdodCBkaXN0YW5jZSBmb3Igc3BhY2UgYWJvdmUgdGhlIHVuZGVybGluZT8gRXZlbiBmb3IgdGhp
Y2sgdW5kZXJsaW5lcyBvbiBsYXJnZSBzaXplZCB0ZXh0PwotICAgIHkgKz0gMTsKLQotICAgIGZs
b2F0IHRoaWNrbmVzcyA9IHBlbigpLndpZHRoKCk7Ci0gICAgaWYgKHByaW50aW5nKSB7Ci0gICAg
ICAgIC8vIFdoZW4gcHJpbnRpbmcsIHVzZSBhIG1pbmltdW0gdGhpY2tuZXNzIG9mIDAuNSBpbiB1
c2VyIHNwYWNlLgotICAgICAgICAvLyBTZWUgYnVnemlsbGEgYnVnIDQyNTUgZm9yIGRldGFpbHMg
b2Ygd2h5IDAuNSBpcyB0aGUgcmlnaHQgbWluaW11bSB0aGlja25lc3MgdG8gdXNlIHdoaWxlIHBy
aW50aW5nLgotICAgICAgICBpZiAodGhpY2tuZXNzIDwgMC41KQotICAgICAgICAgICAgdGhpY2tu
ZXNzID0gMC41OwotCi0gICAgICAgIC8vIFdoZW4gcHJpbnRpbmcsIHVzZSBhbnRpYWxpYXNpbmcg
aW5zdGVhZCBvZiBwdXR0aW5nIHRoaW5ncyBvbiBpbnRlZ3JhbCBwaXhlbCBib3VuZGFyaWVzLgot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE9uIHNjcmVlbiwgdXNlIGEgbWluaW11bSB0aGlja25l
c3Mgb2YgMS4wIGluIHVzZXIgc3BhY2UgKGxhdGVyIHJvdW5kZWQgdG8gYW4gaW50ZWdyYWwgbnVt
YmVyIGluIGRldmljZSBzcGFjZSkuCi0gICAgICAgIGlmICh0aGlja25lc3MgPCAxKQotICAgICAg
ICAgICAgdGhpY2tuZXNzID0gMTsKLQotICAgICAgICAvLyBPbiBzY3JlZW4sIHJvdW5kIGFsbCBw
YXJhbWV0ZXJzIHRvIGludGVnZXIgYm91bmRhcmllcyBpbiBkZXZpY2Ugc3BhY2UuCi0gICAgICAg
IENHUmVjdCBsaW5lUmVjdCA9IHJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KHgsIHksIHdp
ZHRoLCB0aGlja25lc3MpKTsKLSAgICAgICAgeCA9IGxpbmVSZWN0Lm9yaWdpbi54OwotICAgICAg
ICB5ID0gbGluZVJlY3Qub3JpZ2luLnk7Ci0gICAgICAgIHdpZHRoID0gKGludCkobGluZVJlY3Qu
c2l6ZS53aWR0aCk7Ci0gICAgICAgIHRoaWNrbmVzcyA9IGxpbmVSZWN0LnNpemUuaGVpZ2h0Owot
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBIb3cgYWJvdXQgdXNpbmcgYSByZWN0YW5nbGUgZmlsbCBp
bnN0ZWFkIG9mIGRyYXdpbmcgYSBsaW5lPwotICAgIENHQ29udGV4dFNhdmVHU3RhdGUocGxhdGZv
cm1Db250ZXh0KCkpOwotCi0gICAgc2V0Q0dTdHJva2VDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwg
cGVuKCkuY29sb3IoKSk7Ci0gICAgCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKHBsYXRmb3Jt
Q29udGV4dCgpLCB0aGlja25lc3MpOwotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhw
bGF0Zm9ybUNvbnRleHQoKSwgcHJpbnRpbmcpOwotCi0gICAgZmxvYXQgaGFsZlRoaWNrbmVzcyA9
IHRoaWNrbmVzcyAvIDI7Ci0KLSAgICBDR1BvaW50IGxpbmVQb2ludHNbMl07Ci0gICAgbGluZVBv
aW50c1swXS54ID0geCArIGhhbGZUaGlja25lc3M7Ci0gICAgbGluZVBvaW50c1swXS55ID0geSAr
IGhhbGZUaGlja25lc3M7Ci0gICAgbGluZVBvaW50c1sxXS54ID0geCArIHdpZHRoIC0gaGFsZlRo
aWNrbmVzczsKLSAgICBsaW5lUG9pbnRzWzFdLnkgPSB5ICsgaGFsZlRoaWNrbmVzczsKLSAgICBD
R0NvbnRleHRTdHJva2VMaW5lU2VnbWVudHMocGxhdGZvcm1Db250ZXh0KCksIGxpbmVQb2ludHMs
IDIpOwotCi0gICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmIGxpbmss
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgQ0ZVUkxSZWYgdXJsUmVmID0gbGluay5j
cmVhdGVDRlVSTCgpOwotICAgIGlmICh1cmxSZWYpIHsKLSAgICAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUg
Ym91bmRpbmcgYm94IHRvIGhhbmRsZSBjbGlwcGluZy4KLSAgICAgICAgQ0dSZWN0IGJveCA9IENH
Q29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKLQotICAgICAgICBJbnRSZWN0IGlu
dEJveCgoaW50KWJveC5vcmlnaW4ueCwgKGludClib3gub3JpZ2luLnksIChpbnQpYm94LnNpemUu
d2lkdGgsIChpbnQpYm94LnNpemUuaGVpZ2h0KTsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gZGVz
dFJlY3Q7Ci0gICAgICAgIHJlY3QuaW50ZXJzZWN0KGludEJveCk7Ci0KLSAgICAgICAgQ0dQREZD
b250ZXh0U2V0VVJMRm9yUmVjdChjb250ZXh0LCB1cmxSZWYsCi0gICAgICAgICAgICBDR1JlY3RB
cHBseUFmZmluZVRyYW5zZm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpKTsKLQot
ICAgICAgICBDRlJlbGVhc2UodXJsUmVmKTsKLSAgICB9Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBM
QVRGT1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLm1tCShyZXZpc2lvbiAxNzg4MykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDEy
ICszMiw5IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiS1VSTC5o
IgogI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZUltYWdlLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAi
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgotI2VuZGlmCi0KICNpbmNsdWRlIDxHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUuaD4gLy8gRklYTUU6IFRlbXBvcmFyeS4KIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKQEAgLTUyOCwxMyArNTI1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFk
ZElubmVyUm91bmRlZFJlYwogICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAotI2lm
ZGVmIFNWR19TVVBQT1JUCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogR3JhcGhpY3NDb250ZXh0
OjpjcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gbmV3IEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KHBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLSNlbmRpZgot
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC02NTEsNiArNjQxLDE2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm8KICAgICB9CiB9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQoreworICAgIENHQ29udGV4dEJlZ2luUGF0
aChwbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRl
eHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAg
LTgwMSw2ICs4MDEsMjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29u
cwogICAgIH0KIH0KIAorR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0Rm9ySW1hZ2UoU1ZHUmVzb3Vy
Y2VJbWFnZSogaW1hZ2UpCit7CisgICAgQ0dMYXllclJlZiBjZ0xheWVyID0gaW1hZ2UtPmNnTGF5
ZXIoKTsKKyAgICBDR0NvbnRleHRSZWYgY3VycmVudENvbnRleHQgPSAoQ0dDb250ZXh0UmVmKSBb
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOworCisgICAg
aWYgKCFjZ0xheWVyKSB7CisgICAgICAgIEFTU0VSVChjdXJyZW50Q29udGV4dCk7CisKKyAgICAg
ICAgLy8gRklYTUU6IHdlIG1pZ2h0IG5vdCBnZXQgYmFjayBhIGxheWVyIGlmIHRoaXMgaXMgYSBs
b2FkZWQgaW1hZ2UKKyAgICAgICAgLy8gbWF5YmUgdGhpcyBsb2dpYyBzaG91bGQgZ28gaW50byBT
VkdSZXNvdXJjZUltYWdlPworICAgICAgICBjZ0xheWVyID0gQ0dMYXllckNyZWF0ZVdpdGhDb250
ZXh0KGN1cnJlbnRDb250ZXh0LCBDR1NpemUoaW1hZ2UtPnNpemUoKSArIEludFNpemUoMSwxKSks
IE5VTEwpOyAgLy8gRklYTUUgKyAxIGlzIGEgaGFjaworICAgICAgICAvLyBGSVhNRTogd2Ugc2hv
dWxkIGNvbXBvc2l0ZSB0aGUgb3JpZ2luYWwgaW1hZ2Ugb250byB0aGUgbGF5ZXIuLi4KKyAgICAg
ICAgaW1hZ2UtPnNldENHTGF5ZXIoY2dMYXllcik7CisgICAgICAgIENHTGF5ZXJSZWxlYXNlKGNn
TGF5ZXIpOworICAgIH0KKyAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dChDR0xheWVyR2V0
Q29udGV4dChjZ0xheWVyKSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKENHKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlci5oCShy
ZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50
U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEwICs1NCwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlID0gMgogICAgIH07CiAKKyAg
ICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogICAgIGNs
YXNzIFJlbmRlclBhdGg7CiAgICAgY2xhc3MgUmVuZGVyU3R5bGU7Ci0gICAgY2xhc3MgS1JlbmRl
cmluZ0RldmljZUNvbnRleHQ7IC8vIEZJWE1FOiBUaGlzIGlzIGdvbmUgc29vbiEKIAogICAgIGNs
YXNzIFNWR1BhaW50U2VydmVyIDogcHVibGljIFNWR1Jlc291cmNlIHsKICAgICBwdWJsaWM6CkBA
IC03NiwxMSArNzYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsK
IAogICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBpbiBwbGF0Zm9ybSBzcGVjaWZpYyBjb2Rl
LgotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNv
bnN0IFJlbmRlclBhdGgqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OwotICAgICAgICB2aXJ0
dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJP
YmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBT
VkdQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyUGF0aCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihHcmFwaGljc0NvbnRleHQqJiwgY29u
c3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlclBhdGgq
LCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1
cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50
VGFyZ2V0VHlwZSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoR3JhcGhp
Y3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29u
c3QgPSAwOwogCiAgICAgcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKENHKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dmcvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcy
LDcgQEAgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcgogICAgICwgbV9z
dG9wc0NhY2hlKDApCiAgICAgLCBtX3N0b3BzQ291bnQoMCkKICAgICAsIG1fc2hhZGluZ0NhY2hl
KDApCisgICAgLCBtX3NhdmVkQ29udGV4dCgwKQogI2VuZGlmCiB7CiB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dC5oCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NW
R1BhaW50U2VydmVyR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTAgKzc3LDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKENHKQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBj
b25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJl
bmRlclBhdGgqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZv
aWQgdGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1Bh
aW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEdy
YXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJQYXRoKiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBj
b25zdDsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9i
amVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGUoKTsKIApAQCAtMTE1LDYgKzExNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBDR1NoYWRpbmdSZWYgbV9zaGFkaW5nQ2FjaGU7CiAgICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR1Jlc291cmNlSW1hZ2U+IG1fbWFza0ltYWdlOworCisgICAgICAgIG11dGFibGUg
R3JhcGhpY3NDb250ZXh0KiBtX3NhdmVkQ29udGV4dDsKICNlbmRpZgogICAgIH07CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWlu
dFNlcnZlckxpbmVhckdyYWRpZW50LmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25z
dDsKIAogI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5
cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoR3JhcGhpY3NDb250ZXh0KiYs
IGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CiAjZW5kaWYK
IAogICAgIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQ
YWludFNlcnZlclBhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N2Zy9TVkdQYWludFNlcnZlclBhdHRlcm4uaAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclBhdHRlcm4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsMTIgKzY0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBj
b25zdDsKIAogI2lmIFBMQVRGT1JNKENHKQotICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdl
dFR5cGUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNv
bnN0OyAKKyAgICAgICAgdmlydHVhbCBib29sIHNldHVwKEdyYXBoaWNzQ29udGV4dComLCBjb25z
dCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIHZvaWQgdGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCos
IFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7IAogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkK
LSAgICAgICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29u
c3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBib29sIHNldHVwKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBT
VkdQYWludFRhcmdldFR5cGUpIGNvbnN0OwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50
U2VydmVyUmFkaWFsR3JhZGllbnQuaAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0
OwogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlw
ZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGljc0NvbnRleHQqJiwg
Y29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKICNlbmRpZgog
CiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Bh
aW50U2VydmVyU29saWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N2Zy9TVkdQYWludFNlcnZlclNvbGlkLmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKIAog
I2lmIFBMQVRGT1JNKENHKSB8fCBQTEFURk9STShRVCkKLSAgICAgICAgdmlydHVhbCBib29sIHNl
dHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFp
bnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHNldHVwKEdyYXBoaWNz
Q29udGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0
OwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdmcvU1ZHUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3ZnL1NWR1Jlc291cmNlLmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDE2ICs2Niw2IEBAIGNvbnN0IFJlbmRlclBhdGhMaXN0JiBTVkdSZXNvdXJjZTo6Y2xpZW4KICAg
ICByZXR1cm4gbV9jbGllbnRzOwogfQogCi1TdHJpbmcgU1ZHUmVzb3VyY2U6OmlkSW5SZWdpc3Ry
eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVnaXN0cnlJZDsKLX0KLQotdm9pZCBTVkdSZXNv
dXJjZTo6c2V0SWRJblJlZ2lzdHJ5KGNvbnN0IFN0cmluZyYgaWQpCi17Ci0gICAgbV9yZWdpc3Ry
eUlkID0gaWQ7Ci19Ci0KIFRleHRTdHJlYW0mIFNWR1Jlc291cmNlOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzKSBjb25zdAogewogICAgIHJldHVybiB0czsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2UuaAkocmV2aXNpb24gMTc5
MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw5ICs2OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBjb25zdCBSZW5kZXJQYXRoTGlzdCYgY2xpZW50cygpIGNvbnN0OwogCi0gICAgICAgIFN0cmlu
ZyBpZEluUmVnaXN0cnkoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRJZEluUmVnaXN0cnkoY29u
c3QgU3RyaW5nJik7Ci0KICAgICAgICAgdmlydHVhbCBib29sIGlzUGFpbnRTZXJ2ZXIoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGaWx0ZXIoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDbGlwcGVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTgxLDcgKzc4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU3RyaW5nIG1fcmVnaXN0
cnlJZDsKICAgICAgICAgUmVuZGVyUGF0aExpc3QgbV9jbGllbnRzOwogICAgIH07CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlQ2xpcHBlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlQ2xpcHBl
ci5oCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NW
R1Jlc291cmNlQ2xpcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPENsaXBEYXRhPiBtX2NsaXBEYXRhOwogICAg
IH07ICAKIAorICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKKwogICAgIGNsYXNzIFNWR1Jlc291
cmNlQ2xpcHBlciA6IHB1YmxpYyBTVkdSZXNvdXJjZSB7CiAgICAgcHVibGljOgogICAgICAgICBT
VkdSZXNvdXJjZUNsaXBwZXIoKTsKQEAgLTcyLDcgKzc0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBz
cGVjaWZpYyByZW5kZXJpbmcgZGV2aWNlcwotICAgICAgICB2b2lkIGFwcGx5Q2xpcChjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKKyAgICAgICAgdm9pZCBhcHBseUNsaXAoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3Q7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBDbGlwRGF0YUxpc3QgbV9jbGlwRGF0YTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlRmlsdGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VGaWx0ZXIuaAkocmV2
aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJj
ZUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpZmRlZiBTVkdf
U1VQUE9SVAogI2luY2x1ZGUgIlNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWZm
ZWN0LmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIApAQCAtNDksNiArNTAsNyBAQCBjbGFz
cyBOU011dGFibGVEaWN0aW9uYXJ5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dDsKIGNsYXNzIFNWR0ZpbHRlckVmZmVjdDsKIAogY2xhc3MgU1ZHUmVzb3Vy
Y2VGaWx0ZXIgOiBwdWJsaWMgU1ZHUmVzb3VyY2UgewpAQCAtNTcsNiArNTksOCBAQCBwdWJsaWM6
CiAgICAgU1ZHUmVzb3VyY2VGaWx0ZXIoKTsKICAgICB2aXJ0dWFsIH5TVkdSZXNvdXJjZUZpbHRl
cigpOwogCisgICAgc3RhdGljIFNWR0ZpbHRlckVmZmVjdCogY3JlYXRlRmlsdGVyRWZmZWN0KGNv
bnN0IFNWR0ZpbHRlckVmZmVjdFR5cGUmKTsKKwogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbHRlcigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgZmlsdGVyQm91bmRpbmdCb3hNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJCQm94TW9kZTsgfQpAQCAtNzYsOCArODAsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mKSBjb25zdDsKIAogICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIGluIHBsYXRmb3Jt
IHNwZWNpZmljIGNvZGUuCi0gICAgdm9pZCBwcmVwYXJlRmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYg
YmJveCk7Ci0gICAgdm9pZCBhcHBseUZpbHRlcihjb25zdCBGbG9hdFJlY3QmIGJib3gpOworICAg
IHZvaWQgcHJlcGFyZUZpbHRlcihHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgRmxvYXRSZWN0JiBi
Ym94KTsKKyAgICB2b2lkIGFwcGx5RmlsdGVyKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBGbG9h
dFJlY3QmIGJib3gpOwogCiAjaWYgUExBVEZPUk0oQ0kpCiAgICAgQ0lJbWFnZSogaW1hZ2VGb3JO
YW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0OwpAQCAtOTMsNiArOTcsNyBAQCBwcml2YXRlOgogCiAg
ICAgQ0lDb250ZXh0KiBtX2ZpbHRlckNJQ29udGV4dDsKICAgICBDR0xheWVyUmVmIG1fZmlsdGVy
Q0dMYXllcjsKKyAgICBHcmFwaGljc0NvbnRleHQqIG1fc2F2ZWRDb250ZXh0OwogICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkqIG1faW1hZ2VzQnlOYW1lOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlTWFza2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VNYXNrZXIuaAkocmV2aXNp
b24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZU1h
c2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
ICAgIGNsYXNzIFNWR1Jlc291cmNlSW1hZ2U7CiAKICAgICBjbGFzcyBTVkdSZXNvdXJjZU1hc2tl
ciA6IHB1YmxpYyBTVkdSZXNvdXJjZSB7CkBAIC00Nyw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mKSBjb25zdDsKIAogICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBieSB0
aGUgc3BlY2lmaWMgcmVuZGVyaW5nIGRldmljZXMKLSAgICAgICAgdm9pZCBhcHBseU1hc2soY29u
c3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3Q7CisgICAgICAgIHZvaWQgYXBwbHlNYXNr
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0Owog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFNWR1Jlc291cmNlSW1hZ2U+IG1fbWFzazsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL0NnU3VwcG9ydC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvQ2dTdXBwb3J0LmNw
cAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9D
Z1N1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2Vy
dmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2luY2x1ZGUgIlF1YXJ0elN1cHBvcnQuaCIK
KyNpbmNsdWRlICJDZ1N1cHBvcnQuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCi0jaW5jbHVkZSAid3RmL0Fzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL0NnU3VwcG9ydC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL0NnU3VwcG9ydC5oCShy
ZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL0NnU3Vw
cG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
ICAqLwogCi0jaWZuZGVmIFF1YXJ0elN1cHBvcnRfSAotI2RlZmluZSBRdWFydHpTdXBwb3J0X0gK
KyNpZm5kZWYgQ2dTdXBwb3J0X0gKKyNkZWZpbmUgQ2dTdXBwb3J0X0gKIAogI2lmZGVmIFNWR19T
VVBQT1JUCiAKQEAgLTc2LDQgKzc2LDQgQEAgc3RhdGljIGlubGluZSBDR0xpbmVKb2luIENHTGlu
ZUpvaW5Gcm9tSwogfQogCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLSNlbmRpZiAvLyAhUXVhcnR6
U3VwcG9ydF9ICisjZW5kaWYgLy8gIUNnU3VwcG9ydF9ICkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N2Zy9jZy9SZW5kZXJQYXRoQ2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1JlbmRlclBhdGhDZy5jcHAJKHJldmlzaW9uIDE3ODgz
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvUmVuZGVyUGF0aENnLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsNyBAQAogCiAjaW5jbHVkZSA8QXBwbGljYXRpb25T
ZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgotI2luY2x1ZGUg
IlF1YXJ0elN1cHBvcnQuaCIKKyNpbmNsdWRlICJDZ1N1cHBvcnQuaCIKICNpbmNsdWRlICJSZW5k
ZXJQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdTdHls
ZWRFbGVtZW50LmgiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQ
YWludFNlcnZlckNnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N2Zy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTIgKzI0LDEyIEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJT
VkdQYWludFNlcnZlci5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFNWR1BhaW50U2VydmVyOjpkcmF3KEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBTVkdQYWlu
dFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgU1ZHUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKCFzZXR1cChjb250ZXh0LCBwYXRoLCB0eXBl
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzgsMTcgKzM4LDE1IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2
ZXI6OmRyYXcoS1JlbmRlcmluZ0RldmkKICAgICB0ZWFyZG93bihjb250ZXh0LCBwYXRoLCB0eXBl
KTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlcjo6dGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0Cit2
b2lkIFNWR1BhaW50U2VydmVyOjp0ZWFyZG93bihHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVu
ZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdAogewogICAgIC8vIG5vLW9wCiB9
CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0
eXBlKSBjb25zdAordm9pZCBTVkdQYWludFNlcnZlcjo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBTVkdQYWludFRhcmdldFR5cGUg
dHlwZSkgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBwYXRoLT5zdHlsZSgpOwot
Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0ekNvbnRleHQgPSBzdGF0
aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KGNvbnRleHQpOwotICAgIENH
Q29udGV4dFJlZiBjb250ZXh0UmVmID0gcXVhcnR6Q29udGV4dC0+Y2dDb250ZXh0KCk7CisgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAog
ICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxl
KCktPmhhc0ZpbGwoKSkKICAgICAgICAgZmlsbFBhdGgoY29udGV4dFJlZiwgcGF0aCk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50
Q2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NW
R1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDExIEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNs
dWRlICJTVkdQYWludFNlcnZlckdyYWRpZW50LmgiCiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2
aWNlUXVhcnR6LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZH
UGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUmFk
aWFsR3JhZGllbnQuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0jaW5jbHVkZSAiUXVhcnR6
U3VwcG9ydC5oIgorI2luY2x1ZGUgIkNnU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTE2NywxMSArMTY3LDEwIEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dXBk
YXRlUXVhcnQKICAgICB9CiB9CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVhcmRv
d24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudDo6dGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAg
IENHU2hhZGluZ1JlZiBzaGFkaW5nID0gbV9zaGFkaW5nQ2FjaGU7Ci0gICAgS1JlbmRlcmluZ0Rl
dmljZVF1YXJ0eiogcXVhcnR6RGV2aWNlID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZVF1
YXJ0eio+KHJlbmRlcmluZ0RldmljZSgpKTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9
IHF1YXJ0ekRldmljZS0+Y3VycmVudENHQ29udGV4dCgpOworICAgIENHQ29udGV4dFJlZiBjb250
ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gb2JqZWN0LT5zdHlsZSgpOwogICAgIEFTU0VSVChjb250ZXh0UmVmICE9IE5VTEwpOwog
CkBAIC0xNzksMTUgKzE3OCwxOSBAQCB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJk
b3duKEtSCiAgICAgICAgIC8vIHdvcmthcm91bmQgZm9yIGZpbGxpbmcgdGhlIGVudGlyZSBzY3Jl
ZW4gd2l0aCB0aGUgc2hhZGluZyBpbiB0aGUgY2FzZSB0aGF0IG5vIHRleHQgd2FzIGludGVyc2Vj
dGVkIHdpdGggdGhlIGNsaXAKICAgICAgICAgaWYgKCFpc1BhaW50aW5nVGV4dCgpIHx8IChvYmpl
Y3QtPndpZHRoKCkgPiAwICYmIG9iamVjdC0+aGVpZ2h0KCkgPiAwKSkKICAgICAgICAgICAgIENH
Q29udGV4dERyYXdTaGFkaW5nKGNvbnRleHRSZWYsIHNoYWRpbmcpOwotICAgICAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNvbnRleHRSZWYpOworICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHRSZWYpOyAgICAgICAgCiAgICAgfQogCiAgICAgaWYgKCh0eXBlICYgQXBwbHlU
b1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkgewog
ICAgICAgICBpZiAoaXNQYWludGluZ1RleHQoKSkgewogICAgICAgICAgICAgaW50IHdpZHRoICA9
IDIwNDg7CiAgICAgICAgICAgICBpbnQgaGVpZ2h0ID0gMjA0ODsgLy8gRklYTUU/Pz8gU0VFIEFC
T1ZFCi0gICAgICAgICAgICBkZWxldGUgcXVhcnR6RGV2aWNlLT5wb3BDb250ZXh0KCk7Ci0gICAg
ICAgICAgICBjb250ZXh0UmVmID0gcXVhcnR6RGV2aWNlLT5jdXJyZW50Q0dDb250ZXh0KCk7CisK
KyAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgICAgICAgICAgY29udGV4dCA9IG1fc2F2
ZWRDb250ZXh0OworICAgICAgICAgICAgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgICAgICAgICAgbV9zYXZlZENvbnRleHQgPSAwOworCiAgICAgICAgICAgICB2
b2lkKiBpbWFnZUJ1ZmZlciA9IGZhc3RNYWxsb2Mod2lkdGggKiBoZWlnaHQpOwogICAgICAgICAg
ICAgQ0dDb2xvclNwYWNlUmVmIGdyYXlDb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2
aWNlR3JheSgpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGdyYXlzY2FsZUNvbnRleHQgPSBD
R0JpdG1hcENvbnRleHRDcmVhdGUoaW1hZ2VCdWZmZXIsIHdpZHRoLCBoZWlnaHQsIDgsIHdpZHRo
LCBncmF5Q29sb3JTcGFjZSwga0NHSW1hZ2VBbHBoYU5vbmUpOwpAQCAtMTk5LDE2ICsyMDIsMTUg
QEAgdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bihLUgogICAgICAgICAgICAg
Q0dJbWFnZVJlbGVhc2UoZ3JheXNjYWxlSW1hZ2UpOwogICAgICAgICB9CiAgICAgICAgIENHQ29u
dGV4dERyYXdTaGFkaW5nKGNvbnRleHRSZWYsIHNoYWRpbmcpOwotICAgICAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKGNvbnRleHRSZWYpOworICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRl
KGNvbnRleHRSZWYpOyAgICAgICAgCiAgICAgfQogCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0UmVmKTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQ
YXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBw
YXRoLCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJQYXRoKiBwYXRoLCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKLSAgICBLUmVu
ZGVyaW5nRGV2aWNlUXVhcnR6KiBxdWFydHpEZXZpY2UgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6Kj4ocmVuZGVyaW5nRGV2aWNlKCkpOwotICAgIENHQ29udGV4dFJlZiBjb250
ZXh0UmVmID0gcXVhcnR6RGV2aWNlLT5jdXJyZW50Q0dDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBwYXRoLT5zdHlsZSgpOwogICAgIEFTU0VSVChjb250ZXh0UmVmICE9IE5V
TEwpOwogCkBAIC0yMzMsNyArMjM1LDcgQEAgdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojpy
ZW5kZXJQYXRoKAogICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0UmVmLCB0cmFuc2Zvcm0p
OwogfQogCi1ib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRU
YXJnZXRUeXBlIHR5cGUpIGNvbnN0Citib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVw
KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBT
VkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBpZiAobGlzdGVuZXIoKSkgLy8g
dGhpcyBzZWVtcyBsaWtlIGJhZCBkZXNpZ24gdG8gbWUsIHNob3VsZCBiZSBpbiBhIGNvbW1vbiBi
YXNlY2xhc3MuIC0tIGVjcyA4LzYvMDUKICAgICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3Rp
ZmljYXRpb24oKTsKQEAgLTI0Myw4ICsyNDUsNyBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGll
bnQ6OnNldHVwKEtSZW5kCiAgICAgaWYgKCFtX3NoYWRpbmdDYWNoZSkKICAgICAgICAgY29uc3Rf
Y2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50Kj4odGhpcyktPnVwZGF0ZVF1YXJ0ekdyYWRpZW50
Q2FjaGUodGhpcyk7CiAKLSAgICBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6KiBxdWFydHpEZXZpY2Ug
PSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Kj4ocmVuZGVyaW5nRGV2aWNlKCkp
OwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0UmVmID0gcXVhcnR6RGV2aWNlLT5jdXJyZW50Q0dD
b250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAg
ICAgQVNTRVJUKGNvbnRleHRSZWYgIT0gTlVMTCk7CiAKQEAgLTI1MiwxMyArMjUzLDEzIEBAIGJv
b2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoS1JlbmQKICAgICBDR0NvbnRleHRTZXRB
bHBoYShjb250ZXh0UmVmLCBzdHlsZS0+b3BhY2l0eSgpKTsKIAogICAgIGlmICgodHlwZSAmIEFw
cGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkgewot
ICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHRSZWYpOworICAgICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHRSZWYpOyAgICAgICAgCiAgICAgICAgIGlmIChpc1BhaW50aW5n
VGV4dCgpKQogICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRS
ZWYsIGtDR1RleHRDbGlwKTsKICAgICB9CiAKICAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tl
VGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAg
IENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dFJlZik7CisgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dFJlZik7ICAgICAgICAKICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29u
dGV4dChjb250ZXh0UmVmLCBzdHlsZSwgb2JqZWN0KTsgLy8gRklYTUU6IHRoaXMgc2VlbXMgbGlr
ZSB0aGUgd3JvbmcgcGxhY2UgZm9yIHRoaXMuCiAgICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCgp
KSB7CiAgICAgICAgICAgICBtX21hc2tJbWFnZSA9IG5ldyBTVkdSZXNvdXJjZUltYWdlKCk7CkBA
IC0yNjYsMTEgKzI2NywxNCBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEtS
ZW5kCiAgICAgICAgICAgICBpbnQgaGVpZ2h0ID0gMjA0ODsgLy8gRklYTUU/Pz8KICAgICAgICAg
ICAgIEludFNpemUgc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICBt
X21hc2tJbWFnZS0+aW5pdChzaXplKTsKLSAgICAgICAgICAgIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0KiBtYXNrSW1hZ2VDb250ZXh0ID0gcXVhcnR6RGV2aWNlLT5jb250ZXh0Rm9ySW1hZ2UobV9t
YXNrSW1hZ2UuZ2V0KCkpOwotICAgICAgICAgICAgcXVhcnR6RGV2aWNlLT5wdXNoQ29udGV4dCht
YXNrSW1hZ2VDb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dFJlZiBtYXNrQ29udGV4dCA9
IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Kj4obWFza0ltYWdlQ29u
dGV4dCktPmNnQ29udGV4dCgpOworCisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tJ
bWFnZUNvbnRleHQgPSBjb250ZXh0Rm9ySW1hZ2UobV9tYXNrSW1hZ2UuZ2V0KCkpOworICAgICAg
ICAgICAgQ0dDb250ZXh0UmVmIG1hc2tDb250ZXh0ID0gbWFza0ltYWdlQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KG9iamVj
dCktPnN0eWxlKCktPnNldENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUpKTsKICAgICAgICAgICAg
IENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShtYXNrQ29udGV4dCwga0NHVGV4dFN0cm9rZSk7
CisKKyAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgICAgIGNv
bnRleHQgPSBtYXNrSW1hZ2VDb250ZXh0OwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvU1ZHUGFpbnRT
ZXJ2ZXJQYXR0ZXJuQ2cuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdQ
YWludFNlcnZlclBhdHRlcm4uaCIKIAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdWFydHou
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZUltYWdlLmgiCi0jaW5jbHVkZSAiUXVhcnR6U3VwcG9y
dC5oIgorI2luY2x1ZGUgIkNnU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM3LDE1ICszNywxNCBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywg
CiAgICAgQ0dDb250ZXh0RHJhd0xheWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50WmVybywgbGF5
ZXIpOwogfQogCi1ib29sIFNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXAoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWlu
dFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1
cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwg
U1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgaWYobGlzdGVuZXIoKSkgLy8g
dGhpcyBzZWVtcyBsaWtlIGJhZCBkZXNpZ24gdG8gbWUsIHNob3VsZCBiZSBpbiBhIGNvbW1vbiBi
YXNlY2xhc3MuIC0tIGVjcyA4LzYvMDUKICAgICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3Rp
ZmljYXRpb24oKTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsK
IAotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihjb250ZXh0KTsKLSAgICBD
R0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOworICAg
IENHQ29udGV4dFJlZiBjb250ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAK
ICAgICBSZWZQdHI8U1ZHUmVzb3VyY2VJbWFnZT4gY2VsbCA9IHRpbGUoKTsKICAgICBpZiAoIWNl
bGwpCkBAIC0xMDIsMTAgKzEwMSw5IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1
cChLUmVuZGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlclBhdHRl
cm46OnRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIFNW
R1BhaW50U2VydmVyUGF0dGVybjo6dGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25z
dAogewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0g
c3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihjb250ZXh0KTsKLSAg
ICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOwor
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgQ0dQYXR0ZXJuUmVsZWFzZShtX3BhdHRlcm4pOwogICAgIENHQ29sb3JTcGFjZVJlbGVh
c2UobV9wYXR0ZXJuU3BhY2UpOwogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dFJl
Zik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZl
clNvbGlkQ2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Zn
L2NnL1NWR1BhaW50U2VydmVyU29saWRDZy5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsMTYgKzI0LDE1IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNs
dWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNl
UXVhcnR6LmgiCi0jaW5jbHVkZSAiUXVhcnR6U3VwcG9ydC5oIgorI2luY2x1ZGUgIkNnU3VwcG9y
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6
c2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK2Jvb2wgU1ZHUGFpbnRT
ZXJ2ZXJTb2xpZDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVy
T2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewotICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihjb250ZXh0KTsKLSAgICBDR0NvbnRleHRS
ZWYgY29udGV4dFJlZiA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOworICAgIENHQ29udGV4
dFJlZiBjb250ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwogCiAgICAgQ0dDb250ZXh0U2V0QWxwaGEo
Y29udGV4dFJlZiwgc3R5bGUtPm9wYWNpdHkoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N2Zy9jZy9TVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwCShy
ZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1Jl
c291cmNlQ2xpcHBlckNnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjIgKzMxLDIwIEBACiAj
aW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCi0jaW5jbHVkZSAiUXVh
cnR6U3VwcG9ydC5oIgorI2luY2x1ZGUgIkNnU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXAoY29uc3QgRmxvYXRSZWN0
JiBib3VuZGluZ0JveCkgY29uc3QKK3ZvaWQgU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXAo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBj
b25zdAogewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gcmVuZGVyaW5n
RGV2aWNlKCktPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9
IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Kj4oY29udGV4dCktPmNn
Q29udGV4dCgpOworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBpZiAobV9jbGlwRGF0YS5jbGlwRGF0YSgpLnNpemUoKSA8IDEpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgaGV0ZXJvZ2Vub3VzQ2xpcFJ1bGVzID0gZmFsc2U7
CiAgICAgV2luZFJ1bGUgY2xpcFJ1bGUgPSBtX2NsaXBEYXRhLmNsaXBEYXRhKClbMF0ud2luZFJ1
bGU7CiAKLSAgICBjb250ZXh0LT5jbGVhclBhdGgoKTsKKyAgICBjb250ZXh0LT5iZWdpblBhdGgo
KTsKIAogICAgIENHQWZmaW5lVHJhbnNmb3JtIGJib3hUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5z
Zm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoQ0dSZWN0TWFrZSgwLDAsMSwxKSwgQ0dSZWN0KGJvdW5k
aW5nQm94KSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1Jl
c291cmNlRmlsdGVyQ2cubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdmcvY2cvU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbQkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdSZXNvdXJjZUZpbHRlckNnLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwyMyBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRm91bmRhdGlvbkV4dHJhcy5oIgotI2lu
Y2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5oIgogCisjaW5jbHVkZSAiU1ZHRkVC
bGVuZC5oIgorI2luY2x1ZGUgIlNWR0ZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJTVkdGRUNv
bXBvbmVudFRyYW5zZmVyLmgiCisjaW5jbHVkZSAiU1ZHRkVDb21wb3NpdGUuaCIKKyNpbmNsdWRl
ICJTVkdGRURpZmZ1c2VMaWdodGluZy5oIgorI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFw
LmgiCisjaW5jbHVkZSAiU1ZHRkVGbG9vZC5oIgorI2luY2x1ZGUgIlNWR0ZFR2F1c3NpYW5CbHVy
LmgiCisjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgorI2luY2x1ZGUgIlNWR0ZFTWVyZ2UuaCIKKyNp
bmNsdWRlICJTVkdGRU9mZnNldC5oIgorI2luY2x1ZGUgIlNWR0ZFU3BlY3VsYXJMaWdodGluZy5o
IgorI2luY2x1ZGUgIlNWR0ZFVGlsZS5oIgorCiAjaW5jbHVkZSA8UXVhcnR6Q29yZS9Db3JlSW1h
Z2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsNiArNTQsNyBAQCBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgU1ZHUHJldmlvdXNGaWx0CiBTVkdSZXNvdXJjZUZpbHRlcjo6U1ZHUmVz
b3VyY2VGaWx0ZXIoKQogICAgIDogbV9maWx0ZXJDSUNvbnRleHQoMCkKICAgICAsIG1fZmlsdGVy
Q0dMYXllcigwKQorICAgICwgbV9zYXZlZENvbnRleHQoMCkKIHsKICAgICBtX2ltYWdlc0J5TmFt
ZSA9IEhhcmRSZXRhaW5XaXRoTlNSZWxlYXNlKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdF0pOwogfQpAQCAtNTEsMTkgKzY2LDQyIEBAIFNWR1Jlc291cmNlRmlsdGVyOjp+U1ZHUmVz
b3VyY2VGaWx0ZXIoKQogICAgIEhhcmRSZWxlYXNlKG1faW1hZ2VzQnlOYW1lKTsKIH0KIAotdm9p
ZCBTVkdSZXNvdXJjZUZpbHRlcjo6cHJlcGFyZUZpbHRlcihjb25zdCBGbG9hdFJlY3QgJmJib3gp
CitTVkdGaWx0ZXJFZmZlY3QqIFNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3Qo
Y29uc3QgU1ZHRmlsdGVyRWZmZWN0VHlwZSYgdHlwZSkKIHsKLSAgICBpZiAoYmJveC5pc0VtcHR5
KCkgfHwgIUtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmZpbHRlcnNFbmFibGVkKCkgfHwgbV9lZmZl
Y3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdEZXZp
Y2UoKSktPmN1cnJlbnRDR0NvbnRleHQoKTsKKyAgICBzd2l0Y2godHlwZSkKKyAgICB7CisgICAg
LyogTGlnaHQgc291cmNlcyBhcmUgY29udGFpbmVkIGJ5IHRoZSBkaWZmdXNlL3NwZWN1bGFyIGxp
Z2h0IGJsb2NrcyAKKyAgICBjYXNlIEZFX0RJU1RBTlRfTElHSFQ6IAorICAgIGNhc2UgRkVfUE9J
TlRfTElHSFQ6IAorICAgIGNhc2UgRkVfU1BPVF9MSUdIVDogCisgICAgKi8KKyAgICBjYXNlIEZF
X0JMRU5EOiByZXR1cm4gbmV3IFNWR0ZFQmxlbmQoKTsKKyAgICBjYXNlIEZFX0NPTE9SX01BVFJJ
WDogcmV0dXJuIG5ldyBTVkdGRUNvbG9yTWF0cml4KCk7CisgICAgY2FzZSBGRV9DT01QT05FTlRf
VFJBTlNGRVI6IHJldHVybiBuZXcgU1ZHRkVDb21wb25lbnRUcmFuc2ZlcigpOworICAgIGNhc2Ug
RkVfQ09NUE9TSVRFOiByZXR1cm4gbmV3IFNWR0ZFQ29tcG9zaXRlKCk7CisvLyAgY2FzZSBGRV9D
T05WT0xWRV9NQVRSSVg6CisgICAgY2FzZSBGRV9ESUZGVVNFX0xJR0hUSU5HOiByZXR1cm4gbmV3
IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nKCk7CisgICAgY2FzZSBGRV9ESVNQTEFDRU1FTlRfTUFQOiBy
ZXR1cm4gbmV3IFNWR0ZFRGlzcGxhY2VtZW50TWFwKCk7CisgICAgY2FzZSBGRV9GTE9PRDogcmV0
dXJuIG5ldyBTVkdGRUZsb29kKCk7CisgICAgY2FzZSBGRV9HQVVTU0lBTl9CTFVSOiByZXR1cm4g
bmV3IFNWR0ZFR2F1c3NpYW5CbHVyKCk7CisgICAgY2FzZSBGRV9JTUFHRTogcmV0dXJuIG5ldyBT
VkdGRUltYWdlKCk7CisgICAgY2FzZSBGRV9NRVJHRTogcmV0dXJuIG5ldyBTVkdGRU1lcmdlKCk7
CisvLyAgY2FzZSBGRV9NT1JQSE9MT0dZOgorICAgIGNhc2UgRkVfT0ZGU0VUOiByZXR1cm4gbmV3
IFNWR0ZFT2Zmc2V0KCk7CisgICAgY2FzZSBGRV9TUEVDVUxBUl9MSUdIVElORzogcmV0dXJuIG5l
dyBTVkdGRVNwZWN1bGFyTGlnaHRpbmcoKTsKKyAgICBjYXNlIEZFX1RJTEU6IHJldHVybiBuZXcg
U1ZHRkVUaWxlKCk7CisvLyAgY2FzZSBGRV9UVVJCVUxFTkNFOgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KK30KIAotICAgIC8vIGdldCBhIENJQ29udGV4dCwgYW5kIENH
TGF5ZXIgZm9yIGRyYXdpbmcgaW4uCi0gICAgYm9vbCB1c2VTb2Z0d2FyZSA9ICEgS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ejo6aGFyZHdhcmVSZW5kZXJpbmdFbmFibGVkKCk7Ci0gICAgTlNEaWN0aW9u
YXJ5ICpjb250ZXh0T3B0aW9ucyA9IG5pbDsKK3ZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OnByZXBh
cmVGaWx0ZXIoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBiYm94
KQoreworICAgIGlmIChiYm94LmlzRW1wdHkoKSB8fCBtX2VmZmVjdHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAodXNlU29mdHdhcmUpCi0gICAgICAgIGNvbnRleHRPcHRp
b25zID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpZRVNdLCBrQ0lDb250ZXh0VXNlU29mdHdhcmVSZW5kZXJlciwgbmls
XTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CiAKICAgICAvLyBVc2Ugb2YgQ0dCZWdpbi9FbmRUcmFuc3BhcmVuY3lMYXllciBhcm91bmQg
dGhpcyBjYWxsIGNhdXNlcyBvdmVyIHJlbGVhc2UKICAgICAvLyBvZiBjZ0NvbnRleHQgZHVlIHRv
IGl0IGJlaW5nIGNyZWF0ZWQgb24gYW4gYXV0b3JlbGVhc2UgcG9vbCwgYW5kIHJlbGVhc2VkCkBA
IC03MSwzMSArMTA5LDI4IEBAIHZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OnByZXBhcmVGaWx0ZXIo
Y28KICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyNT4K
ICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0Nz4KICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNDY0NzczNT4KLSAgICBOU0F1dG9yZWxlYXNlUG9vbCAqZmls
dGVyQ29udGV4dFBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKLSAgICBt
X2ZpbHRlckNJQ29udGV4dCA9IEhhcmRSZXRhaW4oW0NJQ29udGV4dCBjb250ZXh0V2l0aENHQ29u
dGV4dDpjZ0NvbnRleHQgb3B0aW9uczpjb250ZXh0T3B0aW9uc10pOworICAgIE5TQXV0b3JlbGVh
c2VQb29sKiBmaWx0ZXJDb250ZXh0UG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGlu
aXRdOworICAgIG1fZmlsdGVyQ0lDb250ZXh0ID0gSGFyZFJldGFpbihbQ0lDb250ZXh0IGNvbnRl
eHRXaXRoQ0dDb250ZXh0OmNnQ29udGV4dCBvcHRpb25zOm5pbF0pOwogICAgIFtmaWx0ZXJDb250
ZXh0UG9vbCBkcmFpbl07CiAKICAgICBtX2ZpbHRlckNHTGF5ZXIgPSBbbV9maWx0ZXJDSUNvbnRl
eHQgY3JlYXRlQ0dMYXllcldpdGhTaXplOkNHUmVjdChiYm94KS5zaXplIGluZm86TlVMTF07Cisg
ICAgbV9zYXZlZENvbnRleHQgPSBjb250ZXh0OwogCi0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQqIGZpbHRlckNvbnRleHQgPSBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dM
YXllckdldENvbnRleHQobV9maWx0ZXJDR0xheWVyKSk7Ci0gICAgcmVuZGVyaW5nRGV2aWNlKCkt
PnB1c2hDb250ZXh0KGZpbHRlckNvbnRleHQpOwotCi0gICAgZmlsdGVyQ29udGV4dC0+Y29uY2F0
Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSgtMS4wZiAqIGJib3gueCgpLCAtMS4wZiAq
IGJib3gueSgpKSk7CisgICAgY29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQoQ0dMYXllckdl
dENvbnRleHQobV9maWx0ZXJDR0xheWVyKSk7CisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNv
bnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoLTEuMGYgKiBiYm94
LngoKSwgLTEuMGYgKiBiYm94LnkoKSkpOwogfQogCi12b2lkIFNWR1Jlc291cmNlRmlsdGVyOjph
cHBseUZpbHRlcihjb25zdCBGbG9hdFJlY3QgJmJib3gpCit2b2lkIFNWR1Jlc291cmNlRmlsdGVy
OjphcHBseUZpbHRlcihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGJib3gpCiB7Ci0gICAgaWYgKGJib3guaXNFbXB0eSgpIHx8ICFLUmVuZGVyaW5nRGV2aWNlUXVh
cnR6OjpmaWx0ZXJzRW5hYmxlZCgpIHx8IG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKGJi
b3guaXNFbXB0eSgpIHx8IG1fZWZmZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIHJlc3RvcmUgdGhlIHByZXZpb3VzIGNvbnRleHQsIGRlbGV0ZSB0aGUgZmlsdGVyIGNv
bnRleHQuCi0gICAgZGVsZXRlIChyZW5kZXJpbmdEZXZpY2UoKS0+cG9wQ29udGV4dCgpKTsKLQog
ICAgIC8vIGFjdHVhbGx5IGFwcGx5IHRoZSBmaWx0ZXIgZWZmZWN0cwotICAgIENJSW1hZ2UgKmlu
cHV0SW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhDR0xheWVyOm1fZmlsdGVyQ0dMYXllcl07Ci0g
ICAgTlNBcnJheSAqZmlsdGVyU3RhY2sgPSBnZXRDSUZpbHRlclN0YWNrKGlucHV0SW1hZ2UpOwor
ICAgIENJSW1hZ2UqIGlucHV0SW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhDR0xheWVyOm1fZmls
dGVyQ0dMYXllcl07CisgICAgTlNBcnJheSogZmlsdGVyU3RhY2sgPSBnZXRDSUZpbHRlclN0YWNr
KGlucHV0SW1hZ2UpOwogICAgIGlmIChbZmlsdGVyU3RhY2sgY291bnRdKSB7Ci0gICAgICAgIENJ
SW1hZ2UgKm91dHB1dEltYWdlID0gW1tmaWx0ZXJTdGFjayBsYXN0T2JqZWN0XSB2YWx1ZUZvcktl
eTpAIm91dHB1dEltYWdlIl07CisgICAgICAgIENJSW1hZ2UqIG91dHB1dEltYWdlID0gW1tmaWx0
ZXJTdGFjayBsYXN0T2JqZWN0XSB2YWx1ZUZvcktleTpAIm91dHB1dEltYWdlIl07CiAgICAgICAg
IGlmIChvdXRwdXRJbWFnZSkgewogICAgICAgICAgICAgQ0dSZWN0IGZpbHRlclJlY3QgPSBDR1Jl
Y3QoZmlsdGVyQkJveEZvckl0ZW1CQm94KGJib3gpKTsKICAgICAgICAgICAgIENHUmVjdCB0cmFu
c2xhdGVkID0gZmlsdGVyUmVjdDsKQEAgLTExNSw2ICsxNTAsMTAgQEAgdm9pZCBTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlGaWx0ZXIoY29ucwogCiAgICAgSGFyZFJlbGVhc2UobV9maWx0ZXJDSUNv
bnRleHQpOwogICAgIG1fZmlsdGVyQ0lDb250ZXh0ID0gMDsKKworICAgIGRlbGV0ZSBjb250ZXh0
OworICAgIGNvbnRleHQgPSBtX3NhdmVkQ29udGV4dDsKKyAgICBtX3NhdmVkQ29udGV4dCA9IDA7
CiB9CiAKIE5TQXJyYXkqIFNWR1Jlc291cmNlRmlsdGVyOjpnZXRDSUZpbHRlclN0YWNrKENJSW1h
Z2UqIGlucHV0SW1hZ2UpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9T
VkdSZXNvdXJjZU1hc2tlckNnLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3ZnL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW0JKHJldmlzaW9uIDE3OTM4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZmRlZiBTVkdfU1VQUE9SVApAQCAtMzIsOCArMzEs
OCBAQAogI2ltcG9ydCAiU1ZHUmVzb3VyY2VJbWFnZS5oIgogI2ltcG9ydCAiU1ZHUmVuZGVyU3R5
bGUuaCIKIAotI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgotI2ltcG9ydCAiUXVh
cnR6U3VwcG9ydC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJDZ1N1
cHBvcnQuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KICNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ0lGaWx0ZXIuaD4KQEAgLTg4LDcgKzg3LDcgQEAgc3RhdGljIENJSW1hZ2UqIHRy
YW5zZm9ybUltYWdlSW50b0dyYXlzYwogICAgIHJldHVybiBbbXVsdGlwbGllZEdyYXlzY2FsZSB2
YWx1ZUZvcktleTpAIm91dHB1dEltYWdlIl07CiB9CiAKLXZvaWQgU1ZHUmVzb3VyY2VNYXNrZXI6
OmFwcGx5TWFzayhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdAordm9pZCBTVkdS
ZXNvdXJjZU1hc2tlcjo6YXBwbHlNYXNrKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3QKIHsKICAgICBpZiAoIW1fbWFzaykKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA2LDkgKzEwNSw5IEBAIHZvaWQgU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5TWFzayhjb25zdCAKICAgICBbY2lHcmF5c2NhbGVDb250ZXh0IGRyYXdJbWFnZTpncmF5c2Nh
bGVNYXNrIGF0UG9pbnQ6Q0dQb2ludFplcm8gZnJvbVJlY3Q6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0
aCwgaGVpZ2h0KV07CiAKICAgICBDR0ltYWdlUmVmIGdyYXlzY2FsZUltYWdlID0gQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoZ3JheXNjYWxlQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdE
ZXZpY2UoKSktPmN1cnJlbnRDR0NvbnRleHQoKTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhj
Z0NvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdodCksIGdyYXlzY2FsZUltYWdl
KTsKLSAgICAKKwogICAgIENHSW1hZ2VSZWxlYXNlKGdyYXlzY2FsZUltYWdlKTsKICAgICBDR0Nv
bnRleHRSZWxlYXNlKGdyYXlzY2FsZUNvbnRleHQpOwogICAgIGZhc3RGcmVlKGltYWdlQnVmZmVy
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2ZpbHRlcnMvY2cvU1ZHRkVJ
bWFnZUNnLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2Zp
bHRlcnMvY2cvU1ZHRkVJbWFnZUNnLm1tCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3ZnL2ZpbHRlcnMvY2cvU1ZHRkVJbWFnZUNnLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlNW
R0ZFSGVscGVyc0NnLmgiCi0jaW5jbHVkZSAiUXVhcnR6U3VwcG9ydC5oIgorI2luY2x1ZGUgIkNn
U3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudFF0LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwxNyArMjQsMjIgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2lu
Y2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKIAotI2luY2x1ZGUgIktSZW5k
ZXJpbmdEZXZpY2VRdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IlJlbmRlclBhdGguaCIKIAogI2luY2x1ZGUgPFFMaW5lYXJHcmFkaWVudD4KKyNpbmNsdWRlIDxR
UGFpbnRlcj4KKyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50OjpzZXR1cChLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50
VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorYm9vbCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50
OjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRRdCogcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdCo+KGNvbnRleHQpOwotICAgIFFfQVNTRVJUKHF0Q29udGV4dCAhPSAwKTsKKyAgICBR
UGFpbnRlciogcGFpbnRlcihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAw
KTsKKyAgICBRX0FTU0VSVChwYWludGVyKTsKKworICAgIFFQYWludGVyUGF0aCogcGF0aChjb250
ZXh0ID8gY29udGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOworICAgIFFfQVNTRVJUKHBhdGgpOwog
CiAgICAgaWYgKGxpc3RlbmVyKCkpCiAgICAgICAgIGxpc3RlbmVyKCktPnJlc291cmNlTm90aWZp
Y2F0aW9uKCk7CkBAIC00Myw3ICs0OCw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFk
aWVudDo6c2V0dXAKIAogICAgIGRvdWJsZSB4MSwgeDIsIHkxLCB5MjsKICAgICBpZiAoYm91bmRp
bmdCb3hNb2RlKCkpIHsKLSAgICAgICAgUVJlY3RGIGJib3ggPSBxdENvbnRleHQtPnBhdGhCQm94
KCk7CisgICAgICAgIFFSZWN0RiBiYm94ID0gcGF0aC0+Ym91bmRpbmdSZWN0KCk7CiAgICAgICAg
IHgxID0gZG91YmxlKGJib3gubGVmdCgpKSArIChkb3VibGUoZ3JhZGllbnRTdGFydCgpLngoKSAv
IDEwMC4wKSAqIGRvdWJsZShiYm94LndpZHRoKCkpKTsKICAgICAgICAgeTEgPSBkb3VibGUoYmJv
eC50b3AoKSkgKyAoZG91YmxlKGdyYWRpZW50U3RhcnQoKS55KCkgLyAxMDAuMCkgKiBkb3VibGUo
YmJveC5oZWlnaHQoKSkpOwogICAgICAgICB4MiA9IGRvdWJsZShiYm94LmxlZnQoKSkgKyAoZG91
YmxlKGdyYWRpZW50RW5kKCkueCgpIC8gMTAwLjApICAqIGRvdWJsZShiYm94LndpZHRoKCkpKTsK
QEAgLTU1LDggKzYwLDggQEAgYm9vbCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50OjpzZXR1
cAogICAgICAgICB5MiA9IGdyYWRpZW50RW5kKCkueSgpOwogICAgIH0KIAotICAgIHF0Q29udGV4
dC0+cGFpbnRlcigpLnNldFBlbihRdDo6Tm9QZW4pOwotICAgIHF0Q29udGV4dC0+cGFpbnRlcigp
LnNldEJydXNoKFF0OjpOb0JydXNoKTsKKyAgICBwYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsK
KyAgICBwYWludGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CiAKICAgICBRTGluZWFyR3JhZGll
bnQgZ3JhZGllbnQoUVBvaW50Rih4MSwgeTEpLCBRUG9pbnRGKHgyLCB5MikpOwogICAgIGlmIChz
cHJlYWRNZXRob2QoKSA9PSBTUFJFQURNRVRIT0RfUkVQRUFUKQpAQCAtNzUsOCArODAsOCBAQCBi
b29sIFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ6OnNldHVwCiAKICAgICAgICAgUUJydXNo
IGJydXNoKGdyYWRpZW50KTsKIAotICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVz
aChicnVzaCk7Ci0gICAgICAgIHF0Q29udGV4dC0+c2V0RmlsbFJ1bGUocmVuZGVyU3R5bGUtPnN2
Z1N0eWxlKCktPmZpbGxSdWxlKCkpOworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChicnVzaCk7
CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5m
aWxsUnVsZSgpKTsKICAgICB9CiAKICAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0
VHlwZSkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKSB7CkBAIC04OCw3
ICs5Myw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudDo6c2V0dXAKICAgICAg
ICAgc2V0UGVuUHJvcGVydGllcyhvYmplY3QsIHJlbmRlclN0eWxlLCBwZW4pOwogICAgICAgICBw
ZW4uc2V0QnJ1c2goYnJ1c2gpOwogCi0gICAgICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldFBl
bihwZW4pOworICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKICAgICB9CiAKICAgICByZXR1
cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50
U2VydmVyUGF0dGVyblF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N2Zy9xdC9TVkdQYWludFNlcnZlclBhdHRlcm5RdC5jcHAJKHJldmlzaW9uIDE3OTM4KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMTMgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1ib29sIFNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXAoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWlu
dFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1
cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwg
U1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFJlYWN0aXZh
dGUgb2xkIHBhdHRlcm4gY29kZQogCiAvKgotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQq
IHF0Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihjb250
ZXh0KTsKLSAgICBRX0FTU0VSVChxdENvbnRleHQgIT0gMCk7CisgICAgUVBhaW50ZXIqIHBhaW50
ZXIoY29udGV4dCA/IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMCk7CisgICAgUV9BU1NF
UlQocGFpbnRlcik7CiAKICAgICBRUGFpbnRlclBhdGgqIF9wYXRoID0gc3RhdGljX2Nhc3Q8UVBh
aW50ZXJQYXRoKj4ocXRDb250ZXh0LT5wYXRoKCkpOwogICAgIFFfQVNTRVJUKF9wYXRoICE9IDAp
OwpAQCAtNDMsOCArNDMsOCBAQCBib29sIFNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXAoS1Jl
bmRlCiAKICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAK
LSAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4oUXQ6Ok5vUGVuKTsKLSAgICBxdENvbnRl
eHQtPnBhaW50ZXIoKS5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CisgICAgcGFpbnRlci0+c2V0UGVu
KFF0OjpOb1Blbik7CisgICAgcGFpbnRlci0+c2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOwogICAgIFFJ
bWFnZSogcGF0dGVybmltYWdlID0gbmV3IFFJbWFnZSh0aWxlKCktPmJpdHMoKSwgdGlsZSgpLT53
aWR0aCgpLCB0aWxlKCktPmhlaWdodCgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlw
bGllZCk7CiAgICAgcGF0dGVybmltYWdlLT5zZXRBbHBoYUJ1ZmZlcih0cnVlKTsKICAgICBpZiAo
dHlwZSAmIEFQUExZX1RPX0ZJTEwpIHsKQEAgLTUzLDcgKzUzLDcgQEAgYm9vbCBTVkdQYWludFNl
cnZlclBhdHRlcm46OnNldHVwKEtSZW5kZQogICAgICAgICBLUmVuZGVyaW5nRmlsbFBhaW50ZXIg
ZmlsbFBhaW50ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludGVyKHJlbmRlclN0eWxl
LCBvYmplY3QpOwogICAgICAgICBRQnJ1c2ggYnJ1c2goUVBpeG1hcDo6ZnJvbUltYWdlKCpwYXR0
ZXJuaW1hZ2UpKTsKICAgICAgICAgX3BhdGgtPnNldEZpbGxSdWxlKGZpbGxQYWludGVyLmZpbGxS
dWxlKCkgPT0gUlVMRV9FVkVOT0REID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxs
KTsKLSAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2goYnJ1c2gpOworICAgICAg
ICBwYWludGVyLT5zZXRCcnVzaChicnVzaCk7CiAgICAgfQogICAgIGlmICh0eXBlICYgQVBQTFlf
VE9fU1RST0tFKSB7CiAgICAgICAgIC8vUUNvbG9yIGMgPSBjb2xvcigpOwpAQCAtNjUsMTAgKzY1
LDEwIEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChLUmVuZGUKIAogICAgICAg
ICBzZXRQZW5Qcm9wZXJ0aWVzKHN0cm9rZVBhaW50ZXIsIHBlbik7CiAgICAgICAgIHBlbi5zZXRC
cnVzaChicnVzaCk7Ci0gICAgICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihwZW4pOwor
ICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKICAgICB9CiAKLSAgICBxdENvbnRleHQtPnBh
aW50ZXIoKS5kcmF3UGF0aCgqX3BhdGgpOworICAgIHBhaW50ZXItPmRyYXdQYXRoKCpfcGF0aCk7
CiAKICAgICBkZWxldGUgcGF0dGVybmltYWdlOwogKi8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyUXQuY3BwCShyZXZpc2lv
biAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2Vy
dmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTEgQEAKICNpZmRlZiBTVkdf
U1VQUE9SVAogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRl
ICJLUmVuZGVyaW5nRGV2aWNlUXQuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAKLSNpbmNs
dWRlIDxRUGVuPgorI2luY2x1ZGUgPFFQYWludGVyPgogI2luY2x1ZGUgPFFWZWN0b3I+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBTVkdQYWludFNlcnZlcjo6
c2V0UGVuUHJvcGVydGllcyhjbwogICAgIH0KIH0KIAotdm9pZCBTVkdQYWludFNlcnZlcjo6ZHJh
dyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0
aCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIFNWR1BhaW50U2VydmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIFNW
R1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIGlmICghc2V0dXAoY29udGV4dCwg
cGF0aCwgdHlwZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTc1LDIxICs3NSwyNiBAQCB2b2lkIFNW
R1BhaW50U2VydmVyOjpkcmF3KEtSZW5kZXJpbmdEZXZpCiAgICAgdGVhcmRvd24oY29udGV4dCwg
cGF0aCwgdHlwZSk7CiB9CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnRlYXJkb3duKEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBl
KSBjb25zdAordm9pZCBTVkdQYWludFNlcnZlcjo6dGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiYs
IGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3QKIHsKICAgICAv
LyBuby1vcAogfQogCi12b2lkIFNWR1BhaW50U2VydmVyOjpyZW5kZXJQYXRoKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBTVkdQYWludFRh
cmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnJlbmRlclBhdGgoR3Jh
cGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgU1ZHUGFpbnRU
YXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0g
cGF0aC0+c3R5bGUoKTsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBxdENvbnRleHQg
PSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4dCk7CisKKyAg
ICBRUGFpbnRlciogcGFpbnRlcihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkg
OiAwKTsKKyAgICBRX0FTU0VSVChwYWludGVyKTsKKworICAgIFFQYWludGVyUGF0aCogcGFpbnRl
clBhdGgoY29udGV4dCA/IGNvbnRleHQtPmN1cnJlbnRQYXRoKCkgOiAwKTsKKyAgICBRX0FTU0VS
VChwYWludGVyUGF0aCk7CiAKICAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUp
ICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpCi0gICAgICAgIHF0Q29udGV4
dC0+ZmlsbFBhdGgoKTsKKyAgICAgICAgcGFpbnRlci0+ZmlsbFBhdGgoKnBhaW50ZXJQYXRoLCBw
YWludGVyLT5icnVzaCgpKTsKIAogICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRU
eXBlKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpCi0gICAgICAgIHF0
Q29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgICAgICBwYWludGVyLT5zdHJva2VQYXRoKCpwYWlu
dGVyUGF0aCwgcGFpbnRlci0+cGVuKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL3F0L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdC5jcHAJKHJldmlzaW9uIDE3OTM4
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRp
YWxHcmFkaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMzEgKzI0LDM2IEBACiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Lmgi
CiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlUXQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAKICNpbmNsdWRlIDxtYXRoLmg+Cisj
aW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgogI2luY2x1ZGUgPFFS
YWRpYWxHcmFkaWVudD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR1BhaW50U2Vy
dmVyUmFkaWFsR3JhZGllbnQ6OiBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4
dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBj
b25zdAorYm9vbCBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Ojogc2V0dXAoR3JhcGhpY3ND
b250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFy
Z2V0VHlwZSB0eXBlKSBjb25zdAogewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqIHF0
Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihjb250ZXh0
KTsKLSAgICBRX0FTU0VSVChxdENvbnRleHQgIT0gMCk7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIo
Y29udGV4dCA/IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMCk7CisgICAgUV9BU1NFUlQo
cGFpbnRlcik7CisKKyAgICBRUGFpbnRlclBhdGgqIHBhdGgoY29udGV4dCA/IGNvbnRleHQtPmN1
cnJlbnRQYXRoKCkgOiAwKTsKKyAgICBRX0FTU0VSVChwYXRoKTsKIAogICAgIGlmIChsaXN0ZW5l
cigpKQogICAgICAgICBsaXN0ZW5lcigpLT5yZXNvdXJjZU5vdGlmaWNhdGlvbigpOwogCiAgICAg
UmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwogCi0gICAgcXRDb250
ZXh0LT5wYWludGVyKCkuc2V0UGVuKFF0OjpOb1Blbik7Ci0gICAgcXRDb250ZXh0LT5wYWludGVy
KCkuc2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOwotICAgIFFNYXRyaXggbWF0ID0gcXRDb250ZXh0LT5j
dG0oKTsKKyAgICBwYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBwYWludGVyLT5zZXRC
cnVzaChRdDo6Tm9CcnVzaCk7CisgICAgUU1hdHJpeCBtYXQgPSBwYWludGVyLT5tYXRyaXgoKTsK
IAogICAgIGRvdWJsZSBjeCwgZngsIGN5LCBmeSwgcjsKICAgICBpZiAoYm91bmRpbmdCb3hNb2Rl
KCkpIHsKLSAgICAgICAgUVJlY3RGIGJib3ggPSBxdENvbnRleHQtPnBhdGhCQm94KCk7CisgICAg
ICAgIFFSZWN0RiBiYm94ID0gcGF0aC0+Ym91bmRpbmdSZWN0KCk7IAogICAgICAgICBjeCA9IGRv
dWJsZShiYm94LmxlZnQoKSkgKyAoZG91YmxlKGdyYWRpZW50Q2VudGVyKCkueCgpIC8gMTAwLjAp
ICogZG91YmxlKGJib3gud2lkdGgoKSkpOwogICAgICAgICBjeSA9IGRvdWJsZShiYm94LnRvcCgp
KSArIChkb3VibGUoZ3JhZGllbnRDZW50ZXIoKS55KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC5o
ZWlnaHQoKSkpOwogICAgICAgICBmeCA9IGRvdWJsZShiYm94LmxlZnQoKSkgKyAoZG91YmxlKGdy
YWRpZW50Rm9jYWwoKS54KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgpKSkgLSBjeDsK
QEAgLTEwMCwxNSArMTA1LDE1IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudDo6
IHNldHUKIAogICAgIC8vIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFRyYW5zID0gZ3JhZGllbnRU
cmFuc2Zvcm0oKTsKICAgICAvLyBncmFkaWVudFRyYW5zLm1hcChjeCwgY3ksICZjeCwgJmN5KTsK
LSAgICAvLyBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRNYXRyaXgobWF0KTsKKyAgICAvLyBwYWlu
dGVyLT5zZXRNYXRyaXgobWF0KTsKIAogICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0
VHlwZSkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkgewogICAgICAgICBm
aWxsQ29sb3JBcnJheShncmFkaWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKIAogICAg
ICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGllbnQpOwogCi0gICAgICAgIHF0Q29udGV4dC0+cGFpbnRl
cigpLnNldEJydXNoKGJydXNoKTsKLSAgICAgICAgcXRDb250ZXh0LT5zZXRGaWxsUnVsZShyZW5k
ZXJTdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSk7CisgICAgICAgIHBhaW50ZXItPnNldEJy
dXNoKGJydXNoKTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUocmVuZGVyU3R5bGUtPnN2
Z1N0eWxlKCktPmZpbGxSdWxlKCkpOwogICAgIH0KIAogICAgIGlmICgodHlwZSAmIEFwcGx5VG9T
dHJva2VUYXJnZXRUeXBlKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkp
IHsKQEAgLTEyMCw3ICsxMjUsNyBAQCBib29sIFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6
OiBzZXR1CiAgICAgICAgIHNldFBlblByb3BlcnRpZXMob2JqZWN0LCByZW5kZXJTdHlsZSwgcGVu
KTsKICAgICAgICAgcGVuLnNldEJydXNoKGJydXNoKTsKIAotICAgICAgICBxdENvbnRleHQtPnBh
aW50ZXIoKS5zZXRQZW4ocGVuKTsKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CiAgICAg
fQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2
Zy9xdC9TVkdQYWludFNlcnZlclNvbGlkUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAJKHJldmlzaW9u
IDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2
ZXJTb2xpZFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTcgKzI0LDIwIEBACiAjaWZkZWYg
U1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCiAKLSNpbmNsdWRl
ICJLUmVuZGVyaW5nRGV2aWNlUXQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJSZW5kZXJQYXRoLmgiCiAKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1ib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFp
bnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Citib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVw
KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBT
VkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dFF0KiBxdENvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0
Kj4oY29udGV4dCk7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIoY29udGV4dCA/IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpIDogMCk7CisgICAgUV9BU1NFUlQocGFpbnRlcik7CiAKICAgICBSZW5k
ZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgLy8gVE9ETz8gcXRD
b250ZXh0LT5wYWludGVyKCkuc2V0T3BhY2l0eShyZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsKKyAg
ICAvLyBUT0RPPyBwYWludGVyLT5zZXRPcGFjaXR5KHJlbmRlclN0eWxlLT5vcGFjaXR5KCkpOwog
CiAgICAgUUNvbG9yIGMgPSBjb2xvcigpOwogCkBAIC00Miw4ICs0NSw4IEBAIGJvb2wgU1ZHUGFp
bnRTZXJ2ZXJTb2xpZDo6c2V0dXAoS1JlbmRlcmkKICAgICAgICAgYy5zZXRBbHBoYUYocmVuZGVy
U3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOwogCiAgICAgICAgIFFCcnVzaCBicnVz
aChjKTsKLSAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2goYnJ1c2gpOwotICAg
ICAgICBxdENvbnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxs
UnVsZSgpKTsKKyAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOworICAgICAgICBjb250
ZXh0LT5zZXRGaWxsUnVsZShyZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSk7CiAK
ICAgICAgICAgLyogaWYoaXNQYWludGluZ1RleHQoKSkgLi4uICovCiAgICAgfQpAQCAtNTMsNyAr
NTYsNyBAQCBib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEtSZW5kZXJpCiAKICAgICAg
ICAgUVBlbiBwZW4oYyk7CiAgICAgICAgIHNldFBlblByb3BlcnRpZXMob2JqZWN0LCByZW5kZXJT
dHlsZSwgcGVuKTsKLSAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0UGVuKHBlbik7Cisg
ICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwogCiAgICAgICAgIC8qIGlmKGlzUGFpbnRpbmdU
ZXh0KCkpIC4uLiAqLwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Zn
L3F0L1NWR1Jlc291cmNlQ2xpcHBlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdSZXNvdXJjZUNsaXBwZXJRdC5jcHAJKHJldmlzaW9uIDE3
OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VDbGlw
cGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyMiArMjIsMjMgQEAKICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKIAogI2lmZGVm
IFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAKLSNpbmNsdWRl
ICJLUmVuZGVyaW5nRGV2aWNlUXQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKwor
I2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQYWludGVyUGF0aD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIFNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwKGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0Cit2b2lkIFNWR1Jlc291cmNlQ2xpcHBlcjo6YXBw
bHlDbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGlu
Z0JveCkgY29uc3QKIHsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IHJl
bmRlcmluZ0RldmljZSgpLT5jdXJyZW50Q29udGV4dCgpOwotICAgIEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0UXQqIHF0Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
UXQqPihjb250ZXh0KTsKICAgICBpZiAobV9jbGlwRGF0YS5jbGlwRGF0YSgpLnNpemUoKSA8IDEp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQtPmNsZWFyUGF0aCgpOworICAgIGNvbnRl
eHQtPmJlZ2luUGF0aCgpOwogCiAgICAgUVBhaW50ZXJQYXRoIG5ld1BhdGg7CiAKQEAgLTExMyw3
ICsxMTQsMTAgQEAgdm9pZCBTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcChjb25zdAogICAg
ICAgICAvLyB9CiAgICAgfQogCi0gICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0Q2xpcFBhdGgo
bmV3UGF0aCk7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIoY29udGV4dCA/IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpIDogMCk7CisgICAgUV9BU1NFUlQocGFpbnRlcik7CisKKyAgICBwYWludGVy
LT5zZXRDbGlwUGF0aChuZXdQYXRoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VGaWx0ZXJRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUmVz
b3VyY2VGaWx0ZXJRdC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VGaWx0ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDkgKzIwLDkgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTVkdS
ZXNvdXJjZUZpbHRlci5oIgogCiAjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdSZXNv
dXJjZUZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM0LDEyICszNCwxOCBA
QCBTVkdSZXNvdXJjZUZpbHRlcjo6flNWR1Jlc291cmNlRmlsdGVyKCkKIHsKIH0KIAotdm9pZCBT
VkdSZXNvdXJjZUZpbHRlcjo6cHJlcGFyZUZpbHRlcihjb25zdCBGbG9hdFJlY3QmIGJib3gpCitT
VkdGaWx0ZXJFZmZlY3QqIFNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoY29u
c3QgU1ZHRmlsdGVyRWZmZWN0VHlwZSYpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBtZSA6
LSkKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBTVkdSZXNvdXJjZUZpbHRlcjo6cHJlcGFyZUZp
bHRlcihHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgRmxvYXRSZWN0JikKIHsKICAgICAvLyBGSVhN
RTogaW1wbGVtZW50IG1lIDotKQogfQogCi12b2lkIFNWR1Jlc291cmNlRmlsdGVyOjphcHBseUZp
bHRlcihjb25zdCBGbG9hdFJlY3QmIGJib3gpCit2b2lkIFNWR1Jlc291cmNlRmlsdGVyOjphcHBs
eUZpbHRlcihHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgRmxvYXRSZWN0JikKIHsKICAgICAvLyBG
SVhNRTogaW1wbGVtZW50IG1lIDotKQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdmcvcXQvU1ZHUmVzb3VyY2VNYXNrZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VNYXNrZXJRdC5jcHAJKHJldmlzaW9u
IDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VN
YXNrZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDEzICsyMCwxMyBAQAogKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlTWFza2VyLmgiCiAKICNpZmRl
ZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIlNWR1Jlc291cmNlTWFza2VyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlNYXNrKGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0Cit2b2lkIFNWR1Jlc291cmNlTWFza2VyOjphcHBs
eU1hc2soR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsKICAgICAv
LyBGSVhNRTogaW1wbGVtZW50IG1lIDotKQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEwICs0OSw2
IEBACiAjZGVmaW5lIE1fUEkgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NgogI2VuZGlmCiAKLSNpZmRl
ZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgotI2VuZGlmCi0K
ICNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVO
SU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdoaWxlKDApCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyMCw2ICsyMTYsOSBAQCBwdWJsaWM6CiAgICAgSW50
UmVjdCBmb2N1c1JpbmdDbGlwOwogICAgIFRleHRTaGFkb3cgc2hhZG93OwogCisgICAgLy8gT25s
eSB1c2VkIGJ5IFNWRyBmb3Igbm93LgorICAgIFFQYWludGVyUGF0aCBjdXJyZW50UGF0aDsKKwog
cHJpdmF0ZToKICAgICBRUGFpbnRlciogcGFpbnRlcjsKIH07CkBAIC00ODcsNiArNDg2LDI2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBtX2RhdGEtPnAo
KS5maWxsUmVjdChyZWN0LCBRQ29sb3IoYykpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YmVnaW5QYXRoKCkKK3sKKyAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gUVBhaW50ZXJQYXRoKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7
CisgICAgbV9kYXRhLT5jdXJyZW50UGF0aCA9ICoocGF0aC5wbGF0Zm9ybVBhdGgoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZShXaW5kUnVsZSBydWxlKQoreworICAg
IG1fZGF0YS0+Y3VycmVudFBhdGguc2V0RmlsbFJ1bGUocnVsZSA9PSBSVUxFX0VWRU5PREQgPyBR
dDo6T2RkRXZlbkZpbGwgOiBRdDo6V2luZGluZ0ZpbGwpOworfQorCitQbGF0Zm9ybVBhdGgqIEdy
YXBoaWNzQ29udGV4dDo6Y3VycmVudFBhdGgoKQoreworICAgIHJldHVybiAmbV9kYXRhLT5jdXJy
ZW50UGF0aDsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNjEyLDcgKzYzMSw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBRUGFpbnRlclBhdGggcGF0aDsg
cGF0aC5hZGRSZWN0KHJlY3QpOworICAgIFFQYWludGVyUGF0aCBwYXRoOworICAgIHBhdGguYWRk
UmVjdChyZWN0KTsKICAgICBRUGVuIG5QZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKICAgICBuUGVu
LnNldFdpZHRoRih3aWR0aCk7CiAgICAgbV9kYXRhLT5wKCkuc3Ryb2tlUGF0aChwYXRoLCBuUGVu
KTsKQEAgLTgzMCwxMyArODUwLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bUZpbGxDb2wKICAgICBtX2RhdGEtPnAoKS5zZXRCcnVzaChRQnJ1c2goY29sb3IpKTsKIH0KIAot
I2lmZGVmIFNWR19TVVBQT1JUCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogR3JhcGhpY3NDb250
ZXh0OjpjcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCkKK0dyYXBoaWNzQ29udGV4dCogY29u
dGV4dEZvckltYWdlKFNWR1Jlc291cmNlSW1hZ2UqKQogewotICAgIHJldHVybiBuZXcgS1JlbmRl
cmluZ0RldmljZUNvbnRleHRRdChwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0jZW5kaWYKLQorICAg
IC8vIEZJWE1FIQorICAgIHJldHVybiAwOwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDE3
OTM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJSZW5kZXJGb3JlaWduT2JqZWN0
LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdMZW5ndGguaCIKIApAQCAtNDksMjIgKzQ4LDEwIEBAIHZvaWQgUmVuZGVyRm9yZWlnbk9i
amVjdDo6cGFpbnQoUGFpbnRJbmYKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgS1JlbmRlcmluZ0RldmljZSogZGV2
aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNv
bnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgYm9vbCBzaG91bGRQb3BDb250
ZXh0ID0gZmFsc2U7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIC8vIE9ubHkgbmVlZCB0
byBzZXR1cCBmb3IgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBk
b25lLgotICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPmNyZWF0ZVJlbmRlcmlu
Z0RldmljZUNvbnRleHQoKTsKLSAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChjb250ZXh0KTsK
LSAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7Ci0gICAgfQotCiAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNhdmUoKTsKLQotICAgIGNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zv
cm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOwotICAgIGNvbnRleHQtPmNvbmNhdENU
TShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICBjb250ZXh0LT5jb25jYXRDVE0odHJhbnNsYXRpb25G
b3JBdHRyaWJ1dGVzKCkpOwotCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShBZmZp
bmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOworICAgIHBhaW50SW5m
by5jb250ZXh0LT5jb25jYXRDVE0obG9jYWxUcmFuc2Zvcm0oKSk7CisgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7CiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmNsaXAoZ2V0Q2xpcFJlY3QocGFyZW50WCwgcGFyZW50WSkpOwogCiAgICAg
ZmxvYXQgb3BhY2l0eSA9IHN0eWxlKCktPm9wYWNpdHkoKTsKQEAgLTc5LDExICs2Niw2IEBAIHZv
aWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmYKICAgICBpZiAob3BhY2l0eSA8
IDEuMGYpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigp
OwogCi0gICAgaWYgKHNob3VsZFBvcENvbnRleHQpIHsKLSAgICAgICAgZGV2aWNlLT5wb3BDb250
ZXh0KCk7Ci0gICAgICAgIGRlbGV0ZSBjb250ZXh0OwotICAgIH0KLQogICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBh
dGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCShy
ZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxNCArMjksMTMgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR1BhaW50
U2VydmVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAjaW5jbHVkZSAiU1ZH
UmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZU1hc2tlci5oIgogI2luY2x1
ZGUgIlNWR1Jlc291cmNlTWFya2VyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxl
LmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVs
ZW1lbnQuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTczLDYyICsxNzIsNDMgQEAgdm9pZCBS
ZW5kZXJQYXRoOjpwYWludChQYWludEluZm8mIHBhaW50SQogCiAgICAgaWYgKHBhaW50SW5mby5j
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBo
YXNlRm9yZWdyb3VuZCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBwYXRo
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgS1JlbmRlcmluZ0Rldmlj
ZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQqIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgYm9vbCBzaG91bGRQ
b3BDb250ZXh0ID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5zYXZlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gc2V0IHVwIEtD
YW52YXMgcmVuZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4KLSAgICAgICAg
Y29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KCk7Ci0gICAgICAgIGRldmljZS0+cHVzaENvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHNob3Vs
ZFBvcENvbnRleHQgPSB0cnVlOwotICAgIH0KIAotICAgIGNvbnRleHQtPmNvbmNhdENUTShsb2Nh
bFRyYW5zZm9ybSgpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIHBhaW50
SW5mby5jb250ZXh0LT5jb25jYXRDVE0obG9jYWxUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBzZXR1
cCB0byBhcHBseSBmaWx0ZXJzCiAgICAgU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IGdldEZp
bHRlckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsdGVyKCkuc3Vic3Ry
aW5nKDEpKTsKLSAgICBpZiAoZmlsdGVyKSB7Ci0gICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRl
cihyZWxhdGl2ZUJCb3godHJ1ZSkpOwotICAgICAgICBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50
Q29udGV4dCgpOwotICAgIH0KKyAgICBpZiAoZmlsdGVyKQorICAgICAgICBmaWx0ZXItPnByZXBh
cmVGaWx0ZXIocGFpbnRJbmZvLmNvbnRleHQsIHJlbGF0aXZlQkJveCh0cnVlKSk7CiAKICAgICBp
ZiAoU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gZ2V0Q2xpcHBlckJ5SWQoZG9jdW1lbnQo
KSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQotICAgICAg
ICBjbGlwcGVyLT5hcHBseUNsaXAocmVsYXRpdmVCQm94KHRydWUpKTsKKyAgICAgICAgY2xpcHBl
ci0+YXBwbHlDbGlwKHBhaW50SW5mby5jb250ZXh0LCByZWxhdGl2ZUJCb3godHJ1ZSkpOwogCiAg
ICAgaWYgKFNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRvY3VtZW50
KCksIHN0eWxlKCktPnN2Z1N0eWxlKCktPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5nKDEpKSkKLSAg
ICAgICAgbWFza2VyLT5hcHBseU1hc2socmVsYXRpdmVCQm94KHRydWUpKTsKKyAgICAgICAgbWFz
a2VyLT5hcHBseU1hc2socGFpbnRJbmZvLmNvbnRleHQsIHJlbGF0aXZlQkJveCh0cnVlKSk7CiAK
LSAgICBjb250ZXh0LT5jbGVhclBhdGgoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+YmVnaW5Q
YXRoKCk7CiAgICAgCiAgICAgU1ZHUGFpbnRTZXJ2ZXIqIGZpbGxQYWludFNlcnZlciA9IEtTVkdQ
YWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwogICAgIGlmIChm
aWxsUGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29udGV4dC0+YWRkUGF0aChwYXRoKCkpOworICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUGF0aChwYXRoKCkpOwogICAgICAgICBmaWxsUGFp
bnRTZXJ2ZXItPnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKLSAgICAgICAgZmlsbFBhaW50U2VydmVy
LT5kcmF3KGNvbnRleHQsIHRoaXMsIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSk7CisgICAgICAgIGZp
bGxQYWludFNlcnZlci0+ZHJhdyhwYWludEluZm8uY29udGV4dCwgdGhpcywgQXBwbHlUb0ZpbGxU
YXJnZXRUeXBlKTsKICAgICB9CiAgICAgU1ZHUGFpbnRTZXJ2ZXIqIHN0cm9rZVBhaW50U2VydmVy
ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKTsK
ICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29udGV4dC0+YWRkUGF0aChw
YXRoKCkpOyAvLyBwYXRoIGlzIGNsZWFyZWQgd2hlbiBmaWxsZWQuCisgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5hZGRQYXRoKHBhdGgoKSk7IC8vIHBhdGggaXMgY2xlYXJlZCB3aGVuIGZpbGxl
ZC4KICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKLSAg
ICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPmRyYXcoY29udGV4dCwgdGhpcywgQXBwbHlUb1N0cm9r
ZVRhcmdldFR5cGUpOworICAgICAgICBzdHJva2VQYWludFNlcnZlci0+ZHJhdyhwYWludEluZm8u
Y29udGV4dCwgdGhpcywgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpOwogICAgIH0KIAogICAgIGRy
YXdNYXJrZXJzSWZOZWVkZWQocGFpbnRJbmZvLmNvbnRleHQsIHBhaW50SW5mby5yZWN0LCBwYXRo
KCkpOwogCiAgICAgLy8gYWN0dWFsbHkgYXBwbHkgdGhlIGZpbHRlcgogICAgIGlmIChmaWx0ZXIp
Ci0gICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIocmVsYXRpdmVCQm94KHRydWUpKTsKKyAgICAg
ICAgZmlsdGVyLT5hcHBseUZpbHRlcihwYWludEluZm8uY29udGV4dCwgcmVsYXRpdmVCQm94KHRy
dWUpKTsKIAotICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQotICAgIGlmICghc2hvdWxkUG9w
Q29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7Ci0gICAgICAgIGRlbGV0ZSBjb250ZXh0
OwotICAgIH0KKyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJl
bmRlclBhdGg6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IF90eCwg
aW50IF90eSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAko
cmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJT
VkdSZXNvdXJjZU1hc2tlci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNs
dWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC0xNDgsMzkgKzE0NywzMSBAQCB2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvCiAgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIWZp
bHRlcikKICAgICAgICAgcmV0dXJuOyAvLyBTcGVjOiBncm91cHMgdy9vIGNoaWxkcmVuIHN0aWxs
IG1heSByZW5kZXIgZmlsdGVyIGNvbnRlbnQuCiAgICAgCi0gICAgS1JlbmRlcmluZ0RldmljZSog
ZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQq
IGRldmljZUNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgYm9vbCBzaG91
bGRQb3BDb250ZXh0ID0gZmFsc2U7Ci0gICAgaWYgKCFkZXZpY2VDb250ZXh0KSB7Ci0gICAgICAg
IC8vIEkgb25seSBuZWVkIHRvIHNldHVwIGZvciBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNu
J3QgYWxyZWFkeSBiZWVuIGRvbmUuCi0gICAgICAgIGRldmljZUNvbnRleHQgPSBwYWludEluZm8u
Y29udGV4dC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOwotICAgICAgICBkZXZpY2Ut
PnB1c2hDb250ZXh0KGRldmljZUNvbnRleHQpOwotICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0g
dHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAg
ICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogCiAgICAgaWYgKHBhcmVudFggIT0gMCB8fCBw
YXJlbnRZICE9IDApIHsKICAgICAgICAgLy8gVHJhbnNsYXRlIGZyb20gcGFyZW50IG9mZnNldHMg
KGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVycykK
LSAgICAgICAgZGV2aWNlQ29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5z
bGF0ZShwYXJlbnRYLCBwYXJlbnRZKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25j
YXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKICAg
ICAgICAgcGFyZW50WCA9IHBhcmVudFkgPSAwOwogICAgIH0KICAgICAKICAgICBpZiAoIXZpZXdw
b3J0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBP
VklTSUJMRSkKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGVuY2xvc2luZ0lu
dFJlY3Qodmlld3BvcnQoKSkpOyAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSdsbCB3YW50IGZsb2F0
LXByZWNpc2lvbiBjbGlwcGluZwotICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25jYXRDVE0oQWZm
aW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSkp
OworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3Jt
KCkudHJhbnNsYXRlKHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSkpOwogICAgIH0KIAog
ICAgIGlmICghbG9jYWxUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCkpCi0gICAgICAgIGRldmljZUNv
bnRleHQtPmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKICAgICAKICAgICBGbG9hdFJlY3Qg
c3Ryb2tlQkJveCA9IHJlbGF0aXZlQkJveCh0cnVlKTsKICAgICAKLSAgICBpZiAoU1ZHUmVzb3Vy
Y2VDbGlwcGVyICpjbGlwcGVyID0gZ2V0Q2xpcHBlckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBjbGlwcGVyLT5h
cHBseUNsaXAoc3Ryb2tlQkJveCk7CisgICAgaWYgKFNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBl
ciA9IGdldENsaXBwZXJCeUlkKGRvY3VtZW50KCksIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBQ
YXRoKCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKHBhaW50SW5m
by5jb250ZXh0LCBzdHJva2VCQm94KTsKIAotICAgIGlmIChTVkdSZXNvdXJjZU1hc2tlciAqbWFz
a2VyID0gZ2V0TWFza2VyQnlJZChkb2N1bWVudCgpLCBzdHlsZSgpLT5zdmdTdHlsZSgpLT5tYXNr
RWxlbWVudCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKHN0cm9r
ZUJCb3gpOworICAgIGlmIChTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gZ2V0TWFza2VyQnlJ
ZChkb2N1bWVudCgpLCBzdHlsZSgpLT5zdmdTdHlsZSgpLT5tYXNrRWxlbWVudCgpLnN1YnN0cmlu
ZygxKSkpCisgICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKHBhaW50SW5mby5jb250ZXh0LCBzdHJv
a2VCQm94KTsKIAogICAgIGZsb2F0IG9wYWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7CiAgICAg
aWYgKG9wYWNpdHkgPCAxLjBmKSB7CkBAIC0xODksMjUgKzE4MCwyMCBAQCB2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvCiAgICAgfQogCiAgICAgaWYgKGZpbHRlcikKLSAg
ICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKHN0cm9rZUJCb3gpOwotICAgIAorICAgICAgICBm
aWx0ZXItPnByZXBhcmVGaWx0ZXIocGFpbnRJbmZvLmNvbnRleHQsIHN0cm9rZUJCb3gpOworCiAg
ICAgaWYgKCF2aWV3Qm94KCkuaXNFbXB0eSgpKQotICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25j
YXRDVE0odmlld3BvcnRUcmFuc2Zvcm0oKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5j
b25jYXRDVE0odmlld3BvcnRUcmFuc2Zvcm0oKSk7CiAKICAgICBSZW5kZXJDb250YWluZXI6OnBh
aW50KHBhaW50SW5mbywgMCwgMCk7CiAKICAgICBpZiAoZmlsdGVyKQotICAgICAgICBmaWx0ZXIt
PmFwcGx5RmlsdGVyKHN0cm9rZUJCb3gpOworICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKHBh
aW50SW5mby5jb250ZXh0LCBzdHJva2VCQm94KTsKIAogICAgIGlmIChvcGFjaXR5IDwgMS4wZikK
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKLSAg
ICAvLyByZXN0b3JlIGRyYXdpbmcgc3RhdGUKLSAgICBpZiAoc2hvdWxkUG9wQ29udGV4dCkgewot
ICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGRldmljZUNvbnRl
eHQ7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Cisg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogRmxvYXRSZWN0IFJlbmRlclNW
R0NvbnRhaW5lcjo6dmlld3BvcnQoKSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0ltYWdlLmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMCBAQAogI2luY2x1ZGUg
IlNWR1Jlc291cmNlQ2xpcHBlci5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAj
aW5jbHVkZSAiU1ZHUmVzb3VyY2VNYXNrZXIuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNl
LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RS
YXRpby5oIgogI2luY2x1ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ltYWdl
RWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0xMjcsNDYgKzEyNSwzMiBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWlu
dEluZm8mIHBhCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkg
fHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkgfHwgc3R5bGUoKS0+
dmlzaWJpbGl0eSgpID09IEhJRERFTikKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEtSZW5k
ZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwotICAgIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpOwotICAgIGJv
b2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwotICAgIGlmIChjb250ZXh0KQotICAgICAgICBw
YWludEluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIGVsc2UgewotICAgICAgICAvLyBOZWVkIHRv
IHB1c2ggYSBkZXZpY2UgY29udGV4dCBvbiB0aGUgc3RhY2sgaWYgZW1wdHkuCi0gICAgICAgIGNv
bnRleHQgPSBwYWludEluZm8uY29udGV4dC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgp
OwotICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBzaG91bGRQ
b3BDb250ZXh0ID0gdHJ1ZTsKLSAgICB9CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsK
KyAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5z
bGF0ZShwYXJlbnRYLCBwYXJlbnRZKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENU
TShsb2NhbFRyYW5zZm9ybSgpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKHRy
YW5zbGF0aW9uRm9yQXR0cmlidXRlcygpKTsKIAotICAgIGNvbnRleHQtPmNvbmNhdENUTShBZmZp
bmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOwotICAgIGNvbnRleHQt
PmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICB0cmFuc2xhdGVGb3JBdHRyaWJ1dGVz
KCk7Ci0gICAgCiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KDAsIDAsIHdp
ZHRoKCksIGhlaWdodCgpKTsKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBz
dHlsZSgpLT5zdmdTdHlsZSgpOwogCiAgICAgaWYgKFNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBl
ciA9IGdldENsaXBwZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5jbGlwUGF0aCgpLnN1YnN0
cmluZygxKSkpCi0gICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChib3VuZGluZ0JveCk7CisgICAg
ICAgIGNsaXBwZXItPmFwcGx5Q2xpcChwYWludEluZm8uY29udGV4dCwgYm91bmRpbmdCb3gpOwog
CiAgICAgaWYgKFNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRvY3Vt
ZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIG1h
c2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKKyAgICAgICAgbWFza2VyLT5hcHBseU1hc2so
cGFpbnRJbmZvLmNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIFNWR1Jlc291cmNlRmlsdGVy
KiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5maWx0ZXIoKS5z
dWJzdHJpbmcoMSkpOwogICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+cHJlcGFyZUZp
bHRlcihib3VuZGluZ0JveCk7Ci0gICAgCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhk
ZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICAg
ICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKHBhaW50SW5mby5jb250ZXh0LCBib3VuZGluZ0JveCk7
CiAKICAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+b3BhY2l0eSgpOwogICAgIGlmIChvcGFj
aXR5IDwgMS4wZikgewotICAgICAgICBjLT5jbGlwKGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdC
b3gpKTsKLSAgICAgICAgYy0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveCkp
OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KTsKICAgICB9CiAKICAgICBQYWludEluZm8gcGkocGFpbnRJbmZvKTsKLSAgICBwaS5jb250
ZXh0ID0gYy5nZXQoKTsKLSAgICBwaS5yZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5pbnZlcnQo
KS5tYXBSZWN0KHBhaW50SW5mby5yZWN0KTsKKyAgICBwaS5yZWN0ID0gYWJzb2x1dGVUcmFuc2Zv
cm0oKS5pbnZlcnQoKS5tYXBSZWN0KHBpLnJlY3QpOwogCiAgICAgaW50IHggPSAwLCB5ID0gMDsK
ICAgICBpZiAoc2hvdWxkUGFpbnQocGksIHgsIHkpKSB7CkBAIC0xNzgsMjMgKzE2MiwxNyBAQCB2
b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAgICAgICAgICAgICBGbG9h
dFJlY3QgZGVzdFJlY3QobV94LCBtX3ksIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkp
OwogICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgaW1hZ2UoKS0+d2lkdGgoKSwg
aW1hZ2UoKS0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgYWRqdXN0UmVjdHNGb3JBc3BlY3RSYXRp
byhkZXN0UmVjdCwgc3JjUmVjdCwgaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKSk7Ci0g
ICAgICAgICAgICBjLT5kcmF3SW1hZ2UoaW1hZ2UoKSwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAg
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSgpLCBkZXN0UmVjdCwg
c3JjUmVjdCk7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoZmlsdGVyKQotICAgICAgICAgICAg
ZmlsdGVyLT5hcHBseUZpbHRlcihib3VuZGluZ0JveCk7CiAgICAgfQotICAgIAorCisgICAgaWYg
KGZpbHRlcikKKyAgICAgICAgZmlsdGVyLT5hcHBseUZpbHRlcihwYWludEluZm8uY29udGV4dCwg
Ym91bmRpbmdCb3gpOworCiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAgICAgICBjLT5lbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKTsKIAotICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQotICAgIGlmICgh
c2hvdWxkUG9wQ29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7Ci0gICAgICAgIGRlbGV0
ZSBjb250ZXh0OwotICAgIH0KKyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQog
CiB2b2lkIFJlbmRlclNWR0ltYWdlOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0
JiByLCBib29sIGYpCkBAIC0yODEsMTIgKzI1OSw2IEBAIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJT
VkdJbWFnZTo6dHJhbnNsYXQKICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRl
KGltYWdlLT54KCktPnZhbHVlKCksIGltYWdlLT55KCktPnZhbHVlKCkpOwogfQogCi12b2lkIFJl
bmRlclNWR0ltYWdlOjp0cmFuc2xhdGVGb3JBdHRyaWJ1dGVzKCkKLXsKLSAgICBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogY29udGV4dCA9IHJlbmRlcmluZ0RldmljZSgpLT5jdXJyZW50Q29udGV4
dCgpOwotICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7
Ci19Ci0KIH0KIAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0ltYWdlLmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwg
SGl0VGVzdEFjdGlvbik7CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHRyYW5zbGF0ZUZv
ckF0dHJpYnV0ZXMoKTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uRm9yQXR0
cmlidXRlcygpOwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiAgICAgICAg
IEludFJlY3QgbV9hYnNvbHV0ZUJvdW5kczsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0lubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
SW5saW5lLmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJSZW5kZXJT
VkdJbmxpbmUuaCIKICNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCkBAIC0zMCwxMyArMzEs
MTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotUmVuZGVyU1ZHSW5saW5lOjpSZW5k
ZXJTVkdJbmxpbmUoTm9kZSogbikgOiBSZW5kZXJJbmxpbmUobikge30KLSAgICAKK1JlbmRlclNW
R0lubGluZTo6UmVuZGVyU1ZHSW5saW5lKE5vZGUqIG4pIDogUmVuZGVySW5saW5lKG4pCit7Cit9
CisKIElubGluZUJveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtl
UGxhY2VIb2xkZXJCb3gsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4pCiB7Ci0g
ICAgYXNzZXJ0KCEoIWlzUm9vdExpbmVCb3ggJiYgKGlzUmVwbGFjZWQoKSB8fCBtYWtlUGxhY2VI
b2xkZXJCb3gpKSk7Ci0gICAgYXNzZXJ0KGlzSW5saW5lRmxvdygpKTsKKyAgICBBU1NFUlQoISgh
aXNSb290TGluZUJveCAmJiAoaXNSZXBsYWNlZCgpIHx8IG1ha2VQbGFjZUhvbGRlckJveCkpKTsK
KyAgICBBU1NFUlQoaXNJbmxpbmVGbG93KCkpOworCiAgICAgSW5saW5lRmxvd0JveCogZmxvd0Jv
eCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgU1ZHSW5saW5lRmxvd0JveCh0aGlzKTsKKwogICAgIGlm
ICghbV9maXJzdExpbmVCb3gpCiAgICAgICAgIG1fZmlyc3RMaW5lQm94ID0gbV9sYXN0TGluZUJv
eCA9IGZsb3dCb3g7CiAgICAgZWxzZSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDE0IEBA
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVy
aW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIFJlbmRlclNWR0lu
bGluZVRleHQ6OlJlbmRlclNWR0lubGluZVRleHQoTm9kZSogbiwgU3RyaW5nSW1wbCogc3RyKSAK
LSAgICA6IFJlbmRlclRleHQobiwgc3RyKSB7fQorICAgIDogUmVuZGVyVGV4dChuLCBzdHIpCit7
Cit9CiAKIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1RTcGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdUU3Bhbi5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHVFNwYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMSArMjIsMTEgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlJl
bmRlclNWR1RTcGFuLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
S0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgog
I2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94
LmgiCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCkBAIC0zNCw4ICszNCwxMCBAQAogI2lu
Y2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotUmVu
ZGVyU1ZHVFNwYW46OlJlbmRlclNWR1RTcGFuKE5vZGUqIG4pIDogUmVuZGVyU1ZHSW5saW5lKG4p
IHt9CisKK1JlbmRlclNWR1RTcGFuOjpSZW5kZXJTVkdUU3BhbihOb2RlKiBuKSA6IFJlbmRlclNW
R0lubGluZShuKQoreworfQogCiB2b2lkIFJlbmRlclNWR1RTcGFuOjphYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQogewpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE1ICsyMywxNiBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHVGV4dC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0Rldmlj
ZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKKwogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTE0LDEyICsxMTUsOSBAQCB2b2lkIFJl
bmRlclNWR1RleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yCiB9CiAKIHZvaWQgUmVuZGVyU1ZHVGV4
dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQoteyAgICAKLSAg
ICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKLSAgICBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyBwaSA9IHBhaW50SW5mbzsKLSAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRleHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCkpOwotICAgIHBpLmNvbnRleHQgPSBjLmdldCgpOwotICAgIHBpLnJlY3QgPSAoYWJzb2x1dGVU
cmFuc2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVjdChwYWludEluZm8ucmVjdCk7Cit7ICAgCisgICAg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8gcGkocGFpbnRJbmZvKTsKKyAgICBwaS5yZWN0ID0gKGFi
c29sdXRlVHJhbnNmb3JtKCkpLmludmVydCgpLm1hcFJlY3QocGkucmVjdCk7CiAgICAgUmVuZGVy
QmxvY2s6OnBhaW50KHBpLCB0eCwgdHkpOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJ
bmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLQogI2luY2x1ZGUgIlNWR0lu
bGluZUZsb3dCb3guaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMzIsMTIg
KzMxLDExIEBACiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAjaW5jbHVkZSAiU1ZH
UmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZU1hc2tlci5oIgorI2luY2x1
ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgi
Ci0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3gu
aCIKICNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIApAQCAtNjMsNzcgKzYxLDU5IEBAIHZvaWQgcGFpbnRTVkdJbmxpbmVGbG93KElubGlu
ZUZsb3dCb3gqIGYKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9
IHJlbmRlcmluZ0RldmljZSgpOwotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0
ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpOwotICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9
IGZhbHNlOwotICAgIGlmIChjb250ZXh0KQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2
ZSgpOwotICAgIGVsc2UgewotICAgICAgICAvLyBOZWVkIHRvIHNldCB1cCBLQ2FudmFzIHJlbmRl
cmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCi0gICAgICAgIGNvbnRleHQgPSBw
YWludEluZm8uY29udGV4dC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOwotICAgICAg
ICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBzaG91bGRQb3BDb250ZXh0
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjb250ZXh0LT5jb25jYXRDVE0ob2JqZWN0LT5sb2NhbFRy
YW5zZm9ybSgpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIHBhaW50SW5m
by5jb250ZXh0LT5jb25jYXRDVE0ob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKTsKIAogICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveCh0eCArIGZsb3ctPnhQb3MoKSwgdHkgKyBmbG93LT55UG9zKCks
IGZsb3ctPndpZHRoKCksIGZsb3ctPmhlaWdodCgpKTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlKiBzdmdTdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICBpZiAoU1ZH
UmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gZ2V0Q2xpcHBlckJ5SWQob2JqZWN0LT5kb2N1bWVu
dCgpLCBzdmdTdHlsZS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBjbGlwcGVy
LT5hcHBseUNsaXAoYm91bmRpbmdCb3gpOworICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAocGFp
bnRJbmZvLmNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIGlmIChTVkdSZXNvdXJjZU1hc2tl
ciogbWFza2VyID0gZ2V0TWFza2VyQnlJZChvYmplY3QtPmRvY3VtZW50KCksIHN2Z1N0eWxlLT5t
YXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKGJv
dW5kaW5nQm94KTsKKyAgICAgICAgbWFza2VyLT5hcHBseU1hc2socGFpbnRJbmZvLmNvbnRleHQs
IGJvdW5kaW5nQm94KTsKIAogICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0
ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlcigpLnN1YnN0cmluZygx
KSk7CiAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGJvdW5k
aW5nQm94KTsKKyAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKHBhaW50SW5mby5jb250ZXh0
LCBib3VuZGluZ0JveCk7CiAKLSAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBwaSA9IHBhaW50
SW5mbzsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRl
eHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOwotICAgIHBpLmNvbnRleHQgPSBjLmdldCgp
OworICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBpKHBhaW50SW5mbyk7CisgICAgCiAgICAg
aWYgKCFmbG93LT5pc1Jvb3RJbmxpbmVCb3goKSkKLSAgICAgICAgcGkucmVjdCA9IChvYmplY3Qt
PmxvY2FsVHJhbnNmb3JtKCkpLmludmVydCgpLm1hcFJlY3QocGFpbnRJbmZvLnJlY3QpOworICAg
ICAgICBwaS5yZWN0ID0gKG9iamVjdC0+bG9jYWxUcmFuc2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVj
dChwaS5yZWN0KTsKIAogICAgIGZsb2F0IG9wYWNpdHkgPSBvYmplY3QtPnN0eWxlKCktPm9wYWNp
dHkoKTsKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpIHsKLSAgICAgICAgYy0+Y2xpcChlbmNsb3Np
bmdJbnRSZWN0KGJvdW5kaW5nQm94KSk7Ci0gICAgICAgIGMtPmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGVuY2xvc2luZ0lu
dFJlY3QoYm91bmRpbmdCb3gpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAgICAgfQogICAgIAogICAgIFNWR1BhaW50U2VydmVy
KiBmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihv
YmplY3QtPnN0eWxlKCksIG9iamVjdCk7CiAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewogICAg
ICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKLSAgICAgICAgaWYg
KGZpbGxQYWludFNlcnZlci0+c2V0dXAoY29udGV4dCwgb2JqZWN0LCBBcHBseVRvRmlsbFRhcmdl
dFR5cGUpKSB7CisgICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXItPnNldHVwKHBpLmNvbnRleHQs
IG9iamVjdCwgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSkgewogICAgICAgICAgICAgZmxvdy0+SW5s
aW5lRmxvd0JveDo6cGFpbnQocGksIHR4LCB0eSk7Ci0gICAgICAgICAgICBmaWxsUGFpbnRTZXJ2
ZXItPnRlYXJkb3duKGNvbnRleHQsIG9iamVjdCwgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKTsKKyAg
ICAgICAgICAgIGZpbGxQYWludFNlcnZlci0+dGVhcmRvd24ocGkuY29udGV4dCwgb2JqZWN0LCBB
cHBseVRvRmlsbFRhcmdldFR5cGUpOwogICAgICAgICB9CiAgICAgICAgIGZpbGxQYWludFNlcnZl
ci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKICAgICB9CiAgICAgU1ZHUGFpbnRTZXJ2ZXIqIHN0
cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihv
YmplY3QtPnN0eWxlKCksIG9iamVjdCk7CiAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CiAg
ICAgICAgIHN0cm9rZVBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQodHJ1ZSk7Ci0gICAgICAg
IGlmIChzdHJva2VQYWludFNlcnZlci0+c2V0dXAoY29udGV4dCwgb2JqZWN0LCBBcHBseVRvU3Ry
b2tlVGFyZ2V0VHlwZSkpIHsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyLT5zZXR1cChw
aS5jb250ZXh0LCBvYmplY3QsIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSkgewogICAgICAgICAg
ICAgZmxvdy0+SW5saW5lRmxvd0JveDo6cGFpbnQocGksIHR4LCB0eSk7Ci0gICAgICAgICAgICBz
dHJva2VQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgb2JqZWN0LCBBcHBseVRvU3Ryb2tl
VGFyZ2V0VHlwZSk7CisgICAgICAgICAgICBzdHJva2VQYWludFNlcnZlci0+dGVhcmRvd24ocGku
Y29udGV4dCwgb2JqZWN0LCBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSk7CiAgICAgICAgIH0KICAg
ICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7CiAgICAgfQog
CiAgICAgaWYgKGZpbHRlcikgCi0gICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdC
b3gpOworICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKHBhaW50SW5mby5jb250ZXh0LCBib3Vu
ZGluZ0JveCk7CiAKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIGMtPmVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogCi0gICAgLy8gcmVzdG9yZSBkcmF3aW5nIHN0YXRlCi0gICAgaWYgKCFzaG91
bGRQb3BDb250ZXh0KQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAg
IGVsc2UgewotICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGNv
bnRleHQ7Ci0gICAgfQorICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIHN0
YXRpYyBib29sIHRyYW5zbGF0ZUJveChJbmxpbmVCb3gqIGJveCwgaW50IHgsIGludCB5LCBib29s
IHRvcExldmVsID0gdHJ1ZSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNp
bmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2
ZXJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgpAQCAtMjMyLDEy
ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjCiAgICAg
ICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFy
YXRvciBzKCIgIik7CiAgICAgICAgICAgICB0cyA8PCAiIFtzdHJva2U9eyI7Ci0gICAgICAgICAg
ICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cm9rZVBh
aW50U2VydmVyLT5pZEluUmVnaXN0cnkoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
IHRzIDw8IHMgPDwgIltpZD1cIiI8PCBzdHJva2VQYWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkg
PDwgIlwiXSI7IAotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdHMg
PDwgcyA8PCAqc3Ryb2tlUGFpbnRTZXJ2ZXI7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAg
aWYgKHN0cm9rZVBhaW50U2VydmVyKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKnN0cm9r
ZVBhaW50U2VydmVyOwogCiAgICAgICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9IEtTVkdQYWlu
dGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0eWxlLT5zdHJva2VE
YXNoT2Zmc2V0KCksIDAuMCk7CiAgICAgICAgICAgICBjb25zdCBLQ0Rhc2hBcnJheSYgZGFzaEFy
cmF5ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5
bGUpOwpAQCAtMjYzLDEzICsyNTgsOSBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJl
YW0mIHRzLCBjCiAgICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgICAgIFRl
eHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IjsK
LSAgICAgICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWZpbGxQYWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgICAgICB0cyA8PCBzIDw8ICJbaWQ9XCIiIDw8IGZpbGxQYWludFNlcnZlci0+aWRJblJlZ2lz
dHJ5KCkgPDwgIlwiXSI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICB0cyA8PCBzIDw8ICpmaWxsUGFpbnRTZXJ2ZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpCisgICAgICAgICAgICAgICAgdHMg
PDwgcyA8PCAqZmlsbFBhaW50U2VydmVyOworCiAgICAgICAgICAgICBpZiAoc3R5bGUtPnN2Z1N0
eWxlKCktPmZpbGxPcGFjaXR5KCkgIT0gMS4wZikKICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8
ICJbb3BhY2l0eT0iIDw8IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpIDw8ICJdIjsK
ICAgICAgICAgICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSAhPSBSVUxFX05P
TlpFUk8pCg==
</data>
<flag name="review"
          id="4196"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11687</attachid>
            <date>2006-11-30 11:53:07 -0800</date>
            <delta_ts>2006-11-30 11:57:47 -0800</delta_ts>
            <desc>Updated final patch</desc>
            <filename>kill-kcanvas.diff</filename>
            <type>text/plain</type>
            <size>192075</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xOSw5ICsxOSw2IEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiAgICAk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZWRpdGluZwogICAgJHtDTUFLRV9DVVJSRU5UX0JJ
TkFSWV9ESVJ9L2h0bWwKICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9odG1sCi0gICAk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0va2NhbnZhcwotICAgJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L2tjYW52YXMvZGV2aWNlCi0gICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
a2NhbnZhcy9kZXZpY2UvcXQgCiAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0va3N2ZzIg
CiAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0va3N2ZzIvY3NzCiAgICAke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0va3N2ZzIvZXZlbnRzIApAQCAtNTM0LDEwICs1MzEsNiBAQCBzZXQg
KFNWR19TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNTVkdQb2ludC5jcHAKICAgICBiaW5kaW5n
cy9qcy9KU1NWR1JlY3QuY3BwCiAKLSAgICBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNl
LmNwcAotICAgIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHAKLSAgICBr
Y2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuY3BwCi0KICAgICBrc3ZnMi9jc3MvU1ZHQ1NT
UGFyc2VyLmNwcAogICAgIGtzdmcyL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAogICAgIGtz
dmcyL2Nzcy9TVkdSZW5kZXJTdHlsZS5jcHAKQEAgLTEwNzMsNiArMTA2Niw3IEBAIHNldChXZWJD
b3JlX1NSQ1MKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvZmlsdGVycy9TVkdGaWx0ZXJFZmZl
Y3QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2Uu
Y3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvUmVuZGVyUGF0aFF0LmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRR
dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
UXQuY3BwCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIwOSBAQAorMjAwNi0xMS0zMCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8
emltbWVybWFubkBrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMuIFJ1YmJlciBz
dGFtcGVkIGJ5IE5PQk9EWS4KKworICAgICAgICBGaXhlczogaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAzODMKKyAgICAgCisgICAgICAgIFRoaXMgaXMgdGhlIGZpbmFs
IHBhdGNoIGFmdGVyIHRoZSBsb25nICJkaWUga2NhbnZhcyIgam91cm5leS4KKworICAgICAgICBB
bGwgb2xkIGtjYW52YXMgY29kZSBpcyBnb25lIG5vdywgYW5kIHByb3Blcmx5IGludGVncmF0ZWQg
d2l0aGluCisgICAgICAgIFdlYkNvcmUgKHN0dWZmIGxpa2UgR3JhcGhpY3NDb250ZXh0IGNoYW5n
ZXMgZXRjLikuIEl0IHNoYXJlcworICAgICAgICB0aGUgcGxhdGZvcm0vIGRlc2lnbiBjb25jZXB0
OiBubyBzdWJjbGFzc2luZywgYnV0IGluc3RlYWQKKyAgICAgICAgaW1wbGVtZW50aW5nIHBhcnRz
IG9mIHRoZSBjbGFzc2VzL21ldGhvZHMgcGVyLXBsYXRmb3JtLgorCisgICAgICAgIFRoaXMgY29t
bWl0IHJlbW92ZXMgdGhlIGxhc3QgcGllY2VzOiBLUmVuZGVyaW5nRGV2aWNlICYgS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQuCisgICAgICAgIFRoaXMgbGF5ZXIgd2FzIGp1c3Qgb2Jzb2xldGUsIGdp
dmVuIHRoZSBwb3dlcmZ1bCBHcmFwaGljc0NvbnRleHQgQVBJIHdlIGhhdmUKKyAgICAgICAgc2lu
Y2UgcXVpdGUgYSB3aGlsZSBub3cuIEFsbCB0aGUgdWdseSBwdXNoQ29udGV4dC9wb3BDb250ZXh0
IHN0dWZmIGlzIGdvbmUgbm93LgorCisgICAgICAgIExheW91dFRlc3RzIGFmZmVjdGVkOiBzdmcv
VzNDLVNWRy0xLjEvcHNlcnZlcnMtZ3JhZC0xMS1iLnN2ZworICAgICAgICBSYWRpYWwgZ3JhZGll
bnRzIGFzIGZpbGwgY29sb3IgZm9yIHRleHRzLCB3b3JrIGFnYWluIQorICAgICAgICBUaG91Z2gg
IkdyYWRpZW50IG9uIHRleHQgc3Ryb2tlIiByZW1haW5zIGJyb2tlbi4gRnVubnkgdGhpbmc6Cisg
ICAgICAgIFdpdGggdGhpcyBwYXRjaCwgaWYgeW91ICJzZWxlY3QiIHRoZSB0ZXh0IHVzaW5nIHRo
ZSBtb3VzZSwgYXMKKyAgICAgICAgc29vbiBhcyB0aGUgc2VsZWN0aW9uIHJlY3RhbmdsZSBpcyBk
cmF3biwgeW91IHNlZSB0aGUgY29ycmVjdAorICAgICAgICBncmFkaWVudCBvbiBzdHJva2UgcmVu
ZGVyaW5nIC0gYXQgbGVhc3QgYSBoaW50IHdoZXJlIGl0IGJyZWFrcyEKKworICAgICAgICBBbGwg
c3ZnIGxheW91dCB0ZXN0cyBoYXZlIHN1YnRsZSB0ZXh0IHJlbmRlcmluZyBjaGFuZ2VzIC0gd2l0
aCBhbmQgd2l0aG91dCB0aGlzCisgICAgICAgIHBhdGNoLCBpdCBzZWVtcyBpdCB3YXMgZm9yZ290
dG9uIHRvIHVwZGF0ZSBzdmcgcGl4ZWwgdGVzdCBiYXNlbGluZSwgYSB3aGlsZSBhZ28uCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VR
dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0Rl
dmljZVF0Lmg6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0
aFF0LmNwcDogTW92ZWQgdG8gcGxhdGZvcm0vZ3JhcGhpY3MvcXQKKyAgICAgICAgKiBrY2FudmFz
L2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHouY3BwOiBNb3ZlZCB0byBwbGF0Zm9ybS9n
cmFwaGljcy9zdmcvY2cvUmVuZGVyUGF0aENnLmNwcAorICAgICAgICAqIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBr
Y2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmNwcDogTW92ZWQg
dG8gcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL0NnU3VwcG9ydC5jcHAKKyAgICAgICAgKiBrY2Fu
dmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oOiBNb3ZlZCB0byBwbGF0Zm9ybS9ncmFw
aGljcy9zdmcvY2cvQ2dTdXBwb3J0LmgKKyAgICAgICAgKiBrc3ZnMi9taXNjL0tDYW52YXNSZW5k
ZXJpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRTb2xpZFBhaW50U2VydmVy
KToKKyAgICAgICAgKiBrc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5oOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0Ns
aXBQYXRoRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpmaWx0ZXJFZmZlY3Qp
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OlNWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6Zmls
dGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dDo6dXBkYXRlTGlnaHRzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dDo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdG
RUZsb29kRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6
U1ZHRkVGbG9vZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVt
ZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUZ1bmNBRWxlbWVu
dC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFRnVuY0JFbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHRkVGdW5jR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVGdW5jR0VsZW1lbnQ6OlNWR0ZFRnVuY0dFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHRkVGdW5jUkVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6U1ZHRkVJbWFn
ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50Ojpub3Rp
ZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6ZmlsdGVy
RWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRU1lcmdlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6U1ZH
RkVPZmZzZXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVt
ZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6Omxp
Z2h0U291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
OjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Ojp1cGRhdGVMaWdodHMpOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpTVkdGRVNwb3RMaWdodEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVU
aWxlRWxlbWVudDo6U1ZHRkVUaWxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRp
bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RVRpbGVFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6Y2FudmFzUmVzb3Vy
Y2UpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHA6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdNYXNr
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNr
ZXJDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpjYW52YXNSZXNv
dXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpkcmF3UGF0dGVybkNvbnRlbnRJbnRvVGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6Y2FudmFzUmVzb3VyY2Up
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQ
YWludFNlcnZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNl
cnZlckdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGll
bnQ6OlNWR1BhaW50U2VydmVyR3JhZGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3N2Zy9TVkdQYWludFNlcnZlckdyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3ZnL1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZS5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3ZnL1NWR1Jlc291cmNlQ2xpcHBlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3N2Zy9TVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2
Zy9TVkdSZXNvdXJjZU1hc2tlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9j
Zy9SZW5kZXJQYXRoQ2cuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
dmcvY2cvU1ZHUGFpbnRTZXJ2ZXJDZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNl
cnZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlcjo6dGVhcmRvd24p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXI6OnJlbmRlclBhdGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVhcmRvd24pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6cmVuZGVyUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXApOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjp0ZWFyZG93bik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50U2VydmVyU29saWRDZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1Jlc291cmNlQ2xpcHBlckNnLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdmcvY2cvU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1Jlc291cmNlRmlsdGVyOjpTVkdSZXNvdXJjZUZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZXNvdXJjZUZpbHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1Jlc291cmNlRmlsdGVyOjpwcmVwYXJlRmlsdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1Jlc291cmNlRmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW06CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlNYXNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9zdmcvZmlsdGVycy9jZy9TVkdGRUltYWdlQ2cubW06CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50OjpzZXR1cCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyUGF0dGVyblF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXApOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdQYWludFNlcnZlclF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhaW50U2VydmVyOjp0ZWFyZG93bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWlu
dFNlcnZlcjo6cmVuZGVyUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0
L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
ZXR1cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVy
U29saWRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1Jlc291cmNlQ2xpcHBl
clF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VGaWx0ZXJR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZXNvdXJjZUZpbHRlcjo6Y3JlYXRlRmlsdGVy
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlRmlsdGVyOjpwcmVwYXJlRmls
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlRmlsdGVyOjphcHBseUZpbHRlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1Jlc291cmNlTWFza2VyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5TWFzayk6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjphZGRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0RmlsbFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjdXJy
ZW50UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dEZvckltYWdlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGb3Jl
aWduT2JqZWN0OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29u
dGFpbmVyOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNWR0ltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0lu
bGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmU6OlJlbmRlclNWR0lu
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmU6OmNyZWF0ZUlubGluZUJv
eCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5saW5lVGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1RTcGFuOjpSZW5kZXJTVkdUU3Bhbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6cGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnBhaW50U1ZHSW5saW5lRmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTdHlsZSk6CisKIDIwMDYt
MTEtMjkgIEFuZGVycyBDYXJsc3NvbiAgPGFjYXJsc3NvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQnJhZHkuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzNiwxMyArMTgzNiw2IEBACiAJ
CUE4NzFERkUzMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJSZXBsYWNlZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3MURGREYwQTE1Mzc2QjAwQjEy
QTY4IC8qIFJlbmRlclJlcGxhY2VkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTg3MURGRTQwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlcldpZGdl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3MURG
RTAwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlcldpZGdldC5oICovOyB9OwogCQlBODcxREZFNTBB
MTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFERkUxMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5k
ZXJXaWRnZXQuY3BwICovOyB9OwotCQlBODhBRDM4NjA5NTI0ODZEMDAxREQxOTYgLyogS1JlbmRl
cmluZ0RldmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEMwRkI1NDA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0RldmljZS5jcHAgKi87
IH07Ci0JCUE4OEFEMzg3MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI1NTA4OTcw
MUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0RldmljZS5oICovOyB9OwotCQlBODhBRDNBRDA5NTI0
ODZEMDAxREQxOTYgLyogS0NhbnZhc0l0ZW1RdWFydHouY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNkMwODk3MDFGODAwQkE1MTE0IC8qIEtD
YW52YXNJdGVtUXVhcnR6LmNwcCAqLzsgfTsKLQkJQTg4QUQzQjAwOTUyNDg2RTAwMUREMTk2IC8q
IEtSZW5kZXJpbmdEZXZpY2VRdWFydHouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QzBGQjcxMDg5NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2
aWNlUXVhcnR6LmggKi87IH07Ci0JCUE4OEFEM0IxMDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVy
aW5nRGV2aWNlUXVhcnR6LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzBGQjcyMDg5NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2aWNlUXVh
cnR6LmNwcCAqLzsgfTsKLQkJQTg4QUQzQjUwOTUyNDg2RTAwMUREMTk2IC8qIFF1YXJ0elN1cHBv
cnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBG
Qjc2MDg5NzAxRjgwMEJBNTExNCAvKiBRdWFydHpTdXBwb3J0LmggKi87IH07Ci0JCUE4OEFEM0I2
MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjc3MDg5NzAxRjgwMEJBNTExNCAvKiBR
dWFydHpTdXBwb3J0LmNwcCAqLzsgfTsKIAkJQTg4QUQ0MDEwOTUyNDhGMDAwMUREMTk2IC8qIFNW
R1JlbmRlclN0eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QzBGNkZGMDg5NzAxRjEwMEJBNTExNCAvKiBTVkdSZW5kZXJTdHlsZS5jcHAgKi87
IH07CiAJCUE4OEFENDAyMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHlsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEY3MDAwODk3MDFG
MTAwQkE1MTE0IC8qIFNWR1JlbmRlclN0eWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg4QUQ0MDMwOTUyNDhGMDAwMUREMTk2IC8qIFNWR1Jl
bmRlclN0eWxlRGVmcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEMwRjcwMTA4OTcwMUYxMDBCQTUxMTQgLyogU1ZHUmVuZGVyU3R5bGVEZWZzLmNw
cCAqLzsgfTsKQEAgLTIyMzMsMTMgKzIyMjYsMTUgQEAKIAkJQjIyMkY2OTkwQUI3NzE5NTAwMjJF
RkFEIC8qIEpTU1ZHQW5nbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyMjJGNjk3MEFCNzcxOTUwMDIyRUZBRCAvKiBKU1NWR0FuZ2xlLmggKi87IH07
CiAJCUIyMjJGNjlDMEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2OUEwQUI3NzFCODAw
MjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5jcHAgKi87IH07CiAJCUIyMjJGNjlEMEFCNzcxQjgwMDIy
RUZBRCAvKiBKU1NWR0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyMjJGNjlCMEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuaCAq
LzsgfTsKKwkJQjIzMTBCNzYwQjFGNDZBMjAwRDU1RDg3IC8qIENnU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjMxMEI3MzBCMUY0NkEy
MDBENTVEODcgLyogQ2dTdXBwb3J0LmNwcCAqLzsgfTsKKwkJQjIzMTBCNzcwQjFGNDZBMjAwRDU1
RDg3IC8qIENnU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjIzMTBCNzQwQjFGNDZBMjAwRDU1RDg3IC8qIENnU3VwcG9ydC5oICovOyB9Owor
CQlCMjMxMEI3ODBCMUY0NkEzMDBENTVEODcgLyogUmVuZGVyUGF0aENnLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzEwQjc1MEIxRjQ2QTIwMEQ1
NUQ4NyAvKiBSZW5kZXJQYXRoQ2cuY3BwICovOyB9OwogCQlCMjc1MzU1NjBCMDUzODE0MDAyQ0U2
NEYgLyogQWZmaW5lVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNzUzNTI3MEIwNTM4MTQwMDJDRTY0RiAvKiBBZmZpbmVUcmFuc2Zv
cm0uY3BwICovOyB9OwogCQlCMjc1MzU1NzBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNm
b3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1
MzUyODBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtLmggKi87IH07CiAJCUIyNzUz
NTU4MEIwNTM4MTQwMDJDRTY0RiAvKiBBZmZpbmVUcmFuc2Zvcm1DRy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyQTBCMDUzODE0MDAyQ0U2
NEYgLyogQWZmaW5lVHJhbnNmb3JtQ0cuY3BwICovOyB9OwogCQlCMjc1MzU1OTBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cu
Y3BwICovOyB9OwogCQlCMjc1MzU1QTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkMw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUIwQjA1
MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNp
emVDRy5jcHAgKi87IH07Ci0JCUIyNzUzNTVDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc0Nv
bnRleHRDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzUyRTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovOyB9
OwogCQlCMjc1MzU1RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUyRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
LmggKi87IH07CiAJCUIyNzUzNTVFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMwMEIwNTM4
MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUYwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlU291cmNlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cu
Y3BwICovOyB9OwpAQCAtMjQxNiw2ICsyNDExLDcgQEAKIAkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3
QzdCIC8qIEZsb2F0UG9pbnQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJFMjdDOUUwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oICov
OyB9OwogCQlCMkVCREM5QzBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkVCREM5
QTBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi87IH07CiAJCUIy
RUJEQzlEMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkVCREM5QjBBRjc3RTM0MDBB
RTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oICovOyB9OworCQlCMkVEOTc3MTBCMUY1NUNF
MDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFRDk3NzAwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBo
aWNzQ29udGV4dENHLmNwcCAqLzsgfTsKIAkJQjJGQTNEMzYwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkZBM0M0RTBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdBbmltYXRl
Q29sb3JFbGVtZW50LmNwcCAqLzsgfTsKIAkJQjJGQTNEMzcwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJGQTNDNEYwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZUNv
bG9yRWxlbWVudC5oICovOyB9OwogCQlCMkZBM0QzODBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdB
bmltYXRlZEFuZ2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyRkEzQzUwMEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkQW5nbGUuY3Bw
ICovOyB9OwpAQCAtNTAwMSwxMyArNDk5Nyw2IEBACiAJCUE4QzBGOEVBMDg5NzAxRjQwMEJBNTEx
NCAvKiBTVkdWaWV3RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR1ZpZXdFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRjhFQjA4OTcwMUY0MDBCQTUx
MTQgLyogU1ZHWm9vbUFuZFBhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1pvb21BbmRQYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQThDMEY4RUMwODk3MDFG
NDAwQkE1MTE0IC8qIFNWR1pvb21BbmRQYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdab29tQW5kUGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlBOEMwRkI1NDA4OTcwMUY3
MDBCQTUxMTQgLyogS1JlbmRlcmluZ0RldmljZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtSZW5kZXJpbmdEZXZpY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQThD
MEZCNTUwODk3MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLUmVuZGVyaW5nRGV2aWNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owot
CQlBOEMwRkI2QzA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0l0ZW1RdWFydHouY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLQ2FudmFz
SXRlbVF1YXJ0ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwotCQlBOEMwRkI3MTA4OTcwMUY4MDBCQTUxMTQgLyogS1JlbmRlcmluZ0Rl
dmljZVF1YXJ0ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEtSZW5kZXJpbmdEZXZpY2VRdWFydHouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUE4QzBGQjcyMDg5NzAxRjgwMEJBNTEx
NCAvKiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owot
CQlBOEMwRkI3NjA4OTcwMUY4MDBCQTUxMTQgLyogUXVhcnR6U3VwcG9ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1YXJ0elN1cHBvcnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0J
CUE4QzBGQjc3MDg5NzAxRjgwMEJBNTExNCAvKiBRdWFydHpTdXBwb3J0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhcnR6U3VwcG9y
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQlBOEMzMjk1QzA5M0JCN0IyMDAwQjlDQUMgLyogU1ZHRkVMaWdodEVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRUxp
Z2h0RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJQThDMzI5NUQwOTNCQjdCMjAwMEI5Q0FDIC8qIFNWR0ZFTGlnaHRFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU1ZHRkVMaWdodEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQThDMzI5NUUwOTNCQjdCMjAwMEI5Q0FDIC8q
IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTUxOTAs
MTMgKzUxNzksMTUgQEAKIAkJQjIyMkY2OTcwQUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZHQW5nbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHQW5nbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjIyMkY2OUEwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZH
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjIyMkY2OUIwQUI3NzFC
ODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTVkdFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyMzEw
QjczMEIxRjQ2QTIwMEQ1NUQ4NyAvKiBDZ1N1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENnU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUIyMzEwQjc0MEIxRjQ2QTIwMEQ1NUQ4NyAvKiBDZ1N1cHBvcnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENnU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCMjMxMEI3NTBCMUY0NkEyMDBENTVEODcgLyogUmVuZGVyUGF0aENnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJQYXRoQ2cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUyNzBCMDUzODE0MDAyQ0U2NEYgLyog
QWZmaW5lVHJhbnNmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBZmZpbmVUcmFuc2Zvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1
MzUyODBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBZmZpbmVUcmFuc2Zvcm0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybUNH
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBZmZpbmVUcmFuc2Zv
cm1DRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTJCMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZsb2F0UG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRSZWN0Q0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0U2l6ZUNHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1MkUwQjA1MzgxNDAwMkNFNjRG
IC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHcmFwaGljc0NvbnRleHRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUz
MDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZVNvdXJjZUNHLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0OTEsNiArNTQ4Miw3IEBACiAJCUIyRTk1NDhFMEFCNUZC
QTMwMDc2REUzNyAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyRUJEQzlBMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFQkRDOUIwQUY3N0Uz
NDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR1JlbmRlclRyZWVBc1RleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQjJFRDk3NzAwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRD
Ry5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRkEzQzRFMEFCNzVBNkUwMDBF
NUFDNCAvKiBKU1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRkEzQzRGMEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR0Fu
aW1hdGVDb2xvckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkZBM0M1MDBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlZEFuZ2xlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FuaW1hdGVkQW5nbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk5NSw3ICs1OTg3LDYgQEAKIAkJCQlGNTIz
RDMyNDAyREU0NDc4MDE4NjM1Q0EgLyogZG9tICovLAogCQkJCTkzMzA5RDg2MDk5RTY0OTEwMDU2
RTU4MSAvKiBlZGl0aW5nICovLAogCQkJCTkzRUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1s
ICovLAotCQkJCUE4QzBGQjUxMDg5NzAxRjcwMEJBNTExNCAvKiBrY2FudmFzICovLAogCQkJCUE4
QzBGNkU5MDg5NzAxRjEwMEJBNTExNCAvKiBrc3ZnMiAqLywKIAkJCQlCQ0IxNkJGQjA5NzlDMzg3
MDA0Njc3NDEgLyogbG9hZGVyICovLAogCQkJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBw
YWdlICovLApAQCAtODM3NCwzNiArODM2NSw2IEBACiAJCQlwYXRoID0gc3ZnOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQThDMEZCNTEwODk3MDFGNzAwQkE1MTE0IC8qIGtj
YW52YXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUE4
QzBGQjUzMDg5NzAxRjcwMEJBNTExNCAvKiBkZXZpY2UgKi8sCi0JCQkpOwotCQkJcGF0aCA9IGtj
YW52YXM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlBOEMwRkI1MzA4OTcw
MUY3MDBCQTUxMTQgLyogZGV2aWNlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGls
ZHJlbiA9ICgKLQkJCQlBOEMwRkI1NDA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0Rldmlj
ZS5jcHAgKi8sCi0JCQkJQThDMEZCNTUwODk3MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZp
Y2UuaCAqLywKLQkJCQlBOEMwRkI2ODA4OTcwMUY4MDBCQTUxMTQgLyogcXVhcnR6ICovLAotCQkJ
KTsKLQkJCXBhdGggPSBkZXZpY2U7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
CQlBOEMwRkI2ODA4OTcwMUY4MDBCQTUxMTQgLyogcXVhcnR6ICovID0gewotCQkJaXNhID0gUEJY
R3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBOEMwRkI2QzA4OTcwMUY4MDBCQTUxMTQgLyog
S0NhbnZhc0l0ZW1RdWFydHouY3BwICovLAotCQkJCUE4QzBGQjcxMDg5NzAxRjgwMEJBNTExNCAv
KiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmggKi8sCi0JCQkJQThDMEZCNzIwODk3MDFGODAwQkE1
MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFydHouY3BwICovLAotCQkJCUE4QzBGQjc2MDg5NzAx
RjgwMEJBNTExNCAvKiBRdWFydHpTdXBwb3J0LmggKi8sCi0JCQkJQThDMEZCNzcwODk3MDFGODAw
QkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQuY3BwICovLAotCQkJKTsKLQkJCXBhdGggPSBxdWFydHo7
Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlCMjc1MzUyOTBCMDUzODE0MDAy
Q0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtODQxMSw3ICs4MzcyLDcgQEAKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRS
ZWN0Q0cuY3BwICovLAogCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVD
Ry5jcHAgKi8sCi0JCQkJQjI3NTM1MkUwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzQ29udGV4
dENHLmNwcCAqLywKKwkJCQlCMkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250
ZXh0Q0cuY3BwICovLAogCQkJCUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUuaCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYg
LyogSW1hZ2VDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdl
U291cmNlQ0cuY3BwICovLApAQCAtODUxNiw2ICs4NDc3LDkgQEAKIAkJQjJBMDE1OTcwQUY2Q0Q1
MzAwNkJDRTBFIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQlCMjMxMEI3MzBCMUY0NkEyMDBENTVEODcgLyogQ2dTdXBwb3J0LmNwcCAqLywKKwkJ
CQlCMjMxMEI3NDBCMUY0NkEyMDBENTVEODcgLyogQ2dTdXBwb3J0LmggKi8sCisJCQkJQjIzMTBC
NzUwQjFGNDZBMjAwRDU1RDg3IC8qIFJlbmRlclBhdGhDZy5jcHAgKi8sCiAJCQkJQjJEODdDODMw
QjEyNEU5NTAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwICovLAogCQkJCUIyRDg3Qzg0
MEIxMjRFOTUwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwICovLAogCQkJ
CUIyRDg3Qzg1MEIxMjRFOTUwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAg
Ki8sCkBAIC05NDU3LDkgKzk0MjEsNiBAQAogCQkJCTdFNkZFRUQ4MDg5ODU4MjMwMEM0NEMzRiAv
KiBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTg4NUM0MDhC
N0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUM5N0FG
MzA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKLQkJCQlBODhBRDM4
NzA5NTI0ODZEMDAxREQxOTYgLyogS1JlbmRlcmluZ0RldmljZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQTg4QUQzQjAwOTUyNDg2RTAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFydHouaCBp
biBIZWFkZXJzICovLAotCQkJCUE4OEFEM0I1MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBw
b3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDQwMjA5NTI0OEYwMDAxREQxOTYgLyogU1ZH
UmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFENDA0MDk1MjQ4RjAwMDFERDE5
NiAvKiBTVkdSZW5kZXJTdHlsZURlZnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFENDBCMDk1
MjQ4RjAwMDFERDE5NiAvKiBTVkdab29tRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTA4Mzks
NiArMTA4MDAsNyBAQAogCQkJCUE3MzUyQzFBMEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEI4QUY0QUEwQjFDRTAyQjAwNjg3NjkwIC8qIENs
aXBib2FyZEFjY2Vzc1BvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDYwMjdDQUQwQjFDQkZD
MDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjIzMTBC
NzcwQjFGNDZBMjAwRDU1RDg3IC8qIENnU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMTAz
OSwxMCArMTEwMDEsNiBAQAogCQkJCUJDRUYzNDM0MDg3QjU2M0UwMEJCRjgzMyAvKiBIVE1MRWxl
bWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U2RkVFRDkwODk4NTgyMzAwQzQ0
QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTg4
NUMzMDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUE4OEFEMzg2MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUE4OEFEM0FEMDk1MjQ4NkQwMDFERDE5NiAvKiBLQ2FudmFzSXRlbVF1YXJ0
ei5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODhBRDNCMTA5NTI0ODZFMDAxREQxOTYgLyogS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODhBRDNCNjA5NTI0
ODZFMDAxREQxOTYgLyogUXVhcnR6U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhB
RDQwMTA5NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTg4QUQ0MDMwOTUyNDhGMDAwMUREMTk2IC8qIFNWR1JlbmRlclN0eWxlRGVmcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODhBRDQwQTA5NTI0OEYwMDAxREQxOTYgLyogU1ZHWm9vbUV2
ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTIwNjMsNyArMTIwMjEsNiBAQAogCQkJCUIyNzUz
NTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjI3NTM1NUEwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCMjc1MzU1QzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250
ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NUUwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NUYwQjA1MzgxNDAwMkNFNjRG
IC8qIEltYWdlU291cmNlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjAwQjA1Mzgx
NDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMjE1Niw2ICsx
MjExMyw5IEBACiAJCQkJMUFEOENGQ0UwQjFDRUQ4OTAwNjk2REUwIC8qIFJlc291cmNlUmVxdWVz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjAyN0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29u
dGV4dE1lbnVJdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4MTgwQTUwQjFENEU0MzAw
Q0U0NkM0IC8qIFJlc291cmNlUmVzcG9uc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjIzMTBC
NzYwQjFGNDZBMjAwRDU1RDg3IC8qIENnU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
MjMxMEI3ODBCMUY0NkEzMDBENTVEODcgLyogUmVuZGVyUGF0aENnLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUIyRUQ5NzcxMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rl
dmljZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5n
RGV2aWNlLmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tS
ZW5kZXJpbmdEZXZpY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgotICAgICAgICAgICAgICAgICAgMjAwNiAgICAgICBBbGV4YW5kZXIgS2VsbGV0dCA8bHlw
YW5vdkBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIktSZW5k
ZXJpbmdEZXZpY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1LUmVuZGVyaW5nRGV2aWNl
OjpLUmVuZGVyaW5nRGV2aWNlKCkKLXsKLX0KLQotS1JlbmRlcmluZ0RldmljZTo6fktSZW5kZXJp
bmdEZXZpY2UoKQotewotfQotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogS1JlbmRlcmluZ0Rl
dmljZTo6Y3VycmVudENvbnRleHQoKSBjb25zdAotewotICAgIGlmIChtX2NvbnRleHRTdGFjay5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2NvbnRleHRTdGFjay5s
YXN0KCk7Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlOjpw
b3BDb250ZXh0KCkKLXsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcmVzdWx0ID0gbV9j
b250ZXh0U3RhY2subGFzdCgpOwotICAgIG1fY29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2U6OnB1c2hDb250ZXh0
KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0KQotewotICAgIG1fY29udGV4dFN0YWNr
LmFwcGVuZChjb250ZXh0KTsKLX0KLQotfQotCi0vLyB2aW06dHM9NDpub2V0Ci0jZW5kaWYgLy8g
U1ZHX1NVUFBPUlQKLQpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2
aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2
aWNlLmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVy
aW5nRGV2aWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0K
LSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw
LAotICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotKi8KLQotI2lmbmRlZiBLUmVuZGVy
aW5nRGV2aWNlX0gKLSNkZWZpbmUgS1JlbmRlcmluZ0RldmljZV9ICi0KLSNpZmRlZiBTVkdfU1VQ
UE9SVAotCi0jaW5jbHVkZSAiU1ZHRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHUGFpbnRT
ZXJ2ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBQYXRoOwotCi0vLyBha2Egd2hlcmUgdG8g
ZHJhdwotY2xhc3MgS1JlbmRlcmluZ0RldmljZUNvbnRleHQKLXsKLXB1YmxpYzoKLSAgICBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCgpIHsgfQotICAgIHZpcnR1YWwgfktSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBjb25jYXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGN0
bSgpIGNvbnN0ID0gMDsKLSAgICAgICAgCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGF0aCgpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJikgPSAwOwotCi0gICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpID0gMDsKLX07Ci0K
LWNsYXNzIFNWR1Jlc291cmNlSW1hZ2U7Ci1jbGFzcyBTVkdSZXNvdXJjZUZpbHRlckVmZmVjdDsK
LWNsYXNzIEtSZW5kZXJpbmdEZXZpY2UKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nRGV2aWNl
KCk7Ci0gICAgdmlydHVhbCB+S1JlbmRlcmluZ0RldmljZSgpOwotCi0gICAgLy8gVGhlIHJlbmRl
cmluZyBkZXZpY2Ugd2lsbCBiZSBkaXJlY3RseSBpbml0ZWQKLSAgICAvLyBhZnRlciB0aGUgY2Fu
dmFzIHRhcmdldCwgaXQgbWF5IGJlIG92ZXJ3cml0dGVuLgotICAgIHZpcnR1YWwgYm9vbCBpc0J1
ZmZlcmVkKCkgY29uc3QgPSAwOwotCi0gICAgLy8gR2xvYmFsIHJlbmRlcmluZyBkZXZpY2UgY29u
dGV4dAotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjdXJyZW50Q29udGV4dCgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcG9wQ29udGV4dCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBwdXNoQ29udGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCopOwot
ICAgIAotICAgIHZpcnR1YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHRGb3JJbWFn
ZShTVkdSZXNvdXJjZUltYWdlKikgY29uc3QgPSAwOwotCi0gICAgLy8gQ3JlYXRpb24gdG9vbHMK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U1ZHUmVzb3VyY2U+IGNyZWF0ZVJlc291cmNlKGNvbnN0
IFNWR1Jlc291cmNlVHlwZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFNWR0ZpbHRlckVmZmVj
dCogY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckVmZmVjdFR5cGUmKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNWR1BhaW50U2VydmVyPiBjcmVhdGVQYWludFNl
cnZlcihjb25zdCBTVkdQYWludFNlcnZlclR5cGUmKSBjb25zdCA9IDA7Ci0KLXByaXZhdGU6Ci0g
ICAgVmVjdG9yPEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kj4gbV9jb250ZXh0U3RhY2s7Ci19Owot
Ci1LUmVuZGVyaW5nRGV2aWNlKiByZW5kZXJpbmdEZXZpY2UoKTsgLyogcmV0dXJucyB0aGUgc2lu
Z2xlIGdsb2JhbCByZW5kZXJpbmcgZGV2aWNlICovCi0KLX0KLQotI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcAkocmV2aXNpb24gMTc5MzgpCisr
KyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLSNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZU1hcmtlci5oIgot
I2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVy
U29saWQuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50LmgiCi0jaW5j
bHVkZSAiU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oIgotI2luY2x1ZGUgIlNWR1BhaW50
U2VydmVyUGF0dGVybi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0UXQ6OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQoUVBhaW50ZXIqIHBhaW50ZXIp
Ci0gICAgOiBtX3BhaW50ZXIocGFpbnRlcikKLSAgICAsIG1fcGF0aCgpCi17Ci0gICAgUV9BU1NF
UlQobV9wYWludGVyICE9IDApOwotfQotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Ojp+S1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdCgpCi17Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB3b3Js
ZE1hdHJpeCkKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gcmV0ID0gY3RtKCk7Ci0gICAgbV9wYWlu
dGVyLT5zZXRNYXRyaXgod29ybGRNYXRyaXgsIHRydWUpOwotICAgIHJldHVybiByZXQ7Ci19Ci0K
LUFmZmluZVRyYW5zZm9ybSBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpjdG0oKSBjb25zdAot
ewotICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0obV9wYWludGVyLT5tYXRyaXgoKSk7Ci19Ci0K
LUludFJlY3QgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6bWFwRnJvbVZpc3VhbChjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLUludFJlY3QgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdDo6bWFwVG9WaXN1YWwoY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICByZXR1cm4gSW50UmVjdCgpOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXQ6OmNsZWFyUGF0aCgpCi17Ci0gICAgbV9wYXRoID0gUVBhaW50ZXJQYXRoKCk7Ci19Ci0K
LXZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIG1fcGF0aC5hZGRQYXRoKCoocGF0aC5wbGF0Zm9ybVBhdGgoKSkpOwotfQotCi1H
cmFwaGljc0NvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6OmNyZWF0ZUdyYXBoaWNz
Q29udGV4dCgpCi17Ci0gICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQobV9wYWludGVyKTsK
LX0KLQotUVBhaW50ZXImIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6OnBhaW50ZXIoKQotewot
ICAgIHJldHVybiAqbV9wYWludGVyOwotfQotCi1RUmVjdEYgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdDo6cGF0aEJCb3goKSBjb25zdAotewotICAgIHJldHVybiBtX3BhdGguYm91bmRpbmdSZWN0
KCk7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6c2V0RmlsbFJ1bGUoV2lu
ZFJ1bGUgcnVsZSkKLXsKLSAgICBtX3BhdGguc2V0RmlsbFJ1bGUocnVsZSA9PSBSVUxFX0VWRU5P
REQgPyBRdDo6T2RkRXZlbkZpbGwgOiBRdDo6V2luZGluZ0ZpbGwpOwotfQotCi12b2lkIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0UXQ6OmZpbGxQYXRoKCkKLXsKLSAgICBtX3BhaW50ZXItPmZpbGxQ
YXRoKG1fcGF0aCwgbV9wYWludGVyLT5icnVzaCgpKTsKLX0KLQotdm9pZCBLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dFF0OjpzdHJva2VQYXRoKCkKLXsKLSAgICBtX3BhaW50ZXItPnN0cm9rZVBhdGgo
bV9wYXRoLCBtX3BhaW50ZXItPnBlbigpKTsKLX0KLQotLy8gS1JlbmRlcmluZ0RldmljZVF0Ci1L
UmVuZGVyaW5nRGV2aWNlUXQ6OktSZW5kZXJpbmdEZXZpY2VRdCgpIDogS1JlbmRlcmluZ0Rldmlj
ZSgpCi17Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VRdDo6fktSZW5kZXJpbmdEZXZpY2VRdCgpCi17
Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlUXQ6OnBvcENv
bnRleHQoKQotewotICAgIC8vIEFueSBzcGVjaWFsIHRoaW5ncyBuZWVkZWQ/Ci0gICAgcmV0dXJu
IEtSZW5kZXJpbmdEZXZpY2U6OnBvcENvbnRleHQoKTsKLX0KLQotdm9pZCBLUmVuZGVyaW5nRGV2
aWNlUXQ6OnB1c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0KQotewot
ICAgIC8vIEFueSBzcGVjaWFsIHRoaW5ncyBuZWVkZWQ/Ci0gICAgS1JlbmRlcmluZ0RldmljZTo6
cHVzaENvbnRleHQoY29udGV4dCk7Ci19Ci0KLS8vIGNvbnRleHQgbWFuYWdlbWVudC4KLUtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0UXQqIEtSZW5kZXJpbmdEZXZpY2VRdDo6cXRDb250ZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCo+
KGN1cnJlbnRDb250ZXh0KCkpOwotfQotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogS1JlbmRl
cmluZ0RldmljZVF0Ojpjb250ZXh0Rm9ySW1hZ2UoU1ZHUmVzb3VyY2VJbWFnZSogaW1hZ2UpIGNv
bnN0Ci17Ci0gICAgcURlYnVnKCJLUmVuZGVyaW5nRGV2aWNlUXQ6OmNvbnRleHRGb3JJbWFnZSgp
IFRPRE8hIik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFJlc291cmNlIGNyZWF0aW9uCi1QYXNz
UmVmUHRyPFNWR1Jlc291cmNlPiBLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZVJlc291cmNlKGNv
bnN0IFNWR1Jlc291cmNlVHlwZSYgdHlwZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0g
ICAgewotICAgICAgICBjYXNlIENsaXBwZXJSZXNvdXJjZVR5cGU6Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IFNWR1Jlc291cmNlQ2xpcHBlcigpOwotICAgICAgICBjYXNlIE1hcmtlclJlc291cmNl
VHlwZToKLSAgICAgICAgICAgIHJldHVybiBuZXcgU1ZHUmVzb3VyY2VNYXJrZXIoKTsgLy8gVXNl
IGRlZmF1bHQgaW1wbGVtZW50YXRpb24uLi4KLSAgICAgICAgY2FzZSBJbWFnZVJlc291cmNlVHlw
ZToKLSAgICAgICAgICAgIC8vIHJldHVybiBuZXcgU1ZHUmVzb3VyY2VJbWFnZVF0KCk7Ci0gICAg
ICAgIGNhc2UgRmlsdGVyUmVzb3VyY2VUeXBlOgotICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBL
Q2FudmFzRmlsdGVyUXQoKTsKLSAgICAgICAgY2FzZSBNYXNrZXJSZXNvdXJjZVR5cGU6Ci0gICAg
ICAgICAgICAvLyByZXR1cm4gbmV3IEtDYW52YXNNYXNrZXJRdCgpOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFNWR1BhaW50
U2VydmVyPiBLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IFNWR1Bh
aW50U2VydmVyVHlwZSYgdHlwZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewot
ICAgICAgICBjYXNlIFNvbGlkUGFpbnRTZXJ2ZXI6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFNW
R1BhaW50U2VydmVyU29saWQoKTsKLSAgICAgICAgY2FzZSBQYXR0ZXJuUGFpbnRTZXJ2ZXI6Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50U2VydmVyUGF0dGVybigpOwotICAgICAgICBj
YXNlIExpbmVhckdyYWRpZW50UGFpbnRTZXJ2ZXI6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFNW
R1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQoKTsKLSAgICAgICAgY2FzZSBSYWRpYWxHcmFkaWVu
dFBhaW50U2VydmVyOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50KCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci19Ci0KLVNWR0ZpbHRlckVmZmVjdCogS1JlbmRlcmluZ0RldmljZVF0OjpjcmVhdGVGaWx0
ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVyRWZmZWN0VHlwZSYgdHlwZSkgY29uc3QKLXsKLSAgICBx
RGVidWcoIktSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlRmlsdGVyRWZmZWN0KCkgVE9ETyEiKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotS1JlbmRlcmluZ0RldmljZSogcmVuZGVyaW5nRGV2aWNlKCkK
LXsKLSAgICBzdGF0aWMgS1JlbmRlcmluZ0RldmljZSAqc2hhcmVkUmVuZGVyaW5nRGV2aWNlID0g
bmV3IEtSZW5kZXJpbmdEZXZpY2VRdCgpOwotICAgIHJldHVybiBzaGFyZWRSZW5kZXJpbmdEZXZp
Y2U7Ci19Ci0KLX0KLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5oCShyZXZpc2lvbiAxNzkzOCkKKysrIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAg
ICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIEtSZW5kZXJpbmdEZXZpY2VRdF9ICi0j
ZGVmaW5lIEtSZW5kZXJpbmdEZXZpY2VRdF9ICi0KLSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNs
dWRlIDxRUGFpbnRlclBhdGg+Ci0KLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiS1JlbmRl
cmluZ0RldmljZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0UXQgOiBwdWJsaWMgS1JlbmRlcmluZ0RldmljZUNvbnRleHQKLXsKLXB1Ymxp
YzoKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KFFQYWludGVyKik7Ci0gICAgdmlydHVh
bCB+S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCgpOwotCi0gICAgdmlydHVhbCBBZmZpbmVUcmFu
c2Zvcm0gY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZpcnR1YWwgQWZm
aW5lVHJhbnNmb3JtIGN0bSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJbnRSZWN0IG1hcEZyb21W
aXN1YWwoY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgSW50UmVjdCBtYXBUb1Zpc3VhbChj
b25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXRoKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYpOwotCi0gICAgdmlydHVhbCBHcmFwaGljc0Nv
bnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgIAotICAgIC8vIFF0IHNwZWNpZmlj
IHN0dWZmCi0gICAgUVBhaW50ZXImIHBhaW50ZXIoKTsKLSAgICBRUmVjdEYgcGF0aEJCb3goKSBj
b25zdDsKLQotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOwotCi0gICAgdm9pZCBmaWxs
UGF0aCgpOwotICAgIHZvaWQgc3Ryb2tlUGF0aCgpOwotCi1wcml2YXRlOgotICAgIFFQYWludGVy
KiBtX3BhaW50ZXI7Ci0gICAgUVBhaW50ZXJQYXRoIG1fcGF0aDsKLX07Ci0KLWNsYXNzIEtSZW5k
ZXJpbmdEZXZpY2VRdCA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlCi17Ci1wdWJsaWM6Ci0gICAg
S1JlbmRlcmluZ0RldmljZVF0KCk7Ci0gICAgdmlydHVhbCB+S1JlbmRlcmluZ0RldmljZVF0KCk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXJlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBwb3BDb250ZXh0KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHB1c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kik7Ci0K
LSAgICAvLyBjb250ZXh0IG1hbmFnZW1lbnQuCi0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dCogcXRDb250ZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCogY29udGV4dEZvckltYWdlKFNWR1Jlc291cmNlSW1hZ2UqKSBjb25zdDsKLQotICAgIC8vIFJl
c291cmNlIGNyZWF0aW9uCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNWR1Jlc291cmNlPiBjcmVh
dGVSZXNvdXJjZShjb25zdCBTVkdSZXNvdXJjZVR5cGUmKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXI+IGNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IFNWR1BhaW50
U2VydmVyVHlwZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgU1ZHRmlsdGVyRWZmZWN0KiBjcmVhdGVG
aWx0ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVyRWZmZWN0VHlwZSYpIGNvbnN0OwotfTsKLQotfQot
Ci0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rldmlj
ZS9xdC9SZW5kZXJQYXRoUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvcXQvUmVuZGVyUGF0aFF0LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODggKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAy
MDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljLnNlaWRlbEBrZGVtYWlsLm5ldD4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVy
UGF0aC5oIgotI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotCi0jaW5jbHVkZSA8
UURlYnVnPgotI2luY2x1ZGUgPFFQYWludGVyUGF0aFN0cm9rZXI+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICAKLWJvb2wgUmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpIGNvbnN0Ci17Ci0gICAgaWYgKHBhdGgo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChyZXF1aXJlc1N0
cm9rZSAmJiAhS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0
aGlzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgUVBhaW50ZXJQYXRoIGdldFBhdGhTdHJva2UoY29uc3QgUVBhaW50ZXJQYXRoICZwYXRo
LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQot
eyAKLSAgICBRUGFpbnRlclBhdGhTdHJva2VyIHM7Ci0gICAgcy5zZXRXaWR0aChLU1ZHUGFpbnRl
ckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCkt
PnN0cm9rZVdpZHRoKCksIDEuMCkpOwotCi0gICAgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBT
dHlsZSgpID09IEJ1dHRDYXApCi0gICAgICAgIHMuc2V0Q2FwU3R5bGUoUXQ6OkZsYXRDYXApOwot
ICAgIGVsc2UgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFJvdW5kQ2FwKQot
ICAgICAgICBzLnNldENhcFN0eWxlKFF0OjpSb3VuZENhcCk7Ci0KLSAgICBpZiAoc3R5bGUtPnN2
Z1N0eWxlKCktPmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikgewotICAgICAgICBzLnNldEpvaW5T
dHlsZShRdDo6TWl0ZXJKb2luKTsKLSAgICAgICAgcy5zZXRNaXRlckxpbWl0KChxcmVhbCkgc3R5
bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0gICAgfSBlbHNlIGlmKHN0eWxl
LT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSA9PSBSb3VuZEpvaW4pCi0gICAgICAgIHMuc2V0Sm9p
blN0eWxlKFF0OjpSb3VuZEpvaW4pOwotCi0gICAgY29uc3QgS0NEYXNoQXJyYXkmIGRhc2hlcyA9
IEtTVkdQYWludGVyRmFjdG9yeTo6ZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKHN0eWxlKTsK
LSAgICBkb3VibGUgZGFzaE9mZnNldCA9IEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZl
VG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAw
LjApOwotCi0gICAgdW5zaWduZWQgaW50IGRhc2hMZW5ndGggPSAhZGFzaGVzLmlzRW1wdHkoKSA/
IGRhc2hlcy5zaXplKCkgOiAwOwotICAgIGlmKGRhc2hMZW5ndGgpIHsKLSAgICAgICAgUVZlY3Rv
cjxxcmVhbD4gcGF0dGVybjsKLSAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gKGRhc2hMZW5n
dGggJSAyKSA9PSAwID8gZGFzaExlbmd0aCA6IGRhc2hMZW5ndGggKiAyOwotCi0gICAgICAgIGZv
cih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgcGF0dGVy
bi5hcHBlbmQoZGFzaGVzW2kgJSBkYXNoTGVuZ3RoXSAvIChmbG9hdClzLndpZHRoKCkpOwotCi0g
ICAgICAgIHMuc2V0RGFzaFBhdHRlcm4ocGF0dGVybik7Ci0gICAgCi0gICAgICAgIFFfVU5VU0VE
KGRhc2hPZmZzZXQpOwotICAgICAgICAvLyBUT0RPOiBkYXNoLW9mZnNldCwgZG9lcy93aWxsIHF0
NCBBUEkgYWxsb3cgaXQ/IChSb2IpCi0gICAgfQotCi0gICAgcmV0dXJuIHMuY3JlYXRlU3Ryb2tl
KHBhdGgpOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyUGF0aDo6c3Ryb2tlQkJveCgpIGNvbnN0Ci17
Ci0gICAgUVBhaW50ZXJQYXRoIG91dGxpbmUgPSBnZXRQYXRoU3Ryb2tlKCoocGF0aCgpLnBsYXRm
b3JtUGF0aCgpKSwgdGhpcywgc3R5bGUoKSk7Ci0gICAgcmV0dXJuIG91dGxpbmUuYm91bmRpbmdS
ZWN0KCk7Ci19Ci0KLX0KLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFz
L2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHouY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6LmNwcAkocmV2aXNpb24g
MTc5MzgpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0
ei5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAg
ICAgICAgICAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgotICog
ICAgICAgICAgICAgICAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpZmRlZiBTVkdfU1VQUE9SVAotCi0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2
aWNlcy5oPgotI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIktS
ZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKLSNpbmNsdWRlICJRdWFydHpTdXBwb3J0LmgiCi0jaW5j
bHVkZSAiUmVuZGVyUGF0aC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVk
ZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVj
dCBSZW5kZXJQYXRoOjpzdHJva2VCQm94KCkgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUoKS0+c3Zn
U3R5bGUoKS0+aGFzU3Ryb2tlKCkpCi0gICAgICAgIHJldHVybiBzdHJva2VCb3VuZGluZ0JveChw
YXRoKCksIHN0eWxlKCksIHRoaXMpOwotCi0gICAgcmV0dXJuIHBhdGgoKS5ib3VuZGluZ1JlY3Qo
KTsKLX0KLQotCi1ib29sIFJlbmRlclBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKSBjb25zdAotewotICAgIGlmIChwYXRoKCku
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocmVxdWlyZXNTdHJv
a2UgJiYgIUtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhp
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENHTXV0YWJsZVBhdGhSZWYgY2dQYXRo
ID0gcGF0aCgpLnBsYXRmb3JtUGF0aCgpOwotICAgIAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gc2NyYXRjaENvbnRleHQoKTsKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwot
ICAgIAotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBDR0NvbnRleHRBZGRQ
YXRoKGNvbnRleHQsIGNnUGF0aCk7Ci0gICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250
ZXh0LCBzdHlsZSgpLCB0aGlzKTsKLSAgICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRo
Q29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7Ci0gICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKLSAgICAKLSAgICByZXR1cm4gaGl0U3VjY2VzczsK
LX0KLQotfQotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouY3BwCShy
ZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJp
bmdEZXZpY2VRdWFydHouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzMCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogICAgICAgICAgICAgICAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlNWR0ZFQmxlbmQuaCIKLSNpbmNsdWRlICJTVkdGRUNvbG9yTWF0cml4Lmgi
Ci0jaW5jbHVkZSAiU1ZHRkVDb21wb25lbnRUcmFuc2Zlci5oIgotI2luY2x1ZGUgIlNWR0ZFQ29t
cG9zaXRlLmgiCi0jaW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCIKLSNpbmNsdWRlICJT
VkdGRURpc3BsYWNlbWVudE1hcC5oIgotI2luY2x1ZGUgIlNWR0ZFRmxvb2QuaCIKLSNpbmNsdWRl
ICJTVkdGRUdhdXNzaWFuQmx1ci5oIgotI2luY2x1ZGUgIlNWR0ZFSW1hZ2UuaCIKLSNpbmNsdWRl
ICJTVkdGRU1lcmdlLmgiCi0jaW5jbHVkZSAiU1ZHRkVPZmZzZXQuaCIKLSNpbmNsdWRlICJTVkdG
RVNwZWN1bGFyTGlnaHRpbmcuaCIKLSNpbmNsdWRlICJTVkdGRVRpbGUuaCIKLSNpbmNsdWRlICJT
VkdSZXNvdXJjZUNsaXBwZXIuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5oIgotI2lu
Y2x1ZGUgIlNWR1Jlc291cmNlSW1hZ2UuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZU1hcmtlci5o
IgotI2luY2x1ZGUgIlNWR1Jlc291cmNlTWFza2VyLmgiCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2
ZXJTb2xpZC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKLSNp
bmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCi0jaW5jbHVkZSAiU1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlF1YXJ0
elN1cHBvcnQuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OktSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXVhcnR6KENHQ29udGV4dFJlZiBjb250ZXh0KQotICAgIDogbV9jZ0NvbnRleHQoQ0dDb250
ZXh0UmV0YWluKGNvbnRleHQpKQotewotICAgIEFTU0VSVChtX2NnQ29udGV4dCk7Ci19Ci0KLUtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojp+S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFy
dHooKQotewotICAgIENHQ29udGV4dFJlbGVhc2UobV9jZ0NvbnRleHQpOwotfQotCi1BZmZpbmVU
cmFuc2Zvcm0gS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OmNvbmNhdENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHdvcmxkTWF0cml4KQotewotICAgIEFmZmluZVRyYW5zZm9ybSByZXQg
PSBjdG0oKTsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSB3TWF0cml4ID0gd29ybGRNYXRyaXg7Ci0g
ICAgQ0dDb250ZXh0Q29uY2F0Q1RNKG1fY2dDb250ZXh0LCB3TWF0cml4KTsKLSAgICByZXR1cm4g
cmV0OwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6
OmN0bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENHQ29udGV4dEdldENUTShtX2NnQ29udGV4dCk7
Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OmNsZWFyUGF0aCgpCi17
Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKG1fY2dDb250ZXh0KTsKLX0KLQotdm9pZCBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAg
IENHQ29udGV4dEFkZFBhdGgobV9jZ0NvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwotfQot
Ci1HcmFwaGljc0NvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjpjcmVhdGVH
cmFwaGljc0NvbnRleHQoKQotewotICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0KG1fY2dD
b250ZXh0KTsKLX0KLQotc3RhdGljIGJvb2wgX191c2VGaWx0ZXJzID0gdHJ1ZTsKLQotYm9vbCBL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpmaWx0ZXJzRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIF9f
dXNlRmlsdGVyczsKLX0KLQotdm9pZCBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpzZXRGaWx0ZXJz
RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgX191c2VGaWx0ZXJzID0gZW5hYmxlZDsKLX0K
LQotc3RhdGljIGJvb2wgX191c2VIYXJkd2FyZVJlbmRlcmluZyA9IHRydWU7Ci0KLWJvb2wgS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ejo6aGFyZHdhcmVSZW5kZXJpbmdFbmFibGVkKCkKLXsKLSAgICBy
ZXR1cm4gX191c2VIYXJkd2FyZVJlbmRlcmluZzsKLX0KLQotdm9pZCBLUmVuZGVyaW5nRGV2aWNl
UXVhcnR6OjpzZXRIYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAg
IF9fdXNlSGFyZHdhcmVSZW5kZXJpbmcgPSBlbmFibGVkOwotfQotCi0jcHJhZ21hIG1hcmsgLQot
I3ByYWdtYSBtYXJrIENvbnRleHQgTWFuYWdlbWVudAotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4
dFF1YXJ0eiogS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6cXVhcnR6Q29udGV4dCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Kj4o
Y3VycmVudENvbnRleHQoKSk7Ci19Ci0KLUNHQ29udGV4dFJlZiBLUmVuZGVyaW5nRGV2aWNlUXVh
cnR6OjpjdXJyZW50Q0dDb250ZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocXVhcnR6Q29udGV4
dCgpKTsKLSAgICByZXR1cm4gcXVhcnR6Q29udGV4dCgpLT5jZ0NvbnRleHQoKTsKLX0KLQotS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmNvbnRleHRGb3JJ
bWFnZShTVkdSZXNvdXJjZUltYWdlICppbWFnZSkgY29uc3QKLXsKLSAgICBDR0xheWVyUmVmIGNn
TGF5ZXIgPSBpbWFnZS0+Y2dMYXllcigpOwotICAgIGlmICghY2dMYXllcikgewotICAgICAgICAv
LyBGSVhNRTogd2UgbWlnaHQgbm90IGdldCBiYWNrIGEgbGF5ZXIgaWYgdGhpcyBpcyBhIGxvYWRl
ZCBpbWFnZQotICAgICAgICAvLyBtYXliZSB0aGlzIGxvZ2ljIHNob3VsZCBnbyBpbnRvIFNWR1Jl
c291cmNlSW1hZ2U/Ci0gICAgICAgIGNnTGF5ZXIgPSBDR0xheWVyQ3JlYXRlV2l0aENvbnRleHQo
Y3VycmVudENHQ29udGV4dCgpLCBDR1NpemUoaW1hZ2UtPnNpemUoKSArIEludFNpemUoMSwxKSks
IE5VTEwpOyAgLy8gRklYTUUgKyAxIGlzIGEgaGFjawotICAgICAgICAvLyBGSVhNRTogd2Ugc2hv
dWxkIGNvbXBvc2l0ZSB0aGUgb3JpZ2luYWwgaW1hZ2Ugb250byB0aGUgbGF5ZXIuLi4KLSAgICAg
ICAgaW1hZ2UtPnNldENHTGF5ZXIoY2dMYXllcik7Ci0gICAgICAgIENHTGF5ZXJSZWxlYXNlKGNn
TGF5ZXIpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVh
cnR6KENHTGF5ZXJHZXRDb250ZXh0KGNnTGF5ZXIpKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0KLSNw
cmFnbWEgbWFyayBSZXNvdXJjZSBDcmVhdGlvbgotCi1QYXNzUmVmUHRyPFNWR1BhaW50U2VydmVy
PiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjcmVhdGVQYWludFNlcnZlcihjb25zdCBTVkdQYWlu
dFNlcnZlclR5cGUmIHR5cGUpIGNvbnN0Ci17Ci0gICAgU1ZHUGFpbnRTZXJ2ZXIqIG5ld1NlcnZl
ciA9IE5VTEw7Ci0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNvbGlkUGFpbnRTZXJ2ZXI6
Ci0gICAgICAgIG5ld1NlcnZlciA9IG5ldyBTVkdQYWludFNlcnZlclNvbGlkKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgUGF0dGVyblBhaW50U2VydmVyOgotICAgICAgICBuZXdTZXJ2ZXIg
PSBuZXcgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TGluZWFyR3JhZGllbnRQYWludFNlcnZlcjoKLSAgICAgICAgbmV3U2VydmVyID0gbmV3IFNWR1Bh
aW50U2VydmVyTGluZWFyR3JhZGllbnQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSYWRp
YWxHcmFkaWVudFBhaW50U2VydmVyOgotICAgICAgICBuZXdTZXJ2ZXIgPSBuZXcgU1ZHUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJu
IG5ld1NlcnZlcjsKLX0KLQotUGFzc1JlZlB0cjxTVkdSZXNvdXJjZT4gS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0ejo6Y3JlYXRlUmVzb3VyY2UoY29uc3QgU1ZHUmVzb3VyY2VUeXBlJiB0eXBlKSBjb25z
dAotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ2xpcHBlclJlc291cmNlVHlwZToK
LSAgICAgICAgcmV0dXJuIG5ldyBTVkdSZXNvdXJjZUNsaXBwZXIoKTsKLSAgICBjYXNlIE1hcmtl
clJlc291cmNlVHlwZToKLSAgICAgICAgcmV0dXJuIG5ldyBTVkdSZXNvdXJjZU1hcmtlcigpOwot
ICAgIGNhc2UgSW1hZ2VSZXNvdXJjZVR5cGU6Ci0gICAgICAgIHJldHVybiBuZXcgU1ZHUmVzb3Vy
Y2VJbWFnZSgpOwotICAgIGNhc2UgRmlsdGVyUmVzb3VyY2VUeXBlOgotICAgICAgICByZXR1cm4g
bmV3IFNWR1Jlc291cmNlRmlsdGVyKCk7Ci0gICAgY2FzZSBNYXNrZXJSZXNvdXJjZVR5cGU6Ci0g
ICAgICAgIHJldHVybiBuZXcgU1ZHUmVzb3VyY2VNYXNrZXIoKTsKLSAgICB9Ci0gICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIHJlc291cmNlIG9mIHR5cGU6ICVpIiwgdHlwZSk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLVNWR0ZpbHRlckVmZmVjdCogS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6
Y3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckVmZmVjdFR5cGUmIHR5cGUpIGNvbnN0
Ci17Ci0gICAgc3dpdGNoKHR5cGUpCi0gICAgewotICAgIC8qIExpZ2h0IHNvdXJjZXMgYXJlIGNv
bnRhaW5lZCBieSB0aGUgZGlmZnVzZS9zcGVjdWxhciBsaWdodCBibG9ja3MgCi0gICAgY2FzZSBG
RV9ESVNUQU5UX0xJR0hUOiAKLSAgICBjYXNlIEZFX1BPSU5UX0xJR0hUOiAKLSAgICBjYXNlIEZF
X1NQT1RfTElHSFQ6IAotICAgICovCi0gICAgY2FzZSBGRV9CTEVORDogcmV0dXJuIG5ldyBTVkdG
RUJsZW5kKCk7Ci0gICAgY2FzZSBGRV9DT0xPUl9NQVRSSVg6IHJldHVybiBuZXcgU1ZHRkVDb2xv
ck1hdHJpeCgpOwotICAgIGNhc2UgRkVfQ09NUE9ORU5UX1RSQU5TRkVSOiByZXR1cm4gbmV3IFNW
R0ZFQ29tcG9uZW50VHJhbnNmZXIoKTsKLSAgICBjYXNlIEZFX0NPTVBPU0lURTogcmV0dXJuIG5l
dyBTVkdGRUNvbXBvc2l0ZSgpOwotLy8gIGNhc2UgRkVfQ09OVk9MVkVfTUFUUklYOiAKLSAgICBj
YXNlIEZFX0RJRkZVU0VfTElHSFRJTkc6IHJldHVybiBuZXcgU1ZHRkVEaWZmdXNlTGlnaHRpbmco
KTsKLSAgICBjYXNlIEZFX0RJU1BMQUNFTUVOVF9NQVA6IHJldHVybiBuZXcgU1ZHRkVEaXNwbGFj
ZW1lbnRNYXAoKTsKLSAgICBjYXNlIEZFX0ZMT09EOiByZXR1cm4gbmV3IFNWR0ZFRmxvb2QoKTsK
LSAgICBjYXNlIEZFX0dBVVNTSUFOX0JMVVI6IHJldHVybiBuZXcgU1ZHRkVHYXVzc2lhbkJsdXIo
KTsKLSAgICBjYXNlIEZFX0lNQUdFOiByZXR1cm4gbmV3IFNWR0ZFSW1hZ2UoKTsKLSAgICBjYXNl
IEZFX01FUkdFOiByZXR1cm4gbmV3IFNWR0ZFTWVyZ2UoKTsKLS8vICBjYXNlIEZFX01PUlBIT0xP
R1k6IAotICAgIGNhc2UgRkVfT0ZGU0VUOiByZXR1cm4gbmV3IFNWR0ZFT2Zmc2V0KCk7Ci0gICAg
Y2FzZSBGRV9TUEVDVUxBUl9MSUdIVElORzogcmV0dXJuIG5ldyBTVkdGRVNwZWN1bGFyTGlnaHRp
bmcoKTsKLSAgICBjYXNlIEZFX1RJTEU6IHJldHVybiBuZXcgU1ZHRkVUaWxlKCk7Ci0vLyAgY2Fz
ZSBGRV9UVVJCVUxFTkNFOiAKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2UqIHJlbmRlcmluZ0RldmljZSgpCi17Ci0gICAgc3RhdGlj
IEtSZW5kZXJpbmdEZXZpY2UqIHNoYXJlZFJlbmRlcmluZ0RldmljZSA9IG5ldyBLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6KCk7Ci0gICAgcmV0dXJuIHNoYXJlZFJlbmRlcmluZ0RldmljZTsKLX0KLQot
fQotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tj
YW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgJKHJldmlzaW9uIDE3
OTM4KQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1
YXJ0ei5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAg
ICAgICAgICAgICAgIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotCi0jaWZu
ZGVmIEtSZW5kZXJpbmdEZXZpY2VRdWFydHpfSAotI2RlZmluZSBLUmVuZGVyaW5nRGV2aWNlUXVh
cnR6X0gKLSNpZmRlZiBTVkdfU1VQUE9SVAotCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5o
IgotCi10eXBlZGVmIHN0cnVjdCBDR1JlY3QgQ0dSZWN0OwotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250
ZXh0ICpDR0NvbnRleHRSZWY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS1JlbmRl
cmluZ0RldmljZUNvbnRleHRRdWFydHogOiBwdWJsaWMgS1JlbmRlcmluZ0RldmljZUNvbnRleHQg
ewotcHVibGljOgotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KENHQ29udGV4dFJl
Zik7Ci0gICAgdmlydHVhbCB+S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooKTsKLSAgICAK
LSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gY3RtKCkgY29uc3Q7Ci0gICAgCi0g
ICAgdmlydHVhbCB2b2lkIGNsZWFyUGF0aCgpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRQYXRoKGNv
bnN0IFBhdGgmKTsKLQotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBjcmVhdGVHcmFwaGlj
c0NvbnRleHQoKTsKLSAgICAKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jZ0NvbnRleHQ7IH07Ci0gICAgCi1wcml2YXRlOgotICAgIENHQ29udGV4dFJlZiBt
X2NnQ29udGV4dDsKLX07Ci0KLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2VRdWFydHogOiBwdWJsaWMg
S1JlbmRlcmluZ0RldmljZSB7Ci1wdWJsaWM6Ci0gICAgS1JlbmRlcmluZ0RldmljZVF1YXJ0eigp
IHsgfQotICAgIHZpcnR1YWwgfktSZW5kZXJpbmdEZXZpY2VRdWFydHooKSB7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBpc0J1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIC8v
IGNvbnRleHQgbWFuYWdlbWVudC4KLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiog
cXVhcnR6Q29udGV4dCgpIGNvbnN0OwotICAgIENHQ29udGV4dFJlZiBjdXJyZW50Q0dDb250ZXh0
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dEZv
ckltYWdlKFNWR1Jlc291cmNlSW1hZ2UqKSBjb25zdDsKLQotICAgIC8vIFJlc291cmNlIGNyZWF0
aW9uCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNWR1Jlc291cmNlPiBjcmVhdGVSZXNvdXJjZShj
b25zdCBTVkdSZXNvdXJjZVR5cGUmKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U1ZH
UGFpbnRTZXJ2ZXI+IGNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IFNWR1BhaW50U2VydmVyVHlwZSYp
IGNvbnN0OwotICAgIHZpcnR1YWwgU1ZHRmlsdGVyRWZmZWN0ICpjcmVhdGVGaWx0ZXJFZmZlY3Qo
Y29uc3QgU1ZHRmlsdGVyRWZmZWN0VHlwZSYpIGNvbnN0OwotICAgIAotICAgIC8vIGZpbHRlcnMg
KG1vc3RseSBkZWJ1Z2dpbmcpCi0gICAgc3RhdGljIGJvb2wgZmlsdGVyc0VuYWJsZWQoKTsKLSAg
ICBzdGF0aWMgdm9pZCBzZXRGaWx0ZXJzRW5hYmxlZChib29sKTsKLSAgICBzdGF0aWMgYm9vbCBo
YXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRIYXJkd2FyZVJl
bmRlcmluZ0VuYWJsZWQoYm9vbCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBTVkdfU1VQUE9SVAotI2VuZGlmIC8vIEtSZW5kZXJpbmdEZXZpY2VRdWFydHpfSApJ
bmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5j
cHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovUXVh
cnR6U3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAgICAgICAgICAgICAgIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlIDxB
cHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNpbmNsdWRlICJRdWFy
dHpTdXBwb3J0LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJL
Q2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1
ZGUgInd0Zi9Bc3NlcnRpb25zLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1DRlN0cmluZ1JlZiBDRlN0cmluZ0Zyb21DR0FmZmluZVRyYW5z
Zm9ybShDR0FmZmluZVRyYW5zZm9ybSB0KQotewotICAgIHJldHVybiBDRlN0cmluZ0NyZWF0ZVdp
dGhGb3JtYXQoMCwgMCwgQ0ZTVFIoImE6ICVmIGI6ICVmIGM6ICVmIGQ6ICVmIHR4OiAlZiB0eTog
JWYiKSwgdC5hLCB0LmIsIHQuYywgdC5kLCB0LnR4LCB0LnR5KTsKLX0KLQotQ0dBZmZpbmVUcmFu
c2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2VlblJlY3RzKENHUmVjdCBzb3VyY2Us
IENHUmVjdCBkZXN0KQotewotICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZm
aW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKGRlc3Qub3JpZ2luLnggLSBzb3VyY2Uub3JpZ2lu
LngsIGRlc3Qub3JpZ2luLnkgLSBzb3VyY2Uub3JpZ2luLnkpOwotICAgIHRyYW5zZm9ybSA9IENH
QWZmaW5lVHJhbnNmb3JtU2NhbGUodHJhbnNmb3JtLCBkZXN0LnNpemUud2lkdGgvc291cmNlLnNp
emUud2lkdGgsIGRlc3Quc2l6ZS5oZWlnaHQvc291cmNlLnNpemUuaGVpZ2h0KTsKLSAgICByZXR1
cm4gdHJhbnNmb3JtOwotfQotCi12b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QpCi17Ci0gICAgLyogU2hvdWxkbid0IGFsbCB0aGVzZSBiZSBpbiB0aGUgc3Ryb2tlIHBh
aW50ZXI/ICovCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIEtTVkdQYWludGVy
RmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+
c3Ryb2tlV2lkdGgoKSwgMS4wKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQs
IENHTGluZUNhcEZyb21LQyhzdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSkpOwotICAgIENH
Q29udGV4dFNldExpbmVKb2luKGNvbnRleHQsIENHTGluZUpvaW5Gcm9tS0Moc3R5bGUtPnN2Z1N0
eWxlKCktPmpvaW5TdHlsZSgpKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KGNvbnRl
eHQsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VNaXRlckxpbWl0KCkpOwotCi0gICAgY29uc3Qg
S0NEYXNoQXJyYXkmIGRhc2hlcyA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZGFzaEFycmF5RnJvbVJl
bmRlcmluZ1N0eWxlKHN0eWxlKTsKLSAgICBkb3VibGUgZGFzaE9mZnNldCA9IEtTVkdQYWludGVy
RmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+
c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwotCi0gICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29u
dGV4dCwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Ci19Ci0KLUNH
Q29udGV4dFJlZiBzY3JhdGNoQ29udGV4dCgpCi17Ci0gICAgc3RhdGljIENHQ29udGV4dFJlZiBz
Y3JhdGNoID0gMDsKLSAgICBpZiAoIXNjcmF0Y2gpIHsKLSAgICAgICAgQ0ZNdXRhYmxlRGF0YVJl
ZiBlbXB0eSA9IENGRGF0YUNyZWF0ZU11dGFibGUoTlVMTCwgMCk7Ci0gICAgICAgIENHRGF0YUNv
bnN1bWVyUmVmIGNvbnN1bWVyID0gQ0dEYXRhQ29uc3VtZXJDcmVhdGVXaXRoQ0ZEYXRhKGVtcHR5
KTsKLSAgICAgICAgc2NyYXRjaCA9IENHUERGQ29udGV4dENyZWF0ZShjb25zdW1lciwgTlVMTCwg
TlVMTCk7Ci0gICAgICAgIENHRGF0YUNvbnN1bWVyUmVsZWFzZShjb25zdW1lcik7Ci0gICAgICAg
IENGUmVsZWFzZShlbXB0eSk7Ci0KLSAgICAgICAgQ0dGbG9hdCBibGFja1s0XSA9IHswLCAwLCAw
LCAxfTsKLSAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKHNjcmF0Y2gsIGJsYWNrKTsKLSAg
ICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3Ioc2NyYXRjaCwgYmxhY2spOwotICAgICB9Ci0g
ICAgcmV0dXJuIHNjcmF0Y2g7Ci19Ci0KLUZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveChjb25z
dCBQYXRoJiBwYXRoLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0KQotIHsKLSAgICAvLyB0aGUgYmJveCBtaWdodCBncm93IGlmIHRoZSBwYXRoIGlzIHN0cm9r
ZWQuCi0gICAgLy8gYW5kIENHUGF0aEdldEJvdW5kaW5nQm94IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0
LCBzbyB3ZSdsbCBoYXZlCi0gICAgLy8gdG8gbWFrZSBhbiBhbHRlcm5hdGl2ZSBjYWxsLi4uCi0g
Ci0gICAgLy8gRklYTUU6IHNpbmNlIHRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gZGVjaWRlIHdoYXQg
dG8gcmVwYWludCwKLSAgICAvLyBwZXJoYXBzIGl0IHdvdWxkIGJlIHN1ZmZpY2llbiB0byBqdXN0
IG91dHNldCB0aGUgZmlsbCBiYm94IGJ5Ci0gICAgLy8gdGhlIHN0cm9rZSB3aWR0aCAtIHRoYXQg
c2hvdWxkIGJlIHdheSBjaGVhcGVyIGFuZCBzaW1wbGVyIHRoYW4KLSAgICAvLyB3aGF0IHdlIGRv
IGhlcmUuCi0gCi0gICAgQ0dQYXRoUmVmIGNnUGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7Ci0K
LSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHNjcmF0Y2hDb250ZXh0KCk7Ci0gICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLQotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0
KTsKLSAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIGNnUGF0aCk7Ci0gICAgYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKLSAgICBDR0NvbnRleHRS
ZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKLSAgICBDR1JlY3QgYm94ID0gQ0dD
b250ZXh0R2V0UGF0aEJvdW5kaW5nQm94KGNvbnRleHQpOwotICAgICAgICAKLSAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChib3gpOwot
fQotCi19Ci0KLSNlbmRpZiAvLyBTVkdfU1VQUE9SVAotCkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oCShyZXZpc2lvbiAxNzkzOCkKKysrIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFF1YXJ0elN1
cHBvcnRfSAotI2RlZmluZSBRdWFydHpTdXBwb3J0X0gKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0K
LSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRl
ZiBzdHJ1Y3QgQ0dQYXRoICpDR011dGFibGVQYXRoUmVmOwotCi1jbGFzcyBQYXRoOwotY2xhc3Mg
RmxvYXRSZWN0OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci0KLUNG
U3RyaW5nUmVmIENGU3RyaW5nRnJvbUNHUGF0aChDR1BhdGhSZWYpOwotQ0ZTdHJpbmdSZWYgQ0ZT
dHJpbmdGcm9tQ0dBZmZpbmVUcmFuc2Zvcm0oQ0dBZmZpbmVUcmFuc2Zvcm0pOwotQ0dBZmZpbmVU
cmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2VlblJlY3RzKENHUmVjdCBzb3Vy
Y2UsIENHUmVjdCBkZXN0KTsKLQotdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENHQ29u
dGV4dFJlZiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLQotQ0dDb250ZXh0
UmVmIHNjcmF0Y2hDb250ZXh0KCk7Ci1GbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goY29uc3Qg
UGF0aCYgcGF0aCwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLQotc3RhdGlj
IGlubGluZSBDR0xpbmVDYXAgQ0dMaW5lQ2FwRnJvbUtDKExpbmVDYXAgY2FwKQotewotICAgIGlm
IChjYXAgPT0gQnV0dENhcCkKLSAgICAgICAgcmV0dXJuIGtDR0xpbmVDYXBCdXR0OwotICAgIGVs
c2UgaWYgKGNhcCA9PSBSb3VuZENhcCkKLSAgICAgICAgcmV0dXJuIGtDR0xpbmVDYXBSb3VuZDsK
LSAgICBlbHNlIGlmIChjYXAgPT0gU3F1YXJlQ2FwKQotICAgICAgICByZXR1cm4ga0NHTGluZUNh
cFNxdWFyZTsKLSAgICAKLSAgICByZXR1cm4ga0NHTGluZUNhcEJ1dHQ7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgQ0dMaW5lSm9pbiBDR0xpbmVKb2luRnJvbUtDKExpbmVKb2luIGpvaW4pCi17Ci0gICAg
aWYgKGpvaW4gPT0gTWl0ZXJKb2luKQotICAgICAgICByZXR1cm4ga0NHTGluZUpvaW5NaXRlcjsK
LSAgICBlbHNlIGlmIChqb2luID09IFJvdW5kSm9pbikKLSAgICAgICAgcmV0dXJuIGtDR0xpbmVK
b2luUm91bmQ7Ci0gICAgZWxzZSBpZiAoam9pbiA9PSBCZXZlbEpvaW4pCi0gICAgICAgIHJldHVy
biBrQ0dMaW5lSm9pbkJldmVsOwotICAgIAotICAgIHJldHVybiBrQ0dMaW5lSm9pbk1pdGVyOwot
fQotCi19Ci0KLSNlbmRpZiAvLyBTVkdfU1VQUE9SVAotI2VuZGlmIC8vICFRdWFydHpTdXBwb3J0
X0gKSW5kZXg6IFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3Bw
CShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5n
U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJD
U1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2UuaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRpZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAt
NDQsNyArNDMsNyBAQCBzdGF0aWMgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogc2hhcmVkU29saWRQCiB7
CiAgICAgc3RhdGljIFNWR1BhaW50U2VydmVyU29saWQqIF9zaGFyZWRTb2xpZFBhaW50U2VydmVy
ID0gMDsKICAgICBpZiAoIV9zaGFyZWRTb2xpZFBhaW50U2VydmVyKQotICAgICAgICBfc2hhcmVk
U29saWRQYWludFNlcnZlciA9IHN0YXRpY19jYXN0PFNWR1BhaW50U2VydmVyU29saWQqPihyZW5k
ZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGFpbnRTZXJ2ZXIoU29saWRQYWludFNlcnZlcikucmVsZWFz
ZVJlZigpKTsKKyAgICAgICAgX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIgPSBuZXcgU1ZHUGFpbnRT
ZXJ2ZXJTb2xpZCgpOwogICAgIHJldHVybiBfc2hhcmVkU29saWRQYWludFNlcnZlcjsKIH0KIApJ
bmRleDogV2ViQ29yZS9rc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuaAkocmV2aXNp
b24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKICNpZiBQTEFURk9STShDRykKLSNpbmNsdWRlICJRdWFydHpTdXBwb3J0LmgiCisjaW5jbHVk
ZSAiQ2dTdXBwb3J0LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDYgQEAKICNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0Nv
bnRhaW5lci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDYgQEAKICNpbmNsdWRlICJTVkdDbGlwUGF0aEVsZW1lbnQuaCIKIAogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdNYXRyaXgu
aCIKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRl
ICJTVkdGRUJsZW5kRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgog
I2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFNWR0ZFQmxlbmRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiBTVkdGRUJsZW5kKiBTVkdGRUJsZW5kRWxlbWVudDo6
ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAg
ICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFQmxlbmQqPihyZW5kZXJpbmdEZXZp
Y2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0JMRU5EKSk7CisgICAgICAgIG1fZmlsdGVyRWZm
ZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVCbGVuZCo+KFNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVG
aWx0ZXJFZmZlY3QoRkVfQkxFTkQpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAg
ICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmxlbmRNb2RlKChTVkdCbGVuZE1v
ZGVUeXBlKSBtb2RlKCkpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEzICsyMSwx
NCBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNp
bmNsdWRlICJTVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmlu
Z0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzIsNyArNzMsNyBAQCB2b2lkIFNWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlCiBTVkdGRUNvbG9yTWF0cml4KiBTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmls
dGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFQ29s
b3JNYXRyaXgqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0NPTE9S
X01BVFJJWCkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFQ29s
b3JNYXRyaXgqPihTVkdSZXNvdXJjZUZpbHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0NPTE9S
X01BVFJJWCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAKQEAgLTkzLDYgKzk0LDYgQEAgU1ZHRkVDb2xvck1hdHJpeCogU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbgogCiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9S
VAogCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsMjMgKzIxLDIzIEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCiAKLSNpbmNsdWRlICJLUmVuZGVy
aW5nRGV2aWNlLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR0ZFRnVuY1JFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVGdW5jR0VsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdGRUZ1bmNCRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZFRnVuY0FFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6U1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKICAgICAsIG1f
ZmlsdGVyRWZmZWN0KDApCiB7CkBAIC01MCw3ICs1MCw3IEBAIFNWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50Ojp+U1ZHRkVDb20KIAogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIEluMSwg
aW4xLCBTVkdOYW1lczo6aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luMSkKIAotdm9pZCBTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKQordm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikKQEAgLTU5LDEwICs1OSwxMCBAQCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50OjpwYXJzCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLVNWR0ZFQ29tcG9uZW50VHJhbnNm
ZXIgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAor
U1ZHRkVDb21wb25lbnRUcmFuc2ZlciogU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmZp
bHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAgICAgICAg
bV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRUNvbXBvbmVudFRyYW5zZmVyICo+KHJl
bmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfQ09NUE9ORU5UX1RSQU5TRkVS
KSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVDb21wb25lbnRU
cmFuc2Zlcio+KFNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfQ09NUE9O
RU5UX1RSQU5TRkVSKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgCkBAIC03MSwxMyArNzEsMTMgQEAgU1ZHRkVDb21wb25lbnRUcmFuc2ZlciAqU1ZH
RkVDb21wb25lbnRUcgogICAgIAogICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAh
PSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShT
VkdOYW1lczo6ZmVGdW5jUlRhZykpCi0gICAgICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0UmVk
RnVuY3Rpb24oc3RhdGljX2Nhc3Q8U1ZHRkVGdW5jUkVsZW1lbnQgKj4obiktPnRyYW5zZmVyRnVu
Y3Rpb24oKSk7CisgICAgICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0UmVkRnVuY3Rpb24oc3Rh
dGljX2Nhc3Q8U1ZHRkVGdW5jUkVsZW1lbnQqPihuKS0+dHJhbnNmZXJGdW5jdGlvbigpKTsKICAg
ICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVGdW5jR1RhZykpCi0gICAg
ICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0R3JlZW5GdW5jdGlvbihzdGF0aWNfY2FzdDxTVkdG
RUZ1bmNHRWxlbWVudCAqPihuKS0+dHJhbnNmZXJGdW5jdGlvbigpKTsKKyAgICAgICAgICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRHcmVlbkZ1bmN0aW9uKHN0YXRpY19jYXN0PFNWR0ZFRnVuY0dFbGVt
ZW50Kj4obiktPnRyYW5zZmVyRnVuY3Rpb24oKSk7CiAgICAgICAgIGVsc2UgaWYgKG4tPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmZlRnVuY0JUYWcpKQotICAgICAgICAgICAgbV9maWx0ZXJFZmZlY3Qt
PnNldEJsdWVGdW5jdGlvbihzdGF0aWNfY2FzdDxTVkdGRUZ1bmNCRWxlbWVudCAqPihuKS0+dHJh
bnNmZXJGdW5jdGlvbigpKTsKKyAgICAgICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCbHVlRnVu
Y3Rpb24oc3RhdGljX2Nhc3Q8U1ZHRkVGdW5jQkVsZW1lbnQqPihuKS0+dHJhbnNmZXJGdW5jdGlv
bigpKTsKICAgICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVGdW5jQVRh
ZykpCi0gICAgICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QWxwaGFGdW5jdGlvbihzdGF0aWNf
Y2FzdDxTVkdGRUZ1bmNBRWxlbWVudCAqPihuKS0+dHJhbnNmZXJGdW5jdGlvbigpKTsKKyAgICAg
ICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRBbHBoYUZ1bmN0aW9uKHN0YXRpY19jYXN0PFNWR0ZF
RnVuY0FFbGVtZW50Kj4obiktPnRyYW5zZmVyRnVuY3Rpb24oKSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG1fZmlsdGVyRWZmZWN0OwpAQCAtODUsNiArODUsNiBAQCBTVkdGRUNvbXBvbmVudFRyYW5z
ZmVyICpTVkdGRUNvbXBvbmVudFRyCiAKIH0KIAotLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8v
IFNWR19TVVBQT1JUCiAKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxNiArMjEsMTcgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19T
VVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJL
UmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzKHRhZ05hbWUsIGRvYykKICAgICAsIG1fX29wZXJhdG9yKDApCiAgICAgLCBtX2sxKDAu
MCkKQEAgLTg4LDEwICs4OSwxMCBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VN
YXBwZWRBCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLVNWR0ZFQ29tcG9zaXRlICpTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CitTVkdGRUNvbXBvc2l0ZSogU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0
ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVDb21w
b3NpdGUgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT01QT1NJ
VEUpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRUNvbXBvc2l0
ZSo+KFNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfQ09NUE9TSVRFKSk7
CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9maWx0
ZXJFZmZlY3QtPnNldE9wZXJhdGlvbigoU1ZHQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSkgX29wZXJh
dG9yKCkpOwpAQCAtMTA3LDYgKzEwOCw2IEBAIFNWR0ZFQ29tcG9zaXRlICpTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OmYKIAogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBP
UlQKIAorLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwLDIxICsyMCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWZkZWYgU1ZH
X1NVUFBPUlQKLQogI2luY2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIgogCiAj
aW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRl
ICJTVkdDb2xvci5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJT
dHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgiCisjaW5jbHVkZSAiU1ZH
UmVzb3VyY2VGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50OjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcyh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFudCgwLjApCiAgICAg
LCBtX3N1cmZhY2VTY2FsZSgwLjApCkBAIC03OSwxNiArNzgsMTkgQEAgdm9pZCBTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQ6OnBhcnNlTQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1TVkdGaWx0
ZXJFZmZlY3QgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29u
c3QKK1NWR0ZpbHRlckVmZmVjdCogU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJF
ZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIAotICAgICAgICBtX2Zp
bHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFRGlmZnVzZUxpZ2h0aW5nICo+KHJlbmRlcmlu
Z0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElGRlVTRV9MSUdIVElORykpOworICAg
ICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFRGlmZnVzZUxpZ2h0aW5nKj4o
U1ZHUmVzb3VyY2VGaWx0ZXI6OmNyZWF0ZUZpbHRlckVmZmVjdChGRV9ESUZGVVNFX0xJR0hUSU5H
KSk7CisgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4xKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyht
X2ZpbHRlckVmZmVjdCk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldERpZmZ1c2VDb25zdGFudCgo
ZGlmZnVzZUNvbnN0YW50KCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxl
KChzdXJmYWNlU2NhbGUoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0TGVu
Z3RoWCgoa2VybmVsVW5pdExlbmd0aFgoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJu
ZWxVbml0TGVuZ3RoWSgoa2VybmVsVW5pdExlbmd0aFkoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXREaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50KCkpOworICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRLZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCgpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkoKSk7CiAgICAg
bV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcigpLT5jb2xvcigp
KTsKICAgICB1cGRhdGVMaWdodHMoKTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CkBAIC05
OSwxNCArMTAxLDE3IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojp1cGRhdGUK
ICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU1ZH
TGlnaHRTb3VyY2UgKmxpZ2h0ID0gMDsKLSAgICBmb3IgKE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7
IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpmZURpc3RhbnRMaWdodFRhZyl8fG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZlUG9p
bnRMaWdodFRhZyl8fG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZlU3BvdExpZ2h0VGFnKSkgewot
ICAgICAgICAgICAgU1ZHRkVMaWdodEVsZW1lbnQgKmxpZ2h0Tm9kZSA9IHN0YXRpY19jYXN0PFNW
R0ZFTGlnaHRFbGVtZW50ICo+KG4pOyAKKyAgICBTVkdMaWdodFNvdXJjZSogbGlnaHQgPSAwOwor
ICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZlRGlzdGFudExpZ2h0VGFn
KSB8fAorICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVQb2ludExpZ2h0VGFn
KSB8fAorICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVTcG90TGlnaHRUYWcp
KSB7CisgICAgICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHROb2RlID0gc3RhdGljX2Nh
c3Q8U1ZHRkVMaWdodEVsZW1lbnQqPihuKTsgCiAgICAgICAgICAgICBsaWdodCA9IGxpZ2h0Tm9k
ZS0+bGlnaHRTb3VyY2UoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQor
CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0U291cmNlKGxpZ2h0KTsKIH0KIApAQCAtMTE0
LDMgKzExOSw0IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojp1cGRhdGUKIAog
I2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAkocmV2aXNp
b24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMSArMTksMTIgQEAKIAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1
ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtODEsMTEgKzgyLDExIEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50OjpwYXJzZU0KIFNWR0ZFRGlzcGxhY2VtZW50TWFwKiBTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRl
ckVmZmVjdCkKLSAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRURpc3Bs
YWNlbWVudE1hcCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0RJ
U1BMQUNFTUVOVF9NQVApKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxT
VkdGRURpc3BsYWNlbWVudE1hcCo+KFNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZl
Y3QoRkVfRElTUExBQ0VNRU5UX01BUCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVjdG9yKChT
VkdDaGFubmVsU2VsZWN0b3JUeXBlKSh4Q2hhbm5lbFNlbGVjdG9yKCkpKTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0WUNoYW5uZWxTZWxlY3RvcigoU1ZHQ2hhbm5lbFNlbGVjdG9yVHlwZSkoeUNo
YW5uZWxTZWxlY3RvcigpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFhDaGFubmVsU2VsZWN0
b3IoKFNWR0NoYW5uZWxTZWxlY3RvclR5cGUpIHhDaGFubmVsU2VsZWN0b3IoKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFlDaGFubmVsU2VsZWN0b3IoKFNWR0NoYW5uZWxTZWxlY3RvclR5cGUp
IHlDaGFubmVsU2VsZWN0b3IoKSk7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGluMSgpKTsK
ICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4yKGluMigpKTsKICAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0U2NhbGUoc2NhbGUoKSk7CkBAIC05NCw0ICs5NSw3IEBAIFNWR0ZFRGlzcGxhY2VtZW50TWFw
KiBTVkdGRURpc3BsYWNlbWVudE0KIH0KIAogfQorCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKwor
Ly8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpc3Rh
bnRMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDE0ICsx
OCwxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JU
CiAjaW5jbHVkZSAiU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRGlz
dGFudExpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRkVEaXN0YW50
TGlnaHRFbGVtZW50OjpTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNWR0ZFTGlnaHRFbGVtZW50KHRhZ05hbWUs
IGRvYykKK1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpIDogCisgICAgU1ZH
RkVMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zMyw3ICszNCw3IEBAIFNW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6flNWR0ZFRGlzdGFudEwKIHsKIH0KIAotU1ZHTGlnaHRT
b3VyY2UgKlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdAorU1ZH
TGlnaHRTb3VyY2UqIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25z
dAogewogICAgIHJldHVybiBuZXcgU1ZHRGlzdGFudExpZ2h0U291cmNlKGF6aW11dGgoKSwgZWxl
dmF0aW9uKCkpOwogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNw
cAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVGbG9vZEVsZW1l
bnQuaCIKIApAQCAtMjksMTEgKzMwLDExIEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZFRmxvb2RFbGVtZW50OjpTVkdGRUZsb29kRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHRkVGbG9v
ZEVsZW1lbnQ6OlNWR0ZFRmxvb2RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXModGFnTmFtZSwgZG9jKQogICAgICwgbV9maWx0ZXJFZmZlY3QoMCkKIHsKQEAgLTQ2LDcgKzQ3
LDcgQEAgU1ZHRkVGbG9vZEVsZW1lbnQ6On5TVkdGRUZsb29kRWxlbWVudCgpCiAKIEFOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRmxvb2RFbGVtZW50LCBTdHJpbmcsIFN0cmluZywg
c3RyaW5nLCBJbjEsIGluMSwgU1ZHTmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbjEpCiAK
LXZvaWQgU1ZHRkVGbG9vZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cikKK3ZvaWQgU1ZHRkVGbG9vZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCkBA
IC01NSwxNiArNTYsMTYgQEAgdm9pZCBTVkdGRUZsb29kRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1TVkdGRUZsb29kICpTVkdGRUZsb29kRWxlbWVudDo6
ZmlsdGVyRWZmZWN0KCkgY29uc3QKK1NWR0ZFRmxvb2QqIFNWR0ZFRmxvb2RFbGVtZW50OjpmaWx0
ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1f
ZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVGbG9vZCAqPihyZW5kZXJpbmdEZXZpY2Uo
KS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0ZMT09EKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0
ID0gc3RhdGljX2Nhc3Q8U1ZHRkVGbG9vZCo+KFNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfRkxPT0QpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4xKCkpOwogICAgIHNldFN0YW5k
YXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAgUmVuZGVyU3R5bGUgKmZpbHRlclN0
eWxlID0gY29uc3RfY2FzdDxTVkdGRUZsb29kRWxlbWVudCAqPih0aGlzKS0+c3R5bGVGb3JSZW5k
ZXJlcihwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
ICpzdmdTdHlsZSA9IGZpbHRlclN0eWxlLT5zdmdTdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBm
aWx0ZXJTdHlsZSA9IGNvbnN0X2Nhc3Q8U1ZHRkVGbG9vZEVsZW1lbnQgKj4odGhpcyktPnN0eWxl
Rm9yUmVuZGVyZXIocGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpKTsKKyAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSBmaWx0ZXJTdHlsZS0+c3ZnU3R5bGUoKTsKICAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0Rmxvb2RDb2xvcihzdmdTdHlsZS0+Zmxvb2RDb2xvcigpKTsKICAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0Rmxvb2RPcGFjaXR5KHN2Z1N0eWxlLT5mbG9vZE9wYWNpdHkoKSk7CiAg
ICAgZmlsdGVyU3R5bGUtPmRlcmVmKHZpZXcoKS0+cmVuZGVyQXJlbmEoKSk7CkBAIC03NCw2ICs3
NSw2IEBAIFNWR0ZFRmxvb2QgKlNWR0ZFRmxvb2RFbGVtZW50OjpmaWx0ZXJFZmYKIAogfQogCi0v
LyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAorLy8gdmltOnRzPTQ6bm9l
dApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jQUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY0FFbGVtZW50LmNwcAkocmV2aXNpb24g
MTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNBRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwog
I2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVGdW5jQUVsZW1lbnQuaCIKIApAQCAt
MzcsNiArMzgsNiBAQCBTVkdGRUZ1bmNBRWxlbWVudDo6flNWR0ZFRnVuY0FFbGVtZW50KCkKIAog
fQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAorLy8gdmltOnRz
PTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jQkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY0JFbGVtZW50LmNwcAkocmV2
aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNCRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVGdW5jQkVsZW1lbnQuaCIK
IApAQCAtMzcsNiArMzgsNiBAQCBTVkdGRUZ1bmNCRWxlbWVudDo6flNWR0ZFRnVuY0JFbGVtZW50
KCkKIAogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAorLy8g
dmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jR0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY0dFbGVtZW50LmNw
cAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNHRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEzICsyMSwxNCBAQAogKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRUZ1bmNHRWxl
bWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0ZFRnVuY0dFbGVtZW50OjpTVkdG
RUZ1bmNHRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KSA6IAotU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQor
ICAgIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKIHsK
IH0KIApAQCAtMzcsNiArMzgsNiBAQCBTVkdGRUZ1bmNHRWxlbWVudDo6flNWR0ZFRnVuY0dFbGVt
ZW50KCkKIAogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAor
Ly8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jUkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY1JFbGVtZW50
LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNSRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVGdW5jUkVs
ZW1lbnQuaCIKIApAQCAtMzcsNiArMzgsNiBAQCBTVkdGRUZ1bmNSRWxlbWVudDo6flNWR0ZFRnVu
Y1JFbGVtZW50KCkKIAogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBP
UlQKIAorLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDEyICsyMSwxMyBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NV
UFBPUlQKICNpbmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCIKIAotI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNzAsNyArNzEsNyBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dDo6cGFyc2VNYXBwCiBTVkdGRUdhdXNzaWFuQmx1ciogU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAg
ICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVHYXVzc2lhbkJsdXIqPihyZW5k
ZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0dBVVNTSUFOX0JMVVIpKTsKKyAg
ICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRUdhdXNzaWFuQmx1cio+KFNW
R1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfR0FVU1NJQU5fQkxVUikpOwog
ICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRJbihpbjEoKSk7CkBAIC04Miw2ICs4Myw2IEBAIFNWR0ZFR2F1c3NpYW5CbHVy
KiBTVkdGRUdhdXNzaWFuQmx1ckVsZW0KIAogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKIAorLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcg
QEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5j
bHVkZSAiU1ZHRkVJbWFnZUVsZW1lbnQuaCIKIApAQCAtMjksMTUgKzMwLDE1IEBACiAjaW5jbHVk
ZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdSZXNv
dXJjZUltYWdlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNW
R0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgorI2luY2x1ZGUgIlNWR1Jlc291
cmNlRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRkVJbWFnZUVsZW1lbnQ6
OlNWR0ZFSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpCitTVkdGRUltYWdlRWxlbWVudDo6U1ZHRkVJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCiAgICAgLCBTVkdVUklSZWZlcmVuY2Uo
KQogICAgICwgU1ZHTGFuZ1NwYWNlKCkKQEAgLTU3LDcgKzU4LDcgQEAgU1ZHRkVJbWFnZUVsZW1l
bnQ6On5TVkdGRUltYWdlRWxlbWVudCgpCiAKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR0ZFSW1hZ2VFbGVtZW50LCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUHJlc2VydmVBc3Bl
Y3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbywgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2Vy
dmVBc3BlY3RSYXRpbywgU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyLmxvY2FsTmFt
ZSgpLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8uZ2V0KCkpCiAKLXZvaWQgU1ZHRkVJbWFnZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZH
RkVJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0
cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKQEAgLTgw
LDE2ICs4MSwxNiBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAg
ICAgfQogfQogCi12b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRS
ZXNvdXJjZSAqZmluaXNoZWRPYmopCit2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpub3RpZnlGaW5p
c2hlZChDYWNoZWRSZXNvdXJjZSogZmluaXNoZWRPYmopCiB7CiAgICAgaWYgKGZpbmlzaGVkT2Jq
ID09IG1fY2FjaGVkSW1hZ2UgJiYgZmlsdGVyRWZmZWN0KCkpCiAgICAgICAgIGZpbHRlckVmZmVj
dCgpLT5zZXRDYWNoZWRJbWFnZShtX2NhY2hlZEltYWdlKTsKIH0KIAotU1ZHRkVJbWFnZSAqU1ZH
RkVJbWFnZUVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CitTVkdGRUltYWdlKiBTVkdGRUlt
YWdlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZm
ZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFSW1hZ2UgKj4o
cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9JTUFHRSkpOworICAgICAg
ICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFSW1hZ2UqPihTVkdSZXNvdXJjZUZp
bHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0lNQUdFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVm
ZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmls
dGVyRWZmZWN0KTsKQEAgLTk4LDYgKzk5LDYgQEAgU1ZHRkVJbWFnZSAqU1ZHRkVJbWFnZUVsZW1l
bnQ6OmZpbHRlckVmZgogCiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQ
UE9SVAogCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUxp
Z2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVMaWdo
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdG
RUxpZ2h0RWxlbWVudC5oIgogCkBAIC05MCwzICs5MSw0IEBAIHZvaWQgU1ZHRkVMaWdodEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmkKIAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKKy8vIHZpbTp0
cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMiArMjEsMTMgQEAKICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZUVsZW1lbnQu
aCIKIAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJTVkdGRU1lcmdl
Tm9kZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdSZXNv
dXJjZUZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDcgKzQ1LDcgQEAg
U1ZHRkVNZXJnZUVsZW1lbnQ6On5TVkdGRU1lcmdlRWxlbWVudCgpCiBTVkdGRU1lcmdlKiBTVkdG
RU1lcmdlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVy
RWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2Uq
PihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX01FUkdFKSk7CisgICAg
ICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVNZXJnZSo+KFNWR1Jlc291cmNl
RmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfTUVSR0UpKTsKICAgICBpZiAoIW1fZmlsdGVy
RWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9m
aWx0ZXJFZmZlY3QpOwpAQCAtNTYsMTIgKzU3LDEyIEBAIFNWR0ZFTWVyZ2UqIFNWR0ZFTWVyZ2VF
bGVtZW50OjpmaWx0ZXJFZmYKICAgICB9CiAKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TWVyZ2VJ
bnB1dHMobWVyZ2VJbnB1dHMpOwotCiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQogCiB9
CiAKLS8vIHZpbTp0cz00Om5vZXQKKwogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKKy8vIHZpbTp0
cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50
LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1lcmdlTm9k
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZFTWVy
Z2VOb2RlRWxlbWVudC5oIgogCkBAIC01MCw2ICs1MSw2IEBAIHZvaWQgU1ZHRkVNZXJnZU5vZGVF
bGVtZW50OjpwYXJzZU1hcHBlZEEKIAogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8g
U1ZHX1NVUFBPUlQKIAorLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE4ICsyMSwx
OCBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5j
bHVkZSAiQXR0ci5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2lmZGVmIFNW
R19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHRkVPZmZzZXRFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJB
dHRyLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJTVkdGRU9mZnNldEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJj
ZUZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZFT2Zmc2V0RWxlbWVudDo6
U1ZHRkVPZmZzZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpCitTVkdGRU9mZnNldEVsZW1lbnQ6OlNWR0ZFT2Zmc2V0RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKICAgICAsIG1fZHgoMC4wKQogICAg
ICwgbV9keSgwLjApCkBAIC00OSw3ICs0OSw3IEBAIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0ZFT2Zmc2UKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFT2Zmc2V0
RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgRHgsIGR4LCBTVkdOYW1lczo6ZHhBdHRy
LmxvY2FsTmFtZSgpLCBtX2R4KQogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVP
ZmZzZXRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBEeSwgZHksIFNWR05hbWVzOjpk
eUF0dHIubG9jYWxOYW1lKCksIG1fZHkpCiAKLXZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0ZFT2Zmc2V0
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewog
ICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmR4QXR0cikKQEAgLTYyLDEwICs2MiwxMCBAQCB2b2lkIFNWR0ZF
T2Zmc2V0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLVNW
R0ZFT2Zmc2V0ICpTVkdGRU9mZnNldEVsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CitTVkdG
RU9mZnNldCogU1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewogICAg
IGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nh
c3Q8U1ZHRkVPZmZzZXQgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChG
RV9PRkZTRVQpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRU9m
ZnNldCo+KFNWR1Jlc291cmNlRmlsdGVyOjpjcmVhdGVGaWx0ZXJFZmZlY3QoRkVfT0ZGU0VUKSk7
CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9maWx0
ZXJFZmZlY3QtPnNldEluKGluMSgpKTsKQEAgLTc3LDYgKzc3LDYgQEAgU1ZHRkVPZmZzZXQgKlNW
R0ZFT2Zmc2V0RWxlbWVudDo6ZmlsdGVyRQogCiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRp
ZiAvLyBTVkdfU1VQUE9SVAogCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVm
IFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR1BvaW50TGlnaHRTb3VyY2UuaCIKQEAgLTMzLDEyICszNCwxNCBAQCBTVkdGRVBvaW50
TGlnaHRFbGVtZW50Ojp+U1ZHRkVQb2ludExpZ2h0CiB7CiB9CiAKLVNWR0xpZ2h0U291cmNlICpT
VkdGRVBvaW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CitTVkdMaWdodFNvdXJj
ZSogU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdAogewogICAgIEZs
b2F0UG9pbnQzRCBwb3MoeCgpLCB5KCksIHooKSk7CiAgICAgcmV0dXJuIG5ldyBTVkdQb2ludExp
Z2h0U291cmNlKHBvcyk7CiB9CiAKIH0KKwogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKKy8vIHZp
bTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCwxNCArMjAsMTUgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19T
VVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIgogCi0jaW5j
bHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0NvbG9yLmgiCiAjaW5jbHVk
ZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdGRUxp
Z2h0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMzYsNyArMzcsNyBAQCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50OjpTVkdGRVNwZWN1CiAgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoMC4wKQogICAgICwgbV9z
cGVjdWxhckV4cG9uZW50KDAuMCkKICAgICAsIG1fc3VyZmFjZVNjYWxlKDAuMCkKLSAgICAsIG1f
bGlnaHRpbmdDb2xvcihuZXcgU1ZHQ29sb3IoKSkKKyAgICAsIG1fbGlnaHRpbmdDb2xvcihuZXcg
U1ZHQ29sb3IpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKDAuMCkKICAgICAsIG1fa2VybmVs
VW5pdExlbmd0aFkoMC4wKQogICAgICwgbV9maWx0ZXJFZmZlY3QoMCkKQEAgLTgzLDcgKzg0LDkg
QEAgdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpwYXJzZQogU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBj
b25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIAotICAgICAgICBtX2ZpbHRlckVmZmVj
dCA9IHN0YXRpY19jYXN0PFNWR0ZFU3BlY3VsYXJMaWdodGluZyo+KHJlbmRlcmluZ0RldmljZSgp
LT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfU1BFQ1VMQVJfTElHSFRJTkcpKTsKKyAgICAgICAgbV9m
aWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRVNwZWN1bGFyTGlnaHRpbmcqPihTVkdSZXNv
dXJjZUZpbHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1NQRUNVTEFSX0xJR0hUSU5HKSk7CisJ
aWYgKCFtX2ZpbHRlckVmZmVjdCkKKwkJcmV0dXJuIDA7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dEluKGluMSgpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwog
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTcGVjdWxhckNvbnN0YW50KChzcGVjdWxhckNvbnN0YW50
KCkpKTsKQEAgLTEwMyw3ICsxMDYsOSBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OnVwZGF0CiAKICAgICBTVkdMaWdodFNvdXJjZSogbGlnaHQgPSAwOyAgICAKICAgICBmb3Ig
KE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZURpc3RhbnRMaWdodFRhZyl8fG4tPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmZlUG9pbnRMaWdodFRhZyl8fG4tPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmZlU3BvdExpZ2h0VGFnKSkgeworICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShTVkdOYW1l
czo6ZmVEaXN0YW50TGlnaHRUYWcpIHx8IAorCQkJbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVQ
b2ludExpZ2h0VGFnKSB8fAorCQkJbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVTcG90TGlnaHRU
YWcpKSB7CiAgICAgICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHROb2RlID0gc3RhdGlj
X2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnQqPihuKTsgCiAgICAgICAgICAgICBsaWdodCA9IGxpZ2h0
Tm9kZS0+bGlnaHRTb3VyY2UoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE2LDMgKzEyMSw0
IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6dXBkYXQKIAogI2VuZGlmIC8v
IFNWR19TVVBQT1JUCiAKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OCwxNCArMTgsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpZmRlZiBTVkdf
U1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R1Nwb3RMaWdodFNvdXJjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZFU3BvdExp
Z2h0RWxlbWVudDo6U1ZHRkVTcG90TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1TVkdGRUxpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2Mp
CitTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OlNWR0ZFU3BvdExpZ2h0RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogU1ZHRkVMaWdodEVsZW1l
bnQodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zMywxMCArMzQsMTEgQEAgU1ZHRkVTcG90TGln
aHRFbGVtZW50Ojp+U1ZHRkVTcG90TGlnaHRFbAogewogfQogCi1TVkdMaWdodFNvdXJjZSAqU1ZH
RkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CitTVkdMaWdodFNvdXJjZSog
U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7CiAgICAgRmxvYXRQ
b2ludDNEIHBvcyh4KCksIHkoKSwgeigpKTsKLSAgICAvL2NvbnZlcnQgbG9va0F0IHRvIGEgZGly
ZWN0aW9uCisKKwkvLyBjb252ZXJ0IGxvb2tBdCB0byBhIGRpcmVjdGlvbgogICAgIEZsb2F0UG9p
bnQzRCBkaXJlY3Rpb24ocG9pbnRzQXRYKCkgLSBwb3MueCgpLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9pbnRzQXRZKCkgLSBwb3MueSgpLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9pbnRzQXRaKCkgLSBwb3MueigpKTsKQEAgLTQ1LDUgKzQ3LDcgQEAgU1ZHTGln
aHRTb3VyY2UgKlNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bAogfQogCiB9CisKICNlbmRpZiAvLyBT
VkdfU1VQUE9SVAogCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdGRVRpbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdG
RVRpbGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdGRVRpbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTcgKzIzLDE2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZmRlZiBTVkdfU1VQUE9SVAotCiAjaW5jbHVkZSAiU1ZH
RkVUaWxlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2UuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJT
dHlsZS5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU1ZHRkVUaWxlRWxlbWVudDo6U1ZHRkVUaWxlRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHRkVUaWxlRWxlbWVudDo6U1ZHRkVU
aWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQog
ICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykK
ICAgICAsIG1fZmlsdGVyRWZmZWN0KDApCiB7CkBAIC00Niw3ICs0NSw3IEBAIFNWR0ZFVGlsZUVs
ZW1lbnQ6On5TVkdGRVRpbGVFbGVtZW50KCkKIAogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHRkVUaWxlRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4xLCBpbjEsIFNW
R05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4xKQogCi12b2lkIFNWR0ZFVGlsZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZH
RkVUaWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRy
KQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKQEAgLTU1LDEwICs1NCwxMCBAQCB2b2lk
IFNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9
CiAKLVNWR0ZFVGlsZSAqU1ZHRkVUaWxlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKK1NW
R0ZFVGlsZSogU1ZHRkVUaWxlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0
PFNWR0ZFVGlsZSAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1RJ
TEUpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRVRpbGUqPihT
VkdSZXNvdXJjZUZpbHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1RJTEUpKTsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4oaW4xKCkpOwpAQCAtNjgsNiArNjcsNiBAQCBTVkdGRVRpbGUgKlNWR0ZFVGlsZUVsZW1l
bnQ6OmZpbHRlckVmZmVjCiAKIH0KIAotLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19T
VVBQT1JUCiAKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwx
MCArMjEsMTAgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQ
T1JUCiAjaW5jbHVkZSAiU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIgotCi0jaW5jbHVkZSAiS1Jl
bmRlcmluZ0RldmljZS5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtODMsNyArODMsNyBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkCiBTVkdGRVR1cmJ1bGVuY2UqIFNWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAg
ICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRVR1cmJ1bGVuY2UqPihyZW5k
ZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1RVUkJVTEVOQ0UpKTsKKyAgICAg
ICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxTVkdGRVR1cmJ1bGVuY2UqPihTVkdSZXNv
dXJjZUZpbHRlcjo6Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1RVUkJVTEVOQ0UpKTsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAgLTk5LDYgKzk5LDYg
QEAgU1ZHRkVUdXJidWxlbmNlKiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OgogCiB9CiAKLS8vIHZp
bTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCisvLyB2aW06dHM9NDpub2V0Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5Mzgp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsMTEgKzIyLDExIEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpZmRl
ZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKIAogI2luY2x1ZGUg
IkF0dHIuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHUmVz
b3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKQEAgLTExMyw3ICsxMTMsNyBAQCBTVkdS
ZXNvdXJjZSogU1ZHRmlsdGVyRWxlbWVudDo6Y2FudmFzUmVzCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgaWYgKCFtX2ZpbHRlcikKLSAgICAgICAgbV9maWx0ZXIgPSBXVEY6OnN0YXRpY19wb2lu
dGVyX2Nhc3Q8U1ZHUmVzb3VyY2VGaWx0ZXI+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVSZXNv
dXJjZShGaWx0ZXJSZXNvdXJjZVR5cGUpKTsKKyAgICAgICAgbV9maWx0ZXIgPSBuZXcgU1ZHUmVz
b3VyY2VGaWx0ZXIoKTsKIAogICAgIGJvb2wgZmlsdGVyQkJveE1vZGUgPSBmaWx0ZXJVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKICAgICBt
X2ZpbHRlci0+c2V0RmlsdGVyQm91bmRpbmdCb3hNb2RlKGZpbHRlckJCb3hNb2RlKTsKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5Mzgp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSwxMCArMjEsMTEgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lm
ZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCiAKLSNpbmNs
dWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgog
I2luY2x1ZGUgIlJlbmRlclBhdGguaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiU1ZHSGVscGVyLmgiCkBAIC0zMyw3ICszNCw4IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3Jt
TGlzdC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIKICNpbmNsdWRlICJTVkdVbml0
VHlwZXMuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCisjaW5jbHVkZSAiU1ZHUGFp
bnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMDYsNyArMTA4LDExIEBA
IHZvaWQgU1ZHR3JhZGllbnRFbGVtZW50Ojpub3RpZnlBdHRyaWJ1dGUKIFNWR1Jlc291cmNlKiBT
VkdHcmFkaWVudEVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKIHsKICAgICBpZiAoIW1fcmVzb3Vy
Y2UpIHsKLSAgICAgICAgbV9yZXNvdXJjZSA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQ
YWludFNlcnZlckdyYWRpZW50PihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGFpbnRTZXJ2ZXIo
Z3JhZGllbnRUeXBlKCkpKTsKKyAgICAgICAgaWYgKGdyYWRpZW50VHlwZSgpID09IExpbmVhckdy
YWRpZW50UGFpbnRTZXJ2ZXIpCisgICAgICAgICAgICBtX3Jlc291cmNlID0gbmV3IFNWR1BhaW50
U2VydmVyTGluZWFyR3JhZGllbnQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9yZXNv
dXJjZSA9IG5ldyBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KCk7CisKICAgICAgICAgbV9y
ZXNvdXJjZS0+c2V0TGlzdGVuZXIodGhpcyk7CiAgICAgICAgIGJ1aWxkR3JhZGllbnQobV9yZXNv
dXJjZSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSwx
MCBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNp
bmNsdWRlICJTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2UuaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTAgKzIxLDEwIEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQ
UE9SVAogI2luY2x1ZGUgIlNWR01hcmtlckVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0FuZ2xlLmgiCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDEyIEBA
CiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1
ZGUgIlNWR01hc2tFbGVtZW50LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJTVkdSZXNvdXJjZUltYWdlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5o
IgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtOTksMzMgKzk5LDI0IEBAIHZvaWQgU1ZHTWFz
a0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQotCiBTVkdSZXNvdXJjZUltYWdl
KiBTVkdNYXNrRWxlbWVudDo6ZHJhd01hc2tlckNvbnRlbnQoKQogewotICAgIEtSZW5kZXJpbmdE
ZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwotICAgIGlmICghZGV2aWNlLT5jdXJy
ZW50Q29udGV4dCgpKSAvLyBGSVhNRTogaGFjayBmb3Igbm93IHVudGlsIEltYWdlOjpsb2NrRm9j
dXMgZXhpc3RzCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KKyAgICAvLyBGSVhNRTogTWFza3MgYXJlIGJyb2tlbiEgVGhpcyB3YXkg
aXQgY2FuIE5PVCB3b3JrIQorICAgIC8vIFdlIG5lZWQgYSBpbWFnZS0+Y3JlYXRlQ29udGV4dCgp
IGZ1bmN0aW9uIC0gYXMgRXJpYyBzdWdnZXN0ZWQgLQorICAgIC8vIHRvIGZpbmFsbHkgZml4IHRo
ZSBwcm9ibGVtIGluIG9uZSBmdW5jdGlvbiwgYW5kIHNoYXJlIGl0IHdpdGggcGF0dGVybnMuLi4K
KyAgICByZXR1cm4gMDsKICAgICBTVkdSZXNvdXJjZUltYWdlKiBtYXNrSW1hZ2UgPSBuZXcgU1ZH
UmVzb3VyY2VJbWFnZSgpOwogCiAgICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZShscm91bmRmKHdp
ZHRoKCktPnZhbHVlKCkpLCBscm91bmRmKGhlaWdodCgpLT52YWx1ZSgpKSk7CiAgICAgbWFza0lt
YWdlLT5pbml0KHNpemUpOwogCi0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHBhdHRlcm5D
b250ZXh0ID0gZGV2aWNlLT5jb250ZXh0Rm9ySW1hZ2UobWFza0ltYWdlKTsKLSAgICBkZXZpY2Ut
PnB1c2hDb250ZXh0KHBhdHRlcm5Db250ZXh0KTsKLQotICAgIE93blB0cjxHcmFwaGljc0NvbnRl
eHQ+IGNvbnRleHQocGF0dGVybkNvbnRleHQtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAg
ICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0KGNvbnRleHRGb3JJbWFnZShtYXNrSW1h
Z2UpKTsKIAogICAgIFJlbmRlclNWR0NvbnRhaW5lciogbWFza0NvbnRhaW5lciA9IHN0YXRpY19j
YXN0PFJlbmRlclNWR0NvbnRhaW5lcio+KHJlbmRlcmVyKCkpOwogICAgIFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvIGluZm8oY29udGV4dC5nZXQoKSwgSW50UmVjdCgpLCBQYWludFBoYXNlRm9yZWdy
b3VuZCwgMCwgMCwgMCk7CiAgICAgbWFza0NvbnRhaW5lci0+c2V0RHJhd3NDb250ZW50cyh0cnVl
KTsKICAgICBtYXNrQ29udGFpbmVyLT5wYWludChpbmZvLCAwLCAwKTsKICAgICBtYXNrQ29udGFp
bmVyLT5zZXREcmF3c0NvbnRlbnRzKGZhbHNlKTsKLSAgICAKLSAgICBkZXZpY2UtPnBvcENvbnRl
eHQoKTsKLSAgICBkZWxldGUgcGF0dGVybkNvbnRleHQ7CiAKICAgICByZXR1cm4gbWFza0ltYWdl
OwogfQpAQCAtMTQ2LDcgKzEzNyw3IEBAIFNWR1Jlc291cmNlKiBTVkdNYXNrRWxlbWVudDo6Y2Fu
dmFzUmVzb3UKICAgICBpZiAobV9kaXJ0eSkgewogICAgICAgICBSZWZQdHI8U1ZHUmVzb3VyY2VJ
bWFnZT4gbWFzayhkcmF3TWFza2VyQ29udGVudCgpKTsKICAgICAgICAgbV9tYXNrZXItPnNldE1h
c2sobWFzayk7Ci0gICAgICAgIG1fZGlydHkgPSAobWFzayAhPSAwKTsKKyAgICAgICAgbV9kaXJ0
eSA9IChtYXNrID09IDApOwogICAgIH0KICAgICByZXR1cm4gbV9tYXNrZXIuZ2V0KCk7CiB9Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzkz
OCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsMTMgKzIxLDEzIEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNp
ZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR1BhdHRlcm5FbGVtZW50LmgiCiAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IlNWR1Jlc291cmNlSW1hZ2UuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5j
bHVkZSAiU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFp
bmVyLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCkBAIC0xNjYsOCArMTY2LDYgQEAgdm9pZCBT
VkdQYXR0ZXJuRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZXNGcgogCiB2b2lkIFNWR1BhdHRlcm5FbGVt
ZW50OjpkcmF3UGF0dGVybkNvbnRlbnRJbnRvVGlsZShjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCog
dGFyZ2V0LCBjb25zdCBJbnRTaXplJiBuZXdTaXplLCBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRy
YW5zZm9ybU1hdHJpeCkKIHsKLSAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJp
bmdEZXZpY2UoKTsKLSAgICAKICAgICBTVkdTdHlsZWRFbGVtZW50KiBhY3RpdmVFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KG1fcGFpbnRTZXJ2ZXItPmFjdGl2ZUNsaWVu
dCgpLT5lbGVtZW50KCkpOwogCiAgICAgYm9vbCBiYm94ID0gKHBhdHRlcm5Vbml0cygpID09IFNW
R1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CkBAIC0xODUsMTUg
KzE4MywxMyBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpkcmF3UGF0dGVybkNvbnRlCiAgICAg
bV90aWxlID0gbmV3IFNWR1Jlc291cmNlSW1hZ2UoKTsKICAgICBtX3RpbGUtPmluaXQobmV3U2l6
ZSk7CiAKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcGF0dGVybkNvbnRleHQgPSBkZXZp
Y2UtPmNvbnRleHRGb3JJbWFnZShtX3RpbGUuZ2V0KCkpOwotICAgIGRldmljZS0+cHVzaENvbnRl
eHQocGF0dGVybkNvbnRleHQpOworCU93blB0cjxHcmFwaGljc0NvbnRleHQ+IHBhdHRlcm5Db250
ZXh0KGNvbnRleHRGb3JJbWFnZShtX3RpbGUuZ2V0KCkpKTsKKwogICAgIEZsb2F0UmVjdCByZWN0
KHgoKS0+dmFsdWUoKSwgeSgpLT52YWx1ZSgpLCB3aWR0aCgpLT52YWx1ZSgpLCBoZWlnaHQoKS0+
dmFsdWUoKSk7CiAgICAgbV9wYWludFNlcnZlci0+c2V0QmJveChyZWN0KTsKICAgICBtX3BhaW50
U2VydmVyLT5zZXRQYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpOwogICAg
IG1fcGFpbnRTZXJ2ZXItPnNldFRpbGUobV90aWxlLmdldCgpKTsKIAotICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IGNvbnRleHQocGF0dGVybkNvbnRleHQtPmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCgpKTsKLQogICAgIGZvciAoTm9kZSogbiA9IHRhcmdldC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0g
bi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBTVkdFbGVtZW50KiBlbGVtID0gc3ZnX2R5bmFt
aWNfY2FzdChuKTsKICAgICAgICAgaWYgKCFlbGVtIHx8ICFlbGVtLT5pc1N0eWxlZCgpKQpAQCAt
MjMzLDggKzIyOSw4IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRyYXdQYXR0ZXJuQ29udGUK
ICAgICAgICAgICAgIGl0ZW0tPnNldExvY2FsVHJhbnNmb3JtKG5ld01hdHJpeC5tYXRyaXgoKSk7
CiAgICAgICAgIH0KICNlbmRpZgotCi0gICAgICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIGlu
Zm8oY29udGV4dC5nZXQoKSwgSW50UmVjdCgpLCBQYWludFBoYXNlRm9yZWdyb3VuZCwgMCwgMCwg
MCk7CisgCisgICAgICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIGluZm8ocGF0dGVybkNvbnRl
eHQuZ2V0KCksIEludFJlY3QoKSwgUGFpbnRQaGFzZUZvcmVncm91bmQsIDAsIDAsIDApOwogICAg
ICAgICBpdGVtLT5wYWludChpbmZvLCAwLCAwKTsKIAogI2lmIDAKQEAgLTI0Nyw5ICsyNDMsNiBA
QCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpkcmF3UGF0dGVybkNvbnRlCiAKICAgICBpZiAoc2F2
ZWRDb250ZXh0KQogICAgICAgICBjb25zdF9jYXN0PFNWR1BhdHRlcm5FbGVtZW50Kj4odGhpcykt
PnB1c2hBdHRyaWJ1dGVDb250ZXh0KHNhdmVkQ29udGV4dCk7Ci0KLSAgICBkZXZpY2UtPnBvcENv
bnRleHQoKTsKLSAgICBkZWxldGUgcGF0dGVybkNvbnRleHQ7CiB9CiAKIHZvaWQgU1ZHUGF0dGVy
bkVsZW1lbnQ6Om5vdGlmeUNsaWVudHNUb1JlcGFpbnQoKSBjb25zdApAQCAtMzI2LDcgKzMxOSw3
IEBAIFJlbmRlck9iamVjdCogU1ZHUGF0dGVybkVsZW1lbnQ6OmNyZWF0ZVIKIFNWR1Jlc291cmNl
KiBTVkdQYXR0ZXJuRWxlbWVudDo6Y2FudmFzUmVzb3VyY2UoKQogewogICAgIGlmICghbV9wYWlu
dFNlcnZlcikgewotICAgICAgICBtX3BhaW50U2VydmVyID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9j
YXN0PFNWR1BhaW50U2VydmVyUGF0dGVybj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhaW50
U2VydmVyKFNWR1BhaW50U2VydmVyVHlwZShQYXR0ZXJuUGFpbnRTZXJ2ZXIpKSk7CisgICAgICAg
IG1fcGFpbnRTZXJ2ZXIgPSBuZXcgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuKCk7CiAgICAgICAgIG1f
cGFpbnRTZXJ2ZXItPnNldExpc3RlbmVyKGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqPih0
aGlzKSk7CiAgICAgfQogICAgIHJldHVybiBtX3BhaW50U2VydmVyLmdldCgpOwpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDEzICsyMSwxMyBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NV
UFBPUlQKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyLmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247
Ci0gICAgY2xhc3MgS1JlbmRlcmluZ0RldmljZTsKICAgICBjbGFzcyBSZW5kZXJQYXRoOwogICAg
IGNsYXNzIFJlbmRlclZpZXc7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBlbi5oIgogI2luY2x1ZGUg
IlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJVQ2hhci5oIgpAQCAtNjIsMTMgKzYzLDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBQYXRoOworICAgIGNsYXNzIFNWR1Jl
c291cmNlSW1hZ2U7CiAgICAgY2xhc3MgVGV4dFJ1bjsKICAgICBjbGFzcyBUZXh0U3R5bGU7CiAK
LSNpZmRlZiBTVkdfU1VQUE9SVAotICAgIGNsYXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Owot
I2VuZGlmCi0KICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQgOiBOb25jb3B5YWJsZSB7CiAgICAg
cHVibGljOgogICAgICAgICBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
KTsKQEAgLTE1Nyw2ICsxNTUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9p
ZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IpOwogCisgICAgICAgIHZv
aWQgYmVnaW5QYXRoKCk7CisgICAgICAgIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKTsK
KwogICAgICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpOwogCiAgICAgICAgIHZvaWQgc2NhbGUo
Y29uc3QgRmxvYXRTaXplJik7CkBAIC0xNjgsMTYgKzE2OSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAK
LSNpZmRlZiBTVkdfU1VQUE9SVAotICAgICAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY3Jl
YXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4p
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dChIREMpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4K
ICAgICAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGJvb2wgc3VwcG9ydEFscGhhQmxlbmQgPSBm
YWxzZSwgY29uc3QgSW50UmVjdCogPSAwKTsgLy8gVGhlIHBhc3NlZCBpbiByZWN0IGlzIHVzZWQg
dG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJhbnNwYXJlbmN5IGxh
eWVycy4KICAgICAgICAgdm9pZCByZWxlYXNlV2luZG93c0NvbnRleHQoSERDLCBib29sIHN1cHBv
cnRBbHBoYUJsZW5kID0gZmFsc2UsIGNvbnN0IEludFJlY3QqID0gMCk7ICAgIC8vIFRoZSBwYXNz
ZWQgaW4gSERDIHNob3VsZCBiZSB0aGUgb25lIGhhbmRlZCBiYWNrIGJ5IGdldFdpbmRvd3NDb250
ZXh0LgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgdm9pZCBzZXRGaWxsUnVs
ZShXaW5kUnVsZSk7CisgICAgICAgIFBsYXRmb3JtUGF0aCogY3VycmVudFBhdGgoKTsKKyNlbmRp
ZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzYXZlUGxhdGZvcm1TdGF0ZSgpOwogICAg
ICAgICB2b2lkIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CkBAIC0xOTYsNiArMTk4LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KiBtX2RhdGE7CiAgICAgfTsKIAorI2lmZGVmIFNWR19TVVBQT1JUCisgICAgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0Rm9ySW1hZ2UoU1ZHUmVzb3VyY2VJbWFnZSopOworI2VuZGlmCisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4dF9oCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDYgQEAKICNpbmNs
dWRlICJQYXRoLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmZGVmIFNWR19T
VVBQT1JUCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgotI2VuZGlmCi0KICNp
bmNsdWRlIDxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUuaD4gLy8gRklYTUU6IFRlbXBv
cmFyeS4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTUyOCwxMyArNTI0LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIENHQ29udGV4dEVPQ2xpcChj
b250ZXh0KTsKIH0KIAotI2lmZGVmIFNWR19TVVBQT1JUCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCogR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCkKLXsKLSAg
ICByZXR1cm4gbmV3IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KHBsYXRmb3JtQ29udGV4
dCgpKTsKLX0KLSNlbmRpZgotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBA
IC02NTAsNiArNjM5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5l
Sm8KICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KKyAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblBhdGgoKQoreworICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQo
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Cit7CisgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSk7Cit9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBh
dGgpCiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50
U2VydmVyLmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dmcvU1ZHUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTAgKzU0LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUgPSAyCiAg
ICAgfTsKIAorICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBjbGFzcyBSZW5kZXJPYmpl
Y3Q7CiAgICAgY2xhc3MgUmVuZGVyUGF0aDsKICAgICBjbGFzcyBSZW5kZXJTdHlsZTsKLSAgICBj
bGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dDsgLy8gRklYTUU6IFRoaXMgaXMgZ29uZSBzb29u
IQogCiAgICAgY2xhc3MgU1ZHUGFpbnRTZXJ2ZXIgOiBwdWJsaWMgU1ZHUmVzb3VyY2UgewogICAg
IHB1YmxpYzoKQEAgLTc2LDExICs3NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikg
Y29uc3QgPSAwOwogCiAgICAgICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIGluIHBsYXRmb3JtIHNw
ZWNpZmljIGNvZGUuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNv
bnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJQYXRoKiwgU1ZHUGFpbnRUYXJn
ZXRUeXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEdyYXBoaWNzQ29u
dGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiwgY29uc3Qg
UmVuZGVyUGF0aCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVh
bCBib29sIHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0
KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBz
ZXR1cChHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJn
ZXRUeXBlKSBjb25zdCA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAjaWYgUExBVEZPUk0oQ0cpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlckdyYWRpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWlu
dFNlcnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsNyBAQCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdy
CiAgICAgLCBtX3N0b3BzQ2FjaGUoMCkKICAgICAsIG1fc3RvcHNDb3VudCgwKQogICAgICwgbV9z
aGFkaW5nQ2FjaGUoMCkKKyAgICAsIG1fc2F2ZWRDb250ZXh0KDApCiAjZW5kaWYKIHsKIH0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyR3JhZGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNl
cnZlckdyYWRpZW50LmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nywx
MCArNzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwogCiAjaWYgUExB
VEZPUk0oQ0cpCi0gICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiwgY29uc3QgUmVuZGVyUGF0aCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgdm9pZCB0ZWFyZG93bihHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJl
bmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlclBhdGgqLCBTVkdQYWludFRh
cmdldFR5cGUpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGljc0NvbnRleHQqJiwgY29u
c3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwogCkBAIC0xMTUsNiArMTE1LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIENHU2hhZGluZ1JlZiBtX3NoYWRpbmdDYWNoZTsKICAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHUmVzb3VyY2VJbWFnZT4gbV9tYXNrSW1hZ2U7CisKKyAgICAg
ICAgbXV0YWJsZSBHcmFwaGljc0NvbnRleHQqIG1fc2F2ZWRDb250ZXh0OwogI2VuZGlmCiAgICAg
fTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJM
aW5lYXJHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaAkocmV2aXNpb24gMTc5MzgpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYpIGNvbnN0OwogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIHZpcnR1YWwgYm9vbCBz
ZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1Bh
aW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGlj
c0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25z
dDsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3ZnL1NWR1BhaW50U2VydmVyUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyUGF0dGVybi5oCShyZXZpc2lvbiAxNzkz
OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyUGF0dGVy
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMiArNjQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYpIGNvbnN0OwogCiAjaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIFNW
R1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFy
Z2V0VHlwZSkgY29uc3Q7IAorICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoR3JhcGhpY3NDb250
ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVu
ZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsgCiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKFFUKQotICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRl
ck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHByaXZh
dGU6CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclJh
ZGlhbEdyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dmcvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oCShyZXZpc2lvbiAxNzkzOCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJikgY29uc3Q7CiAKICNpZiBQTEFURk9STShRVCkKLSAgICAgICAgdmlydHVhbCBib29sIHNl
dHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFp
bnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHNldHVwKEdyYXBoaWNz
Q29udGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0
OwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdmcvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyU29saWQuaAkocmV2aXNpb24gMTc5MzgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclNvbGlkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYp
IGNvbnN0OwogCiAjaWYgUExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JNKFFUKQotICAgICAgICB2aXJ0
dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0
dXAoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0
VHlwZSkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2UuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYsMTYgKzY2LDYgQEAgY29uc3QgUmVuZGVyUGF0aExpc3QmIFNWR1Jlc291cmNl
OjpjbGllbgogICAgIHJldHVybiBtX2NsaWVudHM7CiB9CiAKLVN0cmluZyBTVkdSZXNvdXJjZTo6
aWRJblJlZ2lzdHJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZWdpc3RyeUlkOwotfQotCi12
b2lkIFNWR1Jlc291cmNlOjpzZXRJZEluUmVnaXN0cnkoY29uc3QgU3RyaW5nJiBpZCkKLXsKLSAg
ICBtX3JlZ2lzdHJ5SWQgPSBpZDsKLX0KLQogVGV4dFN0cmVhbSYgU1ZHUmVzb3VyY2U6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRz
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZS5oCShy
ZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIGNvbnN0IFJlbmRlclBhdGhMaXN0JiBjbGllbnRzKCkgY29uc3Q7CiAKLSAg
ICAgICAgU3RyaW5nIGlkSW5SZWdpc3RyeSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldElkSW5S
ZWdpc3RyeShjb25zdCBTdHJpbmcmKTsKLQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQYWludFNl
cnZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Zp
bHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Ns
aXBwZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtODEsNyArNzgsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBTdHJp
bmcgbV9yZWdpc3RyeUlkOwogICAgICAgICBSZW5kZXJQYXRoTGlzdCBtX2NsaWVudHM7CiAgICAg
fTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VDbGlw
cGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVz
b3VyY2VDbGlwcGVyLmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdmcvU1ZHUmVzb3VyY2VDbGlwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBWZWN0b3I8Q2xpcERhdGE+IG1fY2xp
cERhdGE7CiAgICAgfTsgIAogCisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCiAgICAgY2xh
c3MgU1ZHUmVzb3VyY2VDbGlwcGVyIDogcHVibGljIFNWR1Jlc291cmNlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIFNWR1Jlc291cmNlQ2xpcHBlcigpOwpAQCAtNzIsNyArNzQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CiAKICAgICAgICAgLy8gVG8gYmUgaW1wbGVtZW50
ZWQgYnkgdGhlIHNwZWNpZmljIHJlbmRlcmluZyBkZXZpY2VzCi0gICAgICAgIHZvaWQgYXBwbHlD
bGlwKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0OworICAgICAgICB2b2lkIGFw
cGx5Q2xpcChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBj
b25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIENsaXBEYXRhTGlzdCBtX2NsaXBEYXRhOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VGaWx0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZUZp
bHRlci5oCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Zn
L1NWR1Jlc291cmNlRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAog
I2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJT
VkdGaWx0ZXJFZmZlY3QuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogCkBAIC00OSw2ICs1
MCw3IEBAIGNsYXNzIE5TTXV0YWJsZURpY3Rpb25hcnk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgU1ZHRmlsdGVyRWZmZWN0OwogCiBjbGFz
cyBTVkdSZXNvdXJjZUZpbHRlciA6IHB1YmxpYyBTVkdSZXNvdXJjZSB7CkBAIC01Nyw2ICs1OSw4
IEBAIHB1YmxpYzoKICAgICBTVkdSZXNvdXJjZUZpbHRlcigpOwogICAgIHZpcnR1YWwgflNWR1Jl
c291cmNlRmlsdGVyKCk7CiAKKyAgICBzdGF0aWMgU1ZHRmlsdGVyRWZmZWN0KiBjcmVhdGVGaWx0
ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVyRWZmZWN0VHlwZSYpOworCiAgICAgdmlydHVhbCBib29s
IGlzRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBmaWx0ZXJCb3Vu
ZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckJCb3hNb2RlOyB9CkBAIC03Niw4
ICs4MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgLy8gVG8gYmUgaW1wbGVtZW50ZWQg
aW4gcGxhdGZvcm0gc3BlY2lmaWMgY29kZS4KLSAgICB2b2lkIHByZXBhcmVGaWx0ZXIoY29uc3Qg
RmxvYXRSZWN0JiBiYm94KTsKLSAgICB2b2lkIGFwcGx5RmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYg
YmJveCk7CisgICAgdm9pZCBwcmVwYXJlRmlsdGVyKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBG
bG9hdFJlY3QmIGJib3gpOworICAgIHZvaWQgYXBwbHlGaWx0ZXIoR3JhcGhpY3NDb250ZXh0KiYs
IGNvbnN0IEZsb2F0UmVjdCYgYmJveCk7CiAKICNpZiBQTEFURk9STShDSSkKICAgICBDSUltYWdl
KiBpbWFnZUZvck5hbWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CkBAIC05Myw2ICs5Nyw3IEBAIHBy
aXZhdGU6CiAKICAgICBDSUNvbnRleHQqIG1fZmlsdGVyQ0lDb250ZXh0OwogICAgIENHTGF5ZXJS
ZWYgbV9maWx0ZXJDR0xheWVyOworICAgIEdyYXBoaWNzQ29udGV4dCogbV9zYXZlZENvbnRleHQ7
CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogbV9pbWFnZXNCeU5hbWU7CiAjZW5kaWYKIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VNYXNrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZU1hc2tl
ci5oCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NW
R1Jlc291cmNlTWFza2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CiAgICAgY2xhc3MgU1ZHUmVzb3VyY2VJbWFnZTsKIAogICAgIGNsYXNzIFNWR1Jl
c291cmNlTWFza2VyIDogcHVibGljIFNWR1Jlc291cmNlIHsKQEAgLTQ3LDcgKzQ4LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgICAgIC8vIFRvIGJlIGltcGxl
bWVudGVkIGJ5IHRoZSBzcGVjaWZpYyByZW5kZXJpbmcgZGV2aWNlcwotICAgICAgICB2b2lkIGFw
cGx5TWFzayhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKKyAgICAgICAgdm9p
ZCBhcHBseU1hc2soR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0Jv
eCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8U1ZHUmVzb3VyY2VJbWFn
ZT4gbV9tYXNrOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvQ2dTdXBw
b3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9D
Z1N1cHBvcnQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3ZnL2NnL0NnU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jaW5jbHVkZSAiUXVhcnR6
U3VwcG9ydC5oIgorI2luY2x1ZGUgIkNnU3VwcG9ydC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJ3dGYvQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvQ2dTdXBw
b3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvQ2dT
dXBwb3J0LmgJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dmcvY2cvQ2dTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUXVhcnR6U3VwcG9ydF9ICi0jZGVmaW5lIFF1YXJ0
elN1cHBvcnRfSAorI2lmbmRlZiBDZ1N1cHBvcnRfSAorI2RlZmluZSBDZ1N1cHBvcnRfSAogCiAj
aWZkZWYgU1ZHX1NVUFBPUlQKIApAQCAtNzYsNCArNzYsNCBAQCBzdGF0aWMgaW5saW5lIENHTGlu
ZUpvaW4gQ0dMaW5lSm9pbkZyb21LCiB9CiAKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAotI2VuZGlm
IC8vICFRdWFydHpTdXBwb3J0X0gKKyNlbmRpZiAvLyAhQ2dTdXBwb3J0X0gKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1JlbmRlclBhdGhDZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvUmVuZGVyUGF0aENnLmNwcAkocmV2
aXNpb24gMTc4ODMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9SZW5kZXJQ
YXRoQ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw3IEBACiAKICNpbmNsdWRlIDxB
cHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlICJLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lmgi
Ci0jaW5jbHVkZSAiUXVhcnR6U3VwcG9ydC5oIgorI2luY2x1ZGUgIkNnU3VwcG9ydC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclBhdGguaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwCShyZXZpc2lvbiAxNzkzOCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50U2VydmVyQ2cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMiArMjQsMTIgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAog
I2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNl
UXVhcnR6LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
UGF0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OmRy
YXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBh
dGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAordm9pZCBTVkdQYWludFNlcnZlcjo6
ZHJhdyhHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBT
VkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBpZiAoIXNldHVwKGNvbnRleHQs
IHBhdGgsIHR5cGUpKQogICAgICAgICByZXR1cm47CkBAIC0zOCwxNyArMzgsMTUgQEAgdm9pZCBT
VkdQYWludFNlcnZlcjo6ZHJhdyhLUmVuZGVyaW5nRGV2aQogICAgIHRlYXJkb3duKGNvbnRleHQs
IHBhdGgsIHR5cGUpOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyOjp0ZWFyZG93bihLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlw
ZSkgY29uc3QKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dCom
LCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0CiB7CiAgICAg
Ly8gbm8tb3AKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlcjo6cmVuZGVyUGF0aChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgU1ZHUGFpbnRU
YXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit2b2lkIFNWR1BhaW50U2VydmVyOjpyZW5kZXJQYXRoKEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIFNWR1BhaW50
VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgt
PnN0eWxlKCk7Ci0KLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiogcXVhcnR6Q29u
dGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Kj4oY29udGV4
dCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBxdWFydHpDb250ZXh0LT5jZ0NvbnRl
eHQoKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwogCiAgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHls
ZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQogICAgICAgICBmaWxsUGF0aChjb250ZXh0UmVmLCBw
YXRoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50U2Vy
dmVyR3JhZGllbnRDZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdmcvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkocmV2aXNpb24gMTc5MzgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50
Q2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTEgQEAKICNpZmRlZiBTVkdfU1VQ
UE9SVAogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIKIAotI2luY2x1ZGUgIktS
ZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGFp
bnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLSNpbmNs
dWRlICJRdWFydHpTdXBwb3J0LmgiCisjaW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMTY3LDExICsxNjcsMTAgQEAgdm9pZCBTVkdQYWludFNlcnZlckdy
YWRpZW50Ojp1cGRhdGVRdWFydAogICAgIH0KIH0KIAotdm9pZCBTVkdQYWludFNlcnZlckdyYWRp
ZW50Ojp0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAordm9pZCBT
VkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0
LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNv
bnN0CiB7CiAgICAgQ0dTaGFkaW5nUmVmIHNoYWRpbmcgPSBtX3NoYWRpbmdDYWNoZTsKLSAgICBL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6KiBxdWFydHpEZXZpY2UgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nRGV2aWNlUXVhcnR6Kj4ocmVuZGVyaW5nRGV2aWNlKCkpOwotICAgIENHQ29udGV4dFJlZiBj
b250ZXh0UmVmID0gcXVhcnR6RGV2aWNlLT5jdXJyZW50Q0dDb250ZXh0KCk7CisgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAgICAgQVNTRVJUKGNvbnRleHRSZWYg
IT0gTlVMTCk7CiAKQEAgLTE3OSwxNSArMTc4LDE5IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6dGVhcmRvd24oS1IKICAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgZmlsbGluZyB0aGUg
ZW50aXJlIHNjcmVlbiB3aXRoIHRoZSBzaGFkaW5nIGluIHRoZSBjYXNlIHRoYXQgbm8gdGV4dCB3
YXMgaW50ZXJzZWN0ZWQgd2l0aCB0aGUgY2xpcAogICAgICAgICBpZiAoIWlzUGFpbnRpbmdUZXh0
KCkgfHwgKG9iamVjdC0+d2lkdGgoKSA+IDAgJiYgb2JqZWN0LT5oZWlnaHQoKSA+IDApKQogICAg
ICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dFJlZiwgc2hhZGluZyk7Ci0gICAg
ICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dFJlZik7CisgICAgICAgIENHQ29udGV4
dFJlc3RvcmVHU3RhdGUoY29udGV4dFJlZik7ICAgICAgICAKICAgICB9CiAKICAgICBpZiAoKHR5
cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0
cm9rZSgpKSB7CiAgICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCgpKSB7CiAgICAgICAgICAgICBp
bnQgd2lkdGggID0gMjA0ODsKICAgICAgICAgICAgIGludCBoZWlnaHQgPSAyMDQ4OyAvLyBGSVhN
RT8/PyBTRUUgQUJPVkUKLSAgICAgICAgICAgIGRlbGV0ZSBxdWFydHpEZXZpY2UtPnBvcENvbnRl
eHQoKTsKLSAgICAgICAgICAgIGNvbnRleHRSZWYgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0Nv
bnRleHQoKTsKKworICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQ7CisgICAgICAgICAgICBjb250
ZXh0ID0gbV9zYXZlZENvbnRleHQ7CisgICAgICAgICAgICBjb250ZXh0UmVmID0gY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgICAgICBtX3NhdmVkQ29udGV4dCA9IDA7CisKICAg
ICAgICAgICAgIHZvaWQqIGltYWdlQnVmZmVyID0gZmFzdE1hbGxvYyh3aWR0aCAqIGhlaWdodCk7
CiAgICAgICAgICAgICBDR0NvbG9yU3BhY2VSZWYgZ3JheUNvbG9yU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VHcmF5KCk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZWYgZ3JheXNjYWxl
Q29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShpbWFnZUJ1ZmZlciwgd2lkdGgsIGhlaWdo
dCwgOCwgd2lkdGgsIGdyYXlDb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhTm9uZSk7CkBAIC0xOTks
MTYgKzIwMiwxNSBAQCB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEtSCiAg
ICAgICAgICAgICBDR0ltYWdlUmVsZWFzZShncmF5c2NhbGVJbWFnZSk7CiAgICAgICAgIH0KICAg
ICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dFJlZiwgc2hhZGluZyk7Ci0gICAgICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dFJlZik7CisgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dFJlZik7ICAgICAgICAKICAgICB9CiAKICAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKGNvbnRleHRSZWYpOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyR3JhZGll
bnQ6OnJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJl
bmRlclBhdGgqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAordm9pZCBTVkdQ
YWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQYXRoKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQs
IGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAog
ewotICAgIEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqIHF1YXJ0ekRldmljZSA9IHN0YXRpY19jYXN0
PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdEZXZpY2UoKSk7Ci0gICAgQ0dDb250
ZXh0UmVmIGNvbnRleHRSZWYgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0NvbnRleHQoKTsKKyAg
ICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwog
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgtPnN0eWxlKCk7CiAgICAgQVNTRVJUKGNvbnRl
eHRSZWYgIT0gTlVMTCk7CiAKQEAgLTIzMyw3ICsyMzUsNyBAQCB2b2lkIFNWR1BhaW50U2VydmVy
R3JhZGllbnQ6OnJlbmRlclBhdGgoCiAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHRSZWYs
IHRyYW5zZm9ybSk7CiB9CiAKLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0
KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIGlmIChsaXN0
ZW5lcigpKSAvLyB0aGlzIHNlZW1zIGxpa2UgYmFkIGRlc2lnbiB0byBtZSwgc2hvdWxkIGJlIGlu
IGEgY29tbW9uIGJhc2VjbGFzcy4gLS0gZWNzIDgvNi8wNQogICAgICAgICBsaXN0ZW5lcigpLT5y
ZXNvdXJjZU5vdGlmaWNhdGlvbigpOwpAQCAtMjQzLDggKzI0NSw3IEBAIGJvb2wgU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6c2V0dXAoS1JlbmQKICAgICBpZiAoIW1fc2hhZGluZ0NhY2hlKQogICAg
ICAgICBjb25zdF9jYXN0PFNWR1BhaW50U2VydmVyR3JhZGllbnQqPih0aGlzKS0+dXBkYXRlUXVh
cnR6R3JhZGllbnRDYWNoZSh0aGlzKTsKIAotICAgIEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqIHF1
YXJ0ekRldmljZSA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJp
bmdEZXZpY2UoKSk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBxdWFydHpEZXZpY2Ut
PmN1cnJlbnRDR0NvbnRleHQoKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+
c3R5bGUoKTsKICAgICBBU1NFUlQoY29udGV4dFJlZiAhPSBOVUxMKTsKIApAQCAtMjUyLDEzICsy
NTMsMTMgQEAgYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cChLUmVuZAogICAgIENH
Q29udGV4dFNldEFscGhhKGNvbnRleHRSZWYsIHN0eWxlLT5vcGFjaXR5KCkpOwogCiAgICAgaWYg
KCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFz
RmlsbCgpKSB7Ci0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dFJlZik7CisgICAg
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dFJlZik7ICAgICAgICAKICAgICAgICAgaWYg
KGlzUGFpbnRpbmdUZXh0KCkpCiAgICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01v
ZGUoY29udGV4dFJlZiwga0NHVGV4dENsaXApOwogICAgIH0KIAogICAgIGlmICgodHlwZSAmIEFw
cGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkp
IHsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0UmVmKTsKKyAgICAgICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0UmVmKTsgICAgICAgIAogICAgICAgICBhcHBseVN0cm9r
ZVN0eWxlVG9Db250ZXh0KGNvbnRleHRSZWYsIHN0eWxlLCBvYmplY3QpOyAvLyBGSVhNRTogdGhp
cyBzZWVtcyBsaWtlIHRoZSB3cm9uZyBwbGFjZSBmb3IgdGhpcy4KICAgICAgICAgaWYgKGlzUGFp
bnRpbmdUZXh0KCkpIHsKICAgICAgICAgICAgIG1fbWFza0ltYWdlID0gbmV3IFNWR1Jlc291cmNl
SW1hZ2UoKTsKQEAgLTI2NiwxMSArMjY3LDE0IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6c2V0dXAoS1JlbmQKICAgICAgICAgICAgIGludCBoZWlnaHQgPSAyMDQ4OyAvLyBGSVhNRT8/
PwogICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAg
ICAgICAgICAgIG1fbWFza0ltYWdlLT5pbml0KHNpemUpOwotICAgICAgICAgICAgS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIG1hc2tJbWFnZUNvbnRleHQgPSBxdWFydHpEZXZpY2UtPmNvbnRleHRG
b3JJbWFnZShtX21hc2tJbWFnZS5nZXQoKSk7Ci0gICAgICAgICAgICBxdWFydHpEZXZpY2UtPnB1
c2hDb250ZXh0KG1hc2tJbWFnZUNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0UmVmIG1h
c2tDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPiht
YXNrSW1hZ2VDb250ZXh0KS0+Y2dDb250ZXh0KCk7CisKKyAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCogbWFza0ltYWdlQ29udGV4dCA9IGNvbnRleHRGb3JJbWFnZShtX21hc2tJbWFnZS5nZXQo
KSk7CisgICAgICAgICAgICBDR0NvbnRleHRSZWYgbWFza0NvbnRleHQgPSBtYXNrSW1hZ2VDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2Jq
ZWN0Kj4ob2JqZWN0KS0+c3R5bGUoKS0+c2V0Q29sb3IoQ29sb3IoMjU1LCAyNTUsIDI1NSkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKG1hc2tDb250ZXh0LCBrQ0dU
ZXh0U3Ryb2tlKTsKKworICAgICAgICAgICAgbV9zYXZlZENvbnRleHQgPSBjb250ZXh0OworICAg
ICAgICAgICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7CiAgICAgICAgIH0KICAgICB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50U2VydmVyUGF0
dGVybkNnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9j
Zy9TVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwxMCArMjQsMTAgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2lu
Y2x1ZGUgIlNWR1BhaW50U2VydmVyUGF0dGVybi5oIgogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0Rl
dmljZVF1YXJ0ei5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlSW1hZ2UuaCIKLSNpbmNsdWRlICJR
dWFydHpTdXBwb3J0LmgiCisjaW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzcsMTUgKzM3LDE0IEBAIHN0YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2
b2lkKiBpbmZvLCAKICAgICBDR0NvbnRleHREcmF3TGF5ZXJBdFBvaW50KGNvbnRleHQsIENHUG9p
bnRaZXJvLCBsYXllcik7CiB9CiAKLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorYm9vbCBTVkdQYWludFNlcnZlclBh
dHRlcm46OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBpZihsaXN0
ZW5lcigpKSAvLyB0aGlzIHNlZW1zIGxpa2UgYmFkIGRlc2lnbiB0byBtZSwgc2hvdWxkIGJlIGlu
IGEgY29tbW9uIGJhc2VjbGFzcy4gLS0gZWNzIDgvNi8wNQogICAgICAgICBsaXN0ZW5lcigpLT5y
ZXNvdXJjZU5vdGlmaWNhdGlvbigpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0
LT5zdHlsZSgpOwogCi0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0ekNv
bnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KGNvbnRl
eHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0UmVmID0gcXVhcnR6Q29udGV4dC0+Y2dDb250
ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKIAogICAgIFJlZlB0cjxTVkdSZXNvdXJjZUltYWdlPiBjZWxsID0gdGlsZSgpOwog
ICAgIGlmICghY2VsbCkKQEAgLTEwMiwxMCArMTAxLDkgQEAgYm9vbCBTVkdQYWludFNlcnZlclBh
dHRlcm46OnNldHVwKEtSZW5kZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR1BhaW50
U2VydmVyUGF0dGVybjo6dGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29u
c3QKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjp0ZWFyZG93bihHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0
ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KGNv
bnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0UmVmID0gcXVhcnR6Q29udGV4dC0+Y2dD
b250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBDR1BhdHRlcm5SZWxlYXNlKG1fcGF0dGVybik7CiAgICAgQ0dDb2xv
clNwYWNlUmVsZWFzZShtX3BhdHRlcm5TcGFjZSk7CiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0UmVmKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NW
R1BhaW50U2VydmVyU29saWRDZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdmcvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcAkocmV2aXNpb24gMTc5Mzgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZlclNvbGlk
Q2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNiArMjQsMTUgQEAKICNpZmRlZiBTVkdfU1VQ
UE9SVAogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIKIAorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIktSZW5k
ZXJpbmdEZXZpY2VRdWFydHouaCIKLSNpbmNsdWRlICJRdWFydHpTdXBwb3J0LmgiCisjaW5jbHVk
ZSAiQ2dTdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBTVkdQYWludFNl
cnZlclNvbGlkOjpzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorYm9v
bCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0
CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqIHF1YXJ0ekNvbnRleHQgPSBz
dGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eio+KGNvbnRleHQpOwotICAg
IENHQ29udGV4dFJlZiBjb250ZXh0UmVmID0gcXVhcnR6Q29udGV4dC0+Y2dDb250ZXh0KCk7Cisg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAKICAgICBDR0NvbnRl
eHRTZXRBbHBoYShjb250ZXh0UmVmLCBzdHlsZS0+b3BhY2l0eSgpKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1Jlc291cmNlQ2xpcHBlckNnLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdSZXNvdXJjZUNsaXBw
ZXJDZy5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dmcvY2cvU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMiAr
MzEsMjAgQEAKICNpbmNsdWRlICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKLSNp
bmNsdWRlICJRdWFydHpTdXBwb3J0LmgiCisjaW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcChjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdAordm9pZCBTVkdSZXNvdXJjZUNsaXBwZXI6
OmFwcGx5Q2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm91
bmRpbmdCb3gpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQg
PSByZW5kZXJpbmdEZXZpY2UoKS0+Y3VycmVudENvbnRleHQoKTsKLSAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihj
b250ZXh0KS0+Y2dDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGlmIChtX2NsaXBEYXRhLmNsaXBEYXRhKCkuc2l6
ZSgpIDwgMSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBoZXRlcm9nZW5vdXNDbGlwUnVs
ZXMgPSBmYWxzZTsKICAgICBXaW5kUnVsZSBjbGlwUnVsZSA9IG1fY2xpcERhdGEuY2xpcERhdGEo
KVswXS53aW5kUnVsZTsKIAotICAgIGNvbnRleHQtPmNsZWFyUGF0aCgpOworICAgIGNvbnRleHQt
PmJlZ2luUGF0aCgpOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gYmJveFRyYW5zZm9ybSA9IENH
QWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdlZW5SZWN0cyhDR1JlY3RNYWtlKDAsMCwxLDEpLCBD
R1JlY3QoYm91bmRpbmdCb3gpKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dmcvY2cvU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdSZXNvdXJjZUZpbHRlckNnLm1tCShyZXZpc2lvbiAxNzkz
OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1Jlc291cmNlRmlsdGVy
Q2cubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDIzIEBACiAjaWZkZWYgU1ZHX1NVUFBP
UlQKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGb3VuZGF0aW9uRXh0
cmFzLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKKyNpbmNs
dWRlICJTVkdGRUJsZW5kLmgiCisjaW5jbHVkZSAiU1ZHRkVDb2xvck1hdHJpeC5oIgorI2luY2x1
ZGUgIlNWR0ZFQ29tcG9uZW50VHJhbnNmZXIuaCIKKyNpbmNsdWRlICJTVkdGRUNvbXBvc2l0ZS5o
IgorI2luY2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgiCisjaW5jbHVkZSAiU1ZHRkVEaXNw
bGFjZW1lbnRNYXAuaCIKKyNpbmNsdWRlICJTVkdGRUZsb29kLmgiCisjaW5jbHVkZSAiU1ZHRkVH
YXVzc2lhbkJsdXIuaCIKKyNpbmNsdWRlICJTVkdGRUltYWdlLmgiCisjaW5jbHVkZSAiU1ZHRkVN
ZXJnZS5oIgorI2luY2x1ZGUgIlNWR0ZFT2Zmc2V0LmgiCisjaW5jbHVkZSAiU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nLmgiCisjaW5jbHVkZSAiU1ZHRkVUaWxlLmgiCisKICNpbmNsdWRlIDxRdWFydHpD
b3JlL0NvcmVJbWFnZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCw2ICs1NCw3IEBA
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBTVkdQcmV2aW91c0ZpbHQKIFNWR1Jlc291cmNlRmls
dGVyOjpTVkdSZXNvdXJjZUZpbHRlcigpCiAgICAgOiBtX2ZpbHRlckNJQ29udGV4dCgwKQogICAg
ICwgbV9maWx0ZXJDR0xheWVyKDApCisgICAgLCBtX3NhdmVkQ29udGV4dCgwKQogewogICAgIG1f
aW1hZ2VzQnlOYW1lID0gSGFyZFJldGFpbldpdGhOU1JlbGVhc2UoW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XSk7CiB9CkBAIC01MSwxOSArNjYsNDIgQEAgU1ZHUmVzb3VyY2VGaWx0
ZXI6On5TVkdSZXNvdXJjZUZpbHRlcigpCiAgICAgSGFyZFJlbGVhc2UobV9pbWFnZXNCeU5hbWUp
OwogfQogCi12b2lkIFNWR1Jlc291cmNlRmlsdGVyOjpwcmVwYXJlRmlsdGVyKGNvbnN0IEZsb2F0
UmVjdCAmYmJveCkKK1NWR0ZpbHRlckVmZmVjdCogU1ZHUmVzb3VyY2VGaWx0ZXI6OmNyZWF0ZUZp
bHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJFZmZlY3RUeXBlJiB0eXBlKQogewotICAgIGlmIChi
Ym94LmlzRW1wdHkoKSB8fCAhS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6ZmlsdGVyc0VuYWJsZWQo
KSB8fCBtX2VmZmVjdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZVF1YXJ0eio+KHJl
bmRlcmluZ0RldmljZSgpKS0+Y3VycmVudENHQ29udGV4dCgpOworICAgIHN3aXRjaCh0eXBlKQor
ICAgIHsKKyAgICAvKiBMaWdodCBzb3VyY2VzIGFyZSBjb250YWluZWQgYnkgdGhlIGRpZmZ1c2Uv
c3BlY3VsYXIgbGlnaHQgYmxvY2tzIAorICAgIGNhc2UgRkVfRElTVEFOVF9MSUdIVDogCisgICAg
Y2FzZSBGRV9QT0lOVF9MSUdIVDogCisgICAgY2FzZSBGRV9TUE9UX0xJR0hUOiAKKyAgICAqLwor
ICAgIGNhc2UgRkVfQkxFTkQ6IHJldHVybiBuZXcgU1ZHRkVCbGVuZCgpOworICAgIGNhc2UgRkVf
Q09MT1JfTUFUUklYOiByZXR1cm4gbmV3IFNWR0ZFQ29sb3JNYXRyaXgoKTsKKyAgICBjYXNlIEZF
X0NPTVBPTkVOVF9UUkFOU0ZFUjogcmV0dXJuIG5ldyBTVkdGRUNvbXBvbmVudFRyYW5zZmVyKCk7
CisgICAgY2FzZSBGRV9DT01QT1NJVEU6IHJldHVybiBuZXcgU1ZHRkVDb21wb3NpdGUoKTsKKy8v
ICBjYXNlIEZFX0NPTlZPTFZFX01BVFJJWDoKKyAgICBjYXNlIEZFX0RJRkZVU0VfTElHSFRJTkc6
IHJldHVybiBuZXcgU1ZHRkVEaWZmdXNlTGlnaHRpbmcoKTsKKyAgICBjYXNlIEZFX0RJU1BMQUNF
TUVOVF9NQVA6IHJldHVybiBuZXcgU1ZHRkVEaXNwbGFjZW1lbnRNYXAoKTsKKyAgICBjYXNlIEZF
X0ZMT09EOiByZXR1cm4gbmV3IFNWR0ZFRmxvb2QoKTsKKyAgICBjYXNlIEZFX0dBVVNTSUFOX0JM
VVI6IHJldHVybiBuZXcgU1ZHRkVHYXVzc2lhbkJsdXIoKTsKKyAgICBjYXNlIEZFX0lNQUdFOiBy
ZXR1cm4gbmV3IFNWR0ZFSW1hZ2UoKTsKKyAgICBjYXNlIEZFX01FUkdFOiByZXR1cm4gbmV3IFNW
R0ZFTWVyZ2UoKTsKKy8vICBjYXNlIEZFX01PUlBIT0xPR1k6CisgICAgY2FzZSBGRV9PRkZTRVQ6
IHJldHVybiBuZXcgU1ZHRkVPZmZzZXQoKTsKKyAgICBjYXNlIEZFX1NQRUNVTEFSX0xJR0hUSU5H
OiByZXR1cm4gbmV3IFNWR0ZFU3BlY3VsYXJMaWdodGluZygpOworICAgIGNhc2UgRkVfVElMRTog
cmV0dXJuIG5ldyBTVkdGRVRpbGUoKTsKKy8vICBjYXNlIEZFX1RVUkJVTEVOQ0U6CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQogCi0gICAgLy8gZ2V0IGEgQ0lDb250
ZXh0LCBhbmQgQ0dMYXllciBmb3IgZHJhd2luZyBpbi4KLSAgICBib29sIHVzZVNvZnR3YXJlID0g
ISBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpoYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoKTsKLSAg
ICBOU0RpY3Rpb25hcnkgKmNvbnRleHRPcHRpb25zID0gbmlsOwordm9pZCBTVkdSZXNvdXJjZUZp
bHRlcjo6cHJlcGFyZUZpbHRlcihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGJib3gpCit7CisgICAgaWYgKGJib3guaXNFbXB0eSgpIHx8IG1fZWZmZWN0cy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICh1c2VTb2Z0d2FyZSkKLSAgICAgICAg
Y29udGV4dE9wdGlvbnMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtl
eXM6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIGtDSUNvbnRleHRVc2VTb2Z0d2FyZVJl
bmRlcmVyLCBuaWxdOworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKIAogICAgIC8vIFVzZSBvZiBDR0JlZ2luL0VuZFRyYW5zcGFyZW5jeUxh
eWVyIGFyb3VuZCB0aGlzIGNhbGwgY2F1c2VzIG92ZXIgcmVsZWFzZQogICAgIC8vIG9mIGNnQ29u
dGV4dCBkdWUgdG8gaXQgYmVpbmcgY3JlYXRlZCBvbiBhbiBhdXRvcmVsZWFzZSBwb29sLCBhbmQg
cmVsZWFzZWQKQEAgLTcxLDMxICsxMDksMjggQEAgdm9pZCBTVkdSZXNvdXJjZUZpbHRlcjo6cHJl
cGFyZUZpbHRlcihjbwogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NDI1PgogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTQ3PgogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjQ3NzM1PgotICAgIE5TQXV0b3JlbGVh
c2VQb29sICpmaWx0ZXJDb250ZXh0UG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGlu
aXRdOwotICAgIG1fZmlsdGVyQ0lDb250ZXh0ID0gSGFyZFJldGFpbihbQ0lDb250ZXh0IGNvbnRl
eHRXaXRoQ0dDb250ZXh0OmNnQ29udGV4dCBvcHRpb25zOmNvbnRleHRPcHRpb25zXSk7CisgICAg
TlNBdXRvcmVsZWFzZVBvb2wqIGZpbHRlckNvbnRleHRQb29sID0gW1tOU0F1dG9yZWxlYXNlUG9v
bCBhbGxvY10gaW5pdF07CisgICAgbV9maWx0ZXJDSUNvbnRleHQgPSBIYXJkUmV0YWluKFtDSUNv
bnRleHQgY29udGV4dFdpdGhDR0NvbnRleHQ6Y2dDb250ZXh0IG9wdGlvbnM6bmlsXSk7CiAgICAg
W2ZpbHRlckNvbnRleHRQb29sIGRyYWluXTsKIAogICAgIG1fZmlsdGVyQ0dMYXllciA9IFttX2Zp
bHRlckNJQ29udGV4dCBjcmVhdGVDR0xheWVyV2l0aFNpemU6Q0dSZWN0KGJib3gpLnNpemUgaW5m
bzpOVUxMXTsKKyAgICBtX3NhdmVkQ29udGV4dCA9IGNvbnRleHQ7CiAKLSAgICBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IG5ldyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dFF1YXJ0eihDR0xheWVyR2V0Q29udGV4dChtX2ZpbHRlckNHTGF5ZXIpKTsKLSAgICByZW5kZXJp
bmdEZXZpY2UoKS0+cHVzaENvbnRleHQoZmlsdGVyQ29udGV4dCk7Ci0KLSAgICBmaWx0ZXJDb250
ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKC0xLjBmICogYmJveC54
KCksIC0xLjBmICogYmJveC55KCkpKTsKKyAgICBjb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4
dChDR0xheWVyR2V0Q29udGV4dChtX2ZpbHRlckNHTGF5ZXIpKTsKKyAgICBjb250ZXh0LT5zYXZl
KCk7CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSgt
MS4wZiAqIGJib3gueCgpLCAtMS4wZiAqIGJib3gueSgpKSk7CiB9CiAKLXZvaWQgU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmFwcGx5RmlsdGVyKGNvbnN0IEZsb2F0UmVjdCAmYmJveCkKK3ZvaWQgU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5RmlsdGVyKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgYmJveCkKIHsKLSAgICBpZiAoYmJveC5pc0VtcHR5KCkgfHwgIUtSZW5kZXJp
bmdEZXZpY2VRdWFydHo6OmZpbHRlcnNFbmFibGVkKCkgfHwgbV9lZmZlY3RzLmlzRW1wdHkoKSkK
KyAgICBpZiAoYmJveC5pc0VtcHR5KCkgfHwgbV9lZmZlY3RzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gcmVzdG9yZSB0aGUgcHJldmlvdXMgY29udGV4dCwgZGVsZXRlIHRo
ZSBmaWx0ZXIgY29udGV4dC4KLSAgICBkZWxldGUgKHJlbmRlcmluZ0RldmljZSgpLT5wb3BDb250
ZXh0KCkpOwotCiAgICAgLy8gYWN0dWFsbHkgYXBwbHkgdGhlIGZpbHRlciBlZmZlY3RzCi0gICAg
Q0lJbWFnZSAqaW5wdXRJbWFnZSA9IFtDSUltYWdlIGltYWdlV2l0aENHTGF5ZXI6bV9maWx0ZXJD
R0xheWVyXTsKLSAgICBOU0FycmF5ICpmaWx0ZXJTdGFjayA9IGdldENJRmlsdGVyU3RhY2soaW5w
dXRJbWFnZSk7CisgICAgQ0lJbWFnZSogaW5wdXRJbWFnZSA9IFtDSUltYWdlIGltYWdlV2l0aENH
TGF5ZXI6bV9maWx0ZXJDR0xheWVyXTsKKyAgICBOU0FycmF5KiBmaWx0ZXJTdGFjayA9IGdldENJ
RmlsdGVyU3RhY2soaW5wdXRJbWFnZSk7CiAgICAgaWYgKFtmaWx0ZXJTdGFjayBjb3VudF0pIHsK
LSAgICAgICAgQ0lJbWFnZSAqb3V0cHV0SW1hZ2UgPSBbW2ZpbHRlclN0YWNrIGxhc3RPYmplY3Rd
IHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2UiXTsKKyAgICAgICAgQ0lJbWFnZSogb3V0cHV0SW1h
Z2UgPSBbW2ZpbHRlclN0YWNrIGxhc3RPYmplY3RdIHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2Ui
XTsKICAgICAgICAgaWYgKG91dHB1dEltYWdlKSB7CiAgICAgICAgICAgICBDR1JlY3QgZmlsdGVy
UmVjdCA9IENHUmVjdChmaWx0ZXJCQm94Rm9ySXRlbUJCb3goYmJveCkpOwogICAgICAgICAgICAg
Q0dSZWN0IHRyYW5zbGF0ZWQgPSBmaWx0ZXJSZWN0OwpAQCAtMTE1LDYgKzE1MCwxMCBAQCB2b2lk
IFNWR1Jlc291cmNlRmlsdGVyOjphcHBseUZpbHRlcihjb25zCiAKICAgICBIYXJkUmVsZWFzZSht
X2ZpbHRlckNJQ29udGV4dCk7CiAgICAgbV9maWx0ZXJDSUNvbnRleHQgPSAwOworCisgICAgZGVs
ZXRlIGNvbnRleHQ7CisgICAgY29udGV4dCA9IG1fc2F2ZWRDb250ZXh0OworICAgIG1fc2F2ZWRD
b250ZXh0ID0gMDsKIH0KIAogTlNBcnJheSogU1ZHUmVzb3VyY2VGaWx0ZXI6OmdldENJRmlsdGVy
U3RhY2soQ0lJbWFnZSogaW5wdXRJbWFnZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3ZnL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQkocmV2aXNpb24g
MTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdSZXNvdXJjZU1h
c2tlckNnLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0KICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmZGVmIFNWR19TVVBQT1JUCkBA
IC0zMiw4ICszMSw4IEBACiAjaW1wb3J0ICJTVkdSZXNvdXJjZUltYWdlLmgiCiAjaW1wb3J0ICJT
VkdSZW5kZXJTdHlsZS5oIgogCi0jaW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCi0j
aW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bXBvcnQgIkNnU3VwcG9ydC5oIgogCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgog
I2ltcG9ydCA8UXVhcnR6Q29yZS9DSUZpbHRlci5oPgpAQCAtODgsNyArODcsNyBAQCBzdGF0aWMg
Q0lJbWFnZSogdHJhbnNmb3JtSW1hZ2VJbnRvR3JheXNjCiAgICAgcmV0dXJuIFttdWx0aXBsaWVk
R3JheXNjYWxlIHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2UiXTsKIH0KIAotdm9pZCBTVkdSZXNv
dXJjZU1hc2tlcjo6YXBwbHlNYXNrKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0
Cit2b2lkIFNWR1Jlc291cmNlTWFza2VyOjphcHBseU1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdAogewogICAgIGlmICghbV9t
YXNrKQogICAgICAgICByZXR1cm47CkBAIC0xMDYsOSArMTA1LDkgQEAgdm9pZCBTVkdSZXNvdXJj
ZU1hc2tlcjo6YXBwbHlNYXNrKGNvbnN0IAogICAgIFtjaUdyYXlzY2FsZUNvbnRleHQgZHJhd0lt
YWdlOmdyYXlzY2FsZU1hc2sgYXRQb2ludDpDR1BvaW50WmVybyBmcm9tUmVjdDpDR1JlY3RNYWtl
KDAsIDAsIHdpZHRoLCBoZWlnaHQpXTsKIAogICAgIENHSW1hZ2VSZWYgZ3JheXNjYWxlSW1hZ2Ug
PSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShncmF5c2NhbGVDb250ZXh0KTsKLSAgICBDR0Nv
bnRleHRSZWYgY2dDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZVF1YXJ0eio+
KHJlbmRlcmluZ0RldmljZSgpKS0+Y3VycmVudENHQ29udGV4dCgpOworICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRD
bGlwVG9NYXNrKGNnQ29udGV4dCwgQ0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSwgZ3Jh
eXNjYWxlSW1hZ2UpOwotICAgIAorCiAgICAgQ0dJbWFnZVJlbGVhc2UoZ3JheXNjYWxlSW1hZ2Up
OwogICAgIENHQ29udGV4dFJlbGVhc2UoZ3JheXNjYWxlQ29udGV4dCk7CiAgICAgZmFzdEZyZWUo
aW1hZ2VCdWZmZXIpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvZmlsdGVy
cy9jZy9TVkdGRUltYWdlQ2cubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdmcvZmlsdGVycy9jZy9TVkdGRUltYWdlQ2cubW0JKHJldmlzaW9uIDE3OTM4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvZmlsdGVycy9jZy9TVkdGRUltYWdlQ2cubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiU1ZHRkVIZWxwZXJzQ2cuaCIKLSNpbmNsdWRlICJRdWFydHpTdXBwb3J0LmgiCisj
aW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVu
dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9T
VkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGll
bnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE3ICsyNCwyMiBAQAogI2lmZGVmIFNWR19T
VVBQT1JUCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oIgogCi0jaW5j
bHVkZSAiS1JlbmRlcmluZ0RldmljZVF0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgogCiAjaW5jbHVkZSA8UUxpbmVhckdyYWRpZW50Pgor
I2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQYWludGVyUGF0aD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1ib29sIFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ6OnNldHVwKEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Citib29sIFNWR1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKLSAgICBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBxdENvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4dCk7Ci0gICAgUV9BU1NFUlQocXRDb250ZXh0ICE9
IDApOworICAgIFFQYWludGVyKiBwYWludGVyKGNvbnRleHQgPyBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSA6IDApOworICAgIFFfQVNTRVJUKHBhaW50ZXIpOworCisgICAgUVBhaW50ZXJQYXRo
KiBwYXRoKGNvbnRleHQgPyBjb250ZXh0LT5jdXJyZW50UGF0aCgpIDogMCk7CisgICAgUV9BU1NF
UlQocGF0aCk7CiAKICAgICBpZiAobGlzdGVuZXIoKSkKICAgICAgICAgbGlzdGVuZXIoKS0+cmVz
b3VyY2VOb3RpZmljYXRpb24oKTsKQEAgLTQzLDcgKzQ4LDcgQEAgYm9vbCBTVkdQYWludFNlcnZl
ckxpbmVhckdyYWRpZW50OjpzZXR1cAogCiAgICAgZG91YmxlIHgxLCB4MiwgeTEsIHkyOwogICAg
IGlmIChib3VuZGluZ0JveE1vZGUoKSkgewotICAgICAgICBRUmVjdEYgYmJveCA9IHF0Q29udGV4
dC0+cGF0aEJCb3goKTsKKyAgICAgICAgUVJlY3RGIGJib3ggPSBwYXRoLT5ib3VuZGluZ1JlY3Qo
KTsKICAgICAgICAgeDEgPSBkb3VibGUoYmJveC5sZWZ0KCkpICsgKGRvdWJsZShncmFkaWVudFN0
YXJ0KCkueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lkdGgoKSkpOwogICAgICAgICB5MSA9
IGRvdWJsZShiYm94LnRvcCgpKSArIChkb3VibGUoZ3JhZGllbnRTdGFydCgpLnkoKSAvIDEwMC4w
KSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7CiAgICAgICAgIHgyID0gZG91YmxlKGJib3gubGVm
dCgpKSArIChkb3VibGUoZ3JhZGllbnRFbmQoKS54KCkgLyAxMDAuMCkgICogZG91YmxlKGJib3gu
d2lkdGgoKSkpOwpAQCAtNTUsOCArNjAsOCBAQCBib29sIFNWR1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQ6OnNldHVwCiAgICAgICAgIHkyID0gZ3JhZGllbnRFbmQoKS55KCk7CiAgICAgfQogCi0g
ICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0UGVuKFF0OjpOb1Blbik7Ci0gICAgcXRDb250ZXh0
LT5wYWludGVyKCkuc2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOworICAgIHBhaW50ZXItPnNldFBlbihR
dDo6Tm9QZW4pOworICAgIHBhaW50ZXItPnNldEJydXNoKFF0OjpOb0JydXNoKTsKIAogICAgIFFM
aW5lYXJHcmFkaWVudCBncmFkaWVudChRUG9pbnRGKHgxLCB5MSksIFFQb2ludEYoeDIsIHkyKSk7
CiAgICAgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRVBFQVQpCkBAIC03NSw4
ICs4MCw4IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudDo6c2V0dXAKIAogICAg
ICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGllbnQpOwogCi0gICAgICAgIHF0Q29udGV4dC0+cGFpbnRl
cigpLnNldEJydXNoKGJydXNoKTsKLSAgICAgICAgcXRDb250ZXh0LT5zZXRGaWxsUnVsZShyZW5k
ZXJTdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSk7CisgICAgICAgIHBhaW50ZXItPnNldEJy
dXNoKGJydXNoKTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUocmVuZGVyU3R5bGUtPnN2
Z1N0eWxlKCktPmZpbGxSdWxlKCkpOwogICAgIH0KIAogICAgIGlmICgodHlwZSAmIEFwcGx5VG9T
dHJva2VUYXJnZXRUeXBlKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkp
IHsKQEAgLTg4LDcgKzkzLDcgQEAgYm9vbCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Ojpz
ZXR1cAogICAgICAgICBzZXRQZW5Qcm9wZXJ0aWVzKG9iamVjdCwgcmVuZGVyU3R5bGUsIHBlbik7
CiAgICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7CiAKLSAgICAgICAgcXRDb250ZXh0LT5wYWlu
dGVyKCkuc2V0UGVuKHBlbik7CisgICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwogICAgIH0K
IAogICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcv
cXQvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyUGF0dGVyblF0LmNwcAkocmV2aXNp
b24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdQYWludFNl
cnZlclBhdHRlcm5RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxMyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAorYm9vbCBTVkdQYWludFNlcnZlclBh
dHRlcm46OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogUmVhY3RpdmF0ZSBvbGQgcGF0dGVybiBjb2RlCiAKIC8qCi0gICAgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdCogcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdCo+KGNvbnRleHQpOwotICAgIFFfQVNTRVJUKHF0Q29udGV4dCAhPSAwKTsKKyAgICBRUGFp
bnRlciogcGFpbnRlcihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsK
KyAgICBRX0FTU0VSVChwYWludGVyKTsKIAogICAgIFFQYWludGVyUGF0aCogX3BhdGggPSBzdGF0
aWNfY2FzdDxRUGFpbnRlclBhdGgqPihxdENvbnRleHQtPnBhdGgoKSk7CiAgICAgUV9BU1NFUlQo
X3BhdGggIT0gMCk7CkBAIC00Myw4ICs0Myw4IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
OjpzZXR1cChLUmVuZGUKIAogICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IG9iamVjdC0+
c3R5bGUoKTsKIAotICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihRdDo6Tm9QZW4pOwot
ICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldEJydXNoKFF0OjpOb0JydXNoKTsKKyAgICBwYWlu
dGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVz
aCk7CiAgICAgUUltYWdlKiBwYXR0ZXJuaW1hZ2UgPSBuZXcgUUltYWdlKHRpbGUoKS0+Yml0cygp
LCB0aWxlKCktPndpZHRoKCksIHRpbGUoKS0+aGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0Iz
Ml9QcmVtdWx0aXBsaWVkKTsKICAgICBwYXR0ZXJuaW1hZ2UtPnNldEFscGhhQnVmZmVyKHRydWUp
OwogICAgIGlmICh0eXBlICYgQVBQTFlfVE9fRklMTCkgewpAQCAtNTMsNyArNTMsNyBAQCBib29s
IFNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXAoS1JlbmRlCiAgICAgICAgIEtSZW5kZXJpbmdG
aWxsUGFpbnRlciBmaWxsUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIo
cmVuZGVyU3R5bGUsIG9iamVjdCk7CiAgICAgICAgIFFCcnVzaCBicnVzaChRUGl4bWFwOjpmcm9t
SW1hZ2UoKnBhdHRlcm5pbWFnZSkpOwogICAgICAgICBfcGF0aC0+c2V0RmlsbFJ1bGUoZmlsbFBh
aW50ZXIuZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBRdDo6T2RkRXZlbkZpbGwgOiBRdDo6
V2luZGluZ0ZpbGwpOwotICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChicnVz
aCk7CisgICAgICAgIHBhaW50ZXItPnNldEJydXNoKGJydXNoKTsKICAgICB9CiAgICAgaWYgKHR5
cGUgJiBBUFBMWV9UT19TVFJPS0UpIHsKICAgICAgICAgLy9RQ29sb3IgYyA9IGNvbG9yKCk7CkBA
IC02NSwxMCArNjUsMTAgQEAgYm9vbCBTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKEtSZW5k
ZQogCiAgICAgICAgIHNldFBlblByb3BlcnRpZXMoc3Ryb2tlUGFpbnRlciwgcGVuKTsKICAgICAg
ICAgcGVuLnNldEJydXNoKGJydXNoKTsKLSAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0
UGVuKHBlbik7CisgICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwogICAgIH0KIAotICAgIHF0
Q29udGV4dC0+cGFpbnRlcigpLmRyYXdQYXRoKCpfcGF0aCk7CisgICAgcGFpbnRlci0+ZHJhd1Bh
dGgoKl9wYXRoKTsKIAogICAgIGRlbGV0ZSBwYXR0ZXJuaW1hZ2U7CiAqLwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJRdC5j
cHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQv
U1ZHUGFpbnRTZXJ2ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMSBAQAog
I2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKIAorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5o
IgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgogI2luY2x1ZGUgIlJlbmRlclBhdGgu
aCIKIAotI2luY2x1ZGUgPFFQZW4+CisjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVZl
Y3Rvcj4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFNWR1Bh
aW50U2VydmVyOjpzZXRQZW5Qcm9wZXJ0aWVzKGNvCiAgICAgfQogfQogCi12b2lkIFNWR1BhaW50
U2VydmVyOjpkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJQYXRoKiBwYXRoLCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgU1ZHUGFp
bnRTZXJ2ZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyUGF0
aCogcGF0aCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKCFzZXR1
cChjb250ZXh0LCBwYXRoLCB0eXBlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzUsMjEgKzc1LDI2
IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OmRyYXcoS1JlbmRlcmluZ0RldmkKICAgICB0ZWFyZG93
bihjb250ZXh0LCBwYXRoLCB0eXBlKTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlcjo6dGVhcmRv
d24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWlu
dFRhcmdldFR5cGUpIGNvbnN0Cit2b2lkIFNWR1BhaW50U2VydmVyOjp0ZWFyZG93bihHcmFwaGlj
c0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25z
dAogewogICAgIC8vIG5vLW9wCiB9CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnJlbmRlclBhdGgo
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgs
IFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAordm9pZCBTVkdQYWludFNlcnZlcjo6cmVu
ZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRo
LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogcmVu
ZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOwotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQq
IHF0Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihjb250
ZXh0KTsKKworICAgIFFQYWludGVyKiBwYWludGVyKGNvbnRleHQgPyBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKSA6IDApOworICAgIFFfQVNTRVJUKHBhaW50ZXIpOworCisgICAgUVBhaW50ZXJQ
YXRoKiBwYWludGVyUGF0aChjb250ZXh0ID8gY29udGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOwor
ICAgIFFfQVNTRVJUKHBhaW50ZXJQYXRoKTsKIAogICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxs
VGFyZ2V0VHlwZSkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkKLSAgICAg
ICAgcXRDb250ZXh0LT5maWxsUGF0aCgpOworICAgICAgICBwYWludGVyLT5maWxsUGF0aCgqcGFp
bnRlclBhdGgsIHBhaW50ZXItPmJydXNoKCkpOwogCiAgICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0
cm9rZVRhcmdldFR5cGUpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkK
LSAgICAgICAgcXRDb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgIHBhaW50ZXItPnN0cm9r
ZVBhdGgoKnBhaW50ZXJQYXRoLCBwYWludGVyLT5wZW4oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50
U2VydmVyUmFkaWFsR3JhZGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0LmNwcAkocmV2
aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdQYWlu
dFNlcnZlclJhZGlhbEdyYWRpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwzMSArMjQs
MzYgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnQuaCIKIAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKIAogI2luY2x1ZGUg
PG1hdGguaD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CiAj
aW5jbHVkZSA8UVJhZGlhbEdyYWRpZW50PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wg
U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudDo6IHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRU
eXBlIHR5cGUpIGNvbnN0Citib29sIFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6OiBzZXR1
cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwg
U1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdCogcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dCo+KGNvbnRleHQpOwotICAgIFFfQVNTRVJUKHF0Q29udGV4dCAhPSAwKTsKKyAgICBRUGFpbnRl
ciogcGFpbnRlcihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsKKyAg
ICBRX0FTU0VSVChwYWludGVyKTsKKworICAgIFFQYWludGVyUGF0aCogcGF0aChjb250ZXh0ID8g
Y29udGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOworICAgIFFfQVNTRVJUKHBhdGgpOwogCiAgICAg
aWYgKGxpc3RlbmVyKCkpCiAgICAgICAgIGxpc3RlbmVyKCktPnJlc291cmNlTm90aWZpY2F0aW9u
KCk7CiAKICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAK
LSAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4oUXQ6Ok5vUGVuKTsKLSAgICBxdENvbnRl
eHQtPnBhaW50ZXIoKS5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7Ci0gICAgUU1hdHJpeCBtYXQgPSBx
dENvbnRleHQtPmN0bSgpOworICAgIHBhaW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOworICAgIHBh
aW50ZXItPnNldEJydXNoKFF0OjpOb0JydXNoKTsKKyAgICBRTWF0cml4IG1hdCA9IHBhaW50ZXIt
Pm1hdHJpeCgpOwogCiAgICAgZG91YmxlIGN4LCBmeCwgY3ksIGZ5LCByOwogICAgIGlmIChib3Vu
ZGluZ0JveE1vZGUoKSkgewotICAgICAgICBRUmVjdEYgYmJveCA9IHF0Q29udGV4dC0+cGF0aEJC
b3goKTsKKyAgICAgICAgUVJlY3RGIGJib3ggPSBwYXRoLT5ib3VuZGluZ1JlY3QoKTsgCiAgICAg
ICAgIGN4ID0gZG91YmxlKGJib3gubGVmdCgpKSArIChkb3VibGUoZ3JhZGllbnRDZW50ZXIoKS54
KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgpKSk7CiAgICAgICAgIGN5ID0gZG91Ymxl
KGJib3gudG9wKCkpICsgKGRvdWJsZShncmFkaWVudENlbnRlcigpLnkoKSAvIDEwMC4wKSAqIGRv
dWJsZShiYm94LmhlaWdodCgpKSk7CiAgICAgICAgIGZ4ID0gZG91YmxlKGJib3gubGVmdCgpKSAr
IChkb3VibGUoZ3JhZGllbnRGb2NhbCgpLngoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LndpZHRo
KCkpKSAtIGN4OwpAQCAtMTAwLDE1ICsxMDUsMTUgQEAgYm9vbCBTVkdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50Ojogc2V0dQogCiAgICAgLy8gQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnMg
PSBncmFkaWVudFRyYW5zZm9ybSgpOwogICAgIC8vIGdyYWRpZW50VHJhbnMubWFwKGN4LCBjeSwg
JmN4LCAmY3kpOwotICAgIC8vIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldE1hdHJpeChtYXQpOwor
ICAgIC8vIHBhaW50ZXItPnNldE1hdHJpeChtYXQpOwogCiAgICAgaWYgKCh0eXBlICYgQXBwbHlU
b0ZpbGxUYXJnZXRUeXBlKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7
CiAgICAgICAgIGZpbGxDb2xvckFycmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9wYWNp
dHkpOwogCiAgICAgICAgIFFCcnVzaCBicnVzaChncmFkaWVudCk7CiAKLSAgICAgICAgcXRDb250
ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2goYnJ1c2gpOwotICAgICAgICBxdENvbnRleHQtPnNldEZp
bGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpKTsKKyAgICAgICAgcGFp
bnRlci0+c2V0QnJ1c2goYnJ1c2gpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShyZW5k
ZXJTdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSk7CiAgICAgfQogCiAgICAgaWYgKCh0eXBl
ICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5o
YXNTdHJva2UoKSkgewpAQCAtMTIwLDcgKzEyNSw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJSYWRp
YWxHcmFkaWVudDo6IHNldHUKICAgICAgICAgc2V0UGVuUHJvcGVydGllcyhvYmplY3QsIHJlbmRl
clN0eWxlLCBwZW4pOwogICAgICAgICBwZW4uc2V0QnJ1c2goYnJ1c2gpOwogCi0gICAgICAgIHF0
Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihwZW4pOworICAgICAgICBwYWludGVyLT5zZXRQZW4o
cGVuKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0LmNw
cAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9T
VkdQYWludFNlcnZlclNvbGlkUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNyArMjQsMjAg
QEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIK
IAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKIAorI2luY2x1ZGUgPFFQYWludGVyPgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAo
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJT
b2xpZDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0
KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewotICAgIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0UXQqIHF0Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0UXQqPihjb250ZXh0KTsKKyAgICBRUGFpbnRlciogcGFpbnRlcihjb250ZXh0ID8g
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsKKyAgICBRX0FTU0VSVChwYWludGVyKTsK
IAogICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLSAgICAv
LyBUT0RPPyBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRPcGFjaXR5KHJlbmRlclN0eWxlLT5vcGFj
aXR5KCkpOworICAgIC8vIFRPRE8/IHBhaW50ZXItPnNldE9wYWNpdHkocmVuZGVyU3R5bGUtPm9w
YWNpdHkoKSk7CiAKICAgICBRQ29sb3IgYyA9IGNvbG9yKCk7CiAKQEAgLTQyLDggKzQ1LDggQEAg
Ym9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChLUmVuZGVyaQogICAgICAgICBjLnNldEFs
cGhhRihyZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7CiAKICAgICAgICAg
UUJydXNoIGJydXNoKGMpOwotICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChi
cnVzaCk7Ci0gICAgICAgIHF0Q29udGV4dC0+c2V0RmlsbFJ1bGUocmVuZGVyU3R5bGUtPnN2Z1N0
eWxlKCktPmZpbGxSdWxlKCkpOworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChicnVzaCk7Cisg
ICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxs
UnVsZSgpKTsKIAogICAgICAgICAvKiBpZihpc1BhaW50aW5nVGV4dCgpKSAuLi4gKi8KICAgICB9
CkBAIC01Myw3ICs1Niw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAoS1JlbmRl
cmkKIAogICAgICAgICBRUGVuIHBlbihjKTsKICAgICAgICAgc2V0UGVuUHJvcGVydGllcyhvYmpl
Y3QsIHJlbmRlclN0eWxlLCBwZW4pOwotICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQ
ZW4ocGVuKTsKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CiAKICAgICAgICAgLyogaWYo
aXNQYWludGluZ1RleHQoKSkgLi4uICovCiAgICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VDbGlwcGVyUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1Jlc291cmNlQ2xpcHBlclF0LmNwcAko
cmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdS
ZXNvdXJjZUNsaXBwZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDIyICsyMiwyMyBAQAog
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlQ2xpcHBlci5o
IgogCiAjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIK
IAotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNs
aXAoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3QKK3ZvaWQgU1ZHUmVzb3VyY2VD
bGlwcGVyOjphcHBseUNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94KSBjb25zdAogewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBj
b250ZXh0ID0gcmVuZGVyaW5nRGV2aWNlKCktPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgS1JlbmRl
cmluZ0RldmljZUNvbnRleHRRdCogcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRRdCo+KGNvbnRleHQpOwogICAgIGlmIChtX2NsaXBEYXRhLmNsaXBEYXRhKCku
c2l6ZSgpIDwgMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29udGV4dC0+Y2xlYXJQYXRoKCk7
CisgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7CiAKICAgICBRUGFpbnRlclBhdGggbmV3UGF0aDsK
IApAQCAtMTEzLDcgKzExNCwxMCBAQCB2b2lkIFNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlw
KGNvbnN0CiAgICAgICAgIC8vIH0KICAgICB9CiAKLSAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5z
ZXRDbGlwUGF0aChuZXdQYXRoKTsKKyAgICBRUGFpbnRlciogcGFpbnRlcihjb250ZXh0ID8gY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsKKyAgICBRX0FTU0VSVChwYWludGVyKTsKKwor
ICAgIHBhaW50ZXItPnNldENsaXBQYXRoKG5ld1BhdGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdSZXNvdXJj
ZUZpbHRlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2
Zy9xdC9TVkdSZXNvdXJjZUZpbHRlclF0LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdSZXNvdXJjZUZpbHRlclF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsOSArMjAsOSBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKICNpZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1
ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzQs
MTIgKzM0LDE4IEBAIFNWR1Jlc291cmNlRmlsdGVyOjp+U1ZHUmVzb3VyY2VGaWx0ZXIoKQogewog
fQogCi12b2lkIFNWR1Jlc291cmNlRmlsdGVyOjpwcmVwYXJlRmlsdGVyKGNvbnN0IEZsb2F0UmVj
dCYgYmJveCkKK1NWR0ZpbHRlckVmZmVjdCogU1ZHUmVzb3VyY2VGaWx0ZXI6OmNyZWF0ZUZpbHRl
ckVmZmVjdChjb25zdCBTVkdGaWx0ZXJFZmZlY3RUeXBlJikKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50IG1lIDotKQorICAgIHJldHVybiAwOworfQorCit2b2lkIFNWR1Jlc291cmNlRmlsdGVy
OjpwcmVwYXJlRmlsdGVyKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBGbG9hdFJlY3QmKQogewog
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgbWUgOi0pCiB9CiAKLXZvaWQgU1ZHUmVzb3VyY2VGaWx0
ZXI6OmFwcGx5RmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYgYmJveCkKK3ZvaWQgU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5RmlsdGVyKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBGbG9hdFJlY3QmKQog
ewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgbWUgOi0pCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdSZXNvdXJjZU1hc2tlclF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdSZXNvdXJjZU1hc2tlclF0LmNw
cAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9T
VkdSZXNvdXJjZU1hc2tlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTMgKzIwLDEzIEBA
CiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VNYXNrZXIu
aCIKIAogI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VNYXNrZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFNWR1Jlc291cmNlTWFza2VyOjphcHBseU1h
c2soY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3QKK3ZvaWQgU1ZHUmVzb3VyY2VN
YXNrZXI6OmFwcGx5TWFzayhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgbWUgOi0pCiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCShyZXZpc2lvbiAxNzkzOCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2ltcG9ydCAiU1ZHUmVzb3VyY2VJbWFnZS5oIgogCiAjaW1wb3J0ICIuLi9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUuaCIKIApAQCAtMTc4LDQg
KzE3OSwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsCiAgICAg
Q0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAorR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0Rm9ySW1hZ2UoU1ZHUmVzb3VyY2VJbWFnZSogaW1hZ2UpCit7CisgICAgQ0dMYXllclJl
ZiBjZ0xheWVyID0gaW1hZ2UtPmNnTGF5ZXIoKTsKKworICAgIC8vIEZJWE1FOiBVc2luZyBjdXJy
ZW50Q29udGV4dCAvIGdyYXBoaWNzUG9ydCBoZXJlIGlzIGEgVE9UQUwgaGFjay4gU2VlIFNWR01h
c2tFbGVtZW50IGNvbW1lbnQgZm9yIGEgcG9zc2libGUgc29sdXRpb24hCisgICAgQ0dDb250ZXh0
UmVmIGN1cnJlbnRDb250ZXh0ID0gKENHQ29udGV4dFJlZikgW1tOU0dyYXBoaWNzQ29udGV4dCBj
dXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKKworICAgIGlmICghY2dMYXllcikgeworICAg
ICAgICBBU1NFUlQoY3VycmVudENvbnRleHQpOworCisgICAgICAgIC8vIEZJWE1FOiB3ZSBtaWdo
dCBub3QgZ2V0IGJhY2sgYSBsYXllciBpZiB0aGlzIGlzIGEgbG9hZGVkIGltYWdlCisgICAgICAg
IC8vIG1heWJlIHRoaXMgbG9naWMgc2hvdWxkIGdvIGludG8gU1ZHUmVzb3VyY2VJbWFnZT8KKyAg
ICAgICAgY2dMYXllciA9IENHTGF5ZXJDcmVhdGVXaXRoQ29udGV4dChjdXJyZW50Q29udGV4dCwg
Q0dTaXplKGltYWdlLT5zaXplKCkgKyBJbnRTaXplKDEsMSkpLCBOVUxMKTsgIC8vIEZJWE1FICsg
MSBpcyBhIGhhY2sKKyAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBjb21wb3NpdGUgdGhlIG9y
aWdpbmFsIGltYWdlIG9udG8gdGhlIGxheWVyLi4uCisgICAgICAgIGltYWdlLT5zZXRDR0xheWVy
KGNnTGF5ZXIpOworICAgICAgICBDR0xheWVyUmVsZWFzZShjZ0xheWVyKTsKKyAgICB9CisgICAg
cmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQoQ0dMYXllckdldENvbnRleHQoY2dMYXllcikpOwor
fQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAko
cmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0dyYXBoaWNzQ29udGV4dFF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTAgKzQ5LDYgQEAKICNkZWZpbmUgTV9QSSAzLjE0
MTU5MjY1MzU4OTc5MzIzODQ2CiAjZW5kaWYKIAotI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZVF0LmgiCi0jZW5kaWYKLQogI2RlZmluZSBub3RJbXBsZW1lbnRl
ZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWRcbiIs
IF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMjIwLDYgKzIxNiw5IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IGZvY3VzUmluZ0NsaXA7CiAg
ICAgVGV4dFNoYWRvdyBzaGFkb3c7CiAKKyAgICAvLyBPbmx5IHVzZWQgYnkgU1ZHIGZvciBub3cu
CisgICAgUVBhaW50ZXJQYXRoIGN1cnJlbnRQYXRoOworCiBwcml2YXRlOgogICAgIFFQYWludGVy
KiBwYWludGVyOwogfTsKQEAgLTQ4Nyw2ICs0ODYsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIG1fZGF0YS0+cCgpLmZpbGxSZWN0KHJlY3QsIFFDb2xv
cihjKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQoreworICAgIG1f
ZGF0YS0+Y3VycmVudFBhdGggPSBRUGFpbnRlclBhdGgoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBtX2RhdGEtPmN1cnJlbnRQ
YXRoID0gKihwYXRoLnBsYXRmb3JtUGF0aCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldEZpbGxSdWxlKFdpbmRSdWxlIHJ1bGUpCit7CisgICAgbV9kYXRhLT5jdXJyZW50UGF0aC5z
ZXRGaWxsUnVsZShydWxlID09IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpX
aW5kaW5nRmlsbCk7Cit9CisKK1BsYXRmb3JtUGF0aCogR3JhcGhpY3NDb250ZXh0OjpjdXJyZW50
UGF0aCgpCit7CisgICAgcmV0dXJuICZtX2RhdGEtPmN1cnJlbnRQYXRoOworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCkBAIC02MTIsNyArNjMxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVJlY3QoY29uc3QgRgogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFFQYWludGVyUGF0aCBwYXRoOyBwYXRoLmFkZFJlY3QocmVjdCk7Cisg
ICAgUVBhaW50ZXJQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogICAgIFFQZW4g
blBlbiA9IG1fZGF0YS0+cCgpLnBlbigpOwogICAgIG5QZW4uc2V0V2lkdGhGKHdpZHRoKTsKICAg
ICBtX2RhdGEtPnAoKS5zdHJva2VQYXRoKHBhdGgsIG5QZW4pOwpAQCAtODMwLDEzICs4NTAsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbAogICAgIG1fZGF0YS0+
cCgpLnNldEJydXNoKFFCcnVzaChjb2xvcikpOwogfQogCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLUtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmluZ0Rl
dmljZUNvbnRleHQoKQorR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0Rm9ySW1hZ2UoU1ZHUmVzb3Vy
Y2VJbWFnZSopCiB7Ci0gICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KHBs
YXRmb3JtQ29udGV4dCgpKTsKLX0KLSNlbmRpZgotCisgICAgLy8gRklYTUUhCisgICAgcmV0dXJu
IDA7CiB9CiAKIC8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
NiBAQAogI2luY2x1ZGUgIlJlbmRlckZvcmVpZ25PYmplY3QuaCIKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJT
VkdGb3JlaWduT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCkBAIC00
OSwyMiArNDgsMTAgQEAgdm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZgog
ICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2Uo
KTsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmljZS0+Y3VycmVu
dENvbnRleHQoKTsKLSAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKLSAgICBpZiAo
IWNvbnRleHQpIHsKLSAgICAgICAgLy8gT25seSBuZWVkIHRvIHNldHVwIGZvciBLQ2FudmFzIHJl
bmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCi0gICAgICAgIGNvbnRleHQg
PSBwYWludEluZm8uY29udGV4dC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOwotICAg
ICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBzaG91bGRQb3BDb250
ZXh0ID0gdHJ1ZTsKLSAgICB9Ci0KICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwotCi0g
ICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRY
LCBwYXJlbnRZKSk7Ci0gICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwot
ICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7Ci0KKyAg
ICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0
ZShwYXJlbnRYLCBwYXJlbnRZKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShs
b2NhbFRyYW5zZm9ybSgpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5z
bGF0aW9uRm9yQXR0cmlidXRlcygpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChnZXRD
bGlwUmVjdChwYXJlbnRYLCBwYXJlbnRZKSk7CiAKICAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUo
KS0+b3BhY2l0eSgpOwpAQCAtNzksMTEgKzY2LDYgQEAgdm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0
OjpwYWludChQYWludEluZgogICAgIGlmIChvcGFjaXR5IDwgMS4wZikKICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKLSAgICBpZiAoc2hvdWxkUG9w
Q29udGV4dCkgewotICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAgICAgICAgZGVsZXRl
IGNvbnRleHQ7Ci0gICAgfQotCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIH0K
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAJKHJldmlzaW9uIDE3OTM4KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsy
OSwxMyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKICNpbmNsdWRlICJT
VkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2lu
Y2x1ZGUgIlNWR1Jlc291cmNlTWFza2VyLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VNYXJrZXIu
aCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVy
aW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0xNzMsNjIgKzE3Miw0MyBAQCB2b2lkIFJlbmRlclBhdGg6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJCiAKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB8fCBzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IHBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdE
ZXZpY2UoKTsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmljZS0+
Y3VycmVudENvbnRleHQoKTsKLSAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKLSAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgLy8gTmVlZCB0byBzZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQg
aGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgotICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLmNv
bnRleHQtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKLSAgICAgICAgZGV2aWNlLT5w
dXNoQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7Ci0g
ICAgfQogCi0gICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOworICAgIHBh
aW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENU
TShsb2NhbFRyYW5zZm9ybSgpKTsKIAogICAgIC8vIHNldHVwIHRvIGFwcGx5IGZpbHRlcnMKICAg
ICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBz
dHlsZSgpLT5zdmdTdHlsZSgpLT5maWx0ZXIoKS5zdWJzdHJpbmcoMSkpOwotICAgIGlmIChmaWx0
ZXIpIHsKLSAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKHJlbGF0aXZlQkJveCh0cnVlKSk7
Ci0gICAgICAgIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgfQorICAg
IGlmIChmaWx0ZXIpCisgICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihwYWludEluZm8uY29u
dGV4dCwgcmVsYXRpdmVCQm94KHRydWUpKTsKIAogICAgIGlmIChTVkdSZXNvdXJjZUNsaXBwZXIq
IGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChkb2N1bWVudCgpLCBzdHlsZSgpLT5zdmdTdHlsZSgp
LT5jbGlwUGF0aCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChy
ZWxhdGl2ZUJCb3godHJ1ZSkpOworICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAocGFpbnRJbmZv
LmNvbnRleHQsIHJlbGF0aXZlQkJveCh0cnVlKSk7CiAKICAgICBpZiAoU1ZHUmVzb3VyY2VNYXNr
ZXIqIG1hc2tlciA9IGdldE1hc2tlckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUo
KS0+bWFza0VsZW1lbnQoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBtYXNrZXItPmFwcGx5TWFz
ayhyZWxhdGl2ZUJCb3godHJ1ZSkpOworICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhwYWludElu
Zm8uY29udGV4dCwgcmVsYXRpdmVCQm94KHRydWUpKTsKIAotICAgIGNvbnRleHQtPmNsZWFyUGF0
aCgpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5iZWdpblBhdGgoKTsKICAgICAKICAgICBTVkdQ
YWludFNlcnZlciogZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFp
bnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7CiAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewotICAg
ICAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5hZGRQYXRoKHBhdGgoKSk7CiAgICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xp
ZW50KHRoaXMpOwotICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPmRyYXcoY29udGV4dCwgdGhpcywg
QXBwbHlUb0ZpbGxUYXJnZXRUeXBlKTsKKyAgICAgICAgZmlsbFBhaW50U2VydmVyLT5kcmF3KHBh
aW50SW5mby5jb250ZXh0LCB0aGlzLCBBcHBseVRvRmlsbFRhcmdldFR5cGUpOwogICAgIH0KICAg
ICBTVkdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6
OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwogICAgIGlmIChzdHJva2VQYWludFNl
cnZlcikgewotICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgoKSk7IC8vIHBhdGggaXMgY2xl
YXJlZCB3aGVuIGZpbGxlZC4KKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFBhdGgocGF0
aCgpKTsgLy8gcGF0aCBpcyBjbGVhcmVkIHdoZW4gZmlsbGVkLgogICAgICAgICBzdHJva2VQYWlu
dFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOwotICAgICAgICBzdHJva2VQYWludFNlcnZl
ci0+ZHJhdyhjb250ZXh0LCB0aGlzLCBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSk7CisgICAgICAg
IHN0cm9rZVBhaW50U2VydmVyLT5kcmF3KHBhaW50SW5mby5jb250ZXh0LCB0aGlzLCBBcHBseVRv
U3Ryb2tlVGFyZ2V0VHlwZSk7CiAgICAgfQogCiAgICAgZHJhd01hcmtlcnNJZk5lZWRlZChwYWlu
dEluZm8uY29udGV4dCwgcGFpbnRJbmZvLnJlY3QsIHBhdGgoKSk7CiAKICAgICAvLyBhY3R1YWxs
eSBhcHBseSB0aGUgZmlsdGVyCiAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5hcHBs
eUZpbHRlcihyZWxhdGl2ZUJCb3godHJ1ZSkpOworICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVy
KHBhaW50SW5mby5jb250ZXh0LCByZWxhdGl2ZUJCb3godHJ1ZSkpOwogCi0gICAgLy8gcmVzdG9y
ZSBkcmF3aW5nIHN0YXRlCi0gICAgaWYgKCFzaG91bGRQb3BDb250ZXh0KQotICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIGVsc2UgewotICAgICAgICBkZXZpY2UtPnBv
cENvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGNvbnRleHQ7Ci0gICAgfQorICAgIHBhaW50SW5m
by5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyUGF0aDo6YWJzb2x1dGVSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgX3R4LCBpbnQgX3R5KQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAxNzkzOCkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRl
ICJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlTWFza2VyLmgiCi0j
aW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIK
QEAgLTE0OCwzOSArMTQ3LDMxIEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWlu
dEluZm8KICAgICBpZiAoIWZpcnN0Q2hpbGQoKSAmJiAhZmlsdGVyKQogICAgICAgICByZXR1cm47
IC8vIFNwZWM6IGdyb3VwcyB3L28gY2hpbGRyZW4gc3RpbGwgbWF5IHJlbmRlciBmaWx0ZXIgY29u
dGVudC4KICAgICAKLSAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZp
Y2UoKTsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogZGV2aWNlQ29udGV4dCA9IGRldmlj
ZS0+Y3VycmVudENvbnRleHQoKTsKLSAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsK
LSAgICBpZiAoIWRldmljZUNvbnRleHQpIHsKLSAgICAgICAgLy8gSSBvbmx5IG5lZWQgdG8gc2V0
dXAgZm9yIEtDYW52YXMgcmVuZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4K
LSAgICAgICAgZGV2aWNlQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5jcmVhdGVSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIGRldmljZS0+cHVzaENvbnRleHQoZGV2aWNlQ29u
dGV4dCk7Ci0gICAgICAgIHNob3VsZFBvcENvbnRleHQgPSB0cnVlOwotICAgIH0gZWxzZQotICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5z
YXZlKCk7CiAKICAgICBpZiAocGFyZW50WCAhPSAwIHx8IHBhcmVudFkgIT0gMCkgewogICAgICAg
ICAvLyBUcmFuc2xhdGUgZnJvbSBwYXJlbnQgb2Zmc2V0cyAoaHRtbCByZW5kZXJlcnMpIHRvIGEg
cmVsYXRpdmUgdHJhbnNmb3JtIChzdmcgcmVuZGVyZXJzKQotICAgICAgICBkZXZpY2VDb250ZXh0
LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkp
KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0o
KS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOwogICAgICAgICBwYXJlbnRYID0gcGFyZW50
WSA9IDA7CiAgICAgfQogICAgIAogICAgIGlmICghdmlld3BvcnQoKS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgaWYgKHN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFKQogICAgICAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdCh2aWV3cG9ydCgpKSk7IC8v
IEZJWE1FOiBFdmVudHVhbGx5IHdlJ2xsIHdhbnQgZmxvYXQtcHJlY2lzaW9uIGNsaXBwaW5nCi0g
ICAgICAgIGRldmljZUNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xh
dGUodmlld3BvcnQoKS54KCksIHZpZXdwb3J0KCkueSgpKSk7CisKKyAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUodmlld3BvcnQo
KS54KCksIHZpZXdwb3J0KCkueSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFsb2NhbFRyYW5zZm9y
bSgpLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgZGV2aWNlQ29udGV4dC0+Y29uY2F0Q1RNKGxvY2Fs
VHJhbnNmb3JtKCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKGxvY2Fs
VHJhbnNmb3JtKCkpOwogICAgIAogICAgIEZsb2F0UmVjdCBzdHJva2VCQm94ID0gcmVsYXRpdmVC
Qm94KHRydWUpOwogICAgIAotICAgIGlmIChTVkdSZXNvdXJjZUNsaXBwZXIgKmNsaXBwZXIgPSBn
ZXRDbGlwcGVyQnlJZChkb2N1bWVudCgpLCBzdHlsZSgpLT5zdmdTdHlsZSgpLT5jbGlwUGF0aCgp
LnN1YnN0cmluZygxKSkpCi0gICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChzdHJva2VCQm94KTsK
KyAgICBpZiAoU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gZ2V0Q2xpcHBlckJ5SWQoZG9j
dW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQor
ICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAocGFpbnRJbmZvLmNvbnRleHQsIHN0cm9rZUJCb3gp
OwogCi0gICAgaWYgKFNWR1Jlc291cmNlTWFza2VyICptYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRv
Y3VtZW50KCksIHN0eWxlKCktPnN2Z1N0eWxlKCktPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5nKDEp
KSkKLSAgICAgICAgbWFza2VyLT5hcHBseU1hc2soc3Ryb2tlQkJveCk7CisgICAgaWYgKFNWR1Jl
c291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRvY3VtZW50KCksIHN0eWxlKCkt
PnN2Z1N0eWxlKCktPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAgbWFza2Vy
LT5hcHBseU1hc2socGFpbnRJbmZvLmNvbnRleHQsIHN0cm9rZUJCb3gpOwogCiAgICAgZmxvYXQg
b3BhY2l0eSA9IHN0eWxlKCktPm9wYWNpdHkoKTsKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpIHsK
QEAgLTE4OSwyNSArMTgwLDIwIEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWlu
dEluZm8KICAgICB9CiAKICAgICBpZiAoZmlsdGVyKQotICAgICAgICBmaWx0ZXItPnByZXBhcmVG
aWx0ZXIoc3Ryb2tlQkJveCk7Ci0gICAgCisgICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihw
YWludEluZm8uY29udGV4dCwgc3Ryb2tlQkJveCk7CisKICAgICBpZiAoIXZpZXdCb3goKS5pc0Vt
cHR5KCkpCi0gICAgICAgIGRldmljZUNvbnRleHQtPmNvbmNhdENUTSh2aWV3cG9ydFRyYW5zZm9y
bSgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTSh2aWV3cG9ydFRyYW5z
Zm9ybSgpKTsKIAogICAgIFJlbmRlckNvbnRhaW5lcjo6cGFpbnQocGFpbnRJbmZvLCAwLCAwKTsK
IAogICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoc3Ryb2tlQkJv
eCk7CisgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIocGFpbnRJbmZvLmNvbnRleHQsIHN0cm9r
ZUJCb3gpOwogCiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQogICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAotICAgIC8vIHJlc3RvcmUgZHJhd2luZyBz
dGF0ZQotICAgIGlmIChzaG91bGRQb3BDb250ZXh0KSB7Ci0gICAgICAgIGRldmljZS0+cG9wQ29u
dGV4dCgpOwotICAgICAgICBkZWxldGUgZGV2aWNlQ29udGV4dDsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+
cmVzdG9yZSgpOwogfQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHQ29udGFpbmVyOjp2aWV3cG9ydCgp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAx
NzkzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTIgKzI5LDEwIEBACiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlwcGVyLmgi
CiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZU1h
c2tlci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJTVkdMZW5n
dGguaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZH
SW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEyNyw0NiArMTI1LDMy
IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICBpZiAocGFp
bnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9
IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVO
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0g
cmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQg
PSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0g
ZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZl
KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gcHVzaCBhIGRldmljZSBjb250ZXh0
IG9uIHRoZSBzdGFjayBpZiBlbXB0eS4KLSAgICAgICAgY29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0LT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIGRldmljZS0+cHVz
aENvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHNob3VsZFBvcENvbnRleHQgPSB0cnVlOwotICAg
IH0KKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIHBhaW50SW5mby5jb250ZXh0
LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkp
KTsKKyAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwor
ICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0odHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVz
KCkpOwogCi0gICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0
ZShwYXJlbnRYLCBwYXJlbnRZKSk7Ci0gICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNm
b3JtKCkpOwotICAgIHRyYW5zbGF0ZUZvckF0dHJpYnV0ZXMoKTsKLSAgICAKICAgICBGbG9hdFJl
Y3QgYm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CiAK
ICAgICBpZiAoU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gZ2V0Q2xpcHBlckJ5SWQoZG9j
dW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKLSAgICAgICAgY2xp
cHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKKyAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlw
KHBhaW50SW5mby5jb250ZXh0LCBib3VuZGluZ0JveCk7CiAKICAgICBpZiAoU1ZHUmVzb3VyY2VN
YXNrZXIqIG1hc2tlciA9IGdldE1hc2tlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tF
bGVtZW50KCkuc3Vic3RyaW5nKDEpKSkKLSAgICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRp
bmdCb3gpOworICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhwYWludEluZm8uY29udGV4dCwgYm91
bmRpbmdCb3gpOwogCiAgICAgU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5
SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlcigpLnN1YnN0cmluZygxKSk7CiAgICAgaWYg
KGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKLSAg
ICAKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRleHQo
KS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgICAgICBmaWx0ZXItPnByZXBhcmVGaWx0
ZXIocGFpbnRJbmZvLmNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIGZsb2F0IG9wYWNpdHkg
PSBzdHlsZSgpLT5vcGFjaXR5KCk7CiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKSB7Ci0gICAgICAg
IGMtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveCkpOwotICAgICAgICBjLT5iZWdp
blRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+
Y2xpcChlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5nQm94KSk7CisgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIH0KIAogICAgIFBh
aW50SW5mbyBwaShwYWludEluZm8pOwotICAgIHBpLmNvbnRleHQgPSBjLmdldCgpOwotICAgIHBp
LnJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVydCgpLm1hcFJlY3QocGFpbnRJbmZvLnJl
Y3QpOworICAgIHBpLnJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVydCgpLm1hcFJlY3Qo
cGkucmVjdCk7CiAKICAgICBpbnQgeCA9IDAsIHkgPSAwOwogICAgIGlmIChzaG91bGRQYWludChw
aSwgeCwgeSkpIHsKQEAgLTE3OCwyMyArMTYyLDE3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBh
aW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdChtX3gsIG1f
eSwgY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWlnaHQoKSk7CiAgICAgICAgICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdCgwLCAwLCBpbWFnZSgpLT53aWR0aCgpLCBpbWFnZSgpLT5oZWlnaHQoKSk7CiAg
ICAgICAgICAgICBhZGp1c3RSZWN0c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBp
bWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygpKTsKLSAgICAgICAgICAgIGMtPmRyYXdJbWFn
ZShpbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0KTsKICAgICAgICAgfQot
Ci0gICAgICAgIGlmIChmaWx0ZXIpCi0gICAgICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKGJv
dW5kaW5nQm94KTsKICAgICB9Ci0gICAgCisKKyAgICBpZiAoZmlsdGVyKQorICAgICAgICBmaWx0
ZXItPmFwcGx5RmlsdGVyKHBhaW50SW5mby5jb250ZXh0LCBib3VuZGluZ0JveCk7CisKICAgICBp
ZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIGMtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Cisg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogCi0gICAg
Ly8gcmVzdG9yZSBkcmF3aW5nIHN0YXRlCi0gICAgaWYgKCFzaG91bGRQb3BDb250ZXh0KQotICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIGVsc2UgewotICAgICAgICBk
ZXZpY2UtPnBvcENvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGNvbnRleHQ7Ci0gICAgfQorICAg
IHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6
OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJvb2wgZikKQEAgLTI4MSwx
MiArMjU5LDYgQEAgQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdAogICAg
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoaW1hZ2UtPngoKS0+dmFsdWUoKSwg
aW1hZ2UtPnkoKS0+dmFsdWUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnRyYW5zbGF0
ZUZvckF0dHJpYnV0ZXMoKQotewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0
ID0gcmVuZGVyaW5nRGV2aWNlKCktPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+Y29u
Y2F0Q1RNKHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpKTsKLX0KLQogfQogCiAjZW5kaWYgLy8g
U1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24g
MTc5MzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIHZvaWQgdHJhbnNsYXRlRm9yQXR0cmlidXRlcygpOwogICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAgICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKICAgICAgICAgSW50UmVjdCBtX2Fic29sdXRlQm91
bmRzOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmUuY3BwCShyZXZpc2lvbiAx
NzkzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNp
ZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogI2luY2x1ZGUg
IlNWR0lubGluZUZsb3dCb3guaCIKQEAgLTMwLDEzICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgCi1SZW5kZXJTVkdJbmxpbmU6OlJlbmRlclNWR0lubGluZShOb2RlKiBuKSA6
IFJlbmRlcklubGluZShuKSB7fQotICAgIAorUmVuZGVyU1ZHSW5saW5lOjpSZW5kZXJTVkdJbmxp
bmUoTm9kZSogbikgOiBSZW5kZXJJbmxpbmUobikKK3sKK30KKwogSW5saW5lQm94KiBSZW5kZXJT
VkdJbmxpbmU6OmNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBp
c1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1bikKIHsKLSAgICBhc3NlcnQoISghaXNSb290TGlu
ZUJveCAmJiAoaXNSZXBsYWNlZCgpIHx8IG1ha2VQbGFjZUhvbGRlckJveCkpKTsKLSAgICBhc3Nl
cnQoaXNJbmxpbmVGbG93KCkpOworICAgIEFTU0VSVCghKCFpc1Jvb3RMaW5lQm94ICYmIChpc1Jl
cGxhY2VkKCkgfHwgbWFrZVBsYWNlSG9sZGVyQm94KSkpOworICAgIEFTU0VSVChpc0lubGluZUZs
b3coKSk7CisKICAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgp
KSBTVkdJbmxpbmVGbG93Qm94KHRoaXMpOworCiAgICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKICAg
ICAgICAgbV9maXJzdExpbmVCb3ggPSBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKICAgICBlbHNl
IHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZp
c2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMTQgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIAogUmVuZGVyU1ZHSW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5s
aW5lVGV4dChOb2RlKiBuLCBTdHJpbmdJbXBsKiBzdHIpIAotICAgIDogUmVuZGVyVGV4dChuLCBz
dHIpIHt9CisgICAgOiBSZW5kZXJUZXh0KG4sIHN0cikKK3sKK30KIAogdm9pZCBSZW5kZXJTVkdJ
bmxpbmVUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwg
aW50IHR5KQogewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVFNwYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmNwcAkocmV2aXNp
b24gMTc5MzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDExICsyMiwxMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
KwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUu
aCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHUm9vdElubGlu
ZUJveC5oIgogI2luY2x1ZGUgIlNWR0lubGluZUZsb3dCb3guaCIKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKQEAgLTM0LDggKzM0LDEwIEBACiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1SZW5kZXJTVkdUU3Bhbjo6UmVuZGVyU1ZH
VFNwYW4oTm9kZSogbikgOiBSZW5kZXJTVkdJbmxpbmUobikge30KKworUmVuZGVyU1ZHVFNwYW46
OlJlbmRlclNWR1RTcGFuKE5vZGUqIG4pIDogUmVuZGVyU1ZHSW5saW5lKG4pCit7Cit9CiAKIHZv
aWQgUmVuZGVyU1ZHVFNwYW46OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
aW50IHR4LCBpbnQgdHkpCiB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAko
cmV2aXNpb24gMTc5MzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsMTUgKzIzLDE2IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5n
U3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVu
Z3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RleHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUm9v
dElubGluZUJveC5oIgorCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0xMTQsMTIgKzExNSw5IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVS
ZWN0cyhWZWN0b3IKIH0KIAogdm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgaW50IHR4LCBpbnQgdHkpCi17ICAgIAotICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRl
dmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwotICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBp
ID0gcGFpbnRJbmZvOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJy
ZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKSk7Ci0gICAgcGkuY29udGV4dCA9
IGMuZ2V0KCk7Ci0gICAgcGkucmVjdCA9IChhYnNvbHV0ZVRyYW5zZm9ybSgpKS5pbnZlcnQoKS5t
YXBSZWN0KHBhaW50SW5mby5yZWN0KTsKK3sgICAKKyAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byBwaShwYWludEluZm8pOworICAgIHBpLnJlY3QgPSAoYWJzb2x1dGVUcmFuc2Zvcm0oKSkuaW52
ZXJ0KCkubWFwUmVjdChwaS5yZWN0KTsKICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGksIHR4LCB0
eSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guY3BwCShyZXZp
c2lvbiAxNzkzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNp
ZmRlZiBTVkdfU1VQUE9SVAotCiAjaW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0zMiwxMiArMzEsMTEgQEAKICNpbmNsdWRlICJT
VkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2lu
Y2x1ZGUgIlNWR1Jlc291cmNlTWFza2VyLmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIK
ICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0
aExpc3QuaCIKICNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCi0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC02Myw3NyArNjEs
NTkgQEAgdm9pZCBwYWludFNWR0lubGluZUZsb3coSW5saW5lRmxvd0JveCogZgogICAgIGlmIChw
YWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0g
ICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250
ZXh0KCk7Ci0gICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIC8vIE5lZWQgdG8gc2V0IHVwIEtDYW52YXMgcmVuZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJl
YWR5IGJlZW4gZG9uZS4KLSAgICAgICAgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5jcmVh
dGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIGRldmljZS0+cHVzaENvbnRleHQo
Y29udGV4dCk7Ci0gICAgICAgIHNob3VsZFBvcENvbnRleHQgPSB0cnVlOwotICAgIH0KLQotICAg
IGNvbnRleHQtPmNvbmNhdENUTShvYmplY3QtPmxvY2FsVHJhbnNmb3JtKCkpOworICAgIHBhaW50
SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShv
YmplY3QtPmxvY2FsVHJhbnNmb3JtKCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KHR4
ICsgZmxvdy0+eFBvcygpLCB0eSArIGZsb3ctPnlQb3MoKSwgZmxvdy0+d2lkdGgoKSwgZmxvdy0+
aGVpZ2h0KCkpOwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0
LT5zdHlsZSgpLT5zdmdTdHlsZSgpOwogICAgIGlmIChTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBw
ZXIgPSBnZXRDbGlwcGVyQnlJZChvYmplY3QtPmRvY3VtZW50KCksIHN2Z1N0eWxlLT5jbGlwUGF0
aCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChib3VuZGluZ0Jv
eCk7CisgICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChwYWludEluZm8uY29udGV4dCwgYm91bmRp
bmdCb3gpOwogCiAgICAgaWYgKFNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJC
eUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5n
KDEpKSkKLSAgICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRpbmdCb3gpOworICAgICAgICBt
YXNrZXItPmFwcGx5TWFzayhwYWludEluZm8uY29udGV4dCwgYm91bmRpbmdCb3gpOwogCiAgICAg
U1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQob2JqZWN0LT5kb2N1bWVu
dCgpLCBzdmdTdHlsZS0+ZmlsdGVyKCkuc3Vic3RyaW5nKDEpKTsKICAgICBpZiAoZmlsdGVyKQot
ICAgICAgICBmaWx0ZXItPnByZXBhcmVGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgICAgICBmaWx0
ZXItPnByZXBhcmVGaWx0ZXIocGFpbnRJbmZvLmNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAotICAg
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOwotICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGljc0Nv
bnRleHQoKSk7Ci0gICAgcGkuY29udGV4dCA9IGMuZ2V0KCk7CisgICAgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8gcGkocGFpbnRJbmZvKTsKKyAgICAKICAgICBpZiAoIWZsb3ctPmlzUm9vdElubGlu
ZUJveCgpKQotICAgICAgICBwaS5yZWN0ID0gKG9iamVjdC0+bG9jYWxUcmFuc2Zvcm0oKSkuaW52
ZXJ0KCkubWFwUmVjdChwYWludEluZm8ucmVjdCk7CisgICAgICAgIHBpLnJlY3QgPSAob2JqZWN0
LT5sb2NhbFRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBpLnJlY3QpOwogCiAgICAgZmxv
YXQgb3BhY2l0eSA9IG9iamVjdC0+c3R5bGUoKS0+b3BhY2l0eSgpOwogICAgIGlmIChvcGFjaXR5
IDwgMS4wZikgewotICAgICAgICBjLT5jbGlwKGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdCb3gp
KTsKLSAgICAgICAgYy0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveCkpOwor
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5
KTsKICAgICB9CiAgICAgCiAgICAgU1ZHUGFpbnRTZXJ2ZXIqIGZpbGxQYWludFNlcnZlciA9IEtT
VkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKG9iamVjdC0+c3R5bGUoKSwgb2JqZWN0
KTsKICAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CiAgICAgICAgIGZpbGxQYWludFNlcnZlci0+
c2V0UGFpbnRpbmdUZXh0KHRydWUpOwotICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyLT5zZXR1
cChjb250ZXh0LCBvYmplY3QsIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkpIHsKKyAgICAgICAgaWYg
KGZpbGxQYWludFNlcnZlci0+c2V0dXAocGkuY29udGV4dCwgb2JqZWN0LCBBcHBseVRvRmlsbFRh
cmdldFR5cGUpKSB7CiAgICAgICAgICAgICBmbG93LT5JbmxpbmVGbG93Qm94OjpwYWludChwaSwg
dHgsIHR5KTsKLSAgICAgICAgICAgIGZpbGxQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwg
b2JqZWN0LCBBcHBseVRvRmlsbFRhcmdldFR5cGUpOworICAgICAgICAgICAgZmlsbFBhaW50U2Vy
dmVyLT50ZWFyZG93bihwaS5jb250ZXh0LCBvYmplY3QsIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSk7
CiAgICAgICAgIH0KICAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQoZmFs
c2UpOwogICAgIH0KICAgICBTVkdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZH
UGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKG9iamVjdC0+c3R5bGUoKSwgb2JqZWN0
KTsKICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2
ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKLSAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVy
LT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSkgeworICAg
ICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldHVwKHBpLmNvbnRleHQsIG9iamVjdCwgQXBw
bHlUb1N0cm9rZVRhcmdldFR5cGUpKSB7CiAgICAgICAgICAgICBmbG93LT5JbmxpbmVGbG93Qm94
OjpwYWludChwaSwgdHgsIHR5KTsKLSAgICAgICAgICAgIHN0cm9rZVBhaW50U2VydmVyLT50ZWFy
ZG93bihjb250ZXh0LCBvYmplY3QsIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKTsKKyAgICAgICAg
ICAgIHN0cm9rZVBhaW50U2VydmVyLT50ZWFyZG93bihwaS5jb250ZXh0LCBvYmplY3QsIEFwcGx5
VG9TdHJva2VUYXJnZXRUeXBlKTsKICAgICAgICAgfQogICAgICAgICBzdHJva2VQYWludFNlcnZl
ci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAoZmlsdGVyKSAKLSAg
ICAgICAgZmlsdGVyLT5hcHBseUZpbHRlcihib3VuZGluZ0JveCk7CisgICAgICAgIGZpbHRlci0+
YXBwbHlGaWx0ZXIocGFpbnRJbmZvLmNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIGlmIChv
cGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKLSAgICAvLyBy
ZXN0b3JlIGRyYXdpbmcgc3RhdGUKLSAgICBpZiAoIXNob3VsZFBvcENvbnRleHQpCi0gICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGRldmlj
ZS0+cG9wQ29udGV4dCgpOwotICAgICAgICBkZWxldGUgY29udGV4dDsKLSAgICB9CisgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogc3RhdGljIGJvb2wgdHJhbnNsYXRlQm94
KElubGluZUJveCogYm94LCBpbnQgeCwgaW50IHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDE3
OTM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgi
Ci0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVy
R3JhZGllbnQuaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclBhdHRlcm4uaCIKICNpbmNsdWRl
ICJTVkdQYWludFNlcnZlclNvbGlkLmgiCkBAIC0yMzIsMTIgKzIzMSw4IEBAIHN0YXRpYyB2b2lk
IHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGMKICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2Vy
dmVyKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAg
ICAgIHRzIDw8ICIgW3N0cm9rZT17IjsKLSAgICAgICAgICAgIGlmIChzdHJva2VQYWludFNlcnZl
cikgewotICAgICAgICAgICAgICAgIGlmICghc3Ryb2tlUGFpbnRTZXJ2ZXItPmlkSW5SZWdpc3Ry
eSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2lkPVwiIjw8
IHN0cm9rZVBhaW50U2VydmVyLT5pZEluUmVnaXN0cnkoKSA8PCAiXCJdIjsgCi0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICpzdHJva2VQYWludFNl
cnZlcjsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIp
CisgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAqc3Ryb2tlUGFpbnRTZXJ2ZXI7CiAKICAgICAg
ICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpjc3NQcmltaXRp
dmVUb0xlbmd0aCgmcGF0aCwgc3ZnU3R5bGUtPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wKTsKICAg
ICAgICAgICAgIGNvbnN0IEtDRGFzaEFycmF5JiBkYXNoQXJyYXkgPSBLU1ZHUGFpbnRlckZhY3Rv
cnk6OmRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShzdHlsZSk7CkBAIC0yNjMsMTMgKzI1OCw5
IEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGMKICAgICAgICAgaWYg
KGZpbGxQYWludFNlcnZlcikgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIg
Iik7CiAgICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiOwotICAgICAgICAgICAgaWYgKGZpbGxQ
YWludFNlcnZlcikgewotICAgICAgICAgICAgICAgIGlmICghZmlsbFBhaW50U2VydmVyLT5pZElu
UmVnaXN0cnkoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltp
ZD1cIiIgPDwgZmlsbFBhaW50U2VydmVyLT5pZEluUmVnaXN0cnkoKSA8PCAiXCJdIjsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKmZpbGxQYWlu
dFNlcnZlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGZp
bGxQYWludFNlcnZlcikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICpmaWxsUGFpbnRTZXJ2
ZXI7CisKICAgICAgICAgICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSAh
PSAxLjBmKQogICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltvcGFjaXR5PSIgPDwgc3R5bGUt
PnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkgPDwgIl0iOwogICAgICAgICAgICAgaWYgKHN0eWxl
LT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpICE9IFJVTEVfTk9OWkVSTykK
</data>
<flag name="review"
          id="4202"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>