Re: Extended f_count patch (SMP-safe handling of struct file)

Alexander Viro (viro@math.psu.edu)
Wed, 23 Jun 1999 01:54:50 -0400 (EDT)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-597166189-930117290=:17822
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Tue, 22 Jun 1999, Alexander Viro wrote:

> News:
> * the only function in fs/file-table.c that still needs the big lock
> is fput(). And only for two calls. The rest is SMP-safe.
> * inuse_filp is no more. Instead of the one huge list we are keeping
> per-superblock lists + per-tty lists + anonymous list (pipes and sockets).
> That should speed up tty layer - it used to run through the whole list,
> procfs stuff (on proc_unregister() - it did the same) and quota (we don't
> have to traverse the whole list anymore).
> * New type: struct file_list (fs.h). Header for the file list.
> struct file contains the pointer to file_list (f_list). super_block and
> tty_struct contain struct file_list (s_files and tty_files resp.).
> * New function: file_move(struct file*, struct file_list*); moves
> the file to list. SMP-safe. If device driver wants to keep a list of files
> - fine, just move them (in ->open()) to a private list. BTW, AF_UNIX
> garbage collector will win big way from such change, but I didn't do it
> yet (per-PF lists).
>
> I'll post cleaner version this evening. Patch is against 2.3.8-pre2.

Aargh... My apologies, folks - I've posted the wrong version (which
wouldn't compile, to start with ;-/). Oh, well... Anyway, here is the
right variant after some cleanup. Against 2.3.8. Sorry about that ;-/
Wearing brown paperbag,
Al

---559023410-597166189-930117290=:17822
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=f_count-patch-10
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.9906230154500.17822@weyl.math.psu.edu>
Content-Description:
Content-Disposition: attachment; filename=f_count-patch-10

