[patch] pagecache-2.3.9-H3, bmap & ext2fs cleanup patch

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Sat, 26 Jun 1999 15:27:34 +0200 (CEST)


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.

---1247997369-1480143156-930401062=:23982
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.LNX.4.04.9906261451521.661@earth.city.tvnet.hu>

This is the second try for the bmap() cleanup, the attached patch is
against 2.3.9-pre4. The bmap() interface is now i hope properly cleaned
up, bmap() is in fact gone and was changed to be a more generic interface
to the lowlevel filesystem:

/*
* Generic block allocator exported by the lowlevel fs. All
* metadata details are handled by the lowlevel fs, all 'logical
* data content' details are handled by the highlevel block layer.
*/
int (*get_block) (struct inode *, long, struct buffer_head *, int);

this fits rather nicely into pre4. This cleanup got rid of a fair amount
of unnecessery argument passing between ext2fs and the page cache layer.
The change breaks block filesystems, only ext2fs, nfs, procfs and swapping
is tested - the rest should fail safely at compilation time. bmap()-less
filesystems are not affected.

i did some lowlevel ext2fs cleanups as well - more to come, but maybe
people want to comment on the direction i took.

about the get_block() change: i've changed/extended the fs <-> pagecache
interface relative to pre4, to do the following [more or less additional]
things too:

#define BH_Mapped 4 /* b_blocknr is a cached block mapping value */
#define BH_New 5 /* buffer got freshly allocated by the fs */
#define BH_Hole 6 /* buffer is an fs hole */

i think all of these 3 new flags represents a distinct property, and thus
we should not try too hard to merge them.

BH_Mapped is similar to what was BH_Allocated to BH_Mapped, but the
'BH_Allocated' name i think is confusing now, in the case of filesytem
holes. [just to clarify: it was not confusing with pre4's mechanizm, but
it became confusing in this patch] A BH_Mapped buffer now purely means
that a mapping has been established between the pagecache and the lowlevel
fs - it does not mean the block is allocated and physically present. A
hole is 'mapped', but not 'allocated'.

BH_New is straightforward: it shows wether a logical inode block was
freshly allocated by the fs. This can be and is used by the higher block
level to optimize security-clearing (or non-clearing) of blocks. [i'll
send patches for more optimizations later]

BH_Hole is straightforward as well. A filesystem does not have to support
holes.

<FUTURE STUFF>

I think fs-holes are a handy concept, and they could be pushed further
into the VM layer (by introducing PG_zero or PG_hole) so that mmap()-ed,
existing holes are mapped to the zero-page - am i reading the VM code
correctly that this does not happen currently? If accessing a hole,
filemap_nopage() currently does an unconditional readpage() (if page not
present in the pagecache). Holes could be cleared in a delayed way, via
the following semantics:

- if user-space or VM accesses it then do clear_user() or map-zero.
- if hole is written then just allocate the new block - which will be
cleared anyway.

