From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29467 invoked by alias); 21 Dec 2012 08:23:32 -0000 Received: (qmail 29456 invoked by uid 22791); 21 Dec 2012 08:23:29 -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-oa0-f42.google.com (HELO mail-oa0-f42.google.com) (209.85.219.42) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 21 Dec 2012 08:23:14 +0000 Received: by mail-oa0-f42.google.com with SMTP id j1so4389809oag.15 for ; Fri, 21 Dec 2012 00:23:14 -0800 (PST) Received: by 10.60.171.112 with SMTP id at16mr10177193oec.47.1356078194073; Fri, 21 Dec 2012 00:23:14 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.84.5 with HTTP; Fri, 21 Dec 2012 00:22:33 -0800 (PST) In-Reply-To: <87zk203zw3.fsf@fleche.redhat.com> References: <50AC323F.1070907@mentor.com> <50AC3E15.1020308@codesourcery.com> <87zk203zw3.fsf@fleche.redhat.com> From: Hui Zhu Date: Fri, 21 Dec 2012 08:23:00 -0000 Message-ID: Subject: Re: [PATCH] Add CTF support to GDB [3/4] ctf target To: Tom Tromey Cc: Yao Qi , Hui Zhu , gdb-patches ml Content-Type: multipart/mixed; boundary=bcaec54c47a20ba18d04d1588fde X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-12/txt/msg00762.txt.bz2 --bcaec54c47a20ba18d04d1588fde Content-Type: text/plain; charset=ISO-8859-1 Content-length: 6239 On Fri, Nov 30, 2012 at 4:41 AM, Tom Tromey wrote: >>>>>> "Hui" == Hui Zhu writes: > > Hui> --- a/configure.ac > Hui> +++ b/configure.ac > Hui> @@ -2306,6 +2306,134 @@ if test "$enable_gdbserver" = "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 option) ;; > Hui> +esac],[enable_ctf_target=auto]) > Hui> + > Hui> +if test "$enable_ctf_target" = "yes" || test "$enable_ctf_target" = "auto"; then > Hui> + pkg_config_args=glib-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 = NULL; > Hui> +static struct bt_ctf_iter *iter = 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) == 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* stopnotes); > > 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 == tfind_number && num == -1) > Hui> - && (has_stack_frames () || traceframe_number >= 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 patch. 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 == tfind_number && num == -1) && (has_stack_frames () || traceframe_number >= 0)) old_frame_id = get_frame_id (get_current_frame ()); target ctf cannot support "old_frame_id = get_frame_id (get_current_frame ());". But traceframe_number >= 0 will let GDB call the line that target ctf don't support. And I don't think traceframe_number >= 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 >= 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. --bcaec54c47a20ba18d04d1588fde 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_haz1wtsn0 Content-length: 37841 LS0tIGEvYWNsb2NhbC5tNAorKysgYi9hY2xvY2FsLm00CkBAIC0xMDYsNiAr MTA2LDMxIEBAIEFDX0RFRlVOKFtfQU1fU1VCU1RfTk9UTUFLRV0pCiAjIFB1 YmxpYyBzaXN0ZXIgb2YgX0FNX1NVQlNUX05PVE1BS0UuCiBBQ19ERUZVTihb QU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRSgkQCldKQog CisjIFBLR19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSkKKyMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BL R19QUk9HX1BLR19DT05GSUddLAorW200X3BhdHRlcm5fZm9yYmlkKFteXz9Q S0dfW0EtWl9dKyRdKQorbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUco XyhQQVRIfExJQkRJUnxTWVNST09UX0RJUnxBTExPV19TWVNURU1fKENGTEFH U3xMSUJTKSkpPyRdKQorbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUdf KERJU0FCTEVfVU5JTlNUQUxMRUR8VE9QX0JVSUxEX0RJUnxERUJVR19TUEVX KSRdKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR10sIFtwYXRoIHRvIHBrZy1j b25maWcgdXRpbGl0eV0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX1BBVEhd LCBbZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2gg cGF0aF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX0xJQkRJUl0sIFtwYXRo IG92ZXJyaWRpbmcgcGtnLWNvbmZpZydzIGJ1aWx0LWluIHNlYXJjaCBwYXRo XSkKKworaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9 ICJ4c2V0IjsgdGhlbgorCUFDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtw a2ctY29uZmlnXSkKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRo ZW4KKwlfcGtnX21pbl92ZXJzaW9uPW00X2RlZmF1bHQoWyQxXSwgWzAuOS4w XSkKKwlBQ19NU0dfQ0hFQ0tJTkcoW3BrZy1jb25maWcgaXMgYXQgbGVhc3Qg dmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbl0pCisJaWYgJFBLR19DT05GSUcg LS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9u OyB0aGVuCisJCUFDX01TR19SRVNVTFQoW3llc10pCisJZWxzZQorCQlBQ19N U0dfUkVTVUxUKFtub10pCisJCVBLR19DT05GSUc9IiIKKwlmaQorZmlbXWRu bAorXSkjIFBLR19QUk9HX1BLR19DT05GSUcKKwogbTRfaW5jbHVkZShbLi4v Y29uZmlnL2xhcmdlZmlsZS5tNF0pCiBtNF9pbmNsdWRlKFsuLi9jb25maWcv bGVhZC1kb3QubTRdKQogbTRfaW5jbHVkZShbLi4vY29uZmlnL3BsdWdpbnMu bTRdKQotLS0gYS9jb25maWcuaW4KKysrIGIvY29uZmlnLmluCkBAIC0yMTYs NiArMjE2LDEwIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg YHcnIGxpYnJhcnkgKC1sdykuICovCiAjdW5kZWYgSEFWRV9MSUJXCiAKKy8q IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmFiZWx0cmFjZScgbGli cmFyeQorICAgKC1sYmFiZWx0cmFjZSAtbGJhYmVsdHJhY2UtY3RmKS4gICov CisjdW5kZWYgSEFWRV9MSUJCQUJFTFRSQUNFCisKIC8qIERlZmluZSB0byAx IGlmIHlvdSBoYXZlIHRoZSA8bGluay5oPiBoZWFkZXIgZmlsZS4gKi8KICN1 bmRlZiBIQVZFX0xJTktfSAogCi0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25m aWd1cmUKQEAgLTU5Miw2ICs1OTIsOSBAQCBlbmFibGVfb3B0aW9uX2NoZWNr aW5nPW5vCiBhY19zdWJzdF92YXJzPSdMVExJQk9CSlMKIExJQk9CSlMKIEdE Ql9OTV9GSUxFCitQS0dfQ09ORklHX0xJQkRJUgorUEtHX0NPTkZJR19QQVRI CitQS0dfQ09ORklHCiBmcmFncwogdGFyZ2V0X3N1YmRpcgogQ09ORklHX1VO SU5TVEFMTApAQCAtODE5LDYgKzgyMiw3IEBAIHdpdGhfeAogZW5hYmxlX3Np bQogZW5hYmxlX211bHRpX2ljZQogZW5hYmxlX2dkYnNlcnZlcgorZW5hYmxl X2N0Zl90YXJnZXQKICcKICAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxk X2FsaWFzCiBob3N0X2FsaWFzCkBAIC04MzMsNyArODM3LDEwIEBAIE1BS0VJ TkZPCiBNQUtFSU5GT0ZMQUdTCiBZQUNDCiBZRkxBR1MKLVhNS01GJworWE1L TUYKK1BLR19DT05GSUcKK1BLR19DT05GSUdfUEFUSAorUEtHX0NPTkZJR19M SUJESVInCiBhY19zdWJkaXJzX2FsbD0ndGVzdHN1aXRlCiBnZGJ0awogbXVs dGktaWNlCkBAIC0xNDgyLDYgKzE0ODksNyBAQCBPcHRpb25hbCBGZWF0dXJl czoKICAgLS1lbmFibGUtbXVsdGktaWNlICAgICAgYnVpbGQgdGhlIG11bHRp LWljZS1nZGItc2VydmVyCiAgIC0tZW5hYmxlLWdkYnNlcnZlciAgICAgIGF1 dG9tYXRpY2FsbHkgYnVpbGQgZ2Ric2VydmVyICh5ZXMvbm8vYXV0bywgZGVm YXVsdAogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhdXRvKQorICAt LWVuYWJsZS1jdGYtdGFyZ2V0ICAgICBlbmFibGUgY3RmIHRhcmdldCAoeWVz L25vL2F1dG8sIGRlZmF1bHQgaXMgYXV0bykKIAogT3B0aW9uYWwgUGFja2Fn ZXM6CiAgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtB Ukc9eWVzXQpAQCAtMTU1MSw2ICsxNTU5LDExIEBAIFNvbWUgaW5mbHVlbnRp YWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgogICAgICAgICAgICAgICBUaGlz IHNjcmlwdCB3aWxsIGRlZmF1bHQgWUZMQUdTIHRvIHRoZSBlbXB0eSBzdHJp bmcgdG8gYXZvaWQgYQogICAgICAgICAgICAgICBkZWZhdWx0IHZhbHVlIG9m IGAtZCcgZ2l2ZW4gYnkgc29tZSBtYWtlIGFwcGxpY2F0aW9ucy4KICAgWE1L TUYgICAgICAgUGF0aCB0byB4bWttZiwgTWFrZWZpbGUgZ2VuZXJhdG9yIGZv ciBYIFdpbmRvdyBTeXN0ZW0KKyAgUEtHX0NPTkZJRyAgcGF0aCB0byBwa2ct Y29uZmlnIHV0aWxpdHkKKyAgUEtHX0NPTkZJR19QQVRICisgICAgICAgICAg ICAgIGRpcmVjdG9yaWVzIHRvIGFkZCB0byBwa2ctY29uZmlnJ3Mgc2VhcmNo IHBhdGgKKyAgUEtHX0NPTkZJR19MSUJESVIKKyAgICAgICAgICAgICAgcGF0 aCBvdmVycmlkaW5nIHBrZy1jb25maWcncyBidWlsdC1pbiBzZWFyY2ggcGF0 aAogCiBVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9p Y2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAogaXQgdG8gZmlu ZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFt ZXMvbG9jYXRpb25zLgpAQCAtMTM5ODUsNiArMTM5OTgsMjIyIEBAIGlmIHRl c3QgIiRlbmFibGVfZ2Ric2VydmVyIiA9ICJ5ZXMiIC1hICIKICAgYXNfZm5f ZXJyb3IgIkF1dG9tYXRpYyBnZGJzZXJ2ZXIgYnVpbGQgaXMgbm90IHN1cHBv cnRlZCBmb3IgdGhpcyBjb25maWd1cmF0aW9uIiAiJExJTkVOTyIgNQogZmkK IAorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWN0Zi10YXJnZXQgd2FzIGdp dmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY3RmX3RhcmdldCtzZXR9IiA9IHNl dDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2N0Zl90YXJnZXQ7IGNh c2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgeWVzfCBub3xhdXRvKSA7OworICAq KSBhc19mbl9lcnJvciAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1l bmFibGUtY3RmLXRhcmdldCBvcHRpb24iICIkTElORU5PIiA1IDs7Citlc2Fj CitlbHNlCisgIGVuYWJsZV9jdGZfdGFyZ2V0PWF1dG8KK2ZpCisKKworaWYg dGVzdCAiJGVuYWJsZV9jdGZfdGFyZ2V0IiA9ICJ5ZXMiIHx8IHRlc3QgIiRl bmFibGVfY3RmX3RhcmdldCIgPSAiYXV0byI7IHRoZW4KKyAgcGtnX2NvbmZp Z19hcmdzPWJhYmVsdHJhY2UKKworCisKKworCisKKworaWYgdGVzdCAieCRh Y19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorCWlm IHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0 IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25m aWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgor c2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZzsgYWNfd29y ZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2Fj X2N2X3BhdGhfUEtHX0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR19D T05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhf UEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJy aWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19z YXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGly IGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXog IiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGlu ICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVz dCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rl c3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4K KyAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9 JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitQS0dfQ09ORklHPSRh Y19jdl9wYXRoX1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklH IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJFBLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRQ S0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19l Y2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNf Y3ZfcGF0aF9QS0dfQ09ORklHIjsgdGhlbgorICBhY19wdF9QS0dfQ09ORklH PSRQS0dfQ09ORklHCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAi cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRo IGFyZ3MuCitzZXQgZHVtbXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y ICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhf YWNfcHRfUEtHX0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X1BL R19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3Bh dGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFjX3B0X1BLR19DT05GSUciICMgTGV0 IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7 OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJB VE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVf SUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9y IGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7 IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVj X2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVj X2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05G SUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBm aQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2Vz YWMKK2ZpCithY19wdF9QS0dfQ09ORklHPSRhY19jdl9wYXRoX2FjX3B0X1BL R19DT05GSUcKK2lmIHRlc3QgLW4gIiRhY19wdF9QS0dfQ09ORklHIjsgdGhl bgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX3B0X1BLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRh Y19wdF9QS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUK KyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNf cHRfUEtHX0NPTkZJRyIgPSB4OyB0aGVuCisgICAgUEtHX0NPTkZJRz0iIgor ICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dh cm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHBy ZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNf bWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3 aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7 OworZXNhYworICAgIFBLR19DT05GSUc9JGFjX3B0X1BLR19DT05GSUcKKyAg ZmkKK2Vsc2UKKyAgUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NPTkZJ RyIKK2ZpCisKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4K KwlfcGtnX21pbl92ZXJzaW9uPTAuMTYKKwl7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHBrZy1jb25maWcgaXMg YXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbiIgPiY1CiskYXNf ZWNob19uICJjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNp b24gJF9wa2dfbWluX3ZlcnNpb24uLi4gIiA+JjY7IH0KKwlpZiAkUEtHX0NP TkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3Zl cnNpb247IHRoZW4KKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+ JjY7IH0KKwllbHNlCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4m NjsgfQorCQlQS0dfQ09ORklHPSIiCisJZmkKK2ZpCisKKyAgaWYgdGVzdCAi eCRQS0dfQ09ORklHIiA9IHggOyB0aGVuCisgICAgbm9fYmFiZWx0cmFjZT15 ZXMKKyAgICBQS0dfQ09ORklHPW5vCisgIGZpCisKKyAgaWYgdGVzdCB4IiRu b19iYWJlbHRyYWNlIiA9IHggOyB0aGVuCisgICAgQkFCRUxUUkFDRV9DRkxB R1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICRwa2dfY29uZmlnX2FyZ3NgCisg ICAgQkFCRUxUUkFDRV9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgJHBrZ19j b25maWdfYXJnc2AKKyAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAg ICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAgIENGTEFHUz0iJENGTEFHUyAk QkFCRUxUUkFDRV9DRkxBR1MiCisgICAgTElCUz0iJExJQlMgJEJBQkVMVFJB Q0VfTElCUyIKKyAgICAgIHJtIC1mIGNvbmYuZ2xpYnRlc3QKKyAgICAgIGlm IHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgJGFz X2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAk YWNfYyIKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5j bHVkZSA8YmFiZWx0cmFjZS9iYWJlbHRyYWNlLmg+CisjaW5jbHVkZSA8YmFi ZWx0cmFjZS9jdGYvZXZlbnRzLmg+CisjaW5jbHVkZSA8YmFiZWx0cmFjZS9j dGYvaXRlcmF0b3IuaD4KKworaW50CittYWluICgpCit7CisgIGlmICghYnRf Y29udGV4dF9jcmVhdGUoKSkKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7 Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsg dGhlbiA6CisKK2Vsc2UKKyAgbm9fYmFiZWx0cmFjZT15ZXMKK2ZpCitybSAt ZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0 IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgIENG TEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorICAgICBMSUJTPSIkYWNfc2F2ZV9M SUJTIgorICBmaQorICBpZiB0ZXN0ICJ4JG5vX2JhYmVsdHJhY2UiID0geCA7 IHRoZW4KKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7 IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJCQUJFTFRSQUNFIDEi ID4+Y29uZmRlZnMuaAorCisgICAgIExJQlM9IiRMSUJTICRCQUJFTFRSQUNF X0xJQlMiCisgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJEJBQkVMVFJBQ0Vf TElCUyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8i ID4mNjsgfQorICAgIGlmIHRlc3QgIiRQS0dfQ09ORklHIiA9ICJubyIgOyB0 aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IFdBUk5JTkc6ICoqKiBBIG5ldyBlbm91Z2ggdmVyc2lvbiBvZiBw a2ctY29uZmlnIHdhcyBub3QgZm91bmQuIiA+JjUKKyRhc19lY2hvICIkYXNf bWU6IFdBUk5JTkc6ICoqKiBBIG5ldyBlbm91Z2ggdmVyc2lvbiBvZiBwa2ct Y29uZmlnIHdhcyBub3QgZm91bmQuIiA+JjI7fQorICAgICAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiog U2VlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3BrZ2Nv bmZpZy8iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIFNl ZSBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wa2djb25m aWcvIiA+JjI7fQorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgLWYgY29uZi5n bGlidGVzdCA7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdB Uk5JTkc6ICoqKiBDb3VsZCBub3QgcnVuIGxpYmJhYmVsdHJhY2UgdGVzdCBw cm9ncmFtLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiog Q291bGQgbm90IHJ1biBsaWJiYWJlbHRyYWNlIHRlc3QgcHJvZ3JhbS4iID4m Mjt9CisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAiJGVuYWJsZV9j dGZfdGFyZ2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBhc19mbl9lcnJvciAi bGliYmFiZWx0cmFjZSBhcmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZW5hYmxl IENURiB0YXJnZXQiICIkTElORU5PIiA1CisgICAgZWxzZQorICAgICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5H OiBsaWJiYWJlbHRyYWNlIGlzIG1pc3Npbmcgb3IgdW51c2FibGU7IENURiB0 YXJnZXQgaXMgdW5hdmFpbGFibGUuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6 IFdBUk5JTkc6IGxpYmJhYmVsdHJhY2UgaXMgbWlzc2luZyBvciB1bnVzYWJs ZTsgQ1RGIHRhcmdldCBpcyB1bmF2YWlsYWJsZS4iID4mMjt9CisgICAgICBl bmFibGVfY3RmX3RhcmdldCA9IG5vCisgICAgZmkKKyAgZmkKKyAgcm0gLWYg Y29uZi5nbGlidGVzdAorZmkKK2lmIHRlc3QgIiRlbmFibGVfY3RmX3Rhcmdl dCIgPSAibm8iOyB0aGVuCisgIDoKK2ZpCisKICMgSWYgbmF0aXZlZmlsZSAo TkFUX0ZJTEUpIGlzIG5vdCBzZXQgaW4gY29uZmlnLyovKi5tW2h0XSBmaWxl cywgd2UgbGluawogIyB0byBhbiBlbXB0eSB2ZXJzaW9uLgogCi0tLSBhL2Nv bmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTIzMjcsNiArMjMy Nyw3NyBAQCBpZiB0ZXN0ICIkZW5hYmxlX2dkYnNlcnZlciIgPSAieWVzIiAt YSAiCiAgIEFDX01TR19FUlJPUihBdXRvbWF0aWMgZ2Ric2VydmVyIGJ1aWxk IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29uZmlndXJhdGlvbikKIGZp CiAKK0FDX0FSR19FTkFCTEUoY3RmLXRhcmdldCwKK0FTX0hFTFBfU1RSSU5H KFstLWVuYWJsZS1jdGYtdGFyZ2V0XSwKKyAgICAgICAgICAgICAgIFtlbmFi bGUgY3RmIHRhcmdldCAoeWVzL25vL2F1dG8sIGRlZmF1bHQgaXMgYXV0byld KSwKK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCisgIHllc3wgbm98YXV0bykg OzsKKyAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0g Zm9yIC0tZW5hYmxlLWN0Zi10YXJnZXQgb3B0aW9uKSA7OworZXNhY10sW2Vu YWJsZV9jdGZfdGFyZ2V0PWF1dG9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2N0 Zl90YXJnZXQiID0gInllcyIgfHwgdGVzdCAiJGVuYWJsZV9jdGZfdGFyZ2V0 IiA9ICJhdXRvIjsgdGhlbgorICBwa2dfY29uZmlnX2FyZ3M9YmFiZWx0cmFj ZQorICBQS0dfUFJPR19QS0dfQ09ORklHKDAuMTYpCisKKyAgaWYgdGVzdCAi eCRQS0dfQ09ORklHIiA9IHggOyB0aGVuCisgICAgbm9fYmFiZWx0cmFjZT15 ZXMKKyAgICBQS0dfQ09ORklHPW5vCisgIGZpCisKKyAgaWYgdGVzdCB4IiRu b19iYWJlbHRyYWNlIiA9IHggOyB0aGVuCisgICAgQkFCRUxUUkFDRV9DRkxB R1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICRwa2dfY29uZmlnX2FyZ3NgCisg ICAgQkFCRUxUUkFDRV9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgJHBrZ19j b25maWdfYXJnc2AKKyAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAg ICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAgIENGTEFHUz0iJENGTEFHUyAk QkFCRUxUUkFDRV9DRkxBR1MiCisgICAgTElCUz0iJExJQlMgJEJBQkVMVFJB Q0VfTElCUyIKKyAgICAgIHJtIC1mIGNvbmYuZ2xpYnRlc3QKKyAgICAgIEFD X1RSWV9SVU4oWworI2luY2x1ZGUgPGJhYmVsdHJhY2UvYmFiZWx0cmFjZS5o PgorI2luY2x1ZGUgPGJhYmVsdHJhY2UvY3RmL2V2ZW50cy5oPgorI2luY2x1 ZGUgPGJhYmVsdHJhY2UvY3RmL2l0ZXJhdG9yLmg+CisKK2ludAorbWFpbiAo KQoreworICBpZiAoIWJ0X2NvbnRleHRfY3JlYXRlKCkpCisgICAgcmV0dXJu IDE7CisgIHJldHVybiAwOworfQorXSwsIG5vX2JhYmVsdHJhY2U9eWVzLFsk YXNfZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4u ICRhY19jIl0pCisgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorICAg ICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorICBmaQorICBpZiB0ZXN0ICJ4JG5v X2JhYmVsdHJhY2UiID0geCA7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVCh5 ZXMpCisgICAgIEFDX0RFRklORShIQVZFX0xJQkJBQkVMVFJBQ0UsIDEsIFtE ZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxpYnJhcnkuXSkKKyAgICAgTElC Uz0iJExJQlMgJEJBQkVMVFJBQ0VfTElCUyIKKyAgICAgQ1BQRkxBR1M9IiRD UFBGTEFHUyAkQkFCRUxUUkFDRV9MSUJTIgorICBlbHNlCisgICAgQUNfTVNH X1JFU1VMVChubykKKyAgICBpZiB0ZXN0ICIkUEtHX0NPTkZJRyIgPSAibm8i IDsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oWyoqKiBBIG5ldyBlbm91Z2gg dmVyc2lvbiBvZiBwa2ctY29uZmlnIHdhcyBub3QgZm91bmQuXSkKKyAgICAg IEFDX01TR19XQVJOKFsqKiogU2VlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Au b3JnL3NvZnR3YXJlL3BrZ2NvbmZpZy9dKQorICAgIGVsc2UKKyAgICAgIGlm IHRlc3QgLWYgY29uZi5nbGlidGVzdCA7IHRoZW4KKyAgICAgICAgOgorICAg ICAgZWxzZQorICAgICAgICBBQ19NU0dfV0FSTihbKioqIENvdWxkIG5vdCBy dW4gbGliYmFiZWx0cmFjZSB0ZXN0IHByb2dyYW0uXSkKKyAgICAgIGZpCisg ICAgZmkKKyAgICBpZiB0ZXN0ICIkZW5hYmxlX2N0Zl90YXJnZXQiID0gInll cyI7IHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbbGliYmFiZWx0cmFjZSBh cmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZW5hYmxlIENURiB0YXJnZXRdKQor ICAgIGVsc2UKKyAgICAgIEFDX01TR19XQVJOKFtsaWJiYWJlbHRyYWNlIGlz IG1pc3Npbmcgb3IgdW51c2FibGU7IENURiB0YXJnZXQgaXMgdW5hdmFpbGFi bGUuXSkKKyAgICAgIGVuYWJsZV9jdGZfdGFyZ2V0ID0gbm8KKyAgICBmaQor ICBmaQorICBybSAtZiBjb25mLmdsaWJ0ZXN0CitmaQoraWYgdGVzdCAiJGVu YWJsZV9jdGZfdGFyZ2V0IiA9ICJubyI7IHRoZW4KKyAgOgorZmkKKwogIyBJ ZiBuYXRpdmVmaWxlIChOQVRfRklMRSkgaXMgbm90IHNldCBpbiBjb25maWcv Ki8qLm1baHRdIGZpbGVzLCB3ZSBsaW5rCiAjIHRvIGFuIGVtcHR5IHZlcnNp b24uCiAKLS0tIGEvY3RmLmMKKysrIGIvY3RmLmMKQEAgLTEyMzUsMyArMTIz NSw0NzkgQEAgdHJhY2VmcmFtZSAlZCBpcyBkcm9wcGVkIGJlY2F1c2UgdHlw ZSBvZgogCiAgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4pOwogfQorCisjaWZk ZWYgSEFWRV9MSUJCQUJFTFRSQUNFCisjaW5jbHVkZSA8YmFiZWx0cmFjZS9i YWJlbHRyYWNlLmg+CisjaW5jbHVkZSA8YmFiZWx0cmFjZS9jdGYvZXZlbnRz Lmg+CisjaW5jbHVkZSA8YmFiZWx0cmFjZS9jdGYvaXRlcmF0b3IuaD4KKwor LyogVGhlIHN0cnVjdCBwb2ludGVyIGZvciBjdXJyZW50IENURiBkaXJlY3Rv cnkuICAqLworc3RhdGljIHN0cnVjdCBidF9jb250ZXh0ICpjdHggPSBOVUxM Oworc3RhdGljIHN0cnVjdCBidF9jdGZfaXRlciAqaXRlciA9IE5VTEw7Cisv KiBUaGUgZXZlbnQgc3RydWN0IG9mIGN1cnJlbnQgdHJhY2VmcmFtZS4gICov CitzdGF0aWMgc3RydWN0IGJ0X2N0Zl9ldmVudCAqY3RmX2V2ZW50OworLyog VGhlIG51bWJlciBvZiBjdXJyZW50IHRyYWNlZnJhbWUuICAqLworc3RhdGlj IGludCBjdXJyZW50X3RwOworCitzdGF0aWMgc3RydWN0IHRhcmdldF9vcHMg Y3RmX29wczsKKworc3RhdGljIHZvaWQKK2J0X2N0Zl9jbG9zZSAodm9pZCkK K3sKKyAgaWYgKGl0ZXIpCisgICAgeworICAgICAgYnRfY3RmX2l0ZXJfZGVz dHJveSAoaXRlcik7CisgICAgICBpdGVyID0gTlVMTDsKKyAgICB9CisgIGlm IChjdHgpCisgICAgeworICAgICAgYnRfY29udGV4dF9wdXQgKGN0eCk7Cisg ICAgICBjdHggPSBOVUxMOworICAgIH0KK30KKworLyogVXNlIGxpYmJhYmVs dHJhY2Ugb3BlbiBESVJOQU1FLiAgU2V0dXAgQ1RYLCBJVEVSLCBDVEZfRVZF TlQKKyAgIGFuZCBDVVJSRU5UX1RQLiAgKi8KKworc3RhdGljIHZvaWQKK2J0 X2N0Zl9vcGVuIChjaGFyICpkaXJuYW1lKQoreworICBpbnQgcmV0OworICBz dHJ1Y3QgYnRfaXRlcl9wb3MgYmVnaW5fcG9zOworCisgIGN0eCA9IGJ0X2Nv bnRleHRfY3JlYXRlICgpOworICBpZiAoIWN0eCkKKyAgICBlcnJvciAoXygi SW5pdGlhbGl6ZSBsaWJiYWJlbHRyYWNlIGZhaWwiKSk7CisgIHJldCA9IGJ0 X2NvbnRleHRfYWRkX3RyYWNlIChjdHgsIGRpcm5hbWUsICJjdGYiLCBOVUxM LCBOVUxMLCBOVUxMKTsKKyAgaWYgKHJldCA8IDApCisgICAgeworICAgICAg YnRfY3RmX2Nsb3NlICgpOworICAgICAgZXJyb3IgKF8oIlVzZSBsaWJiYWJl bHRyYWNlIG9wZW4gXCIlc1wiIGZhaWwiKSwgZGlybmFtZSk7CisgICAgfQor CisgIGJlZ2luX3Bvcy50eXBlID0gQlRfU0VFS19CRUdJTjsKKyAgaXRlciA9 IGJ0X2N0Zl9pdGVyX2NyZWF0ZSAoY3R4LCAmYmVnaW5fcG9zLCBOVUxMKTsK KyAgaWYgKCFpdGVyKQorICAgIHsKKyAgICAgIGJ0X2N0Zl9jbG9zZSAoKTsK KyAgICAgIGVycm9yIChfKCJVc2UgbGliYmFiZWx0cmFjZSBvcGVuIFwiJXNc IiBmYWlsIiksIGRpcm5hbWUpOworICAgIH0KKworICBjdXJyZW50X3RwID0g MDsKKyAgY3RmX2V2ZW50ID0gYnRfY3RmX2l0ZXJfcmVhZF9ldmVudCAoaXRl cik7CisgIGlmICghY3RmX2V2ZW50KQorICAgIHsKKyAgICAgIGJ0X2N0Zl9j bG9zZSAoKTsKKyAgICAgIGVycm9yIChfKCJVc2UgbGliYmFiZWx0cmFjZSBv cGVuIFwiJXNcIiBmYWlsIiksIGRpcm5hbWUpOworICAgIH0KK30KKworLyog RmluZCB0aGUgZmllbGQgdGhhdCBuYW1lIGlzIE5BTUUgZnJvbSBEIGFuZCBy ZXR1cm4gaXQuCisgICBSZXR1cm4gTlVMTCBpZiBmYWlsLiAgKi8KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkZWZpbml0aW9uICoKK2J0X2N0Zl9maW5kX2Zp ZWxkIChjb25zdCBzdHJ1Y3QgZGVmaW5pdGlvbiAqZCwgY29uc3QgY2hhciAq bmFtZSkKK3sKKyAgc3RydWN0IGRlZmluaXRpb24gY29uc3QgKiBjb25zdCAq bGlzdF9kOworICB1bnNpZ25lZCBpbnQgbGlzdF9kX2NvdW50LCBpOworCisg IGlmIChidF9jdGZfZ2V0X2ZpZWxkX2xpc3QgKGN0Zl9ldmVudCwgZCwgJmxp c3RfZCwgJmxpc3RfZF9jb3VudCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGZv ciAoaSA9IDA7IGkgPCBsaXN0X2RfY291bnQ7IGkrKykKKyAgICB7CisgICAg ICBpZiAoc3RyY21wIChidF9jdGZfZmllbGRfbmFtZSAobGlzdF9kW2ldKSwg bmFtZSkgPT0gMCkKKwlyZXR1cm4gbGlzdF9kW2ldOworICAgIH0KKworICBy ZXR1cm4gTlVMTDsKK30KKworLyogR2V0IHRoZSBpZCBvZiBjdXJyZW50IHRy YWNlZnJhbWUgYW5kIHNldCBpdCB0byBUUFAuCisgICBSZXR1cm4gLTEgaWYg ZmFpbC4gICovCisKK3N0YXRpYyBpbnQKK2J0X2N0Zl9ldmVudF9pZCAoaW50 ICp0cHApCit7CisgIGNvbnN0IHN0cnVjdCBkZWZpbml0aW9uICp0b3BfZDsK KyAgc3RydWN0IGRlZmluaXRpb24gY29uc3QgKiBjb25zdCAqbGlzdF9kOwor ICB1bnNpZ25lZCBpbnQgbGlzdF9kX2NvdW50LCBpOworICBjb25zdCBzdHJ1 Y3QgZGVmaW5pdGlvbiAqZF9pZCA9IE5VTEw7CisgIGNvbnN0IHN0cnVjdCBk ZWZpbml0aW9uICpkX3YgPSBOVUxMOworCisgIHRvcF9kID0gYnRfY3RmX2dl dF90b3BfbGV2ZWxfc2NvcGUgKGN0Zl9ldmVudCwgQlRfU1RSRUFNX0VWRU5U X0hFQURFUik7CisgIGlmICghdG9wX2QpCisgICAgcmV0dXJuIC0xOworICBp ZiAoYnRfY3RmX2dldF9maWVsZF9saXN0IChjdGZfZXZlbnQsIHRvcF9kLCAm bGlzdF9kLCAmbGlzdF9kX2NvdW50KSkKKyAgICByZXR1cm4gLTE7CisKKyAg Zm9yIChpID0gMDsgaSA8IGxpc3RfZF9jb3VudDsgaSsrKQorICAgIHsKKyAg ICAgIGlmIChzdHJjbXAgKGJ0X2N0Zl9maWVsZF9uYW1lIChsaXN0X2RbaV0p LCAiaWQiKSA9PSAwKQorCWRfaWQgPSBsaXN0X2RbaV07CisgICAgICBlbHNl IGlmIChzdHJjbXAgKGJ0X2N0Zl9maWVsZF9uYW1lIChsaXN0X2RbaV0pLCAi diIpID09IDApCisJZF92ID0gbGlzdF9kW2ldOworICAgICAgaWYgKGRfaWQg JiYgZF92KQorCWJyZWFrOworICAgIH0KKyAgaWYgKCFkX2lkKQorICAgIHJl dHVybiAtMTsKKworZ2V0dmFsOgorICBzd2l0Y2ggKGJ0X2N0Zl9maWVsZF90 eXBlIChidF9jdGZfZ2V0X2RlY2xfZnJvbV9kZWYgKGRfaWQpKSkKKyAgICB7 CisgICAgY2FzZSBDVEZfVFlQRV9JTlRFR0VSOgorICAgICAgeworCWludDY0 X3QgdmFsOworCisJaWYgKGJ0X2N0Zl9nZXRfaW50X3NpZ25lZG5lc3MgKGJ0 X2N0Zl9nZXRfZGVjbF9mcm9tX2RlZiAoZF9pZCkpKQorCSAgdmFsID0gYnRf Y3RmX2dldF9pbnQ2NCAoZF9pZCk7CisJZWxzZQorCSAgdmFsID0gYnRfY3Rm X2dldF91aW50NjQgKGRfaWQpOworCWlmICh2YWwgPCBJTlRfTUlOIHx8IHZh bCA+IElOVF9NQVgpCisJICB7CisJICAgIHdhcm5pbmcgKF8oInRyYWNlcG9p bnQgaWQgaXMgdG9vIGJpZyBvciB0b28gc21hbGwuIikpOworCSAgICByZXR1 cm4gLTE7CisJICB9CisJKnRwcCA9IChpbnQpIHZhbDsKKyAgICAgIH0KKyAg ICAgIGJyZWFrOworCisgICAgY2FzZSBDVEZfVFlQRV9FTlVNOgorICAgICAg aWYgKHN0cmNtcCAoYnRfY3RmX2dldF9lbnVtX3N0ciAoZF9pZCksICJjb21w YWN0IikgPT0gMCkKKwlkX2lkID0gYnRfY3RmX2dldF9lbnVtX2ludCAoZF9p ZCk7CisgICAgICBlbHNlCisJeworCSAgaWYgKCFkX3YpCisJICAgIHJldHVy biAtMTsKKwkgIGlmIChidF9jdGZfZmllbGRfdHlwZSAoYnRfY3RmX2dldF9k ZWNsX2Zyb21fZGVmIChkX3YpKQorCSAgICAgICE9IENURl9UWVBFX1ZBUklB TlQpCisJICAgIHJldHVybiAtMTsKKworCSAgZF92ID0gYnRfY3RmX2ZpbmRf ZmllbGQgKGRfdiwgImV4dGVuZGVkIik7CisJICBpZiAoIWRfdikKKwkgICAg cmV0dXJuIC0xOworCSAgaWYgKGJ0X2N0Zl9maWVsZF90eXBlIChidF9jdGZf Z2V0X2RlY2xfZnJvbV9kZWYgKGRfdikpCisJICAgICAgIT0gQ1RGX1RZUEVf U1RSVUNUKQorCSAgICByZXR1cm4gLTE7CisJICBkX2lkID0gYnRfY3RmX2Zp bmRfZmllbGQgKGRfdiwgImlkIik7CisJICBpZiAoIWRfaWQpCisJICAgIHJl dHVybiAtMTsKKwl9CisJZ290byBnZXR2YWw7CisgICAgICBicmVhazsKKwor ICAgIGRlZmF1bHQ6CisgICAgICB3YXJuaW5nIChfKCJ0eXBlIG9mIHRyYWNl cG9pbnQgaWQgaXMgbm90IHN1cHBvcnQuIikpOworICAgICAgcmV0dXJuIC0x OworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisv KiBDb252ZXJ0IERFRiB0byBhIHZhbHVlIHN0cnVjdCBhbmQgcmV0dXJuIGl0 LiAgKi8KKworc3RhdGljIHN0cnVjdCB2YWx1ZSAqCitidF9jdGZfZGVmX3Rv X3ZhbCAoY29uc3Qgc3RydWN0IGRlZmluaXRpb24gKmRlZikKK3sKKyAgc3Ry dWN0IHZhbHVlICpyZXQgPSBOVUxMOworCisgIGlmICghZGVmKQorICAgIHJl dHVybiByZXQ7CisKKyAgc3dpdGNoIChidF9jdGZfZmllbGRfdHlwZSAoYnRf Y3RmX2dldF9kZWNsX2Zyb21fZGVmIChkZWYpKSkKKyAgICB7CisgICAgY2Fz ZSBDVEZfVFlQRV9JTlRFR0VSOgorICAgICAgaWYgKGJ0X2N0Zl9nZXRfaW50 X3NpZ25lZG5lc3MgKGJ0X2N0Zl9nZXRfZGVjbF9mcm9tX2RlZiAoZGVmKSkp CisJeworCSAgaW50NjRfdCB2YWw7CisJICB2YWwgPSBidF9jdGZfZ2V0X2lu dDY0IChkZWYpOworCSAgcmV0ID0gdmFsdWVfZnJvbV9sb25nZXN0CisJCSAg ICAoYnVpbHRpbl90eXBlICh0YXJnZXRfZ2RiYXJjaCAoKSktPmJ1aWx0aW5f aW50NjQsIHZhbCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHVpbnQ2NF90 IHZhbDsKKwkgIHZhbCA9IGJ0X2N0Zl9nZXRfdWludDY0IChkZWYpOworCSAg cmV0ID0gdmFsdWVfZnJvbV9sb25nZXN0CisJCSAgICAoYnVpbHRpbl90eXBl ICh0YXJnZXRfZ2RiYXJjaCAoKSktPmJ1aWx0aW5fdWludDY0LCB2YWwpOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVEZfVFlQRV9FTlVNOgor ICAgICAgcmV0ID0gYnRfY3RmX2RlZl90b192YWwgKGJ0X2N0Zl9nZXRfZW51 bV9pbnQgKGRlZikpOworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVy biByZXQ7Cit9CisKKy8qIEFkZCBlYWNoIHZhcmlhYmxlIG9mIGNycmVudCB0 cmFjZWZyYW1lIHRvIEdEQiBhcyBpbnRlcm5hbHZhci4gICovCisKK3N0YXRp YyBpbnQKK2J0X2N0Zl9ldmVudF90b19pbnRlcm5hbHZhciAodm9pZCkKK3sK KyAgY29uc3Qgc3RydWN0IGRlZmluaXRpb24gKnRvcF9kOworICBzdHJ1Y3Qg ZGVmaW5pdGlvbiBjb25zdCAqIGNvbnN0ICpsaXN0X2Q7CisgIHVuc2lnbmVk IGludCBsaXN0X2RfY291bnQsIGk7CisKKyAgdG9wX2QgPSBidF9jdGZfZ2V0 X3RvcF9sZXZlbF9zY29wZSAoY3RmX2V2ZW50LCBCVF9FVkVOVF9GSUVMRFMp OworICBpZiAoIXRvcF9kKQorICAgIHJldHVybiAtMTsKKyAgaWYgKGJ0X2N0 Zl9nZXRfZmllbGRfbGlzdCAoY3RmX2V2ZW50LCB0b3BfZCwgJmxpc3RfZCwg Jmxpc3RfZF9jb3VudCkpCisgICAgcmV0dXJuIC0xOworCisgIGZvciAoaSA9 IDA7IGkgPCBsaXN0X2RfY291bnQ7IGkrKykKKyAgICB7CisgICAgICBzdHJ1 Y3QgdmFsdWUgKnZhbDsKKyAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAg ICAgIHZhbCA9IGJ0X2N0Zl9kZWZfdG9fdmFsIChsaXN0X2RbaV0pOworICAg ICAgbmFtZSA9IGJ0X2N0Zl9maWVsZF9uYW1lIChsaXN0X2RbaV0pOworICAg ICAgaWYgKHZhbCkKKyAgICAgICAgc2V0X2ludGVybmFsdmFyIChsb29rdXBf aW50ZXJuYWx2YXIgKG5hbWUpLCB2YWwpOworICAgICAgZWxzZQorCXdhcm5p bmcgKF8oIiQlcyBpcyBub3Qgc3VwcG9ydC4iKSwgbmFtZSk7CisgICAgfQor CisgIHJldHVybiAwOworfQorCisvKiBTZXQgY3VycmVudCB0cmFjZWZyYW1l IHRvIGZpcnN0IG9uZS4KKyAgIFJldHVybiAtMSBpZiBmYWlsLiAgKi8KKwor c3RhdGljIGludAorYnRfY3RmX2dvdG9fYmVnaW4gKHZvaWQpCit7CisgIHN0 cnVjdCBidF9pdGVyX3BvcyBwb3M7CisKKyAgcG9zLnR5cGUgPSBCVF9TRUVL X0JFR0lOOworICBpZiAoYnRfaXRlcl9zZXRfcG9zIChidF9jdGZfZ2V0X2l0 ZXIgKGl0ZXIpLCAmcG9zKSkKKyAgICByZXR1cm4gLTE7CisgIGN1cnJlbnRf dHAgPSAwOworICBjdGZfZXZlbnQgPSBidF9jdGZfaXRlcl9yZWFkX2V2ZW50 IChpdGVyKTsKKyAgaWYgKCFjdGZfZXZlbnQpCisgICAgcmV0dXJuIC0xOwor CisgIHJldHVybiAwOworfQorCisvKiBGaW5kIHRoZSBOVU0gdHJhY2VmcmFt ZSBhbmQgc2VsZWN0IGl0LgorICAgSWYgc3VjY2VzcywgcmV0dXJuIHRoZSBu dW0gb2YgdHJhY2VmcmFtZSBhbmQgc2V0IHRyYWNlcG9pbnQgaWQgdG8KKyAg IFRQUC4KKyAgIElmIGZhaWwsIHJldHVybiAtMS4gICovCisKK3N0YXRpYyBp bnQKK2J0X2N0Zl9maW5kX251bSAoaW50IG51bSwgaW50ICp0cHApCit7Cisg IGlmIChudW0gPCBjdXJyZW50X3RwKQorICAgIHsKKyAgICAgIGlmIChidF9j dGZfZ290b19iZWdpbiAoKSkKKwlyZXR1cm4gLTE7CisgICAgfQorCisgIHdo aWxlICgxKQorICAgIHsKKyAgICAgIGlmIChjdXJyZW50X3RwID09IG51bSkK KyAgICAgICAgYnJlYWs7CisgICAgICBpZiAoYnRfaXRlcl9uZXh0IChidF9j dGZfZ2V0X2l0ZXIgKGl0ZXIpKSA8IDApCisJcmV0dXJuIC0xOworICAgICAg Y3RmX2V2ZW50ID0gYnRfY3RmX2l0ZXJfcmVhZF9ldmVudCAoaXRlcik7Cisg ICAgICBpZiAoIWN0Zl9ldmVudCkKKyAgICAgICAgeworCSAgYnRfY3RmX2dv dG9fYmVnaW4gKCk7CisJICByZXR1cm4gLTE7CisJfQorICAgICAgKytjdXJy ZW50X3RwOworICAgIH0KKworICBpZiAodHBwKQorICAgIHsKKyAgICAgIGlm IChidF9jdGZfZXZlbnRfaWQgKHRwcCkpCisgICAgICAgIHsKKwkgIHdhcm5p bmcgKF8oImdldCB0cmFjZXBvaW50IGlkIGZhaWwuIikpOworICAgICAgICAg ICp0cHAgPSBJTlRfTUlOOworCX0KKyAgICB9CisKKyAgcmV0dXJuIGN1cnJl bnRfdHA7Cit9CisKKy8qIEZpbmQgdHJhY2VmcmFtZSB0aGF0IGlkIGlzIFRQ IHRoYXQgZm9sbG93IGN1cnJlbnQgdHJhY2VmcmFtZS4KKyAgIElmIHN1Y2Nl c3MsIHJldHVybiB0aGUgbnVtIG9mIHRyYWNlZnJhbWUuCisgICBJZiBmYWls LCByZXR1cm4gLTEuICAqLworCitzdGF0aWMgaW50CitidF9jdGZfZmluZF90 cCAoaW50IHRwKQoreworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpbnQg aWQ7CisKKyAgICAgIGlmIChidF9pdGVyX25leHQgKGJ0X2N0Zl9nZXRfaXRl ciAoaXRlcikpIDwgMCkKKwlyZXR1cm4gLTE7CisgICAgICBjdGZfZXZlbnQg PSBidF9jdGZfaXRlcl9yZWFkX2V2ZW50IChpdGVyKTsKKyAgICAgIGlmICgh Y3RmX2V2ZW50KQorICAgICAgICB7CisJICBidF9jdGZfZ290b19iZWdpbiAo KTsKKwkgIHJldHVybiAtMTsKKwl9CisgICAgICArK2N1cnJlbnRfdHA7Cisg ICAgICBpZiAoYnRfY3RmX2V2ZW50X2lkICgmaWQpKQorICAgICAgICB3YXJu aW5nIChfKCJnZXQgdHJhY2Vwb2ludCBpZCBmYWlsLiIpKTsKKyAgICAgIGVs c2UgaWYgKGlkID09IHRwKQorCWJyZWFrOworICAgIH0KKworICByZXR1cm4g Y3VycmVudF90cDsKK30KKworc3RhdGljIHZvaWQKK2N0Zl9vcGVuIChjaGFy ICpkaXJuYW1lLCBpbnQgZnJvbV90dHkpCit7CisgIHRhcmdldF9wcmVvcGVu IChmcm9tX3R0eSk7CisgIGlmICghZGlybmFtZSkKKyAgICBlcnJvciAoXygi Tm8gQ1RGIGRpcmVjdG9yeSBzcGVjaWZpZWQuIikpOworCisgIGJ0X2N0Zl9v cGVuIChkaXJuYW1lKTsKKworICBwdXNoX3RhcmdldCAoJmN0Zl9vcHMpOwor fQorCitzdGF0aWMgdm9pZAorY3RmX2Nsb3NlIChpbnQgcXVpdHRpbmcpCit7 CisgIGJ0X2N0Zl9jbG9zZSAoKTsKK30KKworc3RhdGljIGludAorY3RmX3Ry YWNlX2ZpbmQgKGVudW0gdHJhY2VfZmluZF90eXBlIHR5cGUsIGludCBudW0s CisJCVVMT05HRVNUIGFkZHIxLCBVTE9OR0VTVCBhZGRyMiwgaW50ICp0cHAp Cit7CisgIGludCByZXQgPSAtMTsKKworICBzd2l0Y2ggKHR5cGUpCisgICAg eworICAgIGNhc2UgdGZpbmRfbnVtYmVyOgorICAgICAgaWYgKG51bSA8IDAp CisgICAgICAgIHsKKwkgIGlmICh0cHApCisJICAgICp0cHAgPSAtMTsKKwl9 CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IGJ0X2N0Zl9maW5kX251bSAo bnVtLCB0cHApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIHRmaW5kX3Rw OgorICAgICAgcmV0ID0gYnRfY3RmX2ZpbmRfdHAgKG51bSk7CisgICAgICBi cmVhazsKKyAgICB9CisKKyAgaWYgKHJldCA+PSAwKQorICAgIHsKKyAgICAg IGlmIChidF9jdGZfZXZlbnRfdG9faW50ZXJuYWx2YXIgKCkpCisJd2Fybmlu ZyAoXygiYWRkIGludGVybmFsIHZhciBvZiB0aGlzIGZyYW1lIGZhaWwuIikp OworICAgIH0KKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qg Y2hhciAqCitjdGZfZ2V0X2N1cnJlbnRfdHJhY2Vwb2ludF9uYW1lICh2b2lk KQoreworICBpZiAoY3RmX2V2ZW50KQorICAgIHJldHVybiBidF9jdGZfZXZl bnRfbmFtZSAoY3RmX2V2ZW50KTsKKworICByZXR1cm4gTlVMTDsKK30KKwor c3RhdGljIGludAorY3RmX3RyYWNlX2R1bXAgKGludCBmcm9tX3R0eSkKK3sK KyAgY29uc3Qgc3RydWN0IGRlZmluaXRpb24gKnRvcF9kOworICBzdHJ1Y3Qg ZGVmaW5pdGlvbiBjb25zdCAqIGNvbnN0ICpsaXN0X2Q7CisgIHVuc2lnbmVk IGludCBsaXN0X2RfY291bnQsIGk7CisKKyAgaWYgKCFjdGZfZXZlbnQpCisg ICAgcmV0dXJuIDE7CisKKyAgdG9wX2QgPSBidF9jdGZfZ2V0X3RvcF9sZXZl bF9zY29wZSAoY3RmX2V2ZW50LCBCVF9FVkVOVF9GSUVMRFMpOworICBpZiAo IXRvcF9kKQorICAgIHJldHVybiAxOworICBpZiAoYnRfY3RmX2dldF9maWVs ZF9saXN0IChjdGZfZXZlbnQsIHRvcF9kLCAmbGlzdF9kLCAmbGlzdF9kX2Nv dW50KSkKKyAgICByZXR1cm4gMTsKKworICBmb3IgKGkgPSAwOyBpIDwgbGlz dF9kX2NvdW50OyBpKyspCisgICAgeworICAgICAgY2hhciBuYW1lWzI1Nl07 CisgICAgICBzbnByaW50ZiAobmFtZSwgMjU2LCAiJCVzIiwgYnRfY3RmX2Zp ZWxkX25hbWUgKGxpc3RfZFtpXSkpOworICAgICAgcHJpbnRmX2ZpbHRlcmVk ICgiJXMgPSAiLCBuYW1lKTsKKyAgICAgIG91dHB1dF9jb21tYW5kIChuYW1l LCBmcm9tX3R0eSk7CisgICAgICBwcmludGZfZmlsdGVyZWQgKCJcbiIpOwor ICAgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorY3RmX2hh c19hbGxfbWVtb3J5IChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzKQoreworICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY3RmX2hhc19tZW1vcnkgKHN0 cnVjdCB0YXJnZXRfb3BzICpvcHMpCit7CisgIHJldHVybiAwOworfQorCitz dGF0aWMgaW50CitjdGZfaGFzX3N0YWNrIChzdHJ1Y3QgdGFyZ2V0X29wcyAq b3BzKQoreworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY3RmX2hh c19yZWdpc3RlcnMgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMpCit7CisgIHJl dHVybiAwOworfQorCitzdGF0aWMgaW50CitjdGZfdGhyZWFkX2FsaXZlIChz dHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBwdGlkX3QgcHRpZCkKK3sKKyAgcmV0 dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X2N0Zl9vcHMgKHZvaWQp Cit7CisgIGN0Zl9vcHMudG9fc2hvcnRuYW1lID0gImN0ZiI7CisgIGN0Zl9v cHMudG9fbG9uZ25hbWUgPSAiQ1RGIGZpbGUiOworICBjdGZfb3BzLnRvX2Rv YyA9ICJVc2UgYSBDVEYgZGlyZWN0b3J5IGFzIGEgdGFyZ2V0LlxuXAorU3Bl Y2lmeSB0aGUgZmlsZW5hbWUgb2YgdGhlIENURiBkaXJlY3RvcnkuIjsKKyAg Y3RmX29wcy50b19vcGVuID0gY3RmX29wZW47CisgIGN0Zl9vcHMudG9fY2xv c2UgPSBjdGZfY2xvc2U7CisgIGN0Zl9vcHMudG9fdHJhY2VfZmluZCA9IGN0 Zl90cmFjZV9maW5kOworICBjdGZfb3BzLnRvX2dldF9jdXJyZW50X3RyYWNl cG9pbnRfbmFtZSA9IGN0Zl9nZXRfY3VycmVudF90cmFjZXBvaW50X25hbWU7 CisgIGN0Zl9vcHMudG9fdHJhY2VfZHVtcCA9IGN0Zl90cmFjZV9kdW1wOwor ICBjdGZfb3BzLnRvX3N0cmF0dW0gPSBwcm9jZXNzX3N0cmF0dW07CisgIGN0 Zl9vcHMudG9faGFzX2FsbF9tZW1vcnkgPSBjdGZfaGFzX2FsbF9tZW1vcnk7 CisgIGN0Zl9vcHMudG9faGFzX21lbW9yeSA9IGN0Zl9oYXNfbWVtb3J5Owor ICBjdGZfb3BzLnRvX2hhc19zdGFjayA9IGN0Zl9oYXNfc3RhY2s7CisgIGN0 Zl9vcHMudG9faGFzX3JlZ2lzdGVycyA9IGN0Zl9oYXNfcmVnaXN0ZXJzOwor ICBjdGZfb3BzLnRvX3RocmVhZF9hbGl2ZSA9IGN0Zl90aHJlYWRfYWxpdmU7 CisgIGN0Zl9vcHMudG9fbWFnaWMgPSBPUFNfTUFHSUM7Cit9CisKK2V4dGVy biB2b2lkIF9pbml0aWFsaXplX2N0ZiAodm9pZCk7CisKKy8qIG1vZHVsZSBp bml0aWFsaXphdGlvbiAqLwordm9pZAorX2luaXRpYWxpemVfY3RmICh2b2lk KQoreworICBpbml0X2N0Zl9vcHMgKCk7CisKKyAgYWRkX3RhcmdldCAoJmN0 Zl9vcHMpOworfQorI2VuZGlmCi0tLSBhL3RhcmdldC5jCisrKyBiL3Rhcmdl dC5jCkBAIC02OTQsNiArNjk0LDggQEAgdXBkYXRlX2N1cnJlbnRfdGFyZ2V0 ICh2b2lkKQogICAgICAgSU5IRVJJVCAodG9fc2V0X2Rpc2Nvbm5lY3RlZF90 cmFjaW5nLCB0KTsKICAgICAgIElOSEVSSVQgKHRvX3NldF9jaXJjdWxhcl90 cmFjZV9idWZmZXIsIHQpOwogICAgICAgSU5IRVJJVCAodG9fc2V0X3RyYWNl X25vdGVzLCB0KTsKKyAgICAgIElOSEVSSVQgKHRvX2dldF9jdXJyZW50X3Ry YWNlcG9pbnRfbmFtZSwgdCk7CisgICAgICBJTkhFUklUICh0b190cmFjZV9k dW1wLCB0KTsKICAgICAgIElOSEVSSVQgKHRvX2dldF90aWJfYWRkcmVzcywg dCk7CiAgICAgICBJTkhFUklUICh0b19zZXRfcGVybWlzc2lvbnMsIHQpOwog ICAgICAgSU5IRVJJVCAodG9fc3RhdGljX3RyYWNlcG9pbnRfbWFya2VyX2F0 LCB0KTsKQEAgLTkxNSw2ICs5MTcsMTIgQEAgdXBkYXRlX2N1cnJlbnRfdGFy Z2V0ICh2b2lkKQogICBkZV9mYXVsdCAodG9fc2V0X3RyYWNlX25vdGVzLAog CSAgICAoaW50ICgqKSAoY2hhciAqLCBjaGFyICosIGNoYXIgKikpCiAJICAg IHJldHVybl96ZXJvKTsKKyAgZGVfZmF1bHQgKHRvX2dldF9jdXJyZW50X3Ry YWNlcG9pbnRfbmFtZSwKKwkgICAgKGNvbnN0IGNoYXIgKigqKSAodm9pZCkp CisJICAgIHJldHVybl96ZXJvKTsKKyAgZGVfZmF1bHQgKHRvX3RyYWNlX2R1 bXAsCisJICAgIChpbnQgKCopIChpbnQpKQorCSAgICByZXR1cm5femVybyk7 CiAgIGRlX2ZhdWx0ICh0b19nZXRfdGliX2FkZHJlc3MsCiAJICAgIChpbnQg KCopIChwdGlkX3QsIENPUkVfQUREUiAqKSkKIAkgICAgdGNvbXBsYWluKTsK LS0tIGEvdGFyZ2V0LmgKKysrIGIvdGFyZ2V0LmgKQEAgLTgxMSw2ICs4MTEs MTcgQEAgc3RydWN0IHRhcmdldF9vcHMKICAgICAgICBzdWNjZXNzZnVsLCAw IG90aGVyd2lzZS4gICovCiAgICAgaW50ICgqdG9fc2V0X3RyYWNlX25vdGVz KSAoY2hhciAqdXNlciwgY2hhciAqbm90ZXMsIGNoYXIqIHN0b3Bub3Rlcyk7 CiAKKyAgICAvKiBSZXR1cm4gbmFtZSBvZiBjdXJyZW50IHRyYWNlZnJhbWUn cyB0cmFjZXBvaW50LgorICAgICAgIFJldHVybiBOVUxMIGlmIHRoZSB0YXJn ZXQgZG9lc24ndCBzdXBwb3J0IGl0LiAgKi8KKworICAgIGNvbnN0IGNoYXIg KigqdG9fZ2V0X2N1cnJlbnRfdHJhY2Vwb2ludF9uYW1lKSAodm9pZCk7CisK KyAgICAvKiBEdW1wIGFsbCB0aGUgdmFsdWUgb2YgY3VycmVudCB0cmFjZWZy YW1lLgorICAgICAgIFJldHVybiBmYWlsIGlmIHRoZSB0YXJnZXQgZG9lc24n dCBzdXBwb3J0IGl0LiAgVGhlbiBHREIgd2lsbAorICAgICAgIGR1bXAgYWxs IHRoZSB2YWx1ZSBvZiBjdXJyZW50IHRyYWNlZnJhbWUgd2l0aCBpdHNlbGYu ICAqLworCisgICAgaW50ICgqdG9fdHJhY2VfZHVtcCkgKGludCBmcm9tX3R0 eSk7CisKICAgICAvKiBSZXR1cm4gdGhlIHByb2Nlc3NvciBjb3JlIHRoYXQg dGhyZWFkIFBUSUQgd2FzIGxhc3Qgc2VlbiBvbi4KICAgICAgICBUaGlzIGlu Zm9ybWF0aW9uIGlzIHVwZGF0ZWQgb25seSB3aGVuOgogICAgICAgIC0gdXBk YXRlX3RocmVhZF9saXN0IGlzIGNhbGxlZApAQCAtMTcwMyw2ICsxNzE0LDEy IEBAIGV4dGVybiBjaGFyICp0YXJnZXRfZmlsZWlvX3JlYWRfc3RyYWxsb2MK ICNkZWZpbmUJdGFyZ2V0X3NldF90cmFjZV9ub3Rlcyh1c2VyLG5vdGVzLHN0 b3Bub3RlcykJCVwKICAgKCpjdXJyZW50X3RhcmdldC50b19zZXRfdHJhY2Vf bm90ZXMpICgodXNlciksIChub3RlcyksIChzdG9wbm90ZXMpKQogCisjZGVm aW5lIHRhcmdldF9nZXRfY3VycmVudF90cmFjZXBvaW50X25hbWUoKSBcCisg ICgqY3VycmVudF90YXJnZXQudG9fZ2V0X2N1cnJlbnRfdHJhY2Vwb2ludF9u YW1lKSAoKQorCisjZGVmaW5lIHRhcmdldF90cmFjZV9kdW1wKGZyb21fdHR5 KSBcCisgICgqY3VycmVudF90YXJnZXQudG9fdHJhY2VfZHVtcCkgKGZyb21f dHR5KQorCiAjZGVmaW5lIHRhcmdldF9nZXRfdGliX2FkZHJlc3MocHRpZCwg YWRkcikgXAogICAoKmN1cnJlbnRfdGFyZ2V0LnRvX2dldF90aWJfYWRkcmVz cykgKChwdGlkKSwgKGFkZHIpKQogCi0tLSBhL3RyYWNlcG9pbnQuYworKysg Yi90cmFjZXBvaW50LmMKQEAgLTIyNDMsNyArMjI0Myw3IEBAIHRmaW5kXzEg KGVudW0gdHJhY2VfZmluZF90eXBlIHR5cGUsIGludAogICAgICBiZWxvdyAo Y29ycmVjdGx5KSBkZWNpZGUgdG8gcHJpbnQgb3V0IHRoZSBzb3VyY2UgbG9j YXRpb24gb2YgdGhlCiAgICAgIHRyYWNlIGZyYW1lLiAgKi8KICAgaWYgKCEo dHlwZSA9PSB0ZmluZF9udW1iZXIgJiYgbnVtID09IC0xKQotICAgICAgJiYg KGhhc19zdGFja19mcmFtZXMgKCkgfHwgdHJhY2VmcmFtZV9udW1iZXIgPj0g MCkpCisgICAgICAmJiBoYXNfc3RhY2tfZnJhbWVzICgpKQogICAgIG9sZF9m cmFtZV9pZCA9IGdldF9mcmFtZV9pZCAoZ2V0X2N1cnJlbnRfZnJhbWUgKCkp OwogCiAgIHRhcmdldF9mcmFtZW5vID0gdGFyZ2V0X3RyYWNlX2ZpbmQgKHR5 cGUsIG51bSwgYWRkcjEsIGFkZHIyLApAQCAtMjI5NCw3ICsyMjk0LDggQEAg dGZpbmRfMSAoZW51bSB0cmFjZV9maW5kX3R5cGUgdHlwZSwgaW50CiAgIAog ICB0cCA9IGdldF90cmFjZXBvaW50X2J5X251bWJlcl9vbl90YXJnZXQgKHRh cmdldF90cmFjZXB0KTsKIAotICByZWluaXRfZnJhbWVfY2FjaGUgKCk7Cisg IGlmIChoYXNfc3RhY2tfZnJhbWVzICgpKQorICAgIHJlaW5pdF9mcmFtZV9j YWNoZSAoKTsKICAgdGFyZ2V0X2RjYWNoZV9pbnZhbGlkYXRlICgpOwogCiAg IHNldF90cmFjZXBvaW50X251bSAodHAgPyB0cC0+YmFzZS5udW1iZXIgOiB0 YXJnZXRfdHJhY2VwdCk7CkBAIC0yMzA0LDEwICsyMzA1LDEzIEBAIHRmaW5k XzEgKGVudW0gdHJhY2VfZmluZF90eXBlIHR5cGUsIGludAogCiAgIHNldF9j dXJyZW50X3RyYWNlZnJhbWUgKHRhcmdldF9mcmFtZW5vKTsKIAotICBpZiAo dGFyZ2V0X2ZyYW1lbm8gPT0gLTEpCi0gICAgc2V0X3RyYWNlZnJhbWVfY29u dGV4dCAoTlVMTCk7Ci0gIGVsc2UKLSAgICBzZXRfdHJhY2VmcmFtZV9jb250 ZXh0IChnZXRfY3VycmVudF9mcmFtZSAoKSk7CisgIGlmIChoYXNfc3RhY2tf ZnJhbWVzICgpKQorICAgIHsKKyAgICAgIGlmICh0YXJnZXRfZnJhbWVubyA9 PSAtMSkKKwlzZXRfdHJhY2VmcmFtZV9jb250ZXh0IChOVUxMKTsKKyAgICAg IGVsc2UKKyAgICAgICAgc2V0X3RyYWNlZnJhbWVfY29udGV4dCAoZ2V0X2N1 cnJlbnRfZnJhbWUgKCkpOworICAgIH0KIAogICBpZiAodHJhY2VmcmFtZV9u dW1iZXIgPj0gMCkKICAgICB7CkBAIC0yMzQxLDIxICsyMzQ1LDMwIEBAIHRm aW5kXzEgKGVudW0gdHJhY2VfZmluZF90eXBlIHR5cGUsIGludAogICBpZiAo ZnJvbV90dHkKICAgICAgICYmIChoYXNfc3RhY2tfZnJhbWVzICgpIHx8IHRy YWNlZnJhbWVfbnVtYmVyID49IDApKQogICAgIHsKLSAgICAgIGVudW0gcHJp bnRfd2hhdCBwcmludF93aGF0OworICAgICAgY29uc3QgY2hhciAqdHBfbmFt ZTsKIAotICAgICAgLyogTk9URTogaW4gaW1pdGF0aW9uIG9mIHRoZSBzdGVw IGNvbW1hbmQsIHRyeSB0byBkZXRlcm1pbmUKLSAgICAgICAgIHdoZXRoZXIg d2UgaGF2ZSBtYWRlIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBmdW5jdGlvbiB0 bwotICAgICAgICAgYW5vdGhlci4gIElmIHNvLCB3ZSdsbCBwcmludCB0aGUg InN0YWNrIGZyYW1lIiAoaWUuIHRoZSBuZXcKLSAgICAgICAgIGZ1bmN0aW9u IGFuZCBpdCdzIGFyZ3VtZW50cykgLS0gb3RoZXJ3aXNlIHdlJ2xsIGp1c3Qg c2hvdyB0aGUKLSAgICAgICAgIG5ldyBzb3VyY2UgbGluZS4gICovCisgICAg ICB0cF9uYW1lID0gdGFyZ2V0X2dldF9jdXJyZW50X3RyYWNlcG9pbnRfbmFt ZSAoKTsKKyAgICAgIGlmICh0cF9uYW1lKQorICAgICAgICBwcmludGZfZmls dGVyZWQgKCIlc1xuIiwgdHBfbmFtZSk7CiAKLSAgICAgIGlmIChmcmFtZV9p ZF9lcSAob2xkX2ZyYW1lX2lkLAotCQkgICAgICAgZ2V0X2ZyYW1lX2lkIChn ZXRfY3VycmVudF9mcmFtZSAoKSkpKQotCXByaW50X3doYXQgPSBTUkNfTElO RTsKLSAgICAgIGVsc2UKLQlwcmludF93aGF0ID0gU1JDX0FORF9MT0M7Cisg ICAgICBpZiAoaGFzX3N0YWNrX2ZyYW1lcyAoKSkKKyAgICAgICAgeworCSAg ZW51bSBwcmludF93aGF0IHByaW50X3doYXQ7CiAKLSAgICAgIHByaW50X3N0 YWNrX2ZyYW1lIChnZXRfc2VsZWN0ZWRfZnJhbWUgKE5VTEwpLCAxLCBwcmlu dF93aGF0KTsKKwkgIC8qIE5PVEU6IGluIGltaXRhdGlvbiBvZiB0aGUgc3Rl cCBjb21tYW5kLCB0cnkgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgIHdoZXRo ZXIgd2UgaGF2ZSBtYWRlIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBmdW5jdGlv biB0bworICAgICAgICAgICBhbm90aGVyLiAgSWYgc28sIHdlJ2xsIHByaW50 IHRoZSAic3RhY2sgZnJhbWUiIChpZS4gdGhlIG5ldworICAgICAgICAgICBm dW5jdGlvbiBhbmQgaXQncyBhcmd1bWVudHMpIC0tIG90aGVyd2lzZSB3ZSds bCBqdXN0IHNob3cgdGhlCisgICAgICAgICAgIG5ldyBzb3VyY2UgbGluZS4g ICovCisKKwkgIGlmIChmcmFtZV9pZF9lcSAob2xkX2ZyYW1lX2lkLAorCQkJ ICAgZ2V0X2ZyYW1lX2lkIChnZXRfY3VycmVudF9mcmFtZSAoKSkpKQorCSAg ICBwcmludF93aGF0ID0gU1JDX0xJTkU7CisJICBlbHNlCisJICAgIHByaW50 X3doYXQgPSBTUkNfQU5EX0xPQzsKKworCSAgcHJpbnRfc3RhY2tfZnJhbWUg KGdldF9zZWxlY3RlZF9mcmFtZSAoTlVMTCksIDEsIHByaW50X3doYXQpOwor CX0KICAgICAgIGRvX2Rpc3BsYXlzICgpOwogICAgIH0KIH0KQEAgLTI4ODUs NiArMjg5OCw5IEBAIHRyYWNlX2R1bXBfY29tbWFuZCAoY2hhciAqYXJncywg aW50IGZyb20KICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgaWYgKHRhcmdl dF90cmFjZV9kdW1wIChmcm9tX3R0eSkpCisgICAgcmV0dXJuOworCiAgIHQg PSBnZXRfdHJhY2Vwb2ludCAodHJhY2Vwb2ludF9udW1iZXIpOwogCiAgIGlm ICh0ID09IE5VTEwpCg== --bcaec54c47a20ba18d04d1588fde--