ZGlmZiAtdXJOIGxpbnV4LTIuMy44L2FyY2gvYWxwaGEva2VybmVsL29zZl9z
eXMuYyBsaW51eC1iaXJkLmZfY291bnQvYXJjaC9hbHBoYS9rZXJuZWwvb3Nm
X3N5cy5jDQotLS0gbGludXgtMi4zLjgvYXJjaC9hbHBoYS9rZXJuZWwvb3Nm
X3N5cy5jCU1vbiBKdW4gMjEgMTI6MzU6NDkgMTk5OQ0KKysrIGxpbnV4LWJp
cmQuZl9jb3VudC9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMJVHVlIEp1
biAyMiAyMzoxMjowNCAxOTk5DQpAQCAtMjU1LDYgKzI1NSw3IEBADQogCXN0
cnVjdCBmaWxlICpmaWxlID0gTlVMTDsNCiAJdW5zaWduZWQgbG9uZyByZXQg
PSAtRUJBREY7DQogDQorCWRvd24oJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7
DQogCWxvY2tfa2VybmVsKCk7DQogI2lmIDANCiAJaWYgKGZsYWdzICYgKF9N
QVBfSEFTU0VNQVBIT1JFIHwgX01BUF9JTkhFUklUIHwgX01BUF9VTkFMSUdO
RUQpKQ0KQEAgLTI3Miw2ICsyNzMsNyBAQA0KIAkJZnB1dChmaWxlKTsNCiBv
dXQ6DQogCXVubG9ja19rZXJuZWwoKTsNCisJdXAoJmN1cnJlbnQtPm1tLT5t
bWFwX3NlbSk7DQogCXJldHVybiByZXQ7DQogfQ0KIA0KZGlmZiAtdXJOIGxp
bnV4LTIuMy44L2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMgbGludXgtYmly
ZC5mX2NvdW50L2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMNCi0tLSBsaW51
eC0yLjMuOC9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jCU1vbiBKdW4gMjEg
MTQ6MDk6MTUgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL2Fy
bS9rZXJuZWwvc3lzX2FybS5jCVR1ZSBKdW4gMjIgMjM6MTI6MDQgMTk5OQ0K
QEAgLTcyLDYgKzcyLDcgQEANCiAJc3RydWN0IGZpbGUgKiBmaWxlID0gTlVM
TDsNCiAJc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBhOw0KIA0KKwlkb3duKCZj
dXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KIAlsb2NrX2tlcm5lbCgpOw0KIAlp
ZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkNCiAJCWdv
dG8gb3V0Ow0KQEAgLTg3LDYgKzg4LDcgQEANCiAJCWZwdXQoZmlsZSk7DQog
b3V0Og0KIAl1bmxvY2tfa2VybmVsKCk7DQorCXVwKCZjdXJyZW50LT5tbS0+
bW1hcF9zZW0pOw0KIAlyZXR1cm4gZXJyb3I7DQogfQ0KIA0KZGlmZiAtdXJO
IGxpbnV4LTIuMy44L2FyY2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jIGxpbnV4
LWJpcmQuZl9jb3VudC9hcmNoL21pcHMva2VybmVsL2lyaXhlbGYuYw0KLS0t
IGxpbnV4LTIuMy44L2FyY2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jCU1vbiBK
dW4gMjEgMTM6MzI6MjAgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9h
cmNoL21pcHMva2VybmVsL2lyaXhlbGYuYwlUdWUgSnVuIDIyIDIzOjEyOjA0
IDE5OTkNCkBAIC04NTAsMTMgKzg1MCwxMiBAQA0KIA0KIAlsZW4gPSAwOw0K
IAlmaWxlID0gY3VycmVudC0+ZmlsZXMtPmZkW2ZkXTsNCisJaWYgKCFmaWxl
IHx8ICFmaWxlLT5mX29wKQ0KKwkJcmV0dXJuIC1FQUNDRVM7DQogCWRlbnRy
eSA9IGZpbGUtPmZfZGVudHJ5Ow0KIAlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9k
ZTsNCiAJZWxmX2JzcyA9IDA7DQogCQ0KLQlpZiAoIWZpbGUgfHwgIWZpbGUt
PmZfb3ApDQotCQlyZXR1cm4gLUVBQ0NFUzsNCi0NCiAJLyogU2VlayB0byB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAqLw0KIAlpZiAoZmlsZS0+Zl9v
cC0+bGxzZWVrKSB7DQogCQlpZiAoKGVycm9yID0gZmlsZS0+Zl9vcC0+bGxz
ZWVrKGZpbGUsIDAsIDApKSAhPSAwKQ0KZGlmZiAtdXJOIGxpbnV4LTIuMy44
L2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGxpbnV4LWJpcmQuZl9jb3Vu
dC9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYw0KLS0tIGxpbnV4LTIuMy44
L2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCU1vbiBKdW4gMjEgMTI6MzU6
NTcgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL21pcHMva2Vy
bmVsL3N5c2NhbGwuYwlUdWUgSnVuIDIyIDIzOjEyOjA0IDE5OTkNCkBAIC02
MSw2ICs2MSw3IEBADQogCXN0cnVjdCBmaWxlICogZmlsZSA9IE5VTEw7DQog
CXVuc2lnbmVkIGxvbmcgZXJyb3IgPSAtRUZBVUxUOw0KIA0KKwlkb3duKCZj
dXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KIAlsb2NrX2tlcm5lbCgpOw0KIAlp
ZiAoIShmbGFncyAmIE1BUF9BTk9OWU1PVVMpKSB7DQogCQllcnJvciA9IC1F
QkFERjsNCkBAIC03NCw2ICs3NSw3IEBADQogICAgICAgICAgICAgICAgIGZw
dXQoZmlsZSk7DQogb3V0Og0KIAl1bmxvY2tfa2VybmVsKCk7DQorCXVwKCZj
dXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KIAlyZXR1cm4gZXJyb3I7DQogfQ0K
IA0KZGlmZiAtdXJOIGxpbnV4LTIuMy44L2FyY2gvbWlwcy9rZXJuZWwvc3lz
aXJpeC5jIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL21pcHMva2VybmVsL3N5
c2lyaXguYw0KLS0tIGxpbnV4LTIuMy44L2FyY2gvbWlwcy9rZXJuZWwvc3lz
aXJpeC5jCU1vbiBKdW4gMjEgMTM6MzI6MjEgMTk5OQ0KKysrIGxpbnV4LWJp
cmQuZl9jb3VudC9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYwlUdWUgSnVu
IDIyIDIzOjEyOjA0IDE5OTkNCkBAIC0xMTAzLDYgKzExMDMsNyBAQA0KIAlz
dHJ1Y3QgZmlsZSAqZmlsZSA9IE5VTEw7DQogCXVuc2lnbmVkIGxvbmcgcmV0
dmFsOw0KIA0KKwlkb3duKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KIAls
b2NrX2tlcm5lbCgpOw0KIAlpZighKGZsYWdzICYgTUFQX0FOT05ZTU9VUykp
IHsNCiAJCWlmKCEoZmlsZSA9IGZnZXQoZmQpKSkgew0KQEAgLTExMzAsNiAr
MTEzMSw3IEBADQogDQogb3V0Og0KIAl1bmxvY2tfa2VybmVsKCk7DQorCXVw
KCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KIAlyZXR1cm4gcmV0dmFsOw0K
IH0NCiANCmRpZmYgLXVyTiBsaW51eC0yLjMuOC9hcmNoL3BwYy9rZXJuZWwv
c3lzY2FsbHMuYyBsaW51eC1iaXJkLmZfY291bnQvYXJjaC9wcGMva2VybmVs
L3N5c2NhbGxzLmMNCi0tLSBsaW51eC0yLjMuOC9hcmNoL3BwYy9rZXJuZWwv
c3lzY2FsbHMuYwlNb24gSnVuIDIxIDEzOjMyOjMxIDE5OTkNCisrKyBsaW51
eC1iaXJkLmZfY291bnQvYXJjaC9wcGMva2VybmVsL3N5c2NhbGxzLmMJVHVl
IEp1biAyMiAyMzoxMjowNCAxOTk5DQpAQCAtMjAxLDEyICsyMDEsMTYgQEAN
CiANCiAJbG9ja19rZXJuZWwoKTsNCiAJaWYgKCEoZmxhZ3MgJiBNQVBfQU5P
TllNT1VTKSkgew0KLQkJaWYgKGZkID49IE5SX09QRU4gfHwgIShmaWxlID0g
Y3VycmVudC0+ZmlsZXMtPmZkW2ZkXSkpDQorCQlpZiAoIShmaWxlID0gZmdl
dChmZCkpKQ0KIAkJCWdvdG8gb3V0Ow0KIAl9DQogCQ0KIAlmbGFncyAmPSB+
KE1BUF9FWEVDVVRBQkxFIHwgTUFQX0RFTllXUklURSk7DQorCWRvd24oJmN1
cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQogCXJldCA9IGRvX21tYXAoZmlsZSwg
YWRkciwgbGVuLCBwcm90LCBmbGFncywgb2Zmc2V0KTsNCisJdXAoJmN1cnJl
bnQtPm1tLT5tbWFwX3NlbSk7DQorCWlmIChmaWxlKQ0KKwkJZnB1dChmaWxl
KTsNCiBvdXQ6DQogCXVubG9ja19rZXJuZWwoKTsNCiAJcmV0dXJuIHJldDsN
CmRpZmYgLXVyTiBsaW51eC0yLjMuOC9hcmNoL3NwYXJjL2tlcm5lbC9zdW5v
c19pb2N0bC5jIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL3NwYXJjL2tlcm5l
bC9zdW5vc19pb2N0bC5jDQotLS0gbGludXgtMi4zLjgvYXJjaC9zcGFyYy9r
ZXJuZWwvc3Vub3NfaW9jdGwuYwlNb24gSnVuIDIxIDEyOjM2OjAyIDE5OTkN
CisrKyBsaW51eC1iaXJkLmZfY291bnQvYXJjaC9zcGFyYy9rZXJuZWwvc3Vu
b3NfaW9jdGwuYwlUdWUgSnVuIDIyIDIzOjEyOjA0IDE5OTkNCkBAIC00MCw3
ICs0MCw3IEBADQogCWludCByZXQgPSAtRUJBREY7DQogDQogCWxvY2tfa2Vy
bmVsKCk7DQotCWlmIChmZCA+PSBTVU5PU19OUl9PUEVOIHx8ICEoZmlscCA9
IGN1cnJlbnQtPmZpbGVzLT5mZCBbZmRdKSkNCisJaWYgKGZkID49IFNVTk9T
X05SX09QRU4gfHwgIShmaWxwID0gZmNoZWNrKGZkKSkpDQogCQlnb3RvIG91
dDsNCiANCiAJLyogRmlyc3QgaGFuZGxlIGFuIGVhc3kgY29tcGF0LiBjYXNl
IGZvciB0dHkgbGRpc2MuICovDQpkaWZmIC11ck4gbGludXgtMi4zLjgvYXJj
aC9zcGFyYy9tbS9zcm1tdS5jIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL3Nw
YXJjL21tL3NybW11LmMNCi0tLSBsaW51eC0yLjMuOC9hcmNoL3NwYXJjL21t
L3NybW11LmMJTW9uIEp1biAyMSAxMjozNjowMiAxOTk5DQorKysgbGludXgt
YmlyZC5mX2NvdW50L2FyY2gvc3BhcmMvbW0vc3JtbXUuYwlUdWUgSnVuIDIy
IDIzOjEyOjA1IDE5OTkNCkBAIC0yMDc2LDYgKzIwNzYsNyBAQA0KIAkJCWdv
dG8gZG9uZTsNCiAJCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7
DQogCQlvZmZzZXQgPSAoYWRkcmVzcyAmIFBBR0VfTUFTSykgLSB2bWEtPnZt
X3N0YXJ0Ow0KKwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9zaGFyZWRfbG9jayk7
DQogCQl2bWFyaW5nID0gaW5vZGUtPmlfbW1hcDsgDQogCQlkbyB7DQogCQkJ
LyogRG8gbm90IG1pc3Rha2Ugb3Vyc2VsdmVzIGFzIGFub3RoZXIgbWFwcGlu
Zy4gKi8NCkBAIC0yMTA5LDYgKzIxMTAsNyBAQA0KIAkJCQl9DQogCQkJfQ0K
IAkJfSB3aGlsZSAoKHZtYXJpbmcgPSB2bWFyaW5nLT52bV9uZXh0X3NoYXJl
KSAhPSBOVUxMKTsNCisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9zaGFyZWRf
bG9jayk7DQogDQogCQlpZihhbGlhc19mb3VuZCAmJiAoKHB0ZV92YWwocHRl
KSAmIFNSTU1VX0NBQ0hFKSAhPSAwKSkgew0KIAkJCXBnZHAgPSBzcm1tdV9w
Z2Rfb2Zmc2V0KHZtYS0+dm1fbW0sIGFkZHJlc3MpOw0KZGlmZiAtdXJOIGxp
bnV4LTIuMy44L2FyY2gvc3BhcmMvbW0vc3VuNGMuYyBsaW51eC1iaXJkLmZf
Y291bnQvYXJjaC9zcGFyYy9tbS9zdW40Yy5jDQotLS0gbGludXgtMi4zLjgv
YXJjaC9zcGFyYy9tbS9zdW40Yy5jCU1vbiBKdW4gMjEgMTI6MzY6MDIgMTk5
OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL3NwYXJjL21tL3N1bjRj
LmMJVHVlIEp1biAyMiAyMzoxMjowNSAxOTk5DQpAQCAtMjY4Miw4ICsyNjgy
LDEwIEBADQogCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsNCiAJaWYoaW5v
ZGUpIHsNCiAJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKGFkZHJlc3MgJiBQ
QUdFX01BU0spIC0gdm1hLT52bV9zdGFydDsNCi0JCXN0cnVjdCB2bV9hcmVh
X3N0cnVjdCAqdm1hcmluZyA9IGlub2RlLT5pX21tYXA7IA0KKwkJc3RydWN0
IHZtX2FyZWFfc3RydWN0ICp2bWFyaW5nOw0KIAkJaW50IGFsaWFzX2ZvdW5k
ID0gMDsNCisJCXNwaW5fbG9jaygmaW5vZGUtPmlfc2hhcmVkX2xvY2spOw0K
KwkJdm1hcmluZyA9IGlub2RlLT5pX21tYXA7IA0KIAkJZG8gew0KIAkJCXVu
c2lnbmVkIGxvbmcgdmFkZHIgPSB2bWFyaW5nLT52bV9zdGFydCArIG9mZnNl
dDsNCiAJCQl1bnNpZ25lZCBsb25nIHN0YXJ0Ow0KQEAgLTI3MTIsNiArMjcx
NCw3IEBADQogCQkJCX0NCiAJCQl9DQogCQl9IHdoaWxlICgodm1hcmluZyA9
IHZtYXJpbmctPnZtX25leHRfc2hhcmUpICE9IE5VTEwpOw0KKwkJc3Bpbl91
bmxvY2soJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiANCiAJCWlmKGFsaWFz
X2ZvdW5kICYmICEocHRlX3ZhbChwdGUpICYgX1NVTjRDX1BBR0VfTk9DQUNI
RSkpIHsNCiAJCQlwZ2RwID0gc3VuNGNfcGdkX29mZnNldCh2bWEtPnZtX21t
LCBhZGRyZXNzKTsNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC9hcmNoL3NwYXJj
NjQva2VybmVsL3N5c19zcGFyYzMyLmMgbGludXgtYmlyZC5mX2NvdW50L2Fy
Y2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYw0KLS0tIGxpbnV4LTIu
My44L2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwlNb24gSnVu
IDIxIDEzOjQyOjAwIDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvYXJj
aC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCVdlZCBKdW4gMjMgMDA6
MDI6MDcgMTk5OQ0KQEAgLTIzMzUsOCArMjMzNSw4IEBADQogCQkJYnJlYWs7
DQogCQl9DQogCQkvKiBCdW1wIHRoZSB1c2FnZSBjb3VudCBhbmQgaW5zdGFs
bCB0aGUgZmlsZS4gKi8NCi0JCWZwW2ldLT5mX2NvdW50Kys7DQotCQljdXJy
ZW50LT5maWxlcy0+ZmRbbmV3X2ZkXSA9IGZwW2ldOw0KKwkJZ2V0X2ZpbGUo
ZnBbaV0pOw0KKwkJZmRfaW5zdGFsbChuZXdfZmQsIGZwW2ldKTsNCiAJfQ0K
IA0KIAlpZiAoaSA+IDApIHsNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC9hcmNo
L3NwYXJjNjQva2VybmVsL3N5c19zdW5vczMyLmMgbGludXgtYmlyZC5mX2Nv
dW50L2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3N1bm9zMzIuYw0KLS0tIGxp
bnV4LTIuMy44L2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3N1bm9zMzIuYwlN
b24gSnVuIDIxIDE0OjA5OjU3IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291
bnQvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jCVR1ZSBKdW4g
MjIgMjM6MTI6MDUgMTk5OQ0KQEAgLTcxMiw3ICs3MTIsNyBAQA0KIAlzdHJ1
Y3QgaW5vZGUgICppbm9kZTsNCiAJc3RydWN0IGZpbGUgICAqZmlsZTsNCiAN
Ci0JZmlsZSA9IGN1cnJlbnQtPmZpbGVzLT5mZCBbZmRdOw0KKwlmaWxlID0g
ZmNoZWNrKGZkKTsNCiAJaWYoIWZpbGUpDQogCQlyZXR1cm4gMDsNCiANCmRp
ZmYgLXVyTiBsaW51eC0yLjMuOC9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNj
LmMgbGludXgtYmlyZC5mX2NvdW50L2FyY2gvc3BhcmM2NC9zb2xhcmlzL21p
c2MuYw0KLS0tIGxpbnV4LTIuMy44L2FyY2gvc3BhcmM2NC9zb2xhcmlzL21p
c2MuYwlNb24gSnVuIDIxIDEyOjM2OjA1IDE5OTkNCisrKyBsaW51eC1iaXJk
LmZfY291bnQvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jCVR1ZSBKdW4g
MjIgMjM6MTI6MDUgMTk5OQ0KQEAgLTgzLDYgKzgzLDcgQEANCiAJCX0NCiAJ
fQ0KIA0KKwlkb3duKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KIAlyZXR2
YWwgPSAtRU5PTUVNOw0KIAlpZighKGZsYWdzICYgTUFQX0ZJWEVEKSAmJiAh
YWRkcikgew0KIAkJdW5zaWduZWQgbG9uZyBhdHRlbXB0ID0gZ2V0X3VubWFw
cGVkX2FyZWEoYWRkciwgbGVuKTsNCkBAIC0xMDIsNiArMTAzLDcgQEANCiAJ
aWYoIXJldF90eXBlKQ0KIAkJcmV0dmFsID0gKChyZXR2YWwgPCAweGYwMDAw
MDAwKSA/IDAgOiByZXR2YWwpOw0KIG91dF9wdXRmOg0KKwl1cCgmY3VycmVu
dC0+bW0tPm1tYXBfc2VtKTsNCiAJaWYgKGZpbGUpDQogCQlmcHV0KGZpbGUp
Ow0KIG91dDoNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC9kcml2ZXJzL2Jsb2Nr
L2xvb3AuYyBsaW51eC1iaXJkLmZfY291bnQvZHJpdmVycy9ibG9jay9sb29w
LmMNCi0tLSBsaW51eC0yLjMuOC9kcml2ZXJzL2Jsb2NrL2xvb3AuYwlNb24g
SnVuIDIxIDEzOjE5OjUzIDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQv
ZHJpdmVycy9ibG9jay9sb29wLmMJVHVlIEp1biAyMiAyMzoxMjowNSAxOTk5
DQpAQCAtMzkxLDYgKzM5MSw3IEBADQogCQkJbG8tPmxvX2JhY2tpbmdfZmls
ZS0+Zl9kZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsNCiAJCQlsby0+bG9fYmFj
a2luZ19maWxlLT5mX29wID0gZmlsZS0+Zl9vcDsNCiAJCQlsby0+bG9fYmFj
a2luZ19maWxlLT5wcml2YXRlX2RhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7
DQorCQkJZmlsZV9tb3ZlKGxvLT5sb19iYWNraW5nX2ZpbGUsIGZpbGUtPmZf
bGlzdCk7DQogDQogCQkJZXJyb3IgPSBnZXRfd3JpdGVfYWNjZXNzKGlub2Rl
KTsNCiAJCQlpZiAoZXJyb3IpIHsNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC9k
cml2ZXJzL2NoYXIvc3lzcnEuYyBsaW51eC1iaXJkLmZfY291bnQvZHJpdmVy
cy9jaGFyL3N5c3JxLmMNCi0tLSBsaW51eC0yLjMuOC9kcml2ZXJzL2NoYXIv
c3lzcnEuYwlNb24gSnVuIDIxIDEyOjM2OjEyIDE5OTkNCisrKyBsaW51eC1i
aXJkLmZfY291bnQvZHJpdmVycy9jaGFyL3N5c3JxLmMJV2VkIEp1biAyMyAw
MDowMzoyNiAxOTk5DQpAQCAtMTUwLDE1ICsxNTAsNiBAQA0KIA0KIC8qIEF1
eCByb3V0aW5lcyBmb3IgdGhlIHN5bmNlciAqLw0KIA0KLXN0YXRpYyB2b2lk
IGFsbF9maWxlc19yZWFkX29ubHkodm9pZCkJICAgIC8qIEtpbGwgd3JpdGUg
cGVybWlzc2lvbnMgb2YgYWxsIGZpbGVzICovDQotew0KLQlzdHJ1Y3QgZmls
ZSAqZmlsZTsNCi0NCi0JZm9yIChmaWxlID0gaW51c2VfZmlscHM7IGZpbGU7
IGZpbGUgPSBmaWxlLT5mX25leHQpDQotCQlpZiAoZmlsZS0+Zl9kZW50cnkg
JiYgZmlsZS0+Zl9jb3VudCAmJiBTX0lTUkVHKGZpbGUtPmZfZGVudHJ5LT5k
X2lub2RlLT5pX21vZGUpKQ0KLQkJCWZpbGUtPmZfbW9kZSAmPSB+MjsNCi19
DQotDQogc3RhdGljIGludCBpc19sb2NhbF9kaXNrKGtkZXZfdCBkZXYpCSAg
ICAvKiBHdWVzcyBpZiB0aGUgZGV2aWNlIGlzIGEgbG9jYWwgaGFyZCBkcml2
ZSAqLw0KIHsNCiAJdW5zaWduZWQgaW50IG1ham9yID0gTUFKT1IoZGV2KTsN
CkBAIC0xOTIsNiArMTgzLDcgQEANCiAJCXN0cnVjdCBzdXBlcl9ibG9jayAq
c2IgPSBnZXRfc3VwZXIoZGV2KTsNCiAJCXN0cnVjdCB2ZnNtb3VudCAqdmZz
bW50Ow0KIAkJaW50IHJldCwgZmxhZ3M7DQorCQlzdHJ1Y3QgZmlsZSAqZmls
ZTsNCiANCiAJCWlmICghc2IpIHsNCiAJCQlwcmludGsoIlN1cGVyYmxvY2sg
bm90IGZvdW5kXG4iKTsNCkBAIC0yMDEsNiArMTkzLDEzIEBADQogCQkJcHJp
bnRrKCJSL09cbiIpOw0KIAkJCXJldHVybjsNCiAJCX0NCisNCisJCXNwaW5f
bG9jaygmc2ItPnNfZmlsZXMuZmxfbG9jayk7DQorCQlmb3IgKGZpbGUgPSBz
Yi0+c19maWxlcy5mbF9saXN0OyBmaWxlOyBmaWxlID0gZmlsZS0+Zl9uZXh0
KQ0KKwkJCWlmIChmaWxlLT5mX2RlbnRyeSAmJiBmaWxlX2NvdW50KGZpbGUp
DQorCQkJCSYmIFNfSVNSRUcoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlf
bW9kZSkpDQorCQkJCWZpbGUtPmZfbW9kZSAmPSB+MjsNCisJCXNwaW5fdW5s
b2NrKCZzYi0+c19maWxlcy5mbF9sb2NrKTsNCiAJCURRVU9UX09GRihkZXYp
Ow0KIAkJZnN5bmNfZGV2KGRldik7DQogCQlmbGFncyA9IE1TX1JET05MWTsN
CkBAIC0yMzksOSArMjM4LDYgQEANCiAJbG9ja19rZXJuZWwoKTsNCiAJcmVt
b3VudF9mbGFnID0gKGVtZXJnZW5jeV9zeW5jX3NjaGVkdWxlZCA9PSBFTUVS
R19SRU1PVU5UKTsNCiAJZW1lcmdlbmN5X3N5bmNfc2NoZWR1bGVkID0gMDsN
Ci0NCi0JaWYgKHJlbW91bnRfZmxhZykNCi0JCWFsbF9maWxlc19yZWFkX29u
bHkoKTsNCiANCiAJZm9yIChtbnQgPSB2ZnNtbnRsaXN0OyBtbnQ7IG1udCA9
IG1udC0+bW50X25leHQpDQogCQlpZiAoaXNfbG9jYWxfZGlzayhtbnQtPm1u
dF9kZXYpKQ0KZGlmZiAtdXJOIGxpbnV4LTIuMy44L2RyaXZlcnMvY2hhci90
cHFpYzAyLmMgbGludXgtYmlyZC5mX2NvdW50L2RyaXZlcnMvY2hhci90cHFp
YzAyLmMNCi0tLSBsaW51eC0yLjMuOC9kcml2ZXJzL2NoYXIvdHBxaWMwMi5j
CU1vbiBKdW4gMjEgMTI6NDk6NTUgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9j
b3VudC9kcml2ZXJzL2NoYXIvdHBxaWMwMi5jCVdlZCBKdW4gMjMgMDA6MDM6
NDMgMTk5OQ0KQEAgLTIyMTYsNyArMjIxNiw3IEBADQogICAgIH0NCiAgICAg
DQogCS8qIE9ubHkgb25lIGF0IGEgdGltZSBmcm9tIGhlcmUgb24uLi4gKi8N
Ci0gICAgaWYgKGZpbHAtPmZfY291bnQ+MSkgCS8qIGZpbHAtPmZfY291bnQ9
PTEgZm9yIHRoZSBmaXJzdCBvcGVuKCkgKi8NCisgICAgaWYgKGZpbGVfY291
bnQoZmlscCk+MSkgCS8qIGZpbHAtPmZfY291bnQ9PTEgZm9yIHRoZSBmaXJz
dCBvcGVuKCkgKi8NCiAgICAgew0KIAlyZXR1cm4gLUVCVVNZOw0KICAgICB9
DQpkaWZmIC11ck4gbGludXgtMi4zLjgvZHJpdmVycy9jaGFyL3R0eV9pby5j
IGxpbnV4LWJpcmQuZl9jb3VudC9kcml2ZXJzL2NoYXIvdHR5X2lvLmMNCi0t
LSBsaW51eC0yLjMuOC9kcml2ZXJzL2NoYXIvdHR5X2lvLmMJTW9uIEp1biAy
MSAxMzo1NjoyNiAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2RyaXZl
cnMvY2hhci90dHlfaW8uYwlUdWUgSnVuIDIyIDIzOjEyOjA2IDE5OTkNCkBA
IC0xNzYsMTAgKzE3NiwxMiBAQA0KIAlzdHJ1Y3QgZmlsZSAqZjsNCiAJaW50
IGNvdW50ID0gMDsNCiAJDQotCWZvcihmID0gaW51c2VfZmlscHM7IGY7IGYg
PSBmLT5mX25leHQpIHsNCisJc3Bpbl9sb2NrKCZ0dHktPnR0eV9maWxlcy5m
bF9sb2NrKTsNCisJZm9yKGYgPSB0dHktPnR0eV9maWxlcy5mbF9saXN0OyBm
OyBmID0gZi0+Zl9uZXh0KSB7DQogCQlpZihmLT5wcml2YXRlX2RhdGEgPT0g
dHR5KQ0KIAkJCWNvdW50Kys7DQogCX0NCisJc3Bpbl91bmxvY2soJnR0eS0+
dHR5X2ZpbGVzLmZsX2xvY2spOw0KIAlpZiAodHR5LT5kcml2ZXIudHlwZSA9
PSBUVFlfRFJJVkVSX1RZUEVfUFRZICYmDQogCSAgICB0dHktPmRyaXZlci5z
dWJ0eXBlID09IFBUWV9UWVBFX1NMQVZFICYmDQogCSAgICB0dHktPmxpbmsg
JiYgdHR5LT5saW5rLT5jb3VudCkNCkBAIC0zOTUsMTMgKzM5NywxMCBAQA0K
IAlsb2NrX2tlcm5lbCgpOw0KIAkNCiAJY2hlY2tfdHR5X2NvdW50KHR0eSwg
ImRvX3R0eV9oYW5ndXAiKTsNCi0JZm9yIChmaWxwID0gaW51c2VfZmlscHM7
IGZpbHA7IGZpbHAgPSBmaWxwLT5mX25leHQpIHsNCi0JCWlmIChmaWxwLT5w
cml2YXRlX2RhdGEgIT0gdHR5KQ0KLQkJCWNvbnRpbnVlOw0KKwlzcGluX2xv
Y2soJnR0eS0+dHR5X2ZpbGVzLmZsX2xvY2spOw0KKwlmb3IgKGZpbHAgPSB0
dHktPnR0eV9maWxlcy5mbF9saXN0OyBmaWxwOyBmaWxwID0gZmlscC0+Zl9u
ZXh0KSB7DQogCQlpZiAoIWZpbHAtPmZfZGVudHJ5KQ0KIAkJCWNvbnRpbnVl
Ow0KLQkJaWYgKCFmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSkNCi0JCQljb250
aW51ZTsNCiAJCWlmIChmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2
ID09IENPTlNPTEVfREVWIHx8DQogCQkgICAgZmlscC0+Zl9kZW50cnktPmRf
aW5vZGUtPmlfcmRldiA9PSBTWVNDT05TX0RFVikgew0KIAkJCWNvbnNfZmls
cCA9IGZpbHA7DQpAQCAtNDEwLDkgKzQwOSwxMCBAQA0KIAkJaWYgKGZpbHAt
PmZfb3AgIT0gJnR0eV9mb3BzKQ0KIAkJCWNvbnRpbnVlOw0KIAkJY2xvc2Vj
b3VudCsrOw0KLQkJdHR5X2Zhc3luYygtMSwgZmlscCwgMCk7DQorCQl0dHlf
ZmFzeW5jKC0xLCBmaWxwLCAwKTsJLyogY2FuJ3QgYmxvY2sgKi8NCiAJCWZp
bHAtPmZfb3AgPSAmaHVuZ191cF90dHlfZm9wczsNCiAJfQ0KKwlzcGluX3Vu
bG9jaygmdHR5LT50dHlfZmlsZXMuZmxfbG9jayk7DQogCQ0KIAkvKiBGSVhN
RSEgV2hhdCBhcmUgdGhlIGxvY2tpbmcgaXNzdWVzIGhlcmU/IFRoaXMgbWF5
IG1lIG92ZXJkb2luZyB0aGluZ3MuLiAqLw0KIAl7DQpAQCAtMTMwMyw2ICsx
MzAzLDcgQEANCiBpbml0X2Rldl9kb25lOg0KICNlbmRpZg0KIAlmaWxwLT5w
cml2YXRlX2RhdGEgPSB0dHk7DQorCWZpbGVfbW92ZShmaWxwLCAmdHR5LT50
dHlfZmlsZXMpOw0KIAljaGVja190dHlfY291bnQodHR5LCAidHR5X29wZW4i
KTsNCiAJaWYgKHR0eS0+ZHJpdmVyLnR5cGUgPT0gVFRZX0RSSVZFUl9UWVBF
X1BUWSAmJg0KIAkgICAgdHR5LT5kcml2ZXIuc3VidHlwZSA9PSBQVFlfVFlQ
RV9NQVNURVIpDQpAQCAtMTkzMyw2ICsxOTM0LDggQEANCiAJdHR5LT50cV9o
YW5ndXAucm91dGluZSA9IGRvX3R0eV9oYW5ndXA7DQogCXR0eS0+dHFfaGFu
Z3VwLmRhdGEgPSB0dHk7DQogCXNlbWFfaW5pdCgmdHR5LT5hdG9taWNfcmVh
ZCwgMSk7DQorCXNwaW5fbG9ja19pbml0KCZ0dHktPnR0eV9maWxlcy5mbF9s
b2NrKTsNCisJdHR5LT50dHlfZmlsZXMuZmxfbGlzdCA9IE5VTEw7DQogfQ0K
IA0KIC8qDQpkaWZmIC11ck4gbGludXgtMi4zLjgvZHJpdmVycy9zY3NpL3N0
LmMgbGludXgtYmlyZC5mX2NvdW50L2RyaXZlcnMvc2NzaS9zdC5jDQotLS0g
bGludXgtMi4zLjgvZHJpdmVycy9zY3NpL3N0LmMJTW9uIEp1biAyMSAxMzox
MjowMSAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2RyaXZlcnMvc2Nz
aS9zdC5jCVdlZCBKdW4gMjMgMDA6MDQ6MDEgMTk5OQ0KQEAgLTg5MCw3ICs4
OTAsNyBAQA0KICAgICBrZGV2X3QgZGV2dCA9IGlub2RlLT5pX3JkZXY7DQog
ICAgIGludCBkZXY7DQogDQotICAgIGlmIChmaWxwLT5mX2NvdW50ID4gMSkN
CisgICAgaWYgKGZpbGVfY291bnQoZmlscCkgPiAxKQ0KIAlyZXR1cm4gMDsN
CiANCiAgICAgZGV2ID0gVEFQRV9OUihkZXZ0KTsNCmRpZmYgLXVyTiBsaW51
eC0yLjMuOC9kcml2ZXJzL3NnaS9jaGFyL3VzZW1hLmMgbGludXgtYmlyZC5m
X2NvdW50L2RyaXZlcnMvc2dpL2NoYXIvdXNlbWEuYw0KLS0tIGxpbnV4LTIu
My44L2RyaXZlcnMvc2dpL2NoYXIvdXNlbWEuYwlNb24gSnVuIDIxIDEzOjA3
OjQxIDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvZHJpdmVycy9zZ2kv
Y2hhci91c2VtYS5jCVdlZCBKdW4gMjMgMDE6MDg6MDQgMTk5OQ0KQEAgLTUw
LDggKzUwLDggQEANCiAJaWYgKG5ld2ZkIDwgMCkNCiAJCXJldHVybiBuZXdm
ZDsNCiAJDQotCWN1cnJlbnQtPmZpbGVzLT5mZCBbbmV3ZmRdID0gdXNlbWEt
PmZpbHA7DQotCXVzZW1hLT5maWxwLT5mX2NvdW50Kys7DQorCWdldF9maWxl
KHVzZW1hKTsNCisJZmRfaW5zdGFsbChuZXdmZCwgdXNlbWEtPmZpbHApOw0K
IAkvKiBJcyB0aGF0IGl0PyAqLw0KIAlwcmludGsoIlVJT0NBVFRBQ0hTRU1B
OiBuZXcgdXNlbWEgZmQgaXMgJWQiLCBuZXdmZCk7DQogCXJldHVybiBuZXdm
ZDsNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC9mcy9kcXVvdC5jIGxpbnV4LWJp
cmQuZl9jb3VudC9mcy9kcXVvdC5jDQotLS0gbGludXgtMi4zLjgvZnMvZHF1
b3QuYwlNb24gSnVuIDIxIDEyOjU1OjMwIDE5OTkNCisrKyBsaW51eC1iaXJk
LmZfY291bnQvZnMvZHF1b3QuYwlUdWUgSnVuIDIyIDIzOjEyOjA2IDE5OTkN
CkBAIC01ODMsMjAgKzU4MywyMiBAQA0KIAlpZiAoIXNiIHx8ICFzYi0+ZHFf
b3ApDQogCQlyZXR1cm47CS8qIG5vdGhpbmcgdG8gZG8gKi8NCiANCi0JZm9y
IChmaWxwID0gaW51c2VfZmlscHM7IGZpbHA7IGZpbHAgPSBmaWxwLT5mX25l
eHQpIHsNCisJc3Bpbl9sb2NrKCZzYi0+c19maWxlcy5mbF9sb2NrKTsNCisJ
Zm9yIChmaWxwID0gc2ItPnNfZmlsZXMuZmxfbGlzdDsgZmlscDsgZmlscCA9
IGZpbHAtPmZfbmV4dCkgew0KIAkJaWYgKCFmaWxwLT5mX2RlbnRyeSkNCiAJ
CQljb250aW51ZTsNCi0JCWlmIChmaWxwLT5mX2RlbnRyeS0+ZF9zYiAhPSBz
YikNCi0JCQljb250aW51ZTsNCiAJCWlub2RlID0gZmlscC0+Zl9kZW50cnkt
PmRfaW5vZGU7DQogCQlpZiAoIWlub2RlKQ0KIAkJCWNvbnRpbnVlOw0KIAkJ
LyogTi5CLiByYWNlIHByb2JsZW0gLS0gZmlscCBjb3VsZCBiZWNvbWUgdW51
c2VkICovDQogCQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsN
CisJCQlzcGluX3VubG9jaygmc2ItPnNfZmlsZXMuZmxfbG9jayk7DQogCQkJ
c2ItPmRxX29wLT5pbml0aWFsaXplKGlub2RlLCB0eXBlKTsNCiAJCQlpbm9k
ZS0+aV9mbGFncyB8PSBTX1FVT1RBOw0KKwkJCXNwaW5fbG9jaygmc2ItPnNf
ZmlsZXMuZmxfbG9jayk7DQogCQl9DQogCX0NCisJc3Bpbl91bmxvY2soJnNi
LT5zX2ZpbGVzLmZsX2xvY2spOw0KIH0NCiANCiBzdGF0aWMgdm9pZCByZXNl
dF9kcXVvdF9wdHJzKGtkZXZfdCBkZXYsIHNob3J0IHR5cGUpDQpAQCAtNjE0
LDExICs2MTYsMTAgQEANCiAJLyogZnJlZSBhbnkgcXVvdGEgZm9yIHVudXNl
ZCBkZW50cmllcyAqLw0KIAlzaHJpbmtfZGNhY2hlX3NiKHNiKTsNCiANCi0J
Zm9yIChmaWxwID0gaW51c2VfZmlscHM7IGZpbHA7IGZpbHAgPSBmaWxwLT5m
X25leHQpIHsNCisJc3Bpbl9sb2NrKCZzYi0+c19maWxlcy5mbF9sb2NrKTsN
CisJZm9yIChmaWxwID0gc2ItPnNfZmlsZXMuZmxfbGlzdDsgZmlscDsgZmls
cCA9IGZpbHAtPmZfbmV4dCkgew0KIAkJaWYgKCFmaWxwLT5mX2RlbnRyeSkN
CiAJCQljb250aW51ZTsNCi0JCWlmIChmaWxwLT5mX2RlbnRyeS0+ZF9zYiAh
PSBzYikNCi0JCQljb250aW51ZTsNCiAJCWlub2RlID0gZmlscC0+Zl9kZW50
cnktPmRfaW5vZGU7DQogCQlpZiAoIWlub2RlKQ0KIAkJCWNvbnRpbnVlOw0K
QEAgLTYzNywxMiArNjM4LDE0IEBADQogCQkJaW5vZGUtPmlfZmxhZ3MgJj0g
flNfUVVPVEE7DQogCQlwdXRfaXQ6DQogCQkJaWYgKGRxdW90ICE9IE5PRFFV
T1QpIHsNCisJCQkJc3Bpbl91bmxvY2soJnNiLT5zX2ZpbGVzLmZsX2xvY2sp
Ow0KIAkJCQlkcXB1dChkcXVvdCk7DQogCQkJCS8qIHdlIG1heSBoYXZlIGJs
b2NrZWQgLi4uICovDQogCQkJCWdvdG8gcmVzdGFydDsNCiAJCQl9DQogCQl9
DQogCX0NCisJc3Bpbl91bmxvY2soJnNiLT5zX2ZpbGVzLmZsX2xvY2spOw0K
IH0NCiANCiBzdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfaW5jcl9pbm9kZXMo
c3RydWN0IGRxdW90ICpkcXVvdCwgdW5zaWduZWQgbG9uZyBudW1iZXIpDQpk
aWZmIC11ck4gbGludXgtMi4zLjgvZnMvZXhlYy5jIGxpbnV4LWJpcmQuZl9j
b3VudC9mcy9leGVjLmMNCi0tLSBsaW51eC0yLjMuOC9mcy9leGVjLmMJTW9u
IEp1biAyMSAxMzozMDoxNSAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50
L2ZzL2V4ZWMuYwlUdWUgSnVuIDIyIDIzOjEyOjA2IDE5OTkNCkBAIC0xMjMs
OCArMTIzLDEyIEBADQogew0KIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRl
bnRyeS0+ZF9pbm9kZTsNCiAJc3RydWN0IGZpbGUgKiBmOw0KKwlzdHJ1Y3Qg
ZmlsZV9saXN0ICogbCA9IE5VTEw7DQogCWludCBmZCwgZXJyb3I7DQogDQor
CWlmIChpbm9kZS0+aV9zYikNCisJCWwgPSAmaW5vZGUtPmlfc2ItPnNfZmls
ZXM7DQorDQogCWVycm9yID0gLUVJTlZBTDsNCiAJaWYgKCFpbm9kZS0+aV9v
cCB8fCAhaW5vZGUtPmlfb3AtPmRlZmF1bHRfZmlsZV9vcHMpDQogCQlnb3Rv
IG91dDsNCkBAIC0xNDUsNiArMTQ5LDcgQEANCiAJCQlpZiAoZXJyb3IpDQog
CQkJCWdvdG8gb3V0X2ZpbHA7DQogCQl9DQorCQlmaWxlX21vdmUoZiwgbCk7
DQogCQlmZF9pbnN0YWxsKGZkLCBmKTsNCiAJCWRnZXQoZGVudHJ5KTsNCiAJ
fQ0KQEAgLTU2Myw3ICs1NjgsOCBAQA0KIAlpZiAoKHJldHZhbCA9IHBlcm1p
c3Npb24oaW5vZGUsIE1BWV9FWEVDKSkgIT0gMCkNCiAJCXJldHVybiByZXR2
YWw7DQogCS8qIGJldHRlciBub3QgZXhlY3V0ZSBmaWxlcyB3aGljaCBhcmUg
YmVpbmcgd3JpdHRlbiB0byAqLw0KLQlpZiAoaW5vZGUtPmlfd3JpdGVjb3Vu
dCA+IDApDQorCS8qIFdBUk5JTkcuIFJlYWQgY29tbWVudHMgaW4gZnMvbmFt
ZWkuYzo6Z2V0X3dyaXRlX2FjY2VzcygpICovDQorCWlmIChhdG9taWNfcmVh
ZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPiAwKQ0KIAkJcmV0dXJuIC1FVFhU
QlNZOw0KIA0KIAlicHJtLT5lX3VpZCA9IGN1cnJlbnQtPmV1aWQ7DQpkaWZm
IC11ck4gbGludXgtMi4zLjgvZnMvZmlsZV90YWJsZS5jIGxpbnV4LWJpcmQu
Zl9jb3VudC9mcy9maWxlX3RhYmxlLmMNCi0tLSBsaW51eC0yLjMuOC9mcy9m
aWxlX3RhYmxlLmMJTW9uIEp1biAyMSAxMzozMDoxNSAxOTk5DQorKysgbGlu
dXgtYmlyZC5mX2NvdW50L2ZzL2ZpbGVfdGFibGUuYwlUdWUgSnVuIDIyIDIz
OjEyOjA2IDE5OTkNCkBAIC0xOCwyNyArMTgsMjEgQEANCiBpbnQgbnJfZnJl
ZV9maWxlcyA9IDA7CS8qIHJlYWQgb25seSAqLw0KIGludCBtYXhfZmlsZXMg
PSBOUl9GSUxFOy8qIHR1bmFibGUgKi8NCiANCi0vKiBGcmVlIGxpc3QgbWFu
YWdlbWVudCwgaWYgeW91IGFyZSBoZXJlIHlvdSBtdXN0IGhhdmUgZl9jb3Vu
dCA9PSAwICovDQotc3RhdGljIHN0cnVjdCBmaWxlICogZnJlZV9maWxwcyA9
IE5VTEw7DQotDQotc3RhdGljIHZvaWQgaW5zZXJ0X2ZpbGVfZnJlZShzdHJ1
Y3QgZmlsZSAqZmlsZSkNCi17DQotCWlmKChmaWxlLT5mX25leHQgPSBmcmVl
X2ZpbHBzKSAhPSBOVUxMKQ0KLQkJZnJlZV9maWxwcy0+Zl9wcHJldiA9ICZm
aWxlLT5mX25leHQ7DQotCWZyZWVfZmlscHMgPSBmaWxlOw0KLQlmaWxlLT5m
X3BwcmV2ID0gJmZyZWVfZmlscHM7DQotCW5yX2ZyZWVfZmlsZXMrKzsNCi19
DQotDQotLyogVGhlIGxpc3Qgb2YgaW4tdXNlIGZpbHAncyBtdXN0IGJlIGV4
cG9ydGVkICh1Z2guLi4pICovDQotc3RydWN0IGZpbGUgKmludXNlX2ZpbHBz
ID0gTlVMTDsNCi0NCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X2ludXNlKHN0
cnVjdCBmaWxlICpmaWxlKQ0KLXsNCi0JaWYoKGZpbGUtPmZfbmV4dCA9IGlu
dXNlX2ZpbHBzKSAhPSBOVUxMKQ0KLQkJaW51c2VfZmlscHMtPmZfcHByZXYg
PSAmZmlsZS0+Zl9uZXh0Ow0KLQlpbnVzZV9maWxwcyA9IGZpbGU7DQotCWZp
bGUtPmZfcHByZXYgPSAmaW51c2VfZmlscHM7DQorLyogSGVyZSB0aGUgbmV3
IGZpbGVzIGdvICovDQorc3RhdGljIHN0cnVjdCBmaWxlX2xpc3QgYW5vbl9s
aXN0ID0geyBOVUxMLCBTUElOX0xPQ0tfVU5MT0NLRUQgfTsNCisvKiBBbmQg
aGVyZSB0aGUgZnJlZSBvbmVzIHNpdCAqLw0KK3N0YXRpYyBzdHJ1Y3QgZmls
ZV9saXN0IGZyZWVfbGlzdCA9IHsgTlVMTCwgU1BJTl9MT0NLX1VOTE9DS0VE
IH07DQorDQorc3RhdGljIHZvaWQgaW5zZXJ0X2ZpbGVfbGlzdChzdHJ1Y3Qg
ZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbGlzdCAqbGlzdCwNCisJCQkJCWlu
dCAqY291bnQpDQorew0KKwlzcGluX2xvY2soJmxpc3QtPmZsX2xvY2spOw0K
KwlpZiAoIChmaWxlLT5mX25leHQgPSBsaXN0LT5mbF9saXN0KSAhPSBOVUxM
KQ0KKwkJbGlzdC0+ZmxfbGlzdC0+Zl9wcHJldiA9ICZmaWxlLT5mX25leHQ7
DQorCWxpc3QtPmZsX2xpc3QgPSBmaWxlOw0KKwlmaWxlLT5mX3BwcmV2ID0g
Jmxpc3QtPmZsX2xpc3Q7DQorCWlmIChjb3VudCkgKCpjb3VudCkrKzsNCisJ
c3Bpbl91bmxvY2soJmxpc3QtPmZsX2xvY2spOw0KIH0NCiANCiAvKiBJdCBk
b2VzIG5vdCBtYXR0ZXIgd2hpY2ggbGlzdCBpdCBpcyBvbi4gKi8NCkBAIC02
NywyNCArNjEsMjggQEANCiAvKiBGaW5kIGFuIHVudXNlZCBmaWxlIHN0cnVj
dHVyZSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4NCiAgKiBSZXR1cm5z
IE5VTEwsIGlmIHRoZXJlIGFyZSBubyBtb3JlIGZyZWUgZmlsZSBzdHJ1Y3R1
cmVzIG9yDQogICogd2UgcnVuIG91dCBvZiBtZW1vcnkuDQorICoNCisgKiBT
TVAtc2FmZS4NCiAgKi8NCiBzdHJ1Y3QgZmlsZSAqIGdldF9lbXB0eV9maWxw
KHZvaWQpDQogew0KIAlzdGF0aWMgaW50IG9sZF9tYXggPSAwOw0KIAlzdHJ1
Y3QgZmlsZSAqIGY7DQogDQorCXNwaW5fbG9jaygmZnJlZV9saXN0LmZsX2xv
Y2spOw0KIAlpZiAobnJfZnJlZV9maWxlcyA+IE5SX1JFU0VSVkVEX0ZJTEVT
KSB7DQogCXVzZWRfb25lOg0KLQkJZiA9IGZyZWVfZmlscHM7DQorCQlmID0g
ZnJlZV9saXN0LmZsX2xpc3Q7DQogCQlyZW1vdmVfZmlscChmKTsNCiAJCW5y
X2ZyZWVfZmlsZXMtLTsNCiAJbmV3X29uZToNCisJCXNwaW5fdW5sb2NrKCZm
cmVlX2xpc3QuZmxfbG9jayk7DQogCQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpm
KSk7DQotCQlmLT5mX2NvdW50ID0gMTsNCisJCWF0b21pY19zZXQoJmYtPmZf
Y291bnQsMSk7DQogCQlmLT5mX3ZlcnNpb24gPSArK2V2ZW50Ow0KIAkJZi0+
Zl91aWQgPSBjdXJyZW50LT5mc3VpZDsNCiAJCWYtPmZfZ2lkID0gY3VycmVu
dC0+ZnNnaWQ7DQotCQlwdXRfaW51c2UoZik7DQorCQlpbnNlcnRfZmlsZV9s
aXN0KGYsICZhbm9uX2xpc3QsIE5VTEwpOw0KIAkJcmV0dXJuIGY7DQogCX0N
CiAJLyoNCkBAIC05Niw3ICs5NCw5IEBADQogCSAqIEFsbG9jYXRlIGEgbmV3
IG9uZSBpZiB3ZSdyZSBiZWxvdyB0aGUgbGltaXQuDQogCSAqLw0KIAlpZiAo
bnJfZmlsZXMgPCBtYXhfZmlsZXMpIHsNCisJCXNwaW5fdW5sb2NrKCZmcmVl
X2xpc3QuZmxfbG9jayk7DQogCQlmID0ga21lbV9jYWNoZV9hbGxvYyhmaWxw
X2NhY2hlLCBTTEFCX0tFUk5FTCk7DQorCQlzcGluX2xvY2soJmZyZWVfbGlz
dC5mbF9sb2NrKTsNCiAJCWlmIChmKSB7DQogCQkJbnJfZmlsZXMrKzsNCiAJ
CQlnb3RvIG5ld19vbmU7DQpAQCAtMTA4LDYgKzEwOCw3IEBADQogCQlwcmlu
dGsoIlZGUzogZmlsZS1tYXggbGltaXQgJWQgcmVhY2hlZFxuIiwgbWF4X2Zp
bGVzKTsNCiAJCW9sZF9tYXggPSBtYXhfZmlsZXM7DQogCX0NCisJc3Bpbl91
bmxvY2soJmZyZWVfbGlzdC5mbF9sb2NrKTsNCiAJcmV0dXJuIE5VTEw7DQog
fQ0KIA0KQEAgLTEyMCw3ICsxMjEsNyBAQA0KIHsNCiAJbWVtc2V0KGZpbHAs
IDAsIHNpemVvZigqZmlscCkpOw0KIAlmaWxwLT5mX21vZGUgICA9IG1vZGU7
DQotCWZpbHAtPmZfY291bnQgID0gMTsNCisJYXRvbWljX3NldCgmZmlscC0+
Zl9jb3VudCwgMSk7DQogCWZpbHAtPmZfZGVudHJ5ID0gZGVudHJ5Ow0KIAlm
aWxwLT5mX3VpZCAgICA9IGN1cnJlbnQtPmZzdWlkOw0KIAlmaWxwLT5mX2dp
ZCAgICA9IGN1cnJlbnQtPmZzZ2lkOw0KQEAgLTEzMywyMiArMTM0LDY5IEBA
DQogDQogdm9pZCBmcHV0KHN0cnVjdCBmaWxlICpmaWxlKQ0KIHsNCi0JaW50
IGNvdW50ID0gZmlsZS0+Zl9jb3VudC0xOw0KKwlpZiAoYXRvbWljX2RlY19h
bmRfdGVzdCgmZmlsZS0+Zl9jb3VudCkpIHsNCisJCXN0cnVjdCBmaWxlX2xp
c3QgKmxpc3Q7DQorCQlhdG9taWNfaW5jKCZmaWxlLT5mX2NvdW50KTsNCisJ
CWxpc3QgPSBmaWxlLT5mX2xpc3Q7DQorDQorCQlsb2Nrc19yZW1vdmVfZmxv
Y2soZmlsZSk7CS8qIFN0aWxsIG5lZWQgdGhlICovDQorCQlfX2ZwdXQoZmls
ZSk7CQkJLyogYmlnIGxvY2sgaGVyZS4gKi8NCiANCi0JaWYgKCFjb3VudCkg
ew0KLQkJbG9ja3NfcmVtb3ZlX2Zsb2NrKGZpbGUpOw0KLQkJX19mcHV0KGZp
bGUpOw0KLQkJZmlsZS0+Zl9jb3VudCA9IDA7DQorCQlhdG9taWNfc2V0KCZm
aWxlLT5mX2NvdW50LCAwKTsNCisJCXNwaW5fbG9jaygmbGlzdC0+ZmxfbG9j
ayk7DQogCQlyZW1vdmVfZmlscChmaWxlKTsNCi0JCWluc2VydF9maWxlX2Zy
ZWUoZmlsZSk7DQotCX0gZWxzZQ0KLQkJZmlsZS0+Zl9jb3VudCA9IGNvdW50
Ow0KKwkJc3Bpbl91bmxvY2soJmxpc3QtPmZsX2xvY2spOw0KKwkJaW5zZXJ0
X2ZpbGVfbGlzdChmaWxlLCAmZnJlZV9saXN0LCAmbnJfZnJlZV9maWxlcyk7
DQorCX0NCiB9DQogDQorLyogSGVyZS4gcHV0X2ZpbHAoKSBpcyBTTVAtc2Fm
ZSBub3cuICovDQorDQogdm9pZCBwdXRfZmlscChzdHJ1Y3QgZmlsZSAqZmls
ZSkNCiB7DQotCWlmKC0tZmlsZS0+Zl9jb3VudCA9PSAwKSB7DQorCWlmKGF0
b21pY19kZWNfYW5kX3Rlc3QoJmZpbGUtPmZfY291bnQpKSB7DQorCQlzdHJ1
Y3QgZmlsZV9saXN0ICpsaXN0ID0gZmlsZS0+Zl9saXN0Ow0KKwkJc3Bpbl9s
b2NrKCZsaXN0LT5mbF9sb2NrKTsNCiAJCXJlbW92ZV9maWxwKGZpbGUpOw0K
LQkJaW5zZXJ0X2ZpbGVfZnJlZShmaWxlKTsNCisJCXNwaW5fdW5sb2NrKCZs
aXN0LT5mbF9sb2NrKTsNCisJCWluc2VydF9maWxlX2xpc3QoZmlsZSwgJmZy
ZWVfbGlzdCwgJm5yX2ZyZWVfZmlsZXMpOw0KKwl9DQorfQ0KKw0KK3ZvaWQg
ZmlsZV9tb3ZlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9saXN0
ICpsaXN0KQ0KK3sNCisJc3RydWN0IGZpbGVfbGlzdCAqb2xkX2xpc3QgPSBm
aWxlLT5mX2xpc3Q7DQorCWlmICghbGlzdCB8fCBsaXN0ID09IG9sZF9saXN0
KQ0KKwkJcmV0dXJuOw0KKwlzcGluX2xvY2soJm9sZF9saXN0LT5mbF9sb2Nr
KTsNCisJcmVtb3ZlX2ZpbHAoZmlsZSk7DQorCXNwaW5fdW5sb2NrKCZvbGRf
bGlzdC0+ZmxfbG9jayk7DQorCWluc2VydF9maWxlX2xpc3QoZmlsZSwgbGlz
dCwgTlVMTCk7DQorfQ0KKw0KK2ludCBmc19tYXlfcmVtb3VudF9ybyhzdHJ1
Y3Qgc3VwZXJfYmxvY2sgKnNiKQ0KK3sNCisJc3RydWN0IGZpbGUgKmZpbGU7
DQorDQorCS8qIENoZWNrIHRoYXQgbm8gZmlsZXMgYXJlIGN1cnJlbnRseSBv
cGVuZWQgZm9yIHdyaXRpbmcuICovDQorCXNwaW5fbG9jaygmc2ItPnNfZmls
ZXMuZmxfbG9jayk7DQorCWZvciAoZmlsZSA9IHNiLT5zX2ZpbGVzLmZsX2xp
c3Q7IGZpbGU7IGZpbGUgPSBmaWxlLT5mX25leHQpIHsNCisJCXN0cnVjdCBp
bm9kZSAqaW5vZGU7DQorCQlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lu
b2RlOw0KKwkJaWYgKCFpbm9kZSkNCisJCQljb250aW51ZTsNCisNCisJCS8q
IEZpbGUgd2l0aCBwZW5kaW5nIGRlbGV0ZT8gKi8NCisJCWlmIChpbm9kZS0+
aV9ubGluayA9PSAwKQ0KKwkJCWdvdG8gdG9vX2JhZDsNCisNCisJCS8qIFdy
aXRhYmxlIGZpbGU/ICovDQorCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2Rl
KSAmJiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQ0KKwkJCXJldHVy
biAwOw0KIAl9DQorCXNwaW5fdW5sb2NrKCZzYi0+c19maWxlcy5mbF9sb2Nr
KTsNCisJcmV0dXJuIDE7IC8qIFRpcycgY29vbCBicm8uICovDQordG9vX2Jh
ZDoNCisJc3Bpbl91bmxvY2soJnNiLT5zX2ZpbGVzLmZsX2xvY2spOw0KKwly
ZXR1cm4gMDsNCiB9DQpkaWZmIC11ck4gbGludXgtMi4zLjgvZnMvaHBmcy9t
bWFwLmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL2hwZnMvbW1hcC5jDQotLS0g
bGludXgtMi4zLjgvZnMvaHBmcy9tbWFwLmMJTW9uIEp1biAyMSAxMzowMzo0
OSAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2ZzL2hwZnMvbW1hcC5j
CVdlZCBKdW4gMjMgMDA6MDY6MDMgMTk5OQ0KQEAgLTk5LDMwICs5OSwzIEBA
DQogCU5VTEwsCQkJLyogc3dhcG91dCAqLw0KIAlOVUxMLAkJCS8qIHN3YXBp
biAqLw0KIH07DQotDQotLyoNCi0gKiBUaGlzIGlzIHVzZWQgZm9yIGEgZ2Vu
ZXJhbCBtbWFwIG9mIGFuIG1zZG9zIGZpbGUNCi0gKiBSZXR1cm5zIDAgaWYg
b2ssIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiBub3QuDQotICovDQot
aW50IGhwZnNfbW1hcChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCB2bV9h
cmVhX3N0cnVjdCAqIHZtYSkNCi17DQotCXN0cnVjdCBpbm9kZSAqaW5vZGUg
PSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsNCi0JLypwcmludGsoInN0YXJ0
IG1tYXBcbiIpOyovDQotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVE
KQkvKiBvbmx5IFBBR0VfQ09XIG9yIHJlYWQtb25seSBzdXBwb3J0ZWQgbm93
ICovDQotCQlyZXR1cm4gLUVJTlZBTDsNCi0JaWYgKHZtYS0+dm1fb2Zmc2V0
ICYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKQ0KLQkJcmV0dXJu
IC1FSU5WQUw7DQotCWlmICghaW5vZGUtPmlfc2IgfHwgIVNfSVNSRUcoaW5v
ZGUtPmlfbW9kZSkpDQotCQlyZXR1cm4gLUVBQ0NFUzsNCi0JLyppZiAoIUlT
X1JET05MWShpbm9kZSkpIHsNCi0JCWlub2RlLT5pX2F0aW1lID0gQ1VSUkVO
VF9USU1FOw0KLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7DQotCX0qLw0K
LQ0KLQl2bWEtPnZtX2ZpbGUgPSBmaWxlOw0KLQkvKmlub2RlLT5pX2NvdW50
Kys7Ki8NCi0JZmlsZS0+Zl9jb3VudCsrOw0KLQl2bWEtPnZtX29wcyA9ICZo
cGZzX2ZpbGVfbW1hcDsNCi0JLypwcmludGsoImVuZCBtbWFwXG4iKTsqLw0K
LQlyZXR1cm4gMDsNCi19DQpkaWZmIC11ck4gbGludXgtMi4zLjgvZnMvaW5v
ZGUuYyBsaW51eC1iaXJkLmZfY291bnQvZnMvaW5vZGUuYw0KLS0tIGxpbnV4
LTIuMy44L2ZzL2lub2RlLmMJTW9uIEp1biAyMSAxNDoxMjowOSAxOTk5DQor
KysgbGludXgtYmlyZC5mX2NvdW50L2ZzL2lub2RlLmMJVHVlIEp1biAyMiAy
MzoxMjowNiAxOTk5DQpAQCAtMTMwLDYgKzEzMCw3IEBADQogCUlOSVRfTElT
VF9IRUFEKCZpbm9kZS0+aV9oYXNoKTsNCiAJSU5JVF9MSVNUX0hFQUQoJmlu
b2RlLT5pX2RlbnRyeSk7DQogCXNlbWFfaW5pdCgmaW5vZGUtPmlfc2VtLCAx
KTsNCisJc3Bpbl9sb2NrX2luaXQoJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsN
CiB9DQogDQogc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2lub2RlKHN0cnVj
dCBpbm9kZSAqaW5vZGUpDQpAQCAtNTIxLDcgKzUyMiw3IEBADQogCWlub2Rl
LT5pX3NvY2sgPSAwOw0KIAlpbm9kZS0+aV9vcCA9IE5VTEw7DQogCWlub2Rl
LT5pX25saW5rID0gMTsNCi0JaW5vZGUtPmlfd3JpdGVjb3VudCA9IDA7DQor
CWF0b21pY19zZXQoJmlub2RlLT5pX3dyaXRlY291bnQsIDApOw0KIAlpbm9k
ZS0+aV9zaXplID0gMDsNCiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IDA7DQog
CW1lbXNldCgmaW5vZGUtPmlfZHF1b3QsIDAsIHNpemVvZihpbm9kZS0+aV9k
cXVvdCkpOw0KQEAgLTgwNiwzMSArODA3LDYgQEANCiAJaWYgKG1heCA+IE1B
WF9JTk9ERSkNCiAJCW1heCA9IE1BWF9JTk9ERTsNCiAJbWF4X2lub2RlcyA9
IG1heDsNCi19DQotDQotLyogVGhpcyBiZWxvbmdzIGluIGZpbGVfdGFibGUu
Yywgbm90IGhlcmUuLi4gKi8NCi1pbnQgZnNfbWF5X3JlbW91bnRfcm8oc3Ry
dWN0IHN1cGVyX2Jsb2NrICpzYikNCi17DQotCXN0cnVjdCBmaWxlICpmaWxl
Ow0KLQ0KLQkvKiBDaGVjayB0aGF0IG5vIGZpbGVzIGFyZSBjdXJyZW50bHkg
b3BlbmVkIGZvciB3cml0aW5nLiAqLw0KLQlmb3IgKGZpbGUgPSBpbnVzZV9m
aWxwczsgZmlsZTsgZmlsZSA9IGZpbGUtPmZfbmV4dCkgew0KLQkJc3RydWN0
IGlub2RlICppbm9kZTsNCi0JCWlmICghZmlsZS0+Zl9kZW50cnkpDQotCQkJ
Y29udGludWU7DQotCQlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2Rl
Ow0KLQkJaWYgKCFpbm9kZSB8fCBpbm9kZS0+aV9zYiAhPSBzYikNCi0JCQlj
b250aW51ZTsNCi0NCi0JCS8qIEZpbGUgd2l0aCBwZW5kaW5nIGRlbGV0ZT8g
Ki8NCi0JCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKQ0KLQkJCXJldHVybiAw
Ow0KLQ0KLQkJLyogV3JpdGFibGUgZmlsZT8gKi8NCi0JCWlmIChTX0lTUkVH
KGlub2RlLT5pX21vZGUpICYmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklU
RSkpDQotCQkJcmV0dXJuIDA7DQotCX0NCi0JcmV0dXJuIDE7IC8qIFRpcycg
Y29vbCBicm8uICovDQogfQ0KIA0KIHZvaWQgdXBkYXRlX2F0aW1lIChzdHJ1
Y3QgaW5vZGUgKmlub2RlKQ0KZGlmZiAtdXJOIGxpbnV4LTIuMy44L2ZzL2xv
Y2tzLmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL2xvY2tzLmMNCi0tLSBsaW51
eC0yLjMuOC9mcy9sb2Nrcy5jCVR1ZSBKdW4gMjIgMjI6MDc6MjkgMTk5OQ0K
KysrIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9sb2Nrcy5jCVR1ZSBKdW4gMjIg
MjM6MTI6MDYgMTk5OQ0KQEAgLTQwMCwxNiArNDAwLDIzIEBADQogDQogCS8q
IERvbid0IGFsbG93IG1hbmRhdG9yeSBsb2NrcyBvbiBmaWxlcyB0aGF0IG1h
eSBiZSBtZW1vcnkgbWFwcGVkDQogCSAqIGFuZCBzaGFyZWQuDQorCSAqDQor
CSAqIFNpbmNlIGRvX21tYXAoKSBpcyBwcm90ZWN0ZWQgYnkgYmlnIGxvY2sg
d2UgYXJlIHNhZmUgaGVyZSwgYnV0IGFzDQorCSAqIHNvb24gYXMgaXQgd2ls
bCBnbyB3ZSB3aWxsIGhhdmUgYSBidW5jaCBvZiBpbnRlcmVzdGluZyBzdHVm
ZiB0bw0KKwkgKiBjYXJlIG9mLg0KIAkgKi8NCiAJaWYgKElTX01BTkRMT0NL
KGlub2RlKSAmJg0KIAkgICAgKGlub2RlLT5pX21vZGUgJiAoU19JU0dJRCB8
IFNfSVhHUlApKSA9PSBTX0lTR0lEICYmDQogCSAgICBpbm9kZS0+aV9tbWFw
KSB7DQotCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGlub2RlLT5p
X21tYXA7DQorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsNCiAJCWVy
cm9yID0gLUVBR0FJTjsNCisJCXNwaW5fbG9jaygmaW5vZGUtPmlfc2hhcmVk
X2xvY2spOw0KKwkJdm1hID0gaW5vZGUtPmlfbW1hcDsNCiAJCWRvIHsNCiAJ
CQlpZiAodm1hLT52bV9mbGFncyAmIFZNX01BWVNIQVJFKQ0KLQkJCQlnb3Rv
IG91dF9wdXRmOw0KKwkJCQlnb3RvIG91dF9wdXRmX3VubG9jazsNCiAJCX0g
d2hpbGUgKCh2bWEgPSB2bWEtPnZtX25leHRfc2hhcmUpICE9IE5VTEwpOw0K
KwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiAJfQ0K
IA0KIAllcnJvciA9IC1FSU5WQUw7DQpAQCAtNDYxLDYgKzQ2OCw5IEBADQog
CWZwdXQoZmlscCk7DQogb3V0Og0KIAlyZXR1cm4gZXJyb3I7DQorb3V0X3B1
dGZfdW5sb2NrOg0KKwlzcGluX3VubG9jaygmaW5vZGUtPmlfc2hhcmVkX2xv
Y2spOw0KKwlnb3RvIG91dF9wdXRmOw0KIH0NCiANCiAvKg0KZGlmZiAtdXJO
IGxpbnV4LTIuMy44L2ZzL25hbWVpLmMgbGludXgtYmlyZC5mX2NvdW50L2Zz
L25hbWVpLmMNCi0tLSBsaW51eC0yLjMuOC9mcy9uYW1laS5jCU1vbiBKdW4g
MjEgMTM6MDc6NTkgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9u
YW1laS5jCVR1ZSBKdW4gMjIgMjM6MTI6MDYgMTk5OQ0KQEAgLTE3MSwxOCAr
MTcxLDIyIEBADQogICogMDogbm8gd3JpdGVycywgbm8gVk1fREVOWVdSSVRF
IG1hcHBpbmdzDQogICogPCAwOiAoLWlfd3JpdGVjb3VudCkgdm1fYXJlYV9z
dHJ1Y3RzIHdpdGggVk1fREVOWVdSSVRFIHNldCBleGlzdA0KICAqID4gMDog
KGlfd3JpdGVjb3VudCkgdXNlcnMgYXJlIHdyaXRpbmcgdG8gdGhlIGZpbGUu
DQorICoNCisgKiBXQVJOSU5HOiBhcyBzb29uIGFzIHdlIHdpbGwgbW92ZSBn
ZXRfd3JpdGVfYWNjZXNzKCksIGRvX21tYXAoKSBvcg0KKyAqIHByZXBhcmVf
YmluZm10KCkgb3V0IG9mIHRoZSBiaWcgbG9jayB3ZSB3aWxsIG5lZWQgYSBz
cGlubG9jayBwcm90ZWN0aW5nDQorICogdGhlIGNoZWNrcyBpbiBhbGwgMy4g
Rm9yIHRoZSB0aW1lIGJlaW5nIGl0IGlzIG5vdCBuZWVkZWQuDQogICovDQog
aW50IGdldF93cml0ZV9hY2Nlc3Moc3RydWN0IGlub2RlICogaW5vZGUpDQog
ew0KLQlpZiAoaW5vZGUtPmlfd3JpdGVjb3VudCA8IDApDQorCWlmIChhdG9t
aWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPCAwKQ0KIAkJcmV0dXJu
IC1FVFhUQlNZOw0KLQlpbm9kZS0+aV93cml0ZWNvdW50Kys7DQorCWF0b21p
Y19pbmMoJmlub2RlLT5pX3dyaXRlY291bnQpOw0KIAlyZXR1cm4gMDsNCiB9
DQogDQogdm9pZCBwdXRfd3JpdGVfYWNjZXNzKHN0cnVjdCBpbm9kZSAqIGlu
b2RlKQ0KIHsNCi0JaW5vZGUtPmlfd3JpdGVjb3VudC0tOw0KKwlhdG9taWNf
ZGVjKCZpbm9kZS0+aV93cml0ZWNvdW50KTsNCiB9DQogDQogLyoNCmRpZmYg
LXVyTiBsaW51eC0yLjMuOC9mcy9uZnMvd3JpdGUuYyBsaW51eC1iaXJkLmZf
Y291bnQvZnMvbmZzL3dyaXRlLmMNCi0tLSBsaW51eC0yLjMuOC9mcy9uZnMv
d3JpdGUuYwlNb24gSnVuIDIxIDE0OjMxOjI1IDE5OTkNCisrKyBsaW51eC1i
aXJkLmZfY291bnQvZnMvbmZzL3dyaXRlLmMJV2VkIEp1biAyMyAwMTowODo1
MCAxOTk5DQpAQCAtMzA1LDYgKzMwNSw3IEBADQogCQlnb3RvIG91dF9yZXE7
DQogDQogCS8qIFB1dCB0aGUgdGFzayBvbiBpbm9kZSdzIHdyaXRlYmFjayBy
ZXF1ZXN0IGxpc3QuICovDQorCWdldF9maWxlKGZpbGUpOw0KIAl3cmVxLT53
Yl9maWxlID0gZmlsZTsNCiAJd3JlcS0+d2JfcGlkICAgID0gY3VycmVudC0+
cGlkOw0KIAl3cmVxLT53Yl9wYWdlICAgPSBwYWdlOw0KQEAgLTQ2Nyw3ICs0
NjgsNiBAQA0KIAkgKiBUaGUgSU8gY29tcGxldGlvbiB3aWxsIHRoZW4gZnJl
ZSB0aGUgcGFnZSBhbmQgdGhlIGRlbnRyeS4NCiAJICovDQogCWdldF9wYWdl
KHBhZ2UpOw0KLQlmaWxlLT5mX2NvdW50Kys7DQogDQogCS8qIFNjaGVkdWxl
IHJlcXVlc3QgKi8NCiAJc3luY2hyb25vdXMgPSBzY2hlZHVsZV93cml0ZV9y
ZXF1ZXN0KHJlcSwgc3luY2hyb25vdXMpOw0KZGlmZiAtdXJOIGxpbnV4LTIu
My44L2ZzL25mc2QvdmZzLmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL25mc2Qv
dmZzLmMNCi0tLSBsaW51eC0yLjMuOC9mcy9uZnNkL3Zmcy5jCU1vbiBKdW4g
MjEgMTM6MDg6MTIgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9u
ZnNkL3Zmcy5jCVR1ZSBKdW4gMjIgMjM6MTI6MDcgMTk5OQ0KQEAgLTM0Miw3
ICszNDIsNyBAQA0KIA0KIAltZW1zZXQoZmlscCwgMCwgc2l6ZW9mKCpmaWxw
KSk7DQogCWZpbHAtPmZfb3AgICAgPSBpbm9kZS0+aV9vcC0+ZGVmYXVsdF9m
aWxlX29wczsNCi0JZmlscC0+Zl9jb3VudCA9IDE7DQorCWF0b21pY19zZXQo
JmZpbHAtPmZfY291bnQsIDEpOw0KIAlmaWxwLT5mX2ZsYWdzID0gd2ZsYWc/
IE9fV1JPTkxZIDogT19SRE9OTFk7DQogCWZpbHAtPmZfbW9kZSAgPSB3Zmxh
Zz8gRk1PREVfV1JJVEUgOiBGTU9ERV9SRUFEOw0KIAlmaWxwLT5mX2RlbnRy
eSA9IGRlbnRyeTsNCkBAIC0zNjAsNyArMzYwLDcgQEANCiAJCQkvKiBJIG5l
YXJseSBhZGRlZCBwdXRfZmlscCgpIGNhbGwgaGVyZSwgYnV0IHRoaXMgZmls
cA0KIAkJCSAqIGlzIHJlYWxseSBvbiBjYWxsZXJzIHN0YWNrIGZyYW1lLiAt
RGF2ZU0NCiAJCQkgKi8NCi0JCQlmaWxwLT5mX2NvdW50LS07DQorCQkJYXRv
bWljX2RlYygmZmlscC0+Zl9jb3VudCk7DQogCQl9DQogCX0NCiBvdXRfbmZz
ZXJyOg0KQEAgLTU4NSw3ICs1ODUsNyBAQA0KIAkJICogbmljZSBhbmQgc2lt
cGxlIHNvbHV0aW9uIChJTUhPKSwgYW5kIGl0IHNlZW1zIHRvDQogCQkgKiB3
b3JrOi0pDQogCQkgKi8NCi0JCWlmIChFWF9XR0FUSEVSKGV4cCkgJiYgKGlu
b2RlLT5pX3dyaXRlY291bnQgPiAxDQorCQlpZiAoRVhfV0dBVEhFUihleHAp
ICYmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPiAxDQog
CQkgfHwgKGxhc3RfaW5vID09IGlub2RlLT5pX2lubyAmJiBsYXN0X2RldiA9
PSBpbm9kZS0+aV9kZXYpKSkgew0KICNpZiAwDQogCQkJaW50ZXJydXB0aWJs
ZV9zbGVlcF9vbl90aW1lb3V0KCZpbm9kZS0+aV93YWl0LCAxMCAqIEhaIC8g
MTAwMCk7DQpkaWZmIC11ck4gbGludXgtMi4zLjgvZnMvb3Blbi5jIGxpbnV4
LWJpcmQuZl9jb3VudC9mcy9vcGVuLmMNCi0tLSBsaW51eC0yLjMuOC9mcy9v
cGVuLmMJTW9uIEp1biAyMSAxMzoxMjoyMyAxOTk5DQorKysgbGludXgtYmly
ZC5mX2NvdW50L2ZzL29wZW4uYwlXZWQgSnVuIDIzIDAwOjA1OjIyIDE5OTkN
CkBAIC02NjMsNiArNjYzLDggQEANCiAJZi0+Zl9vcCA9IE5VTEw7DQogCWlm
IChpbm9kZS0+aV9vcCkNCiAJCWYtPmZfb3AgPSBpbm9kZS0+aV9vcC0+ZGVm
YXVsdF9maWxlX29wczsNCisJaWYgKGlub2RlLT5pX3NiKQ0KKwkJZmlsZV9t
b3ZlKGYsICZpbm9kZS0+aV9zYi0+c19maWxlcyk7DQogCWlmIChmLT5mX29w
ICYmIGYtPmZfb3AtPm9wZW4pIHsNCiAJCWVycm9yID0gZi0+Zl9vcC0+b3Bl
bihpbm9kZSxmKTsNCiAJCWlmIChlcnJvcikNCkBAIC03OTAsNyArNzkyLDcg
QEANCiAJaW50IHJldHZhbDsNCiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0g
ZmlscC0+Zl9kZW50cnk7DQogDQotCWlmIChmaWxwLT5mX2NvdW50ID09IDAp
IHsNCisJaWYgKGZpbGVfY291bnQoZmlscCkgPT0gMCkgew0KIAkJcHJpbnRr
KCJWRlM6IENsb3NlOiBmaWxlIGNvdW50IGlzIDBcbiIpOw0KIAkJcmV0dXJu
IDA7DQogCX0NCmRpZmYgLXVyTiBsaW51eC0yLjMuOC9mcy9wcm9jL2lub2Rl
LmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL3Byb2MvaW5vZGUuYw0KLS0tIGxp
bnV4LTIuMy44L2ZzL3Byb2MvaW5vZGUuYwlNb24gSnVuIDIxIDEzOjM5OjQ1
IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvZnMvcHJvYy9pbm9kZS5j
CVR1ZSBKdW4gMjIgMjM6MTI6MDcgMTk5OQ0KQEAgLTg3LDEzICs4NywyNiBA
QA0KIAl9DQogfQ0KIA0KK3N0cnVjdCBzdXBlcl9ibG9jayAqcHJvY19zdXBl
cl9ibG9ja3MgPSBOVUxMOw0KKw0KK3N0YXRpYyB2b2lkIHByb2NfcHV0X3N1
cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpDQorew0KKwlzdHJ1Y3Qgc3Vw
ZXJfYmxvY2sgKipwID0gJnByb2Nfc3VwZXJfYmxvY2tzOw0KKwl3aGlsZSAo
KnAgIT0gc2IpIHsNCisJCWlmICghKnApCS8qIHNob3VsZCBuZXZlciBoYXBw
ZW4gKi8NCisJCQlyZXR1cm47DQorCQlwID0gKHN0cnVjdCBzdXBlcl9ibG9j
ayAqKikmKCpwKS0+dS5nZW5lcmljX3NicDsNCisJfQ0KKwkqcCA9IChzdHJ1
Y3Qgc3VwZXJfYmxvY2sgKikoKnApLT51LmdlbmVyaWNfc2JwOw0KK30NCisN
CiBzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcHJvY19zb3BzID0g
eyANCiAJcHJvY19yZWFkX2lub2RlLA0KIAlwcm9jX3dyaXRlX2lub2RlLA0K
IAlwcm9jX3B1dF9pbm9kZSwNCiAJcHJvY19kZWxldGVfaW5vZGUsCS8qIGRl
bGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKikgKi8NCiAJTlVMTCwNCi0JTlVM
TCwNCisJcHJvY19wdXRfc3VwZXIsDQogCU5VTEwsDQogCXByb2Nfc3RhdGZz
LA0KIAlOVUxMDQpAQCAtMzIzLDYgKzMzNiw4IEBADQogCWlmICghcy0+c19y
b290KQ0KIAkJZ290byBvdXRfbm9fcm9vdDsNCiAJcGFyc2Vfb3B0aW9ucyhk
YXRhLCAmcm9vdF9pbm9kZS0+aV91aWQsICZyb290X2lub2RlLT5pX2dpZCk7
DQorCXMtPnUuZ2VuZXJpY19zYnAgPSAodm9pZCopIHByb2Nfc3VwZXJfYmxv
Y2tzOw0KKwlwcm9jX3N1cGVyX2Jsb2NrcyA9IHM7DQogCXVubG9ja19zdXBl
cihzKTsNCiAJcmV0dXJuIHM7DQogDQpkaWZmIC11ck4gbGludXgtMi4zLjgv
ZnMvcHJvYy9yb290LmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL3Byb2Mvcm9v
dC5jDQotLS0gbGludXgtMi4zLjgvZnMvcHJvYy9yb290LmMJTW9uIEp1biAy
MSAxNDozMTozMCAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2ZzL3By
b2Mvcm9vdC5jCVR1ZSBKdW4gMjIgMjM6MTI6MDcgMTk5OQ0KQEAgLTM2Niwy
MyArMzY2LDM0IEBADQogc3RhdGljIHZvaWQgcHJvY19raWxsX2lub2Rlcyhp
bnQgaW5vKQ0KIHsNCiAJc3RydWN0IGZpbGUgKmZpbHA7DQorCXN0cnVjdCBz
dXBlcl9ibG9jayAqc2I7DQogDQotCS8qIGludXNlX2ZpbHBzIGlzIHByb3Rl
Y3RlZCBieSB0aGUgc2luZ2xlIGtlcm5lbCBsb2NrICovDQotCWZvciAoZmls
cCA9IGludXNlX2ZpbHBzOyBmaWxwOyBmaWxwID0gZmlscC0+Zl9uZXh0KSB7
DQotCQlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5Ow0KLQkJc3RydWN0IGlub2Rl
ICogaW5vZGU7DQorCS8qDQorCSAqIEFjdHVhbGx5IGl0J3MgYSBwYXJ0aWFs
IHJldm9rZSgpLiBXZSBoYXZlIHRvIGdvIHRocm91Z2ggYWxsDQorCSAqIGNv
cGllcyBvZiBwcm9jZnMuIHByb2Nfc3VwZXJfYmxvY2tzIGlzIHByb3RlY3Rl
ZCBieSB0aGUgYmlnDQorCSAqIGxvY2sgZm9yIHRoZSB0aW1lIGJlaW5nLg0K
KwkgKi8NCisJZm9yIChzYiA9IHByb2Nfc3VwZXJfYmxvY2tzOw0KKwkgICAg
IHNiOw0KKwkgICAgIHNiID0gKHN0cnVjdCBzdXBlcl9ibG9jayopc2ItPnUu
Z2VuZXJpY19zYnApIHsNCisJCXNwaW5fbG9jaygmc2ItPnNfZmlsZXMuZmxf
bG9jayk7DQorCQlmb3IgKGZpbHAgPSBzYi0+c19maWxlcy5mbF9saXN0OyBm
aWxwOyBmaWxwID0gZmlscC0+Zl9uZXh0KSB7DQorCQkJc3RydWN0IGRlbnRy
eSAqIGRlbnRyeTsNCisJCQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsNCiANCi0J
CWRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5Ow0KLQkJaWYgKCFkZW50cnkpDQot
CQkJY29udGludWU7DQotCQlpZiAoZGVudHJ5LT5kX29wICE9ICZwcm9jX2Rl
bnRyeV9vcGVyYXRpb25zKQ0KLQkJCWNvbnRpbnVlOw0KLQkJaW5vZGUgPSBk
ZW50cnktPmRfaW5vZGU7DQotCQlpZiAoIWlub2RlKQ0KLQkJCWNvbnRpbnVl
Ow0KLQkJaWYgKGlub2RlLT5pX2lubyAhPSBpbm8pDQotCQkJY29udGludWU7
DQotCQlmaWxwLT5mX29wID0gTlVMTDsNCisJCQlkZW50cnkgPSBmaWxwLT5m
X2RlbnRyeTsNCisJCQlpZiAoIWRlbnRyeSkNCisJCQkJY29udGludWU7DQor
CQkJaWYgKGRlbnRyeS0+ZF9vcCAhPSAmcHJvY19kZW50cnlfb3BlcmF0aW9u
cykNCisJCQkJY29udGludWU7DQorCQkJaW5vZGUgPSBkZW50cnktPmRfaW5v
ZGU7DQorCQkJaWYgKCFpbm9kZSkNCisJCQkJY29udGludWU7DQorCQkJaWYg
KGlub2RlLT5pX2lubyAhPSBpbm8pDQorCQkJCWNvbnRpbnVlOw0KKwkJCWZp
bHAtPmZfb3AgPSBOVUxMOw0KKwkJfQ0KKwkJc3Bpbl91bmxvY2soJnNiLT5z
X2ZpbGVzLmZsX2xvY2spOw0KIAl9DQogfQ0KIA0KZGlmZiAtdXJOIGxpbnV4
LTIuMy44L2ZzL3NlbGVjdC5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9zZWxl
Y3QuYw0KLS0tIGxpbnV4LTIuMy44L2ZzL3NlbGVjdC5jCU1vbiBKdW4gMjEg
MTM6MTI6MjQgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9zZWxl
Y3QuYwlXZWQgSnVuIDIzIDAxOjA4OjI2IDE5OTkNCkBAIC02NSw4ICs2NSw4
IEBADQogCQkJc3RydWN0IHBvbGxfdGFibGVfZW50cnkgKiBlbnRyeTsNCiBv
a190YWJsZToNCiAJCSAJZW50cnkgPSBwLT5lbnRyeSArIHAtPm5yOw0KKwkJ
IAlnZXRfZmlsZShmaWxwKTsNCiAJCSAJZW50cnktPmZpbHAgPSBmaWxwOw0K
LQkJIAlmaWxwLT5mX2NvdW50Kys7DQogCQkJZW50cnktPndhaXRfYWRkcmVz
cyA9IHdhaXRfYWRkcmVzczsNCiAJCQlpbml0X3dhaXRxdWV1ZV9lbnRyeSgm
ZW50cnktPndhaXQsIGN1cnJlbnQpOw0KIAkJCWFkZF93YWl0X3F1ZXVlKHdh
aXRfYWRkcmVzcywmZW50cnktPndhaXQpOw0KZGlmZiAtdXJOIGxpbnV4LTIu
My44L2ZzL3N1cGVyLmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL3N1cGVyLmMN
Ci0tLSBsaW51eC0yLjMuOC9mcy9zdXBlci5jCU1vbiBKdW4gMjEgMTQ6MTI6
MTAgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9zdXBlci5jCVR1
ZSBKdW4gMjIgMjM6MTI6MDcgMTk5OQ0KQEAgLTUzMSw2ICs1MzEsOCBAQA0K
IAkJSU5JVF9MSVNUX0hFQUQoJnMtPnNfZGlydHkpOw0KIAkJbGlzdF9hZGQg
KCZzLT5zX2xpc3QsIHN1cGVyX2Jsb2Nrcy5wcmV2KTsNCiAJCWluaXRfd2Fp
dHF1ZXVlX2hlYWQoJnMtPnNfd2FpdCk7DQorCQlzcGluX2xvY2tfaW5pdCgm
cy0+c19maWxlcy5mbF9sb2NrKTsNCisJCXMtPnNfZmlsZXMuZmxfbGlzdCA9
IE5VTEw7DQogCX0NCiAJcmV0dXJuIHM7DQogfQ0KZGlmZiAtdXJOIGxpbnV4
LTIuMy44L2luY2x1ZGUvbGludXgvZmlsZS5oIGxpbnV4LWJpcmQuZl9jb3Vu
dC9pbmNsdWRlL2xpbnV4L2ZpbGUuaA0KLS0tIGxpbnV4LTIuMy44L2luY2x1
ZGUvbGludXgvZmlsZS5oCU1vbiBKdW4gMjEgMTM6NDA6MjUgMTk5OQ0KKysr
IGxpbnV4LWJpcmQuZl9jb3VudC9pbmNsdWRlL2xpbnV4L2ZpbGUuaAlXZWQg
SnVuIDIzIDAxOjA4OjU5IDE5OTkNCkBAIC0zMiwxMiArMzIsMTMgQEANCiAJ
cmV0dXJuIGZpbGU7DQogfQ0KIA0KKy8qIFN0aWxsIG5lZWRzIGEgcHJvdGVj
dGlvbiBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgb2YgY3VycmVudC0+ZmlsZXMt
PmZkW10gKi8NCiBleHRlcm4gaW5saW5lIHN0cnVjdCBmaWxlICogZmdldCh1
bnNpZ25lZCBpbnQgZmQpDQogew0KIAlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBm
Y2hlY2soZmQpOw0KIA0KIAlpZiAoZmlsZSkNCi0JCWZpbGUtPmZfY291bnQr
KzsNCisJCWdldF9maWxlKGZpbGUpOw0KIAlyZXR1cm4gZmlsZTsNCiB9DQog
DQpkaWZmIC11ck4gbGludXgtMi4zLjgvaW5jbHVkZS9saW51eC9mcy5oIGxp
bnV4LWJpcmQuZl9jb3VudC9pbmNsdWRlL2xpbnV4L2ZzLmgNCi0tLSBsaW51
eC0yLjMuOC9pbmNsdWRlL2xpbnV4L2ZzLmgJVHVlIEp1biAyMiAyMjowNzoz
MCAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2luY2x1ZGUvbGludXgv
ZnMuaAlXZWQgSnVuIDIzIDAwOjQ0OjAzIDE5OTkNCkBAIC0yMzQsMTMgKzIz
NCwzMCBAQA0KIHR5cGVkZWYgdm9pZCAoYmhfZW5kX2lvX3QpKHN0cnVjdCBi
dWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7DQogdm9pZCBpbml0X2J1
ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwga2Rldl90LCBpbnQsIGJoX2Vu
ZF9pb190ICosIHZvaWQgKik7DQogDQotI2RlZmluZSBfX2J1ZmZlcl9zdGF0
ZShiaCwgc3RhdGUpCSgoKGJoKS0+Yl9zdGF0ZSAmICgxVUwgPDwgQkhfIyNz
dGF0ZSkpICE9IDApDQorc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX3VwdG9k
YXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKQ0KK3sNCisJcmV0dXJuIHRl
c3RfYml0KEJIX1VwdG9kYXRlLCAmYmgtPmJfc3RhdGUpOw0KK30JDQorDQor
c3RhdGljIGlubGluZSBpbnQgYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJf
aGVhZCAqIGJoKQ0KK3sNCisJcmV0dXJuIHRlc3RfYml0KEJIX0RpcnR5LCAm
YmgtPmJfc3RhdGUpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBidWZm
ZXJfbG9ja2VkKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKQ0KK3sNCisJcmV0
dXJuIHRlc3RfYml0KEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSk7DQorfQ0KKw0K
K3N0YXRpYyBpbmxpbmUgaW50IGJ1ZmZlcl9yZXEoc3RydWN0IGJ1ZmZlcl9o
ZWFkICogYmgpDQorew0KKwlyZXR1cm4gdGVzdF9iaXQoQkhfUmVxLCAmYmgt
PmJfc3RhdGUpOw0KK30NCiANCi0jZGVmaW5lIGJ1ZmZlcl91cHRvZGF0ZShi
aCkJX19idWZmZXJfc3RhdGUoYmgsVXB0b2RhdGUpDQotI2RlZmluZSBidWZm
ZXJfZGlydHkoYmgpCV9fYnVmZmVyX3N0YXRlKGJoLERpcnR5KQ0KLSNkZWZp
bmUgYnVmZmVyX2xvY2tlZChiaCkJX19idWZmZXJfc3RhdGUoYmgsTG9jaykN
Ci0jZGVmaW5lIGJ1ZmZlcl9yZXEoYmgpCQlfX2J1ZmZlcl9zdGF0ZShiaCxS
ZXEpDQotI2RlZmluZSBidWZmZXJfcHJvdGVjdGVkKGJoKQlfX2J1ZmZlcl9z
dGF0ZShiaCxQcm90ZWN0ZWQpDQorc3RhdGljIGlubGluZSBpbnQgYnVmZmVy
X3Byb3RlY3RlZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkNCit7DQorCXJl
dHVybiB0ZXN0X2JpdChCSF9Qcm90ZWN0ZWQsICZiaC0+Yl9zdGF0ZSk7DQor
fQ0KIA0KICNkZWZpbmUgYnVmZmVyX3BhZ2UoYmgpCQkobWVtX21hcCArIE1B
UF9OUigoYmgpLT5iX2RhdGEpKQ0KICNkZWZpbmUgdG91Y2hfYnVmZmVyKGJo
KQlzZXRfYml0KFBHX3JlZmVyZW5jZWQsICZidWZmZXJfcGFnZShiaCktPmZs
YWdzKQ0KQEAgLTM0NSw2ICszNjIsNyBAQA0KIAlzdHJ1Y3QgZmlsZV9sb2Nr
CSppX2Zsb2NrOw0KIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKmlfbW1hcDsN
CiAJc3RydWN0IHBhZ2UJCSppX3BhZ2VzOw0KKwlzcGlubG9ja190CQlpX3No
YXJlZF9sb2NrOw0KIAlzdHJ1Y3QgZHF1b3QJCSppX2RxdW90W01BWFFVT1RB
U107DQogCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKmlfcGlwZTsNCiANCkBA
IC0zNTMsNyArMzcxLDcgQEANCiAJdW5zaWduZWQgaW50CQlpX2ZsYWdzOw0K
IAl1bnNpZ25lZCBjaGFyCQlpX3NvY2s7DQogDQotCWludAkJCWlfd3JpdGVj
b3VudDsNCisJYXRvbWljX3QJCWlfd3JpdGVjb3VudDsNCiAJdW5zaWduZWQg
aW50CQlpX2F0dHJfZmxhZ3M7DQogCV9fdTMyCQkJaV9nZW5lcmF0aW9uOw0K
IAl1bmlvbiB7DQpAQCAtNDA0LDcgKzQyMiw4IEBADQogCXN0cnVjdCBmaWxl
X29wZXJhdGlvbnMJKmZfb3A7DQogCW1vZGVfdAkJCWZfbW9kZTsNCiAJbG9m
Zl90CQkJZl9wb3M7DQotCXVuc2lnbmVkIGludCAJCWZfY291bnQsIGZfZmxh
Z3M7DQorCWF0b21pY190IAkJZl9jb3VudDsNCisJdW5zaWduZWQgaW50CQlm
X2ZsYWdzOw0KIAl1bnNpZ25lZCBsb25nIAkJZl9yZWFkYSwgZl9yYW1heCwg
Zl9yYWVuZCwgZl9yYWxlbiwgZl9yYXdpbjsNCiAJc3RydWN0IGZvd25fc3Ry
dWN0CWZfb3duZXI7DQogCXVuc2lnbmVkIGludAkJZl91aWQsIGZfZ2lkOw0K
QEAgLTQxNCw4ICs0MzMsMTMgQEANCiANCiAJLyogbmVlZGVkIGZvciB0dHkg
ZHJpdmVyLCBhbmQgbWF5YmUgb3RoZXJzICovDQogCXZvaWQJCQkqcHJpdmF0
ZV9kYXRhOw0KKwlzdHJ1Y3QgZmlsZV9saXN0CSpmX2xpc3Q7CS8qIHBvaW50
ZXIgYmFjayB0byB0aGUgbGlzdCAqLw0KIH07DQogDQorI2RlZmluZSBnZXRf
ZmlsZSh4KQlhdG9taWNfaW5jKCYoeCktPmZfY291bnQpDQorI2RlZmluZSB0
cmlwbGVfZmlsZSh4KQlhdG9taWNfYWRkKDIsICYoeCktPmZfY291bnQpDQor
I2RlZmluZSBmaWxlX2NvdW50KHgpCWF0b21pY19yZWFkKCYoeCktPmZfY291
bnQpDQorDQogZXh0ZXJuIGludCBpbml0X3ByaXZhdGVfZmlsZShzdHJ1Y3Qg
ZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7DQogDQogI2RlZmluZSBG
TF9QT1NJWAkxDQpAQCAtNDgxLDYgKzUwNSwxMSBAQA0KIA0KIGV4dGVybiBp
bnQgZmFzeW5jX2hlbHBlcihpbnQsIHN0cnVjdCBmaWxlICosIGludCwgc3Ry
dWN0IGZhc3luY19zdHJ1Y3QgKiopOw0KIA0KK3N0cnVjdCBmaWxlX2xpc3Qg
ew0KKwlzdHJ1Y3QgZmlsZSAqCWZsX2xpc3Q7DQorCXNwaW5sb2NrX3QJZmxf
bG9jazsgDQorfTsNCisNCiAjaW5jbHVkZSA8bGludXgvbWluaXhfZnNfc2Iu
aD4NCiAjaW5jbHVkZSA8bGludXgvZXh0Ml9mc19zYi5oPg0KICNpbmNsdWRl
IDxsaW51eC9ocGZzX2ZzX3NiLmg+DQpAQCAtNTIyLDYgKzU1MSw3IEBADQog
CXNob3J0IGludAkJc19pYmFza2V0X2NvdW50Ow0KIAlzaG9ydCBpbnQJCXNf
aWJhc2tldF9tYXg7DQogCXN0cnVjdCBsaXN0X2hlYWQJc19kaXJ0eTsJLyog
ZGlydHkgaW5vZGVzICovDQorCXN0cnVjdCBmaWxlX2xpc3QJc19maWxlczsN
CiANCiAJdW5pb24gew0KIAkJc3RydWN0IG1pbml4X3NiX2luZm8JbWluaXhf
c2I7DQpAQCAtNzM2LDggKzc2Niw2IEBADQogZXh0ZXJuIGludCBmc19tYXlf
cmVtb3VudF9ybyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7DQogZXh0ZXJuIGlu
dCBmc19tYXlfbW91bnQoa2Rldl90KTsNCiANCi1leHRlcm4gc3RydWN0IGZp
bGUgKmludXNlX2ZpbHBzOw0KLQ0KIGV4dGVybiBpbnQgdHJ5X3RvX2ZyZWVf
YnVmZmVycyhzdHJ1Y3QgcGFnZSAqKTsNCiBleHRlcm4gdm9pZCByZWZpbGVf
YnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJ1Zik7DQogDQpAQCAtODQ1
LDYgKzg3Myw3IEBADQogZXh0ZXJuIHZvaWQgaW5zZXJ0X2lub2RlX2hhc2go
c3RydWN0IGlub2RlICopOw0KIGV4dGVybiB2b2lkIHJlbW92ZV9pbm9kZV9o
YXNoKHN0cnVjdCBpbm9kZSAqKTsNCiBleHRlcm4gc3RydWN0IGZpbGUgKiBn
ZXRfZW1wdHlfZmlscCh2b2lkKTsNCitleHRlcm4gdm9pZCBmaWxlX21vdmUo
c3RydWN0IGZpbGUgKmYsIHN0cnVjdCBmaWxlX2xpc3QgKmxpc3QpOw0KIGV4
dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBnZXRfaGFzaF90YWJsZShrZGV2
X3QsIGludCwgaW50KTsNCiBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICog
Z2V0YmxrKGtkZXZfdCwgaW50LCBpbnQpOw0KIGV4dGVybiBzdHJ1Y3QgYnVm
ZmVyX2hlYWQgKiBmaW5kX2J1ZmZlcihrZGV2X3QsIGludCwgaW50KTsNCmRp
ZmYgLXVyTiBsaW51eC0yLjMuOC9pbmNsdWRlL2xpbnV4L25ldC5oIGxpbnV4
LWJpcmQuZl9jb3VudC9pbmNsdWRlL2xpbnV4L25ldC5oDQotLS0gbGludXgt
Mi4zLjgvaW5jbHVkZS9saW51eC9uZXQuaAlNb24gSnVuIDIxIDEyOjQwOjI1
IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvaW5jbHVkZS9saW51eC9u
ZXQuaAlXZWQgSnVuIDIzIDAwOjM5OjA1IDE5OTkNCkBAIC0xMDcsNiArMTA3
LDcgQEANCiAJCQkgdW5zaWduZWQgbG9uZyBhcmcpOwkNCiAgIGludCAgICgq
c2VuZG1zZykJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIg
Km0sIGludCB0b3RhbF9sZW4sIHN0cnVjdCBzY21fY29va2llICpzY20pOw0K
ICAgaW50ICAgKCpyZWN2bXNnKQkoc3RydWN0IHNvY2tldCAqc29jaywgc3Ry
dWN0IG1zZ2hkciAqbSwgaW50IHRvdGFsX2xlbiwgaW50IGZsYWdzLCBzdHJ1
Y3Qgc2NtX2Nvb2tpZSAqc2NtKTsNCisgIHZvaWQgICAoKmJpbmRfZmlsZSkJ
KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBmaWxlICpmaWxlKTsNCiB9
Ow0KIA0KIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IA0KZGlmZiAtdXJOIGxp
bnV4LTIuMy44L2luY2x1ZGUvbGludXgvcHJvY19mcy5oIGxpbnV4LWJpcmQu
Zl9jb3VudC9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaA0KLS0tIGxpbnV4LTIu
My44L2luY2x1ZGUvbGludXgvcHJvY19mcy5oCU1vbiBKdW4gMjEgMTQ6Mjc6
MjkgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9pbmNsdWRlL2xpbnV4
L3Byb2NfZnMuaAlXZWQgSnVuIDIzIDAwOjQ0OjA5IDE5OTkNCkBAIC0zNzQs
NiArMzc0LDcgQEANCiAgICAgfQ0KIH0NCiANCitleHRlcm4gc3RydWN0IHN1
cGVyX2Jsb2NrICpwcm9jX3N1cGVyX2Jsb2NrczsNCiBleHRlcm4gc3RydWN0
IGRlbnRyeV9vcGVyYXRpb25zIHByb2NfZGVudHJ5X29wZXJhdGlvbnM7DQog
ZXh0ZXJuIHN0cnVjdCBzdXBlcl9ibG9jayAqcHJvY19yZWFkX3N1cGVyKHN0
cnVjdCBzdXBlcl9ibG9jayAqLHZvaWQgKixpbnQpOw0KIGV4dGVybiBpbnQg
aW5pdF9wcm9jX2ZzKHZvaWQpOw0KZGlmZiAtdXJOIGxpbnV4LTIuMy44L2lu
Y2x1ZGUvbGludXgvdHR5LmggbGludXgtYmlyZC5mX2NvdW50L2luY2x1ZGUv
bGludXgvdHR5LmgNCi0tLSBsaW51eC0yLjMuOC9pbmNsdWRlL2xpbnV4L3R0
eS5oCU1vbiBKdW4gMjEgMTI6NDA6MjkgMTk5OQ0KKysrIGxpbnV4LWJpcmQu
Zl9jb3VudC9pbmNsdWRlL2xpbnV4L3R0eS5oCVdlZCBKdW4gMjMgMDA6NDQ6
MDkgMTk5OQ0KQEAgLTI3Nyw2ICsyNzcsNyBAQA0KIAlzdHJ1Y3QgdHFfc3Ry
dWN0IHRxX2hhbmd1cDsNCiAJdm9pZCAqZGlzY19kYXRhOw0KIAl2b2lkICpk
cml2ZXJfZGF0YTsNCisJc3RydWN0IGZpbGVfbGlzdCB0dHlfZmlsZXM7DQog
DQogI2RlZmluZSBOX1RUWV9CVUZfU0laRSA0MDk2DQogCQ0KZGlmZiAtdXJO
IGxpbnV4LTIuMy44L2luY2x1ZGUvbmV0L2FmX3VuaXguaCBsaW51eC1iaXJk
LmZfY291bnQvaW5jbHVkZS9uZXQvYWZfdW5peC5oDQotLS0gbGludXgtMi4z
LjgvaW5jbHVkZS9uZXQvYWZfdW5peC5oCU1vbiBKdW4gMjEgMTI6Mzc6MDEg
MTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9pbmNsdWRlL25ldC9hZl91
bml4LmgJVHVlIEp1biAyMiAyMzoxMjowOCAxOTk5DQpAQCAtNiw2ICs2LDcg
QEANCiBleHRlcm4gdm9pZCB1bml4X25vdGluZmxpZ2h0KHN0cnVjdCBmaWxl
ICpmcCk7DQogdHlwZWRlZiBzdHJ1Y3Qgc29jayB1bml4X3NvY2tldDsNCiBl
eHRlcm4gdm9pZCB1bml4X2djKHZvaWQpOw0KK2V4dGVybiBzdHJ1Y3QgZmls
ZV9saXN0IEFGX1VOSVhfZmlsZXM7DQogDQogI2RlZmluZSBVTklYX0hBU0hf
U0laRQkxNg0KIA0KZGlmZiAtdXJOIGxpbnV4LTIuMy44L2luY2x1ZGUvbmV0
L3NvY2suaCBsaW51eC1iaXJkLmZfY291bnQvaW5jbHVkZS9uZXQvc29jay5o
DQotLS0gbGludXgtMi4zLjgvaW5jbHVkZS9uZXQvc29jay5oCU1vbiBKdW4g
MjEgMTM6MTc6NTYgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9pbmNs
dWRlL25ldC9zb2NrLmgJV2VkIEp1biAyMyAwMDo0ODoyMCAxOTk5DQpAQCAt
MTA0LDcgKzEwNCw2IEBADQogCXN0cnVjdCBzb2NrICoJCW90aGVyOw0KIAlz
dHJ1Y3Qgc29jayAqKgkJbGlzdDsNCiAJc3RydWN0IHNvY2sgKgkJZ2NfdHJl
ZTsNCi0JaW50CQkJaW5mbGlnaHQ7DQogCWF0b21pY190CQl1c2VyX2NvdW50
Ow0KIH07DQogDQpkaWZmIC11ck4gbGludXgtMi4zLjgvaXBjL3NobS5jIGxp
bnV4LWJpcmQuZl9jb3VudC9pcGMvc2htLmMNCi0tLSBsaW51eC0yLjMuOC9p
cGMvc2htLmMJTW9uIEp1biAyMSAxMzo1MDowNyAxOTk5DQorKysgbGludXgt
YmlyZC5mX2NvdW50L2lwYy9zaG0uYwlUdWUgSnVuIDIyIDIzOjEyOjA4IDE5
OTkNCkBAIC01NDcsNiArNTQ3LDcgQEANCiAJdW5zaWduZWQgaW50IGlkOw0K
IAlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7DQogDQorCWxvY2tfa2VybmVs
KCk7DQogCWlkID0gU1dQX09GRlNFVChzaG1kLT52bV9wdGUpICYgU0hNX0lE
X01BU0s7DQogCXNocCA9IHNobV9zZWdzW2lkXTsNCiAJaWYgKHNocCA9PSBJ
UENfVU5VU0VEKSB7DQpAQCAtNTU3LDYgKzU1OCw3IEBADQogCXNocC0+dS5z
aG1fbmF0dGNoKys7DQogCXNocC0+dS5zaG1fYXRpbWUgPSBDVVJSRU5UX1RJ
TUU7DQogCXNocC0+dS5zaG1fbHBpZCA9IGN1cnJlbnQtPnBpZDsNCisJdW5s
b2NrX2tlcm5lbCgpOw0KIH0NCiANCiAvKg0KQEAgLTU3MCw2ICs1NzIsNyBA
QA0KIAlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7DQogCWludCBpZDsNCiAN
CisJbG9ja19rZXJuZWwoKTsNCiAJLyogcmVtb3ZlIGZyb20gdGhlIGxpc3Qg
b2YgYXR0YWNoZXMgb2YgdGhlIHNobSBzZWdtZW50ICovDQogCWlkID0gU1dQ
X09GRlNFVChzaG1kLT52bV9wdGUpICYgU0hNX0lEX01BU0s7DQogCXNocCA9
IHNobV9zZWdzW2lkXTsNCkBAIC01NzgsNiArNTgxLDcgQEANCiAJc2hwLT51
LnNobV9kdGltZSA9IENVUlJFTlRfVElNRTsNCiAJaWYgKC0tc2hwLT51LnNo
bV9uYXR0Y2ggPD0gMCAmJiBzaHAtPnUuc2htX3Blcm0ubW9kZSAmIFNITV9E
RVNUKQ0KIAkJa2lsbHNlZyAoaWQpOw0KKwl1bmxvY2tfa2VybmVsKCk7DQog
fQ0KIA0KIC8qDQpkaWZmIC11ck4gbGludXgtMi4zLjgva2VybmVsL2FjY3Qu
YyBsaW51eC1iaXJkLmZfY291bnQva2VybmVsL2FjY3QuYw0KLS0tIGxpbnV4
LTIuMy44L2tlcm5lbC9hY2N0LmMJTW9uIEp1biAyMSAxNDoxODoxMiAxOTk5
DQorKysgbGludXgtYmlyZC5mX2NvdW50L2tlcm5lbC9hY2N0LmMJV2VkIEp1
biAyMyAwMTowOTowNyAxOTk5DQpAQCAtMjc2LDcgKzI3Niw3IEBADQogCSAq
Lw0KIAlpZiAoIWZpbGUpDQogCQlyZXR1cm4gMDsNCi0JZmlsZS0+Zl9jb3Vu
dCsrOw0KKwlnZXRfZmlsZShmaWxlKTsNCiAJaWYgKCFjaGVja19mcmVlX3Nw
YWNlKGZpbGUpKSB7DQogCQlmcHV0KGZpbGUpOw0KIAkJcmV0dXJuIDA7DQpk
aWZmIC11ck4gbGludXgtMi4zLjgva2VybmVsL2V4aXQuYyBsaW51eC1iaXJk
LmZfY291bnQva2VybmVsL2V4aXQuYw0KLS0tIGxpbnV4LTIuMy44L2tlcm5l
bC9leGl0LmMJTW9uIEp1biAyMSAxMjo0MDozNiAxOTk5DQorKysgbGludXgt
YmlyZC5mX2NvdW50L2tlcm5lbC9leGl0LmMJVHVlIEp1biAyMiAyMzoxMjow
OCAxOTk5DQpAQCAtMTY2LDExICsxNjYsOSBAQA0KIAkJCWJyZWFrOw0KIAkJ
d2hpbGUgKHNldCkgew0KIAkJCWlmIChzZXQgJiAxKSB7DQotCQkJCXN0cnVj
dCBmaWxlICogZmlsZSA9IGZpbGVzLT5mZFtpXTsNCi0JCQkJaWYgKGZpbGUp
IHsNCi0JCQkJCWZpbGVzLT5mZFtpXSA9IE5VTEw7DQorCQkJCXN0cnVjdCBm
aWxlICogZmlsZSA9IHhjaGcoJmZpbGVzLT5mZFtpXSwgTlVMTCk7DQorCQkJ
CWlmIChmaWxlKQ0KIAkJCQkJZmlscF9jbG9zZShmaWxlLCBmaWxlcyk7DQot
CQkJCX0NCiAJCQl9DQogCQkJaSsrOw0KIAkJCXNldCA+Pj0gMTsNCmRpZmYg
LXVyTiBsaW51eC0yLjMuOC9rZXJuZWwvZm9yay5jIGxpbnV4LWJpcmQuZl9j
b3VudC9rZXJuZWwvZm9yay5jDQotLS0gbGludXgtMi4zLjgva2VybmVsL2Zv
cmsuYwlUdWUgSnVuIDIyIDIyOjA3OjMwIDE5OTkNCisrKyBsaW51eC1iaXJk
LmZfY291bnQva2VybmVsL2ZvcmsuYwlXZWQgSnVuIDIzIDAxOjA5OjU5IDE5
OTkNCkBAIC0yNDMsMjIgKzI0MywyOCBAQA0KIAkJaWYgKCF0bXApDQogCQkJ
Z290byBmYWlsX25vbWVtOw0KIAkJKnRtcCA9ICptcG50Ow0KKwkJLyoNCisJ
CSAqIEFjY3VyYXRlIGhlcmUuIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0IG5v
dGhpbmcgd2lsbA0KKwkJICogYWx0ZXIgbXBudC0+dm1fZmlsZSBiZWZvcmUg
d2UgaW5jcmVtZW50IGZfY291bnQuDQorCQkgKi8NCiAJCXRtcC0+dm1fZmxh
Z3MgJj0gflZNX0xPQ0tFRDsNCiAJCXRtcC0+dm1fbW0gPSBtbTsNCiAJCW1t
LT5tYXBfY291bnQrKzsNCiAJCXRtcC0+dm1fbmV4dCA9IE5VTEw7DQogCQlm
aWxlID0gdG1wLT52bV9maWxlOw0KIAkJaWYgKGZpbGUpIHsNCi0JCQlmaWxl
LT5mX2NvdW50Kys7DQorCQkJZ2V0X2ZpbGUoZmlsZSk7DQogCQkJaWYgKHRt
cC0+dm1fZmxhZ3MgJiBWTV9ERU5ZV1JJVEUpDQotCQkJCWZpbGUtPmZfZGVu
dHJ5LT5kX2lub2RlLT5pX3dyaXRlY291bnQtLTsNCisJCQkJYXRvbWljX2Rl
YygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCk7DQog
ICAgICAgDQorCQkJc3Bpbl9sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9k
ZS0+aV9zaGFyZWRfbG9jayk7DQogCQkJLyogaW5zZXJ0IHRtcCBpbnRvIHRo
ZSBzaGFyZSBsaXN0LCBqdXN0IGFmdGVyIG1wbnQgKi8NCiAJCQlpZigodG1w
LT52bV9uZXh0X3NoYXJlID0gbXBudC0+dm1fbmV4dF9zaGFyZSkgIT0gTlVM
TCkNCiAJCQkJbXBudC0+dm1fbmV4dF9zaGFyZS0+dm1fcHByZXZfc2hhcmUg
PQ0KIAkJCQkJJnRtcC0+dm1fbmV4dF9zaGFyZTsNCiAJCQltcG50LT52bV9u
ZXh0X3NoYXJlID0gdG1wOw0KIAkJCXRtcC0+dm1fcHByZXZfc2hhcmUgPSAm
bXBudC0+dm1fbmV4dF9zaGFyZTsNCisJCQlzcGluX3VubG9jaygmZmlsZS0+
Zl9kZW50cnktPmRfaW5vZGUtPmlfc2hhcmVkX2xvY2spOw0KIAkJfQ0KIA0K
IAkJLyogQ29weSB0aGUgcGFnZXMsIGJ1dCBkZWZlciBjaGVja2luZyBmb3Ig
ZXJyb3JzICovDQpAQCAtNDgzLDkgKzQ4OSw5IEBADQogCW9sZF9mZHMgPSBv
bGRmLT5mZDsNCiAJZm9yICg7IGkgIT0gMDsgaS0tKSB7DQogCQlzdHJ1Y3Qg
ZmlsZSAqZiA9ICpvbGRfZmRzKys7DQotCQkqbmV3X2ZkcyA9IGY7DQogCQlp
ZiAoZikNCi0JCQlmLT5mX2NvdW50Kys7DQorCQkJZ2V0X2ZpbGUoZik7DQor
CQkqbmV3X2ZkcyA9IGY7DQogCQluZXdfZmRzKys7DQogCX0NCiAJLyogVGhp
cyBpcyBsb25nIHdvcmQgYWxpZ25lZCB0aHVzIGNvdWxkIHVzZSBhIG9wdGlt
aXplZCB2ZXJzaW9uICovIA0KZGlmZiAtdXJOIGxpbnV4LTIuMy44L21tL2Zp
bGVtYXAuYyBsaW51eC1iaXJkLmZfY291bnQvbW0vZmlsZW1hcC5jDQotLS0g
bGludXgtMi4zLjgvbW0vZmlsZW1hcC5jCVR1ZSBKdW4gMjIgMjI6MDc6MzAg
MTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9maWxlbWFwLmMJV2Vk
IEp1biAyMyAwMToxMDowOSAxOTk5DQpAQCAtMTQ4MSw3ICsxNDgxLDcgQEAN
CiAJICogSWYgYSB0YXNrIHRlcm1pbmF0ZXMgd2hpbGUgd2UncmUgc3dhcHBp
bmcgdGhlIHBhZ2UsIHRoZSB2bWEgYW5kDQogCSAqIGFuZCBmaWxlIGNvdWxk
IGJlIHJlbGVhc2VkIC4uLiBpbmNyZW1lbnQgdGhlIGNvdW50IHRvIGJlIHNh
ZmUuDQogCSAqLw0KLQlmaWxlLT5mX2NvdW50Kys7DQorCWdldF9maWxlKGZp
bGUpOw0KIAlyZXN1bHQgPSBkb193cml0ZV9wYWdlKGlub2RlLCBmaWxlLCAo
Y29uc3QgY2hhciAqKSBwYWdlLCBvZmZzZXQpOw0KIAlmcHV0KGZpbGUpOw0K
IAlyZXR1cm4gcmVzdWx0Ow0KZGlmZiAtdXJOIGxpbnV4LTIuMy44L21tL21l
bW9yeS5jIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9tZW1vcnkuYw0KLS0tIGxp
bnV4LTIuMy44L21tL21lbW9yeS5jCU1vbiBKdW4gMjEgMTM6NTA6MTAgMTk5
OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9tZW1vcnkuYwlUdWUgSnVu
IDIyIDIzOjEyOjA4IDE5OTkNCkBAIC03MjMsOCArNzIzLDkgQEANCiAJc3Ry
dWN0IHZtX2FyZWFfc3RydWN0ICogbXBudDsNCiANCiAJdHJ1bmNhdGVfaW5v
ZGVfcGFnZXMoaW5vZGUsIG9mZnNldCk7DQorCXNwaW5fbG9jaygmaW5vZGUt
Pmlfc2hhcmVkX2xvY2spOw0KIAlpZiAoIWlub2RlLT5pX21tYXApDQotCQly
ZXR1cm47DQorCQlnb3RvIG91dF91bmxvY2s7DQogCW1wbnQgPSBpbm9kZS0+
aV9tbWFwOw0KIAlkbyB7DQogCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IG1w
bnQtPnZtX21tOw0KQEAgLTc1NSw2ICs3NTYsOCBAQA0KIAkJemFwX3BhZ2Vf
cmFuZ2UobW0sIHN0YXJ0LCBsZW4pOw0KIAkJZmx1c2hfdGxiX3JhbmdlKG1t
LCBzdGFydCwgZW5kKTsNCiAJfSB3aGlsZSAoKG1wbnQgPSBtcG50LT52bV9u
ZXh0X3NoYXJlKSAhPSBOVUxMKTsNCitvdXRfdW5sb2NrOg0KKwlzcGluX3Vu
bG9jaygmaW5vZGUtPmlfc2hhcmVkX2xvY2spOw0KIH0NCiANCiANCmRpZmYg
LXVyTiBsaW51eC0yLjMuOC9tbS9tbG9jay5jIGxpbnV4LWJpcmQuZl9jb3Vu
dC9tbS9tbG9jay5jDQotLS0gbGludXgtMi4zLjgvbW0vbWxvY2suYwlNb24g
SnVuIDIxIDEzOjA5OjA5IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQv
bW0vbWxvY2suYwlXZWQgSnVuIDIzIDAxOjE0OjM1IDE5OTkNCkBAIC0zMSw3
ICszMSw3IEBADQogCXZtYS0+dm1fb2Zmc2V0ICs9IHZtYS0+dm1fc3RhcnQg
LSBuLT52bV9zdGFydDsNCiAJbi0+dm1fZmxhZ3MgPSBuZXdmbGFnczsNCiAJ
aWYgKG4tPnZtX2ZpbGUpDQotCQluLT52bV9maWxlLT5mX2NvdW50Kys7DQor
CQlnZXRfZmlsZShuLT52bV9maWxlKTsNCiAJaWYgKG4tPnZtX29wcyAmJiBu
LT52bV9vcHMtPm9wZW4pDQogCQluLT52bV9vcHMtPm9wZW4obik7DQogCWlu
c2VydF92bV9zdHJ1Y3QoY3VycmVudC0+bW0sIG4pOw0KQEAgLTUyLDcgKzUy
LDcgQEANCiAJbi0+dm1fb2Zmc2V0ICs9IG4tPnZtX3N0YXJ0IC0gdm1hLT52
bV9zdGFydDsNCiAJbi0+dm1fZmxhZ3MgPSBuZXdmbGFnczsNCiAJaWYgKG4t
PnZtX2ZpbGUpDQotCQluLT52bV9maWxlLT5mX2NvdW50Kys7DQorCQlnZXRf
ZmlsZShuLT52bV9maWxlKTsNCiAJaWYgKG4tPnZtX29wcyAmJiBuLT52bV9v
cHMtPm9wZW4pDQogCQluLT52bV9vcHMtPm9wZW4obik7DQogCWluc2VydF92
bV9zdHJ1Y3QoY3VycmVudC0+bW0sIG4pOw0KQEAgLTgyLDcgKzgyLDcgQEAN
CiAJcmlnaHQtPnZtX29mZnNldCArPSByaWdodC0+dm1fc3RhcnQgLSBsZWZ0
LT52bV9zdGFydDsNCiAJdm1hLT52bV9mbGFncyA9IG5ld2ZsYWdzOw0KIAlp
ZiAodm1hLT52bV9maWxlKQ0KLQkJdm1hLT52bV9maWxlLT5mX2NvdW50ICs9
IDI7DQorCQl0cmlwbGVfZmlsZSh2bWEtPnZtX2ZpbGUpOw0KIA0KIAlpZiAo
dm1hLT52bV9vcHMgJiYgdm1hLT52bV9vcHMtPm9wZW4pIHsNCiAJCXZtYS0+
dm1fb3BzLT5vcGVuKGxlZnQpOw0KQEAgLTE3OSw3ICsxNzksNiBAQA0KIAlp
bnQgZXJyb3IgPSAtRU5PTUVNOw0KIA0KIAlkb3duKCZjdXJyZW50LT5tbS0+
bW1hcF9zZW0pOw0KLQlsb2NrX2tlcm5lbCgpOw0KIAlsZW4gPSAobGVuICsg
KHN0YXJ0ICYgflBBR0VfTUFTSykgKyB+UEFHRV9NQVNLKSAmIFBBR0VfTUFT
SzsNCiAJc3RhcnQgJj0gUEFHRV9NQVNLOw0KIA0KQEAgLTIwMCw3ICsxOTks
NiBAQA0KIA0KIAllcnJvciA9IGRvX21sb2NrKHN0YXJ0LCBsZW4sIDEpOw0K
IG91dDoNCi0JdW5sb2NrX2tlcm5lbCgpOw0KIAl1cCgmY3VycmVudC0+bW0t
Pm1tYXBfc2VtKTsNCiAJcmV0dXJuIGVycm9yOw0KIH0NCkBAIC0yMTAsMTEg
KzIwOCw5IEBADQogCWludCByZXQ7DQogDQogCWRvd24oJmN1cnJlbnQtPm1t
LT5tbWFwX3NlbSk7DQotCWxvY2tfa2VybmVsKCk7DQogCWxlbiA9IChsZW4g
KyAoc3RhcnQgJiB+UEFHRV9NQVNLKSArIH5QQUdFX01BU0spICYgUEFHRV9N
QVNLOw0KIAlzdGFydCAmPSBQQUdFX01BU0s7DQogCXJldCA9IGRvX21sb2Nr
KHN0YXJ0LCBsZW4sIDApOw0KLQl1bmxvY2tfa2VybmVsKCk7DQogCXVwKCZj
dXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KIAlyZXR1cm4gcmV0Ow0KIH0NCkBA
IC0yNTQsNyArMjUwLDYgQEANCiAJaW50IHJldCA9IC1FSU5WQUw7DQogDQog
CWRvd24oJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQotCWxvY2tfa2VybmVs
KCk7DQogCWlmICghZmxhZ3MgfHwgKGZsYWdzICYgfihNQ0xfQ1VSUkVOVCB8
IE1DTF9GVVRVUkUpKSkNCiAJCWdvdG8gb3V0Ow0KIA0KQEAgLTI3Miw3ICsy
NjcsNiBAQA0KIA0KIAlyZXQgPSBkb19tbG9ja2FsbChmbGFncyk7DQogb3V0
Og0KLQl1bmxvY2tfa2VybmVsKCk7DQogCXVwKCZjdXJyZW50LT5tbS0+bW1h
cF9zZW0pOw0KIAlyZXR1cm4gcmV0Ow0KIH0NCkBAIC0yODIsOSArMjc2LDcg
QEANCiAJaW50IHJldDsNCiANCiAJZG93bigmY3VycmVudC0+bW0tPm1tYXBf
c2VtKTsNCi0JbG9ja19rZXJuZWwoKTsNCiAJcmV0ID0gZG9fbWxvY2thbGwo
MCk7DQotCXVubG9ja19rZXJuZWwoKTsNCiAJdXAoJmN1cnJlbnQtPm1tLT5t
bWFwX3NlbSk7DQogCXJldHVybiByZXQ7DQogfQ0KZGlmZiAtdXJOIGxpbnV4
LTIuMy44L21tL21tYXAuYyBsaW51eC1iaXJkLmZfY291bnQvbW0vbW1hcC5j
DQotLS0gbGludXgtMi4zLjgvbW0vbW1hcC5jCU1vbiBKdW4gMjEgMTM6NTA6
MTAgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9tbWFwLmMJV2Vk
IEp1biAyMyAwMToxMDozNyAxOTk5DQpAQCAtNzcsMTAgKzc3LDEyIEBADQog
DQogCWlmIChmaWxlKSB7DQogCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0RF
TllXUklURSkNCi0JCQlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0
ZWNvdW50Kys7DQorCQkJYXRvbWljX2luYygmZmlsZS0+Zl9kZW50cnktPmRf
aW5vZGUtPmlfd3JpdGVjb3VudCk7DQorCQlzcGluX2xvY2soJmZpbGUtPmZf
ZGVudHJ5LT5kX2lub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiAJCWlmKHZtYS0+
dm1fbmV4dF9zaGFyZSkNCiAJCQl2bWEtPnZtX25leHRfc2hhcmUtPnZtX3Bw
cmV2X3NoYXJlID0gdm1hLT52bV9wcHJldl9zaGFyZTsNCiAJCSp2bWEtPnZt
X3BwcmV2X3NoYXJlID0gdm1hLT52bV9uZXh0X3NoYXJlOw0KKwkJc3Bpbl91
bmxvY2soJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NoYXJlZF9sb2Nr
KTsNCiAJfQ0KIH0NCiANCkBAIC0yOTQsNyArMjk2LDEyIEBADQogCWlmIChm
aWxlKSB7DQogCQlpbnQgY29ycmVjdF93Y291bnQgPSAwOw0KIAkJaWYgKHZt
YS0+dm1fZmxhZ3MgJiBWTV9ERU5ZV1JJVEUpIHsNCi0JCQlpZiAoZmlsZS0+
Zl9kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCA+IDApIHsNCisJCQkv
Kg0KKwkJCSAqIFdBUk5JTkc6IHdoZW4gd2Ugd2lsbCB0YWtlIGl0IG91dCBv
ZiB0aGUgYmlnIGxvY2sNCisJCQkgKiB3ZSB3aWxsIG5lZWQgYSBzcGlubG9j
ayBoZXJlLiBTZWUgY29tbWVudHMgaW4NCisJCQkgKiBmcy9uYW1laS5jOjpn
ZXRfd3JpdGVfYWNjZXNzKCkNCisJCQkgKi8NCisJCQlpZiAoYXRvbWljX3Jl
YWQoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3dyaXRlY291bnQpID4g
MCkgew0KIAkJCQllcnJvciA9IC1FVFhUQlNZOw0KIAkJCQlnb3RvIGZyZWVf
dm1hOw0KIAkJCX0NCkBAIC0zMDMsMTcgKzMxMCwxNyBAQA0KIAkJCSAqIG1p
Z2h0KS4gSW4gYW55IGNhc2UsIHRoaXMgdGFrZXMgY2FyZSBvZiBhbnkNCiAJ
CQkgKiByYWNlIHRoYXQgdGhpcyBtaWdodCBjYXVzZS4NCiAJCQkgKi8NCi0J
CQlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50LS07DQor
CQkJYXRvbWljX2RlYygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3Jp
dGVjb3VudCk7DQogCQkJY29ycmVjdF93Y291bnQgPSAxOw0KIAkJfQ0KIAkJ
ZXJyb3IgPSBmaWxlLT5mX29wLT5tbWFwKGZpbGUsIHZtYSk7DQogCQkvKiBG
aXggdXAgdGhlIGNvdW50IGlmIG5lY2Vzc2FyeSwgdGhlbiBjaGVjayBmb3Ig
YW4gZXJyb3IgKi8NCiAJCWlmIChjb3JyZWN0X3djb3VudCkNCi0JCQlmaWxl
LT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50Kys7DQorCQkJYXRv
bWljX2luYygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3Vu
dCk7DQogCQlpZiAoZXJyb3IpDQogCQkJZ290byB1bm1hcF9hbmRfZnJlZV92
bWE7DQorCQlnZXRfZmlsZShmaWxlKTsNCiAJCXZtYS0+dm1fZmlsZSA9IGZp
bGU7DQotCQlmaWxlLT5mX2NvdW50Kys7DQogCX0NCiANCiAJLyoNCkBAIC01
NDcsNyArNTU0LDcgQEANCiAJCW1wbnQtPnZtX2ZpbGUgPSBhcmVhLT52bV9m
aWxlOw0KIAkJbXBudC0+dm1fcHRlID0gYXJlYS0+dm1fcHRlOw0KIAkJaWYg
KG1wbnQtPnZtX2ZpbGUpDQotCQkJbXBudC0+dm1fZmlsZS0+Zl9jb3VudCsr
Ow0KKwkJCWdldF9maWxlKG1wbnQtPnZtX2ZpbGUpOw0KIAkJaWYgKG1wbnQt
PnZtX29wcyAmJiBtcG50LT52bV9vcHMtPm9wZW4pDQogCQkJbXBudC0+dm1f
b3BzLT5vcGVuKG1wbnQpOw0KIAkJYXJlYS0+dm1fZW5kID0gYWRkcjsJLyog
VHJ1bmNhdGUgYXJlYSAqLw0KQEAgLTg3NSwxMyArODgyLDE0IEBADQogCWlm
IChmaWxlKSB7DQogCQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZf
ZGVudHJ5LT5kX2lub2RlOw0KIAkJaWYgKHZtcC0+dm1fZmxhZ3MgJiBWTV9E
RU5ZV1JJVEUpDQotCQkJaW5vZGUtPmlfd3JpdGVjb3VudC0tOw0KLSAgICAg
IA0KKwkJCWF0b21pY19kZWMoJmlub2RlLT5pX3dyaXRlY291bnQpOw0KKyAg
ICAgIAkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9zaGFyZWRfbG9jayk7DQogCQkv
KiBpbnNlcnQgdm1wIGludG8gaW5vZGUncyBzaGFyZSBsaXN0ICovDQogCQlp
Zigodm1wLT52bV9uZXh0X3NoYXJlID0gaW5vZGUtPmlfbW1hcCkgIT0gTlVM
TCkNCiAJCQlpbm9kZS0+aV9tbWFwLT52bV9wcHJldl9zaGFyZSA9ICZ2bXAt
PnZtX25leHRfc2hhcmU7DQogCQlpbm9kZS0+aV9tbWFwID0gdm1wOw0KIAkJ
dm1wLT52bV9wcHJldl9zaGFyZSA9ICZpbm9kZS0+aV9tbWFwOw0KKyAgICAg
IAkJc3Bpbl91bmxvY2soJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiAJfQ0K
IH0NCiANCkBAIC05NDgsNyArOTU2LDcgQEANCiAJCW1tLT5tYXBfY291bnQt
LTsNCiAJCXJlbW92ZV9zaGFyZWRfdm1fc3RydWN0KG1wbnQpOw0KIAkJaWYg
KG1wbnQtPnZtX2ZpbGUpDQotCQkJZnB1dChtcG50LT52bV9maWxlKTsNCisJ
CQlmcHV0KG1wbnQtPnZtX2ZpbGUpOwkvKiBUaGlzIG9uZSBpcyBzYWZlICov
DQogCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIG1wbnQpOw0K
IAkJbXBudCA9IHByZXY7DQogCX0NCmRpZmYgLXVyTiBsaW51eC0yLjMuOC9t
bS9tcHJvdGVjdC5jIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9tcHJvdGVjdC5j
DQotLS0gbGludXgtMi4zLjgvbW0vbXByb3RlY3QuYwlNb24gSnVuIDIxIDEy
OjM3OjAzIDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvbW0vbXByb3Rl
Y3QuYwlXZWQgSnVuIDIzIDAxOjEwOjQ4IDE5OTkNCkBAIC0xMDMsNyArMTAz
LDcgQEANCiAJbi0+dm1fZmxhZ3MgPSBuZXdmbGFnczsNCiAJbi0+dm1fcGFn
ZV9wcm90ID0gcHJvdDsNCiAJaWYgKG4tPnZtX2ZpbGUpDQotCQluLT52bV9m
aWxlLT5mX2NvdW50Kys7DQorCQlnZXRfZmlsZShuLT52bV9maWxlKTsNCiAJ
aWYgKG4tPnZtX29wcyAmJiBuLT52bV9vcHMtPm9wZW4pDQogCQluLT52bV9v
cHMtPm9wZW4obik7DQogCWluc2VydF92bV9zdHJ1Y3QoY3VycmVudC0+bW0s
IG4pOw0KQEAgLTEyNiw3ICsxMjYsNyBAQA0KIAluLT52bV9mbGFncyA9IG5l
d2ZsYWdzOw0KIAluLT52bV9wYWdlX3Byb3QgPSBwcm90Ow0KIAlpZiAobi0+
dm1fZmlsZSkNCi0JCW4tPnZtX2ZpbGUtPmZfY291bnQrKzsNCisJCWdldF9m
aWxlKG4tPnZtX2ZpbGUpOw0KIAlpZiAobi0+dm1fb3BzICYmIG4tPnZtX29w
cy0+b3BlbikNCiAJCW4tPnZtX29wcy0+b3BlbihuKTsNCiAJaW5zZXJ0X3Zt
X3N0cnVjdChjdXJyZW50LT5tbSwgbik7DQpAQCAtMTU4LDcgKzE1OCw3IEBA
DQogCXZtYS0+dm1fZmxhZ3MgPSBuZXdmbGFnczsNCiAJdm1hLT52bV9wYWdl
X3Byb3QgPSBwcm90Ow0KIAlpZiAodm1hLT52bV9maWxlKQ0KLQkJdm1hLT52
bV9maWxlLT5mX2NvdW50ICs9IDI7DQorCQl0cmlwbGVfZmlsZSh2bWEtPnZt
X2ZpbGUpOw0KIAlpZiAodm1hLT52bV9vcHMgJiYgdm1hLT52bV9vcHMtPm9w
ZW4pIHsNCiAJCXZtYS0+dm1fb3BzLT5vcGVuKGxlZnQpOw0KIAkJdm1hLT52
bV9vcHMtPm9wZW4ocmlnaHQpOw0KQEAgLTIxMiw3ICsyMTIsNiBAQA0KIAkJ
cmV0dXJuIDA7DQogDQogCWRvd24oJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7
DQotCWxvY2tfa2VybmVsKCk7DQogDQogCXZtYSA9IGZpbmRfdm1hKGN1cnJl
bnQtPm1tLCBzdGFydCk7DQogCWVycm9yID0gLUVGQVVMVDsNCkBAIC0yNDks
NyArMjQ4LDYgQEANCiAJfQ0KIAltZXJnZV9zZWdtZW50cyhjdXJyZW50LT5t
bSwgc3RhcnQsIGVuZCk7DQogb3V0Og0KLQl1bmxvY2tfa2VybmVsKCk7DQog
CXVwKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KIAlyZXR1cm4gZXJyb3I7
DQogfQ0KZGlmZiAtdXJOIGxpbnV4LTIuMy44L21tL21yZW1hcC5jIGxpbnV4
LWJpcmQuZl9jb3VudC9tbS9tcmVtYXAuYw0KLS0tIGxpbnV4LTIuMy44L21t
L21yZW1hcC5jCU1vbiBKdW4gMjEgMTM6MzY6MDYgMTk5OQ0KKysrIGxpbnV4
LWJpcmQuZl9jb3VudC9tbS9tcmVtYXAuYwlXZWQgSnVuIDIzIDAxOjEwOjUy
IDE5OTkNCkBAIC0xMzQsMTQgKzEzNCwxMiBAQA0KIAkJCW5ld192bWEtPnZt
X3N0YXJ0ID0gbmV3X2FkZHI7DQogCQkJbmV3X3ZtYS0+dm1fZW5kID0gbmV3
X2FkZHIrbmV3X2xlbjsNCiAJCQluZXdfdm1hLT52bV9vZmZzZXQgPSB2bWEt
PnZtX29mZnNldCArIChhZGRyIC0gdm1hLT52bV9zdGFydCk7DQotCQkJbG9j
a19rZXJuZWwoKTsNCiAJCQlpZiAobmV3X3ZtYS0+dm1fZmlsZSkNCi0JCQkJ
bmV3X3ZtYS0+dm1fZmlsZS0+Zl9jb3VudCsrOw0KKwkJCQlnZXRfZmlsZShu
ZXdfdm1hLT52bV9maWxlKTsNCiAJCQlpZiAobmV3X3ZtYS0+dm1fb3BzICYm
IG5ld192bWEtPnZtX29wcy0+b3BlbikNCiAJCQkJbmV3X3ZtYS0+dm1fb3Bz
LT5vcGVuKG5ld192bWEpOw0KIAkJCWluc2VydF92bV9zdHJ1Y3QoY3VycmVu
dC0+bW0sIG5ld192bWEpOw0KIAkJCW1lcmdlX3NlZ21lbnRzKGN1cnJlbnQt
Pm1tLCBuZXdfdm1hLT52bV9zdGFydCwgbmV3X3ZtYS0+dm1fZW5kKTsNCi0J
CQl1bmxvY2tfa2VybmVsKCk7DQogCQkJZG9fbXVubWFwKGFkZHIsIG9sZF9s
ZW4pOw0KIAkJCWN1cnJlbnQtPm1tLT50b3RhbF92bSArPSBuZXdfbGVuID4+
IFBBR0VfU0hJRlQ7DQogCQkJaWYgKG5ld192bWEtPnZtX2ZsYWdzICYgVk1f
TE9DS0VEKSB7DQpkaWZmIC11ck4gbGludXgtMi4zLjgvbmV0L2NvcmUvc2Nt
LmMgbGludXgtYmlyZC5mX2NvdW50L25ldC9jb3JlL3NjbS5jDQotLS0gbGlu
dXgtMi4zLjgvbmV0L2NvcmUvc2NtLmMJTW9uIEp1biAyMSAxMjozNzowNSAx
OTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L25ldC9jb3JlL3NjbS5jCVdl
ZCBKdW4gMjMgMDE6MTE6MDQgMTk5OQ0KQEAgLTIzMiw4ICsyMzIsOCBAQA0K
IAkJCWJyZWFrOw0KIAkJfQ0KIAkJLyogQnVtcCB0aGUgdXNhZ2UgY291bnQg
YW5kIGluc3RhbGwgdGhlIGZpbGUuICovDQotCQlmcFtpXS0+Zl9jb3VudCsr
Ow0KLQkJY3VycmVudC0+ZmlsZXMtPmZkW25ld19mZF0gPSBmcFtpXTsNCisJ
CWdldF9maWxlKGZwW2ldKTsNCisJCWZkX2luc3RhbGwobmV3X2ZkLCBmcFtp
XSk7DQogCX0NCiANCiAJaWYgKGkgPiAwKQ0KQEAgLTI3MSwxMCArMjcxLDkg
QEANCiANCiAJbmV3X2ZwbCA9IGttYWxsb2Moc2l6ZW9mKCpmcGwpLCBHRlBf
S0VSTkVMKTsNCiAJaWYgKG5ld19mcGwpIHsNCi0JCW1lbWNweShuZXdfZnBs
LCBmcGwsIHNpemVvZigqZnBsKSk7DQotDQogCQlmb3IgKGk9ZnBsLT5jb3Vu
dC0xOyBpPj0wOyBpLS0pDQotCQkJZnBsLT5mcFtpXS0+Zl9jb3VudCsrOw0K
KwkJCWdldF9maWxlKGZwbC0+ZnBbaV0pOw0KKwkJbWVtY3B5KG5ld19mcGws
IGZwbCwgc2l6ZW9mKCpmcGwpKTsNCiAJfQ0KIAlyZXR1cm4gbmV3X2ZwbDsN
CiB9DQpkaWZmIC11ck4gbGludXgtMi4zLjgvbmV0L3NvY2tldC5jIGxpbnV4
LWJpcmQuZl9jb3VudC9uZXQvc29ja2V0LmMNCi0tLSBsaW51eC0yLjMuOC9u
ZXQvc29ja2V0LmMJTW9uIEp1biAyMSAxMzo0MDo0NiAxOTk5DQorKysgbGlu
dXgtYmlyZC5mX2NvdW50L25ldC9zb2NrZXQuYwlUdWUgSnVuIDIyIDIzOjEy
OjA4IDE5OTkNCkBAIC0xODcsOSArMTg3LDEwIEBADQogICoJT2J0YWlucyB0
aGUgZmlyc3QgYXZhaWxhYmxlIGZpbGUgZGVzY3JpcHRvciBhbmQgc2V0cyBp
dCB1cCBmb3IgdXNlLiANCiAgKi8NCiANCi1zdGF0aWMgaW50IGdldF9mZChz
dHJ1Y3QgaW5vZGUgKmlub2RlKQ0KK3N0YXRpYyBpbnQgZ2V0X2ZkKHN0cnVj
dCBzb2NrZXQgKnNvY2spDQogew0KIAlpbnQgZmQ7DQorCXN0cnVjdCBpbm9k
ZSAqaW5vZGUgPSBzb2NrLT5pbm9kZTsNCiANCiAJLyoNCiAJICoJRmluZCBh
IGZpbGUgZGVzY3JpcHRvciBzdWl0YWJsZSBmb3IgcmV0dXJuIHRvIHRoZSB1
c2VyLiANCkBAIC0yMTcsMTEgKzIxOCwxNCBAQA0KIAkJICovDQogCQlpbm9k
ZS0+aV9jb3VudCsrOw0KIA0KLQkJZmRfaW5zdGFsbChmZCwgZmlsZSk7DQog
CQlmaWxlLT5mX29wID0gJnNvY2tldF9maWxlX29wczsNCiAJCWZpbGUtPmZf
bW9kZSA9IDM7DQogCQlmaWxlLT5mX2ZsYWdzID0gT19SRFdSOw0KIAkJZmls
ZS0+Zl9wb3MgPSAwOw0KKwkJaWYgKHNvY2stPm9wcy0+YmluZF9maWxlKQ0K
KwkJCXNvY2stPm9wcy0+YmluZF9maWxlKHNvY2ssIGZpbGUpOw0KKwkJZmRf
aW5zdGFsbChmZCwgZmlsZSk7DQorCQlzb2NrLT5maWxlID0gZmlsZTsNCiAJ
fQ0KIAlyZXR1cm4gZmQ7DQogfQ0KQEAgLTY1MywxMSArNjU3LDkgQEANCiAJ
aWYgKHJldHZhbCA8IDApDQogCQlnb3RvIG91dDsNCiANCi0JcmV0dmFsID0g
Z2V0X2ZkKHNvY2stPmlub2RlKTsNCisJcmV0dmFsID0gZ2V0X2ZkKHNvY2sp
Ow0KIAlpZiAocmV0dmFsIDwgMCkNCiAJCWdvdG8gb3V0X3JlbGVhc2U7DQot
CXNvY2stPmZpbGUgPSBmY2hlY2socmV0dmFsKTsNCi0NCiBvdXQ6DQogCXVu
bG9ja19rZXJuZWwoKTsNCiAJcmV0dXJuIHJldHZhbDsNCkBAIC04MjIsOSAr
ODI0LDggQEANCiAJCWdvdG8gb3V0X3JlbGVhc2U7DQogCW5ld3NvY2sgPSBz
b2NraV9sb29rdXAoaW5vZGUpOw0KIA0KLQlpZiAoKGVyciA9IGdldF9mZChp
bm9kZSkpIDwgMCkgDQorCWlmICgoZXJyID0gZ2V0X2ZkKG5ld3NvY2spKSA8
IDApIA0KIAkJZ290byBvdXRfcmVsZWFzZTsNCi0JbmV3c29jay0+ZmlsZSA9
IGZjaGVjayhlcnIpOw0KIA0KIAlpZiAodXBlZXJfc29ja2FkZHIpDQogCXsN
CmRpZmYgLXVyTiBsaW51eC0yLjMuOC9uZXQvc3VucnBjL3hwcnQuYyBsaW51
eC1iaXJkLmZfY291bnQvbmV0L3N1bnJwYy94cHJ0LmMNCi0tLSBsaW51eC0y
LjMuOC9uZXQvc3VucnBjL3hwcnQuYwlNb24gSnVuIDIxIDEzOjQxOjA3IDE5
OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvbmV0L3N1bnJwYy94cHJ0LmMJ
V2VkIEp1biAyMyAwMToxMToxMCAxOTk5DQpAQCAtMTQ1NSw4ICsxNDU1LDgg
QEANCiANCiAJcHJvdG8gPSAoc29jay0+dHlwZSA9PSBTT0NLX0RHUkFNKT8g
SVBQUk9UT19VRFAgOiBJUFBST1RPX1RDUDsNCiAJaWYgKCh4cHJ0ID0geHBy
dF9zZXR1cChzb2NrLCBwcm90bywgYXAsIHRvKSkgIT0gTlVMTCkgew0KKwkJ
Z2V0X2ZpbGUoZmlsZSk7DQogCQl4cHJ0LT5maWxlID0gZmlsZTsNCi0JCWZp
bGUtPmZfY291bnQrKzsNCiAJfQ0KIA0KIAlyZXR1cm4geHBydDsNCmRpZmYg
LXVyTiBsaW51eC0yLjMuOC9uZXQvdW5peC9hZl91bml4LmMgbGludXgtYmly
ZC5mX2NvdW50L25ldC91bml4L2FmX3VuaXguYw0KLS0tIGxpbnV4LTIuMy44
L25ldC91bml4L2FmX3VuaXguYwlNb24gSnVuIDIxIDEzOjE4OjIzIDE5OTkN
CisrKyBsaW51eC1iaXJkLmZfY291bnQvbmV0L3VuaXgvYWZfdW5peC5jCVR1
ZSBKdW4gMjIgMjM6MTI6MDggMTk5OQ0KQEAgLTExMiw2ICsxMTIsNyBAQA0K
IGludCBzeXNjdGxfdW5peF9kZXN0cm95X2RlbGF5ID0gMTAqSFo7DQogaW50
IHN5c2N0bF91bml4X21heF9kZ3JhbV9xbGVuID0gMTA7DQogDQorc3RydWN0
IGZpbGVfbGlzdCBBRl9VTklYX2ZpbGVzID0geyBOVUxMLCBTUElOX0xPQ0tf
VU5MT0NLRUQgfTsNCiB1bml4X3NvY2tldCAqdW5peF9zb2NrZXRfdGFibGVb
VU5JWF9IQVNIX1NJWkUrMV07DQogc3RhdGljIGF0b21pY190IHVuaXhfbnJf
c29ja3MgPSBBVE9NSUNfSU5JVCgwKTsNCiBzdGF0aWMgREVDTEFSRV9XQUlU
X1FVRVVFX0hFQUQodW5peF9hY2tfd3F1ZXVlKTsNCkBAIC0xMDE1LDcgKzEw
MTYsNyBAQA0KIAl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmb3RoZXItPnJlY2Vp
dmVfcXVldWUpID49DQogCSAgICAgICBzeXNjdGxfdW5peF9tYXhfZGdyYW1f
cWxlbikNCiAJew0KLQkJaWYgKHNvY2stPmZpbGUtPmZfZmxhZ3MgJiBPX05P
TkJMT0NLKQ0KKwkJaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlU
KQ0KIAkJew0KIAkJCWVyciA9IC1FQUdBSU47DQogCQkJZ290byBvdXRfdW5s
b2NrOw0KQEAgLTE0OTYsNiArMTQ5NywxMiBAQA0KIAkJc29ja193YWtlX2Fz
eW5jKHNrLT5zb2NrZXQsIDIpOw0KIH0NCiANCitzdGF0aWMgdm9pZCB1bml4
X2JpbmRfZmlsZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgZmlsZSAq
ZmlsZSkNCit7DQorCSooaW50KikmZmlsZS0+cHJpdmF0ZV9kYXRhID0gMDsN
CisJZmlsZV9tb3ZlKGZpbGUsICZBRl9VTklYX2ZpbGVzKTsNCit9DQorDQog
I2lmZGVmIENPTkZJR19QUk9DX0ZTDQogc3RhdGljIGludCB1bml4X3JlYWRf
cHJvYyhjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0
LA0KIAkJCSAgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpDQpA
QCAtMTU3NCw3ICsxNTgxLDggQEANCiAJc29ja19ub19nZXRzb2Nrb3B0LA0K
IAlzb2NrX25vX2ZjbnRsLA0KIAl1bml4X3N0cmVhbV9zZW5kbXNnLA0KLQl1
bml4X3N0cmVhbV9yZWN2bXNnDQorCXVuaXhfc3RyZWFtX3JlY3Ztc2csDQor
CXVuaXhfYmluZF9maWxlDQogfTsNCiANCiBzdHJ1Y3QgcHJvdG9fb3BzIHVu
aXhfZGdyYW1fb3BzID0gew0KQEAgLTE1OTUsNyArMTYwMyw4IEBADQogCXNv
Y2tfbm9fZ2V0c29ja29wdCwNCiAJc29ja19ub19mY250bCwNCiAJdW5peF9k
Z3JhbV9zZW5kbXNnLA0KLQl1bml4X2RncmFtX3JlY3Ztc2cNCisJdW5peF9k
Z3JhbV9yZWN2bXNnLA0KKwl1bml4X2JpbmRfZmlsZQ0KIH07DQogDQogc3Ry
dWN0IG5ldF9wcm90b19mYW1pbHkgdW5peF9mYW1pbHlfb3BzID0gew0KZGlm
ZiAtdXJOIGxpbnV4LTIuMy44L25ldC91bml4L2dhcmJhZ2UuYyBsaW51eC1i
aXJkLmZfY291bnQvbmV0L3VuaXgvZ2FyYmFnZS5jDQotLS0gbGludXgtMi4z
LjgvbmV0L3VuaXgvZ2FyYmFnZS5jCU1vbiBKdW4gMjEgMTI6Mzc6MTAgMTk5
OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9uZXQvdW5peC9nYXJiYWdlLmMJ
V2VkIEp1biAyMyAwMDowOTo0NyAxOTk5DQpAQCAtMTE1LDE2ICsxMTUsMTQg
QEANCiAgDQogdm9pZCB1bml4X2luZmxpZ2h0KHN0cnVjdCBmaWxlICpmcCkN
CiB7DQotCXVuaXhfc29ja2V0ICpzPXVuaXhfZ2V0X3NvY2tldChmcCk7DQot
CWlmKHMpDQotCQlzLT5wcm90aW5mby5hZl91bml4LmluZmxpZ2h0Kys7DQor
CWlmIChmcC0+Zl9saXN0ID09ICZBRl9VTklYX2ZpbGVzKQ0KKwkJKCooaW50
KikmZnAtPnByaXZhdGVfZGF0YSktLTsNCiB9DQogDQogdm9pZCB1bml4X25v
dGluZmxpZ2h0KHN0cnVjdCBmaWxlICpmcCkNCiB7DQotCXVuaXhfc29ja2V0
ICpzPXVuaXhfZ2V0X3NvY2tldChmcCk7DQotCWlmKHMpDQotCQlzLT5wcm90
aW5mby5hZl91bml4LmluZmxpZ2h0LS07DQorCWlmIChmcC0+Zl9saXN0ID09
ICZBRl9VTklYX2ZpbGVzKQ0KKwkJKCooaW50KikmZnAtPnByaXZhdGVfZGF0
YSktLTsNCiB9DQogDQogDQpAQCAtMTYyLDYgKzE2MCw3IEBADQogCXVuaXhf
c29ja2V0ICpzOw0KIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhpdGxpc3Q7DQog
CXN0cnVjdCBza19idWZmICpza2I7DQorCXN0cnVjdCBmaWxlICpmcDsNCiAJ
DQogCS8qDQogCSAqCUF2b2lkIGEgcmVjdXJzaXZlIEdDLg0KQEAgLTE5Miwx
NiArMTkxLDE1IEBADQogCSAqCVB1c2ggcm9vdCBzZXQNCiAJICovDQogDQot
CWZvcmFsbF91bml4X3NvY2tldHMoaSwgcykNCi0Jew0KLQkJLyoNCi0JCSAq
CUlmIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGRlc2NyaXB0b3IgYXJlIG5vdA0K
LQkJICoJaW4gZmxpZ2h0IHdlIGFyZSBpbiB1c2UuDQotCQkgKi8NCi0JCWlm
KHMtPnNvY2tldCAmJiBzLT5zb2NrZXQtPmZpbGUgJiYNCi0JCSAgIHMtPnNv
Y2tldC0+ZmlsZS0+Zl9jb3VudCA+IHMtPnByb3RpbmZvLmFmX3VuaXguaW5m
bGlnaHQpDQotCQkJbWF5YmVfdW5tYXJrX2FuZF9wdXNoKHMpOw0KKwlzcGlu
X2xvY2soJkFGX1VOSVhfZmlsZXMuZmxfbG9jayk7DQorCWZvcihmcD1BRl9V
TklYX2ZpbGVzLmZsX2xpc3Q7IGZwOyBmcD1mcC0+Zl9uZXh0KSB7DQorCQlp
ZiAoIWZwLT5mX2RlbnRyeSkNCisJCQljb250aW51ZTsNCisJCWlmICgoaW50
KWZwLT5wcml2YXRlX2RhdGEgPj0gZmlsZV9jb3VudChmcCkpDQorCQkJY29u
dGludWU7DQorCQltYXliZV91bm1hcmtfYW5kX3B1c2goZnAtPmZfZGVudHJ5
LT5kX2lub2RlLT51LnNvY2tldF9pLnNrKTsNCiAJfQ0KKwlzcGluX3VubG9j
aygmQUZfVU5JWF9maWxlcy5mbF9sb2NrKTsNCiANCiAJLyoNCiAJICoJTWFy
ayBwaGFzZSANCg==
---559023410-597166189-930117290=:17822--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/