This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro


>Number:         9390
>Category:       c
>Synopsis:       Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jan 21 18:06:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     david@aspl.es
>Release:        3.2.2 20030119 (Debian prerelease)
>Organization:
>Environment:
LANG=es_ES@euro
LC_ALL=es_ES@euro
>Description:
I'm trying a Linux kernel in an Athlon CPU. 

I get a segmentation fault when I run "make bzImage" and the environment variables LANG or LC_ALL are set to "es_ES@euro":

gcc -D__KERNEL__ -I/usr/src/linux-2.4.20/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2  -march=athlon  -nostdinc -iwithprefix include -DKBUILD_BASENAME=module  -c -o module.o module.c
module.c: En la función `sys_get_kernel_syms':
module.c:1004: error interno: Violación de segmento
Por favor envíe un reporte completo de `bugs',
con el código preprocesado si es apropiado.
Vea <URL:http://www.gnu.org/software/gcc/bugs.html> para más instrucciones.

If I change -march to another architecture, everything goes well.

If I unset LC_ALL and LANG environment variables, it works perfectly too.

>How-To-Repeat:

>Fix:

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

I2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgojaW5jbHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUg
PGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8YXNtL21vZHVsZS5oPgojaW5jbHVkZSA8YXNtL3Vh
Y2Nlc3MuaD4KI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KI2luY2x1ZGUgPGxpbnV4L3NtcF9s
b2NrLmg+CiNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgoj
aW5jbHVkZSA8bGludXgvc2xhYi5oPgojaW5jbHVkZSA8bGludXgva21vZC5oPgojaW5jbHVkZSA8
bGludXgvc2VxX2ZpbGUuaD4KCi8qCiAqIE9yaWdpbmFsbHkgYnkgQW5vbnltb3VzIChhcyBmYXIg
YXMgSSBrbm93Li4uKQogKiBMaW51eCB2ZXJzaW9uIGJ5IEJhcyBMYWFyaG92ZW4gPGJhc0B2aW1l
Yy5ubD4KICogMC45OS4xNCB2ZXJzaW9uIGJ5IEpvbiBUb21icyA8am9uQGd0ZXgwMi51cy5lcz4s
CiAqIEhlYXZpbHkgbW9kaWZpZWQgYnkgQmpvcm4gRWt3YWxsIDxiajBybkBibG94LnNlPiBNYXkg
MTk5NCAoQykKICogUmV3cml0dGVuIGJ5IFJpY2hhcmQgSGVuZGVyc29uIDxydGhAdGFtdS5lZHU+
IERlYyAxOTk2CiAqIEFkZCBNT0RfSU5JVElBTElaSU5HIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5j
b20uYXU+IE5vdiAxOTk5CiAqIEFkZCBrYWxsc3ltcyBzdXBwb3J0LCBLZWl0aCBPd2VucyA8a2Fv
c0BvY3MuY29tLmF1PiBBcHIgMjAwMAogKiBBZGQgYXNtL21vZHVsZSBzdXBwb3J0LCBJQTY0IGhh
cyBzcGVjaWFsIHJlcXVpcmVtZW50cy4gIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IFNl
cCAyMDAwCiAqIEZpeCBhc3NvcnRlZCBidWdzIGluIG1vZHVsZSB2ZXJpZmljYXRpb24uICBLZWl0
aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiBTZXAgMjAwMAogKiBGaXggc3lzX2luaXRfbW9kdWxl
IHJhY2UsIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4gT2N0IDIwMDAKICogICAg
IGh0dHA6Ly93d3cudXdzZy5pdS5lZHUvaHlwZXJtYWlsL2xpbnV4L2tlcm5lbC8wMDA4LjMvMDM3
OS5odG1sCiAqIFJlcGxhY2UgeHh4X21vZHVsZV9zeW1ib2wgd2l0aCBpbnRlcl9tb2R1bGVfeHh4
LiAgS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4gT2N0IDIwMDAKICogQWRkIGEgbW9kdWxl
IGxpc3QgbG9jayBmb3Iga2VybmVsIGZhdWx0IHJhY2UgZml4aW5nLiBBbGFuIENveCA8YWxhbkBy
ZWRoYXQuY29tPgogKgogKiBUaGlzIHNvdXJjZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR1BMLCB0
aGUgc2FtZSBhcyBhbGwga2VybmVsIHNvdXJjZXMuCiAqLwoKI2lmIGRlZmluZWQoQ09ORklHX01P
RFVMRVMpIHx8IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQoKZXh0ZXJuIHN0cnVjdCBtb2R1bGVf
c3ltYm9sIF9fc3RhcnRfX19rc3ltdGFiW107CmV4dGVybiBzdHJ1Y3QgbW9kdWxlX3N5bWJvbCBf
X3N0b3BfX19rc3ltdGFiW107CgpleHRlcm4gY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9l
bnRyeSBfX3N0YXJ0X19fZXhfdGFibGVbXTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBleGNlcHRpb25f
dGFibGVfZW50cnkgX19zdG9wX19fZXhfdGFibGVbXTsKCmV4dGVybiBjb25zdCBjaGFyIF9fc3Rh
cnRfX19rYWxsc3ltc1tdIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7CmV4dGVybiBjb25zdCBjaGFy
IF9fc3RvcF9fX2thbGxzeW1zW10gX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKCnN0cnVjdCBtb2R1
bGUga2VybmVsX21vZHVsZSA9CnsKCXNpemVfb2Zfc3RydWN0OgkJc2l6ZW9mKHN0cnVjdCBtb2R1
bGUpLAoJbmFtZTogCQkJIiIsCgl1YzoJIAkJe0FUT01JQ19JTklUKDEpfSwKCWZsYWdzOgkJCU1P
RF9SVU5OSU5HLAoJc3ltczoJCQlfX3N0YXJ0X19fa3N5bXRhYiwKCWV4X3RhYmxlX3N0YXJ0OgkJ
X19zdGFydF9fX2V4X3RhYmxlLAoJZXhfdGFibGVfZW5kOgkJX19zdG9wX19fZXhfdGFibGUsCglr
YWxsc3ltc19zdGFydDoJCV9fc3RhcnRfX19rYWxsc3ltcywKCWthbGxzeW1zX2VuZDoJCV9fc3Rv
cF9fX2thbGxzeW1zLAp9OwoKc3RydWN0IG1vZHVsZSAqbW9kdWxlX2xpc3QgPSAma2VybmVsX21v
ZHVsZTsKCiNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSB8fCBkZWZpbmVkKENPTkZJ
R19LQUxMU1lNUykgKi8KCi8qIGludGVyX21vZHVsZSBmdW5jdGlvbnMgYXJlIGFsd2F5cyBhdmFp
bGFibGUsIGV2ZW4gd2hlbiB0aGUga2VybmVsIGlzCiAqIGNvbXBpbGVkIHdpdGhvdXQgbW9kdWxl
cy4gIENvbnN1bWVycyBvZiBpbnRlcl9tb2R1bGVfeHh4IHJvdXRpbmVzCiAqIHdpbGwgYWx3YXlz
IHdvcmssIGV2ZW4gd2hlbiBib3RoIGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHRoaXMKICog
YXBwcm9hY2ggcmVtb3ZlcyBsb3RzIG9mICNpZmRlZnMgaW4gbWFpbmxpbmUgY29kZS4KICovCgpz
dGF0aWMgc3RydWN0IGxpc3RfaGVhZCBpbWVfbGlzdCA9IExJU1RfSEVBRF9JTklUKGltZV9saXN0
KTsKc3RhdGljIHNwaW5sb2NrX3QgaW1lX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CnN0YXRp
YyBpbnQga21hbGxvY19mYWlsZWQ7CgovKgogKglUaGlzIGxvY2sgcHJldmVudHMgbW9kaWZpY2F0
aW9ucyB0aGF0IG1pZ2h0IHJhY2UgdGhlIGtlcm5lbCBmYXVsdAogKglmaXh1cHMuIEl0IGRvZXMg
bm90IHByZXZlbnQgcmVhZGVyIHdhbGtzIHRoYXQgdGhlIG1vZHVsZXMgY29kZQogKglkb2VzLiBU
aGUga2VybmVsIGxvY2sgZG9lcyB0aGF0LgogKgogKglTaW5jZSB2bWFsbG9jIGZhdWx0IGZpeHVw
cyBvY2N1ciBpbiBhbnkgY29udGV4dCB0aGlzIGxvY2sgaXMgdGFrZW4KICoJaXJxc2F2ZSBhdCBh
bGwgdGltZXMuCiAqLwogCnNwaW5sb2NrX3QgbW9kbGlzdF9sb2NrID0gU1BJTl9MT0NLX1VOTE9D
S0VEOwoKLyoqCiAqIGludGVyX21vZHVsZV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgbmV3IHNldCBv
ZiBpbnRlciBtb2R1bGUgZGF0YS4KICogQGltX25hbWU6IGFuIGFyYml0cmFyeSBzdHJpbmcgdG8g
aWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCiAqIEBvd25lcjogbW9kdWxlIHRoYXQg
aXMgcmVnaXN0ZXJpbmcgdGhlIGRhdGEsIGFsd2F5cyB1c2UgVEhJU19NT0RVTEUKICogQHVzZXJk
YXRhOiBwb2ludGVyIHRvIGFyYml0cmFyeSB1c2VyZGF0YSB0byBiZSByZWdpc3RlcmVkCiAqCiAq
IERlc2NyaXB0aW9uOiBDaGVjayB0aGF0IHRoZSBpbV9uYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVu
IHJlZ2lzdGVyZWQsCiAqIGNvbXBsYWluIGlmIGl0IGhhcy4gIEZvciBuZXcgZGF0YSwgYWRkIGl0
IHRvIHRoZSBpbnRlcl9tb2R1bGVfZW50cnkKICogbGlzdC4KICovCnZvaWQgaW50ZXJfbW9kdWxl
X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKmltX25hbWUsIHN0cnVjdCBtb2R1bGUgKm93bmVyLCBjb25z
dCB2b2lkICp1c2VyZGF0YSkKewoJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwoJc3RydWN0IGludGVy
X21vZHVsZV9lbnRyeSAqaW1lLCAqaW1lX25ldzsKCglpZiAoIShpbWVfbmV3ID0ga21hbGxvYyhz
aXplb2YoKmltZSksIEdGUF9LRVJORUwpKSkgewoJCS8qIE92ZXJsb2FkZWQga2VybmVsLCBub3Qg
ZmF0YWwgKi8KCQlwcmludGsoS0VSTl9FUlIKCQkJIkFpZWUsIGludGVyX21vZHVsZV9yZWdpc3Rl
cjogY2Fubm90IGttYWxsb2MgZW50cnkgZm9yICclcydcbiIsCgkJCWltX25hbWUpOwoJCWttYWxs
b2NfZmFpbGVkID0gMTsKCQlyZXR1cm47Cgl9CgltZW1zZXQoaW1lX25ldywgMCwgc2l6ZW9mKCpp
bWVfbmV3KSk7CglpbWVfbmV3LT5pbV9uYW1lID0gaW1fbmFtZTsKCWltZV9uZXctPm93bmVyID0g
b3duZXI7CglpbWVfbmV3LT51c2VyZGF0YSA9IHVzZXJkYXRhOwoKCXNwaW5fbG9jaygmaW1lX2xv
Y2spOwoJbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewoJCWltZSA9IGxpc3RfZW50cnko
dG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsKCQlpZiAoc3RyY21wKGltZS0+
aW1fbmFtZSwgaW1fbmFtZSkgPT0gMCkgewoJCQlzcGluX3VubG9jaygmaW1lX2xvY2spOwoJCQlr
ZnJlZShpbWVfbmV3KTsKCQkJLyogUHJvZ3JhbSBsb2dpYyBlcnJvciwgZmF0YWwgKi8KCQkJcHJp
bnRrKEtFUk5fRVJSICJpbnRlcl9tb2R1bGVfcmVnaXN0ZXI6IGR1cGxpY2F0ZSBpbV9uYW1lICcl
cyciLCBpbV9uYW1lKTsKCQkJQlVHKCk7CgkJfQoJfQoJbGlzdF9hZGQoJihpbWVfbmV3LT5saXN0
KSwgJmltZV9saXN0KTsKCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Cn0KCi8qKgogKiBpbnRlcl9t
b2R1bGVfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBzZXQgb2YgaW50ZXIgbW9kdWxlIGRhdGEu
CiAqIEBpbV9uYW1lOiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkYXRhLCBt
dXN0IGJlIHVuaXF1ZQogKgogKiBEZXNjcmlwdGlvbjogQ2hlY2sgdGhhdCB0aGUgaW1fbmFtZSBo
YXMgYmVlbiByZWdpc3RlcmVkLCBjb21wbGFpbiBpZgogKiBpdCBoYXMgbm90LiAgRm9yIGV4aXN0
aW5nIGRhdGEsIHJlbW92ZSBpdCBmcm9tIHRoZQogKiBpbnRlcl9tb2R1bGVfZW50cnkgbGlzdC4K
ICovCnZvaWQgaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqaW1fbmFtZSkKewoJ
c3RydWN0IGxpc3RfaGVhZCAqdG1wOwoJc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwoK
CXNwaW5fbG9jaygmaW1lX2xvY2spOwoJbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewoJ
CWltZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsK
CQlpZiAoc3RyY21wKGltZS0+aW1fbmFtZSwgaW1fbmFtZSkgPT0gMCkgewoJCQlsaXN0X2RlbCgm
KGltZS0+bGlzdCkpOwoJCQlzcGluX3VubG9jaygmaW1lX2xvY2spOwoJCQlrZnJlZShpbWUpOwoJ
CQlyZXR1cm47CgkJfQoJfQoJc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKCWlmIChrbWFsbG9jX2Zh
aWxlZCkgewoJCXByaW50ayhLRVJOX0VSUgoJCQkiaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXI6IG5v
IGVudHJ5IGZvciAnJXMnLCAiCgkJCSJwcm9iYWJseSBjYXVzZWQgYnkgcHJldmlvdXMga21hbGxv
YyBmYWlsdXJlXG4iLAoJCQlpbV9uYW1lKTsKCQlyZXR1cm47Cgl9CgllbHNlIHsKCQkvKiBQcm9n
cmFtIGxvZ2ljIGVycm9yLCBmYXRhbCAqLwoJCXByaW50ayhLRVJOX0VSUiAiaW50ZXJfbW9kdWxl
X3VucmVnaXN0ZXI6IG5vIGVudHJ5IGZvciAnJXMnIiwgaW1fbmFtZSk7CgkJQlVHKCk7Cgl9Cn0K
Ci8qKgogKiBpbnRlcl9tb2R1bGVfZ2V0IC0gcmV0dXJuIGFyYml0cmFyeSB1c2VyZGF0YSBmcm9t
IGFub3RoZXIgbW9kdWxlLgogKiBAaW1fbmFtZTogYW4gYXJiaXRyYXJ5IHN0cmluZyB0byBpZGVu
dGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKICoKICogRGVzY3JpcHRpb246IElmIHRoZSBp
bV9uYW1lIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCByZXR1cm4gTlVMTC4KICogVHJ5IHRvIGlu
Y3JlbWVudCB0aGUgdXNlIGNvdW50IG9uIHRoZSBvd25pbmcgbW9kdWxlLCBpZiB0aGF0IGZhaWxz
CiAqIHRoZW4gcmV0dXJuIE5VTEwuICBPdGhlcndpc2UgcmV0dXJuIHRoZSB1c2VyZGF0YS4KICov
CmNvbnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXQoY29uc3QgY2hhciAqaW1fbmFtZSkKewoJc3Ry
dWN0IGxpc3RfaGVhZCAqdG1wOwoJc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwoJY29u
c3Qgdm9pZCAqcmVzdWx0ID0gTlVMTDsKCglzcGluX2xvY2soJmltZV9sb2NrKTsKCWxpc3RfZm9y
X2VhY2godG1wLCAmaW1lX2xpc3QpIHsKCQlpbWUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGlu
dGVyX21vZHVsZV9lbnRyeSwgbGlzdCk7CgkJaWYgKHN0cmNtcChpbWUtPmltX25hbWUsIGltX25h
bWUpID09IDApIHsKCQkJaWYgKHRyeV9pbmNfbW9kX2NvdW50KGltZS0+b3duZXIpKQoJCQkJcmVz
dWx0ID0gaW1lLT51c2VyZGF0YTsKCQkJYnJlYWs7CgkJfQoJfQoJc3Bpbl91bmxvY2soJmltZV9s
b2NrKTsKCXJldHVybihyZXN1bHQpOwp9CgovKioKICogaW50ZXJfbW9kdWxlX2dldF9yZXF1ZXN0
IC0gaW0gZ2V0IHdpdGggYXV0b21hdGljIHJlcXVlc3RfbW9kdWxlLgogKiBAaW1fbmFtZTogYW4g
YXJiaXRyYXJ5IHN0cmluZyB0byBpZGVudGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKICog
QG1vZG5hbWU6IG1vZHVsZSB0aGF0IGlzIGV4cGVjdGVkIHRvIHJlZ2lzdGVyIGltX25hbWUKICoK
ICogRGVzY3JpcHRpb246IElmIGludGVyX21vZHVsZV9nZXQgZmFpbHMsIGRvIHJlcXVlc3RfbW9k
dWxlIHRoZW4gcmV0cnkuCiAqLwpjb25zdCB2b2lkICppbnRlcl9tb2R1bGVfZ2V0X3JlcXVlc3Qo
Y29uc3QgY2hhciAqaW1fbmFtZSwgY29uc3QgY2hhciAqbW9kbmFtZSkKewoJY29uc3Qgdm9pZCAq
cmVzdWx0ID0gaW50ZXJfbW9kdWxlX2dldChpbV9uYW1lKTsKCWlmICghcmVzdWx0KSB7CgkJcmVx
dWVzdF9tb2R1bGUobW9kbmFtZSk7CgkJcmVzdWx0ID0gaW50ZXJfbW9kdWxlX2dldChpbV9uYW1l
KTsKCX0KCXJldHVybihyZXN1bHQpOwp9CgovKioKICogaW50ZXJfbW9kdWxlX3B1dCAtIHJlbGVh
c2UgdXNlIG9mIGRhdGEgZnJvbSBhbm90aGVyIG1vZHVsZS4KICogQGltX25hbWU6IGFuIGFyYml0
cmFyeSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCiAqCiAqIERl
c2NyaXB0aW9uOiBJZiB0aGUgaW1fbmFtZSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCwgY29tcGxh
aW4sCiAqIG90aGVyd2lzZSBkZWNyZW1lbnQgdGhlIHVzZSBjb3VudCBvbiB0aGUgb3duaW5nIG1v
ZHVsZS4KICovCnZvaWQgaW50ZXJfbW9kdWxlX3B1dChjb25zdCBjaGFyICppbV9uYW1lKQp7Cglz
dHJ1Y3QgbGlzdF9oZWFkICp0bXA7CglzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5ICppbWU7CgoJ
c3Bpbl9sb2NrKCZpbWVfbG9jayk7CglsaXN0X2Zvcl9lYWNoKHRtcCwgJmltZV9saXN0KSB7CgkJ
aW1lID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBpbnRlcl9tb2R1bGVfZW50cnksIGxpc3QpOwoJ
CWlmIChzdHJjbXAoaW1lLT5pbV9uYW1lLCBpbV9uYW1lKSA9PSAwKSB7CgkJCWlmIChpbWUtPm93
bmVyKQoJCQkJX19NT0RfREVDX1VTRV9DT1VOVChpbWUtPm93bmVyKTsKCQkJc3Bpbl91bmxvY2so
JmltZV9sb2NrKTsKCQkJcmV0dXJuOwoJCX0KCX0KCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Cglw
cmludGsoS0VSTl9FUlIgImludGVyX21vZHVsZV9wdXQ6IG5vIGVudHJ5IGZvciAnJXMnIiwgaW1f
bmFtZSk7CglCVUcoKTsKfQoKCiNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKQkvKiBUaGUgcmVz
dCBvZiB0aGUgc291cmNlICovCgpzdGF0aWMgbG9uZyBnZXRfbW9kX25hbWUoY29uc3QgY2hhciAq
dXNlcl9uYW1lLCBjaGFyICoqYnVmKTsKc3RhdGljIHZvaWQgcHV0X21vZF9uYW1lKGNoYXIgKmJ1
Zik7CnN0cnVjdCBtb2R1bGUgKmZpbmRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpOwp2b2lkIGZy
ZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKiwgaW50IHRhZ19mcmVlZCk7CgoKLyoKICogQ2FsbGVk
IGF0IGJvb3QgdGltZQogKi8KCnZvaWQgX19pbml0IGluaXRfbW9kdWxlcyh2b2lkKQp7CglrZXJu
ZWxfbW9kdWxlLm5zeW1zID0gX19zdG9wX19fa3N5bXRhYiAtIF9fc3RhcnRfX19rc3ltdGFiOwoK
CWFyY2hfaW5pdF9tb2R1bGVzKCZrZXJuZWxfbW9kdWxlKTsKfQoKLyoKICogQ29weSB0aGUgbmFt
ZSBvZiBhIG1vZHVsZSBmcm9tIHVzZXIgc3BhY2UuCiAqLwoKc3RhdGljIGlubGluZSBsb25nCmdl
dF9tb2RfbmFtZShjb25zdCBjaGFyICp1c2VyX25hbWUsIGNoYXIgKipidWYpCnsKCXVuc2lnbmVk
IGxvbmcgcGFnZTsKCWxvbmcgcmV0dmFsOwoKCXBhZ2UgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tF
Uk5FTCk7CglpZiAoIXBhZ2UpCgkJcmV0dXJuIC1FTk9NRU07CgoJcmV0dmFsID0gc3RybmNweV9m
cm9tX3VzZXIoKGNoYXIgKilwYWdlLCB1c2VyX25hbWUsIFBBR0VfU0laRSk7CglpZiAocmV0dmFs
ID4gMCkgewoJCWlmIChyZXR2YWwgPCBQQUdFX1NJWkUpIHsKCQkJKmJ1ZiA9IChjaGFyICopcGFn
ZTsKCQkJcmV0dXJuIHJldHZhbDsKCQl9CgkJcmV0dmFsID0gLUVOQU1FVE9PTE9ORzsKCX0gZWxz
ZSBpZiAoIXJldHZhbCkKCQlyZXR2YWwgPSAtRUlOVkFMOwoKCWZyZWVfcGFnZShwYWdlKTsKCXJl
dHVybiByZXR2YWw7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApwdXRfbW9kX25hbWUoY2hhciAqYnVm
KQp7CglmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKfQoKLyoKICogQWxsb2NhdGUgc3Bh
Y2UgZm9yIGEgbW9kdWxlLgogKi8KCmFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwpzeXNfY3JlYXRl
X21vZHVsZShjb25zdCBjaGFyICpuYW1lX3VzZXIsIHNpemVfdCBzaXplKQp7CgljaGFyICpuYW1l
OwoJbG9uZyBuYW1lbGVuLCBlcnJvcjsKCXN0cnVjdCBtb2R1bGUgKm1vZDsKCXVuc2lnbmVkIGxv
bmcgZmxhZ3M7CgoJaWYgKCFjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKCQlyZXR1cm4gLUVQRVJN
OwoJbG9ja19rZXJuZWwoKTsKCWlmICgobmFtZWxlbiA9IGdldF9tb2RfbmFtZShuYW1lX3VzZXIs
ICZuYW1lKSkgPCAwKSB7CgkJZXJyb3IgPSBuYW1lbGVuOwoJCWdvdG8gZXJyMDsKCX0KCWlmIChz
aXplIDwgc2l6ZW9mKHN0cnVjdCBtb2R1bGUpK25hbWVsZW4pIHsKCQllcnJvciA9IC1FSU5WQUw7
CgkJZ290byBlcnIxOwoJfQoJaWYgKGZpbmRfbW9kdWxlKG5hbWUpICE9IE5VTEwpIHsKCQllcnJv
ciA9IC1FRVhJU1Q7CgkJZ290byBlcnIxOwoJfQoJaWYgKChtb2QgPSAoc3RydWN0IG1vZHVsZSAq
KW1vZHVsZV9tYXAoc2l6ZSkpID09IE5VTEwpIHsKCQllcnJvciA9IC1FTk9NRU07CgkJZ290byBl
cnIxOwoJfQoKCW1lbXNldChtb2QsIDAsIHNpemVvZigqbW9kKSk7Cgltb2QtPnNpemVfb2Zfc3Ry
dWN0ID0gc2l6ZW9mKCptb2QpOwoJbW9kLT5uYW1lID0gKGNoYXIgKikobW9kICsgMSk7Cgltb2Qt
PnNpemUgPSBzaXplOwoJbWVtY3B5KChjaGFyKikobW9kKzEpLCBuYW1lLCBuYW1lbGVuKzEpOwoK
CXB1dF9tb2RfbmFtZShuYW1lKTsKCglzcGluX2xvY2tfaXJxc2F2ZSgmbW9kbGlzdF9sb2NrLCBm
bGFncyk7Cgltb2QtPm5leHQgPSBtb2R1bGVfbGlzdDsKCW1vZHVsZV9saXN0ID0gbW9kOwkvKiBs
aW5rIGl0IGluICovCglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtb2RsaXN0X2xvY2ssIGZsYWdz
KTsKCgllcnJvciA9IChsb25nKSBtb2Q7Cglnb3RvIGVycjA7CmVycjE6CglwdXRfbW9kX25hbWUo
bmFtZSk7CmVycjA6Cgl1bmxvY2tfa2VybmVsKCk7CglyZXR1cm4gZXJyb3I7Cn0KCi8qCiAqIElu
aXRpYWxpemUgYSBtb2R1bGUuCiAqLwoKYXNtbGlua2FnZSBsb25nCnN5c19pbml0X21vZHVsZShj
b25zdCBjaGFyICpuYW1lX3VzZXIsIHN0cnVjdCBtb2R1bGUgKm1vZF91c2VyKQp7CglzdHJ1Y3Qg
bW9kdWxlIG1vZF90bXAsICptb2Q7CgljaGFyICpuYW1lLCAqbl9uYW1lLCAqbmFtZV90bXAgPSBO
VUxMOwoJbG9uZyBuYW1lbGVuLCBuX25hbWVsZW4sIGksIGVycm9yOwoJdW5zaWduZWQgbG9uZyBt
b2RfdXNlcl9zaXplOwoJc3RydWN0IG1vZHVsZV9yZWYgKmRlcDsKCglpZiAoIWNhcGFibGUoQ0FQ
X1NZU19NT0RVTEUpKQoJCXJldHVybiAtRVBFUk07Cglsb2NrX2tlcm5lbCgpOwoJaWYgKChuYW1l
bGVuID0gZ2V0X21vZF9uYW1lKG5hbWVfdXNlciwgJm5hbWUpKSA8IDApIHsKCQllcnJvciA9IG5h
bWVsZW47CgkJZ290byBlcnIwOwoJfQoJaWYgKChtb2QgPSBmaW5kX21vZHVsZShuYW1lKSkgPT0g
TlVMTCkgewoJCWVycm9yID0gLUVOT0VOVDsKCQlnb3RvIGVycjE7Cgl9CgoJLyogQ2hlY2sgbW9k
dWxlIGhlYWRlciBzaXplLiAgV2UgYWxsb3cgYSBiaXQgb2Ygc2xvcCBvdmVyIHRoZQoJICAgc2l6
ZSB3ZSBhcmUgZmFtaWxpYXIgd2l0aCB0byBjb3BlIHdpdGggYSB2ZXJzaW9uIG9mIGluc21vZAoJ
ICAgZm9yIGEgbmV3ZXIga2VybmVsLiAgQnV0IGRvbid0IG92ZXIgZG8gaXQuICovCglpZiAoKGVy
cm9yID0gZ2V0X3VzZXIobW9kX3VzZXJfc2l6ZSwgJm1vZF91c2VyLT5zaXplX29mX3N0cnVjdCkp
ICE9IDApCgkJZ290byBlcnIxOwoJaWYgKG1vZF91c2VyX3NpemUgPCAodW5zaWduZWQgbG9uZykm
KChzdHJ1Y3QgbW9kdWxlICopMEwpLT5wZXJzaXN0X3N0YXJ0CgkgICAgfHwgbW9kX3VzZXJfc2l6
ZSA+IHNpemVvZihzdHJ1Y3QgbW9kdWxlKSArIDE2KnNpemVvZih2b2lkKikpIHsKCQlwcmludGso
S0VSTl9FUlIgImluaXRfbW9kdWxlOiBJbnZhbGlkIG1vZHVsZSBoZWFkZXIgc2l6ZS5cbiIKCQkg
ICAgICAgS0VSTl9FUlIgIkEgbmV3IHZlcnNpb24gb2YgdGhlIG1vZHV0aWxzIGlzIGxpa2VseSAi
CgkJCQkibmVlZGVkLlxuIik7CgkJZXJyb3IgPSAtRUlOVkFMOwoJCWdvdG8gZXJyMTsKCX0KCgkv
KiBIb2xkIHRoZSBjdXJyZW50IGNvbnRlbnRzIHdoaWxlIHdlIHBsYXkgd2l0aCB0aGUgdXNlcidz
IGlkZWEKCSAgIG9mIHJpZ2h0ZW91c25lc3MuICAqLwoJbW9kX3RtcCA9ICptb2Q7CgluYW1lX3Rt
cCA9IGttYWxsb2Moc3RybGVuKG1vZC0+bmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsJLyogV2hlcmUn
cyBrc3RyZHVwKCk/ICovCglpZiAobmFtZV90bXAgPT0gTlVMTCkgewoJCWVycm9yID0gLUVOT01F
TTsKCQlnb3RvIGVycjE7Cgl9CglzdHJjcHkobmFtZV90bXAsIG1vZC0+bmFtZSk7CgoJZXJyb3Ig
PSBjb3B5X2Zyb21fdXNlcihtb2QsIG1vZF91c2VyLCBtb2RfdXNlcl9zaXplKTsKCWlmIChlcnJv
cikgewoJCWVycm9yID0gLUVGQVVMVDsKCQlnb3RvIGVycjI7Cgl9CgoJLyogU2FuaXR5IGNoZWNr
IHRoZSBzaXplIG9mIHRoZSBtb2R1bGUuICAqLwoJZXJyb3IgPSAtRUlOVkFMOwoKCWlmIChtb2Qt
PnNpemUgPiBtb2RfdG1wLnNpemUpIHsKCQlwcmludGsoS0VSTl9FUlIgImluaXRfbW9kdWxlOiBT
aXplIG9mIGluaXRpYWxpemVkIG1vZHVsZSAiCgkJCQkiZXhjZWVkcyBzaXplIG9mIGNyZWF0ZWQg
bW9kdWxlLlxuIik7CgkJZ290byBlcnIyOwoJfQoKCS8qIE1ha2Ugc3VyZSBhbGwgaW50ZXJlc3Rp
bmcgcG9pbnRlcnMgYXJlIHNhbmUuICAqLwoKCWlmICghbW9kX2JvdW5kKG1vZC0+bmFtZSwgbmFt
ZWxlbiwgbW9kKSkgewoJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+bmFtZSBv
dXQgb2YgYm91bmRzLlxuIik7CgkJZ290byBlcnIyOwoJfQoJaWYgKG1vZC0+bnN5bXMgJiYgIW1v
ZF9ib3VuZChtb2QtPnN5bXMsIG1vZC0+bnN5bXMsIG1vZCkpIHsKCQlwcmludGsoS0VSTl9FUlIg
ImluaXRfbW9kdWxlOiBtb2QtPnN5bXMgb3V0IG9mIGJvdW5kcy5cbiIpOwoJCWdvdG8gZXJyMjsK
CX0KCWlmIChtb2QtPm5kZXBzICYmICFtb2RfYm91bmQobW9kLT5kZXBzLCBtb2QtPm5kZXBzLCBt
b2QpKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogbW9kLT5kZXBzIG91dCBvZiBi
b3VuZHMuXG4iKTsKCQlnb3RvIGVycjI7Cgl9CglpZiAobW9kLT5pbml0ICYmICFtb2RfYm91bmQo
bW9kLT5pbml0LCAwLCBtb2QpKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogbW9k
LT5pbml0IG91dCBvZiBib3VuZHMuXG4iKTsKCQlnb3RvIGVycjI7Cgl9CglpZiAobW9kLT5jbGVh
bnVwICYmICFtb2RfYm91bmQobW9kLT5jbGVhbnVwLCAwLCBtb2QpKSB7CgkJcHJpbnRrKEtFUk5f
RVJSICJpbml0X21vZHVsZTogbW9kLT5jbGVhbnVwIG91dCBvZiBib3VuZHMuXG4iKTsKCQlnb3Rv
IGVycjI7Cgl9CglpZiAobW9kLT5leF90YWJsZV9zdGFydCA+IG1vZC0+ZXhfdGFibGVfZW5kCgkg
ICAgfHwgKG1vZC0+ZXhfdGFibGVfc3RhcnQgJiYKCQkhKCh1bnNpZ25lZCBsb25nKW1vZC0+ZXhf
dGFibGVfc3RhcnQgPj0gKCh1bnNpZ25lZCBsb25nKW1vZCArIG1vZC0+c2l6ZV9vZl9zdHJ1Y3Qp
CgkJICAmJiAoKHVuc2lnbmVkIGxvbmcpbW9kLT5leF90YWJsZV9lbmQKCQkgICAgICA8ICh1bnNp
Z25lZCBsb25nKW1vZCArIG1vZC0+c2l6ZSkpKQoJICAgIHx8ICgoKHVuc2lnbmVkIGxvbmcpbW9k
LT5leF90YWJsZV9zdGFydAoJCSAtICh1bnNpZ25lZCBsb25nKW1vZC0+ZXhfdGFibGVfZW5kKQoJ
CSUgc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpKSkgewoJCXByaW50ayhLRVJO
X0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+ZXhfdGFibGVfKiBpbnZhbGlkLlxuIik7CgkJZ290byBl
cnIyOwoJfQoJaWYgKG1vZC0+ZmxhZ3MgJiB+TU9EX0FVVE9DTEVBTikgewoJCXByaW50ayhLRVJO
X0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+ZmxhZ3MgaW52YWxpZC5cbiIpOwoJCWdvdG8gZXJyMjsK
CX0KCWlmIChtb2RfbWVtYmVyX3ByZXNlbnQobW9kLCBjYW5fdW5sb2FkKQoJICAgICYmIG1vZC0+
Y2FuX3VubG9hZCAmJiAhbW9kX2JvdW5kKG1vZC0+Y2FuX3VubG9hZCwgMCwgbW9kKSkgewoJCXBy
aW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+Y2FuX3VubG9hZCBvdXQgb2YgYm91bmRz
LlxuIik7CgkJZ290byBlcnIyOwoJfQoJaWYgKG1vZF9tZW1iZXJfcHJlc2VudChtb2QsIGthbGxz
eW1zX2VuZCkpIHsKCSAgICBpZiAobW9kLT5rYWxsc3ltc19lbmQgJiYKCQkoIW1vZF9ib3VuZCht
b2QtPmthbGxzeW1zX3N0YXJ0LCAwLCBtb2QpIHx8CgkJICFtb2RfYm91bmQobW9kLT5rYWxsc3lt
c19lbmQsIDAsIG1vZCkpKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogbW9kLT5r
YWxsc3ltcyBvdXQgb2YgYm91bmRzLlxuIik7CgkJZ290byBlcnIyOwoJICAgIH0KCSAgICBpZiAo
bW9kLT5rYWxsc3ltc19zdGFydCA+IG1vZC0+a2FsbHN5bXNfZW5kKSB7CgkJcHJpbnRrKEtFUk5f
RVJSICJpbml0X21vZHVsZTogbW9kLT5rYWxsc3ltcyBpbnZhbGlkLlxuIik7CgkJZ290byBlcnIy
OwoJICAgIH0KCX0KCWlmIChtb2RfbWVtYmVyX3ByZXNlbnQobW9kLCBhcmNoZGF0YV9lbmQpKSB7
CgkgICAgaWYgKG1vZC0+YXJjaGRhdGFfZW5kICYmCgkJKCFtb2RfYm91bmQobW9kLT5hcmNoZGF0
YV9zdGFydCwgMCwgbW9kKSB8fAoJCSAhbW9kX2JvdW5kKG1vZC0+YXJjaGRhdGFfZW5kLCAwLCBt
b2QpKSkgewoJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+YXJjaGRhdGEgb3V0
IG9mIGJvdW5kcy5cbiIpOwoJCWdvdG8gZXJyMjsKCSAgICB9CgkgICAgaWYgKG1vZC0+YXJjaGRh
dGFfc3RhcnQgPiBtb2QtPmFyY2hkYXRhX2VuZCkgewoJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9t
b2R1bGU6IG1vZC0+YXJjaGRhdGEgaW52YWxpZC5cbiIpOwoJCWdvdG8gZXJyMjsKCSAgICB9Cgl9
CglpZiAobW9kX21lbWJlcl9wcmVzZW50KG1vZCwga2VybmVsX2RhdGEpICYmIG1vZC0+a2VybmVs
X2RhdGEpIHsKCSAgICBwcmludGsoS0VSTl9FUlIgImluaXRfbW9kdWxlOiBtb2QtPmtlcm5lbF9k
YXRhIG11c3QgYmUgemVyby5cbiIpOwoJICAgIGdvdG8gZXJyMjsKCX0KCgkvKiBDaGVjayB0aGF0
IHRoZSB1c2VyIGlzbid0IGRvaW5nIHNvbWV0aGluZyBzaWxseSB3aXRoIHRoZSBuYW1lLiAgKi8K
CglpZiAoKG5fbmFtZWxlbiA9IGdldF9tb2RfbmFtZShtb2QtPm5hbWUgLSAodW5zaWduZWQgbG9u
Zyltb2QKCQkJCSAgICAgICsgKHVuc2lnbmVkIGxvbmcpbW9kX3VzZXIsCgkJCQkgICAgICAmbl9u
YW1lKSkgPCAwKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogZ2V0X21vZF9uYW1l
IGZhaWx1cmUuXG4iKTsKCQllcnJvciA9IG5fbmFtZWxlbjsKCQlnb3RvIGVycjI7Cgl9CglpZiAo
bmFtZWxlbiAhPSBuX25hbWVsZW4gfHwgc3RyY21wKG5fbmFtZSwgbW9kX3RtcC5uYW1lKSAhPSAw
KSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogY2hhbmdlZCBtb2R1bGUgbmFtZSB0
byAiCgkJCQkiYCVzJyBmcm9tIGAlcydcbiIsCgkJICAgICAgIG5fbmFtZSwgbW9kX3RtcC5uYW1l
KTsKCQlnb3RvIGVycjM7Cgl9CgoJLyogT2ssIHRoYXQncyBhYm91dCBhbGwgdGhlIHNhbml0eSB3
ZSBjYW4gc3RvbWFjaDsgY29weSB0aGUgcmVzdC4gICovCgoJaWYgKGNvcHlfZnJvbV91c2VyKChj
aGFyICopbW9kK21vZF91c2VyX3NpemUsCgkJCSAgIChjaGFyICopbW9kX3VzZXIrbW9kX3VzZXJf
c2l6ZSwKCQkJICAgbW9kLT5zaXplLW1vZF91c2VyX3NpemUpKSB7CgkJZXJyb3IgPSAtRUZBVUxU
OwoJCWdvdG8gZXJyMzsKCX0KCglpZiAobW9kdWxlX2FyY2hfaW5pdChtb2QpKQoJCWdvdG8gZXJy
MzsKCgkvKiBPbiBzb21lIG1hY2hpbmVzIGl0IGlzIG5lY2Vzc2FyeSB0byBkbyBzb21ldGhpbmcg
aGVyZQoJICAgdG8gbWFrZSB0aGUgSSBhbmQgRCBjYWNoZXMgY29uc2lzdGVudC4gICovCglmbHVz
aF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpbW9kLCAodW5zaWduZWQgbG9uZyltb2QgKyBt
b2QtPnNpemUpOwoKCW1vZC0+bmV4dCA9IG1vZF90bXAubmV4dDsKCW1vZC0+cmVmcyA9IE5VTEw7
CgoJLyogU2FuaXR5IGNoZWNrIHRoZSBtb2R1bGUncyBkZXBlbmRlbnRzICovCglmb3IgKGkgPSAw
LCBkZXAgPSBtb2QtPmRlcHM7IGkgPCBtb2QtPm5kZXBzOyArK2ksICsrZGVwKSB7CgkJc3RydWN0
IG1vZHVsZSAqbywgKmQgPSBkZXAtPmRlcDsKCgkJLyogTWFrZSBzdXJlIHRoZSBpbmRpY2F0ZWQg
ZGVwZW5kZW5jaWVzIGFyZSByZWFsbHkgbW9kdWxlcy4gICovCgkJaWYgKGQgPT0gbW9kKSB7CgkJ
CXByaW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IHNlbGYtcmVmZXJlbnRpYWwgIgoJCQkJCSJk
ZXBlbmRlbmN5IGluIG1vZC0+ZGVwcy5cbiIpOwoJCQlnb3RvIGVycjM7CgkJfQoKCQkvKiBTY2Fu
IHRoZSBjdXJyZW50IG1vZHVsZXMgZm9yIHRoaXMgZGVwZW5kZW5jeSAqLwoJCWZvciAobyA9IG1v
ZHVsZV9saXN0OyBvICE9ICZrZXJuZWxfbW9kdWxlICYmIG8gIT0gZDsgbyA9IG8tPm5leHQpCgkJ
CTsKCgkJaWYgKG8gIT0gZCkgewoJCQlwcmludGsoS0VSTl9FUlIgImluaXRfbW9kdWxlOiBmb3Vu
ZCBkZXBlbmRlbmN5IHRoYXQgaXMgIgoJCQkJIihubyBsb25nZXI/KSBhIG1vZHVsZS5cbiIpOwoJ
CQlnb3RvIGVycjM7CgkJfQoJfQoKCS8qIFVwZGF0ZSBtb2R1bGUgcmVmZXJlbmNlcy4gICovCglm
b3IgKGkgPSAwLCBkZXAgPSBtb2QtPmRlcHM7IGkgPCBtb2QtPm5kZXBzOyArK2ksICsrZGVwKSB7
CgkJc3RydWN0IG1vZHVsZSAqZCA9IGRlcC0+ZGVwOwoKCQlkZXAtPnJlZiA9IG1vZDsKCQlkZXAt
Pm5leHRfcmVmID0gZC0+cmVmczsKCQlkLT5yZWZzID0gZGVwOwoJCS8qIEJlaW5nIHJlZmVyZW5j
ZWQgYnkgYSBkZXBlbmRlbnQgbW9kdWxlIGNvdW50cyBhcyBhCgkJICAgdXNlIGFzIGZhciBhcyBr
bW9kIGlzIGNvbmNlcm5lZC4gICovCgkJZC0+ZmxhZ3MgfD0gTU9EX1VTRURfT05DRTsKCX0KCgkv
KiBGcmVlIG91ciB0ZW1wb3JhcnkgbWVtb3J5LiAgKi8KCXB1dF9tb2RfbmFtZShuX25hbWUpOwoJ
cHV0X21vZF9uYW1lKG5hbWUpOwoKCS8qIEluaXRpYWxpemUgdGhlIG1vZHVsZS4gICovCglhdG9t
aWNfc2V0KCZtb2QtPnVjLnVzZWNvdW50LDEpOwoJbW9kLT5mbGFncyB8PSBNT0RfSU5JVElBTEla
SU5HOwoJaWYgKG1vZC0+aW5pdCAmJiAoZXJyb3IgPSBtb2QtPmluaXQoKSkgIT0gMCkgewoJCWF0
b21pY19zZXQoJm1vZC0+dWMudXNlY291bnQsMCk7CgkJbW9kLT5mbGFncyAmPSB+TU9EX0lOSVRJ
QUxJWklORzsKCQlpZiAoZXJyb3IgPiAwKQkvKiBCdWdneSBtb2R1bGUgKi8KCQkJZXJyb3IgPSAt
RUJVU1k7CgkJZ290byBlcnIwOwoJfQoJYXRvbWljX2RlYygmbW9kLT51Yy51c2Vjb3VudCk7CgoJ
LyogQW5kIHNldCBpdCBydW5uaW5nLiAgKi8KCW1vZC0+ZmxhZ3MgPSAobW9kLT5mbGFncyB8IE1P
RF9SVU5OSU5HKSAmIH5NT0RfSU5JVElBTElaSU5HOwoJZXJyb3IgPSAwOwoJZ290byBlcnIwOwoK
ZXJyMzoKCXB1dF9tb2RfbmFtZShuX25hbWUpOwplcnIyOgoJKm1vZCA9IG1vZF90bXA7CglzdHJj
cHkoKGNoYXIgKiltb2QtPm5hbWUsIG5hbWVfdG1wKTsJLyogV2Uga25vdyB0aGVyZSBpcyByb29t
IGZvciB0aGlzICovCmVycjE6CglwdXRfbW9kX25hbWUobmFtZSk7CmVycjA6Cgl1bmxvY2tfa2Vy
bmVsKCk7CglrZnJlZShuYW1lX3RtcCk7CglyZXR1cm4gZXJyb3I7Cn0KCnN0YXRpYyBzcGlubG9j
a190IHVubG9hZF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwppbnQgdHJ5X2luY19tb2RfY291
bnQoc3RydWN0IG1vZHVsZSAqbW9kKQp7CglpbnQgcmVzID0gMTsKCWlmIChtb2QpIHsKCQlzcGlu
X2xvY2soJnVubG9hZF9sb2NrKTsKCQlpZiAobW9kLT5mbGFncyAmIE1PRF9ERUxFVEVEKQoJCQly
ZXMgPSAwOwoJCWVsc2UKCQkJX19NT0RfSU5DX1VTRV9DT1VOVChtb2QpOwoJCXNwaW5fdW5sb2Nr
KCZ1bmxvYWRfbG9jayk7Cgl9CglyZXR1cm4gcmVzOwp9Cgphc21saW5rYWdlIGxvbmcKc3lzX2Rl
bGV0ZV9tb2R1bGUoY29uc3QgY2hhciAqbmFtZV91c2VyKQp7CglzdHJ1Y3QgbW9kdWxlICptb2Qs
ICpuZXh0OwoJY2hhciAqbmFtZTsKCWxvbmcgZXJyb3I7CglpbnQgc29tZXRoaW5nX2NoYW5nZWQ7
CgoJaWYgKCFjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKCQlyZXR1cm4gLUVQRVJNOwoKCWxvY2tf
a2VybmVsKCk7CglpZiAobmFtZV91c2VyKSB7CgkJaWYgKChlcnJvciA9IGdldF9tb2RfbmFtZShu
YW1lX3VzZXIsICZuYW1lKSkgPCAwKQoJCQlnb3RvIG91dDsKCQllcnJvciA9IC1FTk9FTlQ7CgkJ
aWYgKChtb2QgPSBmaW5kX21vZHVsZShuYW1lKSkgPT0gTlVMTCkgewoJCQlwdXRfbW9kX25hbWUo
bmFtZSk7CgkJCWdvdG8gb3V0OwoJCX0KCQlwdXRfbW9kX25hbWUobmFtZSk7CgkJZXJyb3IgPSAt
RUJVU1k7CgkJaWYgKG1vZC0+cmVmcyAhPSBOVUxMKQoJCQlnb3RvIG91dDsKCgkJc3Bpbl9sb2Nr
KCZ1bmxvYWRfbG9jayk7CgkJaWYgKCFfX01PRF9JTl9VU0UobW9kKSkgewoJCQltb2QtPmZsYWdz
IHw9IE1PRF9ERUxFVEVEOwoJCQlzcGluX3VubG9jaygmdW5sb2FkX2xvY2spOwoJCQlmcmVlX21v
ZHVsZShtb2QsIDApOwoJCQllcnJvciA9IDA7CgkJfSBlbHNlIHsKCQkJc3Bpbl91bmxvY2soJnVu
bG9hZF9sb2NrKTsKCQl9CgkJZ290byBvdXQ7Cgl9CgoJLyogRG8gYXV0b21hdGljIHJlYXBpbmcg
Ki8KcmVzdGFydDoKCXNvbWV0aGluZ19jaGFuZ2VkID0gMDsKCQoJZm9yIChtb2QgPSBtb2R1bGVf
bGlzdDsgbW9kICE9ICZrZXJuZWxfbW9kdWxlOyBtb2QgPSBuZXh0KSB7CgkJbmV4dCA9IG1vZC0+
bmV4dDsKCQlzcGluX2xvY2soJnVubG9hZF9sb2NrKTsKCQlpZiAobW9kLT5yZWZzID09IE5VTEwK
CQkgICAgJiYgKG1vZC0+ZmxhZ3MgJiBNT0RfQVVUT0NMRUFOKQoJCSAgICAmJiAobW9kLT5mbGFn
cyAmIE1PRF9SVU5OSU5HKQoJCSAgICAmJiAhKG1vZC0+ZmxhZ3MgJiBNT0RfREVMRVRFRCkKCQkg
ICAgJiYgKG1vZC0+ZmxhZ3MgJiBNT0RfVVNFRF9PTkNFKQoJCSAgICAmJiAhX19NT0RfSU5fVVNF
KG1vZCkpIHsKCQkJaWYgKChtb2QtPmZsYWdzICYgTU9EX1ZJU0lURUQpCgkJCSAgICAmJiAhKG1v
ZC0+ZmxhZ3MgJiBNT0RfSlVTVF9GUkVFRCkpIHsKCQkJCXNwaW5fdW5sb2NrKCZ1bmxvYWRfbG9j
ayk7CgkJCQltb2QtPmZsYWdzICY9IH5NT0RfVklTSVRFRDsKCQkJfSBlbHNlIHsKCQkJCW1vZC0+
ZmxhZ3MgfD0gTU9EX0RFTEVURUQ7CgkJCQlzcGluX3VubG9jaygmdW5sb2FkX2xvY2spOwoJCQkJ
ZnJlZV9tb2R1bGUobW9kLCAxKTsKCQkJCXNvbWV0aGluZ19jaGFuZ2VkID0gMTsKCQkJfQoJCX0g
ZWxzZSB7CgkJCXNwaW5fdW5sb2NrKCZ1bmxvYWRfbG9jayk7CgkJfQoJfQoJCglpZiAoc29tZXRo
aW5nX2NoYW5nZWQpCgkJZ290byByZXN0YXJ0OwoJCQoJZm9yIChtb2QgPSBtb2R1bGVfbGlzdDsg
bW9kICE9ICZrZXJuZWxfbW9kdWxlOyBtb2QgPSBtb2QtPm5leHQpCgkJbW9kLT5mbGFncyAmPSB+
TU9EX0pVU1RfRlJFRUQ7CgkKCWVycm9yID0gMDsKb3V0OgoJdW5sb2NrX2tlcm5lbCgpOwoJcmV0
dXJuIGVycm9yOwp9CgovKiBRdWVyeSB2YXJpb3VzIGJpdHMgYWJvdXQgbW9kdWxlcy4gICovCgpz
dGF0aWMgaW50CnFtX21vZHVsZXMoY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpy
ZXQpCnsKCXN0cnVjdCBtb2R1bGUgKm1vZDsKCXNpemVfdCBubW9kLCBzcGFjZSwgbGVuOwoKCW5t
b2QgPSBzcGFjZSA9IDA7CgoJZm9yIChtb2Q9bW9kdWxlX2xpc3Q7IG1vZCAhPSAma2VybmVsX21v
ZHVsZTsgbW9kPW1vZC0+bmV4dCwgKytubW9kKSB7CgkJbGVuID0gc3RybGVuKG1vZC0+bmFtZSkr
MTsKCQlpZiAobGVuID4gYnVmc2l6ZSkKCQkJZ290byBjYWxjX3NwYWNlX25lZWRlZDsKCQlpZiAo
Y29weV90b191c2VyKGJ1ZiwgbW9kLT5uYW1lLCBsZW4pKQoJCQlyZXR1cm4gLUVGQVVMVDsKCQli
dWYgKz0gbGVuOwoJCWJ1ZnNpemUgLT0gbGVuOwoJCXNwYWNlICs9IGxlbjsKCX0KCglpZiAocHV0
X3VzZXIobm1vZCwgcmV0KSkKCQlyZXR1cm4gLUVGQVVMVDsKCWVsc2UKCQlyZXR1cm4gMDsKCmNh
bGNfc3BhY2VfbmVlZGVkOgoJc3BhY2UgKz0gbGVuOwoJd2hpbGUgKChtb2QgPSBtb2QtPm5leHQp
ICE9ICZrZXJuZWxfbW9kdWxlKQoJCXNwYWNlICs9IHN0cmxlbihtb2QtPm5hbWUpKzE7CgoJaWYg
KHB1dF91c2VyKHNwYWNlLCByZXQpKQoJCXJldHVybiAtRUZBVUxUOwoJZWxzZQoJCXJldHVybiAt
RU5PU1BDOwp9CgpzdGF0aWMgaW50CnFtX2RlcHMoc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpi
dWYsIHNpemVfdCBidWZzaXplLCBzaXplX3QgKnJldCkKewoJc2l6ZV90IGksIHNwYWNlLCBsZW47
CgoJaWYgKG1vZCA9PSAma2VybmVsX21vZHVsZSkKCQlyZXR1cm4gLUVJTlZBTDsKCWlmICghTU9E
X0NBTl9RVUVSWShtb2QpKQoJCWlmIChwdXRfdXNlcigwLCByZXQpKQoJCQlyZXR1cm4gLUVGQVVM
VDsKCQllbHNlCgkJCXJldHVybiAwOwoKCXNwYWNlID0gMDsKCWZvciAoaSA9IDA7IGkgPCBtb2Qt
Pm5kZXBzOyArK2kpIHsKCQljb25zdCBjaGFyICpkZXBfbmFtZSA9IG1vZC0+ZGVwc1tpXS5kZXAt
Pm5hbWU7CgoJCWxlbiA9IHN0cmxlbihkZXBfbmFtZSkrMTsKCQlpZiAobGVuID4gYnVmc2l6ZSkK
CQkJZ290byBjYWxjX3NwYWNlX25lZWRlZDsKCQlpZiAoY29weV90b191c2VyKGJ1ZiwgZGVwX25h
bWUsIGxlbikpCgkJCXJldHVybiAtRUZBVUxUOwoJCWJ1ZiArPSBsZW47CgkJYnVmc2l6ZSAtPSBs
ZW47CgkJc3BhY2UgKz0gbGVuOwoJfQoKCWlmIChwdXRfdXNlcihpLCByZXQpKQoJCXJldHVybiAt
RUZBVUxUOwoJZWxzZQoJCXJldHVybiAwOwoKY2FsY19zcGFjZV9uZWVkZWQ6CglzcGFjZSArPSBs
ZW47Cgl3aGlsZSAoKytpIDwgbW9kLT5uZGVwcykKCQlzcGFjZSArPSBzdHJsZW4obW9kLT5kZXBz
W2ldLmRlcC0+bmFtZSkrMTsKCglpZiAocHV0X3VzZXIoc3BhY2UsIHJldCkpCgkJcmV0dXJuIC1F
RkFVTFQ7CgllbHNlCgkJcmV0dXJuIC1FTk9TUEM7Cn0KCnN0YXRpYyBpbnQKcW1fcmVmcyhzdHJ1
Y3QgbW9kdWxlICptb2QsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIHNpemVfdCAqcmV0KQp7
CglzaXplX3QgbnJlZnMsIHNwYWNlLCBsZW47CglzdHJ1Y3QgbW9kdWxlX3JlZiAqcmVmOwoKCWlm
IChtb2QgPT0gJmtlcm5lbF9tb2R1bGUpCgkJcmV0dXJuIC1FSU5WQUw7CglpZiAoIU1PRF9DQU5f
UVVFUlkobW9kKSkKCQlpZiAocHV0X3VzZXIoMCwgcmV0KSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJ
ZWxzZQoJCQlyZXR1cm4gMDsKCglzcGFjZSA9IDA7Cglmb3IgKG5yZWZzID0gMCwgcmVmID0gbW9k
LT5yZWZzOyByZWYgOyArK25yZWZzLCByZWYgPSByZWYtPm5leHRfcmVmKSB7CgkJY29uc3QgY2hh
ciAqcmVmX25hbWUgPSByZWYtPnJlZi0+bmFtZTsKCgkJbGVuID0gc3RybGVuKHJlZl9uYW1lKSsx
OwoJCWlmIChsZW4gPiBidWZzaXplKQoJCQlnb3RvIGNhbGNfc3BhY2VfbmVlZGVkOwoJCWlmIChj
b3B5X3RvX3VzZXIoYnVmLCByZWZfbmFtZSwgbGVuKSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJYnVm
ICs9IGxlbjsKCQlidWZzaXplIC09IGxlbjsKCQlzcGFjZSArPSBsZW47Cgl9CgoJaWYgKHB1dF91
c2VyKG5yZWZzLCByZXQpKQoJCXJldHVybiAtRUZBVUxUOwoJZWxzZQoJCXJldHVybiAwOwoKY2Fs
Y19zcGFjZV9uZWVkZWQ6CglzcGFjZSArPSBsZW47Cgl3aGlsZSAoKHJlZiA9IHJlZi0+bmV4dF9y
ZWYpICE9IE5VTEwpCgkJc3BhY2UgKz0gc3RybGVuKHJlZi0+cmVmLT5uYW1lKSsxOwoKCWlmIChw
dXRfdXNlcihzcGFjZSwgcmV0KSkKCQlyZXR1cm4gLUVGQVVMVDsKCWVsc2UKCQlyZXR1cm4gLUVO
T1NQQzsKfQoKc3RhdGljIGludApxbV9zeW1ib2xzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAq
YnVmLCBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpyZXQpCnsKCXNpemVfdCBpLCBzcGFjZSwgbGVu
OwoJc3RydWN0IG1vZHVsZV9zeW1ib2wgKnM7CgljaGFyICpzdHJpbmdzOwoJdW5zaWduZWQgbG9u
ZyAqdmFsczsKCglpZiAoIU1PRF9DQU5fUVVFUlkobW9kKSkKCQlpZiAocHV0X3VzZXIoMCwgcmV0
KSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJZWxzZQoJCQlyZXR1cm4gMDsKCglzcGFjZSA9IG1vZC0+
bnN5bXMgKiAyKnNpemVvZih2b2lkICopOwoKCWkgPSBsZW4gPSAwOwoJcyA9IG1vZC0+c3ltczsK
CglpZiAoc3BhY2UgPiBidWZzaXplKQoJCWdvdG8gY2FsY19zcGFjZV9uZWVkZWQ7CgoJaWYgKCFh
Y2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIHNwYWNlKSkKCQlyZXR1cm4gLUVGQVVMVDsKCgli
dWZzaXplIC09IHNwYWNlOwoJdmFscyA9ICh1bnNpZ25lZCBsb25nICopYnVmOwoJc3RyaW5ncyA9
IGJ1ZitzcGFjZTsKCglmb3IgKDsgaSA8IG1vZC0+bnN5bXMgOyArK2ksICsrcywgdmFscyArPSAy
KSB7CgkJbGVuID0gc3RybGVuKHMtPm5hbWUpKzE7CgkJaWYgKGxlbiA+IGJ1ZnNpemUpCgkJCWdv
dG8gY2FsY19zcGFjZV9uZWVkZWQ7CgoJCWlmIChjb3B5X3RvX3VzZXIoc3RyaW5ncywgcy0+bmFt
ZSwgbGVuKQoJCSAgICB8fCBfX3B1dF91c2VyKHMtPnZhbHVlLCB2YWxzKzApCgkJICAgIHx8IF9f
cHV0X3VzZXIoc3BhY2UsIHZhbHMrMSkpCgkJCXJldHVybiAtRUZBVUxUOwoKCQlzdHJpbmdzICs9
IGxlbjsKCQlidWZzaXplIC09IGxlbjsKCQlzcGFjZSArPSBsZW47Cgl9CglpZiAocHV0X3VzZXIo
aSwgcmV0KSkKCQlyZXR1cm4gLUVGQVVMVDsKCWVsc2UKCQlyZXR1cm4gMDsKCmNhbGNfc3BhY2Vf
bmVlZGVkOgoJZm9yICg7IGkgPCBtb2QtPm5zeW1zOyArK2ksICsrcykKCQlzcGFjZSArPSBzdHJs
ZW4ocy0+bmFtZSkrMTsKCglpZiAocHV0X3VzZXIoc3BhY2UsIHJldCkpCgkJcmV0dXJuIC1FRkFV
TFQ7CgllbHNlCgkJcmV0dXJuIC1FTk9TUEM7Cn0KCnN0YXRpYyBpbnQKcW1faW5mbyhzdHJ1Y3Qg
bW9kdWxlICptb2QsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIHNpemVfdCAqcmV0KQp7Cglp
bnQgZXJyb3IgPSAwOwoKCWlmIChtb2QgPT0gJmtlcm5lbF9tb2R1bGUpCgkJcmV0dXJuIC1FSU5W
QUw7CgoJaWYgKHNpemVvZihzdHJ1Y3QgbW9kdWxlX2luZm8pIDw9IGJ1ZnNpemUpIHsKCQlzdHJ1
Y3QgbW9kdWxlX2luZm8gaW5mbzsKCQlpbmZvLmFkZHIgPSAodW5zaWduZWQgbG9uZyltb2Q7CgkJ
aW5mby5zaXplID0gbW9kLT5zaXplOwoJCWluZm8uZmxhZ3MgPSBtb2QtPmZsYWdzOwoJCQoJCS8q
IHVzZWNvdW50IGlzIG9uZSB0b28gaGlnaCBoZXJlIC0gcmVwb3J0IGFwcHJvcHJpYXRlbHkgdG8K
CQkgICBjb21wZW5zYXRlIGZvciBsb2NraW5nICovCgkJaW5mby51c2Vjb3VudCA9IChtb2RfbWVt
YmVyX3ByZXNlbnQobW9kLCBjYW5fdW5sb2FkKQoJCQkJICYmIG1vZC0+Y2FuX3VubG9hZCA/IC0x
IDogYXRvbWljX3JlYWQoJm1vZC0+dWMudXNlY291bnQpLTEpOwoKCQlpZiAoY29weV90b191c2Vy
KGJ1ZiwgJmluZm8sIHNpemVvZihzdHJ1Y3QgbW9kdWxlX2luZm8pKSkKCQkJcmV0dXJuIC1FRkFV
TFQ7Cgl9IGVsc2UKCQllcnJvciA9IC1FTk9TUEM7CgoJaWYgKHB1dF91c2VyKHNpemVvZihzdHJ1
Y3QgbW9kdWxlX2luZm8pLCByZXQpKQoJCXJldHVybiAtRUZBVUxUOwoKCXJldHVybiBlcnJvcjsK
fQoKYXNtbGlua2FnZSBsb25nCnN5c19xdWVyeV9tb2R1bGUoY29uc3QgY2hhciAqbmFtZV91c2Vy
LCBpbnQgd2hpY2gsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsCgkJIHNpemVfdCAqcmV0KQp7
CglzdHJ1Y3QgbW9kdWxlICptb2Q7CglpbnQgZXJyOwoKCWxvY2tfa2VybmVsKCk7CglpZiAobmFt
ZV91c2VyID09IE5VTEwpCgkJbW9kID0gJmtlcm5lbF9tb2R1bGU7CgllbHNlIHsKCQlsb25nIG5h
bWVsZW47CgkJY2hhciAqbmFtZTsKCgkJaWYgKChuYW1lbGVuID0gZ2V0X21vZF9uYW1lKG5hbWVf
dXNlciwgJm5hbWUpKSA8IDApIHsKCQkJZXJyID0gbmFtZWxlbjsKCQkJZ290byBvdXQ7CgkJfQoJ
CWVyciA9IC1FTk9FTlQ7CgkJaWYgKChtb2QgPSBmaW5kX21vZHVsZShuYW1lKSkgPT0gTlVMTCkg
ewoJCQlwdXRfbW9kX25hbWUobmFtZSk7CgkJCWdvdG8gb3V0OwoJCX0KCQlwdXRfbW9kX25hbWUo
bmFtZSk7Cgl9CgoJLyogX19NT0RfIHRvdWNoZXMgdGhlIGZsYWdzLiBXZSBtdXN0IGF2b2lkIHRo
YXQgKi8KCQoJYXRvbWljX2luYygmbW9kLT51Yy51c2Vjb3VudCk7CgkJCglzd2l0Y2ggKHdoaWNo
KQoJewoJY2FzZSAwOgoJCWVyciA9IDA7CgkJYnJlYWs7CgljYXNlIFFNX01PRFVMRVM6CgkJZXJy
ID0gcW1fbW9kdWxlcyhidWYsIGJ1ZnNpemUsIHJldCk7CgkJYnJlYWs7CgljYXNlIFFNX0RFUFM6
CgkJZXJyID0gcW1fZGVwcyhtb2QsIGJ1ZiwgYnVmc2l6ZSwgcmV0KTsKCQlicmVhazsKCWNhc2Ug
UU1fUkVGUzoKCQllcnIgPSBxbV9yZWZzKG1vZCwgYnVmLCBidWZzaXplLCByZXQpOwoJCWJyZWFr
OwoJY2FzZSBRTV9TWU1CT0xTOgoJCWVyciA9IHFtX3N5bWJvbHMobW9kLCBidWYsIGJ1ZnNpemUs
IHJldCk7CgkJYnJlYWs7CgljYXNlIFFNX0lORk86CgkJZXJyID0gcW1faW5mbyhtb2QsIGJ1Ziwg
YnVmc2l6ZSwgcmV0KTsKCQlicmVhazsKCWRlZmF1bHQ6CgkJZXJyID0gLUVJTlZBTDsKCQlicmVh
azsKCX0KCWF0b21pY19kZWMoJm1vZC0+dWMudXNlY291bnQpOwoJCm91dDoKCXVubG9ja19rZXJu
ZWwoKTsKCXJldHVybiBlcnI7Cn0KCi8qCiAqIENvcHkgdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUg
dG8gdXNlciBzcGFjZS4gIElmIHRoZSBhcmd1bWVudCBpcwogKiBOVUxMLCBqdXN0IHJldHVybiB0
aGUgc2l6ZSBvZiB0aGUgdGFibGUuCiAqCiAqIFRoaXMgY2FsbCBpcyBvYnNvbGV0ZS4gIE5ldyBw
cm9ncmFtcyBzaG91bGQgdXNlIHF1ZXJ5X21vZHVsZStRTV9TWU1CT0xTCiAqIHdoaWNoIGRvZXMg
bm90IGFyYml0cmFyaWx5IGxpbWl0IHRoZSBsZW5ndGggb2Ygc3ltYm9scy4KICovCgphc21saW5r
YWdlIGxvbmcKc3lzX2dldF9rZXJuZWxfc3ltcyhzdHJ1Y3Qga2VybmVsX3N5bSAqdGFibGUpCnsK
CXN0cnVjdCBtb2R1bGUgKm1vZDsKCWludCBpOwoJc3RydWN0IGtlcm5lbF9zeW0ga3N5bTsKCgls
b2NrX2tlcm5lbCgpOwoJZm9yIChtb2QgPSBtb2R1bGVfbGlzdCwgaSA9IDA7IG1vZDsgbW9kID0g
bW9kLT5uZXh0KSB7CgkJLyogaW5jbHVkZSB0aGUgY291bnQgZm9yIHRoZSBtb2R1bGUgbmFtZSEg
Ki8KCQlpICs9IG1vZC0+bnN5bXMgKyAxOwoJfQoKCWlmICh0YWJsZSA9PSBOVUxMKQoJCWdvdG8g
b3V0OwoKCS8qIFNvIHRoYXQgd2UgZG9uJ3QgZ2l2ZSB0aGUgdXNlciBvdXIgc3RhY2sgY29udGVu
dCAqLwoJbWVtc2V0ICgma3N5bSwgMCwgc2l6ZW9mIChrc3ltKSk7CgoJZm9yIChtb2QgPSBtb2R1
bGVfbGlzdCwgaSA9IDA7IG1vZDsgbW9kID0gbW9kLT5uZXh0KSB7CgkJc3RydWN0IG1vZHVsZV9z
eW1ib2wgKm1zeW07CgkJdW5zaWduZWQgaW50IGo7CgoJCWlmICghTU9EX0NBTl9RVUVSWShtb2Qp
KQoJCQljb250aW51ZTsKCgkJLyogbWFnaWM6IHdyaXRlIG1vZHVsZSBpbmZvIGFzIGEgcHNldWRv
IHN5bWJvbCAqLwoJCWtzeW0udmFsdWUgPSAodW5zaWduZWQgbG9uZyltb2Q7CgkJa3N5bS5uYW1l
WzBdID0gJyMnOwoJCXN0cm5jcHkoa3N5bS5uYW1lKzEsIG1vZC0+bmFtZSwgc2l6ZW9mKGtzeW0u
bmFtZSktMSk7CgkJa3N5bS5uYW1lW3NpemVvZihrc3ltLm5hbWUpLTFdID0gJ1wwJzsKCgkJaWYg
KGNvcHlfdG9fdXNlcih0YWJsZSwgJmtzeW0sIHNpemVvZihrc3ltKSkgIT0gMCkKCQkJZ290byBv
dXQ7CgkJKytpLCArK3RhYmxlOwoKCQlpZiAobW9kLT5uc3ltcyA9PSAwKQoJCQljb250aW51ZTsK
CgkJZm9yIChqID0gMCwgbXN5bSA9IG1vZC0+c3ltczsgaiA8IG1vZC0+bnN5bXM7ICsraiwgKytt
c3ltKSB7CgkJCWtzeW0udmFsdWUgPSBtc3ltLT52YWx1ZTsKCQkJc3RybmNweShrc3ltLm5hbWUs
IG1zeW0tPm5hbWUsIHNpemVvZihrc3ltLm5hbWUpKTsKCQkJa3N5bS5uYW1lW3NpemVvZihrc3lt
Lm5hbWUpLTFdID0gJ1wwJzsKCgkJCWlmIChjb3B5X3RvX3VzZXIodGFibGUsICZrc3ltLCBzaXpl
b2Yoa3N5bSkpICE9IDApCgkJCQlnb3RvIG91dDsKCQkJKytpLCArK3RhYmxlOwoJCX0KCX0Kb3V0
OgoJdW5sb2NrX2tlcm5lbCgpOwoJcmV0dXJuIGk7Cn0KCi8qCiAqIExvb2sgZm9yIGEgbW9kdWxl
IGJ5IG5hbWUsIGlnbm9yaW5nIG1vZHVsZXMgbWFya2VkIGZvciBkZWxldGlvbi4KICovCgpzdHJ1
Y3QgbW9kdWxlICoKZmluZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKewoJc3RydWN0IG1vZHVs
ZSAqbW9kOwoKCWZvciAobW9kID0gbW9kdWxlX2xpc3Q7IG1vZCA7IG1vZCA9IG1vZC0+bmV4dCkg
ewoJCWlmIChtb2QtPmZsYWdzICYgTU9EX0RFTEVURUQpCgkJCWNvbnRpbnVlOwoJCWlmICghc3Ry
Y21wKG1vZC0+bmFtZSwgbmFtZSkpCgkJCWJyZWFrOwoJfQoKCXJldHVybiBtb2Q7Cn0KCi8qCiAq
IEZyZWUgdGhlIGdpdmVuIG1vZHVsZS4KICovCgp2b2lkCmZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1
bGUgKm1vZCwgaW50IHRhZ19mcmVlZCkKewoJc3RydWN0IG1vZHVsZV9yZWYgKmRlcDsKCXVuc2ln
bmVkIGk7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoKCS8qIExldCB0aGUgbW9kdWxlIGNsZWFuIHVw
LiAgKi8KCglpZiAobW9kLT5mbGFncyAmIE1PRF9SVU5OSU5HKQoJewoJCWlmKG1vZC0+Y2xlYW51
cCkKCQkJbW9kLT5jbGVhbnVwKCk7CgkJbW9kLT5mbGFncyAmPSB+TU9EX1JVTk5JTkc7Cgl9CgoJ
LyogUmVtb3ZlIHRoZSBtb2R1bGUgZnJvbSB0aGUgZGVwZW5kZW5jeSBsaXN0cy4gICovCgoJZm9y
IChpID0gMCwgZGVwID0gbW9kLT5kZXBzOyBpIDwgbW9kLT5uZGVwczsgKytpLCArK2RlcCkgewoJ
CXN0cnVjdCBtb2R1bGVfcmVmICoqcHA7CgkJZm9yIChwcCA9ICZkZXAtPmRlcC0+cmVmczsgKnBw
ICE9IGRlcDsgcHAgPSAmKCpwcCktPm5leHRfcmVmKQoJCQljb250aW51ZTsKCQkqcHAgPSBkZXAt
Pm5leHRfcmVmOwoJCWlmICh0YWdfZnJlZWQgJiYgZGVwLT5kZXAtPnJlZnMgPT0gTlVMTCkKCQkJ
ZGVwLT5kZXAtPmZsYWdzIHw9IE1PRF9KVVNUX0ZSRUVEOwoJfQoKCS8qIEFuZCBmcm9tIHRoZSBt
YWluIG1vZHVsZSBsaXN0LiAgKi8KCglzcGluX2xvY2tfaXJxc2F2ZSgmbW9kbGlzdF9sb2NrLCBm
bGFncyk7CglpZiAobW9kID09IG1vZHVsZV9saXN0KSB7CgkJbW9kdWxlX2xpc3QgPSBtb2QtPm5l
eHQ7Cgl9IGVsc2UgewoJCXN0cnVjdCBtb2R1bGUgKnA7CgkJZm9yIChwID0gbW9kdWxlX2xpc3Q7
IHAtPm5leHQgIT0gbW9kOyBwID0gcC0+bmV4dCkKCQkJY29udGludWU7CgkJcC0+bmV4dCA9IG1v
ZC0+bmV4dDsKCX0KCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1vZGxpc3RfbG9jaywgZmxhZ3Mp
OwoKCS8qIEFuZCBmcmVlIHRoZSBtZW1vcnkuICAqLwoKCW1vZHVsZV91bm1hcChtb2QpOwp9Cgov
KgogKiBDYWxsZWQgYnkgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIHRvIHJldHVybiBhIGN1cnJlbnQg
bGlzdCBvZiBtb2R1bGVzLgogKi8KCmludCBnZXRfbW9kdWxlX2xpc3QoY2hhciAqcCkKewoJc2l6
ZV90IGxlZnQgPSBQQUdFX1NJWkU7CglzdHJ1Y3QgbW9kdWxlICptb2Q7CgljaGFyIHRtcHN0cls2
NF07CglzdHJ1Y3QgbW9kdWxlX3JlZiAqcmVmOwoKCWZvciAobW9kID0gbW9kdWxlX2xpc3Q7IG1v
ZCAhPSAma2VybmVsX21vZHVsZTsgbW9kID0gbW9kLT5uZXh0KSB7CgkJbG9uZyBsZW47CgkJY29u
c3QgY2hhciAqcTsKCiNkZWZpbmUgc2FmZV9jb3B5X3N0cihzdHIsIGxlbikJCQkJCQlcCgkJZG8g
ewkJCQkJCQlcCgkJCWlmIChsZWZ0IDwgbGVuKQkJCQkJXAoJCQkJZ290byBmaW5pOwkJCQlcCgkJ
CW1lbWNweShwLCBzdHIsIGxlbik7IHAgKz0gbGVuLCBsZWZ0IC09IGxlbjsJXAoJCX0gd2hpbGUg
KDApCiNkZWZpbmUgc2FmZV9jb3B5X2NzdHIoc3RyKQlzYWZlX2NvcHlfc3RyKHN0ciwgc2l6ZW9m
KHN0ciktMSkKCgkJbGVuID0gc3RybGVuKG1vZC0+bmFtZSk7CgkJc2FmZV9jb3B5X3N0cihtb2Qt
Pm5hbWUsIGxlbik7CgoJCWlmICgobGVuID0gMjAgLSBsZW4pID4gMCkgewoJCQlpZiAobGVmdCA8
IGxlbikKCQkJCWdvdG8gZmluaTsKCQkJbWVtc2V0KHAsICcgJywgbGVuKTsKCQkJcCArPSBsZW47
CgkJCWxlZnQgLT0gbGVuOwoJCX0KCgkJbGVuID0gc3ByaW50Zih0bXBzdHIsICIlOGx1IiwgbW9k
LT5zaXplKTsKCQlzYWZlX2NvcHlfc3RyKHRtcHN0ciwgbGVuKTsKCgkJaWYgKG1vZC0+ZmxhZ3Mg
JiBNT0RfUlVOTklORykgewoJCQlsZW4gPSBzcHJpbnRmKHRtcHN0ciwgIiU0bGQiLAoJCQkJICAg
ICAgKG1vZF9tZW1iZXJfcHJlc2VudChtb2QsIGNhbl91bmxvYWQpCgkJCQkgICAgICAgJiYgbW9k
LT5jYW5fdW5sb2FkCgkJCQkgICAgICAgPyAtMUwgOiAobG9uZylhdG9taWNfcmVhZCgmbW9kLT51
Yy51c2Vjb3VudCkpKTsKCQkJc2FmZV9jb3B5X3N0cih0bXBzdHIsIGxlbik7CgkJfQoKCQlpZiAo
bW9kLT5mbGFncyAmIE1PRF9ERUxFVEVEKQoJCQlzYWZlX2NvcHlfY3N0cigiIChkZWxldGVkKSIp
OwoJCWVsc2UgaWYgKG1vZC0+ZmxhZ3MgJiBNT0RfUlVOTklORykgewoJCQlpZiAobW9kLT5mbGFn
cyAmIE1PRF9BVVRPQ0xFQU4pCgkJCQlzYWZlX2NvcHlfY3N0cigiIChhdXRvY2xlYW4pIik7CgkJ
CWlmICghKG1vZC0+ZmxhZ3MgJiBNT0RfVVNFRF9PTkNFKSkKCQkJCXNhZmVfY29weV9jc3RyKCIg
KHVudXNlZCkiKTsKCQl9CgkJZWxzZSBpZiAobW9kLT5mbGFncyAmIE1PRF9JTklUSUFMSVpJTkcp
CgkJCXNhZmVfY29weV9jc3RyKCIgKGluaXRpYWxpemluZykiKTsKCQllbHNlCgkJCXNhZmVfY29w
eV9jc3RyKCIgKHVuaW5pdGlhbGl6ZWQpIik7CgoJCWlmICgocmVmID0gbW9kLT5yZWZzKSAhPSBO
VUxMKSB7CgkJCXNhZmVfY29weV9jc3RyKCIgWyIpOwoJCQl3aGlsZSAoMSkgewoJCQkJcSA9IHJl
Zi0+cmVmLT5uYW1lOwoJCQkJbGVuID0gc3RybGVuKHEpOwoJCQkJc2FmZV9jb3B5X3N0cihxLCBs
ZW4pOwoKCQkJCWlmICgocmVmID0gcmVmLT5uZXh0X3JlZikgIT0gTlVMTCkKCQkJCQlzYWZlX2Nv
cHlfY3N0cigiICIpOwoJCQkJZWxzZQoJCQkJCWJyZWFrOwoJCQl9CgkJCXNhZmVfY29weV9jc3Ry
KCJdIik7CgkJfQoJCXNhZmVfY29weV9jc3RyKCJcbiIpOwoKI3VuZGVmIHNhZmVfY29weV9zdHIK
I3VuZGVmIHNhZmVfY29weV9jc3RyCgl9CgpmaW5pOgoJcmV0dXJuIFBBR0VfU0laRSAtIGxlZnQ7
Cn0KCi8qCiAqIENhbGxlZCBieSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0gdG8gcmV0dXJuIGEgY3Vy
cmVudCBsaXN0IG9mIGtzeW1zLgogKi8KCnN0cnVjdCBtb2Rfc3ltIHsKCXN0cnVjdCBtb2R1bGUg
Km1vZDsKCWludCBpbmRleDsKfTsKCi8qIGl0ZXJhdG9yICovCgpzdGF0aWMgdm9pZCAqc19zdGFy
dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQp7CglzdHJ1Y3QgbW9kX3N5bSAqcCA9
IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CglzdHJ1Y3QgbW9kdWxlICp2OwoJbG9m
Zl90IG4gPSAqcG9zOwoKCWlmICghcCkKCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKCWxvY2tf
a2VybmVsKCk7Cglmb3IgKHYgPSBtb2R1bGVfbGlzdCwgbiA9ICpwb3M7IHY7IG4gLT0gdi0+bnN5
bXMsIHYgPSB2LT5uZXh0KSB7CgkJaWYgKG4gPCB2LT5uc3ltcykgewoJCQlwLT5tb2QgPSB2OwoJ
CQlwLT5pbmRleCA9IG47CgkJCXJldHVybiBwOwoJCX0KCX0KCXVubG9ja19rZXJuZWwoKTsKCWtm
cmVlKHApOwoJcmV0dXJuIE5VTEw7Cn0KCnN0YXRpYyB2b2lkICpzX25leHQoc3RydWN0IHNlcV9m
aWxlICptLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKewoJc3RydWN0IG1vZF9zeW0gKnYgPSBwOwoJ
KCpwb3MpKys7CglpZiAoKyt2LT5pbmRleCA+PSB2LT5tb2QtPm5zeW1zKSB7CgkJZG8gewoJCQl2
LT5tb2QgPSB2LT5tb2QtPm5leHQ7CgkJCWlmICghdi0+bW9kKSB7CgkJCQl1bmxvY2tfa2VybmVs
KCk7CgkJCQlrZnJlZShwKTsKCQkJCXJldHVybiBOVUxMOwoJCQl9CgkJfSB3aGlsZSAoIXYtPm1v
ZC0+bnN5bXMpOwoJCXYtPmluZGV4ID0gMDsKCX0KCXJldHVybiBwOwp9CgpzdGF0aWMgdm9pZCBz
X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQp7CglpZiAocCAmJiAhSVNfRVJSKHAp
KSB7CgkJdW5sb2NrX2tlcm5lbCgpOwoJCWtmcmVlKHApOwoJfQp9CgpzdGF0aWMgaW50IHNfc2hv
dyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCnsKCXN0cnVjdCBtb2Rfc3ltICp2ID0gcDsK
CXN0cnVjdCBtb2R1bGVfc3ltYm9sICpzeW07CgoJaWYgKCFNT0RfQ0FOX1FVRVJZKHYtPm1vZCkp
CgkJcmV0dXJuIDA7CglzeW0gPSAmdi0+bW9kLT5zeW1zW3YtPmluZGV4XTsKCWlmICgqdi0+bW9k
LT5uYW1lKQoJCXNlcV9wcmludGYobSwgIiUwKmx4ICVzXHRbJXNdXG4iLCAoaW50KSgyKnNpemVv
Zih2b2lkKikpLAoJCQkgICAgICAgc3ltLT52YWx1ZSwgc3ltLT5uYW1lLCB2LT5tb2QtPm5hbWUp
OwoJZWxzZQoJCXNlcV9wcmludGYobSwgIiUwKmx4ICVzXG4iLCAoaW50KSgyKnNpemVvZih2b2lk
KikpLAoJCQkgICAgICAgc3ltLT52YWx1ZSwgc3ltLT5uYW1lKTsKCXJldHVybiAwOwp9CgpzdHJ1
Y3Qgc2VxX29wZXJhdGlvbnMga3N5bXNfb3AgPSB7CglzdGFydDoJc19zdGFydCwKCW5leHQ6CXNf
bmV4dCwKCXN0b3A6CXNfc3RvcCwKCXNob3c6CXNfc2hvdwp9OwoKI2Vsc2UJCS8qIENPTkZJR19N
T0RVTEVTICovCgovKiBEdW1teSBzeXNjYWxscyBmb3IgcGVvcGxlIHdobyBkb24ndCB3YW50IG1v
ZHVsZXMgKi8KCmFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwpzeXNfY3JlYXRlX21vZHVsZShjb25z
dCBjaGFyICpuYW1lX3VzZXIsIHNpemVfdCBzaXplKQp7CglyZXR1cm4gLUVOT1NZUzsKfQoKYXNt
bGlua2FnZSBsb25nCnN5c19pbml0X21vZHVsZShjb25zdCBjaGFyICpuYW1lX3VzZXIsIHN0cnVj
dCBtb2R1bGUgKm1vZF91c2VyKQp7CglyZXR1cm4gLUVOT1NZUzsKfQoKYXNtbGlua2FnZSBsb25n
CnN5c19kZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWVfdXNlcikKewoJcmV0dXJuIC1FTk9T
WVM7Cn0KCmFzbWxpbmthZ2UgbG9uZwpzeXNfcXVlcnlfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWVf
dXNlciwgaW50IHdoaWNoLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXplLAoJCSBzaXplX3QgKnJl
dCkKewoJLyogTGV0IHRoZSBwcm9ncmFtIGtub3cgYWJvdXQgdGhlIG5ldyBpbnRlcmZhY2UuICBO
b3QgdGhhdAoJICAgaXQnbGwgZG8gdGhlbSBtdWNoIGdvb2QuICAqLwoJaWYgKHdoaWNoID09IDAp
CgkJcmV0dXJuIDA7CgoJcmV0dXJuIC1FTk9TWVM7Cn0KCmFzbWxpbmthZ2UgbG9uZwpzeXNfZ2V0
X2tlcm5lbF9zeW1zKHN0cnVjdCBrZXJuZWxfc3ltICp0YWJsZSkKewoJcmV0dXJuIC1FTk9TWVM7
Cn0KCmludCB0cnlfaW5jX21vZF9jb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpCnsKCXJldHVybiAx
Owp9CgojZW5kaWYJLyogQ09ORklHX01PRFVMRVMgKi8K


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]