this brings 3 distinct optimizations: 1) we can zero-map mmap()-ed holes.
2) we can clear_user() when a hole is read() 3) we can save clearing the
page altogether if it's overwritten later on, or we can merge it with the
write if a partial write happens. [this later optimization is 'in my
queue']

we can even do a 4th optimization: save memory by not allocating a full
page for a 'virtual hole': only a small, dynamic 'struct page' placeholder
is necessery so it can be found in the pagecache.

am i overlooking some conceptual difficulty, are such 'virtual holes'
doable? [i'll try to come up with some test-patch]

[two of those hole-related optimizations are in the domain of the 'block
layer', and thus they are possible today. The other optimizations are in
the domain of the pagecache and need a slight redesign.]

</FUTURE STUFF>

the patch also includes some minor buffer.c stuff - BH_Protected is
removed [will send a patch for rd.c]. I also included the
mark_buffer_uptodate optimization.

the only place that relies on the old fs-hole semantics and has ugly
block-IO code is swapping and brw_page(), my plan is to extend
swapper_inode_ops with it's own get_block() implementation - is this what
we want? With those planned changes, swapping will be more and more like a
special one-inode block-filesystem, used internally by the VM.

anyway, i've tested the patch carefully, it masters big files,
out-of-space and out-of-memory situations properly and does not seem to
corrupt files or metadata in stress-tests.

-- mingo

---1247997369-1480143156-930401062=:23982
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="pagecache-2.3.9-H3"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.990626144422.23982B@chiara.csoma.elte.hu>
Content-Description:

LS0tIGxpbnV4L2ZzL3Byb2MvYXJyYXkuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6
NTQ6MzAgMTk5OQ0KKysrIGxpbnV4L2ZzL3Byb2MvYXJyYXkuYwlTYXQgSnVu
IDI2IDE1OjI5OjM3IDE5OTkNCkBAIC0xNTE5LDcgKzE1MTksNyBAQA0KIAlO
VUxMLAkJCS8qIHJlbmFtZSAqLw0KIAlOVUxMLAkJCS8qIHJlYWRsaW5rICov
DQogCU5VTEwsCQkJLyogZm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJCQkvKiBi
bWFwICovDQorCU5VTEwsCQkJLyogZ2V0X2Jsb2NrICovDQogCU5VTEwsCQkJ
LyogcmVhZHBhZ2UgKi8NCiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8NCiAJ
TlVMTCwJCQkvKiBmbHVzaHBhZ2UgKi8NCkBAIC0xNTcwLDcgKzE1NzAsNyBA
QA0KIAlOVUxMLAkJCS8qIHJlbmFtZSAqLw0KIAlOVUxMLAkJCS8qIHJlYWRs
aW5rICovDQogCU5VTEwsCQkJLyogZm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJ
CQkvKiBibWFwICovDQorCU5VTEwsCQkJLyogZ2V0X2Jsb2NrICovDQogCU5V
TEwsCQkJLyogcmVhZHBhZ2UgKi8NCiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2Ug
Ki8NCiAJTlVMTCwJCQkvKiBmbHVzaHBhZ2UgKi8NCi0tLSBsaW51eC9mcy9w
cm9jL3Jvb3QuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAgMTk5OQ0KKysr
IGxpbnV4L2ZzL3Byb2Mvcm9vdC5jCVNhdCBKdW4gMjYgMTU6Mjk6MzcgMTk5
OQ0KQEAgLTcxLDcgKzcxLDcgQEANCiAJTlVMTCwJCQkvKiByZW5hbWUgKi8N
CiAJTlVMTCwJCQkvKiByZWFkbGluayAqLw0KIAlOVUxMLAkJCS8qIGZvbGxv
d19saW5rICovDQotCU5VTEwsCQkJLyogYm1hcCAqLw0KKwlOVUxMLAkJCS8q
IGdldF9ibG9jayAqLw0KIAlOVUxMLAkJCS8qIHJlYWRwYWdlICovDQogCU5V
TEwsCQkJLyogd3JpdGVwYWdlICovDQogCU5VTEwsCQkJLyogZmx1c2hwYWdl
ICovDQpAQCAtOTcsNyArOTcsNyBAQA0KIAlOVUxMLAkJCS8qIHJlbmFtZSAq
Lw0KIAlOVUxMLAkJCS8qIHJlYWRsaW5rICovDQogCU5VTEwsCQkJLyogZm9s
bG93X2xpbmsgKi8NCi0JTlVMTCwJCQkvKiBibWFwICovDQorCU5VTEwsCQkJ
LyogZ2V0X2Jsb2NrICovDQogCU5VTEwsCQkJLyogcmVhZHBhZ2UgKi8NCiAJ
TlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJCQkvKiBmbHVzaHBh
Z2UgKi8NCkBAIC0xNDIsNyArMTQyLDcgQEANCiAJTlVMTCwJCQkvKiByZW5h
bWUgKi8NCiAJTlVMTCwJCQkvKiByZWFkbGluayAqLw0KIAlOVUxMLAkJCS8q
IGZvbGxvd19saW5rICovDQotCU5VTEwsCQkJLyogYm1hcCAqLw0KKwlOVUxM
LAkJCS8qIGdldF9ibG9jayAqLw0KIAlOVUxMLAkJCS8qIHJlYWRwYWdlICov
DQogCU5VTEwsCQkJLyogd3JpdGVwYWdlICovDQogCU5VTEwsCQkJLyogZmx1
c2hwYWdlICovDQpAQCAtMzAyLDcgKzMwMiw3IEBADQogCU5VTEwsCQkJLyog
cmVuYW1lICovDQogCU5VTEwsCQkJLyogcmVhZGxpbmsgKi8NCiAJTlVMTCwJ
CQkvKiBmb2xsb3dfbGluayAqLw0KLQlOVUxMLAkJCS8qIGJtYXAgKi8NCisJ
TlVMTCwJCQkvKiBnZXRfYmxvY2sgKi8NCiAJTlVMTCwJCQkvKiByZWFkcGFn
ZSAqLw0KIAlOVUxMLAkJCS8qIHdyaXRlcGFnZSAqLw0KIAlOVUxMLAkJCS8q
IGZsdXNocGFnZSAqLw0KQEAgLTQ5MCw3ICs0OTAsNyBAQA0KIAlOVUxMLAkJ
CS8qIHJlbmFtZSAqLw0KIAlwcm9jX3NlbGZfcmVhZGxpbmssCS8qIHJlYWRs
aW5rICovDQogCXByb2Nfc2VsZl9mb2xsb3dfbGluaywJLyogZm9sbG93X2xp
bmsgKi8NCi0JTlVMTCwJCQkvKiBibWFwICovDQorCU5VTEwsCQkJLyogZ2V0
X2Jsb2NrICovDQogCU5VTEwsCQkJLyogcmVhZHBhZ2UgKi8NCiAJTlVMTCwJ
CQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJCQkvKiBmbHVzaHBhZ2UgKi8N
CkBAIC01MTMsNyArNTEzLDcgQEANCiAJTlVMTCwJCQkvKiByZW5hbWUgKi8N
CiAJcHJvY19yZWFkbGluaywJCS8qIHJlYWRsaW5rICovDQogCXByb2NfZm9s
bG93X2xpbmssCS8qIGZvbGxvd19saW5rICovDQotCU5VTEwsCQkJLyogYm1h
cCAqLw0KKwlOVUxMLAkJCS8qIGdldF9ibG9jayAqLw0KIAlOVUxMLAkJCS8q
IHJlYWRwYWdlICovDQogCU5VTEwsCQkJLyogd3JpdGVwYWdlICovDQogCU5V
TEwsCQkJLyogZmx1c2hwYWdlICovDQotLS0gbGludXgvZnMvcHJvYy9tZW0u
Yy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAgMTk5OQ0KKysrIGxpbnV4L2Zz
L3Byb2MvbWVtLmMJU2F0IEp1biAyNiAxNToyOTozNyAxOTk5DQpAQCAtMzM2
LDcgKzMzNiw3IEBADQogCU5VTEwsCQkJLyogcmVuYW1lICovDQogCU5VTEws
CQkJLyogcmVhZGxpbmsgKi8NCiAJTlVMTCwJCQkvKiBmb2xsb3dfbGluayAq
Lw0KLQlOVUxMLAkJCS8qIGJtYXAgKi8NCisJTlVMTCwJCQkvKiBnZXRfYmxv
Y2sgKi8NCiAJTlVMTCwJCQkvKiByZWFkcGFnZSAqLw0KIAlOVUxMLAkJCS8q
IHdyaXRlcGFnZSAqLw0KIAlOVUxMLAkJCS8qIGZsdXNocGFnZSAqLw0KLS0t
IGxpbnV4L2ZzL3Byb2MvYmFzZS5jLm9yaWcJU2F0IEp1biAyNiAxNDo1NDoz
MCAxOTk5DQorKysgbGludXgvZnMvcHJvYy9iYXNlLmMJU2F0IEp1biAyNiAx
NToyOTozNyAxOTk5DQpAQCAtNDUsNyArNDUsNyBAQA0KIAlOVUxMLAkJCS8q
IHJlbmFtZSAqLw0KIAlOVUxMLAkJCS8qIHJlYWRsaW5rICovDQogCU5VTEws
CQkJLyogZm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJCQkvKiBibWFwICovDQor
CU5VTEwsCQkJLyogZ2V0X2Jsb2NrICovDQogCU5VTEwsCQkJLyogcmVhZHBh
Z2UgKi8NCiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJCQkv
KiBmbHVzaHBhZ2UgKi8NCi0tLSBsaW51eC9mcy9wcm9jL2ZkLmMub3JpZwlT
YXQgSnVuIDI2IDE0OjU0OjMwIDE5OTkNCisrKyBsaW51eC9mcy9wcm9jL2Zk
LmMJU2F0IEp1biAyNiAxNToyOTozNyAxOTk5DQpAQCAtNTEsNyArNTEsNyBA
QA0KIAlOVUxMLAkJCS8qIHJlbmFtZSAqLw0KIAlOVUxMLAkJCS8qIHJlYWRs
aW5rICovDQogCU5VTEwsCQkJLyogZm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJ
CQkvKiBibWFwICovDQorCU5VTEwsCQkJLyogZ2V0X2Jsb2NrICovDQogCU5V
TEwsCQkJLyogcmVhZHBhZ2UgKi8NCiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2Ug
Ki8NCiAJTlVMTCwJCQkvKiBmbHVzaHBhZ2UgKi8NCi0tLSBsaW51eC9mcy9w
cm9jL2dlbmVyaWMuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAgMTk5OQ0K
KysrIGxpbnV4L2ZzL3Byb2MvZ2VuZXJpYy5jCVNhdCBKdW4gMjYgMTU6Mjk6
MzcgMTk5OQ0KQEAgLTYwLDcgKzYwLDcgQEANCiAJTlVMTCwJCS8qIHJlbmFt
ZQkqLw0KIAlOVUxMLAkJLyogcmVhZGxpbmsJKi8NCiAJTlVMTCwJCS8qIGZv
bGxvd19saW5rIAkqLw0KLQlOVUxMLAkJLyogYm1hcCAJKi8NCisJTlVMTCwJ
CS8qIGdldF9ibG9jayAJKi8NCiAJTlVMTCwJCS8qIHJlYWRwYWdlIAkqLw0K
IAlOVUxMLAkJLyogd3JpdGVwYWdlIAkqLw0KIAlOVUxMLAkJLyogZmx1c2hw
YWdlIAkqLw0KQEAgLTg2LDcgKzg2LDcgQEANCiAJTlVMTCwJCQkvKiByZW5h
bWUgKi8NCiAJTlVMTCwJCQkvKiByZWFkbGluayAqLw0KIAlOVUxMLAkJCS8q
IGZvbGxvd19saW5rICovDQotCU5VTEwsCQkJLyogYm1hcCAqLw0KKwlOVUxM
LAkJCS8qIGdldF9ibG9jayAqLw0KIAlOVUxMLAkJCS8qIHJlYWRwYWdlICov
DQogCU5VTEwsCQkJLyogd3JpdGVwYWdlICovDQogCU5VTEwsCQkJLyogZmx1
c2hwYWdlICovDQotLS0gbGludXgvZnMvcHJvYy9rbXNnLmMub3JpZwlTYXQg
SnVuIDI2IDE0OjU0OjMwIDE5OTkNCisrKyBsaW51eC9mcy9wcm9jL2ttc2cu
YwlTYXQgSnVuIDI2IDE1OjI5OjM3IDE5OTkNCkBAIC03Miw3ICs3Miw3IEBA
DQogCU5VTEwsCQkJLyogcmVuYW1lICovDQogCU5VTEwsCQkJLyogcmVhZGxp
bmsgKi8NCiAJTlVMTCwJCQkvKiBmb2xsb3dfbGluayAqLw0KLQlOVUxMLAkJ
CS8qIGJtYXAgKi8NCisJTlVMTCwJCQkvKiBnZXRfYmxvY2sgKi8NCiAJTlVM
TCwJCQkvKiByZWFkcGFnZSAqLw0KIAlOVUxMLAkJCS8qIHdyaXRlcGFnZSAq
Lw0KIAlOVUxMLAkJCS8qIGZsdXNocGFnZSAqLw0KLS0tIGxpbnV4L2ZzL3By
b2MvbGluay5jLm9yaWcJU2F0IEp1biAyNiAxNDo1NDozMCAxOTk5DQorKysg
bGludXgvZnMvcHJvYy9saW5rLmMJU2F0IEp1biAyNiAxNToyOTozNyAxOTk5
DQpAQCAtNDksNyArNDksNyBAQA0KIAlOVUxMLAkJCS8qIHJlbmFtZSAqLw0K
IAlwcm9jX3JlYWRsaW5rLAkJLyogcmVhZGxpbmsgKi8NCiAJcHJvY19mb2xs
b3dfbGluaywJLyogZm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJCQkvKiBibWFw
ICovDQorCU5VTEwsCQkJLyogZ2V0X2Jsb2NrICovDQogCU5VTEwsCQkJLyog
cmVhZHBhZ2UgKi8NCiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVM
TCwJCQkvKiBmbHVzaHBhZ2UgKi8NCi0tLSBsaW51eC9mcy9wcm9jL25ldC5j
Lm9yaWcJU2F0IEp1biAyNiAxNDo1NDozMCAxOTk5DQorKysgbGludXgvZnMv
cHJvYy9uZXQuYwlTYXQgSnVuIDI2IDE1OjI5OjM4IDE5OTkNCkBAIC0xMTMs
NyArMTEzLDcgQEANCiAJTlVMTCwJCQkvKiByZW5hbWUgKi8NCiAJTlVMTCwJ
CQkvKiByZWFkbGluayAqLw0KIAlOVUxMLAkJCS8qIGZvbGxvd19saW5rICov
DQotCU5VTEwsCQkJLyogYm1hcCAqLw0KKwlOVUxMLAkJCS8qIGdldF9ibG9j
ayAqLw0KIAlOVUxMLAkJCS8qIHJlYWRwYWdlICovDQogCU5VTEwsCQkJLyog
d3JpdGVwYWdlICovDQogCU5VTEwsCQkJLyogZmx1c2hwYWdlICovDQotLS0g
bGludXgvZnMvcHJvYy9vbWlyci5jLm9yaWcJU2F0IEp1biAyNiAxNDo1NDoz
MCAxOTk5DQorKysgbGludXgvZnMvcHJvYy9vbWlyci5jCVNhdCBKdW4gMjYg
MTU6Mjk6MzggMTk5OQ0KQEAgLTI4OSw3ICsyODksNyBAQA0KIAlOVUxMLAkJ
CS8qIHJlbmFtZSAqLw0KIAlOVUxMLAkJCS8qIHJlYWRsaW5rICovDQogCU5V
TEwsCQkJLyogZm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJCQkvKiBibWFwICov
DQorCU5VTEwsCQkJLyogZ2V0X2Jsb2NrICovDQogCU5VTEwsCQkJLyogcmVh
ZHBhZ2UgKi8NCiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJ
CQkvKiBmbHVzaHBhZ2UgKi8NCi0tLSBsaW51eC9mcy9wcm9jL29wZW5wcm9t
ZnMuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAgMTk5OQ0KKysrIGxpbnV4
L2ZzL3Byb2Mvb3BlbnByb21mcy5jCVNhdCBKdW4gMjYgMTU6Mjk6MzggMTk5
OQ0KQEAgLTU3Nyw3ICs1NzcsNyBAQA0KIAlOVUxMLAkJCS8qIHJlbmFtZSAq
Lw0KIAlOVUxMLAkJCS8qIHJlYWRsaW5rICovDQogCU5VTEwsCQkJLyogZm9s
bG93X2xpbmsgKi8NCi0JTlVMTCwJCQkvKiBibWFwICovDQorCU5VTEwsCQkJ
LyogZ2V0X2Jsb2NrICovDQogCU5VTEwsCQkJLyogcmVhZHBhZ2UgKi8NCiAJ
TlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJCQkvKiBmbHVzaHBh
Z2UgKi8NCkBAIC02MTQsNyArNjE0LDcgQEANCiAJTlVMTCwJCQkvKiByZW5h
bWUgKi8NCiAJTlVMTCwJCQkvKiByZWFkbGluayAqLw0KIAlOVUxMLAkJCS8q
IGZvbGxvd19saW5rICovDQotCU5VTEwsCQkJLyogYm1hcCAqLw0KKwlOVUxM
LAkJCS8qIGdldF9ibG9jayAqLw0KIAlOVUxMLAkJCS8qIHJlYWRwYWdlICov
DQogCU5VTEwsCQkJLyogd3JpdGVwYWdlICovDQogCU5VTEwsCQkJLyogZmx1
c2hwYWdlICovDQpAQCAtNjUxLDcgKzY1MSw3IEBADQogCU5VTEwsCQkJLyog
cmVuYW1lICovDQogCU5VTEwsCQkJLyogcmVhZGxpbmsgKi8NCiAJTlVMTCwJ
CQkvKiBmb2xsb3dfbGluayAqLw0KLQlOVUxMLAkJCS8qIGJtYXAgKi8NCisJ
TlVMTCwJCQkvKiBnZXRfYmxvY2sgKi8NCiAJTlVMTCwJCQkvKiByZWFkcGFn
ZSAqLw0KIAlOVUxMLAkJCS8qIHdyaXRlcGFnZSAqLw0KIAlOVUxMLAkJCS8q
IGZsdXNocGFnZSAqLw0KLS0tIGxpbnV4L2ZzL3Byb2MvcHJvY19kZXZ0cmVl
LmMub3JpZwlTYXQgSnVuIDI2IDE0OjU0OjMwIDE5OTkNCisrKyBsaW51eC9m
cy9wcm9jL3Byb2NfZGV2dHJlZS5jCVNhdCBKdW4gMjYgMTU6Mjk6MzggMTk5
OQ0KQEAgLTU3LDcgKzU3LDcgQEANCiAJTlVMTCwJCQkvKiByZW5hbWUgKi8N
CiAJZGV2dHJlZV9yZWFkbGluaywJLyogcmVhZGxpbmsgKi8NCiAJZGV2dHJl
ZV9mb2xsb3dfbGluaywJLyogZm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJCQkv
KiBibWFwICovDQorCU5VTEwsCQkJLyogZ2V0X2Jsb2NrICovDQogCU5VTEws
CQkJLyogcmVhZHBhZ2UgKi8NCiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8N
CiAJTlVMTCwJCQkvKiBmbHVzaHBhZ2UgKi8NCi0tLSBsaW51eC9mcy9wcm9j
L3Njc2kuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAgMTk5OQ0KKysrIGxp
bnV4L2ZzL3Byb2Mvc2NzaS5jCVNhdCBKdW4gMjYgMTU6Mjk6MzggMTk5OQ0K
QEAgLTcxLDcgKzcxLDcgQEANCiAJTlVMTCwJICAgIAkJLyogcmVuYW1lICov
DQogCU5VTEwsCSAgICAJCS8qIHJlYWRsaW5rICovDQogCU5VTEwsCSAgICAJ
CS8qIGZvbGxvd19saW5rICovDQotCU5VTEwsCQkJLyogYm1hcCAqLw0KKwlO
VUxMLAkJCS8qIGdldF9ibG9jayAqLw0KIAlOVUxMLAkJCS8qIHJlYWRwYWdl
ICovDQogCU5VTEwsCQkJLyogd3JpdGVwYWdlICovDQogCU5VTEwsCQkJLyog
Zmx1c2hwYWdlICovDQotLS0gbGludXgvZnMvcHJvYy9zeXN2aXBjLmMub3Jp
ZwlTYXQgSnVuIDI2IDE0OjU0OjMwIDE5OTkNCisrKyBsaW51eC9mcy9wcm9j
L3N5c3ZpcGMuYwlTYXQgSnVuIDI2IDE1OjI5OjM4IDE5OTkNCkBAIC0xMzAs
NyArMTMwLDcgQEANCiAJTlVMTCwJCQkvKiByZW5hbWUgKi8NCiAJTlVMTCwJ
CQkvKiByZWFkbGluayAqLw0KIAlOVUxMLAkJCS8qIGZvbGxvd19saW5rICov
DQotCU5VTEwsCQkJLyogYm1hcCAqLw0KKwlOVUxMLAkJCS8qIGdldF9ibG9j
ayAqLw0KIAlOVUxMLAkJCS8qIHJlYWRwYWdlICovDQogCU5VTEwsCQkJLyog
d3JpdGVwYWdlICovDQogCU5VTEwsCQkJLyogZmx1c2hwYWdlICovDQotLS0g
bGludXgvZnMvbmZzL2Rpci5jLm9yaWcJU2F0IEp1biAyNiAxNDo1NDozMCAx
OTk5DQorKysgbGludXgvZnMvbmZzL2Rpci5jCVNhdCBKdW4gMjYgMTU6Mjk6
MzggMTk5OQ0KQEAgLTc4LDcgKzc4LDcgQEANCiAJbmZzX3JlbmFtZSwJCS8q
IHJlbmFtZSAqLw0KIAlOVUxMLAkJCS8qIHJlYWRsaW5rICovDQogCU5VTEws
CQkJLyogZm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJCQkvKiBibWFwICovDQor
CU5VTEwsCQkJLyogZ2V0X2Jsb2NrICovDQogCU5VTEwsCQkJLyogcmVhZHBh
Z2UgKi8NCiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJCQkv
KiBmbHVzaHBhZ2UgKi8NCi0tLSBsaW51eC9mcy9uZnMvc3ltbGluay5jLm9y
aWcJU2F0IEp1biAyNiAxNDo1NDozMCAxOTk5DQorKysgbGludXgvZnMvbmZz
L3N5bWxpbmsuYwlTYXQgSnVuIDI2IDE1OjI5OjM4IDE5OTkNCkBAIC00Myw3
ICs0Myw3IEBADQogCU5VTEwsCQkJLyogcmVuYW1lICovDQogCW5mc19yZWFk
bGluaywJCS8qIHJlYWRsaW5rICovDQogCW5mc19mb2xsb3dfbGluaywJLyog
Zm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJCQkvKiBibWFwICovDQorCU5VTEws
CQkJLyogZ2V0X2Jsb2NrICovDQogCU5VTEwsCQkJLyogcmVhZHBhZ2UgKi8N
CiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJCQkvKiBmbHVz
aHBhZ2UgKi8NCi0tLSBsaW51eC9mcy9uZnMvZmlsZS5jLm9yaWcJU2F0IEp1
biAyNiAxNDo1NDozMCAxOTk5DQorKysgbGludXgvZnMvbmZzL2ZpbGUuYwlT
YXQgSnVuIDI2IDE1OjI5OjM4IDE5OTkNCkBAIC03MSw3ICs3MSw3IEBADQog
CU5VTEwsCQkJLyogcmVuYW1lICovDQogCU5VTEwsCQkJLyogcmVhZGxpbmsg
Ki8NCiAJTlVMTCwJCQkvKiBmb2xsb3dfbGluayAqLw0KLQlOVUxMLAkJCS8q
IGJtYXAgKi8NCisJTlVMTCwJCQkvKiBnZXRfYmxvY2sgKi8NCiAJbmZzX3Jl
YWRwYWdlLAkJLyogcmVhZHBhZ2UgKi8NCiAJbmZzX3dyaXRlcGFnZSwJCS8q
IHdyaXRlcGFnZSAqLw0KIAlOVUxMLAkJCS8qIGZsdXNocGFnZSAqLw0KQEAg
LTE2Nyw3ICsxNjcsNyBAQA0KICAqIElmIHRoZSB3cml0ZXIgZW5kcyB1cCBk
ZWxheWluZyB0aGUgd3JpdGUsIHRoZSB3cml0ZXIgbmVlZHMgdG8NCiAgKiBp
bmNyZW1lbnQgdGhlIHBhZ2UgdXNlIGNvdW50cyB1bnRpbCBoZSBpcyBkb25l
IHdpdGggdGhlIHBhZ2UuDQogICovDQotc3RhdGljIGxvbmcgbmZzX3dyaXRl
X29uZV9wYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFn
ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgYnl0ZXMs
IGNvbnN0IGNoYXIgKiBidWYpDQorc3RhdGljIGludCBuZnNfd3JpdGVfb25l
X3BhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLCB1
bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBieXRlcywgY29u
c3QgY2hhciAqIGJ1ZikNCiB7DQogCWxvbmcgc3RhdHVzOw0KIA0KLS0tIGxp
bnV4L2ZzL2V4dDIvaW5vZGUuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAg
MTk5OQ0KKysrIGxpbnV4L2ZzL2V4dDIvaW5vZGUuYwlTYXQgSnVuIDI2IDE1
OjI5OjM4IDE5OTkNCkBAIC0xMjksMjMgKzEyOSwyMiBAQA0KIAlyZXR1cm4g
cmVzdWx0Ow0KIH0NCiANCi0NCi1pbnQgZXh0Ml9ibWFwIChzdHJ1Y3QgaW5v
ZGUgKiBpbm9kZSwgaW50IGJsb2NrKQ0KK3N0YXRpYyBpbmxpbmUgbG9uZyBl
eHQyX2Jsb2NrX21hcCAoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxv
Y2spDQogew0KIAlpbnQgaSwgcmV0Ow0KLQlpbnQgYWRkcl9wZXJfYmxvY2sg
PSBFWFQyX0FERFJfUEVSX0JMT0NLKGlub2RlLT5pX3NiKTsNCi0JaW50IGFk
ZHJfcGVyX2Jsb2NrX2JpdHMgPSBFWFQyX0FERFJfUEVSX0JMT0NLX0JJVFMo
aW5vZGUtPmlfc2IpOw0KKwlpbnQgcHRycyA9IEVYVDJfQUREUl9QRVJfQkxP
Q0soaW5vZGUtPmlfc2IpOw0KKwlpbnQgcHRyc19iaXRzID0gRVhUMl9BRERS
X1BFUl9CTE9DS19CSVRTKGlub2RlLT5pX3NiKTsNCiANCiAJcmV0ID0gMDsN
CiAJbG9ja19rZXJuZWwoKTsNCiAJaWYgKGJsb2NrIDwgMCkgew0KLQkJZXh0
Ml93YXJuaW5nIChpbm9kZS0+aV9zYiwgImV4dDJfYm1hcCIsICJibG9jayA8
IDAiKTsNCisJCWV4dDJfd2FybmluZyAoaW5vZGUtPmlfc2IsICJleHQyX2Js
b2NrX21hcCIsICJibG9jayA8IDAiKTsNCiAJCWdvdG8gb3V0Ow0KIAl9DQot
CWlmIChibG9jayA+PSBFWFQyX05ESVJfQkxPQ0tTICsgYWRkcl9wZXJfYmxv
Y2sgKw0KLQkJKDEgPDwgKGFkZHJfcGVyX2Jsb2NrX2JpdHMgKiAyKSkgKw0K
LQkJKCgxIDw8IChhZGRyX3Blcl9ibG9ja19iaXRzICogMikpIDw8IGFkZHJf
cGVyX2Jsb2NrX2JpdHMpKSB7DQotCQlleHQyX3dhcm5pbmcgKGlub2RlLT5p
X3NiLCAiZXh0Ml9ibWFwIiwgImJsb2NrID4gYmlnIik7DQorCWlmIChibG9j
ayA+PSBFWFQyX05ESVJfQkxPQ0tTICsgcHRycyArDQorCQkoMSA8PCAocHRy
c19iaXRzICogMikpICsNCisJCSgoMSA8PCAocHRyc19iaXRzICogMikpIDw8
IHB0cnNfYml0cykpIHsNCisJCWV4dDJfd2FybmluZyAoaW5vZGUtPmlfc2Is
ICJleHQyX2Jsb2NrX21hcCIsICJibG9jayA+IGJpZyIpOw0KIAkJZ290byBv
dXQ7DQogCX0NCiAJaWYgKGJsb2NrIDwgRVhUMl9ORElSX0JMT0NLUykgew0K
QEAgLTE1Myw3ICsxNTIsNyBAQA0KIAkJZ290byBvdXQ7DQogCX0NCiAJYmxv
Y2sgLT0gRVhUMl9ORElSX0JMT0NLUzsNCi0JaWYgKGJsb2NrIDwgYWRkcl9w
ZXJfYmxvY2spIHsNCisJaWYgKGJsb2NrIDwgcHRycykgew0KIAkJaSA9IGlu
b2RlX2JtYXAgKGlub2RlLCBFWFQyX0lORF9CTE9DSyk7DQogCQlpZiAoIWkp
DQogCQkJZ290byBvdXQ7DQpAQCAtMTYxLDEyMyArMTYwLDY0IEBADQogCQkJ
CQkgIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSksIGJsb2NrKTsNCiAJCWdv
dG8gb3V0Ow0KIAl9DQotCWJsb2NrIC09IGFkZHJfcGVyX2Jsb2NrOw0KLQlp
ZiAoYmxvY2sgPCAoMSA8PCAoYWRkcl9wZXJfYmxvY2tfYml0cyAqIDIpKSkg
ew0KKwlibG9jayAtPSBwdHJzOw0KKwlpZiAoYmxvY2sgPCAoMSA8PCAocHRy
c19iaXRzICogMikpKSB7DQogCQlpID0gaW5vZGVfYm1hcCAoaW5vZGUsIEVY
VDJfRElORF9CTE9DSyk7DQogCQlpZiAoIWkpDQogCQkJZ290byBvdXQ7DQog
CQlpID0gYmxvY2tfYm1hcCAoYnJlYWQgKGlub2RlLT5pX2RldiwgaSwNCiAJ
CQkJICAgICAgIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSksDQotCQkJCWJs
b2NrID4+IGFkZHJfcGVyX2Jsb2NrX2JpdHMpOw0KKwkJCQlibG9jayA+PiBw
dHJzX2JpdHMpOw0KIAkJaWYgKCFpKQ0KIAkJCWdvdG8gb3V0Ow0KIAkJcmV0
ID0gYmxvY2tfYm1hcCAoYnJlYWQgKGlub2RlLT5pX2RldiwgaSwNCiAJCQkJ
CSAgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKSwNCi0JCQkJYmxvY2sgJiAo
YWRkcl9wZXJfYmxvY2sgLSAxKSk7DQorCQkJCWJsb2NrICYgKHB0cnMgLSAx
KSk7DQogCQlnb3RvIG91dDsNCiAJfQ0KLQlibG9jayAtPSAoMSA8PCAoYWRk
cl9wZXJfYmxvY2tfYml0cyAqIDIpKTsNCisJYmxvY2sgLT0gKDEgPDwgKHB0
cnNfYml0cyAqIDIpKTsNCiAJaSA9IGlub2RlX2JtYXAgKGlub2RlLCBFWFQy
X1RJTkRfQkxPQ0spOw0KIAlpZiAoIWkpDQogCQlnb3RvIG91dDsNCiAJaSA9
IGJsb2NrX2JtYXAgKGJyZWFkIChpbm9kZS0+aV9kZXYsIGksIGlub2RlLT5p
X3NiLT5zX2Jsb2Nrc2l6ZSksDQotCQkJYmxvY2sgPj4gKGFkZHJfcGVyX2Js
b2NrX2JpdHMgKiAyKSk7DQorCQkJYmxvY2sgPj4gKHB0cnNfYml0cyAqIDIp
KTsNCiAJaWYgKCFpKQ0KIAkJZ290byBvdXQ7DQogCWkgPSBibG9ja19ibWFw
IChicmVhZCAoaW5vZGUtPmlfZGV2LCBpLCBpbm9kZS0+aV9zYi0+c19ibG9j
a3NpemUpLA0KLQkJCShibG9jayA+PiBhZGRyX3Blcl9ibG9ja19iaXRzKSAm
IChhZGRyX3Blcl9ibG9jayAtIDEpKTsNCisJCQkoYmxvY2sgPj4gcHRyc19i
aXRzKSAmIChwdHJzIC0gMSkpOw0KIAlpZiAoIWkpDQogCQlnb3RvIG91dDsN
CiAJcmV0ID0gYmxvY2tfYm1hcCAoYnJlYWQgKGlub2RlLT5pX2RldiwgaSwg
aW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKSwNCi0JCQkgICBibG9jayAmIChh
ZGRyX3Blcl9ibG9jayAtIDEpKTsNCisJCQkgICBibG9jayAmIChwdHJzIC0g
MSkpOw0KIG91dDoNCiAJdW5sb2NrX2tlcm5lbCgpOw0KIAlyZXR1cm4gcmV0
Ow0KIH0NCiANCi1pbnQgZXh0Ml9ibWFwX2NyZWF0ZSAoc3RydWN0IGlub2Rl
ICogaW5vZGUsIGludCBibG9jaykNCi17DQotCWludCBpOw0KLQlpbnQgYWRk
cl9wZXJfYmxvY2sgPSBFWFQyX0FERFJfUEVSX0JMT0NLKGlub2RlLT5pX3Ni
KTsNCi0JaW50IGFkZHJfcGVyX2Jsb2NrX2JpdHMgPSBFWFQyX0FERFJfUEVS
X0JMT0NLX0JJVFMoaW5vZGUtPmlfc2IpOw0KLQ0KLQlpZiAoYmxvY2sgPCAw
KSB7DQotCQlleHQyX3dhcm5pbmcgKGlub2RlLT5pX3NiLCAiZXh0Ml9ibWFw
IiwgImJsb2NrIDwgMCIpOw0KLQkJcmV0dXJuIDA7DQotCX0NCi0JaWYgKGJs
b2NrID49IEVYVDJfTkRJUl9CTE9DS1MgKyBhZGRyX3Blcl9ibG9jayArDQot
CQkoMSA8PCAoYWRkcl9wZXJfYmxvY2tfYml0cyAqIDIpKSArDQotCQkoKDEg
PDwgKGFkZHJfcGVyX2Jsb2NrX2JpdHMgKiAyKSkgPDwgYWRkcl9wZXJfYmxv
Y2tfYml0cykpIHsNCi0JCWV4dDJfd2FybmluZyAoaW5vZGUtPmlfc2IsICJl
eHQyX2JtYXAiLCAiYmxvY2sgPiBiaWciKTsNCi0JCXJldHVybiAwOw0KLQl9
DQotCWlmIChibG9jayA8IEVYVDJfTkRJUl9CTE9DS1MpDQotCQlyZXR1cm4g
aW5vZGVfYm1hcCAoaW5vZGUsIGJsb2NrKTsNCi0JYmxvY2sgLT0gRVhUMl9O
RElSX0JMT0NLUzsNCi0JaWYgKGJsb2NrIDwgYWRkcl9wZXJfYmxvY2spIHsN
Ci0JCWkgPSBpbm9kZV9ibWFwIChpbm9kZSwgRVhUMl9JTkRfQkxPQ0spOw0K
LQkJaWYgKCFpKQ0KLQkJCXJldHVybiAwOw0KLQkJcmV0dXJuIGJsb2NrX2Jt
YXAgKGJyZWFkIChpbm9kZS0+aV9kZXYsIGksDQotCQkJCQkgIGlub2RlLT5p
X3NiLT5zX2Jsb2Nrc2l6ZSksIGJsb2NrKTsNCi0JfQ0KLQlibG9jayAtPSBh
ZGRyX3Blcl9ibG9jazsNCi0JaWYgKGJsb2NrIDwgKDEgPDwgKGFkZHJfcGVy
X2Jsb2NrX2JpdHMgKiAyKSkpIHsNCi0JCWkgPSBpbm9kZV9ibWFwIChpbm9k
ZSwgRVhUMl9ESU5EX0JMT0NLKTsNCi0JCWlmICghaSkNCi0JCQlyZXR1cm4g
MDsNCi0JCWkgPSBibG9ja19ibWFwIChicmVhZCAoaW5vZGUtPmlfZGV2LCBp
LA0KLQkJCQkgICAgICAgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKSwNCi0J
CQkJYmxvY2sgPj4gYWRkcl9wZXJfYmxvY2tfYml0cyk7DQotCQlpZiAoIWkp
DQotCQkJcmV0dXJuIDA7DQotCQlyZXR1cm4gYmxvY2tfYm1hcCAoYnJlYWQg
KGlub2RlLT5pX2RldiwgaSwNCi0JCQkJCSAgaW5vZGUtPmlfc2ItPnNfYmxv
Y2tzaXplKSwNCi0JCQkJICAgYmxvY2sgJiAoYWRkcl9wZXJfYmxvY2sgLSAx
KSk7DQotCX0NCi0JYmxvY2sgLT0gKDEgPDwgKGFkZHJfcGVyX2Jsb2NrX2Jp
dHMgKiAyKSk7DQotCWkgPSBpbm9kZV9ibWFwIChpbm9kZSwgRVhUMl9USU5E
X0JMT0NLKTsNCi0JaWYgKCFpKQ0KLQkJcmV0dXJuIDA7DQotCWkgPSBibG9j
a19ibWFwIChicmVhZCAoaW5vZGUtPmlfZGV2LCBpLCBpbm9kZS0+aV9zYi0+
c19ibG9ja3NpemUpLA0KLQkJCWJsb2NrID4+IChhZGRyX3Blcl9ibG9ja19i
aXRzICogMikpOw0KLQlpZiAoIWkpDQotCQlyZXR1cm4gMDsNCi0JaSA9IGJs
b2NrX2JtYXAgKGJyZWFkIChpbm9kZS0+aV9kZXYsIGksIGlub2RlLT5pX3Ni
LT5zX2Jsb2Nrc2l6ZSksDQotCQkJKGJsb2NrID4+IGFkZHJfcGVyX2Jsb2Nr
X2JpdHMpICYgKGFkZHJfcGVyX2Jsb2NrIC0gMSkpOw0KLQlpZiAoIWkpDQot
CQlyZXR1cm4gMDsNCi0JcmV0dXJuIGJsb2NrX2JtYXAgKGJyZWFkIChpbm9k
ZS0+aV9kZXYsIGksIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSksDQotCQkJ
ICAgYmxvY2sgJiAoYWRkcl9wZXJfYmxvY2sgLSAxKSk7DQotfQ0KLQ0KIHN0
YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBpbm9kZV9nZXRibGsgKHN0cnVj
dCBpbm9kZSAqIGlub2RlLCBpbnQgbnIsDQotCWludCBjcmVhdGUsIGludCBu
ZXdfYmxvY2ssIGludCAqIGVyciwgaW50IG1ldGFkYXRhLA0KLQlpbnQgKnBo
eXNfYmxvY2ssIGludCAqY3JlYXRlZCkNCisJaW50IG5ld19ibG9jaywgaW50
ICogZXJyLCBpbnQgbWV0YWRhdGEsIGxvbmcgKnBoeXMsIGludCAqbmV3KQ0K
IHsNCiAJdTMyICogcDsNCiAJaW50IHRtcCwgZ29hbCA9IDA7DQogCXN0cnVj
dCBidWZmZXJfaGVhZCAqIHJlc3VsdDsNCi0JaW50IGJsb2NrcyA9IGlub2Rl
LT5pX3NiLT5zX2Jsb2Nrc2l6ZSAvIDUxMjsNCisJaW50IGJsb2Nrc2l6ZSA9
IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsNCiANCiAJcCA9IGlub2RlLT51
LmV4dDJfaS5pX2RhdGEgKyBucjsNCiByZXBlYXQ6DQogCXRtcCA9IGxlMzJf
dG9fY3B1KCpwKTsNCiAJaWYgKHRtcCkgew0KIAkJaWYgKG1ldGFkYXRhKSB7
DQotCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICogcmVzdWx0ID0gZ2V0YmxrIChp
bm9kZS0+aV9kZXYsIHRtcCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsN
CisJCQlyZXN1bHQgPSBnZXRibGsgKGlub2RlLT5pX2RldiwgdG1wLCBibG9j
a3NpemUpOw0KIAkJCWlmICh0bXAgPT0gbGUzMl90b19jcHUoKnApKQ0KIAkJ
CQlyZXR1cm4gcmVzdWx0Ow0KIAkJCWJyZWxzZSAocmVzdWx0KTsNCiAJCQln
b3RvIHJlcGVhdDsNCiAJCX0gZWxzZSB7DQotCQkJKnBoeXNfYmxvY2sgPSB0
bXA7DQorCQkJKnBoeXMgPSB0bXA7DQogCQkJcmV0dXJuIE5VTEw7DQogCQl9
DQogCX0NCiAJKmVyciA9IC1FRkJJRzsNCi0JaWYgKCFjcmVhdGUpDQotCQln
b3RvIGRvbnRfY3JlYXRlOw0KIA0KIAkvKiBDaGVjayBmaWxlIGxpbWl0cy4u
ICovDQogCXsNCkBAIC0yODYsNyArMjI2LDYgQEANCiAJCQlsaW1pdCA+Pj0g
RVhUMl9CTE9DS19TSVpFX0JJVFMoaW5vZGUtPmlfc2IpOw0KIAkJCWlmIChu
ZXdfYmxvY2sgPj0gbGltaXQpIHsNCiAJCQkJc2VuZF9zaWcoU0lHWEZTWiwg
Y3VycmVudCwgMCk7DQotZG9udF9jcmVhdGU6DQogCQkJCSplcnIgPSAtRUZC
SUc7DQogCQkJCXJldHVybiBOVUxMOw0KIAkJCX0NCkBAIC0zMTQsMzQgKzI1
Myw0MSBAQA0KIAlleHQyX2RlYnVnICgiZ29hbCA9ICVkLlxuIiwgZ29hbCk7
DQogDQogCXRtcCA9IGV4dDJfYWxsb2NfYmxvY2sgKGlub2RlLCBnb2FsLCBl
cnIpOw0KLQlpZiAoIXRtcCkNCisJaWYgKCF0bXApIHsNCisJCSplcnIgPSAt
RU5PU1BDOw0KIAkJcmV0dXJuIE5VTEw7DQorCX0NCiAJaWYgKG1ldGFkYXRh
KSB7DQotCQlyZXN1bHQgPSBnZXRibGsgKGlub2RlLT5pX2RldiwgdG1wLCBp
bm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOw0KKwkJcmVzdWx0ID0gZ2V0Ymxr
IChpbm9kZS0+aV9kZXYsIHRtcCwgYmxvY2tzaXplKTsNCiAJCWlmICgqcCkg
ew0KIAkJCWV4dDJfZnJlZV9ibG9ja3MgKGlub2RlLCB0bXAsIDEpOw0KIAkJ
CWJyZWxzZSAocmVzdWx0KTsNCiAJCQlnb3RvIHJlcGVhdDsNCiAJCX0NCi0J
CW1lbXNldChyZXN1bHQtPmJfZGF0YSwgMCwgaW5vZGUtPmlfc2ItPnNfYmxv
Y2tzaXplKTsNCisJCW1lbXNldChyZXN1bHQtPmJfZGF0YSwgMCwgYmxvY2tz
aXplKTsNCiAJCW1hcmtfYnVmZmVyX3VwdG9kYXRlKHJlc3VsdCwgMSk7DQog
CQltYXJrX2J1ZmZlcl9kaXJ0eShyZXN1bHQsIDEpOw0KIAl9IGVsc2Ugew0K
IAkJaWYgKCpwKSB7DQorCQkJLyoNCisJCQkgKiBOb2JvZHkgaXMgYWxsb3dl
ZCB0byBjaGFuZ2UgYmxvY2sgYWxsb2NhdGlvbg0KKwkJCSAqIHN0YXRlIGZy
b20gdW5kZXIgdXM6DQorCQkJICovDQorCQkJQlVHKCk7DQogCQkJZXh0Ml9m
cmVlX2Jsb2NrcyAoaW5vZGUsIHRtcCwgMSk7DQogCQkJZ290byByZXBlYXQ7
DQogCQl9DQotCQkqcGh5c19ibG9jayA9IHRtcDsNCisJCSpwaHlzID0gdG1w
Ow0KIAkJcmVzdWx0ID0gTlVMTDsNCiAJCSplcnIgPSAwOw0KLQkJKmNyZWF0
ZWQgPSAxOw0KKwkJKm5ldyA9IDE7DQogCX0NCiAJKnAgPSBjcHVfdG9fbGUz
Mih0bXApOw0KIA0KIAlpbm9kZS0+dS5leHQyX2kuaV9uZXh0X2FsbG9jX2Js
b2NrID0gbmV3X2Jsb2NrOw0KIAlpbm9kZS0+dS5leHQyX2kuaV9uZXh0X2Fs
bG9jX2dvYWwgPSB0bXA7DQogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9U
SU1FOw0KLQlpbm9kZS0+aV9ibG9ja3MgKz0gYmxvY2tzOw0KKwlpbm9kZS0+
aV9ibG9ja3MgKz0gYmxvY2tzaXplLzUxMjsNCiAJaWYgKElTX1NZTkMoaW5v
ZGUpIHx8IGlub2RlLT51LmV4dDJfaS5pX29zeW5jKQ0KIAkJZXh0Ml9zeW5j
X2lub2RlIChpbm9kZSk7DQogCWVsc2UNCkBAIC0zNTgsMjQgKzMwNCwyMyBA
QA0KICAqICAgTlVMTCByZXR1cm4gaW4gdGhlIGRhdGEgY2FzZSBpcyBtYW5k
YXRvcnkuDQogICovDQogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJs
b2NrX2dldGJsayAoc3RydWN0IGlub2RlICogaW5vZGUsDQotCSAgc3RydWN0
IGJ1ZmZlcl9oZWFkICogYmgsIGludCBuciwgaW50IGNyZWF0ZSwgaW50IGJs
b2Nrc2l6ZSwgDQotCSAgaW50IG5ld19ibG9jaywgaW50ICogZXJyLCBpbnQg
bWV0YWRhdGEsIGludCAqcGh5c19ibG9jaywgaW50ICpjcmVhdGVkKQ0KKwkg
IHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoLCBpbnQgbnIsDQorCSAgaW50IG5l
d19ibG9jaywgaW50ICogZXJyLCBpbnQgbWV0YWRhdGEsIGxvbmcgKnBoeXMs
IGludCAqbmV3KQ0KIHsNCiAJaW50IHRtcCwgZ29hbCA9IDA7DQogCXUzMiAq
IHA7DQogCXN0cnVjdCBidWZmZXJfaGVhZCAqIHJlc3VsdDsNCi0JaW50IGJs
b2NrcyA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAvIDUxMjsNCisJaW50
IGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsNCiAJdW5z
aWduZWQgbG9uZyBsaW1pdDsNCi0JDQorDQorCXJlc3VsdCA9IE5VTEw7CQ0K
IAlpZiAoIWJoKQ0KLQkJcmV0dXJuIE5VTEw7DQorCQlnb3RvIG91dDsNCiAJ
aWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7DQogCQlsbF9yd19ibG9jayAo
UkVBRCwgMSwgJmJoKTsNCiAJCXdhaXRfb25fYnVmZmVyIChiaCk7DQotCQlp
ZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsNCi0JCQlicmVsc2UgKGJoKTsN
Ci0JCQlyZXR1cm4gTlVMTDsNCi0JCX0NCisJCWlmICghYnVmZmVyX3VwdG9k
YXRlKGJoKSkNCisJCQlnb3RvIG91dDsNCiAJfQ0KIAlwID0gKHUzMiAqKSBi
aC0+Yl9kYXRhICsgbnI7DQogcmVwZWF0Og0KQEAgLTM4MywzMSArMzI4LDI0
IEBADQogCWlmICh0bXApIHsNCiAJCWlmIChtZXRhZGF0YSkgew0KIAkJCXJl
c3VsdCA9IGdldGJsayAoYmgtPmJfZGV2LCB0bXAsIGJsb2Nrc2l6ZSk7DQot
CQkJaWYgKHRtcCA9PSBsZTMyX3RvX2NwdSgqcCkpIHsNCi0JCQkJYnJlbHNl
IChiaCk7DQotCQkJCXJldHVybiByZXN1bHQ7DQotCQkJfQ0KKwkJCWlmICh0
bXAgPT0gbGUzMl90b19jcHUoKnApKQ0KKwkJCQlnb3RvIG91dDsNCiAJCQli
cmVsc2UgKHJlc3VsdCk7DQogCQkJZ290byByZXBlYXQ7DQogCQl9IGVsc2Ug
ew0KLQkJCSpwaHlzX2Jsb2NrID0gdG1wOw0KLQkJCWJyZWxzZSAoYmgpOw0K
LQkJCXJldHVybiBOVUxMOw0KKwkJCSpwaHlzID0gdG1wOw0KKwkJCS8qIHJl
c3VsdCA9PSBOVUxMICovDQorCQkJZ290byBvdXQ7DQogCQl9DQogCX0NCiAJ
KmVyciA9IC1FRkJJRzsNCi0JaWYgKCFjcmVhdGUpIHsNCi0JCWJyZWxzZSAo
YmgpOw0KLQkJcmV0dXJuIE5VTEw7DQotCX0NCiANCiAJbGltaXQgPSBjdXJy
ZW50LT5ybGltW1JMSU1JVF9GU0laRV0ucmxpbV9jdXI7DQogCWlmIChsaW1p
dCA8IFJMSU1fSU5GSU5JVFkpIHsNCiAJCWxpbWl0ID4+PSBFWFQyX0JMT0NL
X1NJWkVfQklUUyhpbm9kZS0+aV9zYik7DQogCQlpZiAobmV3X2Jsb2NrID49
IGxpbWl0KSB7DQotCQkJYnJlbHNlIChiaCk7DQogCQkJc2VuZF9zaWcoU0lH
WEZTWiwgY3VycmVudCwgMCk7DQotCQkJcmV0dXJuIE5VTEw7DQorCQkJZ290
byBvdXQ7DQogCQl9DQogCX0NCiANCkBAIC00MjQsMTAgKzM2Miw4IEBADQog
CQkJZ29hbCA9IGJoLT5iX2Jsb2NrbnI7DQogCX0NCiAJdG1wID0gZXh0Ml9h
bGxvY19ibG9jayAoaW5vZGUsIGdvYWwsIGVycik7DQotCWlmICghdG1wKSB7
DQotCQlicmVsc2UgKGJoKTsNCi0JCXJldHVybiBOVUxMOw0KLQl9DQorCWlm
ICghdG1wKQ0KKwkJZ290byBvdXQ7DQogCWlmIChtZXRhZGF0YSkgew0KIAkJ
cmVzdWx0ID0gZ2V0YmxrIChiaC0+Yl9kZXYsIHRtcCwgYmxvY2tzaXplKTsN
CiAJCWlmICgqcCkgew0KQEAgLTQzOSwxMCArMzc1LDggQEANCiAJCW1hcmtf
YnVmZmVyX3VwdG9kYXRlKHJlc3VsdCwgMSk7DQogCQltYXJrX2J1ZmZlcl9k
aXJ0eShyZXN1bHQsIDEpOw0KIAl9IGVsc2Ugew0KLQkJKnBoeXNfYmxvY2sg
PSB0bXA7DQotCQlyZXN1bHQgPSBOVUxMOw0KLQkJKmVyciA9IDA7DQotCQkq
Y3JlYXRlZCA9IDE7DQorCQkqcGh5cyA9IHRtcDsNCisJCSpuZXcgPSAxOw0K
IAl9DQogCWlmICgqcCkgew0KIAkJZXh0Ml9mcmVlX2Jsb2NrcyAoaW5vZGUs
IHRtcCwgMSk7DQpAQCAtNDU2LDExNiArMzkwLDE2OCBAQA0KIAkJd2FpdF9v
bl9idWZmZXIgKGJoKTsNCiAJfQ0KIAlpbm9kZS0+aV9jdGltZSA9IENVUlJF
TlRfVElNRTsNCi0JaW5vZGUtPmlfYmxvY2tzICs9IGJsb2NrczsNCisJaW5v
ZGUtPmlfYmxvY2tzICs9IGJsb2Nrc2l6ZS81MTI7DQogCW1hcmtfaW5vZGVf
ZGlydHkoaW5vZGUpOw0KIAlpbm9kZS0+dS5leHQyX2kuaV9uZXh0X2FsbG9j
X2Jsb2NrID0gbmV3X2Jsb2NrOw0KIAlpbm9kZS0+dS5leHQyX2kuaV9uZXh0
X2FsbG9jX2dvYWwgPSB0bXA7DQorCSplcnIgPSAwOw0KK291dDoNCiAJYnJl
bHNlIChiaCk7DQogCXJldHVybiByZXN1bHQ7DQogfQ0KIA0KLWludCBleHQy
X2dldGJsa19ibG9jayAoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxv
Y2ssDQotCQkJCSAgaW50IGNyZWF0ZSwgaW50ICogZXJyLCBpbnQgKiBjcmVh
dGVkKQ0KK2ludCBleHQyX2dldF9ibG9jayAoc3RydWN0IGlub2RlICppbm9k
ZSwgbG9uZyBpYmxvY2ssDQorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhf
cmVzdWx0LCBpbnQgZmxhZykNCiB7DQotCXN0cnVjdCBidWZmZXJfaGVhZCAq
IGJoLCAqdG1wOw0KLQl1bnNpZ25lZCBsb25nIGI7DQotCXVuc2lnbmVkIGxv
bmcgYWRkcl9wZXJfYmxvY2sgPSBFWFQyX0FERFJfUEVSX0JMT0NLKGlub2Rl
LT5pX3NiKTsNCi0JaW50IGFkZHJfcGVyX2Jsb2NrX2JpdHMgPSBFWFQyX0FE
RFJfUEVSX0JMT0NLX0JJVFMoaW5vZGUtPmlfc2IpOw0KLQlpbnQgcGh5c19i
bG9jaywgcmV0Ow0KKwlpbnQgcmV0LCBlcnIsIG5ldzsNCisJc3RydWN0IGJ1
ZmZlcl9oZWFkICpiaDsNCisJdW5zaWduZWQgbG9uZyBwdHIsIHBoeXM7DQor
CS8qDQorCSAqIGJsb2NrIHBvaW50ZXJzIHBlciBibG9jaw0KKwkgKi8NCisJ
dW5zaWduZWQgbG9uZyBwdHJzID0gRVhUMl9BRERSX1BFUl9CTE9DSyhpbm9k
ZS0+aV9zYik7DQorCWludCBwdHJzX2JpdHMgPSBFWFQyX0FERFJfUEVSX0JM
T0NLX0JJVFMoaW5vZGUtPmlfc2IpOw0KKwljb25zdCBpbnQgZGlyZWN0X2Js
b2NrcyA9IEVYVDJfTkRJUl9CTE9DS1MsDQorCQlpbmRpcmVjdF9ibG9ja3Mg
PSBwdHJzLA0KKwkJZG91YmxlX2Jsb2NrcyA9ICgxIDw8IChwdHJzX2JpdHMg
KiAyKSksDQorCQl0cmlwbGVfYmxvY2tzID0gKDEgPDwgKHB0cnNfYml0cyAq
IDMpKTsNCisJaWYgKGZsYWcgPT0gRlNfR0VUQkxPQ0tfTUFQKSB7DQorCQkv
Kg0KKwkJICogV2lsbCBjbGVhbiB0aGlzIHVwIGZ1cnRoZXIsIGV4dDJfYmxv
Y2tfbWFwKCkgc2hvdWxkIHVzZSB0aGUNCisJCSAqIGJoIGluc3RlYWQgb2Yg
YW4gaW50ZWdlciBibG9jay1udW1iZXIgaW50ZXJmYWNlLg0KKwkJICovDQor
CQlwaHlzID0gZXh0Ml9ibG9ja19tYXAoaW5vZGUsIGlibG9jayk7DQorCQli
aF9yZXN1bHQtPmJfc3RhdGUgfD0gKDFVTCA8PCBCSF9NYXBwZWQpOw0KKwkJ
aWYgKHBoeXMpIHsNCisJCQliaF9yZXN1bHQtPmJfYmxvY2tuciA9IHBoeXM7
DQorCQl9IGVsc2Ugew0KKwkJCWJoX3Jlc3VsdC0+Yl9ibG9ja25yID0gLTEw
MDA7IC8vIEIgc2FmZQ0KKwkJCWJoX3Jlc3VsdC0+Yl9zdGF0ZSB8PSAoMVVM
IDw8IEJIX0hvbGUpOw0KKwkJfQ0KKwkJcmV0dXJuIDA7DQorCX0NCiANCi0J
bG9ja19rZXJuZWwoKTsNCisJZXJyID0gLUVJTzsNCisJbmV3ID0gMDsNCiAJ
cmV0ID0gMDsNCi0JKmVyciA9IC1FSU87DQotCWlmIChibG9jayA8IDApIHsN
Ci0JCWV4dDJfd2FybmluZyAoaW5vZGUtPmlfc2IsICJleHQyX2dldGJsayIs
ICJibG9jayA8IDAiKTsNCi0JCWdvdG8gYWJvcnQ7DQotCX0NCi0JaWYgKGJs
b2NrID4gRVhUMl9ORElSX0JMT0NLUyArIGFkZHJfcGVyX2Jsb2NrICsNCi0J
CSgxIDw8IChhZGRyX3Blcl9ibG9ja19iaXRzICogMikpICsNCi0JCSgoMSA8
PCAoYWRkcl9wZXJfYmxvY2tfYml0cyAqIDIpKSA8PCBhZGRyX3Blcl9ibG9j
a19iaXRzKSkgew0KLQkJZXh0Ml93YXJuaW5nIChpbm9kZS0+aV9zYiwgImV4
dDJfZ2V0YmxrIiwgImJsb2NrID4gYmlnIik7DQotCQlnb3RvIGFib3J0Ow0K
LQl9DQorCWJoID0gTlVMTDsNCisNCisJbG9ja19rZXJuZWwoKTsNCisNCisJ
aWYgKGlibG9jayA8IDApDQorCQlnb3RvIGFib3J0X25lZ2F0aXZlOw0KKwlp
ZiAoaWJsb2NrID4gZGlyZWN0X2Jsb2NrcyArIGluZGlyZWN0X2Jsb2NrcyAr
DQorCQkJCQkgZG91YmxlX2Jsb2NrcyArIHRyaXBsZV9ibG9ja3MpDQorCQln
b3RvIGFib3J0X3Rvb19iaWc7DQorDQogCS8qDQogCSAqIElmIHRoaXMgaXMg
YSBzZXF1ZW50aWFsIGJsb2NrIGFsbG9jYXRpb24sIHNldCB0aGUgbmV4dF9h
bGxvY19ibG9jaw0KIAkgKiB0byB0aGlzIGJsb2NrIG5vdyBzbyB0aGF0IGFs
bCB0aGUgaW5kYmxvY2sgYW5kIGRhdGEgYmxvY2sNCiAJICogYWxsb2NhdGlv
bnMgdXNlIHRoZSBzYW1lIGdvYWwgem9uZQ0KIAkgKi8NCiANCi0JZXh0Ml9k
ZWJ1ZyAoImJsb2NrICVsdSwgbmV4dCAlbHUsIGdvYWwgJWx1LlxuIiwgYmxv
Y2ssIA0KKwlleHQyX2RlYnVnICgiYmxvY2sgJWx1LCBuZXh0ICVsdSwgZ29h
bCAlbHUuXG4iLCBpYmxvY2ssIA0KIAkJICAgIGlub2RlLT51LmV4dDJfaS5p
X25leHRfYWxsb2NfYmxvY2ssDQogCQkgICAgaW5vZGUtPnUuZXh0Ml9pLmlf
bmV4dF9hbGxvY19nb2FsKTsNCiANCi0JaWYgKGJsb2NrID09IGlub2RlLT51
LmV4dDJfaS5pX25leHRfYWxsb2NfYmxvY2sgKyAxKSB7DQorCWlmIChpYmxv
Y2sgPT0gaW5vZGUtPnUuZXh0Ml9pLmlfbmV4dF9hbGxvY19ibG9jayArIDEp
IHsNCiAJCWlub2RlLT51LmV4dDJfaS5pX25leHRfYWxsb2NfYmxvY2srKzsN
CiAJCWlub2RlLT51LmV4dDJfaS5pX25leHRfYWxsb2NfZ29hbCsrOw0KIAl9
DQogDQotCSplcnIgPSAwOw0KLQliID0gYmxvY2s7DQotCSpjcmVhdGVkID0g
MDsNCi0JaWYgKGJsb2NrIDwgRVhUMl9ORElSX0JMT0NLUykgew0KLQkJLyoN
Ci0JCSAqIGRhdGEgcGFnZS4NCi0JCSAqLw0KLQkJdG1wID0gaW5vZGVfZ2V0
YmxrIChpbm9kZSwgYmxvY2ssIGNyZWF0ZSwgYiwNCi0JCQkJCWVyciwgMCwg
JnBoeXNfYmxvY2ssIGNyZWF0ZWQpOw0KLQkJZ290byBvdXQ7DQotCX0NCi0J
YmxvY2sgLT0gRVhUMl9ORElSX0JMT0NLUzsNCi0JaWYgKGJsb2NrIDwgYWRk
cl9wZXJfYmxvY2spIHsNCi0JCWJoID0gaW5vZGVfZ2V0YmxrIChpbm9kZSwg
RVhUMl9JTkRfQkxPQ0ssIGNyZWF0ZSwgYiwgZXJyLCAxLCBOVUxMLCBOVUxM
KTsNCi0JCXRtcCA9IGJsb2NrX2dldGJsayAoaW5vZGUsIGJoLCBibG9jaywg
Y3JlYXRlLA0KLQkJICAgICBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsIGIs
IGVyciwgMCwgJnBoeXNfYmxvY2ssIGNyZWF0ZWQpOw0KLQkJZ290byBvdXQ7
DQotCX0NCi0JYmxvY2sgLT0gYWRkcl9wZXJfYmxvY2s7DQotCWlmIChibG9j
ayA8ICgxIDw8IChhZGRyX3Blcl9ibG9ja19iaXRzICogMikpKSB7DQotCQli
aCA9IGlub2RlX2dldGJsayAoaW5vZGUsIEVYVDJfRElORF9CTE9DSywgY3Jl
YXRlLCBiLCBlcnIsIDEsIE5VTEwsIE5VTEwpOw0KLQkJYmggPSBibG9ja19n
ZXRibGsgKGlub2RlLCBiaCwgYmxvY2sgPj4gYWRkcl9wZXJfYmxvY2tfYml0
cywNCi0JCQkJICAgY3JlYXRlLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUs
IGIsIGVyciwgMSwgTlVMTCwgTlVMTCk7DQotCQl0bXAgPSBibG9ja19nZXRi
bGsgKGlub2RlLCBiaCwgYmxvY2sgJiAoYWRkcl9wZXJfYmxvY2sgLSAxKSwN
Ci0JCSAgICAgY3JlYXRlLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsIGIs
IGVyciwgMCwgJnBoeXNfYmxvY2ssIGNyZWF0ZWQpOw0KLQkJZ290byBvdXQ7
DQotCX0NCi0JYmxvY2sgLT0gKDEgPDwgKGFkZHJfcGVyX2Jsb2NrX2JpdHMg
KiAyKSk7DQotCWJoID0gaW5vZGVfZ2V0YmxrIChpbm9kZSwgRVhUMl9USU5E
X0JMT0NLLCBjcmVhdGUsIGIsIGVyciwgMSwgTlVMTCxOVUxMKTsNCi0JYmgg
PSBibG9ja19nZXRibGsgKGlub2RlLCBiaCwgYmxvY2sgPj4gKGFkZHJfcGVy
X2Jsb2NrX2JpdHMgKiAyKSwNCi0JCQkgICBjcmVhdGUsIGlub2RlLT5pX3Ni
LT5zX2Jsb2Nrc2l6ZSwgYiwgZXJyLCAxLCBOVUxMLE5VTEwpOw0KLQliaCA9
IGJsb2NrX2dldGJsayAoaW5vZGUsIGJoLCAoYmxvY2sgPj4gYWRkcl9wZXJf
YmxvY2tfYml0cykgJg0KLQkJKGFkZHJfcGVyX2Jsb2NrIC0gMSksIGNyZWF0
ZSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplLA0KLQkJYiwgZXJyLCAxLCBO
VUxMLE5VTEwpOw0KLQl0bXAgPSBibG9ja19nZXRibGsgKGlub2RlLCBiaCwg
YmxvY2sgJiAoYWRkcl9wZXJfYmxvY2sgLSAxKSwgY3JlYXRlLA0KLQkJaW5v
ZGUtPmlfc2ItPnNfYmxvY2tzaXplLCBiLCBlcnIsIDAsICZwaHlzX2Jsb2Nr
LCBjcmVhdGVkKTsNCisJZXJyID0gMDsNCisJcHRyID0gaWJsb2NrOw0KKw0K
KwkvKg0KKwkgKiBvaywgdGhlc2UgbWFjcm9zIGNsZWFuIHRoZSBsb2dpYyB1
cCBhIGJpdCBhbmQgbWFrZQ0KKwkgKiBpdCBtdWNoIG1vcmUgcmVhZGFibGU6
DQorCSAqLw0KKyNkZWZpbmUgR0VUX0lOT0RFX0RBVEFCTE9DSyh4KSBcDQor
CQlpbm9kZV9nZXRibGsoaW5vZGUsIHgsIGlibG9jaywgJmVyciwgMCwgJnBo
eXMsICZuZXcpDQorI2RlZmluZSBHRVRfSU5PREVfUFRSKHgpIFwNCisJCWlu
b2RlX2dldGJsayhpbm9kZSwgeCwgaWJsb2NrLCAmZXJyLCAxLCBOVUxMLCBO
VUxMKQ0KKyNkZWZpbmUgR0VUX0lORElSRUNUX0RBVEFCTE9DSyh4KSBcDQor
CQlibG9ja19nZXRibGsgKGlub2RlLCBiaCwgeCwgaWJsb2NrLCAmZXJyLCAw
LCAmcGh5cywgJm5ldyk7DQorI2RlZmluZSBHRVRfSU5ESVJFQ1RfUFRSKHgp
IFwNCisJCWJsb2NrX2dldGJsayAoaW5vZGUsIGJoLCB4LCBpYmxvY2ssICZl
cnIsIDEsIE5VTEwsIE5VTEwpOw0KKw0KKwlpZiAocHRyIDwgZGlyZWN0X2Js
b2Nrcykgew0KKwkJYmggPSBHRVRfSU5PREVfREFUQUJMT0NLKHB0cik7DQor
CQlnb3RvIG91dDsNCisJfQ0KKwlwdHIgLT0gZGlyZWN0X2Jsb2NrczsNCisJ
aWYgKHB0ciA8IGluZGlyZWN0X2Jsb2Nrcykgew0KKwkJYmggPSBHRVRfSU5P
REVfUFRSKEVYVDJfSU5EX0JMT0NLKTsNCisJCWdvdG8gZ2V0X2luZGlyZWN0
Ow0KKwl9DQorCXB0ciAtPSBpbmRpcmVjdF9ibG9ja3M7DQorCWlmIChwdHIg
PCBkb3VibGVfYmxvY2tzKSB7DQorCQliaCA9IEdFVF9JTk9ERV9QVFIoRVhU
Ml9ESU5EX0JMT0NLKTsNCisJCWdvdG8gZ2V0X2RvdWJsZTsNCisJfQ0KKwlw
dHIgLT0gZG91YmxlX2Jsb2NrczsNCisJYmggPSBHRVRfSU5PREVfUFRSKEVY
VDJfVElORF9CTE9DSyk7DQorCWJoID0gR0VUX0lORElSRUNUX1BUUihwdHIg
Pj4gKHB0cnNfYml0cyAqIDIpKTsNCitnZXRfZG91YmxlOg0KKwliaCA9IEdF
VF9JTkRJUkVDVF9QVFIoKHB0ciA+PiBwdHJzX2JpdHMpICYgKHB0cnMgLSAx
KSk7DQorZ2V0X2luZGlyZWN0Og0KKwliaCA9IEdFVF9JTkRJUkVDVF9EQVRB
QkxPQ0socHRyICYgKHB0cnMgLSAxKSk7DQorDQorI3VuZGVmIEdFVF9JTk9E
RV9EQVRBQkxPQ0sNCisjdW5kZWYgR0VUX0lOT0RFX1BUUg0KKyN1bmRlZiBH
RVRfSU5ESVJFQ1RfREFUQUJMT0NLDQorI3VuZGVmIEdFVF9JTkRJUkVDVF9Q
VFINCiANCiBvdXQ6DQotCWlmICghcGh5c19ibG9jaykNCi0JCWdvdG8gYWJv
cnQ7DQotCWlmICgqZXJyKQ0KKwlpZiAoYmgpDQorCQlCVUcoKTsJLy8gdGVt
cG9yYXJ5IGRlYnVnZ2luZyBjaGVjaw0KKwlpZiAoZXJyKQ0KIAkJZ290byBh
Ym9ydDsNCi0JcmV0ID0gcGh5c19ibG9jazsNCisJaWYgKCFwaHlzKQ0KKwkJ
QlVHKCk7CS8vIG11c3Qgbm90IGhhcHBlbiBlaXRoZXINCisNCisJYmhfcmVz
dWx0LT5iX2Jsb2NrbnIgPSBwaHlzOw0KKwliaF9yZXN1bHQtPmJfc3RhdGUg
fD0gKDFVTCA8PCBCSF9NYXBwZWQpOyAvKiBzYWZlICovDQorCWlmIChuZXcp
DQorCQliaF9yZXN1bHQtPmJfc3RhdGUgfD0gKDFVTCA8PCBCSF9OZXcpOw0K
IGFib3J0Og0KIAl1bmxvY2tfa2VybmVsKCk7DQotCXJldHVybiByZXQ7DQor
CXJldHVybiBlcnI7DQorDQorYWJvcnRfbmVnYXRpdmU6DQorCWV4dDJfd2Fy
bmluZyAoaW5vZGUtPmlfc2IsICJleHQyX2dldF9ibG9jayIsICJibG9jayA8
IDAiKTsNCisJZ290byBhYm9ydDsNCisNCithYm9ydF90b29fYmlnOg0KKwll
eHQyX3dhcm5pbmcgKGlub2RlLT5pX3NiLCAiZXh0Ml9nZXRfYmxvY2siLCAi
YmxvY2sgPiBiaWciKTsNCisJZ290byBhYm9ydDsNCiB9DQogDQogc3RydWN0
IGJ1ZmZlcl9oZWFkICogZXh0Ml9nZXRibGsgKHN0cnVjdCBpbm9kZSAqIGlu
b2RlLCBsb25nIGJsb2NrLA0KIAkJCQkgIGludCBjcmVhdGUsIGludCAqIGVy
cikNCiB7DQotCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wID0gTlVMTDsNCi0J
aW50IHBoeXNfYmxvY2s7DQotCWludCBjcmVhdGVkOw0KLQ0KLQlwaHlzX2Js
b2NrID0gZXh0Ml9nZXRibGtfYmxvY2sgKGlub2RlLCBibG9jaywgY3JlYXRl
LCBlcnIsICZjcmVhdGVkKTsNCi0NCi0JaWYgKHBoeXNfYmxvY2spIHsNCi0J
CXRtcCA9IGdldGJsayAoaW5vZGUtPmlfZGV2LCBwaHlzX2Jsb2NrLCBpbm9k
ZS0+aV9zYi0+c19ibG9ja3NpemUpOw0KLQkJaWYgKGNyZWF0ZWQpIHsNCisJ
c3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSBOVUxMLCBkdW1teTsNCisNCisJ
ZHVtbXkuYl9zdGF0ZSA9IDA7DQorCWR1bW15LmJfYmxvY2tuciA9IC0xMDAw
OyAvLyBjYXRjaGVzIGJ1Z3MNCisJaWYgKGNyZWF0ZSkNCisJCSplcnIgPSBl
eHQyX2dldF9ibG9jayAoaW5vZGUsIGJsb2NrLCAmZHVtbXksIEZTX0dFVEJM
T0NLX05FVyk7DQorCWVsc2UNCisJCSplcnIgPSBleHQyX2dldF9ibG9jayAo
aW5vZGUsIGJsb2NrLCAmZHVtbXksIEZTX0dFVEJMT0NLX01BUCk7DQorDQor
CWlmICgqZXJyKQ0KKwkJZ290byBvdXQ7DQorCQkNCisJaWYgKGJ1ZmZlcl9t
YXBwZWQoJmR1bW15KSAmJiAhYnVmZmVyX2hvbGUoJmR1bW15KSkgew0KKwkJ
dG1wID0gZ2V0YmxrIChpbm9kZS0+aV9kZXYsIGR1bW15LmJfYmxvY2tuciwN
CisJCQkJCQkgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsNCisJCWlmIChi
dWZmZXJfbmV3KCZkdW1teSkpIHsNCiAJCQltZW1zZXQodG1wLT5iX2RhdGEs
IDAsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7DQogCQkJbWFya19idWZm
ZXJfdXB0b2RhdGUodG1wLCAxKTsNCiAJCQltYXJrX2J1ZmZlcl9kaXJ0eSh0
bXAsIDEpOw0KIAkJfQ0KIAl9DQorb3V0Og0KIAlyZXR1cm4gdG1wOw0KIH0N
CiANCi0tLSBsaW51eC9mcy9leHQyL2ZpbGUuYy5vcmlnCVNhdCBKdW4gMjYg
MTQ6NTQ6MzAgMTk5OQ0KKysrIGxpbnV4L2ZzL2V4dDIvZmlsZS5jCVNhdCBK
dW4gMjYgMTU6Mjk6MzggMTk5OQ0KQEAgLTM3LDcgKzM3LDYgQEANCiAjZGVm
aW5lIE1JTihhLGIpICgoKGEpPChiKSk/KGEpOihiKSkNCiAjZGVmaW5lIE1B
WChhLGIpICgoKGEpPihiKSk/KGEpOihiKSkNCiANCi1zdGF0aWMgaW50IGV4
dDJfd3JpdGVwYWdlIChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCBwYWdl
ICogcGFnZSk7DQogc3RhdGljIGxvbmcgbG9uZyBleHQyX2ZpbGVfbHNlZWso
c3RydWN0IGZpbGUgKiwgbG9uZyBsb25nLCBpbnQpOw0KICNpZiBCSVRTX1BF
Ul9MT05HIDwgNjQNCiBzdGF0aWMgaW50IGV4dDJfb3Blbl9maWxlIChzdHJ1
Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7DQpAQCAtMTA2LDUxICsxMDUs
MTYgQEANCiAJfQ0KIH0NCiANCi1zdGF0aWMgaW50IGV4dDJfZ2V0X2Jsb2Nr
KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2ssIHN0
cnVjdCBidWZmZXJfaGVhZCAqYmgsIHVuc2lnbmVkIGludCBmbGFncykNCi17
DQotCWludCBlcnJvciwgY3JlYXRlZDsNCi0JdW5zaWduZWQgbG9uZyBibG9j
a25yOw0KLQ0KLQlibG9ja25yID0gZXh0Ml9nZXRibGtfYmxvY2soaW5vZGUs
IGJsb2NrLCBmbGFncyAmIEZTX0dFVEJMS19BTExPQ0FURSwgJmVycm9yLCAm
Y3JlYXRlZCk7DQotCWlmICghYmxvY2tucikgew0KLQkJaWYgKGVycm9yKQ0K
LQkJCXJldHVybiBlcnJvcjsNCi0JCWlmICghKGZsYWdzICYgRlNfR0VUQkxL
X0FMTE9DQVRFKSkNCi0JCQlnb3RvIGNsZWFyX2FuZF91cHRvZGF0ZTsNCi0J
CXJldHVybiAtRU5PU1BDOw0KLQl9DQotDQotCWJoLT5iX2RldiA9IGlub2Rl
LT5pX2RldjsNCi0JYmgtPmJfYmxvY2tuciA9IGJsb2NrbnI7DQotCXNldF9i
aXQoQkhfQWxsb2NhdGVkLCAmYmgtPmJfc3RhdGUpOw0KLQ0KLQlpZiAoY3Jl
YXRlZCkgew0KLWNsZWFyX2FuZF91cHRvZGF0ZToNCi0JCWlmIChmbGFncyAm
IEZTX0dFVEJMS19VUERBVEUpIHsNCi0JCQltZW1zZXQoYmgtPmJfZGF0YSwg
MCwgYmgtPmJfc2l6ZSk7DQotCQkJc2V0X2JpdChCSF9VcHRvZGF0ZSwgJmJo
LT5iX3N0YXRlKTsNCi0JCX0NCi0JfQ0KLQlyZXR1cm4gMDsNCi19DQotDQot
c3RhdGljIGludCBleHQyX3dyaXRlcGFnZSAoc3RydWN0IGZpbGUgKiBmaWxl
LCBzdHJ1Y3QgcGFnZSAqIHBhZ2UpDQotew0KLQlyZXR1cm4gYmxvY2tfd3Jp
dGVfZnVsbF9wYWdlKGZpbGUsIHBhZ2UsIGV4dDJfZ2V0X2Jsb2NrKTsNCi19
DQotDQotc3RhdGljIGxvbmcgZXh0Ml93cml0ZV9vbmVfcGFnZSAoc3RydWN0
IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25n
IG9mZnNldCwgdW5zaWduZWQgbG9uZyBieXRlcywgY29uc3QgY2hhciAqIGJ1
ZikNCi17DQotCXJldHVybiBibG9ja193cml0ZV9wYXJ0aWFsX3BhZ2UoZmls
ZSwgcGFnZSwgb2Zmc2V0LCBieXRlcywgYnVmLCBleHQyX2dldF9ibG9jayk7
DQotfQ0KLQ0KIC8qDQogICogV3JpdGUgdG8gYSBmaWxlICh0aHJvdWdoIHRo
ZSBwYWdlIGNhY2hlKS4NCiAgKi8NCiBzdGF0aWMgc3NpemVfdA0KIGV4dDJf
ZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVm
LCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykNCiB7DQotCXNzaXplX3Qg
cmV0dmFsID0gZ2VuZXJpY19maWxlX3dyaXRlKGZpbGUsIGJ1ZiwgY291bnQs
IHBwb3MsIGV4dDJfd3JpdGVfb25lX3BhZ2UpOw0KKwlzc2l6ZV90IHJldHZh
bDsNCisNCisJcmV0dmFsID0gZ2VuZXJpY19maWxlX3dyaXRlKGZpbGUsIGJ1
ZiwgY291bnQsDQorCQkJCQkJIHBwb3MsIGJsb2NrX3dyaXRlX3BhcnRpYWxf
cGFnZSk7DQogCWlmIChyZXR2YWwgPiAwKSB7DQogCQlzdHJ1Y3QgaW5vZGUg
Kmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7DQogCQlyZW1vdmVf
c3VpZChpbm9kZSk7DQpAQCAtMjIzLDkgKzE4Nyw5IEBADQogCU5VTEwsCQkJ
LyogcmVuYW1lICovDQogCU5VTEwsCQkJLyogcmVhZGxpbmsgKi8NCiAJTlVM
TCwJCQkvKiBmb2xsb3dfbGluayAqLw0KLQlleHQyX2JtYXAsCQkvKiBibWFw
ICovDQorCWV4dDJfZ2V0X2Jsb2NrLAkJLyogZ2V0X2Jsb2NrICovDQogCWJs
b2NrX3JlYWRfZnVsbF9wYWdlLAkvKiByZWFkcGFnZSAqLw0KLQlleHQyX3dy
aXRlcGFnZSwJCS8qIHdyaXRlcGFnZSAqLw0KKwlibG9ja193cml0ZV9mdWxs
X3BhZ2UsCS8qIHdyaXRlcGFnZSAqLw0KIAlibG9ja19mbHVzaHBhZ2UsCS8q
IGZsdXNocGFnZSAqLw0KIAlleHQyX3RydW5jYXRlLAkJLyogdHJ1bmNhdGUg
Ki8NCiAJZXh0Ml9wZXJtaXNzaW9uLAkvKiBwZXJtaXNzaW9uICovDQotLS0g
bGludXgvZnMvZXh0Mi9kaXIuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAg
MTk5OQ0KKysrIGxpbnV4L2ZzL2V4dDIvZGlyLmMJU2F0IEp1biAyNiAxNToy
OTozOCAxOTk5DQpAQCAtNjcsNyArNjcsNyBAQA0KIAlleHQyX3JlbmFtZSwJ
CS8qIHJlbmFtZSAqLw0KIAlOVUxMLAkJCS8qIHJlYWRsaW5rICovDQogCU5V
TEwsCQkJLyogZm9sbG93X2xpbmsgKi8NCi0JTlVMTCwJCQkvKiBibWFwICov
DQorCU5VTEwsCQkJLyogZ2V0X2Jsb2NrICovDQogCU5VTEwsCQkJLyogcmVh
ZHBhZ2UgKi8NCiAJTlVMTCwJCQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJ
CQkvKiBmbHVzaHBhZ2UgKi8NCi0tLSBsaW51eC9mcy9leHQyL3N5bWxpbmsu
Yy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAgMTk5OQ0KKysrIGxpbnV4L2Zz
L2V4dDIvc3ltbGluay5jCVNhdCBKdW4gMjYgMTU6Mjk6MzggMTk5OQ0KQEAg
LTQzLDcgKzQzLDcgQEANCiAJTlVMTCwJCQkvKiByZW5hbWUgKi8NCiAJZXh0
Ml9yZWFkbGluaywJCS8qIHJlYWRsaW5rICovDQogCWV4dDJfZm9sbG93X2xp
bmssCS8qIGZvbGxvd19saW5rICovDQotCU5VTEwsCQkJLyogYm1hcCAqLw0K
KwlOVUxMLAkJCS8qIGdldF9ibG9jayAqLw0KIAlOVUxMLAkJCS8qIHJlYWRw
YWdlICovDQogCU5VTEwsCQkJLyogd3JpdGVwYWdlICovDQogCU5VTEwsCQkJ
LyogZmx1c2hwYWdlICovDQotLS0gbGludXgvZnMvZXhlYy5jLm9yaWcJU2F0
IEp1biAyNiAxNDo1NDozMCAxOTk5DQorKysgbGludXgvZnMvZXhlYy5jCVNh
dCBKdW4gMjYgMTU6Mjk6MzggMTk5OQ0KQEAgLTMyMCw3ICszMjAsNyBAQA0K
IC8qDQogICogUmVhZCBpbiB0aGUgY29tcGxldGUgZXhlY3V0YWJsZS4gVGhp
cyBpcyB1c2VkIGZvciAiLU4iIGZpbGVzDQogICogdGhhdCBhcmVuJ3Qgb24g
YSBibG9jayBib3VuZGFyeSwgYW5kIGZvciBmaWxlcyBvbiBmaWxlc3lzdGVt
cw0KLSAqIHdpdGhvdXQgYm1hcCBzdXBwb3J0Lg0KKyAqIHdpdGhvdXQgZ2V0
X2Jsb2NrIHN1cHBvcnQuDQogICovDQogaW50IHJlYWRfZXhlYyhzdHJ1Y3Qg
ZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LA0KIAljaGFy
ICogYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCwgaW50IHRvX2ttZW0pDQot
LS0gbGludXgvZnMvYnVmZmVyLmMub3JpZwlTYXQgSnVuIDI2IDE0OjU0OjMw
IDE5OTkNCisrKyBsaW51eC9mcy9idWZmZXIuYwlTYXQgSnVuIDI2IDE1OjI5
OjM4IDE5OTkNCkBAIC00MTAsNyArNDEwLDYgQEANCiAJCQlpZiAoYmgtPmJf
Y291bnQpDQogCQkJCWNvbnRpbnVlOw0KIAkJCWJoLT5iX2ZsdXNodGltZSA9
IDA7DQotCQkJY2xlYXJfYml0KEJIX1Byb3RlY3RlZCwgJmJoLT5iX3N0YXRl
KTsNCiAJCQljbGVhcl9iaXQoQkhfVXB0b2RhdGUsICZiaC0+Yl9zdGF0ZSk7
DQogCQkJY2xlYXJfYml0KEJIX0RpcnR5LCAmYmgtPmJfc3RhdGUpOw0KIAkJ
CWNsZWFyX2JpdChCSF9SZXEsICZiaC0+Yl9zdGF0ZSk7DQpAQCAtNjc2LDYg
KzY3NSw3IEBADQogCWJoLT5iX2ZsdXNodGltZSA9IDA7DQogCWJoLT5iX2Vu
ZF9pbyA9IGhhbmRsZXI7DQogCWJoLT5iX2Rldl9pZCA9IGRldl9pZDsNCisJ
YmgtPmJfY291bnQgPSAxOw0KIH0NCiANCiBzdGF0aWMgdm9pZCBlbmRfYnVm
ZmVyX2lvX3N5bmMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9k
YXRlKQ0KQEAgLTY5OSwzMiArNjk5LDI4IEBADQogCXN0cnVjdCBwYWdlICpw
YWdlOw0KIAlpbnQgZnJlZTsNCiANCi0JbWFya19idWZmZXJfdXB0b2RhdGUo
YmgsIHVwdG9kYXRlKTsNCi0NCi0JLyogVGhpcyBpcyBhIHRlbXBvcmFyeSBi
dWZmZXIgdXNlZCBmb3IgcGFnZSBJL08uICovDQogCXBhZ2UgPSBtZW1fbWFw
ICsgTUFQX05SKGJoLT5iX2RhdGEpOw0KLQ0KKwltYXJrX2J1ZmZlcl91cHRv
ZGF0ZShiaCwgdXB0b2RhdGUpOw0KIAlpZiAoIXVwdG9kYXRlKQ0KIAkJU2V0
UGFnZUVycm9yKHBhZ2UpOw0KIA0KKwkvKiBUaGlzIGlzIGEgdGVtcG9yYXJ5
IGJ1ZmZlciB1c2VkIGZvciBwYWdlIEkvTy4gKi8NCisNCiAJLyoNCiAJICog
QmUgX3ZlcnlfIGNhcmVmdWwgZnJvbSBoZXJlIG9uLiBCYWQgdGhpbmdzIGNh
biBoYXBwZW4gaWYNCiAJICogdHdvIGJ1ZmZlciBoZWFkcyBlbmQgSU8gYXQg
YWxtb3N0IHRoZSBzYW1lIHRpbWUgYW5kIGJvdGgNCiAJICogZGVjaWRlIHRo
YXQgdGhlIHBhZ2UgaXMgbm93IGNvbXBsZXRlbHkgZG9uZS4NCiAJICoNCi0J
ICogQXN5bmMgYnVmZmVyX2hlYWRzIGFyZSBoZXJlIG9ubHkgYXMgbGFiZWxz
IGZvciBJTywgYW5kIGdldA0KLQkgKiB0aHJvd24gYXdheSBvbmNlIHRoZSBJ
TyBmb3IgdGhpcyBwYWdlIGlzIGNvbXBsZXRlLiAgSU8gaXMNCi0JICogZGVl
bWVkIGNvbXBsZXRlIG9uY2UgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIHZpc2l0
ZWQNCi0JICogKGJfY291bnQ9PTApIGFuZCBhcmUgbm93IHVubG9ja2VkLiBX
ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0DQotCSAqIG9ubHkgdGhlIF9sYXN0XyBi
dWZmZXIgdGhhdCBkZWNyZW1lbnRzIGl0cyBjb3VudCBpcyB0aGUgb25lDQot
CSAqIHRoYXQgZnJlZSdzIHRoZSBwYWdlLi4NCisJICogSU8gaGVyZSBpcyBk
ZWVtZWQgY29tcGxldGUgb25jZSBhbGwgYXN5bmNocm9uIGJ1ZmZlcnMgaGF2
ZQ0KKwkgKiBnb25lIHVudXNlZC4gKG5vdGUgdGhhdCBhbiBhc3luY2hyb24g
YnVmZmVyIGNhbiBnbyBzeW5jaHJvbg0KKwkgKiBieSBnZXR0aW5nIGRpcnRp
ZWQpDQogCSAqLw0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGFnZV91cHRvZGF0
ZV9sb2NrLCBmbGFncyk7DQogCXVubG9ja19idWZmZXIoYmgpOw0KIAliaC0+
Yl9jb3VudC0tOw0KIAl0bXAgPSBiaC0+Yl90aGlzX3BhZ2U7DQogCXdoaWxl
ICh0bXAgIT0gYmgpIHsNCi0JCWlmICh0bXAtPmJfY291bnQgJiYgKHRtcC0+
Yl9lbmRfaW8gPT0gZW5kX2J1ZmZlcl9pb19hc3luYykpDQorCQlpZiAoKHRt
cC0+Yl9lbmRfaW8gPT0gZW5kX2J1ZmZlcl9pb19hc3luYykgJiYgdG1wLT5i
X2NvdW50KQ0KIAkJCWdvdG8gc3RpbGxfYnVzeTsNCiAJCXRtcCA9IHRtcC0+
Yl90aGlzX3BhZ2U7DQogCX0NCkBAIC04MDYsOCArODAyLDcgQEANCiAJaW5p
dF9idWZmZXIoYmgsIGVuZF9idWZmZXJfaW9fc3luYywgTlVMTCk7DQogCWJo
LT5iX2RldiA9IGRldjsNCiAJYmgtPmJfYmxvY2tuciA9IGJsb2NrOw0KLQli
aC0+Yl9jb3VudCA9IDE7DQotCWJoLT5iX3N0YXRlID0gMSA8PCBCSF9BbGxv
Y2F0ZWQ7DQorCWJoLT5iX3N0YXRlID0gMSA8PCBCSF9NYXBwZWQ7DQogDQog
CS8qIEluc2VydCB0aGUgYnVmZmVyIGludG8gdGhlIHJlZ3VsYXIgbGlzdHMg
Ki8NCiAJaW5zZXJ0X2ludG9fbHJ1X2xpc3QoYmgpOw0KQEAgLTkxNyw2ICs5
MTIsNyBAQA0KIAkJcmV0dXJuOw0KIAl9DQogCXByaW50aygiVkZTOiBicmVs
c2U6IFRyeWluZyB0byBmcmVlIGZyZWUgYnVmZmVyXG4iKTsNCisJQlVHKCk7
DQogfQ0KIA0KIC8qDQpAQCAtMTIyMSw5ICsxMjE3LDggQEANCiAJCWlmIChi
bWFwICYmICFibG9jaykgew0KIAkJCW1lbXNldChiaC0+Yl9kYXRhLCAwLCBz
aXplKTsNCiAJCQlzZXRfYml0KEJIX1VwdG9kYXRlLCAmYmgtPmJfc3RhdGUp
Ow0KLQkJCWNvbnRpbnVlOw0KIAkJfQ0KLQkJc2V0X2JpdChCSF9BbGxvY2F0
ZWQsICZiaC0+Yl9zdGF0ZSk7DQorCQlzZXRfYml0KEJIX01hcHBlZCwgJmJo
LT5iX3N0YXRlKTsNCiAJfQ0KIAl0YWlsLT5iX3RoaXNfcGFnZSA9IGhlYWQ7
DQogCWdldF9wYWdlKHBhZ2UpOw0KQEAgLTEyNTksMTQgKzEyNTQsMTcgQEAN
CiAJCSAqIGlzIHRoaXMgYmxvY2sgZnVsbHkgZmx1c2hlZD8NCiAJCSAqLw0K
IAkJaWYgKG9mZnNldCA8PSBjdXJyX29mZikgew0KLQkJCWlmIChidWZmZXJf
YWxsb2NhdGVkKGJoKSkgew0KKwkJCS8qDQorCQkJICogZG9lcyBpdCBoYXZl
IGFueSBhc3NvY2lhdGlvbiB3aXRoIHRoZSBibG9jayBkZXZpY2U/DQorCQkJ
ICovDQorCQkJaWYgKGJ1ZmZlcl9tYXBwZWQoYmgpKSB7DQogCQkJCWJoLT5i
X2NvdW50Kys7DQogCQkJCXdhaXRfb25fYnVmZmVyKGJoKTsNCiAJCQkJaWYg
KGJoLT5iX2RldiA9PSBCX0ZSRUUpDQogCQkJCQlCVUcoKTsNCiAJCQkJbWFy
a19idWZmZXJfY2xlYW4oYmgpOw0KIAkJCQljbGVhcl9iaXQoQkhfVXB0b2Rh
dGUsICZiaC0+Yl9zdGF0ZSk7DQotCQkJCWNsZWFyX2JpdChCSF9BbGxvY2F0
ZWQsICZiaC0+Yl9zdGF0ZSk7DQorCQkJCWNsZWFyX2JpdChCSF9NYXBwZWQs
ICZiaC0+Yl9zdGF0ZSk7DQogCQkJCWJoLT5iX2Jsb2NrbnIgPSAwOw0KIAkJ
CQliaC0+Yl9jb3VudC0tOw0KIAkJCX0NCkBAIC0xMzA3LDcgKzEzMDUsOCBA
QA0KIAliaCA9IGhlYWQ7DQogCWRvIHsNCiAJCWJoLT5iX2RldiA9IGlub2Rl
LT5pX2RldjsNCi0JCWJoLT5iX2Jsb2NrbnIgPSAwOw0KKwkJYmgtPmJfc3Rh
dGUgPSAwOw0KKwkJYmgtPmJfYmxvY2tuciA9IC0xMDAwOw0KIAkJYmgtPmJf
ZW5kX2lvID0gZW5kX2J1ZmZlcl9pb19iYWQ7DQogCQl0YWlsID0gYmg7DQog
CQliaCA9IGJoLT5iX3RoaXNfcGFnZTsNCkBAIC0xMzIxLDcgKzEzMjAsNyBA
QA0KICAqIGJsb2NrX3dyaXRlX2Z1bGxfcGFnZSgpIGlzIFNNUC1zYWZlIC0g
Y3VycmVudGx5IGl0J3Mgc3RpbGwNCiAgKiBiZWluZyBjYWxsZWQgd2l0aCB0
aGUga2VybmVsIGxvY2sgaGVsZCwgYnV0IHRoZSBjb2RlIGlzIHJlYWR5Lg0K
ICAqLw0KLWludCBibG9ja193cml0ZV9mdWxsX3BhZ2UgKHN0cnVjdCBmaWxl
ICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZnNfZ2V0YmxvY2tfdCBmc19n
ZXRfYmxvY2spDQoraW50IGJsb2NrX3dyaXRlX2Z1bGxfcGFnZSAoc3RydWN0
IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKQ0KIHsNCiAJc3RydWN0
IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7DQogCXN0cnVjdCBp
bm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7DQpAQCAtMTM1OCwxMiAr
MTM1NywxNCBAQA0KIAkJICogZGVjaXNpb25zIChibG9jayAjMCBtYXkgYWN0
dWFsbHkgYmUgYSB2YWxpZCBibG9jaykNCiAJCSAqLw0KIAkJYmgtPmJfZW5k
X2lvID0gZW5kX2J1ZmZlcl9pb19zeW5jOw0KLQkJaWYgKCFidWZmZXJfYWxs
b2NhdGVkKGJoKSkgew0KLQkJCWVyciA9IGZzX2dldF9ibG9jayhpbm9kZSwg
YmxvY2ssIGJoLCBGU19HRVRCTEtfQUxMT0NBVEUpOw0KKwkJaWYgKCFidWZm
ZXJfdXB0b2RhdGUoYmgpIHx8IGJ1ZmZlcl9ob2xlKGJoKSkgew0KKwkJCWVy
ciA9IGlub2RlLT5pX29wLT5nZXRfYmxvY2soaW5vZGUsIGJsb2NrLA0KKwkJ
CQkJCQkgYmgsIEZTX0dFVEJMT0NLX05FVyk7DQogCQkJaWYgKGVycikNCiAJ
CQkJZ290byBvdXQ7DQorCQkJYmgtPmJfZGV2ID0gaW5vZGUtPmlfZGV2Ow0K
IAkJfQ0KLQkJc2V0X2JpdChCSF9VcHRvZGF0ZSwgJmJoLT5iX3N0YXRlKTsN
CisJCWJoLT5iX3N0YXRlIHw9ICgxVUwgPDwgQkhfVXB0b2RhdGUpOyAvKiBz
YWZlICovDQogCQlhdG9taWNfbWFya19idWZmZXJfZGlydHkoYmgsMCk7DQog
DQogCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsNCkBAIC0xMzc3LDcgKzEzNzgs
NyBAQA0KIAlyZXR1cm4gZXJyOw0KIH0NCiANCi1pbnQgYmxvY2tfd3JpdGVf
cGFydGlhbF9wYWdlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2Ug
KnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGJ5
dGVzLCBjb25zdCBjaGFyICogYnVmLCBmc19nZXRibG9ja190IGZzX2dldF9i
bG9jaykNCitpbnQgYmxvY2tfd3JpdGVfcGFydGlhbF9wYWdlIChzdHJ1Y3Qg
ZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcg
b2Zmc2V0LCB1bnNpZ25lZCBsb25nIGJ5dGVzLCBjb25zdCBjaGFyICogYnVm
KQ0KIHsNCiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50
cnk7DQogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7
DQpAQCAtMTQ0NywyNiArMTQ0OCwzNSBAQA0KIAkJICogbm90IGdvaW5nIHRv
IGZpbGwgaXQgY29tcGxldGVseS4NCiAJCSAqLw0KIAkJYmgtPmJfZW5kX2lv
ID0gZW5kX2J1ZmZlcl9pb19zeW5jOw0KLQkJaWYgKCFidWZmZXJfYWxsb2Nh
dGVkKGJoKSkgew0KLQkJCXVuc2lnbmVkIGludCBmbGFncyA9IEZTX0dFVEJM
S19BTExPQ0FURTsNCi0JCQlpZiAoc3RhcnRfb2Zmc2V0IHx8IChlbmRfYnl0
ZXMgJiYgKGkgPT0gZW5kX2Jsb2NrKSkpDQotCQkJCWZsYWdzIHw9IEZTX0dF
VEJMS19VUERBVEU7DQotCQkJZXJyID0gZnNfZ2V0X2Jsb2NrKGlub2RlLCBi
bG9jaywgYmgsIGZsYWdzKTsNCisNCisJCWlmICghYnVmZmVyX3VwdG9kYXRl
KGJoKSB8fCBidWZmZXJfaG9sZShiaCkpIHsNCisJCQllcnIgPSBpbm9kZS0+
aV9vcC0+Z2V0X2Jsb2NrKGlub2RlLCBibG9jaywNCisJCQkJCQkJYmgsIEZT
X0dFVEJMT0NLX05FVyk7DQogCQkJaWYgKGVycikNCiAJCQkJZ290byBvdXQ7
DQotCQl9DQotDQotCQlpZiAoc3RhcnRfb2Zmc2V0IHx8IChlbmRfYnl0ZXMg
JiYgKGkgPT0gZW5kX2Jsb2NrKSkpIHsNCi0JCQlpZiAoIWJ1ZmZlcl91cHRv
ZGF0ZShiaCkpIHsNCi0JCQkJbG9ja19rZXJuZWwoKTsNCi0JCQkJbGxfcndf
YmxvY2soUkVBRCwgMSwgJmJoKTsNCi0JCQkJd2FpdF9vbl9idWZmZXIoYmgp
Ow0KLQkJCQl1bmxvY2tfa2VybmVsKCk7DQotCQkJCWVyciA9IC1FSU87DQot
CQkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkNCi0JCQkJCWdvdG8gb3V0
Ow0KKwkJCWJoLT5iX2RldiA9IGlub2RlLT5pX2RldjsNCisJCQkvKg0KKwkJ
CSAqIGlmIHBhcnRpYWxseSB3cml0dGVuIGJsb2NrIHdoaWNoIGhhcyBjb250
ZW50cyBvbg0KKwkJCSAqIGRpc2ssIHRoZW4gd2UgaGF2ZSB0byByZWFkIGl0
IGZpcnN0Lg0KKwkJCSAqIFdlIGFsc28gcmVseSBvbiB0aGUgZmFjdCB0aGF0
IGZpbGVzeXN0ZW0gaG9sZXMNCisJCQkgKiBjYW5ub3QgYmUgd3JpdHRlbi4N
CisJCQkgKi8NCisJCQlpZiAoc3RhcnRfb2Zmc2V0IHx8IChlbmRfYnl0ZXMg
JiYgKGkgPT0gZW5kX2Jsb2NrKSkpIHsNCisJCQkJaWYgKGJ1ZmZlcl9uZXco
YmgpKSB7DQorCQkJCQltZW1zZXQoYmgtPmJfZGF0YSwgMCwgYmgtPmJfc2l6
ZSk7DQorCQkJCX0gZWxzZSB7DQorCQkJCQlsbF9yd19ibG9jayhSRUFELCAx
LCAmYmgpOw0KKwkJCQkJbG9ja19rZXJuZWwoKTsNCisJCQkJCXdhaXRfb25f
YnVmZmVyKGJoKTsNCisJCQkJCXVubG9ja19rZXJuZWwoKTsNCisJCQkJCWVy
ciA9IC1FSU87DQorCQkJCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpDQor
CQkJCQkJZ290byBvdXQ7DQorCQkJCX0NCiAJCQl9DQorCQkJYmgtPmJfc3Rh
dGUgJj0gfigxVUwgPDwgQkhfTmV3KTsgLy8gbm90IHN0cmljdGx5IG5lZWRl
ZA0KIAkJfQ0KKwkJYmgtPmJfc3RhdGUgfD0gKDFVTCA8PCBCSF9VcHRvZGF0
ZSk7IC8qIGlzIFNNUCBzYWZlICovDQogDQogCQllcnIgPSAtRUZBVUxUOw0K
IAkJbGVuID0gYmxvY2tzaXplOw0KQEAgLTE1MzUsNiArMTU0NSw5IEBADQog
ICoNCiAgKiBicndfcGFnZSgpIGlzIFNNUC1zYWZlLCBhbHRob3VnaCBpdCdz
IGJlaW5nIGNhbGxlZCB3aXRoIHRoZQ0KICAqIGtlcm5lbCBsb2NrIGhlbGQg
LSBidXQgdGhlIGNvZGUgaXMgcmVhZHkuDQorICoNCisgKiBGSVhNRTogd2Ug
bmVlZCBhIHN3YXBwZXJfaW5vZGUtPmdldF9ibG9jayBmdW5jdGlvbiB0byBy
ZW1vdmUNCisgKiAgICAgICAgc29tZSBvZiB0aGUgYm1hcCBrbHVkZ2VzIGFu
ZCBpbnRlcmZhY2UgdWdsaW5lc3MgaGVyZS4NCiAgKi8NCiBpbnQgYnJ3X3Bh
Z2UoaW50IHJ3LCBzdHJ1Y3QgcGFnZSAqcGFnZSwga2Rldl90IGRldiwgaW50
IGJbXSwgaW50IHNpemUsIGludCBibWFwKQ0KIHsNCkBAIC0xNTYzLDcgKzE1
NzYsNyBAQA0KIAlkbyB7DQogCQlibG9jayA9ICooYisrKTsNCiANCi0JCWlm
IChmcmVzaCAmJiAoYmgtPmJfY291bnQgIT0gMCkpDQorCQlpZiAoZnJlc2gg
JiYgKGJoLT5iX2NvdW50ICE9IDEpKQ0KIAkJCUJVRygpOw0KIAkJaWYgKHJ3
ID09IFJFQUQpIHsNCiAJCQlpZiAoIWZyZXNoKQ0KQEAgLTE1NzQsMTAgKzE1
ODcsOCBAQA0KIAkJCX0gZWxzZSB7DQogCQkJCWlmIChibWFwICYmICFibG9j
aykNCiAJCQkJCUJVRygpOw0KLQkJCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShi
aCkpIHsNCisJCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQ0KIAkJCQkJ
YXJyW25yKytdID0gYmg7DQotCQkJCQliaC0+Yl9jb3VudCsrOw0KLQkJCQl9
DQogCQkJfQ0KIAkJfSBlbHNlIHsgLyogV1JJVEUgKi8NCiAJCQlpZiAoIWJo
LT5iX2Jsb2NrbnIpIHsNCkBAIC0xNTkxLDcgKzE2MDIsNiBAQA0KIAkJCXNl
dF9iaXQoQkhfVXB0b2RhdGUsICZiaC0+Yl9zdGF0ZSk7DQogCQkJc2V0X2Jp
dChCSF9EaXJ0eSwgJmJoLT5iX3N0YXRlKTsNCiAJCQlhcnJbbnIrK10gPSBi
aDsNCi0JCQliaC0+Yl9jb3VudCsrOw0KIAkJfQ0KIAkJYmggPSBiaC0+Yl90
aGlzX3BhZ2U7DQogCX0gd2hpbGUgKGJoICE9IGhlYWQpOw0KQEAgLTE2MTQs
MzAgKzE2MjQsNyBAQA0KIH0NCiANCiAvKg0KLSAqIFRoaXMgaXMgY2FsbGVk
IGJ5IGVuZF9yZXF1ZXN0KCkgd2hlbiBJL08gaGFzIGNvbXBsZXRlZC4NCi0g
Ki8NCi12b2lkIG1hcmtfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBidWZmZXJf
aGVhZCAqIGJoLCBpbnQgb24pDQotew0KLQlpZiAob24pIHsNCi0JCXN0cnVj
dCBidWZmZXJfaGVhZCAqdG1wID0gYmg7DQotCQlzdHJ1Y3QgcGFnZSAqcGFn
ZTsNCi0JCXNldF9iaXQoQkhfVXB0b2RhdGUsICZiaC0+Yl9zdGF0ZSk7DQot
CQkvKiBJZiBhIHBhZ2UgaGFzIGJ1ZmZlcnMgYW5kIGFsbCB0aGVzZSBidWZm
ZXJzIGFyZSB1cHRvZGF0ZSwNCi0JCSAqIHRoZW4gdGhlIHBhZ2UgaXMgdXB0
b2RhdGUuICovDQotCQlkbyB7DQotCQkJaWYgKCF0ZXN0X2JpdChCSF9VcHRv
ZGF0ZSwgJnRtcC0+Yl9zdGF0ZSkpDQotCQkJCXJldHVybjsNCi0JCQl0bXA9
dG1wLT5iX3RoaXNfcGFnZTsNCi0JCX0gd2hpbGUgKHRtcCAmJiB0bXAgIT0g
YmgpOw0KLQkJcGFnZSA9IG1lbV9tYXAgKyBNQVBfTlIoYmgtPmJfZGF0YSk7
DQotCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7DQotCQlyZXR1cm47DQotCX0N
Ci0JY2xlYXJfYml0KEJIX1VwdG9kYXRlLCAmYmgtPmJfc3RhdGUpOw0KLX0N
Ci0NCi0vKg0KLSAqIEdlbmVyaWMgInJlYWRwYWdlIiBmdW5jdGlvbiBmb3Ig
YmxvY2sgZGV2aWNlcyB0aGF0IGhhdmUgdGhlIG5vcm1hbA0KKyAqIEdlbmVy
aWMgInJlYWQgcGFnZSIgZnVuY3Rpb24gZm9yIGJsb2NrIGRldmljZXMgdGhh
dCBoYXZlIHRoZSBub3JtYWwNCiAgKiBibWFwIGZ1bmN0aW9uYWxpdHkuIFRo
aXMgaXMgbW9zdCBvZiB0aGUgYmxvY2sgZGV2aWNlIGZpbGVzeXN0ZW1zLg0K
ICAqIFJlYWRzIHRoZSBwYWdlIGFzeW5jaHJvbm91c2x5IC0tLSB0aGUgdW5s
b2NrX2J1ZmZlcigpIGFuZA0KICAqIG1hcmtfYnVmZmVyX3VwdG9kYXRlKCkg
ZnVuY3Rpb25zIHByb3BhZ2F0ZSBidWZmZXIgc3RhdGUgaW50byB0aGUNCkBA
IC0xNjQ3LDcgKzE2MzQsNyBAQA0KIHsNCiAJc3RydWN0IGRlbnRyeSAqZGVu
dHJ5ID0gZmlsZS0+Zl9kZW50cnk7DQogCXN0cnVjdCBpbm9kZSAqaW5vZGUg
PSBkZW50cnktPmRfaW5vZGU7DQotCXVuc2lnbmVkIGxvbmcgaWJsb2NrLCBw
aHlzX2Jsb2NrOw0KKwl1bnNpZ25lZCBsb25nIGlibG9jazsNCiAJc3RydWN0
IGJ1ZmZlcl9oZWFkICpiaCwgKmhlYWQsICphcnJbTUFYX0JVRl9QRVJfUEFH
RV07DQogCXVuc2lnbmVkIGludCBibG9ja3NpemUsIGJsb2NrczsNCiAJaW50
IG5yOw0KQEAgLTE2NjYsMzYgKzE2NTMsMjggQEANCiAJYmggPSBoZWFkOw0K
IAluciA9IDA7DQogCWRvIHsNCi0JCXBoeXNfYmxvY2sgPSBiaC0+Yl9ibG9j
a25yOw0KIAkJLyoNCiAJCSAqIGltcG9ydGFudCwgd2UgaGF2ZSB0byByZXRy
eSBidWZmZXJzIHRoYXQgYWxyZWFkeSBoYXZlDQotCQkgKiB0aGVpciBibnIg
Y2FjaGVkIGJ1dCBoYWQgYW4gSU8gZXJyb3IhDQorCQkgKiB0aGVpciBibnIg
Y2FjaGVkIGJ1dCBoYWQgYW4gSU8gZXJyb3IuDQogCQkgKi8NCiAJCWlmICgh
YnVmZmVyX3VwdG9kYXRlKGJoKSkgew0KLQkJCXVuc2lnbmVkIGxvbmcgcGh5
c19ibG9jayA9IGJoLT5iX2Jsb2NrbnI7DQotCQkJaWYgKCFidWZmZXJfYWxs
b2NhdGVkKGJoKSkgew0KLQkJCQlwaHlzX2Jsb2NrID0gaW5vZGUtPmlfb3At
PmJtYXAoaW5vZGUsIGlibG9jayk7DQotCQkJCWlmIChwaHlzX2Jsb2NrKSB7
DQotCQkJCQliaC0+Yl9kZXYgPSBpbm9kZS0+aV9kZXY7DQotCQkJCQliaC0+
Yl9ibG9ja25yID0gcGh5c19ibG9jazsNCi0JCQkJCXNldF9iaXQoQkhfQWxs
b2NhdGVkLCAmYmgtPmJfc3RhdGUpOw0KLQkJCQl9DQotCQkJfQ0KLQkJCQkJ
DQorCQkJaW5vZGUtPmlfb3AtPmdldF9ibG9jayhpbm9kZSxpYmxvY2ssYmgs
RlNfR0VUQkxPQ0tfTUFQKTsNCisJCQlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgp
KQ0KKwkJCQlCVUcoKTsgLy8gdGVtcG9yYXJ5IGRlYnVnZ2luZyBjaGVjaw0K
IAkJCS8qDQogCQkJICogdGhpcyBpcyBzYWZlIHRvIGRvIGJlY2F1c2Ugd2Ug
aG9sZCB0aGUgcGFnZSBsb2NrOg0KIAkJCSAqLw0KLQkJCWlmIChwaHlzX2Js
b2NrKSB7DQotCQkJCWluaXRfYnVmZmVyKGJoLCBlbmRfYnVmZmVyX2lvX2Fz
eW5jLCBOVUxMKTsNCi0JCQkJYXJyW25yXSA9IGJoOw0KLQkJCQliaC0+Yl9j
b3VudCsrOw0KLQkJCQlucisrOw0KLQkJCX0gZWxzZSB7DQorCQkJaWYgKGJ1
ZmZlcl9ob2xlKGJoKSkgew0KIAkJCQkvKg0KIAkJCQkgKiBmaWxlc3lzdGVt
ICdob2xlJyByZXByZXNlbnRzIHplcm8tY29udGVudHMuDQogCQkJCSAqLw0K
KwkJCQliaC0+Yl9zdGF0ZSB8PSAoMVVMIDw8IEJIX1VwdG9kYXRlKTsgLyog
c2FmZSAqLw0KIAkJCQltZW1zZXQoYmgtPmJfZGF0YSwgMCwgYmxvY2tzaXpl
KTsNCi0JCQkJc2V0X2JpdChCSF9VcHRvZGF0ZSwgJmJoLT5iX3N0YXRlKTsN
CisJCQl9IGVsc2Ugew0KKwkJCQlpbml0X2J1ZmZlcihiaCwgZW5kX2J1ZmZl
cl9pb19hc3luYywgTlVMTCk7DQorCQkJCWJoLT5iX2RldiA9IGlub2RlLT5p
X2RldjsNCisJCQkJYXJyW25yXSA9IGJoOw0KKwkJCQlucisrOw0KIAkJCX0N
CiAJCX0NCiAJCWlibG9jaysrOw0KQEAgLTE3NzMsOCArMTc1Miw4IEBADQog
LyoNCiAgKiBDYW4gdGhlIGJ1ZmZlciBiZSB0aHJvd24gb3V0Pw0KICAqLw0K
LSNkZWZpbmUgQlVGRkVSX0JVU1lfQklUUwkoKDE8PEJIX0RpcnR5KSB8ICgx
PDxCSF9Mb2NrKSB8ICgxPDxCSF9Qcm90ZWN0ZWQpKQ0KLSNkZWZpbmUgYnVm
ZmVyX2J1c3koYmgpCQkoKGJoKS0+Yl9jb3VudCB8ICgoYmgpLT5iX3N0YXRl
ICYgQlVGRkVSX0JVU1lfQklUUykpDQorI2RlZmluZSBCVUZGRVJfQlVTWV9C
SVRTICgoMTw8QkhfRGlydHkpIHwgKDE8PEJIX0xvY2spKQ0KKyNkZWZpbmUg
YnVmZmVyX2J1c3koYmgpCSAoKGJoKS0+Yl9jb3VudCB8ICgoYmgpLT5iX3N0
YXRlICYgQlVGRkVSX0JVU1lfQklUUykpDQogDQogLyoNCiAgKiB0cnlfdG9f
ZnJlZV9idWZmZXJzKCkgY2hlY2tzIGlmIGFsbCB0aGUgYnVmZmVycyBvbiB0
aGlzIHBhcnRpY3VsYXIgcGFnZQ0KQEAgLTE4MTksNyArMTc5OCw3IEBADQog
CXJldHVybiAxOw0KIA0KIGJ1c3lfYnVmZmVyX3BhZ2U6DQotCS8qIFVoaHVo
LCBzdGFyIHdyaXRlYmFjayBzbyB0aGF0IHdlIGRvbid0IGVuZCB1cCB3aXRo
IGFsbCBkaXJ0eSBwYWdlcyAqLw0KKwkvKiBVaGh1aCwgc3RhcnQgd3JpdGVi
YWNrIHNvIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIHdpdGggYWxsIGRpcnR5IHBh
Z2VzICovDQogCXRvb19tYW55X2RpcnR5X2J1ZmZlcnMgPSAxOw0KIAl3YWtl
dXBfYmRmbHVzaCgwKTsNCiAJcmV0dXJuIDA7DQpAQCAtMTgzMSw3ICsxODEw
LDYgQEANCiB7DQogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOw0KIAlpbnQg
Zm91bmQgPSAwLCBsb2NrZWQgPSAwLCBkaXJ0eSA9IDAsIHVzZWQgPSAwLCBs
YXN0dXNlZCA9IDA7DQotCWludCBwcm90ZWN0ZWQgPSAwOw0KIAlpbnQgbmxp
c3Q7DQogCXN0YXRpYyBjaGFyICpidWZfdHlwZXNbTlJfTElTVF0gPSB7IkNM
RUFOIiwiTE9DS0VEIiwiRElSVFkifTsNCiANCkBAIC0xODQxLDcgKzE4MTks
NyBAQA0KIAlwcmludGsoIkJ1ZmZlciBoYXNoZWQ6ICAgJTZkXG4iLG5yX2hh
c2hlZF9idWZmZXJzKTsNCiANCiAJZm9yKG5saXN0ID0gMDsgbmxpc3QgPCBO
Ul9MSVNUOyBubGlzdCsrKSB7DQotCSAgZm91bmQgPSBsb2NrZWQgPSBkaXJ0
eSA9IHVzZWQgPSBsYXN0dXNlZCA9IHByb3RlY3RlZCA9IDA7DQorCSAgZm91
bmQgPSBsb2NrZWQgPSBkaXJ0eSA9IHVzZWQgPSBsYXN0dXNlZCA9IDA7DQog
CSAgYmggPSBscnVfbGlzdFtubGlzdF07DQogCSAgaWYoIWJoKSBjb250aW51
ZTsNCiANCkBAIC0xODQ5LDggKzE4MjcsNiBAQA0KIAkJZm91bmQrKzsNCiAJ
CWlmIChidWZmZXJfbG9ja2VkKGJoKSkNCiAJCQlsb2NrZWQrKzsNCi0JCWlm
IChidWZmZXJfcHJvdGVjdGVkKGJoKSkNCi0JCQlwcm90ZWN0ZWQrKzsNCiAJ
CWlmIChidWZmZXJfZGlydHkoYmgpKQ0KIAkJCWRpcnR5Kys7DQogCQlpZiAo
YmgtPmJfY291bnQpDQpAQCAtMTg1OCw5ICsxODM0LDkgQEANCiAJCWJoID0g
YmgtPmJfbmV4dF9mcmVlOw0KIAkgIH0gd2hpbGUgKGJoICE9IGxydV9saXN0
W25saXN0XSk7DQogCSAgcHJpbnRrKCIlOHM6ICVkIGJ1ZmZlcnMsICVkIHVz
ZWQgKGxhc3Q9JWQpLCAiDQotCQkgIiVkIGxvY2tlZCwgJWQgcHJvdGVjdGVk
LCAlZCBkaXJ0eVxuIiwNCisJCSAiJWQgbG9ja2VkLCAlZCBkaXJ0eVxuIiwN
CiAJCSBidWZfdHlwZXNbbmxpc3RdLCBmb3VuZCwgdXNlZCwgbGFzdHVzZWQs
DQotCQkgbG9ja2VkLCBwcm90ZWN0ZWQsIGRpcnR5KTsNCisJCSBsb2NrZWQs
IGRpcnR5KTsNCiAJfTsNCiB9DQogDQotLS0gbGludXgvZnMvaW5vZGUuYy5v
cmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAgMTk5OQ0KKysrIGxpbnV4L2ZzL2lu
b2RlLmMJU2F0IEp1biAyNiAxNToyOTozOCAxOTk5DQpAQCAtNzc4LDggKzc3
OCwxNCBAQA0KIA0KIGludCBibWFwKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBp
bnQgYmxvY2spDQogew0KLQlpZiAoaW5vZGUtPmlfb3AgJiYgaW5vZGUtPmlf
b3AtPmJtYXApDQotCQlyZXR1cm4gaW5vZGUtPmlfb3AtPmJtYXAoaW5vZGUs
IGJsb2NrKTsNCisJc3RydWN0IGJ1ZmZlcl9oZWFkIHRtcDsNCisNCisJaWYg
KGlub2RlLT5pX29wICYmIGlub2RlLT5pX29wLT5nZXRfYmxvY2spIHsNCisJ
CXRtcC5iX3N0YXRlID0gMDsNCisJCXRtcC5iX2Jsb2NrbnIgPSAwOw0KKwkJ
aW5vZGUtPmlfb3AtPmdldF9ibG9jayhpbm9kZSwgYmxvY2ssICZ0bXAsIEZT
X0dFVEJMT0NLX01BUCk7DQorCQlyZXR1cm4gdG1wLmJfYmxvY2tucjsNCisJ
fQ0KIAlyZXR1cm4gMDsNCiB9DQogDQotLS0gbGludXgvZnMvYmFkX2lub2Rl
LmMub3JpZwlTYXQgSnVuIDI2IDE0OjU0OjMwIDE5OTkNCisrKyBsaW51eC9m
cy9iYWRfaW5vZGUuYwlTYXQgSnVuIDI2IDE1OjI5OjM4IDE5OTkNCkBAIC02
MCw3ICs2MCw3IEBADQogCUVJT19FUlJPUiwJCS8qIHJlbmFtZSAqLw0KIAlF
SU9fRVJST1IsCQkvKiByZWFkbGluayAqLw0KIAliYWRfZm9sbG93X2xpbmss
CS8qIGZvbGxvd19saW5rICovDQotCUVJT19FUlJPUiwJCS8qIGJtYXAgKi8N
CisJRUlPX0VSUk9SLAkJLyogZ2V0X2Jsb2NrICovDQogCUVJT19FUlJPUiwJ
CS8qIHJlYWRwYWdlICovDQogCUVJT19FUlJPUiwJCS8qIHdyaXRlcGFnZSAq
Lw0KIAlFSU9fRVJST1IsCQkvKiBmbHVzaHBhZ2UgKi8NCi0tLSBsaW51eC9m
cy9kZXZpY2VzLmMub3JpZwlTYXQgSnVuIDI2IDE0OjU0OjMwIDE5OTkNCisr
KyBsaW51eC9mcy9kZXZpY2VzLmMJU2F0IEp1biAyNiAxNToyOTozOCAxOTk5
DQpAQCAtMjc3LDcgKzI3Nyw3IEBADQogCU5VTEwsCQkJLyogbWtub2QgKi8N
CiAJTlVMTCwJCQkvKiByZW5hbWUgKi8NCiAJTlVMTCwJCQkvKiByZWFkbGlu
ayAqLw0KLQlOVUxMLAkJCS8qIGJtYXAgKi8NCisJTlVMTCwJCQkvKiBnZXRf
YmxvY2sgKi8NCiAJTlVMTCwJCQkvKiByZWFkcGFnZSAqLw0KIAlOVUxMLAkJ
CS8qIHdyaXRlcGFnZSAqLw0KIAlOVUxMLAkJCS8qIGZsdXNocGFnZSAqLw0K
QEAgLTMzMyw3ICszMzMsNyBAQA0KIAlOVUxMLAkJCS8qIG1rbm9kICovDQog
CU5VTEwsCQkJLyogcmVuYW1lICovDQogCU5VTEwsCQkJLyogcmVhZGxpbmsg
Ki8NCi0JTlVMTCwJCQkvKiBibWFwICovDQorCU5VTEwsCQkJLyogZ2V0X2Js
b2NrICovDQogCU5VTEwsCQkJLyogcmVhZHBhZ2UgKi8NCiAJTlVMTCwJCQkv
KiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJCQkvKiBmbHVzaHBhZ2UgKi8NCi0t
LSBsaW51eC9mcy9maWZvLmMub3JpZwlTYXQgSnVuIDI2IDE0OjU0OjMwIDE5
OTkNCisrKyBsaW51eC9mcy9maWZvLmMJU2F0IEp1biAyNiAxNToyOTozOCAx
OTk5DQpAQCAtMTc5LDcgKzE3OSw3IEBADQogCU5VTEwsCQkJLyogbWtub2Qg
Ki8NCiAJTlVMTCwJCQkvKiByZW5hbWUgKi8NCiAJTlVMTCwJCQkvKiByZWFk
bGluayAqLw0KLQlOVUxMLAkJCS8qIGJtYXAgKi8NCisJTlVMTCwJCQkvKiBn
ZXRfYmxvY2sgKi8NCiAJTlVMTCwJCQkvKiByZWFkcGFnZSAqLw0KIAlOVUxM
LAkJCS8qIHdyaXRlcGFnZSAqLw0KIAlOVUxMLAkJCS8qIGZsdXNocGFnZSAq
Lw0KLS0tIGxpbnV4L2ZzL3BpcGUuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6
MzAgMTk5OQ0KKysrIGxpbnV4L2ZzL3BpcGUuYwlTYXQgSnVuIDI2IDE1OjI5
OjM4IDE5OTkNCkBAIC00NjEsNyArNDYxLDcgQEANCiAJTlVMTCwJCQkvKiBt
a25vZCAqLw0KIAlOVUxMLAkJCS8qIHJlbmFtZSAqLw0KIAlOVUxMLAkJCS8q
IHJlYWRsaW5rICovDQotCU5VTEwsCQkJLyogYm1hcCAqLw0KKwlOVUxMLAkJ
CS8qIGdldF9ibG9jayAqLw0KIAlOVUxMLAkJCS8qIHJlYWRwYWdlICovDQog
CU5VTEwsCQkJLyogd3JpdGVwYWdlICovDQogCU5VTEwsCQkJLyogZmx1c2hw
YWdlICovDQotLS0gbGludXgvZnMvYmluZm10X2FvdXQuYy5vcmlnCVNhdCBK
dW4gMjYgMTQ6NTQ6MzAgMTk5OQ0KKysrIGxpbnV4L2ZzL2JpbmZtdF9hb3V0
LmMJU2F0IEp1biAyNiAxNToyOTozOCAxOTk5DQpAQCAtMzIzLDcgKzMyMyw3
IEBADQogDQogCWlmIChOX01BR0lDKGV4KSA9PSBaTUFHSUMgJiYgZXguYV90
ZXh0ICYmDQogCSAgICBicHJtLT5kZW50cnktPmRfaW5vZGUtPmlfb3AgJiYN
Ci0JICAgIGJwcm0tPmRlbnRyeS0+ZF9pbm9kZS0+aV9vcC0+Ym1hcCAmJg0K
KwkgICAgYnBybS0+ZGVudHJ5LT5kX2lub2RlLT5pX29wLT5nZXRfYmxvY2sg
JiYNCiAJICAgIChmZF9vZmZzZXQgPCBicHJtLT5kZW50cnktPmRfaW5vZGUt
Pmlfc2ItPnNfYmxvY2tzaXplKSkgew0KIAkJcHJpbnRrKEtFUk5fTk9USUNF
ICJOX1RYVE9GRiA8IEJMT0NLX1NJWkUuIFBsZWFzZSBjb252ZXJ0IGJpbmFy
eS5cbiIpOw0KIAkJcmV0dXJuIC1FTk9FWEVDOw0KLS0tIGxpbnV4L2ZzL2lv
Y3RsLmMub3JpZwlTYXQgSnVuIDI2IDE0OjU0OjMwIDE5OTkNCisrKyBsaW51
eC9mcy9pb2N0bC5jCVNhdCBKdW4gMjYgMTU6Mjk6MzggMTk5OQ0KQEAgLTE4
LDE0ICsxOCwyMiBAQA0KIA0KIAlzd2l0Y2ggKGNtZCkgew0KIAkJY2FzZSBG
SUJNQVA6DQorCQl7DQorCQkJc3RydWN0IGJ1ZmZlcl9oZWFkIHRtcDsNCisN
CiAJCQlpZiAoaW5vZGUtPmlfb3AgPT0gTlVMTCkNCiAJCQkJcmV0dXJuIC1F
QkFERjsNCi0JCSAgICAJaWYgKGlub2RlLT5pX29wLT5ibWFwID09IE5VTEwp
DQorCQkgICAgCWlmIChpbm9kZS0+aV9vcC0+Z2V0X2Jsb2NrID09IE5VTEwp
DQogCQkJCXJldHVybiAtRUlOVkFMOw0KIAkJCWlmICgoZXJyb3IgPSBnZXRf
dXNlcihibG9jaywgKGludCAqKSBhcmcpKSAhPSAwKQ0KIAkJCQlyZXR1cm4g
ZXJyb3I7DQotCQkJYmxvY2sgPSBpbm9kZS0+aV9vcC0+Ym1hcChpbm9kZSxi
bG9jayk7DQotCQkJcmV0dXJuIHB1dF91c2VyKGJsb2NrLCAoaW50ICopIGFy
Zyk7DQorDQorCQkJdG1wLmJfc3RhdGUgPSAwOw0KKwkJCXRtcC5iX2Jsb2Nr
bnIgPSAwOw0KKwkJCWlub2RlLT5pX29wLT5nZXRfYmxvY2soaW5vZGUsIGJs
b2NrLA0KKwkJCQkJCQkmdG1wLCBGU19HRVRCTE9DS19NQVApOw0KKwkJCXJl
dHVybiBwdXRfdXNlcih0bXAuYl9ibG9ja25yLCAoaW50ICopIGFyZyk7DQor
CQl9DQogCQljYXNlIEZJR0VUQlNaOg0KIAkJCWlmIChpbm9kZS0+aV9zYiA9
PSBOVUxMKQ0KIAkJCQlyZXR1cm4gLUVCQURGOw0KLS0tIGxpbnV4L2tlcm5l
bC9zeXNjdGwuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAgMTk5OQ0KKysr
IGxpbnV4L2tlcm5lbC9zeXNjdGwuYwlTYXQgSnVuIDI2IDE1OjI5OjM4IDE5
OTkNCkBAIC0xMjAsNyArMTIwLDcgQEANCiAJTlVMTCwJCS8qIHJlbmFtZSAq
Lw0KIAlOVUxMLAkJLyogcmVhZGxpbmsgKi8NCiAJTlVMTCwJCS8qIGZvbGxv
d19saW5rICovDQotCU5VTEwsCQkvKiBibWFwICovDQorCU5VTEwsCQkvKiBn
ZXRfYmxvY2sgKi8NCiAJTlVMTCwJCS8qIHJlYWRwYWdlICovDQogCU5VTEws
CQkvKiB3cml0ZXBhZ2UgKi8NCiAJTlVMTCwJCS8qIGZsdXNocGFnZSAqLw0K
LS0tIGxpbnV4L21tL3N3YXBfc3RhdGUuYy5vcmlnCVNhdCBKdW4gMjYgMTQ6
NTQ6MzAgMTk5OQ0KKysrIGxpbnV4L21tL3N3YXBfc3RhdGUuYwlTYXQgSnVu
IDI2IDE1OjI5OjM4IDE5OTkNCkBAIC0zOSw3ICszOSw3IEBADQogCU5VTEws
CQkJCS8qIHJlbmFtZSAqLw0KIAlOVUxMLAkJCQkvKiByZWFkbGluayAqLw0K
IAlOVUxMLAkJCQkvKiBmb2xsb3dfbGluayAqLw0KLQlOVUxMLAkJCQkvKiBi
bWFwICovDQorCU5VTEwsCQkJCS8qIGdldF9ibG9jayAqLw0KIAlOVUxMLAkJ
CQkvKiByZWFkcGFnZSAqLw0KIAlOVUxMLAkJCQkvKiB3cml0ZXBhZ2UgKi8N
CiAJYmxvY2tfZmx1c2hwYWdlLAkJLyogZmx1c2hwYWdlICovDQotLS0gbGlu
dXgvbW0vcGFnZV9pby5jLm9yaWcJU2F0IEp1biAyNiAxNDo1NDozMCAxOTk5
DQorKysgbGludXgvbW0vcGFnZV9pby5jCVNhdCBKdW4gMjYgMTU6Mjk6Mzgg
MTk5OQ0KQEAgLTk5LDcgKzk5LDcgQEANCiAJfSBlbHNlIGlmIChwLT5zd2Fw
X2ZpbGUpIHsNCiAJCXN0cnVjdCBpbm9kZSAqc3dhcGYgPSBwLT5zd2FwX2Zp
bGUtPmRfaW5vZGU7DQogCQlpbnQgaTsNCi0JCWlmIChzd2FwZi0+aV9vcC0+
Ym1hcCA9PSBOVUxMDQorCQlpZiAoc3dhcGYtPmlfb3AtPmdldF9ibG9jayA9
PSBOVUxMDQogCQkJJiYgc3dhcGYtPmlfb3AtPnNtYXAgIT0gTlVMTCl7DQog
CQkJLyoNCiAJCQkJV2l0aCBNUy1ET1MsIHdlIHVzZSBtc2Rvc19zbWFwIHdo
aWNoIHJldHVybnMNCkBAIC0xMTAsNyArMTEwLDcgQEANCiAJCQkJSXQgc291
bmRzIGxpa2UgbGxfcndfc3dhcF9maWxlIGRlZmluZWQNCiAJCQkJaXRzIG9w
ZXJhdGlvbiBzaXplIChzZWN0b3Igc2l6ZSkgYmFzZWQgb24NCiAJCQkJUEFH
RV9TSVpFIGFuZCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byByZWFkLg0KLQkJ
CQlTbyB1c2luZyBibWFwIG9yIHNtYXAgc2hvdWxkIHdvcmsgZXZlbiBpZg0K
KwkJCQlTbyB1c2luZyBnZXRfYmxvY2sgb3Igc21hcCBzaG91bGQgd29yayBl
dmVuIGlmDQogCQkJCXNtYXAgd2lsbCByZXF1aXJlIG1vcmUgYmxvY2tzLg0K
IAkJCSovDQogCQkJaW50IGo7DQotLS0gbGludXgvaW5jbHVkZS9saW51eC9m
cy5oLm9yaWcJU2F0IEp1biAyNiAxNDo1NDozMCAxOTk5DQorKysgbGludXgv
aW5jbHVkZS9saW51eC9mcy5oCVNhdCBKdW4gMjYgMTU6Mjk6MzggMTk5OQ0K
QEAgLTE4OCw5ICsxODgsOSBAQA0KICNkZWZpbmUgQkhfRGlydHkJMQkvKiAx
IGlmIHRoZSBidWZmZXIgaXMgZGlydHkgKi8NCiAjZGVmaW5lIEJIX0xvY2sJ
CTIJLyogMSBpZiB0aGUgYnVmZmVyIGlzIGxvY2tlZCAqLw0KICNkZWZpbmUg
QkhfUmVxCQkzCS8qIDAgaWYgdGhlIGJ1ZmZlciBoYXMgYmVlbiBpbnZhbGlk
YXRlZCAqLw0KLSNkZWZpbmUgQkhfQWxsb2NhdGVkCTQJLyogMSBpZiB0aGUg
YnVmZmVyIGhhcyBhbGxvY2F0ZWQgYmFja2luZyBzdG9yZSAqLw0KLSNkZWZp
bmUgQkhfUHJvdGVjdGVkCTYJLyogMSBpZiB0aGUgYnVmZmVyIGlzIHByb3Rl
Y3RlZCAqLw0KLQ0KKyNkZWZpbmUgQkhfTWFwcGVkCTQJLyogYl9ibG9ja25y
IGlzIGEgY2FjaGVkIGJsb2NrIG1hcHBpbmcgdmFsdWUgKi8NCisjZGVmaW5l
IEJIX05ldwkJNQkvKiBidWZmZXIgZ290IGZyZXNobHkgYWxsb2NhdGVkIGJ5
IHRoZSBmcyAqLw0KKyNkZWZpbmUgQkhfSG9sZQkJNgkvKiBidWZmZXIgaXMg
YW4gZnMgaG9sZSAqLw0KIC8qDQogICogVHJ5IHRvIGtlZXAgdGhlIG1vc3Qg
Y29tbW9ubHkgdXNlZCBmaWVsZHMgaW4gc2luZ2xlIGNhY2hlIGxpbmVzICgx
Ng0KICAqIGJ5dGVzKSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiAgVGhpcyBv
cmRlcmluZyBzaG91bGQgYmUNCkBAIC0yNDIsOCArMjQyLDkgQEANCiAjZGVm
aW5lIGJ1ZmZlcl9kaXJ0eShiaCkJX19idWZmZXJfc3RhdGUoYmgsRGlydHkp
DQogI2RlZmluZSBidWZmZXJfbG9ja2VkKGJoKQlfX2J1ZmZlcl9zdGF0ZShi
aCxMb2NrKQ0KICNkZWZpbmUgYnVmZmVyX3JlcShiaCkJCV9fYnVmZmVyX3N0
YXRlKGJoLFJlcSkNCi0jZGVmaW5lIGJ1ZmZlcl9hbGxvY2F0ZWQoYmgpCV9f
YnVmZmVyX3N0YXRlKGJoLEFsbG9jYXRlZCkNCi0jZGVmaW5lIGJ1ZmZlcl9w
cm90ZWN0ZWQoYmgpCV9fYnVmZmVyX3N0YXRlKGJoLFByb3RlY3RlZCkNCisj
ZGVmaW5lIGJ1ZmZlcl9tYXBwZWQoYmgpCV9fYnVmZmVyX3N0YXRlKGJoLE1h
cHBlZCkNCisjZGVmaW5lIGJ1ZmZlcl9uZXcoYmgpCQlfX2J1ZmZlcl9zdGF0
ZShiaCxOZXcpDQorI2RlZmluZSBidWZmZXJfaG9sZShiaCkJCV9fYnVmZmVy
X3N0YXRlKGJoLEhvbGUpDQogDQogI2RlZmluZSBidWZmZXJfcGFnZShiaCkJ
CShtZW1fbWFwICsgTUFQX05SKChiaCktPmJfZGF0YSkpDQogI2RlZmluZSB0
b3VjaF9idWZmZXIoYmgpCXNldF9iaXQoUEdfcmVmZXJlbmNlZCwgJmJ1ZmZl
cl9wYWdlKGJoKS0+ZmxhZ3MpDQpAQCAtNTg1LDYgKzU4Niw5IEBADQogCWlu
dCAoKmxvY2spIChzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xv
Y2sgKik7DQogfTsNCiANCisjZGVmaW5lIEZTX0dFVEJMT0NLX01BUCAwDQor
I2RlZmluZSBGU19HRVRCTE9DS19ORVcgMQ0KKw0KIHN0cnVjdCBpbm9kZV9v
cGVyYXRpb25zIHsNCiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGRlZmF1
bHRfZmlsZV9vcHM7DQogCWludCAoKmNyZWF0ZSkgKHN0cnVjdCBpbm9kZSAq
LHN0cnVjdCBkZW50cnkgKixpbnQpOw0KQEAgLTYwMSwxMyArNjA1LDE5IEBA
DQogCXN0cnVjdCBkZW50cnkgKiAoKmZvbGxvd19saW5rKSAoc3RydWN0IGRl
bnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVuc2lnbmVkIGludCk7DQogCS8q
DQogCSAqIHRoZSBvcmRlciBvZiB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIHRo
ZSBWRlMgdGVtcGxhdGUgaGFzIGJlZW4NCi0JICogY2hhbmdlZCBiZWNhdXNl
IFNNUCBsb2NraW5nIGhhcyBjaGFuZ2VkOiBmcm9tIG5vdyBvbiBhbGwgYm1h
cCwNCisJICogY2hhbmdlZCBiZWNhdXNlIFNNUCBsb2NraW5nIGhhcyBjaGFu
Z2VkOiBmcm9tIG5vdyBvbiBhbGwgZ2V0X2Jsb2NrLA0KIAkgKiByZWFkcGFn
ZSwgd3JpdGVwYWdlIGFuZCBmbHVzaHBhZ2UgZnVuY3Rpb25zIGFyZSBzdXBw
b3NlZCB0byBkbw0KIAkgKiB3aGF0ZXZlciBsb2NraW5nIHRoZXkgbmVlZCB0
byBnZXQgcHJvcGVyIFNNUCBvcGVyYXRpb24gLSBmb3INCiAJICogbm93IGlu
IG1vc3QgY2FzZXMgdGhpcyBtZWFucyBhIGxvY2svdW5sb2NrX2tlcm5lbCBh
dCBlbnRyeS9leGl0Lg0KIAkgKiBbVGhlIG5ldyBvcmRlciBpcyBhbHNvIHNs
aWdodGx5IG1vcmUgbG9naWNhbCA6KV0NCiAJICovDQotCWludCAoKmJtYXAp
IChzdHJ1Y3QgaW5vZGUgKixpbnQpOw0KKwkvKg0KKwkgKiBHZW5lcmljIGJs
b2NrIGFsbG9jYXRvciBleHBvcnRlZCBieSB0aGUgbG93bGV2ZWwgZnMuIEFs
bCBtZXRhZGF0YQ0KKwkgKiBkZXRhaWxzIGFyZSBoYW5kbGVkIGJ5IHRoZSBs
b3dsZXZlbCBmcywgYWxsICdsb2dpY2FsIGRhdGEgY29udGVudCcNCisJICog
ZGV0YWlscyBhcmUgaGFuZGxlZCBieSB0aGUgaGlnaGxldmVsIGJsb2NrIGxh
eWVyLg0KKwkgKi8NCisJaW50ICgqZ2V0X2Jsb2NrKSAoc3RydWN0IGlub2Rl
ICosIGxvbmcsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOw0KKw0KIAlp
bnQgKCpyZWFkcGFnZSkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICop
Ow0KIAlpbnQgKCp3cml0ZXBhZ2UpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qg
cGFnZSAqKTsNCiAJaW50ICgqZmx1c2hwYWdlKSAoc3RydWN0IGlub2RlICos
IHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcpOw0KQEAgLTc1MSwxMiAr
NzYxLDI4IEBADQogI2RlZmluZSBCVUZfRElSVFkJMgkvKiBEaXJ0eSBidWZm
ZXJzLCBub3QgeWV0IHNjaGVkdWxlZCBmb3Igd3JpdGUgKi8NCiAjZGVmaW5l
IE5SX0xJU1QJCTMNCiANCi12b2lkIG1hcmtfYnVmZmVyX3VwdG9kYXRlKHN0
cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOw0KKy8qDQorICogVGhpcyBpcyBj
YWxsZWQgYnkgYmgtPmJfZW5kX2lvKCkgaGFuZGxlcnMgd2hlbiBJL08gaGFz
IGNvbXBsZXRlZC4NCisgKi8NCitleHRlcm4gaW5saW5lIHZvaWQgbWFya19i
dWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgsIGludCBv
bikNCit7DQorCWlmIChvbikNCisJCXNldF9iaXQoQkhfVXB0b2RhdGUsICZi
aC0+Yl9zdGF0ZSk7DQorCWVsc2UNCisJCWNsZWFyX2JpdChCSF9VcHRvZGF0
ZSwgJmJoLT5iX3N0YXRlKTsNCit9DQorDQorI2RlZmluZSBhdG9taWNfc2V0
X2J1ZmZlcl9jbGVhbihiaCkgdGVzdF9hbmRfY2xlYXJfYml0KEJIX0RpcnR5
LCAmKGJoKS0+Yl9zdGF0ZSkNCisNCitleHRlcm4gaW5saW5lIHZvaWQgX19t
YXJrX2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQ0KK3sN
CisJcmVmaWxlX2J1ZmZlcihiaCk7DQorfQ0KIA0KIGV4dGVybiBpbmxpbmUg
dm9pZCBtYXJrX2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBi
aCkNCiB7DQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQkhfRGlydHksICZi
aC0+Yl9zdGF0ZSkpDQotCQlyZWZpbGVfYnVmZmVyKGJoKTsNCisJaWYgKGF0
b21pY19zZXRfYnVmZmVyX2NsZWFuKGJoKSkNCisJCV9fbWFya19idWZmZXJf
Y2xlYW4oYmgpOw0KIH0NCiANCiBleHRlcm4gdm9pZCBGQVNUQ0FMTChfX21h
cmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBm
bGFnKSk7DQpAQCAtODcyLDE2ICs4OTgsMTIgQEANCiANCiBleHRlcm4gaW50
IGJyd19wYWdlKGludCwgc3RydWN0IHBhZ2UgKiwga2Rldl90LCBpbnQgW10s
IGludCwgaW50KTsNCiANCi10eXBlZGVmIGxvbmcgKCp3cml0ZXBhZ2VfdCko
c3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqKTsNCi10eXBlZGVmIGludCAo
KmZzX2dldGJsb2NrX3QpKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25n
LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQgaW50KTsNCi0NCi0j
ZGVmaW5lIEZTX0dFVEJMS19BTExPQ0FURQkxDQotI2RlZmluZSBGU19HRVRC
TEtfVVBEQVRFCTINCit0eXBlZGVmIGludCAoKndyaXRlcGFnZV90KShzdHJ1
Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCBjb25zdCBjaGFyICopOw0KIA0KIC8qIEdlbmVyaWMgYnVm
ZmVyIGhhbmRsaW5nIGZvciBibG9jayBmaWxlc3lzdGVtcy4uICovDQogZXh0
ZXJuIGludCBibG9ja19yZWFkX2Z1bGxfcGFnZShzdHJ1Y3QgZmlsZSAqLCBz
dHJ1Y3QgcGFnZSAqKTsNCi1leHRlcm4gaW50IGJsb2NrX3dyaXRlX2Z1bGxf
cGFnZSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgZnNfZ2V0Ymxv
Y2tfdCk7DQotZXh0ZXJuIGludCBibG9ja193cml0ZV9wYXJ0aWFsX3BhZ2Ug
KHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIgKiwgZnNfZ2V0YmxvY2tfdCk7
DQorZXh0ZXJuIGludCBibG9ja193cml0ZV9mdWxsX3BhZ2UgKHN0cnVjdCBm
aWxlICosIHN0cnVjdCBwYWdlICopOw0KK2V4dGVybiBpbnQgYmxvY2tfd3Jp
dGVfcGFydGlhbF9wYWdlIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAq
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyICop
Ow0KIGV4dGVybiBpbnQgYmxvY2tfZmx1c2hwYWdlKHN0cnVjdCBpbm9kZSAq
LCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nKTsNCiANCiBleHRlcm4g
aW50IGdlbmVyaWNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2
bV9hcmVhX3N0cnVjdCAqKTsNCi0tLSBsaW51eC9pbmNsdWRlL2xpbnV4L2V4
dDJfZnMuaC5vcmlnCVNhdCBKdW4gMjYgMTQ6NTQ6MzAgMTk5OQ0KKysrIGxp
bnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCVNhdCBKdW4gMjYgMTU6Mjk6
MzkgMTk5OQ0KQEAgLTU1Myw3ICs1NTMsOCBAQA0KIGV4dGVybiB2b2lkIGV4
dDJfY2hlY2tfaW5vZGVzX2JpdG1hcCAoc3RydWN0IHN1cGVyX2Jsb2NrICop
Ow0KIA0KIC8qIGlub2RlLmMgKi8NCi1leHRlcm4gaW50IGV4dDJfYm1hcCAo
c3RydWN0IGlub2RlICosIGludCk7DQorZXh0ZXJuIGxvbmcgZXh0Ml9ibWFw
IChzdHJ1Y3QgaW5vZGUgKiwgbG9uZyk7DQorZXh0ZXJuIGludCBleHQyX2dl
dF9ibG9jayAoc3RydWN0IGlub2RlICosIGxvbmcsIHN0cnVjdCBidWZmZXJf
aGVhZCAqLCBpbnQpOw0KIA0KIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQg
KiBleHQyX2dldGJsayAoc3RydWN0IGlub2RlICosIGxvbmcsIGludCwgaW50
ICopOw0KIGV4dGVybiBpbnQgZXh0Ml9nZXRibGtfYmxvY2sgKHN0cnVjdCBp
bm9kZSAqLCBsb25nLCBpbnQsIGludCAqLCBpbnQgKik7DQotLS0gbGludXgv
ZHJpdmVycy9ibG9jay9yYWlkNS5jLm9yaWcJU2F0IEp1biAyNiAxNDo1Njo0
NyAxOTk5DQorKysgbGludXgvZHJpdmVycy9ibG9jay9yYWlkNS5jCVNhdCBK
dW4gMjYgMTU6Mjk6MzkgMTk5OQ0KQEAgLTU5NCw3ICs1OTQsNyBAQA0KIAli
aC0+Yl9yZGV2CT0gcmFpZF9jb25mLT5kaXNrc1tpXS5kZXY7DQogCWJoLT5i
X3JzZWN0b3IgICA9IHNoLT5zZWN0b3I7DQogDQotCWJoLT5iX3N0YXRlCT0g
KDEgPDwgQkhfUmVxKSB8ICgxIDw8IEJIX0FsbG9jYXRlZCk7DQorCWJoLT5i
X3N0YXRlCT0gKDEgPDwgQkhfUmVxKSB8ICgxIDw8IEJIX01hcHBlZCk7DQog
CWJoLT5iX3NpemUJPSBzaC0+c2l6ZTsNCiAJYmgtPmJfbGlzdAk9IEJVRl9M
T0NLRUQ7DQogfQ0K
---1247997369-1480143156-930401062=:23982--

-
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/