From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16077 invoked by alias); 18 Dec 2012 14:27:00 -0000 Received: (qmail 16002 invoked by uid 22791); 18 Dec 2012 14:26:59 -0000 X-SWARE-Spam-Status: No, hits=-3.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP,TW_EG,TW_RV,TW_TR X-Spam-Check-By: sourceware.org Received: from mail-ob0-f181.google.com (HELO mail-ob0-f181.google.com) (209.85.214.181) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 18 Dec 2012 14:26:43 +0000 Received: by mail-ob0-f181.google.com with SMTP id oi10so649286obb.40 for ; Tue, 18 Dec 2012 06:26:42 -0800 (PST) Received: by 10.60.32.147 with SMTP id j19mr1688821oei.68.1355840802380; Tue, 18 Dec 2012 06:26:42 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.84.5 with HTTP; Tue, 18 Dec 2012 06:26:01 -0800 (PST) In-Reply-To: References: <50AC3217.6040608@mentor.com> <878v9k5g46.fsf@fleche.redhat.com> From: Hui Zhu Date: Tue, 18 Dec 2012 14:27:00 -0000 Message-ID: Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave command To: Tom Tromey Cc: Hui Zhu , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=e89a8fb1f50665dbb804d1214978 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-12/txt/msg00630.txt.bz2 --e89a8fb1f50665dbb804d1214978 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 10998 On Fri, Dec 14, 2012 at 7:36 PM, Hui Zhu wrote: > On Fri, Nov 30, 2012 at 4:06 AM, Tom Tromey wrote: >>>>>>> "Hui" == Hui Zhu writes: >> >> Hui> This patch is for the CTF write. >> Hui> It add "-ctf" to tsave command. With this option, tsave can save >> Hui> current trace frame to CTF file format. >> >> Hui> +struct ctf_save_collect_s >> Hui> +{ >> Hui> + struct ctf_save_collect_s *next; >> Hui> + char *str; >> Hui> + char *ctf_str; >> Hui> + int align_size; >> Hui> + struct expression *expr; >> Hui> + struct type *type; >> Hui> + int is_ret; >> Hui> +}; >> >> Like Hafiz said -- comments would be nice. > > I added some comments in the new patches. > >> >> Hui> +static void >> Hui> +ctf_save_fwrite (FILE *fd, const gdb_byte *buf, size_t size) >> Hui> +{ >> Hui> + if (fwrite (buf, size, 1, fd) != 1) >> Hui> + error (_("Unable to write file for saving trace data (%s)"), >> Hui> + safe_strerror (errno)); >> >> Why not use the existing ui_file code? >> >> Then you could remove this function plus several others. >> >> Maybe it is because you need fseek, but that seems like a simple >> addition to ui_file. > > I still not update this part because fseek patch is still not OK. > And after discussion with Pedro, I was really worry about change to > ui_file will make CTF write doesn't have error check. Could you help > me with it? > >> >> Hui> + case TYPE_CODE_ARRAY: >> Hui> + for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; >> Hui> + type = TYPE_TARGET_TYPE (type)) >> Hui> + ; >> >> You probably want some check_typedef calls in there. > > Because typedef will be handle as a type in this part, so this part > doesn't need check_typedef. > >> >> Hui> + ctf_save_type_name_write (tcsp, TYPE_FIELD_TYPE (type, biggest_id)); >> >> Here too. > > I think this part is same with array. > >> >> Hui> + ctf_save_fwrite_format (tcsp->metadata_fd, "%s", TYPE_NAME (type)); >> >> What if TYPE_NAME is NULL? > > Add code handle it like TYPE_CODE_STRUCT. > >> >> Hui> +static void >> Hui> +ctf_save_type_size_write (struct ctf_save_s *tcsp, struct type *type) >> Hui> +{ >> Hui> + if (TYPE_CODE (type) == TYPE_CODE_ARRAY) >> Hui> + { >> Hui> + for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; >> Hui> + type = TYPE_TARGET_TYPE (type)) >> >> check_typedef > > This is function will call itself to post all the define of type to file. > So It don't need check_typedef. > >> >> Hui> + if (TYPE_NAME (type) && (strcmp (TYPE_NAME (type), "uint32_t") == 0 >> Hui> + || strcmp (TYPE_NAME (type), "uint64_t") == 0)) >> Hui> + return; >> >> check_typedef. >> >> Also it seems like this clause should go in the TYPE_CODE_INT case. >> >> Hui> + >> Hui> + switch (TYPE_CODE (type)) >> Hui> + { >> Hui> + case TYPE_CODE_TYPEDEF: >> Hui> + ctf_save_fwrite_format (tcsp->metadata_fd, "typedef "); >> Hui> + ctf_save_var_define_write (tcsp, TYPE_TARGET_TYPE (type), >> >> check_typedef; though if your intent is to peel just a single layer, >> then it is a bit trickier -- I think the best you can do is always call >> it, then use TYPE_TARGET_TYPE if it is non-NULL or the result of >> check_typedef otherwise. > > If use check_typedef, this part will generate the define that > different with the type descriptor of the code. > > For example: > Following is the define in the code: > typedef char test_t1; > typedef test_t1 test_t2; > typedef test_t2 test_t3; > > If use TYPE_TARGET_TYPE, it will generate following metadata: > typedef char test_t1; > typedef test_t1 test_t2; > typedef test_t2 test_t3; > > If use check_typedef, it will generate following metadata: > typedef char test_t1; > typedef char test_t2; > typedef char test_t3; > >> >> Hui> + tcsp->tab = tab; >> [...] >> Hui> + tcsp->tab = old_tab; >> >> No idea if it matters, but if an exception is thrown during the '...' >> code, then the 'tab' field will be left set improperly. > > Please don't worry about this part. > This tab always be set to local value in stack. So even if it is > drop, it will not affect anything. > > For example: > char tab[256]; > const char *old_tab; > > old_tab = tcsp->tab; > snprintf (tab, 256, "%s\t", old_tab); > tcsp->tab = tab; > [...] > tcsp->tab = old_tab; > >> >> Hui> + case TYPE_CODE_PTR: >> Hui> + align_size = TYPE_LENGTH (type); >> Hui> + break; >> >> Surely the alignment rules are ABI dependent. >> I would guess that what you have will work in many cases, but definitely >> not all of them. > > All the type will be handle and record in function > ctf_save_type_check_and_write. > The size align will be handle in this function too. > >> >> Hui> + frame = get_current_frame (); >> Hui> + if (!frame) >> Hui> + error (_("get current frame fail")); >> Hui> + frame = get_prev_frame (frame); >> Hui> + if (!frame) >> Hui> + error (_("get prev frame fail")); >> >> These messages could be improved. >> >> Hui> + warning (_("\ >> Hui> +Not save \"%s\" of tracepoint %d to ctf file because get its value fail: %s"), >> Hui> + str, tps->tp->base.number, e.message); >> >> Likewise. > > Could you help me with this part? :) > >> >> Hui> + /* XXX: no sure about variable_length >> Hui> + and need set is_variable_length if need. */ >> Hui> + collect->align_size = align_size; >> Hui> + if (collect->align_size > tps->align_size) >> Hui> + tps->align_size = collect->align_size; >> >> No new FIXME comments. >> Can you find the answer to this question and either fix the code or drop >> the comment? > > Fixed. > >> >> Hui> + char name[strlen (print_name) + 1]; >> >> I think you need an explicit alloca here. >> Or xmalloc + xfree, which is probably better. > > Fixed. > >> >> Although, this approach just seems weird, since it seems like you >> already have the symbol and you want its value; constructing and parsing >> an expression to get this is very roundabout. >> >> I'm not sure I really understand the goal here; but the parsing approach >> is particularly fragile if you have shadowing. > > Function ctf_save_collect_get will parse the collect string and add > them to struct. > Each tracepoint will call this function just once. > > The code that try to get the value is in function ctf_save: > back_chain = make_cleanup (null_cleanup, NULL); > TRY_CATCH (e, RETURN_MASK_ERROR) > { > val = evaluate_expression (collect->expr); > content = value_contents (val); > } > Could you tell me some better way? > >> >> Hui> + iterate_over_block_local_vars (block, >> Hui> + tsv_save_do_loc_arg_collect, >> Hui> + &cb_data); >> >> Why just iterate over this block and not the enclosing ones as well? >> >> Hmm, a lot of this code looks like code from tracepoint.c. >> I think it would be better to share the code if that is possible. > > I tried to share code with function add_local_symbols. But it is not > a big function and use different way to get block. > >> >> Hui> +static char * >> Hui> +ctf_save_metadata_change_char (struct ctf_save_s *tcsp, char *ctf_str, >> Hui> + int i, const char *str) >> Hui> +{ >> Hui> + char *new; >> Hui> + >> Hui> + new = xmalloc (strlen (ctf_str) + (i ? 1 : 0) + strlen (str) + 1 - 1); >> Hui> + ctf_str[i] = '\0'; >> Hui> + sprintf (new, "%s%s%s_%s", ctf_str, (i ? "_" : ""), str, ctf_str + i + 1); >> >> Just use xstrprintf. > > Fixed. > >> >> Hui> +static void >> Hui> +ctf_save_do_nothing (void *p) >> Hui> +{ >> Hui> +} >> >> Use null_cleanup instead. > > Fixed. > >> >> Hui> + if (collect->expr) >> Hui> + free_current_contents (&collect->expr); >> >> Why free_current_contents here? >> That seems weird. > > If this collect is $_ret, it will not have collect->expr. > Or maybe this collect will be free because when setup this collect get error. > So check it before free it. > >> >> Hui> + char file_name[strlen (dirname) + 1 + strlen (CTF_DATASTREAM_NAME) + 1]; >> >> alloca or malloc. > > Fixed. > >> >> Hui> + sprintf (file_name, "%s/%s", dirname, CTF_METADATA_NAME); >> Hui> + tcs.metadata_fd = fopen (file_name, "w"); >> Hui> + if (!tcs.metadata_fd) >> Hui> + error (_("Unable to open file '%s' for saving trace data (%s)"), >> Hui> + file_name, safe_strerror (errno)); >> Hui> + ctf_save_metadata_header (&tcs); >> Hui> + >> Hui> + sprintf (file_name, "%s/%s", dirname, CTF_DATASTREAM_NAME); >> Hui> + tcs.datastream_fd = fopen (file_name, "w"); >> Hui> + if (!tcs.datastream_fd) >> Hui> + error (_("Unable to open file '%s' for saving trace data (%s)"), >> Hui> + file_name, safe_strerror (errno)); >> >> On error these files will be left partially written. >> Is that intentional? > > What my thought about this part is even if GDB get error when CTF > save, the data before this error is OK. So in clean up function > ctf_save_cleanup, it will not remove this file. And it will write the > data that don't have error, function ctf_save_metadata (tcsp). > >> >> Hui> +extern void ctf_save (char *dirname); >> >> Why not const? >> This applies in a few spots in the patch. > > Fixed. > >> >> Hui> @@ -2465,6 +2466,7 @@ void >> Hui> mi_cmd_trace_save (char *command, char **argv, int argc) >> [...] >> Hui> + if (strcmp (argv[0], "-ctf") == 0) >> Hui> + generate_ctf = 1; >> >> The 'usage' line needs an update. > > Fixed. > >> >> Hui> + if (generate_ctf) >> Hui> + ctf_save (filename); >> Hui> + else >> Hui> + trace_save (filename, target_saves); >> >> I don't understand why CTF isn't just an option to trace_save -- share >> the trace-dependent work, separate out the formatting. >> > > I separate read and write CTF support function because: > CTF format is a complex format. I tried to support all of it but I failed. > Then I changed to use libbabeltrace, it works very good with read CTF. > But it doesn't supply API for CTF write. And I discussion the > developer of libbabeltrace, they said they don't have plan for that. > So I add CTF write function inside GDB with my hand. And because CTF > is design for tracepoint support. So it is really fit with tsave > command. So I add it as an option. > >> Hui> trace_save_command (char *args, int from_tty) >> Hui> { >> Tom > > Thanks for your comments. I post a new version. > > Best, > Hui Hi Tom, I post a patch that updated according to the update of trunk. Thanks, Hui 2012-12-18 Hui Zhu * Makefile.in (REMOTE_OBS): Add ctf.o. (SFILES): Add ctf.c. (HFILES_NO_SRCDIR): Add ctf.h. * ctf.c, ctf.h: New files. * mi/mi-main.c (ctf.h): New include. (mi_cmd_trace_save): Add "-ctf". * tracepoint.c (ctf.h): New include. (collect_pseudocommand): Remove static. (trace_save_command): Add "-ctf". (_initialize_tracepoint): Ditto. * tracepoint.h (collect_pseudocommand): Add extern. --e89a8fb1f50665dbb804d1214978 Content-Type: text/plain; charset=US-ASCII; name="tsave-ctf.txt" Content-Disposition: attachment; filename="tsave-ctf.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hav4jsxd1 Content-length: 50569 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTUwOCw3 ICs1MDgsNyBAQCBTRVJfSEFSRFdJUkUgPSBAU0VSX0hBUkRXSVJFQAogIyBU aGUgYHJlbW90ZScgZGVidWdnaW5nIHRhcmdldCBpcyBzdXBwb3J0ZWQgZm9y IG1vc3QgYXJjaGl0ZWN0dXJlcywKICMgYnV0IG5vdCBhbGwgKGUuZy4gOTYw KQogUkVNT1RFX09CUyA9IHJlbW90ZS5vIGRjYWNoZS5vIHRyYWNlcG9pbnQu byBheC1nZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vIFwKLQly ZW1vdGUtbm90aWYubworCXJlbW90ZS1ub3RpZi5vIGN0Zi5vCiAKICMgVGhp cyBpcyByZW1vdGUtc2ltLm8gaWYgYSBzaW11bGF0b3IgaXMgdG8gYmUgbGlu a2VkIGluLgogU0lNX09CUyA9IEBTSU1fT0JTQApAQCAtNzU0LDcgKzc1NCw3 IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHIK IAlyZWdzZXQuYyBzb2wtdGhyZWFkLmMgd2luZG93cy10ZXJtY2FwLmMgXAog CWNvbW1vbi9nZGJfdmVjcy5jIGNvbW1vbi9jb21tb24tdXRpbHMuYyBjb21t b24veG1sLXV0aWxzLmMgXAogCWNvbW1vbi9wdGlkLmMgY29tbW9uL2J1ZmZl ci5jIGdkYi1kbGZjbi5jIGNvbW1vbi9hZ2VudC5jIFwKLQljb21tb24vZm9y bWF0LmMKKwljb21tb24vZm9ybWF0LmMgY3RmLmMKIAogTElOVEZJTEVTID0g JChTRklMRVMpICQoWVlGSUxFUykgJChDT05GSUdfU1JDUykgaW5pdC5jCiAK QEAgLTgzMCw3ICs4MzAsNyBAQCBnbnVsaWIvaW1wb3J0L3N0ZGRlZi5pbi5o IGdudWxpYi9pbXBvcnQvCiBjb21tb24vY29tbW9uLXV0aWxzLmggY29tbW9u L3htbC11dGlscy5oIGNvbW1vbi9idWZmZXIuaCBjb21tb24vcHRpZC5oIFwK IGNvbW1vbi9mb3JtYXQuaCBjb21tb24vaG9zdC1kZWZzLmggdXRpbHMuaCBj b21tb24vcXVldWUuaCBcCiBjb21tb24vbGludXgtb3NkYXRhLmggZ2RiLWRs ZmNuLmggYXV0by1sb2FkLmggcHJvYmUuaCBzdGFwLXByb2JlLmggXAotZ2Ri X2JmZC5oIHNwYXJjLXJhdmVuc2Nhci10aHJlYWQuaCBwcGMtcmF2ZW5zY2Fy LXRocmVhZC5oCitnZGJfYmZkLmggc3BhcmMtcmF2ZW5zY2FyLXRocmVhZC5o IHBwYy1yYXZlbnNjYXItdGhyZWFkLmggY3RmLmgKIAogIyBIZWFkZXIgZmls ZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGlyIGluIHRoZW0sIG9yIHdoaWNo IGFyZSBpbiBvYmpkaXIuCiAKLS0tIC9kZXYvbnVsbAorKysgYi9jdGYuYwpA QCAtMCwwICsxLDEyMzcgQEAKKy8qIENURiBmb3JtYXQgc3VwcG9ydC4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgi CisjaW5jbHVkZSAiY3RmLmgiCisjaW5jbHVkZSAidHJhY2Vwb2ludC5oIgor I2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj aW5jbHVkZSAiZXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgInN0YWNrLmgiCisK KyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKiBGb2xsb3dpbmcgcGFydCBpcyBm b3IgdHNhdmUuICAqLworCisjZGVmaW5lIENURl9NQUdJQwkJMHhDMUZDMUZD MQorI2RlZmluZSBDVEZfU0FWRV9NQUpPUgkJMQorI2RlZmluZSBDVEZfU0FW RV9NSU5PUgkJOAorCisjZGVmaW5lIENURl9NRVRBREFUQV9OQU1FCSJtZXRh ZGF0YSIKKyNkZWZpbmUgQ1RGX0RBVEFTVFJFQU1fTkFNRQkiZGF0YXN0cmVh bSIKKworI2RlZmluZSBDVEZfUEFDS0VUX1NJWkUJCTQwOTYKKworI2RlZmlu ZSBBTElHTl9TSVpFKHNpemUsIGFsaWduKSBcCisJKCgoKGFsaWduKSArIChz aXplKSAtIDEpICYgKH4oKGFsaWduKSAtIDEpKSkgLSAoc2l6ZSkpCisKK3N0 cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3MKK3sKKyAgc3RydWN0IGN0Zl9zYXZl X2NvbGxlY3RfcyAqbmV4dDsKKyAgY2hhciAqc3RyOworICBjaGFyICpjdGZf c3RyOworICBpbnQgYWxpZ25fc2l6ZTsKKyAgc3RydWN0IGV4cHJlc3Npb24g KmV4cHI7CisgIHN0cnVjdCB0eXBlICp0eXBlOworICBpbnQgaXNfcmV0Owor fTsKKworc3RydWN0IGN0Zl9zYXZlX3RwX3MKK3sKKyAgc3RydWN0IGN0Zl9z YXZlX3RwX3MgKm5leHQ7CisgIHN0cnVjdCB0cmFjZXBvaW50ICp0cDsKKyAg aW50IHN0ZXBwaW5nX2ZyYW1lOworICBzdHJ1Y3QgY3RmX3NhdmVfY29sbGVj dF9zICpjb2xsZWN0OworICBpbnQgYWxpZ25fc2l6ZTsKKyAgaW50IGlzX3Zh cmlhYmxlX2xlbmd0aDsKKyAgaW50IGlzX2Ryb3BwZWQ7Cit9OworCitzdHJ1 Y3QgY3RmX3NhdmVfdHlwZV9zCit7CisgIHN0cnVjdCBjdGZfc2F2ZV90eXBl X3MgKm5leHQ7CisgIHN0cnVjdCB0eXBlICp0eXBlOworfTsKKworc3RydWN0 IGN0Zl9zYXZlX3MKK3sKKyAgRklMRSAqbWV0YWRhdGFfZmQ7CisgIEZJTEUg KmRhdGFzdHJlYW1fZmQ7CisKKyAgLyogVGhpcyBpcyB0aGUgY29udGVudCBz aXplIG9mIGN1cnJlbnQgcGFja2V0LiAgKi8KKyAgc2l6ZV90IGNvbnRlbnRf c2l6ZTsKKworICAvKiBUaGlzIGlzIHRoZSBiZWdpbiBvZmZzZXQgb2YgY3Vy cmVudCBwYWNrZXQuICAqLworICBsb25nIHBhY2tldF9iZWdpbjsKKworICAv KiBJZiB0cnVlLCBuZWVkIGNoZWNrIGlmIGNvbnRlbnRfc2l6ZSBiaWdnZXIg dGhhbiBDVEZfUEFDS0VUX1NJWkUuICAqLworICBpbnQgY2hlY2tfc2l6ZTsK KworICAvKiBUaGlzIGlzIHRoZSBjb250ZW50IHNpemUgb2YgY3VycmVudCBw YWNrZXQgYW5kIGV2ZW50IHRoYXQgaXMKKyAgICAgYmVpbmcgd3JpdHRlbiB0 byBmaWxlLgorICAgICBDaGVjayBzaXplIHVzZSBpdC4gICovCisgIHNpemVf dCBjdXJyZW50X2NvbnRlbnRfc2l6ZTsKKworICAvKiBTYXZlIHRoZSBudW1i ZXIgb2YgdHJhY2UgZnJhbWUgYmVmb3JlIGNhbGwgY3RmX3NhdmUuCisgICAg IFNldCBpdCBiYWNrIHdoZW4gcmV0dXJuIGN0Zl9zYXZlLiAgKi8KKyAgaW50 IG9sZF90cmFjZWZyYW1lX251bTsKKworICAvKiBUcmFjZXBvaW50IGxpc3Qu ICAqLworICBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHA7CisKKyAgLyogVHlw ZSBsaXN0LiAgKi8KKyAgc3RydWN0IGN0Zl9zYXZlX3R5cGVfcyAqdHlwZTsK KworICBjb25zdCBjaGFyICp0YWI7Cit9OworCitzdGF0aWMgdm9pZAorY3Rm X3NhdmVfZndyaXRlIChGSUxFICpmZCwgY29uc3QgZ2RiX2J5dGUgKmJ1Ziwg c2l6ZV90IHNpemUpCit7CisgIGlmIChmd3JpdGUgKGJ1Ziwgc2l6ZSwgMSwg ZmQpICE9IDEpCisgICAgZXJyb3IgKF8oIlVuYWJsZSB0byB3cml0ZSBmaWxl IGZvciBzYXZpbmcgdHJhY2UgZGF0YSAoJXMpIiksCisJICAgc2FmZV9zdHJl cnJvciAoZXJybm8pKTsKK30KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX2Z3 cml0ZV9mb3JtYXRfMSAoRklMRSAqZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwg dmFfbGlzdCBhcmdzKQoreworICBjaGFyICpsaW5lYnVmZmVyOworICBzdHJ1 Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzOworCisgIGxpbmVidWZmZXIgPSB4 c3RydnByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKyAgb2xkX2NsZWFudXBzID0g bWFrZV9jbGVhbnVwICh4ZnJlZSwgbGluZWJ1ZmZlcik7CisgIGN0Zl9zYXZl X2Z3cml0ZSAoZmQsIGxpbmVidWZmZXIsIHN0cmxlbiAobGluZWJ1ZmZlcikp OworICBkb19jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKK30KKworc3RhdGlj IHZvaWQKK2N0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKEZJTEUgKmZkLCBjb25z dCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworCisg IHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICBjdGZfc2F2ZV9md3JpdGVf Zm9ybWF0XzEgKGZkLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3Mp OworfQorCitzdGF0aWMgaW50CitjdGZfc2F2ZV93cml0ZSAoc3RydWN0IGN0 Zl9zYXZlX3MgKnRjc3AsIGNvbnN0IGdkYl9ieXRlICpidWYsIHNpemVfdCBz aXplKQoreworICBpZiAodGNzcC0+Y2hlY2tfc2l6ZSkKKyAgICB7CisgICAg ICBpZiAodGNzcC0+Y3VycmVudF9jb250ZW50X3NpemUgKyBzaXplID4gQ1RG X1BBQ0tFVF9TSVpFKQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisg IGN0Zl9zYXZlX2Z3cml0ZSAodGNzcC0+ZGF0YXN0cmVhbV9mZCwgYnVmLCBz aXplKTsKKworICB0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArPSBzaXpl OworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjdGZfc2F2ZV9m c2VlayAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIGxvbmcgb2Zmc2V0LCBp bnQgd2hlbmNlKQoreworICBpZiAod2hlbmNlID09IFNFRUtfQ1VSICYmIHRj c3AtPmNoZWNrX3NpemUpCisgICAgeworICAgICAgaWYgKHRjc3AtPmN1cnJl bnRfY29udGVudF9zaXplICsgb2Zmc2V0ID4gQ1RGX1BBQ0tFVF9TSVpFKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChmc2VlayAodGNz cC0+ZGF0YXN0cmVhbV9mZCwgb2Zmc2V0LCB3aGVuY2UpKQorICAgIGVycm9y IChfKCJVbmFibGUgdG8gc2VlayBmaWxlIGZvciBzYXZpbmcgdHJhY2UgZGF0 YSAoJXMpIiksCisJICAgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKKworICBp ZiAod2hlbmNlID09IFNFRUtfQ1VSKQorICAgIHRjc3AtPmN1cnJlbnRfY29u dGVudF9zaXplICs9IG9mZnNldDsKKworICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludAorY3RmX3NhdmVfYWxpZ25fd3JpdGUgKHN0cnVjdCBjdGZfc2F2 ZV9zICp0Y3NwLCBjb25zdCBnZGJfYnl0ZSAqYnVmLAorCQkgICAgICBzaXpl X3Qgc2l6ZSwgc2l6ZV90IGFsaWduX3NpemUpCit7CisgIGlmIChjdGZfc2F2 ZV9mc2VlayAodGNzcCwKKwkJICAgICAgQUxJR05fU0laRSh0Y3NwLT5jdXJy ZW50X2NvbnRlbnRfc2l6ZSwgYWxpZ25fc2l6ZSksCisJCSAgICAgIFNFRUtf Q1VSKSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKGN0Zl9zYXZlX3dyaXRl ICh0Y3NwLCBidWYsIHNpemUpKQorICAgIHJldHVybiAtMTsKKworICByZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3RmX3NhdmVfdHlwZV9kZWZpbmVf d3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLAorCQkJCQlzdHJ1Y3Qg dHlwZSAqdHlwZSk7CisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV90eXBlX25h bWVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgdHlw ZSAqdHlwZSkKK3sKKyAgc3dpdGNoIChUWVBFX0NPREUgKHR5cGUpKQorICAg IHsKKyAgICBjYXNlIFRZUEVfQ09ERV9BUlJBWToKKyAgICAgIGZvciAoOyBU WVBFX0NPREUgKHR5cGUpID09IFRZUEVfQ09ERV9BUlJBWTsKKwkgICB0eXBl ID0gVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkpCisJOworICAgICAgaWYgKFRZ UEVfTkFNRSAodHlwZSkpCisgICAgICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiJXMiLCBUWVBFX05BTUUgKHR5cGUp KTsKKyAgICAgIGVsc2UKKwljdGZfc2F2ZV90eXBlX2RlZmluZV93cml0ZSAo dGNzcCwgdHlwZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgVFlQRV9D T0RFX1BUUjoKKyAgICAgIGlmIChUWVBFX0xFTkdUSCAodHlwZSkgPT0gOCkK KwljdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwg InVpbnQ2NF90Iik7CisgICAgICBlbHNlCisJY3RmX3NhdmVfZndyaXRlX2Zv cm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJ1aW50MzJfdCIpOworICAgICAg YnJlYWs7CisKKyAgICBjYXNlIFRZUEVfQ09ERV9TVFJVQ1Q6CisgICAgY2Fz ZSBUWVBFX0NPREVfRU5VTToKKyAgICAgIGlmIChUWVBFX1RBR19OQU1FICh0 eXBlKSkKKyAgICAgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+ bWV0YWRhdGFfZmQsICIlcyAlcyIsCisJCQkJVFlQRV9DT0RFICh0eXBlKSA9 PSBUWVBFX0NPREVfU1RSVUNUID8KKwkJCQkic3RydWN0IiA6ICJlbnVtIiwK KwkJCQlUWVBFX1RBR19OQU1FICh0eXBlKSk7CisgICAgICBlbHNlCisJY3Rm X3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUgKHRjc3AsIHR5cGUpOworICAgICAg YnJlYWs7CisKKyAgICBjYXNlIFRZUEVfQ09ERV9VTklPTjoKKyAgICAgIHsK KwlpbnQgaSwgYmlnZ2VzdF9pZCwgYmlnZ2VzdF9zaXplID0gMDsKKworCWZv ciAoaSA9IDA7IGkgPCBUWVBFX05GSUVMRFMgKHR5cGUpOyArK2kpCisJICB7 CisJICAgIGlmIChiaWdnZXN0X3NpemUgPCBUWVBFX0xFTkdUSCAoVFlQRV9G SUVMRF9UWVBFICh0eXBlLCBpKSkpCisJICAgICAgeworCQliaWdnZXN0X3Np emUgPSBUWVBFX0xFTkdUSCAoVFlQRV9GSUVMRF9UWVBFICh0eXBlLCBpKSk7 CisJCWJpZ2dlc3RfaWQgPSBpOworCSAgICAgIH0KKwkgIH0KKwljdGZfc2F2 ZV90eXBlX25hbWVfd3JpdGUgKHRjc3AsIFRZUEVfRklFTERfVFlQRSAodHlw ZSwgYmlnZ2VzdF9pZCkpOworCWJyZWFrOworICAgICAgfQorCisgICAgZGVm YXVsdDoKKyAgICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCAiJXMiLCBUWVBFX05BTUUgKHR5cGUpKTsKKyAgICAgIGJy ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5cGVf c2l6ZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCB0 eXBlICp0eXBlKQoreworICBpZiAoVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBF X0NPREVfQVJSQVkpCisgICAgeworICAgICAgZm9yICg7IFRZUEVfQ09ERSAo dHlwZSkgPT0gVFlQRV9DT0RFX0FSUkFZOworCSAgIHR5cGUgPSBUWVBFX1RB UkdFVF9UWVBFICh0eXBlKSkKKwljdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0 Y3NwLT5tZXRhZGF0YV9mZCwgIlslZF0iLAorCQkJCVRZUEVfTEVOR1RIICh0 eXBlKSAvCisJCQkJVFlQRV9MRU5HVEggKFRZUEVfVEFSR0VUX1RZUEUgKHR5 cGUpKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfdmFy X2RlZmluZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVj dCB0eXBlICp0eXBlLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAg Y3RmX3NhdmVfdHlwZV9uYW1lX3dyaXRlICh0Y3NwLCB0eXBlKTsKKyAgY3Rm X3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICIgJXMi LCBuYW1lKTsKKyAgY3RmX3NhdmVfdHlwZV9zaXplX3dyaXRlICh0Y3NwLCB0 eXBlKTsKKyAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRh dGFfZmQsICI7XG4iKTsKK30KKworLyogV3JpdGUgVFlQRSB0byBUQ1NQLT5t ZXRhZGF0YV9mZC4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV90eXBl X2RlZmluZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVj dCB0eXBlICp0eXBlKQoreworICBzdHJ1Y3QgY3RmX3NhdmVfdHlwZV9zICp0 OworCisgIGZvciAodCA9IHRjc3AtPnR5cGU7IHQ7IHQgPSB0LT5uZXh0KQor ICAgIHsKKyAgICAgIGlmICh0LT50eXBlID09IHR5cGUpCisJcmV0dXJuOwor ICAgIH0KKworICB0ID0gKHN0cnVjdCBjdGZfc2F2ZV90eXBlX3MgKikgeGNh bGxvYyAoMSwgc2l6ZW9mICgqdCkpOworICB0LT50eXBlID0gdHlwZTsKKwor ICB0LT5uZXh0ID0gdGNzcC0+dHlwZTsKKyAgdGNzcC0+dHlwZSA9IHQ7CisK KyAgLyogSWdub3JlIHR5cGUgdWludDMyX3QgYW5kIHVpbnQ2NF90IGJlY2F1 c2UgdGhleSBoYXZlIHdyaXR0ZW4KKyAgICAgaW4gZnVuY3Rpb24gY3RmX3Nh dmVfbWV0YWRhdGFfaGVhZGVyLiAgKi8KKyAgaWYgKFRZUEVfTkFNRSAodHlw ZSkgJiYgKHN0cmNtcCAoVFlQRV9OQU1FICh0eXBlKSwgInVpbnQzMl90Iikg PT0gMAorCQkJICAgfHwgc3RyY21wIChUWVBFX05BTUUgKHR5cGUpLCAidWlu dDY0X3QiKSA9PSAwKSkKKyAgICByZXR1cm47CisKKyAgc3dpdGNoIChUWVBF X0NPREUgKHR5cGUpKQorICAgIHsKKyAgICAgIGNhc2UgVFlQRV9DT0RFX1RZ UEVERUY6CisJY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRh dGFfZmQsICJ0eXBlZGVmICIpOworCWN0Zl9zYXZlX3Zhcl9kZWZpbmVfd3Jp dGUgKHRjc3AsIFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpLAorCQkJCSAgIFRZ UEVfTkFNRSAodHlwZSkpOworCWJyZWFrOworCisgICAgICBjYXNlIFRZUEVf Q09ERV9JTlQ6CisJY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0 YWRhdGFfZmQsICJcCit0eXBlYWxpYXMgaW50ZWdlciB7IHNpemUgPSAlZDsg YWxpZ24gPSAlZDsgc2lnbmVkID0gJXM7IH0gOj0gJXM7XG4iLAorCQkJCVRZ UEVfTEVOR1RIKHR5cGUpICogVEFSR0VUX0NIQVJfQklULAorCQkJCVRZUEVf TEVOR1RIKHR5cGUpICogVEFSR0VUX0NIQVJfQklULAorCQkJCSFUWVBFX1VO U0lHTkVEICh0eXBlKSA/ICJ0cnVlIiA6ICJmYWxzZSIsCisJCQkJVFlQRV9O QU1FICh0eXBlKSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgVFlQRV9DT0RF X1NUUlVDVDoKKyAgICAgIGNhc2UgVFlQRV9DT0RFX0VOVU06CisgICAgICAg IHsKKwkgIGludCBpOworCSAgY2hhciB0YWJbMjU2XTsKKwkgIGNvbnN0IGNo YXIgKm9sZF90YWI7CisKKwkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRj c3AtPm1ldGFkYXRhX2ZkLCAiJXMgJXMge1xuIiwKKwkJCQkgIFRZUEVfQ09E RSAodHlwZSkgPT0gVFlQRV9DT0RFX1NUUlVDVCA/CisJCQkJICAic3RydWN0 IiA6ICJlbnVtIiwKKwkJCQkgIFRZUEVfVEFHX05BTUUgKHR5cGUpID8gVFlQ RV9UQUdfTkFNRSAodHlwZSkKKwkJCQkJCSAgICAgICA6ICIiKTsKKworCSAg b2xkX3RhYiA9IHRjc3AtPnRhYjsKKwkgIHNucHJpbnRmICh0YWIsIDI1Niwg IiVzXHQiLCBvbGRfdGFiKTsKKwkgIHRjc3AtPnRhYiA9IHRhYjsKKwkgIGZv ciAoaSA9IDA7IGkgPCBUWVBFX05GSUVMRFMgKHR5cGUpOyArK2kpCisJICAg IHsKKwkgICAgICBpZiAoVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NPREVf U1RSVUNUKQorCSAgICAgICAgeworCQkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCB0Y3NwLT50YWIpOworCQkgIGN0Zl9z YXZlX3Zhcl9kZWZpbmVfd3JpdGUgKHRjc3AsIFRZUEVfRklFTERfVFlQRSAo dHlwZSwgaSksCisJCQkJCSAgICAgVFlQRV9GSUVMRF9OQU1FICh0eXBlLCBp KSk7CisJCX0KKwkgICAgICBlbHNlCisJCWN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiJXMlcyA9ICVzLFxuIiwKKwkJCQkJ dGNzcC0+dGFiLCBUWVBFX0ZJRUxEX05BTUUgKHR5cGUsIGkpLAorCQkJCQlw bG9uZ2VzdCAoVFlQRV9GSUVMRF9FTlVNVkFMICh0eXBlLCBpKSkpOworCSAg ICB9CisJICB0Y3NwLT50YWIgPSBvbGRfdGFiOworCSAgY3RmX3NhdmVfZndy aXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICIlc30iLCB0Y3NwLT50 YWIpOworCSAgaWYgKFRZUEVfVEFHX05BTUUgKHR5cGUpKQorCSAgICBjdGZf c2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIjtcbiIp OworCSAgYnJlYWs7CisJfQorICAgIH0KK30KKworLyogQ2hlY2sgaWYgdGhp cyB0eXBlIGlzIHN1cHBvcnQgYnkgR0RCLgorICAgUmV0dXJuIHRoZSBhbGln biBzaXplLiAgKi8KKworc3RhdGljIGludAorY3RmX3NhdmVfdHlwZV9jaGVj a19hbmRfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3Qg dHlwZSAqdHlwZSkKK3sKKyAgaW50IGFsaWduX3NpemUgPSAwOworCisgIHN3 aXRjaCAoVFlQRV9DT0RFICh0eXBlKSkKKyAgICB7CisgICAgICBjYXNlIFRZ UEVfQ09ERV9UWVBFREVGOgorCWFsaWduX3NpemUgPSBjdGZfc2F2ZV90eXBl X2NoZWNrX2FuZF93cml0ZSAodGNzcCwKKwkJCQkJCSAgICBUWVBFX1RBUkdF VF9UWVBFICh0eXBlKSk7CisJaWYgKGFsaWduX3NpemUgPCAwKQorCSAgcmV0 dXJuIGFsaWduX3NpemU7CisJY3RmX3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUg KHRjc3AsIHR5cGUpOworCWJyZWFrOworCisgICAgICBjYXNlIFRZUEVfQ09E RV9BUlJBWToKKwlhbGlnbl9zaXplID0gY3RmX3NhdmVfdHlwZV9jaGVja19h bmRfd3JpdGUgKHRjc3AsCisJCQkJCQkgICAgVFlQRV9UQVJHRVRfVFlQRSAo dHlwZSkpOworCWlmIChhbGlnbl9zaXplIDwgMCkKKwkgIHJldHVybiBhbGln bl9zaXplOworCWJyZWFrOworCisgICAgICBjYXNlIFRZUEVfQ09ERV9JTlQ6 CisJY3RmX3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUgKHRjc3AsIHR5cGUpOwor CWFsaWduX3NpemUgPSBUWVBFX0xFTkdUSCAodHlwZSk7CisJYnJlYWs7CisK KyAgICAgIGNhc2UgVFlQRV9DT0RFX1BUUjoKKwlhbGlnbl9zaXplID0gVFlQ RV9MRU5HVEggKHR5cGUpOworCWJyZWFrOworCisgICAgICBjYXNlIFRZUEVf Q09ERV9TVFJVQ1Q6CisgICAgICAgIHsKKwkgIGludCBpLCBzX2FsaWduX3Np emU7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBUWVBFX05GSUVMRFMgKHR5cGUp OyArK2kpCisJICAgIHsKKwkgICAgICBzX2FsaWduX3NpemUKKwkJICA9IGN0 Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlICh0Y3NwLAorCQkJCQkJICAg VFlQRV9GSUVMRF9UWVBFICh0eXBlLCBpKSk7CisJICAgICAgaWYgKHNfYWxp Z25fc2l6ZSA8IDApCisJCXJldHVybiBzX2FsaWduX3NpemU7CisKKwkgICAg ICBpZiAoYWxpZ25fc2l6ZSA8IHNfYWxpZ25fc2l6ZSkKKwkJYWxpZ25fc2l6 ZSA9IHNfYWxpZ25fc2l6ZTsKKwkgICAgfQorCSAgaWYgKFRZUEVfVEFHX05B TUUgKHR5cGUpKQorCSAgICBjdGZfc2F2ZV90eXBlX2RlZmluZV93cml0ZSAo dGNzcCwgdHlwZSk7CisJICBicmVhazsKKwl9CisKKyAgICAgIGNhc2UgVFlQ RV9DT0RFX0VOVU06CisJYWxpZ25fc2l6ZSA9IFRZUEVfTEVOR1RIICh0eXBl KTsKKwlpZiAoVFlQRV9UQUdfTkFNRSAodHlwZSkpCisJICBjdGZfc2F2ZV90 eXBlX2RlZmluZV93cml0ZSAodGNzcCwgdHlwZSk7CisJYnJlYWs7CisKKyAg ICAgIGNhc2UgVFlQRV9DT0RFX1VOSU9OOgorICAgICAgICB7CisJICBpbnQg aSwgc19hbGlnbl9zaXplOworCisJICBmb3IgKGkgPSAwOyBpIDwgVFlQRV9O RklFTERTICh0eXBlKTsgKytpKQorCSAgICB7CisJICAgICAgc19hbGlnbl9z aXplCisJCSAgPSBjdGZfc2F2ZV90eXBlX2NoZWNrX2FuZF93cml0ZSAodGNz cCwKKwkJCQkJCSAgIFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSkpOworCSAg ICAgIGlmIChzX2FsaWduX3NpemUgPCAwKQorCQlyZXR1cm4gc19hbGlnbl9z aXplOworCisJICAgICAgaWYgKGFsaWduX3NpemUgPCBzX2FsaWduX3NpemUp CisJCWFsaWduX3NpemUgPSBzX2FsaWduX3NpemU7CisJICAgIH0KKwkgIGJy ZWFrOworCX0KKworICAgICAgZGVmYXVsdDoKKwlhbGlnbl9zaXplID0gLTE7 CisJYnJlYWs7CisgICAgfQorCisgIHJldHVybiBhbGlnbl9zaXplOworfQor CitzdGF0aWMgdm9pZAorY3RmX3NhdmVfY29sbGVjdF9nZXRfMSAoc3RydWN0 IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0cHMs CisJCQljaGFyICpzdHIpCit7CisgIHN0cnVjdCBleHByZXNzaW9uICpleHBy OworICBzdHJ1Y3QgY3RmX3NhdmVfY29sbGVjdF9zICpjb2xsZWN0OworICB2 b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBlOworICBzdHJ1Y3QgdHlw ZSAqdHlwZTsKKyAgaW50IGlzX3JldCA9IDA7CisgIGludCBhbGlnbl9zaXpl OworCisgIC8qIENoZWNrIGlmIGFjdGlvbl9leHAgaXMgYWxyZWFkeSBleGlz dCBpbiB0cHMtPmNvbGxlY3QuICAqLworICBmb3IgKGNvbGxlY3QgPSB0cHMt PmNvbGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5uZXh0KQor ICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKGNvbGxlY3QtPnN0ciwgc3RyKSA9 PSAwKQorCXJldHVybjsKKyAgICB9CisKKyAgaWYgKDAgPT0gc3RybmNhc2Vj bXAgKHN0ciwgIiRfcmV0IiwgNSkpCisgICAgaXNfcmV0ID0gMTsKKworICBU UllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9SKQorICAgIHsKKyAgICAg IGlmIChpc19yZXQpCisgICAgICAgIHsKKwkgIENPUkVfQUREUiBwYzsKKwkg IHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKKworCSAgZnJhbWUgPSBnZXRf Y3VycmVudF9mcmFtZSAoKTsKKwkgIGlmICghZnJhbWUpCisJICAgIGVycm9y IChfKCJnZXQgY3VycmVudCBmcmFtZSBmYWlsIikpOworCSAgZnJhbWUgPSBn ZXRfcHJldl9mcmFtZSAoZnJhbWUpOworCSAgaWYgKCFmcmFtZSkKKwkgICAg ZXJyb3IgKF8oImdldCBwcmV2IGZyYW1lIGZhaWwiKSk7CisKKwkgIGlmICgh Z2V0X2ZyYW1lX3BjX2lmX2F2YWlsYWJsZSAoZnJhbWUsICZwYykpCisJICAg IGVycm9yIChfKCJQQyB1bmF2YWlsYWJsZSIpKTsKKwl9CisgICAgICBlbHNl CisgICAgICAgIHsKKwkgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2hhaW47CisJ ICBzdHJ1Y3QgdmFsdWUgKnZhbDsKKworCSAgZXhwciA9IHBhcnNlX2V4cHJl c3Npb24gKHN0cik7CisJICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAgKGZy ZWVfY3VycmVudF9jb250ZW50cywgJmV4cHIpOworCSAgdHlwZSA9IHZhbHVl X3R5cGUgKGV2YWx1YXRlX2V4cHJlc3Npb24gKGV4cHIpKTsKKwkgIGRvX2Ns ZWFudXBzIChvbGRfY2hhaW4pOworCX0KKyAgICB9CisgIGlmIChlLnJlYXNv biA8IDApCisgICAgeworICAgICAgd2FybmluZyAoXygiXAorbm90IHNhdmUg XCIlc1wiIG9mIHRyYWNlcG9pbnQgJWQgdG8gY3RmIGZpbGUgYmVjYXVzZSBn ZXQgaXRzIHZhbHVlIGZhaWw6ICVzIiksCisJICAgICAgIHN0ciwgdHBzLT50 cC0+YmFzZS5udW1iZXIsIGUubWVzc2FnZSk7CisgICAgICByZXR1cm47Cisg ICAgfQorCisgIGlmIChpc19yZXQpCisgICAgYWxpZ25fc2l6ZSA9IDg7Cisg IGVsc2UKKyAgICB7CisgICAgICBhbGlnbl9zaXplID0gY3RmX3NhdmVfdHlw ZV9jaGVja19hbmRfd3JpdGUgKHRjc3AsIHR5cGUpOworICAgICAgaWYgKGFs aWduX3NpemUgPCAwKQorCXsKKwkgIHdhcm5pbmcgKF8oIlwKK25vdCBzYXZl IFwiJXNcIiBvZiB0cmFjZXBvaW50ICVkIHRvIGN0ZiBmaWxlIGJlY2F1c2Ug aXRzIHR5cGUgaXMgbm90IHN1cHBvcnQuIiksCisJCSAgIHN0ciwgdHBzLT50 cC0+YmFzZS5udW1iZXIpOworCSAgcmV0dXJuOworCX0KKyAgICB9CisKKyAg Y29sbGVjdCA9IChzdHJ1Y3QgY3RmX3NhdmVfY29sbGVjdF9zICopIHhjYWxs b2MgKDEsIHNpemVvZiAoKmNvbGxlY3QpKTsKKworICAvKiBBZGQgdHAgdG8g dGhlIGxpc3QuICAqLworICBjb2xsZWN0LT5uZXh0ID0gdHBzLT5jb2xsZWN0 OworICB0cHMtPmNvbGxlY3QgPSBjb2xsZWN0OworCisgIGNvbGxlY3QtPnN0 ciA9IHhzdHJkdXAgKHN0cik7CisgIGNvbGxlY3QtPmlzX3JldCA9IGlzX3Jl dDsKKworICBpZiAoIWlzX3JldCkKKyAgICB7CisgICAgICBjb2xsZWN0LT50 eXBlID0gdHlwZTsKKworICAgICAgY29sbGVjdC0+YWxpZ25fc2l6ZSA9IGFs aWduX3NpemU7CisgICAgICBpZiAoY29sbGVjdC0+YWxpZ25fc2l6ZSA+IHRw cy0+YWxpZ25fc2l6ZSkKKyAgICAgICAgdHBzLT5hbGlnbl9zaXplID0gY29s bGVjdC0+YWxpZ25fc2l6ZTsKKworICAgICAgY29sbGVjdC0+ZXhwciA9IHBh cnNlX2V4cHJlc3Npb24gKHN0cik7CisgICAgfQorfQorCitzdHJ1Y3QgbG9j X2FyZ19jb2xsZWN0X2RhdGEKK3sKKyAgc3RydWN0IGN0Zl9zYXZlX3MgKnRj c3A7CisgIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0cHM7Cit9OworCitzdGF0 aWMgdm9pZAordHN2X3NhdmVfZG9fbG9jX2FyZ19jb2xsZWN0IChjb25zdCBj aGFyICpwcmludF9uYW1lLAorCQkJICAgICBzdHJ1Y3Qgc3ltYm9sICpzeW0s CisJCQkgICAgIHZvaWQgKmNiX2RhdGEpCit7CisgIHN0cnVjdCBsb2NfYXJn X2NvbGxlY3RfZGF0YSAqcCA9IGNiX2RhdGE7CisgIGNoYXIgKm5hbWU7CisK KyAgbmFtZSA9IGFsbG9jYSAoc3RybGVuIChwcmludF9uYW1lKSArIDEpOwor ICBzdHJjcHkgKG5hbWUsIHByaW50X25hbWUpOworICBjdGZfc2F2ZV9jb2xs ZWN0X2dldF8xIChwLT50Y3NwLCBwLT50cHMsIG5hbWUpOworfQorCisvKiB3 b3JrZXIgZnVuY3Rpb24gKGNsZWFudXApICovCitzdGF0aWMgdm9pZAorcmVw bGFjZV9jb21tYSAodm9pZCAqZGF0YSkKK3sKKyAgY2hhciAqY29tbWEgPSBk YXRhOworICAqY29tbWEgPSAnLCc7Cit9CisKKy8qIEdldCB2YXIgdGhhdCB3 YW50IHRvIGNvbGxlY3QgZnJvbSBTVFIgYW5kIHB1dCB0aGVtIHRvIFRQUy0+ Y29sbGVjdC4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV9jb2xsZWN0 X2dldCAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCBjdGZfc2F2 ZV90cF9zICp0cHMsCisJCSAgICAgIGNoYXIgKnN0cikKK3sKKyAgY2hhciAq YWN0aW9uX2V4cCA9IHN0ciwgKm5leHRfY29tbWE7CisgIHN0cnVjdCBjbGVh bnVwICpvbGRfY2hhaW47CisKKyAgZG8KKyAgICB7CisgICAgICBpZiAoKmFj dGlvbl9leHAgPT0gJywnKQorCWFjdGlvbl9leHArKzsKKyAgICAgIHdoaWxl IChpc3NwYWNlICgoaW50KSAqYWN0aW9uX2V4cCkpCisJYWN0aW9uX2V4cCsr OworCisgICAgICBuZXh0X2NvbW1hID0gc3RyY2hyIChhY3Rpb25fZXhwLCAn LCcpOworICAgICAgaWYgKG5leHRfY29tbWEpCisJeworCSAgb2xkX2NoYWlu ID0gbWFrZV9jbGVhbnVwIChyZXBsYWNlX2NvbW1hLCBuZXh0X2NvbW1hKTsK KwkgICpuZXh0X2NvbW1hID0gJ1wwJzsKKwl9CisKKyAgICAgIGlmICgwID09 IHN0cm5jYXNlY21wIChhY3Rpb25fZXhwLCAiJHJlZyIsIDQpKQorICAgICAg ICB7CisJICBpbnQgaTsKKwkgIHN0cnVjdCBnZGJhcmNoICphcmNoID0gdHBz LT50cC0+YmFzZS5sb2MtPmdkYmFyY2g7CisKKwkgIGZvciAoaSA9IDA7IGkg PCBnZGJhcmNoX251bV9yZWdzIChhcmNoKTsgaSsrKQorCSAgICB7CisJICAg ICAgY29uc3QgY2hhciAqbmFtZSA9IGdkYmFyY2hfcmVnaXN0ZXJfbmFtZSAo YXJjaCwgaSk7CisJICAgICAgaW50IG5hbWVfc2l6ZSA9IHN0cmxlbiAobmFt ZSk7CisJICAgICAgY2hhciByZWduYW1lWzEgKyBuYW1lX3NpemUgKyAxXTsK KworCSAgICAgIGlmIChuYW1lX3NpemUgPT0gMCkKKwkJY29udGludWU7CisK KwkgICAgICBzcHJpbnRmIChyZWduYW1lLCAiJCVzIiwgbmFtZSk7CisKKwkg ICAgICBjdGZfc2F2ZV9jb2xsZWN0X2dldF8xICh0Y3NwLCB0cHMsIHJlZ25h bWUpOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoMCA9PSBzdHJuY2Fz ZWNtcCAoYWN0aW9uX2V4cCwgIiRsb2MiLCA0KQorCSAgICAgICB8fCAwID09 IHN0cm5jYXNlY21wIChhY3Rpb25fZXhwLCAiJGFyZyIsIDQpKQorCXsKKwkg IENPUkVfQUREUiBwYzsKKwkgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsK KwkgIHN0cnVjdCBsb2NfYXJnX2NvbGxlY3RfZGF0YSBjYl9kYXRhOworCSAg dm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZTsKKworCSAgY2JfZGF0 YS50Y3NwID0gdGNzcDsKKwkgIGNiX2RhdGEudHBzID0gdHBzOworCisJICBU UllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9SKQorCSAgICB7CisJICAg ICAgZnJhbWUgPSBnZXRfc2VsZWN0ZWRfZnJhbWUgKF8oIk5vIGZyYW1lIHNl bGVjdGVkLiIpKTsKKwkgICAgICBpZiAoIWdldF9mcmFtZV9wY19pZl9hdmFp bGFibGUgKGZyYW1lLCAmcGMpKQorCSAgICAgICAgZXJyb3IgKF8oIlBDIHVu YXZhaWxhYmxlIikpOworCSAgICB9CisJICBpZiAoZS5yZWFzb24gPCAwKQor CSAgICB7CisJICAgICAgd2FybmluZyAoXygiXAorbm90IHNhdmUgXCIlc1wi IG9mIHRyYWNlcG9pbnQgJWQgdG8gY3RmIGZpbGUgYmVjYXVzZSBnZXQgaXRz IHZhbHVlIGZhaWw6ICVzIiksCisJCSAgICAgICBhY3Rpb25fZXhwLCB0cHMt PnRwLT5iYXNlLm51bWJlciwgZS5tZXNzYWdlKTsKKwkgICAgICByZXR1cm47 CisJICAgIH0KKwkgIGlmICgwID09IHN0cm5jYXNlY21wIChhY3Rpb25fZXhw LCAiJGxvYyIsIDQpKQorCSAgICB7CisJICAgICAgc3RydWN0IGJsb2NrICpi bG9jazsKKworCSAgICAgIGJsb2NrID0gZ2V0X2ZyYW1lX2Jsb2NrIChmcmFt ZSwgMCk7CisJICAgICAgaWYgKGJsb2NrID09IDApCisJCXsKKwkJICB3YXJu aW5nIChfKCJcCitOb3Qgc2F2ZSBcIiVzXCIgb2YgdHJhY2Vwb2ludCAlZCB0 byBjdGYgZmlsZSBiZWNhdXNlIG5vIHN5bWJvbCB0YWJsZSBpbmZvIGF2YWls YWJsZS4iKSwKKwkJCSAgIGFjdGlvbl9leHAsIHRwcy0+dHAtPmJhc2UubnVt YmVyKTsKKwkJICBjb250aW51ZTsKKwkJfQorCisJICAgICAgaXRlcmF0ZV9v dmVyX2Jsb2NrX2xvY2FsX3ZhcnMgKGJsb2NrLAorCQkJCQkgICAgIHRzdl9z YXZlX2RvX2xvY19hcmdfY29sbGVjdCwKKwkJCQkJICAgICAmY2JfZGF0YSk7 CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHN0cnVjdCBzeW1i b2wgKmZ1bmM7CisKKwkgICAgICBmdW5jID0gZ2V0X2ZyYW1lX2Z1bmN0aW9u IChmcmFtZSk7CisJICAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKwkJeworCQkg IHdhcm5pbmcgKF8oIlwKK25vdCBzYXZlIFwiJXNcIiBvZiB0cmFjZXBvaW50 ICVkIHRvIGN0ZiBmaWxlIGJlY2F1c2Ugbm8gc3ltYm9sIHRhYmxlIGluZm8g YXZhaWxhYmxlLiIpLAorCQkJICAgYWN0aW9uX2V4cCwgdHBzLT50cC0+YmFz ZS5udW1iZXIpOworCQkgIGNvbnRpbnVlOworCQl9CisKKwkgICAgICBpdGVy YXRlX292ZXJfYmxvY2tfYXJnX3ZhcnMgKFNZTUJPTF9CTE9DS19WQUxVRSAo ZnVuYyksCisJCQkJCSAgIHRzdl9zYXZlX2RvX2xvY19hcmdfY29sbGVjdCwK KwkJCQkJICAgJmNiX2RhdGEpOworCSAgICB9CisJfQorICAgICAgZWxzZQor CWN0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHRjc3AsIHRwcywgYWN0aW9uX2V4 cCk7CisKKyAgICAgIGlmIChuZXh0X2NvbW1hKQorCWRvX2NsZWFudXBzIChv bGRfY2hhaW4pOworICAgICAgYWN0aW9uX2V4cCA9IG5leHRfY29tbWE7Cisg ICAgfQorICB3aGlsZSAoYWN0aW9uX2V4cCAmJiAqYWN0aW9uX2V4cCA9PSAn LCcpOworfQorCisvKiBDYWxsIGZ1bmN0aW9uIGN0Zl9zYXZlX2NvbGxlY3Rf Z2V0IEFkZCBhY3Rpb24gbGlzdCBBQ1RJT04gb2YgVFBTCisgICB0byBUUFMt PmNvbGxlY3QuCisgICBTVEVQUElOR19GUkFNRSBpcyB0cnVlIGlmIGl0IGlz IHN0ZXAgYWN0aW9uLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3Rw X2FjdGlvbnMgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgY3Rm X3NhdmVfdHBfcyAqdHBzLAorCQkgICAgIHN0cnVjdCBjb21tYW5kX2xpbmUg KmFjdGlvbiwgaW50IHN0ZXBwaW5nX2ZyYW1lKQoreworICBmb3IgKDsgYWN0 aW9uICE9IE5VTEw7IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKKyAgICB7Cisg ICAgICBjaGFyICphY3Rpb25fZXhwOworICAgICAgc3RydWN0IGNtZF9saXN0 X2VsZW1lbnQgKmNtZDsKKworICAgICAgUVVJVDsKKyAgICAgIGFjdGlvbl9l eHAgPSBhY3Rpb24tPmxpbmU7CisgICAgICB3aGlsZSAoaXNzcGFjZSAoKGlu dCkgKmFjdGlvbl9leHApKQorCWFjdGlvbl9leHArKzsKKyAgICAgIGlmICgq YWN0aW9uX2V4cCA9PSAnIycpCisJY29udGludWU7CisKKyAgICAgIGNtZCA9 IGxvb2t1cF9jbWQgKCZhY3Rpb25fZXhwLCBjbWRsaXN0LCAiIiwgLTEsIDEp OworICAgICAgaWYgKGNtZCA9PSAwKQorCWVycm9yIChfKCJCYWQgYWN0aW9u IGxpc3QgaXRlbTogJXMiKSwgYWN0aW9uX2V4cCk7CisKKyAgICAgIGlmIChj bWRfY2Z1bmNfZXEgKGNtZCwgd2hpbGVfc3RlcHBpbmdfcHNldWRvY29tbWFu ZCkpCisJeworCSAgaW50IGk7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBhY3Rp b24tPmJvZHlfY291bnQ7ICsraSkKKwkgICAgY3RmX3NhdmVfdHBfYWN0aW9u cyAodGNzcCwgdHBzLCBhY3Rpb24tPmJvZHlfbGlzdFtpXSwgMSk7CisJfQor ICAgICAgZWxzZSBpZiAoY21kX2NmdW5jX2VxIChjbWQsIGNvbGxlY3RfcHNl dWRvY29tbWFuZCkpCisJeworCSAgaWYgKHN0ZXBwaW5nX2ZyYW1lICE9IHRw cy0+c3RlcHBpbmdfZnJhbWUpCisJICAgIGNvbnRpbnVlOworCSAgaWYgKCph Y3Rpb25fZXhwID09ICcvJykKKwkgICAgYWN0aW9uX2V4cCA9IGRlY29kZV9h Z2VudF9vcHRpb25zIChhY3Rpb25fZXhwKTsKKwkgIGN0Zl9zYXZlX2NvbGxl Y3RfZ2V0ICh0Y3NwLCB0cHMsIGFjdGlvbl9leHApOworCX0KKyAgICB9Cit9 CisKKworLyogVHJ5IHRvIGZpbmQgdGhlIGN0Zl9zYXZlX3RwX3Mgc3RydWN0 IGluIHRoZSBUQ1NQLT50cC4KKyAgIElmIGNhbm5vdCBmaW5kIGl0IGluIHRo ZSBUQ1NQLT50cCwgbWFrZSBhIG5ldyBvbmUgZm9yIFRQCisgICBhbmQgYWRk IGl0IHRvIFRDU1AtPnRwLiAgKi8KKworc3RhdGljIHN0cnVjdCBjdGZfc2F2 ZV90cF9zICoKK2N0Zl9zYXZlX3RwX2ZpbmQgKHN0cnVjdCBjdGZfc2F2ZV9z ICp0Y3NwLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCit7CisgIHN0cnVjdCBj dGZfc2F2ZV90cF9zICpyZXQ7CisgIHN0cnVjdCBicF9sb2NhdGlvbiAqbG9j OworICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlOworICBpbnQgc3RlcHBp bmdfZnJhbWUgPSAwOworICBzdHJ1Y3QgY29tbWFuZF9saW5lICphY3Rpb247 CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisgIENPUkVf QUREUiBwYzsKKworICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9S KQorICAgIHsKKyAgICAgIHBjID0gcmVnY2FjaGVfcmVhZF9wYyAoZ2V0X2N1 cnJlbnRfcmVnY2FjaGUgKCkpOworICAgIH0KKyAgaWYgKGUucmVhc29uID49 IDApCisgICAgeworICAgICAgc3RlcHBpbmdfZnJhbWUgPSAxOworICAgICAg Zm9yIChsb2MgPSB0cC0+YmFzZS5sb2M7IGxvYzsgbG9jID0gbG9jLT5uZXh0 KQorCXsKKwkgIGlmIChsb2MtPmFkZHJlc3MgPT0gcGMpCisgICAgICAgICAg ICB7CisJICAgICAgc3RlcHBpbmdfZnJhbWUgPSAwOworCSAgICAgIGJyZWFr OworCSAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgZm9yIChyZXQgPSB0 Y3NwLT50cDsgcmV0OyByZXQgPSByZXQtPm5leHQpCisgICAgeworICAgICAg aWYgKHJldC0+dHAgPT0gdHAgJiYgcmV0LT5zdGVwcGluZ19mcmFtZSA9PSBz dGVwcGluZ19mcmFtZSkKKwlyZXR1cm4gcmV0OworICAgIH0KKworICByZXQg PSAoc3RydWN0IGN0Zl9zYXZlX3RwX3MgKikgeGNhbGxvYyAoMSwgc2l6ZW9m ICgqcmV0KSk7CisKKyAgLyogQWRkIHRwIHRvIHRoZSBsaXN0LiAgKi8KKyAg cmV0LT5uZXh0ID0gdGNzcC0+dHA7CisgIHRjc3AtPnRwID0gcmV0OworCisg IHJldC0+c3RlcHBpbmdfZnJhbWUgPSBzdGVwcGluZ19mcmFtZTsKKyAgcmV0 LT50cCA9IHRwOworCisgIGlmICghc3RlcHBpbmdfZnJhbWUgJiYgKmRlZmF1 bHRfY29sbGVjdCkKKyAgICBjdGZfc2F2ZV9jb2xsZWN0X2dldCAodGNzcCwg cmV0LCBkZWZhdWx0X2NvbGxlY3QpOworCisgIGN0Zl9zYXZlX3RwX2FjdGlv bnMgKHRjc3AsIHJldCwgYnJlYWtwb2ludF9jb21tYW5kcyAoJnRwLT5iYXNl KSwgMCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogTGV0IFRDU1AtPmRh dGFzdHJlYW1fZmQgcG9pbnQgdG8gdGhlIHBhcnQgZm9yIG5leHQgcGFja2V0 LiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX25leHRfcGFja2V0IChz dHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sKKyAgdGNzcC0+cGFja2V0X2Jl Z2luICs9IENURl9QQUNLRVRfU0laRTsKKyAgY3RmX3NhdmVfZnNlZWsgKHRj c3AsIHRjc3AtPnBhY2tldF9iZWdpbiwgU0VFS19TRVQpOworICB0Y3NwLT5j b250ZW50X3NpemUgPSAwOworfQorCisvKiBXcml0ZSB0aGUgY29udGVudCBz aXplIHRvIHBhY2tldCBoZWFkZXIgY29udGV4dC4gKi8KKworc3RhdGljIHZv aWQKK2N0Zl9zYXZlX3dyaXRlX2NvbnRlbnRfc2l6ZSAoc3RydWN0IGN0Zl9z YXZlX3MgKnRjc3ApCit7CisgIHVpbnQzMl90IHUzMjsKKworICBjdGZfc2F2 ZV9mc2VlayAodGNzcCwgdGNzcC0+cGFja2V0X2JlZ2luICsgNCwgU0VFS19T RVQpOworICB1MzIgPSB0Y3NwLT5jb250ZW50X3NpemUgKiBUQVJHRVRfQ0hB Ul9CSVQ7CisgIGN0Zl9zYXZlX3dyaXRlICh0Y3NwLCAodm9pZCAqKSZ1MzIs IDQpOworfQorCisvKiBXcml0ZSB0aGUgQ1RGIGRhdGEgcGFja2V0IGhlYWRl ciBjb250ZXh0LiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3dyaXRl X3BhY2tldF9oZWFkZXJfY29udGV4dCAoc3RydWN0IGN0Zl9zYXZlX3MgKnRj c3ApCit7CisgIHVpbnQzMl90IHUzMjsKKworICAvKiBtYWdpYy4gICovCisg IHUzMiA9IENURl9NQUdJQzsKKyAgY3RmX3NhdmVfd3JpdGUgKHRjc3AsICh2 b2lkICopJnUzMiwgNCk7CisgIHRjc3AtPmNvbnRlbnRfc2l6ZSArPSA0Owor CisgIC8qIGNvbnRlbnRfc2l6ZS4gIFdlIHN0aWxsIGRvbid0IGtub3cgdGhl IHNpemUsIHdyaXRlIGl0IGxhdGVyLiAgKi8KKyAgY3RmX3NhdmVfZnNlZWsg KHRjc3AsIDQsIFNFRUtfQ1VSKTsKKyAgdGNzcC0+Y29udGVudF9zaXplICs9 IDQ7CisKKyAgLyogcGFja2V0X3NpemUgKi8KKyAgdTMyID0gQ1RGX1BBQ0tF VF9TSVpFICogVEFSR0VUX0NIQVJfQklUOworICBjdGZfc2F2ZV93cml0ZSAo dGNzcCwgKHZvaWQgKikmdTMyLCA0KTsKKyAgdGNzcC0+Y29udGVudF9zaXpl ICs9IDQ7CisKKyAgdGNzcC0+Y3VycmVudF9jb250ZW50X3NpemUgPSB0Y3Nw LT5jb250ZW50X3NpemU7CisKKyAgLyogTWFrZSB0aGlzIHBhY2tldCBhbGwg aW50byBmaWxlLiAgKi8KKyAgY3RmX3NhdmVfZnNlZWsgKHRjc3AsIHRjc3At PnBhY2tldF9iZWdpbiArIENURl9QQUNLRVRfU0laRSAtIDQsIFNFRUtfU0VU KTsKKyAgdTMyID0gMDsKKyAgY3RmX3NhdmVfd3JpdGUgKHRjc3AsICh2b2lk ICopJnUzMiwgNCk7CisgIGN0Zl9zYXZlX2ZzZWVrICh0Y3NwLCB0Y3NwLT5w YWNrZXRfYmVnaW4gKyB0Y3NwLT5jb250ZW50X3NpemUsIFNFRUtfU0VUKTsK K30KKworLyogQ2hhbmdlIEktdGggY2hhciBpbiBDVEZfU1RSIHRvIFNUUi4g ICovCisKK3N0YXRpYyBjaGFyICoKK2N0Zl9zYXZlX21ldGFkYXRhX2NoYW5n ZV9jaGFyIChjaGFyICpjdGZfc3RyLCBpbnQgaSwgY29uc3QgY2hhciAqc3Ry KQoreworICBjaGFyICpuZXc7CisKKyAgY3RmX3N0cltpXSA9ICdcMCc7Cisg IG5ldyA9IHhzdHJwcmludGYgKCIlcyVzJXNfJXMiLCBjdGZfc3RyLCAoaSA/ ICJfIiA6ICIiKSwKKwkJICAgIHN0ciwgY3RmX3N0ciArIGkgKyAxKTsKKyAg eGZyZWUgKGN0Zl9zdHIpOworCisgIHJldHVybiBuZXc7Cit9CisKKy8qIFdy aXRlIHRoZSBoZWFkZXIgb2YgQ1RGJ3MgbWV0YWRhdGEgdG8gVENTUC0+TUVU QURBVEFfRkQuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfbWV0YWRh dGFfaGVhZGVyIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sKKyAgY29u c3QgY2hhciBtZXRhZGF0YV9mbXRbXSA9CisgICJcbnRyYWNlIHtcbiIKKyAg IgltYWpvciA9ICV1O1xuIgorICAiCW1pbm9yID0gJXU7XG4iCisgICIJYnl0 ZV9vcmRlciA9ICVzO1xuIgkJLyogYmUgb3IgbGUgKi8KKyAgIglwYWNrZXQu aGVhZGVyIDo9IHN0cnVjdCB7XG4iCisgICIJCXVpbnQzMl90IG1hZ2ljO1xu IgorICAiCX07XG4iCisgICJ9O1xuIgorICAiXG4iCisgICJzdHJlYW0ge1xu IgorICAiCXBhY2tldC5jb250ZXh0IDo9IHN0cnVjdCB7XG4iCisgICIJCXVp bnQzMl90IGNvbnRlbnRfc2l6ZTtcbiIKKyAgIgkJdWludDMyX3QgcGFja2V0 X3NpemU7XG4iCisgICIJfTtcbiIKKyAgIglldmVudC5oZWFkZXIgOj0gc3Ry dWN0IHtcbiIKKyAgIgkJdWludDMyX3QgaWQ7XG4iCisgICIJfTtcbiIKKyAg In07XG4iOworCisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCAiLyogQ1RGICVkLiVkICovXG4iLAorCQkJICBDVEZfU0FW RV9NQUpPUiwgQ1RGX1NBVkVfTUlOT1IpOworICBjdGZfc2F2ZV9md3JpdGVf Zm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIlwKK3R5cGVhbGlhcyBpbnRl Z2VyIHsgc2l6ZSA9IDMyOyBhbGlnbiA9IDMyOyBzaWduZWQgPSBmYWxzZTsg fSA6PSB1aW50MzJfdDtcbiIpOworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0 ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIlwKK3R5cGVhbGlhcyBpbnRlZ2VyIHsg c2l6ZSA9IDY0OyBhbGlnbiA9IDY0OyBzaWduZWQgPSBmYWxzZTsgfSA6PSB1 aW50NjRfdDtcbiIpOworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3Nw LT5tZXRhZGF0YV9mZCwgIlxuIik7CisKKyAgY3RmX3NhdmVfZndyaXRlX2Zv cm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsIG1ldGFkYXRhX2ZtdCwKKwkJCSAg Q1RGX1NBVkVfTUFKT1IsIENURl9TQVZFX01JTk9SLAorCQkJICBCWVRFX09S REVSID09IExJVFRMRV9FTkRJQU4gPyAibGUiIDogImJlIik7CisgIGN0Zl9z YXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXG4iKTsK K30KKworLyogV3JpdGUgdGhlIGJvZHkgb2YgQ1RGJ3MgbWV0YWRhdGEgdG8g VENTUC0+TUVUQURBVEFfRkQuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3Nh dmVfbWV0YWRhdGEgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwKQoreworICBz dHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHBzOworICBzdHJ1Y3QgY3RmX3NhdmVf Y29sbGVjdF9zICpjb2xsZWN0OworICBzdHJ1Y3QgY3RmX3NhdmVfdHlwZV9z ICp0OworCisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFk YXRhX2ZkLCAiXG4iKTsKKworICAvKiBXcml0ZSBldmVudC4gICovCisgIGZv ciAodHBzID0gdGNzcC0+dHA7IHRwczsgdHBzID0gdHBzLT5uZXh0KQorICAg IHsKKyAgICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFk YXRhX2ZkLAorCQkJICAgICAgImV2ZW50IHtcblx0bmFtZSA9IFwiJXNcIjtc blx0aWQgPSAlZDtcbiIKKwkJCSAgICAgICJcdGZpZWxkcyA6PSBzdHJ1Y3Qg eyBcbiIsCisJCQkgICAgICB0cHMtPnRwLT5iYXNlLmFkZHJfc3RyaW5nLCB0 cHMtPnRwLT5iYXNlLm51bWJlcik7CisgICAgICBmb3IgKGNvbGxlY3QgPSB0 cHMtPmNvbGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5uZXh0 KQorICAgICAgICB7CisJICBjaGFyICp0bXA7CisJICBjb25zdCBjaGFyICpv bGRfdGFiOworCisJICBpZiAoY29sbGVjdC0+aXNfcmV0KQorCSAgICBjb2xs ZWN0LT5jdGZfc3RyID0geHN0cmR1cCAoInJldF9wYyIpOworCSAgZWxzZQor CSAgICB7CisJICAgICAgY2hhciAqbmV3OworCSAgICAgIGludCBuZWVkX3Jl Y2hlY2s7CisJICAgICAgaW50IGk7CisKKwkgICAgICBjb2xsZWN0LT5jdGZf c3RyID0geHN0cmR1cCAoY29sbGVjdC0+c3RyKTsKKwkgICAgICBmb3IgKGkg PSAwOyBjb2xsZWN0LT5jdGZfc3RyW2ldICE9ICdcMCc7ICsraSkKKwkgICAg ICAgIHsKKwkJICBzd2l0Y2ggKGNvbGxlY3QtPmN0Zl9zdHJbaV0pCisJCSAg ICB7CisJCSAgICBjYXNlICckJzoKKwkJICAgICAgY29sbGVjdC0+Y3RmX3N0 cgorCQkJICA9IGN0Zl9zYXZlX21ldGFkYXRhX2NoYW5nZV9jaGFyIChjb2xs ZWN0LT5jdGZfc3RyLAorCQkJCQkJCSAgIGksICJkb2xsYXIiKTsKKwkJICAg ICAgYnJlYWs7CisJCSAgICBjYXNlICcqJzoKKwkJICAgICAgY29sbGVjdC0+ Y3RmX3N0cgorCQkJICA9IGN0Zl9zYXZlX21ldGFkYXRhX2NoYW5nZV9jaGFy IChjb2xsZWN0LT5jdGZfc3RyLAorCQkJCQkJCSAgIGksICJzdGFyIik7CisJ CSAgICAgIGJyZWFrOworCQkgICAgY2FzZSAnICc6CisJCSAgICAgIGNvbGxl Y3QtPmN0Zl9zdHJbaV0gPSAnXyc7CisJCSAgICAgIGJyZWFrOworCQkgICAg fQorCQl9CisJICAgIH0KKworCSAgdG1wID0gYWxsb2NhIChzdHJsZW4gKGNv bGxlY3QtPmN0Zl9zdHIpICsgMzApOworCSAgc3RyY3B5ICh0bXAsIGNvbGxl Y3QtPmN0Zl9zdHIpOworCSAgd2hpbGUgKDEpCisJICAgIHsKKwkgICAgICBz dHJ1Y3QgY3RmX3NhdmVfY29sbGVjdF9zICpjb2xsZWN0MjsKKwkgICAgICBp bnQgaSA9IDA7CisKKwkgICAgICBmb3IgKGNvbGxlY3QyID0gdHBzLT5jb2xs ZWN0OyBjb2xsZWN0MjsKKwkJICAgY29sbGVjdDIgPSBjb2xsZWN0Mi0+bmV4 dCkKKwkJeworCQkgIGlmIChjb2xsZWN0Mi0+Y3RmX3N0cgorCQkgICAgICAm JiBzdHJjbXAgKGNvbGxlY3QyLT5jdGZfc3RyLCB0bXApID09IDApCisJCSAg ICBicmVhazsKKwkJfQorCSAgICAgIGlmIChjb2xsZWN0MiA9PSBOVUxMKQor CQlicmVhazsKKworCSAgICAgIHNucHJpbnRmICh0bXAsIHN0cmxlbiAoY29s bGVjdC0+Y3RmX3N0cikgKyAzMCwKKwkJCSIlc18lZCIsIGNvbGxlY3QtPmN0 Zl9zdHIsIGkrKyk7CisJICAgIH0KKworCSAgaWYgKHN0cmNtcCAoY29sbGVj dC0+Y3RmX3N0ciwgY29sbGVjdC0+c3RyKSkKKwkgICAgd2FybmluZyAoXygi XAorXCIlc1wiIG9mIHRyYWNlcG9pbnQgJWQgcmVuYW1lIHRvIFwiJXNcIiBp biBDVEYgZmlsZS4iKSwKKwkJICAgICAgIGNvbGxlY3QtPnN0ciwgdHBzLT50 cC0+YmFzZS5udW1iZXIsCisJCSAgICAgICBjb2xsZWN0LT5jdGZfc3RyKTsK KworCSAgb2xkX3RhYiA9IHRjc3AtPnRhYjsKKwkgIHRjc3AtPnRhYiA9ICJc dFx0IjsKKwkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFk YXRhX2ZkLCB0Y3NwLT50YWIpOworCSAgaWYgKGNvbGxlY3QtPmlzX3JldCkK KwkgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFf ZmQsICJ1aW50NjRfdCAlcztcbiIsCisJCQkJICAgIGNvbGxlY3QtPmN0Zl9z dHIpOworCSAgZWxzZQorCSAgICBjdGZfc2F2ZV92YXJfZGVmaW5lX3dyaXRl ICh0Y3NwLCBjb2xsZWN0LT50eXBlLCBjb2xsZWN0LT5jdGZfc3RyKTsKKwkg IHRjc3AtPnRhYiA9IG9sZF90YWI7CisJfQorICAgICAgY3RmX3NhdmVfZndy aXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJcdH07XG59O1xuIik7 CisgICAgfQorfQorCisvKiBDbGVhbiBmdW5jdGlvbiBmb3IgY3RmX3NhdmUu ICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfY2xlYW51cCAodm9pZCAq cCkKK3sKKyAgc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AgPSBwOworICBzdHJ1 Y3QgY3RmX3NhdmVfdHBfcyAqdHAsICp0bXBfdHA7CisgIHN0cnVjdCBjdGZf c2F2ZV90eXBlX3MgKnR5cGUsICp0bXBfdHlwZTsKKworICBpZiAodGNzcC0+ bWV0YWRhdGFfZmQpCisgICAgeworICAgICAgY3RmX3NhdmVfbWV0YWRhdGEg KHRjc3ApOworICAgICAgZmNsb3NlICh0Y3NwLT5tZXRhZGF0YV9mZCk7Cisg ICAgfQorCisgIGlmICh0Y3NwLT5kYXRhc3RyZWFtX2ZkKQorICAgIGZjbG9z ZSAodGNzcC0+ZGF0YXN0cmVhbV9mZCk7CisKKyAgZm9yICh0cCA9IHRjc3At PnRwOyB0cDsgdHAgPSB0bXBfdHApCisgICAgeworICAgICAgc3RydWN0IGN0 Zl9zYXZlX2NvbGxlY3RfcyAqY29sbGVjdCwgKnRtcF9jb2xsZWN0OworCisg ICAgICBmb3IgKGNvbGxlY3QgPSB0cC0+Y29sbGVjdDsgY29sbGVjdDsgY29s bGVjdCA9IHRtcF9jb2xsZWN0KQorICAgICAgICB7CisJICBpZiAoY29sbGVj dC0+ZXhwcikKKwkgICAgZnJlZV9jdXJyZW50X2NvbnRlbnRzICgmY29sbGVj dC0+ZXhwcik7CisJICBpZiAoY29sbGVjdC0+c3RyKQorCSAgICB4ZnJlZSAo Y29sbGVjdC0+c3RyKTsKKwkgIGlmIChjb2xsZWN0LT5jdGZfc3RyKQorCSAg ICB4ZnJlZSAoY29sbGVjdC0+Y3RmX3N0cik7CisJICB0bXBfY29sbGVjdCA9 IGNvbGxlY3QtPm5leHQ7CisJICB4ZnJlZSAoY29sbGVjdCk7CisgICAgICAg IH0KKyAgICAgIHRtcF90cCA9IHRwLT5uZXh0OworICAgICAgeGZyZWUgKHRw KTsKKyAgICB9CisKKyAgZm9yICh0eXBlID0gdGNzcC0+dHlwZTsgdHlwZTsg dHlwZSA9IHRtcF90eXBlKQorICAgIHsKKyAgICAgIHRtcF90eXBlID0gdHlw ZS0+bmV4dDsKKyAgICAgIHhmcmVlICh0eXBlKTsKKyAgICB9CisKKyAgcmVp bml0X2ZyYW1lX2NhY2hlICgpOworICB0YXJnZXRfZGNhY2hlX2ludmFsaWRh dGUgKCk7CisgIHNldF9jdXJyZW50X3RyYWNlZnJhbWUgKHRjc3AtPm9sZF90 cmFjZWZyYW1lX251bSk7Cit9CisKKy8qIFNhdmUgY3VycmVudCB0cmFjZSBm cmFtZSB0byBESVJOQU1FLiAgKi8KKwordm9pZAorY3RmX3NhdmUgKGNvbnN0 IGNoYXIgKmRpcm5hbWUpCit7CisgIHN0cnVjdCBjdGZfc2F2ZV9zIHRjczsK KyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsKKyAgaW50IGZyYW1lX251 bTsKKyAgY2hhciAqZmlsZV9uYW1lOworICBzdHJ1Y3QgY3RmX3NhdmVfdHlw ZV9zICp0OworICBjaGFyIHRhYltdID0gIiI7CisKKyAgLyogQ3JlYXRlIERJ Uk5BTUUuICAqLworICBmaWxlX25hbWUgPSBhbGxvY2EgKHN0cmxlbiAoZGly bmFtZSkgKyAxCisJCSAgICAgICsgc3RybGVuIChDVEZfREFUQVNUUkVBTV9O QU1FKSArIDEpOworICBpZiAobWtkaXIgKGRpcm5hbWUsIFNfSVJXWFUgfCBT X0lSR1JQIHwgU19JWEdSUCB8IFNfSVJPVEggfCBTX0lYT1RIKQorICAgICAg JiYgZXJybm8gIT0gRUVYSVNUKQorICAgIGVycm9yIChfKCJVbmFibGUgdG8g b3BlbiBkaXJlY3RvcnkgJyVzJyBmb3Igc2F2aW5nIHRyYWNlIGRhdGEgKCVz KSIpLAorCSAgIGRpcm5hbWUsIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7CisK KyAgbWVtc2V0ICgmdGNzLCAnXDAnLCBzaXplb2YgKHRjcykpOworICB0Y3Mu b2xkX3RyYWNlZnJhbWVfbnVtID0gZ2V0X3RyYWNlZnJhbWVfbnVtYmVyICgp OworICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAgKGN0Zl9zYXZlX2NsZWFu dXAsICZ0Y3MpOworICB0Y3MudGFiID0gdGFiOworCisgIHNwcmludGYgKGZp bGVfbmFtZSwgIiVzLyVzIiwgZGlybmFtZSwgQ1RGX01FVEFEQVRBX05BTUUp OworICB0Y3MubWV0YWRhdGFfZmQgPSBmb3BlbiAoZmlsZV9uYW1lLCAidyIp OworICBpZiAoIXRjcy5tZXRhZGF0YV9mZCkKKyAgICBlcnJvciAoXygiVW5h YmxlIHRvIG9wZW4gZmlsZSAnJXMnIGZvciBzYXZpbmcgdHJhY2UgZGF0YSAo JXMpIiksCisJICAgZmlsZV9uYW1lLCBzYWZlX3N0cmVycm9yIChlcnJubykp OworICBjdGZfc2F2ZV9tZXRhZGF0YV9oZWFkZXIgKCZ0Y3MpOworCisgIHNw cmludGYgKGZpbGVfbmFtZSwgIiVzLyVzIiwgZGlybmFtZSwgQ1RGX0RBVEFT VFJFQU1fTkFNRSk7CisgIHRjcy5kYXRhc3RyZWFtX2ZkID0gZm9wZW4gKGZp bGVfbmFtZSwgInciKTsKKyAgaWYgKCF0Y3MuZGF0YXN0cmVhbV9mZCkKKyAg ICBlcnJvciAoXygiVW5hYmxlIHRvIG9wZW4gZmlsZSAnJXMnIGZvciBzYXZp bmcgdHJhY2UgZGF0YSAoJXMpIiksCisJICAgZmlsZV9uYW1lLCBzYWZlX3N0 cmVycm9yIChlcnJubykpOworCisgIGN0Zl9zYXZlX3dyaXRlX3BhY2tldF9o ZWFkZXJfY29udGV4dCgmdGNzKTsKKworICBmb3IgKGZyYW1lX251bSA9IDA7 IDE7IGZyYW1lX251bSArKykKKyAgICB7CisgICAgICBpbnQgdG51bTsKKyAg ICAgIHN0cnVjdCB0cmFjZXBvaW50ICp0cDsKKyAgICAgIGludCB0cnlfY291 bnQ7CisgICAgICB1aW50MzJfdCB1MzI7CisgICAgICBzdHJ1Y3QgY3RmX3Nh dmVfdHBfcyAqdHBzOworICAgICAgc3RydWN0IGN0Zl9zYXZlX2NvbGxlY3Rf cyAqY29sbGVjdDsKKyAgICAgIGludCB0cmFjZWZyYW1lX2lzX2Ryb3BwZWQg PSAwOworCisgICAgICAvKiBBbGxvdyB1c2VyIHRvIGJhaWwgb3V0IHdpdGgg XkMuICAqLworICAgICAgUVVJVDsKKworICAgICAgLyogR290byB0cmFjZWZy YW1lIGZyYW1lX251bSBhbmQgc2V0IHRwLiAgKi8KKyAgICAgIGZyYW1lX251 bSA9IHRhcmdldF90cmFjZV9maW5kICh0ZmluZF9udW1iZXIsIGZyYW1lX251 bSwgMCwgMCwgJnRudW0pOworICAgICAgaWYgKGZyYW1lX251bSA8IDApCisJ YnJlYWs7CisgICAgICB0cCA9IGdldF90cmFjZXBvaW50X2J5X251bWJlcl9v bl90YXJnZXQgKHRudW0pOworICAgICAgaWYgKCF0cCkKKyAgICAgICAgewor CSAgd2FybmluZyAoXygiZHJvcCB0cmFjZWZyYW1lICVkIGJlY2F1c2UgY2Fu bm90IGZpbmQgdHJhY2Vwb2ludCAlZC4iKSwKKwkJICAgZnJhbWVfbnVtLCB0 bnVtKTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGlmICghdHAtPmJhc2Uu bG9jKQorICAgICAgICB7CisJICB3YXJuaW5nIChfKCJkcm9wIHRyYWNlZnJh bWUgJWQgYmVjYXVzZSB0cmFjZXBvaW50ICVkIGlzIHBlbmRpbmcuIiksCisJ CSAgIGZyYW1lX251bSwgdHAtPmJhc2UubnVtYmVyKTsKKwkgIGNvbnRpbnVl OworCX0KKyAgICAgIHJlaW5pdF9mcmFtZV9jYWNoZSAoKTsKKyAgICAgIHRh cmdldF9kY2FjaGVfaW52YWxpZGF0ZSAoKTsKKyAgICAgIHNldF9jdXJyZW50 X3RyYWNlZnJhbWUgKGZyYW1lX251bSk7CisKKyAgICAgIHRwcyA9IGN0Zl9z YXZlX3RwX2ZpbmQgKCZ0Y3MsIHRwKTsKKworICAgICAgLyogVGhlIHRwIGlz IG5vdCB2YXJpYWJsZS1sZW5ndGggYW5kIGJpZ2dlciB0aGFuIENURl9QQUNL RVRfU0laRS4KKyAgICAgICAgIFNvIGRyb3AgaXQuICAqLworICAgICAgaWYg KHRwcy0+aXNfZHJvcHBlZCkKKwljb250aW51ZTsKKworICAgICAgLyogVHJ5 IGNvdW50IGZvciBjdXJyZW50IHRwIHdyaXRlLgorICAgICAgICAgSWYgdHJ5 IHNlY29uZCB0aW1lLCB0aGUgZXZlbnQgc2l6ZSBiaWdnZXIgdGhhbiBhIHBh Y2tldC4KKyAgICAgICAgIFRoZW4gZHJvcCB0aGlzIGV2ZW50LiAgKi8KKyAg ICAgIHRyeV9jb3VudCA9IDA7CisKK3JlX3dyaXRlX3RwOgorICAgICAgaWYg KHRyeV9jb3VudCA+IDApCisgICAgICAgIHsKKwkgIC8qIEhhbmRsZSByZXRy eS4gICovCisJICBpZiAodHJ5X2NvdW50ID4gMSB8fCA0ICsgNCArIDQgPT0g dGNzLmNvbnRlbnRfc2l6ZSkKKwkgICAgeworCSAgICAgIC8qIFNlY29uZCBy ZXRyeSBvciBwYWNrZXQganVzdCB3cml0ZSB0aGF0IHBhY2tldCBtZWFucwor CSAgICAgICAgIHRoaXMgVFAgaXMgdG9vIGJpZy4gIFNvIGRyb3AgaXQuICAq LworCSAgICAgIGlmICh0cHMtPmlzX3ZhcmlhYmxlX2xlbmd0aCkKKwkgICAg ICAgIHsKKwkJICAvKiBUaGUgdHAgaXMgdmFyaWFibGUtbGVuZ3RoLiAgKi8K KwkJICB3YXJuaW5nIChfKCJcCit0cmFjZWZyYW1lICVkIG9mIHRyYWNlcG9p bnQgJWQgbmVlZCBzYXZlIGRhdGEgdGhhdCBiaWdnZXIgdGhhbiBwYWNrZXQg c2l6ZSAlZC5cblwKK1NvIGl0IHdpbGwgYmUgZHJvcHBlZC4iKSwgZnJhbWVf bnVtLCB0cHMtPnRwLT5iYXNlLm51bWJlciwgQ1RGX1BBQ0tFVF9TSVpFKTsK KwkJfQorCSAgICAgIGVsc2UKKwkgICAgICAgIHsKKwkJICAvKiBUaGUgdHAg aXMgbm90IHZhcmlhYmxlLWxlbmd0aC4gICovCisJCSAgd2FybmluZyAoXygi XAordHJhY2Vwb2ludCAlZCBuZWVkIHNhdmUgZGF0YSB0aGF0IGJpZ2dlciB0 aGFuIHBhY2tldCBzaXplICVkLlxuXAorU28gYWxsIG9mIGl0cyB0cmFjZWZy YW1lcyB3aWxsIGJlIGRyb3BwZWQuIiksCisJCQkgICB0cHMtPnRwLT5iYXNl Lm51bWJlciwgQ1RGX1BBQ0tFVF9TSVpFKTsKKwkJICAvKiBNYXJrIHRoaXMg dHAgdG8gbGV0IEdEQiBkcm9wIGl0cyB0cmFjZWZyYW1lcy4gICovCisJCSAg dHBzLT5pc19kcm9wcGVkID0gMTsKKwkJfQorCSAgICAgIGNvbnRpbnVlOwor CSAgICB9CisKKwkgIHRjcy5jaGVja19zaXplID0gMDsKKwkgIGN0Zl9zYXZl X3dyaXRlX2NvbnRlbnRfc2l6ZSAoJnRjcyk7CisgICAgICAgICAgY3RmX3Nh dmVfbmV4dF9wYWNrZXQgKCZ0Y3MpOworCSAgY3RmX3NhdmVfd3JpdGVfcGFj a2V0X2hlYWRlcl9jb250ZXh0KCZ0Y3MpOworCX0KKworICAgICAgdHJ5X2Nv dW50ICsrOworCisgICAgICB0Y3MuY3VycmVudF9jb250ZW50X3NpemUgPSB0 Y3MuY29udGVudF9zaXplOworICAgICAgdGNzLmNoZWNrX3NpemUgPSAxOwor CisgICAgICAvKiBXcml0ZSBldmVudCBoZWFkZXIgKi8KKyAgICAgIGlmICh0 cHMtPnN0ZXBwaW5nX2ZyYW1lKQorICAgICAgICB1MzIgPSAodWludDMyX3Qp ICgtdHBzLT50cC0+YmFzZS5udW1iZXIpOworICAgICAgZWxzZQorCXUzMiA9 ICh1aW50MzJfdCkgdHBzLT50cC0+YmFzZS5udW1iZXI7CisgICAgICBpZiAo Y3RmX3NhdmVfYWxpZ25fd3JpdGUgKCZ0Y3MsICh2b2lkICopJnUzMiwgc2l6 ZW9mICh1MzIpLAorCQkJCXNpemVvZiAodTMyKSkpCisJZ290byByZV93cml0 ZV90cDsKKworICAgICAgLyogQWxpZ24uICAqLworICAgICAgaWYgKHRwcy0+ YWxpZ25fc2l6ZSkKKyAgICAgICAgeworCSAgaWYgKGN0Zl9zYXZlX2ZzZWVr ICgmdGNzLAorCQkJICAgICAgQUxJR05fU0laRSh0Y3MuY3VycmVudF9jb250 ZW50X3NpemUsCisJCQkJCSB0cHMtPmFsaWduX3NpemUpLAorCQkJICAgICAg U0VFS19DVVIpKQorCSAgICBnb3RvIHJlX3dyaXRlX3RwOworCX0KKworICAg ICAgZm9yIChjb2xsZWN0ID0gdHBzLT5jb2xsZWN0OyBjb2xsZWN0OyBjb2xs ZWN0ID0gY29sbGVjdC0+bmV4dCkKKyAgICAgICAgeworCSAgdm9sYXRpbGUg c3RydWN0IGdkYl9leGNlcHRpb24gZTsKKworCSAgaWYgKGNvbGxlY3QtPmlz X3JldCkKKwkgICAgeworCSAgICAgIENPUkVfQUREUiBwYzsKKwkgICAgICB1 aW50NjRfdCB1NjQ7CisKKwkgICAgICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9N QVNLX0VSUk9SKQorCQl7CisJCSAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1l OworCisJCSAgZnJhbWUgPSBnZXRfY3VycmVudF9mcmFtZSAoKTsKKwkJICBp ZiAoIWZyYW1lKQorCQkgICAgZXJyb3IgKF8oImdldCBjdXJyZW50IGZyYW1l IGZhaWwiKSk7CisJCSAgZnJhbWUgPSBnZXRfcHJldl9mcmFtZSAoZnJhbWUp OworCQkgIGlmICghZnJhbWUpCisJCSAgICBlcnJvciAoXygiZ2V0IHByZXYg ZnJhbWUgZmFpbCIpKTsKKworCQkgIGlmICghZ2V0X2ZyYW1lX3BjX2lmX2F2 YWlsYWJsZSAoZnJhbWUsICZwYykpCisJCSAgICBlcnJvciAoXygiUEMgdW5h dmFpbGFibGUiKSk7CisJCX0KKwkgICAgICBpZiAoZS5yZWFzb24gPCAwKQor CQl7CisJCSAgd2FybmluZyAoXygiXAordHJhY2VmcmFtZSAlZCBpcyBkcm9w cGVkIGJlY2F1c2UgdHJ5IHRvIGdldCB0aGUgdmFsdWUgb2YgXCIlc1wiIGdv dCBlcnJvcjogJXMiKSwKKwkJCSAgIGZyYW1lX251bSwgY29sbGVjdC0+c3Ry LCBlLm1lc3NhZ2UpOworCQkgIHRyYWNlZnJhbWVfaXNfZHJvcHBlZCA9IDE7 CisJCSAgYnJlYWs7CisJCX0KKworCSAgICAgIHU2NCA9IHBjOworCSAgICAg IGlmIChjdGZfc2F2ZV9hbGlnbl93cml0ZSAoJnRjcywgKGdkYl9ieXRlICop ICZ1NjQsCisJCQkJCXNpemVvZiAodTY0KSwgc2l6ZW9mICh1NjQpKSkKKwkJ Z290byByZV93cml0ZV90cDsKKwkgICAgfQorCSAgZWxzZQorICAgICAgICAg ICAgeworCSAgICAgIHN0cnVjdCB2YWx1ZSAqdmFsOworCSAgICAgIHN0cnVj dCBjbGVhbnVwICpiYWNrX2NoYWluOworCSAgICAgIGNvbnN0IGdkYl9ieXRl ICpjb250ZW50OworCisJICAgICAgYmFja19jaGFpbiA9IG1ha2VfY2xlYW51 cCAobnVsbF9jbGVhbnVwLCBOVUxMKTsKKwkgICAgICBUUllfQ0FUQ0ggKGUs IFJFVFVSTl9NQVNLX0VSUk9SKQorCSAgICAgICAgeworCQkgIHZhbCA9IGV2 YWx1YXRlX2V4cHJlc3Npb24gKGNvbGxlY3QtPmV4cHIpOworCQkgIGNvbnRl bnQgPSB2YWx1ZV9jb250ZW50cyAodmFsKTsKKwkJfQorCSAgICAgIGlmIChl LnJlYXNvbiA8IDAgfHwgY29sbGVjdC0+dHlwZSAhPSB2YWx1ZV90eXBlICh2 YWwpKQorCQl7CisJCSAgaWYgKGUucmVhc29uIDwgMCkKKwkJICAgIHdhcm5p bmcgKF8oIlwKK3RyYWNlZnJhbWUgJWQgaXMgZHJvcHBlZCBiZWNhdXNlIHRy eSB0byBnZXQgdGhlIHZhbHVlIG9mIFwiJXNcIiBnb3QgZXJyb3I6ICVzIiks CisJCQkgICAgIGZyYW1lX251bSwgY29sbGVjdC0+c3RyLCBlLm1lc3NhZ2Up OworCQkgIGVsc2UKKwkJICAgIHdhcm5pbmcgKF8oIlwKK3RyYWNlZnJhbWUg JWQgaXMgZHJvcHBlZCBiZWNhdXNlIHR5cGUgb2YgXCIlc1wiIGlzIHdyb25n LiIpLAorCQkJICAgICBmcmFtZV9udW0sIGNvbGxlY3QtPnN0cik7CisJCSAg dHJhY2VmcmFtZV9pc19kcm9wcGVkID0gMTsKKwkJICBkb19jbGVhbnVwcyAo YmFja19jaGFpbik7CisJCSAgYnJlYWs7CisJCX0KKworCSAgICAgIC8qIFdy aXRlIHRoaXMgdmFsIGFjY29yZGluZyB0byB0eXBlLiAgKi8KKwkgICAgICBp ZiAoY3RmX3NhdmVfYWxpZ25fd3JpdGUgKCZ0Y3MsIGNvbnRlbnQsCisJCQkJ CVRZUEVfTEVOR1RIIChjb2xsZWN0LT50eXBlKSwKKwkJCQkJY29sbGVjdC0+ YWxpZ25fc2l6ZSkpCisJCXsKKwkJICBkb19jbGVhbnVwcyAoYmFja19jaGFp bik7CisJCSAgZ290byByZV93cml0ZV90cDsKKwkJfQorCisJICAgICAgLyog RnJlZSB0aGUgbWVtb3J5IHRoYXQgYWxsb2MgYnkgZXZhbHVhdGVfZXhwcmVz c2lvbi4gICovCisJICAgICAgZG9fY2xlYW51cHMgKGJhY2tfY2hhaW4pOwor CSAgICB9CisJfQorCisgICAgICBpZiAodHJhY2VmcmFtZV9pc19kcm9wcGVk KQorCWNvbnRpbnVlOworCisgICAgICB0Y3MuY29udGVudF9zaXplID0gdGNz LmN1cnJlbnRfY29udGVudF9zaXplOworICAgIH0KKyAgY3RmX3NhdmVfd3Jp dGVfY29udGVudF9zaXplICgmdGNzKTsKKworICBkb19jbGVhbnVwcyAob2xk X2NoYWluKTsKK30KLS0tIC9kZXYvbnVsbAorKysgYi9jdGYuaApAQCAtMCww ICsxLDI1IEBACisvKiBDVEYgZm9ybWF0IHN1cHBvcnQuCisKKyAgIENvcHly aWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIENURl9ICisjZGVmaW5lIENU Rl9ICisKK2V4dGVybiB2b2lkIGN0Zl9zYXZlIChjb25zdCBjaGFyICpkaXJu YW1lKTsKKworI2VuZGlmCi0tLSBhL21pL21pLW1haW4uYworKysgYi9taS9t aS1tYWluLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJvc2RhdGEu aCIKICNpbmNsdWRlICJzcGxheS10cmVlLmgiCiAjaW5jbHVkZSAidHJhY2Vw b2ludC5oIgorI2luY2x1ZGUgImN0Zi5oIgogI2luY2x1ZGUgImFkYS1sYW5n LmgiCiAjaW5jbHVkZSAibGluZXNwZWMuaCIKIApAQCAtMjQ5NSwxNiArMjQ5 NiwxOSBAQCB2b2lkCiBtaV9jbWRfdHJhY2Vfc2F2ZSAoY2hhciAqY29tbWFu ZCwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogewogICBpbnQgdGFyZ2V0X3Nh dmVzID0gMDsKKyAgaW50IGdlbmVyYXRlX2N0ZiA9IDA7CiAgIGNoYXIgKmZp bGVuYW1lOwogCiAgIGlmIChhcmdjICE9IDEgJiYgYXJnYyAhPSAyKQotICAg IGVycm9yIChfKCJVc2FnZTogLXRyYWNlLXNhdmUgWy1yXSBmaWxlbmFtZSIp KTsKKyAgICBlcnJvciAoXygiVXNhZ2U6IC10cmFjZS1zYXZlIFstcl0gWy1j dGZdIGZpbGVuYW1lIikpOwogCiAgIGlmIChhcmdjID09IDIpCiAgICAgewog ICAgICAgZmlsZW5hbWUgPSBhcmd2WzFdOwogICAgICAgaWYgKHN0cmNtcCAo YXJndlswXSwgIi1yIikgPT0gMCkKIAl0YXJnZXRfc2F2ZXMgPSAxOworICAg ICAgaWYgKHN0cmNtcCAoYXJndlswXSwgIi1jdGYiKSA9PSAwKQorCWdlbmVy YXRlX2N0ZiA9IDE7CiAgICAgICBlbHNlCiAJZXJyb3IgKF8oIkludmFsaWQg b3B0aW9uOiAlcyIpLCBhcmd2WzBdKTsKICAgICB9CkBAIC0yNTEzLDcgKzI1 MTcsMTAgQEAgbWlfY21kX3RyYWNlX3NhdmUgKGNoYXIgKmNvbW1hbmQsIGNo YXIgKgogICAgICAgZmlsZW5hbWUgPSBhcmd2WzBdOwogICAgIH0KIAotICB0 cmFjZV9zYXZlIChmaWxlbmFtZSwgdGFyZ2V0X3NhdmVzKTsKKyAgaWYgKGdl bmVyYXRlX2N0ZikKKyAgICBjdGZfc2F2ZSAoZmlsZW5hbWUpOworICBlbHNl CisgICAgdHJhY2Vfc2F2ZSAoZmlsZW5hbWUsIHRhcmdldF9zYXZlcyk7CiB9 CiAKIHZvaWQKLS0tIGEvdHJhY2Vwb2ludC5jCisrKyBiL3RyYWNlcG9pbnQu YwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIK ICNpbmNsdWRlICJjbGkvY2xpLXV0aWxzLmgiCiAjaW5jbHVkZSAicHJvYmUu aCIKKyNpbmNsdWRlICJjdGYuaCIKIAogLyogcmVhZGxpbmUgaW5jbHVkZSBm aWxlcyAqLwogI2luY2x1ZGUgInJlYWRsaW5lL3JlYWRsaW5lLmgiCkBAIC01 NzksNyArNTgwLDcgQEAgd2hpbGVfc3RlcHBpbmdfcHNldWRvY29tbWFuZCAo Y2hhciAqYXJncwogICBlcnJvciAoXygiVGhpcyBjb21tYW5kIGNhbiBvbmx5 IGJlIHVzZWQgaW4gYSB0cmFjZXBvaW50IGFjdGlvbnMgbGlzdC4iKSk7CiB9 CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBjb2xsZWN0X3BzZXVkb2NvbW1hbmQg KGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKIHsKICAgZXJyb3IgKF8oIlRo aXMgY29tbWFuZCBjYW4gb25seSBiZSB1c2VkIGluIGEgdHJhY2Vwb2ludCBh Y3Rpb25zIGxpc3QuIikpOwpAQCAtMzE1Nyw2ICszMTU4LDcgQEAgc3RhdGlj IHZvaWQKIHRyYWNlX3NhdmVfY29tbWFuZCAoY2hhciAqYXJncywgaW50IGZy b21fdHR5KQogewogICBpbnQgdGFyZ2V0X2RvZXNfc2F2ZSA9IDA7CisgIGlu dCBnZW5lcmF0ZV9jdGYgPSAwOwogICBjaGFyICoqYXJndjsKICAgY2hhciAq ZmlsZW5hbWUgPSBOVUxMOwogICBzdHJ1Y3QgY2xlYW51cCAqYmFja190bzsK QEAgLTMxNzEsNiArMzE3Myw4IEBAIHRyYWNlX3NhdmVfY29tbWFuZCAoY2hh ciAqYXJncywgaW50IGZyb20KICAgICB7CiAgICAgICBpZiAoc3RyY21wICgq YXJndiwgIi1yIikgPT0gMCkKIAl0YXJnZXRfZG9lc19zYXZlID0gMTsKKyAg ICAgIGlmIChzdHJjbXAgKCphcmd2LCAiLWN0ZiIpID09IDApCisJZ2VuZXJh dGVfY3RmID0gMTsKICAgICAgIGVsc2UgaWYgKCoqYXJndiA9PSAnLScpCiAJ ZXJyb3IgKF8oInVua25vd24gb3B0aW9uIGAlcyciKSwgKmFyZ3YpOwogICAg ICAgZWxzZQpAQCAtMzE4MCwxMCArMzE4NCwxOCBAQCB0cmFjZV9zYXZlX2Nv bW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tCiAgIGlmICghZmlsZW5hbWUp CiAgICAgZXJyb3Jfbm9fYXJnIChfKCJmaWxlIGluIHdoaWNoIHRvIHNhdmUg dHJhY2UgZGF0YSIpKTsKIAotICB0cmFjZV9zYXZlIChmaWxlbmFtZSwgdGFy Z2V0X2RvZXNfc2F2ZSk7CisgIGlmIChnZW5lcmF0ZV9jdGYpCisgICAgewor ICAgICAgaWYgKHRhcmdldF9kb2VzX3NhdmUpCisJZXJyb3Jfbm9fYXJnIChf KCItciBjYW5ub3QgYmUgdXNlZCB3aXRoIC1jdGYuIikpOworICAgICAgY3Rm X3NhdmUgKGZpbGVuYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB0cmFjZV9z YXZlIChmaWxlbmFtZSwgdGFyZ2V0X2RvZXNfc2F2ZSk7CiAKICAgaWYgKGZy b21fdHR5KQotICAgIHByaW50Zl9maWx0ZXJlZCAoXygiVHJhY2UgZGF0YSBz YXZlZCB0byBmaWxlICclcycuXG4iKSwgZmlsZW5hbWUpOworICAgIHByaW50 Zl9maWx0ZXJlZCAoXygiVHJhY2UgZGF0YSBzYXZlZCB0byAlcyAnJXMnLlxu IiksCisJCSAgICAgZ2VuZXJhdGVfY3RmID8gImRpcmVjdG9yeSIgOiAiZmls ZSIsIGZpbGVuYW1lKTsKIAogICBkb19jbGVhbnVwcyAoYmFja190byk7CiB9 CkBAIC01MjI3LDYgKzUyMzksNyBAQCBfaW5pdGlhbGl6ZV90cmFjZXBvaW50 ICh2b2lkKQogICBhZGRfY29tICgidHNhdmUiLCBjbGFzc190cmFjZSwgdHJh Y2Vfc2F2ZV9jb21tYW5kLCBfKCJcCiBTYXZlIHRoZSB0cmFjZSBkYXRhIHRv IGEgZmlsZS5cblwKIFVzZSB0aGUgJy1yJyBvcHRpb24gdG8gZGlyZWN0IHRo ZSB0YXJnZXQgdG8gc2F2ZSBkaXJlY3RseSB0byB0aGUgZmlsZSxcblwKK1Vz ZSB0aGUgJy1jdGYnIG9wdGlvbiB0byBzYXZlIHRoZSBkYXRhIHRvIENURiBm b3JtYXQsXG5cCiB1c2luZyBpdHMgb3duIGZpbGVzeXN0ZW0uIikpOwogCiAg IGMgPSBhZGRfY29tICgidHZhcmlhYmxlIiwgY2xhc3NfdHJhY2UsIHRyYWNl X3ZhcmlhYmxlX2NvbW1hbmQsXygiXAotLS0gYS90cmFjZXBvaW50LmgKKysr IGIvdHJhY2Vwb2ludC5oCkBAIC0yNDYsNiArMjQ2LDcgQEAgZXh0ZXJuIHZv aWQgdmFsaWRhdGVfYWN0aW9ubGluZSAoY2hhciAqKgogCiBleHRlcm4gdm9p ZCBlbmRfYWN0aW9uc19wc2V1ZG9jb21tYW5kIChjaGFyICphcmdzLCBpbnQg ZnJvbV90dHkpOwogZXh0ZXJuIHZvaWQgd2hpbGVfc3RlcHBpbmdfcHNldWRv Y29tbWFuZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KTsKK2V4dGVybiB2 b2lkIGNvbGxlY3RfcHNldWRvY29tbWFuZCAoY2hhciAqYXJncywgaW50IGZy b21fdHR5KTsKIAogZXh0ZXJuIHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJs ZSAqZmluZF90cmFjZV9zdGF0ZV92YXJpYWJsZSAoY29uc3QgY2hhciAqbmFt ZSk7CiBleHRlcm4gc3RydWN0IHRyYWNlX3N0YXRlX3ZhcmlhYmxlICpjcmVh dGVfdHJhY2Vfc3RhdGVfdmFyaWFibGUgKGNvbnN0IGNoYXIgKm5hbWUpOwo= --e89a8fb1f50665dbb804d1214978--