From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23600 invoked by alias); 25 Jun 2012 15:31:18 -0000 Received: (qmail 23539 invoked by uid 22791); 25 Jun 2012 15:31:04 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_THREADED,RCVD_IN_DNSWL_NONE,RCVD_IN_HOSTKARMA_YE,TW_CP,TW_EG,TW_RG,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from elasmtp-dupuy.atl.sa.earthlink.net (HELO elasmtp-dupuy.atl.sa.earthlink.net) (209.86.89.62) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 25 Jun 2012 15:30:36 +0000 Received: from [68.96.200.16] (helo=macbook2.local) by elasmtp-dupuy.atl.sa.earthlink.net with esmtpa (Exim 4.67) (envelope-from ) id 1SjBFK-0006e0-VY; Mon, 25 Jun 2012 11:30:35 -0400 Message-ID: <4FE8841A.7090100@earthlink.net> Date: Mon, 25 Jun 2012 15:31:00 -0000 From: Stan Shebs User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20120614 Thunderbird/13.0.1 MIME-Version: 1.0 To: Yao Qi CC: gdb-patches@sourceware.org Subject: Re: [PATCH] Dynamic printf for a target agent References: <4FC57340.6070306@earthlink.net> <4FC70975.7020604@codesourcery.com> In-Reply-To: <4FC70975.7020604@codesourcery.com> Content-Type: multipart/mixed; boundary="------------070501060306060009060108" X-ELNK-Trace: ae6f8838ff913eba0cc1426638a40ef67e972de0d01da940c2401c35d9054fe91d4812833c5f2ed7350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c 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-06/txt/msg00775.txt.bz2 This is a multi-part message in MIME format. --------------070501060306060009060108 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 6792 On 5/30/12 11:02 PM, Yao Qi wrote: Thanks for the comments! > On 05/30/2012 09:09 AM, Stan Shebs wrote: > > + cmd1 = cmdrest; > + expr = parse_exp_1 (&cmd1, (struct block *) 0, 1); > We need an instance of block, like > > expr = parse_exp_1 (&cmd1, block_for_pc (scope), 1); > > otherwise, we'll see some fails when running dprintf.exp with gdbserver, > because of the warning below, > > "No symbol "arg" in specified context." Good idea! > >> @@ -2001,15 +1995,15 @@ print_variable_and_value (const char *na >> static void >> ui_printf (char *arg, struct ui_file *stream) >> { >> + struct format_piece *fpieces; >> char *f = NULL; >> char *s = arg; >> char *string = NULL; > local variables 'f' and 'string' can be removed. Done, and the nargs variables are moved down. > >> Index: remote.c >> =================================================================== >> RCS file: /cvs/src/src/gdb/remote.c,v >> retrieving revision 1.499 >> diff -u -p -r1.499 remote.c >> --- remote.c 24 May 2012 16:51:35 -0000 1.499 >> +++ remote.c 30 May 2012 00:20:56 -0000 >> @@ -7884,6 +7934,9 @@ remote_insert_breakpoint (struct gdbarch >> if (remote_supports_cond_breakpoints ()) >> remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf); >> >> + if (remote_can_run_breakpoint_commands ()) >> + remote_add_target_side_commands (gdbarch, bp_tgt, p); >> + > If dprintf_style is "gdb", we shouldn't add target side commands, > otherwise print is executed in target side, rather than GDB side. This > causes two regressions in testing with gdbserver, > > FAIL: gdb.base/dprintf.exp: 1st dprintf, gdb > FAIL: gdb.base/dprintf.exp: 2nd dprintf, gdb > > We only add target side commands only if target supports breakpoint > commands, and dprintf_style is not "gdb". > > if (remote_can_run_breakpoint_commands () > && strcmp (dprintf_style, "gdb") != 0) > remote_add_target_side_commands (gdbarch, bp_tgt, p); Ideally, remote.c shouldn't have to know about dprintf details, so I put an equivalent test at the top of build_target_command_list, which is what one would expect to modify when the time comes to generalize. (I tried to get a contract to do the generalization this year, but no luck - maybe next year. :-) ) > + > + gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" "1st dprintf, agent" > + > + gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" "2nd dprintf, agent" > When we set dprintf style to agent, GDB can't receive such outputs, so > these two tests above should fail. We may need more thoughts on testing > output from agent. > Yeah, that's a head-scratcher; I looked around and didn't see any good examples of something doing that already. It seems like it ought to be possible though, seeing as how the agent dprintf output does end up in testsuite/gdb.log. In the meantime, I tweaked the test to just expect the usual result from a continue. I'll commit the updated patch below later this week if there are no obstacles. Stan stan@codesourcery.com 2012-06-25 Stan Shebs Add target-side support for dynamic printf. * NEWS: Mention the additional style. * breakpoint.h (struct bp_target_info): New fields tcommands, persist. (struct bp_location): New field cmd_bytecode. * breakpoint.c: Include format.h. (disconnected_dprintf): New global. (parse_cmd_to_aexpr): New function. (build_target_command_list): New function. (insert_bp_location): Call it. (remove_breakpoints_pid): Skip dprintf breakpoints. (print_one_breakpoint_location): Ditto. (dprintf_style_agent): New global. (dprintf_style_enums): Add dprintf_style_agent. (update_dprintf_command_list): Add agent case. (agent_printf_command): New function. (_initialize_breakpoint): Add new commands. * common/ax.def (printf): New bytecode. * ax.h (ax_string): Declare. * ax-gdb.h (gen_printf): Declare. * ax-gdb.c: Include cli-utils.h, format.h. (gen_printf): New function. (maint_agent_print_command): New function. (_initialize_ax_gdb): Add maint agent-printf command. * ax-general.c (ax_string): New function. (ax_print): Add printf disassembly. * Makefile.in (SFILES): Add format.c (COMMON_OBS): Add format.o. * common/format.h: New file. * common/format.c: New file. * printcmd.c: Include format.h. (ui_printf): Call parse_format_string. * remote.c (remote_state): New field breakpoint_commands. (PACKET_BreakpointCommands): New enum. (remote_breakpoint_commands_feature): New function. (remote_protocol_features): Add new BreakpointCommands entry. (remote_can_run_breakpoint_commands): New function. (remote_add_target_side_commands): New function. (remote_insert_breakpoint): Call it. (remote_insert_hw_breakpoint): Ditto. (_initialize_remote): Add new packet configuration for target-side breakpoint commands. * target.h (struct target_ops): New field to_can_run_breakpoint_commands. (target_can_run_breakpoint_commands): New macro. * target.c (update_current_target): Handle to_can_run_breakpoint_commands. [gdbserver] * Makefile.in (WARN_CFLAGS_NO_FORMAT): Define. (ax.o): Add it to build rule. (ax-ipa.o): Ditto. (OBS): Add format.o. (IPA_OBS): Add format.o. * server.c (handle_query): Claim support for breakpoint commands. (process_point_options): Add command case. (process_serial_event): Leave running if there are printfs in effect. * mem-break.h (any_persistent_commands): Declare. (add_breakpoint_commands): Declare. (gdb_no_commands_at_breakpoint): Declare. (run_breakpoint_commands): Declare. * mem-break.c (struct point_command_list): New struct. (struct breakpoint): New field command_list. (any_persistent_commands): New function. (add_commands_to_breakpoint): New function. (add_breakpoint_commands): New function. (gdb_no_commands_at_breakpoint): New function. (run_breakpoint_commands): New function. * linux-low.c (linux_wait_1): Test for and run breakpoint commands locally. * ax.c: Include format.h. (ax_printf): New function. (gdb_eval_agent_expr): Add printf opcode. [doc] * gdb.texinfo (Dynamic Printf): Mention agent style and disconnected dprintf. (Maintenance Commands): Describe maint agent-printf. (General Query Packets): Mention BreakpointCommands feature. (Packets): Document commands extension to Z0 packet. * agentexpr.texi (Bytecode Descriptions): Document printf bytecode. [testsuite] * gdb.base/dprintf.exp: Add agent style tests. --------------070501060306060009060108 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="dprintf-patch-5" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="dprintf-patch-5" Content-length: 110654 SW5kZXg6IE5FV1MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9ORVdTLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjUyOApkaWZmIC11IC1wIC1yMS41MjggTkVXUwotLS0gTkVXUwkyMyBKdW4g MjAxMiAyMjoyMzo0NiAtMDAwMAkxLjUyOAorKysgTkVXUwkyNSBKdW4gMjAx MiAxNToxMjo1NyAtMDAwMApAQCAtMjM5LDExICsyMzksMTIgQEAgc2V0IGRl YnVnIGF1dG8tbG9hZCBvbnxvZmYKIHNob3cgZGVidWcgYXV0by1sb2FkCiAg IENvbnRyb2wgZGlzcGxheSBvZiBkZWJ1Z2dpbmcgaW5mbyBmb3IgYXV0by1s b2FkaW5nIHRoZSBmaWxlcyBhYm92ZS4KIAotc2V0IGRwcmludGYtc3R5bGUg Z2RifGNhbGwKK3NldCBkcHJpbnRmLXN0eWxlIGdkYnxjYWxsfGFnZW50CiBz aG93IGRwcmludGYtc3R5bGUKLSAgQ29udHJvbCB0aGUgd2F5IGluIHdoaWNo IGEgZHluYW1pYyBwcmludGYgaXMgcGVyZm9ybWVkOyAiZ2RiIiByZXF1ZXN0 cwotICBhIEdEQiBwcmludGYgY29tbWFuZCwgd2hpbGUgImNhbGwiIGNhdXNl cyBkcHJpbnRmIHRvIGNhbGwgYSBmdW5jdGlvbgotICBpbiB0aGUgaW5mZXJp b3IuCisgIENvbnRyb2wgdGhlIHdheSBpbiB3aGljaCBhIGR5bmFtaWMgcHJp bnRmIGlzIHBlcmZvcm1lZDsgImdkYiIKKyAgcmVxdWVzdHMgYSBHREIgcHJp bnRmIGNvbW1hbmQsIHdoaWxlICJjYWxsIiBjYXVzZXMgZHByaW50ZiB0byBj YWxsIGEKKyAgZnVuY3Rpb24gaW4gdGhlIGluZmVyaW9yLiAgImFnZW50IiBy ZXF1ZXN0cyB0aGF0IHRoZSB0YXJnZXQgYWdlbnQKKyAgKHN1Y2ggYXMgR0RC c2VydmVyKSBkbyB0aGUgcHJpbnRpbmcuCiAKIHNldCBkcHJpbnRmLWZ1bmN0 aW9uIDxleHByPgogc2hvdyBkcHJpbnRmLWZ1bmN0aW9uCkBAIC0yNTIsNiAr MjUzLDExIEBAIHNob3cgZHByaW50Zi1jaGFubmVsCiAgIFNldCB0aGUgZnVu Y3Rpb24gYW5kIG9wdGlvbmFsIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjYWxs IHdoZW4gdXNpbmcKICAgdGhlICJjYWxsIiBzdHlsZSBvZiBkeW5hbWljIHBy aW50Zi4KIAorc2V0IGRpc2Nvbm5lY3RlZC1kcHJpbnRmIG9ufG9mZgorc2hv dyBkaXNjb25uZWN0ZWQtZHByaW50ZgorICBDb250cm9sIHdoZXRoZXIgYWdl bnQtc3R5bGUgZHluYW1pYyBwcmludGZzIGNvbnRpbnVlIHRvIGJlIGluIGVm ZmVjdAorICBhZnRlciBHREIgZGlzY29ubmVjdHMuCisKICogTmV3IGNvbmZp Z3VyZSBvcHRpb25zCiAKIC0td2l0aC1hdXRvLWxvYWQtZGlyCkluZGV4OiBN YWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ2RiL01ha2VmaWxlLmluLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjEyMDkKZGlmZiAtdSAtcCAtcjEuMTIwOSBNYWtlZmlsZS5pbgot LS0gTWFrZWZpbGUuaW4JMzAgTWF5IDIwMTIgMTk6MzE6NDQgLTAwMDAJMS4x MjA5CisrKyBNYWtlZmlsZS5pbgkyNSBKdW4gMjAxMiAxNToxMjo1OCAtMDAw MApAQCAtNzQ1LDcgKzc0NSw4IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEt bGFuZy5jIGFkYS10eXBlcHIKIAlhbm5vdGF0ZS5jIGNvbW1vbi9zaWduYWxz LmMgY29weWluZy5jIGRmcC5jIGdkYi5jIGluZi1jaGlsZC5jIFwKIAlyZWdz ZXQuYyBzb2wtdGhyZWFkLmMgd2luZG93cy10ZXJtY2FwLmMgXAogCWNvbW1v bi9jb21tb24tdXRpbHMuYyBjb21tb24veG1sLXV0aWxzLmMgXAotCWNvbW1v bi9wdGlkLmMgY29tbW9uL2J1ZmZlci5jIGdkYi1kbGZjbi5jIGNvbW1vbi9h Z2VudC5jCisJY29tbW9uL3B0aWQuYyBjb21tb24vYnVmZmVyLmMgZ2RiLWRs ZmNuLmMgY29tbW9uL2FnZW50LmMgXAorCWNvbW1vbi9mb3JtYXQuYwogCiBM SU5URklMRVMgPSAkKFNGSUxFUykgJChZWUZJTEVTKSAkKENPTkZJR19TUkNT KSBpbml0LmMKIApAQCAtODI3LDYgKzgyOCw3IEBAIGdudWxpYi9pbXBvcnQv ZXh0cmEvc25pcHBldC9hcmctbm9ubnVsbC4KIGdudWxpYi9pbXBvcnQvZXh0 cmEvc25pcHBldC93YXJuLW9uLXVzZS5oIFwKIGdudWxpYi9pbXBvcnQvc3Rk ZGVmLmluLmggZ251bGliL2ltcG9ydC9pbnR0eXBlcy5pbi5oIGlubGluZS1m cmFtZS5oIHNraXAuaCBcCiBjb21tb24vY29tbW9uLXV0aWxzLmggY29tbW9u L3htbC11dGlscy5oIGNvbW1vbi9idWZmZXIuaCBjb21tb24vcHRpZC5oIFwK K2NvbW1vbi9mb3JtYXQuaCBcCiBjb21tb24vbGludXgtb3NkYXRhLmggZ2Ri LWRsZmNuLmggYXV0by1sb2FkLmggcHJvYmUuaCBzdGFwLXByb2JlLmgKIAog IyBIZWFkZXIgZmlsZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGlyIGluIHRo ZW0sIG9yIHdoaWNoIGFyZSBpbiBvYmpkaXIuCkBAIC05MTYsNyArOTE4LDgg QEAgQ09NTU9OX09CUyA9ICQoREVQRklMRVMpICQoQ09ORklHX09CUykgJAog CXRhcmdldC1kZXNjcmlwdGlvbnMubyB0YXJnZXQtbWVtb3J5Lm8geG1sLXRk ZXNjLm8geG1sLWJ1aWx0aW4ubyBcCiAJaW5mZXJpb3IubyBvc2RhdGEubyBn ZGJfdXNsZWVwLm8gcmVjb3JkLm8gZ2NvcmUubyBcCiAJaml0Lm8gcHJvZ3Nw YWNlLm8gc2tpcC5vIHByb2JlLm8gXAotCWNvbW1vbi11dGlscy5vIGJ1ZmZl ci5vIHB0aWQubyBnZGItZGxmY24ubyBjb21tb24tYWdlbnQubworCWNvbW1v bi11dGlscy5vIGJ1ZmZlci5vIHB0aWQubyBnZGItZGxmY24ubyBjb21tb24t YWdlbnQubyBcCisJZm9ybWF0Lm8KIAogVFNPQlMgPSBpbmZsb3cubwogCkBA IC0xOTE2LDYgKzE5MTksMTAgQEAgYnVmZmVyLm86ICR7c3JjZGlyfS9jb21t b24vYnVmZmVyLmMKIAkkKENPTVBJTEUpICQoc3JjZGlyKS9jb21tb24vYnVm ZmVyLmMKIAkkKFBPU1RDT01QSUxFKQogCitmb3JtYXQubzogJHtzcmNkaXJ9 L2NvbW1vbi9mb3JtYXQuYworCSQoQ09NUElMRSkgJChzcmNkaXIpL2NvbW1v bi9mb3JtYXQuYworCSQoUE9TVENPTVBJTEUpCisKIGxpbnV4LW9zZGF0YS5v OiAke3NyY2Rpcn0vY29tbW9uL2xpbnV4LW9zZGF0YS5jCiAJJChDT01QSUxF KSAkKHNyY2RpcikvY29tbW9uL2xpbnV4LW9zZGF0YS5jCiAJJChQT1NUQ09N UElMRSkKSW5kZXg6IGF4LWdkYi5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvYXgtZ2RiLmMsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMTAxCmRpZmYgLXUgLXAgLXIxLjEwMSBheC1nZGIu YwotLS0gYXgtZ2RiLmMJMTggTWF5IDIwMTIgMjE6MDI6NDcgLTAwMDAJMS4x MDEKKysrIGF4LWdkYi5jCTI1IEp1biAyMDEyIDE1OjEyOjU4IC0wMDAwCkBA IC00MSwxMCArNDEsMTMgQEAKICNpbmNsdWRlICJ0cmFjZXBvaW50LmgiCiAj aW5jbHVkZSAiY3Atc3VwcG9ydC5oIgogI2luY2x1ZGUgImFyY2gtdXRpbHMu aCIKKyNpbmNsdWRlICJjbGkvY2xpLXV0aWxzLmgiCiAKICNpbmNsdWRlICJ2 YWxwcmludC5oIgogI2luY2x1ZGUgImMtbGFuZy5oIgogCisjaW5jbHVkZSAi Zm9ybWF0LmgiCisKIC8qIFRvIG1ha2Ugc2Vuc2Ugb2YgdGhpcyBmaWxlLCB5 b3Ugc2hvdWxkIHJlYWQgZG9jL2FnZW50ZXhwci50ZXhpLgogICAgVGhlbiBs b29rIGF0IHRoZSB0eXBlcyBhbmQgZW51bXMgaW4gYXgtZ2RiLmguICBGb3Ig dGhlIGNvZGUgaXRzZWxmLAogICAgbG9vayBhdCBnZW5fZXhwciwgdG93YXJk cyB0aGUgYm90dG9tOyB0aGF0J3MgdGhlIG1haW4gZnVuY3Rpb24gdGhhdApA QCAtMjUwMyw2ICsyNTA2LDU5IEBAIGdlbl90cmFjZV9mb3JfcmV0dXJuX2Fk ZHJlc3MgKENPUkVfQUREUiAKICAgcmV0dXJuIGF4OwogfQogCisvKiBHaXZl biBhIGNvbGxlY3Rpb24gb2YgcHJpbnRmLXN0eWxlIGFyZ3VtZW50cywgZ2Vu ZXJhdGUgY29kZSB0bworICAgZXZhbHVhdGUgdGhlIGFyZ3VtZW50cyBhbmQg cGFzcyBldmVyeXRoaW5nIHRvIGEgc3BlY2lhbAorICAgYnl0ZWNvZGUuICAq LworCitzdHJ1Y3QgYWdlbnRfZXhwciAqCitnZW5fcHJpbnRmIChDT1JFX0FE RFIgc2NvcGUsIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorCSAgICBDT1JF X0FERFIgZnVuY3Rpb24sIExPTkdFU1QgY2hhbm5lbCwKKwkgICAgY2hhciAq Zm9ybWF0LCBpbnQgZm10bGVuLAorCSAgICBzdHJ1Y3QgZm9ybWF0X3BpZWNl ICpmcmFncywKKwkgICAgaW50IG5hcmdzLCBzdHJ1Y3QgZXhwcmVzc2lvbiAq KmV4cHJzKQoreworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwcjsKKyAgc3Ry dWN0IGNsZWFudXAgKm9sZF9jaGFpbiA9IDA7CisgIHN0cnVjdCBhZ2VudF9l eHByICpheCA9IG5ld19hZ2VudF9leHByIChnZGJhcmNoLCBzY29wZSk7Cisg IHVuaW9uIGV4cF9lbGVtZW50ICpwYzsKKyAgc3RydWN0IGF4c192YWx1ZSB2 YWx1ZTsKKyAgaW50IGksIHRlbSwgYm90LCBmciwgZmxlbjsKKyAgY2hhciAq Zm10OworCisgIG9sZF9jaGFpbiA9IG1ha2VfY2xlYW51cF9mcmVlX2FnZW50 X2V4cHIgKGF4KTsKKworICAvKiBFdmFsdWF0ZSBhbmQgcHVzaCB0aGUgYXJn cyBvbiB0aGUgc3RhY2sgaW4gcmV2ZXJzZSBvcmRlciwKKyAgICAgZm9yIHNp bXBsaWNpdHkgb2YgY29sbGVjdGluZyB0aGVtIG9uIHRoZSB0YXJnZXQgc2lk ZS4gICovCisgIGZvciAodGVtID0gbmFyZ3MgLSAxOyB0ZW0gPj0gMDsgLS10 ZW0pCisgICAgeworICAgICAgcGMgPSBleHByc1t0ZW1dLT5lbHRzOworICAg ICAgLyogV2UncmUgY29tcHV0aW5nIHZhbHVlcywgbm90IGRvaW5nIHNpZGUg ZWZmZWN0cy4gICovCisgICAgICB0cmFjZV9rbHVkZ2UgPSAwOworICAgICAg dmFsdWUub3B0aW1pemVkX291dCA9IDA7CisgICAgICBnZW5fZXhwciAoZXhw cnNbdGVtXSwgJnBjLCBheCwgJnZhbHVlKTsKKyAgICAgIHJlcXVpcmVfcnZh bHVlIChheCwgJnZhbHVlKTsKKyAgICB9CisKKyAgLyogUHVzaCBmdW5jdGlv biBhbmQgY2hhbm5lbC4gICovCisgIGF4X2NvbnN0X2wgKGF4LCBjaGFubmVs KTsKKyAgYXhfY29uc3RfbCAoYXgsIGZ1bmN0aW9uKTsKKworICAvKiBJc3N1 ZSB0aGUgcHJpbnRmIGJ5dGVjb2RlIHByb3Blci4gICovCisgIGF4X3NpbXBs ZSAoYXgsIGFvcF9wcmludGYpOworICBheF9zaW1wbGUgKGF4LCBuYXJncyk7 CisgIGF4X3N0cmluZyAoYXgsIGZvcm1hdCwgZm10bGVuKTsKKworICAvKiBB bmQgdGVybWluYXRlLiAgKi8KKyAgYXhfc2ltcGxlIChheCwgYW9wX2VuZCk7 CisKKyAgLyogV2UgaGF2ZSBzdWNjZXNzZnVsbHkgYnVpbHQgdGhlIGFnZW50 IGV4cHIsIHNvIGNhbmNlbCB0aGUgY2xlYW51cAorICAgICByZXF1ZXN0LiAg SWYgd2UgYWRkIG1vcmUgY2xlYW51cHMgdGhhdCB3ZSBhbHdheXMgd2FudCBk b25lLCB0aGlzCisgICAgIHdpbGwgaGF2ZSB0byBnZXQgbW9yZSBjb21wbGlj YXRlZC4gICovCisgIGRpc2NhcmRfY2xlYW51cHMgKG9sZF9jaGFpbik7CisK KyAgcmV0dXJuIGF4OworfQorCiBzdGF0aWMgdm9pZAogYWdlbnRfY29tbWFu ZCAoY2hhciAqZXhwLCBpbnQgZnJvbV90dHkpCiB7CkBAIC0yNTg2LDYgKzI2 NDIsODggQEAgYWdlbnRfZXZhbF9jb21tYW5kIChjaGFyICpleHAsIGludCBm cm9tXwogICBkb19jbGVhbnVwcyAob2xkX2NoYWluKTsKICAgZG9udF9yZXBl YXQgKCk7CiB9CisvKiBQYXJzZSB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiwgY29t cGlsZSBpdCBpbnRvIGFuIGFnZW50IGV4cHJlc3Npb24KKyAgIHRoYXQgZG9l cyBhIHByaW50ZiwgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdGluZyBleHByZXNz aW9uLiAgKi8KKworc3RhdGljIHZvaWQKK21haW50X2FnZW50X3ByaW50Zl9j b21tYW5kIChjaGFyICpleHAsIGludCBmcm9tX3R0eSkKK3sKKyAgc3RydWN0 IGNsZWFudXAgKm9sZF9jaGFpbiA9IDA7CisgIHN0cnVjdCBleHByZXNzaW9u ICpleHByOworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJndmVjWzEwMF07Cisg IHN0cnVjdCBhZ2VudF9leHByICphZ2VudDsKKyAgc3RydWN0IGZyYW1lX2lu Zm8gKmZpID0gZ2V0X2N1cnJlbnRfZnJhbWUgKCk7CS8qIG5lZWQgY3VycmVu dCBzY29wZSAqLworICBjaGFyICpjbWRyZXN0OworICBjaGFyICpmb3JtYXRf c3RhcnQsICpmb3JtYXRfZW5kOworICBzdHJ1Y3QgZm9ybWF0X3BpZWNlICpm cGllY2VzOworICBpbnQgbmFyZ3M7CisKKyAgLyogV2UgZG9uJ3QgZGVhbCB3 aXRoIG92ZXJsYXkgZGVidWdnaW5nIGF0IHRoZSBtb21lbnQuICBXZSBuZWVk IHRvCisgICAgIHRoaW5rIG1vcmUgY2FyZWZ1bGx5IGFib3V0IHRoaXMuICBJ ZiB5b3UgY29weSB0aGlzIGNvZGUgaW50bworICAgICBhbm90aGVyIGNvbW1h bmQsIGNoYW5nZSB0aGUgZXJyb3IgbWVzc2FnZTsgdGhlIHVzZXIgc2hvdWxk bid0CisgICAgIGhhdmUgdG8ga25vdyBhbnl0aGluZyBhYm91dCBhZ2VudCBl eHByZXNzaW9ucy4gICovCisgIGlmIChvdmVybGF5X2RlYnVnZ2luZykKKyAg ICBlcnJvciAoXygiR0RCIGNhbid0IGRvIGFnZW50IGV4cHJlc3Npb24gdHJh bnNsYXRpb24gd2l0aCBvdmVybGF5cy4iKSk7CisKKyAgaWYgKGV4cCA9PSAw KQorICAgIGVycm9yX25vX2FyZyAoXygiZXhwcmVzc2lvbiB0byB0cmFuc2xh dGUiKSk7CisKKyAgY21kcmVzdCA9IGV4cDsKKworICBjbWRyZXN0ID0gc2tp cF9zcGFjZXMgKGNtZHJlc3QpOworCisgIGlmICgqY21kcmVzdCsrICE9ICci JykKKyAgICBlcnJvciAoXygiTXVzdCBzdGFydCB3aXRoIGEgZm9ybWF0IHN0 cmluZy4iKSk7CisKKyAgZm9ybWF0X3N0YXJ0ID0gY21kcmVzdDsKKworICBm cGllY2VzID0gcGFyc2VfZm9ybWF0X3N0cmluZyAoJmNtZHJlc3QpOworCisg IG9sZF9jaGFpbiA9IG1ha2VfY2xlYW51cCAoZnJlZV9mb3JtYXRfcGllY2Vz X2NsZWFudXAsICZmcGllY2VzKTsKKworICBmb3JtYXRfZW5kID0gY21kcmVz dDsKKworICBpZiAoKmNtZHJlc3QrKyAhPSAnIicpCisgICAgZXJyb3IgKF8o IkJhZCBmb3JtYXQgc3RyaW5nLCBub24tdGVybWluYXRlZCAnXCInLiIpKTsK KyAgCisgIGNtZHJlc3QgPSBza2lwX3NwYWNlcyAoY21kcmVzdCk7CisKKyAg aWYgKCpjbWRyZXN0ICE9ICcsJyAmJiAqY21kcmVzdCAhPSAwKQorICAgIGVy cm9yIChfKCJJbnZhbGlkIGFyZ3VtZW50IHN5bnRheCIpKTsKKworICBpZiAo KmNtZHJlc3QgPT0gJywnKQorICAgIGNtZHJlc3QrKzsKKyAgY21kcmVzdCA9 IHNraXBfc3BhY2VzIChjbWRyZXN0KTsKKworICBuYXJncyA9IDA7CisgIHdo aWxlICgqY21kcmVzdCAhPSAnXDAnKQorICAgIHsKKyAgICAgIGNoYXIgKmNt ZDE7CisKKyAgICAgIGNtZDEgPSBjbWRyZXN0OworICAgICAgZXhwciA9IHBh cnNlX2V4cF8xICgmY21kMSwgKHN0cnVjdCBibG9jayAqKSAwLCAxKTsKKyAg ICAgIGFyZ3ZlY1tuYXJnc10gPSBleHByOworICAgICAgKytuYXJnczsKKyAg ICAgIGNtZHJlc3QgPSBjbWQxOworICAgICAgaWYgKCpjbWRyZXN0ID09ICcs JykKKwkrK2NtZHJlc3Q7CisgICAgICAvKiBlbHNlIGNvbXBsYWluPyAqLwor ICAgIH0KKworCisgIGFnZW50ID0gZ2VuX3ByaW50ZiAoZ2V0X2ZyYW1lX3Bj IChmaSksIGdldF9jdXJyZW50X2FyY2ggKCksIDAsIDAsCisJCSAgICAgIGZv cm1hdF9zdGFydCwgZm9ybWF0X2VuZCAtIGZvcm1hdF9zdGFydCwKKwkJICAg ICAgZnBpZWNlcywgbmFyZ3MsIGFyZ3ZlYyk7CisgIG1ha2VfY2xlYW51cF9m cmVlX2FnZW50X2V4cHIgKGFnZW50KTsKKyAgYXhfcmVxcyAoYWdlbnQpOwor ICBheF9wcmludCAoZ2RiX3N0ZG91dCwgYWdlbnQpOworCisgIC8qIEl0IHdv dWxkIGJlIG5pY2UgdG8gY2FsbCBheF9yZXFzIGhlcmUgdG8gZ2F0aGVyIHNv bWUgZ2VuZXJhbCBpbmZvCisgICAgIGFib3V0IHRoZSBleHByZXNzaW9uLCBh bmQgdGhlbiBwcmludCBvdXQgdGhlIHJlc3VsdC4gICovCisKKyAgZG9fY2xl YW51cHMgKG9sZF9jaGFpbik7CisgIGRvbnRfcmVwZWF0ICgpOworfQogDAog CiAvKiBJbml0aWFsaXphdGlvbiBjb2RlLiAgKi8KQEAgLTI2MDMsNCArMjc0 MSw5IEBAIF9pbml0aWFsaXplX2F4X2dkYiAodm9pZCkKIAkgICBfKCJUcmFu c2xhdGUgYW4gZXhwcmVzc2lvbiBpbnRvIHJlbW90ZSAiCiAJICAgICAiYWdl bnQgYnl0ZWNvZGUgZm9yIGV2YWx1YXRpb24uIiksCiAJICAgJm1haW50ZW5h bmNlbGlzdCk7CisKKyAgYWRkX2NtZCAoImFnZW50LXByaW50ZiIsIGNsYXNz X21haW50ZW5hbmNlLCBtYWludF9hZ2VudF9wcmludGZfY29tbWFuZCwKKwkg ICBfKCJUcmFuc2xhdGUgYW4gZXhwcmVzc2lvbiBpbnRvIHJlbW90ZSAiCisJ ICAgICAiYWdlbnQgYnl0ZWNvZGUgZm9yIGV2YWx1YXRpb24gYW5kIGRpc3Bs YXkgdGhlIGJ5dGVjb2Rlcy4iKSwKKwkgICAmbWFpbnRlbmFuY2VsaXN0KTsK IH0KSW5kZXg6IGF4LWdkYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvYXgtZ2RiLmgsdgpyZXRyaWV2aW5n IHJldmlzaW9uIDEuMjQKZGlmZiAtdSAtcCAtcjEuMjQgYXgtZ2RiLmgKLS0t IGF4LWdkYi5oCTI3IEFwciAyMDEyIDIwOjQ3OjUxIC0wMDAwCTEuMjQKKysr IGF4LWdkYi5oCTI1IEp1biAyMDEyIDE1OjEyOjU4IC0wMDAwCkBAIC0xMTUs NiArMTE1LDEyIEBAIGV4dGVybiB2b2lkIGdlbl9leHByIChzdHJ1Y3QgZXhw cmVzc2lvbiAKIAogZXh0ZXJuIHZvaWQgcmVxdWlyZV9ydmFsdWUgKHN0cnVj dCBhZ2VudF9leHByICpheCwgc3RydWN0IGF4c192YWx1ZSAqdmFsdWUpOwog CitzdHJ1Y3QgZm9ybWF0X3BpZWNlOworZXh0ZXJuIHN0cnVjdCBhZ2VudF9l eHByICpnZW5fcHJpbnRmIChDT1JFX0FERFIsIHN0cnVjdCBnZGJhcmNoICos CisJCQkJICAgICAgQ09SRV9BRERSLCBMT05HRVNULCBjaGFyICosIGludCwK KwkJCQkgICAgICBzdHJ1Y3QgZm9ybWF0X3BpZWNlICosCisJCQkJICAgICAg aW50LCBzdHJ1Y3QgZXhwcmVzc2lvbiAqKik7CisKIGV4dGVybiBpbnQgdHJh Y2Vfa2x1ZGdlOwogZXh0ZXJuIGludCB0cmFjZV9zdHJpbmdfa2x1ZGdlOwog CkluZGV4OiBheC1nZW5lcmFsLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9heC1nZW5lcmFsLmMsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMjkKZGlmZiAtdSAtcCAtcjEuMjkgYXgtZ2Vu ZXJhbC5jCi0tLSBheC1nZW5lcmFsLmMJNCBKYW4gMjAxMiAwODoxNjo1OSAt MDAwMAkxLjI5CisrKyBheC1nZW5lcmFsLmMJMjUgSnVuIDIwMTIgMTU6MTI6 NTggLTAwMDAKQEAgLTMzMCw2ICszMzAsMjMgQEAgYXhfdHN2IChzdHJ1Y3Qg YWdlbnRfZXhwciAqeCwgZW51bSBhZ2VudAogICB4LT5idWZbeC0+bGVuICsg Ml0gPSAobnVtKSAmIDB4ZmY7CiAgIHgtPmxlbiArPSAzOwogfQorCisvKiBB cHBlbmQgYSBzdHJpbmcgdG8gdGhlIGV4cHJlc3Npb24uICBOb3RlIHRoYXQg dGhlIHN0cmluZyBpcyBnb2luZworICAgaW50byB0aGUgYnl0ZWNvZGVzIGRp cmVjdGx5LCBub3Qgb24gdGhlIHN0YWNrLiAgQXMgYSBwcmVjYXV0aW9uLAor ICAgaW5jbHVkZSBib3RoIGxlbmd0aCBhcyBwcmVmaXgsIGFuZCB0ZXJtaW5h dGUgd2l0aCBhIE5VTC4gICovCisKK3ZvaWQKK2F4X3N0cmluZyAoc3RydWN0 IGFnZW50X2V4cHIgKngsIGNoYXIgKnN0ciwgaW50IHNsZW4pCit7CisgIGlu dCBpOworCisgIGdyb3dfZXhwciAoeCwgc2xlbiArIDMpOworICB4LT5idWZb eC0+bGVuKytdID0gKChzbGVuICsgMSkgPj4gOCkgJiAweGZmOworICB4LT5i dWZbeC0+bGVuKytdID0gKHNsZW4gKyAxKSAmIDB4ZmY7CisgIGZvciAoaSA9 IDA7IGkgPCBzbGVuOyArK2kpCisgICAgeC0+YnVmW3gtPmxlbisrXSA9IHN0 cltpXTsKKyAgeC0+YnVmW3gtPmxlbisrXSA9ICdcMCc7Cit9CiAMCiAKIApA QCAtMzkxLDYgKzQwOCwxOSBAQCBheF9wcmludCAoc3RydWN0IHVpX2ZpbGUg KmYsIHN0cnVjdCBhZ2VuCiAJICBwcmludF9sb25nZXN0IChmLCAnZCcsIDAs CiAJCQkgcmVhZF9jb25zdCAoeCwgaSArIDEsIGFvcF9tYXBbb3BdLm9wX3Np emUpKTsKIAl9CisgICAgICAvKiBIYW5kbGUgdGhlIGNvbXBsaWNhdGVkIHBy aW50ZiBhcmd1bWVudHMgc3BlY2lhbGx5LiAgKi8KKyAgICAgIGVsc2UgaWYg KG9wID09IGFvcF9wcmludGYpCisJeworCSAgaW50IHNsZW4sIG5hcmdzOwor CisJICArK2k7CisJICBuYXJncyA9IHgtPmJ1ZltpKytdOworCSAgc2xlbiA9 IHgtPmJ1ZltpKytdOworCSAgc2xlbiA9IHNsZW4gKiAyNTYgKyB4LT5idWZb aSsrXTsKKwkgIGZwcmludGZfZmlsdGVyZWQgKGYsICIgXCIlc1wiLCAlZCBh cmdzIiwKKwkJCSAgICAmKHgtPmJ1ZltpXSksIG5hcmdzKTsKKwkgIGkgKz0g c2xlbiAtIDE7CisJfQogICAgICAgZnByaW50Zl9maWx0ZXJlZCAoZiwgIlxu Iik7CiAgICAgICBpICs9IDEgKyBhb3BfbWFwW29wXS5vcF9zaXplOwogCklu ZGV4OiBheC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j dnMvc3JjL3NyYy9nZGIvYXguaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y MQpkaWZmIC11IC1wIC1yMS4yMSBheC5oCi0tLSBheC5oCTI0IEZlYiAyMDEy IDE1OjEwOjU4IC0wMDAwCTEuMjEKKysrIGF4LmgJMjUgSnVuIDIwMTIgMTU6 MTI6NTggLTAwMDAKQEAgLTIxOSw2ICsyMTksOSBAQCBleHRlcm4gdm9pZCBh eF9yZWdfbWFzayAoc3RydWN0IGFnZW50X2V4CiAKIC8qIEFzc2VtYmxlIGNv ZGUgdG8gb3BlcmF0ZSBvbiBhIHRyYWNlIHN0YXRlIHZhcmlhYmxlLiAgKi8K IGV4dGVybiB2b2lkIGF4X3RzdiAoc3RydWN0IGFnZW50X2V4cHIgKmV4cHIs IGVudW0gYWdlbnRfb3Agb3AsIGludCBudW0pOworCisvKiBBcHBlbmQgYSBz dHJpbmcgdG8gdGhlIGJ5dGVjb2RlIHN0cmVhbS4gICovCitleHRlcm4gdm9p ZCBheF9zdHJpbmcgKHN0cnVjdCBhZ2VudF9leHByICp4LCBjaGFyICpzdHIs IGludCBzbGVuKTsKIAwKIAogLyogRnVuY3Rpb25zIGZvciBwcmludGluZyBv dXQgZXhwcmVzc2lvbnMsIGFuZCBvdGhlcndpc2UgZGVidWdnaW5nCkluZGV4 OiBicmVha3BvaW50LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9icmVha3BvaW50LmMsdgpyZXRyaWV2aW5n IHJldmlzaW9uIDEuNjg0CmRpZmYgLXUgLXAgLXIxLjY4NCBicmVha3BvaW50 LmMKLS0tIGJyZWFrcG9pbnQuYwkxOCBKdW4gMjAxMiAxNzoyODozNiAtMDAw MAkxLjY4NAorKysgYnJlYWtwb2ludC5jCTI1IEp1biAyMDEyIDE1OjEyOjU4 IC0wMDAwCkBAIC03MCw2ICs3MCw4IEBACiAjaW5jbHVkZSAiYXgtZ2RiLmgi CiAjaW5jbHVkZSAiZHVtbXktZnJhbWUuaCIKIAorI2luY2x1ZGUgImZvcm1h dC5oIgorCiAvKiByZWFkbGluZSBpbmNsdWRlIGZpbGVzICovCiAjaW5jbHVk ZSAicmVhZGxpbmUvcmVhZGxpbmUuaCIKICNpbmNsdWRlICJyZWFkbGluZS9o aXN0b3J5LmgiCkBAIC0zMDEsNiArMzAzLDQ1IEBAIHN0YXRpYyBzdHJ1Y3Qg YnJlYWtwb2ludF9vcHMgYmtwdF9wcm9iZV8KIC8qIER5bmFtaWMgcHJpbnRm IGNsYXNzIHR5cGUuICAqLwogc3RhdGljIHN0cnVjdCBicmVha3BvaW50X29w cyBkcHJpbnRmX2JyZWFrcG9pbnRfb3BzOwogCisvKiBUaGUgc3R5bGUgaW4g d2hpY2ggdG8gcGVyZm9ybSBhIGR5bmFtaWMgcHJpbnRmLiAgVGhpcyBpcyBh IHVzZXIKKyAgIG9wdGlvbiBiZWNhdXNlIGRpZmZlcmVudCBvdXRwdXQgb3B0 aW9ucyBoYXZlIGRpZmZlcmVudCB0cmFkZW9mZnM7CisgICBpZiBHREIgZG9l cyB0aGUgcHJpbnRpbmcsIHRoZXJlIGlzIGJldHRlciBlcnJvciBoYW5kbGlu ZyBpZiB0aGVyZQorICAgaXMgYSBwcm9ibGVtIHdpdGggYW55IG9mIHRoZSBh cmd1bWVudHMsIGJ1dCB1c2luZyBhbiBpbmZlcmlvcgorICAgZnVuY3Rpb24g bGV0cyB5b3UgaGF2ZSBzcGVjaWFsLXB1cnBvc2UgcHJpbnRlcnMgYW5kIHNl bmRpbmcgb2YKKyAgIG91dHB1dCB0byB0aGUgc2FtZSBwbGFjZSBhcyBjb21w aWxlZC1pbiBwcmludCBmdW5jdGlvbnMuICAqLworCitzdGF0aWMgY29uc3Qg Y2hhciBkcHJpbnRmX3N0eWxlX2dkYltdID0gImdkYiI7CitzdGF0aWMgY29u c3QgY2hhciBkcHJpbnRmX3N0eWxlX2NhbGxbXSA9ICJjYWxsIjsKK3N0YXRp YyBjb25zdCBjaGFyIGRwcmludGZfc3R5bGVfYWdlbnRbXSA9ICJhZ2VudCI7 CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZHByaW50Zl9zdHlsZV9lbnVt c1tdID0geworICBkcHJpbnRmX3N0eWxlX2dkYiwKKyAgZHByaW50Zl9zdHls ZV9jYWxsLAorICBkcHJpbnRmX3N0eWxlX2FnZW50LAorICBOVUxMCit9Owor c3RhdGljIGNvbnN0IGNoYXIgKmRwcmludGZfc3R5bGUgPSBkcHJpbnRmX3N0 eWxlX2dkYjsKKworLyogVGhlIGZ1bmN0aW9uIHRvIHVzZSBmb3IgZHluYW1p YyBwcmludGYgaWYgdGhlIHByZWZlcnJlZCBzdHlsZSBpcyB0bworICAgY2Fs bCBpbnRvIHRoZSBpbmZlcmlvci4gIFRoZSB2YWx1ZSBpcyBzaW1wbHkgYSBz dHJpbmcgdGhhdCBpcworICAgY29waWVkIGludG8gdGhlIGNvbW1hbmQsIHNv IGl0IGNhbiBiZSBhbnl0aGluZyB0aGF0IEdEQiBjYW4KKyAgIGV2YWx1YXRl IHRvIGEgY2FsbGFibGUgYWRkcmVzcywgbm90IG5lY2Vzc2FyaWx5IGEgZnVu Y3Rpb24gbmFtZS4gICovCisKK3N0YXRpYyBjaGFyICpkcHJpbnRmX2Z1bmN0 aW9uID0gIiI7CisKKy8qIFRoZSBjaGFubmVsIHRvIHVzZSBmb3IgZHluYW1p YyBwcmludGYgaWYgdGhlIHByZWZlcnJlZCBzdHlsZSBpcyB0bworICAgY2Fs bCBpbnRvIHRoZSBpbmZlcmlvcjsgaWYgYSBub25lbXB0eSBzdHJpbmcsIGl0 IHdpbGwgYmUgcGFzc2VkIHRvCisgICB0aGUgY2FsbCBhcyB0aGUgZmlyc3Qg YXJndW1lbnQsIHdpdGggdGhlIGZvcm1hdCBzdHJpbmcgYXMgdGhlCisgICBz ZWNvbmQuICBBcyB3aXRoIHRoZSBkcHJpbnRmIGZ1bmN0aW9uLCB0aGlzIGNh biBiZSBhbnl0aGluZyB0aGF0CisgICBHREIga25vd3MgaG93IHRvIGV2YWx1 YXRlLCBzbyBpbiBhZGRpdGlvbiB0byBjb21tb24gY2hvaWNlcyBsaWtlCisg ICAic3RkZXJyIiwgdGhpcyBjb3VsZCBiZSBhbiBhcHAtc3BlY2lmaWMgZXhw cmVzc2lvbiBsaWtlCisgICAibXlzdHJlYW1zW2N1cmxvZ2dlcl0iLiAgKi8K Kworc3RhdGljIGNoYXIgKmRwcmludGZfY2hhbm5lbCA9ICIiOworCisvKiBU cnVlIGlmIGRwcmludGYgY29tbWFuZHMgc2hvdWxkIGNvbnRpbnVlIHRvIG9w ZXJhdGUgZXZlbiBpZiBHREIKKyAgIGhhcyBkaXNjb25uZWN0ZWQuICAqLwor c3RhdGljIGludCBkaXNjb25uZWN0ZWRfZHByaW50ZiA9IDE7CisKIC8qIEEg cmVmZXJlbmNlLWNvdW50ZWQgc3RydWN0IGNvbW1hbmRfbGluZS4gIFRoaXMg bGV0cyBtdWx0aXBsZQogICAgYnJlYWtwb2ludHMgc2hhcmUgYSBzaW5nbGUg Y29tbWFuZCBsaXN0LiAgKi8KIHN0cnVjdCBjb3VudGVkX2NvbW1hbmRfbGlu ZQpAQCAtMjEzOSw2ICsyMTgwLDE5NiBAQCBidWlsZF90YXJnZXRfY29uZGl0 aW9uX2xpc3QgKHN0cnVjdCBicF9sCiAgIHJldHVybjsKIH0KIAorLyogUGFy c2VzIGEgY29tbWFuZCBkZXNjcmliZWQgYnkgc3RyaW5nIENNRCBpbnRvIGFu IGFnZW50IGV4cHJlc3Npb24KKyAgIGJ5dGVjb2RlIHN1aXRhYmxlIGZvciBl dmFsdWF0aW9uIGJ5IHRoZSBieXRlY29kZSBpbnRlcnByZXRlci4KKyAgIFJl dHVybiBOVUxMIGlmIHRoZXJlIHdhcyBhbnkgZXJyb3IgZHVyaW5nIHBhcnNp bmcuICAqLworCitzdGF0aWMgc3RydWN0IGFnZW50X2V4cHIgKgorcGFyc2Vf Y21kX3RvX2FleHByIChDT1JFX0FERFIgc2NvcGUsIGNoYXIgKmNtZCkKK3sK KyAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IDA7CisgIHN0cnVj dCBleHByZXNzaW9uICpleHByLCAqKmFyZ3ZlYzsKKyAgc3RydWN0IGFnZW50 X2V4cHIgKmFleHByID0gTlVMTDsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9j aGFpbiA9IE5VTEw7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9u IGV4OworICBjaGFyICpjbWRyZXN0OworICBjaGFyICpmb3JtYXRfc3RhcnQs ICpmb3JtYXRfZW5kOworICBzdHJ1Y3QgZm9ybWF0X3BpZWNlICpmcGllY2Vz OworICBpbnQgbmFyZ3M7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0g Z2V0X2N1cnJlbnRfYXJjaCAoKTsKKworICBpZiAoIWNtZCkKKyAgICByZXR1 cm4gTlVMTDsKKworICBjbWRyZXN0ID0gY21kOworCisgIGlmICgqY21kcmVz dCA9PSAnLCcpCisgICAgKytjbWRyZXN0OworICBjbWRyZXN0ID0gc2tpcF9z cGFjZXMgKGNtZHJlc3QpOworCisgIGlmICgqY21kcmVzdCsrICE9ICciJykK KyAgICBlcnJvciAoXygiTm8gZm9ybWF0IHN0cmluZyBmb2xsb3dpbmcgdGhl IGxvY2F0aW9uIikpOworCisgIGZvcm1hdF9zdGFydCA9IGNtZHJlc3Q7CisK KyAgZnBpZWNlcyA9IHBhcnNlX2Zvcm1hdF9zdHJpbmcgKCZjbWRyZXN0KTsK KworICBvbGRfY2xlYW51cHMgPSBtYWtlX2NsZWFudXAgKGZyZWVfZm9ybWF0 X3BpZWNlc19jbGVhbnVwLCAmZnBpZWNlcyk7CisKKyAgZm9ybWF0X2VuZCA9 IGNtZHJlc3Q7CisKKyAgaWYgKCpjbWRyZXN0KysgIT0gJyInKQorICAgIGVy cm9yIChfKCJCYWQgZm9ybWF0IHN0cmluZywgbm9uLXRlcm1pbmF0ZWQgJ1wi Jy4iKSk7CisgIAorICBjbWRyZXN0ID0gc2tpcF9zcGFjZXMgKGNtZHJlc3Qp OworCisgIGlmICghKCpjbWRyZXN0ID09ICcsJyB8fCAqY21kcmVzdCA9PSAn XDAnKSkKKyAgICBlcnJvciAoXygiSW52YWxpZCBhcmd1bWVudCBzeW50YXgi KSk7CisKKyAgaWYgKCpjbWRyZXN0ID09ICcsJykKKyAgICBjbWRyZXN0Kys7 CisgIGNtZHJlc3QgPSBza2lwX3NwYWNlcyAoY21kcmVzdCk7CisKKyAgLyog Rm9yIGVhY2ggYXJndW1lbnQsIG1ha2UgYW4gZXhwcmVzc2lvbi4gICovCisK KyAgYXJndmVjID0gKHN0cnVjdCBleHByZXNzaW9uICoqKSBhbGxvY2EgKHN0 cmxlbiAoY21kKQorCQkJCQkgKiBzaXplb2YgKHN0cnVjdCBleHByZXNzaW9u ICopKTsKKworICBuYXJncyA9IDA7CisgIHdoaWxlICgqY21kcmVzdCAhPSAn XDAnKQorICAgIHsKKyAgICAgIGNoYXIgKmNtZDE7CisKKyAgICAgIGNtZDEg PSBjbWRyZXN0OworICAgICAgZXhwciA9IHBhcnNlX2V4cF8xICgmY21kMSwg YmxvY2tfZm9yX3BjIChzY29wZSksIDEpOworICAgICAgYXJndmVjW25hcmdz KytdID0gZXhwcjsKKyAgICAgIGNtZHJlc3QgPSBjbWQxOworICAgICAgaWYg KCpjbWRyZXN0ID09ICcsJykKKwkrK2NtZHJlc3Q7CisgICAgfQorCisgIC8q IFdlIGRvbid0IHdhbnQgdG8gc3RvcCBwcm9jZXNzaW5nLCBzbyBjYXRjaCBh bnkgZXJyb3JzCisgICAgIHRoYXQgbWF5IHNob3cgdXAuICAqLworICBUUllf Q0FUQ0ggKGV4LCBSRVRVUk5fTUFTS19FUlJPUikKKyAgICB7CisgICAgICBh ZXhwciA9IGdlbl9wcmludGYgKHNjb3BlLCBnZGJhcmNoLCAwLCAwLAorCQkJ ICBmb3JtYXRfc3RhcnQsIGZvcm1hdF9lbmQgLSBmb3JtYXRfc3RhcnQsCisJ CQkgIGZwaWVjZXMsIG5hcmdzLCBhcmd2ZWMpOworICAgIH0KKworICBpZiAo ZXgucmVhc29uIDwgMCkKKyAgICB7CisgICAgICAvKiBJZiB3ZSBnb3QgaGVy ZSwgaXQgbWVhbnMgdGhlIGNvbW1hbmQgY291bGQgbm90IGJlIHBhcnNlZCB0 byBhIHZhbGlkCisJIGJ5dGVjb2RlIGV4cHJlc3Npb24gYW5kIHRodXMgY2Fu J3QgYmUgZXZhbHVhdGVkIG9uIHRoZSB0YXJnZXQncyBzaWRlLgorCSBJdCdz IG5vIHVzZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgb3RoZXIgY29tbWFuZHMu ICAqLworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIGRvX2NsZWFu dXBzIChvbGRfY2xlYW51cHMpOworCisgIC8qIFdlIGhhdmUgYSB2YWxpZCBh Z2VudCBleHByZXNzaW9uLCByZXR1cm4gaXQuICAqLworICByZXR1cm4gYWV4 cHI7Cit9CisKKy8qIEJhc2VkIG9uIGxvY2F0aW9uIEJMLCBjcmVhdGUgYSBs aXN0IG9mIGJyZWFrcG9pbnQgY29tbWFuZHMgdG8gYmUKKyAgIHBhc3NlZCBv biB0byB0aGUgdGFyZ2V0LiAgSWYgd2UgaGF2ZSBkdXBsaWNhdGVkIGxvY2F0 aW9ucyB3aXRoCisgICBkaWZmZXJlbnQgY29tbWFuZHMsIHdlIHdpbGwgYWRk IGFueSBzdWNoIHRvIHRoZSBsaXN0LiAgKi8KKworc3RhdGljIHZvaWQKK2J1 aWxkX3RhcmdldF9jb21tYW5kX2xpc3QgKHN0cnVjdCBicF9sb2NhdGlvbiAq YmwpCit7CisgIHN0cnVjdCBicF9sb2NhdGlvbiAqKmxvY3AgPSBOVUxMLCAq KmxvYzJwOworICBpbnQgbnVsbF9jb21tYW5kX29yX3BhcnNlX2Vycm9yID0g MDsKKyAgaW50IG1vZGlmaWVkID0gYmwtPm5lZWRzX3VwZGF0ZTsKKyAgc3Ry dWN0IGJwX2xvY2F0aW9uICpsb2M7CisKKyAgLyogRm9yIG5vdywgbGltaXQg dG8gYWdlbnQtc3R5bGUgZHByaW50ZiBicmVha3BvaW50cy4gICovCisgIGlm IChibC0+b3duZXItPnR5cGUgIT0gYnBfZHByaW50ZgorICAgICAgfHwgc3Ry Y21wIChkcHJpbnRmX3N0eWxlLCBkcHJpbnRmX3N0eWxlX2FnZW50KSAhPSAw KQorICAgIHJldHVybjsKKworICBpZiAoIXRhcmdldF9jYW5fcnVuX2JyZWFr cG9pbnRfY29tbWFuZHMgKCkpCisgICAgcmV0dXJuOworCisgIC8qIERvIGEg Zmlyc3QgcGFzcyB0byBjaGVjayBmb3IgbG9jYXRpb25zIHdpdGggbm8gYXNz aWduZWQKKyAgICAgY29uZGl0aW9ucyBvciBjb25kaXRpb25zIHRoYXQgZmFp bCB0byBwYXJzZSB0byBhIHZhbGlkIGFnZW50IGV4cHJlc3Npb24KKyAgICAg Ynl0ZWNvZGUuICBJZiBhbnkgb2YgdGhlc2UgaGFwcGVuLCB0aGVuIGl0J3Mg bm8gdXNlIHRvIHNlbmQgY29uZGl0aW9ucworICAgICB0byB0aGUgdGFyZ2V0 IHNpbmNlIHRoaXMgbG9jYXRpb24gd2lsbCBhbHdheXMgdHJpZ2dlciBhbmQg Z2VuZXJhdGUgYQorICAgICByZXNwb25zZSBiYWNrIHRvIEdEQi4gICovCisg IEFMTF9CUF9MT0NBVElPTlNfQVRfQUREUiAobG9jMnAsIGxvY3AsIGJsLT5h ZGRyZXNzKQorICAgIHsKKyAgICAgIGxvYyA9ICgqbG9jMnApOworICAgICAg aWYgKGlzX2JyZWFrcG9pbnQgKGxvYy0+b3duZXIpICYmIGxvYy0+cHNwYWNl LT5udW0gPT0gYmwtPnBzcGFjZS0+bnVtKQorCXsKKwkgIGlmIChtb2RpZmll ZCkKKwkgICAgeworCSAgICAgIHN0cnVjdCBhZ2VudF9leHByICphZXhwcjsK KworCSAgICAgIC8qIFJlLXBhcnNlIHRoZSBjb21tYW5kcyBzaW5jZSBzb21l dGhpbmcgY2hhbmdlZC4gIEluIHRoYXQKKwkJIGNhc2Ugd2UgYWxyZWFkeSBm cmVlZCB0aGUgY29tbWFuZCBieXRlY29kZXMgKHNlZQorCQkgZm9yY2VfYnJl YWtwb2ludF9yZWluc2VydGlvbikuICBXZSBqdXN0CisJCSBuZWVkIHRvIHBh cnNlIHRoZSBjb21tYW5kIHRvIGJ5dGVjb2RlcyBhZ2Fpbi4gICovCisJICAg ICAgYWV4cHIgPSBwYXJzZV9jbWRfdG9fYWV4cHIgKGJsLT5hZGRyZXNzLAor CQkJCQkgIGxvYy0+b3duZXItPmV4dHJhX3N0cmluZyk7CisJICAgICAgbG9j LT5jbWRfYnl0ZWNvZGUgPSBhZXhwcjsKKworCSAgICAgIGlmICghYWV4cHIp CisJCWNvbnRpbnVlOworCSAgICB9CisKKwkgIC8qIElmIHdlIGhhdmUgYSBO VUxMIGJ5dGVjb2RlIGV4cHJlc3Npb24sIGl0IG1lYW5zIHNvbWV0aGluZwor CSAgICAgd2VudCB3cm9uZyBvciB3ZSBoYXZlIGEgbnVsbCBjb21tYW5kIGV4 cHJlc3Npb24uICAqLworCSAgaWYgKCFsb2MtPmNtZF9ieXRlY29kZSkKKwkg ICAgeworCSAgICAgIG51bGxfY29tbWFuZF9vcl9wYXJzZV9lcnJvciA9IDE7 CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qIElm IGFueXRoaW5nIGZhaWxlZCwgdGhlbiB3ZSdyZSBub3QgZG9pbmcgdGFyZ2V0 LXNpZGUgY29tbWFuZHMsCisgICAgIGFuZCBzbyBjbGVhbiB1cC4gICovCisg IGlmIChudWxsX2NvbW1hbmRfb3JfcGFyc2VfZXJyb3IpCisgICAgeworICAg ICAgQUxMX0JQX0xPQ0FUSU9OU19BVF9BRERSIChsb2MycCwgbG9jcCwgYmwt PmFkZHJlc3MpCisJeworCSAgbG9jID0gKCpsb2MycCk7CisJICBpZiAoaXNf YnJlYWtwb2ludCAobG9jLT5vd25lcikKKwkgICAgICAmJiBsb2MtPnBzcGFj ZS0+bnVtID09IGJsLT5wc3BhY2UtPm51bSkKKwkgICAgeworCSAgICAgIC8q IE9ubHkgZ28gYXMgZmFyIGFzIHRoZSBmaXJzdCBOVUxMIGJ5dGVjb2RlIGlz CisJCSBsb2NhdGVkLiAgKi8KKwkgICAgICBpZiAoIWxvYy0+Y29uZF9ieXRl Y29kZSkKKwkJcmV0dXJuOworCisJICAgICAgZnJlZV9hZ2VudF9leHByIChs b2MtPmNvbmRfYnl0ZWNvZGUpOworCSAgICAgIGxvYy0+Y29uZF9ieXRlY29k ZSA9IE5VTEw7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qIE5vIE5VTEwg Y29tbWFuZHMgb3IgZmFpbGVkIGJ5dGVjb2RlIGdlbmVyYXRpb24uICBCdWls ZCBhIGNvbW1hbmQgbGlzdAorICAgICBmb3IgdGhpcyBsb2NhdGlvbidzIGFk ZHJlc3MuICAqLworICBBTExfQlBfTE9DQVRJT05TX0FUX0FERFIgKGxvYzJw LCBsb2NwLCBibC0+YWRkcmVzcykKKyAgICB7CisgICAgICBsb2MgPSAoKmxv YzJwKTsKKyAgICAgIGlmIChsb2MtPm93bmVyLT5leHRyYV9zdHJpbmcKKwkg ICYmIGlzX2JyZWFrcG9pbnQgKGxvYy0+b3duZXIpCisJICAmJiBsb2MtPnBz cGFjZS0+bnVtID09IGJsLT5wc3BhY2UtPm51bQorCSAgJiYgbG9jLT5vd25l ci0+ZW5hYmxlX3N0YXRlID09IGJwX2VuYWJsZWQKKwkgICYmIGxvYy0+ZW5h YmxlZCkKKwkvKiBBZGQgdGhlIGNvbW1hbmQgdG8gdGhlIHZlY3Rvci4gIFRo aXMgd2lsbCBiZSB1c2VkIGxhdGVyCisJICAgdG8gc2VuZCB0aGUgY29tbWFu ZHMgdG8gdGhlIHRhcmdldC4gICovCisJVkVDX3NhZmVfcHVzaCAoYWdlbnRf ZXhwcl9wLCBibC0+dGFyZ2V0X2luZm8udGNvbW1hbmRzLAorCQkgICAgICAg bG9jLT5jbWRfYnl0ZWNvZGUpOworICAgIH0KKworICBibC0+dGFyZ2V0X2lu Zm8ucGVyc2lzdCA9IDA7CisgIC8qIE1heWJlIGZsYWcgdGhpcyBsb2NhdGlv biBhcyBwZXJzaXN0ZW50LiAgKi8KKyAgaWYgKGJsLT5vd25lci0+dHlwZSA9 PSBicF9kcHJpbnRmICYmIGRpc2Nvbm5lY3RlZF9kcHJpbnRmKQorICAgIGJs LT50YXJnZXRfaW5mby5wZXJzaXN0ID0gMTsKK30KKwogLyogSW5zZXJ0IGEg bG93LWxldmVsICJicmVha3BvaW50IiBvZiBzb21lIHR5cGUuICBCTCBpcyB0 aGUgYnJlYWtwb2ludAogICAgbG9jYXRpb24uICBBbnkgZXJyb3IgbWVzc2Fn ZXMgYXJlIHByaW50ZWQgdG8gVE1QX0VSUk9SX1NUUkVBTTsgYW5kCiAgICBE SVNBQkxFRF9CUkVBS1MsIGFuZCBIV19CUkVBS1BPSU5UX0VSUk9SIGFyZSB1 c2VkIHRvIHJlcG9ydCBwcm9ibGVtcy4KQEAgLTIxNzksNyArMjQxMCw4IEBA IGluc2VydF9icF9sb2NhdGlvbiAoc3RydWN0IGJwX2xvY2F0aW9uICoKICAg aWYgKGlzX2JyZWFrcG9pbnQgKGJsLT5vd25lcikpCiAgICAgewogICAgICAg YnVpbGRfdGFyZ2V0X2NvbmRpdGlvbl9saXN0IChibCk7Ci0gICAgICAvKiBS ZXNldCB0aGUgY29uZGl0aW9uIG1vZGlmaWNhdGlvbiBtYXJrZXIuICAqLwor ICAgICAgYnVpbGRfdGFyZ2V0X2NvbW1hbmRfbGlzdCAoYmwpOworICAgICAg LyogUmVzZXQgdGhlIG1vZGlmaWNhdGlvbiBtYXJrZXIuICAqLwogICAgICAg YmwtPm5lZWRzX3VwZGF0ZSA9IDA7CiAgICAgfQogCkBAIC0yNjk4LDYgKzI5 MzAsOSBAQCByZW1vdmVfYnJlYWtwb2ludHNfcGlkIChpbnQgcGlkKQogICAg IGlmIChibC0+cHNwYWNlICE9IGluZi0+cHNwYWNlKQogICAgICAgY29udGlu dWU7CiAKKyAgICBpZiAoYmwtPm93bmVyLT50eXBlID09IGJwX2RwcmludGYp CisgICAgICBjb250aW51ZTsKKwogICAgIGlmIChibC0+aW5zZXJ0ZWQpCiAg ICAgICB7CiAJdmFsID0gcmVtb3ZlX2JyZWFrcG9pbnQgKGJsLCBtYXJrX3Vu aW5zZXJ0ZWQpOwpAQCAtNTgzNCw2ICs2MDY5LDE1IEBAIHByaW50X29uZV9i cmVha3BvaW50X2xvY2F0aW9uIChzdHJ1Y3QgYnIKIAl9CiAgICAgfQogICAK KyAgaWYgKCFwYXJ0X29mX211bHRpcGxlICYmIGItPmV4dHJhX3N0cmluZwor ICAgICAgJiYgYi0+dHlwZSA9PSBicF9kcHJpbnRmICYmICFiLT5jb21tYW5k cykKKyAgICB7CisgICAgICBhbm5vdGF0ZV9maWVsZCAoNyk7CisgICAgICB1 aV9vdXRfdGV4dCAodWlvdXQsICJcdChhZ2VudCBwcmludGYpICIpOworICAg ICAgdWlfb3V0X2ZpZWxkX3N0cmluZyAodWlvdXQsICJwcmludGYiLCBiLT5l eHRyYV9zdHJpbmcpOworICAgICAgdWlfb3V0X3RleHQgKHVpb3V0LCAiXG4i KTsKKyAgICB9CisKICAgbCA9IGItPmNvbW1hbmRzID8gYi0+Y29tbWFuZHMt PmNvbW1hbmRzIDogTlVMTDsKICAgaWYgKCFwYXJ0X29mX211bHRpcGxlICYm IGwpCiAgICAgewpAQCAtODUzMiw0MCArODc3Niw2IEBAIGJwX2xvY19pc19w ZXJtYW5lbnQgKHN0cnVjdCBicF9sb2NhdGlvbiAKICAgcmV0dXJuIHJldHZh bDsKIH0KIAotLyogVGhlIHN0eWxlIGluIHdoaWNoIHRvIHBlcmZvcm0gYSBk eW5hbWljIHByaW50Zi4gIFRoaXMgaXMgYSB1c2VyCi0gICBvcHRpb24gYmVj YXVzZSBkaWZmZXJlbnQgb3V0cHV0IG9wdGlvbnMgaGF2ZSBkaWZmZXJlbnQg dHJhZGVvZmZzOwotICAgaWYgR0RCIGRvZXMgdGhlIHByaW50aW5nLCB0aGVy ZSBpcyBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgaWYgdGhlcmUKLSAgIGlzIGEg cHJvYmxlbSB3aXRoIGFueSBvZiB0aGUgYXJndW1lbnRzLCBidXQgdXNpbmcg YW4gaW5mZXJpb3IKLSAgIGZ1bmN0aW9uIGxldHMgeW91IGhhdmUgc3BlY2lh bC1wdXJwb3NlIHByaW50ZXJzIGFuZCBzZW5kaW5nIG9mCi0gICBvdXRwdXQg dG8gdGhlIHNhbWUgcGxhY2UgYXMgY29tcGlsZWQtaW4gcHJpbnQgZnVuY3Rp b25zLiAgKEZ1dHVyZQotICAgc3R5bGVzIG1heSBpbmNsdWRlIHRoZSBhYmls aXR5IHRvIGRvIGEgdGFyZ2V0LXNpZGUgcHJpbnRmLikgICovCi0KLXN0YXRp YyBjb25zdCBjaGFyIGRwcmludGZfc3R5bGVfZ2RiW10gPSAiZ2RiIjsKLXN0 YXRpYyBjb25zdCBjaGFyIGRwcmludGZfc3R5bGVfY2FsbFtdID0gImNhbGwi Owotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGRwcmludGZfc3R5bGVfZW51 bXNbXSA9IHsKLSAgZHByaW50Zl9zdHlsZV9nZGIsCi0gIGRwcmludGZfc3R5 bGVfY2FsbCwKLSAgTlVMTAotfTsKLXN0YXRpYyBjb25zdCBjaGFyICpkcHJp bnRmX3N0eWxlID0gZHByaW50Zl9zdHlsZV9nZGI7Ci0KLS8qIFRoZSBmdW5j dGlvbiB0byB1c2UgZm9yIGR5bmFtaWMgcHJpbnRmIGlmIHRoZSBwcmVmZXJy ZWQgc3R5bGUgaXMgdG8KLSAgIGNhbGwgaW50byB0aGUgaW5mZXJpb3IuICBU aGUgdmFsdWUgaXMgc2ltcGx5IGEgc3RyaW5nIHRoYXQgaXMKLSAgIGNvcGll ZCBpbnRvIHRoZSBjb21tYW5kLCBzbyBpdCBjYW4gYmUgYW55dGhpbmcgdGhh dCBHREIgY2FuCi0gICBldmFsdWF0ZSB0byBhIGNhbGxhYmxlIGFkZHJlc3Ms IG5vdCBuZWNlc3NhcmlseSBhIGZ1bmN0aW9uIG5hbWUuICAqLwotCi1zdGF0 aWMgY2hhciAqZHByaW50Zl9mdW5jdGlvbiA9ICIiOwotCi0vKiBUaGUgY2hh bm5lbCB0byB1c2UgZm9yIGR5bmFtaWMgcHJpbnRmIGlmIHRoZSBwcmVmZXJy ZWQgc3R5bGUgaXMgdG8KLSAgIGNhbGwgaW50byB0aGUgaW5mZXJpb3I7IGlm IGEgbm9uZW1wdHkgc3RyaW5nLCBpdCB3aWxsIGJlIHBhc3NlZCB0bwotICAg dGhlIGNhbGwgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB3aXRoIHRoZSBmb3Jt YXQgc3RyaW5nIGFzIHRoZQotICAgc2Vjb25kLiAgQXMgd2l0aCB0aGUgZHBy aW50ZiBmdW5jdGlvbiwgdGhpcyBjYW4gYmUgYW55dGhpbmcgdGhhdAotICAg R0RCIGtub3dzIGhvdyB0byBldmFsdWF0ZSwgc28gaW4gYWRkaXRpb24gdG8g Y29tbW9uIGNob2ljZXMgbGlrZQotICAgInN0ZGVyciIsIHRoaXMgY291bGQg YmUgYW4gYXBwLXNwZWNpZmljIGV4cHJlc3Npb24gbGlrZQotICAgIm15c3Ry ZWFtc1tjdXJsb2dnZXJdIi4gICovCi0KLXN0YXRpYyBjaGFyICpkcHJpbnRm X2NoYW5uZWwgPSAiIjsKLQogLyogQnVpbGQgYSBjb21tYW5kIGxpc3QgZm9y IHRoZSBkcHJpbnRmIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQKICAg IHNldHRpbmdzIG9mIHRoZSBkcHJpbnRmIHN0eWxlIG9wdGlvbnMuICAqLwog CkBAIC04NTg5LDkgKzg3OTksOSBAQCB1cGRhdGVfZHByaW50Zl9jb21tYW5k X2xpc3QgKHN0cnVjdCBicmVhCiAgIGlmICgqZHByaW50Zl9hcmdzICE9ICci JykKICAgICBlcnJvciAoXygiQmFkIGZvcm1hdCBzdHJpbmcsIG1pc3Npbmcg J1wiJy4iKSk7CiAKLSAgaWYgKHN0cmNtcCAoZHByaW50Zl9zdHlsZSwgImdk YiIpID09IDApCisgIGlmIChzdHJjbXAgKGRwcmludGZfc3R5bGUsIGRwcmlu dGZfc3R5bGVfZ2RiKSA9PSAwKQogICAgIHByaW50Zl9saW5lID0geHN0cnBy aW50ZiAoInByaW50ZiAlcyIsIGRwcmludGZfYXJncyk7Ci0gIGVsc2UgaWYg KHN0cmNtcCAoZHByaW50Zl9zdHlsZSwgImNhbGwiKSA9PSAwKQorICBlbHNl IGlmIChzdHJjbXAgKGRwcmludGZfc3R5bGUsIGRwcmludGZfc3R5bGVfY2Fs bCkgPT0gMCkKICAgICB7CiAgICAgICBpZiAoIWRwcmludGZfZnVuY3Rpb24p CiAJZXJyb3IgKF8oIk5vIGZ1bmN0aW9uIHN1cHBsaWVkIGZvciBkcHJpbnRm IGNhbGwiKSk7CkBAIC04NjA2LDYgKzg4MTYsMTYgQEAgdXBkYXRlX2Rwcmlu dGZfY29tbWFuZF9saXN0IChzdHJ1Y3QgYnJlYQogCQkJCSAgZHByaW50Zl9m dW5jdGlvbiwKIAkJCQkgIGRwcmludGZfYXJncyk7CiAgICAgfQorICBlbHNl IGlmIChzdHJjbXAgKGRwcmludGZfc3R5bGUsIGRwcmludGZfc3R5bGVfYWdl bnQpID09IDApCisgICAgeworICAgICAgaWYgKHRhcmdldF9jYW5fcnVuX2Jy ZWFrcG9pbnRfY29tbWFuZHMgKCkpCisJcHJpbnRmX2xpbmUgPSB4c3RycHJp bnRmICgiYWdlbnQtcHJpbnRmICVzIiwgZHByaW50Zl9hcmdzKTsKKyAgICAg IGVsc2UKKwl7CisJICB3YXJuaW5nIChfKCJUYXJnZXQgY2Fubm90IHJ1biBk cHJpbnRmIGNvbW1hbmRzLCBmYWxsaW5nIGJhY2sgdG8gR0RCIHByaW50ZiIp KTsKKwkgIHByaW50Zl9saW5lID0geHN0cnByaW50ZiAoInByaW50ZiAlcyIs IGRwcmludGZfYXJncyk7CisJfQorICAgIH0KICAgZWxzZQogICAgIGludGVy bmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sCiAJCSAgICBfKCJJbnZh bGlkIGRwcmludGYgc3R5bGUuIikpOwpAQCAtODYxNSwxMiArODgzNSwxNSBA QCB1cGRhdGVfZHByaW50Zl9jb21tYW5kX2xpc3QgKHN0cnVjdCBicmVhCiAg ICAgewogICAgICAgc3RydWN0IGNvbW1hbmRfbGluZSAqcHJpbnRmX2NtZF9s aW5lLCAqY29udF9jbWRfbGluZSA9IE5VTEw7CiAKLSAgICAgIGNvbnRfY21k X2xpbmUgPSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBjb21tYW5kX2xpbmUp KTsKLSAgICAgIGNvbnRfY21kX2xpbmUtPmNvbnRyb2xfdHlwZSA9IHNpbXBs ZV9jb250cm9sOwotICAgICAgY29udF9jbWRfbGluZS0+Ym9keV9jb3VudCA9 IDA7Ci0gICAgICBjb250X2NtZF9saW5lLT5ib2R5X2xpc3QgPSBOVUxMOwot ICAgICAgY29udF9jbWRfbGluZS0+bmV4dCA9IE5VTEw7Ci0gICAgICBjb250 X2NtZF9saW5lLT5saW5lID0geHN0cmR1cCAoImNvbnRpbnVlIik7CisgICAg ICBpZiAoc3RyY21wIChkcHJpbnRmX3N0eWxlLCBkcHJpbnRmX3N0eWxlX2Fn ZW50KSAhPSAwKQorCXsKKwkgIGNvbnRfY21kX2xpbmUgPSB4bWFsbG9jIChz aXplb2YgKHN0cnVjdCBjb21tYW5kX2xpbmUpKTsKKwkgIGNvbnRfY21kX2xp bmUtPmNvbnRyb2xfdHlwZSA9IHNpbXBsZV9jb250cm9sOworCSAgY29udF9j bWRfbGluZS0+Ym9keV9jb3VudCA9IDA7CisJICBjb250X2NtZF9saW5lLT5i b2R5X2xpc3QgPSBOVUxMOworCSAgY29udF9jbWRfbGluZS0+bmV4dCA9IE5V TEw7CisJICBjb250X2NtZF9saW5lLT5saW5lID0geHN0cmR1cCAoImNvbnRp bnVlIik7CisJfQogCiAgICAgICBwcmludGZfY21kX2xpbmUgPSB4bWFsbG9j IChzaXplb2YgKHN0cnVjdCBjb21tYW5kX2xpbmUpKTsKICAgICAgIHByaW50 Zl9jbWRfbGluZS0+Y29udHJvbF90eXBlID0gc2ltcGxlX2NvbnRyb2w7CkBA IC05NTc2LDYgKzk3OTksMTIgQEAgZHByaW50Zl9jb21tYW5kIChjaGFyICph cmcsIGludCBmcm9tX3R0eQogCQkgICAgIDApOwogfQogCitzdGF0aWMgdm9p ZAorYWdlbnRfcHJpbnRmX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21f dHR5KQoreworICBlcnJvciAoXygiTWF5IG9ubHkgcnVuIGFnZW50LXByaW50 ZiBvbiB0aGUgdGFyZ2V0IikpOworfQorCiAvKiBJbXBsZW1lbnQgdGhlICJi cmVha3BvaW50X2hpdCIgYnJlYWtwb2ludF9vcHMgbWV0aG9kIGZvcgogICAg cmFuZ2VkIGJyZWFrcG9pbnRzLiAgKi8KIApAQCAtMTYyNjYsNiArMTY0OTUs MjAgQEAgU2hvdyB0aGUgY2hhbm5lbCB0byB1c2UgZm9yIGR5bmFtaWMgcHJp bgogCQkJICB1cGRhdGVfZHByaW50Zl9jb21tYW5kcywgTlVMTCwKIAkJCSAg JnNldGxpc3QsICZzaG93bGlzdCk7CiAKKyAgYWRkX3NldHNob3dfYm9vbGVh bl9jbWQgKCJkaXNjb25uZWN0ZWQtZHByaW50ZiIsIG5vX2NsYXNzLAorCQkJ ICAgJmRpc2Nvbm5lY3RlZF9kcHJpbnRmLCBfKCJcCitTZXQgd2hldGhlciBk cHJpbnRmIGNvbnRpbnVlcyBhZnRlciBHREIgZGlzY29ubmVjdHMuIiksIF8o IlwKK1Nob3cgd2hldGhlciBkcHJpbnRmIGNvbnRpbnVlcyBhZnRlciBHREIg ZGlzY29ubmVjdHMuIiksIF8oIlwKK1VzZSB0aGlzIHRvIGxldCBkcHJpbnRm IGNvbW1hbmRzIGNvbnRpbnVlIHRvIGhpdCBhbmQgcHJvZHVjZSBvdXRwdXRc blwKK2V2ZW4gaWYgR0RCIGRpc2Nvbm5lY3RzIG9yIGRldGFjaGVzIGZyb20g dGhlIHRhcmdldC4iKSwKKwkJCSAgIE5VTEwsCisJCQkgICBOVUxMLAorCQkJ ICAgJnNldGxpc3QsICZzaG93bGlzdCk7CisKKyAgYWRkX2NvbSAoImFnZW50 LXByaW50ZiIsIGNsYXNzX3ZhcnMsIGFnZW50X3ByaW50Zl9jb21tYW5kLCBf KCJcCithZ2VudC1wcmludGYgXCJwcmludGYgZm9ybWF0IHN0cmluZ1wiLCBh cmcxLCBhcmcyLCBhcmczLCAuLi4sIGFyZ25cblwKKyh0YXJnZXQgYWdlbnQg b25seSkgVGhpcyBpcyB1c2VmdWwgZm9yIGZvcm1hdHRlZCBvdXRwdXQgaW4g dXNlci1kZWZpbmVkIGNvbW1hbmRzLiIpKTsKKwogICBhdXRvbWF0aWNfaGFy ZHdhcmVfYnJlYWtwb2ludHMgPSAxOwogCiAgIG9ic2VydmVyX2F0dGFjaF9h Ym91dF90b19wcm9jZWVkIChicmVha3BvaW50X2Fib3V0X3RvX3Byb2NlZWQp OwpJbmRleDogYnJlYWtwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvYnJlYWtwb2ludC5oLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjE4NQpkaWZmIC11IC1wIC1yMS4xODUgYnJl YWtwb2ludC5oCi0tLSBicmVha3BvaW50LmgJMTggSnVuIDIwMTIgMTc6Mjg6 MzYgLTAwMDAJMS4xODUKKysrIGJyZWFrcG9pbnQuaAkyNSBKdW4gMjAxMiAx NToxMjo1OCAtMDAwMApAQCAtMjcyLDYgKzI3MiwxNCBAQCBzdHJ1Y3QgYnBf dGFyZ2V0X2luZm8KICAgLyogVmVjdG9yIG9mIGNvbmRpdGlvbnMgdGhlIHRh cmdldCBzaG91bGQgZXZhbHVhdGUgaWYgaXQgc3VwcG9ydHMgdGFyZ2V0LXNp ZGUKICAgICAgYnJlYWtwb2ludCBjb25kaXRpb25zLiAgKi8KICAgVkVDKGFn ZW50X2V4cHJfcCkgKmNvbmRpdGlvbnM7CisKKyAgLyogVmVjdG9yIG9mIGNv bW1hbmRzIHRoZSB0YXJnZXQgc2hvdWxkIGV2YWx1YXRlIGlmIGl0IHN1cHBv cnRzCisgICAgIHRhcmdldC1zaWRlIGJyZWFrcG9pbnQgY29tbWFuZHMuICAq LworICBWRUMoYWdlbnRfZXhwcl9wKSAqdGNvbW1hbmRzOworCisgIC8qIEZs YWcgdGhhdCBpcyB0cnVlIGlmIHRoZSBicmVha3BvaW50IHNob3VsZCBiZSBs ZWZ0IGluIHBsYWNlIGV2ZW4KKyAgICAgd2hlbiBHREIgaXMgbm90IGNvbm5l Y3RlZC4gICovCisgIGludCBwZXJzaXN0OwogfTsKIAogLyogR0RCIG1haW50 YWlucyB0d28gdHlwZXMgb2YgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBicmVh a3BvaW50IChvcgpAQCAtMzU4LDggKzM2NiwxMSBAQCBzdHJ1Y3QgYnBfbG9j YXRpb24KIAogICBlbnVtIGNvbmRpdGlvbl9zdGF0dXMgY29uZGl0aW9uX2No YW5nZWQ7CiAKLSAgLyogU2lnbmFscyB0aGF0IGJyZWFrcG9pbnQgY29uZGl0 aW9ucyBuZWVkIHRvIGJlIHJlLXN5bmNoZWQgd2l0aCB0aGUKLSAgICAgdGFy Z2V0LiAgVGhpcyBoYXMgbm8gdXNlIG90aGVyIHRoYW4gdGFyZ2V0LXNpZGUg YnJlYWtwb2ludHMuICAqLworICBzdHJ1Y3QgYWdlbnRfZXhwciAqY21kX2J5 dGVjb2RlOworCisgIC8qIFNpZ25hbHMgdGhhdCBicmVha3BvaW50IGNvbmRp dGlvbnMgYW5kL29yIGNvbW1hbmRzIG5lZWQgdG8gYmUKKyAgICAgcmUtc3lu Y2hlZCB3aXRoIHRoZSB0YXJnZXQuICBUaGlzIGhhcyBubyB1c2Ugb3RoZXIg dGhhbgorICAgICB0YXJnZXQtc2lkZSBicmVha3BvaW50cy4gICovCiAgIGNo YXIgbmVlZHNfdXBkYXRlOwogCiAgIC8qIFRoaXMgbG9jYXRpb24ncyBhZGRy ZXNzIGlzIGluIGFuIHVubG9hZGVkIHNvbGliLCBhbmQgc28gdGhpcwpJbmRl eDogcHJpbnRjbWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL3ByaW50Y21kLmMsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMjA4CmRpZmYgLXUgLXAgLXIxLjIwOCBwcmludGNtZC5jCi0t LSBwcmludGNtZC5jCTE4IE1heSAyMDEyIDIxOjAyOjUwIC0wMDAwCTEuMjA4 CisrKyBwcmludGNtZC5jCTI1IEp1biAyMDEyIDE1OjEyOjU4IC0wMDAwCkBA IC00OSwxOCArNDksMTIgQEAKICNpbmNsdWRlICJjaGFyc2V0LmgiCiAjaW5j bHVkZSAiYXJjaC11dGlscy5oIgogI2luY2x1ZGUgImNsaS9jbGktdXRpbHMu aCIKKyNpbmNsdWRlICJmb3JtYXQuaCIKIAogI2lmZGVmIFRVSQogI2luY2x1 ZGUgInR1aS90dWkuaCIJCS8qIEZvciB0dWlfYWN0aXZlIGV0IGFsLiAgICov CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19NSU5HVzMyX18pICYmICFkZWZp bmVkKFBSSU5URl9IQVNfTE9OR19MT05HKQotIyBkZWZpbmUgVVNFX1BSSU5U Rl9JNjQgMQotIyBkZWZpbmUgUFJJTlRGX0hBU19MT05HX0xPTkcKLSNlbHNl Ci0jIGRlZmluZSBVU0VfUFJJTlRGX0k2NCAwCi0jZW5kaWYKLQogc3RydWN0 IGZvcm1hdF9kYXRhCiAgIHsKICAgICBpbnQgY291bnQ7CkBAIC0yMDAxLDEz ICsxOTk1LDkgQEAgcHJpbnRfdmFyaWFibGVfYW5kX3ZhbHVlIChjb25zdCBj aGFyICpuYQogc3RhdGljIHZvaWQKIHVpX3ByaW50ZiAoY2hhciAqYXJnLCBz dHJ1Y3QgdWlfZmlsZSAqc3RyZWFtKQogewotICBjaGFyICpmID0gTlVMTDsK KyAgc3RydWN0IGZvcm1hdF9waWVjZSAqZnBpZWNlczsKICAgY2hhciAqcyA9 IGFyZzsKLSAgY2hhciAqc3RyaW5nID0gTlVMTDsKICAgc3RydWN0IHZhbHVl ICoqdmFsX2FyZ3M7Ci0gIGNoYXIgKnN1YnN0cmluZ3M7Ci0gIGNoYXIgKmN1 cnJlbnRfc3Vic3RyaW5nOwotICBpbnQgbmFyZ3MgPSAwOwogICBpbnQgYWxs b2NhdGVkX2FyZ3MgPSAyMDsKICAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVh bnVwczsKIApAQCAtMjAyMyw2NCArMjAxMywxMyBAQCB1aV9wcmludGYgKGNo YXIgKmFyZywgc3RydWN0IHVpX2ZpbGUgKnN0CiAgIGlmICgqcysrICE9ICci JykKICAgICBlcnJvciAoXygiQmFkIGZvcm1hdCBzdHJpbmcsIG1pc3Npbmcg J1wiJy4iKSk7CiAKLSAgLyogUGFyc2UgdGhlIGZvcm1hdC1jb250cm9sIHN0 cmluZyBhbmQgY29weSBpdCBpbnRvIHRoZSBzdHJpbmcgU1RSSU5HLAotICAg ICBwcm9jZXNzaW5nIHNvbWUga2luZHMgb2YgZXNjYXBlIHNlcXVlbmNlLiAg Ki8KLQotICBmID0gc3RyaW5nID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4g KHMpICsgMSk7Ci0KLSAgd2hpbGUgKCpzICE9ICciJykKLSAgICB7Ci0gICAg ICBpbnQgYyA9ICpzKys7Ci0gICAgICBzd2l0Y2ggKGMpCi0JewotCWNhc2Ug J1wwJzoKLQkgIGVycm9yIChfKCJCYWQgZm9ybWF0IHN0cmluZywgbm9uLXRl cm1pbmF0ZWQgJ1wiJy4iKSk7CisgIGZwaWVjZXMgPSBwYXJzZV9mb3JtYXRf c3RyaW5nICgmcyk7CiAKLQljYXNlICdcXCc6Ci0JICBzd2l0Y2ggKGMgPSAq cysrKQotCSAgICB7Ci0JICAgIGNhc2UgJ1xcJzoKLQkgICAgICAqZisrID0g J1xcJzsKLQkgICAgICBicmVhazsKLQkgICAgY2FzZSAnYSc6Ci0JICAgICAg KmYrKyA9ICdcYSc7Ci0JICAgICAgYnJlYWs7Ci0JICAgIGNhc2UgJ2InOgot CSAgICAgICpmKysgPSAnXGInOwotCSAgICAgIGJyZWFrOwotCSAgICBjYXNl ICdmJzoKLQkgICAgICAqZisrID0gJ1xmJzsKLQkgICAgICBicmVhazsKLQkg ICAgY2FzZSAnbic6Ci0JICAgICAgKmYrKyA9ICdcbic7Ci0JICAgICAgYnJl YWs7Ci0JICAgIGNhc2UgJ3InOgotCSAgICAgICpmKysgPSAnXHInOwotCSAg ICAgIGJyZWFrOwotCSAgICBjYXNlICd0JzoKLQkgICAgICAqZisrID0gJ1x0 JzsKLQkgICAgICBicmVhazsKLQkgICAgY2FzZSAndic6Ci0JICAgICAgKmYr KyA9ICdcdic7Ci0JICAgICAgYnJlYWs7Ci0JICAgIGNhc2UgJyInOgotCSAg ICAgICpmKysgPSAnIic7Ci0JICAgICAgYnJlYWs7Ci0JICAgIGRlZmF1bHQ6 Ci0JICAgICAgLyogPz8/IFRPRE86IGhhbmRsZSBvdGhlciBlc2NhcGUgc2Vx dWVuY2VzLiAgKi8KLQkgICAgICBlcnJvciAoXygiVW5yZWNvZ25pemVkIGVz Y2FwZSBjaGFyYWN0ZXIgXFwlYyBpbiBmb3JtYXQgc3RyaW5nLiIpLAotCQkg ICAgIGMpOwotCSAgICB9Ci0JICBicmVhazsKKyAgbWFrZV9jbGVhbnVwIChm cmVlX2Zvcm1hdF9waWVjZXNfY2xlYW51cCwgJmZwaWVjZXMpOwogCi0JZGVm YXVsdDoKLQkgICpmKysgPSBjOwotCX0KLSAgICB9Ci0KLSAgLyogU2tpcCBv dmVyICIgYW5kIGZvbGxvd2luZyBzcGFjZSBhbmQgY29tbWEuICAqLwotICBz Kys7Ci0gICpmKysgPSAnXDAnOworICBpZiAoKnMrKyAhPSAnIicpCisgICAg ZXJyb3IgKF8oIkJhZCBmb3JtYXQgc3RyaW5nLCBub24tdGVybWluYXRlZCAn XCInLiIpKTsKKyAgCiAgIHMgPSBza2lwX3NwYWNlcyAocyk7CiAKICAgaWYg KCpzICE9ICcsJyAmJiAqcyAhPSAwKQpAQCAtMjA5MCwyNDAgKzIwMjksMTYg QEAgdWlfcHJpbnRmIChjaGFyICphcmcsIHN0cnVjdCB1aV9maWxlICpzdAog ICAgIHMrKzsKICAgcyA9IHNraXBfc3BhY2VzIChzKTsKIAotICAvKiBOZWVk IGV4dHJhIHNwYWNlIGZvciB0aGUgJ1wwJ3MuICBEb3VibGluZyB0aGUgc2l6 ZSBpcyBzdWZmaWNpZW50LiAgKi8KLSAgc3Vic3RyaW5ncyA9IGFsbG9jYSAo c3RybGVuIChzdHJpbmcpICogMik7Ci0gIGN1cnJlbnRfc3Vic3RyaW5nID0g c3Vic3RyaW5nczsKLQogICB7Ci0gICAgLyogTm93IHNjYW4gdGhlIHN0cmlu ZyBmb3IgJS1zcGVjcyBhbmQgc2VlIHdoYXQga2luZHMgb2YgYXJncyB0aGV5 IHdhbnQuCi0gICAgICAgYXJnY2xhc3NbSV0gY2xhc3NpZmllcyB0aGUgJS1z cGVjcyBzbyB3ZSBjYW4gZ2l2ZSBwcmludGZfZmlsdGVyZWQKLSAgICAgICBz b21ldGhpbmcgb2YgdGhlIHJpZ2h0IHNpemUuICAqLwotCi0gICAgZW51bSBh cmdjbGFzcwotICAgICAgewotCWludF9hcmcsIGxvbmdfYXJnLCBsb25nX2xv bmdfYXJnLCBwdHJfYXJnLAotCXN0cmluZ19hcmcsIHdpZGVfc3RyaW5nX2Fy Zywgd2lkZV9jaGFyX2FyZywKLQlkb3VibGVfYXJnLCBsb25nX2RvdWJsZV9h cmcsIGRlY2Zsb2F0X2FyZwotICAgICAgfTsKLSAgICBlbnVtIGFyZ2NsYXNz ICphcmdjbGFzczsKLSAgICBlbnVtIGFyZ2NsYXNzIHRoaXNfYXJnY2xhc3M7 Ci0gICAgY2hhciAqbGFzdF9hcmc7CisgICAgaW50IG5hcmdzID0gMDsKICAg ICBpbnQgbmFyZ3Nfd2FudGVkOwotICAgIGludCBpOworICAgIGludCBpLCBm cjsKKyAgICBjaGFyICpjdXJyZW50X3N1YnN0cmluZzsKIAotICAgIGFyZ2Ns YXNzID0gKGVudW0gYXJnY2xhc3MgKikgYWxsb2NhIChzdHJsZW4gKHMpICog c2l6ZW9mICphcmdjbGFzcyk7CiAgICAgbmFyZ3Nfd2FudGVkID0gMDsKLSAg ICBmID0gc3RyaW5nOwotICAgIGxhc3RfYXJnID0gc3RyaW5nOwotICAgIHdo aWxlICgqZikKLSAgICAgIGlmICgqZisrID09ICclJykKLQl7Ci0JICBpbnQg c2Vlbl9oYXNoID0gMCwgc2Vlbl96ZXJvID0gMCwgbGNvdW50ID0gMCwgc2Vl bl9wcmVjID0gMDsKLQkgIGludCBzZWVuX3NwYWNlID0gMCwgc2Vlbl9wbHVz ID0gMDsKLQkgIGludCBzZWVuX2JpZ19sID0gMCwgc2Vlbl9oID0gMCwgc2Vl bl9iaWdfaCA9IDA7Ci0JICBpbnQgc2Vlbl9iaWdfZCA9IDAsIHNlZW5fZG91 YmxlX2JpZ19kID0gMDsKLQkgIGludCBiYWQgPSAwOwotCi0JICAvKiBDaGVj ayB0aGUgdmFsaWRpdHkgb2YgdGhlIGZvcm1hdCBzcGVjaWZpZXIsIGFuZCB3 b3JrCi0JICAgICBvdXQgd2hhdCBhcmd1bWVudCBpdCBleHBlY3RzLiAgV2Ug b25seSBhY2NlcHQgQzg5Ci0JICAgICBmb3JtYXQgc3RyaW5ncywgd2l0aCB0 aGUgZXhjZXB0aW9uIG9mIGxvbmcgbG9uZyAod2hpY2gKLQkgICAgIHdlIGF1 dG9jb25mIGZvcikuICAqLwotCi0JICAvKiBTa2lwIG92ZXIgIiUlIi4gICov Ci0JICBpZiAoKmYgPT0gJyUnKQotCSAgICB7Ci0JICAgICAgZisrOwotCSAg ICAgIGNvbnRpbnVlOwotCSAgICB9Ci0KLQkgIC8qIFRoZSBmaXJzdCBwYXJ0 IG9mIGEgZm9ybWF0IHNwZWNpZmllciBpcyBhIHNldCBvZiBmbGFnCi0JICAg ICBjaGFyYWN0ZXJzLiAgKi8KLQkgIHdoaWxlIChzdHJjaHIgKCIwLSsgIyIs ICpmKSkKLQkgICAgewotCSAgICAgIGlmICgqZiA9PSAnIycpCi0JCXNlZW5f aGFzaCA9IDE7Ci0JICAgICAgZWxzZSBpZiAoKmYgPT0gJzAnKQotCQlzZWVu X3plcm8gPSAxOwotCSAgICAgIGVsc2UgaWYgKCpmID09ICcgJykKLQkJc2Vl bl9zcGFjZSA9IDE7Ci0JICAgICAgZWxzZSBpZiAoKmYgPT0gJysnKQotCQlz ZWVuX3BsdXMgPSAxOwotCSAgICAgIGYrKzsKLQkgICAgfQotCi0JICAvKiBU aGUgbmV4dCBwYXJ0IG9mIGEgZm9ybWF0IHNwZWNpZmllciBpcyBhIHdpZHRo LiAgKi8KLQkgIHdoaWxlIChzdHJjaHIgKCIwMTIzNDU2Nzg5IiwgKmYpKQot CSAgICBmKys7Ci0KLQkgIC8qIFRoZSBuZXh0IHBhcnQgb2YgYSBmb3JtYXQg c3BlY2lmaWVyIGlzIGEgcHJlY2lzaW9uLiAgKi8KLQkgIGlmICgqZiA9PSAn LicpCi0JICAgIHsKLQkgICAgICBzZWVuX3ByZWMgPSAxOwotCSAgICAgIGYr KzsKLQkgICAgICB3aGlsZSAoc3RyY2hyICgiMDEyMzQ1Njc4OSIsICpmKSkK LQkJZisrOwotCSAgICB9Ci0KLQkgIC8qIFRoZSBuZXh0IHBhcnQgb2YgYSBm b3JtYXQgc3BlY2lmaWVyIGlzIGEgbGVuZ3RoIG1vZGlmaWVyLiAgKi8KLQkg IGlmICgqZiA9PSAnaCcpCi0JICAgIHsKLQkgICAgICBzZWVuX2ggPSAxOwot CSAgICAgIGYrKzsKLQkgICAgfQotCSAgZWxzZSBpZiAoKmYgPT0gJ2wnKQot CSAgICB7Ci0JICAgICAgZisrOwotCSAgICAgIGxjb3VudCsrOwotCSAgICAg IGlmICgqZiA9PSAnbCcpCi0JCXsKLQkJICBmKys7Ci0JCSAgbGNvdW50Kys7 Ci0JCX0KLQkgICAgfQotCSAgZWxzZSBpZiAoKmYgPT0gJ0wnKQotCSAgICB7 Ci0JICAgICAgc2Vlbl9iaWdfbCA9IDE7Ci0JICAgICAgZisrOwotCSAgICB9 Ci0JICAvKiBEZWNpbWFsMzIgbW9kaWZpZXIuICAqLwotCSAgZWxzZSBpZiAo KmYgPT0gJ0gnKQotCSAgICB7Ci0JICAgICAgc2Vlbl9iaWdfaCA9IDE7Ci0J ICAgICAgZisrOwotCSAgICB9Ci0JICAvKiBEZWNpbWFsNjQgYW5kIERlY2lt YWwxMjggbW9kaWZpZXJzLiAgKi8KLQkgIGVsc2UgaWYgKCpmID09ICdEJykK LQkgICAgewotCSAgICAgIGYrKzsKLQotCSAgICAgIC8qIENoZWNrIGZvciBh IERlY2ltYWwxMjguICAqLwotCSAgICAgIGlmICgqZiA9PSAnRCcpCi0JCXsK LQkJICBmKys7Ci0JCSAgc2Vlbl9kb3VibGVfYmlnX2QgPSAxOwotCQl9Ci0J ICAgICAgZWxzZQotCQlzZWVuX2JpZ19kID0gMTsKLQkgICAgfQotCi0JICBz d2l0Y2ggKCpmKQotCSAgICB7Ci0JICAgIGNhc2UgJ3UnOgotCSAgICAgIGlm IChzZWVuX2hhc2gpCi0JCWJhZCA9IDE7Ci0JICAgICAgLyogRkFMTFRIUk9V R0ggKi8KLQotCSAgICBjYXNlICdvJzoKLQkgICAgY2FzZSAneCc6Ci0JICAg IGNhc2UgJ1gnOgotCSAgICAgIGlmIChzZWVuX3NwYWNlIHx8IHNlZW5fcGx1 cykKLQkJYmFkID0gMTsKLQkgICAgICAvKiBGQUxMVEhST1VHSCAqLwotCi0J ICAgIGNhc2UgJ2QnOgotCSAgICBjYXNlICdpJzoKLQkgICAgICBpZiAobGNv dW50ID09IDApCi0JCXRoaXNfYXJnY2xhc3MgPSBpbnRfYXJnOwotCSAgICAg IGVsc2UgaWYgKGxjb3VudCA9PSAxKQotCQl0aGlzX2FyZ2NsYXNzID0gbG9u Z19hcmc7Ci0JICAgICAgZWxzZQotCQl0aGlzX2FyZ2NsYXNzID0gbG9uZ19s b25nX2FyZzsKLQotCSAgICAgIGlmIChzZWVuX2JpZ19sKQotCQliYWQgPSAx OwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNhc2UgJ2MnOgotCSAgICAgIHRo aXNfYXJnY2xhc3MgPSBsY291bnQgPT0gMCA/IGludF9hcmcgOiB3aWRlX2No YXJfYXJnOwotCSAgICAgIGlmIChsY291bnQgPiAxIHx8IHNlZW5faCB8fCBz ZWVuX2JpZ19sKQotCQliYWQgPSAxOwotCSAgICAgIGlmIChzZWVuX3ByZWMg fHwgc2Vlbl96ZXJvIHx8IHNlZW5fc3BhY2UgfHwgc2Vlbl9wbHVzKQotCQli YWQgPSAxOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNhc2UgJ3AnOgotCSAg ICAgIHRoaXNfYXJnY2xhc3MgPSBwdHJfYXJnOwotCSAgICAgIGlmIChsY291 bnQgfHwgc2Vlbl9oIHx8IHNlZW5fYmlnX2wpCi0JCWJhZCA9IDE7Ci0JICAg ICAgaWYgKHNlZW5fcHJlYyB8fCBzZWVuX3plcm8gfHwgc2Vlbl9zcGFjZSB8 fCBzZWVuX3BsdXMpCi0JCWJhZCA9IDE7Ci0JICAgICAgYnJlYWs7Ci0KLQkg ICAgY2FzZSAncyc6Ci0JICAgICAgdGhpc19hcmdjbGFzcyA9IGxjb3VudCA9 PSAwID8gc3RyaW5nX2FyZyA6IHdpZGVfc3RyaW5nX2FyZzsKLQkgICAgICBp ZiAobGNvdW50ID4gMSB8fCBzZWVuX2ggfHwgc2Vlbl9iaWdfbCkKLQkJYmFk ID0gMTsKLQkgICAgICBpZiAoc2Vlbl96ZXJvIHx8IHNlZW5fc3BhY2UgfHwg c2Vlbl9wbHVzKQotCQliYWQgPSAxOwotCSAgICAgIGJyZWFrOwotCi0JICAg IGNhc2UgJ2UnOgotCSAgICBjYXNlICdmJzoKLQkgICAgY2FzZSAnZyc6Ci0J ICAgIGNhc2UgJ0UnOgotCSAgICBjYXNlICdHJzoKLQkgICAgICBpZiAoc2Vl bl9iaWdfaCB8fCBzZWVuX2JpZ19kIHx8IHNlZW5fZG91YmxlX2JpZ19kKQot CQl0aGlzX2FyZ2NsYXNzID0gZGVjZmxvYXRfYXJnOwotCSAgICAgIGVsc2Ug aWYgKHNlZW5fYmlnX2wpCi0JCXRoaXNfYXJnY2xhc3MgPSBsb25nX2RvdWJs ZV9hcmc7Ci0JICAgICAgZWxzZQotCQl0aGlzX2FyZ2NsYXNzID0gZG91Ymxl X2FyZzsKLQotCSAgICAgIGlmIChsY291bnQgfHwgc2Vlbl9oKQotCQliYWQg PSAxOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNhc2UgJyonOgotCSAgICAg IGVycm9yIChfKCJgKicgbm90IHN1cHBvcnRlZCBmb3IgcHJlY2lzaW9uIG9y IHdpZHRoIGluIHByaW50ZiIpKTsKLQotCSAgICBjYXNlICduJzoKLQkgICAg ICBlcnJvciAoXygiRm9ybWF0IHNwZWNpZmllciBgbicgbm90IHN1cHBvcnRl ZCBpbiBwcmludGYiKSk7Ci0KLQkgICAgY2FzZSAnXDAnOgotCSAgICAgIGVy cm9yIChfKCJJbmNvbXBsZXRlIGZvcm1hdCBzcGVjaWZpZXIgYXQgZW5kIG9m IGZvcm1hdCBzdHJpbmciKSk7Ci0KLQkgICAgZGVmYXVsdDoKLQkgICAgICBl cnJvciAoXygiVW5yZWNvZ25pemVkIGZvcm1hdCBzcGVjaWZpZXIgJyVjJyBp biBwcmludGYiKSwgKmYpOwotCSAgICB9Ci0KLQkgIGlmIChiYWQpCi0JICAg IGVycm9yIChfKCJJbmFwcHJvcHJpYXRlIG1vZGlmaWVycyB0byAiCi0JCSAg ICAgImZvcm1hdCBzcGVjaWZpZXIgJyVjJyBpbiBwcmludGYiKSwKLQkJICAg KmYpOwotCi0JICBmKys7Ci0KLQkgIGlmIChsY291bnQgPiAxICYmIFVTRV9Q UklOVEZfSTY0KQotCSAgICB7Ci0JICAgICAgLyogV2luZG93cycgcHJpbnRm IGRvZXMgc3VwcG9ydCBsb25nIGxvbmcsIGJ1dCBub3QgdGhlIHVzdWFsIHdh eS4KLQkJIENvbnZlcnQgJWxsZCB0byAlSTY0ZC4gICovCi0JICAgICAgaW50 IGxlbmd0aF9iZWZvcmVfbGwgPSBmIC0gbGFzdF9hcmcgLSAxIC0gbGNvdW50 OwotCi0JICAgICAgc3RybmNweSAoY3VycmVudF9zdWJzdHJpbmcsIGxhc3Rf YXJnLCBsZW5ndGhfYmVmb3JlX2xsKTsKLQkgICAgICBzdHJjcHkgKGN1cnJl bnRfc3Vic3RyaW5nICsgbGVuZ3RoX2JlZm9yZV9sbCwgIkk2NCIpOwotCSAg ICAgIGN1cnJlbnRfc3Vic3RyaW5nW2xlbmd0aF9iZWZvcmVfbGwgKyAzXSA9 Ci0JCWxhc3RfYXJnW2xlbmd0aF9iZWZvcmVfbGwgKyBsY291bnRdOwotCSAg ICAgIGN1cnJlbnRfc3Vic3RyaW5nICs9IGxlbmd0aF9iZWZvcmVfbGwgKyA0 OwotCSAgICB9Ci0JICBlbHNlIGlmICh0aGlzX2FyZ2NsYXNzID09IHdpZGVf c3RyaW5nX2FyZwotCQkgICB8fCB0aGlzX2FyZ2NsYXNzID09IHdpZGVfY2hh cl9hcmcpCi0JICAgIHsKLQkgICAgICAvKiBDb252ZXJ0ICVscyBvciAlbGMg dG8gJXMuICAqLwotCSAgICAgIGludCBsZW5ndGhfYmVmb3JlX2xzID0gZiAt IGxhc3RfYXJnIC0gMjsKLQotCSAgICAgIHN0cm5jcHkgKGN1cnJlbnRfc3Vi c3RyaW5nLCBsYXN0X2FyZywgbGVuZ3RoX2JlZm9yZV9scyk7Ci0JICAgICAg c3RyY3B5IChjdXJyZW50X3N1YnN0cmluZyArIGxlbmd0aF9iZWZvcmVfbHMs ICJzIik7Ci0JICAgICAgY3VycmVudF9zdWJzdHJpbmcgKz0gbGVuZ3RoX2Jl Zm9yZV9scyArIDI7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAg IHN0cm5jcHkgKGN1cnJlbnRfc3Vic3RyaW5nLCBsYXN0X2FyZywgZiAtIGxh c3RfYXJnKTsKLQkgICAgICBjdXJyZW50X3N1YnN0cmluZyArPSBmIC0gbGFz dF9hcmc7Ci0JICAgIH0KLQkgICpjdXJyZW50X3N1YnN0cmluZysrID0gJ1ww JzsKLQkgIGxhc3RfYXJnID0gZjsKLQkgIGFyZ2NsYXNzW25hcmdzX3dhbnRl ZCsrXSA9IHRoaXNfYXJnY2xhc3M7Ci0JfQorICAgIGZvciAoZnIgPSAwOyBm cGllY2VzW2ZyXS5zdHJpbmcgIT0gTlVMTDsgZnIrKykKKyAgICAgIGlmIChm cGllY2VzW2ZyXS5hcmdjbGFzcyAhPSBsaXRlcmFsX3BpZWNlKQorCSsrbmFy Z3Nfd2FudGVkOwogCiAgICAgLyogTm93LCBwYXJzZSBhbGwgYXJndW1lbnRz IGFuZCBldmFsdWF0ZSB0aGVtLgogICAgICAgIFN0b3JlIHRoZSBWQUxVRXMg aW4gVkFMX0FSR1MuICAqLwpAQCAtMjM0OSwxMCArMjA2NCwxMSBAQCB1aV9w cmludGYgKGNoYXIgKmFyZywgc3RydWN0IHVpX2ZpbGUgKnN0CiAgICAgICBl cnJvciAoXygiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Igc3BlY2lm aWVkIGZvcm1hdC1zdHJpbmciKSk7CiAKICAgICAvKiBOb3cgYWN0dWFsbHkg cHJpbnQgdGhlbS4gICovCi0gICAgY3VycmVudF9zdWJzdHJpbmcgPSBzdWJz dHJpbmdzOwotICAgIGZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorICAg IGkgPSAwOworICAgIGZvciAoZnIgPSAwOyBmcGllY2VzW2ZyXS5zdHJpbmcg IT0gTlVMTDsgZnIrKykKICAgICAgIHsKLQlzd2l0Y2ggKGFyZ2NsYXNzW2ld KQorCWN1cnJlbnRfc3Vic3RyaW5nID0gZnBpZWNlc1tmcl0uc3RyaW5nOwor CXN3aXRjaCAoZnBpZWNlc1tmcl0uYXJnY2xhc3MpCiAJICB7CiAJICBjYXNl IHN0cmluZ19hcmc6CiAJICAgIHsKQEAgLTI2ODcsMjAgKzI0MDMsMjUgQEAg dWlfcHJpbnRmIChjaGFyICphcmcsIHN0cnVjdCB1aV9maWxlICpzdAogCiAJ ICAgICAgYnJlYWs7CiAJICAgIH0KKwkgIGNhc2UgbGl0ZXJhbF9waWVjZToK KwkgICAgLyogUHJpbnQgYSBwb3J0aW9uIG9mIHRoZSBmb3JtYXQgc3RyaW5n IHRoYXQgaGFzIG5vCisJICAgICAgIGRpcmVjdGl2ZXMuICBOb3RlIHRoYXQg dGhpcyB3aWxsIG5vdCBpbmNsdWRlIGFueQorCSAgICAgICBvcmRpbmFyeSAl LXNwZWNzLCBidXQgaXQgbWlnaHQgaW5jbHVkZSAiJSUiLiAgVGhhdCBpcwor CSAgICAgICB3aHkgd2UgdXNlIHByaW50Zl9maWx0ZXJlZCBhbmQgbm90IHB1 dHNfZmlsdGVyZWQgaGVyZS4KKwkgICAgICAgQWxzbywgd2UgcGFzcyBhIGR1 bW15IGFyZ3VtZW50IGJlY2F1c2Ugc29tZSBwbGF0Zm9ybXMKKwkgICAgICAg aGF2ZSBtb2RpZmllZCBHQ0MgdG8gaW5jbHVkZSAtV2Zvcm1hdC1zZWN1cml0 eSBieQorCSAgICAgICBkZWZhdWx0LCB3aGljaCB3aWxsIHdhcm4gaGVyZSBp ZiB0aGVyZSBpcyBubworCSAgICAgICBhcmd1bWVudC4gICovCisJICAgIGZw cmludGZfZmlsdGVyZWQgKHN0cmVhbSwgY3VycmVudF9zdWJzdHJpbmcsIDAp OworCSAgICBicmVhazsKIAkgIGRlZmF1bHQ6CiAJICAgIGludGVybmFsX2Vy cm9yIChfX0ZJTEVfXywgX19MSU5FX18sCiAJCQkgICAgXygiZmFpbGVkIGlu dGVybmFsIGNvbnNpc3RlbmN5IGNoZWNrIikpOwogCSAgfQotCS8qIFNraXAg dG8gdGhlIG5leHQgc3Vic3RyaW5nLiAgKi8KLQljdXJyZW50X3N1YnN0cmlu ZyArPSBzdHJsZW4gKGN1cnJlbnRfc3Vic3RyaW5nKSArIDE7CisJLyogTWF5 YmUgYWR2YW5jZSB0byB0aGUgbmV4dCBhcmd1bWVudC4gICovCisJaWYgKGZw aWVjZXNbZnJdLmFyZ2NsYXNzICE9IGxpdGVyYWxfcGllY2UpCisJICArK2k7 CiAgICAgICB9Ci0gICAgLyogUHJpbnQgdGhlIHBvcnRpb24gb2YgdGhlIGZv cm1hdCBzdHJpbmcgYWZ0ZXIgdGhlIGxhc3QgYXJndW1lbnQuCi0gICAgICAg Tm90ZSB0aGF0IHRoaXMgd2lsbCBub3QgaW5jbHVkZSBhbnkgb3JkaW5hcnkg JS1zcGVjcywgYnV0IGl0Ci0gICAgICAgbWlnaHQgaW5jbHVkZSAiJSUiLiAg VGhhdCBpcyB3aHkgd2UgdXNlIHByaW50Zl9maWx0ZXJlZCBhbmQgbm90Ci0g ICAgICAgcHV0c19maWx0ZXJlZCBoZXJlLiAgQWxzbywgd2UgcGFzcyBhIGR1 bW15IGFyZ3VtZW50IGJlY2F1c2UKLSAgICAgICBzb21lIHBsYXRmb3JtcyBo YXZlIG1vZGlmaWVkIEdDQyB0byBpbmNsdWRlIC1XZm9ybWF0LXNlY3VyaXR5 Ci0gICAgICAgYnkgZGVmYXVsdCwgd2hpY2ggd2lsbCB3YXJuIGhlcmUgaWYg dGhlcmUgaXMgbm8gYXJndW1lbnQuICAqLwotICAgIGZwcmludGZfZmlsdGVy ZWQgKHN0cmVhbSwgbGFzdF9hcmcsIDApOwogICB9CiAgIGRvX2NsZWFudXBz IChvbGRfY2xlYW51cHMpOwogfQpJbmRleDogcmVtb3RlLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9yZW1v dGUuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MDAKZGlmZiAtdSAtcCAt cjEuNTAwIHJlbW90ZS5jCi0tLSByZW1vdGUuYwk1IEp1biAyMDEyIDIxOjIy OjMxIC0wMDAwCTEuNTAwCisrKyByZW1vdGUuYwkyNSBKdW4gMjAxMiAxNTox Mjo1OCAtMDAwMApAQCAtMjQyLDYgKzI0Miw4IEBAIHN0YXRpYyB2b2lkIHJl bW90ZV9jb25zb2xlX291dHB1dCAoY2hhciAKIAogc3RhdGljIGludCByZW1v dGVfc3VwcG9ydHNfY29uZF9icmVha3BvaW50cyAodm9pZCk7CiAKK3N0YXRp YyBpbnQgcmVtb3RlX2Nhbl9ydW5fYnJlYWtwb2ludF9jb21tYW5kcyAodm9p ZCk7CisKIC8qIFRoZSBub24tc3RvcCByZW1vdGUgcHJvdG9jb2wgcHJvdmlz aW9ucyBmb3Igb25lIHBlbmRpbmcgc3RvcCByZXBseS4KICAgIFRoaXMgaXMg d2hlcmUgd2Uga2VlcCBpdCB1bnRpbCBpdCBpcyBhY2tub3dsZWRnZWQuICAq LwogCkBAIC0zMjMsNiArMzI1LDEwIEBAIHN0cnVjdCByZW1vdGVfc3RhdGUK ICAgICAgY29uZGl0aW9ucy4gICovCiAgIGludCBjb25kX2JyZWFrcG9pbnRz OwogCisgIC8qIFRydWUgaWYgdGhlIHN0dWIgcmVwb3J0cyBzdXBwb3J0IGZv ciB0YXJnZXQtc2lkZSBicmVha3BvaW50CisgICAgIGNvbW1hbmRzLiAgKi8K KyAgaW50IGJyZWFrcG9pbnRfY29tbWFuZHM7CisKICAgLyogVHJ1ZSBpZiB0 aGUgc3R1YiByZXBvcnRzIHN1cHBvcnQgZm9yIGZhc3QgdHJhY2Vwb2ludHMu ICAqLwogICBpbnQgZmFzdF90cmFjZXBvaW50czsKIApAQCAtMTI3NCw2ICsx MjgwLDcgQEAgZW51bSB7CiAgIFBBQ0tFVF9xQXR0YWNoZWQsCiAgIFBBQ0tF VF9Db25kaXRpb25hbFRyYWNlcG9pbnRzLAogICBQQUNLRVRfQ29uZGl0aW9u YWxCcmVha3BvaW50cywKKyAgUEFDS0VUX0JyZWFrcG9pbnRDb21tYW5kcywK ICAgUEFDS0VUX0Zhc3RUcmFjZXBvaW50cywKICAgUEFDS0VUX1N0YXRpY1Ry YWNlcG9pbnRzLAogICBQQUNLRVRfSW5zdGFsbEluVHJhY2UsCkBAIC0zODAx LDYgKzM4MDgsMTYgQEAgcmVtb3RlX2NvbmRfYnJlYWtwb2ludF9mZWF0dXJl IChjb25zdCBzdAogfQogCiBzdGF0aWMgdm9pZAorcmVtb3RlX2JyZWFrcG9p bnRfY29tbWFuZHNfZmVhdHVyZSAoY29uc3Qgc3RydWN0IHByb3RvY29sX2Zl YXR1cmUgKmZlYXR1cmUsCisJCQkJICAgIGVudW0gcGFja2V0X3N1cHBvcnQg c3VwcG9ydCwKKwkJCQkgICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIHN0 cnVjdCByZW1vdGVfc3RhdGUgKnJzID0gZ2V0X3JlbW90ZV9zdGF0ZSAoKTsK KworICBycy0+YnJlYWtwb2ludF9jb21tYW5kcyA9IChzdXBwb3J0ID09IFBB Q0tFVF9FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZAogcmVtb3RlX2Zhc3Rf dHJhY2Vwb2ludF9mZWF0dXJlIChjb25zdCBzdHJ1Y3QgcHJvdG9jb2xfZmVh dHVyZSAqZmVhdHVyZSwKIAkJCQllbnVtIHBhY2tldF9zdXBwb3J0IHN1cHBv cnQsCiAJCQkJY29uc3QgY2hhciAqdmFsdWUpCkBAIC0zODk4LDYgKzM5MTUs OCBAQCBzdGF0aWMgc3RydWN0IHByb3RvY29sX2ZlYXR1cmUgcmVtb3RlX3By CiAgICAgUEFDS0VUX0NvbmRpdGlvbmFsVHJhY2Vwb2ludHMgfSwKICAgeyAi Q29uZGl0aW9uYWxCcmVha3BvaW50cyIsIFBBQ0tFVF9ESVNBQkxFLCByZW1v dGVfY29uZF9icmVha3BvaW50X2ZlYXR1cmUsCiAgICAgUEFDS0VUX0NvbmRp dGlvbmFsQnJlYWtwb2ludHMgfSwKKyAgeyAiQnJlYWtwb2ludENvbW1hbmRz IiwgUEFDS0VUX0RJU0FCTEUsIHJlbW90ZV9icmVha3BvaW50X2NvbW1hbmRz X2ZlYXR1cmUsCisgICAgUEFDS0VUX0JyZWFrcG9pbnRDb21tYW5kcyB9LAog ICB7ICJGYXN0VHJhY2Vwb2ludHMiLCBQQUNLRVRfRElTQUJMRSwgcmVtb3Rl X2Zhc3RfdHJhY2Vwb2ludF9mZWF0dXJlLAogICAgIFBBQ0tFVF9GYXN0VHJh Y2Vwb2ludHMgfSwKICAgeyAiU3RhdGljVHJhY2Vwb2ludHMiLCBQQUNLRVRf RElTQUJMRSwgcmVtb3RlX3N0YXRpY190cmFjZXBvaW50X2ZlYXR1cmUsCkBA IC03ODQ3LDYgKzc4NjYsMzcgQEAgcmVtb3RlX2FkZF90YXJnZXRfc2lkZV9j b25kaXRpb24gKHN0cnVjdAogICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZv aWQKK3JlbW90ZV9hZGRfdGFyZ2V0X3NpZGVfY29tbWFuZHMgKHN0cnVjdCBn ZGJhcmNoICpnZGJhcmNoLAorCQkJCSBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8g KmJwX3RndCwgY2hhciAqYnVmKQoreworICBzdHJ1Y3QgYWdlbnRfZXhwciAq YWV4cHIgPSBOVUxMOworICBpbnQgaSwgaXg7CisKKyAgaWYgKFZFQ19lbXB0 eSAoYWdlbnRfZXhwcl9wLCBicF90Z3QtPnRjb21tYW5kcykpCisgICAgcmV0 dXJuOworCisgIGJ1ZiArPSBzdHJsZW4gKGJ1Zik7CisKKyAgc3ByaW50ZiAo YnVmLCAiO2NtZHM6JXgsIiwgYnBfdGd0LT5wZXJzaXN0KTsKKyAgYnVmICs9 IHN0cmxlbiAoYnVmKTsKKworICAvKiBDb25jYXRlbmF0ZSBhbGwgdGhlIGFn ZW50IGV4cHJlc3Npb25zIHRoYXQgYXJlIGNvbW1hbmRzIGludG8gdGhlCisg ICAgIGNtZHMgcGFyYW1ldGVyLiAgKi8KKyAgZm9yIChpeCA9IDA7CisgICAg ICAgVkVDX2l0ZXJhdGUgKGFnZW50X2V4cHJfcCwgYnBfdGd0LT50Y29tbWFu ZHMsIGl4LCBhZXhwcik7CisgICAgICAgaXgrKykKKyAgICB7CisgICAgICBz cHJpbnRmIChidWYsICJYJXgsIiwgYWV4cHItPmxlbik7CisgICAgICBidWYg Kz0gc3RybGVuIChidWYpOworICAgICAgZm9yIChpID0gMDsgaSA8IGFleHBy LT5sZW47ICsraSkKKwlidWYgPSBwYWNrX2hleF9ieXRlIChidWYsIGFleHBy LT5idWZbaV0pOworICAgICAgKmJ1ZiA9ICdcMCc7CisgICAgfQorCisgIFZF Q19mcmVlIChhZ2VudF9leHByX3AsIGJwX3RndC0+dGNvbW1hbmRzKTsKK30K KwogLyogSW5zZXJ0IGEgYnJlYWtwb2ludC4gIE9uIHRhcmdldHMgdGhhdCBo YXZlIHNvZnR3YXJlIGJyZWFrcG9pbnQKICAgIHN1cHBvcnQsIHdlIGFzayB0 aGUgcmVtb3RlIHRhcmdldCB0byBkbyB0aGUgd29yazsgb24gdGFyZ2V0cwog ICAgd2hpY2ggZG9uJ3QsIHdlIGluc2VydCBhIHRyYWRpdGlvbmFsIG1lbW9y eSBicmVha3BvaW50LiAgKi8KQEAgLTc4ODQsNiArNzkzNCw5IEBAIHJlbW90 ZV9pbnNlcnRfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2gKICAgICAgIGlm IChyZW1vdGVfc3VwcG9ydHNfY29uZF9icmVha3BvaW50cyAoKSkKIAlyZW1v dGVfYWRkX3RhcmdldF9zaWRlX2NvbmRpdGlvbiAoZ2RiYXJjaCwgYnBfdGd0 LCBwLCBlbmRidWYpOwogCisgICAgICBpZiAocmVtb3RlX2Nhbl9ydW5fYnJl YWtwb2ludF9jb21tYW5kcyAoKSkKKwlyZW1vdGVfYWRkX3RhcmdldF9zaWRl X2NvbW1hbmRzIChnZGJhcmNoLCBicF90Z3QsIHApOworCiAgICAgICBwdXRw a3QgKHJzLT5idWYpOwogICAgICAgZ2V0cGt0ICgmcnMtPmJ1ZiwgJnJzLT5i dWZfc2l6ZSwgMCk7CiAKQEAgLTgxMjUsNiArODE3OCw5IEBAIHJlbW90ZV9p bnNlcnRfaHdfYnJlYWtwb2ludCAoc3RydWN0IGdkYmEKICAgaWYgKHJlbW90 ZV9zdXBwb3J0c19jb25kX2JyZWFrcG9pbnRzICgpKQogICAgIHJlbW90ZV9h ZGRfdGFyZ2V0X3NpZGVfY29uZGl0aW9uIChnZGJhcmNoLCBicF90Z3QsIHAs IGVuZGJ1Zik7CiAKKyAgaWYgKHJlbW90ZV9jYW5fcnVuX2JyZWFrcG9pbnRf Y29tbWFuZHMgKCkpCisgICAgcmVtb3RlX2FkZF90YXJnZXRfc2lkZV9jb21t YW5kcyAoZ2RiYXJjaCwgYnBfdGd0LCBwKTsKKwogICBwdXRwa3QgKHJzLT5i dWYpOwogICBnZXRwa3QgKCZycy0+YnVmLCAmcnMtPmJ1Zl9zaXplLCAwKTsK IApAQCAtMTAwNjMsNiArMTAxMTksMTQgQEAgcmVtb3RlX3N1cHBvcnRzX3N0 cmluZ190cmFjaW5nICh2b2lkKQogICByZXR1cm4gcnMtPnN0cmluZ190cmFj aW5nOwogfQogCitzdGF0aWMgaW50CityZW1vdGVfY2FuX3J1bl9icmVha3Bv aW50X2NvbW1hbmRzICh2b2lkKQoreworICBzdHJ1Y3QgcmVtb3RlX3N0YXRl ICpycyA9IGdldF9yZW1vdGVfc3RhdGUgKCk7CisKKyAgcmV0dXJuIHJzLT5i cmVha3BvaW50X2NvbW1hbmRzOworfQorCiBzdGF0aWMgdm9pZAogcmVtb3Rl X3RyYWNlX2luaXQgKHZvaWQpCiB7CkBAIC0xMDk4MSw2ICsxMTA0NSw3IEBA IFNwZWNpZnkgdGhlIHNlcmlhbCBkZXZpY2UgaXQgaXMgY29ubmVjdGUKICAg cmVtb3RlX29wcy50b19zdXBwb3J0c19lbmFibGVfZGlzYWJsZV90cmFjZXBv aW50ID0gcmVtb3RlX3N1cHBvcnRzX2VuYWJsZV9kaXNhYmxlX3RyYWNlcG9p bnQ7CiAgIHJlbW90ZV9vcHMudG9fc3VwcG9ydHNfc3RyaW5nX3RyYWNpbmcg PSByZW1vdGVfc3VwcG9ydHNfc3RyaW5nX3RyYWNpbmc7CiAgIHJlbW90ZV9v cHMudG9fc3VwcG9ydHNfZXZhbHVhdGlvbl9vZl9icmVha3BvaW50X2NvbmRp dGlvbnMgPSByZW1vdGVfc3VwcG9ydHNfY29uZF9icmVha3BvaW50czsKKyAg cmVtb3RlX29wcy50b19jYW5fcnVuX2JyZWFrcG9pbnRfY29tbWFuZHMgPSBy ZW1vdGVfY2FuX3J1bl9icmVha3BvaW50X2NvbW1hbmRzOwogICByZW1vdGVf b3BzLnRvX3RyYWNlX2luaXQgPSByZW1vdGVfdHJhY2VfaW5pdDsKICAgcmVt b3RlX29wcy50b19kb3dubG9hZF90cmFjZXBvaW50ID0gcmVtb3RlX2Rvd25s b2FkX3RyYWNlcG9pbnQ7CiAgIHJlbW90ZV9vcHMudG9fY2FuX2Rvd25sb2Fk X3RyYWNlcG9pbnQgPSByZW1vdGVfY2FuX2Rvd25sb2FkX3RyYWNlcG9pbnQ7 CkBAIC0xMTUxMSw2ICsxMTU3NiwxMCBAQCBTaG93IHRoZSBtYXhpbXVtIHNp emUgb2YgdGhlIGFkZHJlc3MgKGluCiAJCQkgIkNvbmRpdGlvbmFsQnJlYWtw b2ludHMiLAogCQkJICJjb25kaXRpb25hbC1icmVha3BvaW50cyIsIDApOwog CisgIGFkZF9wYWNrZXRfY29uZmlnX2NtZCAoJnJlbW90ZV9wcm90b2NvbF9w YWNrZXRzW1BBQ0tFVF9CcmVha3BvaW50Q29tbWFuZHNdLAorCQkJICJCcmVh a3BvaW50Q29tbWFuZHMiLAorCQkJICJicmVha3BvaW50LWNvbW1hbmRzIiwg MCk7CisKICAgYWRkX3BhY2tldF9jb25maWdfY21kICgmcmVtb3RlX3Byb3Rv Y29sX3BhY2tldHNbUEFDS0VUX0Zhc3RUcmFjZXBvaW50c10sCiAJCQkgIkZh c3RUcmFjZXBvaW50cyIsICJmYXN0LXRyYWNlcG9pbnRzIiwgMCk7CiAKSW5k ZXg6IHRhcmdldC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9jdnMvc3JjL3NyYy9nZGIvdGFyZ2V0LmMsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMzEwCmRpZmYgLXUgLXAgLXIxLjMxMCB0YXJnZXQuYwotLS0gdGFy Z2V0LmMJNSBKdW4gMjAxMiAyMToyMjozMSAtMDAwMAkxLjMxMAorKysgdGFy Z2V0LmMJMjUgSnVuIDIwMTIgMTU6MTI6NTggLTAwMDAKQEAgLTcwMyw2ICs3 MDMsNyBAQCB1cGRhdGVfY3VycmVudF90YXJnZXQgKHZvaWQpCiAgICAgICBJ TkhFUklUICh0b19jYW5fdXNlX2FnZW50LCB0KTsKICAgICAgIElOSEVSSVQg KHRvX21hZ2ljLCB0KTsKICAgICAgIElOSEVSSVQgKHRvX3N1cHBvcnRzX2V2 YWx1YXRpb25fb2ZfYnJlYWtwb2ludF9jb25kaXRpb25zLCB0KTsKKyAgICAg IElOSEVSSVQgKHRvX2Nhbl9ydW5fYnJlYWtwb2ludF9jb21tYW5kcywgdCk7 CiAgICAgICAvKiBEbyBub3QgaW5oZXJpdCB0b19tZW1vcnlfbWFwLiAgKi8K ICAgICAgIC8qIERvIG5vdCBpbmhlcml0IHRvX2ZsYXNoX2VyYXNlLiAgKi8K ICAgICAgIC8qIERvIG5vdCBpbmhlcml0IHRvX2ZsYXNoX2RvbmUuICAqLwpA QCAtOTMyLDYgKzkzMyw5IEBAIHVwZGF0ZV9jdXJyZW50X3RhcmdldCAodm9p ZCkKICAgZGVfZmF1bHQgKHRvX3N1cHBvcnRzX2V2YWx1YXRpb25fb2ZfYnJl YWtwb2ludF9jb25kaXRpb25zLAogCSAgICAoaW50ICgqKSAodm9pZCkpCiAJ ICAgIHJldHVybl96ZXJvKTsKKyAgZGVfZmF1bHQgKHRvX2Nhbl9ydW5fYnJl YWtwb2ludF9jb21tYW5kcywKKwkgICAgKGludCAoKikgKHZvaWQpKQorCSAg ICByZXR1cm5femVybyk7CiAgIGRlX2ZhdWx0ICh0b191c2VfYWdlbnQsCiAJ ICAgIChpbnQgKCopIChpbnQpKQogCSAgICB0Y29tcGxhaW4pOwpJbmRleDog dGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2 cy9zcmMvc3JjL2dkYi90YXJnZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS4yMzgKZGlmZiAtdSAtcCAtcjEuMjM4IHRhcmdldC5oCi0tLSB0YXJnZXQu aAk1IEp1biAyMDEyIDIxOjIyOjMxIC0wMDAwCTEuMjM4CisrKyB0YXJnZXQu aAkyNSBKdW4gMjAxMiAxNToxMjo1OCAtMDAwMApAQCAtNjcyLDYgKzY3Miwx MCBAQCBzdHJ1Y3QgdGFyZ2V0X29wcwogICAgICAgIGVuZD8gICovCiAgICAg aW50ICgqdG9fc3VwcG9ydHNfZXZhbHVhdGlvbl9vZl9icmVha3BvaW50X2Nv bmRpdGlvbnMpICh2b2lkKTsKIAorICAgIC8qIERvZXMgdGhpcyB0YXJnZXQg c3VwcG9ydCBldmFsdWF0aW9uIG9mIGJyZWFrcG9pbnQgY29tbWFuZHMgb24g aXRzCisgICAgICAgZW5kPyAgKi8KKyAgICBpbnQgKCp0b19jYW5fcnVuX2Jy ZWFrcG9pbnRfY29tbWFuZHMpICh2b2lkKTsKKwogICAgIC8qIERldGVybWlu ZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBvZiB0aHJlYWQgUFRJRC4KIAogICAg ICAgIFRoZSB0YXJnZXQgaXMgc3VwcG9zZWQgdG8gZGV0ZXJtaW5lIHRoZSBh cmNoaXRlY3R1cmUgb2YgdGhlIGNvZGUgd2hlcmUKQEAgLTk5MSw2ICs5OTUs MTIgQEAgaW50IHRhcmdldF9zdXBwb3J0c19kaXNhYmxlX3JhbmRvbWl6YXRp bwogI2RlZmluZSB0YXJnZXRfc3VwcG9ydHNfZXZhbHVhdGlvbl9vZl9icmVh a3BvaW50X2NvbmRpdGlvbnMoKSBcCiAgICgqY3VycmVudF90YXJnZXQudG9f c3VwcG9ydHNfZXZhbHVhdGlvbl9vZl9icmVha3BvaW50X2NvbmRpdGlvbnMp ICgpCiAKKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHRhcmdldCBjYW4gaGFu ZGxlIGJyZWFrcG9pbnQgY29tbWFuZHMKKyAgIG9uIGl0cyBlbmQuICAqLwor CisjZGVmaW5lIHRhcmdldF9jYW5fcnVuX2JyZWFrcG9pbnRfY29tbWFuZHMo KSBcCisgICgqY3VycmVudF90YXJnZXQudG9fY2FuX3J1bl9icmVha3BvaW50 X2NvbW1hbmRzKSAoKQorCiAvKiBJbnZhbGlkYXRlIGFsbCB0YXJnZXQgZGNh Y2hlcy4gICovCiBleHRlcm4gdm9pZCB0YXJnZXRfZGNhY2hlX2ludmFsaWRh dGUgKHZvaWQpOwogCkluZGV4OiBkb2MvYWdlbnRleHByLnRleGkKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9k b2MvYWdlbnRleHByLnRleGksdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcK ZGlmZiAtdSAtcCAtcjEuMTcgYWdlbnRleHByLnRleGkKLS0tIGRvYy9hZ2Vu dGV4cHIudGV4aQk0IEphbiAyMDEyIDA4OjE3OjIwIC0wMDAwCTEuMTcKKysr IGRvYy9hZ2VudGV4cHIudGV4aQkyNSBKdW4gMjAxMiAxNToxMjo1OCAtMDAw MApAQCAtNDkzLDYgKzQ5MywyMiBAQCBSZWNvcmQgdGhlIGJ5dGVzIGF0IEB2 YXJ7YWRkcn0gaW4gYSB0cmFjCiBieSBHREIuICBTdG9wIGF0IGVpdGhlciB0 aGUgZmlyc3QgemVybyBieXRlLCBvciB3aGVuIEB2YXJ7c2l6ZX0gYnl0ZXMK IGhhdmUgYmVlbiByZWNvcmRlZCwgd2hpY2hldmVyIG9jY3VycyBmaXJzdC4K IAorQGl0ZW0gQGNvZGV7cHJpbnRmfSAoMHgzNCkgIEB2YXJ7bnVtYXJnc30g QHZhcntzdHJpbmd9IEByZXN1bHR7fQorRG8gYSBmb3JtYXR0ZWQgcHJpbnQs IGluIHRoZSBzdHlsZSBvZiB0aGUgQyBmdW5jdGlvbiBAY29kZXtwcmludGZ9 KS4KK1RoZSB2YWx1ZSBvZiBAdmFye251bWFyZ3N9IGlzIHRoZSBudW1iZXIg b2YgYXJndW1lbnRzIHRvIGV4cGVjdCBvbiB0aGUKK3N0YWNrLCB3aGlsZSBA dmFye3N0cmluZ30gaXMgdGhlIGZvcm1hdCBzdHJpbmcsIHByZWZpeGVkIHdp dGggYQordHdvLWJ5dGUgbGVuZ3RoLCBhbmQgc3VmZml4ZWQgd2l0aCBhIHpl cm8gYnl0ZS4gIFRoZSBmb3JtYXQgc3RyaW5nCitpbmNsdWRlcyBlc2NhcGVk IHNlcXVlbmNlcyBqdXN0IGFzIGl0IGFwcGVhcnMgaW4gQyBzb3VyY2UsIHNv IGZvcgoraW5zdGFuY2UgdGhlIGZvcm1hdCBzdHJpbmcgQGNvZGV7Ilx0JWRc biJ9IGlzIHNpeCBjaGFyYWN0ZXJzIGxvbmcsIGFuZAordGhlIG91dHB1dCB3 aWxsIGNvbnNpc3Qgb2YgYSB0YWIgY2hhcmFjdGVyLCBhIGRlY2ltYWwgbnVt YmVyLCBhbmQgYQorbmV3bGluZS4gIEF0IHRoZSB0b3Agb2YgdGhlIHN0YWNr LCBhYm92ZSB0aGUgdmFsdWVzIHRvIGJlIHByaW50ZWQsCit0aGlzIGJ5dGVj b2RlIHdpbGwgcG9wIGEgYGBmdW5jdGlvbicnIGFuZCBgYGNoYW5uZWwnJy4g IElmIHRoZQorZnVuY3Rpb24gaXMgbm9uemVybywgdGhlbiB0aGUgdGFyZ2V0 IG1heSB0cmVhdCBpdCBhcyBhIGZ1bmN0aW9uIGFuZAorY2FsbCBpdCwgcGFz c2luZyB0aGUgY2hhbm5lbCBhcyBhIGZpcnN0IGFyZ3VtZW50LCBhcyB3aXRo IHRoZSBDCitmdW5jdGlvbiBAY29kZXtmcHJpbnRmfS4gIElmIHRoZSBmdW5j dGlvbiBpcyB6ZXJvLCB0aGVuIHRoZSB0YXJnZXQgbWF5CitzaW1wbHkgY2Fs bCBhIHN0YW5kYXJkIHByaW50ZiBmdW5jdGlvbiBvZiBpdHMgY2hvaWNlLiAg SW4gYWxsLCB0aGlzCitieXRlY29kZSBwb3BzIDIgKyBAdmFye251bWFyZ3N9 IHN0YWNrIGVsZW1lbnRzLCBhbmQgcHVzaGVzIG5vdGhpbmcuCisKIEBpdGVt IEBjb2Rle2VuZH0gKDB4MjcpOiBAcmVzdWx0e30KIFN0b3AgZXhlY3V0aW5n IGJ5dGVjb2RlOyB0aGUgcmVzdWx0IHNob3VsZCBiZSB0aGUgdG9wIGVsZW1l bnQgb2YgdGhlCiBzdGFjay4gIElmIHRoZSBwdXJwb3NlIG9mIHRoZSBleHBy ZXNzaW9uIHdhcyB0byBjb21wdXRlIGFuIGx2YWx1ZSBvciBhCkluZGV4OiBk b2MvZ2RiLnRleGluZm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9kb2MvZ2RiLnRleGluZm8sdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuOTc5CmRpZmYgLXUgLXAgLXIxLjk3OSBnZGIudGV4 aW5mbwotLS0gZG9jL2dkYi50ZXhpbmZvCTIzIEp1biAyMDEyIDIyOjIzOjQ3 IC0wMDAwCTEuOTc5CisrKyBkb2MvZ2RiLnRleGluZm8JMjUgSnVuIDIwMTIg MTU6MTM6MDAgLTAwMDAKQEAgLTQ2NDksNiArNDY0OSwxNCBAQCBwcm9ncmFt J3MgQGNvZGV7cHJpbnRmfSBmdW5jdGlvbi4gIFRoaXMgCiBjaGFyYWN0ZXJz IGdvIHRvIHRoZSBwcm9ncmFtJ3Mgb3V0cHV0IGRldmljZSwgc28gdGhleSBj YW4gcmVjb3JkZWQgaW4KIHJlZGlyZWN0cyB0byBmaWxlcyBhbmQgc28gZm9y dGguCiAKK0lmIHlvdSBhcmUgZG9pbmcgcmVtb3RlIGRlYnVnZ2luZyB3aXRo IGEgc3R1YiBvciBhZ2VudCwgeW91IGNhbiBhbHNvCithc2sgdG8gaGF2ZSB0 aGUgcHJpbnRmIGhhbmRsZWQgYnkgdGhlIHJlbW90ZSBhZ2VudC4gIEluIGFk ZGl0aW9uIHRvCitlbnN1cmluZyB0aGF0IHRoZSBvdXRwdXQgZ29lcyB0byB0 aGUgcmVtb3RlIHByb2dyYW0ncyBkZXZpY2UgYWxvbmcKK3dpdGggYW55IG90 aGVyIG91dHB1dCB0aGUgcHJvZ3JhbSBtaWdodCBwcm9kdWNlLCB5b3UgY2Fu IGFsc28gYXNrIHRoYXQKK3RoZSBkcHJpbnRmIHJlbWFpbiBhY3RpdmUgZXZl biBhZnRlciBkaXNjb25uZWN0aW5nIGZyb20gdGhlIHJlbW90ZQordGFyZ2V0 LiAgVXNpbmcgdGhlIHN0dWIvYWdlbnQgaXMgYWxzbyBtb3JlIGVmZmljaWVu dCwgYXMgaXQgY2FuIGRvCitldmVyeXRoaW5nIHdpdGhvdXQgbmVlZGluZyB0 byBjb21tdW5pY2F0ZSB3aXRoIEB2YWx1ZXtHREJOfS4KKwogQHRhYmxlIEBj b2RlCiBAa2luZGV4IGRwcmludGYKIEBpdGVtIGRwcmludGYgQHZhcntsb2Nh dGlvbn0sQHZhcnt0ZW1wbGF0ZX0sQHZhcntleHByZXNzaW9ufVssQHZhcntl eHByZXNzaW9ufUBkb3Rze31dCkBAIC00NjcyLDYgKzQ2ODAsMTIgQEAgSGFu ZGxlIHRoZSBvdXRwdXQgdXNpbmcgdGhlIEB2YWx1ZXtHREJOfQogSGFuZGxl IHRoZSBvdXRwdXQgYnkgY2FsbGluZyBhIGZ1bmN0aW9uIGluIHlvdXIgcHJv Z3JhbSAobm9ybWFsbHkKIEBjb2Rle3ByaW50Zn0pLgogCitAaXRlbSBhZ2Vu dAorQGtpbmRleCBkcHJpbnRmLXN0eWxlIGFnZW50CitIYXZlIHRoZSByZW1v dGUgZGVidWdnaW5nIGFnZW50IChzdWNoIGFzIEBjb2Rle2dkYnNlcnZlcn0p IGhhbmRsZQordGhlIG91dHB1dCBpdHNlbGYuICBUaGlzIHN0eWxlIGlzIG9u bHkgYXZhaWxhYmxlIGZvciBhZ2VudHMgdGhhdAorc3VwcG9ydCBydW5uaW5n IGNvbW1hbmRzIG9uIHRoZSB0YXJnZXQuCisKIEBpdGVtIHNldCBkcHJpbnRm LWZ1bmN0aW9uIEB2YXJ7ZnVuY3Rpb259CiBTZXQgdGhlIGZ1bmN0aW9uIHRv IGNhbGwgaWYgdGhlIGRwcmludGYgc3R5bGUgaXMgQGNvZGV7Y2FsbH0uICBC eQogZGVmYXVsdCBpdHMgdmFsdWUgaXMgQGNvZGV7cHJpbnRmfS4gIFlvdSBt YXkgc2V0IGl0IHRvIGFueSBleHByZXNzaW9uLgpAQCAtNDcwNiw2ICs0NzIw LDE3IEBAIE5vdGUgdGhhdCB0aGUgQGNvZGV7aW5mbyBicmVha30gZGlzcGxh eXMKIGFzIG5vcm1hbCBicmVha3BvaW50IGNvbW1hbmRzOyB5b3UgY2FuIHRo dXMgZWFzaWx5IHNlZSB0aGUgZWZmZWN0IG9mCiB0aGUgdmFyaWFibGUgc2V0 dGluZ3MuCiAKK0BpdGVtIHNldCBkaXNjb25uZWN0ZWQtZHByaW50ZiBvbgor QGl0ZW14IHNldCBkaXNjb25uZWN0ZWQtZHByaW50ZiBvZmYKK0BraW5kZXgg c2V0IGRpc2Nvbm5lY3RlZC1kcHJpbnRmCitDaG9vc2Ugd2hldGhlciBAY29k ZXtkcHJpbnRmfSBjb21tYW5kcyBzaG91bGQgY29udGludWUgdG8gcnVuIGlm CitAdmFsdWV7R0RCTn0gaGFzIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSB0YXJn ZXQuICBUaGlzIG9ubHkgYXBwbGllcworaWYgdGhlIEBjb2Rle2RwcmludGYt c3R5bGV9IGlzIEBjb2Rle2FnZW50fS4KKworQGl0ZW0gc2hvdyBkaXNjb25u ZWN0ZWQtZHByaW50ZiBvZmYKK0BraW5kZXggc2hvdyBkaXNjb25uZWN0ZWQt ZHByaW50ZgorU2hvdyB0aGUgY3VycmVudCBjaG9pY2UgZm9yIGRpc2Nvbm5l Y3RlZCBAY29kZXtkcHJpbnRmfS4KKwogQGVuZCB0YWJsZQogCiBAdmFsdWV7 R0RCTn0gZG9lcyBub3QgY2hlY2sgdGhlIHZhbGlkaXR5IG9mIGZ1bmN0aW9u IGFuZCBjaGFubmVsLApAQCAtMzQ0MTAsNiArMzQ0MzUsMTMgQEAgb2YgdGhl IGFkZHJlc3NlcyBvZiBAY29kZXtnbG9iYX0gYW5kIEBjbwogdGhlIHJlc3Vs dCBvZiB0aGUgYWRkaXRpb24sIHdoaWxlIGFuIGV2YWx1YXRpb24gZXhwcmVz c2lvbiB3aWxsIGRvIHRoZQogYWRkaXRpb24gYW5kIHJldHVybiB0aGUgc3Vt LgogCitAa2luZGV4IG1haW50IGFnZW50LXByaW50ZgorQGl0ZW0gbWFpbnQg YWdlbnQtcHJpbnRmIEB2YXJ7Zm9ybWF0fSxAdmFye2V4cHJ9LC4uLgorVHJh bnNsYXRlIHRoZSBnaXZlbiBmb3JtYXQgc3RyaW5nIGFuZCBsaXN0IG9mIGFy Z3VtZW50IGV4cHJlc3Npb25zCitpbnRvIHJlbW90ZSBhZ2VudCBieXRlY29k ZXMgYW5kIGRpc3BsYXkgdGhlbSBhcyBhIGRpc2Fzc2VtYmxlZCBsaXN0Lgor VGhpcyBjb21tYW5kIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZSBhZ2Vu dCB2ZXJzaW9uIG9mIGR5bmFtaWMKK3ByaW50ZiAoQHB4cmVme0R5bmFtaWMg UHJpbnRmfS4KKwogQGtpbmRleCBtYWludCBpbmZvIGJyZWFrcG9pbnRzCiBA aXRlbSBAYW5jaG9ye21haW50IGluZm8gYnJlYWtwb2ludHN9bWFpbnQgaW5m byBicmVha3BvaW50cwogVXNpbmcgdGhlIHNhbWUgZm9ybWF0IGFzIEBzYW1w e2luZm8gYnJlYWtwb2ludHN9LCBkaXNwbGF5IGJvdGggdGhlCkBAIC0zNTY0 NCw3ICszNTY3Niw3IEBAIGF2b2lkIHBvdGVudGlhbCBwcm9ibGVtcyB3aXRo IGR1cGxpY2F0ZSAKIGJlIGltcGxlbWVudGVkIGluIGFuIGlkZW1wb3RlbnQg d2F5Ln0KIAogQGl0ZW0gejAsQHZhcnthZGRyfSxAdmFye2tpbmR9Ci1AaXRl bXggWjAsQHZhcnthZGRyfSxAdmFye2tpbmR9QHJ7W307QHZhcntjb25kX2xp c3R9QGRvdHN7fUBye119CitAaXRlbXggWjAsQHZhcnthZGRyfSxAdmFye2tp bmR9QHJ7W307QHZhcntjb25kX2xpc3R9QGRvdHN7fUBye119QHJ7W307Y21k czpAdmFye3BlcnNpc3R9LEB2YXJ7Y21kX2xpc3R9QGRvdHN7fUBye119CiBA Y2luZGV4IEBzYW1we3owfSBwYWNrZXQKIEBjaW5kZXggQHNhbXB7WjB9IHBh Y2tldAogSW5zZXJ0IChAc2FtcHtaMH0pIG9yIHJlbW92ZSAoQHNhbXB7ejB9 KSBhIG1lbW9yeSBicmVha3BvaW50IGF0IGFkZHJlc3MKQEAgLTM1NjcyLDYg KzM1NzA0LDIyIEBAIGFjdHVhbCBjb25kaXRpb25hbCBleHByZXNzaW9uIGlu IGJ5dGVjb2QKIAogQGVuZCB0YWJsZQogCitUaGUgb3B0aW9uYWwgQHZhcntj bWRfbGlzdH0gcGFyYW1ldGVyIGludHJvZHVjZXMgY29tbWFuZHMgdGhhdCBt YXkgYmUKK3J1biBvbiB0aGUgdGFyZ2V0LCByYXRoZXIgdGhhbiBiZWluZyBy ZXBvcnRlZCBiYWNrIHRvIEB2YWx1ZXtHREJOfS4KK1RoZSBwYXJhbWV0ZXIg c3RhcnRzIHdpdGggYSBudW1lcmljIGZsYWcgQHZhcntwZXJzaXN0fTsgaWYg dGhlIGZsYWcgaXMKK25vbnplcm8sIHRoZW4gdGhlIGJyZWFrcG9pbnQgbWF5 IHJlbWFpbiBhY3RpdmUgYW5kIHRoZSBjb21tYW5kcworY29udGludWUgdG8g YmUgcnVuIGV2ZW4gd2hlbiBAdmFsdWV7R0RCTn0gZGlzY29ubmVjdHMgZnJv bSB0aGUgdGFyZ2V0LgorRm9sbG93aW5nIHRoaXMgZmxhZyBpcyBhIHNlcmll cyBvZiBleHByZXNzaW9ucyBjb25jYXRlbmF0ZWQgd2l0aCBubworc2VwYXJh dG9ycy4gIEVhY2ggZXhwcmVzc2lvbiBoYXMgdGhlIGZvbGxvd2luZyBmb3Jt OgorCitAdGFibGUgQHNhbXAKKworQGl0ZW0gWCBAdmFye2xlbn0sQHZhcntl eHByfQorQHZhcntsZW59IGlzIHRoZSBsZW5ndGggb2YgdGhlIGJ5dGVjb2Rl IGV4cHJlc3Npb24gYW5kIEB2YXJ7ZXhwcn0gaXMgdGhlCithY3R1YWwgY29u ZGl0aW9uYWwgZXhwcmVzc2lvbiBpbiBieXRlY29kZSBmb3JtLgorCitAZW5k IHRhYmxlCisKIHNlZSBAcmVme0FyY2hpdGVjdHVyZS1TcGVjaWZpYyBQcm90 b2NvbCBEZXRhaWxzfS4KIAogQGVtcGh7SW1wbGVtZW50YXRpb24gbm90ZTog SXQgaXMgcG9zc2libGUgZm9yIGEgdGFyZ2V0IHRvIGNvcHkgb3IgbW92ZQpA QCAtMzY2MDUsNiArMzY2NTMsMTEgQEAgVGhlc2UgYXJlIHRoZSBjdXJyZW50 bHkgZGVmaW5lZCBzdHViIGZlYQogQHRhYiBAc2FtcHstfQogQHRhYiBObwog CitAaXRlbSBAc2FtcHtCcmVha3BvaW50Q29tbWFuZHN9CitAdGFiIE5vCitA dGFiIEBzYW1wey19CitAdGFiIE5vCisKIEBlbmQgbXVsdGl0YWJsZQogCiBU aGVzZSBhcmUgdGhlIGN1cnJlbnRseSBkZWZpbmVkIHN0dWIgZmVhdHVyZXMs IGluIG1vcmUgZGV0YWlsOgpAQCAtMzY3NTQsNiArMzY4MDcsMTEgQEAgdG8g YmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgd2hpbGUgYSB0cmFjZQogVGhlIHJl bW90ZSBzdHViIHN1cHBvcnRzIHRoZSBAc2FtcHt0cmFjZW56fSBieXRlY29k ZSBmb3IgY29sbGVjdGluZyBzdHJpbmdzLgogU2VlIEByZWZ7Qnl0ZWNvZGUg RGVzY3JpcHRpb25zfSBmb3IgZGV0YWlscyBhYm91dCB0aGUgYnl0ZWNvZGUu CiAKK0BpdGVtIEJyZWFrcG9pbnRDb21tYW5kcworQGNpbmRleCBicmVha3Bv aW50IGNvbW1hbmRzLCBpbiByZW1vdGUgcHJvdG9jb2wKK1RoZSByZW1vdGUg c3R1YiBzdXBwb3J0cyBydW5uaW5nIGEgYnJlYWtwb2ludCdzIGNvbW1hbmQg bGlzdCBpdHNlbGYsCityYXRoZXIgdGhhbiByZXBvcnRpbmcgdGhlIGhpdCB0 byBAdmFsdWV7R0RCTn0uCisKIEBlbmQgdGFibGUKIAogQGl0ZW0gcVN5bWJv bDo6CkluZGV4OiBnZGJzZXJ2ZXIvYXguYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9heC5j LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBh eC5jCi0tLSBnZGJzZXJ2ZXIvYXguYwk2IEp1biAyMDEyIDA4OjMxOjMxIC0w MDAwCTEuMgorKysgZ2Ric2VydmVyL2F4LmMJMjUgSnVuIDIwMTIgMTU6MTM6 MDEgLTAwMDAKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgInNlcnZl ci5oIgogI2luY2x1ZGUgImF4LmgiCisjaW5jbHVkZSAiZm9ybWF0LmgiCiAK IHN0YXRpYyB2b2lkIGF4X3ZkZWJ1ZyAoY29uc3QgY2hhciAqLCAuLi4pIEFU VFJfRk9STUFUIChwcmludGYsIDEsIDIpOwogCkBAIC03ODksNiArNzkwLDEy MyBAQCBjb21waWxlX2J5dGVjb2RlcyAoc3RydWN0IGFnZW50X2V4cHIgKmFl CiAKICNlbmRpZgogCisvKiBNYWtlIHByaW50Zi10eXBlIGNhbGxzIHVzaW5n IGFyZ3VtZW50cyBzdXBwbGllZCBmcm9tIHRoZSBob3N0LiAgV2UKKyAgIG5l ZWQgdG8gcGFyc2UgdGhlIGZvcm1hdCBzdHJpbmcgb3Vyc2VsdmVzLCBhbmQg Y2FsbCB0aGUgZm9ybWF0dGluZworICAgZnVuY3Rpb24gd2l0aCBvbmUgYXJn dW1lbnQgYXQgYSB0aW1lLCBwYXJ0bHkgYmVjYXVzZSB0aGVyZSBpcyBubwor ICAgc2FmZSBwb3J0YWJsZSB3YXkgdG8gY29uc3RydWN0IGEgdmFyYXJncyBj YWxsLCBhbmQgcGFydGx5IHRvIHNlcnZlCisgICBhcyBhIHNlY3VyaXR5IGJh cnJpZXIgYWdhaW5zdCBiYWQgZm9ybWF0IHN0cmluZ3MgdGhhdCBtaWdodCBn ZXQKKyAgIGluLiAgKi8KKworc3RhdGljIHZvaWQKK2F4X3ByaW50ZiAoQ09S RV9BRERSIGZuLCBDT1JFX0FERFIgY2hhbiwgY2hhciAqZm9ybWF0LAorCSAg IGludCBuYXJncywgVUxPTkdFU1QgKmFyZ3MpCit7CisgIGNoYXIgKmYgPSBm b3JtYXQ7CisgIHN0cnVjdCBmb3JtYXRfcGllY2UgKmZwaWVjZXM7CisgIGlu dCBpLCBmcDsKKyAgY2hhciAqY3VycmVudF9zdWJzdHJpbmc7CisgIGludCBu YXJnc193YW50ZWQ7CisKKyAgYXhfZGVidWcgKCJQcmludGYgb2YgXCIlc1wi IHdpdGggJWQgYXJncyIsIGZvcm1hdCwgbmFyZ3MpOworCisgIGZwaWVjZXMg PSBwYXJzZV9mb3JtYXRfc3RyaW5nICgmZik7CisKKyAgbmFyZ3Nfd2FudGVk ID0gMDsKKyAgZm9yIChmcCA9IDA7IGZwaWVjZXNbZnBdLnN0cmluZyAhPSBO VUxMOyBmcCsrKQorICAgIGlmIChmcGllY2VzW2ZwXS5hcmdjbGFzcyAhPSBs aXRlcmFsX3BpZWNlKQorICAgICAgKytuYXJnc193YW50ZWQ7CisKKyAgaWYg KG5hcmdzICE9IG5hcmdzX3dhbnRlZCkKKyAgICBlcnJvciAoXygiV3Jvbmcg bnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Igc3BlY2lmaWVkIGZvcm1hdC1zdHJp bmciKSk7CisKKyAgaSA9IDA7CisgIGZvciAoZnAgPSAwOyBmcGllY2VzW2Zw XS5zdHJpbmcgIT0gTlVMTDsgZnArKykKKyAgICB7CisgICAgICBjdXJyZW50 X3N1YnN0cmluZyA9IGZwaWVjZXNbZnBdLnN0cmluZzsKKyAgICAgIGF4X2Rl YnVnICgiY3VycmVudCBzdWJzdHJpbmcgaXMgJyVzJywgY2xhc3MgaXMgJWQi LAorCQljdXJyZW50X3N1YnN0cmluZywgZnBpZWNlc1tmcF0uYXJnY2xhc3Mp OworICAgICAgc3dpdGNoIChmcGllY2VzW2ZwXS5hcmdjbGFzcykKKwl7CisJ Y2FzZSBzdHJpbmdfYXJnOgorCSAgeworCSAgICBnZGJfYnl0ZSAqc3RyOwor CSAgICBDT1JFX0FERFIgdGVtOworCSAgICBpbnQgajsKKworCSAgICB0ZW0g PSBhcmdzW2ldOworCisJICAgIC8qIFRoaXMgaXMgYSAlcyBhcmd1bWVudC4g IEZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLiAgKi8KKwkgICAgZm9y IChqID0gMDs7IGorKykKKwkgICAgICB7CisJCWdkYl9ieXRlIGM7CisKKwkJ cmVhZF9pbmZlcmlvcl9tZW1vcnkgKHRlbSArIGosICZjLCAxKTsKKwkJaWYg KGMgPT0gMCkKKwkJICBicmVhazsKKwkgICAgICB9CisKKwkgICAgICAvKiBD b3B5IHRoZSBzdHJpbmcgY29udGVudHMgaW50byBhIHN0cmluZyBpbnNpZGUg R0RCLiAgKi8KKwkgICAgICBzdHIgPSAoZ2RiX2J5dGUgKikgYWxsb2NhIChq ICsgMSk7CisJICAgICAgaWYgKGogIT0gMCkKKwkJcmVhZF9pbmZlcmlvcl9t ZW1vcnkgKHRlbSwgc3RyLCBqKTsKKwkgICAgICBzdHJbal0gPSAwOworCisg ICAgICAgICAgICAgIHByaW50ZiAoY3VycmVudF9zdWJzdHJpbmcsIChjaGFy ICopIHN0cik7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgbG9u Z19sb25nX2FyZzoKKyNpZiBkZWZpbmVkIChDQ19IQVNfTE9OR19MT05HKSAm JiBkZWZpbmVkIChQUklOVEZfSEFTX0xPTkdfTE9ORykKKwkgICAgeworCSAg ICAgIGxvbmcgbG9uZyB2YWwgPSBhcmdzW2ldOworCisgICAgICAgICAgICAg IHByaW50ZiAoY3VycmVudF9zdWJzdHJpbmcsIHZhbCk7CisJICAgICAgYnJl YWs7CisJICAgIH0KKyNlbHNlCisJICAgIGVycm9yIChfKCJsb25nIGxvbmcg bm90IHN1cHBvcnRlZCBpbiBhZ2VudCBwcmludGYiKSk7CisjZW5kaWYKKwlj YXNlIGludF9hcmc6CisJICB7CisJICAgIGludCB2YWwgPSBhcmdzW2ldOwor CisJICAgIHByaW50ZiAoY3VycmVudF9zdWJzdHJpbmcsIHZhbCk7CisJICAg IGJyZWFrOworCSAgfQorCisJY2FzZSBsb25nX2FyZzoKKwkgIHsKKwkgICAg bG9uZyB2YWwgPSBhcmdzW2ldOworCisJICAgIHByaW50ZiAoY3VycmVudF9z dWJzdHJpbmcsIHZhbCk7CisJICAgIGJyZWFrOworCSAgfQorCisJY2FzZSBs aXRlcmFsX3BpZWNlOgorCSAgLyogUHJpbnQgYSBwb3J0aW9uIG9mIHRoZSBm b3JtYXQgc3RyaW5nIHRoYXQgaGFzIG5vCisJICAgICBkaXJlY3RpdmVzLiAg Tm90ZSB0aGF0IHRoaXMgd2lsbCBub3QgaW5jbHVkZSBhbnkKKwkgICAgIG9y ZGluYXJ5ICUtc3BlY3MsIGJ1dCBpdCBtaWdodCBpbmNsdWRlICIlJSIuICBU aGF0IGlzCisJICAgICB3aHkgd2UgdXNlIHByaW50Zl9maWx0ZXJlZCBhbmQg bm90IHB1dHNfZmlsdGVyZWQgaGVyZS4KKwkgICAgIEFsc28sIHdlIHBhc3Mg YSBkdW1teSBhcmd1bWVudCBiZWNhdXNlIHNvbWUgcGxhdGZvcm1zCisJICAg ICBoYXZlIG1vZGlmaWVkIEdDQyB0byBpbmNsdWRlIC1XZm9ybWF0LXNlY3Vy aXR5IGJ5CisJICAgICBkZWZhdWx0LCB3aGljaCB3aWxsIHdhcm4gaGVyZSBp ZiB0aGVyZSBpcyBubworCSAgICAgYXJndW1lbnQuICAqLworCSAgcHJpbnRm IChjdXJyZW50X3N1YnN0cmluZywgMCk7CisJICBicmVhazsKKworCWRlZmF1 bHQ6CisJICBlcnJvciAoXygiRm9ybWF0IGRpcmVjdGl2ZSBpbiAnJXMnIG5v dCBzdXBwb3J0ZWQgaW4gYWdlbnQgcHJpbnRmIiksCisJCSBjdXJyZW50X3N1 YnN0cmluZyk7CisJfQorCisgICAgICAvKiBNYXliZSBhZHZhbmNlIHRvIHRo ZSBuZXh0IGFyZ3VtZW50LiAgKi8KKyAgICAgIGlmIChmcGllY2VzW2ZwXS5h cmdjbGFzcyAhPSBsaXRlcmFsX3BpZWNlKQorCSsraTsKKyAgICB9CisKKyAg ZnJlZV9mb3JtYXRfcGllY2VzIChmcGllY2VzKTsKK30KKwogLyogVGhlIGFn ZW50IGV4cHJlc3Npb24gZXZhbHVhdG9yLCBhcyBzcGVjaWZpZWQgYnkgdGhl IEdEQiBkb2NzLiBJdAogICAgcmV0dXJucyAwIGlmIGV2ZXJ5dGhpbmcgd2Vu dCBPSywgYW5kIGEgbm9uemVybyBlcnJvciBjb2RlCiAgICBvdGhlcndpc2Uu ICAqLwpAQCAtMTE1Miw2ICsxMjcwLDM3IEBAIGdkYl9ldmFsX2FnZW50X2V4 cHIgKHN0cnVjdCByZWdjYWNoZSAqcmUKIAkgICAgdG9wID0gc3RhY2tbc3Bd OwogCSAgYnJlYWs7CiAKKwljYXNlIGdkYl9hZ2VudF9vcF9wcmludGY6CisJ ICB7CisJICAgIGludCBuYXJncywgc2xlbiwgaTsKKwkgICAgQ09SRV9BRERS IGZuID0gMCwgY2hhbiA9IDA7CisJICAgIC8qIENhbid0IGhhdmUgbW9yZSBh cmdzIHRoYW4gdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzdGFjay4gICovCisJ ICAgIFVMT05HRVNUIGFyZ3NbU1RBQ0tfTUFYXTsKKwkgICAgY2hhciAqZm9y bWF0OworCisJICAgIG5hcmdzID0gYWV4cHItPmJ5dGVzW3BjKytdOworCSAg ICBzbGVuID0gYWV4cHItPmJ5dGVzW3BjKytdOworCSAgICBzbGVuID0gKHNs ZW4gPDwgOCkgKyBhZXhwci0+Ynl0ZXNbcGMrK107CisJICAgIGZvcm1hdCA9 IChjaGFyICopICYoYWV4cHItPmJ5dGVzW3BjXSk7CisJICAgIHBjICs9IHNs ZW47CisJICAgIC8qIFBvcCBmdW5jdGlvbiBhbmQgY2hhbm5lbC4gICovCisJ ICAgIGZuID0gdG9wOworCSAgICBpZiAoLS1zcCA+PSAwKQorCSAgICAgIHRv cCA9IHN0YWNrW3NwXTsKKwkgICAgY2hhbiA9IHRvcDsKKwkgICAgaWYgKC0t c3AgPj0gMCkKKwkgICAgICB0b3AgPSBzdGFja1tzcF07CisJICAgIC8qIFBv cCBhcmd1bWVudHMgaW50byBhIGRlZGljYXRlZCBhcnJheS4gICovCisJICAg IGZvciAoaSA9IDA7IGkgPCBuYXJnczsgKytpKQorCSAgICAgIHsKKwkJYXJn c1tpXSA9IHRvcDsKKwkJaWYgKC0tc3AgPj0gMCkKKwkJICB0b3AgPSBzdGFj a1tzcF07CisJICAgICAgfQorCSAgICBheF9wcmludGYgKGZuLCBjaGFuLCBm b3JtYXQsIG5hcmdzLCBhcmdzKTsKKwkgIH0KKwkgIGJyZWFrOworCiAJICAv KiBHREIgbmV2ZXIgKGN1cnJlbnRseSkgZ2VuZXJhdGVzIGFueSBvZiB0aGVz ZSBvcHMuICAqLwogCWNhc2UgZ2RiX2FnZW50X29wX2Zsb2F0OgogCWNhc2Ug Z2RiX2FnZW50X29wX3JlZl9mbG9hdDoKSW5kZXg6IGdkYnNlcnZlci9saW51 eC1sb3cuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz L3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4yMjQKZGlmZiAtdSAtcCAtcjEuMjI0IGxpbnV4LWxv dy5jCi0tLSBnZGJzZXJ2ZXIvbGludXgtbG93LmMJMTIgSnVuIDIwMTIgMTQ6 MDI6MTUgLTAwMDAJMS4yMjQKKysrIGdkYnNlcnZlci9saW51eC1sb3cuYwky NSBKdW4gMjAxMiAxNToxMzowMSAtMDAwMApAQCAtMjYxOCw3ICsyNjE4LDEw IEBAIENoZWNrIGlmIHdlJ3JlIGFscmVhZHkgdGhlcmUuXG4iLAogCQkgICB8 fCAoIXN0ZXBfb3Zlcl9maW5pc2hlZAogCQkgICAgICAgJiYgIWJwX2V4cGxh aW5zX3RyYXAgJiYgIXRyYWNlX2V2ZW50KQogCQkgICB8fCAoZ2RiX2JyZWFr cG9pbnRfaGVyZSAoZXZlbnRfY2hpbGQtPnN0b3BfcGMpCi0JCSAgICYmIGdk Yl9jb25kaXRpb25fdHJ1ZV9hdF9icmVha3BvaW50IChldmVudF9jaGlsZC0+ c3RvcF9wYykpKTsKKwkJICAgICAgICYmIGdkYl9jb25kaXRpb25fdHJ1ZV9h dF9icmVha3BvaW50IChldmVudF9jaGlsZC0+c3RvcF9wYykKKwkJICAgICAg ICYmIGdkYl9ub19jb21tYW5kc19hdF9icmVha3BvaW50IChldmVudF9jaGls ZC0+c3RvcF9wYykpKTsKKworICBydW5fYnJlYWtwb2ludF9jb21tYW5kcyAo ZXZlbnRfY2hpbGQtPnN0b3BfcGMpOwogCiAgIC8qIFdlIGZvdW5kIG5vIHJl YXNvbiBHREIgd291bGQgd2FudCB1cyB0byBzdG9wLiAgV2UgZWl0aGVyIGhp dCBvbmUKICAgICAgb2Ygb3VyIG93biBicmVha3BvaW50cywgb3IgZmluaXNo ZWQgYW4gaW50ZXJuYWwgc3RlcCBHREIKQEAgLTM0OTksNyArMzUwMiw4IEBA IG5lZWRfc3RlcF9vdmVyX3AgKHN0cnVjdCBpbmZlcmlvcl9saXN0X2UKIAkg dGhvdWdoLiAgSWYgdGhlIGNvbmRpdGlvbiBpcyBiZWluZyBldmFsdWF0ZWQg b24gdGhlIHRhcmdldCdzIHNpZGUKIAkgYW5kIGl0IGV2YWx1YXRlIHRvIGZh bHNlLCBzdGVwIG92ZXIgdGhpcyBicmVha3BvaW50IGFzIHdlbGwuICAqLwog ICAgICAgaWYgKGdkYl9icmVha3BvaW50X2hlcmUgKHBjKQotCSAgJiYgZ2Ri X2NvbmRpdGlvbl90cnVlX2F0X2JyZWFrcG9pbnQgKHBjKSkKKwkgICYmIGdk Yl9jb25kaXRpb25fdHJ1ZV9hdF9icmVha3BvaW50IChwYykKKwkgICYmIGdk Yl9ub19jb21tYW5kc19hdF9icmVha3BvaW50IChwYykpCiAJewogCSAgaWYg KGRlYnVnX3RocmVhZHMpCiAJICAgIGZwcmludGYgKHN0ZGVyciwKSW5kZXg6 IGdkYnNlcnZlci9NYWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9NYWtlZmls ZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzQKZGlmZiAtdSAtcCAt cjEuMTM0IE1ha2VmaWxlLmluCi0tLSBnZGJzZXJ2ZXIvTWFrZWZpbGUuaW4J MzAgTWF5IDIwMTIgMTk6NDM6MTUgLTAwMDAJMS4xMzQKKysrIGdkYnNlcnZl ci9NYWtlZmlsZS5pbgkyNSBKdW4gMjAxMiAxNToxMzowMSAtMDAwMApAQCAt MTAwLDYgKzEwMCw5IEBAIEdMT0JBTF9DRkxBR1MgPSAke01UX0NGTEFHU30g JHtNSF9DRkxBR1MKIFdBUk5fQ0ZMQUdTID0gQFdBUk5fQ0ZMQUdTQAogV0VS Uk9SX0NGTEFHUyA9IEBXRVJST1JfQ0ZMQUdTQAogCitXQVJOX0NGTEFHU19O T19GT1JNQVQgPSBgZWNobyAiICQoV0FSTl9DRkxBR1MpICIgXAorCQkgICB8 IHNlZCAicy8gLVdmb3JtYXQtbm9ubGl0ZXJhbCAvIC1Xbm8tZm9ybWF0LW5v bmxpdGVyYWwgL2ciYAorCiAjIENGTEFHUyBpcyBzcGVjaWZpY2FsbHkgcmVz ZXJ2ZWQgZm9yIHNldHRpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lCiAjIHdo ZW4gcnVubmluZyBtYWtlLiAgSS5FLiAgIm1ha2UgQ0ZMQUdTPS1XbWlzc2lu Zy1wcm90b3R5cGVzIi4KIENGTEFHUyA9IEBDRkxBR1NACkBAIC0xNTIsNyAr MTU1LDcgQEAgVEFHRklMRVMgPSAkKFNPVVJDRVMpICR7SEZJTEVTfSAke0FM TFBBUgogT0JTID0gYWdlbnQubyBheC5vIGluZmVyaW9ycy5vIHJlZ2NhY2hl Lm8gcmVtb3RlLXV0aWxzLm8gc2VydmVyLm8gc2lnbmFscy5vIHRhcmdldC5v IFwKIAl1dGlscy5vIHZlcnNpb24ubyB2ZWMubyBcCiAJbWVtLWJyZWFrLm8g aG9zdGlvLm8gZXZlbnQtbG9vcC5vIHRyYWNlcG9pbnQubyBcCi0JeG1sLXV0 aWxzLm8gY29tbW9uLXV0aWxzLm8gcHRpZC5vIGJ1ZmZlci5vIFwKKwl4bWwt dXRpbHMubyBjb21tb24tdXRpbHMubyBwdGlkLm8gYnVmZmVyLm8gZm9ybWF0 Lm8gXAogCWRsbC5vIFwKIAkkKFhNTF9CVUlMVElOKSBcCiAJJChERVBGSUxF UykgJChMSUJPQkpTKQpAQCAtMjczLDcgKzI3Niw3IEBAIGdkYnJlcGxheSQo RVhFRVhUKTogJChHREJSRVBMQVlfT0JTKQogCSR7Q0MtTER9ICQoSU5URVJO QUxfQ0ZMQUdTKSAkKElOVEVSTkFMX0xERkxBR1MpIC1vIGdkYnJlcGxheSQo RVhFRVhUKSAkKEdEQlJFUExBWV9PQlMpIFwKIAkgICQoWE1fQ0xJQlMpCiAK LUlQQV9PQkpTPWF4LWlwYS5vIHRyYWNlcG9pbnQtaXBhLm8gdXRpbHMtaXBh Lm8gcmVnY2FjaGUtaXBhLm8gcmVtb3RlLXV0aWxzLWlwYS5vIGNvbW1vbi11 dGlscy1pcGEubyAke0lQQV9ERVBGSUxFU30KK0lQQV9PQkpTPWF4LWlwYS5v IHRyYWNlcG9pbnQtaXBhLm8gZm9ybWF0LWlwYS5vIHV0aWxzLWlwYS5vIHJl Z2NhY2hlLWlwYS5vIHJlbW90ZS11dGlscy1pcGEubyBjb21tb24tdXRpbHMt aXBhLm8gJHtJUEFfREVQRklMRVN9CiAKIElQQV9MSUI9bGliaW5wcm9jdHJh Y2Uuc28KIApAQCAtNDQ3LDExICs0NTAsMTMgQEAgSVBBR0VOVF9DRkxBR1Mg PSAkKENQUEZMQUdTKSAkKElOVEVSTkFMXwogCiAjIEluLXByb2Nlc3MgYWdl bnQgb2JqZWN0IHJ1bGVzCiBheC1pcGEubzogYXguYyAkKHNlcnZlcl9oKSAk KGF4X2gpICQoc3JjZGlyKS8uLi9jb21tb24vYXguZGVmCi0JJChDQykgLWMg JChJUEFHRU5UX0NGTEFHUykgJDwgLW8gYXgtaXBhLm8KKwkkKENDKSAtYyAk KElQQUdFTlRfQ0ZMQUdTKSAkKFdBUk5fQ0ZMQUdTX05PX0ZPUk1BVCkgJDwg LW8gYXgtaXBhLm8KIHRyYWNlcG9pbnQtaXBhLm86IHRyYWNlcG9pbnQuYyAk KHNlcnZlcl9oKSAke2F4X2h9CiAJJChDQykgLWMgJChJUEFHRU5UX0NGTEFH UykgJDwgLW8gdHJhY2Vwb2ludC1pcGEubwogdXRpbHMtaXBhLm86IHV0aWxz LmMgJChzZXJ2ZXJfaCkKIAkkKENDKSAtYyAkKElQQUdFTlRfQ0ZMQUdTKSAk PCAtbyB1dGlscy1pcGEubworZm9ybWF0LWlwYS5vOiAuLi9jb21tb24vZm9y bWF0LmMgJChzZXJ2ZXJfaCkgJHtheF9ofQorCSQoQ0MpIC1jICQoSVBBR0VO VF9DRkxBR1MpICQ8IC1vIGZvcm1hdC1pcGEubwogY29tbW9uLXV0aWxzLWlw YS5vOiAuLi9jb21tb24vY29tbW9uLXV0aWxzLmMgJChzZXJ2ZXJfaCkKIAkk KENDKSAtYyAkKElQQUdFTlRfQ0ZMQUdTKSAkPCAtbyBjb21tb24tdXRpbHMt aXBhLm8KIHJlbW90ZS11dGlscy1pcGEubzogcmVtb3RlLXV0aWxzLmMgJChz ZXJ2ZXJfaCkKQEAgLTQ2OCw2ICs0NzMsNyBAQCBhbWQ2NC1saW51eC1pcGEu byA6IGFtZDY0LWxpbnV4LmMgJChyZWdkCiAJJChDQykgLWMgJChJUEFHRU5U X0NGTEFHUykgJDwgLW8gYW1kNjQtbGludXgtaXBhLm8KIAogYXgubzogYXgu YyAkKHNlcnZlcl9oKSAkKGF4X2gpICQoc3JjZGlyKS8uLi9jb21tb24vYXgu ZGVmCisJJChDQykgLWMgJChDUFBGTEFHUykgJChJTlRFUk5BTF9DRkxBR1Mp ICQoV0FSTl9DRkxBR1NfTk9fRk9STUFUKSAkPAogZXZlbnQtbG9vcC5vOiBl dmVudC1sb29wLmMgJChzZXJ2ZXJfaCkKIGhvc3Rpby5vOiBob3N0aW8uYyAk KHNlcnZlcl9oKQogaG9zdGlvLWVycm5vLm86IGhvc3Rpby1lcnJuby5jICQo c2VydmVyX2gpCkBAIC01MTIsNiArNTE4LDkgQEAgcHRpZC5vOiAuLi9jb21t b24vcHRpZC5jICQocHRpZF9oKQogYnVmZmVyLm86IC4uL2NvbW1vbi9idWZm ZXIuYyAkKHNlcnZlcl9oKQogCSQoQ0MpIC1jICQoQ1BQRkxBR1MpICQoSU5U RVJOQUxfQ0ZMQUdTKSAkPCAtREdEQlNFUlZFUgogCitmb3JtYXQubzogLi4v Y29tbW9uL2Zvcm1hdC5jICQoc2VydmVyX2gpCisJJChDQykgLWMgJChDUFBG TEFHUykgJChJTlRFUk5BTF9DRkxBR1MpICQ8IC1ER0RCU0VSVkVSCisKIGFn ZW50Lm86IC4uL2NvbW1vbi9hZ2VudC5jICQoc2VydmVyX2gpICQoYWdlbnRf aCkKIAkkKENDKSAtYyAkKENQUEZMQUdTKSAkKElOVEVSTkFMX0NGTEFHUykg JDwgLURHREJTRVJWRVIKIApJbmRleDogZ2Ric2VydmVyL21lbS1icmVhay5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy9nZGIvZ2Ric2VydmVyL21lbS1icmVhay5jLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjMzCmRpZmYgLXUgLXAgLXIxLjMzIG1lbS1icmVhay5jCi0tLSBn ZGJzZXJ2ZXIvbWVtLWJyZWFrLmMJMjUgRmViIDIwMTIgMTk6NTQ6NTAgLTAw MDAJMS4zMworKysgZ2Ric2VydmVyL21lbS1icmVhay5jCTI1IEp1biAyMDEy IDE1OjEzOjAxIC0wMDAwCkBAIC05Nyw2ICs5NywyMCBAQCBzdHJ1Y3QgcG9p bnRfY29uZF9saXN0CiAgIHN0cnVjdCBwb2ludF9jb25kX2xpc3QgKm5leHQ7 CiB9OwogCitzdHJ1Y3QgcG9pbnRfY29tbWFuZF9saXN0Cit7CisgIC8qIFBv aW50ZXIgdG8gdGhlIGFnZW50IGV4cHJlc3Npb24gdGhhdCBpcyB0aGUgYnJl YWtwb2ludCdzCisgICAgIGNvbW1hbmRzLiAgKi8KKyAgc3RydWN0IGFnZW50 X2V4cHIgKmNtZDsKKworICAvKiBGbGFnIHRoYXQgaXMgdHJ1ZSBpZiB0aGlz IGNvbW1hbmQgc2hvdWxkIHJ1biBldmVuIHdoaWxlIEdEQiBpcworICAgICBk aXNjb25uZWN0ZWQuICAqLworICBpbnQgcGVyc2lzdGVuY2U7CisKKyAgLyog UG9pbnRlciB0byB0aGUgbmV4dCBjb21tYW5kLiAgKi8KKyAgc3RydWN0IHBv aW50X2NvbW1hbmRfbGlzdCAqbmV4dDsKK307CisKIC8qIEEgaGlnaCBsZXZl bCAoaW4gZ2Ric2VydmVyJ3MgcGVyc3BlY3RpdmUpIGJyZWFrcG9pbnQuICAq Lwogc3RydWN0IGJyZWFrcG9pbnQKIHsKQEAgLTExMSw2ICsxMjUsOSBAQCBz dHJ1Y3QgYnJlYWtwb2ludAogICAgICB0YXJnZXQncyBzaWRlLiAgKi8KICAg c3RydWN0IHBvaW50X2NvbmRfbGlzdCAqY29uZF9saXN0OwogCisgIC8qIFBv aW50IHRvIHRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIHJ1biB3aGVuIHRoaXMg aXMgaGl0LiAgKi8KKyAgc3RydWN0IHBvaW50X2NvbW1hbmRfbGlzdCAqY29t bWFuZF9saXN0OworCiAgIC8qIExpbmsgdG8gdGhpcyBicmVha3BvaW50J3Mg cmF3IGJyZWFrcG9pbnQuICBUaGlzIGlzIGFsd2F5cwogICAgICBub24tTlVM TC4gICovCiAgIHN0cnVjdCByYXdfYnJlYWtwb2ludCAqcmF3OwpAQCAtMTIx LDYgKzEzOCwyMyBAQCBzdHJ1Y3QgYnJlYWtwb2ludAogICBpbnQgKCpoYW5k bGVyKSAoQ09SRV9BRERSKTsKIH07CiAKK2ludAorYW55X3BlcnNpc3RlbnRf Y29tbWFuZHMgKCkKK3sKKyAgc3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvYyA9 IGN1cnJlbnRfcHJvY2VzcyAoKTsKKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJw OworICBzdHJ1Y3QgcG9pbnRfY29tbWFuZF9saXN0ICpjbDsKKworICBmb3Ig KGJwID0gcHJvYy0+YnJlYWtwb2ludHM7IGJwICE9IE5VTEw7IGJwID0gYnAt Pm5leHQpCisgICAgeworICAgICAgZm9yIChjbCA9IGJwLT5jb21tYW5kX2xp c3Q7IGNsICE9IE5VTEw7IGNsID0gY2wtPm5leHQpCisJaWYgKGNsLT5wZXJz aXN0ZW5jZSkKKwkgIHJldHVybiAxOworICAgIH0KKworICByZXR1cm4gMDsK K30KKwogc3RhdGljIHN0cnVjdCByYXdfYnJlYWtwb2ludCAqCiBmaW5kX3Jh d19icmVha3BvaW50X2F0IChDT1JFX0FERFIgd2hlcmUpCiB7CkBAIC04MzUs NiArODY5LDk3IEBAIGdkYl9jb25kaXRpb25fdHJ1ZV9hdF9icmVha3BvaW50 IChDT1JFX0EKICAgcmV0dXJuICh2YWx1ZSAhPSAwKTsKIH0KIAorLyogQWRk IGNvbW1hbmRzIENPTU1BTkRTIHRvIEdEQnNlcnZlcidzIGJyZWFrcG9pbnQg QlAuICAqLworCit2b2lkCithZGRfY29tbWFuZHNfdG9fYnJlYWtwb2ludCAo c3RydWN0IGJyZWFrcG9pbnQgKmJwLAorCQkJICAgIHN0cnVjdCBhZ2VudF9l eHByICpjb21tYW5kcywgaW50IHBlcnNpc3QpCit7CisgIHN0cnVjdCBwb2lu dF9jb21tYW5kX2xpc3QgKm5ld19jbWQ7CisKKyAgLyogQ3JlYXRlIG5ldyBj b21tYW5kLiAgKi8KKyAgbmV3X2NtZCA9IHhjYWxsb2MgKDEsIHNpemVvZiAo Km5ld19jbWQpKTsKKyAgbmV3X2NtZC0+Y21kID0gY29tbWFuZHM7CisgIG5l d19jbWQtPnBlcnNpc3RlbmNlID0gcGVyc2lzdDsKKworICAvKiBBZGQgY29t bWFuZHMgdG8gdGhlIGxpc3QuICAqLworICBuZXdfY21kLT5uZXh0ID0gYnAt PmNvbW1hbmRfbGlzdDsKKyAgYnAtPmNvbW1hbmRfbGlzdCA9IG5ld19jbWQ7 Cit9CisKKy8qIEFkZCBhIHRhcmdldC1zaWRlIGNvbW1hbmQgQ09NTUFORCB0 byB0aGUgYnJlYWtwb2ludCBhdCBBRERSLiAgKi8KKworaW50CithZGRfYnJl YWtwb2ludF9jb21tYW5kcyAoQ09SRV9BRERSIGFkZHIsIGNoYXIgKipjb21t YW5kLCBpbnQgcGVyc2lzdCkKK3sKKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJw ID0gZmluZF9nZGJfYnJlYWtwb2ludF9hdCAoYWRkcik7CisgIGNoYXIgKmFj dHBhcm0gPSAqY29tbWFuZDsKKyAgc3RydWN0IGFnZW50X2V4cHIgKmNtZDsK KworICBpZiAoYnAgPT0gTlVMTCkKKyAgICByZXR1cm4gMTsKKworICBpZiAo Y29tbWFuZCA9PSBOVUxMKQorICAgIHJldHVybiAxOworCisgIGNtZCA9IGdk Yl9wYXJzZV9hZ2VudF9leHByICgmYWN0cGFybSk7CisKKyAgaWYgKGNtZCA9 PSBOVUxMKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNvbW1h bmQgZXZhbHVhdGlvbiBmYWlsZWQuICIKKwkgICAgICAgIkRpc2FibGluZy5c biIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGFkZF9jb21tYW5k c190b19icmVha3BvaW50IChicCwgY21kLCBwZXJzaXN0KTsKKworICAqY29t bWFuZCA9IGFjdHBhcm07CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFJldHVy biB0cnVlIGlmIHRoZXJlIGFyZSBubyBjb21tYW5kcyB0byBydW4gYXQgdGhp cyBsb2NhdGlvbiwKKyAgIHdoaWNoIGxpa2VseSBtZWFucyB3ZSB3YW50IHRv IHJlcG9ydCBiYWNrIHRvIEdEQi4gICovCitpbnQKK2dkYl9ub19jb21tYW5k c19hdF9icmVha3BvaW50IChDT1JFX0FERFIgd2hlcmUpCit7CisgIHN0cnVj dCBicmVha3BvaW50ICpicCA9IGZpbmRfZ2RiX2JyZWFrcG9pbnRfYXQgKHdo ZXJlKTsKKworICBpZiAoYnAgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKwor ICBpZiAoZGVidWdfdGhyZWFkcykKKyAgICBmcHJpbnRmIChzdGRlcnIsICJh dCAweCVzLCBicCBjb21tYW5kX2xpc3QgaXMgMHgleFxuIiwKKwkgICAgIHBh ZGRyZXNzICh3aGVyZSksIChpbnQpIGJwLT5jb21tYW5kX2xpc3QpOworICBy ZXR1cm4gKGJwLT5jb21tYW5kX2xpc3QgPT0gTlVMTCk7Cit9CisKK3ZvaWQK K3J1bl9icmVha3BvaW50X2NvbW1hbmRzIChDT1JFX0FERFIgd2hlcmUpCit7 CisgIC8qIEZldGNoIHJlZ2lzdGVycyBmb3IgdGhlIGN1cnJlbnQgaW5mZXJp b3IuICAqLworICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnAgPSBmaW5kX2dkYl9i cmVha3BvaW50X2F0ICh3aGVyZSk7CisgIFVMT05HRVNUIHZhbHVlID0gMDsK KyAgc3RydWN0IHBvaW50X2NvbW1hbmRfbGlzdCAqY2w7CisgIGludCBlcnIg PSAwOworCisgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUgPSBnZXRfdGhy ZWFkX3JlZ2NhY2hlIChjdXJyZW50X2luZmVyaW9yLCAxKTsKKworICBpZiAo YnAgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgZm9yIChjbCA9IGJwLT5j b21tYW5kX2xpc3Q7CisgICAgICAgY2wgJiYgIXZhbHVlICYmICFlcnI7IGNs ID0gY2wtPm5leHQpCisgICAgeworICAgICAgLyogUnVuIHRoZSBjb21tYW5k LiAgKi8KKyAgICAgIGVyciA9IGdkYl9ldmFsX2FnZW50X2V4cHIgKHJlZ2Nh Y2hlLCBOVUxMLCBjbC0+Y21kLCAmdmFsdWUpOworCisgICAgICAvKiBJZiBv bmUgY29tbWFuZCBoYXMgYSBwcm9ibGVtLCBzdG9wIGRpZ2dpbmcgdGhlIGhv bGUgZGVlcGVyLiAgKi8KKyAgICAgIGlmIChlcnIpCisJYnJlYWs7CisgICAg fQorfQorCiAvKiBSZXR1cm4gMSBpZiB0aGVyZSBpcyBhIGJyZWFrcG9pbnQg aW5zZXJ0ZWQgaW4gYWRkcmVzcyBXSEVSRQogICAgYW5kIGlmIGl0cyBjb25k aXRpb24sIGlmIGl0IGV4aXN0cywgaXMgdHJ1ZS4gICovCiAKSW5kZXg6IGdk YnNlcnZlci9tZW0tYnJlYWsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9tZW0tYnJlYWsu aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNQpkaWZmIC11IC1wIC1yMS4y NSBtZW0tYnJlYWsuaAotLS0gZ2Ric2VydmVyL21lbS1icmVhay5oCTI0IEZl YiAyMDEyIDE1OjE1OjU2IC0wMDAwCTEuMjUKKysrIGdkYnNlcnZlci9tZW0t YnJlYWsuaAkyNSBKdW4gMjAxMiAxNToxMzowMSAtMDAwMApAQCAtNTIsMTEg KzUyLDE5IEBAIHZvaWQgY2xlYXJfZ2RiX2JyZWFrcG9pbnRfY29uZGl0aW9u cyAoQ08KIAogaW50IGFkZF9icmVha3BvaW50X2NvbmRpdGlvbiAoQ09SRV9B RERSIGFkZHIsIGNoYXIgKipjb25kaXRpb24pOwogCitpbnQgYWRkX2JyZWFr cG9pbnRfY29tbWFuZHMgKENPUkVfQUREUiBhZGRyLCBjaGFyICoqY29tbWFu ZHMsIGludCBwZXJzaXN0KTsKKworaW50IGFueV9wZXJzaXN0ZW50X2NvbW1h bmRzICh2b2lkKTsKKwogLyogRXZhbHVhdGlvbiBjb25kaXRpb24gKGlmIGFu eSkgYXQgYnJlYWtwb2ludCBCUC4gIFJldHVybiAxIGlmCiAgICB0cnVlIGFu ZCAwIG90aGVyd2lzZS4gICovCiAKIGludCBnZGJfY29uZGl0aW9uX3RydWVf YXRfYnJlYWtwb2ludCAoQ09SRV9BRERSIHdoZXJlKTsKIAoraW50IGdkYl9u b19jb21tYW5kc19hdF9icmVha3BvaW50IChDT1JFX0FERFIgd2hlcmUpOwor Cit2b2lkIHJ1bl9icmVha3BvaW50X2NvbW1hbmRzIChDT1JFX0FERFIgd2hl cmUpOworCiAvKiBSZXR1cm5zIFRSVUUgaWYgdGhlcmUncyBhIEdEQiBicmVh a3BvaW50IHNldCBhdCBBRERSLiAgKi8KIAogaW50IGdkYl9icmVha3BvaW50 X2hlcmUgKENPUkVfQUREUiB3aGVyZSk7CkluZGV4OiBnZGJzZXJ2ZXIvc2Vy dmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9z cmMvc3JjL2dkYi9nZGJzZXJ2ZXIvc2VydmVyLmMsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMTc0CmRpZmYgLXUgLXAgLXIxLjE3NCBzZXJ2ZXIuYwotLS0g Z2Ric2VydmVyL3NlcnZlci5jCTEzIEp1biAyMDEyIDAyOjM1OjAxIC0wMDAw CTEuMTc0CisrKyBnZGJzZXJ2ZXIvc2VydmVyLmMJMjUgSnVuIDIwMTIgMTU6 MTM6MDEgLTAwMDAKQEAgLTE2ODUsOCArMTY4NSw5IEBAIGhhbmRsZV9xdWVy eSAoY2hhciAqb3duX2J1ZiwgaW50IHBhY2tldF8KIAkgIHN0cmNhdCAob3du X2J1ZiwgIjt0cmFjZW56KyIpOwogCX0KIAotICAgICAgLyogU3VwcG9ydCB0 YXJnZXQtc2lkZSBicmVha3BvaW50IGNvbmRpdGlvbnMuICAqLworICAgICAg LyogU3VwcG9ydCB0YXJnZXQtc2lkZSBicmVha3BvaW50IGNvbmRpdGlvbnMg YW5kIGNvbW1hbmRzLiAgKi8KICAgICAgIHN0cmNhdCAob3duX2J1ZiwgIjtD b25kaXRpb25hbEJyZWFrcG9pbnRzKyIpOworICAgICAgc3RyY2F0IChvd25f YnVmLCAiO0JyZWFrcG9pbnRDb21tYW5kcysiKTsKIAogICAgICAgaWYgKHRh cmdldF9zdXBwb3J0c19hZ2VudCAoKSkKIAlzdHJjYXQgKG93bl9idWYsICI7 UUFnZW50KyIpOwpAQCAtMjkwNyw2ICsyOTA4LDcgQEAgc3RhdGljIHZvaWQK IHByb2Nlc3NfcG9pbnRfb3B0aW9ucyAoQ09SRV9BRERSIHBvaW50X2FkZHIs IGNoYXIgKipwYWNrZXQpCiB7CiAgIGNoYXIgKmRhdGFwdHIgPSAqcGFja2V0 OworICBpbnQgcGVyc2lzdDsKIAogICAvKiBDaGVjayBpZiBkYXRhIGhhcyB0 aGUgY29ycmVjdCBmb3JtYXQuICAqLwogICBpZiAoKmRhdGFwdHIgIT0gJzsn KQpAQCAtMjkxNiwyMiArMjkxOCwzMyBAQCBwcm9jZXNzX3BvaW50X29wdGlv bnMgKENPUkVfQUREUiBwb2ludF9hCiAKICAgd2hpbGUgKCpkYXRhcHRyKQog ICAgIHsKLSAgICAgIHN3aXRjaCAoKmRhdGFwdHIpCisgICAgICBpZiAoKmRh dGFwdHIgPT0gJzsnKQorCSsrZGF0YXB0cjsKKworICAgICAgaWYgKCpkYXRh cHRyID09ICdYJykKIAl7Ci0JICBjYXNlICdYJzoKLQkgICAgLyogQ29uZGl0 aW9uYWwgZXhwcmVzc2lvbi4gICovCi0JICAgIGlmIChyZW1vdGVfZGVidWcp Ci0JICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRm91bmQgYnJlYWtwb2ludCBj b25kaXRpb24uXG4iKTsKLQkgICAgYWRkX2JyZWFrcG9pbnRfY29uZGl0aW9u IChwb2ludF9hZGRyLCAmZGF0YXB0cik7Ci0JICAgIGJyZWFrOwotCSAgZGVm YXVsdDoKLQkgICAgLyogVW5yZWNvZ25pemVkIHRva2VuLCBqdXN0IHNraXAg aXQuICAqLwotCSAgICBmcHJpbnRmIChzdGRlcnIsICJVbmtub3duIHRva2Vu ICVjLCBpZ25vcmluZy5cbiIsCi0JCSAgICAgKmRhdGFwdHIpOworCSAgLyog Q29uZGl0aW9uYWwgZXhwcmVzc2lvbi4gICovCisJICBmcHJpbnRmIChzdGRl cnIsICJGb3VuZCBicmVha3BvaW50IGNvbmRpdGlvbi5cbiIpOworCSAgYWRk X2JyZWFrcG9pbnRfY29uZGl0aW9uIChwb2ludF9hZGRyLCAmZGF0YXB0cik7 CisJfQorICAgICAgZWxzZSBpZiAoc3RybmNtcCAoZGF0YXB0ciwgImNtZHM6 Iiwgc3RybGVuICgiY21kczoiKSkgPT0gMCkKKwl7CisJICBkYXRhcHRyICs9 IHN0cmxlbiAoImNtZHM6Iik7CisJICBpZiAoZGVidWdfdGhyZWFkcykKKwkg ICAgZnByaW50ZiAoc3RkZXJyLCAiRm91bmQgYnJlYWtwb2ludCBjb21tYW5k cyAlcy5cbiIsIGRhdGFwdHIpOworCSAgcGVyc2lzdCA9ICgqZGF0YXB0ciA9 PSAnMScpOworCSAgZGF0YXB0ciArPSAyOworCSAgYWRkX2JyZWFrcG9pbnRf Y29tbWFuZHMgKHBvaW50X2FkZHIsICZkYXRhcHRyLCBwZXJzaXN0KTsKKwl9 CisgICAgICBlbHNlCisJeworCSAgLyogVW5yZWNvZ25pemVkIHRva2VuLCBq dXN0IHNraXAgaXQuICAqLworCSAgZnByaW50ZiAoc3RkZXJyLCAiVW5rbm93 biB0b2tlbiAlYywgaWdub3JpbmcuXG4iLAorCQkgICAqZGF0YXB0cik7CiAJ fQogCiAgICAgICAvKiBTa2lwIHRva2VucyB1bnRpbCB3ZSBmaW5kIG9uZSB0 aGF0IHdlIHJlY29nbml6ZS4gICovCi0gICAgICB3aGlsZSAoKmRhdGFwdHIg JiYgKmRhdGFwdHIgIT0gJ1gnICYmICpkYXRhcHRyICE9ICc7JykKKyAgICAg IHdoaWxlICgqZGF0YXB0ciAmJiAqZGF0YXB0ciAhPSAnOycpCiAJZGF0YXB0 cisrOwogICAgIH0KICAgKnBhY2tldCA9IGRhdGFwdHI7CkBAIC0yOTk3LDcg KzMwMTAsNyBAQCBwcm9jZXNzX3NlcmlhbF9ldmVudCAodm9pZCkKIAlwaWQg PQogCSAgcHRpZF9nZXRfcGlkICgoKHN0cnVjdCBpbmZlcmlvcl9saXN0X2Vu dHJ5ICopIGN1cnJlbnRfaW5mZXJpb3IpLT5pZCk7CiAKLSAgICAgIGlmICh0 cmFjaW5nICYmIGRpc2Nvbm5lY3RlZF90cmFjaW5nKQorICAgICAgaWYgKCh0 cmFjaW5nICYmIGRpc2Nvbm5lY3RlZF90cmFjaW5nKSB8fCBhbnlfcGVyc2lz dGVudF9jb21tYW5kcyAoKSkKIAl7CiAJICBzdHJ1Y3QgdGhyZWFkX3Jlc3Vt ZSByZXN1bWVfaW5mbzsKIAkgIHN0cnVjdCBwcm9jZXNzX2luZm8gKnByb2Nl c3MgPSBmaW5kX3Byb2Nlc3NfcGlkIChwaWQpOwpAQCAtMzAwOCw5ICszMDIx LDE1IEBAIHByb2Nlc3Nfc2VyaWFsX2V2ZW50ICh2b2lkKQogCSAgICAgIGJy ZWFrOwogCSAgICB9CiAKLQkgIGZwcmludGYgKHN0ZGVyciwKLQkJICAgIkRp c2Nvbm5lY3RlZCB0cmFjaW5nIGluIGVmZmVjdCwgIgotCQkgICAibGVhdmlu ZyBnZGJzZXJ2ZXIgYXR0YWNoZWQgdG8gdGhlIHByb2Nlc3NcbiIpOworCSAg aWYgKHRyYWNpbmcgJiYgZGlzY29ubmVjdGVkX3RyYWNpbmcpCisJICAgIGZw cmludGYgKHN0ZGVyciwKKwkJICAgICAiRGlzY29ubmVjdGVkIHRyYWNpbmcg aW4gZWZmZWN0LCAiCisJCSAgICAgImxlYXZpbmcgZ2Ric2VydmVyIGF0dGFj aGVkIHRvIHRoZSBwcm9jZXNzXG4iKTsKKworCSAgaWYgKGFueV9wZXJzaXN0 ZW50X2NvbW1hbmRzICgpKQorCSAgICBmcHJpbnRmIChzdGRlcnIsCisJCSAg ICAgIlBlcnNpc3RlbnQgY29tbWFuZHMgYXJlIHByZXNlbnQsICIKKwkJICAg ICAibGVhdmluZyBnZGJzZXJ2ZXIgYXR0YWNoZWQgdG8gdGhlIHByb2Nlc3Nc biIpOwogCiAJICAvKiBNYWtlIHN1cmUgd2UncmUgaW4gbm9uLXN0b3AvYXN5 bmMgbW9kZSwgc28gd2Ugd2UgY2FuIGJvdGgKIAkgICAgIHdhaXQgZm9yIGFu IGFzeW5jIHNvY2tldCBhY2NlcHQsIGFuZCBoYW5kbGUgYXN5bmMgdGFyZ2V0 CkluZGV4OiBjb21tb24vYXguZGVmCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvY29tbW9uL2F4LmRlZix2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYgYXguZGVm Ci0tLSBjb21tb24vYXguZGVmCTQgSmFuIDIwMTIgMDg6MTc6MTcgLTAwMDAJ MS42CisrKyBjb21tb24vYXguZGVmCTI1IEp1biAyMDEyIDE1OjEzOjAxIC0w MDAwCkBAIC05MywzICs5Myw1IEBAIERFRk9QIChpbnZhbGlkMiwgMCwgMCwg MCwgMCwgMHgzMSkKICAgIGV4cHJlc3MgdGhlIHJpZ2h0IHRoaW5nLiAgKi8K IERFRk9QIChwaWNrLCAxLCAwLCAwLCAxLCAweDMyKQogREVGT1AgKHJvdCwg MCwgMCwgMywgMywgMHgzMykKKy8qIEJvdGggdGhlIGFyZ3VtZW50IGFuZCBj b25zdW1lZCBudW1iZXJzIGFyZSBkeW5hbWljIGZvciB0aGlzIG9uZS4gICov CitERUZPUCAocHJpbnRmLCAwLCAwLCAwLCAwLCAweDM0KQpJbmRleDogY29t bW9uL2Zvcm1hdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IGNvbW1vbi9mb3JtYXQuYwpkaWZmIC1OIGNvbW1vbi9mb3JtYXQuYwotLS0g L2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGNvbW1v bi9mb3JtYXQuYwkyNSBKdW4gMjAxMiAxNToxMzowMSAtMDAwMApAQCAtMCww ICsxLDQwMCBAQAorLyogUGFyc2UgYSBwcmludGYtc3R5bGUgZm9ybWF0IHN0 cmluZy4KKworICAgQ29weXJpZ2h0IChDKSAxOTg2LTIwMTIgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lm ZGVmIEdEQlNFUlZFUgorI2luY2x1ZGUgInNlcnZlci5oIgorI2Vsc2UKKyNp bmNsdWRlICJkZWZzLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5o PgorCisjaW5jbHVkZSAiZm9ybWF0LmgiCisKK3N0cnVjdCBmb3JtYXRfcGll Y2UgKgorcGFyc2VfZm9ybWF0X3N0cmluZyAoY2hhciAqKmFyZykKK3sKKyAg Y2hhciAqcywgKmYsICpzdHJpbmc7CisgIGNoYXIgKnByZXZfc3RhcnQ7Cisg IGNoYXIgKnBlcmNlbnRfbG9jOworICBjaGFyICpzdWJfc3RhcnQsICpjdXJy ZW50X3N1YnN0cmluZzsKKyAgc3RydWN0IGZvcm1hdF9waWVjZSAqcGllY2Vz OworICBpbnQgbmV4dF9mcmFnOworICBpbnQgbWF4X3BpZWNlczsKKyAgZW51 bSBhcmdjbGFzcyB0aGlzX2FyZ2NsYXNzOworCisgIHMgPSAqYXJnOworCisg IC8qIFBhcnNlIHRoZSBmb3JtYXQtY29udHJvbCBzdHJpbmcgYW5kIGNvcHkg aXQgaW50byB0aGUgc3RyaW5nIFNUUklORywKKyAgICAgcHJvY2Vzc2luZyBz b21lIGtpbmRzIG9mIGVzY2FwZSBzZXF1ZW5jZS4gICovCisKKyAgZiA9IHN0 cmluZyA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChzKSArIDEpOworCisg IHdoaWxlICgqcyAhPSAnIicgJiYgKnMgIT0gJ1wwJykKKyAgICB7CisgICAg ICBpbnQgYyA9ICpzKys7CisgICAgICBzd2l0Y2ggKGMpCisJeworCWNhc2Ug J1wwJzoKKwkgIGNvbnRpbnVlOworCisJY2FzZSAnXFwnOgorCSAgc3dpdGNo IChjID0gKnMrKykKKwkgICAgeworCSAgICBjYXNlICdcXCc6CisJICAgICAg KmYrKyA9ICdcXCc7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgJ2EnOgor CSAgICAgICpmKysgPSAnXGEnOworCSAgICAgIGJyZWFrOworCSAgICBjYXNl ICdiJzoKKwkgICAgICAqZisrID0gJ1xiJzsKKwkgICAgICBicmVhazsKKwkg ICAgY2FzZSAnZic6CisJICAgICAgKmYrKyA9ICdcZic7CisJICAgICAgYnJl YWs7CisJICAgIGNhc2UgJ24nOgorCSAgICAgICpmKysgPSAnXG4nOworCSAg ICAgIGJyZWFrOworCSAgICBjYXNlICdyJzoKKwkgICAgICAqZisrID0gJ1xy JzsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSAndCc6CisJICAgICAgKmYr KyA9ICdcdCc7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgJ3YnOgorCSAg ICAgICpmKysgPSAnXHYnOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlICci JzoKKwkgICAgICAqZisrID0gJyInOworCSAgICAgIGJyZWFrOworCSAgICBk ZWZhdWx0OgorCSAgICAgIC8qID8/PyBUT0RPOiBoYW5kbGUgb3RoZXIgZXNj YXBlIHNlcXVlbmNlcy4gICovCisJICAgICAgZXJyb3IgKF8oIlVucmVjb2du aXplZCBlc2NhcGUgY2hhcmFjdGVyIFxcJWMgaW4gZm9ybWF0IHN0cmluZy4i KSwKKwkJICAgICBjKTsKKwkgICAgfQorCSAgYnJlYWs7CisKKwlkZWZhdWx0 OgorCSAgKmYrKyA9IGM7CisJfQorICAgIH0KKworICAvKiBUZXJtaW5hdGUg b3VyIGVzY2FwZS1wcm9jZXNzZWQgY29weS4gICovCisgICpmKysgPSAnXDAn OworCisgIC8qIFdoZXRoZXIgdGhlIGZvcm1hdCBzdHJpbmcgZW5kZWQgd2l0 aCBkb3VibGUtcXVvdGUgb3IgemVybywgd2UncmUKKyAgICAgZG9uZSB3aXRo IGl0OyBpdCdzIHVwIHRvIGNhbGxlcnMgdG8gY29tcGxhaW4gYWJvdXQgc3lu dGF4LiAgKi8KKyAgKmFyZyA9IHM7CisKKyAgLyogTmVlZCBleHRyYSBzcGFj ZSBmb3IgdGhlICdcMCdzLiAgRG91YmxpbmcgdGhlIHNpemUgaXMgc3VmZmlj aWVudC4gICovCisKKyAgY3VycmVudF9zdWJzdHJpbmcgPSB4bWFsbG9jIChz dHJsZW4gKHN0cmluZykgKiAyICsgMTAwMCk7CisKKyAgbWF4X3BpZWNlcyA9 IHN0cmxlbiAoc3RyaW5nKSArIDI7CisKKyAgcGllY2VzID0gKHN0cnVjdCBm b3JtYXRfcGllY2UgKikKKyAgICB4bWFsbG9jIChtYXhfcGllY2VzICogc2l6 ZW9mIChzdHJ1Y3QgZm9ybWF0X3BpZWNlKSk7CisKKyAgbmV4dF9mcmFnID0g MDsKKworICAvKiBOb3cgc2NhbiB0aGUgc3RyaW5nIGZvciAlLXNwZWNzIGFu ZCBzZWUgd2hhdCBraW5kcyBvZiBhcmdzIHRoZXkgd2FudC4KKyAgICAgYXJn Y2xhc3MgY2xhc3NpZmllcyB0aGUgJS1zcGVjcyBzbyB3ZSBjYW4gZ2l2ZSBw cmludGYtdHlwZSBmdW5jdGlvbnMKKyAgICAgc29tZXRoaW5nIG9mIHRoZSBy aWdodCBzaXplLiAgKi8KKworICBmID0gc3RyaW5nOworICBwcmV2X3N0YXJ0 ID0gc3RyaW5nOworICB3aGlsZSAoKmYpCisgICAgaWYgKCpmKysgPT0gJyUn KQorICAgICAgeworCWludCBzZWVuX2hhc2ggPSAwLCBzZWVuX3plcm8gPSAw LCBsY291bnQgPSAwLCBzZWVuX3ByZWMgPSAwOworCWludCBzZWVuX3NwYWNl ID0gMCwgc2Vlbl9wbHVzID0gMDsKKwlpbnQgc2Vlbl9iaWdfbCA9IDAsIHNl ZW5faCA9IDAsIHNlZW5fYmlnX2ggPSAwOworCWludCBzZWVuX2JpZ19kID0g MCwgc2Vlbl9kb3VibGVfYmlnX2QgPSAwOworCWludCBiYWQgPSAwOworCisJ LyogU2tpcCBvdmVyICIlJSIsIGl0IHdpbGwgYmVjb21lIHBhcnQgb2YgYSBs aXRlcmFsIHBpZWNlLiAgKi8KKwlpZiAoKmYgPT0gJyUnKQorCSAgeworCSAg ICBmKys7CisJICAgIGNvbnRpbnVlOworCSAgfQorCisJc3ViX3N0YXJ0ID0g Y3VycmVudF9zdWJzdHJpbmc7CisKKwlzdHJuY3B5IChjdXJyZW50X3N1YnN0 cmluZywgcHJldl9zdGFydCwgZiAtIDEgLSBwcmV2X3N0YXJ0KTsKKwljdXJy ZW50X3N1YnN0cmluZyArPSBmIC0gMSAtIHByZXZfc3RhcnQ7CisJKmN1cnJl bnRfc3Vic3RyaW5nKysgPSAnXDAnOworCisJcGllY2VzW25leHRfZnJhZ10u c3RyaW5nID0gc3ViX3N0YXJ0OworCXBpZWNlc1tuZXh0X2ZyYWddLmFyZ2Ns YXNzID0gbGl0ZXJhbF9waWVjZTsKKwluZXh0X2ZyYWcrKzsKKworCXBlcmNl bnRfbG9jID0gZiAtIDE7CisKKwkvKiBDaGVjayB0aGUgdmFsaWRpdHkgb2Yg dGhlIGZvcm1hdCBzcGVjaWZpZXIsIGFuZCB3b3JrCisJICAgb3V0IHdoYXQg YXJndW1lbnQgaXQgZXhwZWN0cy4gIFdlIG9ubHkgYWNjZXB0IEM4OQorCSAg IGZvcm1hdCBzdHJpbmdzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgbG9uZyBs b25nICh3aGljaAorCSAgIHdlIGF1dG9jb25mIGZvcikuICAqLworCisJLyog VGhlIGZpcnN0IHBhcnQgb2YgYSBmb3JtYXQgc3BlY2lmaWVyIGlzIGEgc2V0 IG9mIGZsYWcKKwkgICBjaGFyYWN0ZXJzLiAgKi8KKwl3aGlsZSAoc3RyY2hy ICgiMC0rICMiLCAqZikpCisJICB7CisJICAgIGlmICgqZiA9PSAnIycpCisJ ICAgICAgc2Vlbl9oYXNoID0gMTsKKwkgICAgZWxzZSBpZiAoKmYgPT0gJzAn KQorCSAgICAgIHNlZW5femVybyA9IDE7CisJICAgIGVsc2UgaWYgKCpmID09 ICcgJykKKwkgICAgICBzZWVuX3NwYWNlID0gMTsKKwkgICAgZWxzZSBpZiAo KmYgPT0gJysnKQorCSAgICAgIHNlZW5fcGx1cyA9IDE7CisJICAgIGYrKzsK KwkgIH0KKworCS8qIFRoZSBuZXh0IHBhcnQgb2YgYSBmb3JtYXQgc3BlY2lm aWVyIGlzIGEgd2lkdGguICAqLworCXdoaWxlIChzdHJjaHIgKCIwMTIzNDU2 Nzg5IiwgKmYpKQorCSAgZisrOworCisJLyogVGhlIG5leHQgcGFydCBvZiBh IGZvcm1hdCBzcGVjaWZpZXIgaXMgYSBwcmVjaXNpb24uICAqLworCWlmICgq ZiA9PSAnLicpCisJICB7CisJICAgIHNlZW5fcHJlYyA9IDE7CisJICAgIGYr KzsKKwkgICAgd2hpbGUgKHN0cmNociAoIjAxMjM0NTY3ODkiLCAqZikpCisJ ICAgICAgZisrOworCSAgfQorCisJLyogVGhlIG5leHQgcGFydCBvZiBhIGZv cm1hdCBzcGVjaWZpZXIgaXMgYSBsZW5ndGggbW9kaWZpZXIuICAqLworCWlm ICgqZiA9PSAnaCcpCisJICB7CisJICAgIHNlZW5faCA9IDE7CisJICAgIGYr KzsKKwkgIH0KKwllbHNlIGlmICgqZiA9PSAnbCcpCisJICB7CisJICAgIGYr KzsKKwkgICAgbGNvdW50Kys7CisJICAgIGlmICgqZiA9PSAnbCcpCisJICAg ICAgeworCQlmKys7CisJCWxjb3VudCsrOworCSAgICAgIH0KKwkgIH0KKwll bHNlIGlmICgqZiA9PSAnTCcpCisJICB7CisJICAgIHNlZW5fYmlnX2wgPSAx OworCSAgICBmKys7CisJICB9CisJLyogRGVjaW1hbDMyIG1vZGlmaWVyLiAg Ki8KKwllbHNlIGlmICgqZiA9PSAnSCcpCisJICB7CisJICAgIHNlZW5fYmln X2ggPSAxOworCSAgICBmKys7CisJICB9CisJLyogRGVjaW1hbDY0IGFuZCBE ZWNpbWFsMTI4IG1vZGlmaWVycy4gICovCisJZWxzZSBpZiAoKmYgPT0gJ0Qn KQorCSAgeworCSAgICBmKys7CisKKwkgICAgLyogQ2hlY2sgZm9yIGEgRGVj aW1hbDEyOC4gICovCisJICAgIGlmICgqZiA9PSAnRCcpCisJICAgICAgewor CQlmKys7CisJCXNlZW5fZG91YmxlX2JpZ19kID0gMTsKKwkgICAgICB9CisJ ICAgIGVsc2UKKwkgICAgICBzZWVuX2JpZ19kID0gMTsKKwkgIH0KKworCXN3 aXRjaCAoKmYpCisJICB7CisJICBjYXNlICd1JzoKKwkgICAgaWYgKHNlZW5f aGFzaCkKKwkgICAgICBiYWQgPSAxOworCSAgICAvKiBGQUxMVEhST1VHSCAq LworCisJICBjYXNlICdvJzoKKwkgIGNhc2UgJ3gnOgorCSAgY2FzZSAnWCc6 CisJICAgIGlmIChzZWVuX3NwYWNlIHx8IHNlZW5fcGx1cykKKwkgICAgICBi YWQgPSAxOworCSAgLyogRkFMTFRIUk9VR0ggKi8KKworCSAgY2FzZSAnZCc6 CisJICBjYXNlICdpJzoKKwkgICAgaWYgKGxjb3VudCA9PSAwKQorCSAgICAg IHRoaXNfYXJnY2xhc3MgPSBpbnRfYXJnOworCSAgICBlbHNlIGlmIChsY291 bnQgPT0gMSkKKwkgICAgICB0aGlzX2FyZ2NsYXNzID0gbG9uZ19hcmc7CisJ ICAgIGVsc2UKKwkgICAgICB0aGlzX2FyZ2NsYXNzID0gbG9uZ19sb25nX2Fy ZzsKKyAKKwkgIGlmIChzZWVuX2JpZ19sKQorCSAgICBiYWQgPSAxOworCSAg YnJlYWs7CisKKwkgIGNhc2UgJ2MnOgorCSAgICB0aGlzX2FyZ2NsYXNzID0g bGNvdW50ID09IDAgPyBpbnRfYXJnIDogd2lkZV9jaGFyX2FyZzsKKwkgICAg aWYgKGxjb3VudCA+IDEgfHwgc2Vlbl9oIHx8IHNlZW5fYmlnX2wpCisJICAg ICAgYmFkID0gMTsKKwkgICAgaWYgKHNlZW5fcHJlYyB8fCBzZWVuX3plcm8g fHwgc2Vlbl9zcGFjZSB8fCBzZWVuX3BsdXMpCisJICAgICAgYmFkID0gMTsK KwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ3AnOgorCSAgICB0aGlzX2FyZ2Ns YXNzID0gcHRyX2FyZzsKKwkgICAgaWYgKGxjb3VudCB8fCBzZWVuX2ggfHwg c2Vlbl9iaWdfbCkKKwkgICAgICBiYWQgPSAxOworCSAgICBpZiAoc2Vlbl9w cmVjIHx8IHNlZW5femVybyB8fCBzZWVuX3NwYWNlIHx8IHNlZW5fcGx1cykK KwkgICAgICBiYWQgPSAxOworCSAgICBicmVhazsKKworCSAgY2FzZSAncyc6 CisJICAgIHRoaXNfYXJnY2xhc3MgPSBsY291bnQgPT0gMCA/IHN0cmluZ19h cmcgOiB3aWRlX3N0cmluZ19hcmc7CisJICAgIGlmIChsY291bnQgPiAxIHx8 IHNlZW5faCB8fCBzZWVuX2JpZ19sKQorCSAgICAgIGJhZCA9IDE7CisJICAg IGlmIChzZWVuX3plcm8gfHwgc2Vlbl9zcGFjZSB8fCBzZWVuX3BsdXMpCisJ ICAgICAgYmFkID0gMTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ2UnOgor CSAgY2FzZSAnZic6CisJICBjYXNlICdnJzoKKwkgIGNhc2UgJ0UnOgorCSAg Y2FzZSAnRyc6CisJICAgIGlmIChzZWVuX2JpZ19oIHx8IHNlZW5fYmlnX2Qg fHwgc2Vlbl9kb3VibGVfYmlnX2QpCisJICAgICAgdGhpc19hcmdjbGFzcyA9 IGRlY2Zsb2F0X2FyZzsKKwkgICAgZWxzZSBpZiAoc2Vlbl9iaWdfbCkKKwkg ICAgICB0aGlzX2FyZ2NsYXNzID0gbG9uZ19kb3VibGVfYXJnOworCSAgICBl bHNlCisJICAgICAgdGhpc19hcmdjbGFzcyA9IGRvdWJsZV9hcmc7CisKKwkg IGlmIChsY291bnQgfHwgc2Vlbl9oKQorCSAgICBiYWQgPSAxOworCSAgYnJl YWs7CisKKwkgIGNhc2UgJyonOgorCSAgICBlcnJvciAoXygiYConIG5vdCBz dXBwb3J0ZWQgZm9yIHByZWNpc2lvbiBvciB3aWR0aCBpbiBwcmludGYiKSk7 CisKKwkgIGNhc2UgJ24nOgorCSAgICBlcnJvciAoXygiRm9ybWF0IHNwZWNp ZmllciBgbicgbm90IHN1cHBvcnRlZCBpbiBwcmludGYiKSk7CisKKwkgIGNh c2UgJ1wwJzoKKwkgICAgZXJyb3IgKF8oIkluY29tcGxldGUgZm9ybWF0IHNw ZWNpZmllciBhdCBlbmQgb2YgZm9ybWF0IHN0cmluZyIpKTsKKworCSAgZGVm YXVsdDoKKwkgICAgZXJyb3IgKF8oIlVucmVjb2duaXplZCBmb3JtYXQgc3Bl Y2lmaWVyICclYycgaW4gcHJpbnRmIiksICpmKTsKKwkgIH0KKworCWlmIChi YWQpCisJICBlcnJvciAoXygiSW5hcHByb3ByaWF0ZSBtb2RpZmllcnMgdG8g IgorCQkgICAiZm9ybWF0IHNwZWNpZmllciAnJWMnIGluIHByaW50ZiIpLAor CQkgKmYpOworCisJZisrOworCisJc3ViX3N0YXJ0ID0gY3VycmVudF9zdWJz dHJpbmc7CisKKwlpZiAobGNvdW50ID4gMSAmJiBVU0VfUFJJTlRGX0k2NCkK KwkgIHsKKwkgICAgLyogV2luZG93cycgcHJpbnRmIGRvZXMgc3VwcG9ydCBs b25nIGxvbmcsIGJ1dCBub3QgdGhlIHVzdWFsIHdheS4KKwkgICAgICAgQ29u dmVydCAlbGxkIHRvICVJNjRkLiAgKi8KKwkgICAgaW50IGxlbmd0aF9iZWZv cmVfbGwgPSBmIC0gcGVyY2VudF9sb2MgLSAxIC0gbGNvdW50OworCisJICAg IHN0cm5jcHkgKGN1cnJlbnRfc3Vic3RyaW5nLCBwZXJjZW50X2xvYywgbGVu Z3RoX2JlZm9yZV9sbCk7CisJICAgIHN0cmNweSAoY3VycmVudF9zdWJzdHJp bmcgKyBsZW5ndGhfYmVmb3JlX2xsLCAiSTY0Iik7CisJICAgIGN1cnJlbnRf c3Vic3RyaW5nW2xlbmd0aF9iZWZvcmVfbGwgKyAzXSA9CisJICAgICAgcGVy Y2VudF9sb2NbbGVuZ3RoX2JlZm9yZV9sbCArIGxjb3VudF07CisJICAgIGN1 cnJlbnRfc3Vic3RyaW5nICs9IGxlbmd0aF9iZWZvcmVfbGwgKyA0OworCSAg fQorCWVsc2UgaWYgKHRoaXNfYXJnY2xhc3MgPT0gd2lkZV9zdHJpbmdfYXJn CisJCSB8fCB0aGlzX2FyZ2NsYXNzID09IHdpZGVfY2hhcl9hcmcpCisJICB7 CisJICAgIC8qIENvbnZlcnQgJWxzIG9yICVsYyB0byAlcy4gICovCisJICAg IGludCBsZW5ndGhfYmVmb3JlX2xzID0gZiAtIHBlcmNlbnRfbG9jIC0gMjsK KworCSAgICBzdHJuY3B5IChjdXJyZW50X3N1YnN0cmluZywgcGVyY2VudF9s b2MsIGxlbmd0aF9iZWZvcmVfbHMpOworCSAgICBzdHJjcHkgKGN1cnJlbnRf c3Vic3RyaW5nICsgbGVuZ3RoX2JlZm9yZV9scywgInMiKTsKKwkgICAgY3Vy cmVudF9zdWJzdHJpbmcgKz0gbGVuZ3RoX2JlZm9yZV9scyArIDI7CisJICB9 CisJZWxzZQorCSAgeworCSAgICBzdHJuY3B5IChjdXJyZW50X3N1YnN0cmlu ZywgcGVyY2VudF9sb2MsIGYgLSBwZXJjZW50X2xvYyk7CisJICAgIGN1cnJl bnRfc3Vic3RyaW5nICs9IGYgLSBwZXJjZW50X2xvYzsKKwkgIH0KKworCSpj dXJyZW50X3N1YnN0cmluZysrID0gJ1wwJzsKKworCXByZXZfc3RhcnQgPSBm OworCisJcGllY2VzW25leHRfZnJhZ10uc3RyaW5nID0gc3ViX3N0YXJ0Owor CXBpZWNlc1tuZXh0X2ZyYWddLmFyZ2NsYXNzID0gdGhpc19hcmdjbGFzczsK KwluZXh0X2ZyYWcrKzsKKyAgICAgIH0KKworICAvKiBSZWNvcmQgdGhlIHJl bWFpbmRlciBvZiB0aGUgc3RyaW5nLiAgKi8KKworICBzdWJfc3RhcnQgPSBj dXJyZW50X3N1YnN0cmluZzsKKworICBzdHJuY3B5IChjdXJyZW50X3N1YnN0 cmluZywgcHJldl9zdGFydCwgZiAtIHByZXZfc3RhcnQpOworICBjdXJyZW50 X3N1YnN0cmluZyArPSBmIC0gcHJldl9zdGFydDsKKyAgKmN1cnJlbnRfc3Vi c3RyaW5nKysgPSAnXDAnOworCisgIHBpZWNlc1tuZXh0X2ZyYWddLnN0cmlu ZyA9IHN1Yl9zdGFydDsKKyAgcGllY2VzW25leHRfZnJhZ10uYXJnY2xhc3Mg PSBsaXRlcmFsX3BpZWNlOworICBuZXh0X2ZyYWcrKzsKKworICAvKiBSZWNv cmQgYW4gZW5kLW9mLWFycmF5IG1hcmtlci4gICovCisKKyAgcGllY2VzW25l eHRfZnJhZ10uc3RyaW5nID0gTlVMTDsKKyAgcGllY2VzW25leHRfZnJhZ10u YXJnY2xhc3MgPSBsaXRlcmFsX3BpZWNlOworCisgIHJldHVybiBwaWVjZXM7 Cit9CisKK3ZvaWQKK2ZyZWVfZm9ybWF0X3BpZWNlcyAoc3RydWN0IGZvcm1h dF9waWVjZSAqcGllY2VzKQoreworICBpZiAoIXBpZWNlcykKKyAgICByZXR1 cm47CisKKyAgLyogV2UgaGFwcGVuIHRvIGtub3cgdGhhdCBhbGwgdGhlIHN0 cmluZyBwaWVjZXMgYXJlIGluIHRoZSBibG9jaworICAgICBwb2ludGVkIHRv IGJ5IHRoZSBmaXJzdCBzdHJpbmcgcGllY2UuICAqLworICBpZiAocGllY2Vz WzBdLnN0cmluZykKKyAgICB4ZnJlZSAocGllY2VzWzBdLnN0cmluZyk7CisK KyAgeGZyZWUgKHBpZWNlcyk7Cit9CisKK3ZvaWQKK2ZyZWVfZm9ybWF0X3Bp ZWNlc19jbGVhbnVwICh2b2lkICpwdHIpCit7CisgIHZvaWQgKipsb2NhdGlv biA9IHB0cjsKKworICBpZiAobG9jYXRpb24gPT0gTlVMTCkKKyAgICByZXR1 cm47CisKKyAgaWYgKCpsb2NhdGlvbiAhPSBOVUxMKQorICAgIHsKKyAgICAg IGZyZWVfZm9ybWF0X3BpZWNlcyAoKmxvY2F0aW9uKTsKKyAgICAgICpsb2Nh dGlvbiA9IE5VTEw7CisgICAgfQorfQorCkluZGV4OiBjb21tb24vZm9ybWF0 LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogY29tbW9uL2Zv cm1hdC5oCmRpZmYgLU4gY29tbW9uL2Zvcm1hdC5oCi0tLSAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgY29tbW9uL2Zvcm1hdC5o CTI1IEp1biAyMDEyIDE1OjEzOjAxIC0wMDAwCkBAIC0wLDAgKzEsNjMgQEAK Ky8qIFBhcnNlIGEgcHJpbnRmLXN0eWxlIGZvcm1hdCBzdHJpbmcuCisKKyAg IENvcHlyaWdodCAoQykgMTk4Ni0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisK KyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiBkZWZpbmVkKF9f TUlOR1czMl9fKSAmJiAhZGVmaW5lZChQUklOVEZfSEFTX0xPTkdfTE9ORykK KyMgZGVmaW5lIFVTRV9QUklOVEZfSTY0IDEKKyMgZGVmaW5lIFBSSU5URl9I QVNfTE9OR19MT05HCisjZWxzZQorIyBkZWZpbmUgVVNFX1BSSU5URl9JNjQg MAorI2VuZGlmCisKKy8qIFRoZSBhcmdjbGFzcyByZXByZXNlbnRzIHRoZSBn ZW5lcmFsIHR5cGUgb2YgZGF0YSB0aGF0IGdvZXMgd2l0aCBhCisgICBmb3Jt YXQgZGlyZWN0aXZlOyBpbnRfYXJnIGZvciAlZCwgbG9uZ19hcmcgZm9yICVs LCBhbmQgc28gZm9ydGguCisgICBOb3RlIHRoYXQgdGhlc2UgcHJpbWFyaWx5 IGRpc3Rpbmd1aXNoIHR5cGVzIGJ5IHNpemUgYW5kIG5lZWQgZm9yCisgICBz cGVjaWFsIGhhbmRsaW5nLCBzbyBmb3IgaW5zdGFuY2UgJXUgYW5kICV4IGFy ZSAoYXQgcHJlc2VudCkgYWxzbworICAgY2xhc3NlZCBhcyBpbnRfYXJnLiAg Ki8KKworZW51bSBhcmdjbGFzcworICB7CisgICAgbGl0ZXJhbF9waWVjZSwK KyAgICBpbnRfYXJnLCBsb25nX2FyZywgbG9uZ19sb25nX2FyZywgcHRyX2Fy ZywKKyAgICBzdHJpbmdfYXJnLCB3aWRlX3N0cmluZ19hcmcsIHdpZGVfY2hh cl9hcmcsCisgICAgZG91YmxlX2FyZywgbG9uZ19kb3VibGVfYXJnLCBkZWNm bG9hdF9hcmcKKyAgfTsKKworLyogQSBmb3JtYXQgcGllY2UgaXMgYSBzZWN0 aW9uIG9mIHRoZSBmb3JtYXQgc3RyaW5nIHRoYXQgbWF5IGluY2x1ZGUgYQor ICAgc2luZ2xlIHByaW50IGRpcmVjdGl2ZSBzb21ld2hlcmUgaW4gaXQsIGFu ZCB0aGUgYXNzb2NpYXRlZCBjbGFzcworICAgZm9yIHRoZSBhcmd1bWVudC4g ICovCisKK3N0cnVjdCBmb3JtYXRfcGllY2UKK3sKKyAgY2hhciAqc3RyaW5n OworICBlbnVtIGFyZ2NsYXNzIGFyZ2NsYXNzOworfTsKKworLyogUmV0dXJu IGFuIGFycmF5IG9mIHByaW50ZiBmcmFnbWVudHMgZm91bmQgYXQgdGhlIGdp dmVuIHN0cmluZywgYW5kCisgICByZXdyaXRlIEFSRyB3aXRoIGEgcG9pbnRl ciB0byB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgc3RyaW5nLiAgKi8KKworZXh0 ZXJuIHN0cnVjdCBmb3JtYXRfcGllY2UgKnBhcnNlX2Zvcm1hdF9zdHJpbmcg KGNoYXIgKiphcmcpOworCisvKiBHaXZlbiBhIHBvaW50ZXIgdG8gYW4gYXJy YXkgb2YgZm9ybWF0IHBpZWNlcywgZnJlZSBhbnkgbWVtb3J5IHRoYXQKKyAg IHdvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYnkgcGFyc2VfZm9ybWF0X3N0 cmluZy4gICovCisKK2V4dGVybiB2b2lkIGZyZWVfZm9ybWF0X3BpZWNlcyAo c3RydWN0IGZvcm1hdF9waWVjZSAqZnJhZ3MpOworCisvKiBGcmVlaW5nLCBj YXN0IGFzIGEgY2xlYW51cC4gICovCisKK2V4dGVybiB2b2lkIGZyZWVfZm9y bWF0X3BpZWNlc19jbGVhbnVwICh2b2lkICopOwpJbmRleDogdGVzdHN1aXRl L2dkYi5iYXNlL2RwcmludGYuZXhwCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvdGVzdHN1aXRlL2dkYi5iYXNl L2RwcmludGYuZXhwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAt dSAtcCAtcjEuMyBkcHJpbnRmLmV4cAotLS0gdGVzdHN1aXRlL2dkYi5iYXNl L2RwcmludGYuZXhwCTE1IE1heSAyMDEyIDEzOjM2OjE4IC0wMDAwCTEuMwor KysgdGVzdHN1aXRlL2dkYi5iYXNlL2RwcmludGYuZXhwCTI1IEp1biAyMDEy IDE1OjEzOjAxIC0wMDAwCkBAIC04NSw2ICs4NSwzMCBAQCBpZiAhW3Rhcmdl dF9pbmZvIGV4aXN0cyBnZGIsbm9pbmZlcmlvcmlvCiAJIjJuZCBkcHJpbnRm LCBmcHJpbnRmIgogfQogCitzZXQgdGFyZ2V0X2Nhbl9kcHJpbnRmIDEKK3Nl dCBtc2cgIlNldCBkcHJpbnRmIHN0eWxlIHRvIGFnZW50IgorZ2RiX3Rlc3Rf bXVsdGlwbGUgInNldCBkcHJpbnRmLXN0eWxlIGFnZW50IiAkbXNnIHsKKyAg ICAtcmUgIndhcm5pbmc6IFRhcmdldCBjYW5ub3QgcnVuIGRwcmludGYgY29t bWFuZHMuKiIgeworCXNldCB0YXJnZXRfY2FuX2RwcmludGYgMAorCXBhc3Mg IiRtc2cgLSBjYW5ub3QgZG8iCisgICAgfQorICAgIC1yZSAiLiokZ2RiX3By b21wdCAkIiB7CisJcGFzcyAiJG1zZyAtIGNhbiBkbyIKKyAgICB9Cit9CisK K2lmICR0YXJnZXRfY2FuX2RwcmludGYgeworCisgICAgZ2RiX3J1bl9jbWQK KworICAgIGdkYl90ZXN0ICIiICJCcmVha3BvaW50IgorCisgICAgZ2RiX3Rl c3QgImNvbnRpbnVlIiAiQnJlYWtwb2ludCBcWzAtOVxdKywgZm9vIC4qIiAi MXN0IGRwcmludGYsIGFnZW50IgorCisgICAgZ2RiX3Rlc3QgImNvbnRpbnVl IiAiQnJlYWtwb2ludCBcWzAtOVxdKywgZm9vIC4qIiAiMm5kIGRwcmludGYs IGFnZW50IgorCit9CisKIGdkYl90ZXN0ICJzZXQgZHByaW50Zi1zdHlsZSBm b29iYXIiICJVbmRlZmluZWQgaXRlbTogXCJmb29iYXJcIi4iIFwKICAgICAi U2V0IGRwcmludGYgc3R5bGUgdG8gYW4gdW5yZWNvZ25pemVkIHR5cGUiCiAK --------------070501060306060009060108--