Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Feb 2016 12:11:13 +0000
From:      Steven Hartland <killing@multiplay.co.uk>
To:        freebsd-fs@freebsd.org
Subject:   Re: ZFS receive and attributes, proposing some changes. was Re: ZFS full system backup hoses the backup host.
Message-ID:  <56D040E1.3090000@multiplay.co.uk>
In-Reply-To: <C3EAA8F3-8EFA-450E-A4A3-A790EA2DA396@sarenet.es>
References:  <CACpH0Me58jK%2BOz3PCqH93NEn=5V1SKwPGdku62sAVLVh%2BWxEeA@mail.gmail.com> <0ae0e3ab-6ad1-4ae2-9ee9-a7d993088a01@email.android.com> <C3EAA8F3-8EFA-450E-A4A3-A790EA2DA396@sarenet.es>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------060909070708000505060205
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

I actually have a patch (see attached) which does this but never got 
round to finishing the RTI so its got some rough edges.

On 26/02/2016 11:07, Borja Marcos wrote:
>> On 26 Feb 2016, at 05:56, Karli Sjöberg <karli.sjoberg@slu.se> wrote:
>> What have other people done to get around this and/or can we either put in
>> an "ignore properties" on receive flag or a -R on send that doesn't send
>> them?
> (I removed freebsd-hackers as this discussion belongs in freebsd-fs)
>
>
> The possibility of replacing options in the receive command would be most useful here. Ideally
> it should be done atomically with the receive.
>
> For example: Imagine a replication system. It would be something like this:
>
> - Make the first snapshot
>
> - Send it  |  receive it with -u (you don’t want it mounted)
>
> - Set the destination dataset’s canmount property to “noauto"
>
> - And, periodically
>
> - 	Make new snapshot
>
> -	Send it incrementally
>
> - etc etc
>
>
> However, there is a race condition here. If your replication program/script crashes, or it stops for
> whatever reason between the first send and the “set canmount” (or you reboot the destination server)
> you end up with a time bomb. Despite being received with the -u flag, if you boot it will be mounted
> automatically. If you are replicating the root filesystem (or anything mounted on an important system
> directory) you are dead :)
>
> To avoid this kind of problems, two options come to my mind, from least desirable/useful/consistent
> to better (in my opinion)
>
> 1) Have some kind of force-inherit attribute on a dataset which forces children’s mountpoint to go below it.
>
> 	Example: when replicating server1’s datasets, I send them below to pool/server1_copies. If I set
> 	mountpoint=force_child (or something similar) for pool/server1_copies, anything received under it
> 	would have the mountpoint changed, adding the mountpoint of pool/server1_copies to it.
>
> 	Imagine I am replicating the /usr filesystem of server1, which is pool_server1/usr, with the
> 	mountpoint /usr. The destination would have the mountpoint /pool/server1_copies/usr.
>
> 	This at least avoids the unintended mountpoint overwrite problem, which is not bad. And this possibility
> 	can be useful, but it’s not a very clean solution.
>
> 2) Adding an option to “zfs receive” so that properties can be changed for the received dataset *atomically*.
>
> 	The race condition is avoided if I can specify an option to zfs recv, something like -O canmount=noauto.
>
>
> Actually, there are some changes I would make, not just for this particular case, which will not break
> functionality and will make ZFS safer to use and easier to handle, especially when replicating datasets.
>
>
> 1) Enhancing “zfs recv” with the possibility of changing options and holds atomically.
>
> 	- Changing options: -O option=value -O option=value
> 	- Adding holds: -h holdname
>
> 	When using snapshots to replicate datasets you must be careful not to delete the last replicated snapshot
> 	accidentally, or you can lose the ability to do an incremental send, forcing a full one. Holds help to prevent this.
> 	And if using them it would be very useful to have the last snapshot properly protected in the destination dataset
> 	as well. Again, it should be done ATOMICALLY.
>
> 	Same applies to dataset properties, if only for the outright dangerous combination of the canmount/mountpoint
> 	properties. Once more, we want this to be done ATOMICALLY with the zfs recv.
>
> 2) Adding the possibility of specifying “default” or “inherit” for the mountpoint property.
>
> 	When a dataset is created, the default mountpoint is pool/dataset_name unless a different value is specified.
> 	A value of “default” would set the dataset’s mountpoint back to pool/…/dataset_name, and “inherit” could
> 	set the mountpoint to the "parent’s mountpoint”/dataset_name.
>
> 	These two options can be very useful when using zfs send/zfs recv to keep replicas as a backup, but I think
> 	they can be useful in other situations.
>
>
> What do you think? In my opinion these additions won’t break functionality and they are worthwhile if only for making
> replication safer/more useful.
>
> Best regards,
>
>
>
>
>
>
>
> Borja.
>
> 	
>
>
> _______________________________________________
> freebsd-fs@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-fs
> To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org"


--------------060909070708000505060205
Content-Type: text/plain; charset=UTF-8;
 name="zfs-recv-properties.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="zfs-recv-properties.patch"

