From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32166 invoked by alias); 23 Jan 2013 05:54:20 -0000 Received: (qmail 32157 invoked by uid 22791); 23 Jan 2013 05:54:19 -0000 X-SWARE-Spam-Status: No, hits=-4.6 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_BT,TW_DB,TW_KG X-Spam-Check-By: sourceware.org Received: from mail-ob0-f175.google.com (HELO mail-ob0-f175.google.com) (209.85.214.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 23 Jan 2013 05:54:10 +0000 Received: by mail-ob0-f175.google.com with SMTP id tb18so3247776obb.20 for ; Tue, 22 Jan 2013 21:54:09 -0800 (PST) X-Received: by 10.60.169.171 with SMTP id af11mr83132oec.92.1358920449779; Tue, 22 Jan 2013 21:54:09 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.84.5 with HTTP; Tue, 22 Jan 2013 21:53:29 -0800 (PST) In-Reply-To: References: <50AC323F.1070907@mentor.com> <50AC3E15.1020308@codesourcery.com> <87zk203zw3.fsf@fleche.redhat.com> From: Hui Zhu Date: Wed, 23 Jan 2013 05:54:00 -0000 Message-ID: Subject: Re: [PATCH] Add CTF support to GDB [3/4] ctf target To: "Abid, Hafiz" Cc: Tom Tromey , "Qi, Yao" , "Zhu, Hui" , gdb-patches ml Content-Type: multipart/mixed; boundary=bcaec54d4766afe80e04d3ee5236 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/msg00540.txt.bz2 --bcaec54d4766afe80e04d3ee5236 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 10193 On Wed, Jan 16, 2013 at 11:12 PM, Abid, Hafiz wrote: > Hi Hui, > Some minor issues that I noted. > > Many functions in your patch starts with bt_ctf_ like the function from l= ibbabeltrace. So it is difficult to see which function comes from the libra= ry and which function is actually in GDB. I am not sure about the conventio= n but it looks to me that it would make the code more readable if you renam= ed your functions. Bring them into GDB namespace. I agree with you. And it increase the Increased the possibility of same name issue with babeltrace in the future. So I change it to "ctf_". > >>+ error (_("Initialize libbabeltrace fail")); >>+ error (_("Use libbabeltrace open \"%s\" fail"), dirname); >>+ warning (_("get tracepoint id fail.")); > As Tom already pointed out, these messages can be improved. How about som= ething like "Unable to get the tracepoint id" Fixed. > >>+/* Add each variable of crrent traceframe to GDB as internalvar. */ > current Fixed. > >>+ warning (_("$%s is not support."), name); > supported Fixed. > >>+ if (bt_ctf_event_to_internalvar ()) >>+ warning (_("add internal var of this frame fail.")); > This warning message does not tell much. Perhaps it can be moved inside b= t_ctf_event_to_internalvar where we have more context to provide more infor= mation. Also it needs to be re-phrased. Sorry. I didn't have good words for these 2 fail. So I just change warning to Unable to xxx... > > May be it is just me but indentation looks off at many places. > > Regards, > Abid Thanks, Hui 2013-01-23 Hui Zhu * aclocal.m4: Add PKG_PROG_PKG_CONFIG. * c-exp.y (lookup_enum): Rename to lookup_enum_gdb. * config.in (HAVE_LIBBABELTRACE): new macro. * configure: New option "--enable-ctf-target". * configure.ac: New option "--enable-ctf-target". * ctf.c (babeltrace/babeltrace.h, babeltrace/types.h, babeltrace/ctf/events.h, babeltrace/ctf/iterator.h): New includes. (ctx, iter, current_tp, ctf_event, ctf_ops): New variables. (ctf_close_dir, ctf_open_dir, ctf_find_field, ctf_event_id, ctf_def_to_val, ctf_event_to_internalvar, ctf_goto_begin, ctf_find_num, ctf_find_tp, ctf_open, ctf_close, ctf_trace_find, ctf_get_current_tracepoint_name, ctf_trace_dump, ctf_has_all_memory, ctf_has_memory, ctf_has_stack, ctf_has_registers, ctf_thread_alive, init_ctf_ops, _initialize_ctf): New functions. * gdbtypes.c (lookup_enum): Rename to lookup_enum_gdb. * python/py-type.c (typy_lookup_typename): Rename lookup_enum to lookup_enum_gdb. * symtab.h (lookup_enum): Rename to lookup_enum_gdb. * target.c (update_current_target): Add to_get_current_tracepoint_name and to_trace_dump. (update_current_target): Ditto. * target.h (target_ops): Add to_get_current_tracepoint_name and to_trace_dump. (target_get_current_tracepoint_name, target_trace_dump): New macro. * tracepoint.c (tfind_1): Add checks for has_stack_frames (). Call target_get_current_tracepoint_name to show the name of tracepoint. (trace_dump_command): Call target_trace_dump. > > ________________________________________ > From: gdb-patches-owner@sourceware.org [gdb-patches-owner@sourceware.org]= on behalf of Hui Zhu [teawater@gmail.com] > Sent: Friday, December 21, 2012 8:22 AM > To: Tom Tromey > Cc: Qi, Yao; Zhu, Hui; gdb-patches ml > Subject: Re: [PATCH] Add CTF support to GDB [3/4] ctf target > > On Fri, Nov 30, 2012 at 4:41 AM, Tom Tromey wrote: >>>>>>> "Hui" =3D=3D Hui Zhu writes: >> >> Hui> --- a/configure.ac >> Hui> +++ b/configure.ac >> Hui> @@ -2306,6 +2306,134 @@ if test "$enable_gdbserver" =3D "yes" -a " >> Hui> AC_MSG_ERROR(Automatic gdbserver build is not supported for this= configuration) >> Hui> fi >> >> Hui> +AC_ARG_ENABLE(ctf-target, >> Hui> +AS_HELP_STRING([--enable-ctf-target], >> Hui> + [enable ctf target (yes/no/auto, default is auto)]), >> Hui> +[case "${enableval}" in >> Hui> + yes| no|auto) ;; >> Hui> + *) AC_MSG_ERROR(bad value ${enableval} for --enable-ctf-target o= ption) ;; >> Hui> +esac],[enable_ctf_target=3Dauto]) >> Hui> + >> Hui> +if test "$enable_ctf_target" =3D "yes" || test "$enable_ctf_target= " =3D "auto"; then >> Hui> + pkg_config_args=3Dglib-2.0 >> Hui> + for module in . gmodule >> [...] >> >> This seems like an awful lot of code just to check for one library. >> Does libbabeltrace not come with its own pkg-config file? >> Or not link against its dependencies? >> > > The developer of babeltrace added a patch to "provides a basic > pkg-config file for libbabeltrace" after I sent request about that. > So its trunk support pkg-config now. > New patch support it now. > >> Hui> +static struct bt_context *ctx =3D NULL; >> Hui> +static struct bt_ctf_iter *iter =3D NULL; >> Hui> +static int current_tp; >> Hui> +static struct bt_ctf_event *ctf_event; >> >> Comments. >> >> Most of this patch was impenetrable to me due to the general lack of >> comments. > > I added comments to each function to this patch. > >> >> Hui> + error (_("Try to use libbabeltrace got error")); >> >> Please phrase differently. > > I change it to "Initialize libbabeltrace fail". > >> >> Hui> + error (_("Try to open \"%s\" got error"), dirname); >> >> Likewise. > > I change it to: > error (_("Use libbabeltrace open \"%s\" fail"), dirname); > >> >> Hui> + if (strcmp (bt_ctf_field_name(list_d[i]), name) =3D=3D 0) >> >> Missing a space before a paren. This happens in a few spots. > > Fixed. > >> >> Hui> + /* XXX: some types are not support. */ >> >> How about an error in this case? >> No new FIXME comments anyway. > > Removed. > When this type is not support, GDB will output a warning for that. > >> >> Hui> +extern void output_command (char *, int); >> >> Time for this to go into a header file. > > Fixed. > >> >> Hui> --- a/target.h >> Hui> +++ b/target.h >> Hui> @@ -811,6 +811,10 @@ struct target_ops >> Hui> successful, 0 otherwise. */ >> Hui> int (*to_set_trace_notes) (char *user, char *notes, char* stop= notes); >> >> Hui> + const char *(*to_get_current_tracepoint_name) (void); >> Hui> + >> Hui> + int (*to_trace_dump) (int from_tty); >> >> These sorts of additions particularly need documentation. > > I change it to: > /* Return name of current traceframe's tracepoint. > Return NULL if the target doesn't support it. */ > > const char *(*to_get_current_tracepoint_name) (void); > > /* Dump all the value of current traceframe. > Return fail if the target doesn't support it. Then GDB will > dump all the value of current traceframe with itself. */ > > int (*to_trace_dump) (int from_tty); > >> >> Hui> +#define target_get_current_tracepoint_name() \ >> Hui> +(*current_target.to_get_current_tracepoint_name) () >> Hui> + >> Hui> +#define target_trace_dump(from_tty) \ >> Hui> +(*current_target.to_trace_dump) (from_tty) >> >> Formatting. > > Fixed. > >> >> Hui> --- a/tracepoint.c >> Hui> +++ b/tracepoint.c >> Hui> @@ -2243,7 +2243,7 @@ tfind_1 (enum trace_find_type type, int >> Hui> below (correctly) decide to print out the source location of = the >> Hui> trace frame. */ >> Hui> if (!(type =3D=3D tfind_number && num =3D=3D -1) >> Hui> - && (has_stack_frames () || traceframe_number >=3D 0)) >> Hui> + && has_stack_frames ()) >> >> I'm curious about the rationale and impact of this change. > > I agree with this change looks odd. But it is indispensable for this pat= ch. > According to my prev mail in this thread, maybe you had gotten that > CTF format is not base on memory mode like tfild. So it don't have > frame or something like it. > > All this part of code is: > if (!(type =3D=3D tfind_number && num =3D=3D -1) > && (has_stack_frames () || traceframe_number >=3D 0)) > old_frame_id =3D get_frame_id (get_current_frame ()); > > target ctf cannot support "old_frame_id =3D get_frame_id > (get_current_frame ());". But traceframe_number >=3D 0 will let GDB > call the line that target ctf don't support. > And I don't think traceframe_number >=3D 0 is very import for "target > remote" or "target tfile" that support tfind because both of them > "has_stack_frames ()". > So I remove "traceframe_number >=3D 0". > >> >> Tom > > Thanks for your help. > > According to your comments. I post a new patch. > > Merry Christmas! > > Best, > Hui > > 2012-12-20 Hui Zhu > > * aclocal.m4: Add PKG_PROG_PKG_CONFIG. > * c-exp.y (lookup_enum): Rename to lookup_enum_gdb. > * config.in (HAVE_LIBBABELTRACE): new macro. > * configure: New option "--enable-ctf-target". > * configure.ac: New option "--enable-ctf-target". > * ctf.c (babeltrace/babeltrace.h, babeltrace/types.h, > babeltrace/ctf/events.h, babeltrace/ctf/iterator.h): New includes. > (ctx, iter, current_tp, ctf_event, ctf_ops): New variables. > (bt_ctf_close, bt_ctf_open, bt_ctf_find_field, bt_ctf_event_id, > bt_ctf_def_to_val, bt_ctf_event_to_internalvar, bt_ctf_goto_begin, > bt_ctf_find_num, bt_ctf_find_tp, ctf_open, ctf_close, > ctf_trace_find, ctf_get_current_tracepoint_name, ctf_trace_dump, > ctf_has_all_memory, ctf_has_memory, ctf_has_stack, > ctf_has_registers, ctf_thread_alive, init_ctf_ops, > _initialize_ctf): New functions. > * gdbtypes.c (lookup_enum): Rename to lookup_enum_gdb. > * python/py-type.c (typy_lookup_typename): Rename lookup_enum > to lookup_enum_gdb. > * symtab.h (lookup_enum): Rename to lookup_enum_gdb. > * target.c (update_current_target): Add > to_get_current_tracepoint_name and to_trace_dump. > (update_current_target): Ditto. > * target.h (target_ops): Add to_get_current_tracepoint_name and > to_trace_dump. > (target_get_current_tracepoint_name, target_trace_dump): New > macro. > * tracepoint.c (tfind_1): Add checks for has_stack_frames (). > Call target_get_current_tracepoint_name to show the name of > tracepoint. > (trace_dump_command): Call target_trace_dump. --bcaec54d4766afe80e04d3ee5236 Content-Type: text/plain; charset=US-ASCII; name="ctf-target.txt" Content-Disposition: attachment; filename="ctf-target.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hca240iq0 Content-length: 37906 LS0tIGEvYWNsb2NhbC5tNAorKysgYi9hY2xvY2FsLm00CkBAIC04NSw2ICs4 NSwzMiBAQCBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYW1fbWFpbnRh aW5lCiBdCiApCiAKKyMgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJ T05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitB Q19ERUZVTihbUEtHX1BST0dfUEtHX0NPTkZJR10sCitbbTRfcGF0dGVybl9m b3JiaWQoW15fP1BLR19bQS1aX10rJF0pCittNF9wYXR0ZXJuX2FsbG93KFte UEtHX0NPTkZJRyhfKFBBVEh8TElCRElSfFNZU1JPT1RfRElSfEFMTE9XX1NZ U1RFTV8oQ0ZMQUdTfExJQlMpKSk/JF0pCittNF9wYXR0ZXJuX2FsbG93KFte UEtHX0NPTkZJR18oRElTQUJMRV9VTklOU1RBTExFRHxUT1BfQlVJTERfRElS fERFQlVHX1NQRVcpJF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHXSwgW3Bh dGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5XSkKK0FDX0FSR19WQVIoW1BLR19D T05GSUdfUEFUSF0sIFtkaXJlY3RvcmllcyB0byBhZGQgdG8gcGtnLWNvbmZp ZydzIHNlYXJjaCBwYXRoXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUdfTElC RElSXSwgW3BhdGggb3ZlcnJpZGluZyBwa2ctY29uZmlnJ3MgYnVpbHQtaW4g c2VhcmNoIHBhdGhdKQorCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09O RklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJQUNfUEFUSF9UT09MKFtQS0df Q09ORklHXSwgW3BrZy1jb25maWddKQorZmkKK2lmIHRlc3QgLW4gIiRQS0df Q09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249bTRfZGVmYXVsdChb JDFdLCBbMC45LjBdKQorCUFDX01TR19DSEVDS0lORyhbcGtnLWNvbmZpZyBp cyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uXSkKKwlpZiAk UEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2df bWluX3ZlcnNpb247IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbeWVzXSkKKwll bHNlCisJCUFDX01TR19SRVNVTFQoW25vXSkKKwkJUEtHX0NPTkZJRz0iIgor CWZpCitmaVtdZG5sCitdKSMgUEtHX1BST0dfUEtHX0NPTkZJRworCisKIEFV X0RFRlVOKFtqbV9NQUlOVEFJTkVSX01PREVdLCBbQU1fTUFJTlRBSU5FUl9N T0RFXSkKIAogIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLS0gYS9jb25maWcuaW4KKysrIGIv Y29uZmlnLmluCkBAIC0yMTYsNiArMjE2LDEwIEBACiAvKiBEZWZpbmUgdG8g MSBpZiB5b3UgaGF2ZSB0aGUgYHcnIGxpYnJhcnkgKC1sdykuICovCiAjdW5k ZWYgSEFWRV9MSUJXCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo ZSBgYmFiZWx0cmFjZScgbGlicmFyeQorICAgKC1sYmFiZWx0cmFjZSAtbGJh YmVsdHJhY2UtY3RmKS4gICovCisjdW5kZWYgSEFWRV9MSUJCQUJFTFRSQUNF CisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGluay5oPiBo ZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTktfSAogCi0tLSBhL2Nv bmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTU5Miw2ICs1OTIsOSBAQCBl bmFibGVfb3B0aW9uX2NoZWNraW5nPW5vCiBhY19zdWJzdF92YXJzPSdMVExJ Qk9CSlMKIExJQk9CSlMKIEdEQl9OTV9GSUxFCitQS0dfQ09ORklHX0xJQkRJ UgorUEtHX0NPTkZJR19QQVRICitQS0dfQ09ORklHCiBmcmFncwogdGFyZ2V0 X3N1YmRpcgogQ09ORklHX1VOSU5TVEFMTApAQCAtODE5LDYgKzgyMiw3IEBA IHdpdGhfeAogZW5hYmxlX3NpbQogZW5hYmxlX211bHRpX2ljZQogZW5hYmxl X2dkYnNlcnZlcgorZW5hYmxlX2N0Zl90YXJnZXQKICcKICAgICAgIGFjX3By ZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCiBob3N0X2FsaWFzCkBAIC04MzMs NyArODM3LDEwIEBAIE1BS0VJTkZPCiBNQUtFSU5GT0ZMQUdTCiBZQUNDCiBZ RkxBR1MKLVhNS01GJworWE1LTUYKK1BLR19DT05GSUcKK1BLR19DT05GSUdf UEFUSAorUEtHX0NPTkZJR19MSUJESVInCiBhY19zdWJkaXJzX2FsbD0ndGVz dHN1aXRlCiBnZGJ0awogbXVsdGktaWNlCkBAIC0xNDgyLDYgKzE0ODksNyBA QCBPcHRpb25hbCBGZWF0dXJlczoKICAgLS1lbmFibGUtbXVsdGktaWNlICAg ICAgYnVpbGQgdGhlIG11bHRpLWljZS1nZGItc2VydmVyCiAgIC0tZW5hYmxl LWdkYnNlcnZlciAgICAgIGF1dG9tYXRpY2FsbHkgYnVpbGQgZ2Ric2VydmVy ICh5ZXMvbm8vYXV0bywgZGVmYXVsdAogICAgICAgICAgICAgICAgICAgICAg ICAgICBpcyBhdXRvKQorICAtLWVuYWJsZS1jdGYtdGFyZ2V0ICAgICBlbmFi bGUgY3RmIHRhcmdldCAoeWVzL25vL2F1dG8sIGRlZmF1bHQgaXMgYXV0bykK IAogT3B0aW9uYWwgUGFja2FnZXM6CiAgIC0td2l0aC1QQUNLQUdFWz1BUkdd ICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQpAQCAtMTU1MSw2ICsxNTU5LDEx IEBAIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgog ICAgICAgICAgICAgICBUaGlzIHNjcmlwdCB3aWxsIGRlZmF1bHQgWUZMQUdT IHRvIHRoZSBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgYQogICAgICAgICAgICAg ICBkZWZhdWx0IHZhbHVlIG9mIGAtZCcgZ2l2ZW4gYnkgc29tZSBtYWtlIGFw cGxpY2F0aW9ucy4KICAgWE1LTUYgICAgICAgUGF0aCB0byB4bWttZiwgTWFr ZWZpbGUgZ2VuZXJhdG9yIGZvciBYIFdpbmRvdyBTeXN0ZW0KKyAgUEtHX0NP TkZJRyAgcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHkKKyAgUEtHX0NPTkZJ R19QQVRICisgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIHRvIGFkZCB0byBw a2ctY29uZmlnJ3Mgc2VhcmNoIHBhdGgKKyAgUEtHX0NPTkZJR19MSUJESVIK KyAgICAgICAgICAgICAgcGF0aCBvdmVycmlkaW5nIHBrZy1jb25maWcncyBi dWlsdC1pbiBzZWFyY2ggcGF0aAogCiBVc2UgdGhlc2UgdmFyaWFibGVzIHRv IG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3Ig dG8gaGVscAogaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdp dGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgpAQCAtMTQwOTAsNiAr MTQxMDMsMjIyIEBAIGlmIHRlc3QgIiRlbmFibGVfZ2Ric2VydmVyIiA9ICJ5 ZXMiIC1hICIKICAgYXNfZm5fZXJyb3IgIkF1dG9tYXRpYyBnZGJzZXJ2ZXIg YnVpbGQgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb25maWd1cmF0aW9u IiAiJExJTkVOTyIgNQogZmkKIAorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxl LWN0Zi10YXJnZXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY3Rm X3RhcmdldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5h YmxlX2N0Zl90YXJnZXQ7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgeWVz fCBub3xhdXRvKSA7OworICAqKSBhc19mbl9lcnJvciAiYmFkIHZhbHVlICR7 ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtY3RmLXRhcmdldCBvcHRpb24iICIk TElORU5PIiA1IDs7Citlc2FjCitlbHNlCisgIGVuYWJsZV9jdGZfdGFyZ2V0 PWF1dG8KK2ZpCisKKworaWYgdGVzdCAiJGVuYWJsZV9jdGZfdGFyZ2V0IiA9 ICJ5ZXMiIHx8IHRlc3QgIiRlbmFibGVfY3RmX3RhcmdldCIgPSAiYXV0byI7 IHRoZW4KKyAgcGtnX2NvbmZpZ19hcmdzPWJhYmVsdHJhY2UKKworCisKKwor CisKKworaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9 ICJ4c2V0IjsgdGhlbgorCWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7 IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rv b2xfcHJlZml4fXBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFt IG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9 cGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4m NQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2 OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfUEtHX0NPTkZJRytzZXR9IiA9 IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Citl bHNlCisgIGNhc2UgJFBLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwv XSopCisgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMg TGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgor ICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQ QVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3Nh dmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAg Zm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lv bnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19l eGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19l eGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9 IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8k YWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQor ZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMK K2ZpCitQS0dfQ09ORklHPSRhY19jdl9wYXRoX1BLR19DT05GSUcKK2lmIHRl c3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR19DT05GSUci ID4mNQorJGFzX2VjaG8gIiRQS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2Zp CitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIjsgdGhlbgor ICBhY19wdF9QS0dfQ09ORklHPSRQS0dfQ09ORklHCisgICMgRXh0cmFjdCB0 aGUgZmlyc3Qgd29yZCBvZiAicGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBh IHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGtnLWNvbmZp ZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0 ZXN0ICIke2FjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRytzZXR9IiA9IHNl dDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNl CisgIGNhc2UgJGFjX3B0X1BLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpb XFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFjX3B0 X1BLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0 IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZT OyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitk bworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYm IGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVj dXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9w YXRoX2FjX3B0X1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1 CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3Nh dmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9QS0dfQ09ORklHPSRh Y19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRhY19w dF9QS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X1BLR19DT05GSUci ID4mNQorJGFzX2VjaG8gIiRhY19wdF9QS0dfQ09ORklHIiA+JjY7IH0KK2Vs c2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQor CisgIGlmIHRlc3QgIngkYWNfcHRfUEtHX0NPTkZJRyIgPSB4OyB0aGVuCisg ICAgUEtHX0NPTkZJRz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29t cGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcg Y3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+ JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRv b2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2Fj X3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFBLR19DT05GSUc9JGFj X3B0X1BLR19DT05GSUcKKyAgZmkKK2Vsc2UKKyAgUEtHX0NPTkZJRz0iJGFj X2N2X3BhdGhfUEtHX0NPTkZJRyIKK2ZpCisKK2ZpCitpZiB0ZXN0IC1uICIk UEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPTAuMTYKKwl7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5f dmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBwa2ctY29uZmln IGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24uLi4gIiA+ JjY7IH0KKwlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZl cnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KKwkJeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1 CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwllbHNlCisJCXsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1 CiskYXNfZWNobyAibm8iID4mNjsgfQorCQlQS0dfQ09ORklHPSIiCisJZmkK K2ZpCisKKyAgaWYgdGVzdCAieCRQS0dfQ09ORklHIiA9IHggOyB0aGVuCisg ICAgbm9fYmFiZWx0cmFjZT15ZXMKKyAgICBQS0dfQ09ORklHPW5vCisgIGZp CisKKyAgaWYgdGVzdCB4IiRub19iYWJlbHRyYWNlIiA9IHggOyB0aGVuCisg ICAgQkFCRUxUUkFDRV9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICRw a2dfY29uZmlnX2FyZ3NgCisgICAgQkFCRUxUUkFDRV9MSUJTPWAkUEtHX0NP TkZJRyAtLWxpYnMgJHBrZ19jb25maWdfYXJnc2AKKyAgICBhY19zYXZlX0NG TEFHUz0iJENGTEFHUyIKKyAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAg IENGTEFHUz0iJENGTEFHUyAkQkFCRUxUUkFDRV9DRkxBR1MiCisgICAgTElC Uz0iJExJQlMgJEJBQkVMVFJBQ0VfTElCUyIKKyAgICAgIHJtIC1mIGNvbmYu Z2xpYnRlc3QKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0g eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGlu ZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyIKK2Vsc2UKKyAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZk ZWZzLmguICAqLworCisjaW5jbHVkZSA8YmFiZWx0cmFjZS9iYWJlbHRyYWNl Lmg+CisjaW5jbHVkZSA8YmFiZWx0cmFjZS9jdGYvZXZlbnRzLmg+CisjaW5j bHVkZSA8YmFiZWx0cmFjZS9jdGYvaXRlcmF0b3IuaD4KKworaW50CittYWlu ICgpCit7CisgIGlmICghYnRfY29udGV4dF9jcmVhdGUoKSkKKyAgICByZXR1 cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190 cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgbm9fYmFiZWx0 cmFjZT15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0 LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNv bmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNf ZXh0CitmaQorCisgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorICAg ICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorICBmaQorICBpZiB0ZXN0ICJ4JG5v X2JhYmVsdHJhY2UiID0geCA7IHRoZW4KKyAgICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Cisk YXNfZWNobyAieWVzIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFW RV9MSUJCQUJFTFRSQUNFIDEiID4+Y29uZmRlZnMuaAorCisgICAgIExJQlM9 IiRMSUJTICRCQUJFTFRSQUNFX0xJQlMiCisgICAgIENQUEZMQUdTPSIkQ1BQ RkxBR1MgJEJBQkVMVFJBQ0VfTElCUyIKKyAgZWxzZQorICAgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIg PiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGlmIHRlc3QgIiRQS0df Q09ORklHIiA9ICJubyIgOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBBIG5ldyBl bm91Z2ggdmVyc2lvbiBvZiBwa2ctY29uZmlnIHdhcyBub3QgZm91bmQuIiA+ JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBBIG5ldyBlbm91 Z2ggdmVyc2lvbiBvZiBwa2ctY29uZmlnIHdhcyBub3QgZm91bmQuIiA+JjI7 fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBXQVJOSU5HOiAqKiogU2VlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Au b3JnL3NvZnR3YXJlL3BrZ2NvbmZpZy8iID4mNQorJGFzX2VjaG8gIiRhc19t ZTogV0FSTklORzogKioqIFNlZSBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9y Zy9zb2Z0d2FyZS9wa2djb25maWcvIiA+JjI7fQorICAgIGVsc2UKKyAgICAg IGlmIHRlc3QgLWYgY29uZi5nbGlidGVzdCA7IHRoZW4KKyAgICAgICAgOgor ICAgICAgZWxzZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBDb3VsZCBub3QgcnVuIGxp YmJhYmVsdHJhY2UgdGVzdCBwcm9ncmFtLiIgPiY1CiskYXNfZWNobyAiJGFz X21lOiBXQVJOSU5HOiAqKiogQ291bGQgbm90IHJ1biBsaWJiYWJlbHRyYWNl IHRlc3QgcHJvZ3JhbS4iID4mMjt9CisgICAgICBmaQorICAgIGZpCisgICAg aWYgdGVzdCAiJGVuYWJsZV9jdGZfdGFyZ2V0IiA9ICJ5ZXMiOyB0aGVuCisg ICAgICBhc19mbl9lcnJvciAibGliYmFiZWx0cmFjZSBhcmUgcmVxdWlyZWQg aW4gb3JkZXIgdG8gZW5hYmxlIENURiB0YXJnZXQiICIkTElORU5PIiA1Cisg ICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBXQVJOSU5HOiBsaWJiYWJlbHRyYWNlIGlzIG1pc3Npbmcg b3IgdW51c2FibGU7IENURiB0YXJnZXQgaXMgdW5hdmFpbGFibGUuIiA+JjUK KyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGxpYmJhYmVsdHJhY2UgaXMg bWlzc2luZyBvciB1bnVzYWJsZTsgQ1RGIHRhcmdldCBpcyB1bmF2YWlsYWJs ZS4iID4mMjt9CisgICAgICBlbmFibGVfY3RmX3RhcmdldCA9IG5vCisgICAg ZmkKKyAgZmkKKyAgcm0gLWYgY29uZi5nbGlidGVzdAorZmkKK2lmIHRlc3Qg IiRlbmFibGVfY3RmX3RhcmdldCIgPSAibm8iOyB0aGVuCisgIDoKK2ZpCisK ICMgSWYgbmF0aXZlZmlsZSAoTkFUX0ZJTEUpIGlzIG5vdCBzZXQgaW4gY29u ZmlnLyovKi5tW2h0XSBmaWxlcywgd2UgbGluawogIyB0byBhbiBlbXB0eSB2 ZXJzaW9uLgogCi0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUu YWMKQEAgLTIzMTgsNiArMjMxOCw3NyBAQCBpZiB0ZXN0ICIkZW5hYmxlX2dk YnNlcnZlciIgPSAieWVzIiAtYSAiCiAgIEFDX01TR19FUlJPUihBdXRvbWF0 aWMgZ2Ric2VydmVyIGJ1aWxkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMg Y29uZmlndXJhdGlvbikKIGZpCiAKK0FDX0FSR19FTkFCTEUoY3RmLXRhcmdl dCwKK0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jdGYtdGFyZ2V0XSwKKyAg ICAgICAgICAgICAgIFtlbmFibGUgY3RmIHRhcmdldCAoeWVzL25vL2F1dG8s IGRlZmF1bHQgaXMgYXV0byldKSwKK1tjYXNlICIke2VuYWJsZXZhbH0iIGlu CisgIHllc3wgbm98YXV0bykgOzsKKyAgKikgQUNfTVNHX0VSUk9SKGJhZCB2 YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWN0Zi10YXJnZXQgb3B0 aW9uKSA7OworZXNhY10sW2VuYWJsZV9jdGZfdGFyZ2V0PWF1dG9dKQorCitp ZiB0ZXN0ICIkZW5hYmxlX2N0Zl90YXJnZXQiID0gInllcyIgfHwgdGVzdCAi JGVuYWJsZV9jdGZfdGFyZ2V0IiA9ICJhdXRvIjsgdGhlbgorICBwa2dfY29u ZmlnX2FyZ3M9YmFiZWx0cmFjZQorICBQS0dfUFJPR19QS0dfQ09ORklHKDAu MTYpCisKKyAgaWYgdGVzdCAieCRQS0dfQ09ORklHIiA9IHggOyB0aGVuCisg ICAgbm9fYmFiZWx0cmFjZT15ZXMKKyAgICBQS0dfQ09ORklHPW5vCisgIGZp CisKKyAgaWYgdGVzdCB4IiRub19iYWJlbHRyYWNlIiA9IHggOyB0aGVuCisg ICAgQkFCRUxUUkFDRV9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICRw a2dfY29uZmlnX2FyZ3NgCisgICAgQkFCRUxUUkFDRV9MSUJTPWAkUEtHX0NP TkZJRyAtLWxpYnMgJHBrZ19jb25maWdfYXJnc2AKKyAgICBhY19zYXZlX0NG TEFHUz0iJENGTEFHUyIKKyAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAg IENGTEFHUz0iJENGTEFHUyAkQkFCRUxUUkFDRV9DRkxBR1MiCisgICAgTElC Uz0iJExJQlMgJEJBQkVMVFJBQ0VfTElCUyIKKyAgICAgIHJtIC1mIGNvbmYu Z2xpYnRlc3QKKyAgICAgIEFDX1RSWV9SVU4oWworI2luY2x1ZGUgPGJhYmVs dHJhY2UvYmFiZWx0cmFjZS5oPgorI2luY2x1ZGUgPGJhYmVsdHJhY2UvY3Rm L2V2ZW50cy5oPgorI2luY2x1ZGUgPGJhYmVsdHJhY2UvY3RmL2l0ZXJhdG9y Lmg+CisKK2ludAorbWFpbiAoKQoreworICBpZiAoIWJ0X2NvbnRleHRfY3Jl YXRlKCkpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorXSwsIG5v X2JhYmVsdHJhY2U9eWVzLFskYXNfZWNobyAkYWNfbiAiY3Jvc3MgY29tcGls aW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCisgICAgIENGTEFHUz0iJGFj X3NhdmVfQ0ZMQUdTIgorICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorICBm aQorICBpZiB0ZXN0ICJ4JG5vX2JhYmVsdHJhY2UiID0geCA7IHRoZW4KKyAg ICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIEFDX0RFRklORShIQVZFX0xJ QkJBQkVMVFJBQ0UsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxp YnJhcnkuXSkKKyAgICAgTElCUz0iJExJQlMgJEJBQkVMVFJBQ0VfTElCUyIK KyAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkQkFCRUxUUkFDRV9MSUJTIgor ICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICBpZiB0ZXN0ICIk UEtHX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4o WyoqKiBBIG5ldyBlbm91Z2ggdmVyc2lvbiBvZiBwa2ctY29uZmlnIHdhcyBu b3QgZm91bmQuXSkKKyAgICAgIEFDX01TR19XQVJOKFsqKiogU2VlIGh0dHA6 Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3BrZ2NvbmZpZy9dKQor ICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgLWYgY29uZi5nbGlidGVzdCA7IHRo ZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfV0FS TihbKioqIENvdWxkIG5vdCBydW4gbGliYmFiZWx0cmFjZSB0ZXN0IHByb2dy YW0uXSkKKyAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkZW5hYmxl X2N0Zl90YXJnZXQiID0gInllcyI7IHRoZW4KKyAgICAgIEFDX01TR19FUlJP UihbbGliYmFiZWx0cmFjZSBhcmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZW5h YmxlIENURiB0YXJnZXRdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19XQVJO KFtsaWJiYWJlbHRyYWNlIGlzIG1pc3Npbmcgb3IgdW51c2FibGU7IENURiB0 YXJnZXQgaXMgdW5hdmFpbGFibGUuXSkKKyAgICAgIGVuYWJsZV9jdGZfdGFy Z2V0ID0gbm8KKyAgICBmaQorICBmaQorICBybSAtZiBjb25mLmdsaWJ0ZXN0 CitmaQoraWYgdGVzdCAiJGVuYWJsZV9jdGZfdGFyZ2V0IiA9ICJubyI7IHRo ZW4KKyAgOgorZmkKKwogIyBJZiBuYXRpdmVmaWxlIChOQVRfRklMRSkgaXMg bm90IHNldCBpbiBjb25maWcvKi8qLm1baHRdIGZpbGVzLCB3ZSBsaW5rCiAj IHRvIGFuIGVtcHR5IHZlcnNpb24uCiAKLS0tIGEvY3RmLmMKKysrIGIvY3Rm LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJnZGJjbWQuaCIKICNp bmNsdWRlICJleGNlcHRpb25zLmgiCiAjaW5jbHVkZSAic3RhY2suaCIKKyNp bmNsdWRlICJ2YWxwcmludC5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIApA QCAtMTMzOCwzICsxMzM5LDQ3OSBAQCB0cmFjZWZyYW1lICVkIGlzIGRyb3Bw ZWQgYmVjYXVzZSB0eXBlIG9mCiAKICAgZG9fY2xlYW51cHMgKG9sZF9jaGFp bik7CiB9CisKKyNpZmRlZiBIQVZFX0xJQkJBQkVMVFJBQ0UKKyNpbmNsdWRl IDxiYWJlbHRyYWNlL2JhYmVsdHJhY2UuaD4KKyNpbmNsdWRlIDxiYWJlbHRy YWNlL2N0Zi9ldmVudHMuaD4KKyNpbmNsdWRlIDxiYWJlbHRyYWNlL2N0Zi9p dGVyYXRvci5oPgorCisvKiBUaGUgc3RydWN0IHBvaW50ZXIgZm9yIGN1cnJl bnQgQ1RGIGRpcmVjdG9yeS4gICovCitzdGF0aWMgc3RydWN0IGJ0X2NvbnRl eHQgKmN0eCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGJ0X2N0Zl9pdGVyICpp dGVyID0gTlVMTDsKKy8qIFRoZSBldmVudCBzdHJ1Y3Qgb2YgY3VycmVudCB0 cmFjZWZyYW1lLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgYnRfY3RmX2V2ZW50ICpj dGZfZXZlbnQ7CisvKiBUaGUgbnVtYmVyIG9mIGN1cnJlbnQgdHJhY2VmcmFt ZS4gICovCitzdGF0aWMgaW50IGN1cnJlbnRfdHA7CisKK3N0YXRpYyBzdHJ1 Y3QgdGFyZ2V0X29wcyBjdGZfb3BzOworCitzdGF0aWMgdm9pZAorY3RmX2Ns b3NlX2RpciAodm9pZCkKK3sKKyAgaWYgKGl0ZXIpCisgICAgeworICAgICAg YnRfY3RmX2l0ZXJfZGVzdHJveSAoaXRlcik7CisgICAgICBpdGVyID0gTlVM TDsKKyAgICB9CisgIGlmIChjdHgpCisgICAgeworICAgICAgYnRfY29udGV4 dF9wdXQgKGN0eCk7CisgICAgICBjdHggPSBOVUxMOworICAgIH0KK30KKwor LyogVXNlIGxpYmJhYmVsdHJhY2Ugb3BlbiBESVJOQU1FLiAgU2V0dXAgQ1RY LCBJVEVSLCBDVEZfRVZFTlQKKyAgIGFuZCBDVVJSRU5UX1RQLiAgKi8KKwor c3RhdGljIHZvaWQKK2N0Zl9vcGVuX2RpciAoY2hhciAqZGlybmFtZSkKK3sK KyAgaW50IHJldDsKKyAgc3RydWN0IGJ0X2l0ZXJfcG9zIGJlZ2luX3BvczsK KworICBjdHggPSBidF9jb250ZXh0X2NyZWF0ZSAoKTsKKyAgaWYgKCFjdHgp CisgICAgZXJyb3IgKF8oIlVuYWJsZSB0byBpbml0aWFsaXplIGxpYmJhYmVs dHJhY2UiKSk7CisgIHJldCA9IGJ0X2NvbnRleHRfYWRkX3RyYWNlIChjdHgs IGRpcm5hbWUsICJjdGYiLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgaWYgKHJl dCA8IDApCisgICAgeworICAgICAgY3RmX2Nsb3NlX2RpciAoKTsKKyAgICAg IGVycm9yIChfKCJVbmFibGUgdG8gdXNlIGxpYmJhYmVsdHJhY2Ugb3BlbiBc IiVzXCIiKSwgZGlybmFtZSk7CisgICAgfQorCisgIGJlZ2luX3Bvcy50eXBl ID0gQlRfU0VFS19CRUdJTjsKKyAgaXRlciA9IGJ0X2N0Zl9pdGVyX2NyZWF0 ZSAoY3R4LCAmYmVnaW5fcG9zLCBOVUxMKTsKKyAgaWYgKCFpdGVyKQorICAg IHsKKyAgICAgIGN0Zl9jbG9zZV9kaXIgKCk7CisgICAgICBlcnJvciAoXygi VW5hYmxlIHRvIHVzZSBsaWJiYWJlbHRyYWNlIG9wZW4gXCIlc1wiIiksIGRp cm5hbWUpOworICAgIH0KKworICBjdXJyZW50X3RwID0gMDsKKyAgY3RmX2V2 ZW50ID0gYnRfY3RmX2l0ZXJfcmVhZF9ldmVudCAoaXRlcik7CisgIGlmICgh Y3RmX2V2ZW50KQorICAgIHsKKyAgICAgIGN0Zl9jbG9zZV9kaXIgKCk7Cisg ICAgICBlcnJvciAoXygiVW5hYmxlIHRvIHVzZSBsaWJiYWJlbHRyYWNlIG9w ZW4gXCIlc1wiIiksIGRpcm5hbWUpOworICAgIH0KK30KKworLyogRmluZCB0 aGUgZmllbGQgdGhhdCBuYW1lIGlzIE5BTUUgZnJvbSBEIGFuZCByZXR1cm4g aXQuCisgICBSZXR1cm4gTlVMTCBpZiBmYWlsLiAgKi8KKworc3RhdGljIGNv bnN0IHN0cnVjdCBkZWZpbml0aW9uICoKK2N0Zl9maW5kX2ZpZWxkIChjb25z dCBzdHJ1Y3QgZGVmaW5pdGlvbiAqZCwgY29uc3QgY2hhciAqbmFtZSkKK3sK KyAgc3RydWN0IGRlZmluaXRpb24gY29uc3QgKiBjb25zdCAqbGlzdF9kOwor ICB1bnNpZ25lZCBpbnQgbGlzdF9kX2NvdW50LCBpOworCisgIGlmIChidF9j dGZfZ2V0X2ZpZWxkX2xpc3QgKGN0Zl9ldmVudCwgZCwgJmxpc3RfZCwgJmxp c3RfZF9jb3VudCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGZvciAoaSA9IDA7 IGkgPCBsaXN0X2RfY291bnQ7IGkrKykKKyAgICB7CisgICAgICBpZiAoc3Ry Y21wIChidF9jdGZfZmllbGRfbmFtZSAobGlzdF9kW2ldKSwgbmFtZSkgPT0g MCkKKwlyZXR1cm4gbGlzdF9kW2ldOworICAgIH0KKworICByZXR1cm4gTlVM TDsKK30KKworLyogR2V0IHRoZSBpZCBvZiBjdXJyZW50IHRyYWNlZnJhbWUg YW5kIHNldCBpdCB0byBUUFAuCisgICBSZXR1cm4gLTEgaWYgZmFpbC4gICov CisKK3N0YXRpYyBpbnQKK2N0Zl9ldmVudF9pZCAoaW50ICp0cHApCit7Cisg IGNvbnN0IHN0cnVjdCBkZWZpbml0aW9uICp0b3BfZDsKKyAgc3RydWN0IGRl ZmluaXRpb24gY29uc3QgKiBjb25zdCAqbGlzdF9kOworICB1bnNpZ25lZCBp bnQgbGlzdF9kX2NvdW50LCBpOworICBjb25zdCBzdHJ1Y3QgZGVmaW5pdGlv biAqZF9pZCA9IE5VTEw7CisgIGNvbnN0IHN0cnVjdCBkZWZpbml0aW9uICpk X3YgPSBOVUxMOworCisgIHRvcF9kID0gYnRfY3RmX2dldF90b3BfbGV2ZWxf c2NvcGUgKGN0Zl9ldmVudCwgQlRfU1RSRUFNX0VWRU5UX0hFQURFUik7Cisg IGlmICghdG9wX2QpCisgICAgcmV0dXJuIC0xOworICBpZiAoYnRfY3RmX2dl dF9maWVsZF9saXN0IChjdGZfZXZlbnQsIHRvcF9kLCAmbGlzdF9kLCAmbGlz dF9kX2NvdW50KSkKKyAgICByZXR1cm4gLTE7CisKKyAgZm9yIChpID0gMDsg aSA8IGxpc3RfZF9jb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJj bXAgKGJ0X2N0Zl9maWVsZF9uYW1lIChsaXN0X2RbaV0pLCAiaWQiKSA9PSAw KQorCWRfaWQgPSBsaXN0X2RbaV07CisgICAgICBlbHNlIGlmIChzdHJjbXAg KGJ0X2N0Zl9maWVsZF9uYW1lIChsaXN0X2RbaV0pLCAidiIpID09IDApCisJ ZF92ID0gbGlzdF9kW2ldOworICAgICAgaWYgKGRfaWQgJiYgZF92KQorCWJy ZWFrOworICAgIH0KKyAgaWYgKCFkX2lkKQorICAgIHJldHVybiAtMTsKKwor Z2V0dmFsOgorICBzd2l0Y2ggKGJ0X2N0Zl9maWVsZF90eXBlIChidF9jdGZf Z2V0X2RlY2xfZnJvbV9kZWYgKGRfaWQpKSkKKyAgICB7CisgICAgY2FzZSBD VEZfVFlQRV9JTlRFR0VSOgorICAgICAgeworCWludDY0X3QgdmFsOworCisJ aWYgKGJ0X2N0Zl9nZXRfaW50X3NpZ25lZG5lc3MgKGJ0X2N0Zl9nZXRfZGVj bF9mcm9tX2RlZiAoZF9pZCkpKQorCSAgdmFsID0gYnRfY3RmX2dldF9pbnQ2 NCAoZF9pZCk7CisJZWxzZQorCSAgdmFsID0gYnRfY3RmX2dldF91aW50NjQg KGRfaWQpOworCWlmICh2YWwgPCBJTlRfTUlOIHx8IHZhbCA+IElOVF9NQVgp CisJICB7CisJICAgIHdhcm5pbmcgKF8oInRyYWNlcG9pbnQgaWQgaXMgdG9v IGJpZyBvciB0b28gc21hbGwuIikpOworCSAgICByZXR1cm4gLTE7CisJICB9 CisJKnRwcCA9IChpbnQpIHZhbDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOwor CisgICAgY2FzZSBDVEZfVFlQRV9FTlVNOgorICAgICAgaWYgKHN0cmNtcCAo YnRfY3RmX2dldF9lbnVtX3N0ciAoZF9pZCksICJjb21wYWN0IikgPT0gMCkK KwlkX2lkID0gYnRfY3RmX2dldF9lbnVtX2ludCAoZF9pZCk7CisgICAgICBl bHNlCisJeworCSAgaWYgKCFkX3YpCisJICAgIHJldHVybiAtMTsKKwkgIGlm IChidF9jdGZfZmllbGRfdHlwZSAoYnRfY3RmX2dldF9kZWNsX2Zyb21fZGVm IChkX3YpKQorCSAgICAgICE9IENURl9UWVBFX1ZBUklBTlQpCisJICAgIHJl dHVybiAtMTsKKworCSAgZF92ID0gY3RmX2ZpbmRfZmllbGQgKGRfdiwgImV4 dGVuZGVkIik7CisJICBpZiAoIWRfdikKKwkgICAgcmV0dXJuIC0xOworCSAg aWYgKGJ0X2N0Zl9maWVsZF90eXBlIChidF9jdGZfZ2V0X2RlY2xfZnJvbV9k ZWYgKGRfdikpCisJICAgICAgIT0gQ1RGX1RZUEVfU1RSVUNUKQorCSAgICBy ZXR1cm4gLTE7CisJICBkX2lkID0gY3RmX2ZpbmRfZmllbGQgKGRfdiwgImlk Iik7CisJICBpZiAoIWRfaWQpCisJICAgIHJldHVybiAtMTsKKwl9CisJZ290 byBnZXR2YWw7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAg ICB3YXJuaW5nIChfKCJ0eXBlIG9mIHRyYWNlcG9pbnQgaWQgaXMgbm90IHN1 cHBvcnRlZC4iKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgICBicmVhazsK KyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIENvbnZlcnQgREVGIHRv IGEgdmFsdWUgc3RydWN0IGFuZCByZXR1cm4gaXQuICAqLworCitzdGF0aWMg c3RydWN0IHZhbHVlICoKK2N0Zl9kZWZfdG9fdmFsIChjb25zdCBzdHJ1Y3Qg ZGVmaW5pdGlvbiAqZGVmKQoreworICBzdHJ1Y3QgdmFsdWUgKnJldCA9IE5V TEw7CisKKyAgaWYgKCFkZWYpCisgICAgcmV0dXJuIHJldDsKKworICBzd2l0 Y2ggKGJ0X2N0Zl9maWVsZF90eXBlIChidF9jdGZfZ2V0X2RlY2xfZnJvbV9k ZWYgKGRlZikpKQorICAgIHsKKyAgICBjYXNlIENURl9UWVBFX0lOVEVHRVI6 CisgICAgICBpZiAoYnRfY3RmX2dldF9pbnRfc2lnbmVkbmVzcyAoYnRfY3Rm X2dldF9kZWNsX2Zyb21fZGVmIChkZWYpKSkKKwl7CisJICBpbnQ2NF90IHZh bDsKKwkgIHZhbCA9IGJ0X2N0Zl9nZXRfaW50NjQgKGRlZik7CisJICByZXQg PSB2YWx1ZV9mcm9tX2xvbmdlc3QKKwkJICAgIChidWlsdGluX3R5cGUgKHRh cmdldF9nZGJhcmNoICgpKS0+YnVpbHRpbl9pbnQ2NCwgdmFsKTsKKwl9Cisg ICAgICBlbHNlCisJeworCSAgdWludDY0X3QgdmFsOworCSAgdmFsID0gYnRf Y3RmX2dldF91aW50NjQgKGRlZik7CisJICByZXQgPSB2YWx1ZV9mcm9tX2xv bmdlc3QKKwkJICAgIChidWlsdGluX3R5cGUgKHRhcmdldF9nZGJhcmNoICgp KS0+YnVpbHRpbl91aW50NjQsIHZhbCk7CisJfQorICAgICAgYnJlYWs7CisK KyAgICBjYXNlIENURl9UWVBFX0VOVU06CisgICAgICByZXQgPSBjdGZfZGVm X3RvX3ZhbCAoYnRfY3RmX2dldF9lbnVtX2ludCAoZGVmKSk7CisgICAgICBi cmVhazsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogQWRkIGVh Y2ggdmFyaWFibGUgb2YgY3VycmVudCB0cmFjZWZyYW1lIHRvIEdEQiBhcyBp bnRlcm5hbHZhci4gICovCisKK3N0YXRpYyBpbnQKK2N0Zl9ldmVudF90b19p bnRlcm5hbHZhciAodm9pZCkKK3sKKyAgY29uc3Qgc3RydWN0IGRlZmluaXRp b24gKnRvcF9kOworICBzdHJ1Y3QgZGVmaW5pdGlvbiBjb25zdCAqIGNvbnN0 ICpsaXN0X2Q7CisgIHVuc2lnbmVkIGludCBsaXN0X2RfY291bnQsIGk7CisK KyAgdG9wX2QgPSBidF9jdGZfZ2V0X3RvcF9sZXZlbF9zY29wZSAoY3RmX2V2 ZW50LCBCVF9FVkVOVF9GSUVMRFMpOworICBpZiAoIXRvcF9kKQorICAgIHJl dHVybiAtMTsKKyAgaWYgKGJ0X2N0Zl9nZXRfZmllbGRfbGlzdCAoY3RmX2V2 ZW50LCB0b3BfZCwgJmxpc3RfZCwgJmxpc3RfZF9jb3VudCkpCisgICAgcmV0 dXJuIC0xOworCisgIGZvciAoaSA9IDA7IGkgPCBsaXN0X2RfY291bnQ7IGkr KykKKyAgICB7CisgICAgICBzdHJ1Y3QgdmFsdWUgKnZhbDsKKyAgICAgIGNv bnN0IGNoYXIgKm5hbWU7CisKKyAgICAgIHZhbCA9IGN0Zl9kZWZfdG9fdmFs IChsaXN0X2RbaV0pOworICAgICAgbmFtZSA9IGJ0X2N0Zl9maWVsZF9uYW1l IChsaXN0X2RbaV0pOworICAgICAgaWYgKHZhbCkKKyAgICAgICAgc2V0X2lu dGVybmFsdmFyIChsb29rdXBfaW50ZXJuYWx2YXIgKG5hbWUpLCB2YWwpOwor ICAgICAgZWxzZQorCXdhcm5pbmcgKF8oIiQlcyBpcyBub3Qgc3VwcG9ydGVk LiIpLCBuYW1lKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFNl dCBjdXJyZW50IHRyYWNlZnJhbWUgdG8gZmlyc3Qgb25lLgorICAgUmV0dXJu IC0xIGlmIGZhaWwuICAqLworCitzdGF0aWMgaW50CitjdGZfZ290b19iZWdp biAodm9pZCkKK3sKKyAgc3RydWN0IGJ0X2l0ZXJfcG9zIHBvczsKKworICBw b3MudHlwZSA9IEJUX1NFRUtfQkVHSU47CisgIGlmIChidF9pdGVyX3NldF9w b3MgKGJ0X2N0Zl9nZXRfaXRlciAoaXRlciksICZwb3MpKQorICAgIHJldHVy biAtMTsKKyAgY3VycmVudF90cCA9IDA7CisgIGN0Zl9ldmVudCA9IGJ0X2N0 Zl9pdGVyX3JlYWRfZXZlbnQgKGl0ZXIpOworICBpZiAoIWN0Zl9ldmVudCkK KyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEZpbmQg dGhlIE5VTSB0cmFjZWZyYW1lIGFuZCBzZWxlY3QgaXQuCisgICBJZiBzdWNj ZXNzLCByZXR1cm4gdGhlIG51bSBvZiB0cmFjZWZyYW1lIGFuZCBzZXQgdHJh Y2Vwb2ludCBpZCB0bworICAgVFBQLgorICAgSWYgZmFpbCwgcmV0dXJuIC0x LiAgKi8KKworc3RhdGljIGludAorY3RmX2ZpbmRfbnVtIChpbnQgbnVtLCBp bnQgKnRwcCkKK3sKKyAgaWYgKG51bSA8IGN1cnJlbnRfdHApCisgICAgewor ICAgICAgaWYgKGN0Zl9nb3RvX2JlZ2luICgpKQorCXJldHVybiAtMTsKKyAg ICB9CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKGN1cnJlbnRf dHAgPT0gbnVtKQorICAgICAgICBicmVhazsKKyAgICAgIGlmIChidF9pdGVy X25leHQgKGJ0X2N0Zl9nZXRfaXRlciAoaXRlcikpIDwgMCkKKwlyZXR1cm4g LTE7CisgICAgICBjdGZfZXZlbnQgPSBidF9jdGZfaXRlcl9yZWFkX2V2ZW50 IChpdGVyKTsKKyAgICAgIGlmICghY3RmX2V2ZW50KQorICAgICAgICB7CisJ ICBjdGZfZ290b19iZWdpbiAoKTsKKwkgIHJldHVybiAtMTsKKwl9CisgICAg ICArK2N1cnJlbnRfdHA7CisgICAgfQorCisgIGlmICh0cHApCisgICAgewor ICAgICAgaWYgKGN0Zl9ldmVudF9pZCAodHBwKSkKKyAgICAgICAgeworCSAg d2FybmluZyAoXygiVW5hYmxlIHRvIGdldCB0cmFjZXBvaW50IGlkLiIpKTsK KyAgICAgICAgICAqdHBwID0gSU5UX01JTjsKKwl9CisgICAgfQorCisgIHJl dHVybiBjdXJyZW50X3RwOworfQorCisvKiBGaW5kIHRyYWNlZnJhbWUgdGhh dCBpZCBpcyBUUCB0aGF0IGZvbGxvdyBjdXJyZW50IHRyYWNlZnJhbWUuCisg ICBJZiBzdWNjZXNzLCByZXR1cm4gdGhlIG51bSBvZiB0cmFjZWZyYW1lLgor ICAgSWYgZmFpbCwgcmV0dXJuIC0xLiAgKi8KKworc3RhdGljIGludAorY3Rm X2ZpbmRfdHAgKGludCB0cCkKK3sKKyAgd2hpbGUgKDEpCisgICAgeworICAg ICAgaW50IGlkOworCisgICAgICBpZiAoYnRfaXRlcl9uZXh0IChidF9jdGZf Z2V0X2l0ZXIgKGl0ZXIpKSA8IDApCisJcmV0dXJuIC0xOworICAgICAgY3Rm X2V2ZW50ID0gYnRfY3RmX2l0ZXJfcmVhZF9ldmVudCAoaXRlcik7CisgICAg ICBpZiAoIWN0Zl9ldmVudCkKKyAgICAgICAgeworCSAgY3RmX2dvdG9fYmVn aW4gKCk7CisJICByZXR1cm4gLTE7CisJfQorICAgICAgKytjdXJyZW50X3Rw OworICAgICAgaWYgKGN0Zl9ldmVudF9pZCAoJmlkKSkKKyAgICAgICAgd2Fy bmluZyAoXygiVW5hYmxlIHRvIGdldCB0cmFjZXBvaW50IGlkLiIpKTsKKyAg ICAgIGVsc2UgaWYgKGlkID09IHRwKQorCWJyZWFrOworICAgIH0KKworICBy ZXR1cm4gY3VycmVudF90cDsKK30KKworc3RhdGljIHZvaWQKK2N0Zl9vcGVu IChjaGFyICpkaXJuYW1lLCBpbnQgZnJvbV90dHkpCit7CisgIHRhcmdldF9w cmVvcGVuIChmcm9tX3R0eSk7CisgIGlmICghZGlybmFtZSkKKyAgICBlcnJv ciAoXygiTm8gQ1RGIGRpcmVjdG9yeSBzcGVjaWZpZWQuIikpOworCisgIGN0 Zl9vcGVuX2RpciAoZGlybmFtZSk7CisKKyAgcHVzaF90YXJnZXQgKCZjdGZf b3BzKTsKK30KKworc3RhdGljIHZvaWQKK2N0Zl9jbG9zZSAoaW50IHF1aXR0 aW5nKQoreworICBjdGZfY2xvc2VfZGlyICgpOworfQorCitzdGF0aWMgaW50 CitjdGZfdHJhY2VfZmluZCAoZW51bSB0cmFjZV9maW5kX3R5cGUgdHlwZSwg aW50IG51bSwKKwkJVUxPTkdFU1QgYWRkcjEsIFVMT05HRVNUIGFkZHIyLCBp bnQgKnRwcCkKK3sKKyAgaW50IHJldCA9IC0xOworCisgIHN3aXRjaCAodHlw ZSkKKyAgICB7CisgICAgY2FzZSB0ZmluZF9udW1iZXI6CisgICAgICBpZiAo bnVtIDwgMCkKKyAgICAgICAgeworCSAgaWYgKHRwcCkKKwkgICAgKnRwcCA9 IC0xOworCX0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0ID0gY3RmX2ZpbmRf bnVtIChudW0sIHRwcCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgdGZp bmRfdHA6CisgICAgICByZXQgPSBjdGZfZmluZF90cCAobnVtKTsKKyAgICAg IGJyZWFrOworICAgIH0KKworICBpZiAocmV0ID49IDApCisgICAgeworICAg ICAgaWYgKGN0Zl9ldmVudF90b19pbnRlcm5hbHZhciAoKSkKKwl3YXJuaW5n IChfKCJVbmFibGUgdG8gYWRkIGludGVybmFsIHZhciBvZiB0aGlzIGZyYW1l LiIpKTsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNv bnN0IGNoYXIgKgorY3RmX2dldF9jdXJyZW50X3RyYWNlcG9pbnRfbmFtZSAo dm9pZCkKK3sKKyAgaWYgKGN0Zl9ldmVudCkKKyAgICByZXR1cm4gYnRfY3Rm X2V2ZW50X25hbWUgKGN0Zl9ldmVudCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9 CisKK3N0YXRpYyBpbnQKK2N0Zl90cmFjZV9kdW1wIChpbnQgZnJvbV90dHkp Cit7CisgIGNvbnN0IHN0cnVjdCBkZWZpbml0aW9uICp0b3BfZDsKKyAgc3Ry dWN0IGRlZmluaXRpb24gY29uc3QgKiBjb25zdCAqbGlzdF9kOworICB1bnNp Z25lZCBpbnQgbGlzdF9kX2NvdW50LCBpOworCisgIGlmICghY3RmX2V2ZW50 KQorICAgIHJldHVybiAxOworCisgIHRvcF9kID0gYnRfY3RmX2dldF90b3Bf bGV2ZWxfc2NvcGUgKGN0Zl9ldmVudCwgQlRfRVZFTlRfRklFTERTKTsKKyAg aWYgKCF0b3BfZCkKKyAgICByZXR1cm4gMTsKKyAgaWYgKGJ0X2N0Zl9nZXRf ZmllbGRfbGlzdCAoY3RmX2V2ZW50LCB0b3BfZCwgJmxpc3RfZCwgJmxpc3Rf ZF9jb3VudCkpCisgICAgcmV0dXJuIDE7CisKKyAgZm9yIChpID0gMDsgaSA8 IGxpc3RfZF9jb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGNoYXIgbmFtZVsy NTZdOworICAgICAgc25wcmludGYgKG5hbWUsIDI1NiwgIiQlcyIsIGJ0X2N0 Zl9maWVsZF9uYW1lIChsaXN0X2RbaV0pKTsKKyAgICAgIHByaW50Zl9maWx0 ZXJlZCAoIiVzID0gIiwgbmFtZSk7CisgICAgICBvdXRwdXRfY29tbWFuZCAo bmFtZSwgZnJvbV90dHkpOworICAgICAgcHJpbnRmX2ZpbHRlcmVkICgiXG4i KTsKKyAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2N0 Zl9oYXNfYWxsX21lbW9yeSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcykKK3sK KyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2N0Zl9oYXNfbWVtb3J5 IChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzKQoreworICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludAorY3RmX2hhc19zdGFjayAoc3RydWN0IHRhcmdldF9v cHMgKm9wcykKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2N0 Zl9oYXNfcmVnaXN0ZXJzIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzKQorewor ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY3RmX3RocmVhZF9hbGl2 ZSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgcHRpZF90IHB0aWQpCit7Cisg IHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAoraW5pdF9jdGZfb3BzICh2 b2lkKQoreworICBjdGZfb3BzLnRvX3Nob3J0bmFtZSA9ICJjdGYiOworICBj dGZfb3BzLnRvX2xvbmduYW1lID0gIkNURiBmaWxlIjsKKyAgY3RmX29wcy50 b19kb2MgPSAiVXNlIGEgQ1RGIGRpcmVjdG9yeSBhcyBhIHRhcmdldC5cblwK K1NwZWNpZnkgdGhlIGZpbGVuYW1lIG9mIHRoZSBDVEYgZGlyZWN0b3J5LiI7 CisgIGN0Zl9vcHMudG9fb3BlbiA9IGN0Zl9vcGVuOworICBjdGZfb3BzLnRv X2Nsb3NlID0gY3RmX2Nsb3NlOworICBjdGZfb3BzLnRvX3RyYWNlX2ZpbmQg PSBjdGZfdHJhY2VfZmluZDsKKyAgY3RmX29wcy50b19nZXRfY3VycmVudF90 cmFjZXBvaW50X25hbWUgPSBjdGZfZ2V0X2N1cnJlbnRfdHJhY2Vwb2ludF9u YW1lOworICBjdGZfb3BzLnRvX3RyYWNlX2R1bXAgPSBjdGZfdHJhY2VfZHVt cDsKKyAgY3RmX29wcy50b19zdHJhdHVtID0gcHJvY2Vzc19zdHJhdHVtOwor ICBjdGZfb3BzLnRvX2hhc19hbGxfbWVtb3J5ID0gY3RmX2hhc19hbGxfbWVt b3J5OworICBjdGZfb3BzLnRvX2hhc19tZW1vcnkgPSBjdGZfaGFzX21lbW9y eTsKKyAgY3RmX29wcy50b19oYXNfc3RhY2sgPSBjdGZfaGFzX3N0YWNrOwor ICBjdGZfb3BzLnRvX2hhc19yZWdpc3RlcnMgPSBjdGZfaGFzX3JlZ2lzdGVy czsKKyAgY3RmX29wcy50b190aHJlYWRfYWxpdmUgPSBjdGZfdGhyZWFkX2Fs aXZlOworICBjdGZfb3BzLnRvX21hZ2ljID0gT1BTX01BR0lDOworfQorCitl eHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9jdGYgKHZvaWQpOworCisvKiBtb2R1 bGUgaW5pdGlhbGl6YXRpb24gKi8KK3ZvaWQKK19pbml0aWFsaXplX2N0ZiAo dm9pZCkKK3sKKyAgaW5pdF9jdGZfb3BzICgpOworCisgIGFkZF90YXJnZXQg KCZjdGZfb3BzKTsKK30KKyNlbmRpZgotLS0gYS90YXJnZXQuYworKysgYi90 YXJnZXQuYwpAQCAtNjk0LDYgKzY5NCw4IEBAIHVwZGF0ZV9jdXJyZW50X3Rh cmdldCAodm9pZCkKICAgICAgIElOSEVSSVQgKHRvX3NldF9kaXNjb25uZWN0 ZWRfdHJhY2luZywgdCk7CiAgICAgICBJTkhFUklUICh0b19zZXRfY2lyY3Vs YXJfdHJhY2VfYnVmZmVyLCB0KTsKICAgICAgIElOSEVSSVQgKHRvX3NldF90 cmFjZV9ub3RlcywgdCk7CisgICAgICBJTkhFUklUICh0b19nZXRfY3VycmVu dF90cmFjZXBvaW50X25hbWUsIHQpOworICAgICAgSU5IRVJJVCAodG9fdHJh Y2VfZHVtcCwgdCk7CiAgICAgICBJTkhFUklUICh0b19nZXRfdGliX2FkZHJl c3MsIHQpOwogICAgICAgSU5IRVJJVCAodG9fc2V0X3Blcm1pc3Npb25zLCB0 KTsKICAgICAgIElOSEVSSVQgKHRvX3N0YXRpY190cmFjZXBvaW50X21hcmtl cl9hdCwgdCk7CkBAIC05MTUsNiArOTE3LDEyIEBAIHVwZGF0ZV9jdXJyZW50 X3RhcmdldCAodm9pZCkKICAgZGVfZmF1bHQgKHRvX3NldF90cmFjZV9ub3Rl cywKIAkgICAgKGludCAoKikgKGNoYXIgKiwgY2hhciAqLCBjaGFyICopKQog CSAgICByZXR1cm5femVybyk7CisgIGRlX2ZhdWx0ICh0b19nZXRfY3VycmVu dF90cmFjZXBvaW50X25hbWUsCisJICAgIChjb25zdCBjaGFyICooKikgKHZv aWQpKQorCSAgICByZXR1cm5femVybyk7CisgIGRlX2ZhdWx0ICh0b190cmFj ZV9kdW1wLAorCSAgICAoaW50ICgqKSAoaW50KSkKKwkgICAgcmV0dXJuX3pl cm8pOwogICBkZV9mYXVsdCAodG9fZ2V0X3RpYl9hZGRyZXNzLAogCSAgICAo aW50ICgqKSAocHRpZF90LCBDT1JFX0FERFIgKikpCiAJICAgIHRjb21wbGFp bik7Ci0tLSBhL3RhcmdldC5oCisrKyBiL3RhcmdldC5oCkBAIC04MTEsNiAr ODExLDE3IEBAIHN0cnVjdCB0YXJnZXRfb3BzCiAgICAgICAgc3VjY2Vzc2Z1 bCwgMCBvdGhlcndpc2UuICAqLwogICAgIGludCAoKnRvX3NldF90cmFjZV9u b3RlcykgKGNoYXIgKnVzZXIsIGNoYXIgKm5vdGVzLCBjaGFyKiBzdG9wbm90 ZXMpOwogCisgICAgLyogUmV0dXJuIG5hbWUgb2YgY3VycmVudCB0cmFjZWZy YW1lJ3MgdHJhY2Vwb2ludC4KKyAgICAgICBSZXR1cm4gTlVMTCBpZiB0aGUg dGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBpdC4gICovCisKKyAgICBjb25zdCBj aGFyICooKnRvX2dldF9jdXJyZW50X3RyYWNlcG9pbnRfbmFtZSkgKHZvaWQp OworCisgICAgLyogRHVtcCBhbGwgdGhlIHZhbHVlIG9mIGN1cnJlbnQgdHJh Y2VmcmFtZS4KKyAgICAgICBSZXR1cm4gZmFpbCBpZiB0aGUgdGFyZ2V0IGRv ZXNuJ3Qgc3VwcG9ydCBpdC4gIFRoZW4gR0RCIHdpbGwKKyAgICAgICBkdW1w IGFsbCB0aGUgdmFsdWUgb2YgY3VycmVudCB0cmFjZWZyYW1lIHdpdGggaXRz ZWxmLiAgKi8KKworICAgIGludCAoKnRvX3RyYWNlX2R1bXApIChpbnQgZnJv bV90dHkpOworCiAgICAgLyogUmV0dXJuIHRoZSBwcm9jZXNzb3IgY29yZSB0 aGF0IHRocmVhZCBQVElEIHdhcyBsYXN0IHNlZW4gb24uCiAgICAgICAgVGhp cyBpbmZvcm1hdGlvbiBpcyB1cGRhdGVkIG9ubHkgd2hlbjoKICAgICAgICAt IHVwZGF0ZV90aHJlYWRfbGlzdCBpcyBjYWxsZWQKQEAgLTE3MDMsNiArMTcx NCwxMiBAQCBleHRlcm4gY2hhciAqdGFyZ2V0X2ZpbGVpb19yZWFkX3N0cmFs bG9jCiAjZGVmaW5lCXRhcmdldF9zZXRfdHJhY2Vfbm90ZXModXNlcixub3Rl cyxzdG9wbm90ZXMpCQlcCiAgICgqY3VycmVudF90YXJnZXQudG9fc2V0X3Ry YWNlX25vdGVzKSAoKHVzZXIpLCAobm90ZXMpLCAoc3RvcG5vdGVzKSkKIAor I2RlZmluZSB0YXJnZXRfZ2V0X2N1cnJlbnRfdHJhY2Vwb2ludF9uYW1lKCkg XAorICAoKmN1cnJlbnRfdGFyZ2V0LnRvX2dldF9jdXJyZW50X3RyYWNlcG9p bnRfbmFtZSkgKCkKKworI2RlZmluZSB0YXJnZXRfdHJhY2VfZHVtcChmcm9t X3R0eSkgXAorICAoKmN1cnJlbnRfdGFyZ2V0LnRvX3RyYWNlX2R1bXApIChm cm9tX3R0eSkKKwogI2RlZmluZSB0YXJnZXRfZ2V0X3RpYl9hZGRyZXNzKHB0 aWQsIGFkZHIpIFwKICAgKCpjdXJyZW50X3RhcmdldC50b19nZXRfdGliX2Fk ZHJlc3MpICgocHRpZCksIChhZGRyKSkKIAotLS0gYS90cmFjZXBvaW50LmMK KysrIGIvdHJhY2Vwb2ludC5jCkBAIC0yMjU3LDcgKzIyNTcsNyBAQCB0Zmlu ZF8xIChlbnVtIHRyYWNlX2ZpbmRfdHlwZSB0eXBlLCBpbnQKICAgICAgYmVs b3cgKGNvcnJlY3RseSkgZGVjaWRlIHRvIHByaW50IG91dCB0aGUgc291cmNl IGxvY2F0aW9uIG9mIHRoZQogICAgICB0cmFjZSBmcmFtZS4gICovCiAgIGlm ICghKHR5cGUgPT0gdGZpbmRfbnVtYmVyICYmIG51bSA9PSAtMSkKLSAgICAg ICYmIChoYXNfc3RhY2tfZnJhbWVzICgpIHx8IHRyYWNlZnJhbWVfbnVtYmVy ID49IDApKQorICAgICAgJiYgaGFzX3N0YWNrX2ZyYW1lcyAoKSkKICAgICBv bGRfZnJhbWVfaWQgPSBnZXRfZnJhbWVfaWQgKGdldF9jdXJyZW50X2ZyYW1l ICgpKTsKIAogICB0YXJnZXRfZnJhbWVubyA9IHRhcmdldF90cmFjZV9maW5k ICh0eXBlLCBudW0sIGFkZHIxLCBhZGRyMiwKQEAgLTIzMDgsNyArMjMwOCw4 IEBAIHRmaW5kXzEgKGVudW0gdHJhY2VfZmluZF90eXBlIHR5cGUsIGludAog ICAKICAgdHAgPSBnZXRfdHJhY2Vwb2ludF9ieV9udW1iZXJfb25fdGFyZ2V0 ICh0YXJnZXRfdHJhY2VwdCk7CiAKLSAgcmVpbml0X2ZyYW1lX2NhY2hlICgp OworICBpZiAoaGFzX3N0YWNrX2ZyYW1lcyAoKSkKKyAgICByZWluaXRfZnJh bWVfY2FjaGUgKCk7CiAgIHRhcmdldF9kY2FjaGVfaW52YWxpZGF0ZSAoKTsK IAogICBzZXRfdHJhY2Vwb2ludF9udW0gKHRwID8gdHAtPmJhc2UubnVtYmVy IDogdGFyZ2V0X3RyYWNlcHQpOwpAQCAtMjMxOCwxMCArMjMxOSwxMyBAQCB0 ZmluZF8xIChlbnVtIHRyYWNlX2ZpbmRfdHlwZSB0eXBlLCBpbnQKIAogICBz ZXRfY3VycmVudF90cmFjZWZyYW1lICh0YXJnZXRfZnJhbWVubyk7CiAKLSAg aWYgKHRhcmdldF9mcmFtZW5vID09IC0xKQotICAgIHNldF90cmFjZWZyYW1l X2NvbnRleHQgKE5VTEwpOwotICBlbHNlCi0gICAgc2V0X3RyYWNlZnJhbWVf Y29udGV4dCAoZ2V0X2N1cnJlbnRfZnJhbWUgKCkpOworICBpZiAoaGFzX3N0 YWNrX2ZyYW1lcyAoKSkKKyAgICB7CisgICAgICBpZiAodGFyZ2V0X2ZyYW1l bm8gPT0gLTEpCisJc2V0X3RyYWNlZnJhbWVfY29udGV4dCAoTlVMTCk7Cisg ICAgICBlbHNlCisgICAgICAgIHNldF90cmFjZWZyYW1lX2NvbnRleHQgKGdl dF9jdXJyZW50X2ZyYW1lICgpKTsKKyAgICB9CiAKICAgaWYgKHRyYWNlZnJh bWVfbnVtYmVyID49IDApCiAgICAgewpAQCAtMjM1NSwyMSArMjM1OSwzMCBA QCB0ZmluZF8xIChlbnVtIHRyYWNlX2ZpbmRfdHlwZSB0eXBlLCBpbnQKICAg aWYgKGZyb21fdHR5CiAgICAgICAmJiAoaGFzX3N0YWNrX2ZyYW1lcyAoKSB8 fCB0cmFjZWZyYW1lX251bWJlciA+PSAwKSkKICAgICB7Ci0gICAgICBlbnVt IHByaW50X3doYXQgcHJpbnRfd2hhdDsKKyAgICAgIGNvbnN0IGNoYXIgKnRw X25hbWU7CiAKLSAgICAgIC8qIE5PVEU6IGluIGltaXRhdGlvbiBvZiB0aGUg c3RlcCBjb21tYW5kLCB0cnkgdG8gZGV0ZXJtaW5lCi0gICAgICAgICB3aGV0 aGVyIHdlIGhhdmUgbWFkZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgZnVuY3Rp b24gdG8KLSAgICAgICAgIGFub3RoZXIuICBJZiBzbywgd2UnbGwgcHJpbnQg dGhlICJzdGFjayBmcmFtZSIgKGllLiB0aGUgbmV3Ci0gICAgICAgICBmdW5j dGlvbiBhbmQgaXQncyBhcmd1bWVudHMpIC0tIG90aGVyd2lzZSB3ZSdsbCBq dXN0IHNob3cgdGhlCi0gICAgICAgICBuZXcgc291cmNlIGxpbmUuICAqLwor ICAgICAgdHBfbmFtZSA9IHRhcmdldF9nZXRfY3VycmVudF90cmFjZXBvaW50 X25hbWUgKCk7CisgICAgICBpZiAodHBfbmFtZSkKKyAgICAgICAgcHJpbnRm X2ZpbHRlcmVkICgiJXNcbiIsIHRwX25hbWUpOwogCi0gICAgICBpZiAoZnJh bWVfaWRfZXEgKG9sZF9mcmFtZV9pZCwKLQkJICAgICAgIGdldF9mcmFtZV9p ZCAoZ2V0X2N1cnJlbnRfZnJhbWUgKCkpKSkKLQlwcmludF93aGF0ID0gU1JD X0xJTkU7Ci0gICAgICBlbHNlCi0JcHJpbnRfd2hhdCA9IFNSQ19BTkRfTE9D OworICAgICAgaWYgKGhhc19zdGFja19mcmFtZXMgKCkpCisgICAgICAgIHsK KwkgIGVudW0gcHJpbnRfd2hhdCBwcmludF93aGF0OwogCi0gICAgICBwcmlu dF9zdGFja19mcmFtZSAoZ2V0X3NlbGVjdGVkX2ZyYW1lIChOVUxMKSwgMSwg cHJpbnRfd2hhdCk7CisJICAvKiBOT1RFOiBpbiBpbWl0YXRpb24gb2YgdGhl IHN0ZXAgY29tbWFuZCwgdHJ5IHRvIGRldGVybWluZQorICAgICAgICAgICB3 aGV0aGVyIHdlIGhhdmUgbWFkZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgZnVu Y3Rpb24gdG8KKyAgICAgICAgICAgYW5vdGhlci4gIElmIHNvLCB3ZSdsbCBw cmludCB0aGUgInN0YWNrIGZyYW1lIiAoaWUuIHRoZSBuZXcKKyAgICAgICAg ICAgZnVuY3Rpb24gYW5kIGl0J3MgYXJndW1lbnRzKSAtLSBvdGhlcndpc2Ug d2UnbGwganVzdCBzaG93IHRoZQorICAgICAgICAgICBuZXcgc291cmNlIGxp bmUuICAqLworCisJICBpZiAoZnJhbWVfaWRfZXEgKG9sZF9mcmFtZV9pZCwK KwkJCSAgIGdldF9mcmFtZV9pZCAoZ2V0X2N1cnJlbnRfZnJhbWUgKCkpKSkK KwkgICAgcHJpbnRfd2hhdCA9IFNSQ19MSU5FOworCSAgZWxzZQorCSAgICBw cmludF93aGF0ID0gU1JDX0FORF9MT0M7CisKKwkgIHByaW50X3N0YWNrX2Zy YW1lIChnZXRfc2VsZWN0ZWRfZnJhbWUgKE5VTEwpLCAxLCBwcmludF93aGF0 KTsKKwl9CiAgICAgICBkb19kaXNwbGF5cyAoKTsKICAgICB9CiB9CkBAIC0y ODk5LDYgKzI5MTIsOSBAQCB0cmFjZV9kdW1wX2NvbW1hbmQgKGNoYXIgKmFy Z3MsIGludCBmcm9tCiAgICAgICByZXR1cm47CiAgICAgfQogCisgIGlmICh0 YXJnZXRfdHJhY2VfZHVtcCAoZnJvbV90dHkpKQorICAgIHJldHVybjsKKwog ICB0ID0gZ2V0X3RyYWNlcG9pbnQgKHRyYWNlcG9pbnRfbnVtYmVyKTsKIAog ICBpZiAodCA9PSBOVUxMKQo= --bcaec54d4766afe80e04d3ee5236--