Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Nov 2010 09:47:38 -0800
From:      Garrett Cooper <yanegomi@gmail.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: [PATCH] mptutil(8) - capture errors and percolate up to caller
Message-ID:  <AANLkTikAOehozECYANWNsDf8LdhE6H-Mg5rs7bPmw=Uc@mail.gmail.com>
In-Reply-To: <201011080958.39156.jhb@freebsd.org>
References:  <AANLkTinK_gPuqke7UAusJVV6apK0w=gU3sHjBsjhd00r@mail.gmail.com> <201011080958.39156.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--000e0ce001e65cc53d04948e3869
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

On Mon, Nov 8, 2010 at 6:58 AM, John Baldwin <jhb@freebsd.org> wrote:
> On Saturday, November 06, 2010 4:13:23 am Garrett Cooper wrote:
>> =A0 =A0 Similar to r214396, this patch deals with properly capturing err=
or
>> and passing it up to the caller in mptutil just in case the errno
>> value gets stomped on by warn*(3); this patch deals with an improper
>> use of warn(3), and also some malloc(3) errors, as well as shrink down
>> some static buffers to fit the data being output.
>> =A0 =A0 If someone could review and help me commit this patch it would b=
e
>> much appreciated; all I could do is run negative tests on my local box
>> and minor positive tests on my vmware fusion instance because it
>> doesn't fully emulate a fully working mpt(4) device (the vmware
>> instance consistently crashed with a warning about the mpt
>> controller's unimplemented features after I poked at it enough).
>> =A0 =A0 I'll submit another patch to fix up style(9) in this app if requ=
ested.
>> Thanks!
>
> The explicit 'return (ENOMEM)' calls are fine as-is. =A0I do not think th=
ey need
> changing.

    I'll changed back all of the other *alloc calls (I was just
thinking about all of the other awesome cases that malloc can fail,
but if we break that assumption a lot more of our programs would break
too unfortunately :(...).
    I read up on cam_getccb and I agree based on the description today:

     "cam_getccb() allocates a CCB using malloc(3) and sets fields in the C=
CB
     header using values from the cam_device structure."

    But if it called something else in cam_getccb other than malloc it
might confuse the end-user if it failed *shrugs*... But whatever, that
would have to be a wholesale change if things changed in this area so
I'll default to being lazy now :) (I'm almost positive Scott did that
because he understands the overall system a lot better than me :D..).

> Having static char arrays of '15' rather than '16' is probably pointless.=
 =A0The
> stack is already at least 4-byte aligned on all the architectures we supp=
ort,
> so a 15-byte char array will actually be 16 bytes. =A0It was chose to be =
a good
> enough value, not an exact fit. =A0An exact fit is not important here.

    Yeah, that was stupid micro-optimization on my part.

> Moving the 'buf' in mpt_raid_level() is a style bug. =A0It should stay wh=
ere it
> is. =A0Same with 'buf' in mpt_volstate() and mpt_pdstate().

    Same as above.

> IOC_STATUS_SUCCESS() returns a boolean, it is appropriate to test it with=
 !
> rather than =3D=3D 0. =A0It is also easier for a person to read the code =
that way.

    Good point. I didn't catch that part in style(9) before now.
Thanks for the review!
-Garrett

--000e0ce001e65cc53d04948e3869
Content-Type: text/x-patch; charset=US-ASCII;
	name="mptutil-capture-errno-values.patch"
Content-Disposition: attachment; filename="mptutil-capture-errno-values.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gg9n9sej0

