From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 91169 invoked by alias); 8 May 2015 22:13:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 91150 invoked by uid 89); 8 May 2015 22:13:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.7 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-wi0-f173.google.com Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com) (209.85.212.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 08 May 2015 22:13:30 +0000 Received: by widdi4 with SMTP id di4so45045065wid.0; Fri, 08 May 2015 15:13:26 -0700 (PDT) X-Received: by 10.180.88.169 with SMTP id bh9mr1727204wib.6.1431123206725; Fri, 08 May 2015 15:13:26 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.103.70 with HTTP; Fri, 8 May 2015 15:12:45 -0700 (PDT) In-Reply-To: <86h9rogn3z.fsf@redhat.com> References: <86h9rogn3z.fsf@redhat.com> From: =?UTF-8?B?TWFudWVsIEzDs3Blei1JYsOhw7Fleg==?= Date: Fri, 08 May 2015 22:13:00 -0000 Message-ID: Subject: Re: [PATCH diagnostics/fortran] Handle two locations for the same diagnostic. Convert all gfc_warning_1 and gfc_notify_std_1 calls To: Dodji Seketeli Cc: Gcc Patch List , Tobias Burnus , "fortran@gcc.gnu.org List" Content-Type: multipart/mixed; boundary=f46d041825705ee6a00515995608 X-SW-Source: 2015-05/txt/msg00772.txt.bz2 --f46d041825705ee6a00515995608 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-length: 4087 Hi Dodji, Thanks for the review. I followed all your suggestions. For the accessor functions, I was not sure what type you would prefer, so I implemented them as C++ methods and made use of 'private' to be sure they are the only way to access the locations array. If you want me to change it, just tell me what you prefer. I also replaced diagnostic_same_locus with diagnostic_same_line. Bootstrapped & regression tested on x86_64-linux-gnu. OK? Manuel. gcc/fortran/ChangeLog: 2015-05-08 Manuel L=C3=B3pez-Ib=C3=A1=C3=B1ez PR fortran/44054 Replace all calls to gfc_notify_std_1 with gfc_notify_std and gfc_warning_1 with gfc_warning. * decl.c (gfc_verify_c_interop_param): Here. * resolve.c (resolve_branch): Here. (resolve_fl_derived): Here. * dependency.c (gfc_check_argument_var_dependency): * scanner.c (preprocessor_line): Use gfc_warning_now_at. Fix line counter and locations before and after warning. * gfortran.h (gfc_warning_1, gfc_warning_now_1, gfc_notify_std_1): Delete. (gfc_warning_now_at): Declare. * error.c (gfc_warning_1): Delete. (gfc_notify_std_1): Delete. (gfc_warning_now_1): Delete. (gfc_format_decoder): Handle two locations. (gfc_diagnostic_build_prefix): Rename as gfc_diagnostic_build_kind_prefix. (gfc_diagnostic_build_locus_prefix): Take an expanded_location instead of diagnostic_info. (gfc_diagnostic_build_locus_prefix): Add overload that takes two expanded_location. (gfc_diagnostic_starter): Handle two locations. (gfc_warning_now_at): New. (gfc_diagnostics_init): Initialize caret_chars array. (gfc_diagnostics_finish): Reset caret_chars array to default. gcc/cp/ChangeLog: 2015-05-08 Manuel L=C3=B3pez-Ib=C3=A1=C3=B1ez * error.c (cp_diagnostic_starter): Use diagnostic_location function. (cp_print_error_function): Likewise. (cp_printer): Replace locus pointer with accessor function. gcc/c/ChangeLog: 2015-05-08 Manuel L=C3=B3pez-Ib=C3=A1=C3=B1ez * c-objc-common.c (c_tree_printer): Replace locus pointer with accessor function. gcc/ChangeLog: 2015-05-08 Manuel L=C3=B3pez-Ib=C3=A1=C3=B1ez * tree-pretty-print.c (percent_K_format): Replace locus pointer with accessor function. * tree-diagnostic.c (diagnostic_report_current_function): Use diagnostic_location function. (maybe_unwind_expanded_macro_loc): Likewise. (virt_loc_aware_diagnostic_finalizer): Likewise. (default_tree_printer): Replace locus pointer with accessor function. * diagnostic.c (diagnostic_initialize): Initialize caret_chars array. (diagnostic_set_info_translated): Initialize second location. (diagnostic_build_prefix): Use CARET_LINE_MARGIN. (diagnostic_show_locus): Handle two locations. Call diagnostic_print_caret_line. (diagnostic_print_caret_line): New. (default_diagnostic_starter): Use diagnostic_location function. (diagnostic_report_diagnostic): Use diagnostic_location function. (verbatim): Do not set text.locus. * diagnostic.h (struct diagnostic_info): Remove location field. (struct diagnostic_context): Make caret_chars an array of two. (diagnostic_location): New inline. (diagnostic_expand_location): Handle two locations. (diagnostic_same_line): New inline. (diagnostic_print_caret_line): Declare. (CARET_LINE_MARGIN): New constant. * pretty-print.c (pp_printf): Do not set text.locus. (pp_verbatim): Do not set text.locus. * pretty-print.h (MAX_LOCATIONS_PER_MESSAGE): New constant. (struct text_info): Replace locus pointer with locations array. Add accessor functions. gcc/testsuite/ChangeLog: 2015-05-08 Manuel L=C3=B3pez-Ib=C3=A1=C3=B1ez PR fortran/44054 * lib/gfortran-dg.exp: Update regex to handle two locations for the same diagnostic without caret. * gfortran.dg/badline.f: Test also that line numbers are correct before and after "left but not entered" warning. --f46d041825705ee6a00515995608 Content-Type: text/plain; charset=US-ASCII; name="gfortran-mloc3-1.diff" Content-Disposition: attachment; filename="gfortran-mloc3-1.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i9g5qppo0 Content-length: 59471 SW5kZXg6IGdjYy9jL2Mtb2JqYy1jb21tb24uYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvYy9jLW9iamMtY29tbW9uLmMJKHJldmlzaW9uIDIy MjkwMykKKysrIGdjYy9jL2Mtb2JqYy1jb21tb24uYwkod29ya2luZyBjb3B5 KQpAQCAtMTA2LDEyICsxMDYsMTIgQEAgY190cmVlX3ByaW50ZXIgKHByZXR0 eV9wcmludGVyICpwcCwgdGV4dAogICAgIH0KIAogICBpZiAoKnNwZWMgIT0g J3YnKQogICAgIHsKICAgICAgIHQgPSB2YV9hcmcgKCp0ZXh0LT5hcmdzX3B0 ciwgdHJlZSk7Ci0gICAgICBpZiAoc2V0X2xvY3VzICYmIHRleHQtPmxvY3Vz KQotCSp0ZXh0LT5sb2N1cyA9IERFQ0xfU09VUkNFX0xPQ0FUSU9OICh0KTsK KyAgICAgIGlmIChzZXRfbG9jdXMpCisJdGV4dC0+c2V0X2xvY2F0aW9uICgw KSA9IERFQ0xfU09VUkNFX0xPQ0FUSU9OICh0KTsKICAgICB9CiAKICAgc3dp dGNoICgqc3BlYykKICAgICB7CiAgICAgY2FzZSAnRCc6CkluZGV4OiBnY2Mv dHJlZS1wcmV0dHktcHJpbnQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvdHJlZS1wcmV0dHktcHJpbnQuYwkocmV2aXNpb24gMjIyOTAzKQor KysgZ2NjL3RyZWUtcHJldHR5LXByaW50LmMJKHdvcmtpbmcgY29weSkKQEAg LTM2MTgsMTIgKzM2MTgsMTEgQEAgbmV3bGluZV9hbmRfaW5kZW50IChwcmV0 dHlfcHJpbnRlciAqcHAsIAogCiB2b2lkCiBwZXJjZW50X0tfZm9ybWF0ICh0 ZXh0X2luZm8gKnRleHQpCiB7CiAgIHRyZWUgdCA9IHZhX2FyZyAoKnRleHQt PmFyZ3NfcHRyLCB0cmVlKSwgYmxvY2s7Ci0gIGdjY19hc3NlcnQgKHRleHQt PmxvY3VzICE9IE5VTEwpOwotICAqdGV4dC0+bG9jdXMgPSBFWFBSX0xPQ0FU SU9OICh0KTsKKyAgdGV4dC0+c2V0X2xvY2F0aW9uICgwKSA9IEVYUFJfTE9D QVRJT04gKHQpOwogICBnY2NfYXNzZXJ0IChwcF90aV9hYnN0cmFjdF9vcmln aW4gKHRleHQpICE9IE5VTEwpOwogICBibG9jayA9IFRSRUVfQkxPQ0sgKHQp OwogICAqcHBfdGlfYWJzdHJhY3Rfb3JpZ2luICh0ZXh0KSA9IE5VTEw7CiAK ICAgaWYgKGluX2x0b19wKQpJbmRleDogZ2NjL3RyZWUtZGlhZ25vc3RpYy5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90cmVlLWRpYWdub3N0 aWMuYwkocmV2aXNpb24gMjIyOTAzKQorKysgZ2NjL3RyZWUtZGlhZ25vc3Rp Yy5jCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMTEgQEAgYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIAogICAgdGhhdCBj YXVzZWQgYW4gZXJyb3IuICBDYWxsZWQgZnJvbSBhbGwgZXJyb3IgYW5kIHdh cm5pbmcgZnVuY3Rpb25zLiAgKi8KIHZvaWQKIGRpYWdub3N0aWNfcmVwb3J0 X2N1cnJlbnRfZnVuY3Rpb24gKGRpYWdub3N0aWNfY29udGV4dCAqY29udGV4 dCwKIAkJCQkgICAgZGlhZ25vc3RpY19pbmZvICpkaWFnbm9zdGljKQogewot ICBkaWFnbm9zdGljX3JlcG9ydF9jdXJyZW50X21vZHVsZSAoY29udGV4dCwg ZGlhZ25vc3RpYy0+bG9jYXRpb24pOworICBkaWFnbm9zdGljX3JlcG9ydF9j dXJyZW50X21vZHVsZSAoY29udGV4dCwgZGlhZ25vc3RpY19sb2NhdGlvbiAo ZGlhZ25vc3RpYykpOwogICBsYW5nX2hvb2tzLnByaW50X2Vycm9yX2Z1bmN0 aW9uIChjb250ZXh0LCBMT0NBVElPTl9GSUxFIChpbnB1dF9sb2NhdGlvbiks CiAJCQkJICAgZGlhZ25vc3RpYyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0x NTEsMTEgKzE1MSwxMSBAQCBtYXliZV91bndpbmRfZXhwYW5kZWRfbWFjcm9f bG9jIChkaWFnbm9zCiAKICAgLyogV2FsayBMT0NfVkVDIGFuZCBwcmludCB0 aGUgbWFjcm8gZXhwYW5zaW9uIHRyYWNlLCB1bmxlc3MgdGhlCiAgICAgIGZp cnN0IG1hY3JvIHdoaWNoIGV4cGFuc2lvbiB0cmlnZ2VyZWQgdGhpcyB0cmFj ZSB3YXMgZXhwYW5kZWQKICAgICAgaW5zaWRlIGEgc3lzdGVtIGhlYWRlci4g ICovCiAgIGludCBzYXZlZF9sb2NhdGlvbl9saW5lID0KLSAgICBleHBhbmRf bG9jYXRpb25fdG9fc3BlbGxpbmdfcG9pbnQgKGRpYWdub3N0aWMtPmxvY2F0 aW9uKS5saW5lOworICAgIGV4cGFuZF9sb2NhdGlvbl90b19zcGVsbGluZ19w b2ludCAoZGlhZ25vc3RpY19sb2NhdGlvbiAoZGlhZ25vc3RpYykpLmxpbmU7 CiAKICAgaWYgKCFMSU5FTUFQX1NZU1AgKG1hcCkpCiAgICAgRk9SX0VBQ0hf VkVDX0VMVCAobG9jX3ZlYywgaXgsIGl0ZXIpCiAgICAgICB7CiAJLyogU29t ZXRpbWVzLCBpbiB0aGUgdW53b3VuZCBtYWNybyBleHBhbnNpb24gdHJhY2Us IHdlIHdhbnQgdG8KQEAgLTI1MCwxMSArMjUwLDExIEBAIG1heWJlX3Vud2lu ZF9leHBhbmRlZF9tYWNyb19sb2MgKGRpYWdub3MKIHZvaWQKIHZpcnRfbG9j X2F3YXJlX2RpYWdub3N0aWNfZmluYWxpemVyIChkaWFnbm9zdGljX2NvbnRl eHQgKmNvbnRleHQsCiAJCQkJICAgICBkaWFnbm9zdGljX2luZm8gKmRpYWdu b3N0aWMpCiB7CiAgIG1heWJlX3Vud2luZF9leHBhbmRlZF9tYWNyb19sb2Mg KGNvbnRleHQsIGRpYWdub3N0aWMsCi0JCQkJICAgZGlhZ25vc3RpYy0+bG9j YXRpb24pOworCQkJCSAgIGRpYWdub3N0aWNfbG9jYXRpb24gKGRpYWdub3N0 aWMpKTsKIH0KIAogLyogRGVmYXVsdCB0cmVlIHByaW50ZXIuICAgSGFuZGxl cyBkZWNsYXJhdGlvbnMgb25seS4gICovCiBzdGF0aWMgYm9vbAogZGVmYXVs dF90cmVlX3ByaW50ZXIgKHByZXR0eV9wcmludGVyICpwcCwgdGV4dF9pbmZv ICp0ZXh0LCBjb25zdCBjaGFyICpzcGVjLApAQCAtMjk0LDEyICsyOTQsMTIg QEAgZGVmYXVsdF90cmVlX3ByaW50ZXIgKHByZXR0eV9wcmludGVyICpwcAog CiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK LSAgaWYgKHNldF9sb2N1cyAmJiB0ZXh0LT5sb2N1cykKLSAgICAqdGV4dC0+ bG9jdXMgPSBERUNMX1NPVVJDRV9MT0NBVElPTiAodCk7CisgIGlmIChzZXRf bG9jdXMpCisgICAgdGV4dC0+c2V0X2xvY2F0aW9uICgwKSA9IERFQ0xfU09V UkNFX0xPQ0FUSU9OICh0KTsKIAogICBpZiAoREVDTF9QICh0KSkKICAgICB7 CiAgICAgICBjb25zdCBjaGFyICpuID0gREVDTF9OQU1FICh0KQogICAgICAg ICA/IGlkZW50aWZpZXJfdG9fbG9jYWxlIChsYW5nX2hvb2tzLmRlY2xfcHJp bnRhYmxlX25hbWUgKHQsIDIpKQpJbmRleDogZ2NjL2RpYWdub3N0aWMuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvZGlhZ25vc3RpYy5jCShy ZXZpc2lvbiAyMjI5MDMpCisrKyBnY2MvZGlhZ25vc3RpYy5jCSh3b3JraW5n IGNvcHkpCkBAIC0xNDQsMTEgKzE0NCwxMiBAQCBkaWFnbm9zdGljX2luaXRp YWxpemUgKGRpYWdub3N0aWNfY29udGV4CiAgIGNvbnRleHQtPmNsYXNzaWZ5 X2RpYWdub3N0aWMgPSBYTkVXVkVDIChkaWFnbm9zdGljX3QsIG5fb3B0cyk7 CiAgIGZvciAoaSA9IDA7IGkgPCBuX29wdHM7IGkrKykKICAgICBjb250ZXh0 LT5jbGFzc2lmeV9kaWFnbm9zdGljW2ldID0gREtfVU5TUEVDSUZJRUQ7CiAg IGNvbnRleHQtPnNob3dfY2FyZXQgPSBmYWxzZTsKICAgZGlhZ25vc3RpY19z ZXRfY2FyZXRfbWF4X3dpZHRoIChjb250ZXh0LCBwcF9saW5lX2N1dG9mZiAo Y29udGV4dC0+cHJpbnRlcikpOwotICBjb250ZXh0LT5jYXJldF9jaGFyID0g J14nOworICBmb3IgKGkgPSAwOyBpIDwgTUFYX0xPQ0FUSU9OU19QRVJfTUVT U0FHRTsgaSsrKQorICAgIGNvbnRleHQtPmNhcmV0X2NoYXJzW2ldID0gJ14n OwogICBjb250ZXh0LT5zaG93X29wdGlvbl9yZXF1ZXN0ZWQgPSBmYWxzZTsK ICAgY29udGV4dC0+YWJvcnRfb25fZXJyb3IgPSBmYWxzZTsKICAgY29udGV4 dC0+c2hvd19jb2x1bW4gPSBmYWxzZTsKICAgY29udGV4dC0+cGVkYW50aWNf ZXJyb3JzID0gZmFsc2U7CiAgIGNvbnRleHQtPnBlcm1pc3NpdmUgPSBmYWxz ZTsKQEAgLTIzOSwxMSArMjQwLDEzIEBAIGRpYWdub3N0aWNfc2V0X2luZm9f dHJhbnNsYXRlZCAoZGlhZ25vc3QKIAkJCQlkaWFnbm9zdGljX3Qga2luZCkK IHsKICAgZGlhZ25vc3RpYy0+bWVzc2FnZS5lcnJfbm8gPSBlcnJubzsKICAg ZGlhZ25vc3RpYy0+bWVzc2FnZS5hcmdzX3B0ciA9IGFyZ3M7CiAgIGRpYWdu b3N0aWMtPm1lc3NhZ2UuZm9ybWF0X3NwZWMgPSBtc2c7Ci0gIGRpYWdub3N0 aWMtPmxvY2F0aW9uID0gbG9jYXRpb247CisgIGRpYWdub3N0aWMtPm1lc3Nh Z2Uuc2V0X2xvY2F0aW9uICgwKSA9IGxvY2F0aW9uOworICBmb3IgKGludCBp ID0gMTsgaSA8IE1BWF9MT0NBVElPTlNfUEVSX01FU1NBR0U7IGkrKykKKyAg ICBkaWFnbm9zdGljLT5tZXNzYWdlLnNldF9sb2NhdGlvbiAoaSkgPSBVTktO T1dOX0xPQ0FUSU9OOwogICBkaWFnbm9zdGljLT5vdmVycmlkZV9jb2x1bW4g PSAwOwogICBkaWFnbm9zdGljLT5raW5kID0ga2luZDsKICAgZGlhZ25vc3Rp Yy0+b3B0aW9uX2luZGV4ID0gMDsKIH0KIApAQCAtMzA3LDE4ICszMTAsMTgg QEAgZGlhZ25vc3RpY19idWlsZF9wcmVmaXggKGRpYWdub3N0aWNfY29udAog fQogCiAvKiBJZiBMSU5FIGlzIGxvbmdlciB0aGFuIE1BWF9XSURUSCwgYW5k IENPTFVNTiBpcyBub3Qgc21hbGxlciB0aGFuCiAgICBNQVhfV0lEVEggYnkg c29tZSBtYXJnaW4sIHRoZW4gYWRqdXN0IHRoZSBzdGFydCBvZiB0aGUgbGlu ZSBzdWNoCiAgICB0aGF0IHRoZSBDT0xVTU4gaXMgc21hbGxlciB0aGFuIE1B WF9XSURUSCBtaW51cyB0aGUgbWFyZ2luLiAgVGhlCi0gICBtYXJnaW4gaXMg ZWl0aGVyIDEwIGNoYXJhY3RlcnMgb3IgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl biB0aGUgY29sdW1uCi0gICBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSwg d2hhdGV2ZXIgaXMgc21hbGxlci4gIFRoZSBsZW5ndGggb2YKLSAgIExJTkUg aXMgZ2l2ZW4gYnkgTElORV9XSURUSC4gICovCisgICBtYXJnaW4gaXMgZWl0 aGVyIENBUkVUX0xJTkVfTUFSR0lOIGNoYXJhY3RlcnMgb3IgdGhlIGRpZmZl cmVuY2UgCisgICBiZXR3ZWVuIHRoZSBjb2x1bW4gYW5kIHRoZSBsZW5ndGgg b2YgdGhlIGxpbmUsIHdoYXRldmVyIGlzIHNtYWxsZXIuCisgICBUaGUgbGVu Z3RoIG9mIExJTkUgaXMgZ2l2ZW4gYnkgTElORV9XSURUSC4gICovCiBzdGF0 aWMgY29uc3QgY2hhciAqCiBhZGp1c3RfbGluZSAoY29uc3QgY2hhciAqbGlu ZSwgaW50IGxpbmVfd2lkdGgsCiAJICAgICBpbnQgbWF4X3dpZHRoLCBpbnQg KmNvbHVtbl9wKQogewotICBpbnQgcmlnaHRfbWFyZ2luID0gMTA7CisgIGlu dCByaWdodF9tYXJnaW4gPSBDQVJFVF9MSU5FX01BUkdJTjsKICAgaW50IGNv bHVtbiA9ICpjb2x1bW5fcDsKIAogICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChs aW5lX3dpZHRoID49IGNvbHVtbik7CiAgIHJpZ2h0X21hcmdpbiA9IE1JTiAo bGluZV93aWR0aCAtIGNvbHVtbiwgcmlnaHRfbWFyZ2luKTsKICAgcmlnaHRf bWFyZ2luID0gbWF4X3dpZHRoIC0gcmlnaHRfbWFyZ2luOwpAQCAtMzI5LDM5 ICszMzIsNzIgQEAgYWRqdXN0X2xpbmUgKGNvbnN0IGNoYXIgKmxpbmUsIGlu dCBsaW5lXwogICAgIH0KICAgcmV0dXJuIGxpbmU7CiB9CiAKIC8qIFByaW50 IHRoZSBwaHlzaWNhbCBzb3VyY2UgbGluZSBjb3JyZXNwb25kaW5nIHRvIHRo ZSBsb2NhdGlvbiBvZgotICAgdGhpcyBkaWFnbm9zdGljLCBhbmQgYSBjYXJl dCBpbmRpY2F0aW5nIHRoZSBwcmVjaXNlIGNvbHVtbi4gICovCisgICB0aGlz IGRpYWdub3N0aWMsIGFuZCBhIGNhcmV0IGluZGljYXRpbmcgdGhlIHByZWNp c2UgY29sdW1uLiAgVGhpcworICAgZnVuY3Rpb24gb25seSBwcmludHMgdHdv IGNhcmV0IGNoYXJhY3RlcnMgaWYgdGhlIHR3byBsb2NhdGlvbnMKKyAgIGdp dmVuIGJ5IERJQUdOT1NUSUMgYXJlIG9uIHRoZSBzYW1lIGxpbmUgYWNjb3Jk aW5nIHRvCisgICBkaWFnbm9zdGljX3NhbWVfbGluZSgpLiAgKi8KIHZvaWQK IGRpYWdub3N0aWNfc2hvd19sb2N1cyAoZGlhZ25vc3RpY19jb250ZXh0ICog Y29udGV4dCwKIAkJICAgICAgIGNvbnN0IGRpYWdub3N0aWNfaW5mbyAqZGlh Z25vc3RpYykKIHsKLSAgY29uc3QgY2hhciAqbGluZTsKLSAgaW50IGxpbmVf d2lkdGg7Ci0gIGNoYXIgKmJ1ZmZlcjsKLSAgZXhwYW5kZWRfbG9jYXRpb24g czsKLSAgaW50IG1heF93aWR0aDsKLSAgY29uc3QgY2hhciAqc2F2ZWRfcHJl Zml4OwotICBjb25zdCBjaGFyICpjYXJldF9jcywgKmNhcmV0X2NlOwotCiAg IGlmICghY29udGV4dC0+c2hvd19jYXJldAotICAgICAgfHwgZGlhZ25vc3Rp Yy0+bG9jYXRpb24gPD0gQlVJTFRJTlNfTE9DQVRJT04KLSAgICAgIHx8IGRp YWdub3N0aWMtPmxvY2F0aW9uID09IGNvbnRleHQtPmxhc3RfbG9jYXRpb24p CisgICAgICB8fCBkaWFnbm9zdGljX2xvY2F0aW9uIChkaWFnbm9zdGljLCAw KSA8PSBCVUlMVElOU19MT0NBVElPTgorICAgICAgfHwgZGlhZ25vc3RpY19s b2NhdGlvbiAoZGlhZ25vc3RpYywgMCkgPT0gY29udGV4dC0+bGFzdF9sb2Nh dGlvbikKICAgICByZXR1cm47CiAKLSAgY29udGV4dC0+bGFzdF9sb2NhdGlv biA9IGRpYWdub3N0aWMtPmxvY2F0aW9uOwotICBzID0gZGlhZ25vc3RpY19l eHBhbmRfbG9jYXRpb24gKGRpYWdub3N0aWMpOwotICBsaW5lID0gbG9jYXRp b25fZ2V0X3NvdXJjZV9saW5lIChzLCAmbGluZV93aWR0aCk7Ci0gIGlmIChs aW5lID09IE5VTEwgfHwgcy5jb2x1bW4gPiBsaW5lX3dpZHRoKQorICBjb250 ZXh0LT5sYXN0X2xvY2F0aW9uID0gZGlhZ25vc3RpY19sb2NhdGlvbiAoZGlh Z25vc3RpYywgMCk7CisgIGV4cGFuZGVkX2xvY2F0aW9uIHMwID0gZGlhZ25v c3RpY19leHBhbmRfbG9jYXRpb24gKGRpYWdub3N0aWMsIDApOworICBleHBh bmRlZF9sb2NhdGlvbiBzMSA9IHsgfTsgCisgIC8qIFplcm8taW5pdGlhbGl6 ZWQuIFRoaXMgaXMgY2hlY2tlZCBsYXRlciBieSBkaWFnbm9zdGljX3ByaW50 X2NhcmV0X2xpbmUuICAqLworCisgIGlmIChkaWFnbm9zdGljX2xvY2F0aW9u IChkaWFnbm9zdGljLCAxKSA+IEJVSUxUSU5TX0xPQ0FUSU9OKQorICAgIHMx ID0gZGlhZ25vc3RpY19leHBhbmRfbG9jYXRpb24gKGRpYWdub3N0aWMsIDEp OworCisgIGRpYWdub3N0aWNfcHJpbnRfY2FyZXRfbGluZSAoY29udGV4dCwg czAsIHMxLAorCQkJICAgICAgIGNvbnRleHQtPmNhcmV0X2NoYXJzWzBdLCBj b250ZXh0LT5jYXJldF9jaGFyc1sxXSk7Cit9CisKKy8qIFByaW50IChwYXJ0 KSBvZiB0aGUgc291cmNlIGxpbmUgZ2l2ZW4gYnkgeGxvYzEgd2l0aCBjYXJl dDEgcG9pbnRpbmcKKyAgIGF0IHRoZSBjb2x1bW4uICBJZiB4bG9jMi5jb2x1 bW4gIT0gMCBhbmQgaXQgZml0cyB3aXRoaW4gdGhlIHNhbWUKKyAgIGxpbmUg YXMgeGxvYzEgYWNjb3JkaW5nIHRvIGRpYWdub3N0aWNfc2FtZV9saW5lICgp LCB0aGVuIGNhcmV0MiBpcworICAgcHJpbnRlZCBhdCB4bG9jMi5jb2x1bS4g IE90aGVyd2lzZSwgdGhlIGNhbGxlciBoYXMgdG8gc2V0IHVwIHRoaW5ncwor ICAgdG8gcHJpbnQgYSBzZWNvbmQgY2FyZXQgbGluZSBmb3IgeGxvYzIuICAq Lwordm9pZAorZGlhZ25vc3RpY19wcmludF9jYXJldF9saW5lIChkaWFnbm9z dGljX2NvbnRleHQgKiBjb250ZXh0LAorCQkJICAgICBleHBhbmRlZF9sb2Nh dGlvbiB4bG9jMSwKKwkJCSAgICAgZXhwYW5kZWRfbG9jYXRpb24geGxvYzIs CisJCQkgICAgIGNoYXIgY2FyZXQxLCBjaGFyIGNhcmV0MikKK3sKKyAgaWYg KCFkaWFnbm9zdGljX3NhbWVfbGluZSAoY29udGV4dCwgeGxvYzEsIHhsb2My KSkKKyAgICAvKiBUaGlzIHdpbGwgbWVhbiBpZ25vcmUgeGxvYzIuICAqLwor ICAgIHhsb2MyLmNvbHVtbiA9IDA7CisgIGVsc2UgaWYgKHhsb2MxLmNvbHVt biA9PSB4bG9jMi5jb2x1bW4pCisgICAgeGxvYzIuY29sdW1uKys7CisgIAor ICBpbnQgY21heCA9IE1BWCAoeGxvYzEuY29sdW1uLCB4bG9jMi5jb2x1bW4p OworICBpbnQgbGluZV93aWR0aDsKKyAgY29uc3QgY2hhciAqbGluZSA9IGxv Y2F0aW9uX2dldF9zb3VyY2VfbGluZSAoeGxvYzEsICZsaW5lX3dpZHRoKTsK KyAgaWYgKGxpbmUgPT0gTlVMTCB8fCBjbWF4ID4gbGluZV93aWR0aCkKICAg ICByZXR1cm47CiAKLSAgbWF4X3dpZHRoID0gY29udGV4dC0+Y2FyZXRfbWF4 X3dpZHRoOwotICBsaW5lID0gYWRqdXN0X2xpbmUgKGxpbmUsIGxpbmVfd2lk dGgsIG1heF93aWR0aCwgJihzLmNvbHVtbikpOworICAvKiBDZW50ZXIgdGhl IGludGVyZXN0aW5nIHBhcnQgb2YgdGhlIHNvdXJjZSBsaW5lIHRvIGZpdCBp bgorICAgICBtYXhfd2lkdGgsIGFuZCBhZGp1c3QgYWxsIGNvbHVtbnMgYWNj b3JkaW5nbHkuICAqLworICBpbnQgbWF4X3dpZHRoID0gY29udGV4dC0+Y2Fy ZXRfbWF4X3dpZHRoOworICBpbnQgb2Zmc2V0ID0gKGludCkgY21heDsKKyAg bGluZSA9IGFkanVzdF9saW5lIChsaW5lLCBsaW5lX3dpZHRoLCBtYXhfd2lk dGgsICZvZmZzZXQpOworICBvZmZzZXQgLT0gY21heDsKKyAgY21heCArPSBv ZmZzZXQ7CisgIHhsb2MxLmNvbHVtbiArPSBvZmZzZXQ7CisgIGlmICh4bG9j Mi5jb2x1bW4pCisgICAgeGxvYzIuY29sdW1uICs9IG9mZnNldDsKIAorICAv KiBQcmludCB0aGUgc291cmNlIGxpbmUuICAqLwogICBwcF9uZXdsaW5lIChj b250ZXh0LT5wcmludGVyKTsKLSAgc2F2ZWRfcHJlZml4ID0gcHBfZ2V0X3By ZWZpeCAoY29udGV4dC0+cHJpbnRlcik7CisgIGNvbnN0IGNoYXIgKnNhdmVk X3ByZWZpeCA9IHBwX2dldF9wcmVmaXggKGNvbnRleHQtPnByaW50ZXIpOwog ICBwcF9zZXRfcHJlZml4IChjb250ZXh0LT5wcmludGVyLCBOVUxMKTsKICAg cHBfc3BhY2UgKGNvbnRleHQtPnByaW50ZXIpOwogICB3aGlsZSAobWF4X3dp ZHRoID4gMCAmJiBsaW5lX3dpZHRoID4gMCkKICAgICB7CiAgICAgICBjaGFy IGMgPSAqbGluZSA9PSAnXHQnID8gJyAnIDogKmxpbmU7CkBAIC0zNzEsMTkg KzQwNywzMiBAQCBkaWFnbm9zdGljX3Nob3dfbG9jdXMgKGRpYWdub3N0aWNf Y29udGV4CiAgICAgICBtYXhfd2lkdGgtLTsKICAgICAgIGxpbmVfd2lkdGgt LTsKICAgICAgIGxpbmUrKzsKICAgICB9CiAgIHBwX25ld2xpbmUgKGNvbnRl eHQtPnByaW50ZXIpOworCisgIC8qIFByaW50IHRoZSBjYXJldCB1bmRlciB0 aGUgbGluZS4gICovCisgIGNvbnN0IGNoYXIgKmNhcmV0X2NzLCAqY2FyZXRf Y2U7CiAgIGNhcmV0X2NzID0gY29sb3JpemVfc3RhcnQgKHBwX3Nob3dfY29s b3IgKGNvbnRleHQtPnByaW50ZXIpLCAiY2FyZXQiKTsKICAgY2FyZXRfY2Ug PSBjb2xvcml6ZV9zdG9wIChwcF9zaG93X2NvbG9yIChjb250ZXh0LT5wcmlu dGVyKSk7CisgIGludCBjbWluID0geGxvYzIuY29sdW1uIAorICAgID8gTUlO ICh4bG9jMS5jb2x1bW4sIHhsb2MyLmNvbHVtbikgOiB4bG9jMS5jb2x1bW47 CisgIGludCBjYXJldF9taW4gPSBjbWluID09IHhsb2MxLmNvbHVtbiA/IGNh cmV0MSA6IGNhcmV0MjsKKyAgaW50IGNhcmV0X21heCA9IGNtaW4gPT0geGxv YzEuY29sdW1uID8gY2FyZXQyIDogY2FyZXQxOworCisgIHBwX3NwYWNlIChj b250ZXh0LT5wcmludGVyKTsKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkg PCBjbWluOyBpKyspCisgICAgcHBfc3BhY2UgKGNvbnRleHQtPnByaW50ZXIp OworICBwcF9wcmludGYgKGNvbnRleHQtPnByaW50ZXIsICIlcyVjJXMiLCBj YXJldF9jcywgY2FyZXRfbWluLCBjYXJldF9jZSk7CiAKLSAgLyogcHBfcHJp bnRmIGRvZXMgbm90IGltcGxlbWVudCAlKmMuICAqLwotICBzaXplX3QgbGVu ID0gcy5jb2x1bW4gKyAzICsgc3RybGVuIChjYXJldF9jcykgKyBzdHJsZW4g KGNhcmV0X2NlKTsKLSAgYnVmZmVyID0gWEFMTE9DQVZFQyAoY2hhciwgbGVu KTsKLSAgc25wcmludGYgKGJ1ZmZlciwgbGVuLCAiJXMgJSpjJXMiLCBjYXJl dF9jcywgcy5jb2x1bW4sIGNvbnRleHQtPmNhcmV0X2NoYXIsCi0JICAgIGNh cmV0X2NlKTsKLSAgcHBfc3RyaW5nIChjb250ZXh0LT5wcmludGVyLCBidWZm ZXIpOworICBpZiAoeGxvYzIuY29sdW1uKQorICAgIHsKKyAgICAgIGZvciAo aSsrOyBpIDwgY21heDsgaSsrKQorCXBwX3NwYWNlIChjb250ZXh0LT5wcmlu dGVyKTsKKyAgICAgIHBwX3ByaW50ZiAoY29udGV4dC0+cHJpbnRlciwgIiVz JWMlcyIsIGNhcmV0X2NzLCBjYXJldF9tYXgsIGNhcmV0X2NlKTsKKyAgICB9 CiAgIHBwX3NldF9wcmVmaXggKGNvbnRleHQtPnByaW50ZXIsIHNhdmVkX3By ZWZpeCk7CiAgIHBwX25lZWRzX25ld2xpbmUgKGNvbnRleHQtPnByaW50ZXIp ID0gdHJ1ZTsKIH0KIAogLyogRnVuY3Rpb25zIGF0IHdoaWNoIHRvIHN0b3Ag dGhlIGJhY2t0cmFjZSBwcmludC4gIEl0J3Mgbm90CkBAIC02MDIsMTEgKzY1 MSwxMSBAQCBkaWFnbm9zdGljX3JlcG9ydF9jdXJyZW50X21vZHVsZSAoZGlh Z25vCiAKIHZvaWQKIGRlZmF1bHRfZGlhZ25vc3RpY19zdGFydGVyIChkaWFn bm9zdGljX2NvbnRleHQgKmNvbnRleHQsCiAJCQkgICAgZGlhZ25vc3RpY19p bmZvICpkaWFnbm9zdGljKQogewotICBkaWFnbm9zdGljX3JlcG9ydF9jdXJy ZW50X21vZHVsZSAoY29udGV4dCwgZGlhZ25vc3RpYy0+bG9jYXRpb24pOwor ICBkaWFnbm9zdGljX3JlcG9ydF9jdXJyZW50X21vZHVsZSAoY29udGV4dCwg ZGlhZ25vc3RpY19sb2NhdGlvbiAoZGlhZ25vc3RpYykpOwogICBwcF9zZXRf cHJlZml4IChjb250ZXh0LT5wcmludGVyLCBkaWFnbm9zdGljX2J1aWxkX3By ZWZpeCAoY29udGV4dCwKIAkJCQkJCQkgICAgZGlhZ25vc3RpYykpOwogfQog CiB2b2lkCkBAIC03MTQsMTEgKzc2MywxMSBAQCBkaWFnbm9zdGljX3BvcF9k aWFnbm9zdGljcyAoZGlhZ25vc3RpY19jCiAKIGJvb2wKIGRpYWdub3N0aWNf cmVwb3J0X2RpYWdub3N0aWMgKGRpYWdub3N0aWNfY29udGV4dCAqY29udGV4 dCwKIAkJCSAgICAgIGRpYWdub3N0aWNfaW5mbyAqZGlhZ25vc3RpYykKIHsK LSAgbG9jYXRpb25fdCBsb2NhdGlvbiA9IGRpYWdub3N0aWMtPmxvY2F0aW9u OworICBsb2NhdGlvbl90IGxvY2F0aW9uID0gZGlhZ25vc3RpY19sb2NhdGlv biAoZGlhZ25vc3RpYyk7CiAgIGRpYWdub3N0aWNfdCBvcmlnX2RpYWdfa2lu ZCA9IGRpYWdub3N0aWMtPmtpbmQ7CiAgIGNvbnN0IGNoYXIgKnNhdmVkX2Zv cm1hdF9zcGVjOwogCiAgIC8qIEdpdmUgcHJlZmVyZW5jZSB0byBiZWluZyBh YmxlIHRvIGluaGliaXQgd2FybmluZ3MsIGJlZm9yZSB0aGV5CiAgICAgIGdl dCByZWNsYXNzaWZpZWQgdG8gc29tZXRoaW5nIGVsc2UuICAqLwpAQCAtODIz LDExICs4NzIsMTIgQEAgZGlhZ25vc3RpY19yZXBvcnRfZGlhZ25vc3RpYyAo ZGlhZ25vc3RpYwogCSBhYm9ydF9vbl9lcnJvci4gICovCiAgICAgICBpZiAo KGRpYWdub3N0aWNfa2luZF9jb3VudCAoY29udGV4dCwgREtfRVJST1IpID4g MAogCSAgIHx8IGRpYWdub3N0aWNfa2luZF9jb3VudCAoY29udGV4dCwgREtf U09SUlkpID4gMCkKIAkgICYmICFjb250ZXh0LT5hYm9ydF9vbl9lcnJvcikK IAl7Ci0JICBleHBhbmRlZF9sb2NhdGlvbiBzID0gZXhwYW5kX2xvY2F0aW9u IChkaWFnbm9zdGljLT5sb2NhdGlvbik7CisJICBleHBhbmRlZF9sb2NhdGlv biBzIAorCSAgICA9IGV4cGFuZF9sb2NhdGlvbiAoZGlhZ25vc3RpY19sb2Nh dGlvbiAoZGlhZ25vc3RpYykpOwogCSAgZm5vdGljZSAoc3RkZXJyLCAiJXM6 JWQ6IGNvbmZ1c2VkIGJ5IGVhcmxpZXIgZXJyb3JzLCBiYWlsaW5nIG91dFxu IiwKIAkJICAgcy5maWxlLCBzLmxpbmUpOwogCSAgZXhpdCAoSUNFX0VYSVRf Q09ERSk7CiAJfQogI2VuZGlmCkBAIC04NTcsMTEgKzkwNywxMCBAQCBkaWFn bm9zdGljX3JlcG9ydF9kaWFnbm9zdGljIChkaWFnbm9zdGljCiAJCQkiWyIs IG9wdGlvbl90ZXh0LCAiXSIsCiAJCQlOVUxMKSk7CiAJICBmcmVlIChvcHRp b25fdGV4dCk7CiAJfQogICAgIH0KLSAgZGlhZ25vc3RpYy0+bWVzc2FnZS5s b2N1cyA9ICZkaWFnbm9zdGljLT5sb2NhdGlvbjsKICAgZGlhZ25vc3RpYy0+ bWVzc2FnZS54X2RhdGEgPSAmZGlhZ25vc3RpYy0+eF9kYXRhOwogICBkaWFn bm9zdGljLT54X2RhdGEgPSBOVUxMOwogICBwcF9mb3JtYXQgKGNvbnRleHQt PnByaW50ZXIsICZkaWFnbm9zdGljLT5tZXNzYWdlKTsKICAgKCpkaWFnbm9z dGljX3N0YXJ0ZXIgKGNvbnRleHQpKSAoY29udGV4dCwgZGlhZ25vc3RpYyk7 CiAgIHBwX291dHB1dF9mb3JtYXR0ZWRfdGV4dCAoY29udGV4dC0+cHJpbnRl cik7CkBAIC05MTgsMTEgKzk2NywxMCBAQCB2ZXJiYXRpbSAoY29uc3QgY2hh ciAqZ21zZ2lkLCAuLi4pCiAKICAgdmFfc3RhcnQgKGFwLCBnbXNnaWQpOwog ICB0ZXh0LmVycl9ubyA9IGVycm5vOwogICB0ZXh0LmFyZ3NfcHRyID0gJmFw OwogICB0ZXh0LmZvcm1hdF9zcGVjID0gXyhnbXNnaWQpOwotICB0ZXh0Lmxv Y3VzID0gTlVMTDsKICAgdGV4dC54X2RhdGEgPSBOVUxMOwogICBwcF9mb3Jt YXRfdmVyYmF0aW0gKGdsb2JhbF9kYy0+cHJpbnRlciwgJnRleHQpOwogICBw cF9uZXdsaW5lX2FuZF9mbHVzaCAoZ2xvYmFsX2RjLT5wcmludGVyKTsKICAg dmFfZW5kIChhcCk7CiB9CkluZGV4OiBnY2MvZGlhZ25vc3RpYy5oCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9kaWFnbm9zdGljLmgJKHJldmlz aW9uIDIyMjkwMykKKysrIGdjYy9kaWFnbm9zdGljLmgJKHdvcmtpbmcgY29w eSkKQEAgLTI3LDEyICsyNywxMyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgCiAvKiBBIGRpYWdub3N0aWMgaXMgZGVzY3Jp YmVkIGJ5IHRoZSBNRVNTQUdFIHRvIHNlbmQsIHRoZSBGSUxFIGFuZCBMSU5F IG9mCiAgICBpdHMgY29udGV4dCBhbmQgaXRzIEtJTkQgKGljZSwgZXJyb3Is IHdhcm5pbmcsIG5vdGUsIC4uLikgIFNlZSBjb21wbGV0ZQogICAgbGlzdCBp biBkaWFnbm9zdGljLmRlZi4gICovCiBzdHJ1Y3QgZGlhZ25vc3RpY19pbmZv CiB7CisgIC8qIFRleHQgdG8gYmUgZm9ybWF0dGVkLiBJdCBhbHNvIGNvbnRh aW5zIHRoZSBsb2NhdGlvbihzKSBmb3IgdGhpcworICAgICBkaWFnbm9zdGlj LiAgKi8KICAgdGV4dF9pbmZvIG1lc3NhZ2U7Ci0gIGxvY2F0aW9uX3QgbG9j YXRpb247CiAgIHVuc2lnbmVkIGludCBvdmVycmlkZV9jb2x1bW47CiAgIC8q IEF1eGlsaWFyeSBkYXRhIGZvciBjbGllbnQuICAqLwogICB2b2lkICp4X2Rh dGE7CiAgIC8qIFRoZSBraW5kIG9mIGRpYWdub3N0aWMgaXQgaXMgYWJvdXQu ICAqLwogICBkaWFnbm9zdGljX3Qga2luZDsKQEAgLTEwMywxMiArMTA0LDEy IEBAIHN0cnVjdCBkaWFnbm9zdGljX2NvbnRleHQKICAgYm9vbCBzaG93X2Nh cmV0OwogCiAgIC8qIE1heGltdW0gd2lkdGggb2YgdGhlIHNvdXJjZSBsaW5l IHByaW50ZWQuICAqLwogICBpbnQgY2FyZXRfbWF4X3dpZHRoOwogCi0gIC8q IENoYXJhY3RlciB1c2VkIGZvciBjYXJldCBkaWFnbm9zdGljcy4gICovCi0g IGNoYXIgY2FyZXRfY2hhcjsKKyAgLyogQ2hhcmFjdGVycyB1c2VkIGZvciBj YXJldCBkaWFnbm9zdGljcy4gICovCisgIGNoYXIgY2FyZXRfY2hhcnNbTUFY X0xPQ0FUSU9OU19QRVJfTUVTU0FHRV07CiAKICAgLyogVHJ1ZSBpZiB3ZSBz aG91bGQgcHJpbnQgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gd2hpY2ggY29u dHJvbHMKICAgICAgZWFjaCBkaWFnbm9zdGljLCBpZiBrbm93bi4gICovCiAg IGJvb2wgc2hvd19vcHRpb25fcmVxdWVzdGVkOwogCkBAIC0yOTgsMjIgKzI5 OSw1NiBAQCB2b2lkIGRpYWdub3N0aWNfYWN0aW9uX2FmdGVyX291dHB1dCAo ZGlhCiAKIHZvaWQgZGlhZ25vc3RpY19maWxlX2NhY2hlX2ZpbmkgKHZvaWQp OwogCiBpbnQgZ2V0X3Rlcm1pbmFsX3dpZHRoICh2b2lkKTsKIAotLyogRXhw YW5kIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpYWdub3N0aWMuIFVzZSB0aGlz IGZ1bmN0aW9uIGZvciBjb25zaXN0ZW5jeS4gKi8KKy8qIFJldHVybiB0aGUg bG9jYXRpb24gYXNzb2NpYXRlZCB0byB0aGlzIGRpYWdub3N0aWMuIFdISUNI IHNwZWNpZmllcworICAgd2hpY2ggbG9jYXRpb24uIEJ5IGRlZmF1bHQsIGV4 cGFuZCB0aGUgZmlyc3Qgb25lLiAgKi8KKworc3RhdGljIGlubGluZSBsb2Nh dGlvbl90CitkaWFnbm9zdGljX2xvY2F0aW9uIChjb25zdCBkaWFnbm9zdGlj X2luZm8gKiBkaWFnbm9zdGljLCBpbnQgd2hpY2ggPSAwKQoreworICByZXR1 cm4gZGlhZ25vc3RpYy0+bWVzc2FnZS5nZXRfbG9jYXRpb24gKHdoaWNoKTsK K30KKworLyogRXhwYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpYWdub3N0 aWMuIFVzZSB0aGlzIGZ1bmN0aW9uIGZvciBjb25zaXN0ZW5jeS4KKyAgIFdI SUNIIHNwZWNpZmllcyB3aGljaCBsb2NhdGlvbi4gQnkgZGVmYXVsdCwgZXhw YW5kIHRoZSBmaXJzdCBvbmUuICAqLwogCiBzdGF0aWMgaW5saW5lIGV4cGFu ZGVkX2xvY2F0aW9uCi1kaWFnbm9zdGljX2V4cGFuZF9sb2NhdGlvbiAoY29u c3QgZGlhZ25vc3RpY19pbmZvICogZGlhZ25vc3RpYykKK2RpYWdub3N0aWNf ZXhwYW5kX2xvY2F0aW9uIChjb25zdCBkaWFnbm9zdGljX2luZm8gKiBkaWFn bm9zdGljLCBpbnQgd2hpY2ggPSAwKQogewogICBleHBhbmRlZF9sb2NhdGlv biBzCi0gICAgPSBleHBhbmRfbG9jYXRpb25fdG9fc3BlbGxpbmdfcG9pbnQg KGRpYWdub3N0aWMtPmxvY2F0aW9uKTsKLSAgaWYgKGRpYWdub3N0aWMtPm92 ZXJyaWRlX2NvbHVtbikKKyAgICA9IGV4cGFuZF9sb2NhdGlvbl90b19zcGVs bGluZ19wb2ludCAoZGlhZ25vc3RpY19sb2NhdGlvbiAoZGlhZ25vc3RpYywK KwkJCQkJCQkgICAgICB3aGljaCkpOworICBpZiAod2hpY2ggPT0gMCAmJiBk aWFnbm9zdGljLT5vdmVycmlkZV9jb2x1bW4pCiAgICAgcy5jb2x1bW4gPSBk aWFnbm9zdGljLT5vdmVycmlkZV9jb2x1bW47CiAgIHJldHVybiBzOwogfQog CisvKiBUaGlzIGlzIHNvbWVob3cgdGhlIHJpZ2h0LXNpZGUgbWFyZ2luIG9m IGEgY2FyZXQgbGluZSwgdGhhdCBpcywgd2UKKyAgIHByaW50IGF0IGxlYXN0 IHRoZXNlIG1hbnkgY2hhcmFjdGVycyBhZnRlciB0aGUgcG9zaXRpb24gcG9p bnRlZCBhdAorICAgYnkgdGhlIGNhcmV0LiAgKi8KKyNkZWZpbmUgQ0FSRVRf TElORV9NQVJHSU4gMTAKKworLyogUmV0dXJuIHRydWUgaWYgdGhlIHR3byBs b2NhdGlvbnMgY2FuIGJlIHJlcHJlc2VudGVkIHdpdGhpbiB0aGUgc2FtZQor ICAgY2FyZXQgbGluZS4gIFRoaXMgaXMgdXNlZCB0byBidWlsZCBhIHByZWZp eCBhbmQgYWxzbyB0byBkZXRlcm1pbmUKKyAgIHdoZXRoZXIgdG8gcHJpbnQg b25lIG9yIHR3byBjYXJldCBsaW5lcy4gICovCisKK3N0YXRpYyBpbmxpbmUg Ym9vbAorZGlhZ25vc3RpY19zYW1lX2xpbmUgKGNvbnN0IGRpYWdub3N0aWNf Y29udGV4dCAqY29udGV4dCwKKwkJICAgICAgIGV4cGFuZGVkX2xvY2F0aW9u IHMxLCBleHBhbmRlZF9sb2NhdGlvbiBzMikKK3sKKyAgcmV0dXJuIHMyLmNv bHVtbiAmJiBzMS5saW5lID09IHMyLmxpbmUgCisgICAgJiYgY29udGV4dC0+ Y2FyZXRfbWF4X3dpZHRoIC0gQ0FSRVRfTElORV9NQVJHSU4gPiBhYnMgKHMx LmNvbHVtbiAtIHMyLmNvbHVtbik7Cit9CisKK3ZvaWQKK2RpYWdub3N0aWNf cHJpbnRfY2FyZXRfbGluZSAoZGlhZ25vc3RpY19jb250ZXh0ICogY29udGV4 dCwKKwkJCSAgICAgZXhwYW5kZWRfbG9jYXRpb24geGxvYzEsCisJCQkgICAg IGV4cGFuZGVkX2xvY2F0aW9uIHhsb2MyLAorCQkJICAgICBjaGFyIGNhcmV0 MSwgY2hhciBjYXJldDIpOworCiAvKiBQdXJlIHRleHQgZm9ybWF0dGluZyBz dXBwb3J0IGZ1bmN0aW9ucy4gICovCiBleHRlcm4gY2hhciAqZmlsZV9uYW1l X2FzX3ByZWZpeCAoZGlhZ25vc3RpY19jb250ZXh0ICosIGNvbnN0IGNoYXIg Kik7CiAKIGV4dGVybiBjaGFyICpidWlsZF9tZXNzYWdlX3N0cmluZyAoY29u c3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9QUklOVEZfMTsKIApJbmRleDog Z2NjL3ByZXR0eS1wcmludC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy9wcmV0dHktcHJpbnQuYwkocmV2aXNpb24gMjIyOTAzKQorKysgZ2Nj L3ByZXR0eS1wcmludC5jCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsMTEgKzg1 MSwxMCBAQCBwcF9wcmludGYgKHByZXR0eV9wcmludGVyICpwcCwgY29uc3Qg Y2hhCiAKICAgdmFfc3RhcnQgKGFwLCBtc2cpOwogICB0ZXh0LmVycl9ubyA9 IGVycm5vOwogICB0ZXh0LmFyZ3NfcHRyID0gJmFwOwogICB0ZXh0LmZvcm1h dF9zcGVjID0gbXNnOwotICB0ZXh0LmxvY3VzID0gTlVMTDsKICAgcHBfZm9y bWF0IChwcCwgJnRleHQpOwogICBwcF9vdXRwdXRfZm9ybWF0dGVkX3RleHQg KHBwKTsKICAgdmFfZW5kIChhcCk7CiB9CiAKQEAgLTg2OSwxMSArODY4LDEw IEBAIHBwX3ZlcmJhdGltIChwcmV0dHlfcHJpbnRlciAqcHAsIGNvbnN0IGMK IAogICB2YV9zdGFydCAoYXAsIG1zZyk7CiAgIHRleHQuZXJyX25vID0gZXJy bm87CiAgIHRleHQuYXJnc19wdHIgPSAmYXA7CiAgIHRleHQuZm9ybWF0X3Nw ZWMgPSBtc2c7Ci0gIHRleHQubG9jdXMgPSBOVUxMOwogICBwcF9mb3JtYXRf dmVyYmF0aW0gKHBwLCAmdGV4dCk7CiAgIHZhX2VuZCAoYXApOwogfQogCiAK SW5kZXg6IGdjYy9wcmV0dHktcHJpbnQuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2MvcHJldHR5LXByaW50LmgJKHJldmlzaW9uIDIyMjkwMykK KysrIGdjYy9wcmV0dHktcHJpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs MTkgKzI2LDM5IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09Q WUlORzMuICAKICNpbmNsdWRlICJ3aWRlLWludC1wcmludC5oIgogCiAvKiBN YXhpbXVtIG51bWJlciBvZiBmb3JtYXQgc3RyaW5nIGFyZ3VtZW50cy4gICov CiAjZGVmaW5lIFBQX05MX0FSR01BWCAgIDMwCiAKKy8qIE1heGltdW0gbnVt YmVyIG9mIGxvY2F0aW9ucyBhc3NvY2lhdGVkIHRvIGVhY2ggbWVzc2FnZS4g IElmCisgICBsb2NhdGlvbiAnaScgaXMgVU5LTk9XTl9MT0NBVElPTiwgdGhl biBsb2NhdGlvbiAnaSsxJyBpcyBub3QKKyAgIHZhbGlkLiAgKi8KKyNkZWZp bmUgTUFYX0xPQ0FUSU9OU19QRVJfTUVTU0FHRSAyCisKIC8qIFRoZSB0eXBl IG9mIGEgdGV4dCB0byBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIGEgZm9ybWF0 IHNwZWNpZmljYXRpb24KICAgIGFsb25nIHdpdGggYSBsaXN0IG9mIHRoaW5n cy4gICovCiBzdHJ1Y3QgdGV4dF9pbmZvCiB7CitwdWJsaWM6CiAgIGNvbnN0 IGNoYXIgKmZvcm1hdF9zcGVjOwogICB2YV9saXN0ICphcmdzX3B0cjsKICAg aW50IGVycl9ubzsgIC8qIGZvciAlbSAqLwotICBsb2NhdGlvbl90ICpsb2N1 czsKICAgdm9pZCAqKnhfZGF0YTsKKworICBpbmxpbmUgbG9jYXRpb25fdCAm IHNldF9sb2NhdGlvbiAodW5zaWduZWQgaW50IGluZGV4X29mX2xvY2F0aW9u KQorICB7CisgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoaW5kZXhfb2ZfbG9j YXRpb24gPCBNQVhfTE9DQVRJT05TX1BFUl9NRVNTQUdFKTsKKyAgICByZXR1 cm4gdGhpcy0+bG9jYXRpb25zW2luZGV4X29mX2xvY2F0aW9uXTsKKyAgfQor CisgIGlubGluZSBsb2NhdGlvbl90IGdldF9sb2NhdGlvbiAodW5zaWduZWQg aW50IGluZGV4X29mX2xvY2F0aW9uKSBjb25zdAorICB7CisgICAgZ2NjX2No ZWNraW5nX2Fzc2VydCAoaW5kZXhfb2ZfbG9jYXRpb24gPCBNQVhfTE9DQVRJ T05TX1BFUl9NRVNTQUdFKTsKKyAgICByZXR1cm4gdGhpcy0+bG9jYXRpb25z W2luZGV4X29mX2xvY2F0aW9uXTsKKyAgfQorCitwcml2YXRlOgorICBsb2Nh dGlvbl90IGxvY2F0aW9uc1tNQVhfTE9DQVRJT05TX1BFUl9NRVNTQUdFXTsK IH07CiAKIC8qIEhvdyBvZnRlbiBkaWFnbm9zdGljcyBhcmUgcHJlZml4ZWQg YnkgdGhlaXIgbG9jYXRpb25zOgogICAgbyBESUFHTk9TVElDU19TSE9XX1BS RUZJWF9ORVZFUjogbmV2ZXIgLSBub3QgeWV0IHN1cHBvcnRlZDsKICAgIG8g RElBR05PU1RJQ1NfU0hPV19QUkVGSVhfT05DRTogZW1pdCBvbmx5IG9uY2U7 CkluZGV4OiBnY2MvdGVzdHN1aXRlL2xpYi9nZm9ydHJhbi1kZy5leHAKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9saWIvZ2Zv cnRyYW4tZGcuZXhwCShyZXZpc2lvbiAyMjI5MDMpCisrKyBnY2MvdGVzdHN1 aXRlL2xpYi9nZm9ydHJhbi1kZy5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5 LDEwICs0OSwxMyBAQCBwcm9jIGdmb3J0cmFuLWRnLXRlc3QgeyBwcm9nIGRv X3doYXQgZXh0CiAgICAgIyAgICAgICAgICAgICAgMSAgICAgICAyCiAgICAg IyAgICAgRXJyb3I6IFNvbWUgZXJyb3IgYXQgKDEpIGFuZCAoMikKICAgICAj CiAgICAgIyBvcgogICAgICMgICAgIFtuYW1lXTpbbG9jdXNdOiBFcnJvcjog U29tZSBlcnJvcgorICAgICMgb3IKKyAgICAjICAgICBbbmFtZV06W2xvY3Vz XTogRXJyb3I6ICgxKQorICAgICMgICAgIFtuYW1lXTpbbG9jdXMyXTogRXJy b3I6IFNvbWUgZXJyb3IgYXQgKDEpIGFuZCAoMikKICAgICAjCiAgICAgIyBX aGVyZSBbbG9jdXNdIGlzIGVpdGhlciBbbGluZV0gb3IgW2xpbmVdLltjb2x1 bW5dIG9yCiAgICAgIyBbbGluZV0uW2NvbHVtbl0tW2NvbHVtbl0gLgogICAg ICMKICAgICAjIFdlIGNvbGxhcHNlIHRoZXNlIHRvIGxvb2sgbGlrZToKQEAg LTc4LDE4ICs4MSwyMyBAQCBwcm9jIGdmb3J0cmFuLWRnLXRlc3QgeyBwcm9n IGRvX3doYXQgZXh0CiAgICAgIyAyLiBXZSBkZWFsIHdpdGggdGhlIGZvcm0g d2l0aCB0d28gZGlmZmVyZW50IGxvY3VzIGxpbmVzLAogICAgIHNldCB0d29f bG9jaSAiKF58XG4pJGxvY3VzX3JlZ2V4cCRsb2N1c19yZWdleHAkZGlhZ19y ZWdleHAiCiAgICAgcmVnc3ViIC1hbGwgJHR3b19sb2NpICRjb21wX291dHB1 dCAiXFwxXFwyOlxcMzogXFw4XG5cXDVcOlxcNjogXFw4XG4iIGNvbXBfb3V0 cHV0CiAgICAgdmVyYm9zZSAiY29tcHV0X291dHB1dDE6XG4kY29tcF9vdXRw dXQiCiAKKyAgICBzZXQgbG9jdXNfcHJlZml4ICIoXFteOlxuXF0rOlxbMC05 XF0rOlxbMC05XF0rOiApKFdhcm5pbmc6IHxFcnJvcjogKSIKKyAgICBzZXQg dHdvX2xvY2kyICIoXnxcbikkbG9jdXNfcHJlZml4XFwoMVxcKVxuJGxvY3Vz X3ByZWZpeCRkaWFnX3JlZ2V4cCIKKyAgICByZWdzdWIgLWFsbCAkdHdvX2xv Y2kyICRjb21wX291dHB1dCAiXFwxXFwyXFwzXFw2XG5cXDRcXDVcXDZcbiIg Y29tcF9vdXRwdXQKKyAgICB2ZXJib3NlICJjb21wdXRfb3V0cHV0MjpcbiRj b21wX291dHB1dCIKKwogICAgICMgMy4gdGhlbiB3aXRoIHRoZSBmb3JtIHdp dGggb25seSBvbmUgbG9jdXMgbGluZS4KICAgICBzZXQgc2luZ2xlX2xvY3Vz ICIoXnxcbikkbG9jdXNfcmVnZXhwJGRpYWdfcmVnZXhwIgogICAgIHJlZ3N1 YiAtYWxsICRzaW5nbGVfbG9jdXMgJGNvbXBfb3V0cHV0ICJcXDFcXDI6XFwz OiBcXDVcbiIgY29tcF9vdXRwdXQKLSAgICB2ZXJib3NlICJjb21wdXRfb3V0 cHV0MjpcbiRjb21wX291dHB1dCIKKyAgICB2ZXJib3NlICJjb21wdXRfb3V0 cHV0MzpcbiRjb21wX291dHB1dCIKIAogICAgICMgNC4gQWRkIGEgbGluZSBu dW1iZXIgaWYgbm9uZSBleGlzdHMKICAgICByZWdzdWIgLWFsbCAiKF58XG4p KFdhcm5pbmc6IHxFcnJvcjogKSIgJGNvbXBfb3V0cHV0ICJcXDE6MDowOiBc XDIiIGNvbXBfb3V0cHV0Ci0gICAgdmVyYm9zZSAiY29tcHV0X291dHB1dDM6 XG4kY29tcF9vdXRwdXQiCisgICAgdmVyYm9zZSAiY29tcHV0X291dHB1dDQ6 XG4kY29tcF9vdXRwdXQiCiAgICAgcmV0dXJuIFtsaXN0ICRjb21wX291dHB1 dCAkb3V0cHV0X2ZpbGVdCiB9CiAKIHByb2MgZ2ZvcnRyYW4tZGctcHJ1bmUg eyBzeXN0ZW0gdGV4dCB9IHsKICAgICByZXR1cm4gW2djYy1kZy1wcnVuZSAk c3lzdGVtICR0ZXh0XQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9iYWRsaW5lLmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9iYWRsaW5lLmYJKHJldmlzaW9uIDIyMjkw MykKKysrIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYmFkbGluZS5mCSh3 b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsOCBAQAogICAgICAgICBzdWJyb3V0 aW5lIGZvbyAKKyMgaWxsZWdhbAogIyAxOCAic3JjL2JhZGxpbmUuRiIgMgor IyBpbGxlZ2FsCiAgICAgICAgIGVuZAotISB7IGRnLXdhcm5pbmcgImxlZnQg YnV0IG5vdCBlbnRlcmVkIiAiIiB7IHRhcmdldCAqLSotKiB9IDIgfQorISB7 IGRnLXdhcm5pbmcgIklsbGVnYWwiICIiIHsgdGFyZ2V0ICotKi0qIH0gMiB9 CishIHsgZGctd2FybmluZyAibGVmdCBidXQgbm90IGVudGVyZWQiICIiIHsg dGFyZ2V0ICotKi0qIH0gMyB9CishIHsgZGctd2FybmluZyAiSWxsZWdhbCIg IiIgeyB0YXJnZXQgKi0qLSogfSA0IH0KSW5kZXg6IGdjYy9jcC9lcnJvci5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jcC9lcnJvci5jCShy ZXZpc2lvbiAyMjI5MDMpCisrKyBnY2MvY3AvZXJyb3IuYwkod29ya2luZyBj b3B5KQpAQCAtMzEwMiwxMSArMzEwMiwxMSBAQCBjeHhfcHJpbnRfZXJyb3Jf ZnVuY3Rpb24gKGRpYWdub3N0aWNfY29uCiAKIHN0YXRpYyB2b2lkCiBjcF9k aWFnbm9zdGljX3N0YXJ0ZXIgKGRpYWdub3N0aWNfY29udGV4dCAqY29udGV4 dCwKIAkJICAgICAgIGRpYWdub3N0aWNfaW5mbyAqZGlhZ25vc3RpYykKIHsK LSAgZGlhZ25vc3RpY19yZXBvcnRfY3VycmVudF9tb2R1bGUgKGNvbnRleHQs IGRpYWdub3N0aWMtPmxvY2F0aW9uKTsKKyAgZGlhZ25vc3RpY19yZXBvcnRf Y3VycmVudF9tb2R1bGUgKGNvbnRleHQsIGRpYWdub3N0aWNfbG9jYXRpb24g KGRpYWdub3N0aWMpKTsKICAgY3BfcHJpbnRfZXJyb3JfZnVuY3Rpb24gKGNv bnRleHQsIGRpYWdub3N0aWMpOwogICBtYXliZV9wcmludF9pbnN0YW50aWF0 aW9uX2NvbnRleHQgKGNvbnRleHQpOwogICBtYXliZV9wcmludF9jb25zdGV4 cHJfY29udGV4dCAoY29udGV4dCk7CiAgIHBwX3NldF9wcmVmaXggKGNvbnRl eHQtPnByaW50ZXIsIGRpYWdub3N0aWNfYnVpbGRfcHJlZml4IChjb250ZXh0 LAogCQkJCQkJCQkgZGlhZ25vc3RpYykpOwpAQCAtMzEyMywxMSArMzEyMywx MSBAQCBjcF9wcmludF9lcnJvcl9mdW5jdGlvbiAoZGlhZ25vc3RpY19jb250 CiAgIGlmIChjdXJyZW50X2luc3RhbnRpYXRpb24gKCkpCiAgICAgcmV0dXJu OwogICBpZiAoZGlhZ25vc3RpY19sYXN0X2Z1bmN0aW9uX2NoYW5nZWQgKGNv bnRleHQsIGRpYWdub3N0aWMpKQogICAgIHsKICAgICAgIGNvbnN0IGNoYXIg Km9sZF9wcmVmaXggPSBjb250ZXh0LT5wcmludGVyLT5wcmVmaXg7Ci0gICAg ICBjb25zdCBjaGFyICpmaWxlID0gTE9DQVRJT05fRklMRSAoZGlhZ25vc3Rp Yy0+bG9jYXRpb24pOworICAgICAgY29uc3QgY2hhciAqZmlsZSA9IExPQ0FU SU9OX0ZJTEUgKGRpYWdub3N0aWNfbG9jYXRpb24gKGRpYWdub3N0aWMpKTsK ICAgICAgIHRyZWUgYWJzdHJhY3Rfb3JpZ2luID0gZGlhZ25vc3RpY19hYnN0 cmFjdF9vcmlnaW4gKGRpYWdub3N0aWMpOwogICAgICAgY2hhciAqbmV3X3By ZWZpeCA9IChmaWxlICYmIGFic3RyYWN0X29yaWdpbiA9PSBOVUxMKQogCQkJ ID8gZmlsZV9uYW1lX2FzX3ByZWZpeCAoY29udGV4dCwgZmlsZSkgOiBOVUxM OwogCiAgICAgICBwcF9zZXRfcHJlZml4IChjb250ZXh0LT5wcmludGVyLCBu ZXdfcHJlZml4KTsKQEAgLTM0NjksMTMgKzM0NjksMTAgQEAgY3BfcHJpbnRl ciAocHJldHR5X3ByaW50ZXIgKnBwLCB0ZXh0X2luZgogI2RlZmluZSBuZXh0 X2ludCAgICAgdmFfYXJnICgqdGV4dC0+YXJnc19wdHIsIGludCkKIAogICBp ZiAocHJlY2lzaW9uICE9IDAgfHwgd2lkZSkKICAgICByZXR1cm4gZmFsc2U7 CiAKLSAgaWYgKHRleHQtPmxvY3VzID09IE5VTEwpCi0gICAgc2V0X2xvY3Vz ID0gZmFsc2U7Ci0KICAgc3dpdGNoICgqc3BlYykKICAgICB7CiAgICAgY2Fz ZSAnQSc6IHJlc3VsdCA9IGFyZ3NfdG9fc3RyaW5nIChuZXh0X3RyZWUsIHZl cmJvc2UpOwlicmVhazsKICAgICBjYXNlICdDJzogcmVzdWx0ID0gY29kZV90 b19zdHJpbmcgKG5leHRfdGNvZGUpOwkJYnJlYWs7CiAgICAgY2FzZSAnRCc6 CkBAIC0zNTEzLDExICszNTEwLDExIEBAIGNwX3ByaW50ZXIgKHByZXR0eV9w cmludGVyICpwcCwgdGV4dF9pbmYKICAgICAgIHJldHVybiBmYWxzZTsKICAg ICB9CiAKICAgcHBfc3RyaW5nIChwcCwgcmVzdWx0KTsKICAgaWYgKHNldF9s b2N1cyAmJiB0ICE9IE5VTEwpCi0gICAgKnRleHQtPmxvY3VzID0gbG9jYXRp b25fb2YgKHQpOworICAgIHRleHQtPnNldF9sb2NhdGlvbiAoMCkgPSBsb2Nh dGlvbl9vZiAodCk7CiAgIHJldHVybiB0cnVlOwogI3VuZGVmIG5leHRfdHJl ZQogI3VuZGVmIG5leHRfdGNvZGUKICN1bmRlZiBuZXh0X2xhbmcKICN1bmRl ZiBuZXh0X2ludApJbmRleDogZ2NjL2ZvcnRyYW4vZGVjbC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdjYy9mb3J0cmFuL2RlY2wuYwkocmV2aXNp b24gMjIyOTAzKQorKysgZ2NjL2ZvcnRyYW4vZGVjbC5jCSh3b3JraW5nIGNv cHkpCkBAIC0xMTI0LDExICsxMTI0LDExIEBAIGdmY192ZXJpZnlfY19pbnRl cm9wX3BhcmFtIChnZmNfc3ltYm9sICoKIAogICAgICAgICAgIC8qIE1ha2Ug c3VyZSB0aGF0IGlmIGl0IGhhcyB0aGUgZGltZW5zaW9uIGF0dHJpYnV0ZSwg dGhhdCBpdCBpcwogCSAgICAgZWl0aGVyIGFzc3VtZWQgc2l6ZSBvciBleHBs aWNpdCBzaGFwZS4gRGVmZXJyZWQgc2hhcGUgaXMgYWxyZWFkeQogCSAgICAg Y292ZXJlZCBieSB0aGUgcG9pbnRlci9hbGxvY2F0YWJsZSBhdHRyaWJ1dGUu ICAqLwogCSAgaWYgKHN5bS0+YXMgIT0gTlVMTCAmJiBzeW0tPmFzLT50eXBl ID09IEFTX0FTU1VNRURfU0hBUEUKLQkgICAgICAmJiAhZ2ZjX25vdGlmeV9z dGRfMSAoR0ZDX1NURF9GMjAwOF9UUywgIkFzc3VtZWQtc2hhcGUgYXJyYXkg JyVzJyAiCisJICAgICAgJiYgIWdmY19ub3RpZnlfc3RkIChHRkNfU1REX0Yy MDA4X1RTLCAiQXNzdW1lZC1zaGFwZSBhcnJheSAlcXMgIgogCQkJCSAgImF0 ICVMIGFzIGR1bW15IGFyZ3VtZW50IHRvIHRoZSBCSU5EKEMpICIKIAkJCQkg ICJwcm9jZWR1cmUgJyVzJyBhdCAlTCIsIHN5bS0+bmFtZSwgCiAJCQkJICAm KHN5bS0+ZGVjbGFyZWRfYXQpLCAKIAkJCQkgIHN5bS0+bnMtPnByb2NfbmFt ZS0+bmFtZSwgCiAJCQkJICAmKHN5bS0+bnMtPnByb2NfbmFtZS0+ZGVjbGFy ZWRfYXQpKSkKSW5kZXg6IGdjYy9mb3J0cmFuL2dmb3J0cmFuLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaAko cmV2aXNpb24gMjIyOTAzKQorKysgZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaAko d29ya2luZyBjb3B5KQpAQCAtMjY1NiwxNCArMjY1NiwxNCBAQCB2b2lkIGdm Y19kaWFnbm9zdGljc19pbml0ICh2b2lkKTsKIHZvaWQgZ2ZjX2RpYWdub3N0 aWNzX2ZpbmlzaCAodm9pZCk7CiB2b2lkIGdmY19idWZmZXJfZXJyb3IgKGJv b2wpOwogCiBjb25zdCBjaGFyICpnZmNfcHJpbnRfd2lkZV9jaGFyIChnZmNf Y2hhcl90KTsKIAotdm9pZCBnZmNfd2FybmluZ18xIChjb25zdCBjaGFyICos IC4uLikgQVRUUklCVVRFX0dDQ19HRkMoMSwyKTsKIGJvb2wgZ2ZjX3dhcm5p bmcgKGludCBvcHQsIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfR0ND X0dGQygyLDMpOwotdm9pZCBnZmNfd2FybmluZ19ub3dfMSAoY29uc3QgY2hh ciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfR0ZDKDEsMik7CiBib29sIGdmY193 YXJuaW5nX25vdyAoaW50IG9wdCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJ QlVURV9HQ0NfR0ZDKDIsMyk7Citib29sIGdmY193YXJuaW5nX25vd19hdCAo bG9jYXRpb25fdCBsb2MsIGludCBvcHQsIGNvbnN0IGNoYXIgKmdtc2dpZCwg Li4uKQorICBBVFRSSUJVVEVfR0NDX0dGQygzLDQpOwogCiB2b2lkIGdmY19j bGVhcl93YXJuaW5nICh2b2lkKTsKIHZvaWQgZ2ZjX3dhcm5pbmdfY2hlY2sg KHZvaWQpOwogCiB2b2lkIGdmY19lcnJvcl8xIChjb25zdCBjaGFyICosIC4u LikgQVRUUklCVVRFX0dDQ19HRkMoMSwyKTsKQEAgLTI2NzUsMTEgKzI2NzUs MTAgQEAgdm9pZCBnZmNfaW50ZXJuYWxfZXJyb3IgKGNvbnN0IGNoYXIgKiwg Lgogdm9pZCBnZmNfY2xlYXJfZXJyb3IgKHZvaWQpOwogYm9vbCBnZmNfZXJy b3JfY2hlY2sgKHZvaWQpOwogYm9vbCBnZmNfZXJyb3JfZmxhZ190ZXN0ICh2 b2lkKTsKIAogbm90aWZpY2F0aW9uIGdmY19ub3RpZmljYXRpb25fc3RkIChp bnQpOwotYm9vbCBnZmNfbm90aWZ5X3N0ZF8xIChpbnQsIGNvbnN0IGNoYXIg KiwgLi4uKSBBVFRSSUJVVEVfR0NDX0dGQygyLDMpOwogYm9vbCBnZmNfbm90 aWZ5X3N0ZCAoaW50LCBjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dD Q19HRkMoMiwzKTsKIAogLyogQSBnZW5lcmFsIHB1cnBvc2Ugc3ludGF4IGVy cm9yLiAgKi8KICNkZWZpbmUgZ2ZjX3N5bnRheF9lcnJvcihTVCkJXAogICBn ZmNfZXJyb3IgKCJTeW50YXggZXJyb3IgaW4gJXMgc3RhdGVtZW50IGF0ICVD IiwgZ2ZjX2FzY2lpX3N0YXRlbWVudCAoU1QpKTsKSW5kZXg6IGdjYy9mb3J0 cmFuL2Vycm9yLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2Zv cnRyYW4vZXJyb3IuYwkocmV2aXNpb24gMjIyOTAzKQorKysgZ2NjL2ZvcnRy YW4vZXJyb3IuYwkod29ya2luZyBjb3B5KQpAQCAtODA1LDQxICs4MDUsMTAg QEAgZ2ZjX2NsZWFyX3BwX2J1ZmZlciAob3V0cHV0X2J1ZmZlciAqdGhpcwog ICBwcF9jbGVhcl9vdXRwdXRfYXJlYSAocHApOwogICBwcC0+YnVmZmVyID0g dG1wX2J1ZmZlcjsKIH0KIAogCi0vKiBJc3N1ZSBhIHdhcm5pbmcuICAqLwot LyogVXNlIGdmY193YXJuaW5nIGluc3RlYWQsIHVubGVzcyB0d28gbG9jYXRp b25zIGFyZSB1c2VkIGluIHRoZSBzYW1lCi0gICB3YXJuaW5nIG9yIGZvciBz Y2FubmVyLmMsIGlmIHRoZSBsb2NhdGlvbiBpcyBub3QgcHJvcGVybHkgc2V0 IHVwLiAgKi8KLQotdm9pZAotZ2ZjX3dhcm5pbmdfMSAoY29uc3QgY2hhciAq Z21zZ2lkLCAuLi4pCi17Ci0gIHZhX2xpc3QgYXJncDsKLQotICBpZiAoaW5o aWJpdF93YXJuaW5ncykKLSAgICByZXR1cm47Ci0KLSAgd2FybmluZ19idWZm ZXIuZmxhZyA9IDE7Ci0gIHdhcm5pbmdfYnVmZmVyLmluZGV4ID0gMDsKLSAg Y3VyX2Vycm9yX2J1ZmZlciA9ICZ3YXJuaW5nX2J1ZmZlcjsKLQotICB2YV9z dGFydCAoYXJncCwgZ21zZ2lkKTsKLSAgZXJyb3JfcHJpbnQgKF8oIldhcm5p bmc6IiksIF8oZ21zZ2lkKSwgYXJncCk7Ci0gIHZhX2VuZCAoYXJncCk7Ci0K LSAgZXJyb3JfY2hhciAoJ1wwJyk7Ci0KLSAgaWYgKCFidWZmZXJlZF9wKQot ICB7Ci0gICAgd2FybmluZ3MrKzsKLSAgICBpZiAod2FybmluZ3NfYXJlX2Vy cm9ycykKLSAgICAgIGdmY19pbmNyZW1lbnRfZXJyb3JfY291bnQoKTsKLSAg fQotfQotCi0KIC8qIFRoaXMgaXMganVzdCBhIGhlbHBlciBmdW5jdGlvbiB0 byBhdm9pZCBkdXBsaWNhdGluZyB0aGUgbG9naWMgb2YKICAgIGdmY193YXJu aW5nLiAgKi8KIAogc3RhdGljIGJvb2wKIGdmY193YXJuaW5nIChpbnQgb3B0 LCBjb25zdCBjaGFyICpnbXNnaWQsIHZhX2xpc3QgYXApCkBAIC04ODcsMTMg Kzg1NiwxMCBAQCBnZmNfd2FybmluZyAoaW50IG9wdCwgY29uc3QgY2hhciAq Z21zZ2lkCiAgIHZhX2VuZCAoYXJncCk7CiAgIHJldHVybiByZXQ7CiB9CiAK IC8qIElzc3VlIGEgd2FybmluZy4gICovCi0vKiBUaGlzIGZ1bmN0aW9uIHVz ZXMgdGhlIGNvbW1vbiBkaWFnbm9zdGljcywgYnV0IGRvZXMgbm90IHN1cHBv cnQKLSAgIHR3byBsb2NhdGlvbnM7IHdoZW4gYmVpbmcgdXNlZCBpbiBzY2Fu bmVyLmMsIGVuc3VyZSB0aGF0IHRoZSBsb2NhdGlvbgotICAgaXMgcHJvcGVy bHkgc2V0dXAuIE90aGVyd2lzZSwgdXNlIGdmY193YXJuaW5nXzEuICAgKi8K IAogYm9vbAogZ2ZjX3dhcm5pbmcgKGludCBvcHQsIGNvbnN0IGNoYXIgKmdt c2dpZCwgLi4uKQogewogICB2YV9saXN0IGFyZ3A7CkBAIC05MjUsODggKzg5 MSwxMCBAQCBnZmNfbm90aWZpY2F0aW9uX3N0ZCAoaW50IHN0ZCkKICAgIGZl YXR1cmUuICBBbiBlcnJvci93YXJuaW5nIHdpbGwgYmUgaXNzdWVkIGlmIHRo ZSBjdXJyZW50bHkgc2VsZWN0ZWQKICAgIHN0YW5kYXJkIGRvZXMgbm90IGNv bnRhaW4gdGhlIHJlcXVlc3RlZCBiaXRzLiAgUmV0dXJuIGZhbHNlIGlmCiAg ICBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuICAqLwogCiBib29sCi1nZmNfbm90 aWZ5X3N0ZF8xIChpbnQgc3RkLCBjb25zdCBjaGFyICpnbXNnaWQsIC4uLikK LXsKLSAgdmFfbGlzdCBhcmdwOwotICBib29sIHdhcm5pbmc7Ci0gIGNvbnN0 IGNoYXIgKm1zZzEsICptc2cyOwotICBjaGFyICpidWZmZXI7Ci0KLSAgd2Fy bmluZyA9ICgoZ2ZjX29wdGlvbi53YXJuX3N0ZCAmIHN0ZCkgIT0gMCkgJiYg IWluaGliaXRfd2FybmluZ3M7Ci0gIGlmICgoZ2ZjX29wdGlvbi5hbGxvd19z dGQgJiBzdGQpICE9IDAgJiYgIXdhcm5pbmcpCi0gICAgcmV0dXJuIHRydWU7 Ci0KLSAgaWYgKHN1cHByZXNzX2Vycm9ycykKLSAgICByZXR1cm4gd2Fybmlu ZyA/IHRydWUgOiBmYWxzZTsKLQotICBjdXJfZXJyb3JfYnVmZmVyID0gd2Fy bmluZyA/ICZ3YXJuaW5nX2J1ZmZlciA6ICZlcnJvcl9idWZmZXI7Ci0gIGN1 cl9lcnJvcl9idWZmZXItPmZsYWcgPSAxOwotICBjdXJfZXJyb3JfYnVmZmVy LT5pbmRleCA9IDA7Ci0KLSAgaWYgKHdhcm5pbmcpCi0gICAgbXNnMSA9IF8o Ildhcm5pbmc6Iik7Ci0gIGVsc2UKLSAgICBtc2cxID0gXygiRXJyb3I6Iik7 Ci0gIAotICBzd2l0Y2ggKHN0ZCkKLSAgewotICAgIGNhc2UgR0ZDX1NURF9G MjAwOF9UUzoKLSAgICAgIG1zZzIgPSAiVFMgMjkxMTMvVFMgMTg1MDg6IjsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgR0ZDX1NURF9GMjAwOF9PQlM6Ci0g ICAgICBtc2cyID0gXygiRm9ydHJhbiAyMDA4IG9ic29sZXNjZW50IGZlYXR1 cmU6Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdGQ19TVERfRjIwMDg6 Ci0gICAgICBtc2cyID0gIkZvcnRyYW4gMjAwODoiOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBHRkNfU1REX0YyMDAzOgotICAgICAgbXNnMiA9ICJGb3J0 cmFuIDIwMDM6IjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR0ZDX1NURF9H TlU6Ci0gICAgICBtc2cyID0gXygiR05VIEV4dGVuc2lvbjoiKTsKLSAgICAg IGJyZWFrOwotICAgIGNhc2UgR0ZDX1NURF9MRUdBQ1k6Ci0gICAgICBtc2cy ID0gXygiTGVnYWN5IEV4dGVuc2lvbjoiKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgR0ZDX1NURF9GOTVfT0JTOgotICAgICAgbXNnMiA9IF8oIk9ic29s ZXNjZW50IGZlYXR1cmU6Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdG Q19TVERfRjk1X0RFTDoKLSAgICAgIG1zZzIgPSBfKCJEZWxldGVkIGZlYXR1 cmU6Iik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ2Nj X3VucmVhY2hhYmxlICgpOwotICB9Ci0KLSAgYnVmZmVyID0gKGNoYXIgKikg YWxsb2NhIChzdHJsZW4gKG1zZzEpICsgc3RybGVuIChtc2cyKSArIDIpOwot ICBzdHJjcHkgKGJ1ZmZlciwgbXNnMSk7Ci0gIHN0cmNhdCAoYnVmZmVyLCAi ICIpOwotICBzdHJjYXQgKGJ1ZmZlciwgbXNnMik7Ci0KLSAgdmFfc3RhcnQg KGFyZ3AsIGdtc2dpZCk7Ci0gIGVycm9yX3ByaW50IChidWZmZXIsIF8oZ21z Z2lkKSwgYXJncCk7Ci0gIHZhX2VuZCAoYXJncCk7Ci0KLSAgZXJyb3JfY2hh ciAoJ1wwJyk7Ci0KLSAgaWYgKCFidWZmZXJlZF9wKQotICAgIHsKLSAgICAg IGlmICh3YXJuaW5nICYmICF3YXJuaW5nc19hcmVfZXJyb3JzKQotCXdhcm5p bmdzKys7Ci0gICAgICBlbHNlCi0JZ2ZjX2luY3JlbWVudF9lcnJvcl9jb3Vu dCgpOwotICAgICAgY3VyX2Vycm9yX2J1ZmZlci0+ZmxhZyA9IDA7Ci0gICAg fQotCi0gIHJldHVybiAod2FybmluZyAmJiAhd2FybmluZ3NfYXJlX2Vycm9y cykgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLQotYm9vbAogZ2ZjX25vdGlmeV9z dGQgKGludCBzdGQsIGNvbnN0IGNoYXIgKmdtc2dpZCwgLi4uKQogewogICB2 YV9saXN0IGFyZ3A7CiAgIGJvb2wgd2FybmluZzsKICAgY29uc3QgY2hhciAq bXNnLCAqbXNnMjsKQEAgLTEwNjQsMzkgKzk1MiwxMCBAQCBnZmNfbm90aWZ5 X3N0ZCAoaW50IHN0ZCwgY29uc3QgY2hhciAqZ21zCiAKICAgcmV0dXJuICh3 YXJuaW5nICYmICF3YXJuaW5nc19hcmVfZXJyb3JzKSA/IHRydWUgOiBmYWxz ZTsKIH0KIAogCi0vKiBJbW1lZGlhdGUgd2FybmluZyAoaS5lLiBkbyBub3Qg YnVmZmVyIHRoZSB3YXJuaW5nKS4gICovCi0vKiBVc2UgZ2ZjX3dhcm5pbmdf bm93IGluc3RlYWQsIHVubGVzcyB0d28gbG9jYXRpb25zIGFyZSB1c2VkIGlu IHRoZSBzYW1lCi0gICB3YXJuaW5nIG9yIGZvciBzY2FubmVyLmMsIGlmIHRo ZSBsb2NhdGlvbiBpcyBub3QgcHJvcGVybHkgc2V0IHVwLiAgKi8KLQotdm9p ZAotZ2ZjX3dhcm5pbmdfbm93XzEgKGNvbnN0IGNoYXIgKmdtc2dpZCwgLi4u KQotewotICB2YV9saXN0IGFyZ3A7Ci0gIGJvb2wgYnVmZmVyZWRfcF9zYXZl ZDsKLQotICBpZiAoaW5oaWJpdF93YXJuaW5ncykKLSAgICByZXR1cm47Ci0K LSAgYnVmZmVyZWRfcF9zYXZlZCA9IGJ1ZmZlcmVkX3A7Ci0gIGJ1ZmZlcmVk X3AgPSBmYWxzZTsKLSAgd2FybmluZ3MrKzsKLQotICB2YV9zdGFydCAoYXJn cCwgZ21zZ2lkKTsKLSAgZXJyb3JfcHJpbnQgKF8oIldhcm5pbmc6IiksIF8o Z21zZ2lkKSwgYXJncCk7Ci0gIHZhX2VuZCAoYXJncCk7Ci0KLSAgZXJyb3Jf Y2hhciAoJ1wwJyk7Ci0KLSAgaWYgKHdhcm5pbmdzX2FyZV9lcnJvcnMpCi0g ICAgZ2ZjX2luY3JlbWVudF9lcnJvcl9jb3VudCgpOwotCi0gIGJ1ZmZlcmVk X3AgPSBidWZmZXJlZF9wX3NhdmVkOwotfQotCiAvKiBDYWxsZWQgZnJvbSBv dXRwdXRfZm9ybWF0IC0tIGR1cmluZyBkaWFnbm9zdGljIG1lc3NhZ2UgcHJv Y2Vzc2luZwogICAgdG8gaGFuZGxlIEZvcnRyYW4gc3BlY2lmaWMgZm9ybWF0 IHNwZWNpZmllcnMgd2l0aCB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgogCiAg ICAlQyAgQ3VycmVudCBsb2N1cyAobm8gYXJndW1lbnQpCiAgICAlTCAgVGFr ZXMgbG9jdXMgYXJndW1lbnQKQEAgLTExMTAsMzcgKzk2OSwzOCBAQCBnZmNf Zm9ybWF0X2RlY29kZXIgKHByZXR0eV9wcmludGVyICpwcCwKICAgc3dpdGNo ICgqc3BlYykKICAgICB7CiAgICAgY2FzZSAnQyc6CiAgICAgY2FzZSAnTCc6 CiAgICAgICB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKnJlc3VsdCA9ICIoMSki OworCXN0YXRpYyBjb25zdCBjaGFyICpyZXN1bHRbMl0gPSB7ICIoMSkiLCAi KDIpIiB9OwogCWxvY3VzICpsb2M7CiAJaWYgKCpzcGVjID09ICdDJykKIAkg IGxvYyA9ICZnZmNfY3VycmVudF9sb2N1czsKIAllbHNlCiAJICBsb2MgPSB2 YV9hcmcgKCp0ZXh0LT5hcmdzX3B0ciwgbG9jdXMgKik7CiAJZ2NjX2Fzc2Vy dCAobG9jLT5uZXh0YyAtIGxvYy0+bGItPmxpbmUgPj0gMCk7CiAJdW5zaWdu ZWQgaW50IG9mZnNldCA9IGxvYy0+bmV4dGMgLSBsb2MtPmxiLT5saW5lOwot CWdjY19hc3NlcnQgKHRleHQtPmxvY3VzKTsKLQkqdGV4dC0+bG9jdXMKKwkv KiBJZiBsb2NhdGlvblswXSAhPSBVTktOT1dOX0xPQ0FUSU9OIG1lYW5zIHRo YXQgd2UgYWxyZWFkeQorCSAgIHByb2Nlc3NlZCBvbmUgb2YgJUMvJUwuICAq LworCWludCBsb2NfbnVtID0gdGV4dC0+Z2V0X2xvY2F0aW9uICgwKSA9PSBV TktOT1dOX0xPQ0FUSU9OID8gMCA6IDE7CisJdGV4dC0+c2V0X2xvY2F0aW9u IChsb2NfbnVtKQogCSAgPSBsaW5lbWFwX3Bvc2l0aW9uX2Zvcl9sb2NfYW5k X29mZnNldCAobGluZV90YWJsZSwKIAkJCQkJCSBsb2MtPmxiLT5sb2NhdGlv biwKIAkJCQkJCSBvZmZzZXQpOwotCWdsb2JhbF9kYy0+Y2FyZXRfY2hhciA9 ICcxJzsKLQlwcF9zdHJpbmcgKHBwLCByZXN1bHQpOworCXBwX3N0cmluZyAo cHAsIHJlc3VsdFtsb2NfbnVtXSk7CiAJcmV0dXJuIHRydWU7CiAgICAgICB9 CiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9 CiAKLS8qIFJldHVybiBhIG1hbGxvYydkIHN0cmluZyBkZXNjcmliaW5nIGEg bG9jYXRpb24uICBUaGUgY2FsbGVyIGlzCi0gICByZXNwb25zaWJsZSBmb3Ig ZnJlZWluZyB0aGUgbWVtb3J5LiAgKi8KKy8qIFJldHVybiBhIG1hbGxvYydk IHN0cmluZyBkZXNjcmliaW5nIHRoZSBraW5kIG9mIGRpYWdub3N0aWMuICBU aGUKKyAgIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUg bWVtb3J5LiAgKi8KIHN0YXRpYyBjaGFyICoKLWdmY19kaWFnbm9zdGljX2J1 aWxkX3ByZWZpeCAoZGlhZ25vc3RpY19jb250ZXh0ICpjb250ZXh0LAotCQkJ ICAgICBjb25zdCBkaWFnbm9zdGljX2luZm8gKmRpYWdub3N0aWMpCitnZmNf ZGlhZ25vc3RpY19idWlsZF9raW5kX3ByZWZpeCAoZGlhZ25vc3RpY19jb250 ZXh0ICpjb250ZXh0LAorCQkJCSAgY29uc3QgZGlhZ25vc3RpY19pbmZvICpk aWFnbm9zdGljKQogewogICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGlh Z25vc3RpY19raW5kX3RleHRbXSA9IHsKICNkZWZpbmUgREVGSU5FX0RJQUdO T1NUSUNfS0lORChLLCBULCBDKSAoVCksCiAjaW5jbHVkZSAiZ2ZjLWRpYWdu b3N0aWMuZGVmIgogI3VuZGVmIERFRklORV9ESUFHTk9TVElDX0tJTkQKQEAg LTExNjgsNjkgKzEwMjgsMjA4IEBAIGdmY19kaWFnbm9zdGljX2J1aWxkX3By ZWZpeCAoZGlhZ25vc3RpY18KIAogLyogUmV0dXJuIGEgbWFsbG9jJ2Qgc3Ry aW5nIGRlc2NyaWJpbmcgYSBsb2NhdGlvbi4gIFRoZSBjYWxsZXIgaXMKICAg IHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBtZW1vcnkuICAqLwogc3Rh dGljIGNoYXIgKgogZ2ZjX2RpYWdub3N0aWNfYnVpbGRfbG9jdXNfcHJlZml4 IChkaWFnbm9zdGljX2NvbnRleHQgKmNvbnRleHQsCi0JCQkJICAgY29uc3Qg ZGlhZ25vc3RpY19pbmZvICpkaWFnbm9zdGljKQorCQkJCSAgIGV4cGFuZGVk X2xvY2F0aW9uIHMpCiB7CiAgIHByZXR0eV9wcmludGVyICpwcCA9IGNvbnRl eHQtPnByaW50ZXI7CiAgIGNvbnN0IGNoYXIgKmxvY3VzX2NzID0gY29sb3Jp emVfc3RhcnQgKHBwX3Nob3dfY29sb3IgKHBwKSwgImxvY3VzIik7CiAgIGNv bnN0IGNoYXIgKmxvY3VzX2NlID0gY29sb3JpemVfc3RvcCAocHBfc2hvd19j b2xvciAocHApKTsKLSAgZXhwYW5kZWRfbG9jYXRpb24gcyA9IGRpYWdub3N0 aWNfZXhwYW5kX2xvY2F0aW9uIChkaWFnbm9zdGljKTsKICAgcmV0dXJuIChz LmZpbGUgPT0gTlVMTAogCSAgPyBidWlsZF9tZXNzYWdlX3N0cmluZyAoIiVz JXM6JXMiLCBsb2N1c19jcywgcHJvZ25hbWUsIGxvY3VzX2NlICkKIAkgIDog IXN0cmNtcCAocy5maWxlLCBOXygiPGJ1aWx0LWluPiIpKQogCSAgPyBidWls ZF9tZXNzYWdlX3N0cmluZyAoIiVzJXM6JXMiLCBsb2N1c19jcywgcy5maWxl LCBsb2N1c19jZSkKIAkgIDogY29udGV4dC0+c2hvd19jb2x1bW4KIAkgID8g YnVpbGRfbWVzc2FnZV9zdHJpbmcgKCIlcyVzOiVkOiVkOiVzIiwgbG9jdXNf Y3MsIHMuZmlsZSwgcy5saW5lLAogCQkJCSAgcy5jb2x1bW4sIGxvY3VzX2Nl KQogCSAgOiBidWlsZF9tZXNzYWdlX3N0cmluZyAoIiVzJXM6JWQ6JXMiLCBs b2N1c19jcywgcy5maWxlLCBzLmxpbmUsIGxvY3VzX2NlKSk7CiB9CiAKLXN0 YXRpYyB2b2lkCisvKiBSZXR1cm4gYSBtYWxsb2MnZCBzdHJpbmcgZGVzY3Jp YmluZyB0d28gbG9jYXRpb25zLiAgVGhlIGNhbGxlciBpcworICAgcmVzcG9u c2libGUgZm9yIGZyZWVpbmcgdGhlIG1lbW9yeS4gICovCitzdGF0aWMgY2hh ciAqCitnZmNfZGlhZ25vc3RpY19idWlsZF9sb2N1c19wcmVmaXggKGRpYWdu b3N0aWNfY29udGV4dCAqY29udGV4dCwKKwkJCQkgICBleHBhbmRlZF9sb2Nh dGlvbiBzLCBleHBhbmRlZF9sb2NhdGlvbiBzMikKK3sKKyAgcHJldHR5X3By aW50ZXIgKnBwID0gY29udGV4dC0+cHJpbnRlcjsKKyAgY29uc3QgY2hhciAq bG9jdXNfY3MgPSBjb2xvcml6ZV9zdGFydCAocHBfc2hvd19jb2xvciAocHAp LCAibG9jdXMiKTsKKyAgY29uc3QgY2hhciAqbG9jdXNfY2UgPSBjb2xvcml6 ZV9zdG9wIChwcF9zaG93X2NvbG9yIChwcCkpOworCisgIHJldHVybiAocy5m aWxlID09IE5VTEwKKwkgID8gYnVpbGRfbWVzc2FnZV9zdHJpbmcgKCIlcyVz OiVzIiwgbG9jdXNfY3MsIHByb2duYW1lLCBsb2N1c19jZSApCisJICA6ICFz dHJjbXAgKHMuZmlsZSwgTl8oIjxidWlsdC1pbj4iKSkKKwkgID8gYnVpbGRf bWVzc2FnZV9zdHJpbmcgKCIlcyVzOiVzIiwgbG9jdXNfY3MsIHMuZmlsZSwg bG9jdXNfY2UpCisJICA6IGNvbnRleHQtPnNob3dfY29sdW1uCisJICA/IGJ1 aWxkX21lc3NhZ2Vfc3RyaW5nICgiJXMlczolZDolZC0lZDolcyIsIGxvY3Vz X2NzLCBzLmZpbGUsIHMubGluZSwKKwkJCQkgIE1JTiAocy5jb2x1bW4sIHMy LmNvbHVtbiksCisJCQkJICBNQVggKHMuY29sdW1uLCBzMi5jb2x1bW4pLCBs b2N1c19jZSkKKwkgIDogYnVpbGRfbWVzc2FnZV9zdHJpbmcgKCIlcyVzOiVk OiVzIiwgbG9jdXNfY3MsIHMuZmlsZSwgcy5saW5lLAorCQkJCSAgbG9jdXNf Y2UpKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBwcmludHMgdGhlIGxvY3Vz IChmaWxlOmxpbmU6Y29sdW1uKSwgdGhlIGRpYWdub3N0aWMga2luZAorICAg KEVycm9yLCBXYXJuaW5nKSBhbmQgKG9wdGlvbmFsbHkpIHRoZSBjYXJldCBs aW5lIChhIHNvdXJjZSBsaW5lCisgICB3aXRoICcxJyBhbmQvb3IgJzInIGJl bG93IGl0KS4KKworICAgV2l0aCAtZmRpYWdub3N0aWMtc2hvdy1jYXJldCAo dGhlIGRlZmF1bHQpIGFuZCBmb3IgdmFsaWQgbG9jYXRpb25zLAorICAgaXQg cHJpbnRzIGZvciBvbmUgbG9jYXRpb246CisKKyAgICAgICBbbG9jdXNdOgor ICAgICAgIAorICAgICAgICAgIHNvbWUgY29kZQorICAgICAgICAgICAgICAg ICAxCisgICAgICAgRXJyb3I6IFNvbWUgZXJyb3IgYXQgKDEpCisgICAgICAg IAorICAgZm9yIHR3byBsb2NhdGlvbnMgdGhhdCBmaXQgaW4gdGhlIHNhbWUg bG9jdXMgbGluZToKKworICAgICAgIFtsb2N1c106CisgICAgICAgCisgICAg ICAgICBzb21lIGNvZGUgYW5kIHNvbWUgbW9yZSBjb2RlCisgICAgICAgICAg ICAgICAgMSAgICAgICAyCisgICAgICAgRXJyb3I6IFNvbWUgZXJyb3IgYXQg KDEpIGFuZCAoMikKKworICAgYW5kIGZvciB0d28gbG9jYXRpb25zIHRoYXQg ZG8gbm90IGZpdCBpbiB0aGUgc2FtZSBsb2N1cyBsaW5lOgorCisgICAgICAg W2xvY3VzXToKKyAgICAgICAKKyAgICAgICAgIHNvbWUgY29kZQorICAgICAg ICAgICAgICAgIDEKKyAgICAgICBbbG9jdXMyXToKKyAgICAgICAKKyAgICAg ICAgIHNvbWUgb3RoZXIgY29kZQorICAgICAgICAgICAyCisgICAgICAgRXJy b3I6IFNvbWUgZXJyb3IgYXQgKDEpIGFuZCAoMikKKyAgICAgICAKKyAgV2l0 aCAtZm5vLWRpYWdub3N0aWMtc2hvdy1jYXJldCBvciBpZiBvbmUgb2YgdGhl IGxvY2F0aW9ucyBpcyBub3QKKyAgdmFsaWQsIGl0IHByaW50cyBmb3Igb25l IGxvY2F0aW9uIChvciBmb3IgdHdvIGxvY2F0aW9ucyB0aGF0IGZpdCBpbgor ICB0aGUgc2FtZSBsb2N1cyBsaW5lKToKKworICAgICAgIFtsb2N1c106IEVy cm9yOiBTb21lIGVycm9yIGF0ICgxKSBhbmQgKDIpCisKKyAgIGFuZCBmb3Ig dHdvIGxvY2F0aW9ucyB0aGF0IGRvIG5vdCBmaXQgaW4gdGhlIHNhbWUgbG9j dXMgbGluZToKKworICAgICAgIFtuYW1lXTpbbG9jdXNdOiBFcnJvcjogKDEp CisgICAgICAgW25hbWVdOltsb2N1czJdOiBFcnJvcjogU29tZSBlcnJvciBh dCAoMSkgYW5kICgyKQorKi8KK3N0YXRpYyB2b2lkIAogZ2ZjX2RpYWdub3N0 aWNfc3RhcnRlciAoZGlhZ25vc3RpY19jb250ZXh0ICpjb250ZXh0LAogCQkJ ZGlhZ25vc3RpY19pbmZvICpkaWFnbm9zdGljKQogewotICBjaGFyICogbG9j dXNfcHJlZml4ID0gZ2ZjX2RpYWdub3N0aWNfYnVpbGRfbG9jdXNfcHJlZml4 IChjb250ZXh0LCBkaWFnbm9zdGljKTsKLSAgY2hhciAqIHByZWZpeCA9IGdm Y19kaWFnbm9zdGljX2J1aWxkX3ByZWZpeCAoY29udGV4dCwgZGlhZ25vc3Rp Yyk7Ci0gIC8qIEZpcnN0IHdlIGFzc3VtZSB0aGVyZSBpcyBhIGNhcmV0IGxp bmUuICAqLwotICBwcF9zZXRfcHJlZml4IChjb250ZXh0LT5wcmludGVyLCBO VUxMKTsKLSAgaWYgKHBwX25lZWRzX25ld2xpbmUgKGNvbnRleHQtPnByaW50 ZXIpKQotICAgIHBwX25ld2xpbmUgKGNvbnRleHQtPnByaW50ZXIpOwotICBw cF92ZXJiYXRpbSAoY29udGV4dC0+cHJpbnRlciwgbG9jdXNfcHJlZml4KTsK LSAgLyogRm9ydHJhbiB1c2VzIGFuIGVtcHR5IGxpbmUgYmV0d2VlbiBsb2N1 cyBhbmQgY2FyZXQgbGluZS4gICovCi0gIHBwX25ld2xpbmUgKGNvbnRleHQt PnByaW50ZXIpOwotICBkaWFnbm9zdGljX3Nob3dfbG9jdXMgKGNvbnRleHQs IGRpYWdub3N0aWMpOwotICBpZiAocHBfbmVlZHNfbmV3bGluZSAoY29udGV4 dC0+cHJpbnRlcikpCisgIGNoYXIgKiBraW5kX3ByZWZpeCA9IGdmY19kaWFn bm9zdGljX2J1aWxkX2tpbmRfcHJlZml4IChjb250ZXh0LCBkaWFnbm9zdGlj KTsKKworICBleHBhbmRlZF9sb2NhdGlvbiBzMSA9IGRpYWdub3N0aWNfZXhw YW5kX2xvY2F0aW9uIChkaWFnbm9zdGljKTsKKyAgZXhwYW5kZWRfbG9jYXRp b24gczI7CisgIGJvb2wgb25lX2xvY3VzID0gZGlhZ25vc3RpY19sb2NhdGlv biAoZGlhZ25vc3RpYywgMSkgPT0gVU5LTk9XTl9MT0NBVElPTjsKKyAgYm9v bCBzYW1lX2xvY3VzID0gZmFsc2U7CisKKyAgaWYgKCFvbmVfbG9jdXMpIAog ICAgIHsKKyAgICAgIHMyID0gZGlhZ25vc3RpY19leHBhbmRfbG9jYXRpb24g KGRpYWdub3N0aWMsIDEpOworICAgICAgc2FtZV9sb2N1cyA9IGRpYWdub3N0 aWNfc2FtZV9saW5lIChjb250ZXh0LCBzMSwgczIpOworICAgIH0KKworICBj aGFyICogbG9jdXNfcHJlZml4ID0gKG9uZV9sb2N1cyB8fCAhc2FtZV9sb2N1 cykKKyAgICA/IGdmY19kaWFnbm9zdGljX2J1aWxkX2xvY3VzX3ByZWZpeCAo Y29udGV4dCwgczEpCisgICAgOiBnZmNfZGlhZ25vc3RpY19idWlsZF9sb2N1 c19wcmVmaXggKGNvbnRleHQsIHMxLCBzMik7CisKKyAgaWYgKCFjb250ZXh0 LT5zaG93X2NhcmV0CisgICAgICB8fCBkaWFnbm9zdGljX2xvY2F0aW9uIChk aWFnbm9zdGljLCAwKSA8PSBCVUlMVElOU19MT0NBVElPTgorICAgICAgfHwg ZGlhZ25vc3RpY19sb2NhdGlvbiAoZGlhZ25vc3RpYywgMCkgPT0gY29udGV4 dC0+bGFzdF9sb2NhdGlvbikKKyAgICB7CisgICAgICBwcF9zZXRfcHJlZml4 IChjb250ZXh0LT5wcmludGVyLAorCQkgICAgIGNvbmNhdCAobG9jdXNfcHJl Zml4LCAiICIsIGtpbmRfcHJlZml4LCBOVUxMKSk7CisgICAgICBmcmVlIChs b2N1c19wcmVmaXgpOworCisgICAgICBpZiAob25lX2xvY3VzIHx8IHNhbWVf bG9jdXMpCisJeworCSAgZnJlZSAoa2luZF9wcmVmaXgpOworCSAgcmV0dXJu OworCX0KKyAgICAgIC8qIEluIHRoaXMgY2FzZSwgd2UgcHJpbnQgdGhlIHBy ZXZpb3VzIGxvY3VzIGFuZCBwcmVmaXggYXM6CisKKwkgIFtsb2N1c106W3By ZWZpeF06ICgxKQorCisJIGFuZCB3ZSBmbHVzaCB3aXRoIGEgbmV3IGxpbmUg YmVmb3JlIHNldHRpbmcgdGhlIG5ldyBwcmVmaXguICAqLworICAgICAgcHBf c3RyaW5nIChjb250ZXh0LT5wcmludGVyLCAiKDEpIik7CiAgICAgICBwcF9u ZXdsaW5lIChjb250ZXh0LT5wcmludGVyKTsKLSAgICAgIC8qIElmIHRoZSBj YXJldCBsaW5lIHdhcyBzaG93biwgdGhlIHByZWZpeCBkb2VzIG5vdCBjb250 YWluIHRoZQotCSBsb2N1cy4gICovCi0gICAgICBwcF9zZXRfcHJlZml4IChj b250ZXh0LT5wcmludGVyLCBwcmVmaXgpOworICAgICAgbG9jdXNfcHJlZml4 ID0gZ2ZjX2RpYWdub3N0aWNfYnVpbGRfbG9jdXNfcHJlZml4IChjb250ZXh0 LCBzMik7CisgICAgICBwcF9zZXRfcHJlZml4IChjb250ZXh0LT5wcmludGVy LAorCQkgICAgIGNvbmNhdCAobG9jdXNfcHJlZml4LCAiICIsIGtpbmRfcHJl Zml4LCBOVUxMKSk7CisgICAgICBmcmVlIChraW5kX3ByZWZpeCk7CisgICAg ICBmcmVlIChsb2N1c19wcmVmaXgpOwogICAgIH0KLSAgZWxzZSAKKyAgZWxz ZQogICAgIHsKLSAgICAgIC8qIE90aGVyd2lzZSwgc3RhcnQgYWdhaW4uICAq LwotICAgICAgcHBfY2xlYXJfb3V0cHV0X2FyZWEoY29udGV4dC0+cHJpbnRl cik7Ci0gICAgICBwcF9zZXRfcHJlZml4IChjb250ZXh0LT5wcmludGVyLCBj b25jYXQgKGxvY3VzX3ByZWZpeCwgIiAiLCBwcmVmaXgsIE5VTEwpKTsKLSAg ICAgIGZyZWUgKHByZWZpeCk7CisgICAgICBwcF92ZXJiYXRpbSAoY29udGV4 dC0+cHJpbnRlciwgbG9jdXNfcHJlZml4KTsKKyAgICAgIGZyZWUgKGxvY3Vz X3ByZWZpeCk7CisgICAgICAvKiBGb3J0cmFuIHVzZXMgYW4gZW1wdHkgbGlu ZSBiZXR3ZWVuIGxvY3VzIGFuZCBjYXJldCBsaW5lLiAgKi8KKyAgICAgIHBw X25ld2xpbmUgKGNvbnRleHQtPnByaW50ZXIpOworICAgICAgZGlhZ25vc3Rp Y19zaG93X2xvY3VzIChjb250ZXh0LCBkaWFnbm9zdGljKTsKKyAgICAgIHBw X25ld2xpbmUgKGNvbnRleHQtPnByaW50ZXIpOworICAgICAgLyogSWYgdGhl IGNhcmV0IGxpbmUgd2FzIHNob3duLCB0aGUgcHJlZml4IGRvZXMgbm90IGNv bnRhaW4gdGhlCisJIGxvY3VzLiAgKi8KKyAgICAgIHBwX3NldF9wcmVmaXgg KGNvbnRleHQtPnByaW50ZXIsIGtpbmRfcHJlZml4KTsKKworICAgICAgaWYg KG9uZV9sb2N1cyB8fCBzYW1lX2xvY3VzKQorCSAgcmV0dXJuOworCisgICAg ICBsb2N1c19wcmVmaXggPSBnZmNfZGlhZ25vc3RpY19idWlsZF9sb2N1c19w cmVmaXggKGNvbnRleHQsIHMyKTsKKyAgICAgIGlmIChkaWFnbm9zdGljX2xv Y2F0aW9uIChkaWFnbm9zdGljLCAxKSA8PSBCVUlMVElOU19MT0NBVElPTikK Kwl7CisJICAvKiBObyBjYXJldCBsaW5lIGZvciB0aGUgc2Vjb25kIGxvY2F0 aW9uLiBPdmVycmlkZSB0aGUgcHJldmlvdXMKKwkgICAgIHByZWZpeCB3aXRo IFtsb2N1czJdOltwcmVmaXhdLiAgKi8KKwkgIHBwX3NldF9wcmVmaXggKGNv bnRleHQtPnByaW50ZXIsCisJCQkgY29uY2F0IChsb2N1c19wcmVmaXgsICIg Iiwga2luZF9wcmVmaXgsIE5VTEwpKTsKKwkgIGZyZWUgKGtpbmRfcHJlZml4 KTsKKwkgIGZyZWUgKGxvY3VzX3ByZWZpeCk7CisJfQorICAgICAgZWxzZQor CXsKKwkgIC8qIFdlIHByaW50IHRoZSBjYXJldCBmb3IgdGhlIHNlY29uZCBs b2NhdGlvbi4gICovCisJICBwcF92ZXJiYXRpbSAoY29udGV4dC0+cHJpbnRl ciwgbG9jdXNfcHJlZml4KTsKKwkgIGZyZWUgKGxvY3VzX3ByZWZpeCk7CisJ ICAvKiBGb3J0cmFuIHVzZXMgYW4gZW1wdHkgbGluZSBiZXR3ZWVuIGxvY3Vz IGFuZCBjYXJldCBsaW5lLiAgKi8KKwkgIHBwX25ld2xpbmUgKGNvbnRleHQt PnByaW50ZXIpOworCSAgczEuY29sdW1uID0gMDsgLyogUHJpbnQgb25seSBh IGNhcmV0IGxpbmUgZm9yIHMyLiAgKi8KKwkgIGRpYWdub3N0aWNfcHJpbnRf Y2FyZXRfbGluZSAoY29udGV4dCwgczIsIHMxLAorCQkJCSAgICAgICBjb250 ZXh0LT5jYXJldF9jaGFyc1sxXSwgJ1wwJyk7CisJICBwcF9uZXdsaW5lIChj b250ZXh0LT5wcmludGVyKTsKKwkgIC8qIElmIHRoZSBjYXJldCBsaW5lIHdh cyBzaG93biwgdGhlIHByZWZpeCBkb2VzIG5vdCBjb250YWluIHRoZQorCSAg ICAgbG9jdXMuICAqLworCSAgcHBfc2V0X3ByZWZpeCAoY29udGV4dC0+cHJp bnRlciwga2luZF9wcmVmaXgpOworCX0KICAgICB9Ci0gIGZyZWUgKGxvY3Vz X3ByZWZpeCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBnZmNfZGlhZ25vc3RpY19m aW5hbGl6ZXIgKGRpYWdub3N0aWNfY29udGV4dCAqY29udGV4dCwKIAkJCSAg ZGlhZ25vc3RpY19pbmZvICpkaWFnbm9zdGljIEFUVFJJQlVURV9VTlVTRUQp CiB7CiAgIHBwX2Rlc3Ryb3lfcHJlZml4IChjb250ZXh0LT5wcmludGVyKTsK ICAgcHBfbmV3bGluZV9hbmRfZmx1c2ggKGNvbnRleHQtPnByaW50ZXIpOwog fQogCisvKiBJbW1lZGlhdGUgd2FybmluZyAoaS5lLiBkbyBub3QgYnVmZmVy IHRoZSB3YXJuaW5nKSB3aXRoIGFuIGV4cGxpY2l0CisgICBsb2NhdGlvbi4g ICovCisKK2Jvb2wKK2dmY193YXJuaW5nX25vd19hdCAobG9jYXRpb25fdCBs b2MsIGludCBvcHQsIGNvbnN0IGNoYXIgKmdtc2dpZCwgLi4uKQoreworICB2 YV9saXN0IGFyZ3A7CisgIGRpYWdub3N0aWNfaW5mbyBkaWFnbm9zdGljOwor ICBib29sIHJldDsKKworICB2YV9zdGFydCAoYXJncCwgZ21zZ2lkKTsKKyAg ZGlhZ25vc3RpY19zZXRfaW5mbyAoJmRpYWdub3N0aWMsIGdtc2dpZCwgJmFy Z3AsIGxvYywgREtfV0FSTklORyk7CisgIGRpYWdub3N0aWMub3B0aW9uX2lu ZGV4ID0gb3B0OworICByZXQgPSByZXBvcnRfZGlhZ25vc3RpYyAoJmRpYWdu b3N0aWMpOworICB2YV9lbmQgKGFyZ3ApOworICByZXR1cm4gcmV0OworfQor CiAvKiBJbW1lZGlhdGUgd2FybmluZyAoaS5lLiBkbyBub3QgYnVmZmVyIHRo ZSB3YXJuaW5nKS4gICovCi0vKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGNv bW1vbiBkaWFnbm9zdGljcywgYnV0IGRvZXMgbm90IHN1cHBvcnQKLSAgIHR3 byBsb2NhdGlvbnM7IHdoZW4gYmVpbmcgdXNlZCBpbiBzY2FubmVyLmMsIGVu c3VyZSB0aGF0IHRoZSBsb2NhdGlvbgotICAgaXMgcHJvcGVybHkgc2V0dXAu IE90aGVyd2lzZSwgdXNlIGdmY193YXJuaW5nX25vd18xLiAgICovCiAKIGJv b2wKIGdmY193YXJuaW5nX25vdyAoaW50IG9wdCwgY29uc3QgY2hhciAqZ21z Z2lkLCAuLi4pCiB7CiAgIHZhX2xpc3QgYXJncDsKQEAgLTE2MzcsMTEgKzE2 MzYsMTIgQEAgdm9pZAogZ2ZjX2RpYWdub3N0aWNzX2luaXQgKHZvaWQpCiB7 CiAgIGRpYWdub3N0aWNfc3RhcnRlciAoZ2xvYmFsX2RjKSA9IGdmY19kaWFn bm9zdGljX3N0YXJ0ZXI7CiAgIGRpYWdub3N0aWNfZmluYWxpemVyIChnbG9i YWxfZGMpID0gZ2ZjX2RpYWdub3N0aWNfZmluYWxpemVyOwogICBkaWFnbm9z dGljX2Zvcm1hdF9kZWNvZGVyIChnbG9iYWxfZGMpID0gZ2ZjX2Zvcm1hdF9k ZWNvZGVyOwotICBnbG9iYWxfZGMtPmNhcmV0X2NoYXIgPSAnXic7CisgIGds b2JhbF9kYy0+Y2FyZXRfY2hhcnNbMF0gPSAnMSc7CisgIGdsb2JhbF9kYy0+ Y2FyZXRfY2hhcnNbMV0gPSAnMic7CiAgIHBwX3dhcm5pbmdfYnVmZmVyID0g bmV3IChYTkVXIChvdXRwdXRfYnVmZmVyKSkgb3V0cHV0X2J1ZmZlciAoKTsK ICAgcHBfd2FybmluZ19idWZmZXItPmZsdXNoX3AgPSBmYWxzZTsKICAgcHBf ZXJyb3JfYnVmZmVyID0gbmV3IChYTkVXIChvdXRwdXRfYnVmZmVyKSkgb3V0 cHV0X2J1ZmZlciAoKTsKICAgcHBfZXJyb3JfYnVmZmVyLT5mbHVzaF9wID0g ZmFsc2U7CiB9CkBAIC0xNjUyLDcgKzE2NTIsOCBAQCBnZmNfZGlhZ25vc3Rp Y3NfZmluaXNoICh2b2lkKQogICB0cmVlX2RpYWdub3N0aWNzX2RlZmF1bHRz IChnbG9iYWxfZGMpOwogICAvKiBXZSBzdGlsbCB3YW50IHRvIHVzZSB0aGUg Z2ZjIHN0YXJ0ZXIgYW5kIGZpbmFsaXplciwgbm90IHRoZSB0cmVlCiAgICAg IGRlZmF1bHRzLiAgKi8KICAgZGlhZ25vc3RpY19zdGFydGVyIChnbG9iYWxf ZGMpID0gZ2ZjX2RpYWdub3N0aWNfc3RhcnRlcjsKICAgZGlhZ25vc3RpY19m aW5hbGl6ZXIgKGdsb2JhbF9kYykgPSBnZmNfZGlhZ25vc3RpY19maW5hbGl6 ZXI7Ci0gIGdsb2JhbF9kYy0+Y2FyZXRfY2hhciA9ICdeJzsKKyAgZ2xvYmFs X2RjLT5jYXJldF9jaGFyc1swXSA9ICdeJzsKKyAgZ2xvYmFsX2RjLT5jYXJl dF9jaGFyc1sxXSA9ICdeJzsKIH0KSW5kZXg6IGdjYy9mb3J0cmFuL3NjYW5u ZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvZm9ydHJhbi9z Y2FubmVyLmMJKHJldmlzaW9uIDIyMjkwMykKKysrIGdjYy9mb3J0cmFuL3Nj YW5uZXIuYwkod29ya2luZyBjb3B5KQpAQCAtMjAxMiwxMyArMjAxMiwxNyBA QCBwcmVwcm9jZXNzb3JfbGluZSAoZ2ZjX2NoYXJfdCAqYykKICAgaWYgKGZs YWdbMl0pIC8qIEVuZGluZyBjdXJyZW50IGZpbGUuICAqLwogICAgIHsKICAg ICAgIGlmICghY3VycmVudF9maWxlLT51cAogCSAgfHwgZmlsZW5hbWVfY21w IChjdXJyZW50X2ZpbGUtPnVwLT5maWxlbmFtZSwgZmlsZW5hbWUpICE9IDAp CiAJewotCSAgZ2ZjX3dhcm5pbmdfbm93XzEgKCIlczolZDogZmlsZSAlcyBs ZWZ0IGJ1dCBub3QgZW50ZXJlZCIsCi0JCQkgICAgIGN1cnJlbnRfZmlsZS0+ ZmlsZW5hbWUsIGN1cnJlbnRfZmlsZS0+bGluZSwKLQkJCSAgICAgZmlsZW5h bWUpOworCSAgbGluZW1hcF9saW5lX3N0YXJ0IChsaW5lX3RhYmxlLCBjdXJy ZW50X2ZpbGUtPmxpbmUsIDgwKTsKKwkgIC8qID8/PyBPbmUgY291bGQgY29t cHV0ZSB0aGUgZXhhY3QgY29sdW1uIHdoZXJlIHRoZSBmaWxlbmFtZQorCSAg ICAgc3RhcnRzIGFuZCBjb21wdXRlIHRoZSBleGFjdCBsb2NhdGlvbiBoZXJl LiAgKi8KKwkgIGdmY193YXJuaW5nX25vd19hdCAobGluZW1hcF9wb3NpdGlv bl9mb3JfY29sdW1uIChsaW5lX3RhYmxlLCAxKSwKKwkJCSAgICAgIDAsICJm aWxlICVxcyBsZWZ0IGJ1dCBub3QgZW50ZXJlZCIsCisJCQkgICAgICBmaWxl bmFtZSk7CisJICBjdXJyZW50X2ZpbGUtPmxpbmUrKzsKIAkgIGlmICh1bmVz Y2FwZSkKIAkgICAgZnJlZSAod2lkZV9maWxlbmFtZSk7CiAJICBmcmVlIChm aWxlbmFtZSk7CiAJICByZXR1cm47CiAJfQpAQCAtMjA0NiwxMiArMjA1MCwx NSBAQCBwcmVwcm9jZXNzb3JfbGluZSAoZ2ZjX2NoYXJfdCAqYykKICAgICBm cmVlICh3aWRlX2ZpbGVuYW1lKTsKICAgZnJlZSAoZmlsZW5hbWUpOwogICBy ZXR1cm47CiAKICBiYWRfY3BwX2xpbmU6Ci0gIGdmY193YXJuaW5nX25vd18x ICgiJXM6JWQ6IElsbGVnYWwgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSIsCi0J CSAgIGN1cnJlbnRfZmlsZS0+ZmlsZW5hbWUsIGN1cnJlbnRfZmlsZS0+bGlu ZSk7CisgIGxpbmVtYXBfbGluZV9zdGFydCAobGluZV90YWJsZSwgY3VycmVu dF9maWxlLT5saW5lLCA4MCk7CisgIC8qID8/PyBPbmUgY291bGQgY29tcHV0 ZSB0aGUgZXhhY3QgY29sdW1uIHdoZXJlIHRoZSBkaXJlY3RpdmUKKyAgICAg c3RhcnRzIGFuZCBjb21wdXRlIHRoZSBleGFjdCBsb2NhdGlvbiBoZXJlLiAg Ki8KKyAgZ2ZjX3dhcm5pbmdfbm93X2F0IChsaW5lbWFwX3Bvc2l0aW9uX2Zv cl9jb2x1bW4gKGxpbmVfdGFibGUsIDIpLCAwLAorCQkgICAgICAiSWxsZWdh bCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIik7CiAgIGN1cnJlbnRfZmlsZS0+ bGluZSsrOwogfQogCiAKIHN0YXRpYyBib29sIGxvYWRfZmlsZSAoY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICosIGJvb2wpOwpJbmRleDogZ2NjL2ZvcnRy YW4vcmVzb2x2ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9m b3J0cmFuL3Jlc29sdmUuYwkocmV2aXNpb24gMjIyOTAzKQorKysgZ2NjL2Zv cnRyYW4vcmVzb2x2ZS5jCSh3b3JraW5nIGNvcHkpCkBAIC04Nzc3LDExICs4 Nzc3LDExIEBAIHJlc29sdmVfYnJhbmNoIChnZmNfc3RfbGFiZWwgKmxhYmVs LCBnZmMKICAgICB9CiAKICAgLyogVGhlIGxhYmVsIGlzIG5vdCBpbiBhbiBl bmNsb3NpbmcgYmxvY2ssIHNvIGlsbGVnYWwuICBUaGlzIHdhcwogICAgICBh bGxvd2VkIGluIEZvcnRyYW4gNjYsIHNvIHdlIGFsbG93IGl0IGFzIGV4dGVu c2lvbi4gIE5vCiAgICAgIGZ1cnRoZXIgY2hlY2tzIGFyZSBuZWNlc3Nhcnkg aW4gdGhpcyBjYXNlLiAgKi8KLSAgZ2ZjX25vdGlmeV9zdGRfMSAoR0ZDX1NU RF9MRUdBQ1ksICJMYWJlbCBhdCAlTCBpcyBub3QgaW4gdGhlIHNhbWUgYmxv Y2sgIgorICBnZmNfbm90aWZ5X3N0ZCAoR0ZDX1NURF9MRUdBQ1ksICJMYWJl bCBhdCAlTCBpcyBub3QgaW4gdGhlIHNhbWUgYmxvY2sgIgogCQkgICJhcyB0 aGUgR09UTyBzdGF0ZW1lbnQgYXQgJUwiLCAmbGFiZWwtPndoZXJlLAogCQkg ICZjb2RlLT5sb2MpOwogICByZXR1cm47CiB9CiAKQEAgLTEyOTE4LDEyICsx MjkxOCwxMiBAQCByZXNvbHZlX2ZsX2Rlcml2ZWQgKGdmY19zeW1ib2wgKnN5 bSkKICAgaWYgKCFzeW0tPmF0dHIuaXNfY2xhc3MpCiAgICAgZ2ZjX2ZpbmRf c3ltYm9sIChzeW0tPm5hbWUsIHN5bS0+bnMsIDAsICZnZW5fZHQpOwogICBp ZiAoZ2VuX2R0ICYmIGdlbl9kdC0+Z2VuZXJpYyAmJiBnZW5fZHQtPmdlbmVy aWMtPm5leHQKICAgICAgICYmICghZ2VuX2R0LT5nZW5lcmljLT5zeW0tPmF0 dHIudXNlX2Fzc29jCiAJICB8fCBnZW5fZHQtPmdlbmVyaWMtPnN5bS0+bW9k dWxlICE9IGdlbl9kdC0+Z2VuZXJpYy0+bmV4dC0+c3ltLT5tb2R1bGUpCi0g ICAgICAmJiAhZ2ZjX25vdGlmeV9zdGRfMSAoR0ZDX1NURF9GMjAwMywgIkdl bmVyaWMgbmFtZSAnJXMnIG9mIGZ1bmN0aW9uICIKLQkJCSAgIiclcycgYXQg JUwgYmVpbmcgdGhlIHNhbWUgbmFtZSBhcyBkZXJpdmVkICIKKyAgICAgICYm ICFnZmNfbm90aWZ5X3N0ZCAoR0ZDX1NURF9GMjAwMywgIkdlbmVyaWMgbmFt ZSAlcXMgb2YgZnVuY3Rpb24gIgorCQkJICAiJXFzIGF0ICVMIGJlaW5nIHRo ZSBzYW1lIG5hbWUgYXMgZGVyaXZlZCAiCiAJCQkgICJ0eXBlIGF0ICVMIiwg c3ltLT5uYW1lLAogCQkJICBnZW5fZHQtPmdlbmVyaWMtPnN5bSA9PSBzeW0K IAkJCSAgPyBnZW5fZHQtPmdlbmVyaWMtPm5leHQtPnN5bS0+bmFtZQogCQkJ ICA6IGdlbl9kdC0+Z2VuZXJpYy0+c3ltLT5uYW1lLAogCQkJICBnZW5fZHQt PmdlbmVyaWMtPnN5bSA9PSBzeW0KSW5kZXg6IGdjYy9mb3J0cmFuL2RlcGVu ZGVuY3kuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvZm9ydHJh bi9kZXBlbmRlbmN5LmMJKHJldmlzaW9uIDIyMjkwMykKKysrIGdjYy9mb3J0 cmFuL2RlcGVuZGVuY3kuYwkod29ya2luZyBjb3B5KQpAQCAtOTU0LDExICs5 NTQsMTEgQEAgZ2ZjX2NoZWNrX2FyZ3VtZW50X3Zhcl9kZXBlbmRlbmN5IChn ZmNfZQogCQkgIC8qIFdlIGFyZSB0b2xkIG5vdCB0byBjaGVjayBkZXBlbmRl bmNpZXMuCiAJCSAgICAgV2UgZG8gaXQsIGhvd2V2ZXIsIGFuZCBpc3N1ZSBh IHdhcm5pbmcgaW4gY2FzZSB3ZSBmaW5kIG9uZS4KIAkJICAgICBJZiBhIGRl cGVuZGVuY3kgaXMgZm91bmQgaW4gdGhlIGNhc2UKIAkJICAgICBlbGVtZW50 YWwgPT0gRUxFTV9DSEVDS19WQVJJQUJMRSwgd2Ugd2lsbCBnZW5lcmF0ZQog CQkgICAgIGEgdGVtcG9yYXJ5LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGJvdGhl ciB0aGUgdXNlci4gICovCi0JCSAgZ2ZjX3dhcm5pbmdfMSAoIklOVEVOVCgl cykgYWN0dWFsIGFyZ3VtZW50IGF0ICVMIG1pZ2h0ICIKKwkJICBnZmNfd2Fy bmluZyAoMCwgIklOVEVOVCglcykgYWN0dWFsIGFyZ3VtZW50IGF0ICVMIG1p Z2h0ICIKIAkJCSAgICAgICAiaW50ZXJmZXJlIHdpdGggYWN0dWFsIGFyZ3Vt ZW50IGF0ICVMLiIsCiAJCSAgIAkgICAgICAgaW50ZW50ID09IElOVEVOVF9P VVQgPyAiT1VUIiA6ICJJTk9VVCIsCiAJCSAgIAkgICAgICAgJnZhci0+d2hl cmUsICZleHByLT53aGVyZSk7CiAJCX0KIAkgICAgICByZXR1cm4gMDsK --f46d041825705ee6a00515995608--