QWRkcyBzdXBwb3J0IGZvciBwcm9wZXJ0eSBvdmVycmlkZXMgKC1vIHByb3BlcnR5PXZhbHVl
KSwgcHJvcGVydHkgZXhjbHVkZXMKKC14IHByb3BlcnR5KSBhbmQgZGF0YXNldCBsaW1pdHMg
KC1sIDx2b2x1bWV8ZmlsZXN5c3RlbT4pIHRvIHpmcyByZWNlaXZlLgoKQm90aCAtbyBhbmQg
LXggb3B0aW9ucyBtaXJyb3IgdGhlIGZ1bmN0aW9uYWxpdHkgYWxyZWFkeSBhdmFpbGFibGUg
aW4KT3JhY2xlJ3MgWkZTIGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIGFsc28gbWVudGlvbmVk
IGluIHRoZSB1cHN0cmVhbQpmZWF0dXJlIHJlcXVlc3QgIzI3NDU6Cmh0dHBzOi8vd3d3Lmls
bHVtb3Mub3JnL2lzc3Vlcy8yNzQ1CgpUaGUgLWwgb3B0aW9uIGFsbG93cyByZWNlaXZlIHRv
IGJlIGxpbWl0ZWQgdG8gc3BlY2lmaWMgZGF0YXNldHMgd2l0aGluCnRoZSBzdHJlYW0gZWZm
ZWN0aXZlbHkgYWxsb3dpbmcgcGFydGlhbCByZXN0b3JlcyBmcm9tIGEgbXVsdGkgZGF0YXNl
dApzdHJlYW0uCi0tLSBjZGRsL2NvbnRyaWIvb3BlbnNvbGFyaXMvbGliL2xpYnpmcy9jb21t
b24vbGliemZzX2RhdGFzZXQuYy5vcmlnCTIwMTQtMTAtMTAgMDk6MzE6MzYuMDAwMDAwMDAw
ICswMDAwCisrKyBjZGRsL2NvbnRyaWIvb3BlbnNvbGFyaXMvbGliL2xpYnpmcy9jb21tb24v
bGliemZzX2RhdGFzZXQuYwkyMDE0LTExLTEzIDE0OjMxOjEwLjQ1MjY3MDEzMSArMDAwMApA
QCAtMjg3NCw3ICsyODc0LDcgQEAgcGFyZW50X25hbWUoY29uc3QgY2hhciAqcGF0aCwgY2hh
ciAqYnVmLAogICogJ3pvbmVkJyBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNlZCB0byB2YWxpZGF0
ZSBwcm9wZXJ0eSBzZXR0aW5ncyB3aGVuIGNyZWF0aW5nCiAgKiBuZXcgZGF0YXNldHMuCiAg
Ki8KLXN0YXRpYyBpbnQKK2ludAogY2hlY2tfcGFyZW50cyhsaWJ6ZnNfaGFuZGxlX3QgKmhk
bCwgY29uc3QgY2hhciAqcGF0aCwgdWludDY0X3QgKnpvbmVkLAogICAgIGJvb2xlYW5fdCBh
Y2NlcHRfYW5jZXN0b3IsIGludCAqcHJlZml4bGVuKQogewotLS0gY2RkbC9jb250cmliL29w
ZW5zb2xhcmlzL2xpYi9saWJ6ZnMvY29tbW9uL2xpYnpmc19pbXBsLmgub3JpZwkyMDE0LTEw
LTEwIDA5OjMxOjM2LjAwMDAwMDAwMCArMDAwMAorKysgY2RkbC9jb250cmliL29wZW5zb2xh
cmlzL2xpYi9saWJ6ZnMvY29tbW9uL2xpYnpmc19pbXBsLmgJMjAxNC0xMS0xMyAxNDozMTox
MC40NTM2Njk4MDYgKzAwMDAKQEAgLTE4OCw2ICsxODgsOCBAQCBpbnQgY2hhbmdlbGlzdF9o
YXN6b25lZGNoaWxkKHByb3BfY2hhbmdlCiAKIHZvaWQgcmVtb3ZlX21vdW50cG9pbnQoemZz
X2hhbmRsZV90ICopOwogaW50IGNyZWF0ZV9wYXJlbnRzKGxpYnpmc19oYW5kbGVfdCAqLCBj
aGFyICosIGludCk7CitpbnQgY2hlY2tfcGFyZW50cyhsaWJ6ZnNfaGFuZGxlX3QgKmhkbCwg
Y29uc3QgY2hhciAqcGF0aCwgdWludDY0X3QgKnpvbmVkLAorICAgIGJvb2xlYW5fdCBhY2Nl
cHRfYW5jZXN0b3IsIGludCAqcHJlZml4bGVuKTsKIGJvb2xlYW5fdCBpc2FfY2hpbGRfb2Yo
Y29uc3QgY2hhciAqZGF0YXNldCwgY29uc3QgY2hhciAqcGFyZW50KTsKIAogemZzX2hhbmRs
ZV90ICptYWtlX2RhdGFzZXRfaGFuZGxlKGxpYnpmc19oYW5kbGVfdCAqLCBjb25zdCBjaGFy
ICopOwotLS0gY2RkbC9jb250cmliL29wZW5zb2xhcmlzL2xpYi9saWJ6ZnMvY29tbW9uL2xp
Ynpmc19zZW5kcmVjdi5jLm9yaWcJMjAxNC0xMC0xMCAwOTozMTozNi4wMDAwMDAwMDAgKzAw
MDAKKysrIGNkZGwvY29udHJpYi9vcGVuc29sYXJpcy9saWIvbGliemZzL2NvbW1vbi9saWJ6
ZnNfc2VuZHJlY3YuYwkyMDE0LTExLTEzIDE0OjMxOjEwLjQ1NjY2OTQwOCArMDAwMApAQCAt
NjUsNyArNjUsOCBAQCBleHRlcm4gdm9pZCB6ZnNfc2V0cHJvcF9lcnJvcihsaWJ6ZnNfaGFu
CiAjZGVmaW5lCUVOT0RBVEEJRUlEUk0KIAogc3RhdGljIGludCB6ZnNfcmVjZWl2ZV9pbXBs
KGxpYnpmc19oYW5kbGVfdCAqLCBjb25zdCBjaGFyICosIHJlY3ZmbGFnc190ICosCi0gICAg
aW50LCBjb25zdCBjaGFyICosIG52bGlzdF90ICosIGF2bF90cmVlX3QgKiwgY2hhciAqKiwg
aW50LCB1aW50NjRfdCAqKTsKKyAgICBpbnQsIG52bGlzdF90ICosIG52bGlzdF90ICosIGNv
bnN0IGNoYXIgKiwgbnZsaXN0X3QgKiwgYXZsX3RyZWVfdCAqLAorICAgIGNoYXIgKiosIGlu
dCwgdWludDY0X3QgKik7CiAKIHN0YXRpYyBjb25zdCB6aW9fY2tzdW1fdCB6ZXJvX2Nrc3Vt
ID0geyAwIH07CiAKQEAgLTIwMjQsNyArMjAyNSw3IEBAIGNyZWF0ZWRfYmVmb3JlKGxpYnpm
c19oYW5kbGVfdCAqaGRsLCBhdmwKIHN0YXRpYyBpbnQKIHJlY3ZfaW5jcmVtZW50YWxfcmVw
bGljYXRpb24obGliemZzX2hhbmRsZV90ICpoZGwsIGNvbnN0IGNoYXIgKnRvZnMsCiAgICAg
cmVjdmZsYWdzX3QgKmZsYWdzLCBudmxpc3RfdCAqc3RyZWFtX252LCBhdmxfdHJlZV90ICpz
dHJlYW1fYXZsLAotICAgIG52bGlzdF90ICpyZW5hbWVkKQorICAgIG52bGlzdF90ICpyZW5h
bWVkLCBudmxpc3RfdCAqbGltaXRkcykKIHsKIAludmxpc3RfdCAqbG9jYWxfbnYsICpkZWxl
dGVkID0gTlVMTDsKIAlhdmxfdHJlZV90ICpsb2NhbF9hdmw7CkBAIC0yMDc2LDYgKzIwNzcs
MTIgQEAgYWdhaW46CiAJCSAgICAmcGFyZW50X2Zyb21zbmFwX2d1aWQpKTsKIAkJKHZvaWQp
IG52bGlzdF9sb29rdXBfdWludDY0KG52ZnMsICJvcmlnaW4iLCAmb3JpZ2luZ3VpZCk7CiAK
KwkJaWYgKCFudmxpc3RfZW1wdHkobGltaXRkcykgJiYgIW52bGlzdF9leGlzdHMobGltaXRk
cywgZnNuYW1lKSkgeworCQkJaWYgKGZsYWdzLT52ZXJib3NlKQorCQkJCSh2b2lkKSBwcmlu
dGYoInNraXBwaW5nIHJlcGxpY2F0aW9uIG9mICVzXG4iLCBmc25hbWUpOworCQkJY29udGlu
dWU7CisJCX0KKwogCQkvKgogCQkgKiBGaXJzdCBmaW5kIHRoZSBzdHJlYW0ncyBmcywgc28g
d2UgY2FuIGNoZWNrIGZvcgogCQkgKiBhIGRpZmZlcmVudCBvcmlnaW4gKGR1ZSB0byAiemZz
IHByb21vdGUiKQpAQCAtMjMzMiw4ICsyMzM5LDkgQEAgZG9hZ2FpbjoKIAogc3RhdGljIGlu
dAogemZzX3JlY2VpdmVfcGFja2FnZShsaWJ6ZnNfaGFuZGxlX3QgKmhkbCwgaW50IGZkLCBj
b25zdCBjaGFyICpkZXN0bmFtZSwKLSAgICByZWN2ZmxhZ3NfdCAqZmxhZ3MsIGRtdV9yZXBs
YXlfcmVjb3JkX3QgKmRyciwgemlvX2Nrc3VtX3QgKnpjLAotICAgIGNoYXIgKip0b3BfemZz
LCBpbnQgY2xlYW51cF9mZCwgdWludDY0X3QgKmFjdGlvbl9oYW5kbGVwKQorICAgIHJlY3Zm
bGFnc190ICpmbGFncywgbnZsaXN0X3QgKmV4cHJvcHMsIG52bGlzdF90ICpsaW1pdGRzLAor
ICAgIGRtdV9yZXBsYXlfcmVjb3JkX3QgKmRyciwgemlvX2Nrc3VtX3QgKnpjLCBjaGFyICoq
dG9wX3pmcywgaW50IGNsZWFudXBfZmQsCisgICAgdWludDY0X3QgKmFjdGlvbl9oYW5kbGVw
KQogewogCW52bGlzdF90ICpzdHJlYW1fbnYgPSBOVUxMOwogCWF2bF90cmVlX3QgKnN0cmVh
bV9hdmwgPSBOVUxMOwpAQCAtMjQ1Myw3ICsyNDYxLDcgQEAgemZzX3JlY2VpdmVfcGFja2Fn
ZShsaWJ6ZnNfaGFuZGxlX3QgKmhkbAogCQkJfQogCiAJCQlzb2Z0ZXJyID0gcmVjdl9pbmNy
ZW1lbnRhbF9yZXBsaWNhdGlvbihoZGwsIHRvZnMsIGZsYWdzLAotCQkJICAgIHN0cmVhbV9u
diwgc3RyZWFtX2F2bCwgcmVuYW1lZCk7CisJCQkgICAgc3RyZWFtX252LCBzdHJlYW1fYXZs
LCByZW5hbWVkLCBsaW1pdGRzKTsKIAogCQkJLyogVW5tb3VudCByZW5hbWVkIGZpbGVzeXN0
ZW1zIGJlZm9yZSByZWNlaXZpbmcuICovCiAJCQl3aGlsZSAoKHBhaXIgPSBudmxpc3RfbmV4
dF9udnBhaXIocmVuYW1lZCwKQEAgLTI0OTksOCArMjUwNyw4IEBAIHpmc19yZWNlaXZlX3Bh
Y2thZ2UobGliemZzX2hhbmRsZV90ICpoZGwKIAkJICogcmVjdl9za2lwKCkgYW5kIHJldHVy
biAwKS4KIAkJICovCiAJCWVycm9yID0gemZzX3JlY2VpdmVfaW1wbChoZGwsIGRlc3RuYW1l
LCBmbGFncywgZmQsCi0JCSAgICBzZW5kZnMsIHN0cmVhbV9udiwgc3RyZWFtX2F2bCwgdG9w
X3pmcywgY2xlYW51cF9mZCwKLQkJICAgIGFjdGlvbl9oYW5kbGVwKTsKKwkJICAgIGV4cHJv
cHMsIGxpbWl0ZHMsIHNlbmRmcywgc3RyZWFtX252LCBzdHJlYW1fYXZsLCB0b3BfemZzLAor
CQkgICAgY2xlYW51cF9mZCwgYWN0aW9uX2hhbmRsZXApOwogCQlpZiAoZXJyb3IgPT0gRU5P
REFUQSkgewogCQkJZXJyb3IgPSAwOwogCQkJYnJlYWs7CkBAIC0yNTE0LDcgKzI1MjIsNyBA
QCB6ZnNfcmVjZWl2ZV9wYWNrYWdlKGxpYnpmc19oYW5kbGVfdCAqaGRsCiAJCSAqIHJlbmFt
ZXMgYWdhaW4uCiAJCSAqLwogCQlzb2Z0ZXJyID0gcmVjdl9pbmNyZW1lbnRhbF9yZXBsaWNh
dGlvbihoZGwsIHRvZnMsIGZsYWdzLAotCQkgICAgc3RyZWFtX252LCBzdHJlYW1fYXZsLCBO
VUxMKTsKKwkJICAgIHN0cmVhbV9udiwgc3RyZWFtX2F2bCwgTlVMTCwgbGltaXRkcyk7CiAJ
fQogCiBvdXQ6CkBAIC0yNjI3LDMwICsyNjM1LDE5OCBAQCByZWN2X3NraXAobGliemZzX2hh
bmRsZV90ICpoZGwsIGludCBmZCwgCiB9CiAKIC8qCisgKiBDYWxjdWxhdGUgYSBsaXN0IG9m
IHByb3BlcnRpZXMgZm9yIHRoZSBjdXJyZW50IGRhdGFzZXQgdGFraW5nIGludG8gYWNjb3Vu
dAorICogaXRzIGN1cnJlbnQgcHJvcGVydGllcyAocHJvcHMpIGFuZCB0aGUgZXh0ZXJuYWwg
cHJvcGVydGllcyAoZXhwcm9wcykKKyAqCisgKiBUaGlzIGNhbGN1bGF0aW9uOgorICogLSBS
ZW1vdmVzIGV4Y2x1ZGVkIHByb3BlcnRpZXMgKGJvb2xlYW5zKQorICogLSBDaGFuZ2VzIHRo
ZSB2YWx1ZXMgb2Ygb3ZlcnJpZGVuIHByb3BlcnRpZXMgKHN0cmluZ3MpCisgKgorICogVGhl
cmUgYXJlIHR3byB0eXBlcyBvZiBleHRlcm5hbCBwcm9wZXJ0aWVzOgorICogLSBHbG9iYWwg
cHJvcGVydGllcworICogLSBEYXRhc2V0IHNwZWNpZmljIHByb3BlcnRpZXMgKGlkZW50aWZp
ZWQgYnkgIyBzZXBhcmF0b3IpCisgKgorICogQW4gZXhhbXBsZSBvZiBhIGRhdGFzZXQgc3Bl
Y2lmaWMgcHJvcGVydHkgd291bGQgYmUgJ3Bvb2wvZnMjcXVvdGEnCisgKgorICogRGF0YXNl
dCBzcGVjaWZpYyBleHRlcm5hbCBwcm9wZXJ0aWVzIHRha2UgcHJlY2lkZW5jZSBvdmVyIG1h
dGNoaW5nIGdsb2JhbAorICogcHJvcGVydGllcy4KKyAqLworc3RhdGljIGludAorcHJvcHNf
b3ZlcnJpZGUoY2hhciAqZHNuYW1lLCBudmxpc3RfdCAqcHJvcHMsIG52bGlzdF90ICpleHBy
b3BzLAorICAgIG52bGlzdF90ICoqbnByb3BzcCwgcmVjdmZsYWdzX3QgKmZsYWdzLCBsaWJ6
ZnNfaGFuZGxlX3QgKmhkbCwKKyAgICB6ZnNfdHlwZV90IHR5cGUsIHVpbnQ2NF90IHpvbmVk
LCB6ZnNfaGFuZGxlX3QgKnpocCwKKyAgICBjb25zdCBjaGFyICplcnJidWYpCit7CisJbnZs
aXN0X3QgKmRvcHJvcHMsICpnb3Byb3BzLCAqZHhwcm9wcywgKmd4cHJvcHMsICpucHJvcHMs
ICp2cHJvcHM7CisJbnZwYWlyX3QgKnBhaXI7CisJY2hhciAqc3RydmFsOworCWludCByZXQg
PSAwOworCWNvbnN0IGNoYXIgc2VwID0gJyMnOworCisJaWYgKG52bGlzdF9lbXB0eShwcm9w
cykgfHwgbnZsaXN0X2VtcHR5KGV4cHJvcHMpKQorCQlyZXR1cm4gKDApOyAvKiBObyBwcm9w
ZXJ0aWVzICovCisKKwlpZiAobnZsaXN0X2R1cChwcm9wcywgJm5wcm9wcywgMCkgIT0gMCkK
KwkJcmV0dXJuICgtMSk7CisKKwlWRVJJRlkobnZsaXN0X2FsbG9jKCZkb3Byb3BzLCBOVl9V
TklRVUVfTkFNRSwgMCkgPT0gMCk7CisJVkVSSUZZKG52bGlzdF9hbGxvYygmZ29wcm9wcywg
TlZfVU5JUVVFX05BTUUsIDApID09IDApOworCVZFUklGWShudmxpc3RfYWxsb2MoJmR4cHJv
cHMsIE5WX1VOSVFVRV9OQU1FLCAwKSA9PSAwKTsKKwlWRVJJRlkobnZsaXN0X2FsbG9jKCZn
eHByb3BzLCBOVl9VTklRVUVfTkFNRSwgMCkgPT0gMCk7CisKKwkvKiBidWlsZCBsaXN0cyB0
byBwcm9jZXNzIGluIG9yZGVyICovCisJZm9yIChudnBhaXJfdCAqcGFpciA9IG52bGlzdF9u
ZXh0X252cGFpcihleHByb3BzLCBOVUxMKTsgcGFpciAhPSBOVUxMOworCSAgICAgcGFpciA9
IG52bGlzdF9uZXh0X252cGFpcihleHByb3BzLCBwYWlyKSkgeworCQljb25zdCBjaGFyICpw
cm9wbmFtZSA9IG52cGFpcl9uYW1lKHBhaXIpOworCQljaGFyICpzZXBwID0gc3RyY2hyKHBy
b3BuYW1lLCBzZXApOworCQlpZiAoc2VwcCA9PSBOVUxMKSB7CisJCQlzd2l0Y2gobnZwYWly
X3R5cGUocGFpcikpCisJCQl7CisJCQljYXNlIERBVEFfVFlQRV9CT09MRUFOOgorCQkJCVZF
UklGWTAobnZsaXN0X2FkZF9udnBhaXIoZ3hwcm9wcywgcGFpcikpOworCQkJCWJyZWFrOwor
CQkJY2FzZSBEQVRBX1RZUEVfU1RSSU5HOgorCQkJCVZFUklGWTAobnZsaXN0X2FkZF9udnBh
aXIoZ29wcm9wcywgcGFpcikpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkodm9p
ZCkgZnByaW50ZihzdGRlcnIsIGRnZXR0ZXh0KFRFWFRfRE9NQUlOLAorCQkJCSAgICAicHJv
cCAnJXMnIG11c3QgYmUgYSBzdHJpbmcgb3IgYm9vbGVhbiIpLAorCQkJCSAgICBwcm9wbmFt
ZSk7CisJCQkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiwgc28gYXNzZXJ0ICovCisJCQkJYXNz
ZXJ0KEJfRkFMU0UpOworCQkJfQorCQl9IGVsc2UgaWYgKHN0cmNtcChkc25hbWUsIHNlcHAr
MSkgPT0gMCkgeworCQkJLyogZGF0YXNldCBzcGVjaWZpYyBwcm9wZXJ0eSAqLworCQkJKnNl
cHAgPSAnXDAnOworCQkJc3dpdGNoKG52cGFpcl90eXBlKHBhaXIpKQorCQkJeworCQkJY2Fz
ZSBEQVRBX1RZUEVfQk9PTEVBTjoKKwkJCQlWRVJJRlkwKG52bGlzdF9hZGRfYm9vbGVhbihk
eHByb3BzLCBwcm9wbmFtZSkpOworCQkJCWJyZWFrOworCQkJY2FzZSBEQVRBX1RZUEVfU1RS
SU5HOgorCQkJCW52cGFpcl92YWx1ZV9zdHJpbmcocGFpciwgJnN0cnZhbCk7CisJCQkJVkVS
SUZZMChudmxpc3RfYWRkX3N0cmluZyhkb3Byb3BzLCBwcm9wbmFtZSwKKwkJCQkgICAgc3Ry
dmFsKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCSh2b2lkKSBmcHJpbnRmKHN0
ZGVyciwgZGdldHRleHQoVEVYVF9ET01BSU4sCisJCQkJICAgICJwcm9wICclcycgbXVzdCBi
ZSBhIHN0cmluZyBvciBib29sZWFuIiksCisJCQkJICAgIHByb3BuYW1lKTsKKwkJCQkvKiBz
aG91bGQgbmV2ZXIgaGFwcGVuLCBzbyBhc3NlcnQgKi8KKwkJCQlhc3NlcnQoQl9GQUxTRSk7
CisJCQl9CisJCQkqc2VwcCA9IHNlcDsKKwkJfQorCX0KKworCS8qIGNvbnZlcnQgb3ZlcnJp
ZGUgcHJvcGVydGllcyBlLmcuIHN0cmluZ3MgdG8gbmF0aXZlICovCisJaWYgKCh2cHJvcHMg
PSB6ZnNfdmFsaWRfcHJvcGxpc3QoaGRsLCB0eXBlLCBnb3Byb3BzLCB6b25lZCwgemhwLAor
CSAgICBlcnJidWYpKSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJbnZsaXN0X2ZyZWUo
Z29wcm9wcyk7CisJZ29wcm9wcyA9IHZwcm9wczsKKworCWlmICgodnByb3BzID0gemZzX3Zh
bGlkX3Byb3BsaXN0KGhkbCwgdHlwZSwgZG9wcm9wcywgem9uZWQsIHpocCwKKwkgICAgZXJy
YnVmKSkgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKwkKKwludmxpc3RfZnJlZShkb3Byb3Bz
KTsKKwlkb3Byb3BzID0gdnByb3BzOworCisJLyogZ2xvYmFsIC0gb3ZlcnJpZGUgLyBzZXQg
cHJvcGVydGllcyAqLworCWZvciAobnZwYWlyX3QgKnBhaXIgPSBudmxpc3RfbmV4dF9udnBh
aXIoZ29wcm9wcywgTlVMTCk7IHBhaXIgIT0gTlVMTDsKKwkgICAgIHBhaXIgPSBudmxpc3Rf
bmV4dF9udnBhaXIoZ29wcm9wcywgcGFpcikpIHsKKwkJY29uc3QgY2hhciAqcG5hbWUgPSBu
dnBhaXJfbmFtZShwYWlyKTsKKwkJaWYgKCFudmxpc3RfZXhpc3RzKGd4cHJvcHMsIHBuYW1l
KSAmJgorCQkgICAgIW52bGlzdF9leGlzdHMoZHhwcm9wcywgcG5hbWUpKSB7CisJCQlpZiAo
ZmxhZ3MtPnZlcmJvc2UpCisJCQkJKHZvaWQpIHByaW50ZigiJXMgJXMgcHJvcGVydHkgZnJv
bSAlc1xuIiwKKwkJCQkgICAgbnZsaXN0X2V4aXN0cyhucHJvcHMsIHBuYW1lKSA/CisJCQkJ
ICAgICJvdmVycmlkaW5nIiA6ICJzZXR0aW5nIiwgcG5hbWUsIGRzbmFtZSk7CisJCQlWRVJJ
RlkwKG52bGlzdF9hZGRfbnZwYWlyKG5wcm9wcywgcGFpcikpOworCQl9CisJfQorCisJLyog
Z2xvYmFsIC0gZXhjbHVkZSBwcm9wZXJ0aWVzICovCisJZm9yIChudnBhaXJfdCAqcGFpciA9
IG52bGlzdF9uZXh0X252cGFpcihneHByb3BzLCBOVUxMKTsgcGFpciAhPSBOVUxMOworCSAg
ICAgcGFpciA9IG52bGlzdF9uZXh0X252cGFpcihneHByb3BzLCBwYWlyKSkgeworCQljb25z
dCBjaGFyICpwbmFtZSA9IG52cGFpcl9uYW1lKHBhaXIpOworCQlpZiAoIW52bGlzdF9leGlz
dHMoZG9wcm9wcywgcG5hbWUpKSB7CisJCQlpZiAoZmxhZ3MtPnZlcmJvc2UgJiYgbnZsaXN0
X2V4aXN0cyhucHJvcHMsIHBuYW1lKSkKKwkJCQkodm9pZCkgcHJpbnRmKCJleGNsdWRpbmcg
JXMgcHJvcGVydHkgZnJvbSAlc1xuIiwKKwkJCQkgICAgcG5hbWUsIGRzbmFtZSk7CisKKwkJ
CSh2b2lkKSBudmxpc3RfcmVtb3ZlX2FsbChucHJvcHMsIHBuYW1lKTsKKwkJfQorCX0KKwor
CS8qIGRhdGFzZXQgLSBvdmVycmlkZSAvIHNldCBwcm9wZXJ0aWVzICovCisJZm9yIChudnBh
aXJfdCAqcGFpciA9IG52bGlzdF9uZXh0X252cGFpcihkb3Byb3BzLCBOVUxMKTsgcGFpciAh
PSBOVUxMOworCSAgICAgcGFpciA9IG52bGlzdF9uZXh0X252cGFpcihkb3Byb3BzLCBwYWly
KSkgeworCQljb25zdCBjaGFyICpwbmFtZSA9IG52cGFpcl9uYW1lKHBhaXIpOworCQlpZiAo
IW52bGlzdF9leGlzdHMoZHhwcm9wcywgcG5hbWUpKSB7CisJCQlpZiAoZmxhZ3MtPnZlcmJv
c2UpCisJCQkJKHZvaWQpIHByaW50ZigiJXMgJXMgcHJvcGVydHkgZnJvbSAlc1xuIiwKKwkJ
CQkgICAgbnZsaXN0X2V4aXN0cyhucHJvcHMsIHBuYW1lKSA/CisJCQkJICAgICJvdmVycmlk
aW5nIiA6ICJzZXR0aW5nIiwgcG5hbWUsIGRzbmFtZSk7CisJCQlWRVJJRlkwKG52bGlzdF9h
ZGRfbnZwYWlyKG5wcm9wcywgcGFpcikpOworCQl9CisJfQorCisJLyogZGF0YXNldCAtIGV4
Y2x1ZGUgcHJvcGVydGllcyAqLworCWZvciAobnZwYWlyX3QgKnBhaXIgPSBudmxpc3RfbmV4
dF9udnBhaXIoZHhwcm9wcywgTlVMTCk7IHBhaXIgIT0gTlVMTDsKKwkgICAgIHBhaXIgPSBu
dmxpc3RfbmV4dF9udnBhaXIoZHhwcm9wcywgcGFpcikpIHsKKwkJY29uc3QgY2hhciAqcG5h
bWUgPSBudnBhaXJfbmFtZShwYWlyKTsKKwkJaWYgKG52bGlzdF9leGlzdHMobnByb3BzLCBw
bmFtZSkpIHsKKwkJCWlmIChmbGFncy0+dmVyYm9zZSkKKwkJCQkodm9pZCkgcHJpbnRmKCJl
eGNsdWRpbmcgJXMgcHJvcGVydHkgZnJvbSAlc1xuIiwKKwkJCQkgICAgcG5hbWUsIGRzbmFt
ZSk7CisKKwkJCSh2b2lkKSBudmxpc3RfcmVtb3ZlX2FsbChucHJvcHMsIHBuYW1lKTsKKwkJ
fQorCX0KKworCSpucHJvcHNwID0gbnByb3BzOworCitlcnJvcjoKKwlpZiAoMCAhPSByZXQp
CisJCW52bGlzdF9mcmVlKG5wcm9wcyk7CisJbnZsaXN0X2ZyZWUoZ29wcm9wcyk7CisJbnZs
aXN0X2ZyZWUoZ3hwcm9wcyk7CisJbnZsaXN0X2ZyZWUoZG9wcm9wcyk7CisJbnZsaXN0X2Zy
ZWUoZHhwcm9wcyk7CisJcmV0dXJuIChyZXQpOworfQorCisvKgogICogUmVzdG9yZXMgYSBi
YWNrdXAgb2YgdG9zbmFwIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvciBzcGVjaWZpZWQgYnkg
aW5mZC4KICAqLwogc3RhdGljIGludAogemZzX3JlY2VpdmVfb25lKGxpYnpmc19oYW5kbGVf
dCAqaGRsLCBpbnQgaW5mZCwgY29uc3QgY2hhciAqdG9zbmFwLAotICAgIHJlY3ZmbGFnc190
ICpmbGFncywgZG11X3JlcGxheV9yZWNvcmRfdCAqZHJyLAotICAgIGRtdV9yZXBsYXlfcmVj
b3JkX3QgKmRycl9ub3N3YXAsIGNvbnN0IGNoYXIgKnNlbmRmcywKLSAgICBudmxpc3RfdCAq
c3RyZWFtX252LCBhdmxfdHJlZV90ICpzdHJlYW1fYXZsLCBjaGFyICoqdG9wX3pmcywgaW50
IGNsZWFudXBfZmQsCi0gICAgdWludDY0X3QgKmFjdGlvbl9oYW5kbGVwKQorICAgIHJlY3Zm
bGFnc190ICpmbGFncywgbnZsaXN0X3QgKmV4cHJvcHMsIG52bGlzdF90ICpsaW1pdGRzLAor
ICAgIGRtdV9yZXBsYXlfcmVjb3JkX3QgKmRyciwgZG11X3JlcGxheV9yZWNvcmRfdCAqZHJy
X25vc3dhcCwKKyAgICBjb25zdCBjaGFyICpzZW5kZnMsIG52bGlzdF90ICpzdHJlYW1fbnYs
IGF2bF90cmVlX3QgKnN0cmVhbV9hdmwsCisgICAgY2hhciAqKnRvcF96ZnMsIGludCBjbGVh
bnVwX2ZkLCB1aW50NjRfdCAqYWN0aW9uX2hhbmRsZXApCiB7CiAJemZzX2NtZF90IHpjID0g
eyAwIH07CiAJdGltZV90IGJlZ2luX3RpbWU7CiAJaW50IGlvY3RsX2VyciwgaW9jdGxfZXJy
bm8sIGVycjsKIAljaGFyICpjcDsKIAlzdHJ1Y3QgZHJyX2JlZ2luICpkcnJiID0gJmRyci0+
ZHJyX3UuZHJyX2JlZ2luOworCWNoYXIgZHNuYW1lW1pGU19NQVhOQU1FTEVOXTsKIAljaGFy
IGVycmJ1ZlsxMDI0XTsKIAljaGFyIHByb3BfZXJyYnVmWzEwMjRdOwogCWNvbnN0IGNoYXIg
KmNob3BwcmVmaXg7CiAJYm9vbGVhbl90IG5ld2ZzID0gQl9GQUxTRTsKLQlib29sZWFuX3Qg
c3RyZWFtX3dhbnRzbmV3ZnM7CisJYm9vbGVhbl90IHN0cmVhbV93YW50c25ld2ZzLCBza2lw
OwogCXVpbnQ2NF90IHBhcmVudF9zbmFwZ3VpZCA9IDA7CiAJcHJvcF9jaGFuZ2VsaXN0X3Qg
KmNscCA9IE5VTEw7CiAJbnZsaXN0X3QgKnNuYXBwcm9wc19udmxpc3QgPSBOVUxMOworCW52
bGlzdF90ICpwcm9wcyA9IE5VTEw7CisJbnZsaXN0X3QgKm5wcm9wcyA9IE5VTEw7CiAJenBy
b3BfZXJyZmxhZ3NfdCBwcm9wX2VycmZsYWdzOwotCWJvb2xlYW5fdCByZWN1cnNpdmU7CisJ
Ym9vbGVhbl90IHJlY3Vyc2l2ZSwgaGFzX2V4cHJvcHM7CiAKIAliZWdpbl90aW1lID0gdGlt
ZShOVUxMKTsKIApAQCAtMjY2MiwxMCArMjgzOCw5IEBAIHpmc19yZWNlaXZlX29uZShsaWJ6
ZnNfaGFuZGxlX3QgKmhkbCwgaW4KIAogCWlmIChzdHJlYW1fYXZsICE9IE5VTEwpIHsKIAkJ
Y2hhciAqc25hcG5hbWU7CisJCW52bGlzdF90ICpzbmFwcHJvcHM7CiAJCW52bGlzdF90ICpm
cyA9IGZzYXZsX2ZpbmQoc3RyZWFtX2F2bCwgZHJyYi0+ZHJyX3RvZ3VpZCwKIAkJICAgICZz
bmFwbmFtZSk7Ci0JCW52bGlzdF90ICpwcm9wczsKLQkJaW50IHJldDsKIAogCQkodm9pZCkg
bnZsaXN0X2xvb2t1cF91aW50NjQoZnMsICJwYXJlbnRmcm9tc25hcCIsCiAJCSAgICAmcGFy
ZW50X3NuYXBndWlkKTsKQEAgLTI2NzcsMTcgKzI4NTIsMTYgQEAgemZzX3JlY2VpdmVfb25l
KGxpYnpmc19oYW5kbGVfdCAqaGRsLCBpbgogCQkJVkVSSUZZKDAgPT0gbnZsaXN0X2FkZF91
aW50NjQocHJvcHMsCiAJCQkgICAgemZzX3Byb3BfdG9fbmFtZShaRlNfUFJPUF9DQU5NT1VO
VCksIDApKTsKIAkJfQotCQlyZXQgPSB6Y21kX3dyaXRlX3NyY19udmxpc3QoaGRsLCAmemMs
IHByb3BzKTsKLQkJaWYgKGVycikKKworCQlpZiAoZXJyKSB7CiAJCQludmxpc3RfZnJlZShw
cm9wcyk7CisJCQlwcm9wcyA9IE5VTEw7CisJCX0KIAotCQlpZiAoMCA9PSBudmxpc3RfbG9v
a3VwX252bGlzdChmcywgInNuYXBwcm9wcyIsICZwcm9wcykpIHsKLQkJCVZFUklGWSgwID09
IG52bGlzdF9sb29rdXBfbnZsaXN0KHByb3BzLAorCQlpZiAoMCA9PSBudmxpc3RfbG9va3Vw
X252bGlzdChmcywgInNuYXBwcm9wcyIsICZzbmFwcHJvcHMpKSB7CisJCQlWRVJJRlkoMCA9
PSBudmxpc3RfbG9va3VwX252bGlzdChzbmFwcHJvcHMsCiAJCQkgICAgc25hcG5hbWUsICZz
bmFwcHJvcHNfbnZsaXN0KSk7CiAJCX0KLQotCQlpZiAocmV0ICE9IDApCi0JCQlyZXR1cm4g
KC0xKTsKIAl9CiAKIAljcCA9IE5VTEw7CkBAIC0yODU3LDYgKzMwMzEsMTEgQEAgemZzX3Jl
Y2VpdmVfb25lKGxpYnpmc19oYW5kbGVfdCAqaGRsLCBpbgogCSh2b2lkKSBzdHJjcHkoemMu
emNfbmFtZSwgemMuemNfdmFsdWUpOwogCSpzdHJjaHIoemMuemNfbmFtZSwgJ0AnKSA9ICdc
MCc7CiAKKwkodm9pZCkgc3RyY3B5KGRzbmFtZSwgZHJyYi0+ZHJyX3RvbmFtZSk7CisJKnN0
cmNocihkc25hbWUsICdAJykgPSAnXDAnOworCisJaGFzX2V4cHJvcHMgPSAhbnZsaXN0X2Vt
cHR5KGV4cHJvcHMpOworCiAJaWYgKHpmc19kYXRhc2V0X2V4aXN0cyhoZGwsIHpjLnpjX25h
bWUsIFpGU19UWVBFX0RBVEFTRVQpKSB7CiAJCXpmc19oYW5kbGVfdCAqemhwOwogCkBAIC0y
OTIwLDYgKzMwOTksMTYgQEAgemZzX3JlY2VpdmVfb25lKGxpYnpmc19oYW5kbGVfdCAqaGRs
LCBpbgogCQkJCXJldHVybiAoLTEpOwogCQkJfQogCQl9CisKKwkJLyogY29udmVydCBvdmVy
cmlkZSBwcm9wZXJ0aWVzIGUuZy4gc3RyaW5ncyB0byBuYXRpdmUgKi8KKwkJaWYgKGhhc19l
eHByb3BzICYmIHByb3BzX292ZXJyaWRlKGRzbmFtZSwgcHJvcHMsIGV4cHJvcHMsCisJCSAg
ICAmbnByb3BzLCBmbGFncywgaGRsLCB6aHAtPnpmc190eXBlLAorCQkgICAgemZzX3Byb3Bf
Z2V0X2ludCh6aHAsIFpGU19QUk9QX1pPTkVEKSwgemhwLCBlcnJidWYpICE9IDApIHsKKwkJ
CXpmc19jbG9zZSh6aHApOworCQkJemNtZF9mcmVlX252bGlzdHMoJnpjKTsKKwkJCXJldHVy
biAoLTEpOworCQl9CisKIAkJemZzX2Nsb3NlKHpocCk7CiAJfSBlbHNlIHsKIAkJLyoKQEAg
LTI5NTAsMjAgKzMxMzksMzkgQEAgemZzX3JlY2VpdmVfb25lKGxpYnpmc19oYW5kbGVfdCAq
aGRsLCBpbgogCQl9CiAKIAkJbmV3ZnMgPSBCX1RSVUU7CisJCWlmIChoYXNfZXhwcm9wcykg
eworCQkJLyogQ3JlYXRlIGFuIG92ZXJyaWRlIHNldCBvZiBwcm9wZXJ0aWVzIGlmIG5lZWRl
ZCAqLworCQkJdWludDY0X3Qgem9uZWQgPSAwOworCQkJaWYgKGZsYWdzLT5pc3ByZWZpeCAm
JiAhZmxhZ3MtPmlzdGFpbCAmJiAhZmxhZ3MtPmRyeXJ1bikgeworCQkJCS8qIENoZWNrIGlm
IHdlJ3JlIHpvbmVkIG9yIG5vdCAqLworCQkJCWlmIChjaGVja19wYXJlbnRzKGhkbCwgemMu
emNfdmFsdWUsICZ6b25lZCwgQl9GQUxTRSwgTlVMTCkgIT0gMCkgeworCQkJCQl6Y21kX2Zy
ZWVfbnZsaXN0cygmemMpOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQl9CisKKwkJ
CWlmIChwcm9wc19vdmVycmlkZShkc25hbWUsIHByb3BzLCBleHByb3BzLCAmbnByb3BzLCBm
bGFncywKKwkJCSAgICBoZGwsIFpGU19UWVBFX0RBVEFTRVQsIHpvbmVkLCBOVUxMLCBlcnJi
dWYpICE9IDApIHsKKwkJCQl6Y21kX2ZyZWVfbnZsaXN0cygmemMpOworCQkJCXJldHVybiAo
LTEpOworCQkJfQorCQl9CiAJfQogCiAJemMuemNfYmVnaW5fcmVjb3JkID0gZHJyX25vc3dh
cC0+ZHJyX3UuZHJyX2JlZ2luOwogCXpjLnpjX2Nvb2tpZSA9IGluZmQ7CiAJemMuemNfZ3Vp
ZCA9IGZsYWdzLT5mb3JjZTsKKwlza2lwID0gIW52bGlzdF9lbXB0eShsaW1pdGRzKSAmJiAh
bnZsaXN0X2V4aXN0cyhsaW1pdGRzLCBkc25hbWUpOwogCWlmIChmbGFncy0+dmVyYm9zZSkg
ewogCQkodm9pZCkgcHJpbnRmKCIlcyAlcyBzdHJlYW0gb2YgJXMgaW50byAlc1xuIiwKLQkJ
ICAgIGZsYWdzLT5kcnlydW4gPyAid291bGQgcmVjZWl2ZSIgOiAicmVjZWl2aW5nIiwKKwkJ
ICAgIHNraXAgPyAoZmxhZ3MtPmRyeXJ1biA/ICJ3b3VsZCBza2lwIiA6ICJza2lwcGluZyIp
IDoKKwkJICAgIChmbGFncy0+ZHJ5cnVuID8gIndvdWxkIHJlY2VpdmUiIDogInJlY2Vpdmlu
ZyIpLAogCQkgICAgZHJyYi0+ZHJyX2Zyb21ndWlkID8gImluY3JlbWVudGFsIiA6ICJmdWxs
IiwKIAkJICAgIGRycmItPmRycl90b25hbWUsIHpjLnpjX3ZhbHVlKTsKIAkJKHZvaWQpIGZm
bHVzaChzdGRvdXQpOwogCX0KIAotCWlmIChmbGFncy0+ZHJ5cnVuKSB7CisJaWYgKGZsYWdz
LT5kcnlydW4gfHwgc2tpcCkgewogCQl6Y21kX2ZyZWVfbnZsaXN0cygmemMpOwogCQlyZXR1
cm4gKHJlY3Zfc2tpcChoZGwsIGluZmQsIGZsYWdzLT5ieXRlc3dhcCkpOwogCX0KQEAgLTI5
NzMsNiArMzE4MSwxNSBAQCB6ZnNfcmVjZWl2ZV9vbmUobGliemZzX2hhbmRsZV90ICpoZGws
IGluCiAJemMuemNfY2xlYW51cF9mZCA9IGNsZWFudXBfZmQ7CiAJemMuemNfYWN0aW9uX2hh
bmRsZSA9ICphY3Rpb25faGFuZGxlcDsKIAorCWlmIChucHJvcHMpIHsKKwkJaWYgKHpjbWRf
d3JpdGVfc3JjX252bGlzdChoZGwsICZ6YywgbnByb3BzKSAhPSAwKSB7CisJCQludmxpc3Rf
ZnJlZShucHJvcHMpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJbnZsaXN0X2ZyZWUobnBy
b3BzKTsKKwl9IGVsc2UgaWYgKHByb3BzICYmIHpjbWRfd3JpdGVfc3JjX252bGlzdChoZGws
ICZ6YywgcHJvcHMpICE9IDApCisJCXJldHVybiAoLTEpOworCiAJZXJyID0gaW9jdGxfZXJy
ID0gemZzX2lvY3RsKGhkbCwgWkZTX0lPQ19SRUNWLCAmemMpOwogCWlvY3RsX2Vycm5vID0g
ZXJybm87CiAJcHJvcF9lcnJmbGFncyA9ICh6cHJvcF9lcnJmbGFnc190KXpjLnpjX29iajsK
QEAgLTMxODAsOCArMzM5Nyw5IEBAIHpmc19yZWNlaXZlX29uZShsaWJ6ZnNfaGFuZGxlX3Qg
KmhkbCwgaW4KIAogc3RhdGljIGludAogemZzX3JlY2VpdmVfaW1wbChsaWJ6ZnNfaGFuZGxl
X3QgKmhkbCwgY29uc3QgY2hhciAqdG9zbmFwLCByZWN2ZmxhZ3NfdCAqZmxhZ3MsCi0gICAg
aW50IGluZmQsIGNvbnN0IGNoYXIgKnNlbmRmcywgbnZsaXN0X3QgKnN0cmVhbV9udiwgYXZs
X3RyZWVfdCAqc3RyZWFtX2F2bCwKLSAgICBjaGFyICoqdG9wX3pmcywgaW50IGNsZWFudXBf
ZmQsIHVpbnQ2NF90ICphY3Rpb25faGFuZGxlcCkKKyAgICBpbnQgaW5mZCwgbnZsaXN0X3Qg
KmV4cHJvcHMsIG52bGlzdF90ICpsaW1pdGRzLCBjb25zdCBjaGFyICpzZW5kZnMsCisgICAg
bnZsaXN0X3QgKnN0cmVhbV9udiwgYXZsX3RyZWVfdCAqc3RyZWFtX2F2bCwgY2hhciAqKnRv
cF96ZnMsIGludCBjbGVhbnVwX2ZkLAorICAgIHVpbnQ2NF90ICphY3Rpb25faGFuZGxlcCkK
IHsKIAlpbnQgZXJyOwogCWRtdV9yZXBsYXlfcmVjb3JkX3QgZHJyLCBkcnJfbm9zd2FwOwpA
QCAtMzI3MywxMyArMzQ5MSwxNCBAQCB6ZnNfcmVjZWl2ZV9pbXBsKGxpYnpmc19oYW5kbGVf
dCAqaGRsLCBjCiAJCQlzZW5kZnMgPSBub25wYWNrYWdlX3NlbmRmczsKIAkJfQogCQlyZXR1
cm4gKHpmc19yZWNlaXZlX29uZShoZGwsIGluZmQsIHRvc25hcCwgZmxhZ3MsCi0JCSAgICAm
ZHJyLCAmZHJyX25vc3dhcCwgc2VuZGZzLCBzdHJlYW1fbnYsIHN0cmVhbV9hdmwsCi0JCSAg
ICB0b3BfemZzLCBjbGVhbnVwX2ZkLCBhY3Rpb25faGFuZGxlcCkpOworCQkgICAgZXhwcm9w
cywgbGltaXRkcywgJmRyciwgJmRycl9ub3N3YXAsIHNlbmRmcywgc3RyZWFtX252LAorCQkg
ICAgc3RyZWFtX2F2bCwgdG9wX3pmcywgY2xlYW51cF9mZCwgYWN0aW9uX2hhbmRsZXApKTsK
IAl9IGVsc2UgewogCQlhc3NlcnQoRE1VX0dFVF9TVFJFQU1fSERSVFlQRShkcnJiLT5kcnJf
dmVyc2lvbmluZm8pID09CiAJCSAgICBETVVfQ09NUE9VTkRTVFJFQU0pOwogCQlyZXR1cm4g
KHpmc19yZWNlaXZlX3BhY2thZ2UoaGRsLCBpbmZkLCB0b3NuYXAsIGZsYWdzLAotCQkgICAg
JmRyciwgJnpja3N1bSwgdG9wX3pmcywgY2xlYW51cF9mZCwgYWN0aW9uX2hhbmRsZXApKTsK
KwkJICAgIGV4cHJvcHMsIGxpbWl0ZHMsICZkcnIsICZ6Y2tzdW0sIHRvcF96ZnMsIGNsZWFu
dXBfZmQsCisJCSAgICBhY3Rpb25faGFuZGxlcCkpOwogCX0KIH0KIApAQCAtMzI5MSw3ICsz
NTEwLDcgQEAgemZzX3JlY2VpdmVfaW1wbChsaWJ6ZnNfaGFuZGxlX3QgKmhkbCwgYwogICov
CiBpbnQKIHpmc19yZWNlaXZlKGxpYnpmc19oYW5kbGVfdCAqaGRsLCBjb25zdCBjaGFyICp0
b3NuYXAsIHJlY3ZmbGFnc190ICpmbGFncywKLSAgICBpbnQgaW5mZCwgYXZsX3RyZWVfdCAq
c3RyZWFtX2F2bCkKKyAgICBpbnQgaW5mZCwgbnZsaXN0X3QgKmV4cHJvcHMsIG52bGlzdF90
ICpsaW1pdGRzLCBhdmxfdHJlZV90ICpzdHJlYW1fYXZsKQogewogCWNoYXIgKnRvcF96ZnMg
PSBOVUxMOwogCWludCBlcnI7CkBAIC0zMzAxLDggKzM1MjAsOCBAQCB6ZnNfcmVjZWl2ZShs
aWJ6ZnNfaGFuZGxlX3QgKmhkbCwgY29uc3QgCiAJY2xlYW51cF9mZCA9IG9wZW4oWkZTX0RF
ViwgT19SRFdSfE9fRVhDTCk7CiAJVkVSSUZZKGNsZWFudXBfZmQgPj0gMCk7CiAKLQllcnIg
PSB6ZnNfcmVjZWl2ZV9pbXBsKGhkbCwgdG9zbmFwLCBmbGFncywgaW5mZCwgTlVMTCwgTlVM
TCwKLQkgICAgc3RyZWFtX2F2bCwgJnRvcF96ZnMsIGNsZWFudXBfZmQsICZhY3Rpb25faGFu
ZGxlKTsKKwllcnIgPSB6ZnNfcmVjZWl2ZV9pbXBsKGhkbCwgdG9zbmFwLCBmbGFncywgaW5m
ZCwgZXhwcm9wcywgbGltaXRkcywgTlVMTCwKKwkgICAgTlVMTCwgc3RyZWFtX2F2bCwgJnRv
cF96ZnMsIGNsZWFudXBfZmQsICZhY3Rpb25faGFuZGxlKTsKIAogCVZFUklGWSgwID09IGNs
b3NlKGNsZWFudXBfZmQpKTsKIAotLS0gY2RkbC9jb250cmliL29wZW5zb2xhcmlzL2xpYi9s
aWJ6ZnMvY29tbW9uL2xpYnpmcy5oLm9yaWcJMjAxNC0xMC0xMCAwOTozMTozNi4wMDAwMDAw
MDAgKzAwMDAKKysrIGNkZGwvY29udHJpYi9vcGVuc29sYXJpcy9saWIvbGliemZzL2NvbW1v
bi9saWJ6ZnMuaAkyMDE0LTExLTEzIDE0OjMxOjEwLjQ1NjY2OTQwOCArMDAwMApAQCAtNjY2
LDcgKzY2Niw3IEBAIHR5cGVkZWYgc3RydWN0IHJlY3ZmbGFncyB7CiB9IHJlY3ZmbGFnc190
OwogCiBleHRlcm4gaW50IHpmc19yZWNlaXZlKGxpYnpmc19oYW5kbGVfdCAqLCBjb25zdCBj
aGFyICosIHJlY3ZmbGFnc190ICosCi0gICAgaW50LCBhdmxfdHJlZV90ICopOworICAgIGlu
dCwgbnZsaXN0X3QgKiwgbnZsaXN0X3QgKiwgYXZsX3RyZWVfdCAqKTsKIAogdHlwZWRlZiBl
bnVtIGRpZmZfZmxhZ3MgewogCVpGU19ESUZGX1BBUlNFQUJMRSA9IDB4MSwKLS0tIGNkZGwv
Y29udHJpYi9vcGVuc29sYXJpcy9jbWQvemZzL3pmcy44Lm9yaWcJMjAxNC0xMC0xMCAwOToz
MTozNS4wMDAwMDAwMDAgKzAwMDAKKysrIGNkZGwvY29udHJpYi9vcGVuc29sYXJpcy9jbWQv
emZzL3pmcy44CTIwMTQtMTEtMTMgMTQ6MzQ6MDUuMDUwNjU4MDgzICswMDAwCkBAIC0xOTAs
MTAgKzE5MCwyMiBAQAogLk5tCiAuQ20gcmVjZWl2ZSBOcyB8IE5zIENtIHJlY3YKIC5PcCBG
bCB2bkZ1CisuT3AgRmwgbCBBciBmaWxlc3lzdGVtIE5zIHwgTnMgQXIgdm9sdW1lCisuQXIg
Li4uCisuT3AgRmwgbyBBciBwcm9wZXJ0eSBOcyA9IE5zIEFyIHZhbHVlCisuQXIgLi4uCisu
T3AgRmwgeCBBciBwcm9wZXJ0eQorLkFyIC4uLgogLkFyIGZpbGVzeXN0ZW0gTnMgfCBOcyBB
ciB2b2x1bWUgTnMgfCBOcyBBciBzbmFwc2hvdAogLk5tCiAuQ20gcmVjZWl2ZSBOcyB8IE5z
IENtIHJlY3YKIC5PcCBGbCB2bkZ1CisuT3AgRmwgbCBBciBmaWxlc3lzdGVtIE5zIHwgTnMg
QXIgdm9sdW1lCisuQXIgLi4uCisuT3AgRmwgbyBBciBwcm9wZXJ0eT12YWx1ZQorLkFyIC4u
LgorLk9wIEZsIHggQXIgcHJvcGVydHkKKy5BciAuLi4KIC5PcCBGbCBkIHwgZQogLkFyIGZp
bGVzeXN0ZW0KIC5ObQpAQCAtMjY1MCwxMiArMjY2MiwyNCBAQCBmZWF0dXJlLgogLk5tCiAu
Q20gcmVjZWl2ZSBOcyB8IE5zIENtIHJlY3YKIC5PcCBGbCB2bkZ1CisuT3AgRmwgbCBBciBm
aWxlc3lzdGVtIE5zIHwgTnMgQXIgdm9sdW1lCisuQXIgLi4uCisuT3AgRmwgbyBBciBwcm9w
ZXJ0eSBOcyA9IE5zIEFyIHZhbHVlCisuQXIgLi4uCisuT3AgRmwgeCBBciBwcm9wZXJ0eQor
LkFyIC4uLgogLkFyIGZpbGVzeXN0ZW0gTnMgfCBOcyBBciB2b2x1bWUgTnMgfCBOcyBBciBz
bmFwc2hvdAogLlhjCiAuSXQgWG8KIC5ObQogLkNtIHJlY2VpdmUgTnMgfCBOcyBDbSByZWN2
CiAuT3AgRmwgdm5GdQorLk9wIEZsIGwgQXIgZmlsZXN5c3RlbSBOcyB8IE5zIEFyIHZvbHVt
ZQorLkFyIC4uLgorLk9wIEZsIG8gQXIgcHJvcGVydHkgTnMgPSBOcyBBciB2YWx1ZQorLkFy
IC4uLgorLk9wIEZsIHggQXIgcHJvcGVydHkKKy5BciAuLi4KIC5PcCBGbCBkIHwgZQogLkFy
IGZpbGVzeXN0ZW0KIC5YYwpAQCAtMjc0Nyw2ICsyNzcxLDEwOSBAQCBwZXJmb3JtaW5nIHRo
ZSByZWNlaXZlIG9wZXJhdGlvbi4gSWYgcmVjCiBzdHJlYW0gKGZvciBleGFtcGxlLCBvbmUg
Z2VuZXJhdGVkIGJ5CiAuUXEgTm0gQ20gc2VuZCBGbCBSIEJybyBGbCBpIHwgRmwgSSBCcmMg
KSAsCiBkZXN0cm95IHNuYXBzaG90cyBhbmQgZmlsZSBzeXN0ZW1zIHRoYXQgZG8gbm90IGV4
aXN0IG9uIHRoZSBzZW5kaW5nIHNpZGUuCisuSXQgRmwgbAorTGltaXRzIHRoZSB0aGUgcmVj
ZWl2ZSB0byBvbmx5IHRoZQorLkFyIGZpbGVzeXN0ZW0KK29yCisuQXIgdm9sdW1lCitzcGVj
aWZpZWQuIEFzIG11bHRpcGxlCisuRmwgbAorb3B0aW9ucyBtYXkgYmUgc3BlY2lmaWVkLCB0
aGlzIGNhbiBiZSB1c2VkIHRvIHJlc3RvcmUgc3BlY2lmaWMgZmlsZXN5c3RlbXMgb3IKK3Zv
bHVtZXMgZnJvbSB0aGUgcmVjZWl2ZWQgc3RyZWFtLgorLkl0IEZsIG8gQXIgcHJvcGVydHkg
TnMgPSBOcyBBciB2YWx1ZQorU2V0cyB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGFzIGlmIHRo
ZSBjb21tYW5kIHpmcyBzZXQKKy5BciBwcm9wZXJ0eT12YWx1ZQoraXMgaW52b2tlZCBhdCB0
aGUgc2FtZSB0aW1lIHRoZSByZWNlaXZlZCBkYXRhc2V0IGlzIGNyZWF0ZWQgZnJvbSB0aGUK
K25vbi1pbmNyZW1lbnRhbCBzZW5kIHN0cmVhbSBvciB1cGRhdGVkIGZyb20gdGhlIGluY3Jl
bWVudGFsIHNlbmQgc3RyZWFtLgorLlBwCitBbnkgZWRpdGFibGUgWkZTIHByb3BlcnR5IGNh
biBhbHNvIGJlIHNldCBhdCByZWNlaXZlIHRpbWUuIFNldC1vbmNlIHByb3BlcnRpZXMKK2Jv
dW5kIHRvIHRoZSByZWNlaXZlZCBkYXRhLCBzdWNoIGFzIG5vcm1hbGl6YXRpb24gYW5kIGNh
c2VzZW5zaXRpdml0eSwgY2Fubm90CitiZSBzZXQgYXQgcmVjZWl2ZSB0aW1lIGV2ZW4gd2hl
biB0aGUgZGF0YXNldHMgYXJlIG5ld2x5IGNyZWF0ZWQgYnkgemZzIHJlY2VpdmUuCisuUHAK
K011bHRpcGxlCisuRmwgbworb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkLgorLlBwCitUaGUK
Ky5BciBwcm9wZXJ0eQorb3B0aW9uIG1heSB0YWtlIG9uZSBvZiB0d28gZm9ybXMKKy5CbCAt
YnVsbGV0IC1jb21wYWN0CisuSXQKKy5BciBwcm9wZXJ0eQorLSBHbG9iYWwgcHJvcGVydHkg
YXBwbGllZCB0byBhbGwgc3RyZWFtcy4KKy5JdAorLkFyIHByb3BlcnR5IE5zICMgTnMgT3Ag
QXIgdm9sdW1lIE5zIHwgTnMgQXIgZmlsZXN5c3RlbQorLSBMb2NhbCBwcm9wZXJ0eSBhcHBs
aWVkIHRvIHRoZSBzcGVjaWZpZWQKKy5BciB2b2x1bWUKK29yIAorLkFyIGZpbGVzeXN0ZW0K
K3N0cmVhbXMgb25seS4KKy5FbAorLlBwCitUaGUgbW9zdCBzcGVjaWZpYworLkZsIG8KK29w
dGlvbiB0YWtlcyBwcmVjZWRlbmNlIHNvIGluIHRoZSBjYXNlIHdoZXJlIGJvdGggYSBnbG9i
YWwKKy5BciBwcm9wZXJ0eQorYW5kIGEKKy5BciBwcm9wZXJ0eSBOcyAjIE5zIE9wIEFyIGZp
bGVzeXN0ZW0gTnMgfCBOcyBBciB2b2x1bWUKK2FyZSBzcGVjaWZpZWQgZm9yIHRoZSBzYW1l
CisuQXIgcHJvcGVydHkKK3RoZSB2YWx1ZSBvZiBzYWlkCisuQXIgcHJvcGVydHkKK3dpbGwg
YmUgdGhlIG9uZSB3aGljaCBtb3N0IGNsb3NlbHkgbWF0Y2hlcyB0aGUgZG9tYWluIG9mIHRo
ZQorLkFyIHByb3BlcnR5IC4KKy5QcAorSWYgYm90aAorLkZsIG8KK2FuZCAKKy5GbCB4Cith
cmUgc3BlY2lmaWVkIGZvciB0aGUgc2FtZQorLkFyIHByb3BlcnR5Cit0aGUKKy5GbCB4Citv
cHRpb24gdGFrZXMgcHJlY2VkZW5jZSB1bmxlc3MgdGhlCisuRmwgbworb3B0aW9uIGlzIGEg
YmV0dGVyIGRvbWFpbiBtYXRjaCB0aGFuIHRoZSAKKy5GbCB4CitvcHRpb24uCisuSXQgWG8K
Ky5GbCB4IEFyIHByb3BlcnR5CisuWGMKK0Vuc3VyZXMgdGhhdCB0aGUgZWZmZWN0aXZlIHZh
bHVlIG9mIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgYWZ0ZXIgdGhlIHJlY2VpdmUgaXMKK3Vu
YWZmZWN0ZWQgYnkgdGhlIHZhbHVlIG9mIHRoYXQgcHJvcGVydHkgaW4gdGhlIHNlbmQgc3Ry
ZWFtIChpZiBhbnkpLCBhcyBpZiB0aGUKK3Byb3BlcnR5IGhhZCBiZWVuIGV4Y2x1ZGVkIGZy
b20gdGhlIHNlbmQgc3RyZWFtLgorLlBwCitJZiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlz
IG5vdCBwcmVzZW50IGluIHRoZSBzZW5kIHN0cmVhbSwgdGhpcyBvcHRpb24gZG9lcworbm90
aGluZy4KKy5QcAorSWYgYSByZWNlaXZlZCBwcm9wZXJ0eSBuZWVkcyB0byBiZSBvdmVycmlk
ZGVuLCB0aGUgZWZmZWN0aXZlIHZhbHVlIHdpbGwgYmUKK3NldCBvciBpbmhlcml0ZWQsIGRl
cGVuZGluZyBvbiB0aGUgcHJvcGVydHkuCisuUHAKK0luIHRoZSBjYXNlIG9mIGFuIGluY3Jl
bWVudGFsIHVwZGF0ZSwKKy5GbCB4CitsZWF2ZXMgYW55IGV4aXN0aW5nIGxvY2FsIHNldHRp
bmcgb3IgZXhwbGljaXQgaW5oZXJpdGFuY2UgdW5jaGFuZ2VkIChzaW5jZSB0aGUKK3JlY2Vp
dmVkIHByb3BlcnR5IGlzIGFscmVhZHkgb3ZlcnJpZGRlbikuCisuUHAKK1RoZQorLkFyIHBy
b3BlcnR5CitvcHRpb24gbWF5IHRha2Ugb25lIG9mIHR3byBmb3JtcworLkJsIC1idWxsZXQg
LWNvbXBhY3QKKy5JdAorLkFyIHByb3BlcnR5CistIEdsb2JhbCBwcm9wZXJ0eSBleGNsdWRl
ZCBmcm9tIGFsbCBzdHJlYW1zLgorLkl0CisuQXIgcHJvcGVydHkgTnMgIyBOcyBPcCBBciB2
b2x1bWUgTnMgfCBOcyBBciBmaWxlc3lzdGVtCistIExvY2FsIHByb3BlcnR5IGV4Y2x1ZGVk
IGZyb20gdGhlIHNwZWNpZmllZAorLkFyIHZvbHVtZQorb3IgCisuQXIgZmlsZXN5c3RlbQor
c3RyZWFtcyBvbmx5LgorLkVsCisuUHAKK0FsbAorLkZsIG8KK3Jlc3RyaWN0aW9ucyBhcHBs
eSBlcXVhbGx5IHRvCisuRmwgeC4KIC5FbAogLkl0IFhvCiAuTm0KLS0tIGNkZGwvY29udHJp
Yi9vcGVuc29sYXJpcy9jbWQvemZzL3pmc19tYWluLmMub3JpZwkyMDE0LTEwLTEwIDA5OjMx
OjM1LjAwMDAwMDAwMCArMDAwMAorKysgY2RkbC9jb250cmliL29wZW5zb2xhcmlzL2NtZC96
ZnMvemZzX21haW4uYwkyMDE0LTExLTEzIDE0OjQxOjA3LjE5MTYyOTgwNyArMDAwMApAQCAt
MjYyLDkgKzI2MiwxMCBAQCBnZXRfdXNhZ2UoemZzX2hlbHBfdCBpZHgpCiAJY2FzZSBIRUxQ
X1BST01PVEU6CiAJCXJldHVybiAoZ2V0dGV4dCgiXHRwcm9tb3RlIDxjbG9uZS1maWxlc3lz
dGVtPlxuIikpOwogCWNhc2UgSEVMUF9SRUNFSVZFOgotCQlyZXR1cm4gKGdldHRleHQoIlx0
cmVjZWl2ZXxyZWN2IFstdm5GdV0gPGZpbGVzeXN0ZW18dm9sdW1lfCIKLQkJInNuYXBzaG90
PlxuIgotCQkiXHRyZWNlaXZlfHJlY3YgWy12bkZ1XSBbLWQgfCAtZV0gPGZpbGVzeXN0ZW0+
XG4iKSk7CisJCXJldHVybiAoZ2V0dGV4dCgiXHRyZWNlaXZlfHJlY3YgWy12bkZ1XSBbLW8g
PHByb3BlcnR5Pl0gLi4uICIKKwkJICAgICJbLXggPHByb3BlcnR5Pl0gLi4uIDxmaWxlc3lz
dGVtfHZvbHVtZXxzbmFwc2hvdD5cbiIKKwkJICAgICJcdHJlY2VpdmV8cmVjdiBbLXZuRnVd
IFstZCB8IC1lXSBbLW8gPHByb3BlcnR5Pl0gLi4uICIKKyAgICAgICAgICAgICAgICAgICAg
IlsteCA8cHJvcGVydHk+XSAuLi4gPGZpbGVzeXN0ZW0+XG4iKSk7CiAJY2FzZSBIRUxQX1JF
TkFNRToKIAkJcmV0dXJuIChnZXR0ZXh0KCJcdHJlbmFtZSBbLWZdIDxmaWxlc3lzdGVtfHZv
bHVtZXxzbmFwc2hvdD4gIgogCQkgICAgIjxmaWxlc3lzdGVtfHZvbHVtZXxzbmFwc2hvdD5c
biIKQEAgLTQ5NSw2ICs0OTYsMTkgQEAgdXNhZ2UoYm9vbGVhbl90IHJlcXVlc3RlZCkKIH0K
IAogc3RhdGljIGludAorYWRkX3VuaXF1ZV9vcHRpb24obnZsaXN0X3QgKm9wdHMsIGNvbnN0
IGNoYXIgKnR5cGUsIGNoYXIgKm5hbWUpCit7CisJaWYgKG52bGlzdF9sb29rdXBfc3RyaW5n
KG9wdHMsIG5hbWUsIE5VTEwpID09IDApIHsKKwkJKHZvaWQpIGZwcmludGYoc3RkZXJyLCBn
ZXR0ZXh0KCIlcyBvcHRpb24gJyVzJyAiCisJCSAgICAic3BlY2lmaWVkIG11bHRpcGxlIHRp
bWVzXG4iKSwgdHlwZSwgbmFtZSk7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAobnZsaXN0
X2FkZF9ib29sZWFuKG9wdHMsIG5hbWUpKQorCQlub21lbSgpOworCXJldHVybiAoMCk7Cit9
CisKK3N0YXRpYyBpbnQKIHBhcnNlcHJvcChudmxpc3RfdCAqcHJvcHMsIGNoYXIgKnByb3Bu
YW1lKQogewogCWNoYXIgKnByb3B2YWwsICpzdHJ2YWw7CkBAIC0zODgyLDE4ICszODk2LDI0
IEBAIHpmc19kb19zZW5kKGludCBhcmdjLCBjaGFyICoqYXJndikKIH0KIAogLyoKLSAqIHpm
cyByZWNlaXZlIFstdm5GdV0gWy1kIHwgLWVdIDxmc0BzbmFwPgorICogemZzIHJlY2VpdmUg
Wy12bkZ1XSBbLWQgfCAtZV0gWy1sIDx2b2x1bWV8ZmlsZXN5c3RlbT5dIC4uLgorICogWy1v
IHByb3BlcnR5PXZhbHVlXSAuLi4gWy14IHByb3BlcnR5XSAuLi4gPHZvbHVtZXxmaWxlc3l0
ZW18c25hcHNob3Q+CiAgKgogICogUmVzdG9yZSBhIGJhY2t1cCBzdHJlYW0gZnJvbSBzdGRp
bi4KICAqLwogc3RhdGljIGludAogemZzX2RvX3JlY2VpdmUoaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogeworCW52bGlzdF90ICpleHByb3BzLCAqbGltaXRkczsKIAlpbnQgYywgZXJyOwog
CXJlY3ZmbGFnc190IGZsYWdzID0geyAwIH07CisJaWYgKG52bGlzdF9hbGxvYygmZXhwcm9w
cywgTlZfVU5JUVVFX05BTUUsIDApICE9IDApCisJCW5vbWVtKCk7CisJaWYgKG52bGlzdF9h
bGxvYygmbGltaXRkcywgTlZfVU5JUVVFX05BTUUsIDApICE9IDApCisJCW5vbWVtKCk7CiAK
IAkvKiBjaGVjayBvcHRpb25zICovCi0Jd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3Ys
ICI6ZGVudXZGIikpICE9IC0xKSB7CisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3Ys
ICI6ZGVsOm5vOnV2eDpGIikpICE9IC0xKSB7CiAJCXN3aXRjaCAoYykgewogCQljYXNlICdk
JzoKIAkJCWZsYWdzLmlzcHJlZml4ID0gQl9UUlVFOwpAQCAtMzkwMiwxNSArMzkyMiwzMiBA
QCB6ZnNfZG9fcmVjZWl2ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlmbGFncy5pc3By
ZWZpeCA9IEJfVFJVRTsKIAkJCWZsYWdzLmlzdGFpbCA9IEJfVFJVRTsKIAkJCWJyZWFrOwor
CQljYXNlICdsJzoKKwkJCWlmIChhZGRfdW5pcXVlX29wdGlvbihsaW1pdGRzLCAibGltaXQi
LCBvcHRhcmcpKSB7CisJCQkJZXJyID0gMTsKKwkJCQlnb3RvIHJlY3ZlcnJvcjsKKwkJCX0K
KwkJCWJyZWFrOwogCQljYXNlICduJzoKIAkJCWZsYWdzLmRyeXJ1biA9IEJfVFJVRTsKIAkJ
CWJyZWFrOworCQljYXNlICdvJzoKKwkJCWlmIChwYXJzZXByb3AoZXhwcm9wcywgb3B0YXJn
KSkgeworCQkJCWVyciA9IDE7CisJCQkJZ290byByZWN2ZXJyb3I7CisJCQl9CisJCQlicmVh
azsKIAkJY2FzZSAndSc6CiAJCQlmbGFncy5ub21vdW50ID0gQl9UUlVFOwogCQkJYnJlYWs7
CiAJCWNhc2UgJ3YnOgogCQkJZmxhZ3MudmVyYm9zZSA9IEJfVFJVRTsKIAkJCWJyZWFrOwor
CQljYXNlICd4JzoKKwkJCWlmIChhZGRfdW5pcXVlX29wdGlvbihleHByb3BzLCAiZXhjbHVk
ZSIsIG9wdGFyZykpIHsKKwkJCQllcnIgPSAxOworCQkJCWdvdG8gcmVjdmVycm9yOworCQkJ
fQogCQljYXNlICdGJzoKIAkJCWZsYWdzLmZvcmNlID0gQl9UUlVFOwogCQkJYnJlYWs7CkBA
IC0zOTQ3LDcgKzM5ODQsMTEgQEAgemZzX2RvX3JlY2VpdmUoaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogCQlyZXR1cm4gKDEpOwogCX0KIAotCWVyciA9IHpmc19yZWNlaXZlKGdfemZzLCBh
cmd2WzBdLCAmZmxhZ3MsIFNURElOX0ZJTEVOTywgTlVMTCk7CisJZXJyID0gemZzX3JlY2Vp
dmUoZ196ZnMsIGFyZ3ZbMF0sICZmbGFncywgU1RESU5fRklMRU5PLCBleHByb3BzLCBsaW1p
dGRzLCBOVUxMKTsKKworcmVjdmVycm9yOgorCW52bGlzdF9mcmVlKGV4cHJvcHMpOworCW52
bGlzdF9mcmVlKGxpbWl0ZHMpOwogCiAJcmV0dXJuIChlcnIgIT0gMCk7CiB9Cg==
--------------060909070708000505060205--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?56D040E1.3090000>