This is the mail archive of the gcc-prs@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]

c/530: Courier 0.27 causes "internal compiler error"



>Number:         530
>Category:       c
>Synopsis:       Courier 0.27 causes "internal compiler error"
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Sep 12 21:26:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Juha Saarinen
>Release:        gcc version 2.96 20000724 (experimental)
>Organization:
>Environment:
Red Hat Linux Pinstripe, kernel 2.2.16-21, glibc 2.1.92-5
>Description:
c++ -I./.. -I.. -I./../afx -I./../rfc822 -I./libs -Wall -O6 -march=i686 -mcpu=i6
86 -fno-strength-reduce -ffast-math -fexpensive-optimizations -fomit-frame-point
er -malign-double -o aliascreate cppmain.o aliascreate.o libs/libcommon.a libs/l
ibcourier.a ../gdbmobj/libgdbmobj.a ../afx/libafx.a -lgdbm
c++ -DHAVE_CONFIG_H -I. -I. -I.     `cat cxxflags` -c submit.C
submit.C: In function `void getrcpts (rw_info *)':
submit.C:352: Internal compiler error in emit_move_insn_1, at expr.c:
2830
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
make[3]: *** [submit.o] Error 1
make[3]: Leaving directory `/usr/src/redhat/BUILD/courier-0.27/courier'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/src/redhat/BUILD/courier-0.27/courier'
make[1]: *** [all-recursive-am] Error 2
make[1]: Leaving directory `/usr/src/redhat/BUILD/courier-0.27/courier'
make: *** [all-recursive] Error 1
Bad exit status from /var/tmp/rpm-tmp.48397 (%build)
>How-To-Repeat:
By compiling Courier 0.27?
>Fix:
No fix
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="submit.C"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="submit.C"

LyoKKiogQ29weXJpZ2h0IDE5OTggLSAyMDAwIERvdWJsZSBQcmVjaXNpb24sIEluYy4KKiogU2Vl
IENPUFlJTkcgZm9yIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbi4KKi8KCiNpbmNsdWRlCSJjb3Vy
aWVyLmgiCiNpbmNsdWRlCSJsb2NhbHN0YXRlZGlyLmgiCiNpbmNsdWRlCSJydy5oIgojaW5jbHVk
ZQkiY29tY2FyZ3MuaCIKI2luY2x1ZGUJImF1dGhsaWIvYXV0aC5oIgojaW5jbHVkZQkicmZjODIy
LmgiCiNpbmNsdWRlCSJyZmMxMDM1L3JmYzEwMzUuaCIKI2luY2x1ZGUJInJmYzEwMzUvcmZjMTAz
NW14bGlzdC5oIgojaW5jbHVkZQkibnVtbGliL251bWxpYi5oIgojaW5jbHVkZQkiZGJvYmouaCIK
I2luY2x1ZGUJImFmeC5oIgojaW5jbHVkZQkiYWxpYXNlcy5oIgojaW5jbHVkZQkic3VibWl0Lmgi
CiNpbmNsdWRlCSJtYXhsb25nc2l6ZS5oIgojaW5jbHVkZQk8c3RyaW5nLmg+CiNpbmNsdWRlCTxz
dGRsaWIuaD4KI2luY2x1ZGUJPGN0eXBlLmg+CiNpbmNsdWRlCTxpb3N0cmVhbS5oPgojaWYJSEFW
RV9TWVNfVFlQRVNfSAojaW5jbHVkZQk8c3lzL3R5cGVzLmg+CiNlbmRpZgojaWYJSEFWRV9TWVNf
U1RBVF9ICiNpbmNsdWRlCTxzeXMvc3RhdC5oPgojZW5kaWYKI2lmCUhBVkVfVU5JU1REX0gKI2lu
Y2x1ZGUJPHVuaXN0ZC5oPgojZW5kaWYKI2luY2x1ZGUJPHRpbWUuaD4KCnRpbWVfdAlzdWJtaXRf
dGltZTsKc3RhdGljIGNvbnN0IGNoYXIgKmV4cG5uYW1lPTA7CnN0YXRpYyBjb25zdCBjaGFyICp2
cmZ5bmFtZT0wOwpzdGF0aWMgY29uc3QgY2hhciAqcmVjZWl2ZWRmcm9tbXRhPTA7CnN0YXRpYyBj
b25zdCBjaGFyICppZGVudGluZm89MDsKc3RhdGljIGNvbnN0IGNoYXIgKm9ubHliY2M9MDsKCmNv
bnN0IGNoYXIgKnN1Ym1pdGRlbGF5PTA7CgpzdGF0aWMgaW50IG5vZmlsdGVyOwoKaW50IHZlcnBm
bGFnOwpleHRlcm4gQ1N0cmluZwlta21lc3NhZ2VpZGhlYWRlcigpOwoKc3RhdGljIHN0cnVjdCBj
b3VyaWVyX2FyZ3MgYXJnaW5mb1tdPXsKCXsiZXhwbiIsICZleHBubmFtZX0sCgl7InZyZnkiLCAm
dnJmeW5hbWV9LAoJeyJiY2MiLCAmb25seWJjY30sCgoJeyJkZWxheSIsICZzdWJtaXRkZWxheX0s
Cgl7MH0KCX0gOwoKc3RhdGljIGNvbnN0IGNoYXIgeW91X2FyZV93aGl0ZWxpc3RlZFtdPQoJIjQx
MiBZb3UgYXJlIHdoaXRlbGlzdGVkIGJ5IHRoaXMgcmVjaXBpZW50LCBwbGVhc2UgdHJ5IGFnYWlu
IGxhdGVyLiI7CgpzdGF0aWMgY29uc3QgY2hhciB5b3VfYXJlX25vdF93aGl0ZWxpc3RlZFtdPQoJ
IjQxMiBZb3UgYXJlIG5vdCB3aGl0ZWxpc3RlZCBieSB0aGlzIHJlY2lwaWVudCwgcGxlYXNlIHRy
eSBhZ2FpbiBsYXRlci4iOwoKLy8gQSBwb2ludGVyIHRvIGV4cG5pbmZvIGlzIHN1cHBsaWVkIGFz
IGEgbWlzYyBhcmd1bWVudCB0byB0aGUKLy8gcmV3cml0ZV9hZGRyZXNzIGZ1bmN0aW9uLCB3aGlj
aCBwYXNzZXMgaXQgYWxvbmcgdG8gdGhlIGhhbmRsZXIgb2YgdGhlCi8vIHJld3JpdHRlbiBhZGRy
ZXNzLgovLwovLyBleHBuaW5mbyBpcyB1c2VkIGJ5IHRoZSBoYW5kbGVyIGZ1bmN0aW9uIChzaG93
ZXhwbiwgc2hvd3ZyZnksIG9yIC4uLikKLy8gaW4gb3JkZXIgdG8gZmluZCB0aGUgb3JpZ2luYWwg
QWxpYXNTZWFyY2ggZnVuY3Rpb24gdG8gc2VhcmNoIGZvcgovLyBhbnkgYWxpYXNlcyBvZiB0aGlz
IGFkZHJlc3MuCgpzdHJ1Y3QgZXhwbmluZm8gewoJQWxpYXNTZWFyY2ggKmFzcHRyOwoJaW50CWZs
YWc7CglzdHJ1Y3QgcndfdHJhbnNwb3J0ICptb2R1bGU7Cgl9IDsKCi8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi8vCi8vIHJld3JpdGVfYWRkcmVzcygpIHJld3JpdGVzIGFuIGFyYml0cmFyeSBhZGRyZXNz
IHVzaW5nIGEgc3BlY2lmaWVkIG1vZHVsZSdzCi8vIHJld3JpdGluZyBmdW5jdGlvbi4KLy8KLy8g
aW5hZGRyZXNzIC0gYWRkcmVzcyB0byByZXdyaXRlCi8vIG1vZHVsZSAgICAtIG1vZHVsZSB3aG9z
ZSByZXdyaXRlIGZ1bmN0aW9uIGlzIHVzZWQKLy8gbW9kZSAgICAgIC0gcmV3cml0aW5nIG1vZGUK
Ly8gc2VuZGVyICAgIC0gd2hhdCB0byBwdXQgaW4gcndfaW5mby5zZW5kZXIKLy8KLy8gaGFuZGxl
ciAgIC0gZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZC4gIFRoZSBmaXJzdCBhcmd1bWVudCB0
byB0aGUKLy8gICAgICAgICAgICAgZnVuY3Rpb24gd2lsbCBiZSB0aGUgcmV3cml0dGVuIGFkZHJl
c3MsIHRoZSBzZWNvbmQgYXJndW1lbnQKLy8gICAgICAgICAgICAgaXMgdGhlIHNhbWUgYWRkcmVz
cywgYnV0IGFzIHJmYzgyMnRva2VuIGxpbmsgbGlzdC4gIFRoZSB0aGlyZAovLyAgICAgICAgICAg
ICBhcmd1bWVudCB3aWxsIGJlIGFuIGVycm9yIG1lc3NhZ2UuICBJZiBOVUxMLCB0aGUgYWRkcmVz
cyB3YXMKLy8gICAgICAgICAgICAgcmV3cml0dGVuIHN1Y2Nlc2Z1bGx5LiAgVGhlIGxhc3QgYXJn
dW1lbnQgd2lsbCBiZSB0aGUgbWlzYwovLyAgICAgICAgICAgICBwb2ludGVyLgovLyBtaXNjICAg
ICAgLSBtaXNjZWxsYW5lb3VzIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgaGFuZGxlciBmdW5jdGlv
bi4KLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCnN0YXRpYyB2b2lkIHJld3JpdGVfYWRkcmVzcyhj
b25zdCBjaGFyICppbmFkZHJlc3MsIHN0cnVjdCByd190cmFuc3BvcnQgKm1vZHVsZSwKCWludCBt
b2RlLAoJc3RydWN0IHJmYzgyMnRva2VuICpzZW5kZXIsCgl2b2lkICgqaGFuZGxlcikoY29uc3Qg
Y2hhciAqaW5hZGRyZXNzLAoJCXN0cnVjdCByZmM4MjJ0b2tlbiAqaW5hZGRyZXNzdCwgY29uc3Qg
Y2hhciAqZXJybXNnLCB2b2lkICptaXNjKSwKCXZvaWQgKm1pc2MpCnsKc3RydWN0CXJ3X2luZm9f
cmV3cml0ZQlyd2lyOwpzdHJ1Y3QJcndfaW5mbyByd2k7CnN0cnVjdAlyZmM4MjJ0ICpyZmNwOwpj
aGFyCSphZGRyZXNzLCAqcCwgKmVycm1zZzsKCglyZmNwPXJ3X3Jld3JpdGVfdG9rZW5pemUoaW5h
ZGRyZXNzKTsKCglyd19pbmZvX2luaXQoJnJ3aSwgcmZjcC0+dG9rZW5zLCByd19lcnJfZnVuYyk7
CgoJcndpLm1vZGU9bW9kZTsKCXJ3aS5zZW5kZXI9c2VuZGVyOwoJcndpLnVkYXRhPSh2b2lkICop
JnJ3aXI7Cglyd2lyLmJ1Zj0wOwoJcndpci5lcnJtc2c9MDsKCglyd19yZXdyaXRlX21vZHVsZSht
b2R1bGUsICZyd2ksIHJ3X3Jld3JpdGVfY2hrc3luX3ByaW50KTsKCglhZGRyZXNzPSgoc3RydWN0
IHJ3X2luZm9fcmV3cml0ZSAqKXJ3aS51ZGF0YSktPmJ1ZjsKCWlmIChhZGRyZXNzKQoJewoJY2hh
cgkqaG9zdGRvbWFpbj0wOwoKCQlpZiAoKHA9c3RycmNocihhZGRyZXNzLCAnQCcpKSAmJgoJCQlj
b25maWdfaXNsb2NhbChwKzEsICZob3N0ZG9tYWluKSAmJiBob3N0ZG9tYWluID09IDApCgkJCWxv
Y2FsbG93ZXIoYWRkcmVzcyk7CgkJaWYgKGhvc3Rkb21haW4pCWZyZWUoaG9zdGRvbWFpbik7CgkJ
ZG9tYWlubG93ZXIoYWRkcmVzcyk7Cgl9CgllcnJtc2c9KChzdHJ1Y3QgcndfaW5mb19yZXdyaXRl
ICopcndpLnVkYXRhKS0+ZXJybXNnOwoKCSgqaGFuZGxlcikoIGFkZHJlc3MsIHJ3aS5wdHIsIGVy
cm1zZywgbWlzYyk7CglpZiAoYWRkcmVzcykJZnJlZShhZGRyZXNzKTsKCWlmIChlcnJtc2cpCWZy
ZWUoZXJybXNnKTsKCXJmYzgyMnRfZnJlZShyZmNwKTsKfQoKaW50IGNoZWNrZnJlZXNwYWNlKHVu
c2lnbmVkICphdmFpbGJ5dGVzKQp7CnN0YXRpYyB1bnNpZ25lZCBuc3VibWl0dGVyczsKc3RhdGlj
IHVuc2lnbmVkIG1pbl9pbm9kZXM9MDsKdW5zaWduZWQgbG9uZyBuZnJlZWJsb2NrcywgbmZyZWVp
bm9kZXM7CnVuc2lnbmVkIGJsa3NpemU7CnVuc2lnbmVkIGR1bW15OwoKCWlmIChtaW5faW5vZGVz
ID09IDApCS8vIENhbGN1bGF0ZSB0aHJlc2hvbGRzCgl7Cgljb25zdCBjaGFyICpwPWdldGVudigi
TUFYU1VCTUlUVEVSUyIpOwoKCQluc3VibWl0dGVycz0gcCA/ICh1bnNpZ25lZClhdG9pKHApOjA7
CgoJCWlmIChuc3VibWl0dGVycyA8IDEwKQluc3VibWl0dGVycz0xMDsKCQlpZiAobnN1Ym1pdHRl
cnMgPiAxMDAwKQluc3VibWl0dGVycz0xMDAwOwoKCQltaW5faW5vZGVzPW5zdWJtaXR0ZXJzKjUr
MTAwOwoJfQoKCWlmICghYXZhaWxieXRlcykJYXZhaWxieXRlcz0gJmR1bW15OwoKCSphdmFpbGJ5
dGVzPTY1NTM2OwoKCWlmIChmcmVlc3BhY2UoICIuIiwgJm5mcmVlYmxvY2tzLCAmbmZyZWVpbm9k
ZXMsICZibGtzaXplKSkKCXsKCQlyZXR1cm4gKDApOwoJfQoKCWlmIChuZnJlZWlub2RlcyA8IG1p
bl9pbm9kZXMpCXJldHVybiAoLTEpOwoKCWlmIChuZnJlZWJsb2NrcyA8IGJsa3NpemUgKiBuc3Vi
bWl0dGVycy82NTUzNiArIDEwMCkKCQkqYXZhaWxieXRlcz00MDk2OwoJZWxzZSBpZiAobmZyZWVi
bG9ja3MgPCBibGtzaXplICogbnN1Ym1pdHRlcnMvNDA5NiArIDEwMCkKCQlyZXR1cm4gKC0xKTsK
CXJldHVybiAoMCk7Cgp9CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vCi8vIEV4cG5BbGlhc0hhbmRsZXIgLSBz
dWJjbGFzc2VzIEFsaWFzSGFuZGxlci4gIFRoZSBBbGlhc0hhbmRsZXIKLy8gY2xhc3MgaXMgdXNl
ZCBieSB0aGUgQWxpYXNTZWFyY2ggY2xhc3MgdG8gb3V0cHV0IGFkZHJlc3NlcyBmb3VuZAovLyBp
biB0aGUgYWxpYXNlcy5kYXQgZmlsZS4gIEFsaWFzSGFuZGxlciBpcyBzdWJjbGFzc2VkIHNvIHRo
YXQKLy8gb25lIGFsaWFzIGlzIGFsd2F5cyBidWZmZXJlZC4gIFdoZW4gYW4gYWxpYXMgYWRkcmVz
cyBpcyByZWNlaXZlZCwKLy8gdGhlIHByZXZpb3VzIG9uZSBpcyBwcmludGVkIG9uIGNvdXQsIGFz
IGFuIFJGQzgyMiBtdWx0aWxpbmUKLy8gcmVzcG9uc2UuICBUaGUgZmluYWwgY2FsbCB0byBFeHBu
QWxpYXNIYW5kbGVyOjpBbGlhcygpIGZsdXNoZXMgb3V0Ci8vIHRoZSBmaW5hbCBhZGRyZXNzIGFu
ZCBwcmludHMgaXQgYXMgYW4gUkZDODIyIGZpbmFsIG11bHRpbGluZQovLyByZXNwb25zZS4KLy8K
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwoKY2xhc3MgRXhwbkFsaWFzSGFuZGxlciA6IHB1YmxpYyBBbGlhc0hhbmRs
ZXIgewpwdWJsaWM6CglFeHBuQWxpYXNIYW5kbGVyKCk7Cgl+RXhwbkFsaWFzSGFuZGxlcigpOwoK
CUNTdHJpbmcJcHJldl9hbGlhczsKCXZvaWQJQWxpYXMoY29uc3QgY2hhciAqKTsKfSA7CgpFeHBu
QWxpYXNIYW5kbGVyOjpFeHBuQWxpYXNIYW5kbGVyKCkKewp9CgpFeHBuQWxpYXNIYW5kbGVyOjp+
RXhwbkFsaWFzSGFuZGxlcigpCnsKfQoKdm9pZAlFeHBuQWxpYXNIYW5kbGVyOjpBbGlhcyhjb25z
dCBjaGFyICpwKQp7CglpZiAoIChjb25zdCBjaGFyICopcHJldl9hbGlhcyApCgkJY291dCA8PCAi
MjUwIiA8PCAoIHAgPyAnLSc6JyAnKSA8PAoJCQkiPCIgPDwgcHJldl9hbGlhcyA8PCAiPiIgPDwg
ZW5kbCA8PCBmbHVzaDsKCglpZiAocCkKCQlwcmV2X2FsaWFzPXA7Cn0KCi8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLy8KLy8gc2hvd2V4cG4gLSBleHBhbmQgYWxpYXNlcy4gIEFmdGVyIHJld3JpdGluZyBh
biBhZGRyZXNzLCBleHBhbmQgYW55IGFsaWFzZXMuCi8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCnN0
YXRpYyB2b2lkIHNob3dleHBuKGNvbnN0IGNoYXIgKmFkZHJlc3MsIHN0cnVjdCByZmM4MjJ0b2tl
biAqYWRkcmVzc3QsCgljb25zdCBjaGFyICplcnJtc2csIHZvaWQgKm1pc2MpCnsKc3RydWN0CWV4
cG5pbmZvICppbmZvID0gKHN0cnVjdCBleHBuaW5mbyAqKW1pc2M7CgoJYWRkcmVzc3Q9YWRkcmVz
c3Q7CgoJaWYgKGVycm1zZykKCXsKCQljb3V0IDw8IGVycm1zZyA8PCBmbHVzaDsKCQlpbmZvLT5m
bGFnPTE7CgkJcmV0dXJuOwoJfQoKRXhwbkFsaWFzSGFuZGxlciBleHBuaDsKCglpZiAoaW5mby0+
YXNwdHItPlNlYXJjaChhZGRyZXNzLCBleHBuaCkpCgkJY291dCA8PCAiNTAwIDwiIDw8IGFkZHJl
c3MgPDwgIj4gbm90IGZvdW5kLiIgPDwgZW5kbCA8PCBmbHVzaDsKCQkJCS8vIE5vIGFsaWFzZXMK
CWVsc2UKCQlleHBuaC5BbGlhcygwKTsKCQkJCS8vIFByaW50IGxhc3QgYWxpYXMKCWluZm8tPmZs
YWc9MDsKfQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8KLy8gVlJGWQovLwovLyBBIHBvaW50ZXIg
dG8gcndfaW5mb192cmZ5IGlzIHBhc3NlZCB0byByd19zZWFyY2hkZWwgYXMgYSBtaXNjIHBvaW50
ZXIuCi8vIFRoZSBmb3VuZF90cmFuc3BvcnQgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gb3V0
cHV0IG1vZHVsZSBpcyBmb3VuZAovLyBmb3IgdGhlIGFkZHJlc3MuICBmb3VuZF90cmFuc3BvcnQo
KSBzYXZlcyB0aGUgZGVsaXZlcnkgaW5mb3JtYXRpb24gaW4KLy8gdGhlIHJ3X2luZm9fdnJmeSBz
dHJ1Y3R1cmUKLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCnN0cnVjdCByd19pbmZvX3ZyZnkgewoJ
c3RydWN0IHJ3X2luZm9fcmV3cml0ZSByd3I7CglzdHJ1Y3QJcndfdHJhbnNwb3J0ICptb2R1bGU7
CgljaGFyCSpob3N0OwoJY2hhcgkqYWRkcjsKCX0gOwoKc3RhdGljIHZvaWQgZm91bmRfdHJhbnNw
b3J0KHN0cnVjdCByd19pbmZvICpyd2ksCgkJc3RydWN0IHJ3X3RyYW5zcG9ydCAqdCwKCQljb25z
dCBzdHJ1Y3QgcmZjODIydG9rZW4gKmhvc3QsCgkJY29uc3Qgc3RydWN0IHJmYzgyMnRva2VuICph
ZGRyKQp7CnN0cnVjdCByd19pbmZvX3ZyZnkgKnA9KHN0cnVjdCByd19pbmZvX3ZyZnkgKilyd2kt
PnVkYXRhOwoKCXAtPm1vZHVsZT10OwoJaWYgKCEocC0+aG9zdD1yZmM4MjJfZ2V0dG9rKGhvc3Qp
KSB8fAoJCSEocC0+YWRkcj1yZmM4MjJfZ2V0dG9rKGFkZHIpKSkKCQljbG9nX21zZ19lcnJubygp
Owp9CgpzdGF0aWMgdm9pZCBzaG93dnJmeShjb25zdCBjaGFyICphZGRyZXNzLCBzdHJ1Y3QgcmZj
ODIydG9rZW4gKmFkZHJlc3N0LAoJY29uc3QgY2hhciAqZXJybXNnLCB2b2lkICptaXNjKQp7CnN0
cnVjdAlleHBuaW5mbyAqaW5mbyA9IChzdHJ1Y3QgZXhwbmluZm8gKiltaXNjOwoKCWFkZHJlc3N0
PWFkZHJlc3N0OwoKCWlmICghYWRkcmVzcykKCXsKCQljb3V0IDw8IGVycm1zZyA8PCBmbHVzaDsK
CQlpbmZvLT5mbGFnPTE7CgkJcmV0dXJuOwoJfQoKCS8vIElmIHRoZXJlJ3MgYW4gYWxpYXMgZGVm
aW5lZCBmb3IgdGhpcyBvbmUsIHByZXN1bWUgdGhhdCB0aGlzIGlzCgkvLyBhIGdvb2QgYWRkcmVz
cy4KCglpZiAoaW5mby0+YXNwdHItPkZvdW5kKGFkZHJlc3MpKQoJewoJCWNvdXQgPDwgIjI1MCA8
IiA8PCBhZGRyZXNzIDw8ICI+IiA8PCBlbmRsIDw8IGZsdXNoOwoJCXJldHVybjsKCX0KCgkvLyBB
dHRlbXB0IHRvIGZpbmQgYW4gb3V0cHV0IG1vZHVsZSBmb3IgdGhpcyBhZGRyZXNzLgoKc3RydWN0
CXJmYzgyMnQgKnJmY3A9cndfcmV3cml0ZV90b2tlbml6ZShhZGRyZXNzKTsKc3RydWN0CXJ3X2lu
Zm9fdnJmeSByaXY7CgoJcml2LnJ3ci5idWY9MDsKCXJpdi5yd3IuZXJybXNnPTA7CglyaXYubW9k
dWxlPTA7CglyaXYuaG9zdD0wOwoJcml2LmFkZHI9MDsKCnN0cnVjdAlyd19pbmZvCXJ3aTsKCgly
d19pbmZvX2luaXQoJnJ3aSwgcmZjcC0+dG9rZW5zLCByd19lcnJfZnVuYyk7Cglyd2kudWRhdGE9
ICh2b2lkICopJnJpdjsKCXJ3aS5tb2RlPVJXX1ZFUklGWTsKCXJ3X3NlYXJjaGRlbCgmcndpLCAm
Zm91bmRfdHJhbnNwb3J0KTsKCXJmYzgyMnRfZnJlZShyZmNwKTsKCglpZiAoIXJpdi5tb2R1bGUg
JiYgIXJpdi5yd3IuZXJybXNnKQoJCXJ3X2Vycl9mdW5jKDUxMSwgIlVuZGVsaXZlcmFibGUgYWRk
cmVzcy4iLCAmcndpKTsKCgoJaWYgKCFyaXYubW9kdWxlKQkvLyBOb3QgZm91bmQuCgl7CgkJY291
dCA8PCByaXYucndyLmVycm1zZyA8PCBmbHVzaDsKCQkoKHN0cnVjdCBleHBuaW5mbyAqKW1pc2Mp
LT5mbGFnPTE7CgkJZnJlZShyaXYucndyLmVycm1zZyk7CgkJcmV0dXJuOwoJfQoJZnJlZShyaXYu
aG9zdCk7CglmcmVlKHJpdi5hZGRyKTsKCWNvdXQgPDwgIjI1MCA8IiA8PCBhZGRyZXNzIDw8ICI+
IiA8PCBlbmRsIDw8IGZsdXNoOwp9CgpzdGF0aWMgdm9pZCBnZXRyY3B0cyhzdHJ1Y3QgcndfaW5m
byAqcndpKTsKCnN0cnVjdCBtYWlsZnJvbWluZm8gewoJQWxpYXNTZWFyY2gJKmFzcHRyOwoJQ1N0
cmluZwkJKmVudmlkOwoJY2hhcglkc25mb3JtYXQ7CglzdHJ1Y3QJcndfdHJhbnNwb3J0ICptb2R1
bGU7CglpbnQJZmxhZzsKCX0gOwoKc3RhdGljIHZvaWQgbWFpbGZyb21lcnIoaW50IG1zZ251bSwg
Y29uc3QgY2hhciAqZXJydGV4dCwgc3RydWN0IHJ3X2luZm8gKnJ3aSkKewoJcndpPXJ3aTsKCmNo
YXIJKmVycm1zZz1tYWtlZXJybXNndGV4dChtc2dudW0sIGVycnRleHQpOwoKCWNvdXQgPDwgZXJy
bXNnIDw8IGZsdXNoOwoJZnJlZShlcnJtc2cpOwp9CgpzdGF0aWMgaW50IGdldHNlbmRlcihzdHJ1
Y3QgcndfdHJhbnNwb3J0ICptb2R1bGUpCnsKc3RydWN0CW1haWxmcm9taW5mbyBmcm9taW5mbzsK
Q1N0cmluZwlidWY7CkNTdHJpbmcJc2VuZGVyOwpDU3RyaW5nCWVudmlkOwpBbGlhc1NlYXJjaAlh
c2VhcmNoOwoKCWZyb21pbmZvLmFzcHRyPSAmYXNlYXJjaDsKCWZyb21pbmZvLmZsYWc9MTsKCWZy
b21pbmZvLm1vZHVsZT1tb2R1bGU7Cglmcm9taW5mby5kc25mb3JtYXQ9MDsKCWZyb21pbmZvLmVu
dmlkPTA7CgoJaWYgKGJ1ZiA8PCBjaW4pCXJldHVybiAoMSk7CgpjaGFyCSpwPWJ1Zi5HZXRCdWZm
ZXIoLTEpOwpjaGFyCSpxPXN0cmNocihwLCAnXHQnKTsKCglpZiAocSkKCXsKCQkqcSsrPTA7CgoJ
CXdoaWxlICgqcSAmJiAqcSAhPSAnXHQnKQoJCXsKCQkJaWYgKCpxID09ICdWJykJdmVycGZsYWc9
MTsKCQkJZWxzZSBmcm9taW5mby5kc25mb3JtYXQ9ICpxOwoJCQkrK3E7CgkJfQoKCQlpZiAoKnEp
CSsrcTsKCgkJaWYgKCpxKQoJCXsKCQkJZW52aWQ9cTsKCQkJZnJvbWluZm8uZW52aWQ9ICZlbnZp
ZDsKCQl9Cgl9CglpZiAoZnJvbWluZm8uZHNuZm9ybWF0ID09IDAgJiYgKHE9Z2V0ZW52KCJEU05S
RVQiKSkgIT0gMCkKCQl3aGlsZSAoKnEpCgkJewoJCQlpZiAoKnEgPT0gJ1YnKQl2ZXJwZmxhZz0x
OwoJCQllbHNlIGZyb21pbmZvLmRzbmZvcm1hdD0gKnE7CgkJCSsrcTsKCQl9CgoJc3dpdGNoIChm
cm9taW5mby5kc25mb3JtYXQpCXsKCWNhc2UgJ2YnOgoJY2FzZSAnRic6CgkJZnJvbWluZm8uZHNu
Zm9ybWF0PSdGJzsKCQlicmVhazsKCWNhc2UgJ2gnOgoJY2FzZSAnSCc6CgkJZnJvbWluZm8uZHNu
Zm9ybWF0PSdIJzsKCQlicmVhazsKCWRlZmF1bHQ6CgkJZnJvbWluZm8uZHNuZm9ybWF0PTA7CgkJ
YnJlYWs7Cgl9CglidWYuUmVsZWFzZUJ1ZmZlcigtMSk7CglzZW5kZXI9YnVmOwoKCWlmICgoIWZy
b21pbmZvLmVudmlkIHx8ICEqZnJvbWluZm8uZW52aWQpICYmCgkJKHA9Z2V0ZW52KCJEU05FTlZJ
RCIpKSAmJiAqcCkKCXsKCQlmb3IgKGVudmlkPSIiOyAqcDsgcCsrKQoJCXsKCQkJaWYgKCpwIDwg
JyEnIHx8ICpwID4gJ34nIHx8ICpwID09ICcrJyB8fAoJCQkJKnAgPT0gJz0nKQoJCQl7CgkJCXN0
YXRpYyBjaGFyIGhleGNoYXJbMTddPSIwMTIzNDU2Nzg5QUJDREVGIjsKCgkJCQllbnZpZCArPSAn
Kyc7CgkJCQllbnZpZCArPSBoZXhjaGFyWyAoKCpwKSA+PiA0KSAmIDE1XTsKCQkJCWVudmlkICs9
IGhleGNoYXJbICgqcCkgJiAxNV07CgkJCX0KCQkJZWxzZQllbnZpZCArPSAqcDsKCQl9CgkJZnJv
bWluZm8uZW52aWQ9ICZlbnZpZDsKCX0KCnN0cnVjdAlyZmM4MjJ0ICpyZmNwPXJ3X3Jld3JpdGVf
dG9rZW5pemUoc2VuZGVyKTsKc3RydWN0CXJ3X2luZm8JcndpOwoKCXJ3X2luZm9faW5pdCgmcndp
LCByZmNwLT50b2tlbnMsIG1haWxmcm9tZXJyKTsKCglyd2kubW9kZT1SV19FTlZTRU5ERVJ8Uldf
U1VCTUlUOwoJcndpLnNlbmRlcj1OVUxMOwoJcndpLnVkYXRhPSh2b2lkICopJmZyb21pbmZvOwoJ
cndpLnNtb2R1bGU9bW9kdWxlLT5uYW1lOwoJcndfcmV3cml0ZV9tb2R1bGUobW9kdWxlLCAmcndp
LCBnZXRyY3B0cyk7CglyZmM4MjJ0X2ZyZWUocmZjcCk7CgoJcmV0dXJuIChmcm9taW5mby5mbGFn
KTsKfQoKc3RhdGljIGludCBjaGVja2Rucyhjb25zdCBjaGFyICpzZW5kZXIpCnsKc3RydWN0CXJm
YzEwMzVfbXhsaXN0ICpteGxpc3QsICpwOwpjb25zdCBjaGFyICpoPTAsICpxOwpjaGFyCSpyOwpp
bnQJZG9jaGVja2RvbWFpbj0xLCBkb2NoZWNrYm9maD0wOwoKCXE9Z2V0ZW52KCJCT0ZIQ0hFQ0tE
TlMiKTsKCWlmICghcSB8fCAhKnEgfHwgKnEgPT0gJzAnKQoJCWRvY2hlY2tkb21haW49MDsKCglp
ZiAoKHE9Z2V0ZW52KCJCT0ZIQkFOQlJPS0VOU0VSVkVSUyIpKSAhPSAwKQoJewoJCWRvY2hlY2ti
b2ZoPWF0b2kocSk7CgkJaD1jb3VyaWVyZGlyKCk7Cgl9CgoJaWYgKCFkb2NoZWNrZG9tYWluICYm
ICFkb2NoZWNrYm9maCkJcmV0dXJuICgwKTsKCglpZiAoKHNlbmRlcj1zdHJyY2hyKHNlbmRlciwg
J0AnKSkgPT0gMCkJcmV0dXJuICgwKTsKCSsrc2VuZGVyOwoKCXN3aXRjaCAocmZjMTAzNV9teGxp
c3RfY3JlYXRlKCZyZmMxMDM1X2RlZmF1bHRfcmVzb2x2ZXIsCgkJc2VuZGVyLCAmbXhsaXN0KSkJ
ewoJY2FzZSBSRkMxMDM1X01YX09LOgoKCQlmb3IgKHA9bXhsaXN0OyBwOyBwPXAtPm5leHQpCgkJ
ewoJCVJGQzEwMzVfQUREUglhZGRyOwoJCWNoYXIJYnVmW1JGQzEwMzVfTlRPQUJVRlNJWkVdOwoJ
CWNvbnN0CWNoYXIgKnE7CgkJc3RydWN0CXN0YXQgc3RhdF9idWY7CgoJCQlpZiAocmZjMTAzNV9z
b2NrYWRkcmlwKCZwLT5hZGRyZXNzLAoJCQkJCXNpemVvZihwLT5hZGRyZXNzKSwgJmFkZHIpKQoJ
CQkJY29udGludWU7CgoJCQlyZmMxMDM1X250b2EoJmFkZHIsIGJ1Zik7CgkJCWlmIChzdHJjbXAo
YnVmLCBwLT5ob3N0bmFtZSkgPT0gMCkKCQkJCWJyZWFrOwoJCQlpZiAoZG9jaGVja2JvZmggPD0g
MCkJY29udGludWU7CgoJCQlxPWJ1ZjsKI2lmCVJGQzEwMzVfSVBWNgoJCQlpZiAoSU42X0lTX0FE
RFJfVjRNQVBQRUQoJmFkZHIpKQoJCQl7CgkJCQlxPXN0cnJjaHIocSwgJzonKTsKCQkJCWlmIChx
KQkrK3E7CgkJCQllbHNlIHE9YnVmOwoJCQl9CiNlbmRpZgoJCQlyPShjaGFyICopY291cmllcl9t
YWxsb2Moc2l6ZW9mKFRNUERJUiAiL2Jyb2tlbi8iKSsKCQkJCXN0cmxlbihxKSk7CgoJCQlzdHJj
YXQoc3RyY3B5KHIsIFRNUERJUiAiL2Jyb2tlbi8iKSwgcSk7CgoJCQlpZiAoc3RhdChyLCAmc3Rh
dF9idWYpID09IDAgJiYgc3RhdF9idWYuc3Rfc2l6ZSA+PQoJCQkJZG9jaGVja2JvZmgpCgkJCXsK
CQkJCXJmYzEwMzVfbXhsaXN0X2ZyZWUobXhsaXN0KTsKCQkJCWZyZWUocik7CgkJCQljb3V0IDw8
ICI1MTctVGhlIG1haWwgc2VydmVyIGF0IElQIGFkZHJlc3MgIiA8PCBidWYgPDwgIiB2aW9sYXRl
cyBSRkMgODIxLiIgPDwgZW5kbCA8PCBmbHVzaDsKCQkJCWNvdXQgPDwgIjUxNy1Tb3JyeSwgd2Ug
Y2Fubm90IGFjY2VwdCBtYWlsIHdpdGggYSByZXR1cm4gYWRkcmVzcyBwb2ludGluZyB0byBhIGJy
b2tlbiIgPDwgZW5kbCA8PCBmbHVzaDsKCQkJCWNvdXQgPDwgIjUxNyBtYWlsIHNlcnZlci4gIFNl
ZSA8VVJMOmZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzgyMS50eHQ+LiIgPDwgZW5kbCA8
PCBmbHVzaDsKCQkJCXJldHVybiAoLTEpOwoJCQl9CgkJCWZyZWUocik7CgkJfQoJCXJmYzEwMzVf
bXhsaXN0X2ZyZWUobXhsaXN0KTsKCQlpZiAocCA9PSAwKQlyZXR1cm4gKDApOwoJCWNvdXQgPDwg
IjUxNy1NWCByZWNvcmRzIGZvciAiIDw8IHNlbmRlciA8PCAiIHZpb2xhdGUgc2VjdGlvbiAzLjMu
OSBvZiBSRkMgMTAzNS4iIDw8IGVuZGw7CgkJYnJlYWs7CgljYXNlIFJGQzEwMzVfTVhfSEFSREVS
UjoKCQlpZiAoIWRvY2hlY2tkb21haW4pCXJldHVybiAoMCk7CgkJY291dCA8PCAiNTE3LURvbWFp
biBkb2VzIG5vdCBleGlzdDogIiA8PCBzZW5kZXIgPDwgIi4iIDw8IGVuZGw7CgkJYnJlYWs7Cglj
YXNlIFJGQzEwMzVfTVhfQkFERE5TOgoJCWlmICghZG9jaGVja2RvbWFpbikJcmV0dXJuICgwKTsK
CQljb3V0IDw8ICI1MTctUkZDIDEwMzUgdmlvbGF0aW9uOiByZWN1cnNpdmUgQ05BTUUgcmVjb3Jk
cyBmb3IgIiA8PCBzZW5kZXIgPDwgIi4iIDw8IGVuZGw7CgkJYnJlYWs7CglkZWZhdWx0OgoJCWlm
ICghZG9jaGVja2RvbWFpbikJcmV0dXJuICgwKTsKCQljb3V0IDw8ICI0MTcgRE5TIGxvb2t1cCBm
YWlsdXJlOiAiIDw8IHNlbmRlciA8PCAiLiAgVHJ5IGFnYWluIGxhdGVyLiIgPDwgZW5kbCA8PCBm
bHVzaDsKCQlyZXR1cm4gKC0xKTsKCX0KCgljb3V0IDw8ICI1MTcgSW52YWxpZCBkb21haW4sIHNl
ZSA8VVJMOmZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzEwMzUudHh0PiIgPDwgZW5kbCA8
PCBmbHVzaDsKCXJldHVybiAoLTEpOwp9CgpzdHJ1Y3QgcmNwdGluZm87CgpjbGFzcyBSY3B0QWxp
YXNIYW5kbGVyIDogcHVibGljIEFsaWFzSGFuZGxlciB7CnB1YmxpYzoKCVJjcHRBbGlhc0hhbmRs
ZXIoKTsKCX5SY3B0QWxpYXNIYW5kbGVyKCk7Cgl2b2lkCUFsaWFzKGNvbnN0IGNoYXIgKik7CglT
dWJtaXRGaWxlICpzdWJtaXRwdHI7CglzdHJ1Y3QgcmNwdGluZm8gKnJjcHRpbmZvcHRyOwoJQ1N0
cmluZwlsaXN0bmFtZTsKCXVuc2lnbmVkIGxpc3Rjb3VudDsKCUNTdHJpbmcJYWxpYXNidWY7CgoJ
Q1N0cmluZwlhYm9ydG1zZzsKCWludCBhYm9ydGVkOwoJaW50IHJldF9jb2RlOwoKCXN0cnVjdCBy
ZmM4MjJ0b2tlbiAqYWRkcmVzc3QsICpzZW5kZXJ0OwoJc3RydWN0IHJ3X3RyYW5zcG9ydCAqc291
cmNlbW9kdWxlOwp9IDsKCnN0cnVjdAlyY3B0aW5mbyB7CglzdHJ1Y3QgcndfdHJhbnNwb3J0ICpt
b2R1bGU7CglzdHJ1Y3QgcmZjODIydG9rZW4gKnNlbmRlcnQ7CglDU3RyaW5nIHByd19yZWNlaXBp
ZW50OwkvKiBQcmUtcmV3cml0ZSByZWNpcGllbnQgKi8KCUNTdHJpbmcgKm9yZWNlaXBpZW50Owkv
KiBEU04gb3JpZ2luYWwgcmVjZWlwaWVudCAqLwoJQ1N0cmluZyAqZHNuOwkJLyogRFNOIGZsYWdz
ICovCglBbGlhc1NlYXJjaCAqYXNwdHI7CglpbnQgaGFzX3JlY2VpcGllbnQ7CglSY3B0QWxpYXNI
YW5kbGVyIHJjcHRhbGlhczsKCVN1Ym1pdEZpbGUgc3VibWl0ZmlsZTsKCUNTdHJpbmcJZXJybXNn
dGV4dDsKCWludAllcnJmbGFnOwoJdW5zaWduZWQgcmNwdG51bTsKCWludAl3aGl0ZWxpc3RlZF9v
bmx5OwkvKiBTcGFtIGZpbHRlciAtIGFsbG93IHdoaXRlbGlzdGVkCgkJCQkJKiogcmVjaXBpZW50
cyBvbmx5LgoJCQkJCSovCglpbnQJbm9ud2hpdGVsaXN0ZWRfb25seTsJLyogU3BhbSBmaWx0ZXIg
LSBhbGxvdyBub253aGl0ZWxpc3RlZAoJCQkJCSoqIHJlY2lwaWVudHMgb25seS4KCQkJCQkqLwoJ
fSA7CgpSY3B0QWxpYXNIYW5kbGVyOjpSY3B0QWxpYXNIYW5kbGVyKCkKewp9CgpSY3B0QWxpYXNI
YW5kbGVyOjp+UmNwdEFsaWFzSGFuZGxlcigpCnsKfQoKc3RhdGljIGludCBkb19yZWNlaXBpZW50
X2ZpbHRlcihzdHJ1Y3QgcndfaW5mbyAqLCBzdHJ1Y3QgcndfaW5mb192cmZ5ICosCglDU3RyaW5n
ICYpOwoKdm9pZCBSY3B0QWxpYXNIYW5kbGVyOjpBbGlhcyhjb25zdCBjaGFyICpwKQp7CglpZiAo
YWJvcnRlZCkJcmV0dXJuOwoKCWlmIChsaXN0Y291bnQgPT0gMCkKCXsKCXN0cnVjdCByd19pbmZv
CXJ3aTsKCXN0cnVjdCByd19pbmZvX3ZyZnkgcml2OwoJQ1N0cmluZwllcnJtc2c7CgoJCXJpdi5y
d3IuYnVmPTA7CgkJcml2LnJ3ci5lcnJtc2c9MDsKCQlyaXYubW9kdWxlPTA7CgkJcml2Lmhvc3Q9
MDsKCQlyaXYuYWRkcj0wOwoKCQlyd19pbmZvX2luaXQoJnJ3aSwgYWRkcmVzc3QsIHJ3X2Vycl9m
dW5jKTsKCQlyd2kuc2VuZGVyPXNlbmRlcnQ7CgkJcndpLm1vZGU9UldfU1VCTUlUOwoJCXJ3aS51
ZGF0YT0gKHZvaWQgKikmcml2OwoJCXJ3aS5zbW9kdWxlPXNvdXJjZW1vZHVsZS0+bmFtZTsKCgkJ
cml2Lm1vZHVsZT1yd19zZWFyY2hfdHJhbnNwb3J0KCJsb2NhbCIpOwoJCXJpdi5yd3IuZXJybXNn
PTA7CgoJY29uc3QgY2hhciAqY2ZhPWNvbmZpZ19maWx0ZXJhY2N0KCk7CgoJCS8vIE9rLCB3ZSB3
YW50IHRoZSAiaG9zdCIgcG9ydGlvbiB0byBiZQoJCS8vIGFsaWFzIWFsaWFzLWFkZHJlc3MhdWlk
IWdpZCFjZmEhIQoKCWludAlyYz0wOwoKCQlpZiAoY2ZhICYmICpjZmEpCgkJewoJCXN0cnVjdAlz
dGF0CXN0YXRfYnVmOwoKCQkJaWYgKHN0YXQoY2ZhLCAmc3RhdF9idWYpKQoJCQl7CgkJCQlhYm9y
dGVkPTE7CgkJCQlhYm9ydG1zZz0iNDAwIHN0YXQoKSBmYWlsZWQgb24gYWxpYXNmaWx0ZXJhY2N0
LiI7CgkJCQlyZXR1cm47CgkJCX0KCgkJY2hhcgl1aWRidWZbTlVNQlVGU0laRV0sIGdpZGJ1ZltO
VU1CVUZTSVpFXTsKCgkJCXN0cl91aWRfdChzdGF0X2J1Zi5zdF91aWQsIHVpZGJ1Zik7CgkJCXN0
cl9naWRfdChzdGF0X2J1Zi5zdF9naWQsIGdpZGJ1Zik7CgoJY2hhcgkqZmE9KGNoYXIgKiljb3Vy
aWVyX21hbGxvYyhzdHJsZW4oY2ZhKStzdHJsZW4odWlkYnVmKSsKCQkJCXN0cmxlbihnaWRidWYp
K3N0cmxlbihsaXN0bmFtZSkrCgkJCQlzaXplb2YoImFsaWFzIWFsaWFzLSEhISEhIikpOwoKCQkJ
c3RyY3B5KGZhLCAiYWxpYXMhYWxpYXMtIik7CgkJCXN0cmNhdChmYSwgbGlzdG5hbWUpOwoJCQlz
dHJjYXQoZmEsICIhIik7CgkJCXN0cmNhdChmYSwgdWlkYnVmKTsKCQkJc3RyY2F0KGZhLCAiISIp
OwoJCQlzdHJjYXQoZmEsIGdpZGJ1Zik7CgkJCXN0cmNhdChmYSwgIiEiKTsKCQkJc3RyY2F0KGZh
LCBjZmEpOwoJCQlzdHJjYXQoZmEsICIhISIpOwoKCQkJcml2Lmhvc3Q9ZmE7CgkJCXJpdi5hZGRy
PSIiOwkvLyBVbnVzZWQsIGZvciBub3cKCgkJCXJjPXJpdi5tb2R1bGUgPwoJCQkJZG9fcmVjZWlw
aWVudF9maWx0ZXIoJnJ3aSwgJnJpdiwgZXJybXNnKTowOwoJCQlmcmVlKGZhKTsKCQl9CgoJCXJl
dF9jb2RlPXJjOwoKCQlpZiAocmMpCgkJewoJCQlpZiAocmMgIT0gOTkpCgkJCXsKCQkJCWFib3J0
ZWQ9MTsKCQkJCWFib3J0bXNnPWVycm1zZzsKCQkJfQoKCQkJaWYgKHJjcHRpbmZvcHRyLT53aGl0
ZWxpc3RlZF9vbmx5KQoJCQl7CgkJCQlhYm9ydGVkPTE7CgkJCQlhYm9ydG1zZz15b3VfYXJlX25v
dF93aGl0ZWxpc3RlZDsKCQkJfQoJCQllbHNlCgkJCQlyY3B0aW5mb3B0ci0+bm9ud2hpdGVsaXN0
ZWRfb25seT0xOwoJCX0KCQllbHNlCgkJewoJCQlpZiAocmNwdGluZm9wdHItPm5vbndoaXRlbGlz
dGVkX29ubHkpCgkJCXsKCQkJCWFib3J0ZWQ9MTsKCQkJCWFib3J0bXNnPXlvdV9hcmVfd2hpdGVs
aXN0ZWQ7CgkJCX0KCQkJZWxzZQoJCQkJcmNwdGluZm9wdHItPndoaXRlbGlzdGVkX29ubHk9MTsK
CQl9CgkJCQoJCWlmIChhYm9ydGVkKQlyZXR1cm47CgoJCWFsaWFzYnVmPXA7CgkJKytsaXN0Y291
bnQ7CgkJcmV0dXJuOwoJfQoKCWlmIChsaXN0Y291bnQgPT0gMSkKCXsKCQlpZiAoc3VibWl0cHRy
LT5DaGtSZWNpcGllbnQoYWxpYXNidWYpID09IDApCgkJCXN1Ym1pdHB0ci0+QWRkUmVjZWlwaWVu
dChhbGlhc2J1ZiwgIiIsICJOIiwgMCk7Cgl9CgoJaWYgKHN1Ym1pdHB0ci0+Q2hrUmVjaXBpZW50
KHApID09IDApCgkJc3VibWl0cHRyLT5BZGRSZWNlaXBpZW50KHAsICIiLCAiTiIsIDApOwoJKyts
aXN0Y291bnQ7Cn0KCnN0YXRpYyB2b2lkIGdldHJjcHQoc3RydWN0IHJ3X2luZm8gKnJ3aSk7CnN0
YXRpYyB2b2lkIHJjcHR0b2VycihpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IHJ3X2luZm8gKik7
CgpzdGF0aWMgdm9pZCBnZXRyY3B0cyhzdHJ1Y3QgcndfaW5mbyAqcndpKQp7CnN0cnVjdCBtYWls
ZnJvbWluZm8gKm1mPShzdHJ1Y3QgbWFpbGZyb21pbmZvICopcndpLT51ZGF0YTsKc3RydWN0IHJm
YzgyMnRva2VuICphZGRyZXNzdD1yd2ktPnB0cjsKaW50CWhhc3JjcHRzPTA7CkNTdHJpbmcJaW1w
bGljaXRlcnJtc2c7CgoJaWYgKHJ3X3N5bnRheGNoayhhZGRyZXNzdCkpCgl7CgkJY291dCA8PCAi
NTE3IFN5bnRheCBlcnJvci4iIDw8IGVuZGwgPDwgZmx1c2g7CgkJcmV0dXJuOwoJfQoKY2hhcgkq
c2VuZGVyPXJmYzgyMl9nZXR0b2soYWRkcmVzc3QpOwoKCWlmICghc2VuZGVyKQljbG9nX21zZ19l
cnJubygpOwoKCWlmIChjaGVja2RucyhzZW5kZXIpKQlyZXR1cm47CgoJY291dCA8PCAiMjUwIE9r
LiIgPDwgZW5kbCA8PCBmbHVzaDsKCgltZi0+YXNwdHItPk9wZW4obWYtPm1vZHVsZSk7CgpzdHJ1
Y3QJcmNwdGluZm8gbXlfcmNwdGluZm87CkNTdHJpbmcJcmVjZWlwaWVudDsKQ1N0cmluZwlvcmVj
ZWlwaWVudDsKQ1N0cmluZwlkc247CgoJbXlfcmNwdGluZm8ubW9kdWxlPW1mLT5tb2R1bGU7Cglt
eV9yY3B0aW5mby5zZW5kZXJ0PWFkZHJlc3N0OwoJbXlfcmNwdGluZm8uYXNwdHI9bWYtPmFzcHRy
OwoJbXlfcmNwdGluZm8uaGFzX3JlY2VpcGllbnQ9MDsKCW15X3JjcHRpbmZvLnJjcHRhbGlhcy5z
dWJtaXRwdHI9ICZteV9yY3B0aW5mby5zdWJtaXRmaWxlOwoJbXlfcmNwdGluZm8ucmNwdGFsaWFz
LnJjcHRpbmZvcHRyPSAmbXlfcmNwdGluZm87CgoJbXlfcmNwdGluZm8uc3VibWl0ZmlsZS5TZW5k
aW5nTW9kdWxlKCBtZi0+bW9kdWxlLT5uYW1lICk7CgoJbXlfcmNwdGluZm8uc3VibWl0ZmlsZS5T
ZW5kZXIocmVjZWl2ZWRmcm9tbXRhLCBzZW5kZXIsCgkJCShtZi0+ZW52aWQgJiYgbWYtPmVudmlk
LT5HZXRMZW5ndGgoKSA+IDAgPwoJCQkgICAgICAgKGNvbnN0IGNoYXIgKikqbWYtPmVudmlkOiAo
Y29uc3QgY2hhciAqKTApLAoJCQltZi0+ZHNuZm9ybWF0KTsKCW15X3JjcHRpbmZvLm9yZWNlaXBp
ZW50PSAmb3JlY2VpcGllbnQ7CglteV9yY3B0aW5mby5kc249ICZkc247CglteV9yY3B0aW5mby5y
Y3B0bnVtPTA7CglteV9yY3B0aW5mby53aGl0ZWxpc3RlZF9vbmx5PTA7CglteV9yY3B0aW5mby5u
b253aGl0ZWxpc3RlZF9vbmx5PTA7CgoJZnJlZShzZW5kZXIpOwoKCWZvciAoOzsgKQoJewoJCWlm
IChyZWNlaXBpZW50IDw8IGNpbikJcmV0dXJuOwoJCWlmIChyZWNlaXBpZW50LkdldExlbmd0aCgp
ID09IDApCWJyZWFrOwoKCWNoYXIJKnA9cmVjZWlwaWVudC5HZXRCdWZmZXIoLTEpLCAqcTsKCgkJ
aWYgKChwPXN0cmNocihwLCAnXHQnKSkgIT0gTlVMTCkKCQl7CgkJCSpwKys9MDsKCQkJcT1wOwoJ
CQlpZiAoKHA9c3RyY2hyKHAsICdcdCcpKSAhPSBOVUxMKQoJCQl7CgkJCQkqcCsrPTA7CgkJCQlv
cmVjZWlwaWVudD1wOwoJCQl9CgkJCWVsc2UKCQkJCW9yZWNlaXBpZW50PSIiOwoJCQlkc249cTsK
CQl9CgkJZWxzZQoJCXsKCQkJb3JlY2VpcGllbnQ9IiI7CgkJCWRzbj0iIjsKCQl9CgkJcmVjZWlw
aWVudC5SZWxlYXNlQnVmZmVyKC0xKTsKCglzdHJ1Y3QJcndfaW5mbyByd2k7CglzdHJ1Y3QJcmZj
ODIydCAqcmZjcDsKCgkJcmZjcD1yd19yZXdyaXRlX3Rva2VuaXplKHJlY2VpcGllbnQpOwoJCXJ3
X2luZm9faW5pdCgmcndpLCByZmNwLT50b2tlbnMsIHJjcHR0b2Vycik7CgkJcndpLm1vZGU9Uldf
RU5WUkVDSVBJRU5UfFJXX1NVQk1JVDsKCQlyd2kuc2VuZGVyPWFkZHJlc3N0OwoJCXJ3aS5zbW9k
dWxlPW1mLT5tb2R1bGUtPm5hbWU7CgkJcndpLnVkYXRhPSh2b2lkICopJm15X3JjcHRpbmZvOwoJ
CW15X3JjcHRpbmZvLmVycmZsYWc9MDsKCQlteV9yY3B0aW5mby5wcndfcmVjZWlwaWVudD1yZWNl
aXBpZW50OwoKCQlyd19yZXdyaXRlX21vZHVsZShtZi0+bW9kdWxlLCAmcndpLCBnZXRyY3B0KTsK
CgkJLy8gQ0FOTk9UIHJlamVjdCBpZiBlcnJmbGFnPTAgYW55IG1vcmUsIGR1ZSB0byBmaWx0ZXJp
bmcKCQkvLyBzeW5jcm9uaXphdGlvbi4KCgkJcmZjODIydF9mcmVlKHJmY3ApOwoJCWhhc3JjcHRz
PTE7CgoJCWlmIChteV9yY3B0aW5mby5lcnJmbGFnID4gMCkKCQl7CgkJY29uc3QgY2hhciAqZXJy
bXNnPW15X3JjcHRpbmZvLmVycm1zZ3RleHQ7CgkJaW50CWw9YXRvaShlcnJtc2cpOwoKCQkJaWYg
KGwgPCA0MDAgfHwgbCA+IDU5OSkJbD01MTE7CgkJCW1haWxmcm9tZXJyKGwsIGVycm1zZywgMCk7
CgkJfQoJCWVsc2UKCQl7CgkJCWNvdXQgPDwgIjI1MCBPay4iIDw8IGVuZGwgPDwgZmx1c2g7CgkJ
CW15X3JjcHRpbmZvLmhhc19yZWNlaXBpZW50PTE7CgkJCSsrbXlfcmNwdGluZm8ucmNwdG51bTsK
CQl9Cgl9CgoJaWYgKGhhc3JjcHRzKQoJewoJCWlmICghbXlfcmNwdGluZm8uaGFzX3JlY2VpcGll
bnQpCXJldHVybjsKCX0KCgkvLyBSZWFkIGhlYWRlcnMKCkNTdHJpbmcJaGVhZGVyLCBoZWFkZXJu
YW1lLCBoZWFkZXJuYW1lb3JpZzsKQ1N0cmluZwlsaW5lOwpDU3RyaW5nCWFjY3VtdWxhdGVkX2Vy
cm1zZzsKaW50CWhhc19tc2dpZD0wOwppbnQJaGFzX2RhdGU9MDsKaW50CWhhc190b2NjPTA7CnNp
emVfdAloZWFkZXJjbnQ9NTAwOwppbnQJaGVhZGVybGltaXQ9MTAwMDAwOwpjb25zdAljaGFyICpw
OwoKCW15X3JjcHRpbmZvLnN1Ym1pdGZpbGUuTWVzc2FnZVN0YXJ0KCk7CglsaW5lPSJSZWNlaXZl
ZDogZnJvbSAiOwoKCWZvciAocD1zdHJjaHIocmVjZWl2ZWRmcm9tbXRhLCAnOycpOyAqKytwID09
ICcgJzsgKQoJCTsKCglsaW5lICs9IHA7CgoJaWYgKGlkZW50aW5mbyAmJiAqaWRlbnRpbmZvKQoJ
ewoJCWxpbmUgKz0gIlxuICAoIjsKCQlsaW5lICs9IGlkZW50aW5mbzsKCQlsaW5lICs9ICcpJzsK
CX0KCglsaW5lICs9ICJcbiAgYnkgIjsKCWxpbmUgKz0gY29uZmlnX21lKCk7CgoJbGluZSArPSAi
IHdpdGggIjsKCglsaW5lICs9IG1mLT5tb2R1bGUtPm5hbWU7CglsaW5lICs9ICI7ICI7CglsaW5l
ICs9IHJmYzgyMl9ta2RhdGUoc3VibWl0X3RpbWUpOwoJbGluZSArPSAiXG4iOwoJbXlfcmNwdGlu
Zm8uc3VibWl0ZmlsZS5NZXNzYWdlKGxpbmUpOwoKdW5zaWduZWQJcmVjZWl2ZWRfY250PTA7CgoJ
d2hpbGUgKGxpbmUucmVhZGxpbmUoY2luLCA1MDAwKSA+IDApCgl7CglzdHJ1Y3QJcmZjODIydCAq
cmZjcDsKCXN0cnVjdAlyZmM4MjJhCSpyZmNhOwoJaW50CWk7CglpbnQJbDsKCWludAloZWFkZXJs
OwoKCQlpZiAoKGk9Y2luLmdldCgpKSAhPSBFT0YgJiYgaSAhPSAnXG4nKQoJCXsKCQkJaGVhZGVy
Y250PTA7CgkJCWNvbnRpbnVlOwkvLyBTd2FsbG93IHVud2FudGVkIG1lc3NhZ2UKCQl9CgoJCWw9
bGluZS5HZXRMZW5ndGgoKTsKCgkJaWYgKGwgJiYgbGluZVtsLTFdID09ICdccicpCgkJCWxpbmUu
Q2hvcCgpOwkvLyBTdHJpcCB0cmFpbGluZyBDUgoKCQloZWFkZXI9bGluZTsKCgkJd2hpbGUgKCAo
KGk9Y2luLmdldCgpKSAhPSBFT0YgPyAoY2luLnB1dGJhY2soaSksIGkpOmkpID09ICcgJwoJCQl8
fCBpID09ICdcdCcpCgkJewoJCQlsaW5lLnJlYWRsaW5lKGNpbiwgNTAwMCk7CgkJCWlmICgoaT1j
aW4uZ2V0KCkpICE9IEVPRiAmJiBpICE9ICdcbicpCgkJCXsKCQkJCWhlYWRlcmNudD0wOwoJCQkJ
Y29udGludWU7CS8vIFN3YWxsb3cgdW53YW50ZWQgbWVzc2FnZQoJCQl9CgkJCWw9bGluZS5HZXRM
ZW5ndGgoKTsKCQkJaWYgKGwgJiYgbGluZVtsLTFdID09ICdccicpCgkJCQlsaW5lLkNob3AoKTsJ
Ly8gU3RyaXAgdHJhaWxpbmcgQ1IKCQkJbD1saW5lLkdldExlbmd0aCgpICsgaGVhZGVyLkdldExl
bmd0aCgpOwoJCQlpZiAobCA+IGhlYWRlcmxpbWl0IHx8IGwgPiA1MDAwKQoJCQkJaGVhZGVyY250
PTA7CgkJCWlmIChoZWFkZXJjbnQgPT0gMCkJY29udGludWU7CgkJCWhlYWRlciArPSAnXG4nOwoJ
CQloZWFkZXIgKz0gbGluZTsKCQkJaWYgKGkgPT0gRU9GKQlicmVhazsKCQl9CgkJaGVhZGVyICs9
ICdcbic7CgkJaWYgKGhlYWRlci5HZXRMZW5ndGgoKSA+IGhlYWRlcmxpbWl0KQoJCQloZWFkZXJj
bnQ9MDsKCgkJaWYgKGhlYWRlcmNudCA9PSAwIHx8IC0taGVhZGVyY250ID09IDApCWNvbnRpbnVl
OwoJCWhlYWRlcmxpbWl0IC09IChoZWFkZXJsPWhlYWRlci5HZXRMZW5ndGgoKSk7CgoJCWk9aGVh
ZGVyLkZpbmQoJzonKTsKCgkJaWYgKGkgPCAwKQoJCXsKCQkJbXlfcmNwdGluZm8uc3VibWl0Zmls
ZS5NZXNzYWdlKGhlYWRlcik7CgkJCWNvbnRpbnVlOwoJCX0KCgkJaGVhZGVybmFtZW9yaWc9aGVh
ZGVybmFtZT1oZWFkZXIuTGVmdChpKTsKCQloZWFkZXI9aGVhZGVyLk1pZChpKzEpOwoJCWhlYWRl
cm5hbWUuTWFrZUxvd2VyKCk7CgoJCWlmIChoZWFkZXJuYW1lID09ICJyZWNlaXZlZCIpCSsrcmVj
ZWl2ZWRfY250OwoKCQkvLwoJCS8vIElmIG5vIHJlY2VpcGllbnQgd2VyZSBsaXN0ZWQsIGdyYWIg
dGhlbSBmcm9tIHRoZSBoZWFkZXIuCgkJLy8KCgkJaWYgKCFoYXNyY3B0cyAmJiAoaGVhZGVybmFt
ZSA9PSAiYmNjIiB8fAoJCQkob25seWJjYyA9PSAwICYmICgKCQkJaGVhZGVybmFtZSA9PSAidG8i
IHx8CgkJCWhlYWRlcm5hbWUgPT0gImNjIikpKSkKCQl7CgkJCXJmY3A9cndfcmV3cml0ZV90b2tl
bml6ZShoZWFkZXIpOwoJCQlyZmNhPXJmYzgyMmFfYWxsb2MocmZjcCk7CgkJCWlmICghcmZjYSkJ
Y2xvZ19tc2dfZXJybm8oKTsKCgkJCWZvciAoaT0wOyBpPHJmY2EtPm5hZGRyczsgaSsrKQoJCQl7
CgkJCQlpZiAocmZjYS0+YWRkcnNbaV0udG9rZW5zID09IE5VTEwpCgkJCQkJY29udGludWU7CgoJ
CQlzdHJ1Y3QJcndfaW5mbyByd2k7CgoJCQkJcndfaW5mb19pbml0KCZyd2ksIHJmY2EtPmFkZHJz
W2ldLnRva2VucywKCQkJCQkJCQlyY3B0dG9lcnIpOwoJCQkJcndpLm1vZGU9UldfRU5WUkVDSVBJ
RU5UfFJXX1NVQk1JVDsKCQkJCXJ3aS5zbW9kdWxlPW1mLT5tb2R1bGUtPm5hbWU7CgkJCQlyd2ku
c2VuZGVyPWFkZHJlc3N0OwoJCQkJcndpLnVkYXRhPSh2b2lkICopJm15X3JjcHRpbmZvOwoJCQkJ
bXlfcmNwdGluZm8uZXJyZmxhZz0wOwoJCQkJKCpteV9yY3B0aW5mby5vcmVjZWlwaWVudCkgPSAi
IjsKCQkJCSgqbXlfcmNwdGluZm8uZHNuKSA9ICIiOwoKCQkJY2hhcgkqcD1yZmM4MjJfZ2V0dG9r
KHJmY2EtPmFkZHJzW2ldLnRva2Vucyk7CgkJCQlteV9yY3B0aW5mby5wcndfcmVjZWlwaWVudD1w
OwoJCQkJZnJlZShwKTsKCgkJCQlyd19yZXdyaXRlX21vZHVsZShtZi0+bW9kdWxlLCAmcndpLCBn
ZXRyY3B0KTsKCgkJLy8gQ0FOTk9UIHJlamVjdCBpZiBlcnJmbGFnPTAgYW55IG1vcmUsIGR1ZSB0
byBmaWx0ZXJpbmcKCQkvLyBzeW5jcm9uaXphdGlvbi4KCgkJCQlpZiAobXlfcmNwdGluZm8uZXJy
ZmxhZyA+IDApCgkJCQl7CgkJCQkJYWNjdW11bGF0ZWRfZXJybXNnICs9CgkJCQkJCW15X3JjcHRp
bmZvLmVycm1zZ3RleHQ7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJbXlfcmNwdGluZm8uaGFz
X3JlY2VpcGllbnQ9MTsKCQkJCQkrK215X3JjcHRpbmZvLnJjcHRudW07CgkJCQl9CgkJCX0KCQkJ
cmZjODIyYV9mcmVlKHJmY2EpOwoJCQlyZmM4MjJ0X2ZyZWUocmZjcCk7CgkJfQoKCQkvLyBSZXdy
aXRlIGV2ZXJ5IFJGQzgyMiBoZWFkZXIgd2UgY2FuIGZpbmQuCgoJCWlmIChoZWFkZXJuYW1lID09
ICJiY2MiKQoJCXsKCQkJCQkvLyAuLi4gZXhjZXB0IHRoaXMgb25lCgoJCQloZWFkZXJsaW1pdCAr
PSBoZWFkZXJsOwoJCQkrK2hlYWRlcmNudDsKCQkJY29udGludWU7CgkJfQoKCWludAlpc3RvY2M9
MDsKCgkJaWYgKGhlYWRlcm5hbWUgPT0gInRvIiB8fCBoZWFkZXJuYW1lID09ICJjYyIpCgkJewoJ
CQlpc3RvY2M9MTsKCQkJaGFzX3RvY2M9MTsKCQl9CgoJCWlmIChpc3RvY2MgfHwgaGVhZGVybmFt
ZSA9PSAiZnJvbSIgfHwKCQkJaGVhZGVybmFtZSA9PSAicmVwbHktdG8iIHx8CgkJCWhlYWRlcm5h
bWUgPT0gInNlbmRlciIpCgkJewoJCWNoYXIJKmVycm1zZzsKCQljaGFyCSpuZXdfaGVhZGVyPXJ3
X3Jld3JpdGVfaGVhZGVyKG1mLT5tb2R1bGUsCgkJCQkoY29uc3QgY2hhciAqKWhlYWRlciwKCQkJ
CVJXX0hFQURFUnxSV19TVUJNSVQsIGFkZHJlc3N0LCAmZXJybXNnKTsKCgkJCWlmICghbmV3X2hl
YWRlcikKCQkJewoJCQkJYWNjdW11bGF0ZWRfZXJybXNnICs9IGVycm1zZzsKCQkJCWZyZWUoZXJy
bXNnKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJY29uc3QgY2hhciAqcDsKCQkJY2hhcgkqcTsKCgkJ
CQloZWFkZXI9IiI7CgkJCQlwPSIgIjsKCQkJCWZvciAocT1uZXdfaGVhZGVyOyAocT1zdHJ0b2so
cSwgIlxuIikpICE9IDA7CgkJCQkJcT0wKQoJCQkJewoJCQkJCWhlYWRlciArPSBwOwoJCQkJCWhl
YWRlciArPSBxOwoJCQkJCXA9IlxuICAgICI7CgkJCQl9CgkJCQlmcmVlKG5ld19oZWFkZXIpOwoJ
CQkJaGVhZGVyICs9ICdcbic7CgkJCX0KCQl9CgkJZWxzZSBpZiAoaGVhZGVybmFtZSA9PSAibWVz
c2FnZS1pZCIpCWhhc19tc2dpZD0xOwoJCWVsc2UgaWYgKGhlYWRlcm5hbWUgPT0gImRhdGUiKQlo
YXNfZGF0ZT0xOwoKCQkvLyBRdW90ZSBSZXR1cm4tUGF0aDoncyBhdCB0aGlzIHBvaW50CgoJCWlm
IChoZWFkZXJuYW1lID09ICJyZXR1cm4tcGF0aCIpCgkJCWhlYWRlcm5hbWVvcmlnPSI+IitoZWFk
ZXJuYW1lb3JpZzsKCgkJbXlfcmNwdGluZm8uc3VibWl0ZmlsZS5NZXNzYWdlKGhlYWRlcm5hbWVv
cmlnKTsKCQlteV9yY3B0aW5mby5zdWJtaXRmaWxlLk1lc3NhZ2UoIjoiKTsKCQlteV9yY3B0aW5m
by5zdWJtaXRmaWxlLk1lc3NhZ2UoaGVhZGVyKTsKCX0KCglpZiAoIW15X3JjcHRpbmZvLmhhc19y
ZWNlaXBpZW50KQoJewoJCWFjY3VtdWxhdGVkX2Vycm1zZyArPSAiNTExIEhlYWRlcnMgc3BlY2lm
eSBubyByZWNlaXBpZW50cy5cbiI7Cgl9CgoJaWYgKGFjY3VtdWxhdGVkX2Vycm1zZykKCXsKCWlu
dAluPWF0b2koYWNjdW11bGF0ZWRfZXJybXNnKTsKCgkJaWYgKCAobiAvIDEwMCkgIT0gNCAmJiAo
biAvIDEwMCkgIT0gNSkJbj01MTE7CgoJCXdoaWxlIChjaW4uZ2V0KCkgIT0gRU9GKQoJCQk7CgoJ
Y2hhcgkqYnVmPW1ha2VlcnJtc2d0ZXh0KG4sIGFjY3VtdWxhdGVkX2Vycm1zZyk7CgkJY291dCA8
PCBidWYgPDwgZmx1c2g7CgkJZnJlZShidWYpOwoJCW1mLT5mbGFnPTE7CgkJcmV0dXJuOwoJfQoK
CWlmIChyZWNlaXZlZF9jbnQgPiAxMDApCgkJaGVhZGVyY250PTA7CgoJaWYgKGhlYWRlcmNudCkK
CXsKCQlpZiAoIWhhc19tc2dpZCkKCQl7CgkJY29uc3QgY2hhciAqcD1nZXRlbnYoIk5PQURETVNH
SUQiKTsKCgkJCWlmICghcCB8fCAqcCA9PSAnMCcpCgkJCQlteV9yY3B0aW5mby5zdWJtaXRmaWxl
Lk1lc3NhZ2UoCgkJCQkJbWttZXNzYWdlaWRoZWFkZXIoKSk7CgkJfQoKCQlpZiAoIWhhc19kYXRl
KQoJCXsKCQljb25zdCBjaGFyICpwPWdldGVudigiTk9BREREQVRFIik7CgoJCQlpZiAoIXAgfHwg
KnAgPT0gJzAnKQoJCQl7CgkJCQloZWFkZXI9IkRhdGU6ICI7CgkJCQloZWFkZXIgKz0gcmZjODIy
X21rZGF0ZShzdWJtaXRfdGltZSk7CgkJCQloZWFkZXIgKz0gJ1xuJzsKCQkJCW15X3JjcHRpbmZv
LnN1Ym1pdGZpbGUuTWVzc2FnZShoZWFkZXIpOwoJCQl9CgkJfQoJCWlmICghaGFzX3RvY2MpCgkJ
CW15X3JjcHRpbmZvLnN1Ym1pdGZpbGUuTWVzc2FnZSgKCQkJCSJUbzogdW5kaXNjbG9zZWQtcmVj
aXBpZW50czogO1xuIik7Cgl9CgoJd2hpbGUgKCFjaW4uZW9mKCkpCgl7CglpbnQJaSwgbDsKCgkJ
bGluZS5yZWFkbGluZShjaW4sIDUwMDApOwoJCWlmICggKGk9Y2luLmdldCgpKSAhPSBFT0YgJiYg
aSAhPSAnXG4nKQoJCQloZWFkZXJjbnQ9MDsKCQlpZiAoaGVhZGVyY250ID09IDApCWNvbnRpbnVl
OwoJCWw9bGluZS5HZXRMZW5ndGgoKTsKCQlpZiAobCAmJiBsaW5lW2wtMV0gPT0gJ1xyJykKCQkJ
bGluZS5DaG9wKCk7CS8vIFN0cmlwIHRyYWlsaW5nIENSCgoJCWlmIChpICE9IEVPRiB8fCBsaW5l
LkdldExlbmd0aCgpKQoJCXsKCQkJbGluZSArPSAnXG4nOwoJCQlteV9yY3B0aW5mby5zdWJtaXRm
aWxlLk1lc3NhZ2UobGluZSk7CgkJfQoJCWlmIChpID09IEVPRikJYnJlYWs7Cgl9CgoJaWYgKHJl
Y2VpdmVkX2NudCA+IDEwMCkKCXsKCQljb3V0IDw8ICI1NDYgUm91dGluZyBsb29wIGRldGVjdGVk
IC0tIHRvbyBtYW55IFJlY2VpdmVkOiBoZWFkZXJzLiIgPDwgZW5kbCA8PCBmbHVzaDsKCQltZi0+
ZmxhZz0xOwoJfQoJZWxzZSBpZiAoaGVhZGVyY250ID09IDApCgl7CgkJY291dCA8PCAiNTM0IE1l
c3NhZ2UgaGVhZGVyIHNpemUgZXhjZWVkcyBwb2xpY3kgbGltaXQuIgoJCQkJCQkJPDwgZW5kbCA8
PCBmbHVzaDsKCQltZi0+ZmxhZz0xOwoJfQoJZWxzZQoJewoJCWFsYXJtKDApOwkvKiBDYW5jZWwg
YWxhcm0oMTgwMCkgLS0gd2UnbGwgd3JhcCB1cCBzb29uICovCgkJbWYtPmZsYWc9bXlfcmNwdGlu
Zm8uc3VibWl0ZmlsZS5NZXNzYWdlRW5kKG15X3JjcHRpbmZvLnJjcHRudW0sCgkJCW15X3JjcHRp
bmZvLndoaXRlbGlzdGVkX29ubHkpOwoJfQp9CgpzdGF0aWMgdm9pZCByY3B0dG9lcnIoaW50IG1z
Z251bSwgY29uc3QgY2hhciAqZXJydGV4dCwgc3RydWN0IHJ3X2luZm8gKnJ3aSkKewpzdHJ1Y3Qg
cmNwdGluZm8gKm15X3JjcHRpbmZvPShzdHJ1Y3QgcmNwdGluZm8gKilyd2ktPnVkYXRhOwoKY2hh
cgkqZXJybXNnPW1ha2VlcnJtc2d0ZXh0KG1zZ251bSwgZXJydGV4dCk7CgoJaWYgKGVycm1zZykK
CXsKCQlteV9yY3B0aW5mby0+ZXJyZmxhZz0xOwoJCW15X3JjcHRpbmZvLT5lcnJtc2d0ZXh0PWVy
cm1zZzsKCQlmcmVlKGVycm1zZyk7Cgl9Cn0KCnN0YXRpYyBDU3RyaW5nIGNoZWNrcmNwdChzdHJ1
Y3QgcmNwdGluZm8gKiwKCXN0cnVjdCByZmM4MjJ0b2tlbiAqLAoJY29uc3QgY2hhciAqKTsKCnN0
YXRpYyB2b2lkIGdldHJjcHQoc3RydWN0IHJ3X2luZm8gKnJ3aSkKewpzdHJ1Y3QgcmNwdGluZm8g
Km15X3JjcHRpbmZvPShzdHJ1Y3QgcmNwdGluZm8gKilyd2ktPnVkYXRhOwpzdHJ1Y3QgcmZjODIy
dG9rZW4gKmFkZHJlc3N0PXJ3aS0+cHRyOwpjaGFyCSphZGRyZXNzPXJmYzgyMl9nZXR0b2soYWRk
cmVzc3QpOwoKCWlmICghYWRkcmVzcykKCQljbG9nX21zZ19lcnJubygpOwoKQ1N0cmluZwllcnJt
c2c7CgoJZG9tYWlubG93ZXIoYWRkcmVzcyk7CgllcnJtc2c9Y2hlY2tyY3B0KG15X3JjcHRpbmZv
LCBhZGRyZXNzdCwgYWRkcmVzcyk7CglteV9yY3B0aW5mby0+ZXJyZmxhZz0wOwoKCWlmIChlcnJt
c2cuR2V0TGVuZ3RoKCkpCgl7CgkJbXlfcmNwdGluZm8tPmVycm1zZ3RleHQ9ZXJybXNnOwoJCW15
X3JjcHRpbmZvLT5lcnJmbGFnPTE7Cgl9CglmcmVlKGFkZHJlc3MpOwp9CgpzdGF0aWMgQ1N0cmlu
ZyBjaGVja3JjcHQoc3RydWN0IHJjcHRpbmZvICpteV9yY3B0aW5mbywKCXN0cnVjdCByZmM4MjJ0
b2tlbiAqYWRkcmVzc3QsCgljb25zdCBjaGFyICphZGRyZXNzKQp7CnN0cnVjdCByd190cmFuc3Bv
cnQgKnNvdXJjZT1teV9yY3B0aW5mby0+bW9kdWxlOwpzdHJ1Y3QgcmZjODIydG9rZW4gKnNlbmRl
cnQ9bXlfcmNwdGluZm8tPnNlbmRlcnQ7CmNvbnN0IGNoYXIgKm9hZGRyZXNzPSpteV9yY3B0aW5m
by0+b3JlY2VpcGllbnQ7CmNvbnN0IGNoYXIgKmRzbj0qbXlfcmNwdGluZm8tPmRzbjsKQWxpYXNT
ZWFyY2ggJmFsaWFzcD0qbXlfcmNwdGluZm8tPmFzcHRyOwpSY3B0QWxpYXNIYW5kbGVyICZoYW5k
bGVycD1teV9yY3B0aW5mby0+cmNwdGFsaWFzOwp1bnNpZ25lZCByY3B0bnVtPW15X3JjcHRpbmZv
LT5yY3B0bnVtOwpjb25zdCBjaGFyICpwcndfcmVjZWlwaWVudD0gbXlfcmNwdGluZm8tPnByd19y
ZWNlaXBpZW50OwoKQ1N0cmluZwllcnJtc2c7CmNoYXIJZW52ZHNuWzVdOwppbnQJZHNuTiwgZHNu
UywgZHNuRiwgZHNuRDsKY2hhcgkqYWRkcmVzc2w7CkNTdHJpbmcgb2FkZHJlc3NidWY7CgoKY2hh
cglkZWxpdl9lbnZkc25bNV07CkNTdHJpbmcJZGVsaXZfYWRkcmVzc2w7CkNTdHJpbmcJZGVsaXZf
b2FkZHJlc3M7CgoJaWYgKCFvYWRkcmVzcykJb2FkZHJlc3M9IiI7CglpZiAoIWRzbikJZHNuPSIi
OwoKCXN0cmNweShkZWxpdl9lbnZkc24sICJOIik7Cglkc25OPTA7Cglkc25TPTA7Cglkc25GPTA7
Cglkc25EPTA7CgoJaWYgKCEqZHNuICYmIChkc249Z2V0ZW52KCJEU05OT1RJRlkiKSkgIT0gMCkK
CQl3aGlsZSAoKmRzbikKCQl7CgkJCXN3aXRjaCAoKmRzbikJewoJCQljYXNlICduJzoKCQkJY2Fz
ZSAnTic6CgkJCQlkc25OPTE7CgkJCQlicmVhazsKCQkJY2FzZSAncyc6CgkJCWNhc2UgJ1MnOgoJ
CQkJZHNuUz0xOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2YnOgoJCQljYXNlICdGJzoKCQkJCWRzbkY9
MTsKCQkJCWJyZWFrOwoKCQkJY2FzZSAnZCc6CgkJCWNhc2UgJ0QnOgoJCQkJZHNuRD0xOwoJCQkJ
YnJlYWs7CgkJCX0KCQkJd2hpbGUgKCpkc24gJiYgKmRzbiAhPSAnLCcgJiYgKmRzbiAhPSAnICcp
CgkJCQkrK2RzbjsKCQkJaWYgKCpkc24pCSsrZHNuOwoJCX0KCWVsc2UgaWYgKGRzbikKCQlmb3Ig
KCA7ICpkc247IGRzbisrKQoJCXsKCQkJc3dpdGNoICgqZHNuKQl7CgkJCWNhc2UgJ24nOgoJCQlj
YXNlICdOJzoKCQkJCWRzbk49MTsKCQkJCWJyZWFrOwoJCQljYXNlICdzJzoKCQkJY2FzZSAnUyc6
CgkJCQlkc25TPTE7CgkJCQlicmVhazsKCQkJY2FzZSAnZic6CgkJCWNhc2UgJ0YnOgoJCQkJZHNu
Rj0xOwoJCQkJYnJlYWs7CgoJCQljYXNlICdkJzoKCQkJY2FzZSAnRCc6CgkJCQlkc25EPTE7CgkJ
CQlicmVhazsKCQkJfQoJCX0KCglzdHJjcHkoZW52ZHNuLCAiIik7CgoJaWYgKGRzbk4pCgkJc3Ry
Y3B5KGVudmRzbiwgIk4iKTsKCWVsc2UKCXsKCQlpZiAoZHNuUykgc3RyY2F0KGVudmRzbiwgIlMi
KTsKCQlpZiAoZHNuRikgc3RyY2F0KGVudmRzbiwgIkYiKTsKCQlpZiAoZHNuRCkgc3RyY2F0KGVu
dmRzbiwgIkQiKTsKCX0KCgloYW5kbGVycC5saXN0bmFtZT1hZGRyZXNzOwkvLyBKdXN0IGluIGNh
c2UKCWhhbmRsZXJwLmxpc3Rjb3VudD0wOwoJaGFuZGxlcnAuYWJvcnRlZD0wOwoJaGFuZGxlcnAu
cmV0X2NvZGU9MDsKCWhhbmRsZXJwLmFkZHJlc3N0PWFkZHJlc3N0OwoJaGFuZGxlcnAuc2VuZGVy
dD1zZW5kZXJ0OwoJaGFuZGxlcnAuc291cmNlbW9kdWxlPXNvdXJjZTsKCglpZiAoY2hlY2tmcmVl
c3BhY2UoMCkpCgl7CgkJZXJybXNnPSI0MzEgTWFpbCBzeXN0ZW0gZnVsbC4iOwoJCXJldHVybiAo
ZXJybXNnKTsKCX0KCgl7Cgljb25zdCBjaGFyICpwPWdldGVudigiQkxPQ0siKTsKCgkJaWYgKHAg
JiYgKnApCgkJewoJCQllcnJtc2c9cDsKCQkJcmV0dXJuIChlcnJtc2cpOwoJCX0KCX0KCglhZGRy
ZXNzbD1zdHJjcHkoKGNoYXIgKiljb3VyaWVyX21hbGxvYyhzdHJsZW4oYWRkcmVzcykrMSksIGFk
ZHJlc3MpOwoJbG9jYWxsb3dlcihhZGRyZXNzbCk7CglpZiAoYWxpYXNwLlNlYXJjaChhZGRyZXNz
bCwgaGFuZGxlcnApICE9IDAgfHwKCQloYW5kbGVycC5saXN0Y291bnQgPT0gMSB8fAoJCWhhbmRs
ZXJwLmFib3J0ZWQpCgl7CglzdHJ1Y3QgcndfaW5mbwlyd2k7CglzdHJ1Y3QgcndfaW5mb192cmZ5
IHJpdjsKCXN0cnVjdCByZmM4MjJ0ICphbGlhc2FkZHJlc3N0PTA7CglpbnQJcndtb2RlPVJXX1NV
Qk1JVDsKCgkJaWYgKGhhbmRsZXJwLmFib3J0ZWQpCgkJewoJCQlyZXR1cm4gKGhhbmRsZXJwLmFi
b3J0bXNnKTsKCQl9CgoJCS8qCgkJKiogRm9yIGFsaWFzZXMgb2YgZXhhY3RseSBvbmUgYWRkcmVz
cywgd2UganVzdCByZXBsYWNlCgkJKiogYWRkcmVzc3Qgd2l0aCB0aGUgdG9rZW5pemVkIGFsaWFz
LgoJCSoqCgkJKiogTm90ZSAtIGlmIG9yaWdpbmFsIGFkZHJlc3MgaXMgbm90IHNldCwgaXQgaXMg
c2V0IHRvCgkJKiogdGhlIGFsaWFzIGFkZHJlc3MuCgkJKi8KCgkJaWYgKGhhbmRsZXJwLmxpc3Rj
b3VudCA9PSAxKQoJCXsKCQkJcndtb2RlIHw9IFJXX1NVQk1JVEFMSUFTOwoKCQkJaWYgKHZlcnBm
bGFnICYmIHN0cmNtcChlbnZkc24sICJOIikpCgoJCQkvKiBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEg
cmV3cml0ZSBvZiBhIFZFUlBlZAoJCQkqKiByZWNpcGllbnQsIHNvIHRoZSBidWNrIHN0b3BzIGhl
cmUuCgkJCSovCgkJCXsKCQkJCXN0cmNweShkZWxpdl9lbnZkc24sIGVudmRzbik7CgkJCQlkZWxp
dl9hZGRyZXNzbD1hZGRyZXNzbDsKCQkJCWRlbGl2X29hZGRyZXNzPW9hZGRyZXNzOwoJCQkJCS8q
IEdlbmVyYXRlIGEgImRlbGl2ZXJlZCIgbm90aWNlIGlmCgkJCQkJKiogYSBEU04gd2FzIHJlcXVl
c3RlZCAqLwoKCQkJCXN0cmNweShlbnZkc24sICJOIik7CgkJCQkJLyogTm8gZXJyb3JzIGZvciB0
aGlzIG9uZSAqLwoJCQl9CgoJCQlhbGlhc2FkZHJlc3N0PXJ3X3Jld3JpdGVfdG9rZW5pemUoaGFu
ZGxlcnAuYWxpYXNidWYpOwoJCQlpZiAoIWFsaWFzYWRkcmVzc3QpCWNsb2dfbXNnX2Vycm5vKCk7
CgoJCQlpZiAoKm9hZGRyZXNzID09IDApCgkJCXsKCQkJY2hhcgkqcD1kc25lbmNvZGVvcmlnYWRk
cihhZGRyZXNzKTsKCgkJCQlvYWRkcmVzc2J1Zj1wOwoJCQkJZnJlZShwKTsKCQkJCW9hZGRyZXNz
PW9hZGRyZXNzYnVmOwoJCQl9CgoJCQlhZGRyZXNzdD1hbGlhc2FkZHJlc3N0LT50b2tlbnM7CgkJ
CWFkZHJlc3M9aGFuZGxlcnAuYWxpYXNidWY7CgkJfQoKCQkvKgoJCSoqICBJZiB0aGUgbW9kdWxl
IGZ1bmN0aW9ucyByZXdyb3RlIHRoZSByZWNpcGllbnQgYWRkcmVzcywgYW5kCgkJKiogIHRoZSB2
ZXJwIGZsYWcgaXMgc2V0LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBnZW5lcmF0ZSBhCgkJKiog
IERTTiBmb3IgZmluYWwgZGVsaXZlcnksIGFuZCBzdXBwcmVzcyBhbnkgbW9yZSBEU05zIGZvcgoJ
CSoqICB0aGlzIHJlY2lwaWVudCwgZnJvbSBub3cgb24sIGJlY2F1c2UgdGhlIHNlbmRlciB3aWxs
IG5vdAoJCSoqICBoYXZlIGFueSBpZGVhIHRoYXQgdGhlIGFkZHJlc3MgaGFzIGJlZW4gYWxpYXNl
ZC4KCQkqLwoKCQllbHNlIGlmICh2ZXJwZmxhZyAmJiBzdHJjbXAoYWRkcmVzcywgcHJ3X3JlY2Vp
cGllbnQpICYmCgkJCXN0cmNtcChlbnZkc24sICJOIikpCgkJewoJCQlzdHJjcHkoZGVsaXZfZW52
ZHNuLCBlbnZkc24pOwoJCQlkZWxpdl9hZGRyZXNzbD1hZGRyZXNzbDsKCQkJZGVsaXZfb2FkZHJl
c3M9b2FkZHJlc3M7CgkJCXN0cmNweShlbnZkc24sICJOIik7CgkJfQoJCWZyZWUoYWRkcmVzc2wp
OwoKCQlyaXYucndyLmJ1Zj0wOwoJCXJpdi5yd3IuZXJybXNnPTA7CgkJcml2Lm1vZHVsZT0wOwoJ
CXJpdi5ob3N0PTA7CgkJcml2LmFkZHI9MDsKCgkJcndfaW5mb19pbml0KCZyd2ksIGFkZHJlc3N0
LCByd19lcnJfZnVuYyk7CgkJcndpLnNlbmRlcj1zZW5kZXJ0OwoJCXJ3aS5tb2RlPXJ3bW9kZTsK
CQlyd2kudWRhdGE9ICh2b2lkICopJnJpdjsKCQlyd2kuc21vZHVsZT1zb3VyY2UtPm5hbWU7CgoJ
CS8qIEp1c3QgbGV0IHRoZSBEU04gc291cmNlIHRocm91Z2ggKi8KCgkJaWYgKHN0cmNtcChzb3Vy
Y2UtPm5hbWUsIERTTikgPT0gMCkKCQl7CgkJCXJpdi5tb2R1bGU9c291cmNlOwoJCQlyaXYucndy
LmVycm1zZz0wOwoJCQlyaXYuaG9zdD1zdHJjcHkoKGNoYXIgKiljb3VyaWVyX21hbGxvYygxKSwg
IiIpOwoJCQlyaXYuYWRkcj1zdHJjcHkoKGNoYXIgKiljb3VyaWVyX21hbGxvYygKCQkJCXN0cmxl
bihhZGRyZXNzKSsxKSwgYWRkcmVzcyk7CgkJfQoJCWVsc2UKCQl7CgkJCWlmICghbm9maWx0ZXIp
CQoJCQkJcndpLm1vZGUgfD0gUldfRklMVEVSOwoJCQlyd19zZWFyY2hkZWwoJnJ3aSwgJmZvdW5k
X3RyYW5zcG9ydCk7CgkJfQoKCQlpZiAoYWxpYXNhZGRyZXNzdCkKCQkJcmZjODIydF9mcmVlKGFs
aWFzYWRkcmVzc3QpOwoKCQlpZiAoIXJpdi5tb2R1bGUgJiYgIXJpdi5yd3IuZXJybXNnKQoJCQly
d19lcnJfZnVuYyg1MTEsICJVbmtub3duIHVzZXIuIiwgJnJ3aSk7CgkJaWYgKCFyaXYubW9kdWxl
KQoJCXsKCQkJZXJybXNnPXJpdi5yd3IuZXJybXNnOwoJCQlmcmVlKHJpdi5yd3IuZXJybXNnKTsK
CQkJcmV0dXJuIChlcnJtc2cpOwoJCX0KCgkJLyogSWYgd2UncmUgaGVyZSBiZWNhdXNlIG9mIGEg
b25lLWFsaWFzIHJlY2lwaWVudCwgcHJldGVuZAoJCSoqIHRoYXQgaXQncyBhIHdoaXRlbGlzdGVk
IHJlY2lwaWVudCAqLwoJCQoJaW50CXJjPWhhbmRsZXJwLmxpc3Rjb3VudCA9PSAxID8gaGFuZGxl
cnAucmV0X2NvZGU6CgkJCWRvX3JlY2VpcGllbnRfZmlsdGVyKCZyd2ksICZyaXYsIGVycm1zZyk7
CgoJCWlmIChyYykKCQl7CgkJCWlmIChyYyAhPSA5OSkJcmV0dXJuIChlcnJtc2cpOwoKCQkJLyoK
CQkJKiogUmV0dXJuIGNvZGUgOTkgLS0gbm9ud2hpdGVsaXN0ZWQgcmVjaXBpZW50IHN1YmplY3QK
CQkJKiogdG8gc3BhbSBmaWx0ZXJpbmcuCgkJCSovCgkJCWlmIChteV9yY3B0aW5mby0+d2hpdGVs
aXN0ZWRfb25seSkKCQkJewoJCQkJZXJybXNnPXlvdV9hcmVfbm90X3doaXRlbGlzdGVkOwoJCQkJ
cmV0dXJuIChlcnJtc2cpOwoJCQl9CgkJCW15X3JjcHRpbmZvLT5ub253aGl0ZWxpc3RlZF9vbmx5
PTE7CgkJfQoJCWVsc2UKCQl7CgkJCS8qCgkJCSoqIFJldHVybiBjb2RlIDAgLSB3aGl0ZWxpc3Rl
ZCByZWNpcGllbnQuCgkJCSovCgkJCWlmIChteV9yY3B0aW5mby0+bm9ud2hpdGVsaXN0ZWRfb25s
eSkKCQkJewoJCQkJZXJybXNnPXlvdV9hcmVfd2hpdGVsaXN0ZWQ7CgkJCQlyZXR1cm4gKGVycm1z
Zyk7CgkJCX0KCQkJbXlfcmNwdGluZm8tPndoaXRlbGlzdGVkX29ubHk9MTsKCQl9CgoJCS8vIEdv
b2QgYWRkcmVzcywgYnV0IHNob3VsZCB3ZSBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YKCQkvLyByZWNp
cGllbnRzPyAgRmlndXJlIG91dCB3aGF0IHNob3VsZCBiZSB0aGUga2V5IHRvIGNoZWNrCgkJLy8g
Zm9yIGEgZHVwbGljYXRlIGFkZHJlc3MuCgkJLy8KCQkvLyBEU046IE5FVkVSLCB1c2UgbW9kdWxl
PG5sPmhvc3Q8bmw+YWRkciwgc2hvdWxkIGdldCByaWQKCQkvLyAgICAgIG9mIHRoZSBtb3N0IG51
bWJlciBvZiBkdXBsaWNhdGUgYWRkcmVzc2VzCgkJLy8KCQkvLyBFdmVyeSBjYXNlLCB1c2UgbW9k
dWxlPG5sPmhvc3Q8bmw+YWRkcjxubD5vcmVjaXBpZW50LgoKCUNTdHJpbmcga2V5OwoJaW50CWR1
cGZsYWc9MDsKCgkJa2V5PXJpdi5tb2R1bGUtPm5hbWU7CgkJa2V5ICs9ICdcbic7CgkJa2V5ICs9
IHJpdi5ob3N0OwoJCWtleSArPSAnXG4nOwoJCWtleSArPSByaXYuYWRkcjsKCQlpZiAoc3RyY21w
KGVudmRzbiwgIk4iKSA9PSAwKQoJCXsKCQkJaWYgKGhhbmRsZXJwLnN1Ym1pdHB0ci0+Q2hrUmVj
aXBpZW50KGtleSkpCgkJCQlkdXBmbGFnPTE7CgkJfQoKCQlrZXkgKz0gJ1xuJzsKCQlrZXkgKz0g
b2FkZHJlc3M7CgoJCWlmIChoYW5kbGVycC5zdWJtaXRwdHItPkNoa1JlY2lwaWVudChrZXkpKQoJ
CQlkdXBmbGFnPTE7CgoJCWlmICghZHVwZmxhZykKCQl7CgkJCWlmIChzdHJjbXAoZGVsaXZfZW52
ZHNuLCAiTiIpKQoJCQkJaGFuZGxlcnAuc3VibWl0cHRyLT5BZGRSZWNlaXBpZW50KAoJCQkJCWRl
bGl2X2FkZHJlc3NsLAoJCQkJCWRlbGl2X29hZGRyZXNzLAoJCQkJCWRlbGl2X2VudmRzbiwgMSk7
CgoJCQloYW5kbGVycC5zdWJtaXRwdHItPkFkZFJlY2VpcGllbnQoYWRkcmVzcywKCQkJCQlvYWRk
cmVzcywgZW52ZHNuLCAwKTsKCgkJCS8qCgkJCSoqIElmIHdlJ3JlIGhhbmRsaW5nIG5vbndoaXRl
bGlzdGVkIHJlY2lwaWVudHMsCgkJCSoqIHJlY29yZCB0aGVpciBjb250cm9sIGZpbGUgbG9jYXRp
b24gZm9yIHRoZQoJCQkqKiBzcGFtIGZpbHRlciwgdG8gZm9sbG93IGxhdGVyLgoJCQkqLwoKCQkJ
aWYgKG15X3JjcHRpbmZvLT5ub253aGl0ZWxpc3RlZF9vbmx5CgkJCQkmJiBoYW5kbGVycC5saXN0
Y291bnQgIT0gMSkgLyogTk9UIEFMSUFTRVMgKi8KCQkJCWhhbmRsZXJwLnN1Ym1pdHB0ci0+UmVj
ZWlwaWVudEZpbHRlcigKCQkJCQlyaXYubW9kdWxlLAoJCQkJCXJpdi5ob3N0LAoJCQkJCXJpdi5h
ZGRyLAoJCQkJCXJjcHRudW0pOwoJCX0KCgkJZnJlZShyaXYuaG9zdCk7CgkJZnJlZShyaXYuYWRk
cik7Cgl9CgllbHNlCS8vIE1ha2Ugc3VyZSBhbGlhc2VzIGFyZSBwcm9wZXJseSByZWNvcmRlZCBm
b3IgRFNOIGdlbmVyYXRpb24KCQkvLyBwdXJwb3Nlcy4KCXsKCQloYW5kbGVycC5zdWJtaXRwdHIt
PkFkZFJlY2VpcGllbnQoYWRkcmVzc2wsIG9hZGRyZXNzLCBlbnZkc24sMSk7CgkJZnJlZShhZGRy
ZXNzbCk7Cgl9CglyZXR1cm4gKGVycm1zZyk7Cn0KCnN0YXRpYyBpbnQgZG9fcmVjZWlwaWVudF9m
aWx0ZXIoc3RydWN0IHJ3X2luZm8gKnJ3aSwgc3RydWN0IHJ3X2luZm9fdnJmeSAqcml2LAoJQ1N0
cmluZyAmZXJybXNnKQp7CmludAlyYzsKY2hhcgllcnJtc2didWZbMjA0OF07CmNoYXIgKnA7CgoJ
aWYgKHJpdi0+bW9kdWxlLT5yd19wdHItPmZpbHRlcl9tc2cgPT0gMCkKCQlyZXR1cm4gKDApOwkJ
LyogSGFuZGxlIGFzIGEgd2hpdGVsaXN0ZWQgcmVjaXBpZW50ICovCgoJaWYgKG5vZmlsdGVyKQoJ
CXJldHVybiAoMCk7CQkvKiBDYWxsZXIgbW9kdWxlIGlzIHdoaXRlbGlzdGVkICovCgoJcD1yZmM4
MjJfZ2V0dG9rKHJ3aS0+c2VuZGVyKTsKCWlmICghcCkJY2xvZ19tc2dfZXJybm8oKTsKCgllcnJt
c2didWZbMF09MDsKCXJjPSgqcml2LT5tb2R1bGUtPnJ3X3B0ci0+ZmlsdGVyX21zZykoCgkJcndp
LT5zbW9kdWxlLAoJCS0xLAoJCXJpdi0+aG9zdCwKCQlyaXYtPmFkZHIsCgkJcCwKCQllcnJtc2di
dWYsCgkJc2l6ZW9mKGVycm1zZ2J1ZikpOwoJZnJlZShwKTsKCglpZiAoIShyYyA9PSAwIHx8IHJj
ID09IDk5KSkKCXsKCQlwPWVycm1zZ2J1ZjsKCQlpZiAoISpwKQoJCQlwPSI1NzEgRGVsaXZlcnkg
bm90IGF1dGhvcml6ZWQsIG1lc3NhZ2UgcmVmdXNlZC4iOwoJCWVycm1zZz1wOwoJfQoJcmV0dXJu
IChyYyk7Cn0KCmludCBjcHBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewppbnQJYXJnbjsK
Y29uc3QJY2hhciAqbW9kdWxlOwoKCWNsb2dfb3Blbl9zeXNsb2coInN1Ym1pdCIpOwoJdW1hc2so
MDA3KTsKCWlmIChnZXR1aWQoKSA9PSAwKQkvKiBSdW5uaW5nIGFzIHJvb3Qgc2NyZXdzIHVwIHBl
cm1zICovCgkJYXV0aGNoYW5nZXVpZGdpZChNQUlMVUlELCBNQUlMR0lEKTsKCglhcmduPWNhcmdz
KGFyZ2MsIGFyZ3YsIGFyZ2luZm8pOwoJaWYgKGFyZ2MgLSBhcmduIDwgMikKCQlleGl0KDEpOwoK
CW1vZHVsZT1hcmd2W2FyZ25dOwoJcmVjZWl2ZWRmcm9tbXRhPWFyZ3ZbYXJnbisxXTsKCWlmIChz
dHJjaHIocmVjZWl2ZWRmcm9tbXRhLCAnOycpID09IDApCWV4aXQoMSk7CgoJaWYgKGFyZ2MgLSBh
cmduID4gMikKCQlpZGVudGluZm89YXJndlthcmduKzJdOwoKCWlmIChjaGRpcihjb3VyaWVyZGly
KCkpIHx8IGNoZGlyKFRNUERJUikpCWNsb2dfbXNnX2Vycm5vKCk7CgoJaWYgKHJ3X2luaXQoMCkp
CWV4aXQgKDEpOwoKc3RydWN0IHJ3X3RyYW5zcG9ydCAqbW9kdWxlcD1yd19zZWFyY2hfdHJhbnNw
b3J0KG1vZHVsZSk7CiAKCWlmICghbW9kdWxlcCkKCXsKCQljbG9nX21zZ19zdGFydF9lcnIoKTsK
CQljbG9nX21zZ19zdHIobW9kdWxlKTsKCQljbG9nX21zZ19zdHIoIiAtIG5vdCBhIHZhbGlkIG1v
ZHVsZS4iKTsKCQljbG9nX21zZ19zZW5kKCk7CgkJZXhpdCgxKTsKCX0KCglpZiAoZXhwbm5hbWUg
fHwgdnJmeW5hbWUpCgl7CglzdHJ1Y3QJZXhwbmluZm8gZXhwbl9pbmZvOwoJQWxpYXNTZWFyY2gJ
YXNlYXJjaDsKCgkJewoKCQkJYXNlYXJjaC5PcGVuKG1vZHVsZXApOwoJCQlleHBuX2luZm8uYXNw
dHI9JmFzZWFyY2g7CgkJCWV4cG5faW5mby5mbGFnPTA7CgoJCQlyZXdyaXRlX2FkZHJlc3MoZXhw
bm5hbWUgPyBleHBubmFtZTp2cmZ5bmFtZSwKCQkJCW1vZHVsZXAsCgkJCQkoZXhwbm5hbWUgPyBS
V19FTlZSRUNJUElFTlR8UldfRVhQTjoKCQkJCQlSV19FTlZSRUNJUElFTlR8UldfVkVSSUZZKSwg
TlVMTCwKCQkJCWV4cG5uYW1lID8gc2hvd2V4cG46c2hvd3ZyZnksICZleHBuX2luZm8pOwoJCX0K
CQlleGl0KGV4cG5faW5mby5mbGFnKTsKCX0KCgl0aW1lKCZzdWJtaXRfdGltZSk7CgoJU3VibWl0
RmlsZTo6dHJhcHNpZ25hbHMoKTsKCXZlcnBmbGFnPTA7CgoJLyogRGV0ZXJtaW5lIGlmIG1haWwg
ZmlsdGVyaW5nIHNob3VsZCBiZSB1c2VkICovCgoJbm9maWx0ZXI9MTsKCXsKCWNoYXIJKmZuPWNv
bmZpZ19sb2NhbGZpbGVuYW1lKCJlbmFibGVmaWx0ZXJpbmciKTsKCWNoYXIJKmxpc3Q9Y29uZmln
X3JlYWQxbChmbik7CgoJCWZyZWUoZm4pOwoJCWlmIChsaXN0KQoJCXsKCQljaGFyCSpwOwoKCQkJ
Zm9yIChwPWxpc3Q7IChwPXN0cnRvayhwLCAiIFxyXHRcbiIpKSAhPSAwOyBwPTApCgkJCQlpZiAo
c3RyY21wKHAsIG1vZHVsZSkgPT0gMCkKCQkJCXsKCQkJCQlub2ZpbHRlcj0wOwoJCQkJCWJyZWFr
OwoJCQkJfQoJCQlmcmVlKGxpc3QpOwoJCX0KCX0KCglhbGFybSgxODAwKTsJLyogS2lsbCBtZSwg
bm8gbWF0dGVyIHdoYXQgKi8KCWV4aXQgKGdldHNlbmRlcihtb2R1bGVwKSk7CglyZXR1cm4gKDAp
Owp9CgpleHRlcm4gIkMiIHZvaWQgcmZjMjA0NV9lcnJvcihjb25zdCBjaGFyICplcnJtc2cpCnsK
CWNvdXQgPDwgIjQzMCAiIDw8IGVycm1zZyA8PCBlbmRsIDw8IGZsdXNoOwoJZXhpdCgxKTsKfQo=

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