[patch] 'multimedia latency patch', lowlatency-2.2.10-M6

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Sat, 31 Jul 1999 22:00:44 +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-159415807-933451244=:25534
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Sat, 31 Jul 1999, Benno Senoner wrote:

> as Roger Larrson suspected, there are some parts in the kernel
> which have a too long execution path:
> On his PPro with 512MB RAM, d_lookup takes up to 80ms to execute !

yes. I've attached a patch that is supposed to make things much better.
There are numerous places in the kernel that do not time-limit scheduling
latencies. [Some of my solutions are too 'heavy', and some places are
identified but not yet fixed - i'm still working on this.]

if you could test various workloads with the lowlatency-2.2.10-M6 patch
applied that would be great - i might have missed some places.

[the reason why you see bigger latencies with more memory is the dcache
and prune_dcache() - we often iterate over all dentries, which can be in
the several thousands. It's not easy to fix this, but i've got something
already. There are lots of other, more subtle latencies within the
kernel.]

i'm developing this patch under 2.2.10 so that people can test things out
easily, but i'll port this to 2.3 once latencies have reached an adequate
level. I've killed all latencies that were bigger than 1msec on my box.

-- mingo

---1247997369-159415807-933451244=:25534
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="lowlatency-2.2.10-M6"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.990731220044.25534E@chiara.csoma.elte.hu>
Content-Description:

LS0tIGxpbnV4L2ZzL3Byb2MvYXJyYXkuYy5vcmlnCU1vbiBKdWwgMjYgMTI6
Mzk6MTAgMTk5OQ0KKysrIGxpbnV4L2ZzL3Byb2MvYXJyYXkuYwlTYXQgSnVs
IDMxIDIyOjMwOjU5IDE5OTkNCkBAIC05NjMsNiArOTYzLDggQEANCiAJZG8g
ew0KIAkJcHRlX3QgcGFnZSA9ICpwdGU7DQogDQorCQljb25kaXRpb25hbF9z
Y2hlZHVsZSgpOw0KKw0KIAkJYWRkcmVzcyArPSBQQUdFX1NJWkU7DQogCQlw
dGUrKzsNCiAJCWlmIChwdGVfbm9uZShwYWdlKSkNCi0tLSBsaW51eC9mcy9l
eHQyL25hbWVpLmMub3JpZwlGcmkgTWF5IDE0IDA4OjI1OjU4IDE5OTkNCisr
KyBsaW51eC9mcy9leHQyL25hbWVpLmMJU2F0IEp1bCAzMSAyMjozMTowMCAx
OTk5DQpAQCAtMTQ3LDYgKzE0Nyw3IEBADQogCQkJb2Zmc2V0ICs9IGRlX2xl
bjsNCiAJCQlkZSA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqKQ0KIAkJ
CQkoKGNoYXIgKikgZGUgKyBkZV9sZW4pOw0KKwkJCWNvbmRpdGlvbmFsX3Nj
aGVkdWxlKCk7DQogCQl9DQogDQogCQlicmVsc2UgKGJoKTsNCi0tLSBsaW51
eC9mcy9leGVjLmMub3JpZwlTdW4gSnVuIDEzIDE5OjUwOjA0IDE5OTkNCisr
KyBsaW51eC9mcy9leGVjLmMJU2F0IEp1bCAzMSAyMjozMTowMCAxOTk5DQpA
QCAtMjkxLDYgKzI5MSw3IEBADQogCQkJc3RyICs9IGJ5dGVzX3RvX2NvcHk7
DQogCQkJbGVuIC09IGJ5dGVzX3RvX2NvcHk7DQogCQl9DQorCQljb25kaXRp
b25hbF9zY2hlZHVsZSgpOw0KIAl9DQogCWlmIChmcm9tX2ttZW09PTIpDQog
CQlzZXRfZnMob2xkX2ZzKTsNCi0tLSBsaW51eC9mcy9idWZmZXIuYy5vcmln
CVRodSBNYXkgMTMgMjI6MTQ6MDQgMTk5OQ0KKysrIGxpbnV4L2ZzL2J1ZmZl
ci5jCVNhdCBKdWwgMzEgMjI6MzE6MDAgMTk5OQ0KQEAgLTE2OSw2ICsxNjks
OCBAQA0KIAlkbyB7DQogCQlyZXRyeSA9IDA7DQogcmVwZWF0Og0KKwkJY29u
ZGl0aW9uYWxfc2NoZWR1bGUoKTsNCisJCSAgcnVuX3Rhc2tfcXVldWUoJnRx
X2Rpc2spOw0KIAkJLyogV2Ugc2VhcmNoIGFsbCBsaXN0cyBhcyBhIGZhaWxz
YWZlIG1lY2hhbmlzbSwgbm90IGJlY2F1c2Ugd2UgZXhwZWN0DQogCQkgKiB0
aGVyZSB0byBiZSBkaXJ0eSBidWZmZXJzIG9uIGFueSBvZiB0aGUgb3RoZXIg
bGlzdHMuDQogCQkgKi8NCkBAIC0xNzYsNiArMTc4LDEwIEBADQogCQlpZiAo
IWJoKQ0KIAkJCWdvdG8gcmVwZWF0MjsNCiAJCWZvciAoaSA9IG5yX2J1ZmZl
cnNfdHlwZVtCVUZfRElSVFldKjIgOyBpLS0gPiAwIDsgYmggPSBuZXh0KSB7
DQorCQkJLyoNCisJCQkgKiB0b3VnaCB0byBtYWtlIHByZWVtcHRpdmUgYXMg
d2VsbCAuLi4NCisJCQkgKi8NCisJCSAgCXJ1bl90YXNrX3F1ZXVlKCZ0cV9k
aXNrKTsNCiAJCQlpZiAoYmgtPmJfbGlzdCAhPSBCVUZfRElSVFkpDQogCQkJ
CWdvdG8gcmVwZWF0Ow0KIAkJCW5leHQgPSBiaC0+Yl9uZXh0X2ZyZWU7DQpA
QCAtMjMxLDYgKzIzNywxMCBAQA0KIAkJaWYgKCFiaCkNCiAJCQlicmVhazsN
CiAJCWZvciAoaSA9IG5yX2J1ZmZlcnNfdHlwZVtCVUZfTE9DS0VEXSoyIDsg
aS0tID4gMCA7IGJoID0gbmV4dCkgew0KKwkJCS8qDQorCQkJICogdG91Z2gg
dG8gbWFrZSBwcmVlbXB0aXZlIGFzIHdlbGwgLi4uDQorCQkJICovDQorCQkg
IAlydW5fdGFza19xdWV1ZSgmdHFfZGlzayk7DQogCQkJaWYgKGJoLT5iX2xp
c3QgIT0gQlVGX0xPQ0tFRCkNCiAJCQkJZ290byByZXBlYXQyOw0KIAkJCW5l
eHQgPSBiaC0+Yl9uZXh0X2ZyZWU7DQpAQCAtODA4LDYgKzgxOCw3IEBADQog
DQogCWlmIChidWYtPmJfY291bnQpIHsNCiAJCWJ1Zi0+Yl9jb3VudC0tOw0K
KwkJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJCXJldHVybjsNCiAJfQ0K
IAlwcmludGsoIlZGUzogYnJlbHNlOiBUcnlpbmcgdG8gZnJlZSBmcmVlIGJ1
ZmZlclxuIik7DQpAQCAtODI5LDYgKzg0MCw3IEBADQogCWJ1Zi0+Yl9zdGF0
ZSA9IDA7DQogCXJlbW92ZV9mcm9tX3F1ZXVlcyhidWYpOw0KIAlwdXRfbGFz
dF9mcmVlKGJ1Zik7DQorCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQogfQ0K
IA0KIC8qDQpAQCAtMTYwMiw2ICsxNjE0LDEwIEBADQogCQliaCA9IGxydV9s
aXN0W25saXN0XTsNCiAJCWlmKGJoKSANCiAJCQkgZm9yIChpID0gbnJfYnVm
ZmVyc190eXBlW25saXN0XTsgaS0tID4gMDsgYmggPSBuZXh0KSB7DQorCQkJ
CS8qDQorCQkJCSAqIEZJWE1FOiB0aGlzIG9uZSBpcyB0b3VnaCB0byByZXNj
aGVkdWxlIC4uLg0KKwkJCQkgKi8NCisJCSAgCQlydW5fdGFza19xdWV1ZSgm
dHFfZGlzayk7DQogCQkJCSAvKiBXZSBtYXkgaGF2ZSBzdGFsbGVkIHdoaWxl
IHdhaXRpbmcgZm9yIEkvTyB0byBjb21wbGV0ZS4gKi8NCiAJCQkJIGlmKGJo
LT5iX2xpc3QgIT0gbmxpc3QpIGdvdG8gcmVwZWF0Ow0KIAkJCQkgbmV4dCA9
IGJoLT5iX25leHRfZnJlZTsNCkBAIC0xNzUwLDExICsxNzY2LDEyIEBADQog
CQkgew0KIAkJCSBuZGlydHkgPSAwOw0KIAkJIHJlcGVhdDoNCi0NCiAJCQkg
YmggPSBscnVfbGlzdFtubGlzdF07DQogCQkJIGlmKGJoKSANCiAJCQkJICBm
b3IgKGkgPSBucl9idWZmZXJzX3R5cGVbbmxpc3RdOyBpLS0gPiAwICYmIG5k
aXJ0eSA8IGJkZl9wcm0uYl91bi5uZGlydHk7IA0KIAkJCQkgICAgICAgYmgg
PSBuZXh0KSB7DQorCQkJIAkJICBjb25kaXRpb25hbF9zY2hlZHVsZSgpOw0K
KwkJCQkJICBydW5fdGFza19xdWV1ZSgmdHFfZGlzayk7DQogCQkJCQkgIC8q
IFdlIG1heSBoYXZlIHN0YWxsZWQgd2hpbGUgd2FpdGluZyBmb3IgSS9PIHRv
IGNvbXBsZXRlLiAqLw0KIAkJCQkJICBpZihiaC0+Yl9saXN0ICE9IG5saXN0
KSBnb3RvIHJlcGVhdDsNCiAJCQkJCSAgbmV4dCA9IGJoLT5iX25leHRfZnJl
ZTsNCi0tLSBsaW51eC9mcy9kY2FjaGUuYy5vcmlnCU1vbiBKdWwgMjYgMTI6
MzY6NDMgMTk5OQ0KKysrIGxpbnV4L2ZzL2RjYWNoZS5jCVNhdCBKdWwgMzEg
MjI6MzE6MDAgMTk5OQ0KQEAgLTQxLDcgKzQxLDcgQEANCiAgKiBUaGlzIGhh
c2gtZnVuY3Rpb24gdHJpZXMgdG8gYXZvaWQgbG9zaW5nIHRvbyBtYW55IGJp
dHMgb2YgaGFzaA0KICAqIGluZm9ybWF0aW9uLCB5ZXQgYXZvaWQgdXNpbmcg
YSBwcmltZSBoYXNoLXNpemUgb3Igc2ltaWxhci4NCiAgKi8NCi0jZGVmaW5l
IERfSEFTSEJJVFMgICAgIDEwDQorI2RlZmluZSBEX0hBU0hCSVRTICAgICAx
NA0KICNkZWZpbmUgRF9IQVNIU0laRSAgICAgKDFVTCA8PCBEX0hBU0hCSVRT
KQ0KICNkZWZpbmUgRF9IQVNITUFTSyAgICAgKERfSEFTSFNJWkUtMSkNCiAN
CkBAIC0yMjEsNiArMjIxLDkgQEANCiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUg
PSBkZW50cnktPmRfaW5vZGU7DQogCQl1bnNpZ25lZCBsb25nIHZhbHVlID0g
MDsJDQogDQorCQkvKg0KKwkJICogVG91Z2ggdG8gbWFrZSBwcmVlbXB0YWJs
ZSBhcyB3ZWxsIC4uLg0KKwkJICovDQogCQluZXh0ID0gdG1wLT5wcmV2Ow0K
IAkJaWYgKGRlbnRyeS0+ZF9jb3VudCkgew0KIAkJCWRlbnRyeV9zdGF0Lm5y
X3VudXNlZC0tOw0KQEAgLTI4OSw2ICsyOTIsOSBAQA0KIAkJc3RydWN0IGRl
bnRyeSAqZGVudHJ5Ow0KIAkJc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gZGVu
dHJ5X3VudXNlZC5wcmV2Ow0KIA0KKwkJLyoNCisJCSAqIFRvdWdoIHRvIG1h
a2UgcHJlZW1wdGFibGUgYXMgd2VsbCAuLi4NCisJCSAqLw0KIAkJaWYgKHRt
cCA9PSAmZGVudHJ5X3VudXNlZCkNCiAJCQlicmVhazsNCiAJCWRlbnRyeV9z
dGF0Lm5yX3VudXNlZC0tOw0KQEAgLTMyNiw2ICszMzIsOSBAQA0KIAkgKi8N
CiAJbmV4dCA9IGRlbnRyeV91bnVzZWQubmV4dDsNCiAJd2hpbGUgKG5leHQg
IT0gJmRlbnRyeV91bnVzZWQpIHsNCisJCS8qDQorCQkgKiBUb3VnaCB0byBt
YWtlIHByZWVtcHRhYmxlIGFzIHdlbGwgLi4uDQorCQkgKi8NCiAJCXRtcCA9
IG5leHQ7DQogCQluZXh0ID0gdG1wLT5uZXh0Ow0KIAkJZGVudHJ5ID0gbGlz
dF9lbnRyeSh0bXAsIHN0cnVjdCBkZW50cnksIGRfbHJ1KTsNCkBAIC00MTUs
NiArNDI0LDkgQEANCiAJCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IG5leHQ7
DQogCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBsaXN0X2VudHJ5KHRtcCwg
c3RydWN0IGRlbnRyeSwgZF9jaGlsZCk7DQogCQluZXh0ID0gdG1wLT5uZXh0
Ow0KKwkJLyoNCisJCSAqIFRvdWdoIG9uZSB0byBtYWtlIHByZWVtcHRhYmxl
IC4uLg0KKwkJICovDQogCQlpZiAoIWRlbnRyeS0+ZF9jb3VudCkgew0KIAkJ
CWxpc3RfZGVsKCZkZW50cnktPmRfbHJ1KTsNCiAJCQlsaXN0X2FkZCgmZGVu
dHJ5LT5kX2xydSwgZGVudHJ5X3VudXNlZC5wcmV2KTsNCi0tLSBsaW51eC9m
cy9pbm9kZS5jLm9yaWcJVHVlIE1heSAgNCAxOTo1NzoxMiAxOTk5DQorKysg
bGludXgvZnMvaW5vZGUuYwlTYXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBA
IC05Nyw3ICs5Nyw3IEBADQogCX0NCiB9DQogDQotc3RhdGljIHZvaWQgX193
YWl0X29uX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQ0KK3N0YXRpYyBp
bmxpbmUgdm9pZCBfX3dhaXRfb25faW5vZGUoc3RydWN0IGlub2RlICogaW5v
ZGUpDQogew0KIAlzdHJ1Y3Qgd2FpdF9xdWV1ZSB3YWl0ID0geyBjdXJyZW50
LCBOVUxMIH07DQogDQpAQCAtMTEyLDggKzExMiw5IEBADQogCWN1cnJlbnQt
PnN0YXRlID0gVEFTS19SVU5OSU5HOw0KIH0NCiANCi1zdGF0aWMgaW5saW5l
IHZvaWQgd2FpdF9vbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KK3N0
YXRpYyB2b2lkIHdhaXRfb25faW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkN
CiB7DQorCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQogCWlmIChpbm9kZS0+
aV9zdGF0ZSAmIElfTE9DSykNCiAJCV9fd2FpdF9vbl9pbm9kZShpbm9kZSk7
DQogfQ0KQEAgLTE1Myw2ICsxNTQsNyBAQA0KIAkJc3Bpbl91bmxvY2soJmlu
b2RlX2xvY2spOw0KIA0KIAkJd3JpdGVfaW5vZGUoaW5vZGUpOw0KKwkJY29u
ZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiANCiAJCXNwaW5fbG9jaygmaW5vZGVf
bG9jayk7DQogCQlpbm9kZS0+aV9zdGF0ZSAmPSB+SV9MT0NLOw0KQEAgLTM0
MiwxMyArMzQ0LDE5IEBADQogc3RhdGljIGludCBmcmVlX2lub2Rlcyh2b2lk
KQ0KIHsNCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0LCAqZW50cnksICpmcmVl
YWJsZSA9ICZsaXN0Ow0KLQlpbnQgZm91bmQgPSAwOw0KKwkvKg0KKwkgKiBX
ZSBmcmVlIGF0IG1vc3QgMTAyNCBpbm9kZXMgYXQgb25jZSAtIGZyZWVpbmcg
dG9vIG1hbnkNCisJICogaW50cm9kdWNlcyB2ZXJ5IG5hc3R5IHNjaGVkdWxp
bmcgbGF0ZW5jaWVzLg0KKwkgKi8NCisJaW50IGZvdW5kID0gMCwgY291bnQg
PSAxMjg7DQogDQogCUlOSVRfTElTVF9IRUFEKGZyZWVhYmxlKTsNCiAJZW50
cnkgPSBpbm9kZV9pbl91c2UubmV4dDsNCiAJd2hpbGUgKGVudHJ5ICE9ICZp
bm9kZV9pbl91c2UpIHsNCiAJCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGVu
dHJ5Ow0KLQ0KKwkvKg0KKwkgKiBUb3VnaCBvbmUgdG8gdGltZS1saW1pdCAu
Li4NCisJICovDQogCQllbnRyeSA9IGVudHJ5LT5uZXh0Ow0KIAkJaWYgKCFD
QU5fVU5VU0UoSU5PREUodG1wKSkpDQogCQkJY29udGludWU7DQpAQCAtMzU3
LDYgKzM2NSw4IEBADQogCQlJTklUX0xJU1RfSEVBRCgmSU5PREUodG1wKS0+
aV9oYXNoKTsNCiAJCWxpc3RfYWRkKHRtcCwgZnJlZWFibGUpOw0KIAkJZm91
bmQgPSAxOw0KKwkJaWYgKCEtLWNvdW50KQ0KKwkJCWJyZWFrOw0KIAl9DQog
DQogCWlmIChmb3VuZCkNCi0tLSBsaW51eC9mcy9zdXBlci5jLm9yaWcJRnJp
IE1heSAxNCAwODoyNTo1OCAxOTk5DQorKysgbGludXgvZnMvc3VwZXIuYwlT
YXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBAIC00NDUsNiArNDQ1LDcgQEAN
CiAJCWlmICghc2ItPnNfZGlydCkNCiAJCQljb250aW51ZTsNCiAJCS8qIE4u
Qi4gU2hvdWxkIGxvY2sgdGhlIHN1cGVyYmxvY2sgd2hpbGUgd3JpdGluZyAq
Lw0KKwkJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJCXdhaXRfb25fc3Vw
ZXIoc2IpOw0KIAkJaWYgKCFzYi0+c19kZXYgfHwgIXNiLT5zX2RpcnQpDQog
CQkJY29udGludWU7DQotLS0gbGludXgvZnMvcGlwZS5jLm9yaWcJU2F0IEp1
bCAzMSAxMTo1MToyMyAxOTk5DQorKysgbGludXgvZnMvcGlwZS5jCVNhdCBK
dWwgMzEgMjI6MzE6MDAgMTk5OQ0KQEAgLTEwNyw2ICsxMDcsNyBAQA0KIAkJ
cmV0dXJuIC1FUkVTVEFSVFNZUzsNCiAJfQ0KIAl3aGlsZSAoY291bnQ+MCkg
ew0KKwkJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJCXdoaWxlICgoUElQ
RV9GUkVFKCppbm9kZSkgPCBmcmVlKSB8fCBQSVBFX0xPQ0soKmlub2RlKSkg
ew0KIAkJCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpIHsgLyogbm8gcmVh
ZGVycyAqLw0KIAkJCQlzZW5kX3NpZyhTSUdQSVBFLGN1cnJlbnQsMCk7DQot
LS0gbGludXgva2VybmVsL3NjaGVkLmMub3JpZwlNb24gTWF5IDEwIDE4OjU1
OjIxIDE5OTkNCisrKyBsaW51eC9rZXJuZWwvc2NoZWQuYwlTYXQgSnVsIDMx
IDIyOjMxOjAwIDE5OTkNCkBAIC0xOTE0LDEwICsxOTE0LDEzIEBADQogCQkv
Kg0KIAkJICogU2hvcnQgZGVsYXkgcmVxdWVzdHMgdXAgdG8gMiBtcyB3aWxs
IGJlIGhhbmRsZWQgd2l0aA0KIAkJICogaGlnaCBwcmVjaXNpb24gYnkgYSBi
dXN5IHdhaXQgZm9yIGFsbCByZWFsLXRpbWUgcHJvY2Vzc2VzLg0KKwkJICog
QnV0IGV2ZW4gcmVhbC10aW1lIHByb2Nlc3NlcyBoYXZlIHRvIGJlIHByZWVt
cHRlZCBieSBhbg0KKwkJICogZXZlbiBoaWdoZXIgcHJpb3JpdHkgUlQtdGhy
ZWFkLCBzbyB3ZSBzbGVlcCBpbiBzaG9ydCAxMA0KKwkJICogdXNlYyBwZXJp
b2RzIGFuZCByZWNoZWNrIG5lZWRfcmVzY2hlZC4NCiAJCSAqDQogCQkgKiBJ
dHMgaW1wb3J0YW50IG9uIFNNUCBub3QgdG8gZG8gdGhpcyBob2xkaW5nIGxv
Y2tzLg0KIAkJICovDQotCQl1ZGVsYXkoKHQudHZfbnNlYyArIDk5OSkgLyAx
MDAwKTsNCisJCXVkZWxheV9yZXNjaGVkKCh0LnR2X25zZWMgKyA5OTkpIC8g
MTAwMCk7DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KLS0tIGxpbnV4L2tlcm5l
bC9mb3JrLmMub3JpZwlTYXQgSnVsIDMxIDA5OjM5OjE1IDE5OTkNCisrKyBs
aW51eC9rZXJuZWwvZm9yay5jCVNhdCBKdWwgMzEgMjI6MzE6MDAgMTk5OQ0K
QEAgLTI3Niw2ICsyNzYsNyBAQA0KIAkJcHByZXYgPSAmdG1wLT52bV9uZXh0
Ow0KIAkJaWYgKHJldHZhbCkNCiAJCQlnb3RvIGZhaWxfbm9tZW07DQorCQlj
b25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAl9DQogCXJldHZhbCA9IDA7DQog
CWlmIChtbS0+bWFwX2NvdW50ID49IEFWTF9NSU5fTUFQX0NPVU5UKQ0KQEAg
LTM3MCw2ICszNzEsNyBAQA0KIAkJcmV0dXJuIDA7DQogCX0NCiANCisJY29u
ZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJcmV0dmFsID0gLUVOT01FTTsNCiAJ
bW0gPSBtbV9hbGxvYygpOw0KIAlpZiAoIW1tKQ0KQEAgLTQwNCw2ICs0MDYs
NyBAQA0KIAkJYXRvbWljX2luYygmY3VycmVudC0+ZnMtPmNvdW50KTsNCiAJ
CXJldHVybiAwOw0KIAl9DQorCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQog
CXRzay0+ZnMgPSBrbWFsbG9jKHNpemVvZigqdHNrLT5mcyksIEdGUF9LRVJO
RUwpOw0KIAlpZiAoIXRzay0+ZnMpDQogCQlyZXR1cm4gLTE7DQpAQCAtNDUz
LDYgKzQ1Niw3IEBADQogCQlnb3RvIG91dDsNCiAJfQ0KIA0KKwljb25kaXRp
b25hbF9zY2hlZHVsZSgpOw0KIAl0c2stPmZpbGVzID0gTlVMTDsNCiAJZXJy
b3IgPSAtRU5PTUVNOw0KIAluZXdmID0ga21lbV9jYWNoZV9hbGxvYyhmaWxl
c19jYWNoZXAsIFNMQUJfS0VSTkVMKTsNCkBAIC01MDQsNiArNTA4LDcgQEAN
CiAJCWF0b21pY19pbmMoJmN1cnJlbnQtPnNpZy0+Y291bnQpOw0KIAkJcmV0
dXJuIDA7DQogCX0NCisJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJdHNr
LT5zaWcgPSBrbWFsbG9jKHNpemVvZigqdHNrLT5zaWcpLCBHRlBfS0VSTkVM
KTsNCiAJaWYgKCF0c2stPnNpZykNCiAJCXJldHVybiAtMTsNCi0tLSBsaW51
eC9rZXJuZWwvZXhpdC5jLm9yaWcJU2F0IEp1bCAzMSAxMjo0Mzo1NiAxOTk5
DQorKysgbGludXgva2VybmVsL2V4aXQuYwlTYXQgSnVsIDMxIDIyOjMxOjAw
IDE5OTkNCkBAIC0xNzAsNiArMTcwLDcgQEANCiAJCQkJaWYgKGZpbGUpIHsN
CiAJCQkJCWZpbGVzLT5mZFtpXSA9IE5VTEw7DQogCQkJCQlmaWxwX2Nsb3Nl
KGZpbGUsIGZpbGVzKTsNCisJCQkJCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7
DQogCQkJCX0NCiAJCQl9DQogCQkJaSsrOw0KLS0tIGxpbnV4L21tL3N3YXBm
aWxlLmMub3JpZwlUdWUgSnVuICA4IDAxOjI3OjA2IDE5OTkNCisrKyBsaW51
eC9tbS9zd2FwZmlsZS5jCVNhdCBKdWwgMzEgMjI6MzE6MDAgMTk5OQ0KQEAg
LTcxMywxNCArNzEzLDMwIEBADQogDQogdm9pZCBzaV9zd2FwaW5mbyhzdHJ1
Y3Qgc3lzaW5mbyAqdmFsKQ0KIHsNCi0JdW5zaWduZWQgaW50IGksIGo7DQor
CXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICogcDsNCisJdW5zaWduZWQgaW50
IGksIG1heDsNCiANCiAJdmFsLT5mcmVlc3dhcCA9IHZhbC0+dG90YWxzd2Fw
ID0gMDsNCi0JZm9yIChpID0gMDsgaSA8IG5yX3N3YXBmaWxlczsgaSsrKSB7
DQotCQlpZiAoKHN3YXBfaW5mb1tpXS5mbGFncyAmIFNXUF9XUklURU9LKSAh
PSBTV1BfV1JJVEVPSykNCisJZm9yIChwID0gc3dhcF9pbmZvOyBwIDwgc3dh
cF9pbmZvK25yX3N3YXBmaWxlczsgcCsrKSB7DQorCQlpZiAoKHAtPmZsYWdz
ICYgU1dQX1dSSVRFT0spICE9IFNXUF9XUklURU9LKQ0KIAkJCWNvbnRpbnVl
Ow0KLQkJZm9yIChqID0gMDsgaiA8IHN3YXBfaW5mb1tpXS5tYXg7ICsraikN
Ci0JCQlzd2l0Y2ggKHN3YXBfaW5mb1tpXS5zd2FwX21hcFtqXSkgew0KKwkJ
bWF4ID0gcC0+bWF4Ow0KKwkJZm9yIChpID0gMDsgaSA8IG1heDsgKytpKSB7
DQorCQkJLyoNCisJCQkgKiBUaGlzIGlzIGZvciBzdGF0aXN0aWNzIG9ubHkg
LSBubyBwcm9ibGVtIGlmDQorCQkJICogd2UgcmVzY2hlZHVsZSBpbiB0aGUg
bWlkZGxlLCBidXQgd2UgaGF2ZSB0bw0KKwkJCSAqIGJlIGEgYml0IGNhcmVm
dWwgbm90IHRvIHByb2Nlc3MgcmVtb3ZlZA0KKwkJCSAqIHN3YXBmaWxlcy4N
CisJCQkgKi8NCisJCQlpZiAoIShpICYgMjU1KSkgew0KKwkJCQlpZiAoY3Vy
cmVudC0+bmVlZF9yZXNjaGVkKSB7DQorCQkJCQlzY2hlZHVsZSgpOw0KKwkJ
CQkJaWYgKCgocC0+ZmxhZ3MgJiBTV1BfV1JJVEVPSykgIT0NCisJCQkJCQlT
V1BfV1JJVEVPSykgfHwgKG1heCAhPSBwLT5tYXgpKQ0KKwkJCQkJCQlicmVh
azsNCisJCQkJfQ0KKwkJCX0NCisJCQlzd2l0Y2ggKHAtPnN3YXBfbWFwW2ld
KSB7DQogCQkJCWNhc2UgU1dBUF9NQVBfQkFEOg0KIAkJCQkJY29udGludWU7
DQogCQkJCWNhc2UgMDoNCkBAIC03MjgsNiArNzQ0LDcgQEANCiAJCQkJZGVm
YXVsdDoNCiAJCQkJCSsrdmFsLT50b3RhbHN3YXA7DQogCQkJfQ0KKwkJfQ0K
IAl9DQogCXZhbC0+ZnJlZXN3YXAgPDw9IFBBR0VfU0hJRlQ7DQogCXZhbC0+
dG90YWxzd2FwIDw8PSBQQUdFX1NISUZUOw0KLS0tIGxpbnV4L21tL21lbW9y
eS5jLm9yaWcJU2F0IEp1bCAzMSAxMDowMDoxNyAxOTk5DQorKysgbGludXgv
bW0vbWVtb3J5LmMJU2F0IEp1bCAzMSAyMjozMTowMCAxOTk5DQpAQCAtMjgx
LDYgKzI4MSwxMCBAQA0KIAkJCQkJZ290byBvdXQ7DQogCQkJCXNyY19wdGUr
KzsNCiAJCQkJZHN0X3B0ZSsrOw0KKwkJCQkvKg0KKwkJCQkgKiBSZWR1Y2Ug
c2NoZWR1bGluZyBsYXRlbmNpZXM6DQorCQkJCSAqLw0KKwkJCQljb25kaXRp
b25hbF9zY2hlZHVsZSgpOw0KIAkJCX0gd2hpbGUgKCh1bnNpZ25lZCBsb25n
KXNyY19wdGUgJiBQVEVfVEFCTEVfTUFTSyk7DQogCQkNCiBjb250X2NvcHlf
cG1kX3JhbmdlOglzcmNfcG1kKys7DQpAQCAtMzQ4LDkgKzM1MiwxNSBAQA0K
IAkJcHRlKys7DQogCQlzaXplLS07DQogCQlpZiAocHRlX25vbmUocGFnZSkp
DQotCQkJY29udGludWU7DQorCQkJZ290byBjb250aW51ZV9sb29wOw0KIAkJ
cHRlX2NsZWFyKHB0ZS0xKTsNCiAJCWZyZWVkICs9IGZyZWVfcHRlKHBhZ2Up
Ow0KK2NvbnRpbnVlX2xvb3A6DQorCQkvKg0KKwkJICogQXZvaWQgbGFyZ2Ug
c2NoZWR1bGluZyBsYXRlbmNpZXMgd2hlbiBleGl0aW5nIGJpZw0KKwkJICog
dGFza3M6DQorCQkgKi8NCisJCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQog
CX0NCiAJcmV0dXJuIGZyZWVkOw0KIH0NCi0tLSBsaW51eC9tbS9wYWdlX2Fs
bG9jLmMub3JpZwlTYXQgSnVsIDMxIDExOjIzOjQ2IDE5OTkNCisrKyBsaW51
eC9tbS9wYWdlX2FsbG9jLmMJU2F0IEp1bCAzMSAyMjozMTowMCAxOTk5DQpA
QCAtMjA5LDYgKzIwOSw4IEBADQogCX0NCiAjZW5kaWYNCiANCisJaWYgKGdm
cF9tYXNrICYgX19HRlBfV0FJVCkNCisJCWNvbmRpdGlvbmFsX3NjaGVkdWxl
KCk7DQogCS8qDQogCSAqIElmIHRoaXMgaXMgYSByZWN1cnNpdmUgY2FsbCwg
d2UnZCBiZXR0ZXINCiAJICogZG8gb3VyIGJlc3QgdG8ganVzdCBhbGxvY2F0
ZSB0aGluZ3Mgd2l0aG91dA0KLS0tIGxpbnV4L21tL3NsYWIuYy5vcmlnCVNh
dCBKdWwgMzEgMTc6NDI6MjUgMTk5OQ0KKysrIGxpbnV4L21tL3NsYWIuYwlT
YXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBAIC0xMzUyLDYgKzEzNTIsOCBA
QA0KIAkvKiBTYW5pdHkgY2hlY2suICovDQogCWlmICghY2FjaGVwKQ0KIAkJ
Z290byBudWxfcHRyOw0KKwlpZiAoKGZsYWdzICYgU0xBQl9MRVZFTF9NQVNL
KSAhPSBTTEFCX0FUT01JQykNCisJCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7
DQogCXNwaW5fbG9ja19pcnFzYXZlKCZjYWNoZXAtPmNfc3BpbmxvY2ssIHNh
dmVfZmxhZ3MpOw0KIHRyeV9hZ2FpbjoNCiAJLyogR2V0IHNsYWIgYWxsb2Mg
aXMgdG8gY29tZSBmcm9tLiAqLw0KLS0tIGxpbnV4L21tL2ZpbGVtYXAuYy5v
cmlnCVNhdCBKdWwgMzEgMTY6Mjc6MTggMTk5OQ0KKysrIGxpbnV4L21tL2Zp
bGVtYXAuYwlTYXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBAIC03MjcsNyAr
NzI3LDggQEANCiAJCQlmaWxwLT5mX3JhbWF4ID0gTUlOX1JFQURBSEVBRDsN
CiANCiAJCXsNCi0JCQlpbnQgZXJyb3IgPSBpbm9kZS0+aV9vcC0+cmVhZHBh
Z2UoZmlscCwgcGFnZSk7DQorCQkJaW50IGVycm9yOw0KKwkJCWVycm9yID0g
aW5vZGUtPmlfb3AtPnJlYWRwYWdlKGZpbHAsIHBhZ2UpOw0KIAkJCWlmICgh
ZXJyb3IpDQogCQkJCWdvdG8gZm91bmRfcGFnZTsNCiAJCQlkZXNjLT5lcnJv
ciA9IGVycm9yOw0KQEAgLTc0Miw3ICs3NDMsOCBAQA0KIAkJICogYmVjYXVz
ZSB0aGlzIGhhcHBlbnMgb25seSBpZiB0aGVyZSB3ZXJlIGVycm9ycy4NCiAJ
CSAqLw0KIAkJew0KLQkJCWludCBlcnJvciA9IGlub2RlLT5pX29wLT5yZWFk
cGFnZShmaWxwLCBwYWdlKTsNCisJCQlpbnQgZXJyb3I7DQorCQkJZXJyb3Ig
PSBpbm9kZS0+aV9vcC0+cmVhZHBhZ2UoZmlscCwgcGFnZSk7DQogCQkJaWYg
KCFlcnJvcikgew0KIAkJCQl3YWl0X29uX3BhZ2UocGFnZSk7DQogCQkJCWlm
IChQYWdlVXB0b2RhdGUocGFnZSkgJiYgIVBhZ2VFcnJvcihwYWdlKSkNCi0t
LSBsaW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgub3JpZwlUdWUgTWF5IDEx
IDE5OjM1OjQ1IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L3NjaGVk
LmgJU2F0IEp1bCAzMSAyMjozMTowMCAxOTk5DQpAQCAtNSw2ICs1LDcgQEAN
CiANCiBleHRlcm4gdW5zaWduZWQgbG9uZyBldmVudDsNCiANCisjaW5jbHVk
ZSA8bGludXgvY29uZHNjaGVkLmg+DQogI2luY2x1ZGUgPGxpbnV4L2JpbmZt
dHMuaD4NCiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4NCiAjaW5j
bHVkZSA8bGludXgvdGFza3MuaD4NCkBAIC0xMTksNyArMTIwLDcgQEANCiBl
eHRlcm4gdm9pZCBzaG93X3N0YXRlKHZvaWQpOw0KIGV4dGVybiB2b2lkIHRy
YXBfaW5pdCh2b2lkKTsNCiANCi0jZGVmaW5lCU1BWF9TQ0hFRFVMRV9USU1F
T1VUCUxPTkdfTUFYDQorI2RlZmluZQlNQVhfU0NIRURVTEVfVElNRU9VVCAg
ICBMT05HX01BWA0KIGV4dGVybiBzaWduZWQgbG9uZyBGQVNUQ0FMTChzY2hl
ZHVsZV90aW1lb3V0KHNpZ25lZCBsb25nIHRpbWVvdXQpKTsNCiBhc21saW5r
YWdlIHZvaWQgc2NoZWR1bGUodm9pZCk7DQogDQpAQCAtMjI1LDcgKzIyNiw3
IEBADQogCQkJCQkJMC0weEZGRkZGRkZGIGZvciBrZXJuZWwtdGhyZWFkDQog
CQkJCQkgKi8NCiAJc3RydWN0IGV4ZWNfZG9tYWluICpleGVjX2RvbWFpbjsN
Ci0JbG9uZyBuZWVkX3Jlc2NoZWQ7DQorCXZvbGF0aWxlIGxvbmcgbmVlZF9y
ZXNjaGVkOw0KIA0KIC8qIHZhcmlvdXMgZmllbGRzICovDQogCWxvbmcgY291
bnRlcjsNCi0tLSBsaW51eC9pbmNsdWRlL2xpbnV4L2xvY2tzLmgub3JpZwlU
dWUgTWF5IDExIDE5OjM2OjE1IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2xp
bnV4L2xvY2tzLmgJU2F0IEp1bCAzMSAyMjozMTowMCAxOTk5DQpAQCAtMTgs
MTIgKzE4LDE0IEBADQogew0KIAlpZiAodGVzdF9iaXQoQkhfTG9jaywgJmJo
LT5iX3N0YXRlKSkNCiAJCV9fd2FpdF9vbl9idWZmZXIoYmgpOw0KKwljb25k
aXRpb25hbF9zY2hlZHVsZSgpOw0KIH0NCiANCiBleHRlcm4gaW5saW5lIHZv
aWQgbG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpDQogew0K
IAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChCSF9Mb2NrLCAmYmgtPmJfc3Rh
dGUpKQ0KIAkJX193YWl0X29uX2J1ZmZlcihiaCk7DQorCWNvbmRpdGlvbmFs
X3NjaGVkdWxlKCk7DQogfQ0KIA0KIGV4dGVybiBpbmxpbmUgdm9pZCB1bmxv
Y2tfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpDQpAQCAtNDMsNiAr
NDUsNyBAQA0KIHsNCiAJaWYgKHNiLT5zX2xvY2spDQogCQlfX3dhaXRfb25f
c3VwZXIoc2IpOw0KKwljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIH0NCiAN
CiBleHRlcm4gaW5saW5lIHZvaWQgbG9ja19zdXBlcihzdHJ1Y3Qgc3VwZXJf
YmxvY2sgKiBzYikNCi0tLSBsaW51eC9pbmNsdWRlL2xpbnV4L2NvbnNvbGVf
c3RydWN0Lmgub3JpZwlNb24gSnVsIDI2IDE0OjUwOjA4IDE5OTkNCisrKyBs
aW51eC9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0LmgJU2F0IEp1bCAz
MSAyMjozMTowMCAxOTk5DQpAQCAtMTgsNiArMTgsNyBAQA0KIAl1bnNpZ25l
ZCBpbnQJdmNfc2l6ZV9yb3c7CQkvKiBCeXRlcyBwZXIgcm93ICovDQogCXN0
cnVjdCBjb25zdwkqdmNfc3c7DQogCXVuc2lnbmVkIHNob3J0CSp2Y19zY3Jl
ZW5idWY7CQkvKiBJbi1tZW1vcnkgY2hhcmFjdGVyL2F0dHJpYnV0ZSBidWZm
ZXIgKi8NCisJdW5zaWduZWQgbG9uZwl2Y192aWRlb2J1ZjsJCS8qIEluLW1l
bW9yeSBjb3B5IG9mIHRleHQgVmlkZW9SQU0gKi8NCiAJdW5zaWduZWQgaW50
CXZjX3NjcmVlbmJ1Zl9zaXplOw0KIAl1bnNpZ25lZCBjaGFyCXZjX2F0dHI7
CQkvKiBDdXJyZW50IGF0dHJpYnV0ZXMgKi8NCiAJdW5zaWduZWQgY2hhcgl2
Y19kZWZfY29sb3I7CQkvKiBEZWZhdWx0IGNvbG9ycyAqLw0KLS0tIGxpbnV4
L2luY2x1ZGUvbGludXgvc2VsZWN0aW9uLmgub3JpZwlNb24gSnVsIDI2IDE2
OjA5OjE1IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L3NlbGVjdGlv
bi5oCVNhdCBKdWwgMzEgMjI6MzE6MDAgMTk5OQ0KQEAgLTcsOCArNyw2IEBA
DQogI2lmbmRlZiBfTElOVVhfU0VMRUNUSU9OX0hfDQogI2RlZmluZSBfTElO
VVhfU0VMRUNUSU9OX0hfDQogDQotI2luY2x1ZGUgPGxpbnV4L3Z0X2J1ZmZl
ci5oPg0KLQ0KIGV4dGVybiBpbnQgc2VsX2NvbnM7DQogDQogZXh0ZXJuIHZv
aWQgY2xlYXJfc2VsZWN0aW9uKHZvaWQpOw0KLS0tIGxpbnV4L2luY2x1ZGUv
bGludXgvdnRfYnVmZmVyLmgub3JpZwlNb24gSnVsIDI2IDE1OjU0OjMyIDE5
OTkNCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L3Z0X2J1ZmZlci5oCVNhdCBK
dWwgMzEgMjI6MzE6MDAgMTk5OQ0KQEAgLTE5LDI1ICsxOSwxMjkgQEANCiAj
aW5jbHVkZSA8YXNtL3ZnYS5oPg0KICNlbmRpZg0KIA0KKyNkZWZpbmUgVlRf
RE9VQkxFQlVGIDENCisNCiAjaWZuZGVmIFZUX0JVRl9IQVZFX1JXDQotI2Rl
ZmluZSBzY3Jfd3JpdGV3KHZhbCwgYWRkcikgKCooYWRkcikgPSAodmFsKSkN
Ci0jZGVmaW5lIHNjcl9yZWFkdyhhZGRyKSAoKihhZGRyKSkNCi0jZGVmaW5l
IHNjcl9tZW1jcHl3KGQsIHMsIGMpIG1lbWNweShkLCBzLCBjKQ0KLSNkZWZp
bmUgc2NyX21lbW1vdmV3KGQsIHMsIGMpIG1lbW1vdmUoZCwgcywgYykNCi0j
ZGVmaW5lIFZUX0JVRl9IQVZFX01FTUNQWVcNCi0jZGVmaW5lIFZUX0JVRl9I
QVZFX01FTU1PVkVXDQotI2RlZmluZSBzY3JfbWVtY3B5d19mcm9tKGQsIHMs
IGMpIG1lbWNweShkLCBzLCBjKQ0KLSNkZWZpbmUgc2NyX21lbWNweXdfdG8o
ZCwgcywgYykgbWVtY3B5KGQsIHMsIGMpDQotI2RlZmluZSBWVF9CVUZfSEFW
RV9NRU1DUFlGDQorDQorI2lmIFZUX0RPVUJMRUJVRg0KKw0KK2V4dGVybiB1
bnNpZ25lZCBsb25nIHZnYV92cmFtX2Jhc2UsIHZnYV92cmFtX2VuZDsNCisN
CitleHRlcm4gaW5saW5lIHVuc2lnbmVkIHNob3J0ICogX192Mm0oY29uc3Qg
dW5zaWduZWQgc2hvcnQgKiBzLCBpbnQgY29ucykNCit7DQorCXN0cnVjdCB2
Y19kYXRhICpjOw0KKwl1bnNpZ25lZCBzaG9ydCAqIF9fcmVzOw0KKw0KKwlj
ID0gdmNfY29uc1tjb25zXS5kOw0KKw0KKwlpZiAoKmMtPnZjX2Rpc3BsYXlf
ZmcgPT0gYykgew0KKwkJX19yZXMgPSAodW5zaWduZWQgc2hvcnQgKikoYy0+
dmNfdmlkZW9idWYrDQorCQkJKCh1bnNpZ25lZCBsb25nKShzKSAtIHZnYV92
cmFtX2Jhc2UpKTsNCisJCS8qDQorCQkgKiBkZWJ1Z2dpbmcgaGFja3M6DQor
CQkgKi8NCisJCWlmICgoKHVuc2lnbmVkIGludClzIDwgdmdhX3ZyYW1fYmFz
ZSkgfHwNCisJCQkoKHVuc2lnbmVkIGludClzID4gdmdhX3ZyYW1fZW5kKSkg
ew0KKy8vCQkJcHJpbnRrKCJQMTo8JXAtPiVwKCVwKT4/XG4iLCBzLCBfX3Jl
cywgKHZvaWQgKikmJl9feSk7DQorCQkJX19yZXMgPSAodW5zaWduZWQgc2hv
cnQgKikocyk7DQorCQl9IGVsc2Ugew0KKwkJCWlmICgoX19yZXMgPCAodW5z
aWduZWQgc2hvcnQgKiljLT52Y192aWRlb2J1ZikgfHwgKF9fcmVzID49ICh1
bnNpZ25lZCBzaG9ydCAqKShjLT52Y192aWRlb2J1ZisxMjgqMTAyNCkpKSB7
DQorLy8JCQkJcHJpbnRrKCJQMjo8JXAtPiVwKCVwKT4/XG4iLCBzLCBfX3Jl
cywgKHZvaWQgKikmJl9feSk7DQorCQkJCV9fcmVzID0gKHVuc2lnbmVkIHNo
b3J0ICopKHMpOw0KKwkJCX0NCisJCX0NCisJfSBlbHNlDQorCQlfX3JlcyA9
ICh1bnNpZ25lZCBzaG9ydCAqKShzKTsNCisJcmV0dXJuIF9fcmVzOw0KK30N
CisNCisjZGVmaW5lIHYybSh4KSBfX3YybSh4LGN1cnJjb25zKQ0KKw0KKy8v
ICNkZWZpbmUgdjJtKHgpICh7IHVuc2lnbmVkIHNob3J0ICogX19yZXM7IGlm
ICh2Y19jb25zW2N1cnJjb25zXS5kLT52Y192aWRlb2J1ZikgX19yZXMgPSAo
dW5zaWduZWQgc2hvcnQgKikodmNfY29uc1tjdXJyY29uc10uZC0+dmNfdmlk
ZW9idWYrKCh1bnNpZ25lZCBsb25nKSh4KS12Y19jb25zW2N1cnJjb25zXS5k
LT52Y19vcmlnaW4pKTsgZWxzZSB7IGV4dGVybiBpbnQgbWFnaWNfZmxhZzsg
bWFnaWNfZmxhZysrOyBfX3JlcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSh4KTsg
fSBfX3JlczsgfSkNCisvLyAjZGVmaW5lIHYybSh4KSAoeyB1bnNpZ25lZCBz
aG9ydCAqIF9fcmVzOyBfX3JlcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSh2Y19j
b25zW2N1cnJjb25zXS5kLT52Y192aWRlb2J1ZisoKHVuc2lnbmVkIGxvbmcp
KHgpLXZnYV92cmFtX2Jhc2UpKTsgX19yZXM7IH0pDQorDQorI2lmIDENCitl
eHRlcm4gaW5saW5lIHZvaWQgX19zY3Jfd3JpdGV3KHUxNiB2YWwsIHUxNiAq
YWRkciwgaW50IGN1cnJjb25zKQ0KK3sNCisJKmFkZHIgPSB2YWw7DQorCSoo
djJtKGFkZHIpKSA9IHZhbDsNCit9DQorI2RlZmluZSBzY3Jfd3JpdGV3KHZh
bCwgYWRkcikgX19zY3Jfd3JpdGV3KHZhbCwgYWRkciwgY3VycmNvbnMpDQor
DQorIyBkZWZpbmUgc2NyX3JlYWR3KGFkZHIpICh7Kih2Mm0oYWRkcikpO30p
DQorI2Vsc2UNCisjIGRlZmluZSBzY3Jfd3JpdGV3KHZhbCwgYWRkcikgKHsq
KGFkZHIpID0gKHZhbCk7IH0pDQorIyBkZWZpbmUgc2NyX3JlYWR3KGFkZHIp
ICh7KihhZGRyKTt9KQ0KKyNlbmRpZg0KKw0KK2V4dGVybiBpbmxpbmUgdm9p
ZCBfX3Njcl9tZW1jcHl3KHZvaWQgKiBkLCB2b2lkICogcywNCisJCSB1bnNp
Z25lZCBpbnQgYywgaW50IGN1cnJjb25zKQ0KK3sNCisJbWVtY3B5KHYybShk
KSwgdjJtKHMpLCBjKTsNCisJbWVtY3B5KGQsIHYybShkKSwgYyk7DQorfQ0K
KyNkZWZpbmUgc2NyX21lbWNweXcoZCwgcywgYykgX19zY3JfbWVtY3B5dyhk
LCBzLCBjLCBjdXJyY29ucykNCisNCitleHRlcm4gaW5saW5lIHZvaWQgX19z
Y3JfbWVtbW92ZXcodm9pZCAqIGQsIHZvaWQgKiBzLA0KKwkJIHVuc2lnbmVk
IGludCBjLCBpbnQgY3VycmNvbnMpDQorew0KKwltZW1tb3ZlKHYybShkKSwg
djJtKHMpLCBjKTsNCisJbWVtY3B5KGQsIHYybShkKSwgYyk7DQorfQ0KKyMg
ZGVmaW5lIHNjcl9tZW1tb3ZldyhkLCBzLCBjKSBfX3Njcl9tZW1tb3Zldyhk
LCBzLCBjLCBjdXJyY29ucykNCisjIGRlZmluZSBWVF9CVUZfSEFWRV9NRU1D
UFlXDQorIyBkZWZpbmUgVlRfQlVGX0hBVkVfTUVNTU9WRVcNCitleHRlcm4g
aW5saW5lIHZvaWQgX19zY3JfbWVtY3B5d190byh2b2lkICogZCwgdm9pZCAq
IHMsDQorCQl1bnNpZ25lZCBpbnQgYywgaW50IGN1cnJjb25zKQ0KK3sNCisJ
bWVtY3B5KHYybShkKSwgcywgYyk7DQorCW1lbWNweShkLCBzLCBjKTsNCit9
DQorIyBkZWZpbmUgc2NyX21lbWNweXdfdG8oZCwgcywgYykgX19zY3JfbWVt
Y3B5d190byhkLCBzLCBjLCBjdXJyY29ucykNCisjIGRlZmluZSBzY3JfbWVt
Y3B5d19mcm9tKGQsIHMsIGMpICh7IG1lbWNweShkLCB2Mm0ocyksIGMpO30p
DQorIyBkZWZpbmUgVlRfQlVGX0hBVkVfTUVNQ1BZRg0KKw0KKyMgZGVmaW5l
IHNjcl93cml0ZXdfbm9uYnVmZmVyZWQodmFsLCBhZGRyKSAoeyooYWRkcikg
PSAodmFsKTsgfSkNCisjIGRlZmluZSBzY3JfcmVhZHdfbm9uYnVmZmVyZWQo
YWRkcikgKHsqKGFkZHIpO30pDQorIyBkZWZpbmUgc2NyX21lbWNweXdfbm9u
YnVmZmVyZWQoZCwgcywgYykgKHsgbWVtY3B5KGQsIHMsIGMpOyB9KQ0KKyMg
ZGVmaW5lIHNjcl9tZW1tb3Zld19ub25idWZmZXJlZChkLCBzLCBjKSAoeyBt
ZW1tb3ZlKGQsIHMsIGMpOyB9KQ0KKyMgZGVmaW5lIFZUX0JVRl9IQVZFX01F
TUNQWVcNCisjIGRlZmluZSBWVF9CVUZfSEFWRV9NRU1NT1ZFVw0KKyMgZGVm
aW5lIHNjcl9tZW1jcHl3X2Zyb21fbm9uYnVmZmVyZWQoZCwgcywgYykgKHsg
bWVtY3B5KGQsIHMsIGMpO30pDQorIyBkZWZpbmUgc2NyX21lbWNweXdfdG9f
bm9uYnVmZmVyZWQoZCwgcywgYykgKHsgbWVtY3B5KGQsIHMsIGMpO30pDQor
IyBkZWZpbmUgVlRfQlVGX0hBVkVfTUVNQ1BZRg0KKyNlbHNlDQorDQorIyBk
ZWZpbmUgc2NyX3dyaXRldyh2YWwsIGFkZHIpICh7KihhZGRyKSA9ICh2YWwp
OyB9KQ0KKyMgZGVmaW5lIHNjcl9yZWFkdyhhZGRyKSAoeyooYWRkcik7fSkN
CisjIGRlZmluZSBzY3JfbWVtY3B5dyhkLCBzLCBjKSAoeyBtZW1jcHkoZCwg
cywgYyk7IH0pDQorIyBkZWZpbmUgc2NyX21lbW1vdmV3KGQsIHMsIGMpICh7
IG1lbW1vdmUoZCwgcywgYyk7IH0pDQorIyBkZWZpbmUgVlRfQlVGX0hBVkVf
TUVNQ1BZVw0KKyMgZGVmaW5lIFZUX0JVRl9IQVZFX01FTU1PVkVXDQorIyBk
ZWZpbmUgc2NyX21lbWNweXdfZnJvbShkLCBzLCBjKSAoeyBtZW1jcHkoZCwg
cywgYyk7fSkNCisjIGRlZmluZSBzY3JfbWVtY3B5d190byhkLCBzLCBjKSAo
eyBtZW1jcHkoZCwgcywgYyk7fSkNCisjIGRlZmluZSBWVF9CVUZfSEFWRV9N
RU1DUFlGDQorI2VuZGlmDQorDQogI2VuZGlmDQogDQogI2lmbmRlZiBWVF9C
VUZfSEFWRV9NRU1TRVRXDQotZXh0ZXJuIGlubGluZSB2b2lkIHNjcl9tZW1z
ZXR3KHUxNiAqcywgdTE2IGMsIHVuc2lnbmVkIGludCBjb3VudCkNCitleHRl
cm4gaW5saW5lIHZvaWQgX19zY3JfbWVtc2V0dyh1MTYgKnMsIHUxNiBjLA0K
KwkJCQkgdW5zaWduZWQgaW50IGNvdW50LCBpbnQgY3VycmNvbnMpDQogew0K
IAljb3VudCAvPSAyOw0KIAl3aGlsZSAoY291bnQtLSkNCiAJCXNjcl93cml0
ZXcoYywgcysrKTsNCiB9DQorI2RlZmluZSBzY3JfbWVtc2V0dyhzLGMsY291
bnQpIF9fc2NyX21lbXNldHcocyxjLGNvdW50LGN1cnJjb25zKQ0KK2V4dGVy
biBpbmxpbmUgdm9pZCBzY3JfbWVtc2V0d19ub25idWZmZXJlZCh1MTYgKnMs
IHUxNiBjLA0KKwkJCQkgdW5zaWduZWQgaW50IGNvdW50KQ0KK3sNCisJY291
bnQgLz0gMjsNCisJd2hpbGUgKGNvdW50LS0pDQorCQlzY3Jfd3JpdGV3X25v
bmJ1ZmZlcmVkKGMsIHMrKyk7DQorfQ0KKw0KICNlbmRpZg0KIA0KICNpZm5k
ZWYgVlRfQlVGX0hBVkVfTUVNQ1BZVw0KLS0tIGxpbnV4L2luY2x1ZGUvbGlu
dXgvZGVsYXkuaC5vcmlnCVNhdCBKdWwgMzEgMTY6MDI6NDYgMTk5OQ0KKysr
IGxpbnV4L2luY2x1ZGUvbGludXgvZGVsYXkuaAlTYXQgSnVsIDMxIDIyOjMx
OjAwIDE5OTkNCkBAIC0yNSwxMyArMjUsMjQgQEANCiAjZGVmaW5lIE1BWF9V
REVMQVlfTVMJNQ0KICNlbmRpZg0KIA0KLSNpZmRlZiBub3RkZWYNCisvKg0K
KyAqIHRoZSAncHJlZW1wdGl2ZScgdmVyc2lvbiBvZiB1ZGVsYXkuIEluIHNv
bWUgY2FzZXMgd2Ugd2FudCB0byB1c2UNCisgKiB0aGlzIHZhcmlhbnQsIGl0
IGd1YXJhbnRlZXMgdGhhdCBwcmVlbXB0aW9uIHdpbGwgaGFwcGluZyB3aXRo
aW4NCisgKiAxMCB1c2VjcyAoZGVzcGl0ZSBkb2luZyBidXN5IHdhaXRpbmcp
LiBOb3QgYWxsIGRyaXZlcnMgY2FuIHVzZQ0KKyAqIHRoaXMgYXV0b21hdGlj
YWxseSwgdGhlIGRyaXZlciBoYXMgdG8gYmUgc3VmZmljaWVudGx5IHJlZW50
cmFudC4NCisgKi8NCisjZGVmaW5lIHVkZWxheV9yZXNjaGVkKG4pIChcDQor
CXsJaW50IGk7IFwNCisJCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeyBc
DQorCQkJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsgXA0KKwkJCXVkZWxheSgx
MCk7IFwNCisJCX0gXA0KKwl9KQ0KKw0KICNkZWZpbmUgbWRlbGF5KG4pIChc
DQogCXt1bnNpZ25lZCBsb25nIG1zZWM9KG4pOyB3aGlsZSAobXNlYy0tKSB1
ZGVsYXkoMTAwMCk7fSkNCi0jZWxzZQ0KLSNkZWZpbmUgbWRlbGF5KG4pIChc
DQotCShfX2J1aWx0aW5fY29uc3RhbnRfcChuKSAmJiAobik8PU1BWF9VREVM
QVlfTVMpID8gdWRlbGF5KChuKSoxMDAwKSA6IFwNCi0JKHt1bnNpZ25lZCBs
b25nIG1zZWM9KG4pOyB3aGlsZSAobXNlYy0tKSB1ZGVsYXkoMTAwMCk7fSkp
DQotI2VuZGlmDQorI2RlZmluZSBtZGVsYXlfcmVzY2hlZChuKSAoXA0KKwl7
dW5zaWduZWQgbG9uZyBtc2VjPShuKTsgd2hpbGUgKG1zZWMtLSkgdWRlbGF5
X3Jlc2NoZWQoMTAwMCk7fSkNCisNCiANCiAjZW5kaWYgLyogZGVmaW5lZChf
TElOVVhfREVMQVlfSCkgKi8NCi0tLSBsaW51eC9pbmNsdWRlL2xpbnV4L2Zz
Lmgub3JpZwlTYXQgSnVsIDMxIDE3OjI2OjM4IDE5OTkNCisrKyBsaW51eC9p
bmNsdWRlL2xpbnV4L2ZzLmgJU2F0IEp1bCAzMSAyMjozMTowMCAxOTk5DQpA
QCAtOCw2ICs4LDcgQEANCiANCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+
DQogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4NCisjaW5jbHVkZSA8bGlu
dXgvY29uZHNjaGVkLmg+DQogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPg0K
ICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L3R5
cGVzLmg+DQpAQCAtNzU2LDI0ICs3NTcsMjYgQEANCiAjZGVmaW5lIEJVRl9E
SVJUWQkyCS8qIERpcnR5IGJ1ZmZlcnMsIG5vdCB5ZXQgc2NoZWR1bGVkIGZv
ciB3cml0ZSAqLw0KICNkZWZpbmUgTlJfTElTVAkJMw0KIA0KLXZvaWQgbWFy
a19idWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgsIGlu
dCBvbik7DQorZXh0ZXJuIHZvaWQgbWFya19idWZmZXJfdXB0b2RhdGUoc3Ry
dWN0IGJ1ZmZlcl9oZWFkICogYmgsIGludCBvbik7DQogDQotZXh0ZXJuIGlu
bGluZSB2b2lkIG1hcmtfYnVmZmVyX2NsZWFuKHN0cnVjdCBidWZmZXJfaGVh
ZCAqIGJoKQ0KLXsNCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCSF9EaXJ0
eSwgJmJoLT5iX3N0YXRlKSkgew0KLQkJaWYgKGJoLT5iX2xpc3QgPT0gQlVG
X0RJUlRZKQ0KLQkJCXJlZmlsZV9idWZmZXIoYmgpOw0KLQl9DQotfQ0KLQ0K
LWV4dGVybiBpbmxpbmUgdm9pZCBtYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3Qg
YnVmZmVyX2hlYWQgKiBiaCwgaW50IGZsYWcpDQotew0KLQlpZiAoIXRlc3Rf
YW5kX3NldF9iaXQoQkhfRGlydHksICZiaC0+Yl9zdGF0ZSkpIHsNCi0JCXNl
dF93cml0ZXRpbWUoYmgsIGZsYWcpOw0KLQkJaWYgKGJoLT5iX2xpc3QgIT0g
QlVGX0RJUlRZKQ0KLQkJCXJlZmlsZV9idWZmZXIoYmgpOw0KLQl9DQotfQ0K
KyNkZWZpbmUgbWFya19idWZmZXJfY2xlYW4oYmgpIFwNCitkbyB7IFwNCisJ
aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCSF9EaXJ0eSwgJihiaCktPmJfc3Rh
dGUpKSB7IFwNCisJCWlmICgoYmgpLT5iX2xpc3QgPT0gQlVGX0RJUlRZKSBc
DQorCQkJcmVmaWxlX2J1ZmZlcihiaCk7IFwNCisJfSBcDQorCWNvbmRpdGlv
bmFsX3NjaGVkdWxlKCk7IFwNCit9IHdoaWxlKDApDQorDQorI2RlZmluZSBt
YXJrX2J1ZmZlcl9kaXJ0eShiaCxmbGFnKSBcDQorZG8geyBcDQorCWlmICgh
dGVzdF9hbmRfc2V0X2JpdChCSF9EaXJ0eSwgJihiaCktPmJfc3RhdGUpKSB7
IFwNCisJCXNldF93cml0ZXRpbWUoYmgsIGZsYWcpOyBcDQorCQlpZiAoKGJo
KS0+Yl9saXN0ICE9IEJVRl9ESVJUWSkgXA0KKwkJCXJlZmlsZV9idWZmZXIo
YmgpOyBcDQorCX0gXA0KKwljb25kaXRpb25hbF9zY2hlZHVsZSgpOyBcDQor
fSB3aGlsZSgwKQ0KIA0KIGV4dGVybiBpbnQgY2hlY2tfZGlza19jaGFuZ2Uo
a2Rldl90IGRldik7DQogZXh0ZXJuIGludCBpbnZhbGlkYXRlX2lub2Rlcyhz
dHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYik7DQotLS0gbGludXgvaW5jbHVkZS9s
aW51eC9jb25kc2NoZWQuaC5vcmlnCVNhdCBKdWwgMzEgMTk6NDg6MDQgMTk5
OQ0KKysrIGxpbnV4L2luY2x1ZGUvbGludXgvY29uZHNjaGVkLmgJU2F0IEp1
bCAzMSAyMjozMTowMCAxOTk5DQpAQCAtMCwwICsxLDE1IEBADQorI2lmbmRl
ZiBfTElOVVhfQ09ORFNDSEVEX0gNCisjZGVmaW5lIF9MSU5VWF9DT05EU0NI
RURfSA0KKw0KKyNpZm5kZWYgX19BU1NFTUJMWV9fDQorI2RlZmluZSBjb25k
aXRpb25hbF9zY2hlZHVsZSgpIFwNCitkbyB7IFwNCisgICAgICAgIGlmIChj
dXJyZW50LT5uZWVkX3Jlc2NoZWQpIHsgXA0KKwkJY3VycmVudC0+c3RhdGUg
PSBUQVNLX1JVTk5JTkc7IFwNCisgICAgICAgICAgICAgICAgc2NoZWR1bGUo
KTsgXA0KKwl9IFwNCit9IHdoaWxlKDApDQorI2VuZGlmDQorDQorI2VuZGlm
DQorDQotLS0gbGludXgvaW5jbHVkZS9hc20taTM4Ni91YWNjZXNzLmgub3Jp
ZwlUdWUgTWF5IDExIDE5OjM1OjQ2IDE5OTkNCisrKyBsaW51eC9pbmNsdWRl
L2FzbS1pMzg2L3VhY2Nlc3MuaAlTYXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkN
CkBAIC02LDYgKzYsNyBAQA0KICAqLw0KICNpbmNsdWRlIDxsaW51eC9jb25m
aWcuaD4NCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCisjaW5jbHVkZSA8
bGludXgvY29uZHNjaGVkLmg+DQogI2luY2x1ZGUgPGFzbS9wYWdlLmg+DQog
DQogI2RlZmluZSBWRVJJRllfUkVBRCAwDQpAQCAtMjUzLDYgKzI1NCw3IEBA
DQogI2RlZmluZSBfX2NvcHlfdXNlcih0byxmcm9tLHNpemUpCQkJCQlcDQog
ZG8gewkJCQkJCQkJCVwNCiAJaW50IF9fZDAsIF9fZDE7CQkJCQkJCVwNCisJ
Y29uZGl0aW9uYWxfc2NoZWR1bGUoKTsJCQkJCQkJXA0KIAlfX2FzbV9fIF9f
dm9sYXRpbGVfXygJCQkJCQlcDQogCQkiMDoJcmVwOyBtb3ZzbFxuIgkJCQkJ
XA0KIAkJIgltb3ZsICUzLCUwXG4iCQkJCQlcDQpAQCAtMjc1LDYgKzI3Nyw3
IEBADQogI2RlZmluZSBfX2NvcHlfdXNlcl96ZXJvaW5nKHRvLGZyb20sc2l6
ZSkJCQkJXA0KIGRvIHsJCQkJCQkJCQlcDQogCWludCBfX2QwLCBfX2QxOwkJ
CQkJCQlcDQorCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7CQkJCQkJCVwNCiAJ
X19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXA0KIAkJIjA6CXJlcDsgbW92
c2xcbiIJCQkJCVwNCiAJCSIJbW92bCAlMywlMFxuIgkJCQkJXA0KQEAgLTMy
NCw2ICszMjcsNyBAQA0KIAlpbnQgX19kMCwgX19kMTsJCQkJCQlcDQogCXN3
aXRjaCAoc2l6ZSAmIDMpIHsJCQkJCVwNCiAJZGVmYXVsdDoJCQkJCQlcDQor
CQljb25kaXRpb25hbF9zY2hlZHVsZSgpOwkJCQkJXA0KIAkJX19hc21fXyBf
X3ZvbGF0aWxlX18oCQkJCVwNCiAJCQkiMDoJcmVwOyBtb3ZzbFxuIgkJCVwN
CiAJCQkiMTpcbiIJCQkJCVwNCkBAIC00MDgsNiArNDEyLDcgQEANCiAJaW50
IF9fZDAsIF9fZDE7CQkJCQkJXA0KIAlzd2l0Y2ggKHNpemUgJiAzKSB7CQkJ
CQlcDQogCWRlZmF1bHQ6CQkJCQkJXA0KKwkJY29uZGl0aW9uYWxfc2NoZWR1
bGUoKTsJCQkJCVwNCiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcDQog
CQkJIjA6CXJlcDsgbW92c2xcbiIJCQlcDQogCQkJIjE6XG4iCQkJCQlcDQot
LS0gbGludXgvaW5jbHVkZS9hc20taTM4Ni9zbXBsb2NrLmgub3JpZwlUdWUg
TWF5IDExIDE5OjM1OjQ2IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2FzbS1p
Mzg2L3NtcGxvY2suaAlTYXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBAIC00
LDYgKzQsNyBAQA0KICAqIGkzODYgU01QIGxvY2sgaW1wbGVtZW50YXRpb24N
CiAgKi8NCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1
ZGUgPGxpbnV4L2NvbmRzY2hlZC5oPg0KICNpbmNsdWRlIDxhc20vc3Bpbmxv
Y2suaD4NCiANCiBleHRlcm4gc3BpbmxvY2tfdCBrZXJuZWxfZmxhZzsNCkBA
IC0yMiw2ICsyMyw3IEBADQogLyoNCiAgKiBSZS1hY3F1aXJlIHRoZSBrZXJu
ZWwgbG9jaw0KICAqLw0KKw0KICNkZWZpbmUgcmVhY3F1aXJlX2tlcm5lbF9s
b2NrKHRhc2spIFwNCiBkbyB7IFwNCiAJaWYgKHRhc2stPmxvY2tfZGVwdGgg
Pj0gMCkgXA0KLS0tIGxpbnV4L2RyaXZlcnMvY2hhci9tZW0uYy5vcmlnCU1v
biBNYXkgMTAgMTk6MTg6MzQgMTk5OQ0KKysrIGxpbnV4L2RyaXZlcnMvY2hh
ci9tZW0uYwlTYXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBAIC0zNjYsOCAr
MzY2LDcgQEANCiAJCXVuc2lnbmVkIGxvbmcgdW53cml0dGVuID0gY2xlYXJf
dXNlcihidWYsIFBBR0VfU0laRSk7DQogCQlpZiAodW53cml0dGVuKQ0KIAkJ
CXJldHVybiBzaXplICsgdW53cml0dGVuIC0gUEFHRV9TSVpFOw0KLQkJaWYg
KGN1cnJlbnQtPm5lZWRfcmVzY2hlZCkNCi0JCQlzY2hlZHVsZSgpOw0KKwkJ
Y29uZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJCWJ1ZiArPSBQQUdFX1NJWkU7
DQogCQlzaXplIC09IFBBR0VfU0laRTsNCiAJfSB3aGlsZSAoc2l6ZSk7DQot
LS0gbGludXgvZHJpdmVycy9jaGFyL2xwLmMub3JpZwlNb24gTWF5IDEwIDE5
OjI2OjMxIDE5OTkNCisrKyBsaW51eC9kcml2ZXJzL2NoYXIvbHAuYwlTYXQg
SnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBAIC0yMzQsOCArMjM0LDcgQEANCiB7
DQogCWlmICghcGFycG9ydF95aWVsZF9ibG9ja2luZyAobHBfdGFibGVbbWlu
b3JdLmRldikpDQogCXsNCi0JCWlmIChjdXJyZW50LT5uZWVkX3Jlc2NoZWQp
DQotCQkJc2NoZWR1bGUgKCk7DQorCQljb25kaXRpb25hbF9zY2hlZHVsZSgp
Ow0KIAl9IGVsc2UNCiAJCWxwX3RhYmxlW21pbm9yXS5pcnFfbWlzc2VkID0g
MTsNCiB9DQotLS0gbGludXgvZHJpdmVycy9jaGFyL3JhbmRvbS5jLm9yaWcJ
VGh1IERlYyAzMSAyMTowMzo0OSAxOTk4DQorKysgbGludXgvZHJpdmVycy9j
aGFyL3JhbmRvbS5jCVNhdCBKdWwgMzEgMjI6MzE6MDAgMTk5OQ0KQEAgLTEy
ODAsOCArMTI4MCw5IEBADQogCQkJCXJldCA9IC1FSU5UUjsNCiAJCQkJYnJl
YWs7DQogCQkJfQ0KLQkJCXNjaGVkdWxlKCk7DQogCQl9DQorCQlpZiAodG9f
dXNlcikNCisJCQljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAl9DQogDQog
CS8qIFdpcGUgZGF0YSBqdXN0IHJldHVybmVkIGZyb20gbWVtb3J5ICovDQot
LS0gbGludXgvZHJpdmVycy9jaGFyL25fdHR5LmMub3JpZwlTdW4gQXByIDI1
IDAyOjQ5OjM3IDE5OTkNCisrKyBsaW51eC9kcml2ZXJzL2NoYXIvbl90dHku
YwlTYXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBAIC05NTMsNyArOTUzLDcg
QEANCiAJCWlmICgoKG1pbmltdW0gLSAoYiAtIGJ1ZikpIDwgdHR5LT5taW5p
bXVtX3RvX3dha2UpICYmDQogCQkgICAgKChtaW5pbXVtIC0gKGIgLSBidWYp
KSA+PSAxKSkNCiAJCQl0dHktPm1pbmltdW1fdG9fd2FrZSA9IChtaW5pbXVt
IC0gKGIgLSBidWYpKTsNCi0JCQ0KKw0KIAkJaWYgKCFpbnB1dF9hdmFpbGFi
bGVfcCh0dHksIDApKSB7DQogCQkJaWYgKHRlc3RfYml0KFRUWV9PVEhFUl9D
TE9TRUQsICZ0dHktPmZsYWdzKSkgew0KIAkJCQlyZXR2YWwgPSAtRUlPOw0K
LS0tIGxpbnV4L2RyaXZlcnMvY2hhci90dHlfaW8uYy5vcmlnCU1vbiBNYXIg
MjIgMTk6MDY6MjEgMTk5OQ0KKysrIGxpbnV4L2RyaXZlcnMvY2hhci90dHlf
aW8uYwlTYXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBAIC02NTIsNiArNjUy
LDcgQEANCiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5
LT5kX2lub2RlOw0KIAkNCiAJdXAoJmlub2RlLT5pX3NlbSk7DQorCWNvbmRp
dGlvbmFsX3NjaGVkdWxlKCk7DQogCWlmIChkb3duX2ludGVycnVwdGlibGUo
Jmlub2RlLT5pX2F0b21pY193cml0ZSkpIHsNCiAJCWRvd24oJmlub2RlLT5p
X3NlbSk7DQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOw0KQEAgLTY3MSw4ICs2
NzIsNyBAQA0KIAkJcmV0ID0gLUVSRVNUQVJUU1lTOw0KIAkJaWYgKHNpZ25h
bF9wZW5kaW5nKGN1cnJlbnQpKQ0KIAkJCWJyZWFrOw0KLQkJaWYgKGN1cnJl
bnQtPm5lZWRfcmVzY2hlZCkNCi0JCQlzY2hlZHVsZSgpOw0KKwkJY29uZGl0
aW9uYWxfc2NoZWR1bGUoKTsNCiAJfQ0KIAlpZiAod3JpdHRlbikgew0KIAkJ
ZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJ
TUU7DQpAQCAtMTY0Myw3ICsxNjQzLDcgQEANCiB7DQogCXN0cnVjdCB0dHlf
c3RydWN0ICp0dHksICpyZWFsX3R0eTsNCiAJaW50IHJldHZhbDsNCi0JDQor
DQogCXR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKWZpbGUtPnByaXZhdGVf
ZGF0YTsNCiAJaWYgKHR0eV9wYXJhbm9pYV9jaGVjayh0dHksIGlub2RlLT5p
X3JkZXYsICJ0dHlfaW9jdGwiKSkNCiAJCXJldHVybiAtRUlOVkFMOw0KLS0t
IGxpbnV4L2RyaXZlcnMvY2hhci9jb25zb2xlLmMub3JpZwlUaHUgTWFyIDEx
IDAxOjUxOjM1IDE5OTkNCisrKyBsaW51eC9kcml2ZXJzL2NoYXIvY29uc29s
ZS5jCVNhdCBKdWwgMzEgMjI6MzE6MDAgMTk5OQ0KQEAgLTEwNCw2ICsxMDQs
OCBAQA0KIA0KICNpbmNsdWRlICJjb25zb2xlX21hY3Jvcy5oIg0KIA0KKyNp
bmNsdWRlIDxsaW51eC92dF9idWZmZXIuaD4NCisNCiANCiBzdHJ1Y3QgY29u
c3cgKmNvbnN3aXRjaHAgPSBOVUxMOw0KIA0KQEAgLTY0MCw2ICs2NDIsNyBA
QA0KIAkJcmV0dXJuIC1FTk9NRU07DQogCSAgICB2Y19jb25zW2N1cnJjb25z
XS5kID0gKHN0cnVjdCB2Y19kYXRhICopcDsNCiAJICAgIHZ0X2NvbnNbY3Vy
cmNvbnNdID0gKHN0cnVjdCB2dF9zdHJ1Y3QgKikocCtzaXplb2Yoc3RydWN0
IHZjX2RhdGEpKTsNCisJICAgIHZpZGVvYnVmID0gMDsNCiAJICAgIHZpc3Vh
bF9pbml0KGN1cnJjb25zLCAxKTsNCiAJICAgIGlmICghKnZjX2NvbnNbY3Vy
cmNvbnNdLmQtPnZjX3VuaV9wYWdlZGlyX2xvYykNCiAJCWNvbl9zZXRfZGVm
YXVsdF91bmltYXAoY3VycmNvbnMpOw0KQEAgLTE4MTYsOSArMTgxOSwxMCBA
QA0KIAlkaXNhYmxlX2JoKENPTlNPTEVfQkgpOw0KIAl3aGlsZSAoIXR0eS0+
c3RvcHBlZCAmJiBjb3VudCkgew0KIAkJZW5hYmxlX2JoKENPTlNPTEVfQkgp
Ow0KLQkJaWYgKGZyb21fdXNlcikNCisJCWlmIChmcm9tX3VzZXIpIHsNCisJ
CQljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAkJCV9fZ2V0X3VzZXIoYywg
YnVmKTsNCi0JCWVsc2UNCisJCX0gZWxzZQ0KIAkJCWMgPSAqYnVmOw0KIAkJ
YnVmKys7IG4rKzsgY291bnQtLTsNCiAJCWRpc2FibGVfYmgoQ09OU09MRV9C
SCk7DQpAQCAtMjM0Miw2ICsyMzQ2LDcgQEANCiAJCWttZW1fc3RhcnQgKz0g
c2l6ZW9mKHN0cnVjdCB2Y19kYXRhKTsNCiAJCXZ0X2NvbnNbY3VycmNvbnNd
ID0gKHN0cnVjdCB2dF9zdHJ1Y3QgKikga21lbV9zdGFydDsNCiAJCWttZW1f
c3RhcnQgKz0gc2l6ZW9mKHN0cnVjdCB2dF9zdHJ1Y3QpOw0KKwkJdmlkZW9i
dWYgPSAwOw0KIAkJdmlzdWFsX2luaXQoY3VycmNvbnMsIDEpOw0KIAkJc2Ny
ZWVuYnVmID0gKHVuc2lnbmVkIHNob3J0ICopIGttZW1fc3RhcnQ7DQogCQlr
bWVtX3N0YXJ0ICs9IHNjcmVlbmJ1Zl9zaXplOw0KQEAgLTI0MTksNiArMjQy
NCw3IEBADQogCQkJc2F2ZV9zY3JlZW4oaSk7DQogCQlvbGRfd2FzX2NvbG9y
ID0gdmNfY29uc1tpXS5kLT52Y19jYW5fZG9fY29sb3I7DQogCQl2Y19jb25z
W2ldLmQtPnZjX3N3LT5jb25fZGVpbml0KHZjX2NvbnNbaV0uZCk7DQorCQl2
aWRlb2J1ZiA9IDA7DQogCQl2aXN1YWxfaW5pdChpLCAwKTsNCiAJCXVwZGF0
ZV9hdHRyKGkpOw0KIA0KLS0tIGxpbnV4L2RyaXZlcnMvY2hhci9jb25zb2xl
X21hY3Jvcy5oLm9yaWcJTW9uIEp1bCAyNiAxNTowNDozMCAxOTk5DQorKysg
bGludXgvZHJpdmVycy9jaGFyL2NvbnNvbGVfbWFjcm9zLmgJU2F0IEp1bCAz
MSAyMjozMTowMCAxOTk5DQpAQCAtMSw2ICsxLDcgQEANCiAjZGVmaW5lIGNv
bnNfbnVtCSh2Y19jb25zW2N1cnJjb25zXS5kLT52Y19udW0pDQogI2RlZmlu
ZSBzdwkJKHZjX2NvbnNbY3VycmNvbnNdLmQtPnZjX3N3KQ0KICNkZWZpbmUg
c2NyZWVuYnVmCSh2Y19jb25zW2N1cnJjb25zXS5kLT52Y19zY3JlZW5idWYp
DQorI2RlZmluZSB2aWRlb2J1ZgkodmNfY29uc1tjdXJyY29uc10uZC0+dmNf
dmlkZW9idWYpDQogI2RlZmluZSBzY3JlZW5idWZfc2l6ZQkodmNfY29uc1tj
dXJyY29uc10uZC0+dmNfc2NyZWVuYnVmX3NpemUpDQogI2RlZmluZSBvcmln
aW4JCSh2Y19jb25zW2N1cnJjb25zXS5kLT52Y19vcmlnaW4pDQogI2RlZmlu
ZSBzY3JfdG9wCQkodmNfY29uc1tjdXJyY29uc10uZC0+dmNfc2NyX3RvcCkN
Ci0tLSBsaW51eC9kcml2ZXJzL2NoYXIvcGNfa2V5Yi5jLm9yaWcJU2F0IEp1
bCAzMSAxNToyNzozMSAxOTk5DQorKysgbGludXgvZHJpdmVycy9jaGFyL3Bj
X2tleWIuYwlTYXQgSnVsIDMxIDIyOjMxOjAwIDE5OTkNCkBAIC0xMDQsOSAr
MTA0LDkgQEANCiAgKiBDb250cm9sbGVyIFN0YXR1cyByZWdpc3RlciBhcmUg
c2V0IDAuIg0KICAqLw0KIA0KLXN0YXRpYyB2b2lkIGtiX3dhaXQodm9pZCkN
CitzdGF0aWMgdm9pZCBrYl93YWl0KHVuc2lnbmVkIGxvbmcgKiBmbGFncykN
CiB7DQotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IEtCQ19USU1FT1VUOw0K
Kwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBLQkNfVElNRU9VVCoxMDsNCiAN
CiAJZG8gew0KIAkJLyoNCkBAIC0xMTcsOCArMTE3LDEzIEBADQogDQogCQlp
ZiAoISAoc3RhdHVzICYgS0JEX1NUQVRfSUJGKSkNCiAJCQlyZXR1cm47DQot
CQltZGVsYXkoMSk7DQotCQl0aW1lb3V0LS07DQorCQkvKg0KKwkJICogV2Ug
cmVsZWFzZS9yZWdyYWIgdGhlIGNvbnRyb2xsZXIgbG9jayBiZWZvcmUgZGVs
YXlpbmcNCisJCSAqIHRoZSBwcm9jZXNzIC0gdG8gcmVkdWNlIHNjaGVkdWxp
bmcgbGF0ZW5jaWVzLg0KKwkJICovDQorCQlzcGluX3VubG9ja19pcnEoJmti
ZF9jb250cm9sbGVyX2xvY2spOw0KKwkJdWRlbGF5X3Jlc2NoZWQoMTAwKTsN
CisJCXNwaW5fbG9ja19pcnFzYXZlKCZrYmRfY29udHJvbGxlcl9sb2NrLCAq
ZmxhZ3MpOw0KIAl9IHdoaWxlICh0aW1lb3V0KTsNCiAjaWZkZWYgS0JEX1JF
UE9SVF9USU1FT1VUUw0KIAlwcmludGsoS0VSTl9XQVJOSU5HICJLZXlib2Fy
ZCB0aW1lZCBvdXRbMV1cbiIpOw0KQEAgLTQ3MSw3ICs0NzYsNyBAQA0KIAlp
bnQgcmV0cmllcyA9IDM7DQogDQogCWRvIHsNCi0JCXVuc2lnbmVkIGxvbmcg
dGltZW91dCA9IEtCRF9USU1FT1VUOw0KKwkJdW5zaWduZWQgbG9uZyB0aW1l
b3V0ID0gS0JEX1RJTUVPVVQqMTA7DQogDQogCQlhY2tub3dsZWRnZSA9IDA7
IC8qIFNldCBieSBpbnRlcnJ1cHQgcm91dGluZSBvbiByZWNlaXB0IG9mIEFD
Sy4gKi8NCiAJCXJlc2VuZCA9IDA7DQpAQCAtNDgyLDcgKzQ4Nyw3IEBADQog
CQkJCXJldHVybiAxOw0KIAkJCWlmIChyZXNlbmQpDQogCQkJCWJyZWFrOw0K
LQkJCW1kZWxheSgxKTsNCisJCQl1ZGVsYXkoMTAwKTsNCiAJCQlpZiAoIS0t
dGltZW91dCkgew0KICNpZmRlZiBLQkRfUkVQT1JUX1RJTUVPVVRTDQogCQkJ
CXByaW50ayhLRVJOX1dBUk5JTkcgIktleWJvYXJkIHRpbWVvdXRbMl1cbiIp
Ow0KQEAgLTU1NSwxMyArNTYwLDEzIEBADQogDQogc3RhdGljIGludCBfX2lu
aXQga2JkX3dhaXRfZm9yX2lucHV0KHZvaWQpDQogew0KLQlsb25nIHRpbWVv
dXQgPSBLQkRfSU5JVF9USU1FT1VUOw0KKwlsb25nIHRpbWVvdXQgPSBLQkRf
SU5JVF9USU1FT1VUKjEwOw0KIA0KIAlkbyB7DQogCQlpbnQgcmV0dmFsID0g
a2JkX3JlYWRfaW5wdXQoKTsNCiAJCWlmIChyZXR2YWwgPj0gMCkNCiAJCQly
ZXR1cm4gcmV0dmFsOw0KLQkJbWRlbGF5KDEpOw0KKwkJdWRlbGF5KDEwMCk7
DQogCX0gd2hpbGUgKC0tdGltZW91dCk7DQogCXJldHVybiAtMTsNCiB9DQpA
QCAtNTcxLDcgKzU3Niw3IEBADQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQog
DQogCXNwaW5fbG9ja19pcnFzYXZlKCZrYmRfY29udHJvbGxlcl9sb2NrLCBm
bGFncyk7DQotCWtiX3dhaXQoKTsNCisJa2Jfd2FpdCgmZmxhZ3MpOw0KIAlv
dXRiKGRhdGEsIGFkZHJlc3MpOw0KIAlzcGluX3VubG9ja19pcnFyZXN0b3Jl
KCZrYmRfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7DQogfQ0KQEAgLTU4Miw5
ICs1ODcsOSBAQA0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIA0KIAlzcGlu
X2xvY2tfaXJxc2F2ZSgma2JkX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOw0K
LQlrYl93YWl0KCk7DQorCWtiX3dhaXQoJmZsYWdzKTsNCiAJb3V0YihLQkRf
Q0NNRF9XUklURV9NT0RFLCBLQkRfQ05UTF9SRUcpOw0KLQlrYl93YWl0KCk7
DQorCWtiX3dhaXQoJmZsYWdzKTsNCiAJb3V0YihjbWQsIEtCRF9EQVRBX1JF
Ryk7DQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiZF9jb250cm9sbGVy
X2xvY2ssIGZsYWdzKTsNCiB9DQpAQCAtNzMxLDEwICs3MzYsMTAgQEANCiAJ
ICogYml0IGlzIGFsc28gc2V0IHRvIDEgaW4gdGhlIFN0YXR1cyBSZWdpc3Rl
ciwgd2UgYXNzdW1lIHRoaXMNCiAJICogY29udHJvbGxlciBoYXMgYW4gQXV4
aWxpYXJ5IFBvcnQgKGEuay5hLiBNb3VzZSBQb3J0KS4NCiAJICovDQotCWti
X3dhaXQoKTsNCisJa2Jfd2FpdCgmZmxhZ3MpOw0KIAlvdXRiKEtCRF9DQ01E
X1dSSVRFX0FVWF9PQlVGLCBLQkRfQ05UTF9SRUcpOw0KIA0KLQlrYl93YWl0
KCk7DQorCWtiX3dhaXQoJmZsYWdzKTsNCiAJb3V0YigweDVhLCBLQkRfREFU
QV9SRUcpOyAvKiAweDVhIGlzIGEgcmFuZG9tIGR1bW15IHZhbHVlLiAqLw0K
IA0KIAlkbyB7DQpAQCAtNzQ4LDcgKzc1Myw3IEBADQogCQkJfQ0KIAkJCWJy
ZWFrOw0KIAkJfQ0KLQkJbWRlbGF5KDEpOw0KKwkJdWRlbGF5KDEwMCk7DQog
CX0gd2hpbGUgKC0tbG9vcHMpOw0KIAlzcGluX3VubG9ja19pcnFyZXN0b3Jl
KCZrYmRfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7DQogDQpAQCAtNzYzLDkg
Kzc2OCw5IEBADQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQogDQogCXNwaW5f
bG9ja19pcnFzYXZlKCZrYmRfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7DQot
CWtiX3dhaXQoKTsNCisJa2Jfd2FpdCgmZmxhZ3MpOw0KIAlvdXRiKEtCRF9D
Q01EX1dSSVRFX01PVVNFLCBLQkRfQ05UTF9SRUcpOw0KLQlrYl93YWl0KCk7
DQorCWtiX3dhaXQoJmZsYWdzKTsNCiAJb3V0Yih2YWwsIEtCRF9EQVRBX1JF
Ryk7DQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiZF9jb250cm9sbGVy
X2xvY2ssIGZsYWdzKTsNCiB9DQpAQCAtNzc4LDEzICs3ODMsMTMgQEANCiAJ
dW5zaWduZWQgbG9uZyBmbGFnczsNCiANCiAJc3Bpbl9sb2NrX2lycXNhdmUo
JmtiZF9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsNCi0Ja2Jfd2FpdCgpOw0K
KwlrYl93YWl0KCZmbGFncyk7DQogCW91dGIoS0JEX0NDTURfV1JJVEVfTU9V
U0UsIEtCRF9DTlRMX1JFRyk7DQotCWtiX3dhaXQoKTsNCisJa2Jfd2FpdCgm
ZmxhZ3MpOw0KIAlvdXRiKHZhbCwgS0JEX0RBVEFfUkVHKTsNCiAJLyogd2Ug
ZXhwZWN0IGFuIEFDSyBpbiByZXNwb25zZS4gKi8NCiAJbW91c2VfcmVwbHlf
ZXhwZWN0ZWQrKzsNCi0Ja2Jfd2FpdCgpOw0KKwlrYl93YWl0KCZmbGFncyk7
DQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiZF9jb250cm9sbGVyX2xv
Y2ssIGZsYWdzKTsNCiB9DQogDQpAQCAtOTE0LDYgKzkxOSw3IEBADQogCQkJ
Z2V0X3VzZXIoYywgYnVmZmVyKyspOw0KIAkJCWF1eF93cml0ZV9kZXYoYyk7
DQogCQkJd3JpdHRlbisrOw0KKwkJCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7
DQogCQl9IHdoaWxlICgtLWNvdW50KTsNCiAJCXJldHZhbCA9IC1FSU87DQog
CQlpZiAod3JpdHRlbikgew0KLS0tIGxpbnV4L2RyaXZlcnMvdmlkZW8vdmdh
Y29uLmMub3JpZwlXZWQgTWF5IDEyIDAxOjMwOjM2IDE5OTkNCisrKyBsaW51
eC9kcml2ZXJzL3ZpZGVvL3ZnYWNvbi5jCVNhdCBKdWwgMzEgMjI6MzE6MDEg
MTk5OQ0KQEAgLTMzLDYgKzMzLDggQEANCiAgKiAgbW9yZSBkZXRhaWxzLg0K
ICAqLw0KIA0KKyNkZWZpbmUgVkdBX0xPQ0FMIDENCisNCiAjaW5jbHVkZSA8
bGludXgvY29uZmlnLmg+DQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQog
I2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQpAQCAtNTEsNiArNTMsOCBAQA0K
IA0KICNpbmNsdWRlIDxhc20vaW8uaD4NCiANCisjaW5jbHVkZSA8bGludXgv
dnRfYnVmZmVyLmg+DQorDQogDQogI2RlZmluZSBCTEFOSyAweDAwMjANCiAN
CkBAIC05Niw4ICsxMDAsOCBAQA0KIA0KIA0KIC8qIERlc2NyaXB0aW9uIG9m
IHRoZSBoYXJkd2FyZSBzaXR1YXRpb24gKi8NCi1zdGF0aWMgdW5zaWduZWQg
bG9uZyAgIHZnYV92cmFtX2Jhc2U7CQkvKiBCYXNlIG9mIHZpZGVvIG1lbW9y
eSAqLw0KLXN0YXRpYyB1bnNpZ25lZCBsb25nICAgdmdhX3ZyYW1fZW5kOwkJ
LyogRW5kIG9mIHZpZGVvIG1lbW9yeSAqLw0KK3Vuc2lnbmVkIGxvbmcgICB2
Z2FfdnJhbV9iYXNlOwkJLyogQmFzZSBvZiB2aWRlbyBtZW1vcnkgKi8NCit1
bnNpZ25lZCBsb25nICAgdmdhX3ZyYW1fZW5kOwkJLyogRW5kIG9mIHZpZGVv
IG1lbW9yeSAqLw0KIHN0YXRpYyB1MTYgICAgICAgICAgICAgdmdhX3ZpZGVv
X3BvcnRfcmVnOwkvKiBWaWRlbyByZWdpc3RlciBzZWxlY3QgcG9ydCAqLw0K
IHN0YXRpYyB1MTYgICAgICAgICAgICAgdmdhX3ZpZGVvX3BvcnRfdmFsOwkv
KiBWaWRlbyByZWdpc3RlciB2YWx1ZSBwb3J0ICovDQogc3RhdGljIHVuc2ln
bmVkIGludCAgICB2Z2FfdmlkZW9fbnVtX2NvbHVtbnM7CS8qIE51bWJlciBv
ZiB0ZXh0IGNvbHVtbnMgKi8NCkBAIC0xMTUsNiArMTE5LDcgQEANCiBzdGF0
aWMgaW50CSAgICAgICB2Z2FfdmlkZW9fZm9udF9oZWlnaHQ7DQogc3RhdGlj
IHVuc2lnbmVkIGludCAgICB2Z2Ffcm9sbGVkX292ZXIgPSAwOw0KIA0KK3N0
YXRpYyBjaGFyIHZnYV92cmFtX2NvcHlbMTI4KjEwMjRdOwkvKiBJbi1tZW1v
cnkgY29weSBvZiB2aWRlbyBtZW1vcnkgKi8NCiANCiB2b2lkIG5vX3Njcm9s
bChjaGFyICpzdHIsIGludCAqaW50cykNCiB7DQpAQCAtMjY3LDI0ICsyNzIs
MjQgQEANCiAJICoJQXJlIHRoZXJlIHNtYXJ0ZXIgbWV0aG9kcyBhcm91bmQ/
DQogCSAqLw0KIAlwID0gKHUxNiAqKXZnYV92cmFtX2Jhc2U7DQotCXNhdmVk
MSA9IHNjcl9yZWFkdyhwKTsNCi0Jc2F2ZWQyID0gc2NyX3JlYWR3KHAgKyAx
KTsNCi0Jc2NyX3dyaXRldygweEFBNTUsIHApOw0KLQlzY3Jfd3JpdGV3KDB4
NTVBQSwgcCArIDEpOw0KLQlpZiAoc2NyX3JlYWR3KHApICE9IDB4QUE1NSB8
fCBzY3JfcmVhZHcocCArIDEpICE9IDB4NTVBQSkgew0KLQkJc2NyX3dyaXRl
dyhzYXZlZDEsIHApOw0KLQkJc2NyX3dyaXRldyhzYXZlZDIsIHAgKyAxKTsN
CisJc2F2ZWQxID0gc2NyX3JlYWR3X25vbmJ1ZmZlcmVkKHApOw0KKwlzYXZl
ZDIgPSBzY3JfcmVhZHdfbm9uYnVmZmVyZWQocCArIDEpOw0KKwlzY3Jfd3Jp
dGV3X25vbmJ1ZmZlcmVkKDB4QUE1NSwgcCk7DQorCXNjcl93cml0ZXdfbm9u
YnVmZmVyZWQoMHg1NUFBLCBwICsgMSk7DQorCWlmIChzY3JfcmVhZHdfbm9u
YnVmZmVyZWQocCkgIT0gMHhBQTU1IHx8IHNjcl9yZWFkd19ub25idWZmZXJl
ZChwICsgMSkgIT0gMHg1NUFBKSB7DQorCQlzY3Jfd3JpdGV3X25vbmJ1ZmZl
cmVkKHNhdmVkMSwgcCk7DQorCQlzY3Jfd3JpdGV3X25vbmJ1ZmZlcmVkKHNh
dmVkMiwgcCArIDEpOw0KIAkJZ290byBub192Z2E7DQogCX0NCi0Jc2NyX3dy
aXRldygweDU1QUEsIHApOw0KLQlzY3Jfd3JpdGV3KDB4QUE1NSwgcCArIDEp
Ow0KLQlpZiAoc2NyX3JlYWR3KHApICE9IDB4NTVBQSB8fCBzY3JfcmVhZHco
cCArIDEpICE9IDB4QUE1NSkgew0KLQkJc2NyX3dyaXRldyhzYXZlZDEsIHAp
Ow0KLQkJc2NyX3dyaXRldyhzYXZlZDIsIHAgKyAxKTsNCisJc2NyX3dyaXRl
d19ub25idWZmZXJlZCgweDU1QUEsIHApOw0KKwlzY3Jfd3JpdGV3X25vbmJ1
ZmZlcmVkKDB4QUE1NSwgcCArIDEpOw0KKwlpZiAoc2NyX3JlYWR3X25vbmJ1
ZmZlcmVkKHApICE9IDB4NTVBQSB8fCBzY3JfcmVhZHdfbm9uYnVmZmVyZWQo
cCArIDEpICE9IDB4QUE1NSkgew0KKwkJc2NyX3dyaXRld19ub25idWZmZXJl
ZChzYXZlZDEsIHApOw0KKwkJc2NyX3dyaXRld19ub25idWZmZXJlZChzYXZl
ZDIsIHAgKyAxKTsNCiAJCWdvdG8gbm9fdmdhOw0KIAl9DQotCXNjcl93cml0
ZXcoc2F2ZWQxLCBwKTsNCi0Jc2NyX3dyaXRldyhzYXZlZDIsIHAgKyAxKTsN
CisJc2NyX3dyaXRld19ub25idWZmZXJlZChzYXZlZDEsIHApOw0KKwlzY3Jf
d3JpdGV3X25vbmJ1ZmZlcmVkKHNhdmVkMiwgcCArIDEpOw0KIA0KIAlpZiAo
dmdhX3ZpZGVvX3R5cGUgPT0gVklERU9fVFlQRV9FR0FDDQogCSAgICB8fCB2
Z2FfdmlkZW9fdHlwZSA9PSBWSURFT19UWVBFX1ZHQUMNCkBAIC0zMTgsNiAr
MzIzLDggQEANCiAJdmdhY29uX3VuaV9wYWdlZGlyWzFdKys7DQogCWlmICgh
dmdhY29uX3VuaV9wYWdlZGlyWzBdICYmIHApDQogCQljb25fc2V0X2RlZmF1
bHRfdW5pbWFwKGMtPnZjX251bSk7DQorDQorCWMtPnZjX3ZpZGVvYnVmID0g
KHVuc2lnbmVkIGxvbmcpIHZnYV92cmFtX2NvcHk7DQogfQ0KIA0KIHN0YXRp
YyBpbmxpbmUgdm9pZCB2Z2Ffc2V0X21lbV90b3Aoc3RydWN0IHZjX2RhdGEg
KmMpDQpAQCAtMzY1LDYgKzM3Miw3IEBADQogc3RhdGljIHZvaWQgdmdhY29u
X2ludmVydF9yZWdpb24oc3RydWN0IHZjX2RhdGEgKmMsIHUxNiAqcCwgaW50
IGNvdW50KQ0KIHsNCiAJaW50IGNvbCA9IHZnYV9jYW5fZG9fY29sb3I7DQor
CWludCBjdXJyY29ucyA9IGMtPnZjX251bTsNCiANCiAJd2hpbGUgKGNvdW50
LS0pIHsNCiAJCXUxNiBhID0gc2NyX3JlYWR3KHApOw0KQEAgLTM3Miw3ICsz
ODAsNyBAQA0KIAkJCWEgPSAoKGEpICYgMHg4OGZmKSB8ICgoKGEpICYgMHg3
MDAwKSA+PiA0KSB8ICgoKGEpICYgMHgwNzAwKSA8PCA0KTsNCiAJCWVsc2UN
CiAJCQlhIF49ICgoYSAmIDB4MDcwMCkgPT0gMHgwMTAwKSA/IDB4NzAwMCA6
IDB4NzcwMDsNCi0JCXNjcl93cml0ZXcoYSwgcCsrKTsNCisJCV9fc2NyX3dy
aXRldyhhLCBwKyssIGMtPnZjX251bSk7DQogCX0NCiB9DQogDQpAQCAtNDUx
LDYgKzQ1OSw3IEBADQogDQogc3RhdGljIGludCB2Z2Fjb25fc3dpdGNoKHN0
cnVjdCB2Y19kYXRhICpjKQ0KIHsNCisJaW50IGN1cnJjb25zID0gYy0+dmNf
bnVtOw0KIAkvKg0KIAkgKiBXZSBuZWVkIHRvIHNhdmUgc2NyZWVuIHNpemUg
aGVyZSBhcyBpdCdzIHRoZSBvbmx5IHdheQ0KIAkgKiB3ZSBjYW4gc3BvdCB0
aGUgc2NyZWVuIGhhcyBiZWVuIHJlc2l6ZWQgYW5kIHdlIG5lZWQgdG8NCkBA
IC02NDEsMTAgKzY1MCwxMCBAQA0KIAkJCXJldHVybiAwOw0KIAkJfQ0KIAkJ
dmdhY29uX3NldF9vcmlnaW4oYyk7DQotCQlzY3JfbWVtc2V0dygodm9pZCAq
KXZnYV92cmFtX2Jhc2UsIEJMQU5LLCBjLT52Y19zY3JlZW5idWZfc2l6ZSk7
DQorCQlfX3Njcl9tZW1zZXR3KCh2b2lkICopdmdhX3ZyYW1fYmFzZSwgQkxB
TkssIGMtPnZjX3NjcmVlbmJ1Zl9zaXplLCBjLT52Y19udW0pOw0KIAkJcmV0
dXJuIDE7DQogCWNhc2UgLTE6CQkJLyogRW50ZXJpbmcgZ3JhcGhpYyBtb2Rl
ICovDQotCQlzY3JfbWVtc2V0dygodm9pZCAqKXZnYV92cmFtX2Jhc2UsIEJM
QU5LLCBjLT52Y19zY3JlZW5idWZfc2l6ZSk7DQorCQlfX3Njcl9tZW1zZXR3
KCh2b2lkICopdmdhX3ZyYW1fYmFzZSwgQkxBTkssIGMtPnZjX3NjcmVlbmJ1
Zl9zaXplLCBjLT52Y19udW0pOw0KIAkJdmdhX2lzX2dmeCA9IDE7DQogCQly
ZXR1cm4gMTsNCiAJZGVmYXVsdDoJCQkvKiBWRVNBIGJsYW5raW5nICovDQpA
QCAtOTQwLDYgKzk0OSw3IEBADQogc3RhdGljIHZvaWQgdmdhY29uX3NhdmVf
c2NyZWVuKHN0cnVjdCB2Y19kYXRhICpjKQ0KIHsNCiAJc3RhdGljIGludCB2
Z2FfYm9vdHVwX2NvbnNvbGUgPSAwOw0KKwlpbnQgY3VycmNvbnMgPSBjLT52
Y19udW07DQogDQogCWlmICghdmdhX2Jvb3R1cF9jb25zb2xlKSB7DQogCQkv
KiBUaGlzIGlzIGEgZ3Jvc3MgaGFjaywgYnV0IGhlcmUgaXMgdGhlIG9ubHkg
cGxhY2Ugd2UgY2FuDQpAQCAtOTU0LDEwICs5NjQsMTUgQEANCiAJCXNjcl9t
ZW1jcHl3X2Zyb20oKHUxNiAqKSBjLT52Y19zY3JlZW5idWYsICh1MTYgKikg
Yy0+dmNfb3JpZ2luLCBjLT52Y19zY3JlZW5idWZfc2l6ZSk7DQogfQ0KIA0K
K3Vuc2lnbmVkIGludCBzY3JvbGxfbGF0LCBtYXhfc2Nyb2xsX2xhdCwgbWF4
X3Njcm9sbF9zaXplLCBtYXhfc2Nyb2xsX2FkZHIxLA0KK21heF9zY3JvbGxf
YWRkcjI7DQorDQogc3RhdGljIGludCB2Z2Fjb25fc2Nyb2xsKHN0cnVjdCB2
Y19kYXRhICpjLCBpbnQgdCwgaW50IGIsIGludCBkaXIsIGludCBsaW5lcykN
CiB7DQorCXVuc2lnbmVkIGxvbmcgbG9uZyB0MCwgdDE7DQogCXVuc2lnbmVk
IGxvbmcgb2xkbzsNCiAJdW5zaWduZWQgaW50IGRlbHRhOw0KKwlpbnQgY3Vy
cmNvbnMgPSBjLT52Y19udW07DQogCQ0KIAlpZiAodCB8fCBiICE9IGMtPnZj
X3Jvd3MgfHwgdmdhX2lzX2dmeCkNCiAJCXJldHVybiAwOw0KQEAgLTk3MCwx
NiArOTg1LDE5IEBADQogDQogCW9sZG8gPSBjLT52Y19vcmlnaW47DQogCWRl
bHRhID0gbGluZXMgKiBjLT52Y19zaXplX3JvdzsNCit0MCA9IHQxID0gMDsN
CiAJaWYgKGRpciA9PSBTTV9VUCkgew0KIAkJaWYgKGMtPnZjX3Njcl9lbmQg
KyBkZWx0YSA+PSB2Z2FfdnJhbV9lbmQpIHsNCi0JCQlzY3JfbWVtY3B5dygo
dTE2ICopdmdhX3ZyYW1fYmFzZSwNCi0JCQkJICAgICh1MTYgKikob2xkbyAr
IGRlbHRhKSwNCi0JCQkJICAgIGMtPnZjX3NjcmVlbmJ1Zl9zaXplIC0gZGVs
dGEpOw0KK3JkdHNjbGwodDApOw0KKwkJc2NyX21lbWNweXcoKHUxNiAqKXZn
YV92cmFtX2Jhc2UsDQorCQkJCSh1MTYgKikob2xkbyArIGRlbHRhKSwNCisJ
CQkJYy0+dmNfc2NyZWVuYnVmX3NpemUgLSBkZWx0YSk7DQorcmR0c2NsbCh0
MSk7DQogCQkJYy0+dmNfb3JpZ2luID0gdmdhX3ZyYW1fYmFzZTsNCiAJCQl2
Z2Ffcm9sbGVkX292ZXIgPSBvbGRvIC0gdmdhX3ZyYW1fYmFzZTsNCiAJCX0g
ZWxzZQ0KIAkJCWMtPnZjX29yaWdpbiArPSBkZWx0YTsNCi0JCXNjcl9tZW1z
ZXR3KCh1MTYgKikoYy0+dmNfb3JpZ2luICsgYy0+dmNfc2NyZWVuYnVmX3Np
emUgLSBkZWx0YSksIGMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIsIGRlbHRhKTsN
CisJCV9fc2NyX21lbXNldHcoKHUxNiAqKShjLT52Y19vcmlnaW4gKyBjLT52
Y19zY3JlZW5idWZfc2l6ZSAtIGRlbHRhKSwgYy0+dmNfdmlkZW9fZXJhc2Vf
Y2hhciwgZGVsdGEsIGMtPnZjX251bSk7DQogCX0gZWxzZSB7DQogCQlpZiAo
b2xkbyAtIGRlbHRhIDwgdmdhX3ZyYW1fYmFzZSkgew0KIAkJCXNjcl9tZW1t
b3ZldygodTE2ICopKHZnYV92cmFtX2VuZCAtIGMtPnZjX3NjcmVlbmJ1Zl9z
aXplICsgZGVsdGEpLA0KQEAgLTk5MCw4ICsxMDA4LDE4IEBADQogCQl9IGVs
c2UNCiAJCQljLT52Y19vcmlnaW4gLT0gZGVsdGE7DQogCQljLT52Y19zY3Jf
ZW5kID0gYy0+dmNfb3JpZ2luICsgYy0+dmNfc2NyZWVuYnVmX3NpemU7DQot
CQlzY3JfbWVtc2V0dygodTE2ICopKGMtPnZjX29yaWdpbiksIGMtPnZjX3Zp
ZGVvX2VyYXNlX2NoYXIsIGRlbHRhKTsNCisJCV9fc2NyX21lbXNldHcoKHUx
NiAqKShjLT52Y19vcmlnaW4pLCBjLT52Y192aWRlb19lcmFzZV9jaGFyLCBk
ZWx0YSwgYy0+dmNfbnVtKTsNCiAJfQ0KKw0KK3Njcm9sbF9sYXQgPSAodW5z
aWduZWQgaW50KSh0MS10MCkgLyA0MDA7DQoraWYgKG1heF9zY3JvbGxfbGF0
IDwgc2Nyb2xsX2xhdCkgew0KKwlpbnQgY3VycmNvbnMgPSBjLT52Y19udW07
DQorCW1heF9zY3JvbGxfbGF0ID0gc2Nyb2xsX2xhdDsNCisJbWF4X3Njcm9s
bF9hZGRyMSA9ICh1bnNpZ25lZCBpbnQpdjJtKCh1bnNpZ25lZCBzaG9ydCAq
KXZnYV92cmFtX2Jhc2UpOw0KKwltYXhfc2Nyb2xsX2FkZHIyID0gKHVuc2ln
bmVkIGludCl2Mm0oKHVuc2lnbmVkIHNob3J0ICopKG9sZG8gKyBkZWx0YSkp
Ow0KKwltYXhfc2Nyb2xsX3NpemUgPSAodW5zaWduZWQgaW50KShjLT52Y19z
Y3JlZW5idWZfc2l6ZSAtIGRlbHRhKTsNCit9DQorDQogCWMtPnZjX3Njcl9l
bmQgPSBjLT52Y19vcmlnaW4gKyBjLT52Y19zY3JlZW5idWZfc2l6ZTsNCiAJ
Yy0+dmNfdmlzaWJsZV9vcmlnaW4gPSBjLT52Y19vcmlnaW47DQogCXZnYV9z
ZXRfbWVtX3RvcChjKTsNCi0tLSBsaW51eC9hcmNoL2kzODYvbW0vZmF1bHQu
Yy5vcmlnCVN1biBOb3YgMjIgMTg6Mzg6MTkgMTk5OA0KKysrIGxpbnV4L2Fy
Y2gvaTM4Ni9tbS9mYXVsdC5jCVNhdCBKdWwgMzEgMjI6MzE6MDEgMTk5OQ0K
QEAgLTE3NCw3ICsxNzQsNyBAQA0KIAkJCXRzay0+dHNzLnNjcmVlbl9iaXRt
YXAgfD0gMSA8PCBiaXQ7DQogCX0NCiAJdXAoJm1tLT5tbWFwX3NlbSk7DQot
CXJldHVybjsNCisJZ290byBvdXQ7DQogDQogLyoNCiAgKiBTb21ldGhpbmcg
dHJpZWQgdG8gYWNjZXNzIG1lbW9yeSB0aGF0IGlzbid0IGluIG91ciBtZW1v
cnkgbWFwLi4NCkBAIC0xODksNyArMTg5LDcgQEANCiAJCXRzay0+dHNzLmVy
cm9yX2NvZGUgPSBlcnJvcl9jb2RlOw0KIAkJdHNrLT50c3MudHJhcF9ubyA9
IDE0Ow0KIAkJZm9yY2Vfc2lnKFNJR1NFR1YsIHRzayk7DQotCQlyZXR1cm47
DQorCQlnb3RvIG91dDsNCiAJfQ0KIA0KIAkvKg0KQEAgLTIwMiw3ICsyMDIs
NyBAQA0KIA0KIAkJaWYgKG5yID09IDYpIHsNCiAJCQlkb19pbnZhbGlkX29w
KHJlZ3MsIDApOw0KLQkJCXJldHVybjsNCisJCQlnb3RvIG91dDsNCiAJCX0N
CiAJfQ0KIA0KQEAgLTIxMCw3ICsyMTAsNyBAQA0KIAkvKiBBcmUgd2UgcHJl
cGFyZWQgdG8gaGFuZGxlIHRoaXMga2VybmVsIGZhdWx0PyAgKi8NCiAJaWYg
KChmaXh1cCA9IHNlYXJjaF9leGNlcHRpb25fdGFibGUocmVncy0+ZWlwKSkg
IT0gMCkgew0KIAkJcmVncy0+ZWlwID0gZml4dXA7DQotCQlyZXR1cm47DQor
CQlnb3RvIG91dDsNCiAJfQ0KIA0KIC8qDQpAQCAtMjI5LDcgKzIyOSw3IEBA
DQogCQkgKiBDUFUgc3RhdGUgb24gY2VydGFpbiBidWdneSBwcm9jZXNzb3Jz
Lg0KIAkJICovDQogCQlwcmludGsoIk9rIik7DQotCQlyZXR1cm47DQorCQln
b3RvIG91dDsNCiAJfQ0KIA0KIAlpZiAoYWRkcmVzcyA8IFBBR0VfU0laRSkN
CkBAIC0yNzAsNCArMjcwLDUgQEANCiAJLyogS2VybmVsIG1vZGU/IEhhbmRs
ZSBleGNlcHRpb25zIG9yIGRpZSAqLw0KIAlpZiAoIShlcnJvcl9jb2RlICYg
NCkpDQogCQlnb3RvIG5vX2NvbnRleHQ7DQorb3V0Og0KIH0NCi0tLSBsaW51
eC9hcmNoL2kzODYvbW0vaW5pdC5jLm9yaWcJVGh1IEphbiAyMSAyMDoyODo0
MCAxOTk5DQorKysgbGludXgvYXJjaC9pMzg2L21tL2luaXQuYwlTYXQgSnVs
IDMxIDIyOjMxOjAxIDE5OTkNCkBAIC00ODgsNiArNDg4LDEyIEBADQogCXZh
bC0+ZnJlZXJhbSA9IG5yX2ZyZWVfcGFnZXMgPDwgUEFHRV9TSElGVDsNCiAJ
dmFsLT5idWZmZXJyYW0gPSBidWZmZXJtZW07DQogCXdoaWxlIChpLS0gPiAw
KSAgew0KKwkJLyoNCisJCSAqIHNpX21lbWluZm8oKSBjYW5ub3QgYmUgZXhh
Y3QsIGJ1dCBpdCBjYW4gY2F1c2UgX2xvbmdfDQorCQkgKiBzY2hlZHVsaW5n
IGxhdGVuY2llcyBvbiBiaWcgbWVtb3J5IGJveGVzLg0KKwkJICovDQorCQlp
ZiAoIShpICYgMzEpKQ0KKwkJCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQog
CQlpZiAoUGFnZVJlc2VydmVkKG1lbV9tYXAraSkpDQogCQkJY29udGludWU7
DQogCQl2YWwtPnRvdGFscmFtKys7DQotLS0gbGludXgvYXJjaC9pMzg2L2xp
Yi91c2VyY29weS5jLm9yaWcJU2F0IEp1bCAzMSAxMjo1ODoxOSAxOTk5DQor
KysgbGludXgvYXJjaC9pMzg2L2xpYi91c2VyY29weS5jCVNhdCBKdWwgMzEg
MjI6MzE6MDEgMTk5OQ0KQEAgLTEwLDYgKzEwLDcgQEANCiB1bnNpZ25lZCBs
b25nDQogX19nZW5lcmljX2NvcHlfdG9fdXNlcih2b2lkICp0bywgY29uc3Qg
dm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQ0KIHsNCisJY29uZGl0aW9u
YWxfc2NoZWR1bGUoKTsNCiAJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUs
IHRvLCBuKSkNCiAJCV9fY29weV91c2VyKHRvLGZyb20sbik7DQogCXJldHVy
biBuOw0KQEAgLTE4LDYgKzE5LDcgQEANCiB1bnNpZ25lZCBsb25nDQogX19n
ZW5lcmljX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpm
cm9tLCB1bnNpZ25lZCBsb25nIG4pDQogew0KKwljb25kaXRpb25hbF9zY2hl
ZHVsZSgpOw0KIAlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBu
KSkNCiAJCV9fY29weV91c2VyX3plcm9pbmcodG8sZnJvbSxuKTsNCiAJcmV0
dXJuIG47DQpAQCAtNjAsNiArNjIsNyBAQA0KIF9fc3RybmNweV9mcm9tX3Vz
ZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGxvbmcgY291bnQpDQog
ew0KIAlsb25nIHJlczsNCisJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJ
X19kb19zdHJuY3B5X2Zyb21fdXNlcihkc3QsIHNyYywgY291bnQsIHJlcyk7
DQogCXJldHVybiByZXM7DQogfQ0KQEAgLTY4LDYgKzcxLDcgQEANCiBzdHJu
Y3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgbG9u
ZyBjb3VudCkNCiB7DQogCWxvbmcgcmVzID0gLUVGQVVMVDsNCisJY29uZGl0
aW9uYWxfc2NoZWR1bGUoKTsNCiAJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVB
RCwgc3JjLCAxKSkNCiAJCV9fZG9fc3RybmNweV9mcm9tX3VzZXIoZHN0LCBz
cmMsIGNvdW50LCByZXMpOw0KIAlyZXR1cm4gcmVzOw0KQEAgLTEwMiw2ICsx
MDYsNyBAQA0KIHVuc2lnbmVkIGxvbmcNCiBjbGVhcl91c2VyKHZvaWQgKnRv
LCB1bnNpZ25lZCBsb25nIG4pDQogew0KKwljb25kaXRpb25hbF9zY2hlZHVs
ZSgpOw0KIAlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQ0K
IAkJX19kb19jbGVhcl91c2VyKHRvLCBuKTsNCiAJcmV0dXJuIG47DQpAQCAt
MTI0LDYgKzEyOSw3IEBADQogew0KIAl1bnNpZ25lZCBsb25nIHJlczsNCiAN
CisJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJX19hc21fXyBfX3ZvbGF0
aWxlX18oDQogCQkiMDoJcmVwbmU7IHNjYXNiXG4iDQogCQkiCW5vdGwgJTBc
biINCg==
---1247997369-159415807-933451244=:25534--

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