[patch] lowlatency-2.2.10-N2, 'multimedia latency improvement' patch

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Sun, 1 Aug 1999 00:53:14 +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-469175437-933461258=:28929
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.LNX.3.96.990801004803.28929E@chiara.csoma.elte.hu>

this is the next version of the 'low latencies' patch. Changes relative to
-M6: it fixes long latency code paths in various dcache, inode cache,
buffer cache and page cache functions - without impacting functionality.
There are still some places left to fix (most notably some file-IO and
buffer-cache parts), but the bulk of it is covered by this patch. Later on
i plan to rewrite some functions completely, such as the si_*info() ones.

-- mingo

---1247997369-469175437-933461258=:28929
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="lowlatency-2.2.10-N2"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.990801004738.28929C@chiara.csoma.elte.hu>
Content-Description:

LS0tIGxpbnV4L2ZzL3Byb2MvYXJyYXkuYy5vcmlnCU1vbiBKdWwgMjYgMTI6
Mzk6MTAgMTk5OQ0KKysrIGxpbnV4L2ZzL3Byb2MvYXJyYXkuYwlTdW4gQXVn
ICAxIDAxOjAwOjE1IDE5OTkNCkBAIC05NjMsNiArOTYzLDggQEANCiAJZG8g
ew0KIAkJcHRlX3QgcGFnZSA9ICpwdGU7DQogDQorCQljb25kaXRpb25hbF9z
Y2hlZHVsZSgpOw0KKw0KIAkJYWRkcmVzcyArPSBQQUdFX1NJWkU7DQogCQlw
dGUrKzsNCiAJCWlmIChwdGVfbm9uZShwYWdlKSkNCi0tLSBsaW51eC9mcy9l
eHQyL25hbWVpLmMub3JpZwlGcmkgTWF5IDE0IDA4OjI1OjU4IDE5OTkNCisr
KyBsaW51eC9mcy9leHQyL25hbWVpLmMJU3VuIEF1ZyAgMSAwMTowMDoxNSAx
OTk5DQpAQCAtMTQ3LDYgKzE0Nyw3IEBADQogCQkJb2Zmc2V0ICs9IGRlX2xl
bjsNCiAJCQlkZSA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqKQ0KIAkJ
CQkoKGNoYXIgKikgZGUgKyBkZV9sZW4pOw0KKwkJCWNvbmRpdGlvbmFsX3Nj
aGVkdWxlKCk7DQogCQl9DQogDQogCQlicmVsc2UgKGJoKTsNCi0tLSBsaW51
eC9mcy9leGVjLmMub3JpZwlTdW4gSnVuIDEzIDE5OjUwOjA0IDE5OTkNCisr
KyBsaW51eC9mcy9leGVjLmMJU3VuIEF1ZyAgMSAwMTowMDoxNiAxOTk5DQpA
QCAtMjkxLDYgKzI5MSw3IEBADQogCQkJc3RyICs9IGJ5dGVzX3RvX2NvcHk7
DQogCQkJbGVuIC09IGJ5dGVzX3RvX2NvcHk7DQogCQl9DQorCQljb25kaXRp
b25hbF9zY2hlZHVsZSgpOw0KIAl9DQogCWlmIChmcm9tX2ttZW09PTIpDQog
CQlzZXRfZnMob2xkX2ZzKTsNCi0tLSBsaW51eC9mcy9idWZmZXIuYy5vcmln
CVRodSBNYXkgMTMgMjI6MTQ6MDQgMTk5OQ0KKysrIGxpbnV4L2ZzL2J1ZmZl
ci5jCVN1biBBdWcgIDEgMDE6MDA6MTYgMTk5OQ0KQEAgLTE2OSw2ICsxNjks
NyBAQA0KIAlkbyB7DQogCQlyZXRyeSA9IDA7DQogcmVwZWF0Og0KKwkJICBy
dW5fdGFza19xdWV1ZSgmdHFfZGlzayk7DQogCQkvKiBXZSBzZWFyY2ggYWxs
IGxpc3RzIGFzIGEgZmFpbHNhZmUgbWVjaGFuaXNtLCBub3QgYmVjYXVzZSB3
ZSBleHBlY3QNCiAJCSAqIHRoZXJlIHRvIGJlIGRpcnR5IGJ1ZmZlcnMgb24g
YW55IG9mIHRoZSBvdGhlciBsaXN0cy4NCiAJCSAqLw0KQEAgLTE3Niw2ICsx
NzcsMTEgQEANCiAJCWlmICghYmgpDQogCQkJZ290byByZXBlYXQyOw0KIAkJ
Zm9yIChpID0gbnJfYnVmZmVyc190eXBlW0JVRl9ESVJUWV0qMiA7IGktLSA+
IDAgOyBiaCA9IG5leHQpIHsNCisJCQlpZiAoY3VycmVudC0+bmVlZF9yZXNj
aGVkKSB7DQorCQkJCXNjaGVkdWxlKCk7DQorCQkJCWdvdG8gcmVwZWF0Ow0K
KwkJCX0NCisJCSAgCXJ1bl90YXNrX3F1ZXVlKCZ0cV9kaXNrKTsNCiAJCQlp
ZiAoYmgtPmJfbGlzdCAhPSBCVUZfRElSVFkpDQogCQkJCWdvdG8gcmVwZWF0
Ow0KIAkJCW5leHQgPSBiaC0+Yl9uZXh0X2ZyZWU7DQpAQCAtMjMxLDYgKzIz
NywxMSBAQA0KIAkJaWYgKCFiaCkNCiAJCQlicmVhazsNCiAJCWZvciAoaSA9
IG5yX2J1ZmZlcnNfdHlwZVtCVUZfTE9DS0VEXSoyIDsgaS0tID4gMCA7IGJo
ID0gbmV4dCkgew0KKwkJCWlmIChjdXJyZW50LT5uZWVkX3Jlc2NoZWQpIHsN
CisJCQkJc2NoZWR1bGUoKTsNCisJCQkJZ290byByZXBlYXQyOw0KKwkJCX0N
CisJCSAgCXJ1bl90YXNrX3F1ZXVlKCZ0cV9kaXNrKTsNCiAJCQlpZiAoYmgt
PmJfbGlzdCAhPSBCVUZfTE9DS0VEKQ0KIAkJCQlnb3RvIHJlcGVhdDI7DQog
CQkJbmV4dCA9IGJoLT5iX25leHRfZnJlZTsNCkBAIC04MDgsNiArODE5LDcg
QEANCiANCiAJaWYgKGJ1Zi0+Yl9jb3VudCkgew0KIAkJYnVmLT5iX2NvdW50
LS07DQorCQljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAkJcmV0dXJuOw0K
IAl9DQogCXByaW50aygiVkZTOiBicmVsc2U6IFRyeWluZyB0byBmcmVlIGZy
ZWUgYnVmZmVyXG4iKTsNCkBAIC04MjksNiArODQxLDcgQEANCiAJYnVmLT5i
X3N0YXRlID0gMDsNCiAJcmVtb3ZlX2Zyb21fcXVldWVzKGJ1Zik7DQogCXB1
dF9sYXN0X2ZyZWUoYnVmKTsNCisJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsN
CiB9DQogDQogLyoNCkBAIC0xNjAyLDYgKzE2MTUsMTEgQEANCiAJCWJoID0g
bHJ1X2xpc3Rbbmxpc3RdOw0KIAkJaWYoYmgpIA0KIAkJCSBmb3IgKGkgPSBu
cl9idWZmZXJzX3R5cGVbbmxpc3RdOyBpLS0gPiAwOyBiaCA9IG5leHQpIHsN
CisJCQkJaWYgKGN1cnJlbnQtPm5lZWRfcmVzY2hlZCkgew0KKwkJCQkJc2No
ZWR1bGUoKTsNCisJCQkJCWdvdG8gcmVwZWF0Ow0KKwkJCQl9DQorCQkgIAkJ
cnVuX3Rhc2tfcXVldWUoJnRxX2Rpc2spOw0KIAkJCQkgLyogV2UgbWF5IGhh
dmUgc3RhbGxlZCB3aGlsZSB3YWl0aW5nIGZvciBJL08gdG8gY29tcGxldGUu
ICovDQogCQkJCSBpZihiaC0+Yl9saXN0ICE9IG5saXN0KSBnb3RvIHJlcGVh
dDsNCiAJCQkJIG5leHQgPSBiaC0+Yl9uZXh0X2ZyZWU7DQpAQCAtMTc1MCwx
MSArMTc2OCwxMiBAQA0KIAkJIHsNCiAJCQkgbmRpcnR5ID0gMDsNCiAJCSBy
ZXBlYXQ6DQotDQogCQkJIGJoID0gbHJ1X2xpc3Rbbmxpc3RdOw0KIAkJCSBp
ZihiaCkgDQogCQkJCSAgZm9yIChpID0gbnJfYnVmZmVyc190eXBlW25saXN0
XTsgaS0tID4gMCAmJiBuZGlydHkgPCBiZGZfcHJtLmJfdW4ubmRpcnR5OyAN
CiAJCQkJICAgICAgIGJoID0gbmV4dCkgew0KKwkJCSAJCSAgY29uZGl0aW9u
YWxfc2NoZWR1bGUoKTsNCisJCQkJCSAgcnVuX3Rhc2tfcXVldWUoJnRxX2Rp
c2spOw0KIAkJCQkJICAvKiBXZSBtYXkgaGF2ZSBzdGFsbGVkIHdoaWxlIHdh
aXRpbmcgZm9yIEkvTyB0byBjb21wbGV0ZS4gKi8NCiAJCQkJCSAgaWYoYmgt
PmJfbGlzdCAhPSBubGlzdCkgZ290byByZXBlYXQ7DQogCQkJCQkgIG5leHQg
PSBiaC0+Yl9uZXh0X2ZyZWU7DQotLS0gbGludXgvZnMvZGNhY2hlLmMub3Jp
ZwlNb24gSnVsIDI2IDEyOjM2OjQzIDE5OTkNCisrKyBsaW51eC9mcy9kY2Fj
aGUuYwlTdW4gQXVnICAxIDAxOjAwOjE2IDE5OTkNCkBAIC00MSw3ICs0MSw3
IEBADQogICogVGhpcyBoYXNoLWZ1bmN0aW9uIHRyaWVzIHRvIGF2b2lkIGxv
c2luZyB0b28gbWFueSBiaXRzIG9mIGhhc2gNCiAgKiBpbmZvcm1hdGlvbiwg
eWV0IGF2b2lkIHVzaW5nIGEgcHJpbWUgaGFzaC1zaXplIG9yIHNpbWlsYXIu
DQogICovDQotI2RlZmluZSBEX0hBU0hCSVRTICAgICAxMA0KKyNkZWZpbmUg
RF9IQVNIQklUUyAgICAgMTQNCiAjZGVmaW5lIERfSEFTSFNJWkUgICAgICgx
VUwgPDwgRF9IQVNIQklUUykNCiAjZGVmaW5lIERfSEFTSE1BU0sgICAgIChE
X0hBU0hTSVpFLTEpDQogDQpAQCAtMjE0LDYgKzIxNCw3IEBADQogCWlmIChw
YWdlX2NvdW50KQ0KIAkJbWF4X3ZhbHVlID0gLTE7DQogDQorcmVzdGFydDoN
CiAJbmV4dCA9IHRhaWwtPnByZXY7DQogCXdoaWxlIChuZXh0ICE9ICZkZW50
cnlfdW51c2VkICYmIGRlcHRoLS0pIHsNCiAJCXN0cnVjdCBsaXN0X2hlYWQg
KnRtcCA9IG5leHQ7DQpAQCAtMjIxLDYgKzIyMiwxNiBAQA0KIAkJc3RydWN0
IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsNCiAJCXVuc2lnbmVk
IGxvbmcgdmFsdWUgPSAwOwkNCiANCisJCS8qDQorCQkgKiByZXNjaGVkdWxl
LCB0aGVyZSBjYW4gYmUgbWFueSBkZW50cmllcyBhcm91bmQgLi4uDQorCQkg
KiBXZSBjYW4gcmVzdGFydCBhdCAndGFpbCcgd2l0aG91dCBpbnRyb2R1Y2lu
ZyBhZGRpdGlvbmFsDQorCQkgKiB3b3JrLCBiZWNhdXNlIGxpc3QgZW50cmll
cyBhcmUgcmVtb3ZlZCBhcyB3ZSBwcm9jZXNzIHRoZW0uDQorCQkgKi8NCisJ
CWlmIChjdXJyZW50LT5uZWVkX3Jlc2NoZWQpIHsNCisJCQlzY2hlZHVsZSgp
Ow0KKwkJCWdvdG8gcmVzdGFydDsNCisJCX0NCisNCiAJCW5leHQgPSB0bXAt
PnByZXY7DQogCQlpZiAoZGVudHJ5LT5kX2NvdW50KSB7DQogCQkJZGVudHJ5
X3N0YXQubnJfdW51c2VkLS07DQpAQCAtMjg5LDYgKzMwMCw5IEBADQogCQlz
dHJ1Y3QgZGVudHJ5ICpkZW50cnk7DQogCQlzdHJ1Y3QgbGlzdF9oZWFkICp0
bXAgPSBkZW50cnlfdW51c2VkLnByZXY7DQogDQorCQkvKg0KKwkJICogVG91
Z2ggdG8gbWFrZSBwcmVlbXB0YWJsZSBhcyB3ZWxsIC4uLg0KKwkJICovDQog
CQlpZiAodG1wID09ICZkZW50cnlfdW51c2VkKQ0KIAkJCWJyZWFrOw0KIAkJ
ZGVudHJ5X3N0YXQubnJfdW51c2VkLS07DQpAQCAtMzAwLDYgKzMxNCw3IEBA
DQogCQkJaWYgKCEtLWNvdW50KQ0KIAkJCQlicmVhazsNCiAJCX0NCisJCWNv
bmRpdGlvbmFsX3NjaGVkdWxlKCk7DQogCX0NCiB9DQogDQpAQCAtMzI0LDgg
KzMzOSwxNCBAQA0KIAkgKiBQYXNzIG9uZSAuLi4gbW92ZSB0aGUgZGVudHJp
ZXMgZm9yIHRoZSBzcGVjaWZpZWQNCiAJICogc3VwZXJibG9jayB0byB0aGUg
bW9zdCByZWNlbnQgZW5kIG9mIHRoZSB1bnVzZWQgbGlzdC4NCiAJICovDQor
cmVzdGFydDoNCiAJbmV4dCA9IGRlbnRyeV91bnVzZWQubmV4dDsNCiAJd2hp
bGUgKG5leHQgIT0gJmRlbnRyeV91bnVzZWQpIHsNCisJCWlmIChjdXJyZW50
LT5uZWVkX3Jlc2NoZWQpIHsNCisJCQlzY2hlZHVsZSgpOw0KKwkJCWdvdG8g
cmVzdGFydDsNCisJCX0NCisNCiAJCXRtcCA9IG5leHQ7DQogCQluZXh0ID0g
dG1wLT5uZXh0Ow0KIAkJZGVudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVj
dCBkZW50cnksIGRfbHJ1KTsNCkBAIC00MTUsNiArNDM2LDkgQEANCiAJCXN0
cnVjdCBsaXN0X2hlYWQgKnRtcCA9IG5leHQ7DQogCQlzdHJ1Y3QgZGVudHJ5
ICpkZW50cnkgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGRlbnRyeSwgZF9j
aGlsZCk7DQogCQluZXh0ID0gdG1wLT5uZXh0Ow0KKwkJLyoNCisJCSAqIFRv
dWdoIG9uZSB0byBtYWtlIHByZWVtcHRhYmxlIC4uLg0KKwkJICovDQogCQlp
ZiAoIWRlbnRyeS0+ZF9jb3VudCkgew0KIAkJCWxpc3RfZGVsKCZkZW50cnkt
PmRfbHJ1KTsNCiAJCQlsaXN0X2FkZCgmZGVudHJ5LT5kX2xydSwgZGVudHJ5
X3VudXNlZC5wcmV2KTsNCi0tLSBsaW51eC9mcy9pbm9kZS5jLm9yaWcJVHVl
IE1heSAgNCAxOTo1NzoxMiAxOTk5DQorKysgbGludXgvZnMvaW5vZGUuYwlT
dW4gQXVnICAxIDAxOjAwOjE2IDE5OTkNCkBAIC05Nyw3ICs5Nyw3IEBADQog
CX0NCiB9DQogDQotc3RhdGljIHZvaWQgX193YWl0X29uX2lub2RlKHN0cnVj
dCBpbm9kZSAqIGlub2RlKQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3dhaXRf
b25faW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpDQogew0KIAlzdHJ1Y3Qg
d2FpdF9xdWV1ZSB3YWl0ID0geyBjdXJyZW50LCBOVUxMIH07DQogDQpAQCAt
MTEyLDggKzExMiw5IEBADQogCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5O
SU5HOw0KIH0NCiANCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9vbl9pbm9k
ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KK3N0YXRpYyB2b2lkIHdhaXRfb25f
aW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkNCiB7DQorCWNvbmRpdGlvbmFs
X3NjaGVkdWxlKCk7DQogCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTE9DSykN
CiAJCV9fd2FpdF9vbl9pbm9kZShpbm9kZSk7DQogfQ0KQEAgLTE1Myw2ICsx
NTQsNyBAQA0KIAkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOw0KIA0KIAkJ
d3JpdGVfaW5vZGUoaW5vZGUpOw0KKwkJY29uZGl0aW9uYWxfc2NoZWR1bGUo
KTsNCiANCiAJCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7DQogCQlpbm9kZS0+
aV9zdGF0ZSAmPSB+SV9MT0NLOw0KQEAgLTI2Myw2ICsyNjUsNyBAQA0KIAkJ
CWJyZWFrOw0KIAkJaW5vZGUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGlu
b2RlLCBpX2xpc3QpOw0KIAkJY2xlYXJfaW5vZGUoaW5vZGUpOw0KKwkJY29u
ZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJCWNvdW50Kys7DQogCX0NCiANCkBA
IC0zNDIsMjEgKzM0NSwzNyBAQA0KIHN0YXRpYyBpbnQgZnJlZV9pbm9kZXMo
dm9pZCkNCiB7DQogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdCwgKmVudHJ5LCAq
ZnJlZWFibGUgPSAmbGlzdDsNCi0JaW50IGZvdW5kID0gMDsNCisJLyoNCisJ
ICogV2UgZnJlZSBhdCBtb3N0IDEwMjQgaW5vZGVzIGF0IG9uY2UgLSBmcmVl
aW5nIHRvbyBtYW55DQorCSAqIGludHJvZHVjZXMgdmVyeSBuYXN0eSBzY2hl
ZHVsaW5nIGxhdGVuY2llcy4NCisJICovDQorCWludCBmb3VuZCA9IDAsIGNv
dW50ID0gMTI4Ow0KIA0KIAlJTklUX0xJU1RfSEVBRChmcmVlYWJsZSk7DQog
CWVudHJ5ID0gaW5vZGVfaW5fdXNlLm5leHQ7DQogCXdoaWxlIChlbnRyeSAh
PSAmaW5vZGVfaW5fdXNlKSB7DQogCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAg
PSBlbnRyeTsNCi0NCisJLyoNCisJICogVG91Z2ggb25lIHRvIHRpbWUtbGlt
aXQgLi4uDQorCSAqLw0KIAkJZW50cnkgPSBlbnRyeS0+bmV4dDsNCi0JCWlm
ICghQ0FOX1VOVVNFKElOT0RFKHRtcCkpKQ0KKwkJaWYgKCFDQU5fVU5VU0Uo
SU5PREUodG1wKSkpIHsNCisJCQlpZiAoY3VycmVudC0+bmVlZF9yZXNjaGVk
KSB7DQorCQkJCUlOT0RFKHRtcCktPmlfY291bnQrKzsNCisJCQkJc3Bpbl91
bmxvY2soJmlub2RlX2xvY2spOw0KKwkJCQlzY2hlZHVsZSgpOw0KKwkJCQlz
cGluX2xvY2soJmlub2RlX2xvY2spOw0KKwkJCQlJTk9ERSh0bXApLT5pX2Nv
dW50LS07DQorCQkJfQ0KIAkJCWNvbnRpbnVlOw0KKwkJfQ0KIAkJbGlzdF9k
ZWwodG1wKTsNCiAJCWxpc3RfZGVsKCZJTk9ERSh0bXApLT5pX2hhc2gpOw0K
IAkJSU5JVF9MSVNUX0hFQUQoJklOT0RFKHRtcCktPmlfaGFzaCk7DQogCQls
aXN0X2FkZCh0bXAsIGZyZWVhYmxlKTsNCiAJCWZvdW5kID0gMTsNCisJCWlm
ICghLS1jb3VudCkNCisJCQlicmVhazsNCiAJfQ0KIA0KIAlpZiAoZm91bmQp
DQotLS0gbGludXgvZnMvc3VwZXIuYy5vcmlnCUZyaSBNYXkgMTQgMDg6MjU6
NTggMTk5OQ0KKysrIGxpbnV4L2ZzL3N1cGVyLmMJU3VuIEF1ZyAgMSAwMTow
MDoxNiAxOTk5DQpAQCAtNDQ1LDYgKzQ0NSw3IEBADQogCQlpZiAoIXNiLT5z
X2RpcnQpDQogCQkJY29udGludWU7DQogCQkvKiBOLkIuIFNob3VsZCBsb2Nr
IHRoZSBzdXBlcmJsb2NrIHdoaWxlIHdyaXRpbmcgKi8NCisJCWNvbmRpdGlv
bmFsX3NjaGVkdWxlKCk7DQogCQl3YWl0X29uX3N1cGVyKHNiKTsNCiAJCWlm
ICghc2ItPnNfZGV2IHx8ICFzYi0+c19kaXJ0KQ0KIAkJCWNvbnRpbnVlOw0K
LS0tIGxpbnV4L2ZzL3BpcGUuYy5vcmlnCVNhdCBKdWwgMzEgMTE6NTE6MjMg
MTk5OQ0KKysrIGxpbnV4L2ZzL3BpcGUuYwlTdW4gQXVnICAxIDAxOjAwOjE2
IDE5OTkNCkBAIC0xMDcsNiArMTA3LDcgQEANCiAJCXJldHVybiAtRVJFU1RB
UlRTWVM7DQogCX0NCiAJd2hpbGUgKGNvdW50PjApIHsNCisJCWNvbmRpdGlv
bmFsX3NjaGVkdWxlKCk7DQogCQl3aGlsZSAoKFBJUEVfRlJFRSgqaW5vZGUp
IDwgZnJlZSkgfHwgUElQRV9MT0NLKCppbm9kZSkpIHsNCiAJCQlpZiAoIVBJ
UEVfUkVBREVSUygqaW5vZGUpKSB7IC8qIG5vIHJlYWRlcnMgKi8NCiAJCQkJ
c2VuZF9zaWcoU0lHUElQRSxjdXJyZW50LDApOw0KLS0tIGxpbnV4L2tlcm5l
bC9zY2hlZC5jLm9yaWcJTW9uIE1heSAxMCAxODo1NToyMSAxOTk5DQorKysg
bGludXgva2VybmVsL3NjaGVkLmMJU3VuIEF1ZyAgMSAwMTowMDoxNiAxOTk5
DQpAQCAtMTkxNCwxMCArMTkxNCwxMyBAQA0KIAkJLyoNCiAJCSAqIFNob3J0
IGRlbGF5IHJlcXVlc3RzIHVwIHRvIDIgbXMgd2lsbCBiZSBoYW5kbGVkIHdp
dGgNCiAJCSAqIGhpZ2ggcHJlY2lzaW9uIGJ5IGEgYnVzeSB3YWl0IGZvciBh
bGwgcmVhbC10aW1lIHByb2Nlc3Nlcy4NCisJCSAqIEJ1dCBldmVuIHJlYWwt
dGltZSBwcm9jZXNzZXMgaGF2ZSB0byBiZSBwcmVlbXB0ZWQgYnkgYW4NCisJ
CSAqIGV2ZW4gaGlnaGVyIHByaW9yaXR5IFJULXRocmVhZCwgc28gd2Ugc2xl
ZXAgaW4gc2hvcnQgMTANCisJCSAqIHVzZWMgcGVyaW9kcyBhbmQgcmVjaGVj
ayBuZWVkX3Jlc2NoZWQuDQogCQkgKg0KIAkJICogSXRzIGltcG9ydGFudCBv
biBTTVAgbm90IHRvIGRvIHRoaXMgaG9sZGluZyBsb2Nrcy4NCiAJCSAqLw0K
LQkJdWRlbGF5KCh0LnR2X25zZWMgKyA5OTkpIC8gMTAwMCk7DQorCQl1ZGVs
YXlfcmVzY2hlZCgodC50dl9uc2VjICsgOTk5KSAvIDEwMDApOw0KIAkJcmV0
dXJuIDA7DQogCX0NCiANCi0tLSBsaW51eC9rZXJuZWwvZm9yay5jLm9yaWcJ
U2F0IEp1bCAzMSAwOTozOToxNSAxOTk5DQorKysgbGludXgva2VybmVsL2Zv
cmsuYwlTdW4gQXVnICAxIDAxOjAwOjE2IDE5OTkNCkBAIC0yNzYsNiArMjc2
LDcgQEANCiAJCXBwcmV2ID0gJnRtcC0+dm1fbmV4dDsNCiAJCWlmIChyZXR2
YWwpDQogCQkJZ290byBmYWlsX25vbWVtOw0KKwkJY29uZGl0aW9uYWxfc2No
ZWR1bGUoKTsNCiAJfQ0KIAlyZXR2YWwgPSAwOw0KIAlpZiAobW0tPm1hcF9j
b3VudCA+PSBBVkxfTUlOX01BUF9DT1VOVCkNCkBAIC0zNzAsNiArMzcxLDcg
QEANCiAJCXJldHVybiAwOw0KIAl9DQogDQorCWNvbmRpdGlvbmFsX3NjaGVk
dWxlKCk7DQogCXJldHZhbCA9IC1FTk9NRU07DQogCW1tID0gbW1fYWxsb2Mo
KTsNCiAJaWYgKCFtbSkNCkBAIC00MDQsNiArNDA2LDcgQEANCiAJCWF0b21p
Y19pbmMoJmN1cnJlbnQtPmZzLT5jb3VudCk7DQogCQlyZXR1cm4gMDsNCiAJ
fQ0KKwljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAl0c2stPmZzID0ga21h
bGxvYyhzaXplb2YoKnRzay0+ZnMpLCBHRlBfS0VSTkVMKTsNCiAJaWYgKCF0
c2stPmZzKQ0KIAkJcmV0dXJuIC0xOw0KQEAgLTQ1Myw2ICs0NTYsNyBAQA0K
IAkJZ290byBvdXQ7DQogCX0NCiANCisJY29uZGl0aW9uYWxfc2NoZWR1bGUo
KTsNCiAJdHNrLT5maWxlcyA9IE5VTEw7DQogCWVycm9yID0gLUVOT01FTTsN
CiAJbmV3ZiA9IGttZW1fY2FjaGVfYWxsb2MoZmlsZXNfY2FjaGVwLCBTTEFC
X0tFUk5FTCk7DQpAQCAtNTA0LDYgKzUwOCw3IEBADQogCQlhdG9taWNfaW5j
KCZjdXJyZW50LT5zaWctPmNvdW50KTsNCiAJCXJldHVybiAwOw0KIAl9DQor
CWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQogCXRzay0+c2lnID0ga21hbGxv
YyhzaXplb2YoKnRzay0+c2lnKSwgR0ZQX0tFUk5FTCk7DQogCWlmICghdHNr
LT5zaWcpDQogCQlyZXR1cm4gLTE7DQotLS0gbGludXgva2VybmVsL2V4aXQu
Yy5vcmlnCVNhdCBKdWwgMzEgMTI6NDM6NTYgMTk5OQ0KKysrIGxpbnV4L2tl
cm5lbC9leGl0LmMJU3VuIEF1ZyAgMSAwMTowMDoxNiAxOTk5DQpAQCAtMTcw
LDYgKzE3MCw3IEBADQogCQkJCWlmIChmaWxlKSB7DQogCQkJCQlmaWxlcy0+
ZmRbaV0gPSBOVUxMOw0KIAkJCQkJZmlscF9jbG9zZShmaWxlLCBmaWxlcyk7
DQorCQkJCQljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAkJCQl9DQogCQkJ
fQ0KIAkJCWkrKzsNCi0tLSBsaW51eC9tbS9zd2FwZmlsZS5jLm9yaWcJVHVl
IEp1biAgOCAwMToyNzowNiAxOTk5DQorKysgbGludXgvbW0vc3dhcGZpbGUu
YwlTdW4gQXVnICAxIDAxOjAwOjE3IDE5OTkNCkBAIC03MTMsMTQgKzcxMywz
MCBAQA0KIA0KIHZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKnZh
bCkNCiB7DQotCXVuc2lnbmVkIGludCBpLCBqOw0KKwlzdHJ1Y3Qgc3dhcF9p
bmZvX3N0cnVjdCAqIHA7DQorCXVuc2lnbmVkIGludCBpLCBtYXg7DQogDQog
CXZhbC0+ZnJlZXN3YXAgPSB2YWwtPnRvdGFsc3dhcCA9IDA7DQotCWZvciAo
aSA9IDA7IGkgPCBucl9zd2FwZmlsZXM7IGkrKykgew0KLQkJaWYgKChzd2Fw
X2luZm9baV0uZmxhZ3MgJiBTV1BfV1JJVEVPSykgIT0gU1dQX1dSSVRFT0sp
DQorCWZvciAocCA9IHN3YXBfaW5mbzsgcCA8IHN3YXBfaW5mbytucl9zd2Fw
ZmlsZXM7IHArKykgew0KKwkJaWYgKChwLT5mbGFncyAmIFNXUF9XUklURU9L
KSAhPSBTV1BfV1JJVEVPSykNCiAJCQljb250aW51ZTsNCi0JCWZvciAoaiA9
IDA7IGogPCBzd2FwX2luZm9baV0ubWF4OyArK2opDQotCQkJc3dpdGNoIChz
d2FwX2luZm9baV0uc3dhcF9tYXBbal0pIHsNCisJCW1heCA9IHAtPm1heDsN
CisJCWZvciAoaSA9IDA7IGkgPCBtYXg7ICsraSkgew0KKwkJCS8qDQorCQkJ
ICogVGhpcyBpcyBmb3Igc3RhdGlzdGljcyBvbmx5IC0gbm8gcHJvYmxlbSBp
Zg0KKwkJCSAqIHdlIHJlc2NoZWR1bGUgaW4gdGhlIG1pZGRsZSwgYnV0IHdl
IGhhdmUgdG8NCisJCQkgKiBiZSBhIGJpdCBjYXJlZnVsIG5vdCB0byBwcm9j
ZXNzIHJlbW92ZWQNCisJCQkgKiBzd2FwZmlsZXMuDQorCQkJICovDQorCQkJ
aWYgKCEoaSAmIDI1NSkpIHsNCisJCQkJaWYgKGN1cnJlbnQtPm5lZWRfcmVz
Y2hlZCkgew0KKwkJCQkJc2NoZWR1bGUoKTsNCisJCQkJCWlmICgoKHAtPmZs
YWdzICYgU1dQX1dSSVRFT0spICE9DQorCQkJCQkJU1dQX1dSSVRFT0spIHx8
IChtYXggIT0gcC0+bWF4KSkNCisJCQkJCQkJYnJlYWs7DQorCQkJCX0NCisJ
CQl9DQorCQkJc3dpdGNoIChwLT5zd2FwX21hcFtpXSkgew0KIAkJCQljYXNl
IFNXQVBfTUFQX0JBRDoNCiAJCQkJCWNvbnRpbnVlOw0KIAkJCQljYXNlIDA6
DQpAQCAtNzI4LDYgKzc0NCw3IEBADQogCQkJCWRlZmF1bHQ6DQogCQkJCQkr
K3ZhbC0+dG90YWxzd2FwOw0KIAkJCX0NCisJCX0NCiAJfQ0KIAl2YWwtPmZy
ZWVzd2FwIDw8PSBQQUdFX1NISUZUOw0KIAl2YWwtPnRvdGFsc3dhcCA8PD0g
UEFHRV9TSElGVDsNCi0tLSBsaW51eC9tbS9tZW1vcnkuYy5vcmlnCVNhdCBK
dWwgMzEgMTA6MDA6MTcgMTk5OQ0KKysrIGxpbnV4L21tL21lbW9yeS5jCVN1
biBBdWcgIDEgMDE6MDA6MTcgMTk5OQ0KQEAgLTI4MSw2ICsyODEsMTAgQEAN
CiAJCQkJCWdvdG8gb3V0Ow0KIAkJCQlzcmNfcHRlKys7DQogCQkJCWRzdF9w
dGUrKzsNCisJCQkJLyoNCisJCQkJICogUmVkdWNlIHNjaGVkdWxpbmcgbGF0
ZW5jaWVzOg0KKwkJCQkgKi8NCisJCQkJY29uZGl0aW9uYWxfc2NoZWR1bGUo
KTsNCiAJCQl9IHdoaWxlICgodW5zaWduZWQgbG9uZylzcmNfcHRlICYgUFRF
X1RBQkxFX01BU0spOw0KIAkJDQogY29udF9jb3B5X3BtZF9yYW5nZToJc3Jj
X3BtZCsrOw0KQEAgLTM0OCw5ICszNTIsMTUgQEANCiAJCXB0ZSsrOw0KIAkJ
c2l6ZS0tOw0KIAkJaWYgKHB0ZV9ub25lKHBhZ2UpKQ0KLQkJCWNvbnRpbnVl
Ow0KKwkJCWdvdG8gY29udGludWVfbG9vcDsNCiAJCXB0ZV9jbGVhcihwdGUt
MSk7DQogCQlmcmVlZCArPSBmcmVlX3B0ZShwYWdlKTsNCitjb250aW51ZV9s
b29wOg0KKwkJLyoNCisJCSAqIEF2b2lkIGxhcmdlIHNjaGVkdWxpbmcgbGF0
ZW5jaWVzIHdoZW4gZXhpdGluZyBiaWcNCisJCSAqIHRhc2tzOg0KKwkJICov
DQorCQljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAl9DQogCXJldHVybiBm
cmVlZDsNCiB9DQotLS0gbGludXgvbW0vcGFnZV9hbGxvYy5jLm9yaWcJU2F0
IEp1bCAzMSAxMToyMzo0NiAxOTk5DQorKysgbGludXgvbW0vcGFnZV9hbGxv
Yy5jCVN1biBBdWcgIDEgMDE6MDA6MTcgMTk5OQ0KQEAgLTIwOSw2ICsyMDks
OCBAQA0KIAl9DQogI2VuZGlmDQogDQorCWlmIChnZnBfbWFzayAmIF9fR0ZQ
X1dBSVQpDQorCQljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAkvKg0KIAkg
KiBJZiB0aGlzIGlzIGEgcmVjdXJzaXZlIGNhbGwsIHdlJ2QgYmV0dGVyDQog
CSAqIGRvIG91ciBiZXN0IHRvIGp1c3QgYWxsb2NhdGUgdGhpbmdzIHdpdGhv
dXQNCi0tLSBsaW51eC9tbS9zbGFiLmMub3JpZwlTYXQgSnVsIDMxIDE3OjQy
OjI1IDE5OTkNCisrKyBsaW51eC9tbS9zbGFiLmMJU3VuIEF1ZyAgMSAwMTow
MDoxNyAxOTk5DQpAQCAtMTM1Miw2ICsxMzUyLDggQEANCiAJLyogU2FuaXR5
IGNoZWNrLiAqLw0KIAlpZiAoIWNhY2hlcCkNCiAJCWdvdG8gbnVsX3B0cjsN
CisJaWYgKChmbGFncyAmIFNMQUJfTEVWRUxfTUFTSykgIT0gU0xBQl9BVE9N
SUMpDQorCQljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAlzcGluX2xvY2tf
aXJxc2F2ZSgmY2FjaGVwLT5jX3NwaW5sb2NrLCBzYXZlX2ZsYWdzKTsNCiB0
cnlfYWdhaW46DQogCS8qIEdldCBzbGFiIGFsbG9jIGlzIHRvIGNvbWUgZnJv
bS4gKi8NCi0tLSBsaW51eC9tbS9maWxlbWFwLmMub3JpZwlTYXQgSnVsIDMx
IDE2OjI3OjE4IDE5OTkNCisrKyBsaW51eC9tbS9maWxlbWFwLmMJU3VuIEF1
ZyAgMSAwMTowMDoxNyAxOTk5DQpAQCAtOTYsNiArOTYsMTAgQEANCiAJd2hp
bGUgKChwYWdlID0gKnApICE9IE5VTEwpIHsNCiAJCXVuc2lnbmVkIGxvbmcg
b2Zmc2V0ID0gcGFnZS0+b2Zmc2V0Ow0KIA0KKwkJaWYgKGN1cnJlbnQtPm5l
ZWRfcmVzY2hlZCkgew0KKwkJCXNjaGVkdWxlKCk7DQorCQkJZ290byByZXBl
YXQ7DQorCQl9DQogCQkvKiBwYWdlIHdob2xseSB0cnVuY2F0ZWQgLSBmcmVl
IGl0ICovDQogCQlpZiAob2Zmc2V0ID49IHN0YXJ0KSB7DQogCQkJaWYgKFBh
Z2VMb2NrZWQocGFnZSkpIHsNCkBAIC03MjcsNyArNzMxLDggQEANCiAJCQlm
aWxwLT5mX3JhbWF4ID0gTUlOX1JFQURBSEVBRDsNCiANCiAJCXsNCi0JCQlp
bnQgZXJyb3IgPSBpbm9kZS0+aV9vcC0+cmVhZHBhZ2UoZmlscCwgcGFnZSk7
DQorCQkJaW50IGVycm9yOw0KKwkJCWVycm9yID0gaW5vZGUtPmlfb3AtPnJl
YWRwYWdlKGZpbHAsIHBhZ2UpOw0KIAkJCWlmICghZXJyb3IpDQogCQkJCWdv
dG8gZm91bmRfcGFnZTsNCiAJCQlkZXNjLT5lcnJvciA9IGVycm9yOw0KQEAg
LTc0Miw3ICs3NDcsOCBAQA0KIAkJICogYmVjYXVzZSB0aGlzIGhhcHBlbnMg
b25seSBpZiB0aGVyZSB3ZXJlIGVycm9ycy4NCiAJCSAqLw0KIAkJew0KLQkJ
CWludCBlcnJvciA9IGlub2RlLT5pX29wLT5yZWFkcGFnZShmaWxwLCBwYWdl
KTsNCisJCQlpbnQgZXJyb3I7DQorCQkJZXJyb3IgPSBpbm9kZS0+aV9vcC0+
cmVhZHBhZ2UoZmlscCwgcGFnZSk7DQogCQkJaWYgKCFlcnJvcikgew0KIAkJ
CQl3YWl0X29uX3BhZ2UocGFnZSk7DQogCQkJCWlmIChQYWdlVXB0b2RhdGUo
cGFnZSkgJiYgIVBhZ2VFcnJvcihwYWdlKSkNCi0tLSBsaW51eC9pbmNsdWRl
L2xpbnV4L3NjaGVkLmgub3JpZwlUdWUgTWF5IDExIDE5OjM1OjQ1IDE5OTkN
CisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJU3VuIEF1ZyAgMSAw
MTowMDoxNyAxOTk5DQpAQCAtNSw2ICs1LDcgQEANCiANCiBleHRlcm4gdW5z
aWduZWQgbG9uZyBldmVudDsNCiANCisjaW5jbHVkZSA8bGludXgvY29uZHNj
aGVkLmg+DQogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4NCiAjaW5jbHVk
ZSA8bGludXgvcGVyc29uYWxpdHkuaD4NCiAjaW5jbHVkZSA8bGludXgvdGFz
a3MuaD4NCkBAIC0xMTksNyArMTIwLDcgQEANCiBleHRlcm4gdm9pZCBzaG93
X3N0YXRlKHZvaWQpOw0KIGV4dGVybiB2b2lkIHRyYXBfaW5pdCh2b2lkKTsN
CiANCi0jZGVmaW5lCU1BWF9TQ0hFRFVMRV9USU1FT1VUCUxPTkdfTUFYDQor
I2RlZmluZQlNQVhfU0NIRURVTEVfVElNRU9VVCAgICBMT05HX01BWA0KIGV4
dGVybiBzaWduZWQgbG9uZyBGQVNUQ0FMTChzY2hlZHVsZV90aW1lb3V0KHNp
Z25lZCBsb25nIHRpbWVvdXQpKTsNCiBhc21saW5rYWdlIHZvaWQgc2NoZWR1
bGUodm9pZCk7DQogDQpAQCAtMjI1LDcgKzIyNiw3IEBADQogCQkJCQkJMC0w
eEZGRkZGRkZGIGZvciBrZXJuZWwtdGhyZWFkDQogCQkJCQkgKi8NCiAJc3Ry
dWN0IGV4ZWNfZG9tYWluICpleGVjX2RvbWFpbjsNCi0JbG9uZyBuZWVkX3Jl
c2NoZWQ7DQorCXZvbGF0aWxlIGxvbmcgbmVlZF9yZXNjaGVkOw0KIA0KIC8q
IHZhcmlvdXMgZmllbGRzICovDQogCWxvbmcgY291bnRlcjsNCi0tLSBsaW51
eC9pbmNsdWRlL2xpbnV4L2xvY2tzLmgub3JpZwlUdWUgTWF5IDExIDE5OjM2
OjE1IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L2xvY2tzLmgJU3Vu
IEF1ZyAgMSAwMTowMDoxNyAxOTk5DQpAQCAtMTgsMTIgKzE4LDE0IEBADQog
ew0KIAlpZiAodGVzdF9iaXQoQkhfTG9jaywgJmJoLT5iX3N0YXRlKSkNCiAJ
CV9fd2FpdF9vbl9idWZmZXIoYmgpOw0KKwljb25kaXRpb25hbF9zY2hlZHVs
ZSgpOw0KIH0NCiANCiBleHRlcm4gaW5saW5lIHZvaWQgbG9ja19idWZmZXIo
c3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpDQogew0KIAl3aGlsZSAodGVzdF9h
bmRfc2V0X2JpdChCSF9Mb2NrLCAmYmgtPmJfc3RhdGUpKQ0KIAkJX193YWl0
X29uX2J1ZmZlcihiaCk7DQorCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQog
fQ0KIA0KIGV4dGVybiBpbmxpbmUgdm9pZCB1bmxvY2tfYnVmZmVyKHN0cnVj
dCBidWZmZXJfaGVhZCAqYmgpDQpAQCAtNDMsNiArNDUsNyBAQA0KIHsNCiAJ
aWYgKHNiLT5zX2xvY2spDQogCQlfX3dhaXRfb25fc3VwZXIoc2IpOw0KKwlj
b25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIH0NCiANCiBleHRlcm4gaW5saW5l
IHZvaWQgbG9ja19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYikNCi0t
LSBsaW51eC9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0Lmgub3JpZwlN
b24gSnVsIDI2IDE0OjUwOjA4IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2xp
bnV4L2NvbnNvbGVfc3RydWN0LmgJU3VuIEF1ZyAgMSAwMTowMDoxNyAxOTk5
DQpAQCAtMTgsNiArMTgsNyBAQA0KIAl1bnNpZ25lZCBpbnQJdmNfc2l6ZV9y
b3c7CQkvKiBCeXRlcyBwZXIgcm93ICovDQogCXN0cnVjdCBjb25zdwkqdmNf
c3c7DQogCXVuc2lnbmVkIHNob3J0CSp2Y19zY3JlZW5idWY7CQkvKiBJbi1t
ZW1vcnkgY2hhcmFjdGVyL2F0dHJpYnV0ZSBidWZmZXIgKi8NCisJdW5zaWdu
ZWQgbG9uZwl2Y192aWRlb2J1ZjsJCS8qIEluLW1lbW9yeSBjb3B5IG9mIHRl
eHQgVmlkZW9SQU0gKi8NCiAJdW5zaWduZWQgaW50CXZjX3NjcmVlbmJ1Zl9z
aXplOw0KIAl1bnNpZ25lZCBjaGFyCXZjX2F0dHI7CQkvKiBDdXJyZW50IGF0
dHJpYnV0ZXMgKi8NCiAJdW5zaWduZWQgY2hhcgl2Y19kZWZfY29sb3I7CQkv
KiBEZWZhdWx0IGNvbG9ycyAqLw0KLS0tIGxpbnV4L2luY2x1ZGUvbGludXgv
c2VsZWN0aW9uLmgub3JpZwlNb24gSnVsIDI2IDE2OjA5OjE1IDE5OTkNCisr
KyBsaW51eC9pbmNsdWRlL2xpbnV4L3NlbGVjdGlvbi5oCVN1biBBdWcgIDEg
MDE6MDA6MTcgMTk5OQ0KQEAgLTcsOCArNyw2IEBADQogI2lmbmRlZiBfTElO
VVhfU0VMRUNUSU9OX0hfDQogI2RlZmluZSBfTElOVVhfU0VMRUNUSU9OX0hf
DQogDQotI2luY2x1ZGUgPGxpbnV4L3Z0X2J1ZmZlci5oPg0KLQ0KIGV4dGVy
biBpbnQgc2VsX2NvbnM7DQogDQogZXh0ZXJuIHZvaWQgY2xlYXJfc2VsZWN0
aW9uKHZvaWQpOw0KLS0tIGxpbnV4L2luY2x1ZGUvbGludXgvdnRfYnVmZmVy
Lmgub3JpZwlNb24gSnVsIDI2IDE1OjU0OjMyIDE5OTkNCisrKyBsaW51eC9p
bmNsdWRlL2xpbnV4L3Z0X2J1ZmZlci5oCVN1biBBdWcgIDEgMDE6MDA6MTcg
MTk5OQ0KQEAgLTE5LDI1ICsxOSwxMjkgQEANCiAjaW5jbHVkZSA8YXNtL3Zn
YS5oPg0KICNlbmRpZg0KIA0KKyNkZWZpbmUgVlRfRE9VQkxFQlVGIDENCisN
CiAjaWZuZGVmIFZUX0JVRl9IQVZFX1JXDQotI2RlZmluZSBzY3Jfd3JpdGV3
KHZhbCwgYWRkcikgKCooYWRkcikgPSAodmFsKSkNCi0jZGVmaW5lIHNjcl9y
ZWFkdyhhZGRyKSAoKihhZGRyKSkNCi0jZGVmaW5lIHNjcl9tZW1jcHl3KGQs
IHMsIGMpIG1lbWNweShkLCBzLCBjKQ0KLSNkZWZpbmUgc2NyX21lbW1vdmV3
KGQsIHMsIGMpIG1lbW1vdmUoZCwgcywgYykNCi0jZGVmaW5lIFZUX0JVRl9I
QVZFX01FTUNQWVcNCi0jZGVmaW5lIFZUX0JVRl9IQVZFX01FTU1PVkVXDQot
I2RlZmluZSBzY3JfbWVtY3B5d19mcm9tKGQsIHMsIGMpIG1lbWNweShkLCBz
LCBjKQ0KLSNkZWZpbmUgc2NyX21lbWNweXdfdG8oZCwgcywgYykgbWVtY3B5
KGQsIHMsIGMpDQotI2RlZmluZSBWVF9CVUZfSEFWRV9NRU1DUFlGDQorDQor
I2lmIFZUX0RPVUJMRUJVRg0KKw0KK2V4dGVybiB1bnNpZ25lZCBsb25nIHZn
YV92cmFtX2Jhc2UsIHZnYV92cmFtX2VuZDsNCisNCitleHRlcm4gaW5saW5l
IHVuc2lnbmVkIHNob3J0ICogX192Mm0oY29uc3QgdW5zaWduZWQgc2hvcnQg
KiBzLCBpbnQgY29ucykNCit7DQorCXN0cnVjdCB2Y19kYXRhICpjOw0KKwl1
bnNpZ25lZCBzaG9ydCAqIF9fcmVzOw0KKw0KKwljID0gdmNfY29uc1tjb25z
XS5kOw0KKw0KKwlpZiAoKmMtPnZjX2Rpc3BsYXlfZmcgPT0gYykgew0KKwkJ
X19yZXMgPSAodW5zaWduZWQgc2hvcnQgKikoYy0+dmNfdmlkZW9idWYrDQor
CQkJKCh1bnNpZ25lZCBsb25nKShzKSAtIHZnYV92cmFtX2Jhc2UpKTsNCisJ
CS8qDQorCQkgKiBkZWJ1Z2dpbmcgaGFja3M6DQorCQkgKi8NCisJCWlmICgo
KHVuc2lnbmVkIGludClzIDwgdmdhX3ZyYW1fYmFzZSkgfHwNCisJCQkoKHVu
c2lnbmVkIGludClzID4gdmdhX3ZyYW1fZW5kKSkgew0KKy8vCQkJcHJpbnRr
KCJQMTo8JXAtPiVwKCVwKT4/XG4iLCBzLCBfX3JlcywgKHZvaWQgKikmJl9f
eSk7DQorCQkJX19yZXMgPSAodW5zaWduZWQgc2hvcnQgKikocyk7DQorCQl9
IGVsc2Ugew0KKwkJCWlmICgoX19yZXMgPCAodW5zaWduZWQgc2hvcnQgKilj
LT52Y192aWRlb2J1ZikgfHwgKF9fcmVzID49ICh1bnNpZ25lZCBzaG9ydCAq
KShjLT52Y192aWRlb2J1ZisxMjgqMTAyNCkpKSB7DQorLy8JCQkJcHJpbnRr
KCJQMjo8JXAtPiVwKCVwKT4/XG4iLCBzLCBfX3JlcywgKHZvaWQgKikmJl9f
eSk7DQorCQkJCV9fcmVzID0gKHVuc2lnbmVkIHNob3J0ICopKHMpOw0KKwkJ
CX0NCisJCX0NCisJfSBlbHNlDQorCQlfX3JlcyA9ICh1bnNpZ25lZCBzaG9y
dCAqKShzKTsNCisJcmV0dXJuIF9fcmVzOw0KK30NCisNCisjZGVmaW5lIHYy
bSh4KSBfX3YybSh4LGN1cnJjb25zKQ0KKw0KKy8vICNkZWZpbmUgdjJtKHgp
ICh7IHVuc2lnbmVkIHNob3J0ICogX19yZXM7IGlmICh2Y19jb25zW2N1cnJj
b25zXS5kLT52Y192aWRlb2J1ZikgX19yZXMgPSAodW5zaWduZWQgc2hvcnQg
KikodmNfY29uc1tjdXJyY29uc10uZC0+dmNfdmlkZW9idWYrKCh1bnNpZ25l
ZCBsb25nKSh4KS12Y19jb25zW2N1cnJjb25zXS5kLT52Y19vcmlnaW4pKTsg
ZWxzZSB7IGV4dGVybiBpbnQgbWFnaWNfZmxhZzsgbWFnaWNfZmxhZysrOyBf
X3JlcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSh4KTsgfSBfX3JlczsgfSkNCisv
LyAjZGVmaW5lIHYybSh4KSAoeyB1bnNpZ25lZCBzaG9ydCAqIF9fcmVzOyBf
X3JlcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSh2Y19jb25zW2N1cnJjb25zXS5k
LT52Y192aWRlb2J1ZisoKHVuc2lnbmVkIGxvbmcpKHgpLXZnYV92cmFtX2Jh
c2UpKTsgX19yZXM7IH0pDQorDQorI2lmIDENCitleHRlcm4gaW5saW5lIHZv
aWQgX19zY3Jfd3JpdGV3KHUxNiB2YWwsIHUxNiAqYWRkciwgaW50IGN1cnJj
b25zKQ0KK3sNCisJKmFkZHIgPSB2YWw7DQorCSoodjJtKGFkZHIpKSA9IHZh
bDsNCit9DQorI2RlZmluZSBzY3Jfd3JpdGV3KHZhbCwgYWRkcikgX19zY3Jf
d3JpdGV3KHZhbCwgYWRkciwgY3VycmNvbnMpDQorDQorIyBkZWZpbmUgc2Ny
X3JlYWR3KGFkZHIpICh7Kih2Mm0oYWRkcikpO30pDQorI2Vsc2UNCisjIGRl
ZmluZSBzY3Jfd3JpdGV3KHZhbCwgYWRkcikgKHsqKGFkZHIpID0gKHZhbCk7
IH0pDQorIyBkZWZpbmUgc2NyX3JlYWR3KGFkZHIpICh7KihhZGRyKTt9KQ0K
KyNlbmRpZg0KKw0KK2V4dGVybiBpbmxpbmUgdm9pZCBfX3Njcl9tZW1jcHl3
KHZvaWQgKiBkLCB2b2lkICogcywNCisJCSB1bnNpZ25lZCBpbnQgYywgaW50
IGN1cnJjb25zKQ0KK3sNCisJbWVtY3B5KHYybShkKSwgdjJtKHMpLCBjKTsN
CisJbWVtY3B5KGQsIHYybShkKSwgYyk7DQorfQ0KKyNkZWZpbmUgc2NyX21l
bWNweXcoZCwgcywgYykgX19zY3JfbWVtY3B5dyhkLCBzLCBjLCBjdXJyY29u
cykNCisNCitleHRlcm4gaW5saW5lIHZvaWQgX19zY3JfbWVtbW92ZXcodm9p
ZCAqIGQsIHZvaWQgKiBzLA0KKwkJIHVuc2lnbmVkIGludCBjLCBpbnQgY3Vy
cmNvbnMpDQorew0KKwltZW1tb3ZlKHYybShkKSwgdjJtKHMpLCBjKTsNCisJ
bWVtY3B5KGQsIHYybShkKSwgYyk7DQorfQ0KKyMgZGVmaW5lIHNjcl9tZW1t
b3ZldyhkLCBzLCBjKSBfX3Njcl9tZW1tb3ZldyhkLCBzLCBjLCBjdXJyY29u
cykNCisjIGRlZmluZSBWVF9CVUZfSEFWRV9NRU1DUFlXDQorIyBkZWZpbmUg
VlRfQlVGX0hBVkVfTUVNTU9WRVcNCitleHRlcm4gaW5saW5lIHZvaWQgX19z
Y3JfbWVtY3B5d190byh2b2lkICogZCwgdm9pZCAqIHMsDQorCQl1bnNpZ25l
ZCBpbnQgYywgaW50IGN1cnJjb25zKQ0KK3sNCisJbWVtY3B5KHYybShkKSwg
cywgYyk7DQorCW1lbWNweShkLCBzLCBjKTsNCit9DQorIyBkZWZpbmUgc2Ny
X21lbWNweXdfdG8oZCwgcywgYykgX19zY3JfbWVtY3B5d190byhkLCBzLCBj
LCBjdXJyY29ucykNCisjIGRlZmluZSBzY3JfbWVtY3B5d19mcm9tKGQsIHMs
IGMpICh7IG1lbWNweShkLCB2Mm0ocyksIGMpO30pDQorIyBkZWZpbmUgVlRf
QlVGX0hBVkVfTUVNQ1BZRg0KKw0KKyMgZGVmaW5lIHNjcl93cml0ZXdfbm9u
YnVmZmVyZWQodmFsLCBhZGRyKSAoeyooYWRkcikgPSAodmFsKTsgfSkNCisj
IGRlZmluZSBzY3JfcmVhZHdfbm9uYnVmZmVyZWQoYWRkcikgKHsqKGFkZHIp
O30pDQorIyBkZWZpbmUgc2NyX21lbWNweXdfbm9uYnVmZmVyZWQoZCwgcywg
YykgKHsgbWVtY3B5KGQsIHMsIGMpOyB9KQ0KKyMgZGVmaW5lIHNjcl9tZW1t
b3Zld19ub25idWZmZXJlZChkLCBzLCBjKSAoeyBtZW1tb3ZlKGQsIHMsIGMp
OyB9KQ0KKyMgZGVmaW5lIFZUX0JVRl9IQVZFX01FTUNQWVcNCisjIGRlZmlu
ZSBWVF9CVUZfSEFWRV9NRU1NT1ZFVw0KKyMgZGVmaW5lIHNjcl9tZW1jcHl3
X2Zyb21fbm9uYnVmZmVyZWQoZCwgcywgYykgKHsgbWVtY3B5KGQsIHMsIGMp
O30pDQorIyBkZWZpbmUgc2NyX21lbWNweXdfdG9fbm9uYnVmZmVyZWQoZCwg
cywgYykgKHsgbWVtY3B5KGQsIHMsIGMpO30pDQorIyBkZWZpbmUgVlRfQlVG
X0hBVkVfTUVNQ1BZRg0KKyNlbHNlDQorDQorIyBkZWZpbmUgc2NyX3dyaXRl
dyh2YWwsIGFkZHIpICh7KihhZGRyKSA9ICh2YWwpOyB9KQ0KKyMgZGVmaW5l
IHNjcl9yZWFkdyhhZGRyKSAoeyooYWRkcik7fSkNCisjIGRlZmluZSBzY3Jf
bWVtY3B5dyhkLCBzLCBjKSAoeyBtZW1jcHkoZCwgcywgYyk7IH0pDQorIyBk
ZWZpbmUgc2NyX21lbW1vdmV3KGQsIHMsIGMpICh7IG1lbW1vdmUoZCwgcywg
Yyk7IH0pDQorIyBkZWZpbmUgVlRfQlVGX0hBVkVfTUVNQ1BZVw0KKyMgZGVm
aW5lIFZUX0JVRl9IQVZFX01FTU1PVkVXDQorIyBkZWZpbmUgc2NyX21lbWNw
eXdfZnJvbShkLCBzLCBjKSAoeyBtZW1jcHkoZCwgcywgYyk7fSkNCisjIGRl
ZmluZSBzY3JfbWVtY3B5d190byhkLCBzLCBjKSAoeyBtZW1jcHkoZCwgcywg
Yyk7fSkNCisjIGRlZmluZSBWVF9CVUZfSEFWRV9NRU1DUFlGDQorI2VuZGlm
DQorDQogI2VuZGlmDQogDQogI2lmbmRlZiBWVF9CVUZfSEFWRV9NRU1TRVRX
DQotZXh0ZXJuIGlubGluZSB2b2lkIHNjcl9tZW1zZXR3KHUxNiAqcywgdTE2
IGMsIHVuc2lnbmVkIGludCBjb3VudCkNCitleHRlcm4gaW5saW5lIHZvaWQg
X19zY3JfbWVtc2V0dyh1MTYgKnMsIHUxNiBjLA0KKwkJCQkgdW5zaWduZWQg
aW50IGNvdW50LCBpbnQgY3VycmNvbnMpDQogew0KIAljb3VudCAvPSAyOw0K
IAl3aGlsZSAoY291bnQtLSkNCiAJCXNjcl93cml0ZXcoYywgcysrKTsNCiB9
DQorI2RlZmluZSBzY3JfbWVtc2V0dyhzLGMsY291bnQpIF9fc2NyX21lbXNl
dHcocyxjLGNvdW50LGN1cnJjb25zKQ0KK2V4dGVybiBpbmxpbmUgdm9pZCBz
Y3JfbWVtc2V0d19ub25idWZmZXJlZCh1MTYgKnMsIHUxNiBjLA0KKwkJCQkg
dW5zaWduZWQgaW50IGNvdW50KQ0KK3sNCisJY291bnQgLz0gMjsNCisJd2hp
bGUgKGNvdW50LS0pDQorCQlzY3Jfd3JpdGV3X25vbmJ1ZmZlcmVkKGMsIHMr
Kyk7DQorfQ0KKw0KICNlbmRpZg0KIA0KICNpZm5kZWYgVlRfQlVGX0hBVkVf
TUVNQ1BZVw0KLS0tIGxpbnV4L2luY2x1ZGUvbGludXgvZGVsYXkuaC5vcmln
CVNhdCBKdWwgMzEgMTY6MDI6NDYgMTk5OQ0KKysrIGxpbnV4L2luY2x1ZGUv
bGludXgvZGVsYXkuaAlTdW4gQXVnICAxIDAxOjAwOjE3IDE5OTkNCkBAIC0y
NSwxMyArMjUsMjQgQEANCiAjZGVmaW5lIE1BWF9VREVMQVlfTVMJNQ0KICNl
bmRpZg0KIA0KLSNpZmRlZiBub3RkZWYNCisvKg0KKyAqIHRoZSAncHJlZW1w
dGl2ZScgdmVyc2lvbiBvZiB1ZGVsYXkuIEluIHNvbWUgY2FzZXMgd2Ugd2Fu
dCB0byB1c2UNCisgKiB0aGlzIHZhcmlhbnQsIGl0IGd1YXJhbnRlZXMgdGhh
dCBwcmVlbXB0aW9uIHdpbGwgaGFwcGluZyB3aXRoaW4NCisgKiAxMCB1c2Vj
cyAoZGVzcGl0ZSBkb2luZyBidXN5IHdhaXRpbmcpLiBOb3QgYWxsIGRyaXZl
cnMgY2FuIHVzZQ0KKyAqIHRoaXMgYXV0b21hdGljYWxseSwgdGhlIGRyaXZl
ciBoYXMgdG8gYmUgc3VmZmljaWVudGx5IHJlZW50cmFudC4NCisgKi8NCisj
ZGVmaW5lIHVkZWxheV9yZXNjaGVkKG4pIChcDQorCXsJaW50IGk7IFwNCisJ
CWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeyBcDQorCQkJY29uZGl0aW9u
YWxfc2NoZWR1bGUoKTsgXA0KKwkJCXVkZWxheSgxMCk7IFwNCisJCX0gXA0K
Kwl9KQ0KKw0KICNkZWZpbmUgbWRlbGF5KG4pIChcDQogCXt1bnNpZ25lZCBs
b25nIG1zZWM9KG4pOyB3aGlsZSAobXNlYy0tKSB1ZGVsYXkoMTAwMCk7fSkN
Ci0jZWxzZQ0KLSNkZWZpbmUgbWRlbGF5KG4pIChcDQotCShfX2J1aWx0aW5f
Y29uc3RhbnRfcChuKSAmJiAobik8PU1BWF9VREVMQVlfTVMpID8gdWRlbGF5
KChuKSoxMDAwKSA6IFwNCi0JKHt1bnNpZ25lZCBsb25nIG1zZWM9KG4pOyB3
aGlsZSAobXNlYy0tKSB1ZGVsYXkoMTAwMCk7fSkpDQotI2VuZGlmDQorI2Rl
ZmluZSBtZGVsYXlfcmVzY2hlZChuKSAoXA0KKwl7dW5zaWduZWQgbG9uZyBt
c2VjPShuKTsgd2hpbGUgKG1zZWMtLSkgdWRlbGF5X3Jlc2NoZWQoMTAwMCk7
fSkNCisNCiANCiAjZW5kaWYgLyogZGVmaW5lZChfTElOVVhfREVMQVlfSCkg
Ki8NCi0tLSBsaW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgub3JpZwlTYXQgSnVs
IDMxIDE3OjI2OjM4IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L2Zz
LmgJU3VuIEF1ZyAgMSAwMTowMDoxNyAxOTk5DQpAQCAtOCw2ICs4LDcgQEAN
CiANCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+DQogI2luY2x1ZGUgPGxp
bnV4L2xpbmthZ2UuaD4NCisjaW5jbHVkZSA8bGludXgvY29uZHNjaGVkLmg+
DQogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPg0KICNpbmNsdWRlIDxsaW51
eC93YWl0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQpAQCAtNzU2
LDI0ICs3NTcsMjYgQEANCiAjZGVmaW5lIEJVRl9ESVJUWQkyCS8qIERpcnR5
IGJ1ZmZlcnMsIG5vdCB5ZXQgc2NoZWR1bGVkIGZvciB3cml0ZSAqLw0KICNk
ZWZpbmUgTlJfTElTVAkJMw0KIA0KLXZvaWQgbWFya19idWZmZXJfdXB0b2Rh
dGUoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgsIGludCBvbik7DQorZXh0ZXJu
IHZvaWQgbWFya19idWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFk
ICogYmgsIGludCBvbik7DQogDQotZXh0ZXJuIGlubGluZSB2b2lkIG1hcmtf
YnVmZmVyX2NsZWFuKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKQ0KLXsNCi0J
aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCSF9EaXJ0eSwgJmJoLT5iX3N0YXRl
KSkgew0KLQkJaWYgKGJoLT5iX2xpc3QgPT0gQlVGX0RJUlRZKQ0KLQkJCXJl
ZmlsZV9idWZmZXIoYmgpOw0KLQl9DQotfQ0KLQ0KLWV4dGVybiBpbmxpbmUg
dm9pZCBtYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBi
aCwgaW50IGZsYWcpDQotew0KLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQkhf
RGlydHksICZiaC0+Yl9zdGF0ZSkpIHsNCi0JCXNldF93cml0ZXRpbWUoYmgs
IGZsYWcpOw0KLQkJaWYgKGJoLT5iX2xpc3QgIT0gQlVGX0RJUlRZKQ0KLQkJ
CXJlZmlsZV9idWZmZXIoYmgpOw0KLQl9DQotfQ0KKyNkZWZpbmUgbWFya19i
dWZmZXJfY2xlYW4oYmgpIFwNCitkbyB7IFwNCisJaWYgKHRlc3RfYW5kX2Ns
ZWFyX2JpdChCSF9EaXJ0eSwgJihiaCktPmJfc3RhdGUpKSB7IFwNCisJCWlm
ICgoYmgpLT5iX2xpc3QgPT0gQlVGX0RJUlRZKSBcDQorCQkJcmVmaWxlX2J1
ZmZlcihiaCk7IFwNCisJfSBcDQorCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7
IFwNCit9IHdoaWxlKDApDQorDQorI2RlZmluZSBtYXJrX2J1ZmZlcl9kaXJ0
eShiaCxmbGFnKSBcDQorZG8geyBcDQorCWlmICghdGVzdF9hbmRfc2V0X2Jp
dChCSF9EaXJ0eSwgJihiaCktPmJfc3RhdGUpKSB7IFwNCisJCXNldF93cml0
ZXRpbWUoYmgsIGZsYWcpOyBcDQorCQlpZiAoKGJoKS0+Yl9saXN0ICE9IEJV
Rl9ESVJUWSkgXA0KKwkJCXJlZmlsZV9idWZmZXIoYmgpOyBcDQorCX0gXA0K
Kwljb25kaXRpb25hbF9zY2hlZHVsZSgpOyBcDQorfSB3aGlsZSgwKQ0KIA0K
IGV4dGVybiBpbnQgY2hlY2tfZGlza19jaGFuZ2Uoa2Rldl90IGRldik7DQog
ZXh0ZXJuIGludCBpbnZhbGlkYXRlX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxv
Y2sgKiBzYik7DQotLS0gbGludXgvaW5jbHVkZS9saW51eC9jb25kc2NoZWQu
aC5vcmlnCVNhdCBKdWwgMzEgMTk6NDg6MDQgMTk5OQ0KKysrIGxpbnV4L2lu
Y2x1ZGUvbGludXgvY29uZHNjaGVkLmgJU3VuIEF1ZyAgMSAwMTowMDoxNyAx
OTk5DQpAQCAtMCwwICsxLDE2IEBADQorI2lmbmRlZiBfTElOVVhfQ09ORFND
SEVEX0gNCisjZGVmaW5lIF9MSU5VWF9DT05EU0NIRURfSA0KKw0KKw0KKyNp
Zm5kZWYgX19BU1NFTUJMWV9fDQorI2RlZmluZSBjb25kaXRpb25hbF9zY2hl
ZHVsZSgpIFwNCitkbyB7IFwNCisgICAgICAgIGlmIChjdXJyZW50LT5uZWVk
X3Jlc2NoZWQpIHsgXA0KKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5J
Tkc7IFwNCisgICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsgXA0KKwl9IFwN
Cit9IHdoaWxlKDApDQorI2VuZGlmDQorDQorI2VuZGlmDQorDQotLS0gbGlu
dXgvaW5jbHVkZS9hc20taTM4Ni91YWNjZXNzLmgub3JpZwlUdWUgTWF5IDEx
IDE5OjM1OjQ2IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3Vh
Y2Nlc3MuaAlTdW4gQXVnICAxIDAxOjAwOjE3IDE5OTkNCkBAIC02LDYgKzYs
NyBAQA0KICAqLw0KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4NCiAjaW5j
bHVkZSA8bGludXgvc2NoZWQuaD4NCisjaW5jbHVkZSA8bGludXgvY29uZHNj
aGVkLmg+DQogI2luY2x1ZGUgPGFzbS9wYWdlLmg+DQogDQogI2RlZmluZSBW
RVJJRllfUkVBRCAwDQpAQCAtMjUzLDYgKzI1NCw3IEBADQogI2RlZmluZSBf
X2NvcHlfdXNlcih0byxmcm9tLHNpemUpCQkJCQlcDQogZG8gewkJCQkJCQkJ
CVwNCiAJaW50IF9fZDAsIF9fZDE7CQkJCQkJCVwNCisJY29uZGl0aW9uYWxf
c2NoZWR1bGUoKTsJCQkJCQkJXA0KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJ
CQkJCQlcDQogCQkiMDoJcmVwOyBtb3ZzbFxuIgkJCQkJXA0KIAkJIgltb3Zs
ICUzLCUwXG4iCQkJCQlcDQpAQCAtMjc1LDYgKzI3Nyw3IEBADQogI2RlZmlu
ZSBfX2NvcHlfdXNlcl96ZXJvaW5nKHRvLGZyb20sc2l6ZSkJCQkJXA0KIGRv
IHsJCQkJCQkJCQlcDQogCWludCBfX2QwLCBfX2QxOwkJCQkJCQlcDQorCWNv
bmRpdGlvbmFsX3NjaGVkdWxlKCk7CQkJCQkJCVwNCiAJX19hc21fXyBfX3Zv
bGF0aWxlX18oCQkJCQkJXA0KIAkJIjA6CXJlcDsgbW92c2xcbiIJCQkJCVwN
CiAJCSIJbW92bCAlMywlMFxuIgkJCQkJXA0KQEAgLTMyNCw2ICszMjcsNyBA
QA0KIAlpbnQgX19kMCwgX19kMTsJCQkJCQlcDQogCXN3aXRjaCAoc2l6ZSAm
IDMpIHsJCQkJCVwNCiAJZGVmYXVsdDoJCQkJCQlcDQorCQljb25kaXRpb25h
bF9zY2hlZHVsZSgpOwkJCQkJXA0KIAkJX19hc21fXyBfX3ZvbGF0aWxlX18o
CQkJCVwNCiAJCQkiMDoJcmVwOyBtb3ZzbFxuIgkJCVwNCiAJCQkiMTpcbiIJ
CQkJCVwNCkBAIC00MDgsNiArNDEyLDcgQEANCiAJaW50IF9fZDAsIF9fZDE7
CQkJCQkJXA0KIAlzd2l0Y2ggKHNpemUgJiAzKSB7CQkJCQlcDQogCWRlZmF1
bHQ6CQkJCQkJXA0KKwkJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsJCQkJCVwN
CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcDQogCQkJIjA6CXJlcDsg
bW92c2xcbiIJCQlcDQogCQkJIjE6XG4iCQkJCQlcDQotLS0gbGludXgvaW5j
bHVkZS9hc20taTM4Ni9zbXBsb2NrLmgub3JpZwlUdWUgTWF5IDExIDE5OjM1
OjQ2IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3NtcGxvY2su
aAlTdW4gQXVnICAxIDAxOjAwOjE3IDE5OTkNCkBAIC00LDYgKzQsNyBAQA0K
ICAqIGkzODYgU01QIGxvY2sgaW1wbGVtZW50YXRpb24NCiAgKi8NCiAjaW5j
bHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2Nv
bmRzY2hlZC5oPg0KICNpbmNsdWRlIDxhc20vc3BpbmxvY2suaD4NCiANCiBl
eHRlcm4gc3BpbmxvY2tfdCBrZXJuZWxfZmxhZzsNCkBAIC0yMiw2ICsyMyw3
IEBADQogLyoNCiAgKiBSZS1hY3F1aXJlIHRoZSBrZXJuZWwgbG9jaw0KICAq
Lw0KKw0KICNkZWZpbmUgcmVhY3F1aXJlX2tlcm5lbF9sb2NrKHRhc2spIFwN
CiBkbyB7IFwNCiAJaWYgKHRhc2stPmxvY2tfZGVwdGggPj0gMCkgXA0KLS0t
IGxpbnV4L2RyaXZlcnMvY2hhci9tZW0uYy5vcmlnCU1vbiBNYXkgMTAgMTk6
MTg6MzQgMTk5OQ0KKysrIGxpbnV4L2RyaXZlcnMvY2hhci9tZW0uYwlTdW4g
QXVnICAxIDAxOjAwOjE3IDE5OTkNCkBAIC0zNjYsOCArMzY2LDcgQEANCiAJ
CXVuc2lnbmVkIGxvbmcgdW53cml0dGVuID0gY2xlYXJfdXNlcihidWYsIFBB
R0VfU0laRSk7DQogCQlpZiAodW53cml0dGVuKQ0KIAkJCXJldHVybiBzaXpl
ICsgdW53cml0dGVuIC0gUEFHRV9TSVpFOw0KLQkJaWYgKGN1cnJlbnQtPm5l
ZWRfcmVzY2hlZCkNCi0JCQlzY2hlZHVsZSgpOw0KKwkJY29uZGl0aW9uYWxf
c2NoZWR1bGUoKTsNCiAJCWJ1ZiArPSBQQUdFX1NJWkU7DQogCQlzaXplIC09
IFBBR0VfU0laRTsNCiAJfSB3aGlsZSAoc2l6ZSk7DQotLS0gbGludXgvZHJp
dmVycy9jaGFyL2xwLmMub3JpZwlNb24gTWF5IDEwIDE5OjI2OjMxIDE5OTkN
CisrKyBsaW51eC9kcml2ZXJzL2NoYXIvbHAuYwlTdW4gQXVnICAxIDAxOjAw
OjE3IDE5OTkNCkBAIC0yMzQsOCArMjM0LDcgQEANCiB7DQogCWlmICghcGFy
cG9ydF95aWVsZF9ibG9ja2luZyAobHBfdGFibGVbbWlub3JdLmRldikpDQog
CXsNCi0JCWlmIChjdXJyZW50LT5uZWVkX3Jlc2NoZWQpDQotCQkJc2NoZWR1
bGUgKCk7DQorCQljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAl9IGVsc2UN
CiAJCWxwX3RhYmxlW21pbm9yXS5pcnFfbWlzc2VkID0gMTsNCiB9DQotLS0g
bGludXgvZHJpdmVycy9jaGFyL3JhbmRvbS5jLm9yaWcJVGh1IERlYyAzMSAy
MTowMzo0OSAxOTk4DQorKysgbGludXgvZHJpdmVycy9jaGFyL3JhbmRvbS5j
CVN1biBBdWcgIDEgMDE6MDA6MTcgMTk5OQ0KQEAgLTEyODAsOCArMTI4MCw5
IEBADQogCQkJCXJldCA9IC1FSU5UUjsNCiAJCQkJYnJlYWs7DQogCQkJfQ0K
LQkJCXNjaGVkdWxlKCk7DQogCQl9DQorCQlpZiAodG9fdXNlcikNCisJCQlj
b25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAl9DQogDQogCS8qIFdpcGUgZGF0
YSBqdXN0IHJldHVybmVkIGZyb20gbWVtb3J5ICovDQotLS0gbGludXgvZHJp
dmVycy9jaGFyL25fdHR5LmMub3JpZwlTdW4gQXByIDI1IDAyOjQ5OjM3IDE5
OTkNCisrKyBsaW51eC9kcml2ZXJzL2NoYXIvbl90dHkuYwlTdW4gQXVnICAx
IDAxOjAwOjE4IDE5OTkNCkBAIC05NTMsNyArOTUzLDcgQEANCiAJCWlmICgo
KG1pbmltdW0gLSAoYiAtIGJ1ZikpIDwgdHR5LT5taW5pbXVtX3RvX3dha2Up
ICYmDQogCQkgICAgKChtaW5pbXVtIC0gKGIgLSBidWYpKSA+PSAxKSkNCiAJ
CQl0dHktPm1pbmltdW1fdG9fd2FrZSA9IChtaW5pbXVtIC0gKGIgLSBidWYp
KTsNCi0JCQ0KKw0KIAkJaWYgKCFpbnB1dF9hdmFpbGFibGVfcCh0dHksIDAp
KSB7DQogCQkJaWYgKHRlc3RfYml0KFRUWV9PVEhFUl9DTE9TRUQsICZ0dHkt
PmZsYWdzKSkgew0KIAkJCQlyZXR2YWwgPSAtRUlPOw0KLS0tIGxpbnV4L2Ry
aXZlcnMvY2hhci90dHlfaW8uYy5vcmlnCU1vbiBNYXIgMjIgMTk6MDY6MjEg
MTk5OQ0KKysrIGxpbnV4L2RyaXZlcnMvY2hhci90dHlfaW8uYwlTdW4gQXVn
ICAxIDAxOjAwOjE4IDE5OTkNCkBAIC02NTIsNiArNjUyLDcgQEANCiAJc3Ry
dWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOw0K
IAkNCiAJdXAoJmlub2RlLT5pX3NlbSk7DQorCWNvbmRpdGlvbmFsX3NjaGVk
dWxlKCk7DQogCWlmIChkb3duX2ludGVycnVwdGlibGUoJmlub2RlLT5pX2F0
b21pY193cml0ZSkpIHsNCiAJCWRvd24oJmlub2RlLT5pX3NlbSk7DQogCQly
ZXR1cm4gLUVSRVNUQVJUU1lTOw0KQEAgLTY3MSw4ICs2NzIsNyBAQA0KIAkJ
cmV0ID0gLUVSRVNUQVJUU1lTOw0KIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1
cnJlbnQpKQ0KIAkJCWJyZWFrOw0KLQkJaWYgKGN1cnJlbnQtPm5lZWRfcmVz
Y2hlZCkNCi0JCQlzY2hlZHVsZSgpOw0KKwkJY29uZGl0aW9uYWxfc2NoZWR1
bGUoKTsNCiAJfQ0KIAlpZiAod3JpdHRlbikgew0KIAkJZmlsZS0+Zl9kZW50
cnktPmRfaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7DQpAQCAtMTY0
Myw3ICsxNjQzLDcgQEANCiB7DQogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHks
ICpyZWFsX3R0eTsNCiAJaW50IHJldHZhbDsNCi0JDQorDQogCXR0eSA9IChz
dHJ1Y3QgdHR5X3N0cnVjdCAqKWZpbGUtPnByaXZhdGVfZGF0YTsNCiAJaWYg
KHR0eV9wYXJhbm9pYV9jaGVjayh0dHksIGlub2RlLT5pX3JkZXYsICJ0dHlf
aW9jdGwiKSkNCiAJCXJldHVybiAtRUlOVkFMOw0KLS0tIGxpbnV4L2RyaXZl
cnMvY2hhci9jb25zb2xlLmMub3JpZwlUaHUgTWFyIDExIDAxOjUxOjM1IDE5
OTkNCisrKyBsaW51eC9kcml2ZXJzL2NoYXIvY29uc29sZS5jCVN1biBBdWcg
IDEgMDE6MDA6MTggMTk5OQ0KQEAgLTEwNCw2ICsxMDQsOCBAQA0KIA0KICNp
bmNsdWRlICJjb25zb2xlX21hY3Jvcy5oIg0KIA0KKyNpbmNsdWRlIDxsaW51
eC92dF9idWZmZXIuaD4NCisNCiANCiBzdHJ1Y3QgY29uc3cgKmNvbnN3aXRj
aHAgPSBOVUxMOw0KIA0KQEAgLTY0MCw2ICs2NDIsNyBAQA0KIAkJcmV0dXJu
IC1FTk9NRU07DQogCSAgICB2Y19jb25zW2N1cnJjb25zXS5kID0gKHN0cnVj
dCB2Y19kYXRhICopcDsNCiAJICAgIHZ0X2NvbnNbY3VycmNvbnNdID0gKHN0
cnVjdCB2dF9zdHJ1Y3QgKikocCtzaXplb2Yoc3RydWN0IHZjX2RhdGEpKTsN
CisJICAgIHZpZGVvYnVmID0gMDsNCiAJICAgIHZpc3VhbF9pbml0KGN1cnJj
b25zLCAxKTsNCiAJICAgIGlmICghKnZjX2NvbnNbY3VycmNvbnNdLmQtPnZj
X3VuaV9wYWdlZGlyX2xvYykNCiAJCWNvbl9zZXRfZGVmYXVsdF91bmltYXAo
Y3VycmNvbnMpOw0KQEAgLTE4MTYsOSArMTgxOSwxMCBAQA0KIAlkaXNhYmxl
X2JoKENPTlNPTEVfQkgpOw0KIAl3aGlsZSAoIXR0eS0+c3RvcHBlZCAmJiBj
b3VudCkgew0KIAkJZW5hYmxlX2JoKENPTlNPTEVfQkgpOw0KLQkJaWYgKGZy
b21fdXNlcikNCisJCWlmIChmcm9tX3VzZXIpIHsNCisJCQljb25kaXRpb25h
bF9zY2hlZHVsZSgpOw0KIAkJCV9fZ2V0X3VzZXIoYywgYnVmKTsNCi0JCWVs
c2UNCisJCX0gZWxzZQ0KIAkJCWMgPSAqYnVmOw0KIAkJYnVmKys7IG4rKzsg
Y291bnQtLTsNCiAJCWRpc2FibGVfYmgoQ09OU09MRV9CSCk7DQpAQCAtMjM0
Miw2ICsyMzQ2LDcgQEANCiAJCWttZW1fc3RhcnQgKz0gc2l6ZW9mKHN0cnVj
dCB2Y19kYXRhKTsNCiAJCXZ0X2NvbnNbY3VycmNvbnNdID0gKHN0cnVjdCB2
dF9zdHJ1Y3QgKikga21lbV9zdGFydDsNCiAJCWttZW1fc3RhcnQgKz0gc2l6
ZW9mKHN0cnVjdCB2dF9zdHJ1Y3QpOw0KKwkJdmlkZW9idWYgPSAwOw0KIAkJ
dmlzdWFsX2luaXQoY3VycmNvbnMsIDEpOw0KIAkJc2NyZWVuYnVmID0gKHVu
c2lnbmVkIHNob3J0ICopIGttZW1fc3RhcnQ7DQogCQlrbWVtX3N0YXJ0ICs9
IHNjcmVlbmJ1Zl9zaXplOw0KQEAgLTI0MTksNiArMjQyNCw3IEBADQogCQkJ
c2F2ZV9zY3JlZW4oaSk7DQogCQlvbGRfd2FzX2NvbG9yID0gdmNfY29uc1tp
XS5kLT52Y19jYW5fZG9fY29sb3I7DQogCQl2Y19jb25zW2ldLmQtPnZjX3N3
LT5jb25fZGVpbml0KHZjX2NvbnNbaV0uZCk7DQorCQl2aWRlb2J1ZiA9IDA7
DQogCQl2aXN1YWxfaW5pdChpLCAwKTsNCiAJCXVwZGF0ZV9hdHRyKGkpOw0K
IA0KLS0tIGxpbnV4L2RyaXZlcnMvY2hhci9jb25zb2xlX21hY3Jvcy5oLm9y
aWcJTW9uIEp1bCAyNiAxNTowNDozMCAxOTk5DQorKysgbGludXgvZHJpdmVy
cy9jaGFyL2NvbnNvbGVfbWFjcm9zLmgJU3VuIEF1ZyAgMSAwMTowMDoxOCAx
OTk5DQpAQCAtMSw2ICsxLDcgQEANCiAjZGVmaW5lIGNvbnNfbnVtCSh2Y19j
b25zW2N1cnJjb25zXS5kLT52Y19udW0pDQogI2RlZmluZSBzdwkJKHZjX2Nv
bnNbY3VycmNvbnNdLmQtPnZjX3N3KQ0KICNkZWZpbmUgc2NyZWVuYnVmCSh2
Y19jb25zW2N1cnJjb25zXS5kLT52Y19zY3JlZW5idWYpDQorI2RlZmluZSB2
aWRlb2J1ZgkodmNfY29uc1tjdXJyY29uc10uZC0+dmNfdmlkZW9idWYpDQog
I2RlZmluZSBzY3JlZW5idWZfc2l6ZQkodmNfY29uc1tjdXJyY29uc10uZC0+
dmNfc2NyZWVuYnVmX3NpemUpDQogI2RlZmluZSBvcmlnaW4JCSh2Y19jb25z
W2N1cnJjb25zXS5kLT52Y19vcmlnaW4pDQogI2RlZmluZSBzY3JfdG9wCQko
dmNfY29uc1tjdXJyY29uc10uZC0+dmNfc2NyX3RvcCkNCi0tLSBsaW51eC9k
cml2ZXJzL2NoYXIvcGNfa2V5Yi5jLm9yaWcJU2F0IEp1bCAzMSAxNToyNzoz
MSAxOTk5DQorKysgbGludXgvZHJpdmVycy9jaGFyL3BjX2tleWIuYwlTdW4g
QXVnICAxIDAxOjAwOjE4IDE5OTkNCkBAIC0xMDQsOSArMTA0LDkgQEANCiAg
KiBDb250cm9sbGVyIFN0YXR1cyByZWdpc3RlciBhcmUgc2V0IDAuIg0KICAq
Lw0KIA0KLXN0YXRpYyB2b2lkIGtiX3dhaXQodm9pZCkNCitzdGF0aWMgdm9p
ZCBrYl93YWl0KHVuc2lnbmVkIGxvbmcgKiBmbGFncykNCiB7DQotCXVuc2ln
bmVkIGxvbmcgdGltZW91dCA9IEtCQ19USU1FT1VUOw0KKwl1bnNpZ25lZCBs
b25nIHRpbWVvdXQgPSBLQkNfVElNRU9VVCoxMDsNCiANCiAJZG8gew0KIAkJ
LyoNCkBAIC0xMTcsOCArMTE3LDEzIEBADQogDQogCQlpZiAoISAoc3RhdHVz
ICYgS0JEX1NUQVRfSUJGKSkNCiAJCQlyZXR1cm47DQotCQltZGVsYXkoMSk7
DQotCQl0aW1lb3V0LS07DQorCQkvKg0KKwkJICogV2UgcmVsZWFzZS9yZWdy
YWIgdGhlIGNvbnRyb2xsZXIgbG9jayBiZWZvcmUgZGVsYXlpbmcNCisJCSAq
IHRoZSBwcm9jZXNzIC0gdG8gcmVkdWNlIHNjaGVkdWxpbmcgbGF0ZW5jaWVz
Lg0KKwkJICovDQorCQlzcGluX3VubG9ja19pcnEoJmtiZF9jb250cm9sbGVy
X2xvY2spOw0KKwkJdWRlbGF5X3Jlc2NoZWQoMTAwKTsNCisJCXNwaW5fbG9j
a19pcnFzYXZlKCZrYmRfY29udHJvbGxlcl9sb2NrLCAqZmxhZ3MpOw0KIAl9
IHdoaWxlICh0aW1lb3V0KTsNCiAjaWZkZWYgS0JEX1JFUE9SVF9USU1FT1VU
Uw0KIAlwcmludGsoS0VSTl9XQVJOSU5HICJLZXlib2FyZCB0aW1lZCBvdXRb
MV1cbiIpOw0KQEAgLTQ3MSw3ICs0NzYsNyBAQA0KIAlpbnQgcmV0cmllcyA9
IDM7DQogDQogCWRvIHsNCi0JCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IEtC
RF9USU1FT1VUOw0KKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gS0JEX1RJ
TUVPVVQqMTA7DQogDQogCQlhY2tub3dsZWRnZSA9IDA7IC8qIFNldCBieSBp
bnRlcnJ1cHQgcm91dGluZSBvbiByZWNlaXB0IG9mIEFDSy4gKi8NCiAJCXJl
c2VuZCA9IDA7DQpAQCAtNDgyLDcgKzQ4Nyw3IEBADQogCQkJCXJldHVybiAx
Ow0KIAkJCWlmIChyZXNlbmQpDQogCQkJCWJyZWFrOw0KLQkJCW1kZWxheSgx
KTsNCisJCQl1ZGVsYXkoMTAwKTsNCiAJCQlpZiAoIS0tdGltZW91dCkgew0K
ICNpZmRlZiBLQkRfUkVQT1JUX1RJTUVPVVRTDQogCQkJCXByaW50ayhLRVJO
X1dBUk5JTkcgIktleWJvYXJkIHRpbWVvdXRbMl1cbiIpOw0KQEAgLTU1NSwx
MyArNTYwLDEzIEBADQogDQogc3RhdGljIGludCBfX2luaXQga2JkX3dhaXRf
Zm9yX2lucHV0KHZvaWQpDQogew0KLQlsb25nIHRpbWVvdXQgPSBLQkRfSU5J
VF9USU1FT1VUOw0KKwlsb25nIHRpbWVvdXQgPSBLQkRfSU5JVF9USU1FT1VU
KjEwOw0KIA0KIAlkbyB7DQogCQlpbnQgcmV0dmFsID0ga2JkX3JlYWRfaW5w
dXQoKTsNCiAJCWlmIChyZXR2YWwgPj0gMCkNCiAJCQlyZXR1cm4gcmV0dmFs
Ow0KLQkJbWRlbGF5KDEpOw0KKwkJdWRlbGF5KDEwMCk7DQogCX0gd2hpbGUg
KC0tdGltZW91dCk7DQogCXJldHVybiAtMTsNCiB9DQpAQCAtNTcxLDcgKzU3
Niw3IEBADQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQogDQogCXNwaW5fbG9j
a19pcnFzYXZlKCZrYmRfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7DQotCWti
X3dhaXQoKTsNCisJa2Jfd2FpdCgmZmxhZ3MpOw0KIAlvdXRiKGRhdGEsIGFk
ZHJlc3MpOw0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYmRfY29udHJv
bGxlcl9sb2NrLCBmbGFncyk7DQogfQ0KQEAgLTU4Miw5ICs1ODcsOSBAQA0K
IAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIA0KIAlzcGluX2xvY2tfaXJxc2F2
ZSgma2JkX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOw0KLQlrYl93YWl0KCk7
DQorCWtiX3dhaXQoJmZsYWdzKTsNCiAJb3V0YihLQkRfQ0NNRF9XUklURV9N
T0RFLCBLQkRfQ05UTF9SRUcpOw0KLQlrYl93YWl0KCk7DQorCWtiX3dhaXQo
JmZsYWdzKTsNCiAJb3V0YihjbWQsIEtCRF9EQVRBX1JFRyk7DQogCXNwaW5f
dW5sb2NrX2lycXJlc3RvcmUoJmtiZF9jb250cm9sbGVyX2xvY2ssIGZsYWdz
KTsNCiB9DQpAQCAtNzMxLDEwICs3MzYsMTAgQEANCiAJICogYml0IGlzIGFs
c28gc2V0IHRvIDEgaW4gdGhlIFN0YXR1cyBSZWdpc3Rlciwgd2UgYXNzdW1l
IHRoaXMNCiAJICogY29udHJvbGxlciBoYXMgYW4gQXV4aWxpYXJ5IFBvcnQg
KGEuay5hLiBNb3VzZSBQb3J0KS4NCiAJICovDQotCWtiX3dhaXQoKTsNCisJ
a2Jfd2FpdCgmZmxhZ3MpOw0KIAlvdXRiKEtCRF9DQ01EX1dSSVRFX0FVWF9P
QlVGLCBLQkRfQ05UTF9SRUcpOw0KIA0KLQlrYl93YWl0KCk7DQorCWtiX3dh
aXQoJmZsYWdzKTsNCiAJb3V0YigweDVhLCBLQkRfREFUQV9SRUcpOyAvKiAw
eDVhIGlzIGEgcmFuZG9tIGR1bW15IHZhbHVlLiAqLw0KIA0KIAlkbyB7DQpA
QCAtNzQ4LDcgKzc1Myw3IEBADQogCQkJfQ0KIAkJCWJyZWFrOw0KIAkJfQ0K
LQkJbWRlbGF5KDEpOw0KKwkJdWRlbGF5KDEwMCk7DQogCX0gd2hpbGUgKC0t
bG9vcHMpOw0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYmRfY29udHJv
bGxlcl9sb2NrLCBmbGFncyk7DQogDQpAQCAtNzYzLDkgKzc2OCw5IEBADQog
CXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQogDQogCXNwaW5fbG9ja19pcnFzYXZl
KCZrYmRfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7DQotCWtiX3dhaXQoKTsN
CisJa2Jfd2FpdCgmZmxhZ3MpOw0KIAlvdXRiKEtCRF9DQ01EX1dSSVRFX01P
VVNFLCBLQkRfQ05UTF9SRUcpOw0KLQlrYl93YWl0KCk7DQorCWtiX3dhaXQo
JmZsYWdzKTsNCiAJb3V0Yih2YWwsIEtCRF9EQVRBX1JFRyk7DQogCXNwaW5f
dW5sb2NrX2lycXJlc3RvcmUoJmtiZF9jb250cm9sbGVyX2xvY2ssIGZsYWdz
KTsNCiB9DQpAQCAtNzc4LDEzICs3ODMsMTMgQEANCiAJdW5zaWduZWQgbG9u
ZyBmbGFnczsNCiANCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmtiZF9jb250cm9s
bGVyX2xvY2ssIGZsYWdzKTsNCi0Ja2Jfd2FpdCgpOw0KKwlrYl93YWl0KCZm
bGFncyk7DQogCW91dGIoS0JEX0NDTURfV1JJVEVfTU9VU0UsIEtCRF9DTlRM
X1JFRyk7DQotCWtiX3dhaXQoKTsNCisJa2Jfd2FpdCgmZmxhZ3MpOw0KIAlv
dXRiKHZhbCwgS0JEX0RBVEFfUkVHKTsNCiAJLyogd2UgZXhwZWN0IGFuIEFD
SyBpbiByZXNwb25zZS4gKi8NCiAJbW91c2VfcmVwbHlfZXhwZWN0ZWQrKzsN
Ci0Ja2Jfd2FpdCgpOw0KKwlrYl93YWl0KCZmbGFncyk7DQogCXNwaW5fdW5s
b2NrX2lycXJlc3RvcmUoJmtiZF9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsN
CiB9DQogDQpAQCAtOTE0LDYgKzkxOSw3IEBADQogCQkJZ2V0X3VzZXIoYywg
YnVmZmVyKyspOw0KIAkJCWF1eF93cml0ZV9kZXYoYyk7DQogCQkJd3JpdHRl
bisrOw0KKwkJCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQogCQl9IHdoaWxl
ICgtLWNvdW50KTsNCiAJCXJldHZhbCA9IC1FSU87DQogCQlpZiAod3JpdHRl
bikgew0KLS0tIGxpbnV4L2RyaXZlcnMvdmlkZW8vdmdhY29uLmMub3JpZwlX
ZWQgTWF5IDEyIDAxOjMwOjM2IDE5OTkNCisrKyBsaW51eC9kcml2ZXJzL3Zp
ZGVvL3ZnYWNvbi5jCVN1biBBdWcgIDEgMDE6MDA6MTggMTk5OQ0KQEAgLTMz
LDYgKzMzLDggQEANCiAgKiAgbW9yZSBkZXRhaWxzLg0KICAqLw0KIA0KKyNk
ZWZpbmUgVkdBX0xPQ0FMIDENCisNCiAjaW5jbHVkZSA8bGludXgvY29uZmln
Lmg+DQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQogI2luY2x1ZGUgPGxp
bnV4L3NjaGVkLmg+DQpAQCAtNTEsNiArNTMsOCBAQA0KIA0KICNpbmNsdWRl
IDxhc20vaW8uaD4NCiANCisjaW5jbHVkZSA8bGludXgvdnRfYnVmZmVyLmg+
DQorDQogDQogI2RlZmluZSBCTEFOSyAweDAwMjANCiANCkBAIC05Niw4ICsx
MDAsOCBAQA0KIA0KIA0KIC8qIERlc2NyaXB0aW9uIG9mIHRoZSBoYXJkd2Fy
ZSBzaXR1YXRpb24gKi8NCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAgIHZnYV92
cmFtX2Jhc2U7CQkvKiBCYXNlIG9mIHZpZGVvIG1lbW9yeSAqLw0KLXN0YXRp
YyB1bnNpZ25lZCBsb25nICAgdmdhX3ZyYW1fZW5kOwkJLyogRW5kIG9mIHZp
ZGVvIG1lbW9yeSAqLw0KK3Vuc2lnbmVkIGxvbmcgICB2Z2FfdnJhbV9iYXNl
OwkJLyogQmFzZSBvZiB2aWRlbyBtZW1vcnkgKi8NCit1bnNpZ25lZCBsb25n
ICAgdmdhX3ZyYW1fZW5kOwkJLyogRW5kIG9mIHZpZGVvIG1lbW9yeSAqLw0K
IHN0YXRpYyB1MTYgICAgICAgICAgICAgdmdhX3ZpZGVvX3BvcnRfcmVnOwkv
KiBWaWRlbyByZWdpc3RlciBzZWxlY3QgcG9ydCAqLw0KIHN0YXRpYyB1MTYg
ICAgICAgICAgICAgdmdhX3ZpZGVvX3BvcnRfdmFsOwkvKiBWaWRlbyByZWdp
c3RlciB2YWx1ZSBwb3J0ICovDQogc3RhdGljIHVuc2lnbmVkIGludCAgICB2
Z2FfdmlkZW9fbnVtX2NvbHVtbnM7CS8qIE51bWJlciBvZiB0ZXh0IGNvbHVt
bnMgKi8NCkBAIC0xMTUsNiArMTE5LDcgQEANCiBzdGF0aWMgaW50CSAgICAg
ICB2Z2FfdmlkZW9fZm9udF9oZWlnaHQ7DQogc3RhdGljIHVuc2lnbmVkIGlu
dCAgICB2Z2Ffcm9sbGVkX292ZXIgPSAwOw0KIA0KK3N0YXRpYyBjaGFyIHZn
YV92cmFtX2NvcHlbMTI4KjEwMjRdOwkvKiBJbi1tZW1vcnkgY29weSBvZiB2
aWRlbyBtZW1vcnkgKi8NCiANCiB2b2lkIG5vX3Njcm9sbChjaGFyICpzdHIs
IGludCAqaW50cykNCiB7DQpAQCAtMjY3LDI0ICsyNzIsMjQgQEANCiAJICoJ
QXJlIHRoZXJlIHNtYXJ0ZXIgbWV0aG9kcyBhcm91bmQ/DQogCSAqLw0KIAlw
ID0gKHUxNiAqKXZnYV92cmFtX2Jhc2U7DQotCXNhdmVkMSA9IHNjcl9yZWFk
dyhwKTsNCi0Jc2F2ZWQyID0gc2NyX3JlYWR3KHAgKyAxKTsNCi0Jc2NyX3dy
aXRldygweEFBNTUsIHApOw0KLQlzY3Jfd3JpdGV3KDB4NTVBQSwgcCArIDEp
Ow0KLQlpZiAoc2NyX3JlYWR3KHApICE9IDB4QUE1NSB8fCBzY3JfcmVhZHco
cCArIDEpICE9IDB4NTVBQSkgew0KLQkJc2NyX3dyaXRldyhzYXZlZDEsIHAp
Ow0KLQkJc2NyX3dyaXRldyhzYXZlZDIsIHAgKyAxKTsNCisJc2F2ZWQxID0g
c2NyX3JlYWR3X25vbmJ1ZmZlcmVkKHApOw0KKwlzYXZlZDIgPSBzY3JfcmVh
ZHdfbm9uYnVmZmVyZWQocCArIDEpOw0KKwlzY3Jfd3JpdGV3X25vbmJ1ZmZl
cmVkKDB4QUE1NSwgcCk7DQorCXNjcl93cml0ZXdfbm9uYnVmZmVyZWQoMHg1
NUFBLCBwICsgMSk7DQorCWlmIChzY3JfcmVhZHdfbm9uYnVmZmVyZWQocCkg
IT0gMHhBQTU1IHx8IHNjcl9yZWFkd19ub25idWZmZXJlZChwICsgMSkgIT0g
MHg1NUFBKSB7DQorCQlzY3Jfd3JpdGV3X25vbmJ1ZmZlcmVkKHNhdmVkMSwg
cCk7DQorCQlzY3Jfd3JpdGV3X25vbmJ1ZmZlcmVkKHNhdmVkMiwgcCArIDEp
Ow0KIAkJZ290byBub192Z2E7DQogCX0NCi0Jc2NyX3dyaXRldygweDU1QUEs
IHApOw0KLQlzY3Jfd3JpdGV3KDB4QUE1NSwgcCArIDEpOw0KLQlpZiAoc2Ny
X3JlYWR3KHApICE9IDB4NTVBQSB8fCBzY3JfcmVhZHcocCArIDEpICE9IDB4
QUE1NSkgew0KLQkJc2NyX3dyaXRldyhzYXZlZDEsIHApOw0KLQkJc2NyX3dy
aXRldyhzYXZlZDIsIHAgKyAxKTsNCisJc2NyX3dyaXRld19ub25idWZmZXJl
ZCgweDU1QUEsIHApOw0KKwlzY3Jfd3JpdGV3X25vbmJ1ZmZlcmVkKDB4QUE1
NSwgcCArIDEpOw0KKwlpZiAoc2NyX3JlYWR3X25vbmJ1ZmZlcmVkKHApICE9
IDB4NTVBQSB8fCBzY3JfcmVhZHdfbm9uYnVmZmVyZWQocCArIDEpICE9IDB4
QUE1NSkgew0KKwkJc2NyX3dyaXRld19ub25idWZmZXJlZChzYXZlZDEsIHAp
Ow0KKwkJc2NyX3dyaXRld19ub25idWZmZXJlZChzYXZlZDIsIHAgKyAxKTsN
CiAJCWdvdG8gbm9fdmdhOw0KIAl9DQotCXNjcl93cml0ZXcoc2F2ZWQxLCBw
KTsNCi0Jc2NyX3dyaXRldyhzYXZlZDIsIHAgKyAxKTsNCisJc2NyX3dyaXRl
d19ub25idWZmZXJlZChzYXZlZDEsIHApOw0KKwlzY3Jfd3JpdGV3X25vbmJ1
ZmZlcmVkKHNhdmVkMiwgcCArIDEpOw0KIA0KIAlpZiAodmdhX3ZpZGVvX3R5
cGUgPT0gVklERU9fVFlQRV9FR0FDDQogCSAgICB8fCB2Z2FfdmlkZW9fdHlw
ZSA9PSBWSURFT19UWVBFX1ZHQUMNCkBAIC0zMTgsNiArMzIzLDggQEANCiAJ
dmdhY29uX3VuaV9wYWdlZGlyWzFdKys7DQogCWlmICghdmdhY29uX3VuaV9w
YWdlZGlyWzBdICYmIHApDQogCQljb25fc2V0X2RlZmF1bHRfdW5pbWFwKGMt
PnZjX251bSk7DQorDQorCWMtPnZjX3ZpZGVvYnVmID0gKHVuc2lnbmVkIGxv
bmcpIHZnYV92cmFtX2NvcHk7DQogfQ0KIA0KIHN0YXRpYyBpbmxpbmUgdm9p
ZCB2Z2Ffc2V0X21lbV90b3Aoc3RydWN0IHZjX2RhdGEgKmMpDQpAQCAtMzY1
LDYgKzM3Miw3IEBADQogc3RhdGljIHZvaWQgdmdhY29uX2ludmVydF9yZWdp
b24oc3RydWN0IHZjX2RhdGEgKmMsIHUxNiAqcCwgaW50IGNvdW50KQ0KIHsN
CiAJaW50IGNvbCA9IHZnYV9jYW5fZG9fY29sb3I7DQorCWludCBjdXJyY29u
cyA9IGMtPnZjX251bTsNCiANCiAJd2hpbGUgKGNvdW50LS0pIHsNCiAJCXUx
NiBhID0gc2NyX3JlYWR3KHApOw0KQEAgLTM3Miw3ICszODAsNyBAQA0KIAkJ
CWEgPSAoKGEpICYgMHg4OGZmKSB8ICgoKGEpICYgMHg3MDAwKSA+PiA0KSB8
ICgoKGEpICYgMHgwNzAwKSA8PCA0KTsNCiAJCWVsc2UNCiAJCQlhIF49ICgo
YSAmIDB4MDcwMCkgPT0gMHgwMTAwKSA/IDB4NzAwMCA6IDB4NzcwMDsNCi0J
CXNjcl93cml0ZXcoYSwgcCsrKTsNCisJCV9fc2NyX3dyaXRldyhhLCBwKyss
IGMtPnZjX251bSk7DQogCX0NCiB9DQogDQpAQCAtNDUxLDYgKzQ1OSw3IEBA
DQogDQogc3RhdGljIGludCB2Z2Fjb25fc3dpdGNoKHN0cnVjdCB2Y19kYXRh
ICpjKQ0KIHsNCisJaW50IGN1cnJjb25zID0gYy0+dmNfbnVtOw0KIAkvKg0K
IAkgKiBXZSBuZWVkIHRvIHNhdmUgc2NyZWVuIHNpemUgaGVyZSBhcyBpdCdz
IHRoZSBvbmx5IHdheQ0KIAkgKiB3ZSBjYW4gc3BvdCB0aGUgc2NyZWVuIGhh
cyBiZWVuIHJlc2l6ZWQgYW5kIHdlIG5lZWQgdG8NCkBAIC02NDEsMTAgKzY1
MCwxMCBAQA0KIAkJCXJldHVybiAwOw0KIAkJfQ0KIAkJdmdhY29uX3NldF9v
cmlnaW4oYyk7DQotCQlzY3JfbWVtc2V0dygodm9pZCAqKXZnYV92cmFtX2Jh
c2UsIEJMQU5LLCBjLT52Y19zY3JlZW5idWZfc2l6ZSk7DQorCQlfX3Njcl9t
ZW1zZXR3KCh2b2lkICopdmdhX3ZyYW1fYmFzZSwgQkxBTkssIGMtPnZjX3Nj
cmVlbmJ1Zl9zaXplLCBjLT52Y19udW0pOw0KIAkJcmV0dXJuIDE7DQogCWNh
c2UgLTE6CQkJLyogRW50ZXJpbmcgZ3JhcGhpYyBtb2RlICovDQotCQlzY3Jf
bWVtc2V0dygodm9pZCAqKXZnYV92cmFtX2Jhc2UsIEJMQU5LLCBjLT52Y19z
Y3JlZW5idWZfc2l6ZSk7DQorCQlfX3Njcl9tZW1zZXR3KCh2b2lkICopdmdh
X3ZyYW1fYmFzZSwgQkxBTkssIGMtPnZjX3NjcmVlbmJ1Zl9zaXplLCBjLT52
Y19udW0pOw0KIAkJdmdhX2lzX2dmeCA9IDE7DQogCQlyZXR1cm4gMTsNCiAJ
ZGVmYXVsdDoJCQkvKiBWRVNBIGJsYW5raW5nICovDQpAQCAtOTQwLDYgKzk0
OSw3IEBADQogc3RhdGljIHZvaWQgdmdhY29uX3NhdmVfc2NyZWVuKHN0cnVj
dCB2Y19kYXRhICpjKQ0KIHsNCiAJc3RhdGljIGludCB2Z2FfYm9vdHVwX2Nv
bnNvbGUgPSAwOw0KKwlpbnQgY3VycmNvbnMgPSBjLT52Y19udW07DQogDQog
CWlmICghdmdhX2Jvb3R1cF9jb25zb2xlKSB7DQogCQkvKiBUaGlzIGlzIGEg
Z3Jvc3MgaGFjaywgYnV0IGhlcmUgaXMgdGhlIG9ubHkgcGxhY2Ugd2UgY2Fu
DQpAQCAtOTU0LDEwICs5NjQsMTUgQEANCiAJCXNjcl9tZW1jcHl3X2Zyb20o
KHUxNiAqKSBjLT52Y19zY3JlZW5idWYsICh1MTYgKikgYy0+dmNfb3JpZ2lu
LCBjLT52Y19zY3JlZW5idWZfc2l6ZSk7DQogfQ0KIA0KK3Vuc2lnbmVkIGlu
dCBzY3JvbGxfbGF0LCBtYXhfc2Nyb2xsX2xhdCwgbWF4X3Njcm9sbF9zaXpl
LCBtYXhfc2Nyb2xsX2FkZHIxLA0KK21heF9zY3JvbGxfYWRkcjI7DQorDQog
c3RhdGljIGludCB2Z2Fjb25fc2Nyb2xsKHN0cnVjdCB2Y19kYXRhICpjLCBp
bnQgdCwgaW50IGIsIGludCBkaXIsIGludCBsaW5lcykNCiB7DQorCXVuc2ln
bmVkIGxvbmcgbG9uZyB0MCwgdDE7DQogCXVuc2lnbmVkIGxvbmcgb2xkbzsN
CiAJdW5zaWduZWQgaW50IGRlbHRhOw0KKwlpbnQgY3VycmNvbnMgPSBjLT52
Y19udW07DQogCQ0KIAlpZiAodCB8fCBiICE9IGMtPnZjX3Jvd3MgfHwgdmdh
X2lzX2dmeCkNCiAJCXJldHVybiAwOw0KQEAgLTk3MCwxNiArOTg1LDE5IEBA
DQogDQogCW9sZG8gPSBjLT52Y19vcmlnaW47DQogCWRlbHRhID0gbGluZXMg
KiBjLT52Y19zaXplX3JvdzsNCit0MCA9IHQxID0gMDsNCiAJaWYgKGRpciA9
PSBTTV9VUCkgew0KIAkJaWYgKGMtPnZjX3Njcl9lbmQgKyBkZWx0YSA+PSB2
Z2FfdnJhbV9lbmQpIHsNCi0JCQlzY3JfbWVtY3B5dygodTE2ICopdmdhX3Zy
YW1fYmFzZSwNCi0JCQkJICAgICh1MTYgKikob2xkbyArIGRlbHRhKSwNCi0J
CQkJICAgIGMtPnZjX3NjcmVlbmJ1Zl9zaXplIC0gZGVsdGEpOw0KK3JkdHNj
bGwodDApOw0KKwkJc2NyX21lbWNweXcoKHUxNiAqKXZnYV92cmFtX2Jhc2Us
DQorCQkJCSh1MTYgKikob2xkbyArIGRlbHRhKSwNCisJCQkJYy0+dmNfc2Ny
ZWVuYnVmX3NpemUgLSBkZWx0YSk7DQorcmR0c2NsbCh0MSk7DQogCQkJYy0+
dmNfb3JpZ2luID0gdmdhX3ZyYW1fYmFzZTsNCiAJCQl2Z2Ffcm9sbGVkX292
ZXIgPSBvbGRvIC0gdmdhX3ZyYW1fYmFzZTsNCiAJCX0gZWxzZQ0KIAkJCWMt
PnZjX29yaWdpbiArPSBkZWx0YTsNCi0JCXNjcl9tZW1zZXR3KCh1MTYgKiko
Yy0+dmNfb3JpZ2luICsgYy0+dmNfc2NyZWVuYnVmX3NpemUgLSBkZWx0YSks
IGMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIsIGRlbHRhKTsNCisJCV9fc2NyX21l
bXNldHcoKHUxNiAqKShjLT52Y19vcmlnaW4gKyBjLT52Y19zY3JlZW5idWZf
c2l6ZSAtIGRlbHRhKSwgYy0+dmNfdmlkZW9fZXJhc2VfY2hhciwgZGVsdGEs
IGMtPnZjX251bSk7DQogCX0gZWxzZSB7DQogCQlpZiAob2xkbyAtIGRlbHRh
IDwgdmdhX3ZyYW1fYmFzZSkgew0KIAkJCXNjcl9tZW1tb3ZldygodTE2ICop
KHZnYV92cmFtX2VuZCAtIGMtPnZjX3NjcmVlbmJ1Zl9zaXplICsgZGVsdGEp
LA0KQEAgLTk5MCw4ICsxMDA4LDE4IEBADQogCQl9IGVsc2UNCiAJCQljLT52
Y19vcmlnaW4gLT0gZGVsdGE7DQogCQljLT52Y19zY3JfZW5kID0gYy0+dmNf
b3JpZ2luICsgYy0+dmNfc2NyZWVuYnVmX3NpemU7DQotCQlzY3JfbWVtc2V0
dygodTE2ICopKGMtPnZjX29yaWdpbiksIGMtPnZjX3ZpZGVvX2VyYXNlX2No
YXIsIGRlbHRhKTsNCisJCV9fc2NyX21lbXNldHcoKHUxNiAqKShjLT52Y19v
cmlnaW4pLCBjLT52Y192aWRlb19lcmFzZV9jaGFyLCBkZWx0YSwgYy0+dmNf
bnVtKTsNCiAJfQ0KKw0KK3Njcm9sbF9sYXQgPSAodW5zaWduZWQgaW50KSh0
MS10MCkgLyA0MDA7DQoraWYgKG1heF9zY3JvbGxfbGF0IDwgc2Nyb2xsX2xh
dCkgew0KKwlpbnQgY3VycmNvbnMgPSBjLT52Y19udW07DQorCW1heF9zY3Jv
bGxfbGF0ID0gc2Nyb2xsX2xhdDsNCisJbWF4X3Njcm9sbF9hZGRyMSA9ICh1
bnNpZ25lZCBpbnQpdjJtKCh1bnNpZ25lZCBzaG9ydCAqKXZnYV92cmFtX2Jh
c2UpOw0KKwltYXhfc2Nyb2xsX2FkZHIyID0gKHVuc2lnbmVkIGludCl2Mm0o
KHVuc2lnbmVkIHNob3J0ICopKG9sZG8gKyBkZWx0YSkpOw0KKwltYXhfc2Ny
b2xsX3NpemUgPSAodW5zaWduZWQgaW50KShjLT52Y19zY3JlZW5idWZfc2l6
ZSAtIGRlbHRhKTsNCit9DQorDQogCWMtPnZjX3Njcl9lbmQgPSBjLT52Y19v
cmlnaW4gKyBjLT52Y19zY3JlZW5idWZfc2l6ZTsNCiAJYy0+dmNfdmlzaWJs
ZV9vcmlnaW4gPSBjLT52Y19vcmlnaW47DQogCXZnYV9zZXRfbWVtX3RvcChj
KTsNCi0tLSBsaW51eC9hcmNoL2kzODYvbW0vZmF1bHQuYy5vcmlnCVN1biBO
b3YgMjIgMTg6Mzg6MTkgMTk5OA0KKysrIGxpbnV4L2FyY2gvaTM4Ni9tbS9m
YXVsdC5jCVN1biBBdWcgIDEgMDE6MDA6MTggMTk5OQ0KQEAgLTE3NCw3ICsx
NzQsNyBAQA0KIAkJCXRzay0+dHNzLnNjcmVlbl9iaXRtYXAgfD0gMSA8PCBi
aXQ7DQogCX0NCiAJdXAoJm1tLT5tbWFwX3NlbSk7DQotCXJldHVybjsNCisJ
Z290byBvdXQ7DQogDQogLyoNCiAgKiBTb21ldGhpbmcgdHJpZWQgdG8gYWNj
ZXNzIG1lbW9yeSB0aGF0IGlzbid0IGluIG91ciBtZW1vcnkgbWFwLi4NCkBA
IC0xODksNyArMTg5LDcgQEANCiAJCXRzay0+dHNzLmVycm9yX2NvZGUgPSBl
cnJvcl9jb2RlOw0KIAkJdHNrLT50c3MudHJhcF9ubyA9IDE0Ow0KIAkJZm9y
Y2Vfc2lnKFNJR1NFR1YsIHRzayk7DQotCQlyZXR1cm47DQorCQlnb3RvIG91
dDsNCiAJfQ0KIA0KIAkvKg0KQEAgLTIwMiw3ICsyMDIsNyBAQA0KIA0KIAkJ
aWYgKG5yID09IDYpIHsNCiAJCQlkb19pbnZhbGlkX29wKHJlZ3MsIDApOw0K
LQkJCXJldHVybjsNCisJCQlnb3RvIG91dDsNCiAJCX0NCiAJfQ0KIA0KQEAg
LTIxMCw3ICsyMTAsNyBAQA0KIAkvKiBBcmUgd2UgcHJlcGFyZWQgdG8gaGFu
ZGxlIHRoaXMga2VybmVsIGZhdWx0PyAgKi8NCiAJaWYgKChmaXh1cCA9IHNl
YXJjaF9leGNlcHRpb25fdGFibGUocmVncy0+ZWlwKSkgIT0gMCkgew0KIAkJ
cmVncy0+ZWlwID0gZml4dXA7DQotCQlyZXR1cm47DQorCQlnb3RvIG91dDsN
CiAJfQ0KIA0KIC8qDQpAQCAtMjI5LDcgKzIyOSw3IEBADQogCQkgKiBDUFUg
c3RhdGUgb24gY2VydGFpbiBidWdneSBwcm9jZXNzb3JzLg0KIAkJICovDQog
CQlwcmludGsoIk9rIik7DQotCQlyZXR1cm47DQorCQlnb3RvIG91dDsNCiAJ
fQ0KIA0KIAlpZiAoYWRkcmVzcyA8IFBBR0VfU0laRSkNCkBAIC0yNzAsNCAr
MjcwLDUgQEANCiAJLyogS2VybmVsIG1vZGU/IEhhbmRsZSBleGNlcHRpb25z
IG9yIGRpZSAqLw0KIAlpZiAoIShlcnJvcl9jb2RlICYgNCkpDQogCQlnb3Rv
IG5vX2NvbnRleHQ7DQorb3V0Og0KIH0NCi0tLSBsaW51eC9hcmNoL2kzODYv
bW0vaW5pdC5jLm9yaWcJVGh1IEphbiAyMSAyMDoyODo0MCAxOTk5DQorKysg
bGludXgvYXJjaC9pMzg2L21tL2luaXQuYwlTdW4gQXVnICAxIDAxOjAwOjE4
IDE5OTkNCkBAIC00ODgsNiArNDg4LDEyIEBADQogCXZhbC0+ZnJlZXJhbSA9
IG5yX2ZyZWVfcGFnZXMgPDwgUEFHRV9TSElGVDsNCiAJdmFsLT5idWZmZXJy
YW0gPSBidWZmZXJtZW07DQogCXdoaWxlIChpLS0gPiAwKSAgew0KKwkJLyoN
CisJCSAqIHNpX21lbWluZm8oKSBjYW5ub3QgYmUgZXhhY3QsIGJ1dCBpdCBj
YW4gY2F1c2UgX2xvbmdfDQorCQkgKiBzY2hlZHVsaW5nIGxhdGVuY2llcyBv
biBiaWcgbWVtb3J5IGJveGVzLg0KKwkJICovDQorCQlpZiAoIShpICYgMzEp
KQ0KKwkJCWNvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQogCQlpZiAoUGFnZVJl
c2VydmVkKG1lbV9tYXAraSkpDQogCQkJY29udGludWU7DQogCQl2YWwtPnRv
dGFscmFtKys7DQotLS0gbGludXgvYXJjaC9pMzg2L2xpYi91c2VyY29weS5j
Lm9yaWcJU2F0IEp1bCAzMSAxMjo1ODoxOSAxOTk5DQorKysgbGludXgvYXJj
aC9pMzg2L2xpYi91c2VyY29weS5jCVN1biBBdWcgIDEgMDE6MDA6MTggMTk5
OQ0KQEAgLTEwLDYgKzEwLDcgQEANCiB1bnNpZ25lZCBsb25nDQogX19nZW5l
cmljX2NvcHlfdG9fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwg
dW5zaWduZWQgbG9uZyBuKQ0KIHsNCisJY29uZGl0aW9uYWxfc2NoZWR1bGUo
KTsNCiAJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHRvLCBuKSkNCiAJ
CV9fY29weV91c2VyKHRvLGZyb20sbik7DQogCXJldHVybiBuOw0KQEAgLTE4
LDYgKzE5LDcgQEANCiB1bnNpZ25lZCBsb25nDQogX19nZW5lcmljX2NvcHlf
ZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25l
ZCBsb25nIG4pDQogew0KKwljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAlp
ZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBuKSkNCiAJCV9fY29w
eV91c2VyX3plcm9pbmcodG8sZnJvbSxuKTsNCiAJcmV0dXJuIG47DQpAQCAt
NjAsNiArNjIsNyBAQA0KIF9fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0
LCBjb25zdCBjaGFyICpzcmMsIGxvbmcgY291bnQpDQogew0KIAlsb25nIHJl
czsNCisJY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsNCiAJX19kb19zdHJuY3B5
X2Zyb21fdXNlcihkc3QsIHNyYywgY291bnQsIHJlcyk7DQogCXJldHVybiBy
ZXM7DQogfQ0KQEAgLTY4LDYgKzcxLDcgQEANCiBzdHJuY3B5X2Zyb21fdXNl
cihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgbG9uZyBjb3VudCkNCiB7
DQogCWxvbmcgcmVzID0gLUVGQVVMVDsNCisJY29uZGl0aW9uYWxfc2NoZWR1
bGUoKTsNCiAJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3JjLCAxKSkN
CiAJCV9fZG9fc3RybmNweV9mcm9tX3VzZXIoZHN0LCBzcmMsIGNvdW50LCBy
ZXMpOw0KIAlyZXR1cm4gcmVzOw0KQEAgLTEwMiw2ICsxMDYsNyBAQA0KIHVu
c2lnbmVkIGxvbmcNCiBjbGVhcl91c2VyKHZvaWQgKnRvLCB1bnNpZ25lZCBs
b25nIG4pDQogew0KKwljb25kaXRpb25hbF9zY2hlZHVsZSgpOw0KIAlpZiAo
YWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQ0KIAkJX19kb19jbGVh
cl91c2VyKHRvLCBuKTsNCiAJcmV0dXJuIG47DQpAQCAtMTI0LDYgKzEyOSw3
IEBADQogew0KIAl1bnNpZ25lZCBsb25nIHJlczsNCiANCisJY29uZGl0aW9u
YWxfc2NoZWR1bGUoKTsNCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oDQogCQki
MDoJcmVwbmU7IHNjYXNiXG4iDQogCQkiCW5vdGwgJTBcbiINCg==
---1247997369-469175437-933461258=:28929--

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