SW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2V2dC5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmlu
L21wdHV0aWwvbXB0X2V2dC5jCShyZXZpc2lvbiAyMTQ5MDcpCisrKyB1c3Iuc2Jpbi9tcHR1dGls
L21wdF9ldnQuYwkod29ya2luZyBjb3B5KQpAQCAtOTQsMTggKzk0LDIwIEBACiB7CiAJQ09ORklH
X1BBR0VfTE9HXzAgKmxvZzsKIAlNUElfTE9HXzBfRU5UUlkgKiplbnRyaWVzOwotCWludCBjaCwg
ZmQsIGksIG51bV9ldmVudHMsIHZlcmJvc2U7CisJaW50IGNoLCBlcnJvciwgZmQsIGksIG51bV9l
dmVudHMsIHZlcmJvc2U7CiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAw
KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJy
bm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlsb2cgPSBtcHRfZ2V0X2V2ZW50cyhmZCwg
TlVMTCk7CiAJaWYgKGxvZyA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZh
aWxlZCB0byBnZXQgZXZlbnQgbG9nIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVy
biAoZXJyb3IpOwogCX0KIAogCS8qIERlZmF1bHQgc2V0dGluZ3MuICovCkBAIC0xMjgsNiArMTMw
LDggQEAKIAogCS8qIEJ1aWxkIGEgbGlzdCBvZiB2YWxpZCBlbnRyaWVzIGFuZCBzb3J0IHRoZW0g
Ynkgc2VxdWVuY2UuICovCiAJZW50cmllcyA9IG1hbGxvYyhzaXplb2YoTVBJX0xPR18wX0VOVFJZ
ICopICogbG9nLT5OdW1Mb2dFbnRyaWVzKTsKKwlpZiAoZW50cmllcyA9PSBOVUxMKQorCQlyZXR1
cm4gKEVOT01FTSk7CiAJbnVtX2V2ZW50cyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGxvZy0+TnVt
TG9nRW50cmllczsgaSsrKSB7CiAJCWlmIChsb2ctPkxvZ0VudHJ5W2ldLkxvZ0VudHJ5UXVhbGlm
aWVyID09CkluZGV4OiB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jYW0uYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1
c3Iuc2Jpbi9tcHR1dGlsL21wdF9jYW0uYwkocmV2aXNpb24gMjE0OTA3KQorKysgdXNyLnNiaW4v
bXB0dXRpbC9tcHRfY2FtLmMJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKIAlzdHJ1
Y3QgYnVzX21hdGNoX3BhdHRlcm4gKmI7CiAJdW5pb24gY2NiIGNjYjsKIAlzaXplX3QgYnVmc2l6
ZTsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoeHB0X29wZW4oKSA8IDApCiAJCXJldHVybiAoRU5YSU8p
OwpAQCAtOTEsOSArOTIsMTAgQEAKIAliLT5mbGFncyA9IEJVU19NQVRDSF9OQU1FIHwgQlVTX01B
VENIX1VOSVQgfCBCVVNfTUFUQ0hfQlVTX0lEOwogCiAJaWYgKGlvY3RsKHhwdGZkLCBDQU1JT0NP
TU1BTkQsICZjY2IpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQlmcmVlKGNjYi5jZG0ubWF0
Y2hlcyk7CiAJCWZyZWUoY2NiLmNkbS5wYXR0ZXJucyk7Ci0JCXJldHVybiAoZXJybm8pOworCQly
ZXR1cm4gKGVycm9yKTsKIAl9CiAJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKIApAQCAtMTI0LDcg
KzEyNiw3IEBACiAJdW5pb24gY2NiIGNjYjsKIAlwYXRoX2lkX3QgcGF0aF9pZDsKIAlzaXplX3Qg
YnVmc2l6ZTsKLQlpbnQgZXJyb3IsIGk7CisJaW50IGVycm9yOwogCiAJLyogbXB0KDQpIG9ubHkg
aGFuZGxlcyBkZXZpY2VzIG9uIGJ1cyAwLiAqLwogCWlmIChWb2x1bWVCdXMgIT0gMCkKQEAgLTE2
NCwxMCArMTY2LDEwIEBACiAJcC0+ZmxhZ3MgPSBQRVJJUEhfTUFUQ0hfUEFUSCB8IFBFUklQSF9N
QVRDSF9OQU1FIHwgUEVSSVBIX01BVENIX1RBUkdFVDsKIAogCWlmIChpb2N0bCh4cHRmZCwgQ0FN
SU9DT01NQU5ELCAmY2NiKSA8IDApIHsKLQkJaSA9IGVycm5vOworCQllcnJvciA9IGVycm5vOwog
CQlmcmVlKGNjYi5jZG0ubWF0Y2hlcyk7CiAJCWZyZWUoY2NiLmNkbS5wYXR0ZXJucyk7Ci0JCXJl
dHVybiAoaSk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlmcmVlKGNjYi5jZG0ucGF0dGVybnMp
OwogCkBAIC0zOTcsOCArMzk5LDggQEAKIAl1bmlvbiBjY2IgY2NiOwogCXBhdGhfaWRfdCBwYXRo
X2lkOwogCXNpemVfdCBidWZzaXplOwotCXVfaW50IGk7CiAJaW50IGNvdW50LCBlcnJvcjsKKwl1
aW50MzJfdCBpOwogCiAJaWYgKHhwdF9vcGVuKCkgPCAwKQogCQlyZXR1cm4gKEVOWElPKTsKQEAg
LTQzMSwxMCArNDMzLDEwIEBACiAJCXAtPmZsYWdzID0gUEVSSVBIX01BVENIX1BBVEggfCBQRVJJ
UEhfTUFUQ0hfTkFNRTsKIAogCQlpZiAoaW9jdGwoeHB0ZmQsIENBTUlPQ09NTUFORCwgJmNjYikg
PCAwKSB7Ci0JCQlpID0gZXJybm87CisJCQllcnJvciA9IGVycm5vOwogCQkJZnJlZShjY2IuY2Rt
Lm1hdGNoZXMpOwogCQkJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKLQkJCXJldHVybiAoaSk7CisJ
CQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCQlmcmVlKGNjYi5jZG0ucGF0dGVybnMpOwogCkBAIC00
ODEsNiArNDgzLDggQEAKIAkgKiBleGNsdWRlIHRoZW0gZnJvbSB0aGUgbGlzdC4KIAkgKi8KIAlp
b2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOworCWlmIChpb2MyID09IE5VTEwp
CisJCXJldHVybiAoZXJybm8pOwogCWRpc2tzID0gY2FsbG9jKGNjYi5jZG0ubnVtX21hdGNoZXMs
IHNpemVvZigqZGlza3MpKTsKIAljb3VudCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNjYi5jZG0u
bnVtX21hdGNoZXM7IGkrKykgewpJbmRleDogdXNyLnNiaW4vbXB0dXRpbC9tcHRfc2hvdy5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHVzci5zYmluL21wdHV0aWwvbXB0X3Nob3cuYwkocmV2aXNpb24gMjE0OTA3
KQorKysgdXNyLnNiaW4vbXB0dXRpbC9tcHRfc2hvdy5jCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBACiAJQ09ORklHX1BBR0VfSU9DXzIgKmlvYzI7CiAJQ09ORklHX1BBR0VfSU9DXzYg
KmlvYzY7CiAJVTE2IElPQ1N0YXR1czsKLQlpbnQgZmQsIGNvbW1hOworCWludCBjb21tYSwgZXJy
b3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgYWRhcHRlcjogZXh0cmEg
YXJndW1lbnRzIik7CkBAIC04OCwxNyArODgsMTkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3Vu
aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4i
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCW1hbjAgPSBt
cHRfcmVhZF9tYW5fcGFnZShmZCwgMCwgTlVMTCk7CiAJaWYgKG1hbjAgPT0gTlVMTCkgeworCQll
cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGNvbnRyb2xsZXIgaW5mbyIpOwot
CQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWlmIChtYW4wLT5IZWFk
ZXIuUGFnZUxlbmd0aCA8IHNpemVvZigqbWFuMCkgLyA0KSB7Ci0JCXdhcm4oIkludmFsaWQgY29u
dHJvbGxlciBpbmZvIik7CisJCXdhcm54KCJJbnZhbGlkIGNvbnRyb2xsZXIgaW5mbyIpOwogCQly
ZXR1cm4gKEVJTlZBTCk7CiAJfQogCXByaW50ZigibXB0JWQgQWRhcHRlcjpcbiIsIG1wdF91bml0
KTsKQEAgLTI4Myw3ICsyODUsNyBAQAogCUNPTkZJR19QQUdFX1JBSURfVk9MXzEgKnZuYW1lczsK
IAlDT05GSUdfUEFHRV9SQUlEX1BIWVNfRElTS18wICpwaW5mbzsKIAlzdHJ1Y3QgbXB0X3N0YW5k
YWxvbmVfZGlzayAqc2Rpc2tzOwotCWludCBmZCwgaSwgaiwgbnNkaXNrczsKKwlpbnQgZXJyb3Is
IGZkLCBpLCBqLCBuc2Rpc2tzOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgY29u
ZmlnOiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTI5MiwyMCArMjk0LDIzIEBACiAKIAlmZCA9IG1w
dF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh
cm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9
CiAKIAkvKiBHZXQgdGhlIGNvbmZpZyBmcm9tIHRoZSBjb250cm9sbGVyLiAqLwogCWlvYzIgPSBt
cHRfcmVhZF9pb2NfcGFnZShmZCwgMiwgTlVMTCk7CiAJaW9jNSA9IG1wdF9yZWFkX2lvY19wYWdl
KGZkLCA1LCBOVUxMKTsKIAlpZiAoaW9jMiA9PSBOVUxMIHx8IGlvYzUgPT0gTlVMTCkgeworCQll
cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGNvbmZpZyIpOwotCQlyZXR1cm4g
KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWlmIChtcHRfZmV0Y2hfZGlza3MoZmQs
ICZuc2Rpc2tzLCAmc2Rpc2tzKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFp
bGVkIHRvIGdldCBzdGFuZGFsb25lIGRyaXZlIGxpc3QiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ
CXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIER1bXAgb3V0IHRoZSBjb25maWd1cmF0aW9uLiAq
LwpAQCAtMzgxLDcgKzM4Niw3IEBACiAJQ09ORklHX1BBR0VfSU9DXzJfUkFJRF9WT0wgKnZvbDsK
IAlDT05GSUdfUEFHRV9SQUlEX1ZPTF8wICoqdm9sdW1lczsKIAlDT05GSUdfUEFHRV9SQUlEX1ZP
TF8xICp2bmFtZXM7Ci0JaW50IGZkLCBpLCBsZW4sIHN0YXRlX2xlbjsKKwlpbnQgZXJyb3IsIGZk
LCBpLCBsZW4sIHN0YXRlX2xlbjsKIAogCWlmIChhYyAhPSAxKSB7CiAJCXdhcm54KCJzaG93IHZv
bHVtZXM6IGV4dHJhIGFyZ3VtZW50cyIpOwpAQCAtMzkwLDE1ICszOTUsMTcgQEAKIAogCWZkID0g
bXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJ
d2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwog
CX0KIAogCS8qIEdldCB0aGUgdm9sdW1lIGxpc3QgZnJvbSB0aGUgY29udHJvbGxlci4gKi8KIAlp
b2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlmIChpb2MyID09IE5VTEwp
IHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCB2b2x1bWUgbGlzdCIp
OwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyoKQEAgLTQ2
Niw3ICs0NzMsNyBAQAogewogCXN0cnVjdCBtcHRfZHJpdmVfbGlzdCAqbGlzdDsKIAlzdHJ1Y3Qg
bXB0X3N0YW5kYWxvbmVfZGlzayAqc2Rpc2tzOwotCWludCBmZCwgaSwgbGVuLCBuc2Rpc2tzLCBz
dGF0ZV9sZW47CisJaW50IGVycm9yLCBmZCwgaSwgbGVuLCBuc2Rpc2tzLCBzdGF0ZV9sZW47CiAK
IAlpZiAoYWMgIT0gMSkgewogCQl3YXJueCgic2hvdyBkcml2ZXM6IGV4dHJhIGFyZ3VtZW50cyIp
OwpAQCAtNDc1LDE1ICs0ODIsMTcgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlm
IChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0
dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIEdldCB0aGUgZHJpdmUg
bGlzdC4gKi8KIAlsaXN0ID0gbXB0X3BkX2xpc3QoZmQpOwogCWlmIChsaXN0ID09IE5VTEwpIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBkcml2ZSBsaXN0Iik7Ci0J
CXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBGZXRjaCB0aGUg
bGlzdCBvZiBzdGFuZGFsb25lIGRpc2tzIGZvciB0aGlzIGNvbnRyb2xsZXIuICovCkBAIC01Mzgs
OCArNTQ3LDkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8IDApIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7
CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIFRyeSB0byBmaW5kIGVhY2ggcG9zc2libGUg
cGh5cyBkaXNrIHBhZ2UuICovCkluZGV4OiB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jbWQuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jbWQuYwkocmV2aXNpb24gMjE0OTA3KQor
KysgdXNyLnNiaW4vbXB0dXRpbC9tcHRfY21kLmMJKHdvcmtpbmcgY29weSkKQEAgLTMxMCwxOCAr
MzEwLDE1IEBACiAJCWlkID0gc3RydG9sKGNwICsgMSwgJmNwLCAwKTsKIAkJaWYgKCpjcCA9PSAn
XDAnKSB7CiAJCQlpZiAoYnVzIDwgMCB8fCBidXMgPiAweGZmIHx8IGlkIDwgMCB8fCBpZCA+IDB4
ZmYpIHsKLQkJCQllcnJubyA9IEVJTlZBTDsKLQkJCQlyZXR1cm4gKC0xKTsKKwkJCQlyZXR1cm4g
KEVJTlZBTCk7CiAJCQl9CiAJCQkqVm9sdW1lQnVzID0gYnVzOwogCQkJKlZvbHVtZUlEID0gaWQ7
CiAJCQlyZXR1cm4gKDApOwogCQl9CiAJfSBlbHNlIGlmICgqY3AgPT0gJ1wwJykgewotCQlpZiAo
YnVzIDwgMCB8fCBidXMgPiAweGZmKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCXJldHVybiAo
LTEpOwotCQl9CisJCWlmIChidXMgPCAwIHx8IGJ1cyA+IDB4ZmYpCisJCQlyZXR1cm4gKEVJTlZB
TCk7CiAJCSpWb2x1bWVCdXMgPSAwOwogCQkqVm9sdW1lSUQgPSBidXM7CiAJCXJldHVybiAoMCk7
CkBAIC0zMjksNyArMzI2LDcgQEAKIAogCWlvYzIgPSBtcHRfcmVhZF9pb2NfcGFnZShmZCwgMiwg
TlVMTCk7CiAJaWYgKGlvYzIgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoZXJy
bm8pOwogCiAJdm9sID0gaW9jMi0+UmFpZFZvbHVtZTsKIAlmb3IgKGkgPSAwOyBpIDwgaW9jMi0+
TnVtQWN0aXZlVm9sdW1lczsgdm9sKyssIGkrKykgewpAQCAtMzQzLDggKzM0MCw3IEBACiAJCX0K
IAl9CiAJZnJlZShpb2MyKTsKLQllcnJubyA9IEVJTlZBTDsKLQlyZXR1cm4gKC0xKTsKKwlyZXR1
cm4gKEVJTlZBTCk7CiB9CiAKIGludApAQCAtMzYwLDE1ICszNTYsMTQgQEAKIAlyZXEuaGVhZGVy
LlBhZ2VOdW1iZXIgPSBQYWdlTnVtYmVyOwogCXJlcS5wYWdlX2FkZHJlc3MgPSBQYWdlQWRkcmVz
czsKIAlpZiAoaW9jdGwoZmQsIE1QVElPX1JFQURfQ0ZHX0hFQURFUiwgJnJlcSkgPCAwKQotCQly
ZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChlcnJubyk7CiAJaWYgKCFJT0NfU1RBVFVTX1NVQ0NFU1Mo
cmVxLmlvY19zdGF0dXMpKSB7CiAJCWlmIChJT0NTdGF0dXMgIT0gTlVMTCkKIAkJCSpJT0NTdGF0
dXMgPSByZXEuaW9jX3N0YXR1czsKIAkJZWxzZQogCQkJd2FybngoIlJlYWRpbmcgY29uZmlnIHBh
Z2UgaGVhZGVyIGZhaWxlZDogJXMiLAogCQkJICAgIG1wdF9pb2Nfc3RhdHVzKHJlcS5pb2Nfc3Rh
dHVzKSk7Ci0JCWVycm5vID0gRUlPOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChFSU8pOwog
CX0KIAkqaGVhZGVyID0gcmVxLmhlYWRlcjsKIAlyZXR1cm4gKDApOwpAQCAtMzgwLDcgKzM3NSw3
IEBACiB7CiAJc3RydWN0IG1wdF9jZmdfcGFnZV9yZXEgcmVxOwogCXZvaWQgKmJ1ZjsKLQlpbnQg
c2F2ZV9lcnJubzsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoSU9DU3RhdHVzICE9IE5VTEwpCiAJCSpJ
T0NTdGF0dXMgPSBNUElfSU9DU1RBVFVTX1NVQ0NFU1M7CkBAIC00MDQsOSArMzk5LDkgQEAKIAly
ZXEuYnVmID0gYnVmOwogCWJjb3B5KCZyZXEuaGVhZGVyLCBidWYsIHNpemVvZihyZXEuaGVhZGVy
KSk7CiAJaWYgKGlvY3RsKGZkLCBNUFRJT19SRUFEX0NGR19QQUdFLCAmcmVxKSA8IDApIHsKLQkJ
c2F2ZV9lcnJubyA9IGVycm5vOworCQllcnJvciA9IGVycm5vOwogCQlmcmVlKGJ1Zik7Ci0JCWVy
cm5vID0gc2F2ZV9lcnJubzsKKwkJZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKIAl9
CiAJaWYgKCFJT0NfU1RBVFVTX1NVQ0NFU1MocmVxLmlvY19zdGF0dXMpKSB7CkBAIC00MjgsNyAr
NDIzLDcgQEAKIHsKIAlzdHJ1Y3QgbXB0X2V4dF9jZmdfcGFnZV9yZXEgcmVxOwogCXZvaWQgKmJ1
ZjsKLQlpbnQgc2F2ZV9lcnJubzsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoSU9DU3RhdHVzICE9IE5V
TEwpCiAJCSpJT0NTdGF0dXMgPSBNUElfSU9DU1RBVFVTX1NVQ0NFU1M7CkBAIC00NTMsOSArNDQ4
LDkgQEAKIAlyZXEuYnVmID0gYnVmOwogCWJjb3B5KCZyZXEuaGVhZGVyLCBidWYsIHNpemVvZihy
ZXEuaGVhZGVyKSk7CiAJaWYgKGlvY3RsKGZkLCBNUFRJT19SRUFEX0VYVF9DRkdfUEFHRSwgJnJl
cSkgPCAwKSB7Ci0JCXNhdmVfZXJybm8gPSBlcnJubzsKKwkJZXJyb3IgPSBlcnJubzsKIAkJZnJl
ZShidWYpOwotCQllcnJubyA9IHNhdmVfZXJybm87CisJCWVycm5vID0gZXJyb3I7CiAJCXJldHVy
biAoTlVMTCk7CiAJfQogCWlmICghSU9DX1NUQVRVU19TVUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSkg
ewpAQCAtNDg0LDcgKzQ3OSw3IEBACiAJaGRyID0gYnVmOwogCXJlcS5sZW4gPSBoZHItPlBhZ2VM
ZW5ndGggKiA0OwogCWlmIChpb2N0bChmZCwgTVBUSU9fV1JJVEVfQ0ZHX1BBR0UsICZyZXEpIDwg
MCkKLQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoZXJybm8pOwogCWlmICghSU9DX1NUQVRVU19T
VUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSkgewogCQlpZiAoSU9DU3RhdHVzICE9IE5VTEwpIHsKIAkJ
CSpJT0NTdGF0dXMgPSByZXEuaW9jX3N0YXR1czsKQEAgLTQ5Miw4ICs0ODcsNyBAQAogCQl9CiAJ
CXdhcm54KCJXcml0aW5nIGNvbmZpZyBwYWdlIGZhaWxlZDogJXMiLAogCQkgICAgbXB0X2lvY19z
dGF0dXMocmVxLmlvY19zdGF0dXMpKTsKLQkJZXJybm8gPSBFSU87Ci0JCXJldHVybiAoLTEpOwor
CQlyZXR1cm4gKEVJTyk7CiAJfQogCXJldHVybiAoMCk7CiB9CkBAIC01MDcsMTAgKzUwMSw4IEBA
CiAKIAlpZiAoSU9DU3RhdHVzICE9IE5VTEwpCiAJCSpJT0NTdGF0dXMgPSBNUElfSU9DU1RBVFVT
X1NVQ0NFU1M7Ci0JaWYgKGRhdGFsZW4gPCAwIHx8ICh1bnNpZ25lZClkYXRhbGVuID4gc2l6ZW9m
KHJhaWRfYWN0LmFjdGlvbl9kYXRhKSkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuICgt
MSk7Ci0JfQorCWlmIChkYXRhbGVuIDwgMCB8fCAodW5zaWduZWQpZGF0YWxlbiA+IHNpemVvZihy
YWlkX2FjdC5hY3Rpb25fZGF0YSkpCisJCXJldHVybiAoRUlOVkFMKTsKIAliemVybygmcmFpZF9h
Y3QsIHNpemVvZihyYWlkX2FjdCkpOwogCXJhaWRfYWN0LmFjdGlvbiA9IEFjdGlvbjsKIAlyYWlk
X2FjdC52b2x1bWVfYnVzID0gVm9sdW1lQnVzOwpAQCAtNTI0LDcgKzUxNiw3IEBACiAJfQogCiAJ
aWYgKGlvY3RsKGZkLCBNUFRJT19SQUlEX0FDVElPTiwgJnJhaWRfYWN0KSA8IDApCi0JCXJldHVy
biAoLTEpOworCQlyZXR1cm4gKGVycm5vKTsKIAogCWlmICghSU9DX1NUQVRVU19TVUNDRVNTKHJh
aWRfYWN0LmlvY19zdGF0dXMpKSB7CiAJCWlmIChJT0NTdGF0dXMgIT0gTlVMTCkgewpAQCAtNTMz
LDggKzUyNSw3IEBACiAJCX0KIAkJd2FybngoIlJBSUQgYWN0aW9uIGZhaWxlZDogJXMiLAogCQkg
ICAgbXB0X2lvY19zdGF0dXMocmFpZF9hY3QuaW9jX3N0YXR1cykpOwotCQllcnJubyA9IEVJTzsK
LQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoRUlPKTsKIAl9CiAKIAlpZiAoQWN0aW9uU3RhdHVz
ICE9IE5VTEwpCkBAIC01NDQsOCArNTM1LDcgQEAKIAkJCXJldHVybiAoMCk7CiAJCXdhcm54KCJS
QUlEIGFjdGlvbiBmYWlsZWQ6ICVzIiwKIAkJICAgIG1wdF9yYWlkX3N0YXR1cyhyYWlkX2FjdC5h
Y3Rpb25fc3RhdHVzKSk7Ci0JCWVycm5vID0gRUlPOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJu
IChFSU8pOwogCX0KIAogCWlmIChWb2x1bWVTdGF0dXMgIT0gTlVMTCkKSW5kZXg6IHVzci5zYmlu
L21wdHV0aWwvbXB0X2NvbmZpZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21wdHV0aWwvbXB0
X2NvbmZpZy5jCShyZXZpc2lvbiAyMTQ5MDcpCisrKyB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jb25m
aWcuYwkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMTQgQEAKIAlpZiAoZXJyb3IpIHsK
IAkJZXJybm8gPSBlcnJvcjsKIAkJd2FybigiVW5hYmxlIHRvIGxvb2t1cCB2b2x1bWUgZGV2aWNl
IG5hbWUiKTsKLQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlzbnByaW50
ZihwYXRoLCBzaXplb2YocGF0aCksICIlcyVzIiwgX1BBVEhfREVWLCBxZC5kZXZuYW1lKTsKIAl2
ZmQgPSBvcGVuKHBhdGgsIE9fUkRXUik7CiAJaWYgKHZmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJu
bzsKIAkJd2FybigiVW5hYmxlIHRvIGxvY2sgdm9sdW1lICVzIiwgcWQuZGV2bmFtZSk7Ci0JCXJl
dHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJcmV0dXJuICgwKTsKIH0KQEAgLTEx
OSwxMyArMTIwLDE0IEBACiBtcHRfbG9ja19waHlzZGlzayhzdHJ1Y3QgbXB0X3N0YW5kYWxvbmVf
ZGlzayAqZGlzaykKIHsKIAljaGFyIHBhdGhbTUFYUEFUSExFTl07Ci0JaW50IGRmZDsKKwlpbnQg
ZGZkLCBlcnJvcjsKIAogCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzJXMiLCBfUEFU
SF9ERVYsIGRpc2stPmRldm5hbWUpOwogCWRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTsKIAlpZiAo
ZGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJVbmFibGUgdG8gbG9jayBkaXNr
ICVzIiwgZGlzay0+ZGV2bmFtZSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsK
IAl9CiAJcmV0dXJuICgwKTsKIH0KQEAgLTE0NCw4ICsxNDYsNyBAQAogCQlpZCA9IHN0cnRvbChj
cCArIDEsICZjcCwgMCk7CiAJCWlmICgqY3AgPT0gJ1wwJykgewogCQkJaWYgKGJ1cyA8IDAgfHwg
YnVzID4gMHhmZiB8fCBpZCA8IDAgfHwgaWQgPiAweGZmKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7
Ci0JCQkJcmV0dXJuICgtMSk7CisJCQkJcmV0dXJuIChFSU5WQUwpOwogCQkJfQogCQkJZm9yIChp
ID0gMDsgaSA8IG5kaXNrczsgaSsrKSB7CiAJCQkJaWYgKGRpc2tzW2ldLmJ1cyA9PSAoVTgpYnVz
ICYmCkBAIC0xNTQsOCArMTU1LDcgQEAKIAkJCQkJcmV0dXJuICgwKTsKIAkJCQl9CiAJCQl9Ci0J
CQllcnJubyA9IEVOT0VOVDsKLQkJCXJldHVybiAoLTEpOworCQkJcmV0dXJuIChFTk9FTlQpOwog
CQl9CiAJfQogCkBAIC0xNjYsMTIgKzE2NiwxMCBAQAogCQkJCXJldHVybiAoMCk7CiAJCQl9CiAJ
CX0KLQkJZXJybm8gPSBFTk9FTlQ7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKEVOT0VOVCk7
CiAJfQogCi0JZXJybm8gPSBFSU5WQUw7Ci0JcmV0dXJuICgtMSk7CisJcmV0dXJuIChFSU5WQUwp
OwogfQogCiAvKgpAQCAtMTgyLDE2ICsxODAsMTcgQEAKIHsKIAlDT05GSUdfUEFHRV9IRUFERVIg
aGVhZGVyOwogCUNPTkZJR19QQUdFX1JBSURfUEhZU19ESVNLXzAgKmNvbmZpZ19wYWdlOworCWlu
dCBlcnJvcjsKIAlVMzIgQWN0aW9uRGF0YTsKIAotCWlmIChtcHRfcmVhZF9jb25maWdfcGFnZV9o
ZWFkZXIoZmQsIE1QSV9DT05GSUdfUEFHRVRZUEVfUkFJRF9QSFlTRElTSywKLQkgICAgMCwgMCwg
JmhlYWRlciwgTlVMTCkgPCAwKQotCQlyZXR1cm4gKC0xKTsKKwllcnJvciA9IG1wdF9yZWFkX2Nv
bmZpZ19wYWdlX2hlYWRlcihmZCwgTVBJX0NPTkZJR19QQUdFVFlQRV9SQUlEX1BIWVNESVNLLAor
CSAgICAwLCAwLCAmaGVhZGVyLCBOVUxMKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3Ip
OwogCWlmIChoZWFkZXIuUGFnZVZlcnNpb24gPiBNUElfUkFJRFBIWVNESVNLUEFHRTBfUEFHRVZF
UlNJT04pIHsKIAkJd2FybngoIlVuc3VwcG9ydGVkIFJBSUQgcGh5c2Rpc2sgcGFnZSAwIHZlcnNp
b24gJWQiLAogCQkgICAgaGVhZGVyLlBhZ2VWZXJzaW9uKTsKLQkJZXJybm8gPSBFT1BOT1RTVVBQ
OwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChFT1BOT1RTVVBQKTsKIAl9CQkKIAljb25maWdf
cGFnZSA9IGNhbGxvYygxLCBzaXplb2YoQ09ORklHX1BBR0VfUkFJRF9QSFlTX0RJU0tfMCkpOwog
CWNvbmZpZ19wYWdlLT5IZWFkZXIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX1JBSURf
UEhZU0RJU0s7CkBAIC0yMDMsMTAgKzIwMiwxMSBAQAogCWNvbmZpZ19wYWdlLT5QaHlzRGlza0lE
ID0gZGlzay0+dGFyZ2V0OwogCiAJLyogWFhYOiBFbmNsb3N1cmUgaW5mbyBmb3IgUGh5c0Rpc2tT
ZXR0aW5ncz8gKi8KLQlpZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ1JF
QVRFX1BIWVNESVNLLCAwLCAwLCAwLCAwLAorCWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBN
UElfUkFJRF9BQ1RJT05fQ1JFQVRFX1BIWVNESVNLLCAwLCAwLCAwLCAwLAogCSAgICBjb25maWdf
cGFnZSwgc2l6ZW9mKENPTkZJR19QQUdFX1JBSURfUEhZU19ESVNLXzApLCBOVUxMLAotCSAgICAm
QWN0aW9uRGF0YSwgc2l6ZW9mKEFjdGlvbkRhdGEpLCBOVUxMLCBOVUxMLCAxKSA8IDApCi0JCXJl
dHVybiAoLTEpOworCSAgICAmQWN0aW9uRGF0YSwgc2l6ZW9mKEFjdGlvbkRhdGEpLCBOVUxMLCBO
VUxMLCAxKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOwogCSpQaHlzRGlza051bSA9
IEFjdGlvbkRhdGEgJiAweGZmOwogCXJldHVybiAoMCk7CiB9CkBAIC0yMzIsMTggKzIzMiwyMCBA
QAogCUlPQ18zX1BIWVNfRElTSyAqZGlzazsKIAlDT05GSUdfUEFHRV9JT0NfNSAqaW9jNTsKIAlJ
T0NfNV9IT1RfU1BBUkUgKnNwYXJlOwotCWludCBjaCwgZmQsIGk7CisJaW50IGNoLCBlcnJvciwg
ZmQsIGk7CiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVy
cm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQly
ZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpb2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5V
TEwpOwogCWlmIChpb2MyID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFp
bGVkIHRvIGZldGNoIHZvbHVtZSBsaXN0Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g
KGVycm9yKTsKIAl9CiAKIAkvKiBMb2NrIGFsbCB0aGUgdm9sdW1lcyBmaXJzdC4gKi8KQEAgLTI2
OCwxMyArMjcwLDE2IEBACiAJLyogRGVsZXRlIGFsbCB0aGUgdm9sdW1lcy4gKi8KIAl2b2wgPSBp
b2MyLT5SYWlkVm9sdW1lOwogCWZvciAoaSA9IDA7IGkgPCBpb2MyLT5OdW1BY3RpdmVWb2x1bWVz
OyB2b2wrKywgaSsrKQotCQlpZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05f
REVMRVRFX1ZPTFVNRSwKKwkJZXJyb3IgPSBtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FD
VElPTl9ERUxFVEVfVk9MVU1FLAogCQkgICAgdm9sLT5Wb2x1bWVCdXMsIHZvbC0+Vm9sdW1lSUQs
IDAsCiAJCSAgICBNUElfUkFJRF9BQ1RJT05fQURBVEFfREVMX1BIWVNfRElTS1MgfAogCQkgICAg
TVBJX1JBSURfQUNUSU9OX0FEQVRBX1pFUk9fTEJBMCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCwK
LQkJICAgIE5VTEwsIE5VTEwsIDApIDwgMCkKKwkJICAgIE5VTEwsIE5VTEwsIDApOworCQlpZiAo
ZXJyb3IpIHsKKwkJCWVycm5vID0gZXJyb3I7CiAJCQl3YXJuKCJGYWlsZWQgdG8gZGVsZXRlIHZv
bHVtZSAlcyIsCiAJCQkgICAgbXB0X3ZvbHVtZV9uYW1lKHZvbC0+Vm9sdW1lQnVzLCB2b2wtPlZv
bHVtZUlEKSk7CisJCX0KIAlmcmVlKGlvYzIpOwogCiAJLyogRGVsZXRlIGFsbCB0aGUgc3BhcmVz
LiAqLwpAQCAtNDExLDggKzQxNiw5IEBACiAJCS8qIFNlZSBpZiBpdCBpcyBhIHN0YW5kYWxvbmUg
ZGlzay4gKi8KIAkJaWYgKG1wdF9sb29rdXBfc3RhbmRhbG9uZV9kaXNrKGNwLCBzdGF0ZS0+c2Rp
c2tzLAogCQkgICAgc3RhdGUtPm5zZGlza3MsICZpKSA8IDApIHsKKwkJCWVycm9yID0gZXJybm87
CiAJCQl3YXJuKCJVbmFibGUgdG8gbG9va3VwIGRyaXZlICVzIiwgY3ApOwotCQkJcmV0dXJuIChl
cnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCQlkaW5mby0+c2Rpc2sgPSAmc3RhdGUt
PnNkaXNrc1tpXTsKIApAQCAtNDMzLDE3ICs0MzksMTggQEAKIHsKIAlzdHJ1Y3QgZHJpdmVfaW5m
byAqZGluZm87CiAJVTggUGh5c0Rpc2tOdW07Ci0JaW50IGk7CisJaW50IGVycm9yLCBpOwogCiAJ
Zm9yIChpID0gMCwgZGluZm8gPSBpbmZvLT5kcml2ZXM7IGkgPCBpbmZvLT5kcml2ZV9jb3VudDsK
IAkgICAgIGkrKywgZGluZm8rKykgewogCQlpZiAoZGluZm8tPmluZm8gPT0gTlVMTCkgewogCQkJ
aWYgKG1wdF9jcmVhdGVfcGh5c2Rpc2soZmQsIGRpbmZvLT5zZGlzaywKIAkJCSAgICAmUGh5c0Rp
c2tOdW0pIDwgMCkgeworCQkJCWVycm9yID0gZXJybm87CiAJCQkJd2FybigKIAkJCSAgICAiRmFp
bGVkIHRvIGNyZWF0ZSBwaHlzaWNhbCBkaXNrIHBhZ2UgZm9yICVzIiwKIAkJCQkgICAgZGluZm8t
PnNkaXNrLT5kZXZuYW1lKTsKLQkJCQlyZXR1cm4gKGVycm5vKTsKKwkJCQlyZXR1cm4gKGVycm9y
KTsKIAkJCX0KIAkJCWlmICh2ZXJib3NlKQogCQkJCXByaW50ZigiQWRkZWQgZHJpdmUgJXMgd2l0
aCBQaHlzRGlza051bSAldVxuIiwKQEAgLTUwMCwxMSArNTA3LDE0IEBACiAgICAgICAgIFUzMiBN
aW5MQkE7CiAJdWludDY0X3QgTWF4TEJBOwogCXNpemVfdCBwYWdlX3NpemU7Ci0JaW50IGk7CisJ
aW50IGVycm9yLCBpOwogCi0JaWYgKG1wdF9yZWFkX2NvbmZpZ19wYWdlX2hlYWRlcihmZCwgTVBJ
X0NPTkZJR19QQUdFVFlQRV9SQUlEX1ZPTFVNRSwKLQkgICAgMCwgMCwgJmhlYWRlciwgTlVMTCkg
PCAwKQorCWVycm9yID0gbXB0X3JlYWRfY29uZmlnX3BhZ2VfaGVhZGVyKGZkLCBNUElfQ09ORklH
X1BBR0VUWVBFX1JBSURfVk9MVU1FLAorCSAgICAwLCAwLCAmaGVhZGVyLCBOVUxMKTsKKwlpZiAo
ZXJyb3IpIHsKKwkJZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKKwl9CiAJaWYgKGhl
YWRlci5QYWdlVmVyc2lvbiA+IE1QSV9SQUlEVk9MUEFHRTBfUEFHRVZFUlNJT04pIHsKIAkJd2Fy
bngoIlVuc3VwcG9ydGVkIFJBSUQgdm9sdW1lIHBhZ2UgMCB2ZXJzaW9uICVkIiwKIAkJICAgIGhl
YWRlci5QYWdlVmVyc2lvbik7CkBAIC01MTQsNiArNTI0LDggQEAKIAlwYWdlX3NpemUgPSBzaXpl
b2YoQ09ORklHX1BBR0VfUkFJRF9WT0xfMCkgKwogCSAgICBzaXplb2YoUkFJRF9WT0wwX1BIWVNf
RElTSykgKiAoaW5mby0+ZHJpdmVfY291bnQgLSAxKTsKIAl2b2wgPSBjYWxsb2MoMSwgcGFnZV9z
aXplKTsKKwlpZiAodm9sID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CiAKIAkvKiBIZWFkZXIg
Ki8KIAl2b2wtPkhlYWRlci5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfUkFJRF9WT0xV
TUU7CkBAIC02MDcsOCArNjE5LDggQEAKIAlDT05GSUdfUEFHRV9SQUlEX1ZPTF8wICp2b2w7CiAJ
c3RydWN0IGNvbmZpZ19pZF9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3Qgdm9sdW1lX2luZm8gKmluZm87
Ci0JaW50IGNoLCBlcnJvciwgZmQsIGksIHJhaWRfdHlwZSwgdmVyYm9zZSwgcXVpY2s7CiAJbG9u
ZyBzdHJpcGVfc2l6ZTsKKwlpbnQgY2gsIGVycm9yLCBmZCwgaSwgcXVpY2ssIHJhaWRfdHlwZSwg
dmVyYm9zZTsKICNpZmRlZiBERUJVRwogCWludCBkdW1wOwogI2VuZGlmCkBAIC02MjAsOCArNjMy
LDkgQEAKIAkKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVy
cm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQly
ZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBMb29rdXAgdGhlIFJBSUQgdHlwZSBmaXJzdC4gKi8K
QEAgLTY3Nyw4ICs2OTAsOSBAQAogCS8qIEZldGNoIGV4aXN0aW5nIGNvbmZpZyBkYXRhLiAqLwog
CXN0YXRlLmlvYzIgPSBtcHRfcmVhZF9pb2NfcGFnZShmZCwgMiwgTlVMTCk7CiAJaWYgKHN0YXRl
LmlvYzIgPT0gTlVMTCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gcmVh
ZCB2b2x1bWUgbGlzdCIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ
fQogCXN0YXRlLmxpc3QgPSBtcHRfcGRfbGlzdChmZCk7CiAJaWYgKHN0YXRlLmxpc3QgPT0gTlVM
TCkKQEAgLTY5Niw2ICs3MTAsOCBAQAogCQlyZXR1cm4gKEVJTlZBTCk7CiAJfQogCWluZm8gPSBj
YWxsb2MoMSwgc2l6ZW9mKCppbmZvKSk7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIChF
Tk9NRU0pOwogCWVycm9yID0gcGFyc2Vfdm9sdW1lKGZkLCByYWlkX3R5cGUsICZzdGF0ZSwgYXZb
MF0sIGluZm8pOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIChlcnJvcik7CkBAIC03MDcsNiArNzIz
LDggQEAKIAogCS8qIEJ1aWxkIHRoZSB2b2x1bWUuICovCiAJdm9sID0gYnVpbGRfdm9sdW1lKGZk
LCBpbmZvLCByYWlkX3R5cGUsIHN0cmlwZV9zaXplLCAmc3RhdGUsIHZlcmJvc2UpOworCWlmICh2
b2wgPT0gTlVMTCkKKwkJcmV0dXJuIChlcnJubyk7CiAKICNpZmRlZiBERUJVRwogCWlmIChkdW1w
KSB7CkBAIC03MTYsMTIgKzczNCwxMyBAQAogI2VuZGlmCiAKIAkvKiBTZW5kIHRoZSBuZXcgdm9s
dW1lIHRvIHRoZSBjb250cm9sbGVyLiAqLwotCWlmIChtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9S
QUlEX0FDVElPTl9DUkVBVEVfVk9MVU1FLCB2b2wtPlZvbHVtZUJ1cywKKwllcnJvciA9IG1wdF9y
YWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9OX0NSRUFURV9WT0xVTUUsIHZvbC0+Vm9sdW1l
QnVzLAogCSAgICB2b2wtPlZvbHVtZUlELCAwLCBxdWljayA/IE1QSV9SQUlEX0FDVElPTl9BREFU
QV9ET19OT1RfU1lOQyA6IDAsCi0JICAgIHZvbCwgdm9sLT5IZWFkZXIuUGFnZUxlbmd0aCAqIDQs
IE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDEpIDwKLQkgICAgMCkgeworCSAgICB2b2wsIHZv
bC0+SGVhZGVyLlBhZ2VMZW5ndGggKiA0LCBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAxKTsK
KwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBlcnJvcjsKIAkJd2FybigiRmFpbGVkIHRvIGFkZCB2
b2x1bWUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogI2lm
ZGVmIERFQlVHCkBAIC03NDUsNyArNzY0LDcgQEAKIGRlbGV0ZV92b2x1bWUoaW50IGFjLCBjaGFy
ICoqYXYpCiB7CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKLQlpbnQgZmQ7CisJaW50IGVycm9y
LCBmZDsKIAogCWlmIChhYyAhPSAyKSB7CiAJCXdhcm54KCJkZWxldGU6IHZvbHVtZSByZXF1aXJl
ZCIpOwpAQCAtNzU0LDI0ICs3NzMsMjkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwog
CWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJ
cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAotCWlmIChtcHRfbG9va3Vw
X3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCkgPCAwKSB7CisJZXJyb3Ig
PSBtcHRfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCk7CisJ
aWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdhcm4oIkludmFsaWQgdm9sdW1lICVz
IiwgYXZbMV0pOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ
aWYgKG1wdF9sb2NrX3ZvbHVtZShWb2x1bWVCdXMsIFZvbHVtZUlEKSA8IDApCiAJCXJldHVybiAo
ZXJybm8pOwogCi0JaWYgKG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9OX0RFTEVU
RV9WT0xVTUUsIFZvbHVtZUJ1cywKKwllcnJvciA9IG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JB
SURfQUNUSU9OX0RFTEVURV9WT0xVTUUsIFZvbHVtZUJ1cywKIAkgICAgVm9sdW1lSUQsIDAsIE1Q
SV9SQUlEX0FDVElPTl9BREFUQV9ERUxfUEhZU19ESVNLUyB8CiAJICAgIE1QSV9SQUlEX0FDVElP
Tl9BREFUQV9aRVJPX0xCQTAsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDAsIE5VTEwsCi0JICAgIE5V
TEwsIDApIDwgMCkgeworCSAgICBOVUxMLCAwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBl
cnJvcjsKIAkJd2FybigiRmFpbGVkIHRvIGRlbGV0ZSB2b2x1bWUiKTsKLQkJcmV0dXJuIChlcnJu
byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCW1wdF9yZXNjYW5fYnVzKC0xLCAtMSk7CkBA
IC03ODgsMTYgKzgxMiwxOCBAQAogCUNPTkZJR19QQUdFX0lPQ18yICppb2MyOwogCUNPTkZJR19Q
QUdFX0lPQ18yX1JBSURfVk9MICp2b2w7CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKLQlpbnQg
aSwgaiwgbmV3X3Bvb2wsIHBvb2xfY291bnRbN107CisJaW50IGVycm9yLCBpLCBqLCBuZXdfcG9v
bCwgcG9vbF9jb3VudFs3XTsKIAotCWlmIChtcHRfbG9va3VwX3ZvbHVtZShmZCwgbmFtZSwgJlZv
bHVtZUJ1cywgJlZvbHVtZUlEKSA8IDApIHsKKwllcnJvciA9IG1wdF9sb29rdXBfdm9sdW1lKGZk
LCBuYW1lLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpOworCWlmIChlcnJvcikgeworCQllcnJubyA9
IGVycm9yOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZSAlcyIsIG5hbWUpOwotCQlyZXR1cm4gKC0x
KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaW5mbyA9IG1wdF92b2xfaW5mbyhmZCwgVm9s
dW1lQnVzLCBWb2x1bWVJRCwgTlVMTCk7CiAJaWYgKGluZm8gPT0gTlVMTCkKLQkJcmV0dXJuICgt
MSk7CisJCXJldHVybiAoZXJybm8pOwogCiAJLyoKIAkgKiBDaGVjayBmb3IgYW4gZXhpc3Rpbmcg
cG9vbCBvdGhlciB0aGFuIHBvb2wgMCAodXNlZCBmb3IKQEAgLTgxNywxNSArODQzLDE2IEBACiAJ
ICovCiAJaW9jMiA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKIAlpZiAoaW9jMiA9
PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCB2b2x1
bWUgbGlzdCIpOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWJ6ZXJv
KHBvb2xfY291bnQsIHNpemVvZihwb29sX2NvdW50KSk7CQogCXZvbCA9IGlvYzItPlJhaWRWb2x1
bWU7CiAJZm9yIChpID0gMDsgaSA8IGlvYzItPk51bUFjdGl2ZVZvbHVtZXM7IHZvbCsrLCBpKysp
IHsKIAkJaW5mbyA9IG1wdF92b2xfaW5mbyhmZCwgdm9sLT5Wb2x1bWVCdXMsIHZvbC0+Vm9sdW1l
SUQsIE5VTEwpOwogCQlpZiAoaW5mbyA9PSBOVUxMKQotCQkJcmV0dXJuICgtMSk7CisJCQlyZXR1
cm4gKGVycm5vKTsKIAkJZm9yIChqID0gMDsgaiA8IDc7IGorKykKIAkJCWlmIChpbmZvLT5Wb2x1
bWVTZXR0aW5ncy5Ib3RTcGFyZVBvb2wgJiAoMSA8PCAoaiArIDEpKSkKIAkJCQlwb29sX2NvdW50
W2pdKys7CkBAIC04NDMsMTQgKzg3MCwxNSBAQAogCS8qIEFkZCB0aGlzIHBvb2wgdG8gdGhlIHZv
bHVtZS4gKi8KIAlpbmZvID0gbXB0X3ZvbF9pbmZvKGZkLCBWb2x1bWVCdXMsIFZvbHVtZUlELCBO
VUxMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChlcnJv
cik7CiAJaW5mby0+Vm9sdW1lU2V0dGluZ3MuSG90U3BhcmVQb29sIHw9ICgxIDw8IG5ld19wb29s
KTsKLQlpZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ0hBTkdFX1ZPTFVN
RV9TRVRUSU5HUywKKwllcnJvciA9IG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9O
X0NIQU5HRV9WT0xVTUVfU0VUVElOR1MsCiAJICAgIFZvbHVtZUJ1cywgVm9sdW1lSUQsIDAsICoo
VTMyICopJmluZm8tPlZvbHVtZVNldHRpbmdzLCBOVUxMLCAwLAotCSAgICBOVUxMLCBOVUxMLCAw
LCBOVUxMLCBOVUxMLCAwKSA8IDApIHsKKwkgICAgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwg
MCk7CisJaWYgKGVycm9yKSB7CiAJCXdhcm54KCJGYWlsZWQgdG8gYWRkIHNwYXJlIHBvb2wgJWQg
dG8gJXMiLCBuZXdfcG9vbCwKIAkJICAgIG1wdF92b2x1bWVfbmFtZShWb2x1bWVCdXMsIFZvbHVt
ZUlEKSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJZnJlZShpbmZv
KTsKIApAQCAtODc4LDEzICs5MDYsMTUgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwog
CWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJ
cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChhYyA9PSAzKSB7
Ci0JCWlmIChmaW5kX3ZvbHVtZV9zcGFyZV9wb29sKGZkLCBhdlsyXSwgJnBvb2wpIDwgMCkKLQkJ
CXJldHVybiAoZXJybm8pOworCQllcnJvciA9IGZpbmRfdm9sdW1lX3NwYXJlX3Bvb2woZmQsIGF2
WzJdLCAmcG9vbCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiAoZXJyb3IpOwogCX0gZWxzZQog
CQlwb29sID0gTVBJX1JBSURfSE9UX1NQQVJFX1BPT0xfMDsKIApAQCAtOTAyLDE2ICs5MzIsMTgg
QEAKIAogCQlpZiAobXB0X2xvb2t1cF9zdGFuZGFsb25lX2Rpc2soYXZbMV0sIHNkaXNrcywgbnNk
aXNrcywgJmkpIDwKIAkJICAgIDApIHsKKwkJCWVycm9yID0gZXJybm87CiAJCQl3YXJuKCJVbmFi
bGUgdG8gbG9va3VwIGRyaXZlICVzIiwgYXZbMV0pOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQly
ZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJCWlmIChtcHRfbG9ja19waHlzZGlzaygmc2Rpc2tzW2ld
KSA8IDApCiAJCQlyZXR1cm4gKGVycm5vKTsKIAogCQlpZiAobXB0X2NyZWF0ZV9waHlzZGlzayhm
ZCwgJnNkaXNrc1tpXSwgJlBoeXNEaXNrTnVtKSA8IDApIHsKKwkJCWVycm9yID0gZXJybm87CiAJ
CQl3YXJuKCJGYWlsZWQgdG8gY3JlYXRlIHBoeXNpY2FsIGRpc2sgcGFnZSIpOwotCQkJcmV0dXJu
IChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCQlmcmVlKHNkaXNrcyk7CiAJfQpA
QCAtOTE5LDggKzk1MSw5IEBACiAKIAlpbmZvID0gbXB0X3BkX2luZm8oZmQsIFBoeXNEaXNrTnVt
LCBOVUxMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4o
IkZhaWxlZCB0byBmZXRjaCBkcml2ZSBpbmZvIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1
cm4gKGVycm9yKTsKIAl9CiAKIAlpbmZvLT5QaHlzRGlza1NldHRpbmdzLkhvdFNwYXJlUG9vbCA9
IHBvb2w7CkBAIC05MjgsOCArOTYxLDkgQEAKIAkgICAgMCwgUGh5c0Rpc2tOdW0sICooVTMyICop
JmluZm8tPlBoeXNEaXNrU2V0dGluZ3MsIE5VTEwsIDAsIE5VTEwsCiAJICAgIE5VTEwsIDAsIE5V
TEwsIE5VTEwsIDApOwogCWlmIChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJG
YWlsZWQgdG8gYXNzaWduIHNwYXJlIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVy
cm9yKTsKIAl9CiAKIAlmcmVlKGluZm8pOwpAQCAtOTU0LDggKzk4OCw5IEBACiAKIAlmZCA9IG1w
dF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh
cm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9
CiAKIAlsaXN0ID0gbXB0X3BkX2xpc3QoZmQpOwpAQCAtOTcyLDggKzEwMDcsOSBAQAogCQogCWlu
Zm8gPSBtcHRfcGRfaW5mbyhmZCwgUGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlmIChpbmZvID09IE5V
TEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGlu
Zm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChp
bmZvLT5QaHlzRGlza1NldHRpbmdzLkhvdFNwYXJlUG9vbCA9PSAwKSB7CkBAIC05ODIsMTEgKzEw
MTgsMTQgQEAKIAl9CiAKIAlpZiAobXB0X2RlbGV0ZV9waHlzZGlzayhmZCwgUGh5c0Rpc2tOdW0p
IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZGVsZXRlIHBoeXNp
Y2FsIGRpc2sgcGFnZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ
fQogCi0JbXB0X3Jlc2Nhbl9idXMoaW5mby0+UGh5c0Rpc2tCdXMsIGluZm8tPlBoeXNEaXNrSUQp
OworCWVycm9yID0gbXB0X3Jlc2Nhbl9idXMoaW5mby0+UGh5c0Rpc2tCdXMsIGluZm8tPlBoeXNE
aXNrSUQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CiAJZnJlZShpbmZvKTsKIAlj
bG9zZShmZCk7CiAKQEAgLTEwMTEsOCArMTA1MCw5IEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91
bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVu
Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAllcnJvciA9
IG1wdF9mZXRjaF9kaXNrcyhmZCwgJm5kaXNrcywgJmRpc2tzKTsKQEAgLTEwMjIsMTYgKzEwNjIs
MTggQEAKIAl9CiAKIAlpZiAobXB0X2xvb2t1cF9zdGFuZGFsb25lX2Rpc2soYXZbMV0sIGRpc2tz
LCBuZGlza3MsICZpKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiVW5hYmxlIHRv
IGxvb2t1cCBkcml2ZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ
fQogCiAJaWYgKG1wdF9sb2NrX3BoeXNkaXNrKCZkaXNrc1tpXSkgPCAwKQogCQlyZXR1cm4gKGVy
cm5vKTsKIAogCWlmIChtcHRfY3JlYXRlX3BoeXNkaXNrKGZkLCAmZGlza3NbaV0sICZQaHlzRGlz
a051bSkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBjcmVhdGUg
cGh5c2ljYWwgZGlzayBwYWdlIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9y
KTsKIAl9CiAJZnJlZShkaXNrcyk7CiAKQEAgLTEwNDgsNyArMTA5MCw3IEBACiB7CiAJQ09ORklH
X1BBR0VfUkFJRF9QSFlTX0RJU0tfMCAqaW5mbzsKIAlzdHJ1Y3QgbXB0X2RyaXZlX2xpc3QgKmxp
c3Q7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJVTggUGh5c0Rpc2tOdW07CiAKIAlpZiAo
YWMgIT0gMikgewpAQCAtMTA1OCw4ICsxMTAwLDkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3Vu
aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4i
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWxpc3QgPSBt
cHRfcGRfbGlzdChmZCk7CkBAIC0xMDY3LDIzICsxMTEwLDI4IEBACiAJCXJldHVybiAoZXJybm8p
OwogCiAJaWYgKG1wdF9sb29rdXBfZHJpdmUobGlzdCwgYXZbMV0sICZQaHlzRGlza051bSkgPCAw
KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmaW5kIGRyaXZlICVzIiwg
YXZbMV0pOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCW1wdF9m
cmVlX3BkX2xpc3QobGlzdCk7CiAKIAlpbmZvID0gbXB0X3BkX2luZm8oZmQsIFBoeXNEaXNrTnVt
LCBOVUxMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4o
IkZhaWxlZCB0byBmZXRjaCBkcml2ZSBpbmZvIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1
cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobXB0X2RlbGV0ZV9waHlzZGlzayhmZCwgUGh5c0Rpc2tO
dW0pIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZGVsZXRlIHBo
eXNpY2FsIGRpc2sgcGFnZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7
CiAJfQogCi0JbXB0X3Jlc2Nhbl9idXMoaW5mby0+UGh5c0Rpc2tCdXMsIGluZm8tPlBoeXNEaXNr
SUQpOworCWVycm9yID0gbXB0X3Jlc2Nhbl9idXMoaW5mby0+UGh5c0Rpc2tCdXMsIGluZm8tPlBo
eXNEaXNrSUQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CiAJZnJlZShpbmZvKTsK
IAljbG9zZShmZCk7CiAKQEAgLTExMjYsNyArMTE3NCw3IEBACiB7CiAJQ09ORklHX1BBR0VfUkFJ
RF9WT0xfMCAqdm9sOwogCVU4IFZvbHVtZUJ1cywgVm9sdW1lSUQ7Ci0JaW50IGZkOworCWludCBl
cnJvciwgZmQ7CiAKIAlpZiAoYWMgIT0gMikgewogCQl3YXJueCgiZGVidWc6IHZvbHVtZSByZXF1
aXJlZCIpOwpAQCAtMTEzNSwxOSArMTE4MywyMyBAQAogCiAJZmQgPSBtcHRfb3BlbihtcHRfdW5p
dCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtcHRfb3BlbiIp
OwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCi0JaWYgKG1wdF9s
b29rdXBfdm9sdW1lKGZkLCBhdlsxXSwgJlZvbHVtZUJ1cywgJlZvbHVtZUlEKSA8IDApIHsKKwll
cnJvciA9IG1wdF9sb29rdXBfdm9sdW1lKGZkLCBhdlsxXSwgJlZvbHVtZUJ1cywgJlZvbHVtZUlE
KTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBlcnJvcjsKIAkJd2FybigiSW52YWxpZCB2b2x1
bWU6ICVzIiwgYXZbMV0pOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ
fQogCiAJdm9sID0gbXB0X3ZvbF9pbmZvKGZkLCBWb2x1bWVCdXMsIFZvbHVtZUlELCBOVUxMKTsK
IAlpZiAodm9sID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRv
IGdldCB2b2x1bWUgaW5mbyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7
CiAJfQogCiAJZHVtcF9jb25maWcodm9sKTsKSW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X3Zv
bHVtZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21wdHV0aWwvbXB0X3ZvbHVtZS5jCShyZXZp
c2lvbiAyMTQ5MDcpCisrKyB1c3Iuc2Jpbi9tcHR1dGlsL21wdF92b2x1bWUuYwkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQAogewogCUNPTkZJR19QQUdFX1JBSURfVk9MXzEgKnZuYW1l
czsKIAlVOCBWb2x1bWVCdXMsIFZvbHVtZUlEOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwog
CiAJaWYgKGFjICE9IDMpIHsKIAkJd2FybngoIm5hbWU6IHZvbHVtZSBhbmQgbmFtZSByZXF1aXJl
ZCIpOwpAQCAtODMsMTkgKzgzLDIzIEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlp
ZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJl
dHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQlpZiAobXB0X2xvb2t1cF92
b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpIDwgMCkgeworCWVycm9yID0g
bXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpOworCWlm
IChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMi
LCBhdlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAl2
bmFtZXMgPSBtcHRfdm9sX25hbWVzKGZkLCBWb2x1bWVCdXMsIFZvbHVtZUlELCBOVUxMKTsKIAlp
ZiAodm5hbWVzID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRv
IGZldGNoIHZvbHVtZSBuYW1lcyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJv
cik7CiAJfQogCiAJaWYgKHZuYW1lcy0+SGVhZGVyLlBhZ2VUeXBlICE9IE1QSV9DT05GSUdfUEFH
RUFUVFJfQ0hBTkdFQUJMRSkgewpAQCAtMTA5LDggKzExMyw5IEBACiAJc3RyY3B5KHZuYW1lcy0+
TmFtZSwgYXZbMl0pOwogCiAJaWYgKG1wdF93cml0ZV9jb25maWdfcGFnZShmZCwgdm5hbWVzLCBO
VUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIHNldCB2b2x1
bWUgbmFtZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ
ZnJlZSh2bmFtZXMpOwpAQCAtMTI4LDcgKzEzMyw3IEBACiAJdWludDY0X3QgdG90YWwsIHJlbWFp
bmluZzsKIAlmbG9hdCBwY3Q7CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKLQlpbnQgZmQ7CisJ
aW50IGVycm9yLCBmZDsKIAogCWlmIChhYyAhPSAyKSB7CiAJCXdhcm54KCJ2b2x1bWUgc3RhdHVz
OiAlcyIsIGFjID4gMiA/ICJleHRyYSBhcmd1bWVudHMiIDoKQEAgLTEzOCwyMCArMTQzLDI1IEBA
CiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0g
ZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g
KGVycm9yKTsKIAl9CiAKLQlpZiAobXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1l
QnVzLCAmVm9sdW1lSUQpIDwgMCkgeworCWVycm9yID0gbXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2
WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpOworCWlmIChlcnJvcikgeworCQllcnJubyA9IGVy
cm9yOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJldHVybiAoZXJy
bm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQlpZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBN
UElfUkFJRF9BQ1RJT05fSU5ESUNBVE9SX1NUUlVDVCwgVm9sdW1lQnVzLAorCWVycm9yID0gbXB0
X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fSU5ESUNBVE9SX1NUUlVDVCwgVm9sdW1l
QnVzLAogCSAgICBWb2x1bWVJRCwgMCwgMCwgTlVMTCwgMCwgJlZvbHVtZVN0YXR1cywgKFUzMiAq
KSZwcm9nLCBzaXplb2YocHJvZyksCi0JICAgIE5VTEwsIE5VTEwsIDApIDwgMCkgeworCSAgICBO
VUxMLCBOVUxMLCAwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBlcnJvcjsKIAkJd2Fybigi
RmV0Y2hpbmcgdm9sdW1lIHN0YXR1cyBmYWlsZWQiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJl
dHVybiAoZXJyb3IpOwogCX0KIAogCXByaW50ZigiVm9sdW1lICVzIHN0YXR1czpcbiIsIG1wdF92
b2x1bWVfbmFtZShWb2x1bWVCdXMsIFZvbHVtZUlEKSk7CkBAIC0xOTEsMTEgKzIwMSwxMSBAQAog
CVUzMiBTZXR0aW5ncywgTmV3U2V0dGluZ3M7CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKIAlj
aGFyICpzMTsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBmZDsKIAogCWlmIChhYyAhPSAzKSB7CiAJ
CXdhcm54KCJ2b2x1bWUgY2FjaGU6ICVzIiwgYWMgPiAzID8gImV4dHJhIGFyZ3VtZW50cyIgOgot
CQkgICAgInZvbHVtZSByZXF1aXJlZCIpOworCQkgICAgIm1pc3NpbmcgYXJndW1lbnRzIik7CiAJ
CXJldHVybiAoRUlOVkFMKTsKIAl9CiAKQEAgLTIwOSwxOCArMjE5LDIxIEBACiAKIAlmZCA9IG1w
dF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh
cm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9
CiAKLQlpZiAobXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1l
SUQpIDwgMCkgeworCWVycm9yID0gbXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1l
QnVzLCAmVm9sdW1lSUQpOworCWlmIChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJu
KCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1
cm4gKGVycm9yKTsKIAl9CiAKIAl2b2x1bWUgPSBtcHRfdm9sX2luZm8oZmQsIFZvbHVtZUJ1cywg
Vm9sdW1lSUQsIE5VTEwpOwogCWlmICh2b2x1bWUgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7CisJ
CXJldHVybiAoZXJybm8pOwogCiAJU2V0dGluZ3MgPSB2b2x1bWUtPlZvbHVtZVNldHRpbmdzLlNl
dHRpbmdzOwogCkBAIC0yMzEsMTggKzI0NCwxOSBAQAogCQlOZXdTZXR0aW5ncyAmPSB+MHgwMTsK
IAogCWlmIChOZXdTZXR0aW5ncyA9PSBTZXR0aW5ncykgewotCQl3YXJueCgidm9sdW1lIGNhY2hl
IHVuY2hhbmdlZFxuIik7CisJCXdhcm54KCJ2b2x1bWUgY2FjaGUgdW5jaGFuZ2VkIik7CiAJCWNs
b3NlKGZkKTsKIAkJcmV0dXJuICgwKTsKIAl9CiAKIAl2b2x1bWUtPlZvbHVtZVNldHRpbmdzLlNl
dHRpbmdzID0gTmV3U2V0dGluZ3M7Ci0JaWYgKG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURf
QUNUSU9OX0NIQU5HRV9WT0xVTUVfU0VUVElOR1MsCisJZXJyb3IgPSBtcHRfcmFpZF9hY3Rpb24o
ZmQsIE1QSV9SQUlEX0FDVElPTl9DSEFOR0VfVk9MVU1FX1NFVFRJTkdTLAogCSAgICBWb2x1bWVC
dXMsIFZvbHVtZUlELCAwLCAqKFUzMiAqKSZ2b2x1bWUtPlZvbHVtZVNldHRpbmdzLCBOVUxMLCAw
LAotCSAgICBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKSA8IDApCi0JCXdhcm54KCJ2b2x1
bWUgY2FjaGUgY2hhbmdlIGZhaWxlZCwgZXJybm89ICVkXG4iLCBlcnJubyk7CisJICAgIE5VTEws
IE5VTEwsIDAsIE5VTEwsIE5VTEwsIDApOworCWlmIChlcnJvcikKKwkJd2Fybigidm9sdW1lIGNh
Y2hlIGNoYW5nZSBmYWlsZWQiKTsKIAogCWNsb3NlKGZkKTsKLQlyZXR1cm4gKDApOworCXJldHVy
biAoZXJyb3IpOwogfQogTVBUX0NPTU1BTkQodm9sdW1lLCBjYWNoZSwgdm9sdW1lX2NhY2hlKTsK
SW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2RyaXZlLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNi
aW4vbXB0dXRpbC9tcHRfZHJpdmUuYwkocmV2aXNpb24gMjE0OTA3KQorKysgdXNyLnNiaW4vbXB0
dXRpbC9tcHRfZHJpdmUuYwkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBACiAJCWxp
c3QtPmRyaXZlc1tqICsgMV0gPSBsaXN0LT5kcml2ZXNbal07CiAJbGlzdC0+ZHJpdmVzW2ldID0g
bXB0X3BkX2luZm8oZmQsIFBoeXNEaXNrTnVtLCBOVUxMKTsKIAlpZiAobGlzdC0+ZHJpdmVzW2ld
ID09IE5VTEwpCi0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm5vKTsKIAlsaXN0LT5uZHJp
dmVzKys7CiAJcmV0dXJuICgwKTsKIH0KQEAgLTE0NiwyNiArMTQ2LDMyIEBACiAJQ09ORklHX1BB
R0VfSU9DXzUgKmlvYzU7CiAJSU9DXzVfSE9UX1NQQVJFICpzcGFyZTsKIAlzdHJ1Y3QgbXB0X2Ry
aXZlX2xpc3QgKmxpc3Q7Ci0JaW50IGNvdW50LCBpLCBqOworCWludCBjb3VudCwgZXJyb3IsIGks
IGo7CiAKIAlpb2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlmIChpb2My
ID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIHZv
bHVtZSBsaXN0Iik7CisJCWVycm5vID0gZXJyb3I7CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCiAJ
aW9jMyA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAzLCBOVUxMKTsKIAlpZiAoaW9jMyA9PSBOVUxM
KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBkcml2ZSBsaXN0
Iik7CiAJCWZyZWUoaW9jMik7CisJCWVycm5vID0gZXJyb3I7CiAJCXJldHVybiAoTlVMTCk7CiAJ
fQogCiAJaW9jNSA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCA1LCBOVUxMKTsKIAlpZiAoaW9jNSA9
PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBzcGFy
ZSBsaXN0Iik7CiAJCWZyZWUoaW9jMyk7CiAJCWZyZWUoaW9jMik7CisJCWVycm5vID0gZXJyb3I7
CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCkBAIC0xODAsNyArMTg2LDkgQEAKIAkJdm9sdW1lc1tp
XSA9IG1wdF92b2xfaW5mbyhmZCwgdm9sLT5Wb2x1bWVCdXMsIHZvbC0+Vm9sdW1lSUQsCiAJCSAg
ICBOVUxMKTsKIAkJaWYgKHZvbHVtZXNbaV0gPT0gTlVMTCkgeworCQkJZXJyb3IgPSBlcnJubzsK
IAkJCXdhcm4oIkZhaWxlZCB0byByZWFkIHZvbHVtZSBpbmZvIik7CisJCQllcnJubyA9IGVycm9y
OwogCQkJcmV0dXJuIChOVUxMKTsKIAkJfQogCQljb3VudCArPSB2b2x1bWVzW2ldLT5OdW1QaHlz
RGlza3M7CkBAIC0yNjQsMTMgKzI3MiwxMSBAQAogCQkJCXJldHVybiAoMCk7CiAJCQl9CiAJCX0K
LQkJZXJybm8gPSBFTk9FTlQ7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKEVOT0VOVCk7CiAJ
fQogCiBiYWQ6Ci0JZXJybm8gPSBFSU5WQUw7Ci0JcmV0dXJuICgtMSk7CisJcmV0dXJuIChFSU5W
QUwpOwogfQogCiAvKiBCb3Jyb3dlZCBoZWF2aWx5IGZyb20gc2NzaV9hbGwuYzpzY3NpX3ByaW50
X2lucXVpcnkoKS4gKi8KQEAgLTMwNiwxMiArMzEyLDEzIEBACiAJQ09ORklHX1BBR0VfUkFJRF9Q
SFlTX0RJU0tfMCAqaW5mbzsKIAlzdHJ1Y3QgbXB0X2RyaXZlX2xpc3QgKmxpc3Q7CiAJVTggUGh5
c0Rpc2tOdW07Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAKIAlmZCA9IG1wdF9vcGVuKG1w
dF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9v
cGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlsaXN0
ID0gbXB0X3BkX2xpc3QoZmQpOwpAQCAtMzE5LDE2ICszMjYsMTggQEAKIAkJcmV0dXJuIChlcnJu
byk7CiAKIAlpZiAobXB0X2xvb2t1cF9kcml2ZShsaXN0LCBkcml2ZSwgJlBoeXNEaXNrTnVtKSA8
IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZpbmQgZHJpdmUgJXMi
LCBkcml2ZSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJbXB0
X2ZyZWVfcGRfbGlzdChsaXN0KTsKIAogCS8qIEdldCB0aGUgaW5mbyBmb3IgdGhpcyBkcml2ZS4g
Ki8KIAlpbmZvID0gbXB0X3BkX2luZm8oZmQsIFBoeXNEaXNrTnVtLCBOVUxMKTsKIAlpZiAoaW5m
byA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBp
bmZvIGZvciBkcml2ZSAldSIsIFBoeXNEaXNrTnVtKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJl
dHVybiAoZXJyb3IpOwogCX0KIAogCS8qIFRyeSB0byBjaGFuZ2UgdGhlIHN0YXRlLiAqLwpAQCAt
MzM3LDEwICszNDYsMTIgQEAKIAkJcmV0dXJuIChFSU5WQUwpOwogCX0KIAotCWlmIChtcHRfcmFp
ZF9hY3Rpb24oZmQsIEFjdGlvbiwgMCwgMCwgUGh5c0Rpc2tOdW0sIDAsIE5VTEwsIDAsIE5VTEws
Ci0JICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDApIDwgMCkgeworCWVycm9yID0gbXB0X3JhaWRf
YWN0aW9uKGZkLCBBY3Rpb24sIDAsIDAsIFBoeXNEaXNrTnVtLCAwLCBOVUxMLCAwLCBOVUxMLAor
CSAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBl
cnJvcjsKIAkJd2FybigiRmFpbGVkIHRvIHNldCBkcml2ZSAldSB0byAlcyIsIFBoeXNEaXNrTnVt
LCBuYW1lKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWZy
ZWUoaW5mbyk7Cg==
--000e0ce001e65cc53d04948e3869--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTikAOehozECYANWNsDf8LdhE6H-Mg5rs7bPmw=Uc>