target/4756: Internal compiler error : Unrecognizable insn

palf@quadrupede.com palf@quadrupede.com
Wed Oct 31 09:16:00 GMT 2001


>Number:         4756
>Category:       target
>Synopsis:       Internal compiler error : Unrecognizable insn
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Oct 31 09:16:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     palf@quadrupede.com
>Release:        gcc version 3.0.2 20010905
>Organization:
>Environment:
pc x86
>Description:
A compiler crash occurs
Try to compile linux 2.4.13-ac5.
The probleme occure when compiling 8138 net driver (pci realtek card)

8139too.c: In function `netdev_ethtool_ioctl':
8139too.c:2432: Unrecognizable insn:
(insn/i 612 1054 1051 (parallel[ 
            (set (reg:SI 6 ebp)
                (asm_operands:SI ("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0") ("=&r") 0[ 
                        (reg/v:SI 1 edx [166])
                        (mem:SI (plus:SI (reg/f:SI 6 ebp)
                                (const_int -352 [0xfffffea0])) 0)
                        (mem/s:SI (plus:SI (reg:SI 0 eax [174])
                                (const_int 12 [0xc])) 0)
                    ] 
                    [ 
                        (asm_input:SI ("1"))
                        (asm_input:SI ("g"))
                        (asm_input:SI ("g"))
                    ]  ("/usr/src/mylinux/2.4.13-ac5/include/asm/uaccess.h") 558))
            (set (reg/v:SI 1 edx [166])
                (asm_operands:SI ("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0") ("=r") 1[ 
                        (reg/v:SI 1 edx [166])
                        (mem:SI (plus:SI (reg/f:SI 6 ebp)
                                (const_int -352 [0xfffffea0])) 0)
                        (mem/s:SI (plus:SI (reg:SI 0 eax [174])
                                (const_int 12 [0xc])) 0)
                    ] 
                    [ 
                        (asm_input:SI ("1"))
                        (asm_input:SI ("g"))
                        (asm_input:SI ("g"))
                    ]  ("/usr/src/mylinux/2.4.13-ac5/include/asm/uaccess.h") 558))
            (clobber (reg:QI 19 dirflag))
            (clobber (reg:QI 18 fpsr))
            (clobber (reg:QI 17 flags))
        ] ) -1 (insn_list 598 (insn_list 605 (nil)))
    (nil))
8139too.c:2432: Internal compiler error in reload_cse_simplify_operands, at reload1.c:8355
>How-To-Repeat:
gcc -D__KERNEL__ -I/usr/src/mylinux/2.4.13-ac5/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=i686    -c -o 8139too.o 8139too.c
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/msword; name="8139too.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="8139too.c"

LyoKCgk4MTM5dG9vLmM6IEEgUmVhbFRlayBSVEwtODEzOSBGYXN0IEV0aGVybmV0IGRyaXZlciBm
b3IgTGludXguCgoJTWFpbnRhaW5lZCBieSBKZWZmIEdhcnppayA8amdhcnppa0BtYW5kcmFrZXNv
ZnQuY29tPgoJQ29weXJpZ2h0IDIwMDAsMjAwMSBKZWZmIEdhcnppawoKCU11Y2ggY29kZSBjb21l
cyBmcm9tIERvbmFsZCBCZWNrZXIncyBydGw4MTM5LmMgZHJpdmVyLAoJdmVyc2lvbnMgMS4xMyBh
bmQgb2xkZXIuICBUaGlzIGRyaXZlciB3YXMgb3JpZ2luYWxseSBiYXNlZAoJb24gcnRsODEzOS5j
IHZlcnNpb24gMS4wNy4gIEhlYWRlciBvZiBydGw4MTM5LmMgdmVyc2lvbiAxLjEzOgoKCS0tLS0t
PHNuaXA+LS0tLS0KCiAgICAgICAgCVdyaXR0ZW4gMTk5Ny0yMDAxIGJ5IERvbmFsZCBCZWNrZXIu
CgkJVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRv
IHRoZQoJCXRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5j
b3Jwb3JhdGVkCgkJaGVyZWluIGJ5IHJlZmVyZW5jZS4gIERyaXZlcnMgYmFzZWQgb24gb3IgZGVy
aXZlZCBmcm9tIHRoaXMKCQljb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdCByZXRhaW4g
dGhlIGF1dGhvcnNoaXAsCgkJY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmls
ZSBpcyBub3QgYSBjb21wbGV0ZQoJCXByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0
aGUgZW50aXJlIG9wZXJhdGluZwoJCXN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgoK
CQlUaGlzIGRyaXZlciBpcyBmb3IgYm9hcmRzIGJhc2VkIG9uIHRoZSBSVEw4MTI5IGFuZCBSVEw4
MTM5CgkJUENJIGV0aGVybmV0IGNoaXBzLgoKCQlUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIGFz
IGJlY2tlckBzY3lsZC5jb20sIG9yIEMvTyBTY3lsZAoJCUNvbXB1dGluZyBDb3Jwb3JhdGlvbiA0
MTAgU2V2ZXJuIEF2ZS4sIFN1aXRlIDIxMCBBbm5hcG9saXMKCQlNRCAyMTQwMwoKCQlTdXBwb3J0
IGFuZCB1cGRhdGVzIGF2YWlsYWJsZSBhdAoJCWh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsv
cnRsODEzOS5odG1sCgoJCVR3aXN0ZXItdHVuaW5nIHRhYmxlIHByb3ZpZGVkIGJ5IEtpbnN0b24K
CQk8c2hhbmdoQHJlYWx0ZWsuY29tLnR3Pi4KCgktLS0tLTxzbmlwPi0tLS0tCgoJVGhpcyBzb2Z0
d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwoJ
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5
IHJlZmVyZW5jZS4KCglDb250cmlidXRvcnM6CgoJCURvbmFsZCBCZWNrZXIgLSBoZSB3cm90ZSB0
aGUgb3JpZ2luYWwgZHJpdmVyLCBrdWRvcyB0byBoaW0hCgkJKGJ1dCBwbGVhc2UgZG9uJ3QgZS1t
YWlsIGhpbSBmb3Igc3VwcG9ydCwgdGhpcyBpc24ndCBoaXMgZHJpdmVyKQoKCQlUaWdyYW4gQWl2
YXppYW4gLSBidWcgZml4ZXMsIHNrYnVmZiBmcmVlIGNsZWFudXAKCgkJTWFydGluIE1hcmVzIC0g
c3VnZ2VzdGlvbnMgZm9yIFBDSSBjbGVhbnVwCgoJCURhdmlkIFMuIE1pbGxlciAtIFBDSSBETUEg
YW5kIHNvZnRuZXQgdXBkYXRlcwoKCQlFcm5zdCBHaWxsIC0gZml4ZXMgcG9ydGVkIGZyb20gQlNE
IGRyaXZlcgoKCQlEYW5pZWwgS29icmFzIC0gaWRlbnRpZmllZCBzcGVjaWZpYyBsb2NhdGlvbnMg
b2YKCQkJcG9zdGVkIE1NSU8gd3JpdGUgYnVnZ2luZXNzCgoJCUdlcmFyZCBTaGFycCAtIGJ1ZyBm
aXgsIHRlc3RpbmcgYW5kIGZlZWRiYWNrCgoJCURhdmlkIEZvcmQgLSBSeCByaW5nIHdyYXAgZml4
CgoJCURhbiBEZU1hZ2dpbyAtIHN3YXBwZWQgUlRMODEzOSBjYXJkcyB3aXRoIG1lLCBhbmQgYWxs
b3dlZCBtZQoJCXRvIGZpbmQgYW5kIGZpeCBhIGNydWNpYWwgYnVnIG9uIG9sZGVyIGNoaXBzZXRz
LgoKCQlEb25hbGQgQmVja2VyL0NocmlzIEJ1dHRlcndvcnRoL01hcmN1cyBXZXN0ZXJncmVuIC0K
CQlOb3RpY2VkIHZhcmlvdXMgUnggcGFja2V0IHNpemUtcmVsYXRlZCBidWdsZXRzLgoKCQlTYW50
aWFnbyBHYXJjaWEgTWFudGluYW4gLSB0ZXN0aW5nIGFuZCBmZWVkYmFjawoKCQlKZW5zIERhdmlk
IC0gMi4yLngga2VybmVsIGJhY2twb3J0cwoKCQlNYXJ0aW4gRGVubmV0dCAtIGluY3JlZGlibHkg
aGVscGZ1bCBpbnNpZ2h0IG9uIHVuZG9jdW1lbnRlZAoJCWZlYXR1cmVzIG9mIHRoZSA4MTM5IGNo
aXBzCgoJCUplYW4tSmFjcXVlcyBNaWNoZWwgLSBidWcgZml4CgoJCVRvYmlhcyBSaW5nc3Ry9m0g
LSBSeCBpbnRlcnJ1cHQgc3RhdHVzIGNoZWNraW5nIHN1Z2dlc3Rpb24KCgkJQW5kcmV3IE1vcnRv
biAtIENsZWFyIGJsb2NrZWQgc2lnbmFscywgYXZvaWQKCQlidWZmZXIgb3ZlcnJ1biBzZXR0aW5n
IGN1cnJlbnQtPmNvbW0uCgoJCUthbGxlIE9sYXZpIE5pZW1pdGFsbyAtIFdha2Utb24tTEFOIGlv
Y3RscwoKCVN1Ym1pdHRpbmcgYnVnIHJlcG9ydHM6CgoJCSJydGw4MTM5LWRpYWcgLW1tbWFhYXZ2
dmVlZk4iIG91dHB1dAoJCWVuYWJsZSBSVEw4MTM5X0RFQlVHIGJlbG93LCBhbmQgbG9vayBhdCAn
ZG1lc2cnIG9yIGtlcm5lbCBsb2cKCgkJU2VlIDgxMzl0b28udHh0IGZvciBtb3JlIGRldGFpbHMu
CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCQkJCVRoZW9yeSBvZiBPcGVyYXRpb24KCkkuIEJvYXJk
IENvbXBhdGliaWxpdHkKClRoaXMgZGV2aWNlIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgdGhlIFJl
YWxUZWsgUlRMODEzOSBzZXJpZXMsIHRoZSBSZWFsVGVrCkZhc3QgRXRoZXJuZXQgY29udHJvbGxl
cnMgZm9yIFBDSSBhbmQgQ2FyZEJ1cy4gIFRoaXMgY2hpcCBpcyB1c2VkIG9uIG1hbnkKbG93LWVu
ZCBib2FyZHMsIHNvbWV0aW1lcyB3aXRoIGl0cyBtYXJraW5ncyBjaGFuZ2VkLgoKCklJLiBCb2Fy
ZC1zcGVjaWZpYyBzZXR0aW5ncwoKUENJIGJ1cyBkZXZpY2VzIGFyZSBjb25maWd1cmVkIGJ5IHRo
ZSBzeXN0ZW0gYXQgYm9vdCB0aW1lLCBzbyBubyBqdW1wZXJzCm5lZWQgdG8gYmUgc2V0IG9uIHRo
ZSBib2FyZC4gIFRoZSBzeXN0ZW0gQklPUyB3aWxsIGFzc2lnbiB0aGUKUENJIElOVEEgc2lnbmFs
IHRvIGEgKHByZWZlcmFibHkgb3RoZXJ3aXNlIHVudXNlZCkgc3lzdGVtIElSUSBsaW5lLgoKSUlJ
LiBEcml2ZXIgb3BlcmF0aW9uCgpJSUlhLiBSeCBSaW5nIGJ1ZmZlcnMKClRoZSByZWNlaXZlIHVu
aXQgdXNlcyBhIHNpbmdsZSBsaW5lYXIgcmluZyBidWZmZXIgcmF0aGVyIHRoYW4gdGhlIG1vcmUK
Y29tbW9uIChhbmQgbW9yZSBlZmZpY2llbnQpIGRlc2NyaXB0b3ItYmFzZWQgYXJjaGl0ZWN0dXJl
LiAgSW5jb21pbmcgZnJhbWVzCmFyZSBzZXF1ZW50aWFsbHkgc3RvcmVkIGludG8gdGhlIFJ4IHJl
Z2lvbiwgYW5kIHRoZSBob3N0IGNvcGllcyB0aGVtIGludG8Kc2tidWZmcy4KCkNvbW1lbnQ6IFdo
aWxlIGl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdG8gcHJvY2VzcyBtYW55IGZyYW1lcyBp
biBwbGFjZSwKYW55IGRlbGF5IGluIFJ4IHByb2Nlc3Npbmcgd291bGQgY2F1c2UgdXMgdG8gZHJv
cCBmcmFtZXMuICBNb3JlIGltcG9ydGFudGx5LAp0aGUgTGludXggcHJvdG9jb2wgc3RhY2sgaXMg
bm90IGRlc2lnbmVkIHRvIG9wZXJhdGUgaW4gdGhpcyBtYW5uZXIuCgpJSUliLiBUeCBvcGVyYXRp
b24KClRoZSBSVEw4MTM5IHVzZXMgYSBmaXhlZCBzZXQgb2YgZm91ciBUeCBkZXNjcmlwdG9ycyBp
biByZWdpc3RlciBzcGFjZS4KSW4gYSBzdHVubmluZ2x5IGJhZCBkZXNpZ24gY2hvaWNlLCBUeCBm
cmFtZXMgbXVzdCBiZSAzMiBiaXQgYWxpZ25lZC4gIExpbnV4CmFsaWducyB0aGUgSVAgaGVhZGVy
IG9uIHdvcmQgYm91bmRhcmllcywgYW5kIDE0IGJ5dGUgZXRoZXJuZXQgaGVhZGVyIG1lYW5zCnRo
YXQgYWxtb3N0IGFsbCBmcmFtZXMgd2lsbCBuZWVkIHRvIGJlIGNvcGllZCB0byBhbiBhbGlnbm1l
bnQgYnVmZmVyLgoKSVZiLiBSZWZlcmVuY2VzCgpodHRwOi8vd3d3LnJlYWx0ZWsuY29tLnR3L2Nu
L2NuLmh0bWwKaHR0cDovL3d3dy5zY3lsZC5jb20vZXhwZXJ0L05XYXkuaHRtbAoKSVZjLiBFcnJh
dGEKCjEpIFRoZSBSVEwtODEzOSBoYXMgYSBzZXJpb3VzIHByb2JsZW0gd2l0aCBtb3RoZXJib2Fy
ZHMgd2hpY2ggZG8KcG9zdGVkIE1NSU8gd3JpdGVzIHRvIFBDSSBzcGFjZS4gIFRoaXMgZHJpdmVy
IHdvcmtzIGFyb3VuZCB0aGUKcHJvYmxlbSBieSBoYXZpbmcgYW4gTU1JTyAgcmVnaXN0ZXIgd3Jp
dGUgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkKYW4gTU1JTyByZWdpc3RlciByZWFkLgoKKi8K
CiNkZWZpbmUgRFJWX05BTUUJIjgxMzl0b28iCiNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuOS4yMCIK
CgojaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2lu
Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8bGludXgvcGNpLmg+CiNpbmNsdWRlIDxs
aW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KI2luY2x1ZGUgPGxpbnV4L25l
dGRldmljZS5oPgojaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KI2luY2x1ZGUgPGxpbnV4
L3J0bmV0bGluay5oPgojaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KI2luY2x1ZGUgPGxpbnV4L2V0
aHRvb2wuaD4KI2luY2x1ZGUgPGxpbnV4L21paS5oPgojaW5jbHVkZSA8bGludXgvY29tcGxldGlv
bi5oPgojaW5jbHVkZSA8YXNtL2lvLmg+CiNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgoKI2RlZmlu
ZSBSVEw4MTM5X0RSSVZFUl9OQU1FICAgRFJWX05BTUUgIiBGYXN0IEV0aGVybmV0IGRyaXZlciAi
IERSVl9WRVJTSU9OCiNkZWZpbmUgUEZYIERSVl9OQU1FICI6ICIKCgovKiBlbmFibGUgUElPIGlu
c3RlYWQgb2YgTU1JTywgaWYgQ09ORklHXzgxMzlUT09fUElPIGlzIHNlbGVjdGVkICovCiNpZmRl
ZiBDT05GSUdfODEzOVRPT19QSU8KI2RlZmluZSBVU0VfSU9fT1BTIDEKI2VuZGlmCgovKiBkZWZp
bmUgdG8gMSB0byBlbmFibGUgY29waW91cyBkZWJ1Z2dpbmcgaW5mbyAqLwojdW5kZWYgUlRMODEz
OV9ERUJVRwoKLyogZGVmaW5lIHRvIDEgdG8gZGlzYWJsZSBsaWdodHdlaWdodCBydW50aW1lIGRl
YnVnZ2luZyBjaGVja3MgKi8KI3VuZGVmIFJUTDgxMzlfTkRFQlVHCgoKI2lmZGVmIFJUTDgxMzlf
REVCVUcKLyogbm90ZTogcHJpbnRzIGZ1bmN0aW9uIG5hbWUgZm9yIHlvdSAqLwojICBkZWZpbmUg
RFBSSU5USyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsIF9fRlVO
Q1RJT05fXyAsICMjIGFyZ3MpCiNlbHNlCiMgIGRlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikK
I2VuZGlmCgojaWZkZWYgUlRMODEzOV9OREVCVUcKIyAgZGVmaW5lIGFzc2VydChleHByKSBkbyB7
fSB3aGlsZSAoMCkKI2Vsc2UKIyAgZGVmaW5lIGFzc2VydChleHByKSBcCiAgICAgICAgaWYoIShl
eHByKSkgewkJCQkJXAogICAgICAgIHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVz
LGxpbmU9JWRcbiIsCVwKICAgICAgICAjZXhwcixfX0ZJTEVfXyxfX0ZVTkNUSU9OX18sX19MSU5F
X18pOwkJXAogICAgICAgIH0KI2VuZGlmCgoKLyogQSBmZXcgdXNlci1jb25maWd1cmFibGUgdmFs
dWVzLiAqLwovKiBtZWRpYSBvcHRpb25zICovCiNkZWZpbmUgTUFYX1VOSVRTIDgKc3RhdGljIGlu
dCBtZWRpYVtNQVhfVU5JVFNdID0gey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX07CnN0
YXRpYyBpbnQgZnVsbF9kdXBsZXhbTUFYX1VOSVRTXSA9IHstMSwgLTEsIC0xLCAtMSwgLTEsIC0x
LCAtMSwgLTF9OwoKLyogTWF4aW11bSBldmVudHMgKFJ4IHBhY2tldHMsIGV0Yy4pIHRvIGhhbmRs
ZSBhdCBlYWNoIGludGVycnVwdC4gKi8Kc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSAy
MDsKCi8qIE1heGltdW0gbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gZmlsdGVyICh2
cy4gUngtYWxsLW11bHRpY2FzdCkuCiAgIFRoZSBSVEwgY2hpcHMgdXNlIGEgNjQgZWxlbWVudCBo
YXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBFdGhlcm5ldCBDUkMuICAqLwpzdGF0aWMgaW50IG11bHRp
Y2FzdF9maWx0ZXJfbGltaXQgPSAzMjsKCi8qIFNpemUgb2YgdGhlIGluLW1lbW9yeSByZWNlaXZl
IHJpbmcuICovCiNkZWZpbmUgUlhfQlVGX0xFTl9JRFgJMgkvKiAwPT04SywgMT09MTZLLCAyPT0z
MkssIDM9PTY0SyAqLwojZGVmaW5lIFJYX0JVRl9MRU4gKDgxOTIgPDwgUlhfQlVGX0xFTl9JRFgp
CiNkZWZpbmUgUlhfQlVGX1BBRCAxNgojZGVmaW5lIFJYX0JVRl9XUkFQX1BBRCAyMDQ4IC8qIHNw
YXJlIHBhZGRpbmcgdG8gaGFuZGxlIGxhY2sgb2YgcGFja2V0IHdyYXAgKi8KI2RlZmluZSBSWF9C
VUZfVE9UX0xFTiAoUlhfQlVGX0xFTiArIFJYX0JVRl9QQUQgKyBSWF9CVUZfV1JBUF9QQUQpCiNk
ZWZpbmUgUlhfRUFSTFlfVEhSRVNIIDE0CgovKiBOdW1iZXIgb2YgVHggZGVzY3JpcHRvciByZWdp
c3RlcnMuICovCiNkZWZpbmUgTlVNX1RYX0RFU0MJNAoKLyogbWF4IHN1cHBvcnRlZCBldGhlcm5l
dCBmcmFtZSBzaXplIC0tIG11c3QgYmUgYXQgbGVhc3QgKGRldi0+bXR1KzE0KzQpLiovCiNkZWZp
bmUgTUFYX0VUSF9GUkFNRV9TSVpFCTE1MzYKCi8qIFNpemUgb2YgdGhlIFR4IGJvdW5jZSBidWZm
ZXJzIC0tIG11c3QgYmUgYXQgbGVhc3QgKGRldi0+bXR1KzE0KzQpLiAqLwojZGVmaW5lIFRYX0JV
Rl9TSVpFCU1BWF9FVEhfRlJBTUVfU0laRQojZGVmaW5lIFRYX0JVRl9UT1RfTEVOCShUWF9CVUZf
U0laRSAqIE5VTV9UWF9ERVNDKQoKLyogUENJIFR1bmluZyBQYXJhbWV0ZXJzCiAgIFRocmVzaG9s
ZCBpcyBieXRlcyB0cmFuc2ZlcnJlZCB0byBjaGlwIGJlZm9yZSB0cmFuc21pc3Npb24gc3RhcnRz
LiAqLwojZGVmaW5lIFRYX0ZJRk9fVEhSRVNIIDI1NgkvKiBJbiBieXRlcywgcm91bmRlZCBkb3du
IHRvIDMyIGJ5dGUgdW5pdHMuICovCgovKiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGFyZSBsb2df
MihieXRlcyktNDogIDAgPT0gMTYgYnl0ZXMgLi4gNj09MTAyNCwgNz09ZW5kIG9mIHBhY2tldC4g
Ki8KI2RlZmluZSBSWF9GSUZPX1RIUkVTSAk3CS8qIFJ4IGJ1ZmZlciBsZXZlbCBiZWZvcmUgZmly
c3QgUENJIHhmZXIuICAqLwojZGVmaW5lIFJYX0RNQV9CVVJTVAk3CS8qIE1heGltdW0gUENJIGJ1
cnN0LCAnNicgaXMgMTAyNCAqLwojZGVmaW5lIFRYX0RNQV9CVVJTVAk2CS8qIE1heGltdW0gUENJ
IGJ1cnN0LCAnNicgaXMgMTAyNCAqLwoKCi8qIE9wZXJhdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCB1
c3VhbGx5IGFyZSBub3QgY2hhbmdlZC4gKi8KLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25j
bHVkaW5nIHRoZSB0cmFuc21pdHRlciBpcyBodW5nLiAqLwojZGVmaW5lIFRYX1RJTUVPVVQgICg2
KkhaKQoKCmVudW0gewoJSEFTX01JSV9YQ1ZSID0gMHgwMTAwMDAsCglIQVNfQ0hJUF9YQ1ZSID0g
MHgwMjAwMDAsCglIQVNfTE5LX0NITkcgPSAweDA0MDAwMCwKfTsKCiNkZWZpbmUgUlRMX01JTl9J
T19TSVpFIDB4ODAKI2RlZmluZSBSVEw4MTM5Ql9JT19TSVpFIDI1NgoKI2RlZmluZSBSVEw4MTI5
X0NBUFMJSEFTX01JSV9YQ1ZSCiNkZWZpbmUgUlRMODEzOV9DQVBTCUhBU19DSElQX1hDVlJ8SEFT
X0xOS19DSE5HCgp0eXBlZGVmIGVudW0gewoJUlRMODEzOSA9IDAsCglSVEw4MTM5X0NCLAoJU01D
MTIxMVRYLAoJLypNUFg1MDMwLCovCglERUxUQTgxMzksCglBRERUUk9OODEzOSwKCURGRTUzOFRY
LAoJREZFNjkwVFhELAoJUlRMODEyOSwKfSBib2FyZF90OwoKCi8qIGluZGV4ZWQgYnkgYm9hcmRf
dCwgYWJvdmUgKi8Kc3RhdGljIHN0cnVjdCB7Cgljb25zdCBjaGFyICpuYW1lOwoJdTMyIGh3X2Zs
YWdzOwp9IGJvYXJkX2luZm9bXSBfX2RldmluaXRkYXRhID0gewoJeyAiUmVhbFRlayBSVEw4MTM5
IEZhc3QgRXRoZXJuZXQiLCBSVEw4MTM5X0NBUFMgfSwKCXsgIlJlYWxUZWsgUlRMODEzOUIgUENJ
L0NhcmRCdXMiLCBSVEw4MTM5X0NBUFMgfSwKCXsgIlNNQzEyMTFUWCBFWkNhcmQgMTAvMTAwIChS
ZWFsVGVrIFJUTDgxMzkpIiwgUlRMODEzOV9DQVBTIH0sCi8qCXsgTVBYNTAzMCwgIkFjY3RvbiBN
UFg1MDMwIChSZWFsVGVrIFJUTDgxMzkpIiwgUlRMODEzOV9DQVBTIH0sKi8KCXsgIkRlbHRhIEVs
ZWN0cm9uaWNzIDgxMzkgMTAvMTAwQmFzZVRYIiwgUlRMODEzOV9DQVBTIH0sCgl7ICJBZGR0cm9u
IFRlY2hub2xneSA4MTM5IDEwLzEwMEJhc2VUWCIsIFJUTDgxMzlfQ0FQUyB9LAoJeyAiRC1MaW5r
IERGRS01MzhUWCAoUmVhbFRlayBSVEw4MTM5KSIsIFJUTDgxMzlfQ0FQUyB9LAoJeyAiRC1MaW5r
IERGRS02OTBUWEQgKFJlYWxUZWsgUlRMODEzOSkiLCBSVEw4MTM5X0NBUFMgfSwKCXsgIlJlYWxU
ZWsgUlRMODEyOSIsIFJUTDgxMjlfQ0FQUyB9LAp9OwoKCnN0YXRpYyBzdHJ1Y3QgcGNpX2Rldmlj
ZV9pZCBydGw4MTM5X3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewoJezB4MTBlYywgMHg4MTM5
LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSVEw4MTM5IH0sCgl7MHgxMGVjLCAweDgx
MzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJUTDgxMzlfQ0IgfSwKCXsweDExMTMs
IDB4MTIxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgU01DMTIxMVRYIH0sCi8qCXsw
eDExMTMsIDB4MTIxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgTVBYNTAzMCB9LCov
Cgl7MHgxNTAwLCAweDEzNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIERFTFRBODEz
OSB9LAoJezB4NDAzMywgMHgxMzYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBRERU
Uk9OODEzOSB9LAoJezB4MTE4NiwgMHgxMzAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAw
LCBERkU1MzhUWCB9LAoJezB4MTE4NiwgMHgxMzQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAw
LCAwLCBERkU2OTBUWEQgfSwKCiNpZmRlZiBDT05GSUdfODEzOVRPT184MTI5Cgl7MHgxMGVjLCAw
eDgxMjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJUTDgxMjkgfSwKI2VuZGlmCgoJ
Lyogc29tZSBjcmF6eSBjYXJkcyByZXBvcnQgaW52YWxpZCB2ZW5kb3IgaWRzIGxpa2UKCSAqIDB4
MDAwMSBoZXJlLiAgVGhlIG90aGVyIGlkcyBhcmUgdmFsaWQgYW5kIGNvbnN0YW50LAoJICogc28g
d2Ugc2ltcGx5IGRvbid0IG1hdGNoIG9uIHRoZSBtYWluIHZlbmRvciBpZC4KCSAqLwoJe1BDSV9B
TllfSUQsIDB4ODEzOSwgMHgxMGVjLCAweDgxMzksIDAsIDAsIFJUTDgxMzkgfSwKCXtQQ0lfQU5Z
X0lELCAweDgxMzksIDB4MTE4NiwgMHgxMzAwLCAwLCAwLCBERkU1MzhUWCB9LAoKCXswLH0KfTsK
TU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBydGw4MTM5X3BjaV90YmwpOwoKCi8qIFRoZSByZXN0
IG9mIHRoZXNlIHZhbHVlcyBzaG91bGQgbmV2ZXIgY2hhbmdlLiAqLwoKLyogU3ltYm9saWMgb2Zm
c2V0cyB0byByZWdpc3RlcnMuICovCmVudW0gUlRMODEzOV9yZWdpc3RlcnMgewoJTUFDMCA9IDAs
CQkvKiBFdGhlcm5ldCBoYXJkd2FyZSBhZGRyZXNzLiAqLwoJTUFSMCA9IDgsCQkvKiBNdWx0aWNh
c3QgZmlsdGVyLiAqLwoJVHhTdGF0dXMwID0gMHgxMCwJLyogVHJhbnNtaXQgc3RhdHVzIChGb3Vy
IDMyYml0IHJlZ2lzdGVycykuICovCglUeEFkZHIwID0gMHgyMCwJCS8qIFR4IGRlc2NyaXB0b3Jz
IChhbHNvIGZvdXIgMzJiaXQpLiAqLwoJUnhCdWYgPSAweDMwLAoJUnhFYXJseUNudCA9IDB4MzQs
CglSeEVhcmx5U3RhdHVzID0gMHgzNiwKCUNoaXBDbWQgPSAweDM3LAoJUnhCdWZQdHIgPSAweDM4
LAoJUnhCdWZBZGRyID0gMHgzQSwKCUludHJNYXNrID0gMHgzQywKCUludHJTdGF0dXMgPSAweDNF
LAoJVHhDb25maWcgPSAweDQwLAoJQ2hpcFZlcnNpb24gPSAweDQzLAoJUnhDb25maWcgPSAweDQ0
LAoJVGltZXIgPSAweDQ4LAkJLyogQSBnZW5lcmFsLXB1cnBvc2UgY291bnRlci4gKi8KCVJ4TWlz
c2VkID0gMHg0QywJLyogMjQgYml0cyB2YWxpZCwgd3JpdGUgY2xlYXJzLiAqLwoJQ2ZnOTM0NiA9
IDB4NTAsCglDb25maWcwID0gMHg1MSwKCUNvbmZpZzEgPSAweDUyLAoJRmxhc2hSZWcgPSAweDU0
LAoJTWVkaWFTdGF0dXMgPSAweDU4LAoJQ29uZmlnMyA9IDB4NTksCglDb25maWc0ID0gMHg1QSwJ
CS8qIGFic2VudCBvbiBSVEwtODEzOUEgKi8KCUhsdENsayA9IDB4NUIsCglNdWx0aUludHIgPSAw
eDVDLAoJVHhTdW1tYXJ5ID0gMHg2MCwKCUJhc2ljTW9kZUN0cmwgPSAweDYyLAoJQmFzaWNNb2Rl
U3RhdHVzID0gMHg2NCwKCU5XYXlBZHZlcnQgPSAweDY2LAoJTldheUxQQVIgPSAweDY4LAoJTldh
eUV4cGFuc2lvbiA9IDB4NkEsCgkvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXJzLCBidXQgcmVxdWly
ZWQgZm9yIHByb3BlciBvcGVyYXRpb24uICovCglGSUZPVE1TID0gMHg3MCwJCS8qIEZJRk8gQ29u
dHJvbCBhbmQgdGVzdC4gKi8KCUNTQ1IgPSAweDc0LAkJLyogQ2hpcCBTdGF0dXMgYW5kIENvbmZp
Z3VyYXRpb24gUmVnaXN0ZXIuICovCglQQVJBNzggPSAweDc4LAoJUEFSQTdjID0gMHg3YywJCS8q
IE1hZ2ljIHRyYW5zY2VpdmVyIHBhcmFtZXRlciByZWdpc3Rlci4gKi8KCUNvbmZpZzUgPSAweEQ4
LAkJLyogYWJzZW50IG9uIFJUTC04MTM5QSAqLwp9OwoKZW51bSBDbGVhckJpdE1hc2tzIHsKCU11
bHRpSW50ckNsZWFyID0gMHhGMDAwLAoJQ2hpcENtZENsZWFyID0gMHhFMiwKCUNvbmZpZzFDbGVh
ciA9ICgxPDw3KXwoMTw8Nil8KDE8PDMpfCgxPDwyKXwoMTw8MSksCn07CgplbnVtIENoaXBDbWRC
aXRzIHsKCUNtZFJlc2V0ID0gMHgxMCwKCUNtZFJ4RW5iID0gMHgwOCwKCUNtZFR4RW5iID0gMHgw
NCwKCVJ4QnVmRW1wdHkgPSAweDAxLAp9OwoKLyogSW50ZXJydXB0IHJlZ2lzdGVyIGJpdHMsIHVz
aW5nIG15IG93biBtZWFuaW5nZnVsIG5hbWVzLiAqLwplbnVtIEludHJTdGF0dXNCaXRzIHsKCVBD
SUVyciA9IDB4ODAwMCwKCVBDU1RpbWVvdXQgPSAweDQwMDAsCglSeEZJRk9PdmVyID0gMHg0MCwK
CVJ4VW5kZXJydW4gPSAweDIwLAoJUnhPdmVyZmxvdyA9IDB4MTAsCglUeEVyciA9IDB4MDgsCglU
eE9LID0gMHgwNCwKCVJ4RXJyID0gMHgwMiwKCVJ4T0sgPSAweDAxLAoKCVJ4QWNrQml0cyA9IFJ4
RklGT092ZXIgfCBSeE92ZXJmbG93IHwgUnhPSywKfTsKCmVudW0gVHhTdGF0dXNCaXRzIHsKCVR4
SG9zdE93bnMgPSAweDIwMDAsCglUeFVuZGVycnVuID0gMHg0MDAwLAoJVHhTdGF0T0sgPSAweDgw
MDAsCglUeE91dE9mV2luZG93ID0gMHgyMDAwMDAwMCwKCVR4QWJvcnRlZCA9IDB4NDAwMDAwMDAs
CglUeENhcnJpZXJMb3N0ID0gMHg4MDAwMDAwMCwKfTsKZW51bSBSeFN0YXR1c0JpdHMgewoJUnhN
dWx0aWNhc3QgPSAweDgwMDAsCglSeFBoeXNpY2FsID0gMHg0MDAwLAoJUnhCcm9hZGNhc3QgPSAw
eDIwMDAsCglSeEJhZFN5bWJvbCA9IDB4MDAyMCwKCVJ4UnVudCA9IDB4MDAxMCwKCVJ4VG9vTG9u
ZyA9IDB4MDAwOCwKCVJ4Q1JDRXJyID0gMHgwMDA0LAoJUnhCYWRBbGlnbiA9IDB4MDAwMiwKCVJ4
U3RhdHVzT0sgPSAweDAwMDEsCn07CgovKiBCaXRzIGluIFJ4Q29uZmlnLiAqLwplbnVtIHJ4X21v
ZGVfYml0cyB7CglBY2NlcHRFcnIgPSAweDIwLAoJQWNjZXB0UnVudCA9IDB4MTAsCglBY2NlcHRC
cm9hZGNhc3QgPSAweDA4LAoJQWNjZXB0TXVsdGljYXN0ID0gMHgwNCwKCUFjY2VwdE15UGh5cyA9
IDB4MDIsCglBY2NlcHRBbGxQaHlzID0gMHgwMSwKfTsKCi8qIEJpdHMgaW4gVHhDb25maWcuICov
CmVudW0gdHhfY29uZmlnX2JpdHMgewoJVHhJRkcxID0gKDEgPDwgMjUpLAkvKiBJbnRlcmZyYW1l
IEdhcCBUaW1lICovCglUeElGRzAgPSAoMSA8PCAyNCksCS8qIEVuYWJsaW5nIHRoZXNlIGJpdHMg
dmlvbGF0ZXMgSUVFRSA4MDIuMyAqLwoJVHhMb29wQmFjayA9ICgxIDw8IDE4KSB8ICgxIDw8IDE3
KSwgLyogZW5hYmxlIGxvb3BiYWNrIHRlc3QgbW9kZSAqLwoJVHhDUkMgPSAoMSA8PCAxNiksCS8q
IERJU0FCTEUgYXBwZW5kaW5nIENSQyB0byBlbmQgb2YgVHggcGFja2V0cyAqLwoJVHhDbGVhckFi
dCA9ICgxIDw8IDApLAkvKiBDbGVhciBhYm9ydCAoV08pICovCglUeERNQVNoaWZ0ID0gOCwJCS8q
IERNQSBidXJzdCB2YWx1ZSAoMC03KSBpcyBzaGlmdCB0aGlzIG1hbnkgYml0cyAqLwoKCVR4VmVy
c2lvbk1hc2sgPSAweDdDODAwMDAwLCAvKiBtYXNrIG91dCB2ZXJzaW9uIGJpdHMgMzAtMjYsIDIz
ICovCn07CgovKiBCaXRzIGluIENvbmZpZzEgKi8KZW51bSBDb25maWcxQml0cyB7CglDZmcxX1BN
X0VuYWJsZSA9IDB4MDEsCglDZmcxX1ZQRF9FbmFibGUgPSAweDAyLAoJQ2ZnMV9QSU8gPSAweDA0
LAoJQ2ZnMV9NTUlPID0gMHgwOCwKCUxXQUtFID0gMHgxMCwJCS8qIG5vdCBvbiA4MTM5LCA4MTM5
QSAqLwoJQ2ZnMV9Ecml2ZXJfTG9hZCA9IDB4MjAsCglDZmcxX0xFRDAgPSAweDQwLAoJQ2ZnMV9M
RUQxID0gMHg4MCwKCVNMRUVQID0gKDEgPDwgMSksCS8qIG9ubHkgb24gODEzOSwgODEzOUEgKi8K
CVBXUkROID0gKDEgPDwgMCksCS8qIG9ubHkgb24gODEzOSwgODEzOUEgKi8KfTsKCi8qIEJpdHMg
aW4gQ29uZmlnMyAqLwplbnVtIENvbmZpZzNCaXRzIHsKCUNmZzNfRkJ0QkVuICAgID0gKDEgPDwg
MCksIC8qIDEgPSBGYXN0IEJhY2sgdG8gQmFjayAqLwoJQ2ZnM19GdW5jUmVnRW4gPSAoMSA8PCAx
KSwgLyogMSA9IGVuYWJsZSBDYXJkQnVzIEZ1bmN0aW9uIHJlZ2lzdGVycyAqLwoJQ2ZnM19DTEtS
VU5fRW4gPSAoMSA8PCAyKSwgLyogMSA9IGVuYWJsZSBDTEtSVU4gKi8KCUNmZzNfQ2FyZEJfRW4g
ID0gKDEgPDwgMyksIC8qIDEgPSBlbmFibGUgQ2FyZEJ1cyByZWdpc3RlcnMgKi8KCUNmZzNfTGlu
a1VwICAgID0gKDEgPDwgNCksIC8qIDEgPSB3YWtlIHVwIG9uIGxpbmsgdXAgKi8KCUNmZzNfTWFn
aWMgICAgID0gKDEgPDwgNSksIC8qIDEgPSB3YWtlIHVwIG9uIE1hZ2ljIFBhY2tldCAodG0pICov
CglDZmczX1BBUk1fRW4gICA9ICgxIDw8IDYpLCAvKiAwID0gc29mdHdhcmUgY2FuIHNldCB0d2lz
dGVyIHBhcmFtZXRlcnMgKi8KCUNmZzNfR05UU2VsICAgID0gKDEgPDwgNyksIC8qIDEgPSBkZWxh
eSAxIGNsb2NrIGZyb20gUENJIEdOVCBzaWduYWwgKi8KfTsKCi8qIEJpdHMgaW4gQ29uZmlnNCAq
LwplbnVtIENvbmZpZzRCaXRzIHsKCUxXUFROID0gKDEgPDwgMiksCS8qIG5vdCBvbiA4MTM5LCA4
MTM5QSAqLwp9OwoKLyogQml0cyBpbiBDb25maWc1ICovCmVudW0gQ29uZmlnNUJpdHMgewoJQ2Zn
NV9QTUVfU1RTICAgICA9ICgxIDw8IDApLCAvKiAxID0gUENJIHJlc2V0IHJlc2V0cyBQTUVfU3Rh
dHVzICovCglDZmc1X0xBTldha2UgICAgID0gKDEgPDwgMSksIC8qIDEgPSBlbmFibGUgTEFOV2Fr
ZSBzaWduYWwgKi8KCUNmZzVfTERQUyAgICAgICAgPSAoMSA8PCAyKSwgLyogMCA9IHNhdmUgcG93
ZXIgd2hlbiBsaW5rIGlzIGRvd24gKi8KCUNmZzVfRklGT0FkZHJQdHIgPSAoMSA8PCAzKSwgLyog
UmVhbHRlayBpbnRlcm5hbCBTUkFNIHRlc3RpbmcgKi8KCUNmZzVfVVdGICAgICAgICAgPSAoMSA8
PCA0KSwgLyogMSA9IGFjY2VwdCB1bmljYXN0IHdha2V1cCBmcmFtZSAqLwoJQ2ZnNV9NV0YgICAg
ICAgICA9ICgxIDw8IDUpLCAvKiAxID0gYWNjZXB0IG11bHRpY2FzdCB3YWtldXAgZnJhbWUgKi8K
CUNmZzVfQldGICAgICAgICAgPSAoMSA8PCA2KSwgLyogMSA9IGFjY2VwdCBicm9hZGNhc3Qgd2Fr
ZXVwIGZyYW1lICovCn07CgplbnVtIFJ4Q29uZmlnQml0cyB7CgkvKiBFYXJseSBSeCB0aHJlc2hv
bGQsIG5vbmUgb3IgWC8xNiAqLwoJUnhDZmdFYXJseVJ4Tm9uZSA9IDAsCglSeENmZ0Vhcmx5UnhT
aGlmdCA9IDI0LAoKCS8qIHJ4IGZpZm8gdGhyZXNob2xkICovCglSeENmZ0ZJRk9TaGlmdCA9IDEz
LAoJUnhDZmdGSUZPTm9uZSA9ICg3IDw8IFJ4Q2ZnRklGT1NoaWZ0KSwKCgkvKiBNYXggRE1BIGJ1
cnN0ICovCglSeENmZ0RNQVNoaWZ0ID0gOCwKCVJ4Q2ZnRE1BVW5saW1pdGVkID0gKDcgPDwgUnhD
ZmdETUFTaGlmdCksCgoJLyogcnggcmluZyBidWZmZXIgbGVuZ3RoICovCglSeENmZ1JjdjhLID0g
MCwKCVJ4Q2ZnUmN2MTZLID0gKDEgPDwgMTEpLAoJUnhDZmdSY3YzMksgPSAoMSA8PCAxMiksCglS
eENmZ1JjdjY0SyA9ICgxIDw8IDExKSB8ICgxIDw8IDEyKSwKCgkvKiBEaXNhYmxlIHBhY2tldCB3
cmFwIGF0IGVuZCBvZiBSeCBidWZmZXIgKi8KCVJ4Tm9XcmFwID0gKDEgPDwgNyksCn07CgoKLyog
VHdpc3RlciB0dW5pbmcgcGFyYW1ldGVycyBmcm9tIFJlYWxUZWsuCiAgIENvbXBsZXRlbHkgdW5k
b2N1bWVudGVkLCBidXQgcmVxdWlyZWQgdG8gdHVuZSBiYWQgbGlua3MuICovCmVudW0gQ1NDUkJp
dHMgewoJQ1NDUl9MaW5rT0tCaXQgPSAweDA0MDAsCglDU0NSX0xpbmtDaGFuZ2VCaXQgPSAweDA4
MDAsCglDU0NSX0xpbmtTdGF0dXNCaXRzID0gMHgwZjAwMCwKCUNTQ1JfTGlua0Rvd25PZmZDbWQg
PSAweDAwM2MwLAoJQ1NDUl9MaW5rRG93bkNtZCA9IDB4MGYzYzAsCn07CgoKZW51bSBDZmc5MzQ2
Qml0cyB7CglDZmc5MzQ2X0xvY2sgPSAweDAwLAoJQ2ZnOTM0Nl9VbmxvY2sgPSAweEMwLAp9OwoK
CiNkZWZpbmUgUEFSQTc4X2RlZmF1bHQJMHg3OGZhODM4OAojZGVmaW5lIFBBUkE3Y19kZWZhdWx0
CTB4Y2IzOGRlNDMJLyogcGFyYW1bMF1bM10gKi8KI2RlZmluZSBQQVJBN2NfeHh4CQkweGNiMzhk
ZTQzCnN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHBhcmFtWzRdWzRdID0gewoJezB4Y2IzOWRl
NDMsIDB4Y2IzOWNlNDMsIDB4ZmIzOGRlMDMsIDB4Y2IzOGRlNDN9LAoJezB4Y2IzOWRlNDMsIDB4
Y2IzOWNlNDMsIDB4Y2IzOWNlODMsIDB4Y2IzOWNlODN9LAoJezB4Y2IzOWRlNDMsIDB4Y2IzOWNl
NDMsIDB4Y2IzOWNlODMsIDB4Y2IzOWNlODN9LAoJezB4YmIzOWRlNDMsIDB4YmIzOWNlNDMsIDB4
YmIzOWNlODMsIDB4YmIzOWNlODN9Cn07CgpzdHJ1Y3QgcmluZ19pbmZvIHsKCXN0cnVjdCBza19i
dWZmICpza2I7CglkbWFfYWRkcl90IG1hcHBpbmc7Cn07CgoKdHlwZWRlZiBlbnVtIHsKCUNIXzgx
MzkgPSAwLAoJQ0hfODEzOV9LLAoJQ0hfODEzOUEsCglDSF84MTM5QiwKCUNIXzgxMzAsCglDSF84
MTM5QywKfSBjaGlwX3Q7CgplbnVtIGNoaXBfZmxhZ3MgewoJSGFzSGx0Q2xrID0gKDEgPDwgMCks
CglIYXNMV2FrZSA9ICgxIDw8IDEpLAp9OwoKCi8qIGRpcmVjdGx5IGluZGV4ZWQgYnkgY2hpcF90
LCBhYm92ZSAqLwpjb25zdCBzdGF0aWMgc3RydWN0IHsKCWNvbnN0IGNoYXIgKm5hbWU7Cgl1OCB2
ZXJzaW9uOyAvKiBmcm9tIFJUTDgxMzlDIGRvY3MgKi8KCXUzMiBSeENvbmZpZ01hc2s7IC8qIHNo
b3VsZCBjbGVhciB0aGUgYml0cyBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwICovCgl1MzIgZmxhZ3M7
Cn0gcnRsX2NoaXBfaW5mb1tdID0gewoJeyAiUlRMLTgxMzkiLAoJICAweDQwLAoJICAweGYwZmUw
MDQwLCAvKiBYWFggY29waWVkIGZyb20gUlRMODEzOUEsIHZlcmlmeSAqLwoJICBIYXNIbHRDbGss
Cgl9LAoKCXsgIlJUTC04MTM5IHJldiBLIiwKCSAgMHg2MCwKCSAgMHhmMGZlMDA0MCwKCSAgSGFz
SGx0Q2xrLAoJfSwKCgl7ICJSVEwtODEzOUEiLAoJICAweDcwLAoJICAweGYwZmUwMDQwLAoJICBI
YXNIbHRDbGssIC8qIFhYWCB1bmRvY3VtZW50ZWQ/ICovCgl9LAoKCXsgIlJUTC04MTM5QiIsCgkg
IDB4NzgsCgkgIDB4ZjBmYzAwNDAsCgkgIEhhc0xXYWtlLAoJfSwKCgl7ICJSVEwtODEzMCIsCgkg
IDB4N0MsCgkgIDB4ZjBmZTAwNDAsIC8qIFhYWCBjb3BpZWQgZnJvbSBSVEw4MTM5QSwgdmVyaWZ5
ICovCgkgIEhhc0xXYWtlLAoJfSwKCgl7ICJSVEwtODEzOUMiLAoJICAweDc0LAoJICAweGYwZmMw
MDQwLCAvKiBYWFggY29waWVkIGZyb20gUlRMODEzOUIsIHZlcmlmeSAqLwoJICBIYXNMV2FrZSwK
CX0sCgp9OwoKc3RydWN0IHJ0bF9leHRyYV9zdGF0cyB7Cgl1bnNpZ25lZCBsb25nIGVhcmx5X3J4
OwoJdW5zaWduZWQgbG9uZyB0eF9idWZfbWFwcGVkOwoJdW5zaWduZWQgbG9uZyB0eF90aW1lb3V0
czsKfTsKCnN0cnVjdCBydGw4MTM5X3ByaXZhdGUgewoJdm9pZCAqbW1pb19hZGRyOwoJaW50IGRy
dl9mbGFnczsKCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwoJc3RydWN0IG5ldF9kZXZpY2Vfc3Rh
dHMgc3RhdHM7Cgl1bnNpZ25lZCBjaGFyICpyeF9yaW5nOwoJdW5zaWduZWQgaW50IGN1cl9yeDsJ
LyogSW5kZXggaW50byB0aGUgUnggYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqLwoJdW5zaWduZWQg
aW50IHR4X2ZsYWc7Cgl1bnNpZ25lZCBsb25nIGN1cl90eDsKCXVuc2lnbmVkIGxvbmcgZGlydHlf
dHg7CgkvKiBUaGUgc2F2ZWQgYWRkcmVzcyBvZiBhIHNlbnQtaW4tcGxhY2UgcGFja2V0L2J1ZmZl
ciwgZm9yIHNrZnJlZSgpLiAqLwoJc3RydWN0IHJpbmdfaW5mbyB0eF9pbmZvW05VTV9UWF9ERVND
XTsKCXVuc2lnbmVkIGNoYXIgKnR4X2J1ZltOVU1fVFhfREVTQ107CS8qIFR4IGJvdW5jZSBidWZm
ZXJzICovCgl1bnNpZ25lZCBjaGFyICp0eF9idWZzOwkvKiBUeCBib3VuY2UgYnVmZmVyIHJlZ2lv
bi4gKi8KCWRtYV9hZGRyX3QgcnhfcmluZ19kbWE7CglkbWFfYWRkcl90IHR4X2J1ZnNfZG1hOwoJ
c2lnbmVkIGNoYXIgcGh5c1s0XTsJCS8qIE1JSSBkZXZpY2UgYWRkcmVzc2VzLiAqLwoJY2hhciB0
d2lzdGllLCB0d2lzdF9yb3csIHR3aXN0X2NvbDsJLyogVHdpc3RlciB0dW5lIHN0YXRlLiAqLwoJ
dW5zaWduZWQgaW50IGZ1bGxfZHVwbGV4OjE7CS8qIEZ1bGwtZHVwbGV4IG9wZXJhdGlvbiByZXF1
ZXN0ZWQuICovCgl1bnNpZ25lZCBpbnQgZHVwbGV4X2xvY2s6MTsKCXVuc2lnbmVkIGludCBkZWZh
dWx0X3BvcnQ6NDsJLyogTGFzdCBkZXYtPmlmX3BvcnQgdmFsdWUuICovCgl1bnNpZ25lZCBpbnQg
bWVkaWEyOjQ7CS8qIFNlY29uZGFyeSBtb25pdG9yZWQgbWVkaWEgcG9ydC4gKi8KCXVuc2lnbmVk
IGludCBtZWRpYWxvY2s6MTsJLyogRG9uJ3Qgc2Vuc2UgbWVkaWEgdHlwZS4gKi8KCXVuc2lnbmVk
IGludCBtZWRpYXNlbnNlOjE7CS8qIE1lZGlhIHNlbnNpbmcgaW4gcHJvZ3Jlc3MuICovCglzcGlu
bG9ja190IGxvY2s7CgljaGlwX3QgY2hpcHNldDsKCXBpZF90IHRocl9waWQ7Cgl3YWl0X3F1ZXVl
X2hlYWRfdCB0aHJfd2FpdDsKCXN0cnVjdCBjb21wbGV0aW9uIHRocl9leGl0ZWQ7Cgl1MzIgcnhf
Y29uZmlnOwoJc3RydWN0IHJ0bF9leHRyYV9zdGF0cyB4c3RhdHM7Cn07CgpNT0RVTEVfQVVUSE9S
ICgiSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAbWFuZHJha2Vzb2Z0LmNvbT4iKTsKTU9EVUxFX0RFU0NS
SVBUSU9OICgiUmVhbFRlayBSVEwtODEzOSBGYXN0IEV0aGVybmV0IGRyaXZlciIpOwpNT0RVTEVf
TElDRU5TRSgiR1BMIik7CgpNT0RVTEVfUEFSTSAobXVsdGljYXN0X2ZpbHRlcl9saW1pdCwgImki
KTsKTU9EVUxFX1BBUk0gKG1heF9pbnRlcnJ1cHRfd29yaywgImkiKTsKTU9EVUxFX1BBUk0gKG1l
ZGlhLCAiMS0iIF9fTU9EVUxFX1NUUklORyhNQVhfVU5JVFMpICJpIik7Ck1PRFVMRV9QQVJNIChm
dWxsX2R1cGxleCwgIjEtIiBfX01PRFVMRV9TVFJJTkcoTUFYX1VOSVRTKSAiaSIpOwpNT0RVTEVf
UEFSTV9ERVNDIChtdWx0aWNhc3RfZmlsdGVyX2xpbWl0LCAiODEzOXRvbyBtYXhpbXVtIG51bWJl
ciBvZiBmaWx0ZXJlZCBtdWx0aWNhc3QgYWRkcmVzc2VzIik7Ck1PRFVMRV9QQVJNX0RFU0MgKG1h
eF9pbnRlcnJ1cHRfd29yaywgIjgxMzl0b28gbWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50
ZXJydXB0Iik7Ck1PRFVMRV9QQVJNX0RFU0MgKG1lZGlhLCAiODEzOXRvbzogQml0cyA0Kzk6IGZv
cmNlIGZ1bGwgZHVwbGV4LCBiaXQgNTogMTAwTWJwcyIpOwpNT0RVTEVfUEFSTV9ERVNDIChmdWxs
X2R1cGxleCwgIjgxMzl0b286IEZvcmNlIGZ1bGwgZHVwbGV4IGZvciBib2FyZChzKSAoMSkiKTsK
CnN0YXRpYyBpbnQgcmVhZF9lZXByb20gKHZvaWQgKmlvYWRkciwgaW50IGxvY2F0aW9uLCBpbnQg
YWRkcl9sZW4pOwpzdGF0aWMgaW50IHJ0bDgxMzlfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKmRl
dik7CnN0YXRpYyBpbnQgbWRpb19yZWFkIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5
X2lkLCBpbnQgbG9jYXRpb24pOwpzdGF0aWMgdm9pZCBtZGlvX3dyaXRlIChzdHJ1Y3QgbmV0X2Rl
dmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sCgkJCWludCB2YWwpOwpzdGF0aWMg
aW50IHJ0bDgxMzlfdGhyZWFkICh2b2lkICpkYXRhKTsKc3RhdGljIHZvaWQgcnRsODEzOV90eF90
aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKc3RhdGljIHZvaWQgcnRsODEzOV9pbml0
X3JpbmcgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpzdGF0aWMgaW50IHJ0bDgxMzlfc3RhcnRf
eG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpk
ZXYpOwpzdGF0aWMgdm9pZCBydGw4MTM5X2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2lu
c3RhbmNlLAoJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpzdGF0aWMgaW50IHJ0bDgx
MzlfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpzdGF0aWMgaW50IG5ldGRldl9pb2N0
bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CnN0
YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcnRsODEzOV9nZXRfc3RhdHMgKHN0cnVjdCBu
ZXRfZGV2aWNlICpkZXYpOwpzdGF0aWMgaW5saW5lIHUzMiBldGhlcl9jcmMgKGludCBsZW5ndGgs
IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwpzdGF0aWMgdm9pZCBydGw4MTM5X3NldF9yeF9tb2RlIChz
dHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKc3RhdGljIHZvaWQgX19zZXRfcnhfbW9kZSAoc3RydWN0
IG5ldF9kZXZpY2UgKmRldik7CnN0YXRpYyB2b2lkIHJ0bDgxMzlfaHdfc3RhcnQgKHN0cnVjdCBu
ZXRfZGV2aWNlICpkZXYpOwoKI2lmZGVmIFVTRV9JT19PUFMKCiNkZWZpbmUgUlRMX1I4KHJlZykJ
CWluYiAoKCh1bnNpZ25lZCBsb25nKWlvYWRkcikgKyAocmVnKSkKI2RlZmluZSBSVExfUjE2KHJl
ZykJCWludyAoKCh1bnNpZ25lZCBsb25nKWlvYWRkcikgKyAocmVnKSkKI2RlZmluZSBSVExfUjMy
KHJlZykJCSgodW5zaWduZWQgbG9uZykgaW5sICgoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChy
ZWcpKSkKI2RlZmluZSBSVExfVzgocmVnLCB2YWw4KQlvdXRiICgodmFsOCksICgodW5zaWduZWQg
bG9uZylpb2FkZHIpICsgKHJlZykpCiNkZWZpbmUgUlRMX1cxNihyZWcsIHZhbDE2KQlvdXR3ICgo
dmFsMTYpLCAoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKQojZGVmaW5lIFJUTF9XMzIo
cmVnLCB2YWwzMikJb3V0bCAoKHZhbDMyKSwgKCh1bnNpZ25lZCBsb25nKWlvYWRkcikgKyAocmVn
KSkKI2RlZmluZSBSVExfVzhfRgkJUlRMX1c4CiNkZWZpbmUgUlRMX1cxNl9GCQlSVExfVzE2CiNk
ZWZpbmUgUlRMX1czMl9GCQlSVExfVzMyCiN1bmRlZiByZWFkYgojdW5kZWYgcmVhZHcKI3VuZGVm
IHJlYWRsCiN1bmRlZiB3cml0ZWIKI3VuZGVmIHdyaXRldwojdW5kZWYgd3JpdGVsCiNkZWZpbmUg
cmVhZGIoYWRkcikgaW5iKCh1bnNpZ25lZCBsb25nKShhZGRyKSkKI2RlZmluZSByZWFkdyhhZGRy
KSBpbncoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQojZGVmaW5lIHJlYWRsKGFkZHIpIGlubCgodW5z
aWduZWQgbG9uZykoYWRkcikpCiNkZWZpbmUgd3JpdGViKHZhbCxhZGRyKSBvdXRiKCh2YWwpLCh1
bnNpZ25lZCBsb25nKShhZGRyKSkKI2RlZmluZSB3cml0ZXcodmFsLGFkZHIpIG91dHcoKHZhbCks
KHVuc2lnbmVkIGxvbmcpKGFkZHIpKQojZGVmaW5lIHdyaXRlbCh2YWwsYWRkcikgb3V0bCgodmFs
KSwodW5zaWduZWQgbG9uZykoYWRkcikpCgojZWxzZQoKLyogd3JpdGUgTU1JTyByZWdpc3Rlciwg
d2l0aCBmbHVzaCAqLwovKiBGbHVzaCBhdm9pZHMgcnRsODEzOSBidWcgdy8gcG9zdGVkIE1NSU8g
d3JpdGVzICovCiNkZWZpbmUgUlRMX1c4X0YocmVnLCB2YWw4KQlkbyB7IHdyaXRlYiAoKHZhbDgp
LCBpb2FkZHIgKyAocmVnKSk7IHJlYWRiIChpb2FkZHIgKyAocmVnKSk7IH0gd2hpbGUgKDApCiNk
ZWZpbmUgUlRMX1cxNl9GKHJlZywgdmFsMTYpCWRvIHsgd3JpdGV3ICgodmFsMTYpLCBpb2FkZHIg
KyAocmVnKSk7IHJlYWR3IChpb2FkZHIgKyAocmVnKSk7IH0gd2hpbGUgKDApCiNkZWZpbmUgUlRM
X1czMl9GKHJlZywgdmFsMzIpCWRvIHsgd3JpdGVsICgodmFsMzIpLCBpb2FkZHIgKyAocmVnKSk7
IHJlYWRsIChpb2FkZHIgKyAocmVnKSk7IH0gd2hpbGUgKDApCgoKI2RlZmluZSBNTUlPX0ZMVVNI
X0FVRElUX0NPTVBMRVRFIDEKI2lmIE1NSU9fRkxVU0hfQVVESVRfQ09NUExFVEUKCi8qIHdyaXRl
IE1NSU8gcmVnaXN0ZXIgKi8KI2RlZmluZSBSVExfVzgocmVnLCB2YWw4KQl3cml0ZWIgKCh2YWw4
KSwgaW9hZGRyICsgKHJlZykpCiNkZWZpbmUgUlRMX1cxNihyZWcsIHZhbDE2KQl3cml0ZXcgKCh2
YWwxNiksIGlvYWRkciArIChyZWcpKQojZGVmaW5lIFJUTF9XMzIocmVnLCB2YWwzMikJd3JpdGVs
ICgodmFsMzIpLCBpb2FkZHIgKyAocmVnKSkKCiNlbHNlCgovKiB3cml0ZSBNTUlPIHJlZ2lzdGVy
LCB0aGVuIGZsdXNoICovCiNkZWZpbmUgUlRMX1c4CQlSVExfVzhfRgojZGVmaW5lIFJUTF9XMTYJ
CVJUTF9XMTZfRgojZGVmaW5lIFJUTF9XMzIJCVJUTF9XMzJfRgoKI2VuZGlmIC8qIE1NSU9fRkxV
U0hfQVVESVRfQ09NUExFVEUgKi8KCi8qIHJlYWQgTU1JTyByZWdpc3RlciAqLwojZGVmaW5lIFJU
TF9SOChyZWcpCQlyZWFkYiAoaW9hZGRyICsgKHJlZykpCiNkZWZpbmUgUlRMX1IxNihyZWcpCQly
ZWFkdyAoaW9hZGRyICsgKHJlZykpCiNkZWZpbmUgUlRMX1IzMihyZWcpCQkoKHVuc2lnbmVkIGxv
bmcpIHJlYWRsIChpb2FkZHIgKyAocmVnKSkpCgojZW5kaWYgLyogVVNFX0lPX09QUyAqLwoKCnN0
YXRpYyBjb25zdCB1MTYgcnRsODEzOV9pbnRyX21hc2sgPQoJUENJRXJyIHwgUENTVGltZW91dCB8
IFJ4VW5kZXJydW4gfCBSeE92ZXJmbG93IHwgUnhGSUZPT3ZlciB8CglUeEVyciB8IFR4T0sgfCBS
eEVyciB8IFJ4T0s7CgpzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ0bDgxMzlfcnhfY29uZmln
ID0KCSAgKFJYX0VBUkxZX1RIUkVTSCA8PCBSeENmZ0Vhcmx5UnhTaGlmdCkgfCBSeENmZ1JjdjMy
SyB8IFJ4Tm9XcmFwIHwKCSAgKFJYX0ZJRk9fVEhSRVNIIDw8IFJ4Q2ZnRklGT1NoaWZ0KSB8Cgkg
IChSWF9ETUFfQlVSU1QgPDwgUnhDZmdETUFTaGlmdCk7CgoKc3RhdGljIHZvaWQgX19ydGw4MTM5
X2NsZWFudXBfZGV2IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CglzdHJ1Y3QgcnRsODEzOV9w
cml2YXRlICp0cDsKCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwoKCWFzc2VydCAoZGV2ICE9IE5VTEwp
OwoJYXNzZXJ0IChkZXYtPnByaXYgIT0gTlVMTCk7CgoJdHAgPSBkZXYtPnByaXY7Cglhc3NlcnQg
KHRwLT5wY2lfZGV2ICE9IE5VTEwpOwoJcGRldiA9IHRwLT5wY2lfZGV2OwoKI2lmbmRlZiBVU0Vf
SU9fT1BTCglpZiAodHAtPm1taW9fYWRkcikKCQlpb3VubWFwICh0cC0+bW1pb19hZGRyKTsKI2Vu
ZGlmIC8qICFVU0VfSU9fT1BTICovCgoJLyogaXQncyBvayB0byBjYWxsIHRoaXMgZXZlbiBpZiB3
ZSBoYXZlIG5vIHJlZ2lvbnMgdG8gZnJlZSAqLwoJcGNpX3JlbGVhc2VfcmVnaW9ucyAocGRldik7
CgojaWZuZGVmIFJUTDgxMzlfTkRFQlVHCgkvKiBwb2lzb24gbWVtb3J5IGJlZm9yZSBmcmVlaW5n
ICovCgltZW1zZXQgKGRldiwgMHhCQywKCQlzaXplb2YgKHN0cnVjdCBuZXRfZGV2aWNlKSArCgkJ
c2l6ZW9mIChzdHJ1Y3QgcnRsODEzOV9wcml2YXRlKSk7CiNlbmRpZiAvKiBSVEw4MTM5X05ERUJV
RyAqLwoKCWtmcmVlIChkZXYpOwoKCXBjaV9zZXRfZHJ2ZGF0YSAocGRldiwgTlVMTCk7Cn0KCgpz
dGF0aWMgdm9pZCBydGw4MTM5X2NoaXBfcmVzZXQgKHZvaWQgKmlvYWRkcikKewoJaW50IGk7CgoJ
LyogU29mdCByZXNldCB0aGUgY2hpcC4gKi8KCVJUTF9XOCAoQ2hpcENtZCwgQ21kUmVzZXQpOwoK
CS8qIENoZWNrIHRoYXQgdGhlIGNoaXAgaGFzIGZpbmlzaGVkIHRoZSByZXNldC4gKi8KCWZvciAo
aSA9IDEwMDA7IGkgPiAwOyBpLS0pIHsKCQliYXJyaWVyKCk7CgkJaWYgKChSVExfUjggKENoaXBD
bWQpICYgQ21kUmVzZXQpID09IDApCgkJCWJyZWFrOwoJCXVkZWxheSAoMTApOwoJfQp9CgoKc3Rh
dGljIGludCBfX2RldmluaXQgcnRsODEzOV9pbml0X2JvYXJkIChzdHJ1Y3QgcGNpX2RldiAqcGRl
diwKCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKipkZXZfb3V0KQp7Cgl2b2lkICppb2FkZHI7Cglz
dHJ1Y3QgbmV0X2RldmljZSAqZGV2OwoJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHA7Cgl1OCB0
bXA4OwoJaW50IHJjOwoJdW5zaWduZWQgaW50IGk7Cgl1MzIgcGlvX3N0YXJ0LCBwaW9fZW5kLCBw
aW9fZmxhZ3MsIHBpb19sZW47Cgl1bnNpZ25lZCBsb25nIG1taW9fc3RhcnQsIG1taW9fZW5kLCBt
bWlvX2ZsYWdzLCBtbWlvX2xlbjsKCXUzMiB0bXA7CgoJRFBSSU5USyAoIkVOVEVSXG4iKTsKCglh
c3NlcnQgKHBkZXYgIT0gTlVMTCk7CgoJKmRldl9vdXQgPSBOVUxMOwoKCS8qIGRldiBhbmQgZGV2
LT5wcml2IHplcm9lZCBpbiBhbGxvY19ldGhlcmRldiAqLwoJZGV2ID0gYWxsb2NfZXRoZXJkZXYg
KHNpemVvZiAoKnRwKSk7CglpZiAoZGV2ID09IE5VTEwpIHsKCQlwcmludGsgKEtFUk5fRVJSIFBG
WCAiJXM6IFVuYWJsZSB0byBhbGxvYyBuZXcgbmV0IGRldmljZVxuIiwgcGRldi0+c2xvdF9uYW1l
KTsKCQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nIC1FTk9NRU1cbiIpOwoJCXJldHVybiAtRU5P
TUVNOwoJfQoJU0VUX01PRFVMRV9PV05FUihkZXYpOwoJdHAgPSBkZXYtPnByaXY7Cgl0cC0+cGNp
X2RldiA9IHBkZXY7CgoJLyogZW5hYmxlIGRldmljZSAoaW5jbC4gUENJIFBNIHdha2V1cCBhbmQg
aG90cGx1ZyBzZXR1cCkgKi8KCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UgKHBkZXYpOwoJaWYgKHJj
KQoJCWdvdG8gZXJyX291dDsKCglwaW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYs
IDApOwoJcGlvX2VuZCA9IHBjaV9yZXNvdXJjZV9lbmQgKHBkZXYsIDApOwoJcGlvX2ZsYWdzID0g
cGNpX3Jlc291cmNlX2ZsYWdzIChwZGV2LCAwKTsKCXBpb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVu
IChwZGV2LCAwKTsKCgltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAxKTsK
CW1taW9fZW5kID0gcGNpX3Jlc291cmNlX2VuZCAocGRldiwgMSk7CgltbWlvX2ZsYWdzID0gcGNp
X3Jlc291cmNlX2ZsYWdzIChwZGV2LCAxKTsKCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbiAo
cGRldiwgMSk7CgoJLyogc2V0IHRoaXMgaW1tZWRpYXRlbHksIHdlIG5lZWQgdG8ga25vdyBiZWZv
cmUKCSAqIHdlIHRhbGsgdG8gdGhlIGNoaXAgZGlyZWN0bHkgKi8KCURQUklOVEsoIlBJTyByZWdp
b24gc2l6ZSA9PSAweCUwMlhcbiIsIHBpb19sZW4pOwoJRFBSSU5USygiTU1JTyByZWdpb24gc2l6
ZSA9PSAweCUwMmxYXG4iLCBtbWlvX2xlbik7CgojaWZkZWYgVVNFX0lPX09QUwoJLyogbWFrZSBz
dXJlIFBDSSBiYXNlIGFkZHIgMCBpcyBQSU8gKi8KCWlmICghKHBpb19mbGFncyAmIElPUkVTT1VS
Q0VfSU8pKSB7CgkJcHJpbnRrIChLRVJOX0VSUiBQRlggIiVzOiByZWdpb24gIzAgbm90IGEgUElP
IHJlc291cmNlLCBhYm9ydGluZ1xuIiwgcGRldi0+c2xvdF9uYW1lKTsKCQlyYyA9IC1FTk9ERVY7
CgkJZ290byBlcnJfb3V0OwoJfQoJLyogY2hlY2sgZm9yIHdlaXJkL2Jyb2tlbiBQQ0kgcmVnaW9u
IHJlcG9ydGluZyAqLwoJaWYgKHBpb19sZW4gPCBSVExfTUlOX0lPX1NJWkUpIHsKCQlwcmludGsg
KEtFUk5fRVJSIFBGWCAiJXM6IEludmFsaWQgUENJIEkvTyByZWdpb24gc2l6ZShzKSwgYWJvcnRp
bmdcbiIsIHBkZXYtPnNsb3RfbmFtZSk7CgkJcmMgPSAtRU5PREVWOwoJCWdvdG8gZXJyX291dDsK
CX0KI2Vsc2UKCS8qIG1ha2Ugc3VyZSBQQ0kgYmFzZSBhZGRyIDEgaXMgTU1JTyAqLwoJaWYgKCEo
bW1pb19mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkgewoJCXByaW50ayAoS0VSTl9FUlIgUEZYICIl
czogcmVnaW9uICMxIG5vdCBhbiBNTUlPIHJlc291cmNlLCBhYm9ydGluZ1xuIiwgcGRldi0+c2xv
dF9uYW1lKTsKCQlyYyA9IC1FTk9ERVY7CgkJZ290byBlcnJfb3V0OwoJfQoJaWYgKG1taW9fbGVu
IDwgUlRMX01JTl9JT19TSVpFKSB7CgkJcHJpbnRrIChLRVJOX0VSUiBQRlggIiVzOiBJbnZhbGlk
IFBDSSBtZW0gcmVnaW9uIHNpemUocyksIGFib3J0aW5nXG4iLCBwZGV2LT5zbG90X25hbWUpOwoJ
CXJjID0gLUVOT0RFVjsKCQlnb3RvIGVycl9vdXQ7Cgl9CiNlbmRpZgoKCXJjID0gcGNpX3JlcXVl
c3RfcmVnaW9ucyAocGRldiwgIjgxMzl0b28iKTsKCWlmIChyYykKCQlnb3RvIGVycl9vdXQ7CgoJ
LyogZW5hYmxlIFBDSSBidXMtbWFzdGVyaW5nICovCglwY2lfc2V0X21hc3RlciAocGRldik7Cgoj
aWZkZWYgVVNFX0lPX09QUwoJaW9hZGRyID0gKHZvaWQgKikgcGlvX3N0YXJ0OwoJZGV2LT5iYXNl
X2FkZHIgPSBwaW9fc3RhcnQ7Cgl0cC0+bW1pb19hZGRyID0gaW9hZGRyOwojZWxzZQoJLyogaW9y
ZW1hcCBNTUlPIHJlZ2lvbiAqLwoJaW9hZGRyID0gaW9yZW1hcCAobW1pb19zdGFydCwgbW1pb19s
ZW4pOwoJaWYgKGlvYWRkciA9PSBOVUxMKSB7CgkJcHJpbnRrIChLRVJOX0VSUiBQRlggIiVzOiBj
YW5ub3QgcmVtYXAgTU1JTywgYWJvcnRpbmdcbiIsIHBkZXYtPnNsb3RfbmFtZSk7CgkJcmMgPSAt
RUlPOwoJCWdvdG8gZXJyX291dDsKCX0KCWRldi0+YmFzZV9hZGRyID0gKGxvbmcpIGlvYWRkcjsK
CXRwLT5tbWlvX2FkZHIgPSBpb2FkZHI7CiNlbmRpZiAvKiBVU0VfSU9fT1BTICovCgoJLyogQnJp
bmcgb2xkIGNoaXBzIG91dCBvZiBsb3ctcG93ZXIgbW9kZS4gKi8KCVJUTF9XOCAoSGx0Q2xrLCAn
UicpOwoKCS8qIGNoZWNrIGZvciBtaXNzaW5nL2Jyb2tlbiBoYXJkd2FyZSAqLwoJaWYgKFJUTF9S
MzIgKFR4Q29uZmlnKSA9PSAweEZGRkZGRkZGKSB7CgkJcHJpbnRrIChLRVJOX0VSUiBQRlggIiVz
OiBDaGlwIG5vdCByZXNwb25kaW5nLCBpZ25vcmluZyBib2FyZFxuIiwKCQkJcGRldi0+c2xvdF9u
YW1lKTsKCQlyYyA9IC1FSU87CgkJZ290byBlcnJfb3V0OwoJfQoKCS8qIGlkZW50aWZ5IGNoaXAg
YXR0YWNoZWQgdG8gYm9hcmQgKi8KCXRtcCA9IFJUTF9SOCAoQ2hpcFZlcnNpb24pOwoJZm9yIChp
ID0gMDsgaSA8IEFSUkFZX1NJWkUgKHJ0bF9jaGlwX2luZm8pOyBpKyspCgkJaWYgKHRtcCA9PSBy
dGxfY2hpcF9pbmZvW2ldLnZlcnNpb24pIHsKCQkJdHAtPmNoaXBzZXQgPSBpOwoJCQlnb3RvIG1h
dGNoOwoJCX0KCgkvKiBpZiB1bmtub3duIGNoaXAsIGFzc3VtZSBhcnJheSBlbGVtZW50ICMwLCBv
cmlnaW5hbCBSVEwtODEzOSBpbiB0aGlzIGNhc2UgKi8KCXByaW50ayAoS0VSTl9ERUJVRyBQRlgg
IiVzOiB1bmtub3duIGNoaXAgdmVyc2lvbiwgYXNzdW1pbmcgUlRMLTgxMzlcbiIsCgkJcGRldi0+
c2xvdF9uYW1lKTsKCXByaW50ayAoS0VSTl9ERUJVRyBQRlggIiVzOiBUeENvbmZpZyA9IDB4JWx4
XG4iLCBwZGV2LT5zbG90X25hbWUsIFJUTF9SMzIgKFR4Q29uZmlnKSk7Cgl0cC0+Y2hpcHNldCA9
IDA7CgptYXRjaDoKCURQUklOVEsgKCJjaGlwc2V0IGlkICglZCkgPT0gaW5kZXggJWQsICclcydc
biIsCgkJdG1wLAoJCXRwLT5jaGlwc2V0LAoJCXJ0bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLm5h
bWUpOwoKCWlmICh0cC0+Y2hpcHNldCA+PSBDSF84MTM5QikgewoJCXU4IG5ld190bXA4ID0gdG1w
OCA9IFJUTF9SOCAoQ29uZmlnMSk7CgkJRFBSSU5USygiUENJIFBNIHdha2V1cFxuIik7CgkJaWYg
KChydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5mbGFncyAmIEhhc0xXYWtlKSAmJgoJCSAgICAo
dG1wOCAmIExXQUtFKSkKCQkJbmV3X3RtcDggJj0gfkxXQUtFOwoJCW5ld190bXA4IHw9IENmZzFf
UE1fRW5hYmxlOwoJCWlmIChuZXdfdG1wOCAhPSB0bXA4KSB7CgkJCVJUTF9XOCAoQ2ZnOTM0Niwg
Q2ZnOTM0Nl9VbmxvY2spOwoJCQlSVExfVzggKENvbmZpZzEsIHRtcDgpOwoJCQlSVExfVzggKENm
ZzkzNDYsIENmZzkzNDZfTG9jayk7CgkJfQoJCWlmIChydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0
XS5mbGFncyAmIEhhc0xXYWtlKSB7CgkJCXRtcDggPSBSVExfUjggKENvbmZpZzQpOwoJCQlpZiAo
dG1wOCAmIExXUFROKQoJCQkJUlRMX1c4IChDb25maWc0LCB0bXA4ICYgfkxXUFROKTsKCQl9Cgl9
IGVsc2UgewoJCURQUklOVEsoIk9sZCBjaGlwIHdha2V1cFxuIik7CgkJdG1wOCA9IFJUTF9SOCAo
Q29uZmlnMSk7CgkJdG1wOCAmPSB+KFNMRUVQIHwgUFdSRE4pOwoJCVJUTF9XOCAoQ29uZmlnMSwg
dG1wOCk7Cgl9CgoJcnRsODEzOV9jaGlwX3Jlc2V0IChpb2FkZHIpOwoKCURQUklOVEsgKCJFWElU
LCByZXR1cm5pbmcgMFxuIik7CgkqZGV2X291dCA9IGRldjsKCXJldHVybiAwOwoKZXJyX291dDoK
CV9fcnRsODEzOV9jbGVhbnVwX2RldiAoZGV2KTsKCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcg
JWRcbiIsIHJjKTsKCXJldHVybiByYzsKfQoKCnN0YXRpYyBpbnQgX19kZXZpbml0IHJ0bDgxMzlf
aW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAoJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBw
Y2lfZGV2aWNlX2lkICplbnQpCnsKCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwoJc3Ry
dWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHA7CglpbnQgaSwgYWRkcl9sZW4sIG9wdGlvbjsKCXZvaWQg
KmlvYWRkcjsKCXN0YXRpYyBpbnQgYm9hcmRfaWR4ID0gLTE7Cgl1OCBwY2lfcmV2OwoKCURQUklO
VEsgKCJFTlRFUlxuIik7CgoJYXNzZXJ0IChwZGV2ICE9IE5VTEwpOwoJYXNzZXJ0IChlbnQgIT0g
TlVMTCk7CgoJYm9hcmRfaWR4Kys7CgoJLyogd2hlbiB3ZSdyZSBidWlsdCBpbnRvIHRoZSBrZXJu
ZWwsIHRoZSBkcml2ZXIgdmVyc2lvbiBtZXNzYWdlCgkgKiBpcyBvbmx5IHByaW50ZWQgaWYgYXQg
bGVhc3Qgb25lIDgxMzkgYm9hcmQgaGFzIGJlZW4gZm91bmQKCSAqLwojaWZuZGVmIE1PRFVMRQoJ
ewoJCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwoJCWlmICghcHJpbnRlZF92ZXJzaW9uKysp
CgkJCXByaW50ayAoS0VSTl9JTkZPIFJUTDgxMzlfRFJJVkVSX05BTUUgIlxuIik7Cgl9CiNlbmRp
ZgoKCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnBjaV9yZXYp
OwoKCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9SRUFMVEVLICYmCgkgICAgcGRl
di0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUkVBTFRFS184MTM5ICYmIHBjaV9yZXYgPj0gMHgy
MCkgewoJCXByaW50ayhLRVJOX0lORk8gUEZYICJwY2kgZGV2ICVzIChpZCAlMDR4OiUwNHggcmV2
ICUwMngpIGlzIGFuIGVuaGFuY2VkIDgxMzlDKyBjaGlwXG4iLAoJCSAgICAgICBwZGV2LT5zbG90
X25hbWUsIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLCBwY2lfcmV2KTsKCQlwcmludGsoS0VS
Tl9JTkZPIFBGWCAiVXNlIHRoZSBcIjgxMzljcFwiIGRyaXZlciBmb3IgaW1wcm92ZWQgcGVyZm9y
bWFuY2UgYW5kIHN0YWJpbGl0eS5cbiIpOwoJfQoKCWkgPSBydGw4MTM5X2luaXRfYm9hcmQgKHBk
ZXYsICZkZXYpOwoJaWYgKGkgPCAwKSB7CgkJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlZFxu
IiwgaSk7CgkJcmV0dXJuIGk7Cgl9CgoJdHAgPSBkZXYtPnByaXY7Cglpb2FkZHIgPSB0cC0+bW1p
b19hZGRyOwoKCWFzc2VydCAoaW9hZGRyICE9IE5VTEwpOwoJYXNzZXJ0IChkZXYgIT0gTlVMTCk7
Cglhc3NlcnQgKHRwICE9IE5VTEwpOwoKCWFkZHJfbGVuID0gcmVhZF9lZXByb20gKGlvYWRkciwg
MCwgOCkgPT0gMHg4MTI5ID8gOCA6IDY7Cglmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQoJCSgodTE2
ICopIChkZXYtPmRldl9hZGRyKSlbaV0gPQoJCSAgICBsZTE2X3RvX2NwdSAocmVhZF9lZXByb20g
KGlvYWRkciwgaSArIDcsIGFkZHJfbGVuKSk7CgoJLyogVGhlIFJ0bDgxMzktc3BlY2lmaWMgZW50
cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KCWRldi0+b3BlbiA9IHJ0bDgxMzlfb3Bl
bjsKCWRldi0+aGFyZF9zdGFydF94bWl0ID0gcnRsODEzOV9zdGFydF94bWl0OwoJZGV2LT5zdG9w
ID0gcnRsODEzOV9jbG9zZTsKCWRldi0+Z2V0X3N0YXRzID0gcnRsODEzOV9nZXRfc3RhdHM7Cglk
ZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHJ0bDgxMzlfc2V0X3J4X21vZGU7CglkZXYtPmRvX2lv
Y3RsID0gbmV0ZGV2X2lvY3RsOwoJZGV2LT50eF90aW1lb3V0ID0gcnRsODEzOV90eF90aW1lb3V0
OwoJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CglkZXYtPmZlYXR1cmVzIHw9IE5F
VElGX0ZfU0d8TkVUSUZfRl9IV19DU1VNOwoKCWRldi0+aXJxID0gcGRldi0+aXJxOwoKCS8qIGRl
di0+cHJpdi90cCB6ZXJvZWQgYW5kIGFsaWduZWQgaW4gaW5pdF9ldGhlcmRldiAqLwoJdHAgPSBk
ZXYtPnByaXY7CgoJLyogbm90ZTogdHAtPmNoaXBzZXQgc2V0IGluIHJ0bDgxMzlfaW5pdF9ib2Fy
ZCAqLwoJdHAtPmRydl9mbGFncyA9IGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0uaHdfZmxh
Z3M7Cgl0cC0+bW1pb19hZGRyID0gaW9hZGRyOwoJc3Bpbl9sb2NrX2luaXQgKCZ0cC0+bG9jayk7
Cglpbml0X3dhaXRxdWV1ZV9oZWFkICgmdHAtPnRocl93YWl0KTsKCWluaXRfY29tcGxldGlvbiAo
JnRwLT50aHJfZXhpdGVkKTsKCgkvKiBkZXYgaXMgZnVsbHkgc2V0IHVwIGFuZCByZWFkeSB0byB1
c2Ugbm93ICovCglEUFJJTlRLKCJhYm91dCB0byByZWdpc3RlciBkZXZpY2UgbmFtZWQgJXMgKCVw
KS4uLlxuIiwgZGV2LT5uYW1lLCBkZXYpOwoJaSA9IHJlZ2lzdGVyX25ldGRldiAoZGV2KTsKCWlm
IChpKSBnb3RvIGVycl9vdXQ7CgoJcGNpX3NldF9kcnZkYXRhIChwZGV2LCBkZXYpOwoKCXByaW50
ayAoS0VSTl9JTkZPICIlczogJXMgYXQgMHglbHgsICIKCQkiJTIuMng6JTIuMng6JTIuMng6JTIu
Mng6JTIuMng6JTIuMngsICIKCQkiSVJRICVkXG4iLAoJCWRldi0+bmFtZSwKCQlib2FyZF9pbmZv
W2VudC0+ZHJpdmVyX2RhdGFdLm5hbWUsCgkJZGV2LT5iYXNlX2FkZHIsCgkJZGV2LT5kZXZfYWRk
clswXSwgZGV2LT5kZXZfYWRkclsxXSwKCQlkZXYtPmRldl9hZGRyWzJdLCBkZXYtPmRldl9hZGRy
WzNdLAoJCWRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0sCgkJZGV2LT5pcnEpOwoK
CXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICBJZGVudGlmaWVkIDgxMzkgY2hpcCB0eXBlICclcydc
biIsCgkJZGV2LT5uYW1lLCBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5uYW1lKTsKCgkvKiBG
aW5kIHRoZSBjb25uZWN0ZWQgTUlJIHhjdnJzLgoJICAgRG9pbmcgdGhpcyBpbiBvcGVuKCkgd291
bGQgYWxsb3cgZGV0ZWN0aW5nIGV4dGVybmFsIHhjdnJzIGxhdGVyLCBidXQKCSAgIHRha2VzIHRv
byBtdWNoIHRpbWUuICovCiNpZmRlZiBDT05GSUdfODEzOVRPT184MTI5CglpZiAodHAtPmRydl9m
bGFncyAmIEhBU19NSUlfWENWUikgewoJCWludCBwaHksIHBoeV9pZHggPSAwOwoJCWZvciAocGh5
ID0gMDsgcGh5IDwgMzIgJiYgcGh5X2lkeCA8IHNpemVvZih0cC0+cGh5cyk7IHBoeSsrKSB7CgkJ
CWludCBtaWlfc3RhdHVzID0gbWRpb19yZWFkKGRldiwgcGh5LCAxKTsKCQkJaWYgKG1paV9zdGF0
dXMgIT0gMHhmZmZmICAmJiAgbWlpX3N0YXR1cyAhPSAweDAwMDApIHsKCQkJCXUxNiBhZHZlcnRp
c2luZyA9IG1kaW9fcmVhZChkZXYsIHBoeSwgNCk7CgkJCQl0cC0+cGh5c1twaHlfaWR4KytdID0g
cGh5OwoJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1JSSB0cmFuc2NlaXZlciAlZCBzdGF0dXMg
MHglNC40eCAiCgkJCQkJICAgImFkdmVydGlzaW5nICU0LjR4LlxuIiwKCQkJCQkgICBkZXYtPm5h
bWUsIHBoeSwgbWlpX3N0YXR1cywgYWR2ZXJ0aXNpbmcpOwoJCQl9CgkJfQoJCWlmIChwaHlfaWR4
ID09IDApIHsKCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIE1JSSB0cmFuc2NlaXZlcnMgZm91
bmQhICBBc3N1bWluZyBTWU0gIgoJCQkJICAgInRyYW5zY2VpdmVyLlxuIiwKCQkJCSAgIGRldi0+
bmFtZSk7CgkJCXRwLT5waHlzWzBdID0gMzI7CgkJfQoJfSBlbHNlCiNlbmRpZgoJCXRwLT5waHlz
WzBdID0gMzI7CgoJLyogVGhlIGxvd2VyIGZvdXIgYml0cyBhcmUgdGhlIG1lZGlhIHR5cGUuICov
CglvcHRpb24gPSAoYm9hcmRfaWR4ID49IE1BWF9VTklUUykgPyAwIDogbWVkaWFbYm9hcmRfaWR4
XTsKCWlmIChvcHRpb24gPiAwKSB7CgkJdHAtPmZ1bGxfZHVwbGV4ID0gKG9wdGlvbiAmIDB4MjEw
KSA/IDEgOiAwOwoJCXRwLT5kZWZhdWx0X3BvcnQgPSBvcHRpb24gJiAweEZGOwoJCWlmICh0cC0+
ZGVmYXVsdF9wb3J0KQoJCQl0cC0+bWVkaWFsb2NrID0gMTsKCX0KCWlmIChib2FyZF9pZHggPCBN
QVhfVU5JVFMgICYmICBmdWxsX2R1cGxleFtib2FyZF9pZHhdID4gMCkKCQl0cC0+ZnVsbF9kdXBs
ZXggPSBmdWxsX2R1cGxleFtib2FyZF9pZHhdOwoJaWYgKHRwLT5mdWxsX2R1cGxleCkgewoJCXBy
aW50ayhLRVJOX0lORk8gIiVzOiBNZWRpYSB0eXBlIGZvcmNlZCB0byBGdWxsIER1cGxleC5cbiIs
IGRldi0+bmFtZSk7CgkJLyogQ2hhbmdpbmcgdGhlIE1JSS1hZHZlcnRpc2VkIG1lZGlhIGJlY2F1
c2UgbWlnaHQgcHJldmVudAoJCSAgIHJlLWNvbm5lY3Rpb24uICovCgkJdHAtPmR1cGxleF9sb2Nr
ID0gMTsKCX0KCWlmICh0cC0+ZGVmYXVsdF9wb3J0KSB7CgkJcHJpbnRrKEtFUk5fSU5GTyAiICBG
b3JjaW5nICVkTWJwcyAlcy1kdXBsZXggb3BlcmF0aW9uLlxuIiwKCQkJICAgKG9wdGlvbiAmIDB4
MjAgPyAxMDAgOiAxMCksCgkJCSAgIChvcHRpb24gJiAweDEwID8gImZ1bGwiIDogImhhbGYiKSk7
CgkJbWRpb193cml0ZShkZXYsIHRwLT5waHlzWzBdLCAwLAoJCQkJICAgKChvcHRpb24gJiAweDIw
KSA/IDB4MjAwMCA6IDApIHwgCS8qIDEwME1icHM/ICovCgkJCQkgICAoKG9wdGlvbiAmIDB4MTAp
ID8gMHgwMTAwIDogMCkpOyAvKiBGdWxsIGR1cGxleD8gKi8KCX0KCgkvKiBQdXQgdGhlIGNoaXAg
aW50byBsb3ctcG93ZXIgbW9kZS4gKi8KCWlmIChydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5m
bGFncyAmIEhhc0hsdENsaykKCQlSVExfVzggKEhsdENsaywgJ0gnKTsJLyogJ1InIHdvdWxkIGxl
YXZlIHRoZSBjbG9jayBydW5uaW5nLiAqLwoKCURQUklOVEsgKCJFWElUIC0gcmV0dXJuaW5nIDBc
biIpOwoJcmV0dXJuIDA7CgplcnJfb3V0OgoJX19ydGw4MTM5X2NsZWFudXBfZGV2IChkZXYpOwoJ
RFBSSU5USyAoIkVYSVQgLSByZXR1cm5pbmcgJWRcbiIsIGkpOwoJcmV0dXJuIGk7Cn0KCgpzdGF0
aWMgdm9pZCBfX2RldmV4aXQgcnRsODEzOV9yZW1vdmVfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRl
dikKewoJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YSAocGRldik7Cglz
dHJ1Y3QgcnRsODEzOV9wcml2YXRlICpucDsKCglEUFJJTlRLICgiRU5URVJcbiIpOwoKCWFzc2Vy
dCAoZGV2ICE9IE5VTEwpOwoJbnAgPSBkZXYtPnByaXY7Cglhc3NlcnQgKG5wICE9IE5VTEwpOwoK
CXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwoKCV9fcnRsODEzOV9jbGVhbnVwX2RldiAoZGV2KTsK
CglEUFJJTlRLICgiRVhJVFxuIik7Cn0KCgovKiBTZXJpYWwgRUVQUk9NIHNlY3Rpb24uICovCgov
KiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KI2RlZmluZSBFRV9TSElGVF9DTEsJMHgwNAkvKiBFRVBS
T00gc2hpZnQgY2xvY2suICovCiNkZWZpbmUgRUVfQ1MJCQkweDA4CS8qIEVFUFJPTSBjaGlwIHNl
bGVjdC4gKi8KI2RlZmluZSBFRV9EQVRBX1dSSVRFCTB4MDIJLyogRUVQUk9NIGNoaXAgZGF0YSBp
bi4gKi8KI2RlZmluZSBFRV9XUklURV8wCQkweDAwCiNkZWZpbmUgRUVfV1JJVEVfMQkJMHgwMgoj
ZGVmaW5lIEVFX0RBVEFfUkVBRAkweDAxCS8qIEVFUFJPTSBjaGlwIGRhdGEgb3V0LiAqLwojZGVm
aW5lIEVFX0VOQgkJCSgweDgwIHwgRUVfQ1MpCgovKiBEZWxheSBiZXR3ZWVuIEVFUFJPTSBjbG9j
ayB0cmFuc2l0aW9ucy4KICAgTm8gZXh0cmEgZGVsYXkgaXMgbmVlZGVkIHdpdGggMzNNaHogUENJ
LCBidXQgNjZNaHogbWF5IGNoYW5nZSB0aGlzLgogKi8KCiNkZWZpbmUgZWVwcm9tX2RlbGF5KCkJ
cmVhZGwoZWVfYWRkcikKCi8qIFRoZSBFRVBST00gY29tbWFuZHMgaW5jbHVkZSB0aGUgYWx3YXkt
c2V0IGxlYWRpbmcgYml0LiAqLwojZGVmaW5lIEVFX1dSSVRFX0NNRAkoNSkKI2RlZmluZSBFRV9S
RUFEX0NNRAkJKDYpCiNkZWZpbmUgRUVfRVJBU0VfQ01ECSg3KQoKc3RhdGljIGludCBfX2Rldmlu
aXQgcmVhZF9lZXByb20gKHZvaWQgKmlvYWRkciwgaW50IGxvY2F0aW9uLCBpbnQgYWRkcl9sZW4p
CnsKCWludCBpOwoJdW5zaWduZWQgcmV0dmFsID0gMDsKCXZvaWQgKmVlX2FkZHIgPSBpb2FkZHIg
KyBDZmc5MzQ2OwoJaW50IHJlYWRfY21kID0gbG9jYXRpb24gfCAoRUVfUkVBRF9DTUQgPDwgYWRk
cl9sZW4pOwoKCURQUklOVEsgKCJFTlRFUlxuIik7CgoJd3JpdGViIChFRV9FTkIgJiB+RUVfQ1Ms
IGVlX2FkZHIpOwoJd3JpdGViIChFRV9FTkIsIGVlX2FkZHIpOwoJZWVwcm9tX2RlbGF5ICgpOwoK
CS8qIFNoaWZ0IHRoZSByZWFkIGNvbW1hbmQgYml0cyBvdXQuICovCglmb3IgKGkgPSA0ICsgYWRk
cl9sZW47IGkgPj0gMDsgaS0tKSB7CgkJaW50IGRhdGF2YWwgPSAocmVhZF9jbWQgJiAoMSA8PCBp
KSkgPyBFRV9EQVRBX1dSSVRFIDogMDsKCQl3cml0ZWIgKEVFX0VOQiB8IGRhdGF2YWwsIGVlX2Fk
ZHIpOwoJCWVlcHJvbV9kZWxheSAoKTsKCQl3cml0ZWIgKEVFX0VOQiB8IGRhdGF2YWwgfCBFRV9T
SElGVF9DTEssIGVlX2FkZHIpOwoJCWVlcHJvbV9kZWxheSAoKTsKCX0KCXdyaXRlYiAoRUVfRU5C
LCBlZV9hZGRyKTsKCWVlcHJvbV9kZWxheSAoKTsKCglmb3IgKGkgPSAxNjsgaSA+IDA7IGktLSkg
ewoJCXdyaXRlYiAoRUVfRU5CIHwgRUVfU0hJRlRfQ0xLLCBlZV9hZGRyKTsKCQllZXByb21fZGVs
YXkgKCk7CgkJcmV0dmFsID0KCQkgICAgKHJldHZhbCA8PCAxKSB8ICgocmVhZGIgKGVlX2FkZHIp
ICYgRUVfREFUQV9SRUFEKSA/IDEgOgoJCQkJICAgICAwKTsKCQl3cml0ZWIgKEVFX0VOQiwgZWVf
YWRkcik7CgkJZWVwcm9tX2RlbGF5ICgpOwoJfQoKCS8qIFRlcm1pbmF0ZSB0aGUgRUVQUk9NIGFj
Y2Vzcy4gKi8KCXdyaXRlYiAofkVFX0NTLCBlZV9hZGRyKTsKCWVlcHJvbV9kZWxheSAoKTsKCglE
UFJJTlRLICgiRVhJVCAtIHJldHVybmluZyAlZFxuIiwgcmV0dmFsKTsKCXJldHVybiByZXR2YWw7
Cn0KCi8qIE1JSSBzZXJpYWwgbWFuYWdlbWVudDogbW9zdGx5IGJvZ3VzIGZvciBub3cuICovCi8q
IFJlYWQgYW5kIHdyaXRlIHRoZSBNSUkgbWFuYWdlbWVudCByZWdpc3RlcnMgdXNpbmcgc29mdHdh
cmUtZ2VuZXJhdGVkCiAgIHNlcmlhbCBNRElPIHByb3RvY29sLgogICBUaGUgbWF4aW11bSBkYXRh
IGNsb2NrIHJhdGUgaXMgMi41IE1oei4gIFRoZSBtaW5pbXVtIHRpbWluZyBpcyB1c3VhbGx5CiAg
IG1ldCBieSBiYWNrLXRvLWJhY2sgUENJIEkvTyBjeWNsZXMsIGJ1dCB3ZSBpbnNlcnQgYSBkZWxh
eSB0byBhdm9pZAogICAib3ZlcmNsb2NraW5nIiBpc3N1ZXMuICovCiNkZWZpbmUgTURJT19ESVIJ
CTB4ODAKI2RlZmluZSBNRElPX0RBVEFfT1VUCTB4MDQKI2RlZmluZSBNRElPX0RBVEFfSU4JMHgw
MgojZGVmaW5lIE1ESU9fQ0xLCQkweDAxCiNkZWZpbmUgTURJT19XUklURTAgKE1ESU9fRElSKQoj
ZGVmaW5lIE1ESU9fV1JJVEUxIChNRElPX0RJUiB8IE1ESU9fREFUQV9PVVQpCgojZGVmaW5lIG1k
aW9fZGVsYXkobWRpb19hZGRyKQlyZWFkYihtZGlvX2FkZHIpCgoKc3RhdGljIGNoYXIgbWlpXzJf
ODEzOV9tYXBbOF0gPSB7CglCYXNpY01vZGVDdHJsLAoJQmFzaWNNb2RlU3RhdHVzLAoJMCwKCTAs
CglOV2F5QWR2ZXJ0LAoJTldheUxQQVIsCglOV2F5RXhwYW5zaW9uLAoJMAp9OwoKCiNpZmRlZiBD
T05GSUdfODEzOVRPT184MTI5Ci8qIFN5bmNyb25pemUgdGhlIE1JSSBtYW5hZ2VtZW50IGludGVy
ZmFjZSBieSBzaGlmdGluZyAzMiBvbmUgYml0cyBvdXQuICovCnN0YXRpYyB2b2lkIG1kaW9fc3lu
YyAodm9pZCAqbWRpb19hZGRyKQp7CglpbnQgaTsKCglEUFJJTlRLICgiRU5URVJcbiIpOwoKCWZv
ciAoaSA9IDMyOyBpID49IDA7IGktLSkgewoJCXdyaXRlYiAoTURJT19XUklURTEsIG1kaW9fYWRk
cik7CgkJbWRpb19kZWxheSAobWRpb19hZGRyKTsKCQl3cml0ZWIgKE1ESU9fV1JJVEUxIHwgTURJ
T19DTEssIG1kaW9fYWRkcik7CgkJbWRpb19kZWxheSAobWRpb19hZGRyKTsKCX0KCglEUFJJTlRL
ICgiRVhJVFxuIik7Cn0KI2VuZGlmCgpzdGF0aWMgaW50IG1kaW9fcmVhZCAoc3RydWN0IG5ldF9k
ZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKQp7CglzdHJ1Y3QgcnRsODEzOV9w
cml2YXRlICp0cCA9IGRldi0+cHJpdjsKCWludCByZXR2YWwgPSAwOwojaWZkZWYgQ09ORklHXzgx
MzlUT09fODEyOQoJdm9pZCAqbWRpb19hZGRyID0gdHAtPm1taW9fYWRkciArIENvbmZpZzQ7Cglp
bnQgbWlpX2NtZCA9ICgweGY2IDw8IDEwKSB8IChwaHlfaWQgPDwgNSkgfCBsb2NhdGlvbjsKCWlu
dCBpOwojZW5kaWYKCglEUFJJTlRLICgiRU5URVJcbiIpOwoKCWlmIChwaHlfaWQgPiAzMSkgewkv
KiBSZWFsbHkgYSA4MTM5LiAgVXNlIGludGVybmFsIHJlZ2lzdGVycy4gKi8KCQlEUFJJTlRLICgi
RVhJVCBhZnRlciBkaXJlY3RseSB1c2luZyA4MTM5IGludGVybmFsIHJlZ3NcbiIpOwoJCXJldHVy
biBsb2NhdGlvbiA8IDggJiYgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dID8KCQkgICAgcmVhZHcg
KHRwLT5tbWlvX2FkZHIgKyBtaWlfMl84MTM5X21hcFtsb2NhdGlvbl0pIDogMDsKCX0KCiNpZmRl
ZiBDT05GSUdfODEzOVRPT184MTI5CgltZGlvX3N5bmMgKG1kaW9fYWRkcik7CgkvKiBTaGlmdCB0
aGUgcmVhZCBjb21tYW5kIGJpdHMgb3V0LiAqLwoJZm9yIChpID0gMTU7IGkgPj0gMDsgaS0tKSB7
CgkJaW50IGRhdGF2YWwgPSAobWlpX2NtZCAmICgxIDw8IGkpKSA/IE1ESU9fREFUQV9PVVQgOiAw
OwoKCQl3cml0ZWIgKE1ESU9fRElSIHwgZGF0YXZhbCwgbWRpb19hZGRyKTsKCQltZGlvX2RlbGF5
IChtZGlvX2FkZHIpOwoJCXdyaXRlYiAoTURJT19ESVIgfCBkYXRhdmFsIHwgTURJT19DTEssIG1k
aW9fYWRkcik7CgkJbWRpb19kZWxheSAobWRpb19hZGRyKTsKCX0KCgkvKiBSZWFkIHRoZSB0d28g
dHJhbnNpdGlvbiwgMTYgZGF0YSwgYW5kIHdpcmUtaWRsZSBiaXRzLiAqLwoJZm9yIChpID0gMTk7
IGkgPiAwOyBpLS0pIHsKCQl3cml0ZWIgKDAsIG1kaW9fYWRkcik7CgkJbWRpb19kZWxheSAobWRp
b19hZGRyKTsKCQlyZXR2YWwgPSAocmV0dmFsIDw8IDEpIHwgKChyZWFkYiAobWRpb19hZGRyKSAm
IE1ESU9fREFUQV9JTikgPyAxIDogMCk7CgkJd3JpdGViIChNRElPX0NMSywgbWRpb19hZGRyKTsK
CQltZGlvX2RlbGF5IChtZGlvX2FkZHIpOwoJfQojZW5kaWYKCglEUFJJTlRLICgiRVhJVCwgcmV0
dXJuaW5nICVkXG4iLCAocmV0dmFsID4+IDEpICYgMHhmZmZmKTsKCXJldHVybiAocmV0dmFsID4+
IDEpICYgMHhmZmZmOwp9CgoKc3RhdGljIHZvaWQgbWRpb193cml0ZSAoc3RydWN0IG5ldF9kZXZp
Y2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLAoJCQlpbnQgdmFsdWUpCnsKCXN0cnVj
dCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwojaWZkZWYgQ09ORklHXzgxMzlUT09f
ODEyOQoJdm9pZCAqbWRpb19hZGRyID0gdHAtPm1taW9fYWRkciArIENvbmZpZzQ7CglpbnQgbWlp
X2NtZCA9ICgweDUwMDIgPDwgMTYpIHwgKHBoeV9pZCA8PCAyMykgfCAobG9jYXRpb24gPDwgMTgp
IHwgdmFsdWU7CglpbnQgaTsKI2VuZGlmCgoJRFBSSU5USyAoIkVOVEVSXG4iKTsKCglpZiAocGh5
X2lkID4gMzEpIHsJLyogUmVhbGx5IGEgODEzOS4gIFVzZSBpbnRlcm5hbCByZWdpc3RlcnMuICov
CgkJdm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKCQlpZiAobG9jYXRpb24gPT0gMCkgewoJ
CQlSVExfVzggKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKCQkJUlRMX1cxNiAoQmFzaWNNb2Rl
Q3RybCwgdmFsdWUpOwoJCQlSVExfVzggKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CgkJfSBlbHNl
IGlmIChsb2NhdGlvbiA8IDggJiYgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dKQoJCQlSVExfVzE2
IChtaWlfMl84MTM5X21hcFtsb2NhdGlvbl0sIHZhbHVlKTsKCQlyZXR1cm47Cgl9CgojaWZkZWYg
Q09ORklHXzgxMzlUT09fODEyOQoJbWRpb19zeW5jIChtZGlvX2FkZHIpOwoKCS8qIFNoaWZ0IHRo
ZSBjb21tYW5kIGJpdHMgb3V0LiAqLwoJZm9yIChpID0gMzE7IGkgPj0gMDsgaS0tKSB7CgkJaW50
IGRhdGF2YWwgPQoJCSAgICAobWlpX2NtZCAmICgxIDw8IGkpKSA/IE1ESU9fV1JJVEUxIDogTURJ
T19XUklURTA7CgkJd3JpdGViIChkYXRhdmFsLCBtZGlvX2FkZHIpOwoJCW1kaW9fZGVsYXkgKG1k
aW9fYWRkcik7CgkJd3JpdGViIChkYXRhdmFsIHwgTURJT19DTEssIG1kaW9fYWRkcik7CgkJbWRp
b19kZWxheSAobWRpb19hZGRyKTsKCX0KCS8qIENsZWFyIG91dCBleHRyYSBiaXRzLiAqLwoJZm9y
IChpID0gMjsgaSA+IDA7IGktLSkgewoJCXdyaXRlYiAoMCwgbWRpb19hZGRyKTsKCQltZGlvX2Rl
bGF5IChtZGlvX2FkZHIpOwoJCXdyaXRlYiAoTURJT19DTEssIG1kaW9fYWRkcik7CgkJbWRpb19k
ZWxheSAobWRpb19hZGRyKTsKCX0KI2VuZGlmCn0KCgpzdGF0aWMgaW50IHJ0bDgxMzlfb3BlbiAo
c3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBk
ZXYtPnByaXY7CglpbnQgcmV0dmFsOwojaWZkZWYgUlRMODEzOV9ERUJVRwoJdm9pZCAqaW9hZGRy
ID0gdHAtPm1taW9fYWRkcjsKI2VuZGlmCgoJRFBSSU5USyAoIkVOVEVSXG4iKTsKCglyZXR2YWwg
PSByZXF1ZXN0X2lycSAoZGV2LT5pcnEsIHJ0bDgxMzlfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2
LT5uYW1lLCBkZXYpOwoJaWYgKHJldHZhbCkgewoJCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcg
JWRcbiIsIHJldHZhbCk7CgkJcmV0dXJuIHJldHZhbDsKCX0KCgl0cC0+dHhfYnVmcyA9IHBjaV9h
bGxvY19jb25zaXN0ZW50KHRwLT5wY2lfZGV2LCBUWF9CVUZfVE9UX0xFTiwKCQkJCQkgICAmdHAt
PnR4X2J1ZnNfZG1hKTsKCXRwLT5yeF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBj
aV9kZXYsIFJYX0JVRl9UT1RfTEVOLAoJCQkJCSAgICZ0cC0+cnhfcmluZ19kbWEpOwoJaWYgKHRw
LT50eF9idWZzID09IE5VTEwgfHwgdHAtPnJ4X3JpbmcgPT0gTlVMTCkgewoJCWZyZWVfaXJxKGRl
di0+aXJxLCBkZXYpOwoKCQlpZiAodHAtPnR4X2J1ZnMpCgkJCXBjaV9mcmVlX2NvbnNpc3RlbnQo
dHAtPnBjaV9kZXYsIFRYX0JVRl9UT1RfTEVOLAoJCQkJCSAgICB0cC0+dHhfYnVmcywgdHAtPnR4
X2J1ZnNfZG1hKTsKCQlpZiAodHAtPnJ4X3JpbmcpCgkJCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAt
PnBjaV9kZXYsIFJYX0JVRl9UT1RfTEVOLAoJCQkJCSAgICB0cC0+cnhfcmluZywgdHAtPnJ4X3Jp
bmdfZG1hKTsKCgkJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAtRU5PTUVNXG4iKTsKCQlyZXR1
cm4gLUVOT01FTTsKCgl9CgoJdHAtPmZ1bGxfZHVwbGV4ID0gdHAtPmR1cGxleF9sb2NrOwoJdHAt
PnR4X2ZsYWcgPSAoVFhfRklGT19USFJFU0ggPDwgMTEpICYgMHgwMDNmMDAwMDsKCXRwLT50d2lz
dGllID0gMTsKCglydGw4MTM5X2luaXRfcmluZyAoZGV2KTsKCXJ0bDgxMzlfaHdfc3RhcnQgKGRl
dik7CgoJRFBSSU5USyAoIiVzOiBydGw4MTM5X29wZW4oKSBpb2FkZHIgJSNseCBJUlEgJWQiCgkJ
CSIgR1AgUGlucyAlMi4yeCAlcy1kdXBsZXguXG4iLAoJCQlkZXYtPm5hbWUsIHBjaV9yZXNvdXJj
ZV9zdGFydCAodHAtPnBjaV9kZXYsIDEpLAoJCQlkZXYtPmlycSwgUlRMX1I4IChNZWRpYVN0YXR1
cyksCgkJCXRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIik7CgoJdHAtPnRocl9waWQg
PSBrZXJuZWxfdGhyZWFkIChydGw4MTM5X3RocmVhZCwgZGV2LCBDTE9ORV9GUyB8IENMT05FX0ZJ
TEVTKTsKCWlmICh0cC0+dGhyX3BpZCA8IDApCgkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiB1
bmFibGUgdG8gc3RhcnQga2VybmVsIHRocmVhZFxuIiwKCQkJZGV2LT5uYW1lKTsKCglEUFJJTlRL
ICgiRVhJVCwgcmV0dXJuaW5nIDBcbiIpOwoJcmV0dXJuIDA7Cn0KCgpzdGF0aWMgdm9pZCBydGxf
Y2hlY2tfbWVkaWEgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCXN0cnVjdCBydGw4MTM5X3By
aXZhdGUgKnRwID0gZGV2LT5wcml2OwoKCURQUklOVEsoIkVOVEVSXG4iKTsKCglpZiAodHAtPnBo
eXNbMF0gPj0gMCkgewoJCXUxNiBtaWlfcmVnNSA9IG1kaW9fcmVhZChkZXYsIHRwLT5waHlzWzBd
LCA1KTsKCQlpZiAobWlpX3JlZzUgPT0gMHhmZmZmKQoJCQk7CQkJCQkvKiBOb3QgdGhlcmUgKi8K
CQllbHNlIGlmICgobWlpX3JlZzUgJiAweDAxMDApID09IDB4MDEwMAoJCQkJIHx8IChtaWlfcmVn
NSAmIDB4MDBDMCkgPT0gMHgwMDQwKQoJCQl0cC0+ZnVsbF9kdXBsZXggPSAxOwoKCQlwcmludGsg
KEtFUk5fSU5GTyIlczogU2V0dGluZyAlcyVzLWR1cGxleCBiYXNlZCBvbiIKCQkJCSIgYXV0by1u
ZWdvdGlhdGVkIHBhcnRuZXIgYWJpbGl0eSAlNC40eC5cbiIsCgkJICAgICAgICBkZXYtPm5hbWUs
IG1paV9yZWc1ID09IDAgPyAiIiA6CgkJCQkobWlpX3JlZzUgJiAweDAxODApID8gIjEwMG1icHMg
IiA6ICIxMG1icHMgIiwKCQkJdHAtPmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLCBtaWlf
cmVnNSk7Cgl9Cn0KCi8qIFN0YXJ0IHRoZSBoYXJkd2FyZSBhdCBvcGVuIG9yIHJlc3VtZS4gKi8K
c3RhdGljIHZvaWQgcnRsODEzOV9od19zdGFydCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJ
c3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7Cgl2b2lkICppb2FkZHIgPSB0
cC0+bW1pb19hZGRyOwoJdTMyIGk7Cgl1OCB0bXA7CgoJRFBSSU5USyAoIkVOVEVSXG4iKTsKCgkv
KiBCcmluZyBvbGQgY2hpcHMgb3V0IG9mIGxvdy1wb3dlciBtb2RlLiAqLwoJaWYgKHJ0bF9jaGlw
X2luZm9bdHAtPmNoaXBzZXRdLmZsYWdzICYgSGFzSGx0Q2xrKQoJCVJUTF9XOCAoSGx0Q2xrLCAn
UicpOwoKCXJ0bDgxMzlfY2hpcF9yZXNldCAoaW9hZGRyKTsKCgkvKiB1bmxvY2sgQ29uZmlnWzAx
MjM0XSBhbmQgQk1DUiByZWdpc3RlciB3cml0ZXMgKi8KCVJUTF9XOF9GIChDZmc5MzQ2LCBDZmc5
MzQ2X1VubG9jayk7CgkvKiBSZXN0b3JlIG91ciBpZGVhIG9mIHRoZSBNQUMgYWRkcmVzcy4gKi8K
CVJUTF9XMzJfRiAoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRk
ciArIDApKSk7CglSVExfVzMyX0YgKE1BQzAgKyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRl
di0+ZGV2X2FkZHIgKyA0KSkpOwoKCS8qIE11c3QgZW5hYmxlIFR4L1J4IGJlZm9yZSBzZXR0aW5n
IHRyYW5zZmVyIHRocmVzaG9sZHMhICovCglSVExfVzggKENoaXBDbWQsIENtZFJ4RW5iIHwgQ21k
VHhFbmIpOwoKCXRwLT5yeF9jb25maWcgPSBydGw4MTM5X3J4X2NvbmZpZyB8IEFjY2VwdEJyb2Fk
Y2FzdCB8IEFjY2VwdE15UGh5czsKCVJUTF9XMzIgKFJ4Q29uZmlnLCB0cC0+cnhfY29uZmlnKTsK
CgkvKiBDaGVjayB0aGlzIHZhbHVlOiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgSUZHIGNvbnRyYWRp
Y3RzIGlmc2VsZi4gKi8KCVJUTF9XMzIgKFR4Q29uZmlnLCAoVFhfRE1BX0JVUlNUIDw8IFR4RE1B
U2hpZnQpKTsKCgl0cC0+Y3VyX3J4ID0gMDsKCglydGxfY2hlY2tfbWVkaWEgKGRldik7CgoJaWYg
KHRwLT5jaGlwc2V0ID49IENIXzgxMzlCKSB7CgkJLyogRGlzYWJsZSBtYWdpYyBwYWNrZXQgc2Nh
bm5pbmcsIHdoaWNoIGlzIGVuYWJsZWQKCQkgKiB3aGVuIFBNIGlzIGVuYWJsZWQgaW4gQ29uZmln
MS4gIEl0IGNhbiBiZSByZWVuYWJsZWQKCQkgKiB2aWEgRVRIVE9PTF9TV09MIGlmIGRlc2lyZWQu
ICAqLwoJCVJUTF9XOCAoQ29uZmlnMywgUlRMX1I4IChDb25maWczKSAmIH5DZmczX01hZ2ljKTsK
CX0KCglEUFJJTlRLKCJpbml0IGJ1ZmZlciBhZGRyZXNzZXNcbiIpOwoKCS8qIExvY2sgQ29uZmln
WzAxMjM0XSBhbmQgQk1DUiByZWdpc3RlciB3cml0ZXMgKi8KCVJUTF9XOCAoQ2ZnOTM0NiwgQ2Zn
OTM0Nl9Mb2NrKTsKCgkvKiBpbml0IFJ4IHJpbmcgYnVmZmVyIERNQSBhZGRyZXNzICovCglSVExf
VzMyX0YgKFJ4QnVmLCB0cC0+cnhfcmluZ19kbWEpOwoKCS8qIGluaXQgVHggYnVmZmVyIERNQSBh
ZGRyZXNzZXMgKi8KCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfREVTQzsgaSsrKQoJCVJUTF9XMzJf
RiAoVHhBZGRyMCArIChpICogNCksIHRwLT50eF9idWZzX2RtYSArICh0cC0+dHhfYnVmW2ldIC0g
dHAtPnR4X2J1ZnMpKTsKCglSVExfVzMyIChSeE1pc3NlZCwgMCk7CgoJcnRsODEzOV9zZXRfcnhf
bW9kZSAoZGV2KTsKCgkvKiBubyBlYXJseS1yeCBpbnRlcnJ1cHRzICovCglSVExfVzE2IChNdWx0
aUludHIsIFJUTF9SMTYgKE11bHRpSW50cikgJiBNdWx0aUludHJDbGVhcik7CgoJLyogbWFrZSBz
dXJlIFJ4VHggaGFzIHN0YXJ0ZWQgKi8KCXRtcCA9IFJUTF9SOCAoQ2hpcENtZCk7CglpZiAoKCEo
dG1wICYgQ21kUnhFbmIpKSB8fCAoISh0bXAgJiBDbWRUeEVuYikpKQoJCVJUTF9XOCAoQ2hpcENt
ZCwgQ21kUnhFbmIgfCBDbWRUeEVuYik7CgoJLyogRW5hYmxlIGFsbCBrbm93biBpbnRlcnJ1cHRz
IGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqLwoJUlRMX1cxNiAoSW50ck1hc2ssIHJ0
bDgxMzlfaW50cl9tYXNrKTsKCgluZXRpZl9zdGFydF9xdWV1ZSAoZGV2KTsKCglEUFJJTlRLICgi
RVhJVFxuIik7Cn0KCgovKiBJbml0aWFsaXplIHRoZSBSeCBhbmQgVHggcmluZ3MsIGFsb25nIHdp
dGggdmFyaW91cyAnZGV2JyBiaXRzLiAqLwpzdGF0aWMgdm9pZCBydGw4MTM5X2luaXRfcmluZyAo
c3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBk
ZXYtPnByaXY7CglpbnQgaTsKCglEUFJJTlRLICgiRU5URVJcbiIpOwoKCXRwLT5jdXJfcnggPSAw
OwoJdHAtPmN1cl90eCA9IDA7Cgl0cC0+ZGlydHlfdHggPSAwOwoKCWZvciAoaSA9IDA7IGkgPCBO
VU1fVFhfREVTQzsgaSsrKSB7CgkJdHAtPnR4X2luZm9baV0uc2tiID0gTlVMTDsKCQl0cC0+dHhf
aW5mb1tpXS5tYXBwaW5nID0gMDsKCQl0cC0+dHhfYnVmW2ldID0gJnRwLT50eF9idWZzW2kgKiBU
WF9CVUZfU0laRV07Cgl9CgoJRFBSSU5USyAoIkVYSVRcbiIpOwp9CgoKLyogVGhpcyBtdXN0IGJl
IGdsb2JhbCBmb3IgQ09ORklHXzgxMzlUT09fVFVORV9UV0lTVEVSIGNhc2UgKi8Kc3RhdGljIGlu
dCBuZXh0X3RpY2sgPSAzICogSFo7CgojaWZuZGVmIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RF
UgpzdGF0aWMgaW5saW5lIHZvaWQgcnRsODEzOV90dW5lX3R3aXN0ZXIgKHN0cnVjdCBuZXRfZGV2
aWNlICpkZXYsCgkJCQkgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwKSB7fQojZWxzZQpzdGF0
aWMgdm9pZCBydGw4MTM5X3R1bmVfdHdpc3RlciAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKCQkJ
CSAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHApCnsKCWludCBsaW5rY2FzZTsKCXZvaWQgKmlv
YWRkciA9IHRwLT5tbWlvX2FkZHI7CgoJRFBSSU5USyAoIkVOVEVSXG4iKTsKCgkvKiBUaGlzIGlz
IGEgY29tcGxpY2F0ZWQgc3RhdGUgbWFjaGluZSB0byBjb25maWd1cmUgdGhlICJ0d2lzdGVyIiBm
b3IKCSAgIGltcGVkYW5jZS9lY2hvcyBiYXNlZCBvbiB0aGUgY2FibGUgbGVuZ3RoLgoJICAgQWxs
IG9mIHRoaXMgaXMgbWFnaWMgYW5kIHVuZG9jdW1lbnRlZC4KCSAqLwoJc3dpdGNoICh0cC0+dHdp
c3RpZSkgewoJY2FzZSAxOgoJCWlmIChSVExfUjE2IChDU0NSKSAmIENTQ1JfTGlua09LQml0KSB7
CgkJCS8qIFdlIGhhdmUgbGluayBiZWF0LCBsZXQgdXMgdHVuZSB0aGUgdHdpc3Rlci4gKi8KCQkJ
UlRMX1cxNiAoQ1NDUiwgQ1NDUl9MaW5rRG93bk9mZkNtZCk7CgkJCXRwLT50d2lzdGllID0gMjsJ
LyogQ2hhbmdlIHRvIHN0YXRlIDIuICovCgkJCW5leHRfdGljayA9IEhaIC8gMTA7CgkJfSBlbHNl
IHsKCQkJLyogSnVzdCBwdXQgaW4gc29tZSByZWFzb25hYmxlIGRlZmF1bHRzIGZvciB3aGVuIGJl
YXQgcmV0dXJucy4gKi8KCQkJUlRMX1cxNiAoQ1NDUiwgQ1NDUl9MaW5rRG93bkNtZCk7CgkJCVJU
TF9XMzIgKEZJRk9UTVMsIDB4MjApOwkvKiBUdXJuIG9uIGNhYmxlIHRlc3QgbW9kZS4gKi8KCQkJ
UlRMX1czMiAoUEFSQTc4LCBQQVJBNzhfZGVmYXVsdCk7CgkJCVJUTF9XMzIgKFBBUkE3YywgUEFS
QTdjX2RlZmF1bHQpOwoJCQl0cC0+dHdpc3RpZSA9IDA7CS8qIEJhaWwgZnJvbSBmdXR1cmUgYWN0
aW9ucy4gKi8KCQl9CgkJYnJlYWs7CgljYXNlIDI6CgkJLyogUmVhZCBob3cgbG9uZyBpdCB0b29r
IHRvIGhlYXIgdGhlIGVjaG8uICovCgkJbGlua2Nhc2UgPSBSVExfUjE2IChDU0NSKSAmIENTQ1Jf
TGlua1N0YXR1c0JpdHM7CgkJaWYgKGxpbmtjYXNlID09IDB4NzAwMCkKCQkJdHAtPnR3aXN0X3Jv
dyA9IDM7CgkJZWxzZSBpZiAobGlua2Nhc2UgPT0gMHgzMDAwKQoJCQl0cC0+dHdpc3Rfcm93ID0g
MjsKCQllbHNlIGlmIChsaW5rY2FzZSA9PSAweDEwMDApCgkJCXRwLT50d2lzdF9yb3cgPSAxOwoJ
CWVsc2UKCQkJdHAtPnR3aXN0X3JvdyA9IDA7CgkJdHAtPnR3aXN0X2NvbCA9IDA7CgkJdHAtPnR3
aXN0aWUgPSAzOwkvKiBDaGFuZ2UgdG8gc3RhdGUgMi4gKi8KCQluZXh0X3RpY2sgPSBIWiAvIDEw
OwoJCWJyZWFrOwoJY2FzZSAzOgoJCS8qIFB1dCBvdXQgZm91ciB0dW5pbmcgcGFyYW1ldGVycywg
b25lIHBlciAxMDBtc2VjLiAqLwoJCWlmICh0cC0+dHdpc3RfY29sID09IDApCgkJCVJUTF9XMTYg
KEZJRk9UTVMsIDApOwoJCVJUTF9XMzIgKFBBUkE3YywgcGFyYW1bKGludCkgdHAtPnR3aXN0X3Jv
d10KCQkJIFsoaW50KSB0cC0+dHdpc3RfY29sXSk7CgkJbmV4dF90aWNrID0gSFogLyAxMDsKCQlp
ZiAoKyt0cC0+dHdpc3RfY29sID49IDQpIHsKCQkJLyogRm9yIHNob3J0IGNhYmxlcyB3ZSBhcmUg
ZG9uZS4KCQkJICAgRm9yIGxvbmcgY2FibGVzIChyb3cgPT0gMykgY2hlY2sgZm9yIG1pc3R1bmUu
ICovCgkJCXRwLT50d2lzdGllID0KCQkJICAgICh0cC0+dHdpc3Rfcm93ID09IDMpID8gNCA6IDA7
CgkJfQoJCWJyZWFrOwoJY2FzZSA0OgoJCS8qIFNwZWNpYWwgY2FzZSBmb3IgbG9uZyBjYWJsZXM6
IGNoZWNrIGZvciBtaXN0dW5lLiAqLwoJCWlmICgoUlRMX1IxNiAoQ1NDUikgJgoJCSAgICAgQ1ND
Ul9MaW5rU3RhdHVzQml0cykgPT0gMHg3MDAwKSB7CgkJCXRwLT50d2lzdGllID0gMDsKCQkJYnJl
YWs7CgkJfSBlbHNlIHsKCQkJUlRMX1czMiAoUEFSQTdjLCAweGZiMzhkZTAzKTsKCQkJdHAtPnR3
aXN0aWUgPSA1OwoJCQluZXh0X3RpY2sgPSBIWiAvIDEwOwoJCX0KCQlicmVhazsKCWNhc2UgNToK
CQkvKiBSZXR1bmUgZm9yIHNob3J0ZXIgY2FibGUgKGNvbHVtbiAyKS4gKi8KCQlSVExfVzMyIChG
SUZPVE1TLCAweDIwKTsKCQlSVExfVzMyIChQQVJBNzgsIFBBUkE3OF9kZWZhdWx0KTsKCQlSVExf
VzMyIChQQVJBN2MsIFBBUkE3Y19kZWZhdWx0KTsKCQlSVExfVzMyIChGSUZPVE1TLCAweDAwKTsK
CQl0cC0+dHdpc3Rfcm93ID0gMjsKCQl0cC0+dHdpc3RfY29sID0gMDsKCQl0cC0+dHdpc3RpZSA9
IDM7CgkJbmV4dF90aWNrID0gSFogLyAxMDsKCQlicmVhazsKCglkZWZhdWx0OgoJCS8qIGRvIG5v
dGhpbmcgKi8KCQlicmVhazsKCX0KCglEUFJJTlRLICgiRVhJVFxuIik7Cn0KI2VuZGlmIC8qIENP
TkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiAqLwoKCnN0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTM5
X3RocmVhZF9pdGVyIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAoJCQkJIHN0cnVjdCBydGw4MTM5
X3ByaXZhdGUgKnRwLAoJCQkJIHZvaWQgKmlvYWRkcikKewoJaW50IG1paV9yZWc1OwoKCW1paV9y
ZWc1ID0gbWRpb19yZWFkIChkZXYsIHRwLT5waHlzWzBdLCA1KTsKCglpZiAoIXRwLT5kdXBsZXhf
bG9jayAmJiBtaWlfcmVnNSAhPSAweGZmZmYpIHsKCQlpbnQgZHVwbGV4ID0gKG1paV9yZWc1ICYg
MHgwMTAwKQoJCSAgICB8fCAobWlpX3JlZzUgJiAweDAxQzApID09IDB4MDA0MDsKCQlpZiAodHAt
PmZ1bGxfZHVwbGV4ICE9IGR1cGxleCkgewoJCQl0cC0+ZnVsbF9kdXBsZXggPSBkdXBsZXg7CgoJ
CQlpZiAobWlpX3JlZzUpIHsKCQkJCXByaW50ayAoS0VSTl9JTkZPCgkJCQkJIiVzOiBTZXR0aW5n
ICVzLWR1cGxleCBiYXNlZCBvbiBNSUkgIyVkIGxpbmsiCgkJCQkJIiBwYXJ0bmVyIGFiaWxpdHkg
b2YgJTQuNHguXG4iLAoJCQkJCWRldi0+bmFtZSwKCQkJCQl0cC0+ZnVsbF9kdXBsZXggPyAiZnVs
bCIgOiAiaGFsZiIsCgkJCQkJdHAtPnBoeXNbMF0sIG1paV9yZWc1KTsKCQkJfSBlbHNlIHsKCQkJ
CXByaW50ayhLRVJOX0lORk8iJXM6IG1lZGlhIGlzIHVuY29ubmVjdGVkLCBsaW5rIGRvd24sIG9y
IGluY29tcGF0aWJsZSBjb25uZWN0aW9uXG4iLAoJCQkJICAgICAgIGRldi0+bmFtZSk7CgkJCX0K
I2lmIDAKCQkJUlRMX1c4IChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CgkJCVJUTF9XOCAoQ29u
ZmlnMSwgdHAtPmZ1bGxfZHVwbGV4ID8gMHg2MCA6IDB4MjApOwoJCQlSVExfVzggKENmZzkzNDYs
IENmZzkzNDZfTG9jayk7CiNlbmRpZgoJCX0KCX0KCgluZXh0X3RpY2sgPSBIWiAqIDYwOwoKCXJ0
bDgxMzlfdHVuZV90d2lzdGVyIChkZXYsIHRwKTsKCglEUFJJTlRLICgiJXM6IE1lZGlhIHNlbGVj
dGlvbiB0aWNrLCBMaW5rIHBhcnRuZXIgJTQuNHguXG4iLAoJCSBkZXYtPm5hbWUsIFJUTF9SMTYg
KE5XYXlMUEFSKSk7CglEUFJJTlRLICgiJXM6ICBPdGhlciByZWdpc3RlcnMgYXJlIEludE1hc2sg
JTQuNHggSW50U3RhdHVzICU0LjR4IgoJCSAiIFJ4U3RhdHVzICU0LjRseC5cbiIsIGRldi0+bmFt
ZSwKCQkgUlRMX1IxNiAoSW50ck1hc2spLAoJCSBSVExfUjE2IChJbnRyU3RhdHVzKSwKCQkgUlRM
X1IzMiAoUnhFYXJseVN0YXR1cykpOwoJRFBSSU5USyAoIiVzOiAgQ2hpcCBjb25maWcgJTIuMngg
JTIuMnguXG4iLAoJCSBkZXYtPm5hbWUsIFJUTF9SOCAoQ29uZmlnMCksCgkJIFJUTF9SOCAoQ29u
ZmlnMSkpOwp9CgoKc3RhdGljIGludCBydGw4MTM5X3RocmVhZCAodm9pZCAqZGF0YSkKewoJc3Ry
dWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7CglzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9
IGRldi0+cHJpdjsKCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKCglkYWVtb25pemUgKCk7CglyZXBh
cmVudF90b19pbml0KCk7CglzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdtYXNrX2xvY2spOwoJ
c2lnZW1wdHlzZXQoJmN1cnJlbnQtPmJsb2NrZWQpOwoJcmVjYWxjX3NpZ3BlbmRpbmcoY3VycmVu
dCk7CglzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ21hc2tfbG9jayk7CgoJc3RybmNweSAo
Y3VycmVudC0+Y29tbSwgZGV2LT5uYW1lLCBzaXplb2YoY3VycmVudC0+Y29tbSkgLSAxKTsKCWN1
cnJlbnQtPmNvbW1bc2l6ZW9mKGN1cnJlbnQtPmNvbW0pIC0gMV0gPSAnXDAnOwoKCXdoaWxlICgx
KSB7CgkJdGltZW91dCA9IG5leHRfdGljazsKCQlkbyB7CgkJCXRpbWVvdXQgPSBpbnRlcnJ1cHRp
YmxlX3NsZWVwX29uX3RpbWVvdXQgKCZ0cC0+dGhyX3dhaXQsIHRpbWVvdXQpOwoJCX0gd2hpbGUg
KCFzaWduYWxfcGVuZGluZyAoY3VycmVudCkgJiYgKHRpbWVvdXQgPiAwKSk7CgoJCWlmIChzaWdu
YWxfcGVuZGluZyAoY3VycmVudCkpCgkJCWJyZWFrOwoKCQlydG5sX2xvY2sgKCk7CgkJcnRsODEz
OV90aHJlYWRfaXRlciAoZGV2LCB0cCwgdHAtPm1taW9fYWRkcik7CgkJcnRubF91bmxvY2sgKCk7
Cgl9CgoJY29tcGxldGVfYW5kX2V4aXQgKCZ0cC0+dGhyX2V4aXRlZCwgMCk7Cn0KCgpzdGF0aWMg
dm9pZCBydGw4MTM5X3R4X2NsZWFyIChzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCkKewoJaW50
IGk7CgoJdHAtPmN1cl90eCA9IDA7Cgl0cC0+ZGlydHlfdHggPSAwOwoKCS8qIER1bXAgdGhlIHVu
c2VudCBUeCBwYWNrZXRzLiAqLwoJZm9yIChpID0gMDsgaSA8IE5VTV9UWF9ERVNDOyBpKyspIHsK
CQlzdHJ1Y3QgcmluZ19pbmZvICpycCA9ICZ0cC0+dHhfaW5mb1tpXTsKCQlpZiAocnAtPm1hcHBp
bmcgIT0gMCkgewoJCQlwY2lfdW5tYXBfc2luZ2xlICh0cC0+cGNpX2RldiwgcnAtPm1hcHBpbmcs
CgkJCQkJICBycC0+c2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwoJCQlycC0+bWFwcGluZyA9
IDA7CgkJfQoJCWlmIChycC0+c2tiKSB7CgkJCWRldl9rZnJlZV9za2IgKHJwLT5za2IpOwoJCQly
cC0+c2tiID0gTlVMTDsKCQkJdHAtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKCQl9Cgl9Cn0KCgpzdGF0
aWMgdm9pZCBydGw4MTM5X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCXN0
cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwoJdm9pZCAqaW9hZGRyID0gdHAt
Pm1taW9fYWRkcjsKCWludCBpOwoJdTggdG1wODsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJRFBS
SU5USyAoIiVzOiBUcmFuc21pdCB0aW1lb3V0LCBzdGF0dXMgJTIuMnggJTQuNHggIgoJCSAibWVk
aWEgJTIuMnguXG4iLCBkZXYtPm5hbWUsCgkJIFJUTF9SOCAoQ2hpcENtZCksCgkJIFJUTF9SMTYg
KEludHJTdGF0dXMpLAoJCSBSVExfUjggKE1lZGlhU3RhdHVzKSk7CgoJdHAtPnhzdGF0cy50eF90
aW1lb3V0cysrOwoKCS8qIGRpc2FibGUgVHggQVNBUCwgaWYgbm90IGFscmVhZHkgKi8KCXRtcDgg
PSBSVExfUjggKENoaXBDbWQpOwoJaWYgKHRtcDggJiBDbWRUeEVuYikKCQlSVExfVzggKENoaXBD
bWQsIENtZFJ4RW5iKTsKCgkvKiBEaXNhYmxlIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIGlu
dGVycnVwdCBtYXNrLiAqLwoJUlRMX1cxNiAoSW50ck1hc2ssIDB4MDAwMCk7CgoJLyogRW1pdCBp
bmZvIHRvIGZpZ3VyZSBvdXQgd2hhdCB3ZW50IHdyb25nLiAqLwoJcHJpbnRrIChLRVJOX0RFQlVH
ICIlczogVHggcXVldWUgc3RhcnQgZW50cnkgJWxkICBkaXJ0eSBlbnRyeSAlbGQuXG4iLAoJCWRl
di0+bmFtZSwgdHAtPmN1cl90eCwgdHAtPmRpcnR5X3R4KTsKCWZvciAoaSA9IDA7IGkgPCBOVU1f
VFhfREVTQzsgaSsrKQoJCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICBUeCBkZXNjcmlwdG9yICVk
IGlzICU4LjhseC4lc1xuIiwKCQkJZGV2LT5uYW1lLCBpLCBSVExfUjMyIChUeFN0YXR1czAgKyAo
aSAqIDQpKSwKCQkJaSA9PSB0cC0+ZGlydHlfdHggJSBOVU1fVFhfREVTQyA/CgkJCQkiIChxdWV1
ZSBoZWFkKSIgOiAiIik7CgoJLyogU3RvcCBhIHNoYXJlZCBpbnRlcnJ1cHQgZnJvbSBzY2F2ZW5n
aW5nIHdoaWxlIHdlIGFyZS4gKi8KCXNwaW5fbG9ja19pcnFzYXZlICgmdHAtPmxvY2ssIGZsYWdz
KTsKCXJ0bDgxMzlfdHhfY2xlYXIgKHRwKTsKCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ0cC0+
bG9jaywgZmxhZ3MpOwoKCS8qIC4uLmFuZCBmaW5hbGx5LCByZXNldCBldmVyeXRoaW5nICovCgly
dGw4MTM5X2h3X3N0YXJ0IChkZXYpOwoKCW5ldGlmX3dha2VfcXVldWUgKGRldik7Cn0KCgpzdGF0
aWMgaW50IHJ0bDgxMzlfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5l
dF9kZXZpY2UgKmRldikKewoJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7
Cgl2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwoJdW5zaWduZWQgaW50IGVudHJ5OwoJdTMy
IGRtYV9hZGRyOwoKCW1iKCk7CgoJLyogQ2FsY3VsYXRlIHRoZSBuZXh0IFR4IGRlc2NyaXB0b3Ig
ZW50cnkuICovCgllbnRyeSA9IHRwLT5jdXJfdHggJSBOVU1fVFhfREVTQzsKCglhc3NlcnQgKHRw
LT50eF9pbmZvW2VudHJ5XS5za2IgPT0gTlVMTCk7Cglhc3NlcnQgKHRwLT50eF9pbmZvW2VudHJ5
XS5tYXBwaW5nID09IDApOwoKCXRwLT50eF9pbmZvW2VudHJ5XS5za2IgPSBza2I7CglpZiAoICEo
KHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgMykgJiYgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFn
cyA9PSAwICYmCgkJCXNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX0hXKSB7CgkJdHAtPnhzdGF0
cy50eF9idWZfbWFwcGVkKys7CgkJdHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmcgPQoJCSAgICBw
Y2lfbWFwX3NpbmdsZSAodHAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCgkJCQkgICAg
UENJX0RNQV9UT0RFVklDRSk7CgkJZG1hX2FkZHIgPSB0cC0+dHhfaW5mb1tlbnRyeV0ubWFwcGlu
ZzsKCX0gZWxzZSBpZiAoc2tiLT5sZW4gPCBUWF9CVUZfU0laRSkgewoJCXNrYl9jb3B5X2FuZF9j
c3VtX2Rldihza2IsIHRwLT50eF9idWZbZW50cnldKTsKCQlkbWFfYWRkciA9IHRwLT50eF9idWZz
X2RtYSArICh0cC0+dHhfYnVmW2VudHJ5XSAtIHRwLT50eF9idWZzKTsKCX0gZWxzZSB7CgkJZGV2
X2tmcmVlX3NrYihza2IpOwoJCXRwLT50eF9pbmZvW2VudHJ5XS5za2IgPSBOVUxMOwoJCXJldHVy
biAwOwogIAl9CgkvKiBOb3RlOiB0aGUgY2hpcCBkb2Vzbid0IGhhdmUgYXV0by1wYWQhICovCglz
cGluX2xvY2tfaXJxKCZ0cC0+bG9jayk7CglSVExfVzMyX0YgKFR4QWRkcjAgKyAoZW50cnkgKiA0
KSwgZG1hX2FkZHIpOwoJUlRMX1czMl9GIChUeFN0YXR1czAgKyAoZW50cnkgKiBzaXplb2YgKHUz
MikpLAoJCSAgIHRwLT50eF9mbGFnIHwgKHNrYi0+bGVuID49IEVUSF9aTEVOID8gc2tiLT5sZW4g
OiBFVEhfWkxFTikpOwoKCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwoKCXRwLT5jdXJfdHgr
KzsKCW1iKCk7CglpZiAoKHRwLT5jdXJfdHggLSBOVU1fVFhfREVTQykgPT0gdHAtPmRpcnR5X3R4
KQoJCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CglzcGluX3VubG9ja19pcnEoJnRwLT5sb2NrKTsK
CglEUFJJTlRLICgiJXM6IFF1ZXVlZCBUeCBwYWNrZXQgYXQgJXAgc2l6ZSAldSB0byBzbG90ICVk
LlxuIiwKCQkgZGV2LT5uYW1lLCBza2ItPmRhdGEsIHNrYi0+bGVuLCBlbnRyeSk7CgoJcmV0dXJu
IDA7Cn0KCgpzdGF0aWMgdm9pZCBydGw4MTM5X3R4X2ludGVycnVwdCAoc3RydWN0IG5ldF9kZXZp
Y2UgKmRldiwKCQkJCSAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAsCgkJCQkgIHZvaWQgKmlv
YWRkcikKewoJdW5zaWduZWQgbG9uZyBkaXJ0eV90eCwgdHhfbGVmdDsKCglhc3NlcnQgKGRldiAh
PSBOVUxMKTsKCWFzc2VydCAodHAgIT0gTlVMTCk7Cglhc3NlcnQgKGlvYWRkciAhPSBOVUxMKTsK
CglkaXJ0eV90eCA9IHRwLT5kaXJ0eV90eDsKCXR4X2xlZnQgPSB0cC0+Y3VyX3R4IC0gZGlydHlf
dHg7Cgl3aGlsZSAodHhfbGVmdCA+IDApIHsKCQlpbnQgZW50cnkgPSBkaXJ0eV90eCAlIE5VTV9U
WF9ERVNDOwoJCWludCB0eHN0YXR1czsKCgkJdHhzdGF0dXMgPSBSVExfUjMyIChUeFN0YXR1czAg
KyAoZW50cnkgKiBzaXplb2YgKHUzMikpKTsKCgkJaWYgKCEodHhzdGF0dXMgJiAoVHhTdGF0T0sg
fCBUeFVuZGVycnVuIHwgVHhBYm9ydGVkKSkpCgkJCWJyZWFrOwkvKiBJdCBzdGlsbCBoYXNuJ3Qg
YmVlbiBUeGVkICovCgoJCS8qIE5vdGU6IFR4Q2Fycmllckxvc3QgaXMgYWx3YXlzIGFzc2VydGVk
IGF0IDEwMG1icHMuICovCgkJaWYgKHR4c3RhdHVzICYgKFR4T3V0T2ZXaW5kb3cgfCBUeEFib3J0
ZWQpKSB7CgkJCS8qIFRoZXJlIHdhcyBhbiBtYWpvciBlcnJvciwgbG9nIGl0LiAqLwoJCQlEUFJJ
TlRLICgiJXM6IFRyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgJTguOHguXG4iLAoJCQkJIGRldi0+
bmFtZSwgdHhzdGF0dXMpOwoJCQl0cC0+c3RhdHMudHhfZXJyb3JzKys7CgkJCWlmICh0eHN0YXR1
cyAmIFR4QWJvcnRlZCkgewoJCQkJdHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CgkJCQlS
VExfVzMyX0YgKFR4Q29uZmlnLCBUeENsZWFyQWJ0IHwgKFRYX0RNQV9CVVJTVCA8PCBUeERNQVNo
aWZ0KSk7CgkJCX0KCQkJaWYgKHR4c3RhdHVzICYgVHhDYXJyaWVyTG9zdCkKCQkJCXRwLT5zdGF0
cy50eF9jYXJyaWVyX2Vycm9ycysrOwoJCQlpZiAodHhzdGF0dXMgJiBUeE91dE9mV2luZG93KQoJ
CQkJdHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKI2lmZGVmIEVUSEVSX1NUQVRTCgkJCWlm
ICgodHhzdGF0dXMgJiAweDBmMDAwMDAwKSA9PSAweDBmMDAwMDAwKQoJCQkJdHAtPnN0YXRzLmNv
bGxpc2lvbnMxNisrOwojZW5kaWYKCQl9IGVsc2UgewoJCQlpZiAodHhzdGF0dXMgJiBUeFVuZGVy
cnVuKSB7CgkJCQkvKiBBZGQgNjQgdG8gdGhlIFR4IEZJRk8gdGhyZXNob2xkLiAqLwoJCQkJaWYg
KHRwLT50eF9mbGFnIDwgMHgwMDMwMDAwMCkKCQkJCQl0cC0+dHhfZmxhZyArPSAweDAwMDIwMDAw
OwoJCQkJdHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CgkJCX0KCQkJdHAtPnN0YXRzLmNvbGxp
c2lvbnMgKz0gKHR4c3RhdHVzID4+IDI0KSAmIDE1OwoJCQl0cC0+c3RhdHMudHhfYnl0ZXMgKz0g
dHhzdGF0dXMgJiAweDdmZjsKCQkJdHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKCQl9CgoJCS8qIEZy
ZWUgdGhlIG9yaWdpbmFsIHNrYi4gKi8KCQlpZiAodHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmcg
IT0gMCkgewoJCQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wY2lfZGV2LAoJCQkJCSB0cC0+dHhfaW5m
b1tlbnRyeV0ubWFwcGluZywKCQkJCQkgdHAtPnR4X2luZm9bZW50cnldLnNrYi0+bGVuLAoJCQkJ
CSBQQ0lfRE1BX1RPREVWSUNFKTsKCQkJdHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmcgPSAwOwoJ
CX0KCQlkZXZfa2ZyZWVfc2tiX2lycSAodHAtPnR4X2luZm9bZW50cnldLnNrYik7CgkJdHAtPnR4
X2luZm9bZW50cnldLnNrYiA9IE5VTEw7CgoJCWRpcnR5X3R4Kys7CgkJdHhfbGVmdC0tOwoJfQoK
I2lmbmRlZiBSVEw4MTM5X05ERUJVRwoJaWYgKHRwLT5jdXJfdHggLSBkaXJ0eV90eCA+IE5VTV9U
WF9ERVNDKSB7CgkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IE91dC1vZi1zeW5jIGRpcnR5IHBvaW50
ZXIsICVsZCB2cy4gJWxkLlxuIiwKCQkgICAgICAgIGRldi0+bmFtZSwgZGlydHlfdHgsIHRwLT5j
dXJfdHgpOwoJCWRpcnR5X3R4ICs9IE5VTV9UWF9ERVNDOwoJfQojZW5kaWYgLyogUlRMODEzOV9O
REVCVUcgKi8KCgkvKiBvbmx5IHdha2UgdGhlIHF1ZXVlIGlmIHdlIGRpZCB3b3JrLCBhbmQgdGhl
IHF1ZXVlIGlzIHN0b3BwZWQgKi8KCWlmICh0cC0+ZGlydHlfdHggIT0gZGlydHlfdHgpIHsKCQl0
cC0+ZGlydHlfdHggPSBkaXJ0eV90eDsKCQltYigpOwoJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVk
IChkZXYpKQoJCQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwoJfQp9CgoKLyogVE9ETzogY2xlYW4g
dGhpcyB1cCEgIFJ4IHJlc2V0IG5lZWQgbm90IGJlIHRoaXMgaW50ZW5zaXZlICovCnN0YXRpYyB2
b2lkIHJ0bDgxMzlfcnhfZXJyICh1MzIgcnhfc3RhdHVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2
LAoJCQkgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAsIHZvaWQgKmlvYWRkcikKewoJdTgg
dG1wODsKCWludCB0bXBfd29yazsKCglEUFJJTlRLICgiJXM6IEV0aGVybmV0IGZyYW1lIGhhZCBl
cnJvcnMsIHN0YXR1cyAlOC44eC5cbiIsCgkgICAgICAgICBkZXYtPm5hbWUsIHJ4X3N0YXR1cyk7
CglpZiAocnhfc3RhdHVzICYgUnhUb29Mb25nKSB7CgkJRFBSSU5USyAoIiVzOiBPdmVyc2l6ZWQg
RXRoZXJuZXQgZnJhbWUsIHN0YXR1cyAlNC40eCFcbiIsCgkJCSBkZXYtPm5hbWUsIHJ4X3N0YXR1
cyk7CgkJLyogQS5DLjogVGhlIGNoaXAgaGFuZ3MgaGVyZS4gKi8KCX0KCXRwLT5zdGF0cy5yeF9l
cnJvcnMrKzsKCWlmIChyeF9zdGF0dXMgJiAoUnhCYWRTeW1ib2wgfCBSeEJhZEFsaWduKSkKCQl0
cC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CglpZiAocnhfc3RhdHVzICYgKFJ4UnVudCB8IFJ4
VG9vTG9uZykpCgkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKCWlmIChyeF9zdGF0dXMg
JiBSeENSQ0VycikKCQl0cC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwoKCS8qIFJlc2V0IHRoZSBy
ZWNlaXZlciwgYmFzZWQgb24gUmVhbFRlayByZWNvbW1lbmRhdGlvbi4gKEJ1Zz8pICovCgoJLyog
ZGlzYWJsZSByZWNlaXZlICovCglSVExfVzhfRiAoQ2hpcENtZCwgQ21kVHhFbmIpOwoJdG1wX3dv
cmsgPSAyMDA7Cgl3aGlsZSAoLS10bXBfd29yayA+IDApIHsKCQl1ZGVsYXkoMSk7CgkJdG1wOCA9
IFJUTF9SOCAoQ2hpcENtZCk7CgkJaWYgKCEodG1wOCAmIENtZFJ4RW5iKSkKCQkJYnJlYWs7Cgl9
CglpZiAodG1wX3dvcmsgPD0gMCkKCQlwcmludGsgKEtFUk5fV0FSTklORyBQRlggInJ4IHN0b3Ag
d2FpdCB0b28gbG9uZ1xuIik7CgkvKiByZXN0YXJ0IHJlY2VpdmUgKi8KCXRtcF93b3JrID0gMjAw
OwoJd2hpbGUgKC0tdG1wX3dvcmsgPiAwKSB7CgkJUlRMX1c4X0YgKENoaXBDbWQsIENtZFJ4RW5i
IHwgQ21kVHhFbmIpOwoJCXVkZWxheSgxKTsKCQl0bXA4ID0gUlRMX1I4IChDaGlwQ21kKTsKCQlp
ZiAoKHRtcDggJiBDbWRSeEVuYikgJiYgKHRtcDggJiBDbWRUeEVuYikpCgkJCWJyZWFrOwoJfQoJ
aWYgKHRtcF93b3JrIDw9IDApCgkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUEZYICJ0eC9yeCBlbmFi
bGUgd2FpdCB0b28gbG9uZ1xuIik7CgoJLyogYW5kIHJlaW5pdGlhbGl6ZSBhbGwgcnggcmVsYXRl
ZCByZWdpc3RlcnMgKi8KCVJUTF9XOF9GIChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CgkvKiBN
dXN0IGVuYWJsZSBUeC9SeCBiZWZvcmUgc2V0dGluZyB0cmFuc2ZlciB0aHJlc2hvbGRzISAqLwoJ
UlRMX1c4IChDaGlwQ21kLCBDbWRSeEVuYiB8IENtZFR4RW5iKTsKCgl0cC0+cnhfY29uZmlnID0g
cnRsODEzOV9yeF9jb25maWcgfCBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXM7CglSVExf
VzMyIChSeENvbmZpZywgdHAtPnJ4X2NvbmZpZyk7Cgl0cC0+Y3VyX3J4ID0gMDsKCglEUFJJTlRL
KCJpbml0IGJ1ZmZlciBhZGRyZXNzZXNcbiIpOwoKCS8qIExvY2sgQ29uZmlnWzAxMjM0XSBhbmQg
Qk1DUiByZWdpc3RlciB3cml0ZXMgKi8KCVJUTF9XOCAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsK
CgkvKiBpbml0IFJ4IHJpbmcgYnVmZmVyIERNQSBhZGRyZXNzICovCglSVExfVzMyX0YgKFJ4QnVm
LCB0cC0+cnhfcmluZ19kbWEpOwoKCS8qIEEuQy46IFJlc2V0IHRoZSBtdWx0aWNhc3QgbGlzdC4g
Ki8KCV9fc2V0X3J4X21vZGUgKGRldik7Cn0KCnN0YXRpYyB2b2lkIHJ0bDgxMzlfcnhfaW50ZXJy
dXB0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAoJCQkJICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRl
ICp0cCwgdm9pZCAqaW9hZGRyKQp7Cgl1bnNpZ25lZCBjaGFyICpyeF9yaW5nOwoJdTE2IGN1cl9y
eDsKCglhc3NlcnQgKGRldiAhPSBOVUxMKTsKCWFzc2VydCAodHAgIT0gTlVMTCk7Cglhc3NlcnQg
KGlvYWRkciAhPSBOVUxMKTsKCglyeF9yaW5nID0gdHAtPnJ4X3Jpbmc7CgljdXJfcnggPSB0cC0+
Y3VyX3J4OwoKCURQUklOVEsgKCIlczogSW4gcnRsODEzOV9yeCgpLCBjdXJyZW50ICU0LjR4IEJ1
ZkFkZHIgJTQuNHgsIgoJCSAiIGZyZWUgdG8gJTQuNHgsIENtZCAlMi4yeC5cbiIsIGRldi0+bmFt
ZSwgY3VyX3J4LAoJCSBSVExfUjE2IChSeEJ1ZkFkZHIpLAoJCSBSVExfUjE2IChSeEJ1ZlB0ciks
IFJUTF9SOCAoQ2hpcENtZCkpOwoKCXdoaWxlICgoUlRMX1I4IChDaGlwQ21kKSAmIFJ4QnVmRW1w
dHkpID09IDApIHsKCQlpbnQgcmluZ19vZmZzZXQgPSBjdXJfcnggJSBSWF9CVUZfTEVOOwoJCXUz
MiByeF9zdGF0dXM7CgkJdW5zaWduZWQgaW50IHJ4X3NpemU7CgkJdW5zaWduZWQgaW50IHBrdF9z
aXplOwoJCXN0cnVjdCBza19idWZmICpza2I7CgoJCXJtYigpOwoKCQkvKiByZWFkIHNpemUrc3Rh
dHVzIG9mIG5leHQgZnJhbWUgZnJvbSBETUEgcmluZyBidWZmZXIgKi8KCQlyeF9zdGF0dXMgPSBs
ZTMyX3RvX2NwdSAoKih1MzIgKikgKHJ4X3JpbmcgKyByaW5nX29mZnNldCkpOwoJCXJ4X3NpemUg
PSByeF9zdGF0dXMgPj4gMTY7CgkJcGt0X3NpemUgPSByeF9zaXplIC0gNDsKCgkJRFBSSU5USyAo
IiVzOiAgcnRsODEzOV9yeCgpIHN0YXR1cyAlNC40eCwgc2l6ZSAlNC40eCwiCgkJCSAiIGN1ciAl
NC40eC5cbiIsIGRldi0+bmFtZSwgcnhfc3RhdHVzLAoJCQkgcnhfc2l6ZSwgY3VyX3J4KTsKI2lm
IFJUTDgxMzlfREVCVUcgPiAyCgkJewoJCQlpbnQgaTsKCQkJRFBSSU5USyAoIiVzOiBGcmFtZSBj
b250ZW50cyAiLCBkZXYtPm5hbWUpOwoJCQlmb3IgKGkgPSAwOyBpIDwgNzA7IGkrKykKCQkJCXBy
aW50ayAoIiAlMi4yeCIsCgkJCQkJcnhfcmluZ1tyaW5nX29mZnNldCArIGldKTsKCQkJcHJpbnRr
ICgiLlxuIik7CgkJfQojZW5kaWYKCgkJaWYgKHJ4X3NpemUgPT0gMHhmZmYwKSB7IC8qIEVhcmx5
IFJ4IGluIHByb2dyZXNzICovCgkJCXRwLT54c3RhdHMuZWFybHlfcngrKzsKCQkJYnJlYWs7CgkJ
fQoKCQkvKiBJZiBSeCBlcnIgb3IgaW52YWxpZCByeF9zaXplL3J4X3N0YXR1cyByZWNlaXZlZAoJ
CSAqICh3aGljaCBoYXBwZW5zIGlmIHdlIGdldCBsb3N0IGluIHRoZSByaW5nKSwKCQkgKiBSeCBw
cm9jZXNzIGdldHMgcmVzZXQsIHNvIHdlIGFib3J0IGFueSBmdXJ0aGVyCgkJICogUnggcHJvY2Vz
c2luZy4KCQkgKi8KCQlpZiAoKHJ4X3NpemUgPiAoTUFYX0VUSF9GUkFNRV9TSVpFKzQpKSB8fAoJ
CSAgICAocnhfc2l6ZSA8IDgpIHx8CgkJICAgICghKHJ4X3N0YXR1cyAmIFJ4U3RhdHVzT0spKSkg
ewoJCQlydGw4MTM5X3J4X2VyciAocnhfc3RhdHVzLCBkZXYsIHRwLCBpb2FkZHIpOwoJCQlyZXR1
cm47CgkJfQoKCQkvKiBNYWxsb2MgdXAgbmV3IGJ1ZmZlciwgY29tcGF0aWJsZSB3aXRoIG5ldC0y
ZS4gKi8KCQkvKiBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguICovCgoJ
CS8qIFRPRE86IGNvbnNpZGVyIGFsbG9jYXRpbmcgc2tiJ3Mgb3V0c2lkZSBvZgoJCSAqIGludGVy
cnVwdCBjb250ZXh0LCBib3RoIHRvIHNwZWVkIGludGVycnVwdCBwcm9jZXNzaW5nLAoJCSAqIGFu
ZCBhbHNvIHRvIHJlZHVjZSB0aGUgY2hhbmNlcyBvZiBoYXZpbmcgdG8KCQkgKiBkcm9wIHBhY2tl
dHMgaGVyZSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCgkJICovCgoJCXNrYiA9IGRldl9hbGxvY19z
a2IgKHBrdF9zaXplICsgMik7CgkJaWYgKHNrYikgewoJCQlza2ItPmRldiA9IGRldjsKCQkJc2ti
X3Jlc2VydmUgKHNrYiwgMik7CS8qIDE2IGJ5dGUgYWxpZ24gdGhlIElQIGZpZWxkcy4gKi8KCgkJ
CWV0aF9jb3B5X2FuZF9zdW0gKHNrYiwgJnJ4X3JpbmdbcmluZ19vZmZzZXQgKyA0XSwgcGt0X3Np
emUsIDApOwoJCQlza2JfcHV0IChza2IsIHBrdF9zaXplKTsKCgkJCXNrYi0+cHJvdG9jb2wgPSBl
dGhfdHlwZV90cmFucyAoc2tiLCBkZXYpOwoJCQluZXRpZl9yeCAoc2tiKTsKCQkJZGV2LT5sYXN0
X3J4ID0gamlmZmllczsKCQkJdHAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9zaXplOwoJCQl0cC0+
c3RhdHMucnhfcGFja2V0cysrOwoJCX0gZWxzZSB7CgkJCXByaW50ayAoS0VSTl9XQVJOSU5HCgkJ
CQkiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAoJCQkJZGV2LT5uYW1l
KTsKCQkJdHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKCQl9CgoJCWN1cl9yeCA9IChjdXJfcnggKyBy
eF9zaXplICsgNCArIDMpICYgfjM7CgkJUlRMX1cxNiAoUnhCdWZQdHIsIGN1cl9yeCAtIDE2KTsK
CgkJaWYgKFJUTF9SMTYgKEludHJTdGF0dXMpICYgUnhBY2tCaXRzKQoJCQlSVExfVzE2X0YgKElu
dHJTdGF0dXMsIFJ4QWNrQml0cyk7Cgl9CgoJRFBSSU5USyAoIiVzOiBEb25lIHJ0bDgxMzlfcngo
KSwgY3VycmVudCAlNC40eCBCdWZBZGRyICU0LjR4LCIKCQkgIiBmcmVlIHRvICU0LjR4LCBDbWQg
JTIuMnguXG4iLCBkZXYtPm5hbWUsIGN1cl9yeCwKCQkgUlRMX1IxNiAoUnhCdWZBZGRyKSwKCQkg
UlRMX1IxNiAoUnhCdWZQdHIpLCBSVExfUjggKENoaXBDbWQpKTsKCgl0cC0+Y3VyX3J4ID0gY3Vy
X3J4OwoKCWlmICgoUlRMX1I4IChDaGlwQ21kKSAmIFJ4QnVmRW1wdHkpICYmCgkgICAgKFJUTF9S
MTYgKEludHJTdGF0dXMpICYgUnhBY2tCaXRzKSkKCQlSVExfVzE2X0YgKEludHJTdGF0dXMsIFJ4
QWNrQml0cyk7Cn0KCgpzdGF0aWMgdm9pZCBydGw4MTM5X3dlaXJkX2ludGVycnVwdCAoc3RydWN0
IG5ldF9kZXZpY2UgKmRldiwKCQkJCSAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAsCgkJ
CQkgICAgIHZvaWQgKmlvYWRkciwKCQkJCSAgICAgaW50IHN0YXR1cywgaW50IGxpbmtfY2hhbmdl
ZCkKewoJRFBSSU5USyAoIiVzOiBBYm5vcm1hbCBpbnRlcnJ1cHQsIHN0YXR1cyAlOC44eC5cbiIs
CgkJIGRldi0+bmFtZSwgc3RhdHVzKTsKCglhc3NlcnQgKGRldiAhPSBOVUxMKTsKCWFzc2VydCAo
dHAgIT0gTlVMTCk7Cglhc3NlcnQgKGlvYWRkciAhPSBOVUxMKTsKCgkvKiBVcGRhdGUgdGhlIGVy
cm9yIGNvdW50LiAqLwoJdHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gUlRMX1IzMiAoUnhN
aXNzZWQpOwoJUlRMX1czMiAoUnhNaXNzZWQsIDApOwoKCWlmICgoc3RhdHVzICYgUnhVbmRlcnJ1
bikgJiYgbGlua19jaGFuZ2VkICYmCgkgICAgKHRwLT5kcnZfZmxhZ3MgJiBIQVNfTE5LX0NITkcp
KSB7CgkJLyogUmVhbGx5IGxpbmstY2hhbmdlIG9uIG5ldyBjaGlwcy4gKi8KCQlpbnQgbHBhciA9
IFJUTF9SMTYgKE5XYXlMUEFSKTsKCQlpbnQgZHVwbGV4ID0gKGxwYXIgJiAweDAxMDApIHx8IChs
cGFyICYgMHgwMUMwKSA9PSAweDAwNDAKCQkJCXx8IHRwLT5kdXBsZXhfbG9jazsKCQlpZiAodHAt
PmZ1bGxfZHVwbGV4ICE9IGR1cGxleCkgewoJCQl0cC0+ZnVsbF9kdXBsZXggPSBkdXBsZXg7CiNp
ZiAwCgkJCVJUTF9XOCAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwoJCQlSVExfVzggKENvbmZp
ZzEsIHRwLT5mdWxsX2R1cGxleCA/IDB4NjAgOiAweDIwKTsKCQkJUlRMX1c4IChDZmc5MzQ2LCBD
Zmc5MzQ2X0xvY2spOwojZW5kaWYKCQl9CgkJc3RhdHVzICY9IH5SeFVuZGVycnVuOwoJfQoKCS8q
IFhYWCBhbG9uZyB3aXRoIHJ0bDgxMzlfcnhfZXJyLCBhcmUgd2UgZG91YmxlLWNvdW50aW5nIGVy
cm9ycz8gKi8KCWlmIChzdGF0dXMgJgoJICAgIChSeFVuZGVycnVuIHwgUnhPdmVyZmxvdyB8IFJ4
RXJyIHwgUnhGSUZPT3ZlcikpCgkJdHAtPnN0YXRzLnJ4X2Vycm9ycysrOwoKCWlmIChzdGF0dXMg
JiAoUENTVGltZW91dCkpCgkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKCWlmIChzdGF0
dXMgJiAoUnhVbmRlcnJ1biB8IFJ4RklGT092ZXIpKQoJCXRwLT5zdGF0cy5yeF9maWZvX2Vycm9y
cysrOwoJaWYgKHN0YXR1cyAmIFBDSUVycikgewoJCXUxNiBwY2lfY21kX3N0YXR1czsKCQlwY2lf
cmVhZF9jb25maWdfd29yZCAodHAtPnBjaV9kZXYsIFBDSV9TVEFUVVMsICZwY2lfY21kX3N0YXR1
cyk7CgoJCXByaW50ayAoS0VSTl9FUlIgIiVzOiBQQ0kgQnVzIGVycm9yICU0LjR4LlxuIiwKCQkJ
ZGV2LT5uYW1lLCBwY2lfY21kX3N0YXR1cyk7Cgl9Cn0KCgovKiBUaGUgaW50ZXJydXB0IGhhbmRs
ZXIgZG9lcyBhbGwgb2YgdGhlIFJ4IHRocmVhZCB3b3JrIGFuZCBjbGVhbnMgdXAKICAgYWZ0ZXIg
dGhlIFR4IHRocmVhZC4gKi8Kc3RhdGljIHZvaWQgcnRsODEzOV9pbnRlcnJ1cHQgKGludCBpcnEs
IHZvaWQgKmRldl9pbnN0YW5jZSwKCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQp7Cglz
dHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pbnN0YW5j
ZTsKCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwoJaW50IGJvZ3VzY250
ID0gbWF4X2ludGVycnVwdF93b3JrOwoJdm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKCWlu
dCBhY2tzdGF0LCBzdGF0dXM7CglpbnQgbGlua19jaGFuZ2VkID0gMDsgLyogYXZvaWQgYm9ndXMg
InVuaW5pdCIgd2FybmluZyAqLwoKCXNwaW5fbG9jayAoJnRwLT5sb2NrKTsKCglkbyB7CgkJc3Rh
dHVzID0gUlRMX1IxNiAoSW50clN0YXR1cyk7CgoJCS8qIGgvdyBubyBsb25nZXIgcHJlc2VudCAo
aG90cGx1Zz8pIG9yIG1ham9yIGVycm9yLCBiYWlsICovCgkJaWYgKHN0YXR1cyA9PSAweEZGRkYp
CgkJCWJyZWFrOwoKCQkvKiBBY2tub3dsZWRnZSBhbGwgb2YgdGhlIGN1cnJlbnQgaW50ZXJydXB0
IHNvdXJjZXMgQVNBUCwgYnV0CgkJICAgYW4gZmlyc3QgZ2V0IGFuIGFkZGl0aW9uYWwgc3RhdHVz
IGJpdCBmcm9tIENTQ1IuICovCgkJaWYgKHN0YXR1cyAmIFJ4VW5kZXJydW4pCgkJCWxpbmtfY2hh
bmdlZCA9IFJUTF9SMTYgKENTQ1IpICYgQ1NDUl9MaW5rQ2hhbmdlQml0OwoKCQkvKiBUaGUgY2hp
cCB0YWtlcyBzcGVjaWFsIGFjdGlvbiB3aGVuIHdlIGNsZWFyIFJ4QWNrQml0cywKCQkgKiBzbyB3
ZSBjbGVhciB0aGVtIGxhdGVyIGluIHJ0bDgxMzlfcnhfaW50ZXJydXB0CgkJICovCgkJYWNrc3Rh
dCA9IHN0YXR1cyAmIH5SeEFja0JpdHM7CgkJUlRMX1cxNiAoSW50clN0YXR1cywgYWNrc3RhdCk7
CgoJCURQUklOVEsgKCIlczogaW50ZXJydXB0ICBzdGF0dXM9JSM0LjR4IGFja3N0YXQ9JSM0LjR4
IG5ldyBpbnRzdGF0PSUjNC40eC5cbiIsCgkJCSBkZXYtPm5hbWUsIGFja3N0YXQsIHN0YXR1cywg
UlRMX1IxNiAoSW50clN0YXR1cykpOwoKCQlpZiAoKHN0YXR1cyAmCgkJICAgICAoUENJRXJyIHwg
UENTVGltZW91dCB8IFJ4VW5kZXJydW4gfCBSeE92ZXJmbG93IHwKCQkgICAgICBSeEZJRk9PdmVy
IHwgVHhFcnIgfCBUeE9LIHwgUnhFcnIgfCBSeE9LKSkgPT0gMCkKCQkJYnJlYWs7CgoJCWlmIChu
ZXRpZl9ydW5uaW5nIChkZXYpICYmIChzdGF0dXMgJiBSeEFja0JpdHMpKQoJCQlydGw4MTM5X3J4
X2ludGVycnVwdCAoZGV2LCB0cCwgaW9hZGRyKTsKCgkJLyogQ2hlY2sgdW5jb21tb24gZXZlbnRz
IHdpdGggb25lIHRlc3QuICovCgkJaWYgKHN0YXR1cyAmIChQQ0lFcnIgfCBQQ1NUaW1lb3V0IHwg
UnhVbmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfAoJCSAgCSAgICAgIFJ4RklGT092ZXIgfCBUeEVyciB8
IFJ4RXJyKSkKCQkJcnRsODEzOV93ZWlyZF9pbnRlcnJ1cHQgKGRldiwgdHAsIGlvYWRkciwKCQkJ
CQkJIHN0YXR1cywgbGlua19jaGFuZ2VkKTsKCgkJaWYgKG5ldGlmX3J1bm5pbmcgKGRldikgJiYg
KHN0YXR1cyAmIChUeE9LIHwgVHhFcnIpKSkKCQkJcnRsODEzOV90eF9pbnRlcnJ1cHQgKGRldiwg
dHAsIGlvYWRkcik7CgoJCWJvZ3VzY250LS07Cgl9IHdoaWxlIChib2d1c2NudCA+IDApOwoKCWlm
IChib2d1c2NudCA8PSAwKSB7CgkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiBUb28gbXVjaCB3
b3JrIGF0IGludGVycnVwdCwgIgoJCQkiSW50clN0YXR1cz0weCU0LjR4LlxuIiwgZGV2LT5uYW1l
LCBzdGF0dXMpOwoKCQkvKiBDbGVhciBhbGwgaW50ZXJydXB0IHNvdXJjZXMuICovCgkJUlRMX1cx
NiAoSW50clN0YXR1cywgMHhmZmZmKTsKCX0KCglzcGluX3VubG9jayAoJnRwLT5sb2NrKTsKCglE
UFJJTlRLICgiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBpbnRyX3N0YXR1cz0lIzQuNHguXG4iLAoJ
CSBkZXYtPm5hbWUsIFJUTF9SMTYgKEludHJTdGF0dXMpKTsKfQoKCnN0YXRpYyBpbnQgcnRsODEz
OV9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJc3RydWN0IHJ0bDgxMzlfcHJpdmF0
ZSAqdHAgPSBkZXYtPnByaXY7Cgl2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwoJaW50IHJl
dCA9IDA7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoKCURQUklOVEsgKCJFTlRFUlxuIik7CgoJbmV0
aWZfc3RvcF9xdWV1ZSAoZGV2KTsKCglpZiAodHAtPnRocl9waWQgPj0gMCkgewoJCXJldCA9IGtp
bGxfcHJvYyAodHAtPnRocl9waWQsIFNJR1RFUk0sIDEpOwoJCWlmIChyZXQpIHsKCQkJcHJpbnRr
IChLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBzaWduYWwgdGhyZWFkXG4iLCBkZXYtPm5hbWUpOwoJ
CQlyZXR1cm4gcmV0OwoJCX0KCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmdHAtPnRocl9leGl0ZWQp
OwoJfQoKCURQUklOVEsgKCIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMg
MHglNC40eC5cbiIsCgkJCWRldi0+bmFtZSwgUlRMX1IxNiAoSW50clN0YXR1cykpOwoKCXNwaW5f
bG9ja19pcnFzYXZlICgmdHAtPmxvY2ssIGZsYWdzKTsKCgkvKiBTdG9wIHRoZSBjaGlwJ3MgVHgg
YW5kIFJ4IERNQSBwcm9jZXNzZXMuICovCglSVExfVzggKENoaXBDbWQsIDApOwoKCS8qIERpc2Fi
bGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCglSVExfVzE2
IChJbnRyTWFzaywgMCk7CgoJLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudHMuICovCgl0cC0+c3Rh
dHMucnhfbWlzc2VkX2Vycm9ycyArPSBSVExfUjMyIChSeE1pc3NlZCk7CglSVExfVzMyIChSeE1p
c3NlZCwgMCk7CgoJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnRwLT5sb2NrLCBmbGFncyk7CgoJ
c3luY2hyb25pemVfaXJxICgpOwoJZnJlZV9pcnEgKGRldi0+aXJxLCBkZXYpOwoKCXJ0bDgxMzlf
dHhfY2xlYXIgKHRwKTsKCglwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wY2lfZGV2LCBSWF9CVUZf
VE9UX0xFTiwKCQkJICAgIHRwLT5yeF9yaW5nLCB0cC0+cnhfcmluZ19kbWEpOwoJcGNpX2ZyZWVf
Y29uc2lzdGVudCh0cC0+cGNpX2RldiwgVFhfQlVGX1RPVF9MRU4sCgkJCSAgICB0cC0+dHhfYnVm
cywgdHAtPnR4X2J1ZnNfZG1hKTsKCXRwLT5yeF9yaW5nID0gTlVMTDsKCXRwLT50eF9idWZzID0g
TlVMTDsKCgkvKiBHcmVlbiEgUHV0IHRoZSBjaGlwIGluIGxvdy1wb3dlciBtb2RlLiAqLwoJUlRM
X1c4IChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CgoJaWYgKHJ0bF9jaGlwX2luZm9bdHAtPmNo
aXBzZXRdLmZsYWdzICYgSGFzSGx0Q2xrKQoJCVJUTF9XOCAoSGx0Q2xrLCAnSCcpOwkvKiAnUicg
d291bGQgbGVhdmUgdGhlIGNsb2NrIHJ1bm5pbmcuICovCgoJRFBSSU5USyAoIkVYSVRcbiIpOwoJ
cmV0dXJuIDA7Cn0KCgovKiBHZXQgdGhlIGV0aHRvb2wgc2V0dGluZ3MuICBBc3N1bWVzIHRoYXQg
ZXNldCBwb2ludHMgdG8ga2VybmVsCiAgIG1lbW9yeSwgKmVzZXQgaGFzIGJlZW4gaW5pdGlhbGl6
ZWQgYXMge0VUSFRPT0xfR1NFVH0sIGFuZCBvdGhlcgogICB0aHJlYWRzIG9yIGludGVycnVwdHMg
YXJlbid0IG1lc3Npbmcgd2l0aCB0aGUgODEzOS4gICovCnN0YXRpYyB2b2lkIG5ldGRldl9nZXRf
ZXNldCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplc2V0KQp7
CglzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICpucCA9IGRldi0+cHJpdjsKCXZvaWQgKmlvYWRkciA9
IG5wLT5tbWlvX2FkZHI7Cgl1MTYgYWR2ZXJ0OwoKCWVzZXQtPnN1cHBvcnRlZCA9IFNVUFBPUlRF
RF8xMGJhc2VUX0hhbGYKCQkgICAgICAJfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsCgkJICAgICAg
CXwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYKCQkgICAgICAJfCBTVVBQT1JURURfMTAwYmFzZVRf
RnVsbAoJCSAgICAgIAl8IFNVUFBPUlRFRF9BdXRvbmVnCgkJICAgICAgCXwgU1VQUE9SVEVEX1RQ
OwoKCWVzZXQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9UUCB8IEFEVkVSVElTRURfQXV0b25l
ZzsKCWFkdmVydCA9IG1kaW9fcmVhZCAoZGV2LCBucC0+cGh5c1swXSwgNCk7CglpZiAoYWR2ZXJ0
ICYgMHgwMDIwKQoJCWVzZXQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxm
OwoJaWYgKGFkdmVydCAmIDB4MDA0MCkKCQllc2V0LT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VE
XzEwYmFzZVRfRnVsbDsKCWlmIChhZHZlcnQgJiAweDAwODApCgkJZXNldC0+YWR2ZXJ0aXNpbmcg
fD0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmOwoJaWYgKGFkdmVydCAmIDB4MDEwMCkKCQllc2V0
LT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7CgoJZXNldC0+c3BlZWQg
PSAoUlRMX1I4IChNZWRpYVN0YXR1cykgJiAweDA4KSA/IDEwIDogMTAwOwoJLyogKEtPTilGSVhN
RTogbnAtPmZ1bGxfZHVwbGV4IGlzIHNldCBvciByZXNldCBieSB0aGUgdGhyZWFkLAoJICAgd2hp
Y2ggbWVhbnMgdGhpcyBhbHdheXMgc2hvd3MgaGFsZiBkdXBsZXggaWYgdGhlIGludGVyZmFjZQoJ
ICAgaXNuJ3QgdXAgeWV0LCBldmVuIGlmIGl0IGhhcyBhbHJlYWR5IGF1dG9uZWdvdGlhdGVkLiAg
Ki8KCWVzZXQtPmR1cGxleCA9IG5wLT5mdWxsX2R1cGxleCA/IERVUExFWF9GVUxMIDogRFVQTEVY
X0hBTEY7Cgllc2V0LT5wb3J0ID0gUE9SVF9UUDsKCS8qIChLT04pRklYTUU6IElzIG5wLT5waHlz
WzBdIGNvcnJlY3Q/ICBzdGFyZmlyZS5jIHVzZXMgdGhhdC4gICovCgllc2V0LT5waHlfYWRkcmVz
cyA9IG5wLT5waHlzWzBdOwoJZXNldC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwoJZXNl
dC0+YXV0b25lZyA9IChtZGlvX3JlYWQgKGRldiwgbnAtPnBoeXNbMF0sIDApICYgMHgxMDAwKSAh
PSAwOwoJZXNldC0+bWF4dHhwa3QgPSAxOwoJZXNldC0+bWF4cnhwa3QgPSAxOwp9CgoKLyogR2V0
IHRoZSBldGh0b29sIFdha2Utb24tTEFOIHNldHRpbmdzLiAgQXNzdW1lcyB0aGF0IHdvbCBwb2lu
dHMgdG8KICAga2VybmVsIG1lbW9yeSwgKndvbCBoYXMgYmVlbiBpbml0aWFsaXplZCBhcyB7RVRI
VE9PTF9HV09MfSwgYW5kCiAgIG90aGVyIHRocmVhZHMgb3IgaW50ZXJydXB0cyBhcmVuJ3QgbWVz
c2luZyB3aXRoIHRoZSA4MTM5LiAgKi8Kc3RhdGljIHZvaWQgbmV0ZGV2X2dldF93b2wgKHN0cnVj
dCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKewoJc3RydWN0
IHJ0bDgxMzlfcHJpdmF0ZSAqbnAgPSBkZXYtPnByaXY7Cgl2b2lkICppb2FkZHIgPSBucC0+bW1p
b19hZGRyOwoKCWlmIChydGxfY2hpcF9pbmZvW25wLT5jaGlwc2V0XS5mbGFncyAmIEhhc0xXYWtl
KSB7CgkJdTggY2ZnMyA9IFJUTF9SOCAoQ29uZmlnMyk7CgkJdTggY2ZnNSA9IFJUTF9SOCAoQ29u
ZmlnNSk7CgoJCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9QSFkgfCBXQUtFX01BR0lDCgkJCXwgV0FL
RV9VQ0FTVCB8IFdBS0VfTUNBU1QgfCBXQUtFX0JDQVNUOwoKCQl3b2wtPndvbG9wdHMgPSAwOwoJ
CWlmIChjZmczICYgQ2ZnM19MaW5rVXApCgkJCXdvbC0+d29sb3B0cyB8PSBXQUtFX1BIWTsKCQlp
ZiAoY2ZnMyAmIENmZzNfTWFnaWMpCgkJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOwoJCS8q
IChLT04pRklYTUU6IFNlZSBob3cgbmV0ZGV2X3NldF93b2woKSBoYW5kbGVzIHRoZQoJCSAgIGZv
bGxvd2luZyBjb25zdGFudHMuICAqLwoJCWlmIChjZmc1ICYgQ2ZnNV9VV0YpCgkJCXdvbC0+d29s
b3B0cyB8PSBXQUtFX1VDQVNUOwoJCWlmIChjZmc1ICYgQ2ZnNV9NV0YpCgkJCXdvbC0+d29sb3B0
cyB8PSBXQUtFX01DQVNUOwoJCWlmIChjZmc1ICYgQ2ZnNV9CV0YpCgkJCXdvbC0+d29sb3B0cyB8
PSBXQUtFX0JDQVNUOwoJfQp9CgoKLyogU2V0IHRoZSBldGh0b29sIFdha2Utb24tTEFOIHNldHRp
bmdzLiAgUmV0dXJuIDAgb3IgLWVycm5vLiAgQXNzdW1lcwogICB0aGF0IHdvbCBwb2ludHMgdG8g
a2VybmVsIG1lbW9yeSBhbmQgb3RoZXIgdGhyZWFkcyBvciBpbnRlcnJ1cHRzCiAgIGFyZW4ndCBt
ZXNzaW5nIHdpdGggdGhlIDgxMzkuICAqLwpzdGF0aWMgaW50IG5ldGRldl9zZXRfd29sIChzdHJ1
Y3QgbmV0X2RldmljZSAqZGV2LAoJCQkgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3
b2wpCnsKCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKm5wID0gZGV2LT5wcml2OwoJdm9pZCAqaW9h
ZGRyID0gbnAtPm1taW9fYWRkcjsKCXUzMiBzdXBwb3J0OwoJdTggY2ZnMywgY2ZnNTsKCglzdXBw
b3J0ID0gKChydGxfY2hpcF9pbmZvW25wLT5jaGlwc2V0XS5mbGFncyAmIEhhc0xXYWtlKQoJCSAg
ID8gKFdBS0VfUEhZIHwgV0FLRV9NQUdJQwoJCSAgICAgIHwgV0FLRV9VQ0FTVCB8IFdBS0VfTUNB
U1QgfCBXQUtFX0JDQVNUKQoJCSAgIDogMCk7CglpZiAod29sLT53b2xvcHRzICYgfnN1cHBvcnQp
CgkJcmV0dXJuIC1FSU5WQUw7CgoJY2ZnMyA9IFJUTF9SOCAoQ29uZmlnMykgJiB+KENmZzNfTGlu
a1VwIHwgQ2ZnM19NYWdpYyk7CglpZiAod29sLT53b2xvcHRzICYgV0FLRV9QSFkpCgkJY2ZnMyB8
PSBDZmczX0xpbmtVcDsKCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQoJCWNmZzMgfD0g
Q2ZnM19NYWdpYzsKCVJUTF9XOCAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwoJUlRMX1c4IChD
b25maWczLCBjZmczKTsKCVJUTF9XOCAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKCgljZmc1ID0g
UlRMX1I4IChDb25maWc1KSAmIH4oQ2ZnNV9VV0YgfCBDZmc1X01XRiB8IENmZzVfQldGKTsKCS8q
IChLT04pRklYTUU6IFRoZXNlIGFyZSB1bnRlc3RlZC4gIFdlIG1heSBoYXZlIHRvIHNldCB0aGUK
CSAgIENSQzAsIFdha2V1cDAgYW5kIExTQkNSQzAgcmVnaXN0ZXJzIHRvbywgYnV0IEkgaGF2ZSBu
bwoJICAgZG9jdW1lbnRhdGlvbi4gICovCglpZiAod29sLT53b2xvcHRzICYgV0FLRV9VQ0FTVCkK
CQljZmc1IHw9IENmZzVfVVdGOwoJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUNBU1QpCgkJY2Zn
NSB8PSBDZmc1X01XRjsKCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX0JDQVNUKQoJCWNmZzUgfD0g
Q2ZnNV9CV0Y7CglSVExfVzggKENvbmZpZzUsIGNmZzUpOwkvKiBuZWVkIG5vdCB1bmxvY2sgdmlh
IENmZzkzNDYgKi8KCglyZXR1cm4gMDsKfQoKCnN0YXRpYyBpbnQgbmV0ZGV2X2V0aHRvb2xfaW9j
dGwgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJhZGRyKQp7CglzdHJ1Y3QgcnRs
ODEzOV9wcml2YXRlICpucCA9IGRldi0+cHJpdjsKCXUzMiBldGhjbWQ7CgoJLyogZGV2X2lvY3Rs
KCkgaW4gLi4vLi4vbmV0L2NvcmUvZGV2LmMgaGFzIGFscmVhZHkgY2hlY2tlZAoJICAgY2FwYWJs
ZShDQVBfTkVUX0FETUlOKSwgc28gZG9uJ3QgYm90aGVyIHdpdGggdGhhdCBoZXJlLiAgKi8KCglp
ZiAoY29weV9mcm9tX3VzZXIgKCZldGhjbWQsIHVzZXJhZGRyLCBzaXplb2YgKGV0aGNtZCkpKQoJ
CXJldHVybiAtRUZBVUxUOwoKCXN3aXRjaCAoZXRoY21kKSB7CgljYXNlIEVUSFRPT0xfR1NFVDoK
CQl7CgkJCXN0cnVjdCBldGh0b29sX2NtZCBlc2V0ID0geyBFVEhUT09MX0dTRVQgfTsKCQkJc3Bp
bl9sb2NrX2lycSAoJm5wLT5sb2NrKTsKCQkJbmV0ZGV2X2dldF9lc2V0IChkZXYsICZlc2V0KTsK
CQkJc3Bpbl91bmxvY2tfaXJxICgmbnAtPmxvY2spOwoJCQlpZiAoY29weV90b191c2VyICh1c2Vy
YWRkciwgJmVzZXQsIHNpemVvZiAoZXNldCkpKQoJCQkJcmV0dXJuIC1FRkFVTFQ7CgkJCXJldHVy
biAwOwoJCX0KCgkvKiBUT0RPOiBFVEhUT09MX1NTRVQgKi8KCgljYXNlIEVUSFRPT0xfR0RSVklO
Rk86CgkJewoJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGluZm8gPSB7IEVUSFRPT0xfR0RSVklO
Rk8gfTsKCQkJc3RyY3B5IChpbmZvLmRyaXZlciwgRFJWX05BTUUpOwoJCQlzdHJjcHkgKGluZm8u
dmVyc2lvbiwgRFJWX1ZFUlNJT04pOwoJCQlzdHJjcHkgKGluZm8uYnVzX2luZm8sIG5wLT5wY2lf
ZGV2LT5zbG90X25hbWUpOwoJCQlpZiAoY29weV90b191c2VyICh1c2VyYWRkciwgJmluZm8sIHNp
emVvZiAoaW5mbykpKQoJCQkJcmV0dXJuIC1FRkFVTFQ7CgkJCXJldHVybiAwOwoJCX0KCgljYXNl
IEVUSFRPT0xfR1dPTDoKCQl7CgkJCXN0cnVjdCBldGh0b29sX3dvbGluZm8gd29sID0geyBFVEhU
T09MX0dXT0wgfTsKCQkJc3Bpbl9sb2NrX2lycSAoJm5wLT5sb2NrKTsKCQkJbmV0ZGV2X2dldF93
b2wgKGRldiwgJndvbCk7CgkJCXNwaW5fdW5sb2NrX2lycSAoJm5wLT5sb2NrKTsKCQkJaWYgKGNv
cHlfdG9fdXNlciAodXNlcmFkZHIsICZ3b2wsIHNpemVvZiAod29sKSkpCgkJCQlyZXR1cm4gLUVG
QVVMVDsKCQkJcmV0dXJuIDA7CgkJfQoKCWNhc2UgRVRIVE9PTF9TV09MOgoJCXsKCQkJc3RydWN0
IGV0aHRvb2xfd29saW5mbyB3b2w7CgkJCWludCByYzsKCQkJaWYgKGNvcHlfZnJvbV91c2VyICgm
d29sLCB1c2VyYWRkciwgc2l6ZW9mICh3b2wpKSkKCQkJCXJldHVybiAtRUZBVUxUOwoJCQlzcGlu
X2xvY2tfaXJxICgmbnAtPmxvY2spOwoJCQlyYyA9IG5ldGRldl9zZXRfd29sIChkZXYsICZ3b2wp
OwoJCQlzcGluX3VubG9ja19pcnEgKCZucC0+bG9jayk7CgkJCXJldHVybiByYzsKCQl9CgoJZGVm
YXVsdDoKCQlicmVhazsKCX0KCglyZXR1cm4gLUVPUE5PVFNVUFA7Cn0KCgpzdGF0aWMgaW50IG5l
dGRldl9pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50
IGNtZCkKewoJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CglzdHJ1Y3Qg
bWlpX2lvY3RsX2RhdGEgKmRhdGEgPSAoc3RydWN0IG1paV9pb2N0bF9kYXRhICopJnJxLT5pZnJf
ZGF0YTsKCWludCByYyA9IDA7CglpbnQgcGh5ID0gdHAtPnBoeXNbMF0gJiAweDNmOwoKCURQUklO
VEsgKCJFTlRFUlxuIik7CgoJaWYgKGNtZCAhPSBTSU9DRVRIVE9PTCkgewoJCS8qIFdpdGggU0lP
Q0VUSFRPT0wsIHRoaXMgd291bGQgY29ycnVwdCB0aGUgcG9pbnRlci4gICovCgkJZGF0YS0+cGh5
X2lkICY9IDB4MWY7CgkJZGF0YS0+cmVnX251bSAmPSAweDFmOwoJfQoKCXN3aXRjaCAoY21kKSB7
CgljYXNlIFNJT0NFVEhUT09MOgoJCXJldHVybiBuZXRkZXZfZXRodG9vbF9pb2N0bChkZXYsICh2
b2lkICopIHJxLT5pZnJfZGF0YSk7CgoJY2FzZSBTSU9DR01JSVBIWToJLyogR2V0IHRoZSBhZGRy
ZXNzIG9mIHRoZSBQSFkgaW4gdXNlLiAqLwoJY2FzZSBTSU9DREVWUFJJVkFURToJLyogYmluYXJ5
IGNvbXBhdCwgcmVtb3ZlIGluIDIuNSAqLwoJCWRhdGEtPnBoeV9pZCA9IHBoeTsKCQkvKiBGYWxs
IFRocm91Z2ggKi8KCgljYXNlIFNJT0NHTUlJUkVHOgkvKiBSZWFkIHRoZSBzcGVjaWZpZWQgTUlJ
IHJlZ2lzdGVyLiAqLwoJY2FzZSBTSU9DREVWUFJJVkFURSsxOgkvKiBiaW5hcnkgY29tcGF0LCBy
ZW1vdmUgaW4gMi41ICovCgkJZGF0YS0+dmFsX291dCA9IG1kaW9fcmVhZCAoZGV2LCBkYXRhLT5w
aHlfaWQsIGRhdGEtPnJlZ19udW0pOwoJCWJyZWFrOwoKCWNhc2UgU0lPQ1NNSUlSRUc6CS8qIFdy
aXRlIHRoZSBzcGVjaWZpZWQgTUlJIHJlZ2lzdGVyICovCgljYXNlIFNJT0NERVZQUklWQVRFKzI6
CS8qIGJpbmFyeSBjb21wYXQsIHJlbW92ZSBpbiAyLjUgKi8KCQlpZiAoIWNhcGFibGUgKENBUF9O
RVRfQURNSU4pKSB7CgkJCXJjID0gLUVQRVJNOwoJCQlicmVhazsKCQl9CgoJCWlmIChkYXRhLT5w
aHlfaWQgPT0gcGh5KSB7CgkJCXUxNiB2YWx1ZSA9IGRhdGEtPnZhbF9pbjsKCQkJc3dpdGNoIChk
YXRhLT5yZWdfbnVtKSB7CgkJCWNhc2UgMDoKCQkJCS8qIENoZWNrIGZvciBhdXRvbmVnb3RpYXRp
b24gb24gb3IgcmVzZXQuICovCgkJCQl0cC0+bWVkaWFsb2NrID0gKHZhbHVlICYgMHg5MDAwKSA/
IDAgOiAxOwoJCQkJaWYgKHRwLT5tZWRpYWxvY2spCgkJCQkJdHAtPmZ1bGxfZHVwbGV4ID0gKHZh
bHVlICYgMHgwMTAwKSA/IDEgOiAwOwoJCQkJYnJlYWs7CgkJCWNhc2UgNDogLyogdHAtPmFkdmVy
dGlzaW5nID0gdmFsdWU7ICovIGJyZWFrOwoJCQl9CgkJfQoJCW1kaW9fd3JpdGUoZGV2LCBkYXRh
LT5waHlfaWQsIGRhdGEtPnJlZ19udW0sIGRhdGEtPnZhbF9pbik7CgkJYnJlYWs7CgoJZGVmYXVs
dDoKCQlyYyA9IC1FT1BOT1RTVVBQOwoJCWJyZWFrOwoJfQoKCURQUklOVEsgKCJFWElULCByZXR1
cm5pbmcgJWRcbiIsIHJjKTsKCXJldHVybiByYzsKfQoKCnN0YXRpYyBzdHJ1Y3QgbmV0X2Rldmlj
ZV9zdGF0cyAqcnRsODEzOV9nZXRfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCXN0
cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwoJdm9pZCAqaW9hZGRyID0gdHAt
Pm1taW9fYWRkcjsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJRFBSSU5USyAoIkVOVEVSXG4iKTsK
CglpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CgkJc3Bpbl9sb2NrX2lycXNhdmUgKCZ0cC0+bG9j
aywgZmxhZ3MpOwoJCXRwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IFJUTF9SMzIgKFJ4TWlz
c2VkKTsKCQlSVExfVzMyIChSeE1pc3NlZCwgMCk7CgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAo
JnRwLT5sb2NrLCBmbGFncyk7Cgl9CgoJRFBSSU5USyAoIkVYSVRcbiIpOwoJcmV0dXJuICZ0cC0+
c3RhdHM7Cn0KCi8qIFNldCBvciBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciBmb3IgdGhpcyBh
ZGFwdG9yLgogICBUaGlzIHJvdXRpbmUgaXMgbm90IHN0YXRlIHNlbnNpdGl2ZSBhbmQgbmVlZCBu
b3QgYmUgU01QIGxvY2tlZC4gKi8KCnN0YXRpYyB1bnNpZ25lZCBjb25zdCBldGhlcm5ldF9wb2x5
bm9taWFsID0gMHgwNGMxMWRiN1U7CnN0YXRpYyBpbmxpbmUgdTMyIGV0aGVyX2NyYyAoaW50IGxl
bmd0aCwgdW5zaWduZWQgY2hhciAqZGF0YSkKewoJaW50IGNyYyA9IC0xOwoKCURQUklOVEsgKCJF
TlRFUlxuIik7CgoJd2hpbGUgKC0tbGVuZ3RoID49IDApIHsKCQl1bnNpZ25lZCBjaGFyIGN1cnJl
bnRfb2N0ZXQgPSAqZGF0YSsrOwoJCWludCBiaXQ7CgkJZm9yIChiaXQgPSAwOyBiaXQgPCA4OyBi
aXQrKywgY3VycmVudF9vY3RldCA+Pj0gMSkKCQkJY3JjID0gKGNyYyA8PCAxKSBeICgoY3JjIDwg
MCkgXiAoY3VycmVudF9vY3RldCAmIDEpID8KCQkJICAgICBldGhlcm5ldF9wb2x5bm9taWFsIDog
MCk7Cgl9CgoJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAldVxuIiwgY3JjKTsKCXJldHVybiBj
cmM7Cn0KCgpzdGF0aWMgdm9pZCBfX3NldF9yeF9tb2RlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2
KQp7CglzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IGRldi0+cHJpdjsKCXZvaWQgKmlvYWRk
ciA9IHRwLT5tbWlvX2FkZHI7Cgl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBm
aWx0ZXIgKi8KCWludCBpLCByeF9tb2RlOwoJdTMyIHRtcDsKCglEUFJJTlRLICgiRU5URVJcbiIp
OwoKCURQUklOVEsgKCIlczogICBydGw4MTM5X3NldF9yeF9tb2RlKCU0LjR4KSBkb25lIC0tIFJ4
IGNvbmZpZyAlOC44bHguXG4iLAoJCQlkZXYtPm5hbWUsIGRldi0+ZmxhZ3MsIFJUTF9SMzIgKFJ4
Q29uZmlnKSk7CgoJLyogTm90ZTogZG8gbm90IHJlb3JkZXIsIEdDQyBpcyBjbGV2ZXIgYWJvdXQg
Y29tbW9uIHN0YXRlbWVudHMuICovCglpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CgkJ
LyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KCQlwcmludGsgKEtFUk5fTk9USUNF
ICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwKCQkJZGV2LT5uYW1lKTsKCQlyeF9t
b2RlID0KCQkgICAgQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQ
aHlzIHwKCQkgICAgQWNjZXB0QWxsUGh5czsKCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0g
PSAweGZmZmZmZmZmOwoJfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0
ZXJfbGltaXQpCgkJICAgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CgkJLyogVG9v
IG1hbnkgdG8gZmlsdGVyIHBlcmZlY3RseSAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCgkJ
cnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5
czsKCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwoJfSBlbHNlIHsK
CQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0
IHwgQWNjZXB0TXlQaHlzOwoJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7CgkJZm9y
IChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291
bnQ7CgkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgewoJCQlpbnQgYml0X25yID0g
ZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKCgkJCW1jX2ZpbHRl
cltiaXRfbnIgPj4gNV0gfD0gY3B1X3RvX2xlMzIoMSA8PCAoYml0X25yICYgMzEpKTsKCQkJcnhf
bW9kZSB8PSBBY2NlcHRNdWx0aWNhc3Q7CgkJfQoJfQoKCS8qIFdlIGNhbiBzYWZlbHkgdXBkYXRl
IHdpdGhvdXQgc3RvcHBpbmcgdGhlIGNoaXAuICovCgl0bXAgPSBydGw4MTM5X3J4X2NvbmZpZyB8
IHJ4X21vZGU7CglpZiAodHAtPnJ4X2NvbmZpZyAhPSB0bXApIHsKCQlSVExfVzMyX0YgKFJ4Q29u
ZmlnLCB0bXApOwoJCXRwLT5yeF9jb25maWcgPSB0bXA7Cgl9CglSVExfVzMyX0YgKE1BUjAgKyAw
LCBtY19maWx0ZXJbMF0pOwoJUlRMX1czMl9GIChNQVIwICsgNCwgbWNfZmlsdGVyWzFdKTsKCgoJ
RFBSSU5USyAoIkVYSVRcbiIpOwp9CgpzdGF0aWMgdm9pZCBydGw4MTM5X3NldF9yeF9tb2RlIChz
dHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoJc3RydWN0IHJ0
bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CgoJc3Bpbl9sb2NrX2lycXNhdmUgKCZ0cC0+
bG9jaywgZmxhZ3MpOwoJX19zZXRfcnhfbW9kZShkZXYpOwoJc3Bpbl91bmxvY2tfaXJxcmVzdG9y
ZSAoJnRwLT5sb2NrLCBmbGFncyk7Cn0KCiNpZmRlZiBDT05GSUdfUE0KCnN0YXRpYyBpbnQgcnRs
ODEzOV9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHN0YXRlKQp7CglzdHJ1Y3Qg
bmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKCXN0cnVjdCBydGw4MTM5
X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwoJdm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsK
CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJaWYgKCFuZXRpZl9ydW5uaW5nIChkZXYpKQoJCXJldHVy
biAwOwoKCW5ldGlmX2RldmljZV9kZXRhY2ggKGRldik7CgoJc3Bpbl9sb2NrX2lycXNhdmUgKCZ0
cC0+bG9jaywgZmxhZ3MpOwoKCS8qIERpc2FibGUgaW50ZXJydXB0cywgc3RvcCBUeCBhbmQgUngu
ICovCglSVExfVzE2IChJbnRyTWFzaywgMCk7CglSVExfVzggKENoaXBDbWQsIDApOwoKCS8qIFVw
ZGF0ZSB0aGUgZXJyb3IgY291bnRzLiAqLwoJdHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0g
UlRMX1IzMiAoUnhNaXNzZWQpOwoJUlRMX1czMiAoUnhNaXNzZWQsIDApOwoKCXNwaW5fdW5sb2Nr
X2lycXJlc3RvcmUgKCZ0cC0+bG9jaywgZmxhZ3MpOwoJcmV0dXJuIDA7Cn0KCgpzdGF0aWMgaW50
IHJ0bDgxMzlfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKewoJc3RydWN0IG5ldF9kZXZp
Y2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YSAocGRldik7CgoJaWYgKCFuZXRpZl9ydW5uaW5nIChk
ZXYpKQoJCXJldHVybiAwOwoJbmV0aWZfZGV2aWNlX2F0dGFjaCAoZGV2KTsKCXJ0bDgxMzlfaHdf
c3RhcnQgKGRldik7CglyZXR1cm4gMDsKfQoKI2VuZGlmIC8qIENPTkZJR19QTSAqLwoKCnN0YXRp
YyBzdHJ1Y3QgcGNpX2RyaXZlciBydGw4MTM5X3BjaV9kcml2ZXIgPSB7CgluYW1lOgkJRFJWX05B
TUUsCglpZF90YWJsZToJcnRsODEzOV9wY2lfdGJsLAoJcHJvYmU6CQlydGw4MTM5X2luaXRfb25l
LAoJcmVtb3ZlOgkJcnRsODEzOV9yZW1vdmVfb25lLAojaWZkZWYgQ09ORklHX1BNCglzdXNwZW5k
OglydGw4MTM5X3N1c3BlbmQsCglyZXN1bWU6CQlydGw4MTM5X3Jlc3VtZSwKI2VuZGlmIC8qIENP
TkZJR19QTSAqLwp9OwoKCnN0YXRpYyBpbnQgX19pbml0IHJ0bDgxMzlfaW5pdF9tb2R1bGUgKHZv
aWQpCnsKCS8qIHdoZW4gd2UncmUgYSBtb2R1bGUsIHdlIGFsd2F5cyBwcmludCBhIHZlcnNpb24g
bWVzc2FnZSwKCSAqIGV2ZW4gaWYgbm8gODEzOSBib2FyZCBpcyBmb3VuZC4KCSAqLwojaWZkZWYg
TU9EVUxFCglwcmludGsgKEtFUk5fSU5GTyBSVEw4MTM5X0RSSVZFUl9OQU1FICJcbiIpOwojZW5k
aWYKCglyZXR1cm4gcGNpX21vZHVsZV9pbml0ICgmcnRsODEzOV9wY2lfZHJpdmVyKTsKfQoKCnN0
YXRpYyB2b2lkIF9fZXhpdCBydGw4MTM5X2NsZWFudXBfbW9kdWxlICh2b2lkKQp7CglwY2lfdW5y
ZWdpc3Rlcl9kcml2ZXIgKCZydGw4MTM5X3BjaV9kcml2ZXIpOwp9CgoKbW9kdWxlX2luaXQocnRs
ODEzOV9pbml0X21vZHVsZSk7Cm1vZHVsZV9leGl0KHJ0bDgxMzlfY2xlYW51cF9tb2R1bGUpOwo=



More information about the Gcc-bugs mailing list