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>