From: skw AT hplb DOT hpl DOT hp DOT com (Stuart Williams) Subject: Re: GDB problem 8 Jul 1997 08:21:32 -0700 Approved: cygnus DOT gnu-win32 AT cygnus DOT com Distribution: cygnus Message-ID: <33C23C2E.898AE9F7.cygnus.gnu-win32@hplb.hpl.hp.com> References: <199707080756 DOT AAA01589 AT rtl DOT cygnus DOT com> Reply-To: skw AT hplb DOT hpl DOT hp DOT com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------5AAB448694FE76ACD5311E42" X-Mailer: Mozilla 4.0b5 [en] (Win95; I) Original-To: Geoffrey Noer Original-Cc: "J.R. Dean" , gnu-win32 AT cygnus DOT com X-Priority: 3 (Normal) Original-Sender: owner-gnu-win32 AT cygnus DOT com This is a multi-part message in MIME format. --------------5AAB448694FE76ACD5311E42 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit I have tracked down a few problems that cause GDB to bail out, some related to memory allocation/deallocation. I have (re-)build i386-cygwin32-gdb.exe and m68000-coff-gdb.exe with these patches applied which has greatly improved their stability. I hope they help. Regards Stuart Williams HP Labs, Bristol I sent a the patches that we applied to Geof a little while back, but Geoffrey Noer wrote: > > J.R. Dean wrote: > > > > >My main problem with the gdb in beta 18 is the crash on exit > > >problem. I hope it will be fixed in future releases... > > > > Oh, so it *is* a bug? Whoops. > > > > Well, so much for debugging with gdb. > > My consistent problem is quitting the tcl/tk gdb (I believe the problem > is actually in tcl/tk rather than in gdb). That said, I find the b18 gdb > to be fairly usable so you may not need to completely abandon using it > because of this problem. > > -- > Geoffrey Noer > noer AT cygnus DOT com > - > For help on using this list (especially unsubscribing), send a message to > "gnu-win32-request AT cygnus DOT com" with one line of text: "help". ---------- From: Stuart Williams[SMTP:skw AT hplb DOT hpl DOT hp DOT com] Sent: 02 June 1997 15:51 To: 'Geoffrey Noer' Subject: GDB Problems/Fixs Geof, I've been building GNU Win32 to cross develop on 68k from a Win32 platform. I was pleased to see that GDB has been ported to support the Tk/Tcl UI under Win32. We had enormous problems trying to build and use the windows based gdb in the mswin subdirectory. Functionally at least, the Tk/Tcl based GDB is a big improvement. To get things working properly I had to patch a couple of files. In gdbtk.c some of the Tcl_ function calls return dynamically allocated structures that are then subsequently free'ed. Unfortunately the allocation happens within the Tk/Tcl DLL while the freeing does not. For example, things go bang (well abort()) at the free in 'gdbtk_query' when it frees 'command'. Try it... if you do something that throws a query, gdb.exe (the one in the binary distribution) exits without warning. 'free' calls 'mfree' which in turn checks for magic value before and after the allocated memory region. However, they're not there because the allocation was done within a call to 'Tcl_Merge'. I've fixed this by '#ifdef WINNT' around the Tcl_Alloc and Tcl_Free definitions (I have no idea how the Tk/Tcl DLL is expected to call them) and #ifdef'd around the 'free' calls to substitute Tcl_Free which now resolves through libtcl7.6.a to the DLL. Result... no bang. Later hit a second problem (don't recall the symptom now) that turned out to be a SEGV due to chasing a null pointer in 'infcmd.c'. I suspect there are more of these to find! Attached are my gdbtk.c and infcmd.c and corresponding diff files. I still have an intermitent and annoying SEGV that occurs when GDB exits under win 95. I haven't tracked it down yet, but the report is: GDB caused an invalid page fault in module CW3215.DLL at 0137:005e3f66. Registers: EAX=0280fffc CS=0137 EIP=005e3f66 EFLGS=00010203 EBX=0492fc08 SS=013f ESP=0492fbfc EBP=0492fc28 ECX=00000001 DS=013f ESI=00000000 FS=3bef EDX=00000020 ES=013f EDI=0060002c GS=0000 Bytes at CS:EIP: 8b 00 89 43 1c 64 67 a1 00 00 89 03 64 67 89 1e Looks like it happens between the 'exit() call and the end of the program. Anyway, I hope that you can use these fixes next time around. Regards Stuart Williams HP Labs, Bristol, UK. --------------5AAB448694FE76ACD5311E42 Content-Type: text/plain; charset=us-ascii; name="infcmd.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="infcmd.diff" *** infcmd.c Tue May 20 19:00:08 1997 --- infcmd.c.orig Tue May 20 18:59:04 1997 *************** *** 443,450 **** } } fixup_symbol_section (sfn, 0); ! if (sfn!=NULL && ! section_is_overlay (SYMBOL_BFD_SECTION (sfn)) && !section_is_mapped (SYMBOL_BFD_SECTION (sfn))) { if (!query ("WARNING!!! Destination is in unmapped overlay! Jump anyway? ")) --- 443,449 ---- } } fixup_symbol_section (sfn, 0); ! if (section_is_overlay (SYMBOL_BFD_SECTION (sfn)) && !section_is_mapped (SYMBOL_BFD_SECTION (sfn))) { if (!query ("WARNING!!! Destination is in unmapped overlay! Jump anyway? ")) --------------5AAB448694FE76ACD5311E42 Content-Type: application/x-unknown-content-type-c_auto_file; name="gdbtk.c" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="gdbtk.c" LyogVGNsL1RrIGludGVyZmFjZSByb3V0aW5lcy4KICAgQ29weXJpZ2h0IDE5OTQsIDE5OTUs IDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCgogICBXcml0dGVu IGJ5IFN0dSBHcm9zc21hbiA8Z3Jvc3NtYW5AY3lnbnVzLmNvbT4gb2YgQ3lnbnVzIFN1cHBv cnQuCgpUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCgpUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgoKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIElu Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3 LCBVU0EuICAqLwoKI2luY2x1ZGUgImRlZnMuaCIKI2luY2x1ZGUgInN5bXRhYi5oIgojaW5j bHVkZSAiaW5mZXJpb3IuaCIKI2luY2x1ZGUgImNvbW1hbmQuaCIKI2luY2x1ZGUgImJmZC5o IgojaW5jbHVkZSAic3ltZmlsZS5oIgojaW5jbHVkZSAib2JqZmlsZXMuaCIKI2luY2x1ZGUg InRhcmdldC5oIgojaW5jbHVkZSA8dGNsLmg+CiNpbmNsdWRlIDx0ay5oPgovKiAjaW5jbHVk ZSA8aXRjbC5oPiAqLwojaWZkZWYgQU5TSV9QUk9UT1RZUEVTCiNpbmNsdWRlIDxzdGRhcmcu aD4KI2Vsc2UKI2luY2x1ZGUgPHZhcmFyZ3MuaD4KI2VuZGlmCiNpbmNsdWRlIDxzaWduYWwu aD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHNl dGptcC5oPgojaW5jbHVkZSAidG9wLmgiCiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KI2luY2x1 ZGUgImdkYl9zdHJpbmcuaCIKI2luY2x1ZGUgImRpcy1hc20uaCIKI2luY2x1ZGUgPHN0ZGlv Lmg+CiNpbmNsdWRlICJnZGJjbWQuaCIKCiNpZm5kZWYgV0lOTlQKI2lmbmRlZiBGSU9BU1lO QwojaW5jbHVkZSA8c3lzL3N0cm9wdHMuaD4KI2VuZGlmCiNlbmRpZgoKI2lmZGVmIFdJTk5U CiNkZWZpbmUgR0RCVEtfUEFUSF9TRVAgIjsiCiNlbHNlCiNkZWZpbmUgR0RCVEtfUEFUSF9T RVAgIjoiCiNlbmRpZgoKLyogU29tZSB2ZXJzaW9ucyAoMS4zLjc5LCAxLjMuODEpIG9mIExp bnV4IGRvbid0IHN1cHBvcnQgU0lPQ1NQR1JQIHRoZSB3YXkKICAgZ2RidGsgd2FudHMgdG8g dXNlIGl0Li4uICovCiNpZmRlZiBfX2xpbnV4X18KI3VuZGVmIFNJT0NTUEdSUAojZW5kaWYK CnN0YXRpYyB2b2lkIG51bGxfcm91dGluZSBQQVJBTVMgKChpbnQpKTsKc3RhdGljIHZvaWQg Z2RidGtfZmx1c2ggUEFSQU1TICgoRklMRSAqKSk7CnN0YXRpYyB2b2lkIGdkYnRrX2ZwdXRz IFBBUkFNUyAoKGNvbnN0IGNoYXIgKiwgRklMRSAqKSk7CnN0YXRpYyBpbnQgZ2RidGtfcXVl cnkgUEFSQU1TICgoY29uc3QgY2hhciAqLCB2YV9saXN0KSk7CnN0YXRpYyBjaGFyICpnZGJ0 a19yZWFkbGluZSBQQVJBTVMgKChjaGFyICopKTsKc3RhdGljIHZvaWQgZ2RidGtfaW5pdCBQ QVJBTVMgKCh2b2lkKSk7CnN0YXRpYyB2b2lkIHRrX2NvbW1hbmRfbG9vcCBQQVJBTVMgKCh2 b2lkKSk7CnN0YXRpYyB2b2lkIGdkYnRrX2NhbGxfY29tbWFuZCBQQVJBTVMgKChzdHJ1Y3Qg Y21kX2xpc3RfZWxlbWVudCAqLCBjaGFyICosIGludCkpOwpzdGF0aWMgaW50IGdkYnRrX3dh aXQgUEFSQU1TICgoaW50LCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKikpOwpzdGF0aWMg dm9pZCB4X2V2ZW50IFBBUkFNUyAoKGludCkpOwpzdGF0aWMgdm9pZCBnZGJ0a19pbnRlcmFj dGl2ZSBQQVJBTVMgKCh2b2lkKSk7CnN0YXRpYyB2b2lkIGNsZWFudXBfaW5pdCBQQVJBTVMg KChpbnQpKTsKc3RhdGljIHZvaWQgdGtfY29tbWFuZCBQQVJBTVMgKChjaGFyICosIGludCkp OwpzdGF0aWMgaW50IGdkYl9kaXNhc3NlbWJsZSBQQVJBTVMgKChDbGllbnREYXRhLCBUY2xf SW50ZXJwICosIGludCwgY2hhciAqW10pKTsKc3RhdGljIGludCBjb21wYXJlX2xpbmVzIFBB UkFNUyAoKGNvbnN0IFBUUiwgY29uc3QgUFRSKSk7CnN0YXRpYyBpbnQgZ2RidGtfZGlzX2Fz bV9yZWFkX21lbW9yeSBQQVJBTVMgKChiZmRfdm1hLCBiZmRfYnl0ZSAqLCBpbnQsIGRpc2Fz c2VtYmxlX2luZm8gKikpOwpzdGF0aWMgaW50IGdkYl9wYXRoX2NvbnYgUEFSQU1TICgoQ2xp ZW50RGF0YSwgVGNsX0ludGVycCAqLCBpbnQsIGNoYXIgKltdKSk7CnN0YXRpYyBpbnQgZ2Ri X3N0b3AgUEFSQU1TICgoQ2xpZW50RGF0YSwgVGNsX0ludGVycCAqLCBpbnQsIGNoYXIgKltd KSk7CnN0YXRpYyBpbnQgZ2RiX2xpc3RmaWxlcyBQQVJBTVMgKChDbGllbnREYXRhLCBUY2xf SW50ZXJwICosIGludCwgY2hhciAqW10pKTsKc3RhdGljIGludCBjYWxsX3dyYXBwZXIgUEFS QU1TICgoQ2xpZW50RGF0YSwgVGNsX0ludGVycCAqLCBpbnQsIGNoYXIgKltdKSk7CnN0YXRp YyBpbnQgZ2RiX2NtZCBQQVJBTVMgKChDbGllbnREYXRhLCBUY2xfSW50ZXJwICosIGludCwg Y2hhciAqYXJndltdKSk7CnN0YXRpYyBpbnQgZ2RiX2ZldGNoX3JlZ2lzdGVycyBQQVJBTVMg KChDbGllbnREYXRhLCBUY2xfSW50ZXJwICosIGludCwgY2hhciAqW10pKTsKc3RhdGljIHZv aWQgZ2RidGtfcmVhZGxpbmVfZW5kIFBBUkFNUyAoKHZvaWQpKTsKc3RhdGljIGludCBnZGJf Y2hhbmdlZF9yZWdpc3Rlcl9saXN0IFBBUkFNUyAoKENsaWVudERhdGEsIFRjbF9JbnRlcnAg KiwgaW50LCBjaGFyICpbXSkpOwpzdGF0aWMgdm9pZCByZWdpc3Rlcl9jaGFuZ2VkX3AgUEFS QU1TICgoaW50LCB2b2lkICopKTsKc3RhdGljIGludCBnZGJfZ2V0X2JyZWFrcG9pbnRfbGlz dCBQQVJBTVMgKChDbGllbnREYXRhLCBUY2xfSW50ZXJwICosIGludCwgY2hhciAqW10pKTsK c3RhdGljIGludCBnZGJfZ2V0X2JyZWFrcG9pbnRfaW5mbyBQQVJBTVMgKChDbGllbnREYXRh LCBUY2xfSW50ZXJwICosIGludCwgY2hhciAqW10pKTsKc3RhdGljIHZvaWQgYnJlYWtwb2lu dF9ub3RpZnkgUEFSQU1TICgoc3RydWN0IGJyZWFrcG9pbnQgKiwgY29uc3QgY2hhciAqKSk7 CnN0YXRpYyB2b2lkIGdkYnRrX2NyZWF0ZV9icmVha3BvaW50IFBBUkFNUyAoKHN0cnVjdCBi cmVha3BvaW50ICopKTsKc3RhdGljIHZvaWQgZ2RidGtfZGVsZXRlX2JyZWFrcG9pbnQgUEFS QU1TICgoc3RydWN0IGJyZWFrcG9pbnQgKikpOwpzdGF0aWMgdm9pZCBnZGJ0a19tb2RpZnlf YnJlYWtwb2ludCBQQVJBTVMgKChzdHJ1Y3QgYnJlYWtwb2ludCAqKSk7CnN0YXRpYyBpbnQg Z2RiX2xvYyBQQVJBTVMgKChDbGllbnREYXRhLCBUY2xfSW50ZXJwICosIGludCwgY2hhciAq W10pKTsKc3RhdGljIGludCBnZGJfZXZhbCBQQVJBTVMgKChDbGllbnREYXRhLCBUY2xfSW50 ZXJwICosIGludCwgY2hhciAqW10pKTsKc3RhdGljIGludCBnZGJfc291cmNlbGluZXMgUEFS QU1TICgoQ2xpZW50RGF0YSwgVGNsX0ludGVycCAqLCBpbnQsIGNoYXIgKltdKSk7CnN0YXRp YyBpbnQgbWFwX2FyZ19yZWdpc3RlcnMgUEFSQU1TICgoaW50LCBjaGFyICpbXSwgdm9pZCAo KikgKGludCwgdm9pZCAqKSwgdm9pZCAqKSk7CnN0YXRpYyB2b2lkIGdldF9yZWdpc3Rlcl9u YW1lIFBBUkFNUyAoKGludCwgdm9pZCAqKSk7CnN0YXRpYyBpbnQgZ2RiX3JlZ25hbWVzIFBB UkFNUyAoKENsaWVudERhdGEsIFRjbF9JbnRlcnAgKiwgaW50LCBjaGFyICpbXSkpOwpzdGF0 aWMgdm9pZCBnZXRfcmVnaXN0ZXIgUEFSQU1TICgoaW50LCB2b2lkICopKTsKCi8qIEhhbmRs ZSBmb3IgVENMIGludGVycHJldGVyICovCgpzdGF0aWMgVGNsX0ludGVycCAqaW50ZXJwID0g TlVMTDsKCnN0YXRpYyBpbnQgeF9mZDsJCS8qIFggbmV0d29yayBzb2NrZXQgKi8KCi8qIFRo aXMgdmFyaWFibGUgaXMgdHJ1ZSB3aGVuIHRoZSBpbmZlcmlvciBpcyBydW5uaW5nLiAgQWx0 aG91Z2ggaXQncwogICBwb3NzaWJsZSB0byBkaXNhYmxlIG1vc3QgaW5wdXQgZnJvbSB3aWRn ZXRzIGFuZCB0aHVzIHByZXZlbnQKICAgYXR0ZW1wdHMgdG8gZG8gYW55dGhpbmcgd2hpbGUg dGhlIGluZmVyaW9yIGlzIHJ1bm5pbmcsIGFueSBjb21tYW5kcwogICB0aGF0IGdldCB0aHJv dWdoIC0gZXZlbiBhIHNpbXBsZSBtZW1vcnkgcmVhZCAtIGFyZSBWZXJ5IEJhZCwgYW5kCiAg IG1heSBjYXVzZSBHREIgdG8gY3Jhc2ggb3IgYmVoYXZlIHN0cmFuZ2VseS4gIFNvLCB0aGlz IHZhcmlhYmxlCiAgIHByb3ZpZGVzIGFuIGV4dHJhIGxheWVyIG9mIGRlZmVuc2UuICAqLwoK c3RhdGljIGludCBydW5uaW5nX25vdzsKCi8qIFRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3 aGVyZSBtZW1vcnkgdXNlZCBmb3IgZGlzYXNzZW1ibHkgaXMgcmVhZCBmcm9tLgogICBJZiA+ IDAsIHRoZW4gZGlzYXNzZW1ibHkgY29tZXMgZnJvbSB0aGUgZXhlYyBmaWxlIHJhdGhlciB0 aGFuIHRoZQogICB0YXJnZXQgKHdoaWNoIG1pZ2h0IGJlIGF0IHRoZSBvdGhlciBlbmQgb2Yg YSBzbG93IHNlcmlhbCBsaW5rKS4gIElmCiAgID09IDAgdGhlbiBkaXNhc3NlbWJseSBjb21l cyBmcm9tIHRhcmdldC4gIElmIDwgMCBkaXNhc3NlbWJseSBpcwogICBhdXRvbWF0aWNhbGx5 IHN3aXRjaGVkIHRvIHRoZSB0YXJnZXQgaWYgaXQncyBhbiBpbmZlcmlvciBwcm9jZXNzLAog ICBvdGhlcndpc2UgdGhlIGV4ZWMgZmlsZSBpcyB1c2VkLiAgKi8KCnN0YXRpYyBpbnQgZGlz YXNzZW1ibGVfZnJvbV9leGVjID0gLTE7CgpzdGF0aWMgY2hhciAqR2RidGtfTGlicmFyeTsK CiNpZm5kZWYgV0lOTlQKLyogU3VwcGx5IG1hbGxvYyBjYWxscyBmb3IgdGNsL3RrLiAgKi8K CmNoYXIgKgpUY2xfQWxsb2MgKHNpemUpCiAgICAgdW5zaWduZWQgaW50IHNpemU7CnsKICBy ZXR1cm4geG1hbGxvYyAoc2l6ZSk7Cn0KCmNoYXIgKgpUY2xfUmVhbGxvYyAocHRyLCBzaXpl KQogICAgIGNoYXIgKnB0cjsKICAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKewogIHJldHVybiB4 cmVhbGxvYyAocHRyLCBzaXplKTsKfQoKdm9pZApUY2xfRnJlZShwdHIpCiAgICAgY2hhciAq cHRyOwp7CiAgZnJlZSAocHRyKTsKfQoKI2VuZGlmCgpzdGF0aWMgdm9pZApudWxsX3JvdXRp bmUoYXJnKQogICAgIGludCBhcmc7CnsKfQoKLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBk ZWFsIHdpdGggc3Rkb3V0L3N0ZGVyciBkYXRhLCB3aGljaCBpcyBjcmVhdGVkIGJ5CiAgIHtm fXByaW50Zl97dW59ZmlsdGVyZWQgYW5kIGZyaWVuZHMuICBnZGJ0a19mcHV0cyBhbmQgZ2Ri dGtfZmx1c2ggYXJlIHRoZQogICBsb3dlc3QgbGV2ZWwgb2YgdGhlc2Ugcm91dGluZXMgYW5k IGNhcHR1cmUgYWxsIG91dHB1dCBmcm9tIHRoZSByZXN0IG9mIEdEQi4KICAgTm9ybWFsbHkg dGhleSBwcmVzZW50IHRoZWlyIGRhdGEgdG8gdGNsIHZpYSBjYWxsYmFja3MgdG8gdGhlIGZv bGxvd2luZyB0Y2wKICAgcm91dGluZXM6ICBnZGJ0a190Y2xfZnB1dHMsIGdkYnRrX3RjbF9m cHV0c19lcnJvciwgYW5kIGdkYnRrX2ZsdXNoLiAgVGhlc2UKICAgaW4gdHVybiBjYWxsIHRr IHJvdXRpbmVzIHRvIHVwZGF0ZSB0aGUgZGlzcGxheS4KCiAgIFVuZGVyIHNvbWUgY2lyY3Vt c3RhbmNlcywgeW91IG1heSB3YW50IHRvIGNvbGxlY3QgdGhlIG91dHB1dCBzbyB0aGF0IGl0 IGNhbgogICBiZSByZXR1cm5lZCBhcyB0aGUgdmFsdWUgb2YgYSB0Y2wgcHJvY2VkdXJlLiAg VGhpcyBjYW4gYmUgZG9uZSBieQogICBzdXJyb3VuZGluZyB0aGUgb3V0cHV0IHJvdXRpbmVz IHdpdGggY2FsbHMgdG8gc3RhcnRfc2F2aW5nX291dHB1dCBhbmQKICAgZmluaXNoX3Nhdmlu Z19vdXRwdXQuICBUaGUgc2F2ZWQgZGF0YSBjYW4gdGhlbiBiZSByZXRyaWV2ZWQgd2l0aAog ICBnZXRfc2F2ZWRfb3V0cHV0IChidXQgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBj YWxsIHRvCiAgIGZpbmlzaF9zYXZpbmdfb3V0cHV0KS4gICovCgovKiBEeW5hbWljIHN0cmlu ZyBoZWFkZXIgZm9yIHN0ZG91dC4gKi8KCnN0YXRpYyBUY2xfRFN0cmluZyAqcmVzdWx0X3B0 cjsKDApzdGF0aWMgdm9pZApnZGJ0a19mbHVzaCAoc3RyZWFtKQogICAgIEZJTEUgKnN0cmVh bTsKewojaWYgMAogIC8qIEZvcmNlIGltbWVkaWF0ZSBzY3JlZW4gdXBkYXRlICovCgogIFRj bF9WYXJFdmFsIChpbnRlcnAsICJnZGJ0a190Y2xfZmx1c2giLCBOVUxMKTsKI2VuZGlmCn0K CnN0YXRpYyB2b2lkCmdkYnRrX2ZwdXRzIChwdHIsIHN0cmVhbSkKICAgICBjb25zdCBjaGFy ICpwdHI7CiAgICAgRklMRSAqc3RyZWFtOwp7CgogIGlmIChyZXN1bHRfcHRyKQogICAgVGNs X0RTdHJpbmdBcHBlbmQgKHJlc3VsdF9wdHIsIChjaGFyICopcHRyLCAtMSk7CiAgZWxzZQog ICAgewogICAgICBUY2xfRFN0cmluZyBzdHI7CgogICAgICBUY2xfRFN0cmluZ0luaXQgKCZz dHIpOwoKICAgICAgVGNsX0RTdHJpbmdBcHBlbmQgKCZzdHIsICJnZGJ0a190Y2xfZnB1dHMi LCAtMSk7CiAgICAgIFRjbF9EU3RyaW5nQXBwZW5kRWxlbWVudCAoJnN0ciwgKGNoYXIgKilw dHIpOwoKICAgICAgVGNsX0V2YWwgKGludGVycCwgVGNsX0RTdHJpbmdWYWx1ZSAoJnN0cikp OwogICAgICBUY2xfRFN0cmluZ0ZyZWUgKCZzdHIpOwogICAgfQp9CgpzdGF0aWMgaW50Cmdk YnRrX3F1ZXJ5IChxdWVyeSwgYXJncykKICAgICBjb25zdCBjaGFyICpxdWVyeTsKICAgICB2 YV9saXN0IGFyZ3M7CnsKICBjaGFyIGJ1ZlsyMDBdLCAqbWVyZ2VbMl07CiAgY2hhciAqY29t bWFuZDsKICBsb25nIHZhbDsKCiAgdnNwcmludGYgKGJ1ZiwgcXVlcnksIGFyZ3MpOwogIG1l cmdlWzBdID0gImdkYnRrX3RjbF9xdWVyeSI7CiAgbWVyZ2VbMV0gPSBidWY7CiAgY29tbWFu ZCA9IFRjbF9NZXJnZSAoMiwgbWVyZ2UpOwogIFRjbF9FdmFsIChpbnRlcnAsIGNvbW1hbmQp OwoKI2lmbmRlZiBXSU5OVAogIGZyZWUgKGNvbW1hbmQpOwojZWxzZQogIFRjbF9GcmVlIChj b21tYW5kKTsKI2VuZGlmCgoKICB2YWwgPSBhdG9sIChpbnRlcnAtPnJlc3VsdCk7CiAgcmV0 dXJuIHZhbDsKfQoKLyogVkFSQVJHUyAqLwpzdGF0aWMgdm9pZAojaWZkZWYgQU5TSV9QUk9U T1RZUEVTCmdkYnRrX3JlYWRsaW5lX2JlZ2luIChjaGFyICpmb3JtYXQsIC4uLikKI2Vsc2UK Z2RidGtfcmVhZGxpbmVfYmVnaW4gKHZhX2FsaXN0KQogICAgIHZhX2RjbAojZW5kaWYKewog IHZhX2xpc3QgYXJnczsKICBjaGFyIGJ1ZlsyMDBdLCAqbWVyZ2VbMl07CiAgY2hhciAqY29t bWFuZDsKCiNpZmRlZiBBTlNJX1BST1RPVFlQRVMKICB2YV9zdGFydCAoYXJncywgZm9ybWF0 KTsKI2Vsc2UKICBjaGFyICpmb3JtYXQ7CiAgdmFfc3RhcnQgKGFyZ3MpOwogIGZvcm1hdCA9 IHZhX2FyZyAoYXJncywgY2hhciAqKTsKI2VuZGlmCgogIHZzcHJpbnRmIChidWYsIGZvcm1h dCwgYXJncyk7CiAgbWVyZ2VbMF0gPSAiZ2RidGtfdGNsX3JlYWRsaW5lX2JlZ2luIjsKICBt ZXJnZVsxXSA9IGJ1ZjsKICBjb21tYW5kID0gVGNsX01lcmdlICgyLCBtZXJnZSk7CiAgVGNs X0V2YWwgKGludGVycCwgY29tbWFuZCk7CiNpZm5kZWYgV0lOTlQKICBmcmVlIChjb21tYW5k KTsKI2Vsc2UKICBUY2xfRnJlZSAoY29tbWFuZCk7CiNlbmRpZgp9CgpzdGF0aWMgY2hhciAq CmdkYnRrX3JlYWRsaW5lIChwcm9tcHQpCiAgICAgY2hhciAqcHJvbXB0Owp7CiAgY2hhciAq bWVyZ2VbMl07CiAgY2hhciAqY29tbWFuZDsKICBpbnQgcmVzdWx0OwoKICBtZXJnZVswXSA9 ICJnZGJ0a190Y2xfcmVhZGxpbmUiOwogIG1lcmdlWzFdID0gcHJvbXB0OwogIGNvbW1hbmQg PSBUY2xfTWVyZ2UgKDIsIG1lcmdlKTsKICByZXN1bHQgPSBUY2xfRXZhbCAoaW50ZXJwLCBj b21tYW5kKTsKCiNpZm5kZWYgV0lOTlQKICBmcmVlIChjb21tYW5kKTsKI2Vsc2UKICBUY2xf RnJlZSAoY29tbWFuZCk7CiNlbmRpZgoKICBpZiAocmVzdWx0ID09IFRDTF9PSykKICAgIHsK ICAgICAgcmV0dXJuIChzdHJkdXAgKGludGVycCAtPiByZXN1bHQpKTsKICAgIH0KICBlbHNl CiAgICB7CiAgICAgIGdkYnRrX2ZwdXRzIChpbnRlcnAgLT4gcmVzdWx0LCBnZGJfc3Rkb3V0 KTsKICAgICAgZ2RidGtfZnB1dHMgKCJcbiIsIGdkYl9zdGRvdXQpOwogICAgICByZXR1cm4g KE5VTEwpOwogICAgfQp9CgpzdGF0aWMgdm9pZApnZGJ0a19yZWFkbGluZV9lbmQgKCkKewog IFRjbF9FdmFsIChpbnRlcnAsICJnZGJ0a190Y2xfcmVhZGxpbmVfZW5kIik7Cn0KCgwKc3Rh dGljIHZvaWQKI2lmZGVmIEFOU0lfUFJPVE9UWVBFUwpkc3ByaW50Zl9hcHBlbmRfZWxlbWVu dCAoVGNsX0RTdHJpbmcgKmRzcCwgY2hhciAqZm9ybWF0LCAuLi4pCiNlbHNlCmRzcHJpbnRm X2FwcGVuZF9lbGVtZW50ICh2YV9hbGlzdCkKICAgICB2YV9kY2wKI2VuZGlmCnsKICB2YV9s aXN0IGFyZ3M7CiAgY2hhciBidWZbMTAyNF07CgojaWZkZWYgQU5TSV9QUk9UT1RZUEVTCiAg dmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CiNlbHNlCiAgVGNsX0RTdHJpbmcgKmRzcDsKICBj aGFyICpmb3JtYXQ7CgogIHZhX3N0YXJ0IChhcmdzKTsKICBkc3AgPSB2YV9hcmcgKGFyZ3Ms IFRjbF9EU3RyaW5nICopOwogIGZvcm1hdCA9IHZhX2FyZyAoYXJncywgY2hhciAqKTsKI2Vu ZGlmCgogIHZzcHJpbnRmIChidWYsIGZvcm1hdCwgYXJncyk7CgogIFRjbF9EU3RyaW5nQXBw ZW5kRWxlbWVudCAoZHNwLCBidWYpOwp9CgpzdGF0aWMgaW50CmdkYl9wYXRoX2NvbnYgKGNs aWVudERhdGEsIGludGVycCwgYXJnYywgYXJndikKICAgICBDbGllbnREYXRhIGNsaWVudERh dGE7CiAgICAgVGNsX0ludGVycCAqaW50ZXJwOwogICAgIGludCBhcmdjOwogICAgIGNoYXIg KmFyZ3ZbXTsKewojaWZkZWYgV0lOTlQKICBjaGFyIHBhdGhuYW1lWzI1Nl0sICpwdHI7CiAg aWYgKGFyZ2MgIT0gMikKICAgIGVycm9yICgid3JvbmcgIyBhcmdzIik7CiAgY3lnd2luMzJf Y29udl90b19mdWxsX3dpbjMyX3BhdGggKGFyZ3ZbMV0sIHBhdGhuYW1lKTsKICBmb3IgKHB0 ciA9IHBhdGhuYW1lOyAqcHRyOyBwdHIrKykKICAgIHsKICAgICAgaWYgKCpwdHIgPT0gJ1xc JykKCSpwdHIgPSAnLyc7CiAgICB9CiNlbHNlCiAgY2hhciAqcGF0aG5hbWUgPSBhcmd2WzFd OwojZW5kaWYKICBUY2xfRFN0cmluZ0FwcGVuZCAocmVzdWx0X3B0ciwgcGF0aG5hbWUsIHN0 cmxlbihwYXRobmFtZSkpOwogIHJldHVybiBUQ0xfT0s7Cn0KCnN0YXRpYyBpbnQKZ2RiX2dl dF9icmVha3BvaW50X2xpc3QgKGNsaWVudERhdGEsIGludGVycCwgYXJnYywgYXJndikKICAg ICBDbGllbnREYXRhIGNsaWVudERhdGE7CiAgICAgVGNsX0ludGVycCAqaW50ZXJwOwogICAg IGludCBhcmdjOwogICAgIGNoYXIgKmFyZ3ZbXTsKewogIHN0cnVjdCBicmVha3BvaW50ICpi OwogIGV4dGVybiBzdHJ1Y3QgYnJlYWtwb2ludCAqYnJlYWtwb2ludF9jaGFpbjsKCiAgaWYg KGFyZ2MgIT0gMSkKICAgIGVycm9yICgid3JvbmcgIyBhcmdzIik7CgogIGZvciAoYiA9IGJy ZWFrcG9pbnRfY2hhaW47IGI7IGIgPSBiLT5uZXh0KQogICAgaWYgKGItPnR5cGUgPT0gYnBf YnJlYWtwb2ludCkKICAgICAgZHNwcmludGZfYXBwZW5kX2VsZW1lbnQgKHJlc3VsdF9wdHIs ICIlZCIsIGItPm51bWJlcik7CgogIHJldHVybiBUQ0xfT0s7Cn0KCnN0YXRpYyBpbnQKZ2Ri X2dldF9icmVha3BvaW50X2luZm8gKGNsaWVudERhdGEsIGludGVycCwgYXJnYywgYXJndikK ICAgICBDbGllbnREYXRhIGNsaWVudERhdGE7CiAgICAgVGNsX0ludGVycCAqaW50ZXJwOwog ICAgIGludCBhcmdjOwogICAgIGNoYXIgKmFyZ3ZbXTsKewogIHN0cnVjdCBzeW10YWJfYW5k X2xpbmUgc2FsOwogIHN0YXRpYyBjaGFyICpicHR5cGVzW10gPSB7ImJyZWFrcG9pbnQiLCAi aGFyZHdhcmUgYnJlYWtwb2ludCIsICJ1bnRpbCIsCgkJCSAgICAgICJmaW5pc2giLCAid2F0 Y2hwb2ludCIsICJoYXJkd2FyZSB3YXRjaHBvaW50IiwKCQkJICAgICAgInJlYWQgd2F0Y2hw b2ludCIsICJhY2Nlc3Mgd2F0Y2hwb2ludCIsCgkJCSAgICAgICJsb25nam1wIiwgImxvbmdq bXAgcmVzdW1lIiwgInN0ZXAgcmVzdW1lIiwKCQkJICAgICAgInRocm91Z2ggc2lndHJhbXAi LCAid2F0Y2hwb2ludCBzY29wZSIsCgkJCSAgICAgICJjYWxsIGR1bW15IiB9OwogIHN0YXRp YyBjaGFyICpicGRpc3BbXSA9IHsiZGVsZXRlIiwgImRpc2FibGUiLCAiZG9udHRvdWNoIn07 CiAgc3RydWN0IGNvbW1hbmRfbGluZSAqY21kOwogIGludCBicG51bTsKICBzdHJ1Y3QgYnJl YWtwb2ludCAqYjsKICBleHRlcm4gc3RydWN0IGJyZWFrcG9pbnQgKmJyZWFrcG9pbnRfY2hh aW47CgogIGlmIChhcmdjICE9IDIpCiAgICBlcnJvciAoIndyb25nICMgYXJncyIpOwoKICBi cG51bSA9IGF0b2kgKGFyZ3ZbMV0pOwoKICBmb3IgKGIgPSBicmVha3BvaW50X2NoYWluOyBi OyBiID0gYi0+bmV4dCkKICAgIGlmIChiLT5udW1iZXIgPT0gYnBudW0pCiAgICAgIGJyZWFr OwoKICBpZiAoIWIgfHwgYi0+dHlwZSAhPSBicF9icmVha3BvaW50KQogICAgZXJyb3IgKCJC cmVha3BvaW50ICMlZCBkb2VzIG5vdCBleGlzdCIsIGJwbnVtKTsKCiAgc2FsID0gZmluZF9w Y19saW5lIChiLT5hZGRyZXNzLCAwKTsKCiAgVGNsX0RTdHJpbmdBcHBlbmRFbGVtZW50IChy ZXN1bHRfcHRyLCBzeW10YWJfdG9fZmlsZW5hbWUgKHNhbC5zeW10YWIpKTsKICBkc3ByaW50 Zl9hcHBlbmRfZWxlbWVudCAocmVzdWx0X3B0ciwgIiVkIiwgc2FsLmxpbmUpOwogIGRzcHJp bnRmX2FwcGVuZF9lbGVtZW50IChyZXN1bHRfcHRyLCAiMHglbHgiLCBiLT5hZGRyZXNzKTsK ICBUY2xfRFN0cmluZ0FwcGVuZEVsZW1lbnQgKHJlc3VsdF9wdHIsIGJwdHlwZXNbYi0+dHlw ZV0pOwogIFRjbF9EU3RyaW5nQXBwZW5kRWxlbWVudCAocmVzdWx0X3B0ciwgYi0+ZW5hYmxl ID09IGVuYWJsZWQgPyAiMSIgOiAiMCIpOwogIFRjbF9EU3RyaW5nQXBwZW5kRWxlbWVudCAo cmVzdWx0X3B0ciwgYnBkaXNwW2ItPmRpc3Bvc2l0aW9uXSk7CiAgZHNwcmludGZfYXBwZW5k X2VsZW1lbnQgKHJlc3VsdF9wdHIsICIlZCIsIGItPnNpbGVudCk7CiAgZHNwcmludGZfYXBw ZW5kX2VsZW1lbnQgKHJlc3VsdF9wdHIsICIlZCIsIGItPmlnbm9yZV9jb3VudCk7CgogIFRj bF9EU3RyaW5nU3RhcnRTdWJsaXN0IChyZXN1bHRfcHRyKTsKICBmb3IgKGNtZCA9IGItPmNv bW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkKICAgIFRjbF9EU3RyaW5nQXBwZW5kRWxl bWVudCAocmVzdWx0X3B0ciwgY21kLT5saW5lKTsKICBUY2xfRFN0cmluZ0VuZFN1Ymxpc3Qg KHJlc3VsdF9wdHIpOwoKICBUY2xfRFN0cmluZ0FwcGVuZEVsZW1lbnQgKHJlc3VsdF9wdHIs IGItPmNvbmRfc3RyaW5nKTsKCiAgZHNwcmludGZfYXBwZW5kX2VsZW1lbnQgKHJlc3VsdF9w dHIsICIlZCIsIGItPnRocmVhZCk7CiAgZHNwcmludGZfYXBwZW5kX2VsZW1lbnQgKHJlc3Vs dF9wdHIsICIlZCIsIGItPmhpdF9jb3VudCk7CgogIHJldHVybiBUQ0xfT0s7Cn0KCnN0YXRp YyB2b2lkCmJyZWFrcG9pbnRfbm90aWZ5KGIsIGFjdGlvbikKICAgICBzdHJ1Y3QgYnJlYWtw b2ludCAqYjsKICAgICBjb25zdCBjaGFyICphY3Rpb247CnsKICBjaGFyIGJ1ZlsxMDBdOwog IGludCB2OwoKICBpZiAoYi0+dHlwZSAhPSBicF9icmVha3BvaW50KQogICAgcmV0dXJuOwoK ICAvKiBXZSBlbnN1cmUgdGhhdCBBQ1RJT04gY29udGFpbnMgbm8gc3BlY2lhbCBUY2wgY2hh cmFjdGVycywgc28gd2UKICAgICBjYW4gZG8gdGhpcy4gICovCiAgc3ByaW50ZiAoYnVmLCAi Z2RidGtfdGNsX2JyZWFrcG9pbnQgJXMgJWQiLCBhY3Rpb24sIGItPm51bWJlcik7CgogIHYg PSBUY2xfRXZhbCAoaW50ZXJwLCBidWYpOwoKICBpZiAodiAhPSBUQ0xfT0spCiAgICB7CiAg ICAgIGdkYnRrX2ZwdXRzIChpbnRlcnAtPnJlc3VsdCwgZ2RiX3N0ZG91dCk7CiAgICAgIGdk YnRrX2ZwdXRzICgiXG4iLCBnZGJfc3Rkb3V0KTsKICAgIH0KfQoKc3RhdGljIHZvaWQKZ2Ri dGtfY3JlYXRlX2JyZWFrcG9pbnQoYikKICAgICBzdHJ1Y3QgYnJlYWtwb2ludCAqYjsKewog IGJyZWFrcG9pbnRfbm90aWZ5IChiLCAiY3JlYXRlIik7Cn0KCnN0YXRpYyB2b2lkCmdkYnRr X2RlbGV0ZV9icmVha3BvaW50KGIpCiAgICAgc3RydWN0IGJyZWFrcG9pbnQgKmI7CnsKICBi cmVha3BvaW50X25vdGlmeSAoYiwgImRlbGV0ZSIpOwp9CgpzdGF0aWMgdm9pZApnZGJ0a19t b2RpZnlfYnJlYWtwb2ludChiKQogICAgIHN0cnVjdCBicmVha3BvaW50ICpiOwp7CiAgYnJl YWtwb2ludF9ub3RpZnkgKGIsICJtb2RpZnkiKTsKfQoMCi8qIFRoaXMgaW1wbGVtZW50cyB0 aGUgVENMIGNvbW1hbmQgYGdkYl9sb2MnLCB3aGljaCByZXR1cm5zIGEgbGlzdCBjb25zaXN0 aW5nCiAgIG9mIHRoZSBzb3VyY2UgYW5kIGxpbmUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0 aGUgY3VycmVudCBwYy4gKi8KCnN0YXRpYyBpbnQKZ2RiX2xvYyAoY2xpZW50RGF0YSwgaW50 ZXJwLCBhcmdjLCBhcmd2KQogICAgIENsaWVudERhdGEgY2xpZW50RGF0YTsKICAgICBUY2xf SW50ZXJwICppbnRlcnA7CiAgICAgaW50IGFyZ2M7CiAgICAgY2hhciAqYXJndltdOwp7CiAg Y2hhciAqZmlsZW5hbWU7CiAgc3RydWN0IHN5bXRhYl9hbmRfbGluZSBzYWw7CiAgY2hhciAq ZnVuY25hbWU7CiAgQ09SRV9BRERSIHBjOwoKICBpZiAoYXJnYyA9PSAxKQogICAgewogICAg ICBwYyA9IHNlbGVjdGVkX2ZyYW1lID8gc2VsZWN0ZWRfZnJhbWUtPnBjIDogc3RvcF9wYzsK ICAgICAgc2FsID0gZmluZF9wY19saW5lIChwYywgMCk7CiAgICB9CiAgZWxzZSBpZiAoYXJn YyA9PSAyKQogICAgewogICAgICBzdHJ1Y3Qgc3ltdGFic19hbmRfbGluZXMgc2FsczsKICAg ICAgaW50IG5lbHRzOwoKICAgICAgc2FscyA9IGRlY29kZV9saW5lX3NwZWMgKGFyZ3ZbMV0s IDEpOwoKICAgICAgbmVsdHMgPSBzYWxzLm5lbHRzOwogICAgICBzYWwgPSBzYWxzLnNhbHNb MF07CiAgICAgIGZyZWUgKHNhbHMuc2Fscyk7CgogICAgICBpZiAoc2Fscy5uZWx0cyAhPSAx KQoJZXJyb3IgKCJBbWJpZ3VvdXMgbGluZSBzcGVjIik7CgogICAgICBwYyA9IHNhbC5wYzsK ICAgIH0KICBlbHNlCiAgICBlcnJvciAoIndyb25nICMgYXJncyIpOwoKICBpZiAoc2FsLnN5 bXRhYikKICAgIFRjbF9EU3RyaW5nQXBwZW5kRWxlbWVudCAocmVzdWx0X3B0ciwgc2FsLnN5 bXRhYi0+ZmlsZW5hbWUpOwogIGVsc2UKICAgIFRjbF9EU3RyaW5nQXBwZW5kRWxlbWVudCAo cmVzdWx0X3B0ciwgIiIpOwoKICBmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24gKHBjLCAmZnVu Y25hbWUsIE5VTEwsIE5VTEwpOwogIFRjbF9EU3RyaW5nQXBwZW5kRWxlbWVudCAocmVzdWx0 X3B0ciwgZnVuY25hbWUpOwoKICBmaWxlbmFtZSA9IHN5bXRhYl90b19maWxlbmFtZSAoc2Fs LnN5bXRhYik7CiAgVGNsX0RTdHJpbmdBcHBlbmRFbGVtZW50IChyZXN1bHRfcHRyLCBmaWxl bmFtZSk7CgogIGRzcHJpbnRmX2FwcGVuZF9lbGVtZW50IChyZXN1bHRfcHRyLCAiJWQiLCBz YWwubGluZSk7IC8qIGxpbmUgbnVtYmVyICovCgogIGRzcHJpbnRmX2FwcGVuZF9lbGVtZW50 IChyZXN1bHRfcHRyLCAiMHglcyIsIHBhZGRyX256KHBjKSk7IC8qIFBDICovCgogIHJldHVy biBUQ0xfT0s7Cn0KDAovKiBUaGlzIGltcGxlbWVudHMgdGhlIFRDTCBjb21tYW5kIGBnZGJf ZXZhbCcuICovCgpzdGF0aWMgaW50CmdkYl9ldmFsIChjbGllbnREYXRhLCBpbnRlcnAsIGFy Z2MsIGFyZ3YpCiAgICAgQ2xpZW50RGF0YSBjbGllbnREYXRhOwogICAgIFRjbF9JbnRlcnAg KmludGVycDsKICAgICBpbnQgYXJnYzsKICAgICBjaGFyICphcmd2W107CnsKICBzdHJ1Y3Qg ZXhwcmVzc2lvbiAqZXhwcjsKICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NoYWluOwogIHZhbHVl X3B0ciB2YWw7CgogIGlmIChhcmdjICE9IDIpCiAgICBlcnJvciAoIndyb25nICMgYXJncyIp OwoKICBleHByID0gcGFyc2VfZXhwcmVzc2lvbiAoYXJndlsxXSk7CgogIG9sZF9jaGFpbiA9 IG1ha2VfY2xlYW51cCAoZnJlZV9jdXJyZW50X2NvbnRlbnRzLCAmZXhwcik7CgogIHZhbCA9 IGV2YWx1YXRlX2V4cHJlc3Npb24gKGV4cHIpOwoKICB2YWxfcHJpbnQgKFZBTFVFX1RZUEUg KHZhbCksIFZBTFVFX0NPTlRFTlRTICh2YWwpLCBWQUxVRV9BRERSRVNTICh2YWwpLAoJICAg ICBnZGJfc3Rkb3V0LCAwLCAwLCAwLCAwKTsKCiAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7 CgogIHJldHVybiBUQ0xfT0s7Cn0KDAovKiBUaGlzIGltcGxlbWVudHMgdGhlIFRDTCBjb21t YW5kIGBnZGJfc291cmNlbGluZXMnLCB3aGljaCByZXR1cm5zIGEgbGlzdCBvZgogICBhbGwg b2YgdGhlIGxpbmVzIGNvbnRhaW5pbmcgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgc3BlY2lm aWVkIHNvdXJjZSBmaWxlCiAgIChpZTogbGluZXMgd2hlcmUgeW91IGNhbiBwdXQgYnJlYWtw b2ludHMpLiAqLwoKc3RhdGljIGludApnZGJfc291cmNlbGluZXMgKGNsaWVudERhdGEsIGlu dGVycCwgYXJnYywgYXJndikKICAgICBDbGllbnREYXRhIGNsaWVudERhdGE7CiAgICAgVGNs X0ludGVycCAqaW50ZXJwOwogICAgIGludCBhcmdjOwogICAgIGNoYXIgKmFyZ3ZbXTsKewog IHN0cnVjdCBzeW10YWIgKnN5bXRhYjsKICBzdHJ1Y3QgbGluZXRhYmxlX2VudHJ5ICpsZTsK ICBpbnQgbmxpbmVzOwoKICBpZiAoYXJnYyAhPSAyKQogICAgZXJyb3IgKCJ3cm9uZyAjIGFy Z3MiKTsKCiAgc3ltdGFiID0gbG9va3VwX3N5bXRhYiAoYXJndlsxXSk7CgogIGlmICghc3lt dGFiKQogICAgZXJyb3IgKCJObyBzdWNoIGZpbGUiKTsKCiAgLyogSWYgdGhlcmUncyBubyBs aW5ldGFibGUsIG9yIG5vIGVudHJpZXMsIHRoZW4gd2UgYXJlIGRvbmUuICovCgogIGlmICgh c3ltdGFiLT5saW5ldGFibGUKICAgICAgfHwgc3ltdGFiLT5saW5ldGFibGUtPm5pdGVtcyA9 PSAwKQogICAgewogICAgICBUY2xfRFN0cmluZ0FwcGVuZEVsZW1lbnQgKHJlc3VsdF9wdHIs ICIiKTsKICAgICAgcmV0dXJuIFRDTF9PSzsKICAgIH0KCiAgbGUgPSBzeW10YWItPmxpbmV0 YWJsZS0+aXRlbTsKICBubGluZXMgPSBzeW10YWItPmxpbmV0YWJsZS0+bml0ZW1zOwoKICBm b3IgKDtubGluZXMgPiAwOyBubGluZXMtLSwgbGUrKykKICAgIHsKICAgICAgLyogSWYgdGhl IHBjIG9mIHRoaXMgbGluZSBpcyB0aGUgc2FtZSBhcyB0aGUgcGMgb2YgdGhlIG5leHQgbGlu ZSwgdGhlbgoJIGp1c3Qgc2tpcCBpdC4gICovCiAgICAgIGlmIChubGluZXMgPiAxCgkgICYm IGxlLT5wYyA9PSAobGUgKyAxKS0+cGMpCgljb250aW51ZTsKCiAgICAgIGRzcHJpbnRmX2Fw cGVuZF9lbGVtZW50IChyZXN1bHRfcHRyLCAiJWQiLCBsZS0+bGluZSk7CiAgICB9CgogIHJl dHVybiBUQ0xfT0s7Cn0KDApzdGF0aWMgaW50Cm1hcF9hcmdfcmVnaXN0ZXJzIChhcmdjLCBh cmd2LCBmdW5jLCBhcmdwKQogICAgIGludCBhcmdjOwogICAgIGNoYXIgKmFyZ3ZbXTsKICAg ICB2b2lkICgqZnVuYykgUEFSQU1TICgoaW50IHJlZ251bSwgdm9pZCAqYXJncCkpOwogICAg IHZvaWQgKmFyZ3A7CnsKICBpbnQgcmVnbnVtOwoKICAvKiBOb3RlIHRoYXQgdGhlIHRlc3Qg Zm9yIGEgdmFsaWQgcmVnaXN0ZXIgbXVzdCBpbmNsdWRlIGNoZWNraW5nIHRoZQogICAgIHJl Z19uYW1lcyBhcnJheSBiZWNhdXNlIE5VTV9SRUdTIG1heSBiZSBhbGxvY2F0ZWQgZm9yIHRo ZSB1bmlvbiBvZiB0aGUKICAgICByZWdpc3RlciBzZXRzIHdpdGhpbiBhIGZhbWlseSBvZiBy ZWxhdGVkIHByb2Nlc3NvcnMuICBJbiB0aGlzIGNhc2UsIHRoZQogICAgIHRyYWlsaW5nIGVu dHJpZXMgb2YgcmVnX25hbWVzIHdpbGwgY2hhbmdlIGRlcGVuZGluZyB1cG9uIHRoZSBwYXJ0 aWN1bGFyCiAgICAgcHJvY2Vzc29yIGJlaW5nIGRlYnVnZ2VkLiAgKi8KCiAgaWYgKGFyZ2Mg PT0gMCkJCS8qIE5vIGFyZ3MsIGp1c3QgZG8gYWxsIHRoZSByZWdzICovCiAgICB7CiAgICAg IGZvciAocmVnbnVtID0gMDsKCSAgIHJlZ251bSA8IE5VTV9SRUdTCgkgICAmJiByZWdfbmFt ZXNbcmVnbnVtXSAhPSBOVUxMCgkgICAmJiAqcmVnX25hbWVzW3JlZ251bV0gIT0gJ1wwMDAn OwoJICAgcmVnbnVtKyspCglmdW5jIChyZWdudW0sIGFyZ3ApOwoKICAgICAgcmV0dXJuIFRD TF9PSzsKICAgIH0KCiAgLyogRWxzZSwgbGlzdCBvZiByZWdpc3RlciAjcywganVzdCBkbyBs aXN0ZWQgcmVncyAqLwogIGZvciAoOyBhcmdjID4gMDsgYXJnYy0tLCBhcmd2KyspCiAgICB7 CiAgICAgIHJlZ251bSA9IGF0b2kgKCphcmd2KTsKCiAgICAgIGlmIChyZWdudW0gPj0gMAoJ ICAmJiByZWdudW0gPCBOVU1fUkVHUwoJICAmJiByZWdfbmFtZXNbcmVnbnVtXSAhPSBOVUxM CgkgICYmICpyZWdfbmFtZXNbcmVnbnVtXSAhPSAnXDAwMCcpCglmdW5jIChyZWdudW0sIGFy Z3ApOwogICAgICBlbHNlCgllcnJvciAoImJhZCByZWdpc3RlciBudW1iZXIiKTsKICAgIH0K CiAgcmV0dXJuIFRDTF9PSzsKfQoKc3RhdGljIHZvaWQKZ2V0X3JlZ2lzdGVyX25hbWUgKHJl Z251bSwgYXJncCkKICAgICBpbnQgcmVnbnVtOwogICAgIHZvaWQgKmFyZ3A7CQkvKiBJZ25v cmVkICovCnsKICBUY2xfRFN0cmluZ0FwcGVuZEVsZW1lbnQgKHJlc3VsdF9wdHIsIHJlZ19u YW1lc1tyZWdudW1dKTsKfQoKLyogVGhpcyBpbXBsZW1lbnRzIHRoZSBUQ0wgY29tbWFuZCBg Z2RiX3JlZ25hbWVzJywgd2hpY2ggcmV0dXJucyBhIGxpc3Qgb2YKICAgYWxsIG9mIHRoZSBy ZWdpc3RlciBuYW1lcy4gKi8KCnN0YXRpYyBpbnQKZ2RiX3JlZ25hbWVzIChjbGllbnREYXRh LCBpbnRlcnAsIGFyZ2MsIGFyZ3YpCiAgICAgQ2xpZW50RGF0YSBjbGllbnREYXRhOwogICAg IFRjbF9JbnRlcnAgKmludGVycDsKICAgICBpbnQgYXJnYzsKICAgICBjaGFyICphcmd2W107 CnsKICBhcmdjLS07CiAgYXJndisrOwoKICByZXR1cm4gbWFwX2FyZ19yZWdpc3RlcnMgKGFy Z2MsIGFyZ3YsIGdldF9yZWdpc3Rlcl9uYW1lLCBOVUxMKTsKfQoKI2lmbmRlZiBSRUdJU1RF Ul9DT05WRVJUSUJMRQojZGVmaW5lIFJFR0lTVEVSX0NPTlZFUlRJQkxFKHgpICgwICE9IDAp CiNlbmRpZgoKI2lmbmRlZiBSRUdJU1RFUl9DT05WRVJUX1RPX1ZJUlRVQUwKI2RlZmluZSBS RUdJU1RFUl9DT05WRVJUX1RPX1ZJUlRVQUwoeCwgeSwgeiwgYSkKI2VuZGlmCgojaWZuZGVm IElOVkFMSURfRkxPQVQKI2RlZmluZSBJTlZBTElEX0ZMT0FUKHgsIHkpICgwICE9IDApCiNl bmRpZgoKc3RhdGljIHZvaWQKZ2V0X3JlZ2lzdGVyIChyZWdudW0sIGZwKQogICAgIGludCBy ZWdudW07CiAgICAgdm9pZCAqZnA7CnsKICBjaGFyIHJhd19idWZmZXJbTUFYX1JFR0lTVEVS X1JBV19TSVpFXTsKICBjaGFyIHZpcnR1YWxfYnVmZmVyW01BWF9SRUdJU1RFUl9WSVJUVUFM X1NJWkVdOwogIGludCBmb3JtYXQgPSAoaW50KWZwOwoKICBpZiAocmVhZF9yZWxhdGl2ZV9y ZWdpc3Rlcl9yYXdfYnl0ZXMgKHJlZ251bSwgcmF3X2J1ZmZlcikpCiAgICB7CiAgICAgIFRj bF9EU3RyaW5nQXBwZW5kRWxlbWVudCAocmVzdWx0X3B0ciwgIk9wdGltaXplZCBvdXQiKTsK ICAgICAgcmV0dXJuOwogICAgfQoKICAvKiBDb252ZXJ0IHJhdyBkYXRhIHRvIHZpcnR1YWwg Zm9ybWF0IGlmIG5lY2Vzc2FyeS4gICovCgogIGlmIChSRUdJU1RFUl9DT05WRVJUSUJMRSAo cmVnbnVtKSkKICAgIHsKICAgICAgUkVHSVNURVJfQ09OVkVSVF9UT19WSVJUVUFMIChyZWdu dW0sIFJFR0lTVEVSX1ZJUlRVQUxfVFlQRSAocmVnbnVtKSwKCQkJCSAgIHJhd19idWZmZXIs IHZpcnR1YWxfYnVmZmVyKTsKICAgIH0KICBlbHNlCiAgICBtZW1jcHkgKHZpcnR1YWxfYnVm ZmVyLCByYXdfYnVmZmVyLCBSRUdJU1RFUl9WSVJUVUFMX1NJWkUgKHJlZ251bSkpOwoKICBp ZiAoZm9ybWF0ID09ICdyJykKICAgIHsKICAgICAgaW50IGo7CiAgICAgIHByaW50Zl9maWx0 ZXJlZCAoIjB4Iik7CiAgICAgIGZvciAoaiA9IDA7IGogPCBSRUdJU1RFUl9SQVdfU0laRSAo cmVnbnVtKTsgaisrKQoJewoJICByZWdpc3RlciBpbnQgaWR4ID0gVEFSR0VUX0JZVEVfT1JE RVIgPT0gQklHX0VORElBTiA/IGoKCSAgICA6IFJFR0lTVEVSX1JBV19TSVpFIChyZWdudW0p IC0gMSAtIGo7CgkgIHByaW50Zl9maWx0ZXJlZCAoIiUwMngiLCAodW5zaWduZWQgY2hhcily YXdfYnVmZmVyW2lkeF0pOwoJfQogICAgfQogIGVsc2UKICAgIHZhbF9wcmludCAoUkVHSVNU RVJfVklSVFVBTF9UWVBFIChyZWdudW0pLCB2aXJ0dWFsX2J1ZmZlciwgMCwKCSAgICAgICBn ZGJfc3Rkb3V0LCBmb3JtYXQsIDEsIDAsIFZhbF9wcmV0dHlfZGVmYXVsdCk7CgogIFRjbF9E U3RyaW5nQXBwZW5kIChyZXN1bHRfcHRyLCAiICIsIC0xKTsKfQoKc3RhdGljIGludApnZGJf ZmV0Y2hfcmVnaXN0ZXJzIChjbGllbnREYXRhLCBpbnRlcnAsIGFyZ2MsIGFyZ3YpCiAgICAg Q2xpZW50RGF0YSBjbGllbnREYXRhOwogICAgIFRjbF9JbnRlcnAgKmludGVycDsKICAgICBp bnQgYXJnYzsKICAgICBjaGFyICphcmd2W107CnsKICBpbnQgZm9ybWF0OwoKICBpZiAoYXJn YyA8IDIpCiAgICBlcnJvciAoIndyb25nICMgYXJncyIpOwoKICBhcmdjLS07CiAgYXJndisr OwoKICBhcmdjLS07CiAgZm9ybWF0ID0gKiphcmd2Kys7CgogIHJldHVybiBtYXBfYXJnX3Jl Z2lzdGVycyAoYXJnYywgYXJndiwgZ2V0X3JlZ2lzdGVyLCAodm9pZCAqKSBmb3JtYXQpOwp9 CgovKiBUaGlzIGNvbnRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZXMgb2YgdGhlIHJlZ2lzdGVy cywgc2luY2UgdGhlIGxhc3QgY2FsbCB0bwogICBnZGJfY2hhbmdlZF9yZWdpc3Rlcl9saXN0 LiAgKi8KCnN0YXRpYyBjaGFyIG9sZF9yZWdzW1JFR0lTVEVSX0JZVEVTXTsKCnN0YXRpYyB2 b2lkCnJlZ2lzdGVyX2NoYW5nZWRfcCAocmVnbnVtLCBhcmdwKQogICAgIGludCByZWdudW07 CiAgICAgdm9pZCAqYXJncDsJCS8qIElnbm9yZWQgKi8KewogIGNoYXIgcmF3X2J1ZmZlcltN QVhfUkVHSVNURVJfUkFXX1NJWkVdOwoKICBpZiAocmVhZF9yZWxhdGl2ZV9yZWdpc3Rlcl9y YXdfYnl0ZXMgKHJlZ251bSwgcmF3X2J1ZmZlcikpCiAgICByZXR1cm47CgogIGlmIChtZW1j bXAgKCZvbGRfcmVnc1tSRUdJU1RFUl9CWVRFIChyZWdudW0pXSwgcmF3X2J1ZmZlciwKCSAg ICAgIFJFR0lTVEVSX1JBV19TSVpFIChyZWdudW0pKSA9PSAwKQogICAgcmV0dXJuOwoKICAv KiBGb3VuZCBhIGNoYW5nZWQgcmVnaXN0ZXIuICBTYXZlIG5ldyB2YWx1ZSBhbmQgcmV0dXJu IGl0cyBudW1iZXIuICovCgogIG1lbWNweSAoJm9sZF9yZWdzW1JFR0lTVEVSX0JZVEUgKHJl Z251bSldLCByYXdfYnVmZmVyLAoJICBSRUdJU1RFUl9SQVdfU0laRSAocmVnbnVtKSk7Cgog IGRzcHJpbnRmX2FwcGVuZF9lbGVtZW50IChyZXN1bHRfcHRyLCAiJWQiLCByZWdudW0pOwp9 CgpzdGF0aWMgaW50CmdkYl9jaGFuZ2VkX3JlZ2lzdGVyX2xpc3QgKGNsaWVudERhdGEsIGlu dGVycCwgYXJnYywgYXJndikKICAgICBDbGllbnREYXRhIGNsaWVudERhdGE7CiAgICAgVGNs X0ludGVycCAqaW50ZXJwOwogICAgIGludCBhcmdjOwogICAgIGNoYXIgKmFyZ3ZbXTsKewog IGFyZ2MtLTsKICBhcmd2Kys7CgogIHJldHVybiBtYXBfYXJnX3JlZ2lzdGVycyAoYXJnYywg YXJndiwgcmVnaXN0ZXJfY2hhbmdlZF9wLCBOVUxMKTsKfQoMCi8qIFRoaXMgaW1wbGVtZW50 cyB0aGUgVENMIGNvbW1hbmQgYGdkYl9jbWQnLCB3aGljaCBzZW5kcyBpdHMgYXJndW1lbnQg aW50bwogICB0aGUgR0RCIGNvbW1hbmQgc2Nhbm5lci4gICovCgpzdGF0aWMgaW50CmdkYl9j bWQgKGNsaWVudERhdGEsIGludGVycCwgYXJnYywgYXJndikKICAgICBDbGllbnREYXRhIGNs aWVudERhdGE7CiAgICAgVGNsX0ludGVycCAqaW50ZXJwOwogICAgIGludCBhcmdjOwogICAg IGNoYXIgKmFyZ3ZbXTsKewogIGlmIChhcmdjICE9IDIpCiAgICBlcnJvciAoIndyb25nICMg YXJncyIpOwoKICBpZiAocnVubmluZ19ub3cpCiAgICByZXR1cm4gVENMX09LOwoKICBleGVj dXRlX2NvbW1hbmQgKGFyZ3ZbMV0sIDEpOwoKICBicHN0YXRfZG9fYWN0aW9ucyAoJnN0b3Bf YnBzdGF0KTsKCiAgcmV0dXJuIFRDTF9PSzsKfQoKLyogVGhpcyByb3V0aW5lIGFjdHMgYXMg YSB0b3AtbGV2ZWwgZm9yIGFsbCBHREIgY29kZSBjYWxsZWQgYnkgdGNsL1RrLiAgSXQKICAg aGFuZGxlcyBjbGVhbnVwcywgYW5kIGNhbGxzIHRvIHJldHVybl90b190b3BfbGV2ZWwgKHVz dWFsbHkgdmlhIGVycm9yKS4KICAgVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcHJl dmVudCBhIGxvbmdqbXAgb3V0IG9mIHRoZSBib3dlbHMgb2YgVGssCiAgIHBvc3NpYmx5IGxl YXZpbmcgdGhpbmdzIGluIGEgYmFkIHN0YXRlLiAgU2luY2UgdGhpcyByb3V0aW5lIGNhbiBi ZSBjYWxsZWQKICAgcmVjdXJzaXZlbHksIGl0IG5lZWRzIHRvIHNhdmUgYW5kIHJlc3RvcmUg dGhlIGNvbnRlbnRzIG9mIHRoZSBqbXBfYnVmIGFzCiAgIG5lY2Vzc2FyeS4gICovCgpzdGF0 aWMgaW50CmNhbGxfd3JhcHBlciAoY2xpZW50RGF0YSwgaW50ZXJwLCBhcmdjLCBhcmd2KQog ICAgIENsaWVudERhdGEgY2xpZW50RGF0YTsKICAgICBUY2xfSW50ZXJwICppbnRlcnA7CiAg ICAgaW50IGFyZ2M7CiAgICAgY2hhciAqYXJndltdOwp7CiAgaW50IHZhbDsKICBzdHJ1Y3Qg Y2xlYW51cCAqc2F2ZWRfY2xlYW51cF9jaGFpbjsKICBUY2xfQ21kUHJvYyAqZnVuYzsKICBq bXBfYnVmIHNhdmVkX2Vycm9yX3JldHVybjsKICBUY2xfRFN0cmluZyByZXN1bHQsICpvbGRf cmVzdWx0X3B0cjsKCiAgVGNsX0RTdHJpbmdJbml0ICgmcmVzdWx0KTsKICBvbGRfcmVzdWx0 X3B0ciA9IHJlc3VsdF9wdHI7CiAgcmVzdWx0X3B0ciA9ICZyZXN1bHQ7CgogIGZ1bmMgPSAo VGNsX0NtZFByb2MgKiljbGllbnREYXRhOwogIG1lbWNweSAoc2F2ZWRfZXJyb3JfcmV0dXJu LCBlcnJvcl9yZXR1cm4sIHNpemVvZiAoam1wX2J1ZikpOwoKICBzYXZlZF9jbGVhbnVwX2No YWluID0gc2F2ZV9jbGVhbnVwcyAoKTsKCiAgaWYgKCFzZXRqbXAgKGVycm9yX3JldHVybikp CiAgICB2YWwgPSBmdW5jIChjbGllbnREYXRhLCBpbnRlcnAsIGFyZ2MsIGFyZ3YpOwogIGVs c2UKICAgIHsKICAgICAgdmFsID0gVENMX0VSUk9SOwkJLyogRmxhZyBhbiBlcnJvciBmb3Ig VENMICovCgogICAgICBnZGJfZmx1c2ggKGdkYl9zdGRlcnIpOwkvKiBGbHVzaCBlcnJvciBv dXRwdXQgKi8KCiAgICAgIGdkYl9mbHVzaCAoZ2RiX3N0ZG91dCk7CS8qIFNvbWV0aW1lcyBl cnJvciBvdXRwdXQgY29tZXMgaGVyZSBhcyB3ZWxsICovCgogICAgICAvKiBJbiBjYXNlIG9m IGFuIGVycm9yLCB3ZSBtYXkgbmVlZCB0byBmb3JjZSB0aGUgR1VJIGludG8gaWRsZQoJIG1v ZGUgYmVjYXVzZSBnZGJ0a19jYWxsX2NvbW1hbmQgbWF5IGhhdmUgYm9tYmVkIG91dCB3aGls ZSBpbgoJIHRoZSBjb21tYW5kIHJvdXRpbmUuICAqLwoKICAgICAgcnVubmluZ19ub3cgPSAw OwogICAgICBUY2xfRXZhbCAoaW50ZXJwLCAiZ2RidGtfdGNsX2lkbGUiKTsKICAgIH0KCiAg ZG9fY2xlYW51cHMgKEFMTF9DTEVBTlVQUyk7CgogIHJlc3RvcmVfY2xlYW51cHMgKHNhdmVk X2NsZWFudXBfY2hhaW4pOwoKICBtZW1jcHkgKGVycm9yX3JldHVybiwgc2F2ZWRfZXJyb3Jf cmV0dXJuLCBzaXplb2YgKGptcF9idWYpKTsKCiAgVGNsX0RTdHJpbmdSZXN1bHQgKGludGVy cCwgJnJlc3VsdCk7CiAgcmVzdWx0X3B0ciA9IG9sZF9yZXN1bHRfcHRyOwoKICByZXR1cm4g dmFsOwp9CgpzdGF0aWMgaW50CmdkYl9saXN0ZmlsZXMgKGNsaWVudERhdGEsIGludGVycCwg YXJnYywgYXJndikKICAgICBDbGllbnREYXRhIGNsaWVudERhdGE7CiAgICAgVGNsX0ludGVy cCAqaW50ZXJwOwogICAgIGludCBhcmdjOwogICAgIGNoYXIgKmFyZ3ZbXTsKewogIHN0cnVj dCBvYmpmaWxlICpvYmpmaWxlOwogIHN0cnVjdCBwYXJ0aWFsX3N5bXRhYiAqcHN5bXRhYjsK ICBzdHJ1Y3Qgc3ltdGFiICpzeW10YWI7CgogIEFMTF9QU1lNVEFCUyAob2JqZmlsZSwgcHN5 bXRhYikKICAgIFRjbF9EU3RyaW5nQXBwZW5kRWxlbWVudCAocmVzdWx0X3B0ciwgcHN5bXRh Yi0+ZmlsZW5hbWUpOwoKICBBTExfU1lNVEFCUyAob2JqZmlsZSwgc3ltdGFiKQogICAgVGNs X0RTdHJpbmdBcHBlbmRFbGVtZW50IChyZXN1bHRfcHRyLCBzeW10YWItPmZpbGVuYW1lKTsK CiAgcmV0dXJuIFRDTF9PSzsKfQoKc3RhdGljIGludApnZGJfc3RvcCAoY2xpZW50RGF0YSwg aW50ZXJwLCBhcmdjLCBhcmd2KQogICAgIENsaWVudERhdGEgY2xpZW50RGF0YTsKICAgICBU Y2xfSW50ZXJwICppbnRlcnA7CiAgICAgaW50IGFyZ2M7CiAgICAgY2hhciAqYXJndltdOwp7 CiAgdGFyZ2V0X3N0b3AgKCk7CgogIHJldHVybiBUQ0xfT0s7Cn0KDAovKiBUaGlzIGltcGxl bWVudHMgdGhlIFRDTCBjb21tYW5kIGBnZGJfZGlzYXNzZW1ibGUnLiAgKi8KCnN0YXRpYyBp bnQKZ2RidGtfZGlzX2FzbV9yZWFkX21lbW9yeSAobWVtYWRkciwgbXlhZGRyLCBsZW4sIGlu Zm8pCiAgICAgYmZkX3ZtYSBtZW1hZGRyOwogICAgIGJmZF9ieXRlICpteWFkZHI7CiAgICAg aW50IGxlbjsKICAgICBkaXNhc3NlbWJsZV9pbmZvICppbmZvOwp7CiAgZXh0ZXJuIHN0cnVj dCB0YXJnZXRfb3BzIGV4ZWNfb3BzOwogIGludCByZXM7CgogIGVycm5vID0gMDsKICByZXMg PSB4ZmVyX21lbW9yeSAobWVtYWRkciwgbXlhZGRyLCBsZW4sIDAsICZleGVjX29wcyk7Cgog IGlmIChyZXMgPT0gbGVuKQogICAgcmV0dXJuIDA7CiAgZWxzZQogICAgaWYgKGVycm5vID09 IDApCiAgICAgIHJldHVybiBFSU87CiAgICBlbHNlCiAgICAgIHJldHVybiBlcnJubzsKfQoK LyogV2UgbmVlZCBhIGRpZmZlcmVudCBzb3J0IG9mIGxpbmUgdGFibGUgZnJvbSB0aGUgbm9y bWFsIG9uZSBjdXogd2UgY2FuJ3QKICAgZGVwZW5kIHVwb24gaW1wbGljaXQgbGluZS1lbmQg cGMncyBmb3IgbGluZXMuICBUaGlzIGlzIGJlY2F1c2Ugb2YgdGhlCiAgIHJlb3JkZXJpbmcg d2UgYXJlIGFib3V0IHRvIGRvLiAgKi8KCnN0cnVjdCBteV9saW5lX2VudHJ5IHsKICBpbnQg bGluZTsKICBDT1JFX0FERFIgc3RhcnRfcGM7CiAgQ09SRV9BRERSIGVuZF9wYzsKfTsKCnN0 YXRpYyBpbnQKY29tcGFyZV9saW5lcyAobWxlMXAsIG1sZTJwKQogICAgIGNvbnN0IFBUUiBt bGUxcDsKICAgICBjb25zdCBQVFIgbWxlMnA7CnsKICBzdHJ1Y3QgbXlfbGluZV9lbnRyeSAq bWxlMSwgKm1sZTI7CiAgaW50IHZhbDsKCiAgbWxlMSA9IChzdHJ1Y3QgbXlfbGluZV9lbnRy eSAqKSBtbGUxcDsKICBtbGUyID0gKHN0cnVjdCBteV9saW5lX2VudHJ5ICopIG1sZTJwOwoK ICB2YWwgPSAgbWxlMS0+bGluZSAtIG1sZTItPmxpbmU7CgogIGlmICh2YWwgIT0gMCkKICAg IHJldHVybiB2YWw7CgogIHJldHVybiBtbGUxLT5zdGFydF9wYyAtIG1sZTItPnN0YXJ0X3Bj Owp9CgpzdGF0aWMgaW50CmdkYl9kaXNhc3NlbWJsZSAoY2xpZW50RGF0YSwgaW50ZXJwLCBh cmdjLCBhcmd2KQogICAgIENsaWVudERhdGEgY2xpZW50RGF0YTsKICAgICBUY2xfSW50ZXJw ICppbnRlcnA7CiAgICAgaW50IGFyZ2M7CiAgICAgY2hhciAqYXJndltdOwp7CiAgQ09SRV9B RERSIHBjLCBsb3csIGhpZ2g7CiAgaW50IG1peGVkX3NvdXJjZV9hbmRfYXNzZW1ibHk7CiAg c3RhdGljIGRpc2Fzc2VtYmxlX2luZm8gZGk7CiAgc3RhdGljIGludCBkaV9pbml0aWFsaXpl ZDsKCiAgaWYgKCEgZGlfaW5pdGlhbGl6ZWQpCiAgICB7CiAgICAgIElOSVRfRElTQVNTRU1C TEVfSU5GT19OT19BUkNIIChkaSwgZ2RiX3N0ZG91dCwKCQkJCSAgICAgKGZwcmludGZfZnR5 cGUpIGZwcmludGZfdW5maWx0ZXJlZCk7CiAgICAgIGRpLmZsYXZvdXIgPSBiZmRfdGFyZ2V0 X3Vua25vd25fZmxhdm91cjsKICAgICAgZGkubWVtb3J5X2Vycm9yX2Z1bmMgPSBkaXNfYXNt X21lbW9yeV9lcnJvcjsKICAgICAgZGkucHJpbnRfYWRkcmVzc19mdW5jID0gZGlzX2FzbV9w cmludF9hZGRyZXNzOwogICAgICBkaV9pbml0aWFsaXplZCA9IDE7CiAgICB9CgogIGRpLm1h Y2ggPSB0bV9wcmludF9pbnNuX2luZm8ubWFjaDsKICBpZiAoVEFSR0VUX0JZVEVfT1JERVIg PT0gQklHX0VORElBTikKICAgIHRtX3ByaW50X2luc25faW5mby5lbmRpYW4gPSBCRkRfRU5E SUFOX0JJRzsKICBlbHNlCiAgICB0bV9wcmludF9pbnNuX2luZm8uZW5kaWFuID0gQkZEX0VO RElBTl9MSVRUTEU7CgogIGlmIChhcmdjICE9IDMgJiYgYXJnYyAhPSA0KQogICAgZXJyb3Ig KCJ3cm9uZyAjIGFyZ3MiKTsKCiAgaWYgKHN0cmNtcCAoYXJndlsxXSwgInNvdXJjZSIpID09 IDApCiAgICBtaXhlZF9zb3VyY2VfYW5kX2Fzc2VtYmx5ID0gMTsKICBlbHNlIGlmIChzdHJj bXAgKGFyZ3ZbMV0sICJub3NvdXJjZSIpID09IDApCiAgICBtaXhlZF9zb3VyY2VfYW5kX2Fz c2VtYmx5ID0gMDsKICBlbHNlCiAgICBlcnJvciAoIkZpcnN0IGFyZyBtdXN0IGJlICdzb3Vy Y2UnIG9yICdub3NvdXJjZSciKTsKCiAgbG93ID0gcGFyc2VfYW5kX2V2YWxfYWRkcmVzcyAo YXJndlsyXSk7CgogIGlmIChhcmdjID09IDMpCiAgICB7CiAgICAgIGlmIChmaW5kX3BjX3Bh cnRpYWxfZnVuY3Rpb24gKGxvdywgTlVMTCwgJmxvdywgJmhpZ2gpID09IDApCgllcnJvciAo Ik5vIGZ1bmN0aW9uIGNvbnRhaW5zIHNwZWNpZmllZCBhZGRyZXNzIik7CiAgICB9CiAgZWxz ZQogICAgaGlnaCA9IHBhcnNlX2FuZF9ldmFsX2FkZHJlc3MgKGFyZ3ZbM10pOwoKICAvKiBJ ZiBkaXNhc3NlbWJsZV9mcm9tX2V4ZWMgPT0gLTEsIHRoZW4gd2UgdXNlIHRoZSBmb2xsb3dp bmcgaGV1cmlzdGljIHRvCiAgICAgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIGRvIGRp c2Fzc2VtYmx5IGZyb20gdGFyZ2V0IG1lbW9yeSBvciBmcm9tIHRoZQogICAgIGV4ZWMgZmls ZToKCiAgICAgSWYgd2UncmUgZGVidWdnaW5nIGEgbG9jYWwgcHJvY2VzcywgcmVhZCB0YXJn ZXQgbWVtb3J5LCBpbnN0ZWFkIG9mIHRoZQogICAgIGV4ZWMgZmlsZS4gIFRoaXMgbWFrZXMg ZGlzYXNzZW1ibHkgb2YgZnVuY3Rpb25zIGluIHNoYXJlZCBsaWJzIHdvcmsKICAgICBjb3Jy ZWN0bHkuCgogICAgIEVsc2UsIHdlJ3JlIGRlYnVnZ2luZyBhIHJlbW90ZSBwcm9jZXNzLCBh bmQgc2hvdWxkIGRpc2Fzc2VtYmxlIGZyb20gdGhlCiAgICAgZXhlYyBmaWxlIGZvciBzcGVl ZC4gIEhvd2V2ZXIsIHRoaXMgaXMgbm8gZ29vZCBpZiB0aGUgdGFyZ2V0IG1vZGlmaWVzIGl0 cwogICAgIGNvZGUgKGZvciByZWxvY2F0aW9uLCBvciB3aGF0ZXZlcikuCiAgICovCgogIGlm IChkaXNhc3NlbWJsZV9mcm9tX2V4ZWMgPT0gLTEpCiAgICBpZiAoc3RyY21wICh0YXJnZXRf c2hvcnRuYW1lLCAiY2hpbGQiKSA9PSAwCgl8fCBzdHJjbXAgKHRhcmdldF9zaG9ydG5hbWUs ICJwcm9jZnMiKSA9PSAwCgl8fCBzdHJjbXAgKHRhcmdldF9zaG9ydG5hbWUsICJ2eHByb2Nl c3MiKSA9PSAwKQogICAgICBkaXNhc3NlbWJsZV9mcm9tX2V4ZWMgPSAwOyAvKiBJdCdzIGEg Y2hpbGQgcHJvY2VzcywgcmVhZCBpbmZlcmlvciBtZW0gKi8KICAgIGVsc2UKICAgICAgZGlz YXNzZW1ibGVfZnJvbV9leGVjID0gMTsgLyogSXQncyByZW1vdGUsIHJlYWQgdGhlIGV4ZWMg ZmlsZSAqLwoKICBpZiAoZGlzYXNzZW1ibGVfZnJvbV9leGVjKQogICAgZGkucmVhZF9tZW1v cnlfZnVuYyA9IGdkYnRrX2Rpc19hc21fcmVhZF9tZW1vcnk7CiAgZWxzZQogICAgZGkucmVh ZF9tZW1vcnlfZnVuYyA9IGRpc19hc21fcmVhZF9tZW1vcnk7CgogIC8qIElmIGp1c3QgZG9p bmcgc3RyYWlnaHQgYXNzZW1ibHksIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGRpc2Fzc2VtYmxl CiAgICAgZXZlcnl0aGluZyBiZXR3ZWVuIGxvdyBhbmQgaGlnaC4gIElmIGRvaW5nIG1peGVk IHNvdXJjZS9hc3NlbWJseSwgd2UndmUKICAgICBnb3QgYSB0b3RhbGx5IGRpZmZlcmVudCBw YXRoIHRvIGZvbGxvdy4gICovCgogIGlmIChtaXhlZF9zb3VyY2VfYW5kX2Fzc2VtYmx5KQog ICAgewkJCQkvKiBDb21lIGhlcmUgZm9yIG1peGVkIHNvdXJjZS9hc3NlbWJseSAqLwogICAg ICAvKiBUaGUgaWRlYSBoZXJlIGlzIHRvIHByZXNlbnQgYSBzb3VyY2UtTy1jZW50cmljIHZp ZXcgb2YgYSBmdW5jdGlvbiB0bwoJIHRoZSB1c2VyLiAgVGhpcyBtZWFucyB0aGF0IHRoaW5n cyBhcmUgcHJlc2VudGVkIGluIHNvdXJjZSBvcmRlciwgd2l0aAoJIChwb3NzaWJseSkgb3V0 IG9mIG9yZGVyIGFzc2VtYmx5IGltbWVkaWF0ZWx5IGZvbGxvd2luZy4gICovCiAgICAgIHN0 cnVjdCBzeW10YWIgKnN5bXRhYjsKICAgICAgc3RydWN0IGxpbmV0YWJsZV9lbnRyeSAqbGU7 CiAgICAgIGludCBubGluZXM7CiAgICAgIGludCBuZXdsaW5lczsKICAgICAgc3RydWN0IG15 X2xpbmVfZW50cnkgKm1sZTsKICAgICAgc3RydWN0IHN5bXRhYl9hbmRfbGluZSBzYWw7CiAg ICAgIGludCBpOwogICAgICBpbnQgb3V0X29mX29yZGVyOwogICAgICBpbnQgbmV4dF9saW5l OwoKICAgICAgc3ltdGFiID0gZmluZF9wY19zeW10YWIgKGxvdyk7IC8qIEFzc3VtZSBzeW10 YWIgaXMgdmFsaWQgZm9yIHdob2xlIFBDIHJhbmdlICovCgogICAgICBpZiAoIXN5bXRhYikK CWdvdG8gYXNzZW1ibHlfb25seTsKCi8qIEZpcnN0LCBjb252ZXJ0IHRoZSBsaW5ldGFibGUg dG8gYSBidW5jaCBvZiBteV9saW5lX2VudHJ5J3MuICAqLwoKICAgICAgbGUgPSBzeW10YWIt PmxpbmV0YWJsZS0+aXRlbTsKICAgICAgbmxpbmVzID0gc3ltdGFiLT5saW5ldGFibGUtPm5p dGVtczsKCiAgICAgIGlmIChubGluZXMgPD0gMCkKCWdvdG8gYXNzZW1ibHlfb25seTsKCiAg ICAgIG1sZSA9IChzdHJ1Y3QgbXlfbGluZV9lbnRyeSAqKSBhbGxvY2EgKG5saW5lcyAqIHNp emVvZiAoc3RydWN0IG15X2xpbmVfZW50cnkpKTsKCiAgICAgIG91dF9vZl9vcmRlciA9IDA7 CgovKiBDb3B5IGxpbmV0YWJsZSBlbnRyaWVzIGZvciB0aGlzIGZ1bmN0aW9uIGludG8gb3Vy IGRhdGEgc3RydWN0dXJlLCBjcmVhdGluZwogICBlbmRfcGMncyBhbmQgc2V0dGluZyBvdXRf b2Zfb3JkZXIgYXMgYXBwcm9wcmlhdGUuICAqLwoKLyogRmlyc3QsIHNraXAgYWxsIHRoZSBw cmVjZWRpbmcgZnVuY3Rpb25zLiAgKi8KCiAgICAgIGZvciAoaSA9IDA7IGkgPCBubGluZXMg LSAxICYmIGxlW2ldLnBjIDwgbG93OyBpKyspIDsKCi8qIE5vdywgY29weSBhbGwgZW50cmll cyBiZWZvcmUgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLiAgKi8KCiAgICAgIG5ld2xpbmVz ID0gMDsKICAgICAgZm9yICg7IGkgPCBubGluZXMgLSAxICYmIGxlW2ldLnBjIDwgaGlnaDsg aSsrKQoJewoJICBpZiAobGVbaV0ubGluZSA9PSBsZVtpICsgMV0ubGluZQoJICAgICAgJiYg bGVbaV0ucGMgPT0gbGVbaSArIDFdLnBjKQoJICAgIGNvbnRpbnVlOwkJLyogSWdub3JlIGR1 cGxpY2F0ZXMgKi8KCgkgIG1sZVtuZXdsaW5lc10ubGluZSA9IGxlW2ldLmxpbmU7CgkgIGlm IChsZVtpXS5saW5lID4gbGVbaSArIDFdLmxpbmUpCgkgICAgb3V0X29mX29yZGVyID0gMTsK CSAgbWxlW25ld2xpbmVzXS5zdGFydF9wYyA9IGxlW2ldLnBjOwoJICBtbGVbbmV3bGluZXNd LmVuZF9wYyA9IGxlW2kgKyAxXS5wYzsKCSAgbmV3bGluZXMrKzsKCX0KCi8qIElmIHdlJ3Jl IG9uIHRoZSBsYXN0IGxpbmUsIGFuZCBpdCdzIHBhcnQgb2YgdGhlIGZ1bmN0aW9uLCB0aGVu IHdlIG5lZWQgdG8KICAgZ2V0IHRoZSBlbmQgcGMgaW4gYSBzcGVjaWFsIHdheS4gICovCgog ICAgICBpZiAoaSA9PSBubGluZXMgLSAxCgkgICYmIGxlW2ldLnBjIDwgaGlnaCkKCXsKCSAg bWxlW25ld2xpbmVzXS5saW5lID0gbGVbaV0ubGluZTsKCSAgbWxlW25ld2xpbmVzXS5zdGFy dF9wYyA9IGxlW2ldLnBjOwoJICBzYWwgPSBmaW5kX3BjX2xpbmUgKGxlW2ldLnBjLCAwKTsK CSAgbWxlW25ld2xpbmVzXS5lbmRfcGMgPSBzYWwuZW5kOwoJICBuZXdsaW5lcysrOwoJfQoK LyogTm93LCBzb3J0IG1sZSBieSBsaW5lICNzIChhbmQsIHRoZW4gYnkgYWRkcmVzc2VzIHdp dGhpbiBsaW5lcykuICovCgogICAgICBpZiAob3V0X29mX29yZGVyKQoJcXNvcnQgKG1sZSwg bmV3bGluZXMsIHNpemVvZiAoc3RydWN0IG15X2xpbmVfZW50cnkpLCBjb21wYXJlX2xpbmVz KTsKCi8qIE5vdywgZm9yIGVhY2ggbGluZSBlbnRyeSwgZW1pdCB0aGUgc3BlY2lmaWVkIGxp bmVzICh1bmxlc3MgdGhleSBoYXZlIGJlZW4KICAgZW1pdHRlZCBiZWZvcmUpLCBmb2xsb3dl ZCBieSB0aGUgYXNzZW1ibHkgY29kZSBmb3IgdGhhdCBsaW5lLiAgKi8KCiAgICAgIG5leHRf bGluZSA9IDA7CQkvKiBGb3JjZSBvdXQgZmlyc3QgbGluZSAqLwogICAgICBmb3IgKGkgPSAw OyBpIDwgbmV3bGluZXM7IGkrKykKCXsKLyogUHJpbnQgb3V0IGV2ZXJ5dGhpbmcgZnJvbSBu ZXh0X2xpbmUgdG8gdGhlIGN1cnJlbnQgbGluZS4gICovCgoJICBpZiAobWxlW2ldLmxpbmUg Pj0gbmV4dF9saW5lKQoJICAgIHsKCSAgICAgIGlmIChuZXh0X2xpbmUgIT0gMCkKCQlwcmlu dF9zb3VyY2VfbGluZXMgKHN5bXRhYiwgbmV4dF9saW5lLCBtbGVbaV0ubGluZSArIDEsIDAp OwoJICAgICAgZWxzZQoJCXByaW50X3NvdXJjZV9saW5lcyAoc3ltdGFiLCBtbGVbaV0ubGlu ZSwgbWxlW2ldLmxpbmUgKyAxLCAwKTsKCgkgICAgICBuZXh0X2xpbmUgPSBtbGVbaV0ubGlu ZSArIDE7CgkgICAgfQoKCSAgZm9yIChwYyA9IG1sZVtpXS5zdGFydF9wYzsgcGMgPCBtbGVb aV0uZW5kX3BjOyApCgkgICAgewoJICAgICAgUVVJVDsKCSAgICAgIGZwdXRzX3VuZmlsdGVy ZWQgKCIgICAgIiwgZ2RiX3N0ZG91dCk7CgkgICAgICBwcmludF9hZGRyZXNzIChwYywgZ2Ri X3N0ZG91dCk7CgkgICAgICBmcHV0c191bmZpbHRlcmVkICgiOlx0ICAgICIsIGdkYl9zdGRv dXQpOwoJICAgICAgcGMgKz0gKCp0bV9wcmludF9pbnNuKSAocGMsICZkaSk7CgkgICAgICBm cHV0c191bmZpbHRlcmVkICgiXG4iLCBnZGJfc3Rkb3V0KTsKCSAgICB9Cgl9CiAgICB9CiAg ZWxzZQogICAgewphc3NlbWJseV9vbmx5OgogICAgICBmb3IgKHBjID0gbG93OyBwYyA8IGhp Z2g7ICkKCXsKCSAgUVVJVDsKCSAgZnB1dHNfdW5maWx0ZXJlZCAoIiAgICAiLCBnZGJfc3Rk b3V0KTsKCSAgcHJpbnRfYWRkcmVzcyAocGMsIGdkYl9zdGRvdXQpOwoJICBmcHV0c191bmZp bHRlcmVkICgiOlx0ICAgICIsIGdkYl9zdGRvdXQpOwoJICBwYyArPSAoKnRtX3ByaW50X2lu c24pIChwYywgJmRpKTsKCSAgZnB1dHNfdW5maWx0ZXJlZCAoIlxuIiwgZ2RiX3N0ZG91dCk7 Cgl9CiAgICB9CgogIGdkYl9mbHVzaCAoZ2RiX3N0ZG91dCk7CgogIHJldHVybiBUQ0xfT0s7 Cn0KDApzdGF0aWMgdm9pZAp0a19jb21tYW5kIChjbWQsIGZyb21fdHR5KQogICAgIGNoYXIg KmNtZDsKICAgICBpbnQgZnJvbV90dHk7CnsKICBpbnQgcmV0dmFsOwogIGNoYXIgKnJlc3Vs dDsKICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NoYWluOwoKICAvKiBDYXRjaCBjYXNlIG9mIG5v IGFyZ3VtZW50LCBzaW5jZSB0aGlzIHdpbGwgbWFrZSB0aGUgdGNsIGludGVycHJldGVyIGR1 bXAgY29yZS4gKi8KICBpZiAoY21kID09IE5VTEwpCiAgICBlcnJvcl9ub19hcmcgKCJ0Y2wg Y29tbWFuZCB0byBpbnRlcnByZXQiKTsKCiAgcmV0dmFsID0gVGNsX0V2YWwgKGludGVycCwg Y21kKTsKCiAgcmVzdWx0ID0gc3RyZHVwIChpbnRlcnAtPnJlc3VsdCk7CgogIG9sZF9jaGFp biA9IG1ha2VfY2xlYW51cCAoZnJlZSwgcmVzdWx0KTsKCiAgaWYgKHJldHZhbCAhPSBUQ0xf T0spCiAgICBlcnJvciAocmVzdWx0KTsKCiAgcHJpbnRmX3VuZmlsdGVyZWQgKCIlc1xuIiwg cmVzdWx0KTsKCiAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7Cn0KCnN0YXRpYyB2b2lkCmNs ZWFudXBfaW5pdCAoaWdub3JlZCkKICAgICBpbnQgaWdub3JlZDsKewogIGlmIChpbnRlcnAg IT0gTlVMTCkKICAgIFRjbF9EZWxldGVJbnRlcnAgKGludGVycCk7CiAgaW50ZXJwID0gTlVM TDsKfQoKLyogQ29tZSBoZXJlIGR1cmluZyBsb25nIGNhbGN1bGF0aW9ucyB0byBjaGVjayBm b3IgR1VJIGV2ZW50cy4gIFVzdWFsbHkgaW52b2tlZAogICB2aWEgdGhlIFFVSVQgbWFjcm8u ICAqLwoKc3RhdGljIHZvaWQKZ2RidGtfaW50ZXJhY3RpdmUgKCkKewogIC8qIFRrX0RvT25l RXZlbnQgKFRLX0RPTlRfV0FJVHxUS19JRExFX0VWRU5UUyk7ICovCn0KCi8qIENvbWUgaGVy ZSB3aGVuIHRoZXJlIGlzIGFjdGl2aXR5IG9uIHRoZSBYIGZpbGUgZGVzY3JpcHRvci4gKi8K CnN0YXRpYyB2b2lkCnhfZXZlbnQgKHNpZ25vKQogICAgIGludCBzaWdubzsKewogIC8qIFBy b2Nlc3MgcGVuZGluZyBldmVudHMgKi8KCiAgd2hpbGUgKFRjbF9Eb09uZUV2ZW50IChUQ0xf RE9OVF9XQUlUfFRDTF9BTExfRVZFTlRTKSAhPSAwKTsKfQoKc3RhdGljIGludApnZGJ0a193 YWl0IChwaWQsIG91cnN0YXR1cykKICAgICBpbnQgcGlkOwogICAgIHN0cnVjdCB0YXJnZXRf d2FpdHN0YXR1cyAqb3Vyc3RhdHVzOwp7CiAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CiAg c3RhdGljIHNpZ3NldF90IG51bGxzaWdtYXNrID0gezB9OwoKI2lmbmRlZiBTQV9SRVNUQVJU CiAgLyogTmVlZGVkIGZvciBTdW5PUyA0LjEueCAqLwojZGVmaW5lIFNBX1JFU1RBUlQgMAoj ZW5kaWYKCiAgYWN0aW9uLnNhX2hhbmRsZXIgPSB4X2V2ZW50OwogIGFjdGlvbi5zYV9tYXNr ID0gbnVsbHNpZ21hc2s7CiAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKI2lmbmRl ZiBXSU5OVAogIHNpZ2FjdGlvbihTSUdJTywgJmFjdGlvbiwgTlVMTCk7CiNlbmRpZgoKICBw aWQgPSB0YXJnZXRfd2FpdCAocGlkLCBvdXJzdGF0dXMpOwoKICBhY3Rpb24uc2FfaGFuZGxl ciA9IFNJR19JR047CiNpZm5kZWYgV0lOTlQKICBzaWdhY3Rpb24oU0lHSU8sICZhY3Rpb24s IE5VTEwpOyAKI2VuZGlmCgogIHJldHVybiBwaWQ7Cn0KCi8qIFRoaXMgaXMgY2FsbGVkIGZy b20gZXhlY3V0ZV9jb21tYW5kLCBhbmQgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZAogICB2 YXJpb3VzIGNvbW1hbmQgcm91dGluZXMgaW4gYSBwbGFjZSB3aGVyZSBib3RoIHByb3RvY29s IG1lc3NhZ2VzIGFuZAogICB1c2VyIGlucHV0IGJvdGggZmxvdyB0aHJvdWdoLiAgTW9zdGx5 IHRoaXMgaXMgdXNlZCBmb3IgaW5kaWNhdGluZyB3aGV0aGVyCiAgIHRoZSB0YXJnZXQgcHJv Y2VzcyBpcyBydW5uaW5nIG9yIG5vdC4KKi8KCnN0YXRpYyB2b2lkCmdkYnRrX2NhbGxfY29t bWFuZCAoY21kYmxrLCBhcmcsIGZyb21fdHR5KQogICAgIHN0cnVjdCBjbWRfbGlzdF9lbGVt ZW50ICpjbWRibGs7CiAgICAgY2hhciAqYXJnOwogICAgIGludCBmcm9tX3R0eTsKewogIHJ1 bm5pbmdfbm93ID0gMDsKICBpZiAoY21kYmxrLT5jbGFzcyA9PSBjbGFzc19ydW4pCiAgICB7 CiAgICAgIHJ1bm5pbmdfbm93ID0gMTsKICAgICAgVGNsX0V2YWwgKGludGVycCwgImdkYnRr X3RjbF9idXN5Iik7CiAgICAgICgqY21kYmxrLT5mdW5jdGlvbi5jZnVuYykoYXJnLCBmcm9t X3R0eSk7CiAgICAgIFRjbF9FdmFsIChpbnRlcnAsICJnZGJ0a190Y2xfaWRsZSIpOwogICAg ICBydW5uaW5nX25vdyA9IDA7CiAgICB9CiAgZWxzZQogICAgKCpjbWRibGstPmZ1bmN0aW9u LmNmdW5jKShhcmcsIGZyb21fdHR5KTsKfQoKLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg aW5zdGVhZCBvZiBnZGIncyBpbnRlcm5hbCBjb21tYW5kIGxvb3AuICBUaGlzIGlzIHRoZQog ICBsYXN0IGNoYW5jZSB0byBkbyBhbnl0aGluZyBiZWZvcmUgZW50ZXJpbmcgdGhlIG1haW4g VGsgZXZlbnQgbG9vcC4gKi8KCnN0YXRpYyB2b2lkCnRrX2NvbW1hbmRfbG9vcCAoKQp7CiAg ZXh0ZXJuIEdEQl9GSUxFICppbnN0cmVhbTsKCiAgLyogV2Ugbm8gbG9uZ2VyIHdhbnQgdG8g dXNlIHN0ZGluIGFzIHRoZSBjb21tYW5kIGlucHV0IHN0cmVhbSAqLwogIGluc3RyZWFtID0g TlVMTDsKICBUY2xfRXZhbCAoaW50ZXJwLCAiZ2RidGtfdGNsX3ByZWxvb3AiKTsKICBUa19N YWluTG9vcCAoKTsKfQoKc3RhdGljIHZvaWQKZ2RidGtfaW5pdCAoKQp7CiAgc3RydWN0IGNs ZWFudXAgKm9sZF9jaGFpbjsKICBjaGFyICpsaWIsICpnZGJ0a19saWIsIGdkYnRrX2xpYl90 bXBbMTAyNF0sZ2RidGtfZmlsZVsxMjhdOwogIGludCBpLCBmb3VuZF9tYWluOwogIHN0cnVj dCBzaWdhY3Rpb24gYWN0aW9uOwogIHN0YXRpYyBzaWdzZXRfdCBudWxsc2lnbWFzayA9IHsw fTsKCiAgLyogSWYgdGhlcmUgaXMgbm8gRElTUExBWSBlbnZpcm9ubWVudCB2YXJpYWJsZSwg VGtfSW5pdCBiZWxvdyB3aWxsIGZhaWwsCiAgICAgY2F1c2luZyBnZGIgdG8gYWJvcnQuICBJ ZiBpbnN0ZWFkIHdlIHNpbXBseSByZXR1cm4gaGVyZSwgZ2RiIHdpbGwKICAgICBncmFjZWZ1 bGx5IGRlZ3JhZGUgdG8gdXNpbmcgdGhlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UuICovCgoj aWZuZGVmIFdJTk5UCiAgaWYgKGdldGVudiAoIkRJU1BMQVkiKSA9PSBOVUxMKQogICAgcmV0 dXJuOwojZW5kaWYKCiAgb2xkX2NoYWluID0gbWFrZV9jbGVhbnVwIChjbGVhbnVwX2luaXQs IDApOwoKICAvKiBGaXJzdCBpbml0IHRjbCBhbmQgdGsuICovCgogIGludGVycCA9IFRjbF9D cmVhdGVJbnRlcnAgKCk7CgogIGlmICghaW50ZXJwKQogICAgZXJyb3IgKCJUY2xfQ3JlYXRl SW50ZXJwIGZhaWxlZCIpOwoKICBpZiAoVGNsX0luaXQoaW50ZXJwKSAhPSBUQ0xfT0spCiAg ICBlcnJvciAoIlRjbF9Jbml0IGZhaWxlZDogJXMiLCBpbnRlcnAtPnJlc3VsdCk7CgogIC8q CiAgICBpZiAoSXRjbF9Jbml0KGludGVycCkgPT0gVENMX0VSUk9SKSAKICBlcnJvciAoIkl0 Y2xfSW5pdCBmYWlsZWQ6ICVzIiwgaW50ZXJwLT5yZXN1bHQpOwogICAgKi8KICAKICBpZiAo VGtfSW5pdChpbnRlcnApICE9IFRDTF9PSykKICAgIGVycm9yICgiVGtfSW5pdCBmYWlsZWQ6 ICVzIiwgaW50ZXJwLT5yZXN1bHQpOwoKICBUY2xfQ3JlYXRlQ29tbWFuZCAoaW50ZXJwLCAi Z2RiX2NtZCIsIGNhbGxfd3JhcHBlciwgZ2RiX2NtZCwgTlVMTCk7CiAgVGNsX0NyZWF0ZUNv bW1hbmQgKGludGVycCwgImdkYl9sb2MiLCBjYWxsX3dyYXBwZXIsIGdkYl9sb2MsIE5VTEwp OwogIFRjbF9DcmVhdGVDb21tYW5kIChpbnRlcnAsICJnZGJfcGF0aF9jb252IiwgY2FsbF93 cmFwcGVyLCBnZGJfcGF0aF9jb252LCBOVUxMKTsKICBUY2xfQ3JlYXRlQ29tbWFuZCAoaW50 ZXJwLCAiZ2RiX3NvdXJjZWxpbmVzIiwgY2FsbF93cmFwcGVyLCBnZGJfc291cmNlbGluZXMs CgkJICAgICBOVUxMKTsKICBUY2xfQ3JlYXRlQ29tbWFuZCAoaW50ZXJwLCAiZ2RiX2xpc3Rm aWxlcyIsIGNhbGxfd3JhcHBlciwgZ2RiX2xpc3RmaWxlcywKCQkgICAgIE5VTEwpOwogIFRj bF9DcmVhdGVDb21tYW5kIChpbnRlcnAsICJnZGJfc3RvcCIsIGNhbGxfd3JhcHBlciwgZ2Ri X3N0b3AsIE5VTEwpOwogIFRjbF9DcmVhdGVDb21tYW5kIChpbnRlcnAsICJnZGJfcmVnbmFt ZXMiLCBjYWxsX3dyYXBwZXIsIGdkYl9yZWduYW1lcywgTlVMTCk7CiAgVGNsX0NyZWF0ZUNv bW1hbmQgKGludGVycCwgImdkYl9mZXRjaF9yZWdpc3RlcnMiLCBjYWxsX3dyYXBwZXIsCgkJ ICAgICBnZGJfZmV0Y2hfcmVnaXN0ZXJzLCBOVUxMKTsKICBUY2xfQ3JlYXRlQ29tbWFuZCAo aW50ZXJwLCAiZ2RiX2NoYW5nZWRfcmVnaXN0ZXJfbGlzdCIsIGNhbGxfd3JhcHBlciwKCQkg ICAgIGdkYl9jaGFuZ2VkX3JlZ2lzdGVyX2xpc3QsIE5VTEwpOwogIFRjbF9DcmVhdGVDb21t YW5kIChpbnRlcnAsICJnZGJfZGlzYXNzZW1ibGUiLCBjYWxsX3dyYXBwZXIsCgkJICAgICBn ZGJfZGlzYXNzZW1ibGUsIE5VTEwpOwogIFRjbF9DcmVhdGVDb21tYW5kIChpbnRlcnAsICJn ZGJfZXZhbCIsIGNhbGxfd3JhcHBlciwgZ2RiX2V2YWwsIE5VTEwpOwogIFRjbF9DcmVhdGVD b21tYW5kIChpbnRlcnAsICJnZGJfZ2V0X2JyZWFrcG9pbnRfbGlzdCIsIGNhbGxfd3JhcHBl ciwKCQkgICAgIGdkYl9nZXRfYnJlYWtwb2ludF9saXN0LCBOVUxMKTsKICBUY2xfQ3JlYXRl Q29tbWFuZCAoaW50ZXJwLCAiZ2RiX2dldF9icmVha3BvaW50X2luZm8iLCBjYWxsX3dyYXBw ZXIsCgkJICAgICBnZGJfZ2V0X2JyZWFrcG9pbnRfaW5mbywgTlVMTCk7CgogIGNvbW1hbmRf bG9vcF9ob29rID0gdGtfY29tbWFuZF9sb29wOwogIHByaW50X2ZyYW1lX2luZm9fbGlzdGlu Z19ob29rID0KICAgICh2b2lkICgqKSBQQVJBTVMgKChzdHJ1Y3Qgc3ltdGFiICosIGludCwg aW50LCBpbnQpKSkgbnVsbF9yb3V0aW5lOwogIHF1ZXJ5X2hvb2sgPSBnZGJ0a19xdWVyeTsK ICBmbHVzaF9ob29rID0gZ2RidGtfZmx1c2g7CiAgY3JlYXRlX2JyZWFrcG9pbnRfaG9vayA9 IGdkYnRrX2NyZWF0ZV9icmVha3BvaW50OwogIGRlbGV0ZV9icmVha3BvaW50X2hvb2sgPSBn ZGJ0a19kZWxldGVfYnJlYWtwb2ludDsKICBtb2RpZnlfYnJlYWtwb2ludF9ob29rID0gZ2Ri dGtfbW9kaWZ5X2JyZWFrcG9pbnQ7CiAgaW50ZXJhY3RpdmVfaG9vayA9IGdkYnRrX2ludGVy YWN0aXZlOwogIHRhcmdldF93YWl0X2hvb2sgPSBnZGJ0a193YWl0OwogIGNhbGxfY29tbWFu ZF9ob29rID0gZ2RidGtfY2FsbF9jb21tYW5kOwogIHJlYWRsaW5lX2JlZ2luX2hvb2sgPSBn ZGJ0a19yZWFkbGluZV9iZWdpbjsKICByZWFkbGluZV9ob29rID0gZ2RidGtfcmVhZGxpbmU7 CiAgcmVhZGxpbmVfZW5kX2hvb2sgPSBnZGJ0a19yZWFkbGluZV9lbmQ7CgogIC8qIEdldCB0 aGUgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgWCBzZXJ2ZXIgKi8KCiAgeF9mZCA9IENvbm5l Y3Rpb25OdW1iZXIgKFRrX0Rpc3BsYXkgKFRrX01haW5XaW5kb3cgKGludGVycCkpKTsKCiAg LyogU2V0dXAgZm9yIEkvTyBpbnRlcnJ1cHRzICovCgogIGFjdGlvbi5zYV9tYXNrID0gbnVs bHNpZ21hc2s7CiAgYWN0aW9uLnNhX2ZsYWdzID0gMDsKICBhY3Rpb24uc2FfaGFuZGxlciA9 IFNJR19JR047CiNpZm5kZWYgV0lOTlQKICBzaWdhY3Rpb24oU0lHSU8sICZhY3Rpb24sIE5V TEwpOwojZW5kaWYKCiNpZmRlZiBGSU9BU1lOQwogIGkgPSAxOwogIGlmIChpb2N0bCAoeF9m ZCwgRklPQVNZTkMsICZpKSkKICAgIHBlcnJvcl93aXRoX25hbWUgKCJnZGJ0a19pbml0OiBp b2N0bCBGSU9BU1lOQyBmYWlsZWQiKTsKCiNpZmRlZiBTSU9DU1BHUlAKICBpID0gZ2V0cGlk KCk7CiAgaWYgKGlvY3RsICh4X2ZkLCBTSU9DU1BHUlAsICZpKSkKICAgIHBlcnJvcl93aXRo X25hbWUgKCJnZGJ0a19pbml0OiBpb2N0bCBTSU9DU1BHUlAgZmFpbGVkIik7CgojZWxzZQoj aWZkZWYgRl9TRVRPV04KICBpID0gZ2V0cGlkKCk7CiAgaWYgKGZjbnRsICh4X2ZkLCBGX1NF VE9XTiwgaSkpCiAgICBwZXJyb3Jfd2l0aF9uYW1lICgiZ2RidGtfaW5pdDogZmNudGwgRl9T RVRPV04gZmFpbGVkIik7CiNlbmRpZgkvKiBGX1NFVE9XTiAqLwojZW5kaWYJLyogIVNJT0NT UEdSUCAqLwojZWxzZQojaWZuZGVmIFdJTk5UCiAgaWYgKGlvY3RsICh4X2ZkLCAgSV9TRVRT SUcsIFNfSU5QVVR8U19SRE5PUk0pIDwgMCkKICAgIHBlcnJvcl93aXRoX25hbWUgKCJnZGJ0 a19pbml0OiBpb2N0bCBJX1NFVFNJRyBmYWlsZWQiKTsKI2VuZGlmCgojZW5kaWYgLyogaWZu ZGVmIEZJT0FTWU5DICovCgogIGFkZF9jb20gKCJ0ayIsIGNsYXNzX29ic2N1cmUsIHRrX2Nv bW1hbmQsCgkgICAiU2VuZCBhIGNvbW1hbmQgZGlyZWN0bHkgaW50byB0ay4iKTsKCiAgVGNs X0xpbmtWYXIgKGludGVycCwgImRpc2Fzc2VtYmxlLWZyb20tZXhlYyIsIChjaGFyICopJmRp c2Fzc2VtYmxlX2Zyb21fZXhlYywKCSAgICAgICBUQ0xfTElOS19JTlQpOwoKICAvKiBmaW5k IHRoZSBnZGIgdGNsIGxpYnJhcnkgYW5kIHNvdXJjZSBtYWluLnRjbCAqLwoKICBnZGJ0a19s aWIgPSBnZXRlbnYgKCJHREJUS19MSUJSQVJZIik7CiAgaWYgKCFnZGJ0a19saWIpCiAgICBp ZiAoYWNjZXNzICgiZ2RidGNsL21haW4udGNsIiwgUl9PSykgPT0gMCkKICAgICAgZ2RidGtf bGliID0gImdkYnRjbCI7CiAgICBlbHNlCiAgICAgIGdkYnRrX2xpYiA9IEdEQlRLX0xJQlJB Ulk7CgogIHN0cmNweSAoZ2RidGtfbGliX3RtcCwgZ2RidGtfbGliKTsKICBmb3VuZF9tYWlu ID0gMDsKICAvKiBzZWUgaWYgR0RCVEtfTElCUkFSWSBpcyBhIHBhdGggbGlzdCAqLwogIGxp YiA9IHN0cnRvayAoZ2RidGtfbGliX3RtcCwgR0RCVEtfUEFUSF9TRVApOwogIGRvCiAgICB7 CiAgICAgIGlmIChUY2xfVmFyRXZhbCAoaW50ZXJwLCAibGFwcGVuZCBhdXRvX3BhdGggIiwg bGliLCBOVUxMKSAhPSBUQ0xfT0spCgl7CgkgIGZwdXRzX3VuZmlsdGVyZWQgKFRjbF9HZXRW YXIgKGludGVycCwgImVycm9ySW5mbyIsIDApLCBnZGJfc3RkZXJyKTsKCSAgZXJyb3IgKCIi KTsKCX0KICAgICAgaWYgKCFmb3VuZF9tYWluKQoJewoJICBzdHJjcHkgKGdkYnRrX2ZpbGUs IGxpYik7CgkgIHN0cmNhdCAoZ2RidGtfZmlsZSwgIi9tYWluLnRjbCIpOwoJICBpZiAoYWNj ZXNzIChnZGJ0a19maWxlLCBSX09LKSA9PSAwKQoJICAgIHsKCSAgICAgIGZvdW5kX21haW4r KzsKCSAgICAgIFRjbF9TZXRWYXIgKGludGVycCwgIkdEQlRLX0xJQlJBUlkiLCBsaWIsIDAp OwoJICAgIH0KCX0KICAgICB9IAogIHdoaWxlIChsaWIgPSBzdHJ0b2sgKE5VTEwsICI6Iikp OwogIAogIGlmICghZm91bmRfbWFpbikKICAgIHsKICAgICAgZnB1dHNfdW5maWx0ZXJlZF9o b29rID0gTlVMTDsgLyogRm9yY2UgZXJyb3JzIHRvIHN0ZG91dC9zdGRlcnIgKi8KICAgICAg aWYgKGdldGVudigiR0RCVEtfTElCUkFSWSIpKQoJewoJICBmcHJpbnRmX3VuZmlsdGVyZWQg KHN0ZGVyciwgIlVuYWJsZSB0byBmaW5kIG1haW4udGNsIGluICVzXG4iLGdldGVudigiR0RC VEtfTElCUkFSWSIpKTsKCSAgZnByaW50Zl91bmZpbHRlcmVkIChzdGRlcnIsIAoJCQkgICAg ICAiUGxlYXNlIHNldCBHREJUS19MSUJSQVJZIHRvIGEgcGF0aCB0aGF0IGluY2x1ZGVzIHRo ZSBHREIgdGNsIGZpbGVzLlxuIik7Cgl9CiAgICAgIGVsc2UKCXsKCSAgZnByaW50Zl91bmZp bHRlcmVkIChzdGRlcnIsICJVbmFibGUgdG8gZmluZCBtYWluLnRjbCBpbiAlc1xuIiwgR0RC VEtfTElCUkFSWSk7CgkgIGZwcmludGZfdW5maWx0ZXJlZCAoc3RkZXJyLCAiWW91IG1pZ2h0 IHdhbnQgdG8gc2V0IEdEQlRLX0xJQlJBUllcbiIpOwkgIAoJfQogICAgICBlcnJvcigiIik7 CiAgICB9CgovKiBEZWZlciBzZXR1cCBvZiBmcHV0c191bmZpbHRlcmVkX2hvb2sgdG8gbmVh ciB0aGUgZW5kIHNvIHRoYXQgZXJyb3IgbWVzc2FnZXMKICAgcHJpb3IgdG8gdGhpcyBwb2lu dCBnbyB0byBzdGRvdXQvc3RkZXJyLiAgKi8KCiAgZnB1dHNfdW5maWx0ZXJlZF9ob29rID0g Z2RidGtfZnB1dHM7CgogIGlmIChUY2xfRXZhbEZpbGUgKGludGVycCwgZ2RidGtfZmlsZSkg IT0gVENMX09LKQogICAgewogICAgICBmcHV0c191bmZpbHRlcmVkX2hvb2sgPSBOVUxMOyAv KiBGb3JjZSBlcnJvcnMgdG8gc3Rkb3V0L3N0ZGVyciAqLwoKICAgICAgZnByaW50Zl91bmZp bHRlcmVkIChzdGRlcnIsICIlczolZDogJXNcbiIsIGdkYnRrX2ZpbGUsCgkJCSAgaW50ZXJw LT5lcnJvckxpbmUsIGludGVycC0+cmVzdWx0KTsKCiAgICAgIGZwdXRzX3VuZmlsdGVyZWQg KCJTdGFjayB0cmFjZTpcbiIsIGdkYl9zdGRlcnIpOwogICAgICBmcHV0c191bmZpbHRlcmVk IChUY2xfR2V0VmFyIChpbnRlcnAsICJlcnJvckluZm8iLCAwKSwgZ2RiX3N0ZGVycik7CiAg ICAgIGVycm9yICgiIik7CiAgICB9CgogIGRpc2NhcmRfY2xlYW51cHMgKG9sZF9jaGFpbik7 Cn0KCi8qIENvbWUgaGVyZSBkdXJpbmcgaW5pdGlhbGl6ZV9hbGxfZmlsZXMgKCkgKi8KCnZv aWQKX2luaXRpYWxpemVfZ2RidGsgKCkKewogIGlmICh1c2Vfd2luZG93cykKICAgIHsKICAg ICAgLyogVGVsbCB0aGUgcmVzdCBvZiB0aGUgd29ybGQgdGhhdCBHZGJ0ayBpcyBub3cgc2V0 IHVwLiAqLwoKICAgICAgaW5pdF91aV9ob29rID0gZ2RidGtfaW5pdDsKICAgIH0KfQo= --------------5AAB448694FE76ACD5311E42 Content-Type: text/plain; charset=us-ascii; name="gdbtk.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="gdbtk.diff" *** gdbtk.c Mon May 19 19:34:53 1997 --- gdbtk.c.orig Mon May 19 19:22:58 1997 *************** *** 129,135 **** static char *Gdbtk_Library; - #ifndef WINNT /* Supply malloc calls for tcl/tk. */ char * --- 129,134 ---- *************** *** 154,161 **** free (ptr); } - #endif - static void null_routine(arg) int arg; --- 153,158 ---- *************** *** 227,239 **** merge[1] = buf; command = Tcl_Merge (2, merge); Tcl_Eval (interp, command); - - #ifndef WINNT free (command); - #else - Tcl_Free (command); - #endif - val = atol (interp->result); return val; --- 224,230 ---- *************** *** 265,275 **** merge[1] = buf; command = Tcl_Merge (2, merge); Tcl_Eval (interp, command); - #ifndef WINNT free (command); - #else - Tcl_Free (command); - #endif } static char * --- 256,262 ---- *************** *** 284,296 **** merge[1] = prompt; command = Tcl_Merge (2, merge); result = Tcl_Eval (interp, command); - - #ifndef WINNT free (command); - #else - Tcl_Free (command); - #endif - if (result == TCL_OK) { return (strdup (interp -> result)); --- 271,277 ---- --------------5AAB448694FE76ACD5311E42 Content-Type: application/x-unknown-content-type-c_auto_file; name="infcmd.c" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="infcmd.c" LyogTWVtb3J5LWFjY2VzcyBhbmQgY29tbWFuZHMgZm9yICJpbmZlcmlvciIgcHJvY2Vzcywg Zm9yIEdEQi4KICAgQ29weXJpZ2h0IDE5ODYsIDE5ODcsIDE5ODgsIDE5ODksIDE5OTEsIDE5 OTIsIDE5OTUsIDE5OTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCgpUaGlzIGZp bGUgaXMgcGFydCBvZiBHREIuCgpUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs ZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLwoK I2luY2x1ZGUgImRlZnMuaCIKI2luY2x1ZGUgPHNpZ25hbC5oPgojaW5jbHVkZSAiZ2RiX3N0 cmluZy5oIgojaW5jbHVkZSAic3ltdGFiLmgiCiNpbmNsdWRlICJnZGJ0eXBlcy5oIgojaW5j bHVkZSAiZnJhbWUuaCIKI2luY2x1ZGUgImluZmVyaW9yLmgiCiNpbmNsdWRlICJlbnZpcm9u LmgiCiNpbmNsdWRlICJ2YWx1ZS5oIgojaW5jbHVkZSAiZ2RiY21kLmgiCiNpbmNsdWRlICJn ZGJjb3JlLmgiCiNpbmNsdWRlICJ0YXJnZXQuaCIKI2luY2x1ZGUgImxhbmd1YWdlLmgiCiNp bmNsdWRlICJzeW1maWxlLmgiCgpzdGF0aWMgdm9pZCBjb250aW51ZV9jb21tYW5kIFBBUkFN UyAoKGNoYXIgKiwgaW50KSk7CgpzdGF0aWMgdm9pZCB1bnRpbF9uZXh0X2NvbW1hbmQgUEFS QU1TICgoaW50KSk7CgpzdGF0aWMgdm9pZCB1bnRpbF9jb21tYW5kIFBBUkFNUyAoKGNoYXIg KiwgaW50KSk7CgpzdGF0aWMgdm9pZCBwYXRoX2luZm8gUEFSQU1TICgoY2hhciAqLCBpbnQp KTsKCnN0YXRpYyB2b2lkIHBhdGhfY29tbWFuZCBQQVJBTVMgKChjaGFyICosIGludCkpOwoK c3RhdGljIHZvaWQgdW5zZXRfY29tbWFuZCBQQVJBTVMgKChjaGFyICosIGludCkpOwoKc3Rh dGljIHZvaWQgZmxvYXRfaW5mbyBQQVJBTVMgKChjaGFyICosIGludCkpOwoKc3RhdGljIHZv aWQgZGV0YWNoX2NvbW1hbmQgUEFSQU1TICgoY2hhciAqLCBpbnQpKTsKCnN0YXRpYyB2b2lk IG5vZnBfcmVnaXN0ZXJzX2luZm8gUEFSQU1TICgoY2hhciAqLCBpbnQpKTsKCnN0YXRpYyB2 b2lkIGFsbF9yZWdpc3RlcnNfaW5mbyBQQVJBTVMgKChjaGFyICosIGludCkpOwoKc3RhdGlj IHZvaWQgcmVnaXN0ZXJzX2luZm8gUEFSQU1TICgoY2hhciAqLCBpbnQpKTsKCiNpZiAhZGVm aW5lZCAoRE9fUkVHSVNURVJTX0lORk8pCnN0YXRpYyB2b2lkIGRvX3JlZ2lzdGVyc19pbmZv IFBBUkFNUyAoKGludCwgaW50KSk7CiNlbmRpZgoKc3RhdGljIHZvaWQgdW5zZXRfZW52aXJv bm1lbnRfY29tbWFuZCBQQVJBTVMgKChjaGFyICosIGludCkpOwoKc3RhdGljIHZvaWQgc2V0 X2Vudmlyb25tZW50X2NvbW1hbmQgUEFSQU1TICgoY2hhciAqLCBpbnQpKTsKCnN0YXRpYyB2 b2lkIGVudmlyb25tZW50X2luZm8gUEFSQU1TICgoY2hhciAqLCBpbnQpKTsKCnN0YXRpYyB2 b2lkIHByb2dyYW1faW5mbyBQQVJBTVMgKChjaGFyICosIGludCkpOwoKc3RhdGljIHZvaWQg ZmluaXNoX2NvbW1hbmQgUEFSQU1TICgoY2hhciAqLCBpbnQpKTsKCnN0YXRpYyB2b2lkIHNp Z25hbF9jb21tYW5kIFBBUkFNUyAoKGNoYXIgKiwgaW50KSk7CgpzdGF0aWMgdm9pZCBqdW1w X2NvbW1hbmQgUEFSQU1TICgoY2hhciAqLCBpbnQpKTsKCnN0YXRpYyB2b2lkIHN0ZXBfMSBQ QVJBTVMgKChpbnQsIGludCwgY2hhciAqKSk7CgpzdGF0aWMgdm9pZCBuZXh0aV9jb21tYW5k IFBBUkFNUyAoKGNoYXIgKiwgaW50KSk7CgpzdGF0aWMgdm9pZCBzdGVwaV9jb21tYW5kIFBB UkFNUyAoKGNoYXIgKiwgaW50KSk7CgpzdGF0aWMgdm9pZCBuZXh0X2NvbW1hbmQgUEFSQU1T ICgoY2hhciAqLCBpbnQpKTsKCnN0YXRpYyB2b2lkIHN0ZXBfY29tbWFuZCBQQVJBTVMgKChj aGFyICosIGludCkpOwoKc3RhdGljIHZvaWQgcnVuX2NvbW1hbmQgUEFSQU1TICgoY2hhciAq LCBpbnQpKTsKCiNpZmRlZiBDQUxMX0RVTU1ZX0JSRUFLUE9JTlRfT0ZGU0VUCnN0YXRpYyB2 b2lkIGJyZWFrcG9pbnRfYXV0b19kZWxldGVfY29udGVudHMgUEFSQU1TICgoUFRSKSk7CiNl bmRpZgoKI2RlZmluZSBFUlJPUl9OT19JTkZFUklPUiBcCiAgIGlmICghdGFyZ2V0X2hhc19l eGVjdXRpb24pIGVycm9yICgiVGhlIHByb2dyYW0gaXMgbm90IGJlaW5nIHJ1bi4iKTsKCi8q IFN0cmluZyBjb250YWluaW5nIGFyZ3VtZW50cyB0byBnaXZlIHRvIHRoZSBwcm9ncmFtLCBz ZXBhcmF0ZWQgYnkgc3BhY2VzLgogICBFbXB0eSBzdHJpbmcgKHBvaW50ZXIgdG8gJ1wwJykg bWVhbnMgbm8gYXJncy4gICovCgpzdGF0aWMgY2hhciAqaW5mZXJpb3JfYXJnczsKCi8qIEZp bGUgbmFtZSBmb3IgZGVmYXVsdCB1c2UgZm9yIHN0YW5kYXJkIGluL291dCBpbiB0aGUgaW5m ZXJpb3IuICAqLwoKY2hhciAqaW5mZXJpb3JfaW9fdGVybWluYWw7CgovKiBQaWQgb2Ygb3Vy IGRlYnVnZ2VkIGluZmVyaW9yLCBvciAwIGlmIG5vIGluZmVyaW9yIG5vdy4KICAgU2luY2Ug dmFyaW91cyBwYXJ0cyBvZiBpbmZydW4uYyB0ZXN0IHRoaXMgdG8gc2VlIHdoZXRoZXIgdGhl cmUgaXMgYSBwcm9ncmFtCiAgIGJlaW5nIGRlYnVnZ2VkIGl0IHNob3VsZCBiZSBub256ZXJv IChjdXJyZW50bHkgMyBpcyB1c2VkKSBmb3IgcmVtb3RlCiAgIGRlYnVnZ2luZy4gICovCgpp bnQgaW5mZXJpb3JfcGlkOwoKLyogTGFzdCBzaWduYWwgdGhhdCB0aGUgaW5mZXJpb3IgcmVj ZWl2ZWQgKHdoeSBpdCBzdG9wcGVkKS4gICovCgplbnVtIHRhcmdldF9zaWduYWwgc3RvcF9z aWduYWw7CgovKiBBZGRyZXNzIGF0IHdoaWNoIGluZmVyaW9yIHN0b3BwZWQuICAqLwoKQ09S RV9BRERSIHN0b3BfcGM7CgovKiBDaGFpbiBjb250YWluaW5nIHN0YXR1cyBvZiBicmVha3Bv aW50KHMpIHRoYXQgd2UgaGF2ZSBzdG9wcGVkIGF0LiAgKi8KCmJwc3RhdCBzdG9wX2Jwc3Rh dDsKCi8qIEZsYWcgaW5kaWNhdGluZyB0aGF0IGEgY29tbWFuZCBoYXMgcHJvY2VlZGVkIHRo ZSBpbmZlcmlvciBwYXN0IHRoZQogICBjdXJyZW50IGJyZWFrcG9pbnQuICAqLwoKaW50IGJy ZWFrcG9pbnRfcHJvY2VlZGVkOwoKLyogTm9uemVybyBpZiBzdG9wcGVkIGR1ZSB0byBhIHN0 ZXAgY29tbWFuZC4gICovCgppbnQgc3RvcF9zdGVwOwoKLyogTm9uemVybyBpZiBzdG9wcGVk IGR1ZSB0byBjb21wbGV0aW9uIG9mIGEgc3RhY2sgZHVtbXkgcm91dGluZS4gICovCgppbnQg c3RvcF9zdGFja19kdW1teTsKCi8qIE5vbnplcm8gaWYgc3RvcHBlZCBkdWUgdG8gYSByYW5k b20gKHVuZXhwZWN0ZWQpIHNpZ25hbCBpbiBpbmZlcmlvcgogICBwcm9jZXNzLiAgKi8KCmlu dCBzdG9wcGVkX2J5X3JhbmRvbV9zaWduYWw7CgovKiBSYW5nZSB0byBzaW5nbGUgc3RlcCB3 aXRoaW4uCiAgIElmIHRoaXMgaXMgbm9uemVybywgcmVzcG9uZCB0byBhIHNpbmdsZS1zdGVw IHNpZ25hbAogICBieSBjb250aW51aW5nIHRvIHN0ZXAgaWYgdGhlIHBjIGlzIGluIHRoaXMg cmFuZ2UuICAqLwoKQ09SRV9BRERSIHN0ZXBfcmFuZ2Vfc3RhcnQ7IC8qIEluY2x1c2l2ZSAq LwpDT1JFX0FERFIgc3RlcF9yYW5nZV9lbmQ7IC8qIEV4Y2x1c2l2ZSAqLwoKLyogU3RhY2sg ZnJhbWUgYWRkcmVzcyBhcyBvZiB3aGVuIHN0ZXBwaW5nIGNvbW1hbmQgd2FzIGlzc3VlZC4K ICAgVGhpcyBpcyBob3cgd2Uga25vdyB3aGVuIHdlIHN0ZXAgaW50byBhIHN1YnJvdXRpbmUg Y2FsbCwKICAgYW5kIGhvdyB0byBzZXQgdGhlIGZyYW1lIGZvciB0aGUgYnJlYWtwb2ludCB1 c2VkIHRvIHN0ZXAgb3V0LiAgKi8KCkNPUkVfQUREUiBzdGVwX2ZyYW1lX2FkZHJlc3M7Cgov KiBPdXIgbm90aW9uIG9mIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIuICAqLwoKQ09SRV9B RERSIHN0ZXBfc3A7CgovKiAxIG1lYW5zIHN0ZXAgb3ZlciBhbGwgc3Vicm91dGluZSBjYWxs cy4KICAgMCBtZWFucyBkb24ndCBzdGVwIG92ZXIgY2FsbHMgKHVzZWQgYnkgc3RlcGkpLgog ICAtMSBtZWFucyBzdGVwIG92ZXIgY2FsbHMgdG8gdW5kZWJ1Z2dhYmxlIGZ1bmN0aW9ucy4g ICovCgppbnQgc3RlcF9vdmVyX2NhbGxzOwoKLyogSWYgc3RlcHBpbmcsIG5vbnplcm8gbWVh bnMgc3RlcCBjb3VudCBpcyA+IDEKICAgc28gZG9uJ3QgcHJpbnQgZnJhbWUgbmV4dCB0aW1l IGluZmVyaW9yIHN0b3BzCiAgIGlmIGl0IHN0b3BzIGR1ZSB0byBzdGVwcGluZy4gICovCgpp bnQgc3RlcF9tdWx0aTsKCi8qIEVudmlyb25tZW50IHRvIHVzZSBmb3IgcnVubmluZyBpbmZl cmlvciwKICAgaW4gZm9ybWF0IGRlc2NyaWJlZCBpbiBlbnZpcm9uLmguICAqLwoKc3RydWN0 IGVudmlyb24gKmluZmVyaW9yX2Vudmlyb247CgoMCi8qIEFSR1NVU0VEICovCnZvaWQKdHR5 X2NvbW1hbmQgKGZpbGUsIGZyb21fdHR5KQogICAgIGNoYXIgKmZpbGU7CiAgICAgaW50IGZy b21fdHR5Owp7CiAgaWYgKGZpbGUgPT0gMCkKICAgIGVycm9yX25vX2FyZyAoInRlcm1pbmFs IG5hbWUgZm9yIHJ1bm5pbmcgdGFyZ2V0IHByb2Nlc3MiKTsKCiAgaW5mZXJpb3JfaW9fdGVy bWluYWwgPSBzYXZlc3RyaW5nIChmaWxlLCBzdHJsZW4gKGZpbGUpKTsKfQoKc3RhdGljIHZv aWQKcnVuX2NvbW1hbmQgKGFyZ3MsIGZyb21fdHR5KQogICAgIGNoYXIgKmFyZ3M7CiAgICAg aW50IGZyb21fdHR5Owp7CiAgY2hhciAqZXhlY19maWxlOwoKICBkb250X3JlcGVhdCAoKTsK CiAgaWYgKGluZmVyaW9yX3BpZCAhPSAwICYmIHRhcmdldF9oYXNfZXhlY3V0aW9uKQogICAg ewogICAgICBpZiAoCgkgICFxdWVyeSAoIlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIGhh cyBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cblwKU3RhcnQgaXQgZnJvbSB0aGUgYmVnaW5uaW5n PyAiKSkKCWVycm9yICgiUHJvZ3JhbSBub3QgcmVzdGFydGVkLiIpOwogICAgICB0YXJnZXRf a2lsbCAoKTsKICAgIH0KCiAgY2xlYXJfYnJlYWtwb2ludF9oaXRfY291bnRzICgpOwoKICBl eGVjX2ZpbGUgPSAoY2hhciAqKSBnZXRfZXhlY19maWxlICgwKTsKCiAgLyogVGhlIGV4ZWMg ZmlsZSBpcyByZS1yZWFkIGV2ZXJ5IHRpbWUgd2UgZG8gYSBnZW5lcmljX21vdXJuX2luZmVy aW9yLCBzbwogICAgIHdlIGp1c3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgc3ltYm9sIGZp bGUuICAqLwogIHJlcmVhZF9zeW1ib2xzICgpOwoKICAvKiBXZSBrZWVwIHN5bWJvbHMgZnJv bSBhZGQtc3ltYm9sLWZpbGUsIG9uIHRoZSBncm91bmRzIHRoYXQgdGhlCiAgICAgdXNlciBt aWdodCB3YW50IHRvIGFkZCBzb21lIHN5bWJvbHMgYmVmb3JlIHJ1bm5pbmcgdGhlIHByb2dy YW0KICAgICAocmlnaHQ/KS4gIEJ1dCBzb21ldGltZXMgKGR5bmFtaWMgbG9hZGluZyB3aGVy ZSB0aGUgdXNlciBtYW51YWxseQogICAgIGludHJvZHVjZXMgdGhlIG5ldyBzeW1ib2xzIHdp dGggYWRkLXN5bWJvbC1maWxlKSwgdGhlIGNvZGUgd2hpY2gKICAgICB0aGUgc3ltYm9scyBk ZXNjcmliZSBkb2VzIG5vdCBwZXJzaXN0IGJldHdlZW4gcnVucy4gIEN1cnJlbnRseQogICAg IHRoZSB1c2VyIGhhcyB0byBtYW51YWxseSBudWtlIGFsbCBzeW1ib2xzIGJldHdlZW4gcnVu cyBpZiB0aGV5CiAgICAgd2FudCB0aGVtIHRvIGdvIGF3YXkgKFBSIDIyMDcpLiAgVGhpcyBp cyBwcm9iYWJseSByZWFzb25hYmxlLiAgKi8KCiAgaWYgKGFyZ3MpCiAgICB7CiAgICAgIGNo YXIgKmNtZDsKICAgICAgY21kID0gY29uY2F0ICgic2V0IGFyZ3MgIiwgYXJncywgTlVMTCk7 CiAgICAgIG1ha2VfY2xlYW51cCAoZnJlZSwgY21kKTsKICAgICAgZXhlY3V0ZV9jb21tYW5k IChjbWQsIGZyb21fdHR5KTsKICAgIH0KCiAgaWYgKGZyb21fdHR5KQogICAgewogICAgICBw dXRzX2ZpbHRlcmVkKCJTdGFydGluZyBwcm9ncmFtOiAiKTsKICAgICAgaWYgKGV4ZWNfZmls ZSkKCXB1dHNfZmlsdGVyZWQoZXhlY19maWxlKTsKICAgICAgcHV0c19maWx0ZXJlZCgiICIp OwogICAgICBwdXRzX2ZpbHRlcmVkKGluZmVyaW9yX2FyZ3MpOwogICAgICBwdXRzX2ZpbHRl cmVkKCJcbiIpOwogICAgICBnZGJfZmx1c2ggKGdkYl9zdGRvdXQpOwogICAgfQoKICB0YXJn ZXRfY3JlYXRlX2luZmVyaW9yIChleGVjX2ZpbGUsIGluZmVyaW9yX2FyZ3MsCgkJCSAgZW52 aXJvbl92ZWN0b3IgKGluZmVyaW9yX2Vudmlyb24pKTsKfQoMCnN0YXRpYyB2b2lkCmNvbnRp bnVlX2NvbW1hbmQgKHByb2NfY291bnRfZXhwLCBmcm9tX3R0eSkKICAgICBjaGFyICpwcm9j X2NvdW50X2V4cDsKICAgICBpbnQgZnJvbV90dHk7CnsKICBFUlJPUl9OT19JTkZFUklPUjsK CiAgLyogSWYgaGF2ZSBhcmd1bWVudCwgc2V0IHByb2NlZWQgY291bnQgb2YgYnJlYWtwb2lu dCB3ZSBzdG9wcGVkIGF0LiAgKi8KCiAgaWYgKHByb2NfY291bnRfZXhwICE9IE5VTEwpCiAg ICB7CiAgICAgIGJwc3RhdCBicyA9IHN0b3BfYnBzdGF0OwogICAgICBpbnQgbnVtID0gYnBz dGF0X251bSAoJmJzKTsKICAgICAgaWYgKG51bSA9PSAwICYmIGZyb21fdHR5KQoJewoJICBw cmludGZfZmlsdGVyZWQKCSAgICAoIk5vdCBzdG9wcGVkIGF0IGFueSBicmVha3BvaW50OyBh cmd1bWVudCBpZ25vcmVkLlxuIik7Cgl9CiAgICAgIHdoaWxlIChudW0gIT0gMCkKCXsKCSAg c2V0X2lnbm9yZV9jb3VudCAobnVtLAoJCQkgICAgcGFyc2VfYW5kX2V2YWxfYWRkcmVzcyAo cHJvY19jb3VudF9leHApIC0gMSwKCQkJICAgIGZyb21fdHR5KTsKCSAgLyogc2V0X2lnbm9y ZV9jb3VudCBwcmludHMgYSBtZXNzYWdlIGVuZGluZyB3aXRoIGEgcGVyaW9kLgoJICAgICBT byBwcmludCB0d28gc3BhY2VzIGJlZm9yZSAiQ29udGludWluZy4iLiAgKi8KCSAgaWYgKGZy b21fdHR5KQoJICAgIHByaW50Zl9maWx0ZXJlZCAoIiAgIik7CgkgIG51bSA9IGJwc3RhdF9u dW0gKCZicyk7Cgl9CiAgICB9CgogIGlmIChmcm9tX3R0eSkKICAgIHByaW50Zl9maWx0ZXJl ZCAoIkNvbnRpbnVpbmcuXG4iKTsKCiAgY2xlYXJfcHJvY2VlZF9zdGF0dXMgKCk7CgogIHBy b2NlZWQgKChDT1JFX0FERFIpIC0xLCBUQVJHRVRfU0lHTkFMX0RFRkFVTFQsIDApOwp9CgwK LyogU3RlcCB1bnRpbCBvdXRzaWRlIG9mIGN1cnJlbnQgc3RhdGVtZW50LiAgKi8KCi8qIEFS R1NVU0VEICovCnN0YXRpYyB2b2lkCnN0ZXBfY29tbWFuZCAoY291bnRfc3RyaW5nLCBmcm9t X3R0eSkKICAgICBjaGFyICpjb3VudF9zdHJpbmc7CiAgICAgaW50IGZyb21fdHR5Owp7CiAg c3RlcF8xICgwLCAwLCBjb3VudF9zdHJpbmcpOwp9CgovKiBMaWtld2lzZSwgYnV0IHNraXAg b3ZlciBzdWJyb3V0aW5lIGNhbGxzIGFzIGlmIHNpbmdsZSBpbnN0cnVjdGlvbnMuICAqLwoK LyogQVJHU1VTRUQgKi8Kc3RhdGljIHZvaWQKbmV4dF9jb21tYW5kIChjb3VudF9zdHJpbmcs IGZyb21fdHR5KQogICAgIGNoYXIgKmNvdW50X3N0cmluZzsKICAgICBpbnQgZnJvbV90dHk7 CnsKICBzdGVwXzEgKDEsIDAsIGNvdW50X3N0cmluZyk7Cn0KCi8qIExpa2V3aXNlLCBidXQg c3RlcCBvbmx5IG9uZSBpbnN0cnVjdGlvbi4gICovCgovKiBBUkdTVVNFRCAqLwpzdGF0aWMg dm9pZApzdGVwaV9jb21tYW5kIChjb3VudF9zdHJpbmcsIGZyb21fdHR5KQogICAgIGNoYXIg KmNvdW50X3N0cmluZzsKICAgICBpbnQgZnJvbV90dHk7CnsKICBzdGVwXzEgKDAsIDEsIGNv dW50X3N0cmluZyk7Cn0KCi8qIEFSR1NVU0VEICovCnN0YXRpYyB2b2lkCm5leHRpX2NvbW1h bmQgKGNvdW50X3N0cmluZywgZnJvbV90dHkpCiAgICAgY2hhciAqY291bnRfc3RyaW5nOwog ICAgIGludCBmcm9tX3R0eTsKewogIHN0ZXBfMSAoMSwgMSwgY291bnRfc3RyaW5nKTsKfQoK c3RhdGljIHZvaWQKc3RlcF8xIChza2lwX3N1YnJvdXRpbmVzLCBzaW5nbGVfaW5zdCwgY291 bnRfc3RyaW5nKQogICAgIGludCBza2lwX3N1YnJvdXRpbmVzOwogICAgIGludCBzaW5nbGVf aW5zdDsKICAgICBjaGFyICpjb3VudF9zdHJpbmc7CnsKICByZWdpc3RlciBpbnQgY291bnQg PSAxOwogIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKICBzdHJ1Y3QgY2xlYW51cCAqY2xl YW51cHMgPSAwOwoKICBFUlJPUl9OT19JTkZFUklPUjsKICBjb3VudCA9IGNvdW50X3N0cmlu ZyA/IHBhcnNlX2FuZF9ldmFsX2FkZHJlc3MgKGNvdW50X3N0cmluZykgOiAxOwoKICBpZiAo IXNpbmdsZV9pbnN0IHx8IHNraXBfc3Vicm91dGluZXMpIC8qIGxlYXZlIHNpIGNvbW1hbmQg YWxvbmUgKi8KICAgIHsKICAgICAgZW5hYmxlX2xvbmdqbXBfYnJlYWtwb2ludCgpOwogICAg ICBjbGVhbnVwcyA9IG1ha2VfY2xlYW51cChkaXNhYmxlX2xvbmdqbXBfYnJlYWtwb2ludCwg MCk7CiAgICB9CgogIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pCiAgICB7CiAgICAgIGNs ZWFyX3Byb2NlZWRfc3RhdHVzICgpOwoKICAgICAgZnJhbWUgPSBnZXRfY3VycmVudF9mcmFt ZSAoKTsKICAgICAgaWYgKCFmcmFtZSkJCQkvKiBBdm9pZCBjb3JlZHVtcCBoZXJlLiAgV2h5 IHRobz8gKi8KCWVycm9yICgiTm8gY3VycmVudCBmcmFtZSIpOwogICAgICBzdGVwX2ZyYW1l X2FkZHJlc3MgPSBGUkFNRV9GUCAoZnJhbWUpOwogICAgICBzdGVwX3NwID0gcmVhZF9zcCAo KTsKCiAgICAgIGlmICghIHNpbmdsZV9pbnN0KQoJewoJICBmaW5kX3BjX2xpbmVfcGNfcmFu Z2UgKHN0b3BfcGMsICZzdGVwX3JhbmdlX3N0YXJ0LCAmc3RlcF9yYW5nZV9lbmQpOwoJICBp ZiAoc3RlcF9yYW5nZV9lbmQgPT0gMCkKCSAgICB7CgkgICAgICBjaGFyICpuYW1lOwoJICAg ICAgaWYgKGZpbmRfcGNfcGFydGlhbF9mdW5jdGlvbiAoc3RvcF9wYywgJm5hbWUsICZzdGVw X3JhbmdlX3N0YXJ0LAoJCQkJCSAgICAmc3RlcF9yYW5nZV9lbmQpID09IDApCgkJZXJyb3Ig KCJDYW5ub3QgZmluZCBib3VuZHMgb2YgY3VycmVudCBmdW5jdGlvbiIpOwoKCSAgICAgIHRh cmdldF90ZXJtaW5hbF9vdXJzICgpOwoJICAgICAgcHJpbnRmX2ZpbHRlcmVkICgiXApTaW5n bGUgc3RlcHBpbmcgdW50aWwgZXhpdCBmcm9tIGZ1bmN0aW9uICVzLCBcblwKd2hpY2ggaGFz IG5vIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uLlxuIiwgbmFtZSk7CgkgICAgfQoJfQogICAg ICBlbHNlCgl7CgkgIC8qIFNheSB3ZSBhcmUgc3RlcHBpbmcsIGJ1dCBzdG9wIGFmdGVyIG9u ZSBpbnNuIHdoYXRldmVyIGl0IGRvZXMuICAqLwoJICBzdGVwX3JhbmdlX3N0YXJ0ID0gc3Rl cF9yYW5nZV9lbmQgPSAxOwoJICBpZiAoIXNraXBfc3Vicm91dGluZXMpCgkgICAgLyogSXQg aXMgc3RlcGkuCgkgICAgICAgRG9uJ3Qgc3RlcCBvdmVyIGZ1bmN0aW9uIGNhbGxzLCBub3Qg ZXZlbiB0byBmdW5jdGlvbnMgbGFja2luZwoJICAgICAgIGxpbmUgbnVtYmVycy4gICovCgkg ICAgc3RlcF9vdmVyX2NhbGxzID0gMDsKCX0KCiAgICAgIGlmIChza2lwX3N1YnJvdXRpbmVz KQoJc3RlcF9vdmVyX2NhbGxzID0gMTsKCiAgICAgIHN0ZXBfbXVsdGkgPSAoY291bnQgPiAx KTsKICAgICAgcHJvY2VlZCAoKENPUkVfQUREUikgLTEsIFRBUkdFVF9TSUdOQUxfREVGQVVM VCwgMSk7CiAgICAgIGlmICghIHN0b3Bfc3RlcCkKCWJyZWFrOwoKICAgICAgLyogRklYTUU6 IE9uIG5leHRpLCB0aGlzIG1heSBoYXZlIGFscmVhZHkgYmVlbiBkb25lICh3aGVuIHdlIGhp dCB0aGUKCSBzdGVwIHJlc3VtZSBicmVhaywgSSB0aGluaykuICBQcm9iYWJseSB0aGlzIHNo b3VsZCBiZSBtb3ZlZCB0bwoJIHdhaXRfZm9yX2luZmVyaW9yIChuZWFyIHRoZSB0b3ApLiAg Ki8KI2lmIGRlZmluZWQgKFNISUZUX0lOU1RfUkVHUykKICAgICAgU0hJRlRfSU5TVF9SRUdT KCk7CiNlbmRpZgogICAgfQoKICBpZiAoIXNpbmdsZV9pbnN0IHx8IHNraXBfc3Vicm91dGlu ZXMpCiAgICBkb19jbGVhbnVwcyhjbGVhbnVwcyk7Cn0KDAovKiBDb250aW51ZSBwcm9ncmFt IGF0IHNwZWNpZmllZCBhZGRyZXNzLiAgKi8KCnN0YXRpYyB2b2lkCmp1bXBfY29tbWFuZCAo YXJnLCBmcm9tX3R0eSkKICAgICBjaGFyICphcmc7CiAgICAgaW50IGZyb21fdHR5Owp7CiAg cmVnaXN0ZXIgQ09SRV9BRERSIGFkZHI7CiAgc3RydWN0IHN5bXRhYnNfYW5kX2xpbmVzIHNh bHM7CiAgc3RydWN0IHN5bXRhYl9hbmRfbGluZSBzYWw7CiAgc3RydWN0IHN5bWJvbCAqZm47 CiAgc3RydWN0IHN5bWJvbCAqc2ZuOwoKICBFUlJPUl9OT19JTkZFUklPUjsKCiAgaWYgKCFh cmcpCiAgICBlcnJvcl9ub19hcmcgKCJzdGFydGluZyBhZGRyZXNzIik7CgogIHNhbHMgPSBk ZWNvZGVfbGluZV9zcGVjXzEgKGFyZywgMSk7CiAgaWYgKHNhbHMubmVsdHMgIT0gMSkKICAg IHsKICAgICAgZXJyb3IgKCJVbnJlYXNvbmFibGUganVtcCByZXF1ZXN0Iik7CiAgICB9Cgog IHNhbCA9IHNhbHMuc2Fsc1swXTsKICBmcmVlICgoUFRSKXNhbHMuc2Fscyk7CgogIGlmIChz YWwuc3ltdGFiID09IDAgJiYgc2FsLnBjID09IDApCiAgICBlcnJvciAoIk5vIHNvdXJjZSBm aWxlIGhhcyBiZWVuIHNwZWNpZmllZC4iKTsKCiAgcmVzb2x2ZV9zYWxfcGMgKCZzYWwpOwkJ CS8qIE1heSBlcnJvciBvdXQgKi8KCiAgLyogU2VlIGlmIHdlIGFyZSB0cnlpbmcgdG8ganVt cCB0byBhbm90aGVyIGZ1bmN0aW9uLiAqLwogIGZuID0gZ2V0X2ZyYW1lX2Z1bmN0aW9uIChn ZXRfY3VycmVudF9mcmFtZSAoKSk7CiAgc2ZuID0gZmluZF9wY19mdW5jdGlvbiAoc2FsLnBj KTsKICBpZiAoZm4gIT0gTlVMTCAmJiBzZm4gIT0gZm4pCiAgICB7CiAgICAgIGlmICghcXVl cnkgKCJMaW5lICVkIGlzIG5vdCBpbiBgJXMnLiAgSnVtcCBhbnl3YXk/ICIsIHNhbC5saW5l LAoJCSAgU1lNQk9MX1NPVVJDRV9OQU1FIChmbikpKQoJewoJICBlcnJvciAoIk5vdCBjb25m aXJtZWQuIik7CgkgIC8qIE5PVFJFQUNIRUQgKi8KCX0KICAgIH0KICBmaXh1cF9zeW1ib2xf c2VjdGlvbiAoc2ZuLCAwKTsKICBpZiAoc2ZuIT1OVUxMICYmCiAgICAgIHNlY3Rpb25faXNf b3ZlcmxheSAoU1lNQk9MX0JGRF9TRUNUSU9OIChzZm4pKSAmJiAKICAgICAgIXNlY3Rpb25f aXNfbWFwcGVkIChTWU1CT0xfQkZEX1NFQ1RJT04gKHNmbikpKQogICAgewogICAgICBpZiAo IXF1ZXJ5ICgiV0FSTklORyEhISAgRGVzdGluYXRpb24gaXMgaW4gdW5tYXBwZWQgb3Zlcmxh eSEgIEp1bXAgYW55d2F5PyAiKSkKCXsKCSAgZXJyb3IgKCJOb3QgY29uZmlybWVkLiIpOwoJ ICAvKiBOT1RSRUFDSEVEICovCgl9CiAgICB9CgoKICBhZGRyID0gc2FsLnBjOwoKICBpZiAo ZnJvbV90dHkpCiAgICB7CiAgICAgIHByaW50Zl9maWx0ZXJlZCAoIkNvbnRpbnVpbmcgYXQg Iik7CiAgICAgIHByaW50X2FkZHJlc3NfbnVtZXJpYyAoYWRkciwgMSwgZ2RiX3N0ZG91dCk7 CiAgICAgIHByaW50Zl9maWx0ZXJlZCAoIi5cbiIpOwogICAgfQoKICBjbGVhcl9wcm9jZWVk X3N0YXR1cyAoKTsKICBwcm9jZWVkIChhZGRyLCBUQVJHRVRfU0lHTkFMXzAsIDApOwp9Cgov KiBDb250aW51ZSBwcm9ncmFtIGdpdmluZyBpdCBzcGVjaWZpZWQgc2lnbmFsLiAgKi8KCnN0 YXRpYyB2b2lkCnNpZ25hbF9jb21tYW5kIChzaWdudW1fZXhwLCBmcm9tX3R0eSkKICAgICBj aGFyICpzaWdudW1fZXhwOwogICAgIGludCBmcm9tX3R0eTsKewogIGVudW0gdGFyZ2V0X3Np Z25hbCBvdXJzaWc7CgogIGRvbnRfcmVwZWF0ICgpOwkJLyogVG9vIGRhbmdlcm91cy4gICov CiAgRVJST1JfTk9fSU5GRVJJT1I7CgogIGlmICghc2lnbnVtX2V4cCkKICAgIGVycm9yX25v X2FyZyAoInNpZ25hbCBudW1iZXIiKTsKCiAgLyogSXQgd291bGQgYmUgZXZlbiBzbGlja2Vy IHRvIG1ha2Ugc2lnbmFsIG5hbWVzIGJlIHZhbGlkIGV4cHJlc3Npb25zLAogICAgICh0aGUg dHlwZSBjb3VsZCBiZSAiZW51bSAkc2lnbmFsIiBvciBzb21lIHN1Y2gpLCB0aGVuIHRoZSB1 c2VyIGNvdWxkCiAgICAgYXNzaWduIHRoZW0gdG8gY29udmVuaWVuY2UgdmFyaWFibGVzLiAg Ki8KICBvdXJzaWcgPSB0YXJnZXRfc2lnbmFsX2Zyb21fbmFtZSAoc2lnbnVtX2V4cCk7Cgog IGlmIChvdXJzaWcgPT0gVEFSR0VUX1NJR05BTF9VTktOT1dOKQogICAgewogICAgICAvKiBO bywgdHJ5IG51bWVyaWMuICAqLwogICAgICBpbnQgbnVtID0gcGFyc2VfYW5kX2V2YWxfYWRk cmVzcyAoc2lnbnVtX2V4cCk7CgogICAgICBpZiAobnVtID09IDApCglvdXJzaWcgPSBUQVJH RVRfU0lHTkFMXzA7CiAgICAgIGVsc2UKCW91cnNpZyA9IHRhcmdldF9zaWduYWxfZnJvbV9j b21tYW5kIChudW0pOwogICAgfQoKICBpZiAoZnJvbV90dHkpCiAgICB7CiAgICAgIGlmIChv dXJzaWcgPT0gVEFSR0VUX1NJR05BTF8wKQoJcHJpbnRmX2ZpbHRlcmVkICgiQ29udGludWlu ZyB3aXRoIG5vIHNpZ25hbC5cbiIpOwogICAgICBlbHNlCglwcmludGZfZmlsdGVyZWQgKCJD b250aW51aW5nIHdpdGggc2lnbmFsICVzLlxuIiwKCQkJIHRhcmdldF9zaWduYWxfdG9fbmFt ZSAob3Vyc2lnKSk7CiAgICB9CgogIGNsZWFyX3Byb2NlZWRfc3RhdHVzICgpOwogIC8qICJz aWduYWwgMCIgc2hvdWxkIG5vdCBnZXQgc3R1Y2sgaWYgd2UgYXJlIHN0b3BwZWQgYXQgYSBi cmVha3BvaW50LgogICAgIEZJWE1FOiBOZWl0aGVyIHNob3VsZCAic2lnbmFsIGZvbyIgYnV0 IHdoZW4gSSB0cmllZCBwYXNzaW5nCiAgICAgKENPUkVfQUREUiktMSB1bmNvbmRpdGlvbmFs bHkgSSBnb3QgYSB0ZXN0c3VpdGUgZmFpbHVyZSB3aGljaCBJIGhhdmVuJ3QKICAgICB0cmll ZCB0byB0cmFjayBkb3duIHlldC4gICovCiAgcHJvY2VlZCAob3Vyc2lnID09IFRBUkdFVF9T SUdOQUxfMCA/IChDT1JFX0FERFIpIC0xIDogc3RvcF9wYywgb3Vyc2lnLCAwKTsKfQoKLyog Q2FsbCBicmVha3BvaW50X2F1dG9fZGVsZXRlIG9uIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9m IHRoZSBicHN0YXQKICAgcG9pbnRlZCB0byBieSBhcmcgKHdoaWNoIGlzIHJlYWxseSBhIGJw c3RhdCAqKS4gICovCgojaWZkZWYgQ0FMTF9EVU1NWV9CUkVBS1BPSU5UX09GRlNFVAoKc3Rh dGljIHZvaWQKYnJlYWtwb2ludF9hdXRvX2RlbGV0ZV9jb250ZW50cyAoYXJnKQogICAgIFBU UiBhcmc7CnsKICBicmVha3BvaW50X2F1dG9fZGVsZXRlICgqKGJwc3RhdCAqKWFyZyk7Cn0K CiNlbmRpZgkvKiBDQUxMX0RVTU1ZX0JSRUFLUE9JTlRfT0ZGU0VUICovCgovKiBFeGVjdXRl IGEgInN0YWNrIGR1bW15IiwgYSBwaWVjZSBvZiBjb2RlIHN0b3JlZCBpbiB0aGUgc3RhY2sK ICAgYnkgdGhlIGRlYnVnZ2VyIHRvIGJlIGV4ZWN1dGVkIGluIHRoZSBpbmZlcmlvci4KCiAg IFRvIGNhbGw6IGZpcnN0LCBkbyBQVVNIX0RVTU1ZX0ZSQU1FLgogICBUaGVuIHB1c2ggdGhl IGNvbnRlbnRzIG9mIHRoZSBkdW1teS4gIEl0IHNob3VsZCBlbmQgd2l0aCBhIGJyZWFrcG9p bnQgaW5zbi4KICAgVGhlbiBjYWxsIGhlcmUsIHBhc3NpbmcgYWRkcmVzcyBhdCB3aGljaCB0 byBzdGFydCB0aGUgZHVtbXkuCgogICBUaGUgY29udGVudHMgb2YgYWxsIHJlZ2lzdGVycyBh cmUgc2F2ZWQgYmVmb3JlIHRoZSBkdW1teSBmcmFtZSBpcyBwb3BwZWQKICAgYW5kIGNvcGll ZCBpbnRvIHRoZSBidWZmZXIgQlVGRkVSLgoKICAgVGhlIGR1bW15J3MgZnJhbWUgaXMgYXV0 b21hdGljYWxseSBwb3BwZWQgd2hlbmV2ZXIgdGhhdCBicmVhayBpcyBoaXQuCiAgIElmIHRo YXQgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHByb2dyYW0gc3RvcHMsIHJ1bl9zdGFja19kdW1t eQogICByZXR1cm5zIHRvIGl0cyBjYWxsZXIgd2l0aCB0aGF0IGZyYW1lIGFscmVhZHkgZ29u ZSBhbmQgcmV0dXJucyAwLgogICBPdGhlcndpc2UsIHJ1bl9zdGFjay1kdW1teSByZXR1cm5z IDEgKHRoZSBmcmFtZSB3aWxsIGV2ZW50dWFsbHkgYmUgcG9wcGVkCiAgIHdoZW4gd2UgZG8g aGl0IHRoYXQgYnJlYWtwb2ludCkuICAqLwoKLyogREVCVUcgSE9PSzogIDQgPT4gcmV0dXJu IGluc3RlYWQgb2YgbGV0dGluZyB0aGUgc3RhY2sgZHVtbXkgcnVuLiAgKi8KCnN0YXRpYyBp bnQgc3RhY2tfZHVtbXlfdGVzdGluZyA9IDA7CgppbnQKcnVuX3N0YWNrX2R1bW15IChhZGRy LCBidWZmZXIpCiAgICAgQ09SRV9BRERSIGFkZHI7CiAgICAgY2hhciBidWZmZXJbUkVHSVNU RVJfQllURVNdOwp7CiAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IG1ha2VfY2xl YW51cCAobnVsbF9jbGVhbnVwLCAwKTsKCiAgLyogTm93IHByb2NlZWQsIGhhdmluZyByZWFj aGVkIHRoZSBkZXNpcmVkIHBsYWNlLiAgKi8KICBjbGVhcl9wcm9jZWVkX3N0YXR1cyAoKTsK ICBpZiAoc3RhY2tfZHVtbXlfdGVzdGluZyAmIDQpCiAgICB7CiAgICAgIFBPUF9GUkFNRTsK ICAgICAgcmV0dXJuKDApOwogICAgfQojaWZkZWYgQ0FMTF9EVU1NWV9CUkVBS1BPSU5UX09G RlNFVAogIHsKICAgIHN0cnVjdCBicmVha3BvaW50ICpicHQ7CiAgICBzdHJ1Y3Qgc3ltdGFi X2FuZF9saW5lIHNhbDsKCiAgICBJTklUX1NBTCAoJnNhbCk7CS8qIGluaXRpYWxpemUgdG8g emVyb2VzICovCiNpZiBDQUxMX0RVTU1ZX0xPQ0FUSU9OICE9IEFUX0VOVFJZX1BPSU5UCiAg ICBzYWwucGMgPSBhZGRyIC0gQ0FMTF9EVU1NWV9TVEFSVF9PRkZTRVQgKyBDQUxMX0RVTU1Z X0JSRUFLUE9JTlRfT0ZGU0VUOwojZWxzZQogICAgc2FsLnBjID0gQ0FMTF9EVU1NWV9BRERS RVNTICgpOwojZW5kaWYKICAgIHNhbC5zZWN0aW9uID0gZmluZF9wY19vdmVybGF5IChzYWwu cGMpOwoKICAgIC8qIFNldCB1cCBhIEZSQU1FIGZvciB0aGUgZHVtbXkgZnJhbWUgc28gd2Ug Y2FuIHBhc3MgaXQgdG8KICAgICAgIHNldF9tb21lbnRhcnlfYnJlYWtwb2ludC4gIFdlIG5l ZWQgdG8gZ2l2ZSB0aGUgYnJlYWtwb2ludCBhCiAgICAgICBmcmFtZSBpbiBjYXNlIHRoZXJl IGlzIG9ubHkgb25lIGNvcHkgb2YgdGhlIGR1bW15IChlLmcuCiAgICAgICBDQUxMX0RVTU1Z X0xPQ0FUSU9OID09IEFGVEVSX1RFWFRfRU5EKS4gICovCiAgICBmbHVzaF9jYWNoZWRfZnJh bWVzICgpOwogICAgc2V0X2N1cnJlbnRfZnJhbWUgKGNyZWF0ZV9uZXdfZnJhbWUgKHJlYWRf ZnAgKCksIHNhbC5wYykpOwoKICAgIC8qIElmIGRlZmluZWQsIENBTExfRFVNTVlfQlJFQUtQ T0lOVF9PRkZTRVQgaXMgd2hlcmUgd2UgbmVlZCB0byBwdXQKICAgICAgIGEgYnJlYWtwb2lu dCBpbnN0cnVjdGlvbi4gIElmIG5vdCwgdGhlIGNhbGwgZHVtbXkgYWxyZWFkeSBoYXMgdGhl CiAgICAgICBicmVha3BvaW50IGluc3RydWN0aW9uIGluIGl0LgoKICAgICAgIGFkZHIgaXMg dGhlIGFkZHJlc3Mgb2YgdGhlIGNhbGwgZHVtbXkgcGx1cyB0aGUgQ0FMTF9EVU1NWV9TVEFS VF9PRkZTRVQsCiAgICAgICBzbyB3ZSBuZWVkIHRvIHN1YnRyYWN0IHRoZSBDQUxMX0RVTU1Z X1NUQVJUX09GRlNFVC4gICovCiAgICBicHQgPSBzZXRfbW9tZW50YXJ5X2JyZWFrcG9pbnQg KHNhbCwKCQkJCSAgICBnZXRfY3VycmVudF9mcmFtZSAoKSwKCQkJCSAgICBicF9jYWxsX2R1 bW15KTsKICAgIGJwdC0+ZGlzcG9zaXRpb24gPSBkZWw7CgogICAgLyogSWYgYWxsIGVycm9y KClzIG91dCBvZiBwcm9jZWVkIGVuZGVkIHVwIGNhbGxpbmcgbm9ybWFsX3N0b3AgKGFuZAog ICAgICAgcGVyaGFwcyB0aGV5IHNob3VsZDsgaXQgYWxyZWFkeSBkb2VzIGluIHRoZSBzcGVj aWFsIGNhc2Ugb2YgZXJyb3IKICAgICAgIG91dCBvZiByZXN1bWUoKSksIHRoZW4gd2Ugd291 bGRuJ3QgbmVlZCB0aGlzLiAgKi8KICAgIG1ha2VfY2xlYW51cCAoYnJlYWtwb2ludF9hdXRv X2RlbGV0ZV9jb250ZW50cywgJnN0b3BfYnBzdGF0KTsKICB9CiNlbmRpZiAvKiBDQUxMX0RV TU1ZX0JSRUFLUE9JTlRfT0ZGU0VULiAgKi8KCiAgcHJvY2VlZF90b19maW5pc2ggPSAxOwkv KiBXZSB3YW50IHN0b3BfcmVnaXN0ZXJzLCBwbGVhc2UuLi4gKi8KICBwcm9jZWVkIChhZGRy LCBUQVJHRVRfU0lHTkFMXzAsIDApOwoKICBkaXNjYXJkX2NsZWFudXBzIChvbGRfY2xlYW51 cHMpOwoKICBpZiAoIXN0b3Bfc3RhY2tfZHVtbXkpCiAgICByZXR1cm4gMTsKCiAgLyogT24g cmV0dXJuLCB0aGUgc3RhY2sgZHVtbXkgaGFzIGJlZW4gcG9wcGVkIGFscmVhZHkuICAqLwoK ICBtZW1jcHkgKGJ1ZmZlciwgc3RvcF9yZWdpc3RlcnMsIHNpemVvZiBzdG9wX3JlZ2lzdGVy cyk7CiAgcmV0dXJuIDA7Cn0KDAovKiBQcm9jZWVkIHVudGlsIHdlIHJlYWNoIGEgZGlmZmVy ZW50IHNvdXJjZSBsaW5lIHdpdGggcGMgZ3JlYXRlciB0aGFuCiAgIG91ciBjdXJyZW50IG9u ZSBvciBleGl0IHRoZSBmdW5jdGlvbi4gIFdlIHNraXAgY2FsbHMgaW4gYm90aCBjYXNlcy4K CiAgIE5vdGUgdGhhdCBldmVudHVhbGx5IHRoaXMgY29tbWFuZCBzaG91bGQgcHJvYmFibHkg YmUgY2hhbmdlZCBzbwogICB0aGF0IG9ubHkgc291cmNlIGxpbmVzIGFyZSBwcmludGVkIG91 dCB3aGVuIHdlIGhpdCB0aGUgYnJlYWtwb2ludAogICB3ZSBzZXQuICBUaGlzIG1heSBpbnZv bHZlIGNoYW5nZXMgdG8gd2FpdF9mb3JfaW5mZXJpb3IgYW5kIHRoZQogICBwcm9jZWVkIHN0 YXR1cyBjb2RlLiAgKi8KCi8qIEFSR1NVU0VEICovCnN0YXRpYyB2b2lkCnVudGlsX25leHRf Y29tbWFuZCAoZnJvbV90dHkpCiAgICAgaW50IGZyb21fdHR5Owp7CiAgc3RydWN0IGZyYW1l X2luZm8gKmZyYW1lOwogIENPUkVfQUREUiBwYzsKICBzdHJ1Y3Qgc3ltYm9sICpmdW5jOwog IHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgc2FsOwogCiAgY2xlYXJfcHJvY2VlZF9zdGF0dXMg KCk7CgogIGZyYW1lID0gZ2V0X2N1cnJlbnRfZnJhbWUgKCk7CgogIC8qIFN0ZXAgdW50aWwg ZWl0aGVyIGV4aXRlZCBmcm9tIHRoaXMgZnVuY3Rpb24gb3IgZ3JlYXRlcgogICAgIHRoYW4g dGhlIGN1cnJlbnQgbGluZSAoaWYgaW4gc3ltYm9saWMgc2VjdGlvbikgb3IgcGMgKGlmCiAg ICAgbm90KS4gKi8KCiAgcGMgPSByZWFkX3BjICgpOwogIGZ1bmMgPSBmaW5kX3BjX2Z1bmN0 aW9uIChwYyk7CiAgCiAgaWYgKCFmdW5jKQogICAgewogICAgICBzdHJ1Y3QgbWluaW1hbF9z eW1ib2wgKm1zeW1ib2wgPSBsb29rdXBfbWluaW1hbF9zeW1ib2xfYnlfcGMgKHBjKTsKICAg ICAgCiAgICAgIGlmIChtc3ltYm9sID09IE5VTEwpCgllcnJvciAoIkV4ZWN1dGlvbiBpcyBu b3Qgd2l0aGluIGEga25vd24gZnVuY3Rpb24uIik7CiAgICAgIAogICAgICBzdGVwX3Jhbmdl X3N0YXJ0ID0gU1lNQk9MX1ZBTFVFX0FERFJFU1MgKG1zeW1ib2wpOwogICAgICBzdGVwX3Jh bmdlX2VuZCA9IHBjOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgc2FsID0gZmluZF9wY19s aW5lIChwYywgMCk7CiAgICAgIAogICAgICBzdGVwX3JhbmdlX3N0YXJ0ID0gQkxPQ0tfU1RB UlQgKFNZTUJPTF9CTE9DS19WQUxVRSAoZnVuYykpOwogICAgICBzdGVwX3JhbmdlX2VuZCA9 IHNhbC5lbmQ7CiAgICB9CiAgCiAgc3RlcF9vdmVyX2NhbGxzID0gMTsKICBzdGVwX2ZyYW1l X2FkZHJlc3MgPSBGUkFNRV9GUCAoZnJhbWUpOwogIHN0ZXBfc3AgPSByZWFkX3NwICgpOwoK ICBzdGVwX211bHRpID0gMDsJCS8qIE9ubHkgb25lIGNhbGwgdG8gcHJvY2VlZCAqLwogIAog IHByb2NlZWQgKChDT1JFX0FERFIpIC0xLCBUQVJHRVRfU0lHTkFMX0RFRkFVTFQsIDEpOwp9 CgpzdGF0aWMgdm9pZCAKdW50aWxfY29tbWFuZCAoYXJnLCBmcm9tX3R0eSkKICAgICBjaGFy ICphcmc7CiAgICAgaW50IGZyb21fdHR5Owp7CiAgaWYgKCF0YXJnZXRfaGFzX2V4ZWN1dGlv bikKICAgIGVycm9yICgiVGhlIHByb2dyYW0gaXMgbm90IHJ1bm5pbmcuIik7CiAgaWYgKGFy ZykKICAgIHVudGlsX2JyZWFrX2NvbW1hbmQgKGFyZywgZnJvbV90dHkpOwogIGVsc2UKICAg IHVudGlsX25leHRfY29tbWFuZCAoZnJvbV90dHkpOwp9CgwKLyogImZpbmlzaCI6IFNldCBh IHRlbXBvcmFyeSBicmVha3BvaW50IGF0IHRoZSBwbGFjZQogICB0aGUgc2VsZWN0ZWQgZnJh bWUgd2lsbCByZXR1cm4gdG8sIHRoZW4gY29udGludWUuICAqLwoKc3RhdGljIHZvaWQKZmlu aXNoX2NvbW1hbmQgKGFyZywgZnJvbV90dHkpCiAgICAgY2hhciAqYXJnOwogICAgIGludCBm cm9tX3R0eTsKewogIHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgc2FsOwogIHJlZ2lzdGVyIHN0 cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKICByZWdpc3RlciBzdHJ1Y3Qgc3ltYm9sICpmdW5j dGlvbjsKICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnJlYWtwb2ludDsKICBzdHJ1Y3QgY2xlYW51 cCAqb2xkX2NoYWluOwoKICBpZiAoYXJnKQogICAgZXJyb3IgKCJUaGUgXCJmaW5pc2hcIiBj b21tYW5kIGRvZXMgbm90IHRha2UgYW55IGFyZ3VtZW50cy4iKTsKICBpZiAoIXRhcmdldF9o YXNfZXhlY3V0aW9uKQogICAgZXJyb3IgKCJUaGUgcHJvZ3JhbSBpcyBub3QgcnVubmluZy4i KTsKICBpZiAoc2VsZWN0ZWRfZnJhbWUgPT0gTlVMTCkKICAgIGVycm9yICgiTm8gc2VsZWN0 ZWQgZnJhbWUuIik7CgogIGZyYW1lID0gZ2V0X3ByZXZfZnJhbWUgKHNlbGVjdGVkX2ZyYW1l KTsKICBpZiAoZnJhbWUgPT0gMCkKICAgIGVycm9yICgiXCJmaW5pc2hcIiBub3QgbWVhbmlu Z2Z1bCBpbiB0aGUgb3V0ZXJtb3N0IGZyYW1lLiIpOwoKICBjbGVhcl9wcm9jZWVkX3N0YXR1 cyAoKTsKCiAgc2FsID0gZmluZF9wY19saW5lIChmcmFtZS0+cGMsIDApOwogIHNhbC5wYyA9 IGZyYW1lLT5wYzsKCiAgYnJlYWtwb2ludCA9IHNldF9tb21lbnRhcnlfYnJlYWtwb2ludCAo c2FsLCBmcmFtZSwgYnBfZmluaXNoKTsKCiAgb2xkX2NoYWluID0gbWFrZV9jbGVhbnVwKGRl bGV0ZV9icmVha3BvaW50LCBicmVha3BvaW50KTsKCiAgLyogRmluZCB0aGUgZnVuY3Rpb24g d2Ugd2lsbCByZXR1cm4gZnJvbS4gICovCgogIGZ1bmN0aW9uID0gZmluZF9wY19mdW5jdGlv biAoc2VsZWN0ZWRfZnJhbWUtPnBjKTsKCiAgLyogUHJpbnQgaW5mbyBvbiB0aGUgc2VsZWN0 ZWQgZnJhbWUsIGluY2x1ZGluZyBsZXZlbCBudW1iZXIKICAgICBidXQgbm90IHNvdXJjZS4g ICovCiAgaWYgKGZyb21fdHR5KQogICAgewogICAgICBwcmludGZfZmlsdGVyZWQgKCJSdW4g dGlsbCBleGl0IGZyb20gIik7CiAgICAgIHByaW50X3N0YWNrX2ZyYW1lIChzZWxlY3RlZF9m cmFtZSwgc2VsZWN0ZWRfZnJhbWVfbGV2ZWwsIDApOwogICAgfQoKICBwcm9jZWVkX3RvX2Zp bmlzaCA9IDE7CQkvKiBXZSB3YW50IHN0b3BfcmVnaXN0ZXJzLCBwbGVhc2UuLi4gKi8KICBw cm9jZWVkICgoQ09SRV9BRERSKSAtMSwgVEFSR0VUX1NJR05BTF9ERUZBVUxULCAwKTsKCiAg LyogRGlkIHdlIHN0b3AgYXQgb3VyIGJyZWFrcG9pbnQ/ICovCiAgaWYgKGJwc3RhdF9maW5k X2JyZWFrcG9pbnQoc3RvcF9icHN0YXQsIGJyZWFrcG9pbnQpICE9IE5VTEwKICAgICAgJiYg ZnVuY3Rpb24gIT0gMCkKICAgIHsKICAgICAgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGU7CiAg ICAgIHJlZ2lzdGVyIHZhbHVlX3B0ciB2YWw7CiAgICAgIENPUkVfQUREUiBmdW5jYWRkcjsK CiAgICAgIHZhbHVlX3R5cGUgPSBUWVBFX1RBUkdFVF9UWVBFIChTWU1CT0xfVFlQRSAoZnVu Y3Rpb24pKTsKICAgICAgaWYgKCF2YWx1ZV90eXBlKQoJZmF0YWwgKCJpbnRlcm5hbDogZmlu aXNoX2NvbW1hbmQ6IGZ1bmN0aW9uIGhhcyBubyB0YXJnZXQgdHlwZSIpOwogICAgICAKICAg ICAgaWYgKFRZUEVfQ09ERSAodmFsdWVfdHlwZSkgPT0gVFlQRV9DT0RFX1ZPSUQpCglyZXR1 cm47CgogICAgICBmdW5jYWRkciA9IEJMT0NLX1NUQVJUIChTWU1CT0xfQkxPQ0tfVkFMVUUg KGZ1bmN0aW9uKSk7CgogICAgICB2YWwgPSB2YWx1ZV9iZWluZ19yZXR1cm5lZCAodmFsdWVf dHlwZSwgc3RvcF9yZWdpc3RlcnMsCgkgICAgICB1c2luZ19zdHJ1Y3RfcmV0dXJuICh2YWx1 ZV9vZl92YXJpYWJsZSAoZnVuY3Rpb24sIE5VTEwpLAoJCQkJICAgZnVuY2FkZHIsCgkJCQkg ICBjaGVja190eXBlZGVmICh2YWx1ZV90eXBlKSwKCQlCTE9DS19HQ0NfQ09NUElMRUQgKFNZ TUJPTF9CTE9DS19WQUxVRSAoZnVuY3Rpb24pKSkpOwoKICAgICAgcHJpbnRmX2ZpbHRlcmVk ICgiVmFsdWUgcmV0dXJuZWQgaXMgJCVkID0gIiwgcmVjb3JkX2xhdGVzdF92YWx1ZSAodmFs KSk7CiAgICAgIHZhbHVlX3ByaW50ICh2YWwsIGdkYl9zdGRvdXQsIDAsIFZhbF9ub19wcmV0 dHlwcmludCk7CiAgICAgIHByaW50Zl9maWx0ZXJlZCAoIlxuIik7CiAgICB9CiAgZG9fY2xl YW51cHMob2xkX2NoYWluKTsKfQoMCi8qIEFSR1NVU0VEICovCnN0YXRpYyB2b2lkCnByb2dy YW1faW5mbyAoYXJncywgZnJvbV90dHkpCiAgICBjaGFyICphcmdzOwogICAgaW50IGZyb21f dHR5Owp7CiAgYnBzdGF0IGJzID0gc3RvcF9icHN0YXQ7CiAgaW50IG51bSA9IGJwc3RhdF9u dW0gKCZicyk7CiAgCiAgaWYgKCF0YXJnZXRfaGFzX2V4ZWN1dGlvbikKICAgIHsKICAgICAg cHJpbnRmX2ZpbHRlcmVkICgiVGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgaXMgbm90IGJl aW5nIHJ1bi5cbiIpOwogICAgICByZXR1cm47CiAgICB9CgogIHRhcmdldF9maWxlc19pbmZv ICgpOwogIHByaW50Zl9maWx0ZXJlZCAoIlByb2dyYW0gc3RvcHBlZCBhdCAlcy5cbiIsCgkJ ICAgbG9jYWxfaGV4X3N0cmluZygodW5zaWduZWQgbG9uZykgc3RvcF9wYykpOwogIGlmIChz dG9wX3N0ZXApCiAgICBwcmludGZfZmlsdGVyZWQgKCJJdCBzdG9wcGVkIGFmdGVyIGJlaW5n IHN0ZXBwZWQuXG4iKTsKICBlbHNlIGlmIChudW0gIT0gMCkKICAgIHsKICAgICAgLyogVGhl cmUgbWF5IGJlIHNldmVyYWwgYnJlYWtwb2ludHMgaW4gdGhlIHNhbWUgcGxhY2UsIHNvIHRo aXMKCSBpc24ndCBhcyBzdHJhbmdlIGFzIGl0IHNlZW1zLiAgKi8KICAgICAgd2hpbGUgKG51 bSAhPSAwKQoJewoJICBpZiAobnVtIDwgMCkKCSAgICBwcmludGZfZmlsdGVyZWQgKCJJdCBz dG9wcGVkIGF0IGEgYnJlYWtwb2ludCB0aGF0IGhhcyBzaW5jZSBiZWVuIGRlbGV0ZWQuXG4i KTsKCSAgZWxzZQoJICAgIHByaW50Zl9maWx0ZXJlZCAoIkl0IHN0b3BwZWQgYXQgYnJlYWtw b2ludCAlZC5cbiIsIG51bSk7CgkgIG51bSA9IGJwc3RhdF9udW0gKCZicyk7Cgl9CiAgICB9 CiAgZWxzZSBpZiAoc3RvcF9zaWduYWwgIT0gVEFSR0VUX1NJR05BTF8wKQogICAgewogICAg ICBwcmludGZfZmlsdGVyZWQgKCJJdCBzdG9wcGVkIHdpdGggc2lnbmFsICVzLCAlcy5cbiIs CgkJICAgICAgIHRhcmdldF9zaWduYWxfdG9fbmFtZSAoc3RvcF9zaWduYWwpLAoJCSAgICAg ICB0YXJnZXRfc2lnbmFsX3RvX3N0cmluZyAoc3RvcF9zaWduYWwpKTsKICAgIH0KCiAgaWYg KCFmcm9tX3R0eSkKICAgIHByaW50Zl9maWx0ZXJlZCAoIlR5cGUgXCJpbmZvIHN0YWNrXCIg b3IgXCJpbmZvIHJlZ2lzdGVyc1wiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIik7Cn0KDApz dGF0aWMgdm9pZAplbnZpcm9ubWVudF9pbmZvICh2YXIsIGZyb21fdHR5KQogICAgIGNoYXIg KnZhcjsKICAgICBpbnQgZnJvbV90dHk7CnsKICBpZiAodmFyKQogICAgewogICAgICByZWdp c3RlciBjaGFyICp2YWwgPSBnZXRfaW5fZW52aXJvbiAoaW5mZXJpb3JfZW52aXJvbiwgdmFy KTsKICAgICAgaWYgKHZhbCkKCXsKCSAgcHV0c19maWx0ZXJlZCAodmFyKTsKCSAgcHV0c19m aWx0ZXJlZCAoIiA9ICIpOwoJICBwdXRzX2ZpbHRlcmVkICh2YWwpOwoJICBwdXRzX2ZpbHRl cmVkICgiXG4iKTsKCX0KICAgICAgZWxzZQoJewoJICBwdXRzX2ZpbHRlcmVkICgiRW52aXJv bm1lbnQgdmFyaWFibGUgXCIiKTsKCSAgcHV0c19maWx0ZXJlZCAodmFyKTsKCSAgcHV0c19m aWx0ZXJlZCAoIlwiIG5vdCBkZWZpbmVkLlxuIik7Cgl9CiAgICB9CiAgZWxzZQogICAgewog ICAgICByZWdpc3RlciBjaGFyICoqdmVjdG9yID0gZW52aXJvbl92ZWN0b3IgKGluZmVyaW9y X2Vudmlyb24pOwogICAgICB3aGlsZSAoKnZlY3RvcikKCXsKCSAgcHV0c19maWx0ZXJlZCAo KnZlY3RvcisrKTsKCSAgcHV0c19maWx0ZXJlZCAoIlxuIik7Cgl9CiAgICB9Cn0KCnN0YXRp YyB2b2lkCnNldF9lbnZpcm9ubWVudF9jb21tYW5kIChhcmcsIGZyb21fdHR5KQogICAgIGNo YXIgKmFyZzsKICAgICBpbnQgZnJvbV90dHk7CnsKICByZWdpc3RlciBjaGFyICpwLCAqdmFs LCAqdmFyOwogIGludCBudWxsc2V0ID0gMDsKCiAgaWYgKGFyZyA9PSAwKQogICAgZXJyb3Jf bm9fYXJnICgiZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHZhbHVlIik7CgogIC8qIEZpbmQg c2VwZXJhdGlvbiBiZXR3ZWVuIHZhcmlhYmxlIG5hbWUgYW5kIHZhbHVlICovCiAgcCA9IChj aGFyICopIHN0cmNociAoYXJnLCAnPScpOwogIHZhbCA9IChjaGFyICopIHN0cmNociAoYXJn LCAnICcpOwoKICBpZiAocCAhPSAwICYmIHZhbCAhPSAwKQogICAgewogICAgICAvKiBXZSBo YXZlIGJvdGggYSBzcGFjZSBhbmQgYW4gZXF1YWxzLiAgSWYgdGhlIHNwYWNlIGlzIGJlZm9y ZSB0aGUKCSBlcXVhbHMsIHdhbGsgZm9yd2FyZCBvdmVyIHRoZSBzcGFjZXMgdGlsIHdlIHNl ZSBhIG5vbnNwYWNlIAoJIChwb3NzaWJseSB0aGUgZXF1YWxzKS4gKi8KICAgICAgaWYgKHAg PiB2YWwpCgl3aGlsZSAoKnZhbCA9PSAnICcpCgkgIHZhbCsrOwoKICAgICAgLyogTm93IGlm IHRoZSA9IGlzIGFmdGVyIHRoZSBjaGFyIGZvbGxvd2luZyB0aGUgc3BhY2VzLAoJIHRha2Ug dGhlIGNoYXIgZm9sbG93aW5nIHRoZSBzcGFjZXMuICAqLwogICAgICBpZiAocCA+IHZhbCkK CXAgPSB2YWwgLSAxOwogICAgfQogIGVsc2UgaWYgKHZhbCAhPSAwICYmIHAgPT0gMCkKICAg IHAgPSB2YWw7CgogIGlmIChwID09IGFyZykKICAgIGVycm9yX25vX2FyZyAoImVudmlyb25t ZW50IHZhcmlhYmxlIHRvIHNldCIpOwoKICBpZiAocCA9PSAwIHx8IHBbMV0gPT0gMCkKICAg IHsKICAgICAgbnVsbHNldCA9IDE7CiAgICAgIGlmIChwID09IDApCglwID0gYXJnICsgc3Ry bGVuIChhcmcpOwkvKiBTbyB0aGF0IHNhdmVzdHJpbmcgYmVsb3cgd2lsbCB3b3JrICovCiAg ICB9CiAgZWxzZQogICAgewogICAgICAvKiBOb3Qgc2V0dGluZyB2YXJpYWJsZSB2YWx1ZSB0 byBudWxsICovCiAgICAgIHZhbCA9IHAgKyAxOwogICAgICB3aGlsZSAoKnZhbCA9PSAnICcg fHwgKnZhbCA9PSAnXHQnKQoJdmFsKys7CiAgICB9CgogIHdoaWxlIChwICE9IGFyZyAmJiAo cFstMV0gPT0gJyAnIHx8IHBbLTFdID09ICdcdCcpKSBwLS07CgogIHZhciA9IHNhdmVzdHJp bmcgKGFyZywgcCAtIGFyZyk7CiAgaWYgKG51bGxzZXQpCiAgICB7CiAgICAgIHByaW50Zl9m aWx0ZXJlZCAoIlNldHRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgXCIlc1wiIHRvIG51bGwg dmFsdWUuXG4iLCB2YXIpOwogICAgICBzZXRfaW5fZW52aXJvbiAoaW5mZXJpb3JfZW52aXJv biwgdmFyLCAiIik7CiAgICB9CiAgZWxzZQogICAgc2V0X2luX2Vudmlyb24gKGluZmVyaW9y X2Vudmlyb24sIHZhciwgdmFsKTsKICBmcmVlICh2YXIpOwp9CgpzdGF0aWMgdm9pZAp1bnNl dF9lbnZpcm9ubWVudF9jb21tYW5kICh2YXIsIGZyb21fdHR5KQogICAgIGNoYXIgKnZhcjsK ICAgICBpbnQgZnJvbV90dHk7CnsKICBpZiAodmFyID09IDApCiAgICB7CiAgICAgIC8qIElm IHRoZXJlIGlzIG5vIGFyZ3VtZW50LCBkZWxldGUgYWxsIGVudmlyb25tZW50IHZhcmlhYmxl cy4KCSBBc2sgZm9yIGNvbmZpcm1hdGlvbiBpZiByZWFkaW5nIGZyb20gdGhlIHRlcm1pbmFs LiAgKi8KICAgICAgaWYgKCFmcm9tX3R0eSB8fCBxdWVyeSAoIkRlbGV0ZSBhbGwgZW52aXJv bm1lbnQgdmFyaWFibGVzPyAiKSkKCXsKCSAgZnJlZV9lbnZpcm9uIChpbmZlcmlvcl9lbnZp cm9uKTsKCSAgaW5mZXJpb3JfZW52aXJvbiA9IG1ha2VfZW52aXJvbiAoKTsKCX0KICAgIH0K ICBlbHNlCiAgICB1bnNldF9pbl9lbnZpcm9uIChpbmZlcmlvcl9lbnZpcm9uLCB2YXIpOwp9 CgovKiBIYW5kbGUgdGhlIGV4ZWN1dGlvbiBwYXRoIChQQVRIIHZhcmlhYmxlKSAqLwoKc3Rh dGljIGNvbnN0IGNoYXIgcGF0aF92YXJfbmFtZVtdID0gIlBBVEgiOwoKLyogQVJHU1VTRUQg Ki8Kc3RhdGljIHZvaWQKcGF0aF9pbmZvIChhcmdzLCBmcm9tX3R0eSkKICAgICBjaGFyICph cmdzOwogICAgIGludCBmcm9tX3R0eTsKewogIHB1dHNfZmlsdGVyZWQgKCJFeGVjdXRhYmxl IGFuZCBvYmplY3QgZmlsZSBwYXRoOiAiKTsKICBwdXRzX2ZpbHRlcmVkIChnZXRfaW5fZW52 aXJvbiAoaW5mZXJpb3JfZW52aXJvbiwgcGF0aF92YXJfbmFtZSkpOwogIHB1dHNfZmlsdGVy ZWQgKCJcbiIpOwp9CgovKiBBZGQgemVybyBvciBtb3JlIGRpcmVjdG9yaWVzIHRvIHRoZSBm cm9udCBvZiB0aGUgZXhlY3V0aW9uIHBhdGguICAqLwoKc3RhdGljIHZvaWQKcGF0aF9jb21t YW5kIChkaXJuYW1lLCBmcm9tX3R0eSkKICAgICBjaGFyICpkaXJuYW1lOwogICAgIGludCBm cm9tX3R0eTsKewogIGNoYXIgKmV4ZWNfcGF0aDsKICBjaGFyICplbnY7CiAgZG9udF9yZXBl YXQgKCk7CiAgZW52ID0gZ2V0X2luX2Vudmlyb24gKGluZmVyaW9yX2Vudmlyb24sIHBhdGhf dmFyX25hbWUpOwogIC8qIENhbiBiZSBudWxsIGlmIHBhdGggaXMgbm90IHNldCAqLwogIGlm ICghZW52KQogICAgZW52ID0gIiI7CiAgZXhlY19wYXRoID0gc3Ryc2F2ZSAoZW52KTsKICBt b2RfcGF0aCAoZGlybmFtZSwgJmV4ZWNfcGF0aCk7CiAgc2V0X2luX2Vudmlyb24gKGluZmVy aW9yX2Vudmlyb24sIHBhdGhfdmFyX25hbWUsIGV4ZWNfcGF0aCk7CiAgZnJlZSAoZXhlY19w YXRoKTsKICBpZiAoZnJvbV90dHkpCiAgICBwYXRoX2luZm8gKChjaGFyICopTlVMTCwgZnJv bV90dHkpOwp9CgwKLyogVGhlIGFycmF5IG9mIHJlZ2lzdGVyIG5hbWVzLiAgKi8KCmNoYXIg KnJlZ19uYW1lc1tdID0gUkVHSVNURVJfTkFNRVM7CgovKiBQcmludCBvdXQgdGhlIG1hY2hp bmUgcmVnaXN0ZXIgcmVnbnVtLiBJZiByZWdudW0gaXMgLTEsCiAgIHByaW50IGFsbCByZWdp c3RlcnMgKGZwcmVncyA9PSAxKSBvciBhbGwgbm9uLWZsb2F0IHJlZ2lzdGVycwogICAoZnBy ZWdzID09IDApLgoKICAgRm9yIG1vc3QgbWFjaGluZXMsIGhhdmluZyBhbGxfcmVnaXN0ZXJz X2luZm8oKSBwcmludCB0aGUKICAgcmVnaXN0ZXIocykgb25lIHBlciBsaW5lIGlzIGdvb2Qg ZW5vdWdoLiBJZiBhIGRpZmZlcmVudCBmb3JtYXQKICAgaXMgcmVxdWlyZWQsIChlZywgZm9y IE1JUFMgb3IgUHlyYW1pZCA5MHgsIHdoaWNoIGJvdGggaGF2ZQogICBsb3RzIG9mIHJlZ3Mp LCBvciB0aGVyZSBpcyBhbiBleGlzdGluZyBjb252ZW50aW9uIGZvciBzaG93aW5nCiAgIGFs bCB0aGUgcmVnaXN0ZXJzLCBkZWZpbmUgdGhlIG1hY3JvIERPX1JFR0lTVEVSU19JTkZPKHJl Z251bSwgZnApCiAgIHRvIHByb3ZpZGUgdGhhdCBmb3JtYXQuICAqLyAgCgojaWYgIWRlZmlu ZWQgKERPX1JFR0lTVEVSU19JTkZPKQoKI2RlZmluZSBET19SRUdJU1RFUlNfSU5GTyhyZWdu dW0sIGZwKSBkb19yZWdpc3RlcnNfaW5mbyhyZWdudW0sIGZwKQoKc3RhdGljIHZvaWQKZG9f cmVnaXN0ZXJzX2luZm8gKHJlZ251bSwgZnByZWdzKQogICAgIGludCByZWdudW07CiAgICAg aW50IGZwcmVnczsKewogIHJlZ2lzdGVyIGludCBpOwogIGludCBudW1yZWdzID0gQVJDSF9O VU1fUkVHUzsKCiAgZm9yIChpID0gMDsgaSA8IG51bXJlZ3M7IGkrKykKICAgIHsKICAgICAg Y2hhciByYXdfYnVmZmVyW01BWF9SRUdJU1RFUl9SQVdfU0laRV07CiAgICAgIGNoYXIgdmly dHVhbF9idWZmZXJbTUFYX1JFR0lTVEVSX1ZJUlRVQUxfU0laRV07CgogICAgICAvKiBEZWNp ZGUgYmV0d2VlbiBwcmludGluZyBhbGwgcmVncywgbm9uZmxvYXQgcmVncywgb3Igc3BlY2lm aWMgcmVnLiAgKi8KICAgICAgaWYgKHJlZ251bSA9PSAtMSkgewoJaWYgKFRZUEVfQ09ERSAo UkVHSVNURVJfVklSVFVBTF9UWVBFIChpKSkgPT0gVFlQRV9DT0RFX0ZMVCAmJiAhZnByZWdz KQoJICBjb250aW51ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaSAhPSByZWdudW0p CgkgIGNvbnRpbnVlOwogICAgICB9CgogICAgICAvKiBJZiB0aGUgcmVnaXN0ZXIgbmFtZSBp cyBlbXB0eSwgaXQgaXMgdW5kZWZpbmVkIGZvciB0aGlzCgkgcHJvY2Vzc29yLCBzbyBkb24n dCBkaXNwbGF5IGFueXRoaW5nLiAgKi8KICAgICAgaWYgKHJlZ19uYW1lc1tpXSA9PSBOVUxM IHx8ICoocmVnX25hbWVzW2ldKSA9PSAnXDAnKQoJY29udGludWU7CgogICAgICBmcHV0c19m aWx0ZXJlZCAocmVnX25hbWVzW2ldLCBnZGJfc3Rkb3V0KTsKICAgICAgcHJpbnRfc3BhY2Vz X2ZpbHRlcmVkICgxNSAtIHN0cmxlbiAocmVnX25hbWVzW2ldKSwgZ2RiX3N0ZG91dCk7Cgog ICAgICAvKiBHZXQgdGhlIGRhdGEgaW4gcmF3IGZvcm1hdC4gICovCiAgICAgIGlmIChyZWFk X3JlbGF0aXZlX3JlZ2lzdGVyX3Jhd19ieXRlcyAoaSwgcmF3X2J1ZmZlcikpCgl7CgkgIHBy aW50Zl9maWx0ZXJlZCAoIkludmFsaWQgcmVnaXN0ZXIgY29udGVudHNcbiIpOwoJICBjb250 aW51ZTsKCX0KCiAgICAgIC8qIENvbnZlcnQgcmF3IGRhdGEgdG8gdmlydHVhbCBmb3JtYXQg aWYgbmVjZXNzYXJ5LiAgKi8KI2lmZGVmIFJFR0lTVEVSX0NPTlZFUlRJQkxFCiAgICAgIGlm IChSRUdJU1RFUl9DT05WRVJUSUJMRSAoaSkpCgl7CgkgIFJFR0lTVEVSX0NPTlZFUlRfVE9f VklSVFVBTCAoaSwgUkVHSVNURVJfVklSVFVBTF9UWVBFIChpKSwKCQkJCSAgICAgICByYXdf YnVmZmVyLCB2aXJ0dWFsX2J1ZmZlcik7Cgl9CiAgICAgIGVsc2UKI2VuZGlmCgltZW1jcHkg KHZpcnR1YWxfYnVmZmVyLCByYXdfYnVmZmVyLAoJCVJFR0lTVEVSX1ZJUlRVQUxfU0laRSAo aSkpOwoKICAgICAgLyogSWYgdmlydHVhbCBmb3JtYXQgaXMgZmxvYXRpbmcsIHByaW50IGl0 IHRoYXQgd2F5LCBhbmQgaW4gcmF3IGhleC4gICovCiAgICAgIGlmIChUWVBFX0NPREUgKFJF R0lTVEVSX1ZJUlRVQUxfVFlQRSAoaSkpID09IFRZUEVfQ09ERV9GTFQpCgl7CgkgIHJlZ2lz dGVyIGludCBqOwoKI2lmZGVmIElOVkFMSURfRkxPQVQKCSAgaWYgKElOVkFMSURfRkxPQVQg KHZpcnR1YWxfYnVmZmVyLCBSRUdJU1RFUl9WSVJUVUFMX1NJWkUgKGkpKSkKCSAgICBwcmlu dGZfZmlsdGVyZWQgKCI8aW52YWxpZCBmbG9hdD4iKTsKCSAgZWxzZQojZW5kaWYKCSAgICB2 YWxfcHJpbnQgKFJFR0lTVEVSX1ZJUlRVQUxfVFlQRSAoaSksIHZpcnR1YWxfYnVmZmVyLCAw LAoJCSAgICAgICBnZGJfc3Rkb3V0LCAwLCAxLCAwLCBWYWxfcHJldHR5X2RlZmF1bHQpOwoK CSAgcHJpbnRmX2ZpbHRlcmVkICgiXHQocmF3IDB4Iik7CgkgIGZvciAoaiA9IDA7IGogPCBS RUdJU1RFUl9SQVdfU0laRSAoaSk7IGorKykKCSAgICB7CgkgICAgICByZWdpc3RlciBpbnQg aWR4ID0gVEFSR0VUX0JZVEVfT1JERVIgPT0gQklHX0VORElBTiA/IGoKCQk6IFJFR0lTVEVS X1JBV19TSVpFIChpKSAtIDEgLSBqOwoJICAgICAgcHJpbnRmX2ZpbHRlcmVkICgiJTAyeCIs ICh1bnNpZ25lZCBjaGFyKXJhd19idWZmZXJbaWR4XSk7CgkgICAgfQoJICBwcmludGZfZmls dGVyZWQgKCIpIik7Cgl9CgovKiBGSVhNRSEgIHZhbF9wcmludCBwcm9iYWJseSBjYW4gaGFu ZGxlIGFsbCBvZiB0aGVzZSBjYXNlcyBub3cuLi4gICovCgogICAgICAvKiBFbHNlIGlmIHZp cnR1YWwgZm9ybWF0IGlzIHRvbyBsb25nIGZvciBwcmludGYsCgkgcHJpbnQgaW4gaGV4IGEg Ynl0ZSBhdCBhIHRpbWUuICAqLwogICAgICBlbHNlIGlmIChSRUdJU1RFUl9WSVJUVUFMX1NJ WkUgKGkpID4gKGludCkgc2l6ZW9mIChsb25nKSkKCXsKCSAgcmVnaXN0ZXIgaW50IGo7Cgkg IHByaW50Zl9maWx0ZXJlZCAoIjB4Iik7CgkgIGZvciAoaiA9IDA7IGogPCBSRUdJU1RFUl9W SVJUVUFMX1NJWkUgKGkpOyBqKyspCgkgICAgcHJpbnRmX2ZpbHRlcmVkICgiJTAyeCIsICh1 bnNpZ25lZCBjaGFyKXZpcnR1YWxfYnVmZmVyW2pdKTsKCX0KICAgICAgLyogRWxzZSBwcmlu dCBhcyBpbnRlZ2VyIGluIGhleCBhbmQgaW4gZGVjaW1hbC4gICovCiAgICAgIGVsc2UKCXsK CSAgdmFsX3ByaW50IChSRUdJU1RFUl9WSVJUVUFMX1RZUEUgKGkpLCB2aXJ0dWFsX2J1ZmZl ciwgMCwKCQkgICAgIGdkYl9zdGRvdXQsICd4JywgMSwgMCwgVmFsX3ByZXR0eV9kZWZhdWx0 KTsKCSAgcHJpbnRmX2ZpbHRlcmVkICgiXHQiKTsKCSAgdmFsX3ByaW50IChSRUdJU1RFUl9W SVJUVUFMX1RZUEUgKGkpLCB2aXJ0dWFsX2J1ZmZlciwgMCwKCQkgICAgIGdkYl9zdGRvdXQs ICAgMCwgMSwgMCwgVmFsX3ByZXR0eV9kZWZhdWx0KTsKCX0KCiAgICAgIC8qIFRoZSBTUEFS QyB3YW50cyB0byBwcmludCBldmVuLW51bWJlcmVkIGZsb2F0IHJlZ3MgYXMgZG91YmxlcwoJ IGluIGFkZGl0aW9uIHRvIHByaW50aW5nIHRoZW0gYXMgZmxvYXRzLiAgKi8KI2lmZGVmIFBS SU5UX1JFR0lTVEVSX0hPT0sKICAgICAgUFJJTlRfUkVHSVNURVJfSE9PSyAoaSk7CiNlbmRp ZgoKICAgICAgcHJpbnRmX2ZpbHRlcmVkICgiXG4iKTsKICAgIH0KfQojZW5kaWYgLyogbm8g RE9fUkVHSVNURVJTX0lORk8uICAqLwoKc3RhdGljIHZvaWQKcmVnaXN0ZXJzX2luZm8gKGFk ZHJfZXhwLCBmcHJlZ3MpCiAgICAgY2hhciAqYWRkcl9leHA7CiAgICAgaW50IGZwcmVnczsK ewogIGludCByZWdudW0sIG51bXJlZ3M7CiAgcmVnaXN0ZXIgY2hhciAqZW5kOwoKICBpZiAo IXRhcmdldF9oYXNfcmVnaXN0ZXJzKQogICAgZXJyb3IgKCJUaGUgcHJvZ3JhbSBoYXMgbm8g cmVnaXN0ZXJzIG5vdy4iKTsKICBpZiAoc2VsZWN0ZWRfZnJhbWUgPT0gTlVMTCkKICAgIGVy cm9yICgiTm8gc2VsZWN0ZWQgZnJhbWUuIik7CgogIGlmICghYWRkcl9leHApCiAgICB7CiAg ICAgIERPX1JFR0lTVEVSU19JTkZPKC0xLCBmcHJlZ3MpOwogICAgICByZXR1cm47CiAgICB9 CgogIGRvCiAgICB7ICAgICAgCiAgICAgIGlmIChhZGRyX2V4cFswXSA9PSAnJCcpCglhZGRy X2V4cCsrOwogICAgICBlbmQgPSBhZGRyX2V4cDsKICAgICAgd2hpbGUgKCplbmQgIT0gJ1ww JyAmJiAqZW5kICE9ICcgJyAmJiAqZW5kICE9ICdcdCcpCgkrK2VuZDsKICAgICAgbnVtcmVn cyA9IEFSQ0hfTlVNX1JFR1M7CiAgICAgIGZvciAocmVnbnVtID0gMDsgcmVnbnVtIDwgbnVt cmVnczsgcmVnbnVtKyspCglpZiAoIXN0cm5jbXAgKGFkZHJfZXhwLCByZWdfbmFtZXNbcmVn bnVtXSwgZW5kIC0gYWRkcl9leHApCgkgICAgJiYgc3RybGVuIChyZWdfbmFtZXNbcmVnbnVt XSkgPT0gZW5kIC0gYWRkcl9leHApCgkgIGdvdG8gZm91bmQ7CiAgICAgIGlmICgqYWRkcl9l eHAgPj0gJzAnICYmICphZGRyX2V4cCA8PSAnOScpCglyZWdudW0gPSBhdG9pIChhZGRyX2V4 cCk7CQkvKiBUYWtlIGEgbnVtYmVyICovCiAgICAgIGlmIChyZWdudW0gPj0gbnVtcmVncykJ CS8qIEJhZCBuYW1lLCBvciBiYWQgbnVtYmVyICovCgllcnJvciAoIiUuKnM6IGludmFsaWQg cmVnaXN0ZXIiLCBlbmQgLSBhZGRyX2V4cCwgYWRkcl9leHApOwoKZm91bmQ6CiAgICAgIERP X1JFR0lTVEVSU19JTkZPKHJlZ251bSwgZnByZWdzKTsKCiAgICAgIGFkZHJfZXhwID0gZW5k OwogICAgICB3aGlsZSAoKmFkZHJfZXhwID09ICcgJyB8fCAqYWRkcl9leHAgPT0gJ1x0JykK CSsrYWRkcl9leHA7CiAgICB9IHdoaWxlICgqYWRkcl9leHAgIT0gJ1wwJyk7Cn0KCnN0YXRp YyB2b2lkCmFsbF9yZWdpc3RlcnNfaW5mbyAoYWRkcl9leHAsIGZyb21fdHR5KQogICAgIGNo YXIgKmFkZHJfZXhwOwogICAgIGludCBmcm9tX3R0eTsKewogIHJlZ2lzdGVyc19pbmZvIChh ZGRyX2V4cCwgMSk7Cn0KCnN0YXRpYyB2b2lkCm5vZnBfcmVnaXN0ZXJzX2luZm8gKGFkZHJf ZXhwLCBmcm9tX3R0eSkKICAgICBjaGFyICphZGRyX2V4cDsKICAgICBpbnQgZnJvbV90dHk7 CnsKICByZWdpc3RlcnNfaW5mbyAoYWRkcl9leHAsIDApOwp9CgwKLyoKICogVE9ETzoKICog U2hvdWxkIHNhdmUvcmVzdG9yZSB0aGUgdHR5IHN0YXRlIHNpbmNlIGl0IG1pZ2h0IGJlIHRo YXQgdGhlCiAqIHByb2dyYW0gdG8gYmUgZGVidWdnZWQgd2FzIHN0YXJ0ZWQgb24gdGhpcyB0 dHkgYW5kIGl0IHdhbnRzCiAqIHRoZSB0dHkgaW4gc29tZSBzdGF0ZSBvdGhlciB0aGFuIHdo YXQgd2Ugd2FudC4gIElmIGl0J3MgcnVubmluZwogKiBvbiBhbm90aGVyIHRlcm1pbmFsIG9y IHdpdGhvdXQgYSB0ZXJtaW5hbCwgdGhlbiBzYXZpbmcgYW5kCiAqIHJlc3RvcmluZyB0aGUg dHR5IHN0YXRlIGlzIGEgaGFybWxlc3Mgbm8tb3AuCiAqIFRoaXMgb25seSBuZWVkcyB0byBi ZSBkb25lIGlmIHdlIGFyZSBhdHRhY2hpbmcgdG8gYSBwcm9jZXNzLgogKi8KCi8qCiAgIGF0 dGFjaF9jb21tYW5kIC0tCiAgIHRha2VzIGEgcHJvZ3JhbSBzdGFydGVkIHVwIG91dHNpZGUg b2YgZ2RiIGFuZCBgYGF0dGFjaGVzJycgdG8gaXQuCiAgIFRoaXMgc3RvcHMgaXQgY29sZCBp biBpdHMgdHJhY2tzIGFuZCBhbGxvd3MgdXMgdG8gc3RhcnQgZGVidWdnaW5nIGl0LgogICBh bmQgd2FpdCBmb3IgdGhlIHRyYWNlLXRyYXAgdGhhdCByZXN1bHRzIGZyb20gYXR0YWNoaW5n LiAgKi8KCnZvaWQKYXR0YWNoX2NvbW1hbmQgKGFyZ3MsIGZyb21fdHR5KQogICAgIGNoYXIg KmFyZ3M7CiAgICAgaW50IGZyb21fdHR5Owp7CiNpZmRlZiBTT0xJQl9BREQKICBleHRlcm4g aW50IGF1dG9fc29saWJfYWRkOwojZW5kaWYKCiAgZG9udF9yZXBlYXQgKCk7CQkJLyogTm90 IGZvciB0aGUgZmFpbnQgb2YgaGVhcnQgKi8KCiAgaWYgKHRhcmdldF9oYXNfZXhlY3V0aW9u KQogICAgewogICAgICBpZiAocXVlcnkgKCJBIHByb2dyYW0gaXMgYmVpbmcgZGVidWdnZWQg YWxyZWFkeS4gIEtpbGwgaXQ/ICIpKQoJdGFyZ2V0X2tpbGwgKCk7CiAgICAgIGVsc2UKCWVy cm9yICgiTm90IGtpbGxlZC4iKTsKICAgIH0KCiAgdGFyZ2V0X2F0dGFjaCAoYXJncywgZnJv bV90dHkpOwoKICAvKiBTZXQgdXAgdGhlICJzYXZlZCB0ZXJtaW5hbCBtb2RlcyIgb2YgdGhl IGluZmVyaW9yCiAgICAgYmFzZWQgb24gd2hhdCBtb2RlcyB3ZSBhcmUgc3RhcnRpbmcgaXQg d2l0aC4gICovCiAgdGFyZ2V0X3Rlcm1pbmFsX2luaXQgKCk7CgogIC8qIEluc3RhbGwgaW5m ZXJpb3IncyB0ZXJtaW5hbCBtb2Rlcy4gICovCiAgdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9y ICgpOwoKICAvKiBTZXQgdXAgZXhlY3V0aW9uIGNvbnRleHQgdG8ga25vdyB0aGF0IHdlIHNo b3VsZCByZXR1cm4gZnJvbQogICAgIHdhaXRfZm9yX2luZmVyaW9yIGFzIHNvb24gYXMgdGhl IHRhcmdldCByZXBvcnRzIGEgc3RvcC4gICovCiAgaW5pdF93YWl0X2Zvcl9pbmZlcmlvciAo KTsKICBjbGVhcl9wcm9jZWVkX3N0YXR1cyAoKTsKICBzdG9wX3Nvb25fcXVpZXRseSA9IDE7 CgogIC8qIE5vIHRyYXBzIGFyZSBnZW5lcmF0ZWQgd2hlbiBhdHRhY2hpbmcgdG8gaW5mZXJp b3IgdW5kZXIgTWFjaCAzCiAgICAgb3IgR05VIGh1cmQuICAqLwojaWZuZGVmIEFUVEFDSF9O T19XQUlUCiAgd2FpdF9mb3JfaW5mZXJpb3IgKCk7CiNlbmRpZgoKI2lmZGVmIFNPTElCX0FE RAogIGlmIChhdXRvX3NvbGliX2FkZCkKICAgIHsKICAgICAgLyogQWRkIHNoYXJlZCBsaWJy YXJ5IHN5bWJvbHMgZnJvbSB0aGUgbmV3bHkgYXR0YWNoZWQgcHJvY2VzcywgaWYgYW55LiAg Ki8KICAgICAgU09MSUJfQUREICgoY2hhciAqKTAsIGZyb21fdHR5LCAoc3RydWN0IHRhcmdl dF9vcHMgKikwKTsKICAgICAgcmVfZW5hYmxlX2JyZWFrcG9pbnRzX2luX3NobGlicyAoKTsK ICAgIH0KI2VuZGlmCgogIG5vcm1hbF9zdG9wICgpOwp9CgovKgogKiBkZXRhY2hfY29tbWFu ZCAtLQogKiB0YWtlcyBhIHByb2dyYW0gcHJldmlvdXNseSBhdHRhY2hlZCB0byBhbmQgZGV0 YWNoZXMgaXQuCiAqIFRoZSBwcm9ncmFtIHJlc3VtZXMgZXhlY3V0aW9uIGFuZCB3aWxsIG5v IGxvbmdlciBzdG9wCiAqIG9uIHNpZ25hbHMsIGV0Yy4gIFdlIGJldHRlciBub3QgaGF2ZSBs ZWZ0IGFueSBicmVha3BvaW50cwogKiBpbiB0aGUgcHJvZ3JhbSBvciBpdCdsbCBkaWUgd2hl biBpdCBoaXRzIG9uZS4gIEZvciB0aGlzCiAqIHRvIHdvcmssIGl0IG1heSBiZSBuZWNlc3Nh cnkgZm9yIHRoZSBwcm9jZXNzIHRvIGhhdmUgYmVlbgogKiBwcmV2aW91c2x5IGF0dGFjaGVk LiAgSXQgKm1pZ2h0KiB3b3JrIGlmIHRoZSBwcm9ncmFtIHdhcwogKiBzdGFydGVkIHZpYSB0 aGUgbm9ybWFsIHB0cmFjZSAoUFRSQUNFX1RSQUNFTUUpLgogKi8KCnN0YXRpYyB2b2lkCmRl dGFjaF9jb21tYW5kIChhcmdzLCBmcm9tX3R0eSkKICAgICBjaGFyICphcmdzOwogICAgIGlu dCBmcm9tX3R0eTsKewogIGRvbnRfcmVwZWF0ICgpOwkJCS8qIE5vdCBmb3IgdGhlIGZhaW50 IG9mIGhlYXJ0ICovCiAgdGFyZ2V0X2RldGFjaCAoYXJncywgZnJvbV90dHkpOwp9CgovKiBB UkdTVVNFRCAqLwpzdGF0aWMgdm9pZApmbG9hdF9pbmZvIChhZGRyX2V4cCwgZnJvbV90dHkp CiAgICAgY2hhciAqYWRkcl9leHA7CiAgICAgaW50IGZyb21fdHR5Owp7CiNpZmRlZiBGTE9B VF9JTkZPCglGTE9BVF9JTkZPOwojZWxzZQoJcHJpbnRmX2ZpbHRlcmVkICgiTm8gZmxvYXRp bmcgcG9pbnQgaW5mbyBhdmFpbGFibGUgZm9yIHRoaXMgcHJvY2Vzc29yLlxuIik7CiNlbmRp Zgp9CgwKLyogQVJHU1VTRUQgKi8Kc3RhdGljIHZvaWQKdW5zZXRfY29tbWFuZCAoYXJncywg ZnJvbV90dHkpCiAgICAgY2hhciAqYXJnczsKICAgICBpbnQgZnJvbV90dHk7CnsKICBwcmlu dGZfZmlsdGVyZWQgKCJcInVuc2V0XCIgbXVzdCBiZSBmb2xsb3dlZCBieSB0aGUgbmFtZSBv ZiBhbiB1bnNldCBzdWJjb21tYW5kLlxuIik7CiAgaGVscF9saXN0ICh1bnNldGxpc3QsICJ1 bnNldCAiLCAtMSwgZ2RiX3N0ZG91dCk7Cn0KCnZvaWQKX2luaXRpYWxpemVfaW5mY21kICgp CnsKICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYzsKICAKICBhZGRfY29tICgidHR5Iiwg Y2xhc3NfcnVuLCB0dHlfY29tbWFuZCwKCSAgICJTZXQgdGVybWluYWwgZm9yIGZ1dHVyZSBy dW5zIG9mIHByb2dyYW0gYmVpbmcgZGVidWdnZWQuIik7CgogIGFkZF9zaG93X2Zyb21fc2V0 CiAgICAoYWRkX3NldF9jbWQgKCJhcmdzIiwgY2xhc3NfcnVuLCB2YXJfc3RyaW5nX25vZXNj YXBlLCAoY2hhciAqKSZpbmZlcmlvcl9hcmdzLAoJCSAgCiJTZXQgYXJndW1lbnRzIHRvIGdp dmUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCB3aGVuIGl0IGlzIHN0YXJ0ZWQuXG5cCkZvbGxv dyB0aGlzIGNvbW1hbmQgd2l0aCBhbnkgbnVtYmVyIG9mIGFyZ3MsIHRvIGJlIHBhc3NlZCB0 byB0aGUgcHJvZ3JhbS4iLAoJCSAgJnNldGxpc3QpLAogICAgICZzaG93bGlzdCk7CgogIGMg PSBhZGRfY21kCiAgICAoImVudmlyb25tZW50Iiwgbm9fY2xhc3MsIGVudmlyb25tZW50X2lu Zm8sCiAgICAgIlRoZSBlbnZpcm9ubWVudCB0byBnaXZlIHRoZSBwcm9ncmFtLCBvciBvbmUg dmFyaWFibGUncyB2YWx1ZS5cblwKV2l0aCBhbiBhcmd1bWVudCBWQVIsIHByaW50cyB0aGUg dmFsdWUgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgVkFSIHRvXG5cCmdpdmUgdGhlIHByb2dy YW0gYmVpbmcgZGVidWdnZWQuICBXaXRoIG5vIGFyZ3VtZW50cywgcHJpbnRzIHRoZSBlbnRp cmVcblwKZW52aXJvbm1lbnQgdG8gYmUgZ2l2ZW4gdG8gdGhlIHByb2dyYW0uIiwgJnNob3ds aXN0KTsKICBjLT5jb21wbGV0ZXIgPSBub29wX2NvbXBsZXRlcjsKCiAgYWRkX3ByZWZpeF9j bWQgKCJ1bnNldCIsIG5vX2NsYXNzLCB1bnNldF9jb21tYW5kLAoJCSAgIkNvbXBsZW1lbnQg dG8gY2VydGFpbiBcInNldFwiIGNvbW1hbmRzIiwKCQkgICZ1bnNldGxpc3QsICJ1bnNldCAi LCAwLCAmY21kbGlzdCk7CiAgCiAgYyA9IGFkZF9jbWQgKCJlbnZpcm9ubWVudCIsIGNsYXNz X3J1biwgdW5zZXRfZW52aXJvbm1lbnRfY29tbWFuZCwKCSAgICAgICJDYW5jZWwgZW52aXJv bm1lbnQgdmFyaWFibGUgVkFSIGZvciB0aGUgcHJvZ3JhbS5cblwKVGhpcyBkb2VzIG5vdCBh ZmZlY3QgdGhlIHByb2dyYW0gdW50aWwgdGhlIG5leHQgXCJydW5cIiBjb21tYW5kLiIsCgkg ICAmdW5zZXRsaXN0KTsKICBjLT5jb21wbGV0ZXIgPSBub29wX2NvbXBsZXRlcjsKCiAgYyA9 IGFkZF9jbWQgKCJlbnZpcm9ubWVudCIsIGNsYXNzX3J1biwgc2V0X2Vudmlyb25tZW50X2Nv bW1hbmQsCgkgICAgICAgIlNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSB0byBnaXZl IHRoZSBwcm9ncmFtLlxuXApBcmd1bWVudHMgYXJlIFZBUiBWQUxVRSB3aGVyZSBWQVIgaXMg dmFyaWFibGUgbmFtZSBhbmQgVkFMVUUgaXMgdmFsdWUuXG5cClZBTFVFUyBvZiBlbnZpcm9u bWVudCB2YXJpYWJsZXMgYXJlIHVuaW50ZXJwcmV0ZWQgc3RyaW5ncy5cblwKVGhpcyBkb2Vz IG5vdCBhZmZlY3QgdGhlIHByb2dyYW0gdW50aWwgdGhlIG5leHQgXCJydW5cIiBjb21tYW5k LiIsCgkgICAmc2V0bGlzdCk7CiAgYy0+Y29tcGxldGVyID0gbm9vcF9jb21wbGV0ZXI7CiAK ICBhZGRfY29tICgicGF0aCIsIGNsYXNzX2ZpbGVzLCBwYXRoX2NvbW1hbmQsCiAgICAgICAi QWRkIGRpcmVjdG9yeSBESVIocykgdG8gYmVnaW5uaW5nIG9mIHNlYXJjaCBwYXRoIGZvciBv YmplY3QgZmlsZXMuXG5cCiRjd2QgaW4gdGhlIHBhdGggbWVhbnMgdGhlIGN1cnJlbnQgd29y a2luZyBkaXJlY3RvcnkuXG5cClRoaXMgcGF0aCBpcyBlcXVpdmFsZW50IHRvIHRoZSAkUEFU SCBzaGVsbCB2YXJpYWJsZS4gIEl0IGlzIGEgbGlzdCBvZlxuXApkaXJlY3Rvcmllcywgc2Vw YXJhdGVkIGJ5IGNvbG9ucy4gIFRoZXNlIGRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCB0byBm aW5kXG5cCmZ1bGx5IGxpbmtlZCBleGVjdXRhYmxlIGZpbGVzIGFuZCBzZXBhcmF0ZWx5IGNv bXBpbGVkIG9iamVjdCBmaWxlcyBhcyBuZWVkZWQuIik7CgogIGMgPSBhZGRfY21kICgicGF0 aHMiLCBub19jbGFzcywgcGF0aF9pbmZvLAoJICAgICJDdXJyZW50IHNlYXJjaCBwYXRoIGZv ciBmaW5kaW5nIG9iamVjdCBmaWxlcy5cblwKJGN3ZCBpbiB0aGUgcGF0aCBtZWFucyB0aGUg Y3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cblwKVGhpcyBwYXRoIGlzIGVxdWl2YWxlbnQg dG8gdGhlICRQQVRIIHNoZWxsIHZhcmlhYmxlLiAgSXQgaXMgYSBsaXN0IG9mXG5cCmRpcmVj dG9yaWVzLCBzZXBhcmF0ZWQgYnkgY29sb25zLiAgVGhlc2UgZGlyZWN0b3JpZXMgYXJlIHNl YXJjaGVkIHRvIGZpbmRcblwKZnVsbHkgbGlua2VkIGV4ZWN1dGFibGUgZmlsZXMgYW5kIHNl cGFyYXRlbHkgY29tcGlsZWQgb2JqZWN0IGZpbGVzIGFzIG5lZWRlZC4iLCAmc2hvd2xpc3Qp OwogIGMtPmNvbXBsZXRlciA9IG5vb3BfY29tcGxldGVyOwoKIGFkZF9jb20gKCJhdHRhY2gi LCBjbGFzc19ydW4sIGF0dGFjaF9jb21tYW5kLAogCSAgICJBdHRhY2ggdG8gYSBwcm9jZXNz IG9yIGZpbGUgb3V0c2lkZSBvZiBHREIuXG5cClRoaXMgY29tbWFuZCBhdHRhY2hlcyB0byBh bm90aGVyIHRhcmdldCwgb2YgdGhlIHNhbWUgdHlwZSBhcyB5b3VyIGxhc3RcblwKYHRhcmdl dCcgY29tbWFuZCAoYGluZm8gZmlsZXMnIHdpbGwgc2hvdyB5b3VyIHRhcmdldCBzdGFjayku XG5cClRoZSBjb21tYW5kIG1heSB0YWtlIGFzIGFyZ3VtZW50IGEgcHJvY2VzcyBpZCBvciBh IGRldmljZSBmaWxlLlxuXApGb3IgYSBwcm9jZXNzIGlkLCB5b3UgbXVzdCBoYXZlIHBlcm1p c3Npb24gdG8gc2VuZCB0aGUgcHJvY2VzcyBhIHNpZ25hbCxcblwKYW5kIGl0IG11c3QgaGF2 ZSB0aGUgc2FtZSBlZmZlY3RpdmUgdWlkIGFzIHRoZSBkZWJ1Z2dlci5cblwKV2hlbiB1c2lu ZyBcImF0dGFjaFwiLCB5b3Ugc2hvdWxkIHVzZSB0aGUgXCJmaWxlXCIgY29tbWFuZCB0byBz cGVjaWZ5XG5cCnRoZSBwcm9ncmFtIHJ1bm5pbmcgaW4gdGhlIHByb2Nlc3MsIGFuZCB0byBs b2FkIGl0cyBzeW1ib2wgdGFibGUuIik7CgogIGFkZF9jb20gKCJkZXRhY2giLCBjbGFzc19y dW4sIGRldGFjaF9jb21tYW5kLAoJICAgIkRldGFjaCBhIHByb2Nlc3Mgb3IgZmlsZSBwcmV2 aW91c2x5IGF0dGFjaGVkLlxuXApJZiBhIHByb2Nlc3MsIGl0IGlzIG5vIGxvbmdlciB0cmFj ZWQsIGFuZCBpdCBjb250aW51ZXMgaXRzIGV4ZWN1dGlvbi4gIElmIHlvdVxuXAp3ZXJlIGRl YnVnZ2luZyBhIGZpbGUsIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgZ2RiIG5vIGxvbmdlciBh Y2Nlc3NlcyBpdC4iKTsKCiAgYWRkX2NvbSAoInNpZ25hbCIsIGNsYXNzX3J1biwgc2lnbmFs X2NvbW1hbmQsCgkgICAiQ29udGludWUgcHJvZ3JhbSBnaXZpbmcgaXQgc2lnbmFsIHNwZWNp ZmllZCBieSB0aGUgYXJndW1lbnQuXG5cCkFuIGFyZ3VtZW50IG9mIFwiMFwiIG1lYW5zIGNv bnRpbnVlIHByb2dyYW0gd2l0aG91dCBnaXZpbmcgaXQgYSBzaWduYWwuIik7CgogIGFkZF9j b20gKCJzdGVwaSIsIGNsYXNzX3J1biwgc3RlcGlfY29tbWFuZCwKCSAgICJTdGVwIG9uZSBp bnN0cnVjdGlvbiBleGFjdGx5LlxuXApBcmd1bWVudCBOIG1lYW5zIGRvIHRoaXMgTiB0aW1l cyAob3IgdGlsbCBwcm9ncmFtIHN0b3BzIGZvciBhbm90aGVyIHJlYXNvbikuIik7CiAgYWRk X2NvbV9hbGlhcyAoInNpIiwgInN0ZXBpIiwgY2xhc3NfYWxpYXMsIDApOwoKICBhZGRfY29t ICgibmV4dGkiLCBjbGFzc19ydW4sIG5leHRpX2NvbW1hbmQsCgkgICAiU3RlcCBvbmUgaW5z dHJ1Y3Rpb24sIGJ1dCBwcm9jZWVkIHRocm91Z2ggc3Vicm91dGluZSBjYWxscy5cblwKQXJn dW1lbnQgTiBtZWFucyBkbyB0aGlzIE4gdGltZXMgKG9yIHRpbGwgcHJvZ3JhbSBzdG9wcyBm b3IgYW5vdGhlciByZWFzb24pLiIpOwogIGFkZF9jb21fYWxpYXMgKCJuaSIsICJuZXh0aSIs IGNsYXNzX2FsaWFzLCAwKTsKCiAgYWRkX2NvbSAoImZpbmlzaCIsIGNsYXNzX3J1biwgZmlu aXNoX2NvbW1hbmQsCgkgICAiRXhlY3V0ZSB1bnRpbCBzZWxlY3RlZCBzdGFjayBmcmFtZSBy ZXR1cm5zLlxuXApVcG9uIHJldHVybiwgdGhlIHZhbHVlIHJldHVybmVkIGlzIHByaW50ZWQg YW5kIHB1dCBpbiB0aGUgdmFsdWUgaGlzdG9yeS4iKTsKCiAgYWRkX2NvbSAoIm5leHQiLCBj bGFzc19ydW4sIG5leHRfY29tbWFuZCwKCSAgICJTdGVwIHByb2dyYW0sIHByb2NlZWRpbmcg dGhyb3VnaCBzdWJyb3V0aW5lIGNhbGxzLlxuXApMaWtlIHRoZSBcInN0ZXBcIiBjb21tYW5k IGFzIGxvbmcgYXMgc3Vicm91dGluZSBjYWxscyBkbyBub3QgaGFwcGVuO1xuXAp3aGVuIHRo ZXkgZG8sIHRoZSBjYWxsIGlzIHRyZWF0ZWQgYXMgb25lIGluc3RydWN0aW9uLlxuXApBcmd1 bWVudCBOIG1lYW5zIGRvIHRoaXMgTiB0aW1lcyAob3IgdGlsbCBwcm9ncmFtIHN0b3BzIGZv ciBhbm90aGVyIHJlYXNvbikuIik7CiAgYWRkX2NvbV9hbGlhcyAoIm4iLCAibmV4dCIsIGNs YXNzX3J1biwgMSk7CgogIGFkZF9jb20gKCJzdGVwIiwgY2xhc3NfcnVuLCBzdGVwX2NvbW1h bmQsCgkgICAiU3RlcCBwcm9ncmFtIHVudGlsIGl0IHJlYWNoZXMgYSBkaWZmZXJlbnQgc291 cmNlIGxpbmUuXG5cCkFyZ3VtZW50IE4gbWVhbnMgZG8gdGhpcyBOIHRpbWVzIChvciB0aWxs IHByb2dyYW0gc3RvcHMgZm9yIGFub3RoZXIgcmVhc29uKS4iKTsKICBhZGRfY29tX2FsaWFz ICgicyIsICJzdGVwIiwgY2xhc3NfcnVuLCAxKTsKCiAgYWRkX2NvbSAoInVudGlsIiwgY2xh c3NfcnVuLCB1bnRpbF9jb21tYW5kLAoJICAgIkV4ZWN1dGUgdW50aWwgdGhlIHByb2dyYW0g cmVhY2hlcyBhIHNvdXJjZSBsaW5lIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudFxuXApvciBh IHNwZWNpZmllZCBsaW5lIG9yIGFkZHJlc3Mgb3IgZnVuY3Rpb24gKHNhbWUgYXJncyBhcyBi cmVhayBjb21tYW5kKS5cblwKRXhlY3V0aW9uIHdpbGwgYWxzbyBzdG9wIHVwb24gZXhpdCBm cm9tIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lLiIpOwogIGFkZF9jb21fYWxpYXMgKCJ1Iiwg InVudGlsIiwgY2xhc3NfcnVuLCAxKTsKICAKICBhZGRfY29tICgianVtcCIsIGNsYXNzX3J1 biwganVtcF9jb21tYW5kLAoJICAgIkNvbnRpbnVlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQg YXQgc3BlY2lmaWVkIGxpbmUgb3IgYWRkcmVzcy5cblwKR2l2ZSBhcyBhcmd1bWVudCBlaXRo ZXIgTElORU5VTSBvciAqQUREUiwgd2hlcmUgQUREUiBpcyBhbiBleHByZXNzaW9uXG5cCmZv ciBhbiBhZGRyZXNzIHRvIHN0YXJ0IGF0LiIpOwoKICBhZGRfY29tICgiY29udGludWUiLCBj bGFzc19ydW4sIGNvbnRpbnVlX2NvbW1hbmQsCgkgICAiQ29udGludWUgcHJvZ3JhbSBiZWlu ZyBkZWJ1Z2dlZCwgYWZ0ZXIgc2lnbmFsIG9yIGJyZWFrcG9pbnQuXG5cCklmIHByb2NlZWRp bmcgZnJvbSBicmVha3BvaW50LCBhIG51bWJlciBOIG1heSBiZSB1c2VkIGFzIGFuIGFyZ3Vt ZW50LFxuXAp3aGljaCBtZWFucyB0byBzZXQgdGhlIGlnbm9yZSBjb3VudCBvZiB0aGF0IGJy ZWFrcG9pbnQgdG8gTiAtIDEgKHNvIHRoYXRcblwKdGhlIGJyZWFrcG9pbnQgd29uJ3QgYnJl YWsgdW50aWwgdGhlIE50aCB0aW1lIGl0IGlzIHJlYWNoZWQpLiIpOwogIGFkZF9jb21fYWxp YXMgKCJjIiwgImNvbnQiLCBjbGFzc19ydW4sIDEpOwogIGFkZF9jb21fYWxpYXMgKCJmZyIs ICJjb250IiwgY2xhc3NfcnVuLCAxKTsKCiAgYWRkX2NvbSAoInJ1biIsIGNsYXNzX3J1biwg cnVuX2NvbW1hbmQsCgkgICAiU3RhcnQgZGVidWdnZWQgcHJvZ3JhbS4gIFlvdSBtYXkgc3Bl Y2lmeSBhcmd1bWVudHMgdG8gZ2l2ZSBpdC5cblwKQXJncyBtYXkgaW5jbHVkZSBcIipcIiwg b3IgXCJbLi4uXVwiOyB0aGV5IGFyZSBleHBhbmRlZCB1c2luZyBcInNoXCIuXG5cCklucHV0 IGFuZCBvdXRwdXQgcmVkaXJlY3Rpb24gd2l0aCBcIj5cIiwgXCI8XCIsIG9yIFwiPj5cIiBh cmUgYWxzbyBhbGxvd2VkLlxuXG5cCldpdGggbm8gYXJndW1lbnRzLCB1c2VzIGFyZ3VtZW50 cyBsYXN0IHNwZWNpZmllZCAod2l0aCBcInJ1blwiIG9yIFwic2V0IGFyZ3NcIikuXG5cClRv IGNhbmNlbCBwcmV2aW91cyBhcmd1bWVudHMgYW5kIHJ1biB3aXRoIG5vIGFyZ3VtZW50cyxc blwKdXNlIFwic2V0IGFyZ3NcIiB3aXRob3V0IGFyZ3VtZW50cy4iKTsKICBhZGRfY29tX2Fs aWFzICgiciIsICJydW4iLCBjbGFzc19ydW4sIDEpOwoKICBhZGRfaW5mbyAoInJlZ2lzdGVy cyIsIG5vZnBfcmVnaXN0ZXJzX2luZm8sCiAgICAiTGlzdCBvZiBpbnRlZ2VyIHJlZ2lzdGVy cyBhbmQgdGhlaXIgY29udGVudHMsIGZvciBzZWxlY3RlZCBzdGFjayBmcmFtZS5cblwKUmVn aXN0ZXIgbmFtZSBhcyBhcmd1bWVudCBtZWFucyBkZXNjcmliZSBvbmx5IHRoYXQgcmVnaXN0 ZXIuIik7CgogIGFkZF9pbmZvICgiYWxsLXJlZ2lzdGVycyIsIGFsbF9yZWdpc3RlcnNfaW5m bywKIkxpc3Qgb2YgYWxsIHJlZ2lzdGVycyBhbmQgdGhlaXIgY29udGVudHMsIGZvciBzZWxl Y3RlZCBzdGFjayBmcmFtZS5cblwKUmVnaXN0ZXIgbmFtZSBhcyBhcmd1bWVudCBtZWFucyBk ZXNjcmliZSBvbmx5IHRoYXQgcmVnaXN0ZXIuIik7CgogIGFkZF9pbmZvICgicHJvZ3JhbSIs IHByb2dyYW1faW5mbywKCSAgICAiRXhlY3V0aW9uIHN0YXR1cyBvZiB0aGUgcHJvZ3JhbS4i KTsKCiAgYWRkX2luZm8gKCJmbG9hdCIsIGZsb2F0X2luZm8sCgkgICAgIlByaW50IHRoZSBz dGF0dXMgb2YgdGhlIGZsb2F0aW5nIHBvaW50IHVuaXRcbiIpOwoKICBpbmZlcmlvcl9hcmdz ID0gc2F2ZXN0cmluZyAoIiIsIDEpOwkvKiBJbml0aWFsbHkgbm8gYXJncyAqLwogIGluZmVy aW9yX2Vudmlyb24gPSBtYWtlX2Vudmlyb24gKCk7CiAgaW5pdF9lbnZpcm9uIChpbmZlcmlv cl9lbnZpcm9uKTsKfQo= --------------5AAB448694FE76ACD5311E42 Content-Type: text/x-vcard; charset=us-ascii; name="vcard.vcf" Content-Transfer-Encoding: 7bit Content-Description: Card for Stuart Williams Content-Disposition: attachment; filename="vcard.vcf" begin: vcard fn: Stuart Williams n: Williams;Stuart org: Hewlett-Packard Laboratories adr: Hewlett-Packard Laboratories;;Filton Road, ;Stoke Gifford,;Bristol;BS12 6QZ;UK email;internet: skw AT hplb DOT hpl DOT hp DOT com tel;work: +44 1179 228285 tel;fax: +44 1179 229286 x-mozilla-cpt: ;0 x-mozilla-html: FALSE end: vcard --------------5AAB448694FE76ACD5311E42-- - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".