From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28378 invoked by alias); 23 Jan 2013 13:33:49 -0000 Received: (qmail 28353 invoked by uid 22791); 23 Jan 2013 13:33:47 -0000 X-SWARE-Spam-Status: No, hits=-4.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP,TW_EG,TW_RV,TW_TR,TW_XS,TW_XZ X-Spam-Check-By: sourceware.org Received: from mail-oa0-f43.google.com (HELO mail-oa0-f43.google.com) (209.85.219.43) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 23 Jan 2013 13:33:22 +0000 Received: by mail-oa0-f43.google.com with SMTP id k1so8421936oag.16 for ; Wed, 23 Jan 2013 05:33:21 -0800 (PST) X-Received: by 10.182.54.103 with SMTP id i7mr947153obp.62.1358948001504; Wed, 23 Jan 2013 05:33:21 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.84.5 with HTTP; Wed, 23 Jan 2013 05:32:41 -0800 (PST) In-Reply-To: <1358519377.21794.2@abidh-ubunto1104> References: <1358519377.21794.2@abidh-ubunto1104> From: Hui Zhu Date: Wed, 23 Jan 2013 13:33:00 -0000 Message-ID: Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave command To: Hafiz Abid Qadeer Cc: Tom Tromey , "Zhu, Hui" , "gdb-patches@sourceware.org" Content-Type: multipart/mixed; boundary=14dae93a113de5dbe304d3f4bc68 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: 2013-01/txt/msg00547.txt.bz2 --14dae93a113de5dbe304d3f4bc68 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 17132 Hi Abid, I post a new version according to your comments. Following part have the reply for your comments. Thanks, Hui 2013-01-23 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. * breakpoint.c (tracepoint_count): Remove static. * 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 (stack.h): New include. (collect_pseudocommand): Add extern. On Fri, Jan 18, 2013 at 10:29 PM, Hafiz Abid Qadeer wrote: > On 18/01/13 01:16:24, Hui Zhu wrote: >> >> Hi Abid, >> >> Thanks for your review. >> >> On Mon, Jan 14, 2013 at 10:27 PM, Abid, Hafiz >> wrote: >> > Hi Hui, >> > I tested your patch and found a few problems. I used 'tsave -ctf output' >> > and then used babeltrace to get a text dump of the output. >> > >> > 1. In case of array, the tracing results are off by one. >> > 2. Struct members values are not shown correctly in case of bitfields. >> >> Could you give me some example about this 2 issues? >> And I just fixed some type issue with while-stepping. I think maybe >> they were fixed in the new patch. >> > I made an array of size 5 and gave it elements values from 5 to 9. I > collected this array in trace. After trace was finished, GDB will show > correct values of all the array elements. But in babeltrace, the first > element would have value of 6 and last will have a garbage value. So it > looked that values are off by one index. > > For bitfield, I had a structure like this and I observed that value of b was > not correct in babeltrace. > struct test_main > { > int a; > int b: 16; > int c: 16; > }; > > I will send you my test application offline. Thanks. This issue is because old patch doesn't support bitfields. I add them in the new patch. But babeltrace doesn't support gcc bitfields. So I didn't update test for bitfields. > > >> > 3. When I use while-stepping on tracepoints actions, I see some error in >> > the babeltrace. >> >> Fixed. And I think it is a good idea for test. So I updated test for >> this issue. >> >> > 4. It looks that TYPE_CODE_FLT is not supported which cause the >> > following warning when I use collect $reg on the tracepoint actions. >> > "warning: error saving tracepoint 2 "$st0" to CTF file: type is not >> > support." >> >> Yes. current patch is still not support all the type of GDB. >> >> > >> > Below are some comments on the code. I see many tab characters in the >> > patch. It may be problem in my editor but something to keep an eye on. >> > >> >>+#define CTF_PACKET_SIZE 4096 >> > It may be my ignorance but is this size sufficient? Should it be >> > possible to increase the limit using some command? >> >> Yes, add a command to change current ctf_packet_size is a good idea. >> Do you mind I add it after CTF patch get commit? Then we can keep >> focus on the current function of CTF patch. > > I dont have any problem with fixed size. I was just giving an idea that you > may want to implement in future. > > >> >> > >> >>+ /* This is the content size of current packet. */ >> >>+ size_t content_size; >> > ... >> >>+ /* This is the content size of current packet and event that is >> >>+ being written to file. >> >>+ Check size use it. */ >> >>+ size_t current_content_size; >> > I don't fully understand the difference between these 2 variables. >> > Probably they need a more helpful comment. >> > >> >> I update it to: >> /* This is the temp value of CONTENT_SIZE when GDB write a event to >> CTF file. >> If this event save success, CURRENT_CONTENT_SIZE will set to >> CONTENT_SIZE. */ >> size_t current_content_size; >> >> >> +error saving tracepoint %d \"%s\" to CTF file: type is not support."), >> > 'supported' instead of 'support'. >> >> Fixed. >> >> > >> >>+ sprintf (regname, "$%s", name); >> >>+ sprintf (file_name, "%s/%s", dirname, CTF_METADATA_NAME); >> >>+ sprintf (file_name, "%s/%s", dirname, CTF_DATASTREAM_NAME); >> > Please use xsnprintf. There are also a bunch of snprintf calls in this >> > file. >> >> The size of file_name is alloca as the right size for both this >> string. So I think this part doesn't need xsnprintf. >> file_name = alloca (strlen (dirname) + 1 >> + strlen (CTF_DATASTREAM_NAME) + 1); >> > >> >>+ case '$': >> >>+ collect->ctf_str >> >>+ = ctf_save_metadata_change_char >> >> (collect->ctf_str, >> >>+ i, "dollar"); >> > This will change expression like $eip in gdb to dollar_eip in ctf. Does >> > CTF forbid these characters? >> >> No. > > In that case, the question will be why we do this change from $eip to > dollar_eip. Oops, sorry for my mistake. CTF doesn't support this char like $ or something else. > > >> >> > >> >>+static void >> >>+tsv_save_do_loc_arg_collect (const char *print_name, >> >>+ struct symbol *sym, >> >>+ void *cb_data) >> >>+{ >> >>+ struct loc_arg_collect_data *p = cb_data; >> >>+ char *name; >> >>+ >> >>+ name = alloca (strlen (print_name) + 1); >> >>+ strcpy (name, print_name); >> >>+ ctf_save_collect_get_1 (p->tcsp, p->tps, name); >> >>+} >> > Is there any real need to make a copy of the print_name? I think it can >> > be passed directly to the ctf_save_collect_get_1. >> >> This is because print_name is a const but ctf_save_collect_get_1's >> argument name need to be a string that is not a const. >> Added comments for that. > > You probably would have done a cast or perhaps ctf_save_collect_get_1's > argument can be changed to const. > Fixed. > >> >> > >> >>+ tmp = alloca (strlen (collect->ctf_str) + 30); >> >>+ strcpy (tmp, collect->ctf_str); >> >>+ while (1) >> >>+ { >> >>+ struct ctf_save_collect_s *collect2; >> >>+ int i = 0; >> >>+ >> >>+ for (collect2 = tps->collect; collect2; >> >>+ collect2 = collect2->next) >> >>+ { >> >>+ if (collect2->ctf_str >> >>+ && strcmp (collect2->ctf_str, tmp) == 0) >> >>+ break; >> >>+ } >> >>+ if (collect2 == NULL) >> >>+ break; >> >>+ >> >>+ snprintf (tmp, strlen (collect->ctf_str) + 30, >> >>+ "%s_%d", collect->ctf_str, i++); >> >>+ } >> > What is the purpose of this loop? It only writes a new string in the tmp >> > local variable which is not used after the loop. >> >> Fixed. >> >> > >> >>+\"%s\" of tracepoint %d rename to \"%s\" in CTF file."), >> > I think 'is renamed' will be better instead of rename here. >> >> Fixed. >> >> > >> >>+ if (try_count > 1 || 4 + 4 + 4 == tcs.content_size) >> > what is the significance of this 4 + 4 + 4 >> >> Change it to CONTENT_HEADER_SIZE >> >> > >> >>+traceframe %d of tracepoint %d need save data that bigger than packet >> >> size %d.\n\ >> > should be "needs to save data that is bigger than the packet size" >> >> Fixed. >> >> > >> >>+traceframe %d is dropped because try to get the value of \"%s\" got >> >> error: %s"), >> > This probably needs to re-phrased. >> >> Fixed. >> >> > >> > Also many comments can be improved grammatically. This will make them >> > easier to understand. Please let me know if I need any help there. >> > >> > Thanks, >> > Abid >> >> Post a new version according to your comments. >> >> Thanks, >> Hui >> >> 2013-01-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. >> * breakpoint.c (tracepoint_count): Remove static. >> * 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 (stack.h): New include. >> (collect_pseudocommand): Add extern. >> >> > >> > ________________________________________ >> > From: gdb-patches-owner@sourceware.org >> > [gdb-patches-owner@sourceware.org] on behalf of Hui Zhu [teawater@gmail.com] >> > Sent: Monday, January 14, 2013 5:18 AM >> > To: Tom Tromey >> > Cc: Zhu, Hui; gdb-patches@sourceware.org >> > Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave >> > command >> > >> > Hi Tom, >> > >> > I found a bug when I use test to test this patch. >> > So I post a new version to fix this bug. >> > The change of this patch is change the same type check to: >> > static void >> > ctf_save_type_define_write (struct ctf_save_s *tcsp, struct type *type) >> > { >> > struct ctf_save_type_s *t; >> > >> > for (t = tcsp->type; t; t = t->next) >> > { >> > if (t->type == type >> > || (TYPE_NAME (t->type) && TYPE_NAME (type) >> > && strcmp (TYPE_NAME (t->type), TYPE_NAME (type)) == 0)) >> > return; >> > } >> > >> > Thanks, >> > Hui >> > >> > On Tue, Jan 8, 2013 at 9:40 AM, Hui Zhu wrote: >> >> Hi Tom, >> >> >> >> Thanks for your review. >> >> >> >> On Fri, Jan 4, 2013 at 5:36 AM, Tom Tromey wrote: >> >>>>>>>> "Hui" == Hui Zhu writes: >> >>> >> >>> 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. >> >>> >> >>> Hui> I added some comments in the new patches. >> >>> >> >>> I looked at the new patches and did not see comments. For example, I >> >>> looked at this struct I quoted above. >> >>> >> >>> Every new structure, field, and function ought to have a comment. >> >> >> >> OK. I added comments for them in the new patch. >> >> >> >>> >> >>> >> >>> Hui> + case TYPE_CODE_ARRAY: >> >>> Hui> + for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; >> >>> Hui> + type = TYPE_TARGET_TYPE (type)) >> >>> Hui> + ; >> >>> >> >>> Tom> You probably want some check_typedef calls in there. >> >>> >> >>> Hui> Because typedef will be handle as a type in this part, so this >> >>> part >> >>> Hui> doesn't need check_typedef. >> >>> >> >>> That seems peculiar to me, but I don't really know CTF. >> >>> In this case you need a comment, since the result will be non-obvious >> >>> to >> >>> gdb developers. >> >>> >> >>> Tom> check_typedef; though if your intent is to peel just a single >> >>> layer, >> >>> Tom> then it is a bit trickier -- I think the best you can do is >> >>> always call >> >>> Tom> it, then use TYPE_TARGET_TYPE if it is non-NULL or the result of >> >>> Tom> check_typedef otherwise. >> >>> >> >>> Hui> If use check_typedef, this part will generate the define that >> >>> Hui> different with the type descriptor of the code. >> >>> >> >>> You need to call check_typedef before you can even examine >> >>> TYPE_TARGET_TYPE of a typedef. This is what I meant by using it >> >>> before >> >>> using TYPE_TARGET_TYPE. Otherwise with stubs I think you will see >> >>> crashes -- check_typedef is what sets this field. >> >>> >> >>> If you then use TYPE_TARGET_TYPE and get NULL, you ought to instead >> >>> use >> >>> the result of check_typedef. This means the stub had to resolve to a >> >>> typedef in a different objfile. >> >> >> >> I change it to following part: >> >> case TYPE_CODE_ARRAY: >> >> /* This part just to get the real name of this array. >> >> This part should keep typedef if it can. */ >> >> for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; >> >> type = TYPE_TARGET_TYPE (type) ? TYPE_TARGET_TYPE (type) >> >> : check_typedef (type)) >> >> ; >> >> >> >>> >> >>> Hui> If use TYPE_TARGET_TYPE, it will generate following metadata: >> >>> Hui> typedef char test_t1; >> >>> Hui> typedef test_t1 test_t2; >> >>> Hui> typedef test_t2 test_t3; >> >>> >> >>> I suppose there should be a test case doing this. >> >> >> >> OK. I will write a test for all this function. >> >> >> >>> >> >>> Hui> + case TYPE_CODE_PTR: >> >>> Hui> + align_size = TYPE_LENGTH (type); >> >>> Hui> + break; >> >>> >> >>> Tom> Surely the alignment rules are ABI dependent. >> >>> Tom> I would guess that what you have will work in many cases, but >> >>> definitely >> >>> Tom> not all of them. >> >>> >> >>> Hui> All the type will be handle and record in function >> >>> Hui> ctf_save_type_check_and_write. >> >>> Hui> The size align will be handle in this function too. >> >>> >> >>> I don't think this really addresses the issue. >> >>> Not all platforms use the alignment rules currently coded in >> >>> ctf_save_type_check_and_write. But maybe it doesn't matter. >> >>> >> >>> 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")); >> >>> Tom> >> >>> Tom> These messages could be improved. >> >>> >> >>> Actually, I don't think get_current_frame can return NULL, can it? >> >>> >> >>> For the second error, how about "could not find previous frame"? >> >> >> >> Fixed. >> >> >> >>> >> >>> Hui> + warning (_("\ >> >>> Hui> +Not save \"%s\" of tracepoint %d to ctf file because get its >> >>> Hui> value fail: %s"), >> >>> Hui> + str, tps->tp->base.number, e.message); >> >>> Tom> >> >>> Tom> Likewise. >> >>> >> >>> Hui> Could you help me with this part? :) >> >>> >> >>> How about "error saving tracepoint %d to CTF file %s: %s". >> >> >> >> It is more better. I updated them all. >> >> >> >>> >> >>> Tom> Although, this approach just seems weird, since it seems like you >> >>> Tom> already have the symbol and you want its value; constructing and >> >>> parsing >> >>> Tom> an expression to get this is very roundabout. >> >>> Tom> >> >>> Tom> I'm not sure I really understand the goal here; but the parsing >> >>> approach >> >>> Tom> is particularly fragile if you have shadowing. >> >>> >> >>> Hui> Function ctf_save_collect_get will parse the collect string and >> >>> add >> >>> Hui> them to struct. >> >>> Hui> Each tracepoint will call this function just once. >> >>> >> >>> Ok, I don't know the answer here. >> >> >> >> I am sorry that this part is not very clear. So I update the comments >> >> of ctf_save_collect_get to: >> >> /* Get var that want to collect from STR and put them to TPS->collect. >> >> This function will not be call when GDB add a new TP. */ >> >> >> >> static void >> >> ctf_save_collect_get (struct ctf_save_s *tcsp, struct ctf_save_tp_s >> >> *tps, >> >> char *str) >> >> >> >> How about this? >> >> >> >>> >> >>> Tom> Hmm, a lot of this code looks like code from tracepoint.c. >> >>> Tom> I think it would be better to share the code if that is possible. >> >>> >> >>> Hui> I tried to share code with function add_local_symbols. But it is >> >>> not >> >>> Hui> a big function and use different way to get block. >> >>> >> >>> I wonder why, and whether this means that the different ways of saving >> >>> will in fact write out different data. >> >> >> >> I added function add_local_symbols_1 for that. >> >> >> >>> >> >>> Hui> + if (collect->expr) >> >>> Hui> + free_current_contents (&collect->expr); >> >>> >> >>> Tom> Why free_current_contents here? >> >>> Tom> That seems weird. >> >>> >> >>> Hui> If this collect is $_ret, it will not have collect->expr. Or >> >>> maybe >> >>> Hui> this collect will be free because when setup this collect get >> >>> Hui> error. So check it before free it. >> >>> >> >>> You can just write xfree (collect->expr). >> >>> You don't need a NULL check here. >> >>> This applies to all those xfree calls. >> >>> >> >> >> >> OK. Fixed. >> >> >> >> I post a new version. Please help me review it. >> >> >> >> Thanks, >> >> Hui >> >> >> >> 2013-01-08 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 (stack.h): New include. >> >> (collect_pseudocommand): Add extern. >> > --14dae93a113de5dbe304d3f4bc68 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_hcaiiu1f0 Content-length: 58764 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTUwOCw3 ICs1MDgsNyBAQCBTRVJfSEFSRFdJUkUgPSBAU0VSX0hBUkRXSVJFQAogIyBU aGUgYHJlbW90ZScgZGVidWdnaW5nIHRhcmdldCBpcyBzdXBwb3J0ZWQgZm9y IG1vc3QgYXJjaGl0ZWN0dXJlcywKICMgYnV0IG5vdCBhbGwgKGUuZy4gOTYw KQogUkVNT1RFX09CUyA9IHJlbW90ZS5vIGRjYWNoZS5vIHRyYWNlcG9pbnQu byBheC1nZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vIFwKLQly ZW1vdGUtbm90aWYubworCXJlbW90ZS1ub3RpZi5vIGN0Zi5vCiAKICMgVGhp cyBpcyByZW1vdGUtc2ltLm8gaWYgYSBzaW11bGF0b3IgaXMgdG8gYmUgbGlu a2VkIGluLgogU0lNX09CUyA9IEBTSU1fT0JTQApAQCAtNzU2LDcgKzc1Niw3 IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHIK IAlyZWdzZXQuYyBzb2wtdGhyZWFkLmMgd2luZG93cy10ZXJtY2FwLmMgXAog CWNvbW1vbi9nZGJfdmVjcy5jIGNvbW1vbi9jb21tb24tdXRpbHMuYyBjb21t b24veG1sLXV0aWxzLmMgXAogCWNvbW1vbi9wdGlkLmMgY29tbW9uL2J1ZmZl ci5jIGdkYi1kbGZjbi5jIGNvbW1vbi9hZ2VudC5jIFwKLQljb21tb24vZm9y bWF0LmMKKwljb21tb24vZm9ybWF0LmMgY3RmLmMKIAogTElOVEZJTEVTID0g JChTRklMRVMpICQoWVlGSUxFUykgJChDT05GSUdfU1JDUykgaW5pdC5jCiAK QEAgLTgzMiw3ICs4MzIsNyBAQCBnbnVsaWIvaW1wb3J0L3N0ZGRlZi5pbi5o IGdudWxpYi9pbXBvcnQvCiBjb21tb24vY29tbW9uLXV0aWxzLmggY29tbW9u L3htbC11dGlscy5oIGNvbW1vbi9idWZmZXIuaCBjb21tb24vcHRpZC5oIFwK IGNvbW1vbi9mb3JtYXQuaCBjb21tb24vaG9zdC1kZWZzLmggdXRpbHMuaCBj b21tb24vcXVldWUuaCBcCiBjb21tb24vbGludXgtb3NkYXRhLmggZ2RiLWRs ZmNuLmggYXV0by1sb2FkLmggcHJvYmUuaCBzdGFwLXByb2JlLmggXAotZ2Ri X2JmZC5oIHNwYXJjLXJhdmVuc2Nhci10aHJlYWQuaCBwcGMtcmF2ZW5zY2Fy LXRocmVhZC5oCitnZGJfYmZkLmggc3BhcmMtcmF2ZW5zY2FyLXRocmVhZC5o IHBwYy1yYXZlbnNjYXItdGhyZWFkLmggY3RmLmgKIAogIyBIZWFkZXIgZmls ZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGlyIGluIHRoZW0sIG9yIHdoaWNo IGFyZSBpbiBvYmpkaXIuCiAKLS0tIGEvYnJlYWtwb2ludC5jCisrKyBiL2Jy ZWFrcG9pbnQuYwpAQCAtNjEwLDcgKzYxMCw3IEBAIHN0YXRpYyBpbnQgcHJl dl9icmVha3BvaW50X2NvdW50OwogCiAvKiBOdW1iZXIgb2YgbGFzdCB0cmFj ZXBvaW50IG1hZGUuICAqLwogCi1zdGF0aWMgaW50IHRyYWNlcG9pbnRfY291 bnQ7CitpbnQgdHJhY2Vwb2ludF9jb3VudDsKIAogc3RhdGljIHN0cnVjdCBj bWRfbGlzdF9lbGVtZW50ICpicmVha3BvaW50X3NldF9jbWRsaXN0Owogc3Rh dGljIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpicmVha3BvaW50X3Nob3df Y21kbGlzdDsKLS0tIC9kZXYvbnVsbAorKysgYi9jdGYuYwpAQCAtMCwwICsx LDEzNDQgQEAKKy8qIENURiBmb3JtYXQgc3VwcG9ydC4KKworICAgQ29weXJp Z2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNp bmNsdWRlICJjdGYuaCIKKyNpbmNsdWRlICJ0cmFjZXBvaW50LmgiCisjaW5j bHVkZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlICJnZGJjbWQuaCIKKyNpbmNs dWRlICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAic3RhY2suaCIKKworI2lu Y2x1ZGUgPGN0eXBlLmg+CisKKy8qIEZvbGxvd2luZyBwYXJ0IGlzIGZvciB0 c2F2ZS4gICovCisKKyNkZWZpbmUgQ1RGX01BR0lDCQkweEMxRkMxRkMxCisj ZGVmaW5lIENURl9TQVZFX01BSk9SCQkxCisjZGVmaW5lIENURl9TQVZFX01J Tk9SCQk4CisKKyNkZWZpbmUgQ1RGX01FVEFEQVRBX05BTUUJIm1ldGFkYXRh IgorI2RlZmluZSBDVEZfREFUQVNUUkVBTV9OQU1FCSJkYXRhc3RyZWFtIgor CisjZGVmaW5lIENURl9QQUNLRVRfU0laRQkJNDA5NgorCisjZGVmaW5lIEFM SUdOX1NJWkUoc2l6ZSwgYWxpZ24pIFwKKwkoKCgoYWxpZ24pICsgKHNpemUp IC0gMSkgJiAofigoYWxpZ24pIC0gMSkpKSAtIChzaXplKSkKKworLyogVGhl IGVudHJ5IG9mIGNvbGxlY3QgbGlzdCBvZiBhIFRQLiAgKi8KKworc3RydWN0 IGN0Zl9zYXZlX2NvbGxlY3RfcworeworICBzdHJ1Y3QgY3RmX3NhdmVfY29s bGVjdF9zICpuZXh0OworCisgIC8qIFBvaW50IHRoZSBvcmlnaW5hbCBjb2xs ZWN0IHN0cmluZy4gICovCisKKyAgY2hhciAqc3RyOworCisgIC8qIFBvaW50 IHN0cmluZyB0aGUgY29udmVydCBmcm9tIFNUUiB0byB0aGUgZm9ybWF0Cisg ICAgIHRoYXQgY2FuIHNhdmUgdG8gQ1RGLiAqLworCisgIGNoYXIgKmN0Zl9z dHI7CisKKyAgLyogQWxpZ24gc2l6ZSBvZiB0aGlzIGNvbGxlY3QuICAqLwor CisgIGludCBhbGlnbl9zaXplOworCisgIC8qIFRoZSBleHByZXNzaW9uIHRo YXQgZ2V0IGZyb20gU1RSLiAqLworCisgIHN0cnVjdCBleHByZXNzaW9uICpl eHByOworCisgIC8qIFRoZSB0eXBlIG9mIHRoaXMgY29sbGVjdC4gICovCisK KyAgc3RydWN0IHR5cGUgKnR5cGU7CisKKyAgLyogSWYgdHJ1ZSwgdGhpcyBj b2xsZWN0IGlzICRfcmV0LiAgKi8KKworICBpbnQgaXNfcmV0OworfTsKKwor LyogVGhlIGVudHJ5IG9mIHRyYWNlcG9pbnQgbGlzdCB0aGF0IHdpbGwgc2F2 ZSB0byBDVEYuICAqLworCitzdHJ1Y3QgY3RmX3NhdmVfdHBfcworeworICBz dHJ1Y3QgY3RmX3NhdmVfdHBfcyAqbmV4dDsKKworICBzdHJ1Y3QgdHJhY2Vw b2ludCAqdHA7CisKKyAgLyogSWYgdHJ1ZSwgdGhpcyBpcyB0aGUgc3RlcCBj b2xsZWN0IG9mIHRoaXMgVFAuCisgICAgIERpdmlkZSBUUCB0byBub24tc3Rl cCBjb2xsZWN0IGFuZCBzdGVwIGNvbGxlY3QKKyAgICAgYmVjYXVzZSB0aGV5 IGNvbGxlY3QgZGlmZmVyZW50IHZhbHVlLiAgKi8KKworICBpbnQgc3RlcHBp bmdfZnJhbWU7CisKKyAgLyogVGhpcyBpcyB0aGUgaWQgdGhhdCB3aWxsIHNh dmUgdG8gQ1RGIGZpbGUuCisgICAgIERvZXNuJ3QgdXNlIFRQUy0+VFAtPkJB U0UuTlVNQkVSIGRpcmVjdGx5IGJlY2F1c2Ugc3RlcHBpbmdfZnJhbWUKKyAg ICAgZXZlbnQgbmVlZCB1c2UgZGlmZmVyZW50IHdpdGggb3JpZ2luYWwgZXZl bnQuICAqLworICBpbnQgaWQ7CisKKyAgLyogVGhlIGNvbGxlY3QgbGlzdCBm b3IgdGhpcyBUUC4gICovCisKKyAgc3RydWN0IGN0Zl9zYXZlX2NvbGxlY3Rf cyAqY29sbGVjdDsKKworICAvKiBFYWNoIHRyYWNlZnJhbWUgZW50cnkgb2Yg YSB0cmFjZXBvaW50IHdpbGwgc2F2ZSBhcyBhIGRhdGEgZm9ybWF0CisgICAg IGxpa2UgYSBzdHJ1Y3QuCisgICAgIFRoaXMgaXMgdGhlIGFsaWduIHNpemUg b2YgdGhpcyBzdHJ1Y3QuICAqLworCisgIGludCBhbGlnbl9zaXplOworCisg IC8qIElmIHRydWUsIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0IGlzIHZhcmlh YmxlLiAgKi8KKworICBpbnQgaXNfdmFyaWFibGVfbGVuZ3RoOworCisgIC8q IElmIHRydWUsIGFsbCB0aGUgdHJhY2VmcmFtZSBlbnRyeSBvZiB0aGlzIFRQ IHdpbGwgbm90IHNhdmUgdG8gQ1RGLgorICAgICBBZGQgYSBmbGFnIGluc3Rl YWQgb2YganVzdCByZW1vdmUgdGhpcyBzdHJ1Y3QgYmVjYXVzZSBHREIganVz dCBjYW4KKyAgICAgZ2V0IHRyYWNlcG9pbnQgaW5mb3JtYXRpb24gdGhyb3Vn aCB0cmFjZWZyYW1lIGVudHJ5LgorICAgICBJZiBqdXN0IHJlbW92ZSB0aGlz IHN0cnVjdCwgR0RCIHdpbGwgYWRkIGEgbmV3IHN0cnVjdCB3aGVuIEdEQiBn ZXQKKyAgICAgYW5vdGhlciB0cmFjZWZyYW1lIG9mIHRoaXMgVFAuCisgICAg IFVzZSBhIGZsYWcsIHdoZW4gR0RCIGdldCBhbm90aGVyIHRyYWNlZnJhbWUg b2YgdGhpcyBUUCwgR0RCIHdpbGwKKyAgICAga25vdyB0aGlzIHRyYWNlZnJh bWUgbmVlZCB0byBiZSBkcm9wcGVkIHdoZW4gaXQgZ2V0IGl0IHRocm91Z2gK KyAgICAgdGhpcyBmbGFnLiAgKi8KKworICBpbnQgaXNfZHJvcHBlZDsKK307 CisKKy8qIFRoZSBlbnRyeSBvZiB0eXBlIGxpc3QgdGhhdCB3aWxsIHNhdmUg dG8gQ1RGLiAgKi8KKworc3RydWN0IGN0Zl9zYXZlX3R5cGVfcworeworICBz dHJ1Y3QgY3RmX3NhdmVfdHlwZV9zICpuZXh0OworCisgIHN0cnVjdCB0eXBl ICp0eXBlOworfTsKKworLyogVGhlIGRhdGEgc3RydWN0IGZvciBDVEZfU0FW RS4gICovCisKK3N0cnVjdCBjdGZfc2F2ZV9zCit7CisgIEZJTEUgKm1ldGFk YXRhX2ZkOworICBGSUxFICpkYXRhc3RyZWFtX2ZkOworCisgIC8qIFRoaXMg aXMgdGhlIGNvbnRlbnQgc2l6ZSBvZiBjdXJyZW50IHBhY2tldC4gICovCisg IHNpemVfdCBjb250ZW50X3NpemU7CisKKyAgLyogVGhpcyBpcyB0aGUgYmVn aW4gb2Zmc2V0IG9mIGN1cnJlbnQgcGFja2V0LiAgKi8KKyAgbG9uZyBwYWNr ZXRfYmVnaW47CisKKyAgLyogSWYgdHJ1ZSwgbmVlZCBjaGVjayBpZiBjb250 ZW50X3NpemUgYmlnZ2VyIHRoYW4gQ1RGX1BBQ0tFVF9TSVpFLiAgKi8KKyAg aW50IGNoZWNrX3NpemU7CisKKyAgLyogVGhpcyBpcyB0aGUgdGVtcCB2YWx1 ZSBvZiBDT05URU5UX1NJWkUgd2hlbiBHREIgd3JpdGUgYSBldmVudCB0bwor ICAgICBDVEYgZmlsZS4KKyAgICAgSWYgdGhpcyBldmVudCBzYXZlIHN1Y2Nl c3MsIENVUlJFTlRfQ09OVEVOVF9TSVpFIHdpbGwgc2V0IHRvCisgICAgIENP TlRFTlRfU0laRS4gICovCisgIHNpemVfdCBjdXJyZW50X2NvbnRlbnRfc2l6 ZTsKKworICAvKiBTYXZlIHRoZSBudW1iZXIgb2YgdHJhY2UgZnJhbWUgYmVm b3JlIGNhbGwgY3RmX3NhdmUuCisgICAgIFNldCBpdCBiYWNrIHdoZW4gcmV0 dXJuIGN0Zl9zYXZlLiAgKi8KKyAgaW50IG9sZF90cmFjZWZyYW1lX251bTsK KworICAvKiBUcmFjZXBvaW50IGxpc3QuICAqLworICBzdHJ1Y3QgY3RmX3Nh dmVfdHBfcyAqdHA7CisKKyAgLyogVHlwZSBsaXN0LiAgKi8KKyAgc3RydWN0 IGN0Zl9zYXZlX3R5cGVfcyAqdHlwZTsKKworICBjb25zdCBjaGFyICp0YWI7 Cit9OworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfZndyaXRlIChGSUxFICpm ZCwgY29uc3QgZ2RiX2J5dGUgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisgIGlm IChmd3JpdGUgKGJ1Ziwgc2l6ZSwgMSwgZmQpICE9IDEpCisgICAgZXJyb3Ig KF8oIlVuYWJsZSB0byB3cml0ZSBmaWxlIGZvciBzYXZpbmcgdHJhY2UgZGF0 YSAoJXMpIiksCisJICAgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKK30KKwor c3RhdGljIHZvaWQKK2N0Zl9zYXZlX2Z3cml0ZV9mb3JtYXRfMSAoRklMRSAq ZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBj aGFyICpsaW5lYnVmZmVyOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFu dXBzOworCisgIGxpbmVidWZmZXIgPSB4c3RydnByaW50ZiAoZm9ybWF0LCBh cmdzKTsKKyAgb2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVwICh4ZnJlZSwg bGluZWJ1ZmZlcik7CisgIGN0Zl9zYXZlX2Z3cml0ZSAoZmQsIGxpbmVidWZm ZXIsIHN0cmxlbiAobGluZWJ1ZmZlcikpOworICBkb19jbGVhbnVwcyAob2xk X2NsZWFudXBzKTsKK30KKworLyogV3JpdGUgZGF0YSBpbiBGT1JNQVQgdG8g RkQuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfZndyaXRlX2Zvcm1h dCAoRklMRSAqZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2 YV9saXN0IGFyZ3M7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7Cisg IGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXRfMSAoZmQsIGZvcm1hdCwgYXJncyk7 CisgIHZhX2VuZCAoYXJncyk7Cit9CisKKy8qIFdyaXRlIEJVRiB0aGF0IHNp emUgaXMgU0laRSB0byBkYXRhc3RyZWFtIGZpbGUuICAqLworCitzdGF0aWMg aW50CitjdGZfc2F2ZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3As IGNvbnN0IGdkYl9ieXRlICpidWYsIHNpemVfdCBzaXplKQoreworICBpZiAo dGNzcC0+Y2hlY2tfc2l6ZSkKKyAgICB7CisgICAgICBpZiAodGNzcC0+Y3Vy cmVudF9jb250ZW50X3NpemUgKyBzaXplID4gQ1RGX1BBQ0tFVF9TSVpFKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGN0Zl9zYXZlX2Z3cml0 ZSAodGNzcC0+ZGF0YXN0cmVhbV9mZCwgYnVmLCBzaXplKTsKKworICB0Y3Nw LT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArPSBzaXplOworCisgIHJldHVybiAw OworfQorCisvKiBTZXQgZGF0YXN0cmVhbSBmaWxlIHBvc2l0aW9uIGluZGlj YXRvciBhY2NvcmRpbmcgdG8gT0ZGU0VUCisgICBhbmQgV0hFTkNFLiAgKi8K Kworc3RhdGljIGludAorY3RmX3NhdmVfZnNlZWsgKHN0cnVjdCBjdGZfc2F2 ZV9zICp0Y3NwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkKK3sKKyAgaWYg KHdoZW5jZSA9PSBTRUVLX0NVUiAmJiB0Y3NwLT5jaGVja19zaXplKQorICAg IHsKKyAgICAgIGlmICh0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArIG9m ZnNldCA+IENURl9QQUNLRVRfU0laRSkKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICBpZiAoZnNlZWsgKHRjc3AtPmRhdGFzdHJlYW1fZmQsIG9m ZnNldCwgd2hlbmNlKSkKKyAgICBlcnJvciAoXygiVW5hYmxlIHRvIHNlZWsg ZmlsZSBmb3Igc2F2aW5nIHRyYWNlIGRhdGEgKCVzKSIpLAorCSAgIHNhZmVf c3RyZXJyb3IgKGVycm5vKSk7CisKKyAgaWYgKHdoZW5jZSA9PSBTRUVLX0NV UikKKyAgICB0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArPSBvZmZzZXQ7 CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEFsaWduZWQgQUxJR05fU0laRSB3 cml0ZSBCVUYgdGhhdCBzaXplIGlzIFNJWkUKKyAgIHRvIGRhdGFzdHJlYW0g ZmlsZS4gICovCisKK3N0YXRpYyBpbnQKK2N0Zl9zYXZlX2FsaWduX3dyaXRl IChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgY29uc3QgZ2RiX2J5dGUgKmJ1 ZiwKKwkJICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbl9zaXplKQor eworICBpZiAoY3RmX3NhdmVfZnNlZWsgKHRjc3AsCisJCSAgICAgIEFMSUdO X1NJWkUgKHRjc3AtPmN1cnJlbnRfY29udGVudF9zaXplLCBhbGlnbl9zaXpl KSwKKwkJICAgICAgU0VFS19DVVIpKQorICAgIHJldHVybiAtMTsKKworICBp ZiAoY3RmX3NhdmVfd3JpdGUgKHRjc3AsIGJ1Ziwgc2l6ZSkpCisgICAgcmV0 dXJuIC0xOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjdGZf c2F2ZV90eXBlX2RlZmluZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRj c3AsCisJCQkJCXN0cnVjdCB0eXBlICp0eXBlLCBpbnQgbG9jYWwpOworCisv KiBXcml0ZSB0aGUgdHlwZSBwYXJ0IG9mIGEgdmFyIGRlZmluZSB0byBDVEYg bWV0YWRhdGEgZmlsZS4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV90 eXBlX25hbWVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1 Y3QgdHlwZSAqdHlwZSkKK3sKKyAgc3dpdGNoIChUWVBFX0NPREUgKHR5cGUp KQorICAgIHsKKyAgICBjYXNlIFRZUEVfQ09ERV9BUlJBWToKKyAgICAgIC8q IFRoaXMgcGFydCBqdXN0IHRvIGdldCB0aGUgcmVhbCBuYW1lIG9mIHRoaXMg YXJyYXkuCisgICAgICAgICBUaGlzIHBhcnQgc2hvdWxkIGtlZXAgdHlwZWRl ZiBpZiBpdCBjYW4uICAqLworICAgICAgZm9yICg7IFRZUEVfQ09ERSAodHlw ZSkgPT0gVFlQRV9DT0RFX0FSUkFZOworCSAgIHR5cGUgPSBUWVBFX1RBUkdF VF9UWVBFICh0eXBlKSA/IFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpCisJCQkJ CSAgOiBjaGVja190eXBlZGVmICh0eXBlKSkKKwk7CisgICAgICBpZiAoVFlQ RV9OQU1FICh0eXBlKSkKKyAgICAgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1h dCAodGNzcC0+bWV0YWRhdGFfZmQsICIlcyIsIFRZUEVfTkFNRSAodHlwZSkp OworICAgICAgZWxzZQorCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0 Y3NwLCB0eXBlLCAxKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUWVBF X0NPREVfUFRSOgorICAgICAgaWYgKFRZUEVfTEVOR1RIICh0eXBlKSA9PSA4 KQorCWN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2Zk LCAidWludDY0X3QiKTsKKyAgICAgIGVsc2UKKwljdGZfc2F2ZV9md3JpdGVf Zm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgInVpbnQzMl90Iik7CisgICAg ICBicmVhazsKKworICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoKKyAgICBj YXNlIFRZUEVfQ09ERV9FTlVNOgorICAgICAgaWYgKFRZUEVfVEFHX05BTUUg KHR5cGUpKQorICAgICAgICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3Nw LT5tZXRhZGF0YV9mZCwgIiVzICVzIiwKKwkJCQlUWVBFX0NPREUgKHR5cGUp ID09IFRZUEVfQ09ERV9TVFJVQ1QgPworCQkJCSJzdHJ1Y3QiIDogImVudW0i LAorCQkJCVRZUEVfVEFHX05BTUUgKHR5cGUpKTsKKyAgICAgIGVsc2UKKwlj dGZfc2F2ZV90eXBlX2RlZmluZV93cml0ZSAodGNzcCwgdHlwZSwgMSk7Cisg ICAgICBicmVhazsKKworICAgIGNhc2UgVFlQRV9DT0RFX1VOSU9OOgorICAg ICAgeworCWludCBpLCBiaWdnZXN0X2lkLCBiaWdnZXN0X3NpemUgPSAwOwor CisJZm9yIChpID0gMDsgaSA8IFRZUEVfTkZJRUxEUyAodHlwZSk7ICsraSkK KwkgIHsKKwkgICAgaWYgKGJpZ2dlc3Rfc2l6ZSA8IFRZUEVfTEVOR1RIIChU WVBFX0ZJRUxEX1RZUEUgKHR5cGUsIGkpKSkKKwkgICAgICB7CisJCWJpZ2dl c3Rfc2l6ZSA9IFRZUEVfTEVOR1RIIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUs IGkpKTsKKwkJYmlnZ2VzdF9pZCA9IGk7CisJICAgICAgfQorCSAgfQorCWN0 Zl9zYXZlX3R5cGVfbmFtZV93cml0ZSAodGNzcCwgVFlQRV9GSUVMRF9UWVBF ICh0eXBlLCBiaWdnZXN0X2lkKSk7CisJYnJlYWs7CisgICAgICB9CisKKyAg ICBkZWZhdWx0OgorICAgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNz cC0+bWV0YWRhdGFfZmQsICIlcyIsIFRZUEVfTkFNRSAodHlwZSkpOworICAg ICAgYnJlYWs7CisgICAgfQorfQorCisvKiBXcml0ZSB0aGUgc2l6ZSBwYXJ0 IG9mIGEgdmFyIGRlZmluZSB0byBDVEYgbWV0YWRhdGEgZmlsZS4gICovCisK K3N0YXRpYyB2b2lkCitjdGZfc2F2ZV90eXBlX3NpemVfd3JpdGUgKHN0cnVj dCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgdHlwZSAqdHlwZSkKK3sKKyAg aWYgKFRZUEVfQ09ERSAodHlwZSkgPT0gVFlQRV9DT0RFX0FSUkFZKQorICAg IHsKKyAgICAgIC8qIFRoaXMgcGFydCBqdXN0IHRvIGdldCB0aGUgcmVhbCBu YW1lIG9mIHRoaXMgYXJyYXkuCisgICAgICAgICBUaGlzIHBhcnQgc2hvdWxk IGtlZXAgdHlwZWRlZiBpZiBpdCBjYW4uICAqLworICAgICAgZm9yICg7IFRZ UEVfQ09ERSAodHlwZSkgPT0gVFlQRV9DT0RFX0FSUkFZOworCSAgIHR5cGUg PSBUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSA/IFRZUEVfVEFSR0VUX1RZUEUg KHR5cGUpCisJCQkJCSAgOiBjaGVja190eXBlZGVmICh0eXBlKSkKKwljdGZf c2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIlslZF0i LAorCQkJCVRZUEVfTEVOR1RIICh0eXBlKSAvCisJCQkJVFlQRV9MRU5HVEgg KFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKSk7CisgICAgfQorfQorCisvKiBX cml0ZSBhIHZhciBkZWZpbmUgdG8gQ1RGIG1ldGFkYXRhIGZpbGUuICAqLwor CitzdGF0aWMgdm9pZAorY3RmX3NhdmVfdmFyX2RlZmluZV93cml0ZSAoc3Ry dWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCB0eXBlICp0eXBlLAorCQkJ ICAgY29uc3QgY2hhciAqbmFtZSwgaW50IGJpdHNpemUpCit7CisgIGN0Zl9z YXZlX3R5cGVfbmFtZV93cml0ZSAodGNzcCwgdHlwZSk7CisgIGN0Zl9zYXZl X2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiICVzIiwgbmFt ZSk7CisgIGlmIChiaXRzaXplKQorICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiOiVkIiwgYml0c2l6ZSk7CisgIGN0 Zl9zYXZlX3R5cGVfc2l6ZV93cml0ZSAodGNzcCwgdHlwZSk7CisgIGN0Zl9z YXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiO1xuIik7 Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIFQxIGFuZCBUMiBpcyBzYW1lLiAg Ki8KKworc3RhdGljIGludAorY3RmX3NhdmVfdHlwZV9pc19zYW1lIChzdHJ1 Y3QgdHlwZSAqdDEsIHN0cnVjdCB0eXBlICp0MikKK3sKKyAgY29uc3QgY2hh ciAqbmFtZTEsICpuYW1lMjsKKworICBpZiAodDEgPT0gdDIpCisgICAgcmV0 dXJuIDE7CisKKyAgaWYgKFRZUEVfQ09ERSAodDEpICE9IFRZUEVfQ09ERSAo dDIpKQorICAgIHJldHVybiAwOworCisgIGlmIChUWVBFX0NPREUgKHQxKSA9 PSBUWVBFX0NPREVfU1RSVUNUIHx8IFRZUEVfQ09ERSAodDEpID09IFRZUEVf Q09ERV9FTlVNKQorICAgIHsKKyAgICAgIG5hbWUxID0gVFlQRV9UQUdfTkFN RSAodDEpOworICAgICAgbmFtZTIgPSBUWVBFX1RBR19OQU1FICh0Mik7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgbmFtZTEgPSBUWVBFX05BTUUg KHQxKTsKKyAgICAgIG5hbWUyID0gVFlQRV9OQU1FICh0Mik7CisgICAgfQor CisgIGlmIChuYW1lMSAmJiBuYW1lMiAmJiBzdHJjbXAgKG5hbWUxLCBuYW1l MikgPT0gMCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKwor LyogQ2hlY2sgaWYgVFlQRSBpbiBUQ1NQLT5UWVBFLgorICAgSWYgbm90LCB3 cml0ZSBUWVBFIHRvIFRDU1AtPm1ldGFkYXRhX2ZkLgorICAgSWYgTE9DQUwg aXMgdHJ1ZSwgdGhpcyB0eXBlIGRlZmluZSBqdXN0IGRlZmluZSB3aXRoIGEg dmFyLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5cGVfZGVmaW5l X3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0IHR5cGUg KnR5cGUsCisJCQkgICAgaW50IGxvY2FsKQoreworICBzdHJ1Y3QgY3RmX3Nh dmVfdHlwZV9zICp0OworCisgIC8qIElnbm9yZSB0eXBlIHVpbnQzMl90IGFu ZCB1aW50NjRfdCBiZWNhdXNlIHRoZXkgaGF2ZSB3cml0dGVuCisgICAgIGlu IGZ1bmN0aW9uIGN0Zl9zYXZlX21ldGFkYXRhX2hlYWRlci4gICovCisgIGlm IChUWVBFX05BTUUgKHR5cGUpICYmIChzdHJjbXAgKFRZUEVfTkFNRSAodHlw ZSksICJ1aW50MzJfdCIpID09IDAKKwkJCSAgIHx8IHN0cmNtcCAoVFlQRV9O QU1FICh0eXBlKSwgInVpbnQ2NF90IikgPT0gMCkpCisgICAgcmV0dXJuOwor CisgIGlmICghbG9jYWwpCisgICAgeworICAgICAgZm9yICh0ID0gdGNzcC0+ dHlwZTsgdDsgdCA9IHQtPm5leHQpCisJeworCSAgaWYgKGN0Zl9zYXZlX3R5 cGVfaXNfc2FtZSAodHlwZSwgdC0+dHlwZSkpCisJICAgIHJldHVybjsKKwl9 CisKKyAgICAgIHQgPSAoc3RydWN0IGN0Zl9zYXZlX3R5cGVfcyAqKSB4emFs bG9jIChzaXplb2YgKCp0KSk7CisgICAgICB0LT50eXBlID0gdHlwZTsKKyAg ICAgIHQtPm5leHQgPSB0Y3NwLT50eXBlOworICAgICAgdGNzcC0+dHlwZSA9 IHQ7CisgICAgfQorCisgIHN3aXRjaCAoVFlQRV9DT0RFICh0eXBlKSkKKyAg ICB7CisgICAgICBjYXNlIFRZUEVfQ09ERV9UWVBFREVGOgorCWN0Zl9zYXZl X2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAidHlwZWRlZiAi KTsKKwljdGZfc2F2ZV92YXJfZGVmaW5lX3dyaXRlICh0Y3NwLCBUWVBFX1RB UkdFVF9UWVBFICh0eXBlKSwKKwkJCQkgICBUWVBFX05BTUUgKHR5cGUpLCAw KTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfSU5UOgorCWN0 Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXAor dHlwZWFsaWFzIGludGVnZXIgeyBzaXplID0gJWQ7IGFsaWduID0gJWQ7IHNp Z25lZCA9ICVzOyB9IDo9ICVzO1xuIiwKKwkJCQlUWVBFX0xFTkdUSCAodHlw ZSkgKiBUQVJHRVRfQ0hBUl9CSVQsCisJCQkJVFlQRV9MRU5HVEggKHR5cGUp ICogVEFSR0VUX0NIQVJfQklULAorCQkJCSFUWVBFX1VOU0lHTkVEICh0eXBl KSA/ICJ0cnVlIiA6ICJmYWxzZSIsCisJCQkJVFlQRV9OQU1FICh0eXBlKSk7 CisJYnJlYWs7CisKKyAgICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoKKyAg ICAgIGNhc2UgVFlQRV9DT0RFX0VOVU06CisgICAgICAgIHsKKwkgIGludCBp OworCSAgY2hhciB0YWJbMjU2XTsKKwkgIGNvbnN0IGNoYXIgKm9sZF90YWI7 CisKKwkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLCAiJXMgJXMge1xuIiwKKwkJCQkgIFRZUEVfQ09ERSAodHlwZSkgPT0g VFlQRV9DT0RFX1NUUlVDVCA/CisJCQkJICAic3RydWN0IiA6ICJlbnVtIiwK KwkJCQkgIFRZUEVfVEFHX05BTUUgKHR5cGUpID8gVFlQRV9UQUdfTkFNRSAo dHlwZSkKKwkJCQkJCSAgICAgICA6ICIiKTsKKworCSAgb2xkX3RhYiA9IHRj c3AtPnRhYjsKKwkgIHNucHJpbnRmICh0YWIsIDI1NiwgIiVzXHQiLCBvbGRf dGFiKTsKKwkgIHRjc3AtPnRhYiA9IHRhYjsKKwkgIGZvciAoaSA9IDA7IGkg PCBUWVBFX05GSUVMRFMgKHR5cGUpOyArK2kpCisJICAgIHsKKwkgICAgICBp ZiAoVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NPREVfU1RSVUNUKQorCSAg ICAgICAgeworCQkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCB0Y3NwLT50YWIpOworCQkgIGN0Zl9zYXZlX3Zhcl9kZWZp bmVfd3JpdGUgKHRjc3AsIFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSksCisJ CQkJCSAgICAgVFlQRV9GSUVMRF9OQU1FICh0eXBlLCBpKSwKKwkJCQkJICAg ICBUWVBFX0ZJRUxEX0JJVFNJWkUgKHR5cGUsIGkpKTsKKwkJfQorCSAgICAg IGVsc2UKKwkJY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRh dGFfZmQsICIlcyVzID0gJXMsXG4iLAorCQkJCQl0Y3NwLT50YWIsIFRZUEVf RklFTERfTkFNRSAodHlwZSwgaSksCisJCQkJCXBsb25nZXN0IChUWVBFX0ZJ RUxEX0VOVU1WQUwgKHR5cGUsIGkpKSk7CisJICAgIH0KKwkgIHRjc3AtPnRh YiA9IG9sZF90YWI7CisJICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3Nw LT5tZXRhZGF0YV9mZCwgIiVzfSIsIHRjc3AtPnRhYik7CisJICBpZiAoVFlQ RV9UQUdfTkFNRSAodHlwZSkpCisJICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiO1xuIik7CisJICBicmVhazsKKwl9 CisgICAgfQorfQorCisvKiBDaGVjayBpZiB0aGlzIHR5cGUgaXMgc3VwcG9y dGVkIGJ5IEdEQi4KKyAgIFJldHVybiB0aGUgYWxpZ24gc2l6ZS4gICovCisK K3N0YXRpYyBpbnQKK2N0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlIChz dHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0IHR5cGUgKnR5cGUpCit7 CisgIGludCBhbGlnbl9zaXplID0gMDsKKworICBzd2l0Y2ggKFRZUEVfQ09E RSAodHlwZSkpCisgICAgeworICAgICAgY2FzZSBUWVBFX0NPREVfVFlQRURF RjoKKwlhbGlnbl9zaXplID0gY3RmX3NhdmVfdHlwZV9jaGVja19hbmRfd3Jp dGUgKHRjc3AsCisJCQkJCQkgICAgVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkp OworCWlmIChhbGlnbl9zaXplIDwgMCkKKwkgIHJldHVybiBhbGlnbl9zaXpl OworCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0Y3NwLCB0eXBlLCAw KTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfQVJSQVk6CisJ YWxpZ25fc2l6ZSA9IGN0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlICh0 Y3NwLAorCQkJCQkJICAgIFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKTsKKwlp ZiAoYWxpZ25fc2l6ZSA8IDApCisJICByZXR1cm4gYWxpZ25fc2l6ZTsKKwli cmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfSU5UOgorCWN0Zl9zYXZl X3R5cGVfZGVmaW5lX3dyaXRlICh0Y3NwLCB0eXBlLCAwKTsKKwlhbGlnbl9z aXplID0gVFlQRV9MRU5HVEggKHR5cGUpOworCWJyZWFrOworCisgICAgICBj YXNlIFRZUEVfQ09ERV9QVFI6CisJYWxpZ25fc2l6ZSA9IFRZUEVfTEVOR1RI ICh0eXBlKTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfU1RS VUNUOgorICAgICAgICB7CisJICBpbnQgaSwgc19hbGlnbl9zaXplOworCisJ ICBmb3IgKGkgPSAwOyBpIDwgVFlQRV9ORklFTERTICh0eXBlKTsgKytpKQor CSAgICB7CisJICAgICAgc19hbGlnbl9zaXplCisJCSAgPSBjdGZfc2F2ZV90 eXBlX2NoZWNrX2FuZF93cml0ZSAodGNzcCwKKwkJCQkJCSAgIFRZUEVfRklF TERfVFlQRSAodHlwZSwgaSkpOworCSAgICAgIGlmIChzX2FsaWduX3NpemUg PCAwKQorCQlyZXR1cm4gc19hbGlnbl9zaXplOworCisJICAgICAgaWYgKGFs aWduX3NpemUgPCBzX2FsaWduX3NpemUpCisJCWFsaWduX3NpemUgPSBzX2Fs aWduX3NpemU7CisJICAgIH0KKwkgIGlmIChUWVBFX1RBR19OQU1FICh0eXBl KSkKKwkgICAgY3RmX3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUgKHRjc3AsIHR5 cGUsIDApOworCSAgYnJlYWs7CisJfQorCisgICAgICBjYXNlIFRZUEVfQ09E RV9FTlVNOgorCWFsaWduX3NpemUgPSBUWVBFX0xFTkdUSCAodHlwZSk7CisJ aWYgKFRZUEVfVEFHX05BTUUgKHR5cGUpKQorCSAgY3RmX3NhdmVfdHlwZV9k ZWZpbmVfd3JpdGUgKHRjc3AsIHR5cGUsIDApOworCWJyZWFrOworCisgICAg ICBjYXNlIFRZUEVfQ09ERV9VTklPTjoKKyAgICAgICAgeworCSAgaW50IGks IHNfYWxpZ25fc2l6ZTsKKworCSAgZm9yIChpID0gMDsgaSA8IFRZUEVfTkZJ RUxEUyAodHlwZSk7ICsraSkKKwkgICAgeworCSAgICAgIHNfYWxpZ25fc2l6 ZQorCQkgID0gY3RmX3NhdmVfdHlwZV9jaGVja19hbmRfd3JpdGUgKHRjc3As CisJCQkJCQkgICBUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIGkpKTsKKwkgICAg ICBpZiAoc19hbGlnbl9zaXplIDwgMCkKKwkJcmV0dXJuIHNfYWxpZ25fc2l6 ZTsKKworCSAgICAgIGlmIChhbGlnbl9zaXplIDwgc19hbGlnbl9zaXplKQor CQlhbGlnbl9zaXplID0gc19hbGlnbl9zaXplOworCSAgICB9CisJICBicmVh azsKKwl9CisKKyAgICAgIGRlZmF1bHQ6CisJYWxpZ25fc2l6ZSA9IC0xOwor CWJyZWFrOworICAgIH0KKworICByZXR1cm4gYWxpZ25fc2l6ZTsKK30KKwor c3RhdGljIHZvaWQKK2N0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHN0cnVjdCBj dGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHBzLAor CQkJY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RydWN0IGV4cHJlc3Npb24g KmV4cHI7CisgIHN0cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3Q7 CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisgIHN0cnVj dCB0eXBlICp0eXBlOworICBpbnQgaXNfcmV0ID0gMDsKKyAgaW50IGFsaWdu X3NpemU7CisgIGNoYXIgKnN0cjsKKworICAvKiBBbGxvY2EgU1RSIGJlY2F1 c2UgUEFSU0VfRVhQUkVTU0lPTiBuZWVkIGFyZ3VtZW50CisgICAgIGlzIG5v dCBhIGNvbnN0IHN0cmluZy4gICovCisgIHN0ciA9IGFsbG9jYSAoc3RybGVu IChuYW1lKSArIDEpOworICBzdHJjcHkgKHN0ciwgbmFtZSk7CisKKyAgLyog Q2hlY2sgaWYgYWN0aW9uX2V4cCBpcyBhbHJlYWR5IGV4aXN0IGluIHRwcy0+ Y29sbGVjdC4gICovCisgIGZvciAoY29sbGVjdCA9IHRwcy0+Y29sbGVjdDsg Y29sbGVjdDsgY29sbGVjdCA9IGNvbGxlY3QtPm5leHQpCisgICAgeworICAg ICAgaWYgKHN0cmNtcCAoY29sbGVjdC0+c3RyLCBzdHIpID09IDApCisJcmV0 dXJuOworICAgIH0KKworICBpZiAoMCA9PSBzdHJuY2FzZWNtcCAoc3RyLCAi JF9yZXQiLCA1KSkKKyAgICBpc19yZXQgPSAxOworCisgIFRSWV9DQVRDSCAo ZSwgUkVUVVJOX01BU0tfRVJST1IpCisgICAgeworICAgICAgaWYgKGlzX3Jl dCkKKyAgICAgICAgeworCSAgQ09SRV9BRERSIHBjOworCSAgc3RydWN0IGZy YW1lX2luZm8gKmZyYW1lOworCisJICBmcmFtZSA9IGdldF9wcmV2X2ZyYW1l IChnZXRfY3VycmVudF9mcmFtZSAoKSk7CisJICBpZiAoIWZyYW1lKQorCSAg ICBlcnJvciAoXygiY291bGQgbm90IGZpbmQgcHJldmlvdXMgZnJhbWUiKSk7 CisKKwkgIGlmICghZ2V0X2ZyYW1lX3BjX2lmX2F2YWlsYWJsZSAoZnJhbWUs ICZwYykpCisJICAgIGVycm9yIChfKCJQQyB1bmF2YWlsYWJsZSIpKTsKKwl9 CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIHN0cnVjdCBjbGVhbnVwICpv bGRfY2hhaW47CisJICBzdHJ1Y3QgdmFsdWUgKnZhbDsKKworCSAgZXhwciA9 IHBhcnNlX2V4cHJlc3Npb24gKHN0cik7CisJICBvbGRfY2hhaW4gPSBtYWtl X2NsZWFudXAgKGZyZWVfY3VycmVudF9jb250ZW50cywgJmV4cHIpOworCSAg dHlwZSA9IHZhbHVlX3R5cGUgKGV2YWx1YXRlX2V4cHJlc3Npb24gKGV4cHIp KTsKKwkgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4pOworCX0KKyAgICB9Cisg IGlmIChlLnJlYXNvbiA8IDApCisgICAgeworICAgICAgd2FybmluZyAoXygi ZXJyb3Igc2F2aW5nIHRyYWNlcG9pbnQgJWQgXCIlc1wiIHRvIENURiBmaWxl OiAlcyIpLAorCSAgICAgICB0cHMtPnRwLT5iYXNlLm51bWJlciwgc3RyLCBl Lm1lc3NhZ2UpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoaXNf cmV0KQorICAgIGFsaWduX3NpemUgPSA4OworICBlbHNlCisgICAgeworICAg ICAgYWxpZ25fc2l6ZSA9IGN0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRl ICh0Y3NwLCB0eXBlKTsKKyAgICAgIGlmIChhbGlnbl9zaXplIDwgMCkKKwl7 CisJICB3YXJuaW5nIChfKCJcCitlcnJvciBzYXZpbmcgdHJhY2Vwb2ludCAl ZCBcIiVzXCIgdG8gQ1RGIGZpbGU6IHR5cGUgaXMgbm90IHN1cHBvcnRlZC4i KSwKKwkJICAgdHBzLT50cC0+YmFzZS5udW1iZXIsIHN0cik7CisJICByZXR1 cm47CisJfQorICAgIH0KKworICBjb2xsZWN0ID0gKHN0cnVjdCBjdGZfc2F2 ZV9jb2xsZWN0X3MgKikgeHphbGxvYyAoc2l6ZW9mICgqY29sbGVjdCkpOwor CisgIC8qIEFkZCB0cCB0byB0aGUgbGlzdC4gICovCisgIGNvbGxlY3QtPm5l eHQgPSB0cHMtPmNvbGxlY3Q7CisgIHRwcy0+Y29sbGVjdCA9IGNvbGxlY3Q7 CisKKyAgY29sbGVjdC0+c3RyID0geHN0cmR1cCAoc3RyKTsKKyAgY29sbGVj dC0+aXNfcmV0ID0gaXNfcmV0OworCisgIGlmICghaXNfcmV0KQorICAgIHsK KyAgICAgIGNvbGxlY3QtPnR5cGUgPSB0eXBlOworCisgICAgICBjb2xsZWN0 LT5hbGlnbl9zaXplID0gYWxpZ25fc2l6ZTsKKyAgICAgIGlmIChjb2xsZWN0 LT5hbGlnbl9zaXplID4gdHBzLT5hbGlnbl9zaXplKQorICAgICAgICB0cHMt PmFsaWduX3NpemUgPSBjb2xsZWN0LT5hbGlnbl9zaXplOworCisgICAgICBj b2xsZWN0LT5leHByID0gcGFyc2VfZXhwcmVzc2lvbiAoc3RyKTsKKyAgICB9 Cit9CisKK3N0cnVjdCBsb2NfYXJnX2NvbGxlY3RfZGF0YQoreworICBzdHJ1 Y3QgY3RmX3NhdmVfcyAqdGNzcDsKKyAgc3RydWN0IGN0Zl9zYXZlX3RwX3Mg KnRwczsKK307CisKK3N0YXRpYyB2b2lkCit0c3Zfc2F2ZV9kb19sb2NfYXJn X2NvbGxlY3QgKGNvbnN0IGNoYXIgKnByaW50X25hbWUsCisJCQkgICAgIHN0 cnVjdCBzeW1ib2wgKnN5bSwKKwkJCSAgICAgdm9pZCAqY2JfZGF0YSkKK3sK KyAgc3RydWN0IGxvY19hcmdfY29sbGVjdF9kYXRhICpwID0gY2JfZGF0YTsK KworICBjdGZfc2F2ZV9jb2xsZWN0X2dldF8xIChwLT50Y3NwLCBwLT50cHMs IHByaW50X25hbWUpOworfQorCisvKiB3b3JrZXIgZnVuY3Rpb24gKGNsZWFu dXApICovCitzdGF0aWMgdm9pZAorcmVwbGFjZV9jb21tYSAodm9pZCAqZGF0 YSkKK3sKKyAgY2hhciAqY29tbWEgPSBkYXRhOworICAqY29tbWEgPSAnLCc7 Cit9CisKKy8qIEdldCB2YXIgdGhhdCB3YW50IHRvIGNvbGxlY3QgZnJvbSBT VFIgYW5kIHB1dCB0aGVtIHRvIFRQUy0+Y29sbGVjdC4KKyAgIFRoaXMgZnVu Y3Rpb24gd2lsbCBub3QgYmUgY2FsbCB3aGVuIEdEQiBhZGQgYSBuZXcgVFAu ICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfY29sbGVjdF9nZXQgKHN0 cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAq dHBzLAorCQkgICAgICBjaGFyICpzdHIpCit7CisgIGNoYXIgKmFjdGlvbl9l eHAgPSBzdHIsICpuZXh0X2NvbW1hOworICBzdHJ1Y3QgY2xlYW51cCAqb2xk X2NoYWluOworCisgIGRvCisgICAgeworICAgICAgaWYgKCphY3Rpb25fZXhw ID09ICcsJykKKwlhY3Rpb25fZXhwKys7CisgICAgICB3aGlsZSAoaXNzcGFj ZSAoKGludCkgKmFjdGlvbl9leHApKQorCWFjdGlvbl9leHArKzsKKworICAg ICAgbmV4dF9jb21tYSA9IHN0cmNociAoYWN0aW9uX2V4cCwgJywnKTsKKyAg ICAgIGlmIChuZXh0X2NvbW1hKQorCXsKKwkgIG9sZF9jaGFpbiA9IG1ha2Vf Y2xlYW51cCAocmVwbGFjZV9jb21tYSwgbmV4dF9jb21tYSk7CisJICAqbmV4 dF9jb21tYSA9ICdcMCc7CisJfQorCisgICAgICBpZiAoMCA9PSBzdHJuY2Fz ZWNtcCAoYWN0aW9uX2V4cCwgIiRyZWciLCA0KSkKKyAgICAgICAgeworCSAg aW50IGk7CisJICBzdHJ1Y3QgZ2RiYXJjaCAqYXJjaCA9IHRwcy0+dHAtPmJh c2UubG9jLT5nZGJhcmNoOworCisJICBmb3IgKGkgPSAwOyBpIDwgZ2RiYXJj aF9udW1fcmVncyAoYXJjaCk7IGkrKykKKwkgICAgeworCSAgICAgIGNvbnN0 IGNoYXIgKm5hbWUgPSBnZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGFyY2gsIGkp OworCSAgICAgIGludCBuYW1lX3NpemUgPSBzdHJsZW4gKG5hbWUpOworCSAg ICAgIGNoYXIgcmVnbmFtZVsxICsgbmFtZV9zaXplICsgMV07CisKKwkgICAg ICBpZiAobmFtZV9zaXplID09IDApCisJCWNvbnRpbnVlOworCisJICAgICAg c3ByaW50ZiAocmVnbmFtZSwgIiQlcyIsIG5hbWUpOworCisJICAgICAgY3Rm X3NhdmVfY29sbGVjdF9nZXRfMSAodGNzcCwgdHBzLCByZWduYW1lKTsKKwkg ICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKDAgPT0gc3RybmNhc2VjbXAgKGFj dGlvbl9leHAsICIkbG9jIiwgNCkKKwkgICAgICAgfHwgMCA9PSBzdHJuY2Fz ZWNtcCAoYWN0aW9uX2V4cCwgIiRhcmciLCA0KSkKKwl7CisJICBDT1JFX0FE RFIgcGM7CisJICBzdHJ1Y3QgbG9jX2FyZ19jb2xsZWN0X2RhdGEgY2JfZGF0 YTsKKwkgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisKKwkg IGNiX2RhdGEudGNzcCA9IHRjc3A7CisJICBjYl9kYXRhLnRwcyA9IHRwczsK KworCSAgVFJZX0NBVENIIChlLCBSRVRVUk5fTUFTS19FUlJPUikKKwkgICAg eworCSAgICAgIHBjID0gcmVnY2FjaGVfcmVhZF9wYyAoZ2V0X2N1cnJlbnRf cmVnY2FjaGUgKCkpOworCSAgICB9CisJICBpZiAoZS5yZWFzb24gPCAwKQor CSAgICB7CisJICAgICAgd2FybmluZyAoXygiZXJyb3Igc2F2aW5nIHRyYWNl cG9pbnQgJWQgXCIlc1wiIHRvIENURiBmaWxlOiAlcyIpLAorCQkgICAgICAg dHBzLT50cC0+YmFzZS5udW1iZXIsIGFjdGlvbl9leHAsIGUubWVzc2FnZSk7 CisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgaWYgKGFkZF9sb2Nh bF9zeW1ib2xzXzEgKCgwID09IHN0cm5jYXNlY21wIChhY3Rpb25fZXhwLCAi JGxvYyIsIDQpCisJCQkJCT8gJ0wnIDogJ0EnKSwKKwkJCQkgICBwYywgdHN2 X3NhdmVfZG9fbG9jX2FyZ19jb2xsZWN0LAorCQkJCSAgICZjYl9kYXRhKSkK KwkgICAgeworCSAgICAgIHdhcm5pbmcgKF8oIlwKK2Vycm9yIHNhdmluZyB0 cmFjZXBvaW50ICVkIFwiJXNcIiB0byBDVEYgZmlsZTogbm8gc3ltYm9sIHRh YmxlIGluZm8gYXZhaWxhYmxlLiIpLAorCQkgICAgICAgdHBzLT50cC0+YmFz ZS5udW1iZXIsIGFjdGlvbl9leHApOworCSAgICAgIGNvbnRpbnVlOworCSAg ICB9CisJfQorICAgICAgZWxzZQorCWN0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEg KHRjc3AsIHRwcywgYWN0aW9uX2V4cCk7CisKKyAgICAgIGlmIChuZXh0X2Nv bW1hKQorCWRvX2NsZWFudXBzIChvbGRfY2hhaW4pOworICAgICAgYWN0aW9u X2V4cCA9IG5leHRfY29tbWE7CisgICAgfQorICB3aGlsZSAoYWN0aW9uX2V4 cCAmJiAqYWN0aW9uX2V4cCA9PSAnLCcpOworfQorCisvKiBDYWxsIGZ1bmN0 aW9uIGN0Zl9zYXZlX2NvbGxlY3RfZ2V0IEFkZCBhY3Rpb24gbGlzdCBBQ1RJ T04gb2YgVFBTCisgICB0byBUUFMtPmNvbGxlY3QuCisgICBTVEVQUElOR19G UkFNRSBpcyB0cnVlIGlmIGl0IGlzIHN0ZXAgYWN0aW9uLiAgKi8KKworc3Rh dGljIHZvaWQKK2N0Zl9zYXZlX3RwX2FjdGlvbnMgKHN0cnVjdCBjdGZfc2F2 ZV9zICp0Y3NwLCBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHBzLAorCQkgICAg IHN0cnVjdCBjb21tYW5kX2xpbmUgKmFjdGlvbiwgaW50IHN0ZXBwaW5nX2Zy YW1lKQoreworICBmb3IgKDsgYWN0aW9uICE9IE5VTEw7IGFjdGlvbiA9IGFj dGlvbi0+bmV4dCkKKyAgICB7CisgICAgICBjaGFyICphY3Rpb25fZXhwOwor ICAgICAgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmNtZDsKKworICAgICAg UVVJVDsKKyAgICAgIGFjdGlvbl9leHAgPSBhY3Rpb24tPmxpbmU7CisgICAg ICB3aGlsZSAoaXNzcGFjZSAoKGludCkgKmFjdGlvbl9leHApKQorCWFjdGlv bl9leHArKzsKKyAgICAgIGlmICgqYWN0aW9uX2V4cCA9PSAnIycpCisJY29u dGludWU7CisKKyAgICAgIGNtZCA9IGxvb2t1cF9jbWQgKCZhY3Rpb25fZXhw LCBjbWRsaXN0LCAiIiwgLTEsIDEpOworICAgICAgaWYgKGNtZCA9PSAwKQor CWVycm9yIChfKCJCYWQgYWN0aW9uIGxpc3QgaXRlbTogJXMiKSwgYWN0aW9u X2V4cCk7CisKKyAgICAgIGlmIChjbWRfY2Z1bmNfZXEgKGNtZCwgd2hpbGVf c3RlcHBpbmdfcHNldWRvY29tbWFuZCkpCisJeworCSAgaW50IGk7CisKKwkg IGZvciAoaSA9IDA7IGkgPCBhY3Rpb24tPmJvZHlfY291bnQ7ICsraSkKKwkg ICAgY3RmX3NhdmVfdHBfYWN0aW9ucyAodGNzcCwgdHBzLCBhY3Rpb24tPmJv ZHlfbGlzdFtpXSwgMSk7CisJfQorICAgICAgZWxzZSBpZiAoY21kX2NmdW5j X2VxIChjbWQsIGNvbGxlY3RfcHNldWRvY29tbWFuZCkpCisJeworCSAgaWYg KHN0ZXBwaW5nX2ZyYW1lICE9IHRwcy0+c3RlcHBpbmdfZnJhbWUpCisJICAg IGNvbnRpbnVlOworCSAgaWYgKCphY3Rpb25fZXhwID09ICcvJykKKwkgICAg YWN0aW9uX2V4cCA9IGRlY29kZV9hZ2VudF9vcHRpb25zIChhY3Rpb25fZXhw KTsKKwkgIGN0Zl9zYXZlX2NvbGxlY3RfZ2V0ICh0Y3NwLCB0cHMsIGFjdGlv bl9leHApOworCX0KKyAgICB9Cit9CisKKworLyogVHJ5IHRvIGZpbmQgdGhl IGN0Zl9zYXZlX3RwX3Mgc3RydWN0IGluIHRoZSBUQ1NQLT50cC4KKyAgIElm IGNhbm5vdCBmaW5kIGl0IGluIHRoZSBUQ1NQLT50cCwgbWFrZSBhIG5ldyBv bmUgZm9yIFRQCisgICBhbmQgYWRkIGl0IHRvIFRDU1AtPnRwLiAgKi8KKwor c3RhdGljIHN0cnVjdCBjdGZfc2F2ZV90cF9zICoKK2N0Zl9zYXZlX3RwX2Zp bmQgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgdHJhY2Vwb2lu dCAqdHApCit7CisgIHN0cnVjdCBjdGZfc2F2ZV90cF9zICpyZXQ7CisgIHN0 cnVjdCBicF9sb2NhdGlvbiAqbG9jOworICBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlOworICBpbnQgc3RlcHBpbmdfZnJhbWUgPSAwOworICBzdHJ1Y3Qg Y29tbWFuZF9saW5lICphY3Rpb247CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJf ZXhjZXB0aW9uIGU7CisgIENPUkVfQUREUiBwYzsKKyAgZXh0ZXJuIGludCB0 cmFjZXBvaW50X2NvdW50OworCisgIFRSWV9DQVRDSCAoZSwgUkVUVVJOX01B U0tfRVJST1IpCisgICAgeworICAgICAgcGMgPSByZWdjYWNoZV9yZWFkX3Bj IChnZXRfY3VycmVudF9yZWdjYWNoZSAoKSk7CisgICAgfQorICBpZiAoZS5y ZWFzb24gPj0gMCkKKyAgICB7CisgICAgICBzdGVwcGluZ19mcmFtZSA9IDE7 CisgICAgICBmb3IgKGxvYyA9IHRwLT5iYXNlLmxvYzsgbG9jOyBsb2MgPSBs b2MtPm5leHQpCisJeworCSAgaWYgKGxvYy0+YWRkcmVzcyA9PSBwYykKKyAg ICAgICAgICAgIHsKKwkgICAgICBzdGVwcGluZ19mcmFtZSA9IDA7CisJICAg ICAgYnJlYWs7CisJICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICBmb3Ig KHJldCA9IHRjc3AtPnRwOyByZXQ7IHJldCA9IHJldC0+bmV4dCkKKyAgICB7 CisgICAgICBpZiAocmV0LT50cCA9PSB0cCAmJiByZXQtPnN0ZXBwaW5nX2Zy YW1lID09IHN0ZXBwaW5nX2ZyYW1lKQorCXJldHVybiByZXQ7CisgICAgfQor CisgIHJldCA9IChzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqKSB4emFsbG9jIChz aXplb2YgKCpyZXQpKTsKKworICAvKiBBZGQgdHAgdG8gdGhlIGxpc3QuICAq LworICByZXQtPm5leHQgPSB0Y3NwLT50cDsKKyAgdGNzcC0+dHAgPSByZXQ7 CisKKyAgcmV0LT5zdGVwcGluZ19mcmFtZSA9IHN0ZXBwaW5nX2ZyYW1lOwor ICBpZiAoc3RlcHBpbmdfZnJhbWUpCisgICAgcmV0LT5pZCA9IHRyYWNlcG9p bnRfY291bnQgKyB0cC0+YmFzZS5udW1iZXI7CisgIGVsc2UKKyAgICByZXQt PmlkID0gdHAtPmJhc2UubnVtYmVyOworICByZXQtPnRwID0gdHA7CisKKyAg aWYgKCFzdGVwcGluZ19mcmFtZSAmJiAqZGVmYXVsdF9jb2xsZWN0KQorICAg IGN0Zl9zYXZlX2NvbGxlY3RfZ2V0ICh0Y3NwLCByZXQsIGRlZmF1bHRfY29s bGVjdCk7CisKKyAgY3RmX3NhdmVfdHBfYWN0aW9ucyAodGNzcCwgcmV0LCBi cmVha3BvaW50X2NvbW1hbmRzICgmdHAtPmJhc2UpLCAwKTsKKworICByZXR1 cm4gcmV0OworfQorCisvKiBMZXQgVENTUC0+ZGF0YXN0cmVhbV9mZCBwb2lu dCB0byB0aGUgcGFydCBmb3IgbmV4dCBwYWNrZXQuICAqLworCitzdGF0aWMg dm9pZAorY3RmX3NhdmVfbmV4dF9wYWNrZXQgKHN0cnVjdCBjdGZfc2F2ZV9z ICp0Y3NwKQoreworICB0Y3NwLT5wYWNrZXRfYmVnaW4gKz0gQ1RGX1BBQ0tF VF9TSVpFOworICBjdGZfc2F2ZV9mc2VlayAodGNzcCwgdGNzcC0+cGFja2V0 X2JlZ2luLCBTRUVLX1NFVCk7CisgIHRjc3AtPmNvbnRlbnRfc2l6ZSA9IDA7 Cit9CisKKy8qIFdyaXRlIHRoZSBjb250ZW50IHNpemUgdG8gcGFja2V0IGhl YWRlciBjb250ZXh0LiAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfd3Jp dGVfY29udGVudF9zaXplIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sK KyAgdWludDMyX3QgdTMyOworCisgIGN0Zl9zYXZlX2ZzZWVrICh0Y3NwLCB0 Y3NwLT5wYWNrZXRfYmVnaW4gKyA0LCBTRUVLX1NFVCk7CisgIHUzMiA9IHRj c3AtPmNvbnRlbnRfc2l6ZSAqIFRBUkdFVF9DSEFSX0JJVDsKKyAgY3RmX3Nh dmVfd3JpdGUgKHRjc3AsICh2b2lkICopJnUzMiwgNCk7Cit9CisKKy8qIFdy aXRlIHRoZSBDVEYgZGF0YSBwYWNrZXQgaGVhZGVyIGNvbnRleHQuICAqLwor CisjZGVmaW5lIFBBQ0tFVF9IRUFERVJfU0laRQkoNCArIDQgKyA0KQorCitz dGF0aWMgdm9pZAorY3RmX3NhdmVfd3JpdGVfcGFja2V0X2hlYWRlcl9jb250 ZXh0IChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sKKyAgdWludDMyX3Qg dTMyOworCisgIC8qIG1hZ2ljLiAgKi8KKyAgdTMyID0gQ1RGX01BR0lDOwor ICBjdGZfc2F2ZV93cml0ZSAodGNzcCwgKHZvaWQgKikmdTMyLCA0KTsKKyAg dGNzcC0+Y29udGVudF9zaXplICs9IDQ7CisKKyAgLyogY29udGVudF9zaXpl LiAgV2Ugc3RpbGwgZG9uJ3Qga25vdyB0aGUgc2l6ZSwgd3JpdGUgaXQgbGF0 ZXIuICAqLworICBjdGZfc2F2ZV9mc2VlayAodGNzcCwgNCwgU0VFS19DVVIp OworICB0Y3NwLT5jb250ZW50X3NpemUgKz0gNDsKKworICAvKiBwYWNrZXRf c2l6ZSAqLworICB1MzIgPSBDVEZfUEFDS0VUX1NJWkUgKiBUQVJHRVRfQ0hB Ul9CSVQ7CisgIGN0Zl9zYXZlX3dyaXRlICh0Y3NwLCAodm9pZCAqKSZ1MzIs IDQpOworICB0Y3NwLT5jb250ZW50X3NpemUgKz0gNDsKKworICB0Y3NwLT5j dXJyZW50X2NvbnRlbnRfc2l6ZSA9IHRjc3AtPmNvbnRlbnRfc2l6ZTsKKwor ICAvKiBNYWtlIHRoaXMgcGFja2V0IGFsbCBpbnRvIGZpbGUuICAqLworICBj dGZfc2F2ZV9mc2VlayAodGNzcCwgdGNzcC0+cGFja2V0X2JlZ2luICsgQ1RG X1BBQ0tFVF9TSVpFIC0gNCwgU0VFS19TRVQpOworICB1MzIgPSAwOworICBj dGZfc2F2ZV93cml0ZSAodGNzcCwgKHZvaWQgKikmdTMyLCA0KTsKKyAgY3Rm X3NhdmVfZnNlZWsgKHRjc3AsIHRjc3AtPnBhY2tldF9iZWdpbiArIHRjc3At PmNvbnRlbnRfc2l6ZSwgU0VFS19TRVQpOworfQorCisvKiBDaGFuZ2UgSS10 aCBjaGFyIGluIENURl9TVFIgdG8gU1RSLiAgKi8KKworc3RhdGljIGNoYXIg KgorY3RmX3NhdmVfbWV0YWRhdGFfY2hhbmdlX2NoYXIgKGNoYXIgKmN0Zl9z dHIsIGludCBpLCBjb25zdCBjaGFyICpzdHIpCit7CisgIGNoYXIgKm5ldzsK KworICBjdGZfc3RyW2ldID0gJ1wwJzsKKyAgbmV3ID0geHN0cnByaW50ZiAo IiVzJXMlc18lcyIsIGN0Zl9zdHIsIChpID8gIl8iIDogIiIpLAorCQkgICAg c3RyLCBjdGZfc3RyICsgaSArIDEpOworICB4ZnJlZSAoY3RmX3N0cik7CisK KyAgcmV0dXJuIG5ldzsKK30KKworLyogV3JpdGUgdGhlIGhlYWRlciBvZiBD VEYncyBtZXRhZGF0YSB0byBUQ1NQLT5NRVRBREFUQV9GRC4gICovCisKK3N0 YXRpYyB2b2lkCitjdGZfc2F2ZV9tZXRhZGF0YV9oZWFkZXIgKHN0cnVjdCBj dGZfc2F2ZV9zICp0Y3NwKQoreworICBjb25zdCBjaGFyIG1ldGFkYXRhX2Zt dFtdID0KKyAgIlxudHJhY2Uge1xuIgorICAiCW1ham9yID0gJXU7XG4iCisg ICIJbWlub3IgPSAldTtcbiIKKyAgIglieXRlX29yZGVyID0gJXM7XG4iCQkv KiBiZSBvciBsZSAqLworICAiCXBhY2tldC5oZWFkZXIgOj0gc3RydWN0IHtc biIKKyAgIgkJdWludDMyX3QgbWFnaWM7XG4iCisgICIJfTtcbiIKKyAgIn07 XG4iCisgICJcbiIKKyAgInN0cmVhbSB7XG4iCisgICIJcGFja2V0LmNvbnRl eHQgOj0gc3RydWN0IHtcbiIKKyAgIgkJdWludDMyX3QgY29udGVudF9zaXpl O1xuIgorICAiCQl1aW50MzJfdCBwYWNrZXRfc2l6ZTtcbiIKKyAgIgl9O1xu IgorICAiCWV2ZW50LmhlYWRlciA6PSBzdHJ1Y3Qge1xuIgorICAiCQl1aW50 MzJfdCBpZDtcbiIKKyAgIgl9O1xuIgorICAifTtcbiI7CisKKyAgY3RmX3Nh dmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICIvKiBDVEYg JWQuJWQgKi9cbiIsCisJCQkgIENURl9TQVZFX01BSk9SLCBDVEZfU0FWRV9N SU5PUik7CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFk YXRhX2ZkLCAiXAordHlwZWFsaWFzIGludGVnZXIgeyBzaXplID0gMzI7IGFs aWduID0gMzI7IHNpZ25lZCA9IGZhbHNlOyB9IDo9IHVpbnQzMl90O1xuIik7 CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2Zk LCAiXAordHlwZWFsaWFzIGludGVnZXIgeyBzaXplID0gNjQ7IGFsaWduID0g NjQ7IHNpZ25lZCA9IGZhbHNlOyB9IDo9IHVpbnQ2NF90O1xuIik7CisgIGN0 Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXG4i KTsKKworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0 YV9mZCwgbWV0YWRhdGFfZm10LAorCQkJICBDVEZfU0FWRV9NQUpPUiwgQ1RG X1NBVkVfTUlOT1IsCisJCQkgIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElB TiA/ICJsZSIgOiAiYmUiKTsKKyAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAo dGNzcC0+bWV0YWRhdGFfZmQsICJcbiIpOworfQorCisvKiBXcml0ZSB0aGUg Ym9keSBvZiBDVEYncyBtZXRhZGF0YSB0byBUQ1NQLT5NRVRBREFUQV9GRC4g ICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV9tZXRhZGF0YSAoc3RydWN0 IGN0Zl9zYXZlX3MgKnRjc3ApCit7CisgIHN0cnVjdCBjdGZfc2F2ZV90cF9z ICp0cHM7CisgIHN0cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3Q7 CisgIHN0cnVjdCBjdGZfc2F2ZV90eXBlX3MgKnQ7CisKKyAgY3RmX3NhdmVf ZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJcbiIpOworCisg IC8qIFdyaXRlIGV2ZW50LiAgKi8KKyAgZm9yICh0cHMgPSB0Y3NwLT50cDsg dHBzOyB0cHMgPSB0cHMtPm5leHQpCisgICAgeworICAgICAgY3RmX3NhdmVf ZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsCisJCQkgICAgICAi ZXZlbnQge1xuXHRuYW1lID0gXCIlcyVzXCI7XG5cdGlkID0gJXU7XG4iCisJ CQkgICAgICAiXHRmaWVsZHMgOj0gc3RydWN0IHsgXG4iLAorCQkJICAgICAg dHBzLT50cC0+YmFzZS5hZGRyX3N0cmluZywKKwkJCSAgICAgIHRwcy0+c3Rl cHBpbmdfZnJhbWUgPyAiIHdoaWxlLXN0ZXBwaW5nIiA6ICIiLAorCQkJICAg ICAgdHBzLT5pZCk7CisgICAgICBmb3IgKGNvbGxlY3QgPSB0cHMtPmNvbGxl Y3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5uZXh0KQorICAgICAg ICB7CisJICBjaGFyICp0bXA7CisJICBjb25zdCBjaGFyICpvbGRfdGFiOwor CSAgaW50IGZpbmRfc2FtZSA9IDA7CisKKwkgIGlmIChjb2xsZWN0LT5pc19y ZXQpCisJICAgIGNvbGxlY3QtPmN0Zl9zdHIgPSB4c3RyZHVwICgicmV0X3Bj Iik7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjaGFyICpuZXc7CisJICAg ICAgaW50IG5lZWRfcmVjaGVjazsKKwkgICAgICBpbnQgaTsKKworCSAgICAg IGNvbGxlY3QtPmN0Zl9zdHIgPSB4c3RyZHVwIChjb2xsZWN0LT5zdHIpOwor CSAgICAgIGZvciAoaSA9IDA7IGNvbGxlY3QtPmN0Zl9zdHJbaV0gIT0gJ1ww JzsgKytpKQorCSAgICAgICAgeworCQkgIHN3aXRjaCAoY29sbGVjdC0+Y3Rm X3N0cltpXSkKKwkJICAgIHsKKwkJICAgIGNhc2UgJyQnOgorCQkgICAgICBj b2xsZWN0LT5jdGZfc3RyCisJCQkgID0gY3RmX3NhdmVfbWV0YWRhdGFfY2hh bmdlX2NoYXIgKGNvbGxlY3QtPmN0Zl9zdHIsCisJCQkJCQkJICAgaSwgImRv bGxhciIpOworCQkgICAgICBicmVhazsKKwkJICAgIGNhc2UgJyonOgorCQkg ICAgICBjb2xsZWN0LT5jdGZfc3RyCisJCQkgID0gY3RmX3NhdmVfbWV0YWRh dGFfY2hhbmdlX2NoYXIgKGNvbGxlY3QtPmN0Zl9zdHIsCisJCQkJCQkJICAg aSwgInN0YXIiKTsKKwkJICAgICAgYnJlYWs7CisJCSAgICBjYXNlICcgJzoK KwkJICAgICAgY29sbGVjdC0+Y3RmX3N0cltpXSA9ICdfJzsKKwkJICAgICAg YnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCisJICAvKiBDaGVjayBp ZiBUUFMgaW5jbHVkZSBhIGNvbGxlY3QgdGhhdCBDVEZfU1RSIHNhbWUKKwkg ICAgIHdpdGggQ09MTEVDVC0+Q1RGX1NUUi4KKwkgICAgIElmIHNvLCByZW5h bWUgaXQgYW5kIGtlZXAgY2hlY2suICAqLworCSAgdG1wID0gYWxsb2NhIChz dHJsZW4gKGNvbGxlY3QtPmN0Zl9zdHIpICsgMzApOworCSAgc3RyY3B5ICh0 bXAsIGNvbGxlY3QtPmN0Zl9zdHIpOworCSAgd2hpbGUgKDEpCisJICAgIHsK KwkgICAgICBzdHJ1Y3QgY3RmX3NhdmVfY29sbGVjdF9zICpjb2xsZWN0MjsK KwkgICAgICBpbnQgaSA9IDA7CisKKwkgICAgICBmb3IgKGNvbGxlY3QyID0g dHBzLT5jb2xsZWN0OyBjb2xsZWN0MjsKKwkJICAgY29sbGVjdDIgPSBjb2xs ZWN0Mi0+bmV4dCkKKwkJeworCQkgIGlmIChjb2xsZWN0ICE9IGNvbGxlY3Qy ICYmIGNvbGxlY3QyLT5jdGZfc3RyCisJCSAgICAgICYmIHN0cmNtcCAoY29s bGVjdDItPmN0Zl9zdHIsIHRtcCkgPT0gMCkKKwkJICAgIGJyZWFrOworCQl9 CisJICAgICAgaWYgKGNvbGxlY3QyID09IE5VTEwpCisJCWJyZWFrOworCisJ ICAgICAgZmluZF9zYW1lID0gMTsKKwkgICAgICB4c25wcmludGYgKHRtcCwg c3RybGVuIChjb2xsZWN0LT5jdGZfc3RyKSArIDMwLAorCQkJICIlc18lZCIs IGNvbGxlY3QtPmN0Zl9zdHIsIGkrKyk7CisJICAgIH0KKwkgIGlmIChmaW5k X3NhbWUpCisJICAgIHsKKwkgICAgICB4ZnJlZSAoY29sbGVjdC0+Y3RmX3N0 cik7CisJICAgICAgY29sbGVjdC0+Y3RmX3N0ciA9IHhzdHJkdXAgKHRtcCk7 CisJICAgIH0KKworCSAgaWYgKHN0cmNtcCAoY29sbGVjdC0+Y3RmX3N0ciwg Y29sbGVjdC0+c3RyKSkKKwkgICAgd2FybmluZyAoXygiXAorXCIlc1wiIG9m IHRyYWNlcG9pbnQgJWQgcmVuYW1lZCB0byBcIiVzXCIgaW4gQ1RGIGZpbGUu IiksCisJCSAgICAgICBjb2xsZWN0LT5zdHIsIHRwcy0+dHAtPmJhc2UubnVt YmVyLAorCQkgICAgICAgY29sbGVjdC0+Y3RmX3N0cik7CisKKwkgIG9sZF90 YWIgPSB0Y3NwLT50YWI7CisJICB0Y3NwLT50YWIgPSAiXHRcdCI7CisJICBj dGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgdGNz cC0+dGFiKTsKKwkgIGlmIChjb2xsZWN0LT5pc19yZXQpCisJICAgIGN0Zl9z YXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAidWludDY0 X3QgJXM7XG4iLAorCQkJCSAgICBjb2xsZWN0LT5jdGZfc3RyKTsKKwkgIGVs c2UKKwkgICAgY3RmX3NhdmVfdmFyX2RlZmluZV93cml0ZSAodGNzcCwgY29s bGVjdC0+dHlwZSwKKwkJCQkgICAgICAgY29sbGVjdC0+Y3RmX3N0ciwgMCk7 CisJICB0Y3NwLT50YWIgPSBvbGRfdGFiOworCX0KKyAgICAgIGN0Zl9zYXZl X2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXHR9O1xufTtc biIpOworICAgIH0KK30KKworLyogQ2xlYW4gZnVuY3Rpb24gZm9yIGN0Zl9z YXZlLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX2NsZWFudXAgKHZv aWQgKnApCit7CisgIHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwID0gcDsKKyAg c3RydWN0IGN0Zl9zYXZlX3RwX3MgKnRwLCAqdG1wX3RwOworICBzdHJ1Y3Qg Y3RmX3NhdmVfdHlwZV9zICp0eXBlLCAqdG1wX3R5cGU7CisKKyAgaWYgKHRj c3AtPm1ldGFkYXRhX2ZkKQorICAgIHsKKyAgICAgIGN0Zl9zYXZlX21ldGFk YXRhICh0Y3NwKTsKKyAgICAgIGZjbG9zZSAodGNzcC0+bWV0YWRhdGFfZmQp OworICAgIH0KKworICBpZiAodGNzcC0+ZGF0YXN0cmVhbV9mZCkKKyAgICBm Y2xvc2UgKHRjc3AtPmRhdGFzdHJlYW1fZmQpOworCisgIGZvciAodHAgPSB0 Y3NwLT50cDsgdHA7IHRwID0gdG1wX3RwKQorICAgIHsKKyAgICAgIHN0cnVj dCBjdGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3QsICp0bXBfY29sbGVjdDsK KworICAgICAgZm9yIChjb2xsZWN0ID0gdHAtPmNvbGxlY3Q7IGNvbGxlY3Q7 IGNvbGxlY3QgPSB0bXBfY29sbGVjdCkKKyAgICAgICAgeworCSAgeGZyZWUg KGNvbGxlY3QtPmV4cHIpOworCSAgeGZyZWUgKGNvbGxlY3QtPnN0cik7CisJ 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 ZWFkZXJfY29udGV4dCAoJnRjcyk7CisKKyAgZm9yIChmcmFtZV9udW0gPSAw OyAxOyBmcmFtZV9udW0gKyspCisgICAgeworICAgICAgaW50IHRudW07Cisg ICAgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHA7CisgICAgICBpbnQgdHJ5X2Nv dW50OworICAgICAgdWludDMyX3QgdTMyOworICAgICAgc3RydWN0IGN0Zl9z YXZlX3RwX3MgKnRwczsKKyAgICAgIHN0cnVjdCBjdGZfc2F2ZV9jb2xsZWN0 X3MgKmNvbGxlY3Q7CisgICAgICBpbnQgdHJhY2VmcmFtZV9pc19kcm9wcGVk ID0gMDsKKworICAgICAgLyogQWxsb3cgdXNlciB0byBiYWlsIG91dCB3aXRo IF5DLiAgKi8KKyAgICAgIFFVSVQ7CisKKyAgICAgIC8qIEdvdG8gdHJhY2Vm cmFtZSBmcmFtZV9udW0gYW5kIHNldCB0cC4gICovCisgICAgICBmcmFtZV9u dW0gPSB0YXJnZXRfdHJhY2VfZmluZCAodGZpbmRfbnVtYmVyLCBmcmFtZV9u dW0sIDAsIDAsICZ0bnVtKTsKKyAgICAgIGlmIChmcmFtZV9udW0gPCAwKQor CWJyZWFrOworICAgICAgdHAgPSBnZXRfdHJhY2Vwb2ludF9ieV9udW1iZXJf b25fdGFyZ2V0ICh0bnVtKTsKKyAgICAgIGlmICghdHApCisgICAgICAgIHsK KwkgIHdhcm5pbmcgKF8oImRyb3AgdHJhY2VmcmFtZSAlZCBiZWNhdXNlIGNh bm5vdCBmaW5kIHRyYWNlcG9pbnQgJWQuIiksCisJCSAgIGZyYW1lX251bSwg dG51bSk7CisJICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoIXRwLT5iYXNl LmxvYykKKyAgICAgICAgeworCSAgd2FybmluZyAoXygiZHJvcCB0cmFjZWZy YW1lICVkIGJlY2F1c2UgdHJhY2Vwb2ludCAlZCBpcyBwZW5kaW5nLiIpLAor CQkgICBmcmFtZV9udW0sIHRwLT5iYXNlLm51bWJlcik7CisJICBjb250aW51 ZTsKKwl9CisgICAgICByZWluaXRfZnJhbWVfY2FjaGUgKCk7CisgICAgICB0 YXJnZXRfZGNhY2hlX2ludmFsaWRhdGUgKCk7CisgICAgICBzZXRfY3VycmVu dF90cmFjZWZyYW1lIChmcmFtZV9udW0pOworCisgICAgICB0cHMgPSBjdGZf c2F2ZV90cF9maW5kICgmdGNzLCB0cCk7CisKKyAgICAgIC8qIFRoZSB0cCBp cyBub3QgdmFyaWFibGUtbGVuZ3RoIGFuZCBiaWdnZXIgdGhhbiBDVEZfUEFD S0VUX1NJWkUuCisgICAgICAgICBTbyBkcm9wIGl0LiAgKi8KKyAgICAgIGlm ICh0cHMtPmlzX2Ryb3BwZWQpCisJY29udGludWU7CisKKyAgICAgIC8qIFRy eSBjb3VudCBmb3IgY3VycmVudCB0cCB3cml0ZS4KKyAgICAgICAgIElmIHRy eSBzZWNvbmQgdGltZSwgdGhlIGV2ZW50IHNpemUgYmlnZ2VyIHRoYW4gYSBw YWNrZXQuCisgICAgICAgICBUaGVuIGRyb3AgdGhpcyBldmVudC4gICovCisg ICAgICB0cnlfY291bnQgPSAwOworCityZV93cml0ZV90cDoKKyAgICAgIGlm ICh0cnlfY291bnQgPiAwKQorICAgICAgICB7CisJICAvKiBIYW5kbGUgcmV0 cnkuICAqLworCSAgaWYgKHRyeV9jb3VudCA+IDEgfHwgUEFDS0VUX0hFQURF Ul9TSVpFID09IHRjcy5jb250ZW50X3NpemUpCisJICAgIHsKKwkgICAgICAv KiBTZWNvbmQgcmV0cnkgb3IgcGFja2V0IGp1c3Qgd3JpdGUgdGhhdCBwYWNr ZXQgbWVhbnMKKwkgICAgICAgICB0aGlzIFRQIGlzIHRvbyBiaWcuICBTbyBk cm9wIGl0LiAgKi8KKwkgICAgICBpZiAodHBzLT5pc192YXJpYWJsZV9sZW5n dGgpCisJICAgICAgICB7CisJCSAgLyogVGhlIHRwIGlzIHZhcmlhYmxlLWxl bmd0aC4gICovCisJCSAgd2FybmluZyAoXygiXAordHJhY2VmcmFtZSAlZCBv ZiB0cmFjZXBvaW50ICVkIG5lZWRzIHRvIHNhdmUgZGF0YSB0aGF0IGlzIGJp Z2dlciB0aGFuIHBhY2tldCBzaXplICVkLlxuXAorU28gaXQgd2lsbCBiZSBk cm9wcGVkLiIpLCBmcmFtZV9udW0sIHRwcy0+dHAtPmJhc2UubnVtYmVyLCBD VEZfUEFDS0VUX1NJWkUpOworCQl9CisJICAgICAgZWxzZQorCSAgICAgICAg eworCQkgIC8qIFRoZSB0cCBpcyBub3QgdmFyaWFibGUtbGVuZ3RoLiAgKi8K KwkJICB3YXJuaW5nIChfKCJcCit0cmFjZXBvaW50ICVkIG5lZWQgc2F2ZSBk YXRhIHRoYXQgYmlnZ2VyIHRoYW4gcGFja2V0IHNpemUgJWQuXG5cCitTbyBh bGwgb2YgaXRzIHRyYWNlZnJhbWVzIHdpbGwgYmUgZHJvcHBlZC4iKSwKKwkJ CSAgIHRwcy0+dHAtPmJhc2UubnVtYmVyLCBDVEZfUEFDS0VUX1NJWkUpOwor CQkgIC8qIE1hcmsgdGhpcyB0cCB0byBsZXQgR0RCIGRyb3AgaXRzIHRyYWNl ZnJhbWVzLiAgKi8KKwkJICB0cHMtPmlzX2Ryb3BwZWQgPSAxOworCQl9CisJ ICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgdGNzLmNoZWNrX3NpemUg PSAwOworCSAgY3RmX3NhdmVfd3JpdGVfY29udGVudF9zaXplICgmdGNzKTsK KyAgICAgICAgICBjdGZfc2F2ZV9uZXh0X3BhY2tldCAoJnRjcyk7CisJICBj dGZfc2F2ZV93cml0ZV9wYWNrZXRfaGVhZGVyX2NvbnRleHQgKCZ0Y3MpOwor CX0KKworICAgICAgdHJ5X2NvdW50ICsrOworCisgICAgICB0Y3MuY3VycmVu dF9jb250ZW50X3NpemUgPSB0Y3MuY29udGVudF9zaXplOworICAgICAgdGNz LmNoZWNrX3NpemUgPSAxOworCisgICAgICB1MzIgPSAodWludDMyX3QpIHRw cy0+aWQ7CisgICAgICBpZiAoY3RmX3NhdmVfYWxpZ25fd3JpdGUgKCZ0Y3Ms ICh2b2lkICopJnUzMiwgc2l6ZW9mICh1MzIpLAorCQkJCXNpemVvZiAodTMy KSkpCisJZ290byByZV93cml0ZV90cDsKKworICAgICAgLyogQWxpZ24uICAq LworICAgICAgaWYgKHRwcy0+YWxpZ25fc2l6ZSkKKyAgICAgICAgeworCSAg aWYgKGN0Zl9zYXZlX2ZzZWVrICgmdGNzLAorCQkJICAgICAgQUxJR05fU0la RSAodGNzLmN1cnJlbnRfY29udGVudF9zaXplLAorCQkJCQkgIHRwcy0+YWxp Z25fc2l6ZSksCisJCQkgICAgICBTRUVLX0NVUikpCisJICAgIGdvdG8gcmVf d3JpdGVfdHA7CisJfQorCisgICAgICBmb3IgKGNvbGxlY3QgPSB0cHMtPmNv bGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5uZXh0KQorICAg ICAgICB7CisJICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBlOwor CisJICBpZiAoY29sbGVjdC0+aXNfcmV0KQorCSAgICB7CisJICAgICAgQ09S RV9BRERSIHBjOworCSAgICAgIHVpbnQ2NF90IHU2NDsKKworCSAgICAgIFRS WV9DQVRDSCAoZSwgUkVUVVJOX01BU0tfRVJST1IpCisJCXsKKwkJICBzdHJ1 Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CisKKwkJICBmcmFtZSA9IGdldF9jdXJy ZW50X2ZyYW1lICgpOworCQkgIGlmICghZnJhbWUpCisJCSAgICBlcnJvciAo XygiZ2V0IGN1cnJlbnQgZnJhbWUgZmFpbCIpKTsKKwkJICBmcmFtZSA9IGdl dF9wcmV2X2ZyYW1lIChmcmFtZSk7CisJCSAgaWYgKCFmcmFtZSkKKwkJICAg IGVycm9yIChfKCJnZXQgcHJldiBmcmFtZSBmYWlsIikpOworCisJCSAgaWYg KCFnZXRfZnJhbWVfcGNfaWZfYXZhaWxhYmxlIChmcmFtZSwgJnBjKSkKKwkJ ICAgIGVycm9yIChfKCJQQyB1bmF2YWlsYWJsZSIpKTsKKwkJfQorCSAgICAg IGlmIChlLnJlYXNvbiA8IDApCisJCXsKKwkJICB3YXJuaW5nIChfKCJcCit0 cmFjZWZyYW1lICVkIGlzIGRyb3BwZWQgYmVjYXVzZSBHREIgdHJ5IHRvIGdl dCB0aGUgdmFsdWUgb2YgXCIlc1wiIGdvdCBlcnJvcjogJXMiKSwKKwkJCSAg IGZyYW1lX251bSwgY29sbGVjdC0+c3RyLCBlLm1lc3NhZ2UpOworCQkgIHRy YWNlZnJhbWVfaXNfZHJvcHBlZCA9IDE7CisJCSAgYnJlYWs7CisJCX0KKwor CSAgICAgIHU2NCA9IHBjOworCSAgICAgIGlmIChjdGZfc2F2ZV9hbGlnbl93 cml0ZSAoJnRjcywgKGdkYl9ieXRlICopICZ1NjQsCisJCQkJCXNpemVvZiAo dTY0KSwgc2l6ZW9mICh1NjQpKSkKKwkJZ290byByZV93cml0ZV90cDsKKwkg ICAgfQorCSAgZWxzZQorICAgICAgICAgICAgeworCSAgICAgIHN0cnVjdCB2 YWx1ZSAqdmFsOworCSAgICAgIHN0cnVjdCBjbGVhbnVwICpiYWNrX2NoYWlu OworCSAgICAgIGNvbnN0IGdkYl9ieXRlICpjb250ZW50OworCisJICAgICAg YmFja19jaGFpbiA9IG1ha2VfY2xlYW51cCAobnVsbF9jbGVhbnVwLCBOVUxM KTsKKwkgICAgICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9SKQor CSAgICAgICAgeworCQkgIHZhbCA9IGV2YWx1YXRlX2V4cHJlc3Npb24gKGNv bGxlY3QtPmV4cHIpOworCQkgIGNvbnRlbnQgPSB2YWx1ZV9jb250ZW50cyAo dmFsKTsKKwkJfQorCSAgICAgIGlmIChlLnJlYXNvbiA8IDAgfHwgY29sbGVj dC0+dHlwZSAhPSB2YWx1ZV90eXBlICh2YWwpKQorCQl7CisJCSAgaWYgKGUu cmVhc29uIDwgMCkKKwkJICAgIHdhcm5pbmcgKF8oIlwKK3RyYWNlZnJhbWUg JWQgaXMgZHJvcHBlZCBiZWNhdXNlIHRyeSB0byBnZXQgdGhlIHZhbHVlIG9m IFwiJXNcIiBnb3QgZXJyb3I6ICVzIiksCisJCQkgICAgIGZyYW1lX251bSwg Y29sbGVjdC0+c3RyLCBlLm1lc3NhZ2UpOworCQkgIGVsc2UKKwkJICAgIHdh cm5pbmcgKF8oIlwKK3RyYWNlZnJhbWUgJWQgaXMgZHJvcHBlZCBiZWNhdXNl IHR5cGUgb2YgXCIlc1wiIGlzIHdyb25nLiIpLAorCQkJICAgICBmcmFtZV9u dW0sIGNvbGxlY3QtPnN0cik7CisJCSAgdHJhY2VmcmFtZV9pc19kcm9wcGVk ID0gMTsKKwkJICBkb19jbGVhbnVwcyAoYmFja19jaGFpbik7CisJCSAgYnJl YWs7CisJCX0KKworCSAgICAgIC8qIFdyaXRlIHRoaXMgdmFsIGFjY29yZGlu ZyB0byB0eXBlLiAgKi8KKwkgICAgICBpZiAoY3RmX3NhdmVfYWxpZ25fd3Jp dGUgKCZ0Y3MsIGNvbnRlbnQsCisJCQkJCVRZUEVfTEVOR1RIIChjb2xsZWN0 LT50eXBlKSwKKwkJCQkJY29sbGVjdC0+YWxpZ25fc2l6ZSkpCisJCXsKKwkJ ICBkb19jbGVhbnVwcyAoYmFja19jaGFpbik7CisJCSAgZ290byByZV93cml0 ZV90cDsKKwkJfQorCisJICAgICAgLyogRnJlZSB0aGUgbWVtb3J5IHRoYXQg YWxsb2MgYnkgZXZhbHVhdGVfZXhwcmVzc2lvbi4gICovCisJICAgICAgZG9f Y2xlYW51cHMgKGJhY2tfY2hhaW4pOworCSAgICB9CisJfQorCisgICAgICBp ZiAodHJhY2VmcmFtZV9pc19kcm9wcGVkKQorCWNvbnRpbnVlOworCisgICAg ICB0Y3MuY29udGVudF9zaXplID0gdGNzLmN1cnJlbnRfY29udGVudF9zaXpl OworICAgIH0KKyAgY3RmX3NhdmVfd3JpdGVfY29udGVudF9zaXplICgmdGNz KTsKKworICBkb19jbGVhbnVwcyAob2xkX2NoYWluKTsKK30KLS0tIC9kZXYv bnVsbAorKysgYi9jdGYuaApAQCAtMCwwICsxLDI1IEBACisvKiBDVEYgZm9y bWF0IHN1cHBvcnQuCisKKyAgIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisj aWZuZGVmIENURl9ICisjZGVmaW5lIENURl9ICisKK2V4dGVybiB2b2lkIGN0 Zl9zYXZlIChjb25zdCBjaGFyICpkaXJuYW1lKTsKKworI2VuZGlmCi0tLSBh L21pL21pLW1haW4uYworKysgYi9taS9taS1tYWluLmMKQEAgLTQ5LDYgKzQ5 LDcgQEAKICNpbmNsdWRlICJvc2RhdGEuaCIKICNpbmNsdWRlICJzcGxheS10 cmVlLmgiCiAjaW5jbHVkZSAidHJhY2Vwb2ludC5oIgorI2luY2x1ZGUgImN0 Zi5oIgogI2luY2x1ZGUgImFkYS1sYW5nLmgiCiAjaW5jbHVkZSAibGluZXNw ZWMuaCIKIApAQCAtMjQ5NSwxNiArMjQ5NiwxOSBAQCB2b2lkCiBtaV9jbWRf dHJhY2Vfc2F2ZSAoY2hhciAqY29tbWFuZCwgY2hhciAqKmFyZ3YsIGludCBh cmdjKQogewogICBpbnQgdGFyZ2V0X3NhdmVzID0gMDsKKyAgaW50IGdlbmVy YXRlX2N0ZiA9IDA7CiAgIGNoYXIgKmZpbGVuYW1lOwogCiAgIGlmIChhcmdj ICE9IDEgJiYgYXJnYyAhPSAyKQotICAgIGVycm9yIChfKCJVc2FnZTogLXRy YWNlLXNhdmUgWy1yXSBmaWxlbmFtZSIpKTsKKyAgICBlcnJvciAoXygiVXNh Z2U6IC10cmFjZS1zYXZlIFstcl0gWy1jdGZdIGZpbGVuYW1lIikpOwogCiAg IGlmIChhcmdjID09IDIpCiAgICAgewogICAgICAgZmlsZW5hbWUgPSBhcmd2 WzFdOwogICAgICAgaWYgKHN0cmNtcCAoYXJndlswXSwgIi1yIikgPT0gMCkK IAl0YXJnZXRfc2F2ZXMgPSAxOworICAgICAgaWYgKHN0cmNtcCAoYXJndlsw XSwgIi1jdGYiKSA9PSAwKQorCWdlbmVyYXRlX2N0ZiA9IDE7CiAgICAgICBl bHNlCiAJZXJyb3IgKF8oIkludmFsaWQgb3B0aW9uOiAlcyIpLCBhcmd2WzBd KTsKICAgICB9CkBAIC0yNTEzLDcgKzI1MTcsMTAgQEAgbWlfY21kX3RyYWNl X3NhdmUgKGNoYXIgKmNvbW1hbmQsIGNoYXIgKgogICAgICAgZmlsZW5hbWUg PSBhcmd2WzBdOwogICAgIH0KIAotICB0cmFjZV9zYXZlIChmaWxlbmFtZSwg dGFyZ2V0X3NhdmVzKTsKKyAgaWYgKGdlbmVyYXRlX2N0ZikKKyAgICBjdGZf c2F2ZSAoZmlsZW5hbWUpOworICBlbHNlCisgICAgdHJhY2Vfc2F2ZSAoZmls ZW5hbWUsIHRhcmdldF9zYXZlcyk7CiB9CiAKIHZvaWQKLS0tIGEvdHJhY2Vw b2ludC5jCisrKyBiL3RyYWNlcG9pbnQuYwpAQCAtNTMsNiArNTMsNyBAQAog I2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJjbGkvY2xpLXV0 aWxzLmgiCiAjaW5jbHVkZSAicHJvYmUuaCIKKyNpbmNsdWRlICJjdGYuaCIK IAogLyogcmVhZGxpbmUgaW5jbHVkZSBmaWxlcyAqLwogI2luY2x1ZGUgInJl YWRsaW5lL3JlYWRsaW5lLmgiCkBAIC01NzMsNyArNTc0LDcgQEAgd2hpbGVf c3RlcHBpbmdfcHNldWRvY29tbWFuZCAoY2hhciAqYXJncwogICBlcnJvciAo XygiVGhpcyBjb21tYW5kIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSB0cmFjZXBv aW50IGFjdGlvbnMgbGlzdC4iKSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lk CiBjb2xsZWN0X3BzZXVkb2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9t X3R0eSkKIHsKICAgZXJyb3IgKF8oIlRoaXMgY29tbWFuZCBjYW4gb25seSBi ZSB1c2VkIGluIGEgdHJhY2Vwb2ludCBhY3Rpb25zIGxpc3QuIikpOwpAQCAt MTE0Nyw2ICsxMTQ4LDM0IEBAIGRvX2NvbGxlY3Rfc3ltYm9sIChjb25zdCBj aGFyICpwcmludF9uYW0KICAgcC0+Y291bnQrKzsKIH0KIAoraW50CithZGRf bG9jYWxfc3ltYm9sc18xIChpbnQgdHlwZSwgQ09SRV9BRERSIHBjLAorCQkg ICAgIGl0ZXJhdGVfb3Zlcl9ibG9ja19hcmdfbG9jYWxfdmFyc19jYiBjYiwK KwkJICAgICB2b2lkICpjYl9kYXRhKQoreworICBzdHJ1Y3QgYmxvY2sgKmJs b2NrOworCisgIGlmICh0eXBlID09ICdMJykKKyAgICB7CisgICAgICBibG9j ayA9IGJsb2NrX2Zvcl9wYyAocGMpOworICAgICAgaWYgKGJsb2NrID09IE5V TEwpCisJcmV0dXJuIC0xOworCisgICAgICBpdGVyYXRlX292ZXJfYmxvY2tf bG9jYWxfdmFycyAoYmxvY2ssIGNiLCBjYl9kYXRhKTsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICBwYyA9IGdldF9wY19mdW5jdGlvbl9zdGFydCAo cGMpOworICAgICAgYmxvY2sgPSBibG9ja19mb3JfcGMgKHBjKTsKKyAgICAg IGlmIChibG9jayA9PSBOVUxMKQorCXJldHVybiAtMTsKKworICAgICAgaXRl cmF0ZV9vdmVyX2Jsb2NrX2FyZ192YXJzIChibG9jaywgY2IsIGNiX2RhdGEp OworICAgIH0KKworICByZXR1cm4gMDsKK30KKwogLyogQWRkIGFsbCBsb2Nh bHMgKG9yIGFyZ3MpIHN5bWJvbHMgdG8gY29sbGVjdGlvbiBsaXN0LiAgKi8K IHN0YXRpYyB2b2lkCiBhZGRfbG9jYWxfc3ltYm9scyAoc3RydWN0IGNvbGxl Y3Rpb25fbGlzdCAqY29sbGVjdCwKQEAgLTExNTUsNiArMTE4NCw3IEBAIGFk ZF9sb2NhbF9zeW1ib2xzIChzdHJ1Y3QgY29sbGVjdGlvbl9saXMKIHsKICAg c3RydWN0IGJsb2NrICpibG9jazsKICAgc3RydWN0IGFkZF9sb2NhbF9zeW1i b2xzX2RhdGEgY2JfZGF0YTsKKyAgY29uc3QgY2hhciAqbmFtZTsKIAogICBj Yl9kYXRhLmNvbGxlY3QgPSBjb2xsZWN0OwogICBjYl9kYXRhLmdkYmFyY2gg PSBnZGJhcmNoOwpAQCAtMTE2NCwzMyArMTE5NCwxOSBAQCBhZGRfbG9jYWxf c3ltYm9scyAoc3RydWN0IGNvbGxlY3Rpb25fbGlzCiAgIGNiX2RhdGEuY291 bnQgPSAwOwogCiAgIGlmICh0eXBlID09ICdMJykKLSAgICB7Ci0gICAgICBi bG9jayA9IGJsb2NrX2Zvcl9wYyAocGMpOwotICAgICAgaWYgKGJsb2NrID09 IE5VTEwpCi0JewotCSAgd2FybmluZyAoXygiQ2FuJ3QgY29sbGVjdCBsb2Nh bHM7ICIKLQkJICAgICAibm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxhYmxl LlxuIikpOwotCSAgcmV0dXJuOwotCX0KLQotICAgICAgaXRlcmF0ZV9vdmVy X2Jsb2NrX2xvY2FsX3ZhcnMgKGJsb2NrLCBkb19jb2xsZWN0X3N5bWJvbCwg JmNiX2RhdGEpOwotICAgICAgaWYgKGNiX2RhdGEuY291bnQgPT0gMCkKLQl3 YXJuaW5nIChfKCJObyBsb2NhbHMgZm91bmQgaW4gc2NvcGUuIikpOwotICAg IH0KKyAgICBuYW1lID0gImxvY2FscyI7CiAgIGVsc2UKLSAgICB7Ci0gICAg ICBwYyA9IGdldF9wY19mdW5jdGlvbl9zdGFydCAocGMpOwotICAgICAgYmxv Y2sgPSBibG9ja19mb3JfcGMgKHBjKTsKLSAgICAgIGlmIChibG9jayA9PSBO VUxMKQotCXsKLQkgIHdhcm5pbmcgKF8oIkNhbid0IGNvbGxlY3QgYXJnczsg bm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxhYmxlLiIpKTsKLQkgIHJldHVy bjsKLQl9CisgICAgbmFtZSA9ICJhcmdzIjsKIAotICAgICAgaXRlcmF0ZV9v dmVyX2Jsb2NrX2FyZ192YXJzIChibG9jaywgZG9fY29sbGVjdF9zeW1ib2ws ICZjYl9kYXRhKTsKLSAgICAgIGlmIChjYl9kYXRhLmNvdW50ID09IDApCi0J d2FybmluZyAoXygiTm8gYXJncyBmb3VuZCBpbiBzY29wZS4iKSk7CisgIGlm IChhZGRfbG9jYWxfc3ltYm9sc18xICh0eXBlLCBwYywgZG9fY29sbGVjdF9z eW1ib2wsICZjYl9kYXRhKSkKKyAgICB7CisgICAgICB3YXJuaW5nIChfKCJD YW4ndCBjb2xsZWN0ICVzOyBubyBzeW1ib2wgdGFibGUgaW5mbyBhdmFpbGFi bGUuXG4iKSwKKwkgICAgICAgbmFtZSk7CisgICAgICByZXR1cm47CiAgICAg fQorCisgIGlmIChjYl9kYXRhLmNvdW50ID09IDApCisgICAgd2FybmluZyAo XygiTm8gJXMgZm91bmQgaW4gc2NvcGUuIiksIG5hbWUpOwogfQogCiBzdGF0 aWMgdm9pZApAQCAtMzE1MSw2ICszMTY3LDcgQEAgc3RhdGljIHZvaWQKIHRy YWNlX3NhdmVfY29tbWFuZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQog ewogICBpbnQgdGFyZ2V0X2RvZXNfc2F2ZSA9IDA7CisgIGludCBnZW5lcmF0 ZV9jdGYgPSAwOwogICBjaGFyICoqYXJndjsKICAgY2hhciAqZmlsZW5hbWUg PSBOVUxMOwogICBzdHJ1Y3QgY2xlYW51cCAqYmFja190bzsKQEAgLTMxNjUs NiArMzE4Miw4IEBAIHRyYWNlX3NhdmVfY29tbWFuZCAoY2hhciAqYXJncywg aW50IGZyb20KICAgICB7CiAgICAgICBpZiAoc3RyY21wICgqYXJndiwgIi1y IikgPT0gMCkKIAl0YXJnZXRfZG9lc19zYXZlID0gMTsKKyAgICAgIGlmIChz dHJjbXAgKCphcmd2LCAiLWN0ZiIpID09IDApCisJZ2VuZXJhdGVfY3RmID0g MTsKICAgICAgIGVsc2UgaWYgKCoqYXJndiA9PSAnLScpCiAJZXJyb3IgKF8o InVua25vd24gb3B0aW9uIGAlcyciKSwgKmFyZ3YpOwogICAgICAgZWxzZQpA QCAtMzE3NCwxMCArMzE5MywxOCBAQCB0cmFjZV9zYXZlX2NvbW1hbmQgKGNo YXIgKmFyZ3MsIGludCBmcm9tCiAgIGlmICghZmlsZW5hbWUpCiAgICAgZXJy b3Jfbm9fYXJnIChfKCJmaWxlIGluIHdoaWNoIHRvIHNhdmUgdHJhY2UgZGF0 YSIpKTsKIAotICB0cmFjZV9zYXZlIChmaWxlbmFtZSwgdGFyZ2V0X2RvZXNf c2F2ZSk7CisgIGlmIChnZW5lcmF0ZV9jdGYpCisgICAgeworICAgICAgaWYg KHRhcmdldF9kb2VzX3NhdmUpCisJZXJyb3Jfbm9fYXJnIChfKCItciBjYW5u b3QgYmUgdXNlZCB3aXRoIC1jdGYuIikpOworICAgICAgY3RmX3NhdmUgKGZp bGVuYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB0cmFjZV9zYXZlIChmaWxl bmFtZSwgdGFyZ2V0X2RvZXNfc2F2ZSk7CiAKICAgaWYgKGZyb21fdHR5KQot ICAgIHByaW50Zl9maWx0ZXJlZCAoXygiVHJhY2UgZGF0YSBzYXZlZCB0byBm aWxlICclcycuXG4iKSwgZmlsZW5hbWUpOworICAgIHByaW50Zl9maWx0ZXJl ZCAoXygiVHJhY2UgZGF0YSBzYXZlZCB0byAlcyAnJXMnLlxuIiksCisJCSAg ICAgZ2VuZXJhdGVfY3RmID8gImRpcmVjdG9yeSIgOiAiZmlsZSIsIGZpbGVu YW1lKTsKIAogICBkb19jbGVhbnVwcyAoYmFja190byk7CiB9CkBAIC01MjIw LDYgKzUyNDcsNyBAQCBfaW5pdGlhbGl6ZV90cmFjZXBvaW50ICh2b2lkKQog ICBhZGRfY29tICgidHNhdmUiLCBjbGFzc190cmFjZSwgdHJhY2Vfc2F2ZV9j b21tYW5kLCBfKCJcCiBTYXZlIHRoZSB0cmFjZSBkYXRhIHRvIGEgZmlsZS5c blwKIFVzZSB0aGUgJy1yJyBvcHRpb24gdG8gZGlyZWN0IHRoZSB0YXJnZXQg dG8gc2F2ZSBkaXJlY3RseSB0byB0aGUgZmlsZSxcblwKK1VzZSB0aGUgJy1j dGYnIG9wdGlvbiB0byBzYXZlIHRoZSBkYXRhIHRvIENURiBmb3JtYXQsXG5c CiB1c2luZyBpdHMgb3duIGZpbGVzeXN0ZW0uIikpOwogCiAgIGMgPSBhZGRf Y29tICgidHZhcmlhYmxlIiwgY2xhc3NfdHJhY2UsIHRyYWNlX3ZhcmlhYmxl X2NvbW1hbmQsXygiXAotLS0gYS90cmFjZXBvaW50LmgKKysrIGIvdHJhY2Vw b2ludC5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAidGFyZ2V0Lmgi CiAjaW5jbHVkZSAibWVtcmFuZ2UuaCIKICNpbmNsdWRlICJnZGJfdmVjcy5o IgorI2luY2x1ZGUgInN0YWNrLmgiCiAKIC8qIEEgdHJhY2Ugc3RhdGUgdmFy aWFibGUgaXMgYSB2YWx1ZSBtYW5hZ2VkIGJ5IGEgdGFyZ2V0IGJlaW5nCiAg ICB0cmFjZWQuICBBIHRyYWNlIHN0YXRlIHZhcmlhYmxlIChvciB0c3YgZm9y IHNob3J0KSBjYW4gYmUgYWNjZXNzZWQKQEAgLTI0Niw2ICsyNDcsNyBAQCBl eHRlcm4gdm9pZCB2YWxpZGF0ZV9hY3Rpb25saW5lIChjaGFyICoqCiAKIGV4 dGVybiB2b2lkIGVuZF9hY3Rpb25zX3BzZXVkb2NvbW1hbmQgKGNoYXIgKmFy Z3MsIGludCBmcm9tX3R0eSk7CiBleHRlcm4gdm9pZCB3aGlsZV9zdGVwcGlu Z19wc2V1ZG9jb21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpOwor ZXh0ZXJuIHZvaWQgY29sbGVjdF9wc2V1ZG9jb21tYW5kIChjaGFyICphcmdz LCBpbnQgZnJvbV90dHkpOwogCiBleHRlcm4gc3RydWN0IHRyYWNlX3N0YXRl X3ZhcmlhYmxlICpmaW5kX3RyYWNlX3N0YXRlX3ZhcmlhYmxlIChjb25zdCBj aGFyICpuYW1lKTsKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vfc3RhdGVfdmFyaWFi bGUgKmNyZWF0ZV90cmFjZV9zdGF0ZV92YXJpYWJsZSAoY29uc3QgY2hhciAq bmFtZSk7CkBAIC0yOTAsNCArMjkyLDcgQEAgZXh0ZXJuIHN0cnVjdCB0cmFj ZWZyYW1lX2luZm8gKnBhcnNlX3RyYQogZXh0ZXJuIGludCB0cmFjZWZyYW1l X2F2YWlsYWJsZV9tZW1vcnkgKFZFQyhtZW1fcmFuZ2VfcykgKipyZXN1bHQs CiAJCQkJCUNPUkVfQUREUiBtZW1hZGRyLCBVTE9OR0VTVCBsZW4pOwogCitl eHRlcm4gaW50IGFkZF9sb2NhbF9zeW1ib2xzXzEgKGludCB0eXBlLCBDT1JF X0FERFIgcGMsCisJCQkJaXRlcmF0ZV9vdmVyX2Jsb2NrX2FyZ19sb2NhbF92 YXJzX2NiIGNiLAorCQkJCXZvaWQgKmNiX2RhdGEpOwogI2VuZGlmCS8qIFRS QUNFUE9JTlRfSCAqLwo= --14dae93a113de5dbe304d3f4bc68--