From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13098 invoked by alias); 30 Jun 2009 10:32:47 -0000 Received: (qmail 13073 invoked by uid 22791); 30 Jun 2009 10:32:40 -0000 X-SWARE-Spam-Status: No, hits=0.3 required=5.0 tests=AWL,BAYES_00,HK_OBFDOM,HK_OBFDOMREQ,J_CHICKENPOX_12,J_CHICKENPOX_93,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 30 Jun 2009 10:32:27 +0000 Received: from zps19.corp.google.com (zps19.corp.google.com [172.25.146.19]) by smtp-out.google.com with ESMTP id n5UAWOlX020141 for ; Tue, 30 Jun 2009 03:32:24 -0700 Received: from gxk22 (gxk22.prod.google.com [10.202.11.22]) by zps19.corp.google.com with ESMTP id n5UAVuWk031661 for ; Tue, 30 Jun 2009 03:32:22 -0700 Received: by gxk22 with SMTP id 22so35845gxk.0 for ; Tue, 30 Jun 2009 03:32:21 -0700 (PDT) MIME-Version: 1.0 Received: by 10.90.50.5 with SMTP id x5mr3371045agx.56.1246357941712; Tue, 30 Jun 2009 03:32:21 -0700 (PDT) In-Reply-To: <200906292146.39899.pedro@codesourcery.com> References: <20090430071853.99F5584890@localhost> <200906210055.06940.pedro@codesourcery.com> <200906292146.39899.pedro@codesourcery.com> Date: Tue, 30 Jun 2009 10:32:00 -0000 Message-ID: Subject: Re: [RFA] i386/amd64 h/w watchpoints in gdbserver From: Doug Evans To: Pedro Alves Cc: Pierre Muller , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=00163630f1df60f813046d8e52bd X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-06/txt/msg00859.txt.bz2 --00163630f1df60f813046d8e52bd Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 5288 On Mon, Jun 29, 2009 at 1:46 PM, Pedro Alves wrote: >> >> +/* Support for h/w breakpoints. >> >> + =A0 This support is not currently used, kept for reference. =A0*/ >> > >> > Any reason for not using this currently? =A0If there's a good reason, >> > than let's drop it. =A0But I'd prefer to have it working. =A0:-) >> >> deleted. > > Now you left me curious as to what was missing. For reference sake, it was deleted because using it would mean adding new features to the patch. I wanted to keep the focus on the task at hand. The additions are for a different feature, and it can come in a later patch. >> >> Index: utils.c >> >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> > >> > +char * >> > +paddr (CORE_ADDR addr) >> > >> > This isn't documented in neither server.h or here? >> >> Just "going with the flow". > > The flow says: "look closer and you'll see that all functions > in utils.c have description comments." It wasn't utils.c that I was referring to. Comments added. > I don't think a Win64 port of gdbserver will take too long > to appear, so I'm sure this will an issue (albeit small, as this is > debug output). =A0Note that casting a pointer to long as never been > garanteed to be portable. =A0With the other point, all I meant > was to look here: > > =A0http://sourceware.org/ml/gdb-patches/2009-06/msg00223.html > > and notice that paddr is gone, in favor of paddress. =A0So, it seemed > to be that if copying an interface from GDB, might as well copy > the one that is going to stay. Righto. The new paddress in gdb has a gdbarch argument which gdbserver currently doesn't have. I elided it. I hope that's ok. >> I went with something >> simple that works for now. >> IWBN if this kind of thing were in, say, libiberty and tools could just = use it. > > Fine, but this is not really an argument. =A0You'd already brought a bit = of > code over from GDB, it's just a matter of bringing in more bits. =A0 OTOH= , for > gdbserver, it wouldn't probably be a problem to just use %p instead. =A0B= ut > I'm fine with going with cast to long for now. =A0It was a "Note:" > afterall. =A0Someone else will have to worry about it. The nice thing about wrapping a particular portability issue in one place is that, well, it's in one place. :-) There are several places in gdbserver that currently use (long) for printing CORE_ADDRs. As far as being a "Note", I wonder if we need a convention for review comments that are mandatory versus review comments that are just notes, lest future reviews and responses interpret them wrongly (in either direction). >> >> + =A0/* Target-specific additions. =A0*/ >> > >> > Warning: "Target" overload. =A0We need to get into the habit >> > of not doing this --- it makes refering to these things quite >> > ambiguous. =A0Call it "arch" or something else. =A0There are other >> > similar cases. >> >> I dunno. =A0 there's "the_low_target" in linux-low.h >> Perhaps we can migrate away but I don't see the above "infraction" as >> being critical. > > Please! =A0Could spare us these extra iterations and go with > "Low-target specific additions" then, or some other 4 or 5 > letters adjustment, right? =A0;-) =A0I wasn't asking for a rewrite. 'k. I went with arch-specific. >> >> + =A0/* ??? Will need tweaking for multi-process. =A0*/ >> > >> > Indeed. =A0Why not just set the debug_registers_changed in lwps >> > of the current process? >> >> Are there any existing examples of this? >> I would have done that had process_info contained the list of its >> threads (it would have been trivially straightforward). > > Just match the pid of the current process with the pid of > each thread? =A0linux-low.c does that in several places. 'k. >> + =A0return 0; /* ??? fatal? =A0*/ > > This just means not-stopped-by-watchpoint? =A0Certainly not fatal. The context here is that the function isn't called unless stopped_by_watchpoint has returned true. Thus if stopped_data_address then can't find the address something is wrong. I've been thinking that stopped_by_watchpoint and stopped_data_address should be combined, but it's not clear one would always want that. > Right. =A0An extra point: > > On Tuesday 23 June 2009 08:37:14, Doug Evans wrote: >> + =A0 =A0default: >> + =A0 =A0 =A0error ("Z_packet_to_hw_type: bad watchpoint type %c", type); > > This should not call error, but return unsupported. This is in a subroutine of functions defined to only handle watchpoints. "Not supported" is handled at a higher level. I changed "error" to "fatal" to make this more clear. >> how about this? > > It looks goodish, but I'd really like to see the points I > raise be addressed, instead of just ignored. =A0It just makes > us waste the (narrow already) review bandwidth... I disagree with the categorization of having ignored those comments. [Plus I did apply roughly 15 of 19 comments without question. 1/2 :-)] But no worries. Humble apologies, and noted for future reference. Pierre, nothing much has changed win32-wise except some functions got renam= ed. I don't know if you want to first give this a spin again or not. --00163630f1df60f813046d8e52bd Content-Type: text/plain; charset=US-ASCII; name="gdb-090630-gdbserver-hw-wp-5.patch.txt" Content-Disposition: attachment; filename="gdb-090630-gdbserver-hw-wp-5.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fwkh87kf0 Content-length: 71863 MjAwOS0wNi0zMCAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoJICAg IFBpZXJyZSBNdWxsZXIgIDxtdWxsZXJAaWNzLnUtc3RyYXNiZy5mcj4KCglB ZGQgaC93IHdhdGNocG9pbnQgc3VwcG9ydCB0byB4ODYtbGludXgsIHdpbjMy LWkzODYuCgkqIE1ha2VmaWxlLmluIChTRklMRVMpOiBBZGQgaTM4Ni1sb3cu YwoJKGkzODZfbG93X2gpOiBEZWZpbmUuCgkoaTM4Ni1sb3cubyk6IEFkZCBk ZXBlbmRlbmNpZXMuCgkobGludXgteDg2LWxvdy5vKTogQWRkIGkzODYtbG93 LmggZGVwZW5kZW5jeS4KCSh3aW4zMi1pMzg2LWxvdy5vKTogRGl0dG8uCgkq IGkzODYtbG93LmM6IE5ldyBmaWxlLgoJKiBpMzg2LWxvdy5oOiBOZXcgZmls ZS4KCSogY29uZmlndXJlLnNydiAoaVszNDU2N104Ni0qLWN5Z3dpbiopOiBB ZGQgaTM4Ni1sb3cubyB0byBzcnZfdGd0b2JqLgoJKGlbMzQ1NjddODYtKi1s aW51eCosIGlbMzQ1NjddODYtKi1taW5ndyosIHg4Nl82NC0qLWxpbnV4Kik6 IERpdHRvLgoJKiBsaW51eC1sb3cuYyAobGludXhfYWRkX3Byb2Nlc3MpOiBJ bml0aWFsaXplIGFyY2hfcHJpdmF0ZS4KCShsaW51eF9yZW1vdmVfcHJvY2Vz cyk6IEZyZWUgYXJjaF9wcml2YXRlLgoJKGFkZF9sd3ApOiBJbml0aWFsaXpl IGFyY2hfcHJpdmF0ZS4KCShkZWxldGVfbHdwKTogRnJlZSBhcmNoX3ByaXZh dGUuCgkobGludXhfcmVzdW1lX29uZV9sd3ApOiBDYWxsIHRoZV9sb3dfdGFy Z2V0LnByZXBhcmVfdG9fcmVzdW1lIGlmCglwcm92aWRlZC4KCSogbGludXgt bG93LmggKHByb2Nlc3NfaW5mb19wcml2YXRlKTogTmV3IG1lbWJlciBhcmNo X3ByaXZhdGUuCgkobHdwX2luZm8pOiBOZXcgbWVtYmVyIGFyY2hfcHJpdmF0 ZS4KCShsaW51eF90YXJnZXRfb3BzKTogTmV3IG1lbWJlcnMgbmV3X3Byb2Nl c3MsIG5ld190aHJlYWQsCglwcmVwYXJlX3RvX3Jlc3VtZS4KCShwdGlkX29m KTogTmV3IG1hY3JvLgoJKiBsaW51eC14ODYtbG93LmM6IEluY2x1ZGUgc3Rk ZGVmLmgsIGkzODYtbG93LmguCgkoYXJjaF9wcm9jZXNzX2luZm8pOiBOZXcg c3RydWN0LgoJKGFyY2hfbHdwX2luZm8pOiBOZXcgc3RydWN0LgoJKHg4Nl9s aW51eF9kcl9nZXQsIHg4Nl9saW51eF9kcl9zZXQpOiBOZXcgZnVuY3Rpb25z LgoJKGkzODZfZHJfbG93X3NldF9hZGRyLCBpMzg2X2RyX2xvd19zZXRfY29u dHJvbCk6IE5ldyBmdW5jdGlvbnMuCgkoaTM4Nl9kcl9sb3dfZ2V0X3N0YXR1 cyk6IE5ldyBmdW5jdGlvbi4KCSh4ODZfaW5zZXJ0X3BvaW50LCB4ODZfcmVt b3ZlX3BvaW50KTogTmV3IGZ1bmN0aW9ucy4KCSh4ODZfc3RvcHBlZF9ieV93 YXRjaHBvaW50KTogTmV3IGZ1bmN0aW9uLgoJKHg4Nl9zdG9wcGVkX2RhdGFf YWRkcmVzcyk6IE5ldyBmdW5jdGlvbi4KCSh4ODZfbGludXhfbmV3X3Byb2Nl c3MsIHg4Nl9saW51eF9uZXdfdGhyZWFkKTogTmV3IGZ1bmN0aW9ucy4KCSh4 ODZfbGludXhfcHJlcGFyZV90b19yZXN1bWUpOiBOZXcgZnVuY3Rpb24uCgko dGhlX2xvd190YXJnZXQpOiBBZGQgZW50cmllcyBmb3IgaW5zZXJ0X3BvaW50 LCByZW1vdmVfcG9pbnQsCglzdG9wcGVkX2J5X3dhdGNocG9pbnQsIHN0b3Bw ZWRfZGF0YV9hZGRyZXNzLCBuZXdfcHJvY2VzcywgbmV3X3RocmVhZCwKCXBy ZXBhcmVfdG9fcmVzdW1lLgoJKiBzZXJ2ZXIuYyAoZGVidWdfaHdfcG9pbnRz KTogTmV3IGdsb2JhbC4KCShtb25pdG9yX3Nob3dfaGVscCk6IERvY3VtZW50 IHNldCBkZWJ1Zy1ody1wb2ludHMuCgkoaGFuZGxlX3F1ZXJ5KTogUHJvY2Vz cyAic2V0IGRlYnVnLWh3LXBvaW50cyIuCgkqIHNlcnZlci5oIChkZWJ1Z19o d19wb2ludHMpOiBEZWNsYXJlLgoJKHBhZGRyZXNzKTogRGVjbGFyZS4KCSog dXRpbHMuYyAoTlVNQ0VMTFMsIENFTExTSVpFKTogTmV3IG1hY3Jvcy4KCShn ZXRfc2VsbCwgeHNucHJpbnRmLCBwYWRkcmVzcyk6IE5ldyBmdW5jdGlvbnMu CgkqIHdpbjMyLWFybS1sb3cuYyAodGhlX2xvd190YXJnZXQpOiBBZGQgZW50 cmllcyBmb3IgaW5zZXJ0X3BvaW50LAoJcmVtb3ZlX3BvaW50LCBzdG9wcGVk X2J5X3dhdGNocG9pbnQsIHN0b3BwZWRfZGF0YV9hZGRyZXNzLgoJKiB3aW4z Mi1pMzg2LWxvdy5jOiBJbmNsdWRlIGkzODYtbG93LmguCgkoZGVidWdfcmVn X3N0YXRlKTogUmVwbGFjZXMgZHIuCgkoaTM4Nl9kcl9sb3dfc2V0X2FkZHIs IGkzODZfZHJfbG93X3NldF9jb250cm9sKTogTmV3IGZ1bmN0aW9ucy4KCShp Mzg2X2RyX2xvd19nZXRfc3RhdHVzKTogTmV3IGZ1bmN0aW9uLgoJKGkzODZf aW5zZXJ0X3BvaW50LCBpMzg2X3JlbW92ZV9wb2ludCk6IE5ldyBmdW5jdGlv bnMuCgkoaTM4Nl9zdG9wcGVkX2J5X3dhdGNocG9pbnQpOiBOZXcgZnVuY3Rp b24uCgkoaTM4Nl9zdG9wcGVkX2RhdGFfYWRkcmVzcyk6IE5ldyBmdW5jdGlv bi4KCShpMzg2X2luaXRpYWxfc3R1ZmYpOiBVcGRhdGUuCgkoZ2V0X3RocmVh ZF9jb250ZXh0LHNldF90aHJlYWRfY29udGV4dCxpMzg2X3RocmVhZF9hZGRl ZCk6IFVwZGF0ZS4KCSh0aGVfbG93X3RhcmdldCk6IEFkZCBlbnRyaWVzIGZv ciBpbnNlcnRfcG9pbnQsCglyZW1vdmVfcG9pbnQsIHN0b3BwZWRfYnlfd2F0 Y2hwb2ludCwgc3RvcHBlZF9kYXRhX2FkZHJlc3MuCgkqIHdpbjMyLWxvdy5j ICh3aW4zMl9pbnNlcnRfd2F0Y2hwb2ludCk6IE5ldyBmdW5jdGlvbi4KCSh3 aW4zMl9yZW1vdmVfd2F0Y2hwb2ludCk6IE5ldyBmdW5jdGlvbi4KCSh3aW4z Ml9zdG9wcGVkX2J5X3dhdGNocG9pbnQpOiBOZXcgZnVuY3Rpb24uCgkod2lu MzJfc3RvcHBlZF9kYXRhX2FkZHJlc3MpOiBOZXcgZnVuY3Rpb24uCgkod2lu MzJfdGFyZ2V0X29wcyk6IEFkZCBlbnRyaWVzIGZvciBpbnNlcnRfd2F0Y2hw b2ludCwKCXJlbW92ZV93YXRjaHBvaW50LCBzdG9wcGVkX2J5X3dhdGNocG9p bnQsIHN0b3BwZWRfZGF0YV9hZGRyZXNzLgoJKiB3aW4zMi1sb3cuaCAod2lu MzJfdGFyZ2V0X29wcyk6IE5ldyBtZW1iZXJzIGluc2VydF9wb2ludCwKCXJl bW92ZV9wb2ludCwgc3RvcHBlZF9ieV93YXRjaHBvaW50LCBzdG9wcGVkX2Rh dGFfYWRkcmVzcy4KCkluZGV4OiBNYWtlZmlsZS5pbgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZl ci9NYWtlZmlsZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NApkaWZm IC11IC1wIC1yMS43NCBNYWtlZmlsZS5pbgotLS0gTWFrZWZpbGUuaW4JMTIg TWF5IDIwMDkgMjI6MjU6MDAgLTAwMDAJMS43NAorKysgTWFrZWZpbGUuaW4J MzAgSnVuIDIwMDkgMDk6MTU6NTggLTAwMDAKQEAgLTEwNCw3ICsxMDQsNyBA QCBTRklMRVM9CSQoc3JjZGlyKS9nZGJyZXBsYXkuYyAkKHNyY2RpcikvCiAJ JChzcmNkaXIpL3RocmVhZC1kYi5jICQoc3JjZGlyKS91dGlscy5jIFwKIAkk KHNyY2RpcikvbGludXgtYXJtLWxvdy5jICQoc3JjZGlyKS9saW51eC1jcmlz LWxvdy5jIFwKIAkkKHNyY2RpcikvbGludXgtY3Jpc3YzMi1sb3cuYyBcCi0J JChzcmNkaXIpL2kzODctZnAuYyBcCisJJHtzcmNkaXJ9L2kzODYtbG93LmMg JChzcmNkaXIpL2kzODctZnAuYyBcCiAJJChzcmNkaXIpL2xpbnV4LWlhNjQt bG93LmMgJChzcmNkaXIpL2xpbnV4LWxvdy5jIFwKIAkkKHNyY2RpcikvbGlu dXgtbTMyci1sb3cuYyBcCiAJJChzcmNkaXIpL2xpbnV4LW02OGstbG93LmMg JChzcmNkaXIpL2xpbnV4LW1pcHMtbG93LmMgXApAQCAtMjg3LDYgKzI4Nywx MCBAQCBzaWduYWxzLm86IC4uL2NvbW1vbi9zaWduYWxzLmMgJChzZXJ2ZXJf CiBtZW1tZW0ubzogLi4vZ251bGliL21lbW1lbS5jCiAJJChDQykgLW8gbWVt bWVtLm8gLWMgJChDUFBGTEFHUykgJChJTlRFUk5BTF9DRkxBR1MpICQ8CiAK K2kzODZfbG93X2ggPSAkKHNyY2RpcikvaTM4Ni1sb3cuaAorCitpMzg2LWxv dy5vOiBpMzg2LWxvdy5jICQoaTM4Nl9sb3dfaCkgJChzZXJ2ZXJfaCkgJCh0 YXJnZXRfaCkKKwogaTM4Ny1mcC5vOiBpMzg3LWZwLmMgJChzZXJ2ZXJfaCkK IAogbGludXgtbG93Lm86IGxpbnV4LWxvdy5jICQobGludXhfbG93X2gpICQo c2VydmVyX2gpCkBAIC0zMDQsNyArMzA4LDcgQEAgbGludXgtcHBjLWxvdy5v OiBsaW51eC1wcGMtbG93LmMgJChsaW51eAogbGludXgtczM5MC1sb3cubzog bGludXgtczM5MC1sb3cuYyAkKGxpbnV4X2xvd19oKSAkKHNlcnZlcl9oKQog bGludXgtc2gtbG93Lm86IGxpbnV4LXNoLWxvdy5jICQobGludXhfbG93X2gp ICQoc2VydmVyX2gpCiBsaW51eC14ODYtbG93Lm86IGxpbnV4LXg4Ni1sb3cu YyAkKGxpbnV4X2xvd19oKSAkKHNlcnZlcl9oKSBcCi0JJChnZGJfcHJvY19z ZXJ2aWNlX2gpCisJJChnZGJfcHJvY19zZXJ2aWNlX2gpICQoaTM4Nl9sb3df aCkKIGxpbnV4LXh0ZW5zYS1sb3cubzogbGludXgteHRlbnNhLWxvdy5jIHh0 ZW5zYS14dHJlZ3MuYyAkKGxpbnV4X2xvd19oKSAkKHNlcnZlcl9oKQogCiB3 aW4zMl9sb3dfaCA9ICQoc3JjZGlyKS93aW4zMi1sb3cuaApAQCAtMzEyLDcg KzMxNiw3IEBAIHdpbjMyX2xvd19oID0gJChzcmNkaXIpL3dpbjMyLWxvdy5o CiB3aW4zMi1sb3cubzogd2luMzItbG93LmMgJCh3aW4zMl9sb3dfaCkgJChz ZXJ2ZXJfaCkgJChyZWdkZWZfaCkgJChyZWdjYWNoZV9oKQogCiB3aW4zMi1h cm0tbG93Lm86IHdpbjMyLWFybS1sb3cuYyAkKHdpbjMyX2xvd19oKSAkKHNl cnZlcl9oKQotd2luMzItaTM4Ni1sb3cubzogd2luMzItaTM4Ni1sb3cuYyAk KHdpbjMyX2xvd19oKSAkKHNlcnZlcl9oKQord2luMzItaTM4Ni1sb3cubzog d2luMzItaTM4Ni1sb3cuYyAkKHdpbjMyX2xvd19oKSAkKHNlcnZlcl9oKSAk KGkzODZfbG93X2gpCiAKIHNwdS1sb3cubzogc3B1LWxvdy5jICQoc2VydmVy X2gpCiAKSW5kZXg6IGNvbmZpZ3VyZS5zcnYKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvY29u ZmlndXJlLnNydix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MQpkaWZmIC11 IC1wIC1yMS40MSBjb25maWd1cmUuc3J2Ci0tLSBjb25maWd1cmUuc3J2CTEy IE1heSAyMDA5IDIyOjI1OjAwIC0wMDAwCTEuNDEKKysrIGNvbmZpZ3VyZS5z cnYJMzAgSnVuIDIwMDkgMDk6MTU6NTggLTAwMDAKQEAgLTUzLDEwICs1Mywx MCBAQCBjYXNlICIke3RhcmdldH0iIGluCiAJCQlzcnZfbGludXhfdGhyZWFk X2RiPXllcwogCQkJOzsKICAgaVszNDU2N104Ni0qLWN5Z3dpbiopCXNydl9y ZWdvYmo9cmVnLWkzODYubwotCQkJc3J2X3RndG9iaj0id2luMzItbG93Lm8g d2luMzItaTM4Ni1sb3cubyIKKwkJCXNydl90Z3RvYmo9ImkzODYtbG93Lm8g d2luMzItbG93Lm8gd2luMzItaTM4Ni1sb3cubyIKIAkJCTs7CiAgIGlbMzQ1 NjddODYtKi1saW51eCopCXNydl9yZWdvYmo9cmVnLWkzODYtbGludXgubwot CQkJc3J2X3RndG9iaj0ibGludXgtbG93Lm8gbGludXgteDg2LWxvdy5vIGkz ODctZnAubyIKKwkJCXNydl90Z3RvYmo9ImxpbnV4LWxvdy5vIGxpbnV4LXg4 Ni1sb3cubyBpMzg2LWxvdy5vIGkzODctZnAubyIKIAkJCXNydl9saW51eF91 c3JyZWdzPXllcwogCQkJc3J2X2xpbnV4X3JlZ3NldHM9eWVzCiAJCQlzcnZf bGludXhfdGhyZWFkX2RiPXllcwpAQCAtNzEsNyArNzEsNyBAQCBjYXNlICIk e3RhcmdldH0iIGluCiAJCQlzcnZfbWluZ3djZT15ZXMKIAkJCTs7CiAgIGlb MzQ1NjddODYtKi1taW5ndyopCXNydl9yZWdvYmo9cmVnLWkzODYubwotCQkJ c3J2X3RndG9iaj0id2luMzItbG93Lm8gd2luMzItaTM4Ni1sb3cubyIKKwkJ CXNydl90Z3RvYmo9ImkzODYtbG93Lm8gd2luMzItbG93Lm8gd2luMzItaTM4 Ni1sb3cubyIKIAkJCXNydl9taW5ndz15ZXMKIAkJCTs7CiAgIGlhNjQtKi1s aW51eCopCXNydl9yZWdvYmo9cmVnLWlhNjQubwpAQCAtMTcwLDcgKzE3MCw3 IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KIAkJCXNydl90Z3RvYmo9InNwdS1s b3cubyIKIAkJCTs7CiAgIHg4Nl82NC0qLWxpbnV4KikJc3J2X3JlZ29iaj0i cmVnLXg4Ni02NC1saW51eC5vIHJlZy1pMzg2LWxpbnV4Lm8iCi0JCQlzcnZf dGd0b2JqPSJsaW51eC1sb3cubyBsaW51eC14ODYtbG93Lm8gaTM4Ny1mcC5v IgorCQkJc3J2X3RndG9iaj0ibGludXgtbG93Lm8gbGludXgteDg2LWxvdy5v IGkzODYtbG93Lm8gaTM4Ny1mcC5vIgogCQkJc3J2X2xpbnV4X3VzcnJlZ3M9 eWVzICMgVGhpcyBpcyBmb3IgaTM4NiBwcm9ncy4KIAkJCXNydl9saW51eF9y ZWdzZXRzPXllcwogCQkJc3J2X2xpbnV4X3RocmVhZF9kYj15ZXMKSW5kZXg6 IGkzODYtbG93LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog aTM4Ni1sb3cuYwpkaWZmIC1OIGkzODYtbG93LmMKLS0tIC9kZXYvbnVsbAkx IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBpMzg2LWxvdy5jCTMwIEp1 biAyMDA5IDA5OjE1OjU4IC0wMDAwCkBAIC0wLDAgKzEsNTc3IEBACisvKiBE ZWJ1ZyByZWdpc3RlciBjb2RlIGZvciB0aGUgaTM4Ni4KKworICAgQ29weXJp Z2h0IChDKSAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAic2VydmVyLmgiCisj aW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiaTM4Ni1sb3cuaCIKKwor LyogU3VwcG9ydCBmb3IgOC1ieXRlIHdpZGUgaHcgd2F0Y2hwb2ludHMuICAq LworI2lmbmRlZiBUQVJHRVRfSEFTX0RSX0xFTl84CisvKiBOT1RFOiBzaXpl b2YgKGxvbmcpID09IDQgb24gd2luNjQuICAqLworI2RlZmluZSBUQVJHRVRf SEFTX0RSX0xFTl84IChzaXplb2YgKHZvaWQgKikgPT0gOCkKKyNlbmRpZgor CitlbnVtIHRhcmdldF9od19icF90eXBlCisgIHsKKyAgICBod193cml0ZSAg ID0gMCwJLyogQ29tbW9uICBIVyB3YXRjaHBvaW50ICovCisgICAgaHdfcmVh ZCAgICA9IDEsCS8qIFJlYWQgICAgSFcgd2F0Y2hwb2ludCAqLworICAgIGh3 X2FjY2VzcyAgPSAyLAkvKiBBY2Nlc3MgIEhXIHdhdGNocG9pbnQgKi8KKyAg ICBod19leGVjdXRlID0gMwkvKiBFeGVjdXRlIEhXIGJyZWFrcG9pbnQgKi8K KyAgfTsKKworLyogRFI3IERlYnVnIENvbnRyb2wgcmVnaXN0ZXIgZmllbGRz LiAgKi8KKworLyogSG93IG1hbnkgYml0cyB0byBza2lwIGluIERSNyB0byBn ZXQgdG8gUi9XIGFuZCBMRU4gZmllbGRzLiAgKi8KKyNkZWZpbmUgRFJfQ09O VFJPTF9TSElGVAkxNgorLyogSG93IG1hbnkgYml0cyBpbiBEUjcgcGVyIFIv VyBhbmQgTEVOIGZpZWxkIGZvciBlYWNoIHdhdGNocG9pbnQuICAqLworI2Rl ZmluZSBEUl9DT05UUk9MX1NJWkUJCTQKKworLyogV2F0Y2hwb2ludC9icmVh a3BvaW50IHJlYWQvd3JpdGUgZmllbGRzIGluIERSNy4gICovCisjZGVmaW5l IERSX1JXX0VYRUNVVEUJKDB4MCkJLyogQnJlYWsgb24gaW5zdHJ1Y3Rpb24g ZXhlY3V0aW9uLiAgKi8KKyNkZWZpbmUgRFJfUldfV1JJVEUJKDB4MSkJLyog QnJlYWsgb24gZGF0YSB3cml0ZXMuICAqLworI2RlZmluZSBEUl9SV19SRUFE CSgweDMpCS8qIEJyZWFrIG9uIGRhdGEgcmVhZHMgb3Igd3JpdGVzLiAgKi8K KworLyogVGhpcyBpcyBoZXJlIGZvciBjb21wbGV0ZW5lc3MuICBObyBwbGF0 Zm9ybSBzdXBwb3J0cyB0aGlzCisgICBmdW5jdGlvbmFsaXR5IHlldCAoYXMg b2YgTWFyY2ggMjAwMSkuICBOb3RlIHRoYXQgdGhlIERFIGZsYWcgaW4gdGhl CisgICBDUjQgcmVnaXN0ZXIgbmVlZHMgdG8gYmUgc2V0IHRvIHN1cHBvcnQg dGhpcy4gICovCisjaWZuZGVmIERSX1JXX0lPUlcKKyNkZWZpbmUgRFJfUldf SU9SVwkoMHgyKQkvKiBCcmVhayBvbiBJL08gcmVhZHMgb3Igd3JpdGVzLiAg Ki8KKyNlbmRpZgorCisvKiBXYXRjaHBvaW50L2JyZWFrcG9pbnQgbGVuZ3Ro IGZpZWxkcyBpbiBEUjcuICBUaGUgMi1iaXQgbGVmdCBzaGlmdAorICAgaXMg c28gd2UgY291bGQgT1IgdGhpcyB3aXRoIHRoZSByZWFkL3dyaXRlIGZpZWxk IGRlZmluZWQgYWJvdmUuICAqLworI2RlZmluZSBEUl9MRU5fMQkoMHgwIDw8 IDIpIC8qIDEtYnl0ZSByZWdpb24gd2F0Y2ggb3IgYnJlYWtwb2ludC4gICov CisjZGVmaW5lIERSX0xFTl8yCSgweDEgPDwgMikgLyogMi1ieXRlIHJlZ2lv biB3YXRjaC4gICovCisjZGVmaW5lIERSX0xFTl80CSgweDMgPDwgMikgLyog NC1ieXRlIHJlZ2lvbiB3YXRjaC4gICovCisjZGVmaW5lIERSX0xFTl84CSgw eDIgPDwgMikgLyogOC1ieXRlIHJlZ2lvbiB3YXRjaCAoQU1ENjQpLiAgKi8K KworLyogTG9jYWwgYW5kIEdsb2JhbCBFbmFibGUgZmxhZ3MgaW4gRFI3Lgor CisgICBXaGVuIHRoZSBMb2NhbCBFbmFibGUgZmxhZyBpcyBzZXQsIHRoZSBi cmVha3BvaW50L3dhdGNocG9pbnQgaXMKKyAgIGVuYWJsZWQgb25seSBmb3Ig dGhlIGN1cnJlbnQgdGFzazsgdGhlIHByb2Nlc3NvciBhdXRvbWF0aWNhbGx5 CisgICBjbGVhcnMgdGhpcyBmbGFnIG9uIGV2ZXJ5IHRhc2sgc3dpdGNoLiAg V2hlbiB0aGUgR2xvYmFsIEVuYWJsZSBmbGFnCisgICBpcyBzZXQsIHRoZSBi cmVha3BvaW50L3dhdGNocG9pbnQgaXMgZW5hYmxlZCBmb3IgYWxsIHRhc2tz OyB0aGUKKyAgIHByb2Nlc3NvciBuZXZlciBjbGVhcnMgdGhpcyBmbGFnLgor CisgICBDdXJyZW50bHksIGFsbCB3YXRjaHBvaW50IGFyZSBsb2NhbGx5IGVu YWJsZWQuICBJZiB5b3UgbmVlZCB0bworICAgZW5hYmxlIHRoZW0gZ2xvYmFs bHksIHJlYWQgdGhlIGNvbW1lbnQgd2hpY2ggcGVydGFpbnMgdG8gdGhpcyBp bgorICAgaTM4Nl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IGJlbG93LiAg Ki8KKyNkZWZpbmUgRFJfTE9DQUxfRU5BQkxFX1NISUZUCTAgLyogRXh0cmEg c2hpZnQgdG8gdGhlIGxvY2FsIGVuYWJsZSBiaXQuICAqLworI2RlZmluZSBE Ul9HTE9CQUxfRU5BQkxFX1NISUZUCTEgLyogRXh0cmEgc2hpZnQgdG8gdGhl IGdsb2JhbCBlbmFibGUgYml0LiAgKi8KKyNkZWZpbmUgRFJfRU5BQkxFX1NJ WkUJCTIgLyogVHdvIGVuYWJsZSBiaXRzIHBlciBkZWJ1ZyByZWdpc3Rlci4g ICovCisKKy8qIExvY2FsIGFuZCBnbG9iYWwgZXhhY3QgYnJlYWtwb2ludCBl bmFibGUgZmxhZ3MgKGEuay5hLiBzbG93ZG93bgorICAgZmxhZ3MpLiAgVGhl c2UgYXJlIG9ubHkgcmVxdWlyZWQgb24gaTM4NiwgdG8gYWxsb3cgZGV0ZWN0 aW9uIG9mIHRoZQorICAgZXhhY3QgaW5zdHJ1Y3Rpb24gd2hpY2ggY2F1c2Vk IGEgd2F0Y2hwb2ludCB0byBicmVhazsgaTQ4NiBhbmQKKyAgIGxhdGVyIHBy b2Nlc3NvcnMgZG8gdGhhdCBhdXRvbWF0aWNhbGx5LiAgV2Ugc2V0IHRoZXNl IGZsYWdzIGZvcgorICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICAqLwor I2RlZmluZSBEUl9MT0NBTF9TTE9XRE9XTgkoMHgxMDApCisjZGVmaW5lIERS X0dMT0JBTF9TTE9XRE9XTgkoMHgyMDApCisKKy8qIEZpZWxkcyByZXNlcnZl ZCBieSBJbnRlbC4gIFRoaXMgaW5jbHVkZXMgdGhlIEdEIChHZW5lcmFsIERl dGVjdAorICAgRW5hYmxlKSBmbGFnLCB3aGljaCBjYXVzZXMgYSBkZWJ1ZyBl eGNlcHRpb24gdG8gYmUgZ2VuZXJhdGVkIHdoZW4gYQorICAgTU9WIGluc3Ry dWN0aW9uIGFjY2Vzc2VzIG9uZSBvZiB0aGUgZGVidWcgcmVnaXN0ZXJzLgor CisgICBGSVhNRTogTXkgSW50ZWwgbWFudWFsIHNheXMgd2Ugc2hvdWxkIHVz ZSAweEY4MDAsIG5vdCAweEZDMDAuICAqLworI2RlZmluZSBEUl9DT05UUk9M X1JFU0VSVkVECSgweEZDMDApCisKKy8qIEF1eGlsaWFyeSBoZWxwZXIgbWFj cm9zLiAgKi8KKworLyogQSB2YWx1ZSB0aGF0IG1hc2tzIGFsbCBmaWVsZHMg aW4gRFI3IHRoYXQgYXJlIHJlc2VydmVkIGJ5IEludGVsLiAgKi8KKyNkZWZp bmUgSTM4Nl9EUl9DT05UUk9MX01BU0sJKH5EUl9DT05UUk9MX1JFU0VSVkVE KQorCisvKiBUaGUgSSd0aCBkZWJ1ZyByZWdpc3RlciBpcyB2YWNhbnQgaWYg aXRzIExvY2FsIGFuZCBHbG9iYWwgRW5hYmxlCisgICBiaXRzIGFyZSByZXNl dCBpbiB0aGUgRGVidWcgQ29udHJvbCByZWdpc3Rlci4gICovCisjZGVmaW5l IEkzODZfRFJfVkFDQU5UKHN0YXRlLCBpKSBcCisgICgoKHN0YXRlKS0+ZHJf Y29udHJvbF9taXJyb3IgJiAoMyA8PCAoRFJfRU5BQkxFX1NJWkUgKiAoaSkp KSkgPT0gMCkKKworLyogTG9jYWxseSBlbmFibGUgdGhlIGJyZWFrL3dhdGNo cG9pbnQgaW4gdGhlIEkndGggZGVidWcgcmVnaXN0ZXIuICAqLworI2RlZmlu ZSBJMzg2X0RSX0xPQ0FMX0VOQUJMRShzdGF0ZSwgaSkgXAorICBkbyB7IFwK KyAgICAoc3RhdGUpLT5kcl9jb250cm9sX21pcnJvciB8PSBcCisgICAgICAo MSA8PCAoRFJfTE9DQUxfRU5BQkxFX1NISUZUICsgRFJfRU5BQkxFX1NJWkUg KiAoaSkpKTsgXAorICB9IHdoaWxlICgwKQorCisvKiBHbG9iYWxseSBlbmFi bGUgdGhlIGJyZWFrL3dhdGNocG9pbnQgaW4gdGhlIEkndGggZGVidWcgcmVn aXN0ZXIuICAqLworI2RlZmluZSBJMzg2X0RSX0dMT0JBTF9FTkFCTEUoc3Rh dGUsIGkpIFwKKyAgZG8geyBcCisgICAgKHN0YXRlKS0+ZHJfY29udHJvbF9t aXJyb3IgfD0gXAorICAgICAgKDEgPDwgKERSX0dMT0JBTF9FTkFCTEVfU0hJ RlQgKyBEUl9FTkFCTEVfU0laRSAqIChpKSkpOyBcCisgIH0gd2hpbGUgKDAp CisKKy8qIERpc2FibGUgdGhlIGJyZWFrL3dhdGNocG9pbnQgaW4gdGhlIEkn dGggZGVidWcgcmVnaXN0ZXIuICAqLworI2RlZmluZSBJMzg2X0RSX0RJU0FC TEUoc3RhdGUsIGkpIFwKKyAgZG8geyBcCisgICAgKHN0YXRlKS0+ZHJfY29u dHJvbF9taXJyb3IgJj0gXAorICAgICAgfigzIDw8IChEUl9FTkFCTEVfU0la RSAqIChpKSkpOyBcCisgIH0gd2hpbGUgKDApCisKKy8qIFNldCBpbiBEUjcg dGhlIFJXIGFuZCBMRU4gZmllbGRzIGZvciB0aGUgSSd0aCBkZWJ1ZyByZWdp c3Rlci4gICovCisjZGVmaW5lIEkzODZfRFJfU0VUX1JXX0xFTihzdGF0ZSwg aSxyd2xlbikgXAorICBkbyB7IFwKKyAgICAoc3RhdGUpLT5kcl9jb250cm9s X21pcnJvciAmPSBcCisgICAgICB+KDB4MGYgPDwgKERSX0NPTlRST0xfU0hJ RlQgKyBEUl9DT05UUk9MX1NJWkUgKiAoaSkpKTsgXAorICAgIChzdGF0ZSkt PmRyX2NvbnRyb2xfbWlycm9yIHw9IFwKKyAgICAgICgocndsZW4pIDw8IChE Ul9DT05UUk9MX1NISUZUICsgRFJfQ09OVFJPTF9TSVpFICogKGkpKSk7IFwK KyAgfSB3aGlsZSAoMCkKKworLyogR2V0IGZyb20gRFI3IHRoZSBSVyBhbmQg TEVOIGZpZWxkcyBmb3IgdGhlIEkndGggZGVidWcgcmVnaXN0ZXIuICAqLwor I2RlZmluZSBJMzg2X0RSX0dFVF9SV19MRU4oc3RhdGUsIGkpIFwKKyAgKCgo c3RhdGUpLT5kcl9jb250cm9sX21pcnJvciBcCisgICAgPj4gKERSX0NPTlRS T0xfU0hJRlQgKyBEUl9DT05UUk9MX1NJWkUgKiAoaSkpKSAmIDB4MGYpCisK Ky8qIERpZCB0aGUgd2F0Y2hwb2ludCB3aG9zZSBhZGRyZXNzIGlzIGluIHRo ZSBJJ3RoIHJlZ2lzdGVyIGJyZWFrPyAgKi8KKyNkZWZpbmUgSTM4Nl9EUl9X QVRDSF9ISVQoc3RhdGUsaSkgKChzdGF0ZSktPmRyX3N0YXR1c19taXJyb3Ig JiAoMSA8PCAoaSkpKQorCisvKiBBIG1hY3JvIHRvIGxvb3Agb3ZlciBhbGwg ZGVidWcgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgQUxMX0RFQlVHX1JFR0lT VEVSUyhpKQlmb3IgKGkgPSAwOyBpIDwgRFJfTkFERFI7IGkrKykKKworLyog VHlwZXMgb2Ygb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYnkgaTM4Nl9oYW5kbGVf bm9uYWxpZ25lZF93YXRjaHBvaW50LiAgKi8KK3R5cGVkZWYgZW51bSB7IFdQ X0lOU0VSVCwgV1BfUkVNT1ZFLCBXUF9DT1VOVCB9IGkzODZfd3Bfb3BfdDsK KwwKKy8qIEltcGxlbWVudGF0aW9uLiAgKi8KKworLyogQ2xlYXIgdGhlIHJl ZmVyZW5jZSBjb3VudHMgYW5kIGZvcmdldCBldmVyeXRoaW5nIHdlIGtuZXcg YWJvdXQgdGhlCisgICBkZWJ1ZyByZWdpc3RlcnMuICAqLworCit2b2lkCitp Mzg2X2xvd19pbml0X2RyZWdzIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3Rh dGUgKnN0YXRlKQoreworICBpbnQgaTsKKworICBBTExfREVCVUdfUkVHSVNU RVJTIChpKQorICAgIHsKKyAgICAgIHN0YXRlLT5kcl9taXJyb3JbaV0gPSAw OworICAgICAgc3RhdGUtPmRyX3JlZl9jb3VudFtpXSA9IDA7CisgICAgfQor ICBzdGF0ZS0+ZHJfY29udHJvbF9taXJyb3IgPSAwOworICBzdGF0ZS0+ZHJf c3RhdHVzX21pcnJvciAgPSAwOworfQorCisvKiBQcmludCB0aGUgdmFsdWVz IG9mIHRoZSBtaXJyb3JlZCBkZWJ1ZyByZWdpc3RlcnMuICBUaGlzIGlzIGVu YWJsZWQgdmlhCisgICB0aGUgInNldCBkZWJ1Zy1ody1wb2ludHMgMSIgbW9u aXRvciBjb21tYW5kLiAgKi8KKworc3RhdGljIHZvaWQKK2kzODZfc2hvd19k ciAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSwKKwkgICAg ICBjb25zdCBjaGFyICpmdW5jLCBDT1JFX0FERFIgYWRkciwKKwkgICAgICBp bnQgbGVuLCBlbnVtIHRhcmdldF9od19icF90eXBlIHR5cGUpCit7CisgIGlu dCBpOworCisgIGZwcmludGYgKHN0ZGVyciwgIiVzIiwgZnVuYyk7CisgIGlm IChhZGRyIHx8IGxlbikKKyAgICBmcHJpbnRmIChzdGRlcnIsICIgKGFkZHI9 JWx4LCBsZW49JWQsIHR5cGU9JXMpIiwKKwkgICAgICh1bnNpZ25lZCBsb25n KSBhZGRyLCBsZW4sCisJICAgICB0eXBlID09IGh3X3dyaXRlID8gImRhdGEt d3JpdGUiCisJICAgICA6ICh0eXBlID09IGh3X3JlYWQgPyAiZGF0YS1yZWFk IgorCQk6ICh0eXBlID09IGh3X2FjY2VzcyA/ICJkYXRhLXJlYWQvd3JpdGUi CisJCSAgIDogKHR5cGUgPT0gaHdfZXhlY3V0ZSA/ICJpbnN0cnVjdGlvbi1l eGVjdXRlIgorCQkgICAgICAvKiBGSVhNRTogaWYvd2hlbiBJL08gcmVhZC93 cml0ZQorCQkJIHdhdGNocG9pbnRzIGFyZSBzdXBwb3J0ZWQsIGFkZCB0aGVt CisJCQkgaGVyZS4gICovCisJCSAgICAgIDogIj8/dW5rbm93bj8/IikpKSk7 CisgIGZwcmludGYgKHN0ZGVyciwgIjpcbiIpOworICBmcHJpbnRmIChzdGRl cnIsICJcdENPTlRST0wgKERSNyk6ICUwOHggICAgICAgICAgU1RBVFVTIChE UjYpOiAlMDh4XG4iLAorCSAgIHN0YXRlLT5kcl9jb250cm9sX21pcnJvciwg c3RhdGUtPmRyX3N0YXR1c19taXJyb3IpOworICBBTExfREVCVUdfUkVHSVNU RVJTIChpKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlwKK1x0 RFIlZDogYWRkcj0weCVzLCByZWYuY291bnQ9JWQgIERSJWQ6IGFkZHI9MHgl cywgcmVmLmNvdW50PSVkXG4iLAorCSAgICAgIGksIHBhZGRyZXNzIChzdGF0 ZS0+ZHJfbWlycm9yW2ldKSwKKwkgICAgICBzdGF0ZS0+ZHJfcmVmX2NvdW50 W2ldLAorCSAgICAgIGkgKyAxLCBwYWRkcmVzcyAoc3RhdGUtPmRyX21pcnJv cltpICsgMV0pLAorCSAgICAgIHN0YXRlLT5kcl9yZWZfY291bnRbaSArIDFd KTsKKyAgICAgIGkrKzsKKyAgICB9Cit9CisKKy8qIFJldHVybiB0aGUgdmFs dWUgb2YgYSA0LWJpdCBmaWVsZCBmb3IgRFI3IHN1aXRhYmxlIGZvciB3YXRj aGluZyBhCisgICByZWdpb24gb2YgTEVOIGJ5dGVzIGZvciBhY2Nlc3NlcyBv ZiB0eXBlIFRZUEUuICBMRU4gaXMgYXNzdW1lZCB0bworICAgaGF2ZSB0aGUg dmFsdWUgb2YgMSwgMiwgb3IgNC4gICovCisKK3N0YXRpYyB1bnNpZ25lZAor aTM4Nl9sZW5ndGhfYW5kX3J3X2JpdHMgKGludCBsZW4sIGVudW0gdGFyZ2V0 X2h3X2JwX3R5cGUgdHlwZSkKK3sKKyAgdW5zaWduZWQgcnc7CisKKyAgc3dp dGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgaHdfZXhlY3V0ZToKKwly dyA9IERSX1JXX0VYRUNVVEU7CisJYnJlYWs7CisgICAgICBjYXNlIGh3X3dy aXRlOgorCXJ3ID0gRFJfUldfV1JJVEU7CisJYnJlYWs7CisgICAgICBjYXNl IGh3X3JlYWQ6CisJLyogVGhlIGkzODYgZG9lc24ndCBzdXBwb3J0IGRhdGEt cmVhZCB3YXRjaHBvaW50cy4gICovCisgICAgICBjYXNlIGh3X2FjY2VzczoK KwlydyA9IERSX1JXX1JFQUQ7CisJYnJlYWs7CisjaWYgMAorCS8qIE5vdCB5 ZXQgc3VwcG9ydGVkLiAgKi8KKyAgICAgIGNhc2UgaHdfaW9fYWNjZXNzOgor CXJ3ID0gRFJfUldfSU9SVzsKKwlicmVhazsKKyNlbmRpZgorICAgICAgZGVm YXVsdDoKKwllcnJvciAoIlwKK0ludmFsaWQgaGFyZHdhcmUgYnJlYWtwb2lu dCB0eXBlICVkIGluIGkzODZfbGVuZ3RoX2FuZF9yd19iaXRzLlxuIiwKKwkJ CShpbnQpIHR5cGUpOworICAgIH0KKworICBzd2l0Y2ggKGxlbikKKyAgICB7 CisgICAgICBjYXNlIDE6CisJcmV0dXJuIChEUl9MRU5fMSB8IHJ3KTsKKyAg ICAgIGNhc2UgMjoKKwlyZXR1cm4gKERSX0xFTl8yIHwgcncpOworICAgICAg Y2FzZSA0OgorCXJldHVybiAoRFJfTEVOXzQgfCBydyk7CisgICAgICBjYXNl IDg6CisgICAgICAgIGlmIChUQVJHRVRfSEFTX0RSX0xFTl84KQorIAkgIHJl dHVybiAoRFJfTEVOXzggfCBydyk7CisgICAgICBkZWZhdWx0OgorCWVycm9y ICgiXAorSW52YWxpZCBoYXJkd2FyZSBicmVha3BvaW50IGxlbmd0aCAlZCBp biBpMzg2X2xlbmd0aF9hbmRfcndfYml0cy5cbiIsIGxlbik7CisgICAgfQor fQorCisvKiBJbnNlcnQgYSB3YXRjaHBvaW50IGF0IGFkZHJlc3MgQUREUiwg d2hpY2ggaXMgYXNzdW1lZCB0byBiZSBhbGlnbmVkCisgICBhY2NvcmRpbmcg dG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVnaW9uIHRvIHdhdGNoLiAgTEVOX1JX X0JJVFMgaXMgdGhlCisgICB2YWx1ZSBvZiB0aGUgYml0cyBmcm9tIERSNyB3 aGljaCBkZXNjcmliZXMgdGhlIGxlbmd0aCBhbmQgYWNjZXNzCisgICB0eXBl IG9mIHRoZSByZWdpb24gdG8gYmUgd2F0Y2hlZCBieSB0aGlzIHdhdGNocG9p bnQuICBSZXR1cm4gMCBvbgorICAgc3VjY2VzcywgLTEgb24gZmFpbHVyZS4g ICovCisKK3N0YXRpYyBpbnQKK2kzODZfaW5zZXJ0X2FsaWduZWRfd2F0Y2hw b2ludCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSwKKwkJ CQlDT1JFX0FERFIgYWRkciwgdW5zaWduZWQgbGVuX3J3X2JpdHMpCit7Cisg IGludCBpOworCisgIC8qIEZpcnN0LCBsb29rIGZvciBhbiBvY2N1cGllZCBk ZWJ1ZyByZWdpc3RlciB3aXRoIHRoZSBzYW1lIGFkZHJlc3MKKyAgICAgYW5k IHRoZSBzYW1lIFJXIGFuZCBMRU4gZGVmaW5pdGlvbnMuICBJZiB3ZSBmaW5k IG9uZSwgd2UgY2FuCisgICAgIHJldXNlIGl0IGZvciB0aGlzIHdhdGNocG9p bnQgYXMgd2VsbCAoYW5kIHNhdmUgYSByZWdpc3RlcikuICAqLworICBBTExf REVCVUdfUkVHSVNURVJTIChpKQorICAgIHsKKyAgICAgIGlmICghSTM4Nl9E Ul9WQUNBTlQgKHN0YXRlLCBpKQorCSAgJiYgc3RhdGUtPmRyX21pcnJvcltp XSA9PSBhZGRyCisJICAmJiBJMzg2X0RSX0dFVF9SV19MRU4gKHN0YXRlLCBp KSA9PSBsZW5fcndfYml0cykKKwl7CisJICBzdGF0ZS0+ZHJfcmVmX2NvdW50 W2ldKys7CisJICByZXR1cm4gMDsKKwl9CisgICAgfQorCisgIC8qIE5leHQs IGxvb2sgZm9yIGEgdmFjYW50IGRlYnVnIHJlZ2lzdGVyLiAgKi8KKyAgQUxM X0RFQlVHX1JFR0lTVEVSUyAoaSkKKyAgICB7CisgICAgICBpZiAoSTM4Nl9E Ul9WQUNBTlQgKHN0YXRlLCBpKSkKKwlicmVhazsKKyAgICB9CisKKyAgLyog Tm8gbW9yZSBkZWJ1ZyByZWdpc3RlcnMhICAqLworICBpZiAoaSA+PSBEUl9O QUREUikKKyAgICByZXR1cm4gLTE7CisKKyAgLyogTm93IHNldCB1cCB0aGUg cmVnaXN0ZXIgSSB0byB3YXRjaCBvdXIgcmVnaW9uLiAgKi8KKworICAvKiBS ZWNvcmQgdGhlIGluZm8gaW4gb3VyIGxvY2FsIG1pcnJvcmVkIGFycmF5LiAg Ki8KKyAgc3RhdGUtPmRyX21pcnJvcltpXSA9IGFkZHI7CisgIHN0YXRlLT5k cl9yZWZfY291bnRbaV0gPSAxOworICBJMzg2X0RSX1NFVF9SV19MRU4gKHN0 YXRlLCBpLCBsZW5fcndfYml0cyk7CisgIC8qIE5vdGU6IHdlIG9ubHkgZW5h YmxlIHRoZSB3YXRjaHBvaW50IGxvY2FsbHksIGkuZS4gaW4gdGhlIGN1cnJl bnQKKyAgICAgdGFzay4gIEN1cnJlbnRseSwgbm8gaTM4NiB0YXJnZXQgYWxs b3dzIG9yIHN1cHBvcnRzIGdsb2JhbAorICAgICB3YXRjaHBvaW50czsgaG93 ZXZlciwgaWYgYW55IHRhcmdldCB3b3VsZCB3YW50IHRoYXQgaW4gdGhlCisg ICAgIGZ1dHVyZSwgR0RCIHNob3VsZCBwcm9iYWJseSBwcm92aWRlIGEgY29t bWFuZCB0byBjb250cm9sIHdoZXRoZXIKKyAgICAgdG8gZW5hYmxlIHdhdGNo cG9pbnRzIGdsb2JhbGx5IG9yIGxvY2FsbHksIGFuZCB0aGUgY29kZSBiZWxv dworICAgICBzaG91bGQgdXNlIGdsb2JhbCBvciBsb2NhbCBlbmFibGUgYW5k IHNsb3ctZG93biBmbGFncyBhcworICAgICBhcHByb3ByaWF0ZS4gICovCisg IEkzODZfRFJfTE9DQUxfRU5BQkxFIChzdGF0ZSwgaSk7CisgIHN0YXRlLT5k cl9jb250cm9sX21pcnJvciB8PSBEUl9MT0NBTF9TTE9XRE9XTjsKKyAgc3Rh dGUtPmRyX2NvbnRyb2xfbWlycm9yICY9IEkzODZfRFJfQ09OVFJPTF9NQVNL OworCisgIC8qIEZpbmFsbHksIGFjdHVhbGx5IHBhc3MgdGhlIGluZm8gdG8g dGhlIGluZmVyaW9yLiAgKi8KKyAgaTM4Nl9kcl9sb3dfc2V0X2FkZHIgKHN0 YXRlLCBpKTsKKyAgaTM4Nl9kcl9sb3dfc2V0X2NvbnRyb2wgKHN0YXRlKTsK KworICByZXR1cm4gMDsKK30KKworLyogUmVtb3ZlIGEgd2F0Y2hwb2ludCBh dCBhZGRyZXNzIEFERFIsIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgYWxpZ25l ZAorICAgYWNjb3JkaW5nIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJlZ2lvbiB0 byB3YXRjaC4gIExFTl9SV19CSVRTIGlzIHRoZQorICAgdmFsdWUgb2YgdGhl IGJpdHMgZnJvbSBEUjcgd2hpY2ggZGVzY3JpYmVzIHRoZSBsZW5ndGggYW5k IGFjY2VzcworICAgdHlwZSBvZiB0aGUgcmVnaW9uIHdhdGNoZWQgYnkgdGhp cyB3YXRjaHBvaW50LiAgUmV0dXJuIDAgb24KKyAgIHN1Y2Nlc3MsIC0xIG9u IGZhaWx1cmUuICAqLworCitzdGF0aWMgaW50CitpMzg2X3JlbW92ZV9hbGln bmVkX3dhdGNocG9pbnQgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAq c3RhdGUsCisJCQkJQ09SRV9BRERSIGFkZHIsIHVuc2lnbmVkIGxlbl9yd19i aXRzKQoreworICBpbnQgaSwgcmV0dmFsID0gLTE7CisKKyAgQUxMX0RFQlVH X1JFR0lTVEVSUyAoaSkKKyAgICB7CisgICAgICBpZiAoIUkzODZfRFJfVkFD QU5UIChzdGF0ZSwgaSkKKwkgICYmIHN0YXRlLT5kcl9taXJyb3JbaV0gPT0g YWRkcgorCSAgJiYgSTM4Nl9EUl9HRVRfUldfTEVOIChzdGF0ZSwgaSkgPT0g bGVuX3J3X2JpdHMpCisJeworCSAgaWYgKC0tc3RhdGUtPmRyX3JlZl9jb3Vu dFtpXSA9PSAwKSAvKiBObyBsb25nZXIgaW4gdXNlPyAgKi8KKwkgICAgewor CSAgICAgIC8qIFJlc2V0IG91ciBtaXJyb3IuICAqLworCSAgICAgIHN0YXRl LT5kcl9taXJyb3JbaV0gPSAwOworCSAgICAgIEkzODZfRFJfRElTQUJMRSAo c3RhdGUsIGkpOworCSAgICAgIC8qIFJlc2V0IGl0IGluIHRoZSBpbmZlcmlv ci4gICovCisJICAgICAgaTM4Nl9kcl9sb3dfc2V0X2NvbnRyb2wgKHN0YXRl KTsKKwkgICAgICBpMzg2X2RyX2xvd19zZXRfYWRkciAoc3RhdGUsIGkpOwor CSAgICB9CisJICByZXR2YWwgPSAwOworCX0KKyAgICB9CisKKyAgcmV0dXJu IHJldHZhbDsKK30KKworLyogSW5zZXJ0IG9yIHJlbW92ZSBhIChwb3NzaWJs eSBub24tYWxpZ25lZCkgd2F0Y2hwb2ludCwgb3IgY291bnQgdGhlCisgICBu dW1iZXIgb2YgZGVidWcgcmVnaXN0ZXJzIHJlcXVpcmVkIHRvIHdhdGNoIGEg cmVnaW9uIGF0IGFkZHJlc3MKKyAgIEFERFIgd2hvc2UgbGVuZ3RoIGlzIExF TiBmb3IgYWNjZXNzZXMgb2YgdHlwZSBUWVBFLiAgUmV0dXJuIDAgb24KKyAg IHN1Y2Nlc3NmdWwgaW5zZXJ0aW9uIG9yIHJlbW92YWwsIGEgcG9zaXRpdmUg bnVtYmVyIHdoZW4gcXVlcmllZAorICAgYWJvdXQgdGhlIG51bWJlciBvZiBy ZWdpc3RlcnMsIG9yIC0xIG9uIGZhaWx1cmUuICBJZiBXSEFUIGlzIG5vdCBh CisgICB2YWxpZCB2YWx1ZSwgYm9tYnMgdGhyb3VnaCBpbnRlcm5hbF9lcnJv ci4gICovCisKK3N0YXRpYyBpbnQKK2kzODZfaGFuZGxlX25vbmFsaWduZWRf d2F0Y2hwb2ludCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0 ZSwKKwkJCQkgICBpMzg2X3dwX29wX3Qgd2hhdCwgQ09SRV9BRERSIGFkZHIs IGludCBsZW4sCisJCQkJICAgZW51bSB0YXJnZXRfaHdfYnBfdHlwZSB0eXBl KQoreworICBpbnQgcmV0dmFsID0gMCwgc3RhdHVzID0gMDsKKyAgaW50IG1h eF93cF9sZW4gPSBUQVJHRVRfSEFTX0RSX0xFTl84ID8gOCA6IDQ7CisKKyAg c3RhdGljIGNvbnN0IGludCBzaXplX3RyeV9hcnJheVs4XVs4XSA9CisgIHsK KyAgICB7MSwgMSwgMSwgMSwgMSwgMSwgMSwgMX0sCS8qIFRyeWluZyBzaXpl IG9uZS4gICovCisgICAgezIsIDEsIDIsIDEsIDIsIDEsIDIsIDF9LAkvKiBU cnlpbmcgc2l6ZSB0d28uICAqLworICAgIHsyLCAxLCAyLCAxLCAyLCAxLCAy LCAxfSwJLyogVHJ5aW5nIHNpemUgdGhyZWUuICAqLworICAgIHs0LCAxLCAy LCAxLCA0LCAxLCAyLCAxfSwJLyogVHJ5aW5nIHNpemUgZm91ci4gICovCisg ICAgezQsIDEsIDIsIDEsIDQsIDEsIDIsIDF9LAkvKiBUcnlpbmcgc2l6ZSBm aXZlLiAgKi8KKyAgICB7NCwgMSwgMiwgMSwgNCwgMSwgMiwgMX0sCS8qIFRy eWluZyBzaXplIHNpeC4gICovCisgICAgezQsIDEsIDIsIDEsIDQsIDEsIDIs IDF9LAkvKiBUcnlpbmcgc2l6ZSBzZXZlbi4gICovCisgICAgezgsIDEsIDIs IDEsIDQsIDEsIDIsIDF9LAkvKiBUcnlpbmcgc2l6ZSBlaWdodC4gICovCisg IH07CisKKyAgd2hpbGUgKGxlbiA+IDApCisgICAgeworICAgICAgaW50IGFs aWduID0gYWRkciAlIG1heF93cF9sZW47CisgICAgICAvKiBGb3VyIChlaWdo dCBvbiBBTUQ2NCkgaXMgdGhlIG1heGltdW0gbGVuZ3RoIGEgZGVidWcgcmVn aXN0ZXIKKwkgY2FuIHdhdGNoLiAgKi8KKyAgICAgIGludCB0cnkgPSAobGVu ID4gbWF4X3dwX2xlbiA/IChtYXhfd3BfbGVuIC0gMSkgOiBsZW4gLSAxKTsK KyAgICAgIGludCBzaXplID0gc2l6ZV90cnlfYXJyYXlbdHJ5XVthbGlnbl07 CisKKyAgICAgIGlmICh3aGF0ID09IFdQX0NPVU5UKQorCXsKKwkgIC8qIHNp emVfdHJ5X2FycmF5W10gaXMgZGVmaW5lZCBzdWNoIHRoYXQgZWFjaCBpdGVy YXRpb24KKwkgICAgIHRocm91Z2ggdGhlIGxvb3AgaXMgZ3VhcmFudGVlZCB0 byBwcm9kdWNlIGFuIGFkZHJlc3MgYW5kIGEKKwkgICAgIHNpemUgdGhhdCBj YW4gYmUgd2F0Y2hlZCB3aXRoIGEgc2luZ2xlIGRlYnVnIHJlZ2lzdGVyLgor CSAgICAgVGh1cywgZm9yIGNvdW50aW5nIHRoZSByZWdpc3RlcnMgcmVxdWly ZWQgdG8gd2F0Y2ggYQorCSAgICAgcmVnaW9uLCB3ZSBzaW1wbHkgbmVlZCB0 byBpbmNyZW1lbnQgdGhlIGNvdW50IG9uIGVhY2gKKwkgICAgIGl0ZXJhdGlv bi4gICovCisJICByZXR2YWwrKzsKKwl9CisgICAgICBlbHNlCisJeworCSAg dW5zaWduZWQgbGVuX3J3ID0gaTM4Nl9sZW5ndGhfYW5kX3J3X2JpdHMgKHNp emUsIHR5cGUpOworCisJICBpZiAod2hhdCA9PSBXUF9JTlNFUlQpCisJICAg IHN0YXR1cyA9IGkzODZfaW5zZXJ0X2FsaWduZWRfd2F0Y2hwb2ludCAoc3Rh dGUsIGFkZHIsIGxlbl9ydyk7CisJICBlbHNlIGlmICh3aGF0ID09IFdQX1JF TU9WRSkKKwkgICAgc3RhdHVzID0gaTM4Nl9yZW1vdmVfYWxpZ25lZF93YXRj aHBvaW50IChzdGF0ZSwgYWRkciwgbGVuX3J3KTsKKwkgIGVsc2UKKwkgICAg ZmF0YWwgKCJcCitJbnZhbGlkIHZhbHVlICVkIG9mIG9wZXJhdGlvbiBpbiBp Mzg2X2hhbmRsZV9ub25hbGlnbmVkX3dhdGNocG9pbnQuXG4iLAorCQkgICAo aW50KSB3aGF0KTsKKworCSAgLyogV2Uga2VlcCB0aGUgbG9vcCBnb2luZyBl dmVuIGFmdGVyIGEgZmFpbHVyZSwgYmVjYXVzZSBzb21lCisJICAgICBvZiB0 aGUgb3RoZXIgYWxpZ25lZCB3YXRjaHBvaW50cyBtaWdodCBzdGlsbCBzdWNj ZWVkCisJICAgICAoZS5nLiBpZiB0aGV5IHdhdGNoIGFkZHJlc3NlcyB0aGF0 IGFyZSBhbHJlYWR5IHdhdGNoZWQsCisJICAgICBpbiB3aGljaCBjYXNlIHdl IGp1c3QgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRzIG9mCisJICAg ICBvY2N1cGllZCBkZWJ1ZyByZWdpc3RlcnMpLiAgSWYgd2UgYnJlYWsgb3V0 IG9mIHRoZSBsb29wCisJICAgICB0b28gZWFybHksIHdlIGNvdWxkIGNhdXNl IHRob3NlIGFkZHJlc3NlcyB3YXRjaGVkIGJ5CisJICAgICBvdGhlciB3YXRj aHBvaW50cyB0byBiZSBkaXNhYmxlZCB3aGVuIGJyZWFrcG9pbnQuYyByZWFj dHMKKwkgICAgIHRvIG91ciBmYWlsdXJlIHRvIGluc2VydCB0aGlzIHdhdGNo cG9pbnQgYW5kIHRyaWVzIHRvCisJICAgICByZW1vdmUgaXQuICAqLworCSAg aWYgKHN0YXR1cykKKwkgICAgcmV0dmFsID0gc3RhdHVzOworCX0KKworICAg ICAgYWRkciArPSBzaXplOworICAgICAgbGVuIC09IHNpemU7CisgICAgfQor CisgIHJldHVybiByZXR2YWw7Cit9CisKKyNkZWZpbmUgWl9QQUNLRVRfV1JJ VEVfV1AgJzInCisjZGVmaW5lIFpfUEFDS0VUX1JFQURfV1AgJzMnCisjZGVm aW5lIFpfUEFDS0VUX0FDQ0VTU19XUCAnNCcKKworLyogTWFwIHRoZSBwcm90 b2NvbCB3YXRjaHBvaW50IHR5cGUgVFlQRSB0byBlbnVtIHRhcmdldF9od19i cF90eXBlLiAgKi8KKworc3RhdGljIGVudW0gdGFyZ2V0X2h3X2JwX3R5cGUK K1pfcGFja2V0X3RvX2h3X3R5cGUgKGNoYXIgdHlwZSkKK3sKKyAgc3dpdGNo ICh0eXBlKQorICAgIHsKKyAgICBjYXNlIFpfUEFDS0VUX1dSSVRFX1dQOgor ICAgICAgcmV0dXJuIGh3X3dyaXRlOworICAgIGNhc2UgWl9QQUNLRVRfUkVB RF9XUDoKKyAgICAgIHJldHVybiBod19yZWFkOworICAgIGNhc2UgWl9QQUNL RVRfQUNDRVNTX1dQOgorICAgICAgcmV0dXJuIGh3X2FjY2VzczsKKyAgICBk ZWZhdWx0OgorICAgICAgZmF0YWwgKCJaX3BhY2tldF90b19od190eXBlOiBi YWQgd2F0Y2hwb2ludCB0eXBlICVjIiwgdHlwZSk7CisgICAgfQorfQorCisv KiBJbnNlcnQgYSB3YXRjaHBvaW50IHRvIHdhdGNoIGEgbWVtb3J5IHJlZ2lv biB3aGljaCBzdGFydHMgYXQKKyAgIGFkZHJlc3MgQUREUiBhbmQgd2hvc2Ug bGVuZ3RoIGlzIExFTiBieXRlcy4gIFdhdGNoIG1lbW9yeSBhY2Nlc3Nlcwor ICAgb2YgdGhlIHR5cGUgVFlQRV9GUk9NX1BBQ0tFVC4gIFJldHVybiAwIG9u IHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuICAqLworCitpbnQKK2kzODZfbG93 X2luc2VydF93YXRjaHBvaW50IChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3Rh dGUgKnN0YXRlLAorCQkJICAgIGNoYXIgdHlwZV9mcm9tX3BhY2tldCwgQ09S RV9BRERSIGFkZHIsIGludCBsZW4pCit7CisgIGludCByZXR2YWw7CisgIGVu dW0gdGFyZ2V0X2h3X2JwX3R5cGUgdHlwZSA9IFpfcGFja2V0X3RvX2h3X3R5 cGUgKHR5cGVfZnJvbV9wYWNrZXQpOworCisgIGlmICgoKGxlbiAhPSAxICYm IGxlbiAhPSAyICYmIGxlbiAhPSA0KQorICAgICAgICYmICEoVEFSR0VUX0hB U19EUl9MRU5fOCAmJiBsZW4gPT0gOCkpCisgICAgICB8fCBhZGRyICUgbGVu ICE9IDApCisgICAgeworICAgICAgcmV0dmFsID0gaTM4Nl9oYW5kbGVfbm9u YWxpZ25lZF93YXRjaHBvaW50IChzdGF0ZSwgV1BfSU5TRVJULAorCQkJCQkJ ICBhZGRyLCBsZW4sIHR5cGUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIHVuc2lnbmVkIGxlbl9ydyA9IGkzODZfbGVuZ3RoX2FuZF9yd19iaXRz IChsZW4sIHR5cGUpOworCisgICAgICByZXR2YWwgPSBpMzg2X2luc2VydF9h bGlnbmVkX3dhdGNocG9pbnQgKHN0YXRlLCBhZGRyLCBsZW5fcncpOworICAg IH0KKworICBpZiAoZGVidWdfaHdfcG9pbnRzKQorICAgIGkzODZfc2hvd19k ciAoc3RhdGUsICJpbnNlcnRfd2F0Y2hwb2ludCIsIGFkZHIsIGxlbiwgdHlw ZSk7CisKKyAgcmV0dXJuIHJldHZhbDsKK30KKworLyogUmVtb3ZlIGEgd2F0 Y2hwb2ludCB0aGF0IHdhdGNoZWQgdGhlIG1lbW9yeSByZWdpb24gd2hpY2gg c3RhcnRzIGF0CisgICBhZGRyZXNzIEFERFIsIHdob3NlIGxlbmd0aCBpcyBM RU4gYnl0ZXMsIGFuZCBmb3IgYWNjZXNzZXMgb2YgdGhlCisgICB0eXBlIFRZ UEVfRlJPTV9QQUNLRVQuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBm YWlsdXJlLiAgKi8KKworaW50CitpMzg2X2xvd19yZW1vdmVfd2F0Y2hwb2lu dCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSwKKwkJCSAg ICBjaGFyIHR5cGVfZnJvbV9wYWNrZXQsIENPUkVfQUREUiBhZGRyLCBpbnQg bGVuKQoreworICBpbnQgcmV0dmFsOworICBlbnVtIHRhcmdldF9od19icF90 eXBlIHR5cGUgPSBaX3BhY2tldF90b19od190eXBlICh0eXBlX2Zyb21fcGFj a2V0KTsKKworICBpZiAoKChsZW4gIT0gMSAmJiBsZW4gIT0gMiAmJiBsZW4g IT0gNCkKKyAgICAgICAmJiAhKFRBUkdFVF9IQVNfRFJfTEVOXzggJiYgbGVu ID09IDgpKQorICAgICAgfHwgYWRkciAlIGxlbiAhPSAwKQorICAgIHsKKyAg ICAgIHJldHZhbCA9IGkzODZfaGFuZGxlX25vbmFsaWduZWRfd2F0Y2hwb2lu dCAoc3RhdGUsIFdQX1JFTU9WRSwKKwkJCQkJCSAgYWRkciwgbGVuLCB0eXBl KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsZW5f cncgPSBpMzg2X2xlbmd0aF9hbmRfcndfYml0cyAobGVuLCB0eXBlKTsKKwor ICAgICAgcmV0dmFsID0gaTM4Nl9yZW1vdmVfYWxpZ25lZF93YXRjaHBvaW50 IChzdGF0ZSwgYWRkciwgbGVuX3J3KTsKKyAgICB9CisKKyAgaWYgKGRlYnVn X2h3X3BvaW50cykKKyAgICBpMzg2X3Nob3dfZHIgKHN0YXRlLCAicmVtb3Zl X3dhdGNocG9pbnQiLCBhZGRyLCBsZW4sIHR5cGUpOworCisgIHJldHVybiBy ZXR2YWw7Cit9CisKKy8qIFJldHVybiBub24temVybyBpZiB3ZSBjYW4gd2F0 Y2ggYSBtZW1vcnkgcmVnaW9uIHRoYXQgc3RhcnRzIGF0CisgICBhZGRyZXNz IEFERFIgYW5kIHdob3NlIGxlbmd0aCBpcyBMRU4gYnl0ZXMuICAqLworCitp bnQKK2kzODZfbG93X3JlZ2lvbl9va19mb3Jfd2F0Y2hwb2ludCAoc3RydWN0 IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSwKKwkJCQkgICBDT1JFX0FE RFIgYWRkciwgaW50IGxlbikKK3sKKyAgaW50IG5yZWdzOworCisgIC8qIENv bXB1dGUgaG93IG1hbnkgYWxpZ25lZCB3YXRjaHBvaW50cyB3ZSB3b3VsZCBu ZWVkIHRvIGNvdmVyIHRoaXMKKyAgICAgcmVnaW9uLiAgKi8KKyAgbnJlZ3Mg PSBpMzg2X2hhbmRsZV9ub25hbGlnbmVkX3dhdGNocG9pbnQgKHN0YXRlLCBX UF9DT1VOVCwKKwkJCQkJICAgICBhZGRyLCBsZW4sIGh3X3dyaXRlKTsKKyAg cmV0dXJuIG5yZWdzIDw9IERSX05BRERSID8gMSA6IDA7Cit9CisKKy8qIElm IHRoZSBpbmZlcmlvciBoYXMgc29tZSBicmVhay93YXRjaHBvaW50IHRoYXQg dHJpZ2dlcmVkLCBzZXQgdGhlCisgICBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0 aCB0aGF0IGJyZWFrL3dhdGNocG9pbnQgYW5kIHJldHVybiB0cnVlLgorICAg T3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuICAqLworCitpbnQKK2kzODZfbG93 X3N0b3BwZWRfZGF0YV9hZGRyZXNzIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdf c3RhdGUgKnN0YXRlLAorCQkJICAgICAgIENPUkVfQUREUiAqYWRkcl9wKQor eworICBDT1JFX0FERFIgYWRkciA9IDA7CisgIGludCBpOworICBpbnQgcmMg PSAwOworCisgIC8qIEdldCBkcl9zdGF0dXNfbWlycm9yIGZvciB1c2UgYnkg STM4Nl9EUl9XQVRDSF9ISVQuICAqLworICBpMzg2X2RyX2xvd19nZXRfc3Rh dHVzIChzdGF0ZSk7CisKKyAgQUxMX0RFQlVHX1JFR0lTVEVSUyAoaSkKKyAg ICB7CisgICAgICBpZiAoSTM4Nl9EUl9XQVRDSF9ISVQgKHN0YXRlLCBpKQor CSAgLyogVGhpcyBzZWNvbmQgY29uZGl0aW9uIG1ha2VzIHN1cmUgRFJpIGlz IHNldCB1cCBmb3IgYSBkYXRhCisJICAgICB3YXRjaHBvaW50LCBub3QgYSBo YXJkd2FyZSBicmVha3BvaW50LiAgVGhlIHJlYXNvbiBpcworCSAgICAgdGhh dCBHREIgZG9lc24ndCBjYWxsIHRoZSB0YXJnZXRfc3RvcHBlZF9kYXRhX2Fk ZHJlc3MKKwkgICAgIG1ldGhvZCBleGNlcHQgZm9yIGRhdGEgd2F0Y2hwb2lu dHMuICBJbiBvdGhlciB3b3JkcywgSSdtCisJICAgICBiZWluZyBwYXJhbm9p YWMuICAqLworCSAgJiYgSTM4Nl9EUl9HRVRfUldfTEVOIChzdGF0ZSwgaSkg IT0gMCkKKwl7CisJICBhZGRyID0gc3RhdGUtPmRyX21pcnJvcltpXTsKKwkg IHJjID0gMTsKKwkgIGlmIChkZWJ1Z19od19wb2ludHMpCisJICAgIGkzODZf c2hvd19kciAoc3RhdGUsICJ3YXRjaHBvaW50X2hpdCIsIGFkZHIsIC0xLCBo d193cml0ZSk7CisJfQorICAgIH0KKworICBpZiAoZGVidWdfaHdfcG9pbnRz ICYmIGFkZHIgPT0gMCkKKyAgICBpMzg2X3Nob3dfZHIgKHN0YXRlLCAic3Rv cHBlZF9kYXRhX2FkZHIiLCAwLCAwLCBod193cml0ZSk7CisKKyAgaWYgKHJj KQorICAgICphZGRyX3AgPSBhZGRyOworICByZXR1cm4gcmM7Cit9CisKKy8q IFJldHVybiB0cnVlIGlmIHRoZSBpbmZlcmlvciBoYXMgc29tZSB3YXRjaHBv aW50IHRoYXQgdHJpZ2dlcmVkLgorICAgT3RoZXJ3aXNlIHJldHVybiBmYWxz ZS4gICovCisKK2ludAoraTM4Nl9sb3dfc3RvcHBlZF9ieV93YXRjaHBvaW50 IChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKQoreworICBD T1JFX0FERFIgYWRkciA9IDA7CisgIHJldHVybiBpMzg2X2xvd19zdG9wcGVk X2RhdGFfYWRkcmVzcyAoc3RhdGUsICZhZGRyKTsKK30KSW5kZXg6IGkzODYt bG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogaTM4Ni1s b3cuaApkaWZmIC1OIGkzODYtbG93LmgKLS0tIC9kZXYvbnVsbAkxIEphbiAx OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBpMzg2LWxvdy5oCTMwIEp1biAyMDA5 IDA5OjE1OjU4IC0wMDAwCkBAIC0wLDAgKzEsMTA5IEBACisvKiBNaXNjLiBs b3cgbGV2ZWwgc3VwcG9ydCBmb3IgaTM4Ni4KKworICAgQ29weXJpZ2h0IChD KSAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor CisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uICAqLworCisvKiBTdXBwb3J0IGZvciBoYXJkd2FyZSB3YXRj aHBvaW50cyBhbmQgYnJlYWtwb2ludHMgdXNpbmcgdGhlIGkzODYKKyAgIGRl YnVnIHJlZ2lzdGVycy4KKworICAgVGhpcyBwcm92aWRlcyBzZXZlcmFsIGZ1 bmN0aW9ucyBmb3IgaW5zZXJ0aW5nIGFuZCByZW1vdmluZworICAgaGFyZHdh cmUtYXNzaXN0ZWQgYnJlYWtwb2ludHMgYW5kIHdhdGNocG9pbnRzLCB0ZXN0 aW5nIGlmIG9uZSBvcgorICAgbW9yZSBvZiB0aGUgd2F0Y2hwb2ludHMgdHJp Z2dlcmVkIGFuZCBhdCB3aGF0IGFkZHJlc3MsIGNoZWNraW5nCisgICB3aGV0 aGVyIGEgZ2l2ZW4gcmVnaW9uIGNhbiBiZSB3YXRjaGVkLCBldGMuCisKKyAg IFRoZSBmdW5jdGlvbnMgYmVsb3cgaW1wbGVtZW50IGRlYnVnIHJlZ2lzdGVy cyBzaGFyaW5nIGJ5IHJlZmVyZW5jZQorICAgY291bnRzLCBhbmQgYWxsb3cg dG8gd2F0Y2ggcmVnaW9ucyB1cCB0byAxNiBieXRlcyBsb25nCisgICAoMzIg Ynl0ZXMgb24gNjQgYml0IGhvc3RzKS4gICovCisKKworLyogRGVidWcgcmVn aXN0ZXJzJyBpbmRpY2VzLiAgKi8KKyNkZWZpbmUgRFJfRklSU1RBRERSIDAK KyNkZWZpbmUgRFJfTEFTVEFERFIgIDMKKyNkZWZpbmUgRFJfTkFERFIgICAg IDQgLyogVGhlIG51bWJlciBvZiBkZWJ1ZyBhZGRyZXNzIHJlZ2lzdGVycy4g ICovCisjZGVmaW5lIERSX1NUQVRVUyAgICA2CisjZGVmaW5lIERSX0NPTlRS T0wgICA3CisKKy8qIEdsb2JhbCBzdGF0ZSBuZWVkZWQgdG8gdHJhY2sgaC93 IHdhdGNocG9pbnRzLiAgKi8KKworc3RydWN0IGkzODZfZGVidWdfcmVnX3N0 YXRlCit7CisgIC8qIE1pcnJvciB0aGUgaW5mZXJpb3IncyBEUmkgcmVnaXN0 ZXJzLiAgV2Uga2VlcCB0aGUgc3RhdHVzIGFuZAorICAgICBjb250cm9sIHJl Z2lzdGVycyBzZXBhcmF0ZWQgYmVjYXVzZSB0aGV5IGRvbid0IGhvbGQgYWRk cmVzc2VzLiAgKi8KKyAgQ09SRV9BRERSIGRyX21pcnJvcltEUl9OQUREUl07 CisgIHVuc2lnbmVkIGRyX3N0YXR1c19taXJyb3IsIGRyX2NvbnRyb2xfbWly cm9yOworCisgIC8qIFJlZmVyZW5jZSBjb3VudHMgZm9yIGVhY2ggZGVidWcg cmVnaXN0ZXIuICAqLworICBpbnQgZHJfcmVmX2NvdW50W0RSX05BRERSXTsK K307CisKKy8qIEluaXRpYWxpemUgU1RBVEUuICAqLworZXh0ZXJuIHZvaWQg aTM4Nl9sb3dfaW5pdF9kcmVncyAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0 YXRlICpzdGF0ZSk7CisKKy8qIEluc2VydCBhIHdhdGNocG9pbnQgdG8gd2F0 Y2ggYSBtZW1vcnkgcmVnaW9uIHdoaWNoIHN0YXJ0cyBhdAorICAgYWRkcmVz cyBBRERSIGFuZCB3aG9zZSBsZW5ndGggaXMgTEVOIGJ5dGVzLiAgV2F0Y2gg bWVtb3J5IGFjY2Vzc2VzCisgICBvZiB0aGUgdHlwZSBUWVBFX0ZST01fUEFD S0VULiAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4gICov CitleHRlcm4gaW50IGkzODZfbG93X2luc2VydF93YXRjaHBvaW50IChzdHJ1 Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICBj aGFyIHR5cGVfZnJvbV9wYWNrZXQsIENPUkVfQUREUiBhZGRyLAorCQkJCSAg ICAgICBpbnQgbGVuKTsKKworLyogUmVtb3ZlIGEgd2F0Y2hwb2ludCB0aGF0 IHdhdGNoZWQgdGhlIG1lbW9yeSByZWdpb24gd2hpY2ggc3RhcnRzIGF0Cisg ICBhZGRyZXNzIEFERFIsIHdob3NlIGxlbmd0aCBpcyBMRU4gYnl0ZXMsIGFu ZCBmb3IgYWNjZXNzZXMgb2YgdGhlCisgICB0eXBlIFRZUEVfRlJPTV9QQUNL RVQuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAgKi8K K2V4dGVybiBpbnQgaTM4Nl9sb3dfcmVtb3ZlX3dhdGNocG9pbnQgKHN0cnVj dCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgIGNo YXIgdHlwZV9mcm9tX3BhY2tldCwgQ09SRV9BRERSIGFkZHIsCisJCQkJICAg ICAgIGludCBsZW4pOworCisvKiBSZXR1cm4gbm9uLXplcm8gaWYgd2UgY2Fu IHdhdGNoIGEgbWVtb3J5IHJlZ2lvbiB0aGF0IHN0YXJ0cyBhdAorICAgYWRk cmVzcyBBRERSIGFuZCB3aG9zZSBsZW5ndGggaXMgTEVOIGJ5dGVzLiAgKi8K K2V4dGVybiBpbnQgaTM4Nl9sb3dfcmVnaW9uX29rX2Zvcl93YXRjaHBvaW50 IChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAorCQkJCQkg ICAgICBDT1JFX0FERFIgYWRkciwgaW50IGxlbik7CisKKy8qIElmIHRoZSBp bmZlcmlvciBoYXMgc29tZSBicmVhay93YXRjaHBvaW50IHRoYXQgdHJpZ2dl cmVkLCBzZXQgdGhlCisgICBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGF0 IGJyZWFrL3dhdGNocG9pbnQgYW5kIHJldHVybiB0cnVlLgorICAgT3RoZXJ3 aXNlLCByZXR1cm4gZmFsc2UuICAqLworZXh0ZXJuIGludCBpMzg2X2xvd19z dG9wcGVkX2RhdGFfYWRkcmVzcyAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0 YXRlICpzdGF0ZSwKKwkJCQkJICBDT1JFX0FERFIgKmFkZHJfcCk7CisKKy8q IFJldHVybiB0cnVlIGlmIHRoZSBpbmZlcmlvciBoYXMgc29tZSB3YXRjaHBv aW50IHRoYXQgdHJpZ2dlcmVkLgorICAgT3RoZXJ3aXNlIHJldHVybiBmYWxz ZS4gICovCitleHRlcm4gaW50IGkzODZfbG93X3N0b3BwZWRfYnlfd2F0Y2hw b2ludCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSk7CisM CisvKiBFYWNoIHRhcmdldCBuZWVkcyB0byBwcm92aWRlIHNldmVyYWwgbG93 LWxldmVsIGZ1bmN0aW9ucworICAgdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBp bnNlcnQgd2F0Y2hwb2ludHMgYW5kIGhhcmR3YXJlIGJyZWFrcG9pbnRzCisg ICBpbnRvIHRoZSBpbmZlcmlvciwgcmVtb3ZlIHRoZW0sIGFuZCBjaGVjayB0 aGVpciBzdGF0dXMuICBUaGVzZQorICAgZnVuY3Rpb25zIGFyZToKKworICAg ICAgaTM4Nl9kcl9sb3dfc2V0X2NvbnRyb2wgIC0tIHNldCB0aGUgZGVidWcg Y29udHJvbCAoRFI3KQorCQkJCSAgcmVnaXN0ZXIgdG8gYSBnaXZlbiB2YWx1 ZQorCisgICAgICBpMzg2X2RyX2xvd19zZXRfYWRkciAgICAgLS0gcHV0IGFu IGFkZHJlc3MgaW50byBvbmUgZGVidWcgcmVnaXN0ZXIKKworICAgICAgaTM4 Nl9kcl9sb3dfZ2V0X3N0YXR1cyAgIC0tIHJldHVybiB0aGUgdmFsdWUgb2Yg dGhlIGRlYnVnCisJCQkJICBzdGF0dXMgKERSNikgcmVnaXN0ZXIuCisqLwor CisvKiBVcGRhdGUgdGhlIGluZmVyaW9yJ3MgZGVidWcgcmVnaXN0ZXIgUkVH TlVNIGZyb20gU1RBVEUuICAqLworZXh0ZXJuIHZvaWQgaTM4Nl9kcl9sb3df c2V0X2FkZHIgKGNvbnN0IHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAq c3RhdGUsCisJCQkJICBpbnQgcmVnbnVtKTsKKworLyogVXBkYXRlIHRoZSBp bmZlcmlvcidzIERSNyBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIGZyb20gU1RB VEUuICAqLworZXh0ZXJuIHZvaWQgaTM4Nl9kcl9sb3dfc2V0X2NvbnRyb2wg KGNvbnN0IHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUpOwor CisvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBpbmZlcmlvcidzIERSNiBkZWJ1 ZyBzdGF0dXMgcmVnaXN0ZXIKKyAgIGFuZCByZWNvcmQgaXQgaW4gU1RBVEUu ICAqLworZXh0ZXJuIHZvaWQgaTM4Nl9kcl9sb3dfZ2V0X3N0YXR1cyAoc3Ry dWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSk7CkluZGV4OiBsaW51 eC1sb3cuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz L3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4xMDgKZGlmZiAtdSAtcCAtcjEuMTA4IGxpbnV4LWxv dy5jCi0tLSBsaW51eC1sb3cuYwkyNSBKdW4gMjAwOSAyMjoxMzo1MyAtMDAw MAkxLjEwOAorKysgbGludXgtbG93LmMJMzAgSnVuIDIwMDkgMDk6MTU6NTgg LTAwMDAKQEAgLTIyNCw2ICsyMjQsNyBAQCBkZWxldGVfbHdwIChzdHJ1Y3Qg bHdwX2luZm8gKmx3cCkKIHsKICAgcmVtb3ZlX3RocmVhZCAoZ2V0X2x3cF90 aHJlYWQgKGx3cCkpOwogICByZW1vdmVfaW5mZXJpb3IgKCZhbGxfbHdwcywg Jmx3cC0+aGVhZCk7CisgIGZyZWUgKGx3cC0+YXJjaF9wcml2YXRlKTsKICAg ZnJlZSAobHdwKTsKIH0KIApAQCAtMjQyLDYgKzI0Myw5IEBAIGxpbnV4X2Fk ZF9wcm9jZXNzIChpbnQgcGlkLCBpbnQgYXR0YWNoZWQKICAgcHJvYyA9IGFk ZF9wcm9jZXNzIChwaWQsIGF0dGFjaGVkKTsKICAgcHJvYy0+cHJpdmF0ZSA9 IHhjYWxsb2MgKDEsIHNpemVvZiAoKnByb2MtPnByaXZhdGUpKTsKIAorICBp ZiAodGhlX2xvd190YXJnZXQubmV3X3Byb2Nlc3MgIT0gTlVMTCkKKyAgICBw cm9jLT5wcml2YXRlLT5hcmNoX3ByaXZhdGUgPSB0aGVfbG93X3RhcmdldC5u ZXdfcHJvY2VzcyAoKTsKKwogICByZXR1cm4gcHJvYzsKIH0KIApAQCAtMjUx LDYgKzI1NSw3IEBAIGxpbnV4X2FkZF9wcm9jZXNzIChpbnQgcGlkLCBpbnQg YXR0YWNoZWQKIHN0YXRpYyB2b2lkCiBsaW51eF9yZW1vdmVfcHJvY2VzcyAo c3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvY2VzcykKIHsKKyAgZnJlZSAocHJv Y2Vzcy0+cHJpdmF0ZS0+YXJjaF9wcml2YXRlKTsKICAgZnJlZSAocHJvY2Vz cy0+cHJpdmF0ZSk7CiAgIHJlbW92ZV9wcm9jZXNzIChwcm9jZXNzKTsKIH0K QEAgLTM3Niw2ICszODEsOSBAQCBhZGRfbHdwIChwdGlkX3QgcHRpZCkKIAog ICBsd3AtPmhlYWQuaWQgPSBwdGlkOwogCisgIGlmICh0aGVfbG93X3Rhcmdl dC5uZXdfdGhyZWFkICE9IE5VTEwpCisgICAgbHdwLT5hcmNoX3ByaXZhdGUg PSB0aGVfbG93X3RhcmdldC5uZXdfdGhyZWFkICgpOworCiAgIGFkZF9pbmZl cmlvcl90b19saXN0ICgmYWxsX2x3cHMsICZsd3AtPmhlYWQpOwogCiAgIHJl dHVybiBsd3A7CkBAIC00NjYsNyArNDc0LDYgQEAgbGludXhfYXR0YWNoX2x3 cF8xICh1bnNpZ25lZCBsb25nIGx3cGlkLAogICBuZXdfbHdwID0gKHN0cnVj dCBsd3BfaW5mbyAqKSBhZGRfbHdwIChwdGlkKTsKICAgYWRkX3RocmVhZCAo cHRpZCwgbmV3X2x3cCk7CiAKLQogICAvKiBXZSBuZWVkIHRvIHdhaXQgZm9y IFNJR1NUT1AgYmVmb3JlIGJlaW5nIGFibGUgdG8gbWFrZSB0aGUgbmV4dAog ICAgICBwdHJhY2UgY2FsbCBvbiB0aGlzIExXUC4gICovCiAgIG5ld19sd3At Pm11c3Rfc2V0X3B0cmFjZV9mbGFncyA9IDE7CkBAIC0xNzQwLDYgKzE3NDcs OSBAQCBsaW51eF9yZXN1bWVfb25lX2x3cCAoc3RydWN0IGx3cF9pbmZvICps CiAgICAgICAqcF9zaWcgPSBOVUxMOwogICAgIH0KIAorICBpZiAodGhlX2xv d190YXJnZXQucHJlcGFyZV90b19yZXN1bWUgIT0gTlVMTCkKKyAgICB0aGVf bG93X3RhcmdldC5wcmVwYXJlX3RvX3Jlc3VtZSAobHdwKTsKKwogICByZWdj YWNoZV9pbnZhbGlkYXRlX29uZSAoKHN0cnVjdCBpbmZlcmlvcl9saXN0X2Vu dHJ5ICopCiAJCQkgICBnZXRfbHdwX3RocmVhZCAobHdwKSk7CiAgIGVycm5v ID0gMDsKSW5kZXg6IGxpbnV4LWxvdy5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL2xpbnV4 LWxvdy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUgLXAg LXIxLjMxIGxpbnV4LWxvdy5oCi0tLSBsaW51eC1sb3cuaAkyNSBKdW4gMjAw OSAyMjoxMzo1MyAtMDAwMAkxLjMxCisrKyBsaW51eC1sb3cuaAkzMCBKdW4g MjAwOSAwOToxNTo1OCAtMDAwMApAQCAtNTYsOCArNTYsMTMgQEAgc3RydWN0 IHByb2Nlc3NfaW5mb19wcml2YXRlCiAKICAgLyogQ29ubmVjdGlvbiB0byB0 aGUgbGlidGhyZWFkX2RiIGxpYnJhcnkuICAqLwogICB0ZF90aHJhZ2VudF90 ICp0aHJlYWRfYWdlbnQ7CisKKyAgLyogQXJjaC1zcGVjaWZpYyBhZGRpdGlv bnMuICAqLworICBzdHJ1Y3QgYXJjaF9wcm9jZXNzX2luZm8gKmFyY2hfcHJp dmF0ZTsKIH07CiAKK3N0cnVjdCBsd3BfaW5mbzsKKwogc3RydWN0IGxpbnV4 X3RhcmdldF9vcHMKIHsKICAgLyogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNl dHVwLiAgKi8KQEAgLTk3LDEwICsxMDIsMjQgQEAgc3RydWN0IGxpbnV4X3Rh cmdldF9vcHMKICAgICAgSWYgRElSRUNUSU9OIGlzIDEsIHRoZW4gY29weSBm cm9tIElORiB0byBOQVRJVkUuCiAgICAgIElmIERJUkVDVElPTiBpcyAwLCBj b3B5IGZyb20gTkFUSVZFIHRvIElORi4gICovCiAgIGludCAoKnNpZ2luZm9f Zml4dXApIChzdHJ1Y3Qgc2lnaW5mbyAqbmF0aXZlLCB2b2lkICppbmYsIGlu dCBkaXJlY3Rpb24pOworCisgIC8qIEhvb2sgdG8gY2FsbCB3aGVuIGEgbmV3 IHByb2Nlc3MgaXMgY3JlYXRlZCBvciBhdHRhY2hlZCB0by4KKyAgICAgSWYg ZXh0cmEgcGVyLXByb2Nlc3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRhdGEg aXMgbmVlZGVkLAorICAgICBhbGxvY2F0ZSBpdCBoZXJlLiAgKi8KKyAgc3Ry dWN0IGFyY2hfcHJvY2Vzc19pbmZvICogKCpuZXdfcHJvY2VzcykgKHZvaWQp OworCisgIC8qIEhvb2sgdG8gY2FsbCB3aGVuIGEgbmV3IHRocmVhZCBpcyBk ZXRlY3RlZC4KKyAgICAgSWYgZXh0cmEgcGVyLXRocmVhZCBhcmNoaXRlY3R1 cmUtc3BlY2lmaWMgZGF0YSBpcyBuZWVkZWQsCisgICAgIGFsbG9jYXRlIGl0 IGhlcmUuICAqLworICBzdHJ1Y3QgYXJjaF9sd3BfaW5mbyAqICgqbmV3X3Ro cmVhZCkgKHZvaWQpOworCisgIC8qIEhvb2sgdG8gY2FsbCBwcmlvciB0byBy ZXN1bWluZyBhIHRocmVhZC4gICovCisgIHZvaWQgKCpwcmVwYXJlX3RvX3Jl c3VtZSkgKHN0cnVjdCBsd3BfaW5mbyAqKTsKIH07CiAKIGV4dGVybiBzdHJ1 Y3QgbGludXhfdGFyZ2V0X29wcyB0aGVfbG93X3RhcmdldDsKIAorI2RlZmlu ZSBwdGlkX29mKHByb2MpICgocHJvYyktPmhlYWQuaWQpCiAjZGVmaW5lIHBp ZF9vZihwcm9jKSBwdGlkX2dldF9waWQgKChwcm9jKS0+aGVhZC5pZCkKICNk ZWZpbmUgbHdwaWRfb2YocHJvYykgcHRpZF9nZXRfbHdwICgocHJvYyktPmhl YWQuaWQpCiAKQEAgLTE3Myw2ICsxOTIsOSBAQCBzdHJ1Y3QgbHdwX2luZm8K ICAgICAgVEhSRUFEX0tOT1dOIGlzIHNldC4gICovCiAgIHRkX3RocmhhbmRs ZV90IHRoOwogI2VuZGlmCisKKyAgLyogQXJjaC1zcGVjaWZpYyBhZGRpdGlv bnMuICAqLworICBzdHJ1Y3QgYXJjaF9sd3BfaW5mbyAqYXJjaF9wcml2YXRl OwogfTsKIAogZXh0ZXJuIHN0cnVjdCBpbmZlcmlvcl9saXN0IGFsbF9sd3Bz OwpJbmRleDogbGludXgteDg2LWxvdy5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL2xpbnV4 LXg4Ni1sb3cuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUg LXAgLXIxLjIgbGludXgteDg2LWxvdy5jCi0tLSBsaW51eC14ODYtbG93LmMJ MTMgTWF5IDIwMDkgMTk6MTE6MDQgLTAwMDAJMS4yCisrKyBsaW51eC14ODYt bG93LmMJMzAgSnVuIDIwMDkgMDk6MTU6NTggLTAwMDAKQEAgLTE4LDEwICsx OCwxMiBAQAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgog I2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgInNlcnZlci5oIgogI2lu Y2x1ZGUgImxpbnV4LWxvdy5oIgogI2luY2x1ZGUgImkzODctZnAuaCIKKyNp bmNsdWRlICJpMzg2LWxvdy5oIgogCiAjaW5jbHVkZSAiZ2RiX3Byb2Nfc2Vy dmljZS5oIgogCkBAIC01Niw2ICs1OCwyMSBAQCB2b2lkIGluaXRfcmVnaXN0 ZXJzX3g4Nl82NF9saW51eCAodm9pZCk7CiAjZGVmaW5lIEFSQ0hfR0VUX0dT IDB4MTAwNAogI2VuZGlmCiAKKy8qIFBlci1wcm9jZXNzIGFyY2gtc3BlY2lm aWMgZGF0YSB3ZSB3YW50IHRvIGtlZXAuICAqLworCitzdHJ1Y3QgYXJjaF9w cm9jZXNzX2luZm8KK3sKKyAgc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRl IGRlYnVnX3JlZ19zdGF0ZTsKK307CisKKy8qIFBlci10aHJlYWQgYXJjaC1z cGVjaWZpYyBkYXRhIHdlIHdhbnQgdG8ga2VlcC4gICovCisKK3N0cnVjdCBh cmNoX2x3cF9pbmZvCit7CisgIC8qIE5vbi16ZXJvIGlmIG91ciBjb3B5IGRp ZmZlcnMgZnJvbSB3aGF0J3MgcmVjb3JkZWQgaW4gdGhlIHRocmVhZC4gICov CisgIGludCBkZWJ1Z19yZWdpc3RlcnNfY2hhbmdlZDsKK307CisKICNpZmRl ZiBfX3g4Nl82NF9fCiAKIC8qIE1hcHBpbmcgYmV0d2VlbiB0aGUgZ2VuZXJh bC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBgc3RydWN0IHVzZXInCkBAIC0zMTcs NiArMzM0LDE5OCBAQCB4ODZfYnJlYWtwb2ludF9hdCAoQ09SRV9BRERSIHBj KQogICByZXR1cm4gMDsKIH0KIAwKKy8qIFN1cHBvcnQgZm9yIGRlYnVnIHJl Z2lzdGVycy4gICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCit4ODZfbGlu dXhfZHJfZ2V0IChwdGlkX3QgcHRpZCwgaW50IHJlZ251bSkKK3sKKyAgaW50 IHRpZDsKKyAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworICB0aWQgPSBwdGlk X2dldF9sd3AgKHB0aWQpOworCisgIGVycm5vID0gMDsKKyAgdmFsdWUgPSBw dHJhY2UgKFBUUkFDRV9QRUVLVVNFUiwgdGlkLAorCQkgIG9mZnNldG9mIChz dHJ1Y3QgdXNlciwgdV9kZWJ1Z3JlZ1tyZWdudW1dKSwgMCk7CisgIGlmIChl cnJubyAhPSAwKQorICAgIGVycm9yICgiQ291bGRuJ3QgcmVhZCBkZWJ1ZyBy ZWdpc3RlciIpOworCisgIHJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZv aWQKK3g4Nl9saW51eF9kcl9zZXQgKHB0aWRfdCBwdGlkLCBpbnQgcmVnbnVt LCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworICBpbnQgdGlkOworCisgIHRp ZCA9IHB0aWRfZ2V0X2x3cCAocHRpZCk7CisKKyAgZXJybm8gPSAwOworICBw dHJhY2UgKFBUUkFDRV9QT0tFVVNFUiwgdGlkLAorCSAgb2Zmc2V0b2YgKHN0 cnVjdCB1c2VyLCB1X2RlYnVncmVnW3JlZ251bV0pLCB2YWx1ZSk7CisgIGlm IChlcnJubyAhPSAwKQorICAgIGVycm9yICgiQ291bGRuJ3Qgd3JpdGUgZGVi dWcgcmVnaXN0ZXIiKTsKK30KKworLyogVXBkYXRlIHRoZSBpbmZlcmlvcidz IGRlYnVnIHJlZ2lzdGVyIFJFR05VTSBmcm9tIFNUQVRFLiAgKi8KKwordm9p ZAoraTM4Nl9kcl9sb3dfc2V0X2FkZHIgKGNvbnN0IHN0cnVjdCBpMzg2X2Rl YnVnX3JlZ19zdGF0ZSAqc3RhdGUsIGludCByZWdudW0pCit7CisgIHN0cnVj dCBpbmZlcmlvcl9saXN0X2VudHJ5ICpscDsKKyAgQ09SRV9BRERSIGFkZHI7 CisgIC8qIE9ubHkgbmVlZCB0byB1cGRhdGUgdGhlIHRocmVhZHMgb2YgdGhp cyBwcm9jZXNzLiAgKi8KKyAgaW50IHBpZCA9IHBpZF9vZiAoZ2V0X3RocmVh ZF9sd3AgKGN1cnJlbnRfaW5mZXJpb3IpKTsKKworICBpZiAoISAocmVnbnVt ID49IDAgJiYgcmVnbnVtIDw9IERSX0xBU1RBRERSIC0gRFJfRklSU1RBRERS KSkKKyAgICBmYXRhbCAoIkludmFsaWQgZGVidWcgcmVnaXN0ZXIgJWQiLCBy ZWdudW0pOworCisgIGFkZHIgPSBzdGF0ZS0+ZHJfbWlycm9yW3JlZ251bV07 CisKKyAgZm9yIChscCA9IGFsbF9sd3BzLmhlYWQ7IGxwOyBscCA9IGxwLT5u ZXh0KQorICAgIHsKKyAgICAgIHN0cnVjdCBsd3BfaW5mbyAqbHdwID0gKHN0 cnVjdCBsd3BfaW5mbyAqKSBscDsKKworICAgICAgLyogVGhlIGFjdHVhbCB1 cGRhdGUgaXMgZG9uZSBsYXRlciwgd2UganVzdCBtYXJrIHRoYXQgdGhlIHJl Z2lzdGVyCisJIG5lZWRzIHVwZGF0aW5nLiAgKi8KKyAgICAgIGlmIChwaWRf b2YgKGx3cCkgPT0gcGlkKQorCWx3cC0+YXJjaF9wcml2YXRlLT5kZWJ1Z19y ZWdpc3RlcnNfY2hhbmdlZCA9IDE7CisgICAgfQorfQorCisvKiBVcGRhdGUg dGhlIGluZmVyaW9yJ3MgRFI3IGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgZnJv bSBTVEFURS4gICovCisKK3ZvaWQKK2kzODZfZHJfbG93X3NldF9jb250cm9s IChjb25zdCBzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKQor eworICBzdHJ1Y3QgaW5mZXJpb3JfbGlzdF9lbnRyeSAqbHA7CisgIC8qIE9u bHkgbmVlZCB0byB1cGRhdGUgdGhlIHRocmVhZHMgb2YgdGhpcyBwcm9jZXNz LiAgKi8KKyAgaW50IHBpZCA9IHBpZF9vZiAoZ2V0X3RocmVhZF9sd3AgKGN1 cnJlbnRfaW5mZXJpb3IpKTsKKworICBmb3IgKGxwID0gYWxsX2x3cHMuaGVh ZDsgbHA7IGxwID0gbHAtPm5leHQpCisgICAgeworICAgICAgc3RydWN0IGx3 cF9pbmZvICpsd3AgPSAoc3RydWN0IGx3cF9pbmZvICopIGxwOworCisgICAg ICAvKiBUaGUgYWN0dWFsIHVwZGF0ZSBpcyBkb25lIGxhdGVyLCB3ZSBqdXN0 IG1hcmsgdGhhdCB0aGUgcmVnaXN0ZXIKKwkgbmVlZHMgdXBkYXRpbmcuICAq LworICAgICAgaWYgKHBpZF9vZiAobHdwKSA9PSBwaWQpCisJbHdwLT5hcmNo X3ByaXZhdGUtPmRlYnVnX3JlZ2lzdGVyc19jaGFuZ2VkID0gMTsKKyAgICB9 Cit9CisKKy8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIERSNiBkZWJ1ZyBzdGF0 dXMgcmVnaXN0ZXIgZnJvbSB0aGUgaW5mZXJpb3IKKyAgIGFuZCByZWNvcmQg aXQgaW4gU1RBVEUuICAqLworCit2b2lkCitpMzg2X2RyX2xvd19nZXRfc3Rh dHVzIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKQorewor ICBzdHJ1Y3QgbHdwX2luZm8gKmx3cCA9IGdldF90aHJlYWRfbHdwIChjdXJy ZW50X2luZmVyaW9yKTsKKyAgcHRpZF90IHB0aWQgPSBwdGlkX29mIChsd3Ap OworCisgIHN0YXRlLT5kcl9zdGF0dXNfbWlycm9yID0geDg2X2xpbnV4X2Ry X2dldCAocHRpZCwgRFJfU1RBVFVTKTsKK30KKwwKKy8qIFdhdGNocG9pbnQg c3VwcG9ydC4gICovCisKK3N0YXRpYyBpbnQKK3g4Nl9pbnNlcnRfcG9pbnQg KGNoYXIgdHlwZSwgQ09SRV9BRERSIGFkZHIsIGludCBsZW4pCit7CisgIHN0 cnVjdCBwcm9jZXNzX2luZm8gKnByb2MgPSBjdXJyZW50X3Byb2Nlc3MgKCk7 CisgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgY2FzZSAnMic6CisgICAg Y2FzZSAnMyc6CisgICAgY2FzZSAnNCc6CisgICAgICByZXR1cm4gaTM4Nl9s b3dfaW5zZXJ0X3dhdGNocG9pbnQgKCZwcm9jLT5wcml2YXRlLT5hcmNoX3By aXZhdGUtPmRlYnVnX3JlZ19zdGF0ZSwKKwkJCQkJIHR5cGUsIGFkZHIsIGxl bik7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIFVuc3VwcG9ydGVkLiAgKi8K KyAgICAgIHJldHVybiAxOworICAgIH0KK30KKworc3RhdGljIGludAoreDg2 X3JlbW92ZV9wb2ludCAoY2hhciB0eXBlLCBDT1JFX0FERFIgYWRkciwgaW50 IGxlbikKK3sKKyAgc3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvYyA9IGN1cnJl bnRfcHJvY2VzcyAoKTsKKyAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICBj YXNlICcyJzoKKyAgICBjYXNlICczJzoKKyAgICBjYXNlICc0JzoKKyAgICAg IHJldHVybiBpMzg2X2xvd19yZW1vdmVfd2F0Y2hwb2ludCAoJnByb2MtPnBy aXZhdGUtPmFyY2hfcHJpdmF0ZS0+ZGVidWdfcmVnX3N0YXRlLAorCQkJCQkg dHlwZSwgYWRkciwgbGVuKTsKKyAgICBkZWZhdWx0OgorICAgICAgLyogVW5z dXBwb3J0ZWQuICAqLworICAgICAgcmV0dXJuIDE7CisgICAgfQorfQorCitz dGF0aWMgaW50Cit4ODZfc3RvcHBlZF9ieV93YXRjaHBvaW50ICh2b2lkKQor eworICBzdHJ1Y3QgcHJvY2Vzc19pbmZvICpwcm9jID0gY3VycmVudF9wcm9j ZXNzICgpOworICByZXR1cm4gaTM4Nl9sb3dfc3RvcHBlZF9ieV93YXRjaHBv aW50ICgmcHJvYy0+cHJpdmF0ZS0+YXJjaF9wcml2YXRlLT5kZWJ1Z19yZWdf c3RhdGUpOworfQorCitzdGF0aWMgQ09SRV9BRERSCit4ODZfc3RvcHBlZF9k YXRhX2FkZHJlc3MgKHZvaWQpCit7CisgIHN0cnVjdCBwcm9jZXNzX2luZm8g KnByb2MgPSBjdXJyZW50X3Byb2Nlc3MgKCk7CisgIENPUkVfQUREUiBhZGRy OworICBpZiAoaTM4Nl9sb3dfc3RvcHBlZF9kYXRhX2FkZHJlc3MgKCZwcm9j LT5wcml2YXRlLT5hcmNoX3ByaXZhdGUtPmRlYnVnX3JlZ19zdGF0ZSwKKwkJ CQkgICAgICZhZGRyKSkKKyAgICByZXR1cm4gYWRkcjsKKyAgcmV0dXJuIDA7 Cit9CisMCisvKiBDYWxsZWQgd2hlbiBhIG5ldyBwcm9jZXNzIGlzIGNyZWF0 ZWQuICAqLworCitzdGF0aWMgc3RydWN0IGFyY2hfcHJvY2Vzc19pbmZvICoK K3g4Nl9saW51eF9uZXdfcHJvY2VzcyAodm9pZCkKK3sKKyAgc3RydWN0IGFy Y2hfcHJvY2Vzc19pbmZvICppbmZvID0geGNhbGxvYyAoMSwgc2l6ZW9mICgq aW5mbykpOworCisgIGkzODZfbG93X2luaXRfZHJlZ3MgKCZpbmZvLT5kZWJ1 Z19yZWdfc3RhdGUpOworCisgIHJldHVybiBpbmZvOworfQorCisvKiBDYWxs ZWQgd2hlbiBhIG5ldyB0aHJlYWQgaXMgZGV0ZWN0ZWQuICAqLworCitzdGF0 aWMgc3RydWN0IGFyY2hfbHdwX2luZm8gKgoreDg2X2xpbnV4X25ld190aHJl YWQgKHZvaWQpCit7CisgIHN0cnVjdCBhcmNoX2x3cF9pbmZvICppbmZvID0g eGNhbGxvYyAoMSwgc2l6ZW9mICgqaW5mbykpOworCisgIGluZm8tPmRlYnVn X3JlZ2lzdGVyc19jaGFuZ2VkID0gMTsKKworICByZXR1cm4gaW5mbzsKK30K KworLyogQ2FsbGVkIHdoZW4gcmVzdW1pbmcgYSB0aHJlYWQuCisgICBJZiB0 aGUgZGVidWcgcmVncyBoYXZlIGNoYW5nZWQsIHVwZGF0ZSB0aGUgdGhyZWFk J3MgY29waWVzLiAgKi8KKworc3RhdGljIHZvaWQKK3g4Nl9saW51eF9wcmVw YXJlX3RvX3Jlc3VtZSAoc3RydWN0IGx3cF9pbmZvICpsd3ApCit7CisgIGlm IChsd3AtPmFyY2hfcHJpdmF0ZS0+ZGVidWdfcmVnaXN0ZXJzX2NoYW5nZWQp CisgICAgeworICAgICAgaW50IGk7CisgICAgICBwdGlkX3QgcHRpZCA9IHB0 aWRfb2YgKGx3cCk7CisgICAgICBpbnQgcGlkID0gcHRpZF9nZXRfcGlkIChw dGlkKTsKKyAgICAgIHN0cnVjdCBwcm9jZXNzX2luZm8gKnByb2MgPSBmaW5k X3Byb2Nlc3NfcGlkIChwaWQpOworICAgICAgc3RydWN0IGkzODZfZGVidWdf cmVnX3N0YXRlICpzdGF0ZSA9ICZwcm9jLT5wcml2YXRlLT5hcmNoX3ByaXZh dGUtPmRlYnVnX3JlZ19zdGF0ZTsKKworICAgICAgZm9yIChpID0gRFJfRklS U1RBRERSOyBpIDw9IERSX0xBU1RBRERSOyBpKyspCisJeDg2X2xpbnV4X2Ry X3NldCAocHRpZCwgaSwgc3RhdGUtPmRyX21pcnJvcltpXSk7CisKKyAgICAg IHg4Nl9saW51eF9kcl9zZXQgKHB0aWQsIERSX0NPTlRST0wsIHN0YXRlLT5k cl9jb250cm9sX21pcnJvcik7CisKKyAgICAgIGx3cC0+YXJjaF9wcml2YXRl LT5kZWJ1Z19yZWdpc3RlcnNfY2hhbmdlZCA9IDA7CisgICAgfQorfQorDAog LyogV2hlbiBHREJTRVJWRVIgaXMgYnVpbHQgYXMgYSA2NC1iaXQgYXBwbGlj YXRpb24gb24gbGludXgsIHRoZQogICAgUFRSQUNFX0dFVFNJR0lORk8gZGF0 YSBpcyBhbHdheXMgcHJlc2VudGVkIGluIDY0LWJpdCBsYXlvdXQuICBTaW5j ZQogICAgZGVidWdnaW5nIGEgMzItYml0IGluZmVyaW9yIHdpdGggYSA2NC1i aXQgR0RCU0VSVkVSIHNob3VsZCBsb29rIHRoZSBzYW1lCkBAIC02MzAsMTAg KzgzOSwxMCBAQCBzdHJ1Y3QgbGludXhfdGFyZ2V0X29wcyB0aGVfbG93X3Rh cmdldCA9CiAgIE5VTEwsCiAgIDEsCiAgIHg4Nl9icmVha3BvaW50X2F0LAot ICBOVUxMLAotICBOVUxMLAotICBOVUxMLAotICBOVUxMLAorICB4ODZfaW5z ZXJ0X3BvaW50LAorICB4ODZfcmVtb3ZlX3BvaW50LAorICB4ODZfc3RvcHBl ZF9ieV93YXRjaHBvaW50LAorICB4ODZfc3RvcHBlZF9kYXRhX2FkZHJlc3Ms CiAgIC8qIGNvbGxlY3RfcHRyYWNlX3JlZ2lzdGVyL3N1cHBseV9wdHJhY2Vf cmVnaXN0ZXIgYXJlIG5vdCBuZWVkZWQgaW4gdGhlCiAgICAgIG5hdGl2ZSBp Mzg2IGNhc2UgKG5vIHJlZ2lzdGVycyBzbWFsbGVyIHRoYW4gYW4geGZlciB1 bml0KSwgYW5kIGFyZSBub3QKICAgICAgdXNlZCBpbiB0aGUgYmlhcmNoIGNh c2UgKEhBVkVfTElOVVhfVVNSUkVHUyBpcyBub3QgZGVmaW5lZCkuICAqLwpA QCAtNjQxLDQgKzg1MCw3IEBAIHN0cnVjdCBsaW51eF90YXJnZXRfb3BzIHRo ZV9sb3dfdGFyZ2V0ID0KICAgTlVMTCwKICAgLyogbmVlZCB0byBmaXggdXAg aTM4NiBzaWdpbmZvIGlmIGhvc3QgaXMgYW1kNjQgKi8KICAgeDg2X3NpZ2lu Zm9fZml4dXAsCisgIHg4Nl9saW51eF9uZXdfcHJvY2VzcywKKyAgeDg2X2xp bnV4X25ld190aHJlYWQsCisgIHg4Nl9saW51eF9wcmVwYXJlX3RvX3Jlc3Vt ZQogfTsKSW5kZXg6IHNlcnZlci5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL3NlcnZlci5j LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwMQpkaWZmIC11IC1wIC1yMS4x MDEgc2VydmVyLmMKLS0tIHNlcnZlci5jCTI1IEp1biAyMDA5IDIyOjEzOjUy IC0wMDAwCTEuMTAxCisrKyBzZXJ2ZXIuYwkzMCBKdW4gMjAwOSAwOToxNTo1 OCAtMDAwMApAQCAtNTEsNiArNTEsOSBAQCBzdGF0aWMgY2hhciAqKnByb2dy YW1fYXJndiwgKip3cmFwcGVyX2FyCiAgICB3YXMgb3JpZ2luYWxseSB1c2Vk IHRvIGRlYnVnIExpbnV4VGhyZWFkcyBzdXBwb3J0LiAgKi8KIGludCBkZWJ1 Z190aHJlYWRzOwogCisvKiBFbmFibGUgZGVidWdnaW5nIG9mIGgvdyBicmVh a3BvaW50L3dhdGNocG9pbnQgc3VwcG9ydC4gICovCitpbnQgZGVidWdfaHdf cG9pbnRzOworCiBpbnQgcGFzc19zaWduYWxzW1RBUkdFVF9TSUdOQUxfTEFT VF07CiAKIGptcF9idWYgdG9wbGV2ZWw7CkBAIC00OTUsNiArNDk4LDggQEAg bW9uaXRvcl9zaG93X2hlbHAgKHZvaWQpCiAgIG1vbml0b3Jfb3V0cHV0ICgi VGhlIGZvbGxvd2luZyBtb25pdG9yIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQ6 XG4iKTsKICAgbW9uaXRvcl9vdXRwdXQgKCIgIHNldCBkZWJ1ZyA8MHwxPlxu Iik7CiAgIG1vbml0b3Jfb3V0cHV0ICgiICAgIEVuYWJsZSBnZW5lcmFsIGRl YnVnZ2luZyBtZXNzYWdlc1xuIik7CisgIG1vbml0b3Jfb3V0cHV0ICgiICBz ZXQgZGVidWctaHctcG9pbnRzIDwwfDE+XG4iKTsKKyAgbW9uaXRvcl9vdXRw dXQgKCIgICAgRW5hYmxlIGgvdyBicmVha3BvaW50L3dhdGNocG9pbnQgZGVi dWdnaW5nIG1lc3NhZ2VzXG4iKTsKICAgbW9uaXRvcl9vdXRwdXQgKCIgIHNl dCByZW1vdGUtZGVidWcgPDB8MT5cbiIpOwogICBtb25pdG9yX291dHB1dCAo IiAgICBFbmFibGUgcmVtb3RlIHByb3RvY29sIGRlYnVnZ2luZyBtZXNzYWdl c1xuIik7CiAgIG1vbml0b3Jfb3V0cHV0ICgiICBleGl0XG4iKTsKQEAgLTEy MTYsNiArMTIyMSwxNiBAQCBoYW5kbGVfcXVlcnkgKGNoYXIgKm93bl9idWYs IGludCBwYWNrZXRfCiAJICBkZWJ1Z190aHJlYWRzID0gMDsKIAkgIG1vbml0 b3Jfb3V0cHV0ICgiRGVidWcgb3V0cHV0IGRpc2FibGVkLlxuIik7CiAJfQor ICAgICAgZWxzZSBpZiAoc3RyY21wIChtb24sICJzZXQgZGVidWctaHctcG9p bnRzIDEiKSA9PSAwKQorCXsKKwkgIGRlYnVnX2h3X3BvaW50cyA9IDE7CisJ ICBtb25pdG9yX291dHB1dCAoIkgvVyBwb2ludCBkZWJ1Z2dpbmcgb3V0cHV0 IGVuYWJsZWQuXG4iKTsKKwl9CisgICAgICBlbHNlIGlmIChzdHJjbXAgKG1v biwgInNldCBkZWJ1Zy1ody1wb2ludHMgMCIpID09IDApCisJeworCSAgZGVi dWdfaHdfcG9pbnRzID0gMDsKKwkgIG1vbml0b3Jfb3V0cHV0ICgiSC9XIHBv aW50IGRlYnVnZ2luZyBvdXRwdXQgZGlzYWJsZWQuXG4iKTsKKwl9CiAgICAg ICBlbHNlIGlmIChzdHJjbXAgKG1vbiwgInNldCByZW1vdGUtZGVidWcgMSIp ID09IDApCiAJewogCSAgcmVtb3RlX2RlYnVnID0gMTsKSW5kZXg6IHNlcnZl ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvZ2Ric2VydmVyL3NlcnZlci5oLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjU4CmRpZmYgLXUgLXAgLXIxLjU4IHNlcnZlci5oCi0tLSBzZXJ2 ZXIuaAkyNCBNYXkgMjAwOSAyMTowNjo1MyAtMDAwMAkxLjU4CisrKyBzZXJ2 ZXIuaAkzMCBKdW4gMjAwOSAwOToxNTo1OCAtMDAwMApAQCAtMjcxLDYgKzI3 MSw3IEBAIGV4dGVybiBwdGlkX3Qgc3RlcF90aHJlYWQ7CiAKIGV4dGVybiBp bnQgc2VydmVyX3dhaXRpbmc7CiBleHRlcm4gaW50IGRlYnVnX3RocmVhZHM7 CitleHRlcm4gaW50IGRlYnVnX2h3X3BvaW50czsKIGV4dGVybiBpbnQgcGFz c19zaWduYWxzW107CiAKIGV4dGVybiBqbXBfYnVmIHRvcGxldmVsOwpAQCAt NDA3LDYgKzQwOCw3IEBAIHZvaWQgcGVycm9yX3dpdGhfbmFtZSAoY29uc3Qg Y2hhciAqc3RyaW4KIHZvaWQgZXJyb3IgKGNvbnN0IGNoYXIgKnN0cmluZywu Li4pIEFUVFJfTk9SRVRVUk4gQVRUUl9GT1JNQVQgKHByaW50ZiwgMSwgMik7 CiB2b2lkIGZhdGFsIChjb25zdCBjaGFyICpzdHJpbmcsLi4uKSBBVFRSX05P UkVUVVJOIEFUVFJfRk9STUFUIChwcmludGYsIDEsIDIpOwogdm9pZCB3YXJu aW5nIChjb25zdCBjaGFyICpzdHJpbmcsLi4uKSBBVFRSX0ZPUk1BVCAocHJp bnRmLCAxLCAyKTsKK2NoYXIgKnBhZGRyZXNzIChDT1JFX0FERFIgYWRkcik7 CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQvd3JpdGUg YXQgb25jZS4gIFRoZSB2YWx1ZSBoZXJlCiAgICBpcyBjaG9zZW4gdG8gZmls bCB1cCBhIHBhY2tldCAodGhlIGhlYWRlcnMgYWNjb3VudCBmb3IgdGhlIDMy KS4gICovCkluZGV4OiB3aW4zMi1hcm0tbG93LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIv d2luMzItYXJtLWxvdy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlm ZiAtdSAtcCAtcjEuOCB3aW4zMi1hcm0tbG93LmMKLS0tIHdpbjMyLWFybS1s b3cuYwkzIEphbiAyMDA5IDA1OjU3OjU3IC0wMDAwCTEuOAorKysgd2luMzIt YXJtLWxvdy5jCTMwIEp1biAyMDA5IDA5OjE1OjU4IC0wMDAwCkBAIC0xMjIs NCArMTIyLDkgQEAgc3RydWN0IHdpbjMyX3RhcmdldF9vcHMgdGhlX2xvd190 YXJnZXQgPQogICBOVUxMLCAvKiBzaW5nbGVfc3RlcCAqLwogICAoY29uc3Qg dW5zaWduZWQgY2hhciAqKSAmYXJtX3dpbmNlX2JyZWFrcG9pbnQsCiAgIGFy bV93aW5jZV9icmVha3BvaW50X2xlbiwKKyAgLyogV2F0Y2hwb2ludCByZWxh dGVkIGZ1bmN0aW9ucy4gIFNlZSB0YXJnZXQuaCBmb3IgY29tbWVudHMuICAq LworICBOVUxMLCAvKiBpbnNlcnRfcG9pbnQgKi8KKyAgTlVMTCwgLyogcmVt b3ZlX3BvaW50ICovCisgIE5VTEwsIC8qIHN0b3BwZWRfYnlfd2F0Y2hwb2lu dCAqLworICBOVUxMICAvKiBzdG9wcGVkX2RhdGFfYWRkcmVzcyAqLwogfTsK SW5kZXg6IHdpbjMyLWkzODYtbG93LmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvd2luMzIt aTM4Ni1sb3cuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC11 IC1wIC1yMS4xNCB3aW4zMi1pMzg2LWxvdy5jCi0tLSB3aW4zMi1pMzg2LWxv dy5jCTMgSmFuIDIwMDkgMDU6NTc6NTcgLTAwMDAJMS4xNAorKysgd2luMzIt aTM4Ni1sb3cuYwkzMCBKdW4gMjAwOSAwOToxNTo1OCAtMDAwMApAQCAtMTcs NiArMTcsNyBAQAogCiAjaW5jbHVkZSAic2VydmVyLmgiCiAjaW5jbHVkZSAi d2luMzItbG93LmgiCisjaW5jbHVkZSAiaTM4Ni1sb3cuaCIKIAogI2RlZmlu ZSBGQ1NfUkVHTlVNIDI3CiAjZGVmaW5lIEZPUF9SRUdOVU0gMzEKQEAgLTI2 LDE1ICsyNywxMDEgQEAKIC8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQg ZmlsZSByZWctaTM4Ni5jLiAgKi8KIHZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4 NiAodm9pZCk7CiAKLXN0YXRpYyB1bnNpZ25lZCBkcls4XTsKK3N0YXRpYyBz dHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgZGVidWdfcmVnX3N0YXRlOwog CiBzdGF0aWMgaW50IGRlYnVnX3JlZ2lzdGVyc19jaGFuZ2VkID0gMDsKIHN0 YXRpYyBpbnQgZGVidWdfcmVnaXN0ZXJzX3VzZWQgPSAwOwogCisvKiBVcGRh dGUgdGhlIGluZmVyaW9yJ3MgZGVidWcgcmVnaXN0ZXIgUkVHTlVNIGZyb20g U1RBVEUuICAqLworCit2b2lkCitpMzg2X2RyX2xvd19zZXRfYWRkciAoY29u c3Qgc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSwgaW50IHJl Z251bSkKK3sKKyAgaWYgKCEgKHJlZ251bSA+PSAwICYmIHJlZ251bSA8PSBE Ul9MQVNUQUREUiAtIERSX0ZJUlNUQUREUikpCisgICAgZmF0YWwgKCJJbnZh bGlkIGRlYnVnIHJlZ2lzdGVyICVkIiwgcmVnbnVtKTsKKworICAvKiBkZWJ1 Z19yZWdfc3RhdGUuZHJfbWlycm9yIGlzIGFscmVhZHkgc2V0LgorICAgICBK dXN0IG5vdGlmeSBpMzg2X3NldF90aHJlYWRfY29udGV4dCwgaTM4Nl90aHJl YWRfYWRkZWQKKyAgICAgdGhhdCB0aGUgcmVnaXN0ZXJzIG5lZWQgdG8gYmUg dXBkYXRlZC4gICovCisgIGRlYnVnX3JlZ2lzdGVyc19jaGFuZ2VkID0gMTsK KyAgZGVidWdfcmVnaXN0ZXJzX3VzZWQgPSAxOworfQorCisvKiBVcGRhdGUg dGhlIGluZmVyaW9yJ3MgRFI3IGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgZnJv bSBTVEFURS4gICovCisKK3ZvaWQKK2kzODZfZHJfbG93X3NldF9jb250cm9s IChjb25zdCBzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKQor eworICAvKiBkZWJ1Z19yZWdfc3RhdGUuZHJfY29udHJvbF9taXJyb3IgaXMg YWxyZWFkeSBzZXQuCisgICAgIEp1c3Qgbm90aWZ5IGkzODZfc2V0X3RocmVh ZF9jb250ZXh0LCBpMzg2X3RocmVhZF9hZGRlZAorICAgICB0aGF0IHRoZSBy ZWdpc3RlcnMgbmVlZCB0byBiZSB1cGRhdGVkLiAgKi8KKyAgZGVidWdfcmVn aXN0ZXJzX2NoYW5nZWQgPSAxOworICBkZWJ1Z19yZWdpc3RlcnNfdXNlZCA9 IDE7Cit9CisKKy8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIERSNiBkZWJ1ZyBz dGF0dXMgcmVnaXN0ZXIgZnJvbSB0aGUgaW5mZXJpb3IKKyAgIGFuZCByZWNv cmQgaXQgaW4gU1RBVEUuICAqLworCit2b2lkCitpMzg2X2RyX2xvd19nZXRf c3RhdHVzIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKQor eworICAvKiBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUsIHRo ZSBsYXN0IGNhbGwgdG8gdGhyZWFkX3JlYyBmb3IKKyAgICAgY3VycmVudF9l dmVudC5kd1RocmVhZElkIGlkIGhhcyBhbHJlYWR5IHNldCBpdC4gICovCit9 CisKKy8qIFdhdGNocG9pbnQgc3VwcG9ydC4gICovCisKK3N0YXRpYyBpbnQK K2kzODZfaW5zZXJ0X3BvaW50IChjaGFyIHR5cGUsIENPUkVfQUREUiBhZGRy LCBpbnQgbGVuKQoreworICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgIGNh c2UgJzInOgorICAgIGNhc2UgJzMnOgorICAgIGNhc2UgJzQnOgorICAgICAg cmV0dXJuIGkzODZfbG93X2luc2VydF93YXRjaHBvaW50ICgmZGVidWdfcmVn X3N0YXRlLAorCQkJCQkgdHlwZSwgYWRkciwgbGVuKTsKKyAgICBkZWZhdWx0 OgorICAgICAgLyogVW5zdXBwb3J0ZWQuICAqLworICAgICAgcmV0dXJuIDE7 CisgICAgfQorfQorCitzdGF0aWMgaW50CitpMzg2X3JlbW92ZV9wb2ludCAo Y2hhciB0eXBlLCBDT1JFX0FERFIgYWRkciwgaW50IGxlbikKK3sKKyAgc3dp dGNoICh0eXBlKQorICAgIHsKKyAgICBjYXNlICcyJzoKKyAgICBjYXNlICcz JzoKKyAgICBjYXNlICc0JzoKKyAgICAgIHJldHVybiBpMzg2X2xvd19yZW1v dmVfd2F0Y2hwb2ludCAoJmRlYnVnX3JlZ19zdGF0ZSwKKwkJCQkJIHR5cGUs IGFkZHIsIGxlbik7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIFVuc3VwcG9y dGVkLiAgKi8KKyAgICAgIHJldHVybiAxOworICAgIH0KK30KKworc3RhdGlj IGludAoraTM4Nl9zdG9wcGVkX2J5X3dhdGNocG9pbnQgKHZvaWQpCit7Cisg IHJldHVybiBpMzg2X2xvd19zdG9wcGVkX2J5X3dhdGNocG9pbnQgKCZkZWJ1 Z19yZWdfc3RhdGUpOworfQorCitzdGF0aWMgQ09SRV9BRERSCitpMzg2X3N0 b3BwZWRfZGF0YV9hZGRyZXNzICh2b2lkKQoreworICBDT1JFX0FERFIgYWRk cjsKKyAgaWYgKGkzODZfbG93X3N0b3BwZWRfZGF0YV9hZGRyZXNzICgmZGVi dWdfcmVnX3N0YXRlLCAmYWRkcikpCisgICAgcmV0dXJuIGFkZHI7CisgIHJl dHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogaTM4Nl9pbml0aWFsX3N0dWZm ICh2b2lkKQogewotICBtZW1zZXQgKCZkciwgMCwgc2l6ZW9mIChkcikpOwor ICBpMzg2X2xvd19pbml0X2RyZWdzICgmZGVidWdfcmVnX3N0YXRlKTsKICAg ZGVidWdfcmVnaXN0ZXJzX2NoYW5nZWQgPSAwOwogICBkZWJ1Z19yZWdpc3Rl cnNfdXNlZCA9IDA7CiB9CkBAIC01NSwxMiArMTQyLDEzIEBAIGkzODZfZ2V0 X3RocmVhZF9jb250ZXh0ICh3aW4zMl90aHJlYWRfaW4KICAgaWYgKHRoLT50 aWQgPT0gY3VycmVudF9ldmVudC0+ZHdUaHJlYWRJZCkKICAgICB7CiAgICAg ICAvKiBDb3B5IGRyIHZhbHVlcyBmcm9tIHRoZSBjdXJyZW50IHRocmVhZC4g ICovCi0gICAgICBkclswXSA9IHRoLT5jb250ZXh0LkRyMDsKLSAgICAgIGRy WzFdID0gdGgtPmNvbnRleHQuRHIxOwotICAgICAgZHJbMl0gPSB0aC0+Y29u dGV4dC5EcjI7Ci0gICAgICBkclszXSA9IHRoLT5jb250ZXh0LkRyMzsKLSAg ICAgIGRyWzZdID0gdGgtPmNvbnRleHQuRHI2OwotICAgICAgZHJbN10gPSB0 aC0+Y29udGV4dC5Ecjc7CisgICAgICBzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdf c3RhdGUgKmRyID0gJmRlYnVnX3JlZ19zdGF0ZTsKKyAgICAgIGRyLT5kcl9t aXJyb3JbMF0gPSB0aC0+Y29udGV4dC5EcjA7CisgICAgICBkci0+ZHJfbWly cm9yWzFdID0gdGgtPmNvbnRleHQuRHIxOworICAgICAgZHItPmRyX21pcnJv clsyXSA9IHRoLT5jb250ZXh0LkRyMjsKKyAgICAgIGRyLT5kcl9taXJyb3Jb M10gPSB0aC0+Y29udGV4dC5EcjM7CisgICAgICBkci0+ZHJfc3RhdHVzX21p cnJvciA9IHRoLT5jb250ZXh0LkRyNjsKKyAgICAgIGRyLT5kcl9jb250cm9s X21pcnJvciA9IHRoLT5jb250ZXh0LkRyNzsKICAgICB9CiB9CiAKQEAgLTY5 LDEzICsxNTcsMTQgQEAgaTM4Nl9zZXRfdGhyZWFkX2NvbnRleHQgKHdpbjMy X3RocmVhZF9pbgogewogICBpZiAoZGVidWdfcmVnaXN0ZXJzX2NoYW5nZWQp CiAgICAgewotICAgICAgdGgtPmNvbnRleHQuRHIwID0gZHJbMF07Ci0gICAg ICB0aC0+Y29udGV4dC5EcjEgPSBkclsxXTsKLSAgICAgIHRoLT5jb250ZXh0 LkRyMiA9IGRyWzJdOwotICAgICAgdGgtPmNvbnRleHQuRHIzID0gZHJbM107 Ci0gICAgICAvKiB0aC0+Y29udGV4dC5EcjYgPSBkcls2XTsKKyAgICAgIHN0 cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqZHIgPSAmZGVidWdfcmVnX3N0 YXRlOworICAgICAgdGgtPmNvbnRleHQuRHIwID0gZHItPmRyX21pcnJvclsw XTsKKyAgICAgIHRoLT5jb250ZXh0LkRyMSA9IGRyLT5kcl9taXJyb3JbMV07 CisgICAgICB0aC0+Y29udGV4dC5EcjIgPSBkci0+ZHJfbWlycm9yWzJdOwor ICAgICAgdGgtPmNvbnRleHQuRHIzID0gZHItPmRyX21pcnJvclszXTsKKyAg ICAgIC8qIHRoLT5jb250ZXh0LkRyNiA9IGRyLT5kcl9zdGF0dXNfbWlycm9y OwogCSBGSVhNRTogc2hvdWxkIHdlIHNldCBkcjYgYWxzbyA/PyAqLwotICAg ICAgdGgtPmNvbnRleHQuRHI3ID0gZHJbN107CisgICAgICB0aC0+Y29udGV4 dC5EcjcgPSBkci0+ZHJfY29udHJvbF9taXJyb3I7CiAgICAgfQogCiAgIFNl dFRocmVhZENvbnRleHQgKHRoLT5oLCAmdGgtPmNvbnRleHQpOwpAQCAtODcs MTYgKzE3NiwxNyBAQCBpMzg2X3RocmVhZF9hZGRlZCAod2luMzJfdGhyZWFk X2luZm8gKnRoCiAgIC8qIFNldCB0aGUgZGVidWcgcmVnaXN0ZXJzIGZvciB0 aGUgbmV3IHRocmVhZCBpZiB0aGV5IGFyZSB1c2VkLiAgKi8KICAgaWYgKGRl YnVnX3JlZ2lzdGVyc191c2VkKQogICAgIHsKKyAgICAgIHN0cnVjdCBpMzg2 X2RlYnVnX3JlZ19zdGF0ZSAqZHIgPSAmZGVidWdfcmVnX3N0YXRlOwogICAg ICAgdGgtPmNvbnRleHQuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9ERUJVR19S RUdJU1RFUlM7CiAgICAgICBHZXRUaHJlYWRDb250ZXh0ICh0aC0+aCwgJnRo LT5jb250ZXh0KTsKIAotICAgICAgdGgtPmNvbnRleHQuRHIwID0gZHJbMF07 Ci0gICAgICB0aC0+Y29udGV4dC5EcjEgPSBkclsxXTsKLSAgICAgIHRoLT5j b250ZXh0LkRyMiA9IGRyWzJdOwotICAgICAgdGgtPmNvbnRleHQuRHIzID0g ZHJbM107Ci0gICAgICAvKiB0aC0+Y29udGV4dC5EcjYgPSBkcls2XTsKKyAg ICAgIHRoLT5jb250ZXh0LkRyMCA9IGRyLT5kcl9taXJyb3JbMF07CisgICAg ICB0aC0+Y29udGV4dC5EcjEgPSBkci0+ZHJfbWlycm9yWzFdOworICAgICAg dGgtPmNvbnRleHQuRHIyID0gZHItPmRyX21pcnJvclsyXTsKKyAgICAgIHRo LT5jb250ZXh0LkRyMyA9IGRyLT5kcl9taXJyb3JbM107CisgICAgICAvKiB0 aC0+Y29udGV4dC5EcjYgPSBkci0+ZHJfc3RhdHVzX21pcnJvcjsKIAkgRklY TUU6IHNob3VsZCB3ZSBzZXQgZHI2IGFsc28gPz8gKi8KLSAgICAgIHRoLT5j b250ZXh0LkRyNyA9IGRyWzddOworICAgICAgdGgtPmNvbnRleHQuRHI3ID0g ZHItPmRyX2NvbnRyb2xfbWlycm9yOwogCiAgICAgICBTZXRUaHJlYWRDb250 ZXh0ICh0aC0+aCwgJnRoLT5jb250ZXh0KTsKICAgICAgIHRoLT5jb250ZXh0 LkNvbnRleHRGbGFncyA9IDA7CkBAIC0yMDUsNCArMjk1LDggQEAgc3RydWN0 IHdpbjMyX3RhcmdldF9vcHMgdGhlX2xvd190YXJnZXQgPQogICBpMzg2X3Np bmdsZV9zdGVwLAogICBOVUxMLCAvKiBicmVha3BvaW50ICovCiAgIDAsIC8q IGJyZWFrcG9pbnRfbGVuICovCisgIGkzODZfaW5zZXJ0X3BvaW50LAorICBp Mzg2X3JlbW92ZV9wb2ludCwKKyAgaTM4Nl9zdG9wcGVkX2J5X3dhdGNocG9p bnQsCisgIGkzODZfc3RvcHBlZF9kYXRhX2FkZHJlc3MKIH07CkluZGV4OiB3 aW4zMi1sb3cuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci93aW4zMi1sb3cuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4zNgpkaWZmIC11IC1wIC1yMS4zNiB3aW4zMi1s b3cuYwotLS0gd2luMzItbG93LmMJMjIgSnVuIDIwMDkgMTk6MzM6NDEgLTAw MDAJMS4zNgorKysgd2luMzItbG93LmMJMzAgSnVuIDIwMDkgMDk6MTU6NTgg LTAwMDAKQEAgLTIyOCw2ICsyMjgsNDggQEAgY2hpbGRfZGVsZXRlX3RocmVh ZCAoRFdPUkQgcGlkLCBEV09SRCB0aQogICBkZWxldGVfdGhyZWFkX2luZm8g KHRocmVhZCk7CiB9CiAKKy8qIFRoZXNlIHdhdGNocG9pbnQgcmVsYXRlZCB3 cmFwcGVyIGZ1bmN0aW9ucyBzaW1wbHkgcGFzcyBvbiB0aGUgZnVuY3Rpb24g Y2FsbAorICAgaWYgdGhlIGxvdyB0YXJnZXQgaGFzIHJlZ2lzdGVyZWQgYSBj b3JyZXNwb25kaW5nIGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIGludAord2lu MzJfaW5zZXJ0X3BvaW50IChjaGFyIHR5cGUsIENPUkVfQUREUiBhZGRyLCBp bnQgbGVuKQoreworICBpZiAodGhlX2xvd190YXJnZXQuaW5zZXJ0X3BvaW50 ICE9IE5VTEwpCisgICAgcmV0dXJuIHRoZV9sb3dfdGFyZ2V0Lmluc2VydF9w b2ludCAodHlwZSwgYWRkciwgbGVuKTsKKyAgZWxzZQorICAgIC8qIFVuc3Vw cG9ydGVkIChzZWUgdGFyZ2V0LmgpLiAgKi8KKyAgICByZXR1cm4gMTsKK30K Kworc3RhdGljIGludAord2luMzJfcmVtb3ZlX3BvaW50IChjaGFyIHR5cGUs IENPUkVfQUREUiBhZGRyLCBpbnQgbGVuKQoreworICBpZiAodGhlX2xvd190 YXJnZXQucmVtb3ZlX3BvaW50ICE9IE5VTEwpCisgICAgcmV0dXJuIHRoZV9s b3dfdGFyZ2V0LnJlbW92ZV9wb2ludCAodHlwZSwgYWRkciwgbGVuKTsKKyAg ZWxzZQorICAgIC8qIFVuc3VwcG9ydGVkIChzZWUgdGFyZ2V0LmgpLiAgKi8K KyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAord2luMzJfc3RvcHBl ZF9ieV93YXRjaHBvaW50ICh2b2lkKQoreworICBpZiAodGhlX2xvd190YXJn ZXQuc3RvcHBlZF9ieV93YXRjaHBvaW50ICE9IE5VTEwpCisgICAgcmV0dXJu IHRoZV9sb3dfdGFyZ2V0LnN0b3BwZWRfYnlfd2F0Y2hwb2ludCAoKTsKKyAg ZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgQ09SRV9BRERSCit3 aW4zMl9zdG9wcGVkX2RhdGFfYWRkcmVzcyAodm9pZCkKK3sKKyAgaWYgKHRo ZV9sb3dfdGFyZ2V0LnN0b3BwZWRfZGF0YV9hZGRyZXNzICE9IE5VTEwpCisg ICAgcmV0dXJuIHRoZV9sb3dfdGFyZ2V0LnN0b3BwZWRfZGF0YV9hZGRyZXNz ICgpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKKwogLyogVHJhbnNm ZXIgbWVtb3J5IGZyb20vdG8gdGhlIGRlYnVnZ2VkIHByb2Nlc3MuICAqLwog c3RhdGljIGludAogY2hpbGRfeGZlcl9tZW1vcnkgKENPUkVfQUREUiBtZW1h ZGRyLCBjaGFyICpvdXIsIGludCBsZW4sCkBAIC0xNjk3LDEwICsxNzM5LDEw IEBAIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyB3aW4zMl90YXJnZXRfb3AK ICAgTlVMTCwKICAgd2luMzJfcmVxdWVzdF9pbnRlcnJ1cHQsCiAgIE5VTEws Ci0gIE5VTEwsCi0gIE5VTEwsCi0gIE5VTEwsCi0gIE5VTEwsCisgIHdpbjMy X2luc2VydF9wb2ludCwKKyAgd2luMzJfcmVtb3ZlX3BvaW50LAorICB3aW4z Ml9zdG9wcGVkX2J5X3dhdGNocG9pbnQsCisgIHdpbjMyX3N0b3BwZWRfZGF0 YV9hZGRyZXNzLAogICBOVUxMLAogICBOVUxMLAogICBOVUxMLApJbmRleDog d2luMzItbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvd2luMzItbG93LmgsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IHdpbjMyLWxv dy5oCi0tLSB3aW4zMi1sb3cuaAkzIEphbiAyMDA5IDA1OjU3OjU3IC0wMDAw CTEuOQorKysgd2luMzItbG93LmgJMzAgSnVuIDIwMDkgMDk6MTU6NTggLTAw MDAKQEAgLTcwLDYgKzcwLDEyIEBAIHN0cnVjdCB3aW4zMl90YXJnZXRfb3Bz CiAKICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnJlYWtwb2ludDsKICAgaW50 IGJyZWFrcG9pbnRfbGVuOworCisgIC8qIEJyZWFrcG9pbnQvV2F0Y2hwb2lu dCByZWxhdGVkIGZ1bmN0aW9ucy4gIFNlZSB0YXJnZXQuaCBmb3IgY29tbWVu dHMuICAqLworICBpbnQgKCppbnNlcnRfcG9pbnQpIChjaGFyIHR5cGUsIENP UkVfQUREUiBhZGRyLCBpbnQgbGVuKTsKKyAgaW50ICgqcmVtb3ZlX3BvaW50 KSAoY2hhciB0eXBlLCBDT1JFX0FERFIgYWRkciwgaW50IGxlbik7CisgIGlu dCAoKnN0b3BwZWRfYnlfd2F0Y2hwb2ludCkgKHZvaWQpOworICBDT1JFX0FE RFIgKCpzdG9wcGVkX2RhdGFfYWRkcmVzcykgKHZvaWQpOwogfTsKIAogZXh0 ZXJuIHN0cnVjdCB3aW4zMl90YXJnZXRfb3BzIHRoZV9sb3dfdGFyZ2V0OwpJ bmRleDogdXRpbHMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci91dGlscy5jLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXUgLXAgLXIxLjE4IHV0aWxzLmMK LS0tIHV0aWxzLmMJMTkgSmFuIDIwMDkgMDA6MTY6NDYgLTAwMDAJMS4xOAor KysgdXRpbHMuYwkzMCBKdW4gMjAwOSAwOTo0OTozNCAtMDAwMApAQCAtMTcw LDMgKzE3MCw0NiBAQCB3YXJuaW5nIChjb25zdCBjaGFyICpzdHJpbmcsLi4u KQogICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwogICB2YV9lbmQgKGFyZ3Mp OwogfQorCisvKiBUZW1wb3Jhcnkgc3RvcmFnZSB1c2luZyBjaXJjdWxhciBi dWZmZXIuICAqLworI2RlZmluZSBOVU1DRUxMUyA0CisjZGVmaW5lIENFTExT SVpFIDUwCisKKy8qIFJldHVybiB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgY2ly Y3VsYXIgYnVmZmVyLiAgKi8KKworc3RhdGljIGNoYXIgKgorZ2V0X2NlbGwg KHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGJ1ZltOVU1DRUxMU11bQ0VMTFNJ WkVdOworICBzdGF0aWMgaW50IGNlbGwgPSAwOworICBpZiAoKytjZWxsID49 IE5VTUNFTExTKQorICAgIGNlbGwgPSAwOworICByZXR1cm4gYnVmW2NlbGxd OworfQorCisvKiBTdGRhcmcgd3JhcHBlciBhcm91bmQgdnNucHJpbnRmLgor ICAgU0laRSBpcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8g YnkgU1RSLiAgKi8KKworc3RhdGljIGludAoreHNucHJpbnRmIChjaGFyICpz dHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sK KyAgdmFfbGlzdCBhcmdzOworICBpbnQgcmV0OworCisgIHZhX3N0YXJ0IChh cmdzLCBmb3JtYXQpOworICByZXQgPSB2c25wcmludGYgKHN0ciwgc2l6ZSwg Zm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKworICByZXR1cm4g cmV0OworfQorCisvKiBDb252ZXJ0IGEgQ09SRV9BRERSIGludG8gYSBIRVgg c3RyaW5nLCBsaWtlICVseC4KKyAgIFRoZSByZXN1bHQgaXMgc3RvcmVkIGlu IGEgY2lyY3VsYXIgc3RhdGljIGJ1ZmZlciwgTlVNQ0VMTFMgZGVlcC4gICov CisKK2NoYXIgKgorcGFkZHJlc3MgKENPUkVfQUREUiBhZGRyKQoreworICBj aGFyICpzdHIgPSBnZXRfY2VsbCAoKTsKKyAgeHNucHJpbnRmIChzdHIsIENF TExTSVpFLCAiJWx4IiwgKGxvbmcpIGFkZHIpOworICByZXR1cm4gc3RyOwor fQo= --00163630f1df60f813046d8e52bd--