Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o92Gz-00029A-Ic for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Jul 2022 10:28:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o92Gx-00032h-O9 for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Jul 2022 10:28:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o92Gw-00032W-00 for pgsql-hackers@lists.postgresql.org; Wed, 06 Jul 2022 10:28:43 +0000 Received: from out5-smtp.messagingengine.com ([66.111.4.29]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o92Go-0000Bi-Cb for pgsql-hackers@postgresql.org; Wed, 06 Jul 2022 10:28:40 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 877DD5C011B; Wed, 6 Jul 2022 06:28:33 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Wed, 06 Jul 2022 06:28:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:sender:subject:subject:to:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1657103313; x=1657189713; bh=Nd0w2S1Xd1lxJ5OVeTQxuru+O6QR yxCfmtfgLoCp9ao=; b=cJYz+EFyLiJDTsgM8sG/EKP8Sl8T9IHtZYdwL2iFCdwf bItlcilnc1APd6kqG7NSlcIaNpQrsV7aEGbCH0vFoh4Qq6rziBaWxVRMJBdnUGoJ 821C3qgIMgc2rW/Q5BczRMrF6DkzNy6vChwWQ7UwVwKQHVTOV7kVXm9N+Z19aOiN p+792jdauB4czrekZqQtETkV2nfR6XTjw5DnkpA2UyCYkDsNLUh+l5NMSjB+Xi8d QQ8Tt3zWfiaD6dJD1cHb6XSxnBEIOGRV/ZM1iQ+D+kSbZVgWLkVWecGMRUEsvphb gqjUGiaxtrz3UMEgHphKPWQYdSXLFyU9NUZmm8H38g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrudeifedgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfuffvvehfhfgjsehmtd erredtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghr rdgvihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhmqeenucggtffrrg htthgvrhhnpeeludelgeejjeettdejfeehgfduudelteejveffieegudevfeeuffdujeet uefghfenucffohhmrghinhepshifihhttghhrdgtrghrvgenucevlhhushhtvghrufhiii gvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrrdgvihhsvghnthhrrghu thesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Feedback-ID: i131946ab:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 6 Jul 2022 06:28:32 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------WrN0OBJFOkvtxNY833KXwrFO" Message-ID: Date: Wed, 6 Jul 2022 12:28:31 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: automatically generating node support functions Content-Language: en-US To: Tom Lane Cc: David Rowley , pgsql-hackers References: <2f876203-7142-fa71-6d22-6ce00eb26869@enterprisedb.com> <50fedc80-4104-bdc8-d777-04f030fc550f@dunslane.net> <7848b872-7a10-67b2-b55f-7c9c475ae863@enterprisedb.com> <40a2e977-98ba-0c01-af6c-9dfb39e864ba@enterprisedb.com> <812ea8eb-6827-ba32-6ec0-6714f7ffa5dd@enterprisedb.com> <2905876.1644858587@sss.pgh.pa.us> <968928d9-a526-a1b5-dc36-0355632a843e@enterprisedb.com> <1294462.1656875649@sss.pgh.pa.us> <57df9f30-d2cf-9126-28d4-ae40a2e733a9@enterprisedb.com> <1593978.1656953960@sss.pgh.pa.us> From: Peter Eisentraut In-Reply-To: <1593978.1656953960@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------WrN0OBJFOkvtxNY833KXwrFO Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit The new patch addresses almost all of these issues. > Also, I share David's upthread allergy to the option names > "path_hackN" and to documenting those only inside the conversion > script. I have given these real names now and documented them with the other attributes. > BTW, I think this: "Unknown attributes are ignored" is a seriously > bad idea; it will allow typos to escape detection. fixed (I have also changed the inside of pg_node_attr to be comma-separated, rather than space-separated. This matches better how attribute-type things look in C.) > I think we ought to put it into the *nodes.h headers as much as > possible, perhaps like this: > > typedef struct A_Const pg_node_attr(custom_copy) > { ... done > So I propose that we handle these things via struct-level pg_node_attr > markers, rather than node-type lists embedded in the script: > > abstract_types > no_copy > no_read_write > no_read > custom_copy > custom_readwrite done (no_copy is actually no_copy_equal, hence renamed) > The hacks for scalar-copying EquivalenceClass*, EquivalenceMember*, > struct CustomPathMethods*, and CustomScan.methods should be replaced > with "pg_node_attr(copy_as_scalar)" labels on affected fields. Hmm, at least for Equivalence..., this is repeated a bunch of times for each field. I don't know if this is really a property of the type or something you can choose for each field? [not changed in v7 patch] > I wonder whether this: > > # We do not support copying Path trees, mainly > # because the circular linkages between RelOptInfo > # and Path nodes can't be handled easily in a > # simple depth-first traversal. > > couldn't be done better by inventing an inheritable no_copy attr > to attach to the Path supertype. Or maybe it'd be okay to just > automatically inherit the no_xxx properties from the supertype? This is an existing comment in copyfuncs.c. I haven't looked into it any further. > I don't terribly like the ad-hoc mechanism for not comparing > CoercionForm fields. OTOH, I am not sure whether replacing it > with per-field equal_ignore attrs would be better; there's at least > an argument that that invites bugs of omission. But implementing > this with an uncommented test deep inside a script that most hackers > should not need to read is not good. On the whole I'd lean towards > the equal_ignore route. The definition of CoercionForm in primnodes.h says that the comparison behavior is a property of the type, so it needs to be handled somewhere centrally, not on each field. [not changed in v7 patch] > I'm confused by the "various field types to ignore" at the end > of the outfuncs/readfuncs code. Do we really ignore those now? > How could that be safe? If it is safe, wouldn't it be better > to handle that with per-field pg_node_attrs? Silently doing > what might be the wrong thing doesn't seem good. I have replaced these with explicit ignore markings in pathnodes.h (PlannerGlobal, PlannerInfo, RelOptInfo). (This could then use a bit more rearranging some of the per-field comments.) > * copyfuncs.switch.c and equalfuncs.switch.c are missing trailing > newlines. fixed > * pgindent is not very happy with a lot of your comments in *nodes.h. fixed > * I think we should add explicit dependencies in backend/nodes/Makefile, > along the lines of > > copyfuncs.o: copyfuncs.c copyfuncs.funcs.c copyfuncs.switch.c > > Otherwise the whole thing is a big gotcha for anyone not using > --enable-depend. fixed -- I think, could use more testing --------------WrN0OBJFOkvtxNY833KXwrFO Content-Type: text/plain; charset=UTF-8; name="v7-0001-Automatically-generate-node-support-functions.patch" Content-Disposition: attachment; filename*0="v7-0001-Automatically-generate-node-support-functions.patch" Content-Transfer-Encoding: base64 RnJvbSBjODJlZTA4MWE3YThjZGM3N2I0NGYzMjVkMWRmNjk1YjU1YTYwYjA2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCA2IEp1bCAyMDIyIDEyOjEzOjMyICswMjAwClN1YmplY3Q6 IFtQQVRDSCB2N10gQXV0b21hdGljYWxseSBnZW5lcmF0ZSBub2RlIHN1cHBvcnQgZnVuY3Rp b25zCgpBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSB0aGUgbm9kZSBz dXBwb3J0IGZ1bmN0aW9ucwooY29weSwgZXF1YWwsIG91dCwgYW5kIHJlYWQsIGFzIHdlbGwg YXMgdGhlIG5vZGUgdGFncyBlbnVtKSBmcm9tIHRoZQpzdHJ1Y3QgZGVmaW5pdGlvbnMuCgpG b3IgZWFjaCBvZiB0aGUgZm91ciBub2RlIHN1cHBvcnQgZmlsZXMsIGl0IGNyZWF0ZXMgdHdv IGluY2x1ZGUgZmlsZXMsCmUuZy4sIGNvcHlmdW5jcy5mdW5jcy5jIGFuZCBjb3B5ZnVuY3Mu c3dpdGNoLmMsIHRvIGluY2x1ZGUgaW4gdGhlIG1haW4KZmlsZS4gIEFsbCB0aGUgc2NhZmZv bGRpbmcgb2YgdGhlIG1haW4gZmlsZSBzdGF5cyBpbiBwbGFjZS4KClRPRE86IEluIHRoaXMg cGF0Y2gsIEkgaGF2ZSBvbmx5IGlmZGVmJ2VkIG91dCB0aGUgY29kZSB0byBjb3VsZCBiZQpy ZW1vdmVkLCBtYWlubHkgc28gdGhhdCBpdCB3b24ndCBjb25zdGFudGx5IGhhdmUgbWVyZ2Ug Y29uZmxpY3RzLgpFdmVudHVhbGx5LCB0aGF0IHNob3VsZCBhbGwgYmUgY2hhbmdlZCB0byBk ZWxldGUgdGhlIGNvZGUuICBBbGwgdGhlCmNvZGUgY29tbWVudHMgdGhhdCBhcmUgd29ydGgg a2VlcGluZyBmcm9tIHRob3NlIHNlY3Rpb25zIGhhdmUgYWxyZWFkeQpiZWVuIG1vdmVkIHRv IHRoZSBoZWFkZXIgZmlsZXMgd2hlcmUgdGhlIHN0cnVjdHMgYXJlIGRlZmluZWQuCgpJIGhh dmUgdHJpZWQgdG8gbW9zdGx5IG1ha2UgdGhlIGNvdmVyYWdlIG9mIHRoZSBvdXRwdXQgbWF0 Y2ggd2hhdCBpcwpjdXJyZW50bHkgdGhlcmUuICBGb3IgZXhhbXBsZSwgb25lIGNvdWxkIG5v dyBkbyBvdXQvcmVhZCBjb3ZlcmFnZSBvZgp1dGlsaXR5IHN0YXRlbWVudCBub2RlcywgYnV0 IEkgaGF2ZSBtYW51YWxseSBleGNsdWRlZCB0aG9zZSBmb3Igbm93LgpUaGUgcmVhc29uIGlz IG1haW5seSB0aGF0IGl0J3MgZWFzaWVyIHRvIGRpZmYgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIs CmFuZCBhZGRpbmcgYSBidW5jaCBvZiBzdHVmZiBsaWtlIHRoaXMgbWlnaHQgcmVxdWlyZSBh IHNlcGFyYXRlCmFuYWx5c2lzIGFuZCByZXZpZXcuCgpTdWJ0eXBpbmcgKFRpZFNjYW4gLT4g U2NhbikgaXMgc3VwcG9ydGVkLgoKRm9yIHRoZSBoYXJkIGNhc2VzLCB5b3UgY2FuIGp1c3Qg d3JpdGUgYSBtYW51YWwgZnVuY3Rpb24gYW5kIGV4Y2x1ZGUKZ2VuZXJhdGluZyBvbmUuICBG b3IgdGhlIG5vdCBzbyBoYXJkIGNhc2VzLCB0aGVyZSBpcyBhIHdheSBvZgphbm5vdGF0aW5n IHN0cnVjdCBmaWVsZHMgdG8gZ2V0IHNwZWNpYWwgYmVoYXZpb3JzLiAgRm9yIGV4YW1wbGUs CnBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpIGhhcyB0aGUgZmllbGQgaWdub3JlZCBpbiBl cXVhbCBmdW5jdGlvbnMuCgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkL2ZsYXQvYzEwOTc1OTAtYTZhNC00ODZhLTY0YjEtZTFmOWNjMDUzM2Nl JTQwZW50ZXJwcmlzZWRiLmNvbQotLS0KIHNyYy9iYWNrZW5kL01ha2VmaWxlICAgICAgICAg ICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUgICAgICAg ICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUgICAgICAgICAgICB8ICA1 OSArKwogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgICAgICAgICB8ICAxOSArLQog c3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jICAgICAgICB8ICAyMiArLQogc3JjL2Jh Y2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbCB8IDc3MCArKysrKysrKysrKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAgICAgICB8ICAz NCArLQogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICB8ICAyMyArLQog c3JjL2luY2x1ZGUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS9leGVjdXRvci90dXB0YWJsZS5oICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9u b2Rlcy8uZ2l0aWdub3JlICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4 dGVuc2libGUuaCAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgg ICAgICAgICAgICAgfCAgNTIgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAg ICAgICAgfCAgMTkgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAg fCAzMTUgKysrKysrKy0tLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAg ICAgfCAgOTIgKy0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgIHwg IDQ1ICstCiBzcmMvaW5jbHVkZS9ub2Rlcy92YWx1ZS5oICAgICAgICAgICAgIHwgIDEwICst CiBzcmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAgICAgICAgIHwgIDExICstCiBzcmMv dG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbSAgICAgICAgICAgIHwgIDQ2ICsrCiAyMCBmaWxlcyBj aGFuZ2VkLCAxMzIwIGluc2VydGlvbnMoKyksIDIyNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmFja2VuZC9ub2Rlcy8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2JhY2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL25vZGVzLy5naXRpZ25vcmUKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL01ha2VmaWxlCmluZGV4IDRhMDIw MDY3ODguLjk1M2M4MGRiNWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL01ha2VmaWxlCisr KyBiL3NyYy9iYWNrZW5kL01ha2VmaWxlCkBAIC0xNDMsMTEgKzE0MywxNSBAQCBzdG9yYWdl L2xtZ3IvbHdsb2NrbmFtZXMuaDogc3RvcmFnZS9sbWdyL2dlbmVyYXRlLWx3bG9ja25hbWVz LnBsIHN0b3JhZ2UvbG1nci9sdwogc3VibWFrZS1jYXRhbG9nLWhlYWRlcnM6CiAJJChNQUtF KSAtQyBjYXRhbG9nIGRpc3RwcmVwIGdlbmVyYXRlZC1oZWFkZXItc3ltbGlua3MKIAorIyBy dW4gdGhpcyB1bmNvbmRpdGlvbmFsbHkgdG8gYXZvaWQgbmVlZGluZyB0byBrbm93IGl0cyBk ZXBlbmRlbmNpZXMgaGVyZToKK3N1Ym1ha2Utbm9kZXMtaGVhZGVyczoKKwkkKE1BS0UpIC1D IG5vZGVzIGRpc3RwcmVwIGdlbmVyYXRlZC1oZWFkZXItc3ltbGlua3MKKwogIyBydW4gdGhp cyB1bmNvbmRpdGlvbmFsbHkgdG8gYXZvaWQgbmVlZGluZyB0byBrbm93IGl0cyBkZXBlbmRl bmNpZXMgaGVyZToKIHN1Ym1ha2UtdXRpbHMtaGVhZGVyczoKIAkkKE1BS0UpIC1DIHV0aWxz IGRpc3RwcmVwIGdlbmVyYXRlZC1oZWFkZXItc3ltbGlua3MKIAotLlBIT05ZOiBzdWJtYWtl LWNhdGFsb2ctaGVhZGVycyBzdWJtYWtlLXV0aWxzLWhlYWRlcnMKKy5QSE9OWTogc3VibWFr ZS1jYXRhbG9nLWhlYWRlcnMgc3VibWFrZS1ub2Rlcy1oZWFkZXJzIHN1Ym1ha2UtdXRpbHMt aGVhZGVycwogCiAjIE1ha2Ugc3ltbGlua3MgZm9yIHRoZXNlIGhlYWRlcnMgaW4gdGhlIGlu Y2x1ZGUgZGlyZWN0b3J5LiBUaGF0IHdheQogIyB3ZSBjYW4gY3V0IGRvd24gb24gdGhlIC1J IG9wdGlvbnMuIEFsc28sIGEgc3ltbGluayBpcyBhdXRvbWF0aWNhbGx5CkBAIC0xNjIsNyAr MTY2LDcgQEAgc3VibWFrZS11dGlscy1oZWFkZXJzOgogCiAuUEhPTlk6IGdlbmVyYXRlZC1o ZWFkZXJzCiAKLWdlbmVyYXRlZC1oZWFkZXJzOiAkKHRvcF9idWlsZGRpcikvc3JjL2luY2x1 ZGUvcGFyc2VyL2dyYW0uaCAkKHRvcF9idWlsZGRpcikvc3JjL2luY2x1ZGUvc3RvcmFnZS9s d2xvY2tuYW1lcy5oIHN1Ym1ha2UtY2F0YWxvZy1oZWFkZXJzIHN1Ym1ha2UtdXRpbHMtaGVh ZGVycworZ2VuZXJhdGVkLWhlYWRlcnM6ICQodG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9w YXJzZXIvZ3JhbS5oICQodG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9j a25hbWVzLmggc3VibWFrZS1jYXRhbG9nLWhlYWRlcnMgc3VibWFrZS1ub2Rlcy1oZWFkZXJz IHN1Ym1ha2UtdXRpbHMtaGVhZGVycwogCiAkKHRvcF9idWlsZGRpcikvc3JjL2luY2x1ZGUv cGFyc2VyL2dyYW0uaDogcGFyc2VyL2dyYW0uaAogCXByZXJlcWRpcj1gY2QgJyQoZGlyICQ8 KScgPi9kZXYvbnVsbCAmJiBwd2RgICYmIFwKQEAgLTE4NSw2ICsxODksNyBAQCBkaXN0cHJl cDoKIAkkKE1BS0UpIC1DIHBhcnNlcglncmFtLmMgZ3JhbS5oIHNjYW4uYwogCSQoTUFLRSkg LUMgYm9vdHN0cmFwCWJvb3RwYXJzZS5jIGJvb3RzY2FubmVyLmMKIAkkKE1BS0UpIC1DIGNh dGFsb2cJZGlzdHByZXAKKwkkKE1BS0UpIC1DIG5vZGVzCWRpc3RwcmVwCiAJJChNQUtFKSAt QyByZXBsaWNhdGlvbglyZXBsX2dyYW0uYyByZXBsX3NjYW5uZXIuYyBzeW5jcmVwX2dyYW0u YyBzeW5jcmVwX3NjYW5uZXIuYwogCSQoTUFLRSkgLUMgc3RvcmFnZS9sbWdyCWx3bG9ja25h bWVzLmggbHdsb2NrbmFtZXMuYwogCSQoTUFLRSkgLUMgdXRpbHMJZGlzdHByZXAKQEAgLTI5 Nyw2ICszMDIsNyBAQCBkaXN0Y2xlYW46IGNsZWFuCiAKIG1haW50YWluZXItY2xlYW46IGRp c3RjbGVhbgogCSQoTUFLRSkgLUMgY2F0YWxvZyAkQAorCSQoTUFLRSkgLUMgbm9kZXMgJEAK IAkkKE1BS0UpIC1DIHV0aWxzICRACiAJcm0gLWYgYm9vdHN0cmFwL2Jvb3RwYXJzZS5jIFwK IAkgICAgICBib290c3RyYXAvYm9vdHNjYW5uZXIuYyBcCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9ub2Rlcy8uZ2l0aWdub3JlIGIvc3JjL2JhY2tlbmQvbm9kZXMvLmdpdGlnbm9yZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wYzE0YjU2OTdiCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvLmdpdGlnbm9yZQpAQCAtMCwwICsx LDQgQEAKKy9ub2RlLXN1cHBvcnQtc3RhbXAKKy9ub2RldGFncy5oCisvKmZ1bmNzLmZ1bmNz LmMKKy8qZnVuY3Muc3dpdGNoLmMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL01h a2VmaWxlIGIvc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUKaW5kZXggNWQyYjEyYTk5My4u MWEwZDViOTMxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUKKysr IGIvc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUKQEAgLTMwLDMgKzMwLDYyIEBAIE9CSlMg PSBcCiAJdmFsdWUubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29t bW9uLm1rCisKK25vZGVfaGVhZGVycyA9IFwKKwlub2Rlcy9ub2Rlcy5oIFwKKwlub2Rlcy9l eGVjbm9kZXMuaCBcCisJbm9kZXMvcGxhbm5vZGVzLmggXAorCW5vZGVzL3ByaW1ub2Rlcy5o IFwKKwlub2Rlcy9wYXRobm9kZXMuaCBcCisJbm9kZXMvZXh0ZW5zaWJsZS5oIFwKKwlub2Rl cy9wYXJzZW5vZGVzLmggXAorCW5vZGVzL3JlcGxub2Rlcy5oIFwKKwlub2Rlcy92YWx1ZS5o IFwKKwljb21tYW5kcy90cmlnZ2VyLmggXAorCWNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBc CisJZm9yZWlnbi9mZHdhcGkuaCBcCisJYWNjZXNzL2FtYXBpLmggXAorCWFjY2Vzcy90YWJs ZWFtLmggXAorCWFjY2Vzcy90c21hcGkuaCBcCisJdXRpbHMvcmVsLmggXAorCW5vZGVzL3N1 cHBvcnRub2Rlcy5oIFwKKwlleGVjdXRvci90dXB0YWJsZS5oIFwKKwlub2Rlcy9sb2Nrb3B0 aW9ucy5oIFwKKwlhY2Nlc3Mvc2Rpci5oCisKKyMgc2VlIGFsc28gY2F0YWxvZy9NYWtlZmls ZSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlc2UgbWFrZSBydWxlcworCithbGw6IGRpc3Rw cmVwIGdlbmVyYXRlZC1oZWFkZXItc3ltbGlua3MKKworZGlzdHByZXA6IG5vZGUtc3VwcG9y dC1zdGFtcAorCisuUEhPTlk6IGdlbmVyYXRlZC1oZWFkZXItc3ltbGlua3MKKworZ2VuZXJh dGVkLWhlYWRlci1zeW1saW5rczogJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL25vZGVz L2hlYWRlci1zdGFtcAorCisjIG5vZGUtc3VwcG9ydC1zdGFtcCByZWNvcmRzIHRoZSBsYXN0 IHRpbWUgd2UgcmFuIGdlbl9ub2RlX3N1cHBvcnQucGwuCisjIFdlIGRvbid0IHJlbHkgb24g dGhlIHRpbWVzdGFtcHMgb2YgdGhlIGluZGl2aWR1YWwgb3V0cHV0IGZpbGVzLAorIyBiZWNh dXNlIHRoZSBQZXJsIHNjcmlwdCB3b24ndCB1cGRhdGUgdGhlbSBpZiB0aGV5IGRpZG4ndCBj aGFuZ2UgKHRvCisjIGF2b2lkIHVubmVjZXNzYXJ5IHJlY29tcGlsZXMpLgorbm9kZS1zdXBw b3J0LXN0YW1wOiBnZW5fbm9kZV9zdXBwb3J0LnBsICQoYWRkcHJlZml4ICQodG9wX3NyY2Rp cikvc3JjL2luY2x1ZGUvLCQobm9kZV9oZWFkZXJzKSkKKwkkKFBFUkwpICReCisJdG91Y2gg JEAKKworIyBUaGVzZSBnZW5lcmF0ZWQgaGVhZGVycyBtdXN0IGJlIHN5bWxpbmtlZCBpbnRv IGJ1aWxkZGlyL3NyYy9pbmNsdWRlLywKKyMgdXNpbmcgYWJzb2x1dGUgbGlua3MgZm9yIHRo ZSByZWFzb25zIGV4cGxhaW5lZCBpbiBzcmMvYmFja2VuZC9NYWtlZmlsZS4KKyMgV2UgdXNl IGhlYWRlci1zdGFtcCB0byByZWNvcmQgdGhhdCB3ZSd2ZSBkb25lIHRoaXMgYmVjYXVzZSB0 aGUgc3ltbGlua3MKKyMgdGhlbXNlbHZlcyBtYXkgYXBwZWFyIG9sZGVyIHRoYW4gbm9kZS1z dXBwb3J0LXN0YW1wLgorJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL25vZGVzL2hlYWRl ci1zdGFtcDogbm9kZS1zdXBwb3J0LXN0YW1wCisJcHJlcmVxZGlyPWBjZCAnJChkaXIgJDwp JyA+L2Rldi9udWxsICYmIHB3ZGAgJiYgXAorCWNkICckKGRpciAkQCknICYmIGZvciBmaWxl IGluIG5vZGV0YWdzLmg7IGRvIFwKKwkgIHJtIC1mICQkZmlsZSAmJiAkKExOX1MpICIkJHBy ZXJlcWRpci8kJGZpbGUiIC4gOyBcCisJZG9uZQorCXRvdWNoICRACisKK2NvcHlmdW5jcy5v OiBjb3B5ZnVuY3MuYyBjb3B5ZnVuY3MuZnVuY3MuYyBjb3B5ZnVuY3Muc3dpdGNoLmMgfCBu b2RlLXN1cHBvcnQtc3RhbXAKK2VxdWFsZnVuY3MubzogZXF1YWxmdW5jcy5jIGVxdWFsZnVu Y3MuZnVuY3MuYyBlcXVhbGZ1bmNzLnN3aXRjaC5jIHwgbm9kZS1zdXBwb3J0LXN0YW1wCitv dXRmdW5jcy5vOiBvdXRmdW5jcy5jIG91dGZ1bmNzLmZ1bmNzLmMgb3V0ZnVuY3Muc3dpdGNo LmMgfCBub2RlLXN1cHBvcnQtc3RhbXAKK3JlYWRmdW5jcy5vOiAgcmVhZGZ1bmNzLmMgcmVh ZGZ1bmNzLmZ1bmNzLmMgcmVhZGZ1bmNzLnN3aXRjaC5jIHwgbm9kZS1zdXBwb3J0LXN0YW1w CisKK21haW50YWluZXItY2xlYW46IGNsZWFuCisJcm0gLWYgbm9kZS1zdXBwb3J0LXN0YW1w ICQoYWRkc3VmZml4IGZ1bmNzLmZ1bmNzLmMsY29weSBlcXVhbCBvdXQgcmVhZCkgJChhZGRz dWZmaXggZnVuY3Muc3dpdGNoLmMsY29weSBlcXVhbCBvdXQgcmVhZCkgbm9kZXRhZ3MuaApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCA3MDZkMjgzYTkyLi40ODc3OGFhNGVmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtMjMsMTEgKzIzLDcgQEAKICNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgogCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCi0jaW5jbHVkZSAibm9kZXMvZXh0 ZW5zaWJsZS5oIgotI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgotI2luY2x1ZGUgIm5v ZGVzL3BsYW5ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCi0jaW5jbHVkZSAi dXRpbHMvcmVsLmgiCiAKIAogLyoKQEAgLTczLDYgKzY5LDkgQEAKIAkobmV3bm9kZS0+Zmxk bmFtZSA9IGZyb20tPmZsZG5hbWUpCiAKIAorI2luY2x1ZGUgImNvcHlmdW5jcy5mdW5jcy5j IgorCisjaWZkZWYgT0JTT0xFVEUKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkgcGxhbm5vZGVz LmggY29weSBmdW5jdGlvbnMKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0NjUsNiArMTQ2NCw3IEBA IF9jb3B5VmFyKGNvbnN0IFZhciAqZnJvbSkKIAogCXJldHVybiBuZXdub2RlOwogfQorI2Vu ZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogX2NvcHlDb25zdApAQCAtMTUwNCw2ICsxNTA0 LDcgQEAgX2NvcHlDb25zdChjb25zdCBDb25zdCAqZnJvbSkKIAlyZXR1cm4gbmV3bm9kZTsK IH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogX2NvcHlQYXJhbQogICovCkBAIC0zMjQ4 LDYgKzMyNDksNyBAQCBfY29weVBhcmFtUmVmKGNvbnN0IFBhcmFtUmVmICpmcm9tKQogCiAJ cmV0dXJuIG5ld25vZGU7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyBBX0Nv bnN0ICoKIF9jb3B5QV9Db25zdChjb25zdCBBX0NvbnN0ICpmcm9tKQpAQCAtMzI4OCw2ICsz MjkwLDcgQEAgX2NvcHlBX0NvbnN0KGNvbnN0IEFfQ29uc3QgKmZyb20pCiAJcmV0dXJuIG5l d25vZGU7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIEZ1bmNDYWxsICoKIF9jb3B5 RnVuY0NhbGwoY29uc3QgRnVuY0NhbGwgKmZyb20pCiB7CkBAIC01NDUzLDYgKzU0NTYsNyBA QCBfY29weURyb3BTdWJzY3JpcHRpb25TdG10KGNvbnN0IERyb3BTdWJzY3JpcHRpb25TdG10 ICpmcm9tKQogCiAJcmV0dXJuIG5ld25vZGU7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAK IC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKICAqCQkJCQlleHRlbnNpYmxlLmggY29weSBmdW5jdGlvbnMKQEAg LTU0NzUsNiArNTQ3OSw3IEBAIF9jb3B5RXh0ZW5zaWJsZU5vZGUoY29uc3QgRXh0ZW5zaWJs ZU5vZGUgKmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQog LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogICoJCQkJCXZhbHVlLmggY29weSBmdW5jdGlvbnMKICAqICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKQEAgLTU1NDUsNiArNTU1MCw3IEBAIF9jb3B5Rm9yZWlnbktleUNhY2hlSW5mbyhj b25zdCBGb3JlaWduS2V5Q2FjaGVJbmZvICpmcm9tKQogCiAJcmV0dXJuIG5ld25vZGU7CiB9 CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBjb3B5T2JqZWN0SW1wbCAtLSBpbXBs ZW1lbnRhdGlvbiBvZiBjb3B5T2JqZWN0KCk7IHNlZSBub2Rlcy9ub2Rlcy5oCkBAIC01NTY1 LDYgKzU1NzEsOCBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQogCiAJc3dp dGNoIChub2RlVGFnKGZyb20pKQogCXsKKyNpbmNsdWRlICJjb3B5ZnVuY3Muc3dpdGNoLmMi CisjaWZkZWYgT0JTT0xFVEUKIAkJCS8qCiAJCQkgKiBQTEFOIE5PREVTCiAJCQkgKi8KQEAg LTYwMDksNiArNjAxNyw3IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZvaWQgKmZyb20pCiAJ CWNhc2UgVF9CaXRTdHJpbmc6CiAJCQlyZXR2YWwgPSBfY29weUJpdFN0cmluZyhmcm9tKTsK IAkJCWJyZWFrOworI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAJCQkvKgogCQkJICogTElTVCBO T0RFUwpAQCAtNjAyNiw2ICs2MDM1LDcgQEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAq ZnJvbSkKIAkJCXJldHZhbCA9IGxpc3RfY29weShmcm9tKTsKIAkJCWJyZWFrOwogCisjaWZk ZWYgT0JTT0xFVEUKIAkJCS8qCiAJCQkgKiBFWFRFTlNJQkxFIE5PREVTCiAJCQkgKi8KQEAg LTY1NzcsNiArNjU4Nyw3IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZvaWQgKmZyb20pCiAJ CWNhc2UgVF9Gb3JlaWduS2V5Q2FjaGVJbmZvOgogCQkJcmV0dmFsID0gX2NvcHlGb3JlaWdu S2V5Q2FjaGVJbmZvKGZyb20pOwogCQkJYnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAK IAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAl ZCIsIChpbnQpIG5vZGVUYWcoZnJvbSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9k ZXMvZXF1YWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCmluZGV4 IGZjY2MwYjRhMTguLjdmMDljY2Q5NzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVz L2VxdWFsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKQEAg LTEwLDkgKzEwLDYgQEAKICAqIGJlY2F1c2UgdGhlIGNpcmN1bGFyIGxpbmthZ2VzIGJldHdl ZW4gUmVsT3B0SW5mbyBhbmQgUGF0aCBub2RlcyBjYW4ndAogICogYmUgaGFuZGxlZCBlYXNp bHkgaW4gYSBzaW1wbGUgZGVwdGgtZmlyc3QgdHJhdmVyc2FsLgogICoKLSAqIEN1cnJlbnRs eSwgaW4gZmFjdCwgZXF1YWwoKSBkb2Vzbid0IGtub3cgaG93IHRvIGNvbXBhcmUgUGxhbiB0 cmVlcwotICogZWl0aGVyLiAgVGhpcyBtaWdodCBuZWVkIHRvIGJlIGZpeGVkIHNvbWVkYXku Ci0gKgogICogTk9URTogaXQgaXMgaW50ZW50aW9uYWwgdGhhdCBwYXJzZSBsb2NhdGlvbiBm aWVsZHMgKGluIG5vZGVzIHRoYXQgaGF2ZQogICogb25lKSBhcmUgbm90IGNvbXBhcmVkLiAg VGhpcyBpcyBiZWNhdXNlIHdlIHdhbnQsIGZvciBleGFtcGxlLCBhIHZhcmlhYmxlCiAgKiAi eCIgdG8gYmUgY29uc2lkZXJlZCBlcXVhbCgpIHRvIGFub3RoZXIgcmVmZXJlbmNlIHRvICJ4 IiBpbiB0aGUgcXVlcnkuCkBAIC0zMCw4ICsyNyw2IEBACiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2li bGUuaCIKLSNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9k YXR1bS5oIgogCiAKQEAgLTk3LDYgKzkyLDkgQEAKIAkoKHZvaWQpIDApCiAKIAorI2luY2x1 ZGUgImVxdWFsZnVuY3MuZnVuY3MuYyIKKworI2lmZGVmIE9CU09MRVRFCiAvKgogICoJU3R1 ZmYgZnJvbSBwcmltbm9kZXMuaAogICovCkBAIC0yNTgsNiArMjU2LDcgQEAgX2VxdWFsVmFy KGNvbnN0IFZhciAqYSwgY29uc3QgVmFyICpiKQogCiAJcmV0dXJuIHRydWU7CiB9CisjZW5k aWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyBib29sCiBfZXF1YWxDb25zdChjb25zdCBDb25z dCAqYSwgY29uc3QgQ29uc3QgKmIpCkBAIC0yODAsNiArMjc5LDcgQEAgX2VxdWFsQ29uc3Qo Y29uc3QgQ29uc3QgKmEsIGNvbnN0IENvbnN0ICpiKQogCQkJCQkJYS0+Y29uc3RieXZhbCwg YS0+Y29uc3RsZW4pOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyBib29sCiBfZXF1 YWxQYXJhbShjb25zdCBQYXJhbSAqYSwgY29uc3QgUGFyYW0gKmIpCiB7CkBAIC0xMzA0LDYg KzEzMDQsNyBAQCBfZXF1YWxQbGFjZUhvbGRlckluZm8oY29uc3QgUGxhY2VIb2xkZXJJbmZv ICphLCBjb25zdCBQbGFjZUhvbGRlckluZm8gKmIpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKyNl bmRpZiAvKk9CU09MRVRFKi8KIAogLyoKICAqIFN0dWZmIGZyb20gZXh0ZW5zaWJsZS5oCkBA IC0xMzI1LDYgKzEzMjYsNyBAQCBfZXF1YWxFeHRlbnNpYmxlTm9kZShjb25zdCBFeHRlbnNp YmxlTm9kZSAqYSwgY29uc3QgRXh0ZW5zaWJsZU5vZGUgKmIpCiAJcmV0dXJuIHRydWU7CiB9 CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIFN0dWZmIGZyb20gcGFyc2Vub2Rlcy5oCiAg Ki8KQEAgLTI4MTUsNiArMjgxNyw3IEBAIF9lcXVhbFBhcmFtUmVmKGNvbnN0IFBhcmFtUmVm ICphLCBjb25zdCBQYXJhbVJlZiAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8q T0JTT0xFVEUqLwogCiBzdGF0aWMgYm9vbAogX2VxdWFsQV9Db25zdChjb25zdCBBX0NvbnN0 ICphLCBjb25zdCBBX0NvbnN0ICpiKQpAQCAtMjgzMSw2ICsyODM0LDcgQEAgX2VxdWFsQV9D b25zdChjb25zdCBBX0NvbnN0ICphLCBjb25zdCBBX0NvbnN0ICpiKQogCXJldHVybiB0cnVl OwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyBib29sCiBfZXF1YWxGdW5jQ2FsbChj b25zdCBGdW5jQ2FsbCAqYSwgY29uc3QgRnVuY0NhbGwgKmIpCiB7CkBAIC0zNDY4LDYgKzM0 NzIsNyBAQCBfZXF1YWxQYXJ0aXRpb25DbWQoY29uc3QgUGFydGl0aW9uQ21kICphLCBjb25z dCBQYXJ0aXRpb25DbWQgKmIpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZiAvKk9CU09M RVRFKi8KIAogLyoKICAqIFN0dWZmIGZyb20gcGdfbGlzdC5oCkBAIC0zNTI4LDYgKzM1MzMs NyBAQCBfZXF1YWxMaXN0KGNvbnN0IExpc3QgKmEsIGNvbnN0IExpc3QgKmIpCiAJcmV0dXJu IHRydWU7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIFN0dWZmIGZyb20gdmFsdWUu aAogICovCkBAIC0zNTcxLDYgKzM1NzcsNyBAQCBfZXF1YWxCaXRTdHJpbmcoY29uc3QgQml0 U3RyaW5nICphLCBjb25zdCBCaXRTdHJpbmcgKmIpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKyNl bmRpZiAvKk9CU09MRVRFKi8KIAogLyoKICAqIGVxdWFsCkBAIC0zNjAxLDYgKzM2MDgsOCBA QCBlcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCiAJc3dpdGNoIChub2Rl VGFnKGEpKQogCXsKKyNpbmNsdWRlICJlcXVhbGZ1bmNzLnN3aXRjaC5jIgorI2lmZGVmIE9C U09MRVRFCiAJCQkvKgogCQkJICogUFJJTUlUSVZFIE5PREVTCiAJCQkgKi8KQEAgLTM4MjEs NiArMzgzMCw3IEBAIGVxdWFsKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJCWNh c2UgVF9QbGFjZUhvbGRlckluZm86CiAJCQlyZXR2YWwgPSBfZXF1YWxQbGFjZUhvbGRlcklu Zm8oYSwgYik7CiAJCQlicmVhazsKKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogCQljYXNlIFRf TGlzdDoKIAkJY2FzZSBUX0ludExpc3Q6CkBAIC0zODI4LDYgKzM4MzgsNyBAQCBlcXVhbChj b25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCQkJcmV0dmFsID0gX2VxdWFsTGlzdChh LCBiKTsKIAkJCWJyZWFrOwogCisjaWZkZWYgT0JTT0xFVEUKIAkJY2FzZSBUX0ludGVnZXI6 CiAJCQlyZXR2YWwgPSBfZXF1YWxJbnRlZ2VyKGEsIGIpOwogCQkJYnJlYWs7CkBAIC00NDMw LDYgKzQ0NDEsNyBAQCBlcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCQlj YXNlIFRfSnNvblRhYmxlQ29sdW1uOgogCQkJcmV0dmFsID0gX2VxdWFsSnNvblRhYmxlQ29s dW1uKGEsIGIpOwogCQkJYnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAKIAkJZGVmYXVs dDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi42YWFmNDAxYTcyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbApAQCAtMCwwICsxLDc3MCBAQAorIyEv dXNyL2Jpbi9wZXJsCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBHZW5lcmF0ZSBub2RlIHN1 cHBvcnQgZmlsZXM6CisjIC0gbm9kZXRhZ3MuaAorIyAtIGNvcHlmdW5jcworIyAtIGVxdWFs ZnVuY3MKKyMgLSByZWFkZnVuY3MKKyMgLSBvdXRmdW5jcworIworIyBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyMgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyMKKyMgc3JjL2JhY2tlbmQvbm9kZXMvZ2VuX25vZGVf c3VwcG9ydC5wbAorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordXNlIHN0cmljdDsKK3VzZSB3 YXJuaW5nczsKKwordXNlIEZpbGU6OkJhc2VuYW1lOworCit1c2UgRmluZEJpbjsKK3VzZSBs aWIgIiRGaW5kQmluOjpSZWFsQmluLy4uL2NhdGFsb2ciOworCit1c2UgQ2F0YWxvZzsgICMg Zm9yIFJlbmFtZVRlbXBGaWxlCisKKworIyBUZXN0IHdoZXRoZXIgZmlyc3QgYXJndW1lbnQg aXMgZWxlbWVudCBvZiB0aGUgbGlzdCBpbiB0aGUgc2Vjb25kCisjIGFyZ3VtZW50CitzdWIg ZWxlbQoreworCW15ICR4ID0gc2hpZnQ7CisJcmV0dXJuIGdyZXAgeyAkXyBlcSAkeCB9IEBf OworfQorCisKKyMgY29sbGVjdCBub2RlIG5hbWVzCitteSBAbm9kZV90eXBlcyA9IHF3KE5v ZGUpOworIyBjb2xsZWN0IGluZm8gZm9yIGVhY2ggbm9kZSB0eXBlCitteSAlbm9kZV90eXBl X2luZm87CisKKyMgbm9kZSB0eXBlcyB3ZSBkb24ndCB3YW50IGNvcHkvZXF1YWwgc3VwcG9y dCBmb3IKK215IEBub19jb3B5X2VxdWFsOworIyBub2RlIHR5cGVzIHdlIGRvbid0IHdhbnQg cmVhZCBzdXBwb3J0IGZvcgorbXkgQG5vX3JlYWQ7CisjIG5vZGUgdHlwZXMgd2UgZG9uJ3Qg d2FudCByZWFkL3dyaXRlIHN1cHBvcnQgZm9yCitteSBAbm9fcmVhZF93cml0ZTsKKworIyB0 eXBlcyB0aGF0IGFyZSBjb3BpZWQgYnkgc3RyYWlnaHQgYXNzaWdubWVudAorbXkgQHNjYWxh cl90eXBlcyA9IHF3KAorCWJpdHMzMiBib29sIGNoYXIgZG91YmxlIGludCBpbnQ4IGludDE2 IGludDMyIGludDY0IGxvbmcgdWludDggdWludDE2IHVpbnQzMiB1aW50NjQKKwlBY2xNb2Rl IEF0dHJOdW1iZXIgQ2FyZGluYWxpdHkgQ29zdCBJbmRleCBPaWQgU2VsZWN0aXZpdHkgU2l6 ZSBTdHJhdGVneU51bWJlciBTdWJUcmFuc2FjdGlvbklkIFRpbWVMaW5lSUQgWExvZ1JlY1B0 cgorKTsKKworIyBjb2xsZWN0IGVudW0gdHlwZXMKK215IEBlbnVtX3R5cGVzOworCitteSBA YWJzdHJhY3RfdHlwZXMgPSBxdyhOb2RlKTsKKworIyBTcGVjaWFsIGNhc2VzIHRoYXQgZWl0 aGVyIGRvbid0IGhhdmUgdGhlaXIgb3duIHN0cnVjdCBvciB0aGUgc3RydWN0CisjIGlzIG5v dCBpbiBhIGhlYWRlciBmaWxlLiAgV2UganVzdCBnZW5lcmF0ZSBub2RlIHRhZ3MgZm9yIHRo ZW0sIGJ1dAorIyB0aGV5IG90aGVyd2lzZSBkb24ndCBwYXJ0aWNpcGF0ZSBpbiBub2RlIHN1 cHBvcnQuCitteSBAZXh0cmFfdGFncyA9IHF3KAorCUludExpc3QgT2lkTGlzdCBYaWRMaXN0 CisJQWxsb2NTZXRDb250ZXh0IEdlbmVyYXRpb25Db250ZXh0IFNsYWJDb250ZXh0CisJVElE Qml0bWFwCisJV2luZG93T2JqZWN0RGF0YQorKTsKKworIyBUaGlzIGlzIGEgcmVndWxhciBu b2RlLCBidXQgd2Ugc2tpcCBwYXJzaW5nIGl0IGZyb20gaXRzIGhlYWRlciBmaWxlCisjIHNp bmNlIHdlIHdvbid0IHVzZSBpdHMgaW50ZXJuYWwgc3RydWN0dXJlIGhlcmUgYW55d2F5Lgor cHVzaCBAbm9kZV90eXBlcywgcXcoTGlzdCk7CisjIFNlZSBzcGVjaWFsIHRyZWF0bWVudCBp biBvdXROb2RlKCkgYW5kIG5vZGVSZWFkKCkuCitwdXNoIEBub19yZWFkX3dyaXRlLCBxdyhM aXN0KTsKKworIyBOb2RlcyB3aXRoIGN1c3RvbSBjb3B5L2VxdWFsIGltcGxlbWVudGF0aW9u cyBhcmUgc2tpcHBlZCBmcm9tCisjIC5mdW5jcy5jIGJ1dCBuZWVkIGNhc2Ugc3RhdGVtZW50 cyBpbiAuc3dpdGNoLmMuCitteSBAY3VzdG9tX2NvcHlfZXF1YWw7CisKKyMgU2ltaWxhcmx5 IGZvciBjdXN0b20gcmVhZC93cml0ZSBpbXBsZW1lbnRhdGlvbnMuCitteSBAY3VzdG9tX3Jl YWRfd3JpdGU7CisKKyMgRXF1aXZhbGVuY2VDbGFzc2VzIGFyZSBuZXZlciBtb3ZlZCwgc28g anVzdCBzaGFsbG93LWNvcHkgdGhlIHBvaW50ZXIKK3B1c2ggQHNjYWxhcl90eXBlcywgcXco RXF1aXZhbGVuY2VDbGFzcyogRXF1aXZhbGVuY2VNZW1iZXIqKTsKKworIyBUaGlzIGlzIGEg c3RydWN0LCBzbyB3ZSBjYW4gY29weSBpdCBieSBhc3NpZ25tZW50LiAgRXF1YWwgc3VwcG9y dCBpcworIyBjdXJyZW50bHkgbm90IHJlcXVpcmVkLgorcHVzaCBAc2NhbGFyX3R5cGVzLCBx dyhRdWFsQ29zdCk7CisKKyMgWFhYIHZhcmlvdXMgdGhpbmdzIHdlIGFyZSBub3QgcHVibGlz aGluZyByaWdodCBub3cgdG8gc3RheSBsZXZlbAorIyB3aXRoIHRoZSBtYW51YWwgc3lzdGVt CitwdXNoIEBub19jb3B5X2VxdWFsLCBxdyhDYWxsQ29udGV4dCBJbmxpbmVDb2RlQmxvY2sp OworcHVzaCBAbm9fcmVhZF93cml0ZSwgcXcoQWNjZXNzUHJpdiBBbHRlclRhYmxlQ21kIENh bGxDb250ZXh0IENyZWF0ZU9wQ2xhc3NJdGVtIEZ1bmN0aW9uUGFyYW1ldGVyIEluZmVyQ2xh dXNlIElubGluZUNvZGVCbG9jayBPYmplY3RXaXRoQXJncyBPbkNvbmZsaWN0Q2xhdXNlIFBh cnRpdGlvbkNtZCBSb2xlU3BlYyBWYWN1dW1SZWxhdGlvbik7CisKKworIyMgcmVhZCBpbnB1 dAorCitmb3JlYWNoIG15ICRpbmZpbGUgKEBBUkdWKQoreworCW15ICRpbl9zdHJ1Y3Q7CisJ bXkgJHN1YmxpbmU7CisJbXkgJGlzX25vZGVfc3RydWN0OworCW15ICRzdXBlcnR5cGU7CisJ bXkgJHN1cGVydHlwZV9maWVsZDsKKworCW15IEBteV9maWVsZHM7CisJbXkgJW15X2ZpZWxk X3R5cGVzOworCW15ICVteV9maWVsZF9hdHRyczsKKworCW9wZW4gbXkgJGlmaCwgJzwnLCAk aW5maWxlIG9yIGRpZSAiY291bGQgbm90IG9wZW4gXCIkaW5maWxlXCI6ICQhIjsKKworCW15 ICRmaWxlX2NvbnRlbnQgPSBkbyB7IGxvY2FsICQvOyA8JGlmaD4gfTsKKworCSMgc3RyaXAg QyBjb21tZW50cworCSRmaWxlX2NvbnRlbnQgPX4gc3svXCouKj9cKi99e31nczsKKworCWZv cmVhY2ggbXkgJGxpbmUgKHNwbGl0IC9cbi8sICRmaWxlX2NvbnRlbnQpCisJeworCQljaG9t cCAkbGluZTsKKwkJJGxpbmUgPX4gcy9ccyokLy87CisJCW5leHQgaWYgJGxpbmUgZXEgJyc7 CisJCW5leHQgaWYgJGxpbmUgPX4gL14jKGRlZmluZXxpZmRlZnxlbmRpZikvOworCisJCSMg d2UgYXJlIGFuYWx5emluZyBhIHN0cnVjdCBkZWZpbml0aW9uCisJCWlmICgkaW5fc3RydWN0 KQorCQl7CisJCQkkc3VibGluZSsrOworCisJCQkjIGZpcnN0IGxpbmUgc2hvdWxkIGhhdmUg b3BlbmluZyBicmFjZQorCQkJaWYgKCRzdWJsaW5lID09IDEpCisJCQl7CisJCQkJJGlzX25v ZGVfc3RydWN0ID0gMDsKKwkJCQkkc3VwZXJ0eXBlID0gdW5kZWY7CisJCQkJbmV4dCBpZiAk bGluZSBlcSAneyc7CisJCQkJZGllOworCQkJfQorCQkJIyBzZWNvbmQgbGluZSBzaG91bGQg aGF2ZSBub2RlIHRhZyBvciBzdXBlcnR5cGUKKwkJCWVsc2lmICgkc3VibGluZSA9PSAyKQor CQkJeworCQkJCWlmICgkbGluZSA9fiAvXlxzKk5vZGVUYWdccyt0eXBlOy8pCisJCQkJewor CQkJCQkkaXNfbm9kZV9zdHJ1Y3QgPSAxOworCQkJCQluZXh0OworCQkJCX0KKwkJCQllbHNp ZiAoJGxpbmUgPX4gL1xzKihcdyspXHMrKFx3Kyk7LyBhbmQgZWxlbSAkMSwgQG5vZGVfdHlw ZXMpCisJCQkJeworCQkJCQkkaXNfbm9kZV9zdHJ1Y3QgPSAxOworCQkJCQkkc3VwZXJ0eXBl ID0gJDE7CisJCQkJCSRzdXBlcnR5cGVfZmllbGQgPSAkMjsKKwkJCQkJbmV4dDsKKwkJCQl9 CisJCQl9CisKKwkJCSMgZW5kIG9mIHN0cnVjdAorCQkJaWYgKCRsaW5lID1+IC9eXH1ccyok aW5fc3RydWN0OyQvIHx8ICRsaW5lID1+IC9eXH07JC8pCisJCQl7CisJCQkJaWYgKCRpc19u b2RlX3N0cnVjdCkKKwkJCQl7CisJCQkJCSMgVGhpcyBpcyB0aGUgZW5kIG9mIGEgbm9kZSBz dHJ1Y3QgZGVmaW5pdGlvbi4KKwkJCQkJIyBTYXZlIGV2ZXJ5dGhpbmcgd2UgaGF2ZSBjb2xs ZWN0ZWQuCisKKwkJCQkJIyBub2RlIG5hbWUKKwkJCQkJcHVzaCBAbm9kZV90eXBlcywgJGlu X3N0cnVjdDsKKworCQkJCQkjIGZpZWxkIG5hbWVzLCB0eXBlcywgYXR0cmlidXRlcworCQkJ CQlteSBAZiA9IEBteV9maWVsZHM7CisJCQkJCW15ICVmdCA9ICVteV9maWVsZF90eXBlczsK KwkJCQkJbXkgJWZhID0gJW15X2ZpZWxkX2F0dHJzOworCisJCQkJCSMgSWYgdGhlcmUgaXMg YSBzdXBlcnR5cGUsIGFkZCB0aG9zZSBmaWVsZHMsIHRvby4KKwkJCQkJaWYgKCRzdXBlcnR5 cGUpCisJCQkJCXsKKwkJCQkJCW15IEBzdXBlcmZpZWxkczsKKwkJCQkJCWZvcmVhY2ggbXkg JHNmIChAeyRub2RlX3R5cGVfaW5mb3skc3VwZXJ0eXBlfS0+e2ZpZWxkc319KQorCQkJCQkJ eworCQkJCQkJCW15ICRmbiA9ICIke3N1cGVydHlwZV9maWVsZH0uJHNmIjsKKwkJCQkJCQlw dXNoIEBzdXBlcmZpZWxkcywgJGZuOworCQkJCQkJCSRmdHskZm59ID0gJG5vZGVfdHlwZV9p bmZveyRzdXBlcnR5cGV9LT57ZmllbGRfdHlwZXN9eyRzZn07CisJCQkJCQkJaWYgKCRub2Rl X3R5cGVfaW5mb3skc3VwZXJ0eXBlfS0+e2ZpZWxkX2F0dHJzfXskc2Z9KQorCQkJCQkJCXsK KwkJCQkJCQkJIyBDb3B5IGFueSBhdHRyaWJ1dGVzLCBhZGp1c3RpbmcgYXJyYXlfc2l6ZSBm aWVsZCByZWZlcmVuY2VzCisJCQkJCQkJCW15IEBuZXdhID0gQHskbm9kZV90eXBlX2luZm97 JHN1cGVydHlwZX0tPntmaWVsZF9hdHRyc317JHNmfX07CisJCQkJCQkJCWZvcmVhY2ggbXkg JGEgKEBuZXdhKQorCQkJCQkJCQl7CisJCQkJCQkJCQkkYSA9fiBzL2FycmF5X3NpemVcKChc dyspXCkvYXJyYXlfc2l6ZSgke3N1cGVydHlwZV9maWVsZH0uJDEpLzsKKwkJCQkJCQkJfQor CQkJCQkJCQkkZmF7JGZufSA9IFxAbmV3YTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQl1 bnNoaWZ0IEBmLCBAc3VwZXJmaWVsZHM7CisJCQkJCX0KKwkJCQkJIyBzYXZlIGluIGdsb2Jh bCBpbmZvIHN0cnVjdHVyZQorCQkJCQkkbm9kZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntm aWVsZHN9ID0gXEBmOworCQkJCQkkbm9kZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVs ZF90eXBlc30gPSBcJWZ0OworCQkJCQkkbm9kZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntm aWVsZF9hdHRyc30gPSBcJWZhOworCisJCQkJCSMgTm9kZXMgZnJvbSB0aGVzZSBmaWxlcyBk b24ndCBuZWVkIHRvIGJlCisJCQkJCSMgc3VwcG9ydGVkLCBleGNlcHQgdGhlIG5vZGUgdGFn cy4KKwkJCQkJaWYgKGVsZW0gYmFzZW5hbWUoJGluZmlsZSksCisJCQkJCQlxdyhleGVjbm9k ZXMuaCB0cmlnZ2VyLmggZXZlbnRfdHJpZ2dlci5oIGFtYXBpLmggdGFibGVhbS5oCisJCQkJ CQkJdHNtYXBpLmggZmR3YXBpLmggdHVwdGFibGUuaCByZXBsbm9kZXMuaCBzdXBwb3J0bm9k ZXMuaCkpCisJCQkJCXsKKwkJCQkJCXB1c2ggQG5vX2NvcHlfZXF1YWwsICRpbl9zdHJ1Y3Q7 CisJCQkJCQlwdXNoIEBub19yZWFkX3dyaXRlLCAkaW5fc3RydWN0OworCQkJCQl9CisKKwkJ CQkJIyBQcm9wYWdhdGUgc29tZSBub2RlIGF0dHJpYnV0ZXMgZnJvbSBzdXBlcnR5cGVzCisJ CQkJCWlmICgkc3VwZXJ0eXBlKQorCQkJCQl7CisJCQkJCQlwdXNoIEBub19jb3B5X2VxdWFs LCAkaW5fc3RydWN0IGlmIGVsZW0gJHN1cGVydHlwZSwgQG5vX2NvcHlfZXF1YWw7CisJCQkJ CQlwdXNoIEBub19yZWFkLCAkaW5fc3RydWN0IGlmIGVsZW0gJHN1cGVydHlwZSwgQG5vX3Jl YWQ7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkjIHN0YXJ0IG5ldyBjeWNsZQorCQkJCSRpbl9z dHJ1Y3QgPSB1bmRlZjsKKwkJCQlAbXlfZmllbGRzID0gKCk7CisJCQkJJW15X2ZpZWxkX3R5 cGVzID0gKCk7CisJCQkJJW15X2ZpZWxkX2F0dHJzID0gKCk7CisJCQl9CisJCQkjIG5vcm1h bCBzdHJ1Y3QgZmllbGQKKwkJCWVsc2lmICgkbGluZSA9fiAvXlxzKiguKylccypcYihcdysp KFxbXHcrXF0pP1xzKig/OnBnX25vZGVfYXR0clwoKFtcdygpLCBdKilcKSk/Oy8pCisJCQl7 CisJCQkJaWYgKCRpc19ub2RlX3N0cnVjdCkKKwkJCQl7CisJCQkJCW15ICR0eXBlID0gJDE7 CisJCQkJCW15ICRuYW1lID0gJDI7CisJCQkJCW15ICRhcnJheV9zaXplID0gJDM7CisJCQkJ CW15ICRhdHRycyA9ICQ0OworCisJCQkJCSMgc3RyaXAgImNvbnN0IgorCQkJCQkkdHlwZSA9 fiBzL15jb25zdFxzKi8vOworCQkJCQkjIHN0cmlwIHRyYWlsaW5nIHNwYWNlCisJCQkJCSR0 eXBlID1+IHMvXHMqJC8vOworCQkJCQkjIHN0cmlwIHNwYWNlIGJldHdlZW4gdHlwZSBhbmQg IioiIChwb2ludGVyKSAqLworCQkJCQkkdHlwZSA9fiBzL1xzK1wqJC8qLzsKKworCQkJCQlk aWUgaWYgJHR5cGUgZXEgJyc7CisKKwkJCQkJbXkgQGF0dHJzOworCQkJCQlpZiAoJGF0dHJz KQorCQkJCQl7CisJCQkJCQlAYXR0cnMgPSBzcGxpdCAvLFxzKi8sICRhdHRyczsKKwkJCQkJ CWZvcmVhY2ggbXkgJGF0dHIgKEBhdHRycykKKwkJCQkJCXsKKwkJCQkJCQlpZiAoJGF0dHIg IX4gL15hcnJheV9zaXplXChcdytcKSQvICYmCisJCQkJCQkJCSFlbGVtICRhdHRyLCBxdyhj b3B5X2lnbm9yZSBlcXVhbF9pZ25vcmUgZXF1YWxfaWdub3JlX2lmX3plcm8gcmVhZF93cml0 ZV9pZ25vcmUKKwkJCQkJCQkJCXdyaXRlX29ubHlfcmVsaWRzIHdyaXRlX29ubHlfbm9uZGVm YXVsdF9wYXRodGFyZ2V0IHdyaXRlX29ubHlfcmVxX291dGVyKSkKKwkJCQkJCQl7CisJCQkJ CQkJCWRpZSAiJGluZmlsZTokLjogdW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBcIiRhdHRyXCJc biI7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJJHR5cGUgPSAkdHlwZSAu ICRhcnJheV9zaXplIGlmICRhcnJheV9zaXplOworCQkJCQlwdXNoIEBteV9maWVsZHMsICRu YW1lOworCQkJCQkkbXlfZmllbGRfdHlwZXN7JG5hbWV9ID0gJHR5cGU7CisJCQkJCSRteV9m aWVsZF9hdHRyc3skbmFtZX0gPSBcQGF0dHJzOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQlpZiAoJGlzX25vZGVfc3RydWN0KQorCQkJCXsKKwkJCQkJI3dhcm4gIiRpbmZp bGU6JC46IGNvdWxkIG5vdCBwYXJzZSBcIiRsaW5lXCJcbiI7CisJCQkJfQorCQkJfQorCQl9 CisJCSMgbm90IGluIGEgc3RydWN0CisJCWVsc2UKKwkJeworCQkJIyBzdGFydCBvZiBhIHN0 cnVjdD8KKwkJCWlmICgkbGluZSA9fiAvXig/OnR5cGVkZWYgKT9zdHJ1Y3QgKFx3Kylccyoo PzpwZ19ub2RlX2F0dHJcKChbXHcoKSwgXSopXCkpPyQvICYmICQxIG5lICdOb2RlJykKKwkJ CXsKKwkJCQkkaW5fc3RydWN0ID0gJDE7CisJCQkJbXkgJG5vZGVfYXR0cnMgPSAkMiB8fCAn JzsKKwkJCQkkc3VibGluZSA9IDA7CisKKwkJCQlmb3JlYWNoIG15ICRhdHRyIChzcGxpdCAv LFxzKi8sICRub2RlX2F0dHJzKQorCQkJCXsKKwkJCQkJaWYgKCRhdHRyIGVxICdhYnN0cmFj dCcpCisJCQkJCXsKKwkJCQkJCXB1c2ggQGFic3RyYWN0X3R5cGVzLCAkaW5fc3RydWN0Owor CQkJCQl9CisJCQkJCWVsc2lmICgkYXR0ciBlcSAnY3VzdG9tX2NvcHlfZXF1YWwnKQorCQkJ CQl7CisJCQkJCQlwdXNoIEBjdXN0b21fY29weV9lcXVhbCwgJGluX3N0cnVjdDsKKwkJCQkJ fQorCQkJCQllbHNpZiAoJGF0dHIgZXEgJ2N1c3RvbV9yZWFkX3dyaXRlJykKKwkJCQkJewor CQkJCQkJcHVzaCBAY3VzdG9tX3JlYWRfd3JpdGUsICRpbl9zdHJ1Y3Q7CisJCQkJCX0KKwkJ CQkJZWxzaWYgKCRhdHRyIGVxICdub19jb3B5X2VxdWFsJykKKwkJCQkJeworCQkJCQkJcHVz aCBAbm9fY29weV9lcXVhbCwgJGluX3N0cnVjdDsKKwkJCQkJfQorCQkJCQllbHNpZiAoJGF0 dHIgZXEgJ25vX3JlYWQnKQorCQkJCQl7CisJCQkJCQlwdXNoIEBub19yZWFkLCAkaW5fc3Ry dWN0OworCQkJCQl9CisJCQkJCWVsc2lmICgkYXR0ciBlcSAnc3BlY2lhbF9yZWFkX3dyaXRl JykKKwkJCQkJeworCQkJCQkJIyBUaGlzIGF0dHJpYnV0ZSBpcyBjYWxsZWQKKwkJCQkJCSMg InNwZWNpYWxfcmVhZF93cml0ZSIgYmVjYXVzZSB0aGVyZSBpcworCQkJCQkJIyBzcGVjaWFs IHRyZWF0bWVudCBpbiBvdXROb2RlKCkgYW5kCisJCQkJCQkjIG5vZGVSZWFkKCkgZm9yIHRo ZXNlIG5vZGVzLiAgRm9yIHRoaXMKKwkJCQkJCSMgc2NyaXB0LCBpdCdzIHRoZSBzYW1lIGFz ICJub19yZWFkX3dyaXRlIiwKKwkJCQkJCSMgYnV0IGNhbGxpbmcgdGhlIGF0dHJpYnV0ZSB0 aGF0IGV4dGVybmFsbHkKKwkJCQkJCSMgd291bGQgcHJvYmFibHkgYmUgY29uZnVzaW5nLCBz aW5jZQorCQkJCQkJIyByZWFkL3dyaXRlIHN1cHBvcnQgZG9lcyBpbiBmYWN0IGV4aXN0Lgor CQkJCQkJcHVzaCBAbm9fcmVhZF93cml0ZSwgJGluX3N0cnVjdDsKKwkJCQkJfQorCQkJCQll bHNlCisJCQkJCXsKKwkJCQkJCWRpZSAiJGluZmlsZTokLjogdW5yZWNvZ25pemVkIGF0dHJp YnV0ZSBcIiRhdHRyXCJcbiI7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQkjIG9uZSBub2Rl IHR5cGUgdHlwZWRlZidlZCBkaXJlY3RseSBmcm9tIGFub3RoZXIKKwkJCWVsc2lmICgkbGlu ZSA9fiAvXnR5cGVkZWYgKFx3KykgKFx3Kyk7JC8gYW5kIGVsZW0gJDEsIEBub2RlX3R5cGVz KQorCQkJeworCQkJCW15ICRhbGlhc19vZiA9ICQxOworCQkJCW15ICRuID0gJDI7CisKKwkJ CQkjIGNvcHkgZXZlcnl0aGluZyBvdmVyCisJCQkJcHVzaCBAbm9kZV90eXBlcywgJG47CisJ CQkJbXkgQGYgPSBAeyRub2RlX3R5cGVfaW5mb3skYWxpYXNfb2Z9LT57ZmllbGRzfX07CisJ CQkJbXkgJWZ0ID0gJXskbm9kZV90eXBlX2luZm97JGFsaWFzX29mfS0+e2ZpZWxkX3R5cGVz fX07CisJCQkJbXkgJWZhID0gJXskbm9kZV90eXBlX2luZm97JGFsaWFzX29mfS0+e2ZpZWxk X2F0dHJzfX07CisJCQkJJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkc30gPSBcQGY7CisJ CQkJJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX3R5cGVzfSA9IFwlZnQ7CisJCQkJJG5v ZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX2F0dHJzfSA9IFwlZmE7CisJCQl9CisJCQkjIGNv bGxlY3QgZW51bSBuYW1lcworCQkJZWxzaWYgKCRsaW5lID1+IC9edHlwZWRlZiBlbnVtIChc dyspKFxzKlwvXCouKik/JC8pCisJCQl7CisJCQkJcHVzaCBAZW51bV90eXBlcywgJDE7CisJ CQl9CisJCX0KKwl9CisKKwlpZiAoJGluX3N0cnVjdCkKKwl7CisJCWRpZSAicnVuYXdheSBc IiRpbl9zdHJ1Y3RcIiBpbiBmaWxlIFwiJGluZmlsZVwiXG4iOworCX0KKworCWNsb3NlICRp Zmg7Cit9ICMgZm9yIGVhY2ggZmlsZQorCisKKyMjIHdyaXRlIG91dHB1dAorCitteSAkdG1w ZXh0ICA9ICIudG1wJCQiOworCisjIG5vZGV0YWdzLmgKKworb3BlbiBteSAkbnQsICc+Jywg J25vZGV0YWdzLmgnIC4gJHRtcGV4dCBvciBkaWUgJCE7CisKK215ICRpID0gMTsKK2ZvcmVh Y2ggbXkgJG4gKEBub2RlX3R5cGVzLEBleHRyYV90YWdzKQoreworCW5leHQgaWYgZWxlbSAk biwgQGFic3RyYWN0X3R5cGVzOworCXByaW50ICRudCAiXHRUXyR7bn0gPSAkaSxcbiI7CisJ JGkrKzsKK30KKworY2xvc2UgJG50OworCisKKyMgbWFrZSAjaW5jbHVkZSBsaW5lcyBuZWNl c3NhcnkgdG8gcHVsbCBpbiBhbGwgdGhlIHN0cnVjdCBkZWZpbml0aW9ucworbXkgJG5vZGVf aW5jbHVkZXMgPSAnJzsKK2ZvcmVhY2ggbXkgJGluZmlsZSAoc29ydCBAQVJHVikKK3sKKwkk aW5maWxlID1+IHMhLipzcmMvaW5jbHVkZS8hITsKKwkkbm9kZV9pbmNsdWRlcyAuPSBxcXsj aW5jbHVkZSAiJGluZmlsZSJcbn07Cit9CisKKworIyBjb3B5ZnVuY3MuYywgZXF1YWxmdW5j cy5jCisKK29wZW4gbXkgJGNmZiwgJz4nLCAnY29weWZ1bmNzLmZ1bmNzLmMnIC4gJHRtcGV4 dCBvciBkaWUgJCE7CitvcGVuIG15ICRlZmYsICc+JywgJ2VxdWFsZnVuY3MuZnVuY3MuYycg LiAkdG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkgJGNmcywgJz4nLCAnY29weWZ1bmNzLnN3 aXRjaC5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3BlbiBteSAkZWZzLCAnPicsICdlcXVh bGZ1bmNzLnN3aXRjaC5jJyAuICR0bXBleHQgb3IgZGllICQhOworCisjIGFkZCByZXF1aXJl ZCAjaW5jbHVkZSBsaW5lcyB0byBlYWNoIGZpbGUgc2V0CitwcmludCAkY2ZmICRub2RlX2lu Y2x1ZGVzOworcHJpbnQgJGVmZiAkbm9kZV9pbmNsdWRlczsKKworZm9yZWFjaCBteSAkbiAo QG5vZGVfdHlwZXMpCit7CisJbmV4dCBpZiBlbGVtICRuLCBAYWJzdHJhY3RfdHlwZXM7CisJ bmV4dCBpZiBlbGVtICRuLCBAbm9fY29weV9lcXVhbDsKKwluZXh0IGlmICRuIGVxICdMaXN0 JzsKKworCXByaW50ICRjZnMgIlx0XHRjYXNlIFRfJHtufTpcbiIuCisJICAiXHRcdFx0cmV0 dmFsID0gX2NvcHkke259KGZyb20pO1xuIi4KKwkgICJcdFx0XHRicmVhaztcbiI7CisKKwlw cmludCAkZWZzICJcdFx0Y2FzZSBUXyR7bn06XG4iLgorCSAgIlx0XHRcdHJldHZhbCA9IF9l cXVhbCR7bn0oYSwgYik7XG4iLgorCSAgIlx0XHRcdGJyZWFrO1xuIjsKKworCW5leHQgaWYg ZWxlbSAkbiwgQGN1c3RvbV9jb3B5X2VxdWFsOworCisJcHJpbnQgJGNmZiAiCitzdGF0aWMg JG4gKgorX2NvcHkke259KGNvbnN0ICRuICpmcm9tKQoreworXHQke259ICpuZXdub2RlID0g bWFrZU5vZGUoJG4pOworCisiOworCisJcHJpbnQgJGVmZiAiCitzdGF0aWMgYm9vbAorX2Vx dWFsJHtufShjb25zdCAkbiAqYSwgY29uc3QgJG4gKmIpCit7CisiOworCisJIyBwcmludCBp bnN0cnVjdGlvbnMgZm9yIGVhY2ggZmllbGQKKwlmb3JlYWNoIG15ICRmIChAeyRub2RlX3R5 cGVfaW5mb3skbn0tPntmaWVsZHN9fSkKKwl7CisJCW15ICR0ID0gJG5vZGVfdHlwZV9pbmZv eyRufS0+e2ZpZWxkX3R5cGVzfXskZn07CisJCW15IEBhID0gQHsgJG5vZGVfdHlwZV9pbmZv eyRufS0+e2ZpZWxkX2F0dHJzfXskZn0gfTsKKwkJbXkgJGNvcHlfaWdub3JlID0gKGVsZW0g J2NvcHlfaWdub3JlJywgQGEpOworCQlteSAkZXF1YWxfaWdub3JlID0gKGVsZW0gJ2VxdWFs X2lnbm9yZScsIEBhKTsKKworCQkjIHNlbGVjdCBpbnN0cnVjdGlvbnMgYnkgZmllbGQgdHlw ZQorCQlpZiAoJHQgZXEgJ2NoYXIqJykKKwkJeworCQkJcHJpbnQgJGNmZiAiXHRDT1BZX1NU UklOR19GSUVMRCgkZik7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQlwcmludCAkZWZm ICJcdENPTVBBUkVfU1RSSU5HX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7 CisJCX0KKwkJZWxzaWYgKCR0IGVxICdCaXRtYXBzZXQqJyB8fCAkdCBlcSAnUmVsaWRzJykK KwkJeworCQkJcHJpbnQgJGNmZiAiXHRDT1BZX0JJVE1BUFNFVF9GSUVMRCgkZik7XG4iIHVu bGVzcyAkY29weV9pZ25vcmU7CisJCQlwcmludCAkZWZmICJcdENPTVBBUkVfQklUTUFQU0VU X0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7CisJCX0KKwkJZWxzaWYgKCR0 IGVxICdpbnQnICYmICRmID1+ICdsb2NhdGlvbiQnKQorCQl7CisJCQlwcmludCAkY2ZmICJc dENPUFlfTE9DQVRJT05fRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJ cHJpbnQgJGVmZiAiXHRDT01QQVJFX0xPQ0FUSU9OX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRl cXVhbF9pZ25vcmU7CisJCX0KKwkJZWxzaWYgKGVsZW0gJHQsIEBzY2FsYXJfdHlwZXMgb3Ig ZWxlbSAkdCwgQGVudW1fdHlwZXMpCisJCXsKKwkJCXByaW50ICRjZmYgIlx0Q09QWV9TQ0FM QVJfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJaWYgKGVsZW0gJ2Vx dWFsX2lnbm9yZV9pZl96ZXJvJywgQGEpCisJCQl7CisJCQkJcHJpbnQgJGVmZiAiXHRpZiAo YS0+JGYgIT0gYi0+JGYgJiYgYS0+JGYgIT0gMCAmJiBiLT4kZiAhPSAwKVxuXHRcdHJldHVy biBmYWxzZTtcbiI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcHJpbnQgJGVmZiAiXHRD T01QQVJFX1NDQUxBUl9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlIHx8ICR0 IGVxICdDb2VyY2lvbkZvcm0nOworCQkJfQorCQl9CisJCSMgc2NhbGFyIHR5cGUgcG9pbnRl cgorCQllbHNpZiAoJHQgPX4gLyhcdyspXCovIGFuZCBlbGVtICQxLCBAc2NhbGFyX3R5cGVz KQorCQl7CisJCQlteSAkdHQgPSAkMTsKKwkJCW15ICRhcnJheV9zaXplX2ZpZWxkOworCQkJ Zm9yZWFjaCBteSAkYSAoQGEpCisJCQl7CisJCQkJaWYgKCRhID1+IC9eYXJyYXlfc2l6ZS4o W1x3Ll0rKS8pCisJCQkJeworCQkJCQkkYXJyYXlfc2l6ZV9maWVsZCA9ICQxOworCQkJCQls YXN0OworCQkJCX0KKwkJCX0KKwkJCWlmICghJGFycmF5X3NpemVfZmllbGQpCisJCQl7CisJ CQkJZGllICJubyBhcnJheSBzaXplIGRlZmluZWQgZm9yICRuLiRmIG9mIHR5cGUgJHQiOwor CQkJfQorCQkJaWYgKCRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF90eXBlc317JGFycmF5 X3NpemVfZmllbGR9IGVxICdMaXN0KicpCisJCQl7CisJCQkJcHJpbnQgJGNmZiAiXHRDT1BZ X1BPSU5URVJfRklFTEQoJGYsIGxpc3RfbGVuZ3RoKGZyb20tPiRhcnJheV9zaXplX2ZpZWxk KSAqIHNpemVvZigkdHQpKTtcbiIgdW5sZXNzICRjb3B5X2lnbm9yZTsKKwkJCQlwcmludCAk ZWZmICJcdENPTVBBUkVfUE9JTlRFUl9GSUVMRCgkZiwgbGlzdF9sZW5ndGgoYS0+JGFycmF5 X3NpemVfZmllbGQpICogc2l6ZW9mKCR0dCkpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsK KwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmludCAkY2ZmICJcdENPUFlfUE9JTlRFUl9G SUVMRCgkZiwgZnJvbS0+JGFycmF5X3NpemVfZmllbGQgKiBzaXplb2YoJHR0KSk7XG4iIHVu bGVzcyAkY29weV9pZ25vcmU7CisJCQkJcHJpbnQgJGVmZiAiXHRDT01QQVJFX1BPSU5URVJf RklFTEQoJGYsIGEtPiRhcnJheV9zaXplX2ZpZWxkICogc2l6ZW9mKCR0dCkpO1xuIiB1bmxl c3MgJGVxdWFsX2lnbm9yZTsKKwkJCX0KKwkJfQorCQkjIG5vZGUgdHlwZQorCQllbHNpZiAo JHQgPX4gLyhcdyspXCovIGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJeworCQkJcHJp bnQgJGNmZiAiXHRDT1BZX05PREVfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3Jl OworCQkJcHJpbnQgJGVmZiAiXHRDT01QQVJFX05PREVfRklFTEQoJGYpO1xuIiB1bmxlc3Mg JGVxdWFsX2lnbm9yZTsKKwkJfQorCQkjIGFycmF5IChpbmxpbmUpCisJCWVsc2lmICgkdCA9 fiAvXHcrXFsvKQorCQl7CisJCQlwcmludCAkY2ZmICJcdENPUFlfQVJSQVlfRklFTEQoJGYp O1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmZiAiXHRDT01QQVJFX0FS UkFZX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7CisJCX0KKwkJZWxzaWYg KCR0IGVxICdzdHJ1Y3QgQ3VzdG9tUGF0aE1ldGhvZHMqJyB8fAkkdCBlcSAnc3RydWN0IEN1 c3RvbVNjYW5NZXRob2RzKicpCisJCXsKKwkJCSMgRmllbGRzIG9mIHRoZXNlIHR5cGVzIGFy ZSByZXF1aXJlZCB0byBiZSBhIHBvaW50ZXIgdG8gYQorCQkJIyBzdGF0aWMgdGFibGUgb2Yg Y2FsbGJhY2sgZnVuY3Rpb25zLiAgU28gd2UgZG9uJ3QgY29weQorCQkJIyB0aGUgdGFibGUg aXRzZWxmLCBqdXN0IHJlZmVyZW5jZSB0aGUgb3JpZ2luYWwgb25lLgorCQkJcHJpbnQgJGNm ZiAiXHRDT1BZX1NDQUxBUl9GSUVMRCgkZik7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJ CQlwcmludCAkZWZmICJcdENPTVBBUkVfU0NBTEFSX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRl cXVhbF9pZ25vcmU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlkaWUgImNvdWxkIG5vdCBoYW5k bGUgdHlwZSBcIiR0XCIgaW4gc3RydWN0IFwiJG5cIiBmaWVsZCBcIiRmXCIiOworCQl9CisJ fQorCisJcHJpbnQgJGNmZiAiCitcdHJldHVybiBuZXdub2RlOworfQorIjsKKwlwcmludCAk ZWZmICIKK1x0cmV0dXJuIHRydWU7Cit9CisiOworfQorCitjbG9zZSAkY2ZmOworY2xvc2Ug JGVmZjsKK2Nsb3NlICRjZnM7CitjbG9zZSAkZWZzOworCisKKyMgb3V0ZnVuY3MuYywgcmVh ZGZ1bmNzLmMKKworb3BlbiBteSAkb2ZmLCAnPicsICdvdXRmdW5jcy5mdW5jcy5jJyAuICR0 bXBleHQgb3IgZGllICQhOworb3BlbiBteSAkcmZmLCAnPicsICdyZWFkZnVuY3MuZnVuY3Mu YycgLiAkdG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkgJG9mcywgJz4nLCAnb3V0ZnVuY3Mu c3dpdGNoLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7CitvcGVuIG15ICRyZnMsICc+JywgJ3Jl YWRmdW5jcy5zd2l0Y2guYycgLiAkdG1wZXh0IG9yIGRpZSAkITsKKworcHJpbnQgJG9mZiAk bm9kZV9pbmNsdWRlczsKK3ByaW50ICRyZmYgJG5vZGVfaW5jbHVkZXM7CisKK2ZvcmVhY2gg bXkgJG4gKEBub2RlX3R5cGVzKQoreworCW5leHQgaWYgZWxlbSAkbiwgQGFic3RyYWN0X3R5 cGVzOworCW5leHQgaWYgZWxlbSAkbiwgQG5vX3JlYWRfd3JpdGU7CisKKwkjIFhYWCBGb3Ig bm93LCBza2lwIGFsbCAiU3RtdCJzIGV4Y2VwdCB0aGF0IG9uZXMgdGhhdCB3ZXJlIHRoZXJl IGJlZm9yZS4KKwlpZiAoJG4gPX4gL1N0bXQkLykKKwl7CisJCW15IEBrZWVwID0gcXcoQWx0 ZXJTdGF0c1N0bXQgQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCBDcmVhdGVTdGF0c1N0bXQgQ3Jl YXRlU3RtdCBEZWNsYXJlQ3Vyc29yU3RtdCBJbXBvcnRGb3JlaWduU2NoZW1hU3RtdCBJbmRl eFN0bXQgTm90aWZ5U3RtdCBQbGFubmVkU3RtdCBQTEFzc2lnblN0bXQgUmF3U3RtdCBSZXR1 cm5TdG10IFNlbGVjdFN0bXQgU2V0T3BlcmF0aW9uU3RtdCk7CisJCW5leHQgdW5sZXNzIGVs ZW0gJG4sIEBrZWVwOworCX0KKworCW15ICRub19yZWFkID0gKGVsZW0gJG4sIEBub19yZWFk KTsKKworCSMgb3V0cHV0IGZvcm1hdCBzdGFydHMgd2l0aCB1cHBlciBjYXNlIG5vZGUgdHlw ZSwgdW5kZXJzY29yZXMgc3RyaXBwZWQKKwlteSAkTiA9IHVjICRuOworCSROID1+IHMvXy8v ZzsKKworCXByaW50ICRvZnMgIlx0XHRcdGNhc2UgVF8ke259OlxuIi4KKwkgICJcdFx0XHRc dF9vdXQke259KHN0ciwgb2JqKTtcbiIuCisJICAiXHRcdFx0XHRicmVhaztcbiI7CisKKwlw cmludCAkcmZzICJcdGVsc2UgaWYgKE1BVENIKFwiJE5cIiwgIiAuIGxlbmd0aCgkTikgLiAi KSlcbiIuCisJICAiXHRcdHJldHVybl92YWx1ZSA9IF9yZWFkJHtufSgpO1xuIiB1bmxlc3Mg JG5vX3JlYWQ7CisKKwluZXh0IGlmIGVsZW0gJG4sIEBjdXN0b21fcmVhZF93cml0ZTsKKwor CXByaW50ICRvZmYgIgorc3RhdGljIHZvaWQKK19vdXQke259KFN0cmluZ0luZm8gc3RyLCBj b25zdCAkbiAqbm9kZSkKK3sKK1x0V1JJVEVfTk9ERV9UWVBFKFwiJE5cIik7CisKKyI7CisK KwlwcmludCAkcmZmICIKK3N0YXRpYyAkbiAqCitfcmVhZCR7bn0odm9pZCkKK3sKK1x0UkVB RF9MT0NBTFMoJG4pOworCisiIHVubGVzcyAkbm9fcmVhZDsKKworCSMgcHJpbnQgaW5zdHJ1 Y3Rpb25zIGZvciBlYWNoIGZpZWxkCisJZm9yZWFjaCBteSAkZiAoQHskbm9kZV90eXBlX2lu Zm97JG59LT57ZmllbGRzfX0pCisJeworCQlteSAkdCA9ICRub2RlX3R5cGVfaW5mb3skbn0t PntmaWVsZF90eXBlc317JGZ9OworCQlteSBAYSA9IEB7ICRub2RlX3R5cGVfaW5mb3skbn0t PntmaWVsZF9hdHRyc317JGZ9IH07CisJCW5leHQgaWYgKGVsZW0gJ3JlYWRfd3JpdGVfaWdu b3JlJywgQGEpOworCisJCSMgWFhYIFByZXZpb3VzbHksIGZvciBzdWJ0eXBpbmcsIG9ubHkg dGhlIGxlYWYgZmllbGQgbmFtZSBpcworCQkjIHVzZWQuIFBvbmRlciB3aGV0aGVyIHdlIHdh bnQgdG8ga2VlcCBpdCB0aGF0IHdheS4KKworCQkjIHNlbGVjdCBpbnN0cnVjdGlvbnMgYnkg ZmllbGQgdHlwZQorCQlpZiAoJHQgZXEgJ2Jvb2wnKQorCQl7CisJCQlwcmludCAkb2ZmICJc dFdSSVRFX0JPT0xfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVBRF9CT09M X0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAn aW50JyAmJiAkZiA9fiAnbG9jYXRpb24kJykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklU RV9MT0NBVElPTl9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0xPQ0FU SU9OX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBl cSAnaW50JyB8fCAkdCBlcSAnaW50MzInIHx8ICR0IGVxICdBdHRyTnVtYmVyJyB8fCAkdCBl cSAnU3RyYXRlZ3lOdW1iZXInKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0lOVF9G SUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0lOVF9GSUVMRCgkZik7XG4i IHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ3VpbnQzMicgfHwgJHQg ZXEgJ2JpdHMzMicgfHwgJHQgZXEgJ0FjbE1vZGUnIHx8ICR0IGVxICdCbG9ja051bWJlcicg fHwgJHQgZXEgJ0luZGV4JyB8fCAkdCBlcSAnU3ViVHJhbnNhY3Rpb25JZCcpCisJCXsKKwkJ CXByaW50ICRvZmYgIlx0V1JJVEVfVUlOVF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJm ZiAiXHRSRUFEX1VJTlRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJ ZWxzaWYgKCR0IGVxICd1aW50NjQnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX1VJ TlQ2NF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX1VJTlQ2NF9GSUVM RCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ09pZCcp CisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfT0lEX0ZJRUxEKCRmKTtcbiI7CisJCQlw cmludCAkcmZmICJcdFJFQURfT0lEX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOwor CQl9CisJCWVsc2lmICgkdCBlcSAnbG9uZycpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJ VEVfTE9OR19GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0xPTkdfRklF TEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdjaGFy JykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9DSEFSX0ZJRUxEKCRmKTtcbiI7CisJ CQlwcmludCAkcmZmICJcdFJFQURfQ0hBUl9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVh ZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2RvdWJsZScpCisJCXsKKwkJCXByaW50ICRvZmYg Ilx0V1JJVEVfRkxPQVRfRklFTEQoJGYsIFwiJS42ZlwiKTtcbiI7CisJCQlwcmludCAkcmZm ICJcdFJFQURfRkxPQVRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJ ZWxzaWYgKCR0IGVxICdDYXJkaW5hbGl0eScpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJ VEVfRkxPQVRfRklFTEQoJGYsIFwiJS4wZlwiKTtcbiI7CisJCQlwcmludCAkcmZmICJcdFJF QURfRkxPQVRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYg KCR0IGVxICdDb3N0JykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9GTE9BVF9GSUVM RCgkZiwgXCIlLjJmXCIpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVBRF9GTE9BVF9GSUVM RCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ1F1YWxD b3N0JykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9GTE9BVF9GSUVMRCgkZi5zdGFy dHVwLCBcIiUuMmZcIik7XG4iOworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9GTE9BVF9GSUVM RCgkZi5wZXJfdHVwbGUsIFwiJS4yZlwiKTtcbiI7CisJCQlwcmludCAkcmZmICJcdFJFQURf RkxPQVRfRklFTEQoJGYuc3RhcnR1cCk7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJCXByaW50 ICRyZmYgIlx0UkVBRF9GTE9BVF9GSUVMRCgkZi5wZXJfdHVwbGUpO1xuIiB1bmxlc3MgJG5v X3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdTZWxlY3Rpdml0eScpCisJCXsKKwkJCXBy aW50ICRvZmYgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYsIFwiJS40ZlwiKTtcbiI7CisJCQlw cmludCAkcmZmICJcdFJFQURfRkxPQVRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7 CisJCX0KKwkJZWxzaWYgKCR0IGVxICdjaGFyKicpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0 V1JJVEVfU1RSSU5HX0ZJRUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmZmICJcdFJFQURfU1RS SU5HX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBl cSAnQml0bWFwc2V0KicgfHwgJHQgZXEgJ1JlbGlkcycpCisJCXsKKwkJCXByaW50ICRvZmYg Ilx0V1JJVEVfQklUTUFQU0VUX0ZJRUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmZmICJcdFJF QURfQklUTUFQU0VUX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVs c2lmIChlbGVtICR0LCBAZW51bV90eXBlcykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklU RV9FTlVNX0ZJRUxEKCRmLCAkdCk7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0VOVU1f RklFTEQoJGYsICR0KTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCSMgYXJyYXlzCisJ CWVsc2lmICgkdCA9fiAvKFx3KykoXCp8XFspLyBhbmQgZWxlbSAkMSwgQHNjYWxhcl90eXBl cykKKwkJeworCQkJbXkgJHR0ID0gdWMgJDE7CisJCQlteSAkYXJyYXlfc2l6ZV9maWVsZDsK KwkJCWZvcmVhY2ggbXkgJGEgKEBhKQorCQkJeworCQkJCWlmICgkYSA9fiAvXmFycmF5X3Np emUuKFtcdy5dKykvKQorCQkJCXsKKwkJCQkJJGFycmF5X3NpemVfZmllbGQgPSAkMTsKKwkJ CQkJbGFzdDsKKwkJCQl9CisJCQl9CisJCQlpZiAoISRhcnJheV9zaXplX2ZpZWxkKQorCQkJ eworCQkJCWRpZSAibm8gYXJyYXkgc2l6ZSBkZWZpbmVkIGZvciAkbi4kZiBvZiB0eXBlICR0 IjsKKwkJCX0KKwkJCWlmICgkbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRfdHlwZXN9eyRh cnJheV9zaXplX2ZpZWxkfSBlcSAnTGlzdConKQorCQkJeworCQkJCXByaW50ICRvZmYgIlx0 V1JJVEVfJHt0dH1fQVJSQVkoJGYsIGxpc3RfbGVuZ3RoKG5vZGUtPiRhcnJheV9zaXplX2Zp ZWxkKSk7XG4iOworCQkJCXByaW50ICRyZmYgIlx0UkVBRF8ke3R0fV9BUlJBWSgkZiwgbGlz dF9sZW5ndGgobG9jYWxfbm9kZS0+JGFycmF5X3NpemVfZmllbGQpKTtcbiIgdW5sZXNzICRu b19yZWFkOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXByaW50ICRvZmYgIlx0V1JJVEVf JHt0dH1fQVJSQVkoJGYsIG5vZGUtPiRhcnJheV9zaXplX2ZpZWxkKTtcbiI7CisJCQkJcHJp bnQgJHJmZiAiXHRSRUFEXyR7dHR9X0FSUkFZKCRmLCBsb2NhbF9ub2RlLT4kYXJyYXlfc2l6 ZV9maWVsZCk7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJCX0KKwkJfQorCQkjIFNwZWNpYWwg dHJlYXRtZW50cyBvZiBzZXZlcmFsIFBhdGggbm9kZSBmaWVsZHMKKwkJZWxzaWYgKCR0IGVx ICdSZWxPcHRJbmZvKicgJiYgZWxlbSAnd3JpdGVfb25seV9yZWxpZHMnLCBAYSkKKwkJewor CQkJcHJpbnQgJG9mZiAiXHRhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgXCIgOnBhcmVu dF9yZWxpZHMgXCIpO1xuIi4KKwkJCSAgIlx0b3V0Qml0bWFwc2V0KHN0ciwgbm9kZS0+JGYt PnJlbGlkcyk7XG4iOworCQl9CisJCWVsc2lmICgkdCBlcSAnUGF0aFRhcmdldConICYmIGVs ZW0gJ3dyaXRlX29ubHlfbm9uZGVmYXVsdF9wYXRodGFyZ2V0JywgQGEpCisJCXsKKwkJCSht eSAkZjIgPSAkZikgPX4gcy9wYXRodGFyZ2V0L3BhcmVudC87CisJCQlwcmludCAkb2ZmICJc dGlmIChub2RlLT4kZiAhPSBub2RlLT4kZjItPnJlbHRhcmdldClcbiIuCisJCQkgICJcdFx0 V1JJVEVfTk9ERV9GSUVMRCgkZik7XG4iOworCQl9CisJCWVsc2lmICgkdCBlcSAnUGFyYW1Q YXRoSW5mbyonICYmIGVsZW0gJ3dyaXRlX29ubHlfcmVxX291dGVyJywgQGEpCisJCXsKKwkJ CXByaW50ICRvZmYgIlx0aWYgKG5vZGUtPiRmKVxuIi4KKwkJCSAgIlx0XHRvdXRCaXRtYXBz ZXQoc3RyLCBub2RlLT4kZi0+cHBpX3JlcV9vdXRlcik7XG4iLgorCQkJICAiXHRlbHNlXG4i LgorCQkJICAiXHRcdG91dEJpdG1hcHNldChzdHIsIE5VTEwpO1xuIjsKKwkJfQorCQkjIG5v ZGUgdHlwZQorCQllbHNpZiAoJHQgPX4gLyhcdyspXCovIGFuZCBlbGVtICQxLCBAbm9kZV90 eXBlcykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9OT0RFX0ZJRUxEKCRmKTtcbiI7 CisJCQlwcmludCAkcmZmICJcdFJFQURfTk9ERV9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9f cmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ3N0cnVjdCBDdXN0b21QYXRoTWV0aG9kcyon IHx8CSR0IGVxICdzdHJ1Y3QgQ3VzdG9tU2Nhbk1ldGhvZHMqJykKKwkJeworCQkJcHJpbnQg JG9mZiBxeworCS8qIEN1c3RvbU5hbWUgaXMgYSBrZXkgdG8gbG9va3VwIEN1c3RvbVNjYW5N ZXRob2RzICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsICIgOm1ldGhvZHMgIik7 CisJb3V0VG9rZW4oc3RyLCBub2RlLT5tZXRob2RzLT5DdXN0b21OYW1lKTsKK307CisJCQlw cmludCAkcmZmIHEhCisJeworCQkvKiBMb29rdXAgQ3VzdG9tU2Nhbk1ldGhvZHMgYnkgQ3Vz dG9tTmFtZSAqLworCQljaGFyCSAgICpjdXN0b21fbmFtZTsKKwkJY29uc3QgQ3VzdG9tU2Nh bk1ldGhvZHMgKm1ldGhvZHM7CisJCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOyAvKiBz a2lwIG1ldGhvZHM6ICovCisJCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOyAvKiBDdXN0 b21OYW1lICovCisJCWN1c3RvbV9uYW1lID0gbnVsbGFibGVfc3RyaW5nKHRva2VuLCBsZW5n dGgpOworCQltZXRob2RzID0gR2V0Q3VzdG9tU2Nhbk1ldGhvZHMoY3VzdG9tX25hbWUsIGZh bHNlKTsKKwkJbG9jYWxfbm9kZS0+bWV0aG9kcyA9IG1ldGhvZHM7CisJfQorISB1bmxlc3Mg JG5vX3JlYWQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlkaWUgImNvdWxkIG5vdCBoYW5kbGUg dHlwZSBcIiR0XCIgaW4gc3RydWN0IFwiJG5cIiBmaWVsZCBcIiRmXCIiOworCQl9CisJfQor CisJcHJpbnQgJG9mZiAifQorIjsKKwlwcmludCAkcmZmICIKK1x0UkVBRF9ET05FKCk7Cit9 CisiIHVubGVzcyAkbm9fcmVhZDsKK30KKworY2xvc2UgJG9mZjsKK2Nsb3NlICRyZmY7Citj bG9zZSAkb2ZzOworY2xvc2UgJHJmczsKKworCisjIG5vdyByZW5hbWUgdGhlIHRlbXBvcmFy eSBmaWxlcyB0byB0aGVpciBmaW5hbCBuYW1lCitmb3JlYWNoIG15ICRmaWxlIChxdyhub2Rl dGFncy5oIGNvcHlmdW5jcy5mdW5jcy5jIGNvcHlmdW5jcy5zd2l0Y2guYyBlcXVhbGZ1bmNz LmZ1bmNzLmMgZXF1YWxmdW5jcy5zd2l0Y2guYyBvdXRmdW5jcy5mdW5jcy5jIG91dGZ1bmNz LnN3aXRjaC5jIHJlYWRmdW5jcy5mdW5jcy5jIHJlYWRmdW5jcy5zd2l0Y2guYykpCit7CisJ Q2F0YWxvZzo6UmVuYW1lVGVtcEZpbGUoJGZpbGUsICR0bXBleHQpOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMKaW5kZXggNDMxNWM1MzA4MC4uMzc1MDhhZjk0ZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRm dW5jcy5jCkBAIC0zMSwxMSArMzEsMTAgQEAKIAogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZv LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCi0jaW5jbHVkZSAibm9kZXMvZXh0ZW5zaWJs ZS5oIgotI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgotI2luY2x1ZGUgIm5vZGVzL3Bs YW5ub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgorI2luY2x1ZGUgIm5v ZGVzL25vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUgInV0 aWxzL2RhdHVtLmgiCi0jaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIHN0YXRpYyB2b2lkIG91 dENoYXIoU3RyaW5nSW5mbyBzdHIsIGNoYXIgYyk7CiAKQEAgLTMwNiw2ICszMDUsOSBAQCBv dXREYXR1bShTdHJpbmdJbmZvIHN0ciwgRGF0dW0gdmFsdWUsIGludCB0eXBsZW4sIGJvb2wg dHlwYnl2YWwpCiB9CiAKIAorI2luY2x1ZGUgIm91dGZ1bmNzLmZ1bmNzLmMiCisKKyNpZmRl ZiBPQlNPTEVURQogLyoKICAqCVN0dWZmIGZyb20gcGxhbm5vZGVzLmgKICAqLwpAQCAtMTE1 NSw2ICsxMTU3LDcgQEAgX291dFZhcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgVmFyICpub2Rl KQogCVdSSVRFX0lOVF9GSUVMRCh2YXJhdHRub3N5bik7CiAJV1JJVEVfTE9DQVRJT05fRklF TEQobG9jYXRpb24pOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgdm9pZAog X291dENvbnN0KFN0cmluZ0luZm8gc3RyLCBjb25zdCBDb25zdCAqbm9kZSkKQEAgLTExNzYs NiArMTE3OSw3IEBAIF9vdXRDb25zdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQ29uc3QgKm5v ZGUpCiAJCW91dERhdHVtKHN0ciwgbm9kZS0+Y29uc3R2YWx1ZSwgbm9kZS0+Y29uc3RsZW4s IG5vZGUtPmNvbnN0Ynl2YWwpOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lk CiBfb3V0UGFyYW0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBhcmFtICpub2RlKQogewpAQCAt MTM0Niw2ICsxMzUwLDcgQEAgX291dFNjYWxhckFycmF5T3BFeHByKFN0cmluZ0luZm8gc3Ry LCBjb25zdCBTY2FsYXJBcnJheU9wRXhwciAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGFy Z3MpOwogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KKyNlbmRpZiAvKk9C U09MRVRFKi8KIAogc3RhdGljIHZvaWQKIF9vdXRCb29sRXhwcihTdHJpbmdJbmZvIHN0ciwg Y29uc3QgQm9vbEV4cHIgKm5vZGUpCkBAIC0xMzc0LDYgKzEzNzksNyBAQCBfb3V0Qm9vbEV4 cHIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEJvb2xFeHByICpub2RlKQogCVdSSVRFX0xPQ0FU SU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgdm9p ZAogX291dFN1YkxpbmsoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFN1YkxpbmsgKm5vZGUpCiB7 CkBAIC0yNTg2LDYgKzI1OTIsNyBAQCBfb3V0SW5kZXhPcHRJbmZvKFN0cmluZ0luZm8gc3Ry LCBjb25zdCBJbmRleE9wdEluZm8gKm5vZGUpCiAJV1JJVEVfQk9PTF9GSUVMRChoeXBvdGhl dGljYWwpOwogCS8qIHdlIGRvbid0IGJvdGhlciB3aXRoIGZpZWxkcyBjb3BpZWQgZnJvbSB0 aGUgaW5kZXggQU0ncyBBUEkgc3RydWN0ICovCiB9CisjZW5kaWYgLyogT0JTT0xFVEUgKi8K IAogc3RhdGljIHZvaWQKIF9vdXRGb3JlaWduS2V5T3B0SW5mbyhTdHJpbmdJbmZvIHN0ciwg Y29uc3QgRm9yZWlnbktleU9wdEluZm8gKm5vZGUpCkBAIC0yNjEzLDYgKzI2MjAsNyBAQCBf b3V0Rm9yZWlnbktleU9wdEluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEZvcmVpZ25LZXlP cHRJbmZvICpub2RlKQogCQlhcHBlbmRTdHJpbmdJbmZvKHN0ciwgIiAlZCIsIGxpc3RfbGVu Z3RoKG5vZGUtPnJpbmZvc1tpXSkpOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2 b2lkCiBfb3V0U3RhdGlzdGljRXh0SW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgU3RhdGlz dGljRXh0SW5mbyAqbm9kZSkKIHsKQEAgLTI2MjQsNiArMjYzMiw3IEBAIF9vdXRTdGF0aXN0 aWNFeHRJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBTdGF0aXN0aWNFeHRJbmZvICpub2Rl KQogCVdSSVRFX0NIQVJfRklFTEQoa2luZCk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGtl eXMpOwogfQorI2VuZGlmIC8qIE9CU09MRVRFICovCiAKIHN0YXRpYyB2b2lkCiBfb3V0RXF1 aXZhbGVuY2VDbGFzcyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgRXF1aXZhbGVuY2VDbGFzcyAq bm9kZSkKQEAgLTI2NTIsNiArMjY2MSw3IEBAIF9vdXRFcXVpdmFsZW5jZUNsYXNzKFN0cmlu Z0luZm8gc3RyLCBjb25zdCBFcXVpdmFsZW5jZUNsYXNzICpub2RlKQogCVdSSVRFX1VJTlRf RklFTEQoZWNfbWF4X3NlY3VyaXR5KTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMg dm9pZAogX291dEVxdWl2YWxlbmNlTWVtYmVyKFN0cmluZ0luZm8gc3RyLCBjb25zdCBFcXVp dmFsZW5jZU1lbWJlciAqbm9kZSkKIHsKQEAgLTI4MzYsNiArMjg0Niw3IEBAIF9vdXRQbGFu bmVyUGFyYW1JdGVtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQbGFubmVyUGFyYW1JdGVtICpu b2RlKQogCVdSSVRFX05PREVfRklFTEQoaXRlbSk7CiAJV1JJVEVfSU5UX0ZJRUxEKHBhcmFt SWQpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKICAqCkBAIC0yODU4LDYgKzI4NjksNyBAQCBfb3V0RXh0ZW5zaWJsZU5vZGUoU3RyaW5n SW5mbyBzdHIsIGNvbnN0IEV4dGVuc2libGVOb2RlICpub2RlKQogCW1ldGhvZHMtPm5vZGVP dXQoc3RyLCBub2RlKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKICAqCiAgKglTdHVmZiBmcm9tIHBhcnNlbm9kZXMuaC4KQEAgLTMxOTEsNiAr MzIwMyw3IEBAIF9vdXRTdGF0c0VsZW0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFN0YXRzRWxl bSAqbm9kZSkKIAlXUklURV9TVFJJTkdfRklFTEQobmFtZSk7CiAJV1JJVEVfTk9ERV9GSUVM RChleHByKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZvaWQKIF9vdXRR dWVyeShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUXVlcnkgKm5vZGUpCkBAIC0zMjY1LDYgKzMy NzgsNyBAQCBfb3V0UXVlcnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFF1ZXJ5ICpub2RlKQog CVdSSVRFX0lOVF9GSUVMRChzdG10X2xlbik7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3Rh dGljIHZvaWQKIF9vdXRXaXRoQ2hlY2tPcHRpb24oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdp dGhDaGVja09wdGlvbiAqbm9kZSkKIHsKQEAgLTM0MzAsNiArMzQ0NCw3IEBAIF9vdXRTZXRP cGVyYXRpb25TdG10KFN0cmluZ0luZm8gc3RyLCBjb25zdCBTZXRPcGVyYXRpb25TdG10ICpu b2RlKQogCVdSSVRFX05PREVfRklFTEQoY29sQ29sbGF0aW9ucyk7CiAJV1JJVEVfTk9ERV9G SUVMRChncm91cENsYXVzZXMpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMg dm9pZAogX291dFJhbmdlVGJsRW50cnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFJhbmdlVGJs RW50cnkgKm5vZGUpCkBAIC0zNTEwLDYgKzM1MjUsNyBAQCBfb3V0UmFuZ2VUYmxFbnRyeShT dHJpbmdJbmZvIHN0ciwgY29uc3QgUmFuZ2VUYmxFbnRyeSAqbm9kZSkKIAlXUklURV9OT0RF X0ZJRUxEKHNlY3VyaXR5UXVhbHMpOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2 b2lkCiBfb3V0UmFuZ2VUYmxGdW5jdGlvbihTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmFuZ2VU YmxGdW5jdGlvbiAqbm9kZSkKIHsKQEAgLTM1MzMsNiArMzU0OSw3IEBAIF9vdXRUYWJsZVNh bXBsZUNsYXVzZShTdHJpbmdJbmZvIHN0ciwgY29uc3QgVGFibGVTYW1wbGVDbGF1c2UgKm5v ZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChhcmdzKTsKIAlXUklURV9OT0RFX0ZJRUxEKHJlcGVh dGFibGUpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgdm9pZAogX291dEFf RXhwcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgQV9FeHByICpub2RlKQpAQCAtMzY1MSw2ICsz NjY4LDcgQEAgX291dEJpdFN0cmluZyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgQml0U3RyaW5n ICpub2RlKQogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCBub2RlLT5ic3ZhbCk7CiB9 CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIHZvaWQKIF9vdXRDb2x1bW5SZWYoU3RyaW5n SW5mbyBzdHIsIGNvbnN0IENvbHVtblJlZiAqbm9kZSkKIHsKQEAgLTM2ODIsNiArMzcwMCw3 IEBAIF9vdXRSYXdTdG10KFN0cmluZ0luZm8gc3RyLCBjb25zdCBSYXdTdG10ICpub2RlKQog CVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKHN0bXRfbG9jYXRpb24pOwogCVdSSVRFX0lOVF9GSUVM RChzdG10X2xlbik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyB2b2lkCiBf b3V0QV9Db25zdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQV9Db25zdCAqbm9kZSkKQEAgLTM2 OTgsNiArMzcxNyw3IEBAIF9vdXRBX0NvbnN0KFN0cmluZ0luZm8gc3RyLCBjb25zdCBBX0Nv bnN0ICpub2RlKQogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KIAorI2lm ZGVmIE9CU09MRVRFCiBzdGF0aWMgdm9pZAogX291dEFfU3RhcihTdHJpbmdJbmZvIHN0ciwg Y29uc3QgQV9TdGFyICpub2RlKQogewpAQCAtMzg0Miw2ICszODYyLDcgQEAgX291dFJhbmdl VGFibGVGdW5jQ29sKFN0cmluZ0luZm8gc3RyLCBjb25zdCBSYW5nZVRhYmxlRnVuY0NvbCAq bm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGNvbGRlZmV4cHIpOwogCVdSSVRFX0xPQ0FUSU9O X0ZJRUxEKGxvY2F0aW9uKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZv aWQKIF9vdXRDb25zdHJhaW50KFN0cmluZ0luZm8gc3RyLCBjb25zdCBDb25zdHJhaW50ICpu b2RlKQpAQCAtMzk2NCw2ICszOTg1LDcgQEAgX291dENvbnN0cmFpbnQoU3RyaW5nSW5mbyBz dHIsIGNvbnN0IENvbnN0cmFpbnQgKm5vZGUpCiAJfQogfQogCisjaWZkZWYgT0JTT0xFVEUK IHN0YXRpYyB2b2lkCiBfb3V0Rm9yZWlnbktleUNhY2hlSW5mbyhTdHJpbmdJbmZvIHN0ciwg Y29uc3QgRm9yZWlnbktleUNhY2hlSW5mbyAqbm9kZSkKIHsKQEAgLTQwMjQsNiArNDA0Niw3 IEBAIF9vdXRQYXJ0aXRpb25SYW5nZURhdHVtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQYXJ0 aXRpb25SYW5nZURhdHVtICpub2RlKQogCVdSSVRFX05PREVfRklFTEQodmFsdWUpOwogCVdS SVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8K IAogLyoKICAqIG91dE5vZGUgLQpAQCAtNDA1NSw2ICs0MDc4LDggQEAgb3V0Tm9kZShTdHJp bmdJbmZvIHN0ciwgY29uc3Qgdm9pZCAqb2JqKQogCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihz dHIsICd7Jyk7CiAJCXN3aXRjaCAobm9kZVRhZyhvYmopKQogCQl7CisjaW5jbHVkZSAib3V0 ZnVuY3Muc3dpdGNoLmMiCisjaWZkZWYgT0JTT0xFVEUKIAkJCWNhc2UgVF9QbGFubmVkU3Rt dDoKIAkJCQlfb3V0UGxhbm5lZFN0bXQoc3RyLCBvYmopOwogCQkJCWJyZWFrOwpAQCAtNDc2 Niw2ICs0NzkxLDcgQEAgb3V0Tm9kZShTdHJpbmdJbmZvIHN0ciwgY29uc3Qgdm9pZCAqb2Jq KQogCQkJY2FzZSBUX0pzb25UYWJsZVNpYmxpbmc6CiAJCQkJX291dEpzb25UYWJsZVNpYmxp bmcoc3RyLCBvYmopOwogCQkJCWJyZWFrOworI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAJCQlk ZWZhdWx0OgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyBi L3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IDZhMDViNjk0MTUuLmY0Mjdh YTA1ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCisrKyBi L3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC0zMyw5ICszMyw3IEBACiAjaW5j bHVkZSA8bWF0aC5oPgogCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCi0jaW5jbHVkZSAibm9k ZXMvZXh0ZW5zaWJsZS5oIgotI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKLSNpbmNs dWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIK ICNpbmNsdWRlICJub2Rlcy9yZWFkZnVuY3MuaCIKIAogCkBAIC0yMzgsNiArMjM2LDggQEAg cmVhZEJpdG1hcHNldCh2b2lkKQogCXJldHVybiBfcmVhZEJpdG1hcHNldCgpOwogfQogCisj aW5jbHVkZSAicmVhZGZ1bmNzLmZ1bmNzLmMiCisKIC8qCiAgKiBfcmVhZFF1ZXJ5CiAgKi8K QEAgLTI5MSw2ICsyOTEsNyBAQCBfcmVhZFF1ZXJ5KHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9 CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIF9yZWFkTm90aWZ5U3RtdAogICovCkBAIC02 MjksNiArNjMwLDcgQEAgX3JlYWRWYXIodm9pZCkKIAogCVJFQURfRE9ORSgpOwogfQorI2Vu ZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogX3JlYWRDb25zdApAQCAtNjU1LDYgKzY1Nyw3 IEBAIF9yZWFkQ29uc3Qodm9pZCkKIAlSRUFEX0RPTkUoKTsKIH0KIAorI2lmZGVmIE9CU09M RVRFCiAvKgogICogX3JlYWRQYXJhbQogICovCkBAIC04ODAsNiArODgzLDcgQEAgX3JlYWRT Y2FsYXJBcnJheU9wRXhwcih2b2lkKQogCiAJUkVBRF9ET05FKCk7CiB9CisjZW5kaWYgLypP QlNPTEVURSovCiAKIC8qCiAgKiBfcmVhZEJvb2xFeHByCkBAIC05MDcsNiArOTExLDcgQEAg X3JlYWRCb29sRXhwcih2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisjaWZkZWYgT0JTT0xF VEUKIC8qCiAgKiBfcmVhZFN1YkxpbmsKICAqLwpAQCAtMTY0OSw2ICsxNjU0LDcgQEAgX3Jl YWRBcHBlbmRSZWxJbmZvKHZvaWQpCiAvKgogICoJU3R1ZmYgZnJvbSBwYXJzZW5vZGVzLmgu CiAgKi8KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogLyoKICAqIF9yZWFkUmFuZ2VUYmxFbnRy eQpAQCAtMTc0NCw2ICsxNzUwLDcgQEAgX3JlYWRSYW5nZVRibEVudHJ5KHZvaWQpCiAJUkVB RF9ET05FKCk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIF9yZWFkUmFuZ2VUYmxG dW5jdGlvbgogICovCkBAIC0yODcyLDYgKzI4NzksNyBAQCBfcmVhZEFsdGVybmF0aXZlU3Vi UGxhbih2b2lkKQogCiAJUkVBRF9ET05FKCk7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAK IC8qCiAgKiBfcmVhZEV4dGVuc2libGVOb2RlCkBAIC0yOTAzLDYgKzI5MTEsNyBAQCBfcmVh ZEV4dGVuc2libGVOb2RlKHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9CiAKKyNpZmRlZiBPQlNP TEVURQogLyoKICAqIF9yZWFkUGFydGl0aW9uQm91bmRTcGVjCiAgKi8KQEAgLTI5MzcsNiAr Mjk0Niw3IEBAIF9yZWFkUGFydGl0aW9uUmFuZ2VEYXR1bSh2b2lkKQogCiAJUkVBRF9ET05F KCk7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBwYXJzZU5vZGVTdHJpbmcK QEAgLTI5NjEsNyArMjk3MSwxMSBAQCBwYXJzZU5vZGVTdHJpbmcodm9pZCkKICNkZWZpbmUg TUFUQ0godG9rbmFtZSwgbmFtZWxlbikgXAogCShsZW5ndGggPT0gbmFtZWxlbiAmJiBtZW1j bXAodG9rZW4sIHRva25hbWUsIG5hbWVsZW4pID09IDApCiAKLQlpZiAoTUFUQ0goIlFVRVJZ IiwgNSkpCisJaWYgKGZhbHNlKQorCQk7CisjaW5jbHVkZSAicmVhZGZ1bmNzLnN3aXRjaC5j IgorI2lmZGVmIE9CU09MRVRFCisJZWxzZSBpZiAoTUFUQ0goIlFVRVJZIiwgNSkpCiAJCXJl dHVybl92YWx1ZSA9IF9yZWFkUXVlcnkoKTsKIAllbHNlIGlmIChNQVRDSCgiV0lUSENIRUNL T1BUSU9OIiwgMTUpKQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZFdpdGhDaGVja09wdGlvbigp OwpAQCAtMzIzNSw2ICszMjQ5LDcgQEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQpCiAJCXJldHVy bl92YWx1ZSA9IF9yZWFkSnNvblRhYmxlUGFyZW50KCk7CiAJZWxzZSBpZiAoTUFUQ0goIkpT T05UQUJMRVNJQkxJTkciLCAxNikpCiAJCXJldHVybl92YWx1ZSA9IF9yZWFkSnNvblRhYmxl U2libGluZygpOworI2VuZGlmIC8qT0JTT0xFVEUqLwogCWVsc2UKIAl7CiAJCWVsb2coRVJS T1IsICJiYWRseSBmb3JtYXR0ZWQgbm9kZSBzdHJpbmcgXCIlLjMyc1wiLi4uIiwgdG9rZW4p OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvTWFrZWZpbGUgYi9zcmMvaW5jbHVkZS9NYWtl ZmlsZQppbmRleCA1ZjI1N2E5NThjLi4xN2NmZDI2OGI4IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9NYWtlZmlsZQorKysgYi9zcmMvaW5jbHVkZS9NYWtlZmlsZQpAQCAtODEsNiArODEs NyBAQCBjbGVhbjoKIAlybSAtZiBwYXJzZXIvZ3JhbS5oIHN0b3JhZ2UvbHdsb2NrbmFtZXMu aCB1dGlscy9wcm9iZXMuaAogCXJtIC1mIGNhdGFsb2cvc2NoZW1hcGcuaCBjYXRhbG9nL3N5 c3RlbV9ma19pbmZvLmgKIAlybSAtZiBjYXRhbG9nL3BnXypfZC5oIGNhdGFsb2cvaGVhZGVy LXN0YW1wCisJcm0gLWYgbm9kZXMvbm9kZXRhZ3MuaCBub2Rlcy9oZWFkZXItc3RhbXAKIAog ZGlzdGNsZWFuIG1haW50YWluZXItY2xlYW46IGNsZWFuCiAJcm0gLWYgcGdfY29uZmlnLmgg cGdfY29uZmlnX2V4dC5oIHBnX2NvbmZpZ19vcy5oIHN0YW1wLWggc3RhbXAtZXh0LWgKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmggYi9zcmMvaW5jbHVk ZS9leGVjdXRvci90dXB0YWJsZS5oCmluZGV4IDYzMDZiYjZmYzYuLjM3YzExNTIyZWUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaApAQCAtMjM1LDE0ICsyMzUsMTQgQEAgZXh0ZXJu IFBHRExMSU1QT1JUIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzIFRUU09wc0J1ZmZlckhlYXBU dXBsZTsKICAqIFR1cGxlIHRhYmxlIHNsb3QgaW1wbGVtZW50YXRpb25zLgogICovCiAKLXR5 cGVkZWYgc3RydWN0IFZpcnR1YWxUdXBsZVRhYmxlU2xvdAordHlwZWRlZiBzdHJ1Y3QgVmly dHVhbFR1cGxlVGFibGVTbG90IHBnX25vZGVfYXR0cihhYnN0cmFjdCkKIHsKIAlUdXBsZVRh YmxlU2xvdCBiYXNlOwogCiAJY2hhcgkgICAqZGF0YTsJCQkvKiBkYXRhIGZvciBtYXRlcmlh bGl6ZWQgc2xvdHMgKi8KIH0gVmlydHVhbFR1cGxlVGFibGVTbG90OwogCi10eXBlZGVmIHN0 cnVjdCBIZWFwVHVwbGVUYWJsZVNsb3QKK3R5cGVkZWYgc3RydWN0IEhlYXBUdXBsZVRhYmxl U2xvdCBwZ19ub2RlX2F0dHIoYWJzdHJhY3QpCiB7CiAJVHVwbGVUYWJsZVNsb3QgYmFzZTsK IApAQCAtMjU0LDcgKzI1NCw3IEBAIHR5cGVkZWYgc3RydWN0IEhlYXBUdXBsZVRhYmxlU2xv dAogfSBIZWFwVHVwbGVUYWJsZVNsb3Q7CiAKIC8qIGhlYXAgdHVwbGUgcmVzaWRpbmcgaW4g YSBidWZmZXIgKi8KLXR5cGVkZWYgc3RydWN0IEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdAor dHlwZWRlZiBzdHJ1Y3QgQnVmZmVySGVhcFR1cGxlVGFibGVTbG90IHBnX25vZGVfYXR0cihh YnN0cmFjdCkKIHsKIAlIZWFwVHVwbGVUYWJsZVNsb3QgYmFzZTsKIApAQCAtMjY3LDcgKzI2 Nyw3IEBAIHR5cGVkZWYgc3RydWN0IEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdAogCUJ1ZmZl cgkJYnVmZmVyOwkJCS8qIHR1cGxlJ3MgYnVmZmVyLCBvciBJbnZhbGlkQnVmZmVyICovCiB9 IEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdDsKIAotdHlwZWRlZiBzdHJ1Y3QgTWluaW1hbFR1 cGxlVGFibGVTbG90Cit0eXBlZGVmIHN0cnVjdCBNaW5pbWFsVHVwbGVUYWJsZVNsb3QgcGdf bm9kZV9hdHRyKGFic3RyYWN0KQogewogCVR1cGxlVGFibGVTbG90IGJhc2U7CiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzLy5naXRpZ25vcmUgYi9zcmMvaW5jbHVkZS9ub2Rl cy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk5 ZmIxZDM3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy8uZ2l0aWdu b3JlCkBAIC0wLDAgKzEsMiBAQAorL25vZGV0YWdzLmgKKy9oZWFkZXItc3RhbXAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4dGVuc2libGUuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL2V4dGVuc2libGUuaAppbmRleCA2MjQ0YzhkOTYxLi5mYWI1YmY2OTBiIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leHRlbnNpYmxlLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvZXh0ZW5zaWJsZS5oCkBAIC0yOSw3ICsyOSw3IEBACiAgKiBzcGVjaWZpYyB0eXBl IG9mIG5vZGUuICBleHRub2RlbmFtZSBjYW4gYmUgbG9va2VkIHVwIHRvIGZpbmQgdGhlCiAg KiBFeHRlbnNpYmxlTm9kZU1ldGhvZHMgZm9yIHRoaXMgbm9kZSB0eXBlLgogICovCi10eXBl ZGVmIHN0cnVjdCBFeHRlbnNpYmxlTm9kZQordHlwZWRlZiBzdHJ1Y3QgRXh0ZW5zaWJsZU5v ZGUgcGdfbm9kZV9hdHRyKGN1c3RvbV9jb3B5X2VxdWFsLCBjdXN0b21fcmVhZF93cml0ZSkK IHsKIAlOb2RlVGFnCQl0eXBlOwogCWNvbnN0IGNoYXIgKmV4dG5vZGVuYW1lOwkvKiBpZGVu dGlmaWVyIG9mIEV4dGVuc2libGVOb2RlTWV0aG9kcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXgg N2NlMWZjNGRlYi4uZDc3YWFkNjQ3MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv bm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC0yNyw2ICsyNyw4 IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiB7CiAJVF9JbnZhbGlkID0gMCwKIAorI2luY2x1 ZGUgIm5vZGVzL25vZGV0YWdzLmgiCisjaWZkZWYgT0JTT0xFVEUKIAkvKgogCSAqIFRBR1Mg Rk9SIEVYRUNVVE9SIE5PREVTIChleGVjbm9kZXMuaCkKIAkgKi8KQEAgLTU2Myw4ICs1NjUs NTggQEAgdHlwZWRlZiBlbnVtIE5vZGVUYWcKIAlUX1N1cHBvcnRSZXF1ZXN0Um93cywJCS8q IGluIG5vZGVzL3N1cHBvcnRub2Rlcy5oICovCiAJVF9TdXBwb3J0UmVxdWVzdEluZGV4Q29u ZGl0aW9uLCAvKiBpbiBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLwogCVRfU3VwcG9ydFJlcXVl c3RXRnVuY01vbm90b25pYwkvKiBpbiBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLworI2VuZGlm IC8qT0JTT0xFVEUqLwogfSBOb2RlVGFnOwogCisvKgorICogcGdfbm9kZV9hdHRyKCkgLSBV c2VkIGluIG5vZGUgZGVmaW5pdGlvbnMgdG8gc2V0IGV4dHJhIGluZm9ybWF0aW9uIGZvcgor ICogZ2VuX25vZGVfc3VwcG9ydC5wbAorICoKKyAqIEF0dHJpYnV0ZXMgY2FuIGJlIGF0dGFj aGVkIHRvIGEgbm9kZSBhcyBhIHdob2xlICh0aGUgYXR0cmlidXRlCisgKiBzcGVjaWZpY2F0 aW9uIG11c3QgYmUgb24gdGhlIHNhbWUgbGluZSBhcyAic3RydWN0Iikgb3IgdG8gYSBzcGVj aWZpYyBmaWVsZAorICogKG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSkuICBUaGUg YXJndW1lbnQgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdAorICogb2YgYXR0cmlidXRlcy4g IFVucmVjb2duaXplZCBhdHRyaWJ1dGVzIGNhdXNlIGFuIGVycm9yLgorICoKKyAqIFZhbGlk IG5vZGUgYXR0cmlidXRlczoKKyAqCisgKiAtIGFic3RyYWN0OiBBYnN0cmFjdCB0eXBlcyBh cmUgdHlwZXMgdGhhdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGJ1dCB0aGF0CisgKiAgIGNh biBiZSBzdXBlcnR5cGVzIG9mIG90aGVyIHR5cGVzLiAgV2UgdHJhY2sgdGhlaXIgZmllbGRz LCBzbyB0aGF0CisgKiAgIHN1YnR5cGVzIGNhbiB1c2UgdGhlbSwgYnV0IHdlIGRvbid0IGVt aXQgYSBub2RlIHRhZywgc28geW91IGNhbid0CisgKiAgIGluc3RhbnRpYXRlIHRoZW0uCisg KgorICogLSBjdXN0b21fY29weV9lcXVhbDogSGFzIGN1c3RvbSBpbXBsZW1lbnRhdGlvbnMg aW4gY29weWZ1bmNzLmMgYW5kCisgKiAgIGVxdWFsZnVuY3MuYy4KKyAqCisgKiAtIGN1c3Rv bV9yZWFkX3dyaXRlOiBIYXMgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBpbiBvdXRmdW5jcy5j IGFuZAorICogICByZWFkZnVuY3MuYy4KKyAqCisgKiAtIG5vX2NvcHlfZXF1YWw6IERvZXMg bm90IHN1cHBvcnQgY29weU9iamVjdCgpIGFuZCBlcXVhbCgpIGF0IGFsbC4KKyAqCisgKiAt IG5vX3JlYWQ6IERvZXMgbm90IHN1cHBvcnQgbm9kZVJlYWQoKSBhdCBhbGwuCisgKgorICog LSBzcGVjaWFsX3JlYWRfd3JpdGU6IEhhcyBzcGVjaWFsIHRyZWF0bWVudCBpbiBvdXROb2Rl KCkgYW5kIG5vZGVSZWFkKCkuCisgKgorICogVmFsaWQgbm9kZSBmaWVsZCBhdHRyaWJ1dGVz OgorICoKKyAqIC0gYXJyYXlfc2l6ZShPVEhFUkZJRUxEKTogVGhpcyBmaWVsZCBpcyBhIGR5 bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSB3aXRoCisgKiAgIHNpemUgaW5kaWNhdGVkIGJ5 IHRoZSBtZW50aW9uZWQgb3RoZXIgZmllbGQuICBUaGUgb3RoZXIgZmllbGQgaXMgZWl0aGVy IGEKKyAqICAgc2NhbGFyIG9yIGEgbGlzdCwgaW4gd2hpY2ggY2FzZSB0aGUgbGVuZ3RoIG9m IHRoZSBsaXN0IGlzIHVzZWQuCisgKgorICogLSBjb3B5X2lnbm9yZTogSWdub3JlIHRoZSBm aWVsZCBmb3IgY29weS4KKyAqCisgKiAtIGVxdWFsX2lnbm9yZTogSWdub3JlIHRoZSBmaWVs ZCBmb3IgZXF1YWxpdHkuCisgKgorICogLSBlcXVhbF9pZ25vcmVfaWZfemVybzogSWdub3Jl IHRoZSBmaWVsZCBmb3IgZXF1YWxpdHkgaWYgaXQgaXMgemVyby4KKyAqICAgKE90aGVyd2lz ZSwgY29tcGFyZSBub3JtYWxseS4pCisgKgorICogLSByZWFkX3dyaXRlX2lnbm9yZTogSWdu b3JlIHRoZSBmaWVsZCBmb3IgcmVhZC93cml0ZS4KKyAqCisgKiAtIHdyaXRlX29ubHlfcmVs aWRzLCB3cml0ZV9vbmx5X25vbmRlZmF1bHRfcGF0aHRhcmdldCwgd3JpdGVfb25seV9yZXFf b3V0ZXI6CisgKiAgIFNwZWNpYWwgaGFuZGxpbmcgZm9yIFBhdGggc3RydWN0OyBzZWUgdGhl cmUuCisgKgorICovCisjZGVmaW5lIHBnX25vZGVfYXR0ciguLi4pCisKIC8qCiAgKiBUaGUg Zmlyc3QgZmllbGQgb2YgYSBub2RlIG9mIGFueSB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUg dGhlIE5vZGVUYWcuCiAgKiBIZW5jZSB0aGUgdHlwZSBvZiBhbnkgbm9kZSBjYW4gYmUgZ290 dGVuIGJ5IGNhc3RpbmcgaXQgdG8gTm9kZS4gRGVjbGFyaW5nCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmgKaW5kZXggZjkzZDg2NjU0OC4uZmIwMjZjNmIxZiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaApAQCAtMTE1LDcgKzExNSw3IEBAIHR5cGVkZWYgdWludDMyIEFjbE1vZGU7CQkJ LyogYSBiaXRtYXNrIG9mIHByaXZpbGVnZSBiaXRzICovCiAgKgkgIFBsYW5uaW5nIGNvbnZl cnRzIGEgUXVlcnkgdHJlZSBpbnRvIGEgUGxhbiB0cmVlIGhlYWRlZCBieSBhIFBsYW5uZWRT dG10CiAgKgkgIG5vZGUgLS0tIHRoZSBRdWVyeSBzdHJ1Y3R1cmUgaXMgbm90IHVzZWQgYnkg dGhlIGV4ZWN1dG9yLgogICovCi10eXBlZGVmIHN0cnVjdCBRdWVyeQordHlwZWRlZiBzdHJ1 Y3QgUXVlcnkgcGdfbm9kZV9hdHRyKGN1c3RvbV9yZWFkX3dyaXRlKQogewogCU5vZGVUYWcJ CXR5cGU7CiAKQEAgLTEyMyw4ICsxMjMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVlcnkKIAog CVF1ZXJ5U291cmNlIHF1ZXJ5U291cmNlOwkvKiB3aGVyZSBkaWQgSSBjb21lIGZyb20/ICov CiAKLQkvKiBxdWVyeSBpZGVudGlmaWVyIChjYW4gYmUgc2V0IGJ5IHBsdWdpbnMpICovCi0J dWludDY0CQlxdWVyeUlkOworCS8qCisJICogcXVlcnkgaWRlbnRpZmllciAoY2FuIGJlIHNl dCBieSBwbHVnaW5zKTsgaWdub3JlZCBmb3IgZXF1YWwsIG1pZ2h0IG5vdAorCSAqIGJlIHNl dAorCSAqLworCXVpbnQ2NAkJcXVlcnlJZCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsK IAogCWJvb2wJCWNhblNldFRhZzsJCS8qIGRvIEkgc2V0IHRoZSBjb21tYW5kIHJlc3VsdCB0 YWc/ICovCiAKQEAgLTI4Niw3ICsyODksNyBAQCB0eXBlZGVmIGVudW0gQV9FeHByX0tpbmQK IAlBRVhQUl9OT1RfQkVUV0VFTl9TWU0JCS8qIG5hbWUgbXVzdCBiZSAiTk9UIEJFVFdFRU4g U1lNTUVUUklDIiAqLwogfSBBX0V4cHJfS2luZDsKIAotdHlwZWRlZiBzdHJ1Y3QgQV9FeHBy Cit0eXBlZGVmIHN0cnVjdCBBX0V4cHIgcGdfbm9kZV9hdHRyKGN1c3RvbV9yZWFkX3dyaXRl LCBub19yZWFkKQogewogCU5vZGVUYWcJCXR5cGU7CiAJQV9FeHByX0tpbmQga2luZDsJCQkv KiBzZWUgYWJvdmUgKi8KQEAgLTI5OSw3ICszMDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBBX0V4 cHIKIC8qCiAgKiBBX0NvbnN0IC0gYSBsaXRlcmFsIGNvbnN0YW50CiAgKi8KLXR5cGVkZWYg c3RydWN0IEFfQ29uc3QKK3R5cGVkZWYgc3RydWN0IEFfQ29uc3QgcGdfbm9kZV9hdHRyKGN1 c3RvbV9jb3B5X2VxdWFsLCBjdXN0b21fcmVhZF93cml0ZSwgbm9fcmVhZCkKIHsKIAlOb2Rl VGFnCQl0eXBlOwogCkBAIC0zOTgsNyArNDAxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRnVuY0Nh bGwKICAqIFRoaXMgY2FuIGFwcGVhciB3aXRoaW4gQ29sdW1uUmVmLmZpZWxkcywgQV9JbmRp cmVjdGlvbi5pbmRpcmVjdGlvbiwgYW5kCiAgKiBSZXNUYXJnZXQuaW5kaXJlY3Rpb24gbGlz dHMuCiAgKi8KLXR5cGVkZWYgc3RydWN0IEFfU3RhcgordHlwZWRlZiBzdHJ1Y3QgQV9TdGFy IHBnX25vZGVfYXR0cihub19yZWFkKQogewogCU5vZGVUYWcJCXR5cGU7CiB9IEFfU3RhcjsK QEAgLTEwMTAsNyArMTAxMyw3IEBAIHR5cGVkZWYgZW51bSBSVEVLaW5kCiAJCQkJCQkJCSAq IHByZXNlbnQgZHVyaW5nIHBhcnNpbmcgb3IgcmV3cml0aW5nICovCiB9IFJURUtpbmQ7CiAK LXR5cGVkZWYgc3RydWN0IFJhbmdlVGJsRW50cnkKK3R5cGVkZWYgc3RydWN0IFJhbmdlVGJs RW50cnkgcGdfbm9kZV9hdHRyKGN1c3RvbV9yZWFkX3dyaXRlKQogewogCU5vZGVUYWcJCXR5 cGU7CiAKQEAgLTI2MDYsNyArMjYwOSw3IEBAIHR5cGVkZWYgZW51bSBDb25zdHJUeXBlCQkJ LyogdHlwZXMgb2YgY29uc3RyYWludHMgKi8KICNkZWZpbmUgRktDT05TVFJfTUFUQ0hfUEFS VElBTAkJJ3AnCiAjZGVmaW5lIEZLQ09OU1RSX01BVENIX1NJTVBMRQkJJ3MnCiAKLXR5cGVk ZWYgc3RydWN0IENvbnN0cmFpbnQKK3R5cGVkZWYgc3RydWN0IENvbnN0cmFpbnQgcGdfbm9k ZV9hdHRyKGN1c3RvbV9yZWFkX3dyaXRlLCBub19yZWFkKQogewogCU5vZGVUYWcJCXR5cGU7 CiAJQ29uc3RyVHlwZQljb250eXBlOwkJLyogc2VlIGFib3ZlICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oCmluZGV4IGI4OGNmYjhkYzAuLjQyMTI2MTBkNWUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oCkBAIC0zLDYgKzMsOCBAQAogICogcGF0aG5vZGVzLmgKICAqCSAgRGVmaW5pdGlv bnMgZm9yIHBsYW5uZXIncyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkg UGF0aHMuCiAgKgorICogV2UgZG9uJ3Qgc3VwcG9ydCBjb3B5aW5nIFJlbE9wdEluZm8sIElu ZGV4T3B0SW5mbywgb3IgUGF0aCBub2Rlcy4KKyAqIFRoZXJlIGFyZSBzb21lIHN1YnNpZGlh cnkgc3RydWN0cyB0aGF0IGFyZSB1c2VmdWwgdG8gY29weSwgdGhvdWdoLgogICoKICAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKQEAgLTg1LDE3ICs4NywyMCBAQCB0 eXBlZGVmIGVudW0gVXBwZXJSZWxhdGlvbktpbmQKICAqIFBsYW5uZXJHbG9iYWwgaG9sZHMg c3RhdGUgZm9yIGFuIGVudGlyZSBwbGFubmVyIGludm9jYXRpb247IHRoaXMgc3RhdGUKICAq IGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGxldmVscyBvZiBzdWItUXVlcmllcyB0aGF0IGV4aXN0 IGluIHRoZSBjb21tYW5kIGJlaW5nCiAgKiBwbGFubmVkLgorICoKKyAqIE5vdCBhbGwgZmll bGRzIGFyZSBwcmludGVkLiAgKEluIHNvbWUgY2FzZXMsIHRoZXJlIGlzIG5vIHByaW50IHN1 cHBvcnQgZm9yCisgKiB0aGUgZmllbGQgdHlwZS4pCiAgKi0tLS0tLS0tLS0KICAqLwotdHlw ZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAordHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2Jh bCBwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCkKIHsKIAlOb2RlVGFnCQl0eXBlOwogCi0J UGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtczsJLyogUGFyYW0gdmFsdWVzIHByb3ZpZGVkIHRv IHBsYW5uZXIoKSAqLworCVBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMgcGdfbm9kZV9hdHRy KHJlYWRfd3JpdGVfaWdub3JlKTsJLyogUGFyYW0gdmFsdWVzIHByb3ZpZGVkIHRvIHBsYW5u ZXIoKSAqLwogCiAJTGlzdAkgICAqc3VicGxhbnM7CQkvKiBQbGFucyBmb3IgU3ViUGxhbiBu b2RlcyAqLwogCi0JTGlzdAkgICAqc3Vicm9vdHM7CQkvKiBQbGFubmVySW5mb3MgZm9yIFN1 YlBsYW4gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJyb290cyBwZ19ub2RlX2F0dHIocmVhZF93 cml0ZV9pZ25vcmUpOwkJLyogUGxhbm5lckluZm9zIGZvciBTdWJQbGFuIG5vZGVzICovCiAK IAlCaXRtYXBzZXQgICpyZXdpbmRQbGFuSURzOwkvKiBpbmRpY2VzIG9mIHN1YnBsYW5zIHRo YXQgcmVxdWlyZSBSRVdJTkQgKi8KIApAQCAtMTI5LDcgKzEzNCw3IEBAIHR5cGVkZWYgc3Ry dWN0IFBsYW5uZXJHbG9iYWwKIAogCWNoYXIJCW1heFBhcmFsbGVsSGF6YXJkOwkvKiB3b3Jz dCBQUk9QQVJBTExFTCBoYXphcmQgbGV2ZWwgKi8KIAotCVBhcnRpdGlvbkRpcmVjdG9yeSBw YXJ0aXRpb25fZGlyZWN0b3J5OyAvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KKwlQYXJ0 aXRpb25EaXJlY3RvcnkgcGFydGl0aW9uX2RpcmVjdG9yeSBwZ19ub2RlX2F0dHIocmVhZF93 cml0ZV9pZ25vcmUpOyAvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KIH0gUGxhbm5lckds b2JhbDsKIAogLyogbWFjcm8gZm9yIGZldGNoaW5nIHRoZSBQbGFuIGFzc29jaWF0ZWQgd2l0 aCBhIFN1YlBsYW4gbm9kZSAqLwpAQCAtMTQ4LDYgKzE1Myw5IEBAIHR5cGVkZWYgc3RydWN0 IFBsYW5uZXJHbG9iYWwKICAqCiAgKiBGb3IgcmVhc29ucyBleHBsYWluZWQgaW4gb3B0aW1p emVyL29wdGltaXplci5oLCB3ZSBkZWZpbmUgdGhlIHR5cGVkZWYKICAqIGVpdGhlciBoZXJl IG9yIGluIHRoYXQgaGVhZGVyLCB3aGljaGV2ZXIgaXMgcmVhZCBmaXJzdC4KKyAqCisgKiBO b3QgYWxsIGZpZWxkcyBhcmUgcHJpbnRlZC4gIChJbiBzb21lIGNhc2VzLCB0aGVyZSBpcyBu byBwcmludCBzdXBwb3J0IGZvcgorICogdGhlIGZpZWxkIHR5cGUuKQogICotLS0tLS0tLS0t CiAgKi8KICNpZm5kZWYgSEFWRV9QTEFOTkVSSU5GT19UWVBFREVGCkBAIC0xNTUsNyArMTYz LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckluZm8gUGxhbm5lckluZm87CiAjZGVmaW5l IEhBVkVfUExBTk5FUklORk9fVFlQRURFRiAxCiAjZW5kaWYKIAotc3RydWN0IFBsYW5uZXJJ bmZvCitzdHJ1Y3QgUGxhbm5lckluZm8gcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwpCiB7 CiAJTm9kZVRhZwkJdHlwZTsKIApAQCAtMTY1LDcgKzE3Myw3IEBAIHN0cnVjdCBQbGFubmVy SW5mbwogCiAJSW5kZXgJCXF1ZXJ5X2xldmVsOwkvKiAxIGF0IHRoZSBvdXRlcm1vc3QgUXVl cnkgKi8KIAotCVBsYW5uZXJJbmZvICpwYXJlbnRfcm9vdDsJLyogTlVMTCBhdCBvdXRlcm1v c3QgUXVlcnkgKi8KKwlQbGFubmVySW5mbyAqcGFyZW50X3Jvb3QgcGdfbm9kZV9hdHRyKHJl YWRfd3JpdGVfaWdub3JlKTsJLyogTlVMTCBhdCBvdXRlcm1vc3QgUXVlcnkgKi8KIAogCS8q CiAJICogcGxhbl9wYXJhbXMgY29udGFpbnMgdGhlIGV4cHJlc3Npb25zIHRoYXQgdGhpcyBx dWVyeSBsZXZlbCBuZWVkcyB0bwpAQCAtMTgzLDE1ICsxOTEsMTUgQEAgc3RydWN0IFBsYW5u ZXJJbmZvCiAJICogZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGJhc2UgcmVsYXRpb24sIHN1 Y2ggYXMgYSBqb2luIFJURSBvciBhbgogCSAqIHVucmVmZXJlbmNlZCB2aWV3IFJURTsgb3Ig aWYgdGhlIFJlbE9wdEluZm8gaGFzbid0IGJlZW4gbWFkZSB5ZXQuCiAJICovCi0Jc3RydWN0 IFJlbE9wdEluZm8gKipzaW1wbGVfcmVsX2FycmF5OwkvKiBBbGwgMS1yZWwgUmVsT3B0SW5m b3MgKi8KLQlpbnQJCQlzaW1wbGVfcmVsX2FycmF5X3NpemU7CS8qIGFsbG9jYXRlZCBzaXpl IG9mIGFycmF5ICovCisJc3RydWN0IFJlbE9wdEluZm8gKipzaW1wbGVfcmVsX2FycmF5IHBn X25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CS8qIEFsbCAxLXJlbCBSZWxPcHRJbmZv cyAqLworCWludAkJCXNpbXBsZV9yZWxfYXJyYXlfc2l6ZSBwZ19ub2RlX2F0dHIocmVhZF93 cml0ZV9pZ25vcmUpOwkvKiBhbGxvY2F0ZWQgc2l6ZSBvZiBhcnJheSAqLwogCiAJLyoKIAkg KiBzaW1wbGVfcnRlX2FycmF5IGlzIHRoZSBzYW1lIGxlbmd0aCBhcyBzaW1wbGVfcmVsX2Fy cmF5IGFuZCBob2xkcwogCSAqIHBvaW50ZXJzIHRvIHRoZSBhc3NvY2lhdGVkIHJhbmdldGFi bGUgZW50cmllcy4gIFVzaW5nIHRoaXMgaXMgYSBzaGFkZQogCSAqIGZhc3RlciB0aGFuIHVz aW5nIHJ0X2ZldGNoKCksIG1vc3RseSBkdWUgdG8gZmV3ZXIgaW5kaXJlY3Rpb25zLgogCSAq LwotCVJhbmdlVGJsRW50cnkgKipzaW1wbGVfcnRlX2FycmF5OwkvKiByYW5nZXRhYmxlIGFz IGFuIGFycmF5ICovCisJUmFuZ2VUYmxFbnRyeSAqKnNpbXBsZV9ydGVfYXJyYXkgcGdfbm9k ZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsJLyogcmFuZ2V0YWJsZSBhcyBhbiBhcnJheSAq LwogCiAJLyoKIAkgKiBhcHBlbmRfcmVsX2FycmF5IGlzIHRoZSBzYW1lIGxlbmd0aCBhcyB0 aGUgYWJvdmUgYXJyYXlzLCBhbmQgaG9sZHMKQEAgLTE5OSw3ICsyMDcsNyBAQCBzdHJ1Y3Qg UGxhbm5lckluZm8KIAkgKiBjaGlsZF9yZWxpZCwgb3IgTlVMTCBpZiB0aGUgcmVsIGlzIG5v dCBhbiBhcHBlbmRyZWwgY2hpbGQuICBUaGUgYXJyYXkKIAkgKiBpdHNlbGYgaXMgbm90IGFs bG9jYXRlZCBpZiBhcHBlbmRfcmVsX2xpc3QgaXMgZW1wdHkuCiAJICovCi0Jc3RydWN0IEFw cGVuZFJlbEluZm8gKiphcHBlbmRfcmVsX2FycmF5OworCXN0cnVjdCBBcHBlbmRSZWxJbmZv ICoqYXBwZW5kX3JlbF9hcnJheSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwog CiAJLyoKIAkgKiBhbGxfYmFzZXJlbHMgaXMgYSBSZWxpZHMgc2V0IG9mIGFsbCBiYXNlIHJl bGlkcyAoYnV0IG5vdCAib3RoZXIiCkBAIC0yMjcsNyArMjM1LDcgQEAgc3RydWN0IFBsYW5u ZXJJbmZvCiAJICogR0VRTy4KIAkgKi8KIAlMaXN0CSAgICpqb2luX3JlbF9saXN0OwotCXN0 cnVjdCBIVEFCICpqb2luX3JlbF9oYXNoOworCXN0cnVjdCBIVEFCICpqb2luX3JlbF9oYXNo IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAKIAkvKgogCSAqIFdoZW4gZG9p bmcgYSBkeW5hbWljLXByb2dyYW1taW5nLXN0eWxlIGpvaW4gc2VhcmNoLCBqb2luX3JlbF9s ZXZlbFtrXQpAQCAtMjM2LDcgKzI0NCw3IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCSAqIGF1 dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIGpvaW5fcmVsX2xldmVsW2pvaW5fY3VyX2xldmVs XSBsaXN0LgogCSAqIGpvaW5fcmVsX2xldmVsIGlzIE5VTEwgaWYgbm90IGluIHVzZS4KIAkg Ki8KLQlMaXN0CSAgKipqb2luX3JlbF9sZXZlbDsgLyogbGlzdHMgb2Ygam9pbi1yZWxhdGlv biBSZWxPcHRJbmZvcyAqLworCUxpc3QJICAqKmpvaW5fcmVsX2xldmVsIHBnX25vZGVfYXR0 cihyZWFkX3dyaXRlX2lnbm9yZSk7IC8qIGxpc3RzIG9mIGpvaW4tcmVsYXRpb24gUmVsT3B0 SW5mb3MgKi8KIAlpbnQJCQlqb2luX2N1cl9sZXZlbDsgLyogaW5kZXggb2YgbGlzdCBiZWlu ZyBleHRlbmRlZCAqLwogCiAJTGlzdAkgICAqaW5pdF9wbGFuczsJCS8qIGluaXQgU3ViUGxh bnMgZm9yIHF1ZXJ5ICovCkBAIC0yOTksMTYgKzMwNywxNiBAQCBzdHJ1Y3QgUGxhbm5lcklu Zm8KIAlMaXN0CSAgICpkaXN0aW5jdF9wYXRoa2V5czsJLyogZGlzdGluY3RDbGF1c2UgcGF0 aGtleXMsIGlmIGFueSAqLwogCUxpc3QJICAgKnNvcnRfcGF0aGtleXM7CS8qIHNvcnRDbGF1 c2UgcGF0aGtleXMsIGlmIGFueSAqLwogCi0JTGlzdAkgICAqcGFydF9zY2hlbWVzOwkvKiBD YW5vbmljYWxpc2VkIHBhcnRpdGlvbiBzY2hlbWVzIHVzZWQgaW4gdGhlCisJTGlzdAkgICAq cGFydF9zY2hlbWVzIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CS8qIENhbm9u aWNhbGlzZWQgcGFydGl0aW9uIHNjaGVtZXMgdXNlZCBpbiB0aGUKIAkJCQkJCQkJICogcXVl cnkuICovCiAKLQlMaXN0CSAgICppbml0aWFsX3JlbHM7CS8qIFJlbE9wdEluZm9zIHdlIGFy ZSBub3cgdHJ5aW5nIHRvIGpvaW4gKi8KKwlMaXN0CSAgICppbml0aWFsX3JlbHMgcGdfbm9k ZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsJLyogUmVsT3B0SW5mb3Mgd2UgYXJlIG5vdyB0 cnlpbmcgdG8gam9pbiAqLwogCiAJLyogVXNlIGZldGNoX3VwcGVyX3JlbCgpIHRvIGdldCBh bnkgcGFydGljdWxhciB1cHBlciByZWwgKi8KLQlMaXN0CSAgICp1cHBlcl9yZWxzW1VQUEVS UkVMX0ZJTkFMICsgMV07IC8qIHVwcGVyLXJlbCBSZWxPcHRJbmZvcyAqLworCUxpc3QJICAg KnVwcGVyX3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0 ZV9pZ25vcmUpOyAvKiB1cHBlci1yZWwgUmVsT3B0SW5mb3MgKi8KIAogCS8qIFJlc3VsdCB0 bGlzdHMgY2hvc2VuIGJ5IGdyb3VwaW5nX3BsYW5uZXIgZm9yIHVwcGVyLXN0YWdlIHByb2Nl c3NpbmcgKi8KLQlzdHJ1Y3QgUGF0aFRhcmdldCAqdXBwZXJfdGFyZ2V0c1tVUFBFUlJFTF9G SU5BTCArIDFdOworCXN0cnVjdCBQYXRoVGFyZ2V0ICp1cHBlcl90YXJnZXRzW1VQUEVSUkVM X0ZJTkFMICsgMV0gcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qCiAJ ICogVGhlIGZ1bGx5LXByb2Nlc3NlZCB0YXJnZXRsaXN0IGlzIGtlcHQgaGVyZS4gIEl0IGRp ZmZlcnMgZnJvbQpAQCAtMzMzLDEyICszNDEsMTIgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJ ICogRmllbGRzIGZpbGxlZCBkdXJpbmcgY3JlYXRlX3BsYW4oKSBmb3IgdXNlIGluIHNldHJl ZnMuYwogCSAqLwogCS8qIGZvciBHcm91cGluZ0Z1bmMgZml4dXAgKi8KLQlBdHRyTnVtYmVy ICpncm91cGluZ19tYXA7CisJQXR0ck51bWJlciAqZ3JvdXBpbmdfbWFwIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKHVwZGF0ZV9jb2xub3MpLCByZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyog TGlzdCBvZiBNaW5NYXhBZ2dJbmZvcyAqLwogCUxpc3QJICAgKm1pbm1heF9hZ2dzOwogCiAJ LyogY29udGV4dCBob2xkaW5nIFBsYW5uZXJJbmZvICovCi0JTWVtb3J5Q29udGV4dCBwbGFu bmVyX2N4dDsKKwlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3h0IHBnX25vZGVfYXR0cihyZWFk X3dyaXRlX2lnbm9yZSk7CiAKIAlDYXJkaW5hbGl0eSB0b3RhbF90YWJsZV9wYWdlczsJLyog IyBvZiBwYWdlcyBpbiBhbGwgbm9uLWR1bW15IHRhYmxlcyBvZgogCQkJCQkJCQkJICogcXVl cnkgKi8KQEAgLTM2MCwxMSArMzY4LDExIEBAIHN0cnVjdCBQbGFubmVySW5mbwogCS8qCiAJ ICogSW5mb3JtYXRpb24gYWJvdXQgYWdncmVnYXRlcy4gRmlsbGVkIGJ5IHByZXByb2Nlc3Nf YWdncmVmcygpLgogCSAqLwotCUxpc3QJICAgKmFnZ2luZm9zOwkJLyogQWdnSW5mbyBzdHJ1 Y3RzICovCi0JTGlzdAkgICAqYWdndHJhbnNpbmZvczsJLyogQWdnVHJhbnNJbmZvIHN0cnVj dHMgKi8KLQlpbnQJCQludW1PcmRlcmVkQWdnczsgLyogbnVtYmVyIHcvIERJU1RJTkNUL09S REVSIEJZL1dJVEhJTiBHUk9VUCAqLwotCWJvb2wJCWhhc05vblBhcnRpYWxBZ2dzOwkvKiBk b2VzIGFueSBhZ2cgbm90IHN1cHBvcnQgcGFydGlhbCBtb2RlPyAqLwotCWJvb2wJCWhhc05v blNlcmlhbEFnZ3M7CS8qIGlzIGFueSBwYXJ0aWFsIGFnZyBub24tc2VyaWFsaXphYmxlPyAq LworCUxpc3QJICAgKmFnZ2luZm9zIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7 CQkvKiBBZ2dJbmZvIHN0cnVjdHMgKi8KKwlMaXN0CSAgICphZ2d0cmFuc2luZm9zIHBnX25v ZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CS8qIEFnZ1RyYW5zSW5mbyBzdHJ1Y3RzICov CisJaW50CQkJbnVtT3JkZXJlZEFnZ3MgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3Jl KTsgLyogbnVtYmVyIHcvIERJU1RJTkNUL09SREVSIEJZL1dJVEhJTiBHUk9VUCAqLworCWJv b2wJCWhhc05vblBhcnRpYWxBZ2dzIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7 CS8qIGRvZXMgYW55IGFnZyBub3Qgc3VwcG9ydCBwYXJ0aWFsIG1vZGU/ICovCisJYm9vbAkJ aGFzTm9uU2VyaWFsQWdncyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwkvKiBp cyBhbnkgcGFydGlhbCBhZ2cgbm9uLXNlcmlhbGl6YWJsZT8gKi8KIAogCS8qIFRoZXNlIGZp ZWxkcyBhcmUgdXNlZCBvbmx5IHdoZW4gaGFzUmVjdXJzaW9uIGlzIHRydWU6ICovCiAJaW50 CQkJd3RfcGFyYW1faWQ7CS8qIFBBUkFNX0VYRUMgSUQgZm9yIHRoZSB3b3JrIHRhYmxlICov CkBAIC0zNzgsMTEgKzM4NiwxMSBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkgKiBUaGVzZSBm aWVsZHMgYXJlIHdvcmtzcGFjZSBmb3Igc2V0cmVmcy5jLiAgRWFjaCBpcyBhbiBhcnJheQog CSAqIGNvcnJlc3BvbmRpbmcgdG8gZ2xvYi0+c3VicGxhbnMuCiAJICovCi0JYm9vbAkgICAq aXNBbHRTdWJwbGFuOwotCWJvb2wJICAgKmlzVXNlZFN1YnBsYW47CisJYm9vbAkgICAqaXNB bHRTdWJwbGFuIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CisJYm9vbAkgICAq aXNVc2VkU3VicGxhbiBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyog b3B0aW9uYWwgcHJpdmF0ZSBkYXRhIGZvciBqb2luX3NlYXJjaF9ob29rLCBlLmcuLCBHRVFP ICovCi0Jdm9pZAkgICAqam9pbl9zZWFyY2hfcHJpdmF0ZTsKKwl2b2lkCSAgICpqb2luX3Nl YXJjaF9wcml2YXRlIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAKIAkvKiBE b2VzIHRoaXMgcXVlcnkgbW9kaWZ5IGFueSBwYXJ0aXRpb24ga2V5IGNvbHVtbnM/ICovCiAJ Ym9vbAkJcGFydENvbHNVcGRhdGVkOwpAQCAtNjM5LDYgKzY0Nyw5IEBAIHR5cGVkZWYgc3Ry dWN0IFBhcnRpdGlvblNjaGVtZURhdGEgKlBhcnRpdGlvblNjaGVtZTsKICAqIEZ1cnRoZXJt b3JlLCBGVUxMIEpPSU5zIGFkZCBleHRyYSBudWxsYWJsZV9wYXJ0ZXhwcnMgZXhwcmVzc2lv bnMKICAqIGNvcnJlc3BvbmRpbmcgdG8gQ09BTEVTQ0UgZXhwcmVzc2lvbnMgb2YgdGhlIGxl ZnQgYW5kIHJpZ2h0IGpvaW4gY29sdW1ucywKICAqIHRvIHNpbXBsaWZ5IG1hdGNoaW5nIGpv aW4gY2xhdXNlcyB0byB0aG9zZSBsaXN0cy4KKyAqCisgKiBOb3QgYWxsIGZpZWxkcyBhcmUg cHJpbnRlZC4gIChJbiBzb21lIGNhc2VzLCB0aGVyZSBpcyBubyBwcmludCBzdXBwb3J0IGZv cgorICogdGhlIGZpZWxkIHR5cGUuKQogICotLS0tLS0tLS0tCiAgKi8KIApAQCAtNjgwLDcg KzY5MSw3IEBAIHR5cGVkZWYgZW51bSBSZWxPcHRLaW5kCiAJIChyZWwpLT5yZWxvcHRraW5k ID09IFJFTE9QVF9PVEhFUl9KT0lOUkVMIHx8IFwKIAkgKHJlbCktPnJlbG9wdGtpbmQgPT0g UkVMT1BUX09USEVSX1VQUEVSX1JFTCkKIAotdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwor dHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbyBwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCkK IHsKIAlOb2RlVGFnCQl0eXBlOwogCkBAIC03NDcsOSArNzU4LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgUmVsT3B0SW5mbwogCS8qIGxhcmdlc3QgYXR0cm5vIG9mIHJlbCAqLwogCUF0dHJOdW1i ZXIJbWF4X2F0dHI7CiAJLyogYXJyYXkgaW5kZXhlZCBbbWluX2F0dHIgLi4gbWF4X2F0dHJd ICovCi0JUmVsaWRzCSAgICphdHRyX25lZWRlZDsKKwlSZWxpZHMJICAgKmF0dHJfbmVlZGVk IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogYXJyYXkgaW5kZXhlZCBb bWluX2F0dHIgLi4gbWF4X2F0dHJdICovCi0JaW50MzIJICAgKmF0dHJfd2lkdGhzOworCWlu dDMyCSAgICphdHRyX3dpZHRocyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwog CS8qIExBVEVSQUwgVmFycyBhbmQgUEhWcyByZWZlcmVuY2VkIGJ5IHJlbCAqLwogCUxpc3QJ ICAgKmxhdGVyYWxfdmFyczsKIAkvKiByZWxzIHRoYXQgcmVmZXJlbmNlIG1lIGxhdGVyYWxs eSAqLwpAQCAtNzg0LDE2ICs3OTUsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwog CS8qIGpvaW4gaXMgb25seSB2YWxpZCBmb3IgY3VycmVudCB1c2VyICovCiAJYm9vbAkJdXNl cmlkaXNjdXJyZW50OwogCS8qIHVzZSAic3RydWN0IEZkd1JvdXRpbmUiIHRvIGF2b2lkIGlu Y2x1ZGluZyBmZHdhcGkuaCBoZXJlICovCi0Jc3RydWN0IEZkd1JvdXRpbmUgKmZkd3JvdXRp bmU7Ci0Jdm9pZAkgICAqZmR3X3ByaXZhdGU7CisJc3RydWN0IEZkd1JvdXRpbmUgKmZkd3Jv dXRpbmUgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKKwl2b2lkCSAgICpmZHdf cHJpdmF0ZSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyoKIAkgKiBj YWNoZSBzcGFjZSBmb3IgcmVtZW1iZXJpbmcgaWYgd2UgaGF2ZSBwcm92ZW4gdGhpcyByZWxh dGlvbiB1bmlxdWUKKwkgKgorCSAqIGNhbid0IHByaW50IHVuaXF1ZV9mb3JfcmVscy9ub25f dW5pcXVlX2Zvcl9yZWxzOyBCTVNlcyBhcmVuJ3QgTm9kZXMKIAkgKi8KIAkvKiBrbm93biB1 bmlxdWUgZm9yIHRoZXNlIG90aGVyIHJlbGlkIHNldChzKSAqLwotCUxpc3QJICAgKnVuaXF1 ZV9mb3JfcmVsczsKKwlMaXN0CSAgICp1bmlxdWVfZm9yX3JlbHMgcGdfbm9kZV9hdHRyKHJl YWRfd3JpdGVfaWdub3JlKTsKIAkvKiBrbm93biBub3QgdW5pcXVlIGZvciB0aGVzZSBzZXQo cykgKi8KLQlMaXN0CSAgICpub25fdW5pcXVlX2Zvcl9yZWxzOworCUxpc3QJICAgKm5vbl91 bmlxdWVfZm9yX3JlbHMgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8q CiAJICogdXNlZCBieSB2YXJpb3VzIHNjYW5zIGFuZCBqb2luczoKQEAgLTgyMSwyNCArODM0 LDI0IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAkgKiB1c2VkIGZvciBwYXJ0aXRp b25lZCByZWxhdGlvbnM6CiAJICovCiAJLyogUGFydGl0aW9uaW5nIHNjaGVtZSAqLwotCVBh cnRpdGlvblNjaGVtZSBwYXJ0X3NjaGVtZTsKKwlQYXJ0aXRpb25TY2hlbWUgcGFydF9zY2hl bWUgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qCiAJICogTnVtYmVy IG9mIHBhcnRpdGlvbnM7IC0xIGlmIG5vdCB5ZXQgc2V0OyBpbiBjYXNlIG9mIGEgam9pbiBy ZWxhdGlvbiAwCiAJICogbWVhbnMgaXQncyBjb25zaWRlcmVkIHVucGFydGl0aW9uZWQKIAkg Ki8KLQlpbnQJCQlucGFydHM7CisJaW50CQkJbnBhcnRzIHBnX25vZGVfYXR0cihyZWFkX3dy aXRlX2lnbm9yZSk7CiAJLyogUGFydGl0aW9uIGJvdW5kcyAqLwotCXN0cnVjdCBQYXJ0aXRp b25Cb3VuZEluZm9EYXRhICpib3VuZGluZm87CisJc3RydWN0IFBhcnRpdGlvbkJvdW5kSW5m b0RhdGEgKmJvdW5kaW5mbyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCS8q IFRydWUgaWYgcGFydGl0aW9uIGJvdW5kcyB3ZXJlIGNyZWF0ZWQgYnkgcGFydGl0aW9uX2Jv dW5kc19tZXJnZSgpICovCiAJYm9vbAkJcGFydGJvdW5kc19tZXJnZWQ7CiAJLyogUGFydGl0 aW9uIGNvbnN0cmFpbnQsIGlmIG5vdCB0aGUgcm9vdCAqLwotCUxpc3QJICAgKnBhcnRpdGlv bl9xdWFsOworCUxpc3QJICAgKnBhcnRpdGlvbl9xdWFsIHBnX25vZGVfYXR0cihyZWFkX3dy aXRlX2lnbm9yZSk7CiAKIAkvKgogCSAqIEFycmF5IG9mIFJlbE9wdEluZm9zIG9mIHBhcnRp dGlvbnMsIHN0b3JlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyBib3VuZHMKIAkgKi8KLQlzdHJ1 Y3QgUmVsT3B0SW5mbyAqKnBhcnRfcmVsczsKKwlzdHJ1Y3QgUmVsT3B0SW5mbyAqKnBhcnRf cmVscyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyoKIAkgKiBCaXRt YXAgd2l0aCBtZW1iZXJzIGFjdGluZyBhcyBpbmRleGVzIGludG8gdGhlIHBhcnRfcmVsc1td IGFycmF5IHRvCkBAIC04NDgsOSArODYxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5m bwogCS8qIFJlbGlkcyBzZXQgb2YgYWxsIHBhcnRpdGlvbiByZWxpZHMgKi8KIAlSZWxpZHMJ CWFsbF9wYXJ0cmVsczsKIAkvKiBOb24tbnVsbGFibGUgcGFydGl0aW9uIGtleSBleHByZXNz aW9ucyAqLwotCUxpc3QJICAqKnBhcnRleHByczsKKwlMaXN0CSAgKipwYXJ0ZXhwcnMgcGdf bm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiBOdWxsYWJsZSBwYXJ0aXRpb24g a2V5IGV4cHJlc3Npb25zICovCi0JTGlzdAkgICoqbnVsbGFibGVfcGFydGV4cHJzOworCUxp c3QJICAqKm51bGxhYmxlX3BhcnRleHBycyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25v cmUpOwogfSBSZWxPcHRJbmZvOwogCiAvKgpAQCAtOTA5LDcgKzkyMiw3IEBAIHR5cGVkZWYg c3RydWN0IEluZGV4T3B0SW5mbyBJbmRleE9wdEluZm87CiAjZGVmaW5lIEhBVkVfSU5ERVhP UFRJTkZPX1RZUEVERUYgMQogI2VuZGlmCiAKLXN0cnVjdCBJbmRleE9wdEluZm8KK3N0cnVj dCBJbmRleE9wdEluZm8gcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwpCiB7CiAJTm9kZVRh ZwkJdHlwZTsKIApAQCAtOTE3LDggKzkzMCw4IEBAIHN0cnVjdCBJbmRleE9wdEluZm8KIAlP aWQJCQlpbmRleG9pZDsKIAkvKiB0YWJsZXNwYWNlIG9mIGluZGV4IChub3QgdGFibGUpICov CiAJT2lkCQkJcmVsdGFibGVzcGFjZTsKLQkvKiBiYWNrLWxpbmsgdG8gaW5kZXgncyB0YWJs ZSAqLwotCVJlbE9wdEluZm8gKnJlbDsKKwkvKiBiYWNrLWxpbmsgdG8gaW5kZXgncyB0YWJs ZTsgZG9uJ3QgcHJpbnQsIGVsc2UgaW5maW5pdGUgcmVjdXJzaW9uICovCisJUmVsT3B0SW5m byAqcmVsIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAKIAkvKgogCSAqIGlu ZGV4LXNpemUgc3RhdGlzdGljcyAoZnJvbSBwZ19jbGFzcyBhbmQgZWxzZXdoZXJlKQpAQCAt OTM4LDMxICs5NTEsMzkgQEAgc3RydWN0IEluZGV4T3B0SW5mbwogCS8qIG51bWJlciBvZiBr ZXkgY29sdW1ucyBpbiBpbmRleCAqLwogCWludAkJCW5rZXljb2x1bW5zOwogCisJLyoKKwkg KiBhcnJheSBmaWVsZHMgYXJlbid0IHJlYWxseSB3b3J0aCB0aGUgdHJvdWJsZSB0byBwcmlu dAorCSAqLworCiAJLyoKIAkgKiBjb2x1bW4gbnVtYmVycyBvZiBpbmRleCdzIGF0dHJpYnV0 ZXMgYm90aCBrZXkgYW5kIGluY2x1ZGVkIGNvbHVtbnMsIG9yCiAJICogMAogCSAqLwotCWlu dAkJICAgKmluZGV4a2V5czsKKwlpbnQJCSAgICppbmRleGtleXMgcGdfbm9kZV9hdHRyKHJl YWRfd3JpdGVfaWdub3JlKTsKIAkvKiBPSURzIG9mIGNvbGxhdGlvbnMgb2YgaW5kZXggY29s dW1ucyAqLwotCU9pZAkJICAgKmluZGV4Y29sbGF0aW9uczsKKwlPaWQJCSAgICppbmRleGNv bGxhdGlvbnMgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiBPSURzIG9m IG9wZXJhdG9yIGZhbWlsaWVzIGZvciBjb2x1bW5zICovCi0JT2lkCQkgICAqb3BmYW1pbHk7 CisJT2lkCQkgICAqb3BmYW1pbHkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsK IAkvKiBPSURzIG9mIG9wY2xhc3MgZGVjbGFyZWQgaW5wdXQgZGF0YSB0eXBlcyAqLwotCU9p ZAkJICAgKm9wY2ludHlwZTsKKwlPaWQJCSAgICpvcGNpbnR5cGUgcGdfbm9kZV9hdHRyKHJl YWRfd3JpdGVfaWdub3JlKTsKIAkvKiBPSURzIG9mIGJ0cmVlIG9wZmFtaWxpZXMsIGlmIG9y ZGVyYWJsZSAqLwotCU9pZAkJICAgKnNvcnRvcGZhbWlseTsKKwlPaWQJCSAgICpzb3J0b3Bm YW1pbHkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiBpcyBzb3J0IG9y ZGVyIGRlc2NlbmRpbmc/ICovCi0JYm9vbAkgICAqcmV2ZXJzZV9zb3J0OworCWJvb2wJICAg KnJldmVyc2Vfc29ydCBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIGRv IE5VTExzIGNvbWUgZmlyc3QgaW4gdGhlIHNvcnQgb3JkZXI/ICovCi0JYm9vbAkgICAqbnVs bHNfZmlyc3Q7CisJYm9vbAkgICAqbnVsbHNfZmlyc3QgcGdfbm9kZV9hdHRyKHJlYWRfd3Jp dGVfaWdub3JlKTsKIAkvKiBvcGNsYXNzLXNwZWNpZmljIG9wdGlvbnMgZm9yIGNvbHVtbnMg Ki8KLQlieXRlYQkgICoqb3BjbGFzc29wdGlvbnM7CisJYnl0ZWEJICAqKm9wY2xhc3NvcHRp b25zIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogd2hpY2ggaW5kZXgg Y29scyBjYW4gYmUgcmV0dXJuZWQgaW4gYW4gaW5kZXgtb25seSBzY2FuPyAqLwotCWJvb2wJ ICAgKmNhbnJldHVybjsKKwlib29sCSAgICpjYW5yZXR1cm4gcGdfbm9kZV9hdHRyKHJlYWRf d3JpdGVfaWdub3JlKTsKIAkvKiBPSUQgb2YgdGhlIGFjY2VzcyBtZXRob2QgKGluIHBnX2Ft KSAqLwogCU9pZAkJCXJlbGFtOwotCS8qIGV4cHJlc3Npb25zIGZvciBub24tc2ltcGxlIGlu ZGV4IGNvbHVtbnMgKi8KLQlMaXN0CSAgICppbmRleHByczsKKworCS8qCisJICogZXhwcmVz c2lvbnMgZm9yIG5vbi1zaW1wbGUgaW5kZXggY29sdW1uczsgcmVkdW5kYW50IHRvIHByaW50 IHNpbmNlIHdlCisJICogcHJpbnQgaW5kZXh0bGlzdAorCSAqLworCUxpc3QJICAgKmluZGV4 cHJzIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogcHJlZGljYXRlIGlm IGEgcGFydGlhbCBpbmRleCwgZWxzZSBOSUwgKi8KIAlMaXN0CSAgICppbmRwcmVkOwogCkBA IC05ODksMTcgKzEwMTAsMTcgQEAgc3RydWN0IEluZGV4T3B0SW5mbwogCSAqIFJlbWFpbmlu ZyBmaWVsZHMgYXJlIGNvcGllZCBmcm9tIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QKIAkg KiAoSW5kZXhBbVJvdXRpbmUpCiAJICovCi0JYm9vbAkJYW1jYW5vcmRlcmJ5b3A7Ci0JYm9v bAkJYW1vcHRpb25hbGtleTsKLQlib29sCQlhbXNlYXJjaGFycmF5OwotCWJvb2wJCWFtc2Vh cmNobnVsbHM7CisJYm9vbAkJYW1jYW5vcmRlcmJ5b3AgcGdfbm9kZV9hdHRyKHJlYWRfd3Jp dGVfaWdub3JlKTsKKwlib29sCQlhbW9wdGlvbmFsa2V5IHBnX25vZGVfYXR0cihyZWFkX3dy aXRlX2lnbm9yZSk7CisJYm9vbAkJYW1zZWFyY2hhcnJheSBwZ19ub2RlX2F0dHIocmVhZF93 cml0ZV9pZ25vcmUpOworCWJvb2wJCWFtc2VhcmNobnVsbHMgcGdfbm9kZV9hdHRyKHJlYWRf d3JpdGVfaWdub3JlKTsKIAkvKiBkb2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRlcmZhY2U/ ICovCi0JYm9vbAkJYW1oYXNnZXR0dXBsZTsKKwlib29sCQlhbWhhc2dldHR1cGxlIHBnX25v ZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0 bWFwIGludGVyZmFjZT8gKi8KLQlib29sCQlhbWhhc2dldGJpdG1hcDsKLQlib29sCQlhbWNh bnBhcmFsbGVsOworCWJvb2wJCWFtaGFzZ2V0Yml0bWFwIHBnX25vZGVfYXR0cihyZWFkX3dy aXRlX2lnbm9yZSk7CisJYm9vbAkJYW1jYW5wYXJhbGxlbCBwZ19ub2RlX2F0dHIocmVhZF93 cml0ZV9pZ25vcmUpOwogCS8qIGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAq LwotCWJvb2wJCWFtY2FubWFya3BvczsKKwlib29sCQlhbWNhbm1hcmtwb3MgcGdfbm9kZV9h dHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiBSYXRoZXIgdGhhbiBpbmNsdWRlIGFtYXBp LmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtlIHRoaXMgKi8KIAl2b2lk CQkoKmFtY29zdGVzdGltYXRlKSAoKTsJLyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwogfTsK QEAgLTEwMTIsNyArMTAzMyw3IEBAIHN0cnVjdCBJbmRleE9wdEluZm8KICAqIElOREVYX01B WF9LRVlTIGNvbHVtbnMgaW4gYSBmb3JlaWduIGtleSBjb25zdHJhaW50LiAgRWFjaCBhcnJh eSBoYXMKICAqIG5rZXlzIHZhbGlkIGVudHJpZXMuCiAgKi8KLXR5cGVkZWYgc3RydWN0IEZv cmVpZ25LZXlPcHRJbmZvCit0eXBlZGVmIHN0cnVjdCBGb3JlaWduS2V5T3B0SW5mbyBwZ19u b2RlX2F0dHIoY3VzdG9tX3JlYWRfd3JpdGUsIG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQpCiB7 CiAJTm9kZVRhZwkJdHlwZTsKIApAQCAtMTAyNywxMSArMTA0OCwxMSBAQCB0eXBlZGVmIHN0 cnVjdCBGb3JlaWduS2V5T3B0SW5mbwogCS8qIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBm b3JlaWduIGtleSAqLwogCWludAkJCW5rZXlzOwogCS8qIGNvbHMgaW4gcmVmZXJlbmNpbmcg dGFibGUgKi8KLQlBdHRyTnVtYmVyCWNvbmtleVtJTkRFWF9NQVhfS0VZU107CisJQXR0ck51 bWJlcgljb25rZXlbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5r ZXlzKSk7CiAJLyogY29scyBpbiByZWZlcmVuY2VkIHRhYmxlICovCi0JQXR0ck51bWJlcglj b25ma2V5W0lOREVYX01BWF9LRVlTXTsKKwlBdHRyTnVtYmVyCWNvbmZrZXlbSU5ERVhfTUFY X0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5rZXlzKSk7CiAJLyogUEsgPSBGSyBv cGVyYXRvciBPSURzICovCi0JT2lkCQkJY29ucGZlcW9wW0lOREVYX01BWF9LRVlTXTsKKwlP aWQJCQljb25wZmVxb3BbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXpl KG5rZXlzKSk7CiAKIAkvKgogCSAqIERlcml2ZWQgaW5mbyBhYm91dCB3aGV0aGVyIEZLJ3Mg ZXF1YWxpdHkgY29uZGl0aW9ucyBtYXRjaCB0aGUgcXVlcnk6CkBAIC0xMDYwLDcgKzEwODEs NyBAQCB0eXBlZGVmIHN0cnVjdCBGb3JlaWduS2V5T3B0SW5mbwogICogRWFjaCBwZ19zdGF0 aXN0aWNfZXh0IHJvdyBpcyByZXByZXNlbnRlZCBieSBvbmUgb3IgbW9yZSBub2RlcyBvZiB0 aGlzCiAgKiB0eXBlLCBvciBldmVuIHplcm8gaWYgQU5BTFlaRSBoYXMgbm90IGNvbXB1dGVk IHRoZW0uCiAgKi8KLXR5cGVkZWYgc3RydWN0IFN0YXRpc3RpY0V4dEluZm8KK3R5cGVkZWYg c3RydWN0IFN0YXRpc3RpY0V4dEluZm8gcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwpCiB7 CiAJTm9kZVRhZwkJdHlwZTsKIApAQCAtMTA2OCwxMCArMTA4OSwxMyBAQCB0eXBlZGVmIHN0 cnVjdCBTdGF0aXN0aWNFeHRJbmZvCiAJT2lkCQkJc3RhdE9pZDsKIAogCS8qIGluY2x1ZGVz IGNoaWxkIHJlbGF0aW9ucyAqLwotCWJvb2wJCWluaGVyaXQ7CisJYm9vbAkJaW5oZXJpdCBw Z19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCi0JLyogYmFjay1saW5rIHRvIHN0 YXRpc3RpYydzIHRhYmxlICovCi0JUmVsT3B0SW5mbyAqcmVsOworCS8qCisJICogYmFjay1s aW5rIHRvIHN0YXRpc3RpYydzIHRhYmxlOyBkb24ndCBwcmludCwgaW5maW5pdGUgcmVjdXJz aW9uIG9uIHBsYW4KKwkgKiB0cmVlIGR1bXAKKwkgKi8KKwlSZWxPcHRJbmZvICpyZWwgcGdf bm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qIHN0YXRpc3RpY3Mga2luZCBv ZiB0aGlzIGVudHJ5ICovCiAJY2hhcgkJa2luZDsKQEAgLTExMjMsNyArMTE0Nyw3IEBAIHR5 cGVkZWYgc3RydWN0IFN0YXRpc3RpY0V4dEluZm8KICAqIE5COiBpZiBlY19tZXJnZWQgaXNu J3QgTlVMTCwgdGhpcyBjbGFzcyBoYXMgYmVlbiBtZXJnZWQgaW50byBhbm90aGVyLCBhbmQK ICAqIHNob3VsZCBiZSBpZ25vcmVkIGluIGZhdm9yIG9mIHVzaW5nIHRoZSBwb2ludGVkLXRv IGNsYXNzLgogICovCi10eXBlZGVmIHN0cnVjdCBFcXVpdmFsZW5jZUNsYXNzCit0eXBlZGVm IHN0cnVjdCBFcXVpdmFsZW5jZUNsYXNzIHBnX25vZGVfYXR0cihjdXN0b21fcmVhZF93cml0 ZSwgbm9fY29weV9lcXVhbCwgbm9fcmVhZCkKIHsKIAlOb2RlVGFnCQl0eXBlOwogCkBAIC0x MTczLDcgKzExOTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBFcXVpdmFsZW5jZUNsYXNzCiAgKiBh bnlhcnJheV9vcHMgd291bGQgbmV2ZXIgd29yayB3aXRob3V0IHRoaXMuICBVc2UgZW1fZGF0 YXR5cGUgd2hlbgogICogbG9va2luZyB1cCBhIHNwZWNpZmljIGJ0cmVlIG9wZXJhdG9yIHRv IHdvcmsgd2l0aCB0aGlzIGV4cHJlc3Npb24uCiAgKi8KLXR5cGVkZWYgc3RydWN0IEVxdWl2 YWxlbmNlTWVtYmVyCit0eXBlZGVmIHN0cnVjdCBFcXVpdmFsZW5jZU1lbWJlciBwZ19ub2Rl X2F0dHIobm9fY29weV9lcXVhbCkKIHsKIAlOb2RlVGFnCQl0eXBlOwogCkBAIC0xMjU3LDcg KzEyODEsNyBAQCB0eXBlZGVmIGVudW0gVm9sYXRpbGVGdW5jdGlvblN0YXR1cwogICogZGVh bCB3aXRoIHNvcnQvZ3JvdXAgcmVmbm9zIHdoZW4gbmVlZGVkIHdpdGggbGVzcyBleHBlbnNl IHRoYW4gaW5jbHVkaW5nCiAgKiBUYXJnZXRFbnRyeSBub2RlcyBpbiB0aGUgZXhwcnMgbGlz dC4KICAqLwotdHlwZWRlZiBzdHJ1Y3QgUGF0aFRhcmdldAordHlwZWRlZiBzdHJ1Y3QgUGF0 aFRhcmdldCBwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9fcmVhZCkKIHsKIAlOb2Rl VGFnCQl0eXBlOwogCkBAIC0xMjY1LDcgKzEyODksNyBAQCB0eXBlZGVmIHN0cnVjdCBQYXRo VGFyZ2V0CiAJTGlzdAkgICAqZXhwcnM7CiAKIAkvKiBjb3JyZXNwb25kaW5nIHNvcnQvZ3Jv dXAgcmVmbm9zLCBvciAwICovCi0JSW5kZXgJICAgKnNvcnRncm91cHJlZnM7CisJSW5kZXgJ ICAgKnNvcnRncm91cHJlZnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUoZXhwcnMpKTsKIAog CS8qIGNvc3Qgb2YgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgKi8KIAlRdWFsQ29zdAlj b3N0OwpAQCAtMTI5Niw3ICsxMzIwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGF0aFRhcmdldAog ICogb24gaG93IHRoZSBqb2luIGlzIGZvcm1lZC4gIFRoZSByZWxldmFudCBjbGF1c2VzIHdp bGwgYXBwZWFyIGluIGVhY2gKICAqIHBhcmFtZXRlcml6ZWQgam9pbiBwYXRoJ3Mgam9pbnJl c3RyaWN0aW5mbyBsaXN0LCBpbnN0ZWFkLgogICovCi10eXBlZGVmIHN0cnVjdCBQYXJhbVBh dGhJbmZvCit0eXBlZGVmIHN0cnVjdCBQYXJhbVBhdGhJbmZvIHBnX25vZGVfYXR0cihub19j b3B5X2VxdWFsKQogewogCU5vZGVUYWcJCXR5cGU7CiAKQEAgLTEzMzQsMjIgKzEzNTgsNDEg QEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYW1QYXRoSW5mbwogICoKICAqICJwYXRoa2V5cyIgaXMg YSBMaXN0IG9mIFBhdGhLZXkgbm9kZXMgKHNlZSBhYm92ZSksIGRlc2NyaWJpbmcgdGhlIHNv cnQKICAqIG9yZGVyaW5nIG9mIHRoZSBwYXRoJ3Mgb3V0cHV0IHJvd3MuCisgKgorICogV2Ug ZG8gbm90IHN1cHBvcnQgY29weWluZyBQYXRoIHRyZWVzLCBtYWlubHkgYmVjYXVzZSB0aGUg Y2lyY3VsYXIgbGlua2FnZXMKKyAqIGJldHdlZW4gUmVsT3B0SW5mbyBhbmQgUGF0aCBub2Rl cyBjYW4ndCBiZSBoYW5kbGVkIGVhc2lseSBpbiBhIHNpbXBsZQorICogZGVwdGgtZmlyc3Qg dHJhdmVyc2FsLiAgV2UgYWxzbyBkb24ndCBoYXZlIHJlYWQgc3VwcG9ydCBhdCB0aGUgbW9t ZW50LgogICovCi10eXBlZGVmIHN0cnVjdCBQYXRoCit0eXBlZGVmIHN0cnVjdCBQYXRoIHBn X25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkKQogewogCU5vZGVUYWcJCXR5cGU7 CiAKIAkvKiB0YWcgaWRlbnRpZnlpbmcgc2Nhbi9qb2luIG1ldGhvZCAqLwogCU5vZGVUYWcJ CXBhdGh0eXBlOwogCi0JLyogdGhlIHJlbGF0aW9uIHRoaXMgcGF0aCBjYW4gYnVpbGQgKi8K LQlSZWxPcHRJbmZvICpwYXJlbnQ7CisJLyoKKwkgKiB0aGUgcmVsYXRpb24gdGhpcyBwYXRo IGNhbiBidWlsZAorCSAqCisJICogV2UgZG8gTk9UIHByaW50IHRoZSBwYXJlbnQsIGVsc2Ug d2UnZCBiZSBpbiBpbmZpbml0ZSByZWN1cnNpb24uICBXZSBjYW4KKwkgKiBwcmludCB0aGUg cGFyZW50J3MgcmVsaWRzIGZvciBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcywgdGhvdWdoLgor CSAqLworCVJlbE9wdEluZm8gKnBhcmVudCBwZ19ub2RlX2F0dHIod3JpdGVfb25seV9yZWxp ZHMpOwogCi0JLyogbGlzdCBvZiBWYXJzL0V4cHJzLCBjb3N0LCB3aWR0aCAqLwotCVBhdGhU YXJnZXQgKnBhdGh0YXJnZXQ7CisJLyoKKwkgKiBsaXN0IG9mIFZhcnMvRXhwcnMsIGNvc3Qs IHdpZHRoCisJICoKKwkgKiBXZSBwcmludCB0aGUgcGF0aHRhcmdldCBvbmx5IGlmIGl0J3Mg bm90IHRoZSBkZWZhdWx0IG9uZSBmb3IgdGhlIHJlbC4KKwkgKi8KKwlQYXRoVGFyZ2V0ICpw YXRodGFyZ2V0IHBnX25vZGVfYXR0cih3cml0ZV9vbmx5X25vbmRlZmF1bHRfcGF0aHRhcmdl dCk7CiAKLQkvKiBwYXJhbWV0ZXJpemF0aW9uIGluZm8sIG9yIE5VTEwgaWYgbm9uZSAqLwot CVBhcmFtUGF0aEluZm8gKnBhcmFtX2luZm87CisJLyoKKwkgKiBwYXJhbWV0ZXJpemF0aW9u IGluZm8sIG9yIE5VTEwgaWYgbm9uZQorCSAqCisJICogV2UgZG8gbm90IHByaW50IHRoZSB3 aG9sZSBvZiBwYXJhbV9pbmZvLCBzaW5jZSBpdCdzIHByaW50ZWQgdmlhCisJICogUmVsT3B0 SW5mbzsgaXQncyBzdWZmaWNpZW50IGFuZCBsZXNzIGNsdXR0ZXJpbmcgdG8gcHJpbnQganVz dCB0aGUKKwkgKiByZXF1aXJlZCBvdXRlciByZWxpZHMuCisJICovCisJUGFyYW1QYXRoSW5m byAqcGFyYW1faW5mbyBwZ19ub2RlX2F0dHIod3JpdGVfb25seV9yZXFfb3V0ZXIpOwogCiAJ LyogZW5nYWdlIHBhcmFsbGVsLWF3YXJlIGxvZ2ljPyAqLwogCWJvb2wJCXBhcmFsbGVsX2F3 YXJlOwpAQCAtMTQ1NSw3ICsxNDk4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhQYXRoCiAg KiBjb2x1bW4sIGkuZS4gdGhlIGluZGV4Y29sIHZhbHVlcyBtdXN0IGZvcm0gYSBub25kZWNy ZWFzaW5nIHNlcXVlbmNlLgogICogKFRoZSBvcmRlciBvZiBtdWx0aXBsZSBjbGF1c2VzIGZv ciB0aGUgc2FtZSBpbmRleCBjb2x1bW4gaXMgdW5zcGVjaWZpZWQuKQogICovCi10eXBlZGVm IHN0cnVjdCBJbmRleENsYXVzZQordHlwZWRlZiBzdHJ1Y3QgSW5kZXhDbGF1c2UgcGdfbm9k ZV9hdHRyKG5vX2NvcHlfZXF1YWwpCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlzdHJ1Y3QgUmVz dHJpY3RJbmZvICpyaW5mbzsgLyogb3JpZ2luYWwgcmVzdHJpY3Rpb24gb3Igam9pbiBjbGF1 c2UgKi8KQEAgLTE3NTAsNyArMTc5Myw3IEBAIHR5cGVkZWYgc3RydWN0IEdhdGhlck1lcmdl UGF0aAogICogQWxsIGpvaW4tdHlwZSBwYXRocyBzaGFyZSB0aGVzZSBmaWVsZHMuCiAgKi8K IAotdHlwZWRlZiBzdHJ1Y3QgSm9pblBhdGgKK3R5cGVkZWYgc3RydWN0IEpvaW5QYXRoIHBn X25vZGVfYXR0cihhYnN0cmFjdCkKIHsKIAlQYXRoCQlwYXRoOwogCkBAIC0xOTUyLDE0ICsx OTk1LDE0IEBAIHR5cGVkZWYgc3RydWN0IEFnZ1BhdGgKICAqIFZhcmlvdXMgYW5ub3RhdGlv bnMgdXNlZCBmb3IgZ3JvdXBpbmcgc2V0cyBpbiB0aGUgcGxhbm5lci4KICAqLwogCi10eXBl ZGVmIHN0cnVjdCBHcm91cGluZ1NldERhdGEKK3R5cGVkZWYgc3RydWN0IEdyb3VwaW5nU2V0 RGF0YSBwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCkKIHsKIAlOb2RlVGFnCQl0eXBlOwog CUxpc3QJICAgKnNldDsJCQkvKiBncm91cGluZyBzZXQgYXMgbGlzdCBvZiBzb3J0Z3JvdXBy ZWZzICovCiAJQ2FyZGluYWxpdHkgbnVtR3JvdXBzOwkJLyogZXN0LiBudW1iZXIgb2YgcmVz dWx0IGdyb3VwcyAqLwogfSBHcm91cGluZ1NldERhdGE7CiAKLXR5cGVkZWYgc3RydWN0IFJv bGx1cERhdGEKK3R5cGVkZWYgc3RydWN0IFJvbGx1cERhdGEgcGdfbm9kZV9hdHRyKG5vX2Nv cHlfZXF1YWwpCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlMaXN0CSAgICpncm91cENsYXVzZTsJ LyogYXBwbGljYWJsZSBzdWJzZXQgb2YgcGFyc2UtPmdyb3VwQ2xhdXNlICovCkBAIC0yMjI0 LDYgKzIyNjcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgTGltaXRQYXRoCiAgKiBhcHBseSBvbmx5 IG9uZS4gIFdlIG1hcmsgY2xhdXNlcyBvZiB0aGlzIGtpbmQgYnkgc2V0dGluZyBwYXJlbnRf ZWMgdG8KICAqIHBvaW50IHRvIHRoZSBnZW5lcmF0aW5nIEVxdWl2YWxlbmNlQ2xhc3MuICBN dWx0aXBsZSBjbGF1c2VzIHdpdGggdGhlIHNhbWUKICAqIHBhcmVudF9lYyBpbiB0aGUgc2Ft ZSBqb2luIGFyZSByZWR1bmRhbnQuCisgKgorICogTW9zdCBmaWVsZHMgYXJlIGlnbm9yZWQg Zm9yIGVxdWFsaXR5LCBzaW5jZSB0aGV5IG1heSBub3QgYmUgc2V0IHlldCwgYW5kCisgKiBz aG91bGQgYmUgZGVyaXZhYmxlIGZyb20gdGhlIGNsYXVzZSBhbnl3YXkuCisgKgorICogcGFy ZW50X2VjLCBsZWZ0X2VjLCByaWdodF9lYyBhcmUgbm90IHByaW50ZWQsIGxlc3QgaXQgbGVh ZCB0byBpbmZpbml0ZQorICogcmVjdXJzaW9uIGluIHBsYW4gdHJlZSBkdW1wLgogICovCiAK IHR5cGVkZWYgc3RydWN0IFJlc3RyaWN0SW5mbwpAQCAtMjI0MCwyMiArMjI4OSwyMiBAQCB0 eXBlZGVmIHN0cnVjdCBSZXN0cmljdEluZm8KIAlib29sCQlvdXRlcmpvaW5fZGVsYXllZDsK IAogCS8qIHNlZSBjb21tZW50IGFib3ZlICovCi0JYm9vbAkJY2FuX2pvaW47CisJYm9vbAkJ Y2FuX2pvaW4gcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiBzZWUgY29tbWVu dCBhYm92ZSAqLwotCWJvb2wJCXBzZXVkb2NvbnN0YW50OworCWJvb2wJCXBzZXVkb2NvbnN0 YW50IHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyogdHJ1ZSBpZiBrbm93biB0 byBjb250YWluIG5vIGxlYWtlZCBWYXJzICovCi0JYm9vbAkJbGVha3Byb29mOworCWJvb2wJ CWxlYWtwcm9vZiBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIHRvIGluZGlj YXRlIGlmIGNsYXVzZSBjb250YWlucyBhbnkgdm9sYXRpbGUgZnVuY3Rpb25zLiAqLwotCVZv bGF0aWxlRnVuY3Rpb25TdGF0dXMgaGFzX3ZvbGF0aWxlOworCVZvbGF0aWxlRnVuY3Rpb25T dGF0dXMgaGFzX3ZvbGF0aWxlIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyog c2VlIGNvbW1lbnQgYWJvdmUgKi8KIAlJbmRleAkJc2VjdXJpdHlfbGV2ZWw7CiAKIAkvKiBU aGUgc2V0IG9mIHJlbGlkcyAodmFybm9zKSBhY3R1YWxseSByZWZlcmVuY2VkIGluIHRoZSBj bGF1c2U6ICovCi0JUmVsaWRzCQljbGF1c2VfcmVsaWRzOworCVJlbGlkcwkJY2xhdXNlX3Jl bGlkcyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIFRoZSBzZXQgb2YgcmVs aWRzIHJlcXVpcmVkIHRvIGV2YWx1YXRlIHRoZSBjbGF1c2U6ICovCiAJUmVsaWRzCQlyZXF1 aXJlZF9yZWxpZHM7CkBAIC0yMjcwLDg0ICsyMzE5LDg5IEBAIHR5cGVkZWYgc3RydWN0IFJl c3RyaWN0SW5mbwogCSAqIFJlbGlkcyBpbiB0aGUgbGVmdC9yaWdodCBzaWRlIG9mIHRoZSBj bGF1c2UuICBUaGVzZSBmaWVsZHMgYXJlIHNldCBmb3IKIAkgKiBhbnkgYmluYXJ5IG9wY2xh dXNlLgogCSAqLwotCVJlbGlkcwkJbGVmdF9yZWxpZHM7Ci0JUmVsaWRzCQlyaWdodF9yZWxp ZHM7CisJUmVsaWRzCQlsZWZ0X3JlbGlkcyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsK KwlSZWxpZHMJCXJpZ2h0X3JlbGlkcyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAog CS8qCiAJICogTW9kaWZpZWQgY2xhdXNlIHdpdGggUmVzdHJpY3RJbmZvcy4gIFRoaXMgZmll bGQgaXMgTlVMTCB1bmxlc3MgY2xhdXNlCiAJICogaXMgYW4gT1IgY2xhdXNlLgogCSAqLwot CUV4cHIJICAgKm9yY2xhdXNlOworCUV4cHIJICAgKm9yY2xhdXNlIHBnX25vZGVfYXR0cihl cXVhbF9pZ25vcmUpOwogCiAJLyoKIAkgKiBHZW5lcmF0aW5nIEVxdWl2YWxlbmNlQ2xhc3Mu ICBUaGlzIGZpZWxkIGlzIE5VTEwgdW5sZXNzIGNsYXVzZSBpcwogCSAqIHBvdGVudGlhbGx5 IHJlZHVuZGFudC4KIAkgKi8KLQlFcXVpdmFsZW5jZUNsYXNzICpwYXJlbnRfZWM7CisJRXF1 aXZhbGVuY2VDbGFzcyAqcGFyZW50X2VjIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUsIHJl YWRfd3JpdGVfaWdub3JlKTsKIAogCS8qCiAJICogY2FjaGUgc3BhY2UgZm9yIGNvc3QgYW5k IHNlbGVjdGl2aXR5CiAJICovCiAKIAkvKiBldmFsIGNvc3Qgb2YgY2xhdXNlOyAtMSBpZiBu b3QgeWV0IHNldCAqLwotCVF1YWxDb3N0CWV2YWxfY29zdDsKKwlRdWFsQ29zdAlldmFsX2Nv c3QgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKgogCSAqIHNlbGVjdGl2aXR5 IGZvciAibm9ybWFsIiAoSk9JTl9JTk5FUikgc2VtYW50aWNzOyAtMSBpZiBub3QgeWV0IHNl dDsgPjEKIAkgKiBtZWFucyBhIHJlZHVuZGFudCBjbGF1c2UKIAkgKi8KLQlTZWxlY3Rpdml0 eSBub3JtX3NlbGVjOworCVNlbGVjdGl2aXR5IG5vcm1fc2VsZWMgcGdfbm9kZV9hdHRyKGVx dWFsX2lnbm9yZSk7CiAJLyogc2VsZWN0aXZpdHkgZm9yIG91dGVyIGpvaW4gc2VtYW50aWNz OyAtMSBpZiBub3QgeWV0IHNldCAqLwotCVNlbGVjdGl2aXR5IG91dGVyX3NlbGVjOworCVNl bGVjdGl2aXR5IG91dGVyX3NlbGVjIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJ LyoKIAkgKiBvcGZhbWlsaWVzIGNvbnRhaW5pbmcgY2xhdXNlIG9wZXJhdG9yOyB2YWxpZCBp ZiBjbGF1c2UgaXMKIAkgKiBtZXJnZWpvaW5hYmxlLCBlbHNlIE5JTAogCSAqLwotCUxpc3QJ ICAgKm1lcmdlb3BmYW1pbGllczsKKwlMaXN0CSAgICptZXJnZW9wZmFtaWxpZXMgcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKgogCSAqIGNhY2hlIHNwYWNlIGZvciBtZXJn ZWNsYXVzZSBwcm9jZXNzaW5nOyBOVUxMIGlmIG5vdCB5ZXQgc2V0CiAJICovCiAKIAkvKiBF cXVpdmFsZW5jZUNsYXNzIGNvbnRhaW5pbmcgbGVmdGhhbmQgKi8KLQlFcXVpdmFsZW5jZUNs YXNzICpsZWZ0X2VjOworCUVxdWl2YWxlbmNlQ2xhc3MgKmxlZnRfZWMgcGdfbm9kZV9hdHRy KGVxdWFsX2lnbm9yZSwgcmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIEVxdWl2YWxlbmNlQ2xh c3MgY29udGFpbmluZyByaWdodGhhbmQgKi8KLQlFcXVpdmFsZW5jZUNsYXNzICpyaWdodF9l YzsKKwlFcXVpdmFsZW5jZUNsYXNzICpyaWdodF9lYyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdu b3JlLCByZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogRXF1aXZhbGVuY2VNZW1iZXIgZm9yIGxl ZnRoYW5kICovCi0JRXF1aXZhbGVuY2VNZW1iZXIgKmxlZnRfZW07CisJRXF1aXZhbGVuY2VN ZW1iZXIgKmxlZnRfZW0gcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAJLyogRXF1aXZh bGVuY2VNZW1iZXIgZm9yIHJpZ2h0aGFuZCAqLwotCUVxdWl2YWxlbmNlTWVtYmVyICpyaWdo dF9lbTsKLQkvKiBsaXN0IG9mIE1lcmdlU2NhblNlbENhY2hlIHN0cnVjdHMgKi8KLQlMaXN0 CSAgICpzY2Fuc2VsX2NhY2hlOworCUVxdWl2YWxlbmNlTWVtYmVyICpyaWdodF9lbSBwZ19u b2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKKworCS8qCisJICogTGlzdCBvZiBNZXJnZVNjYW5T ZWxDYWNoZSBzdHJ1Y3RzLiAgVGhvc2UgYXJlbid0IE5vZGVzLCBzbyBoYXJkIHRvCisJICog Y29weS4gIElnbm9yaW5nIGl0IHdpbGwgaGF2ZSB0aGUgZWZmZWN0IHRoYXQgY29weWluZyB3 aWxsIGp1c3QgcmVzZXQKKwkgKiB0aGUgY2FjaGUuCisJICovCisJTGlzdAkgICAqc2NhbnNl bF9jYWNoZSBwZ19ub2RlX2F0dHIoY29weV9pZ25vcmUsIGVxdWFsX2lnbm9yZSk7CiAKIAkv KgogCSAqIHRyYW5zaWVudCB3b3Jrc3BhY2UgZm9yIHVzZSB3aGlsZSBjb25zaWRlcmluZyBh IHNwZWNpZmljIGpvaW4gcGF0aDsgVCA9CiAJICogb3V0ZXIgdmFyIG9uIGxlZnQsIEYgPSBv biByaWdodAogCSAqLwotCWJvb2wJCW91dGVyX2lzX2xlZnQ7CisJYm9vbAkJb3V0ZXJfaXNf bGVmdCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qCiAJICogY29weSBvZiBj bGF1c2Ugb3BlcmF0b3I7IHZhbGlkIGlmIGNsYXVzZSBpcyBoYXNoam9pbmFibGUsIGVsc2UK IAkgKiBJbnZhbGlkT2lkCiAJICovCi0JT2lkCQkJaGFzaGpvaW5vcGVyYXRvcjsKKwlPaWQJ CQloYXNoam9pbm9wZXJhdG9yIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyoK IAkgKiBjYWNoZSBzcGFjZSBmb3IgaGFzaGNsYXVzZSBwcm9jZXNzaW5nOyAtMSBpZiBub3Qg eWV0IHNldAogCSAqLwogCS8qIGF2ZyBidWNrZXRzaXplIG9mIGxlZnQgc2lkZSAqLwotCVNl bGVjdGl2aXR5IGxlZnRfYnVja2V0c2l6ZTsKKwlTZWxlY3Rpdml0eSBsZWZ0X2J1Y2tldHNp emUgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAJLyogYXZnIGJ1Y2tldHNpemUgb2Yg cmlnaHQgc2lkZSAqLwotCVNlbGVjdGl2aXR5IHJpZ2h0X2J1Y2tldHNpemU7CisJU2VsZWN0 aXZpdHkgcmlnaHRfYnVja2V0c2l6ZSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAkv KiBsZWZ0IHNpZGUncyBtb3N0IGNvbW1vbiB2YWwncyBmcmVxICovCi0JU2VsZWN0aXZpdHkg bGVmdF9tY3ZmcmVxOworCVNlbGVjdGl2aXR5IGxlZnRfbWN2ZnJlcSBwZ19ub2RlX2F0dHIo ZXF1YWxfaWdub3JlKTsKIAkvKiByaWdodCBzaWRlJ3MgbW9zdCBjb21tb24gdmFsJ3MgZnJl cSAqLwotCVNlbGVjdGl2aXR5IHJpZ2h0X21jdmZyZXE7CisJU2VsZWN0aXZpdHkgcmlnaHRf bWN2ZnJlcSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIGhhc2ggZXF1YWxp dHkgb3BlcmF0b3JzIHVzZWQgZm9yIG1lbW9pemUgbm9kZXMsIGVsc2UgSW52YWxpZE9pZCAq LwotCU9pZAkJCWxlZnRfaGFzaGVxb3BlcmF0b3I7Ci0JT2lkCQkJcmlnaHRfaGFzaGVxb3Bl cmF0b3I7CisJT2lkCQkJbGVmdF9oYXNoZXFvcGVyYXRvciBwZ19ub2RlX2F0dHIoZXF1YWxf aWdub3JlKTsKKwlPaWQJCQlyaWdodF9oYXNoZXFvcGVyYXRvciBwZ19ub2RlX2F0dHIoZXF1 YWxfaWdub3JlKTsKIH0gUmVzdHJpY3RJbmZvOwogCiAvKgpAQCAtMjM5Nyw2ICsyNDUxLDE3 IEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlU2NhblNlbENhY2hlCiAgKiBBbHRob3VnaCB0aGUg cGxhbm5lciB0cmVhdHMgdGhpcyBhcyBhbiBleHByZXNzaW9uIG5vZGUgdHlwZSwgaXQgaXMg bm90CiAgKiByZWNvZ25pemVkIGJ5IHRoZSBwYXJzZXIgb3IgZXhlY3V0b3IsIHNvIHdlIGRl Y2xhcmUgaXQgaGVyZSByYXRoZXIgdGhhbgogICogaW4gcHJpbW5vZGVzLmguCisgKgorICog V2UgaW50ZW50aW9uYWxseSBkbyBub3QgY29tcGFyZSBwaGV4cHIuICBUd28gUGxhY2VIb2xk ZXJWYXJzIHdpdGggdGhlCisgKiBzYW1lIElEIGFuZCBsZXZlbHN1cCBzaG91bGQgYmUgY29u c2lkZXJlZCBlcXVhbCBldmVuIGlmIHRoZSBjb250YWluZWQKKyAqIGV4cHJlc3Npb25zIGhh dmUgbWFuYWdlZCB0byBtdXRhdGUgdG8gZGlmZmVyZW50IHN0YXRlcy4gIFRoaXMgd2lsbAor ICogaGFwcGVuIGR1cmluZyBmaW5hbCBwbGFuIGNvbnN0cnVjdGlvbiB3aGVuIHRoZXJlIGFy ZSBuZXN0ZWQgUEhWcywgc2luY2UKKyAqIHRoZSBpbm5lciBQSFYgd2lsbCBnZXQgcmVwbGFj ZWQgYnkgYSBQYXJhbSBpbiBzb21lIGNvcGllcyBvZiB0aGUgb3V0ZXIKKyAqIFBIVi4gIEFu b3RoZXIgd2F5IGluIHdoaWNoIGl0IGNhbiBoYXBwZW4gaXMgdGhhdCBpbml0cGxhbiBzdWJs aW5rcworICogY291bGQgZ2V0IHJlcGxhY2VkIGJ5IGRpZmZlcmVudGx5LW51bWJlcmVkIFBh cmFtcyB3aGVuIHN1YmxpbmsgZm9sZGluZworICogaXMgZG9uZS4gIChUaGUgZW5kIHJlc3Vs dCBvZiBzdWNoIGEgc2l0dWF0aW9uIHdvdWxkIGJlIHNvbWUKKyAqIHVucmVmZXJlbmNlZCBp bml0cGxhbnMsIHdoaWNoIGlzIGFubm95aW5nIGJ1dCBub3QgcmVhbGx5IGEgcHJvYmxlbS4p IE9uCisgKiB0aGUgc2FtZSByZWFzb25pbmcsIHRoZXJlIGlzIG5vIG5lZWQgdG8gZXhhbWlu ZSBwaHJlbHMuCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgUGxhY2VIb2xkZXJWYXIKQEAgLTI0 MDQsMTAgKzI0NjksMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhY2VIb2xkZXJWYXIKIAlFeHBy CQl4cHI7CiAKIAkvKiB0aGUgcmVwcmVzZW50ZWQgZXhwcmVzc2lvbiAqLwotCUV4cHIJICAg KnBoZXhwcjsKKwlFeHByCSAgICpwaGV4cHIgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7 CiAKIAkvKiBiYXNlIHJlbGlkcyBzeW50YWN0aWNhbGx5IHdpdGhpbiBleHByIHNyYyAqLwot CVJlbGlkcwkJcGhyZWxzOworCVJlbGlkcwkJcGhyZWxzIHBnX25vZGVfYXR0cihlcXVhbF9p Z25vcmUpOwogCiAJLyogSUQgZm9yIFBIViAodW5pcXVlIHdpdGhpbiBwbGFubmVyIHJ1bikg Ki8KIAlJbmRleAkJcGhpZDsKQEAgLTI1NzIsNyArMjYzNyw3IEBAIHR5cGVkZWYgc3RydWN0 IEFwcGVuZFJlbEluZm8KIAkgKiBjaGlsZCBjb2x1bW4gaXMgZHJvcHBlZCBvciBkb2Vzbid0 IGV4aXN0IGluIHRoZSBwYXJlbnQuCiAJICovCiAJaW50CQkJbnVtX2NoaWxkX2NvbHM7IC8q IGxlbmd0aCBvZiBhcnJheSAqLwotCUF0dHJOdW1iZXIgKnBhcmVudF9jb2xub3M7CisJQXR0 ck51bWJlciAqcGFyZW50X2NvbG5vcyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1fY2hp bGRfY29scykpOwogCiAJLyoKIAkgKiBXZSBzdG9yZSB0aGUgcGFyZW50IHRhYmxlJ3MgT0lE IGhlcmUgZm9yIGluaGVyaXRhbmNlLCBvciBJbnZhbGlkT2lkIGZvcgpAQCAtMjYwMCw3ICsy NjY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUmVsSW5mbwogICogV2UgYWRkIHN1Y2gg YSByZWZlcmVuY2UgdG8gcm9vdC0+cHJvY2Vzc2VkX3RsaXN0IHdoZW4gY3JlYXRpbmcgdGhl IGVudHJ5LAogICogYW5kIGl0IHByb3BhZ2F0ZXMgaW50byB0aGUgcGxhbiB0cmVlIGZyb20g dGhlcmUuCiAgKi8KLXR5cGVkZWYgc3RydWN0IFJvd0lkZW50aXR5VmFySW5mbwordHlwZWRl ZiBzdHJ1Y3QgUm93SWRlbnRpdHlWYXJJbmZvIHBnX25vZGVfYXR0cihub19jb3B5X2VxdWFs KQogewogCU5vZGVUYWcJCXR5cGU7CiAKQEAgLTI2NDMsNyArMjcwOCwxMCBAQCB0eXBlZGVm IHN0cnVjdCBQbGFjZUhvbGRlckluZm8KIAkvKiBJRCBmb3IgUEggKHVuaXF1ZSB3aXRoaW4g cGxhbm5lciBydW4pICovCiAJSW5kZXgJCXBoaWQ7CiAKLQkvKiBjb3B5IG9mIFBsYWNlSG9s ZGVyVmFyIHRyZWUgKi8KKwkvKgorCSAqIGNvcHkgb2YgUGxhY2VIb2xkZXJWYXIgdHJlZSAo c2hvdWxkIGJlIHJlZHVuZGFudCBmb3IgY29tcGFyaXNvbiwgY291bGQKKwkgKiBiZSBpZ25v cmVkKQorCSAqLwogCVBsYWNlSG9sZGVyVmFyICpwaF92YXI7CiAKIAkvKiBsb3dlc3QgbGV2 ZWwgd2UgY2FuIGV2YWx1YXRlIHZhbHVlIGF0ICovCkBAIC0yNjY0LDcgKzI3MzIsNyBAQCB0 eXBlZGVmIHN0cnVjdCBQbGFjZUhvbGRlckluZm8KICAqIGZ1bmN0aW9uLiAgTWluTWF4QWdn UGF0aCBjb250YWlucyBhIGxpc3Qgb2YgdGhlc2UsIGFuZCBpZiB3ZSBhY2NlcHQgdGhhdAog ICogcGF0aCwgdGhlIGxpc3QgaXMgc3RvcmVkIGludG8gcm9vdC0+bWlubWF4X2FnZ3MgZm9y IHVzZSBkdXJpbmcgc2V0cmVmcy5jLgogICovCi10eXBlZGVmIHN0cnVjdCBNaW5NYXhBZ2dJ bmZvCit0eXBlZGVmIHN0cnVjdCBNaW5NYXhBZ2dJbmZvIHBnX25vZGVfYXR0cihub19jb3B5 X2VxdWFsKQogewogCU5vZGVUYWcJCXR5cGU7CiAKQEAgLTI2NzcsOCArMjc0NSwxMSBAQCB0 eXBlZGVmIHN0cnVjdCBNaW5NYXhBZ2dJbmZvCiAJLyogZXhwcmVzc2lvbiB3ZSBhcmUgYWdn cmVnYXRpbmcgb24gKi8KIAlFeHByCSAgICp0YXJnZXQ7CiAKLQkvKiBtb2RpZmllZCAicm9v dCIgZm9yIHBsYW5uaW5nIHRoZSBzdWJxdWVyeSAqLwotCVBsYW5uZXJJbmZvICpzdWJyb290 OworCS8qCisJICogbW9kaWZpZWQgInJvb3QiIGZvciBwbGFubmluZyB0aGUgc3VicXVlcnk7 IG5vdCBwcmludGVkLCB0b28gbGFyZ2UsIG5vdAorCSAqIGludGVyZXN0aW5nIGVub3VnaAor CSAqLworCVBsYW5uZXJJbmZvICpzdWJyb290IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2ln bm9yZSk7CiAKIAkvKiBhY2Nlc3MgcGF0aCBmb3Igc3VicXVlcnkgKi8KIAlQYXRoCSAgICpw YXRoOwpAQCAtMjczNyw3ICsyODA4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTWluTWF4QWdnSW5m bwogICogSW5zdGVhZCwgd2UganVzdCByZWNvcmQgdGhlIGFzc2lnbm1lbnQgb2YgdGhlIHNs b3QgbnVtYmVyIGJ5IGFwcGVuZGluZyB0bwogICogcm9vdC0+Z2xvYi0+cGFyYW1FeGVjVHlw ZXMuCiAgKi8KLXR5cGVkZWYgc3RydWN0IFBsYW5uZXJQYXJhbUl0ZW0KK3R5cGVkZWYgc3Ry dWN0IFBsYW5uZXJQYXJhbUl0ZW0gcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwpCiB7CiAJ Tm9kZVRhZwkJdHlwZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBkNWMwZWJlODU5 Li4xOWI1Y2UyZWM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMjg2LDE2ICsyODYs MTYgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIAlpbnQJCQludW1Db2xzOwogCiAJ LyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlBdHRyTnVtYmVyICpz b3J0Q29sSWR4OworCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUobnVtQ29scykpOwogCiAJLyogT0lEcyBvZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVt IGJ5ICovCi0JT2lkCQkgICAqc29ydE9wZXJhdG9yczsKKwlPaWQJCSAgICpzb3J0T3BlcmF0 b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qIE9JRHMgb2Yg Y29sbGF0aW9ucyAqLwotCU9pZAkJICAgKmNvbGxhdGlvbnM7CisJT2lkCQkgICAqY29sbGF0 aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBOVUxMUyBG SVJTVC9MQVNUIGRpcmVjdGlvbnMgKi8KLQlib29sCSAgICpudWxsc0ZpcnN0OworCWJvb2wJ ICAgKm51bGxzRmlyc3QgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJ LyogSW5mbyBmb3IgcnVuLXRpbWUgc3VicGxhbiBwcnVuaW5nOyBOVUxMIGlmIHdlJ3JlIG5v dCBkb2luZyB0aGF0ICovCiAJc3RydWN0IFBhcnRpdGlvblBydW5lSW5mbyAqcGFydF9wcnVu ZV9pbmZvOwpAQCAtMzIyLDExICszMjIsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVjdXJzaXZl VW5pb24KIAlpbnQJCQludW1Db2xzOwogCiAJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFy Z2V0IGxpc3QgKi8KLQlBdHRyTnVtYmVyICpkdXBDb2xJZHg7CisJQXR0ck51bWJlciAqZHVw Q29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qIGVxdWFs aXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICpkdXBPcGVyYXRv cnM7Ci0JT2lkCQkgICAqZHVwQ29sbGF0aW9uczsKKwlPaWQJCSAgICpkdXBPcGVyYXRvcnMg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOworCU9pZAkJICAgKmR1cENvbGxh dGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJLyogZXN0aW1h dGVkIG51bWJlciBvZiBncm91cHMgaW4gaW5wdXQgKi8KIAlsb25nCQludW1Hcm91cHM7CkBA IC04MTIsMTYgKzgxMiwxNiBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUpvaW4KIAkvKiB0aGVz ZSBhcmUgYXJyYXlzLCBidXQgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIG1lcmdlY2xh dXNlcyBsaXN0OiAqLwogCiAJLyogcGVyLWNsYXVzZSBPSURzIG9mIGJ0cmVlIG9wZmFtaWxp ZXMgKi8KLQlPaWQJCSAgICptZXJnZUZhbWlsaWVzOworCU9pZAkJICAgKm1lcmdlRmFtaWxp ZXMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobWVyZ2VjbGF1c2VzKSk7CiAKIAkvKiBwZXIt Y2xhdXNlIE9JRHMgb2YgY29sbGF0aW9ucyAqLwotCU9pZAkJICAgKm1lcmdlQ29sbGF0aW9u czsKKwlPaWQJCSAgICptZXJnZUNvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUo bWVyZ2VjbGF1c2VzKSk7CiAKIAkvKiBwZXItY2xhdXNlIG9yZGVyaW5nIChBU0Mgb3IgREVT QykgKi8KLQlpbnQJCSAgICptZXJnZVN0cmF0ZWdpZXM7CisJaW50CQkgICAqbWVyZ2VTdHJh dGVnaWVzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG1lcmdlY2xhdXNlcykpOwogCiAJLyog cGVyLWNsYXVzZSBudWxscyBvcmRlcmluZyAqLwotCWJvb2wJICAgKm1lcmdlTnVsbHNGaXJz dDsKKwlib29sCSAgICptZXJnZU51bGxzRmlyc3QgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUo bWVyZ2VjbGF1c2VzKSk7CiB9IE1lcmdlSm9pbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpA QCAtODYzLDEwICs4NjMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVtb2l6ZQogCWludAkJCW51 bUtleXM7CiAKIAkvKiBoYXNoIG9wZXJhdG9ycyBmb3IgZWFjaCBrZXkgKi8KLQlPaWQJCSAg ICpoYXNoT3BlcmF0b3JzOworCU9pZAkJICAgKmhhc2hPcGVyYXRvcnMgcGdfbm9kZV9hdHRy KGFycmF5X3NpemUobnVtS2V5cykpOwogCiAJLyogY29sbGF0aW9ucyBmb3IgZWFjaCBrZXkg Ki8KLQlPaWQJCSAgICpjb2xsYXRpb25zOworCU9pZAkJICAgKmNvbGxhdGlvbnMgcGdfbm9k ZV9hdHRyKGFycmF5X3NpemUobnVtS2V5cykpOwogCiAJLyogY2FjaGUga2V5cyBpbiB0aGUg Zm9ybSBvZiBleHBycyBjb250YWluaW5nIHBhcmFtZXRlcnMgKi8KIAlMaXN0CSAgICpwYXJh bV9leHByczsKQEAgLTkwNSwxNiArOTA1LDE2IEBAIHR5cGVkZWYgc3RydWN0IFNvcnQKIAlp bnQJCQludW1Db2xzOwogCiAJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3Qg Ki8KLQlBdHRyTnVtYmVyICpzb3J0Q29sSWR4OworCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHgg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJLyogT0lEcyBvZiBvcGVy YXRvcnMgdG8gc29ydCB0aGVtIGJ5ICovCi0JT2lkCQkgICAqc29ydE9wZXJhdG9yczsKKwlP aWQJCSAgICpzb3J0T3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMp KTsKIAogCS8qIE9JRHMgb2YgY29sbGF0aW9ucyAqLwotCU9pZAkJICAgKmNvbGxhdGlvbnM7 CisJT2lkCQkgICAqY29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xz KSk7CiAKIAkvKiBOVUxMUyBGSVJTVC9MQVNUIGRpcmVjdGlvbnMgKi8KLQlib29sCSAgICpu dWxsc0ZpcnN0OworCWJvb2wJICAgKm51bGxzRmlyc3QgcGdfbm9kZV9hdHRyKGFycmF5X3Np emUobnVtQ29scykpOwogfSBTb3J0OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC05NDEs MTEgKzk0MSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBHcm91cAogCWludAkJCW51bUNvbHM7CiAK IAkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwotCUF0dHJOdW1iZXIg KmdycENvbElkeDsKKwlBdHRyTnVtYmVyICpncnBDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUobnVtQ29scykpOwogCiAJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUg d2l0aCAqLwotCU9pZAkJICAgKmdycE9wZXJhdG9yczsKLQlPaWQJCSAgICpncnBDb2xsYXRp b25zOworCU9pZAkJICAgKmdycE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShu dW1Db2xzKSk7CisJT2lkCQkgICAqZ3JwQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlf c2l6ZShudW1Db2xzKSk7CiB9IEdyb3VwOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0KQEAgLTk3 NiwxMSArOTc2LDExIEBAIHR5cGVkZWYgc3RydWN0IEFnZwogCWludAkJCW51bUNvbHM7CiAK IAkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwotCUF0dHJOdW1iZXIg KmdycENvbElkeDsKKwlBdHRyTnVtYmVyICpncnBDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUobnVtQ29scykpOwogCiAJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUg d2l0aCAqLwotCU9pZAkJICAgKmdycE9wZXJhdG9yczsKLQlPaWQJCSAgICpncnBDb2xsYXRp b25zOworCU9pZAkJICAgKmdycE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShu dW1Db2xzKSk7CisJT2lkCQkgICAqZ3JwQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlf c2l6ZShudW1Db2xzKSk7CiAKIAkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIGdyb3VwcyBpbiBp bnB1dCAqLwogCWxvbmcJCW51bUdyb3VwczsKQEAgLTEwMTUsMjUgKzEwMTUsMjUgQEAgdHlw ZWRlZiBzdHJ1Y3QgV2luZG93QWdnCiAJaW50CQkJcGFydE51bUNvbHM7CiAKIAkvKiB0aGVp ciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwotCUF0dHJOdW1iZXIgKnBhcnRDb2xJ ZHg7CisJQXR0ck51bWJlciAqcGFydENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShw YXJ0TnVtQ29scykpOwogCiAJLyogZXF1YWxpdHkgb3BlcmF0b3JzIGZvciBwYXJ0aXRpb24g Y29sdW1ucyAqLwotCU9pZAkJICAgKnBhcnRPcGVyYXRvcnM7CisJT2lkCQkgICAqcGFydE9w ZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShwYXJ0TnVtQ29scykpOwogCiAJLyog Y29sbGF0aW9ucyBmb3IgcGFydGl0aW9uIGNvbHVtbnMgKi8KLQlPaWQJCSAgICpwYXJ0Q29s bGF0aW9uczsKKwlPaWQJCSAgICpwYXJ0Q29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlf c2l6ZShwYXJ0TnVtQ29scykpOwogCiAJLyogbnVtYmVyIG9mIGNvbHVtbnMgaW4gb3JkZXJp bmcgY2xhdXNlICovCiAJaW50CQkJb3JkTnVtQ29sczsKIAogCS8qIHRoZWlyIGluZGV4ZXMg aW4gdGhlIHRhcmdldCBsaXN0ICovCi0JQXR0ck51bWJlciAqb3JkQ29sSWR4OworCUF0dHJO dW1iZXIgKm9yZENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShvcmROdW1Db2xzKSk7 CiAKIAkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgZm9yIG9yZGVyaW5nIGNvbHVtbnMgKi8KLQlP aWQJCSAgICpvcmRPcGVyYXRvcnM7CisJT2lkCQkgICAqb3JkT3BlcmF0b3JzIHBnX25vZGVf YXR0cihhcnJheV9zaXplKG9yZE51bUNvbHMpKTsKIAogCS8qIGNvbGxhdGlvbnMgZm9yIG9y ZGVyaW5nIGNvbHVtbnMgKi8KLQlPaWQJCSAgICpvcmRDb2xsYXRpb25zOworCU9pZAkJICAg Km9yZENvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUob3JkTnVtQ29scykpOwog CiAJLyogZnJhbWVfY2xhdXNlIG9wdGlvbnMsIHNlZSBXaW5kb3dEZWYgKi8KIAlpbnQJCQlm cmFtZU9wdGlvbnM7CkBAIC0xMDg2LDEzICsxMDg2LDEzIEBAIHR5cGVkZWYgc3RydWN0IFVu aXF1ZQogCWludAkJCW51bUNvbHM7CiAKIAkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJn ZXQgbGlzdCAqLwotCUF0dHJOdW1iZXIgKnVuaXFDb2xJZHg7CisJQXR0ck51bWJlciAqdW5p cUNvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBlcXVh bGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqdW5pcU9wZXJh dG9yczsKKwlPaWQJCSAgICp1bmlxT3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXpl KG51bUNvbHMpKTsKIAogCS8qIGNvbGxhdGlvbnMgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25z ICovCi0JT2lkCQkgICAqdW5pcUNvbGxhdGlvbnM7CisJT2lkCQkgICAqdW5pcUNvbGxhdGlv bnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogfSBVbmlxdWU7CiAKIC8q IC0tLS0tLS0tLS0tLQpAQCAtMTEzNywxNiArMTEzNywxNiBAQCB0eXBlZGVmIHN0cnVjdCBH YXRoZXJNZXJnZQogCWludAkJCW51bUNvbHM7CiAKIAkvKiB0aGVpciBpbmRleGVzIGluIHRo ZSB0YXJnZXQgbGlzdCAqLwotCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHg7CisJQXR0ck51bWJl ciAqc29ydENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkv KiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0gYnkgKi8KLQlPaWQJCSAgICpzb3J0 T3BlcmF0b3JzOworCU9pZAkJICAgKnNvcnRPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUobnVtQ29scykpOwogCiAJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCi0JT2lkCQkg ICAqY29sbGF0aW9uczsKKwlPaWQJCSAgICpjb2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG51bUNvbHMpKTsKIAogCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAq LwotCWJvb2wJICAgKm51bGxzRmlyc3Q7CisJYm9vbAkgICAqbnVsbHNGaXJzdCBwZ19ub2Rl X2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKgogCSAqIHBhcmFtIGlkJ3Mgb2Yg aW5pdHBsYW5zIHdoaWNoIGFyZSByZWZlcnJlZCBhdCBnYXRoZXIgbWVyZ2Ugb3Igb25lIG9m CkBAIC0xMTk3LDExICsxMTk3LDExIEBAIHR5cGVkZWYgc3RydWN0IFNldE9wCiAJaW50CQkJ bnVtQ29sczsKIAogCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0J QXR0ck51bWJlciAqZHVwQ29sSWR4OworCUF0dHJOdW1iZXIgKmR1cENvbElkeCBwZ19ub2Rl X2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBlcXVhbGl0eSBvcGVyYXRvcnMg dG8gY29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqZHVwT3BlcmF0b3JzOwotCU9pZAkJICAg KmR1cENvbGxhdGlvbnM7CisJT2lkCQkgICAqZHVwT3BlcmF0b3JzIHBnX25vZGVfYXR0cihh cnJheV9zaXplKG51bUNvbHMpKTsKKwlPaWQJCSAgICpkdXBDb2xsYXRpb25zIHBnX25vZGVf YXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qIHdoZXJlIGlzIHRoZSBmbGFnIGNv bHVtbiwgaWYgYW55ICovCiAJQXR0ck51bWJlcglmbGFnQ29sSWR4OwpAQCAtMTI1MywxMyAr MTI1MywxMyBAQCB0eXBlZGVmIHN0cnVjdCBMaW1pdAogCWludAkJCXVuaXFOdW1Db2xzOwog CiAJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlBdHRyTnVtYmVy ICp1bmlxQ29sSWR4OworCUF0dHJOdW1iZXIgKnVuaXFDb2xJZHggcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUodW5pcU51bUNvbHMpKTsKIAogCS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBj b21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICp1bmlxT3BlcmF0b3JzOworCU9pZAkJICAgKnVu aXFPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUodW5pcU51bUNvbHMpKTsKIAog CS8qIGNvbGxhdGlvbnMgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zICovCi0JT2lkCQkgICAq dW5pcUNvbGxhdGlvbnM7CisJT2lkCQkgICAqdW5pcUNvbGxhdGlvbnMgcGdfbm9kZV9hdHRy KGFycmF5X3NpemUodW5pcU51bUNvbHMpKTsKIH0gTGltaXQ7CiAKIApAQCAtMTQyNSwxMyAr MTQyNSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbwogCWlu dAkJCW5wYXJ0czsKIAogCS8qIHN1YnBsYW4gaW5kZXggYnkgcGFydGl0aW9uIGluZGV4LCBv ciAtMSAqLwotCWludAkJICAgKnN1YnBsYW5fbWFwOworCWludAkJICAgKnN1YnBsYW5fbWFw IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5wYXJ0cykpOwogCiAJLyogc3VicGFydCBpbmRl eCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0xICovCi0JaW50CQkgICAqc3VicGFydF9tYXA7 CisJaW50CQkgICAqc3VicGFydF9tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnBhcnRz KSk7CiAKIAkvKiByZWxhdGlvbiBPSUQgYnkgcGFydGl0aW9uIGluZGV4LCBvciAwICovCi0J T2lkCQkgICAqcmVsaWRfbWFwOworCU9pZAkJICAgKnJlbGlkX21hcCBwZ19ub2RlX2F0dHIo YXJyYXlfc2l6ZShucGFydHMpKTsKIAogCS8qCiAJICogaW5pdGlhbF9wcnVuaW5nX3N0ZXBz IHNob3dzIGhvdyB0byBwcnVuZSBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCAoaS5lLiwKQEAg LTE0NTIsNyArMTQ1Miw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvbmVkUmVsUHJ1bmVJ bmZvCiAgKgogICogc3RlcF9pZCBpcyB0aGUgZ2xvYmFsIGlkZW50aWZpZXIgb2YgdGhlIHN0 ZXAgd2l0aGluIGl0cyBwcnVuaW5nIGNvbnRleHQuCiAgKi8KLXR5cGVkZWYgc3RydWN0IFBh cnRpdGlvblBydW5lU3RlcAordHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGVwIHBn X25vZGVfYXR0cihhYnN0cmFjdCkKIHsKIAlOb2RlVGFnCQl0eXBlOwogCWludAkJCXN0ZXBf aWQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCmluZGV4IDczMmMwMGMwOTguLjllNmI0YmRiMWQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC02NCw4ICs2NCwxMSBAQCB0eXBlZGVmIHN0 cnVjdCBSYW5nZVZhcgogewogCU5vZGVUYWcJCXR5cGU7CiAKLQkvKiB0aGUgY2F0YWxvZyAo ZGF0YWJhc2UpIG5hbWUsIG9yIE5VTEwgKi8KLQljaGFyCSAgICpjYXRhbG9nbmFtZTsKKwkv KgorCSAqIHRoZSBjYXRhbG9nIChkYXRhYmFzZSkgbmFtZSwgb3IgTlVMTDsgaWdub3JlZCBm b3IgcmVhZC93cml0ZSwgc2luY2UgaXQKKwkgKiBpcyBwcmVzZW50bHkgbm90IHNlbWFudGlj YWxseSBtZWFuaW5nZnVsCisJICovCisJY2hhcgkgICAqY2F0YWxvZ25hbWUgcGdfbm9kZV9h dHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qIHRoZSBzY2hlbWEgbmFtZSwgb3IgTlVM TCAqLwogCWNoYXIJICAgKnNjaGVtYW5hbWU7CkBAIC0xNTUsNyArMTU4LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgSW50b0NsYXVzZQogICogY29udGFpbnMgTm9kZVRhZywgdGhpcyBpcyBhIGZv cm1hbGl0eSwgYnV0IGl0IGlzIGFuIGVhc3kgZm9ybSBvZgogICogZG9jdW1lbnRhdGlvbi4g IFNlZSBhbHNvIHRoZSBFeHByU3RhdGUgbm9kZSB0eXBlcyBpbiBleGVjbm9kZXMuaC4KICAq LwotdHlwZWRlZiBzdHJ1Y3QgRXhwcgordHlwZWRlZiBzdHJ1Y3QgRXhwciBwZ19ub2RlX2F0 dHIoYWJzdHJhY3QpCiB7CiAJTm9kZVRhZwkJdHlwZTsKIH0gRXhwcjsKQEAgLTIzMywxMCAr MjM2LDE1IEBAIHR5cGVkZWYgc3RydWN0IFZhcgogCSAqLwogCUluZGV4CQl2YXJsZXZlbHN1 cDsKIAorCS8qCisJICogdmFybm9zeW4vdmFyYXR0bm9zeW4gYXJlIGlnbm9yZWQgZm9yIGVx dWFsaXR5LCBiZWNhdXNlIFZhcnMgd2l0aAorCSAqIGRpZmZlcmVudCBzeW50YWN0aWMgaWRl bnRpZmllcnMgYXJlIHNlbWFudGljYWxseSB0aGUgc2FtZSBhcyBsb25nIGFzCisJICogdGhl aXIgdmFybm8vdmFyYXR0bm8gbWF0Y2guCisJICovCiAJLyogc3ludGFjdGljIHJlbGF0aW9u IGluZGV4ICgwIGlmIHVua25vd24pICovCi0JSW5kZXgJCXZhcm5vc3luOworCUluZGV4CQl2 YXJub3N5biBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAkvKiBzeW50YWN0aWMgYXR0 cmlidXRlIG51bWJlciAqLwotCUF0dHJOdW1iZXIJdmFyYXR0bm9zeW47CisJQXR0ck51bWJl cgl2YXJhdHRub3N5biBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIHRva2Vu IGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCiAJaW50CQkJbG9jYXRpb247CkBAIC0y NTAsNyArMjU4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVmFyCiAgKiByZWZlcmVuY2VzKS4gIFRo aXMgZW5zdXJlcyB0aGF0IHRoZSBDb25zdCBub2RlIGlzIHNlbGYtY29udGFpbmVkIGFuZCBt YWtlcwogICogaXQgbW9yZSBsaWtlbHkgdGhhdCBlcXVhbCgpIHdpbGwgc2VlIGxvZ2ljYWxs eSBpZGVudGljYWwgdmFsdWVzIGFzIGVxdWFsLgogICovCi10eXBlZGVmIHN0cnVjdCBDb25z dAordHlwZWRlZiBzdHJ1Y3QgQ29uc3QgcGdfbm9kZV9hdHRyKGN1c3RvbV9jb3B5X2VxdWFs LCBjdXN0b21fcmVhZF93cml0ZSkKIHsKIAlFeHByCQl4cHI7CiAJT2lkCQkJY29uc3R0eXBl OwkJLyogcGdfdHlwZSBPSUQgb2YgdGhlIGNvbnN0YW50J3MgZGF0YXR5cGUgKi8KQEAgLTM3 NCw4ICszODIsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgQWdncmVmCiAJLyogT0lEIG9mIGNvbGxh dGlvbiB0aGF0IGZ1bmN0aW9uIHNob3VsZCB1c2UgKi8KIAlPaWQJCQlpbnB1dGNvbGxpZDsK IAotCS8qIHR5cGUgT2lkIG9mIGFnZ3JlZ2F0ZSdzIHRyYW5zaXRpb24gdmFsdWUgKi8KLQlP aWQJCQlhZ2d0cmFuc3R5cGU7CisJLyoKKwkgKiB0eXBlIE9pZCBvZiBhZ2dyZWdhdGUncyB0 cmFuc2l0aW9uIHZhbHVlOyBpZ25vcmVkIGZvciBlcXVhbCBzaW5jZSBpdAorCSAqIG1pZ2h0 IG5vdCBiZSBzZXQgeWV0CisJICovCisJT2lkCQkJYWdndHJhbnN0eXBlIHBnX25vZGVfYXR0 cihlcXVhbF9pZ25vcmUpOwogCiAJLyogdHlwZSBPaWRzIG9mIGRpcmVjdCBhbmQgYWdncmVn YXRlZCBhcmdzICovCiAJTGlzdAkgICAqYWdnYXJndHlwZXM7CkBAIC00NTUsMTAgKzQ2Niwx MCBAQCB0eXBlZGVmIHN0cnVjdCBHcm91cGluZ0Z1bmMKIAlMaXN0CSAgICphcmdzOwogCiAJ LyogcmVzc29ydGdyb3VwcmVmcyBvZiBhcmd1bWVudHMgKi8KLQlMaXN0CSAgICpyZWZzOwor CUxpc3QJICAgKnJlZnMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiBhY3R1 YWwgY29sdW1uIHBvc2l0aW9ucyBzZXQgYnkgcGxhbm5lciAqLwotCUxpc3QJICAgKmNvbHM7 CisJTGlzdAkgICAqY29scyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIHNh bWUgYXMgQWdncmVmLmFnZ2xldmVsc3VwICovCiAJSW5kZXgJCWFnZ2xldmVsc3VwOwpAQCAt NjM0LDcgKzY0NSw3IEBAIHR5cGVkZWYgc3RydWN0IE9wRXhwcgogCU9pZAkJCW9wbm87CiAK IAkvKiBQR19QUk9DIE9JRCBvZiB1bmRlcmx5aW5nIGZ1bmN0aW9uICovCi0JT2lkCQkJb3Bm dW5jaWQ7CisJT2lkCQkJb3BmdW5jaWQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZV9pZl96 ZXJvKTsKIAogCS8qIFBHX1RZUEUgT0lEIG9mIHJlc3VsdCB2YWx1ZSAqLwogCU9pZAkJCW9w cmVzdWx0dHlwZTsKQEAgLTY5OCw2ICs3MDksMTAgQEAgdHlwZWRlZiBPcEV4cHIgTnVsbElm RXhwcjsKICAqIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gYW5kIHdvbid0IGJlIHVzZWQgZHVy aW5nIGV4ZWN1dGlvbi4gIEZvcgogICogbm9uLWhhc2h0YWJsZSBiYXNlZCBOT1QgSU5zLCBu ZWdmdW5jaWQgd2lsbCBiZSBzZXQgdG8gSW52YWxpZE9pZC4gIFNlZQogICogY29udmVydF9z YW9wX3RvX2hhc2hlZF9zYW9wKCkuCisgKgorICogU2ltaWxhciB0byBPcEV4cHIsIG9wZnVu Y2lkLCBoYXNoZnVuY2lkLCBhbmQgbmVnZnVuY2lkIGFyZSBub3QgbmVjZXNzYXJpbHkKKyAq IGZpbGxlZCBpbiByaWdodCBhd2F5LCBzbyB3aWxsIGJlIGlnbm9yZWQgZm9yIGVxdWFsaXR5 IGlmIHRoZXkgYXJlIG5vdCBzZXQKKyAqIHlldC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgU2Nh bGFyQXJyYXlPcEV4cHIKIHsKQEAgLTcwNywxMyArNzIyLDEzIEBAIHR5cGVkZWYgc3RydWN0 IFNjYWxhckFycmF5T3BFeHByCiAJT2lkCQkJb3BubzsKIAogCS8qIFBHX1BST0MgT0lEIG9m IGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KLQlPaWQJCQlvcGZ1bmNpZDsKKwlPaWQJCQlvcGZ1 bmNpZCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlX2lmX3plcm8pOwogCiAJLyogUEdfUFJP QyBPSUQgb2YgaGFzaCBmdW5jIG9yIEludmFsaWRPaWQgKi8KLQlPaWQJCQloYXNoZnVuY2lk OworCU9pZAkJCWhhc2hmdW5jaWQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZV9pZl96ZXJv KTsKIAogCS8qIFBHX1BST0MgT0lEIG9mIG5lZ2F0b3Igb2Ygb3BmdW5jaWQgZnVuY3Rpb24g b3IgSW52YWxpZE9pZC4gIFNlZSBhYm92ZSAqLwotCU9pZAkJCW5lZ2Z1bmNpZDsKKwlPaWQJ CQluZWdmdW5jaWQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZV9pZl96ZXJvKTsKIAogCS8q IHRydWUgZm9yIEFOWSwgZmFsc2UgZm9yIEFMTCAqLwogCWJvb2wJCXVzZU9yOwpAQCAtNzQw LDcgKzc1NSw3IEBAIHR5cGVkZWYgZW51bSBCb29sRXhwclR5cGUKIAlBTkRfRVhQUiwgT1Jf RVhQUiwgTk9UX0VYUFIKIH0gQm9vbEV4cHJUeXBlOwogCi10eXBlZGVmIHN0cnVjdCBCb29s RXhwcgordHlwZWRlZiBzdHJ1Y3QgQm9vbEV4cHIgcGdfbm9kZV9hdHRyKGN1c3RvbV9yZWFk X3dyaXRlKQogewogCUV4cHIJCXhwcjsKIAlCb29sRXhwclR5cGUgYm9vbG9wOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvdmFsdWUuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Zh bHVlLmgKaW5kZXggZWFmOTM3MDUxYy4uNjE5M2Y1MTUzNiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvdmFsdWUuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy92YWx1ZS5oCkBA IC0yNSw3ICsyNSw3IEBACiAgKiAoVGhlcmUgdXNlZCB0byBiZSBhIFZhbHVlIG5vZGUsIHdo aWNoIGVuY29tcGFzc2VkIGFsbCB0aGVzZSBkaWZmZXJlbnQgbm9kZSB0eXBlcy4gIEhlbmNl IHRoZSBuYW1lIG9mIHRoaXMgZmlsZS4pCiAgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgSW50ZWdl cgordHlwZWRlZiBzdHJ1Y3QgSW50ZWdlciBwZ19ub2RlX2F0dHIoc3BlY2lhbF9yZWFkX3dy aXRlKQogewogCU5vZGVUYWcJCXR5cGU7CiAJaW50CQkJaXZhbDsKQEAgLTQyLDI1ICs0Miwy NSBAQCB0eXBlZGVmIHN0cnVjdCBJbnRlZ2VyCiAgKiBOb3RlIHRoYXQgYW4gaW50ZWdlci1s b29raW5nIHN0cmluZyB3aWxsIGdldCBsZXhlZCBhcyBUX0Zsb2F0IGlmIHRoZSB2YWx1ZQog ICogaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBhbiAnaW50Jy4KICAqLwotdHlwZWRlZiBzdHJ1 Y3QgRmxvYXQKK3R5cGVkZWYgc3RydWN0IEZsb2F0IHBnX25vZGVfYXR0cihzcGVjaWFsX3Jl YWRfd3JpdGUpCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAljaGFyCSAgICpmdmFsOwogfSBGbG9h dDsKIAotdHlwZWRlZiBzdHJ1Y3QgQm9vbGVhbgordHlwZWRlZiBzdHJ1Y3QgQm9vbGVhbiBw Z19ub2RlX2F0dHIoc3BlY2lhbF9yZWFkX3dyaXRlKQogewogCU5vZGVUYWcJCXR5cGU7CiAJ Ym9vbAkJYm9vbHZhbDsKIH0gQm9vbGVhbjsKIAotdHlwZWRlZiBzdHJ1Y3QgU3RyaW5nCit0 eXBlZGVmIHN0cnVjdCBTdHJpbmcgcGdfbm9kZV9hdHRyKHNwZWNpYWxfcmVhZF93cml0ZSkK IHsKIAlOb2RlVGFnCQl0eXBlOwogCWNoYXIJICAgKnN2YWw7CiB9IFN0cmluZzsKIAotdHlw ZWRlZiBzdHJ1Y3QgQml0U3RyaW5nCit0eXBlZGVmIHN0cnVjdCBCaXRTdHJpbmcgcGdfbm9k ZV9hdHRyKHNwZWNpYWxfcmVhZF93cml0ZSkKIHsKIAlOb2RlVGFnCQl0eXBlOwogCWNoYXIJ ICAgKmJzdmFsOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggYi9zcmMv aW5jbHVkZS91dGlscy9yZWwuaAppbmRleCAxODk2YTlhMDZkLi4zZTZkYTg2Njg4IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9yZWwuaApAQCAtMjY1LDcgKzI2NSw3IEBAIHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uRGF0 YQogICogQ3VycmVudGx5LCB3ZSBtb3N0bHkgY2FjaGUgZmllbGRzIG9mIGludGVyZXN0IHRv IHRoZSBwbGFubmVyLCBidXQgdGhlIHNldAogICogb2YgZmllbGRzIGhhcyBhbHJlYWR5IGdy b3duIHRoZSBjb25zdHJhaW50IE9JRCBmb3Igb3RoZXIgdXNlcy4KICAqLwotdHlwZWRlZiBz dHJ1Y3QgRm9yZWlnbktleUNhY2hlSW5mbwordHlwZWRlZiBzdHJ1Y3QgRm9yZWlnbktleUNh Y2hlSW5mbyBwZ19ub2RlX2F0dHIobm9fcmVhZCkKIHsKIAlOb2RlVGFnCQl0eXBlOwogCU9p ZAkJCWNvbm9pZDsJCQkvKiBvaWQgb2YgdGhlIGNvbnN0cmFpbnQgaXRzZWxmICovCkBAIC0y NzMsOSArMjczLDEyIEBAIHR5cGVkZWYgc3RydWN0IEZvcmVpZ25LZXlDYWNoZUluZm8KIAlP aWQJCQljb25mcmVsaWQ7CQkvKiByZWxhdGlvbiByZWZlcmVuY2VkIGJ5IHRoZSBmb3JlaWdu IGtleSAqLwogCWludAkJCW5rZXlzOwkJCS8qIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBm b3JlaWduIGtleSAqLwogCS8qIHRoZXNlIGFycmF5cyBlYWNoIGhhdmUgbmtleXMgdmFsaWQg ZW50cmllczogKi8KLQlBdHRyTnVtYmVyCWNvbmtleVtJTkRFWF9NQVhfS0VZU107IC8qIGNv bHMgaW4gcmVmZXJlbmNpbmcgdGFibGUgKi8KLQlBdHRyTnVtYmVyCWNvbmZrZXlbSU5ERVhf TUFYX0tFWVNdOwkvKiBjb2xzIGluIHJlZmVyZW5jZWQgdGFibGUgKi8KLQlPaWQJCQljb25w ZmVxb3BbSU5ERVhfTUFYX0tFWVNdOwkvKiBQSyA9IEZLIG9wZXJhdG9yIE9JRHMgKi8KKwkv KiBjb2xzIGluIHJlZmVyZW5jaW5nIHRhYmxlICovCisJQXR0ck51bWJlcgljb25rZXlbSU5E RVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5rZXlzKSk7CisJLyogY29s cyBpbiByZWZlcmVuY2VkIHRhYmxlICovCisJQXR0ck51bWJlcgljb25ma2V5W0lOREVYX01B WF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShua2V5cykpOworCS8qIFBLID0gRksg b3BlcmF0b3IgT0lEcyAqLworCU9pZAkJCWNvbnBmZXFvcFtJTkRFWF9NQVhfS0VZU10gcGdf bm9kZV9hdHRyKGFycmF5X3NpemUobmtleXMpKTsKIH0gRm9yZWlnbktleUNhY2hlSW5mbzsK IAogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbSBiL3NyYy90b29s cy9tc3ZjL1NvbHV0aW9uLnBtCmluZGV4IGQzMGU4ZmNiMTEuLjI4NmI1ODEwYzkgMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtCisrKyBiL3NyYy90b29scy9tc3Zj L1NvbHV0aW9uLnBtCkBAIC04NDEsNiArODQxLDUyIEBAIEVPRgogCQljbG9zZSgkY2hzKTsK IAl9CiAKKwlpZiAoSXNOZXdlcignc3JjL2JhY2tlbmQvbm9kZXMvbm9kZS1zdXBwb3J0LXN0 YW1wJywKKwkJJ3NyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwnKSkKKwl7 CisJCSMgWFhYIGR1cGxpY2F0ZXMgc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUKKworCQlt eSBAbm9kZV9oZWFkZXJzID0gcXcoCisJCQlub2Rlcy9ub2Rlcy5oCisJCQlub2Rlcy9leGVj bm9kZXMuaAorCQkJbm9kZXMvcGxhbm5vZGVzLmgKKwkJCW5vZGVzL3ByaW1ub2Rlcy5oCisJ CQlub2Rlcy9wYXRobm9kZXMuaAorCQkJbm9kZXMvZXh0ZW5zaWJsZS5oCisJCQlub2Rlcy9w YXJzZW5vZGVzLmgKKwkJCW5vZGVzL3JlcGxub2Rlcy5oCisJCQlub2Rlcy92YWx1ZS5oCisJ CQljb21tYW5kcy90cmlnZ2VyLmgKKwkJCWNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorCQkJ Zm9yZWlnbi9mZHdhcGkuaAorCQkJYWNjZXNzL2FtYXBpLmgKKwkJCWFjY2Vzcy90YWJsZWFt LmgKKwkJCWFjY2Vzcy90c21hcGkuaAorCQkJdXRpbHMvcmVsLmgKKwkJCW5vZGVzL3N1cHBv cnRub2Rlcy5oCisJCQlleGVjdXRvci90dXB0YWJsZS5oCisJCQlub2Rlcy9sb2Nrb3B0aW9u cy5oCisJCQlhY2Nlc3Mvc2Rpci5oCisJCSk7CisKKwkJY2hkaXIoJ3NyYy9iYWNrZW5kL25v ZGVzJyk7CisKKwkJbXkgQG5vZGVfZmlsZXMgPSBtYXAgeyAiLi4vLi4vLi4vc3JjL2luY2x1 ZGUvJF8iIH0gQG5vZGVfaGVhZGVyczsKKworCQlzeXN0ZW0oInBlcmwgZ2VuX25vZGVfc3Vw cG9ydC5wbCBAbm9kZV9maWxlcyIpOworCQlvcGVuKG15ICRmLCAnPicsICdub2RlLXN1cHBv cnQtc3RhbXAnKSB8fCBjb25mZXNzICJDb3VsZCBub3QgdG91Y2ggbm9kZS1zdXBwb3J0LXN0 YW1wIjsKKwkJY2xvc2UoJGYpOworCQljaGRpcignLi4vLi4vLi4nKTsKKwl9CisKKwlpZiAo SXNOZXdlcigKKwkJCSdzcmMvaW5jbHVkZS9ub2Rlcy9ub2RldGFncy5oJywKKwkJCSdzcmMv YmFja2VuZC9ub2Rlcy9ub2RldGFncy5oJykpCisJeworCQljb3B5RmlsZSgnc3JjL2JhY2tl bmQvbm9kZXMvbm9kZXRhZ3MuaCcsCisJCQknc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXRhZ3Mu aCcpOworCX0KKwogCW9wZW4obXkgJG8sICc+JywgImRvYy9zcmMvc2dtbC92ZXJzaW9uLnNn bWwiKQogCSAgfHwgY3JvYWsgIkNvdWxkIG5vdCB3cml0ZSB0byB2ZXJzaW9uLnNnbWxcbiI7 CiAJcHJpbnQgJG8gPDxFT0Y7CgpiYXNlLWNvbW1pdDogYjU1ZjYyYWJiMmMyZTA3ZGZhZTk5 ZTE5YTJiM2Q3Y2E5ZTU4ZGMxYQotLSAKMi4zNi4xCgo= --------------WrN0OBJFOkvtxNY833KXwrFO--