Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Aug 1997 18:23:09 -0700
From:      Amancio Hasty <hasty@rah.star-gate.com>
To:        multimedia@freebsd.org
Cc:        luigi@labinfo.iet.unipi.it
Subject:   new isa.c 
Message-ID:  <199708220123.SAA00408@rah.star-gate.com>

next in thread | raw e-mail | index | archive | help
This is a multipart MIME message.

--==_Exmh_262108880
Content-Type: text/plain; charset=us-ascii




--==_Exmh_262108880
Content-Type: application/octet-stream ; name="isa.c"
Content-Description: isa.c
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="isa.c"

LyotCiAqIENvcHlyaWdodCAoYykgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0
eSBvZiBDYWxpZm9ybmlhLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIGNv
ZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5
CiAqIFdpbGxpYW0gSm9saXR6LgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAzLiBB
bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m
IHRoaXMgc29mdHdhcmUKICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93
bGVkZ2VtZW50OgogKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk
IGJ5IHRoZSBVbml2ZXJzaXR5IG9mCiAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMg
Y29udHJpYnV0b3JzLgogKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwogKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUKICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAq
CiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBS
RUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgogKiBTVUNIIERBTUFHRS4KICoKICoJZnJvbTogQCgjKWlzYS5jCTcuMiAoQmVya2VsZXkp
IDUvMTMvOTEKICoJJElkOiBpc2EuYyx2IDEuMTAwIDE5OTcvMDgvMTMgMDI6NDA6MDYgc3Rl
dmUgRXhwICQKICovCgovKgogKiBjb2RlIHRvIG1hbmFnZSBBVCBidXMKICoKICogOTIvMDgv
MTggIEZyYW5rIFAuIE1hY0xhY2hsYW4gKGZwbUBjcmFzaC5jdHMuY29tKToKICogRml4ZWQg
dW5pbml0aWFsaXplZCB2YXJpYWJsZSBwcm9ibGVtIGFuZCBhZGRlZCBjb2RlIHRvIGRlYWwK
ICogd2l0aCBETUEgcGFnZSBib3VuZGFyaWVzIGluIGlzYV9kbWFyYW5nZWNoZWNrKCkuICBG
aXhlZCB3b3JkCiAqIG1vZGUgRE1BIGNvdW50IGNvbXB1dGlvbiBhbmQgcmVvcmdhbml6ZWQg
RE1BIHNldHVwIGNvZGUgaW4KICogaXNhX2RtYXN0YXJ0KCkKICovCgojaW5jbHVkZSA8c3lz
L3BhcmFtLmg+CiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KI2luY2x1ZGUgPHN5cy9idWYuaD4K
I2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KI2luY2x1ZGUgPG1hY2hpbmUvaXBsLmg+CiNpbmNs
dWRlIDxtYWNoaW5lL21kX3Zhci5oPgojaWZkZWYgQVBJQ19JTwojaW5jbHVkZSA8bWFjaGlu
ZS9zbXAuaD4KI2luY2x1ZGUgPG1hY2hpbmUvYXBpYy5oPgojZW5kaWYgLyogQVBJQ19JTyAq
LwojaW5jbHVkZSA8dm0vdm0uaD4KI2luY2x1ZGUgPHZtL3ZtX3BhcmFtLmg+CiNpbmNsdWRl
IDx2bS9wbWFwLmg+CiNpbmNsdWRlIDxpMzg2L2lzYS9pc2FfZGV2aWNlLmg+CiNpbmNsdWRl
IDxpMzg2L2lzYS9pbnRyX21hY2hkZXAuaD4KI2luY2x1ZGUgPGkzODYvaXNhL2lzYS5oPgoj
aW5jbHVkZSA8aTM4Ni9pc2EvaWMvaTgyMzcuaD4KCiNpbmNsdWRlIDxzeXMvaW50ZXJydXB0
Lmg+CgovKgoqKiAgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIERNQSBjb250cm9sbGVyIDEg
KGNoYW5uZWxzIDAuLjMpOgoqLwojZGVmaW5lCURNQTFfQ0hOKGMpCShJT19ETUExICsgMSoo
MiooYykpKQkvKiBhZGRyIHJlZyBmb3IgY2hhbm5lbCBjICovCiNkZWZpbmUJRE1BMV9TTVNL
CShJT19ETUExICsgMSoxMCkJLyogc2luZ2xlIG1hc2sgcmVnaXN0ZXIgKi8KI2RlZmluZQlE
TUExX01PREUJKElPX0RNQTEgKyAxKjExKQkvKiBtb2RlIHJlZ2lzdGVyICovCiNkZWZpbmUJ
RE1BMV9GRkMJKElPX0RNQTEgKyAxKjEyKQkvKiBjbGVhciBmaXJzdC9sYXN0IEZGICovCgov
KgoqKiAgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIERNQSBjb250cm9sbGVyIDIgKGNoYW5u
ZWxzIDQuLjcpOgoqLwojZGVmaW5lCURNQTJfQ0hOKGMpCShJT19ETUEyICsgMiooMiooYykp
KQkvKiBhZGRyIHJlZyBmb3IgY2hhbm5lbCBjICovCiNkZWZpbmUJRE1BMl9TTVNLCShJT19E
TUEyICsgMioxMCkJLyogc2luZ2xlIG1hc2sgcmVnaXN0ZXIgKi8KI2RlZmluZQlETUEyX01P
REUJKElPX0RNQTIgKyAyKjExKQkvKiBtb2RlIHJlZ2lzdGVyICovCiNkZWZpbmUJRE1BMl9G
RkMJKElPX0RNQTIgKyAyKjEyKQkvKiBjbGVhciBmaXJzdC9sYXN0IEZGICovCgpzdGF0aWMg
dm9pZCBjb25maWdfaXNhZGV2IF9fUCgoc3RydWN0IGlzYV9kZXZpY2UgKmlzZHAsIHVfaW50
ICptcCkpOwpzdGF0aWMgdm9pZCBjb25maWdfaXNhZGV2X2MgX19QKChzdHJ1Y3QgaXNhX2Rl
dmljZSAqaXNkcCwgdV9pbnQgKm1wLAoJCQkJIGludCByZWNvbmZpZykpOwpzdGF0aWMgdm9p
ZCBjb25mbGljdCBfX1AoKHN0cnVjdCBpc2FfZGV2aWNlICpkdnAsIHN0cnVjdCBpc2FfZGV2
aWNlICp0bXBkdnAsCgkJCSAgaW50IGl0ZW0sIGNoYXIgY29uc3QgKndoYXRub3QsIGNoYXIg
Y29uc3QgKnJlYXNvbiwKCQkJICBjaGFyIGNvbnN0ICpmb3JtYXQpKTsKc3RhdGljIGludCBo
YXZlc2VlbiBfX1AoKHN0cnVjdCBpc2FfZGV2aWNlICpkdnAsIHN0cnVjdCBpc2FfZGV2aWNl
ICp0bXBkdnAsCgkJCSB1X2ludCBjaGVja2JpdHMpKTsKc3RhdGljIGludCBpc2FfZG1hcmFu
Z2VjaGVjayBfX1AoKGNhZGRyX3QgdmEsIHVfaW50IGxlbmd0aCwgaW50IGNoYW4pKTsKCi8q
CiAqIHByaW50IGEgY29uZmxpY3QgbWVzc2FnZQogKi8Kc3RhdGljIHZvaWQKY29uZmxpY3Qo
ZHZwLCB0bXBkdnAsIGl0ZW0sIHdoYXRub3QsIHJlYXNvbiwgZm9ybWF0KQoJc3RydWN0IGlz
YV9kZXZpY2UJKmR2cDsKCXN0cnVjdCBpc2FfZGV2aWNlCSp0bXBkdnA7CglpbnQJCQlpdGVt
OwoJY2hhciBjb25zdAkJKndoYXRub3Q7CgljaGFyIGNvbnN0CQkqcmVhc29uOwoJY2hhciBj
b25zdAkJKmZvcm1hdDsKewoJcHJpbnRmKCIlcyVkIG5vdCAlc2VkIGR1ZSB0byAlcyBjb25m
bGljdCB3aXRoICVzJWQgYXQgIiwKCQlkdnAtPmlkX2RyaXZlci0+bmFtZSwgZHZwLT5pZF91
bml0LCB3aGF0bm90LCByZWFzb24sCgkJdG1wZHZwLT5pZF9kcml2ZXItPm5hbWUsIHRtcGR2
cC0+aWRfdW5pdCk7CglwcmludGYoZm9ybWF0LCBpdGVtKTsKCXByaW50ZigiXG4iKTsKfQoK
LyoKICogQ2hlY2sgdG8gc2VlIGlmIHRoaW5ncyBhcmUgYWxyZWFkeSBpbiB1c2UsIGxpa2Ug
SVJRJ3MsIEkvTyBhZGRyZXNzZXMKICogYW5kIE1lbW9yeSBhZGRyZXNzZXMuCiAqLwpzdGF0
aWMgaW50CmhhdmVzZWVuKGR2cCwgdG1wZHZwLCBjaGVja2JpdHMpCglzdHJ1Y3QgaXNhX2Rl
dmljZSAqZHZwOwoJc3RydWN0IGlzYV9kZXZpY2UgKnRtcGR2cDsKCXVfaW50CWNoZWNrYml0
czsKewoJLyoKCSAqIE9ubHkgY2hlY2sgYWdhaW5zdCBkZXZpY2VzIHRoYXQgaGF2ZSBhbHJl
YWR5IGJlZW4gZm91bmQgYW5kIGFyZSBub3QKCSAqIHVuaWxhdGVyYWxseSBhbGxvd2VkIHRv
IGNvbmZsaWN0IGFueXdheS4KCSAqLwoJaWYgKHRtcGR2cC0+aWRfYWxpdmUgJiYgIWR2cC0+
aWRfY29uZmxpY3RzKSB7CgkJY2hhciBjb25zdCAqd2hhdG5vdDsKCgkJd2hhdG5vdCA9IGNo
ZWNrYml0cyAmIENDX0FUVEFDSCA/ICJhdHRhY2giIDogInByb2IiOwoJCS8qCgkJICogQ2hl
Y2sgZm9yIEkvTyBhZGRyZXNzIGNvbmZsaWN0LiAgV2UgY2FuIG9ubHkgY2hlY2sgdGhlCgkJ
ICogc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIGFnYWluc3QgdGhlIHJhbmdlIG9m
IHRoZQoJCSAqIGRldmljZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcHJvYmVkIHNpbmNlIHdl
IGRvIG5vdAoJCSAqIGtub3cgaG93IG1hbnkgSS9PIGFkZHJlc3NlcyB0aGlzIGRldmljZSB1
c2VzLgoJCSAqLwoJCWlmICgoY2hlY2tiaXRzICYgQ0NfSU9BRERSKSAmJiAodG1wZHZwLT5p
ZF9hbGl2ZSAhPSAtMSkpIHsKCQkJaWYgKChkdnAtPmlkX2lvYmFzZSA+PSB0bXBkdnAtPmlk
X2lvYmFzZSkgJiYKCQkJICAgIChkdnAtPmlkX2lvYmFzZSA8PQoJCQkJICAodG1wZHZwLT5p
ZF9pb2Jhc2UgKyB0bXBkdnAtPmlkX2FsaXZlIC0gMSkpKSB7CgkJCQljb25mbGljdChkdnAs
IHRtcGR2cCwgZHZwLT5pZF9pb2Jhc2UsIHdoYXRub3QsCgkJCQkJICJJL08gYWRkcmVzcyIs
ICIweCV4Iik7CgkJCQlyZXR1cm4gMTsKCQkJfQoJCX0KCQkvKgoJCSAqIENoZWNrIGZvciBN
ZW1vcnkgYWRkcmVzcyBjb25mbGljdC4gIFdlIGNhbiBjaGVjayBmb3IKCQkgKiByYW5nZSBv
dmVybGFwLCBidXQgaXQgd2lsbCBub3QgY2F0Y2ggYWxsIGNhc2VzIHNpbmNlIHRoZQoJCSAq
IGRyaXZlciBtYXkgYWRqdXN0IHRoZSBtc2l6ZSBwYXJhbWF0ZXIgZHVyaW5nIHByb2JlLCBm
b3IKCQkgKiBub3cgd2UganVzdCBjaGVjayB0aGF0IHRoZSBzdGFydGluZyBhZGRyZXNzIGRv
ZXMgbm90CgkJICogZmFsbCB3aXRoaW4gYW55IGFsbG9jYXRlZCByZWdpb24uCgkJICogWFhY
IGNvdWxkIGFkZCBhIHNlY29uZCBjaGVjayBhZnRlciB0aGUgcHJvYmUgZm9yIG92ZXJsYXAs
CgkJICogc2luY2UgYXQgdGhhdCB0aW1lIHdlIHdvdWxkIGtub3cgdGhlIGZ1bGwgcmFuZ2Uu
CgkJICogWFhYIEtFUk5CQVNFIGlzIGEgaGFjaywgd2Ugc2hvdWxkIGhhdmUgdmFkZHIgaW4g
dGhlIHRhYmxlIQoJCSAqLwoJCWlmICgoY2hlY2tiaXRzICYgQ0NfTUVNQUREUikgICYmIHRt
cGR2cC0+aWRfbWFkZHIpIHsKCQkJaWYgKChLRVJOQkFTRSArIGR2cC0+aWRfbWFkZHIgPj0g
dG1wZHZwLT5pZF9tYWRkcikgJiYKCQkJICAgIChLRVJOQkFTRSArIGR2cC0+aWRfbWFkZHIg
PD0KCQkJICAgICAodG1wZHZwLT5pZF9tYWRkciArIHRtcGR2cC0+aWRfbXNpemUgLSAxKSkp
IHsKCQkJCWNvbmZsaWN0KGR2cCwgdG1wZHZwLCAoaW50KWR2cC0+aWRfbWFkZHIsCgkJCQkJ
IHdoYXRub3QsICJtYWRkciIsICIweCV4Iik7CgkJCQlyZXR1cm4gMTsKCQkJfQoJCX0KCQkv
KgoJCSAqIENoZWNrIGZvciBJUlEgY29uZmxpY3RzLgoJCSAqLwoJCWlmICgoY2hlY2tiaXRz
ICYgQ0NfSVJRKSAmJiB0bXBkdnAtPmlkX2lycSkgewoJCQlpZiAodG1wZHZwLT5pZF9pcnEg
PT0gZHZwLT5pZF9pcnEpIHsKCQkJCWNvbmZsaWN0KGR2cCwgdG1wZHZwLCBmZnMoZHZwLT5p
ZF9pcnEpIC0gMSwKCQkJCQkgd2hhdG5vdCwgImlycSIsICIlZCIpOwoJCQkJcmV0dXJuIDE7
CgkJCX0KCQl9CgkJLyoKCQkgKiBDaGVjayBmb3IgRFJRIGNvbmZsaWN0cy4KCQkgKi8KCQlp
ZiAoKGNoZWNrYml0cyAmIENDX0RSUSApICYmICh0bXBkdnAtPmlkX2RycSAhPSAtMSkpIHsK
CQkJaWYgKHRtcGR2cC0+aWRfZHJxID09IGR2cC0+aWRfZHJxKSB7CgkJCQljb25mbGljdChk
dnAsIHRtcGR2cCwgZHZwLT5pZF9kcnEsIHdoYXRub3QsCgkJCQkJICJkcnEiLCAiJWQiKTsK
CQkJCXJldHVybiAxOwoJCQl9CgkJfQoJfQoJcmV0dXJuIDA7Cn0KCiNpZmRlZiBSRVNPVVJD
RV9DSEVDSwojaW5jbHVkZSA8c3lzL2RydnJlc291cmNlLmg+CgpzdGF0aWMgaW50CmNoZWNr
b25lIChzdHJ1Y3QgaXNhX2RldmljZSAqZHZwLCBpbnQgdHlwZSwgYWRkcl90IGxvdywgYWRk
cl90IGhpZ2gsIAoJICBjaGFyICpyZXNuYW1lLCBjaGFyICpyZXNmbXQsIGludCBhdHRhY2hp
bmcpCnsKCWludCByZXN1bHQgPSAwOwoJaWYgKGJvb3R2ZXJib3NlKSB7CgkJaWYgKGxvdyA9
PSBoaWdoKQoJCQlwcmludGYoIlx0Y2hlY2sgJXM6IDB4JXhcbiIsIHJlc25hbWUsIGxvdyk7
CgkJZWxzZQoJCQlwcmludGYoIlx0Y2hlY2sgJXM6IDB4JXggdG8gMHgleFxuIiwgCgkJCSAg
ICAgICByZXNuYW1lLCBsb3csIGhpZ2gpOwoJfQoJaWYgKHJlc291cmNlX2NoZWNrKHR5cGUs
IFJFU0ZfTk9ORSwgbG93LCBoaWdoKSAhPSBOVUxMKSB7CgkJY2hhciAqd2hhdG5vdCA9IGF0
dGFjaGluZyA/ICJhdHRhY2giIDogInByb2IiOwoJCXN0YXRpYyBzdHJ1Y3QgaXNhX2Rldmlj
ZSBkdW1teWRldjsKCQlzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgZHVtbXlkcnY7CgkJc3Ry
dWN0IGlzYV9kZXZpY2UgKnRtcGR2cCA9ICZkdW1teWRldjsKCgkJZHVtbXlkZXYuaWRfZHJp
dmVyID0gJmR1bW15ZHJ2OwoJCWR1bW15ZGV2LmlkX3VuaXQgPSAwOwoJCWR1bW15ZHJ2Lm5h
bWUgPSAicGNpIjsKCQljb25mbGljdChkdnAsIHRtcGR2cCwgbG93LCB3aGF0bm90LCByZXNu
YW1lLCByZXNmbXQpOwoJCXJlc3VsdCA9IDE7Cgl9IGVsc2UgaWYgKGF0dGFjaGluZykgewoJ
CWlmIChsb3cgPT0gaGlnaCkKCQkJcHJpbnRmKCJcdHJlZ2lzdGVyICVzOiAweCV4XG4iLCBy
ZXNuYW1lLCBsb3cpOwoJCWVsc2UKCQkJcHJpbnRmKCJcdHJlZ2lzdGVyICVzOiAweCV4IHRv
IDB4JXhcbiIsCgkJCSAgICAgICByZXNuYW1lLCBsb3csIGhpZ2gpOwoJCXJlc291cmNlX2Ns
YWltKGR2cCwgdHlwZSwgUkVTRl9OT05FLCBsb3csIGhpZ2gpOwoJfQoJcmV0dXJuIChyZXN1
bHQpOwp9CgpzdGF0aWMgaW50IApjaGVja19wY2ljb25mbGljdChzdHJ1Y3QgaXNhX2Rldmlj
ZSAqZHZwLCBpbnQgY2hlY2tiaXRzKQp7CglpbnQgcmVzdWx0ID0gMDsKCWludCBhdHRhY2hp
bmcgPSAoY2hlY2tiaXRzICYgQ0NfQVRUQUNIKSAhPSAwOwoKCWlmIChjaGVja2JpdHMgJiBD
Q19NRU1BRERSKSB7CgkJbG9uZyBtYWRkciA9IGR2cC0+aWRfbWFkZHI7CgkJbG9uZyBtc2l6
ZSA9IGR2cC0+aWRfbXNpemU7CgkJaWYgKG1zaXplID4gMCkgewoJCQlpZiAoY2hlY2tvbmUo
ZHZwLCBSRVNUX01FTSwgbWFkZHIsIG1hZGRyICsgbXNpemUgLSAxLAoJCQkJICAgICAibWFk
ZHIiLCAiMHgleCIsIGF0dGFjaGluZykgIT0gMCkgewoJCQkJcmVzdWx0ID0gMTsKCQkJCWF0
dGFjaGluZyA9IDA7CgkJCX0KCQl9Cgl9CglpZiAoY2hlY2tiaXRzICYgQ0NfSU9BRERSKSB7
CgkJdW5zaWduZWQgaW9iYXNlID0gZHZwLT5pZF9pb2Jhc2U7CgkJdW5zaWduZWQgaW9zaXpl
ID0gZHZwLT5pZF9hbGl2ZTsKCQlpZiAoaW9zaXplID09IC0xKQoJCQlpb3NpemUgPSAxOyAv
KiBYWFggY2FuJ3QgZG8gbXVjaCBhYm91dCB0aGlzIC4uLiAqLwoJCWlmIChpb3NpemUgPiAw
KSB7CgkJCWlmIChjaGVja29uZShkdnAsIFJFU1RfUE9SVCwgaW9iYXNlLCBpb2Jhc2UgKyBp
b3NpemUgLTEsCgkJCQkgICAgICJJL08gYWRkcmVzcyIsICIweCV4IiwgYXR0YWNoaW5nKSAh
PSAwKSB7CgkJCQlyZXN1bHQgPSAxOwoJCQkJYXR0YWNoaW5nID0gMDsKCQkJfQoJCX0KCX0K
CWlmIChjaGVja2JpdHMgJiBDQ19JUlEpIHsKCQlpbnQgaXJxID0gZmZzKGR2cC0+aWRfaXJx
KSAtIDE7CgkJaWYgKGlycSA+PSAwKSB7CgkJCWlmIChjaGVja29uZShkdnAsIFJFU1RfSU5U
LCBpcnEsIGlycSwgCgkJCQkgICAgICJpcnEiLCAiJWQiLCBhdHRhY2hpbmcpICE9IDApIHsK
CQkJCXJlc3VsdCA9IDE7CgkJCQlhdHRhY2hpbmcgPSAwOwoJCQl9CgkJfQoJfQoJaWYgKGNo
ZWNrYml0cyAmIENDX0RSUSkgewoJCWludCBkcnEgPSBkdnAtPmlkX2RycTsKCQlpZiAoZHJx
ID49IDApIHsKCQkJaWYgKGNoZWNrb25lKGR2cCwgUkVTVF9ETUEsIGRycSwgZHJxLCAKCQkJ
CSAgICAgImRycSIsICIlZCIsIGF0dGFjaGluZykgIT0gMCkgewoJCQkJcmVzdWx0ID0gMTsK
CQkJCWF0dGFjaGluZyA9IDA7CgkJCX0KCQl9Cgl9CglpZiAocmVzdWx0ICE9IDApCgkJcmVz
b3VyY2VfZnJlZSAoZHZwKTsKCXJldHVybiAocmVzdWx0KTsKfQojZW5kaWYgLyogUkVTT1VS
Q0VfQ0hFQ0sgKi8KCi8qCiAqIFNlYXJjaCB0aHJvdWdoIGFsbCB0aGUgaXNhX2RldnRhYl8q
IHRhYmxlcyBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0CiAqIGNvbmZsaWN0cyB3aXRoIHRo
ZSBjdXJyZW50IGRldmljZS4KICovCmludApoYXZlc2Vlbl9pc2FkZXYoZHZwLCBjaGVja2Jp
dHMpCglzdHJ1Y3QgaXNhX2RldmljZSAqZHZwOwoJdV9pbnQJY2hlY2tiaXRzOwp7CglzdHJ1
Y3QgaXNhX2RldmljZSAqdG1wZHZwOwoJaW50CXN0YXR1cyA9IDA7CgoJZm9yICh0bXBkdnAg
PSBpc2FfZGV2dGFiX3R0eTsgdG1wZHZwLT5pZF9kcml2ZXI7IHRtcGR2cCsrKSB7CgkJc3Rh
dHVzIHw9IGhhdmVzZWVuKGR2cCwgdG1wZHZwLCBjaGVja2JpdHMpOwoJCWlmIChzdGF0dXMp
CgkJCXJldHVybiBzdGF0dXM7Cgl9Cglmb3IgKHRtcGR2cCA9IGlzYV9kZXZ0YWJfYmlvOyB0
bXBkdnAtPmlkX2RyaXZlcjsgdG1wZHZwKyspIHsKCQlzdGF0dXMgfD0gaGF2ZXNlZW4oZHZw
LCB0bXBkdnAsIGNoZWNrYml0cyk7CgkJaWYgKHN0YXR1cykKCQkJcmV0dXJuIHN0YXR1czsK
CX0KCWZvciAodG1wZHZwID0gaXNhX2RldnRhYl9uZXQ7IHRtcGR2cC0+aWRfZHJpdmVyOyB0
bXBkdnArKykgewoJCXN0YXR1cyB8PSBoYXZlc2VlbihkdnAsIHRtcGR2cCwgY2hlY2tiaXRz
KTsKCQlpZiAoc3RhdHVzKQoJCQlyZXR1cm4gc3RhdHVzOwoJfQoJZm9yICh0bXBkdnAgPSBp
c2FfZGV2dGFiX251bGw7IHRtcGR2cC0+aWRfZHJpdmVyOyB0bXBkdnArKykgewoJCXN0YXR1
cyB8PSBoYXZlc2VlbihkdnAsIHRtcGR2cCwgY2hlY2tiaXRzKTsKCQlpZiAoc3RhdHVzKQoJ
CQlyZXR1cm4gc3RhdHVzOwoJfQojaWZkZWYgUkVTT1VSQ0VfQ0hFQ0sKCWlmICghZHZwLT5p
ZF9jb25mbGljdHMpIHsKCQlzdGF0dXMgPSBjaGVja19wY2ljb25mbGljdChkdnAsIGNoZWNr
Yml0cyk7Cgl9IGVsc2UgaWYgKGJvb3R2ZXJib3NlKQoJCXByaW50ZigiXHRub3QgY2hlY2tp
bmcgZm9yIHJlc291cmNlIGNvbmZsaWN0cyAuLi5cbiIpOwoJfQojZW5kaWYgLyogUkVTT1VS
Q0VfQ0hFQ0sgKi8KCXJldHVybihzdGF0dXMpOwp9CgovKgogKiBDb25maWd1cmUgYWxsIElT
QSBkZXZpY2VzCiAqLwp2b2lkCmlzYV9jb25maWd1cmUoKSB7CglzdHJ1Y3QgaXNhX2Rldmlj
ZSAqZHZwOwoKCXNwbGhpZ2goKTsKCXByaW50ZigiUHJvYmluZyBmb3IgZGV2aWNlcyBvbiB0
aGUgSVNBIGJ1czpcbiIpOwoJLyogRmlyc3QgcHJvYmUgYWxsIHRoZSBzZW5zaXRpdmUgcHJv
YmVzICovCglmb3IgKGR2cCA9IGlzYV9kZXZ0YWJfdHR5OyBkdnAtPmlkX2RyaXZlcjsgZHZw
KyspCgkJaWYgKGR2cC0+aWRfZHJpdmVyLT5zZW5zaXRpdmVfaHcpCgkJCWNvbmZpZ19pc2Fk
ZXYoZHZwLCAmdHR5X2ltYXNrKTsKCWZvciAoZHZwID0gaXNhX2RldnRhYl9iaW87IGR2cC0+
aWRfZHJpdmVyOyBkdnArKykKCQlpZiAoZHZwLT5pZF9kcml2ZXItPnNlbnNpdGl2ZV9odykK
CQkJY29uZmlnX2lzYWRldihkdnAsICZiaW9faW1hc2spOwoJZm9yIChkdnAgPSBpc2FfZGV2
dGFiX25ldDsgZHZwLT5pZF9kcml2ZXI7IGR2cCsrKQoJCWlmIChkdnAtPmlkX2RyaXZlci0+
c2Vuc2l0aXZlX2h3KQoJCQljb25maWdfaXNhZGV2KGR2cCwgJm5ldF9pbWFzayk7Cglmb3Ig
KGR2cCA9IGlzYV9kZXZ0YWJfbnVsbDsgZHZwLT5pZF9kcml2ZXI7IGR2cCsrKQoJCWlmIChk
dnAtPmlkX2RyaXZlci0+c2Vuc2l0aXZlX2h3KQoJCQljb25maWdfaXNhZGV2KGR2cCwgKHVf
aW50ICopTlVMTCk7CgoJLyogVGhlbiBhbGwgdGhlIGJhZCBvbmVzICovCglmb3IgKGR2cCA9
IGlzYV9kZXZ0YWJfdHR5OyBkdnAtPmlkX2RyaXZlcjsgZHZwKyspCgkJaWYgKCFkdnAtPmlk
X2RyaXZlci0+c2Vuc2l0aXZlX2h3KQoJCQljb25maWdfaXNhZGV2KGR2cCwgJnR0eV9pbWFz
ayk7Cglmb3IgKGR2cCA9IGlzYV9kZXZ0YWJfYmlvOyBkdnAtPmlkX2RyaXZlcjsgZHZwKysp
CgkJaWYgKCFkdnAtPmlkX2RyaXZlci0+c2Vuc2l0aXZlX2h3KQoJCQljb25maWdfaXNhZGV2
KGR2cCwgJmJpb19pbWFzayk7Cglmb3IgKGR2cCA9IGlzYV9kZXZ0YWJfbmV0OyBkdnAtPmlk
X2RyaXZlcjsgZHZwKyspCgkJaWYgKCFkdnAtPmlkX2RyaXZlci0+c2Vuc2l0aXZlX2h3KQoJ
CQljb25maWdfaXNhZGV2KGR2cCwgJm5ldF9pbWFzayk7Cglmb3IgKGR2cCA9IGlzYV9kZXZ0
YWJfbnVsbDsgZHZwLT5pZF9kcml2ZXI7IGR2cCsrKQoJCWlmICghZHZwLT5pZF9kcml2ZXIt
PnNlbnNpdGl2ZV9odykKCQkJY29uZmlnX2lzYWRldihkdnAsICh1X2ludCAqKU5VTEwpOwoK
CWJpb19pbWFzayB8PSBTV0lfQ0xPQ0tfTUFTSzsKCW5ldF9pbWFzayB8PSBTV0lfTkVUX01B
U0s7Cgl0dHlfaW1hc2sgfD0gU1dJX1RUWV9NQVNLOwoKLyoKICogWFhYIHdlIHNob3VsZCBy
ZWFsbHkgYWRkIHRoZSB0dHkgZGV2aWNlIHRvIG5ldF9pbWFzayB3aGVuIHRoZSBsaW5lIGlz
CiAqIHN3aXRjaGVkIHRvIFNMSVBESVNDLCBhbmQgdGhlbiByZW1vdmUgaXQgd2hlbiBpdCBp
cyBzd2l0Y2hlZCBhd2F5IGZyb20KICogU0xJUERJU0MuICBObyBuZWVkIHRvIGJsb2NrIG91
dCBBTEwgdHR5cyBkdXJpbmcgYSBzcGxpbXAgd2hlbiBvbmx5IG9uZQogKiBvZiB0aGVtIGlz
IHJ1bm5pbmcgc2xpcC4KICoKICogWFhYIGFjdHVhbGx5LCBibG9ja2luZyBhbGwgdHR5cyBk
dXJpbmcgYSBzcGxpbXAgZG9lc24ndCBtYXR0ZXIgc28gbXVjaAogKiB3aXRoIHNpbyBiZWNh
dXNlIHRoZSBzZXJpYWwgaW50ZXJydXB0IGxheWVyIGRvZXNuJ3QgdXNlIHR0eV9pbWFzay4g
IE9ubHkKICogbm9uLXNlcmlhbCB0dHlzIHN1ZmZlci4gIEl0J3MgbW9yZSBzdHVwaWQgdGhh
dCBBTEwgJ25ldCdzIGFyZSBibG9ja2VkCiAqIGR1cmluZyBzcGx0dHkuCiAqLwojaW5jbHVk
ZSAic2wuaCIKI2lmIE5TTCA+IDAKCW5ldF9pbWFzayB8PSB0dHlfaW1hc2s7Cgl0dHlfaW1h
c2sgPSBuZXRfaW1hc2s7CiNlbmRpZgoKCS8qIGJpb19pbWFzayB8PSB0dHlfaW1hc2sgOyAg
Y2FuIHNvbWUgdHR5IGRldmljZXMgdXNlIGJ1ZmZlcnM/ICovCgoJaWYgKGJvb3R2ZXJib3Nl
KQoJCXByaW50ZigiaW1hc2tzOiBiaW8gJXgsIHR0eSAleCwgbmV0ICV4XG4iLAoJCSAgICAg
ICBiaW9faW1hc2ssIHR0eV9pbWFzaywgbmV0X2ltYXNrKTsKCgkvKgoJICogRmluaXNoIGlu
aXRpYWxpemluZyBpbnRyX21hc2tbXS4gIE5vdGUgdGhhdCB0aGUgcGFydGx5CgkgKiBjb25z
dHJ1Y3RlZCBtYXNrcyBhcmVuJ3QgYWN0dWFsbHkgdXNlZCBzaW5jZSB3ZSdyZSBhdCBzcGxo
aWdoLgoJICogRm9yIGZ1bGx5IGR5bmFtaWMgaW5pdGlhbGl6YXRpb24sIHJlZ2lzdGVyX2lu
dHIoKSBhbmQKCSAqIGljdV91bnNldCgpIHdpbGwgaGF2ZSB0byBhZGp1c3QgdGhlIG1hc2tz
IGZvciBfYWxsXwoJICogaW50ZXJydXB0cyBhbmQgZm9yIHR0eV9pbWFzaywgZXRjLgoJICov
Cglmb3IgKGR2cCA9IGlzYV9kZXZ0YWJfdHR5OyBkdnAtPmlkX2RyaXZlcjsgZHZwKyspCgkJ
cmVnaXN0ZXJfaW1hc2soZHZwLCB0dHlfaW1hc2spOwoJZm9yIChkdnAgPSBpc2FfZGV2dGFi
X2JpbzsgZHZwLT5pZF9kcml2ZXI7IGR2cCsrKQoJCXJlZ2lzdGVyX2ltYXNrKGR2cCwgYmlv
X2ltYXNrKTsKCWZvciAoZHZwID0gaXNhX2RldnRhYl9uZXQ7IGR2cC0+aWRfZHJpdmVyOyBk
dnArKykKCQlyZWdpc3Rlcl9pbWFzayhkdnAsIG5ldF9pbWFzayk7Cglmb3IgKGR2cCA9IGlz
YV9kZXZ0YWJfbnVsbDsgZHZwLT5pZF9kcml2ZXI7IGR2cCsrKQoJCXJlZ2lzdGVyX2ltYXNr
KGR2cCwgU1dJX0NMT0NLX01BU0spOwoJc3BsMCgpOwp9CgovKgogKiBDb25maWd1cmUgYW4g
SVNBIGRldmljZS4KICovCgoKc3RhdGljIHZvaWQKY29uZmlnX2lzYWRldihpc2RwLCBtcCkK
CXN0cnVjdCBpc2FfZGV2aWNlICppc2RwOwoJdV9pbnQgKm1wOwp7Cgljb25maWdfaXNhZGV2
X2MoaXNkcCwgbXAsIDApOwp9Cgp2b2lkCnJlY29uZmlnX2lzYWRldihpc2RwLCBtcCkKCXN0
cnVjdCBpc2FfZGV2aWNlICppc2RwOwoJdV9pbnQgKm1wOwp7Cgljb25maWdfaXNhZGV2X2Mo
aXNkcCwgbXAsIDEpOwp9CgpzdGF0aWMgdm9pZApjb25maWdfaXNhZGV2X2MoaXNkcCwgbXAs
IHJlY29uZmlnKQoJc3RydWN0IGlzYV9kZXZpY2UgKmlzZHA7Cgl1X2ludCAqbXA7CglpbnQg
cmVjb25maWc7CnsKCXVfaW50IGNoZWNrYml0czsKCWludCBpZF9hbGl2ZTsKCWludCBsYXN0
X2FsaXZlOwoJc3RydWN0IGlzYV9kcml2ZXIgKmRwID0gaXNkcC0+aWRfZHJpdmVyOwoKCWlm
ICghaXNkcC0+aWRfZW5hYmxlZCkgewoJCXByaW50ZigiJXMlZDogZGlzYWJsZWQsIG5vdCBw
cm9iZWQuXG4iLAoJCQlkcC0+bmFtZSwgaXNkcC0+aWRfdW5pdCk7CgkJcmV0dXJuOwoJfQoJ
Y2hlY2tiaXRzID0gQ0NfRFJRIHwgQ0NfSU9BRERSIHwgQ0NfTUVNQUREUjsKCWlmICghcmVj
b25maWcgJiYgaGF2ZXNlZW5faXNhZGV2KGlzZHAsIGNoZWNrYml0cykpCgkJcmV0dXJuOwoJ
aWYgKCFyZWNvbmZpZyAmJiBpc2RwLT5pZF9tYWRkcikgewoJCWlzZHAtPmlkX21hZGRyIC09
IElTQV9IT0xFX1NUQVJUOwoJCWlzZHAtPmlkX21hZGRyICs9IGF0ZGV2YmFzZTsKCX0KCWlm
IChyZWNvbmZpZykgewoJCWxhc3RfYWxpdmUgPSBpc2RwLT5pZF9hbGl2ZTsKCQlpc2RwLT5p
ZF9yZWNvbmZpZyA9IDE7Cgl9CgllbHNlIHsKCQlsYXN0X2FsaXZlID0gMDsKCQlpc2RwLT5p
ZF9yZWNvbmZpZyA9IDA7Cgl9CglpZF9hbGl2ZSA9ICgqZHAtPnByb2JlKShpc2RwKTsKCWlm
IChpZF9hbGl2ZSkgewoJCS8qCgkJICogT25seSBwcmludCB0aGUgSS9PIGFkZHJlc3MgcmFu
Z2UgaWYgaWRfYWxpdmUgIT0gLTEKCQkgKiBSaWdodCBub3cgdGhpcyBpcyBhIHRlbXBvcmFy
eSBmaXgganVzdCBmb3IgdGhlIG5ldwoJCSAqIE5QWCBjb2RlIHNvIHRoYXQgaWYgaXQgZmlu
ZHMgYSA0ODYgdGhhdCBjYW4gdXNlIHRyYXAKCQkgKiAxNiBpdCB3aWxsIG5vdCByZXBvcnQg
SS9PIGFkZHJlc3Nlcy4KCQkgKiBSb2QgR3JpbWVzIDA0LzI2Lzk0CgkJICovCgkJaWYgKCFp
c2RwLT5pZF9yZWNvbmZpZykgewoJCQlwcmludGYoIiVzJWQiLCBkcC0+bmFtZSwgaXNkcC0+
aWRfdW5pdCk7CgkJCWlmIChpZF9hbGl2ZSAhPSAtMSkgewoJCQkJaWYgKGlzZHAtPmlkX2lv
YmFzZSA9PSAtMSkKCQkJCQlwcmludGYoIiBhdCA/Iik7CgkJCQllbHNlIHsKCQkJCQlwcmlu
dGYoIiBhdCAweCV4IiwgaXNkcC0+aWRfaW9iYXNlKTsKCQkJCQlpZiAoaXNkcC0+aWRfaW9i
YXNlICsgaWRfYWxpdmUgLSAxICE9CgkJCQkJICAgIGlzZHAtPmlkX2lvYmFzZSkgewoJCQkJ
CQlwcmludGYoIi0weCV4IiwKCQkJCQkJICAgICAgIGlzZHAtPmlkX2lvYmFzZSArIGlkX2Fs
aXZlIC0gMSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmIChpc2RwLT5pZF9pcnEpCgkJCQlw
cmludGYoIiBpcnEgJWQiLCBmZnMoaXNkcC0+aWRfaXJxKSAtIDEpOwoJCQlpZiAoaXNkcC0+
aWRfZHJxICE9IC0xKQoJCQkJcHJpbnRmKCIgZHJxICVkIiwgaXNkcC0+aWRfZHJxKTsKCQkJ
aWYgKGlzZHAtPmlkX21hZGRyKQoJCQkJcHJpbnRmKCIgbWFkZHIgMHglbHgiLCBrdnRvcChp
c2RwLT5pZF9tYWRkcikpOwoJCQlpZiAoaXNkcC0+aWRfbXNpemUpCgkJCQlwcmludGYoIiBt
c2l6ZSAlZCIsIGlzZHAtPmlkX21zaXplKTsKCQkJaWYgKGlzZHAtPmlkX2ZsYWdzKQoJCQkJ
cHJpbnRmKCIgZmxhZ3MgMHgleCIsIGlzZHAtPmlkX2ZsYWdzKTsKCQkJaWYgKGlzZHAtPmlk
X2lvYmFzZSAmJiAhKGlzZHAtPmlkX2lvYmFzZSAmIDB4ZjMwMCkpIHsKCQkJCXByaW50Zigi
IG9uIG1vdGhlcmJvYXJkIik7CgkJCX0gZWxzZSBpZiAoaXNkcC0+aWRfaW9iYXNlID49IDB4
MTAwMCAmJgoJCQkJICAgICEoaXNkcC0+aWRfaW9iYXNlICYgMHgzMDApKSB7CgkJCQlwcmlu
dGYgKCIgb24gZWlzYSBzbG90ICVkIiwKCQkJCQlpc2RwLT5pZF9pb2Jhc2UgPj4gMTIpOwoJ
CQl9IGVsc2UgewoJCQkJcHJpbnRmICgiIG9uIGlzYSIpOwoJCQl9CgkJCXByaW50ZigiXG4i
KTsKCQkJLyoKCQkJICogQ2hlY2sgZm9yIGNvbmZsaWN0cyBhZ2Fpbi4gIFRoZSBkcml2ZXIg
bWF5IGhhdmUKCQkJICogY2hhbmdlZCAqZHZwLiAgV2Ugc2hvdWxkIHdlYWtlbiB0aGUgZWFy
bHkgY2hlY2sKCQkJICogc2luY2UgdGhlIGRyaXZlciBtYXkgaGF2ZSBiZWVuIGFibGUgdG8g
Y2hhbmdlCgkJCSAqICpkdnAgdG8gYXZvaWQgY29uZmxpY3RzIGlmIGdpdmVuIGEgY2hhbmNl
LiAgV2UKCQkJICogYWxyZWFkeSBza2lwIHRoZSBlYXJseSBjaGVjayBmb3IgSVJRcyBhbmQg
Zm9yY2UKCQkJICogYSBjaGVjayBmb3IgSVJRcyBpbiB0aGUgbmV4dCBncm91cCBvZiBjaGVj
a3MuCgkJCSAqLwoJCQljaGVja2JpdHMgfD0gQ0NfSVJROwoJCQlpZiAoaGF2ZXNlZW5faXNh
ZGV2KGlzZHAsIGNoZWNrYml0cykpIHsKCQkJCXJldHVybjsKCQkJfQoJCQlpc2RwLT5pZF9h
bGl2ZSA9IGlkX2FsaXZlOwoJCX0KCQkoKmRwLT5hdHRhY2gpKGlzZHApOwoJCWlmIChpc2Rw
LT5pZF9pcnEpIHsKI2lmZGVmIEFQSUNfSU8KCQkJLyoKCQkJICogU29tZSBtb3RoZXJib2Fy
ZHMgdXNlIHVwcGVyIElSUXMgZm9yIHRyYWRpdGlvbmFsCgkJCSAqIElTQSBJTlRlcnJ1cHQg
c291cmNlcy4gIEluIHBhcnRpY3VsYXIgd2UgaGF2ZQoJCQkgKiBzZWVuIHRoZSBzZWNvbmRh
cnkgSURFIGNvbm5lY3RlZCB0byBJUlEyMC4KCQkJICogVGhpcyBjb2RlIGRldGVjdHMgYW5k
IGZpeGVzIHRoaXMgc2l0dWF0aW9uLgoJCQkgKi8KCQkJdV9pbnQJYXBpY19tYXNrOwoJCQlp
bnQJcmlycTsKCgkJCWFwaWNfbWFzayA9IGlzYV9hcGljX21hc2soaXNkcC0+aWRfaXJxKTsK
CQkJaWYgKGFwaWNfbWFzayAhPSBpc2RwLT5pZF9pcnEpIHsKCQkJCXJpcnEgPSBmZnMoaXNk
cC0+aWRfaXJxKSAtIDE7CgkJCQlpc2RwLT5pZF9pcnEgPSBhcGljX21hc2s7CgkJCQl1bmRp
cmVjdF9pc2FfaXJxKHJpcnEpOwkvKiBmcmVlIGZvciBJU0EgKi8KCQkJfQojZW5kaWYgLyog
QVBJQ19JTyAqLwoJCQlyZWdpc3Rlcl9pbnRyKGZmcyhpc2RwLT5pZF9pcnEpIC0gMSwgaXNk
cC0+aWRfaWQsCgkJCQkgICAgICBpc2RwLT5pZF9yaV9mbGFncywgaXNkcC0+aWRfaW50ciwK
CQkJCSAgICAgIG1wLCBpc2RwLT5pZF91bml0KTsKCQl9Cgl9IGVsc2UgewoJCWlmIChpc2Rw
LT5pZF9yZWNvbmZpZykgewoJCQkoKmRwLT5hdHRhY2gpKGlzZHApOyAvKiByZWNvbmZpZ3Vy
YXRpb24gYXR0YWNoICovCgkJfQoJCWlmICghbGFzdF9hbGl2ZSkgewoJCQlpZiAoIWlzZHAt
PmlkX3JlY29uZmlnKSB7CgkJCQlwcmludGYoIiVzJWQgbm90IGZvdW5kIiwKCQkJCSAgICAg
ICBkcC0+bmFtZSwgaXNkcC0+aWRfdW5pdCk7CgkJCQlpZiAoaXNkcC0+aWRfaW9iYXNlICE9
IC0xKQoJCQkJCXByaW50ZigiIGF0IDB4JXgiLCBpc2RwLT5pZF9pb2Jhc2UpOwoJCQkJcHJp
bnRmKCJcbiIpOwoJCQl9CgkJfQoJCWVsc2UgewojaWYgMAoJCQkvKiBUaGlzIGNvZGUgaGFz
IG5vdCBiZWVuIHRlc3RlZC4uLi4gKi8KCQkJaWYgKGlzZHAtPmlkX2lycSkgewoJCQkJaWN1
X3Vuc2V0KGZmcyhpc2RwLT5pZF9pcnEpIC0gMSwKCQkJCQkJaXNkcC0+aWRfaW50cik7CgkJ
CQlpZiAobXApCgkJCQkJSU5UUlVOTUFTSygqbXAsIGlzZHAtPmlkX2lycSk7CgkJCX0KI2Vs
c2UKCQkJcHJpbnRmICgiaWN1X3Vuc2V0KCkgbm90IHN1cHBvcnRlZCBoZXJlIC4uLlxuIik7
CiNlbmRpZgoJCX0KCX0KfQoKc3RhdGljIGNhZGRyX3QJZG1hX2JvdW5jZWJ1Zls4XTsKc3Rh
dGljIHVfaW50CWRtYV9ib3VuY2VidWZzaXplWzhdOwpzdGF0aWMgdV9pbnQ4X3QJZG1hX2Jv
dW5jZWQgPSAwOwpzdGF0aWMgdV9pbnQ4X3QJZG1hX2J1c3kgPSAwOwkJLyogVXNlZCBpbiBp
c2FfZG1hc3RhcnQoKSAqLwpzdGF0aWMgdV9pbnQ4X3QJZG1hX2ludXNlID0gMDsJCS8qIFVz
ZXIgZm9yIGFjcXVpcmUvcmVsZWFzZSAqLwpzdGF0aWMgdV9pbnQ4X3QgZG1hX2F1dG9fbW9k
ZSA9IDA7CgojZGVmaW5lIFZBTElEX0RNQV9NQVNLICg3KQoKLyogaGlnaCBieXRlIG9mIGFk
ZHJlc3MgaXMgc3RvcmVkIGluIHRoaXMgcG9ydCBmb3IgaS10aCBkbWEgY2hhbm5lbCAqLwpz
dGF0aWMgaW50IGRtYXBhZ2Vwb3J0WzhdID0geyAweDg3LCAweDgzLCAweDgxLCAweDgyLCAw
eDhmLCAweDhiLCAweDg5LCAweDhhIH07CgovKgogKiBTZXR1cCBhIERNQSBjaGFubmVsJ3Mg
Ym91bmNlIGJ1ZmZlci4KICovCnZvaWQKaXNhX2RtYWluaXQoY2hhbiwgYm91bmNlYnVmc2l6
ZSkKCWludCBjaGFuOwoJdV9pbnQgYm91bmNlYnVmc2l6ZTsKewoJdm9pZCAqYnVmOwoKI2lm
ZGVmIERJQUdOT1NUSUMKCWlmIChjaGFuICYgflZBTElEX0RNQV9NQVNLKQoJCXBhbmljKCJp
c2FfZG1haW5pdDogY2hhbm5lbCBvdXQgb2YgcmFuZ2UiKTsKCglpZiAoZG1hX2JvdW5jZWJ1
ZltjaGFuXSAhPSBOVUxMKQoJCXBhbmljKCJpc2FfZG1haW5pdDogaW1wb3NzaWJsZSByZXF1
ZXN0Iik7IAojZW5kaWYKCglkbWFfYm91bmNlYnVmc2l6ZVtjaGFuXSA9IGJvdW5jZWJ1ZnNp
emU7CgoJLyogVHJ5IG1hbGxvYygpIGZpcnN0LiAgSXQgd29ya3MgYmV0dGVyIGlmIGl0IHdv
cmtzLiAqLwoJYnVmID0gbWFsbG9jKGJvdW5jZWJ1ZnNpemUsIE1fREVWQlVGLCBNX05PV0FJ
VCk7CglpZiAoYnVmICE9IE5VTEwpIHsKCQlpZiAoaXNhX2RtYXJhbmdlY2hlY2soYnVmLCBi
b3VuY2VidWZzaXplLCBjaGFuKSA9PSAwKSB7CgkJCWRtYV9ib3VuY2VidWZbY2hhbl0gPSBi
dWY7CgkJCXJldHVybjsKCQl9CgkJZnJlZShidWYsIE1fREVWQlVGKTsKCX0KCWJ1ZiA9IGNv
bnRpZ21hbGxvYyhib3VuY2VidWZzaXplLCBNX0RFVkJVRiwgTV9OT1dBSVQsIDB1bCwgMHhm
ZmZmZmZ1bCwKCQkJICAgMXVsLCBjaGFuICYgNCA/IDB4MjAwMDB1bCA6IDB4MTAwMDB1bCk7
CglpZiAoYnVmID09IE5VTEwpCgkJcHJpbnRmKCJpc2FfZG1haW5pdCglZCwgJWQpIGZhaWxl
ZFxuIiwgY2hhbiwgYm91bmNlYnVmc2l6ZSk7CgllbHNlCgkJZG1hX2JvdW5jZWJ1ZltjaGFu
XSA9IGJ1ZjsKfQoKLyoKICogUmVnaXN0ZXIgYSBETUEgY2hhbm5lbCdzIHVzYWdlLiAgVXN1
YWxseSBjYWxsZWQgZnJvbSBhIGRldmljZSBkcml2ZXIKICogaW4gb3BlbigpIG9yIGR1cmlu
ZyBpdCdzIGluaXRpYWxpemF0aW9uLgogKi8KaW50CmlzYV9kbWFfYWNxdWlyZShjaGFuKQoJ
aW50IGNoYW47CnsKI2lmZGVmIERJQUdOT1NUSUMKCWlmIChjaGFuICYgflZBTElEX0RNQV9N
QVNLKQoJCXBhbmljKCJpc2FfZG1hX2FjcXVpcmU6IGNoYW5uZWwgb3V0IG9mIHJhbmdlIik7
CiNlbmRpZgoKCWlmIChkbWFfaW51c2UgJiAoMSA8PCBjaGFuKSkgewoJCXByaW50ZigiaXNh
X2RtYV9hY3F1aXJlOiBjaGFubmVsICVkIGFscmVhZHkgaW4gdXNlXG4iLCBjaGFuKTsKCQly
ZXR1cm4gKEVCVVNZKTsKCX0KCWRtYV9pbnVzZSB8PSAoMSA8PCBjaGFuKTsKCWRtYV9hdXRv
X21vZGUgJj0gfigxIDw8IGNoYW4pOwoKCXJldHVybiAoMCk7Cn0KCi8qCiAqIFVucmVnaXN0
ZXIgYSBETUEgY2hhbm5lbCdzIHVzYWdlLiAgVXN1YWxseSBjYWxsZWQgZnJvbSBhIGRldmlj
ZSBkcml2ZXIKICogZHVyaW5nIGNsb3NlKCkgb3IgZHVyaW5nIGl0J3Mgc2h1dGRvd24uCiAq
Lwp2b2lkCmlzYV9kbWFfcmVsZWFzZShjaGFuKQoJaW50IGNoYW47CnsKI2lmZGVmIERJQUdO
T1NUSUMKCWlmIChjaGFuICYgflZBTElEX0RNQV9NQVNLKQoJCXBhbmljKCJpc2FfZG1hX3Jl
bGVhc2U6IGNoYW5uZWwgb3V0IG9mIHJhbmdlIik7CgoJaWYgKChkbWFfaW51c2UgJiAoMSA8
PCBjaGFuKSkgPT0gMCkKCQlwcmludGYoImlzYV9kbWFfcmVsZWFzZTogY2hhbm5lbCAlZCBu
b3QgaW4gdXNlXG4iLCBjaGFuKTsKI2VuZGlmCgoJaWYgKGRtYV9idXN5ICYgKDEgPDwgY2hh
bikpIHsKCQlkbWFfYnVzeSAmPSB+KDEgPDwgY2hhbik7CgkJLyogCgkJICogWFhYIFdlIHNo
b3VsZCBhbHNvIGRvICJkbWFfYm91bmNlZCAmPSAoMSA8PCBjaGFuKTsiCgkJICogYmVjYXVz
ZSB3ZSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiBpc2FfZG1hZG9uZSgpIHdoaWNoCgkJICog
d2FzIG5vdCBjYWxsZWQgdG8gZW5kIHRoZSBsYXN0IERNQSBvcGVyYXRpb24uICBUaGlzIGRv
ZXMKCQkgKiBub3QgbWF0dGVyIG5vdywgYnV0IGl0IG1heSBpbiB0aGUgZnV0dXJlLgoJCSAq
LwoJfQoKCWRtYV9pbnVzZSAmPSB+KDEgPDwgY2hhbik7CglkbWFfYXV0b19tb2RlICY9IH4o
MSA8PCBjaGFuKTsKfQoKLyoKICogaXNhX2RtYWNhc2NhZGUoKTogcHJvZ3JhbSA4MjM3IERN
QSBjb250cm9sbGVyIGNoYW5uZWwgdG8gYWNjZXB0CiAqIGV4dGVybmFsIGRtYSBjb250cm9s
IGJ5IGEgYm9hcmQuCiAqLwp2b2lkIGlzYV9kbWFjYXNjYWRlKGNoYW4pCglpbnQgY2hhbjsK
ewojaWZkZWYgRElBR05PU1RJQwoJaWYgKGNoYW4gJiB+VkFMSURfRE1BX01BU0spCgkJcGFu
aWMoImlzYV9kbWFjYXNjYWRlOiBjaGFubmVsIG91dCBvZiByYW5nZSIpOwojZW5kaWYKCgkv
KiBzZXQgZG1hIGNoYW5uZWwgbW9kZSwgYW5kIHNldCBkbWEgY2hhbm5lbCBtb2RlICovCglp
ZiAoKGNoYW4gJiA0KSA9PSAwKSB7CgkJb3V0YihETUExX01PREUsIERNQTM3TURfQ0FTQ0FE
RSB8IGNoYW4pOwoJCW91dGIoRE1BMV9TTVNLLCBjaGFuKTsKCX0gZWxzZSB7CgkJb3V0YihE
TUEyX01PREUsIERNQTM3TURfQ0FTQ0FERSB8IChjaGFuICYgMykpOwoJCW91dGIoRE1BMl9T
TVNLLCBjaGFuICYgMyk7Cgl9Cn0KCi8qCiAqIGlzYV9kbWFzdGFydCgpOiBwcm9ncmFtIDgy
MzcgRE1BIGNvbnRyb2xsZXIgY2hhbm5lbCwgYXZvaWQgcGFnZSBhbGlnbm1lbnQKICogcHJv
YmxlbXMgYnkgdXNpbmcgYSBib3VuY2UgYnVmZmVyLgogKi8Kdm9pZCBpc2FfZG1hc3RhcnQo
aW50IGZsYWdzLCBjYWRkcl90IGFkZHIsIHVfaW50IG5ieXRlcywgaW50IGNoYW4pCnsKCXZt
X29mZnNldF90IHBoeXM7CglpbnQgd2Fwb3J0OwoJY2FkZHJfdCBuZXdhZGRyOwoKI2lmZGVm
IERJQUdOT1NUSUMKCWlmIChjaGFuICYgflZBTElEX0RNQV9NQVNLKQoJCXBhbmljKCJpc2Ff
ZG1hc3RhcnQ6IGNoYW5uZWwgb3V0IG9mIHJhbmdlIik7CgoJaWYgKChjaGFuIDwgNCAmJiBu
Ynl0ZXMgPiAoMTw8MTYpKQoJICAgIHx8IChjaGFuID49IDQgJiYgKG5ieXRlcyA+ICgxPDwx
NykgfHwgKHVfaW50KWFkZHIgJiAxKSkpCgkJcGFuaWMoImlzYV9kbWFzdGFydDogaW1wb3Nz
aWJsZSByZXF1ZXN0Iik7CgoJaWYgKChkbWFfaW51c2UgJiAoMSA8PCBjaGFuKSkgPT0gMCkK
CQlwcmludGYoImlzYV9kbWFzdGFydDogY2hhbm5lbCAlZCBub3QgYWNxdWlyZWRcbiIsIGNo
YW4pOwojZW5kaWYKCiNpZiAwCgkvKgoJICogWFhYIFRoaXMgc2hvdWxkIGJlIGNoZWNrZWQs
IGJ1dCBkcml2ZXJzIGxpa2UgYWQxODQ4IG9ubHkgY2FsbAoJICogaXNhX2RtYXN0YXJ0KCkg
b25jZSBiZWNhdXNlIHRoZXkgdXNlIEF1dG8gRE1BIG1vZGUuICBJZiB3ZQoJICogbGVhdmUg
dGhpcyBpbiwgZHJpdmVycyB0aGF0IGRvIHRoaXMgd2lsbCBwcmludCB0aGlzIGNvbnRpbnVv
dXNseS4KCSAqLwoJaWYgKGRtYV9idXN5ICYgKDEgPDwgY2hhbikpCgkJcHJpbnRmKCJpc2Ff
ZG1hc3RhcnQ6IGNoYW5uZWwgJWQgYnVzeVxuIiwgY2hhbik7CiNlbmRpZgoKCWRtYV9idXN5
IHw9ICgxIDw8IGNoYW4pOwoKCWlmIChpc2FfZG1hcmFuZ2VjaGVjayhhZGRyLCBuYnl0ZXMs
IGNoYW4pKSB7CgkJaWYgKGRtYV9ib3VuY2VidWZbY2hhbl0gPT0gTlVMTAoJCSAgICB8fCBk
bWFfYm91bmNlYnVmc2l6ZVtjaGFuXSA8IG5ieXRlcykKCQkJcGFuaWMoImlzYV9kbWFzdGFy
dDogYmFkIGJvdW5jZSBidWZmZXIiKTsgCgkJZG1hX2JvdW5jZWQgfD0gKDEgPDwgY2hhbik7
CgkJbmV3YWRkciA9IGRtYV9ib3VuY2VidWZbY2hhbl07CgoJCS8qIGNvcHkgYm91bmNlIGJ1
ZmZlciBvbiB3cml0ZSAqLwoJCWlmICghKGZsYWdzICYgQl9SRUFEKSkKCQkJYmNvcHkoYWRk
ciwgbmV3YWRkciwgbmJ5dGVzKTsKCQlhZGRyID0gbmV3YWRkcjsKCX0KCgkvKiB0cmFuc2xh
dGUgdG8gcGh5c2ljYWwgKi8KCXBoeXMgPSBwbWFwX2V4dHJhY3QocG1hcF9rZXJuZWwoKSwg
KHZtX29mZnNldF90KWFkZHIpOwoJaWYgKGZsYWdzICYgQl9SQVcpIHsKCSAgICBkbWFfYXV0
b19tb2RlIHw9ICgxIDw8IGNoYW4pOwoJfSBlbHNlIHsgCgkgICAgZG1hX2F1dG9fbW9kZSAm
PSB+KDEgPDwgY2hhbik7Cgl9CgoJaWYgKChjaGFuICYgNCkgPT0gMCkgewoJCS8qCgkJICog
UHJvZ3JhbSBvbmUgb2YgRE1BIGNoYW5uZWxzIDAuLjMuICBUaGVzZSBhcmUKCQkgKiBieXRl
IG1vZGUgY2hhbm5lbHMuCgkJICovCgkJLyogc2V0IGRtYSBjaGFubmVsIG1vZGUsIGFuZCBy
ZXNldCBhZGRyZXNzIGZmICovCgoJCS8qIElmIEJfUkFXIGZsYWcgaXMgc2V0LCB0aGVuIHVz
ZSBhdXRvaW5pdGlhbGlzZSBtb2RlICovCgkJaWYgKGZsYWdzICYgQl9SQVcpIHsKCQkgIGlm
IChmbGFncyAmIEJfUkVBRCkKCQkJb3V0YihETUExX01PREUsIERNQTM3TURfQVVUT3xETUEz
N01EX1dSSVRFfGNoYW4pOwoJCSAgZWxzZQoJCQlvdXRiKERNQTFfTU9ERSwgRE1BMzdNRF9B
VVRPfERNQTM3TURfUkVBRHxjaGFuKTsKCQl9CgkJZWxzZQoJCWlmIChmbGFncyAmIEJfUkVB
RCkKCQkJb3V0YihETUExX01PREUsIERNQTM3TURfU0lOR0xFfERNQTM3TURfV1JJVEV8Y2hh
bik7CgkJZWxzZQoJCQlvdXRiKERNQTFfTU9ERSwgRE1BMzdNRF9TSU5HTEV8RE1BMzdNRF9S
RUFEfGNoYW4pOwoJCW91dGIoRE1BMV9GRkMsIDApOwoKCQkvKiBzZW5kIHN0YXJ0IGFkZHJl
c3MgKi8KCQl3YXBvcnQgPSAgRE1BMV9DSE4oY2hhbik7CgkJb3V0Yih3YXBvcnQsIHBoeXMp
OwoJCW91dGIod2Fwb3J0LCBwaHlzPj44KTsKCQlvdXRiKGRtYXBhZ2Vwb3J0W2NoYW5dLCBw
aHlzPj4xNik7CgoJCS8qIHNlbmQgY291bnQgKi8KCQlvdXRiKHdhcG9ydCArIDEsIC0tbmJ5
dGVzKTsKCQlvdXRiKHdhcG9ydCArIDEsIG5ieXRlcz4+OCk7CgoJCS8qIHVubWFzayBjaGFu
bmVsICovCgkJb3V0YihETUExX1NNU0ssIGNoYW4pOwoJfSBlbHNlIHsKCQkvKgoJCSAqIFBy
b2dyYW0gb25lIG9mIERNQSBjaGFubmVscyA0Li43LiAgVGhlc2UgYXJlCgkJICogd29yZCBt
b2RlIGNoYW5uZWxzLgoJCSAqLwoJCS8qIHNldCBkbWEgY2hhbm5lbCBtb2RlLCBhbmQgcmVz
ZXQgYWRkcmVzcyBmZiAqLwoKCQkvKiBJZiBCX1JBVyBmbGFnIGlzIHNldCwgdGhlbiB1c2Ug
YXV0b2luaXRpYWxpc2UgbW9kZSAqLwoJCWlmIChmbGFncyAmIEJfUkFXKSB7CgkJICBpZiAo
ZmxhZ3MgJiBCX1JFQUQpCgkJCW91dGIoRE1BMl9NT0RFLCBETUEzN01EX0FVVE98RE1BMzdN
RF9XUklURXwoY2hhbiYzKSk7CgkJICBlbHNlCgkJCW91dGIoRE1BMl9NT0RFLCBETUEzN01E
X0FVVE98RE1BMzdNRF9SRUFEfChjaGFuJjMpKTsKCQl9CgkJZWxzZQoJCWlmIChmbGFncyAm
IEJfUkVBRCkKCQkJb3V0YihETUEyX01PREUsIERNQTM3TURfU0lOR0xFfERNQTM3TURfV1JJ
VEV8KGNoYW4mMykpOwoJCWVsc2UKCQkJb3V0YihETUEyX01PREUsIERNQTM3TURfU0lOR0xF
fERNQTM3TURfUkVBRHwoY2hhbiYzKSk7CgkJb3V0YihETUEyX0ZGQywgMCk7CgoJCS8qIHNl
bmQgc3RhcnQgYWRkcmVzcyAqLwoJCXdhcG9ydCA9IERNQTJfQ0hOKGNoYW4gLSA0KTsKCQlv
dXRiKHdhcG9ydCwgcGh5cz4+MSk7CgkJb3V0Yih3YXBvcnQsIHBoeXM+PjkpOwoJCW91dGIo
ZG1hcGFnZXBvcnRbY2hhbl0sIHBoeXM+PjE2KTsKCgkJLyogc2VuZCBjb3VudCAqLwoJCW5i
eXRlcyA+Pj0gMTsKCQlvdXRiKHdhcG9ydCArIDIsIC0tbmJ5dGVzKTsKCQlvdXRiKHdhcG9y
dCArIDIsIG5ieXRlcz4+OCk7CgoJCS8qIHVubWFzayBjaGFubmVsICovCgkJb3V0YihETUEy
X1NNU0ssIGNoYW4gJiAzKTsKCX0KfQoKdm9pZCBpc2FfZG1hZG9uZShpbnQgZmxhZ3MsIGNh
ZGRyX3QgYWRkciwgaW50IG5ieXRlcywgaW50IGNoYW4pCnsgIAojaWZkZWYgRElBR05PU1RJ
QwoJaWYgKGNoYW4gJiB+VkFMSURfRE1BX01BU0spCgkJcGFuaWMoImlzYV9kbWFkb25lOiBj
aGFubmVsIG91dCBvZiByYW5nZSIpOwoKCWlmICgoZG1hX2ludXNlICYgKDEgPDwgY2hhbikp
ID09IDApCgkJcHJpbnRmKCJpc2FfZG1hZG9uZTogY2hhbm5lbCAlZCBub3QgYWNxdWlyZWRc
biIsIGNoYW4pOwojZW5kaWYKCgoJLyoKCSAqIFhYWCBUaGlzIHNob3VsZCBiZSBjaGVja2Vk
LCBidXQgZHJpdmVycyBsaWtlIGFkMTg0OCBvbmx5IGNhbGwKCSAqIGlzYV9kbWFzdGFydCgp
IG9uY2UgYmVjYXVzZSB0aGV5IHVzZSBBdXRvIERNQSBtb2RlLiAgSWYgd2UKCSAqIGxlYXZl
IHRoaXMgaW4sIGRyaXZlcnMgdGhhdCBkbyB0aGlzIHdpbGwgcHJpbnQgdGhpcyBjb250aW51
b3VzbHkuCgkgKi8KCWlmICgoKGRtYV9idXN5ICYgKDEgPDwgY2hhbikpID09IDApICYmIAoJ
ICAgIChkbWFfYXV0b19tb2RlICYgKDEgPDwgY2hhbikpID09IDAgKQoJCXByaW50ZigiaXNh
X2RtYWRvbmU6IGNoYW5uZWwgJWQgbm90IGJ1c3lcbiIsIGNoYW4pOwoKCglpZiAoZG1hX2Jv
dW5jZWQgJiAoMSA8PCBjaGFuKSkgewoJCS8qIGNvcHkgYm91bmNlIGJ1ZmZlciBvbiByZWFk
ICovCgkJaWYgKGZsYWdzICYgQl9SRUFEKQoJCQliY29weShkbWFfYm91bmNlYnVmW2NoYW5d
LCBhZGRyLCBuYnl0ZXMpOwoKCQlkbWFfYm91bmNlZCAmPSB+KDEgPDwgY2hhbik7Cgl9Cglk
bWFfYnVzeSAmPSB+KDEgPDwgY2hhbik7Cn0KCi8qCiAqIENoZWNrIGZvciBwcm9ibGVtcyB3
aXRoIHRoZSBhZGRyZXNzIHJhbmdlIG9mIGEgRE1BIHRyYW5zZmVyCiAqIChub24tY29udGln
dW91cyBwaHlzaWNhbCBwYWdlcywgb3V0c2lkZSBvZiBidXMgYWRkcmVzcyBzcGFjZSwKICog
Y3Jvc3NpbmcgRE1BIHBhZ2UgYm91bmRhcmllcykuCiAqIFJldHVybiB0cnVlIGlmIHNwZWNp
YWwgaGFuZGxpbmcgbmVlZGVkLgogKi8KCnN0YXRpYyBpbnQKaXNhX2RtYXJhbmdlY2hlY2so
Y2FkZHJfdCB2YSwgdV9pbnQgbGVuZ3RoLCBpbnQgY2hhbikgewoJdm1fb2Zmc2V0X3QgcGh5
cywgcHJpb3JwYWdlID0gMCwgZW5kdmE7Cgl1X2ludCBkbWFfcGdtc2sgPSAoY2hhbiAmIDQp
ID8gIH4oMTI4KjEwMjQtMSkgOiB+KDY0KjEwMjQtMSk7CgoJZW5kdmEgPSAodm1fb2Zmc2V0
X3Qpcm91bmRfcGFnZSh2YSArIGxlbmd0aCk7Cglmb3IgKDsgdmEgPCAoY2FkZHJfdCkgZW5k
dmEgOyB2YSArPSBQQUdFX1NJWkUpIHsKCQlwaHlzID0gdHJ1bmNfcGFnZShwbWFwX2V4dHJh
Y3QocG1hcF9rZXJuZWwoKSwgKHZtX29mZnNldF90KXZhKSk7CiNkZWZpbmUgSVNBUkFNX0VO
RAlSQU1fRU5ECgkJaWYgKHBoeXMgPT0gMCkKCQkJcGFuaWMoImlzYV9kbWFjaGVjazogbm8g
cGh5c2ljYWwgcGFnZSBwcmVzZW50Iik7CgkJaWYgKHBoeXMgPj0gSVNBUkFNX0VORCkKCQkJ
cmV0dXJuICgxKTsKCQlpZiAocHJpb3JwYWdlKSB7CgkJCWlmIChwcmlvcnBhZ2UgKyBQQUdF
X1NJWkUgIT0gcGh5cykKCQkJCXJldHVybiAoMSk7CgkJCS8qIGNoZWNrIGlmIGNyb3NzaW5n
IGEgRE1BIHBhZ2UgYm91bmRhcnkgKi8KCQkJaWYgKCgodV9pbnQpcHJpb3JwYWdlIF4gKHVf
aW50KXBoeXMpICYgZG1hX3BnbXNrKQoJCQkJcmV0dXJuICgxKTsKCQl9CgkJcHJpb3JwYWdl
ID0gcGh5czsKCX0KCXJldHVybiAoMCk7Cn0KCi8qCiAqIFF1ZXJ5IHRoZSBwcm9ncmVzcyBv
ZiBhIHRyYW5zZmVyIG9uIGEgRE1BIGNoYW5uZWwuCiAqCiAqIFRvIGF2b2lkIGhhdmluZyB0
byBpbnRlcnJ1cHQgYSB0cmFuc2ZlciBpbiBwcm9ncmVzcywgd2Ugc2FtcGxlCiAqIGVhY2gg
b2YgdGhlIGhpZ2ggYW5kIGxvdyBkYXRhYnl0ZXMgdHdpY2UsIGFuZCBhcHBseSB0aGUgZm9s
bG93aW5nCiAqIGxvZ2ljIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBjb3VudC4KICoKICog
UmVhZHMgYXJlIHBlcmZvcm1lZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHRodXMgaXQg
aXMgdG8gYmUKICogZXhwZWN0ZWQgdGhhdCB0aGUgdGltZSBiZXR3ZWVuIHJlYWRzIGlzIHZl
cnkgc21hbGwuICBBdCBtb3N0CiAqIG9uZSByb2xsb3ZlciBpbiB0aGUgbG93IGNvdW50IGJ5
dGUgY2FuIGJlIGV4cGVjdGVkIHdpdGhpbiB0aGUKICogZm91ciByZWFkcyB0aGF0IGFyZSBw
ZXJmb3JtZWQuCiAqCiAqIFRoZXJlIGFyZSB0aHJlZSBnYXBzIGluIHdoaWNoIGEgcm9sbG92
ZXIgY2FuIG9jY3VyIDoKICoKICogLSByZWFkIGxvdzEKICogICAgICAgICAgICAgIGdhcDEK
ICogLSByZWFkIGhpZ2gxCiAqICAgICAgICAgICAgICBnYXAyCiAqIC0gcmVhZCBsb3cyCiAq
ICAgICAgICAgICAgICBnYXAzCiAqIC0gcmVhZCBoaWdoMgogKgogKiBJZiBhIHJvbGxvdmVy
IG9jY3VycyBpbiBnYXAxIG9yIGdhcDIsIHRoZSBsb3cyIHZhbHVlIHdpbGwgYmUKICogZ3Jl
YXRlciB0aGFuIHRoZSBsb3cxIHZhbHVlLiAgSW4gdGhpcyBjYXNlLCBsb3cyIGFuZCBoaWdo
MiBhcmUgYQogKiBjb3JyZXNwb25kaW5nIHBhaXIuIAogKgogKiBJbiBhbnkgb3RoZXIgY2Fz
ZSwgbG93MSBhbmQgaGlnaDEgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgY29ycmVjdC4KICoK
ICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcg
aW4gdGhlIHRyYW5zZmVyLAogKiBvciAtMSBpZiB0aGUgY2hhbm5lbCByZXF1ZXN0ZWQgaXMg
bm90IGFjdGl2ZS4KICoKICovCiNpZiAwCmludAppc2FfZG1hc3RhdHVzKGludCBjaGFuKQp7
Cgl1X2xvbmcJY250ID0gMDsKCWludAlmZnBvcnQsIHdhcG9ydDsKCXVfbG9uZwlsb3cxLCBo
aWdoMSwgbG93MiwgaGlnaDI7Cgl1X2xvbmcJZWY7CgoJLyogY2hhbm5lbCBhY3RpdmU/ICov
CglpZiAoKGRtYV9pbnVzZSAmICgxIDw8IGNoYW4pKSA9PSAwKSB7CgkgICAgcHJpbnRmKCJp
c2FfZG1hc3RhdHVzOiBjaGFubmVsICVkIG5vdCBhY3RpdmVcbiIsIGNoYW4pOwoJCQkJcmV0
dXJuKC0xKTsKCX0KCgkvKiBzdGlsbCBidXN5PyAqLwoJaWYgKChkbWFfYnVzeSAmICgxIDw8
IGNoYW4pKSA9PSAwKSB7CgkgICAgcmV0dXJuKDApOyAKCX0KCQoJaWYgKGNoYW4gPCA0KSB7
CQkJLyogbG93IERNQSBjb250cm9sbGVyICovCgkJZmZwb3J0ID0gRE1BMV9GRkM7CgkJd2Fw
b3J0ID0gRE1BMV9DSE4oY2hhbikgKyAxOwoJfSBlbHNlIHsJCQkvKiBoaWdoIERNQSBjb250
cm9sbGVyICovCgkJZmZwb3J0ID0gRE1BMl9GRkM7CgkJd2Fwb3J0ID0gRE1BMl9DSE4oY2hh
biAtIDQpICsgMjsKCX0KCglkaXNhYmxlX2ludHIoKTsJCQkvKiBubyBpbnRlcnJ1cHRzIE1y
IEpvbmVzISAqLwoJb3V0YihmZnBvcnQsIDApOwkJLyogY2xlYXIgcmVnaXN0ZXIgTFNCIGZs
aXBmbG9wICovCglsb3cxID0gaW5iKHdhcG9ydCk7CgloaWdoMSA9IGluYih3YXBvcnQpOwoJ
b3V0YihmZnBvcnQsIDApOwkJLyogY2xlYXIgYWdhaW4gKi8KCWxvdzIgPSBpbmIod2Fwb3J0
KTsKCWhpZ2gyID0gaW5iKHdhcG9ydCk7CgllbmFibGVfaW50cigpOwkJCS8qIGVuYWJsZSBp
bnRlcnJ1cHRzIGFnYWluICovCgoJLyogCgkgKiBOb3cgZGVjaWRlIGlmIGEgd3JhcCBoYXMg
dHJpZWQgdG8gc2tldyBvdXIgcmVzdWx0cy4KCSAqIE5vdGUgdGhhdCBhZnRlciBUQywgdGhl
IGNvdW50IHdpbGwgcmVhZCAweGZmZmYsIHdoaWxlIHdlIHdhbnQgCgkgKiB0byByZXR1cm4g
emVybywgc28gd2UgYWRkIGFuZCB0aGVuIG1hc2sgdG8gY29tcGVuc2F0ZS4KCSAqLwoJaWYg
KGxvdzEgPj0gbG93MikgewoJCWNudCA9IChsb3cxICsgKGhpZ2gxIDw8IDgpICsgMSkgJiAw
eGZmZmY7Cgl9IGVsc2UgewoJCWNudCA9IChsb3cyICsgKGhpZ2gyIDw8IDgpICsgMSkgJiAw
eGZmZmY7Cgl9CgoJaWYgKGNoYW4gPj0gNCkJCQkvKiBoaWdoIGNoYW5uZWxzIG1vdmUgd29y
ZHMgKi8KCQljbnQgKj0gMjsKCXJldHVybihjbnQpOwp9CiNlbmRpZgoKCmludAppc2FfZG1h
c3RhdHVzKGludCBjaGFuKQp7CiAgICB1X2xvbmcgcGh5ID0gMCA7CiAgICB1X2xvbmcgY250
ID0gMCA7CiAgICB1X2xvbmcgZmxhZ3MgOwogICAgaW50IHdhcG9ydDsKCiAgICBpZiAoKGRt
YV9pbnVzZSAmICgxIDw8IGNoYW4pKSA9PSAwKSB7CiAgICAgICAgcHJpbnRmKCJjaGFuICVk
IG5vdCBhY3F1aXJlZFxuIiwgY2hhbik7CiAgICAgICAgcmV0dXJuIC0xIDsKICAgIH0KCiAg
ICBpZiAoKChkbWFfYnVzeSAmICgxIDw8IGNoYW4pKSA9PSAwKSAmJgoJKGRtYV9hdXRvX21v
ZGUgJiAoMSA8PCBjaGFuKSkgPT0gMCApIHsKICAgICAgICBwcmludGYoImNoYW4gJWQgbm90
IGJ1c3lcbiIsIGNoYW4pOwogICAgICAgIHJldHVybiAtMiA7CiAgICB9CgogICAgZmxhZ3Mg
PSBzcGxoaWdoKCk7CiAgICBpZiAoKGNoYW4gJiA0KSA9PSAwKSB7IC8qIDgtYml0IGNoYW5u
ZWwgKi8KICAgICAgICBvdXRiKERNQTFfRkZDLCAwKTsKICAgICAgICB3YXBvcnQgPSAgRE1B
MV9DSE4oY2hhbik7CiAgICAgICAgcGh5PSBpbmIod2Fwb3J0KSArIChpbmIod2Fwb3J0KSA8
PDgpICsgKGluYihkbWFwYWdlcG9ydFtjaGFuXSkgPDwxNiApOwogICAgICAgIGNudCA9IGlu
Yih3YXBvcnQrMSkgKyAoaW5iKHdhcG9ydCsxKTw8OCkgKzE7CiAgICAgICAgY250ICY9IDB4
ZmZmZiA7CiAgICB9IGVsc2UgewogICAgICAgIG91dGIoRE1BMl9GRkMsIDApOwogICAgICAg
IHdhcG9ydCA9IERNQTJfQ0hOKGNoYW4gLSA0KTsKICAgICAgICBwaHk9IGluYih3YXBvcnQp
ICsgKGluYih3YXBvcnQpIDw8OCkgKyAoaW5iKGRtYXBhZ2Vwb3J0W2NoYW5dKSA8PDE2ICk7
CiAgICAgICAgY250ID0gaW5iKHdhcG9ydCsxKSArIChpbmIod2Fwb3J0KzEpPDw4KSArIDE7
CiAgICAgICAgcGh5IDw8PSAxOwogICAgICAgIGNudCA8PD0gMTsKICAgICAgICBjbnQgJj0g
MHgxZmZmZiA7CiAgICB9CiAgICBzcGx4KGZsYWdzKTsKICAgIHJldHVybiBjbnQgOwp9Cgov
KgogKiBGaW5kIHRoZSBoaWdoZXN0IHByaW9yaXR5IGVuYWJsZWQgZGlzcGxheSBkZXZpY2Uu
ICBTaW5jZSB3ZSBjYW4ndAogKiBkaXN0aW5ndWlzaCBkaXNwbGF5IGRldmljZXMgZnJvbSB0
dHlzLCBkZXBlbmQgb24gZGlzcGxheSBkZXZpY2VzCiAqIGJlaW5nIHNlbnNpdGl2ZSBhbmQg
YmVmb3JlIHNlbnNpdGl2ZSBub24tZGlzcGxheSBkZXZpY2VzIChpZiBhbnkpCiAqIGluIGlz
YV9kZXZ0YWJfdHR5LgogKgogKiBYWFggd2Ugc2hvdWxkIGFkZCBjYXBhYmlsaXR5IGZsYWdz
IElBTURJU1BMQVkgYW5kIElTVVBQT1JUQ09OU09MRVMuCiAqLwpzdHJ1Y3QgaXNhX2Rldmlj
ZSAqCmZpbmRfZGlzcGxheSgpCnsKCXN0cnVjdCBpc2FfZGV2aWNlICpkdnA7CgoJZm9yIChk
dnAgPSBpc2FfZGV2dGFiX3R0eTsgZHZwLT5pZF9kcml2ZXIgIT0gTlVMTDsgZHZwKyspCgkJ
aWYgKGR2cC0+aWRfZHJpdmVyLT5zZW5zaXRpdmVfaHcgJiYgZHZwLT5pZF9lbmFibGVkKQoJ
CQlyZXR1cm4gKGR2cCk7CglyZXR1cm4gKE5VTEwpOwp9CgovKgogKiBmaW5kIGFuIElTQSBk
ZXZpY2UgaW4gYSBnaXZlbiBpc2FfZGV2dGFiXyogdGFibGUsIGdpdmVuCiAqIHRoZSB0YWJs
ZSB0byBzZWFyY2gsIHRoZSBleHBlY3RlZCBpZF9kcml2ZXIgZW50cnksIGFuZCB0aGUgdW5p
dCBudW1iZXIuCiAqCiAqIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiBpc2FfZGV2aWNl
LmgsIGFuZCB0aGlzIGxvY2F0aW9uIGlzIGRlYmF0YWJsZTsKICogaSBwdXQgaXQgdGhlcmUg
YmVjYXVzZSBpdCdzIHVzZWxlc3Mgdy9vLCBhbmQgZGlyZWN0bHkgb3BlcmF0ZXMgb24KICog
dGhlIG90aGVyIHN0dWZmIGluIHRoYXQgZmlsZS4KICoKICovCgpzdHJ1Y3QgaXNhX2Rldmlj
ZSAqZmluZF9pc2FkZXYodGFibGUsIGRyaXZlcnAsIHVuaXQpCglzdHJ1Y3QgaXNhX2Rldmlj
ZSAqdGFibGU7CglzdHJ1Y3QgaXNhX2RyaXZlciAqZHJpdmVycDsKCWludCB1bml0Owp7Cglp
ZiAoZHJpdmVycCA9PSBOVUxMKSAvKiBzYW5pdHkgY2hlY2sgKi8KCQlyZXR1cm4gKE5VTEwp
OwoKCXdoaWxlICgodGFibGUtPmlkX2RyaXZlciAhPSBkcml2ZXJwKSB8fCAodGFibGUtPmlk
X3VuaXQgIT0gdW5pdCkpIHsKCQlpZiAodGFibGUtPmlkX2RyaXZlciA9PSAwKQoJCQlyZXR1
cm4gTlVMTDsKCgkJdGFibGUrKzsKCX0KCglyZXR1cm4gKHRhYmxlKTsKfQoK

--==_Exmh_262108880--





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199708220123.SAA00408>