Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1aLNtu-00043U-0f for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Jan 2016 04:28:15 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1aLNtt-00071K-Hi for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Jan 2016 04:28:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1aLNq8-0002SH-Kr for pgsql-hackers@postgresql.org; Tue, 19 Jan 2016 04:24:20 +0000 Received: from mail-wm0-x22e.google.com ([2a00:1450:400c:c09::22e]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1aLNq2-0002U1-VG for pgsql-hackers@postgresql.org; Tue, 19 Jan 2016 04:24:20 +0000 Received: by mail-wm0-x22e.google.com with SMTP id b14so151417460wmb.1 for ; Mon, 18 Jan 2016 20:24:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-type; bh=/GllFLBBQPJo2bsJN3gmNMRqYEgffMea9aQYnEi+tr4=; b=WuSpcC0rQZn/XGluUpnNmEj01ac6IpsnciboBV797QKWvpW0J+Z0Grdpy4Hg3wiWbY L7pN+BZ/cU7ZQLbiteiQXg+JbHlyu9HFsjDZNgG0Q9gHTI/JFIV7v4anOblg/Q+xgIJS E+76BEv487XW1BjXdYvbk08D4ACShyE1uaWgDoVAkZjiwsy9KPBzMj5f6DfYsRdIO+Ou QDgcYh9Gyh+qQYB5ryGhD8HhFsEeIpLySiuKiQkteKhKMofwOCiXOMvxJfRDmwBv7lUb LKmE6LMV1pIkr6l6Q3ALE+8hOn+4Rw2+UNPdhwtExfVt40HwQVXVPb3js6axWHPqZJ5Q 1Ufg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-type; bh=/GllFLBBQPJo2bsJN3gmNMRqYEgffMea9aQYnEi+tr4=; b=Mis1iiOfU9sqfzJjB1SITWOU8NHMESQiTRx0VMXpr+81sAwH3gY+CAyAp3fGidhj+/ y3RTeqH+QlMsN3N1Qlv4FRdjZeF+HmRQzr8geFljFWjTc850wjgACF5zSjHK39vx9EN3 EpRsMT7/wbKD9OZwms9SryZchjahNRuhvNloT4y9Qb/YxrI2Gvzso91BQYL/BXQi+6tM NdL8q+ZULz540R5SA/OmmELwxaxVRAmInvCDKuctukkW9/EDiUTHw+ZnuJJghGDkr/4N f6eWdUp7AbLeOtHLieetDC3elJfBErCoeP+xfXPaBI8xYQaJ3qvr0Us/y8FkmzVB7ucl 29nA== X-Gm-Message-State: ALoCoQk3cnsL8280D2Y2bk9suLRWKV06wsCXO2BguwKbr6azou6g5hlOw9wj9oRfSEyN7SB2O1OFfX7lRlRSEFjU/hQi7vuf2IY7FjwSSr1cHtWITmU0kZOJbd/pM9V5ryFM0qJfjLYj5ijCbFKIl0Tp1hZWfDgf902TiyLnKzJjJ1d/FIQuPAtKMP0V+Gu0JXHWoWFCSJrYvmOJa5Zg/6bPfWSYsh3u3g== X-Received: by 10.194.246.134 with SMTP id xw6mr26783683wjc.158.1453177453302; Mon, 18 Jan 2016 20:24:13 -0800 (PST) Received: from [10.137.1.13] (ip-78-45-216-26.net.upcbroadband.cz. [78.45.216.26]) by smtp.gmail.com with ESMTPSA id l67sm18407502wmf.11.2016.01.18.20.24.09 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 18 Jan 2016 20:24:11 -0800 (PST) Subject: Re: multivariate statistics v9 To: pgsql-hackers@postgresql.org References: <543AFA15.4080608@fuzzy.cz> <567AF104.80700@2ndquadrant.com> From: Tomas Vondra Message-ID: <569DBA67.9020403@2ndquadrant.com> Date: Tue, 19 Jan 2016 05:24:07 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <567AF104.80700@2ndquadrant.com> Content-Type: multipart/mixed; boundary="------------040701000609000501090206" X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------040701000609000501090206 Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Hi, attached is v9 of the patch series, including mostly these changes: 1) CREATE STATISTICS cleanup Firstly, I forgot to make the STATISTICS keyword unreserved again. I've also removed additional stuff from the grammar that turned out to be unnecessary / could be replaced with existing pieces. 2) making statistics schema-specific Similarly to the other objects (e.g. types), statistics names are now unique within a schema. This also means that the statistics may be created using qualified name, and also may belong to a different schema than a table. It seems to me we probably also need to track owner, and only allow the owner (or superuser / schema owner) to manipulate the statistics. The initial intention was to inherit all this from the parent table, but as we're designing this for the multi-table case, it's not really working anymore. 3) adding IF [NOT] EXISTS to DROP STATISTICS / CREATE STATISTICS 4) basic documentation of the DDL commands It's really simple at this point and some of the paragraphs are still empty. I also think that we'll have to add stuff explaining how to use statistics, not just docs for the DDL commands. 5) various fixes of the regression tests, related to the above regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------040701000609000501090206 Content-Type: application/x-patch; name="0001-teach-pull_-varno-varattno-_walker-about-RestrictInf.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-teach-pull_-varno-varattno-_walker-about-RestrictInf.pa"; filename*1="tch" RnJvbSA1NWMxZWVlMGU3MzRlNmUzNmRhMmU2ZjcwNWI3MDIyOGMyZmNlNjdj IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAx OTo1NjozMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS83XSB0ZWFjaCBwdWxs Xyh2YXJub3x2YXJhdHRubylfd2Fsa2VyIGFib3V0IFJlc3RyaWN0SW5mbwoK b3RoZXJ3aXNlIHB1bGxfdmFybm9zIGZhaWxzIHdoZW4gcHJvY2Vzc2luZyBP UiBjbGF1c2VzCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdmFy LmMgfCAxNiArKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTYg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3Zhci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv dmFyLmMKaW5kZXggZGZmNTJjNC4uODBkMDFiZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdmFyLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvdmFyLmMKQEAgLTE5Nyw2ICsxOTcsMTMgQEAg cHVsbF92YXJub3Nfd2Fsa2VyKE5vZGUgKm5vZGUsIHB1bGxfdmFybm9zX2Nv bnRleHQgKmNvbnRleHQpCiAJCWNvbnRleHQtPnN1YmxldmVsc191cC0tOwog CQlyZXR1cm4gcmVzdWx0OwogCX0KKwlpZiAoSXNBKG5vZGUsIFJlc3RyaWN0 SW5mbykpCisJeworCQlSZXN0cmljdEluZm8gKnJpbmZvID0gKFJlc3RyaWN0 SW5mbyopbm9kZTsKKwkJY29udGV4dC0+dmFybm9zID0gYm1zX2FkZF9tZW1i ZXJzKGNvbnRleHQtPnZhcm5vcywKKwkJCQkJCQkJCQkgIHJpbmZvLT5jbGF1 c2VfcmVsaWRzKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAlyZXR1cm4gZXhw cmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBwdWxsX3Zhcm5vc193YWxrZXIs CiAJCQkJCQkJCSAgKHZvaWQgKikgY29udGV4dCk7CiB9CkBAIC0yNDUsNiAr MjUyLDE1IEBAIHB1bGxfdmFyYXR0bm9zX3dhbGtlcihOb2RlICpub2RlLCBw dWxsX3ZhcmF0dG5vc19jb250ZXh0ICpjb250ZXh0KQogCQlyZXR1cm4gZmFs c2U7CiAJfQogCisJaWYgKElzQShub2RlLCBSZXN0cmljdEluZm8pKQorCXsK KwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKilub2Rl OworCisJCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKChOb2RlKily aW5mby0+Y2xhdXNlLAorCQkJCQkJCQkJICBwdWxsX3ZhcmF0dG5vc193YWxr ZXIsCisJCQkJCQkJCQkgICh2b2lkKikgY29udGV4dCk7CisJfQorCiAJLyog U2hvdWxkIG5vdCBmaW5kIGFuIHVucGxhbm5lZCBzdWJxdWVyeSAqLwogCUFz c2VydCghSXNBKG5vZGUsIFF1ZXJ5KSk7CiAKLS0gCjIuMS4wCgo= --------------040701000609000501090206 Content-Type: application/x-patch; name="0002-shared-infrastructure-and-functional-dependencies.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0002-shared-infrastructure-and-functional-dependencies.patch" RnJvbSA1YjBmNDViNzcxMzRmM2I4ZGIzMjdmNzZmMDM1MWRjNjExOWEwNDE3 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHR2QGZ1enp5LmN6PgpEYXRlOiBTdW4sIDExIEphbiAyMDE1IDE5OjUxOjQ4 ICswMTAwClN1YmplY3Q6IFtQQVRDSCAyLzddIHNoYXJlZCBpbmZyYXN0cnVj dHVyZSBhbmQgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKCkJhc2ljIGluZnJh c3RydWN0dXJlIHNoYXJlZCBieSBhbGwga2luZHMgb2YgbXVsdGl2YXJpYXRl CnN0YXRzLCBtb3N0IGltcG9ydGFudGx5OgoKLSBhZGRzIGEgbmV3IHN5c3Rl bSBjYXRhbG9nIChwZ19tdl9zdGF0aXN0aWMpCi0gQ1JFQVRFIFNUQVRJU1RJ Q1MgbmFtZSBPTiB0YWJsZSAoY29sdW1ucykgV0lUSCAob3B0aW9ucykKLSBE Uk9QIFNUQVRJU1RJQ1MgbmFtZQotIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0 aW9uYWwgZGVwZW5kZW5jaWVzICh0aGUgc2ltcGxlc3QKICB0eXBlIG9mIG11 bHRpdmFyaWF0ZSBzdGF0aXN0aWNzKQotIGJ1aWxkaW5nIGZ1bmN0aW9uYWwg ZGVwZW5kZW5jaWVzIGluIEFOQUxZWkUKLSB1cGRhdGVzIHJlZ3Jlc3Npb24g dGVzdHMgKG5ldyBjYXRhbG9nIGV0Yy4pCgpUaGlzIGRvZXMgbm90IGluY2x1 ZGUgYW55IGNoYW5nZXMgdG8gdGhlIG9wdGltaXplciwgaS5lLgppdCBkb2Vz IG5vdCBpbmZsdWVuY2UgdGhlIHF1ZXJ5IHBsYW5uaW5nIChzdWJqZWN0IHRv CmZvbGxvdy11cCBwYXRjaGVzKS4KClRoZSBjdXJyZW50IGltcGxlbWVudGF0 aW9uIHJlcXVpcmVzIGEgdmFsaWQgJ2x0b3ByJyBmb3IKdGhlIGNvbHVtbnMs IHNvIHRoYXQgd2UgY2FuIHNvcnQgdGhlIHNhbXBsZSByb3dzIGluIHZhcmlv dXMKd2F5cywgYm90aCBpbiB0aGlzIHBhdGNoIGFuZCBvdGhlciBraW5kcyBv ZiBzdGF0aXN0aWNzLgpNYXliZSB0aGlzIHJlc3RyaWN0aW9uIGNvdWxkIGJl IHJlbGF4ZWQgaW4gdGhlIGZ1dHVyZSwKcmVxdWlyaW5nIGp1c3QgJ2Vxb3By JyBpbiBjYXNlIG9mIHN0YXRzIG5vdCBzb3J0aW5nIHRoZQpkYXRhIChlLmcu IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGFuZCBNQ1YgbGlzdHMpLgoKTWF5 YmUgc29tZSBvZiB0aGUgc3RhdHMgKGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz IGFuZCBNQ1YKbGlzdCB3aXRoIGxpbWl0ZWQgZnVuY3Rpb25hbGl0eSkgbWln aHQgYmUgbWFkZSB0byB3b3JrCndpdGggaGFzaGVzIG9mIHRoZSB2YWx1ZXMs IHdoaWNoIGlzIHN1ZmZpY2llbnQgZm9yIGVxdWFsaXR5CmNvbXBhcmlzb25z LiBCdXQgdGhlIHF1ZXJpZXMgd291bGQgcmVxdWlyZSB0aGUgZXF1YWxpdHkK b3BlcmF0b3IgYW55d2F5LCBzbyBpdCdzIG5vdCByZWFsbHkgYSB3ZWFrZXIg cmVxdWlyZW1lbnQuClRoZSBoYXNoZXMgbWlnaHQgcmVkdWNlIHNwYWNlIHJl cXVpcmVtZW50cywgdGhvdWdoLgoKVGhlIGFsZ29yaXRobSBkZXRlY3Rpbmcg dGhlIGRlcGVuZGVuY2llcyBpcyByYXRoZXIgc2ltcGxlCmFuZCBwcm9iYWJs eSBuZWVkcyBpbXByb3ZlbWVudHMsIHNvIHRoYXQgaXQgZGV0ZWN0cyBtb3Jl CmNvbXBsaWNhdGVkIGRlcGVuZGVuY2llcywgYW5kIGFsc28gdmFsaWRhdGlv biBvZiB0aGUgbWF0aC4KClRoZSBuYW1lICdmdW5jdGlvbmFsIGRlcGVuZGVu Y2llcycgaXMgbW9yZSBjb3JyZWN0ICh0aGFuCidhc3NvY2lhdGlvbiBydWxl cycpIGFzIGl0J3MgZXhhY3RseSB0aGUgbmFtZSB1c2VkIGluCnJlbGF0aW9u YWwgdGhlb3J5IChlc3AuIE5vcm1hbCBGb3JtcykgZm9yIHRyYWNraW5nCmNv bHVtbi1sZXZlbCBkZXBlbmRlbmNpZXMuCgpUaGUgbXVsdGl2YXJpYXRlIHN0 YXRpc3RpY3MgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBpbgp0d28gc2l0 dWF0aW9ucwoKIChhKSBhZnRlciBhIERST1AgVEFCTEUgKG9idmlvdXNseSkK CiAoYikgYWZ0ZXIgQUxURVIgVEFCTEUgLi4uIERST1AgQ09MVU1OLCBpZiB0 aGUgc3RhdGlzdGljcwogICAgIHdvdWxkIGJlIGRlZmluZWQgb24gbGVzcyB0 aGFuIDIgY29sdW1ucyAocmVtYWluaW5nKQoKSWYgdGhlcmUgYXJlIGF0IGxl YXN0IDIgY29sdW1ucyByZW1haW5pbmcsIHdlIGtlZXAKdGhlIHN0YXRpc3Rp Y3MgYnV0IHBlcmZvcm0gY2xlYW51cCBvbiB0aGUgbmV4dCBBTkFMWVpFLgpU aGUgZHJvcHBlZCBjb2x1bW5zIGFyZSByZW1vdmVkIGZyb20gc3Rha2V5cywg YW5kIHRoZSBuZXcKc3RhdGlzdGljcyBpcyBidWlsdCBvbiB0aGUgc21hbGxl ciBzZXQuCgpXZSBjYW4ndCBkbyB0aGlzIGF0IERST1AgQ09MVU1OLCBiZWNh dXNlIHRoYXQnZCBsZWF2ZSB1cwp3aXRoIGludmFsaWQgc3RhdGlzdGljcywg b3Igd2UnZCBoYXZlIHRvIHRocm93IGl0IGF3YXkKYWx0aG91Z2ggd2UgY2Fu IHN0aWxsIHVzZSBpdC4gVGhpcyBsYXp5IGFwcHJvYWNoIGxldHMgdXMKdXNl IHRoZSBzdGF0aXN0aWNzIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGNvbHVtbnMg YXJlIGRlYWQuCgpUaGlzIGFsc28gYWRkcyBhIHNpbXBsZSBsaXN0IG9mIHN0 YXRpc3RpY3MgdG8gXGQgaW4gcHNxbC4KClRoaXMgbWVhbnMgdGhlIHN0YXRp c3RpY3MgYXJlIGNyZWF0ZWQgd2l0aGluIGEgc2NoZW1hIGJ5CnVzaW5nIGEg cXVhbGlmaWVkIG5hbWUgKG9yIHVzaW5nIHRoZSBkZWZhdWx0IHNjaGVtYSkK CiAgIENSRUFURSBTVEFUSVNUSUNTIHNjaGVtYS5zdGF0aXN0aWNzIE9OIC4u LgoKYW5kIHRoZW4gZHJvcHBlZCBieSBzcGVjaWZ5aW5nIHF1YWxpZmllZCBu YW1lCgogICBEUk9QIFNUQVRJU1RJQ1Mgc2NoZW1hLnN0YXRpc3RpY3MKCm9y IHNlYXJjaGluZyB0aHJvdWdoIHNlYXJjaF9wYXRoIChqdXN0IGxpa2Ugd2l0 aCBvdGhlciBvYmplY3RzKS4KClRoZSBjb21tYW5kcyBhbHNvIGluY2x1ZGUg SUYgW05PVF0gRVhJU1RTIGNsYXVzZXMsIHNpbWlsYXJseQp0byB0aGUgb3Ro ZXIgRERMIGNvbW1hbmRzLgoKSSdtIG5vdCBlbnRpcmVseSBzdXJlIG1ha2lu ZyBzdGF0aXN0aWNzIHNjaGVtYS1zcGVjaWZpYyBpcyB0aGF0CmEgZ3JlYXQg aWRlYS4gTWF5YmUgaXQgc2hvdWxkIGJlICJnbG9iYWwiLCBidXQgdGhhdCBk b2VzIG5vdCBzZWVtCnJpZ2h0IChlLmcuIGl0IG1ha2VzIG11bHRpLXRlbmFu dCBzeXN0ZW1zIGJhc2VkIG9uIHNjaGVtYXMgbW9yZQpkaWZmaWN1bHQgdG8g bWFuYWdlLCBiZWNhdXNlIHRlbmFudHMgd291bGQgaW50ZXJhY3QpLgoKSW5j bHVkZXMgYmFzaWMgU0dNTCBkb2N1bWVudGF0aW9uIGZvciB0aGUgRERMIGNv bW1hbmRzLCBhbHRob3VnaApzb21lIG9mIHRoZSBzZWN0aW9ucyBhcmUgZW1w dHkgYXQgdGhlIG1vbWVudC4gSW4gdGhlIGVuZCwgdGhlcmUKc2hvdWxkIHBy b2JhYmx5IGJlIGEgc2VwYXJhdGUgc2VjdGlvbiBhYm91dCBzdGF0aXN0aWNz IGVsc2V3aGVyZQppbiB0aGUgZG9jdW1lbnRhdGlvbiwgZXhwbGFpbmluZyBo b3cgdG8gdXNlIHRoZSBzdGF0cy4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2Fs bGZpbGVzLnNnbWwgICAgICAgICAgICAgfCAgIDIgKwogZG9jL3NyYy9zZ21s L3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sICAgIHwgMTc0ICsrKysrKysr CiBkb2Mvc3JjL3NnbWwvcmVmL2Ryb3Bfc3RhdGlzdGljcy5zZ21sICAgICAg fCAgOTAgKysrKwogZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sICAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvTWFrZWZp bGUgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jYXRhbG9n L2RlcGVuZGVuY3kuYyAgICAgICAgICAgfCAgMTEgKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvaGVhcC5jICAgICAgICAgICAgICAgICB8IDEwMiArKysrKwog c3JjL2JhY2tlbmQvY2F0YWxvZy9uYW1lc3BhY2UuYyAgICAgICAgICAgIHwg IDUxICsrKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMg ICAgICAgIHwgIDIyICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3Zp ZXdzLnNxbCAgICAgICB8ICAxMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9N YWtlZmlsZSAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2FuYWx5emUuYyAgICAgICAgICAgICB8ICAyMSArCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9kcm9wY21kcy5jICAgICAgICAgICAgfCAgIDQgKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jICAgICAgIHwg ICAzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5jICAgICAg ICAgICB8IDMzMSArKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jICAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tl bmQvbm9kZXMvY29weWZ1bmNzLmMgICAgICAgICAgICAgIHwgIDE2ICsKIHNy Yy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgICAgICB8ICAx OCArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAg ICAgfCAgNjMgKysrCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAg ICAgICAgICAgICAgfCAgMzQgKy0KIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jICAgICAgICAgICAgICAgICB8ICAxMSArCiBzcmMvYmFja2VuZC91dGls cy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICB8ICA1OSArKysK IHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3N5c2NhY2hlLmMgICAgICAgICB8 ICAyMyArKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmlsZSAg ICAgICAgIHwgIDE3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29t bW9uLmMgICAgICAgICB8IDM1NiArKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5oICAgICAgICAgfCAgNzUgKysr Kwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9kZXBlbmRlbmNpZXMuYyAg IHwgNjM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmlu L3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgfCAgNDQgKysK IHNyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oICAgICAgICAgICB8 ICAgNSArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9oZWFwLmggICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXhpbmcu aCAgICAgICAgICAgICB8ICAgNyArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL25h bWVzcGFjZS5oICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCAgICAgIHwgIDczICsrKysKIHNyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oICAgICAgICAgICAgICB8ICAgNSAr CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3RvYXN0aW5nLmggICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmggICAgICAg ICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggICAg ICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmggICAgICAgICAgICAgfCAgMTIgKwogc3JjL2luY2x1ZGUvbm9k ZXMvcmVsYXRpb24uaCAgICAgICAgICAgICAgIHwgIDI4ICsrCiBzcmMvaW5j bHVkZS91dGlscy9tdnN0YXRzLmggICAgICAgICAgICAgICAgfCAgNzAgKysr Kwogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggICAgICAgICAgICAgICAgICAg IHwgICA0ICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmggICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9zeXNjYWNoZS5o ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9ydWxlcy5vdXQgICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvc2FuaXR5X2NoZWNrLm91dCB8ICAgMSArCiA0NiBmaWxl cyBjaGFuZ2VkLCAyNDEwIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRl X3N0YXRpc3RpY3Muc2dtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMv c2dtbC9yZWYvZHJvcF9zdGF0aXN0aWNzLnNnbWwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZp bGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL2NvbW1vbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9jb21tb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvZGVwZW5kZW5jaWVzLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRp c3RpYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdXRpbHMv bXZzdGF0cy5oCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbGxm aWxlcy5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sCmlu ZGV4IGJmOTU0NTMuLmMwZjc2NTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvYWxsZmlsZXMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2Fs bGZpbGVzLnNnbWwKQEAgLTc2LDYgKzc2LDcgQEAgQ29tcGxldGUgbGlzdCBv ZiB1c2FibGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3Rvcnku CiA8IUVOVElUWSBjcmVhdGVTY2hlbWEgICAgICAgU1lTVEVNICJjcmVhdGVf c2NoZW1hLnNnbWwiPgogPCFFTlRJVFkgY3JlYXRlU2VxdWVuY2UgICAgIFNZ U1RFTSAiY3JlYXRlX3NlcXVlbmNlLnNnbWwiPgogPCFFTlRJVFkgY3JlYXRl U2VydmVyICAgICAgIFNZU1RFTSAiY3JlYXRlX3NlcnZlci5zZ21sIj4KKzwh RU5USVRZIGNyZWF0ZVN0YXRpc3RpY3MgICBTWVNURU0gImNyZWF0ZV9zdGF0 aXN0aWNzLnNnbWwiPgogPCFFTlRJVFkgY3JlYXRlVGFibGUgICAgICAgIFNZ U1RFTSAiY3JlYXRlX3RhYmxlLnNnbWwiPgogPCFFTlRJVFkgY3JlYXRlVGFi bGVBcyAgICAgIFNZU1RFTSAiY3JlYXRlX3RhYmxlX2FzLnNnbWwiPgogPCFF TlRJVFkgY3JlYXRlVGFibGVTcGFjZSAgIFNZU1RFTSAiY3JlYXRlX3RhYmxl c3BhY2Uuc2dtbCI+CkBAIC0xMTksNiArMTIwLDcgQEAgQ29tcGxldGUgbGlz dCBvZiB1c2FibGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3Rv cnkuCiA8IUVOVElUWSBkcm9wU2NoZW1hICAgICAgICAgU1lTVEVNICJkcm9w X3NjaGVtYS5zZ21sIj4KIDwhRU5USVRZIGRyb3BTZXF1ZW5jZSAgICAgICBT WVNURU0gImRyb3Bfc2VxdWVuY2Uuc2dtbCI+CiA8IUVOVElUWSBkcm9wU2Vy dmVyICAgICAgICAgU1lTVEVNICJkcm9wX3NlcnZlci5zZ21sIj4KKzwhRU5U SVRZIGRyb3BTdGF0aXN0aWNzICAgICBTWVNURU0gImRyb3Bfc3RhdGlzdGlj cy5zZ21sIj4KIDwhRU5USVRZIGRyb3BUYWJsZSAgICAgICAgICBTWVNURU0g ImRyb3BfdGFibGUuc2dtbCI+CiA8IUVOVElUWSBkcm9wVGFibGVTcGFjZSAg ICAgU1lTVEVNICJkcm9wX3RhYmxlc3BhY2Uuc2dtbCI+CiA8IUVOVElUWSBk cm9wVHJhbnNmb3JtICAgICAgU1lTVEVNICJkcm9wX3RyYW5zZm9ybS5zZ21s Ij4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRp c3RpY3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3Rp Y3Muc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5h ODZlYWUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfc3RhdGlzdGljcy5zZ21sCkBAIC0wLDAgKzEsMTc0IEBACis8IS0t Citkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKK1Bv c3RncmVTUUwgZG9jdW1lbnRhdGlvbgorLS0+CisKKzxyZWZlbnRyeSBpZD0i U1FMLUNSRUFURVNUQVRJU1RJQ1MiPgorIDxpbmRleHRlcm0gem9uZT0ic3Fs LWNyZWF0ZXN0YXRpc3RpY3MiPgorICA8cHJpbWFyeT5DUkVBVEUgU1RBVElT VElDUzwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxyZWZtZXRhPgor ICA8cmVmZW50cnl0aXRsZT5DUkVBVEUgU1RBVElTVElDUzwvcmVmZW50cnl0 aXRsZT4KKyAgPG1hbnZvbG51bT43PC9tYW52b2xudW0+CisgIDxyZWZtaXNj aW5mbz5TUUwgLSBMYW5ndWFnZSBTdGF0ZW1lbnRzPC9yZWZtaXNjaW5mbz4K KyA8L3JlZm1ldGE+CisKKyA8cmVmbmFtZWRpdj4KKyAgPHJlZm5hbWU+Q1JF QVRFIFNUQVRJU1RJQ1M8L3JlZm5hbWU+CisgIDxyZWZwdXJwb3NlPmRlZmlu ZSBhIG5ldyBzdGF0aXN0aWNzPC9yZWZwdXJwb3NlPgorIDwvcmVmbmFtZWRp dj4KKworIDxyZWZzeW5vcHNpc2Rpdj4KKzxzeW5vcHNpcz4KK0NSRUFURSBT VEFUSVNUSUNTIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNzX25hbWU8L3JlcGxhY2VhYmxlPiBP TiA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVfbmFtZTwv cmVwbGFjZWFibGU+ICggWworICB7IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFS QU1FVEVSIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IH0gXSBbLCAuLi5d KQorWyBXSVRIICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnN0 YXRpc3RpY3NfcGFyYW1ldGVyPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2Vh YmxlIGNsYXNzPSJQQVJBTUVURVIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFss IC4uLiBdICkKKzwvc3lub3BzaXM+CisKKyA8L3JlZnN5bm9wc2lzZGl2Pgor CisgPHJlZnNlY3QxIGlkPSJTUUwtQ1JFQVRFU1RBVElTVElDUy1kZXNjcmlw dGlvbiI+CisgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgPHBh cmE+CisgICA8Y29tbWFuZD5DUkVBVEUgU1RBVElTVElDUzwvY29tbWFuZD4g d2lsbCBjcmVhdGUgYSBuZXcgbXVsdGl2YXJpYXRlCisgICBzdGF0aXN0aWNz IG9uIHRoZSB0YWJsZS4gVGhlIHN0YXRpc3RpY3Mgd2lsbCBiZSBjcmVhdGVk IGluIHRoZSBpbiB0aGUKKyAgIGN1cnJlbnQgZGF0YWJhc2UuIFRoZSBzdGF0 aXN0aWNzIHdpbGwgYmUgb3duZWQgYnkgdGhlIHVzZXIgaXNzdWluZworICAg dGhlIGNvbW1hbmQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIElmIGEg c2NoZW1hIG5hbWUgaXMgZ2l2ZW4gKGZvciBleGFtcGxlLCA8bGl0ZXJhbD5D UkVBVEUgU1RBVElTVElDUworICAgbXlzY2hlbWEubXlzdGF0IC4uLjwvPikg dGhlbiB0aGUgc3RhdGlzdGljcyBpcyBjcmVhdGVkIGluIHRoZSBzcGVjaWZp ZWQKKyAgIHNjaGVtYS4gIE90aGVyd2lzZSBpdCBpcyBjcmVhdGVkIGluIHRo ZSBjdXJyZW50IHNjaGVtYS4gIFRoZSBuYW1lIG9mCisgICB0aGUgdGFibGUg bXVzdCBiZSBkaXN0aW5jdCBmcm9tIHRoZSBuYW1lIG9mIGFueSBvdGhlciBz dGF0aXN0aWNzIGluIHRoZQorICAgc2FtZSBzY2hlbWEuCisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIFRvIGJlIGFibGUgdG8gY3JlYXRlIGEgdGFibGUs IHlvdSBtdXN0IGhhdmUgPGxpdGVyYWw+VVNBR0U8L2xpdGVyYWw+CisgICBw cml2aWxlZ2Ugb24gYWxsIGNvbHVtbiB0eXBlcyBvciB0aGUgdHlwZSBpbiB0 aGUgPGxpdGVyYWw+T0Y8L2xpdGVyYWw+CisgICBjbGF1c2UsIHJlc3BlY3Rp dmVseS4KKyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+ CisgIDx0aXRsZT5QYXJhbWV0ZXJzPC90aXRsZT4KKworICA8dmFyaWFibGVs aXN0PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFs PklGIE5PVCBFWElTVFM8Lz48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAg ICA8cGFyYT4KKyAgICAgIERvIG5vdCB0aHJvdyBhbiBlcnJvciBpZiBhIHN0 YXRpc3RpY3Mgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLgor ICAgICAgQSBub3RpY2UgaXMgaXNzdWVkIGluIHRoaXMgY2FzZS4gIE5vdGUg dGhhdCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdAorICAgICAgdGhlIGV4 aXN0aW5nIHN0YXRpc3RpY3MgaXMgYW55dGhpbmcgbGlrZSB0aGUgb25lIHRo YXQgd291bGQgaGF2ZSBiZWVuCisgICAgICBjcmVhdGVkLgorICAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisg ICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNzX25hbWU8L3JlcGxhY2VhYmxlPjwv dGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhl IG5hbWUgKG9wdGlvbmFsbHkgc2NoZW1hLXF1YWxpZmllZCkgb2YgdGhlIHN0 YXRpc3RpY3MgdG8gYmUgY3JlYXRlZC4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KKyAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBUaGUgbmFtZSAob3B0aW9uYWxs eSBzY2hlbWEtcXVhbGlmaWVkKSBvZiB0aGUgdGFibGUgdGhlIHN0YXRpc3Rp Y3Mgc2hvdWxkCisgICAgICBiZSBjcmVhdGVkIG9uLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8 dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0i UEFSQU1FVEVSIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+PC90ZXJtPgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBUaGUgbmFtZSBv ZiBhIGNvbHVtbiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhdGlzdGljcy4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJh bD5XSVRIICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnN0YXRp c3RpY3NfcGFyYW1ldGVyPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxl IGNsYXNzPSJQQVJBTUVURVIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4u LiBdICk8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICAuLi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0 ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4K KworICA8cmVmc2VjdDIgaWQ9IlNRTC1DUkVBVEVTVEFUSVNUSUNTLXBhcmFt ZXRlcnMiPgorICAgPHRpdGxlIGlkPSJTUUwtQ1JFQVRFU1RBVElTVElDUy1w YXJhbWV0ZXJzLXRpdGxlIj5TdGF0aXN0aWNzIFBhcmFtZXRlcnM8L3RpdGxl PgorCisgPGluZGV4dGVybSB6b25lPSJzcWwtY3JlYXRlc3RhdGlzdGljcy1w YXJhbWV0ZXJzIj4KKyAgPHByaW1hcnk+c3RhdGlzdGljcyBwYXJhbWV0ZXJz PC9wcmltYXJ5PgorIDwvaW5kZXh0ZXJtPgorCisgICA8cGFyYT4KKyAgICBU aGUgPGxpdGVyYWw+V0lUSDwvPiBjbGF1c2UgY2FuIHNwZWNpZnkgPGZpcnN0 dGVybT5zdGF0aXN0aWNzIHBhcmFtZXRlcnM8Lz4KKyAgICBmb3Igc3RhdGlz dGljcy4gVGhlIGN1cnJlbnRseSBhdmFpbGFibGUgcGFyYW1ldGVycyBhcmUg bGlzdGVkIGJlbG93LgorICAgPC9wYXJhPgorCisgICA8dmFyaWFibGVsaXN0 PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPmRl cGVuZGVuY2llczwvPiAoPHR5cGU+Ym9vbGVhbjwvPik8L3Rlcm0+CisgICAg PGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIEVuYWJsZXMgZnVuY3Rp b25hbCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBzdGF0aXN0aWNzLgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5Pgor CisgICA8L3ZhcmlhYmxlbGlzdD4KKworICA8L3JlZnNlY3QyPgorIDwvcmVm c2VjdDE+CisKKyA8cmVmc2VjdDEgaWQ9IlNRTC1DUkVBVEVTVEFUSVNUSUNT LW5vdGVzIj4KKyAgPHRpdGxlPk5vdGVzPC90aXRsZT4KKworICAgIDxwYXJh PgorICAgICAuLi4KKyAgICA8L3BhcmE+CisKKyA8L3JlZnNlY3QxPgorCisK KyA8cmVmc2VjdDEgaWQ9IlNRTC1DUkVBVEVTVEFUSVNUSUNTLWV4YW1wbGVz Ij4KKyAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworICA8cGFyYT4KKyAg IC4uLgorICA8L3BhcmE+CisKKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3Qx PgorICA8dGl0bGU+Q29tcGF0aWJpbGl0eTwvdGl0bGU+CisKKyAgPHBhcmE+ CisgICBUaGVyZSdzIG5vIDxjb21tYW5kPkNSRUFURSBTVEFUSVNUSUNTPC9j b21tYW5kPiBjb21tYW5kIGluIHRoZSBTUUwgc3RhbmRhcmQuCisgIDwvcGFy YT4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+U2Vl IEFsc288L3RpdGxlPgorCisgIDxzaW1wbGVsaXN0IHR5cGU9ImlubGluZSI+ CisgICA8bWVtYmVyPjx4cmVmIGxpbmtlbmQ9InNxbC1kcm9wc3RhdGlzdGlj cyI+PC9tZW1iZXI+CisgIDwvc2ltcGxlbGlzdD4KKyA8L3JlZnNlY3QxPgor PC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvZHJv cF9zdGF0aXN0aWNzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2Ryb3Bfc3Rh dGlzdGljcy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjRjYzBiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2Ryb3Bfc3RhdGlzdGljcy5zZ21sCkBAIC0wLDAgKzEsOTAgQEAKKzwh LS0KK2RvYy9zcmMvc2dtbC9yZWYvZHJvcF9zdGF0aXN0aWNzLnNnbWwKK1Bv c3RncmVTUUwgZG9jdW1lbnRhdGlvbgorLS0+CisKKzxyZWZlbnRyeSBpZD0i U1FMLURST1BTVEFUSVNUSUNTIj4KKyA8aW5kZXh0ZXJtIHpvbmU9InNxbC1k cm9wc3RhdGlzdGljcyI+CisgIDxwcmltYXJ5PkRST1AgU1RBVElTVElDUzwv cHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxyZWZtZXRhPgorICA8cmVm ZW50cnl0aXRsZT5EUk9QIFNUQVRJU1RJQ1M8L3JlZmVudHJ5dGl0bGU+Cisg IDxtYW52b2xudW0+NzwvbWFudm9sbnVtPgorICA8cmVmbWlzY2luZm8+U1FM IC0gTGFuZ3VhZ2UgU3RhdGVtZW50czwvcmVmbWlzY2luZm8+CisgPC9yZWZt ZXRhPgorCisgPHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPkRST1AgU1RBVElT VElDUzwvcmVmbmFtZT4KKyAgPHJlZnB1cnBvc2U+cmVtb3ZlIGEgc3RhdGlz dGljczwvcmVmcHVycG9zZT4KKyA8L3JlZm5hbWVkaXY+CisKKyA8cmVmc3lu b3BzaXNkaXY+Cis8c3lub3BzaXM+CitEUk9QIFNUQVRJU1RJQ1MgWyBJRiBF WElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmFtZTwv cmVwbGFjZWFibGU+IFssIC4uLl0KKzwvc3lub3BzaXM+CisgPC9yZWZzeW5v cHNpc2Rpdj4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkRlc2NyaXB0aW9u PC90aXRsZT4KKworICA8cGFyYT4KKyAgIDxjb21tYW5kPkRST1AgU1RBVElT VElDUzwvY29tbWFuZD4gcmVtb3ZlcyBzdGF0aXN0aWNzIGZyb20gdGhlIGRh dGFiYXNlLgorICAgT25seSB0aGUgc3RhdGlzdGljcyBvd25lciwgdGhlIHNj aGVtYSBvd25lciwgYW5kIHN1cGVydXNlciBjYW4gZHJvcCBhCisgICBzdGF0 aXN0aWNzLgorICA8L3BhcmE+CisKKyA8L3JlZnNlY3QxPgorCisgPHJlZnNl Y3QxPgorICA8dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+CisKKyAgPHZhcmlh YmxlbGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PGxpdGVy YWw+SUYgRVhJU1RTPC9saXRlcmFsPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+ CisgICAgIDxwYXJhPgorICAgICAgRG8gbm90IHRocm93IGFuIGVycm9yIGlm IHRoZSBzdGF0aXN0aWNzIGRvZXMgbm90IGV4aXN0LiBBIG5vdGljZSBpcwor ICAgICAgaXNzdWVkIGluIHRoaXMgY2FzZS4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxp c3RlbnRyeT4KKyAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+bmFtZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRl bT4KKyAgICAgPHBhcmE+CisgICAgICBUaGUgbmFtZSAob3B0aW9uYWxseSBz Y2hlbWEtcXVhbGlmaWVkKSBvZiB0aGUgc3RhdGlzdGljcyB0byBkcm9wLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorIDwvcmVmc2VjdDE+CisKKyA8 cmVmc2VjdDE+CisgIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgPHBh cmE+CisgICAuLi4KKyAgPC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworIDxy ZWZzZWN0MT4KKyAgPHRpdGxlPkNvbXBhdGliaWxpdHk8L3RpdGxlPgorCisg IDxwYXJhPgorICAgVGhlcmUncyBubyA8Y29tbWFuZD5EUk9QIFNUQVRJU1RJ Q1M8L2NvbW1hbmQ+IGNvbW1hbmQgaW4gdGhlIFNRTCBzdGFuZGFyZC4KKyAg PC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRs ZT5TZWUgQWxzbzwvdGl0bGU+CisKKyAgPHNpbXBsZWxpc3QgdHlwZT0iaW5s aW5lIj4KKyAgIDxtZW1iZXI+PHhyZWYgbGlua2VuZD0ic3FsLWNyZWF0ZXN0 YXRpc3RpY3MiPjwvbWVtYmVyPgorICA8L3NpbXBsZWxpc3Q+CisgPC9yZWZz ZWN0MT4KKworPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9yZWZlcmVuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dt bAppbmRleCAwMzAyMGRmLi4yYjA3YjJkIDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvcmVmZXJlbmNlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZmVy ZW5jZS5zZ21sCkBAIC0xMDQsNiArMTA0LDcgQEAKICAgICZjcmVhdGVTY2hl bWE7CiAgICAmY3JlYXRlU2VxdWVuY2U7CiAgICAmY3JlYXRlU2VydmVyOwor ICAgJmNyZWF0ZVN0YXRpc3RpY3M7CiAgICAmY3JlYXRlVGFibGU7CiAgICAm Y3JlYXRlVGFibGVBczsKICAgICZjcmVhdGVUYWJsZVNwYWNlOwpAQCAtMTQ3 LDYgKzE0OCw3IEBACiAgICAmZHJvcFNjaGVtYTsKICAgICZkcm9wU2VxdWVu Y2U7CiAgICAmZHJvcFNlcnZlcjsKKyAgICZkcm9wU3RhdGlzdGljczsKICAg ICZkcm9wVGFibGU7CiAgICAmZHJvcFRhYmxlU3BhY2U7CiAgICAmZHJvcFRT Q29uZmlnOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9NYWtl ZmlsZSBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvTWFrZWZpbGUKaW5kZXggMjUx MzBlYy4uMDU4YjhhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL01ha2VmaWxl CkBAIC0zMiw2ICszMiw3IEBAIFBPU1RHUkVTX0JLSV9TUkNTID0gJChhZGRw cmVmaXggJCh0b3Bfc3JjZGlyKS9zcmMvaW5jbHVkZS9jYXRhbG9nLyxcCiAJ cGdfYXR0cmRlZi5oIHBnX2NvbnN0cmFpbnQuaCBwZ19pbmhlcml0cy5oIHBn X2luZGV4LmggcGdfb3BlcmF0b3IuaCBcCiAJcGdfb3BmYW1pbHkuaCBwZ19v cGNsYXNzLmggcGdfYW0uaCBwZ19hbW9wLmggcGdfYW1wcm9jLmggXAogCXBn X2xhbmd1YWdlLmggcGdfbGFyZ2VvYmplY3RfbWV0YWRhdGEuaCBwZ19sYXJn ZW9iamVjdC5oIHBnX2FnZ3JlZ2F0ZS5oIFwKKwlwZ19tdl9zdGF0aXN0aWMu aCBcCiAJcGdfc3RhdGlzdGljLmggcGdfcmV3cml0ZS5oIHBnX3RyaWdnZXIu aCBwZ19ldmVudF90cmlnZ2VyLmggcGdfZGVzY3JpcHRpb24uaCBcCiAJcGdf Y2FzdC5oIHBnX2VudW0uaCBwZ19uYW1lc3BhY2UuaCBwZ19jb252ZXJzaW9u LmggcGdfZGVwZW5kLmggXAogCXBnX2RhdGFiYXNlLmggcGdfZGJfcm9sZV9z ZXR0aW5nLmggcGdfdGFibGVzcGFjZS5oIHBnX3BsdGVtcGxhdGUuaCBcCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvZGVwZW5kZW5jeS5jCmluZGV4IGQ2NTdj MjAuLjhiNzJkODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv ZGVwZW5kZW5jeS5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvZGVwZW5k ZW5jeS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19mb3JlaWduX3NlcnZlci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFu Z3VhZ2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xhcmdlb2JqZWN0Lmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfb3BjbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0 b3IuaCIKQEAgLTE1OSw3ICsxNjAsOCBAQCBzdGF0aWMgY29uc3QgT2lkIG9i amVjdF9jbGFzc2VzW10gPSB7CiAJRXh0ZW5zaW9uUmVsYXRpb25JZCwJCS8q IE9DTEFTU19FWFRFTlNJT04gKi8KIAlFdmVudFRyaWdnZXJSZWxhdGlvbklk LAkJLyogT0NMQVNTX0VWRU5UX1RSSUdHRVIgKi8KIAlQb2xpY3lSZWxhdGlv bklkLAkJCS8qIE9DTEFTU19QT0xJQ1kgKi8KLQlUcmFuc2Zvcm1SZWxhdGlv bklkCQkJLyogT0NMQVNTX1RSQU5TRk9STSAqLworCVRyYW5zZm9ybVJlbGF0 aW9uSWQsCQkvKiBPQ0xBU1NfVFJBTlNGT1JNICovCisJTXZTdGF0aXN0aWNS ZWxhdGlvbklkCQkvKiBPQ0xBU1NfU1RBVElTVElDUyAqLwogfTsKIAogCkBA IC0xMjcxLDYgKzEyNzMsMTAgQEAgZG9EZWxldGlvbihjb25zdCBPYmplY3RB ZGRyZXNzICpvYmplY3QsIGludCBmbGFncykKIAkJCURyb3BUcmFuc2Zvcm1C eUlkKG9iamVjdC0+b2JqZWN0SWQpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBP Q0xBU1NfU1RBVElTVElDUzoKKwkJCVJlbW92ZVN0YXRpc3RpY3NCeUlkKG9i amVjdC0+b2JqZWN0SWQpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJ CWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IGNsYXNzOiAldSIs CiAJCQkJIG9iamVjdC0+Y2xhc3NJZCk7CkBAIC0yNDE0LDYgKzI0MjAsOSBA QCBnZXRPYmplY3RDbGFzcyhjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3Qp CiAKIAkJY2FzZSBUcmFuc2Zvcm1SZWxhdGlvbklkOgogCQkJcmV0dXJuIE9D TEFTU19UUkFOU0ZPUk07CisKKwkJY2FzZSBNdlN0YXRpc3RpY1JlbGF0aW9u SWQ6CisJCQlyZXR1cm4gT0NMQVNTX1NUQVRJU1RJQ1M7CiAJfQogCiAJLyog c2hvdWxkbid0IGdldCBoZXJlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL2hlYXAuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5j CmluZGV4IGQxNGNiYjcuLjgyYzM2MzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvaGVhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv aGVhcC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWdu X3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3N0YXRpc3RpYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVz cGFjZS5oIgpAQCAtMTYxMiw3ICsxNjEzLDEwIEBAIFJlbW92ZUF0dHJpYnV0 ZUJ5SWQoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSkKIAloZWFwX2Ns b3NlKGF0dHJfcmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAogCWlmIChhdHRu dW0gPiAwKQorCXsKIAkJUmVtb3ZlU3RhdGlzdGljcyhyZWxpZCwgYXR0bnVt KTsKKwkJUmVtb3ZlTVZTdGF0aXN0aWNzKHJlbGlkLCBhdHRudW0pOworCX0K IAogCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKIH0KQEAgLTE4NDAs NiArMTg0NCwxMSBAQCBoZWFwX2Ryb3Bfd2l0aF9jYXRhbG9nKE9pZCByZWxp ZCkKIAlSZW1vdmVTdGF0aXN0aWNzKHJlbGlkLCAwKTsKIAogCS8qCisJICog ZGVsZXRlIG11bHRpLXZhcmlhdGUgc3RhdGlzdGljcworCSAqLworCVJlbW92 ZU1WU3RhdGlzdGljcyhyZWxpZCwgMCk7CisKKwkvKgogCSAqIGRlbGV0ZSBh dHRyaWJ1dGUgdHVwbGVzCiAJICovCiAJRGVsZXRlQXR0cmlidXRlVHVwbGVz KHJlbGlkKTsKQEAgLTI2OTUsNiArMjcwNCw5OSBAQCBSZW1vdmVTdGF0aXN0 aWNzKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0pCiAKIAogLyoKKyAq IFJlbW92ZU1WU3RhdGlzdGljcyAtLS0gcmVtb3ZlIGVudHJpZXMgaW4gcGdf bXZfc3RhdGlzdGljIGZvciBhIHJlbAorICoKKyAqIElmIGF0dG51bSBpcyB6 ZXJvLCByZW1vdmUgYWxsIGVudHJpZXMgZm9yIHJlbDsgZWxzZSByZW1vdmUg b25seSB0aGUgb25lKHMpCisgKiBmb3IgdGhhdCBjb2x1bW4uCisgKi8KK3Zv aWQKK1JlbW92ZU1WU3RhdGlzdGljcyhPaWQgcmVsaWQsIEF0dHJOdW1iZXIg YXR0bnVtKQoreworCVJlbGF0aW9uCXBnbXZzdGF0aXN0aWM7CisJVHVwbGVE ZXNjCXR1cGRlc2MgPSBOVUxMOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2Nh bktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsKKworCS8qCisJICog V2hlbiBkcm9wcGluZyBhIGNvbHVtbiwgd2UnbGwgZHJvcCBzdGF0aXN0aWNz IHdpdGggYSBzaW5nbGUKKwkgKiByZW1haW5pbmcgKHVuZHJvcHBlZCBjb2x1 bW4pLiBUbyBkbyB0aGF0LCB3ZSBuZWVkIHRoZSB0dXBsZQorCSAqIGRlc2Ny aXB0b3IuCisJICoKKwkgKiBXZSBhbHJlYWR5IGhhdmUgdGhlIHJlbGF0aW9u IGxvY2tlZCAoYXMgd2UncmUgcnVubmluZyBBTFRFUgorCSAqIFRBQkxFIC4u LiBEUk9QIENPTFVNTiksIHNvIHdlJ2xsIGp1c3QgZ2V0IHRoZSBkZXNjcmlw dG9yIGhlcmUuCisJICovCisJaWYgKGF0dG51bSAhPSAwKQorCXsKKwkJUmVs YXRpb24gcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgTm9Mb2NrKTsKKwor CQkvKiBtdWx0aXZhcmlhdGUgc3RhdHMgYXJlIHN1cHBvcnRlZCBvbiB0YWJs ZXMgYW5kIG1hdHZpZXdzICovCisJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2lu ZCA9PSBSRUxLSU5EX1JFTEFUSU9OIHx8CisJCQlyZWwtPnJkX3JlbC0+cmVs a2luZCA9PSBSRUxLSU5EX01BVFZJRVcpCisJCQl0dXBkZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOworCisJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9M b2NrKTsKKwl9CisKKwlpZiAodHVwZGVzYyA9PSBOVUxMKQorCQlyZXR1cm47 CisKKwlwZ212c3RhdGlzdGljID0gaGVhcF9vcGVuKE12U3RhdGlzdGljUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgm a2V5LAorCQkJCUFudW1fcGdfbXZfc3RhdGlzdGljX3N0YXJlbGlkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJ ZEdldERhdHVtKHJlbGlkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5z Y2FuKHBnbXZzdGF0aXN0aWMsCisJCQkJCQkJICBNdlN0YXRpc3RpY1JlbGlk SW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCisJ Lyogd2UgbXVzdCBsb29wIGV2ZW4gd2hlbiBhdHRudW0gIT0gMCwgaW4gY2Fz ZSBvZiBpbmhlcml0ZWQgc3RhdHMgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNW YWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJ Ym9vbCBkZWxldGUgPSB0cnVlOworCisJCWlmIChhdHRudW0gIT0gMCkKKwkJ eworCQkJRGF0dW0JCWFkYXR1bTsKKwkJCWJvb2wJCWlzbnVsbDsKKwkJCWlu dAkJCWk7CisJCQlpbnQJCQluY29sdW1ucyA9IDA7CisJCQlBcnJheVR5cGUg ICphcnI7CisJCQlpbnQxNgkgICAqYXR0bnVtczsKKworCQkJLyogZ2V0IHRo ZSBjb2x1bW5zICovCisJCQlhZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoTVZT VEFUT0lELCB0dXBsZSwKKwkJCQkJCQkJCSBBbnVtX3BnX212X3N0YXRpc3Rp Y19zdGFrZXlzLCAmaXNudWxsKTsKKwkJCUFzc2VydCghaXNudWxsKTsKKwor CQkJYXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKGFkYXR1bSk7CisJCQlhdHRu dW1zID0gKGludDE2KilBUlJfREFUQV9QVFIoYXJyKTsKKworCQkJZm9yIChp ID0gMDsgaSA8IEFSUl9ESU1TKGFycilbMF07IGkrKykKKwkJCXsKKwkJCQkv KiBjb3VudCB0aGUgY29sdW1uIHVubGVzcyBpdCdzIGhhcyBiZWVuIC8gaXMg YmVpbmcgZHJvcHBlZCAqLworCQkJCWlmICgoISB0dXBkZXNjLT5hdHRyc1th dHRudW1zW2ldLTFdLT5hdHRpc2Ryb3BwZWQpICYmCisJCQkJCShhdHRudW1z W2ldICE9IGF0dG51bSkpCisJCQkJCW5jb2x1bW5zICs9IDE7CisJCQl9CisK KwkJCS8qIGRlbGV0ZSBpZiB0aGVyZSBhcmUgbGVzcyB0aGFuIHR3byBhdHRy aWJ1dGVzICovCisJCQlkZWxldGUgPSAobmNvbHVtbnMgPCAyKTsKKwkJfQor CisJCWlmIChkZWxldGUpCisJCQlzaW1wbGVfaGVhcF9kZWxldGUocGdtdnN0 YXRpc3RpYywgJnR1cGxlLT50X3NlbGYpOworCX0KKworCXN5c3RhYmxlX2Vu ZHNjYW4oc2Nhbik7CisKKwloZWFwX2Nsb3NlKHBnbXZzdGF0aXN0aWMsIFJv d0V4Y2x1c2l2ZUxvY2spOworfQorCisKKy8qCiAgKiBSZWxhdGlvblRydW5j YXRlSW5kZXhlcyAtIHRydW5jYXRlIGFsbCBpbmRleGVzIGFzc29jaWF0ZWQK ICAqIHdpdGggdGhlIGhlYXAgcmVsYXRpb24gdG8gemVybyB0dXBsZXMuCiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9uYW1lc3BhY2Uu YyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvbmFtZXNwYWNlLmMKaW5kZXggNDQ2 YjJhYy4uZGZkNWJlZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9uYW1lc3BhY2UuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL25hbWVz cGFjZS5jCkBAIC00MjAxLDMgKzQyMDEsNTQgQEAgcGdfaXNfb3RoZXJfdGVt cF9zY2hlbWEoUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9CT09M KGlzT3RoZXJUZW1wTmFtZXNwYWNlKG9pZCkpOwogfQorCitPaWQKK2dldF9z dGF0aXN0aWNzX29pZChMaXN0ICpuYW1lcywgYm9vbCBtaXNzaW5nX29rKQor eworCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJY2hhcgkgICAqc3RhdHNfbmFt ZTsKKwlPaWQJCQluYW1lc3BhY2VJZDsKKwlPaWQJCQlzdGF0c19vaWQgPSBJ bnZhbGlkT2lkOworCUxpc3RDZWxsICAgKmw7CisKKwkvKiBkZWNvbnN0cnVj dCB0aGUgbmFtZSBsaXN0ICovCisJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1l KG5hbWVzLCAmc2NoZW1hbmFtZSwgJnN0YXRzX25hbWUpOworCisJaWYgKHNj aGVtYW5hbWUpCisJeworCQkvKiB1c2UgZXhhY3Qgc2NoZW1hIGdpdmVuICov CisJCW5hbWVzcGFjZUlkID0gTG9va3VwRXhwbGljaXROYW1lc3BhY2Uoc2No ZW1hbmFtZSwgbWlzc2luZ19vayk7CisJCWlmIChtaXNzaW5nX29rICYmICFP aWRJc1ZhbGlkKG5hbWVzcGFjZUlkKSkKKwkJCXN0YXRzX29pZCA9IEludmFs aWRPaWQ7CisJCWVsc2UKKwkJCXN0YXRzX29pZCA9IEdldFN5c0NhY2hlT2lk MihNVlNUQVROQU1FTlNQLAorCQkJCQkJCQkJCVBvaW50ZXJHZXREYXR1bShz dGF0c19uYW1lKSwKKwkJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKG5hbWVz cGFjZUlkKSk7CisJfQorCWVsc2UKKwl7CisJCS8qIHNlYXJjaCBmb3IgaXQg aW4gc2VhcmNoIHBhdGggKi8KKwkJcmVjb21wdXRlTmFtZXNwYWNlUGF0aCgp OworCisJCWZvcmVhY2gobCwgYWN0aXZlU2VhcmNoUGF0aCkKKwkJeworCQkJ bmFtZXNwYWNlSWQgPSBsZmlyc3Rfb2lkKGwpOworCisJCQlpZiAobmFtZXNw YWNlSWQgPT0gbXlUZW1wTmFtZXNwYWNlKQorCQkJCWNvbnRpbnVlOwkJLyog ZG8gbm90IGxvb2sgaW4gdGVtcCBuYW1lc3BhY2UgKi8KKwkJCXN0YXRzX29p ZCA9IEdldFN5c0NhY2hlT2lkMihNVlNUQVROQU1FTlNQLAorCQkJCQkJCQkJ ICBQb2ludGVyR2V0RGF0dW0oc3RhdHNfbmFtZSksCisJCQkJCQkJCQkgIE9i amVjdElkR2V0RGF0dW0obmFtZXNwYWNlSWQpKTsKKwkJCWlmIChPaWRJc1Zh bGlkKHN0YXRzX29pZCkpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAo IU9pZElzVmFsaWQoc3RhdHNfb2lkKSAmJiAhbWlzc2luZ19vaykKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9P QkpFQ1QpLAorCQkJCSBlcnJtc2coInN0YXRpc3RpY3MgXCIlc1wiIGRvZXMg bm90IGV4aXN0IiwKKwkJCQkJCU5hbWVMaXN0VG9TdHJpbmcobmFtZXMpKSkp OworCisJcmV0dXJuIHN0YXRzX29pZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKaW5kZXggNjVjZjNlZC4uMDgwYzMz YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRy ZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNz LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xh bmd1YWdlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdC5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3RfbWV0YWRhdGEu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZh bWlseS5oIgpAQCAtNDM2LDkgKzQzNywyMiBAQCBzdGF0aWMgY29uc3QgT2Jq ZWN0UHJvcGVydHlUeXBlIE9iamVjdFByb3BlcnR5W10gPQogCQlBbnVtX3Bn X3R5cGVfdHlwYWNsLAogCQlBQ0xfS0lORF9UWVBFLAogCQl0cnVlCisJfSwK Kwl7CisJCU12U3RhdGlzdGljUmVsYXRpb25JZCwKKwkJTXZTdGF0aXN0aWNP aWRJbmRleElkLAorCQlNVlNUQVRPSUQsCisJCU1WU1RBVE5BTUVOU1AsCisJ CUFudW1fcGdfbXZfc3RhdGlzdGljX3N0YW5hbWUsCisJCUFudW1fcGdfbXZf c3RhdGlzdGljX3N0YW5hbWVzcGFjZSwKKwkJSW52YWxpZEF0dHJOdW1iZXIs CQkvKiBYWFggc2FtZSBvd25lciBhcyByZWxhdGlvbiAqLworCQlJbnZhbGlk QXR0ck51bWJlciwJCS8qIG5vIEFDTCAoc2FtZSBhcyByZWxhdGlvbikgKi8K KwkJLTEsCQkJCQkJLyogbm8gQUNMICovCisJCXRydWUKIAl9CiB9OwogCisK IC8qCiAgKiBUaGlzIHN0cnVjdCBtYXBzIHRoZSBzdHJpbmcgb2JqZWN0IHR5 cGVzIGFzIHJldHVybmVkIGJ5CiAgKiBnZXRPYmplY3RUeXBlRGVzY3JpcHRp b24gaW50byBPYmpUeXBlIGVudW0gdmFsdWVzLiAgTm90ZSB0aGF0IHNvbWUg ZW51bQpAQCAtOTExLDYgKzkyNSwxMSBAQCBnZXRfb2JqZWN0X2FkZHJlc3Mo T2JqZWN0VHlwZSBvYmp0eXBlLCBMaXN0ICpvYmpuYW1lLCBMaXN0ICpvYmph cmdzLAogCQkJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3NfZGVmYWNs KG9iam5hbWUsIG9iamFyZ3MsCiAJCQkJCQkJCQkJCQkJbWlzc2luZ19vayk7 CiAJCQkJYnJlYWs7CisJCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNTOgorCQkJ CWFkZHJlc3MuY2xhc3NJZCA9IE12U3RhdGlzdGljUmVsYXRpb25JZDsKKwkJ CQlhZGRyZXNzLm9iamVjdElkID0gZ2V0X3N0YXRpc3RpY3Nfb2lkKG9iam5h bWUsIG1pc3Npbmdfb2spOworCQkJCWFkZHJlc3Mub2JqZWN0U3ViSWQgPSAw OworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIG9ianR5cGU6ICVkIiwgKGludCkgb2JqdHlwZSk7CiAJ CQkJLyogcGxhY2F0ZSBjb21waWxlciwgaW4gY2FzZSBpdCB0aGlua3MgZWxv ZyBtaWdodCByZXR1cm4gKi8KQEAgLTIxODMsNiArMjIwMiw5IEBAIGNoZWNr X29iamVjdF9vd25lcnNoaXAoT2lkIHJvbGVpZCwgT2JqZWN0VHlwZSBvYmp0 eXBlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiAJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAogCQkJCQkJIGVycm1z ZygibXVzdCBiZSBzdXBlcnVzZXIiKSkpOwogCQkJYnJlYWs7CisJCWNhc2Ug T0JKRUNUX1NUQVRJU1RJQ1M6CisJCQkvKiBGSVhNRSBkbyB0aGUgcmlnaHQg b3duZXIgY2hlY2tzIGhlcmUgKi8KKwkJCWJyZWFrOwogCQlkZWZhdWx0Ogog CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZTogJWQi LAogCQkJCSAoaW50KSBvYmp0eXBlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCA5MjNmZTU4Li4yNDIzOTg1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3 cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Mu c3FsCkBAIC0xNTgsNiArMTU4LDE3IEBAIENSRUFURSBWSUVXIHBnX2luZGV4 ZXMgQVMKICAgICAgICAgIExFRlQgSk9JTiBwZ190YWJsZXNwYWNlIFQgT04g KFQub2lkID0gSS5yZWx0YWJsZXNwYWNlKQogICAgIFdIRVJFIEMucmVsa2lu ZCBJTiAoJ3InLCAnbScpIEFORCBJLnJlbGtpbmQgPSAnaSc7CiAKK0NSRUFU RSBWSUVXIHBnX212X3N0YXRzIEFTCisgICAgU0VMRUNUCisgICAgICAgIE4u bnNwbmFtZSBBUyBzY2hlbWFuYW1lLAorICAgICAgICBDLnJlbG5hbWUgQVMg dGFibGVuYW1lLAorICAgICAgICBTLnN0YW5hbWUgQVMgc3RhbmFtZSwKKyAg ICAgICAgUy5zdGFrZXlzIEFTIGF0dG51bXMsCisgICAgICAgIGxlbmd0aChT LnN0YWRlcHMpIGFzIGRlcHNieXRlcywKKyAgICAgICAgcGdfbXZfc3RhdHNf ZGVwZW5kZW5jaWVzX2luZm8oUy5zdGFkZXBzKSBhcyBkZXBzaW5mbworICAg IEZST00gKHBnX212X3N0YXRpc3RpYyBTIEpPSU4gcGdfY2xhc3MgQyBPTiAo Qy5vaWQgPSBTLnN0YXJlbGlkKSkKKyAgICAgICAgTEVGVCBKT0lOIHBnX25h bWVzcGFjZSBOIE9OIChOLm9pZCA9IEMucmVsbmFtZXNwYWNlKTsKKwogQ1JF QVRFIFZJRVcgcGdfc3RhdHMgV0lUSCAoc2VjdXJpdHlfYmFycmllcikgQVMK ICAgICBTRUxFQ1QKICAgICAgICAgbnNwbmFtZSBBUyBzY2hlbWFuYW1lLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCBiMWFjNzA0Li41 MTUxMDAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtl ZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAt MTgsOCArMTgsOCBAQCBPQkpTID0gYWdncmVnYXRlY21kcy5vIGFsdGVyLm8g YW5hbHl6ZS5vIGFzeW5jLm8gY2x1c3Rlci5vIGNvbW1lbnQubyAgXAogCWV2 ZW50X3RyaWdnZXIubyBleHBsYWluLm8gZXh0ZW5zaW9uLm8gZm9yZWlnbmNt ZHMubyBmdW5jdGlvbmNtZHMubyBcCiAJaW5kZXhjbWRzLm8gbG9ja2NtZHMu byBtYXR2aWV3Lm8gb3BlcmF0b3JjbWRzLm8gb3BjbGFzc2NtZHMubyBcCiAJ cG9saWN5Lm8gcG9ydGFsY21kcy5vIHByZXBhcmUubyBwcm9jbGFuZy5vIFwK LQlzY2hlbWFjbWRzLm8gc2VjbGFiZWwubyBzZXF1ZW5jZS5vIHRhYmxlY21k cy5vIHRhYmxlc3BhY2UubyB0cmlnZ2VyLm8gXAotCXRzZWFyY2hjbWRzLm8g dHlwZWNtZHMubyB1c2VyLm8gdmFjdXVtLm8gdmFjdXVtbGF6eS5vIFwKLQl2 YXJpYWJsZS5vIHZpZXcubworCXNjaGVtYWNtZHMubyBzZWNsYWJlbC5vIHNl cXVlbmNlLm8gc3RhdHNjbWRzLm8gXAorCXRhYmxlY21kcy5vIHRhYmxlc3Bh Y2UubyB0cmlnZ2VyLm8gdHNlYXJjaGNtZHMubyB0eXBlY21kcy5vIFwKKwl1 c2VyLm8gdmFjdXVtLm8gdmFjdXVtbGF6eS5vIHZhcmlhYmxlLm8gdmlldy5v CiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24u bWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYwppbmRleCAwNzBk ZjI5Li5jYmFhNGUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9hbmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6 ZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRl eGluZy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0c19mbi5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kYmNvbW1h bmRzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCkBAIC01 NSw3ICs1NiwxMSBAQAogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAidXRpbHMv dHF1YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAKKyNpbmNsdWRlICJ1dGlscy9tdnN0 YXRzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3N5c2F0dHIuaCIKIAogLyogUGVy LWluZGV4IGRhdGEgZm9yIEFOQUxZWkUgKi8KIHR5cGVkZWYgc3RydWN0IEFu bEluZGV4RGF0YQpAQCAtNDYwLDYgKzQ2NSwxOSBAQCBkb19hbmFseXplX3Jl bChSZWxhdGlvbiBvbmVyZWwsIGludCBvcHRpb25zLCBWYWN1dW1QYXJhbXMg KnBhcmFtcywKIAkgKiBhbGwgYW5hbHl6YWJsZSBjb2x1bW5zLiAgV2UgdXNl IGEgbG93ZXIgYm91bmQgb2YgMTAwIHJvd3MgdG8gYXZvaWQKIAkgKiBwb3Nz aWJsZSBvdmVyZmxvdyBpbiBWaXR0ZXIncyBhbGdvcml0aG0uICAoTm90ZTog dGhhdCB3aWxsIGFsc28gYmUgdGhlCiAJICogdGFyZ2V0IGluIHRoZSBjb3Ju ZXIgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gYW5hbHl6YWJsZSBjb2x1bW5z LikKKwkgKgorCSAqIEZJWE1FIFRoaXMgc2FtcGxlIHNpemluZyBpcyBtb3N0 bHkgT0sgd2hlbiBjb21wdXRpbmcgc3RhdHMgZm9yCisJICogICAgICAgaW5k aXZpZHVhbCBjb2x1bW5zLCBidXQgd2hlbiBjb21wdXRpbmcgbXVsdGktdmFy aWF0ZSBzdGF0cworCSAqICAgICAgIGZvciBtdWx0aXZhcmlhdGUgc3RhdHMg KGhpc3RvZ3JhbXMsIG1jdiwgLi4uKSBpdCdzIHJhdGhlcgorCSAqICAgICAg IGluc3VmZmljaWVudC4gRm9yIHN0YXRzIG9uIG11bHRpcGxlIGNvbHVtbnMg LyBjb21wbGV4IHN0YXRzCisJICogICAgICAgd2UgbmVlZCBsYXJnZXIgc2Ft cGxlIHNpemVzLCBiZWNhdXNlIHdlIG5lZWQgdG8gYnVpbGQgbW9yZQorCSAq ICAgICAgIGRldGFpbGVkIHN0YXRzIChtb3JlIE1DViBpdGVtcyAvIGhpc3Rv Z3JhbSBidWNrZXRzKSB0byBnZXQKKwkgKiAgICAgICBnb29kIGFjY3VyYWN5 LiBNYXliZSBpdCdkIGJlIGFwcHJvcHJpYXRlIHRvIHVzZSBzYW1wbGVzCisJ ICogICAgICAgcHJvcG9ydGlvbmFsIHRvIHRoZSB0YWJsZSAoc2F5LCAwLjUl IC0gMSUpIGluc3RlYWQgb2YgYQorCSAqICAgICAgIGZpeGVkIHNpemUgbWln aHQgYmUgbW9yZSBhcHByb3ByaWF0ZS4gQWxzbywgdGhpcyBzaG91bGQgYmUK KwkgKiAgICAgICBib3VuZCB0byB0aGUgcmVxdWVzdGVkIHN0YXRpc3RpY3Mg c2l6ZSAtIGUuZy4gbnVtYmVyIG9mIE1DVgorCSAqICAgICAgIGl0ZW1zIG9y IGhpc3RvZ3JhbSBidWNrZXRzIHNob3VsZCByZXF1aXJlIHNldmVyYWwgc2Ft cGxlCisJICogICAgICAgcm93cyBwZXIgaXRlbS9idWNrZXQgKHNvIHRoZSBz YW1wbGUgc2hvdWxkIGJlIGsqc2l6ZSkuCiAJICovCiAJdGFyZ3Jvd3MgPSAx MDA7CiAJZm9yIChpID0gMDsgaSA8IGF0dHJfY250OyBpKyspCkBAIC01NjIs NiArNTgwLDkgQEAgZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBp bnQgb3B0aW9ucywgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJCQl1cGRhdGVf YXR0c3RhdHMoUmVsYXRpb25HZXRSZWxpZChJcmVsW2luZF0pLCBmYWxzZSwK IAkJCQkJCQl0aGlzZGF0YS0+YXR0cl9jbnQsIHRoaXNkYXRhLT52YWNhdHRy c3RhdHMpOwogCQl9CisKKwkJLyogQnVpbGQgbXVsdGl2YXJpYXRlIHN0YXRz IChpZiB0aGVyZSBhcmUgYW55KS4gKi8KKwkJYnVpbGRfbXZfc3RhdHMob25l cmVsLCBudW1yb3dzLCByb3dzLCBhdHRyX2NudCwgdmFjYXR0cnN0YXRzKTsK IAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZHJvcGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ryb3BjbWRzLmMK aW5kZXggNTIyMDI3YS4uY2Q2NWI1OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZHJvcGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9kcm9wY21kcy5jCkBAIC0yOTIsNiArMjkyLDEwIEBAIGRvZXNfbm90 X2V4aXN0X3NraXBwaW5nKE9iamVjdFR5cGUgb2JqdHlwZSwgTGlzdCAqb2Jq bmFtZSwgTGlzdCAqb2JqYXJncykKIAkJCW1zZyA9IGdldHRleHRfbm9vcCgi c2NoZW1hIFwiJXNcIiBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmciKTsKIAkJ CW5hbWUgPSBOYW1lTGlzdFRvU3RyaW5nKG9iam5hbWUpOwogCQkJYnJlYWs7 CisJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ1M6CisJCQltc2cgPSBnZXR0ZXh0 X25vb3AoInN0YXRpc3RpY3MgXCIlc1wiIGRvZXMgbm90IGV4aXN0LCBza2lw cGluZyIpOworCQkJbmFtZSA9IE5hbWVMaXN0VG9TdHJpbmcob2JqbmFtZSk7 CisJCQlicmVhazsKIAkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CiAJCQlpZiAo IXNjaGVtYV9kb2VzX25vdF9leGlzdF9za2lwcGluZyhvYmpuYW1lLCAmbXNn LCAmbmFtZSkpCiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMKaW5kZXggOWUzMmY4ZC4uMDkwNjFiYiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAt MTEwLDYgKzExMCw3IEBAIHN0YXRpYyBldmVudF90cmlnZ2VyX3N1cHBvcnRf ZGF0YSBldmVudF90cmlnZ2VyX3N1cHBvcnRbXSA9IHsKIAl7IlNDSEVNQSIs IHRydWV9LAogCXsiU0VRVUVOQ0UiLCB0cnVlfSwKIAl7IlNFUlZFUiIsIHRy dWV9LAorCXsiU1RBVElTVElDUyIsIHRydWV9LAogCXsiVEFCTEUiLCB0cnVl fSwKIAl7IlRBQkxFU1BBQ0UiLCBmYWxzZX0sCiAJeyJUUkFOU0ZPUk0iLCB0 cnVlfSwKQEAgLTExMDYsNiArMTEwNyw3IEBAIEV2ZW50VHJpZ2dlclN1cHBv cnRzT2JqZWN0VHlwZShPYmplY3RUeXBlIG9idHlwZSkKIAkJY2FzZSBPQkpF Q1RfUlVMRToKIAkJY2FzZSBPQkpFQ1RfU0NIRU1BOgogCQljYXNlIE9CSkVD VF9TRVFVRU5DRToKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDUzoKIAkJY2Fz ZSBPQkpFQ1RfVEFCQ09OU1RSQUlOVDoKIAkJY2FzZSBPQkpFQ1RfVEFCTEU6 CiAJCWNhc2UgT0JKRUNUX1RSQU5TRk9STToKQEAgLTExNjcsNiArMTE2OSw3 IEBAIEV2ZW50VHJpZ2dlclN1cHBvcnRzT2JqZWN0Q2xhc3MoT2JqZWN0Q2xh c3Mgb2JqY2xhc3MpCiAJCWNhc2UgT0NMQVNTX0RFRkFDTDoKIAkJY2FzZSBP Q0xBU1NfRVhURU5TSU9OOgogCQljYXNlIE9DTEFTU19QT0xJQ1k6CisJCWNh c2UgT0NMQVNTX1NUQVRJU1RJQ1M6CiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhOGIxMwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5jCkBA IC0wLDAgKzEsMzMxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBzdGF0c2NtZHMuYworICoJICBDb21tYW5kcyBmb3IgY3Jl YXRpbmcgYW5kIGFsdGVyaW5nIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTUsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgorI2luY2x1 ZGUgImFjY2Vzcy9oZWFwYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4 YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKKyNpbmNs dWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgorI2luY2x1ZGUgImFjY2Vzcy9zeXNh dHRyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGxvZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgor I2luY2x1ZGUgImNhdGFsb2cvZGVwZW5kZW5jeS5oIgorI2luY2x1ZGUgImNh dGFsb2cvaGVhcC5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIKKyNp bmNsdWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFjY2Vz cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVp Z25fdGFibGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0c19mbi5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29w Y2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2UuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGVf Zm4uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3N0b3JhZ2UuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3RvYXN0aW5nLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvY2x1 c3Rlci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2NvbW1lbnQuaCIKKyNpbmNs dWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9l dmVudF90cmlnZ2VyLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvcG9saWN5Lmgi CisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJj b21tYW5kcy90YWJsZWNtZHMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJs ZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgorI2lu Y2x1ZGUgImNvbW1hbmRzL3R5cGVjbWRzLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvdXNlci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisj aW5jbHVkZSAiZm9yZWlnbi9mb3JlaWduLmgiCisjaW5jbHVkZSAibWlzY2Fk bWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVk ZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vu b2Rlcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCisjaW5j bHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIv cGFyc2VfY2xhdXNlLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvZXJj ZS5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCisjaW5j bHVkZSAicGFyc2VyL3BhcnNlX2V4cHIuaCIKKyNpbmNsdWRlICJwYXJzZXIv cGFyc2Vfb3Blci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlv bi5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV90eXBlLmgiCisjaW5jbHVk ZSAicGFyc2VyL3BhcnNlX3V0aWxjbWQuaCIKKyNpbmNsdWRlICJwYXJzZXIv cGFyc2VyLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmV3 cml0ZS9yZXdyaXRlRGVmaW5lLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdy aXRlSGFuZGxlci5oIgorI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZU1hbmlw LmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJz dG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xvY2suaCIKKyNp bmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInN0b3Jh Z2Uvc21nci5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMu aCIKKyNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgorI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisj aW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9y dWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCisjaW5j bHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy90cXVh bC5oIgorI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCisjaW5jbHVkZSAi dXRpbHMvbXZzdGF0cy5oIgorCisKKy8qIHVzZWQgZm9yIHNvcnRpbmcgdGhl IGF0dG51bXMgaW4gRXhlY0NyZWF0ZVN0YXRpc3RpY3MgKi8KK3N0YXRpYyBp bnQgY29tcGFyZV9pbnQxNihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi KQoreworCXJldHVybiBtZW1jbXAoYSwgYiwgc2l6ZW9mKGludDE2KSk7Cit9 CisKKy8qCisgKiBJbXBsZW1lbnRzIHRoZSBDUkVBVEUgU1RBVElTVElDUyBu YW1lIE9OIHRhYmxlIChjb2x1bW5zKSBXSVRIIChvcHRpb25zKQorICoKKyAq IFRPRE8gQ2hlY2sgdGhhdCB0aGUgdHlwZXMgc3VwcG9ydCBzb3J0LCBhbHRo b3VnaCBtYXliZSB3ZSBjYW4gbGl2ZQorICogICAgICB3aXRob3V0IGl0IChh bmQgb25seSBidWlsZCBNQ1YgbGlzdCAvIGFzc29jaWF0aW9uIHJ1bGVzKS4K KyAqCisgKiBUT0RPIFRoaXMgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBk dXBsaWNhdGUgc3RhdHMgKGkuZS4gc2FtZQorICogICAgICBrZXlzLCBzYW1l IG9wdGlvbnMpLiBBbHRob3VnaCBtYXliZSBpdCdzIHVzZWZ1bCB0byBoYXZl CisgKiAgICAgIG11bHRpcGxlIHN0YXRzIG9uIHRoZSBzYW1lIGNvbHVtbnMg d2l0aCBkaWZmZXJlbnQgb3B0aW9ucworICogICAgICAoc2F5LCBhIGRldGFp bGVkIE1DVi1vbmx5IHN0YXRzIGZvciBzb21lIHF1ZXJpZXMsIGhpc3RvZ3Jh bQorICogICAgICBmb3Igb3RoZXJzLCBldGMuKQorICovCitPYmplY3RBZGRy ZXNzCitDcmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkK K3sKKwlpbnQJCQlpLCBqOworCUxpc3RDZWxsICAgKmw7CisJaW50MTYJCWF0 dG51bXNbSU5ERVhfTUFYX0tFWVNdOworCWludAkJCW51bWNvbHMgPSAwOwor CU9iamVjdEFkZHJlc3MJYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRyZXNz OworCWNoYXIJICAgKm5hbWVzdHI7CisJTmFtZURhdGEJc3RhbmFtZTsKKwlP aWQJCQlzdGF0b2lkOworCU9pZAkJCW5hbWVzcGFjZUlkOworCisJSGVhcFR1 cGxlCWh0dXA7CisJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19tdl9zdGF0aXN0 aWNdOworCWJvb2wJCW51bGxzW05hdHRzX3BnX212X3N0YXRpc3RpY107CisJ aW50MnZlY3RvciAqc3Rha2V5czsKKwlSZWxhdGlvbgltdnN0YXRyZWw7CisJ UmVsYXRpb24JcmVsOworCU9iamVjdEFkZHJlc3MgcGFyZW50b2JqZWN0LCBj aGlsZG9iamVjdDsKKworCS8qIGJ5IGRlZmF1bHQgYnVpbGQgbm90aGluZyAq LworCWJvb2wgCWJ1aWxkX2RlcGVuZGVuY2llcyA9IGZhbHNlOworCisJQXNz ZXJ0KElzQShzdG10LCBDcmVhdGVTdGF0c1N0bXQpKTsKKworCS8qIHJlc29s dmUgdGhlIHBpZWNlcyBvZiB0aGUgbmFtZSAobmFtZXNwYWNlIGV0Yy4pICov CisJbmFtZXNwYWNlSWQgPSBRdWFsaWZpZWROYW1lR2V0Q3JlYXRpb25OYW1l c3BhY2Uoc3RtdC0+ZGVmbmFtZXMsICZuYW1lc3RyKTsKKwluYW1lc3RyY3B5 KCZzdGFuYW1lLCBuYW1lc3RyKTsKKworCS8qCisJICogSWYgaWZfbm90X2V4 aXN0cyB3YXMgZ2l2ZW4gYW5kIHRoZSBzdGF0aXN0aWNzIGFscmVhZHkgZXhp c3RzLCBiYWlsIG91dC4KKwkgKi8KKwlpZiAoc3RtdC0+aWZfbm90X2V4aXN0 cyAmJgorCQlTZWFyY2hTeXNDYWNoZUV4aXN0czIoTVZTVEFUTkFNRU5TUCwK KwkJCQkJCQkgIFBvaW50ZXJHZXREYXR1bSgmc3RhbmFtZSksCisJCQkJCQkJ ICBPYmplY3RJZEdldERhdHVtKG5hbWVzcGFjZUlkKSkpCisJeworCQllcmVw b3J0KE5PVElDRSwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RVUExJQ0FURV9P QkpFQ1QpLAorCQkJCSBlcnJtc2coInN0YXRpc3RpY3MgXCIlc1wiIGFscmVh ZHkgZXhpc3RzLCBza2lwcGluZyIsCisJCQkJCQluYW1lc3RyKSkpOworCQly ZXR1cm4gSW52YWxpZE9iamVjdEFkZHJlc3M7CisJfQorCisJcmVsID0gaGVh cF9vcGVucnYoc3RtdC0+cmVsYXRpb24sIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sp OworCisJLyogdHJhbnNmb3JtIHRoZSBjb2x1bW4gbmFtZXMgdG8gYXR0bnVt IHZhbHVlcyAqLworCisJZm9yZWFjaChsLCBzdG10LT5rZXlzKQorCXsKKwkJ Y2hhcgkgICAqYXR0bmFtZSA9IHN0clZhbChsZmlyc3QobCkpOworCQlIZWFw VHVwbGUJYXR0dHVwbGU7CisKKwkJYXR0dHVwbGUgPSBTZWFyY2hTeXNDYWNo ZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRuYW1lKTsKKwor CQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0dHVwbGUpKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09M VU1OKSwKKwkJCQkJIGVycm1zZygiY29sdW1uIFwiJXNcIiByZWZlcmVuY2Vk IGluIHN0YXRpc3RpY3MgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCWF0dG5h bWUpKSk7CisKKwkJLyogbW9yZSB0aGFuIE1WSElTVF9NQVhfRElNRU5TSU9O UyBjb2x1bW5zIG5vdCBhbGxvd2VkICovCisJCWlmIChudW1jb2xzID49IE1W U1RBVFNfTUFYX0RJTUVOU0lPTlMpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX1RPT19NQU5ZX0NPTFVNTlMpLAorCQkJCQkg ZXJybXNnKCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gJWQga2V5cyBpbiBhIHN0 YXRpc3RpY3MiLAorCQkJCQkJCU1WU1RBVFNfTUFYX0RJTUVOU0lPTlMpKSk7 CisKKwkJYXR0bnVtc1tudW1jb2xzXSA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUp IEdFVFNUUlVDVChhdHR0dXBsZSkpLT5hdHRudW07CisJCVJlbGVhc2VTeXND YWNoZShhdHR0dXBsZSk7CisJCW51bWNvbHMrKzsKKwl9CisKKwkvKgorCSAq IENoZWNrIHRoZSBsb3dlciBib3VuZCAoYXQgbGVhc3QgMiBjb2x1bW5zKSwg dGhlIHVwcGVyIGJvdW5kIHdhcworCSAqIGFscmVhZHkgY2hlY2tlZCBpbiB0 aGUgbG9vcC4KKwkgKi8KKwlpZiAobnVtY29scyA8IDIpCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1RPT19NQU5ZX0NPTFVN TlMpLAorCQkJCQkgZXJybXNnKCJtdWx0aXZhcmlhdGUgc3RhdHMgcmVxdWly ZSAyIG9yIG1vcmUgY29sdW1ucyIpKSk7CisKKwkvKiBsb29rIGZvciBkdXBs aWNpdGllcyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1jb2xzOyBpKyspCisJ CWZvciAoaiA9IDA7IGogPCBudW1jb2xzOyBqKyspCisJCQlpZiAoKGkgIT0g aikgJiYgKGF0dG51bXNbaV0gPT0gYXR0bnVtc1tqXSkpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NP TFVNTiksCisJCQkJCQkgZXJybXNnKCJkdXBsaWNhdGUgY29sdW1uIG5hbWUg aW4gc3RhdGlzdGljcyBkZWZpbml0aW9uIikpKTsKKworCS8qIHBhcnNlIHRo ZSBzdGF0aXN0aWNzIG9wdGlvbnMgKi8KKwlmb3JlYWNoIChsLCBzdG10LT5v cHRpb25zKQorCXsKKwkJRGVmRWxlbSAqb3B0ID0gKERlZkVsZW0qKWxmaXJz dChsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgImRlcGVuZGVu Y2llcyIpID09IDApCisJCQlidWlsZF9kZXBlbmRlbmNpZXMgPSBkZWZHZXRC b29sZWFuKG9wdCk7CisJCWVsc2UKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJIGVycm1z ZygidW5yZWNvZ25pemVkIFNUQVRJU1RJQ1Mgb3B0aW9uIFwiJXNcIiIsCisJ CQkJCQkJb3B0LT5kZWZuYW1lKSkpOworCX0KKworCS8qIGNoZWNrIHRoYXQg YXQgbGVhc3Qgc29tZSBzdGF0aXN0aWNzIHdlcmUgcmVxdWVzdGVkICovCisJ aWYgKCEgYnVpbGRfZGVwZW5kZW5jaWVzKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkgZXJy bXNnKCJubyBzdGF0aXN0aWNzIHR5cGUgKGRlcGVuZGVuY2llcykgd2FzIHJl cXVlc3RlZCIpKSk7CisKKwkvKiBzb3J0IHRoZSBhdHRudW1zIGFuZCBidWls ZCBpbnQydmVjdG9yICovCisJcXNvcnQoYXR0bnVtcywgbnVtY29scywgc2l6 ZW9mKGludDE2KSwgY29tcGFyZV9pbnQxNik7CisJc3Rha2V5cyA9IGJ1aWxk aW50MnZlY3RvcihhdHRudW1zLCBudW1jb2xzKTsKKworCS8qCisJICogT2th eSwgbGV0J3MgY3JlYXRlIHRoZSBwZ19tdl9zdGF0aXN0aWMgZW50cnkuCisJ ICovCisJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOworCW1l bXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOworCisJLyogbm8g c3RhdHMgY29sbGVjdGVkIHlldCwgc28ganVzdCB0aGUga2V5cyAqLworCXZh bHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFyZWxpZC0xXSA9IE9iamVj dElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwl2YWx1ZXNb QW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFtZSAtMV0gPSBOYW1lR2V0RGF0 dW0oJnN0YW5hbWUpOworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19z dGFuYW1lc3BhY2UgLTFdID0gT2JqZWN0SWRHZXREYXR1bShuYW1lc3BhY2VJ ZCk7CisKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cyAt MV0gPSBQb2ludGVyR2V0RGF0dW0oc3Rha2V5cyk7CisKKwl2YWx1ZXNbQW51 bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19lbmFibGVkIC0xXSA9IEJvb2xHZXRE YXR1bShidWlsZF9kZXBlbmRlbmNpZXMpOworCisJbnVsbHNbQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhZGVwcyAgLTFdID0gdHJ1ZTsKKworCS8qIGluc2Vy dCB0aGUgdHVwbGUgaW50byBwZ19tdl9zdGF0aXN0aWMgKi8KKwltdnN0YXRy ZWwgPSBoZWFwX29wZW4oTXZTdGF0aXN0aWNSZWxhdGlvbklkLCBSb3dFeGNs dXNpdmVMb2NrKTsKKworCWh0dXAgPSBoZWFwX2Zvcm1fdHVwbGUobXZzdGF0 cmVsLT5yZF9hdHQsIHZhbHVlcywgbnVsbHMpOworCisJc2ltcGxlX2hlYXBf aW5zZXJ0KG12c3RhdHJlbCwgaHR1cCk7CisKKwlDYXRhbG9nVXBkYXRlSW5k ZXhlcyhtdnN0YXRyZWwsIGh0dXApOworCisJc3RhdG9pZCA9IEhlYXBUdXBs ZUdldE9pZChodHVwKTsKKworCWhlYXBfZnJlZXR1cGxlKGh0dXApOworCisK KwkvKgorCSAqIFN0b3JlIGEgZGVwZW5kZW5jeSB0b28sIHNvIHRoYXQgc3Rh dGlzdGljcyBhcmUgZHJvcHBlZCBvbiBEUk9QIFRBQkxFCisJICovCisJcGFy ZW50b2JqZWN0LmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJcGFy ZW50b2JqZWN0Lm9iamVjdElkID0gT2JqZWN0SWRHZXREYXR1bShSZWxhdGlv bkdldFJlbGlkKHJlbCkpOworCXBhcmVudG9iamVjdC5vYmplY3RTdWJJZCA9 IDA7CisJY2hpbGRvYmplY3QuY2xhc3NJZCA9IE12U3RhdGlzdGljUmVsYXRp b25JZDsKKwljaGlsZG9iamVjdC5vYmplY3RJZCA9IHN0YXRvaWQ7CisJY2hp bGRvYmplY3Qub2JqZWN0U3ViSWQgPSAwOworCisJcmVjb3JkRGVwZW5kZW5j eU9uKCZjaGlsZG9iamVjdCwgJnBhcmVudG9iamVjdCwgREVQRU5ERU5DWV9B VVRPKTsKKworCS8qCisJICogQWxzbyByZWNvcmQgZGVwZW5kZW5jeSBvbiB0 aGUgc2NoZW1hICh0byBkcm9wIHN0YXRpc3RpY3Mgb24gRFJPUCBTQ0hFTUEp CisJICovCisJcGFyZW50b2JqZWN0LmNsYXNzSWQgPSBOYW1lc3BhY2VSZWxh dGlvbklkOworCXBhcmVudG9iamVjdC5vYmplY3RJZCA9IE9iamVjdElkR2V0 RGF0dW0obmFtZXNwYWNlSWQpOworCXBhcmVudG9iamVjdC5vYmplY3RTdWJJ ZCA9IDA7CisJY2hpbGRvYmplY3QuY2xhc3NJZCA9IE12U3RhdGlzdGljUmVs YXRpb25JZDsKKwljaGlsZG9iamVjdC5vYmplY3RJZCA9IHN0YXRvaWQ7CisJ Y2hpbGRvYmplY3Qub2JqZWN0U3ViSWQgPSAwOworCisJcmVjb3JkRGVwZW5k ZW5jeU9uKCZjaGlsZG9iamVjdCwgJnBhcmVudG9iamVjdCwgREVQRU5ERU5D WV9BVVRPKTsKKworCisJaGVhcF9jbG9zZShtdnN0YXRyZWwsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOwor CisJLyoKKwkgKiBJbnZhbGlkYXRlIHJlbGNhY2hlIHNvIHRoYXQgb3RoZXJz IHNlZSB0aGUgbmV3IHN0YXRpc3RpY3MuCisJICovCisJQ2FjaGVJbnZhbGlk YXRlUmVsY2FjaGUocmVsKTsKKworCU9iamVjdEFkZHJlc3NTZXQoYWRkcmVz cywgTXZTdGF0aXN0aWNSZWxhdGlvbklkLCBzdGF0b2lkKTsKKworCXJldHVy biBhZGRyZXNzOworfQorCisKKy8qCisgKiBJbXBsZW1lbnRzIHRoZSBEUk9Q IFNUQVRJU1RJQ1MKKyAqCisgKiAgICAgRFJPUCBTVEFUSVNUSUNTIHN0YXRz X25hbWUgT04gdGFibGVfbmFtZQorICoKKyAqIFRoZSBmaXJzdCBvbmUgcmVx dWlyZXMgYW4gZXhhY3QgbWF0Y2gsIHRoZSBzZWNvbmQgb25lIGp1c3QgZHJv cHMKKyAqIGFsbCB0aGUgc3RhdGlzdGljcyBvbiBhIHRhYmxlLgorICovCit2 b2lkCitSZW1vdmVTdGF0aXN0aWNzQnlJZChPaWQgc3RhdHNPaWQpCit7CisJ UmVsYXRpb24JcmVsYXRpb247CisJSGVhcFR1cGxlCXR1cDsKKworCS8qCisJ ICogRGVsZXRlIHRoZSBwZ19wcm9jIHR1cGxlLgorCSAqLworCXJlbGF0aW9u ID0gaGVhcF9vcGVuKE12U3RhdGlzdGljUmVsYXRpb25JZCwgUm93RXhjbHVz aXZlTG9jayk7CisKKwl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoTVZTVEFUT0lE LCBPYmplY3RJZEdldERhdHVtKHN0YXRzT2lkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR1cCkpIC8qIHNob3VsZCBub3QgaGFwcGVuICovCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzdGF0aXN0aWNz ICV1Iiwgc3RhdHNPaWQpOworCisJc2ltcGxlX2hlYXBfZGVsZXRlKHJlbGF0 aW9uLCAmdHVwLT50X3NlbGYpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cCk7 CisKKwloZWFwX2Nsb3NlKHJlbGF0aW9uLCBSb3dFeGNsdXNpdmVMb2NrKTsK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXgg MGI0YTMzNC4uNWY0MjIwZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJjYXRh bG9nL3BnX2ZvcmVpZ25fdGFibGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2luaGVyaXRzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0c19m bi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX29wY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Rh Ymxlc3BhY2UuaCIKQEAgLTkzLDcgKzk0LDcgQEAKICNpbmNsdWRlICJ1dGls cy9zeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3RxdWFsLmgiCiAjaW5j bHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKLQorI2luY2x1ZGUgInV0aWxzL212 c3RhdHMuaCIKIAogLyoKICAqIE9OIENPTU1JVCBhY3Rpb24gbGlzdApAQCAt MTQxLDggKzE0Miw5IEBAIHN0YXRpYyBMaXN0ICpvbl9jb21taXRzID0gTklM OwogI2RlZmluZSBBVF9QQVNTX0FERF9DT0wJCQk1CQkvKiBBREQgQ09MVU1O ICovCiAjZGVmaW5lIEFUX1BBU1NfQUREX0lOREVYCQk2CQkvKiBBREQgaW5k ZXhlcyAqLwogI2RlZmluZSBBVF9QQVNTX0FERF9DT05TVFIJCTcJCS8qIEFE RCBjb25zdHJhaW50cywgZGVmYXVsdHMgKi8KLSNkZWZpbmUgQVRfUEFTU19N SVNDCQkJOAkJLyogb3RoZXIgc3R1ZmYgKi8KLSNkZWZpbmUgQVRfTlVNX1BB U1NFUwkJCTkKKyNkZWZpbmUgQVRfUEFTU19BRERfU1RBVFMJCTgJCS8qIEFE RCBzdGF0aXN0aWNzICovCisjZGVmaW5lIEFUX1BBU1NfTUlTQwkJCTkJCS8q IG90aGVyIHN0dWZmICovCisjZGVmaW5lIEFUX05VTV9QQVNTRVMJCQkxMAog CiB0eXBlZGVmIHN0cnVjdCBBbHRlcmVkVGFibGVJbmZvCiB7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNr ZW5kL25vZGVzL2NvcHlmdW5jcy5jCmluZGV4IGY0N2UwZGEuLjQwN2I0YTAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCkBAIC00MTE5LDYg KzQxMTksMTkgQEAgX2NvcHlBbHRlclBvbGljeVN0bXQoY29uc3QgQWx0ZXJQ b2xpY3lTdG10ICpmcm9tKQogCXJldHVybiBuZXdub2RlOwogfQogCitzdGF0 aWMgQ3JlYXRlU3RhdHNTdG10ICoKK19jb3B5Q3JlYXRlU3RhdHNTdG10KGNv bnN0IENyZWF0ZVN0YXRzU3RtdCAqZnJvbSkKK3sKKwlDcmVhdGVTdGF0c1N0 bXQgICpuZXdub2RlID0gbWFrZU5vZGUoQ3JlYXRlU3RhdHNTdG10KTsKKwor CUNPUFlfTk9ERV9GSUVMRChkZWZuYW1lcyk7CisJQ09QWV9OT0RFX0ZJRUxE KHJlbGF0aW9uKTsKKwlDT1BZX05PREVfRklFTEQoa2V5cyk7CisJQ09QWV9O T0RFX0ZJRUxEKG9wdGlvbnMpOworCisJcmV0dXJuIG5ld25vZGU7Cit9CisK IC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQlwZ19saXN0LmggY29w eSBmdW5jdGlvbnMKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ5NjYs NiArNDk3OSw5IEBAIGNvcHlPYmplY3QoY29uc3Qgdm9pZCAqZnJvbSkKIAkJ Y2FzZSBUX0NvbW1vblRhYmxlRXhwcjoKIAkJCXJldHZhbCA9IF9jb3B5Q29t bW9uVGFibGVFeHByKGZyb20pOwogCQkJYnJlYWs7CisJCWNhc2UgVF9DcmVh dGVTdGF0c1N0bXQ6CisJCQlyZXR2YWwgPSBfY29weUNyZWF0ZVN0YXRzU3Rt dChmcm9tKTsKKwkJCWJyZWFrOwogCQljYXNlIFRfRnVuY1dpdGhBcmdzOgog CQkJcmV0dmFsID0gX2NvcHlGdW5jV2l0aEFyZ3MoZnJvbSk7CiAJCQlicmVh azsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IGQ5NWUxNTEu LjVlY2M5ZWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAt MTkzOSw2ICsxOTM5LDIxIEBAIF9vdXRJbmRleE9wdEluZm8oU3RyaW5nSW5m byBzdHIsIGNvbnN0IEluZGV4T3B0SW5mbyAqbm9kZSkKIH0KIAogc3RhdGlj IHZvaWQKK19vdXRNVlN0YXRpc3RpY0luZm8oU3RyaW5nSW5mbyBzdHIsIGNv bnN0IE1WU3RhdGlzdGljSW5mbyAqbm9kZSkKK3sKKwlXUklURV9OT0RFX1RZ UEUoIk1WU1RBVElTVElDSU5GTyIpOworCisJLyogTkI6IHRoaXMgaXNuJ3Qg YSBjb21wbGV0ZSBzZXQgb2YgZmllbGRzICovCisJV1JJVEVfT0lEX0ZJRUxE KG12b2lkKTsKKworCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLworCVdSSVRF X0JPT0xfRklFTEQoZGVwc19lbmFibGVkKTsKKworCS8qIGJ1aWx0L2F2YWls YWJsZSBzdGF0aXN0aWNzICovCisJV1JJVEVfQk9PTF9GSUVMRChkZXBzX2J1 aWx0KTsKK30KKworc3RhdGljIHZvaWQKIF9vdXRFcXVpdmFsZW5jZUNsYXNz KFN0cmluZ0luZm8gc3RyLCBjb25zdCBFcXVpdmFsZW5jZUNsYXNzICpub2Rl KQogewogCS8qCkBAIC0zMzU5LDYgKzMzNzQsOSBAQCBfb3V0Tm9kZShTdHJp bmdJbmZvIHN0ciwgY29uc3Qgdm9pZCAqb2JqKQogCQkJY2FzZSBUX1BsYW5u ZXJQYXJhbUl0ZW06CiAJCQkJX291dFBsYW5uZXJQYXJhbUl0ZW0oc3RyLCBv YmopOwogCQkJCWJyZWFrOworCQkJY2FzZSBUX01WU3RhdGlzdGljSW5mbzoK KwkJCQlfb3V0TVZTdGF0aXN0aWNJbmZvKHN0ciwgb2JqKTsKKwkJCQlicmVh azsKIAogCQkJY2FzZSBUX0NyZWF0ZVN0bXQ6CiAJCQkJX291dENyZWF0ZVN0 bXQoc3RyLCBvYmopOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGxhbmNhdC5jCmluZGV4IGQ1NTI4ZTAuLjgzYmQ4NWMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTI3 LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKICNp bmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNsdWRlICJjYXRh bG9nL2hlYXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX212X3N0YXRpc3Rp Yy5oIgogI2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCkBA IC0zOSw3ICs0MCw5IEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5o IgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZU1hbmlwLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUg InV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAj aW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCkBAIC05Myw2ICs5Niw3IEBA IGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVs YXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJUmVsYXRpb24JcmVs YXRpb247CiAJYm9vbAkJaGFzaW5kZXg7CiAJTGlzdAkgICAqaW5kZXhpbmZv cyA9IE5JTDsKKwlMaXN0CSAgICpzdGFpbmZvcyA9IE5JTDsKIAogCS8qCiAJ ICogV2UgbmVlZCBub3QgbG9jayB0aGUgcmVsYXRpb24gc2luY2UgaXQgd2Fz IGFscmVhZHkgbG9ja2VkLCBlaXRoZXIgYnkKQEAgLTM4MSw2ICszODUsNjUg QEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCBy ZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAogCXJlbC0+aW5k ZXhsaXN0ID0gaW5kZXhpbmZvczsKIAorCWlmICh0cnVlKQorCXsKKwkJTGlz dAkgICAqbXZzdGF0b2lkbGlzdDsKKwkJTGlzdENlbGwgICAqbDsKKworCQlt dnN0YXRvaWRsaXN0ID0gUmVsYXRpb25HZXRNVlN0YXRMaXN0KHJlbGF0aW9u KTsKKworCQlmb3JlYWNoKGwsIG12c3RhdG9pZGxpc3QpCisJCXsKKwkJCUFy cmF5VHlwZSAgKmFycjsKKwkJCURhdHVtCQlhZGF0dW07CisJCQlib29sCQlp c251bGw7CisJCQlPaWQJCQltdm9pZCA9IGxmaXJzdF9vaWQobCk7CisJCQlG b3JtX3BnX212X3N0YXRpc3RpYyBtdnN0YXQ7CisJCQlNVlN0YXRpc3RpY0lu Zm8gKmluZm87CisKKwkJCUhlYXBUdXBsZQlodHVwID0gU2VhcmNoU3lzQ2Fj aGUxKE1WU1RBVE9JRCwgT2JqZWN0SWRHZXREYXR1bShtdm9pZCkpOworCisJ CQkvKiBYWFggc3lzY2FjaGUgY29udGFpbnMgT0lEcyBvZiBkZWxldGVkIHN0 YXRzIChub3QgaW52YWxpZGF0ZWQpICovCisJCQlpZiAoISBIZWFwVHVwbGVJ c1ZhbGlkKGh0dXApKQorCQkJCWNvbnRpbnVlOworCisJCQltdnN0YXQgPSAo Rm9ybV9wZ19tdl9zdGF0aXN0aWMpIEdFVFNUUlVDVChodHVwKTsKKworCQkJ LyogdW5hdmFpbGFibGUgc3RhdHMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3Ig dGhlIHBsYW5uZXIgKi8KKwkJCWlmIChtdnN0YXQtPmRlcHNfYnVpbHQpCisJ CQl7CisJCQkJaW5mbyA9IG1ha2VOb2RlKE1WU3RhdGlzdGljSW5mbyk7CisK KwkJCQlpbmZvLT5tdm9pZCA9IG12b2lkOworCQkJCWluZm8tPnJlbCA9IHJl bDsKKworCQkJCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLworCQkJCWluZm8t PmRlcHNfZW5hYmxlZCA9IG12c3RhdC0+ZGVwc19lbmFibGVkOworCisJCQkJ LyogYnVpbHQvYXZhaWxhYmxlIHN0YXRpc3RpY3MgKi8KKwkJCQlpbmZvLT5k ZXBzX2J1aWx0ID0gbXZzdGF0LT5kZXBzX2J1aWx0OworCisJCQkJLyogc3Rh a2V5cyAqLworCQkJCWFkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihNVlNUQVRP SUQsIGh0dXAsCisJCQkJCQkJCQkJIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0 YWtleXMsICZpc251bGwpOworCQkJCUFzc2VydCghaXNudWxsKTsKKworCQkJ CWFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChhZGF0dW0pOworCisJCQkJaW5m by0+c3Rha2V5cyA9IGJ1aWxkaW50MnZlY3RvcigoaW50MTYgKikgQVJSX0RB VEFfUFRSKGFyciksCisJCQkJCQkJCQkJCQlBUlJfRElNUyhhcnIpWzBdKTsK KworCQkJCXN0YWluZm9zID0gbGNvbnMoaW5mbywgc3RhaW5mb3MpOworCQkJ fQorCisJCQlSZWxlYXNlU3lzQ2FjaGUoaHR1cCk7CisJCX0KKworCQlsaXN0 X2ZyZWUobXZzdGF0b2lkbGlzdCk7CisJfQorCisJcmVsLT5tdnN0YXRsaXN0 ID0gc3RhaW5mb3M7CisKIAkvKiBHcmFiIGZvcmVpZ24tdGFibGUgaW5mbyB1 c2luZyB0aGUgcmVsY2FjaGUsIHdoaWxlIHdlIGhhdmUgaXQgKi8KIAlpZiAo cmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05f VEFCTEUpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggYjMwN2I0 OC4uM2JlM2YwMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0yNDEs NyArMjQxLDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2Vs ZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5 KTsKIAkJQ29uc3RyYWludHNTZXRTdG10IENvcHlTdG10IENyZWF0ZUFzU3Rt dCBDcmVhdGVDYXN0U3RtdAogCQlDcmVhdGVEb21haW5TdG10IENyZWF0ZUV4 dGVuc2lvblN0bXQgQ3JlYXRlR3JvdXBTdG10IENyZWF0ZU9wQ2xhc3NTdG10 CiAJCUNyZWF0ZU9wRmFtaWx5U3RtdCBBbHRlck9wRmFtaWx5U3RtdCBDcmVh dGVQTGFuZ1N0bXQKLQkJQ3JlYXRlU2NoZW1hU3RtdCBDcmVhdGVTZXFTdG10 IENyZWF0ZVN0bXQgQ3JlYXRlVGFibGVTcGFjZVN0bXQKKwkJQ3JlYXRlU2No ZW1hU3RtdCBDcmVhdGVTZXFTdG10IENyZWF0ZVN0bXQgQ3JlYXRlU3RhdHNT dG10IENyZWF0ZVRhYmxlU3BhY2VTdG10CiAJCUNyZWF0ZUZkd1N0bXQgQ3Jl YXRlRm9yZWlnblNlcnZlclN0bXQgQ3JlYXRlRm9yZWlnblRhYmxlU3RtdAog CQlDcmVhdGVBc3NlcnRTdG10IENyZWF0ZVRyYW5zZm9ybVN0bXQgQ3JlYXRl VHJpZ1N0bXQgQ3JlYXRlRXZlbnRUcmlnU3RtdAogCQlDcmVhdGVVc2VyU3Rt dCBDcmVhdGVVc2VyTWFwcGluZ1N0bXQgQ3JlYXRlUm9sZVN0bXQgQ3JlYXRl UG9saWN5U3RtdApAQCAtODA5LDYgKzgwOSw3IEBAIHN0bXQgOgogCQkJfCBD cmVhdGVTY2hlbWFTdG10CiAJCQl8IENyZWF0ZVNlcVN0bXQKIAkJCXwgQ3Jl YXRlU3RtdAorCQkJfCBDcmVhdGVTdGF0c1N0bXQKIAkJCXwgQ3JlYXRlVGFi bGVTcGFjZVN0bXQKIAkJCXwgQ3JlYXRlVHJhbnNmb3JtU3RtdAogCQkJfCBD cmVhdGVUcmlnU3RtdApAQCAtMzQzNiw2ICszNDM3LDM2IEBAIE9wdENvbnNU YWJsZVNwYWNlOiAgIFVTSU5HIElOREVYIFRBQkxFU1BBQ0UgbmFtZQl7ICQk ID0gJDQ7IH0KIEV4aXN0aW5nSW5kZXg6ICAgVVNJTkcgSU5ERVggaW5kZXhf bmFtZQkJCQl7ICQkID0gJDM7IH0KIAkJOwogCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqCisgKgkJUVVFUlkgOgorICoJCQkJQ1JF QVRFIFNUQVRJU1RJQ1Mgc3RhdHNfbmFtZSBPTiByZWxuYW1lIChjb2x1bW5z KSBXSVRIIChvcHRpb25zKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworCitDcmVhdGVTdGF0c1N0bXQ6CUNSRUFURSBTVEFU SVNUSUNTIGFueV9uYW1lIE9OIHF1YWxpZmllZF9uYW1lICcoJyBjb2x1bW5M aXN0ICcpJyBvcHRfcmVsb3B0aW9ucworCQkJCQkJeworCQkJCQkJCUNyZWF0 ZVN0YXRzU3RtdCAqbiA9IG1ha2VOb2RlKENyZWF0ZVN0YXRzU3RtdCk7CisJ CQkJCQkJbi0+ZGVmbmFtZXMgPSAkMzsKKwkJCQkJCQluLT5yZWxhdGlvbiA9 ICQ1OworCQkJCQkJCW4tPmtleXMgPSAkNzsKKwkJCQkJCQluLT5vcHRpb25z ID0gJDk7CisJCQkJCQkJbi0+aWZfbm90X2V4aXN0cyA9IGZhbHNlOworCQkJ CQkJCSQkID0gKE5vZGUgKiluOworCQkJCQkJfQorCQkJCQl8IENSRUFURSBT VEFUSVNUSUNTIElGX1AgTk9UIEVYSVNUUyBhbnlfbmFtZSBPTiBxdWFsaWZp ZWRfbmFtZSAnKCcgY29sdW1uTGlzdCAnKScgb3B0X3JlbG9wdGlvbnMKKwkJ CQkJCXsKKwkJCQkJCQlDcmVhdGVTdGF0c1N0bXQgKm4gPSBtYWtlTm9kZShD cmVhdGVTdGF0c1N0bXQpOworCQkJCQkJCW4tPmRlZm5hbWVzID0gJDY7CisJ CQkJCQkJbi0+cmVsYXRpb24gPSAkODsKKwkJCQkJCQluLT5rZXlzID0gJDEw OworCQkJCQkJCW4tPm9wdGlvbnMgPSAkMTI7CisJCQkJCQkJbi0+aWZfbm90 X2V4aXN0cyA9IHRydWU7CisJCQkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJ CQl9CisJCQk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCiAgKgpAQCAtNTYyMSw2ICs1NjUyLDcgQEAgZHJvcF90eXBlOglUQUJM RQkJCQkJCQkJCXsgJCQgPSBPQkpFQ1RfVEFCTEU7IH0KIAkJCXwgVEVYVF9Q IFNFQVJDSCBESUNUSU9OQVJZCQkJCXsgJCQgPSBPQkpFQ1RfVFNESUNUSU9O QVJZOyB9CiAJCQl8IFRFWFRfUCBTRUFSQ0ggVEVNUExBVEUJCQkJeyAkJCA9 IE9CSkVDVF9UU1RFTVBMQVRFOyB9CiAJCQl8IFRFWFRfUCBTRUFSQ0ggQ09O RklHVVJBVElPTgkJCXsgJCQgPSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOyB9 CisJCQl8IFNUQVRJU1RJQ1MJCQkJCQkJeyAkJCA9IE9CSkVDVF9TVEFUSVNU SUNTOyB9CiAJCTsKIAogYW55X25hbWVfbGlzdDoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91 dGlsaXR5LmMKaW5kZXggMDQ1ZjdmMC4uMmJhODhlMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQv dGNvcC91dGlsaXR5LmMKQEAgLTE1MjAsNiArMTUyMCwxMCBAQCBQcm9jZXNz VXRpbGl0eVNsb3coTm9kZSAqcGFyc2V0cmVlLAogCQkJCWFkZHJlc3MgPSBF eGVjU2VjTGFiZWxTdG10KChTZWNMYWJlbFN0bXQgKikgcGFyc2V0cmVlKTsK IAkJCQlicmVhazsKIAorCQkJY2FzZSBUX0NyZWF0ZVN0YXRzU3RtdDoJLyog Q1JFQVRFIFNUQVRJU1RJQ1MgKi8KKwkJCQlhZGRyZXNzID0gQ3JlYXRlU3Rh dGlzdGljcygoQ3JlYXRlU3RhdHNTdG10ICopIHBhcnNldHJlZSk7CisJCQkJ YnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJZWxvZyhFUlJPUiwgInVucmVj b2duaXplZCBub2RlIHR5cGU6ICVkIiwKIAkJCQkJIChpbnQpIG5vZGVUYWco cGFyc2V0cmVlKSk7CkBAIC0yMTYwLDYgKzIxNjQsOSBAQCBDcmVhdGVDb21t YW5kVGFnKE5vZGUgKnBhcnNldHJlZSkKIAkJCQljYXNlIE9CSkVDVF9UUkFO U0ZPUk06CiAJCQkJCXRhZyA9ICJEUk9QIFRSQU5TRk9STSI7CiAJCQkJCWJy ZWFrOworCQkJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ1M6CisJCQkJCXRhZyA9 ICJEUk9QIFNUQVRJU1RJQ1MiOworCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0 OgogCQkJCQl0YWcgPSAiPz8/IjsKIAkJCX0KQEAgLTI1MjcsNiArMjUzNCwx MCBAQCBDcmVhdGVDb21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSkKIAkJCXRh ZyA9ICJFWEVDVVRFIjsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9DcmVhdGVT dGF0c1N0bXQ6CisJCQl0YWcgPSAiQ1JFQVRFIFNUQVRJU1RJQ1MiOworCQkJ YnJlYWs7CisKIAkJY2FzZSBUX0RlYWxsb2NhdGVTdG10OgogCQkJewogCQkJ CURlYWxsb2NhdGVTdG10ICpzdG10ID0gKERlYWxsb2NhdGVTdG10ICopIHBh cnNldHJlZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL01ha2Vm aWxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvTWFrZWZpbGUKaW5kZXggODM3NDUz My4uZWJhMDM1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvTWFr ZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvTWFrZWZpbGUKQEAgLTks NyArOSw3IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNsdWRlICQo dG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIE9CSlMgICAg ICAgID0gZm1ncnRhYi5vCi1TVUJESVJTICAgICA9IGFkdCBjYWNoZSBlcnJv ciBmbWdyIGhhc2ggaW5pdCBtYiBtaXNjIG1tZ3IgcmVzb3duZXIgc29ydCB0 aW1lCitTVUJESVJTICAgICA9IGFkdCBjYWNoZSBlcnJvciBmbWdyIGhhc2gg aW5pdCBtYiBtaXNjIG1tZ3IgbXZzdGF0cyByZXNvd25lciBzb3J0IHRpbWUK IAogIyBsb2NhdGlvbiBvZiBDYXRhbG9nLnBtCiBjYXRhbG9nZGlyICA9ICQo dG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY2F0YWxvZwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggZmM1YjlkOS4uMWU0 MWNhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVs Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNo ZS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19h dXRoX21lbWJlcnMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFp bnQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf b3BjbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgpAQCAt MzkzMCw2ICszOTMxLDYyIEBAIFJlbGF0aW9uR2V0SW5kZXhMaXN0KFJlbGF0 aW9uIHJlbGF0aW9uKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKworTGlzdCAq CitSZWxhdGlvbkdldE1WU3RhdExpc3QoUmVsYXRpb24gcmVsYXRpb24pCit7 CisJUmVsYXRpb24JaW5kcmVsOworCVN5c1NjYW5EZXNjIGluZHNjYW47CisJ U2NhbktleURhdGEgc2tleTsKKwlIZWFwVHVwbGUJaHR1cDsKKwlMaXN0CSAg ICpyZXN1bHQ7CisJTGlzdAkgICAqb2xkbGlzdDsKKwlNZW1vcnlDb250ZXh0 IG9sZGN4dDsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2UgYWxyZWFkeSBjb21w dXRlZCB0aGUgbGlzdC4gKi8KKwlpZiAocmVsYXRpb24tPnJkX212c3RhdHZh bGlkICE9IDApCisJCXJldHVybiBsaXN0X2NvcHkocmVsYXRpb24tPnJkX212 c3RhdGxpc3QpOworCisJLyoKKwkgKiBXZSBidWlsZCB0aGUgbGlzdCB3ZSBp bnRlbmQgdG8gcmV0dXJuIChpbiB0aGUgY2FsbGVyJ3MgY29udGV4dCkgd2hp bGUKKwkgKiBkb2luZyB0aGUgc2Nhbi4gIEFmdGVyIHN1Y2Nlc3NmdWxseSBj b21wbGV0aW5nIHRoZSBzY2FuLCB3ZSBjb3B5IHRoYXQKKwkgKiBsaXN0IGlu dG8gdGhlIHJlbGNhY2hlIGVudHJ5LiAgVGhpcyBhdm9pZHMgY2FjaGUtY29u dGV4dCBtZW1vcnkgbGVha2FnZQorCSAqIGlmIHdlIGdldCBzb21lIHNvcnQg b2YgZXJyb3IgcGFydHdheSB0aHJvdWdoLgorCSAqLworCXJlc3VsdCA9IE5J TDsKKworCS8qIFByZXBhcmUgdG8gc2NhbiBwZ19pbmRleCBmb3IgZW50cmll cyBoYXZpbmcgaW5kcmVsaWQgPSB0aGlzIHJlbC4gKi8KKwlTY2FuS2V5SW5p dCgmc2tleSwKKwkJCQlBbnVtX3BnX212X3N0YXRpc3RpY19zdGFyZWxpZCwK KwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2Jq ZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSkpOwor CisJaW5kcmVsID0gaGVhcF9vcGVuKE12U3RhdGlzdGljUmVsYXRpb25JZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwlpbmRzY2FuID0gc3lzdGFibGVfYmVnaW5z Y2FuKGluZHJlbCwgTXZTdGF0aXN0aWNSZWxpZEluZGV4SWQsIHRydWUsCisJ CQkJCQkJCSBOVUxMLCAxLCAmc2tleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxl SXNWYWxpZChodHVwID0gc3lzdGFibGVfZ2V0bmV4dChpbmRzY2FuKSkpCisJ CS8qIFRPRE8gbWF5YmUgaW5jbHVkZSBvbmx5IGFscmVhZHkgYnVpbHQgc3Rh dGlzdGljcz8gKi8KKwkJcmVzdWx0ID0gaW5zZXJ0X29yZGVyZWRfb2lkKHJl c3VsdCwgSGVhcFR1cGxlR2V0T2lkKGh0dXApKTsKKworCXN5c3RhYmxlX2Vu ZHNjYW4oaW5kc2Nhbik7CisKKwloZWFwX2Nsb3NlKGluZHJlbCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCS8qIE5vdyBzYXZlIGEgY29weSBvZiB0aGUgY29t cGxldGVkIGxpc3QgaW4gdGhlIHJlbGNhY2hlIGVudHJ5LiAqLworCW9sZGN4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhDYWNoZU1lbW9yeUNvbnRleHQp OworCW9sZGxpc3QgPSByZWxhdGlvbi0+cmRfbXZzdGF0bGlzdDsKKwlyZWxh dGlvbi0+cmRfbXZzdGF0bGlzdCA9IGxpc3RfY29weShyZXN1bHQpOworCisJ cmVsYXRpb24tPnJkX212c3RhdHZhbGlkID0gdHJ1ZTsKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCS8qIERvbid0IGxlYWsgdGhlIG9s ZCBsaXN0LCBpZiB0aGVyZSBpcyBvbmUgKi8KKwlsaXN0X2ZyZWUob2xkbGlz dCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICogaW5zZXJ0X29y ZGVyZWRfb2lkCiAgKgkJSW5zZXJ0IGEgbmV3IE9pZCBpbnRvIGEgc29ydGVk IGxpc3Qgb2YgT2lkcywgcHJlc2VydmluZyBvcmRlcmluZwpAQCAtNDg5OSw2 ICs0OTU2LDggQEAgbG9hZF9yZWxjYWNoZV9pbml0X2ZpbGUoYm9vbCBzaGFy ZWQpCiAJCXJlbC0+cmRfaW5kZXhhdHRyID0gTlVMTDsKIAkJcmVsLT5yZF9r ZXlhdHRyID0gTlVMTDsKIAkJcmVsLT5yZF9pZGF0dHIgPSBOVUxMOworCQly ZWwtPnJkX212c3RhdHZhbGlkID0gZmFsc2U7CisJCXJlbC0+cmRfbXZzdGF0 bGlzdCA9IE5JTDsKIAkJcmVsLT5yZF9jcmVhdGVTdWJpZCA9IEludmFsaWRT dWJUcmFuc2FjdGlvbklkOwogCQlyZWwtPnJkX25ld1JlbGZpbGVub2RlU3Vi aWQgPSBJbnZhbGlkU3ViVHJhbnNhY3Rpb25JZDsKIAkJcmVsLT5yZF9hbWNh Y2hlID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3N5c2NhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9zeXNj YWNoZS5jCmluZGV4IDZlYjJhYzYuLjAzMzFkYTcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL3N5c2NhY2hlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvc3lzY2FjaGUuYwpAQCAtNDMsNiArNDMsNyBA QAogI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9zZXJ2ZXIuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fdGFibGUuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19tdl9zdGF0aXN0aWMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVz cGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKQEAgLTUwMSw2ICs1MDIs MjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjYWNoZWRlc2MgY2FjaGVpbmZv W10gPSB7CiAJCX0sCiAJCTQKIAl9LAorCXtNdlN0YXRpc3RpY1JlbGF0aW9u SWQsCQkvKiBNVlNUQVROQU1FTlNQICovCisJCU12U3RhdGlzdGljTmFtZUlu ZGV4SWQsCisJCTIsCisJCXsKKwkJCUFudW1fcGdfbXZfc3RhdGlzdGljX3N0 YW5hbWUsCisJCQlBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1lc3BhY2Us CisJCQkwLAorCQkJMAorCQl9LAorCQk0CisJfSwKKwl7TXZTdGF0aXN0aWNS ZWxhdGlvbklkLAkJLyogTVZTVEFUT0lEICovCisJCU12U3RhdGlzdGljT2lk SW5kZXhJZCwKKwkJMSwKKwkJeworCQkJT2JqZWN0SWRBdHRyaWJ1dGVOdW1i ZXIsCisJCQkwLAorCQkJMCwKKwkJCTAKKwkJfSwKKwkJNAorCX0sCiAJe05h bWVzcGFjZVJlbGF0aW9uSWQsCQkvKiBOQU1FU1BBQ0VOQU1FICovCiAJCU5h bWVzcGFjZU5hbWVJbmRleElkLAogCQkxLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMDk5ZjFlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBA QAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgTWFrZWZp bGUtLQorIyAgICBNYWtlZmlsZSBmb3IgdXRpbHMvbXZzdGF0cworIworIyBJ REVOVElGSUNBVElPTgorIyAgICBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L01ha2VmaWxlCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor CitzdWJkaXIgPSBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzCit0b3BfYnVp bGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikv c3JjL01ha2VmaWxlLmdsb2JhbAorCitPQkpTID0gY29tbW9uLm8gZGVwZW5k ZW5jaWVzLm8KKworaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5k L2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZz dGF0cy9jb21tb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29t bW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1 NWM0OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvY29tbW9uLmMKQEAgLTAsMCArMSwzNTYgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbW1vbi5jCisgKgkgIFBP U1RHUkVTIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzCisgKgorICoKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJjb21tb24u aCIKKworc3RhdGljIFZhY0F0dHJTdGF0cyAqKiBsb29rdXBfdmFyX2F0dHJf c3RhdHMoaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkJCQkgIGludCBuYXR0 cywgVmFjQXR0clN0YXRzICoqdmFjYXR0cnN0YXRzKTsKKworc3RhdGljIExp c3QqIGxpc3RfbXZfc3RhdHMoT2lkIHJlbGlkKTsKKworCisvKgorICogQ29t cHV0ZSByZXF1ZXN0ZWQgbXVsdGl2YXJpYXRlIHN0YXRzLCB1c2luZyB0aGUg cm93cyBzYW1wbGVkIGZvciB0aGUKKyAqIHBsYWluIChzaW5nbGUtY29sdW1u KSBzdGF0cy4KKyAqCisgKiBUaGlzIGZldGNoZXMgYSBsaXN0IG9mIHN0YXRz IGZyb20gcGdfbXZfc3RhdGlzdGljLCBjb21wdXRlcyB0aGUgc3RhdHMKKyAq IGFuZCBzZXJpYWxpemVzIHRoZW0gYmFjayBpbnRvIHRoZSBjYXRhbG9nIChh cyBieXRlYSB2YWx1ZXMpLgorICovCit2b2lkCitidWlsZF9tdl9zdGF0cyhS ZWxhdGlvbiBvbmVyZWwsIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3Ms CisJCQkgICBpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0 cykKK3sKKwlMaXN0Q2VsbCAqbGM7CisJTGlzdCAqbXZzdGF0czsKKworCVR1 cGxlRGVzYyB0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihvbmVyZWwpOwor CisJLyoKKwkgKiBGZXRjaCBkZWZpbmVkIE1WIGdyb3VwcyBmcm9tIHBnX212 X3N0YXRpc3RpYywgYW5kIHRoZW4gY29tcHV0ZQorCSAqIHRoZSBNViBzdGF0 aXN0aWNzIChoaXN0b2dyYW1zIGZvciBub3cpLgorCSAqLworCW12c3RhdHMg PSBsaXN0X212X3N0YXRzKFJlbGF0aW9uR2V0UmVsaWQob25lcmVsKSk7CisK Kwlmb3JlYWNoIChsYywgbXZzdGF0cykKKwl7CisJCWludAkJCQlqOworCQlN VlN0YXRpc3RpY0luZm8gKnN0YXQgPSAoTVZTdGF0aXN0aWNJbmZvICopbGZp cnN0KGxjKTsKKwkJTVZEZXBlbmRlbmNpZXMJZGVwcyAgPSBOVUxMOworCisJ CVZhY0F0dHJTdGF0cyAgKipzdGF0cyAgPSBOVUxMOworCQlpbnQJCQkJbnVt YXR0cyAgID0gMDsKKworCQkvKiBpbnQyIHZlY3RvciBvZiBhdHRudW1zIHRo ZSBzdGF0cyBzaG91bGQgYmUgY29tcHV0ZWQgb24gKi8KKwkJaW50MnZlY3Rv ciAqIGF0dHJzID0gc3RhdC0+c3Rha2V5czsKKworCQkvKiBzZWUgaG93IG1h bnkgb2YgdGhlIGNvbHVtbnMgYXJlIG5vdCBkcm9wcGVkICovCisJCWZvciAo aiA9IDA7IGogPCBhdHRycy0+ZGltMTsgaisrKQorCQkJaWYgKCEgdHVwZGVz Yy0+YXR0cnNbYXR0cnMtPnZhbHVlc1tqXS0xXS0+YXR0aXNkcm9wcGVkKQor CQkJCW51bWF0dHMgKz0gMTsKKworCQkvKiBpZiB0aGVyZSBhcmUgZHJvcHBl ZCBhdHRyaWJ1dGVzLCBidWlsZCBhIGZpbHRlcmVkIGludDJ2ZWN0b3IgKi8K KwkJaWYgKG51bWF0dHMgIT0gYXR0cnMtPmRpbTEpCisJCXsKKwkJCWludDE2 ICp0bXAgPSBwYWxsb2MwKG51bWF0dHMgKiBzaXplb2YoaW50MTYpKTsKKwkJ CWludCBhdHRudW0gPSAwOworCisJCQlmb3IgKGogPSAwOyBqIDwgYXR0cnMt PmRpbTE7IGorKykKKwkJCQlpZiAoISB0dXBkZXNjLT5hdHRyc1thdHRycy0+ dmFsdWVzW2pdLTFdLT5hdHRpc2Ryb3BwZWQpCisJCQkJCXRtcFthdHRudW0r K10gPSBhdHRycy0+dmFsdWVzW2pdOworCisJCQlwZnJlZShhdHRycyk7CisJ CQlhdHRycyA9IGJ1aWxkaW50MnZlY3Rvcih0bXAsIG51bWF0dHMpOworCQl9 CisKKwkJLyogZmlsdGVyIG9ubHkgdGhlIGludGVyZXN0aW5nIHZhY2F0dHJz dGF0cyByZWNvcmRzICovCisJCXN0YXRzID0gbG9va3VwX3Zhcl9hdHRyX3N0 YXRzKGF0dHJzLCBuYXR0cywgdmFjYXR0cnN0YXRzKTsKKworCQkvKiBjaGVj ayBhbGxvd2VkIG51bWJlciBvZiBkaW1lbnNpb25zICovCisJCUFzc2VydCgo YXR0cnMtPmRpbTEgPj0gMikgJiYgKGF0dHJzLT5kaW0xIDw9IE1WU1RBVFNf TUFYX0RJTUVOU0lPTlMpKTsKKworCQkvKgorCQkgKiBBbmFseXplIGZ1bmN0 aW9uYWwgZGVwZW5kZW5jaWVzIG9mIGNvbHVtbnMuCisJCSAqLworCQlkZXBz ID0gYnVpbGRfbXZfZGVwZW5kZW5jaWVzKG51bXJvd3MsIHJvd3MsIGF0dHJz LCBzdGF0cyk7CisKKwkJLyogc3RvcmUgdGhlIGhpc3RvZ3JhbSAvIE1DViBs aXN0IGluIHRoZSBjYXRhbG9nICovCisJCXVwZGF0ZV9tdl9zdGF0cyhzdGF0 LT5tdm9pZCwgZGVwcywgYXR0cnMpOworCX0KK30KKworLyoKKyAqIExvb2t1 cCB0aGUgVmFjQXR0clN0YXRzIGluZm8gZm9yIHRoZSBzZWxlY3RlZCBjb2x1 bW5zLCB3aXRoIGluZGV4ZXMKKyAqIG1hdGNoaW5nIHRoZSBhdHRycyB2ZWN0 b3IgKHRvIG1ha2UgaXQgZWFzeSB0byB3b3JrIHdpdGggd2hlbgorICogY29t cHV0aW5nIG11bHRpdmFyaWF0ZSBzdGF0cykuCisgKi8KK3N0YXRpYyBWYWNB dHRyU3RhdHMgKioKK2xvb2t1cF92YXJfYXR0cl9zdGF0cyhpbnQydmVjdG9y ICphdHRycywgaW50IG5hdHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3Rh dHMpCit7CisJaW50IGksIGo7CisJaW50IG51bWF0dHJzID0gYXR0cnMtPmRp bTE7CisJVmFjQXR0clN0YXRzICoqc3RhdHMgPSAoVmFjQXR0clN0YXRzKiop cGFsbG9jMChudW1hdHRycyAqIHNpemVvZihWYWNBdHRyU3RhdHMqKSk7CisK KwkvKiBsb29rdXAgVmFjQXR0clN0YXRzIGluZm8gZm9yIHRoZSByZXF1ZXN0 ZWQgY29sdW1ucyAoc2FtZSBhdHRudW0pICovCisJZm9yIChpID0gMDsgaSA8 IG51bWF0dHJzOyBpKyspCisJeworCQlzdGF0c1tpXSA9IE5VTEw7CisJCWZv ciAoaiA9IDA7IGogPCBuYXR0czsgaisrKQorCQl7CisJCQlpZiAoYXR0cnMt PnZhbHVlc1tpXSA9PSB2YWNhdHRyc3RhdHNbal0tPnR1cGF0dG51bSkKKwkJ CXsKKwkJCQlzdGF0c1tpXSA9IHZhY2F0dHJzdGF0c1tqXTsKKwkJCQlicmVh azsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIENoZWNrIHRoYXQgd2UgZm91 bmQgdGhlIGluZm8sIHRoYXQgdGhlIGF0dG51bSBtYXRjaGVzIGFuZAorCQkg KiB0aGF0IHRoZXJlJ3MgdGhlIHJlcXVlc3RlZCAnbHQnIG9wZXJhdG9yIGFu ZCB0aGF0IHRoZSB0eXBlCisJCSAqIGlzICdwYXNzZWQtYnktdmFsdWUnLgor CQkgKi8KKwkJQXNzZXJ0KHN0YXRzW2ldICE9IE5VTEwpOworCQlBc3NlcnQo c3RhdHNbaV0tPnR1cGF0dG51bSA9PSBhdHRycy0+dmFsdWVzW2ldKTsKKwor CQkvKiBGSVhNRSBUaGlzIGlzIHJhdGhlciB1Z2x5IHdheSB0byBjaGVjayBm b3IgJ2x0b3ByJyAod2hpY2gKKwkJICogICAgICAgaXMgZGVmaW5lZCBmb3Ig J3NjYWxhcicgYXR0cmlidXRlcykuCisJCSAqLworCQlBc3NlcnQoKChTdGRB bmFseXplRGF0YSAqKXN0YXRzW2ldLT5leHRyYV9kYXRhKS0+bHRvcHIgIT0g SW52YWxpZE9pZCk7CisJfQorCisJcmV0dXJuIHN0YXRzOworfQorCisvKgor ICogRmV0Y2ggbGlzdCBvZiBNViBzdGF0cyBkZWZpbmVkIG9uIGEgdGFibGUs IHdpdGhvdXQgdGhlIGFjdHVhbCBkYXRhCisgKiBmb3IgaGlzdG9ncmFtcywg TUNWIGxpc3RzIGV0Yy4KKyAqLworc3RhdGljIExpc3QqCitsaXN0X212X3N0 YXRzKE9pZCByZWxpZCkKK3sKKwlSZWxhdGlvbglpbmRyZWw7CisJU3lzU2Nh bkRlc2MgaW5kc2NhbjsKKwlTY2FuS2V5RGF0YSBza2V5OworCUhlYXBUdXBs ZQlodHVwOworCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKworCS8qIFByZXBh cmUgdG8gc2NhbiBwZ19tdl9zdGF0aXN0aWMgZm9yIGVudHJpZXMgaGF2aW5n IGluZHJlbGlkID0gdGhpcyByZWwuICovCisJU2NhbktleUluaXQoJnNrZXks CisJCQkJQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhcmVsaWQsCisJCQkJQlRF cXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0ocmVsaWQpKTsKKworCWluZHJlbCA9IGhlYXBfb3BlbihNdlN0YXRp c3RpY1JlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaW5kc2NhbiA9 IHN5c3RhYmxlX2JlZ2luc2NhbihpbmRyZWwsIE12U3RhdGlzdGljUmVsaWRJ bmRleElkLCB0cnVlLAorCQkJCQkJCQkgTlVMTCwgMSwgJnNrZXkpOworCisJ d2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoaHR1cCA9IHN5c3RhYmxlX2dldG5l eHQoaW5kc2NhbikpKQorCXsKKwkJTVZTdGF0aXN0aWNJbmZvICppbmZvID0g bWFrZU5vZGUoTVZTdGF0aXN0aWNJbmZvKTsKKwkJRm9ybV9wZ19tdl9zdGF0 aXN0aWMgc3RhdHMgPSAoRm9ybV9wZ19tdl9zdGF0aXN0aWMpIEdFVFNUUlVD VChodHVwKTsKKworCQlpbmZvLT5tdm9pZCA9IEhlYXBUdXBsZUdldE9pZCho dHVwKTsKKwkJaW5mby0+c3Rha2V5cyA9IGJ1aWxkaW50MnZlY3RvcihzdGF0 cy0+c3Rha2V5cy52YWx1ZXMsIHN0YXRzLT5zdGFrZXlzLmRpbTEpOworCQlp bmZvLT5kZXBzX2J1aWx0ID0gc3RhdHMtPmRlcHNfYnVpbHQ7CisKKwkJcmVz dWx0ID0gbGFwcGVuZChyZXN1bHQsIGluZm8pOworCX0KKworCXN5c3RhYmxl X2VuZHNjYW4oaW5kc2Nhbik7CisKKwloZWFwX2Nsb3NlKGluZHJlbCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCS8qIFRPRE8gbWF5YmUgc2F2ZSB0aGUgbGlz dCBpbnRvIHJlbGNhY2hlLCBhcyBpbiBSZWxhdGlvbkdldEluZGV4TGlzdAor CSAqICAgICAgKHdoaWNoIHdhcyB1c2VkIGFzIGFuIGluc3BpcmF0aW9uIG9m IHRoaXMgb25lKT8uICovCisKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lk Cit1cGRhdGVfbXZfc3RhdHMoT2lkIG12b2lkLCBNVkRlcGVuZGVuY2llcyBk ZXBlbmRlbmNpZXMsIGludDJ2ZWN0b3IgKmF0dHJzKQoreworCUhlYXBUdXBs ZQlzdHVwLAorCQkJCW9sZHR1cDsKKwlEYXR1bQkJdmFsdWVzW05hdHRzX3Bn X212X3N0YXRpc3RpY107CisJYm9vbAkJbnVsbHNbTmF0dHNfcGdfbXZfc3Rh dGlzdGljXTsKKwlib29sCQlyZXBsYWNlc1tOYXR0c19wZ19tdl9zdGF0aXN0 aWNdOworCisJUmVsYXRpb24Jc2QgPSBoZWFwX29wZW4oTXZTdGF0aXN0aWNS ZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCW1lbXNldChudWxs cywgICAgMSwgTmF0dHNfcGdfbXZfc3RhdGlzdGljICogc2l6ZW9mKGJvb2wp KTsKKwltZW1zZXQocmVwbGFjZXMsIDAsIE5hdHRzX3BnX212X3N0YXRpc3Rp YyAqIHNpemVvZihib29sKSk7CisJbWVtc2V0KHZhbHVlcywgICAwLCBOYXR0 c19wZ19tdl9zdGF0aXN0aWMgKiBzaXplb2YoRGF0dW0pKTsKKworCS8qCisJ ICogQ29uc3RydWN0IGEgbmV3IHBnX212X3N0YXRpc3RpYyB0dXBsZSAtIHJl cGxhY2Ugb25seSB0aGUgaGlzdG9ncmFtCisJICogYW5kIE1DViBsaXN0LCBk ZXBlbmRpbmcgd2hldGhlciBpdCBhY3R1YWxseSB3YXMgY29tcHV0ZWQuCisJ ICovCisJaWYgKGRlcGVuZGVuY2llcyAhPSBOVUxMKQorCXsKKwkJbnVsbHNb QW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhZGVwcyAtMV0gICAgPSBmYWxzZTsK KwkJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMgIC0gMV0K KwkJCT0gUG9pbnRlckdldERhdHVtKHNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNp ZXMoZGVwZW5kZW5jaWVzKSk7CisJfQorCisJLyogYWx3YXlzIHJlcGxhY2Ug dGhlIHZhbHVlIChlaXRoZXIgYnkgYnl0ZWEgb3IgTlVMTCkgKi8KKwlyZXBs YWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFkZXBzIC0xXSA9IHRydWU7 CisKKwkvKiBhbHdheXMgY2hhbmdlIHRoZSBhdmFpbGFiaWxpdHkgZmxhZ3Mg Ki8KKwludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0IC0x XSA9IGZhbHNlOworCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtl eXMtMV0gICAgID0gZmFsc2U7CisKKwkvKiB1c2UgdGhlIG5ldyBhdHRudW1z LCBpbiBjYXNlIHdlIHJlbW92ZWQgc29tZSBkcm9wcGVkIG9uZXMgKi8KKwly ZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0LTFdID0g dHJ1ZTsKKwlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlz IC0xXSAgICA9IHRydWU7CisKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0 aWNfZGVwc19idWlsdC0xXSA9IEJvb2xHZXREYXR1bShkZXBlbmRlbmNpZXMg IT0gTlVMTCk7CisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtl eXMgLTFdICAgID0gUG9pbnRlckdldERhdHVtKGF0dHJzKTsKKworCS8qIElz IHRoZXJlIGFscmVhZHkgYSBwZ19tdl9zdGF0aXN0aWMgdHVwbGUgZm9yIHRo aXMgYXR0cmlidXRlPyAqLworCW9sZHR1cCA9IFNlYXJjaFN5c0NhY2hlMShN VlNUQVRPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0obXZvaWQpKTsK KworCWlmIChIZWFwVHVwbGVJc1ZhbGlkKG9sZHR1cCkpCisJeworCQkvKiBZ ZXMsIHJlcGxhY2UgaXQgKi8KKwkJc3R1cCA9IGhlYXBfbW9kaWZ5X3R1cGxl KG9sZHR1cCwKKwkJCQkJCQkJIFJlbGF0aW9uR2V0RGVzY3Ioc2QpLAorCQkJ CQkJCQkgdmFsdWVzLAorCQkJCQkJCQkgbnVsbHMsCisJCQkJCQkJCSByZXBs YWNlcyk7CisJCVJlbGVhc2VTeXNDYWNoZShvbGR0dXApOworCQlzaW1wbGVf aGVhcF91cGRhdGUoc2QsICZzdHVwLT50X3NlbGYsIHN0dXApOworCX0KKwll bHNlCisJCWVsb2coRVJST1IsICJpbnZhbGlkIHBnX212X3N0YXRpc3RpYyBy ZWNvcmQgKG9pZD0lZCkiLCBtdm9pZCk7CisKKwkvKiB1cGRhdGUgaW5kZXhl cyB0b28gKi8KKwlDYXRhbG9nVXBkYXRlSW5kZXhlcyhzZCwgc3R1cCk7CisK KwloZWFwX2ZyZWV0dXBsZShzdHVwKTsKKworCWhlYXBfY2xvc2Uoc2QsIFJv d0V4Y2x1c2l2ZUxvY2spOworfQorCisvKiBtdWx0aS12YXJpYXRlIHN0YXRz IGNvbXBhcmF0b3IgKi8KKworLyoKKyAqIHFzb3J0X2FyZyBjb21wYXJhdG9y IGZvciBzb3J0aW5nIERhdHVtcyAoTVYgc3RhdHMpCisgKgorICogVGhpcyBk b2VzIG5vdCBtYWludGFpbiB0aGUgdHVwbm9MaW5rIGFycmF5LgorICovCitp bnQKK2NvbXBhcmVfc2NhbGFyc19zaW1wbGUoY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQoreworCURhdHVtCQlkYSA9ICooRGF0 dW0qKWE7CisJRGF0dW0JCWRiID0gKihEYXR1bSopYjsKKwlTb3J0U3VwcG9y dCBzc3VwPSAoU29ydFN1cHBvcnQpIGFyZzsKKworCXJldHVybiBBcHBseVNv cnRDb21wYXJhdG9yKGRhLCBmYWxzZSwgZGIsIGZhbHNlLCBzc3VwKTsKK30K KworLyoKKyAqIHFzb3J0X2FyZyBjb21wYXJhdG9yIGZvciBzb3J0aW5nIGRh dGEgd2hlbiBwYXJ0aXRpb25pbmcgYSBNViBidWNrZXQKKyAqLworaW50Citj b21wYXJlX3NjYWxhcnNfcGFydGl0aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0 IHZvaWQgKmIsIHZvaWQgKmFyZykKK3sKKwlEYXR1bQkJZGEgPSAoKFNjYWxh ckl0ZW0qKWEpLT52YWx1ZTsKKwlEYXR1bQkJZGIgPSAoKFNjYWxhckl0ZW0q KWIpLT52YWx1ZTsKKwlTb3J0U3VwcG9ydCBzc3VwPSAoU29ydFN1cHBvcnQp IGFyZzsKKworCXJldHVybiBBcHBseVNvcnRDb21wYXJhdG9yKGRhLCBmYWxz ZSwgZGIsIGZhbHNlLCBzc3VwKTsKK30KKworLyogaW5pdGlhbGl6ZSBtdWx0 aS1kaW1lbnNpb25hbCBzb3J0ICovCitNdWx0aVNvcnRTdXBwb3J0CittdWx0 aV9zb3J0X2luaXQoaW50IG5kaW1zKQoreworCU11bHRpU29ydFN1cHBvcnQg bXNzOworCisJQXNzZXJ0KG5kaW1zID49IDIpOworCisJbXNzID0gKE11bHRp U29ydFN1cHBvcnQpcGFsbG9jMChvZmZzZXRvZihNdWx0aVNvcnRTdXBwb3J0 RGF0YSwgc3N1cCkKKwkJCQkJCQkJCSsgc2l6ZW9mKFNvcnRTdXBwb3J0RGF0 YSkqbmRpbXMpOworCisJbXNzLT5uZGltcyA9IG5kaW1zOworCisJcmV0dXJu IG1zczsKK30KKworLyoKKyAqIGFkZCBzb3J0IGludG8gZm9yIGRpbWVuc2lv biAnZGltJyAoaW5kZXggaW50byB2YWNhdHRyc3RhdHMpIHRvIG1zcywKKyAq IGF0IHRoZSBwb3NpdGlvbiAnc29ydGF0dHInCisgKi8KK3ZvaWQKK211bHRp X3NvcnRfYWRkX2RpbWVuc2lvbihNdWx0aVNvcnRTdXBwb3J0IG1zcywgaW50 IHNvcnRkaW0sCisJCQkJCQlpbnQgZGltLCBWYWNBdHRyU3RhdHMgKip2YWNh dHRyc3RhdHMpCit7CisJLyogZmlyc3QsIGxvb2t1cCBTdGRBbmFseXplRGF0 YSBmb3IgdGhlIGRpbWVuc2lvbiAoYXR0cmlidXRlKSAqLworCVNvcnRTdXBw b3J0RGF0YSBzc3VwOworCVN0ZEFuYWx5emVEYXRhICp0bXAgPSAoU3RkQW5h bHl6ZURhdGEgKil2YWNhdHRyc3RhdHNbZGltXS0+ZXh0cmFfZGF0YTsKKwor CUFzc2VydChtc3MgIT0gTlVMTCk7CisJQXNzZXJ0KHNvcnRkaW0gPCBtc3Mt Pm5kaW1zKTsKKworCS8qIGluaXRpYWxpemUgc29ydCBzdXBwb3J0LCBldGMu ICovCisJbWVtc2V0KCZzc3VwLCAwLCBzaXplb2Yoc3N1cCkpOworCXNzdXAu c3N1cF9jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCS8qIFdlIGFs d2F5cyB1c2UgdGhlIGRlZmF1bHQgY29sbGF0aW9uIGZvciBzdGF0aXN0aWNz ICovCisJc3N1cC5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09MTEFUSU9O X09JRDsKKwlzc3VwLnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxzZTsKKworCVBy ZXBhcmVTb3J0U3VwcG9ydEZyb21PcmRlcmluZ09wKHRtcC0+bHRvcHIsICZz c3VwKTsKKworCW1zcy0+c3N1cFtzb3J0ZGltXSA9IHNzdXA7Cit9CisKKy8q IGNvbXBhcmUgYWxsIHRoZSBkaW1lbnNpb25zIGluIHRoZSBzZWxlY3RlZCBv cmRlciAqLworaW50CittdWx0aV9zb3J0X2NvbXBhcmUoY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQoreworCWludCBpOworCVNv cnRJdGVtICppYSA9IChTb3J0SXRlbSopYTsKKwlTb3J0SXRlbSAqaWIgPSAo U29ydEl0ZW0qKWI7CisKKwlNdWx0aVNvcnRTdXBwb3J0IG1zcyA9IChNdWx0 aVNvcnRTdXBwb3J0KWFyZzsKKworCWZvciAoaSA9IDA7IGkgPCBtc3MtPm5k aW1zOyBpKyspCisJeworCQlpbnQJY29tcGFyZTsKKworCQljb21wYXJlID0g QXBwbHlTb3J0Q29tcGFyYXRvcihpYS0+dmFsdWVzW2ldLCBpYS0+aXNudWxs W2ldLAorCQkJCQkJCQkJICBpYi0+dmFsdWVzW2ldLCBpYi0+aXNudWxsW2ld LAorCQkJCQkJCQkJICAmbXNzLT5zc3VwW2ldKTsKKworCQlpZiAoY29tcGFy ZSAhPSAwKQorCQkJcmV0dXJuIGNvbXBhcmU7CisKKwl9CisKKwkvKiBlcXVh bCBieSBkZWZhdWx0ICovCisJcmV0dXJuIDA7Cit9CisKKy8qIGNvbXBhcmUg c2VsZWN0ZWQgZGltZW5zaW9uICovCitpbnQKK211bHRpX3NvcnRfY29tcGFy ZV9kaW0oaW50IGRpbSwgY29uc3QgU29ydEl0ZW0gKmEsIGNvbnN0IFNvcnRJ dGVtICpiLAorCQkJCQkgICBNdWx0aVNvcnRTdXBwb3J0IG1zcykKK3sKKwly ZXR1cm4gQXBwbHlTb3J0Q29tcGFyYXRvcihhLT52YWx1ZXNbZGltXSwgYS0+ aXNudWxsW2RpbV0sCisJCQkJCQkJICAgYi0+dmFsdWVzW2RpbV0sIGItPmlz bnVsbFtkaW1dLAorCQkJCQkJCSAgICZtc3MtPnNzdXBbZGltXSk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5o IGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU0NjViCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24u aApAQCAtMCwwICsxLDc1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBjb21tb24uaAorICoJICBQT1NUR1JFUyBtdWx0aXZh cmlhdGUgc3RhdGlzdGljcworICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAxNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvY29tbW9uLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgImFjY2Vzcy90dXB0b2FzdGVyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9p bmRleGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCIKKyNpbmNs dWRlICJmb3JlaWduL2Zkd2FwaS5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIv YXV0b3ZhY3V1bS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2lu Y2x1ZGUgInV0aWxzL2RhdHVtLmgiCisjaW5jbHVkZSAidXRpbHMvc29ydHN1 cHBvcnQuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorI2luY2x1 ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgorCisjaW5jbHVk ZSAidXRpbHMvbXZzdGF0cy5oIgorCisvKiBGSVhNRSBwcml2YXRlIHN0cnVj dHVyZSBjb3BpZWQgZnJvbSBhbmFseXplLmMgKi8KKwordHlwZWRlZiBzdHJ1 Y3QKK3sKKwlPaWQJCQllcW9wcjsJCQkvKiAnPScgb3BlcmF0b3IgZm9yIGRh dGF0eXBlLCBpZiBhbnkgKi8KKwlPaWQJCQllcWZ1bmM7CQkJLyogYW5kIGFz c29jaWF0ZWQgZnVuY3Rpb24gKi8KKwlPaWQJCQlsdG9wcjsJCQkvKiAnPCcg b3BlcmF0b3IgZm9yIGRhdGF0eXBlLCBpZiBhbnkgKi8KK30gU3RkQW5hbHl6 ZURhdGE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJRGF0dW0JCXZhbHVlOwkJ CS8qIGEgZGF0YSB2YWx1ZSAqLworCWludAkJCXR1cG5vOwkJCS8qIHBvc2l0 aW9uIGluZGV4IGZvciB0dXBsZSBpdCBjYW1lIGZyb20gKi8KK30gU2NhbGFy SXRlbTsKKyAKKy8qIG11bHRpLXNvcnQgKi8KK3R5cGVkZWYgc3RydWN0IE11 bHRpU29ydFN1cHBvcnREYXRhIHsKKwlpbnQJCQkJbmRpbXM7CQkvKiBudW1i ZXIgb2YgZGltZW5zaW9ucyBzdXBwb3J0ZWQgYnkgdGhlICovCisJU29ydFN1 cHBvcnREYXRhCXNzdXBbMV07CS8qIHNvcnQgc3VwcG9ydCBkYXRhIGZvciBl YWNoIGRpbWVuc2lvbiAqLworfSBNdWx0aVNvcnRTdXBwb3J0RGF0YTsKKwor dHlwZWRlZiBNdWx0aVNvcnRTdXBwb3J0RGF0YSogTXVsdGlTb3J0U3VwcG9y dDsKKwordHlwZWRlZiBzdHJ1Y3QgU29ydEl0ZW0geworCURhdHVtICAqdmFs dWVzOworCWJvb2wgICAqaXNudWxsOworfSBTb3J0SXRlbTsKKworTXVsdGlT b3J0U3VwcG9ydCBtdWx0aV9zb3J0X2luaXQoaW50IG5kaW1zKTsKKwordm9p ZCBtdWx0aV9zb3J0X2FkZF9kaW1lbnNpb24oTXVsdGlTb3J0U3VwcG9ydCBt c3MsIGludCBzb3J0ZGltLAorCQkJCQkJCSAgaW50IGRpbSwgVmFjQXR0clN0 YXRzICoqdmFjYXR0cnN0YXRzKTsKKworaW50IG11bHRpX3NvcnRfY29tcGFy ZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpOwor CitpbnQgbXVsdGlfc29ydF9jb21wYXJlX2RpbShpbnQgZGltLCBjb25zdCBT b3J0SXRlbSAqYSwKKwkJCQkJCSAgIGNvbnN0IFNvcnRJdGVtICpiLCBNdWx0 aVNvcnRTdXBwb3J0IG1zcyk7CisKKy8qIGNvbXBhcmF0b3JzLCB1c2VkIHdo ZW4gY29uc3RydWN0aW5nIG11bHRpdmFyaWF0ZSBzdGF0cyAqLworaW50IGNv bXBhcmVfc2NhbGFyc19zaW1wbGUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9p ZCAqYiwgdm9pZCAqYXJnKTsKK2ludCBjb21wYXJlX3NjYWxhcnNfcGFydGl0 aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZyk7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2RlcGVu ZGVuY2llcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9kZXBlbmRl bmNpZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44 NGI2NTYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9kZXBlbmRlbmNpZXMuYwpAQCAtMCwwICsxLDYzOCBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGVwZW5kZW5j aWVzLmMKKyAqCSAgUE9TVEdSRVMgbXVsdGl2YXJpYXRlIGZ1bmN0aW9uYWwg ZGVwZW5kZW5jaWVzCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDE1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICog SURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9kZXBlbmRlbmNpZXMuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRl ICJ1dGlscy9sc3lzY2FjaGUuaCIKKworLyoKKyAqIE1pbmUgZnVuY3Rpb25h bCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBjb2x1bW5zLCBpbiB0aGUgZm9ybSAo QSA9PiBCKSwKKyAqIG1lYW5pbmcgdGhhdCBhIHZhbHVlIGluIGNvbHVtbiAn QScgZGV0ZXJtaW5lcyB2YWx1ZSBpbiAnQicuIEEgc2ltcGxlCisgKiBhcnRp ZmljaWFsIGV4YW1wbGUgbWF5IGJlIGEgdGFibGUgY3JlYXRlZCBsaWtlIHRo aXMKKyAqCisgKiAgICAgQ1JFQVRFIFRBQkxFIGRlcHRlc3QgKGEgSU5ULCBi IElOVCkKKyAqICAgICAgICBBUyBTRUxFQ1QgaSwgaS8xMCBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMDAwMCkgcyhpKTsKKyAqCisgKiBDbGVhcmx5LCBv bmNlIHdlIGtub3cgdGhlIHZhbHVlIGZvciAnQScgd2UgY2FuIGVhc2lseSBk ZXRlcm1pbmUgdGhlCisgKiB2YWx1ZSBvZiAnQicgYnkgZGl2aWRpbmcgKEEv MTApLiBBIG1vcmUgcHJhY3RpY2FsIGV4YW1wbGUgbWF5IGJlCisgKiBhZGRy ZXNzZXMsIHdoZXJlIChaSVAgY29kZSA9PiBjaXR5IG5hbWUpLCBpLmUuIG9u Y2Ugd2Uga25vdyB0aGUgWklQLAorICogd2UgcHJvYmFibHkga25vdyB3aGlj aCBjaXR5IGl0IGJlbG9uZ3MgdG8uIExhcmdlciBjaXRpZXMgdXN1YWxseSBo YXZlCisgKiBtdWx0aXBsZSBaSVAgY29kZXMsIHNvIHRoZSBkZXBlbmRlbmN5 IGNhbid0IGJlIHJldmVyc2VkLgorICoKKyAqIEZ1bmN0aW9uYWwgZGVwZW5k ZW5jaWVzIGFyZSBhIGNvbmNlcHQgd2VsbCBkZXNjcmliZWQgaW4gcmVsYXRp b25hbAorICogdGhlb3J5LCBlc3BlY2lhbGx5IGluIGRlZmluaXRpb24gb2Yg bm9ybWFsaXphdGlvbiBhbmQgIm5vcm1hbCBmb3JtcyIuCisgKiBXaWtpcGVk aWEgaGFzIGEgbmljZSBkZWZpbml0aW9uIG9mIGEgZnVuY3Rpb25hbCBkZXBl bmRlbmN5IFsxXToKKyAqCisgKiAgICAgSW4gYSBnaXZlbiB0YWJsZSwgYW4g YXR0cmlidXRlIFkgaXMgc2FpZCB0byBoYXZlIGEgZnVuY3Rpb25hbAorICog ICAgIGRlcGVuZGVuY3kgb24gYSBzZXQgb2YgYXR0cmlidXRlcyBYICh3cml0 dGVuIFggLT4gWSkgaWYgYW5kIG9ubHkKKyAqICAgICBpZiBlYWNoIFggdmFs dWUgaXMgYXNzb2NpYXRlZCB3aXRoIHByZWNpc2VseSBvbmUgWSB2YWx1ZS4g Rm9yCisgKiAgICAgZXhhbXBsZSwgaW4gYW4gIkVtcGxveWVlIiB0YWJsZSB0 aGF0IGluY2x1ZGVzIHRoZSBhdHRyaWJ1dGVzCisgKiAgICAgIkVtcGxveWVl IElEIiBhbmQgIkVtcGxveWVlIERhdGUgb2YgQmlydGgiLCB0aGUgZnVuY3Rp b25hbAorICogICAgIGRlcGVuZGVuY3kge0VtcGxveWVlIElEfSAtPiB7RW1w bG95ZWUgRGF0ZSBvZiBCaXJ0aH0gd291bGQgaG9sZC4KKyAqICAgICBJdCBm b2xsb3dzIGZyb20gdGhlIHByZXZpb3VzIHR3byBzZW50ZW5jZXMgdGhhdCBl YWNoIHtFbXBsb3llZSBJRH0KKyAqICAgICBpcyBhc3NvY2lhdGVkIHdpdGgg cHJlY2lzZWx5IG9uZSB7RW1wbG95ZWUgRGF0ZSBvZiBCaXJ0aH0uCisgKgor ICogWzFdIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0YWJhc2Vf bm9ybWFsaXphdGlvbgorICoKKyAqIE1vc3QgZGF0YXNldHMgbWlnaHQgYmUg bm9ybWFsaXplZCBub3QgdG8gY29udGFpbiBhbnkgc3VjaCBmdW5jdGlvbmFs CisgKiBkZXBlbmRlbmNpZXMsIGJ1dCBzb21ldGltZXMgaXQncyBub3QgcHJh Y3RpY2FsLiBJbiBzb21lIGNhc2VzIGl0J3MKKyAqIGFjdHVhbGx5IGEgY29u c2Npb3VzIGNob2ljZSB0byBtb2RlbCB0aGUgZGF0YXNldCBpbiBkZW5vcm1h bGl6ZWQgd2F5LAorICogZWl0aGVyIGJlY2F1c2Ugb2YgcGVyZm9ybWFuY2Ug b3IgdG8gbWFrZSBxdWVyeWluZyBlYXNpZXIuCisgKgorICogVGhlIGN1cnJl bnQgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSBkZXBlbmRlbmNpZXMg YmV0d2VlbiB0d28KKyAqIGNvbHVtbnMsIGJ1dCB0aGlzIGlzIG1lcmVseSBh IHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBpbml0aWFsIHBhdGNoLgorICogSXQn cyBjZXJ0YWlubHkgdXNlZnVsIHRvIG1pbmUgZm9yIGRlcGVuZGVuY2llcyBp bnZvbHZpbmcgbXVsdGlwbGUKKyAqIGNvbHVtbnMgb24gdGhlICdsZWZ0JyBz aWRlLCBpLmUuIGEgY29uZGl0aW9uIGZvciB0aGUgZGVwZW5kZW5jeS4KKyAq IFRoYXQgaXMgZGVwZW5kZW5jaWVzIFtBLEJdID0+IEMgYW5kIHNvIG9uLgor ICoKKyAqIFRPRE8gVGhlIGltcGxlbWVudGF0aW9uIG1heS9zaG91bGQgYmUg c21hcnQgZW5vdWdoIG5vdCB0byBtaW5lIGJvdGgKKyAqICAgICAgW0EgPT4g Ql0gYW5kIFtBLEMgPT4gQl0sIGJlY2F1c2UgdGhlIHNlY29uZCBkZXBlbmRl bmN5IGlzIGEKKyAqICAgICAgY29uc2VxdWVuY2Ugb2YgdGhlIGZpcnN0IG9u ZSAoaWYgdmFsdWVzIG9mIEEgZGV0ZXJtaW5lIHZhbHVlcworICogICAgICBv ZiBCLCBhZGRpbmcgYW5vdGhlciBjb2x1bW4gd29uJ3QgY2hhbmdlIHRoYXQp LiBUaGUgQU5BTFlaRQorICogICAgICBzaG91bGQgZmlyc3QgYW5hbHl6ZSAx OjEgZGVwZW5kZW5jaWVzLCB0aGVuIDI6MSBkZXBlbmRlbmNpZXMKKyAqICAg ICAgKGFuZCBza2lwIHRoZSBhbHJlYWR5IGlkZW50aWZpZWQgb25lcyksIGV0 Yy4KKyAqCisgKiBGb3IgZXhhbXBsZSB0aGUgZGVwZW5kZW5jeSBbY2l0eSBu YW1lID0+IHppcCBjb2RlXSBpcyBtdWNoIHdlYWtlcgorICogdGhhbiBbY2l0 eSBuYW1lLCBzdGF0ZSBuYW1lID0+IHppcCBjb2RlXSwgYmVjYXVzZSB0aGVy ZSBtYXkgYmUKKyAqIG11bHRpcGxlIGNpdGllcyB3aXRoIHRoZSBzYW1lIG5h bWUgaW4gdmFyaW91cyBzdGF0ZXMuIEl0J3Mgbm90CisgKiBwZXJmZWN0IHRo b3VnaCAtIHRoZXJlIGFyZSBwcm9iYWJseSBjaXRpZXMgd2l0aCB0aGUgc2Ft ZSBuYW1lIHdpdGhpbgorICogdGhlIHNhbWUgc3RhdGUsIGJ1dCB0aGlzIGlz IHJlbGF0aXZlbHkgcmFyZSBvY2N1cmVuY2UgaG9wZWZ1bGx5LgorICogTW9y ZSBhYm91dCB0aGlzIGluIHRoZSBzZWN0aW9uIGFib3V0IGRlcGVuZGVuY3kg bWluaW5nLgorICoKKyAqIEhhbmRsaW5nIG11bHRpcGxlIGNvbHVtbnMgb24g dGhlIHJpZ2h0IHNpZGUgaXMgbm90IG5lY2Vzc2FyeSwgYXMgc3VjaAorICog ZGVwZW5kZW5jaWVzIG1heSBiZSBkZWNvbXBvc2VkIGludG8gYSBzZXQgb2Yg ZGVwZW5kZW5jaWVzIHdpdGgKKyAqIHRoZSBzYW1lIG1lYW5pbmcsIG9uZSBm b3IgZWFjaCBjb2x1bW4gb24gdGhlIHJpZ2h0IHNpZGUuIEZvciBleGFtcGxl CisgKgorICogICAgIEEgPT4gW0IsQ10KKyAqCisgKiBpcyBleGFjdGx5IHRo ZSBzYW1lIGFzCisgKgorICogICAgIChBID0+IEIpICYgKEEgPT4gQykuCisg KgorICogT2YgY291cnNlLCBzdG9yaW5nIChBID0+IFtCLCBDXSkgbWF5IGJl IG1vcmUgZWZmaWNpZW50IHRoYW50IHN0b3JpbmcKKyAqIHRoZSB0d28gZGVw ZW5kZW5jaWVzIChBID0+IEIpIGFuZCAoQSA9PiBDKSBzZXBhcmF0ZWx5Lgor ICoKKyAqCisgKiBEZXBlbmRlbmN5IG1pbmluZyAoQU5BTFlaRSkKKyAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBjdXJyZW50 IGJ1aWxkIGFsZ29yaXRobSBpcyByYXRoZXIgc2ltcGxlIC0gZm9yIGVhY2gg cGFpciBbQSxCXSBvZgorICogY29sdW1ucywgdGhlIGRhdGEgYXJlIHNvcnRl ZCBsZXhpY29ncmFwaGljYWxseSAoZmlyc3QgYnkgQSwgdGhlbiBCKSwKKyAq IGFuZCB0aGVuIGEgbnVtYmVyIG9mIG1ldHJpY3MgaXMgY29tcHV0ZWQgYnkg d2Fsa2luZyB0aGUgc29ydGVkIGRhdGEuCisgKgorICogSW4gZ2VuZXJhbCB0 aGUgYWxnb3JpdGhtIGNvdW50cyBkaXN0aWN0IHZhbHVlcyBvZiBBIChmb3Jt aW5nIGdyb3VwcworICogdGhhbmtzIHRvIHRoZSBzb3J0aW5nKSwgc3VwcG9y dGluZyBvciBjb250cmFkaWN0aW5nIHRoZSBoeXBvdGhlc2lzCisgKiB0aGF0 IEEgPT4gQiAoaS5lLiB0aGF0IHZhbHVlcyBvZiBCIGFyZSBwcmVkZXRlcm1p bmVkIGJ5IEEpLiBJZiB0aGVyZQorICogYXJlIG11bHRpcGxlIHZhbHVlcyBv ZiBCIGZvciBhIHNpbmdsZSB2YWx1ZSBvZiBBLCBpdCdzIGNvdW50ZWQgYXMK KyAqIGNvbnRyYWRpY3RpbmcuCisgKgorICogQSBncm91cCBtYXkgYmUgbmVp dGhlciBzdXBwb3J0aW5nIG5vciBjb250cmFkaWN0aW5nLiBUbyBiZSBjb3Vu dGVkIGFzCisgKiBzdXBwb3J0aW5nLCB0aGUgZ3JvdXAgaGFzIHRvIGhhdmUg YXQgbGVhc3QgbWluX2dyb3VwX3NpemUoPTMpIHJvd3MuCisgKiBTbWFsbGVy ICdzdXBwb3J0aW5nJyBncm91cHMgYXJlIGNvdW50ZWQgYXMgbmV1dHJhbC4K KyAqCisgKiBGaW5hbGx5LCB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gc3VwcG9y dGluZyBhbmQgY29udHJhZGljdGluZyBncm91cHMgaXMKKyAqIGNvbXBhcmVk LCBhbmQgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMTB4IG1vcmUgc3VwcG9ydGlu ZyByb3dzLCB0aGUKKyAqIGRlcGVuZGVuY3kgaXMgY29uc2lkZXJlZCB2YWxp ZC4KKyAqCisgKgorICogUmVhbC13b3JsZCBkYXRhc2V0cyBhcmUgaW1wZXJm ZWN0IC0gdGhlcmUgbWF5IGJlIGVycm9ycyAoZS5nLiBkdWUgdG8KKyAqIGRh dGEtZW50cnkgbWlzdGFrZXMpLCBvciBmYWN0dWFsbHkgY29ycmVjdCByZWNv cmRzLCB5ZXQgY29udHJhZGljdGluZworICogdGhlIGRlcGVuZGVuY3kgKGUu Zy4gd2hlbiBhIGNpdHkgc3BsaXRzIGludG8gdHdvLCBidXQgYm90aCBrZWVw IHRoZQorICogc2FtZSBaSVAgY29kZSkuIEEgc3RyaWN0IEFOQUxZWkUgaW1w bGVtZW50YXRpb24gKHdoZXJlIHRoZSBmdW5jdGlvbmFsCisgKiBkZXBlbmRl bmNpZXMgYXJlIGlkZW50aWZpZWQpIHdvdWxkIGlnbm9yZSBkZXBlbmRlbmNp ZXMgb24gc3VjaCBub2lzeQorICogZGF0YSwgbWFraW5nIHRoZSBhcHByb2Fj aCB1bnVzYWJsZSBpbiBwcmFjdGljZS4KKyAqCisgKiBUaGUgcHJvcG9zZWQg aW1wbGVtZW50YXRpb24gYXR0ZW1wdHMgdG8gaGFuZGxlIHN1Y2ggbm9pc3kg Y2FzZXMKKyAqIGdyYWNlZnVsbHksIGJ5IHRvbGVyYXRpbmcgc21hbGwgbnVt YmVyIG9mIGNvbnRyYWRpY3RpbmcgY2FzZXMuCisgKgorICogSW4gdGhlIGZ1 dHVyZSB0aGlzIG1pZ2h0IGFsc28gcGVyZm9ybSBzb21lIHNvcnQgb2YgdGVz dCBhbmQgZGVjaWRlCisgKiB3aGV0aGVyIGl0J3Mgd29ydGggYnVpbGRpbmcg YW55IG90aGVyIGtpbmQgb2YgbXVsdGl2YXJpYXRlIHN0YXRzLAorICogb3Ig d2hldGhlciB0aGUgZGVwZW5kZW5jaWVzIHN1ZmZpY2llbnRseSBkZXNjcmli ZSB0aGUgZGF0YS4gT3IgYXQKKyAqIGxlYXN0IG5vdCBidWlsZCB0aGUgTUNW IGxpc3QgLyBoaXN0b2dyYW0gb24gdGhlIGltcGxpZWQgY29sdW1ucy4KKyAq IFN1Y2ggcmVkdWN0aW9uIHdvdWxkIGhvd2V2ZXIgbWFrZSB0aGUgJ3Zlcmlm aWNhdGlvbicgKHNlZSB0aGUgbmV4dAorICogc2VjdGlvbikgaW1wb3NzaWJs ZS4KKyAqCisgKgorICogQ2xhdXNlIHJlZHVjdGlvbiAocGxhbm5lci9vcHRp bWl6ZXIpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBBcGxseWluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIHF1aXRl IHNpbXBsZSAtIGdpdmVuIGEgbGlzdCBvZiBjbGF1c2VzLAorICogdHJ5IHRv IGFwcGx5IGFsbCB0aGUgZGVwZW5kZW5jaWVzLiBGb3IgZXhhbXBsZSBnaXZl biBjbGF1c2UgbGlzdAorICoKKyAqICAgIChhID0gMSkgQU5EIChiID0gMSkg QU5EIChjID0gMSkgQU5EIChkIDwgMTAwKQorICoKKyAqIGFuZCBkZXBlbmRl bmNpZXMgW2E9PmJdIGFuZCBbYT0+ZF0sIHRoaXMgbWF5IGJlIHJlZHVjZWQg dG8KKyAqCisgKiAgICAoYSA9IDEpIEFORCAoYyA9IDEpIEFORCAoZCA8IDEw MCkKKyAqCisgKiBUaGUgKGQ8MTAwKSBjYW4ndCBiZSByZWR1Y2VkIGFzIGl0 J3Mgbm90IGFuIGVxdWFsaXR5IGNsYXVzZSwgc28gdGhlCisgKiBkZXBlbmRl bmN5IFthPT5kXSBjYW4ndCBiZSBhcHBsaWVkLgorICoKKyAqIFNlZSBjbGF1 c2VsaXN0X2FwcGx5X2RlcGVuZGVuY2llcygpIGZvciBtb3JlIGRldGFpbHMu CisgKgorICogVGhlIHByb2JsZW0gd2l0aCB0aGUgcmVkdWN0aW9uIGlzIHRo YXQgdGhlIHF1ZXJ5IG1heSB1c2UgY29uZGl0aW9ucworICogdGhhdCBhcmUg bm90IHJlZHVuZGFudCwgYnV0IGluIGZhY3QgY29udHJhZGljdG9yeSAtIGUu Zy4gdGhlIHVzZXIKKyAqIG1heSBzZWFyY2ggZm9yIGEgWklQIGNvZGUgYW5k IGEgY2l0eSBuYW1lIG5vdCBtYXRjaGluZyB0aGUgWklQIGNvZGUuCisgKgor ICogSW4gc3VjaCBjYXNlcywgdGhlIGNvbmRpdGlvbiBvbiB0aGUgY2l0eSBu YW1lIGlzIG5vdCBhY3R1YWxseQorICogcmVkdW5kYW50LCBidXQgYWN0dWFs bHkgY29udHJhZGljdG9yeSAobWFraW5nIHRoZSByZXN1bHQgZW1wdHkpLCBh bmQKKyAqIHJlbW92aW5nIGl0IHdoaWxlIGVzdGltYXRpbmcgdGhlIGNhcmRp bmFsaXR5IHdpbGwgbWFrZSB0aGUgZXN0aW1hdGUKKyAqIHdvcnNlLgorICoK KyAqIFRoZSBjdXJyZW50IGVzdGltYXRpb24gYXNzdW1pbmcgaW5kZXBlbmRl bmNlIChhbmQgbXVsdGlwbHlpbmcgdGhlCisgKiBzZWxlY3Rpdml0aWVzKSB3 b3JrcyBiZXR0ZXIgaW4gdGhpcyBjYXNlLCBidXQgb25seSBieSB1dHRlciBs dWNrLgorICoKKyAqIEluIHNvbWUgY2FzZXMgdGhpcyBtaWdodCBiZSB2ZXJp ZmllZCB1c2luZyB0aGUgb3RoZXIgbXVsdGl2YXJpYXRlCisgKiBzdGF0aXN0 aWNzIC0gTUNWIGxpc3RzIGFuZCBoaXN0b2dyYW1zLiBGb3IgTUNWIGxpc3Rz IHRoZSB2ZXJpZmljYXRpb24KKyAqIG1pZ2h0IGJlIHZlcnkgc2ltcGxlIC0g cGVlayBpbnRvIHRoZSBsaXN0IGlmIHRoZXJlIGFyZSBhbnkgaXRlbXMKKyAq IG1hdGNoaW5nIHRoZSBjbGF1c2Ugb24gdGhlICdBJyBjb2x1bW4gKGUuZy4g WklQIGNvZGUpLCBhbmQgaWYgc3VjaAorICogaXRlbSBpcyBmb3VuZCwgY2hl Y2sgdGhhdCB0aGUgJ0InIGNvbHVtbiBtYXRjaGVzIHRoZSBvdGhlciBjbGF1 c2UuCisgKiBJZiBpdCBkb2VzIG5vdCwgdGhlIGNsYXVzZXMgYXJlIGNvbnRy YWRpY3RvcnkuIFdlIGNhbid0IHJlYWxseSBzYXkKKyAqIGlmIHN1Y2ggaXRl bSB3YXMgbm90IGZvdW5kLCBleGNlcHQgbWF5YmUgcmVzdHJpY3RpbmcgdGhl IHNlbGVjdGl2aXR5CisgKiB1c2luZyB0aGUgTUNWIGRhdGEgKGUuZy4gdXNp bmcgbWluL21heCBzZWxlY3Rpdml0eSwgb3Igc29tZXRoaW5nKS4KKyAqCisg KiBXaXRoIGhpc3RvZ3JhbXMsIGl0IG1pZ2h0IHdvcmsgc2ltaWxhcmx5IC0g d2UgY2FuJ3QgY2hlY2sgdGhlIHZhbHVlcworICogZGlyZWN0bHkgKGJlY2F1 c2UgaGlzdG9ncmFtcyB1c2UgYnVja2V0cywgdW5saWtlIE1DViBsaXN0cywg c3RvcmluZworICogdGhlIGFjdHVhbCB2YWx1ZXMpLiBTbyB3ZSBjYW4gb25s eSBvYnNlcnZlIHRoZSBidWNrZXRzIG1hdGNoaW5nIHRoZQorICogY2xhdXNl cyAtIGlmIHRob3NlIGJ1Y2tldHMgaGF2ZSB2ZXJ5IGxvdyBmcmVxdWVuY3ks IGl0IHByb2JhYmx5IG1lYW5zCisgKiB0aGUgdHdvIGNsYXVzZXMgYXJlIGlu Y29tcGF0aWJsZS4KKyAqCisgKiBJdCdzIHVuY2xlYXIgd2hhdCAnbG93IGZy ZXF1ZW5jeScgaXMsIGJ1dCBpZiBvbmUgb2YgdGhlIGNsYXVzZXMgaXMKKyAq IGltcGxpZWQgKGF1dG9tYXRpY2FsbHkgdHJ1ZSBiZWNhdXNlIG9mIHRoZSBv dGhlciBjbGF1c2UpLCB0aGVuCisgKgorICogICAgIHNlbGVjdGl2aXR5W2Ns YXVzZShBKV0gPSBzZWxlY3Rpdml0eVtjbGF1c2UoQSkgJiBjbGF1c2UoQild CisgKgorICogU28gd2UgbWlnaHQgY29tcHV0ZSBzZWxlY3Rpdml0eSBvZiB0 aGUgZmlyc3QgY2xhdXNlIChvbiB0aGUgY29sdW1uCisgKiBBIGluIGRlcGVu ZGVuY3kgW0E9PkJdKSAtIGZvciBleGFtcGxlIHVzaW5nIHJlZ3VsYXIgc3Rh dGlzdGljcy4KKyAqIEFuZCB0aGVuIGNoZWNrIGlmIHRoZSBzZWxlY3Rpdml0 eSBjb21wdXRlZCBmcm9tIHRoZSBoaXN0b2dyYW0gaXMKKyAqIGFib3V0IHRo ZSBzYW1lIChvciBzaWduaWZpY2FudGx5IGxvd2VyKS4KKyAqCisgKiBUaGUg cHJvYmxlbSBpcyB0aGF0IGhpc3RvZ3JhbXMgd29yayB3ZWxsIG9ubHkgd2hl biB0aGUgZGF0YSBvcmRlcmluZworICogbWF0Y2hlcyB0aGUgbmF0dXJhbCBt ZWFuaW5nLiBGb3IgdmFsdWVzIHRoYXQgc2VydmUgYXMgbGFiZWxzIC0gbGlr ZQorICogY2l0eSBuYW1lcyBvciBaSVAgY29kZXMsIG9yIGV2ZW4gZ2VuZXJh dGVkIElEcywgaGlzdG9ncmFtcyByZWFsbHkKKyAqIGRvbid0IHdvcmsgYWxs IHRoYXQgd2VsbC4gRm9yIGV4YW1wbGUgc29ydGluZyBjaXRpZXMgYnkgbmFt ZSB3b24ndAorICogbWF0Y2ggdGhlIHNvcnRpbmcgb2YgWklQIGNvZGVzLCBy ZW5kZXJpbmcgdGhlIGhpc3RvZ3JhbSB1bnVzYWJsZS4KKyAqCisgKiBUaGUg TUNWIGFyZSBwcm9iYWJseSBnb2luZyB0byB3b3JrIG11Y2ggYmV0dGVyLCBi ZWNhdXNlIHRoZXkgZG9uJ3QKKyAqIHJlYWxseSBhc3N1bWUgYW55IHNvcnQg b2Ygb3JkZXJpbmcuIEFuZCBpdCdzIHByb2JhYmx5IG1vcmUgYXBwcm9wcmlh dGUKKyAqIGZvciB0aGUgbGFiZWwtbGlrZSBkYXRhLgorICoKKyAqIFRPRE8g U3VwcG9ydCBkZXBlbmRlbmNpZXMgd2l0aCBtdWx0aXBsZSBjb2x1bW5zIG9u IGxlZnQvcmlnaHQuCisgKgorICogVE9ETyBJbnZlc3RpZ2F0ZSB1c2luZyBo aXN0b2dyYW0gYW5kIE1DViBsaXN0IHRvIGNvbmZpcm0gdGhlCisgKiAgICAg IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLgorICoKKyAqIFRPRE8gSW52ZXN0 aWdhdGUgc3RhdGlzdGljYWwgdGVzdGluZyBvZiB0aGUgZGlzdHJpYnV0aW9u ICh0byBkZWNpZGUKKyAqICAgICAgd2hldGhlciBpdCBtYWtlcyBzZW5zZSB0 byBidWlsZCB0aGUgaGlzdG9ncmFtL01DViBsaXN0KS4KKyAqCisgKiBUT0RP IFVzaW5nIGEgbWluL21heCBvZiBzZWxlY3Rpdml0aWVzIHdvdWxkIHByb2Jh Ymx5IG1ha2UgbW9yZSBzZW5zZQorICogICAgICBmb3IgdGhlIGFzc29jaWF0 ZWQgY29sdW1ucy4KKyAqCisgKiBUT0RPIENvbnNpZGVyIGVsaW1pbmF0aW5n IHRoZSBpbXBsaWVkIGNvbHVtbnMgZnJvbSB0aGUgaGlzdG9ncmFtIGFuZAor ICogICAgICBNQ1YgbGlzdHMgKGJ1dCBtYXliZSB0aGF0J3Mgbm90IGEgZ29v ZCBpZGVhLCBiZWNhdXNlIHRoYXQnZCBtYWtlCisgKiAgICAgIGl0IGltcG9z c2libGUgdG8gdXNlIHRoZXNlIHN0YXRzIGZvciBub24tZXF1YWxpdHkgY2xh dXNlcyBhbmQKKyAqICAgICAgYWxzbyBpdCB3b3VsZG4ndCBiZSBwb3NzaWJs ZSB0byB1c2UgdGhlIHN0YXRzIGZvciB2ZXJpZmljYXRpb24KKyAqICAgICAg b2YgdGhlIGRlcGVuZGVuY2llcyBhcyBwcm9wb3NlZCBpbiBhbm90aGVyIFRP RE8pLgorICoKKyAqIFRPRE8gVGhpcyBidWlsZHMgYSBjb21wbGV0ZSBzZXQg b2YgZGVwZW5kZW5jaWVzLCBpLmUuIGluY2x1ZGluZworICogICAgICB0cmFu c2l0aXZlIGRlcGVuZGVuY2llcyAtIGlmIHdlIGlkZW50aWZ5IFtBID0+IEJd IGFuZCBbQiA9PiBDXSwKKyAqICAgICAgd2UncmUgbGlrZWx5IHRvIGlkZW50 aWZ5IFtBID0+IENdIHRvby4gSXQgbWlnaHQgYmUgYmV0dGVyIHRvCisgKiAg ICAgIGtlZXAgb25seSB0aGUgbWluaW1hbCBzZXQgb2YgZGVwZW5kZW5jaWVz LCBpLmUuIHBydW5lIGFsbCB0aGUKKyAqICAgICAgZGVwZW5kZW5jaWVzIHRo YXQgd2UgY2FuIHJlY3JlYXRlIGJ5IHRyYW5zaXZpdGl0eS4KKyAqCisgKiAg ICAgIFRoZXJlIGFyZSB0d28gY29uY2VwdHVhbCB3YXlzIHRvIGRvIHRoYXQ6 CisgKgorICogICAgICAoYSkgZ2VuZXJhdGUgYWxsIHRoZSBydWxlcywgYW5k IHRoZW4gcHJ1bmUgdGhlIHJ1bGVzIHRoYXQgbWF5CisgKiAgICAgICAgICBi ZSByZWN0ZWF0ZWQgYnkgY29tYmluaW5nIG90aGVyIGRlcGVuZGVuY2llcywg b3IKKyAqCisgKiAgICAgIChiKSBwZXJmb3JtaW5nIHRoZSAnaXMgY29tYmlu YXRpb24gb2Ygb3RoZXIgZGVwZW5kZW5jaWVzJyBjaGVjaworICogICAgICAg ICAgYmVmb3JlIGFjdHVhbGx5IGRvaW5nIHRoZSB3b3JrCisgKgorICogICAg ICBUaGUgc2Vjb25kIG9wdGlvbiBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IHdl IGRvbid0IHJlYWxseSBuZWVkCisgKiAgICAgIHRvIHBlcmZvcm0gdGhlIHNv cnQvY291bnQuIEl0J3Mgbm90IHN1ZmZpY2llbnQgYWxvbmUsIHRob3VnaCwK KyAqICAgICAgYmVjYXVzZSB3ZSBtYXkgZGlzY292ZXIgdGhlIGRlcGVuZGVu Y2llcyBpbiB0aGUgd3Jvbmcgb3JkZXIuCisgKiAgICAgIEZvciBleGFtcGxl IFtBID0+IEJdLCBbQSA9PiBDXSBhbmQgdGhlbiBbQiA9PiBDXS4gTm9uZSBv ZiB0aG9zZQorICogICAgICBkZXBlbmRlbmNpZXMgaXMgYSBjb21iaW5hdGlv biBvZiB0aGUgYWxyZWFkeSBrbm93biBvbmVzLCB5ZXQKKyAqICAgICAgW0Eg PT4gQ10gaXMgYSBjb21iaW5hdGlvbiBvZiBbQSA9PiBCXSBhbmQgW0IgPT4g Q10uCisgKgorICogRklYTUUgTm90IHN1cmUgdGhlIGN1cnJlbnQgTlVMTCBo YW5kbGluZyBtYWtlcyBtdWNoIHNlbnNlLiBXZSBhc3N1bWUKKyAqICAgICAg IHRoYXQgTlVMTCBpcyAwLCBzbyBpdCdzIGhhbmRsZWQgbGlrZSBhIHJlZ3Vs YXIgdmFsdWUKKyAqICAgICAgIChOVUxMID09IE5VTEwpLCBzbyBhbGwgTlVM THMgaW4gYSBzaW5nbGUgY29sdW1uIGZvcm0gYSBzaW5nbGUKKyAqICAgICAg IGdyb3VwLiBNYXliZSB0aGF0J3Mgbm90IHRoZSByaWdodCB0aGluZyB0byBk bywgZXNwZWNpYWxseSB3aXRoCisgKiAgICAgICBlcXVhbGl0eSBjb25kaXRp b25zIC0gaW4gdGhhdCBjYXNlIE5VTExzIGFyZSBpcnJlbGV2YW50LiBTbwor ICogICAgICAgbWF5YmUgdGhlIHJpZ2h0IHNvbHV0aW9uIHdvdWxkIGJlIHRv IGp1c3QgaWdub3JlIE5VTEwgdmFsdWVzPworICoKKyAqICAgICAgIEhvd2V2 ZXIgc2ltcGx5ICJpZ25vcmluZyIgdGhlIE5VTEwgdmFsdWVzIGRvZXMgbm90 IHNlZW0gbGlrZQorICogICAgICAgYSBnb29kIGlkZWEgLSBpbWFnaW5lIGNv bHVtbnMgQSBhbmQgQiwgd2hlcmUgZm9yIGVhY2ggdmFsdWUgb2YKKyAqICAg ICAgIEEsIHZhbHVlcyBpbiBCIGFyZSBjb25zdGFudCAoc2FtZSBmb3IgdGhl IHdob2xlIGdyb3VwKSBvciBOVUxMLgorICogICAgICAgTGV0J3Mgc2F5IG9u bHkgMTAlIG9mIEIgdmFsdWVzIGluIGVhY2ggZ3JvdXAgaXMgbm90IE5VTEwu IFRoZW4KKyAqICAgICAgIGlnbm9yaW5nIHRoZSBOVUxMIHZhbHVlcyB3aWxs IHJlc3VsdCBpbiAxMHggbWlzZXN0aW1hdGUgKGFuZAorICogICAgICAgaXQn cyB0cml2aWFsIHRvIGNvbnN0cnVjdCBhcmJpdHJhcnkgZXJyb3JzKS4gU28g bWF5YmUgaGFuZGxpbmcKKyAqICAgICAgIE5VTEwgdmFsdWVzIGp1c3QgbGlr ZSBhIHJlZ3VsYXIgdmFsdWUgaXMgdGhlIHJpZ2h0IHRoaW5nIGhlcmUuCisg KgorICogICAgICAgT3IgbWF5YmUgTlVMTCB2YWx1ZXMgc2hvdWxkIGJlIHRy ZWF0ZWQgZGlmZmVyZW50bHkgb24gZWFjaCBzaWRlCisgKiAgICAgICBvZiB0 aGUgZGVwZW5kZW5jeT8gRS5nLiBhcyBpZ25vcmVkIG9uIHRoZSBsZWZ0IChj b25kaXRpb24pIGFuZAorICogICAgICAgYXMgcmVndWxhciB2YWx1ZXMgb24g dGhlIHJpZ2h0IC0gdGhpcyBzZWVtcyBjb25zaXN0ZW50IHdpdGggaG93Cisg KiAgICAgICBlcXVhbGl0eSBjbGF1c2VzIHdvcmssIGFzIGVxdWFsaXR5IGNs YXVzZSBtZWFucyAnTk9UIE5VTEwnLgorICogICAgICAgU28gaWYgd2Ugc2F5 IFtBID0+IEJdIHRoZW4gaXQgbWF5IGFsc28gaW1wbHkgIk5PVCBOVUxMIiBv biB0aGUKKyAqICAgICAgIHJpZ2h0IHNpZGUuCisgKi8KK01WRGVwZW5kZW5j aWVzCitidWlsZF9tdl9kZXBlbmRlbmNpZXMoaW50IG51bXJvd3MsIEhlYXBU dXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCSAgVmFjQXR0 clN0YXRzICoqc3RhdHMpCit7CisJaW50IGk7CisJaW50IG51bWF0dHJzID0g YXR0cnMtPmRpbTE7CisKKwkvKiByZXN1bHQgKi8KKwlpbnQgbmRlcHMgPSAw OworCU1WRGVwZW5kZW5jaWVzCWRlcGVuZGVuY2llcyA9IE5VTEw7CisJTXVs dGlTb3J0U3VwcG9ydCBtc3MgPSBtdWx0aV9zb3J0X2luaXQoMik7CS8qIDIg ZGltZW5zaW9ucyBmb3Igbm93ICovCisKKwkvKiBUT0RPIE1heWJlIHRoaXMg c2hvdWxkIGJlIHNvbWVob3cgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9mCisJ ICogICAgICBkaXN0aW5jdCB2YWx1ZXMgaW4gdGhlIHR3byBjb2x1bW5zIHdl J3JlIGN1cnJlbnRseSBhbmFseXppbmcuCisJICogICAgICBBc3N1bWluZyB0 aGUgZGlzdHJpYnV0aW9uIGlzIHVuaWZvcm0sIHdlIGNhbiBlc3RpbWF0ZSB0 aGUKKwkgKiAgICAgIGF2ZXJhZ2UgZ3JvdXAgc2l6ZSBhbmQgdXNlIGl0IGFz IGEgdGhyZXNob2xkLiBPciBzb21ldGhpbmcKKwkgKiAgICAgIGxpa2UgdGhh dC4gU2VlbXMgYmV0dGVyIHRoYW4gYSBzdGF0aWMgYXBwcm9hY2guCisJICov CisJaW50IG1pbl9ncm91cF9zaXplID0gMzsKKworCS8qIGRpbWVuc2lvbiBp bmRleGVzIHdlJ2xsIGNoZWNrIGZvciBhc3NvY2lhdGlvbnMgW2EgPT4gYl0g Ki8KKwlpbnQgZGltYSwgZGltYjsKKworCS8qCisJICogV2UnbGwgcmV1c2Ug dGhlIHNhbWUgYXJyYXkgZm9yIGFsbCB0aGUgMi1jb2x1bW4gY29tYmluYXRp b25zLgorCSAqCisJICogSXQncyBwb3NzaWJsZSB0byBzb3J0IHRoZSBzYW1w bGUgcm93cyBkaXJlY3RseSwgYnV0IHRoaXMgc2VlbWVkCisJICogc29tZWhv dyBzaW1wbGVzIC8gbGVzcyBlcnJvciBwcm9uZS4gQW5vdGhlciBvcHRpb24g d291bGQgYmUgdG8KKwkgKiBhbGxvY2F0ZSB0aGUgYXJyYXlzIGZvciBlYWNo IFNvcnRJdGVtIHNlcGFyYXRlbHksIGJ1dCB0aGF0J2QgYmUKKwkgKiBzaWdu aWZpY2FudCBvdmVyaGVhZCAobm90IGp1c3QgQ1BVLCBidXQgZXNwZWNpYWxs eSBtZW1vcnkgYmxvYXQpLgorCSAqLworCVNvcnRJdGVtICogaXRlbXMgPSAo U29ydEl0ZW0qKXBhbGxvYzAobnVtcm93cyAqIHNpemVvZihTb3J0SXRlbSkp OworCisJRGF0dW0gKnZhbHVlcyA9IChEYXR1bSopcGFsbG9jMChzaXplb2Yo RGF0dW0pICogbnVtcm93cyAqIDIpOworCWJvb2wgICppc251bGwgPSAoYm9v bCopcGFsbG9jMChzaXplb2YoYm9vbCkgKiBudW1yb3dzICogMik7CisKKwlm b3IgKGkgPSAwOyBpIDwgbnVtcm93czsgaSsrKQorCXsKKwkJaXRlbXNbaV0u dmFsdWVzID0gJnZhbHVlc1tpICogMl07CisJCWl0ZW1zW2ldLmlzbnVsbCA9 ICZpc251bGxbaSAqIDJdOworCX0KKworCUFzc2VydChudW1hdHRycyA+PSAy KTsKKworCS8qCisJICogRXZhbHVhdGUgYWxsIHBvc3NpYmxlIGNvbWJpbmF0 aW9ucyBvZiBbQSA9PiBCXSwgdXNpbmcgYSBzaW1wbGUgYWxnb3JpdGhtOgor CSAqCisJICogKGEpIHNvcnQgdGhlIGRhdGEgYnkgW0EsQl0KKwkgKiAoYikg c3BsaXQgdGhlIGRhdGEgaW50byBncm91cHMgYnkgQSAobmV3IGdyb3VwIHdo ZW5ldmVyIGEgdmFsdWUgY2hhbmdlcykKKwkgKiAoYykgY291bnQgZGlmZmVy ZW50IHZhbHVlcyBpbiB0aGUgQiBjb2x1bW4gKGFnYWluLCB2YWx1ZSBjaGFu Z2VzKQorCSAqCisJICogVE9ETyBJdCBzaG91bGQgYmUgcmF0aGVyIHNpbXBs ZSB0byBtZXJnZSBbQSA9PiBCXSBhbmQgW0EgPT4gQ10gaW50bworCSAqICAg ICAgW0EgPT4gQixDXS4gSnVzdCBrZWVwIEEgY29uc3RhbnQsIGNvbGxlY3Qg YWxsIHRoZSAiaW1wbGllZCIgY29sdW1ucworCSAqICAgICAgYW5kIHlvdSdy ZSBkb25lLgorCSAqLworCWZvciAoZGltYSA9IDA7IGRpbWEgPCBudW1hdHRy czsgZGltYSsrKQorCXsKKwkJLyogcHJlcGFyZSB0aGUgc29ydCBmdW5jdGlv biBmb3IgdGhlIGZpcnN0IGRpbWVuc2lvbiAqLworCQltdWx0aV9zb3J0X2Fk ZF9kaW1lbnNpb24obXNzLCAwLCBkaW1hLCBzdGF0cyk7CisKKwkJZm9yIChk aW1iID0gMDsgZGltYiA8IG51bWF0dHJzOyBkaW1iKyspCisJCXsKKwkJCVNv cnRJdGVtIGN1cnJlbnQ7CisKKwkJCS8qIG51bWJlciBvZiBncm91cHMgc3Vw cG9ydGluZyAvIGNvbnRyYWRpY3RpbmcgdGhlIGRlcGVuZGVuY3kgKi8KKwkJ CWludCBuX3N1cHBvcnRpbmcgPSAwOworCQkJaW50IG5fY29udHJhZGljdGlu ZyA9IDA7CisKKwkJCS8qIGNvdW50ZXJzIHZhbGlkIHdpdGhpbiBhIGdyb3Vw ICovCisJCQlpbnQgZ3JvdXBfc2l6ZSA9IDA7CisJCQlpbnQgbl92aW9sYXRp b25zID0gMDsKKworCQkJaW50IG5fc3VwcG9ydGluZ19yb3dzID0gMDsKKwkJ CWludCBuX2NvbnRyYWRpY3Rpbmdfcm93cyA9IDA7CisKKwkJCS8qIG1ha2Ug c3VyZSB0aGUgY29sdW1ucyBhcmUgZGlmZmVyZW50IChBID0+IEEpICovCisJ CQlpZiAoZGltYSA9PSBkaW1iKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBw cmVwYXJlIHRoZSBzb3J0IGZ1bmN0aW9uIGZvciB0aGUgc2Vjb25kIGRpbWVu c2lvbiAqLworCQkJbXVsdGlfc29ydF9hZGRfZGltZW5zaW9uKG1zcywgMSwg ZGltYiwgc3RhdHMpOworCisJCQkvKiByZXNldCB0aGUgdmFsdWVzIGFuZCBp c251bGwgZmxhZ3MgKi8KKwkJCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZihE YXR1bSkgKiBudW1yb3dzICogMik7CisJCQltZW1zZXQoaXNudWxsLCAwLCBz aXplb2YoYm9vbCkgICogbnVtcm93cyAqIDIpOworCisJCQkvKiBhY2N1bXVs YXRlIGFsbCB0aGUgZGF0YSBmb3IgYm90aCBjb2x1bW5zIGludG8gYW4gYXJy YXkgYW5kIHNvcnQgaXQgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBudW1yb3dz OyBpKyspCisJCQl7CisJCQkJaXRlbXNbaV0udmFsdWVzWzBdCisJCQkJCT0g aGVhcF9nZXRhdHRyKHJvd3NbaV0sIGF0dHJzLT52YWx1ZXNbZGltYV0sCisJ CQkJCQkJCQlzdGF0c1tkaW1hXS0+dHVwRGVzYywgJml0ZW1zW2ldLmlzbnVs bFswXSk7CisKKwkJCQlpdGVtc1tpXS52YWx1ZXNbMV0KKwkJCQkJPSBoZWFw X2dldGF0dHIocm93c1tpXSwgYXR0cnMtPnZhbHVlc1tkaW1iXSwKKwkJCQkJ CQkJCXN0YXRzW2RpbWJdLT50dXBEZXNjLCAmaXRlbXNbaV0uaXNudWxsWzFd KTsKKwkJCX0KKworCQkJcXNvcnRfYXJnKCh2b2lkICopIGl0ZW1zLCBudW1y b3dzLCBzaXplb2YoU29ydEl0ZW0pLAorCQkJCQkgIG11bHRpX3NvcnRfY29t cGFyZSwgbXNzKTsKKworCQkJLyoKKwkJCSAqIFdhbGsgdGhyb3VnaCB0aGUg YXJyYXksIHNwbGl0IGl0IGludG8gcm93cyBhY2NvcmRpbmcgdG8KKwkJCSAq IHRoZSBBIHZhbHVlLCBhbmQgY291bnQgZGlzdGluY3QgdmFsdWVzIGluIHRo ZSBvdGhlciBvbmUuCisJCQkgKiBJZiB0aGVyZSdzIGEgc2luZ2xlIEIgdmFs dWUgZm9yIHRoZSB3aG9sZSBncm91cCwgd2UgY291bnQKKwkJCSAqIGl0IGFz IHN1cHBvcnRpbmcgdGhlIGFzc29jaWF0aW9uLCBvdGhlcndpc2Ugd2UgY291 bnQgaXQKKwkJCSAqIGFzIGNvbnRyYWRpY3RpbmcuCisJCQkgKgorCQkJICog RnVydGhlcm1vcmUgd2UgcmVxdWlyZSBhIGdyb3VwIHRvIGhhdmUgYXQgbGVh c3QgYSBjZXJ0YWluCisJCQkgKiBudW1iZXIgb2Ygcm93cyB0byBiZSBjb25z aWRlcmVkIHVzZWZ1bCBmb3Igc3VwcG9ydGluZyB0aGUKKwkJCSAqIGRlcGVu ZGVuY3kuIEJ1dCB3aGVuIGl0J3MgY29udHJhZGljdGluZywgdXNlIGl0IGFs d2F5cyB1c2VmdWwuCisJCQkgKi8KKworCQkJLyogc3RhcnQgd2l0aCB2YWx1 ZXMgZnJvbSB0aGUgZmlyc3Qgcm93ICovCisJCQljdXJyZW50ID0gaXRlbXNb MF07CisJCQlncm91cF9zaXplICA9IDE7CisKKwkJCWZvciAoaSA9IDE7IGkg PCBudW1yb3dzOyBpKyspCisJCQl7CisJCQkJLyogZW5kIG9mIHRoZSBncm91 cCAqLworCQkJCWlmIChtdWx0aV9zb3J0X2NvbXBhcmVfZGltKDAsICZpdGVt c1tpXSwgJmN1cnJlbnQsIG1zcykgIT0gMCkKKwkJCQl7CisJCQkJCS8qCisJ CQkJCSAqIElmIHRoZXJlIGFyZSBubyBjb250cmFkaWN0aW5nIHJvd3MsIGNv dW50IGl0IGFzCisJCQkJCSAqIHN1cHBvcnRpbmcgKG90aGVyd2lzZSBjb250 cmFkaWN0aW5nKSwgYnV0IG9ubHkgaWYKKwkJCQkJICogdGhlIGdyb3VwIGlz IGxhcmdlIGVub3VnaC4KKwkJCQkJICoKKwkJCQkJICogVGhlIHJlcXVpcmVt ZW50IG9mIGEgbWluaW11bSBncm91cCBzaXplIG1ha2VzIGl0CisJCQkJCSAq IGltcG9zc2libGUgdG8gaWRlbnRpZnkgW3VuaXF1ZSx1bmlxdWVdIGNhc2Vz LCBidXQKKwkJCQkJICogdGhhdCdzIHByb2JhYmx5IGEgZGlmZmVyZW50IGNh c2UuIFRoaXMgaXMgbW9yZQorCQkJCQkgKiBhYm91dCBbemlwID0+IGNpdHld IGFzc29jaWF0aW9ucyBldGMuCisJCQkJCSAqCisJCQkJCSAqIElmIHRoZXJl IGFyZSB2aW9sYXRpb25zLCBjb3VudCB0aGUgZ3JvdXAvcm93cyBhcworCQkJ CQkgKiBhIHZpb2xhdGlvbi4KKwkJCQkJICoKKwkJCQkJICogSXQgbWF5IG5l IG5laXRoZXIsIGlmIHRoZSBncm91cCBpcyB0b28gc21hbGwgKGRvZXMKKwkJ CQkJICogbm90IGNvbnRhaW4gYXQgbGVhc3QgbWluX2dyb3VwX3NpemUgcm93 cykuCisJCQkJCSAqLworCQkJCQlpZiAoKG5fdmlvbGF0aW9ucyA9PSAwKSAm JiAoZ3JvdXBfc2l6ZSA+PSBtaW5fZ3JvdXBfc2l6ZSkpCisJCQkJCXsKKwkJ CQkJCW5fc3VwcG9ydGluZyArPSAgMTsKKwkJCQkJCW5fc3VwcG9ydGluZ19y b3dzICs9IGdyb3VwX3NpemU7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAobl92 aW9sYXRpb25zID4gMCkKKwkJCQkJeworCQkJCQkJbl9jb250cmFkaWN0aW5n ICs9ICAxOworCQkJCQkJbl9jb250cmFkaWN0aW5nX3Jvd3MgKz0gZ3JvdXBf c2l6ZTsKKwkJCQkJfQorCisJCQkJCS8qIGN1cnJlbnQgdmFsdWVzIHN0YXJ0 IGEgbmV3IGdyb3VwICovCisJCQkJCW5fdmlvbGF0aW9ucyA9IDA7CisJCQkJ CWdyb3VwX3NpemUgPSAwOworCQkJCX0KKwkJCQkvKiBtaXNtYXRjaCBvZiBh IEIgdmFsdWUgaXMgY29udHJhZGljdGluZyAqLworCQkJCWVsc2UgaWYgKG11 bHRpX3NvcnRfY29tcGFyZV9kaW0oMSwgJml0ZW1zW2ldLCAmY3VycmVudCwg bXNzKSAhPSAwKQorCQkJCXsKKwkJCQkJbl92aW9sYXRpb25zICs9IDE7CisJ CQkJfQorCisJCQkJY3VycmVudCA9IGl0ZW1zW2ldOworCQkJCWdyb3VwX3Np emUgKz0gMTsKKwkJCX0KKworCQkJLyogaGFuZGxlIHRoZSBsYXN0IGdyb3Vw IChqdXN0IGxpa2UgYWJvdmUpICovCisJCQlpZiAoKG5fdmlvbGF0aW9ucyA9 PSAwKSAmJiAoZ3JvdXBfc2l6ZSA+PSBtaW5fZ3JvdXBfc2l6ZSkpCisJCQl7 CisJCQkJbl9zdXBwb3J0aW5nICs9IDE7CisJCQkJbl9zdXBwb3J0aW5nX3Jv d3MgKz0gZ3JvdXBfc2l6ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKG5fdmlvbGF0 aW9ucykKKwkJCXsKKwkJCQluX2NvbnRyYWRpY3RpbmcgKz0gMTsKKwkJCQlu X2NvbnRyYWRpY3Rpbmdfcm93cyArPSBncm91cF9zaXplOworCQkJfQorCisJ CQkvKgorCQkJICogU2VlIGlmIHRoZSBudW1iZXIgb2Ygcm93cyBzdXBwb3J0 aW5nIHRoZSBhc3NvY2lhdGlvbiBpcyBhdCBsZWFzdAorCQkJICogMTB4IHRo ZSBudW1iZXIgb2Ygcm93cyB2aW9sYXRpbmcgdGhlIGh5cG90aGV0aWNhbCBk ZXBlbmRlbmN5LgorCQkJICoKKwkJCSAqIFRPRE8gVGhpcyBpcyByYXRoZXIg YXJiaXRyYXJ5IGxpbWl0IC0gSSBndWVzcyBpdCdzIHBvc3NpYmxlIHRvIGRv CisJCQkgKiAgICAgIHNvbWUgbWF0aCB0byBjb21lIHVwIHdpdGggYSBiZXR0 ZXIgcnVsZSAoZS5nLiB0ZXN0aW5nIGEgaHlwb3RoZXNpcworCQkJICogICAg ICAndGhpcyBpcyBkdWUgdG8gcmFuZG9tbmVzcycpLiBXZSBjYW4gY3JlYXRl IGEgY29udGluZ2VuY3kgdGFibGUKKwkJCSAqICAgICAgZnJvbSB0aGUgdmFs dWVzIGFuZCB1c2UgaXQgZm9yIHRlc3RpbmcuIFBvc3NpYmx5IG9ubHkgd2hl bgorCQkJICogICAgICB0aGVyZSBhcmUgbm8gY29udHJhZGljdGluZyByb3dz PworCQkJICoKKwkJCSAqIFRPRE8gQWxzbywgaWYgKGEgPT4gYikgYW5kIChi ID0+IGEpIGF0IHRoZSBzYW1lIHRpbWUsIGl0IHByZXR0eSBtdWNoCisJCQkg KiAgICAgIG1lYW5zIHRoZXJlJ3MgYSAxOjEgcmVsYXRpb24gKG9yIG9uZSBp cyBhICdsYWJlbCcpLCBtYWtpbmcgdGhlCisJCQkgKiAgICAgIGNvbmRpdGlv bnMgcmF0aGVyIHJlZHVuZGFudC4gQWx0aG91Z2ggaXQncyBwb3NzaWJsZSB0 aGF0IHRoZQorCQkJICogICAgICBxdWVyeSB1c2VzIGluY29tcGF0aWJsZSBj b21iaW5hdGlvbiBvZiB2YWx1ZXMuCisJCQkgKi8KKwkJCWlmIChuX3N1cHBv cnRpbmdfcm93cyA+IChuX2NvbnRyYWRpY3Rpbmdfcm93cyAqIDEwKSkKKwkJ CXsKKwkJCQlpZiAoZGVwZW5kZW5jaWVzID09IE5VTEwpCisJCQkJeworCQkJ CQlkZXBlbmRlbmNpZXMgPSAoTVZEZXBlbmRlbmNpZXMpcGFsbG9jMChzaXpl b2YoTVZEZXBlbmRlbmNpZXNEYXRhKSk7CisJCQkJCWRlcGVuZGVuY2llcy0+ bWFnaWMgPSBNVlNUQVRfREVQU19NQUdJQzsKKwkJCQl9CisJCQkJZWxzZQor CQkJCQlkZXBlbmRlbmNpZXMgPSByZXBhbGxvYyhkZXBlbmRlbmNpZXMsIG9m ZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0YSwgZGVwcykKKwkJCQkJCQkJCQkJ KyBzaXplb2YoTVZEZXBlbmRlbmN5KSAqIChkZXBlbmRlbmNpZXMtPm5kZXBz ICsgMSkpOworCisJCQkJLyogdXBkYXRlIHRoZSAqLworCQkJCWRlcGVuZGVu Y2llcy0+ZGVwc1tuZGVwc10gPSAoTVZEZXBlbmRlbmN5KXBhbGxvYzAoc2l6 ZW9mKE1WRGVwZW5kZW5jeURhdGEpKTsKKwkJCQlkZXBlbmRlbmNpZXMtPmRl cHNbbmRlcHNdLT5hID0gYXR0cnMtPnZhbHVlc1tkaW1hXTsKKwkJCQlkZXBl bmRlbmNpZXMtPmRlcHNbbmRlcHNdLT5iID0gYXR0cnMtPnZhbHVlc1tkaW1i XTsKKworCQkJCWRlcGVuZGVuY2llcy0+bmRlcHMgPSAoKytuZGVwcyk7CisJ CQl9CisJCX0KKwl9CisKKwlwZnJlZShpdGVtcyk7CisJcGZyZWUodmFsdWVz KTsKKwlwZnJlZShpc251bGwpOworCXBmcmVlKHN0YXRzKTsKKwlwZnJlZSht c3MpOworCisJcmV0dXJuIGRlcGVuZGVuY2llczsKK30KKworLyoKKyAqIFN0 b3JlIHRoZSBkZXBlbmRlbmNpZXMgaW50byBhIGJ5dGVhLCBzbyB0aGF0IGl0 IGNhbiBiZSBzdG9yZWQgaW4gdGhlCisgKiBwZ19tdl9zdGF0aXN0aWMgY2F0 YWxvZy4KKyAqCisgKiBDdXJyZW50bHkgdGhpcyBvbmx5IHN1cHBvcnRzIHNp bXBsZSB0d28tY29sdW1uIHJ1bGVzLCBhbmQgc3RvcmVzIHRoZW0KKyAqIGFz IGEgc2VxdWVuY2Ugb2YgYXR0bnVtIHBhaXJzLiBJbiB0aGUgZnV0dXJlLCB0 aGlzIG5lZWRzIHRvIGJlIG1hZGUKKyAqIG1vcmUgY29tcGxleCB0byBzdXBw b3J0IG11bHRpcGxlIGNvbHVtbnMgb24gYm90aCBzaWRlcyBvZiB0aGUKKyAq IGltcGxpY2F0aW9uICh1c2luZyBBTkQgb24gbGVmdCwgT1Igb24gcmlnaHQp LgorICovCitieXRlYSAqCitzZXJpYWxpemVfbXZfZGVwZW5kZW5jaWVzKE1W RGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcykKK3sKKwlpbnQgaTsKKworCS8q IHdlIG5lZWQgdG8gc3RvcmUgbmRlcHMsIGFuZCBlYWNoIG5lZWRzIDIgKiBp bnQxNiAqLworCVNpemUgbGVuID0gVkFSSERSU1ogKyBvZmZzZXRvZihNVkRl cGVuZGVuY2llc0RhdGEsIGRlcHMpCisJCQkJKyBkZXBlbmRlbmNpZXMtPm5k ZXBzICogKHNpemVvZihpbnQxNikgKiAyKTsKKworCWJ5dGVhICogb3V0cHV0 ID0gKGJ5dGVhKilwYWxsb2MwKGxlbik7CisKKwljaGFyICogdG1wID0gVkFS REFUQShvdXRwdXQpOworCisJU0VUX1ZBUlNJWkUob3V0cHV0LCBsZW4pOwor CisJLyogZmlyc3QsIHN0b3JlIHRoZSBudW1iZXIgb2YgZGltZW5zaW9ucyAv IGl0ZW1zICovCisJbWVtY3B5KHRtcCwgZGVwZW5kZW5jaWVzLCBvZmZzZXRv ZihNVkRlcGVuZGVuY2llc0RhdGEsIGRlcHMpKTsKKwl0bXAgKz0gb2Zmc2V0 b2YoTVZEZXBlbmRlbmNpZXNEYXRhLCBkZXBzKTsKKworCS8qIHdhbGsgdGhy b3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb3B5IGJvdGggY29sdW1ucyBp bnRvIHRoZSBieXRlYSAqLworCWZvciAoaSA9IDA7IGkgPCBkZXBlbmRlbmNp ZXMtPm5kZXBzOyBpKyspCisJeworCQltZW1jcHkodG1wLCAmKGRlcGVuZGVu Y2llcy0+ZGVwc1tpXS0+YSksIHNpemVvZihpbnQxNikpOworCQl0bXAgKz0g c2l6ZW9mKGludDE2KTsKKworCQltZW1jcHkodG1wLCAmKGRlcGVuZGVuY2ll cy0+ZGVwc1tpXS0+YiksIHNpemVvZihpbnQxNikpOworCQl0bXAgKz0gc2l6 ZW9mKGludDE2KTsKKwl9CisKKwlyZXR1cm4gb3V0cHV0OworfQorCisvKgor ICogUmVhZHMgc2VyaWFsaXplZCBkZXBlbmRlbmNpZXMgaW50byBNVkRlcGVu ZGVuY2llcyBzdHJ1Y3R1cmUuCisgKi8KK01WRGVwZW5kZW5jaWVzCitkZXNl cmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoYnl0ZWEgKiBkYXRhKQoreworCWlu dAkJaTsKKwlTaXplCWV4cGVjdGVkX3NpemU7CisJTVZEZXBlbmRlbmNpZXMJ ZGVwZW5kZW5jaWVzOworCWNoYXIgICAqdG1wOworCisJaWYgKGRhdGEgPT0g TlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoVkFSU0laRV9BTllfRVhI RFIoZGF0YSkgPCBvZmZzZXRvZihNVkRlcGVuZGVuY2llc0RhdGEsZGVwcykp CisJCWVsb2coRVJST1IsICJpbnZhbGlkIE1WRGVwZW5kZW5jaWVzIHNpemUg JWxkIChleHBlY3RlZCBhdCBsZWFzdCAlbGQpIiwKKwkJCSBWQVJTSVpFX0FO WV9FWEhEUihkYXRhKSwgb2Zmc2V0b2YoTVZEZXBlbmRlbmNpZXNEYXRhLGRl cHMpKTsKKworCS8qIHJlYWQgdGhlIE1WRGVwZW5kZW5jaWVzIGhlYWRlciAq LworCWRlcGVuZGVuY2llcyA9IChNVkRlcGVuZGVuY2llcylwYWxsb2MwKHNp emVvZihNVkRlcGVuZGVuY2llc0RhdGEpKTsKKworCS8qIGluaXRpYWxpemUg cG9pbnRlciB0byB0aGUgZGF0YSBwYXJ0IChza2lwIHRoZSB2YXJsZW5hIGhl YWRlcikgKi8KKwl0bXAgPSBWQVJEQVRBKGRhdGEpOworCisJLyogZ2V0IHRo ZSBoZWFkZXIgYW5kIHBlcmZvcm0gYmFzaWMgc2FuaXR5IGNoZWNrcyAqLwor CW1lbWNweShkZXBlbmRlbmNpZXMsIHRtcCwgb2Zmc2V0b2YoTVZEZXBlbmRl bmNpZXNEYXRhLCBkZXBzKSk7CisJdG1wICs9IG9mZnNldG9mKE1WRGVwZW5k ZW5jaWVzRGF0YSwgZGVwcyk7CisKKwlpZiAoZGVwZW5kZW5jaWVzLT5tYWdp YyAhPSBNVlNUQVRfREVQU19NQUdJQykKKwl7CisJCXBmcmVlKGRlcGVuZGVu Y2llcyk7CisJCWVsb2coV0FSTklORywgIm5vdCBhIE1WIERlcGVuZGVuY2ll cyAobWFnaWMgbnVtYmVyIG1pc21hdGNoKSIpOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwlBc3NlcnQoZGVwZW5kZW5jaWVzLT5uZGVwcyA+IDApOworCisJ Lyogd2hhdCBieXRlYSBzaXplIGRvIHdlIGV4cGVjdCBmb3IgdGhvc2UgcGFy YW1ldGVycyAqLworCWV4cGVjdGVkX3NpemUgPSBvZmZzZXRvZihNVkRlcGVu ZGVuY2llc0RhdGEsZGVwcykgKworCQkJCQlkZXBlbmRlbmNpZXMtPm5kZXBz ICogc2l6ZW9mKGludDE2KSAqIDI7CisKKwlpZiAoVkFSU0laRV9BTllfRVhI RFIoZGF0YSkgIT0gZXhwZWN0ZWRfc2l6ZSkKKwkJZWxvZyhFUlJPUiwgImlu dmFsaWQgZGVwZW5kZW5jaWVzIHNpemUgJWxkIChleHBlY3RlZCAlbGQpIiwK KwkJCSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSwgZXhwZWN0ZWRfc2l6ZSk7 CisKKwkvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIE1DViBpdGVtcyAqLwor CWRlcGVuZGVuY2llcyA9IHJlcGFsbG9jKGRlcGVuZGVuY2llcywgb2Zmc2V0 b2YoTVZEZXBlbmRlbmNpZXNEYXRhLGRlcHMpCisJCQkJCQkJKyAoZGVwZW5k ZW5jaWVzLT5uZGVwcyAqIHNpemVvZihNVkRlcGVuZGVuY3kpKSk7CisKKwlm b3IgKGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLT5uZGVwczsgaSsrKQorCXsK KwkJZGVwZW5kZW5jaWVzLT5kZXBzW2ldID0gKE1WRGVwZW5kZW5jeSlwYWxs b2MwKHNpemVvZihNVkRlcGVuZGVuY3lEYXRhKSk7CisKKwkJbWVtY3B5KCYo ZGVwZW5kZW5jaWVzLT5kZXBzW2ldLT5hKSwgdG1wLCBzaXplb2YoaW50MTYp KTsKKwkJdG1wICs9IHNpemVvZihpbnQxNik7CisKKwkJbWVtY3B5KCYoZGVw ZW5kZW5jaWVzLT5kZXBzW2ldLT5iKSwgdG1wLCBzaXplb2YoaW50MTYpKTsK KwkJdG1wICs9IHNpemVvZihpbnQxNik7CisJfQorCisJcmV0dXJuIGRlcGVu ZGVuY2llczsKK30KKworLyogcHJpbnQgc29tZSBiYXNpYyBpbmZvIGFib3V0 IGRlcGVuZGVuY2llcyAobnVtYmVyIG9mIGRlcGVuZGVuY2llcykgKi8KK0Rh dHVtCitwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyhQR19GVU5DVElP Tl9BUkdTKQoreworCWJ5dGVhCSAgICpkYXRhID0gUEdfR0VUQVJHX0JZVEVB X1AoMCk7CisJY2hhcgkgICAqcmVzdWx0OworCisJTVZEZXBlbmRlbmNpZXMg ZGVwZW5kZW5jaWVzID0gZGVzZXJpYWxpemVfbXZfZGVwZW5kZW5jaWVzKGRh dGEpOworCisJaWYgKGRlcGVuZGVuY2llcyA9PSBOVUxMKQorCQlQR19SRVRV Uk5fTlVMTCgpOworCisJcmVzdWx0ID0gcGFsbG9jMCgxMjgpOworCXNucHJp bnRmKHJlc3VsdCwgMTI4LCAiZGVwZW5kZW5jaWVzPSVkIiwgZGVwZW5kZW5j aWVzLT5uZGVwcyk7CisKKwkvKiBGSVhNRSBmcmVlIHRoZSBkZXNlcmlhbGl6 ZWQgZGF0YSAocGZyZWUgaXMgbm90IGVub3VnaCkgKi8KKworCVBHX1JFVFVS Tl9URVhUX1AoY3N0cmluZ190b190ZXh0KHJlc3VsdCkpOworfQorCisvKiBw cmludCB0aGUgZGVwZW5kZW5jaWVzCisgKgorICogVE9ETyAgV291bGQgYmUg bmljZSBpZiB0aGlzIGtuZXcgdGhlIGFjdHVhbCBjb2x1bW4gbmFtZXMgKGlu c3RlYWQgb2YKKyAqICAgICAgIHRoZSBhdHRudW1zKS4KKyAqCisgKiBGSVhN RSBUaGlzIGlzIHJlYWxseSB1Z2x5IGFuZCBkb2VzIG5vdCByZWFsbHkgY2hl Y2sgdGhlIGxlbmd0aHMgYW5kCisgKiAgICAgICBzdHJjcHkvc25wcmludGYg cmV0dXJuIHZhbHVlcyBwcm9wZXJseS4gTmVlZHMgdG8gYmUgZml4ZWQuCisg Ki8KK0RhdHVtCitwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhQR19G VU5DVElPTl9BUkdTKQoreworCWludAkJCWkgPSAwOworCWJ5dGVhCSAgICpk YXRhID0gUEdfR0VUQVJHX0JZVEVBX1AoMCk7CisJY2hhcgkgICAqcmVzdWx0 ID0gTlVMTDsKKwlpbnQJCQlsZW4gPSAwOworCisJTVZEZXBlbmRlbmNpZXMg ZGVwZW5kZW5jaWVzID0gZGVzZXJpYWxpemVfbXZfZGVwZW5kZW5jaWVzKGRh dGEpOworCisJaWYgKGRlcGVuZGVuY2llcyA9PSBOVUxMKQorCQlQR19SRVRV Uk5fTlVMTCgpOworCisJZm9yIChpID0gMDsgaSA8IGRlcGVuZGVuY2llcy0+ bmRlcHM7IGkrKykKKwl7CisJCU1WRGVwZW5kZW5jeSBkZXBlbmRlbmN5ID0g ZGVwZW5kZW5jaWVzLT5kZXBzW2ldOworCQljaGFyCWJ1ZmZlclsxMjhdOwor CisJCWludAkJdG1wID0gc25wcmludGYoYnVmZmVyLCAxMjgsICIlcyVkID0+ ICVkIiwKKwkJCQkoKGkgPT0gMCkgPyAiIiA6ICIsICIpLCBkZXBlbmRlbmN5 LT5hLCBkZXBlbmRlbmN5LT5iKTsKKworCQlpZiAodG1wIDwgMTI3KQorCQl7 CisJCQlpZiAocmVzdWx0ID09IE5VTEwpCisJCQkJcmVzdWx0ID0gcGFsbG9j MChsZW4gKyB0bXAgKyAxKTsKKwkJCWVsc2UKKwkJCQlyZXN1bHQgPSByZXBh bGxvYyhyZXN1bHQsIGxlbiArIHRtcCArIDEpOworCisJCQlzdHJjcHkocmVz dWx0ICsgbGVuLCBidWZmZXIpOworCQkJbGVuICs9IHRtcDsKKwkJfQorCX0K KworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KHJlc3VsdCkp OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9z cmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCA4NWUzYWE1Li41OTBjZDUx IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9z cmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtMjEwNCw2ICsyMTA0LDUwIEBA IGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5h bWUsCiAJCQlQUWNsZWFyKHJlc3VsdCk7CiAJCX0KIAorCQkvKiBwcmludCBh bnkgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MgKi8KKwkJaWYgKHBzZXQuc3Zl cnNpb24gPj0gOTA1MDApCisJCXsKKwkJCXByaW50ZlBRRXhwQnVmZmVyKCZi dWYsCisJCQkJCQkgICAiU0VMRUNUIG9pZCwgc3RhbmFtZXNwYWNlOjpyZWdu YW1lc3BhY2UgQVMgbnNwLCBzdGFuYW1lLCBzdGFrZXlzLFxuIgorCQkJCQkJ ICAgIiAgZGVwc19lbmFibGVkLFxuIgorCQkJCQkJICAgIiAgZGVwc19idWls dCxcbiIKKwkJCQkJCSAgICIgIChTRUxFQ1Qgc3RyaW5nX2FnZyhhdHRuYW1l Ojp0ZXh0LCcsICcpXG4iCisJCQkJCQkgICAiICAgIEZST00gKChTRUxFQ1Qg dW5uZXN0KHN0YWtleXMpIEFTIGF0dG51bSkgc1xuIgorCQkJCQkJICAgIiAg ICAgICAgIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gKHN0YXJlbGlkID0gYS5h dHRyZWxpZCBhbmQgYS5hdHRudW0gPSBzLmF0dG51bSkpKSBBUyBhdHRudW1z XG4iCisJCQkJCQkgICAiRlJPTSBwZ19tdl9zdGF0aXN0aWMgc3RhdCBXSEVS RSBzdGFyZWxpZCAgPSAnJXMnIE9SREVSIEJZIDE7IiwKKwkJCQkJCQkgIG9p ZCk7CisKKwkJCXJlc3VsdCA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwkJCWlm ICghcmVzdWx0KQorCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJZWxzZQor CQkJCXR1cGxlcyA9IFBRbnR1cGxlcyhyZXN1bHQpOworCisJCQlpZiAodHVw bGVzID4gMCkKKwkJCXsKKwkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250 LCBfKCJTdGF0aXN0aWNzOiIpKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgdHVw bGVzOyBpKyspCisJCQkJeworCQkJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVm LCAiICAgICIpOworCisJCQkJCS8qIHN0YXRpc3RpY3MgbmFtZSAocXVhbGlm aWVkIHdpdGggbmFtZXNwYWNlKSAqLworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZl cigmYnVmLCAiXCIlcy4lc1wiICIsCisJCQkJCQkJCQkgIFBRZ2V0dmFsdWUo cmVzdWx0LCBpLCAxKSwKKwkJCQkJCQkJCSAgUFFnZXR2YWx1ZShyZXN1bHQs IGksIDIpKTsKKworCQkJCQkvKiAgb3B0aW9ucyAqLworCQkJCQlpZiAoIXN0 cmNtcChQUWdldHZhbHVlKHJlc3VsdCwgaSwgNCksICJ0IikpCisJCQkJCQlh cHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiKGRlcGVuZGVuY2llcykiKTsKKwor CQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiIE9OICglcykiLAorCQkJ CQkJCVBRZ2V0dmFsdWUocmVzdWx0LCBpLCA2KSk7CisKKwkJCQkJcHJpbnRU YWJsZUFkZEZvb3RlcigmY29udCwgYnVmLmRhdGEpOworCQkJCX0KKwkJCX0K KwkJCVBRY2xlYXIocmVzdWx0KTsKKwkJfQorCiAJCS8qIHByaW50IHJ1bGVz ICovCiAJCWlmICh0YWJsZWluZm8uaGFzcnVsZXMgJiYgdGFibGVpbmZvLnJl bGtpbmQgIT0gJ20nKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL2RlcGVuZGVuY3kuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVw ZW5kZW5jeS5oCmluZGV4IDA0OWJmOWYuLjEyMjExZmUgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oCisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oCkBAIC0xNTMsMTAgKzE1Mywx MSBAQCB0eXBlZGVmIGVudW0gT2JqZWN0Q2xhc3MKIAlPQ0xBU1NfRVhURU5T SU9OLAkJCS8qIHBnX2V4dGVuc2lvbiAqLwogCU9DTEFTU19FVkVOVF9UUklH R0VSLAkJLyogcGdfZXZlbnRfdHJpZ2dlciAqLwogCU9DTEFTU19QT0xJQ1ks CQkJCS8qIHBnX3BvbGljeSAqLwotCU9DTEFTU19UUkFOU0ZPUk0JCQkvKiBw Z190cmFuc2Zvcm0gKi8KKwlPQ0xBU1NfVFJBTlNGT1JNLAkJCS8qIHBnX3Ry YW5zZm9ybSAqLworCU9DTEFTU19TVEFUSVNUSUNTCQkJLyogcGdfbXZfc3Rh dGlzdGljcyAqLwogfSBPYmplY3RDbGFzczsKIAotI2RlZmluZSBMQVNUX09D TEFTUwkJT0NMQVNTX1RSQU5TRk9STQorI2RlZmluZSBMQVNUX09DTEFTUwkJ T0NMQVNTX1NUQVRJU1RJQ1MKIAogCiAvKiBpbiBkZXBlbmRlbmN5LmMgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaGVhcC5oIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9oZWFwLmgKaW5kZXggYjgwZDhkOC4uNWFlNDJm NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9oZWFwLmgKKysr IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9oZWFwLmgKQEAgLTExOSw2ICsxMTks NyBAQCBleHRlcm4gdm9pZCBSZW1vdmVBdHRyRGVmYXVsdChPaWQgcmVsaWQs IEF0dHJOdW1iZXIgYXR0bnVtLAogCQkJCSAgRHJvcEJlaGF2aW9yIGJlaGF2 aW9yLCBib29sIGNvbXBsYWluLCBib29sIGludGVybmFsKTsKIGV4dGVybiB2 b2lkIFJlbW92ZUF0dHJEZWZhdWx0QnlJZChPaWQgYXR0cmRlZklkKTsKIGV4 dGVybiB2b2lkIFJlbW92ZVN0YXRpc3RpY3MoT2lkIHJlbGlkLCBBdHRyTnVt YmVyIGF0dG51bSk7CitleHRlcm4gdm9pZCBSZW1vdmVNVlN0YXRpc3RpY3Mo T2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSk7CiAKIGV4dGVybiBGb3Jt X3BnX2F0dHJpYnV0ZSBTeXN0ZW1BdHRyaWJ1dGVEZWZpbml0aW9uKEF0dHJO dW1iZXIgYXR0bm8sCiAJCQkJCQkgIGJvb2wgcmVsaGFzb2lkcyk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4aW5nLmggYi9zcmMv aW5jbHVkZS9jYXRhbG9nL2luZGV4aW5nLmgKaW5kZXggYWIyYzFhOC4uYTc2 OGJiNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleGlu Zy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXhpbmcuaApAQCAt MTczLDYgKzE3MywxMyBAQCBERUNMQVJFX1VOSVFVRV9JTkRFWChwZ19sYXJn ZW9iamVjdF9sb2lkX3BuX2luZGV4LCAyNjgzLCBvbiBwZ19sYXJnZW9iamVj dCB1c2luZwogREVDTEFSRV9VTklRVUVfSU5ERVgocGdfbGFyZ2VvYmplY3Rf bWV0YWRhdGFfb2lkX2luZGV4LCAyOTk2LCBvbiBwZ19sYXJnZW9iamVjdF9t ZXRhZGF0YSB1c2luZyBidHJlZShvaWQgb2lkX29wcykpOwogI2RlZmluZSBM YXJnZU9iamVjdE1ldGFkYXRhT2lkSW5kZXhJZAkyOTk2CiAKK0RFQ0xBUkVf VU5JUVVFX0lOREVYKHBnX212X3N0YXRpc3RpY19vaWRfaW5kZXgsIDMzODAs IG9uIHBnX212X3N0YXRpc3RpYyB1c2luZyBidHJlZShvaWQgb2lkX29wcykp OworI2RlZmluZSBNdlN0YXRpc3RpY09pZEluZGV4SWQgIDMzODAKK0RFQ0xB UkVfVU5JUVVFX0lOREVYKHBnX212X3N0YXRpc3RpY19uYW1lX2luZGV4LCAz OTk3LCBvbiBwZ19tdl9zdGF0aXN0aWMgdXNpbmcgYnRyZWUoc3RhbmFtZSBu YW1lX29wcywgc3RhbmFtZXNwYWNlIG9pZF9vcHMpKTsKKyNkZWZpbmUgTXZT dGF0aXN0aWNOYW1lSW5kZXhJZCAgMzk5NworREVDTEFSRV9JTkRFWChwZ19t dl9zdGF0aXN0aWNfcmVsaWRfaW5kZXgsIDMzNzksIG9uIHBnX212X3N0YXRp c3RpYyB1c2luZyBidHJlZShzdGFyZWxpZCBvaWRfb3BzKSk7CisjZGVmaW5l IE12U3RhdGlzdGljUmVsaWRJbmRleElkCTMzNzkKKwogREVDTEFSRV9VTklR VUVfSU5ERVgocGdfbmFtZXNwYWNlX25zcG5hbWVfaW5kZXgsIDI2ODQsIG9u IHBnX25hbWVzcGFjZSB1c2luZyBidHJlZShuc3BuYW1lIG5hbWVfb3BzKSk7 CiAjZGVmaW5lIE5hbWVzcGFjZU5hbWVJbmRleElkICAyNjg0CiBERUNMQVJF X1VOSVFVRV9JTkRFWChwZ19uYW1lc3BhY2Vfb2lkX2luZGV4LCAyNjg1LCBv biBwZ19uYW1lc3BhY2UgdXNpbmcgYnRyZWUob2lkIG9pZF9vcHMpKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvbmFtZXNwYWNlLmggYi9z cmMvaW5jbHVkZS9jYXRhbG9nL25hbWVzcGFjZS5oCmluZGV4IDJjY2IzYTcu LjQ0Y2Y5YzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvbmFt ZXNwYWNlLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9uYW1lc3BhY2Uu aApAQCAtMTM3LDYgKzEzNyw4IEBAIGV4dGVybiBPaWQJZ2V0X2NvbGxhdGlv bl9vaWQoTGlzdCAqY29sbG5hbWUsIGJvb2wgbWlzc2luZ19vayk7CiBleHRl cm4gT2lkCWdldF9jb252ZXJzaW9uX29pZChMaXN0ICpjb25uYW1lLCBib29s IG1pc3Npbmdfb2spOwogZXh0ZXJuIE9pZAlGaW5kRGVmYXVsdENvbnZlcnNp b25Qcm9jKGludDMyIGZvcl9lbmNvZGluZywgaW50MzIgdG9fZW5jb2Rpbmcp OwogCitleHRlcm4gT2lkCWdldF9zdGF0aXN0aWNzX29pZChMaXN0ICpuYW1l cywgYm9vbCBtaXNzaW5nX29rKTsKKwogLyogaW5pdGlhbGl6YXRpb24gJiB0 cmFuc2FjdGlvbiBjbGVhbnVwIGNvZGUgKi8KIGV4dGVybiB2b2lkIEluaXRp YWxpemVTZWFyY2hQYXRoKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXRFT1hhY3Rf TmFtZXNwYWNlKGJvb2wgaXNDb21taXQsIGJvb2wgcGFyYWxsZWwpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMu aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2OGEwNwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3Rh dGlzdGljLmgKQEAgLTAsMCArMSw3MyBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdfbXZfc3RhdGlzdGljLmgKKyAqCSAg ZGVmaW5pdGlvbiBvZiB0aGUgc3lzdGVtICJtdWx0aXZhcmlhdGUgc3RhdGlz dGljIiByZWxhdGlvbiAocGdfbXZfc3RhdGlzdGljKQorICoJICBhbG9uZyB3 aXRoIHRoZSByZWxhdGlvbidzIGluaXRpYWwgY29udGVudHMuCisgKgorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE0LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212 X3N0YXRpc3RpYy5oCisgKgorICogTk9URVMKKyAqCSAgdGhlIGdlbmJraS5w bCBzY3JpcHQgcmVhZHMgdGhpcyBmaWxlIGFuZCBnZW5lcmF0ZXMgLmJraQor ICoJICBpbmZvcm1hdGlvbiBmcm9tIHRoZSBEQVRBKCkgc3RhdGVtZW50cy4K KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lm bmRlZiBQR19NVl9TVEFUSVNUSUNfSAorI2RlZmluZSBQR19NVl9TVEFUSVNU SUNfSAorCisjaW5jbHVkZSAiY2F0YWxvZy9nZW5ia2kuaCIKKworLyogLS0t LS0tLS0tLS0tLS0tLQorICoJCXBnX212X3N0YXRpc3RpYyBkZWZpbml0aW9u LiAgY3BwIHR1cm5zIHRoaXMgaW50bworICoJCXR5cGVkZWYgc3RydWN0IEZv cm1EYXRhX3BnX212X3N0YXRpc3RpYworICogLS0tLS0tLS0tLS0tLS0tLQor ICovCisjZGVmaW5lIE12U3RhdGlzdGljUmVsYXRpb25JZCAgMzM4MQorCitD QVRBTE9HKHBnX212X3N0YXRpc3RpYywzMzgxKQoreworCS8qIFRoZXNlIGZp ZWxkcyBmb3JtIHRoZSB1bmlxdWUga2V5IGZvciB0aGUgZW50cnk6ICovCisJ T2lkCQkJc3RhcmVsaWQ7CQkJLyogcmVsYXRpb24gY29udGFpbmluZyBhdHRy aWJ1dGVzICovCisJTmFtZURhdGEJc3RhbmFtZTsJCQkvKiBzdGF0aXN0aWNz IG5hbWUgKi8KKwlPaWQJCQlzdGFuYW1lc3BhY2U7CQkvKiBPSUQgb2YgbmFt ZXNwYWNlIGNvbnRhaW5pbmcgdGhpcyBzdGF0aXN0aWNzICovCisKKwkvKiBz dGF0aXN0aWNzIHJlcXVlc3RlZCB0byBidWlsZCAqLworCWJvb2wJCWRlcHNf ZW5hYmxlZDsJCS8qIGFuYWx5emUgZGVwZW5kZW5jaWVzPyAqLworCisJLyog c3RhdGlzdGljcyB0aGF0IGFyZSBhdmFpbGFibGUgKGlmIHJlcXVlc3RlZCkg Ki8KKwlib29sCQlkZXBzX2J1aWx0OwkJCS8qIGRlcGVuZGVuY2llcyB3ZXJl IGJ1aWx0ICovCisKKwkvKiB2YXJpYWJsZS1sZW5ndGggZmllbGRzIHN0YXJ0 IGhlcmUsIGJ1dCB3ZSBhbGxvdyBkaXJlY3QgYWNjZXNzIHRvIHN0YWtleXMg Ki8KKwlpbnQydmVjdG9yCXN0YWtleXM7CQkJLyogYXJyYXkgb2YgY29sdW1u IGtleXMgKi8KKworI2lmZGVmIENBVEFMT0dfVkFSTEVOCisJYnl0ZWEJCXN0 YWRlcHM7CQkJLyogZGVwZW5kZW5jaWVzIChzZXJpYWxpemVkKSAqLworI2Vu ZGlmCisKK30gRm9ybURhdGFfcGdfbXZfc3RhdGlzdGljOworCisvKiAtLS0t LS0tLS0tLS0tLS0tCisgKgkJRm9ybV9wZ19tdl9zdGF0aXN0aWMgY29ycmVz cG9uZHMgdG8gYSBwb2ludGVyIHRvIGEgdHVwbGUgd2l0aAorICoJCXRoZSBm b3JtYXQgb2YgcGdfbXZfc3RhdGlzdGljIHJlbGF0aW9uLgorICogLS0tLS0t LS0tLS0tLS0tLQorICovCit0eXBlZGVmIEZvcm1EYXRhX3BnX212X3N0YXRp c3RpYyAqRm9ybV9wZ19tdl9zdGF0aXN0aWM7CisKKy8qIC0tLS0tLS0tLS0t LS0tLS0KKyAqCQljb21waWxlciBjb25zdGFudHMgZm9yIHBnX212X3N0YXRp c3RpYworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE5hdHRz X3BnX212X3N0YXRpc3RpYwkJCQkJNworI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFyZWxpZAkJCTEKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3RhbmFtZQkJCTIKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0 aWNfc3RhbmFtZXNwYWNlCQkzCisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlz dGljX2RlcHNfZW5hYmxlZAkJNAorI2RlZmluZSBBbnVtX3BnX212X3N0YXRp c3RpY19kZXBzX2J1aWx0CQkJNQorI2RlZmluZSBBbnVtX3BnX212X3N0YXRp c3RpY19zdGFrZXlzCQkJNgorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3Rp Y19zdGFkZXBzCQkJNworCisjZW5kaWYgICAvKiBQR19NVl9TVEFUSVNUSUNf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuaAppbmRleCBmNTg2 NzJlLi43NmUwNTRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu aApAQCAtMjc0MSw2ICsyNzQxLDExIEBAIERFU0NSKCJjdXJyZW50IHVzZXIg cHJpdmlsZWdlIG9uIGFueSBjb2x1bW4gYnkgcmVsIG5hbWUiKTsKIERBVEEo aW5zZXJ0IE9JRCA9IDMwMjkgKCAgaGFzX2FueV9jb2x1bW5fcHJpdmlsZWdl CSAgIFBHTlNQIFBHVUlEIDEyIDEwIDAgMCAwIGYgZiBmIGYgdCBmIHMgcyAy IDAgMTYgIjI2IDI1IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251 bGxfIGhhc19hbnlfY29sdW1uX3ByaXZpbGVnZV9pZCBfbnVsbF8gX251bGxf IF9udWxsXyApKTsKIERFU0NSKCJjdXJyZW50IHVzZXIgcHJpdmlsZWdlIG9u IGFueSBjb2x1bW4gYnkgcmVsIG9pZCIpOwogCitEQVRBKGluc2VydCBPSUQg PSAzOTk4ICggIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvICAgICBQ R05TUCBQR1VJRCAxMiAxIDAgMCAwIGYgZiBmIGYgdCBmIGkgcyAxIDAgMjUg IjE3IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHBnX212 X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvIF9udWxsXyBfbnVsbF8gX251bGxf ICkpOworREVTQ1IoIm11bHRpdmFyaWF0ZSBzdGF0czogZnVuY3Rpb25hbCBk ZXBlbmRlbmNpZXMgaW5mbyIpOworREFUQShpbnNlcnQgT0lEID0gMzk5OSAo ICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyAgICAgUEdOU1AgUEdV SUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBpIHMgMSAwIDI1ICIxNyIgX251 bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwZ19tdl9zdGF0c19k ZXBlbmRlbmNpZXNfc2hvdyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKK0RF U0NSKCJtdWx0aXZhcmlhdGUgc3RhdHM6IGZ1bmN0aW9uYWwgZGVwZW5kZW5j aWVzIHNob3ciKTsKKwogREFUQShpbnNlcnQgT0lEID0gMTkyOCAoICBwZ19z dGF0X2dldF9udW1zY2FucwkJCVBHTlNQIFBHVUlEIDEyIDEgMCAwIDAgZiBm IGYgZiB0IGYgcyByIDEgMCAyMCAiMjYiIF9udWxsXyBfbnVsbF8gX251bGxf IF9udWxsXyBfbnVsbF8gcGdfc3RhdF9nZXRfbnVtc2NhbnMgX251bGxfIF9u dWxsXyBfbnVsbF8gKSk7CiBERVNDUigic3RhdGlzdGljczogbnVtYmVyIG9m IHNjYW5zIGRvbmUgZm9yIHRhYmxlL2luZGV4Iik7CiBEQVRBKGluc2VydCBP SUQgPSAxOTI5ICggIHBnX3N0YXRfZ2V0X3R1cGxlc19yZXR1cm5lZAlQR05T UCBQR1VJRCAxMiAxIDAgMCAwIGYgZiBmIGYgdCBmIHMgciAxIDAgMjAgIjI2 IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHBnX3N0YXRf Z2V0X3R1cGxlc19yZXR1cm5lZCBfbnVsbF8gX251bGxfIF9udWxsXyApKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvdG9hc3RpbmcuaCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvdG9hc3RpbmcuaAppbmRleCBiN2EzOGNl Li5hNTIwOTZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Rv YXN0aW5nLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy90b2FzdGluZy5o CkBAIC00OSw2ICs0OSw3IEBAIGV4dGVybiB2b2lkIEJvb3RzdHJhcFRvYXN0 VGFibGUoY2hhciAqcmVsTmFtZSwKIERFQ0xBUkVfVE9BU1QocGdfYXR0cmRl ZiwgMjgzMCwgMjgzMSk7CiBERUNMQVJFX1RPQVNUKHBnX2NvbnN0cmFpbnQs IDI4MzIsIDI4MzMpOwogREVDTEFSRV9UT0FTVChwZ19kZXNjcmlwdGlvbiwg MjgzNCwgMjgzNSk7CitERUNMQVJFX1RPQVNUKHBnX212X3N0YXRpc3RpYywg MzU3NywgMzU3OCk7CiBERUNMQVJFX1RPQVNUKHBnX3Byb2MsIDI4MzYsIDI4 MzcpOwogREVDTEFSRV9UT0FTVChwZ19yZXdyaXRlLCAyODM4LCAyODM5KTsK IERFQ0xBUkVfVE9BU1QocGdfc2VjbGFiZWwsIDM1OTgsIDM1OTkpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmggYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9kZWZyZW0uaAppbmRleCA1NGY2N2U5Li45OWE2 YTYyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZyZW0u aAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZyZW0uaApAQCAtNzUs NiArNzUsMTAgQEAgZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lT3BlcmF0 b3IoTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMpOwogZXh0ZXJuIHZv aWQgUmVtb3ZlT3BlcmF0b3JCeUlkKE9pZCBvcGVyT2lkKTsKIGV4dGVybiBP YmplY3RBZGRyZXNzIEFsdGVyT3BlcmF0b3IoQWx0ZXJPcGVyYXRvclN0bXQg KnN0bXQpOwogCisvKiBjb21tYW5kcy9zdGF0c2NtZHMuYyAqLworZXh0ZXJu IE9iamVjdEFkZHJlc3MgQ3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0 bXQgKnN0bXQpOworZXh0ZXJuIHZvaWQgUmVtb3ZlU3RhdGlzdGljc0J5SWQo T2lkIHN0YXRzT2lkKTsKKwogLyogY29tbWFuZHMvYWdncmVnYXRlY21kcy5j ICovCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVBZ2dyZWdhdGUoTGlz dCAqbmFtZSwgTGlzdCAqYXJncywgYm9vbCBvbGRzdHlsZSwKIAkJCQlMaXN0 ICpwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZyk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbm9kZXMuaAppbmRleCAyYjczNDgzLi4wMzI5NDcyIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTI1MSw2ICsyNTEsNyBAQCB0eXBl ZGVmIGVudW0gTm9kZVRhZwogCVRfUGxhY2VIb2xkZXJJbmZvLAogCVRfTWlu TWF4QWdnSW5mbywKIAlUX1BsYW5uZXJQYXJhbUl0ZW0sCisJVF9NVlN0YXRp c3RpY0luZm8sCiAKIAkvKgogCSAqIFRBR1MgRk9SIE1FTU9SWSBOT0RFUyAo bWVtbm9kZXMuaCkKQEAgLTM4MSw2ICszODIsNyBAQCB0eXBlZGVmIGVudW0g Tm9kZVRhZwogCVRfQ3JlYXRlUG9saWN5U3RtdCwKIAlUX0FsdGVyUG9saWN5 U3RtdCwKIAlUX0NyZWF0ZVRyYW5zZm9ybVN0bXQsCisJVF9DcmVhdGVTdGF0 c1N0bXQsCiAKIAkvKgogCSAqIFRBR1MgRk9SIFBBUlNFIFRSRUUgTk9ERVMg KHBhcnNlbm9kZXMuaCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aAppbmRleCAyZmQwNjI5Li5lMTgwN2ZiIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGFyc2Vub2Rlcy5oCkBAIC02MDEsNiArNjAxLDE3IEBAIHR5cGVkZWYg c3RydWN0IENvbHVtbkRlZgogCWludAkJCWxvY2F0aW9uOwkJLyogcGFyc2Ug bG9jYXRpb24sIG9yIC0xIGlmIG5vbmUvdW5rbm93biAqLwogfSBDb2x1bW5E ZWY7CiAKK3R5cGVkZWYgc3RydWN0IENyZWF0ZVN0YXRzU3RtdAoreworCU5v ZGVUYWcJCXR5cGU7CisJTGlzdAkgICAqZGVmbmFtZXM7CQkvKiBxdWFsaWZp ZWQgbmFtZSAobGlzdCBvZiBWYWx1ZSBzdHJpbmdzKSAqLworCVJhbmdlVmFy ICAgKnJlbGF0aW9uOwkJLyogcmVsYXRpb24gdG8gYnVpbGQgc3RhdGlzdGlj cyBvbiAqLworCUxpc3QJICAgKmtleXM7CQkJLyogU3RyaW5nIG5vZGVzIG5h bWluZyByZWZlcmVuY2VkIGNvbHVtbihzKSAqLworCUxpc3QJICAgKm9wdGlv bnM7CQkvKiBsaXN0IG9mIERlZkVsZW0gbm9kZXMgKi8KKwlib29sCQlpZl9u b3RfZXhpc3RzOwkvKiBqdXN0IGRvIG5vdGhpbmcgaWYgc3RhdGlzdGljcyBh bHJlYWR5IGV4aXN0cz8gKi8KK30gQ3JlYXRlU3RhdHNTdG10OworCisKIC8q CiAgKiBUYWJsZUxpa2VDbGF1c2UgLSBDUkVBVEUgVEFCTEUgKCAuLi4gTElL RSAuLi4gKSBjbGF1c2UKICAqLwpAQCAtMTQxMCw2ICsxNDIxLDcgQEAgdHlw ZWRlZiBlbnVtIE9iamVjdFR5cGUKIAlPQkpFQ1RfUlVMRSwKIAlPQkpFQ1Rf U0NIRU1BLAogCU9CSkVDVF9TRVFVRU5DRSwKKwlPQkpFQ1RfU1RBVElTVElD UywKIAlPQkpFQ1RfVEFCQ09OU1RSQUlOVCwKIAlPQkpFQ1RfVEFCTEUsCiAJ T0JKRUNUX1RBQkxFU1BBQ0UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9yZWxhdGlvbi5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24u aAppbmRleCA2MTUxOWJiLi43YWUwZjllIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9yZWxhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3JlbGF0aW9uLmgKQEAgLTQ3OSw2ICs0NzksNyBAQCB0eXBlZGVmIHN0cnVj dCBSZWxPcHRJbmZvCiAJTGlzdAkgICAqbGF0ZXJhbF92YXJzOwkvKiBMQVRF UkFMIFZhcnMgYW5kIFBIVnMgcmVmZXJlbmNlZCBieSByZWwgKi8KIAlSZWxp ZHMJCWxhdGVyYWxfcmVmZXJlbmNlcnM7CS8qIHJlbHMgdGhhdCByZWZlcmVu Y2UgbWUgbGF0ZXJhbGx5ICovCiAJTGlzdAkgICAqaW5kZXhsaXN0OwkJLyog bGlzdCBvZiBJbmRleE9wdEluZm8gKi8KKwlMaXN0CSAgICptdnN0YXRsaXN0 OwkJLyogbGlzdCBvZiBNVlN0YXRpc3RpY0luZm8gKi8KIAlCbG9ja051bWJl ciBwYWdlczsJCQkvKiBzaXplIGVzdGltYXRlcyBkZXJpdmVkIGZyb20gcGdf Y2xhc3MgKi8KIAlkb3VibGUJCXR1cGxlczsKIAlkb3VibGUJCWFsbHZpc2Zy YWM7CkBAIC01NzMsNiArNTc0LDMzIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4 T3B0SW5mbwogCWJvb2wJCWFtaGFzZ2V0Yml0bWFwOyAvKiBkb2VzIEFNIGhh dmUgYW1nZXRiaXRtYXAgaW50ZXJmYWNlPyAqLwogfSBJbmRleE9wdEluZm87 CiAKKy8qCisgKiBNVlN0YXRpc3RpY0luZm8KKyAqCQlJbmZvcm1hdGlvbiBh Ym91dCBtdWx0aXZhcmlhdGUgc3RhdHMgZm9yIHBsYW5uaW5nL29wdGltaXph dGlvbgorICoKKyAqIFRoaXMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQg d2hpY2ggY29sdW1ucyBhcmUgY292ZXJlZCBieSB0aGUKKyAqIHN0YXRpc3Rp Y3MgKHN0YWtleXMpLCB3aGljaCBvcHRpb25zIHdlcmUgcmVxdWVzdGVkIHdo aWxlIGFkZGluZyB0aGUKKyAqIHN0YXRpc3RpY3MgKCpfZW5hYmxlZCksIGFu ZCB3aGljaCBraW5kcyBvZiBzdGF0aXN0aWNzIHdlcmUgYWN0dWFsbHkKKyAq IGJ1aWx0IGFuZCBhcmUgYXZhaWxhYmxlIGZvciB0aGUgb3B0aW1pemVyICgq X2J1aWx0KS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTVZTdGF0aXN0aWNJbmZv Cit7CisJTm9kZVRhZwkJdHlwZTsKKworCU9pZAkJCW12b2lkOwkJCS8qIE9J RCBvZiB0aGUgc3RhdGlzdGljcyByb3cgKi8KKwlSZWxPcHRJbmZvICpyZWw7 CQkJLyogYmFjay1saW5rIHRvIGluZGV4J3MgdGFibGUgKi8KKworCS8qIGVu YWJsZWQgc3RhdGlzdGljcyAqLworCWJvb2wJCWRlcHNfZW5hYmxlZDsJLyog ZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgZW5hYmxlZCAqLworCisJLyogYnVp bHQvYXZhaWxhYmxlIHN0YXRpc3RpY3MgKi8KKwlib29sCQlkZXBzX2J1aWx0 OwkJLyogZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgYnVpbHQgKi8KKworCS8q IGNvbHVtbnMgaW4gdGhlIHN0YXRpc3RpY3MgKGF0dG51bXMpICovCisJaW50 MnZlY3RvciAqc3Rha2V5czsJCS8qIGF0dG51bXMgb2YgdGhlIGNvbHVtbnMg Y292ZXJlZCAqLworCit9IE1WU3RhdGlzdGljSW5mbzsKKwogCiAvKgogICog RXF1aXZhbGVuY2VDbGFzc2VzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9tdnN0YXRzLmggYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViZDk2MQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMu aApAQCAtMCwwICsxLDcwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBtdnN0YXRzLmgKKyAqCSAgTXVsdGl2YXJpYXRlIHN0 YXRpc3RpY3MgYW5kIHNlbGVjdGl2aXR5IGVzdGltYXRpb24gZnVuY3Rpb25z LgorICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAx NCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdXRp bHMvbXZzdGF0cy5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpZm5kZWYgTVZTVEFUU19ICisjZGVmaW5lIE1WU1RBVFNf SAorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3Zh Y3V1bS5oIgorCisKKyNkZWZpbmUgTVZTVEFUU19NQVhfRElNRU5TSU9OUwk4 CQkvKiBtYXggbnVtYmVyIG9mIGF0dHJpYnV0ZXMgKi8KKworLyogQW4gYXNz b2NpYXRpdmUgcnVsZSwgdHJhY2tpbmcgW2EgPT4gYl0gZGVwZW5kZW5jeS4K KyAqCisgKiBUT0RPIE1ha2UgdGhpcyB3b3JrIHdpdGggbXVsdGlwbGUgY29s dW1ucyBvbiBib3RoIHNpZGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBNVkRl cGVuZGVuY3lEYXRhIHsKKwlpbnQxNglhOworCWludDE2CWI7Cit9IE1WRGVw ZW5kZW5jeURhdGE7CisKK3R5cGVkZWYgTVZEZXBlbmRlbmN5RGF0YSogTVZE ZXBlbmRlbmN5OworCit0eXBlZGVmIHN0cnVjdCBNVkRlcGVuZGVuY2llc0Rh dGEgeworCXVpbnQzMgkJCW1hZ2ljOwkJLyogbWFnaWMgY29uc3RhbnQgbWFy a2VyICovCisJaW50MzIJCQluZGVwczsJCS8qIG51bWJlciBvZiBkZXBlbmRl bmNpZXMgKi8KKwlNVkRlcGVuZGVuY3kJZGVwc1sxXTsJLyogWFhYIHdoeSBu b3QgYSBwb2ludGVyPyAqLworfSBNVkRlcGVuZGVuY2llc0RhdGE7CisKK3R5 cGVkZWYgTVZEZXBlbmRlbmNpZXNEYXRhKiBNVkRlcGVuZGVuY2llczsKKwor I2RlZmluZSBNVlNUQVRfREVQU19NQUdJQwkJMHhCNDU0OUEyQwkvKiBtYXJr cyBzZXJpYWxpemVkIGJ5dGVhICovCisjZGVmaW5lIE1WU1RBVF9ERVBTX1RZ UEVfQkFTSUMJMQkJCS8qIGJhc2ljIGRlcGVuZGVuY2llcyB0eXBlICovCisK Ky8qCisgKiBUT0RPIE1heWJlIGZldGNoaW5nIHRoZSBoaXN0b2dyYW0vTUNW IGxpc3Qgc2VwYXJhdGVseSBpcyBpbmVmZmljaWVudD8KKyAqICAgICAgQ29u c2lkZXIgYWRkaW5nIGEgc2luZ2xlIGBmZXRjaF9zdGF0c2AgbWV0aG9kLCBm ZXRjaGluZyBhbGwKKyAqICAgICAgc3RhdHMgc3BlY2lmaWVkIHVzaW5nIGZs YWdzIChvciBzb21ldGhpbmcgbGlrZSB0aGF0KS4KKyAqLworCitieXRlYSAq IHNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoTVZEZXBlbmRlbmNpZXMgZGVw ZW5kZW5jaWVzKTsKKworLyogZGVzZXJpYWxpemF0aW9uIG9mIHN0YXRzIChz ZXJpYWxpemF0aW9uIGlzIHByaXZhdGUgdG8gYW5hbHl6ZSkgKi8KK01WRGVw ZW5kZW5jaWVzCWRlc2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhieXRlYSAq IGRhdGEpOworCisvKiBGSVhNRSB0aGlzIHByb2JhYmx5IGJlbG9uZ3Mgc29t ZXdoZXJlIGVsc2UgKG5vdCB0byBvcGVyYXRpb25zIHN0YXRzKSAqLworZXh0 ZXJuIERhdHVtIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFBHX0ZV TkNUSU9OX0FSR1MpOworZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2RlcGVu ZGVuY2llc19zaG93KFBHX0ZVTkNUSU9OX0FSR1MpOworCitNVkRlcGVuZGVu Y2llcworYnVpbGRfbXZfZGVwZW5kZW5jaWVzKGludCBudW1yb3dzLCBIZWFw VHVwbGUgKnJvd3MsCisJCQkJCQkJCSAgaW50MnZlY3RvciAqYXR0cnMsCisJ CQkJCQkJCSAgVmFjQXR0clN0YXRzICoqc3RhdHMpOworCit2b2lkIGJ1aWxk X212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBU dXBsZSAqcm93cywKKwkJCQkJCSAgIGludCBuYXR0cywgVmFjQXR0clN0YXRz ICoqdmFjYXR0cnN0YXRzKTsKKwordm9pZCB1cGRhdGVfbXZfc3RhdHMoT2lk IHJlbGlkLCBNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsIGludDJ2ZWN0 b3IgKmF0dHJzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4 IGZmNTY3MmQuLjI2YzdmODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC03 OSw2ICs3OSw3IEBAIHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uRGF0YQogCWJv b2wJCXJkX2lzdmFsaWQ7CQkvKiByZWxjYWNoZSBlbnRyeSBpcyB2YWxpZCAq LwogCWNoYXIJCXJkX2luZGV4dmFsaWQ7CS8qIHN0YXRlIG9mIHJkX2luZGV4 bGlzdDogMCA9IG5vdCB2YWxpZCwgMSA9CiAJCQkJCQkJCSAqIHZhbGlkLCAy ID0gdGVtcG9yYXJpbHkgZm9yY2VkICovCisJYm9vbAkJcmRfbXZzdGF0dmFs aWQ7CS8qIHN0YXRlIG9mIHJkX212c3RhdGxpc3Q6IHRydWUvZmFsc2UgKi8K IAogCS8qCiAJICogcmRfY3JlYXRlU3ViaWQgaXMgdGhlIElEIG9mIHRoZSBo aWdoZXN0IHN1YnRyYW5zYWN0aW9uIHRoZSByZWwgaGFzCkBAIC0xMTEsNiAr MTEyLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsYXRpb25EYXRhCiAJTGlzdAkg ICAqcmRfaW5kZXhsaXN0OwkvKiBsaXN0IG9mIE9JRHMgb2YgaW5kZXhlcyBv biByZWxhdGlvbiAqLwogCU9pZAkJCXJkX29pZGluZGV4OwkvKiBPSUQgb2Yg dW5pcXVlIGluZGV4IG9uIE9JRCwgaWYgYW55ICovCiAJT2lkCQkJcmRfcmVw bGlkaW5kZXg7IC8qIE9JRCBvZiByZXBsaWNhIGlkZW50aXR5IGluZGV4LCBp ZiBhbnkgKi8KKyAKKwkvKiBkYXRhIG1hbmFnZWQgYnkgUmVsYXRpb25HZXRN VlN0YXRMaXN0OiAqLworCUxpc3QJICAgKnJkX212c3RhdGxpc3Q7CS8qIGxp c3Qgb2YgT0lEcyBvZiBtdWx0aXZhcmlhdGUgc3RhdHMgKi8KIAogCS8qIGRh dGEgbWFuYWdlZCBieSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcDogKi8K IAlCaXRtYXBzZXQgICpyZF9pbmRleGF0dHI7CS8qIGlkZW50aWZpZXMgY29s dW1ucyB1c2VkIGluIGluZGV4ZXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3V0aWxzL3JlbGNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9yZWxj YWNoZS5oCmluZGV4IDFiNDgzMDQuLjlmMDNjOGQgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvcmVsY2FjaGUuaApAQCAtMzgsNiArMzgsNyBAQCBleHRlcm4gdm9p ZCBSZWxhdGlvbkNsb3NlKFJlbGF0aW9uIHJlbGF0aW9uKTsKICAqIFJvdXRp bmVzIHRvIGNvbXB1dGUvcmV0cmlldmUgYWRkaXRpb25hbCBjYWNoZWQgaW5m b3JtYXRpb24KICAqLwogZXh0ZXJuIExpc3QgKlJlbGF0aW9uR2V0SW5kZXhM aXN0KFJlbGF0aW9uIHJlbGF0aW9uKTsKK2V4dGVybiBMaXN0ICpSZWxhdGlv bkdldE1WU3RhdExpc3QoUmVsYXRpb24gcmVsYXRpb24pOwogZXh0ZXJuIE9p ZAlSZWxhdGlvbkdldE9pZEluZGV4KFJlbGF0aW9uIHJlbGF0aW9uKTsKIGV4 dGVybiBPaWQJUmVsYXRpb25HZXRSZXBsaWNhSW5kZXgoUmVsYXRpb24gcmVs YXRpb24pOwogZXh0ZXJuIExpc3QgKlJlbGF0aW9uR2V0SW5kZXhFeHByZXNz aW9ucyhSZWxhdGlvbiByZWxhdGlvbik7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy9zeXNjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvc3lz Y2FjaGUuaAppbmRleCAyNTY2MTViLi4wZTA2NThkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9zeXNjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRl L3V0aWxzL3N5c2NhY2hlLmgKQEAgLTY2LDYgKzY2LDggQEAgZW51bSBTeXND YWNoZUlkZW50aWZpZXIKIAlJTkRFWFJFTElELAogCUxBTkdOQU1FLAogCUxB TkdPSUQsCisJTVZTVEFUTkFNRU5TUCwKKwlNVlNUQVRPSUQsCiAJTkFNRVNQ QUNFTkFNRSwKIAlOQU1FU1BBQ0VPSUQsCiAJT1BFUk5BTUVOU1AsCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDI4 YjA2MWYuLjJlMmRmOGUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcnVsZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnVsZXMub3V0CkBAIC0xMzY1LDYgKzEzNjUsMTQgQEAgcGdfbWF0 dmlld3N8IFNFTEVDVCBuLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKICAgICAg TEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OICgobi5vaWQgPSBjLnJlbG5h bWVzcGFjZSkpKQogICAgICBMRUZUIEpPSU4gcGdfdGFibGVzcGFjZSB0IE9O ICgodC5vaWQgPSBjLnJlbHRhYmxlc3BhY2UpKSkKICAgV0hFUkUgKGMucmVs a2luZCA9ICdtJzo6ImNoYXIiKTsKK3BnX212X3N0YXRzfCBTRUxFQ1Qgbi5u c3BuYW1lIEFTIHNjaGVtYW5hbWUsCisgICAgYy5yZWxuYW1lIEFTIHRhYmxl bmFtZSwKKyAgICBzLnN0YWtleXMgQVMgYXR0bnVtcywKKyAgICBsZW5ndGgo cy5zdGFkZXBzKSBBUyBkZXBzYnl0ZXMsCisgICAgcGdfbXZfc3RhdHNfZGVw ZW5kZW5jaWVzX2luZm8ocy5zdGFkZXBzKSBBUyBkZXBzaW5mbworICAgRlJP TSAoKHBnX212X3N0YXRpc3RpYyBzCisgICAgIEpPSU4gcGdfY2xhc3MgYyBP TiAoKGMub2lkID0gcy5zdGFyZWxpZCkpKQorICAgICBMRUZUIEpPSU4gcGdf bmFtZXNwYWNlIG4gT04gKChuLm9pZCA9IGMucmVsbmFtZXNwYWNlKSkpOwog cGdfcG9saWNpZXN8IFNFTEVDVCBuLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwK ICAgICBjLnJlbG5hbWUgQVMgdGFibGVuYW1lLAogICAgIHBvbC5wb2xuYW1l IEFTIHBvbGljeW5hbWUsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQKaW5kZXggZWIwYmM4OC4uOTJh MGQ4YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z YW5pdHlfY2hlY2sub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc2FuaXR5X2NoZWNrLm91dApAQCAtMTEzLDYgKzExMyw3IEBAIHBnX2lu aGVyaXRzfHQKIHBnX2xhbmd1YWdlfHQKIHBnX2xhcmdlb2JqZWN0fHQKIHBn X2xhcmdlb2JqZWN0X21ldGFkYXRhfHQKK3BnX212X3N0YXRpc3RpY3x0CiBw Z19uYW1lc3BhY2V8dAogcGdfb3BjbGFzc3x0CiBwZ19vcGVyYXRvcnx0Ci0t IAoyLjEuMAoK --------------040701000609000501090206 Content-Type: application/x-patch; name="0003-clause-reduction-using-functional-dependencies.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0003-clause-reduction-using-functional-dependencies.patch" RnJvbSBlYmFlNTBjNDNlYjVjNmZkZDI0ZWZkNzI2NDg5ZGM0MDY3MmFjMTg0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE5 OjQyOjE4ICswMjAwClN1YmplY3Q6IFtQQVRDSCAzLzddIGNsYXVzZSByZWR1 Y3Rpb24gdXNpbmcgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKCkR1cmluZyBw bGFubmluZywgdXNlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIHRvIGRlY2lk ZSB3aGljaApjbGF1c2VzIHRvIHNraXAgZHVyaW5nIGNhcmRpbmFsaXR5IGVz dGltYXRpb24uIEluaXRpYWwgYW5kCnJhdGhlciBzaW1wbGlzdGljIGltcGxl bWVudGF0aW9uLgoKVGhpcyBvbmx5IHdvcmtzIHdpdGggcmVndWxhciBXSEVS RSBjbGF1c2VzLCBub3QgY2xhdXNlcyB1c2VkCmZvciBqb2luIGNsYXVzZXMu CgpOb3RlOiBUaGUgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoKSBuZWVkcyB0 byBpZGVudGlmeSB0aGUKcmVsYXRpb24gKHNvIHRoYXQgd2UgY2FuIGZldGNo IHRoZSBsaXN0IG9mIG11bHRpdmFyaWF0ZSBzdGF0cwpieSBPSUQpLiBwbGFu bmVyX3J0X2ZldGNoKCkgc2VlbXMgbGlrZSB0aGUgYXBwcm9wcmlhdGUgd2F5 IHRvCmdldCB0aGUgcmVsYXRpb24gT0lELCBidXQgYXBwYXJlbnRseSBpdCBv bmx5IHdvcmtzIHdpdGggc2ltcGxlCnZhcnMuIE1heWJlIGV4YW1pbmVfdmFy aWFibGUoKSB3b3VsZCBtYWtlIHRoaXMgd29yayB3aXRoIG1vcmUKY29tcGxl eCB2YXJzIHRvbz8KCkluY2x1ZGVzIHJlZ3Jlc3Npb24gdGVzdHMgYW5hbHl6 aW5nIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzCihwYXJ0IG9mIEFOQUxZWkUp IG9uIHNldmVyYWwgZGF0YXNldHMgKG5vIGRlcGVuZGVuY2llcywgbm8KdHJh bnNpdGl2ZSBkZXBlbmRlbmNpZXMsIC4uLikuCgpDaGVja3MgdGhhdCBhIHF1 ZXJ5IHdpdGggY29uZGl0aW9ucyBvbiB0d28gY29sdW1ucywgd2hlcmUgb25l IChCKQppcyBmdW5jdGlvbmFsbHkgZGVwZW5kZW50IG9uIHRoZSBvdGhlciBv bmUgKEEpLCBjb3JyZWN0bHkgaWdub3Jlcwp0aGUgY2xhdXNlIG9uIChCKSBh bmQgY2hvb3NlcyBiaXRtYXAgaW5kZXggc2NhbiBpbnN0ZWFkIG9mIHBsYWlu CmluZGV4IHNjYW4gKHdoaWNoIGlzIHdoYXQgaGFwcGVucyBvdGhlcndpc2Us IHRoYW5rcyB0byBhc3N1bXB0aW9uCm9mIGluZGVwZW5kZW5jZSkuCgpOb3Rl OiBGdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBvbmx5IHdvcmsgd2l0aCBlcXVh bGl0eSBjbGF1c2VzLApubyBpbmVxdWFsaXRpZXMgZXRjLgotLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jICAgICAgICB8IDkx MiArKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRp bHMvbXZzdGF0cy9jb21tb24uYyAgICAgICAgICAgIHwgICA1ICstCiBzcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL2RlcGVuZGVuY2llcy5jICAgICAgfCAg MjQgKwogc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oICAgICAgICAgICAg ICAgICAgIHwgIDE2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212 X2RlcGVuZGVuY2llcy5vdXQgfCAxNzIgKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAgMyArCiBzcmMv dGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZSAgICAgICAgICAgICAgfCAg IDEgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfZGVwZW5kZW5jaWVzLnNx bCAgICAgIHwgMTUwICsrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDEyNzggaW5z ZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X2RlcGVuZGVuY2llcy5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9t dl9kZXBlbmRlbmNpZXMuc3FsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwppbmRleCAwMjY2MGMyLi5lODM0NzIy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1 c2VzZWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1 c2VzZWwuYwpAQCAtMTQsMTQgKzE0LDE5IEBACiAgKi8KICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL3N5c2F0dHIuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMu aCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgIm9w dGltaXplci9wYXRobm9kZS5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFu Y2F0LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3Zhci5oIgogI2luY2x1ZGUg InV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisjaW5jbHVkZSAidXRpbHMvbXZzdGF0cy5oIgogI2luY2x1ZGUgInV0 aWxzL3NlbGZ1bmNzLmgiCisjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIK IAogCiAvKgpAQCAtNDEsNiArNDYsNDQgQEAgdHlwZWRlZiBzdHJ1Y3QgUmFu Z2VRdWVyeUNsYXVzZQogc3RhdGljIHZvaWQgYWRkUmFuZ2VDbGF1c2UoUmFu Z2VRdWVyeUNsYXVzZSAqKnJxbGlzdCwgTm9kZSAqY2xhdXNlLAogCQkJICAg Ym9vbCB2YXJvbmxlZnQsIGJvb2wgaXNMVHNlbCwgU2VsZWN0aXZpdHkgczIp OwogCisjZGVmaW5lCQlNVl9DTEFVU0VfVFlQRV9GREVQCQkweDAxCisKK3N0 YXRpYyBib29sIGNsYXVzZV9pc19tdl9jb21wYXRpYmxlKFBsYW5uZXJJbmZv ICpyb290LCBOb2RlICpjbGF1c2UsIE9pZCB2YXJSZWxpZCwKKwkJCQkJCQkg SW5kZXggKnJlbGlkLCBBdHRyTnVtYmVyICphdHRudW0sIFNwZWNpYWxKb2lu SW5mbyAqc2ppbmZvKTsKKworc3RhdGljIEJpdG1hcHNldCAgKmNvbGxlY3Rf bXZfYXR0bnVtcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywK KwkJCQkJCQkJCSAgT2lkIHZhclJlbGlkLCBJbmRleCAqcmVsaWQsIFNwZWNp YWxKb2luSW5mbyAqc2ppbmZvKTsKKworc3RhdGljIExpc3QgKmNsYXVzZWxp c3RfYXBwbHlfZGVwZW5kZW5jaWVzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0 ICpjbGF1c2VzLAorCQkJCQkJCQlPaWQgdmFyUmVsaWQsIExpc3QgKnN0YXRz LAorCQkJCQkJCQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbyk7CisKK3N0YXRp YyBib29sIGhhc19zdGF0cyhMaXN0ICpzdGF0cywgaW50IHR5cGUpOworCitz dGF0aWMgTGlzdCAqIGZpbmRfc3RhdHMoUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmNsYXVzZXMsCisJCQkJCQkgT2lkIHZhclJlbGlkLCBJbmRleCAqcmVs aWQpOworIAorc3RhdGljIEJpdG1hcHNldCogZmRlcHNfY29sbGVjdF9hdHRu dW1zKExpc3QgKnN0YXRzKTsKKworc3RhdGljIGludAkqbWFrZV9pZHhfdG9f YXR0bnVtX21hcHBpbmcoQml0bWFwc2V0ICphdHRudW1zKTsKK3N0YXRpYyBp bnQJKm1ha2VfYXR0bnVtX3RvX2lkeF9tYXBwaW5nKEJpdG1hcHNldCAqYXR0 bnVtcyk7CisKK3N0YXRpYyBib29sCSpidWlsZF9hZGphY2VuY3lfbWF0cml4 KExpc3QgKnN0YXRzLCBCaXRtYXBzZXQgKmF0dG51bXMsCisJCQkJCQkJCWlu dCAqaWR4X3RvX2F0dG51bSwgaW50ICphdHRudW1fdG9faWR4KTsKKworc3Rh dGljIHZvaWQJbXVsdGlwbHlfYWRqYWNlbmN5X21hdHJpeChib29sICptYXRy aXgsIGludCBuYXR0cyk7CisKK3N0YXRpYyBMaXN0KiBmZGVwc19yZWR1Y2Vf Y2xhdXNlcyhMaXN0ICpjbGF1c2VzLAorCQkJCQkJCQkgIEJpdG1hcHNldCAq YXR0bnVtcywgYm9vbCAqbWF0cml4LAorCQkJCQkJCQkgIGludCAqaWR4X3Rv X2F0dG51bSwgaW50ICphdHRudW1fdG9faWR4LAorCQkJCQkJCQkgIEluZGV4 IHJlbGlkKTsKKworc3RhdGljIEJpdG1hcHNldCAqZmRlcHNfZmlsdGVyX2Ns YXVzZXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSBMaXN0ICpjbGF1c2Vz LCBCaXRtYXBzZXQgKmRlcHNfYXR0bnVtcywKKwkJCQkJIExpc3QgKipyZWR1 Y2VkX2NsYXVzZXMsIExpc3QgKipkZXBzX2NsYXVzZXMsCisJCQkJCSBPaWQg dmFyUmVsaWQsIEluZGV4ICpyZWxpZCwgU3BlY2lhbEpvaW5JbmZvICpzamlu Zm8pOworCitzdGF0aWMgQml0bWFwc2V0ICogZ2V0X3ZhcmF0dG5vcyhOb2Rl ICogbm9kZSwgSW5kZXggcmVsaWQpOwogCiAvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogICoJCVJPVVRJTkVTIFRPIENPTVBVVEUgU0VMRUNU SVZJVElFUwpAQCAtNjAsNyArMTAzLDcgQEAgc3RhdGljIHZvaWQgYWRkUmFu Z2VDbGF1c2UoUmFuZ2VRdWVyeUNsYXVzZSAqKnJxbGlzdCwgTm9kZSAqY2xh dXNlLAogICogc3ViY2xhdXNlcy4gIEhvd2V2ZXIsIHRoYXQncyBvbmx5IHJp Z2h0IGlmIHRoZSBzdWJjbGF1c2VzIGhhdmUgaW5kZXBlbmRlbnQKICAqIHBy b2JhYmlsaXRpZXMsIGFuZCBpbiByZWFsaXR5IHRoZXkgYXJlIG9mdGVuIE5P VCBpbmRlcGVuZGVudC4gIFNvLAogICogd2Ugd2FudCB0byBiZSBzbWFydGVy IHdoZXJlIHdlIGNhbi4KLQorICoKICAqIEN1cnJlbnRseSwgdGhlIG9ubHkg ZXh0cmEgc21hcnRzIHdlIGhhdmUgaXMgdG8gcmVjb2duaXplICJyYW5nZSBx dWVyaWVzIiwKICAqIHN1Y2ggYXMgInggPiAzNCBBTkQgeCA8IDQyIi4gIENs YXVzZXMgYXJlIHJlY29nbml6ZWQgYXMgcG9zc2libGUgcmFuZ2UKICAqIHF1 ZXJ5IGNvbXBvbmVudHMgaWYgdGhleSBhcmUgcmVzdHJpY3Rpb24gb3BjbGF1 c2VzIHdob3NlIG9wZXJhdG9ycyBoYXZlCkBAIC04Nyw2ICsxMzAsODggQEAg c3RhdGljIHZvaWQgYWRkUmFuZ2VDbGF1c2UoUmFuZ2VRdWVyeUNsYXVzZSAq KnJxbGlzdCwgTm9kZSAqY2xhdXNlLAogICoKICAqIE9mIGNvdXJzZSB0aGlz IGlzIGFsbCB2ZXJ5IGRlcGVuZGVudCBvbiB0aGUgYmVoYXZpb3Igb2YKICAq IHNjYWxhcmx0c2VsL3NjYWxhcmd0c2VsOyBwZXJoYXBzIHNvbWUgZGF5IHdl IGNhbiBnZW5lcmFsaXplIHRoZSBhcHByb2FjaC4KKyAqCisgKgorICogTXVs dGl2YXJpYXRlIHN0YXRpc3Rpc3RpY3MKKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKiBUaGlzIGFsc28gdXNlcyBtdWx0aXZhcmlhdGUgc3Rh dHMgdG8gZXN0aW1hdGUgY29tYmluYXRpb25zIG9mCisgKiBjb25kaXRpb25z LCBpbiBhIHdheSAoYSkgbWF4aW1pemluZyB0aGUgZXN0aW1hdGUgYWNjdXJh Y3kgYnkgdXNpbmcKKyAqIGFzIG1hbnkgc3RhdHMgYXMgcG9zc2libGUsIGFu ZCAoYikgbWluaW1pemluZyB0aGUgb3ZlcmhlYWQsCisgKiBlc3BlY2lhbGx5 IHdoZW4gdGhlcmUgYXJlIG5vIHN1aXRhYmxlIG11bHRpdmFyaWF0ZSBzdGF0 cyAoc28gaWYgeW91CisgKiBhcmUgbm90IHVzaW5nIG11bHRpdmFyaWF0ZSBz dGF0cywgdGhlcmUncyBubyBhZGRpdGlvbmFsIG92ZXJoZWFkKS4KKyAqCisg KiBUaGUgZm9sbG93aW5nIGNoZWNrcyBhcmUgcGVyZm9ybWVkIChpbiB0aGlz IG9yZGVyKSwgYW5kIHRoZSBvcHRpbWl6ZXIKKyAqIGZhbGxzIGJhY2sgdG8g cmVndWxhciBzdGF0cyBvbiB0aGUgZmlyc3QgJ2ZhbHNlJy4KKyAqCisgKiBO T1RFOiBUaGlzIGV4cGxhaW5zIGhvdyB0aGlzIHdvcmtzIHdpdGggYWxsIHRo ZSBwYXRjaGVzIGFwcGxpZWQsIG5vdAorICogICAgICAganVzdCB0aGUgZnVu Y3Rpb25hbCBkZXBlbmRlbmNpZXMuCisgKgorICogKDApIGNoZWNrIGlmIHRo ZXJlIGFyZSBtdWx0aXZhcmlhdGUgc3RhdHMgb24gdGhlIHJlbGF0aW9uCisg KgorICogICAgIElmIG5vLCBqdXN0IHNraXAgYWxsIHRoZSBmb2xsb3dpbmcg c3RlcHMgKGRpcmVjdGx5IHRvIHRoZQorICogICAgIG9yaWdpbmFsIGNvZGUp LgorICoKKyAqICgxKSBjaGVjayBob3cgbWFueSBhdHRyaWJ1dGVzIGFyZSB0 aGVyZSBpbiBjb25kaXRpb25zIGNvbXBhdGlibGUKKyAqICAgICB3aXRoIGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzCisgKgorICogICAgIE9ubHkgc2ltcGxl IGVxdWFsaXR5IGNsYXVzZXMgYXJlIGNvbnNpZGVyZWQgY29tcGF0aWJsZSB3 aXRoCisgKiAgICAgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgKGFuZCB0aGF0 J3MgdW5saWtlbHkgdG8gY2hhbmdlLCBiZWNhdXNlCisgKiAgICAgdGhhdCdz IHRoZSBvbmx5IGNhc2Ugd2hlbiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBh cmUgdXNlZnVsKS4KKyAqCisgKiAgICAgSWYgdGhlcmUgYXJlIG5vIGNvbmRp dGlvbnMgdGhhdCBtaWdodCBiZSBoYW5kbGVkIGJ5IG11bHRpdmFyaWF0ZQor ICogICAgIHN0YXRzLCBvciBpZiB0aGUgY29uZGl0aW9ucyByZWZlcmVuY2Ug anVzdCBhIHNpbmdsZSBjb2x1bW4sIGl0CisgKiAgICAgbWFrZXMgbm8gc2Vu c2UgdG8gdXNlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLCBzbyBza2lwIHRv ICg0KS4KKyAqCisgKiAoMikgcmVkdWNlIHRoZSBjbGF1c2VzIHVzaW5nIGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzCisgKgorICogICAgIFRoaXMgc2ltcGx5 IGF0dGVtcHRzIHRvICdyZWR1Y2UnIHRoZSBjbGF1c2VzIGJ5IGFwcGx5aW5n IGZ1bmN0aW9uYWwKKyAqICAgICBkZXBlbmRlbmNpZXMuIEZvciBleGFtcGxl IGlmIHRoZXJlIGFyZSB0d28gY2xhdXNlczoKKyAqCisgKiAgICAgICAgIFdI RVJFIChhID0gMSkgQU5EIChiID0gMikKKyAqCisgKiAgICAgYW5kIHdlIGtu b3cgdGhhdCAnYScgZGV0ZXJtaW5lcyB0aGUgdmFsdWUgb2YgJ2InLCB3ZSBt YXkgcmVtb3ZlCisgKiAgICAgdGhlIHNlY29uZCBjb25kaXRpb24gKGIgPSAy KSB3aGVuIGNvbXB1dGluZyB0aGUgc2VsZWN0aXZpdHkuCisgKiAgICAgVGhp cyBpcyBvZiBjb3Vyc2UgdHJpY2t5IC0gc2VlIG12c3RhdHMvZGVwZW5kZW5j aWVzLmMgZm9yIGRldGFpbHMuCisgKgorICogICAgIEFmdGVyIHRoZSByZWR1 Y3Rpb24sIHN0ZXAgKDEpIGlzIHRvIGJlIHJlcGVhdGVkLgorICoKKyAqICgz KSBjaGVjayBob3cgbWFueSBhdHRyaWJ1dGVzIGFyZSB0aGVyZSBpbiBjb25k aXRpb25zIGNvbXBhdGlibGUKKyAqICAgICB3aXRoIE1DViBsaXN0cyBhbmQg aGlzdG9ncmFtcworICoKKyAqICAgICBXaGF0IGNvbmRpdGlvbnMgYXJlIGNv bXBhdGlibGUgd2l0aCBtdWx0aXZhcmlhdGUgc3RhdHMgaXMgZGVjaWRlZAor ICogICAgIGJ5IGNsYXVzZV9pc19tdl9jb21wYXRpYmxlKCkuIEF0IHRoaXMg bW9tZW50LCBvbmx5IGNvbmRpdGlvbnMKKyAqICAgICBvZiB0aGUgZm9ybSAi Y29sdW1uIG9wZXJhdG9yIGNvbnN0YW50IiAoZm9yIHNpbXBsZSBjb21wYXJp c29uCisgKiAgICAgb3BlcmF0b3JzKSwgSVMgW05PVF0gTlVMTCBhbmQgc29t ZSBBTkQvT1IgY2xhdXNlcyBhcmUgY29uc2lkZXJlZAorICogICAgIGNvbXBh dGlibGUgd2l0aCBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcy4KKyAqCisgKiAg ICAgQWdhaW4sIHNlZSBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZSgpIGZvciBk ZXRhaWxzLgorICoKKyAqICg0KSBjaGVjayBob3cgbWFueSBhdHRyaWJ1dGVz IGFyZSB0aGVyZSBpbiBjb25kaXRpb25zIGNvbXBhdGlibGUKKyAqICAgICB3 aXRoIE1DViBsaXN0cyBhbmQgaGlzdG9ncmFtcworICoKKyAqICAgICBJZiB0 aGVyZSBhcmUgbm8gY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIGhhbmRsZWQg YnkgTUNWIGxpc3RzCisgKiAgICAgb3IgaGlzdG9ncmFtcywgb3IgaWYgdGhl IGNvbmRpdGlvbnMgcmVmZXJlbmNlIGp1c3QgYSBzaW5nbGUKKyAqICAgICBj b2x1bW4sIGl0IG1ha2VzIG5vIHNlbnNlIHRvIGNvbnRpbnVlLCBzbyBqdXN0 IHNraXAgdG8gKDcpLgorICoKKyAqICg1KSBjaG9vc2UgdGhlIHN0YXRzIG1h dGNoaW5nIHRoZSBtb3N0IGNvbHVtbnMKKyAqCisgKiAgICAgSWYgdGhlcmUg YXJlIG11bHRpcGxlIGluc3RhbmNlcyBvZiBtdWx0aXZhcmlhdGUgc3RhdGlz dGljcyAoZS5nLgorICogICAgIGJ1aWx0IG9uIGRpZmZlcmVudCBzZXRzIG9m IGNvbHVtbnMpLCB3ZSBjaG9vc2UgdGhlIHN0YXRzIGNvdmVyaW5nCisgKiAg ICAgdGhlIG1vc3QgY29sdW1ucyBmcm9tIHN0ZXAgKDEpLiBJdCBtYXkgaGFw cGVuIHRoYXQgYWxsIGF2YWlsYWJsZQorICogICAgIHN0YXRzIG1hdGNoIGp1 c3QgYSBzaW5nbGUgY29sdW1uIC0gZm9yIGV4YW1wbGUgd2l0aCBjb25kaXRp b25zCisgKgorICogICAgICAgICBXSEVSRSBhID0gMSBBTkQgYiA9IDIKKyAq CisgKiAgICAgYW5kIHN0YXRpc3RpY3MgYnVpbHQgb24gKGEsYykgYW5kIChi LGMpLiBJbiBzdWNoIGNhc2UganVzdCBmYWxsCisgKiAgICAgYmFjayB0byB0 aGUgcmVndWxhciBzdGF0cyBiZWNhdXNlIGl0IG1ha2VzIG5vIHNlbnNlIHRv IHVzZSB0aGUKKyAqICAgICBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcy4KKyAq CisgKiAgICAgRm9yIG1vcmUgZGV0YWlscyBhYm91dCBob3cgZXhhY3RseSB3 ZSBjaG9vc2UgdGhlIHN0YXRzLCBzZWUKKyAqICAgICBjaG9vc2VfbXZfc3Rh dGlzdGljcygpLgorICoKKyAqICg2KSB1c2UgdGhlIG11bHRpdmFyaWF0ZSBz dGF0cyB0byBlc3RpbWF0ZSBtYXRjaGluZyBjbGF1c2VzCisgKgorICogKDcp IGVzdGltYXRlIHRoZSByZW1haW5pbmcgY2xhdXNlcyB1c2luZyB0aGUgcmVn dWxhciBzdGF0aXN0aWNzCiAgKi8KIFNlbGVjdGl2aXR5CiBjbGF1c2VsaXN0 X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LApAQCAtOTksNiArMjI0 LDE2IEBAIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJv b3QsCiAJUmFuZ2VRdWVyeUNsYXVzZSAqcnFsaXN0ID0gTlVMTDsKIAlMaXN0 Q2VsbCAgICpsOwogCisJLyogcHJvY2Vzc2luZyBtdiBzdGF0cyAqLworCU9p ZAkJCXJlbGlkID0gSW52YWxpZE9pZDsKKworCS8qIGF0dHJpYnV0ZXMgaW4g bXYtY29tcGF0aWJsZSBjbGF1c2VzICovCisJQml0bWFwc2V0ICAqbXZhdHRu dW1zID0gTlVMTDsKKwlMaXN0CSAgICpzdGF0cyA9IE5JTDsKKworCS8qIHVz ZSBjbGF1c2VzIChub3QgY29uZGl0aW9ucyksIGJlY2F1c2UgdGhvc2UgYXJl IGFsd2F5cyBub24tZW1wdHkgKi8KKwlzdGF0cyA9IGZpbmRfc3RhdHMocm9v dCwgY2xhdXNlcywgdmFyUmVsaWQsICZyZWxpZCk7CisKIAkvKgogCSAqIElm IHRoZXJlJ3MgZXhhY3RseSBvbmUgY2xhdXNlLCB0aGVuIG5vIHVzZSBpbiB0 cnlpbmcgdG8gbWF0Y2ggdXAgcGFpcnMsCiAJICogc28ganVzdCBnbyBkaXJl Y3RseSB0byBjbGF1c2Vfc2VsZWN0aXZpdHkoKS4KQEAgLTEwOCw2ICsyNDMs MzEgQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJICB2YXJSZWxpZCwgam9pbnR5cGUsIHNqaW5mbyk7CiAK IAkvKgorCSAqIENoZWNrIHRoYXQgdGhlcmUgYXJlIHNvbWUgc3RhdHMgd2l0 aCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcworCSAqIGJ1aWx0IChieSB3YWxr aW5nIHRoZSBzdGF0cyBsaXN0KS4gV2UncmUgZ29pbmcgdG8gZmluZCB0aGF0 CisJICogYW55d2F5IHdoZW4gdHJ5aW5nIHRvIGFwcGx5IHRoZSBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcywgYnV0CisJICogdGhpcyBpcyBwcm9iYWJseSBh IHRhZCBmYXN0ZXIuCisJICovCisJaWYgKGhhc19zdGF0cyhzdGF0cywgTVZf Q0xBVVNFX1RZUEVfRkRFUCkpCisJeworCQkvKiBjb2xsZWN0IGF0dHJpYnV0 ZXMgcmVmZXJlbmNlZCBieSBtdi1jb21wYXRpYmxlIGNsYXVzZXMgKi8KKwkJ bXZhdHRudW1zID0gY29sbGVjdF9tdl9hdHRudW1zKHJvb3QsIGNsYXVzZXMs IHZhclJlbGlkLCAmcmVsaWQsIHNqaW5mbyk7CisKKwkJLyoKKwkJICogSWYg dGhlcmUgYXJlIG12LWNvbXBhdGlibGUgY2xhdXNlcywgcmVmZXJlbmNpbmcg YXQgbGVhc3QgdHdvCisJCSAqIGRpZmZlcmVudCBjb2x1bW5zIChvdGhlcndp c2UgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gdXNlIG12IHN0YXRzKSwKKwkJICog dHJ5IHRvIHJlZHVjZSB0aGUgY2xhdXNlcyB1c2luZyBmdW5jdGlvbmFsIGRl cGVuZGVuY2llcywgYW5kCisJCSAqIHJlY29sbGVjdCB0aGUgYXR0cmlidXRl cyBmcm9tIHRoZSByZWR1Y2VkIGxpc3QuCisJCSAqCisJCSAqIFdlIGRvbid0 IG5lZWQgdG8gc2VsZWN0IGEgc2luZ2xlIHN0YXRpc3RpY3MgZm9yIHRoaXMg LSB3ZSBjYW4KKwkJICogYXBwbHkgYWxsIHRoZSBmdW5jdGlvbmFsIGRlcGVu ZGVuY2llcyB3ZSBoYXZlLgorCQkgKi8KKwkJaWYgKGJtc19udW1fbWVtYmVy cyhtdmF0dG51bXMpID49IDIpCisJCQljbGF1c2VzID0gY2xhdXNlbGlzdF9h cHBseV9kZXBlbmRlbmNpZXMocm9vdCwgY2xhdXNlcywgdmFyUmVsaWQsCisJ CQkJCQkJCQkJCQkJc3RhdHMsIHNqaW5mbyk7CisJfQorCisJLyoKIAkgKiBJ bml0aWFsIHNjYW4gb3ZlciBjbGF1c2VzLiAgQW55dGhpbmcgdGhhdCBkb2Vz bid0IGxvb2sgbGlrZSBhIHBvdGVudGlhbAogCSAqIHJhbmdlcXVlcnkgY2xh dXNlIGdldHMgbXVsdGlwbGllZCBpbnRvIHMxIGFuZCBmb3Jnb3R0ZW4uIEFu eXRoaW5nIHRoYXQKIAkgKiBkb2VzIGdldHMgaW5zZXJ0ZWQgaW50byBhbiBy cWxpc3QgZW50cnkuCkBAIC03NjMsMyArOTIzLDc1MyBAQCBjbGF1c2Vfc2Vs ZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAKIAlyZXR1cm4gczE7CiB9 CisKKy8qCisgKiBDb2xsZWN0IGF0dHJpYnV0ZXMgZnJvbSBtdi1jb21wYXRp YmxlIGNsYXVzZXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorY29sbGVj dF9tdl9hdHRudW1zKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2Vz LCBPaWQgdmFyUmVsaWQsCisJCQkJICAgSW5kZXggKnJlbGlkLCBTcGVjaWFs Sm9pbkluZm8gKnNqaW5mbykKK3sKKwlCaXRtYXBzZXQgICphdHRudW1zID0g TlVMTDsKKwlMaXN0Q2VsbCAgICpsOworCisJLyoKKwkgKiBXYWxrIHRocm91 Z2ggdGhlIGNsYXVzZXMgYW5kIGlkZW50aWZ5IHRoZSBvbmVzIHdlIGNhbiBl c3RpbWF0ZQorCSAqIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cywgYW5kIHJl bWVtYmVyIHRoZSByZWxpZC9jb2x1bW5zLiBXZSdsbAorCSAqIHRoZW4gY3Jv c3MtY2hlY2sgaWYgd2UgaGF2ZSBzdWl0YWJsZSBzdGF0cywgYW5kIG9ubHkg aWYgbmVlZGVkCisJICogd2UnbGwgc3BsaXQgdGhlIGNsYXVzZXMgaW50byBt dWx0aXZhcmlhdGUgYW5kIHJlZ3VsYXIgbGlzdHMuCisJICoKKwkgKiBGb3Ig bm93IHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBSZXN0cmljdEluZm8gbm9k ZXMgd2l0aCBuZXN0ZWQKKwkgKiBPcEV4cHIsIHVzaW5nIGVpdGhlciBhIHJh bmdlIG9yIGVxdWFsaXR5LgorCSAqLworCWZvcmVhY2ggKGwsIGNsYXVzZXMp CisJeworCQlBdHRyTnVtYmVyIGF0dG51bTsKKwkJTm9kZQkgICAqY2xhdXNl ID0gKE5vZGUgKikgbGZpcnN0KGwpOworCisJCS8qIGlnbm9yZSB0aGUgcmVz dWx0IGZvciBub3cgLSB3ZSBvbmx5IG5lZWQgdGhlIGluZm8gKi8KKwkJaWYg KGNsYXVzZV9pc19tdl9jb21wYXRpYmxlKHJvb3QsIGNsYXVzZSwgdmFyUmVs aWQsIHJlbGlkLCAmYXR0bnVtLCBzamluZm8pKQorCQkJYXR0bnVtcyA9IGJt c19hZGRfbWVtYmVyKGF0dG51bXMsIGF0dG51bSk7CisJfQorCisJLyoKKwkg KiBJZiB0aGVyZSBhcmUgbm90IGF0IGxlYXN0IHR3byBhdHRyaWJ1dGVzIHJl ZmVyZW5jZWQgYnkgdGhlIGNsYXVzZShzKSwKKwkgKiB3ZSBjYW4gdGhyb3cg ZXZlcnl0aGluZyBvdXQgKGFzIHdlJ2xsIHJldmVydCB0byBzaW1wbGUgc3Rh dHMpLgorCSAqLworCWlmIChibXNfbnVtX21lbWJlcnMoYXR0bnVtcykgPD0g MSkKKwl7CisJCWlmIChhdHRudW1zICE9IE5VTEwpCisJCQlwZnJlZShhdHRu dW1zKTsKKwkJYXR0bnVtcyA9IE5VTEw7CisJCSpyZWxpZCA9IEludmFsaWRP aWQ7CisJfQorCisJcmV0dXJuIGF0dG51bXM7Cit9CisKKy8qCisgKiBEZXRl cm1pbmVzIHdoZXRoZXIgdGhlIGNsYXVzZSBpcyBjb21wYXRpYmxlIHdpdGgg bXVsdGl2YXJpYXRlIHN0YXRzLAorICogYW5kIGlmIGl0IGlzLCByZXR1cm5z IHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiAtIHZhcm5vIChpbmRleAor ICogaW50byBzaW1wbGVfcnRlX2FycmF5KSBhbmQgYSBiaXRtYXAgb2YgYXR0 cmlidXRlcy4gVGhpcyBpcyB0aGVuCisgKiB1c2VkIHRvIGZldGNoIHJlbGF0 ZWQgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MuCisgKgorICogQXQgdGhpcyBt b21lbnQgd2Ugb25seSBzdXBwb3J0IGJhc2ljIGNvbmRpdGlvbnMgb2YgdGhl IGZvcm0KKyAqCisgKiAgICAgdmFyaWFibGUgT1AgY29uc3RhbnQKKyAqCisg KiB3aGVyZSBPUCBpcyBvbmUgb2YgWz0sPCw8PSw+PSw+XSAod2hpY2ggaXMg aG93ZXZlciBkZXRlcm1pbmVkIGJ5CisgKiBsb29raW5nIGF0IHRoZSBhc3Nv Y2lhdGVkIGZ1bmN0aW9uIGZvciBlc3RpbWF0aW5nIHNlbGVjdGl2aXR5LCBq dXN0CisgKiBsaWtlIHdpdGggdGhlIHNpbmdsZS1kaW1lbnNpb25hbCBjYXNl KS4KKyAqCisgKiBUT0RPIFN1cHBvcnQgJ09SIGNsYXVzZXMnIC0gc2hvdWxk bid0IGJlIGFsbCB0aGF0IGRpZmZpY3VsdCB0bworICogICAgICBldmFsdWF0 ZSB0aGVtIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cy4KKyAqLworc3RhdGlj IGJvb2wKK2NsYXVzZV9pc19tdl9jb21wYXRpYmxlKFBsYW5uZXJJbmZvICpy b290LCBOb2RlICpjbGF1c2UsIE9pZCB2YXJSZWxpZCwKKwkJCQkJCUluZGV4 ICpyZWxpZCwgQXR0ck51bWJlciAqYXR0bnVtLCBTcGVjaWFsSm9pbkluZm8g KnNqaW5mbykKK3sKKworCWlmIChJc0EoY2xhdXNlLCBSZXN0cmljdEluZm8p KQorCXsKKwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8g KikgY2xhdXNlOworCisJCS8qIFBzZXVkb2NvbnN0YW50cyBhcmUgbm90IHJl YWxseSBpbnRlcmVzdGluZyBoZXJlLiAqLworCQlpZiAocmluZm8tPnBzZXVk b2NvbnN0YW50KQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qIG5vIHN1cHBv cnQgZm9yIE9SIGNsYXVzZXMgYXQgdGhpcyBwb2ludCAqLworCQlpZiAocmlu Zm8tPm9yY2xhdXNlKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qIGdldCB0 aGUgYWN0dWFsIGNsYXVzZSBmcm9tIHRoZSBSZXN0cmljdEluZm8gKGl0J3Mg bm90IGFuIE9SIGNsYXVzZSkgKi8KKwkJY2xhdXNlID0gKE5vZGUqKXJpbmZv LT5jbGF1c2U7CisKKwkJLyogb25seSBzaW1wbGUgb3BjbGF1c2VzIGFyZSBj b21wYXRpYmxlIHdpdGggbXVsdGl2YXJpYXRlIHN0YXRzICovCisJCWlmICgh IGlzX29wY2xhdXNlKGNsYXVzZSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJ Lyogd2UgZG9uJ3Qgc3VwcG9ydCBqb2luIGNvbmRpdGlvbnMgYXQgdGhpcyBt b21lbnQgKi8KKwkJaWYgKHRyZWF0X2FzX2pvaW5fY2xhdXNlKGNsYXVzZSwg cmluZm8sIHZhclJlbGlkLCBzamluZm8pKQorCQkJcmV0dXJuIGZhbHNlOwor CisJCS8qIGlzIGl0ICd2YXJpYWJsZSBvcCBjb25zdGFudCcgPyAqLworCQlp ZiAobGlzdF9sZW5ndGgoKChPcEV4cHIgKikgY2xhdXNlKS0+YXJncykgPT0g MikKKwkJeworCQkJT3BFeHByCSAgICpleHByID0gKE9wRXhwciAqKSBjbGF1 c2U7CisJCQlib29sCQl2YXJvbmxlZnQgPSB0cnVlOworCQkJYm9vbAkJb2s7 CisKKwkJCW9rID0gKGJtc19tZW1iZXJzaGlwKHJpbmZvLT5jbGF1c2VfcmVs aWRzKSA9PSBCTVNfU0lOR0xFVE9OKSAmJgorCQkJCShpc19wc2V1ZG9fY29u c3RhbnRfY2xhdXNlX3JlbGlkcyhsc2Vjb25kKGV4cHItPmFyZ3MpLAorCQkJ CQkJCQkJCQkJcmluZm8tPnJpZ2h0X3JlbGlkcykgfHwKKwkJCQkodmFyb25s ZWZ0ID0gZmFsc2UsCisJCQkJaXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZV9y ZWxpZHMobGluaXRpYWwoZXhwci0+YXJncyksCisJCQkJCQkJCQkJCQlyaW5m by0+bGVmdF9yZWxpZHMpKSk7CisKKwkJCWlmIChvaykKKwkJCXsKKwkJCQlW YXIgKiB2YXIgPSAodmFyb25sZWZ0KSA/IGxpbml0aWFsKGV4cHItPmFyZ3Mp IDogbHNlY29uZChleHByLT5hcmdzKTsKKworCQkJCS8qCisJCQkJICogU2lt cGxlIHZhcmlhYmxlcyBvbmx5IC0gb3RoZXJ3aXNlIHRoZSBwbGFubmVyX3J0 X2ZldGNoIHNlZW1zIHRvIGZhaWwKKwkJCQkgKiAocmV0dXJuIE5VTEwpLgor CQkJCSAqCisJCQkJICogVE9ETyBNYXliZSB1c2UgZXhhbWluZV92YXJpYWJs ZSgpIHdvdWxkIGZpeCB0aGF0PworCQkJCSAqLworCQkJCWlmICghIChJc0Eo dmFyLCBWYXIpICYmICh2YXJSZWxpZCA9PSAwIHx8IHZhclJlbGlkID09IHZh ci0+dmFybm8pKSkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJLyoKKwkJ CQkgKiBPbmx5IGNvbnNpZGVyIHRoaXMgdmFyaWFibGUgaWYgKHZhclJlbGlk ID09IDApIG9yIHdoZW4gdGhlIHZhcm5vCisJCQkJICogbWF0Y2hlcyB2YXJS ZWxpZCAoc2VlIGV4cGxhbmF0aW9uIGF0IGNsYXVzZV9zZWxlY3Rpdml0eSku CisJCQkJICoKKwkJCQkgKiBGSVhNRSBJIHN1c3BlY3QgdGhpcyBtYXkgbm90 IGJlIHJlYWxseSBuZWNlc3NhcnkuIFRoZSAodmFyUmVsaWQgPT0gMCkKKwkJ CQkgKiAgICAgICBwYXJ0IHNlZW1zIHRvIGJlIGVuZm9yY2VkIGJ5IHRyZWF0 X2FzX2pvaW5fY2xhdXNlKCkuCisJCQkJICovCisJCQkJaWYgKCEgKCh2YXJS ZWxpZCA9PSAwKSB8fCAodmFyUmVsaWQgPT0gdmFyLT52YXJubykpKQorCQkJ CQlyZXR1cm4gZmFsc2U7CisKKwkJCQkvKiBBbHNvIHNraXAgc3BlY2lhbCB2 YXJubyB2YWx1ZXMsIGFuZCBzeXN0ZW0gYXR0cmlidXRlcyAuLi4gKi8KKwkJ CQlpZiAoKElTX1NQRUNJQUxfVkFSTk8odmFyLT52YXJubykpIHx8ICghIEF0 dHJOdW1iZXJJc0ZvclVzZXJEZWZpbmVkQXR0cih2YXItPnZhcmF0dG5vKSkp CisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCSpyZWxpZCA9IHZhci0+dmFy bm87CisKKwkJCQkvKgorCQkJCSAqIElmIGl0J3Mgbm90IGEgIjwiIG9yICI+ IiBvciAiPSIgb3BlcmF0b3IsIGp1c3QgaWdub3JlIHRoZQorCQkJCSAqIGNs YXVzZS4gT3RoZXJ3aXNlIG5vdGUgdGhlIHJlbGlkIGFuZCBhdHRudW0gZm9y IHRoZSB2YXJpYWJsZS4KKwkJCQkgKiBUaGlzIHVzZXMgdGhlIGZ1bmN0aW9u IGZvciBlc3RpbWF0aW5nIHNlbGVjdGl2aXR5LCBvbnQgdGhlCisJCQkJICog b3BlcmF0b3IgZGlyZWN0bHkgKGEgYml0IGF3a3dhcmQsIGJ1dCB3ZWxsIC4u LikuCisJCQkJICovCisJCQkJc3dpdGNoIChnZXRfb3BycmVzdChleHByLT5v cG5vKSkKKwkJCQkJeworCQkJCQkJY2FzZSBGX0VRU0VMOgorCQkJCQkJCSph dHRudW0gPSB2YXItPnZhcmF0dG5vOworCQkJCQkJCXJldHVybiB0cnVlOwor CQkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7CisKK30K KworLyoKKyAqIFBlcmZvcm1zIHJlZHVjdGlvbiBvZiBjbGF1c2VzIHVzaW5n IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLCBpLmUuCisgKiByZW1vdmVzIGNs YXVzZXMgdGhhdCBhcmUgY29uc2lkZXJlZCByZWR1bmRhbnQuIEl0IHNpbXBs eSB3YWxrcworICogdGhyb3VnaCBkZXBlbmRlbmNpZXMsIGFuZCBjaGVja3Mg d2hldGhlciB0aGUgZGVwZW5kZW5jeSAnbWF0Y2hlcycKKyAqIHRoZSBjbGF1 c2VzLCBpLmUuIGlmIHRoZXJlJ3MgYSBjbGF1c2UgbWF0Y2hpbmcgdGhlIGNv bmRpdGlvbi4gSWYgeWVzLAorICogYWxsIGNsYXVzZXMgbWF0Y2hpbmcgdGhl IGltcGxpZWQgcGFydCBvZiB0aGUgZGVwZW5kZW5jeSBhcmUgcmVtb3ZlZAor ICogZnJvbSB0aGUgbGlzdC4KKyAqCisgKiBUaGlzIHNpbXBseSBsb29rcyBh dCBhdHRudW1zIHJlZmVyZW5jZXMgYnkgdGhlIGNsYXVzZXMsIG5vdCBhdCB0 aGUKKyAqIHR5cGUgb2YgdGhlIG9wZXJhdG9yIChlcXVhbGl0eSwgaW5lcXVh bGl0eSwgLi4uKS4gVGhpcyBtYXkgbm90IGJlIHRoZQorICogcmlnaHQgd2F5 IHRvIGRvIC0gaXQgY2VydGFpbmx5IHdvcmtzIGJlc3QgZm9yIGVxdWFsaXRp ZXMsIHdoaWNoIGlzCisgKiBuYXR1cmFsbHkgY29uc2lzdGVudCB3aXRoIGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzIChpbXBsaWNhdGlvbnMpLgorICogSXQn cyBub3QgY2xlYXIgdGhhdCBvdGhlciBvcGVyYXRvcnMgYXJlIGhhbmRsZWQg c2Vuc2libHkgLSBmb3IKKyAqIGV4YW1wbGUgZm9yIGluZXF1YWxpdGllcywg bGlrZQorICoKKyAqICAgICBXSEVSRSAoQSA+PSAxMCkgQU5EIChCIDw9IDIw KQorICoKKyAqIGFuZCBhIHRyaXZpYWwgY2FzZSB3aGVyZSBbQSA9PSBCXSwg cmVzdWx0aW5nIGluIHN5bW1ldHJpYyBwYWlyIG9mCisgKiBydWxlcyBbQSA9 PiBCXSwgW0IgPT4gQV0sIGl0J3MgcmF0aGVyIGNsZWFyIHdlIGNhbid0IHJl bW92ZSBlaXRoZXIgb2YKKyAqIHRob3NlIGNsYXVzZXMuCisgKgorICogVGhh dCBvbmx5IGhpZ2hsaWdodHMgdGhhdCBmdW5jdGlvbmFsIGRlcGVuZGVuY2ll cyBhcmUgbW9zdCBzdWl0YWJsZQorICogZm9yIGxhYmVsLWxpa2UgZGF0YSwg d2hlcmUgdXNpbmcgbm9uLWVxdWFsaXR5IG9wZXJhdG9ycyBpcyB2ZXJ5IHJh cmUuCisgKiBVc2luZyB0aGUgY29tbW9uIGNpdHkvemlwY29kZSBleGFtcGxl LCBjbGF1c2VzIGxpa2UKKyAqCisgKiAgICAgKHppcGNvZGUgPD0gMTIzNDUp CisgKgorICogb3IKKyAqCisgKiAgICAgKGNpdHluYW1lID49ICdXYXNoaW5n dG9uJykKKyAqCisgKiBhcmUgcmFyZS4gU28gcmVzdHJpY3RpbmcgdGhlIHJl ZHVjdGlvbiB0byBlcXVhbGl0eSBzaG91bGQgbm90IGhhcm0KKyAqIHRoZSB1 c2VmdWxuZXNzIC8gYXBwbGljYWJpbGl0eS4KKyAqCisgKiBUaGUgb3RoZXIg YXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgYXNzdW1lcyAnY29tcGF0aWJsZScg Y2xhdXNlcy4gRm9yCisgKiBleGFtcGxlIGJ5IHVzaW5nIG1pc21hdGNoaW5n IHppcCBjb2RlIGFuZCBjaXR5IG5hbWUsIHRoaXMgaXMgdW5hYmxlCisgKiB0 byBpZGVudGlmeSB0aGUgZGlzY3JlcGFuY3kgYW5kIGVsaW1pbmF0ZXMgb25l IG9mIHRoZSBjbGF1c2VzLiBUaGUKKyAqIHVzdWFsIGFwcHJvYWNoIChtdWx0 aXBseWluZyBib3RoIHNlbGVjdGl2aXRpZXMpIHRodXMgcHJvZHVjZXMgYSBt b3JlCisgKiBhY2N1cmF0ZSBlc3RpbWF0ZSwgYWx0aG91Z2ggbW9zdGx5IGJ5 IGx1Y2sgLSB0aGUgbXVsdGlwbGljYXRpb24KKyAqIGNvbWVzIGZyb20gYXNz dW1wdGlvbiBvZiBzdGF0aXN0aWNhbCBpbmRlcGVuZGVuY2Ugb2YgdGhlIHR3 bworICogY29uZGl0aW9ucyAod2hpY2ggaXMgbm90IG5vdCB2YWxpZCBpbiB0 aGlzIGNhc2UpLCBidXQgbW92ZXMgdGhlCisgKiBlc3RpbWF0ZSBpbiB0aGUg cmlnaHQgZGlyZWN0aW9uICh0b3dhcmRzIDAlKS4KKyAqCisgKiBUaGlzIG1p Z2h0IGJlIHNvbWV3aGF0IGltcHJvdmVkIGJ5IGNyb3NzLWNoZWNraW5nIHRo ZSBzZWxlY3Rpdml0aWVzCisgKiBhZ2FpbnN0IE1DViBhbmQvb3IgaGlzdG9n cmFtLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBiZSBj YXJlZnVsIGFib3V0IGN5Y2xpYyBydWxlcywgaS5lLiBydWxlcworICogbGlr ZSBbQSA9PiBCXSBhbmQgW0IgPT4gQV0gYXQgdGhlIHNhbWUgdGltZS4gVGhp cyBtdXN0IG5vdCByZWR1Y2UKKyAqIGNsYXVzZXMgb24gYm90aCBhdHRyaWJ1 dGVzIGF0IHRoZSBzYW1lIHRpbWUuCisgKgorICogVGVjaG5pY2FsbHkgd2Ug bWlnaHQgY29uc2lkZXIgc2VsZWN0aXZpdGllcyBoZXJlIHRvbywgc29tZWhv dy4gRS5nLgorICogd2hlbiAoQSA9PiBCKSBhbmQgKEIgPT4gQSksIHdlIG1p Z2h0IHVzZSB0aGUgY2xhdXNlcyB3aXRoIG1pbmltdW0KKyAqIHNlbGVjdGl2 aXR5LgorICoKKyAqIFRPRE8gQ29uc2lkZXIgcmVzdHJpY3RpbmcgdGhlIHJl ZHVjdGlvbiB0byBlcXVhbGl0eSBjbGF1c2VzLiBPciBtYXliZQorICogICAg ICB1c2UgZXF1YWxpdHkgY2xhc3NlcyBzb21laG93PworICoKKyAqIFRPRE8g TWVyZ2UgdGhpcyBkb2NzIHRvIGRlcGVuZGVuY2llcy5jLCBhcyBpdCdzIHNh eWluZyBtb3N0bHkgdGhlCisgKiAgICAgIHNhbWUgdGhpbmdzIGFzIHRoZSBj b21tZW50cyB0aGVyZS4KKyAqCisgKiBUT0RPIEN1cnJlbnRseSB0aGlzIGlz IGFwcGxpZWQgb25seSB0byB0aGUgdG9wLWxldmVsIGNsYXVzZXMsIGJ1dAor ICogICAgICBtYXliZSB3ZSBjb3VsZCBhcHBseSBpdCB0byBsaXN0cyBhdCBz dWJ0cmVlcyB0b28sIGUuZy4gdG8gdGhlCisgKiAgICAgIHR3byBBTkQtY2xh dXNlcyBpbgorICoKKyAqICAgICAgICAgICh4PTEgQU5EIHk9MikgT1IgKHo9 MyBBTkQgcT0xMCkKKyAqCisgKi8KK3N0YXRpYyBMaXN0ICoKK2NsYXVzZWxp c3RfYXBwbHlfZGVwZW5kZW5jaWVzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0 ICpjbGF1c2VzLAorCQkJCQkJCSAgT2lkIHZhclJlbGlkLCBMaXN0ICpzdGF0 cywKKwkJCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQoreworCUxp c3QJICAgKnJlZHVjZWRfY2xhdXNlcyA9IE5JTDsKKwlJbmRleAkJcmVsaWQ7 CisKKwkvKgorCSAqIG1hdHJpeCBvZiAobmF0dHMgeCBuYXR0cyksIDEgbWVh bnMgeD0+eQorCSAqCisJICogVGhpcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzIC0g Zmlyc3QsIGl0IG1lcmdlcyBkZXBlbmRlbmNpZXMgZnJvbSBhbGwKKwkgKiB0 aGUgc3RhdGlzdGljcywgc2Vjb25kIGl0IG1ha2VzIGdlbmVyYXRpbmcgYWxs IHRoZSB0cmFuc2l0aXZlCisJICogZGVwZW5kZW5jaWVzIGVhc2llci4KKwkg KgorCSAqIFdlIG5lZWQgdG8gYnVpbGQgdGhpcyBvbmx5IGZvciBhdHRyaWJ1 dGVzIGZyb20gdGhlIGRlcGVuZGVuY2llcywKKwkgKiBub3QgZm9yIGFsbCBh dHRyaWJ1dGVzIGluIHRoZSB0YWJsZS4KKwkgKgorCSAqIFdlIGNhbid0IGRv IHRoYXQgb25seSBmb3IgYXR0cmlidXRlcyBmcm9tIHRoZSBjbGF1c2VzLCBi ZWNhdXNlIHdlCisJICogd2FudCB0byBidWlsZCB0cmFuc2l0aXZlIGRlcGVu ZGVuY2llcyAoaW5jbHVkaW5nIHRob3NlIGdvaW5nCisJICogdGhyb3VnaCBh dHRyaWJ1dGVzIG5vdCBsaXN0ZWQgaW4gdGhlIHN0YXRzKS4KKwkgKgorCSAq IFRoaXMgb25seSB3b3JrcyBmb3IgQT0+QiBkZXBlbmRlbmNpZXMsIG5vdCBz dXJlIGhvdyB0byBkbyB0aGF0CisJICogZm9yIGNvbXBsZXggZGVwZW5kZW5j aWVzLgorCSAqLworCWJvb2wgICAgICAgKmRlcHNfbWF0cml4OworCWludAkJ CWRlcHNfbmF0dHM7CS8qIHNpemUgb2YgdGhlIG1hdHJpYyAqLworCisJLyog bWFwcGluZyBhdHRudW0gPD0+IG1hdHJpeCBpbmRleCAqLworCWludAkJICAg KmRlcHNfaWR4X3RvX2F0dG51bTsKKwlpbnQJCSAgICpkZXBzX2F0dG51bV90 b19pZHg7CisKKwkvKiBhdHRudW1zIGluIGRlcGVuZGVuY2llcyBhbmQgY2xh dXNlcyAoYW5kIGludGVyc2VjdGlvbikgKi8KKwlMaXN0CSAgICpkZXBzX2Ns YXVzZXMgICA9IE5JTDsKKwlCaXRtYXBzZXQgICpkZXBzX2F0dG51bXMgICA9 IE5VTEw7CisJQml0bWFwc2V0ICAqY2xhdXNlX2F0dG51bXMgPSBOVUxMOwor CUJpdG1hcHNldCAgKmludGVyc2VjdF9hdHRudW1zID0gTlVMTDsKKworCS8q CisJICogSXMgdGhlcmUgYXQgbGVhc3Qgb25lIHN0YXRpc3RpY3Mgd2l0aCBm dW5jdGlvbmFsIGRlcGVuZGVuY2llcz8KKwkgKiBJZiBub3QsIHJldHVybiB0 aGUgb3JpZ2luYWwgY2xhdXNlcyByaWdodCBhd2F5LgorCSAqCisJICogWFhY IElzbid0IHRoaXMgcG9pbnRsZXNzLCB0aGFua3MgdG8gZXhhY3RseSB0aGUg c2FtZSBjaGVjayBpbgorCSAqICAgICBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5 KCk/IENhbiB3ZSB0cmlnZ2VyIHRoZSBjb25kaXRpb24gaGVyZT8KKwkgKi8K KwlpZiAoISBoYXNfc3RhdHMoc3RhdHMsIE1WX0NMQVVTRV9UWVBFX0ZERVAp KQorCQlyZXR1cm4gY2xhdXNlczsKKworCS8qCisJICogQnVpbGQgdGhlIGRl cGVuZGVuY3kgbWF0cml4LCBpLmUuIGF0dHJpYnV0ZSBhZGphY2VuY3kgbWF0 cml4LAorCSAqIHdoZXJlIDEgbWVhbnMgKGE9PmIpLiBPbmNlIHdlIGhhdmUg dGhlIGFkamFjZW5jeSBtYXRyaXgsIHdlJ2xsCisJICogbXVsdGlwbHkgaXQg YnkgaXRzZWxmLCB0byBnZXQgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMuCisJ ICoKKwkgKiBOb3RlOiBUaGlzIGlzIHByZXR0eSBtdWNoIHRyYW5zaXRpdmUg Y2xvc3VyZSBmcm9tIGdyYXBoIHRoZW9yeS4KKwkgKgorCSAqIEZpcnN0LCBs ZXQncyBzZWUgd2hhdCBhdHRyaWJ1dGVzIGFyZSBjb3ZlcmVkIGJ5IGZ1bmN0 aW9uYWwKKwkgKiBkZXBlbmRlbmNpZXMgKHNpZGVzIG9mIHRoZSBhZGphY2Vu Y3kgbWF0cml4KSwgYW5kIGFsc28gYSBtYXhpbXVtCisJICogYXR0cmlidXRl IChzaXplIG9mIG1hcHBpbmcgdG8gc2ltcGxlIGludGVnZXIgaW5kZXhlcyk7 CisJICovCisJZGVwc19hdHRudW1zID0gZmRlcHNfY29sbGVjdF9hdHRudW1z KHN0YXRzKTsKKworCS8qCisJICogV2FsayB0aHJvdWdoIHRoZSBjbGF1c2Vz IC0gY2xhdXNlcyB0aGF0IGFyZSAob25lIG9mKQorCSAqCisJICogKGEpIG5v dCBtdi1jb21wYXRpYmxlCisJICogKGIpIGFyZSB1c2luZyBtb3JlIHRoYW4g YSBzaW5nbGUgYXR0bnVtCisJICogKGMpIHVzaW5nIGF0dG51bSBub3QgY292 ZXJlZCBieSBmdW5jdGlvbmFsIGRlcGVuY2VuY2llcworCSAqCisJICogbWF5 IGJlIGNvcGllZCBkaXJlY3RseSB0byB0aGUgcmVzdWx0LiBUaGUgaW50ZXJl c3RpbmcgY2xhdXNlcyBhcmUKKwkgKiBrZXB0IGluICdkZXBzX2NsYXVzZXMn IGFuZCB3aWxsIGJlIHByb2Nlc3NlZCBsYXRlci4KKwkgKi8KKwljbGF1c2Vf YXR0bnVtcyA9IGZkZXBzX2ZpbHRlcl9jbGF1c2VzKHJvb3QsIGNsYXVzZXMs IGRlcHNfYXR0bnVtcywKKwkJCQkJCQkJCQkgICZyZWR1Y2VkX2NsYXVzZXMs ICZkZXBzX2NsYXVzZXMsCisJCQkJCQkJCQkJICB2YXJSZWxpZCwgJnJlbGlk LCBzamluZm8pOworCisJLyoKKwkgKiB3ZSBuZWVkIGF0IGxlYXN0IHR3byBj bGF1c2VzIHJlZmVyZW5jaW5nIHR3byBkaWZmZXJlbnQgYXR0cmlidXRlcwor CSAqIHJlZmVyZW5jaW5nIHRvIGRvIHRoZSByZWR1Y3Rpb24KKwkgKi8KKwlp ZiAoKGxpc3RfbGVuZ3RoKGRlcHNfY2xhdXNlcykgPCAyKSB8fCAoYm1zX251 bV9tZW1iZXJzKGNsYXVzZV9hdHRudW1zKSA8IDIpKQorCXsKKwkJYm1zX2Zy ZWUoY2xhdXNlX2F0dG51bXMpOworCQlsaXN0X2ZyZWUocmVkdWNlZF9jbGF1 c2VzKTsKKwkJbGlzdF9mcmVlKGRlcHNfY2xhdXNlcyk7CisKKwkJcmV0dXJu IGNsYXVzZXM7CisJfQorCisKKwkvKgorCSAqIFdlIG5lZWQgYXQgbGVhc3Qg dHdvIG1hdGNoaW5nIGF0dHJpYnV0ZXMgaW4gdGhlIGNsYXVzZXMgYW5kCisJ ICogZGVwZW5kZW5jaWVzLCBvdGhlcndpc2Ugd2UgY2FuJ3QgcmVhbGx5IHJl ZHVjZSBhbnl0aGluZy4KKwkgKi8KKwlpbnRlcnNlY3RfYXR0bnVtcyA9IGJt c19pbnRlcnNlY3QoY2xhdXNlX2F0dG51bXMsIGRlcHNfYXR0bnVtcyk7CisJ aWYgKGJtc19udW1fbWVtYmVycyhpbnRlcnNlY3RfYXR0bnVtcykgPCAyKQor CXsKKwkJYm1zX2ZyZWUoY2xhdXNlX2F0dG51bXMpOworCQlibXNfZnJlZShk ZXBzX2F0dG51bXMpOworCQlibXNfZnJlZShpbnRlcnNlY3RfYXR0bnVtcyk7 CisKKwkJbGlzdF9mcmVlKGRlcHNfY2xhdXNlcyk7CisJCWxpc3RfZnJlZShy ZWR1Y2VkX2NsYXVzZXMpOworCisJCXJldHVybiBjbGF1c2VzOworCX0KKwor CS8qCisJICogQnVpbGQgbWFwcGluZyBiZXR3ZWVuIG1hdHJpeCBpbmRleGVz IGFuZCBhdHRudW1zLCBhbmQgdGhlbiB0aGUKKwkgKiBhZGphY2VuY3kgbWF0 cml4IGl0c2VsZi4KKwkgKi8KKwlkZXBzX2lkeF90b19hdHRudW0gPSBtYWtl X2lkeF90b19hdHRudW1fbWFwcGluZyhkZXBzX2F0dG51bXMpOworCWRlcHNf YXR0bnVtX3RvX2lkeCA9IG1ha2VfYXR0bnVtX3RvX2lkeF9tYXBwaW5nKGRl cHNfYXR0bnVtcyk7CisKKwkvKiBidWlsZCB0aGUgYWRqYWNlbmN5IG1hdHJp eCAqLworCWRlcHNfbWF0cml4ID0gYnVpbGRfYWRqYWNlbmN5X21hdHJpeChz dGF0cywgZGVwc19hdHRudW1zLAorCQkJCQkJCQkJCSBkZXBzX2lkeF90b19h dHRudW0sCisJCQkJCQkJCQkJIGRlcHNfYXR0bnVtX3RvX2lkeCk7CisKKwlk ZXBzX25hdHRzID0gYm1zX251bV9tZW1iZXJzKGRlcHNfYXR0bnVtcyk7CisK KwkvKgorCSAqIE11bHRpcGx5IHRoZSBtYXRyaXggTi10aW1lcyAoTiA9IHNp emUgb2YgdGhlIG1hdHJpeCksIHNvIHRoYXQgd2UKKwkgKiBnZXQgYWxsIHRo ZSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcy4gVGhhdCBtYWtlcyB0aGUgbmV4 dCBzdGVwCisJICogbXVjaCBlYXNpZXIgYW5kIGZhc3Rlci4KKwkgKgorCSAq IFRoaXMgaXMgZXNzZW50aWFsbHkgYW4gYWRqYWNlbmN5IG1hdHJpeCBmcm9t IGdyYXBoIHRoZW9yeSwgYW5kCisJICogYnkgbXVsdGlwbHlpbmcgaXQgd2Ug Z2V0IHRyYW5zaXRpdmUgZWRnZXMuIFdlIGRvbid0IHJlYWxseSBjYXJlCisJ ICogYWJvdXQgdGhlIGV4YWN0IG51bWJlciAobnVtYmVyIG9mIHBhdGhzIGJl dHdlZW4gdmVydGljZXMpIHRob3VnaCwKKwkgKiBzbyB3ZSBjYW4gZG8gdGhl IG11bHRpcGxpY2F0aW9uIGluLXBsYWNlICh3ZSBkb24ndCBjYXJlIHdoZXRo ZXIKKwkgKiB3ZSBmb3VuZCB0aGUgZGVwZW5kZW5jeSBpbiB0aGlzIHJvdW5k IG9yIGluIHRoZSBwcmV2aW91cyBvbmUpLgorCSAqCisJICogVHJhY2sgaG93 IG1hbnkgbmV3IGRlcGVuZGVuY2llcyB3ZXJlIGFkZGVkLCBhbmQgc3RvcCB3 aGVuIDAsIGJ1dAorCSAqIHdlIGNhbid0IG11bHRpcGx5IG1vcmUgdGhhbiBO LXRpbWVzIChsb25nZXN0IHBhdGggaW4gdGhlIGdyYXBoKS4KKwkgKi8KKwlt dWx0aXBseV9hZGphY2VuY3lfbWF0cml4KGRlcHNfbWF0cml4LCBkZXBzX25h dHRzKTsKKworCS8qCisJICogV2FsayB0aHJvdWdoIHRoZSBjbGF1c2VzLCBh bmQgc2VlIHdoaWNoIG90aGVyIGNsYXVzZXMgd2UgbWF5CisJICogcmVkdWNl LiBUaGUgbWF0cml4IGNvbnRhaW5zIGFsbCB0cmFuc2l0aXZlIGRlcGVuZGVu Y2llcywgd2hpY2gKKwkgKiBtYWtlcyB0aGlzIHZlcnkgZmFzdC4KKwkgKgor CSAqIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gcmVkdWNlIHRoZSBj bGF1c2UgdXNpbmcgaXRzZWxmLCBvcgorCSAqIHJlZHVjaW5nIGFsbCBjbGF1 c2VzIGZvcm1pbmcgYSBjeWNsZSAoc28gd2UgaGF2ZSB0byBza2lwIGFscmVh ZHkKKwkgKiBlbGltaW5hdGVkIGNsYXVzZXMpLgorCSAqCisJICogSSdtIG5v dCBzdXJlIHdoZXRoZXIgdGhpcyBndWFyYW50ZWVzIGZpbmRpbmcgdGhlIGJl c3Qgc29sdXRpb24sCisJICogaS5lLiByZWR1Y2luZyB0aGUgbW9zdCBjbGF1 c2VzLCBidXQgaXQgcHJvYmFibHkgZG9lcyAodGhhbmtzIHRvCisJICogaGF2 aW5nIGFsbCB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMpLgorCSAqLwor CWRlcHNfY2xhdXNlcyA9IGZkZXBzX3JlZHVjZV9jbGF1c2VzKGRlcHNfY2xh dXNlcywKKwkJCQkJCQkJCQlkZXBzX2F0dG51bXMsIGRlcHNfbWF0cml4LAor CQkJCQkJCQkJCWRlcHNfaWR4X3RvX2F0dG51bSwKKwkJCQkJCQkJCQlkZXBz X2F0dG51bV90b19pZHgsIHJlbGlkKTsKKworCS8qIGpvaW4gdGhlIHR3byBs aXN0cyBvZiBjbGF1c2VzICovCisJcmVkdWNlZF9jbGF1c2VzID0gbGlzdF91 bmlvbihyZWR1Y2VkX2NsYXVzZXMsIGRlcHNfY2xhdXNlcyk7CisKKwlwZnJl ZShkZXBzX21hdHJpeCk7CisJcGZyZWUoZGVwc19pZHhfdG9fYXR0bnVtKTsK KwlwZnJlZShkZXBzX2F0dG51bV90b19pZHgpOworCisJYm1zX2ZyZWUoZGVw c19hdHRudW1zKTsKKwlibXNfZnJlZShjbGF1c2VfYXR0bnVtcyk7CisJYm1z X2ZyZWUoaW50ZXJzZWN0X2F0dG51bXMpOworCisJcmV0dXJuIHJlZHVjZWRf Y2xhdXNlczsKK30KKworc3RhdGljIGJvb2wKK2hhc19zdGF0cyhMaXN0ICpz dGF0cywgaW50IHR5cGUpCit7CisJTGlzdENlbGwgICAqczsKKworCWZvcmVh Y2ggKHMsIHN0YXRzKQorCXsKKwkJTVZTdGF0aXN0aWNJbmZvCSpzdGF0ID0g KE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChzKTsKKworCQlpZiAoKHR5cGUg JiBNVl9DTEFVU0VfVFlQRV9GREVQKSAmJiBzdGF0LT5kZXBzX2J1aWx0KQor CQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisv KgorICogRGV0ZXJtaW5nIHJlbGlkIChlaXRoZXIgZnJvbSB2YXJSZWxpZCBv ciBmcm9tIGNsYXVzZXMpIGFuZCB0aGVuCisgKiBsb29rdXAgc3RhdHMgdXNp bmcgdGhlIHJlbGlkLgorICovCitzdGF0aWMgTGlzdCAqCitmaW5kX3N0YXRz KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBPaWQgdmFyUmVs aWQsIEluZGV4ICpyZWxpZCkKK3sKKwkvKiB1bmtub3duIHJlbGlkIGJ5IGRl ZmF1bHQgKi8KKwkqcmVsaWQgPSBJbnZhbGlkT2lkOworCisJLyoKKwkgKiBG aXJzdCB3ZSBuZWVkIHRvIGZpbmQgdGhlIHJlbGlkIChpbmRleCBpbmZvIHNp bXBsZV9yZWxfYXJyYXkpLgorCSAqIElmIHZhclJlbGlkIGlzIG5vdCAwLCB3 ZSBhbHJlYWR5IGhhdmUgaXQsIG90aGVyd2lzZSB3ZSBoYXZlIHRvCisJICog bG9vayBpdCB1cCBmcm9tIHRoZSBjbGF1c2VzLgorCSAqLworCWlmICh2YXJS ZWxpZCAhPSAwKQorCQkqcmVsaWQgPSB2YXJSZWxpZDsKKwllbHNlCisJewor CQlSZWxpZHMJcmVsaWRzID0gcHVsbF92YXJub3MoKE5vZGUqKWNsYXVzZXMp OworCisJCS8qCisJCSAqIFdlIG9ubHkgZXhwZWN0IDAgb3IgMSBtZW1iZXJz IGluIHRoZSBiaXRtYXBzZXQuIElmIHRoZXJlIGFyZQorCQkgKiBubyB2YXJz LCB3ZSdsbCBnZXQgZW1wdHkgYml0bWFwc2V0LCBvdGhlcndpc2Ugd2UnbGwg Z2V0IHRoZQorCQkgKiByZWxpZCBhcyB0aGUgc2luZ2xlIG1lbWJlci4KKwkJ ICoKKwkJICogRklYTUUgRm9yIHNvbWUgcmVhc29uIHdlIGNhbiBnZXQgMiBy ZWxpZHMgaGVyZSAoZS5nLiBcZCBpbgorCQkgKiAgICAgICBwc3FsIGRvZXMg dGhhdCkuCisJCSAqLworCQlpZiAoYm1zX251bV9tZW1iZXJzKHJlbGlkcykg PT0gMSkKKwkJCSpyZWxpZCA9IGJtc19zaW5nbGV0b25fbWVtYmVyKHJlbGlk cyk7CisKKwkJYm1zX2ZyZWUocmVsaWRzKTsKKwl9CisKKwkvKgorCSAqIGlm IHdlIGZvdW5kIHRoZSByZWxpZCwgd2UgY2FuIGdldCB0aGUgc3RhdHMgZnJv bSBzaW1wbGVfcmVsX2FycmF5CisJICoKKwkgKiBUaGlzIG9ubHkgZ2V0cyBz dGF0cyB0aGF0IGFyZSBhbHJlYWR5IGJ1aWx0LCBiZWNhdXNlIHRoYXQncyBo b3cKKwkgKiB3ZSBsb2FkIGl0IGludG8gUmVsT3B0SW5mbyAoc2VlIGdldF9y ZWxhdGlvbl9pbmZvKSwgYnV0IHdlIGRvbid0CisJICogZGV0b2FzdCB0aGUg d2hvbGUgc3RhdHMgeWV0LiBUaGF0J2xsIGJlIGRvbmUgbGF0ZXIsIGFmdGVy IHdlCisJICogZGVjaWRlIHdoaWNoIHN0YXRzIHRvIHVzZS4KKwkgKi8KKwlp ZiAoKnJlbGlkICE9IEludmFsaWRPaWQpCisJCXJldHVybiByb290LT5zaW1w bGVfcmVsX2FycmF5WypyZWxpZF0tPm12c3RhdGxpc3Q7CisKKwlyZXR1cm4g TklMOworfQorCitzdGF0aWMgQml0bWFwc2V0KgorZmRlcHNfY29sbGVjdF9h dHRudW1zKExpc3QgKnN0YXRzKQoreworCUxpc3RDZWxsICpsYzsKKwlCaXRt YXBzZXQgKmF0dG51bXMgPSBOVUxMOworCisJZm9yZWFjaCAobGMsIHN0YXRz KQorCXsKKwkJaW50IGo7CisJCU1WU3RhdGlzdGljSW5mbyAqaW5mbyA9IChN VlN0YXRpc3RpY0luZm8gKilsZmlyc3QobGMpOworCisJCWludDJ2ZWN0b3Ig KnN0YWtleXMgPSBpbmZvLT5zdGFrZXlzOworCisJCS8qIHNraXAgc3RhdHMg d2l0aG91dCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBidWlsdCAqLworCQlp ZiAoISBpbmZvLT5kZXBzX2J1aWx0KQorCQkJY29udGludWU7CisKKwkJZm9y IChqID0gMDsgaiA8IHN0YWtleXMtPmRpbTE7IGorKykKKwkJCWF0dG51bXMg PSBibXNfYWRkX21lbWJlcihhdHRudW1zLCBzdGFrZXlzLT52YWx1ZXNbal0p OworCX0KKworCXJldHVybiBhdHRudW1zOworfQorCisKK3N0YXRpYyBpbnQq CittYWtlX2lkeF90b19hdHRudW1fbWFwcGluZyhCaXRtYXBzZXQgKmF0dG51 bXMpCit7CisJaW50CQlhdHRpZHggPSAwOworCWludAkJYXR0bnVtID0gLTE7 CisKKwlpbnQJICAgKm1hcHBpbmcgPSAoaW50KilwYWxsb2MwKGJtc19udW1f bWVtYmVycyhhdHRudW1zKSAqIHNpemVvZihpbnQpKTsKKworCXdoaWxlICgo YXR0bnVtID0gYm1zX25leHRfbWVtYmVyKGF0dG51bXMsIGF0dG51bSkpID49 IDApCisJCW1hcHBpbmdbYXR0aWR4KytdID0gYXR0bnVtOworCisJQXNzZXJ0 KGF0dGlkeCA9PSBibXNfbnVtX21lbWJlcnMoYXR0bnVtcykpOworCisJcmV0 dXJuIG1hcHBpbmc7Cit9CisKK3N0YXRpYyBpbnQqCittYWtlX2F0dG51bV90 b19pZHhfbWFwcGluZyhCaXRtYXBzZXQgKmF0dG51bXMpCit7CisJaW50CQlh dHRpZHggPSAwOworCWludAkJYXR0bnVtID0gLTE7CisJaW50CQltYXhhdHRu dW0gPSAtMTsKKwlpbnQJICAgKm1hcHBpbmc7CisKKwl3aGlsZSAoKGF0dG51 bSA9IGJtc19uZXh0X21lbWJlcihhdHRudW1zLCBhdHRudW0pKSA+PSAwKQor CQltYXhhdHRudW0gPSBhdHRudW07CisKKwltYXBwaW5nID0gKGludCopcGFs bG9jMCgobWF4YXR0bnVtKzEpICogc2l6ZW9mKGludCkpOworCisJYXR0bnVt ID0gLTE7CisJd2hpbGUgKChhdHRudW0gPSBibXNfbmV4dF9tZW1iZXIoYXR0 bnVtcywgYXR0bnVtKSkgPj0gMCkKKwkJbWFwcGluZ1thdHRudW1dID0gYXR0 aWR4Kys7CisKKwlBc3NlcnQoYXR0aWR4ID09IGJtc19udW1fbWVtYmVycyhh dHRudW1zKSk7CisKKwlyZXR1cm4gbWFwcGluZzsKK30KKworc3RhdGljIGJv b2wqCitidWlsZF9hZGphY2VuY3lfbWF0cml4KExpc3QgKnN0YXRzLCBCaXRt YXBzZXQgKmF0dG51bXMsCisJCQkJCSAgIGludCAqaWR4X3RvX2F0dG51bSwg aW50ICphdHRudW1fdG9faWR4KQoreworCUxpc3RDZWxsICpsYzsKKwlpbnQJ CW5hdHRzICA9IGJtc19udW1fbWVtYmVycyhhdHRudW1zKTsKKwlib29sICAg Km1hdHJpeCA9IChib29sKilwYWxsb2MwKG5hdHRzICogbmF0dHMgKiBzaXpl b2YoYm9vbCkpOworCisJZm9yZWFjaCAobGMsIHN0YXRzKQorCXsKKwkJaW50 IGo7CisJCU1WU3RhdGlzdGljSW5mbyAqc3RhdCA9IChNVlN0YXRpc3RpY0lu Zm8gKilsZmlyc3QobGMpOworCQlNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNp ZXMgPSBOVUxMOworCisJCS8qIHNraXAgc3RhdHMgd2l0aG91dCBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcyBidWlsdCAqLworCQlpZiAoISBzdGF0LT5kZXBz X2J1aWx0KQorCQkJY29udGludWU7CisKKwkJLyogZmV0Y2ggYW5kIGRlc2Vy aWFsaXplIGRlcGVuZGVuY2llcyAqLworCQlkZXBlbmRlbmNpZXMgPSBsb2Fk X212X2RlcGVuZGVuY2llcyhzdGF0LT5tdm9pZCk7CisJCWlmIChkZXBlbmRl bmNpZXMgPT0gTlVMTCkKKwkJeworCQkJZWxvZyhXQVJOSU5HLCAiZmFpbGVk IHRvIGRlc2VyaWFsaXplIGZ1bmMgZGVwcyAlZCIsIHN0YXQtPm12b2lkKTsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogc2V0IG1hdHJpeFthLGJdIHRv ICd0cnVlJyBpZiAnYT0+YicgKi8KKwkJZm9yIChqID0gMDsgaiA8IGRlcGVu ZGVuY2llcy0+bmRlcHM7IGorKykKKwkJeworCQkJaW50IGFpZHggPSBhdHRu dW1fdG9faWR4W2RlcGVuZGVuY2llcy0+ZGVwc1tqXS0+YV07CisJCQlpbnQg YmlkeCA9IGF0dG51bV90b19pZHhbZGVwZW5kZW5jaWVzLT5kZXBzW2pdLT5i XTsKKworCQkJLyogYT0+IGIgKi8KKwkJCW1hdHJpeFthaWR4ICogbmF0dHMg KyBiaWR4XSA9IHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gbWF0cml4Owor fQorCitzdGF0aWMgdm9pZAorbXVsdGlwbHlfYWRqYWNlbmN5X21hdHJpeChi b29sICptYXRyaXgsIGludCBuYXR0cykKK3sKKwlpbnQgaTsKKworCWZvciAo aSA9IDA7IGkgPCBuYXR0czsgaSsrKQorCXsKKwkJaW50IGssIGwsIG07CisJ CWludCBuY2hhbmdlcyA9IDA7CisKKwkJLyogayA9PiBsICovCisJCWZvciAo ayA9IDA7IGsgPCBuYXR0czsgaysrKQorCQl7CisJCQlmb3IgKGwgPSAwOyBs IDwgbmF0dHM7IGwrKykKKwkJCXsKKwkJCQkvKiB3ZSBhbHJlYWR5IGhhdmUg dGhpcyBkZXBlbmRlbmN5ICovCisJCQkJaWYgKG1hdHJpeFtrICogbmF0dHMg KyBsXSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiB3ZSBkb24ndCByZWFs bHkgY2FyZSBhYm91dCB0aGUgZXhhY3QgdmFsdWUsIGp1c3QgMC8xICovCisJ CQkJZm9yIChtID0gMDsgbSA8IG5hdHRzOyBtKyspCisJCQkJeworCQkJCQlp ZiAobWF0cml4W2sgKiBuYXR0cyArIG1dICogbWF0cml4W20gKiBuYXR0cyAr IGxdKQorCQkJCQl7CisJCQkJCQltYXRyaXhbayAqIG5hdHRzICsgbF0gPSB0 cnVlOworCQkJCQkJbmNoYW5nZXMgKz0gMTsKKwkJCQkJCWJyZWFrOworCQkJ CQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogbm8gdHJhbnNpdGl2ZSBk ZXBlbmRlbmN5IGFkZGVkIGhlcmUsIHNvIHRlcm1pbmF0ZSAqLworCQlpZiAo bmNoYW5nZXMgPT0gMCkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIExp c3QqCitmZGVwc19yZWR1Y2VfY2xhdXNlcyhMaXN0ICpjbGF1c2VzLCBCaXRt YXBzZXQgKmF0dG51bXMsIGJvb2wgKm1hdHJpeCwKKwkJCQkJaW50ICppZHhf dG9fYXR0bnVtLCBpbnQgKmF0dG51bV90b19pZHgsIEluZGV4IHJlbGlkKQor eworCWludCBpOworCUxpc3RDZWxsICpsYzsKKwlMaXN0ICAgKnJlZHVjZWRf Y2xhdXNlcyA9IE5JTDsKKworCWludAkJCW5tdmNsYXVzZXM7CS8qIHNpemUg b2YgdGhlIGFycmF5cyAqLworCWJvb2wJICAgKnJlZHVjZWQ7CisJQXR0ck51 bWJlciAqbXZhdHRudW1zOworCU5vZGUJICAqKm12Y2xhdXNlczsKKworCWlu dAkJCW5hdHRzID0gYm1zX251bV9tZW1iZXJzKGF0dG51bXMpOworCisJLyoK KwkgKiBQcmVhbGxvY2F0ZSBzcGFjZSBmb3IgYWxsIGNsYXVzZXMgKHRoZSBs aXN0IG9ubHkgY29udGFpbnN0CisJICogY29tcGF0aWJsZSBjbGF1c2VzIGF0 IHRoaXMgcG9pbnQpLiBUaGlzIG1ha2VzIGl0IHNvbWV3aGF0IGVhc2llcgor CSAqIHRvIGFjY2VzcyB0aGUgc3RhdHMgLyBhdHRudW1zIHJhbmRvbWx5Lgor CSAqCisJICogWFhYIFRoaXMgYXNzdW1lcyBlYWNoIGNsYXVzZSByZWZlcmVu Y2VzIGV4YWN0bHkgb25lIFZhciwgc28gdGhlCisJICogICAgIGFycmF5cyBh cmUgc2l6ZWQgYWNjb3JkaW5nbHkgLSBmb3IgZnVuY3Rpb25hbCBkZXBlbmRl bmNpZXMKKwkgKiAgICAgdGhpcyBpcyBzYWZlLCBiZWNhdXNlIGl0IG9ubHkg d29ya3Mgd2l0aCBWYXI9Q29uc3QuCisJICovCisJbXZjbGF1c2VzID0gKE5v ZGUqKilwYWxsb2MwKGxpc3RfbGVuZ3RoKGNsYXVzZXMpICogc2l6ZW9mKE5v ZGUqKSk7CisJbXZhdHRudW1zID0gKEF0dHJOdW1iZXIqKXBhbGxvYzAobGlz dF9sZW5ndGgoY2xhdXNlcykgKiBzaXplb2YoQXR0ck51bWJlcikpOworCXJl ZHVjZWQgPSAoYm9vbCopcGFsbG9jMChsaXN0X2xlbmd0aChjbGF1c2VzKSAq IHNpemVvZihib29sKSk7CisKKwkvKiBmaWxsIHRoZSBhcnJheXMgKi8KKwlu bXZjbGF1c2VzID0gMDsKKwlmb3JlYWNoIChsYywgY2xhdXNlcykKKwl7CisJ CU5vZGUgKiBjbGF1c2UgPSAoTm9kZSopbGZpcnN0KGxjKTsKKwkJQml0bWFw c2V0ICogYXR0bnVtcyA9IGdldF92YXJhdHRub3MoY2xhdXNlLCByZWxpZCk7 CisKKwkJbXZjbGF1c2VzW25tdmNsYXVzZXNdID0gY2xhdXNlOworCQltdmF0 dG51bXNbbm12Y2xhdXNlc10gPSBibXNfc2luZ2xldG9uX21lbWJlcihhdHRu dW1zKTsKKwkJbm12Y2xhdXNlcysrOworCX0KKworCUFzc2VydChubXZjbGF1 c2VzID09IGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKKworCS8qIG5vdyB0cnkg dG8gcmVkdWNlIHRoZSBjbGF1c2VzICh1c2luZyB0aGUgZGVwZW5kZW5jaWVz KSAqLworCWZvciAoaSA9IDA7IGkgPCBubXZjbGF1c2VzOyBpKyspCisJewor CQlpbnQgajsKKworCQkvKiBub3QgY292ZXJlZCBieSBkZXBlbmRlbmNpZXMg Ki8KKwkJaWYgKCEgYm1zX2lzX21lbWJlcihtdmF0dG51bXNbaV0sIGF0dG51 bXMpKQorCQkJY29udGludWU7CisKKwkJLyogdGhpcyBjbGF1c2Ugd2FzIGFs cmVhZHkgcmVkdWNlZCwgc28gbGV0J3Mgc2tpcCBpdCAqLworCQlpZiAocmVk dWNlZFtpXSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHdhbGsgdGhlIHBvdGVu dGlhbGx5ICdpbXBsaWVkJyBjbGF1c2VzICovCisJCWZvciAoaiA9IDA7IGog PCBubXZjbGF1c2VzOyBqKyspCisJCXsKKwkJCWludCBhaWR4LCBiaWR4Owor CisJCQkvKiBub3QgY292ZXJlZCBieSBkZXBlbmRlbmNpZXMgKi8KKwkJCWlm ICghIGJtc19pc19tZW1iZXIobXZhdHRudW1zW2pdLCBhdHRudW1zKSkKKwkJ CQljb250aW51ZTsKKworCQkJYWlkeCA9IGF0dG51bV90b19pZHhbbXZhdHRu dW1zW2ldXTsKKwkJCWJpZHggPSBhdHRudW1fdG9faWR4W212YXR0bnVtc1tq XV07CisKKwkJCS8qIGNhbid0IHJlZHVjZSB0aGUgY2xhdXNlIGJ5IGl0c2Vs Ziwgb3IgaWYgYWxyZWFkeSByZWR1Y2VkICovCisJCQlpZiAoKGkgPT0gaikg fHwgcmVkdWNlZFtqXSkKKwkJCQljb250aW51ZTsKKworCQkJLyogbWFyayB0 aGUgY2xhdXNlIGFzIHJlZHVjZWQgKGlmIGFpZHggPT4gYmlkeCkgKi8KKwkJ CXJlZHVjZWRbal0gPSBtYXRyaXhbYWlkeCAqIG5hdHRzICsgYmlkeF07CisJ CX0KKwl9CisKKwkvKiBub3cgd2FsayB0aHJvdWdoIHRoZSBjbGF1c2VzLCBh bmQga2VlcCBvbmx5IHRob3NlIG5vdCByZWR1Y2VkICovCisJZm9yIChpID0g MDsgaSA8IG5tdmNsYXVzZXM7IGkrKykKKwkJaWYgKCEgcmVkdWNlZFtpXSkK KwkJCXJlZHVjZWRfY2xhdXNlcyA9IGxhcHBlbmQocmVkdWNlZF9jbGF1c2Vz LCBtdmNsYXVzZXNbaV0pOworCisJcGZyZWUocmVkdWNlZCk7CisJcGZyZWUo bXZjbGF1c2VzKTsKKwlwZnJlZShtdmF0dG51bXMpOworCisJcmV0dXJuIHJl ZHVjZWRfY2xhdXNlczsKK30KKworCitzdGF0aWMgQml0bWFwc2V0ICoKK2Zk ZXBzX2ZpbHRlcl9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkg TGlzdCAqY2xhdXNlcywgQml0bWFwc2V0ICpkZXBzX2F0dG51bXMsCisJCQkJ CSBMaXN0ICoqcmVkdWNlZF9jbGF1c2VzLCBMaXN0ICoqZGVwc19jbGF1c2Vz LAorCQkJCQkgT2lkIHZhclJlbGlkLCBJbmRleCAqcmVsaWQsIFNwZWNpYWxK b2luSW5mbyAqc2ppbmZvKQoreworCUxpc3RDZWxsICpsYzsKKwlCaXRtYXBz ZXQgKmNsYXVzZV9hdHRudW1zID0gTlVMTDsKKworCWZvcmVhY2ggKGxjLCBj bGF1c2VzKQorCXsKKwkJQXR0ck51bWJlcglhdHRudW07CisJCU5vZGUJICAg KmNsYXVzZSA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJaWYgKCEgY2xh dXNlX2lzX212X2NvbXBhdGlibGUocm9vdCwgY2xhdXNlLCB2YXJSZWxpZCwg cmVsaWQsCisJCQkJCQkJCQkgICZhdHRudW0sIHNqaW5mbykpCisKKwkJCS8q IGNsYXVzZSBpbmNvbXBhdGlibGUgd2l0aCBmdW5jdGlvbmFsIGRlcGVuZGVu Y2llcyAqLworCQkJKnJlZHVjZWRfY2xhdXNlcyA9IGxhcHBlbmQoKnJlZHVj ZWRfY2xhdXNlcywgY2xhdXNlKTsKKworCQllbHNlIGlmICghIGJtc19pc19t ZW1iZXIoYXR0bnVtLCBkZXBzX2F0dG51bXMpKQorCisJCQkvKiBjbGF1c2Ug bm90IGNvdmVyZWQgYnkgdGhlIGRlcGVuZGVuY2llcyAqLworCQkJKnJlZHVj ZWRfY2xhdXNlcyA9IGxhcHBlbmQoKnJlZHVjZWRfY2xhdXNlcywgY2xhdXNl KTsKKworCQllbHNlCisJCXsKKwkJCSpkZXBzX2NsYXVzZXMgICA9IGxhcHBl bmQoKmRlcHNfY2xhdXNlcywgY2xhdXNlKTsKKwkJCWNsYXVzZV9hdHRudW1z ID0gYm1zX2FkZF9tZW1iZXIoY2xhdXNlX2F0dG51bXMsIGF0dG51bSk7CisJ CX0KKwl9CisKKwlyZXR1cm4gY2xhdXNlX2F0dG51bXM7Cit9CisKKy8qCisg KiBQdWxsIHZhcmF0dG5vcyBmcm9tIHRoZSBjbGF1c2VzLCBzaW1pbGFybHkg dG8gcHVsbF92YXJhdHRub3MoKSBidXQ6CisgKgorICogKGEpIG9ubHkgZ2V0 IGF0dHJpYnV0ZXMgZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiAocmVsaWQp CisgKiAoYikgaWdub3JlIHN5c3RlbSBhdHRyaWJ1dGVzICh3ZSBjYW4ndCBi dWlsZCBzdGF0cyBvbiB0aGVtIGFueXdheSkKKyAqCisgKiBUaGlzIG1ha2Vz IGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IGNvbXBhcmUgdGhlIHJlc3VsdCB3 aXRoIGF0dG51bQorICogdmFsdWVzIGZyb20gcGdfYXR0cmlidXRlIGV0Yy4K KyAqLworc3RhdGljIEJpdG1hcHNldCAqCitnZXRfdmFyYXR0bm9zKE5vZGUg KiBub2RlLCBJbmRleCByZWxpZCkKK3sKKwlpbnQJCQlrOworCUJpdG1hcHNl dCAgKnZhcmF0dG5vcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0g TlVMTDsKKworCS8qIGdldCB0aGUgdmFyYXR0bm9zICovCisJcHVsbF92YXJh dHRub3Mobm9kZSwgcmVsaWQsICZ2YXJhdHRub3MpOworCisJayA9IC0xOwor CXdoaWxlICgoayA9IGJtc19uZXh0X21lbWJlcih2YXJhdHRub3MsIGspKSA+ PSAwKQorCXsKKwkJaWYgKGsgKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmli dXRlTnVtYmVyID4gMCkKKwkJCXJlc3VsdAorCQkJCT0gYm1zX2FkZF9tZW1i ZXIocmVzdWx0LAorCQkJCQkJCQkgayArIEZpcnN0TG93SW52YWxpZEhlYXBB dHRyaWJ1dGVOdW1iZXIpOworCX0KKworCWJtc19mcmVlKHZhcmF0dG5vcyk7 CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxz L212c3RhdHMvY29tbW9uLmMKaW5kZXggYTc1NWM0OS4uYmQyMDBiYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jCkBAIC04 NCw3ICs4NCw4IEBAIGJ1aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwg aW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKIAkJLyoKIAkJICogQW5h bHl6ZSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBvZiBjb2x1bW5zLgogCQkg Ki8KLQkJZGVwcyA9IGJ1aWxkX212X2RlcGVuZGVuY2llcyhudW1yb3dzLCBy b3dzLCBhdHRycywgc3RhdHMpOworCQlpZiAoc3RhdC0+ZGVwc19lbmFibGVk KQorCQkJZGVwcyA9IGJ1aWxkX212X2RlcGVuZGVuY2llcyhudW1yb3dzLCBy b3dzLCBhdHRycywgc3RhdHMpOwogCiAJCS8qIHN0b3JlIHRoZSBoaXN0b2dy YW0gLyBNQ1YgbGlzdCBpbiB0aGUgY2F0YWxvZyAqLwogCQl1cGRhdGVfbXZf c3RhdHMoc3RhdC0+bXZvaWQsIGRlcHMsIGF0dHJzKTsKQEAgLTE2Myw2ICsx NjQsNyBAQCBsaXN0X212X3N0YXRzKE9pZCByZWxpZCkKIAogCQlpbmZvLT5t dm9pZCA9IEhlYXBUdXBsZUdldE9pZChodHVwKTsKIAkJaW5mby0+c3Rha2V5 cyA9IGJ1aWxkaW50MnZlY3RvcihzdGF0cy0+c3Rha2V5cy52YWx1ZXMsIHN0 YXRzLT5zdGFrZXlzLmRpbTEpOworCQlpbmZvLT5kZXBzX2VuYWJsZWQgPSBz dGF0cy0+ZGVwc19lbmFibGVkOwogCQlpbmZvLT5kZXBzX2J1aWx0ID0gc3Rh dHMtPmRlcHNfYnVpbHQ7CiAKIAkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQs IGluZm8pOwpAQCAtMjc0LDYgKzI3Niw3IEBAIGNvbXBhcmVfc2NhbGFyc19w YXJ0aXRpb24oY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAq YXJnKQogCXJldHVybiBBcHBseVNvcnRDb21wYXJhdG9yKGRhLCBmYWxzZSwg ZGIsIGZhbHNlLCBzc3VwKTsKIH0KIAorCiAvKiBpbml0aWFsaXplIG11bHRp LWRpbWVuc2lvbmFsIHNvcnQgKi8KIE11bHRpU29ydFN1cHBvcnQKIG11bHRp X3NvcnRfaW5pdChpbnQgbmRpbXMpCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9tdnN0YXRzL2RlcGVuZGVuY2llcy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9kZXBlbmRlbmNpZXMuYwppbmRleCA4NGI2NTYxLi4w YTA4ZDEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2RlcGVuZGVuY2llcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3Rh dHMvZGVwZW5kZW5jaWVzLmMKQEAgLTYzNiwzICs2MzYsMjcgQEAgcGdfbXZf c3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coUEdfRlVOQ1RJT05fQVJHUykKIAog CVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KHJlc3VsdCkpOwog fQorCitNVkRlcGVuZGVuY2llcworbG9hZF9tdl9kZXBlbmRlbmNpZXMoT2lk IG12b2lkKQoreworCWJvb2wJCWlzbnVsbCA9IGZhbHNlOworCURhdHVtCQlk ZXBzOworCisJLyogUHJlcGFyZSB0byBzY2FuIHBnX212X3N0YXRpc3RpYyBm b3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQgPSB0aGlzIHJlbC4gKi8KKwlI ZWFwVHVwbGUJaHR1cCA9IFNlYXJjaFN5c0NhY2hlMShNVlNUQVRPSUQsIE9i amVjdElkR2V0RGF0dW0obXZvaWQpKTsKKworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKwlGb3JtX3BnX212X3N0YXRpc3RpYwltdnN0YXQgPSAoRm9y bV9wZ19tdl9zdGF0aXN0aWMpIEdFVFNUUlVDVChodHVwKTsKKwlBc3NlcnQo bXZzdGF0LT5kZXBzX2VuYWJsZWQgJiYgbXZzdGF0LT5kZXBzX2J1aWx0KTsK KyNlbmRpZgorCisJZGVwcyA9IFN5c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQs IGh0dXAsCisJCQkJCQkgICBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFkZXBz LCAmaXNudWxsKTsKKworCUFzc2VydCghaXNudWxsKTsKKworCVJlbGVhc2VT eXNDYWNoZShodHVwKTsKKworCXJldHVybiBkZXNlcmlhbGl6ZV9tdl9kZXBl bmRlbmNpZXMoRGF0dW1HZXRCeXRlYVAoZGVwcykpOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvbXZzdGF0cy5oCmluZGV4IDdlYmQ5NjEuLmNjNDNhNzkgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9tdnN0YXRzLmgKQEAgLTE3LDEyICsxNywyMCBAQAog I2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0u aCIKIAorLyoKKyAqIERlZ3JlZSBvZiBob3cgbXVjaCBNQ1YgaXRlbSAvIGhp c3RvZ3JhbSBidWNrZXQgbWF0Y2hlcyBhIGNsYXVzZS4KKyAqIFRoaXMgaXMg dGhlbiBjb25zaWRlcmVkIHdoZW4gY29tcHV0aW5nIHRoZSBzZWxlY3Rpdml0 eS4KKyAqLworI2RlZmluZSBNVlNUQVRTX01BVENIX05PTkUJCTAJCS8qIG5v IG1hdGNoIGF0IGFsbCAqLworI2RlZmluZSBNVlNUQVRTX01BVENIX1BBUlRJ QUwJMQkJLyogcGFydGlhbCBtYXRjaCAqLworI2RlZmluZSBNVlNUQVRTX01B VENIX0ZVTEwJCTIJCS8qIGZ1bGwgbWF0Y2ggKi8KIAogI2RlZmluZSBNVlNU QVRTX01BWF9ESU1FTlNJT05TCTgJCS8qIG1heCBudW1iZXIgb2YgYXR0cmli dXRlcyAqLwogCi0vKiBBbiBhc3NvY2lhdGl2ZSBydWxlLCB0cmFja2luZyBb YSA9PiBiXSBkZXBlbmRlbmN5LgotICoKLSAqIFRPRE8gTWFrZSB0aGlzIHdv cmsgd2l0aCBtdWx0aXBsZSBjb2x1bW5zIG9uIGJvdGggc2lkZXMuCisKKy8q CisgKiBGdW5jdGlvbmFsIGRlcGVuZGVuY2llcywgdHJhY2tpbmcgY29sdW1u LWxldmVsIHJlbGF0aW9uc2hpcHMgKHZhbHVlcworICogaW4gb25lIGNvbHVt biBkZXRlcm1pbmUgdmFsdWVzIGluIGFub3RoZXIgb25lKS4KICAqLwogdHlw ZWRlZiBzdHJ1Y3QgTVZEZXBlbmRlbmN5RGF0YSB7CiAJaW50MTYJYTsKQEAg LTQ4LDYgKzU2LDggQEAgdHlwZWRlZiBNVkRlcGVuZGVuY2llc0RhdGEqIE1W RGVwZW5kZW5jaWVzOwogICogICAgICBzdGF0cyBzcGVjaWZpZWQgdXNpbmcg ZmxhZ3MgKG9yIHNvbWV0aGluZyBsaWtlIHRoYXQpLgogICovCiAKK01WRGVw ZW5kZW5jaWVzIGxvYWRfbXZfZGVwZW5kZW5jaWVzKE9pZCBtdm9pZCk7CisK IGJ5dGVhICogc2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhNVkRlcGVuZGVu Y2llcyBkZXBlbmRlbmNpZXMpOwogCiAvKiBkZXNlcmlhbGl6YXRpb24gb2Yg c3RhdHMgKHNlcmlhbGl6YXRpb24gaXMgcHJpdmF0ZSB0byBhbmFseXplKSAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdl9k ZXBlbmRlbmNpZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9t dl9kZXBlbmRlbmNpZXMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmU3NTk5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL212X2RlcGVuZGVuY2llcy5vdXQKQEAgLTAs MCArMSwxNzIgQEAKKy0tIGRhdGEgdHlwZSBwYXNzZWQgYnkgdmFsdWUKK0NS RUFURSBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoCisgICAgYSBJ TlQsCisgICAgYiBJTlQsCisgICAgYyBJTlQKKyk7CistLSB1bmtub3duIGNv bHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMgKHVua25vd25fY29sdW1uKSBXSVRIIChkZXBlbmRlbmNpZXMp OworRVJST1I6ICBjb2x1bW4gInVua25vd25fY29sdW1uIiByZWZlcmVuY2Vk IGluIHN0YXRpc3RpY3MgZG9lcyBub3QgZXhpc3QKKy0tIHNpbmdsZSBjb2x1 bW4KK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5k ZW5jaWVzIChhKSBXSVRIIChkZXBlbmRlbmNpZXMpOworRVJST1I6ICBtdWx0 aXZhcmlhdGUgc3RhdHMgcmVxdWlyZSAyIG9yIG1vcmUgY29sdW1ucworLS0g c2luZ2xlIGNvbHVtbiwgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1Mg czEgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKGEsYSkgV0lUSCAoZGVw ZW5kZW5jaWVzKTsKK0VSUk9SOiAgZHVwbGljYXRlIGNvbHVtbiBuYW1lIGlu IHN0YXRpc3RpY3MgZGVmaW5pdGlvbgorLS0gdHdvIGNvbHVtbnMsIG9uZSBk dXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyAoYSwgYSwgYikgV0lUSCAoZGVwZW5kZW5jaWVzKTsK K0VSUk9SOiAgZHVwbGljYXRlIGNvbHVtbiBuYW1lIGluIHN0YXRpc3RpY3Mg ZGVmaW5pdGlvbgorLS0gdW5rbm93biBvcHRpb24KK0NSRUFURSBTVEFUSVNU SUNTIHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBiLCBjKSBX SVRIICh1bmtub3duX29wdGlvbik7CitFUlJPUjogIHVucmVjb2duaXplZCBT VEFUSVNUSUNTIG9wdGlvbiAidW5rbm93bl9vcHRpb24iCistLSBjb3JyZWN0 IGNvbW1hbmQKK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxf ZGVwZW5kZW5jaWVzIChhLCBiLCBjKSBXSVRIIChkZXBlbmRlbmNpZXMpOwor LS0gcmFuZG9tIGRhdGEgKG5vIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzKQor SU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VM RUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBmdW5j dGlvbmFsX2RlcGVuZGVuY2llczsKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRl cHNfYnVpbHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRl cHMpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0g J2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisgZGVwc19l bmFibGVkIHwgZGVwc19idWlsdCB8IHBnX212X3N0YXRzX2RlcGVuZGVuY2ll c19zaG93IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCBmICAg ICAgICAgIHwgCisoMSByb3cpCisKK1RSVU5DQVRFIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzOworLS0gYSA9PiBiLCBhID0+IGMsIGIgPT4gYworSU5TRVJU IElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkv MTAsIGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw KSBzKGkpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKK1NF TEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRzX2Rl cGVuZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3RhdGlz dGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVz Jzo6cmVnY2xhc3M7CisgZGVwc19lbmFibGVkIHwgZGVwc19idWlsdCB8IHBn X212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93IAorLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgICAgfCB0ICAgICAgICAgIHwgMSA9PiAyLCAxID0+IDMs IDIgPT4gMworKDEgcm93KQorCitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llczsKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBmdW5j dGlvbmFsX2RlcGVuZGVuY2llcworICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAs IGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitB TkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworU0VMRUNUIGRlcHNf ZW5hYmxlZCwgZGVwc19idWlsdCwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVz X3Nob3coc3RhZGVwcykKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUg c3RhcmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFz czsKKyBkZXBzX2VuYWJsZWQgfCBkZXBzX2J1aWx0IHwgcGdfbXZfc3RhdHNf ZGVwZW5kZW5jaWVzX3Nob3cgCistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgICB8IHQgICAgICAgICAgfCAxID0+IDIsIDEgPT4gMworKDEgcm93KQor CitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKy0tIGNoZWNr IGV4cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90IHBsYWlu IGluZGV4IHNjYW4pCitJTlNFUlQgSU5UTyBmdW5jdGlvbmFsX2RlcGVuZGVu Y2llcworICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAwMCBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVBVEUg SU5ERVggZmRlcHNfaWR4IE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChh LCBiKTsKK0FOQUxZWkUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXM7CitTRUxF Q1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBl bmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3Rp YyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6 OnJlZ2NsYXNzOworIGRlcHNfZW5hYmxlZCB8IGRlcHNfYnVpbHQgfCBwZ19t dl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyAKKy0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICAgIHwgdCAgICAgICAgICB8IDEgPT4gMiwgMSA9PiAzLCAy ID0+IDMKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVD VCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgYSA9IDEw IEFORCBiID0gNTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBmdW5jdGlv bmFsX2RlcGVuZGVuY2llcworICAgUmVjaGVjayBDb25kOiAoKGEgPSAxMCkg QU5EIChiID0gNSkpCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gZmRl cHNfaWR4CisgICAgICAgICBJbmRleCBDb25kOiAoKGEgPSAxMCkgQU5EIChi ID0gNSkpCisoNCByb3dzKQorCitEUk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzOworLS0gdmFybGVuYSB0eXBlICh0ZXh0KQorQ1JFQVRFIFRB QkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzICgKKyAgICBhIFRFWFQsCisg ICAgYiBURVhULAorICAgIGMgVEVYVAorKTsKK0NSRUFURSBTVEFUSVNUSUNT IHMyIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBiLCBjKSBXSVRI IChkZXBlbmRlbmNpZXMpOworLS0gcmFuZG9tIGRhdGEgKG5vIGZ1bmN0aW9u YWwgZGVwZW5kZW5jaWVzKQorSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMKKyAgICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIz KSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBz KGkpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKK1NFTEVD VCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRzX2RlcGVu ZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3RhdGlzdGlj IFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6 cmVnY2xhc3M7CisgZGVwc19lbmFibGVkIHwgZGVwc19idWlsdCB8IHBnX212 X3N0YXRzX2RlcGVuZGVuY2llc19zaG93IAorLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0 ICAgICAgICAgICAgfCBmICAgICAgICAgIHwgCisoMSByb3cpCisKK1RSVU5D QVRFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworLS0gYSA9PiBiLCBhID0+ IGMsIGIgPT4gYworSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNp ZXMKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBmdW5jdGlvbmFs X2RlcGVuZGVuY2llczsKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVp bHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMpCisg IEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisgZGVwc19lbmFibGVk IHwgZGVwc19idWlsdCB8IHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93 IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0ICAgICAgICAg IHwgMSA9PiAyLCAxID0+IDMsIDIgPT4gMworKDEgcm93KQorCitUUlVOQ0FU RSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKy0tIGEgPT4gYiwgYSA9PiBj CitJTlNFUlQgSU5UTyBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcworICAgICBT RUxFQ1QgaS8xMCwgaS8xNTAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5j aWVzOworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwgcGdfbXZf c3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJPTSBwZ19t dl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMnOjpyZWdjbGFzczsKKyBkZXBzX2VuYWJsZWQgfCBkZXBzX2J1 aWx0IHwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cgCistLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIHQgICAgICAgICAgICB8IHQgICAgICAgICAgfCAxID0+IDIs IDEgPT4gMworKDEgcm93KQorCitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llczsKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5k ZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4pCitJTlNFUlQgSU5UTyBm dW5jdGlvbmFsX2RlcGVuZGVuY2llcworICAgICBTRUxFQ1QgaS8xMDAwMCwg aS8yMDAwMCwgaS80MDAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw MDApIHMoaSk7CitDUkVBVEUgSU5ERVggZmRlcHNfaWR4IE9OIGZ1bmN0aW9u YWxfZGVwZW5kZW5jaWVzIChhLCBiKTsKK0FOQUxZWkUgZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXM7CitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0 LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBG Uk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlv bmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworIGRlcHNfZW5hYmxlZCB8 IGRlcHNfYnVpbHQgfCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyAK Ky0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdCAgICAgICAgICB8 IDEgPT4gMiwgMSA9PiAzLCAyID0+IDMKKygxIHJvdykKKworRVhQTEFJTiAo Q09TVFMgb2ZmKQorIFNFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRl bmNpZXMgV0hFUkUgYSA9ICcxMCcgQU5EIGIgPSAnNSc7CisgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24g ZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgIFJlY2hlY2sgQ29uZDogKChh ID0gJzEwJzo6dGV4dCkgQU5EIChiID0gJzUnOjp0ZXh0KSkKKyAgIC0+ICBC aXRtYXAgSW5kZXggU2NhbiBvbiBmZGVwc19pZHgKKyAgICAgICAgIEluZGV4 IENvbmQ6ICgoYSA9ICcxMCc6OnRleHQpIEFORCAoYiA9ICc1Jzo6dGV4dCkp CisoNCByb3dzKQorCitEUk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5j aWVzOworLS0gTlVMTCB2YWx1ZXMgKG1peCBvZiBpbnQgYW5kIHRleHQgY29s dW1ucykKK0NSRUFURSBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAo CisgICAgYSBJTlQsCisgICAgYiBURVhULAorICAgIGMgSU5ULAorICAgIGQg VEVYVAorKTsKK0NSRUFURSBTVEFUSVNUSUNTIHMzIE9OIGZ1bmN0aW9uYWxf ZGVwZW5kZW5jaWVzIChhLCBiLCBjLCBkKSBXSVRIIChkZXBlbmRlbmNpZXMp OworSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAg U0VMRUNUCisgICAgICAgICBtb2QoaSwgMTAwKSwKKyAgICAgICAgIChDQVNF IFdIRU4gbW9kKGksIDIwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChpLDIw MCkgRU5EKSwKKyAgICAgICAgIG1vZChpLCA0MDApLAorICAgICAgICAgKENB U0UgV0hFTiBtb2QoaSwgMzAwKSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGks NjAwKSBFTkQpCisgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAp IHMoaSk7CitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworU0VM RUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwgcGdfbXZfc3RhdHNfZGVw ZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJPTSBwZ19tdl9zdGF0aXN0 aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMn OjpyZWdjbGFzczsKKyBkZXBzX2VuYWJsZWQgfCBkZXBzX2J1aWx0IHwgICAg IHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93ICAgICAgCistLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8IHQgICAgICAgICAg fCAyID0+IDEsIDMgPT4gMSwgMyA9PiAyLCA0ID0+IDEsIDQgPT4gMgorKDEg cm93KQorCitEUk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXgg YjFiYzdjNy4uODE0ODRmMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlCkBAIC0xMTAsMyArMTEwLDYgQEAgdGVzdDogZXZl bnRfdHJpZ2dlcgogCiAjIHJ1biBzdGF0cyBieSBpdHNlbGYgYmVjYXVzZSBp dHMgZGVsYXkgbWF5IGJlIGluc3VmZmljaWVudCB1bmRlciBoZWF2eSBsb2Fk CiB0ZXN0OiBzdGF0cworCisjIHJ1biB0ZXN0cyBvZiBtdWx0aXZhcmlhdGUg c3RhdHMKK3Rlc3Q6IG12X2RlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdy ZXNzL3NlcmlhbF9zY2hlZHVsZQppbmRleCBhZGU5ZWYxLi4xNGVhNTc0IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQpAQCAtMTYx LDMgKzE2MSw0IEBAIHRlc3Q6IHdpdGgKIHRlc3Q6IHhtbAogdGVzdDogZXZl bnRfdHJpZ2dlcgogdGVzdDogc3RhdHMKK3Rlc3Q6IG12X2RlcGVuZGVuY2ll cwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfZGVwZW5k ZW5jaWVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212X2RlcGVuZGVu Y2llcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NDhkZWE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL212X2RlcGVuZGVuY2llcy5zcWwKQEAgLTAsMCArMSwxNTAgQEAKKy0t IGRhdGEgdHlwZSBwYXNzZWQgYnkgdmFsdWUKK0NSRUFURSBUQUJMRSBmdW5j dGlvbmFsX2RlcGVuZGVuY2llcyAoCisgICAgYSBJTlQsCisgICAgYiBJTlQs CisgICAgYyBJTlQKKyk7CisKKy0tIHVua25vd24gY29sdW1uCitDUkVBVEUg U1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAodW5r bm93bl9jb2x1bW4pIFdJVEggKGRlcGVuZGVuY2llcyk7CisKKy0tIHNpbmds ZSBjb2x1bW4KK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxf ZGVwZW5kZW5jaWVzIChhKSBXSVRIIChkZXBlbmRlbmNpZXMpOworCistLSBz aW5nbGUgY29sdW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBz MSBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSxhKSBXSVRIIChkZXBl bmRlbmNpZXMpOworCistLSB0d28gY29sdW1ucywgb25lIGR1cGxpY2F0ZWQK K0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5j aWVzIChhLCBhLCBiKSBXSVRIIChkZXBlbmRlbmNpZXMpOworCistLSB1bmtu b3duIG9wdGlvbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXMgKGEsIGIsIGMpIFdJVEggKHVua25vd25fb3B0aW9u KTsKKworLS0gY29ycmVjdCBjb21tYW5kCitDUkVBVEUgU1RBVElTVElDUyBz MSBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYiwgYykgV0lUSCAo ZGVwZW5kZW5jaWVzKTsKKworLS0gcmFuZG9tIGRhdGEgKG5vIGZ1bmN0aW9u YWwgZGVwZW5kZW5jaWVzKQorSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMKKyAgICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIz KSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBz KGkpOworCitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitT RUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19k ZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRp c3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2ll cyc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVu Y2llczsKKworLS0gYSA9PiBiLCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElO VE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAs IGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBz KGkpOworCitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitT RUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19k ZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRp c3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2ll cyc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVu Y2llczsKKworLS0gYSA9PiBiLCBhID0+IGMKK0lOU0VSVCBJTlRPIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzCisgICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwg aS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FO QUxZWkUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXM7CisKK1NFTEVDVCBkZXBz X2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2ll c19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJF IHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xh c3M7CisKK1RSVU5DQVRFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCist LSBjaGVjayBleHBsYWluIChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5v dCBwbGFpbiBpbmRleCBzY2FuKQorSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAwMDAsIGkvMjAwMDAsIGkv NDAwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBzKGkpOwor Q1JFQVRFIElOREVYIGZkZXBzX2lkeCBPTiBmdW5jdGlvbmFsX2RlcGVuZGVu Y2llcyAoYSwgYik7CitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVz OworCitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9z dGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212 X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyc6OnJlZ2NsYXNzOworCitFWFBMQUlOIChDT1NUUyBvZmYpCisg U0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSBh ID0gMTAgQU5EIGIgPSA1OworCitEUk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzOworCistLSB2YXJsZW5hIHR5cGUgKHRleHQpCitDUkVBVEUg VEFCTEUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKAorICAgIGEgVEVYVCwK KyAgICBiIFRFWFQsCisgICAgYyBURVhUCispOworCitDUkVBVEUgU1RBVElT VElDUyBzMiBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYiwgYykg V0lUSCAoZGVwZW5kZW5jaWVzKTsKKworLS0gcmFuZG9tIGRhdGEgKG5vIGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzKQorSU5TRVJUIElOVE8gZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2Qo aSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwKSBzKGkpOworCitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVz OworCitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9z dGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212 X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBmdW5jdGlvbmFsX2Rl cGVuZGVuY2llczsKKworLS0gYSA9PiBiLCBhID0+IGMsIGIgPT4gYworSU5T RVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNU IGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwKSBzKGkpOworCitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVz OworCitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9z dGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212 X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBmdW5jdGlvbmFsX2Rl cGVuZGVuY2llczsKKworLS0gYSA9PiBiLCBhID0+IGMKK0lOU0VSVCBJTlRP IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisgICAgIFNFTEVDVCBpLzEwLCBp LzE1MCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhp KTsKK0FOQUxZWkUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXM7CisKK1NFTEVD VCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRzX2RlcGVu ZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3RhdGlzdGlj IFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6 cmVnY2xhc3M7CisKK1RSVU5DQVRFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVz OworCistLSBjaGVjayBleHBsYWluIChleHBlY3QgYml0bWFwIGluZGV4IHNj YW4sIG5vdCBwbGFpbiBpbmRleCBzY2FuKQorSU5TRVJUIElOVE8gZnVuY3Rp b25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAwMDAsIGkvMjAw MDAsIGkvNDAwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBz KGkpOworQ1JFQVRFIElOREVYIGZkZXBzX2lkeCBPTiBmdW5jdGlvbmFsX2Rl cGVuZGVuY2llcyAoYSwgYik7CitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5k ZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBw Z19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9N IHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworCitFWFBMQUlOIChDT1NUUyBv ZmYpCisgU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBX SEVSRSBhID0gJzEwJyBBTkQgYiA9ICc1JzsKKworRFJPUCBUQUJMRSBmdW5j dGlvbmFsX2RlcGVuZGVuY2llczsKKworLS0gTlVMTCB2YWx1ZXMgKG1peCBv ZiBpbnQgYW5kIHRleHQgY29sdW1ucykKK0NSRUFURSBUQUJMRSBmdW5jdGlv bmFsX2RlcGVuZGVuY2llcyAoCisgICAgYSBJTlQsCisgICAgYiBURVhULAor ICAgIGMgSU5ULAorICAgIGQgVEVYVAorKTsKKworQ1JFQVRFIFNUQVRJU1RJ Q1MgczMgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKGEsIGIsIGMsIGQp IFdJVEggKGRlcGVuZGVuY2llcyk7CisKK0lOU0VSVCBJTlRPIGZ1bmN0aW9u YWxfZGVwZW5kZW5jaWVzCisgICAgIFNFTEVDVAorICAgICAgICAgbW9kKGks IDEwMCksCisgICAgICAgICAoQ0FTRSBXSEVOIG1vZChpLCAyMDApID0gMCBU SEVOIE5VTEwgRUxTRSBtb2QoaSwyMDApIEVORCksCisgICAgICAgICBtb2Qo aSwgNDAwKSwKKyAgICAgICAgIChDQVNFIFdIRU4gbW9kKGksIDMwMCkgPSAw IFRIRU4gTlVMTCBFTFNFIG1vZChpLDYwMCkgRU5EKQorICAgICBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFibGVkLCBk ZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFk ZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9 ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworCitEUk9Q IFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOwotLSAKMi4xLjAKCg== --------------040701000609000501090206 Content-Type: application/x-patch; name="0004-multivariate-MCV-lists.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0004-multivariate-MCV-lists.patch" RnJvbSA3Y2UwOTkzNGVkZGZjMDgzMTViNjIzZmE0OThmOTU0OGY5MTUwZWMz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE2 OjUyOjE1ICswMjAwClN1YmplY3Q6IFtQQVRDSCA0LzddIG11bHRpdmFyaWF0 ZSBNQ1YgbGlzdHMKCi0gZXh0ZW5kcyB0aGUgcGdfbXZfc3RhdGlzdGljIGNh dGFsb2cgKGFkZCAnbWN2JyBmaWVsZHMpCi0gYnVpbGRpbmcgdGhlIE1DViBs aXN0cyBkdXJpbmcgQU5BTFlaRQotIHNpbXBsZSBlc3RpbWF0aW9uIHdoaWxl IHBsYW5uaW5nIHRoZSBxdWVyaWVzCgpJbmNsdWRlcyByZWdyZXNzaW9uIHRl c3RzLCBtb3N0bHkgZXF1YWwgdG8gcmVncmVzc2lvbiB0ZXN0cyBmb3IKZnVu Y3Rpb25hbCBkZXBlbmRlbmNpZXMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfc3RhdGlzdGljcy5zZ21sIHwgICAxOCArCiBzcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgfCAgICA0ICstCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAgICAgICAgfCAgIDQ1ICstCiBz cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAgfCAgICAy ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jICB8 IDEwNzkgKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgfCAgICA0ICstCiBzcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlICAgICAgfCAgICAyICst CiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jICAgICAgfCAg MTA0ICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uaCAg ICAgIHwgICAxMSArLQogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9tY3Yu YyAgICAgICAgIHwgMTIzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAg fCAgIDI1ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3Rp Yy5oICAgfCAgIDE4ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu aCAgICAgICAgICAgfCAgICA0ICsKIHNyYy9pbmNsdWRlL25vZGVzL3JlbGF0 aW9uLmggICAgICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMv bXZzdGF0cy5oICAgICAgICAgICAgIHwgICA2OSArLQogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9tdl9tY3Yub3V0ICAgIHwgIDIwNyArKysrKysKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0ICAgICB8ICAgIDQg Ky0KIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICB8 ICAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlICAg ICAgICB8ICAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfbWN2LnNx bCAgICAgICAgIHwgIDE3OCArKysrKwogMjAgZmlsZXMgY2hhbmdlZCwgMjkx NSBpbnNlcnRpb25zKCspLCAxMDEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9tY3YuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXZf bWN2Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL212X21jdi5zcWwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVm L2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV9zdGF0aXN0aWNzLnNnbWwKaW5kZXggYTg2ZWFlMy4uMTkzZTRiMCAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGlj cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3Rp Y3Muc2dtbApAQCAtMTMyLDYgKzEzMiwyNCBAQCBDUkVBVEUgU1RBVElTVElD UyBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+c3RhdGlzdGljc19uYQogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zh cmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48 bGl0ZXJhbD5tYXhfbWN2X2l0ZW1zPC8+ICg8dHlwZT5pbnRlZ2VyPC8+KTwv dGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTWF4 aW11bSBudW1iZXIgb2YgTUNWIGxpc3QgaXRlbXMuCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PGxpdGVyYWw+bWN2PC8+ICg8dHlw ZT5ib29sZWFuPC8+KTwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgRW5hYmxlcyBNQ1YgbGlzdCBmb3IgdGhlIHN0YXRpc3Rp Y3MuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJs aXN0ZW50cnk+CisKICAgIDwvdmFyaWFibGVsaXN0PgogCiAgIDwvcmVmc2Vj dDI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5z cWwKaW5kZXggMjQyMzk4NS4uNTQ4ODA2MSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTY1LDcgKzE2NSw5 IEBAIENSRUFURSBWSUVXIHBnX212X3N0YXRzIEFTCiAgICAgICAgIFMuc3Rh bmFtZSBBUyBzdGFuYW1lLAogICAgICAgICBTLnN0YWtleXMgQVMgYXR0bnVt cywKICAgICAgICAgbGVuZ3RoKFMuc3RhZGVwcykgYXMgZGVwc2J5dGVzLAot ICAgICAgICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyhTLnN0YWRl cHMpIGFzIGRlcHNpbmZvCisgICAgICAgIHBnX212X3N0YXRzX2RlcGVuZGVu Y2llc19pbmZvKFMuc3RhZGVwcykgYXMgZGVwc2luZm8sCisgICAgICAgIGxl bmd0aChTLnN0YW1jdikgQVMgbWN2Ynl0ZXMsCisgICAgICAgIHBnX212X3N0 YXRzX21jdmxpc3RfaW5mbyhTLnN0YW1jdikgQVMgbWN2aW5mbwogICAgIEZS T00gKHBnX212X3N0YXRpc3RpYyBTIEpPSU4gcGdfY2xhc3MgQyBPTiAoQy5v aWQgPSBTLnN0YXJlbGlkKSkKICAgICAgICAgTEVGVCBKT0lOIHBnX25hbWVz cGFjZSBOIE9OIChOLm9pZCA9IEMucmVsbmFtZXNwYWNlKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwppbmRleCA4NGE4YjEzLi45 MGJmYWVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0 c2NtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMu YwpAQCAtMTM2LDcgKzEzNiwxMyBAQCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0 ZVN0YXRzU3RtdCAqc3RtdCkKIAlPYmplY3RBZGRyZXNzIHBhcmVudG9iamVj dCwgY2hpbGRvYmplY3Q7CiAKIAkvKiBieSBkZWZhdWx0IGJ1aWxkIG5vdGhp bmcgKi8KLQlib29sIAlidWlsZF9kZXBlbmRlbmNpZXMgPSBmYWxzZTsKKwli b29sIAlidWlsZF9kZXBlbmRlbmNpZXMgPSBmYWxzZSwKKwkJCWJ1aWxkX21j diA9IGZhbHNlOworCisJaW50MzIgCW1heF9tY3ZfaXRlbXMgPSAtMTsKKwor CS8qIG9wdGlvbnMgcmVxdWlyZWQgYmVjYXVzZSBvZiBvdGhlciBvcHRpb25z ICovCisJYm9vbAlyZXF1aXJlX21jdiA9IGZhbHNlOwogCiAJQXNzZXJ0KElz QShzdG10LCBDcmVhdGVTdGF0c1N0bXQpKTsKIApAQCAtMjEyLDYgKzIxOCwy OSBAQCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkK IAogCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgImRlcGVuZGVuY2llcyIp ID09IDApCiAJCQlidWlsZF9kZXBlbmRlbmNpZXMgPSBkZWZHZXRCb29sZWFu KG9wdCk7CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJtY3Yi KSA9PSAwKQorCQkJYnVpbGRfbWN2ID0gZGVmR2V0Qm9vbGVhbihvcHQpOwor CQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibWF4X21jdl9pdGVt cyIpID09IDApCisJCXsKKwkJCW1heF9tY3ZfaXRlbXMgPSBkZWZHZXRJbnQz MihvcHQpOworCisJCQkvKiB0aGlzIG9wdGlvbiByZXF1aXJlcyAnbWN2JyB0 byBiZSBlbmFibGVkICovCisJCQlyZXF1aXJlX21jdiA9IHRydWU7CisKKwkJ CS8qIHNhbml0eSBjaGVjayAqLworCQkJaWYgKG1heF9tY3ZfaXRlbXMgPCBN VlNUQVRfTUNWTElTVF9NSU5fSVRFTVMpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJ CSBlcnJtc2coIm1heCBudW1iZXIgb2YgTUNWIGl0ZW1zIG11c3QgYmUgYXQg bGVhc3QgJWQiLAorCQkJCQkJCQlNVlNUQVRfTUNWTElTVF9NSU5fSVRFTVMp KSk7CisKKwkJCWVsc2UgaWYgKG1heF9tY3ZfaXRlbXMgPiBNVlNUQVRfTUNW TElTVF9NQVhfSVRFTVMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2co Im1heCBudW1iZXIgb2YgTUNWIGl0ZW1zIGlzICVkIiwKKwkJCQkJCQkJTVZT VEFUX01DVkxJU1RfTUFYX0lURU1TKSkpOworCisJCX0KIAkJZWxzZQogCQkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLApAQCAtMjIwLDEwICsyNDksMTYgQEAgQ3JlYXRlU3RhdGlzdGlj cyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJfQogCiAJLyogY2hlY2sgdGhh dCBhdCBsZWFzdCBzb21lIHN0YXRpc3RpY3Mgd2VyZSByZXF1ZXN0ZWQgKi8K LQlpZiAoISBidWlsZF9kZXBlbmRlbmNpZXMpCisJaWYgKCEgKGJ1aWxkX2Rl cGVuZGVuY2llcyB8fCBidWlsZF9tY3YpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkgZXJy bXNnKCJubyBzdGF0aXN0aWNzIHR5cGUgKGRlcGVuZGVuY2llcywgbWN2KSB3 YXMgcmVxdWVzdGVkIikpKTsKKworCS8qIG5vdyBkbyBzb21lIGNoZWNraW5n IG9mIHRoZSBvcHRpb25zICovCisJaWYgKHJlcXVpcmVfbWN2ICYmICghIGJ1 aWxkX21jdikpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9TWU5UQVhfRVJST1IpLAotCQkJCSBlcnJtc2coIm5vIHN0YXRpc3Rp Y3MgdHlwZSAoZGVwZW5kZW5jaWVzKSB3YXMgcmVxdWVzdGVkIikpKTsKKwkJ CQkgZXJybXNnKCJvcHRpb24gJ21jdicgaXMgcmVxdWlyZWQgYnkgb3RoZXIg b3B0aW9ucyhzKSIpKSk7CiAKIAkvKiBzb3J0IHRoZSBhdHRudW1zIGFuZCBi dWlsZCBpbnQydmVjdG9yICovCiAJcXNvcnQoYXR0bnVtcywgbnVtY29scywg c2l6ZW9mKGludDE2KSwgY29tcGFyZV9pbnQxNik7CkBAIC0yNDMsOCArMjc4 LDEyIEBAIENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10 KQogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzIC0xXSA9 IFBvaW50ZXJHZXREYXR1bShzdGFrZXlzKTsKIAogCXZhbHVlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19kZXBzX2VuYWJsZWQgLTFdID0gQm9vbEdldERhdHVt KGJ1aWxkX2RlcGVuZGVuY2llcyk7CisJdmFsdWVzW0FudW1fcGdfbXZfc3Rh dGlzdGljX21jdl9lbmFibGVkICAtMV0gPSBCb29sR2V0RGF0dW0oYnVpbGRf bWN2KTsKKworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfbWF4 X2l0ZW1zICAgIC0xXSA9IEludDMyR2V0RGF0dW0obWF4X21jdl9pdGVtcyk7 CiAKIAludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFkZXBzICAtMV0g PSB0cnVlOworCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YW1jdiAg IC0xXSA9IHRydWU7CiAKIAkvKiBpbnNlcnQgdGhlIHR1cGxlIGludG8gcGdf bXZfc3RhdGlzdGljICovCiAJbXZzdGF0cmVsID0gaGVhcF9vcGVuKE12U3Rh dGlzdGljUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tl bmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCA1ZWNjOWVmLi45ZTAyOWVmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBi L3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTE5NDgsOSArMTk0 OCwxMSBAQCBfb3V0TVZTdGF0aXN0aWNJbmZvKFN0cmluZ0luZm8gc3RyLCBj b25zdCBNVlN0YXRpc3RpY0luZm8gKm5vZGUpCiAKIAkvKiBlbmFibGVkIHN0 YXRpc3RpY3MgKi8KIAlXUklURV9CT09MX0ZJRUxEKGRlcHNfZW5hYmxlZCk7 CisJV1JJVEVfQk9PTF9GSUVMRChtY3ZfZW5hYmxlZCk7CiAKIAkvKiBidWls dC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwogCVdSSVRFX0JPT0xfRklFTEQo ZGVwc19idWlsdCk7CisJV1JJVEVfQk9PTF9GSUVMRChtY3ZfYnVpbHQpOwog fQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jbGF1c2VzZWwuYwppbmRleCBlODM0NzIyLi5kMTk0NTUxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2Vz ZWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2Vz ZWwuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgi CiAKICNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGVyYXRvci5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCkBAIC00NywxNyArNDgsMzgg QEAgc3RhdGljIHZvaWQgYWRkUmFuZ2VDbGF1c2UoUmFuZ2VRdWVyeUNsYXVz ZSAqKnJxbGlzdCwgTm9kZSAqY2xhdXNlLAogCQkJICAgYm9vbCB2YXJvbmxl ZnQsIGJvb2wgaXNMVHNlbCwgU2VsZWN0aXZpdHkgczIpOwogCiAjZGVmaW5l CQlNVl9DTEFVU0VfVFlQRV9GREVQCQkweDAxCisjZGVmaW5lCQlNVl9DTEFV U0VfVFlQRV9NQ1YJCTB4MDIKIAogc3RhdGljIGJvb2wgY2xhdXNlX2lzX212 X2NvbXBhdGlibGUoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmNsYXVzZSwg T2lkIHZhclJlbGlkLAotCQkJCQkJCSBJbmRleCAqcmVsaWQsIEF0dHJOdW1i ZXIgKmF0dG51bSwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pOworCQkJCQkJ CSBJbmRleCAqcmVsaWQsIEJpdG1hcHNldCAqKmF0dG51bXMsIFNwZWNpYWxK b2luSW5mbyAqc2ppbmZvLAorCQkJCQkJCSBpbnQgdHlwZSk7CiAKIHN0YXRp YyBCaXRtYXBzZXQgICpjb2xsZWN0X212X2F0dG51bXMoUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKmNsYXVzZXMsCi0JCQkJCQkJCQkgIE9pZCB2YXJSZWxp ZCwgSW5kZXggKnJlbGlkLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbyk7CisJ CQkJCQkJCQkgIE9pZCB2YXJSZWxpZCwgSW5kZXggKnJlbGlkLCBTcGVjaWFs Sm9pbkluZm8gKnNqaW5mbywKKwkJCQkJCQkJCSAgaW50IHR5cGUpOwogCiBz dGF0aWMgTGlzdCAqY2xhdXNlbGlzdF9hcHBseV9kZXBlbmRlbmNpZXMoUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCQkJCQkJCU9pZCB2 YXJSZWxpZCwgTGlzdCAqc3RhdHMsCiAJCQkJCQkJCVNwZWNpYWxKb2luSW5m byAqc2ppbmZvKTsKIAorc3RhdGljIE1WU3RhdGlzdGljSW5mbyAqY2hvb3Nl X212X3N0YXRpc3RpY3MoTGlzdCAqbXZzdGF0cywgQml0bWFwc2V0ICphdHRu dW1zKTsKKworc3RhdGljIExpc3QgKmNsYXVzZWxpc3RfbXZfc3BsaXQoUGxh bm5lckluZm8gKnJvb3QsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJ CQkJCQkgTGlzdCAqY2xhdXNlcywgT2lkIHZhclJlbGlkLAorCQkJCQkJCQkg TGlzdCAqKm12Y2xhdXNlcywgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzLCBp bnQgdHlwZXMpOworCitzdGF0aWMgU2VsZWN0aXZpdHkgY2xhdXNlbGlzdF9t dl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCUxpc3Qg KmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cyk7CitzdGF0aWMg U2VsZWN0aXZpdHkgY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0 KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywg TVZTdGF0aXN0aWNJbmZvICptdnN0YXRzLAorCQkJCQkJCQkJYm9vbCAqZnVs bG1hdGNoLCBTZWxlY3Rpdml0eSAqbG93c2VsKTsKKworc3RhdGljIGludCB1 cGRhdGVfbWF0Y2hfYml0bWFwX21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3Qs IExpc3QgKmNsYXVzZXMsCisJCQkJCQkJCQlpbnQydmVjdG9yICpzdGFrZXlz LCBNQ1ZMaXN0IG1jdmxpc3QsCisJCQkJCQkJCQlpbnQgbm1hdGNoZXMsIGNo YXIgKiBtYXRjaGVzLAorCQkJCQkJCQkJU2VsZWN0aXZpdHkgKmxvd3NlbCwg Ym9vbCAqZnVsbG1hdGNoLAorCQkJCQkJCQkJYm9vbCBpc19vcik7CisKIHN0 YXRpYyBib29sIGhhc19zdGF0cyhMaXN0ICpzdGF0cywgaW50IHR5cGUpOwog CiBzdGF0aWMgTGlzdCAqIGZpbmRfc3RhdHMoUGxhbm5lckluZm8gKnJvb3Qs IExpc3QgKmNsYXVzZXMsCkBAIC04NSw2ICsxMDcsMTMgQEAgc3RhdGljIEJp dG1hcHNldCAqZmRlcHNfZmlsdGVyX2NsYXVzZXMoUGxhbm5lckluZm8gKnJv b3QsCiAKIHN0YXRpYyBCaXRtYXBzZXQgKiBnZXRfdmFyYXR0bm9zKE5vZGUg KiBub2RlLCBJbmRleCByZWxpZCk7CiAKKy8qIHVzZWQgZm9yIG1lcmdpbmcg Yml0bWFwcyAtIEFORCAobWluKSwgT1IgKG1heCkgKi8KKyNkZWZpbmUgTUFY KHgsIHkpICgoKHgpID4gKHkpKSA/ICh4KSA6ICh5KSkKKyNkZWZpbmUgTUlO KHgsIHkpICgoKHgpIDwgKHkpKSA/ICh4KSA6ICh5KSkKKworI2RlZmluZSBV UERBVEVfUkVTVUxUKG0scixpc29yKQlcCisJKG0pID0gKGlzb3IpID8gKE1B WChtLHIpKSA6IChNSU4obSxyKSkKKwogLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKICAqCQlST1VUSU5FUyBUTyBDT01QVVRFIFNFTEVDVElW SVRJRVMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAt MjUwLDggKzI3OSwxMiBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KFBsYW5u ZXJJbmZvICpyb290LAogCSAqLwogCWlmIChoYXNfc3RhdHMoc3RhdHMsIE1W X0NMQVVTRV9UWVBFX0ZERVApKQogCXsKLQkJLyogY29sbGVjdCBhdHRyaWJ1 dGVzIHJlZmVyZW5jZWQgYnkgbXYtY29tcGF0aWJsZSBjbGF1c2VzICovCi0J CW12YXR0bnVtcyA9IGNvbGxlY3RfbXZfYXR0bnVtcyhyb290LCBjbGF1c2Vz LCB2YXJSZWxpZCwgJnJlbGlkLCBzamluZm8pOworCQkvKgorCQkgKiBDb2xs ZWN0IGF0dHJpYnV0ZXMgcmVmZXJlbmNlZCBieSBtdi1jb21wYXRpYmxlIGNs YXVzZXMgKGxvb2tpbmcKKwkJICogZm9yIGNsYXVzZXMgY29tcGF0aWJsZSB3 aXRoIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGZvciBub3cpLgorCQkgKi8K KwkJbXZhdHRudW1zID0gY29sbGVjdF9tdl9hdHRudW1zKHJvb3QsIGNsYXVz ZXMsIHZhclJlbGlkLCAmcmVsaWQsIHNqaW5mbywKKwkJCQkJCQkJCSAgIE1W X0NMQVVTRV9UWVBFX0ZERVApOwogCiAJCS8qCiAJCSAqIElmIHRoZXJlIGFy ZSBtdi1jb21wYXRpYmxlIGNsYXVzZXMsIHJlZmVyZW5jaW5nIGF0IGxlYXN0 IHR3bwpAQCAtMjY4LDYgKzMwMSw0OCBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2 aXR5KFBsYW5uZXJJbmZvICpyb290LAogCX0KIAogCS8qCisJICogQ2hlY2sg dGhhdCB0aGVyZSBhcmUgc3RhdGlzdGljcyB3aXRoIE1DViBsaXN0LiBJZiBu b3QsIHdlIGRvbid0CisJICogbmVlZCB0byB3YXN0ZSB0aW1lIHdpdGggdGhl IG9wdGltaXphdGlvbi4KKwkgKi8KKwlpZiAoaGFzX3N0YXRzKHN0YXRzLCBN Vl9DTEFVU0VfVFlQRV9NQ1YpKQorCXsKKwkJLyoKKwkJICogUmVjb2xsZWN0 IGF0dHJpYnV0ZXMgZnJvbSBtdi1jb21wYXRpYmxlIGNsYXVzZXMgKG1heWJl IHdlJ3ZlCisJCSAqIHJlbW92ZWQgc28gbWFueSBjbGF1c2VzIHdlIGhhdmUg YSBzaW5nbGUgbXYtY29tcGF0aWJsZSBhdHRudW0pLgorCQkgKiBGcm9tIG5v dyBvbiB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gTUNWLWNvbXBhdGlibGUg Y2xhdXNlcy4KKwkJICovCisJCW12YXR0bnVtcyA9IGNvbGxlY3RfbXZfYXR0 bnVtcyhyb290LCBjbGF1c2VzLCB2YXJSZWxpZCwgJnJlbGlkLCBzamluZm8s CisJCQkJCQkJCQkgICBNVl9DTEFVU0VfVFlQRV9NQ1YpOworCisJCS8qCisJ CSAqIElmIHRoZXJlIHN0aWxsIGFyZSBhdCBsZWFzdCB0d28gY29sdW1ucywg d2UnbGwgdHJ5IHRvIHNlbGVjdAorCQkgKiBhIHN1aXRhYmxlIG11bHRpdmFy aWF0ZSBzdGF0cy4KKwkJICovCisJCWlmIChibXNfbnVtX21lbWJlcnMobXZh dHRudW1zKSA+PSAyKQorCQl7CisJCQkvKiBzZWUgY2hvb3NlX212X3N0YXRp c3RpY3MoKSBmb3IgZGV0YWlscyAqLworCQkJTVZTdGF0aXN0aWNJbmZvICpt dnN0YXQgPSBjaG9vc2VfbXZfc3RhdGlzdGljcyhzdGF0cywgbXZhdHRudW1z KTsKKworCQkJaWYgKG12c3RhdCAhPSBOVUxMKQkvKiB3ZSBoYXZlIGEgbWF0 Y2hpbmcgc3RhdHMgKi8KKwkJCXsKKwkJCQkvKiBjbGF1c2VzIGNvbXBhdGli bGUgd2l0aCBtdWx0aS12YXJpYXRlIHN0YXRzICovCisJCQkJTGlzdAkqbXZj bGF1c2VzID0gTklMOworCisJCQkJLyogc3BsaXQgdGhlIGNsYXVzZWxpc3Qg aW50byByZWd1bGFyIGFuZCBtdi1jbGF1c2VzICovCisJCQkJY2xhdXNlcyA9 IGNsYXVzZWxpc3RfbXZfc3BsaXQocm9vdCwgc2ppbmZvLCBjbGF1c2VzLAor CQkJCQkJCQkJCXZhclJlbGlkLCAmbXZjbGF1c2VzLCBtdnN0YXQsCisJCQkJ CQkJCQkJTVZfQ0xBVVNFX1RZUEVfTUNWKTsKKworCQkJCS8qIHdlJ3ZlIGNo b3NlbiB0aGUgaGlzdG9ncmFtIHRvIG1hdGNoIHRoZSBjbGF1c2VzICovCisJ CQkJQXNzZXJ0KG12Y2xhdXNlcyAhPSBOSUwpOworCisJCQkJLyogY29tcHV0 ZSB0aGUgbXVsdGl2YXJpYXRlIHN0YXRzICovCisJCQkJczEgKj0gY2xhdXNl bGlzdF9tdl9zZWxlY3Rpdml0eShyb290LCBtdmNsYXVzZXMsIG12c3RhdCk7 CisJCQl9CisJCX0KKwl9CisKKwkvKgogCSAqIEluaXRpYWwgc2NhbiBvdmVy IGNsYXVzZXMuICBBbnl0aGluZyB0aGF0IGRvZXNuJ3QgbG9vayBsaWtlIGEg cG90ZW50aWFsCiAJICogcmFuZ2VxdWVyeSBjbGF1c2UgZ2V0cyBtdWx0aXBs aWVkIGludG8gczEgYW5kIGZvcmdvdHRlbi4gQW55dGhpbmcgdGhhdAogCSAq IGRvZXMgZ2V0cyBpbnNlcnRlZCBpbnRvIGFuIHJxbGlzdCBlbnRyeS4KQEAg LTkyNCwxMiArOTk5LDEyOSBAQCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxhbm5l ckluZm8gKnJvb3QsCiAJcmV0dXJuIHMxOwogfQogCisKKy8qCisgKiBFc3Rp bWF0ZSBzZWxlY3Rpdml0eSBmb3IgdGhlIGxpc3Qgb2YgTVYtY29tcGF0aWJs ZSBjbGF1c2VzLCB1c2luZworICogdXNpbmcgYSBNViBzdGF0aXN0aWNzIChj b21iaW5pbmcgYSBoaXN0b2dyYW0gYW5kIE1DViBsaXN0KS4KKyAqCisgKiBU aGlzIHNpbXBseSBwYXNzZXMgdGhlIGVzdGltYXRpb24gdG8gdGhlIE1DViBs aXN0IGFuZCB0aGVuIHRvIHRoZQorICogaGlzdG9ncmFtLCBpZiBhdmFpbGFi bGUuCisgKgorICogVE9ETyBDbGFtcCB0aGUgc2VsZWN0aXZpdHkgYnkgbWlu IG9mIHRoZSBwZXItY2xhdXNlIHNlbGVjdGl2aXRpZXMKKyAqICAgICAgKGku ZS4gdGhlIHNlbGVjdGl2aXR5IG9mIHRoZSBtb3N0IHJlc3RyaWN0aXZlIGNs YXVzZSksIGJlY2F1c2UKKyAqICAgICAgdGhhdCdzIHRoZSBtYXhpbXVtIHdl IGNhbiBldmVyIGdldCBmcm9tIEFORGVkIGxpc3Qgb2YgY2xhdXNlcy4KKyAq ICAgICAgVGhpcyBtYXkgcHJvYmFibHkgcHJldmVudCBpc3N1ZXMgd2l0aCBo aXR0aW5nIHRvbyBtYW55IGJ1Y2tldHMKKyAqICAgICAgYW5kIGxvdyBwcmVj aXNpb24gaGlzdG9ncmFtcy4KKyAqCisgKiBUT0RPIFdlIG1heSBzdXBwb3J0 IHNvbWUgYWRkaXRpb25hbCBjb25kaXRpb25zLCBtb3N0IGltcG9ydGFudGx5 CisgKiAgICAgIHRob3NlIG1hdGNoaW5nIG11bHRpcGxlIGNvbHVtbnMgKGUu Zy4gImEgPSBiIiBvciAiYSA8IGIiKS4KKyAqICAgICAgVWx0aW1hdGVseSB3 ZSBjb3VsZCB0cmFjayBtdWx0aS10YWJsZSBoaXN0b2dyYW1zIGZvciBqb2lu CisgKiAgICAgIGNhcmRpbmFsaXR5IGVzdGltYXRpb24uCisgKgorICogVE9E TyBGdXJ0aGVyIHRob3VnaHRzIG9uIHByb2Nlc3NpbmcgZXF1YWxpdHkgY2xh dXNlczogTWF5YmUgaXQnZCBiZQorICogICAgICBiZXR0ZXIgdG8gbG9vayBm b3Igc3RhdHMgKHdpdGggTUNWKSBjb3ZlcmVkIGJ5IHRoZSBlcXVhbGl0eQor ICogICAgICBjbGF1c2VzLCBiZWNhdXNlIHRoZW4gd2UgaGF2ZSBhIGNoYW5j ZSB0byBmaW5kIGFuIGV4YWN0IG1hdGNoCisgKiAgICAgIGluIHRoZSBNQ1Yg bGlzdCwgd2hpY2ggaXMgcHJldHR5IG11Y2ggdGhlIGJlc3Qgd2UgY2FuIGRv LiBXZSBtYXkKKyAqICAgICAgYWxzbyBsb29rIGF0IHRoZSBsZWFzdCBmcmVx dWVudCBNQ1YgaXRlbSwgYW5kIHVzZSBpdCBhcyBhIHVwcGVyCisgKiAgICAg IGJvdW5kYXJ5IGZvciB0aGUgc2VsZWN0aXZpdHkgKGhhZCB0aGVyZSBiZWVu IGEgbW9yZSBmcmVxdWVudAorICogICAgICBpdGVtLCBpdCdkIGJlIGluIHRo ZSBNQ1YgbGlzdCkuCisgKgorICogVE9ETyBUaGVyZSBhcmUgc2V2ZXJhbCBv cHRpb25zIGZvciAnc2FuaXR5IGNsYW1waW5nJyB0aGUgZXN0aW1hdGVzLgor ICoKKyAqICAgICAgRmlyc3QsIGlmIHdlIGhhdmUgc2VsZWN0aXZpdGllcyBm b3IgZWFjaCBjb25kaXRpb24sIHRoZW4KKyAqCisgKiAgICAgICAgICBQKEEs QikgPD0gTUlOKFAoQSksIFAoQikpCisgKgorICogICAgICBCZWNhdXNlIGFk ZGl0aW9uYWwgY29uZGl0aW9ucyAoY29ubmVjdGVkIGJ5IEFORCkgY2FuIG9u bHkgbG93ZXIKKyAqICAgICAgdGhlIHByb2JhYmlsaXR5LgorICoKKyAqICAg ICAgU28gd2UgY2FuIGRvIHNvbWUgYmFzaWMgc2FuaXR5IGNoZWNrcyB1c2lu ZyB0aGUgc2luZ2xlLXZhcmlhdGUKKyAqICAgICAgc3RhdHMgKHRoZSBvbmVz IHdlIGhhdmUgcmlnaHQgbm93KS4KKyAqCisgKiAgICAgIFNlY29uZCwgd2hl biB3ZSBoYXZlIG11bHRpdmFyaWF0ZSBzdGF0cyB3aXRoIGEgTUNWIGxpc3Qs IHRoZW4KKyAqCisgKiAgICAgIChhKSBpZiB3ZSBoYXZlIGEgZnVsbCBlcXVh bGl0eSBjb25kaXRpb24gKG9uZSBlcXVhbGl0eSBjb25kaXRpb24KKyAqICAg ICAgICAgIG9uIGVhY2ggY29sdW1uKSBhbmQgd2UgZm91bmQgYSBtYXRjaCBp biB0aGUgTUNWIGxpc3QsIHRoaXMgaXMKKyAqICAgICAgICAgIHRoZSBzZWxl Y3Rpdml0eSAoYW5kIGl0J3Mgc3VwcG9zZWQgdG8gYmUgZXhhY3QpCisgKgor ICogICAgICAoYikgaWYgd2UgaGF2ZSBhIGZ1bGwgZXF1YWxpdHkgY29uZGl0 aW9uIGFuZCB3ZSBoYXZlbid0IGZvdW5kIGEKKyAqICAgICAgICAgIG1hdGNo IGluIHRoZSBNQ1YgbGlzdCwgdGhlbiB0aGUgc2VsZWN0aXZpdHkgaXMgYmVs b3cgdGhlCisgKiAgICAgICAgICBsb3dlc3Qgc2VsZWN0aXZpdHkgaW4gdGhl IE1DViBsaXN0CisgKgorICogICAgICAoYykgaWYgd2UgaGF2ZSBhIGVxdWFs aXR5IGNvbmRpdGlvbiAobm90IGZ1bGwpLCB3ZSBjYW4gc3RpbGwKKyAqICAg ICAgICAgIHNlYXJjaCB0aGUgTUNWIGZvciBtYXRjaGVzIGFuZCB1c2UgdGhl IHN1bSBvZiBwcm9iYWJpbGl0aWVzCisgKiAgICAgICAgICBhcyBhIGxvd2Vy IGJvdW5kYXJ5IGZvciB0aGUgaGlzdG9ncmFtIChpZiB0aGVyZSBhcmUgbm8K KyAqICAgICAgICAgIG1hdGNoZXMgaW4gdGhlIE1DViBsaXN0LCB0aGVuIHdl IGhhdmUgbm8gYm91bmRhcnkpCisgKgorICogICAgICBUaGlyZCwgaWYgdGhl cmUgYXJlIG11bHRpcGxlIChjb21iaW5hdGlvbnMgb2YpIG11bHRpdmFyaWF0 ZQorICogICAgICBzdGF0cyBmb3IgYSBzZXQgb2YgY2xhdXNlcywgd2UgbWF5 IGNvbXB1dGUgYWxsIG9mIHRoZW0gYW5kIHRoZW4KKyAqICAgICAgc29tZWhv dyBhZ2dyZWdhdGUgdGhlbSAtIGUuZy4gYnkgY2hvb3NpbmcgdGhlIG1pbmlt dW0sIG1lZGlhbiBvcgorICogICAgICBhdmVyYWdlLiBUaGUgc3RhdHMgYXJl IHN1c2NlcHRpYmxlIHRvIG92ZXJlc3RpbWF0aW9uIChiZWNhdXNlCisgKiAg ICAgIHdlIHRha2UgNTAlIG9mIHRoZSBidWNrZXQgZm9yIHBhcnRpYWwgbWF0 Y2hlcykuIFNvbWUgc3RhdHMgbWF5CisgKiAgICAgIGdpdmUgYmV0dGVyIGVz dGltYXRlcyB0aGFuIG90aGVycywgYnV0IGl0J3MgdmVyeSBkaWZmaWN1bHQg dG8KKyAqICAgICAgc2F5IHRoYXQgaW4gYWR2YW5jZSB3aGljaCBvbmUgaXMg dGhlIGJlc3QgKGl0IGRlcGVuZHMgb24gdGhlCisgKiAgICAgIG51bWJlciBv ZiBidWNrZXRzLCBudW1iZXIgb2YgYWRkaXRpb25hbCBjb2x1bW5zIG5vdCBy ZWZlcmVuY2VkCisgKiAgICAgIGluIHRoZSBjbGF1c2VzLCB0eXBlIG9mIGNv bmRpdGlvbiBldGMuKS4KKyAqCisgKiAgICAgIFNvIHdlIG1heSBjb21wdXRl IHRoZW0gYWxsIGFuZCB0aGVuIGNob29zZSBhIHNhbmUgYWdncmVnYXRpb24K KyAqICAgICAgKG1pbmltdW0gc2VlbXMgbGlrZSBhIGdvb2QgYXBwcm9hY2gp LiBPZiBjb3Vyc2UsIHRoaXMgbWF5IHJlc3VsdAorICogICAgICBpbiBsb25n ZXIgLyBtb3JlIGV4cGVuc2l2ZSBlc3RpbWF0aW9uIChDUFUtd2lzZSksIGJ1 dCBpdCBtYXkgYmUKKyAqICAgICAgd29ydGggaXQuCisgKgorICogICAgICBJ dCdzIHBvc3NpYmxlIHRvIGFkZCBhIEdVQyBjaG9vc2luZyB3aGV0aGVyIHRv IGRvIGEgJ3NpbXBsZScKKyAqICAgICAgKHVzaW5nIGEgc2luZ2xlIHN0YXRz IGV4cGVjdGVkIHRvIGdpdmUgdGhlIGJlc3QgZXN0aW1hdGUpIGFuZAorICog ICAgICAnY29tcGxleCcgKGNvbWJpbmluZyB0aGUgbXVsdGlwbGUgZXN0aW1h dGVzKS4KKyAqCisgKiAgICAgICAgICBtdWx0aXZhcmlhdGVfZXN0aW1hdGVz ID0gKHNpbXBsZXxmdWxsKQorICoKKyAqICAgICAgQWxzbywgdGhpcyBtaWdo dCBiZSBlbmFibGVkIGF0IGEgdGFibGUgbGV2ZWwsIGJ5IHNvbWV0aGluZyBs aWtlCisgKgorICogICAgICAgICAgQUxURVIgVEFCTEUgLi4uIFNFVCBTVEFU SVNUSUNTIChzaW1wbGV8ZnVsbCkKKyAqCisgKiAgICAgIFdoaWNoIHdvdWxk IG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIHRoaXMgb25seSBmb3IgdGhlIHRh YmxlcworICogICAgICB3aGVyZSB0aGUgc2ltcGxlIGFwcHJvYWNoIGRvZXMg bm90IHdvcmsuCisgKgorICogICAgICBBbHNvLCB0aGVyZSBhcmUgd2F5cyB0 byBvcHRpbWl6ZSB0aGlzIGFsZ29yaXRobWljYWxseS4gRS5nLiB3ZQorICog ICAgICBtYXkgdHJ5IHRvIGdldCBhbiBlc3RpbWF0ZSBmcm9tIGEgbWF0Y2hp bmcgTUNWIGxpc3QgZmlyc3QsIGFuZAorICogICAgICBpZiB3ZSBoYXBwZW4g dG8gZ2V0IGEgImZ1bGwgZXF1YWxpdHkgbWF0Y2giIHdlIG1heSBzdG9wIGNv bXB1dGluZworICogICAgICB0aGUgZXN0aW1hdGVzIGZyb20gb3RoZXIgc3Rh dHMgKGZvciB0aGlzIGNvbmRpdGlvbikgYmVjYXVzZQorICogICAgICB0aGF0 J3MgcHJvYmFibHkgdGhlIGJlc3QgZXN0aW1hdGUgd2UgY2FuIHJlYWxseSBn ZXQuCisgKgorICogVE9ETyBXaGVuIGFwcGx5aW5nIHRoZSBjbGF1c2VzIHRv IHRoZSBoaXN0b2dyYW0vTUNWIGxpc3QsIHdlIGNhbiBkbworICogICAgICB0 aGF0IGZyb20gdGhlIG1vc3Qgc2VsZWN0aXZlIGNsYXVzZXMgZmlyc3QsIGJl Y2F1c2UgdGhhdCdsbAorICogICAgICBlbGltaW5hdGUgdGhlIGJ1Y2tldHMv aXRlbXMgc29vbmVyIChzbyB3ZSdsbCBiZSBhYmxlIHRvIHNraXAKKyAqICAg ICAgdGhlbSB3aXRob3V0IGluc3BlY3Rpb24sIHdoaWNoIGlzIG1vcmUgZXhw ZW5zaXZlKS4gQnV0IHRoaXMKKyAqICAgICAgcmVxdWlyZXMgcmVhbGx5IGtu b3dpbmcgdGhlIHBlci1jbGF1c2Ugc2VsZWN0aXZpdGllcyBpbiBhZHZhbmNl LAorICogICAgICBhbmQgdGhhdCdzIG5vdCB3aGF0IHdlIGRvIG5vdy4KKyAq Lworc3RhdGljIFNlbGVjdGl2aXR5CitjbGF1c2VsaXN0X212X3NlbGVjdGl2 aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBNVlN0YXRp c3RpY0luZm8gKm12c3RhdHMpCit7CisJYm9vbCBmdWxsbWF0Y2ggPSBmYWxz ZTsKKworCS8qCisJICogTG93ZXN0IGZyZXF1ZW5jeSBpbiB0aGUgTUNWIGxp c3QgKG1heSBiZSB1c2VkIGFzIGFuIHVwcGVyIGJvdW5kCisJICogZm9yIGZ1 bGwgZXF1YWxpdHkgY29uZGl0aW9ucyB0aGF0IGRpZCBub3QgbWF0Y2ggYW55 IE1DViBpdGVtKS4KKwkgKi8KKwlTZWxlY3Rpdml0eSBtY3ZfbG93ID0gMC4w OworCisJLyogVE9ETyBFdmFsdWF0ZSBzaW1wbGUgMUQgc2VsZWN0aXZpdGll cywgdXNlIHRoZSBzbWFsbGVzdCBvbmUgYXMKKwkgKiAgICAgIGFuIHVwcGVy IGJvdW5kLCBwcm9kdWN0IGFzIGxvd2VyIGJvdW5kLCBhbmQgc29ydCB0aGUK KwkgKiAgICAgIGNsYXVzZXMgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHNlbGVj dGl2aXR5ICh0byBvcHRpbWl6ZSB0aGUKKwkgKiAgICAgIE1DVi9oaXN0b2dy YW0gZXZhbHVhdGlvbikuCisJICovCisKKwkvKiBFdmFsdWF0ZSB0aGUgTUNW IHNlbGVjdGl2aXR5ICovCisJcmV0dXJuIGNsYXVzZWxpc3RfbXZfc2VsZWN0 aXZpdHlfbWN2bGlzdChyb290LCBjbGF1c2VzLCBtdnN0YXRzLAorCQkJCQkJ CQkJCSAgICZmdWxsbWF0Y2gsICZtY3ZfbG93KTsKK30KKwogLyoKICAqIENv bGxlY3QgYXR0cmlidXRlcyBmcm9tIG12LWNvbXBhdGlibGUgY2xhdXNlcy4K ICAqLwogc3RhdGljIEJpdG1hcHNldCAqCiBjb2xsZWN0X212X2F0dG51bXMo UGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIE9pZCB2YXJSZWxp ZCwKLQkJCQkgICBJbmRleCAqcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAqc2pp bmZvKQorCQkJCSAgIEluZGV4ICpyZWxpZCwgU3BlY2lhbEpvaW5JbmZvICpz amluZm8sIGludCB0eXBlcykKIHsKIAlCaXRtYXBzZXQgICphdHRudW1zID0g TlVMTDsKIAlMaXN0Q2VsbCAgICpsOwpAQCAtOTQ1LDEyICsxMTM3LDExIEBA IGNvbGxlY3RfbXZfYXR0bnVtcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAq Y2xhdXNlcywgT2lkIHZhclJlbGlkLAogCSAqLwogCWZvcmVhY2ggKGwsIGNs YXVzZXMpCiAJewotCQlBdHRyTnVtYmVyIGF0dG51bTsKIAkJTm9kZQkgICAq Y2xhdXNlID0gKE5vZGUgKikgbGZpcnN0KGwpOwogCi0JCS8qIGlnbm9yZSB0 aGUgcmVzdWx0IGZvciBub3cgLSB3ZSBvbmx5IG5lZWQgdGhlIGluZm8gKi8K LQkJaWYgKGNsYXVzZV9pc19tdl9jb21wYXRpYmxlKHJvb3QsIGNsYXVzZSwg dmFyUmVsaWQsIHJlbGlkLCAmYXR0bnVtLCBzamluZm8pKQotCQkJYXR0bnVt cyA9IGJtc19hZGRfbWVtYmVyKGF0dG51bXMsIGF0dG51bSk7CisJCS8qIGln bm9yZSB0aGUgcmVzdWx0IGhlcmUgLSB3ZSBvbmx5IG5lZWQgdGhlIGF0dG51 bXMgKi8KKwkJY2xhdXNlX2lzX212X2NvbXBhdGlibGUocm9vdCwgY2xhdXNl LCB2YXJSZWxpZCwgcmVsaWQsICZhdHRudW1zLAorCQkJCQkJCQlzamluZm8s IHR5cGVzKTsKIAl9CiAKIAkvKgpAQCAtOTY5LDYgKzExNjAsMTg4IEBAIGNv bGxlY3RfbXZfYXR0bnVtcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xh dXNlcywgT2lkIHZhclJlbGlkLAogfQogCiAvKgorICogV2UncmUgbG9va2lu ZyBmb3Igc3RhdGlzdGljcyBtYXRjaGluZyBhdCBsZWFzdCAyIGF0dHJpYnV0 ZXMsCisgKiByZWZlcmVuY2VkIGluIHRoZSBjbGF1c2VzIGNvbXBhdGlibGUg d2l0aCBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcy4KKyAqIFRoZSBjdXJyZW50 IHNlbGVjdGlvbiBjcml0ZXJpYSBpcyB2ZXJ5IHNpbXBsZSAtIHdlIGNob29z ZSB0aGUKKyAqIHN0YXRpc3RpY3MgcmVmZXJlbmNpbmcgdGhlIG1vc3QgYXR0 cmlidXRlcy4KKyAqCisgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RhdGlz dGljcyByZWZlcmVuY2luZyB0aGUgc2FtZSBudW1iZXIgb2YKKyAqIGNvbHVt bnMgKGZyb20gdGhlIGNsYXVzZXMpLCB0aGUgb25lIHdpdGggbGVzcyBzb3Vy Y2UgY29sdW1ucworICogKGFzIGxpc3RlZCBpbiB0aGUgQUREIFNUQVRJU1RJ Q1Mgd2hlbiBjcmVhdGluZyB0aGUgc3RhdGlzdGljcykgd2lucy4KKyAqIE90 aGVyIHdpc2UgdGhlIGZpcnN0IG9uZSB3aW5zLgorICoKKyAqIFRoaXMgaXMg YSB2ZXJ5IHNpbXBsZSBjcml0ZXJpYSwgYW5kIGhhcyBzZXZlcmFsIHdlYWtu ZXNzZXM6CisgKgorICogKGEpIGRvZXMgbm90IGNvbnNpZGVyIHRoZSBhY2N1 cmFjeSBvZiB0aGUgc3RhdGlzdGljcworICoKKyAqICAgICBJZiB0aGVyZSBh cmUgdHdvIGhpc3RvZ3JhbXMgYnVpbHQgb24gdGhlIHNhbWUgc2V0IG9mIGNv bHVtbnMsCisgKiAgICAgYnV0IG9uZSBoYXMgMTAwIGJ1Y2tldHMgYW5kIHRo ZSBvdGhlciBvbmUgaGFzIDEwMDAgYnVja2V0cyAodGh1cworICogICAgIGxp a2VseSBwcm92aWRpbmcgYmV0dGVyIGVzdGltYXRlcyksIHRoaXMgaXMgbm90 IGN1cnJlbnRseQorICogICAgIGNvbnNpZGVyZWQuCisgKgorICogKGIpIGRv ZXMgbm90IGNvbnNpZGVyIHRoZSB0eXBlIG9mIHN0YXRpc3RpY3MKKyAqCisg KiAgICAgSWYgdGhlcmUgYXJlIHRocmVlIHN0YXRpc3RpY3MgLSBvbmUgY29u dGFpbmluZyBqdXN0IGEgTUNWIGxpc3QsCisgKiAgICAgYW5vdGhlciBvbmUg d2l0aCBqdXN0IGEgaGlzdG9ncmFtIGFuZCBhIHRoaXJkIG9uZSB3aXRoIGJv dGgsCisgKiAgICAgdGhpcyBpcyBub3QgY29uc2lkZXJlZC4KKyAqCisgKiAo YykgZG9lcyBub3QgY29uc2lkZXIgdGhlIG51bWJlciBvZiBjbGF1c2VzCisg KgorICogICAgIEFzIGV4cGxhaW5lZCwgb25seSB0aGUgbnVtYmVyIG9mIHJl ZmVyZW5jZWQgYXR0cmlidXRlcyBjb3VudHMsCisgKiAgICAgc28gaWYgdGhl cmUgYXJlIG11bHRpcGxlIGNsYXVzZXMgb24gYSBzaW5nbGUgYXR0cmlidXRl LCB0aGlzCisgKiAgICAgc3RpbGwgY291bnRzIGFzIGEgc2luZ2xlIGF0dHJp YnV0ZS4KKyAqCisgKiAoZCkgZG9lcyBub3QgY29uc2lkZXIgdHlwZSBvZiBj b25kaXRpb24KKyAqCisgKiAgICAgU29tZSBjbGF1c2VzIG1heSB3b3JrIGJl dHRlciB3aXRoIHNvbWUgc3RhdGlzdGljcyAtIGZvciBleGFtcGxlCisgKiAg ICAgZXF1YWxpdHkgY2xhdXNlcyBwcm9iYWJseSB3b3JrIGJldHRlciB3aXRo IE1DViBsaXN0cyB0aGFuIHdpdGgKKyAqICAgICBoaXN0b2dyYW1zLiBCdXQg SVMgW05PVF0gTlVMTCBjb25kaXRpb25zIG1heSBvZnRlbiB3b3JrIGJldHRl cgorICogICAgIHdpdGggaGlzdG9ncmFtcyAodGhhbmtzIHRvIE5VTEwtYnVj a2V0cykuCisgKgorICogU28gZm9yIGV4YW1wbGUgd2l0aCBmaXZlIFdIRVJF IGNvbmRpdGlvbnMKKyAqCisgKiAgICAgV0hFUkUgKGEgPSAxKSBBTkQgKGIg PSAxKSBBTkQgKGMgPSAxKSBBTkQgKGQgPSAxKSBBTkQgKGUgPSAxKQorICoK KyAqIGFuZCBzdGF0aXN0aWNzIG9uIChhLGIpLCAoYSxiLGUpIGFuZCAoYSxi LGMsZCksIHRoZSBsYXN0IG9uZSB3aWxsIGJlCisgKiBzZWxlY3RlZCBhcyBp dCByZWZlcmVuY2VzIHRoZSBtb3N0IGNvbHVtbnMuCisgKgorICogT25jZSB3 ZSBoYXZlIHNlbGVjdGVkIHRoZSBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcywg d2Ugc3BsaXQgdGhlIGxpc3QKKyAqIG9mIGNsYXVzZXMgaW50byB0d28gcGFy dHMgLSBjb25kaXRpb25zIHRoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUK KyAqIHNlbGVjdGVkIHN0YXRzLCBhbmQgY29uZGl0aW9ucyBhcmUgZXN0aW1h dGVkIHVzaW5nIHNpbXBsZSBzdGF0aXN0aWNzLgorICoKKyAqIEZyb20gdGhl IGV4YW1wbGUgYWJvdmUsIGNvbmRpdGlvbnMKKyAqCisgKiAgICAgKGEgPSAx KSBBTkQgKGIgPSAxKSBBTkQgKGMgPSAxKSBBTkQgKGQgPSAxKQorICoKKyAq IHdpbGwgYmUgZXN0aW1hdGVkIHVzaW5nIHRoZSBtdWx0aXZhcmlhdGUgc3Rh dGlzdGljcyAoYSxiLGMsZCkgd2hpbGUKKyAqIHRoZSBsYXN0IGNvbmRpdGlv biAoZSA9IDEpIHdpbGwgZ2V0IGVzdGltYXRlZCB1c2luZyB0aGUgcmVndWxh ciBvbmVzLgorICoKKyAqIFRoZXJlIGFyZSB2YXJpb3VzIGFsdGVybmF0aXZl IHNlbGVjdGlvbiBjcml0ZXJpYSAoZS5nLiBjb3VudGluZworICogY29uZGl0 aW9ucyBpbnN0ZWFkIG9mIGp1c3QgcmVmZXJlbmNlZCBhdHRyaWJ1dGVzKSwg YnV0IGV2ZW50dWFsbHkKKyAqIHRoZSBiZXN0IG9wdGlvbiBzaG91bGQgYmUg dG8gY29tYmluZSBtdWx0aXBsZSBzdGF0aXN0aWNzLiBCdXQgdGhhdCdzCisg KiBtdWNoIGhhcmRlciB0byBkbyBjb3JyZWN0bHkuCisgKgorICogVE9ETyBT ZWxlY3QgbXVsdGlwbGUgc3RhdGlzdGljcyBhbmQgY29tYmluZSB0aGVtIHdo ZW4gY29tcHV0aW5nCisgKiAgICAgIHRoZSBlc3RpbWF0ZS4KKyAqCisgKiBU T0RPIFRoaXMgd2lsbCBwcm9iYWJseSBoYXZlIHRvIGNvbnNpZGVyIGNvbXBh dGliaWxpdHkgb2YgY2xhdXNlcywKKyAqICAgICAgYmVjYXVzZSAnZGVwZW5k ZW5jaWVzJyB3aWxsIHByb2JhYmx5IHdvcmsgb25seSB3aXRoIGVxdWFsaXR5 CisgKiAgICAgIGNsYXVzZXMuCisgKi8KK3N0YXRpYyBNVlN0YXRpc3RpY0lu Zm8gKgorY2hvb3NlX212X3N0YXRpc3RpY3MoTGlzdCAqc3RhdHMsIEJpdG1h cHNldCAqYXR0bnVtcykKK3sKKwlpbnQgaTsKKwlMaXN0Q2VsbCAgICpsYzsK KworCU1WU3RhdGlzdGljSW5mbyAqY2hvaWNlID0gTlVMTDsKKworCWludCBj dXJyZW50X21hdGNoZXMgPSAxOwkJCQkJCS8qIGdvYWwgIzE6IG1heGltaXpl ICovCisJaW50IGN1cnJlbnRfZGltcyA9IChNVlNUQVRTX01BWF9ESU1FTlNJ T05TKzEpOwkvKiBnb2FsICMyOiBtaW5pbWl6ZSAqLworCisJLyoKKwkgKiBX YWxrIHRocm91Z2ggdGhlIHN0YXRpc3RpY3MgKHNpbXBsZSBhcnJheSB3aXRo IG5tdnN0YXRzIGVsZW1lbnRzKQorCSAqIGFuZCBmb3IgZWFjaCBvbmUgY291 bnQgdGhlIHJlZmVyZW5jZWQgYXR0cmlidXRlcyAoZW5jb2RlZCBpbgorCSAq IHRoZSAnYXR0bnVtcycgYml0bWFwKS4KKwkgKi8KKwlmb3JlYWNoIChsYywg c3RhdHMpCisJeworCQlNVlN0YXRpc3RpY0luZm8gKmluZm8gPSAoTVZTdGF0 aXN0aWNJbmZvICopbGZpcnN0KGxjKTsKKworCQkvKiBjb2x1bW5zIG1hdGNo aW5nIHRoaXMgc3RhdGlzdGljcyAqLworCQlpbnQgbWF0Y2hlcyA9IDA7CisK KwkJaW50MnZlY3RvciAqIGF0dHJzID0gaW5mby0+c3Rha2V5czsKKwkJaW50 CW51bWF0dHJzID0gYXR0cnMtPmRpbTE7CisKKwkJLyogc2tpcCBkZXBlbmRl bmNpZXMtb25seSBzdGF0cyAqLworCQlpZiAoISBpbmZvLT5tY3ZfYnVpbHQp CisJCQljb250aW51ZTsKKworCQkvKiBjb3VudCBjb2x1bW5zIGNvdmVyZWQg YnkgdGhlIGhpc3RvZ3JhbSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtYXR0 cnM7IGkrKykKKwkJCWlmIChibXNfaXNfbWVtYmVyKGF0dHJzLT52YWx1ZXNb aV0sIGF0dG51bXMpKQorCQkJCW1hdGNoZXMrKzsKKworCQkvKgorCQkgKiBV c2UgdGhpcyBzdGF0aXN0aWNzIHdoZW4gaXQgaW1wcm92ZXMgdGhlIG51bWJl ciBvZiBtYXRjaGVzIG9yCisJCSAqIHdoZW4gaXQgbWF0Y2hlcyB0aGUgc2Ft ZSBudW1iZXIgb2YgYXR0cmlidXRlcyBidXQgaXMgc21hbGxlci4KKwkJICov CisJCWlmICgobWF0Y2hlcyA+IGN1cnJlbnRfbWF0Y2hlcykgfHwKKwkJCSgo bWF0Y2hlcyA9PSBjdXJyZW50X21hdGNoZXMpICYmIChjdXJyZW50X2RpbXMg PiBudW1hdHRycykpKQorCQl7CisJCQljaG9pY2UgPSBpbmZvOworCQkJY3Vy cmVudF9tYXRjaGVzID0gbWF0Y2hlczsKKwkJCWN1cnJlbnRfZGltcyA9IG51 bWF0dHJzOworCQl9CisJfQorCisJcmV0dXJuIGNob2ljZTsKK30KKworCisv KgorICogVGhpcyBzcGxpdHMgdGhlIGNsYXVzZXMgbGlzdCBpbnRvIHR3byBw YXJ0cyAtIG9uZSBjb250YWluaW5nIGNsYXVzZXMKKyAqIHRoYXQgd2lsbCBi ZSBldmFsdWF0ZWQgdXNpbmcgdGhlIGNob3NlbiBzdGF0aXN0aWNzLCBhbmQg dGhlIHJlbWFpbmluZworICogY2xhdXNlcyAoZWl0aGVyIG5vbi1tdmNvbXBh dGlibGUsIG9yIG5vdCByZWxhdGVkIHRvIHRoZSBoaXN0b2dyYW0pLgorICov CitzdGF0aWMgTGlzdCAqCitjbGF1c2VsaXN0X212X3NwbGl0KFBsYW5uZXJJ bmZvICpyb290LCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJCQkJTGlz dCAqY2xhdXNlcywgT2lkIHZhclJlbGlkLCBMaXN0ICoqbXZjbGF1c2VzLAor CQkJCQlNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMsIGludCB0eXBlcykKK3sK KwlpbnQgaTsKKwlMaXN0Q2VsbCAqbDsKKwlMaXN0CSAqbm9uX212Y2xhdXNl cyA9IE5JTDsKKworCS8qIEZJWE1FIGlzIHRoZXJlIGEgYmV0dGVyIHdheSB0 byBnZXQgaW5mbyBvbiBpbnQydmVjdG9yPyAqLworCWludDJ2ZWN0b3IgKiBh dHRycyA9IG12c3RhdHMtPnN0YWtleXM7CisJaW50CW51bWF0dHJzID0gbXZz dGF0cy0+c3Rha2V5cy0+ZGltMTsKKworCUJpdG1hcHNldCAqbXZhdHRudW1z ID0gTlVMTDsKKworCS8qIGJ1aWxkIGJpdG1hcCBvZiBhdHRyaWJ1dGVzIGNv dmVyZWQgYnkgdGhlIHN0YXRzLCBzbyB3ZSBjYW4KKwkgKiBkbyBibXNfaXNf c3Vic2V0IGxhdGVyICovCisJZm9yIChpID0gMDsgaSA8IG51bWF0dHJzOyBp KyspCisJCW12YXR0bnVtcyA9IGJtc19hZGRfbWVtYmVyKG12YXR0bnVtcywg YXR0cnMtPnZhbHVlc1tpXSk7CisKKwkvKiBlcmFzZSB0aGUgbGlzdCBvZiBt di1jb21wYXRpYmxlIGNsYXVzZXMgKi8KKwkqbXZjbGF1c2VzID0gTklMOwor CisJZm9yZWFjaCAobCwgY2xhdXNlcykKKwl7CisJCWJvb2wJCW1hdGNoID0g ZmFsc2U7CS8qIGJ5IGRlZmF1bHQgbm90IG12LWNvbXBhdGlibGUgKi8KKwkJ Qml0bWFwc2V0CSphdHRudW1zID0gTlVMTDsKKwkJTm9kZQkgICAqY2xhdXNl ID0gKE5vZGUgKikgbGZpcnN0KGwpOworCisJCWlmIChjbGF1c2VfaXNfbXZf Y29tcGF0aWJsZShyb290LCBjbGF1c2UsIHZhclJlbGlkLCBOVUxMLAorCQkJ CQkJCQkJJmF0dG51bXMsIHNqaW5mbywgdHlwZXMpKQorCQl7CisJCQkvKiBh cmUgYWxsIHRoZSBhdHRyaWJ1dGVzIHBhcnQgb2YgdGhlIHNlbGVjdGVkIHN0 YXRzPyAqLworCQkJaWYgKGJtc19pc19zdWJzZXQoYXR0bnVtcywgbXZhdHRu dW1zKSkKKwkJCQltYXRjaCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBU aGUgY2xhdXNlIG1hdGNoZXMgdGhlIHNlbGVjdGVkIHN0YXRzLCBzbyBwdXQg aXQgdG8gdGhlIGxpc3QKKwkJICogb2YgbXYtY29tcGF0aWJsZSBjbGF1c2Vz LiBPdGhlcndpc2UsIGtlZXAgaXQgaW4gdGhlIGxpc3Qgb2YKKwkJICogJ3Jl Z3VsYXInIGNsYXVzZXMgKHRoYXQgbWF5IGJlIHNlbGVjdGVkIGxhdGVyKS4K KwkJICovCisJCWlmIChtYXRjaCkKKwkJCSptdmNsYXVzZXMgPSBsYXBwZW5k KCptdmNsYXVzZXMsIGNsYXVzZSk7CisJCWVsc2UKKwkJCW5vbl9tdmNsYXVz ZXMgPSBsYXBwZW5kKG5vbl9tdmNsYXVzZXMsIGNsYXVzZSk7CisJfQorCisJ LyoKKwkgKiBQZXJmb3JtIHJlZ3VsYXIgZXN0aW1hdGlvbiB1c2luZyB0aGUg Y2xhdXNlcyBpbmNvbXBhdGlibGUKKwkgKiB3aXRoIHRoZSBjaG9zZW4gaGlz dG9ncmFtIChvciBNViBzdGF0cyBpbiBnZW5lcmFsKS4KKwkgKi8KKwlyZXR1 cm4gbm9uX212Y2xhdXNlczsKKworfQorCisvKgogICogRGV0ZXJtaW5lcyB3 aGV0aGVyIHRoZSBjbGF1c2UgaXMgY29tcGF0aWJsZSB3aXRoIG11bHRpdmFy aWF0ZSBzdGF0cywKICAqIGFuZCBpZiBpdCBpcywgcmV0dXJucyBzb21lIGFk ZGl0aW9uYWwgaW5mb3JtYXRpb24gLSB2YXJubyAoaW5kZXgKICAqIGludG8g c2ltcGxlX3J0ZV9hcnJheSkgYW5kIGEgYml0bWFwIG9mIGF0dHJpYnV0ZXMu IFRoaXMgaXMgdGhlbgpAQCAtOTg3LDggKzEzNjAsMTIgQEAgY29sbGVjdF9t dl9hdHRudW1zKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBP aWQgdmFyUmVsaWQsCiAgKi8KIHN0YXRpYyBib29sCiBjbGF1c2VfaXNfbXZf Y29tcGF0aWJsZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqY2xhdXNlLCBP aWQgdmFyUmVsaWQsCi0JCQkJCQlJbmRleCAqcmVsaWQsIEF0dHJOdW1iZXIg KmF0dG51bSwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCisJCQkJCQlJbmRl eCAqcmVsaWQsIEJpdG1hcHNldCAqKmF0dG51bXMsIFNwZWNpYWxKb2luSW5m byAqc2ppbmZvLAorCQkJCQkJaW50IHR5cGVzKQogeworCVJlbGlkcyBjbGF1 c2VfcmVsaWRzOworCVJlbGlkcyBsZWZ0X3JlbGlkczsKKwlSZWxpZHMgcmln aHRfcmVsaWRzOwogCiAJaWYgKElzQShjbGF1c2UsIFJlc3RyaWN0SW5mbykp CiAJewpAQCAtOTk4LDgyICsxMzc1LDE3NiBAQCBjbGF1c2VfaXNfbXZfY29t cGF0aWJsZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqY2xhdXNlLCBPaWQg dmFyUmVsaWQsCiAJCWlmIChyaW5mby0+cHNldWRvY29uc3RhbnQpCiAJCQly ZXR1cm4gZmFsc2U7CiAKLQkJLyogbm8gc3VwcG9ydCBmb3IgT1IgY2xhdXNl cyBhdCB0aGlzIHBvaW50ICovCi0JCWlmIChyaW5mby0+b3JjbGF1c2UpCi0J CQlyZXR1cm4gZmFsc2U7Ci0KIAkJLyogZ2V0IHRoZSBhY3R1YWwgY2xhdXNl IGZyb20gdGhlIFJlc3RyaWN0SW5mbyAoaXQncyBub3QgYW4gT1IgY2xhdXNl KSAqLwogCQljbGF1c2UgPSAoTm9kZSopcmluZm8tPmNsYXVzZTsKIAotCQkv KiBvbmx5IHNpbXBsZSBvcGNsYXVzZXMgYXJlIGNvbXBhdGlibGUgd2l0aCBt dWx0aXZhcmlhdGUgc3RhdHMgKi8KLQkJaWYgKCEgaXNfb3BjbGF1c2UoY2xh dXNlKSkKLQkJCXJldHVybiBmYWxzZTsKLQogCQkvKiB3ZSBkb24ndCBzdXBw b3J0IGpvaW4gY29uZGl0aW9ucyBhdCB0aGlzIG1vbWVudCAqLwogCQlpZiAo dHJlYXRfYXNfam9pbl9jbGF1c2UoY2xhdXNlLCByaW5mbywgdmFyUmVsaWQs IHNqaW5mbykpCiAJCQlyZXR1cm4gZmFsc2U7CiAKKwkJY2xhdXNlX3JlbGlk cyA9IHJpbmZvLT5jbGF1c2VfcmVsaWRzOworCQlsZWZ0X3JlbGlkcyA9IHJp bmZvLT5sZWZ0X3JlbGlkczsKKwkJcmlnaHRfcmVsaWRzID0gcmluZm8tPnJp Z2h0X3JlbGlkczsKKwl9CisJZWxzZSBpZiAoaXNfb3BjbGF1c2UoY2xhdXNl KSAmJiBsaXN0X2xlbmd0aCgoKE9wRXhwciAqKSBjbGF1c2UpLT5hcmdzKSA9 PSAyKQorCXsKKwkJbGVmdF9yZWxpZHMgPSBwdWxsX3Zhcm5vcyhnZXRfbGVm dG9wKChFeHByKiljbGF1c2UpKTsKKwkJcmlnaHRfcmVsaWRzID0gcHVsbF92 YXJub3MoZ2V0X3JpZ2h0b3AoKEV4cHIqKWNsYXVzZSkpOworCisJCWNsYXVz ZV9yZWxpZHMgPSBibXNfdW5pb24obGVmdF9yZWxpZHMsCisJCQkJCQkJCSAg cmlnaHRfcmVsaWRzKTsKKwl9CisJZWxzZQorCXsKKwkJLyogTm90IGEgYmlu YXJ5IG9wY2xhdXNlLCBzbyBtYXJrIGxlZnQvcmlnaHQgcmVsaWQgc2V0cyBh cyBlbXB0eSAqLworCQlsZWZ0X3JlbGlkcyA9IE5VTEw7CisJCXJpZ2h0X3Jl bGlkcyA9IE5VTEw7CisJCS8qIGFuZCBnZXQgdGhlIHRvdGFsIHJlbGlkIHNl dCB0aGUgaGFyZCB3YXkgKi8KKwkJY2xhdXNlX3JlbGlkcyA9IHB1bGxfdmFy bm9zKChOb2RlICopIGNsYXVzZSk7CisJfQorCisJLyoKKwkgKiBPbmx5IHNp bXBsZSBvcGNsYXVzZXMgYW5kIElTIE5VTEwgdGVzdHMgYXJlIGNvbXBhdGli bGUgd2l0aAorCSAqIG11bHRpdmFyaWF0ZSBzdGF0cyBhdCB0aGlzIHBvaW50 LgorCSAqLworCWlmICgoaXNfb3BjbGF1c2UoY2xhdXNlKSkKKwkJJiYgKGxp c3RfbGVuZ3RoKCgoT3BFeHByICopIGNsYXVzZSktPmFyZ3MpID09IDIpKQor CXsKKwkJT3BFeHByCSAgICpleHByID0gKE9wRXhwciAqKSBjbGF1c2U7CisJ CWJvb2wJCXZhcm9ubGVmdCA9IHRydWU7CisJCWJvb2wJCW9rOworCiAJCS8q IGlzIGl0ICd2YXJpYWJsZSBvcCBjb25zdGFudCcgPyAqLwotCQlpZiAobGlz dF9sZW5ndGgoKChPcEV4cHIgKikgY2xhdXNlKS0+YXJncykgPT0gMikKKwor CQlvayA9IChibXNfbWVtYmVyc2hpcChjbGF1c2VfcmVsaWRzKSA9PSBCTVNf U0lOR0xFVE9OKSAmJgorCQkJKGlzX3BzZXVkb19jb25zdGFudF9jbGF1c2Vf cmVsaWRzKGxzZWNvbmQoZXhwci0+YXJncyksCisJCQkJCQkJCQkJCSAgcmln aHRfcmVsaWRzKSB8fAorCQkJKHZhcm9ubGVmdCA9IGZhbHNlLAorCQkJaXNf cHNldWRvX2NvbnN0YW50X2NsYXVzZV9yZWxpZHMobGluaXRpYWwoZXhwci0+ YXJncyksCisJCQkJCQkJCQkJCSBsZWZ0X3JlbGlkcykpKTsKKworCQlpZiAo b2spCiAJCXsKLQkJCU9wRXhwcgkgICAqZXhwciA9IChPcEV4cHIgKikgY2xh dXNlOwotCQkJYm9vbAkJdmFyb25sZWZ0ID0gdHJ1ZTsKLQkJCWJvb2wJCW9r OworCQkJVmFyICogdmFyID0gKHZhcm9ubGVmdCkgPyBsaW5pdGlhbChleHBy LT5hcmdzKSA6IGxzZWNvbmQoZXhwci0+YXJncyk7CiAKLQkJCW9rID0gKGJt c19tZW1iZXJzaGlwKHJpbmZvLT5jbGF1c2VfcmVsaWRzKSA9PSBCTVNfU0lO R0xFVE9OKSAmJgotCQkJCShpc19wc2V1ZG9fY29uc3RhbnRfY2xhdXNlX3Jl bGlkcyhsc2Vjb25kKGV4cHItPmFyZ3MpLAotCQkJCQkJCQkJCQkJcmluZm8t PnJpZ2h0X3JlbGlkcykgfHwKLQkJCQkodmFyb25sZWZ0ID0gZmFsc2UsCi0J CQkJaXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZV9yZWxpZHMobGluaXRpYWwo ZXhwci0+YXJncyksCi0JCQkJCQkJCQkJCQlyaW5mby0+bGVmdF9yZWxpZHMp KSk7CisJCQkvKgorCQkJICogU2ltcGxlIHZhcmlhYmxlcyBvbmx5IC0gb3Ro ZXJ3aXNlIHRoZSBwbGFubmVyX3J0X2ZldGNoIHNlZW1zIHRvIGZhaWwKKwkJ CSAqIChyZXR1cm4gTlVMTCkuCisJCQkgKgorCQkJICogVE9ETyBNYXliZSB1 c2UgZXhhbWluZV92YXJpYWJsZSgpIHdvdWxkIGZpeCB0aGF0PworCQkJICov CisJCQlpZiAoISAoSXNBKHZhciwgVmFyKSAmJiAodmFyUmVsaWQgPT0gMCB8 fCB2YXJSZWxpZCA9PSB2YXItPnZhcm5vKSkpCisJCQkJcmV0dXJuIGZhbHNl OwogCi0JCQlpZiAob2spCi0JCQl7Ci0JCQkJVmFyICogdmFyID0gKHZhcm9u bGVmdCkgPyBsaW5pdGlhbChleHByLT5hcmdzKSA6IGxzZWNvbmQoZXhwci0+ YXJncyk7CisJCQkvKgorCQkJICogT25seSBjb25zaWRlciB0aGlzIHZhcmlh YmxlIGlmICh2YXJSZWxpZCA9PSAwKSBvciB3aGVuIHRoZSB2YXJubworCQkJ ICogbWF0Y2hlcyB2YXJSZWxpZCAoc2VlIGV4cGxhbmF0aW9uIGF0IGNsYXVz ZV9zZWxlY3Rpdml0eSkuCisJCQkgKgorCQkJICogRklYTUUgSSBzdXNwZWN0 IHRoaXMgbWF5IG5vdCBiZSByZWFsbHkgbmVjZXNzYXJ5LiBUaGUgKHZhclJl bGlkID09IDApCisJCQkgKiAgICAgICBwYXJ0IHNlZW1zIHRvIGJlIGVuZm9y Y2VkIGJ5IHRyZWF0X2FzX2pvaW5fY2xhdXNlKCkuCisJCQkgKi8KKwkJCWlm ICghICgodmFyUmVsaWQgPT0gMCkgfHwgKHZhclJlbGlkID09IHZhci0+dmFy bm8pKSkKKwkJCQlyZXR1cm4gZmFsc2U7CiAKLQkJCQkvKgotCQkJCSAqIFNp bXBsZSB2YXJpYWJsZXMgb25seSAtIG90aGVyd2lzZSB0aGUgcGxhbm5lcl9y dF9mZXRjaCBzZWVtcyB0byBmYWlsCi0JCQkJICogKHJldHVybiBOVUxMKS4K LQkJCQkgKgotCQkJCSAqIFRPRE8gTWF5YmUgdXNlIGV4YW1pbmVfdmFyaWFi bGUoKSB3b3VsZCBmaXggdGhhdD8KLQkJCQkgKi8KLQkJCQlpZiAoISAoSXNB KHZhciwgVmFyKSAmJiAodmFyUmVsaWQgPT0gMCB8fCB2YXJSZWxpZCA9PSB2 YXItPnZhcm5vKSkpCi0JCQkJCXJldHVybiBmYWxzZTsKKwkJCS8qIEFsc28g c2tpcCBzcGVjaWFsIHZhcm5vIHZhbHVlcywgYW5kIHN5c3RlbSBhdHRyaWJ1 dGVzIC4uLiAqLworCQkJaWYgKChJU19TUEVDSUFMX1ZBUk5PKHZhci0+dmFy bm8pKSB8fCAoISBBdHRyTnVtYmVySXNGb3JVc2VyRGVmaW5lZEF0dHIodmFy LT52YXJhdHRubykpKQorCQkJCXJldHVybiBmYWxzZTsKIAotCQkJCS8qCi0J CQkJICogT25seSBjb25zaWRlciB0aGlzIHZhcmlhYmxlIGlmICh2YXJSZWxp ZCA9PSAwKSBvciB3aGVuIHRoZSB2YXJubwotCQkJCSAqIG1hdGNoZXMgdmFy UmVsaWQgKHNlZSBleHBsYW5hdGlvbiBhdCBjbGF1c2Vfc2VsZWN0aXZpdHkp LgotCQkJCSAqCi0JCQkJICogRklYTUUgSSBzdXNwZWN0IHRoaXMgbWF5IG5v dCBiZSByZWFsbHkgbmVjZXNzYXJ5LiBUaGUgKHZhclJlbGlkID09IDApCi0J CQkJICogICAgICAgcGFydCBzZWVtcyB0byBiZSBlbmZvcmNlZCBieSB0cmVh dF9hc19qb2luX2NsYXVzZSgpLgotCQkJCSAqLwotCQkJCWlmICghICgodmFy UmVsaWQgPT0gMCkgfHwgKHZhclJlbGlkID09IHZhci0+dmFybm8pKSkKLQkJ CQkJcmV0dXJuIGZhbHNlOworCQkJLyogTG9va3VwIGluZm8gYWJvdXQgdGhl IGJhc2UgcmVsYXRpb24gKHdlIG5lZWQgdG8gcGFzcyB0aGUgT0lEIG91dCkg Ki8KKwkJCWlmIChyZWxpZCAhPSBOVUxMKQorCQkJCSpyZWxpZCA9IHZhci0+ dmFybm87CisKKwkJCS8qCisJCQkgKiBJZiBpdCdzIG5vdCBhICI8IiBvciAi PiIgb3IgIj0iIG9wZXJhdG9yLCBqdXN0IGlnbm9yZSB0aGUKKwkJCSAqIGNs YXVzZS4gT3RoZXJ3aXNlIG5vdGUgdGhlIHJlbGlkIGFuZCBhdHRudW0gZm9y IHRoZSB2YXJpYWJsZS4KKwkJCSAqIFRoaXMgdXNlcyB0aGUgZnVuY3Rpb24g Zm9yIGVzdGltYXRpbmcgc2VsZWN0aXZpdHksIG9udCB0aGUKKwkJCSAqIG9w ZXJhdG9yIGRpcmVjdGx5IChhIGJpdCBhd2t3YXJkLCBidXQgd2VsbCAuLi4p LgorCQkJICovCisJCQlzd2l0Y2ggKGdldF9vcHJyZXN0KGV4cHItPm9wbm8p KQorCQkJCXsKKwkJCQkJY2FzZSBGX1NDQUxBUkxUU0VMOgorCQkJCQljYXNl IEZfU0NBTEFSR1RTRUw6CisJCQkJCQkvKiBub3QgY29tcGF0aWJsZSB3aXRo IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzICovCisJCQkJCQlpZiAodHlwZXMg JiBNVl9DTEFVU0VfVFlQRV9NQ1YpCisJCQkJCQl7CisJCQkJCQkJKmF0dG51 bXMgPSBibXNfYWRkX21lbWJlcigqYXR0bnVtcywgdmFyLT52YXJhdHRubyk7 CisJCQkJCQkJcmV0dXJuICh0eXBlcyAmIE1WX0NMQVVTRV9UWVBFX01DVik7 CisJCQkJCQl9CisJCQkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCQkJY2FzZSBG X0VRU0VMOgorCQkJCQkJKmF0dG51bXMgPSBibXNfYWRkX21lbWJlcigqYXR0 bnVtcywgdmFyLT52YXJhdHRubyk7CisJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CQl9CisJCX0KKwl9CisJZWxzZSBpZiAoSXNBKGNsYXVzZSwgTnVsbFRlc3Qp CisJCQkgJiYgSXNBKCgoTnVsbFRlc3QqKWNsYXVzZSktPmFyZywgVmFyKSkK Kwl7CisJCVZhciAqIHZhciA9IChWYXIqKSgoTnVsbFRlc3QqKWNsYXVzZSkt PmFyZzsKKworCQkvKgorCQkgKiBTaW1wbGUgdmFyaWFibGVzIG9ubHkgLSBv dGhlcndpc2UgdGhlIHBsYW5uZXJfcnRfZmV0Y2ggc2VlbXMgdG8gZmFpbAor CQkgKiAocmV0dXJuIE5VTEwpLgorCQkgKgorCQkgKiBUT0RPIE1heWJlIHVz ZSBleGFtaW5lX3ZhcmlhYmxlKCkgd291bGQgZml4IHRoYXQ/CisJCSAqLwor CQlpZiAoISAoSXNBKHZhciwgVmFyKSAmJiAodmFyUmVsaWQgPT0gMCB8fCB2 YXJSZWxpZCA9PSB2YXItPnZhcm5vKSkpCisJCQlyZXR1cm4gZmFsc2U7CisK KwkJLyoKKwkJICogT25seSBjb25zaWRlciB0aGlzIHZhcmlhYmxlIGlmICh2 YXJSZWxpZCA9PSAwKSBvciB3aGVuIHRoZSB2YXJubworCQkgKiBtYXRjaGVz IHZhclJlbGlkIChzZWUgZXhwbGFuYXRpb24gYXQgY2xhdXNlX3NlbGVjdGl2 aXR5KS4KKwkJICoKKwkJICogRklYTUUgSSBzdXNwZWN0IHRoaXMgbWF5IG5v dCBiZSByZWFsbHkgbmVjZXNzYXJ5LiBUaGUgKHZhclJlbGlkID09IDApCisJ CSAqICAgICAgIHBhcnQgc2VlbXMgdG8gYmUgZW5mb3JjZWQgYnkgdHJlYXRf YXNfam9pbl9jbGF1c2UoKS4KKwkJICovCisJCWlmICghICgodmFyUmVsaWQg PT0gMCkgfHwgKHZhclJlbGlkID09IHZhci0+dmFybm8pKSkKKwkJCXJldHVy biBmYWxzZTsKIAotCQkJCS8qIEFsc28gc2tpcCBzcGVjaWFsIHZhcm5vIHZh bHVlcywgYW5kIHN5c3RlbSBhdHRyaWJ1dGVzIC4uLiAqLwotCQkJCWlmICgo SVNfU1BFQ0lBTF9WQVJOTyh2YXItPnZhcm5vKSkgfHwgKCEgQXR0ck51bWJl cklzRm9yVXNlckRlZmluZWRBdHRyKHZhci0+dmFyYXR0bm8pKSkKLQkJCQkJ cmV0dXJuIGZhbHNlOworCQkvKiBBbHNvIHNraXAgc3BlY2lhbCB2YXJubyB2 YWx1ZXMsIGFuZCBzeXN0ZW0gYXR0cmlidXRlcyAuLi4gKi8KKwkJaWYgKChJ U19TUEVDSUFMX1ZBUk5PKHZhci0+dmFybm8pKSB8fCAoISBBdHRyTnVtYmVy SXNGb3JVc2VyRGVmaW5lZEF0dHIodmFyLT52YXJhdHRubykpKQorCQkJcmV0 dXJuIGZhbHNlOwogCisJCS8qIExvb2t1cCBpbmZvIGFib3V0IHRoZSBiYXNl IHJlbGF0aW9uICh3ZSBuZWVkIHRvIHBhc3MgdGhlIE9JRCBvdXQpICovCisJ CWlmIChyZWxpZCAhPSBOVUxMKQogCQkJCSpyZWxpZCA9IHZhci0+dmFybm87 CiAKLQkJCQkvKgotCQkJCSAqIElmIGl0J3Mgbm90IGEgIjwiIG9yICI+IiBv ciAiPSIgb3BlcmF0b3IsIGp1c3QgaWdub3JlIHRoZQotCQkJCSAqIGNsYXVz ZS4gT3RoZXJ3aXNlIG5vdGUgdGhlIHJlbGlkIGFuZCBhdHRudW0gZm9yIHRo ZSB2YXJpYWJsZS4KLQkJCQkgKiBUaGlzIHVzZXMgdGhlIGZ1bmN0aW9uIGZv ciBlc3RpbWF0aW5nIHNlbGVjdGl2aXR5LCBvbnQgdGhlCi0JCQkJICogb3Bl cmF0b3IgZGlyZWN0bHkgKGEgYml0IGF3a3dhcmQsIGJ1dCB3ZWxsIC4uLiku Ci0JCQkJICovCi0JCQkJc3dpdGNoIChnZXRfb3BycmVzdChleHByLT5vcG5v KSkKLQkJCQkJewotCQkJCQkJY2FzZSBGX0VRU0VMOgotCQkJCQkJCSphdHRu dW0gPSB2YXItPnZhcmF0dG5vOwotCQkJCQkJCXJldHVybiB0cnVlOwotCQkJ CQl9Ci0JCQl9CisJCSphdHRudW1zID0gYm1zX2FkZF9tZW1iZXIoKmF0dG51 bXMsIHZhci0+dmFyYXR0bm8pOworCisJCXJldHVybiB0cnVlOworCX0KKwll bHNlIGlmIChvcl9jbGF1c2UoY2xhdXNlKSB8fCBhbmRfY2xhdXNlKGNsYXVz ZSkpCisJeworCQkvKgorCQkgKiBBTkQvT1ItY2xhdXNlcyBhcmUgc3VwcG9y dGVkIGlmIGFsbCBzdWItY2xhdXNlcyBhcmUgc3VwcG9ydGVkCisJCSAqCisJ CSAqIFRPRE8gV2UgbWlnaHQgc3VwcG9ydCBtaXhlZCBjYXNlLCB3aGVyZSBz b21lIG9mIHRoZSBjbGF1c2VzCisJCSAqICAgICAgYXJlIHN1cHBvcnRlZCBh bmQgc29tZSBhcmUgbm90LCBhbmQgdHJlYXQgYWxsIHN1cHBvcnRlZAorCQkg KiAgICAgIHN1YmNsYXVzZXMgYXMgYSBzaW5nbGUgY2xhdXNlLCBjb21wdXRl IGl0J3Mgc2VsZWN0aXZpdHkKKwkJICogICAgICB1c2luZyBtdiBzdGF0cywg YW5kIGNvbXB1dGUgdGhlIHRvdGFsIHNlbGVjdGl2aXR5IHVzaW5nCisJCSAq ICAgICAgdGhlIGN1cnJlbnQgYWxnb3JpdGhtLgorCQkgKgorCQkgKiBUT0RP IEZvciBSZXN0cmljdEluZm8gYWJvdmUgYW4gT1ItY2xhdXNlLCB3ZSBtaWdo dCB1c2UgdGhlCisJCSAqICAgICAgb3JjbGF1c2Ugd2l0aCBuZXN0ZWQgUmVz dHJpY3RJbmZvIC0gd2Ugd29uJ3QgaGF2ZSB0bworCQkgKiAgICAgIGNhbGwg cHVsbF92YXJub3MoKSBmb3IgZWFjaCBjbGF1c2UsIHNhdmluZyB0aW1lLiAK KwkJICovCisJCUJpdG1hcHNldCAqdG1wID0gTlVMTDsKKwkJTGlzdENlbGwg Kmw7CisJCWZvcmVhY2ggKGwsICgoQm9vbEV4cHIqKWNsYXVzZSktPmFyZ3Mp CisJCXsKKwkJCWlmICghIGNsYXVzZV9pc19tdl9jb21wYXRpYmxlKHJvb3Qs IChOb2RlKilsZmlyc3QobCksCisJCQkJCQl2YXJSZWxpZCwgcmVsaWQsICZ0 bXAsIHNqaW5mbywgdHlwZXMpKQorCQkJCXJldHVybiBmYWxzZTsKIAkJfQor CisJCS8qIGFkZCB0aGUgYXR0bnVtcyBmcm9tIHRoZSBPUi1jbGF1c2UgdG8g dGhlIHNldCBvZiBhdHRudW1zICovCisJCSphdHRudW1zID0gYm1zX2pvaW4o KmF0dG51bXMsIHRtcCk7CisKKwkJcmV0dXJuIHRydWU7CiAJfQogCiAJcmV0 dXJuIGZhbHNlOwotCiB9CiAKIC8qCkBAIC0xMzIyLDYgKzE3OTMsOSBAQCBo YXNfc3RhdHMoTGlzdCAqc3RhdHMsIGludCB0eXBlKQogCiAJCWlmICgodHlw ZSAmIE1WX0NMQVVTRV9UWVBFX0ZERVApICYmIHN0YXQtPmRlcHNfYnVpbHQp CiAJCQlyZXR1cm4gdHJ1ZTsKKworCQlpZiAoKHR5cGUgJiBNVl9DTEFVU0Vf VFlQRV9NQ1YpICYmIHN0YXQtPm1jdl9idWlsdCkKKwkJCXJldHVybiB0cnVl OwogCX0KIAogCXJldHVybiBmYWxzZTsKQEAgLTE2MTcsMjUgKzIwOTEsMzkg QEAgZmRlcHNfZmlsdGVyX2NsYXVzZXMoUGxhbm5lckluZm8gKnJvb3QsCiAK IAlmb3JlYWNoIChsYywgY2xhdXNlcykKIAl7Ci0JCUF0dHJOdW1iZXIJYXR0 bnVtOworCQlCaXRtYXBzZXQgKmF0dG51bXMgPSBOVUxMOwogCQlOb2RlCSAg ICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobGMpOwogCi0JCWlmICghIGNs YXVzZV9pc19tdl9jb21wYXRpYmxlKHJvb3QsIGNsYXVzZSwgdmFyUmVsaWQs IHJlbGlkLAotCQkJCQkJCQkJICAmYXR0bnVtLCBzamluZm8pKQorCQlpZiAo ISBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShyb290LCBjbGF1c2UsIHZhclJl bGlkLCByZWxpZCwgJmF0dG51bXMsCisJCQkJCQkJCQkgIHNqaW5mbywgTVZf Q0xBVVNFX1RZUEVfRkRFUCkpCiAKIAkJCS8qIGNsYXVzZSBpbmNvbXBhdGli bGUgd2l0aCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyAqLwogCQkJKnJlZHVj ZWRfY2xhdXNlcyA9IGxhcHBlbmQoKnJlZHVjZWRfY2xhdXNlcywgY2xhdXNl KTsKIAotCQllbHNlIGlmICghIGJtc19pc19tZW1iZXIoYXR0bnVtLCBkZXBz X2F0dG51bXMpKQorCQllbHNlIGlmIChibXNfbnVtX21lbWJlcnMoYXR0bnVt cykgPiAxKQorCisJCQkvKgorCQkJICogY2xhdXNlIHJlZmVyZW5jaW5nIG11 bHRpcGxlIGF0dHJpYnV0ZXMgKHN0cmFuZ2UsIHNob3VsZAorCQkJICogdGhp cyBiZSBoYW5kbGVkIGJ5IGNsYXVzZV9pc19tdl9jb21wYXRpYmxlIGRpcmVj dGx5KQorCQkJICovCisJCQkqcmVkdWNlZF9jbGF1c2VzID0gbGFwcGVuZCgq cmVkdWNlZF9jbGF1c2VzLCBjbGF1c2UpOworCisJCWVsc2UgaWYgKCEgYm1z X2lzX21lbWJlcihibXNfc2luZ2xldG9uX21lbWJlcihhdHRudW1zKSwgZGVw c19hdHRudW1zKSkKIAogCQkJLyogY2xhdXNlIG5vdCBjb3ZlcmVkIGJ5IHRo ZSBkZXBlbmRlbmNpZXMgKi8KIAkJCSpyZWR1Y2VkX2NsYXVzZXMgPSBsYXBw ZW5kKCpyZWR1Y2VkX2NsYXVzZXMsIGNsYXVzZSk7CiAKIAkJZWxzZQogCQl7 CisJCQkvKiBvaywgY2xhdXNlIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyBk ZXBlbmRlbmNpZXMgKi8KKwkJCUFzc2VydChibXNfbnVtX21lbWJlcnMoYXR0 bnVtcykgPT0gMSk7CisKIAkJCSpkZXBzX2NsYXVzZXMgICA9IGxhcHBlbmQo KmRlcHNfY2xhdXNlcywgY2xhdXNlKTsKLQkJCWNsYXVzZV9hdHRudW1zID0g Ym1zX2FkZF9tZW1iZXIoY2xhdXNlX2F0dG51bXMsIGF0dG51bSk7CisJCQlj bGF1c2VfYXR0bnVtcyA9IGJtc19hZGRfbWVtYmVyKGNsYXVzZV9hdHRudW1z LAorCQkJCQkJCQkJCWJtc19zaW5nbGV0b25fbWVtYmVyKGF0dG51bXMpKTsK IAkJfQorCisJCWJtc19mcmVlKGF0dG51bXMpOwogCX0KIAogCXJldHVybiBj bGF1c2VfYXR0bnVtczsKQEAgLTE2NzMsMyArMjE2MSw0NTQgQEAgZ2V0X3Zh cmF0dG5vcyhOb2RlICogbm9kZSwgSW5kZXggcmVsaWQpCiAKIAlyZXR1cm4g cmVzdWx0OwogfQorCisvKgorICogRXN0aW1hdGUgc2VsZWN0aXZpdHkgb2Yg Y2xhdXNlcyB1c2luZyBhIE1DViBsaXN0LgorICoKKyAqIElmIHRoZXJlJ3Mg bm8gTUNWIGxpc3QgZm9yIHRoZSBzdGF0cywgdGhlIGZ1bmN0aW9uIHJldHVy bnMgMC4wLgorICoKKyAqIFdoaWxlIGNvbXB1dGluZyB0aGUgZXN0aW1hdGUs IHRoZSBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBhbGwgdGhlCisgKiBjb2x1 bW5zIHdlcmUgbWF0Y2hlZCB3aXRoIGFuIGVxdWFsaXR5IGNvbmRpdGlvbi4g SWYgdGhhdCdzIHRoZSBjYXNlLAorICogd2UgY2FuIHNraXAgcHJvY2Vzc2lu ZyB0aGUgaGlzdG9ncmFtLCBhcyB0aGVyZSBjYW4gYmUgbm8gcm93cyBpbgor ICogaXQgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgLSBhbGwgdGhlIHJvd3MgbWF0 Y2hpbmcgdGhlIGNvbmRpdGlvbiBhcmUKKyAqIHJlcHJlc2VudGVkIGJ5IHRo ZSBNQ1YgaXRlbS4gVGhpcyBjYW4gb25seSBoYXBwZW4gd2l0aCBlcXVhbGl0 eQorICogb24gYWxsIHRoZSBhdHRyaWJ1dGVzLgorICoKKyAqIFRoZSBhbGdv cml0aG0gd29ya3MgbGlrZSB0aGlzOgorICoKKyAqICAgMSkgbWFyayBhbGwg aXRlbXMgYXMgJ21hdGNoJworICogICAyKSB3YWxrIHRocm91Z2ggYWxsIHRo ZSBjbGF1c2VzCisgKiAgIDMpIGZvciBhIHBhcnRpY3VsYXIgY2xhdXNlLCB3 YWxrIHRocm91Z2ggYWxsIHRoZSBpdGVtcworICogICA0KSBza2lwIGl0ZW1z IHRoYXQgYXJlIGFscmVhZHkgJ25vIG1hdGNoJworICogICA1KSBjaGVjayBj bGF1c2UgZm9yIGl0ZW1zIHRoYXQgc3RpbGwgbWF0Y2gKKyAqICAgNikgc3Vt IGZyZXF1ZW5jaWVzIGZvciBpdGVtcyB0byBnZXQgc2VsZWN0aXZpdHkKKyAq CisgKiBUaGUgZnVuY3Rpb24gYWxzbyByZXR1cm5zIHRoZSBmcmVxdWVuY3kg b2YgdGhlIGxlYXN0IGZyZXF1ZW50IGl0ZW0KKyAqIG9uIHRoZSBNQ1YgbGlz dCwgd2hpY2ggbWF5IGJlIHVzZWZ1bCBmb3IgY2xhbXBpbmcgZXN0aW1hdGUg ZnJvbSB0aGUKKyAqIGhpc3RvZ3JhbSAoYWxsIGl0ZW1zIG5vdCBwcmVzZW50 IGluIHRoZSBNQ1YgbGlzdCBhcmUgbGVzcyBmcmVxdWVudCkuCisgKiBUaGlz IGhvd2V2ZXIgc2VlbXMgdXNlZnVsIG9ubHkgZm9yIGNhc2VzIHdpdGggY29u ZGl0aW9ucyBvbiBhbGwKKyAqIGF0dHJpYnV0ZXMuCisgKgorICogVE9ETyBU aGlzIG9ubHkgaGFuZGxlcyBBTkQtZWQgY2xhdXNlcywgYnV0IGl0IG1pZ2h0 IHdvcmsgZm9yIE9SLWVkCisgKiAgICAgIGxpc3RzIHRvbyAtIGl0IGp1c3Qg bmVlZHMgdG8gcmV2ZXJzZSB0aGUgbG9naWMgYSBiaXQuIEkuZS4gc3RhcnQK KyAqICAgICAgd2l0aCAnbm8gbWF0Y2gnIGZvciBhbGwgaXRlbXMsIGFuZCBt YXJrIHRoZSBpdGVtcyBhcyBhIG1hdGNoCisgKiAgICAgIGFzIHRoZSBjbGF1 c2VzIGFyZSBwcm9jZXNzZWQgKGFuZCBza2lwIGl0ZW1zIHRoYXQgYXJlICdt YXRjaCcpLgorICovCitzdGF0aWMgU2VsZWN0aXZpdHkKK2NsYXVzZWxpc3Rf bXZfc2VsZWN0aXZpdHlfbWN2bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlz dCAqY2xhdXNlcywKKwkJCQkJCQkJICBNVlN0YXRpc3RpY0luZm8gKm12c3Rh dHMsIGJvb2wgKmZ1bGxtYXRjaCwKKwkJCQkJCQkJICBTZWxlY3Rpdml0eSAq bG93c2VsKQoreworCWludCBpOworCVNlbGVjdGl2aXR5IHMgPSAwLjA7CisJ U2VsZWN0aXZpdHkgdSA9IDAuMDsKKworCU1DVkxpc3QgbWN2bGlzdCA9IE5V TEw7CisJaW50CW5tYXRjaGVzID0gMDsKKworCS8qIG1hdGNoL21pc21hdGNo IGJpdG1hcCBmb3IgZWFjaCBNQ1YgaXRlbSAqLworCWNoYXIgKiBtYXRjaGVz ID0gTlVMTDsKKworCUFzc2VydChjbGF1c2VzICE9IE5JTCk7CisJQXNzZXJ0 KGxpc3RfbGVuZ3RoKGNsYXVzZXMpID49IDIpOworCisJLyogdGhlcmUncyBu byBNQ1YgbGlzdCBidWlsdCB5ZXQgKi8KKwlpZiAoISBtdnN0YXRzLT5tY3Zf YnVpbHQpCisJCXJldHVybiAwLjA7CisKKwltY3ZsaXN0ID0gbG9hZF9tdl9t Y3ZsaXN0KG12c3RhdHMtPm12b2lkKTsKKworCUFzc2VydChtY3ZsaXN0ICE9 IE5VTEwpOworCUFzc2VydChtY3ZsaXN0LT5uaXRlbXMgPiAwKTsKKworCS8q IGJ5IGRlZmF1bHQgYWxsIHRoZSBNQ1YgaXRlbXMgbWF0Y2ggdGhlIGNsYXVz ZXMgZnVsbHkgKi8KKwltYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikg KiBtY3ZsaXN0LT5uaXRlbXMpOworCW1lbXNldChtYXRjaGVzLCBNVlNUQVRT X01BVENIX0ZVTEwsIHNpemVvZihjaGFyKSptY3ZsaXN0LT5uaXRlbXMpOwor CisJLyogbnVtYmVyIG9mIG1hdGNoaW5nIE1DViBpdGVtcyAqLworCW5tYXRj aGVzID0gbWN2bGlzdC0+bml0ZW1zOworCisJbm1hdGNoZXMgPSB1cGRhdGVf bWF0Y2hfYml0bWFwX21jdmxpc3Qocm9vdCwgY2xhdXNlcywKKwkJCQkJCQkJ CQkgICBtdnN0YXRzLT5zdGFrZXlzLCBtY3ZsaXN0LAorCQkJCQkJCQkJCSAg IG5tYXRjaGVzLCBtYXRjaGVzLAorCQkJCQkJCQkJCSAgIGxvd3NlbCwgZnVs bG1hdGNoLCBmYWxzZSk7CisKKwkvKiBzdW0gZnJlcXVlbmNpZXMgZm9yIGFs bCB0aGUgbWF0Y2hpbmcgTUNWIGl0ZW1zICovCisJZm9yIChpID0gMDsgaSA8 IG1jdmxpc3QtPm5pdGVtczsgaSsrKQorCXsKKwkJLyogdXNlZCB0byAnc2Nh bGUnIGZvciBNQ1YgbGlzdHMgbm90IGNvdmVyaW5nIGFsbCB0dXBsZXMgKi8K KwkJdSArPSBtY3ZsaXN0LT5pdGVtc1tpXS0+ZnJlcXVlbmN5OworCisJCWlm IChtYXRjaGVzW2ldICE9IE1WU1RBVFNfTUFUQ0hfTk9ORSkKKwkJCXMgKz0g bWN2bGlzdC0+aXRlbXNbaV0tPmZyZXF1ZW5jeTsKKwl9CisKKwlwZnJlZSht YXRjaGVzKTsKKwlwZnJlZShtY3ZsaXN0KTsKKworCXJldHVybiBzKnU7Cit9 CisKKy8qCisgKiBFdmFsdWF0ZSBjbGF1c2VzIHVzaW5nIHRoZSBNQ1YgbGlz dCwgYW5kIHVwZGF0ZSB0aGUgbWF0Y2ggYml0bWFwLgorICoKKyAqIFRoZSBi aXRtYXAgbWF5IGJlIGFscmVhZHkgcGFydGlhbGx5IHNldCwgc28gdGhpcyBp cyByZWFsbHkgYSB3YXkgdG8KKyAqIGNvbWJpbmUgcmVzdWx0cyBvZiBzZXZl cmFsIGNsYXVzZSBsaXN0cyAtIGVpdGhlciB3aGVuIGNvbXB1dGluZworICog Y29uZGl0aW9uYWwgcHJvYmFiaWxpdHkgUChBfEIpIG9yIGEgY29tYmluYXRp b24gb2YgQU5EL09SIGNsYXVzZXMuCisgKgorICogVE9ETyBUaGlzIHdvcmtz IHdpdGggJ2JpdG1hcCcgd2hlcmUgZWFjaCBiaXQgaXMgcmVwcmVzZW50ZWQg YXMgYSBjaGFyLAorICogICAgICB3aGljaCBpcyBzbGlnaHRseSB3YXN0ZWZ1 bC4gSW5zdGVhZCwgd2UgY291bGQgdXNlIGEgcmVndWxhcgorICogICAgICBi aXRtYXAsIHJlZHVjaW5nIHRoZSBzaXplIHRvIH4xLzguIEFub3RoZXIgdGhp bmcgaXMgbWVyZ2luZyB0aGUKKyAqICAgICAgYml0bWFwcyB1c2luZyAmIGFu ZCB8LCB3aGljaCBtaWdodCBiZSBmYXN0ZXIgdGhhbiBtaW4vbWF4LgorICov CitzdGF0aWMgaW50Cit1cGRhdGVfbWF0Y2hfYml0bWFwX21jdmxpc3QoUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCisJCQkJCQkgICBpbnQy dmVjdG9yICpzdGFrZXlzLCBNQ1ZMaXN0IG1jdmxpc3QsCisJCQkJCQkgICBp bnQgbm1hdGNoZXMsIGNoYXIgKiBtYXRjaGVzLAorCQkJCQkJICAgU2VsZWN0 aXZpdHkgKmxvd3NlbCwgYm9vbCAqZnVsbG1hdGNoLAorCQkJCQkJICAgYm9v bCBpc19vcikKK3sKKwlpbnQgaTsKKwlMaXN0Q2VsbCAqIGw7CisKKwlCaXRt YXBzZXQgKmVxbWF0Y2hlcyA9IE5VTEw7CS8qIGF0dHJpYnV0ZXMgd2l0aCBl cXVhbGl0eSBtYXRjaGVzICovCisKKwkvKiBUaGUgYml0bWFwIG1heSBiZSBw YXJ0aWFsbHkgYnVpbHQuICovCisJQXNzZXJ0KG5tYXRjaGVzID49IDApOwor CUFzc2VydChubWF0Y2hlcyA8PSBtY3ZsaXN0LT5uaXRlbXMpOworCUFzc2Vy dChjbGF1c2VzICE9IE5JTCk7CisJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNsYXVz ZXMpID49IDEpOworCUFzc2VydChtY3ZsaXN0ICE9IE5VTEwpOworCUFzc2Vy dChtY3ZsaXN0LT5uaXRlbXMgPiAwKTsKKworCS8qIE5vIHBvc3NpYmxlIG1h dGNoZXMgKG9ubHkgd29ya3MgZm9yIEFORC1kZWQgY2xhdXNlcykgKi8KKwlp ZiAoKChubWF0Y2hlcyA9PSAwKSAmJiAoISBpc19vcikpIHx8CisJCSgobm1h dGNoZXMgPT0gbWN2bGlzdC0+bml0ZW1zKSAmJiBpc19vcikpCisJCXJldHVy biBubWF0Y2hlczsKKworCS8qIGZyZXF1ZW5jeSBvZiB0aGUgbG93ZXN0IE1D ViBpdGVtICovCisJKmxvd3NlbCA9IDEuMDsKKworCS8qCisJICogTG9vcCB0 aHJvdWdoIHRoZSBsaXN0IG9mIGNsYXVzZXMsIGFuZCBmb3IgZWFjaCBvZiB0 aGVtIGV2YWx1YXRlCisJICogYWxsIHRoZSBNQ1YgaXRlbXMgbm90IHlldCBl bGltaW5hdGVkIGJ5IHRoZSBwcmVjZWRpbmcgY2xhdXNlcy4KKwkgKgorCSAq IEZJWE1FIFRoaXMgd291bGQgcHJvYmFibHkgZGVzZXJ2ZSBhIHJlZmFjdG9y aW5nLCBJIGd1ZXNzLiBVbmlmeQorCSAqICAgICAgIHRoZSB0d28gbG9vcHMg YW5kIHB1dCB0aGUgY2hlY2tzIGluc2lkZSwgb3Igc29tZXRoaW5nIGxpa2UK KwkgKiAgICAgICB0aGF0LgorCSAqLworCWZvcmVhY2ggKGwsIGNsYXVzZXMp CisJeworCQlOb2RlICogY2xhdXNlID0gKE5vZGUqKWxmaXJzdChsKTsKKwor CQkvKiBpZiBpdCdzIGEgUmVzdHJpY3RJbmZvLCB0aGVuIGV4dHJhY3QgdGhl IGNsYXVzZSAqLworCQlpZiAoSXNBKGNsYXVzZSwgUmVzdHJpY3RJbmZvKSkK KwkJCWNsYXVzZSA9IChOb2RlKikoKFJlc3RyaWN0SW5mbyopY2xhdXNlKS0+ Y2xhdXNlOworCisJCS8qIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgbWF0 Y2hlcyBwb3NzaWJsZSwgd2UgY2FuIHN0b3AgKi8KKwkJaWYgKCgobm1hdGNo ZXMgPT0gMCkgJiYgKCEgaXNfb3IpKSB8fAorCQkJKChubWF0Y2hlcyA9PSBt Y3ZsaXN0LT5uaXRlbXMpICYmIGlzX29yKSkKKwkJCQlicmVhazsKKworCQkv KiBpdCdzIGVpdGhlciBPcENsYXVzZSwgb3IgTnVsbFRlc3QgKi8KKwkJaWYg KGlzX29wY2xhdXNlKGNsYXVzZSkpCisJCXsKKwkJCU9wRXhwciAqIGV4cHIg PSAoT3BFeHByKiljbGF1c2U7CisJCQlib29sCQl2YXJvbmxlZnQgPSB0cnVl OworCQkJYm9vbAkJb2s7CisKKwkJCS8qIG9wZXJhdG9yICovCisJCQlGbWdy SW5mbwkJb3Bwcm9jOworCisJCQkvKiBnZXQgcHJvY2VkdXJlIGNvbXB1dGlu ZyBvcGVyYXRvciBzZWxlY3Rpdml0eSAqLworCQkJUmVnUHJvY2VkdXJlCW9w cnJlc3QgPSBnZXRfb3BycmVzdChleHByLT5vcG5vKTsKKworCQkJZm1ncl9p bmZvKGdldF9vcGNvZGUoZXhwci0+b3BubyksICZvcHByb2MpOworCisJCQlv ayA9IChOdW1SZWxpZHMoY2xhdXNlKSA9PSAxKSAmJgorCQkJCSAoaXNfcHNl dWRvX2NvbnN0YW50X2NsYXVzZShsc2Vjb25kKGV4cHItPmFyZ3MpKSB8fAor CQkJCSAodmFyb25sZWZ0ID0gZmFsc2UsCisJCQkJICBpc19wc2V1ZG9fY29u c3RhbnRfY2xhdXNlKGxpbml0aWFsKGV4cHItPmFyZ3MpKSkpOworCisJCQlp ZiAob2spCisJCQl7CisKKwkJCQlGbWdySW5mbwlsdHByb2MsIGd0cHJvYzsK KwkJCQlWYXIgKiB2YXIgPSAodmFyb25sZWZ0KSA/IGxpbml0aWFsKGV4cHIt PmFyZ3MpIDogbHNlY29uZChleHByLT5hcmdzKTsKKwkJCQlDb25zdCAqIGNz dCA9ICh2YXJvbmxlZnQpID8gbHNlY29uZChleHByLT5hcmdzKSA6IGxpbml0 aWFsKGV4cHItPmFyZ3MpOworCQkJCWJvb2wgaXNndCA9ICghIHZhcm9ubGVm dCk7CisKKwkJCQkvKgorCQkJCSAqIFRPRE8gRmV0Y2ggb25seSB3aGVuIHJl YWxseSBuZWVkZWQgKHByb2JhYmx5IGZvciBlcXVhbGl0eSBvbmx5KQorCQkJ CSAqIFRPRE8gVGVjaG5pY2FsbHkgZWl0aGVyIGx0L2d0IGlzIHN1ZmZpY2ll bnQuCisJCQkJICoKKwkJCQkgKiBGSVhNRSBUaGUgY29kZSBpbiBhbmFseXpl LmMgY3JlYXRlcyBoaXN0b2dyYW1zIG9ubHkgZm9yIHR5cGVzCisJCQkJICog ICAgICAgd2l0aCBlbm91Z2ggb3JkZXJpbmcgKGJ5IGNhbGxpbmcgZ2V0X3Nv cnRfZ3JvdXBfb3BlcmF0b3JzKS4KKwkJCQkgKiAgICAgICBJcyB0aGlzIHRo ZSBzYW1lIGFzc3VtcHRpb24sIGkuZS4gYXJlIHdlIGNlcnRhaW4gdGhhdCB3 ZQorCQkJCSAqICAgICAgIGdldCB0aGUgbHRwcm9jL2d0cHJvYyBldmVyeSB0 aW1lIHdlIGFzaz8gT3IgYXJlIHRoZXJlIHR5cGVzCisJCQkJICogICAgICAg d2hlcmUgZ2V0X3NvcnRfZ3JvdXBfb3BlcmF0b3JzIHJldHVybnMgbHRvcHIg YW5kIGhlcmUgd2UKKwkJCQkgKiAgICAgICBnZXQgbm90aGluZz8KKwkJCQkg Ki8KKwkJCQlUeXBlQ2FjaGVFbnRyeSAqdHlwZWNhY2hlCisJCQkJCT0gbG9v a3VwX3R5cGVfY2FjaGUodmFyLT52YXJ0eXBlLAorCQkJCQkJCQkJCVRZUEVD QUNIRV9FUV9PUFIgfCBUWVBFQ0FDSEVfTFRfT1BSIHwgVFlQRUNBQ0hFX0dU X09QUik7CisKKwkJCQkvKiBGSVhNRSBwcm9wZXIgbWF0Y2hpbmcgYXR0cmli dXRlIHRvIGRpbWVuc2lvbiAqLworCQkJCWludCBpZHggPSBtdl9nZXRfaW5k ZXgodmFyLT52YXJhdHRubywgc3Rha2V5cyk7CisKKwkJCQlmbWdyX2luZm8o Z2V0X29wY29kZSh0eXBlY2FjaGUtPmx0X29wciksICZsdHByb2MpOworCQkJ CWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKHR5cGVjYWNoZS0+Z3Rfb3ByKSwgJmd0 cHJvYyk7CisKKwkJCQkvKgorCQkJCSAqIFdhbGsgdGhyb3VnaCB0aGUgTUNW IGl0ZW1zIGFuZCBldmFsdWF0ZSB0aGUgY3VycmVudCBjbGF1c2UuIFdlIGNh bgorCQkJCSAqIHNraXAgaXRlbXMgdGhhdCB3ZXJlIGFscmVhZHkgcnVsZWQg b3V0LCBhbmQgdGVybWluYXRlIGlmIHRoZXJlIGFyZQorCQkJCSAqIG5vIHJl bWFpbmluZyBNQ1YgaXRlbXMgdGhhdCBtaWdodCBwb3NzaWJseSBtYXRjaC4K KwkJCQkgKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgbWN2bGlzdC0+bml0ZW1z OyBpKyspCisJCQkJeworCQkJCQlib29sIG1pc21hdGNoID0gZmFsc2U7CisJ CQkJCU1DVkl0ZW0gaXRlbSA9IG1jdmxpc3QtPml0ZW1zW2ldOworCisJCQkJ CS8qCisJCQkJCSAqIGZpbmQgdGhlIGxvd2VzdCBzZWxlY3Rpdml0eSBpbiB0 aGUgTUNWCisJCQkJCSAqIEZJWE1FIE1heWJlIG5vdCB0aGUgYmVzdCBwbGFj ZSBkbyBkbyB0aGlzIChpbiBmb3IgYWxsIGNsYXVzZXMpLgorCQkJCQkgKi8K KwkJCQkJaWYgKGl0ZW0tPmZyZXF1ZW5jeSA8ICpsb3dzZWwpCisJCQkJCQkq bG93c2VsID0gaXRlbS0+ZnJlcXVlbmN5OworCisJCQkJCS8qCisJCQkJCSAq IElmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMgKEFORCkgb3Igbm8gcmVt YWluaW5nIHVubWF0Y2hlZAorCQkJCQkgKiBpdGVtcyAoT1IpLCB3ZSBjYW4g c3RvcCBwcm9jZXNzaW5nIHRoaXMgY2xhdXNlLgorCQkJCQkgKi8KKwkJCQkJ aWYgKCgobm1hdGNoZXMgPT0gMCkgJiYgKCEgaXNfb3IpKSB8fAorCQkJCQkJ KChubWF0Y2hlcyA9PSBtY3ZsaXN0LT5uaXRlbXMpICYmIGlzX29yKSkKKwkJ CQkJCWJyZWFrOworCisJCQkJCS8qCisJCQkJCSAqIEZvciBBTkQtbGlzdHMs IHdlIGNhbiBhbHNvIG1hcmsgTlVMTCBpdGVtcyBhcyAnbm8gbWF0Y2gnIChh bmQKKwkJCQkJICogdGhlbiBza2lwIHRoZW0pLiBGb3IgT1ItbGlzdHMgdGhp cyBpcyBub3QgcG9zc2libGUuCisJCQkJCSAqLworCQkJCQlpZiAoKCEgaXNf b3IpICYmIGl0ZW0tPmlzbnVsbFtpZHhdKQorCQkJCQkJbWF0Y2hlc1tpXSA9 IE1WU1RBVFNfTUFUQ0hfTk9ORTsKKworCQkJCQkvKiBza2lwIE1DViBpdGVt cyB0aGF0IHdlcmUgYWxyZWFkeSBydWxlZCBvdXQgKi8KKwkJCQkJaWYgKCgh IGlzX29yKSAmJiAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX05PTkUp KQorCQkJCQkJY29udGludWU7CisJCQkJCWVsc2UgaWYgKGlzX29yICYmICht YXRjaGVzW2ldID09IE1WU1RBVFNfTUFUQ0hfRlVMTCkpCisJCQkJCQljb250 aW51ZTsKKworCQkJCQkvKiBUT0RPIGNvbnNpZGVyIGJzZWFyY2ggaGVyZSAo bGlzdCBpcyBzb3J0ZWQgYnkgdmFsdWVzKQorCQkJCQkgKiBUT0RPIGhhbmRs ZSBvdGhlciBvcGVyYXRvcnMgdG9vIChMVCwgR1QpCisJCQkJCSAqIFRPRE8g aWRlbnRpZnkgImZ1bGwgbWF0Y2giIHdoZW4gdGhlIGNsYXVzZXMgZnVsbHkK KwkJCQkJICogICAgICBtYXRjaCB0aGUgd2hvbGUgTUNWIGxpc3QgKHNvIHRo YXQgY2hlY2tpbmcgdGhlCisJCQkJCSAqICAgICAgaGlzdG9ncmFtIGlzIG5v dCBuZWVkZWQpCisJCQkJCSAqLworCQkJCQlpZiAob3BycmVzdCA9PSBGX0VR U0VMKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogV2UgZG9uJ3QgY2Fy ZSBhYm91dCBpc2d0IGluIGVxdWFsaXR5LCBiZWNhdXNlIGl0IGRvZXMgbm90 CisJCQkJCQkgKiBtYXR0ZXIgd2hldGhlciBpdCdzICh2YXIgPSBjb25zdCkg b3IgKGNvbnN0ID0gdmFyKS4KKwkJCQkJCSAqLworCQkJCQkJYm9vbCBtYXRj aCA9IERhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29sbCgmb3Bwcm9jLAor CQkJCQkJCQkJCQkJCQkJIERFRkFVTFRfQ09MTEFUSU9OX09JRCwKKwkJCQkJ CQkJCQkJCQkJCSBjc3QtPmNvbnN0dmFsdWUsCisJCQkJCQkJCQkJCQkJCQkg aXRlbS0+dmFsdWVzW2lkeF0pKTsKKworCQkJCQkJaWYgKG1hdGNoKQorCQkJ CQkJCWVxbWF0Y2hlcyA9IGJtc19hZGRfbWVtYmVyKGVxbWF0Y2hlcywgaWR4 KTsKKworCQkJCQkJbWlzbWF0Y2ggPSAoISBtYXRjaCk7CisJCQkJCX0KKwkJ CQkJZWxzZSBpZiAob3BycmVzdCA9PSBGX1NDQUxBUkxUU0VMKQkvKiBjb2x1 bW4gPCBjb25zdGFudCAqLworCQkJCQl7CisKKwkJCQkJCWlmICghIGlzZ3Qp CS8qICh2YXIgPCBjb25zdCkgKi8KKwkJCQkJCXsKKwkJCQkJCQkvKgorCQkJ CQkJCSAqIEZpcnN0IGNoZWNrIHdoZXRoZXIgdGhlIGNvbnN0YW50IGlzIGJl bG93IHRoZSBsb3dlciBib3VuZGFyeSAoaW4gdGhhdAorCQkJCQkJCSAqIGNh c2Ugd2UgY2FuIHNraXAgdGhlIGJ1Y2tldCwgYmVjYXVzZSB0aGVyZSdzIG5v IG92ZXJsYXApLgorCQkJCQkJCSAqLworCQkJCQkJCW1pc21hdGNoID0gRGF0 dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZvcHByb2MsCisJCQkJCQkJ CQkJCQkJCQkJIERFRkFVTFRfQ09MTEFUSU9OX09JRCwKKwkJCQkJCQkJCQkJ CQkJCQkgY3N0LT5jb25zdHZhbHVlLAorCQkJCQkJCQkJCQkJCQkJCSBpdGVt LT52YWx1ZXNbaWR4XSkpOworCisJCQkJCQl9IC8qIChnZXRfb3BycmVzdChl eHByLT5vcG5vKSA9PSBGX1NDQUxBUkxUU0VMKSAqLworCQkJCQkJZWxzZQkv KiAoY29uc3QgPCB2YXIpICovCisJCQkJCQl7CisJCQkJCQkJLyoKKwkJCQkJ CQkgKiBGaXJzdCBjaGVjayB3aGV0aGVyIHRoZSBjb25zdGFudCBpcyBhYm92 ZSB0aGUgdXBwZXIgYm91bmRhcnkgKGluIHRoYXQKKwkJCQkJCQkgKiBjYXNl IHdlIGNhbiBza2lwIHRoZSBidWNrZXQsIGJlY2F1c2UgdGhlcmUncyBubyBv dmVybGFwKS4KKwkJCQkJCQkgKi8KKwkJCQkJCQltaXNtYXRjaCA9IERhdHVt R2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29sbCgmb3Bwcm9jLAorCQkJCQkJCQkJ CQkJCQkJCSBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJCQkJCQkJ CQkJIGl0ZW0tPnZhbHVlc1tpZHhdLAorCQkJCQkJCQkJCQkJCQkJCSBjc3Qt PmNvbnN0dmFsdWUpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlIGlm IChvcHJyZXN0ID09IEZfU0NBTEFSR1RTRUwpCS8qIGNvbHVtbiA+IGNvbnN0 YW50ICovCisJCQkJCXsKKworCQkJCQkJaWYgKCEgaXNndCkJLyogKHZhciA+ IGNvbnN0KSAqLworCQkJCQkJeworCQkJCQkJCS8qCisJCQkJCQkJICogRmly c3QgY2hlY2sgd2hldGhlciB0aGUgY29uc3RhbnQgaXMgYWJvdmUgdGhlIHVw cGVyIGJvdW5kYXJ5IChpbiB0aGF0CisJCQkJCQkJICogY2FzZSB3ZSBjYW4g c2tpcCB0aGUgYnVja2V0LCBiZWNhdXNlIHRoZXJlJ3Mgbm8gb3ZlcmxhcCku CisJCQkJCQkJICovCisJCQkJCQkJbWlzbWF0Y2ggPSBEYXR1bUdldEJvb2wo RnVuY3Rpb25DYWxsMkNvbGwoJm9wcHJvYywKKwkJCQkJCQkJCQkJCQkJCQkg REVGQVVMVF9DT0xMQVRJT05fT0lELAorCQkJCQkJCQkJCQkJCQkJCSBjc3Qt PmNvbnN0dmFsdWUsCisJCQkJCQkJCQkJCQkJCQkJIGl0ZW0tPnZhbHVlc1tp ZHhdKSk7CisJCQkJCQl9CisJCQkJCQllbHNlIC8qIChjb25zdCA+IHZhcikg Ki8KKwkJCQkJCXsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIEZpcnN0IGNoZWNr IHdoZXRoZXIgdGhlIGNvbnN0YW50IGlzIGJlbG93IHRoZSBsb3dlciBib3Vu ZGFyeSAoaW4KKwkJCQkJCQkgKiB0aGF0IGNhc2Ugd2UgY2FuIHNraXAgdGhl IGJ1Y2tldCwgYmVjYXVzZSB0aGVyZSdzIG5vIG92ZXJsYXApLgorCQkJCQkJ CSAqLworCQkJCQkJCW1pc21hdGNoID0gRGF0dW1HZXRCb29sKEZ1bmN0aW9u Q2FsbDJDb2xsKCZvcHByb2MsCisJCQkJCQkJCQkJCQkJCQkJIERFRkFVTFRf Q09MTEFUSU9OX09JRCwKKwkJCQkJCQkJCQkJCQkJCQkgaXRlbS0+dmFsdWVz W2lkeF0sCisJCQkJCQkJCQkJCQkJCQkJIGNzdC0+Y29uc3R2YWx1ZSkpOwor CQkJCQkJfQorCisJCQkJCX0gLyogKGdldF9vcHJyZXN0KGV4cHItPm9wbm8p ID09IEZfU0NBTEFSR1RTRUwpICovCisKKwkJCQkJLyogWFhYIFRoZSBjb25k aXRpb25zIG9uIG1hdGNoZXNbaV0gYXJlIG5vdCBuZWVkZWQsIGFzIHdlCisJ CQkJCSAqICAgICBza2lwIE1DViBpdGVtcyB0aGF0IGNhbid0IGJlY29tZSB0 cnVlL2ZhbHNlLCBkZXBlbmRpbmcKKwkJCQkJICogICAgIG9uIHRoZSBjdXJy ZW50IGZsYWcuIFNlZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3Agb3ZlcgorCQkJ CQkgKiAgICAgTUNWIGl0ZW1zLgorCQkJCQkgKi8KKworCQkJCQlpZiAoKGlz X29yKSAmJiAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX05PTkUpICYm ICghIG1pc21hdGNoKSkKKwkJCQkJeworCQkJCQkJLyogT1IgLSB3YXMgTUFU Q0hfTk9ORSwgYnV0IHdpbGwgYmUgTUFUQ0hfRlVMTCAqLworCQkJCQkJbWF0 Y2hlc1tpXSA9IE1WU1RBVFNfTUFUQ0hfRlVMTDsKKwkJCQkJCSsrbm1hdGNo ZXM7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQllbHNlIGlmICgo ISBpc19vcikgJiYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9GVUxM KSAmJiBtaXNtYXRjaCkKKwkJCQkJeworCQkJCQkJLyogQU5EIC0gd2FzIE1B VENfRlVMTCwgYnV0IHdpbGwgYmUgTUFUQ0hfTk9ORSAqLworCQkJCQkJbWF0 Y2hlc1tpXSA9IE1WU1RBVFNfTUFUQ0hfTk9ORTsKKwkJCQkJCS0tbm1hdGNo ZXM7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJfQorCQkJfQor CQl9CisJCWVsc2UgaWYgKElzQShjbGF1c2UsIE51bGxUZXN0KSkKKwkJewor CQkJTnVsbFRlc3QgKiBleHByID0gKE51bGxUZXN0KiljbGF1c2U7CisJCQlW YXIgKiB2YXIgPSAoVmFyKikoZXhwci0+YXJnKTsKKworCQkJLyogRklYTUUg cHJvcGVyIG1hdGNoaW5nIGF0dHJpYnV0ZSB0byBkaW1lbnNpb24gKi8KKwkJ CWludCBpZHggPSBtdl9nZXRfaW5kZXgodmFyLT52YXJhdHRubywgc3Rha2V5 cyk7CisKKwkJCS8qCisJCQkgKiBXYWxrIHRocm91Z2ggdGhlIE1DViBpdGVt cyBhbmQgZXZhbHVhdGUgdGhlIGN1cnJlbnQgY2xhdXNlLiBXZSBjYW4KKwkJ CSAqIHNraXAgaXRlbXMgdGhhdCB3ZXJlIGFscmVhZHkgcnVsZWQgb3V0LCBh bmQgdGVybWluYXRlIGlmIHRoZXJlIGFyZQorCQkJICogbm8gcmVtYWluaW5n IE1DViBpdGVtcyB0aGF0IG1pZ2h0IHBvc3NpYmx5IG1hdGNoLgorCQkJICov CisJCQlmb3IgKGkgPSAwOyBpIDwgbWN2bGlzdC0+bml0ZW1zOyBpKyspCisJ CQl7CisJCQkJTUNWSXRlbSBpdGVtID0gbWN2bGlzdC0+aXRlbXNbaV07CisK KwkJCQkvKgorCQkJCSAqIGZpbmQgdGhlIGxvd2VzdCBzZWxlY3Rpdml0eSBp biB0aGUgTUNWCisJCQkJICogRklYTUUgTWF5YmUgbm90IHRoZSBiZXN0IHBs YWNlIGRvIGRvIHRoaXMgKGluIGZvciBhbGwgY2xhdXNlcykuCisJCQkJICov CisJCQkJaWYgKGl0ZW0tPmZyZXF1ZW5jeSA8ICpsb3dzZWwpCisJCQkJCSps b3dzZWwgPSBpdGVtLT5mcmVxdWVuY3k7CisKKwkJCQkvKiBpZiB0aGVyZSBh cmUgbm8gbW9yZSBtYXRjaGVzLCB3ZSBjYW4gc3RvcCBwcm9jZXNzaW5nIHRo aXMgY2xhdXNlICovCisJCQkJaWYgKG5tYXRjaGVzID09IDApCisJCQkJCWJy ZWFrOworCisJCQkJLyogc2tpcCBNQ1YgaXRlbXMgdGhhdCB3ZXJlIGFscmVh ZHkgcnVsZWQgb3V0ICovCisJCQkJaWYgKG1hdGNoZXNbaV0gPT0gTVZTVEFU U19NQVRDSF9OT05FKQorCQkJCQljb250aW51ZTsKKworCQkJCS8qIGlmIHRo ZSBjbGF1c2UgbWlzbWF0Y2hlcyB0aGUgTUNWIGl0ZW0sIHNldCBpdCBhcyBN QVRDSF9OT05FICovCisJCQkJaWYgKCgoZXhwci0+bnVsbHRlc3R0eXBlID09 IElTX05VTEwpICYmICghIG1jdmxpc3QtPml0ZW1zW2ldLT5pc251bGxbaWR4 XSkpIHx8CisJCQkJCSgoZXhwci0+bnVsbHRlc3R0eXBlID09IElTX05PVF9O VUxMKSAmJiAobWN2bGlzdC0+aXRlbXNbaV0tPmlzbnVsbFtpZHhdKSkpCisJ CQkJeworCQkJCQkJbWF0Y2hlc1tpXSA9IE1WU1RBVFNfTUFUQ0hfTk9ORTsK KwkJCQkJCS0tbm1hdGNoZXM7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2Ug aWYgKG9yX2NsYXVzZShjbGF1c2UpIHx8IGFuZF9jbGF1c2UoY2xhdXNlKSkK KwkJeworCQkJLyogQU5EL09SIGNsYXVzZSwgd2l0aCBhbGwgY2xhdXNlcyBj b21wYXRpYmxlIHdpdGggdGhlIHNlbGVjdGVkIE1WIHN0YXQgKi8KKworCQkJ aW50CQkJaTsKKwkJCUJvb2xFeHByICAgKm9yY2xhdXNlICA9ICgoQm9vbEV4 cHIqKWNsYXVzZSk7CisJCQlMaXN0CSAgICpvcmNsYXVzZXMgPSBvcmNsYXVz ZS0+YXJnczsKKworCQkJLyogbWF0Y2gvbWlzbWF0Y2ggYml0bWFwIGZvciBl YWNoIE1DViBpdGVtICovCisJCQlpbnQJb3Jfbm1hdGNoZXMgPSAwOworCQkJ Y2hhciAqIG9yX21hdGNoZXMgPSBOVUxMOworCisJCQlBc3NlcnQob3JjbGF1 c2VzICE9IE5JTCk7CisJCQlBc3NlcnQobGlzdF9sZW5ndGgob3JjbGF1c2Vz KSA+PSAyKTsKKworCQkJLyogbnVtYmVyIG9mIG1hdGNoaW5nIE1DViBpdGVt cyAqLworCQkJb3Jfbm1hdGNoZXMgPSBtY3ZsaXN0LT5uaXRlbXM7CisKKwkJ CS8qIGJ5IGRlZmF1bHQgbm9uZSBvZiB0aGUgTUNWIGl0ZW1zIG1hdGNoZXMg dGhlIGNsYXVzZXMgKi8KKwkJCW9yX21hdGNoZXMgPSBwYWxsb2MwKHNpemVv ZihjaGFyKSAqIG9yX25tYXRjaGVzKTsKKworCQkJaWYgKG9yX2NsYXVzZShj bGF1c2UpKQorCQkJeworCQkJCS8qIE9SIGNsYXVzZXMgYXNzdW1lIG5vdGhp bmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCisJCQkJbWVtc2V0KG9yX21hdGNo ZXMsIE1WU1RBVFNfTUFUQ0hfTk9ORSwgc2l6ZW9mKGNoYXIpKm9yX25tYXRj aGVzKTsKKwkJCQlvcl9ubWF0Y2hlcyA9IDA7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJLyogQU5EIGNsYXVzZXMgYXNzdW1lIG5vdGhpbmcgbWF0Y2hl cywgaW5pdGlhbGx5ICovCisJCQkJbWVtc2V0KG9yX21hdGNoZXMsIE1WU1RB VFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm9yX25tYXRjaGVzKTsKKwkJ CX0KKworCQkJLyogYnVpbGQgdGhlIG1hdGNoIGJpdG1hcCBmb3IgdGhlIE9S LWNsYXVzZXMgKi8KKwkJCW9yX25tYXRjaGVzID0gdXBkYXRlX21hdGNoX2Jp dG1hcF9tY3ZsaXN0KHJvb3QsIG9yY2xhdXNlcywKKwkJCQkJCQkJCSAgIHN0 YWtleXMsIG1jdmxpc3QsCisJCQkJCQkJCQkgICBvcl9ubWF0Y2hlcywgb3Jf bWF0Y2hlcywKKwkJCQkJCQkJCSAgIGxvd3NlbCwgZnVsbG1hdGNoLCBvcl9j bGF1c2UoY2xhdXNlKSk7CisKKwkJCS8qIG1lcmdlIHRoZSBiaXRtYXAgaW50 byB0aGUgZXhpc3Rpbmcgb25lKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBtY3Zs aXN0LT5uaXRlbXM7IGkrKykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRvIEFO RC1tZXJnZSB0aGUgYml0bWFwcywgYSBNSU4oKSBzZW1hbnRpY3MgaXMgdXNl ZC4KKwkJCQkgKiBGb3IgT1ItbWVyZ2UsIHVzZSBNQVgoKS4KKwkJCQkgKgor CQkJCSAqIEZJWE1FIHRoaXMgZG9lcyBub3QgZGVjcmVhc2UgdGhlIG51bWJl ciBvZiBtYXRjaGVzCisJCQkJICovCisJCQkJVVBEQVRFX1JFU1VMVChtYXRj aGVzW2ldLCBvcl9tYXRjaGVzW2ldLCBpc19vcik7CisJCQl9CisKKwkJCXBm cmVlKG9yX21hdGNoZXMpOworCisJCX0KKwkJZWxzZQorCQl7CisJCQllbG9n KEVSUk9SLCAidW5rbm93biBjbGF1c2UgdHlwZTogJWQiLCBjbGF1c2UtPnR5 cGUpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBhbGwgdGhlIGNvbHVtbnMg d2VyZSBtYXRjaGVkIGJ5IGVxdWFsaXR5LCBpdCdzIGEgZnVsbCBtYXRjaC4K KwkgKiBJbiB0aGlzIGNhc2UgdGhlcmUgY2FuIGJlIGp1c3QgYSBzaW5nbGUg TUNWIGl0ZW0sIG1hdGNoaW5nIHRoZQorCSAqIGNsYXVzZSAoaWYgdGhlcmUg d2VyZSB0d28sIGJvdGggd291bGQgbWF0Y2ggdGhlIG90aGVyIG9uZSkuCisJ ICovCisJKmZ1bGxtYXRjaCA9IChibXNfbnVtX21lbWJlcnMoZXFtYXRjaGVz KSA9PSBtY3ZsaXN0LT5uZGltZW5zaW9ucyk7CisKKwkvKiBmcmVlIHRoZSBh bGxvY2F0ZWQgcGllY2VzICovCisJaWYgKGVxbWF0Y2hlcykKKwkJcGZyZWUo ZXFtYXRjaGVzKTsKKworCXJldHVybiBubWF0Y2hlczsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCA4M2Jk ODVjLi4wY2I0MDYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jCkBAIC00MTAsNyArNDEwLDcgQEAgZ2V0X3JlbGF0 aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVj dElkLCBib29sIGluaHBhcmVudCwKIAkJCW12c3RhdCA9IChGb3JtX3BnX212 X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXApOwogCiAJCQkvKiB1bmF2YWls YWJsZSBzdGF0cyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB0aGUgcGxhbm5l ciAqLwotCQkJaWYgKG12c3RhdC0+ZGVwc19idWlsdCkKKwkJCWlmIChtdnN0 YXQtPmRlcHNfYnVpbHQgfHwgbXZzdGF0LT5tY3ZfYnVpbHQpCiAJCQl7CiAJ CQkJaW5mbyA9IG1ha2VOb2RlKE1WU3RhdGlzdGljSW5mbyk7CiAKQEAgLTQx OSw5ICs0MTksMTEgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8g KnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwK IAogCQkJCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLwogCQkJCWluZm8tPmRl cHNfZW5hYmxlZCA9IG12c3RhdC0+ZGVwc19lbmFibGVkOworCQkJCWluZm8t Pm1jdl9lbmFibGVkICA9IG12c3RhdC0+bWN2X2VuYWJsZWQ7CiAKIAkJCQkv KiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwogCQkJCWluZm8tPmRl cHNfYnVpbHQgPSBtdnN0YXQtPmRlcHNfYnVpbHQ7CisJCQkJaW5mby0+bWN2 X2J1aWx0ICA9IG12c3RhdC0+bWN2X2J1aWx0OwogCiAJCQkJLyogc3Rha2V5 cyAqLwogCQkJCWFkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQs IGh0dXAsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmls ZQppbmRleCAwOTlmMWVkLi5mOWJmMTBjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDYgQEAgc3Vi ZGlyID0gc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cwogdG9wX2J1aWxkZGly ID0gLi4vLi4vLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9N YWtlZmlsZS5nbG9iYWwKIAotT0JKUyA9IGNvbW1vbi5vIGRlcGVuZGVuY2ll cy5vCitPQkpTID0gY29tbW9uLm8gZGVwZW5kZW5jaWVzLm8gbWN2Lm8KIAog aW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24u YyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKaW5kZXgg YmQyMDBiYy4uZDFkYTcxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbXZzdGF0cy9jb21tb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9t dnN0YXRzL2NvbW1vbi5jCkBAIC0xNiwxMiArMTYsMTQgQEAKIAogI2luY2x1 ZGUgImNvbW1vbi5oIgogCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKwog c3RhdGljIFZhY0F0dHJTdGF0cyAqKiBsb29rdXBfdmFyX2F0dHJfc3RhdHMo aW50MnZlY3RvciAqYXR0cnMsCi0JCQkJCQkJCQkgIGludCBuYXR0cywgVmFj QXR0clN0YXRzICoqdmFjYXR0cnN0YXRzKTsKKwkJCQkJCQkJCQkJIGludCBu YXR0cywKKwkJCQkJCQkJCQkJIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0 cyk7CiAKIHN0YXRpYyBMaXN0KiBsaXN0X212X3N0YXRzKE9pZCByZWxpZCk7 CiAKLQogLyoKICAqIENvbXB1dGUgcmVxdWVzdGVkIG11bHRpdmFyaWF0ZSBz dGF0cywgdXNpbmcgdGhlIHJvd3Mgc2FtcGxlZCBmb3IgdGhlCiAgKiBwbGFp biAoc2luZ2xlLWNvbHVtbikgc3RhdHMuCkBAIC00OSw2ICs1MSw4IEBAIGJ1 aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhl YXBUdXBsZSAqcm93cywKIAkJaW50CQkJCWo7CiAJCU1WU3RhdGlzdGljSW5m byAqc3RhdCA9IChNVlN0YXRpc3RpY0luZm8gKilsZmlyc3QobGMpOwogCQlN VkRlcGVuZGVuY2llcwlkZXBzICA9IE5VTEw7CisJCU1DVkxpc3QJCW1jdmxp c3QgICA9IE5VTEw7CisJCWludCBudW1yb3dzX2ZpbHRlcmVkICA9IDA7CiAK IAkJVmFjQXR0clN0YXRzICAqKnN0YXRzICA9IE5VTEw7CiAJCWludAkJCQlu dW1hdHRzICAgPSAwOwpAQCAtODcsOCArOTEsMTIgQEAgYnVpbGRfbXZfc3Rh dHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpy b3dzLAogCQlpZiAoc3RhdC0+ZGVwc19lbmFibGVkKQogCQkJZGVwcyA9IGJ1 aWxkX212X2RlcGVuZGVuY2llcyhudW1yb3dzLCByb3dzLCBhdHRycywgc3Rh dHMpOwogCisJCS8qIGJ1aWxkIHRoZSBNQ1YgbGlzdCAqLworCQlpZiAoc3Rh dC0+bWN2X2VuYWJsZWQpCisJCQltY3ZsaXN0ID0gYnVpbGRfbXZfbWN2bGlz dChudW1yb3dzLCByb3dzLCBhdHRycywgc3RhdHMsICZudW1yb3dzX2ZpbHRl cmVkKTsKKwogCQkvKiBzdG9yZSB0aGUgaGlzdG9ncmFtIC8gTUNWIGxpc3Qg aW4gdGhlIGNhdGFsb2cgKi8KLQkJdXBkYXRlX212X3N0YXRzKHN0YXQtPm12 b2lkLCBkZXBzLCBhdHRycyk7CisJCXVwZGF0ZV9tdl9zdGF0cyhzdGF0LT5t dm9pZCwgZGVwcywgbWN2bGlzdCwgYXR0cnMsIHN0YXRzKTsKIAl9CiB9CiAK QEAgLTE2Niw2ICsxNzQsOCBAQCBsaXN0X212X3N0YXRzKE9pZCByZWxpZCkK IAkJaW5mby0+c3Rha2V5cyA9IGJ1aWxkaW50MnZlY3RvcihzdGF0cy0+c3Rh a2V5cy52YWx1ZXMsIHN0YXRzLT5zdGFrZXlzLmRpbTEpOwogCQlpbmZvLT5k ZXBzX2VuYWJsZWQgPSBzdGF0cy0+ZGVwc19lbmFibGVkOwogCQlpbmZvLT5k ZXBzX2J1aWx0ID0gc3RhdHMtPmRlcHNfYnVpbHQ7CisJCWluZm8tPm1jdl9l bmFibGVkID0gc3RhdHMtPm1jdl9lbmFibGVkOworCQlpbmZvLT5tY3ZfYnVp bHQgPSBzdGF0cy0+bWN2X2J1aWx0OwogCiAJCXJlc3VsdCA9IGxhcHBlbmQo cmVzdWx0LCBpbmZvKTsKIAl9CkBAIC0xODAsOCArMTkwLDU2IEBAIGxpc3Rf bXZfc3RhdHMoT2lkIHJlbGlkKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKwor LyoKKyAqIEZpbmQgYXR0bmltcyBvZiBNViBzdGF0cyB1c2luZyB0aGUgbXZv aWQuCisgKi8KK2ludDJ2ZWN0b3IqCitmaW5kX212X2F0dG51bXMoT2lkIG12 b2lkLCBPaWQgKnJlbGlkKQoreworCUFycmF5VHlwZSAgKmFycjsKKwlEYXR1 bQkJYWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVwbGUJaHR1cDsK KwlpbnQydmVjdG9yICprZXlzOworCisJLyogUHJlcGFyZSB0byBzY2FuIHBn X212X3N0YXRpc3RpYyBmb3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQgPSB0 aGlzIHJlbC4gKi8KKwlodHVwID0gU2VhcmNoU3lzQ2FjaGUxKE1WU1RBVE9J RCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShtdm9pZCkpOworCisJLyog WFhYIHN5c2NhY2hlIGNvbnRhaW5zIE9JRHMgb2YgZGVsZXRlZCBzdGF0cyAo bm90IGludmFsaWRhdGVkKSAqLworCWlmICghIEhlYXBUdXBsZUlzVmFsaWQo aHR1cCkpCisJCXJldHVybiBOVUxMOworCisJLyogc3RhcmVsaWQgKi8KKwlh ZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoTVZTVEFUT0lELCBodHVwLAorCQkJ CQkJCSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFyZWxpZCwgJmlzbnVsbCk7 CisJQXNzZXJ0KCFpc251bGwpOworCisJKnJlbGlkID0gRGF0dW1HZXRPYmpl Y3RJZChhZGF0dW0pOworCisJLyogc3Rha2V5cyAqLworCWFkYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQsIGh0dXAsCisJCQkJCQkJIEFudW1f cGdfbXZfc3RhdGlzdGljX3N0YWtleXMsICZpc251bGwpOworCUFzc2VydCgh aXNudWxsKTsKKworCWFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChhZGF0dW0p OworCisJa2V5cyA9IGJ1aWxkaW50MnZlY3RvcigoaW50MTYgKikgQVJSX0RB VEFfUFRSKGFyciksCisJCQkJCQkJQVJSX0RJTVMoYXJyKVswXSk7CisJUmVs ZWFzZVN5c0NhY2hlKGh0dXApOworCisJLyogVE9ETyBtYXliZSBzYXZlIHRo ZSBsaXN0IGludG8gcmVsY2FjaGUsIGFzIGluIFJlbGF0aW9uR2V0SW5kZXhM aXN0CisJICogICAgICAod2hpY2ggd2FzIHVzZWQgYXMgYW4gaW5zcGlyYXRp b24gb2YgdGhpcyBvbmUpPy4gKi8KKworCXJldHVybiBrZXlzOworfQorCisK IHZvaWQKLXVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQsIE1WRGVwZW5kZW5j aWVzIGRlcGVuZGVuY2llcywgaW50MnZlY3RvciAqYXR0cnMpCit1cGRhdGVf bXZfc3RhdHMoT2lkIG12b2lkLAorCQkJCU1WRGVwZW5kZW5jaWVzIGRlcGVu ZGVuY2llcywgTUNWTGlzdCBtY3ZsaXN0LAorCQkJCWludDJ2ZWN0b3IgKmF0 dHJzLCBWYWNBdHRyU3RhdHMgKipzdGF0cykKIHsKIAlIZWFwVHVwbGUJc3R1 cCwKIAkJCQlvbGR0dXA7CkBAIC0yMDYsMTggKzI2NCwyOSBAQCB1cGRhdGVf bXZfc3RhdHMoT2lkIG12b2lkLCBNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNp ZXMsIGludDJ2ZWN0b3IgKmF0dHJzKQogCQkJPSBQb2ludGVyR2V0RGF0dW0o c2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXMpKTsKIAl9 CiAKKwlpZiAobWN2bGlzdCAhPSBOVUxMKQorCXsKKwkJYnl0ZWEgKiBkYXRh ID0gc2VyaWFsaXplX212X21jdmxpc3QobWN2bGlzdCwgYXR0cnMsIHN0YXRz KTsKKwkJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2IC0xXSAg ICA9IChkYXRhID09IE5VTEwpOworCQl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3RhbWN2ICAtIDFdID0gUG9pbnRlckdldERhdHVtKGRhdGEpOwor CX0KKwogCS8qIGFsd2F5cyByZXBsYWNlIHRoZSB2YWx1ZSAoZWl0aGVyIGJ5 IGJ5dGVhIG9yIE5VTEwpICovCiAJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3RhZGVwcyAtMV0gPSB0cnVlOworCXJlcGxhY2VzW0FudW1fcGdf bXZfc3RhdGlzdGljX3N0YW1jdiAtMV0gPSB0cnVlOwogCiAJLyogYWx3YXlz IGNoYW5nZSB0aGUgYXZhaWxhYmlsaXR5IGZsYWdzICovCiAJbnVsbHNbQW51 bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19idWlsdCAtMV0gPSBmYWxzZTsKKwlu dWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVpbHQgLTFdID0gZmFs c2U7CiAJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cy0xXSAg ICAgPSBmYWxzZTsKIAogCS8qIHVzZSB0aGUgbmV3IGF0dG51bXMsIGluIGNh c2Ugd2UgcmVtb3ZlZCBzb21lIGRyb3BwZWQgb25lcyAqLwogCXJlcGxhY2Vz W0FudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQtMV0gPSB0cnVlOwor CXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX21jdl9idWlsdCAgLTFd ID0gdHJ1ZTsKIAlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFr ZXlzIC0xXSAgICA9IHRydWU7CiAKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfZGVwc19idWlsdC0xXSA9IEJvb2xHZXREYXR1bShkZXBlbmRlbmNp ZXMgIT0gTlVMTCk7CisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX21j dl9idWlsdCAgLTFdID0gQm9vbEdldERhdHVtKG1jdmxpc3QgIT0gTlVMTCk7 CiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMgLTFdICAg ID0gUG9pbnRlckdldERhdHVtKGF0dHJzKTsKIAogCS8qIElzIHRoZXJlIGFs cmVhZHkgYSBwZ19tdl9zdGF0aXN0aWMgdHVwbGUgZm9yIHRoaXMgYXR0cmli dXRlPyAqLwpAQCAtMjQ2LDYgKzMxNSwyMSBAQCB1cGRhdGVfbXZfc3RhdHMo T2lkIG12b2lkLCBNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsIGludDJ2 ZWN0b3IgKmF0dHJzKQogCWhlYXBfY2xvc2Uoc2QsIFJvd0V4Y2x1c2l2ZUxv Y2spOwogfQogCisKK2ludAorbXZfZ2V0X2luZGV4KEF0dHJOdW1iZXIgdmFy YXR0bm8sIGludDJ2ZWN0b3IgKiBzdGFrZXlzKQoreworCWludCBpLCBpZHgg PSAwOworCWZvciAoaSA9IDA7IGkgPCBzdGFrZXlzLT5kaW0xOyBpKyspCisJ eworCQlpZiAoc3Rha2V5cy0+dmFsdWVzW2ldIDwgdmFyYXR0bm8pCisJCQlp ZHggKz0gMTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCXJldHVybiBpZHg7 Cit9CisKIC8qIG11bHRpLXZhcmlhdGUgc3RhdHMgY29tcGFyYXRvciAqLwog CiAvKgpAQCAtMjU2LDExICszNDAsMTUgQEAgdXBkYXRlX212X3N0YXRzKE9p ZCBtdm9pZCwgTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBpbnQydmVj dG9yICphdHRycykKIGludAogY29tcGFyZV9zY2FsYXJzX3NpbXBsZShjb25z dCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpCiB7Ci0JRGF0 dW0JCWRhID0gKihEYXR1bSopYTsKLQlEYXR1bQkJZGIgPSAqKERhdHVtKili OwotCVNvcnRTdXBwb3J0IHNzdXA9IChTb3J0U3VwcG9ydCkgYXJnOworCXJl dHVybiBjb21wYXJlX2RhdHVtc19zaW1wbGUoKihEYXR1bSopYSwKKwkJCQkJ CQkJICooRGF0dW0qKWIsCisJCQkJCQkJCSAoU29ydFN1cHBvcnQpYXJnKTsK K30KIAotCXJldHVybiBBcHBseVNvcnRDb21wYXJhdG9yKGRhLCBmYWxzZSwg ZGIsIGZhbHNlLCBzc3VwKTsKK2ludAorY29tcGFyZV9kYXR1bXNfc2ltcGxl KERhdHVtIGEsIERhdHVtIGIsIFNvcnRTdXBwb3J0IHNzdXApCit7CisJcmV0 dXJuIEFwcGx5U29ydENvbXBhcmF0b3IoYSwgZmFsc2UsIGIsIGZhbHNlLCBz c3VwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L212c3RhdHMvY29tbW9uLmggYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5oCmluZGV4IDZkNTQ2NWIuLmY0MzA5ZjcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmgKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uaApAQCAtNDYsNyArNDYs MTUgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlEYXR1bQkJdmFsdWU7CQkJLyogYSBk YXRhIHZhbHVlICovCiAJaW50CQkJdHVwbm87CQkJLyogcG9zaXRpb24gaW5k ZXggZm9yIHR1cGxlIGl0IGNhbWUgZnJvbSAqLwogfSBTY2FsYXJJdGVtOwot IAorCisvKiAoZGUpc2VyaWFsaXphdGlvbiBpbmZvICovCit0eXBlZGVmIHN0 cnVjdCBEaW1lbnNpb25JbmZvIHsKKwlpbnQJCW52YWx1ZXM7CS8qIG51bWJl ciBvZiBkZWR1cGxpY2F0ZWQgdmFsdWVzICovCisJaW50CQluYnl0ZXM7CQkv KiBudW1iZXIgb2YgYnl0ZXMgKHNlcmlhbGl6ZWQpICovCisJaW50CQl0eXBs ZW47CQkvKiBwZ190eXBlLnR5cGxlbiAqLworCWJvb2wJdHlwYnl2YWw7CS8q IHBnX3R5cGUudHlwYnl2YWwgKi8KK30gRGltZW5zaW9uSW5mbzsKKwogLyog bXVsdGktc29ydCAqLwogdHlwZWRlZiBzdHJ1Y3QgTXVsdGlTb3J0U3VwcG9y dERhdGEgewogCWludAkJCQluZGltczsJCS8qIG51bWJlciBvZiBkaW1lbnNp b25zIHN1cHBvcnRlZCBieSB0aGUgKi8KQEAgLTcxLDUgKzc5LDYgQEAgaW50 IG11bHRpX3NvcnRfY29tcGFyZV9kaW0oaW50IGRpbSwgY29uc3QgU29ydEl0 ZW0gKmEsCiAJCQkJCQkgICBjb25zdCBTb3J0SXRlbSAqYiwgTXVsdGlTb3J0 U3VwcG9ydCBtc3MpOwogCiAvKiBjb21wYXJhdG9ycywgdXNlZCB3aGVuIGNv bnN0cnVjdGluZyBtdWx0aXZhcmlhdGUgc3RhdHMgKi8KK2ludCBjb21wYXJl X2RhdHVtc19zaW1wbGUoRGF0dW0gYSwgRGF0dW0gYiwgU29ydFN1cHBvcnQg c3N1cCk7CiBpbnQgY29tcGFyZV9zY2FsYXJzX3NpbXBsZShjb25zdCB2b2lk ICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpOwogaW50IGNvbXBhcmVf c2NhbGFyc19wYXJ0aXRpb24oY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAq Yiwgdm9pZCAqYXJnKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L212c3RhdHMvbWN2LmMgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL21j di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGRi ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL21jdi5jCkBAIC0wLDAgKzEsMTIzNyBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogbWN2LmMKKyAqCSAgUE9TVEdSRVMg bXVsdGl2YXJpYXRlIE1DViBsaXN0cworICoKKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAxNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvbWN2LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisKKyNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworI2luY2x1ZGUgImNvbW1vbi5o IgorCisvKgorICogTXVsdGl2YXJpYXRlIE1DVnMgKG1vc3QtY29tbW9uIHZh bHVlcyBsaXN0cykgYXJlIGEgc3RyYWlnaHRmb3J3YXJkCisgKiBleHRlbnNp b24gb2YgcmVndWxhciBNQ1YgbGlzdCwgdHJhY2tpbmcgY29tYmluYXRpb25z IG9mIHZhbHVlcyBmb3IKKyAqIHNldmVyYWwgYXR0cmlidXRlcyAoY29sdW1u cyksIGluY2x1ZGluZyBOVUxMIGZsYWdzLCBhbmQgZnJlcXVlbmN5CisgKiBv ZiB0aGUgY29tYmluYXRpb24uCisgKgorICogRm9yIGNvbHVtbnMgd2l0aCBz bWFsbCBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzLCB0aGlzIHdvcmtzIHF1 aXRlCisgKiB3ZWxsIGFuZCBtYXkgcmVwcmVzZW50IHRoZSBkaXN0cmlidXRp b24gdmVyeSBhY2N1cmF0ZWx5LiBGb3IgY29sdW1ucworICogd2l0aCBsYXJn ZSBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIChlLmcuIHN0b3JlZCBhcyBG TE9BVCksIHRoaXMKKyAqIGRvZXMgbm90IHdvcmsgdGhhdCB3ZWxsLiBFc3Bl Y2lhbGx5IGlmIHRoZSBkaXN0cmlidXRpb24gaXMgbW9zdGx5CisgKiB1bmlm b3JtLCB3aXRoIG5vIHZlcnkgY29tbW9uIGNvbWJpbmF0aW9ucy4KKyAqCisg KiBJZiB3ZSBjYW4gcmVwcmVzZW50IHRoZSBkaXN0cmlidXRpb24gYXMgYSBN Q1YgbGlzdCwgd2UgY2FuIGVzdGltYXRlCisgKiBzb21lIGNsYXVzZXMgKGUu Zy4gZXF1YWxpdHkgY2xhdXNlcykgbXVjaCBhY2N1cmF0ZWx5IHRoYW4gdXNp bmcKKyAqIGhpc3RvZ3JhbXMgZm9yIGV4YW1wbGUuCisgKgorICogQW5vdGhl ciBiZW5lZml0IG9mIE1DViBsaXN0cyAoY29tcGFyZWQgdG8gaGlzdG9ncmFt cykgaXMgdGhhdCB0aGV5CisgKiBkb24ndCByZXF1aXJlIHNvcnRpbmcgb2Yg dGhlIHZhbHVlcywgc28gdGhhdCB0aGV5IHdvcmsgYmV0dGVyIGZvcgorICog ZGF0YSB0eXBlcyB0aGF0IGVpdGhlciBkb24ndCBzdXBwb3J0IHNvcnRpbmcg YXQgYWxsLCBvciB3aGVuIHRoZQorICogc29ydGluZyBkb2VzIG5vdCByZWFs bHkgbWF0Y2ggdGhlIG1lYW5pbmcuIEZvciBleGFtcGxlIHdlIGtub3cgaG93 IHRvCisgKiBzb3J0IHN0cmluZ3MsIGJ1dCBpdCdzIHVubGlrZWx5IHRvIG1h a2UgbXVjaCBzZW5zZSBmb3IgY2l0eSBuYW1lcy4KKyAqCisgKgorICogSGFz aGVkIE1DViAobm90IHlldCBpbXBsZW1lbnRlZCkKKyAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICogQnkgcmVzdHJpY3RpbmcgdG8g TUNWIGxpc3QgYW5kIGVxdWFsaXR5IGNvbmRpdGlvbnMsIHdlIG1heSB1c2Ug aGFzaAorICogdmFsdWVzIGluc3RlYWQgb2YgdGhlIGxvbmcgdmFybGVuYSB2 YWx1ZXMuIFRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzCisgKiB0aGUgc3Rv cmFnZSByZXF1aXJlbWVudHMsIGFuZCB3ZSBjYW4gc3RpbGwgdXNlIGl0IHRv IGVzdGltYXRlIHRoZQorICogZXF1YWxpdHkgY29uZGl0aW9ucyAoYXNzdW1p bmcgdGhlIGNvbGxpc2lvbnMgYXJlIHJhcmUgZW5vdWdoKS4KKyAqCisgKiBU aGlzIGhvd2V2ZXIgY29tcGxpY2F0ZXMgbWF0Y2hpbmcgdGhlIGNvbHVtbnMg dG8gYXZhaWxhYmxlIHN0YXRzLCBhcworICogaXQgcmVxdWlyZXMgbWF0Y2hp bmcgY2xhdXNlcyAobm90IGNvbHVtbnMpIHRvIHN0YXRzLiBBbmQgaXQgbWF5 IGdldAorICogcXVpdGUgY29tcGxleCAtIGUuZy4gd2hhdCBpZiB0aGVyZSBh cmUgbXVsdGlwbGUgY2xhdXNlcywgZWFjaAorICogY29tcGF0aWJsZSB3aXRo IGRpZmZlcmVudCBzdGF0cyBzdWJzZXQ/CisgKgorICoKKyAqIFNlbGVjdGl2 aXR5IGVzdGltYXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq IFRoZSBlc3RpbWF0aW9uLCBpbXBsZW1lbnRlZCBpbiBjbGF1c2VsaXN0X212 X3NlbGVjdGl2aXR5X21jdmxpc3QoKSwKKyAqIGlzIHF1aXRlIHNpbXBsZSBp biBwcmluY2lwbGUgLSB3YWxrIHRocm91Z2ggdGhlIE1DViBpdGVtcyBhbmQg c3VtCisgKiBmcmVxdWVuY2llcyBvZiBhbGwgdGhlIGl0ZW1zIHRoYXQgbWF0 Y2ggYWxsIHRoZSBjbGF1c2VzLgorICoKKyAqIFRoZSBjdXJyZW50IGltcGxl bWVudGF0aW9uIHVzZXMgTUNWIGxpc3RzIHRvIGVzdGltYXRlcyB0aG9zZSB0 eXBlcworICogb2YgY2xhdXNlcyAodGhpbmsgb2YgV0hFUkUgY29uZGl0aW9u cyk6CisgKgorICogIChhKSBlcXVhbGl0eSBjbGF1c2VzICAgIFdIRVJFIChh ID0gMSkgQU5EIChiID0gMikKKyAqICAoYikgaW5lcXVhbGl0eSBjbGF1c2Vz ICBXSEVSRSAoYSA8IDEpIEFORCAoYiA+PSAyKQorICogIChjKSBOVUxMIGNs YXVzZXMgICAgICAgIFdIRVJFIChhIElTIE5VTEwpIEFORCAoYiBJUyBOT1Qg TlVMTCkKKyAqICAoZCkgT1IgY2xhdXNlcyAgICAgICAgICBXSEVSRSAoYSA8 IDEpIE9SIChiID49IDIpCisgKgorICogSXQncyBwb3NzaWJsZSB0byBhZGQg bW9yZSBjbGF1c2VzLCBmb3IgZXhhbXBsZToKKyAqCisgKiAgKGUpIG11bHRp LXZhciBjbGF1c2VzICAgV0hFUkUgKGEgPiBiKQorICoKKyAqIGFuZCBzbyBv bi4gVGhlc2UgYXJlIHRhc2tzIGZvciB0aGUgZnV0dXJlLCBub3QgeWV0IGlt cGxlbWVudGVkLgorICoKKyAqCisgKiBFc3RpbWF0aW5nIGVxdWFsaXR5IGNs YXVzZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV2hl biBjb21wdXRpbmcgc2VsZWN0aXZpdHkgZXN0aW1hdGUgZm9yIGVxdWFsaXR5 IGNsYXVzZXMKKyAqCisgKiAgICAgIChhID0gMSkgQU5EIChiID0gMikKKyAq CisgKiB3ZSBjYW4gZG8gdGhpcyBlc3RpbWF0ZSBwcmV0dHkgZXhhY3RseSBh c3N1bWluZyB0aGF0IHR3byBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK KyAqICAgICAgKDEpIHRoZXJlJ3MgYW4gZXF1YWxpdHkgY29uZGl0aW9uIG9u IGVhY2ggYXR0cmlidXRlCisgKgorICogICAgICAoMikgd2UgZmluZCBhIG1h dGNoaW5nIGl0ZW0gaW4gdGhlIE1DViBsaXN0CisgKgorICogSW4gdGhhdCBj YXNlIHdlIGtub3cgdGhlIE1DViBpdGVtIHJlcHJlc2VudHMgYWxsIHRoZSB0 dXBsZXMgbWF0Y2hpbmcKKyAqIHRoZSBjbGF1c2VzLCBhbmQgdGhlIHNlbGVj dGl2aXR5IGVzdGltYXRlIGlzIGNvbXBsZXRlLiBUaGlzIGlzIHdoYXQKKyAq IHdlIGNhbGwgJ2Z1bGwgbWF0Y2gnLgorICoKKyAqIFdoZW4gb25seSAoMSkg aG9sZHMsIGJ1dCB0aGVyZSdzIG5vIG1hdGNoaW5nIE1DViBpdGVtLCB3ZSBk b24ndCBrbm93CisgKiB3aGV0aGVyIHRoZXJlIGFyZSBubyBzdWNoIHJvd3Mg b3IganVzdCBhcmUgbm90IHZlcnkgZnJlcXVlbnQuIFdlIGNhbgorICogaG93 ZXZlciB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbGVhc3QgZnJlcXVlbnQg TUNWIGl0ZW0gYXMgYW4gdXBwZXIKKyAqIGJvdW5kIGZvciB0aGUgc2VsZWN0 aXZpdHkuCisgKgorICogSWYgdGhlIGVxdWFsaXR5IGNvbmRpdGlvbnMgbWF0 Y2ggb25seSBhIHN1YnNldCBvZiB0aGUgYXR0cmlidXRlcworICogdGhlIE1D ViBsaXN0IGlzIGJ1aWx0IG9uIChpLmUuIHdlIGNhbid0IGdldCBhIGZ1bGwg bWF0Y2ggLSB3ZSBtYXkgZ2V0CisgKiBtdWx0aXBsZSBNQ1YgaXRlbXMgbWF0 Y2hpbmcgdGhlIGNsYXVzZXMsIGJ1dCBldmVuIGlmIHdlIGdldCBhIHNpbmds ZQorICogbWF0Y2ggdGhlcmUgbWF5IGJlIGl0ZW1zIHRoYXQgZGlkIG5vdCBn ZXQgaW50byB0aGUgTUNWIGxpc3QuIEJ1dCBpbgorICogdGhpcyBjYXNlIHdl IGNhbiBzdGlsbCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbGFzdCBNQ1Yg aXRlbSB0byBjbGFtCisgKiB0aGUgJ2FkZGl0aW9uYWwnIHNlbGVjdGl2aXR5 IG5vdCBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBtYXRjaGluZyBpdGVtcy4KKyAq CisgKiBJZiB0aGVyZSdzIG5vIGhpc3RvZ3JhbSwgYmVjYXVzZSB0aGUgTUNW IGxpc3QgYXBwcm94aW1hdGVzIHRoZQorICogZGlzdHJpYnV0aW9uIGFjY3Vy YXRlbHkgKG5vdCBiZWNhdXNlIHRoZSBoaXN0b2dyYW0gd2FzIGRpc2FibGVk KSwKKyAqIGl0IGRvZXMgbm90IHJlYWxseSBtYXR0ZXIgd2hldGhlciB0aGVy ZSBhcmUgZXF1YWxpdHkgY29uZGl0aW9ucyBvbgorICogYWxsIHRoZSBjb2x1 bW5zIC0gd2UgY2FuIGRvIHByZXR0eSBhY2N1cmF0ZSBlc3RpbWF0aW9uIHVz aW5nIHRoZSBNQ1YuCisgKgorICogVE9ETyBGb3IgYSBjb21iaW5hdGlvbiBv ZiBlcXVhbGl0eSBjb25kaXRpb25zIChub3QgZnVsbC1tYXRjaCBjYXNlKQor ICogICAgICB3ZSBwcm9iYWJseSBjYW4gY2xhbXAgdGhlIHNlbGVjdGl2aXR5 IGJ5IHRoZSBtaW5pbXVtIG9mCisgKiAgICAgIHNlbGVjdGl2aXRpZXMgZm9y IGVhY2ggY29uZGl0aW9uLiBGb3IgZXhhbXBsZSBpZiB3ZSBrbm93IHRoZQor ICogICAgICBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIGZvciBlYWNoIGNv bHVtbiwgd2UgY2FuIHVzZSAxL25kaXN0aW5jdAorICogICAgICBhcyBhIHBl ci1jb2x1bW4gZXN0aW1hdGUuIE9yIHJhdGhlciAxL25kaXN0aW5jdCArIHNl bGVjdGl2aXR5CisgKiAgICAgIGRlcml2ZWQgZnJvbSB0aGUgTUNWIGxpc3Qu CisgKgorICogICAgICBJZiB3ZSBrbm93IHRoZSBlc3RpbWF0ZSBvZiBudW1i ZXIgb2YgY29tYmluYXRpb25zIG9mIHRoZSBjb2x1bW5zCisgKiAgICAgIChp LmUuIG5kaXN0aW5jdChBLEIpKSwgd2UgbWF5IGVzdGltYXRlIHRoZSBhdmVy YWdlIGZyZXF1ZW5jeSBvZgorICogICAgICBpdGVtcyBpbiB0aGUgcmVtYWlu aW5nIDEwJSBhcyBbMTAlIC8gbmRpc3RpbmN0KEEsQildLgorICoKKyAqCisg KiBCb3VuZGluZyBlc3RpbWF0ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQor ICogSW4gZ2VuZXJhbCB0aGUgTUNWIGxpc3RzIG1heSBub3QgcHJvdmlkZSBl c3RpbWF0ZXMgYXMgYWNjdXJhdGUgYXMKKyAqIGZvciB0aGUgZnVsbC1tYXRj aCBlcXVhbGl0eSBjYXNlLCBidXQgbWF5IHByb3ZpZGUgc29tZSB1c2VmdWwK KyAqIGxvd2VyL3VwcGVyIGJvdW5kYXJpZXMgZm9yIHRoZSBlc3RpbWF0aW9u IGVycm9yLgorICoKKyAqIFdpdGggZXF1YWxpdHkgY2xhdXNlcyB3ZSBjYW4g ZG8gYSBmZXcgbW9yZSB0cmlja3MgdG8gbmFycm93IHRoaXMKKyAqIGVycm9y IHJhbmdlIChzZWUgdGhlIHByZXZpb3VzIHNlY3Rpb24gYW5kIFRPRE8pLCBi dXQgd2l0aCBpbmVxdWFsaXR5CisgKiBjbGF1c2VzIChvciBnZW5lcmFsbHkg bm9uLWVxdWFsaXR5IGNsYXVzZXMpLCBpdCdzIHJhdGhlciBkaWZpY3VsdC4K KyAqIFRoZXJlJ3Mgbm90aGluZyBsaWtlIGEgJ2Z1bGwgbWF0Y2gnIC0gd2Ug aGF2ZSB0byBjb25zaWRlciBib3RoIHRoZQorICogTUNWIGl0ZW1zIGFuZCB0 aGUgcmVtYWluaW5nIHBhcnQgZXZlcnkgdGltZS4gV2UgY2FuJ3QgdXNlIHRo ZSBtaW5pbXVtCisgKiBzZWxlY3Rpdml0eSBvZiBNQ1YgaXRlbXMsIGFzIHRo ZSBjbGF1c2VzIG1heSBtYXRjaCBtdWx0aXBsZSBpdGVtcy4KKyAqCisgKiBG b3IgZXhhbXBsZSB3aXRoIGEgTUNWIGxpc3Qgb24gY29sdW1ucyAoQSwgQiks IGNvdmVyaW5nIDkwJSBvZiB0aGUKKyAqIHRhYmxlIChjb21wdXRlZCB3aGls ZSBidWlsZGluZyB0aGUgTUNWIGxpc3QpLCBhYm91dCB+MTAlIG9mIHRoZSB0 YWJsZQorICogaXMgbm90IHJlcHJlc2VudGVkIGJ5IHRoZSBNQ1YgbGlzdC4g U28gZXZlbiBpZiB0aGUgY29uZGl0aW9ucyBtYXRjaAorICogYWxsIHRoZSBy ZW1haW5pbmcgcm93cyAobm90IHJlcHJlc2VudGVkIGJ5IHRoZSBNQ1YgaXRl bXMpLCB3ZSBjYW4ndAorICogZ2V0IHNlbGVjdGl2aXR5IGhpZ2hlciB0aGFu IHRob3NlIDEwJS4gV2UgbWF5IHVzZSAxLzIgdGhlIHJlbWFpbmluZworICog c2VsZWN0aXZpdHkgYXMgYW4gZXN0aW1hdGUgKG1pbmltaXppbmcgYXZlcmFn ZSBlcnJvcikuCisgKgorICogVE9ETyBNb3N0IG9mIHRoZXNlIGlkZWFzIChl cnJvciBsaW1pdGluZykgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgKgor ICoKKyAqIEdlbmVyYWwgVE9ETworICogLS0tLS0tLS0tLS0tCisgKgorICog RklYTUUgVXNlIG1heF9tY3ZfaXRlbXMgZnJvbSBBTFRFUiBUQUJMRSBBREQg U1RBVElTVElDUyBjb21tYW5kLgorICoKKyAqIFRPRE8gQWRkIHN1cHBvcnQg Zm9yIGNsYXVzZXMgcmVmZXJlbmNpbmcgbXVsdGlwbGUgY29sdW1ucyAoYSA8 IGIpLgorICoKKyAqIFRPRE8gSXQncyBwb3NzaWJsZSB0byBidWlsZCBhIHNw ZWNpYWwgY2FzZSBvZiBNQ1YgbGlzdCwgc3RvcmluZyBub3QKKyAqICAgICAg dGhlIGFjdHVhbCB2YWx1ZXMgYnV0IG9ubHkgMzIvNjQtYml0IGhhc2guIFRo aXMgaXMgb25seSB1c2VmdWwKKyAqICAgICAgZm9yIGVzdGltYXRpbmcgZXF1 YWxpdHkgY2xhdXNlcyBhbmQgZm9yIGxhcmdlIHZhcmxlbmEgdHlwZXMsCisg KiAgICAgIHdoaWNoIGFyZSB2ZXJ5IGltcHJhY3RpY2FsIGZvciBwbGFpbiBN Q1YgbGlzdCBiZWNhdXNlIG9mIHNpemUuCisgKiAgICAgIEJ1dCBmb3IgdGhv c2UgZGF0YSB0eXBlcyB3ZSByZWFsbHkgd2FudCBqdXN0IHRoZSBlcXVhbGl0 eQorICogICAgICBjbGF1c2VzLCBzbyBpdCdzIGFjdHVhbGx5IGEgZ29vZCBz b2x1dGlvbi4KKyAqCisgKiBUT0RPIEN1cnJlbnRseSB0aGVyZSdzIG5vIGxv Z2ljIHRvIGNvbnNpZGVyIGJ1aWxkaW5nIG9ubHkgYSBNQ1YgbGlzdAorICog ICAgICAoYW5kIG5vdCBidWlsZGluZyB0aGUgaGlzdG9ncmFtIGF0IGFsbCks IGV4Y2VwdCBmb3IgZG9pbmcgdGhpcworICogICAgICBkZWNpc2lvbiBtYW51 YWxseSBpbiBBREQgU1RBVElTVElDUy4KKyAqLworCisvKgorICogRWFjaCBz ZXJpYWxpemVkIGl0ZW0gbmVlZHMgdG8gc3RvcmUgKGluIHRoaXMgb3JkZXIp OgorICoKKyAqIC0gaW5kZXhlcyAgICAgICAgICAgICAgKG5kaW0gKiBzaXpl b2YoaW50MzIpKQorICogLSBudWxsIGZsYWdzICAgICAgICAgICAobmRpbSAq IHNpemVvZihib29sKSkKKyAqIC0gZnJlcXVlbmN5ICAgICAgICAgICAgKHNp emVvZihkb3VibGUpKQorICoKKyAqIFNvIGluIHRvdGFsOgorICoKKyAqICAg bmRpbSAqIChzaXplb2YoaW50MzIpICsgc2l6ZW9mKGJvb2wpKSArIHNpemVv Zihkb3VibGUpCisgKi8KKyNkZWZpbmUgSVRFTV9TSVpFKG5kaW1zKQlcCisJ KG5kaW1zICogKHNpemVvZih1aW50MTYpICsgc2l6ZW9mKGJvb2wpKSArIHNp emVvZihkb3VibGUpKQorCisvKiBwb2ludGVycyBpbnRvIGEgZmxhdCBzZXJp YWxpemVkIGl0ZW0gb2YgSVRFTV9TSVpFKG4pIGJ5dGVzICovCisjZGVmaW5l IElURU1fSU5ERVhFUyhpdGVtKQkJCSgodWludDE2KilpdGVtKQorI2RlZmlu ZSBJVEVNX05VTExTKGl0ZW0sbmRpbXMpCQkoKGJvb2wqKShJVEVNX0lOREVY RVMoaXRlbSkgKyBuZGltcykpCisjZGVmaW5lIElURU1fRlJFUVVFTkNZKGl0 ZW0sbmRpbXMpCSgoZG91YmxlKikoSVRFTV9OVUxMUyhpdGVtLG5kaW1zKSAr IG5kaW1zKSkKKworLyoKKyAqIEJ1aWxkcyBNQ1YgbGlzdCBmcm9tIHNhbXBs ZSByb3dzLCBhbmQgcmVtb3ZlcyByb3dzIHJlcHJlc2VudGVkIGJ5CisgKiB0 aGUgTUNWIGxpc3QgZnJvbSB0aGUgc2FtcGxlICh0aGUgbnVtYmVyIG9mIHJl bWFpbmluZyBzYW1wbGUgcm93cyBpcworICogcmV0dXJuZWQgYnkgdGhlIG51 bXJvd3NfZmlsdGVyZWQgcGFyYW1ldGVyKS4KKyAqCisgKiBUaGUgbWV0aG9k IGlzIHF1aXRlIHNpbXBsZSAtIGluIHNob3J0IGl0IGRvZXMgYWJvdXQgdGhl c2Ugc3RlcHM6CisgKgorICogICAgICAgKDEpIHNvcnQgdGhlIGRhdGEgKGRl ZmF1bHQgY29sbGF0aW9uLCAnPCcgZm9yIHRoZSBkYXRhIHR5cGUpCisgKgor ICogICAgICAgKDIpIGNvdW50IGRpc3RpbmN0IGdyb3VwcywgZGVjaWRlIGhv dyBtYW55IHRvIGtlZXAKKyAqCisgKiAgICAgICAoMykgYnVpbGQgdGhlIE1D ViBsaXN0IHVzaW5nIHRoZSB0aHJlc2hvbGQgZGV0ZXJtaW5lZCBpbiAoMikK KyAqCisgKiAgICAgICAoNCkgcmVtb3ZlIHJvd3MgcmVwcmVzZW50ZWQgYnkg dGhlIE1DViBmcm9tIHRoZSBzYW1wbGUKKyAqCisgKiBGb3IgbW9yZSBkZXRh aWxzLCBzZWUgdGhlIGNvbW1lbnRzIGluIHRoZSBjb2RlLgorICoKKyAqIEZJ WE1FIFNpbmdsZS1kaW1lbnNpb25hbCBNQ1YgaXMgc29ydGVkIGJ5IGZyZXF1 ZW5jeSAoZGVzY2VuZGluZykuIFdlCisgKiAgICAgICBzaG91bGQgZG8gdGhh dCB0b28sIGJlY2F1c2Ugd2hlbiB3YWxraW5nIHRocm91Z2ggdGhlIGxpc3Qg d2UKKyAqICAgICAgIHdhbnQgdG8gY2hlY2sgdGhlIG1vc3QgZnJlcXVlbnQg aXRlbXMgZmlyc3QuCisgKgorICogVE9ETyBXZSdyZSB1c2luZyBEYXR1bSAo OEIpLCBldmVuIGZvciBkYXRhIHR5cGVzIChlLmcuIGludDQgb3IKKyAqICAg ICAgZmxvYXQ0KS4gTWF5YmUgd2UgY291bGQgc2F2ZSBzb21lIHNwYWNlIGhl cmUsIGJ1dCB0aGUgYnl0ZWEKKyAqICAgICAgY29tcHJlc3Npb24gc2hvdWxk IGhhbmRsZSBpdCBqdXN0IGZpbmUuCisgKgorICogVE9ETyBUaGlzIHByb2Jh Ymx5IHNob3VsZCBub3QgdXNlIHRoZSBuZGlzdGluY3QgZGlyZWN0bHkgKGFz IGNvbXB1dGVkCisgKiAgICAgIGZyb20gdGhlIHRhYmxlLCBidXQgcmF0aGVy IGVzdGltYXRlIHRoZSBudW1iZXIgb2YgZGlzdGluY3QKKyAqICAgICAgdmFs dWVzIGluIHRoZSB0YWJsZSksIG5vPworICovCitNQ1ZMaXN0CitidWlsZF9t dl9tY3ZsaXN0KGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2 ZWN0b3IgKmF0dHJzLAorCQkJCQkgIFZhY0F0dHJTdGF0cyAqKnN0YXRzLCBp bnQgKm51bXJvd3NfZmlsdGVyZWQpCit7CisJaW50IGksIGo7CisJaW50IG51 bWF0dHJzID0gYXR0cnMtPmRpbTE7CisJaW50IG5kaXN0aW5jdCA9IDA7CisJ aW50IG1jdl90aHJlc2hvbGQgPSAwOworCWludCBjb3VudCA9IDA7CisJaW50 IG5pdGVtcyA9IDA7CisKKwlNQ1ZMaXN0CW1jdmxpc3QgPSBOVUxMOworCisJ LyogU29ydCBieSBtdWx0aXBsZSBjb2x1bW5zICh1c2luZyBhcnJheSBvZiBT b3J0U3VwcG9ydCkgKi8KKwlNdWx0aVNvcnRTdXBwb3J0IG1zcyA9IG11bHRp X3NvcnRfaW5pdChudW1hdHRycyk7CisKKwkvKgorCSAqIFByZWFsbG9jYXRl IHNwYWNlIGZvciBhbGwgdGhlIGl0ZW1zIGFzIGEgc2luZ2xlIGNodW5rLCBh bmQgcG9pbnQKKwkgKiB0aGUgaXRlbXMgdG8gdGhlIGFwcHJvcHJpYXRlIHBh cnRzIG9mIHRoZSBhcnJheS4KKwkgKi8KKwlTb3J0SXRlbSAgICppdGVtcyAg PSAoU29ydEl0ZW0qKXBhbGxvYzAobnVtcm93cyAqIHNpemVvZihTb3J0SXRl bSkpOworCURhdHVtCSAgICp2YWx1ZXMgPSAoRGF0dW0qKXBhbGxvYzAoc2l6 ZW9mKERhdHVtKSAqIG51bXJvd3MgKiBudW1hdHRycyk7CisJYm9vbAkgICAq aXNudWxsID0gKGJvb2wqKXBhbGxvYzAoc2l6ZW9mKGJvb2wpICogbnVtcm93 cyAqIG51bWF0dHJzKTsKKworCS8qIGtlZXAgYWxsIHRoZSByb3dzIGJ5IGRl ZmF1bHQgKGFzIGlmIHRoZXJlIHdhcyBubyBNQ1YgbGlzdCkgKi8KKwkqbnVt cm93c19maWx0ZXJlZCA9IG51bXJvd3M7CisKKwlmb3IgKGkgPSAwOyBpIDwg bnVtcm93czsgaSsrKQorCXsKKwkJaXRlbXNbaV0udmFsdWVzID0gJnZhbHVl c1tpICogbnVtYXR0cnNdOworCQlpdGVtc1tpXS5pc251bGwgPSAmaXNudWxs W2kgKiBudW1hdHRyc107CisJfQorCisJLyogbG9hZCB0aGUgdmFsdWVzL251 bGwgZmxhZ3MgZnJvbSBzYW1wbGUgcm93cyAqLworCWZvciAoaiA9IDA7IGog PCBudW1yb3dzOyBqKyspCisJCWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsg aSsrKQorCQkJaXRlbXNbal0udmFsdWVzW2ldID0gaGVhcF9nZXRhdHRyKHJv d3Nbal0sIGF0dHJzLT52YWx1ZXNbaV0sCisJCQkJCQkJCXN0YXRzW2ldLT50 dXBEZXNjLCAmaXRlbXNbal0uaXNudWxsW2ldKTsKKworCS8qIHByZXBhcmUg dGhlIHNvcnQgZnVuY3Rpb25zIGZvciBhbGwgdGhlIGF0dHJpYnV0ZXMgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKKwkJbXVsdGlfc29y dF9hZGRfZGltZW5zaW9uKG1zcywgaSwgaSwgc3RhdHMpOworCisJLyogZG8g dGhlIHNvcnQsIHVzaW5nIHRoZSBtdWx0aS1zb3J0ICovCisJcXNvcnRfYXJn KCh2b2lkICopIGl0ZW1zLCBudW1yb3dzLCBzaXplb2YoU29ydEl0ZW0pLAor CQkJCW11bHRpX3NvcnRfY29tcGFyZSwgbXNzKTsKKworCS8qCisJICogQ291 bnQgdGhlIG51bWJlciBvZiBkaXN0aW5jdCBncm91cHMgLSBqdXN0IHdhbGsg dGhyb3VnaCB0aGUKKwkgKiBzb3J0ZWQgbGlzdCBhbmQgY291bnQgdGhlIG51 bWJlciBvZiBrZXkgY2hhbmdlcy4gV2UgdXNlIHRoaXMgdG8KKwkgKiBkZXRl cm1pbmUgdGhlIHRocmVzaG9sZCAoMTI1JSBvZiB0aGUgYXZlcmFnZSBmcmVx dWVuY3kpLgorCSAqLworCW5kaXN0aW5jdCA9IDE7CisJZm9yIChpID0gMTsg aSA8IG51bXJvd3M7IGkrKykKKwkJaWYgKG11bHRpX3NvcnRfY29tcGFyZSgm aXRlbXNbaV0sICZpdGVtc1tpLTFdLCBtc3MpICE9IDApCisJCQluZGlzdGlu Y3QgKz0gMTsKKworCS8qCisJICogRGV0ZXJtaW5lIGhvdyBtYW55IGdyb3Vw cyBhY3R1YWxseSBleGNlZWQgdGhlIHRocmVzaG9sZCwgYW5kIHRoZW4KKwkg KiB3YWxrIHRoZSBhcnJheSBhZ2FpbiBhbmQgY29sbGVjdCB0aGVtIGludG8g YW4gYXJyYXkuIFdlJ2xsIGFsd2F5cworCSAqIHJlcXVpcmUgYXQgbGVhc3Qg NCByb3dzIHBlciBncm91cC4KKwkgKgorCSAqIEJ1dCBpZiB3ZSBjYW4gZml0 IGFsbCB0aGUgZGlzdGluY3QgdmFsdWVzIGluIHRoZSBNQ1YgbGlzdCAoaS5l LgorCSAqIGlmIHRoZXJlIGFyZSBsZXNzIGRpc3RpbmN0IGdyb3VwcyB0aGFu IE1WU1RBVF9NQ1ZMSVNUX01BWF9JVEVNUyksCisJICogd2UnbGwgcmVxdWly ZSBvbmx5IDIgcm93cyBwZXIgZ3JvdXAuCisJICoKKwkgKiBUT0RPIEZvciBu b3cgdGhlIHRocmVzaG9sZCBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgc2luZ2xl LWNvbHVtbgorCSAqICAgICAgY2FzZSAoYXZlcmFnZSArIDI1JSksIGJ1dCBt YXliZSB0aGF0J3Mgd29ydGggcmV2aXNpdGluZworCSAqICAgICAgZm9yIHRo ZSBtdWx0aXZhcmlhdGUgY2FzZS4KKwkgKgorCSAqIFRPRE8gV2UgY2FuIGRv IHRoaXMgb25seSBpZiB3ZSBiZWxpZXZlIHdlIGdvdCBhbGwgdGhlIGRpc3Rp bmN0CisJICogICAgICB2YWx1ZXMgb2YgdGhlIHRhYmxlLgorCSAqCisJICog RklYTUUgVGhpcyBzaG91bGQgcmVhbGx5IHJlZmVyZW5jZSBtY3ZfbWF4X2l0 ZW1zIChmcm9tIGNhdGFsb2cpCisJICogICAgICAgaW5zdGVhZCBvZiB0aGUg Y29uc3RhbnQgTVZTVEFUX01DVkxJU1RfTUFYX0lURU1TLgorCSAqLworCW1j dl90aHJlc2hvbGQgPSAxLjI1ICogbnVtcm93cyAvIG5kaXN0aW5jdDsKKwlt Y3ZfdGhyZXNob2xkID0gKG1jdl90aHJlc2hvbGQgPCA0KSA/IDQgIDogbWN2 X3RocmVzaG9sZDsKKworCWlmIChuZGlzdGluY3QgPD0gTVZTVEFUX01DVkxJ U1RfTUFYX0lURU1TKQorCQltY3ZfdGhyZXNob2xkID0gMjsKKworCS8qCisJ ICogV2FsayB0aHJvdWdoIHRoZSBzb3J0ZWQgZGF0YSBhZ2FpbiwgYW5kIHNl ZSBob3cgbWFueSBncm91cHMKKwkgKiByZWFjaCB0aGUgbWN2X3RocmVzaG9s ZCAoYW5kIGJlY29tZSBhbiBpdGVtIGluIHRoZSBNQ1YgbGlzdCkuCisJICov CisJY291bnQgPSAxOworCWZvciAoaSA9IDE7IGkgPD0gbnVtcm93czsgaSsr KQorCXsKKwkJLyogbGFzdCByb3cgb3IgbmV3IGdyb3VwLCBzbyBjaGVjayBp ZiB3ZSBleGNlZWQgIG1jdl90aHJlc2hvbGQgKi8KKwkJaWYgKChpID09IG51 bXJvd3MpIHx8IChtdWx0aV9zb3J0X2NvbXBhcmUoJml0ZW1zW2ldLCAmaXRl bXNbaS0xXSwgbXNzKSAhPSAwKSkKKwkJeworCQkJLyogZ3JvdXAgaGl0cyB0 aGUgdGhyZXNob2xkLCBjb3VudCB0aGUgZ3JvdXAgYXMgTUNWIGl0ZW0gKi8K KwkJCWlmIChjb3VudCA+PSBtY3ZfdGhyZXNob2xkKQorCQkJCW5pdGVtcyAr PSAxOworCisJCQljb3VudCA9IDE7CisJCX0KKwkJZWxzZQkvKiB3aXRoaW4g Z3JvdXAsIHNvIGluY3JlYXNlIHRoZSBudW1iZXIgb2YgaXRlbXMgKi8KKwkJ CWNvdW50ICs9IDE7CisJfQorCisJLyogd2Uga25vdyB0aGUgbnVtYmVyIG9m IE1DViBsaXN0IGl0ZW1zLCBzbyBsZXQncyBidWlsZCB0aGUgbGlzdCAqLwor CWlmIChuaXRlbXMgPiAwKQorCXsKKwkJLyogYWxsb2NhdGUgdGhlIE1DViBs aXN0IHN0cnVjdHVyZSwgc2V0IHBhcmFtZXRlcnMgd2Uga25vdyAqLworCQlt Y3ZsaXN0ID0gKE1DVkxpc3QpcGFsbG9jMChzaXplb2YoTUNWTGlzdERhdGEp KTsKKworCQltY3ZsaXN0LT5tYWdpYyA9IE1WU1RBVF9NQ1ZfTUFHSUM7CisJ CW1jdmxpc3QtPnR5cGUgPSBNVlNUQVRfTUNWX1RZUEVfQkFTSUM7CisJCW1j dmxpc3QtPm5kaW1lbnNpb25zID0gbnVtYXR0cnM7CisJCW1jdmxpc3QtPm5p dGVtcyA9IG5pdGVtczsKKworCQkvKgorCQkgKiBQcmVhbGxvY2F0ZSBEYXR1 bS9pc251bGwgYXJyYXlzIChub3QgYXMgYSBzaW5nbGUgY2h1bmssIGFzCisJ CSAqIHdlJ2xsIHBhc3MgdGhpcyBvdXRzaWRlIHRoaXMgbWV0aG9kIGFuZCB0 aHVzIGl0IG5lZWRzIHRvIGJlCisJCSAqIGVhc3kgdG8gcGZyZWUoKSB0aGUg ZGF0YSAoYW5kIHdlIHdvdWxkbid0IGtub3cgd2hlcmUgdGhlCisJCSAqIGFy cmF5cyBzdGFydCkuCisJCSAqCisJCSAqIFRPRE8gTWF5YmUgdGhlIHJlYXNv bmluZyB0aGF0IHdlIGNhbid0IGFsbG9jYXRlIGEgc2luZ2xlCisJCSAqICAg ICAgcGllY2UgYmVjYXVzZSB3ZSdyZSBwYXNzaW5nIGl0IG91dCBpcyBib2d1 cz8gV2hvJ2QKKwkJICogICAgICBmcmVlIGEgc2luZ2xlIGl0ZW0gb2YgdGhl IE1DViBsaXN0LCBhbnl3YXk/CisJCSAqCisJCSAqIFRPRE8gTWF5YmUgd2l0 aCBhIHByb3BlciBlbmNvZGluZyAoc3R1ZmZpbmcgYWxsIHRoZSB2YWx1ZXMK KwkJICogICAgICBpbnRvIGEgbGlzdC1sZXZlbCBhcnJheSwgdGhpcyB3aWxs IGJlIHVudHJ1ZSk/CisJCSAqLworCQltY3ZsaXN0LT5pdGVtcyA9IChNQ1ZJ dGVtKilwYWxsb2MwKHNpemVvZihNQ1ZJdGVtKSpuaXRlbXMpOworCisJCWZv ciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwkJeworCQkJbWN2bGlzdC0+ aXRlbXNbaV0gPSAoTUNWSXRlbSlwYWxsb2MwKHNpemVvZihNQ1ZJdGVtRGF0 YSkpOworCQkJbWN2bGlzdC0+aXRlbXNbaV0tPnZhbHVlcyA9IChEYXR1bSop cGFsbG9jMChzaXplb2YoRGF0dW0pKm51bWF0dHJzKTsKKwkJCW1jdmxpc3Qt Pml0ZW1zW2ldLT5pc251bGwgPSAoYm9vbCopcGFsbG9jMChzaXplb2YoYm9v bCkqbnVtYXR0cnMpOworCQl9CisKKwkJLyoKKwkJICogUmVwZWF0IHRoZSBz YW1lIGxvb3AgYXMgYWJvdmUsIGJ1dCB0aGlzIHRpbWUgY29weSB0aGUgZGF0 YQorCQkgKiBpbnRvIHRoZSBNQ1YgbGlzdCAoZm9yIGl0ZW1zIGV4Y2VlZGlu ZyB0aGUgdGhyZXNob2xkKS4KKwkJICoKKwkJICogVE9ETyBNYXliZSB3ZSBj b3VsZCBzaW1wbHkgcmVtZW1iZXIgaW5kZXhlcyBvZiB0aGUgbGFzdCBpdGVt CisJCSAqICAgICAgaW4gZWFjaCBncm91cCAoZnJvbSB0aGUgcHJldmlvdXMg bG9vcCk/CisJCSAqLworCQljb3VudCA9IDE7CisJCW5pdGVtcyA9IDA7CisJ CWZvciAoaSA9IDE7IGkgPD0gbnVtcm93czsgaSsrKQorCQl7CisJCQkvKiBs YXN0IHJvdyBvciBhIG5ldyBncm91cCAqLworCQkJaWYgKChpID09IG51bXJv d3MpIHx8IChtdWx0aV9zb3J0X2NvbXBhcmUoJml0ZW1zW2ldLCAmaXRlbXNb aS0xXSwgbXNzKSAhPSAwKSkKKwkJCXsKKwkJCQkvKiBjb3VudCB0aGUgTUNW IGl0ZW0gaWYgZXhjZWVkaW5nIHRoZSB0aHJlc2hvbGQgKGFuZCBjb3B5IGlu dG8gdGhlIGFycmF5KSAqLworCQkJCWlmIChjb3VudCA+PSBtY3ZfdGhyZXNo b2xkKQorCQkJCXsKKwkJCQkJLyoganVzdCBwb2ludGVyIHRvIHRoZSBwcm9w ZXIgcGxhY2UgaW4gdGhlIGxpc3QgKi8KKwkJCQkJTUNWSXRlbSBpdGVtID0g bWN2bGlzdC0+aXRlbXNbbml0ZW1zXTsKKworCQkJCQkvKiBjb3B5IHZhbHVl cyBmcm9tIHRoZSBfcHJldmlvdXNfIGdyb3VwIChsYXN0IGl0ZW0gb2YpICov CisJCQkJCW1lbWNweShpdGVtLT52YWx1ZXMsIGl0ZW1zWyhpLTEpXS52YWx1 ZXMsIHNpemVvZihEYXR1bSkgKiBudW1hdHRycyk7CisJCQkJCW1lbWNweShp dGVtLT5pc251bGwsIGl0ZW1zWyhpLTEpXS5pc251bGwsIHNpemVvZihib29s KSAgKiBudW1hdHRycyk7CisKKworCQkJCQkvKiBhbmQgZmluYWxseSB0aGUg Z3JvdXAgZnJlcXVlbmN5ICovCisJCQkJCWl0ZW0tPmZyZXF1ZW5jeSA9IChk b3VibGUpY291bnQgLyBudW1yb3dzOworCisJCQkJCS8qIG5leHQgaXRlbSAq LworCQkJCQluaXRlbXMgKz0gMTsKKwkJCQl9CisKKwkJCQljb3VudCA9IDE7 CisJCQl9CisJCQllbHNlCS8qIHNhbWUgZ3JvdXAsIGp1c3QgaW5jcmVhc2Ug dGhlIG51bWJlciBvZiBpdGVtcyAqLworCQkJCWNvdW50ICs9IDE7CisJCX0K KworCQkvKiBtYWtlIHN1cmUgdGhlIGxvb3BzIGFyZSBjb25zaXN0ZW50ICov CisJCUFzc2VydChuaXRlbXMgPT0gbWN2bGlzdC0+bml0ZW1zKTsKKworCQkv KgorCQkgKiBSZW1vdmUgdGhlIHJvd3MgbWF0Y2hpbmcgdGhlIE1DViBsaXN0 IChpLmUuIGtlZXAgb25seSByb3dzCisJCSAqIHRoYXQgYXJlIG5vdCByZXBy ZXNlbnRlZCBieSB0aGUgTUNWIGxpc3QpLgorCQkgKgorCQkgKiBGSVhNRSBU aGlzIGltcGxlbWVudGF0aW9uIGlzIHJhdGhlciBuYWl2ZSwgZWZmZWN0aXZl bHkgTyhOXjIpLgorCQkgKiAgICAgICBBcyB0aGUgTUNWIGxpc3QgZ3Jvd3Ms IHRoZSBjaGVjayB3aWxsIHRha2UgbG9uZ2VyIGFuZAorCQkgKiAgICAgICBs b25nZXIuIEFuZCBhcyB0aGUgbnVtYmVyIG9mIHNhbXBsZWQgcm93cyBpbmNy ZWFzZXMgKGJ5CisJCSAqICAgICAgIGluY3JlYXNpbmcgc3RhdGlzdGljcyB0 YXJnZXQpLCBpdCB3aWxsIHRha2UgbG9uZ2VyIGFuZAorCQkgKiAgICAgICBs b25nZXIuIE9uZSBvcHRpb24gaXMgdG8gc29ydCB0aGUgTUNWIGl0ZW1zIGZp cnN0IGFuZAorCQkgKiAgICAgICB0aGVuIHBlcmZvcm0gYSBiaW5hcnkgc2Vh cmNoLgorCQkgKgorCQkgKiAgICAgICBBIGJldHRlciBvcHRpb24gd291bGQg YmUga2VlcGluZyB0aGUgSUQgb2YgdGhlIHJvdyBpbgorCQkgKiAgICAgICB0 aGUgc29ydCBpdGVtLCBhbmQgdGhlbiBqdXN0IHdhbGsgdGhyb3VnaCB0aGUg aXRlbXMgYW5kCisJCSAqICAgICAgIG1hcmsgcm93cyB0byByZW1vdmUgKGlu IGEgYml0bWFwIG9mIHRoZSBzYW1lIHNpemUpLgorCQkgKiAgICAgICBUaGVy ZSdzIG5vdCBzcGFjZSBmb3IgdGhhdCBpbiBTb3J0SXRlbSBhdCB0aGlzIG1v bWVudCwKKwkJICogICAgICAgYnV0IGl0J3MgdHJpdmlhbCB0byBhZGQgJ3By aXZhdGUnIHBvaW50ZXIsIG9yIGp1c3QKKwkJICogICAgICAgdXNpbmcgYW5v dGhlciBzdHJ1Y3R1cmUgd2l0aCBleHRyYSBmaWVsZCAoc3RhcnRpbmcgd2l0 aAorCQkgKiAgICAgICBTb3J0SXRlbSwgc28gdGhhdCB0aGUgY29tcGFyYXRv cnMgZXRjLiBzdGlsbCB3b3JrKS4KKwkJICoKKwkJICogICAgICAgQW5vdGhl ciBvcHRpb24gaXMgdG8gdXNlIHRoZSBzb3J0ZWQgYXJyYXkgb2YgaXRlbXMK KwkJICogICAgICAgKGJlY2F1c2UgdGhhdCdzIGhvdyB3ZSBzb3J0ZWQgdGhl IHNvdXJjZSBkYXRhKSwgYW5kCisJCSAqICAgICAgIHNpbXBseSBkbyBhIGJz ZWFyY2goKSBpbnRvIGl0LiBJZiB3ZSBmaW5kIGEgbWF0Y2hpbmcKKwkJICog ICAgICAgaXRlbSwgdGhlIHJvdyBiZWxvbmdzIHRvIHRoZSBNQ1YgbGlzdC4K KwkJICovCisJCWlmIChuaXRlbXMgPT0gbmRpc3RpbmN0KSAvKiBhbGwgcm93 cyBhcmUgY292ZXJlZCBieSBNQ1YgaXRlbXMgKi8KKwkJCSpudW1yb3dzX2Zp bHRlcmVkID0gMDsKKwkJZWxzZSAvKiAobml0ZW1zIDwgbmRpc3RpbmN0KSAm JiAobml0ZW1zID4gMCkgKi8KKwkJeworCQkJaW50IG5maWx0ZXJlZCA9IDA7 CisJCQlIZWFwVHVwbGUgKnJvd3NfZmlsdGVyZWQgPSAoSGVhcFR1cGxlKilw YWxsb2MwKHNpemVvZihIZWFwVHVwbGUpICogbnVtcm93cyk7CisKKwkJCS8q IHVzZWQgZm9yIHRoZSBzZWFyY2hlcyAqLworCQkJU29ydEl0ZW0gaXRlbSwg bWN2aXRlbTs7CisKKwkJCWl0ZW0udmFsdWVzID0gKERhdHVtKilwYWxsb2Mw KG51bWF0dHJzICogc2l6ZW9mKERhdHVtKSk7CisJCQlpdGVtLmlzbnVsbCA9 IChib29sKilwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9mKGJvb2wpKTsKKwor CQkJLyoKKwkJCSAqIEZJWE1FIHdlIGRvbid0IG5lZWQgdG8gYWxsb2NhdGUg dGhpcywgd2UgY2FuIHJlZmVyZW5jZQorCQkJICogICAgICAgdGhlIE1DViBp dGVtIGRpcmVjdGx5IC4uLgorCQkJICovCisJCQltY3ZpdGVtLnZhbHVlcyA9 IChEYXR1bSopcGFsbG9jMChudW1hdHRycyAqIHNpemVvZihEYXR1bSkpOwor CQkJbWN2aXRlbS5pc251bGwgPSAoYm9vbCopcGFsbG9jMChudW1hdHRycyAq IHNpemVvZihib29sKSk7CisKKwkJCS8qIHdhbGsgdGhyb3VnaCB0aGUgdHVw bGVzLCBjb21wYXJlIHRoZSB2YWx1ZXMgdG8gTUNWIGl0ZW1zICovCisJCQlm b3IgKGkgPSAwOyBpIDwgbnVtcm93czsgaSsrKQorCQkJeworCQkJCWJvb2wJ bWF0Y2ggPSBmYWxzZTsKKworCQkJCS8qIGNvbGxlY3QgdGhlIGtleSB2YWx1 ZXMgZnJvbSB0aGUgcm93ICovCisJCQkJZm9yIChqID0gMDsgaiA8IG51bWF0 dHJzOyBqKyspCisJCQkJCWl0ZW0udmFsdWVzW2pdID0gaGVhcF9nZXRhdHRy KHJvd3NbaV0sIGF0dHJzLT52YWx1ZXNbal0sCisJCQkJCQkJCQkJc3RhdHNb al0tPnR1cERlc2MsICZpdGVtLmlzbnVsbFtqXSk7CisKKwkJCQkvKiBzY2Fu IHRocm91Z2ggdGhlIE1DViBsaXN0IGZvciBtYXRjaGVzICovCisJCQkJZm9y IChqID0gMDsgaiA8IG1jdmxpc3QtPm5pdGVtczsgaisrKQorCQkJCXsKKwkJ CQkJLyoKKwkJCQkJICogVE9ETyBDcmVhdGUgYSBTb3J0SXRlbS9NQ1ZJdGVt IGNvbXBhcmF0b3Igc28gdGhhdAorCQkJCQkgKiAgICAgIHdlIGRvbid0IG5l ZWQgdG8gZG8gbWVtY3B5KCkgbGlrZSBjcmF6eS4KKwkJCQkJICovCisJCQkJ CW1lbWNweShtY3ZpdGVtLnZhbHVlcywgbWN2bGlzdC0+aXRlbXNbal0tPnZh bHVlcywKKwkJCQkJCQludW1hdHRycyAqIHNpemVvZihEYXR1bSkpOworCQkJ CQltZW1jcHkobWN2aXRlbS5pc251bGwsIG1jdmxpc3QtPml0ZW1zW2pdLT5p c251bGwsCisJCQkJCQkJbnVtYXR0cnMgKiBzaXplb2YoYm9vbCkpOworCisJ CQkJCWlmIChtdWx0aV9zb3J0X2NvbXBhcmUoJml0ZW0sICZtY3ZpdGVtLCBt c3MpID09IDApCisJCQkJCXsKKwkJCQkJCW1hdGNoID0gdHJ1ZTsKKwkJCQkJ CWJyZWFrOworCQkJCQl9CisJCQkJfQorCisJCQkJLyogaWYgbm8gbWF0Y2gg aW4gdGhlIE1DViBsaXN0LCBjb3B5IHRoZSByb3cgaW50byB0aGUgZmlsdGVy ZWQgb25lcyAqLworCQkJCWlmICghIG1hdGNoKQorCQkJCQltZW1jcHkoJnJv d3NfZmlsdGVyZWRbbmZpbHRlcmVkKytdLCAmcm93c1tpXSwgc2l6ZW9mKEhl YXBUdXBsZSkpOworCQkJfQorCisJCQkvKiByZXBsYWNlIHRoZSByb3dzIGFu ZCByZW1lbWJlciBob3cgbWFueSByb3dzIHdlIGtlcHQgKi8KKwkJCW1lbWNw eShyb3dzLCByb3dzX2ZpbHRlcmVkLCBzaXplb2YoSGVhcFR1cGxlKSAqIG5m aWx0ZXJlZCk7CisJCQkqbnVtcm93c19maWx0ZXJlZCA9IG5maWx0ZXJlZDsK KworCQkJLyogZnJlZSBhbGwgdGhlIGRhdGEgdXNlZCBoZXJlICovCisJCQlw ZnJlZShyb3dzX2ZpbHRlcmVkKTsKKwkJCXBmcmVlKGl0ZW0udmFsdWVzKTsK KwkJCXBmcmVlKGl0ZW0uaXNudWxsKTsKKwkJCXBmcmVlKG1jdml0ZW0udmFs dWVzKTsKKwkJCXBmcmVlKG1jdml0ZW0uaXNudWxsKTsKKwkJfQorCX0KKwor CXBmcmVlKHZhbHVlcyk7CisJcGZyZWUoaXRlbXMpOworCXBmcmVlKGlzbnVs bCk7CisKKwlyZXR1cm4gbWN2bGlzdDsKK30KKworCisvKiBmZXRjaCB0aGUg TUNWIGxpc3QgKGFzIGEgYnl0ZWEpIGZyb20gdGhlIHBnX212X3N0YXRpc3Rp YyBjYXRhbG9nICovCitNQ1ZMaXN0Citsb2FkX212X21jdmxpc3QoT2lkIG12 b2lkKQoreworCWJvb2wJCWlzbnVsbCA9IGZhbHNlOworCURhdHVtCQltY3Zs aXN0OworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUZvcm1fcGdf bXZfc3RhdGlzdGljCW12c3RhdDsKKyNlbmRpZgorCisJLyogUHJlcGFyZSB0 byBzY2FuIHBnX212X3N0YXRpc3RpYyBmb3IgZW50cmllcyBoYXZpbmcgaW5k cmVsaWQgPSB0aGlzIHJlbC4gKi8KKwlIZWFwVHVwbGUJaHR1cCA9IFNlYXJj aFN5c0NhY2hlMShNVlNUQVRPSUQsIE9iamVjdElkR2V0RGF0dW0obXZvaWQp KTsKKworCWlmICghIEhlYXBUdXBsZUlzVmFsaWQoaHR1cCkpCisJCXJldHVy biBOVUxMOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCW12c3Rh dCA9IChGb3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXApOwor CUFzc2VydChtdnN0YXQtPm1jdl9lbmFibGVkICYmIG12c3RhdC0+bWN2X2J1 aWx0KTsKKyNlbmRpZgorCisJbWN2bGlzdCA9IFN5c0NhY2hlR2V0QXR0cihN VlNUQVRPSUQsIGh0dXAsCisJCQkJCQkgICBBbnVtX3BnX212X3N0YXRpc3Rp Y19zdGFtY3YsICZpc251bGwpOworCisJQXNzZXJ0KCFpc251bGwpOworCisJ UmVsZWFzZVN5c0NhY2hlKGh0dXApOworCisJcmV0dXJuIGRlc2VyaWFsaXpl X212X21jdmxpc3QoRGF0dW1HZXRCeXRlYVAobWN2bGlzdCkpOworfQorCisv KiBwcmludCBzb21lIGJhc2ljIGluZm8gYWJvdXQgdGhlIE1DViBsaXN0Cisg KgorICogVE9ETyBBZGQgaW5mbyBhYm91dCB3aGF0IHBhcnQgb2YgdGhlIHRh YmxlIHRoaXMgY292ZXJzLgorICovCitEYXR1bQorcGdfbXZfc3RhdHNfbWN2 bGlzdF9pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYnl0ZWEJICAgKmRh dGEgPSBQR19HRVRBUkdfQllURUFfUCgwKTsKKwljaGFyCSAgICpyZXN1bHQ7 CisKKwlNQ1ZMaXN0CW1jdmxpc3QgPSBkZXNlcmlhbGl6ZV9tdl9tY3ZsaXN0 KGRhdGEpOworCisJcmVzdWx0ID0gcGFsbG9jMCgxMjgpOworCXNucHJpbnRm KHJlc3VsdCwgMTI4LCAibml0ZW1zPSVkIiwgbWN2bGlzdC0+bml0ZW1zKTsK KworCXBmcmVlKG1jdmxpc3QpOworCisJUEdfUkVUVVJOX1RFWFRfUChjc3Ry aW5nX3RvX3RleHQocmVzdWx0KSk7Cit9CisKKy8qIHVzZWQgdG8gcGFzcyBj b250ZXh0IGludG8gYnNlYXJjaCgpICovCitzdGF0aWMgU29ydFN1cHBvcnQg c3N1cF9wcml2YXRlID0gTlVMTDsKKworc3RhdGljIGludCBic2VhcmNoX2Nv bXBhcmF0b3IoY29uc3Qgdm9pZCAqIGEsIGNvbnN0IHZvaWQgKiBiKTsKKwor LyoKKyAqIFNlcmlhbGl6ZSBNQ1YgbGlzdCBpbnRvIGEgYnl0ZWEgdmFsdWUu IFRoZSBiYXNpYyBhbGdvcml0aG0gaXMgc2ltcGxlOgorICoKKyAqICgxKSBw ZXJmb3JtIGRlZHVwbGljYXRpb24gZm9yIGVhY2ggYXR0cmlidXRlIChzZXBh cmF0ZWx5KQorICogICAgIChhKSBjb2xsZWN0IGFsbCAobm9uLU5VTEwpIGF0 dHJpYnV0ZSB2YWx1ZXMgZnJvbSBhbGwgTUNWIGl0ZW1zCisgKiAgICAgKGIp IHNvcnQgdGhlIGRhdGEgKHVzaW5nICdsdCcgZnJvbSBWYWNBdHRyU3RhdHMp CisgKiAgICAgKGMpIHJlbW92ZSBkdXBsaWNhdGUgdmFsdWVzIGZyb20gdGhl IGFycmF5CisgKgorICogKDIpIHNlcmlhbGl6ZSB0aGUgYXJyYXlzIGludG8g YSBieXRlYSB2YWx1ZQorICoKKyAqICgzKSBwcm9jZXNzIGFsbCBNQ1YgbGlz dCBpdGVtcworICogICAgIChhKSByZXBsYWNlIHZhbHVlcyB3aXRoIGluZGV4 ZXMgaW50byB0aGUgYXJyYXlzCisgKgorICogRWFjaCBhdHRyaWJ1dGUgaGFz IHRvIGJlIHByb2Nlc3NlZCBzZXBhcmF0ZWx5LCBiZWNhdXNlIHdlJ3JlIG1p eGluZworICogZGlmZmVyZW50IGRhdGF0eXBlcywgYW5kIHdlIGRvbid0IGtu b3cgd2hhdCBlcXVhbGl0eSBtZWFucyBmb3IgdGhlbS4KKyAqIFdlJ3JlIGFs c28gbWl4aW5nIHBhc3MtYnktdmFsdWUgYW5kIHBhc3MtYnktcmVmIHR5cGVz LCBhbmQgc28gb24uCisgKgorICogV2UnbGwgdXNlIHVpbnQxNiB2YWx1ZXMg Zm9yIHRoZSBpbmRleGVzIGluIHN0ZXAgKDMpLCBhcyB3ZSBkb24ndAorICog YWxsb3cgbW9yZSB0aGFuIDhrIE1DViBpdGVtcyAoc2VlIGxpc3QgbWF4X21j dl9pdGVtcykuIFdlIG1pZ2h0CisgKiBpbmNyZWFzZSB0aGlzIHRvIDY1ayBh bmQgc3RpbGwgZml0IGludG8gdWludDE2LgorICoKKyAqIFdlIGRvbid0IHJl YWxseSBleHBlY3QgdGhlIGhpZ2ggY29tcHJlc3Npb24gYXMgd2l0aCBoaXN0 b2dyYW1zLAorICogYmVjYXVzZSB3ZSdyZSBub3QgZG9pbmcgYW55IGJ1Y2tl dCBzcGxpdHMgZXRjLiAod2hpY2ggaXMgdGhlIHNvdXJjZQorICogb2YgaGln aCByZWR1bmRhbmN5IHRoZXJlKSwgYnV0IHdlIG5lZWQgdG8gZG8gaXQgYW55 d2F5IGFzIHdlIG5lZWQKKyAqIHRvIHNlcmlhbGl6ZSB2YXJsZW5hIHZhbHVl cyBldGMuIFdlIG1pZ2h0IGludmVudCBhbm90aGVyIHdheSB0bworICogc2Vy aWFsaXplIE1DViBsaXN0cywgYnV0IGxldCdzIGtlZXAgaXQgY29uc2lzdGVu dC4KKyAqCisgKiBGSVhNRSBUaGlzIHByb2JhYmx5IGxlYWtzIG1lbW9yeSwg b3IgYXQgbGVhc3QgdXNlcyBpdCBpbmVmZmljaWVudGx5CisgKiAgICAgICAo bWFueSBzbWFsbCBwYWxsb2MoKSBjYWxscyBpbnN0ZWFkIG9mIGEgbGFyZ2Ug b25lKS4KKyAqCisgKiBUT0RPIENvbnNpZGVyIHVzaW5nIDE2LWJpdCB2YWx1 ZXMgZm9yIHRoZSBpbmRleGVzIGluIHN0ZXAgKDMpLgorICoKKyAqIFRPRE8g Q29uc2lkZXIgcGFja2luZyBib29sZWFuIGZsYWdzIChOVUxMKSBmb3IgZWFj aCBpdGVtIGludG8gJ2NoYXInCisgKiAgICAgIG9yIGEgbG9uZ2VyIHR5cGUg KGluc3RlYWQgb2YgdXNpbmcgYW4gYXJyYXkgb2YgYm9vbCBpdGVtcykuCisg Ki8KK2J5dGVhICoKK3NlcmlhbGl6ZV9tdl9tY3ZsaXN0KE1DVkxpc3QgbWN2 bGlzdCwgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCSBWYWNBdHRyU3RhdHMg KipzdGF0cykKK3sKKwlpbnQJaSwgajsKKwlpbnQJbmRpbXMgPSBtY3ZsaXN0 LT5uZGltZW5zaW9uczsKKwlpbnQJaXRlbXNpemUgPSBJVEVNX1NJWkUobmRp bXMpOworCisJU2l6ZQl0b3RhbF9sZW5ndGggPSAwOworCisJY2hhciAgICpp dGVtID0gcGFsbG9jMChpdGVtc2l6ZSk7CisKKwkvKiBzZXJpYWxpemVkIGl0 ZW1zIChpbmRleGVzIGludG8gYXJyYXlzLCBldGMuKSAqLworCWJ5dGVhICAq b3V0cHV0OworCWNoYXIgICAqZGF0YSA9IE5VTEw7CisKKwkvKiB2YWx1ZXMg cGVyIGRpbWVuc2lvbiAoYW5kIG51bWJlciBvZiBub24tTlVMTCB2YWx1ZXMp ICovCisJRGF0dW0gKip2YWx1ZXMgPSAoRGF0dW0qKilwYWxsb2MwKHNpemVv ZihEYXR1bSopICogbmRpbXMpOworCWludAkgICAqY291bnRzID0gKGludCop cGFsbG9jMChzaXplb2YoaW50KSAqIG5kaW1zKTsKKworCS8qIGluZm8gYWJv dXQgZGltZW5zaW9ucyAoZm9yIGRlc2VyaWFsaXplKSAqLworCURpbWVuc2lv bkluZm8gKiBpbmZvCisJCQkJPSAoRGltZW5zaW9uSW5mbyAqKXBhbGxvYzAo c2l6ZW9mKERpbWVuc2lvbkluZm8pKm5kaW1zKTsKKworCS8qIHNvcnQgc3Vw cG9ydCBkYXRhICovCisJU29ydFN1cHBvcnQJc3N1cCA9IChTb3J0U3VwcG9y dClwYWxsb2MwKHNpemVvZihTb3J0U3VwcG9ydERhdGEpKm5kaW1zKTsKKwor CS8qIGNvbGxlY3QgYW5kIGRlZHVwbGljYXRlIHZhbHVlcyBmb3IgZWFjaCBk aW1lbnNpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwl7 CisJCWludCBjb3VudDsKKwkJU3RkQW5hbHl6ZURhdGEgKnRtcCA9IChTdGRB bmFseXplRGF0YSAqKXN0YXRzW2ldLT5leHRyYV9kYXRhOworCisJCS8qIGtl ZXAgaW1wb3J0YW50IGluZm8gYWJvdXQgdGhlIGRhdGEgdHlwZSAqLworCQlp bmZvW2ldLnR5cGxlbiAgID0gc3RhdHNbaV0tPmF0dHJ0eXBlLT50eXBsZW47 CisJCWluZm9baV0udHlwYnl2YWwgPSBzdGF0c1tpXS0+YXR0cnR5cGUtPnR5 cGJ5dmFsOworCisJCS8qIGFsbG9jYXRlIHNwYWNlIGZvciBhbGwgdmFsdWVz LCBpbmNsdWRpbmcgTlVMTHMgKHdvbid0IHVzZSB0aGVtKSAqLworCQl2YWx1 ZXNbaV0gPSAoRGF0dW0qKXBhbGxvYzAoc2l6ZW9mKERhdHVtKSAqIG1jdmxp c3QtPm5pdGVtcyk7CisKKwkJZm9yIChqID0gMDsgaiA8IG1jdmxpc3QtPm5p dGVtczsgaisrKQorCQl7CisJCQlpZiAoISBtY3ZsaXN0LT5pdGVtc1tqXS0+ aXNudWxsW2ldKQkvKiBza2lwIE5VTEwgdmFsdWVzICovCisJCQl7CisJCQkJ dmFsdWVzW2ldW2NvdW50c1tpXV0gPSBtY3ZsaXN0LT5pdGVtc1tqXS0+dmFs dWVzW2ldOworCQkJCWNvdW50c1tpXSArPSAxOworCQkJfQorCQl9CisKKwkJ LyogdGhlcmUgYXJlIGp1c3QgTlVMTCB2YWx1ZXMgaW4gdGhpcyBkaW1lbnNp b24gKi8KKwkJaWYgKGNvdW50c1tpXSA9PSAwKQorCQkJY29udGludWU7CisK KwkJLyogc29ydCBhbmQgZGVkdXBsaWNhdGUgKi8KKwkJc3N1cFtpXS5zc3Vw X2N4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCQlzc3VwW2ldLnNzdXBf Y29sbGF0aW9uID0gREVGQVVMVF9DT0xMQVRJT05fT0lEOworCQlzc3VwW2ld LnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxzZTsKKworCQlQcmVwYXJlU29ydFN1 cHBvcnRGcm9tT3JkZXJpbmdPcCh0bXAtPmx0b3ByLCAmc3N1cFtpXSk7CisK KwkJcXNvcnRfYXJnKHZhbHVlc1tpXSwgY291bnRzW2ldLCBzaXplb2YoRGF0 dW0pLAorCQkJCSAgY29tcGFyZV9zY2FsYXJzX3NpbXBsZSwgJnNzdXBbaV0p OworCisJCS8qCisJCSAqIFdhbGsgdGhyb3VnaCB0aGUgYXJyYXkgYW5kIGVs aW1pbmF0ZSBkdXBsaWNpdGF0ZSB2YWx1ZXMsIGJ1dAorCQkgKiBrZWVwIHRo ZSBvcmRlcmluZyAoc28gdGhhdCB3ZSBjYW4gZG8gYnNlYXJjaCBsYXRlciku IFdlIGtub3cKKwkJICogdGhlcmUncyBhdCBsZWFzdCAxIGl0ZW0sIHNvIHdl IGNhbiBza2lwIHRoZSBmaXJzdCBlbGVtZW50LgorCQkgKi8KKwkJY291bnQg PSAxOwkvKiBudW1iZXIgb2YgZGVkdXBsaWNhdGVkIGl0ZW1zICovCisJCWZv ciAoaiA9IDE7IGogPCBjb3VudHNbaV07IGorKykKKwkJeworCQkJLyogaWYg aXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgdmFsdWUsIHdlIG5l ZWQgdG8ga2VlcCBpdCAqLworCQkJaWYgKGNvbXBhcmVfZGF0dW1zX3NpbXBs ZSh2YWx1ZXNbaV1bai0xXSwgdmFsdWVzW2ldW2pdLCAmc3N1cFtpXSkgIT0g MCkKKwkJCXsKKwkJCQkvKiBYWFg6IG5vdCBuZWVkZWQgaWYgKGNvdW50ID09 IGopICovCisJCQkJdmFsdWVzW2ldW2NvdW50XSA9IHZhbHVlc1tpXVtqXTsK KwkJCQljb3VudCArPSAxOworCQkJfQorCQl9CisKKwkJLyogZG8gbm90IGV4 Y2VlZCBVSU5UMTZfTUFYICovCisJCUFzc2VydChjb3VudCA8PSBVSU5UMTZf TUFYKTsKKworCQkvKiBrZWVwIGluZm8gYWJvdXQgdGhlIGRlZHVwbGljYXRl ZCBjb3VudCAqLworCQlpbmZvW2ldLm52YWx1ZXMgPSBjb3VudDsKKworCQkv KiBjb21wdXRlIHNpemUgb2YgdGhlIHNlcmlhbGl6ZWQgZGF0YSAqLworCQlp ZiAoaW5mb1tpXS50eXBieXZhbCB8fCAoaW5mb1tpXS50eXBsZW4gPiAwKSkK KwkJCS8qIGJ5IHZhbHVlIHBhc2VkIGJ5IHJlZmVyZW5jZSwgYnV0IGZpeGVk IGxlbmd0aCAqLworCQkJaW5mb1tpXS5uYnl0ZXMgPSBpbmZvW2ldLm52YWx1 ZXMgKiBpbmZvW2ldLnR5cGxlbjsKKwkJZWxzZSBpZiAoaW5mb1tpXS50eXBs ZW4gPT0gLTEpCisJCQkvKiB2YXJsZW5hLCBzbyBqdXN0IHVzZSBWQVJTSVpF X0FOWSAqLworCQkJZm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsg aisrKQorCQkJCWluZm9baV0ubmJ5dGVzICs9IFZBUlNJWkVfQU5ZKHZhbHVl c1tpXVtqXSk7CisJCWVsc2UgaWYgKGluZm9baV0udHlwbGVuID09IC0yKQor CQkJLyogY3N0cmluZywgc28gc2ltcGx5IHN0cmxlbiAqLworCQkJZm9yIChq ID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJCWluZm9baV0u bmJ5dGVzICs9IHN0cmxlbihEYXR1bUdldFBvaW50ZXIodmFsdWVzW2ldW2pd KSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bmtub3duIGRhdGEgdHlw ZSB0eXBieXZhbD0lZCB0eXBsZW49JWQiLAorCQkJCWluZm9baV0udHlwYnl2 YWwsIGluZm9baV0udHlwbGVuKTsKKwl9CisKKwkvKgorCSAqIE5vdyB3ZSBm aW5hbGx5IGtub3cgaG93IG11Y2ggc3BhY2Ugd2UnbGwgbmVlZCBmb3IgdGhl IHNlcmlhbGl6ZWQKKwkgKiBNQ1YgbGlzdCwgYXMgaXQgY29udGFpbnMgdGhl c2UgZmllbGRzOgorCSAqCisJICogLSBsZW5ndGggKDRCKSBmb3IgdmFybGVu YQorCSAqIC0gbWFnaWMgKDRCKQorCSAqIC0gdHlwZSAoNEIpCisJICogLSBu ZGltZW5zaW9ucyAoNEIpCisJICogLSBuaXRlbXMgKDRCKQorCSAqIC0gaW5m byAobmRpbSAqIHNpemVvZihEaW1lbnNpb25JbmZvKQorCSAqIC0gYXJyYXlz IG9mIHZhbHVlcyBmb3IgZWFjaCBkaW1lbnNpb24KKwkgKiAtIHNlcmlhbGl6 ZWQgaXRlbXMgKG5pdGVtcyAqIGl0ZW1zaXplKQorCSAqCisJICogU28gdGhl ICdoZWFkZXInIHNpemUgaXMgMjBCICsgbmRpbSAqIHNpemVvZihEaW1lbnNp b25JbmZvKSBhbmQKKwkgKiB0aGVuIHdlJ2xsIHBsYWNlIHRoZSBkYXRhLgor CSAqLworCXRvdGFsX2xlbmd0aCA9IChzaXplb2YoaW50MzIpICsgb2Zmc2V0 b2YoTUNWTGlzdERhdGEsIGl0ZW1zKQorCQkJCQkrIG5kaW1zICogc2l6ZW9m KERpbWVuc2lvbkluZm8pCisJCQkJCSsgbWN2bGlzdC0+bml0ZW1zICogaXRl bXNpemUpOworCisJZm9yIChpID0gMDsgaSA8IG5kaW1zOyBpKyspCisJCXRv dGFsX2xlbmd0aCArPSBpbmZvW2ldLm5ieXRlczsKKworCS8qIGVuZm9yY2Ug YXJiaXRyYXJ5IGxpbWl0IG9mIDFNQiAqLworCWlmICh0b3RhbF9sZW5ndGgg PiAxMDI0ICogMTAyNCkKKwkJZWxvZyhFUlJPUiwgInNlcmlhbGl6ZWQgTUNW IGV4Y2VlZHMgMU1CICglbGQpIiwgdG90YWxfbGVuZ3RoKTsKKworCS8qIGFs bG9jYXRlIHNwYWNlIGZvciB0aGUgc2VyaWFsaXplZCBNQ1YgbGlzdCwgc2V0 IGhlYWRlciBmaWVsZHMgKi8KKwlvdXRwdXQgPSAoYnl0ZWEqKXBhbGxvYzAo dG90YWxfbGVuZ3RoKTsKKwlTRVRfVkFSU0laRShvdXRwdXQsIHRvdGFsX2xl bmd0aCk7CisKKwkvKiB3ZSdsbCB1c2UgJ3B0cicgdG8ga2VlcCB0cmFjayBv ZiB0aGUgcGxhY2UgdG8gd3JpdGUgZGF0YSAqLworCWRhdGEgPSBWQVJEQVRB KG91dHB1dCk7CisKKwltZW1jcHkoZGF0YSwgbWN2bGlzdCwgb2Zmc2V0b2Yo TUNWTGlzdERhdGEsIGl0ZW1zKSk7CisJZGF0YSArPSBvZmZzZXRvZihNQ1ZM aXN0RGF0YSwgaXRlbXMpOworCisJbWVtY3B5KGRhdGEsIGluZm8sIHNpemVv ZihEaW1lbnNpb25JbmZvKSAqIG5kaW1zKTsKKwlkYXRhICs9IHNpemVvZihE aW1lbnNpb25JbmZvKSAqIG5kaW1zOworCisJLyogdmFsdWUgYXJyYXkgZm9y IGVhY2ggZGltZW5zaW9uICovCisJZm9yIChpID0gMDsgaSA8IG5kaW1zOyBp KyspCisJeworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJY2hhciAq dG1wID0gZGF0YTsKKyNlbmRpZgorCQlmb3IgKGogPSAwOyBqIDwgaW5mb1tp XS5udmFsdWVzOyBqKyspCisJCXsKKwkJCWlmIChpbmZvW2ldLnR5cGJ5dmFs KQorCQkJeworCQkJCS8qIHBhc3NlZCBieSB2YWx1ZSAvIERhdHVtICovCisJ CQkJbWVtY3B5KGRhdGEsICZ2YWx1ZXNbaV1bal0sIGluZm9baV0udHlwbGVu KTsKKwkJCQlkYXRhICs9IGluZm9baV0udHlwbGVuOworCQkJfQorCQkJZWxz ZSBpZiAoaW5mb1tpXS50eXBsZW4gPiAwKQorCQkJeworCQkJCS8qIHBhc2Vk IGJ5IHJlZmVyZW5jZSwgYnV0IGZpeGVkIGxlbmd0aCAobmFtZSwgdGlkLCAu Li4pICovCisJCQkJbWVtY3B5KGRhdGEsICZ2YWx1ZXNbaV1bal0sIGluZm9b aV0udHlwbGVuKTsKKwkJCQlkYXRhICs9IGluZm9baV0udHlwbGVuOworCQkJ fQorCQkJZWxzZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0gLTEpCisJCQl7CisJ CQkJLyogdmFybGVuYSAqLworCQkJCW1lbWNweShkYXRhLCBEYXR1bUdldFBv aW50ZXIodmFsdWVzW2ldW2pdKSwKKwkJCQkJCQlWQVJTSVpFX0FOWSh2YWx1 ZXNbaV1bal0pKTsKKwkJCQlkYXRhICs9IFZBUlNJWkVfQU5ZKHZhbHVlc1tp XVtqXSk7CisJCQl9CisJCQllbHNlIGlmIChpbmZvW2ldLnR5cGxlbiA9PSAt MikKKwkJCXsKKwkJCQkvKiBjc3RyaW5nIChkb24ndCBmb3JnZXQgdGhlIFww IHRlcm1pbmF0b3IhKSAqLworCQkJCW1lbWNweShkYXRhLCBEYXR1bUdldFBv aW50ZXIodmFsdWVzW2ldW2pdKSwKKwkJCQkJCQlzdHJsZW4oRGF0dW1HZXRQ b2ludGVyKHZhbHVlc1tpXVtqXSkpICsgMSk7CisJCQkJZGF0YSArPSBzdHJs ZW4oRGF0dW1HZXRQb2ludGVyKHZhbHVlc1tpXVtqXSkpICsgMTsKKwkJCX0K KwkJfQorCQlBc3NlcnQoKGRhdGEgLSB0bXApID09IGluZm9baV0ubmJ5dGVz KTsKKwl9CisKKwkvKiBhbmQgZmluYWxseSwgdGhlIE1DViBpdGVtcyAqLwor CWZvciAoaSA9IDA7IGkgPCBtY3ZsaXN0LT5uaXRlbXM7IGkrKykKKwl7CisJ CS8qIGRvbid0IHdyaXRlIGJleW9uZCB0aGUgYWxsb2NhdGVkIHNwYWNlICov CisJCUFzc2VydChkYXRhIDw9IChjaGFyKilvdXRwdXQgKyB0b3RhbF9sZW5n dGggLSBpdGVtc2l6ZSk7CisKKwkJLyogcmVzZXQgdGhlIHZhbHVlcyBmb3Ig ZWFjaCBpdGVtICovCisJCW1lbXNldChpdGVtLCAwLCBpdGVtc2l6ZSk7CisK KwkJZm9yIChqID0gMDsgaiA8IG5kaW1zOyBqKyspCisJCXsKKwkJCS8qIGRv IHRoZSBsb29rdXAgb25seSBmb3Igbm9uLU5VTEwgdmFsdWVzICovCisJCQlp ZiAoISBtY3ZsaXN0LT5pdGVtc1tpXS0+aXNudWxsW2pdKQorCQkJeworCQkJ CURhdHVtICogdiA9IE5VTEw7CisJCQkJc3N1cF9wcml2YXRlID0gJnNzdXBb al07CisKKwkJCQl2ID0gKERhdHVtKilic2VhcmNoKCZtY3ZsaXN0LT5pdGVt c1tpXS0+dmFsdWVzW2pdLAorCQkJCQkJCQl2YWx1ZXNbal0sIGluZm9bal0u bnZhbHVlcywgc2l6ZW9mKERhdHVtKSwKKwkJCQkJCQkJYnNlYXJjaF9jb21w YXJhdG9yKTsKKworCQkJCWlmICh2ID09IE5VTEwpCisJCQkJCWVsb2coRVJS T1IsICJ2YWx1ZSBmb3IgZGltICVkIG5vdCBmb3VuZCBpbiBhcnJheSIsIGop OworCisJCQkJLyogY29tcHV0ZSBpbmRleCB3aXRoaW4gdGhlIGFycmF5ICov CisJCQkJSVRFTV9JTkRFWEVTKGl0ZW0pW2pdID0gKHYgLSB2YWx1ZXNbal0p OworCisJCQkJLyogY2hlY2sgdGhlIGluZGV4IGlzIHdpdGhpbiBleHBlY3Rl ZCBib3VuZHMgKi8KKwkJCQlBc3NlcnQoSVRFTV9JTkRFWEVTKGl0ZW0pW2pd ID49IDApOworCQkJCUFzc2VydChJVEVNX0lOREVYRVMoaXRlbSlbal0gPCBp bmZvW2pdLm52YWx1ZXMpOworCQkJfQorCQl9CisKKwkJLyogY29weSBOVUxM IGFuZCBmcmVxdWVuY3kgZmxhZ3MgaW50byB0aGUgaXRlbSAqLworCQltZW1j cHkoSVRFTV9OVUxMUyhpdGVtLCBuZGltcyksCisJCQkJbWN2bGlzdC0+aXRl bXNbaV0tPmlzbnVsbCwgc2l6ZW9mKGJvb2wpICogbmRpbXMpOworCQltZW1j cHkoSVRFTV9GUkVRVUVOQ1koaXRlbSwgbmRpbXMpLAorCQkJCSZtY3ZsaXN0 LT5pdGVtc1tpXS0+ZnJlcXVlbmN5LCBzaXplb2YoZG91YmxlKSk7CisKKwkJ LyogY29weSB0aGUgaXRlbSBpbnRvIHRoZSBhcnJheSAqLworCQltZW1jcHko ZGF0YSwgaXRlbSwgaXRlbXNpemUpOworCisJCWRhdGEgKz0gaXRlbXNpemU7 CisJfQorCisJLyogYXQgdGhpcyBwb2ludCB3ZSBleHBlY3QgdG8gbWF0Y2gg dGhlIHRvdGFsX2xlbmd0aCBleGFjdGx5ICovCisJQXNzZXJ0KChkYXRhIC0g KGNoYXIqKW91dHB1dCkgPT0gdG90YWxfbGVuZ3RoKTsKKworCXJldHVybiBv dXRwdXQ7Cit9CisKKy8qCisgKiBJbnZlcnNlIHRvIHNlcmlhbGl6ZV9tdl9t Y3ZsaXN0KCkgLSBzZWUgdGhlIGNvbW1lbnQgdGhlcmUuCisgKgorICogV2Un bGwgZG8gZnVsbCBkZXNlcmlhbGl6YXRpb24sIGJlY2F1c2Ugd2UgZG9uJ3Qg cmVhbGx5IGV4cGVjdCBoaWdoCisgKiBkdXBsaWNhdGlvbiBvZiB2YWx1ZXMg c28gdGhlIGNhY2hpbmcgbWF5IG5vdCBiZSBhcyBlZmZpY2llbnQgYXMgd2l0 aAorICogaGlzdG9ncmFtcy4KKyAqLworTUNWTGlzdCBkZXNlcmlhbGl6ZV9t dl9tY3ZsaXN0KGJ5dGVhICogZGF0YSkKK3sKKwlpbnQJCWksIGo7CisJU2l6 ZQlleHBlY3RlZF9zaXplOworCU1DVkxpc3QgbWN2bGlzdDsKKwljaGFyICAg KnRtcDsKKworCWludAkJbmRpbXMsIG5pdGVtcywgaXRlbXNpemU7CisJRGlt ZW5zaW9uSW5mbyAqaW5mbyA9IE5VTEw7CisKKwl1aW50MTYgKmluZGV4ZXMg PSBOVUxMOworCURhdHVtICoqdmFsdWVzID0gTlVMTDsKKworCS8qIGxvY2Fs IGFsbG9jYXRpb24gYnVmZmVyICh1c2VkIG9ubHkgZm9yIGRlc2VyaWFsaXph dGlvbikgKi8KKwlpbnQJCWJ1ZmZsZW47CisJY2hhciAgICpidWZmOworCWNo YXIgICAqcHRyOworCisJLyogYnVmZmVyIHVzZWQgZm9yIHRoZSByZXN1bHQg Ki8KKwlpbnQJCXJidWZmbGVuOworCWNoYXIgICAqcmJ1ZmY7CisJY2hhciAg ICpycHRyOworCisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7 CisKKwlpZiAoVkFSU0laRV9BTllfRVhIRFIoZGF0YSkgPCBvZmZzZXRvZihN Q1ZMaXN0RGF0YSxpdGVtcykpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIE1D ViBTaXplICVsZCAoZXhwZWN0ZWQgYXQgbGVhc3QgJWxkKSIsCisJCQkgVkFS U0laRV9BTllfRVhIRFIoZGF0YSksIG9mZnNldG9mKE1DVkxpc3REYXRhLGl0 ZW1zKSk7CisKKwkvKiByZWFkIHRoZSBNQ1YgbGlzdCBoZWFkZXIgKi8KKwlt Y3ZsaXN0ID0gKE1DVkxpc3QpcGFsbG9jMChzaXplb2YoTUNWTGlzdERhdGEp KTsKKworCS8qIGluaXRpYWxpemUgcG9pbnRlciB0byB0aGUgZGF0YSBwYXJ0 IChza2lwIHRoZSB2YXJsZW5hIGhlYWRlcikgKi8KKwl0bXAgPSBWQVJEQVRB KGRhdGEpOworCisJLyogZ2V0IHRoZSBoZWFkZXIgYW5kIHBlcmZvcm0gYmFz aWMgc2FuaXR5IGNoZWNrcyAqLworCW1lbWNweShtY3ZsaXN0LCB0bXAsIG9m ZnNldG9mKE1DVkxpc3REYXRhLGl0ZW1zKSk7CisJdG1wICs9IG9mZnNldG9m KE1DVkxpc3REYXRhLGl0ZW1zKTsKKworCWlmIChtY3ZsaXN0LT5tYWdpYyAh PSBNVlNUQVRfTUNWX01BR0lDKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBN Q1YgbWFnaWMgJWQgKGV4cGVjdGVkICVkZCkiLAorCQkJIG1jdmxpc3QtPm1h Z2ljLCBNVlNUQVRfTUNWX01BR0lDKTsKKworCWlmIChtY3ZsaXN0LT50eXBl ICE9IE1WU1RBVF9NQ1ZfVFlQRV9CQVNJQykKKwkJZWxvZyhFUlJPUiwgImlu dmFsaWQgTUNWIHR5cGUgJWQgKGV4cGVjdGVkICVkZCkiLAorCQkJIG1jdmxp c3QtPnR5cGUsIE1WU1RBVF9NQ1ZfVFlQRV9CQVNJQyk7CisKKwluaXRlbXMg PSBtY3ZsaXN0LT5uaXRlbXM7CisJbmRpbXMgPSBtY3ZsaXN0LT5uZGltZW5z aW9uczsKKwlpdGVtc2l6ZSA9IElURU1fU0laRShuZGltcyk7CisKKwlBc3Nl cnQobml0ZW1zID4gMCk7CisJQXNzZXJ0KChuZGltcyA+PSAyKSAmJiAobmRp bXMgPD0gTVZTVEFUU19NQVhfRElNRU5TSU9OUykpOworCisJLyoKKwkgKiBX aGF0IHNpemUgZG8gd2UgZXhwZWN0IHdpdGggdGhvc2UgcGFyYW1ldGVycyAo aXQncyBpbmNvbXBsZXRlLAorCSAqIGFzIHdlIHlldCBoYXZlIHRvIGNvdW50 IHRoZSBhcnJheSBzaXplcyAoZnJvbSBEaW1lbnNpb25JbmZvCisJICogcmVj b3JkcykuCisJICovCisJZXhwZWN0ZWRfc2l6ZSA9IG9mZnNldG9mKE1DVkxp c3REYXRhLGl0ZW1zKSArCisJCQkJCW5kaW1zICogc2l6ZW9mKERpbWVuc2lv bkluZm8pICsKKwkJCQkJKG5pdGVtcyAqIGl0ZW1zaXplKTsKKworCS8qIGNo ZWNrIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCB0aGUgRGltZW5zaW9uSW5mbyBy ZWNvcmRzICovCisJaWYgKFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpIDwgZXhw ZWN0ZWRfc2l6ZSkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgTUNWIFNpemUg JWxkIChleHBlY3RlZCAlbGQpIiwKKwkJCSBWQVJTSVpFX0FOWV9FWEhEUihk YXRhKSwgZXhwZWN0ZWRfc2l6ZSk7CisKKwlpbmZvID0gKERpbWVuc2lvbklu Zm8qKSh0bXApOworCXRtcCArPSBuZGltcyAqIHNpemVvZihEaW1lbnNpb25J bmZvKTsKKworCS8qIGFjY291bnQgZm9yIHRoZSB2YWx1ZSBhcnJheXMgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwkJZXhwZWN0ZWRfc2l6 ZSArPSBpbmZvW2ldLm5ieXRlczsKKworCWlmIChWQVJTSVpFX0FOWV9FWEhE UihkYXRhKSAhPSBleHBlY3RlZF9zaXplKQorCQllbG9nKEVSUk9SLCAiaW52 YWxpZCBNQ1YgU2l6ZSAlbGQgKGV4cGVjdGVkICVsZCkiLAorCQkJIFZBUlNJ WkVfQU5ZX0VYSERSKGRhdGEpLCBleHBlY3RlZF9zaXplKTsKKworCS8qIGxv b2tzIE9LIC0gbm90IGNvcnJ1cHRlZCBvciBzb21ldGhpbmcgKi8KKworCS8q CisJICogV2UnbGwgYWxsb2NhdGUgb25lIGxhcmdlIGNodW5rIG9mIG1lbW9y eSBmb3IgdGhlIGludGVybWVkaWF0ZQorCSAqIGRhdGEsIG5lZWRlZCBvbmx5 IGZvciBkZXNlcmlhbGl6aW5nIHRoZSBNQ1YgbGlzdCwgYW5kIHdlJ2xsIHBh Y2sKKwkgKiB1c2UgYSBsb2NhbCBkZW5zZSBhbGxvY2F0aW9uIHRvIG1pbmlt aXplIHRoZSBwYWxsb2Mgb3ZlcmhlYWQuCisJICoKKwkgKiBMZXQncyBzZWUg aG93IG11Y2ggc3BhY2Ugd2UnbGwgYWN0dWFsbHkgbmVlZCwgYW5kIGFsc28g aW5jbHVkZQorCSAqIHNwYWNlIGZvciB0aGUgYXJyYXkgd2l0aCBwb2ludGVy cy4KKwkgKi8KKwlidWZmbGVuID0gc2l6ZW9mKERhdHVtKikgKiBuZGltczsJ CQkvKiBzcGFjZSBmb3IgcG9pbnRlcnMgKi8KKworCWZvciAoaSA9IDA7IGkg PCBuZGltczsgaSsrKQorCQkvKiBmb3IgZnVsbC1zaXplIGJ5dmFsIHR5cGVz LCB3ZSByZXVzZSB0aGUgc2VyaWFsaXplZCB2YWx1ZSAqLworCQlpZiAoISAo aW5mb1tpXS50eXBieXZhbCAmJiBpbmZvW2ldLnR5cGxlbiA9PSBzaXplb2Yo RGF0dW0pKSkKKwkJCWJ1ZmZsZW4gKz0gKHNpemVvZihEYXR1bSkgKiBpbmZv W2ldLm52YWx1ZXMpOworCisJYnVmZiA9IHBhbGxvYyhidWZmbGVuKTsKKwlw dHIgID0gYnVmZjsKKworCXZhbHVlcyA9IChEYXR1bSoqKWJ1ZmY7CisJcHRy ICs9IChzaXplb2YoRGF0dW0qKSAqIG5kaW1zKTsKKworCS8qCisJICogRklY TUUgVGhpcyB1c2VzIHBvaW50ZXJzIHRvIHRoZSBvcmlnaW5hbCBkYXRhIGFy cmF5ICh0aGUgdHlwZXMKKwkgKiAgICAgICBub3QgcGFzc2VkIGJ5IHZhbHVl KSwgc28gd2hlbiBzb21lb25lIGZyZWVzIHRoZSBtZW1vcnksCisJICogICAg ICAgZS5nLiBieSBkb2luZyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCSAqCisJ ICogICAgICAgICAgIGJ5dGVhICogZGF0YSA9IC4uLiBmZXRjaCB0aGUgZGF0 YSBmcm9tIGNhdGFsb2cgLi4uCisJICogICAgICAgICAgIE1DVkxpc3QgbWN2 bGlzdCA9IGRlc2VyaWFsaXplX21jdl9saXN0KGRhdGEpOworCSAqICAgICAg ICAgICBwZnJlZShkYXRhKTsKKwkgKgorCSAqICAgICAgIHRoZW4gJ21jdmxp c3QnIHJlZmVyZW5jZXMgdGhlIGZyZWVkIG1lbW9yeS4gVGhpcyBuZWVkcyB0 bworCSAqICAgICAgIGNvcHkgdGhlIHBpZWNlcy4KKwkgKi8KKwlmb3IgKGkg PSAwOyBpIDwgbmRpbXM7IGkrKykKKwl7CisJCWlmIChpbmZvW2ldLnR5cGJ5 dmFsKQorCQl7CisJCQkvKiBwYXNzZWQgYnkgdmFsdWUgLyBEYXR1bSAtIHNp bXBseSByZXVzZSB0aGUgYXJyYXkgKi8KKwkJCWlmIChpbmZvW2ldLnR5cGxl biA9PSBzaXplb2YoRGF0dW0pKQorCQkJeworCQkJCXZhbHVlc1tpXSA9IChE YXR1bSopdG1wOworCQkJCXRtcCArPSBpbmZvW2ldLm5ieXRlczsKKwkJCX0K KwkJCWVsc2UKKwkJCXsKKwkJCQl2YWx1ZXNbaV0gPSAoRGF0dW0qKXB0cjsK KwkJCQlwdHIgKz0gKHNpemVvZihEYXR1bSkgKiBpbmZvW2ldLm52YWx1ZXMp OworCisJCQkJZm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisr KQorCQkJCXsKKwkJCQkJLyoganVzdCBwb2ludCBpbnRvIHRoZSBhcnJheSAq LworCQkJCQltZW1jcHkoJnZhbHVlc1tpXVtqXSwgdG1wLCBpbmZvW2ldLnR5 cGxlbik7CisJCQkJCXRtcCArPSBpbmZvW2ldLnR5cGxlbjsKKwkJCQl9CisJ CQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBhbGwgdGhlIHZhcmxlbmEg ZGF0YSBuZWVkIGEgY2h1bmsgZnJvbSB0aGUgYnVmZmVyICovCisJCQl2YWx1 ZXNbaV0gPSAoRGF0dW0qKXB0cjsKKwkJCXB0ciArPSAoc2l6ZW9mKERhdHVt KSAqIGluZm9baV0ubnZhbHVlcyk7CisKKwkJCS8qIHBhc2VkIGJ5IHJlZmVy ZW5jZSwgYnV0IGZpeGVkIGxlbmd0aCAobmFtZSwgdGlkLCAuLi4pICovCisJ CQlpZiAoaW5mb1tpXS50eXBsZW4gPiAwKQorCQkJeworCQkJCWZvciAoaiA9 IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQl7CisJCQkJCS8q IGp1c3QgcG9pbnQgaW50byB0aGUgYXJyYXkgKi8KKwkJCQkJdmFsdWVzW2ld W2pdID0gUG9pbnRlckdldERhdHVtKHRtcCk7CisJCQkJCXRtcCArPSBpbmZv W2ldLnR5cGxlbjsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChpbmZvW2ld LnR5cGxlbiA9PSAtMSkKKwkJCXsKKwkJCQkvKiB2YXJsZW5hICovCisJCQkJ Zm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJCXsK KwkJCQkJLyoganVzdCBwb2ludCBpbnRvIHRoZSBhcnJheSAqLworCQkJCQl2 YWx1ZXNbaV1bal0gPSBQb2ludGVyR2V0RGF0dW0odG1wKTsKKwkJCQkJdG1w ICs9IFZBUlNJWkVfQU5ZKHRtcCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBp ZiAoaW5mb1tpXS50eXBsZW4gPT0gLTIpCisJCQl7CisJCQkJLyogY3N0cmlu ZyAqLworCQkJCWZvciAoaiA9IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGor KykKKwkJCQl7CisJCQkJCS8qIGp1c3QgcG9pbnQgaW50byB0aGUgYXJyYXkg Ki8KKwkJCQkJdmFsdWVzW2ldW2pdID0gUG9pbnRlckdldERhdHVtKHRtcCk7 CisJCQkJCXRtcCArPSAoc3RybGVuKHRtcCkgKyAxKTsgLyogZG9uJ3QgZm9y Z2V0IHRoZSBcMCAqLworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qIHdl IHNob3VsZCBleGhhdXN0IHRoZSBidWZmZXIgZXhhY3RseSAqLworCUFzc2Vy dCgocHRyIC0gYnVmZikgPT0gYnVmZmxlbik7CisKKwkvKiBhbGxvY2F0ZSBz cGFjZSBmb3IgdGhlIE1DViBpdGVtcyBpbiBhIHNpbmdsZSBwaWVjZSAqLwor CXJidWZmbGVuID0gKHNpemVvZihNQ1ZJdGVtKSArIHNpemVvZihNQ1ZJdGVt RGF0YSkgKworCQkJCXNpemVvZihEYXR1bSkqbmRpbXMgKyBzaXplb2YoYm9v bCkqbmRpbXMpICogbml0ZW1zOworCisJcmJ1ZmYgPSBwYWxsb2MocmJ1ZmZs ZW4pOworCXJwdHIgID0gcmJ1ZmY7CisKKwltY3ZsaXN0LT5pdGVtcyA9IChN Q1ZJdGVtKilyYnVmZjsKKwlycHRyICs9IChzaXplb2YoTUNWSXRlbSkgKiBu aXRlbXMpOworCisJZm9yIChpID0gMDsgaSA8IG5pdGVtczsgaSsrKQorCXsK KwkJTUNWSXRlbSBpdGVtID0gKE1DVkl0ZW0pcnB0cjsKKwkJcnB0ciArPSAo c2l6ZW9mKE1DVkl0ZW1EYXRhKSk7CisKKwkJaXRlbS0+dmFsdWVzID0gKERh dHVtKilycHRyOworCQlycHRyICs9IChzaXplb2YoRGF0dW0pKm5kaW1zKTsK KworCQlpdGVtLT5pc251bGwgPSAoYm9vbCopcnB0cjsKKwkJcnB0ciArPSAo c2l6ZW9mKGJvb2wpICpuZGltcyk7CisKKwkJLyoganVzdCBwb2ludCB0byB0 aGUgcmlnaHQgcGxhY2UgKi8KKwkJaW5kZXhlcyA9IElURU1fSU5ERVhFUyh0 bXApOworCisJCW1lbWNweShpdGVtLT5pc251bGwsIElURU1fTlVMTFModG1w LCBuZGltcyksIHNpemVvZihib29sKSAqIG5kaW1zKTsKKwkJbWVtY3B5KCZp dGVtLT5mcmVxdWVuY3ksIElURU1fRlJFUVVFTkNZKHRtcCwgbmRpbXMpLCBz aXplb2YoZG91YmxlKSk7CisKKyNpZmRlZiBBU1NFUlRfQ0hFQ0tJTkcKKwkJ Zm9yIChqID0gMDsgaiA8IG5kaW1zOyBqKyspCisJCQlBc3NlcnQoaW5kZXhl c1tqXSA8PSBVSU5UMTZfTUFYKTsKKyNlbmRpZgorCisJCS8qIHRyYW5zbGF0 ZSB0aGUgdmFsdWVzICovCisJCWZvciAoaiA9IDA7IGogPCBuZGltczsgaisr KQorCQkJaWYgKCEgaXRlbS0+aXNudWxsW2pdKQorCQkJCWl0ZW0tPnZhbHVl c1tqXSA9IHZhbHVlc1tqXVtpbmRleGVzW2pdXTsKKworCQltY3ZsaXN0LT5p dGVtc1tpXSA9IGl0ZW07CisKKwkJdG1wICs9IElURU1fU0laRShuZGltcyk7 CisKKwkJQXNzZXJ0KHRtcCA8PSAoY2hhciopZGF0YSArIFZBUlNJWkVfQU5Z KGRhdGEpKTsKKwl9CisKKwkvKiBjaGVjayB0aGF0IHdlIHByb2Nlc3NlZCBh bGwgdGhlIGRhdGEgKi8KKwlBc3NlcnQodG1wID09IChjaGFyKilkYXRhICsg VkFSU0laRV9BTlkoZGF0YSkpOworCisJLyogcmVsZWFzZSB0aGUgdGVtcG9y YXJ5IGJ1ZmZlciAqLworCXBmcmVlKGJ1ZmYpOworCisJcmV0dXJuIG1jdmxp c3Q7Cit9CisKKy8qCisgKiBXZSBuZWVkIHRvIHBhc3MgdGhlIFNvcnRTdXBw b3J0IHRvIHRoZSBjb21wYXJhdG9yLCBidXQgYnNlYXJjaCgpCisgKiBoYXMg bm8gJ2NvbnRleHQnIHBhcmFtZXRlciwgc28gd2UgdXNlIGEgZ2xvYmFsIHZh cmlhYmxlICh1Z2x5KS4KKyAqLworc3RhdGljIGludAorYnNlYXJjaF9jb21w YXJhdG9yKGNvbnN0IHZvaWQgKiBhLCBjb25zdCB2b2lkICogYikKK3sKKwlB c3NlcnQoc3N1cF9wcml2YXRlICE9IE5VTEwpOworCXJldHVybiBjb21wYXJl X3NjYWxhcnNfc2ltcGxlKGEsIGIsICh2b2lkKilzc3VwX3ByaXZhdGUpOwor fQorLyoKKyAqIFNSRiB3aXRoIGRldGFpbHMgYWJvdXQgYnVja2V0cyBvZiBh IGhpc3RvZ3JhbToKKyAqCisgKiAtIGl0ZW0gSUQgKDAuLi5uaXRlbXMpCisg KiAtIHZhbHVlcyAoc3RyaW5nIGFycmF5KQorICogLSBudWxscyBvbmx5IChi b29sZWFuIGFycmF5KQorICogLSBmcmVxdWVuY3kgKGRvdWJsZSBwcmVjaXNp b24pCisgKgorICogVGhlIGlucHV0IGlzIHRoZSBPSUQgb2YgdGhlIHN0YXRp c3RpY3MsIGFuZCB0aGVyZSBhcmUgbm8gcm93cworICogcmV0dXJuZWQgaWYg dGhlIHN0YXRpc3RpY3MgY29udGFpbnMgbm8gaGlzdG9ncmFtLgorICovCitQ R19GVU5DVElPTl9JTkZPX1YxKHBnX212X21jdl9pdGVtcyk7CisKK0RhdHVt CitwZ19tdl9tY3ZfaXRlbXMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5j Q2FsbENvbnRleHQJICAgKmZ1bmNjdHg7CisJaW50CQkJCQljYWxsX2NudHI7 CisJaW50CQkJCQltYXhfY2FsbHM7CisJVHVwbGVEZXNjCQkJdHVwZGVzYzsK KwlBdHRJbk1ldGFkYXRhCSAgICphdHRpbm1ldGE7CisKKwkvKiBzdHVmZiBk b25lIG9ubHkgb24gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICov CisJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJCU1lbW9yeUNvbnRl eHQJb2xkY29udGV4dDsKKwkJTUNWTGlzdAkJCW1jdmxpc3Q7CisKKwkJLyog Y3JlYXRlIGEgZnVuY3Rpb24gY29udGV4dCBmb3IgY3Jvc3MtY2FsbCBwZXJz aXN0ZW5jZSAqLworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7 CisKKwkJLyogc3dpdGNoIHRvIG1lbW9yeSBjb250ZXh0IGFwcHJvcHJpYXRl IGZvciBtdWx0aXBsZSBmdW5jdGlvbiBjYWxscyAqLworCQlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxf bWVtb3J5X2N0eCk7CisKKwkJbWN2bGlzdCA9IGxvYWRfbXZfbWN2bGlzdChQ R19HRVRBUkdfT0lEKDApKTsKKworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBt Y3ZsaXN0OworCisJCS8qIHRvdGFsIG51bWJlciBvZiB0dXBsZXMgdG8gYmUg cmV0dXJuZWQgKi8KKwkJZnVuY2N0eC0+bWF4X2NhbGxzID0gMDsKKwkJaWYg KGZ1bmNjdHgtPnVzZXJfZmN0eCAhPSBOVUxMKQorCQkJZnVuY2N0eC0+bWF4 X2NhbGxzID0gbWN2bGlzdC0+bml0ZW1zOworCisJCS8qIEJ1aWxkIGEgdHVw bGUgZGVzY3JpcHRvciBmb3Igb3VyIHJlc3VsdCB0eXBlICovCisJCWlmIChn ZXRfY2FsbF9yZXN1bHRfdHlwZShmY2luZm8sIE5VTEwsICZ0dXBkZXNjKSAh PSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJCSBlcnJtc2coImZ1bmN0aW9uIHJldHVybmluZyByZWNvcmQgY2FsbGVk IGluIGNvbnRleHQgIgorCQkJCQkJCSJ0aGF0IGNhbm5vdCBhY2NlcHQgdHlw ZSByZWNvcmQiKSkpOworCisJCS8qCisJCSAqIGdlbmVyYXRlIGF0dHJpYnV0 ZSBtZXRhZGF0YSBuZWVkZWQgbGF0ZXIgdG8gcHJvZHVjZSB0dXBsZXMKKwkJ ICogZnJvbSByYXcgQyBzdHJpbmdzCisJCSAqLworCQlhdHRpbm1ldGEgPSBU dXBsZURlc2NHZXRBdHRJbk1ldGFkYXRhKHR1cGRlc2MpOworCQlmdW5jY3R4 LT5hdHRpbm1ldGEgPSBhdHRpbm1ldGE7CisKKwkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCS8qIHN0dWZmIGRvbmUgb24g ZXZlcnkgY2FsbCBvZiB0aGUgZnVuY3Rpb24gKi8KKwlmdW5jY3R4ID0gU1JG X1BFUkNBTExfU0VUVVAoKTsKKworCWNhbGxfY250ciA9IGZ1bmNjdHgtPmNh bGxfY250cjsKKwltYXhfY2FsbHMgPSBmdW5jY3R4LT5tYXhfY2FsbHM7CisJ YXR0aW5tZXRhID0gZnVuY2N0eC0+YXR0aW5tZXRhOworCisJaWYgKGNhbGxf Y250ciA8IG1heF9jYWxscykgICAgLyogZG8gd2hlbiB0aGVyZSBpcyBtb3Jl IGxlZnQgdG8gc2VuZCAqLworCXsKKwkJY2hhcgkgICoqdmFsdWVzOworCQlI ZWFwVHVwbGUJdHVwbGU7CisJCURhdHVtCQlyZXN1bHQ7CisJCWludDJ2ZWN0 b3IgKnN0YWtleXM7CisJCU9pZAkJCXJlbGlkOworCisJCWNoYXIgKmJ1ZmYg PSBwYWxsb2MwKDEwMjQpOworCQljaGFyICpmb3JtYXQ7CisKKwkJaW50CQkJ aTsKKworCQlPaWQJCSAgICpvdXRmdW5jczsKKwkJRm1nckluZm8gICAqZm1n cmluZm87CisKKwkJTUNWTGlzdAkJbWN2bGlzdDsKKwkJTUNWSXRlbQkJaXRl bTsKKworCQltY3ZsaXN0ID0gKE1DVkxpc3QpZnVuY2N0eC0+dXNlcl9mY3R4 OworCisJCUFzc2VydChjYWxsX2NudHIgPCBtY3ZsaXN0LT5uaXRlbXMpOwor CisJCWl0ZW0gPSBtY3ZsaXN0LT5pdGVtc1tjYWxsX2NudHJdOworCisJCXN0 YWtleXMgPSBmaW5kX212X2F0dG51bXMoUEdfR0VUQVJHX09JRCgwKSwgJnJl bGlkKTsKKworCQkvKgorCQkgKiBQcmVwYXJlIGEgdmFsdWVzIGFycmF5IGZv ciBidWlsZGluZyB0aGUgcmV0dXJuZWQgdHVwbGUuCisJCSAqIFRoaXMgc2hv dWxkIGJlIGFuIGFycmF5IG9mIEMgc3RyaW5ncyB3aGljaCB3aWxsCisJCSAq IGJlIHByb2Nlc3NlZCBsYXRlciBieSB0aGUgdHlwZSBpbnB1dCBmdW5jdGlv bnMuCisJCSAqLworCQl2YWx1ZXMgPSAoY2hhciAqKikgcGFsbG9jKDQgKiBz aXplb2YoY2hhciAqKSk7CisKKwkJdmFsdWVzWzBdID0gKGNoYXIgKikgcGFs bG9jKDY0ICogc2l6ZW9mKGNoYXIpKTsKKworCQkvKiBhcnJheXMgKi8KKwkJ dmFsdWVzWzFdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICogc2l6ZW9mKGNo YXIpKTsKKwkJdmFsdWVzWzJdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICog c2l6ZW9mKGNoYXIpKTsKKworCQkvKiBmcmVxdWVuY3kgKi8KKwkJdmFsdWVz WzNdID0gKGNoYXIgKikgcGFsbG9jKDY0ICogc2l6ZW9mKGNoYXIpKTsKKwor CQlvdXRmdW5jcyA9IChPaWQqKXBhbGxvYzAoc2l6ZW9mKE9pZCkgKiBtY3Zs aXN0LT5uZGltZW5zaW9ucyk7CisJCWZtZ3JpbmZvID0gKEZtZ3JJbmZvKilw YWxsb2MwKHNpemVvZihGbWdySW5mbykgKiBtY3ZsaXN0LT5uZGltZW5zaW9u cyk7CisKKwkJZm9yIChpID0gMDsgaSA8IG1jdmxpc3QtPm5kaW1lbnNpb25z OyBpKyspCisJCXsKKwkJCWJvb2wgaXN2YXJsZW5hOworCisJCQlnZXRUeXBl T3V0cHV0SW5mbyhnZXRfYXR0dHlwZShyZWxpZCwgc3Rha2V5cy0+dmFsdWVz W2ldKSwKKwkJCQkJCQkgICZvdXRmdW5jc1tpXSwgJmlzdmFybGVuYSk7CisK KwkJCWZtZ3JfaW5mbyhvdXRmdW5jc1tpXSwgJmZtZ3JpbmZvW2ldKTsKKwkJ fQorCisJCXNucHJpbnRmKHZhbHVlc1swXSwgNjQsICIlZCIsIGNhbGxfY250 cik7CS8qIGl0ZW0gSUQgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgbWN2bGlz dC0+bmRpbWVuc2lvbnM7IGkrKykKKwkJeworCQkJRGF0dW0gdmFsLCB2YWxv dXQ7CisKKwkJCWZvcm1hdCA9ICIlcywgJXMiOworCQkJaWYgKGkgPT0gMCkK KwkJCQlmb3JtYXQgPSAieyVzJXMiOworCQkJZWxzZSBpZiAoaSA9PSBtY3Zs aXN0LT5uZGltZW5zaW9ucy0xKQorCQkJCWZvcm1hdCA9ICIlcywgJXN9IjsK KworCQkJdmFsID0gaXRlbS0+dmFsdWVzW2ldOworCQkJdmFsb3V0ID0gRnVu Y3Rpb25DYWxsMSgmZm1ncmluZm9baV0sIHZhbCk7CisKKwkJCXNucHJpbnRm KGJ1ZmYsIDEwMjQsIGZvcm1hdCwgdmFsdWVzWzFdLCBEYXR1bUdldFBvaW50 ZXIodmFsb3V0KSk7CisJCQlzdHJuY3B5KHZhbHVlc1sxXSwgYnVmZiwgMTAy Myk7CisJCQlidWZmWzBdID0gJ1wwJzsKKworCQkJc25wcmludGYoYnVmZiwg MTAyNCwgZm9ybWF0LCB2YWx1ZXNbMl0sIGl0ZW0tPmlzbnVsbFtpXSA/ICJ0 IiA6ICJmIik7CisJCQlzdHJuY3B5KHZhbHVlc1syXSwgYnVmZiwgMTAyMyk7 CisJCQlidWZmWzBdID0gJ1wwJzsKKwkJfQorCisJCXNucHJpbnRmKHZhbHVl c1szXSwgNjQsICIlZiIsIGl0ZW0tPmZyZXF1ZW5jeSk7CS8qIGZyZXF1ZW5j eSAqLworCisJCS8qIGJ1aWxkIGEgdHVwbGUgKi8KKwkJdHVwbGUgPSBCdWls ZFR1cGxlRnJvbUNTdHJpbmdzKGF0dGlubWV0YSwgdmFsdWVzKTsKKworCQkv KiBtYWtlIHRoZSB0dXBsZSBpbnRvIGEgZGF0dW0gKi8KKwkJcmVzdWx0ID0g SGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpOworCisJCS8qIGNsZWFuIHVwICh0 aGlzIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5KSAqLworCQlwZnJlZSh2YWx1 ZXNbMF0pOworCQlwZnJlZSh2YWx1ZXNbMV0pOworCQlwZnJlZSh2YWx1ZXNb Ml0pOworCQlwZnJlZSh2YWx1ZXNbM10pOworCisJCXBmcmVlKHZhbHVlcyk7 CisKKwkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIHJlc3VsdCk7CisJfQor CWVsc2UgICAgLyogZG8gd2hlbiB0aGVyZSBpcyBubyBtb3JlIGxlZnQgKi8K Kwl7CisJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwl9Cit9CmRpZmYg LS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNx bC9kZXNjcmliZS5jCmluZGV4IDU5MGNkNTEuLjdkMTNhMzggMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNx bC9kZXNjcmliZS5jCkBAIC0yMTA5LDggKzIxMDksOSBAQCBkZXNjcmliZU9u ZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQl7CiAJ CQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAgIlNFTEVDVCBv aWQsIHN0YW5hbWVzcGFjZTo6cmVnbmFtZXNwYWNlIEFTIG5zcCwgc3RhbmFt ZSwgc3Rha2V5cyxcbiIKLQkJCQkJCSAgICIgIGRlcHNfZW5hYmxlZCxcbiIK LQkJCQkJCSAgICIgIGRlcHNfYnVpbHQsXG4iCisJCQkJCQkgICAiICBkZXBz X2VuYWJsZWQsIG1jdl9lbmFibGVkLFxuIgorCQkJCQkJICAgIiAgZGVwc19i dWlsdCwgbWN2X2J1aWx0LFxuIgorCQkJCQkJICAgIiAgbWN2X21heF9pdGVt cyxcbiIKIAkJCQkJCSAgICIgIChTRUxFQ1Qgc3RyaW5nX2FnZyhhdHRuYW1l Ojp0ZXh0LCcsICcpXG4iCiAJCQkJCQkgICAiICAgIEZST00gKChTRUxFQ1Qg dW5uZXN0KHN0YWtleXMpIEFTIGF0dG51bSkgc1xuIgogCQkJCQkJICAgIiAg ICAgICAgIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gKHN0YXJlbGlkID0gYS5h dHRyZWxpZCBhbmQgYS5hdHRudW0gPSBzLmF0dG51bSkpKSBBUyBhdHRudW1z XG4iCkBAIC0yMTI4LDYgKzIxMjksOCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0 YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCXByaW50VGFibGVB ZGRGb290ZXIoJmNvbnQsIF8oIlN0YXRpc3RpY3M6IikpOwogCQkJCWZvciAo aSA9IDA7IGkgPCB0dXBsZXM7IGkrKykKIAkJCQl7CisJCQkJCWJvb2wgZmly c3QgPSB0cnVlOworCiAJCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsICIg ICAgIik7CiAKIAkJCQkJLyogc3RhdGlzdGljcyBuYW1lIChxdWFsaWZpZWQg d2l0aCBuYW1lc3BhY2UpICovCkBAIC0yMTM3LDEwICsyMTQwLDIyIEBAIGRl c2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUs CiAKIAkJCQkJLyogIG9wdGlvbnMgKi8KIAkJCQkJaWYgKCFzdHJjbXAoUFFn ZXR2YWx1ZShyZXN1bHQsIGksIDQpLCAidCIpKQotCQkJCQkJYXBwZW5kUFFF eHBCdWZmZXIoJmJ1ZiwgIihkZXBlbmRlbmNpZXMpIik7CisJCQkJCXsKKwkJ CQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIoZGVwZW5kZW5jaWVzIik7 CisJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQl9CisKKwkJCQkJaWYgKCFz dHJjbXAoUFFnZXR2YWx1ZShyZXN1bHQsIGksIDUpLCAidCIpKQorCQkJCQl7 CisJCQkJCQlpZiAoISBmaXJzdCkKKwkJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZl cigmYnVmLCAiLCBtY3YiKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRQ UUV4cEJ1ZmZlcigmYnVmLCAiKG1jdiIpOworCQkJCQkJZmlyc3QgPSBmYWxz ZTsKKwkJCQkJfQogCi0JCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIg T04gKCVzKSIsCi0JCQkJCQkJUFFnZXR2YWx1ZShyZXN1bHQsIGksIDYpKTsK KwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIikgT04gKCVzKSIsCisJ CQkJCQkJUFFnZXR2YWx1ZShyZXN1bHQsIGksIDkpKTsKIAogCQkJCQlwcmlu dFRhYmxlQWRkRm9vdGVyKCZjb250LCBidWYuZGF0YSk7CiAJCQkJfQpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMu aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgKaW5k ZXggYTU2OGEwNy4uZmQ3MTA3ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX212X3N0YXRpc3RpYy5oCkBAIC0zNywxNSArMzcsMjEgQEAg Q0FUQUxPRyhwZ19tdl9zdGF0aXN0aWMsMzM4MSkKIAogCS8qIHN0YXRpc3Rp Y3MgcmVxdWVzdGVkIHRvIGJ1aWxkICovCiAJYm9vbAkJZGVwc19lbmFibGVk OwkJLyogYW5hbHl6ZSBkZXBlbmRlbmNpZXM/ICovCisJYm9vbAkJbWN2X2Vu YWJsZWQ7CQkvKiBidWlsZCBNQ1YgbGlzdD8gKi8KKworCS8qIE1DViBzaXpl ICovCisJaW50MzIJCW1jdl9tYXhfaXRlbXM7CQkvKiBtYXggTUNWIGl0ZW1z ICovCiAKIAkvKiBzdGF0aXN0aWNzIHRoYXQgYXJlIGF2YWlsYWJsZSAoaWYg cmVxdWVzdGVkKSAqLwogCWJvb2wJCWRlcHNfYnVpbHQ7CQkJLyogZGVwZW5k ZW5jaWVzIHdlcmUgYnVpbHQgKi8KKwlib29sCQltY3ZfYnVpbHQ7CQkJLyog TUNWIGxpc3Qgd2FzIGJ1aWx0ICovCiAKIAkvKiB2YXJpYWJsZS1sZW5ndGgg ZmllbGRzIHN0YXJ0IGhlcmUsIGJ1dCB3ZSBhbGxvdyBkaXJlY3QgYWNjZXNz IHRvIHN0YWtleXMgKi8KIAlpbnQydmVjdG9yCXN0YWtleXM7CQkJLyogYXJy YXkgb2YgY29sdW1uIGtleXMgKi8KIAogI2lmZGVmIENBVEFMT0dfVkFSTEVO CiAJYnl0ZWEJCXN0YWRlcHM7CQkJLyogZGVwZW5kZW5jaWVzIChzZXJpYWxp emVkKSAqLworCWJ5dGVhCQlzdGFtY3Y7CQkJCS8qIE1DViBsaXN0IChzZXJp YWxpemVkKSAqLwogI2VuZGlmCiAKIH0gRm9ybURhdGFfcGdfbXZfc3RhdGlz dGljOwpAQCAtNjEsMTMgKzY3LDE3IEBAIHR5cGVkZWYgRm9ybURhdGFfcGdf bXZfc3RhdGlzdGljICpGb3JtX3BnX212X3N0YXRpc3RpYzsKICAqCQljb21w aWxlciBjb25zdGFudHMgZm9yIHBnX212X3N0YXRpc3RpYwogICogLS0tLS0t LS0tLS0tLS0tLQogICovCi0jZGVmaW5lIE5hdHRzX3BnX212X3N0YXRpc3Rp YwkJCQkJNworI2RlZmluZSBOYXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTEx CiAjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YXJlbGlkCQkJMQog I2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1lCQkJMgogI2Rl ZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1lc3BhY2UJCTMKICNk ZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19lbmFibGVkCQk0Ci0j ZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQJCQk1Ci0j ZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMJCQk2Ci0jZGVm aW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMJCQk3CisjZGVmaW5l IEFudW1fcGdfbXZfc3RhdGlzdGljX21jdl9lbmFibGVkCQk1CisjZGVmaW5l IEFudW1fcGdfbXZfc3RhdGlzdGljX21jdl9tYXhfaXRlbXMJCTYKKyNkZWZp bmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19idWlsdAkJCTcKKyNkZWZp bmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2J1aWx0CQkJOAorI2RlZmlu ZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzCQkJOQorI2RlZmluZSBB bnVtX3BnX212X3N0YXRpc3RpY19zdGFkZXBzCQkJMTAKKyNkZWZpbmUgQW51 bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2CQkJCTExCiAKICNlbmRpZiAgIC8q IFBHX01WX1NUQVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5oCmluZGV4IDc2ZTA1NGQuLjE4NzVlMjYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5oCkBAIC0yNzQ1LDYgKzI3NDUsMTAgQEAgREFU QShpbnNlcnQgT0lEID0gMzk5OCAoICBwZ19tdl9zdGF0c19kZXBlbmRlbmNp ZXNfaW5mbyAgICAgUEdOU1AgUEdVSUQgMTIgMSAwIDAKIERFU0NSKCJtdWx0 aXZhcmlhdGUgc3RhdHM6IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGluZm8i KTsKIERBVEEoaW5zZXJ0IE9JRCA9IDM5OTkgKCAgcGdfbXZfc3RhdHNfZGVw ZW5kZW5jaWVzX3Nob3cgICAgIFBHTlNQIFBHVUlEIDEyIDEgMCAwIDAgZiBm IGYgZiB0IGYgaSBzIDEgMCAyNSAiMTciIF9udWxsXyBfbnVsbF8gX251bGxf IF9udWxsXyBfbnVsbF8gcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cg X251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigibXVsdGl2YXJpYXRl IHN0YXRzOiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBzaG93Iik7CitEQVRB KGluc2VydCBPSUQgPSAzMzc2ICggIHBnX212X3N0YXRzX21jdmxpc3RfaW5m bwlQR05TUCBQR1VJRCAxMiAxIDAgMCAwIGYgZiBmIGYgdCBmIGkgcyAxIDAg MjUgIjE3IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHBn X212X3N0YXRzX21jdmxpc3RfaW5mbyBfbnVsbF8gX251bGxfIF9udWxsXyAp KTsKK0RFU0NSKCJtdWx0aS12YXJpYXRlIHN0YXRpc3RpY3M6IE1DViBsaXN0 IGluZm8iKTsKK0RBVEEoaW5zZXJ0IE9JRCA9IDMzNzMgKCAgcGdfbXZfbWN2 X2l0ZW1zIFBHTlNQIFBHVUlEIDEyIDEgMTAwMCAwIDAgZiBmIGYgZiB0IHQg aSBzIDEgMCAyMjQ5ICIyNiIgInsyNiwyMywxMDA5LDEwMDAsNzAxfSIgIntp LG8sbyxvLG99IiAie29pZCxpbmRleCx2YWx1ZXMsbnVsbHMsZnJlcXVlbmN5 fSIgX251bGxfIF9udWxsXyBwZ19tdl9tY3ZfaXRlbXMgX251bGxfIF9udWxs XyBfbnVsbF8gKSk7CitERVNDUigiZGV0YWlscyBhYm91dCBNQ1YgbGlzdCBp dGVtcyIpOwogCiBEQVRBKGluc2VydCBPSUQgPSAxOTI4ICggIHBnX3N0YXRf Z2V0X251bXNjYW5zCQkJUEdOU1AgUEdVSUQgMTIgMSAwIDAgMCBmIGYgZiBm IHQgZiBzIHIgMSAwIDIwICIyNiIgX251bGxfIF9udWxsXyBfbnVsbF8gX251 bGxfIF9udWxsXyBwZ19zdGF0X2dldF9udW1zY2FucyBfbnVsbF8gX251bGxf IF9udWxsXyApKTsKIERFU0NSKCJzdGF0aXN0aWNzOiBudW1iZXIgb2Ygc2Nh bnMgZG9uZSBmb3IgdGFibGUvaW5kZXgiKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3JlbGF0aW9uLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9y ZWxhdGlvbi5oCmluZGV4IDdhZTBmOWUuLmQzYzk4OTggMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcmVsYXRpb24uaApAQCAtNTkyLDkgKzU5MiwxMSBAQCB0eXBl ZGVmIHN0cnVjdCBNVlN0YXRpc3RpY0luZm8KIAogCS8qIGVuYWJsZWQgc3Rh dGlzdGljcyAqLwogCWJvb2wJCWRlcHNfZW5hYmxlZDsJLyogZnVuY3Rpb25h bCBkZXBlbmRlbmNpZXMgZW5hYmxlZCAqLworCWJvb2wJCW1jdl9lbmFibGVk OwkvKiBNQ1YgbGlzdCBlbmFibGVkICovCiAKIAkvKiBidWlsdC9hdmFpbGFi bGUgc3RhdGlzdGljcyAqLwogCWJvb2wJCWRlcHNfYnVpbHQ7CQkvKiBmdW5j dGlvbmFsIGRlcGVuZGVuY2llcyBidWlsdCAqLworCWJvb2wJCW1jdl9idWls dDsJCS8qIE1DViBsaXN0IGJ1aWx0ICovCiAKIAkvKiBjb2x1bW5zIGluIHRo ZSBzdGF0aXN0aWNzIChhdHRudW1zKSAqLwogCWludDJ2ZWN0b3IgKnN0YWtl eXM7CQkvKiBhdHRudW1zIG9mIHRoZSBjb2x1bW5zIGNvdmVyZWQgKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL212c3RhdHMuaAppbmRleCBjYzQzYTc5Li40NTM1ZGI3 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKKysr IGIvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oCkBAIC01MSwzMCArNTEs ODkgQEAgdHlwZWRlZiBNVkRlcGVuZGVuY2llc0RhdGEqIE1WRGVwZW5kZW5j aWVzOwogI2RlZmluZSBNVlNUQVRfREVQU19UWVBFX0JBU0lDCTEJCQkvKiBi YXNpYyBkZXBlbmRlbmNpZXMgdHlwZSAqLwogCiAvKgorICogTXVsdGl2YXJp YXRlIE1DViAobW9zdC1jb21tb24gdmFsdWUpIGxpc3RzCisgKgorICogQSBz dHJhaWdodC1mb3J3YXJkIGV4dGVuc2lvbiBvZiBNQ1YgaXRlbXMgLSBpLmUu IGEgbGlzdCAoYXJyYXkpIG9mCisgKiBjb21iaW5hdGlvbnMgb2YgYXR0cmli dXRlIHZhbHVlcywgdG9nZXRoZXIgd2l0aCBhIGZyZXF1ZW5jeSBhbmQKKyAq IG51bGwgZmxhZ3MuCisgKi8KK3R5cGVkZWYgc3RydWN0IE1DVkl0ZW1EYXRh IHsKKwlkb3VibGUJCWZyZXF1ZW5jeTsJLyogZnJlcXVlbmN5IG9mIHRoaXMg Y29tYmluYXRpb24gKi8KKwlib29sCSAgICppc251bGw7CQkvKiBsYWdzIG9m IE5VTEwgdmFsdWVzICh1cCB0byAzMiBjb2x1bW5zKSAqLworCURhdHVtCSAg ICp2YWx1ZXM7CQkvKiB2YXJpYWJsZS1sZW5ndGggKG5kaW1lbnNpb25zKSAq LworfSBNQ1ZJdGVtRGF0YTsKKwordHlwZWRlZiBNQ1ZJdGVtRGF0YSAqTUNW SXRlbTsKKworLyogbXVsdGl2YXJpYXRlIE1DViBsaXN0IC0gZXNzZW50YWxs eSBhbiBhcnJheSBvZiBNQ1YgaXRlbXMgKi8KK3R5cGVkZWYgc3RydWN0IE1D Vkxpc3REYXRhIHsKKwl1aW50MzIJCW1hZ2ljOwkJCS8qIG1hZ2ljIGNvbnN0 YW50IG1hcmtlciAqLworCXVpbnQzMgkJdHlwZTsJCQkvKiB0eXBlIG9mIE1D ViBsaXN0IChCQVNJQykgKi8KKwl1aW50MzIJCW5kaW1lbnNpb25zOwkvKiBu dW1iZXIgb2YgZGltZW5zaW9ucyAqLworCXVpbnQzMgkJbml0ZW1zOwkJCS8q IG51bWJlciBvZiBNQ1YgaXRlbXMgaW4gdGhlIGFycmF5ICovCisJTUNWSXRl bQkgICAqaXRlbXM7CQkJLyogYXJyYXkgb2YgTUNWIGl0ZW1zICovCit9IE1D Vkxpc3REYXRhOworCit0eXBlZGVmIE1DVkxpc3REYXRhICpNQ1ZMaXN0Owor CisvKiB1c2VkIHRvIGZsYWcgc3RhdHMgc2VyaWFsaXplZCB0byBieXRlYSAq LworI2RlZmluZSBNVlNUQVRfTUNWX01BR0lDCQkweEUxQTY1MUMyCS8qIG1h cmtzIHNlcmlhbGl6ZWQgYnl0ZWEgKi8KKyNkZWZpbmUgTVZTVEFUX01DVl9U WVBFX0JBU0lDCTEJCQkvKiBiYXNpYyBNQ1YgbGlzdCB0eXBlICovCisKKy8q CisgKiBMaW1pdHMgdXNlZCBmb3IgbWN2X21heF9pdGVtcyBvcHRpb24sIGku ZS4gd2UncmUgYWx3YXlzIGd1YXJhbnRlZWQKKyAqIHRvIGhhdmUgc3BhY2Ug Zm9yIGF0IGxlYXN0IE1WU1RBVF9NQ1ZMSVNUX01JTl9JVEVNUywgYW5kIHdl IGNhbm5vdAorICogaGF2ZSBtb3JlIHRoYW4gTVZTVEFUX01DVkxJU1RfTUFY X0lURU1TIGl0ZW1zLgorICoKKyAqIFRoaXMgaXMganVzdCBhIGJvdW5kYXJ5 IGZvciB0aGUgJ21heCcgdGhyZXNob2xkIC0gdGhlIGFjdHVhbCBsaXN0Cisg KiBtYXkgb2YgY291cnNlIGNvbnRhaW4gbGVzcyBpdGVtcyB0aGFuIE1WU1RB VF9NQ1ZMSVNUX01JTl9JVEVNUy4KKyAqLworI2RlZmluZSBNVlNUQVRfTUNW TElTVF9NSU5fSVRFTVMJMTI4CQkvKiBtaW4gaXRlbXMgaW4gTUNWIGxpc3Qg Ki8KKyNkZWZpbmUgTVZTVEFUX01DVkxJU1RfTUFYX0lURU1TCTgxOTIJLyog bWF4IGl0ZW1zIGluIE1DViBsaXN0ICovCisKKy8qCiAgKiBUT0RPIE1heWJl IGZldGNoaW5nIHRoZSBoaXN0b2dyYW0vTUNWIGxpc3Qgc2VwYXJhdGVseSBp cyBpbmVmZmljaWVudD8KICAqICAgICAgQ29uc2lkZXIgYWRkaW5nIGEgc2lu Z2xlIGBmZXRjaF9zdGF0c2AgbWV0aG9kLCBmZXRjaGluZyBhbGwKICAqICAg ICAgc3RhdHMgc3BlY2lmaWVkIHVzaW5nIGZsYWdzIChvciBzb21ldGhpbmcg bGlrZSB0aGF0KS4KICAqLwogCiBNVkRlcGVuZGVuY2llcyBsb2FkX212X2Rl cGVuZGVuY2llcyhPaWQgbXZvaWQpOworTUNWTGlzdCAgICAgICAgbG9hZF9t dl9tY3ZsaXN0KE9pZCBtdm9pZCk7CiAKIGJ5dGVhICogc2VyaWFsaXplX212 X2RlcGVuZGVuY2llcyhNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpOwor Ynl0ZWEgKiBzZXJpYWxpemVfbXZfbWN2bGlzdChNQ1ZMaXN0IG1jdmxpc3Qs IGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkJCSBWYWNBdHRyU3RhdHMgKipz dGF0cyk7CiAKIC8qIGRlc2VyaWFsaXphdGlvbiBvZiBzdGF0cyAoc2VyaWFs aXphdGlvbiBpcyBwcml2YXRlIHRvIGFuYWx5emUpICovCiBNVkRlcGVuZGVu Y2llcwlkZXNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoYnl0ZWEgKiBkYXRh KTsKK01DVkxpc3QJCQlkZXNlcmlhbGl6ZV9tdl9tY3ZsaXN0KGJ5dGVhICog ZGF0YSk7CisKKy8qCisgKiBSZXR1cm5zIGluZGV4IG9mIHRoZSBhdHRyaWJ1 dGUgbnVtYmVyIHdpdGhpbiB0aGUgdmVjdG9yIChpLmUuIGEKKyAqIGRpbWVu c2lvbiB3aXRoaW4gdGhlIHN0YXRzKS4KKyAqLworaW50IG12X2dldF9pbmRl eChBdHRyTnVtYmVyIHZhcmF0dG5vLCBpbnQydmVjdG9yICogc3Rha2V5cyk7 CisKK2ludDJ2ZWN0b3IqIGZpbmRfbXZfYXR0bnVtcyhPaWQgbXZvaWQsIE9p ZCAqcmVsaWQpOwogCiAvKiBGSVhNRSB0aGlzIHByb2JhYmx5IGJlbG9uZ3Mg c29tZXdoZXJlIGVsc2UgKG5vdCB0byBvcGVyYXRpb25zIHN0YXRzKSAqLwog ZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFBH X0ZVTkNUSU9OX0FSR1MpOwogZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2Rl cGVuZGVuY2llc19zaG93KFBHX0ZVTkNUSU9OX0FSR1MpOworZXh0ZXJuIERh dHVtIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhQR19GVU5DVElPTl9BUkdT KTsKK2V4dGVybiBEYXR1bSBwZ19tdl9tY3ZsaXN0X2l0ZW1zKFBHX0ZVTkNU SU9OX0FSR1MpOwogCiBNVkRlcGVuZGVuY2llcwotYnVpbGRfbXZfZGVwZW5k ZW5jaWVzKGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCi0JCQkJCQkJ CSAgaW50MnZlY3RvciAqYXR0cnMsCi0JCQkJCQkJCSAgVmFjQXR0clN0YXRz ICoqc3RhdHMpOworYnVpbGRfbXZfZGVwZW5kZW5jaWVzKGludCBudW1yb3dz LCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkg IFZhY0F0dHJTdGF0cyAqKnN0YXRzKTsKKworTUNWTGlzdAorYnVpbGRfbXZf bWN2bGlzdChpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVj dG9yICphdHRycywKKwkJCQkgVmFjQXR0clN0YXRzICoqc3RhdHMsIGludCAq bnVtcm93c19maWx0ZXJlZCk7CiAKIHZvaWQgYnVpbGRfbXZfc3RhdHMoUmVs YXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAot CQkJCQkJICAgaW50IG5hdHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3Rh dHMpOworCQkJCQlpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJz dGF0cyk7CiAKLXZvaWQgdXBkYXRlX212X3N0YXRzKE9pZCByZWxpZCwgTVZE ZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBpbnQydmVjdG9yICphdHRycyk7 Cit2b2lkIHVwZGF0ZV9tdl9zdGF0cyhPaWQgcmVsaWQsIE1WRGVwZW5kZW5j aWVzIGRlcGVuZGVuY2llcywgTUNWTGlzdCBtY3ZsaXN0LAorCQkJCQkgaW50 MnZlY3RvciAqYXR0cnMsIFZhY0F0dHJTdGF0cyAqKnN0YXRzKTsKIAogI2Vu ZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212 X21jdi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X21jdi5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3NDhl MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvbXZfbWN2Lm91dApAQCAtMCwwICsxLDIwNyBAQAorLS0gZGF0YSB0eXBl IHBhc3NlZCBieSB2YWx1ZQorQ1JFQVRFIFRBQkxFIG1jdl9saXN0ICgKKyAg ICBhIElOVCwKKyAgICBiIElOVCwKKyAgICBjIElOVAorKTsKKy0tIHVua25v d24gY29sdW1uCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAo dW5rbm93bl9jb2x1bW4pIFdJVEggKG1jdik7CitFUlJPUjogIGNvbHVtbiAi dW5rbm93bl9jb2x1bW4iIHJlZmVyZW5jZWQgaW4gc3RhdGlzdGljcyBkb2Vz IG5vdCBleGlzdAorLS0gc2luZ2xlIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJ Q1MgczEgT04gbWN2X2xpc3QgKGEpIFdJVEggKG1jdik7CitFUlJPUjogIG11 bHRpdmFyaWF0ZSBzdGF0cyByZXF1aXJlIDIgb3IgbW9yZSBjb2x1bW5zCist LSBzaW5nbGUgY29sdW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElD UyBzMSBPTiBtY3ZfbGlzdCAoYSwgYSkgV0lUSCAobWN2KTsKK0VSUk9SOiAg ZHVwbGljYXRlIGNvbHVtbiBuYW1lIGluIHN0YXRpc3RpY3MgZGVmaW5pdGlv bgorLS0gdHdvIGNvbHVtbnMsIG9uZSBkdXBsaWNhdGVkCitDUkVBVEUgU1RB VElTVElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYSwgYikgV0lUSCAobWN2KTsK K0VSUk9SOiAgZHVwbGljYXRlIGNvbHVtbiBuYW1lIGluIHN0YXRpc3RpY3Mg ZGVmaW5pdGlvbgorLS0gdW5rbm93biBvcHRpb24KK0NSRUFURSBTVEFUSVNU SUNTIHMxIE9OIG1jdl9saXN0IChhLCBiLCBjKSBXSVRIICh1bmtub3duX29w dGlvbik7CitFUlJPUjogIHVucmVjb2duaXplZCBTVEFUSVNUSUNTIG9wdGlv biAidW5rbm93bl9vcHRpb24iCistLSBtaXNzaW5nIE1DViBzdGF0aXN0aWNz CitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYiwgYykg V0lUSCAoZGVwZW5kZW5jaWVzLCBtYXhfbWN2X2l0ZW1zPTIwMCk7CitFUlJP UjogIG9wdGlvbiAnbWN2JyBpcyByZXF1aXJlZCBieSBvdGhlciBvcHRpb25z KHMpCistLSBpbnZhbGlkIG1jdl9tYXhfaXRlbXMgdmFsdWUgLyB0b28gbG93 CitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYiwgYykg V0lUSCAobWN2LCBtYXhfbWN2X2l0ZW1zPTEwKTsKK0VSUk9SOiAgbWF4IG51 bWJlciBvZiBNQ1YgaXRlbXMgbXVzdCBiZSBhdCBsZWFzdCAxMjgKKy0tIGlu dmFsaWQgbWN2X21heF9pdGVtcyB2YWx1ZSAvIHRvbyBoaWdoCitDUkVBVEUg U1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAobWN2 LCBtYXhfbWN2X2l0ZW1zPTEwMDAwKTsKK0VSUk9SOiAgbWF4IG51bWJlciBv ZiBNQ1YgaXRlbXMgaXMgODE5MgorLS0gY29ycmVjdCBjb21tYW5kCitDUkVB VEUgU1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAo bWN2KTsKKy0tIHJhbmRvbSBkYXRhCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAor ICAgICBTRUxFQ1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwg MjMpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFM WVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQs IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdf bXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVn Y2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBwZ19tdl9zdGF0 c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgfCBmICAg ICAgICAgfCAKKygxIHJvdykKKworVFJVTkNBVEUgbWN2X2xpc3Q7CistLSBh ID0+IGIsIGEgPT4gYywgYiA9PiBjCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAor ICAgICBTRUxFQ1QgaS8xMCwgaS8xMDAsIGkvMjAwIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG1jdl9saXN0OworU0VM RUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxp c3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJF IHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7CisgbWN2X2VuYWJs ZWQgfCBtY3ZfYnVpbHQgfCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8gCist LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgdCAgICAgICAgICAgfCB0ICAgICAgICAgfCBuaXRlbXM9MTAw MAorKDEgcm93KQorCitUUlVOQ0FURSBtY3ZfbGlzdDsKKy0tIGEgPT4gYiwg YSA9PiBjCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBTRUxFQ1QgaS8x MCwgaS8xNTAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAp IHMoaSk7CitBTkFMWVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVk LCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3Yp CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21j dl9saXN0Jzo6cmVnY2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQg fCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAg ICAgICAgfCB0ICAgICAgICAgfCBuaXRlbXM9MTAwMAorKDEgcm93KQorCitU UlVOQ0FURSBtY3ZfbGlzdDsKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBi aXRtYXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4pCitJTlNF UlQgSU5UTyBtY3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAw MCwgaS80MDAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMo aSk7CitDUkVBVEUgSU5ERVggbWN2X2lkeCBPTiBtY3ZfbGlzdCAoYSwgYik7 CitBTkFMWVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3Zf YnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZS T00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0 Jzo6cmVnY2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBwZ19t dl9zdGF0c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAg fCB0ICAgICAgICAgfCBuaXRlbXM9MTAwCisoMSByb3cpCisKK0VYUExBSU4g KENPU1RTIG9mZikKKyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEg PSAxMCBBTkQgYiA9IDU7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG1jdl9s aXN0CisgICBSZWNoZWNrIENvbmQ6ICgoYSA9IDEwKSBBTkQgKGIgPSA1KSkK KyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBtY3ZfaWR4CisgICAgICAg ICBJbmRleCBDb25kOiAoKGEgPSAxMCkgQU5EIChiID0gNSkpCisoNCByb3dz KQorCitEUk9QIFRBQkxFIG1jdl9saXN0OworLS0gdmFybGVuYSB0eXBlICh0 ZXh0KQorQ1JFQVRFIFRBQkxFIG1jdl9saXN0ICgKKyAgICBhIFRFWFQsCisg ICAgYiBURVhULAorICAgIGMgVEVYVAorKTsKK0NSRUFURSBTVEFUSVNUSUNT IHMyIE9OIG1jdl9saXN0IChhLCBiLCBjKSBXSVRIIChtY3YpOworLS0gcmFu ZG9tIGRhdGEKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBt b2QoaSwgMTExKSwgbW9kKGksIDEyMyksIG1vZChpLCAyMykgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7 CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNf bWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMg V0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3Zf ZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5m byAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8IGYgICAgICAgICB8IAorKDEg cm93KQorCitUUlVOQ0FURSBtY3ZfbGlzdDsKKy0tIGEgPT4gYiwgYSA9PiBj LCBiID0+IGMKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBp LzEwLCBpLzEwMCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJs ZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1j dikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAn bWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1jdl9idWls dCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgICB8IHQgICAgICAgICB8IG5pdGVtcz0xMDAwCisoMSByb3cpCisK K1RSVU5DQVRFIG1jdl9saXN0OworLS0gYSA9PiBiLCBhID0+IGMKK0lOU0VS VCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8y MDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZ WkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwg cGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19t dl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdj bGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRz X21jdmxpc3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8IHQgICAg ICAgICB8IG5pdGVtcz0xMDAwCisoMSByb3cpCisKK1RSVU5DQVRFIG1jdl9s aXN0OworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBz Y2FuLCBub3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG1jdl9s aXN0CisgICAgIFNFTEVDVCBpLzEwMDAwLCBpLzIwMDAwLCBpLzQwMDAwIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhpKTsKK0NSRUFURSBJ TkRFWCBtY3ZfaWR4IE9OIG1jdl9saXN0IChhLCBiKTsKK0FOQUxZWkUgbWN2 X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZf c3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0 aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsK KyBtY3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxp c3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8IHQgICAgICAgICB8 IG5pdGVtcz0xMDAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQor IFNFTEVDVCAqIEZST00gbWN2X2xpc3QgV0hFUkUgYSA9ICcxMCcgQU5EIGIg PSAnNSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJp dG1hcCBIZWFwIFNjYW4gb24gbWN2X2xpc3QKKyAgIFJlY2hlY2sgQ29uZDog KChhID0gJzEwJzo6dGV4dCkgQU5EIChiID0gJzUnOjp0ZXh0KSkKKyAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBtY3ZfaWR4CisgICAgICAgICBJbmRl eCBDb25kOiAoKGEgPSAnMTAnOjp0ZXh0KSBBTkQgKGIgPSAnNSc6OnRleHQp KQorKDQgcm93cykKKworVFJVTkNBVEUgbWN2X2xpc3Q7CistLSBjaGVjayBl eHBsYWluIChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBp bmRleCBzY2FuKSB3aXRoIE5VTExzCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAor ICAgICBTRUxFQ1QKKyAgICAgICAoQ0FTRSBXSEVOIGkvMTAwMDAgPSAwIFRI RU4gTlVMTCBFTFNFIGkvMTAwMDAgRU5EKSwKKyAgICAgICAoQ0FTRSBXSEVO IGkvMjAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvMjAwMDAgRU5EKSwKKyAg ICAgICAoQ0FTRSBXSEVOIGkvNDAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkv NDAwMDAgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw MDApIHMoaSk7CitBTkFMWVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFi bGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFt Y3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0g J21jdl9saXN0Jzo6cmVnY2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVp bHQgfCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICAgfCB0ICAgICAgICAgfCBuaXRlbXM9MTAwCisoMSByb3cpCisK K0VYUExBSU4gKENPU1RTIG9mZikKKyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0 IFdIRVJFIGEgSVMgTlVMTCBBTkQgYiBJUyBOVUxMOworICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG1jdl9saXN0CisgICBSZWNoZWNr IENvbmQ6ICgoYSBJUyBOVUxMKSBBTkQgKGIgSVMgTlVMTCkpCisgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gbWN2X2lkeAorICAgICAgICAgSW5kZXgg Q29uZDogKChhIElTIE5VTEwpIEFORCAoYiBJUyBOVUxMKSkKKyg0IHJvd3Mp CisKK0RST1AgVEFCTEUgbWN2X2xpc3Q7CistLSBOVUxMIHZhbHVlcyAobWl4 IG9mIGludCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRFIFRBQkxFIG1jdl9s aXN0ICgKKyAgICBhIElOVCwKKyAgICBiIFRFWFQsCisgICAgYyBJTlQsCisg ICAgZCBURVhUCispOworQ1JFQVRFIFNUQVRJU1RJQ1MgczMgT04gbWN2X2xp c3QgKGEsIGIsIGMsIGQpIFdJVEggKG1jdik7CitJTlNFUlQgSU5UTyBtY3Zf bGlzdAorICAgICBTRUxFQ1QKKyAgICAgICAgIG1vZChpLCAxMDApLAorICAg ICAgICAgKENBU0UgV0hFTiBtb2QoaSwgMjAwKSA9IDAgVEhFTiBOVUxMIEVM U0UgbW9kKGksMjAwKSBFTkQpLAorICAgICAgICAgbW9kKGksIDQwMCksCisg ICAgICAgICAoQ0FTRSBXSEVOIG1vZChpLCAzMDApID0gMCBUSEVOIE5VTEwg RUxTRSBtb2QoaSw2MDApIEVORCkKKyAgICAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1Qg bWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9p bmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3Rh cmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8 IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgICB8IHQgICAgICAgICB8IG5pdGVtcz0xMjAwCiso MSByb3cpCisKK0RST1AgVEFCTEUgbWN2X2xpc3Q7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDJlMmRmOGUuLmFj NTAwN2UgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cnVsZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0CkBAIC0xMzY5LDcgKzEzNjksOSBAQCBwZ19tdl9zdGF0c3wgU0VM RUNUIG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLAogICAgIGMucmVsbmFtZSBB UyB0YWJsZW5hbWUsCiAgICAgcy5zdGFrZXlzIEFTIGF0dG51bXMsCiAgICAg bGVuZ3RoKHMuc3RhZGVwcykgQVMgZGVwc2J5dGVzLAotICAgIHBnX212X3N0 YXRzX2RlcGVuZGVuY2llc19pbmZvKHMuc3RhZGVwcykgQVMgZGVwc2luZm8K KyAgICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyhzLnN0YWRlcHMp IEFTIGRlcHNpbmZvLAorICAgIGxlbmd0aChzLnN0YW1jdikgQVMgbWN2Ynl0 ZXMsCisgICAgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHMuc3RhbWN2KSBB UyBtY3ZpbmZvCiAgICBGUk9NICgocGdfbXZfc3RhdGlzdGljIHMKICAgICAg Sk9JTiBwZ19jbGFzcyBjIE9OICgoYy5vaWQgPSBzLnN0YXJlbGlkKSkpCiAg ICAgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4ub2lkID0gYy5y ZWxuYW1lc3BhY2UpKSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZQppbmRleCA4MTQ4NGYxLi44MzhjMTJiIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTExMiw0ICsx MTIsNCBAQCB0ZXN0OiBldmVudF90cmlnZ2VyCiB0ZXN0OiBzdGF0cwogCiAj IHJ1biB0ZXN0cyBvZiBtdWx0aXZhcmlhdGUgc3RhdHMKLXRlc3Q6IG12X2Rl cGVuZGVuY2llcwordGVzdDogbXZfZGVwZW5kZW5jaWVzIG12X21jdgpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUgYi9z cmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQppbmRleCAxNGVhNTc0 Li5kOTdhMGVjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nlcmlh bF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hl ZHVsZQpAQCAtMTYyLDMgKzE2Miw0IEBAIHRlc3Q6IHhtbAogdGVzdDogZXZl bnRfdHJpZ2dlcgogdGVzdDogc3RhdHMKIHRlc3Q6IG12X2RlcGVuZGVuY2ll cwordGVzdDogbXZfbWN2CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9tdl9tY3Yuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfbWN2 LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjRj OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv bXZfbWN2LnNxbApAQCAtMCwwICsxLDE3OCBAQAorLS0gZGF0YSB0eXBlIHBh c3NlZCBieSB2YWx1ZQorQ1JFQVRFIFRBQkxFIG1jdl9saXN0ICgKKyAgICBh IElOVCwKKyAgICBiIElOVCwKKyAgICBjIElOVAorKTsKKworLS0gdW5rbm93 biBjb2x1bW4KK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIG1jdl9saXN0ICh1 bmtub3duX2NvbHVtbikgV0lUSCAobWN2KTsKKworLS0gc2luZ2xlIGNvbHVt bgorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gbWN2X2xpc3QgKGEpIFdJVEgg KG1jdik7CisKKy0tIHNpbmdsZSBjb2x1bW4sIGR1cGxpY2F0ZWQKK0NSRUFU RSBTVEFUSVNUSUNTIHMxIE9OIG1jdl9saXN0IChhLCBhKSBXSVRIIChtY3Yp OworCistLSB0d28gY29sdW1ucywgb25lIGR1cGxpY2F0ZWQKK0NSRUFURSBT VEFUSVNUSUNTIHMxIE9OIG1jdl9saXN0IChhLCBhLCBiKSBXSVRIIChtY3Yp OworCistLSB1bmtub3duIG9wdGlvbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczEg T04gbWN2X2xpc3QgKGEsIGIsIGMpIFdJVEggKHVua25vd25fb3B0aW9uKTsK KworLS0gbWlzc2luZyBNQ1Ygc3RhdGlzdGljcworQ1JFQVRFIFNUQVRJU1RJ Q1MgczEgT04gbWN2X2xpc3QgKGEsIGIsIGMpIFdJVEggKGRlcGVuZGVuY2ll cywgbWF4X21jdl9pdGVtcz0yMDApOworCistLSBpbnZhbGlkIG1jdl9tYXhf aXRlbXMgdmFsdWUgLyB0b28gbG93CitDUkVBVEUgU1RBVElTVElDUyBzMSBP TiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAobWN2LCBtYXhfbWN2X2l0ZW1z PTEwKTsKKworLS0gaW52YWxpZCBtY3ZfbWF4X2l0ZW1zIHZhbHVlIC8gdG9v IGhpZ2gKK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIG1jdl9saXN0IChhLCBi LCBjKSBXSVRIIChtY3YsIG1heF9tY3ZfaXRlbXM9MTAwMDApOworCistLSBj b3JyZWN0IGNvbW1hbmQKK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIG1jdl9s aXN0IChhLCBiLCBjKSBXSVRIIChtY3YpOworCistLSByYW5kb20gZGF0YQor SU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAgU0VMRUNUIG1vZChpLCAxMTEp LCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIG1jdl9saXN0OworCitTRUxF Q1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlz dF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUg c3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKworVFJVTkNBVEUg bWN2X2xpc3Q7CisKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lOU0VS VCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEwLCBpLzEwMCwgaS8y MDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKKworQU5B TFlaRSBtY3ZfbGlzdDsKKworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVp bHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00g cGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6 cmVnY2xhc3M7CisKK1RSVU5DQVRFIG1jdl9saXN0OworCistLSBhID0+IGIs IGEgPT4gYworSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAgU0VMRUNUIGkv MTAsIGkvMTUwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw KSBzKGkpOworCitBTkFMWVpFIG1jdl9saXN0OworCitTRUxFQ1QgbWN2X2Vu YWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0 YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQg PSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKworVFJVTkNBVEUgbWN2X2xpc3Q7 CisKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nh biwgbm90IHBsYWluIGluZGV4IHNjYW4pCitJTlNFUlQgSU5UTyBtY3ZfbGlz dAorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAwMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVBVEUgSU5E RVggbWN2X2lkeCBPTiBtY3ZfbGlzdCAoYSwgYik7CisKK0FOQUxZWkUgbWN2 X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBwZ19t dl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212X3N0 YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2NsYXNz OworCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBtY3Zf bGlzdCBXSEVSRSBhID0gMTAgQU5EIGIgPSA1OworCitEUk9QIFRBQkxFIG1j dl9saXN0OworCistLSB2YXJsZW5hIHR5cGUgKHRleHQpCitDUkVBVEUgVEFC TEUgbWN2X2xpc3QgKAorICAgIGEgVEVYVCwKKyAgICBiIFRFWFQsCisgICAg YyBURVhUCispOworCitDUkVBVEUgU1RBVElTVElDUyBzMiBPTiBtY3ZfbGlz dCAoYSwgYiwgYykgV0lUSCAobWN2KTsKKworLS0gcmFuZG9tIGRhdGEKK0lO U0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBtb2QoaSwgMTExKSwg bW9kKGksIDEyMyksIG1vZChpLCAyMykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwMCkgcyhpKTsKKworQU5BTFlaRSBtY3ZfbGlzdDsKKworU0VMRUNU IG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3Rf aW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0 YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7CisKK1RSVU5DQVRFIG1j dl9saXN0OworCistLSBhID0+IGIsIGEgPT4gYywgYiA9PiBjCitJTlNFUlQg SU5UTyBtY3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMCwgaS8xMDAsIGkvMjAw IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZ WkUgbWN2X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0 LCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBn X212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJl Z2NsYXNzOworCitUUlVOQ0FURSBtY3ZfbGlzdDsKKworLS0gYSA9PiBiLCBh ID0+IGMKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEw LCBpLzE1MCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkg cyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxl ZCwgbWN2X2J1aWx0LCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2 KQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdt Y3ZfbGlzdCc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtY3ZfbGlzdDsKKwor LS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBu b3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG1jdl9saXN0Cisg ICAgIFNFTEVDVCBpLzEwMDAwLCBpLzIwMDAwLCBpLzQwMDAwIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhpKTsKK0NSRUFURSBJTkRFWCBt Y3ZfaWR4IE9OIG1jdl9saXN0IChhLCBiKTsKK0FOQUxZWkUgbWN2X2xpc3Q7 CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBwZ19tdl9zdGF0 c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212X3N0YXRpc3Rp YyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2NsYXNzOworCitF WFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBtY3ZfbGlzdCBX SEVSRSBhID0gJzEwJyBBTkQgYiA9ICc1JzsKKworVFJVTkNBVEUgbWN2X2xp c3Q7CisKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5kZXgg c2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4pIHdpdGggTlVMTHMKK0lOU0VS VCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVAorICAgICAgIChDQVNFIFdI RU4gaS8xMDAwMCA9IDAgVEhFTiBOVUxMIEVMU0UgaS8xMDAwMCBFTkQpLAor ICAgICAgIChDQVNFIFdIRU4gaS8yMDAwMCA9IDAgVEhFTiBOVUxMIEVMU0Ug aS8yMDAwMCBFTkQpLAorICAgICAgIChDQVNFIFdIRU4gaS80MDAwMCA9IDAg VEhFTiBOVUxMIEVMU0UgaS80MDAwMCBFTkQpCisgICAgIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7 CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBwZ19tdl9zdGF0 c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212X3N0YXRpc3Rp YyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2NsYXNzOworCitF WFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBtY3ZfbGlzdCBX SEVSRSBhIElTIE5VTEwgQU5EIGIgSVMgTlVMTDsKKworRFJPUCBUQUJMRSBt Y3ZfbGlzdDsKKworLS0gTlVMTCB2YWx1ZXMgKG1peCBvZiBpbnQgYW5kIHRl eHQgY29sdW1ucykKK0NSRUFURSBUQUJMRSBtY3ZfbGlzdCAoCisgICAgYSBJ TlQsCisgICAgYiBURVhULAorICAgIGMgSU5ULAorICAgIGQgVEVYVAorKTsK KworQ1JFQVRFIFNUQVRJU1RJQ1MgczMgT04gbWN2X2xpc3QgKGEsIGIsIGMs IGQpIFdJVEggKG1jdik7CisKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAg IFNFTEVDVAorICAgICAgICAgbW9kKGksIDEwMCksCisgICAgICAgICAoQ0FT RSBXSEVOIG1vZChpLCAyMDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2QoaSwy MDApIEVORCksCisgICAgICAgICBtb2QoaSwgNDAwKSwKKyAgICAgICAgIChD QVNFIFdIRU4gbW9kKGksIDMwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChp LDYwMCkgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw KSBzKGkpOworCitBTkFMWVpFIG1jdl9saXN0OworCitTRUxFQ1QgbWN2X2Vu YWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0 YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQg PSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKworRFJPUCBUQUJMRSBtY3ZfbGlz dDsKLS0gCjIuMS4wCgo= --------------040701000609000501090206 Content-Type: application/x-patch; name="0005-multivariate-histograms.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0005-multivariate-histograms.patch" RnJvbSBmZjViOGI5NGZjMTk2NTRhN2ZlOThiMDcwMWQ4OWFmNjY4Mzg4MzEz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHR2QGZ1enp5LmN6PgpEYXRlOiBTdW4sIDExIEphbiAyMDE1IDIwOjE4OjI0 ICswMTAwClN1YmplY3Q6IFtQQVRDSCA1LzddIG11bHRpdmFyaWF0ZSBoaXN0 b2dyYW1zCgotIGV4dGVuZHMgdGhlIHBnX212X3N0YXRpc3RpYyBjYXRhbG9n IChhZGQgJ2hpc3QnIGZpZWxkcykKLSBidWlsZGluZyB0aGUgaGlzdG9ncmFt cyBkdXJpbmcgQU5BTFlaRQotIHNpbXBsZSBlc3RpbWF0aW9uIHdoaWxlIHBs YW5uaW5nIHRoZSBxdWVyaWVzCgpJbmNsdWRlcyByZWdyZXNzaW9uIHRlc3Rz IG1vc3RseSBlcXVhbCB0byB0aG9zZSBmb3IgZnVuY3Rpb25hbApkZXBlbmRl bmNpZXMgLyBNQ1YgbGlzdHMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3RhdGlzdGljcy5zZ21sICAgIHwgICAxOCArCiBzcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgICAgfCAgICA0ICstCiBzcmMv YmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAgICAgICAgICAgfCAgIDQ0 ICstCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAg ICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVz ZXNlbC5jICAgICB8ICA3MTggKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgfCAgICA0ICstCiBzcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlICAgICAgICAgfCAgICAyICst CiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jICAgICAgICAg fCAgIDM3ICstCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2hpc3RvZ3Jh bS5jICAgICAgfCAyMzE2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICB8 ICAgMTcgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGlj LmggICAgICB8ICAgMjQgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5oICAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2luY2x1ZGUvbm9kZXMv cmVsYXRpb24uaCAgICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVk ZS91dGlscy9tdnN0YXRzLmggICAgICAgICAgICAgICAgfCAgMTM2ICstCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X2hpc3RvZ3JhbS5vdXQgfCAg MjA3ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQg ICAgICAgIHwgICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9z Y2hlZHVsZSAgICAgICAgIHwgICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9z ZXJpYWxfc2NoZWR1bGUgICAgICAgICAgIHwgICAgMSArCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9tdl9oaXN0b2dyYW0uc3FsICAgICAgfCAgMTc2ICsrKwog MTkgZmlsZXMgY2hhbmdlZCwgMzY4MCBpbnNlcnRpb25zKCspLCAzOCBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL2hpc3RvZ3JhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdl9oaXN0b2dyYW0ub3V0CiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfaGlzdG9n cmFtLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRl X3N0YXRpc3RpY3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0 YXRpc3RpY3Muc2dtbAppbmRleCAxOTNlNGIwLi5mZDMzODJlIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21s CkBAIC0xMzMsNiArMTMzLDI0IEBAIENSRUFURSBTVEFUSVNUSUNTIFsgSUYg Tk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5z dGF0aXN0aWNzX25hCiAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgPHZhcmxp c3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5oaXN0b2dyYW08Lz4gKDx0 eXBlPmJvb2xlYW48Lz4pPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICBFbmFibGVzIGhpc3RvZ3JhbSBmb3IgdGhlIHN0YXRp c3RpY3MuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+ PGxpdGVyYWw+bWF4X2J1Y2tldHM8Lz4gKDx0eXBlPmludGVnZXI8Lz4pPC90 ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhp bXVtIG51bWJlciBvZiBoaXN0b2dyYW0gYnVja2V0cy4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg PHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5tYXhfbWN2X2l0 ZW1zPC8+ICg8dHlwZT5pbnRlZ2VyPC8+KTwvdGVybT4KICAgICA8bGlzdGl0 ZW0+CiAgICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9z eXN0ZW1fdmlld3Muc3FsCmluZGV4IDU0ODgwNjEuLjBmYmRmYTUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAor KysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKQEAg LTE2Nyw3ICsxNjcsOSBAQCBDUkVBVEUgVklFVyBwZ19tdl9zdGF0cyBBUwog ICAgICAgICBsZW5ndGgoUy5zdGFkZXBzKSBhcyBkZXBzYnl0ZXMsCiAgICAg ICAgIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFMuc3RhZGVwcykg YXMgZGVwc2luZm8sCiAgICAgICAgIGxlbmd0aChTLnN0YW1jdikgQVMgbWN2 Ynl0ZXMsCi0gICAgICAgIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhTLnN0 YW1jdikgQVMgbWN2aW5mbworICAgICAgICBwZ19tdl9zdGF0c19tY3ZsaXN0 X2luZm8oUy5zdGFtY3YpIEFTIG1jdmluZm8sCisgICAgICAgIGxlbmd0aChT LnN0YWhpc3QpIEFTIGhpc3RieXRlcywKKyAgICAgICAgcGdfbXZfc3RhdHNf aGlzdG9ncmFtX2luZm8oUy5zdGFoaXN0KSBBUyBoaXN0aW5mbwogICAgIEZS T00gKHBnX212X3N0YXRpc3RpYyBTIEpPSU4gcGdfY2xhc3MgQyBPTiAoQy5v aWQgPSBTLnN0YXJlbGlkKSkKICAgICAgICAgTEVGVCBKT0lOIHBnX25hbWVz cGFjZSBOIE9OIChOLm9pZCA9IEMucmVsbmFtZXNwYWNlKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwppbmRleCA5MGJmYWVkLi5i OTc0NjU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0 c2NtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMu YwpAQCAtMTM3LDEyICsxMzcsMTUgQEAgQ3JlYXRlU3RhdGlzdGljcyhDcmVh dGVTdGF0c1N0bXQgKnN0bXQpCiAKIAkvKiBieSBkZWZhdWx0IGJ1aWxkIG5v dGhpbmcgKi8KIAlib29sIAlidWlsZF9kZXBlbmRlbmNpZXMgPSBmYWxzZSwK LQkJCWJ1aWxkX21jdiA9IGZhbHNlOworCQkJYnVpbGRfbWN2ID0gZmFsc2Us CisJCQlidWlsZF9oaXN0b2dyYW0gPSBmYWxzZTsKIAotCWludDMyIAltYXhf bWN2X2l0ZW1zID0gLTE7CisJaW50MzIgCW1heF9idWNrZXRzID0gLTEsCisJ CQltYXhfbWN2X2l0ZW1zID0gLTE7CiAKIAkvKiBvcHRpb25zIHJlcXVpcmVk IGJlY2F1c2Ugb2Ygb3RoZXIgb3B0aW9ucyAqLwotCWJvb2wJcmVxdWlyZV9t Y3YgPSBmYWxzZTsKKwlib29sCXJlcXVpcmVfbWN2ID0gZmFsc2UsCisJCQly ZXF1aXJlX2hpc3RvZ3JhbSA9IGZhbHNlOwogCiAJQXNzZXJ0KElzQShzdG10 LCBDcmVhdGVTdGF0c1N0bXQpKTsKIApAQCAtMjQxLDYgKzI0NCwyOSBAQCBD cmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkKIAkJCQkJ CQkJTVZTVEFUX01DVkxJU1RfTUFYX0lURU1TKSkpOwogCiAJCX0KKwkJZWxz ZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgImhpc3RvZ3JhbSIpID09IDAp CisJCQlidWlsZF9oaXN0b2dyYW0gPSBkZWZHZXRCb29sZWFuKG9wdCk7CisJ CWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJtYXhfYnVja2V0cyIp ID09IDApCisJCXsKKwkJCW1heF9idWNrZXRzID0gZGVmR2V0SW50MzIob3B0 KTsKKworCQkJLyogdGhpcyBvcHRpb24gcmVxdWlyZXMgJ2hpc3RvZ3JhbScg dG8gYmUgZW5hYmxlZCAqLworCQkJcmVxdWlyZV9oaXN0b2dyYW0gPSB0cnVl OworCisJCQkvKiBzYW5pdHkgY2hlY2sgKi8KKwkJCWlmIChtYXhfYnVja2V0 cyA8IE1WU1RBVF9ISVNUX01JTl9CVUNLRVRTKQorCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJ CQkJCQkgZXJybXNnKCJtaW5pbXVtIG51bWJlciBvZiBidWNrZXRzIGlzICVk IiwKKwkJCQkJCQkJTVZTVEFUX0hJU1RfTUlOX0JVQ0tFVFMpKSk7CisKKwkJ CWVsc2UgaWYgKG1heF9idWNrZXRzID4gTVZTVEFUX0hJU1RfTUFYX0JVQ0tF VFMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNP REVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coIm1heGltdW0gbnVt YmVyIG9mIGJ1Y2tldHMgaXMgJWQiLAorCQkJCQkJCQlNVlNUQVRfSElTVF9N QVhfQlVDS0VUUykpKTsKKworCQl9CiAJCWVsc2UKIAkJCWVyZXBvcnQoRVJS T1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAg LTI0OSwxMCArMjc1LDEwIEBAIENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3Rh dHNTdG10ICpzdG10KQogCX0KIAogCS8qIGNoZWNrIHRoYXQgYXQgbGVhc3Qg c29tZSBzdGF0aXN0aWNzIHdlcmUgcmVxdWVzdGVkICovCi0JaWYgKCEgKGJ1 aWxkX2RlcGVuZGVuY2llcyB8fCBidWlsZF9tY3YpKQorCWlmICghIChidWls ZF9kZXBlbmRlbmNpZXMgfHwgYnVpbGRfbWN2IHx8IGJ1aWxkX2hpc3RvZ3Jh bSkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAotCQkJCSBlcnJtc2coIm5vIHN0YXRpc3RpY3MgdHlw ZSAoZGVwZW5kZW5jaWVzLCBtY3YpIHdhcyByZXF1ZXN0ZWQiKSkpOworCQkJ CSBlcnJtc2coIm5vIHN0YXRpc3RpY3MgdHlwZSAoZGVwZW5kZW5jaWVzLCBt Y3YsIGhpc3RvZ3JhbSkgd2FzIHJlcXVlc3RlZCIpKSk7CiAKIAkvKiBub3cg ZG8gc29tZSBjaGVja2luZyBvZiB0aGUgb3B0aW9ucyAqLwogCWlmIChyZXF1 aXJlX21jdiAmJiAoISBidWlsZF9tY3YpKQpAQCAtMjYwLDYgKzI4NiwxMSBA QCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkKIAkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJIGVycm1z Zygib3B0aW9uICdtY3YnIGlzIHJlcXVpcmVkIGJ5IG90aGVyIG9wdGlvbnMo cykiKSkpOwogCisJaWYgKHJlcXVpcmVfaGlzdG9ncmFtICYmICghIGJ1aWxk X2hpc3RvZ3JhbSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCSBlcnJtc2coIm9wdGlvbiAn aGlzdG9ncmFtJyBpcyByZXF1aXJlZCBieSBvdGhlciBvcHRpb25zKHMpIikp KTsKKwogCS8qIHNvcnQgdGhlIGF0dG51bXMgYW5kIGJ1aWxkIGludDJ2ZWN0 b3IgKi8KIAlxc29ydChhdHRudW1zLCBudW1jb2xzLCBzaXplb2YoaW50MTYp LCBjb21wYXJlX2ludDE2KTsKIAlzdGFrZXlzID0gYnVpbGRpbnQydmVjdG9y KGF0dG51bXMsIG51bWNvbHMpOwpAQCAtMjc5LDExICszMTAsMTQgQEAgQ3Jl YXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAKIAl2YWx1 ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19lbmFibGVkIC0xXSA9IEJv b2xHZXREYXR1bShidWlsZF9kZXBlbmRlbmNpZXMpOwogCXZhbHVlc1tBbnVt X3BnX212X3N0YXRpc3RpY19tY3ZfZW5hYmxlZCAgLTFdID0gQm9vbEdldERh dHVtKGJ1aWxkX21jdik7CisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGlj X2hpc3RfZW5hYmxlZCAtMV0gPSBCb29sR2V0RGF0dW0oYnVpbGRfaGlzdG9n cmFtKTsKIAogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfbWF4 X2l0ZW1zICAgIC0xXSA9IEludDMyR2V0RGF0dW0obWF4X21jdl9pdGVtcyk7 CisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX2hpc3RfbWF4X2J1Y2tl dHMgLTFdID0gSW50MzJHZXREYXR1bShtYXhfYnVja2V0cyk7CiAKIAludWxs c1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFkZXBzICAtMV0gPSB0cnVlOwog CW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YW1jdiAgIC0xXSA9IHRy dWU7CisJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhaGlzdCAgLTFd ID0gdHJ1ZTsKIAogCS8qIGluc2VydCB0aGUgdHVwbGUgaW50byBwZ19tdl9z dGF0aXN0aWMgKi8KIAltdnN0YXRyZWwgPSBoZWFwX29wZW4oTXZTdGF0aXN0 aWNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9vdXRmdW5jcy5jCmluZGV4IDllMDI5ZWYuLjBlZGM4MzkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtMTk0OSwxMCArMTk0OSwx MiBAQCBfb3V0TVZTdGF0aXN0aWNJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25z dCBNVlN0YXRpc3RpY0luZm8gKm5vZGUpCiAJLyogZW5hYmxlZCBzdGF0aXN0 aWNzICovCiAJV1JJVEVfQk9PTF9GSUVMRChkZXBzX2VuYWJsZWQpOwogCVdS SVRFX0JPT0xfRklFTEQobWN2X2VuYWJsZWQpOworCVdSSVRFX0JPT0xfRklF TEQoaGlzdF9lbmFibGVkKTsKIAogCS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0 aXN0aWNzICovCiAJV1JJVEVfQk9PTF9GSUVMRChkZXBzX2J1aWx0KTsKIAlX UklURV9CT09MX0ZJRUxEKG1jdl9idWlsdCk7CisJV1JJVEVfQk9PTF9GSUVM RChoaXN0X2J1aWx0KTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKaW5kZXggZDE5 NDU1MS4uNWIyZDkyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY2xhdXNlc2VsLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY2xhdXNlc2VsLmMKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RhdGlj IHZvaWQgYWRkUmFuZ2VDbGF1c2UoUmFuZ2VRdWVyeUNsYXVzZSAqKnJxbGlz dCwgTm9kZSAqY2xhdXNlLAogCiAjZGVmaW5lCQlNVl9DTEFVU0VfVFlQRV9G REVQCQkweDAxCiAjZGVmaW5lCQlNVl9DTEFVU0VfVFlQRV9NQ1YJCTB4MDIK KyNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX0hJU1QJCTB4MDQKIAogc3RhdGlj IGJvb2wgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoUGxhbm5lckluZm8gKnJv b3QsIE5vZGUgKmNsYXVzZSwgT2lkIHZhclJlbGlkLAogCQkJCQkJCSBJbmRl eCAqcmVsaWQsIEJpdG1hcHNldCAqKmF0dG51bXMsIFNwZWNpYWxKb2luSW5m byAqc2ppbmZvLApAQCAtNzMsNiArNzQsOCBAQCBzdGF0aWMgU2VsZWN0aXZp dHkgY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9v dCwKIHN0YXRpYyBTZWxlY3Rpdml0eSBjbGF1c2VsaXN0X212X3NlbGVjdGl2 aXR5X21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQlMaXN0 ICpjbGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMsCiAJCQkJCQkJ CQlib29sICpmdWxsbWF0Y2gsIFNlbGVjdGl2aXR5ICpsb3dzZWwpOworc3Rh dGljIFNlbGVjdGl2aXR5IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlz dG9ncmFtKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJTGlzdCAqY2xh dXNlcywgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzKTsKIAogc3RhdGljIGlu dCB1cGRhdGVfbWF0Y2hfYml0bWFwX21jdmxpc3QoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmNsYXVzZXMsCiAJCQkJCQkJCQlpbnQydmVjdG9yICpzdGFr ZXlzLCBNQ1ZMaXN0IG1jdmxpc3QsCkBAIC04MCw2ICs4MywxMiBAQCBzdGF0 aWMgaW50IHVwZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlzdChQbGFubmVySW5m byAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJCQkJCQkJCVNlbGVjdGl2aXR5 ICpsb3dzZWwsIGJvb2wgKmZ1bGxtYXRjaCwKIAkJCQkJCQkJCWJvb2wgaXNf b3IpOwogCitzdGF0aWMgaW50IHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9n cmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJ CQkJaW50MnZlY3RvciAqc3Rha2V5cywKKwkJCQkJCQkJCU1WU2VyaWFsaXpl ZEhpc3RvZ3JhbSBtdmhpc3QsCisJCQkJCQkJCQlpbnQgbm1hdGNoZXMsIGNo YXIgKiBtYXRjaGVzLAorCQkJCQkJCQkJYm9vbCBpc19vcik7CisKIHN0YXRp YyBib29sIGhhc19zdGF0cyhMaXN0ICpzdGF0cywgaW50IHR5cGUpOwogCiBz dGF0aWMgTGlzdCAqIGZpbmRfc3RhdHMoUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmNsYXVzZXMsCkBAIC0xMTQsNiArMTIzLDcgQEAgc3RhdGljIEJpdG1h cHNldCAqIGdldF92YXJhdHRub3MoTm9kZSAqIG5vZGUsIEluZGV4IHJlbGlk KTsKICNkZWZpbmUgVVBEQVRFX1JFU1VMVChtLHIsaXNvcikJXAogCShtKSA9 IChpc29yKSA/IChNQVgobSxyKSkgOiAoTUlOKG0scikpCiAKKwogLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQlST1VUSU5FUyBUTyBD T01QVVRFIFNFTEVDVElWSVRJRVMKICAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwpAQCAtMzA0LDcgKzMxNCw3IEBAIGNsYXVzZWxpc3Rfc2Vs ZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJICogQ2hlY2sgdGhhdCB0 aGVyZSBhcmUgc3RhdGlzdGljcyB3aXRoIE1DViBsaXN0LiBJZiBub3QsIHdl IGRvbid0CiAJICogbmVlZCB0byB3YXN0ZSB0aW1lIHdpdGggdGhlIG9wdGlt aXphdGlvbi4KIAkgKi8KLQlpZiAoaGFzX3N0YXRzKHN0YXRzLCBNVl9DTEFV U0VfVFlQRV9NQ1YpKQorCWlmIChoYXNfc3RhdHMoc3RhdHMsIE1WX0NMQVVT RV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBFX0hJU1QpKQogCXsKIAkJLyoK IAkJICogUmVjb2xsZWN0IGF0dHJpYnV0ZXMgZnJvbSBtdi1jb21wYXRpYmxl IGNsYXVzZXMgKG1heWJlIHdlJ3ZlCkBAIC0zMTIsNyArMzIyLDcgQEAgY2xh dXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAkJICog RnJvbSBub3cgb24gd2UncmUgb25seSBpbnRlcmVzdGVkIGluIE1DVi1jb21w YXRpYmxlIGNsYXVzZXMuCiAJCSAqLwogCQltdmF0dG51bXMgPSBjb2xsZWN0 X212X2F0dG51bXMocm9vdCwgY2xhdXNlcywgdmFyUmVsaWQsICZyZWxpZCwg c2ppbmZvLAotCQkJCQkJCQkJICAgTVZfQ0xBVVNFX1RZUEVfTUNWKTsKKwkJ CQkJCQkJCSAgIChNVl9DTEFVU0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQ RV9ISVNUKSk7CiAKIAkJLyoKIAkJICogSWYgdGhlcmUgc3RpbGwgYXJlIGF0 IGxlYXN0IHR3byBjb2x1bW5zLCB3ZSdsbCB0cnkgdG8gc2VsZWN0CkBAIC0z MzEsNyArMzQxLDcgQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkvKiBzcGxpdCB0aGUgY2xhdXNlbGlzdCBpbnRv IHJlZ3VsYXIgYW5kIG12LWNsYXVzZXMgKi8KIAkJCQljbGF1c2VzID0gY2xh dXNlbGlzdF9tdl9zcGxpdChyb290LCBzamluZm8sIGNsYXVzZXMsCiAJCQkJ CQkJCQkJdmFyUmVsaWQsICZtdmNsYXVzZXMsIG12c3RhdCwKLQkJCQkJCQkJ CQlNVl9DTEFVU0VfVFlQRV9NQ1YpOworCQkJCQkJCQkJCShNVl9DTEFVU0Vf VFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9ISVNUKSk7CiAKIAkJCQkvKiB3 ZSd2ZSBjaG9zZW4gdGhlIGhpc3RvZ3JhbSB0byBtYXRjaCB0aGUgY2xhdXNl cyAqLwogCQkJCUFzc2VydChtdmNsYXVzZXMgIT0gTklMKTsKQEAgLTEwOTgs NiArMTEwOCw3IEBAIHN0YXRpYyBTZWxlY3Rpdml0eQogY2xhdXNlbGlzdF9t dl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNl cywgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzKQogewogCWJvb2wgZnVsbG1h dGNoID0gZmFsc2U7CisJU2VsZWN0aXZpdHkgczEgPSAwLjAsIHMyID0gMC4w OwogCiAJLyoKIAkgKiBMb3dlc3QgZnJlcXVlbmN5IGluIHRoZSBNQ1YgbGlz dCAobWF5IGJlIHVzZWQgYXMgYW4gdXBwZXIgYm91bmQKQEAgLTExMTEsOSAr MTEyMiwyNCBAQCBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKm12 cwogCSAqICAgICAgTUNWL2hpc3RvZ3JhbSBldmFsdWF0aW9uKS4KIAkgKi8K IAotCS8qIEV2YWx1YXRlIHRoZSBNQ1Ygc2VsZWN0aXZpdHkgKi8KLQlyZXR1 cm4gY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0KHJvb3QsIGNs YXVzZXMsIG12c3RhdHMsCisJLyogRXZhbHVhdGUgdGhlIE1DViBmaXJzdC4g Ki8KKwlzMSA9IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfbWN2bGlzdChy b290LCBjbGF1c2VzLCBtdnN0YXRzLAogCQkJCQkJCQkJCSAgICZmdWxsbWF0 Y2gsICZtY3ZfbG93KTsKKworCS8qCisJICogSWYgd2UgZ290IGEgZnVsbCBl cXVhbGl0eSBtYXRjaCBvbiB0aGUgTUNWIGxpc3QsIHdlJ3JlIGRvbmUgKGFu ZAorCSAqIHRoZSBlc3RpbWF0ZSBpcyBwcmV0dHkgZ29vZCkuCisJICovCisJ aWYgKGZ1bGxtYXRjaCAmJiAoczEgPiAwLjApKQorCQlyZXR1cm4gczE7CisK KwkvKiBGSVhNRSBpZiAoZnVsbG1hdGNoKSB3aXRob3V0IG1hdGNoaW5nIE1D ViBpdGVtLCB1c2UgdGhlIG1jdl9sb3cKKwkgKiAgICAgICBzZWxlY3Rpdml0 eSBhcyB1cHBlciBib3VuZCAqLworCisJczIgPSBjbGF1c2VsaXN0X212X3Nl bGVjdGl2aXR5X2hpc3RvZ3JhbShyb290LCBjbGF1c2VzLCBtdnN0YXRzKTsK KworCS8qIFRPRE8gY2xhbXAgdG8gPD0gMS4wIChvciBtb3JlIHN0cmljdGx5 LCB3aGVuIHBvc3NpYmxlKSAqLworCXJldHVybiBzMSArIHMyOwogfQogCiAv KgpAQCAtMTI1NSw3ICsxMjgxLDcgQEAgY2hvb3NlX212X3N0YXRpc3RpY3Mo TGlzdCAqc3RhdHMsIEJpdG1hcHNldCAqYXR0bnVtcykKIAkJaW50CW51bWF0 dHJzID0gYXR0cnMtPmRpbTE7CiAKIAkJLyogc2tpcCBkZXBlbmRlbmNpZXMt b25seSBzdGF0cyAqLwotCQlpZiAoISBpbmZvLT5tY3ZfYnVpbHQpCisJCWlm ICghIChpbmZvLT5tY3ZfYnVpbHQgfHwgaW5mby0+aGlzdF9idWlsdCkpCiAJ CQljb250aW51ZTsKIAogCQkvKiBjb3VudCBjb2x1bW5zIGNvdmVyZWQgYnkg dGhlIGhpc3RvZ3JhbSAqLwpAQCAtMTQxNSw3ICsxNDQxLDYgQEAgY2xhdXNl X2lzX212X2NvbXBhdGlibGUoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmNs YXVzZSwgT2lkIHZhclJlbGlkLAogCQlib29sCQlvazsKIAogCQkvKiBpcyBp dCAndmFyaWFibGUgb3AgY29uc3RhbnQnID8gKi8KLQogCQlvayA9IChibXNf bWVtYmVyc2hpcChjbGF1c2VfcmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKSAm JgogCQkJKGlzX3BzZXVkb19jb25zdGFudF9jbGF1c2VfcmVsaWRzKGxzZWNv bmQoZXhwci0+YXJncyksCiAJCQkJCQkJCQkJCSAgcmlnaHRfcmVsaWRzKSB8 fApAQCAtMTQ2NSwxMCArMTQ5MCwxMCBAQCBjbGF1c2VfaXNfbXZfY29tcGF0 aWJsZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqY2xhdXNlLCBPaWQgdmFy UmVsaWQsCiAJCQkJCWNhc2UgRl9TQ0FMQVJMVFNFTDoKIAkJCQkJY2FzZSBG X1NDQUxBUkdUU0VMOgogCQkJCQkJLyogbm90IGNvbXBhdGlibGUgd2l0aCBm dW5jdGlvbmFsIGRlcGVuZGVuY2llcyAqLwotCQkJCQkJaWYgKHR5cGVzICYg TVZfQ0xBVVNFX1RZUEVfTUNWKQorCQkJCQkJaWYgKHR5cGVzICYgKE1WX0NM QVVTRV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBFX0hJU1QpKQogCQkJCQkJ ewogCQkJCQkJCSphdHRudW1zID0gYm1zX2FkZF9tZW1iZXIoKmF0dG51bXMs IHZhci0+dmFyYXR0bm8pOwotCQkJCQkJCXJldHVybiAodHlwZXMgJiBNVl9D TEFVU0VfVFlQRV9NQ1YpOworCQkJCQkJCXJldHVybiAodHlwZXMgJiAoTVZf Q0xBVVNFX1RZUEVfTUNWIHwgTVZfQ0xBVVNFX1RZUEVfSElTVCkpOwogCQkJ CQkJfQogCQkJCQkJcmV0dXJuIGZhbHNlOwogCkBAIC0xNzk2LDYgKzE4MjEs OSBAQCBoYXNfc3RhdHMoTGlzdCAqc3RhdHMsIGludCB0eXBlKQogCiAJCWlm ICgodHlwZSAmIE1WX0NMQVVTRV9UWVBFX01DVikgJiYgc3RhdC0+bWN2X2J1 aWx0KQogCQkJcmV0dXJuIHRydWU7CisKKwkJaWYgKCh0eXBlICYgTVZfQ0xB VVNFX1RZUEVfSElTVCkgJiYgc3RhdC0+aGlzdF9idWlsdCkKKwkJCXJldHVy biB0cnVlOwogCX0KIAogCXJldHVybiBmYWxzZTsKQEAgLTI2MTIsMyArMjY0 MCw2NzUgQEAgdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0KFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCiAJcmV0dXJuIG5tYXRjaGVz OwogfQorCisvKgorICogRXN0aW1hdGUgc2VsZWN0aXZpdHkgb2YgY2xhdXNl cyB1c2luZyBhIGhpc3RvZ3JhbS4KKyAqCisgKiBJZiB0aGVyZSdzIG5vIGhp c3RvZ3JhbSBmb3IgdGhlIHN0YXRzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAw LjAuCisgKgorICogVGhlIGdlbmVyYWwgaWRlYSBvZiB0aGlzIG1ldGhvZCBp cyBzaW1pbGFyIHRvIGhvdyBNQ1YgbGlzdHMgYXJlCisgKiBwcm9jZXNzZWQs IGV4Y2VwdCB0aGF0IHRoaXMgaW50cm9kdWNlcyB0aGUgY29uY2VwdCBvZiBh IHBhcnRpYWwKKyAqIG1hdGNoIChNQ1Ygb25seSB3b3JrcyB3aXRoIGZ1bGwg bWF0Y2ggLyBtaXNtYXRjaCkuCisgKgorICogVGhlIGFsZ29yaXRobSB3b3Jr cyBsaWtlIHRoaXM6CisgKgorICogICAxKSBtYXJrIGFsbCBidWNrZXRzIGFz ICdmdWxsIG1hdGNoJworICogICAyKSB3YWxrIHRocm91Z2ggYWxsIHRoZSBj bGF1c2VzCisgKiAgIDMpIGZvciBhIHBhcnRpY3VsYXIgY2xhdXNlLCB3YWxr IHRocm91Z2ggYWxsIHRoZSBidWNrZXRzCisgKiAgIDQpIHNraXAgYnVja2V0 cyB0aGF0IGFyZSBhbHJlYWR5ICdubyBtYXRjaCcKKyAqICAgNSkgY2hlY2sg Y2xhdXNlIGZvciBidWNrZXRzIHRoYXQgc3RpbGwgbWF0Y2ggKGF0IGxlYXN0 IHBhcnRpYWxseSkKKyAqICAgNikgc3VtIGZyZXF1ZW5jaWVzIGZvciBidWNr ZXRzIHRvIGdldCBzZWxlY3Rpdml0eQorICoKKyAqIFVubGlrZSBNQ1YgbGlz dHMsIGhpc3RvZ3JhbXMgaGF2ZSBhIGNvbmNlcHQgb2YgYSBwYXJ0aWFsIG1h dGNoLiBJbgorICogdGhhdCBjYXNlIHdlIHVzZSAxLzIgdGhlIGJ1Y2tldCwg dG8gbWluaW1pemUgdGhlIGF2ZXJhZ2UgZXJyb3IuIFRoZQorICogTVYgaGlz dG9ncmFtcyBhcmUgdXN1YWxseSBsZXNzIGRldGFpbGVkIHRoYW4gdGhlIHBl ci1jb2x1bW4gb25lcywKKyAqIG1lYW5pbmcgdGhlIHN1bSBpcyBvZnRlbiBx dWl0ZSBoaWdoICh0aGFua3MgdG8gY29tYmluaW5nIGEgbG90IG9mCisgKiAi cGFydGlhbGx5IGhpdCIgYnVja2V0cykuCisgKgorICogTWF5YmUgd2UgY291 bGQgdXNlIHBlci1idWNrZXQgaW5mb3JtYXRpb24gd2l0aCBudW1iZXIgb2Yg ZGlzdGluY3QKKyAqIHZhbHVlcyBpdCBjb250YWlucyAoZm9yIGVhY2ggZGlt ZW5zaW9uKSwgYW5kIHRoZW4gdXNlIHRoYXQgdG8gY29ycmVjdAorICogdGhl IGVzdGltYXRlIChzbyB3aXRoIDEwIGRpc3RpbmN0IHZhbHVlcywgd2UnZCB1 c2UgMS8xMCBvZiB0aGUgYnVja2V0CisgKiBmcmVxdWVuY3kpLiBXZSBtaWdo dCBhbHNvIHNjYWxlIHRoZSB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIGFjdHVh bAorICogbmRpc3RpbmN0IGVzdGltYXRlIChub3QganVzdCB0aGUgdmFsdWVz IG9ic2VydmVkIGluIHRoZSBzYW1wbGUpLgorICoKKyAqIEFub3RoZXIgb3B0 aW9uIHdvdWxkIGJlIHRvIG11bHRpcGx5IHRoZSBzZWxlY3Rpdml0aWVzLCBp LmUuIGlmIHdlIGdldAorICogJ3BhcnRpYWwgbWF0Y2gnIGZvciBhIGJ1Y2tl dCBmb3IgbXVsdGlwbGUgY29uZGl0aW9ucywgd2UgbWlnaHQgdXNlCisgKiAw LjVeayAod2hlcmUgayBpcyB0aGUgbnVtYmVyIG9mIGNvbmRpdGlvbnMpLCBp bnN0ZWFkIG9mIDAuNS4gVGhpcworICogcHJvYmFibHkgZG9lcyBub3QgbWlu aW1pemUgdGhlIGF2ZXJhZ2UgZXJyb3IsIHRob3VnaC4KKyAqCisgKiBUT0RP IFRoaXMgbWlnaHQgdXNlIGEgc2ltaWxhciBzaG9ydGN1dCB0byBNQ1YgbGlz dHMgLSBjb3VudCBidWNrZXRzCisgKiAgICAgIG1hcmtlZCBhcyBwYXJ0aWFs L2Z1bGwgbWF0Y2gsIGFuZCB0ZXJtaW5hdGUgb25jZSB0aGlzIGRyb3AgdG8g MC4KKyAqICAgICAgTm90IHN1cmUgaWYgaXQncyByZWFsbHkgd29ydGggaXQg LSBmb3IgTUNWIGxpc3RzIGEgc2l0dWF0aW9uIGxpa2UKKyAqICAgICAgdGhp cyBpcyBub3QgdW5jb21tb24sIGJ1dCBmb3IgaGlzdG9ncmFtcyBpdCdzIG5v dCB0aGF0IGNsZWFyLgorICovCitzdGF0aWMgU2VsZWN0aXZpdHkKK2NsYXVz ZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJCQkJTVZTdGF0aXN0aWNJbmZv ICptdnN0YXRzKQoreworCWludCBpOworCVNlbGVjdGl2aXR5IHMgPSAwLjA7 CisJU2VsZWN0aXZpdHkgdSA9IDAuMDsKKworCWludAkJbm1hdGNoZXMgPSAw OworCWNoYXIgICAqbWF0Y2hlcyA9IE5VTEw7CisKKwlNVlNlcmlhbGl6ZWRI aXN0b2dyYW0gbXZoaXN0ID0gTlVMTDsKKworCS8qIHRoZXJlJ3Mgbm8gaGlz dG9ncmFtICovCisJaWYgKCEgbXZzdGF0cy0+aGlzdF9idWlsdCkKKwkJcmV0 dXJuIDAuMDsKKworCS8qIFRoZXJlIG1heSBiZSBubyBoaXN0b2dyYW0gaW4g dGhlIHN0YXRzIChjaGVjayBoaXN0X2J1aWx0IGZsYWcpICovCisJbXZoaXN0 ID0gbG9hZF9tdl9oaXN0b2dyYW0obXZzdGF0cy0+bXZvaWQpOworCisJQXNz ZXJ0IChtdmhpc3QgIT0gTlVMTCk7CisJQXNzZXJ0IChjbGF1c2VzICE9IE5J TCk7CisJQXNzZXJ0IChsaXN0X2xlbmd0aChjbGF1c2VzKSA+PSAyKTsKKwor CS8qCisJICogQml0bWFwIG9mIGJ1Y2tldCBtYXRjaGVzIChtaXNtYXRjaCwg cGFydGlhbCwgZnVsbCkuIGJ5IGRlZmF1bHQKKwkgKiBhbGwgYnVja2V0cyBm dWxseSBtYXRjaCAoYW5kIHdlJ2xsIGVsaW1pbmF0ZSB0aGVtKS4KKwkgKi8K KwltYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiBtdmhpc3QtPm5i dWNrZXRzKTsKKwltZW1zZXQobWF0Y2hlcywgIE1WU1RBVFNfTUFUQ0hfRlVM TCwgc2l6ZW9mKGNoYXIpKm12aGlzdC0+bmJ1Y2tldHMpOworCisJbm1hdGNo ZXMgPSBtdmhpc3QtPm5idWNrZXRzOworCisJLyogYnVpbGQgdGhlIG1hdGNo IGJpdG1hcCAqLworCXVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKHJv b3QsIGNsYXVzZXMsCisJCQkJCQkJCSAgbXZzdGF0cy0+c3Rha2V5cywgbXZo aXN0LAorCQkJCQkJCQkgIG5tYXRjaGVzLCBtYXRjaGVzLCBmYWxzZSk7CisK KwkvKiBub3csIHdhbGsgdGhyb3VnaCB0aGUgYnVja2V0cyBhbmQgc3VtIHRo ZSBzZWxlY3Rpdml0aWVzICovCisJZm9yIChpID0gMDsgaSA8IG12aGlzdC0+ bmJ1Y2tldHM7IGkrKykKKwl7CisJCS8qCisJCSAqIEZpbmQgb3V0IHdoYXQg cGFydCBvZiB0aGUgZGF0YSBpcyBjb3ZlcmVkIGJ5IHRoZSBoaXN0b2dyYW0s CisJCSAqIHNvIHRoYXQgd2UgY2FuICdzY2FsZScgdGhlIHNlbGVjdGl2aXR5 IHByb3Blcmx5IChlLmcuIHdoZW4KKwkJICogb25seSA1MCUgb2YgdGhlIHNh bXBsZSBnb3QgaW50byB0aGUgaGlzdG9ncmFtLCBhbmQgdGhlIHJlc3QKKwkJ ICogaXMgaW4gYSBNQ1YgbGlzdCkuCisJCSAqCisJCSAqIFRPRE8gVGhpcyBt aWdodCBiZSBoYW5kbGVkIGJ5IGtlZXBpbmcgYSBnbG9iYWwgImZyZXF1ZW5j eSIKKwkJICogICAgICBmb3IgdGhlIHdob2xlIGhpc3RvZ3JhbSwgd2hpY2gg bWlnaHQgc2F2ZSB1cyBzb21lIHRpbWUKKwkJICogICAgICBzcGVudCBhY2Nl c3NpbmcgdGhlIG5vdC1tYXRjaGluZyBwYXJ0IG9mIHRoZSBoaXN0b2dyYW0u CisJCSAqICAgICAgQWx0aG91Z2ggaXQncyBsaWtlbHkgaW4gYSBjYWNoZSwg c28gaXQncyB2ZXJ5IGZhc3QuCisJCSAqLworCQl1ICs9IG12aGlzdC0+YnVj a2V0c1tpXS0+bnR1cGxlczsKKworCQlpZiAobWF0Y2hlc1tpXSA9PSBNVlNU QVRTX01BVENIX0ZVTEwpCisJCQlzICs9IG12aGlzdC0+YnVja2V0c1tpXS0+ bnR1cGxlczsKKwkJZWxzZSBpZiAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01B VENIX1BBUlRJQUwpCisJCQlzICs9IDAuNSAqIG12aGlzdC0+YnVja2V0c1tp XS0+bnR1cGxlczsKKwl9CisKKwkvKiByZWxlYXNlIHRoZSBhbGxvY2F0ZWQg Yml0bWFwIGFuZCBkZXNlcmlhbGl6ZWQgaGlzdG9ncmFtICovCisJcGZyZWUo bWF0Y2hlcyk7CisJcGZyZWUobXZoaXN0KTsKKworCXJldHVybiBzICogdTsK K30KKworLyoKKyAqIEV2YWx1YXRlIGNsYXVzZXMgdXNpbmcgdGhlIGhpc3Rv Z3JhbSwgYW5kIHVwZGF0ZSB0aGUgbWF0Y2ggYml0bWFwLgorICoKKyAqIFRo ZSBiaXRtYXAgbWF5IGJlIGFscmVhZHkgcGFydGlhbGx5IHNldCwgc28gdGhp cyBpcyByZWFsbHkgYSB3YXkgdG8KKyAqIGNvbWJpbmUgcmVzdWx0cyBvZiBz ZXZlcmFsIGNsYXVzZSBsaXN0cyAtIGVpdGhlciB3aGVuIGNvbXB1dGluZwor ICogY29uZGl0aW9uYWwgcHJvYmFiaWxpdHkgUChBfEIpIG9yIGEgY29tYmlu YXRpb24gb2YgQU5EL09SIGNsYXVzZXMuCisgKgorICogTm90ZTogVGhpcyBp cyBub3QgYSBzaW1wbGUgYml0bWFwIGluIHRoZSBzZW5zZSB0aGF0IHRoZXJl IGFyZSBtb3JlCisgKiAgICAgICB0aGFuIHR3byBwb3NzaWJsZSB2YWx1ZXMg Zm9yIGVhY2ggaXRlbSAtIG5vIG1hdGNoLCBwYXJ0aWFsCisgKiAgICAgICBt YXRjaCBhbmQgZnVsbCBtYXRjaC4gU28gd2UgbmVlZCAyIGJpdHMgcGVyIGl0 ZW0uCisgKgorICogVE9ETyBUaGlzIHdvcmtzIHdpdGggJ2JpdG1hcCcgd2hl cmUgZWFjaCBpdGVtIGlzIHJlcHJlc2VudGVkIGFzIGEKKyAqICAgICAgY2hh ciwgd2hpY2ggaXMgc2xpZ2h0bHkgd2FzdGVmdWwuIEluc3RlYWQsIHdlIGNv dWxkIHVzZSBhIGJpdG1hcAorICogICAgICB3aXRoIDIgYml0cyBwZXIgaXRl bSwgcmVkdWNpbmcgdGhlIHNpemUgdG8gfjEvNC4gQnkgdXNpbmcgdmFsdWVz CisgKiAgICAgIDAsIDEgYW5kIDMgKGluc3RlYWQgb2YgMCwgMSBhbmQgMiks IHRoZSBvcGVyYXRpb25zIChtZXJnaW5nIGV0Yy4pCisgKiAgICAgIG1pZ2h0 IGJlIHBlcmZvcm1lZCBqdXN0IGxpa2UgZm9yIHNpbXBsZSBiaXRtYXAgYnkg dXNpbmcgJiBhbmQgfCwKKyAqICAgICAgd2hpY2ggbWlnaHQgYmUgZmFzdGVy IHRoYW4gbWluL21heC4KKyAqLworc3RhdGljIGludAordXBkYXRlX21hdGNo X2JpdG1hcF9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNs YXVzZXMsCisJCQkJCQkJICBpbnQydmVjdG9yICpzdGFrZXlzLAorCQkJCQkJ CSAgTVZTZXJpYWxpemVkSGlzdG9ncmFtIG12aGlzdCwKKwkJCQkJCQkgIGlu dCBubWF0Y2hlcywgY2hhciAqIG1hdGNoZXMsCisJCQkJCQkJICBib29sIGlz X29yKQoreworCWludCBpOworCUxpc3RDZWxsICogbDsKKworCS8qCisJICog VXNlZCBmb3IgY2FjaGluZyBmdW5jdGlvbiBjYWxscywgb25seSBvbmNlIHBl ciBkZWR1cGxpY2F0ZWQgdmFsdWUuCisJICoKKwkgKiBXZSBrbm93IG1heSBo YXZlIHVwIHRvICgyICogbmJ1Y2tldHMpIHZhbHVlcyBwZXIgZGltZW5zaW9u LiBJdCdzCisJICogcHJvYmFibHkgb3ZlcmtpbGwsIGJ1dCBsZXQncyBhbGxv Y2F0ZSB0aGF0IG9uY2UgZm9yIGFsbCBjbGF1c2VzLAorCSAqIHRvIG1pbmlt aXplIG92ZXJoZWFkLgorCSAqCisJICogQWxzbywgd2Ugb25seSBuZWVkIHR3 byBiaXRzIHBlciB2YWx1ZSwgYnV0IHRoaXMgYWxsb2NhdGVzIGJ5dGUKKwkg KiBwZXIgdmFsdWUuIE1pZ2h0IGJlIHdvcnRoIG9wdGltaXppbmcuCisJICoK KwkgKiAweDAwIC0gbm90IHlldCBjYWxsZWQKKwkgKiAweDAxIC0gY2FsbGVk LCByZXN1bHQgaXMgJ2ZhbHNlJworCSAqIDB4MDMgLSBjYWxsZWQsIHJlc3Vs dCBpcyAndHJ1ZScKKwkgKi8KKwljaGFyICpjYWxsY2FjaGUgPSBwYWxsb2Mo bXZoaXN0LT5uYnVja2V0cyk7CisKKwlBc3NlcnQobXZoaXN0ICE9IE5VTEwp OworCUFzc2VydChtdmhpc3QtPm5idWNrZXRzID4gMCk7CisJQXNzZXJ0KG5t YXRjaGVzID49IDApOworCUFzc2VydChubWF0Y2hlcyA8PSBtdmhpc3QtPm5i dWNrZXRzKTsKKworCUFzc2VydChjbGF1c2VzICE9IE5JTCk7CisJQXNzZXJ0 KGxpc3RfbGVuZ3RoKGNsYXVzZXMpID49IDEpOworCisJLyogbG9vcCB0aHJv dWdoIHRoZSBjbGF1c2VzIGFuZCBkbyB0aGUgZXN0aW1hdGlvbiAqLworCWZv cmVhY2ggKGwsIGNsYXVzZXMpCisJeworCQlOb2RlICogY2xhdXNlID0gKE5v ZGUqKWxmaXJzdChsKTsKKworCQkvKiBpZiBpdCdzIGEgUmVzdHJpY3RJbmZv LCB0aGVuIGV4dHJhY3QgdGhlIGNsYXVzZSAqLworCQlpZiAoSXNBKGNsYXVz ZSwgUmVzdHJpY3RJbmZvKSkKKwkJCWNsYXVzZSA9IChOb2RlKikoKFJlc3Ry aWN0SW5mbyopY2xhdXNlKS0+Y2xhdXNlOworCisJCS8qIGl0J3MgZWl0aGVy IE9wQ2xhdXNlLCBvciBOdWxsVGVzdCAqLworCQlpZiAoaXNfb3BjbGF1c2Uo Y2xhdXNlKSkKKwkJeworCQkJT3BFeHByICogZXhwciA9IChPcEV4cHIqKWNs YXVzZTsKKwkJCWJvb2wJCXZhcm9ubGVmdCA9IHRydWU7CisJCQlib29sCQlv azsKKworCQkJRm1nckluZm8Jb3Bwcm9jOwkJCS8qIG9wZXJhdG9yICovCisJ CQlmbWdyX2luZm8oZ2V0X29wY29kZShleHByLT5vcG5vKSwgJm9wcHJvYyk7 CisKKwkJCS8qIHJlc2V0IHRoZSBjYWNoZSAocGVyIGNsYXVzZSkgKi8KKwkJ CW1lbXNldChjYWxsY2FjaGUsIDAsIG12aGlzdC0+bmJ1Y2tldHMpOworCisJ CQlvayA9IChOdW1SZWxpZHMoY2xhdXNlKSA9PSAxKSAmJgorCQkJCSAoaXNf cHNldWRvX2NvbnN0YW50X2NsYXVzZShsc2Vjb25kKGV4cHItPmFyZ3MpKSB8 fAorCQkJCSAodmFyb25sZWZ0ID0gZmFsc2UsCisJCQkJICBpc19wc2V1ZG9f Y29uc3RhbnRfY2xhdXNlKGxpbml0aWFsKGV4cHItPmFyZ3MpKSkpOworCisJ CQlpZiAob2spCisJCQl7CisJCQkJRm1nckluZm8JbHRwcm9jOworCQkJCVJl Z1Byb2NlZHVyZQlvcHJyZXN0ID0gZ2V0X29wcnJlc3QoZXhwci0+b3Bubyk7 CisKKwkJCQlWYXIgKiB2YXIgPSAodmFyb25sZWZ0KSA/IGxpbml0aWFsKGV4 cHItPmFyZ3MpIDogbHNlY29uZChleHByLT5hcmdzKTsKKwkJCQlDb25zdCAq IGNzdCA9ICh2YXJvbmxlZnQpID8gbHNlY29uZChleHByLT5hcmdzKSA6IGxp bml0aWFsKGV4cHItPmFyZ3MpOworCQkJCWJvb2wgaXNndCA9ICghIHZhcm9u bGVmdCk7CisKKwkJCQkvKgorCQkJCSAqIFRPRE8gRmV0Y2ggb25seSB3aGVu IHJlYWxseSBuZWVkZWQgKHByb2JhYmx5IGZvciBlcXVhbGl0eSBvbmx5KQor CQkJCSAqCisJCQkJICogVE9ETyBUZWNobmljYWxseSBlaXRoZXIgbHQvZ3Qg aXMgc3VmZmljaWVudC4KKwkJCQkgKgorCQkJCSAqIEZJWE1FIFRoZSBjb2Rl IGluIGFuYWx5emUuYyBjcmVhdGVzIGhpc3RvZ3JhbXMgb25seSBmb3IgdHlw ZXMKKwkJCQkgKiAgICAgICB3aXRoIGVub3VnaCBvcmRlcmluZyAoYnkgY2Fs bGluZyBnZXRfc29ydF9ncm91cF9vcGVyYXRvcnMpLgorCQkJCSAqICAgICAg IElzIHRoaXMgdGhlIHNhbWUgYXNzdW1wdGlvbiwgaS5lLiBhcmUgd2UgY2Vy dGFpbiB0aGF0IHdlCisJCQkJICogICAgICAgZ2V0IHRoZSBsdHByb2MvZ3Rw cm9jIGV2ZXJ5IHRpbWUgd2UgYXNrPyBPciBhcmUgdGhlcmUgdHlwZXMKKwkJ CQkgKiAgICAgICB3aGVyZSBnZXRfc29ydF9ncm91cF9vcGVyYXRvcnMgcmV0 dXJucyBsdG9wciBhbmQgaGVyZSB3ZQorCQkJCSAqICAgICAgIGdldCBub3Ro aW5nPworCQkJCSAqLworCQkJCVR5cGVDYWNoZUVudHJ5ICp0eXBlY2FjaGUK KwkJCQkJPSBsb29rdXBfdHlwZV9jYWNoZSh2YXItPnZhcnR5cGUsIFRZUEVD QUNIRV9FUV9PUFIgfCBUWVBFQ0FDSEVfTFRfT1BSCisJCQkJCQkJCQkJCQkJ CQkJCSAgIHwgVFlQRUNBQ0hFX0dUX09QUik7CisKKwkJCQkvKiBsb29rdXAg ZGltZW5zaW9uIGZvciB0aGUgYXR0cmlidXRlICovCisJCQkJaW50IGlkeCA9 IG12X2dldF9pbmRleCh2YXItPnZhcmF0dG5vLCBzdGFrZXlzKTsKKworCQkJ CWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKHR5cGVjYWNoZS0+bHRfb3ByKSwgJmx0 cHJvYyk7CisKKwkJCQkvKgorCQkJCSAqIENoZWNrIHRoaXMgZm9yIGFsbCBi dWNrZXRzIHRoYXQgc3RpbGwgaGF2ZSAidHJ1ZSIgaW4gdGhlIGJpdG1hcAor CQkJCSAqCisJCQkJICogV2UgYWxyZWFkeSBrbm93IHRoZSBjbGF1c2VzIHVz ZSBzdWl0YWJsZSBvcGVyYXRvcnMgKGJlY2F1c2UgdGhhdCdzCisJCQkJICog aG93IHdlIGZpbHRlcmVkIHRoZW0pLgorCQkJCSAqLworCQkJCWZvciAoaSA9 IDA7IGkgPCBtdmhpc3QtPm5idWNrZXRzOyBpKyspCisJCQkJeworCQkJCQli b29sIHRtcDsKKwkJCQkJTVZTZXJpYWxpemVkQnVja2V0IGJ1Y2tldCA9IG12 aGlzdC0+YnVja2V0c1tpXTsKKworCQkJCQkvKiBoaXN0b2dyYW0gYm91bmRh cmllcyAqLworCQkJCQlEYXR1bSBtaW52YWwsIG1heHZhbDsKKworCQkJCQkv KiB2YWx1ZXMgZnJvbSB0aGUgY2FsbCBjYWNoZSAqLworCQkJCQljaGFyIG1p bmNhY2hlZCwgbWF4Y2FjaGVkOworCisJCQkJCS8qCisJCQkJCSAqIEZvciBB TkQtbGlzdHMsIHdlIGNhbiBhbHNvIG1hcmsgTlVMTCBidWNrZXRzIGFzICdu byBtYXRjaCcKKwkJCQkJICogKGFuZCB0aGVuIHNraXAgdGhlbSkuIEZvciBP Ui1saXN0cyB0aGlzIGlzIG5vdCBwb3NzaWJsZS4KKwkJCQkJICovCisJCQkJ CWlmICgoISBpc19vcikgJiYgYnVja2V0LT5udWxsc29ubHlbaWR4XSkKKwkJ CQkJCW1hdGNoZXNbaV0gPSBNVlNUQVRTX01BVENIX05PTkU7CisKKwkJCQkJ LyoKKwkJCQkJICogU2tpcCBidWNrZXRzIHRoYXQgd2VyZSBhbHJlYWR5IGVs aW1pbmF0ZWQgLSB0aGlzIGlzIGltcG90YW50CisJCQkJCSAqIGNvbnNpZGVy aW5nIGhvdyB3ZSB1cGRhdGUgdGhlIGluZm8gKHdlIG9ubHkgbG93ZXIgdGhl IG1hdGNoKS4KKwkJCQkJICogV2UgY2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5n IGFib3V0IHRoZSBNQVRDSF9QQVJUSUFMIGJ1Y2tldHMuCisJCQkJCSAqLwor CQkJCQlpZiAoKCEgaXNfb3IpICYmIChtYXRjaGVzW2ldID09IE1WU1RBVFNf TUFUQ0hfTk9ORSkpCisJCQkJCQljb250aW51ZTsKKwkJCQkJZWxzZSBpZiAo aXNfb3IgJiYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9GVUxMKSkK KwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8qIGxvb2t1cCB0aGUgdmFsdWVz IGFuZCBjYWNoZSBvZiBmdW5jdGlvbiBjYWxscyAqLworCQkJCQltaW52YWwg PSBtdmhpc3QtPnZhbHVlc1tpZHhdW2J1Y2tldC0+bWluW2lkeF1dOworCQkJ CQltYXh2YWwgPSBtdmhpc3QtPnZhbHVlc1tpZHhdW2J1Y2tldC0+bWF4W2lk eF1dOworCisJCQkJCW1pbmNhY2hlZCA9IGNhbGxjYWNoZVtidWNrZXQtPm1p bltpZHhdXTsKKwkJCQkJbWF4Y2FjaGVkID0gY2FsbGNhY2hlW2J1Y2tldC0+ bWF4W2lkeF1dOworCisJCQkJCS8qCisJCQkJCSAqIFRPRE8gTWF5YmUgaXQn cyBwb3NzaWJsZSB0byBhZGQgaGVyZSBhIHNpbWlsYXIgb3B0aW1pemF0aW9u CisJCQkJCSAqICAgICAgYXMgZm9yIHRoZSBNQ1YgbGlzdHM6CisJCQkJCSAq IAorCQkJCQkgKiAgICAgIChubWF0Y2hlcyA9PSAwKSAmJiBBTkQtbGlzdCA9 PiBhbGwgZWxpbWluYXRlZCAoRkFMU0UpCisJCQkJCSAqICAgICAgKG5tYXRj aGVzID09IE4pICYmIE9SLWxpc3QgID0+IGFsbCBlbGltaW5hdGVkIChUUlVF KQorCQkJCQkgKgorCQkJCQkgKiAgICAgIEJ1dCBpdCdzIG1vcmUgY29tcGxl eCBiZWNhdXNlIG9mIHRoZSBwYXJ0aWFsIG1hdGNoZXMuCisJCQkJCSAqLwor CisJCQkJCS8qCisJCQkJCSogSWYgaXQncyBub3QgYSAiPCIgb3IgIj4iIG9y ICI9IiBvcGVyYXRvciwganVzdCBpZ25vcmUgdGhlCisJCQkJCSogY2xhdXNl LiBPdGhlcndpc2Ugbm90ZSB0aGUgcmVsaWQgYW5kIGF0dG51bSBmb3IgdGhl IHZhcmlhYmxlLgorCQkJCQkqCisJCQkJCSogVE9ETyBJJ20gcmVhbGx5IHVu c3VyZSB0aGUgaGFuZGxpbmcgb2YgJ2lzZ3QnIGZsYWcgKHRoYXQgaXMsIGNs YXVzZXMKKwkJCQkJKiAgICAgIHdpdGggcmV2ZXJzZSBvcmRlciBvZiB2YXJp YWJsZS9jb25zdGFudCkgaXMgY29ycmVjdC4gSSB3b3VsZG4ndAorCQkJCQkq ICAgICAgYmUgc3VycHJpc2VkIGlmIHRoZXJlIHdhcyBzb21lIG1peHVwLiBV c2luZyB0aGUgbHQvZ3Qgb3BlcmF0b3JzCisJCQkJCSogICAgICBpbnN0ZWFk IG9mIG1lc3Npbmcgd2l0aCB0aGUgb3Bwcm9jIGNvdWxkIG1ha2UgaXQgc2lt cGxlci4KKwkJCQkJKiAgICAgIEl0IHdvdWxkIGhvd2V2ZXIgYmUgdXNpbmcg YSBkaWZmZXJlbnQgb3BlcmF0b3IgdGhhbiB0aGUgcXVlcnksCisJCQkJCSog ICAgICBhbHRob3VnaCBpdCdzIG5vdCBhbnkgc2hhZGllciB0aGFuIHVzaW5n IHRoZSBzZWxlY3Rpdml0eSBmdW5jdGlvbgorCQkJCQkqICAgICAgYXMgaXMg ZG9uZSBjdXJyZW50bHkuCisJCQkJCSoKKwkJCQkJKiBGSVhNRSBPbmNlIHRo ZSBtaW4vbWF4IHZhbHVlcyBhcmUgZGVkdXBsaWNhdGVkLCB3ZSBjYW4gZWFz aWx5IG1pbmltaXplCisJCQkJCSogICAgICAgdGhlIG51bWJlciBvZiBjYWxs cyB0byB0aGUgY29tcGFyYXRvciAoYXNzdW1pbmcgd2Uga2VlcCB0aGUKKwkJ CQkJKiAgICAgICBkZWR1cGxpY2F0ZWQgc3RydWN0dXJlKS4gU2VlIHRoZSBu b3RlIG9uIGNvbXByZXNzaW9uIGF0IE1WQnVja2V0CisJCQkJCSogICAgICAg c2VyaWFsaXplL2Rlc2VyaWFsaXplIG1ldGhvZHMuCisJCQkJCSovCisJCQkJ CXN3aXRjaCAob3BycmVzdCkKKwkJCQkJeworCQkJCQkJY2FzZSBGX1NDQUxB UkxUU0VMOgkvKiBjb2x1bW4gPCBjb25zdGFudCAqLworCisJCQkJCQkJaWYg KCEgaXNndCkJLyogKHZhciA8IGNvbnN0KSAqLworCQkJCQkJCXsKKwkJCQkJ CQkJLyoKKwkJCQkJCQkJICogRmlyc3QgY2hlY2sgd2hldGhlciB0aGUgY29u c3RhbnQgaXMgYmVsb3cgdGhlIGxvd2VyIGJvdW5kYXJ5IChpbiB0aGF0CisJ CQkJCQkJCSAqIGNhc2Ugd2UgY2FuIHNraXAgdGhlIGJ1Y2tldCwgYmVjYXVz ZSB0aGVyZSdzIG5vIG92ZXJsYXApLgorCQkJCQkJCQkgKi8KKwkJCQkJCQkJ aWYgKCEgbWluY2FjaGVkKQorCQkJCQkJCQl7CisJCQkJCQkJCQl0bXAgPSBE YXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJm9wcHJvYywKKwkJCQkJ CQkJCQkJCQkJCQkJCSBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJ CQkJCQkJCQkJCQkgY3N0LT5jb25zdHZhbHVlLAorCQkJCQkJCQkJCQkJCQkJ CQkJIG1pbnZhbCkpOworCisJCQkJCQkJCQkvKgorCQkJCQkJCQkJICogVXBk YXRlIHRoZSBjYWNoZSwgYnV0IHdpdGggdGhlIGludmVyc2UgdmFsdWUsIGFz IHdlIGtlZXAgdGhlCisJCQkJCQkJCQkgKiBjYWNoZSBmb3IgY2FsbHMgd2l0 aCAobWludmFsLCBjb25zdHZhbHVlKS4KKwkJCQkJCQkJCSAqLworCQkJCQkJ CQkJY2FsbGNhY2hlW2J1Y2tldC0+bWluW2lkeF1dID0gKHRtcCkgPyAweDAx IDogMHgwMzsKKwkJCQkJCQkJfQorCQkJCQkJCQllbHNlCisJCQkJCQkJCQl0 bXAgPSAhKG1pbmNhY2hlZCAmIDB4MDIpOwkvKiBnZXQgY2FsbCByZXN1bHQg ZnJvbSB0aGUgY2FjaGUgKGludmVyc2UpICovCisKKwkJCQkJCQkJaWYgKHRt cCkKKwkJCQkJCQkJeworCQkJCQkJCQkJLyogbm8gbWF0Y2ggKi8KKwkJCQkJ CQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgTVZTVEFUU19NQVRDSF9O T05FLCBpc19vcik7CisJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQkJfQor CisJCQkJCQkJCS8qCisJCQkJCQkJCSAqIE5vdyBjaGVjayB3aGV0aGVyIHRo ZSB1cHBlciBib3VuZGFyeSBpcyBiZWxvdyB0aGUgY29uc3RhbnQgKGluIHRo YXQKKwkJCQkJCQkJICogY2FzZSBpdCdzIGEgcGFydGlhbCBtYXRjaCkuCisJ CQkJCQkJCSAqLworCQkJCQkJCQlpZiAoISBtYXhjYWNoZWQpCisJCQkJCQkJ CXsKKwkJCQkJCQkJCXRtcCA9IERhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwy Q29sbCgmb3Bwcm9jLAorCQkJCQkJCQkJCQkJCQkJCQkJIERFRkFVTFRfQ09M TEFUSU9OX09JRCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBjc3QtPmNvbnN0dmFs dWUsCisJCQkJCQkJCQkJCQkJCQkJCQkgbWF4dmFsKSk7CisKKwkJCQkJCQkJ CS8qCisJCQkJCQkJCQkgKiBVcGRhdGUgdGhlIGNhY2hlLCBidXQgd2l0aCB0 aGUgaW52ZXJzZSB2YWx1ZSwgYXMgd2Uga2VlcCB0aGUKKwkJCQkJCQkJCSAq IGNhY2hlIGZvciBjYWxscyB3aXRoIChtaW52YWwsIGNvbnN0dmFsdWUpLgor CQkJCQkJCQkJICovCisJCQkJCQkJCQljYWxsY2FjaGVbYnVja2V0LT5tYXhb aWR4XV0gPSAodG1wKSA/IDB4MDEgOiAweDAzOworCQkJCQkJCQl9CisJCQkJ CQkJCWVsc2UKKwkJCQkJCQkJCXRtcCA9ICEobWF4Y2FjaGVkICYgMHgwMik7 CS8qIGV4dHJhY3QgdGhlIHJlc3VsdCAocmV2ZXJzZSkgKi8KKworCQkJCQkJ CQlpZiAodG1wKQkvKiBwYXJ0aWFsIG1hdGNoICovCisJCQkJCQkJCQlVUERB VEVfUkVTVUxUKG1hdGNoZXNbaV0sIE1WU1RBVFNfTUFUQ0hfUEFSVElBTCwg aXNfb3IpOworCisJCQkJCQkJfQorCQkJCQkJCWVsc2UJLyogKGNvbnN0IDwg dmFyKSAqLworCQkJCQkJCXsKKwkJCQkJCQkJLyoKKwkJCQkJCQkJICogRmly c3QgY2hlY2sgd2hldGhlciB0aGUgY29uc3RhbnQgaXMgYWJvdmUgdGhlIHVw cGVyIGJvdW5kYXJ5IChpbiB0aGF0CisJCQkJCQkJCSAqIGNhc2Ugd2UgY2Fu IHNraXAgdGhlIGJ1Y2tldCwgYmVjYXVzZSB0aGVyZSdzIG5vIG92ZXJsYXAp LgorCQkJCQkJCQkgKi8KKwkJCQkJCQkJaWYgKCEgbWF4Y2FjaGVkKQorCQkJ CQkJCQl7CisJCQkJCQkJCQl0bXAgPSBEYXR1bUdldEJvb2woRnVuY3Rpb25D YWxsMkNvbGwoJm9wcHJvYywKKwkJCQkJCQkJCQkJCQkJCQkJCSBERUZBVUxU X0NPTExBVElPTl9PSUQsCisJCQkJCQkJCQkJCQkJCQkJCQkgbWF4dmFsLAor CQkJCQkJCQkJCQkJCQkJCQkJIGNzdC0+Y29uc3R2YWx1ZSkpOworCisJCQkJ CQkJCQkvKiBVcGRhdGUgdGhlIGNhY2hlLiAqLworCQkJCQkJCQkJY2FsbGNh Y2hlW2J1Y2tldC0+bWF4W2lkeF1dID0gKHRtcCkgPyAweDAzIDogMHgwMTsK KwkJCQkJCQkJfQorCQkJCQkJCQllbHNlCisJCQkJCQkJCQl0bXAgPSAobWF4 Y2FjaGVkICYgMHgwMik7CS8qIGV4dHJhY3QgdGhlIHJlc3VsdCAqLworCisJ CQkJCQkJCWlmICh0bXApCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8qIG5vIG1h dGNoICovCisJCQkJCQkJCQlVUERBVEVfUkVTVUxUKG1hdGNoZXNbaV0sIE1W U1RBVFNfTUFUQ0hfTk9ORSwgaXNfb3IpOworCQkJCQkJCQkJY29udGludWU7 CisJCQkJCQkJCX0KKworCQkJCQkJCQkvKgorCQkJCQkJCQkgKiBOb3cgY2hl Y2sgd2hldGhlciB0aGUgbG93ZXIgYm91bmRhcnkgaXMgYmVsb3cgdGhlIGNv bnN0YW50IChpbiB0aGF0CisJCQkJCQkJCSAqIGNhc2UgaXQncyBhIHBhcnRp YWwgbWF0Y2gpLgorCQkJCQkJCQkgKi8KKwkJCQkJCQkJaWYgKCEgbWluY2Fj aGVkKQorCQkJCQkJCQl7CisJCQkJCQkJCQl0bXAgPSBEYXR1bUdldEJvb2wo RnVuY3Rpb25DYWxsMkNvbGwoJm9wcHJvYywKKwkJCQkJCQkJCQkJCQkJCQkJ CSBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJCQkJCQkJCQkJCQkg bWludmFsLAorCQkJCQkJCQkJCQkJCQkJCQkJIGNzdC0+Y29uc3R2YWx1ZSkp OworCisJCQkJCQkJCQkvKiBVcGRhdGUgdGhlIGNhY2hlLiAqLworCQkJCQkJ CQkJY2FsbGNhY2hlW2J1Y2tldC0+bWluW2lkeF1dID0gKHRtcCkgPyAweDAz IDogMHgwMTsKKwkJCQkJCQkJfQorCQkJCQkJCQllbHNlCisJCQkJCQkJCQl0 bXAgPSAobWluY2FjaGVkICYgMHgwMik7CS8qIGV4dHJhY3QgdGhlIHJlc3Vs dCAqLworCisJCQkJCQkJCWlmICh0bXApCS8qIHBhcnRpYWwgbWF0Y2ggKi8K KwkJCQkJCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgTVZTVEFUU19N QVRDSF9QQVJUSUFMLCBpc19vcik7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFr OworCisJCQkJCQljYXNlIEZfU0NBTEFSR1RTRUw6CS8qIGNvbHVtbiA+IGNv bnN0YW50ICovCisKKwkJCQkJCQlpZiAoISBpc2d0KQkvKiAodmFyID4gY29u c3QpICovCisJCQkJCQkJeworCQkJCQkJCQkvKgorCQkJCQkJCQkgKiBGaXJz dCBjaGVjayB3aGV0aGVyIHRoZSBjb25zdGFudCBpcyBhYm92ZSB0aGUgdXBw ZXIgYm91bmRhcnkgKGluIHRoYXQKKwkJCQkJCQkJICogY2FzZSB3ZSBjYW4g c2tpcCB0aGUgYnVja2V0LCBiZWNhdXNlIHRoZXJlJ3Mgbm8gb3ZlcmxhcCku CisJCQkJCQkJCSAqLworCQkJCQkJCQlpZiAoISBtYXhjYWNoZWQpCisJCQkJ CQkJCXsKKwkJCQkJCQkJCXRtcCA9IERhdHVtR2V0Qm9vbChGdW5jdGlvbkNh bGwyQ29sbCgmb3Bwcm9jLAorCQkJCQkJCQkJCQkJCQkJCQkJIERFRkFVTFRf Q09MTEFUSU9OX09JRCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBjc3QtPmNvbnN0 dmFsdWUsCisJCQkJCQkJCQkJCQkJCQkJCQkgbWF4dmFsKSk7CisKKwkJCQkJ CQkJCS8qCisJCQkJCQkJCQkgKiBVcGRhdGUgdGhlIGNhY2hlLCBidXQgd2l0 aCB0aGUgaW52ZXJzZSB2YWx1ZSwgYXMgd2Uga2VlcCB0aGUKKwkJCQkJCQkJ CSAqIGNhY2hlIGZvciBjYWxscyB3aXRoICh2YWwsIGNvbnN0dmFsdWUpLgor CQkJCQkJCQkJICovCisJCQkJCQkJCQljYWxsY2FjaGVbYnVja2V0LT5tYXhb aWR4XV0gPSAodG1wKSA/IDB4MDEgOiAweDAzOworCQkJCQkJCQl9CisJCQkJ CQkJCWVsc2UKKwkJCQkJCQkJCXRtcCA9ICEobWF4Y2FjaGVkICYgMHgwMik7 CS8qIGV4dHJhY3QgdGhlIHJlc3VsdCAqLworCisJCQkJCQkJCWlmICh0bXAp CisJCQkJCQkJCXsKKwkJCQkJCQkJCS8qIG5vIG1hdGNoICovCisJCQkJCQkJ CQlVUERBVEVfUkVTVUxUKG1hdGNoZXNbaV0sIE1WU1RBVFNfTUFUQ0hfTk9O RSwgaXNfb3IpOworCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCX0KKwor CQkJCQkJCQkvKgorCQkJCQkJCQkgKiBOb3cgY2hlY2sgd2hldGhlciB0aGUg bG93ZXIgYm91bmRhcnkgaXMgYmVsb3cgdGhlIGNvbnN0YW50IChpbiB0aGF0 CisJCQkJCQkJCSAqIGNhc2UgaXQncyBhIHBhcnRpYWwgbWF0Y2gpLgorCQkJ CQkJCQkgKi8KKwkJCQkJCQkJaWYgKCEgbWluY2FjaGVkKQorCQkJCQkJCQl7 CisJCQkJCQkJCQl0bXAgPSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNv bGwoJm9wcHJvYywKKwkJCQkJCQkJCQkJCQkJCQkJCSBERUZBVUxUX0NPTExB VElPTl9PSUQsCisJCQkJCQkJCQkJCQkJCQkJCQkgY3N0LT5jb25zdHZhbHVl LAorCQkJCQkJCQkJCQkJCQkJCQkJIG1pbnZhbCkpOworCisJCQkJCQkJCQkv KgorCQkJCQkJCQkJICogVXBkYXRlIHRoZSBjYWNoZSwgYnV0IHdpdGggdGhl IGludmVyc2UgdmFsdWUsIGFzIHdlIGtlZXAgdGhlCisJCQkJCQkJCQkgKiBj YWNoZSBmb3IgY2FsbHMgd2l0aCAodmFsLCBjb25zdHZhbHVlKS4KKwkJCQkJ CQkJCSAqLworCQkJCQkJCQkJY2FsbGNhY2hlW2J1Y2tldC0+bWluW2lkeF1d ID0gKHRtcCkgPyAweDAxIDogMHgwMzsKKwkJCQkJCQkJfQorCQkJCQkJCQll bHNlCisJCQkJCQkJCQl0bXAgPSAhKG1pbmNhY2hlZCAmIDB4MDIpOwkvKiBl eHRyYWN0IHRoZSByZXN1bHQgKi8KKworCQkJCQkJCQlpZiAodG1wKQorCQkJ CQkJCQkJLyogcGFydGlhbCBtYXRjaCAqLworCQkJCQkJCQkJVVBEQVRFX1JF U1VMVChtYXRjaGVzW2ldLCBNVlNUQVRTX01BVENIX1BBUlRJQUwsIGlzX29y KTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSAvKiAoY29uc3QgPiB2YXIpICov CisJCQkJCQkJeworCQkJCQkJCQkvKgorCQkJCQkJCQkgKiBGaXJzdCBjaGVj ayB3aGV0aGVyIHRoZSBjb25zdGFudCBpcyBiZWxvdyB0aGUgbG93ZXIgYm91 bmRhcnkgKGluCisJCQkJCQkJCSAqIHRoYXQgY2FzZSB3ZSBjYW4gc2tpcCB0 aGUgYnVja2V0LCBiZWNhdXNlIHRoZXJlJ3Mgbm8gb3ZlcmxhcCkuCisJCQkJ CQkJCSAqLworCQkJCQkJCQlpZiAoISBtaW5jYWNoZWQpCisJCQkJCQkJCXsK KwkJCQkJCQkJCXRtcCA9IERhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29s bCgmb3Bwcm9jLAorCQkJCQkJCQkJCQkJCQkJCQkJIERFRkFVTFRfQ09MTEFU SU9OX09JRCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBtaW52YWwsCisJCQkJCQkJ CQkJCQkJCQkJCQkgY3N0LT5jb25zdHZhbHVlKSk7CisKKwkJCQkJCQkJCS8q IFVwZGF0ZSB0aGUgY2FjaGUuICovCisJCQkJCQkJCQljYWxsY2FjaGVbYnVj a2V0LT5taW5baWR4XV0gPSAodG1wKSA/IDB4MDMgOiAweDAxOworCQkJCQkJ CQl9CisJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCXRtcCA9IChtaW5jYWNoZWQg JiAweDAyKTsJLyogZXh0cmFjdCB0aGUgcmVzdWx0ICovCisKKwkJCQkJCQkJ aWYgKHRtcCkKKwkJCQkJCQkJeworCQkJCQkJCQkJLyogbm8gbWF0Y2ggKi8K KwkJCQkJCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgTVZTVEFUU19N QVRDSF9OT05FLCBpc19vcik7CisJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJ CQkJfQorCisJCQkJCQkJCS8qCisJCQkJCQkJCSAqIE5vdyBjaGVjayB3aGV0 aGVyIHRoZSB1cHBlciBib3VuZGFyeSBpcyBiZWxvdyB0aGUgY29uc3RhbnQg KGluIHRoYXQKKwkJCQkJCQkJICogY2FzZSBpdCdzIGEgcGFydGlhbCBtYXRj aCkuCisJCQkJCQkJCSAqLworCQkJCQkJCQlpZiAoISBtYXhjYWNoZWQpCisJ CQkJCQkJCXsKKwkJCQkJCQkJCXRtcCA9IERhdHVtR2V0Qm9vbChGdW5jdGlv bkNhbGwyQ29sbCgmb3Bwcm9jLAorCQkJCQkJCQkJCQkJCQkJCQkJIERFRkFV TFRfQ09MTEFUSU9OX09JRCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBtYXh2YWws CisJCQkJCQkJCQkJCQkJCQkJCQkgY3N0LT5jb25zdHZhbHVlKSk7CisKKwkJ CQkJCQkJCS8qIFVwZGF0ZSB0aGUgY2FjaGUuICovCisJCQkJCQkJCQljYWxs Y2FjaGVbYnVja2V0LT5tYXhbaWR4XV0gPSAodG1wKSA/IDB4MDMgOiAweDAx OworCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCXRtcCA9ICht YXhjYWNoZWQgJiAweDAyKTsJLyogZXh0cmFjdCB0aGUgcmVzdWx0ICovCisK KwkJCQkJCQkJaWYgKHRtcCkKKwkJCQkJCQkJCS8qIHBhcnRpYWwgbWF0Y2gg Ki8KKwkJCQkJCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgTVZTVEFU U19NQVRDSF9QQVJUSUFMLCBpc19vcik7CisJCQkJCQkJfQorCQkJCQkJCWJy ZWFrOworCisJCQkJCQljYXNlIEZfRVFTRUw6CisKKwkJCQkJCQkvKgorCQkJ CQkJCSAqIFdlIG9ubHkgY2hlY2sgd2hldGhlciB0aGUgdmFsdWUgaXMgd2l0 aGluIHRoZSBidWNrZXQsIHVzaW5nIHRoZSBsdC9ndAorCQkJCQkJCSAqIG9w ZXJhdG9ycyBmZXRjaGVkIGZyb20gdHlwZSBjYWNoZS4KKwkJCQkJCQkgKgor CQkJCQkJCSAqIFRPRE8gV2UnbGwgdXNlIHRoZSBkZWZhdWx0IDUwJSBlc3Rp bWF0ZSwgYnV0IHRoYXQncyBwcm9iYWJseSB3YXkgb2ZmCisJCQkJCQkJICoJ CWlmIHRoZXJlIGFyZSBtdWx0aXBsZSBkaXN0aW5jdCB2YWx1ZXMuIENvbnNp ZGVyIHR3ZWFraW5nIHRoaXMgYQorCQkJCQkJCSAqCQlzb21laG93LCBlLmcu IHVzaW5nIG9ubHkgYSBwYXJ0IGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8g dGhlCisJCQkJCQkJICoJCWVzdGltYXRlZCBudW1iZXIgb2YgZGlzdGluY3Qg dmFsdWVzIGluIHRoZSBidWNrZXQuCisJCQkJCQkJICoKKwkJCQkJCQkgKiBU T0RPIFRoaXMgZG9lcyBub3QgaGFuZGxlIGluY2x1c2lvbiBmbGFncyBhdCB0 aGUgbW9tZW50LCB0aHVzIGNvdW50aW5nCisJCQkJCQkJICoJCXNvbWUgYnVj a2V0cyB0d2ljZSAod2hlbiBoaXR0aW5nIHRoZSBib3VuZGFyeSkuCisJCQkJ CQkJICoKKwkJCQkJCQkgKiBUT0RPIE9wdGltaXphdGlvbiBpcyB0aGF0IGlm IG1heFtpXSA9PSBtaW5baV0sIGl0J3MgZWZmZWN0aXZlbHkgYSBNQ1YKKwkJ CQkJCQkgKgkJaXRlbSBhbmQgd2UgY2FuIGNvdW50IHRoZSB3aG9sZSBidWNr ZXQgYXMgYSBjb21wbGV0ZSBtYXRjaCAodGh1cworCQkJCQkJCSAqCQl1c2lu ZyAxMDAlIGJ1Y2tldCBzZWxlY3Rpdml0eSBhbmQgbm90IGp1c3QgNTAlKS4K KwkJCQkJCQkgKgorCQkJCQkJCSAqIFRPRE8gVGVjaG5pY2FsbHkgc29tZSBi dWNrZXRzIG1heSAiZGVnZW5lcmF0ZSIgaW50byBzaW5nbGUtdmFsdWUKKwkJ CQkJCQkgKgkJYnVja2V0cyAobm90IG5lY2Vzc2FyaWx5IGZvciBhbGwgdGhl IGRpbWVuc2lvbnMpIC0gbWF5YmUgdGhpcworCQkJCQkJCSAqCQlpcyBiZXR0 ZXIgdGhhbiBrZWVwaW5nIGEgc2VwYXJhdGUgTUNWIGxpc3QgKG11bHRpLWRp bWVuc2lvbmFsKS4KKwkJCQkJCQkgKgkJVXBkYXRlOiBBY3R1YWxseSwgdGhh dCdzIHVubGlrZWx5IHRvIGJlIGJldHRlciB0aGFuIGEgc2VwYXJhdGUKKwkJ CQkJCQkgKgkJTUNWIGxpc3QgZm9yIHR3byByZWFzb25zIC0gZmlyc3QsIGl0 IHJlcXVpcmVzIH4yeCB0aGUgc3BhY2UKKwkJCQkJCQkgKgkJKGJlY2F1c2Ug b2Ygc3RvcmluZyBsb3dlci91cHBlciBib3VuZGFyaWVzKSBhbmQgc2Vjb25k IGJlY2F1c2UKKwkJCQkJCQkgKgkJdGhlIGJ1Y2tldHMgYXJlIHJhbmdlcyAt IGRlcGVuZGluZyBvbiB0aGUgcGFydGl0aW9uaW5nIGFsZ29yaXRobQorCQkJ CQkJCSAqCQlpdCBtYXkgbm90IGV2ZW4gZGVnZW5lcmF0ZSBpbnRvIChtaW49 bWF4KSBidWNrZXQuIEZvciBleGFtcGxlIHRoZQorCQkJCQkJCSAqCQl0aGUg Y3VycmVudCBwYXJ0aXRpb25pbmcgYWxnb3JpdGhtIG5ldmVyIGRvZXMgdGhh dC4KKwkJCQkJCQkgKi8KKwkJCQkJCQlpZiAoISBtaW5jYWNoZWQpCisJCQkJ CQkJeworCQkJCQkJCQl0bXAgPSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxs MkNvbGwoJmx0cHJvYywKKwkJCQkJCQkJCQkJCQkJCQkJIERFRkFVTFRfQ09M TEFUSU9OX09JRCwKKwkJCQkJCQkJCQkJCQkJCQkJIGNzdC0+Y29uc3R2YWx1 ZSwKKwkJCQkJCQkJCQkJCQkJCQkJIG1pbnZhbCkpOworCisJCQkJCQkJCS8q IFVwZGF0ZSB0aGUgY2FjaGUuICovCisJCQkJCQkJCWNhbGxjYWNoZVtidWNr ZXQtPm1pbltpZHhdXSA9ICh0bXApID8gMHgwMyA6IDB4MDE7CisJCQkJCQkJ fQorCQkJCQkJCWVsc2UKKwkJCQkJCQkJdG1wID0gKG1pbmNhY2hlZCAmIDB4 MDIpOwkvKiBleHRyYWN0IHRoZSByZXN1bHQgKi8KKworCQkJCQkJCWlmICh0 bXApCisJCQkJCQkJeworCQkJCQkJCQkvKiBubyBtYXRjaCAqLworCQkJCQkJ CQlVUERBVEVfUkVTVUxUKG1hdGNoZXNbaV0sIE1WU1RBVFNfTUFUQ0hfTk9O RSwgaXNfb3IpOworCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQl9CisKKwkJ CQkJCQlpZiAoISBtYXhjYWNoZWQpCisJCQkJCQkJeworCQkJCQkJCQl0bXAg PSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJmx0cHJvYywKKwkJ CQkJCQkJCQkJCQkJCQkJIERFRkFVTFRfQ09MTEFUSU9OX09JRCwKKwkJCQkJ CQkJCQkJCQkJCQkJIG1heHZhbCwKKwkJCQkJCQkJCQkJCQkJCQkJIGNzdC0+ Y29uc3R2YWx1ZSkpOworCisJCQkJCQkJCS8qIFVwZGF0ZSB0aGUgY2FjaGUu ICovCisJCQkJCQkJCWNhbGxjYWNoZVtidWNrZXQtPm1heFtpZHhdXSA9ICh0 bXApID8gMHgwMyA6IDB4MDE7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJ CQkJCQkJdG1wID0gKG1heGNhY2hlZCAmIDB4MDIpOwkvKiBleHRyYWN0IHRo ZSByZXN1bHQgKi8KKworCQkJCQkJCWlmICh0bXApCisJCQkJCQkJeworCQkJ CQkJCQkvKiBubyBtYXRjaCAqLworCQkJCQkJCQlVUERBVEVfUkVTVUxUKG1h dGNoZXNbaV0sIE1WU1RBVFNfTUFUQ0hfTk9ORSwgaXNfb3IpOworCQkJCQkJ CQljb250aW51ZTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvKiBwYXJ0aWFsIG1h dGNoICovCisJCQkJCQkJVVBEQVRFX1JFU1VMVChtYXRjaGVzW2ldLCBNVlNU QVRTX01BVENIX1BBUlRJQUwsIGlzX29yKTsKKworCQkJCQkJCWJyZWFrOwor CQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKElzQShjbGF1 c2UsIE51bGxUZXN0KSkKKwkJeworCQkJTnVsbFRlc3QgKiBleHByID0gKE51 bGxUZXN0KiljbGF1c2U7CisJCQlWYXIgKiB2YXIgPSAoVmFyKikoZXhwci0+ YXJnKTsKKworCQkJLyogRklYTUUgcHJvcGVyIG1hdGNoaW5nIGF0dHJpYnV0 ZSB0byBkaW1lbnNpb24gKi8KKwkJCWludCBpZHggPSBtdl9nZXRfaW5kZXgo dmFyLT52YXJhdHRubywgc3Rha2V5cyk7CisKKwkJCS8qCisJCQkgKiBXYWxr IHRocm91Z2ggdGhlIGJ1Y2tldHMgYW5kIGV2YWx1YXRlIHRoZSBjdXJyZW50 IGNsYXVzZS4gV2UgY2FuCisJCQkgKiBza2lwIGl0ZW1zIHRoYXQgd2VyZSBh bHJlYWR5IHJ1bGVkIG91dCwgYW5kIHRlcm1pbmF0ZSBpZiB0aGVyZSBhcmUK KwkJCSAqIG5vIHJlbWFpbmluZyBidWNrZXRzIHRoYXQgbWlnaHQgcG9zc2li bHkgbWF0Y2guCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBtdmhpc3Qt Pm5idWNrZXRzOyBpKyspCisJCQl7CisJCQkJTVZTZXJpYWxpemVkQnVja2V0 IGJ1Y2tldCA9IG12aGlzdC0+YnVja2V0c1tpXTsKKworCQkJCS8qCisJCQkJ ICogU2tpcCBidWNrZXRzIHRoYXQgd2VyZSBhbHJlYWR5IGVsaW1pbmF0ZWQg LSB0aGlzIGlzIGltcG90YW50CisJCQkJICogY29uc2lkZXJpbmcgaG93IHdl IHVwZGF0ZSB0aGUgaW5mbyAod2Ugb25seSBsb3dlciB0aGUgbWF0Y2gpCisJ CQkJICovCisJCQkJaWYgKCghIGlzX29yKSAmJiAobWF0Y2hlc1tpXSA9PSBN VlNUQVRTX01BVENIX05PTkUpKQorCQkJCQljb250aW51ZTsKKwkJCQllbHNl IGlmIChpc19vciAmJiAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX0ZV TEwpKQorCQkJCQljb250aW51ZTsKKworCQkJCS8qIGlmIHRoZSBjbGF1c2Ug bWlzbWF0Y2hlcyB0aGUgTUNWIGl0ZW0sIHNldCBpdCBhcyBNQVRDSF9OT05F ICovCisJCQkJaWYgKChleHByLT5udWxsdGVzdHR5cGUgPT0gSVNfTlVMTCkK KwkJCQkJJiYgKCEgYnVja2V0LT5udWxsc29ubHlbaWR4XSkpCisJCQkJCVVQ REFURV9SRVNVTFQobWF0Y2hlc1tpXSwgTVZTVEFUU19NQVRDSF9OT05FLCBp c19vcik7CisKKwkJCQllbHNlIGlmICgoZXhwci0+bnVsbHRlc3R0eXBlID09 IElTX05PVF9OVUxMKSAmJgorCQkJCQkJIChidWNrZXQtPm51bGxzb25seVtp ZHhdKSkKKwkJCQkJVVBEQVRFX1JFU1VMVChtYXRjaGVzW2ldLCBNVlNUQVRT X01BVENIX05PTkUsIGlzX29yKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChv cl9jbGF1c2UoY2xhdXNlKSB8fCBhbmRfY2xhdXNlKGNsYXVzZSkpCisJCXsK KwkJCS8qIEFORC9PUiBjbGF1c2UsIHdpdGggYWxsIGNsYXVzZXMgY29tcGF0 aWJsZSB3aXRoIHRoZSBzZWxlY3RlZCBNViBzdGF0ICovCisKKwkJCWludAkJ CWk7CisJCQlCb29sRXhwciAgICpvcmNsYXVzZSAgPSAoKEJvb2xFeHByKilj bGF1c2UpOworCQkJTGlzdAkgICAqb3JjbGF1c2VzID0gb3JjbGF1c2UtPmFy Z3M7CisKKwkJCS8qIG1hdGNoL21pc21hdGNoIGJpdG1hcCBmb3IgZWFjaCBi dWNrZXQgKi8KKwkJCWludAlvcl9ubWF0Y2hlcyA9IDA7CisJCQljaGFyICog b3JfbWF0Y2hlcyA9IE5VTEw7CisKKwkJCUFzc2VydChvcmNsYXVzZXMgIT0g TklMKTsKKwkJCUFzc2VydChsaXN0X2xlbmd0aChvcmNsYXVzZXMpID49IDIp OworCisJCQkvKiBudW1iZXIgb2YgbWF0Y2hpbmcgYnVja2V0cyAqLworCQkJ b3Jfbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNrZXRzOworCisJCQkvKiBieSBk ZWZhdWx0IG5vbmUgb2YgdGhlIGJ1Y2tldHMgbWF0Y2hlcyB0aGUgY2xhdXNl cyAqLworCQkJb3JfbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICog b3Jfbm1hdGNoZXMpOworCisJCQlpZiAob3JfY2xhdXNlKGNsYXVzZSkpCisJ CQl7CisJCQkJLyogT1IgY2xhdXNlcyBhc3N1bWUgbm90aGluZyBtYXRjaGVz LCBpbml0aWFsbHkgKi8KKwkJCQltZW1zZXQob3JfbWF0Y2hlcywgTVZTVEFU U19NQVRDSF9OT05FLCBzaXplb2YoY2hhcikqb3Jfbm1hdGNoZXMpOworCQkJ CW9yX25tYXRjaGVzID0gMDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkv KiBBTkQgY2xhdXNlcyBhc3N1bWUgbm90aGluZyBtYXRjaGVzLCBpbml0aWFs bHkgKi8KKwkJCQltZW1zZXQob3JfbWF0Y2hlcywgTVZTVEFUU19NQVRDSF9G VUxMLCBzaXplb2YoY2hhcikqb3Jfbm1hdGNoZXMpOworCQkJfQorCisJCQkv KiBidWlsZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0aGUgT1ItY2xhdXNlcyAq LworCQkJb3Jfbm1hdGNoZXMgPSB1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3Rv Z3JhbShyb290LCBvcmNsYXVzZXMsCisJCQkJCQkJCQkJc3Rha2V5cywgbXZo aXN0LAorCQkJCQkJCQkJCW9yX25tYXRjaGVzLCBvcl9tYXRjaGVzLCBvcl9j bGF1c2UoY2xhdXNlKSk7CisKKwkJCS8qIG1lcmdlIHRoZSBiaXRtYXAgaW50 byB0aGUgZXhpc3Rpbmcgb25lKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBtdmhp c3QtPm5idWNrZXRzOyBpKyspCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUbyBB TkQtbWVyZ2UgdGhlIGJpdG1hcHMsIGEgTUlOKCkgc2VtYW50aWNzIGlzIHVz ZWQuCisJCQkJICogRm9yIE9SLW1lcmdlLCB1c2UgTUFYKCkuCisJCQkJICoK KwkJCQkgKiBGSVhNRSB0aGlzIGRvZXMgbm90IGRlY3JlYXNlIHRoZSBudW1i ZXIgb2YgbWF0Y2hlcworCQkJCSAqLworCQkJCVVQREFURV9SRVNVTFQobWF0 Y2hlc1tpXSwgb3JfbWF0Y2hlc1tpXSwgaXNfb3IpOworCQkJfQorCisJCQlw ZnJlZShvcl9tYXRjaGVzKTsKKworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJS T1IsICJ1bmtub3duIGNsYXVzZSB0eXBlOiAlZCIsIGNsYXVzZS0+dHlwZSk7 CisJfQorCisJLyogZnJlZSB0aGUgY2FsbCBjYWNoZSAqLworCXBmcmVlKGNh bGxjYWNoZSk7CisKKyNpZmRlZiBERUJVR19NVkhJU1QKKwlkZWJ1Z19oaXN0 b2dyYW1fbWF0Y2hlcyhtdmhpc3QsIG1hdGNoZXMpOworI2VuZGlmCisKKwly ZXR1cm4gbm1hdGNoZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggMGNiNDA2My4uOTYzZDI2ZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpA QCAtNDEwLDcgKzQxMCw3IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJ bmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJl bnQsCiAJCQltdnN0YXQgPSAoRm9ybV9wZ19tdl9zdGF0aXN0aWMpIEdFVFNU UlVDVChodHVwKTsKIAogCQkJLyogdW5hdmFpbGFibGUgc3RhdHMgYXJlIG5v dCBpbnRlcmVzdGluZyBmb3IgdGhlIHBsYW5uZXIgKi8KLQkJCWlmIChtdnN0 YXQtPmRlcHNfYnVpbHQgfHwgbXZzdGF0LT5tY3ZfYnVpbHQpCisJCQlpZiAo bXZzdGF0LT5kZXBzX2J1aWx0IHx8IG12c3RhdC0+bWN2X2J1aWx0IHx8IG12 c3RhdC0+aGlzdF9idWlsdCkKIAkJCXsKIAkJCQlpbmZvID0gbWFrZU5vZGUo TVZTdGF0aXN0aWNJbmZvKTsKIApAQCAtNDIwLDEwICs0MjAsMTIgQEAgZ2V0 X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlv bk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQkvKiBlbmFibGVkIHN0 YXRpc3RpY3MgKi8KIAkJCQlpbmZvLT5kZXBzX2VuYWJsZWQgPSBtdnN0YXQt PmRlcHNfZW5hYmxlZDsKIAkJCQlpbmZvLT5tY3ZfZW5hYmxlZCAgPSBtdnN0 YXQtPm1jdl9lbmFibGVkOworCQkJCWluZm8tPmhpc3RfZW5hYmxlZCA9IG12 c3RhdC0+aGlzdF9lbmFibGVkOwogCiAJCQkJLyogYnVpbHQvYXZhaWxhYmxl IHN0YXRpc3RpY3MgKi8KIAkJCQlpbmZvLT5kZXBzX2J1aWx0ID0gbXZzdGF0 LT5kZXBzX2J1aWx0OwogCQkJCWluZm8tPm1jdl9idWlsdCAgPSBtdnN0YXQt Pm1jdl9idWlsdDsKKwkJCQlpbmZvLT5oaXN0X2J1aWx0ID0gbXZzdGF0LT5o aXN0X2J1aWx0OwogCiAJCQkJLyogc3Rha2V5cyAqLwogCQkJCWFkYXR1bSA9 IFN5c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQsIGh0dXAsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmlsZQppbmRleCBmOWJmMTBjLi45 ZGJiM2I2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFr ZWZpbGUKQEAgLTEyLDYgKzEyLDYgQEAgc3ViZGlyID0gc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cwogdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KIGlu Y2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAot T0JKUyA9IGNvbW1vbi5vIGRlcGVuZGVuY2llcy5vIG1jdi5vCitPQkpTID0g Y29tbW9uLm8gZGVwZW5kZW5jaWVzLm8gaGlzdG9ncmFtLm8gbWN2Lm8KIAog aW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24u YyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKaW5kZXgg ZDFkYTcxNC4uZmZiNzZmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbXZzdGF0cy9jb21tb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9t dnN0YXRzL2NvbW1vbi5jCkBAIC0xMywxMSArMTMsMTEgQEAKICAqCiAgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLworI2luY2x1ZGUgInBv c3RncmVzLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKIAogI2luY2x1 ZGUgImNvbW1vbi5oIgogCi0jaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKLQog c3RhdGljIFZhY0F0dHJTdGF0cyAqKiBsb29rdXBfdmFyX2F0dHJfc3RhdHMo aW50MnZlY3RvciAqYXR0cnMsCiAJCQkJCQkJCQkJCSBpbnQgbmF0dHMsCiAJ CQkJCQkJCQkJCSBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwpAQCAt NTIsNyArNTIsOCBAQCBidWlsZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVyZWws IGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAJCU1WU3RhdGlzdGlj SW5mbyAqc3RhdCA9IChNVlN0YXRpc3RpY0luZm8gKilsZmlyc3QobGMpOwog CQlNVkRlcGVuZGVuY2llcwlkZXBzICA9IE5VTEw7CiAJCU1DVkxpc3QJCW1j dmxpc3QgICA9IE5VTEw7Ci0JCWludCBudW1yb3dzX2ZpbHRlcmVkICA9IDA7 CisJCU1WSGlzdG9ncmFtCWhpc3RvZ3JhbSA9IE5VTEw7CisJCWludCBudW1y b3dzX2ZpbHRlcmVkICA9IG51bXJvd3M7CiAKIAkJVmFjQXR0clN0YXRzICAq KnN0YXRzICA9IE5VTEw7CiAJCWludAkJCQludW1hdHRzICAgPSAwOwpAQCAt OTUsOCArOTYsMTIgQEAgYnVpbGRfbXZfc3RhdHMoUmVsYXRpb24gb25lcmVs LCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAogCQlpZiAoc3RhdC0+ bWN2X2VuYWJsZWQpCiAJCQltY3ZsaXN0ID0gYnVpbGRfbXZfbWN2bGlzdChu dW1yb3dzLCByb3dzLCBhdHRycywgc3RhdHMsICZudW1yb3dzX2ZpbHRlcmVk KTsKIAorCQkvKiBidWlsZCBhIG11bHRpdmFyaWF0ZSBoaXN0b2dyYW0gb24g dGhlIGNvbHVtbnMgKi8KKwkJaWYgKChudW1yb3dzX2ZpbHRlcmVkID4gMCkg JiYgKHN0YXQtPmhpc3RfZW5hYmxlZCkpCisJCQloaXN0b2dyYW0gPSBidWls ZF9tdl9oaXN0b2dyYW0obnVtcm93c19maWx0ZXJlZCwgcm93cywgYXR0cnMs IHN0YXRzLCBudW1yb3dzKTsKKwogCQkvKiBzdG9yZSB0aGUgaGlzdG9ncmFt IC8gTUNWIGxpc3QgaW4gdGhlIGNhdGFsb2cgKi8KLQkJdXBkYXRlX212X3N0 YXRzKHN0YXQtPm12b2lkLCBkZXBzLCBtY3ZsaXN0LCBhdHRycywgc3RhdHMp OworCQl1cGRhdGVfbXZfc3RhdHMoc3RhdC0+bXZvaWQsIGRlcHMsIG1jdmxp c3QsIGhpc3RvZ3JhbSwgYXR0cnMsIHN0YXRzKTsKIAl9CiB9CiAKQEAgLTE3 Niw2ICsxODEsOCBAQCBsaXN0X212X3N0YXRzKE9pZCByZWxpZCkKIAkJaW5m by0+ZGVwc19idWlsdCA9IHN0YXRzLT5kZXBzX2J1aWx0OwogCQlpbmZvLT5t Y3ZfZW5hYmxlZCA9IHN0YXRzLT5tY3ZfZW5hYmxlZDsKIAkJaW5mby0+bWN2 X2J1aWx0ID0gc3RhdHMtPm1jdl9idWlsdDsKKwkJaW5mby0+aGlzdF9lbmFi bGVkID0gc3RhdHMtPmhpc3RfZW5hYmxlZDsKKwkJaW5mby0+aGlzdF9idWls dCA9IHN0YXRzLT5oaXN0X2J1aWx0OwogCiAJCXJlc3VsdCA9IGxhcHBlbmQo cmVzdWx0LCBpbmZvKTsKIAl9CkBAIC0xOTAsNyArMTk3LDYgQEAgbGlzdF9t dl9zdGF0cyhPaWQgcmVsaWQpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAv KgogICogRmluZCBhdHRuaW1zIG9mIE1WIHN0YXRzIHVzaW5nIHRoZSBtdm9p ZC4KICAqLwpAQCAtMjM2LDkgKzI0MiwxNiBAQCBmaW5kX212X2F0dG51bXMo T2lkIG12b2lkLCBPaWQgKnJlbGlkKQogfQogCiAKKy8qCisgKiBGSVhNRSBU aGlzIGFkZHMgc3RhdGlzdGljcywgYnV0IHdlIG5lZWQgdG8gZHJvcCBzdGF0 aXN0aWNzIHdoZW4gdGhlCisgKiAgICAgICB0YWJsZSBpcyBkcm9wcGVkLiBO b3Qgc3VyZSB3aGF0IHRvIGRvIHdoZW4gYSBjb2x1bW4gaXMgZHJvcHBlZC4K KyAqICAgICAgIEVpdGhlciB3ZSBjYW4gKGEpIHJlbW92ZSBhbGwgc3RhdHMg b24gdGhhdCBjb2x1bW4sIChiKSByZW1vdmUKKyAqICAgICAgIHRoZSBjb2x1 bW4gZnJvbSBkZWZpbmVkIHN0YXRzIGFuZCBmb3JjZSByZWJ1aWxkLCAoYykg cmVtb3ZlIHRoZQorICogICAgICAgY29sdW1uIG9uIG5leHQgQU5BTFlaRS4g T3IgbWF5YmUgc29tZXRoaW5nIGVsc2U/CisgKi8KIHZvaWQKIHVwZGF0ZV9t dl9zdGF0cyhPaWQgbXZvaWQsCi0JCQkJTVZEZXBlbmRlbmNpZXMgZGVwZW5k ZW5jaWVzLCBNQ1ZMaXN0IG1jdmxpc3QsCisJCQkJTVZEZXBlbmRlbmNpZXMg ZGVwZW5kZW5jaWVzLCBNQ1ZMaXN0IG1jdmxpc3QsIE1WSGlzdG9ncmFtIGhp c3RvZ3JhbSwKIAkJCQlpbnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRz ICoqc3RhdHMpCiB7CiAJSGVhcFR1cGxlCXN0dXAsCkBAIC0yNzEsMjIgKzI4 NCwzNCBAQCB1cGRhdGVfbXZfc3RhdHMoT2lkIG12b2lkLAogCQl2YWx1ZXNb QW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2ICAtIDFdID0gUG9pbnRlckdl dERhdHVtKGRhdGEpOwogCX0KIAorCWlmIChoaXN0b2dyYW0gIT0gTlVMTCkK Kwl7CisJCWJ5dGVhICogZGF0YSA9IHNlcmlhbGl6ZV9tdl9oaXN0b2dyYW0o aGlzdG9ncmFtLCBhdHRycywgc3RhdHMpOworCQludWxsc1tBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFoaXN0LTFdICAgID0gKGRhdGEgPT0gTlVMTCk7CisJ CXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFoaXN0IC0gMV0KKwkJ CT0gUG9pbnRlckdldERhdHVtKGRhdGEpOworCX0KKwogCS8qIGFsd2F5cyBy ZXBsYWNlIHRoZSB2YWx1ZSAoZWl0aGVyIGJ5IGJ5dGVhIG9yIE5VTEwpICov CiAJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhZGVwcyAtMV0g PSB0cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YW1j diAtMV0gPSB0cnVlOworCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGlj X3N0YWhpc3QtMV0gPSB0cnVlOwogCiAJLyogYWx3YXlzIGNoYW5nZSB0aGUg YXZhaWxhYmlsaXR5IGZsYWdzICovCiAJbnVsbHNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfZGVwc19idWlsdCAtMV0gPSBmYWxzZTsKIAludWxsc1tBbnVtX3Bn X212X3N0YXRpc3RpY19tY3ZfYnVpbHQgLTFdID0gZmFsc2U7CisJbnVsbHNb QW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9idWlsdC0xXSA9IGZhbHNlOwog CW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMtMV0gICAgID0g ZmFsc2U7CiAKIAkvKiB1c2UgdGhlIG5ldyBhdHRudW1zLCBpbiBjYXNlIHdl IHJlbW92ZWQgc29tZSBkcm9wcGVkIG9uZXMgKi8KIAlyZXBsYWNlc1tBbnVt X3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0LTFdID0gdHJ1ZTsKIAlyZXBs YWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVpbHQgIC0xXSA9IHRy dWU7CisJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9idWls dCAtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGlj X3N0YWtleXMgLTFdICAgID0gdHJ1ZTsKIAogCXZhbHVlc1tBbnVtX3BnX212 X3N0YXRpc3RpY19kZXBzX2J1aWx0LTFdID0gQm9vbEdldERhdHVtKGRlcGVu ZGVuY2llcyAhPSBOVUxMKTsKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0 aWNfbWN2X2J1aWx0ICAtMV0gPSBCb29sR2V0RGF0dW0obWN2bGlzdCAhPSBO VUxMKTsKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9idWls dCAtMV0gPSBCb29sR2V0RGF0dW0oaGlzdG9ncmFtICE9IE5VTEwpOwogCXZh bHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzIC0xXSAgICA9IFBv aW50ZXJHZXREYXR1bShhdHRycyk7CiAKIAkvKiBJcyB0aGVyZSBhbHJlYWR5 IGEgcGdfbXZfc3RhdGlzdGljIHR1cGxlIGZvciB0aGlzIGF0dHJpYnV0ZT8g Ki8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvaGlz dG9ncmFtLmMgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2hpc3RvZ3Jh bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzcw MGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL2hpc3RvZ3JhbS5jCkBAIC0wLDAgKzEsMjMxNiBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogaGlzdG9ncmFtLmMKKyAq CSAgUE9TVEdSRVMgbXVsdGl2YXJpYXRlIGhpc3RvZ3JhbXMKKyAqCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTUsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBz cmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2hpc3RvZ3JhbS5jCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAi ZnVuY2FwaS5oIgorCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisK KyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKKy8q CisgKiBNdWx0aXZhcmlhdGUgaGlzdG9ncmFtcworICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBIaXN0b2dyYW1zIGFyZSBhIGNvbGxlY3Rp b24gb2YgYnVja2V0cywgcmVwcmVzZW50ZWQgYnkgbi1kaW1lbnNpb25hbAor ICogcmVjdGFuZ2xlcy4gRWFjaCByZWN0YW5nbGUgaXMgZGVsaW1pdGVkIGJ5 IGEgbWluL21heCB2YWx1ZSBpbiBlYWNoCisgKiBkaW1lbnNpb24sIHN0b3Jl ZCBpbiBhbiBhcnJheSwgc28gdGhhdCB0aGUgYnVja2V0IGluY2x1ZGVzIHZh bHVlcworICogZnVsZmlsbGluZyBjb25kaXRpb24KKyAqCisgKiAgICAgbWlu W2ldIDw9IHZhbHVlW2ldIDw9IG1heFtpXQorICoKKyAqIHdoZXJlICdpJyBp cyB0aGUgZGltZW5zaW9uLiBJbiAxRCB0aGlzIGNvcnJlc3BvbmRzIHRvIGEg c2ltcGxlCisgKiBpbnRlcnZhbCwgaW4gMkQgdG8gYSByZWN0YW5nbGUsIGFu ZCBpbiAzRCB0byBhIGJsb2NrLiBJZiB5b3UgY2FuCisgKiBpbWFnaW5lIHRo aXMgaW4gNEQsIGNvbmdyYXRzIQorICoKKyAqIEluIGFkZGl0aW9uIHRvIHRo ZSBib3VuYXJpZXMsIGVhY2ggYnVja2V0IHRyYWNrcyBhZGRpdGlvbmFsIGRl dGFpbHM6CisgKgorICogICAgICogZnJlcXVlbmN5IChmcmFjdGlvbiBvZiB0 dXBsZXMgaXQgbWF0Y2hlcykKKyAqICAgICAqIHdoZXRoZXIgdGhlIGJvdW5k YXJpZXMgYXJlIGluY2x1c2l2ZSBvciBleGNsdXNpdmUKKyAqICAgICAqIHdo ZXRoZXIgdGhlIGRpbWVuc2lvbiBjb250YWlucyBvbmx5IE5VTEwgdmFsdWVz CisgKiAgICAgKiBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIGluIGVhY2gg ZGltZW5zaW9uIChmb3IgYnVpbGRpbmcpCisgKgorICogYW5kIHBvc3NpYmx5 IHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAqCisgKiBXZSBkbyBl eHBlY3QgdG8gc3VwcG9ydCBtdWx0aXBsZSBoaXN0b2dyYW0gdHlwZXMsIHdp dGggZGlmZmVyZW50CisgKiBmZWF0dXJlcyBldGMuIFRoZSAndHlwZScgZmll bGQgaXMgdXNlZCB0byBpZGVudGlmeSB0aG9zZSB0eXBlcy4KKyAqIFRlY2hu aWNhbGx5IHNvbWUgaGlzdG9ncmFtIHR5cGVzIG1pZ2h0IHVzZSBjb21wbGV0 ZWx5IGRpZmZlcmVudAorICogYnVja2V0IHJlcHJlc2VudGF0aW9uLCBidXQg dGhhdCdzIG5vdCBleHBlY3RlZCBhdCB0aGUgbW9tZW50LgorICoKKyAqIEFs dGhvdWdoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGJ1aWxkcyBub24t b3ZlcmxhcHBpbmcgYnVja2V0cywKKyAqIHRoZSBjb2RlIGRvZXMgbm90IChh bmQgc2hvdWxkIG5vdCkgcmVseSBvbiB0aGUgbm9uLW92ZXJsYXBwaW5nCisg KiBuYXR1cmUgLSB0aGVyZSBhcmUgaW50ZXJlc3RpbmcgdHlwZXMgb2YgaGlz dG9ncmFtcyAvIGhpc3RvZ3JhbQorICogYnVpbGRpbmcgYWxnb3JpdGhtcyBw cm9kdWNpbmcgb3ZlcmxhcHBpbmcgYnVja2V0cy4KKyAqCisgKgorICogTlVM TCBoYW5kbGluZyAoY3JlYXRlX251bGxfYnVja2V0cykKKyAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBBbm90aGVyIHRoaW5n IHdvcnRoIG1lbnRpb25pbmcgaXMgaGFuZGxpbmcgb2YgTlVMTCB2YWx1ZXMu IEl0IHdvdWxkCisgKiBiZSBxdWl0ZSBkaWZmaWN1bHQgdG8gd29yayB3aXRo IGJ1Y2tldHMgY29udGFpbmluZyBOVUxMIGFuZCBub24tTlVMTAorICogdmFs dWVzIGZvciBhIHNpbmdsZSBkaW1lbnNpb24uIFRvIHdvcmsgYXJvdW5kIHRo aXMsIHRoZSBpbml0aWFsIHN0ZXAKKyAqIGluIGJ1aWxkaW5nIGEgaGlzdG9n cmFtIGlzIGJ1aWxkaW5nIGEgc2V0IG9mICdOVUxMLWJ1Y2tldHMnLCBpLmUu CisgKiBidWNrZXRzIHdpdGggb25lIG9yIG1vcmUgTlVMTC1vbmx5IGRpbWVu c2lvbnMuCisgKgorICogQWZ0ZXIgdGhhdCwgbm8gYnVja2V0cyBhcmUgbWl4 aW5nIE5VTEwgYW5kIG5vbi1OVUxMIHZhbHVlcyBpbiBvbmUKKyAqIGRpbWVu c2lvbiwgYW5kIHRoZSBhY3R1YWwgaGlzdG9ncmFtIGJ1aWxkaW5nIHN0YXJ0 cy4gQXMgdGhhdCBvbmx5CisgKiBzcGxpdHMgdGhlIGJ1Y2tldHMgaW50byBz bWFsbGVyIG9uZXMsIHRoZSByZXN1bHRpbmcgYnVja2V0cyBjYW4ndAorICog bWl4IE5VTEwgYW5kIG5vbi1OVUxMIHZhbHVlcyBlaXRoZXIuCisgKgorICog VGhlIG1heGltdW0gbnVtYmVyIG9mIE5VTEwtYnVja2V0cyBpcyBkZXRlcm1p bmVkIGJ5IHRoZSBudW1iZXIgb2YKKyAqIGF0dHJpYnV0ZXMgdGhlIGhpc3Rv Z3JhbSBpcyBidWlsdCBvbi4gRm9yIE4tZGltZW5zaW9uYWwgaGlzdG9ncmFt LAorICogdGhlIG1heGltdW0gbnVtYmVyIG9mIE5VTEwtYnVja2V0cyBpcyAy Xk4uIFNvIGZvciA4IGF0dHJpYnV0ZXMKKyAqICh3aGljaCBpcyB0aGUgY3Vy cmVudCB2YWx1ZSBvZiBNVlNUQVRTX01BWF9ESU1FTlNJT05TKSwgdGhlcmUg bWF5IGJlCisgKiB1cCB0byAyNTYgTlVMTC1idWNrZXRzLgorICoKKyAqIFRo b3NlIGJ1Y2tldHMgYXJlIG9ubHkgYnVpbHQgaWYgbmVlZGVkIC0gaWYgdGhl cmUgYXJlIG5vIE5VTEwgdmFsdWVzCisgKiBpbiB0aGUgZGF0YSwgbm8gc3Vj aCBidWNrZXRzIGFyZSBidWlsdC4KKyAqCisgKgorICogRXN0aW1hdGluZyBz ZWxlY3Rpdml0eQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV2l0 aCBoaXN0b2dyYW1zLCB3ZSBhbHdheXMgIm1hdGNoIiBhIHdob2xlIGJ1Y2tl dCwgbm90IGluZGl2aXR1YWwKKyAqIHJvd3MgKG9yIHZhbHVlcyksIGlycmVz cGVjdGVkbHkgb2YgdGhlIHR5cGUgb2YgY2xhdXNlLiBUaGVyZWZvcmUgd2UK KyAqIGNhbid0IHVzZSB0aGUgb3B0aW1pemF0aW9ucyBmb3IgZXF1YWxpdHkg Y2xhdXNlcywgYXMgaW4gTUNWIGxpc3RzLgorICoKKyAqIFRoZSBjdXJyZW50 IGltcGxlbWVudGF0aW9uIHVzZXMgaGlzdG9ncmFtcyB0byBlc3RpbWF0ZXMg dGhvc2UgdHlwZXMKKyAqIG9mIGNsYXVzZXMgKHRoaW5rIG9mIFdIRVJFIGNv bmRpdGlvbnMpOgorICoKKyAqICAoYSkgZXF1YWxpdHkgY2xhdXNlcyAgICBX SEVSRSAoYSA9IDEpIEFORCAoYiA9IDIpCisgKiAgKGIpIGluZXF1YWxpdHkg Y2xhdXNlcyAgV0hFUkUgKGEgPCAxKSBBTkQgKGIgPj0gMikKKyAqICAoYykg TlVMTCBjbGF1c2VzICAgICAgICBXSEVSRSAoYSBJUyBOVUxMKSBBTkQgKGIg SVMgTk9UIE5VTEwpCisgKiAgKGQpIE9SLWNsYXVzZXMgICAgICAgICAgV0hF UkUgKGEgPSAxKSAgT1IgKGIgPSAyKQorICoKKyAqIEl0J3MgcG9zc2libGUg dG8gYWRkIG1vcmUgY2xhdXNlcywgZm9yIGV4YW1wbGU6CisgKgorICogIChl KSBtdWx0aS12YXIgY2xhdXNlcyAgIFdIRVJFIChhID4gYikKKyAqCisgKiBh bmQgc28gb24uIFRoZXNlIGFyZSB0YXNrcyBmb3IgdGhlIGZ1dHVyZSwgbm90 IHlldCBpbXBsZW1lbnRlZC4KKyAqCisgKiBXaGVuIHVzZWQgb24gbG93LWNh cmRpbmFsaXR5IGRhdGEsIGhpc3RvZ3JhbXMgdXN1YWxseSBwZXJmb3JtCisg KiBjb25zaWRlcmFibHkgd29yc2UgdGhhbiBNQ1YgbGlzdHMgKHdoaWNoIGFy ZSBhIGdvb2QgZml0IGZvciB0aGlzCisgKiBraW5kIG9mIGRhdGEpLiBUaGlz IGlzIGVzcGVjaWFsbHkgdHJ1ZSBvbiBjYXRlZ29yaWNhbCBkYXRhLCB3aGVy ZQorICogb3JkZXJpbmcgb2YgdGhlIHZhbHVlcyBpcyBtb3N0bHkgdW5yZWxh dGVkIHRvIG1lYW5pbmcgb2YgdGhlIGRhdGEsCisgKiBhcyBwcm9wZXIgb3Jk ZXJpbmcgaXMgY3J1Y2lhbCBmb3IgaGlzdG9ncmFtcy4KKyAqCisgKiBPbiBo aWdoLWNhcmRpbmFsaXR5IGRhdGEgdGhlIGhpc3RvZ3JhbXMgYXJlIHVzdWFs bHkgYSBiZXR0ZXIgY2hvaWNlLAorICogYmVjYXVzZSBNQ1YgbGlzdHMgY2Fu J3QgcmVwcmVzZW50IHRoZSBkaXN0cmlidXRpb24gYWNjdXJhdGVseSBlbm91 Z2guCisgKgorICogQnkgZXZhbHVhdGluZyBhIGNsYXVzZSBvbiBhIGJ1Y2tl dCwgd2UgbWF5IGdldCBvbmUgb2YgdGhyZWUgcmVzdWx0czoKKyAqCisgKiAg ICAgKGEpIEZVTExfTUFUQ0ggLSBUaGUgYnVja2V0IGRlZmluaXRlbHkgbWF0 Y2hlcyB0aGUgY2xhdXNlLgorICoKKyAqICAgICAoYikgUEFSVElBTF9NQVRD SCAtIFRoZSBidWNrZXQgbWF0Y2hlcyB0aGUgY2xhdXNlLCBidXQgbm90Cisg KiAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSBhbGwgdGhl IHR1cGxlcyBpdCByZXByZXNlbnRzLgorICoKKyAqICAgICAoYykgTk9fTUFU Q0ggLSBUaGUgYnVja2V0IGRlZmluaXRlbHkgZG9lcyBub3QgbWF0Y2ggdGhl IGNsYXVzZS4KKyAqCisgKiBUaGlzIG1heSBiZSBpbGx1c3RyYXRlZCB1c2lu ZyBhIHJhbmdlIFsxLCA1XSwgd2hpY2ggaXMgZXNzZW50aWFsbHkKKyAqIGEg MS1EIGJ1Y2tldC4gV2l0aCBjbGF1c2UKKyAqCisgKiAgICAgV0hFUkUgKGEg PCAxMCkgPT4gRlVMTF9NQVRDSCAoYWxsIHJhbmdlIHZhbHVlcyBhcmUgYmVs b3cKKyAqICAgICAgICAgICAgICAgICAgICAgICAxMCwgc28gdGhlIHdob2xl IGJ1Y2tldCBtYXRjaGVzKQorICoKKyAqICAgICBXSEVSRSAoYSA8IDMpICA9 PiBQQVJUSUFMX01BVENIICh0aGVyZSBtYXkgYmUgdmFsdWVzIG1hdGNoaW5n CisgKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNsYXVzZSwgYnV0IHdl IGRvbid0IGtub3cgaG93IG1hbnkpCisgKgorICogICAgIFdIRVJFIChhIDwg MCkgID0+IE5PX01BVENIICh0aGUgd2hvbGUgcmFuZ2UgaXMgYWJvdmUgMSwg c28KKyAqICAgICAgICAgICAgICAgICAgICAgICBubyB2YWx1ZXMgZnJvbSB0 aGUgYnVja2V0IGNhbiBtYXRjaCkKKyAqCisgKiBTb21lIGNsYXVzZXMgbWF5 IHByb2R1Y2Ugb25seSBzb21lIG9mIHRob3NlIHJlc3VsdHMgLSBmb3IgZXhh bXBsZQorICogZXF1YWxpdHkgY2xhdXNlcyBtYXkgbmV2ZXIgcHJvZHVjZSBG VUxMX01BVENIIGFzIHdlIGFsd2F5cyBoaXQgb25seQorICogcGFydCBvZiB0 aGUgYnVja2V0ICh3ZSBjYW4ndCBtYXRjaCBib3RoIGJvdW5kYXJpZXMgYXQg dGhlIHNhbWUgdGltZSkuCisgKiBUaGlzIHJlc3VsdHMgaW4gbGVzcyBhY2N1 cmF0ZSBlc3RpbWF0ZXMgY29tcGFyZWQgdG8gTUNWIGxpc3RzLCB3aGVyZQor ICogd2UgY2FuIGhpdCBhIE1DViBpdGVtcyBleGFjdGx5ICh0aGVyZSdzIG5v IFBBUlRJQUwgbWF0Y2ggaW4gTUNWKS4KKyAqCisgKiBUaGVyZSBhcmUgY2xh dXNlcyB0aGF0IG1heSBub3QgcHJvZHVjZSBhbnkgUEFSVElBTF9NQVRDSCBy ZXN1bHRzLgorICogQSBuaWNlIGV4YW1wbGUgb2YgdGhhdCBpcyAnSVMgW05P VF0gTlVMTCcgY2xhdXNlLCB3aGljaCBlaXRoZXIKKyAqIG1hdGNoZXMgdGhl IGJ1Y2tldCBjb21wbGV0ZWx5IChGVUxMX01BVENIKSBvciBub3QgYXQgYWxs IChOT19NQVRDSCksCisgKiB0aGFua3MgdG8gaG93IHRoZSBOVUxMLWJ1Y2tl dHMgYXJlIGNvbnN0cnVjdGVkLgorICoKKyAqIENvbXB1dGluZyB0aGUgdG90 YWwgc2VsZWN0aXZpdHkgZXN0aW1hdGUgaXMgdHJpdmlhbCAtIHNpbXBseSBz dW0KKyAqIHNlbGVjdGl2aXRpZXMgZnJvbSBhbGwgdGhlIEZVTExfTUFUQ0gg YW5kIFBBUlRJQUxfTUFUQ0ggYnVja2V0cyAoYnV0CisgKiBtdWx0aXBseSB0 aGUgUEFSVElBTF9NQVRDSCBidWNrZXRzIGJ5IDAuNSB0byBtaW5pbWl6ZSBh dmVyYWdlIGVycm9yKS4KKyAqCisgKgorICogU2VyaWFsaXphdGlvbgorICog LS0tLS0tLS0tLS0tLQorICogQWZ0ZXIgYnVpbGRpbmcsIHRoZSBoaXN0b2dy YW0gaXMgc2VyaWFsaXplZCBpbnRvIGEgbW9yZSBlZmZpY2llbnQKKyAqIGZv cm0gKGRlZHVwIGJvdW5kYXJ5IHZhbHVlcyBldGMuKS4gU2VlIHNlcmlhbGl6 ZV9tdl9oaXN0b2dyYW0oKSBmb3IKKyAqIG1vcmUgZGV0YWlscyBhYm91dCBo b3cgaXQncyBkb25lLgorICoKKyAqIFNlcmlhbGl6ZWQgaGlzdG9ncmFtcyBh cmUgbWFya2VkIHdpdGggJ21hZ2ljJyBjb25zdGFudCwgdG8gbWFrZSBpdAor ICogZWFzaWVyIHRvIGNoZWNrIHRoZSBieXRlYSB2YWx1ZSByZWFsbHkgaXMg YSBzZXJpYWxpemVkIGhpc3RvZ3JhbS4KKyAqCisgKiBJbiB0aGUgc2VyaWFs aXplZCBmb3JtLCB2YWx1ZXMgZm9yIGVhY2ggZGltZW5zaW9uIGFyZSBkZWR1 cGxpY2F0ZWQsCisgKiBhbmQgcmVmZXJlbmNlZCB1c2luZyBhbiB1aW50MTYg aW5kZXguIFRoaXMgc2F2ZXMgYSBsb3Qgb2Ygc3BhY2UsCisgKiBiZWNhdXNl IGV2ZXJ5IHRpbWUgd2Ugc3BsaXQgYSBidWNrZXQsIHdlIGludHJvZHVjZSBh IHNpbmdsZSBuZXcKKyAqIGJvdW5kYXJ5IHZhbHVlICh0byBzcGxpdCB0aGUg YnVja2V0IGJ5IHRoZSBzZWxlY3RlZCBkaW1lbnNpb24pLCBidXQKKyAqIHdl IGFjdHVhbGx5IGNvcHkgYWxsIHRoZSBib3VuZGFyeSB2YWx1ZXMgZm9yIGFs bCBkaW1lbnNpb25zLiBTbyBmb3IKKyAqIGEgaGlzdG9ncmFtIHdpdGggNCBk aW1lbnNpb25zIGFuZCAxMDAwIGJ1Y2tldHMsIHdlIGRvIGhhdmUKKyAqCisg KiAgICAgMTAwMCAqIDQgKiAyID0gODAwMAorICoKKyAqIGJvdW5kYXJ5IHZh bHVlcywgYnV0IG1hbnkgb2YgdGhlbSBhcmUgYWN0dWFsbHkgZHVwbGljYXRl ZCBiZWNhdXNlCisgKiB0aGUgaGlzdG9ncmFtIHN0YXJ0ZWQgd2l0aCBhIHNp bmdsZSBidWNrZXQgKDggYm91bmRhcnkgdmFsdWVzKSBhbmQKKyAqIHRoZW4g dGhlcmUgd2VyZSA5OTkgc3BsaXRzIChlYWNoIGludHJvZHVjaW5nIDEgbmV3 IHZhbHVlKToKKyAqCisgKiAgICAgIDggKyA5OTkgPSAxMDA3CisgKgorICog U28gdGhhdCdzIHF1aXRlIGxhcmdlIGRpZmZlbmNlLiBMZXQncyBhc3N1bWUg dGhlIERhdHVtIHZhbHVlcyBhcmUKKyAqIDggYnl0ZXMgZWFjaC4gU3Rvcmlu ZyB0aGUgcmF3IGhpc3RvZ3JhbSB3b3VsZCB0YWtlIH4gNjQga0IsIHdoaWxl CisgKiB3aXRoIGRlZHVwbGljYXRpb24gaXQncyBvbmx5IH4xOCBrQi4KKyAq CisgKiBUaGUgZGlmZmVyZW5jZSBtYXkgYmUgcmVtb3ZlZCBieSB0aGUgdHJh bnNwYXJlbnQgYnl0ZWEgY29tcHJlc3Npb24sCisgKiBidXQgdGhlIGRlZHVw bGljYXRpb24gaXMgYWxzbyB1c2VkIHRvIG9wdGltaXplIHRoZSBlc3RpbWF0 aW9uLiBJdCdzCisgKiBwb3NzaWJsZSB0byBwcm9jZXNzIHRoZSBkZWR1cGxp Y2F0ZWQgdmFsdWVzLCBhbmQgdGhlbiB1c2UgdGhpcyBhcworICogYSBjYWNo ZSB0byBtaW5pbWl6ZSB0aGUgYWN0dWFsIGZ1bmN0aW9uIGNhbGxzIHdoaWxl IGNoZWNraW5nIHRoZQorICogYnVja2V0cy4gVGhpcyBzaWduaWZpY2FudGx5 IHJlZHVjZXMgdGhlIG51bWJlciBvZiBjYWxscyB0byB0aGUKKyAqIChvZnRl biBxdWl0ZSBleHBlbnNpdmUpIG9wZXJhdG9yIGZ1bmN0aW9ucyBldGMuCisg KgorICoKKyAqIFRoZSBjdXJyZW50IGxpbWl0IG9uIG51bWJlciBvZiBidWNr ZXRzICgxNjM4NCkgaXMgbW9zdGx5IGFyYml0cmFyeSwKKyAqIGJ1dCBzZXQg c28gdGhhdCBpdCBtYWtlcyBzdXJlIHdlIGRvbid0IGV4Y2VlZCB0aGUgbnVt YmVyIG9mIGRpc3RpbmN0CisgKiB2YWx1ZXMgaW5kZXhhYmxlIGJ5IHVpbnQx Ni4gSW4gcHJhY3RpY2Ugd2UgY291bGQgaGFuZGxlIG1vcmUgYnVja2V0cywK KyAqIGJlY2F1c2Ugd2UgaW5kZXggZWFjaCBkaW1lbnNpb24gaW5kZXBlbmRl bnRseSwgYW5kIHdlIGRvIHRoZSBzcGxpdHMKKyAqIG92ZXIgbXVsdGlwbGUg ZGltZW5zaW9ucy4KKyAqCisgKiBIaXN0b2dyYW1zIHdpdGggbW9yZSB0aGFu IDE2ayBidWNrZXRzIGFyZSBxdWl0ZSBleHBlbnNpdmUgdG8gYnVpbGQKKyAq IGFuZCBwcm9jZXNzLCBzbyB0aGUgY3VycmVudCBsaW1pdCBpcyBzb21ld2hh dCByZWFzb25hYmxlLgorICoKKyAqIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ1 Y2tldHMgaXMgYWxzbyByZWxhdGVkIHRvIHN0YXRpc3RpY3MgdGFyZ2V0LAor ICogYmVjYXVzZSB3ZSByZXF1aXJlIE1JTl9CVUNLRVRfUk9XUyAoMTApIHR1 cGxlcyBwZXIgYnVja2V0IGJlZm9yZQorICogYSBzcGxpdCwgc28gd2UgY2Fu J3QgaGF2ZSBtb3JlIHRoYW4gKDIgKiAzMDAgKiB0YXJnZXQgLyAxMCkgYnVj a2V0cy4KKyAqCisgKgorICogVE9ETyBNYXliZSB0aGUgZGlzdGluY3Qgc3Rh dHMgKGJvdGggZm9yIGNvbWJpbmF0aW9uIG9mIGFsbCBjb2x1bW5zCisgKiAg ICAgIGFuZCBmb3IgY29tYmluYXRpb25zIG9mIHZhcmlvdXMgc3Vic2V0cyBv ZiBjb2x1bW5zKSBzaG91bGQgYmUKKyAqICAgICAgbW92ZWQgdG8gYSBzZXBh cmF0ZSBzdHJ1Y3R1cmUgKG5leHQgdG8gaGlzdG9ncmFtL01DVi8uLi4pIHRv CisgKiAgICAgIG1ha2UgaXQgdXNlZnVsIGV2ZW4gd2l0aG91dCBhIGhpc3Rv Z3JhbSBjb21wdXRlZCBldGMuCisgKgorICogICAgICBUaGlzIHdvdWxkIGFj dHVhbGx5IG1ha2UgbXZjb2VmZiAocHJvcG9zZWQgYnkgS3lvdGFybyBIb3Jp Z3VjaGkKKyAqICAgICAgaW4gWzFdKSBwb3NzaWJsZS4gU2VlbXMgbGlrZSBh IGdvb2Qgd2F5IHRvIGVzdGltYXRlIEdST1VQIEJZCisgKiAgICAgIGNhcmRp bmFsaXR5LCBhbmQgYWxzbyBzb21lIG90aGVyIGNhc2VzLCBwb2ludGVkIG91 dCBieSBLeW90YXJvOgorICoKKyAqICAgICAgWzFdIGh0dHA6Ly93d3cucG9z dGdyZXNxbC5vcmcvbWVzc2FnZS1pZC8yMDE1MDUxNS4xNTI5MzYuODM3OTYx NzkuaG9yaWd1Y2hpLmt5b3Rhcm9AbGFiLm50dC5jby5qcAorICoKKyAqICAg ICAgVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgYXQgdGhlIG1vbWVudCwgdGhv dWdoLiBBbHNvLCBLeW90YXJvJ3MKKyAqICAgICAgcGF0Y2ggb25seSB3b3Jr cyB3aXRoIHBhaXJzIG9mIGNvbHVtbnMsIGJ1dCBtYXliZSB0cmFja2luZyBh bGwKKyAqICAgICAgdGhlIGNvbWJpbmF0aW9ucyB3b3VsZCBiZSB1c2VmdWwg dG8gaGFuZGxlIG1vcmUgY29tcGxleAorICogICAgICBjb25kaXRpb25zLiBJ dCBvbmx5IHNlZW1zIHRvIGhhbmRsZSBlcXVhbGl0aWVzLCB0aG91Z2ggKGJ1 dCBmb3IKKyAqICAgICAgR1JPVVAgQlkgZXN0aW1hdGlvbiB0aGF0J3Mgbm90 IGEgYmlnIGRlYWwpLgorICovCisKK3N0YXRpYyBNVkJ1Y2tldCBjcmVhdGVf aW5pdGlhbF9tdl9idWNrZXQoaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93 cywKKwkJCQkJCQkJCQkgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkJCQkJ IFZhY0F0dHJTdGF0cyAqKnN0YXRzKTsKKworc3RhdGljIE1WQnVja2V0IHNl bGVjdF9idWNrZXRfdG9fcGFydGl0aW9uKGludCBuYnVja2V0cywgTVZCdWNr ZXQgKiBidWNrZXRzKTsKKworc3RhdGljIE1WQnVja2V0IHBhcnRpdGlvbl9i dWNrZXQoTVZCdWNrZXQgYnVja2V0LCBpbnQydmVjdG9yICphdHRycywKKwkJ CQkJCQkJIFZhY0F0dHJTdGF0cyAqKnN0YXRzLAorCQkJCQkJCQkgaW50ICpu ZGlzdHZhbHVlcywgRGF0dW0gKipkaXN0dmFsdWVzKTsKKworc3RhdGljIE1W QnVja2V0IGNvcHlfbXZfYnVja2V0KE1WQnVja2V0IGJ1Y2tldCwgdWludDMy IG5kaW1lbnNpb25zKTsKKworc3RhdGljIHZvaWQgdXBkYXRlX2J1Y2tldF9u ZGlzdGluY3QoTVZCdWNrZXQgYnVja2V0LCBpbnQydmVjdG9yICphdHRycywK KwkJCQkJCQkJCVZhY0F0dHJTdGF0cyAqKiBzdGF0cyk7CisKK3N0YXRpYyB2 b2lkIHVwZGF0ZV9kaW1lbnNpb25fbmRpc3RpbmN0KE1WQnVja2V0IGJ1Y2tl dCwgaW50IGRpbWVuc2lvbiwKKwkJCQkJCQkJCSAgIGludDJ2ZWN0b3IgKmF0 dHJzLAorCQkJCQkJCQkJICAgVmFjQXR0clN0YXRzICoqIHN0YXRzLAorCQkJ CQkJCQkJICAgYm9vbCB1cGRhdGVfYm91bmRhcmllcyk7CisKK3N0YXRpYyB2 b2lkIGNyZWF0ZV9udWxsX2J1Y2tldHMoTVZIaXN0b2dyYW0gaGlzdG9ncmFt LCBpbnQgYnVja2V0X2lkeCwKKwkJCQkJCQkJaW50MnZlY3RvciAqYXR0cnMs IFZhY0F0dHJTdGF0cyAqKiBzdGF0cyk7CisKK3N0YXRpYyBpbnQgYnNlYXJj aF9jb21wYXJhdG9yKGNvbnN0IHZvaWQgKiBhLCBjb25zdCB2b2lkICogYik7 CisKKy8qCisgKiBFYWNoIHNlcmlhbGl6ZWQgYnVja2V0IG5lZWRzIHRvIHN0 b3JlIChpbiB0aGlzIG9yZGVyKToKKyAqCisgKiAtIG51bWJlciBvZiB0dXBs ZXMgICAgIChmbG9hdCkKKyAqIC0gbnVtYmVyIG9mIGRpc3RpbmN0ICAgKGZs b2F0KQorICogLSBtaW4gaW5jbHVzaXZlIGZsYWdzICAobmRpbSAqIHNpemVv Zihib29sKSkKKyAqIC0gbWF4IGluY2x1c2l2ZSBmbGFncyAgKG5kaW0gKiBz aXplb2YoYm9vbCkpCisgKiAtIG51bGwgZGltZW5zaW9uIGZsYWdzIChuZGlt ICogc2l6ZW9mKGJvb2wpKQorICogLSBtaW4gYm91bmRhcnkgaW5kZXhlcyAo MiAqIG5kaW0gKiBzaXplb2YoaW50MzIpKQorICogLSBtYXggYm91bmRhcnkg aW5kZXhlcyAoMiAqIG5kaW0gKiBzaXplb2YoaW50MzIpKQorICoKKyAqIFNv IGluIHRvdGFsOgorICoKKyAqICAgbmRpbSAqICg0ICogc2l6ZW9mKGludDMy KSArIDMgKiBzaXplb2YoYm9vbCkpICsKKyAqICAgMiAqIHNpemVvZihmbG9h dCkKKyAqLworI2RlZmluZSBCVUNLRVRfU0laRShuZGltcykJXAorCShuZGlt cyAqICg0ICogc2l6ZW9mKHVpbnQxNikgKyAzICogc2l6ZW9mKGJvb2wpKSAr IHNpemVvZihmbG9hdCkpCisKKy8qIHBvaW50ZXJzIGludG8gYSBmbGF0IHNl cmlhbGl6ZWQgYnVja2V0IG9mIEJVQ0tFVF9TSVpFKG4pIGJ5dGVzICovCisj ZGVmaW5lIEJVQ0tFVF9OVFVQTEVTKGIpCQkoKGZsb2F0KiliKQorI2RlZmlu ZSBCVUNLRVRfTUlOX0lOQ0woYixuKQkoKGJvb2wqKShiICsgc2l6ZW9mKGZs b2F0KSkpCisjZGVmaW5lIEJVQ0tFVF9NQVhfSU5DTChiLG4pCShCVUNLRVRf TUlOX0lOQ0woYixuKSArIG4pCisjZGVmaW5lIEJVQ0tFVF9OVUxMU19PTkxZ KGIsbikJKEJVQ0tFVF9NQVhfSU5DTChiLG4pICsgbikKKyNkZWZpbmUgQlVD S0VUX01JTl9JTkRFWEVTKGIsbikJKCh1aW50MTYqKShCVUNLRVRfTlVMTFNf T05MWShiLG4pICsgbikpCisjZGVmaW5lIEJVQ0tFVF9NQVhfSU5ERVhFUyhi LG4pCSgoQlVDS0VUX01JTl9JTkRFWEVTKGIsbikgKyBuKSkKKworLyogY2Fu J3Qgc3BsaXQgYnVja2V0IHdpdGggbGVzcyB0aGFuIDEwIHJvd3MgKi8KKyNk ZWZpbmUgTUlOX0JVQ0tFVF9ST1dTCQkJMTAKKworLyoKKyAqIERhdGEgdXNl ZCB3aGlsZSBidWlsZGluZyB0aGUgaGlzdG9ncmFtLgorICovCit0eXBlZGVm IHN0cnVjdCBIaXN0b2dyYW1CdWlsZERhdGEgeworCisJZmxvYXQJbmRpc3Rp bmN0OwkJLyogZnJlcXVlbmN5IG9mIGRpc3RpbmN0IHZhbHVlcyAqLworCisJ SGVhcFR1cGxlICAqcm93czsJCS8qIGFyYXkgb2Ygc2FtcGxlIHJvd3MgKi8K Kwl1aW50MzIJCW51bXJvd3M7CS8qIG51bWJlciBvZiBzYW1wbGUgcm93cyAo YXJyYXkgc2l6ZSkgKi8KKworCS8qCisJICogTnVtYmVyIG9mIGRpc3RpbmN0 IHZhbHVlcyBpbiBlYWNoIGRpbWVuc2lvbi4gVGhpcyBpcyB1c2VkIHdoZW4K KwkgKiBidWlsZGluZyB0aGUgaGlzdG9ncmFtIChhbmQgaXMgbm90IHNlcmlh bGl6ZWQvZGVzZXJpYWxpemVkKS4KKwkgKi8KKwl1aW50MzIgKm5kaXN0aW5j dHM7CisKK30gSGlzdG9ncmFtQnVpbGREYXRhOworCit0eXBlZGVmIEhpc3Rv Z3JhbUJ1aWxkRGF0YQkqSGlzdG9ncmFtQnVpbGQ7CisKKy8qCisgKiBCdWls ZGluZyBhIG11bHRpdmFyaWF0ZSBhbGdvcml0aG0uIEluIHNob3J0IGl0IGZp cnN0IGNyZWF0ZXMgYSBzaW5nbGUKKyAqIGJ1Y2tldCBjb250YWluaW5nIGFs bCB0aGUgcm93cywgYW5kIHRoZW4gcmVwZWF0ZWRseSBzcGxpdCBpcyBieSBm aXJzdAorICogc2VhcmNoaW5nIGZvciB0aGUgYnVja2V0IC8gZGltZW5zaW9u IG1vc3QgaW4gbmVlZCBvZiBhIHNwbGl0LgorICoKKyAqIFRoZSBjdXJyZW50 IGNyaXRlcmlhIGlzIHJhdGhlciBzaW1wbGUsIGNob3NlbiBzbyB0aGF0IHRo ZSBhbGdvcml0aG0KKyAqIHByb2R1Y2VzIGJ1Y2tldHMgd2l0aCBhYm91dCBl cXVhbCBmcmVxdWVuY3kgYW5kIHJlZ3VsYXIgc2l6ZS4KKyAqCisgKiBTZWUg dGhlIGRpc2N1c3Npb24gYXQgc2VsZWN0X2J1Y2tldF90b19wYXJ0aXRpb24g YW5kIHBhcnRpdGlvbl9idWNrZXQKKyAqIGZvciBtb3JlIGRldGFpbHMgYWJv dXQgdGhlIGFsZ29yaXRobS4KKyAqCisgKiBUaGUgY3VycmVudCBhbGdvcml0 aG0gd29ya3MgbGlrZSB0aGlzOgorICoKKyAqICAgICBidWlsZCBOVUxMLWJ1 Y2tldHMgKGNyZWF0ZV9udWxsX2J1Y2tldHMpCisgKgorICogICAgIHdoaWxl IFtub3QgcmVhY2hpbmcgbWF4aW11bSBudW1iZXIgb2YgYnVja2V0c10KKyAq CisgKiAgICAgICAgIGNob29zZSBidWNrZXQgdG8gcGFydGl0aW9uIChsYXJn ZXN0IGJ1Y2tldCkKKyAqICAgICAgICAgICAgIGlmIG5vIGJ1Y2tldCB0byBw YXJ0aXRpb24KKyAqICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUgdGhlIGFs Z29yaXRobQorICoKKyAqICAgICAgICAgY2hvb3NlIGJ1Y2tldCBkaW1lbnNp b24gdG8gcGFydGl0aW9uIChsYXJnZXN0IGRpbWVuc2lvbikKKyAqICAgICAg ICAgICAgIHNwbGl0IHRoZSBidWNrZXQgaW50byB0d28gYnVja2V0cworICov CitNVkhpc3RvZ3JhbQorYnVpbGRfbXZfaGlzdG9ncmFtKGludCBudW1yb3dz LCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCSAg IFZhY0F0dHJTdGF0cyAqKnN0YXRzLCBpbnQgbnVtcm93c190b3RhbCkKK3sK KwlpbnQgaTsKKwlpbnQgbnVtYXR0cnMgPSBhdHRycy0+ZGltMTsKKworCWlu dAkJCSAgICpuZGlzdHZhbHVlczsKKwlEYXR1bQkJICAqKmRpc3R2YWx1ZXM7 CisKKwlNVkhpc3RvZ3JhbSBoaXN0b2dyYW0gPSAoTVZIaXN0b2dyYW0pcGFs bG9jMChzaXplb2YoTVZIaXN0b2dyYW1EYXRhKSk7CisKKwlIZWFwVHVwbGUg KiByb3dzX2NvcHkgPSAoSGVhcFR1cGxlKilwYWxsb2MwKG51bXJvd3MgKiBz aXplb2YoSGVhcFR1cGxlKSk7CisJbWVtY3B5KHJvd3NfY29weSwgcm93cywg c2l6ZW9mKEhlYXBUdXBsZSkgKiBudW1yb3dzKTsKKworCUFzc2VydCgobnVt YXR0cnMgPj0gMikgJiYgKG51bWF0dHJzIDw9IE1WU1RBVFNfTUFYX0RJTUVO U0lPTlMpKTsKKworCWhpc3RvZ3JhbS0+bmRpbWVuc2lvbnMgPSBudW1hdHRy czsKKworCWhpc3RvZ3JhbS0+bWFnaWMgPSBNVlNUQVRfSElTVF9NQUdJQzsK KwloaXN0b2dyYW0tPnR5cGUgID0gTVZTVEFUX0hJU1RfVFlQRV9CQVNJQzsK KwloaXN0b2dyYW0tPm5idWNrZXRzID0gMTsKKworCS8qIGNyZWF0ZSBtYXgg YnVja2V0cyAoYmV0dGVyIHRoYW4gcmVwYWxsb2MgZm9yIHNob3J0LWxpdmVk IG9iamVjdHMpICovCisJaGlzdG9ncmFtLT5idWNrZXRzCisJCT0gKE1WQnVj a2V0KilwYWxsb2MwKE1WU1RBVF9ISVNUX01BWF9CVUNLRVRTICogc2l6ZW9m KE1WQnVja2V0KSk7CisKKwkvKiBjcmVhdGUgdGhlIGluaXRpYWwgYnVja2V0 LCBjb3ZlcmluZyB0aGUgd2hvbGUgc2FtcGxlIHNldCAqLworCWhpc3RvZ3Jh bS0+YnVja2V0c1swXQorCQk9IGNyZWF0ZV9pbml0aWFsX212X2J1Y2tldChu dW1yb3dzLCByb3dzX2NvcHksIGF0dHJzLCBzdGF0cyk7CisKKwkvKgorCSAq IENvbGxlY3QgaW5mbyBvbiBkaXN0aW5jdCB2YWx1ZXMgaW4gZWFjaCBkaW1l bnNpb24gKHVzZWQgbGF0ZXIKKwkgKiB0byBzZWxlY3QgZGltZW5zaW9uIHRv IHBhcnRpdGlvbikuCisJICovCisJbmRpc3R2YWx1ZXMgPSAoaW50KilwYWxs b2MwKHNpemVvZihpbnQpICogbnVtYXR0cnMpOworCWRpc3R2YWx1ZXMgID0g KERhdHVtKiopcGFsbG9jMChzaXplb2YoRGF0dW0qKSAqIG51bWF0dHJzKTsK KworCWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCXsKKwkJaW50 CQkJCWo7CisJCWludAkJCQludmFsczsKKwkJRGF0dW0JCSAgICp0bXA7CisK KwkJU29ydFN1cHBvcnREYXRhCXNzdXA7CisJCVN0ZEFuYWx5emVEYXRhICpt eXN0YXRzID0gKFN0ZEFuYWx5emVEYXRhICopIHN0YXRzW2ldLT5leHRyYV9k YXRhOworCisJCS8qIGluaXRpYWxpemUgc29ydCBzdXBwb3J0LCBldGMuICov CisJCW1lbXNldCgmc3N1cCwgMCwgc2l6ZW9mKHNzdXApKTsKKwkJc3N1cC5z c3VwX2N4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJCS8qIFdlIGFs d2F5cyB1c2UgdGhlIGRlZmF1bHQgY29sbGF0aW9uIGZvciBzdGF0aXN0aWNz ICovCisJCXNzdXAuc3N1cF9jb2xsYXRpb24gPSBERUZBVUxUX0NPTExBVElP Tl9PSUQ7CisJCXNzdXAuc3N1cF9udWxsc19maXJzdCA9IGZhbHNlOworCisJ CVByZXBhcmVTb3J0U3VwcG9ydEZyb21PcmRlcmluZ09wKG15c3RhdHMtPmx0 b3ByLCAmc3N1cCk7CisKKwkJbnZhbHMgPSAwOworCQl0bXAgPSAoRGF0dW0q KXBhbGxvYzAoc2l6ZW9mKERhdHVtKSAqIG51bXJvd3MpOworCisJCWZvciAo aiA9IDA7IGogPCBudW1yb3dzOyBqKyspCisJCXsKKwkJCWJvb2wJaXNudWxs OworCisJCQkvKiByZW1lbWJlciB0aGUgaW5kZXggb2YgdGhlIHNhbXBsZSBy b3csIHRvIG1ha2UgdGhlIHBhcnRpdGlvbmluZyBzaW1wbGVyICovCisJCQlE YXR1bQl2YWx1ZSA9IGhlYXBfZ2V0YXR0cihyb3dzW2pdLCBhdHRycy0+dmFs dWVzW2ldLAorCQkJCQkJCQkJCSBzdGF0c1tpXS0+dHVwRGVzYywgJmlzbnVs bCk7CisKKwkJCWlmIChpc251bGwpCisJCQkJY29udGludWU7CisKKwkJCXRt cFtudmFscysrXSA9IHZhbHVlOworCQl9CisKKwkJLyogZG8gdGhlIHNvcnQg YW5kIHN0dWZmIG9ubHkgaWYgdGhlcmUgYXJlIG5vbi1OVUxMIHZhbHVlcyAq LworCQlpZiAobnZhbHMgPiAwKQorCQl7CisJCQkvKiBzb3J0IHRoZSBhcnJh eSBvZiB2YWx1ZXMgKi8KKwkJCXFzb3J0X2FyZygodm9pZCAqKSB0bXAsIG52 YWxzLCBzaXplb2YoRGF0dW0pLAorCQkJCQkgIGNvbXBhcmVfc2NhbGFyc19z aW1wbGUsICh2b2lkICopICZzc3VwKTsKKworCQkJLyogY291bnQgZGlzdGlu Y3QgdmFsdWVzICovCisJCQluZGlzdHZhbHVlc1tpXSA9IDE7CisJCQlmb3Ig KGogPSAxOyBqIDwgbnZhbHM7IGorKykKKwkJCQlpZiAoY29tcGFyZV9zY2Fs YXJzX3NpbXBsZSgmdG1wW2pdLCAmdG1wW2otMV0sICZzc3VwKSAhPSAwKQor CQkJCQluZGlzdHZhbHVlc1tpXSArPSAxOworCisJCQkvKiBGSVhNRSBhbGxv Y2F0ZSBvbmx5IG5lZWRlZCBzcGFjZSAoY291bnQgbmRpc3RpbmN0IGZpcnN0 KSAqLworCQkJZGlzdHZhbHVlc1tpXSA9IChEYXR1bSopcGFsbG9jMChzaXpl b2YoRGF0dW0pICogbmRpc3R2YWx1ZXNbaV0pOworCisJCQkvKiBub3cgY29s bGVjdCBkaXN0aW5jdCB2YWx1ZXMgaW50byB0aGUgYXJyYXkgKi8KKwkJCWRp c3R2YWx1ZXNbaV1bMF0gPSB0bXBbMF07CisJCQluZGlzdHZhbHVlc1tpXSA9 IDE7CisKKwkJCWZvciAoaiA9IDE7IGogPCBudmFsczsgaisrKQorCQkJewor CQkJCWlmIChjb21wYXJlX3NjYWxhcnNfc2ltcGxlKCZ0bXBbal0sICZ0bXBb ai0xXSwgJnNzdXApICE9IDApCisJCQkJeworCQkJCQlkaXN0dmFsdWVzW2ld W25kaXN0dmFsdWVzW2ldXSA9IHRtcFtqXTsKKwkJCQkJbmRpc3R2YWx1ZXNb aV0gKz0gMTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlwZnJlZSh0bXApOwor CX0KKworCS8qCisJICogVGhlIGluaXRpYWwgYnVja2V0IG1heSBjb250YWlu IE5VTEwgdmFsdWVzLCBzbyB3ZSBoYXZlIHRvIGNyZWF0ZQorCSAqIGJ1Y2tl dHMgd2l0aCBOVUxMLW9ubHkgZGltZW5zaW9ucy4KKwkgKgorCSAqIEZJWE1F IFdlIG1heSBuZWVkIHVwIHRvIDJebmRpbXMgYnVja2V0cyAtIGNoZWNrIHRo YXQgdGhlcmUgYXJlCisJICogICAgICAgZW5vdWdoIGJ1Y2tldHMgKE1WU1RB VF9ISVNUX01BWF9CVUNLRVRTID49IDJebmRpbXMpLgorCSAqLworCWNyZWF0 ZV9udWxsX2J1Y2tldHMoaGlzdG9ncmFtLCAwLCBhdHRycywgc3RhdHMpOwor CisJd2hpbGUgKGhpc3RvZ3JhbS0+bmJ1Y2tldHMgPCBNVlNUQVRfSElTVF9N QVhfQlVDS0VUUykKKwl7CisJCU1WQnVja2V0IGJ1Y2tldCA9IHNlbGVjdF9i dWNrZXRfdG9fcGFydGl0aW9uKGhpc3RvZ3JhbS0+bmJ1Y2tldHMsCisJCQkJ CQkJCQkJCQkJIGhpc3RvZ3JhbS0+YnVja2V0cyk7CisKKwkJLyogbm8gbW9y ZSBidWNrZXRzIHRvIHBhcnRpdGlvbiAqLworCQlpZiAoYnVja2V0ID09IE5V TEwpCisJCQlicmVhazsKKworCQloaXN0b2dyYW0tPmJ1Y2tldHNbaGlzdG9n cmFtLT5uYnVja2V0c10KKwkJCT0gcGFydGl0aW9uX2J1Y2tldChidWNrZXQs IGF0dHJzLCBzdGF0cywKKwkJCQkJCQkgICBuZGlzdHZhbHVlcywgZGlzdHZh bHVlcyk7CisKKwkJaGlzdG9ncmFtLT5uYnVja2V0cyArPSAxOworCX0KKwor CS8qIGZpbmFsaXplIHRoZSBmcmVxdWVuY2llcyBldGMuICovCisJZm9yIChp ID0gMDsgaSA8IGhpc3RvZ3JhbS0+bmJ1Y2tldHM7IGkrKykKKwl7CisJCUhp c3RvZ3JhbUJ1aWxkIGJ1aWxkX2RhdGEKKwkJCT0gKChIaXN0b2dyYW1CdWls ZCloaXN0b2dyYW0tPmJ1Y2tldHNbaV0tPmJ1aWxkX2RhdGEpOworCisJCS8q CisJCSAqIFRoZSBmcmVxdWVuY3kgaGFzIHRvIGJlIGNvbXB1dGVkIGZyb20g dGhlIHdob2xlIHNhbXBsZSwgaW4KKwkJICogY2FzZSBzb21lIG9mIHRoZSBy b3dzIHdlcmUgdXNlZCBmb3IgTUNWIChhbmQgdGh1cyBhcmUgbWlzc2luZwor CQkgKiBmcm9tIHRoZSBoaXN0b2dyYW0pLgorCQkgKi8KKwkJaGlzdG9ncmFt LT5idWNrZXRzW2ldLT5udHVwbGVzCisJCQk9IChidWlsZF9kYXRhLT5udW1y b3dzICogMS4wKSAvIG51bXJvd3NfdG90YWw7CisJfQorCisJcmV0dXJuIGhp c3RvZ3JhbTsKK30KKworLyogZmV0Y2ggdGhlIGhpc3RvZ3JhbSAoYXMgYSBi eXRlYSkgZnJvbSB0aGUgcGdfbXZfc3RhdGlzdGljIGNhdGFsb2cgKi8KK01W U2VyaWFsaXplZEhpc3RvZ3JhbQorbG9hZF9tdl9oaXN0b2dyYW0oT2lkIG12 b2lkKQoreworCWJvb2wJCWlzbnVsbCA9IGZhbHNlOworCURhdHVtCQloaXN0 b2dyYW07CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJRm9ybV9w Z19tdl9zdGF0aXN0aWMJbXZzdGF0OworI2VuZGlmCisKKwkvKiBQcmVwYXJl IHRvIHNjYW4gcGdfbXZfc3RhdGlzdGljIGZvciBlbnRyaWVzIGhhdmluZyBp bmRyZWxpZCA9IHRoaXMgcmVsLiAqLworCUhlYXBUdXBsZQlodHVwID0gU2Vh cmNoU3lzQ2FjaGUxKE1WU1RBVE9JRCwgT2JqZWN0SWRHZXREYXR1bShtdm9p ZCkpOworCisJaWYgKCEgSGVhcFR1cGxlSXNWYWxpZChodHVwKSkKKwkJcmV0 dXJuIE5VTEw7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJbXZz dGF0ID0gKEZvcm1fcGdfbXZfc3RhdGlzdGljKSBHRVRTVFJVQ1QoaHR1cCk7 CisJQXNzZXJ0KG12c3RhdC0+aGlzdF9lbmFibGVkICYmIG12c3RhdC0+aGlz dF9idWlsdCk7CisjZW5kaWYKKworCWhpc3RvZ3JhbSA9IFN5c0NhY2hlR2V0 QXR0cihNVlNUQVRPSUQsIGh0dXAsCisJCQkJCQkgICBBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFoaXN0LCAmaXNudWxsKTsKKworCUFzc2VydCghaXNudWxs KTsKKworCVJlbGVhc2VTeXNDYWNoZShodHVwKTsKKworCXJldHVybiBkZXNl cmlhbGl6ZV9tdl9oaXN0b2dyYW0oRGF0dW1HZXRCeXRlYVAoaGlzdG9ncmFt KSk7Cit9CisKKy8qIHByaW50IHNvbWUgYmFzaWMgaW5mbyBhYm91dCB0aGUg aGlzdG9ncmFtICovCitEYXR1bQorcGdfbXZfc3RhdHNfaGlzdG9ncmFtX2lu Zm8oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlieXRlYQkgICAqZGF0YSA9IFBH X0dFVEFSR19CWVRFQV9QKDApOworCWNoYXIJICAgKnJlc3VsdDsKKworCU1W U2VyaWFsaXplZEhpc3RvZ3JhbSBoaXN0ID0gZGVzZXJpYWxpemVfbXZfaGlz dG9ncmFtKGRhdGEpOworCisJcmVzdWx0ID0gcGFsbG9jMCgxMjgpOworCXNu cHJpbnRmKHJlc3VsdCwgMTI4LCAibmJ1Y2tldHM9JWQiLCBoaXN0LT5uYnVj a2V0cyk7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChy ZXN1bHQpKTsKK30KKworCisvKiB1c2VkIHRvIHBhc3MgY29udGV4dCBpbnRv IGJzZWFyY2goKSAqLworc3RhdGljIFNvcnRTdXBwb3J0IHNzdXBfcHJpdmF0 ZSA9IE5VTEw7CisKKy8qCisgKiBTZXJpYWxpemUgdGhlIE1WIGhpc3RvZ3Jh bSBpbnRvIGEgYnl0ZWEgdmFsdWUuIFRoZSBiYXNpYyBhbGdvcml0aG0KKyAq IGlzIHNpbXBsZSwgYW5kIG1vc3RseSBtaW1pbmNzIHRoZSBNQ1Ygc2VyaWFs aXphdGlvbjoKKyAqCisgKiAoMSkgcGVyZm9ybSBkZWR1cGxpY2F0aW9uIGZv ciBlYWNoIGF0dHJpYnV0ZSAoc2VwYXJhdGVseSkKKyAqICAgICAoYSkgY29s bGVjdCBhbGwgKG5vbi1OVUxMKSBhdHRyaWJ1dGUgdmFsdWVzIGZyb20gYWxs IGJ1Y2tldHMKKyAqICAgICAoYikgc29ydCB0aGUgZGF0YSAodXNpbmcgJ2x0 JyBmcm9tIFZhY0F0dHJTdGF0cykKKyAqICAgICAoYykgcmVtb3ZlIGR1cGxp Y2F0ZSB2YWx1ZXMgZnJvbSB0aGUgYXJyYXkKKyAqCisgKiAoMikgc2VyaWFs aXplIHRoZSBhcnJheXMgaW50byBhIGJ5dGVhIHZhbHVlCisgKgorICogKDMp IHByb2Nlc3MgYWxsIGJ1Y2tldHMKKyAqICAgICAoYSkgcmVwbGFjZSBtaW4v bWF4IHZhbHVlcyB3aXRoIGluZGV4ZXMgaW50byB0aGUgYXJyYXlzCisgKgor ICogRWFjaCBhdHRyaWJ1dGUgaGFzIHRvIGJlIHByb2Nlc3NlZCBzZXBhcmF0 ZWx5LCBiZWNhdXNlIHdlJ3JlIG1peGluZworICogZGlmZmVyZW50IGRhdGF0 eXBlcywgYW5kIHdlIGRvbid0IGtub3cgd2hhdCBlcXVhbGl0eSBtZWFucyBm b3IgdGhlbS4KKyAqIFdlJ3JlIGFsc28gbWl4aW5nIHBhc3MtYnktdmFsdWUg YW5kIHBhc3MtYnktcmVmIHR5cGVzLCBhbmQgc28gb24uCisgKgorICogV2Un bGwgdXNlIDMyLWJpdCB2YWx1ZXMgZm9yIHRoZSBpbmRleGVzIGluIHN0ZXAg KDMpLCBhbHRob3VnaCB3ZQorICogY291bGQgcHJvYmFibHkgdXNlIGp1c3Qg MTYgYml0cyBhcyB3ZSBkb24ndCBhbGxvdyBtb3JlIHRoYW4gOGsKKyAqIGJ1 Y2tldHMgaW4gdGhlIGhpc3RvZ3JhbSBtYXhfYnVja2V0cyAod2VsbCwgd2Ug bWlnaHQgaW5jcmVhc2UgdGhpcworICogdG8gMTZrIGFuZCBzdGlsbCBmaXQg aW50byBzaWduZWQgMTYtYml0cykuIEJ1dCBsZXQncyBiZSBsYXp5IGFuZCBy ZWx5CisgKiBvbiB0aGUgdmFybGVuYSBjb21wcmVzc2lvbiB0byBraWNrIGlu LiBJZiBtb3N0IGJ5dGVzIHdpbGwgYmUgMHgwMAorICogc28gaXQgc2hvdWxk IHdvcmsgbmljZWx5LgorICoKKyAqCisgKiBEZWR1cGxpY2F0aW9uIGluIHNl cmlhbGl6YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogVGhlIGRlZHVwbGljYXRpb24gaXMgdmVyeSBlZmZlY3RpdmUgYW5k IGltcG9ydGFudCBoZXJlLCBiZWNhdXNlIGV2ZXJ5CisgKiB0aW1lIHdlIHNw bGl0IGEgYnVja2V0LCB3ZSBrZWVwIGFsbCB0aGUgYm91bmRhcnkgdmFsdWVz LCBleGNlcHQgZm9yCisgKiB0aGUgZGltZW5zaW9uIHRoYXQgd2FzIHVzZWQg Zm9yIHRoZSBzcGxpdC4gQW5vdGhlciB3YXkgdG8gbG9vayBhdAorICogdGhp cyBpcyB0aGF0IGVhY2ggc3BsaXQgaW50cm9kdWNlcyAxIG5ldyB2YWx1ZSAo dGhlIHZhbHVlIHVzZWQgdG8gZG8KKyAqIHRoZSBzcGxpdCkuIEEgaGlzdG9n cmFtIHdpdGggTSBidWNrZXRzIHdhcyBjcmVhdGVkIGJ5IChNLTEpIHNwbGl0 cworICogb2YgdGhlIGluaXRpYWwgYnVja2V0LCBhbmQgZWFjaCBidWNrZXQg aGFzIDIqTiBib3VuZGFyeSB2YWx1ZXMuIFNvCisgKiBhc3N1bWluZyB0aGUg aW5pdGlhbCBidWNrZXQgZG9lcyBub3QgaGF2ZSBhbnkgJ2NvbGxhcHNlZCcg ZGltZW5zaW9ucywKKyAqIHRoZSBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVz IGlzCisgKgorICogICAgICgyKk4gKyAoTS0xKSkKKyAqCisgKiBidXQgdGhl IHRvdGFsIG51bWJlciBvZiBib3VuZGFyeSB2YWx1ZXMgaXMKKyAqCisgKiAg ICAgMipOKk0KKyAqCisgKiB3aGljaCBpcyBjbGVhcmx5IG11Y2ggaGlnaGVy LiBGb3IgYSBoaXN0b2dyYW0gb24gdHdvIGNvbHVtbnMsIHdpdGgKKyAqIDEw MjQgYnVja2V0cywgaXQncyAxMDI3IHZzLiA0MDk2LiBPZiBjb3Vyc2UsIHdl J3JlIG5vdCBzYXZpbmcgYWxsCisgKiB0aGUgZGlmZmVyZW5jZSAoYmVjYXVz ZSB3ZSdsbCB1c2UgMzItYml0IGluZGV4ZXMgaW50byB0aGUgdmFsdWVzKS4K KyAqIEJ1dCB3aXRoIGxhcmdlIHZhbHVlcyAoZS5nLiBzdG9yZWQgYXMgdmFy bGVuYSksIHRoaXMgc2F2ZXMgYSBsb3QuCisgKgorICogQW4gaW50ZXJlc3Rp bmcgZmVhdHVyZSBpcyB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2YgZGlzdGlu Y3QgdmFsdWVzCisgKiBkb2VzIG5vdCByZWFsbHkgZ3JvdyB3aXRoIHRoZSBu dW1iZXIgb2YgZGltZW5zaW9ucywgZXhjZXB0IGZvciB0aGUKKyAqIHNpemUg b2YgdGhlIGluaXRpYWwgYnVja2V0LiBBZnRlciB0aGF0IGl0IG9ubHkgZGVw ZW5kcyBvbiBudW1iZXIgb2YKKyAqIGJ1Y2tldHMgKGkuZS4gbnVtYmVyIG9m IHNwbGl0cykuCisgKgorICogWFhYIE9mIGNvdXJzZSB0aGlzIG9ubHkgaG9s ZHMgZm9yIHRoZSBjdXJyZW50IGhpc3RvZ3JhbSBidWlsZGluZworICogICAg IGFsZ29yaXRobS4gQWxnb3JpdGhtcyBkb2luZyB0aGUgc3BsaXRzIGRpZmZl cmVudGx5IChlLmcuCisgKiAgICAgcHJvZHVjaW5nIG92ZXJsYXBwaW5nIGJ1 Y2tldHMpIG1heSBiZWhhdmUgZGlmZmVyZW50bHkuCisgKgorICogVE9ETyBU aGlzIG9ubHkgY29uZmlybXMgd2UgY2FuIHVzZSB0aGUgdWludDE2IGluZGV4 ZXMuIFRoZSB3b3JzdAorICogICAgICB0aGF0IGNvdWxkIGhhcHBlbiBpcyBp ZiBhbGwgdGhlIHNwbGl0cyBoYXBwZW5lZCBieSBhIHNpbmdsZQorICogICAg ICBkaW1lbnNpb24uIFRvIGV4aGF1c3QgdGhlIHVpbnQxNiB0aGlzIHdvdWxk IHJlcXVpcmUgfjY0aworICogICAgICBzcGxpdHMgKG5lZWRzIHRvIGJlIHJl ZmxlY3RlZCBpbiBNVlNUQVRfSElTVF9NQVhfQlVDS0VUUykuCisgKgorICog VE9ETyBXZSBkb24ndCBuZWVkIHRvIHVzZSBhIHNlcGFyYXRlIGJvb2xlYW4g Zm9yIGVhY2ggZmxhZywgaW5zdGVhZAorICogICAgICB1c2UgYSBzaW5nbGUg Y2hhciBhbmQgc2V0IGJpdHMuCisgKgorICogVE9ETyBXZSBtaWdodCBnZXQg YSBiaXQgYmV0dGVyIGNvbXByZXNzaW9uIGJ5IGNvbnNpZGVyaW5nIHRoZSBh Y3R1YWwKKyAqICAgICAgZGF0YSB0eXBlIGxlbmd0aC4gVGhlIGN1cnJlbnQg aW1wbGVtZW50YXRpb24gdHJlYXRzIGFsbCBkYXRhCisgKiAgICAgIHR5cGVz IHBhc3NlZCBieSB2YWx1ZSBhcyByZXF1aXJpbmcgOEIsIGJ1dCBmb3IgSU5U IGl0J3MgYWN0dWFsbHkKKyAqICAgICAganVzdCA0QiBldGMuCisgKgorICog ICAgICBPVE9IIHRoaXMgaXMgb25seSByZWxhdGVkIHRvIHRoZSBsb29rdXAg dGFibGUsIGFuZCBtb3N0IG9mIHRoZQorICogICAgICBzcGFjZSBpcyBvY2N1 cGllZCBieSB0aGUgYnVja2V0cyAod2l0aCBpbnQxNiBpbmRleGVzKS4KKyAq CisgKgorICogVmFybGVuYSBjb21wcmVzc2lvbgorICogLS0tLS0tLS0tLS0t LS0tLS0tLQorICogVGhpcyBlbmNvZGluZyBtYXkgcHJldmVudCBhdXRvbWF0 aWMgdmFybGVuYSBjb21wcmVzc2lvbiAoc2ltaWxhcmx5CisgKiB0byBKU09O QiksIGJlY2F1c2UgZmlyc3QgcGFydCBvZiB0aGUgc2VyaWFsaXplZCBieXRl YSB3aWxsIGJlIGFuCisgKiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIChhbHRo b3VnaCBzb3J0ZWQpLCBhbmQgcGdseiBkZWNpZGVzIHdoZXRoZXIKKyAqIHRv IGNvbXByZXNzIGJ5IHRyeWluZyB0byBjb21wcmVzcyB0aGUgZmlyc3QgcGFy dCAofjFrQiBvciBzbykuIFdoaWNoCisgKiBpcyBsaWtlbHkgdG8gYmUgcG9v ciwgZHVlIHRvIHRoZSBsYWNrIG9mIHJlcGV0aXRpb24uCisgKgorICogT25l IHBvc3NpYmxlIGN1cmUgdG8gdGhhdCBtaWdodCBiZSBzdG9yaW5nIHRoZSBi dWNrZXRzIGZpcnN0LCBhbmQKKyAqIHRoZW4gdGhlIGRlZHVwbGljYXRlZCBh cnJheXMuIFRoZSBidWNrZXRzIG1pZ2h0IGJlIGJldHRlciBzdWl0ZWQKKyAq IGZvciBjb21wcmVzc2lvbi4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCB0 aGUgZW5jb2Rpbmcgc2NoZW1lIGlzIGEgY29udGV4dC1hd2FyZSBjb21wcmVz c2lvbiwKKyAqIHVzdWFsbHkgY29tcHJlc3NpbmcgdG8gfjMwJSAob3IgbGVz cywgd2l0aCBsYXJnZSBkYXRhIHR5cGVzKS4gU28gdGhlCisgKiBsYWNrIG9m IHBnbHogY29tcHJlc3Npb24gbWF5IGJlIE9LLgorICoKKyAqIFhYWCBCdXQg bWF5YmUgd2UgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gY29tcHJlc3MgdGhpcywg dG8gc2F2ZSBvbgorICogICAgIHBsYW5uaW5nIHRpbWU/CisgKgorICogVE9E TyBUcnkgc3RvcmluZyB0aGUgYnVja2V0cyAvIGRlZHVwbGljYXRlZCBhcnJh eXMgaW4gcmV2ZXJzZSBvcmRlciwKKyAqICAgICAgbWVhc3VyZSBpbXBhY3Qg b24gY29tcHJlc3Npb24uCisgKgorICoKKyAqIERlc2VyaWFsaXphdGlvbgor ICogLS0tLS0tLS0tLS0tLS0tCisgKiBUaGUgZGVzZXJpYWxpemF0aW9uIGlz IGN1cnJlbnRseSBpbXBsZW1lbnRlZCBzbyB0aGF0IGl0IHJlY29uc3RydWN0 cworICogdGhlIGhpc3RvZ3JhbSBiYWNrIGludG8gdGhlIHNhbWUgc3RydWN0 dXJlcyAtIHRoaXMgaW52b2x2ZXMgcXVpdGUKKyAqIGEgZmV3IG9mIG1lbWNw eSgpIGFuZCBwYWxsb2MoKSwgYnV0IG1heWJlIHdlIGNvdWxkIGNyZWF0ZSBh IHNwZWNpYWwKKyAqIHN0cnVjdHVyZSBmb3IgdGhlIHNlcmlhbGl6ZWQgaGlz dG9ncmFtLCBhbmQgYWNjZXNzIHRoZSBkYXRhIGRpcmVjdGx5LAorICogd2l0 aG91dCB0aGUgdW5wYWNraW5nLgorICoKKyAqIE5vdCBvbmx5IGl0IHdvdWxk IHNhdmUgc29tZSBtZW1vcnkgYW5kIENQVSB0aW1lLCBidXQgbWlnaHQgYWN0 dWFsbHkKKyAqIHdvcmsgYmV0dGVyIHdpdGggQ1BVIGNhY2hlcyAobm90IHBv bGx1dGluZyB0aGUgY2FjaGVzKS4KKyAqCisgKiBUT0RPIFRyeSB0byBrZWVw IHRoZSBjb21wcmVzc2VkIGZvcm0sIGluc3RlYWQgb2YgZGVzZXJpYWxpemlu ZyBpdCB0bworICogICAgICBNVkhpc3RvZ3JhbS9NVkJ1Y2tldC4KKyAqCisg KgorICogR2VuZXJhbCBUT0RPcworICogLS0tLS0tLS0tLS0tLQorICogRklY TUUgVGhpcyBwcm9iYWJseSBsZWFrcyBtZW1vcnksIG9yIGF0IGxlYXN0IHVz ZXMgaXQgaW5lZmZpY2llbnRseQorICogICAgICAgKG1hbnkgc21hbGwgcGFs bG9jKCkgY2FsbHMgaW5zdGVhZCBvZiBhIGxhcmdlIG9uZSkuCisgKgorICog RklYTUUgVGhpcyBwcm9iYWJseSBsZWFrcyBtZW1vcnksIG9yIGF0IGxlYXN0 IHVzZXMgaXQgaW5lZmZpY2llbnRseQorICogICAgICAgKG1hbnkgc21hbGwg cGFsbG9jKCkgY2FsbHMgaW5zdGVhZCBvZiBhIGxhcmdlIG9uZSkuCisgKgor ICogVE9ETyBDb25zaWRlciBwYWNraW5nIGJvb2xlYW4gZmxhZ3MgKE5VTEwp IGZvciBlYWNoIGl0ZW0gaW50byAnY2hhcicKKyAqICAgICAgb3IgYSBsb25n ZXIgdHlwZSAoaW5zdGVhZCBvZiB1c2luZyBhbiBhcnJheSBvZiBib29sIGl0 ZW1zKS4KKyAqLworYnl0ZWEgKgorc2VyaWFsaXplX212X2hpc3RvZ3JhbShN Vkhpc3RvZ3JhbSBoaXN0b2dyYW0sIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJ CQkgICBWYWNBdHRyU3RhdHMgKipzdGF0cykKK3sKKwlpbnQgaSA9IDAsIGog PSAwOworCVNpemUJdG90YWxfbGVuZ3RoID0gMDsKKworCWJ5dGVhICAqb3V0 cHV0ID0gTlVMTDsKKwljaGFyICAgKmRhdGEgPSBOVUxMOworCisJaW50CQlu YnVja2V0cyA9IGhpc3RvZ3JhbS0+bmJ1Y2tldHM7CisJaW50CQluZGltcyAg ICA9IGhpc3RvZ3JhbS0+bmRpbWVuc2lvbnM7CisKKwkvKiBhbGxvY2F0ZWQg Zm9yIHNlcmlhbGl6ZWQgYnVja2V0IGRhdGEgKi8KKwlpbnQJCWJ1Y2tldHNp emUgPSBCVUNLRVRfU0laRShuZGltcyk7CisJY2hhciAgICpidWNrZXQgPSBw YWxsb2MwKGJ1Y2tldHNpemUpOworCisJLyogdmFsdWVzIHBlciBkaW1lbnNp b24gKGFuZCBudW1iZXIgb2Ygbm9uLU5VTEwgdmFsdWVzKSAqLworCURhdHVt ICoqdmFsdWVzID0gKERhdHVtKiopcGFsbG9jMChzaXplb2YoRGF0dW0qKSAq IG5kaW1zKTsKKwlpbnQJICAgKmNvdW50cyA9IChpbnQqKXBhbGxvYzAoc2l6 ZW9mKGludCkgKiBuZGltcyk7CisKKwkvKiBpbmZvIGFib3V0IGRpbWVuc2lv bnMgKGZvciBkZXNlcmlhbGl6ZSkgKi8KKwlEaW1lbnNpb25JbmZvICogaW5m bworCQkJCT0gKERpbWVuc2lvbkluZm8gKilwYWxsb2MwKHNpemVvZihEaW1l bnNpb25JbmZvKSpuZGltcyk7CisKKwkvKiBzb3J0IHN1cHBvcnQgZGF0YSAq LworCVNvcnRTdXBwb3J0CXNzdXAgPSAoU29ydFN1cHBvcnQpcGFsbG9jMChz aXplb2YoU29ydFN1cHBvcnREYXRhKSpuZGltcyk7CisKKwkvKiBjb2xsZWN0 IGFuZCBkZWR1cGxpY2F0ZSB2YWx1ZXMgZm9yIGVhY2ggZGltZW5zaW9uIHNl cGFyYXRlbHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwl7 CisJCWludCBjb3VudDsKKwkJU3RkQW5hbHl6ZURhdGEgKnRtcCA9IChTdGRB bmFseXplRGF0YSAqKXN0YXRzW2ldLT5leHRyYV9kYXRhOworCisJCS8qIGtl ZXAgaW1wb3J0YW50IGluZm8gYWJvdXQgdGhlIGRhdGEgdHlwZSAqLworCQlp bmZvW2ldLnR5cGxlbiAgID0gc3RhdHNbaV0tPmF0dHJ0eXBlLT50eXBsZW47 CisJCWluZm9baV0udHlwYnl2YWwgPSBzdGF0c1tpXS0+YXR0cnR5cGUtPnR5 cGJ5dmFsOworCisJCS8qCisJCSAqIEFsbG9jYXRlIHNwYWNlIGZvciBhbGwg bWluL21heCB2YWx1ZXMsIGluY2x1ZGluZyBOVUxMcworCQkgKiAod2Ugd29u J3QgdXNlIHRoZW0sIGJ1dCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IGFyZSB0 aGVyZSksCisJCSAqIGFuZCB0aGVuIGNvbGxlY3QgYWxsIG5vbi1OVUxMIHZh bHVlcy4KKwkJICovCisJCXZhbHVlc1tpXSA9IChEYXR1bSopcGFsbG9jMChz aXplb2YoRGF0dW0pICogbmJ1Y2tldHMgKiAyKTsKKworCQlmb3IgKGogPSAw OyBqIDwgaGlzdG9ncmFtLT5uYnVja2V0czsgaisrKQorCQl7CisJCQkvKiBz a2lwIGJ1Y2tldHMgd2hlcmUgdGhpcyBkaW1lbnNpb24gaXMgTlVMTC1vbmx5 ICovCisJCQlpZiAoISBoaXN0b2dyYW0tPmJ1Y2tldHNbal0tPm51bGxzb25s eVtpXSkKKwkJCXsKKwkJCQl2YWx1ZXNbaV1bY291bnRzW2ldXSA9IGhpc3Rv Z3JhbS0+YnVja2V0c1tqXS0+bWluW2ldOworCQkJCWNvdW50c1tpXSArPSAx OworCisJCQkJdmFsdWVzW2ldW2NvdW50c1tpXV0gPSBoaXN0b2dyYW0tPmJ1 Y2tldHNbal0tPm1heFtpXTsKKwkJCQljb3VudHNbaV0gKz0gMTsKKwkJCX0K KwkJfQorCisJCS8qIHRoZXJlIGFyZSBqdXN0IE5VTEwgdmFsdWVzIGluIHRo aXMgZGltZW5zaW9uICovCisJCWlmIChjb3VudHNbaV0gPT0gMCkKKwkJCWNv bnRpbnVlOworCisJCS8qIHNvcnQgYW5kIGRlZHVwbGljYXRlICovCisJCXNz dXBbaV0uc3N1cF9jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKwkJc3N1 cFtpXS5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09MTEFUSU9OX09JRDsK KwkJc3N1cFtpXS5zc3VwX251bGxzX2ZpcnN0ID0gZmFsc2U7CisKKwkJUHJl cGFyZVNvcnRTdXBwb3J0RnJvbU9yZGVyaW5nT3AodG1wLT5sdG9wciwgJnNz dXBbaV0pOworCisJCXFzb3J0X2FyZyh2YWx1ZXNbaV0sIGNvdW50c1tpXSwg c2l6ZW9mKERhdHVtKSwKKwkJCQkJCQkJCQljb21wYXJlX3NjYWxhcnNfc2lt cGxlLCAmc3N1cFtpXSk7CisKKwkJLyoKKwkJICogV2FsayB0aHJvdWdoIHRo ZSBhcnJheSBhbmQgZWxpbWluYXRlIGR1cGxpY2l0YXRlIHZhbHVlcywgYnV0 CisJCSAqIGtlZXAgdGhlIG9yZGVyaW5nIChzbyB0aGF0IHdlIGNhbiBkbyBi c2VhcmNoIGxhdGVyKS4gV2Uga25vdworCQkgKiB0aGVyZSdzIGF0IGxlYXN0 IDEgaXRlbSwgc28gd2UgY2FuIHNraXAgdGhlIGZpcnN0IGVsZW1lbnQuCisJ CSAqLworCQljb3VudCA9IDE7CS8qIG51bWJlciBvZiBkZWR1cGxpY2F0ZWQg aXRlbXMgKi8KKwkJZm9yIChqID0gMTsgaiA8IGNvdW50c1tpXTsgaisrKQor CQl7CisJCQkvKiBpZiBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91 cyB2YWx1ZSwgd2UgbmVlZCB0byBrZWVwIGl0ICovCisJCQlpZiAoY29tcGFy ZV9kYXR1bXNfc2ltcGxlKHZhbHVlc1tpXVtqLTFdLCB2YWx1ZXNbaV1bal0s ICZzc3VwW2ldKSAhPSAwKQorCQkJeworCQkJCS8qIFhYWDogbm90IG5lZWRl ZCBpZiAoY291bnQgPT0gaikgKi8KKwkJCQl2YWx1ZXNbaV1bY291bnRdID0g dmFsdWVzW2ldW2pdOworCQkJCWNvdW50ICs9IDE7CisJCQl9CisJCX0KKwor CQkvKiBtYWtlIHN1cmUgd2UgZml0IGludG8gdWludDE2ICovCisJCUFzc2Vy dChjb3VudCA8PSBVSU5UMTZfTUFYKTsKKworCQkvKiBrZWVwIGluZm8gYWJv dXQgdGhlIGRlZHVwbGljYXRlZCBjb3VudCAqLworCQlpbmZvW2ldLm52YWx1 ZXMgPSBjb3VudDsKKworCQkvKiBjb21wdXRlIHNpemUgb2YgdGhlIHNlcmlh bGl6ZWQgZGF0YSAqLworCQlpZiAoaW5mb1tpXS50eXBsZW4gPiAwKQorCQkJ LyogYnl2YWwgb3IgYnlyZWYsIGJ1dCB3aXRoIGZpeGVkIGxlbmd0aCAobmFt ZSwgdGlkLCAuLi4pICovCisJCQlpbmZvW2ldLm5ieXRlcyA9IGluZm9baV0u bnZhbHVlcyAqIGluZm9baV0udHlwbGVuOworCQllbHNlIGlmIChpbmZvW2ld LnR5cGxlbiA9PSAtMSkKKwkJCS8qIHZhcmxlbmEsIHNvIGp1c3QgdXNlIFZB UlNJWkVfQU5ZICovCisJCQlmb3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFs dWVzOyBqKyspCisJCQkJaW5mb1tpXS5uYnl0ZXMgKz0gVkFSU0laRV9BTlko dmFsdWVzW2ldW2pdKTsKKwkJZWxzZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0g LTIpCisJCQkvKiBjc3RyaW5nLCBzbyBzaW1wbHkgc3RybGVuICovCisJCQlm b3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFsdWVzOyBqKyspCisJCQkJaW5m b1tpXS5uYnl0ZXMgKz0gc3RybGVuKERhdHVtR2V0UG9pbnRlcih2YWx1ZXNb aV1bal0pKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVua25vd24gZGF0 YSB0eXBlIHR5cGJ5dmFsPSVkIHR5cGxlbj0lZCIsCisJCQkJaW5mb1tpXS50 eXBieXZhbCwgaW5mb1tpXS50eXBsZW4pOworCX0KKworCS8qCisJICogTm93 IHdlIGZpbmFsbHkga25vdyBob3cgbXVjaCBzcGFjZSB3ZSdsbCBuZWVkIGZv ciB0aGUgc2VyaWFsaXplZAorCSAqIGhpc3RvZ3JhbSwgYXMgaXQgY29udGFp bnMgdGhlc2UgZmllbGRzOgorCSAqCisJICogLSBsZW5ndGggKDRCKSBmb3Ig dmFybGVuYQorCSAqIC0gbWFnaWMgKDRCKQorCSAqIC0gdHlwZSAoNEIpCisJ ICogLSBuZGltZW5zaW9ucyAoNEIpCisJICogLSBuYnVja2V0cyAoNEIpCisJ ICogLSBpbmZvIChuZGltICogc2l6ZW9mKERpbWVuc2lvbkluZm8pCisJICog LSBhcnJheXMgb2YgdmFsdWVzIGZvciBlYWNoIGRpbWVuc2lvbgorCSAqIC0g c2VyaWFsaXplZCBidWNrZXRzIChuYnVja2V0cyAqIGJ1Y2tldHNpemUpCisJ ICoKKwkgKiBTbyB0aGUgJ2hlYWRlcicgc2l6ZSBpcyAyMEIgKyBuZGltICog c2l6ZW9mKERpbWVuc2lvbkluZm8pIGFuZAorCSAqIHRoZW4gd2UnbGwgcGxh Y2UgdGhlIGRhdGEgKGFuZCBidWNrZXRzKS4KKwkgKi8KKwl0b3RhbF9sZW5n dGggPSAoc2l6ZW9mKGludDMyKSArIG9mZnNldG9mKE1WSGlzdG9ncmFtRGF0 YSwgYnVja2V0cykKKwkJCQkJKyBuZGltcyAqIHNpemVvZihEaW1lbnNpb25J bmZvKQorCQkJCQkrIG5idWNrZXRzICogYnVja2V0c2l6ZSk7CisKKwkvKiBh Y2NvdW50IGZvciB0aGUgZGVkdXBsaWNhdGVkIGRhdGEgKi8KKwlmb3IgKGkg PSAwOyBpIDwgbmRpbXM7IGkrKykKKwkJdG90YWxfbGVuZ3RoICs9IGluZm9b aV0ubmJ5dGVzOworCisJLyogZW5mb3JjZSBhcmJpdHJhcnkgbGltaXQgb2Yg MU1CICovCisJaWYgKHRvdGFsX2xlbmd0aCA+ICgxMCAqIDEwMjQgKiAxMDI0 KSkKKwkJZWxvZyhFUlJPUiwgInNlcmlhbGl6ZWQgaGlzdG9ncmFtIGV4Y2Vl ZHMgMTBNQiAoJWxkID4gJWQpIiwKKwkJCQkJdG90YWxfbGVuZ3RoLCAoMTAg KiAxMDI0ICogMTAyNCkpOworCisJLyogYWxsb2NhdGUgc3BhY2UgZm9yIHRo ZSBzZXJpYWxpemVkIGhpc3RvZ3JhbSBsaXN0LCBzZXQgaGVhZGVyICovCisJ b3V0cHV0ID0gKGJ5dGVhKilwYWxsb2MwKHRvdGFsX2xlbmd0aCk7CisJU0VU X1ZBUlNJWkUob3V0cHV0LCB0b3RhbF9sZW5ndGgpOworCisJLyogd2UnbGwg dXNlICdkYXRhJyB0byBrZWVwIHRyYWNrIG9mIHRoZSBwbGFjZSB0byB3cml0 ZSBkYXRhICovCisJZGF0YSA9IFZBUkRBVEEob3V0cHV0KTsKKworCW1lbWNw eShkYXRhLCBoaXN0b2dyYW0sIG9mZnNldG9mKE1WSGlzdG9ncmFtRGF0YSwg YnVja2V0cykpOworCWRhdGEgKz0gb2Zmc2V0b2YoTVZIaXN0b2dyYW1EYXRh LCBidWNrZXRzKTsKKworCW1lbWNweShkYXRhLCBpbmZvLCBzaXplb2YoRGlt ZW5zaW9uSW5mbykgKiBuZGltcyk7CisJZGF0YSArPSBzaXplb2YoRGltZW5z aW9uSW5mbykgKiBuZGltczsKKworCS8qIHZhbHVlIGFycmF5IGZvciBlYWNo IGRpbWVuc2lvbiAqLworCWZvciAoaSA9IDA7IGkgPCBuZGltczsgaSsrKQor CXsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCWNoYXIgKnRtcCA9 IGRhdGE7CisjZW5kaWYKKwkJZm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZh bHVlczsgaisrKQorCQl7CisJCQlpZiAoaW5mb1tpXS50eXBsZW4gPiAwKQor CQkJeworCQkJCS8qIHBhc2VkIGJ5IHZhbHVlIG9yIHJlZmVyZW5jZSwgYnV0 IGZpeGVkIGxlbmd0aCAqLworCQkJCW1lbWNweShkYXRhLCAmdmFsdWVzW2ld W2pdLCBpbmZvW2ldLnR5cGxlbik7CisJCQkJZGF0YSArPSBpbmZvW2ldLnR5 cGxlbjsKKwkJCX0KKwkJCWVsc2UgaWYgKGluZm9baV0udHlwbGVuID09IC0x KQorCQkJeworCQkJCS8qIHZhcmxlbmEgKi8KKwkJCQltZW1jcHkoZGF0YSwg RGF0dW1HZXRQb2ludGVyKHZhbHVlc1tpXVtqXSksCisJCQkJCQkJVkFSU0la RV9BTlkodmFsdWVzW2ldW2pdKSk7CisJCQkJZGF0YSArPSBWQVJTSVpFX0FO WSh2YWx1ZXNbaV1bal0pOworCQkJfQorCQkJZWxzZSBpZiAoaW5mb1tpXS50 eXBsZW4gPT0gLTIpCisJCQl7CisJCQkJLyogY3N0cmluZyAoZG9uJ3QgZm9y Z2V0IHRoZSBcMCB0ZXJtaW5hdG9yISkgKi8KKwkJCQltZW1jcHkoZGF0YSwg RGF0dW1HZXRQb2ludGVyKHZhbHVlc1tpXVtqXSksCisJCQkJCQkJc3RybGVu KERhdHVtR2V0UG9pbnRlcih2YWx1ZXNbaV1bal0pKSArIDEpOworCQkJCWRh dGEgKz0gc3RybGVuKERhdHVtR2V0UG9pbnRlcih2YWx1ZXNbaV1bal0pKSAr IDE7CisJCQl9CisJCX0KKwkJQXNzZXJ0KChkYXRhIC0gdG1wKSA9PSBpbmZv W2ldLm5ieXRlcyk7CisJfQorCisJLyogYW5kIGZpbmFsbHksIHRoZSBoaXN0 b2dyYW0gYnVja2V0cyAqLworCWZvciAoaSA9IDA7IGkgPCBuYnVja2V0czsg aSsrKQorCXsKKwkJLyogZG9uJ3Qgd3JpdGUgYmV5b25kIHRoZSBhbGxvY2F0 ZWQgc3BhY2UgKi8KKwkJQXNzZXJ0KGRhdGEgPD0gKGNoYXIqKW91dHB1dCAr IHRvdGFsX2xlbmd0aCAtIGJ1Y2tldHNpemUpOworCisJCS8qIHJlc2V0IHRo ZSB2YWx1ZXMgZm9yIGVhY2ggaXRlbSAqLworCQltZW1zZXQoYnVja2V0LCAw LCBidWNrZXRzaXplKTsKKworCQkqQlVDS0VUX05UVVBMRVMoYnVja2V0KSAg ID0gaGlzdG9ncmFtLT5idWNrZXRzW2ldLT5udHVwbGVzOworCisJCWZvciAo aiA9IDA7IGogPCBuZGltczsgaisrKQorCQl7CisJCQkvKiBkbyB0aGUgbG9v a3VwIG9ubHkgZm9yIG5vbi1OVUxMIHZhbHVlcyAqLworCQkJaWYgKCEgaGlz dG9ncmFtLT5idWNrZXRzW2ldLT5udWxsc29ubHlbal0pCisJCQl7CisJCQkJ dWludDE2IGlkeDsKKwkJCQlEYXR1bSAqIHYgPSBOVUxMOworCQkJCXNzdXBf cHJpdmF0ZSA9ICZzc3VwW2pdOworCisJCQkJLyogbWluIGJvdW5kYXJ5ICov CisJCQkJdiA9IChEYXR1bSopYnNlYXJjaCgmaGlzdG9ncmFtLT5idWNrZXRz W2ldLT5taW5bal0sCisJCQkJCQkJCXZhbHVlc1tqXSwgaW5mb1tqXS5udmFs dWVzLCBzaXplb2YoRGF0dW0pLAorCQkJCQkJCQlic2VhcmNoX2NvbXBhcmF0 b3IpOworCisJCQkJaWYgKHYgPT0gTlVMTCkKKwkJCQkJZWxvZyhFUlJPUiwg InZhbHVlIGZvciBkaW0gJWQgbm90IGZvdW5kIGluIGFycmF5Iiwgaik7CisK KwkJCQkvKiBjb21wdXRlIGluZGV4IHdpdGhpbiB0aGUgYXJyYXkgKi8KKwkJ CQlpZHggPSAodiAtIHZhbHVlc1tqXSk7CisKKwkJCQlBc3NlcnQoKGlkeCA+ PSAwKSAmJiAoaWR4IDwgaW5mb1tqXS5udmFsdWVzKSk7CisKKwkJCQlCVUNL RVRfTUlOX0lOREVYRVMoYnVja2V0LCBuZGltcylbal0gPSBpZHg7CisKKwkJ CQkvKiBtYXggYm91bmRhcnkgKi8KKwkJCQl2ID0gKERhdHVtKilic2VhcmNo KCZoaXN0b2dyYW0tPmJ1Y2tldHNbaV0tPm1heFtqXSwKKwkJCQkJCQkJdmFs dWVzW2pdLCBpbmZvW2pdLm52YWx1ZXMsIHNpemVvZihEYXR1bSksCisJCQkJ CQkJCWJzZWFyY2hfY29tcGFyYXRvcik7CisKKwkJCQlpZiAodiA9PSBOVUxM KQorCQkJCQllbG9nKEVSUk9SLCAidmFsdWUgZm9yIGRpbSAlZCBub3QgZm91 bmQgaW4gYXJyYXkiLCBqKTsKKworCQkJCS8qIGNvbXB1dGUgaW5kZXggd2l0 aGluIHRoZSBhcnJheSAqLworCQkJCWlkeCA9ICh2IC0gdmFsdWVzW2pdKTsK KworCQkJCUFzc2VydCgoaWR4ID49IDApICYmIChpZHggPCBpbmZvW2pdLm52 YWx1ZXMpKTsKKworCQkJCUJVQ0tFVF9NQVhfSU5ERVhFUyhidWNrZXQsIG5k aW1zKVtqXSA9IGlkeDsKKwkJCX0KKwkJfQorCisJCS8qIGNvcHkgZmxhZ3Mg KG51bGxzLCBtaW4vbWF4IGluY2x1c2l2ZSkgKi8KKwkJbWVtY3B5KEJVQ0tF VF9OVUxMU19PTkxZKGJ1Y2tldCwgbmRpbXMpLAorCQkJCWhpc3RvZ3JhbS0+ YnVja2V0c1tpXS0+bnVsbHNvbmx5LCBzaXplb2YoYm9vbCkgKiBuZGltcyk7 CisKKwkJbWVtY3B5KEJVQ0tFVF9NSU5fSU5DTChidWNrZXQsIG5kaW1zKSwK KwkJCQloaXN0b2dyYW0tPmJ1Y2tldHNbaV0tPm1pbl9pbmNsdXNpdmUsIHNp emVvZihib29sKSAqIG5kaW1zKTsKKworCQltZW1jcHkoQlVDS0VUX01BWF9J TkNMKGJ1Y2tldCwgbmRpbXMpLAorCQkJCWhpc3RvZ3JhbS0+YnVja2V0c1tp XS0+bWF4X2luY2x1c2l2ZSwgc2l6ZW9mKGJvb2wpICogbmRpbXMpOworCisJ CS8qIGNvcHkgdGhlIGl0ZW0gaW50byB0aGUgYXJyYXkgKi8KKwkJbWVtY3B5 KGRhdGEsIGJ1Y2tldCwgYnVja2V0c2l6ZSk7CisKKwkJZGF0YSArPSBidWNr ZXRzaXplOworCX0KKworCS8qIGF0IHRoaXMgcG9pbnQgd2UgZXhwZWN0IHRv IG1hdGNoIHRoZSB0b3RhbF9sZW5ndGggZXhhY3RseSAqLworCUFzc2VydCgo ZGF0YSAtIChjaGFyKilvdXRwdXQpID09IHRvdGFsX2xlbmd0aCk7CisKKwkv KiBGSVhNRSBmcmVlIHRoZSB2YWx1ZXMvY291bnRzIGFycmF5cyBoZXJlICov CisKKwlyZXR1cm4gb3V0cHV0OworfQorCisvKgorICogUmV0dXJucyBoaXN0 b2dyYW0gaW4gYSBwYXJ0aWFsbHktc2VyaWFsaXplZCBmb3JtIChrZWVwcyB0 aGUgYm91bmRhcnkKKyAqIHZhbHVlcyBkZWR1cGxpY2F0ZWQsIHNvIHRoYXQg aXQncyBwb3NzaWJsZSB0byBvcHRpbWl6ZSB0aGUgZXN0aW1hdGlvbgorICog cGFydCBieSBjYWNoaW5nIGZ1bmN0aW9uIGNhbGwgcmVzdWx0cyBiZXR3ZWVu IGJ1Y2tldHMgZXRjLikuCisgKi8KK01WU2VyaWFsaXplZEhpc3RvZ3JhbQor ZGVzZXJpYWxpemVfbXZfaGlzdG9ncmFtKGJ5dGVhICogZGF0YSkKK3sKKwlp bnQgaSA9IDAsIGogPSAwOworCisJU2l6ZQlleHBlY3RlZF9zaXplOworCWNo YXIgICAqdG1wID0gTlVMTDsKKworCU1WU2VyaWFsaXplZEhpc3RvZ3JhbSBo aXN0b2dyYW07CisJRGltZW5zaW9uSW5mbyAqaW5mbzsKKworCWludAkJbmJ1 Y2tldHM7CisJaW50CQluZGltczsKKwlpbnQJCWJ1Y2tldHNpemU7CisKKwkv KiB0ZW1wb3JhcnkgZGVzZXJpYWxpemF0aW9uIGJ1ZmZlciAqLworCWludAkJ YnVmZmxlbjsKKwljaGFyICAgKmJ1ZmY7CisJY2hhciAgICpwdHI7CisKKwlp ZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChWQVJT SVpFX0FOWV9FWEhEUihkYXRhKSA8IG9mZnNldG9mKE1WU2VyaWFsaXplZEhp c3RvZ3JhbURhdGEsYnVja2V0cykpCisJCWVsb2coRVJST1IsICJpbnZhbGlk IGhpc3RvZ3JhbSBzaXplICVsZCAoZXhwZWN0ZWQgYXQgbGVhc3QgJWxkKSIs CisJCQkgVkFSU0laRV9BTllfRVhIRFIoZGF0YSksIG9mZnNldG9mKE1WU2Vy aWFsaXplZEhpc3RvZ3JhbURhdGEsYnVja2V0cykpOworCisJLyogcmVhZCB0 aGUgaGlzdG9ncmFtIGhlYWRlciAqLworCWhpc3RvZ3JhbQorCQk9IChNVlNl cmlhbGl6ZWRIaXN0b2dyYW0pcGFsbG9jKHNpemVvZihNVlNlcmlhbGl6ZWRI aXN0b2dyYW1EYXRhKSk7CisKKwkvKiBpbml0aWFsaXplIHBvaW50ZXIgdG8g dGhlIGRhdGEgcGFydCAoc2tpcCB0aGUgdmFybGVuYSBoZWFkZXIpICovCisJ dG1wID0gVkFSREFUQShkYXRhKTsKKworCS8qIGdldCB0aGUgaGVhZGVyIGFu ZCBwZXJmb3JtIGJhc2ljIHNhbml0eSBjaGVja3MgKi8KKwltZW1jcHkoaGlz dG9ncmFtLCB0bXAsIG9mZnNldG9mKE1WU2VyaWFsaXplZEhpc3RvZ3JhbURh dGEsIGJ1Y2tldHMpKTsKKwl0bXAgKz0gb2Zmc2V0b2YoTVZTZXJpYWxpemVk SGlzdG9ncmFtRGF0YSwgYnVja2V0cyk7CisKKwlpZiAoaGlzdG9ncmFtLT5t YWdpYyAhPSBNVlNUQVRfSElTVF9NQUdJQykKKwkJZWxvZyhFUlJPUiwgImlu dmFsaWQgaGlzdG9ncmFtIG1hZ2ljICVkIChleHBlY3RlZCAlZGQpIiwKKwkJ CSBoaXN0b2dyYW0tPm1hZ2ljLCBNVlNUQVRfSElTVF9NQUdJQyk7CisKKwlp ZiAoaGlzdG9ncmFtLT50eXBlICE9IE1WU1RBVF9ISVNUX1RZUEVfQkFTSUMp CisJCWVsb2coRVJST1IsICJpbnZhbGlkIGhpc3RvZ3JhbSB0eXBlICVkIChl eHBlY3RlZCAlZGQpIiwKKwkJCSBoaXN0b2dyYW0tPnR5cGUsIE1WU1RBVF9I SVNUX1RZUEVfQkFTSUMpOworCisJbmJ1Y2tldHMgPSBoaXN0b2dyYW0tPm5i dWNrZXRzOworCW5kaW1zICAgID0gaGlzdG9ncmFtLT5uZGltZW5zaW9uczsK KwlidWNrZXRzaXplID0gQlVDS0VUX1NJWkUobmRpbXMpOworCisJQXNzZXJ0 KChuYnVja2V0cyA+IDApICYmIChuYnVja2V0cyA8PSBNVlNUQVRfSElTVF9N QVhfQlVDS0VUUykpOworCUFzc2VydCgobmRpbXMgPj0gMikgJiYgKG5kaW1z IDw9IE1WU1RBVFNfTUFYX0RJTUVOU0lPTlMpKTsKKworCS8qCisJICogV2hh dCBzaXplIGRvIHdlIGV4cGVjdCB3aXRoIHRob3NlIHBhcmFtZXRlcnMgKGl0 J3MgaW5jb21wbGV0ZSwKKwkgKiBhcyB3ZSB5ZXQgaGF2ZSB0byBjb3VudCB0 aGUgYXJyYXkgc2l6ZXMgKGZyb20gRGltZW5zaW9uSW5mbworCSAqIHJlY29y ZHMpLgorCSAqLworCWV4cGVjdGVkX3NpemUgPSBvZmZzZXRvZihNVlNlcmlh bGl6ZWRIaXN0b2dyYW1EYXRhLGJ1Y2tldHMpICsKKwkJCQkJbmRpbXMgKiBz aXplb2YoRGltZW5zaW9uSW5mbykgKworCQkJCQkobmJ1Y2tldHMgKiBidWNr ZXRzaXplKTsKKworCS8qIGNoZWNrIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCB0 aGUgRGltZW5zaW9uSW5mbyByZWNvcmRzICovCisJaWYgKFZBUlNJWkVfQU5Z X0VYSERSKGRhdGEpIDwgZXhwZWN0ZWRfc2l6ZSkKKwkJZWxvZyhFUlJPUiwg ImludmFsaWQgaGlzdG9ncmFtIHNpemUgJWxkIChleHBlY3RlZCAlbGQpIiwK KwkJCSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSwgZXhwZWN0ZWRfc2l6ZSk7 CisKKwlpbmZvID0gKERpbWVuc2lvbkluZm8qKSh0bXApOworCXRtcCArPSBu ZGltcyAqIHNpemVvZihEaW1lbnNpb25JbmZvKTsKKworCS8qIGFjY291bnQg Zm9yIHRoZSB2YWx1ZSBhcnJheXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRp bXM7IGkrKykKKwkJZXhwZWN0ZWRfc2l6ZSArPSBpbmZvW2ldLm5ieXRlczsK KworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSAhPSBleHBlY3RlZF9z aXplKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBoaXN0b2dyYW0gc2l6ZSAl bGQgKGV4cGVjdGVkICVsZCkiLAorCQkJIFZBUlNJWkVfQU5ZX0VYSERSKGRh dGEpLCBleHBlY3RlZF9zaXplKTsKKworCS8qIGxvb2tzIE9LIC0gbm90IGNv cnJ1cHRlZCBvciBzb21ldGhpbmcgKi8KKworCS8qIG5vdyBsZXQncyBhbGxv Y2F0ZSBhIHNpbmdsZSBidWZmZXIgZm9yIGFsbCB0aGUgdmFsdWVzIGFuZCBj b3VudHMgKi8KKworCWJ1ZmZsZW4gPSAoc2l6ZW9mKGludCkgICsgc2l6ZW9m KERhdHVtKikpICogbmRpbXM7CisJZm9yIChpID0gMDsgaSA8IG5kaW1zOyBp KyspCisJeworCQkvKiBkb24ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgYnl2YWwg dHlwZXMsIG1hdGNoaW5nIERhdHVtICovCisJCWlmICghIChpbmZvW2ldLnR5 cGJ5dmFsICYmIChpbmZvW2ldLnR5cGxlbiA9PSBzaXplb2YoRGF0dW0pKSkp CisJCQlidWZmbGVuICs9IChzaXplb2YoRGF0dW0pICogaW5mb1tpXS5udmFs dWVzKTsKKwl9CisKKwkvKiBhbHNvLCBpbmNsdWRlIHNwYWNlIGZvciB0aGUg cmVzdWx0LCB0cmFja2luZyB0aGUgYnVja2V0cyAqLworCWJ1ZmZsZW4gKz0g bmJ1Y2tldHMgKiAoCisJCQkJc2l6ZW9mKE1WU2VyaWFsaXplZEJ1Y2tldCkg KwkJLyogYnVja2V0IHBvaW50ZXIgKi8KKwkJCQlzaXplb2YoTVZTZXJpYWxp emVkQnVja2V0RGF0YSkpOwkvKiBidWNrZXQgZGF0YSAqLworCisJYnVmZiA9 IHBhbGxvYyhidWZmbGVuKTsKKwlwdHIgID0gYnVmZjsKKworCWhpc3RvZ3Jh bS0+bnZhbHVlcyA9IChpbnQqKXB0cjsKKwlwdHIgKz0gKHNpemVvZihpbnQp ICogbmRpbXMpOworCisJaGlzdG9ncmFtLT52YWx1ZXMgPSAoRGF0dW0qKilw dHI7CisJcHRyICs9IChzaXplb2YoRGF0dW0qKSAqIG5kaW1zKTsKKworCS8q CisJICogRklYTUUgVGhpcyB1c2VzIHBvaW50ZXJzIHRvIHRoZSBvcmlnaW5h bCBkYXRhIGFycmF5ICh0aGUgdHlwZXMKKwkgKiAgICAgICBub3QgcGFzc2Vk IGJ5IHZhbHVlKSwgc28gd2hlbiBzb21lb25lIGZyZWVzIHRoZSBtZW1vcnks CisJICogICAgICAgZS5nLiBieSBkb2luZyBzb21ldGhpbmcgbGlrZSB0aGlz OgorCSAqCisJICogICAgICAgICAgIGJ5dGVhICogZGF0YSA9IC4uLiBmZXRj aCB0aGUgZGF0YSBmcm9tIGNhdGFsb2cgLi4uCisJICogICAgICAgICAgIE1D Vkxpc3QgbWN2bGlzdCA9IGRlc2VyaWFsaXplX21jdl9saXN0KGRhdGEpOwor CSAqICAgICAgICAgICBwZnJlZShkYXRhKTsKKwkgKgorCSAqICAgICAgIHRo ZW4gJ21jdmxpc3QnIHJlZmVyZW5jZXMgdGhlIGZyZWVkIG1lbW9yeS4gVGhp cyBuZWVkcyB0bworCSAqICAgICAgIGNvcHkgdGhlIHBpZWNlcy4KKwkgKgor CSAqIFRPRE8gc2FtZSBhcyBpbiBNQ1YgZGVzZXJpYWxpemF0aW9uIC8gY29u c2lkZXIgbW92aW5nIHRvIGNvbW1vbi5jCisJICovCisJZm9yIChpID0gMDsg aSA8IG5kaW1zOyBpKyspCisJeworCQloaXN0b2dyYW0tPm52YWx1ZXNbaV0g PSBpbmZvW2ldLm52YWx1ZXM7CisKKwkJaWYgKGluZm9baV0udHlwYnl2YWwg JiYgaW5mb1tpXS50eXBsZW4gPT0gc2l6ZW9mKERhdHVtKSkKKwkJeworCQkJ LyogcGFzc2VkIGJ5IHZhbHVlIC8gRGF0dW0gLSBzaW1wbHkgcmV1c2UgdGhl IGFycmF5ICovCisJCQloaXN0b2dyYW0tPnZhbHVlc1tpXSA9IChEYXR1bSop dG1wOworCQkJdG1wICs9IGluZm9baV0ubmJ5dGVzOworCQl9CisJCWVsc2UK KwkJeworCQkJLyogYWxsIHRoZSB2YXJsZW5hIGRhdGEgbmVlZCBhIGNodW5r IGZyb20gdGhlIGJ1ZmZlciAqLworCQkJaGlzdG9ncmFtLT52YWx1ZXNbaV0g PSAoRGF0dW0qKXB0cjsKKwkJCXB0ciArPSAoc2l6ZW9mKERhdHVtKSAqIGlu Zm9baV0ubnZhbHVlcyk7CisKKwkJCWlmIChpbmZvW2ldLnR5cGJ5dmFsKQor CQkJeworCQkJCS8qIHBhc2VkIGJ5IHZhbHVlLCBidXQgc21hbGxlciB0aGFu IERhdHVtICovCisJCQkJZm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZhbHVl czsgaisrKQorCQkJCXsKKwkJCQkJLyoganVzdCBwb2ludCBpbnRvIHRoZSBh cnJheSAqLworCQkJCQltZW1jcHkoJmhpc3RvZ3JhbS0+dmFsdWVzW2ldW2pd LCB0bXAsIGluZm9baV0udHlwbGVuKTsKKwkJCQkJdG1wICs9IGluZm9baV0u dHlwbGVuOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGluZm9baV0udHlw bGVuID4gMCkKKwkJCXsKKwkJCQkvKiBwYXNlZCBieSByZWZlcmVuY2UsIGJ1 dCBmaXhlZCBsZW5ndGggKG5hbWUsIHRpZCwgLi4uKSAqLworCQkJCWZvciAo aiA9IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQl7CisJCQkJ CS8qIGp1c3QgcG9pbnQgaW50byB0aGUgYXJyYXkgKi8KKwkJCQkJaGlzdG9n cmFtLT52YWx1ZXNbaV1bal0gPSBQb2ludGVyR2V0RGF0dW0odG1wKTsKKwkJ CQkJdG1wICs9IGluZm9baV0udHlwbGVuOworCQkJCX0KKwkJCX0KKwkJCWVs c2UgaWYgKGluZm9baV0udHlwbGVuID09IC0xKQorCQkJeworCQkJCS8qIHZh cmxlbmEgKi8KKwkJCQlmb3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFsdWVz OyBqKyspCisJCQkJeworCQkJCQkvKiBqdXN0IHBvaW50IGludG8gdGhlIGFy cmF5ICovCisJCQkJCWhpc3RvZ3JhbS0+dmFsdWVzW2ldW2pdID0gUG9pbnRl ckdldERhdHVtKHRtcCk7CisJCQkJCXRtcCArPSBWQVJTSVpFX0FOWSh0bXAp OworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGluZm9baV0udHlwbGVuID09 IC0yKQorCQkJeworCQkJCS8qIGNzdHJpbmcgKi8KKwkJCQlmb3IgKGogPSAw OyBqIDwgaW5mb1tpXS5udmFsdWVzOyBqKyspCisJCQkJeworCQkJCQkvKiBq dXN0IHBvaW50IGludG8gdGhlIGFycmF5ICovCisJCQkJCWhpc3RvZ3JhbS0+ dmFsdWVzW2ldW2pdID0gUG9pbnRlckdldERhdHVtKHRtcCk7CisJCQkJCXRt cCArPSAoc3RybGVuKHRtcCkgKyAxKTsgLyogZG9uJ3QgZm9yZ2V0IHRoZSBc MCAqLworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWhpc3RvZ3JhbS0+YnVj a2V0cyA9IChNVlNlcmlhbGl6ZWRCdWNrZXQqKXB0cjsKKwlwdHIgKz0gKHNp emVvZihNVlNlcmlhbGl6ZWRCdWNrZXQpICogbmJ1Y2tldHMpOworCisJZm9y IChpID0gMDsgaSA8IG5idWNrZXRzOyBpKyspCisJeworCQlNVlNlcmlhbGl6 ZWRCdWNrZXQgYnVja2V0ID0gKE1WU2VyaWFsaXplZEJ1Y2tldClwdHI7CisJ CXB0ciArPSBzaXplb2YoTVZTZXJpYWxpemVkQnVja2V0RGF0YSk7CisKKwkJ YnVja2V0LT5udHVwbGVzCQkJPSAqQlVDS0VUX05UVVBMRVModG1wKTsKKwkJ YnVja2V0LT5udWxsc29ubHkJCT0gQlVDS0VUX05VTExTX09OTFkodG1wLCBu ZGltcyk7CisJCWJ1Y2tldC0+bWluX2luY2x1c2l2ZQk9IEJVQ0tFVF9NSU5f SU5DTCh0bXAsIG5kaW1zKTsKKwkJYnVja2V0LT5tYXhfaW5jbHVzaXZlCT0g QlVDS0VUX01BWF9JTkNMKHRtcCwgbmRpbXMpOworCisJCWJ1Y2tldC0+bWlu CQkJCT0gQlVDS0VUX01JTl9JTkRFWEVTKHRtcCwgbmRpbXMpOworCQlidWNr ZXQtPm1heAkJCQk9IEJVQ0tFVF9NQVhfSU5ERVhFUyh0bXAsIG5kaW1zKTsK KworCQloaXN0b2dyYW0tPmJ1Y2tldHNbaV0gPSBidWNrZXQ7CisKKwkJQXNz ZXJ0KHRtcCA8PSAoY2hhciopZGF0YSArIFZBUlNJWkVfQU5ZKGRhdGEpKTsK KworCQl0bXAgKz0gYnVja2V0c2l6ZTsKKwl9CisKKwkvKiBhdCB0aGlzIHBv aW50IHdlIGV4cGVjdCB0byBtYXRjaCB0aGUgdG90YWxfbGVuZ3RoIGV4YWN0 bHkgKi8KKwlBc3NlcnQoKHRtcCAtIFZBUkRBVEEoZGF0YSkpID09IGV4cGVj dGVkX3NpemUpOworCisJLyogd2Ugc2hvdWxkIGV4aGF1c3QgdGhlIG91dHB1 dCBidWZmZXIgZXhhY3RseSAqLworCUFzc2VydCgocHRyIC0gYnVmZikgPT0g YnVmZmxlbik7CisKKwlyZXR1cm4gaGlzdG9ncmFtOworfQorCisvKgorICog QnVpbGQgdGhlIGluaXRpYWwgYnVja2V0LCB3aGljaCB3aWxsIGJlIHRoZW4g c3BsaXQgaW50byBzbWFsbGVyIG9uZXMuCisgKi8KK3N0YXRpYyBNVkJ1Y2tl dAorY3JlYXRlX2luaXRpYWxfbXZfYnVja2V0KGludCBudW1yb3dzLCBIZWFw VHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkJIFZhY0F0 dHJTdGF0cyAqKnN0YXRzKQoreworCWludCBpOworCWludAludW1hdHRycyA9 IGF0dHJzLT5kaW0xOworCUhpc3RvZ3JhbUJ1aWxkIGRhdGEgPSBOVUxMOwor CisJLyogVE9ETyBhbGxvY2F0ZSBidWNrZXQgYXMgYSBzaW5nbGUgcGllY2Us IGluY2x1ZGluZyBhbGwgdGhlIGZpZWxkcy4gKi8KKwlNVkJ1Y2tldCBidWNr ZXQgPSAoTVZCdWNrZXQpcGFsbG9jMChzaXplb2YoTVZCdWNrZXREYXRhKSk7 CisKKwlBc3NlcnQobnVtcm93cyA+IDApOworCUFzc2VydChyb3dzICE9IE5V TEwpOworCUFzc2VydCgobnVtYXR0cnMgPj0gMikgJiYgKG51bWF0dHJzIDw9 IE1WU1RBVFNfTUFYX0RJTUVOU0lPTlMpKTsKKworCS8qIGFsbG9jYXRlIHRo ZSBwZXItZGltZW5zaW9uIGFycmF5cyAqLworCisJLyogZmxhZ3MgZm9yIG51 bGwtb25seSBkaW1lbnNpb25zICovCisJYnVja2V0LT5udWxsc29ubHkgPSAo Ym9vbCopcGFsbG9jMChudW1hdHRycyAqIHNpemVvZihib29sKSk7CisKKwkv KiBpbmNsdXNpdmVuZXNzIGJvdW5kYXJpZXMgLSBsb3dlci91cHBlciBib3Vu ZHMgKi8KKwlidWNrZXQtPm1pbl9pbmNsdXNpdmUgPSAoYm9vbCopcGFsbG9j MChudW1hdHRycyAqIHNpemVvZihib29sKSk7CisJYnVja2V0LT5tYXhfaW5j bHVzaXZlID0gKGJvb2wqKXBhbGxvYzAobnVtYXR0cnMgKiBzaXplb2YoYm9v bCkpOworCisJLyogbG93ZXIvdXBwZXIgYm91bmRhcmllcyAqLworCWJ1Y2tl dC0+bWluID0gKERhdHVtKilwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9mKERh dHVtKSk7CisJYnVja2V0LT5tYXggPSAoRGF0dW0qKXBhbGxvYzAobnVtYXR0 cnMgKiBzaXplb2YoRGF0dW0pKTsKKworCS8qIGJ1aWxkLWRhdGEgKi8KKwlk YXRhID0gKEhpc3RvZ3JhbUJ1aWxkKXBhbGxvYzAoc2l6ZW9mKEhpc3RvZ3Jh bUJ1aWxkRGF0YSkpOworCisJLyogbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVl cyAocGVyIGRpbWVuc2lvbikgKi8KKwlkYXRhLT5uZGlzdGluY3RzID0gKHVp bnQzMiopcGFsbG9jMChudW1hdHRycyAqIHNpemVvZih1aW50MzIpKTsKKwor CS8qIGFsbCB0aGUgc2FtcGxlIHJvd3MgZmFsbCBpbnRvIHRoZSBpbml0aWFs IGJ1Y2tldCAqLworCWRhdGEtPm51bXJvd3MgPSBudW1yb3dzOworCWRhdGEt PnJvd3MgPSByb3dzOworCisJYnVja2V0LT5idWlsZF9kYXRhID0gZGF0YTsK KworCS8qCisJICogVXBkYXRlIHRoZSBudW1iZXIgb2YgbmRpc3RpbmN0IGNv bWJpbmF0aW9ucyBpbiB0aGUgYnVja2V0ICh3aGljaAorCSAqIHdlIHVzZSB3 aGVuIHNlbGVjdGluZyBidWNrZXQgdG8gcGFydGl0aW9uKSwgYW5kIHRoZW4g bnVtYmVyIG9mCisJICogZGlzdGluY3QgdmFsdWVzIGZvciBlYWNoIHBhcnRp dGlvbiAod2hpY2ggd2UgdXNlIHdoZW4gY2hvb3NpbmcKKwkgKiB3aGljaCBk aW1lbnNpb24gdG8gc3BsaXQpLgorCSAqLworCXVwZGF0ZV9idWNrZXRfbmRp c3RpbmN0KGJ1Y2tldCwgYXR0cnMsIHN0YXRzKTsKKworCS8qIFVwZGF0ZSBu ZGlzdGluY3QgKGFuZCBhbHNvIHNldCBtaW4vbWF4KSBmb3IgYWxsIGRpbWVu c2lvbnMuICovCisJZm9yIChpID0gMDsgaSA8IG51bWF0dHJzOyBpKyspCisJ CXVwZGF0ZV9kaW1lbnNpb25fbmRpc3RpbmN0KGJ1Y2tldCwgaSwgYXR0cnMs IHN0YXRzLCB0cnVlKTsKKworCXJldHVybiBidWNrZXQ7Cit9CisKKy8qCisg KiBDaG9vc2UgdGhlIGJ1Y2tldCB0byBwYXJ0aXRpb24gbmV4dC4KKyAqCisg KiBUaGUgY3VycmVudCBjcml0ZXJpYSBpcyByYXRoZXIgc2ltcGxlLCBjaG9z ZW4gc28gdGhhdCB0aGUgYWxnb3JpdGhtCisgKiBwcm9kdWNlcyBidWNrZXRz IHdpdGggYWJvdXQgZXF1YWwgZnJlcXVlbmN5IGFuZCByZWd1bGFyIHNpemUu IFdlCisgKiBzZWxlY3QgdGhlIGJ1Y2tldCB3aXRoIHRoZSBoaWdoZXN0IG51 bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMsIGFuZAorICogdGhlbiBzcGxpdCBp dCBieSB0aGUgbG9uZ2VzdCBkaW1lbnNpb24uCisgKgorICogVGhlIGRpc3Rp bmN0IHZhbHVlcyBhcmUgdW5pZm9ybWx5IG1hcHBlZCB0byBbMCwxXSBpbnRl cnZhbCwgYW5kIHRoaXMKKyAqIGlzIHVzZWQgdG8gY29tcHV0ZSBsZW5ndGgg b2YgdGhlIHZhbHVlIHJhbmdlLgorICoKKyAqIE5PVEU6IFRoaXMgaXMgbm90 IHRoZSBzYW1lIGFycmF5IHVzZWQgZm9yIGRlZHVwbGljYXRpb24sIGFzIHRo aXMKKyAqICAgICAgIGNvbnRhaW5zIHZhbHVlcyBmb3IgYWxsIHRoZSB0dXBs ZXMgZnJvbSB0aGUgc2FtcGxlLCBub3QganVzdAorICogICAgICAgdGhlIGJv dW5kYXJ5IHZhbHVlcy4KKyAqCisgKiBSZXR1cm5zIGVpdGhlciBwb2ludGVy IHRvIHRoZSBidWNrZXQgc2VsZWN0ZWQgdG8gYmUgcGFydGl0aW9uZWQsCisg KiBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBidWNrZXRzIHRoYXQgbWF5IGJl IHNwbGl0IChpLmUuIGFsbCBidWNrZXRzCisgKiBjb250YWluIGEgc2luZ2xl IGRpc3RpbmN0IHZhbHVlKS4KKyAqCisgKiBUT0RPIENvbnNpZGVyIG90aGVy IHBhcnRpdGlvbmluZyBjcml0ZXJpYSAodi1vcHRpbWFsLCBtYXhkaWZmIGV0 Yy4pLgorICogICAgICBGb3IgZXhhbXBsZSB1c2UgdGhlICJidWNrZXQgdm9s dW1lIiAocHJvZHVjdCBvZiBkaW1lbnNpb24KKyAqICAgICAgbGVuZ3Rocykg dG8gc2VsZWN0IHRoZSBidWNrZXQuCisgKgorICogICAgICBXZSBuZWVkIGJ1 Y2tldHMgY29udGFpbmluZyBhYm91dCB0aGUgc2FtZSBudW1iZXIgb2YgdHVw bGVzIChzbworICogICAgICBhYm91dCB0aGUgc2FtZSBmcmVxdWVuY3kpLCBh cyB0aGF0IGxpbWl0cyB0aGUgZXJyb3Igd2hlbiB3ZQorICogICAgICBtYXRj aCB0aGUgYnVja2V0IHBhcnRpYWxseSAoaW4gdGhhdCBjYXNlIHVzZSAxLzIg dGhlIGJ1Y2tldCkuCisgKgorICogICAgICBXZSBhbHNvIG5lZWQgYnVja2V0 cyB3aXRoICJyZWd1bGFyIiBzaXplLCBpLmUuIG5vdCAibmFycm93IiBpbgor ICogICAgICBzb21lIGRpbWVuc2lvbnMgYW5kICJ3aWRlIiBpbiB0aGUgb3Ro ZXJzLCBiZWNhdXNlIHRoYXQgbWFrZXMKKyAqICAgICAgcGFydGlhbCBtYXRj aGVzIG1vcmUgbGlrZWx5IGFuZCBpbmNyZWFzZXMgdGhlIGVzdGltYXRpb24g ZXJyb3IsCisgKiAgICAgIGVzcGVjaWFsbHkgd2hlbiB0aGUgY2xhdXNlcyBt YXRjaCBtYW55IGJ1Y2tldHMgcGFydGlhbGx5LiBUaGlzCisgKiAgICAgIGlz IGVzcGVjaWFsbHkgc2VyaW91cyBmb3IgT1ItY2xhdXNlcywgYmVjYXVzZSBp biB0aGF0IGNhc2UgYW55CisgKiAgICAgIG9mIHRoZW0gbWF5IGFkZCB0aGUg YnVja2V0IGFzIGEgKHBhcnRpYWwpIG1hdGNoLiBXaXRoIEFORC1jbGF1c2Vz CisgKiAgICAgIGFsbCB0aGUgY2xhdXNlcyBoYXZlIHRvIG1hdGNoIHRoZSBi dWNrZXQsIHdoaWNoIG1ha2VzIHRoaXMgaXNzdWUKKyAqICAgICAgc29tZXdo YXQgbGVzcyBwcmVzc2luZy4KKyAqCisgKiAgICAgIEZvciBleGFtcGxlIHRo aXMgdGFibGU6CisgKgorICogICAgICAgICAgQ1JFQVRFIFRBQkxFIHQgQVMg U0VMRUNUIGkgQVMgYSwgaSBBUyBiCisgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhp KTsKKyAqICAgICAgICAgIEFMVEVSIFRBQkxFIHQgQUREIFNUQVRJU1RJQ1Mg KGhpc3RvZ3JhbSkgT04gKGEsYik7CisgKiAgICAgICAgICBBTkFMWVpFIHQ7 CisgKgorICogICAgICBJdCdzIGEgdmVyeSBzcGVjaWZpYyAoYW5kIHBlcmhh cHMgYXJ0aWZpY2lhbCkgZXhhbXBsZSwgYmVjYXVzZQorICogICAgICBldmVy eSBidWNrZXQgYWx3YXlzIGhhcyBleGFjdGx5IHRoZSBzYW1lIG51bWJlciBv ZiBkaXN0aW5jdAorICogICAgICB2YWx1ZXMgaW4gYWxsIGRpbWVuc2lvbnMs IHdoaWNoIG1ha2VzIHRoZSBwYXJ0aXRpb25pbmcgdHJpY2t5LgorICoKKyAq ICAgICAgVGhlbjoKKyAqCisgKiAgICAgICAgICBTRUxFQ1QgKiBGUk9NIHQg V0hFUkUgYSA8IDEwIEFORCBiIDwgMTA7CisgKgorICogICAgICBpcyBlc3Rp bWF0ZWQgdG8gcmV0dXJuIH4xMjAgcm93cywgd2hpbGUgaW4gcmVhbGl0eSBp dCByZXR1cm5zIDkuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTgorICogICAgICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKiAgICAgICBTZXEgU2NhbiBvbiB0ICAoY29zdD0wLjAwLi4x OTQyNS4wMCByb3dzPTExNyB3aWR0aD04KQorICogICAgICAgICAgICAgICAg ICAgICAgKGFjdHVhbCB0aW1lPTAuMTg1Li4yNzAuNzc0IHJvd3M9OSBsb29w cz0xKQorICogICAgICAgICBGaWx0ZXI6ICgoYSA8IDEwKSBBTkQgKGIgPCAx MCkpCisgKiAgICAgICAgIFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IDk5OTk5 MQorICoKKyAqICAgICAgd2hpbGUgdGhlIHF1ZXJ5IHVzaW5nIE9SIGNsYXVz ZXMgaXMgZXN0aW1hdGVkIGxpa2UgdGhpczoKKyAqCisgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOCisgKiAgICAg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgIFNlcSBTY2FuIG9uIHQg IChjb3N0PTAuMDAuLjE5NDI1LjAwIHJvd3M9ODEwMCB3aWR0aD04KQorICog ICAgICAgICAgICAgICAgICAgICAgKGFjdHVhbCB0aW1lPTAuMTE4Li4xODku OTE5IHJvd3M9OSBsb29wcz0xKQorICogICAgICAgICBGaWx0ZXI6ICgoYSA8 IDEwKSBPUiAoYiA8IDEwKSkKKyAqICAgICAgICAgUm93cyBSZW1vdmVkIGJ5 IEZpbHRlcjogOTk5OTkxCisgKgorICogICAgICB3aGljaCBpcyBjbGVhcmx5 IG11Y2ggd29yc2UuIFRoaXMgaGFwcGVucyBiZWNhdXNlIHRoZSBoaXN0b2dy YW0KKyAqICAgICAgY29udGFpbnMgYnVja2V0cyBsaWtlIHRoaXM6CisgKgor ICogICAgICAgICAgYnVja2V0IDU5MiAgWzMgMzAzMTBdIFszMDEzNCAzMDU5 M10gPT4gWzAuMDAwMjMzXQorICoKKyAqICAgICAgaS5lLiB0aGUgbGVuZ3Ro IG9mICJhIiBkaW1lbnNpb24gaXMgKDMwMzEwLTMpPTMwMzA3LCB3aGlsZSB0 aGUKKyAqICAgICAgbGVuZ3RoIG9mICJiIiBpcyAoMzA1OTMtMzAxMzQpPTQ1 OS4gU28gdGhlICJiIiBkaW1lbnNpb24gaXMgbXVjaAorICogICAgICBuYXJy b3dlciB0aGFuICJhIi4gT2YgY291cnNlLCB0aGVyZSBhcmUgYnVja2V0cyB3 aGVyZSAiYiIgaXMgdGhlCisgKiAgICAgIHdpZGVyIGRpbWVuc2lvbi4KKyAq CisgKiAgICAgIFRoaXMgaXMgcGFydGlhbGx5IG1pdGlnYXRlZCBieSBzZWxl Y3RpbmcgdGhlICJsb25nZXN0IiBkaW1lbnNpb24KKyAqICAgICAgaW4gcGFy dGl0aW9uX2J1Y2tldCgpIGJ1dCB0aGF0IG9ubHkgaGFwcGVucyBhZnRlciB3 ZSBhbHJlYWR5CisgKiAgICAgIHNlbGVjdGVkIHRoZSBidWNrZXQuIFNvIGlm IHdlIG5ldmVyIHNlbGVjdCB0aGUgYnVja2V0LCB3ZSBjYW4ndAorICogICAg ICByZWFsbHkgZml4IGl0IHRoZXJlLgorICoKKyAqICAgICAgVGhlIG90aGVy IHJlYXNvbiB3aHkgdGhpcyBwYXJ0aWN1bGFyIGV4YW1wbGUgYmVoYXZlcyBz byBwb29ybHkKKyAqICAgICAgaXMgZHVlIHRvIHRoZSB3YXkgd2Ugc3BsaXQg dGhlIHBhcnRpdGlvbiBpbiBwYXJ0aXRpb25fYnVja2V0KCkuCisgKiAgICAg IEN1cnJlbnRseSB3ZSBhdHRlbXB0IHRvIGRpdmlkZSB0aGUgYnVja2V0IGlu dG8gdHdvIHBhcnRzIHdpdGgKKyAqICAgICAgdGhlIHNhbWUgbnVtYmVyIG9m IHNhbXBsZWQgdHVwbGVzIChmcmVxdWVuY3kpLCBidXQgdGhhdCBkb2VzIG5v dAorICogICAgICB3b3JrIHdlbGwgd2hlbiBhbGwgdGhlIHR1cGxlcyBhcmUg c3F1YXNoZWQgb24gb25lIGVuZCBvZiB0aGUKKyAqICAgICAgYnVja2V0IChl LmcuIGV4YWN0bHkgYXQgdGhlIGRpYWdvbmFsLCBhcyBhPWIpLiBJbiB0aGF0 IGNhc2Ugd2UKKyAqICAgICAgc3BsaXQgdGhlIGJ1Y2tldCBpbnRvIGEgdGlu eSBidWNrZXQgb24gdGhlIGRpYWdvbmFsLCBhbmQgYSBodWdlCisgKiAgICAg IHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBidWNrZXQsIHdoaWNoIGlzIHN0aWxs IGdvaW5nIHRvIGJlIG5hcnJvdworICogICAgICBhbmQgd2UncmUgdW5saWtl bHkgdG8gZml4IHRoYXQuCisgKgorICogICAgICBTbyBwZXJoYXBzIHdlIG5l ZWQgdHdvIHBhcnRpdGlvbmluZyBzdHJhdGVnaWVzIC0gb25lIGFpbWluZyB0 bworICogICAgICBzcGxpdCBidWNrZXRzIHdpdGggaGlnaCBmcmVxdWVuY3kg KG51bWJlciBvZiBzYW1wbGVkIHJvd3MpLCB0aGUKKyAqICAgICAgb3RoZXIg YWltaW5nIHRvIHNwbGl0ICJsYXJnZSIgYnVja2V0cy4gQW5kIGFsdGVybmF0 aW5nIGJldHdlZW4KKyAqICAgICAgdGhlbSwgc29tZWhvdy4KKyAqCisgKiBU T0RPIEFsbG93aW5nIHRoZSBidWNrZXQgdG8gZGVnZW5lcmF0ZSB0byBhIHNp bmdsZSBjb21iaW5hdGlvbiBvZgorICogICAgICB2YWx1ZXMgbWFrZXMgaXQg cmF0aGVyIHN0cmFuZ2UgTUNWIGxpc3QuIE1heWJlIHdlIHNob3VsZCB1c2UK KyAqICAgICAgaGlnaGVyIGxvd2VyIGJvdW5kYXJ5LCBvciBtYXliZSBtYWtl IHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEKKyAqICAgICAgbW9yZSBjb21wbGV4 IChlLmcuIGNvbnNpZGVyIG51bWJlciBvZiByb3dzIGluIHRoZSBidWNrZXQs IGV0Yy4pLgorICoKKyAqICAgICAgVGhhdCBob3dldmVyIGlzIGRpZmZlcmVu dCBmcm9tIGJ1Y2tldHMgJ2RlZ2VuZXJhdGVkJyBvbmx5IGZvcgorICogICAg ICBzb21lIGRpbWVuc2lvbnMgKGUuZy4gaGFsZiBvZiB0aGVtKSwgd2hpY2gg aXMgcGVyZmVjdGx5CisgKiAgICAgIGFwcHJvcHJpYXRlIGZvciBzdGF0aXN0 aWNzIG9uIGEgY29tYmluYXRpb24gb2YgbG93IGFuZCBoaWdoCisgKiAgICAg IGNhcmRpbmFsaXR5IGNvbHVtbnMuCisgKi8KK3N0YXRpYyBNVkJ1Y2tldAor c2VsZWN0X2J1Y2tldF90b19wYXJ0aXRpb24oaW50IG5idWNrZXRzLCBNVkJ1 Y2tldCAqIGJ1Y2tldHMpCit7CisJaW50IGk7CisJaW50IG51bXJvd3MgPSAw OworCU1WQnVja2V0IGJ1Y2tldCA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBp IDwgbmJ1Y2tldHM7IGkrKykKKwl7CisJCUhpc3RvZ3JhbUJ1aWxkIGRhdGEg PSAoSGlzdG9ncmFtQnVpbGQpYnVja2V0c1tpXS0+YnVpbGRfZGF0YTsKKwkJ LyogaWYgdGhlIG51bWJlciBvZiByb3dzIGlzIGhpZ2hlciwgdXNlIHRoaXMg YnVja2V0ICovCisJCWlmICgoZGF0YS0+bmRpc3RpbmN0ID4gMikgJiYKKwkJ CShkYXRhLT5udW1yb3dzID4gbnVtcm93cykgJiYKKwkJCShkYXRhLT5udW1y b3dzID49IE1JTl9CVUNLRVRfUk9XUykpIHsKKwkJCWJ1Y2tldCA9IGJ1Y2tl dHNbaV07CisJCQludW1yb3dzID0gZGF0YS0+bnVtcm93czsKKwkJfQorCX0K KworCS8qIG1heSBiZSBOVUxMIGlmIHRoZXJlIGFyZSBub3QgYnVja2V0cyB3 aXRoIChuZGlzdGluY3Q+MSkgKi8KKwlyZXR1cm4gYnVja2V0OworfQorCisv KgorICogQSBzaW1wbGUgYnVja2V0IHBhcnRpdGlvbmluZyBpbXBsZW1lbnRh dGlvbiAtIHdlIGNob29zZSB0aGUgbG9uZ2VzdAorICogYnVja2V0IGRpbWVu c2lvbiwgbWVhc3VyZWQgdXNpbmcgdGhlIGFycmF5IG9mIGRpc3RpbmN0IHZh bHVlcyBidWlsdAorICogYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBi dWlsZC4KKyAqCisgKiBXZSBtYXAgYWxsIHRoZSBkaXN0aW5jdCB2YWx1ZXMg dG8gYSBbMCwxXSBpbnRlcnZhbCwgdW5pZm9ybWx5CisgKiBkaXN0cmlidXRl ZCwgYW5kIHRoZW4gdXNlIHRoaXMgdG8gbWVhc3VyZSBsZW5ndGguIEl0J3Mg ZXNzZW50aWFsbHkKKyAqIGEgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyB3 aXRoaW4gdGhlIHJhbmdlLCBub3JtYWxpemVkIHRvIFswLDFdLgorICoKKyAq IFRoZW4gd2UgY2hvb3NlIGEgJ21pZGRsZScgdmFsdWUgc3BsaXR0aW5nIHRo ZSBidWNrZXQgaW50byB0d28gcGFydHMKKyAqIHdpdGggcm91Z2hseSB0aGUg c2FtZSBmcmVxdWVuY3kuCisgKgorICogVGhpcyBzcGxpdHMgdGhlIGJ1Y2tl dCBieSB0d2Vha2luZyB0aGUgZXhpc3Rpbmcgb25lLCBhbmQgcmV0dXJuaW5n CisgKiB0aGUgbmV3IGJ1Y2tldCAoZXNzZW50aWFsbHkgc2hyaW5raW5nIHRo ZSBleGlzdGluZyBvbmUgaW4tcGxhY2UgYW5kCisgKiByZXR1cm5pbmcgdGhl IG90aGVyICJoYWxmIiBhcyBhIG5ldyBidWNrZXQpLiBUaGUgY2FsbGVyIGlz IHJlc3BvbnNpYmxlCisgKiBmb3IgYWRkaW5nIHRoZSBuZXcgYnVja2V0IGlu dG8gdGhlIGxpc3Qgb2YgYnVja2V0cy4KKyAqCisgKiBUaGVyZSBhcmUgbXVs dGlwbGUgaGlzdG9ncmFtIG9wdGlvbnMsIGNlbnRlcmVkIGFyb3VuZCB0aGUg cGFydGl0aW9uaW5nCisgKiBjcml0ZXJpYSwgc3BlY2lmeWluZyBib3RoIGhv dyB0byBjaG9vc2UgYSBidWNrZXQgYW5kIHRoZSBkaW1lbnNpb24KKyAqIG1v c3QgaW4gbmVlZCBvZiBhIHNwbGl0LiBGb3IgYSBuaWNlIHN1bW1hcnkgYW5k IGdlbmVyYWwgb3ZlcnZpZXcsIHNlZQorICogInJLLUhpc3QgOiBhbiBSLVRy ZWUgYmFzZWQgaGlzdG9ncmFtIGZvciBtdWx0aS1kaW1lbnNpb25hbCBzZWxl Y3Rpdml0eQorICogZXN0aW1hdGlvbiIgdGhlc2lzIGJ5IEouIEEuIExvcGV6 LCBDb25jb3JkaWEgVW5pdmVyc2l0eSwgcC4zNC0zNyAoYW5kCisgKiBwb3Nz aWJseSBwLiAzMi0zNCBmb3IgZXhwbGFuYXRpb24gb2YgdGhlIHRlcm1zKS4K KyAqCisgKiBUT0RPIEl0IHJlcXVpcmVzIGNhcmUgdG8gcHJldmVudCBzcGxp dHRpbmcgb25seSBvbmUgZGltZW5zaW9uIGFuZCBub3QKKyAqICAgICAgc3Bs aXR0aW5nIGFub3RoZXIgb25lIGF0IGFsbCAod2hpY2ggbWlnaHQgaGFwcGVu IGVhc2lseSBpbiBjYXNlCisgKiAgICAgIG9mIHN0cm9uZ2x5IGRlcGVuZGVu dCBjb2x1bW5zIC0gZS5nLiB5PXgpLiBUaGUgY3VycmVudCBhbGdvcml0aG0K KyAqICAgICAgbWluaW1pemVzIHRoaXMsIGJ1dCBtYXkgc3RpbGwgaGFwcGVu IGZvciBwZXJmZWN0bHkgZGVwZW5kZW50CisgKiAgICAgIGV4YW1wbGVzICh3 aGVuIGFsbCB0aGUgZGltZW5zaW9ucyBoYXZlIGVxdWFsIGxlbmd0aCwgdGhl IGZpcnN0CisgKiAgICAgIG9uZSB3aWxsIGJlIHNlbGVjdGVkKS4KKyAqCisg KiBUT0RPIFNob3VsZCBwcm9iYWJseSBjb25zaWRlciBzdGF0aXN0aWNzIHRh cmdldCBmb3IgdGhlIGNvbHVtbnMgKGUuZy4KKyAqICAgICAgdG8gc3BsaXQg ZGltZW5zaW9ucyB3aXRoIGhpZ2hlciBzdGF0aXN0aWNzIHRhcmdldCBtb3Jl IGZyZXF1ZW50bHkpLgorICovCitzdGF0aWMgTVZCdWNrZXQKK3BhcnRpdGlv bl9idWNrZXQoTVZCdWNrZXQgYnVja2V0LCBpbnQydmVjdG9yICphdHRycywK KwkJCQkgVmFjQXR0clN0YXRzICoqc3RhdHMsCisJCQkJIGludCAqbmRpc3R2 YWx1ZXMsIERhdHVtICoqZGlzdHZhbHVlcykKK3sKKwlpbnQgaTsKKwlpbnQg ZGltZW5zaW9uOworCWludCBudW1hdHRycyA9IGF0dHJzLT5kaW0xOworCisJ RGF0dW0gc3BsaXRfdmFsdWU7CisJTVZCdWNrZXQgbmV3X2J1Y2tldDsKKwlI aXN0b2dyYW1CdWlsZCBuZXdfZGF0YTsKKworCS8qIG5lZWRlZCBmb3Igc29y dCwgd2hlbiBsb29raW5nIGZvciB0aGUgc3BsaXQgdmFsdWUgKi8KKwlib29s IGlzTnVsbDsKKwlpbnQgbnZhbHVlcyA9IDA7CisJSGlzdG9ncmFtQnVpbGQg ZGF0YSA9IChIaXN0b2dyYW1CdWlsZClidWNrZXQtPmJ1aWxkX2RhdGE7CisJ U3RkQW5hbHl6ZURhdGEgKiBteXN0YXRzID0gTlVMTDsKKwlTY2FsYXJJdGVt ICogdmFsdWVzID0gKFNjYWxhckl0ZW0qKXBhbGxvYzAoZGF0YS0+bnVtcm93 cyAqIHNpemVvZihTY2FsYXJJdGVtKSk7CisJU29ydFN1cHBvcnREYXRhIHNz dXA7CisKKwkvKiBsb29raW5nIGZvciB0aGUgc3BsaXQgdmFsdWUgKi8KKwkv LyBpbnQgbmRpc3RpbmN0ID0gMTsJLyogbnVtYmVyIG9mIGRpc3RpbmN0IHZh bHVlcyBiZWxvdyBjdXJyZW50IHZhbHVlICovCisJaW50IG5yb3dzID0gMTsJ CS8qIG51bWJlciBvZiByb3dzIGJlbG93IGN1cnJlbnQgdmFsdWUgKi8KKwlk b3VibGUgZGVsdGE7CisKKwkvKiBuZWVkZWQgd2hlbiBzcGxpdHRpbmcgdGhl IHZhbHVlcyAqLworCUhlYXBUdXBsZSAqIG9sZHJvd3MgPSBkYXRhLT5yb3dz OworCWludCBvbGRucm93cyA9IGRhdGEtPm51bXJvd3M7CisKKwkvKgorCSAq IFdlIGNhbid0IHNwbGl0IGJ1Y2tldHMgd2l0aCBhIHNpbmdsZSBkaXN0aW5j dCB2YWx1ZSAodGhpcyBhbHNvCisJICogZGlzcXVhbGlmaWVzIE5VTEwtb25s eSBkaW1lbnNpb25zKS4gQWxzbywgdGhlcmUgaGFzIHRvIGJlIG11bHRpcGxl CisJICogc2FtcGxlIHJvd3MgKG90aGVyd2lzZSwgaG93IGNvdWxkIHRoZXJl IGJlIG1vcmUgZGlzdGluY3QgdmFsdWVzKS4KKwkgKi8KKwlBc3NlcnQoZGF0 YS0+bmRpc3RpbmN0ID4gMSk7CisJQXNzZXJ0KGRhdGEtPm51bXJvd3MgPiAx KTsKKwlBc3NlcnQoKG51bWF0dHJzID49IDIpICYmIChudW1hdHRycyA8PSBN VlNUQVRTX01BWF9ESU1FTlNJT05TKSk7CisKKwkvKgorCSAqIExvb2sgZm9y IHRoZSBuZXh0IGRpbWVuc2lvbiB0byBzcGxpdC4KKwkgKi8KKwlkZWx0YSA9 IDAuMDsKKwlkaW1lbnNpb24gPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBu dW1hdHRyczsgaSsrKQorCXsKKwkJRGF0dW0gKmEsICpiOworCisJCW15c3Rh dHMgPSAoU3RkQW5hbHl6ZURhdGEgKikgc3RhdHNbaV0tPmV4dHJhX2RhdGE7 CisKKwkJLyogaW5pdGlhbGl6ZSBzb3J0IHN1cHBvcnQsIGV0Yy4gKi8KKwkJ bWVtc2V0KCZzc3VwLCAwLCBzaXplb2Yoc3N1cCkpOworCQlzc3VwLnNzdXBf Y3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CisKKwkJLyogV2UgYWx3YXlz IHVzZSB0aGUgZGVmYXVsdCBjb2xsYXRpb24gZm9yIHN0YXRpc3RpY3MgKi8K KwkJc3N1cC5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09MTEFUSU9OX09J RDsKKwkJc3N1cC5zc3VwX251bGxzX2ZpcnN0ID0gZmFsc2U7CisKKwkJUHJl cGFyZVNvcnRTdXBwb3J0RnJvbU9yZGVyaW5nT3AobXlzdGF0cy0+bHRvcHIs ICZzc3VwKTsKKworCQkvKiBjYW4ndCBzcGxpdCBOVUxMLW9ubHkgZGltZW5z aW9uICovCisJCWlmIChidWNrZXQtPm51bGxzb25seVtpXSkKKwkJCWNvbnRp bnVlOworCisJCS8qIGNhbid0IHNwbGl0IGRpbWVuc2lvbiB3aXRoIGEgc2lu Z2xlIG5kaXN0aW5jdCB2YWx1ZSAqLworCQlpZiAoZGF0YS0+bmRpc3RpbmN0 c1tpXSA8PSAxKQorCQkJY29udGludWU7CisKKwkJLyogc29ydCBzdXBwb3J0 IGZvciB0aGUgYnNlYXJjaF9jb21wYXJhdG9yICovCisJCXNzdXBfcHJpdmF0 ZSA9ICZzc3VwOworCisJCS8qIHNlYXJjaCBmb3IgbWluIGJvdW5kYXJ5IGlu IHRoZSBkaXN0aW5jdCBsaXN0ICovCisJCWEgPSAoRGF0dW0qKWJzZWFyY2go JmJ1Y2tldC0+bWluW2ldLAorCQkJCQkJCWRpc3R2YWx1ZXNbaV0sIG5kaXN0 dmFsdWVzW2ldLAorCQkJCQkJCXNpemVvZihEYXR1bSksIGJzZWFyY2hfY29t cGFyYXRvcik7CisKKwkJYiA9IChEYXR1bSopYnNlYXJjaCgmYnVja2V0LT5t YXhbaV0sCisJCQkJCQkJZGlzdHZhbHVlc1tpXSwgbmRpc3R2YWx1ZXNbaV0s CisJCQkJCQkJc2l6ZW9mKERhdHVtKSwgYnNlYXJjaF9jb21wYXJhdG9yKTsK KworCQkvKiBpZiB0aGlzIGRpbWVuc2lvbiBpcyAnbGFyZ2VyJyB0aGVuIHBh cnRpdGlvbiBieSBpdCAqLworCQlpZiAoKChiLWEpKjEuMCAvIG5kaXN0dmFs dWVzW2ldKSA+IGRlbHRhKQorCQl7CisJCQlkZWx0YSA9ICgoYi1hKSoxLjAg LyBuZGlzdHZhbHVlc1tpXSk7CisJCQlkaW1lbnNpb24gPSBpOworCQl9CisJ fQorCisJLyoKKwkgKiBJZiB3ZSBoYXZlbid0IGZvdW5kIGEgZGltZW5zaW9u IGhlcmUsIHdlJ3ZlIGRvbmUgc29tZXRoaW5nCisJICogd3JvbmcgaW4gc2Vs ZWN0X2J1Y2tldF90b19wYXJ0aXRpb24uCisJICovCisJQXNzZXJ0KGRpbWVu c2lvbiAhPSAtMSk7CisKKwkvKgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgc2Vs ZWN0ZWQgZGltZW5zaW9uLCBjb2xsZWN0IGFuZCBzb3J0IHRoZSB2YWx1ZXMK KwkgKiBhbmQgdGhlbiBjaG9vc2UgdGhlIHZhbHVlIHRvIHVzZSBhcyB0aGUg bmV3IGJvdW5kYXJ5LgorCSAqLworCW15c3RhdHMgPSAoU3RkQW5hbHl6ZURh dGEgKikgc3RhdHNbZGltZW5zaW9uXS0+ZXh0cmFfZGF0YTsKKworCS8qIGlu aXRpYWxpemUgc29ydCBzdXBwb3J0LCBldGMuICovCisJbWVtc2V0KCZzc3Vw LCAwLCBzaXplb2Yoc3N1cCkpOworCXNzdXAuc3N1cF9jeHQgPSBDdXJyZW50 TWVtb3J5Q29udGV4dDsKKworCS8qIFdlIGFsd2F5cyB1c2UgdGhlIGRlZmF1 bHQgY29sbGF0aW9uIGZvciBzdGF0aXN0aWNzICovCisJc3N1cC5zc3VwX2Nv bGxhdGlvbiA9IERFRkFVTFRfQ09MTEFUSU9OX09JRDsKKwlzc3VwLnNzdXBf bnVsbHNfZmlyc3QgPSBmYWxzZTsKKworCVByZXBhcmVTb3J0U3VwcG9ydEZy b21PcmRlcmluZ09wKG15c3RhdHMtPmx0b3ByLCAmc3N1cCk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgZGF0YS0+bnVtcm93czsgaSsrKQorCXsKKwkJLyogcmVt ZW1iZXIgdGhlIGluZGV4IG9mIHRoZSBzYW1wbGUgcm93LCB0byBtYWtlIHRo ZSBwYXJ0aXRpb25pbmcgc2ltcGxlciAqLworCQl2YWx1ZXNbbnZhbHVlc10u dmFsdWUgPSBoZWFwX2dldGF0dHIoZGF0YS0+cm93c1tpXSwgYXR0cnMtPnZh bHVlc1tkaW1lbnNpb25dLAorCQkJCQkJCQkJCQkgc3RhdHNbZGltZW5zaW9u XS0+dHVwRGVzYywgJmlzTnVsbCk7CisJCXZhbHVlc1tudmFsdWVzXS50dXBu byA9IGk7CisKKwkJLyogbm8gTlVMTCB2YWx1ZXMgYWxsb3dlZCBoZXJlICh3 ZSBkb24ndCBkbyBzcGxpdHMgYnkgbnVsbC1vbmx5IGRpbWVuc2lvbnMpICov CisJCUFzc2VydCghaXNOdWxsKTsKKworCQludmFsdWVzKys7CisJfQorCisJ Lyogc29ydCB0aGUgYXJyYXkgb2YgdmFsdWVzICovCisJcXNvcnRfYXJnKCh2 b2lkICopIHZhbHVlcywgbnZhbHVlcywgc2l6ZW9mKFNjYWxhckl0ZW0pLAor CQkJICBjb21wYXJlX3NjYWxhcnNfcGFydGl0aW9uLCAodm9pZCAqKSAmc3N1 cCk7CisKKwkvKgorCSAqIFdlIGtub3cgdGhlcmUgYXJlIGJ1Y2tldC0+bmRp c3RpbmN0c1tkaW1lbnNpb25dIGRpc3RpbmN0IHZhbHVlcworCSAqIGluIHRo aXMgZGltZW5zaW9uLCBhbmQgd2Ugd2FudCB0byBzcGxpdCB0aGlzIGludG8g aGFsZiwgc28gd2FsaworCSAqIHRocm91Z2ggdGhlIGFycmF5IGFuZCBzdG9w IG9uY2Ugd2Ugc2VlIChuZGlzdGluY3QvMikgdmFsdWVzLgorCSAqCisJICog V2UgYWx3YXlzIGNob29zZSB0aGUgIm5leHQiIHZhbHVlLCBpLmUuIChuLzIr MSktdGggZGlzdGluY3QgdmFsdWUsCisJICogYW5kIHVzZSBpdCBhcyBhbiBl eGNsdXNpdmUgdXBwZXIgYm91bmRhcnkgKGFuZCBpbmNsdXNpdmUgbG93ZXIK KwkgKiBib3VuZGFyeSkuCisJICoKKwkgKiBUT0RPIE1heWJlIHdlIHNob3Vs ZCB1c2UgImF2ZXJhZ2UiIG9mIHRoZSB0d28gbWlkZGxlIGRpc3RpbmN0CisJ ICogICAgICB2YWx1ZXMgKGF0IGxlYXN0IGZvciBldmVuIGRpc3RpbmN0IGNv dW50cyksIGJ1dCB0aGF0IHdvdWxkCisJICogICAgICByZXF1aXJlIGJlaW5n IGFibGUgdG8gZG8gYW4gYXZlcmFnZSAod2hpY2ggZG9lcyBub3Qgd29yawor CSAqICAgICAgZm9yIG5vbi1hcml0aG1ldGljIHR5cGVzKS4KKwkgKgorCSAq IFRPRE8gQW5vdGhlciBvcHRpb24gaXMgdG8gbG9vayBmb3IgYSBzcGxpdCB0 aGF0J2QgZ2l2ZSBhYm91dAorCSAqICAgICAgNTAlIHR1cGxlcyAobm90IGRp c3RpbmN0IHZhbHVlcykgaW4gZWFjaCBwYXJ0aXRpb24uIFRoYXQKKwkgKiAg ICAgIG1pZ2h0IHdvcmsgYmV0dGVyIHdoZW4gdGhlcmUgYXJlIGEgZmV3IHZl cnkgZnJlcXVlbnQKKwkgKiAgICAgIHZhbHVlcywgYW5kIG1hbnkgcmFyZSBv bmVzLgorCSAqLworCWRlbHRhID0gZmFicyhkYXRhLT5udW1yb3dzKTsKKwlz cGxpdF92YWx1ZSA9IHZhbHVlc1swXS52YWx1ZTsKKworCWZvciAoaSA9IDE7 IGkgPCBkYXRhLT5udW1yb3dzOyBpKyspCisJeworCQlpZiAodmFsdWVzW2ld LnZhbHVlICE9IHZhbHVlc1tpLTFdLnZhbHVlKQorCQl7CisJCQkvKiBhcmUg d2UgY2xvc2VyIHRvIHNwbGl0dGluZyB0aGUgYnVja2V0IGluIGhhbGY/ICov CisJCQlpZiAoZmFicyhpIC0gZGF0YS0+bnVtcm93cy8yLjApIDwgZGVsdGEp CisJCQl7CisJCQkJLyogbGV0J3MgYXNzdW1lIHdlJ2xsIHVzZSB0aGlzIHZh bHVlIGZvciB0aGUgc3BsaXQgKi8KKwkJCQlzcGxpdF92YWx1ZSA9IHZhbHVl c1tpXS52YWx1ZTsKKwkJCQlkZWx0YSA9IGZhYnMoaSAtIGRhdGEtPm51bXJv d3MvMi4wKTsKKwkJCQlucm93cyA9IGk7CisJCQl9CisJCX0KKwl9CisKKwlB c3NlcnQobnJvd3MgPiAwKTsKKwlBc3NlcnQobnJvd3MgPCBkYXRhLT5udW1y b3dzKTsKKworCS8qIGNyZWF0ZSB0aGUgbmV3IGJ1Y2tldCBhcyBhIChpbmNv bXBsZXRlKSBjb3B5IG9mIHRoZSBvbmUgYmVpbmcgcGFydGl0aW9uZWQuICov CisJbmV3X2J1Y2tldCA9IGNvcHlfbXZfYnVja2V0KGJ1Y2tldCwgbnVtYXR0 cnMpOworCW5ld19kYXRhID0gKEhpc3RvZ3JhbUJ1aWxkKW5ld19idWNrZXQt PmJ1aWxkX2RhdGE7CisKKwkvKgorCSogRG8gdGhlIGFjdHVhbCBzcGxpdCBv ZiB0aGUgY2hvc2VuIGRpbWVuc2lvbiwgdXNpbmcgdGhlIHNwbGl0IHZhbHVl IGFzIHRoZQorCSogdXBwZXIgYm91bmQgZm9yIHRoZSBleGlzdGluZyBidWNr ZXQsIGFuZCBsb3dlciBib3VuZCBmb3IgdGhlIG5ldyBvbmUuCisJKi8KKwli dWNrZXQtPm1heFtkaW1lbnNpb25dICAgICA9IHNwbGl0X3ZhbHVlOworCW5l d19idWNrZXQtPm1pbltkaW1lbnNpb25dID0gc3BsaXRfdmFsdWU7CisKKwli dWNrZXQtPm1heF9pbmNsdXNpdmVbZGltZW5zaW9uXQkJPSBmYWxzZTsKKwlu ZXdfYnVja2V0LT5tYXhfaW5jbHVzaXZlW2RpbWVuc2lvbl0JPSB0cnVlOwor CisJLyoKKwkgKiBSZWRpc3RyaWJ1dGUgdGhlIHNhbXBsZSB0dXBsZXMgdXNp bmcgdGhlICdTY2FsYXJJdGVtLT50dXBubycKKwkgKiBpbmRleC4gV2Uga25v dyAnbnJvd3MnIHJvd3Mgc2hvdWxkIHJlbWFpbiBpbiB0aGUgb3JpZ2luYWwK KwkgKiBidWNrZXQgYW5kIHRoZSByZXN0IGdvZXMgdG8gdGhlIG5ldyBvbmUu CisJICovCisKKwlkYXRhLT5yb3dzICAgICA9IChIZWFwVHVwbGUqKXBhbGxv YzAobnJvd3MgKiBzaXplb2YoSGVhcFR1cGxlKSk7CisJbmV3X2RhdGEtPnJv d3MgPSAoSGVhcFR1cGxlKilwYWxsb2MwKChvbGRucm93cyAtIG5yb3dzKSAq IHNpemVvZihIZWFwVHVwbGUpKTsKKworCWRhdGEtPm51bXJvd3MJID0gbnJv d3M7CisJbmV3X2RhdGEtPm51bXJvd3MgPSAob2xkbnJvd3MgLSBucm93cyk7 CisKKwkvKgorCSAqIFRoZSBmaXJzdCBucm93cyBzaG91bGQgZ28gdG8gdGhl IGZpcnN0IGJ1Y2tldCwgdGhlIHJlc3Qgc2hvdWxkCisJICogZ28gdG8gdGhl IG5ldyBvbmUuIFVzZSB0aGUgdHVwbm8gZmllbGQgdG8gZ2V0IHRoZSBhY3R1 YWwgSGVhcFR1cGxlCisJICogcm93IGZyb20gdGhlIG9yaWdpbmFsIGFycmF5 IG9mIHNhbXBsZSByb3dzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucm93 czsgaSsrKQorCQltZW1jcHkoJmRhdGEtPnJvd3NbaV0sICZvbGRyb3dzW3Zh bHVlc1tpXS50dXBub10sIHNpemVvZihIZWFwVHVwbGUpKTsKKworCWZvciAo aSA9IG5yb3dzOyBpIDwgb2xkbnJvd3M7IGkrKykKKwkJbWVtY3B5KCZuZXdf ZGF0YS0+cm93c1tpLW5yb3dzXSwgJm9sZHJvd3NbdmFsdWVzW2ldLnR1cG5v XSwgc2l6ZW9mKEhlYXBUdXBsZSkpOworCisJLyogdXBkYXRlIG5kaXN0aW5j dCB2YWx1ZXMgZm9yIHRoZSBidWNrZXRzICh0b3RhbCBhbmQgcGVyIGRpbWVu c2lvbikgKi8KKwl1cGRhdGVfYnVja2V0X25kaXN0aW5jdChidWNrZXQsIGF0 dHJzLCBzdGF0cyk7CisJdXBkYXRlX2J1Y2tldF9uZGlzdGluY3QobmV3X2J1 Y2tldCwgYXR0cnMsIHN0YXRzKTsKKworCS8qCisJICogVE9ETyBXZSBkb24n dCBuZWVkIHRvIGRvIHRoaXMgZm9yIHRoZSBkaW1lbnNpb24gd2UgdXNlZCBm b3Igc3BsaXQsCisJICogICAgICBiZWNhdXNlIHdlIGtub3cgaG93IG1hbnkg ZGlzdGluY3QgdmFsdWVzIHdlbnQgdG8gZWFjaCBwYXJ0aXRpb24uCisJICov CisJZm9yIChpID0gMDsgaSA8IG51bWF0dHJzOyBpKyspCisJeworCQl1cGRh dGVfZGltZW5zaW9uX25kaXN0aW5jdChidWNrZXQsIGksIGF0dHJzLCBzdGF0 cywgZmFsc2UpOworCQl1cGRhdGVfZGltZW5zaW9uX25kaXN0aW5jdChuZXdf YnVja2V0LCBpLCBhdHRycywgc3RhdHMsIGZhbHNlKTsKKwl9CisKKwlwZnJl ZShvbGRyb3dzKTsKKwlwZnJlZSh2YWx1ZXMpOworCisJcmV0dXJuIG5ld19i dWNrZXQ7Cit9CisKKy8qCisgKiBDb3B5IGEgaGlzdG9ncmFtIGJ1Y2tldC4g VGhlIGNvcHkgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVpbGQtdGltZQorICog ZGF0YSwgaS5lLiBzYW1wbGVkIHJvd3MgZXRjLgorICovCitzdGF0aWMgTVZC dWNrZXQKK2NvcHlfbXZfYnVja2V0KE1WQnVja2V0IGJ1Y2tldCwgdWludDMy IG5kaW1lbnNpb25zKQoreworCS8qIFRPRE8gYWxsb2NhdGUgYXMgYSBzaW5n bGUgcGllY2UgKGluY2x1ZGluZyBhbGwgdGhlIGZpZWxkcykgKi8KKwlNVkJ1 Y2tldCBuZXdfYnVja2V0ID0gKE1WQnVja2V0KXBhbGxvYzAoc2l6ZW9mKE1W QnVja2V0RGF0YSkpOworCUhpc3RvZ3JhbUJ1aWxkIGRhdGEgPSAoSGlzdG9n cmFtQnVpbGQpcGFsbG9jMChzaXplb2YoSGlzdG9ncmFtQnVpbGREYXRhKSk7 CisKKwkvKiBDb3B5IG9ubHkgdGhlIGF0dHJpYnV0ZXMgdGhhdCB3aWxsIHN0 YXkgdGhlIHNhbWUgYWZ0ZXIgdGhlIHNwbGl0LCBhbmQKKwkgKiB3ZSdsbCBy ZWNvbXB1dGUgdGhlIHJlc3QgYWZ0ZXIgdGhlIHNwbGl0LiAqLworCisJLyog YWxsb2NhdGUgdGhlIHBlci1kaW1lbnNpb24gYXJyYXlzICovCisJbmV3X2J1 Y2tldC0+bnVsbHNvbmx5ID0gKGJvb2wqKXBhbGxvYzAobmRpbWVuc2lvbnMg KiBzaXplb2YoYm9vbCkpOworCisJLyogaW5jbHVzaXZlbmVzcyBib3VuZGFy aWVzIC0gbG93ZXIvdXBwZXIgYm91bmRzICovCisJbmV3X2J1Y2tldC0+bWlu X2luY2x1c2l2ZSA9IChib29sKilwYWxsb2MwKG5kaW1lbnNpb25zICogc2l6 ZW9mKGJvb2wpKTsKKwluZXdfYnVja2V0LT5tYXhfaW5jbHVzaXZlID0gKGJv b2wqKXBhbGxvYzAobmRpbWVuc2lvbnMgKiBzaXplb2YoYm9vbCkpOworCisJ LyogbG93ZXIvdXBwZXIgYm91bmRhcmllcyAqLworCW5ld19idWNrZXQtPm1p biA9IChEYXR1bSopcGFsbG9jMChuZGltZW5zaW9ucyAqIHNpemVvZihEYXR1 bSkpOworCW5ld19idWNrZXQtPm1heCA9IChEYXR1bSopcGFsbG9jMChuZGlt ZW5zaW9ucyAqIHNpemVvZihEYXR1bSkpOworCisJLyogY29weSBkYXRhICov CisJbWVtY3B5KG5ld19idWNrZXQtPm51bGxzb25seSwgYnVja2V0LT5udWxs c29ubHksIG5kaW1lbnNpb25zICogc2l6ZW9mKGJvb2wpKTsKKworCW1lbWNw eShuZXdfYnVja2V0LT5taW5faW5jbHVzaXZlLCBidWNrZXQtPm1pbl9pbmNs dXNpdmUsIG5kaW1lbnNpb25zKnNpemVvZihib29sKSk7CisJbWVtY3B5KG5l d19idWNrZXQtPm1pbiwgYnVja2V0LT5taW4sIG5kaW1lbnNpb25zKnNpemVv ZihEYXR1bSkpOworCisJbWVtY3B5KG5ld19idWNrZXQtPm1heF9pbmNsdXNp dmUsIGJ1Y2tldC0+bWF4X2luY2x1c2l2ZSwgbmRpbWVuc2lvbnMqc2l6ZW9m KGJvb2wpKTsKKwltZW1jcHkobmV3X2J1Y2tldC0+bWF4LCBidWNrZXQtPm1h eCwgbmRpbWVuc2lvbnMqc2l6ZW9mKERhdHVtKSk7CisKKwkvKiBhbGxvY2F0 ZSBhbmQgY29weSB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0aGUgYnVpbGQg ZGF0YSAqLworCWRhdGEtPm5kaXN0aW5jdHMgPSAodWludDMyKilwYWxsb2Mw KG5kaW1lbnNpb25zICogc2l6ZW9mKHVpbnQzMikpOworCisJbmV3X2J1Y2tl dC0+YnVpbGRfZGF0YSA9IGRhdGE7CisKKwlyZXR1cm4gbmV3X2J1Y2tldDsK K30KKworLyoKKyAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZh bHVlcyBpbiB0aGUgYnVja2V0LiBUaGlzIGp1c3QgY29waWVzCisgKiB0aGUg RGF0dW0gdmFsdWVzIGludG8gYSBzaW1wbGUgYXJyYXksIGFuZCBzb3J0cyB0 aGVtIHVzaW5nIG1lbWNtcC1iYXNlZAorICogY29tcGFyYXRvci4gVGhhdCBt ZWFucyBpdCBvbmx5IHdvcmtzIGZvciBwYXNzLWJ5LXZhbHVlIGRhdGEgdHlw ZXMKKyAqIChhc3N1bWluZyB0aGV5IGRvbid0IHVzZSBjb2xsYXRpb25zIGV0 Yy4pCisgKgorICogVE9ETyBUaGlzIG1pZ2h0IGV2YWx1YXRlIGFuZCBzdG9y ZSB0aGUgZGlzdGluY3QgY291bnRzIGZvciBhbGwKKyAqICAgICAgcG9zc2li bGUgYXR0cmlidXRlIGNvbWJpbmF0aW9ucy4gVGhlIGFzc3VtcHRpb24gaXMg dGhpcyBtaWdodCBiZQorICogICAgICB1c2VmdWwgZm9yIGVzdGltYXRpbmcg dGhpbmdzIGxpa2UgR1JPVVAgQlkgY2FyZGluYWxpdGllcyAoZS5nLgorICog ICAgICBpbiBjYXNlcyB3aGVuIHNvbWUgYnVja2V0cyBjb250YWluIGEgbG90 IG9mIGxvdy1mcmVxdWVuY3kKKyAqICAgICAgY29tYmluYXRpb25zLCBhbmQg b3RoZXIgYnVja2V0cyBjb250YWluIGZldyBoaWdoLWZyZXF1ZW5jeSBvbmVz KS4KKyAqCisgKiAgICAgIEJ1dCBpdCdzIHVuY2xlYXIgd2hldGhlciBpdCdz IHdvcnRoIHRoZSBwcmljZS4gQ29tcHV0aW5nIHRoaXMKKyAqICAgICAgaXMg YWN0dWFsbHkgcXVpdGUgY2hlYXAsIGJlY2F1c2UgaXQgbWF5IGJlIGV2YWx1 YXRlZCBhdCB0aGUgdmVyeQorICogICAgICBlbmQsIHdoZW4gdGhlIGJ1Y2tl dHMgYXJlIHJhdGhlciBzbWFsbCAoc28gc29ydGluZyBpdCBpbiAyXk4gd2F5 cworICogICAgICBpcyBub3QgYSBiaWcgZGVhbCkuIEFzc3VtaW5nIHRoZSBw YXJ0aXRpb25pbmcgYWxnb3JpdGhtIGRvZXMgbm90CisgKiAgICAgIHVzZSB0 aGVzZSB2YWx1ZXMgdG8gZG8gdGhlIGRlY2lzaW9ucywgb2YgY291cnNlICh0 aGUgY3VycmVudAorICogICAgICBhbGdvcml0aG0gZG9lcyBub3QpLgorICoK KyAqICAgICAgVGhlIG92ZXJoZWFkIHdpdGggc3RvcmluZywgZmV0Y2hpbmcg YW5kIHBhcnNpbmcgdGhlIGRhdGEgaXMgbW9yZQorICogICAgICBjb25jZXJu aW5nIC0gYWRkaW5nIDJeTiB2YWx1ZXMgcGVyIGJ1Y2tldCAoZXZlbiBpZiBp dCdzIGp1c3QKKyAqICAgICAgYSAxQiBvciAyQiB2YWx1ZSkgd291bGQgc2ln bmlmaWNhbnRseSBibG9hdCB0aGUgaGlzdG9ncmFtLCBhbmQKKyAqICAgICAg dGh1cyB0aGUgaW1wYWN0IG9uIG9wdGltaXplci4gV2hpY2ggaXMgbm90IHJl YWxseSBkZXNpcmFibGUuCisgKgorICogVE9ETyBUaGlzIG9ubHkgdXBkYXRl cyB0aGUgbmRpc3RpbmN0IGZvciB0aGUgc2FtcGxlIChvciBidWNrZXQpLCBi dXQKKyAqICAgICAgd2UgZXZlbnR1YWxseSBuZWVkIGFuIGVzdGltYXRlIG9m IHRoZSB0b3RhbCBudW1iZXIgb2YgZGlzdGluY3QKKyAqICAgICAgdmFsdWVz IGluIHRoZSBkYXRhc2V0LiBJdCdzIHBvc3NpYmxlIHRvIGVpdGhlciB1c2Ug dGhlIGN1cnJlbnQKKyAqICAgICAgMUQgYXBwcm9hY2ggKGkuZS4sIGlmIGl0 J3MgbW9yZSB0aGFuIDEwJSBvZiB0aGUgc2FtcGxlLCBhc3N1bWUKKyAqICAg ICAgaXQncyBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiByb3dzKS4g T3IgaXQncyBwb3NzaWJsZSB0bworICogICAgICBpbXBsZW1lbnQgdGhlIGVz dGltYXRvciBzdWdnZXN0ZWQgaW4gdGhlIGFydGljbGUsIHN1cHBvc2VkbHkK KyAqICAgICAgZ2l2aW5nICdvcHRpbWFsJyBlc3RpbWF0ZXMgKHcuci50LiBw cm9iYWJpbGl0eSBvZiBlcnJvcikuCisgKi8KK3N0YXRpYyB2b2lkCit1cGRh dGVfYnVja2V0X25kaXN0aW5jdChNVkJ1Y2tldCBidWNrZXQsIGludDJ2ZWN0 b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKiogc3RhdHMpCit7CisJaW50IGks IGo7CisJaW50IG51bWF0dHJzID0gYXR0cnMtPmRpbTE7CisKKwlIaXN0b2dy YW1CdWlsZCBkYXRhID0gKEhpc3RvZ3JhbUJ1aWxkKWJ1Y2tldC0+YnVpbGRf ZGF0YTsKKwlpbnQgbnVtcm93cyA9IGRhdGEtPm51bXJvd3M7CisKKwlNdWx0 aVNvcnRTdXBwb3J0IG1zcyA9IG11bHRpX3NvcnRfaW5pdChudW1hdHRycyk7 CisKKwkvKgorCSAqIFdlIGNvdWxkIGNvbGxlY3QgdGhpcyB3aGlsZSB3YWxr aW5nIHRocm91Z2ggYWxsIHRoZSBhdHRyaWJ1dGVzCisJICogYWJvdmUgKHRo aXMgd2F5IHdlIGhhdmUgdG8gY2FsbCBoZWFwX2dldGF0dHIgdHdpY2UpLgor CSAqLworCVNvcnRJdGVtICAgKml0ZW1zICA9IChTb3J0SXRlbSopcGFsbG9j MChudW1yb3dzICogc2l6ZW9mKFNvcnRJdGVtKSk7CisJRGF0dW0JICAgKnZh bHVlcyA9IChEYXR1bSopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKERhdHVt KSAqIG51bWF0dHJzKTsKKwlib29sCSAgICppc251bGwgPSAoYm9vbCopcGFs bG9jMChudW1yb3dzICogc2l6ZW9mKGJvb2wpICogbnVtYXR0cnMpOworCisJ Zm9yIChpID0gMDsgaSA8IG51bXJvd3M7IGkrKykKKwl7CisJCWl0ZW1zW2ld LnZhbHVlcyA9ICZ2YWx1ZXNbaSAqIG51bWF0dHJzXTsKKwkJaXRlbXNbaV0u aXNudWxsID0gJmlzbnVsbFtpICogbnVtYXR0cnNdOworCX0KKworCS8qIHBy ZXBhcmUgdGhlIHNvcnQgZnVuY3Rpb24gZm9yIHRoZSBmaXJzdCBkaW1lbnNp b24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKKwkJbXVs dGlfc29ydF9hZGRfZGltZW5zaW9uKG1zcywgaSwgaSwgc3RhdHMpOworCisJ LyogY29sbGVjdCB0aGUgdmFsdWVzICovCisJZm9yIChpID0gMDsgaSA8IG51 bXJvd3M7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IG51bWF0dHJzOyBqKysp CisJCQlpdGVtc1tpXS52YWx1ZXNbal0KKwkJCQk9IGhlYXBfZ2V0YXR0cihk YXRhLT5yb3dzW2ldLCBhdHRycy0+dmFsdWVzW2pdLAorCQkJCQkJCQlzdGF0 c1tqXS0+dHVwRGVzYywgJml0ZW1zW2ldLmlzbnVsbFtqXSk7CisKKwlxc29y dF9hcmcoKHZvaWQgKikgaXRlbXMsIG51bXJvd3MsIHNpemVvZihTb3J0SXRl bSksCisJCQkgIG11bHRpX3NvcnRfY29tcGFyZSwgbXNzKTsKKworCWRhdGEt Pm5kaXN0aW5jdCA9IDE7CisKKwlmb3IgKGkgPSAxOyBpIDwgbnVtcm93czsg aSsrKQorCQlpZiAobXVsdGlfc29ydF9jb21wYXJlKCZpdGVtc1tpXSwgJml0 ZW1zW2ktMV0sIG1zcykgIT0gMCkKKwkJCWRhdGEtPm5kaXN0aW5jdCArPSAx OworCisJcGZyZWUoaXRlbXMpOworCXBmcmVlKHZhbHVlcyk7CisJcGZyZWUo aXNudWxsKTsKK30KKworLyoKKyAqIENvdW50IGRpc3RpbmN0IHZhbHVlcyBw ZXIgYnVja2V0IGRpbWVuc2lvbi4KKyAqLworc3RhdGljIHZvaWQKK3VwZGF0 ZV9kaW1lbnNpb25fbmRpc3RpbmN0KE1WQnVja2V0IGJ1Y2tldCwgaW50IGRp bWVuc2lvbiwgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkgICBWYWNBdHRy U3RhdHMgKiogc3RhdHMsIGJvb2wgdXBkYXRlX2JvdW5kYXJpZXMpCit7CisJ aW50IGo7CisJaW50IG52YWx1ZXMgPSAwOworCWJvb2wgaXNOdWxsOworCUhp c3RvZ3JhbUJ1aWxkIGRhdGEgPSAoSGlzdG9ncmFtQnVpbGQpYnVja2V0LT5i dWlsZF9kYXRhOworCURhdHVtICogdmFsdWVzID0gKERhdHVtKilwYWxsb2Mw KGRhdGEtPm51bXJvd3MgKiBzaXplb2YoRGF0dW0pKTsKKwlTb3J0U3VwcG9y dERhdGEgc3N1cDsKKworCVN0ZEFuYWx5emVEYXRhICogbXlzdGF0cyA9IChT dGRBbmFseXplRGF0YSAqKSBzdGF0c1tkaW1lbnNpb25dLT5leHRyYV9kYXRh OworCisJLyogd2UgbWF5IGFscmVhZHkga25vdyB0aGlzIGlzIGEgTlVMTC1v bmx5IGRpbWVuc2lvbiAqLworCWlmIChidWNrZXQtPm51bGxzb25seVtkaW1l bnNpb25dKQorCQlkYXRhLT5uZGlzdGluY3RzW2RpbWVuc2lvbl0gPSAxOwor CisJbWVtc2V0KCZzc3VwLCAwLCBzaXplb2Yoc3N1cCkpOworCXNzdXAuc3N1 cF9jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCS8qIFdlIGFsd2F5 cyB1c2UgdGhlIGRlZmF1bHQgY29sbGF0aW9uIGZvciBzdGF0aXN0aWNzICov CisJc3N1cC5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09MTEFUSU9OX09J RDsKKwlzc3VwLnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxzZTsKKworCVByZXBh cmVTb3J0U3VwcG9ydEZyb21PcmRlcmluZ09wKG15c3RhdHMtPmx0b3ByLCAm c3N1cCk7CisKKwlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcm93czsgaisr KQorCXsKKwkJdmFsdWVzW252YWx1ZXNdID0gaGVhcF9nZXRhdHRyKGRhdGEt PnJvd3Nbal0sIGF0dHJzLT52YWx1ZXNbZGltZW5zaW9uXSwKKwkJCQkJCQkJ CSAgIHN0YXRzW2RpbWVuc2lvbl0tPnR1cERlc2MsICZpc051bGwpOworCisJ CS8qIGlnbm9yZSBOVUxMIHZhbHVlcyAqLworCQlpZiAoISBpc051bGwpCisJ CQludmFsdWVzKys7CisJfQorCisJLyogdGhlcmUncyBhbHdheXMgYXQgbGVh c3QgMSBkaXN0aW5jdCB2YWx1ZSAobWF5IGJlIE5VTEwpICovCisJZGF0YS0+ bmRpc3RpbmN0c1tkaW1lbnNpb25dID0gMTsKKworCS8qIGlmIHRoZXJlIGFy ZSBvbmx5IE5VTEwgdmFsdWVzIGluIHRoZSBjb2x1bW4sIG1hcmsgaXQgc28g YW5kIGNvbnRpbnVlCisJICogd2l0aCB0aGUgbmV4dCBvbmUgKi8KKwlpZiAo bnZhbHVlcyA9PSAwKQorCXsKKwkJcGZyZWUodmFsdWVzKTsKKwkJYnVja2V0 LT5udWxsc29ubHlbZGltZW5zaW9uXSA9IHRydWU7CisJCXJldHVybjsKKwl9 CisKKwkvKiBzb3J0IHRoZSBhcnJheSAocGFzcy1ieS12YWx1ZSBkYXR1bSAq LworCXFzb3J0X2FyZygodm9pZCAqKSB2YWx1ZXMsIG52YWx1ZXMsIHNpemVv ZihEYXR1bSksCisJCQkgIGNvbXBhcmVfc2NhbGFyc19zaW1wbGUsICh2b2lk ICopICZzc3VwKTsKKworCS8qCisJICogVXBkYXRlIG1pbi9tYXggYm91bmRh cmllcyB0byB0aGUgc21hbGxlc3QgYm91bmRpbmcgYm94LiBHZW5lcmFsbHks IHRoaXMKKwkgKiBuZWVkcyB0byBiZSBkb25lIG9ubHkgd2hlbiBjb25zdHJ1 Y3RpbmcgdGhlIGluaXRpYWwgYnVja2V0LgorCSAqLworCWlmICh1cGRhdGVf Ym91bmRhcmllcykKKwl7CisJCS8qIHN0b3JlIHRoZSBtaW4vbWF4IHZhbHVl cyAqLworCQlidWNrZXQtPm1pbltkaW1lbnNpb25dID0gdmFsdWVzWzBdOwor CQlidWNrZXQtPm1pbl9pbmNsdXNpdmVbZGltZW5zaW9uXSA9IHRydWU7CisK KwkJYnVja2V0LT5tYXhbZGltZW5zaW9uXSA9IHZhbHVlc1tudmFsdWVzLTFd OworCQlidWNrZXQtPm1heF9pbmNsdXNpdmVbZGltZW5zaW9uXSA9IHRydWU7 CisJfQorCisJLyoKKwkgKiBXYWxrIHRocm91Z2ggdGhlIGFycmF5IGFuZCBj b3VudCBkaXN0aW5jdCB2YWx1ZXMgYnkgY29tcGFyaW5nCisJICogc3VjY2Vl ZGluZyB2YWx1ZXMuCisJICoKKwkgKiBGSVhNRSBUaGlzIG9ubHkgd29ya3Mg Zm9yIHBhc3MtYnktdmFsdWUgdHlwZXMgKGkuZS4gbm90IFZBUkNIQVJzCisJ ICogICAgICAgZXRjLikuIEFsdGhvdWdoIHRoYW5rcyB0byB0aGUgZGVkdXBs aWNhdGlvbiBpdCBtaWdodCB3b3JrCisJICogICAgICAgZXZlbiBmb3IgdGhv c2UgdHlwZXMgKGVxdWFsIHZhbHVlcyB3aWxsIGdldCB0aGUgc2FtZSBpdGVt CisJICogICAgICAgaW4gdGhlIGRlZHVwbGljYXRlZCBhcnJheSkuCisJICov CisJZm9yIChqID0gMTsgaiA8IG52YWx1ZXM7IGorKykgeworCQlpZiAodmFs dWVzW2pdICE9IHZhbHVlc1tqLTFdKQorCQkJZGF0YS0+bmRpc3RpbmN0c1tk aW1lbnNpb25dICs9IDE7CisJfQorCisJcGZyZWUodmFsdWVzKTsKK30KKwor LyoKKyAqIEEgcHJvcGVybHkgYnVpbHQgaGlzdG9ncmFtIG11c3Qgbm90IGNv bnRhaW4gYnVja2V0cyBtaXhpbmcgTlVMTCBhbmQKKyAqIG5vbi1OVUxMIHZh bHVlcyBpbiBhIHNpbmdsZSBkaW1lbnNpb24uIEVhY2ggZGltZW5zaW9uIG1h eSBlaXRoZXIgYmUKKyAqIG1hcmtlZCBhcyAnbnVsbHMgb25seScsIGFuZCB0 aHVzIGNvbnRhaW5pbmcgb25seSBOVUxMIHZhbHVlcywgb3IKKyAqIGl0IG11 c3Qgbm90IGNvbnRhaW4gYW55IE5VTEwgdmFsdWVzLgorICoKKyAqIFRoZXJl Zm9yZSwgaWYgdGhlIHNhbXBsZSBjb250YWlucyBOVUxMIHZhbHVlcyBpbiBh bnkgb2YgdGhlIGNvbHVtbnMsCisgKiBpdCdzIG5lY2Vzc2FyeSB0byBidWls ZCB0aG9zZSBOVUxMLWJ1Y2tldHMuIFRoaXMgaXMgZG9uZSBpbiBhbgorICog aXRlcmF0aXZlIHdheSB1c2luZyB0aGlzIGFsZ29yaXRobSwgb3BlcmF0aW5n IG9uIGEgc2luZ2xlIGJ1Y2tldDoKKyAqCisgKiAgICAgKDEpIENoZWNrIHRo YXQgYWxsIGRpbWVuc2lvbnMgYXJlIHdlbGwtZm9ybWVkIChub3QgbWl4aW5n IE5VTEwKKyAqICAgICAgICAgYW5kIG5vbi1OVUxMIHZhbHVlcykuCisgKgor ICogICAgICgyKSBJZiBhbGwgZGltZW5zaW9ucyBhcmUgd2VsbC1mb3JtZWQs IHRlcm1pbmF0ZS4KKyAqCisgKiAgICAgKDMpIElmIHRoZSBkaW1lbnNpb24g Y29udGFpbnMgb25seSBOVUxMIHZhbHVlcywgYnV0IGlzIG5vdAorICogICAg ICAgICBtYXJrZWQgYXMgTlVMTC1vbmx5LCBtYXJrIGl0IGFzIE5VTEwtb25s eSBhbmQgcnVuIHRoZQorICogICAgICAgICBhbGdvcml0aG0gYWdhaW4gKG9u IHRoaXMgYnVja2V0KS4KKyAqCisgKiAgICAgKDQpIElmIHRoZSBkaW1lbnNp b24gbWl4ZXMgTlVMTCBhbmQgbm9uLU5VTEwgdmFsdWVzLCBzcGxpdCB0aGUK KyAqICAgICAgICAgYnVja2V0IGludG8gdHdvIHBhcnRzIC0gb25lIHdpdGgg TlVMTCB2YWx1ZXMsIG9uZSB3aXRoCisgKiAgICAgICAgIG5vbi1OVUxMIHZh bHVlcyAocmVwbGFjaW5nIHRoZSBjdXJyZW50IG9uZSkuIFRoZW4gcnVuCisg KiAgICAgICAgIHRoZSBhbGdvcml0aG0gb24gYm90aCBidWNrZXRzLgorICoK KyAqIFRoaXMgaXMgZXhlY3V0ZWQgaW4gYSByZWN1cnNpdmUgbWFubmVyLCBi dXQgdGhlIG51bWJlciBvZiBleGVjdXRpb25zCisgKiBzaG91bGQgYmUgcXVp dGUgbG93IC0gbGltaXRlZCBieSB0aGUgbnVtYmVyIG9mIE5VTEwtYnVja2V0 cy4gQWxzbywKKyAqIGluIGVhY2ggYnJhbmNoIHRoZSBudW1iZXIgb2YgbmVz dGVkIGNhbGxzIGlzIGxpbWl0ZWQgYnkgdGhlIG51bWJlcgorICogb2YgZGlt ZW5zaW9ucyAoYXR0cmlidXRlcykgb2YgdGhlIGhpc3RvZ3JhbS4KKyAqCisg KiBBdCB0aGUgZW5kLCB0aGVyZSBzaG91bGQgYmUgYnVja2V0cyB3aXRoIG5v IG1peGVkIGRpbWVuc2lvbnMuIFRoZQorICogbnVtYmVyIG9mIGJ1Y2tldHMg cHJvZHVjZWQgYnkgdGhpcyBhbGdvcml0aG0gaXMgcmF0aGVyIGxpbWl0ZWQg LSB3aXRoCisgKiBOIGRpbWVuc2lvbnMsIHRoZXJlIG1heSBiZSBvbmx5IDJe TiBzdWNoIGJ1Y2tldHMgKGVhY2ggZGltZW5zaW9uIG1heQorICogYmUgZWl0 aGVyIE5VTEwgb3Igbm9uLU5VTEwpLiBTbyB3aXRoIDggZGltZW5zaW9ucyAo Y3VycmVudCB2YWx1ZSBvZgorICogTVZTVEFUU19NQVhfRElNRU5TSU9OUykg dGhlcmUgbWF5IGJlIG9ubHkgMjU2IHN1Y2ggYnVja2V0cy4KKyAqCisgKiBB ZnRlciB0aGlzLCBhICdyZWd1bGFyJyBidWNrZXQtc3BsaXQgYWxnb3JpdGht IHNoYWxsIHJ1biwgZnVydGhlcgorICogb3B0aW1pemluZyB0aGUgaGlzdG9n cmFtLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX251bGxfYnVja2V0cyhN Vkhpc3RvZ3JhbSBoaXN0b2dyYW0sIGludCBidWNrZXRfaWR4LAorCQkJCQlp bnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRzICoqIHN0YXRzKQorewor CWludAkJCWksIGo7CisJaW50CQkJbnVsbF9kaW0gPSAtMTsKKwlpbnQJCQlu dWxsX2NvdW50ID0gMDsKKwlib29sCQludWxsX2ZvdW5kID0gZmFsc2U7CisJ TVZCdWNrZXQJYnVja2V0LCBudWxsX2J1Y2tldDsKKwlpbnQJCQludWxsX2lk eCwgY3Vycl9pZHg7CisJSGlzdG9ncmFtQnVpbGQJZGF0YSwgbnVsbF9kYXRh OworCisJLyogcmVtZW1iZXIgb3JpZ2luYWwgdmFsdWVzIGZyb20gdGhlIGJ1 Y2tldCAqLworCWludAkJCW51bXJvd3M7CisJSGVhcFR1cGxlICAqb2xkcm93 cyA9IE5VTEw7CisKKwlBc3NlcnQoYnVja2V0X2lkeCA8IGhpc3RvZ3JhbS0+ bmJ1Y2tldHMpOworCUFzc2VydChoaXN0b2dyYW0tPm5kaW1lbnNpb25zID09 IGF0dHJzLT5kaW0xKTsKKworCWJ1Y2tldCA9IGhpc3RvZ3JhbS0+YnVja2V0 c1tidWNrZXRfaWR4XTsKKwlkYXRhID0gKEhpc3RvZ3JhbUJ1aWxkKWJ1Y2tl dC0+YnVpbGRfZGF0YTsKKworCW51bXJvd3MgPSBkYXRhLT5udW1yb3dzOwor CW9sZHJvd3MgPSBkYXRhLT5yb3dzOworCisJLyoKKwkgKiBXYWxrIHRocm91 Z2ggYWxsIHJvd3MgLyBkaW1lbnNpb25zLCBhbmQgc3RvcCBvbmNlIHdlIGZp bmQgTlVMTAorCSAqIGluIGEgZGltZW5zaW9uIG5vdCB5ZXQgbWFya2VkIGFz IE5VTEwtb25seS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVt cm93czsgaSsrKQorCXsKKwkJLyoKKwkJICogRklYTUUgV2UgZG9uJ3QgbmVl ZCB0byBzdGFydCBmcm9tIHRoZSBmaXJzdCBhdHRyaWJ1dGUKKwkJICogICAg ICAgaGVyZSAtIHdlIGNhbiBzdGFydCBmcm9tIHRoZSBsYXN0IGtub3duIGRp bWVuc2lvbi4KKwkJICovCisJCWZvciAoaiA9IDA7IGogPCBoaXN0b2dyYW0t Pm5kaW1lbnNpb25zOyBqKyspCisJCXsKKwkJCS8qIElzIHRoaXMgYSBOVUxM LW9ubHkgZGltZW5zaW9uPyBJZiB5ZXMsIHNraXAuICovCisJCQlpZiAoYnVj a2V0LT5udWxsc29ubHlbal0pCisJCQkJY29udGludWU7CisKKwkJCS8qIGZv dW5kIGEgTlVMTCBpbiB0aGF0IGRpbWVuc2lvbj8gKi8KKwkJCWlmIChoZWFw X2F0dGlzbnVsbChkYXRhLT5yb3dzW2ldLCBhdHRycy0+dmFsdWVzW2pdKSkK KwkJCXsKKwkJCQludWxsX2ZvdW5kID0gdHJ1ZTsKKwkJCQludWxsX2RpbSA9 IGo7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiB0ZXJtaW5hdGUg aWYgd2UgZm91bmQgYXR0cmlidXRlIHdpdGggTlVMTCB2YWx1ZXMgKi8KKwkJ aWYgKG51bGxfZm91bmQpCisJCQlicmVhazsKKwl9CisKKwkvKiBubyByZWd1 bGFyIGRpbWVuc2lvbiBjb250YWlucyBOVUxMIHZhbHVlcyA9PiB3ZSdyZSBk b25lICovCisJaWYgKCEgbnVsbF9mb3VuZCkKKwkJcmV0dXJuOworCisJLyog d2FsayB0aHJvdWdoIHRoZSByb3dzIGFnYWluLCBjb3VudCBOVUxMIHZhbHVl cyBpbiAnbnVsbF9kaW0nICovCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51 bXJvd3M7IGkrKykKKwl7CisJCWlmIChoZWFwX2F0dGlzbnVsbChkYXRhLT5y b3dzW2ldLCBhdHRycy0+dmFsdWVzW251bGxfZGltXSkpCisJCQludWxsX2Nv dW50ICs9IDE7CisJfQorCisJQXNzZXJ0KG51bGxfY291bnQgPD0gZGF0YS0+ bnVtcm93cyk7CisKKwkvKgorCSAqIElmIChudWxsX2NvdW50ID09IG51bXJv d3MpIHRoZSBkaW1lbnNpb24gYWxyZWFkeSBpcyBOVUxMLW9ubHksCisJICog YnV0IGlzIG5vdCB5ZXQgbWFya2VkIGxpa2UgdGhhdC4gSXQncyBlbm91Z2gg dG8gbWFyayBpdCBhbmQKKwkgKiByZXBlYXQgdGhlIHByb2Nlc3MgcmVjdXJz aXZlbHkgKHVudGlsIHdlIHJ1biBvdXQgb2YgZGltZW5zaW9ucykuCisJICov CisJaWYgKG51bGxfY291bnQgPT0gZGF0YS0+bnVtcm93cykKKwl7CisJCWJ1 Y2tldC0+bnVsbHNvbmx5W251bGxfZGltXSA9IHRydWU7CisJCWNyZWF0ZV9u dWxsX2J1Y2tldHMoaGlzdG9ncmFtLCBidWNrZXRfaWR4LCBhdHRycywgc3Rh dHMpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIHRvIHNw bGl0IHRoZSBidWNrZXQgaW50byB0d28gLSBvbmUgd2l0aCBOVUxMIHZhbHVl cyBpbgorCSAqIHRoZSBkaW1lbnNpb24sIG9uZSB3aXRoIG5vbi1OVUxMIHZh bHVlcy4gV2UgZG9uJ3QgbmVlZCB0byBzb3J0CisJICogdGhlIGRhdGEgb3Ig YW55dGhpbmcsIGJ1dCBvdGhlcndpc2UgaXQncyBzaW1pbGFyIHRvIHdoYXQn cyBkb25lCisJICogaW4gcGFydGl0aW9uX2J1Y2tldCgpLgorCSAqLworCisJ LyogY3JlYXRlIGJ1Y2tldCB3aXRoIE5VTEwtb25seSBkaW1lbnNpb24gJ2Rp bScgKi8KKwludWxsX2J1Y2tldCA9IGNvcHlfbXZfYnVja2V0KGJ1Y2tldCwg aGlzdG9ncmFtLT5uZGltZW5zaW9ucyk7CisJbnVsbF9kYXRhID0gKEhpc3Rv Z3JhbUJ1aWxkKW51bGxfYnVja2V0LT5idWlsZF9kYXRhOworCisJLyogcmVt ZW1iZXIgdGhlIGN1cnJlbnQgYXJyYXkgaW5mbyAqLworCW9sZHJvd3MgPSBk YXRhLT5yb3dzOworCW51bXJvd3MgPSBkYXRhLT5udW1yb3dzOworCisJLyog d2UnbGwga2VlcCBub24tTlVMTCB2YWx1ZXMgaW4gdGhlIGN1cnJlbnQgYnVj a2V0ICovCisJZGF0YS0+bnVtcm93cyA9IChudW1yb3dzIC0gbnVsbF9jb3Vu dCk7CisJZGF0YS0+cm93cworCQk9IChIZWFwVHVwbGUqKXBhbGxvYzAoZGF0 YS0+bnVtcm93cyAqIHNpemVvZihIZWFwVHVwbGUpKTsKKworCS8qIGFuZCB0 aGUgTlVMTCB2YWx1ZXMgd2lsbCBnbyB0byB0aGUgbmV3IG9uZSAqLworCW51 bGxfZGF0YS0+bnVtcm93cyA9IG51bGxfY291bnQ7CisJbnVsbF9kYXRhLT5y b3dzCisJCT0gKEhlYXBUdXBsZSopcGFsbG9jMChudWxsX2RhdGEtPm51bXJv d3MgKiBzaXplb2YoSGVhcFR1cGxlKSk7CisKKwkvKiBtYXJrIHRoZSBkaW1l bnNpb24gYXMgTlVMTC1vbmx5IChpbiB0aGUgbmV3IGJ1Y2tldCkgKi8KKwlu dWxsX2J1Y2tldC0+bnVsbHNvbmx5W251bGxfZGltXSA9IHRydWU7CisKKwkv KiB3YWxrIHRocm91Z2ggdGhlIHNhbXBsZSByb3dzIGFuZCBkaXN0cmlidXRl IHRoZW0gYWNjb3JkaW5nbHkgKi8KKwludWxsX2lkeCA9IDA7CisJY3Vycl9p ZHggPSAwOworCWZvciAoaSA9IDA7IGkgPCBudW1yb3dzOyBpKyspCisJewor CQlpZiAoaGVhcF9hdHRpc251bGwob2xkcm93c1tpXSwgYXR0cnMtPnZhbHVl c1tudWxsX2RpbV0pKQorCQkJLyogTlVMTCA9PiBjb3B5IHRvIHRoZSBuZXcg YnVja2V0ICovCisJCQltZW1jcHkoJm51bGxfZGF0YS0+cm93c1tudWxsX2lk eCsrXSwgJm9sZHJvd3NbaV0sCisJCQkJCXNpemVvZihIZWFwVHVwbGUpKTsK KwkJZWxzZQorCQkJbWVtY3B5KCZkYXRhLT5yb3dzW2N1cnJfaWR4KytdLCAm b2xkcm93c1tpXSwKKwkJCQkJc2l6ZW9mKEhlYXBUdXBsZSkpOworCX0KKwor CS8qIHVwZGF0ZSBuZGlzdGluY3QgdmFsdWVzIGZvciB0aGUgYnVja2V0cyAo dG90YWwgYW5kIHBlciBkaW1lbnNpb24pICovCisJdXBkYXRlX2J1Y2tldF9u ZGlzdGluY3QoYnVja2V0LCBhdHRycywgc3RhdHMpOworCXVwZGF0ZV9idWNr ZXRfbmRpc3RpbmN0KG51bGxfYnVja2V0LCBhdHRycywgc3RhdHMpOworCisJ LyoKKwkgKiBUT0RPIFdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcyBmb3IgdGhl IGRpbWVuc2lvbiB3ZSB1c2VkIGZvciBzcGxpdCwKKwkgKiAgICAgIGJlY2F1 c2Ugd2Uga25vdyBob3cgbWFueSBkaXN0aW5jdCB2YWx1ZXMgd2VudCB0byBl YWNoCisJICogICAgICBidWNrZXQgKE5VTEwgaXMgbm90IGEgdmFsdWUsIHNv IDAsIGFuZCB0aGUgb3RoZXIgYnVja2V0IGdvdAorCSAqICAgICAgYWxsIHRo ZSBuZGlzdGluY3QgdmFsdWVzKS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwg aGlzdG9ncmFtLT5uZGltZW5zaW9uczsgaSsrKQorCXsKKwkJdXBkYXRlX2Rp bWVuc2lvbl9uZGlzdGluY3QoYnVja2V0LCBpLCBhdHRycywgc3RhdHMsIGZh bHNlKTsKKwkJdXBkYXRlX2RpbWVuc2lvbl9uZGlzdGluY3QobnVsbF9idWNr ZXQsIGksIGF0dHJzLCBzdGF0cywgZmFsc2UpOworCX0KKworCXBmcmVlKG9s ZHJvd3MpOworCisJLyogYWRkIHRoZSBOVUxMIGJ1Y2tldCB0byB0aGUgaGlz dG9ncmFtICovCisJaGlzdG9ncmFtLT5idWNrZXRzW2hpc3RvZ3JhbS0+bmJ1 Y2tldHMrK10gPSBudWxsX2J1Y2tldDsKKworCS8qCisJICogQW5kIG5vdyBy dW4gdGhlIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IG9uIGJvdGggYnVja2V0cyAo dGhlIG5ldworCSAqIG9uZSBmaXJzdCwgYmVjYXVzZSB0aGUgY2FsbCBtYXkg Y2hhbmdlIG51bWJlciBvZiBidWNrZXRzLCBhbmQKKwkgKiBpdCdzIHVzZWQg YXMgYW4gaW5kZXgpLgorCSAqLworCWNyZWF0ZV9udWxsX2J1Y2tldHMoaGlz dG9ncmFtLCAoaGlzdG9ncmFtLT5uYnVja2V0cy0xKSwgYXR0cnMsIHN0YXRz KTsKKwljcmVhdGVfbnVsbF9idWNrZXRzKGhpc3RvZ3JhbSwgYnVja2V0X2lk eCwgYXR0cnMsIHN0YXRzKTsKKworfQorCisvKgorICogV2UgbmVlZCB0byBw YXNzIHRoZSBTb3J0U3VwcG9ydCB0byB0aGUgY29tcGFyYXRvciwgYnV0IGJz ZWFyY2goKQorICogaGFzIG5vICdjb250ZXh0JyBwYXJhbWV0ZXIsIHNvIHdl IHVzZSBhIGdsb2JhbCB2YXJpYWJsZSAodWdseSkuCisgKi8KK3N0YXRpYyBp bnQKK2JzZWFyY2hfY29tcGFyYXRvcihjb25zdCB2b2lkICogYSwgY29uc3Qg dm9pZCAqIGIpCit7CisJQXNzZXJ0KHNzdXBfcHJpdmF0ZSAhPSBOVUxMKTsK KwlyZXR1cm4gY29tcGFyZV9zY2FsYXJzX3NpbXBsZShhLCBiLCAodm9pZCop c3N1cF9wcml2YXRlKTsKK30KKworLyoKKyAqIFNSRiB3aXRoIGRldGFpbHMg YWJvdXQgYnVja2V0cyBvZiBhIGhpc3RvZ3JhbToKKyAqCisgKiAtIGJ1Y2tl dCBJRCAoMC4uLm5idWNrZXRzKQorICogLSBtaW4gdmFsdWVzIChzdHJpbmcg YXJyYXkpCisgKiAtIG1heCB2YWx1ZXMgKHN0cmluZyBhcnJheSkKKyAqIC0g bnVsbHMgb25seSAoYm9vbGVhbiBhcnJheSkKKyAqIC0gbWluIGluY2x1c2l2 ZSBmbGFncyAoYm9vbGVhbiBhcnJheSkKKyAqIC0gbWF4IGluY2x1c2l2ZSBm bGFncyAoYm9vbGVhbiBhcnJheSkKKyAqIC0gZnJlcXVlbmN5IChkb3VibGUg cHJlY2lzaW9uKQorICoKKyAqIFRoZSBpbnB1dCBpcyB0aGUgT0lEIG9mIHRo ZSBzdGF0aXN0aWNzLCBhbmQgdGhlcmUgYXJlIG5vIHJvd3MKKyAqIHJldHVy bmVkIGlmIHRoZSBzdGF0aXN0aWNzIGNvbnRhaW5zIG5vIGhpc3RvZ3JhbSAo b3IgaWYgdGhlcmUncyBubworICogc3RhdGlzdGljcyBmb3IgdGhlIE9JRCku CisgKgorICogVGhlIHNlY29uZCBwYXJhbWV0ZXIgKHR5cGUpIGRldGVybWlu ZXMgd2hhdCB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZAorICogaW4gdGhlICht aW52YWxzLG1heHZhbHMpLiBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgdmFs dWVzOgorICogCisgKiAwIChhY3R1YWwgdmFsdWVzKQorICogLS0tLS0tLS0t LS0tLS0tLS0KKyAqICAgIC0gcHJpbnRzIGFjdHVhbCB2YWx1ZXMKKyAqICAg IC0gdXNpbmcgdGhlIG91dHB1dCBmdW5jdGlvbiBvZiB0aGUgZGF0YSB0eXBl IChhcyBzdHJpbmcpCisgKiAgICAtIGhhbmR5IGZvciBpbnZlc3RpZ2F0aW5n IHRoZSBoaXN0b2dyYW0KKyAqCisgKiAxIChkaXN0aW5jdCBpbmRleCkKKyAq IC0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgLSBwcmludHMgaW5kZXggb2Yg dGhlIGRpc3RpbmN0IHZhbHVlIChpbnRvIHRoZSBzZXJpYWxpemVkIGFycmF5 KQorICogICAgLSBtYWtlcyBpdCBlYXNpZXIgdG8gc3BvdCBuZWlnaGJvciBi dWNrZXRzLCBldGMuCisgKiAgICAtIGhhbmR5IGZvciBwbG90dGluZyB0aGUg aGlzdG9ncmFtCisgKgorICogMiAobm9ybWFsaXplZCBkaXN0aW5jdCBpbmRl eCkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAt IHByaW50cyBpbmRleCBvZiB0aGUgZGlzdGluY3QgdmFsdWUsIGJ1dCBub3Jt YWxpemVkIGludG8gWzAsMV0KKyAqICAgIC0gc2ltaWxhciB0byAxLCBidXQg c2hvd3MgaG93ICdsb25nJyB0aGUgYnVja2V0IHJhbmdlIGlzCisgKiAgICAt IGhhbmR5IGZvciBwbG90dGluZyB0aGUgaGlzdG9ncmFtCisgKgorICogV2hl biBwbG90dGluZyB0aGUgaGlzdG9ncmFtLCBiZSBjYXJlZnVsIGFzIHRoZSAo MSkgYW5kICgyKSBvcHRpb25zCisgKiBza2V3IHRoZSBsZW5ndGhzIGJ5IGRp c3RyaWJ1dGluZyB0aGUgZGlzdGluY3QgdmFsdWVzIHVuaWZvcm1seS4gRm9y CisgKiBkYXRhIHR5cGVzIHdpdGhvdXQgYSBjbGVhciBtZWFuaW5nIG9mICdk aXN0YW5jZScgKGUuZy4gc3RyaW5ncykgdGhhdAorICogaXMgbm90IGEgYmln IGRlYWwsIGJ1dCBmb3IgbnVtYmVycyBpdCBtYXkgYmUgY29uZnVzaW5nLgor ICovCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX212X2hpc3RvZ3JhbV9idWNr ZXRzKTsKKworRGF0dW0KK3BnX212X2hpc3RvZ3JhbV9idWNrZXRzKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJRnVuY0NhbGxDb250ZXh0CSAgICpmdW5jY3R4 OworCWludAkJCQkJY2FsbF9jbnRyOworCWludAkJCQkJbWF4X2NhbGxzOwor CVR1cGxlRGVzYwkJCXR1cGRlc2M7CisJQXR0SW5NZXRhZGF0YQkgICAqYXR0 aW5tZXRhOworCisJT2lkCQkJCQltdm9pZCA9IFBHX0dFVEFSR19PSUQoMCk7 CisJaW50CQkJCQlvdHlwZSA9IFBHX0dFVEFSR19JTlQzMigxKTsKKworCWlm ICgob3R5cGUgPCAwKSB8fCAob3R5cGUgPiAyKSkKKwkJZWxvZyhFUlJPUiwg ImludmFsaWQgb3V0cHV0IHR5cGUgc3BlY2lmaWVkIik7CisKKwkvKiBzdHVm ZiBkb25lIG9ubHkgb24gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGZ1bmN0aW9u ICovCisJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJCU1lbW9yeUNv bnRleHQgICBvbGRjb250ZXh0OworCQlNVlNlcmlhbGl6ZWRIaXN0b2dyYW0g aGlzdG9ncmFtOworCisJCS8qIGNyZWF0ZSBhIGZ1bmN0aW9uIGNvbnRleHQg Zm9yIGNyb3NzLWNhbGwgcGVyc2lzdGVuY2UgKi8KKwkJZnVuY2N0eCA9IFNS Rl9GSVJTVENBTExfSU5JVCgpOworCisJCS8qIHN3aXRjaCB0byBtZW1vcnkg Y29udGV4dCBhcHByb3ByaWF0ZSBmb3IgbXVsdGlwbGUgZnVuY3Rpb24gY2Fs bHMgKi8KKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhm dW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWhpc3RvZ3Jh bSA9IGxvYWRfbXZfaGlzdG9ncmFtKG12b2lkKTsKKworCQlmdW5jY3R4LT51 c2VyX2ZjdHggPSBoaXN0b2dyYW07CisKKwkJLyogdG90YWwgbnVtYmVyIG9m IHR1cGxlcyB0byBiZSByZXR1cm5lZCAqLworCQlmdW5jY3R4LT5tYXhfY2Fs bHMgPSAwOworCQlpZiAoZnVuY2N0eC0+dXNlcl9mY3R4ICE9IE5VTEwpCisJ CQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBoaXN0b2dyYW0tPm5idWNrZXRzOwor CisJCS8qIEJ1aWxkIGEgdHVwbGUgZGVzY3JpcHRvciBmb3Igb3VyIHJlc3Vs dCB0eXBlICovCisJCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2luZm8s IE5VTEwsICZ0dXBkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2coImZ1bmN0aW9uIHJldHVy bmluZyByZWNvcmQgY2FsbGVkIGluIGNvbnRleHQgIgorCQkJCQkJCSJ0aGF0 IGNhbm5vdCBhY2NlcHQgdHlwZSByZWNvcmQiKSkpOworCisJCS8qCisJCSAq IGdlbmVyYXRlIGF0dHJpYnV0ZSBtZXRhZGF0YSBuZWVkZWQgbGF0ZXIgdG8g cHJvZHVjZSB0dXBsZXMKKwkJICogZnJvbSByYXcgQyBzdHJpbmdzCisJCSAq LworCQlhdHRpbm1ldGEgPSBUdXBsZURlc2NHZXRBdHRJbk1ldGFkYXRhKHR1 cGRlc2MpOworCQlmdW5jY3R4LT5hdHRpbm1ldGEgPSBhdHRpbm1ldGE7CisK KwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKwor CS8qIHN0dWZmIGRvbmUgb24gZXZlcnkgY2FsbCBvZiB0aGUgZnVuY3Rpb24g Ki8KKwlmdW5jY3R4ID0gU1JGX1BFUkNBTExfU0VUVVAoKTsKKworCWNhbGxf Y250ciA9IGZ1bmNjdHgtPmNhbGxfY250cjsKKwltYXhfY2FsbHMgPSBmdW5j Y3R4LT5tYXhfY2FsbHM7CisJYXR0aW5tZXRhID0gZnVuY2N0eC0+YXR0aW5t ZXRhOworCisJaWYgKGNhbGxfY250ciA8IG1heF9jYWxscykgICAgLyogZG8g d2hlbiB0aGVyZSBpcyBtb3JlIGxlZnQgdG8gc2VuZCAqLworCXsKKwkJY2hh cgkgICoqdmFsdWVzOworCQlIZWFwVHVwbGUJdHVwbGU7CisJCURhdHVtCQly ZXN1bHQ7CisJCWludDJ2ZWN0b3IgKnN0YWtleXM7CisJCU9pZAkJCXJlbGlk OworCQlkb3VibGUJCWJ1Y2tldF9zaXplID0gMS4wOworCisJCWNoYXIgKmJ1 ZmYgPSBwYWxsb2MwKDEwMjQpOworCQljaGFyICpmb3JtYXQ7CisKKwkJaW50 CQkJaTsKKworCQlPaWQJCSAgICpvdXRmdW5jczsKKwkJRm1nckluZm8gICAq Zm1ncmluZm87CisKKwkJTVZTZXJpYWxpemVkSGlzdG9ncmFtIGhpc3RvZ3Jh bTsKKwkJTVZTZXJpYWxpemVkQnVja2V0IGJ1Y2tldDsKKworCQloaXN0b2dy YW0gPSAoTVZTZXJpYWxpemVkSGlzdG9ncmFtKWZ1bmNjdHgtPnVzZXJfZmN0 eDsKKworCQlBc3NlcnQoY2FsbF9jbnRyIDwgaGlzdG9ncmFtLT5uYnVja2V0 cyk7CisKKwkJYnVja2V0ID0gaGlzdG9ncmFtLT5idWNrZXRzW2NhbGxfY250 cl07CisKKwkJc3Rha2V5cyA9IGZpbmRfbXZfYXR0bnVtcyhtdm9pZCwgJnJl bGlkKTsKKworCQkvKgorCQkgKiBQcmVwYXJlIGEgdmFsdWVzIGFycmF5IGZv ciBidWlsZGluZyB0aGUgcmV0dXJuZWQgdHVwbGUuCisJCSAqIFRoaXMgc2hv dWxkIGJlIGFuIGFycmF5IG9mIEMgc3RyaW5ncyB3aGljaCB3aWxsCisJCSAq IGJlIHByb2Nlc3NlZCBsYXRlciBieSB0aGUgdHlwZSBpbnB1dCBmdW5jdGlv bnMuCisJCSAqLworCQl2YWx1ZXMgPSAoY2hhciAqKikgcGFsbG9jKDkgKiBz aXplb2YoY2hhciAqKSk7CisKKwkJdmFsdWVzWzBdID0gKGNoYXIgKikgcGFs bG9jKDY0ICogc2l6ZW9mKGNoYXIpKTsKKworCQkvKiBhcnJheXMgKi8KKwkJ dmFsdWVzWzFdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICogc2l6ZW9mKGNo YXIpKTsKKwkJdmFsdWVzWzJdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICog c2l6ZW9mKGNoYXIpKTsKKwkJdmFsdWVzWzNdID0gKGNoYXIgKikgcGFsbG9j MCgxMDI0ICogc2l6ZW9mKGNoYXIpKTsKKwkJdmFsdWVzWzRdID0gKGNoYXIg KikgcGFsbG9jMCgxMDI0ICogc2l6ZW9mKGNoYXIpKTsKKwkJdmFsdWVzWzVd ID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICogc2l6ZW9mKGNoYXIpKTsKKwor CQl2YWx1ZXNbNl0gPSAoY2hhciAqKSBwYWxsb2MoNjQgKiBzaXplb2YoY2hh cikpOworCQl2YWx1ZXNbN10gPSAoY2hhciAqKSBwYWxsb2MoNjQgKiBzaXpl b2YoY2hhcikpOworCQl2YWx1ZXNbOF0gPSAoY2hhciAqKSBwYWxsb2MoNjQg KiBzaXplb2YoY2hhcikpOworCisJCS8qIHdlIG5lZWQgdG8gZG8gdGhpcyBv bmx5IHdoZW4gcHJpbnRpbmcgdGhlIGFjdHVhbCB2YWx1ZXMgKi8KKwkJb3V0 ZnVuY3MgPSAoT2lkKilwYWxsb2MwKHNpemVvZihPaWQpICogaGlzdG9ncmFt LT5uZGltZW5zaW9ucyk7CisJCWZtZ3JpbmZvID0gKEZtZ3JJbmZvKilwYWxs b2MwKHNpemVvZihGbWdySW5mbykgKiBoaXN0b2dyYW0tPm5kaW1lbnNpb25z KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgaGlzdG9ncmFtLT5uZGltZW5zaW9u czsgaSsrKQorCQl7CisJCQlib29sIGlzdmFybGVuYTsKKworCQkJZ2V0VHlw ZU91dHB1dEluZm8oZ2V0X2F0dHR5cGUocmVsaWQsIHN0YWtleXMtPnZhbHVl c1tpXSksCisJCQkJCQkJICAmb3V0ZnVuY3NbaV0sICZpc3ZhcmxlbmEpOwor CisJCQlmbWdyX2luZm8ob3V0ZnVuY3NbaV0sICZmbWdyaW5mb1tpXSk7CisJ CX0KKworCQlzbnByaW50Zih2YWx1ZXNbMF0sIDY0LCAiJWQiLCBjYWxsX2Nu dHIpOwkvKiBidWNrZXQgSUQgKi8KKworCQkvKgorCQkgKiBjdXJyZW50bHkg d2Ugb25seSBwcmludCBhcnJheSBvZiBpbmRleGVzLCBidXQgdGhlIGRlZHVw bGljYXRlZAorCQkgKiB2YWx1ZXMgc2hvdWxkIGJlIHNvcnRlZCwgc28gdGhp cyBpcyBhY3R1YWxseSBxdWl0ZSB1c2VmdWwKKwkJICoKKwkJICogVE9ETyBw cmludCB0aGUgYWN0dWFsIG1pbi9tYXggdmFsdWVzLCB1c2luZyB0aGUgb3V0 cHV0CisJCSAqICAgICAgZnVuY3Rpb24gb2YgdGhlIGF0dHJpYnV0ZSB0eXBl CisJCSAqLworCisJCWZvciAoaSA9IDA7IGkgPCBoaXN0b2dyYW0tPm5kaW1l bnNpb25zOyBpKyspCisJCXsKKwkJCWJ1Y2tldF9zaXplICo9IChidWNrZXQt Pm1heFtpXSAtIGJ1Y2tldC0+bWluW2ldKSAqIDEuMAorCQkJCQkJCQkJCQkv IChoaXN0b2dyYW0tPm52YWx1ZXNbaV0tMSk7CisKKwkJCS8qIHByaW50IHRo ZSBhY3R1YWwgdmFsdWVzLCBpLmUuIHVzZSBvdXRwdXQgZnVuY3Rpb24gZXRj LiAqLworCQkJaWYgKG90eXBlID09IDApCisJCQl7CisJCQkJRGF0dW0gbWlu dmFsLCBtYXh2YWw7CisJCQkJRGF0dW0gbWlub3V0LCBtYXhvdXQ7CisKKwkJ CQlmb3JtYXQgPSAiJXMsICVzIjsKKwkJCQlpZiAoaSA9PSAwKQorCQkJCQlm b3JtYXQgPSAieyVzJXMiOworCQkJCWVsc2UgaWYgKGkgPT0gaGlzdG9ncmFt LT5uZGltZW5zaW9ucy0xKQorCQkJCQlmb3JtYXQgPSAiJXMsICVzfSI7CisK KwkJCQltaW52YWwgPSBoaXN0b2dyYW0tPnZhbHVlc1tpXVtidWNrZXQtPm1p bltpXV07CisJCQkJbWlub3V0ID0gRnVuY3Rpb25DYWxsMSgmZm1ncmluZm9b aV0sIG1pbnZhbCk7CisKKwkJCQltYXh2YWwgPSBoaXN0b2dyYW0tPnZhbHVl c1tpXVtidWNrZXQtPm1heFtpXV07CisJCQkJbWF4b3V0ID0gRnVuY3Rpb25D YWxsMSgmZm1ncmluZm9baV0sIG1heHZhbCk7CisKKwkJCQkvLyBzbnByaW50 ZihidWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVlc1sxXSwgYnVja2V0LT5taW5b aV0pOworCQkJCXNucHJpbnRmKGJ1ZmYsIDEwMjQsIGZvcm1hdCwgdmFsdWVz WzFdLCBEYXR1bUdldFBvaW50ZXIobWlub3V0KSk7CisJCQkJc3RybmNweSh2 YWx1ZXNbMV0sIGJ1ZmYsIDEwMjMpOworCQkJCWJ1ZmZbMF0gPSAnXDAnOwor CisJCQkJLy8gc25wcmludGYoYnVmZiwgMTAyNCwgZm9ybWF0LCB2YWx1ZXNb Ml0sIGJ1Y2tldC0+bWF4W2ldKTsKKwkJCQlzbnByaW50ZihidWZmLCAxMDI0 LCBmb3JtYXQsIHZhbHVlc1syXSwgRGF0dW1HZXRQb2ludGVyKG1heG91dCkp OworCQkJCXN0cm5jcHkodmFsdWVzWzJdLCBidWZmLCAxMDIzKTsKKwkJCQli dWZmWzBdID0gJ1wwJzsKKwkJCX0KKwkJCWVsc2UgaWYgKG90eXBlID09IDEp CisJCQl7CisJCQkJZm9ybWF0ID0gIiVzLCAlZCI7CisJCQkJaWYgKGkgPT0g MCkKKwkJCQkJZm9ybWF0ID0gInslcyVkIjsKKwkJCQllbHNlIGlmIChpID09 IGhpc3RvZ3JhbS0+bmRpbWVuc2lvbnMtMSkKKwkJCQkJZm9ybWF0ID0gIiVz LCAlZH0iOworCisJCQkJc25wcmludGYoYnVmZiwgMTAyNCwgZm9ybWF0LCB2 YWx1ZXNbMV0sIGJ1Y2tldC0+bWluW2ldKTsKKwkJCQlzdHJuY3B5KHZhbHVl c1sxXSwgYnVmZiwgMTAyMyk7CisJCQkJYnVmZlswXSA9ICdcMCc7CisKKwkJ CQlzbnByaW50ZihidWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVlc1syXSwgYnVj a2V0LT5tYXhbaV0pOworCQkJCXN0cm5jcHkodmFsdWVzWzJdLCBidWZmLCAx MDIzKTsKKwkJCQlidWZmWzBdID0gJ1wwJzsKKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQlmb3JtYXQgPSAiJXMsICVmIjsKKwkJCQlpZiAoaSA9PSAwKQor CQkJCQlmb3JtYXQgPSAieyVzJWYiOworCQkJCWVsc2UgaWYgKGkgPT0gaGlz dG9ncmFtLT5uZGltZW5zaW9ucy0xKQorCQkJCQlmb3JtYXQgPSAiJXMsICVm fSI7CisKKwkJCQlzbnByaW50ZihidWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVl c1sxXSwKKwkJCQkJCSBidWNrZXQtPm1pbltpXSAqIDEuMCAvIChoaXN0b2dy YW0tPm52YWx1ZXNbaV0tMSkpOworCQkJCXN0cm5jcHkodmFsdWVzWzFdLCBi dWZmLCAxMDIzKTsKKwkJCQlidWZmWzBdID0gJ1wwJzsKKworCQkJCXNucHJp bnRmKGJ1ZmYsIDEwMjQsIGZvcm1hdCwgdmFsdWVzWzJdLAorCQkJCQkJYnVj a2V0LT5tYXhbaV0gKiAxLjAgLyAoaGlzdG9ncmFtLT5udmFsdWVzW2ldLTEp KTsKKwkJCQlzdHJuY3B5KHZhbHVlc1syXSwgYnVmZiwgMTAyMyk7CisJCQkJ YnVmZlswXSA9ICdcMCc7CisJCQl9CisKKwkJCWZvcm1hdCA9ICIlcywgJXMi OworCQkJaWYgKGkgPT0gMCkKKwkJCQlmb3JtYXQgPSAieyVzJXMiOworCQkJ ZWxzZSBpZiAoaSA9PSBoaXN0b2dyYW0tPm5kaW1lbnNpb25zLTEpCisJCQkJ Zm9ybWF0ID0gIiVzLCAlc30iOworCisJCQlzbnByaW50ZihidWZmLCAxMDI0 LCBmb3JtYXQsIHZhbHVlc1szXSwgYnVja2V0LT5udWxsc29ubHlbaV0gPyAi dCIgOiAiZiIpOworCQkJc3RybmNweSh2YWx1ZXNbM10sIGJ1ZmYsIDEwMjMp OworCQkJYnVmZlswXSA9ICdcMCc7CisKKwkJCXNucHJpbnRmKGJ1ZmYsIDEw MjQsIGZvcm1hdCwgdmFsdWVzWzRdLCBidWNrZXQtPm1pbl9pbmNsdXNpdmVb aV0gPyAidCIgOiAiZiIpOworCQkJc3RybmNweSh2YWx1ZXNbNF0sIGJ1ZmYs IDEwMjMpOworCQkJYnVmZlswXSA9ICdcMCc7CisKKwkJCXNucHJpbnRmKGJ1 ZmYsIDEwMjQsIGZvcm1hdCwgdmFsdWVzWzVdLCBidWNrZXQtPm1heF9pbmNs dXNpdmVbaV0gPyAidCIgOiAiZiIpOworCQkJc3RybmNweSh2YWx1ZXNbNV0s IGJ1ZmYsIDEwMjMpOworCQkJYnVmZlswXSA9ICdcMCc7CisJCX0KKworCQlz bnByaW50Zih2YWx1ZXNbNl0sIDY0LCAiJWYiLCBidWNrZXQtPm50dXBsZXMp OwkvKiBmcmVxdWVuY3kgKi8KKwkJc25wcmludGYodmFsdWVzWzddLCA2NCwg IiVmIiwgYnVja2V0LT5udHVwbGVzIC8gYnVja2V0X3NpemUpOwkvKiBkZW5z aXR5ICovCisJCXNucHJpbnRmKHZhbHVlc1s4XSwgNjQsICIlZiIsIGJ1Y2tl dF9zaXplKTsJLyogYnVja2V0X3NpemUgKi8KKworCQkvKiBidWlsZCBhIHR1 cGxlICovCisJCXR1cGxlID0gQnVpbGRUdXBsZUZyb21DU3RyaW5ncyhhdHRp bm1ldGEsIHZhbHVlcyk7CisKKwkJLyogbWFrZSB0aGUgdHVwbGUgaW50byBh IGRhdHVtICovCisJCXJlc3VsdCA9IEhlYXBUdXBsZUdldERhdHVtKHR1cGxl KTsKKworCQkvKiBjbGVhbiB1cCAodGhpcyBpcyBub3QgcmVhbGx5IG5lY2Vz c2FyeSkgKi8KKwkJcGZyZWUodmFsdWVzWzBdKTsKKwkJcGZyZWUodmFsdWVz WzFdKTsKKwkJcGZyZWUodmFsdWVzWzJdKTsKKwkJcGZyZWUodmFsdWVzWzNd KTsKKwkJcGZyZWUodmFsdWVzWzRdKTsKKwkJcGZyZWUodmFsdWVzWzVdKTsK KwkJcGZyZWUodmFsdWVzWzZdKTsKKworCQlwZnJlZSh2YWx1ZXMpOworCisJ CVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCByZXN1bHQpOworCX0KKwllbHNl ICAgIC8qIGRvIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBsZWZ0ICovCisJewor CQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJfQorfQorCisjaWZkZWYg REVCVUdfTVZISVNUCisvKgorICogcHJpbnRzIGRlYnVnZ2luZyBpbmZvIGFi b3V0IG1hdGNoZWQgaGlzdG9ncmFtIGJ1Y2tldHMgKGZ1bGwvcGFydGlhbCkK KyAqCisgKiBYWFggQ3VycmVudGx5IHdvcmtzIG9ubHkgZm9yIElOVCBkYXRh IHR5cGUuCisgKi8KK3ZvaWQKK2RlYnVnX2hpc3RvZ3JhbV9tYXRjaGVzKE1W U2VyaWFsaXplZEhpc3RvZ3JhbSBtdmhpc3QsIGNoYXIgKm1hdGNoZXMpCit7 CisJaW50IGksIGo7CisKKwlmbG9hdCBmZnVsbCA9IDAsIGZwYXJ0aWFsID0g MDsKKwlpbnQgbmZ1bGwgPSAwLCBucGFydGlhbCA9IDA7CisKKwlmb3IgKGkg PSAwOyBpIDwgbXZoaXN0LT5uYnVja2V0czsgaSsrKQorCXsKKwkJTVZTZXJp YWxpemVkQnVja2V0IGJ1Y2tldCA9IG12aGlzdC0+YnVja2V0c1tpXTsKKwor CQljaGFyIHJhbmdlc1sxMDI0XTsKKworCQlpZiAoISBtYXRjaGVzW2ldKQor CQkJY29udGludWU7CisKKwkJLyogaW5jcmVtZW50IHRoZSBjb3VudGVycyAq LworCQluZnVsbCArPSAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX0ZV TEwpID8gMSA6IDA7CisJCW5wYXJ0aWFsICs9IChtYXRjaGVzW2ldID09IE1W U1RBVFNfTUFUQ0hfUEFSVElBTCkgPyAxIDogMDsKKworCQkvKiBhbmQgYWxz byB1cGRhdGUgdGhlIGZyZXF1ZW5jaWVzICovCisJCWZmdWxsICs9IChtYXRj aGVzW2ldID09IE1WU1RBVFNfTUFUQ0hfRlVMTCkgPyBidWNrZXQtPm50dXBs ZXMgOiAwOworCQlmcGFydGlhbCArPSAobWF0Y2hlc1tpXSA9PSBNVlNUQVRT X01BVENIX1BBUlRJQUwpID8gYnVja2V0LT5udHVwbGVzIDogMDsKKworCQlt ZW1zZXQocmFuZ2VzLCAwLCBzaXplb2YocmFuZ2VzKSk7CisKKwkJLyogYnVp bGQgcmFuZ2VzIGZvciBhbGwgdGhlIGRpbWVudGlvbnMgKi8KKwkJZm9yIChq ID0gMDsgaiA8IG12aGlzdC0+bmRpbWVuc2lvbnM7IGorKykKKwkJeworCQkJ c3ByaW50ZihyYW5nZXMsICIlcyBbJWQgJWRdIiwgcmFuZ2VzLAorCQkJCQkJ CQkJCSAgRGF0dW1HZXRJbnQzMihtdmhpc3QtPnZhbHVlc1tqXVtidWNrZXQt Pm1pbltqXV0pLAorCQkJCQkJCQkJCSAgRGF0dW1HZXRJbnQzMihtdmhpc3Qt PnZhbHVlc1tqXVtidWNrZXQtPm1heFtqXV0pKTsKKwkJfQorCisJCWVsb2co V0FSTklORywgImJ1Y2tldCAlZCAlcyA9PiAlZCBbJWZdIiwgaSwgcmFuZ2Vz LCBtYXRjaGVzW2ldLCBidWNrZXQtPm50dXBsZXMpOworCX0KKworCWVsb2co V0FSTklORywgImZ1bGw9JWYgcGFydGlhbD0lZiAoJWYpIiwgZmZ1bGwsIGZw YXJ0aWFsLCAoZmZ1bGwgKyAwLjUgKiBmcGFydGlhbCkpOworfQorI2VuZGlm CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9i aW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDdkMTNhMzguLjk0MmI3NzkgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9i aW4vcHNxbC9kZXNjcmliZS5jCkBAIC0yMTA5LDkgKzIxMDksOSBAQCBkZXNj cmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAog CQl7CiAJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAgIlNF TEVDVCBvaWQsIHN0YW5hbWVzcGFjZTo6cmVnbmFtZXNwYWNlIEFTIG5zcCwg c3RhbmFtZSwgc3Rha2V5cyxcbiIKLQkJCQkJCSAgICIgIGRlcHNfZW5hYmxl ZCwgbWN2X2VuYWJsZWQsXG4iCi0JCQkJCQkgICAiICBkZXBzX2J1aWx0LCBt Y3ZfYnVpbHQsXG4iCi0JCQkJCQkgICAiICBtY3ZfbWF4X2l0ZW1zLFxuIgor CQkJCQkJICAgIiAgZGVwc19lbmFibGVkLCBtY3ZfZW5hYmxlZCwgaGlzdF9l bmFibGVkLFxuIgorCQkJCQkJICAgIiAgZGVwc19idWlsdCwgbWN2X2J1aWx0 LCBoaXN0X2J1aWx0LFxuIgorCQkJCQkJICAgIiAgbWN2X21heF9pdGVtcywg aGlzdF9tYXhfYnVja2V0cyxcbiIKIAkJCQkJCSAgICIgIChTRUxFQ1Qgc3Ry aW5nX2FnZyhhdHRuYW1lOjp0ZXh0LCcsICcpXG4iCiAJCQkJCQkgICAiICAg IEZST00gKChTRUxFQ1QgdW5uZXN0KHN0YWtleXMpIEFTIGF0dG51bSkgc1xu IgogCQkJCQkJICAgIiAgICAgICAgIEpPSU4gcGdfYXR0cmlidXRlIGEgT04g KHN0YXJlbGlkID0gYS5hdHRyZWxpZCBhbmQgYS5hdHRudW0gPSBzLmF0dG51 bSkpKSBBUyBhdHRudW1zXG4iCkBAIC0yMTU0LDggKzIxNTQsMTcgQEAgZGVz Y3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwK IAkJCQkJCWZpcnN0ID0gZmFsc2U7CiAJCQkJCX0KIAorCQkJCQlpZiAoIXN0 cmNtcChQUWdldHZhbHVlKHJlc3VsdCwgaSwgNiksICJ0IikpCisJCQkJCXsK KwkJCQkJCWlmICghIGZpcnN0KQorCQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVy KCZidWYsICIsIGhpc3RvZ3JhbSIpOworCQkJCQkJZWxzZQorCQkJCQkJCWFw cGVuZFBRRXhwQnVmZmVyKCZidWYsICIoaGlzdG9ncmFtIik7CisJCQkJCQlm aXJzdCA9IGZhbHNlOworCQkJCQl9CisKIAkJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoJmJ1ZiwgIikgT04gKCVzKSIsCi0JCQkJCQkJUFFnZXR2YWx1ZShyZXN1 bHQsIGksIDkpKTsKKwkJCQkJCQlQUWdldHZhbHVlKHJlc3VsdCwgaSwgMTIp KTsKIAogCQkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250LCBidWYuZGF0 YSk7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19tdl9zdGF0aXN0aWMuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZf c3RhdGlzdGljLmgKaW5kZXggZmQ3MTA3ZC4uYTU5NDVhZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oCkBAIC0z OCwxMyArMzgsMTYgQEAgQ0FUQUxPRyhwZ19tdl9zdGF0aXN0aWMsMzM4MSkK IAkvKiBzdGF0aXN0aWNzIHJlcXVlc3RlZCB0byBidWlsZCAqLwogCWJvb2wJ CWRlcHNfZW5hYmxlZDsJCS8qIGFuYWx5emUgZGVwZW5kZW5jaWVzPyAqLwog CWJvb2wJCW1jdl9lbmFibGVkOwkJLyogYnVpbGQgTUNWIGxpc3Q/ICovCisJ Ym9vbAkJaGlzdF9lbmFibGVkOwkJLyogYnVpbGQgaGlzdG9ncmFtPyAqLwog Ci0JLyogTUNWIHNpemUgKi8KKwkvKiBoaXN0b2dyYW0gLyBNQ1Ygc2l6ZSAq LwogCWludDMyCQltY3ZfbWF4X2l0ZW1zOwkJLyogbWF4IE1DViBpdGVtcyAq LworCWludDMyCQloaXN0X21heF9idWNrZXRzOwkvKiBtYXggaGlzdG9ncmFt IGJ1Y2tldHMgKi8KIAogCS8qIHN0YXRpc3RpY3MgdGhhdCBhcmUgYXZhaWxh YmxlIChpZiByZXF1ZXN0ZWQpICovCiAJYm9vbAkJZGVwc19idWlsdDsJCQkv KiBkZXBlbmRlbmNpZXMgd2VyZSBidWlsdCAqLwogCWJvb2wJCW1jdl9idWls dDsJCQkvKiBNQ1YgbGlzdCB3YXMgYnVpbHQgKi8KKwlib29sCQloaXN0X2J1 aWx0OwkJCS8qIGhpc3RvZ3JhbSB3YXMgYnVpbHQgKi8KIAogCS8qIHZhcmlh YmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSwgYnV0IHdlIGFsbG93IGRp cmVjdCBhY2Nlc3MgdG8gc3Rha2V5cyAqLwogCWludDJ2ZWN0b3IJc3Rha2V5 czsJCQkvKiBhcnJheSBvZiBjb2x1bW4ga2V5cyAqLwpAQCAtNTIsNiArNTUs NyBAQCBDQVRBTE9HKHBnX212X3N0YXRpc3RpYywzMzgxKQogI2lmZGVmIENB VEFMT0dfVkFSTEVOCiAJYnl0ZWEJCXN0YWRlcHM7CQkJLyogZGVwZW5kZW5j aWVzIChzZXJpYWxpemVkKSAqLwogCWJ5dGVhCQlzdGFtY3Y7CQkJCS8qIE1D ViBsaXN0IChzZXJpYWxpemVkKSAqLworCWJ5dGVhCQlzdGFoaXN0OwkJCS8q IE1WIGhpc3RvZ3JhbSAoc2VyaWFsaXplZCkgKi8KICNlbmRpZgogCiB9IEZv cm1EYXRhX3BnX212X3N0YXRpc3RpYzsKQEAgLTY3LDE3ICs3MSwyMSBAQCB0 eXBlZGVmIEZvcm1EYXRhX3BnX212X3N0YXRpc3RpYyAqRm9ybV9wZ19tdl9z dGF0aXN0aWM7CiAgKgkJY29tcGlsZXIgY29uc3RhbnRzIGZvciBwZ19tdl9z dGF0aXN0aWMKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwotI2RlZmluZSBO YXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTExCisjZGVmaW5lIE5hdHRzX3Bn X212X3N0YXRpc3RpYwkJCQkJMTUKICNkZWZpbmUgQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3RhcmVsaWQJCQkxCiAjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlz dGljX3N0YW5hbWUJCQkyCiAjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGlj X3N0YW5hbWVzcGFjZQkJMwogI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3Rp Y19kZXBzX2VuYWJsZWQJCTQKICNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0 aWNfbWN2X2VuYWJsZWQJCTUKLSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0 aWNfbWN2X21heF9pdGVtcwkJNgotI2RlZmluZSBBbnVtX3BnX212X3N0YXRp c3RpY19kZXBzX2J1aWx0CQkJNwotI2RlZmluZSBBbnVtX3BnX212X3N0YXRp c3RpY19tY3ZfYnVpbHQJCQk4Ci0jZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlz dGljX3N0YWtleXMJCQk5Ci0jZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGlj X3N0YWRlcHMJCQkxMAotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19z dGFtY3YJCQkJMTEKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlz dF9lbmFibGVkCQk2CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX21j dl9tYXhfaXRlbXMJCTcKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNf aGlzdF9tYXhfYnVja2V0cwk4CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlz dGljX2RlcHNfYnVpbHQJCQk5CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlz dGljX21jdl9idWlsdAkJCTEwCisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlz dGljX2hpc3RfYnVpbHQJCQkxMQorI2RlZmluZSBBbnVtX3BnX212X3N0YXRp c3RpY19zdGFrZXlzCQkJMTIKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0 aWNfc3RhZGVwcwkJCTEzCisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGlj X3N0YW1jdgkJCQkxNAorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19z dGFoaXN0CQkJMTUKIAogI2VuZGlmICAgLyogUEdfTVZfU1RBVElTVElDX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5o IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKaW5kZXggMTg3NWUy Ni4uMmViMTZmNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgK QEAgLTI3NDksNiArMjc0OSwxMCBAQCBEQVRBKGluc2VydCBPSUQgPSAzMzc2 ICggIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbwlQR05TUCBQR1VJRCAxMiAx IDAgMCAwIGYgZiBmCiBERVNDUigibXVsdGktdmFyaWF0ZSBzdGF0aXN0aWNz OiBNQ1YgbGlzdCBpbmZvIik7CiBEQVRBKGluc2VydCBPSUQgPSAzMzczICgg IHBnX212X21jdl9pdGVtcyBQR05TUCBQR1VJRCAxMiAxIDEwMDAgMCAwIGYg ZiBmIGYgdCB0IGkgcyAxIDAgMjI0OSAiMjYiICJ7MjYsMjMsMTAwOSwxMDAw LDcwMX0iICJ7aSxvLG8sbyxvfSIgIntvaWQsaW5kZXgsdmFsdWVzLG51bGxz LGZyZXF1ZW5jeX0iIF9udWxsXyBfbnVsbF8gcGdfbXZfbWN2X2l0ZW1zIF9u dWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoImRldGFpbHMgYWJvdXQg TUNWIGxpc3QgaXRlbXMiKTsKK0RBVEEoaW5zZXJ0IE9JRCA9IDMzNzUgKCAg cGdfbXZfc3RhdHNfaGlzdG9ncmFtX2luZm8JUEdOU1AgUEdVSUQgMTIgMSAw IDAgMCBmIGYgZiBmIHQgZiBpIHMgMSAwIDI1ICIxNyIgX251bGxfIF9udWxs XyBfbnVsbF8gX251bGxfIF9udWxsXyBwZ19tdl9zdGF0c19oaXN0b2dyYW1f aW5mbyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKK0RFU0NSKCJtdWx0aS12 YXJpYXRlIHN0YXRpc3RpY3M6IGhpc3RvZ3JhbSBpbmZvIik7CitEQVRBKGlu c2VydCBPSUQgPSAzMzc0ICggIHBnX212X2hpc3RvZ3JhbV9idWNrZXRzIFBH TlNQIFBHVUlEIDEyIDEgMTAwMCAwIDAgZiBmIGYgZiB0IHQgaSBzIDIgMCAy MjQ5ICIyNiAyMyIgInsyNiwyMywyMywxMDA5LDEwMDksMTAwMCwxMDAwLDEw MDAsNzAxLDcwMSw3MDF9IiAie2ksaSxvLG8sbyxvLG8sbyxvLG8sb30iICJ7 b2lkLG90eXBlLGluZGV4LG1pbnZhbHMsbWF4dmFscyxudWxsc29ubHksbWlu aW5jbHVzaXZlLG1heGluY2x1c2l2ZSxmcmVxdWVuY3ksZGVuc2l0eSxidWNr ZXRfc2l6ZX0iIF9udWxsXyBfbnVsbF8gcGdfbXZfaGlzdG9ncmFtX2J1Y2tl dHMgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CitERVNDUigiZGV0YWlscyBh Ym91dCBoaXN0b2dyYW0gYnVja2V0cyIpOwogCiBEQVRBKGluc2VydCBPSUQg PSAxOTI4ICggIHBnX3N0YXRfZ2V0X251bXNjYW5zCQkJUEdOU1AgUEdVSUQg MTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBzIHIgMSAwIDIwICIyNiIgX251bGxf IF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwZ19zdGF0X2dldF9udW1z Y2FucyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKIERFU0NSKCJzdGF0aXN0 aWNzOiBudW1iZXIgb2Ygc2NhbnMgZG9uZSBmb3IgdGFibGUvaW5kZXgiKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oCmluZGV4IGQzYzk4OTguLjEy OThjNDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9u LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaApAQCAtNTkz LDEwICs1OTMsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgTVZTdGF0aXN0aWNJbmZv CiAJLyogZW5hYmxlZCBzdGF0aXN0aWNzICovCiAJYm9vbAkJZGVwc19lbmFi bGVkOwkvKiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBlbmFibGVkICovCiAJ Ym9vbAkJbWN2X2VuYWJsZWQ7CS8qIE1DViBsaXN0IGVuYWJsZWQgKi8KKwli b29sCQloaXN0X2VuYWJsZWQ7CS8qIGhpc3RvZ3JhbSBlbmFibGVkICovCiAK IAkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwogCWJvb2wJCWRl cHNfYnVpbHQ7CQkvKiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBidWlsdCAq LwogCWJvb2wJCW1jdl9idWlsdDsJCS8qIE1DViBsaXN0IGJ1aWx0ICovCisJ Ym9vbAkJaGlzdF9idWlsdDsJCS8qIGhpc3RvZ3JhbSBidWlsdCAqLwogCiAJ LyogY29sdW1ucyBpbiB0aGUgc3RhdGlzdGljcyAoYXR0bnVtcykgKi8KIAlp bnQydmVjdG9yICpzdGFrZXlzOwkJLyogYXR0bnVtcyBvZiB0aGUgY29sdW1u cyBjb3ZlcmVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9t dnN0YXRzLmggYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKaW5kZXgg NDUzNWRiNy4uZjA1YTUxNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvbXZzdGF0cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMu aApAQCAtOTIsNiArOTIsMTIzIEBAIHR5cGVkZWYgTUNWTGlzdERhdGEgKk1D Vkxpc3Q7CiAjZGVmaW5lIE1WU1RBVF9NQ1ZMSVNUX01BWF9JVEVNUwk4MTky CS8qIG1heCBpdGVtcyBpbiBNQ1YgbGlzdCAqLwogCiAvKgorICogTXVsdGl2 YXJpYXRlIGhpc3RvZ3JhbXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgTVZCdWNr ZXREYXRhIHsKKworCS8qIEZyZXF1ZW5jaWVzIG9mIHRoaXMgYnVja2V0LiAq LworCWZsb2F0CW50dXBsZXM7CS8qIGZyZXF1ZW5jeSBvZiB0dXBsZXMgdHVw bGVzICovCisKKwkvKgorCSAqIEluZm9ybWF0aW9uIGFib3V0IGRpbWVuc2lv bnMgYmVpbmcgTlVMTC1vbmx5LiBOb3QgeWV0IHVzZWQuCisJICovCisJYm9v bCAgICpudWxsc29ubHk7CisKKwkvKiBsb3dlciBib3VuZGFyaWVzIC0gdmFs dWVzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5lcXVhbGl0aWVzICov CisJRGF0dW0gICptaW47CisJYm9vbCAgICptaW5faW5jbHVzaXZlOworCisJ LyogdXBwZXIgYm91bmRhcmllcyAtIHZhbHVlcyBhbmQgaW5mb3JtYXRpb24g YWJvdXQgdGhlIGluZXF1YWxpdGllcyAqLworCURhdHVtICAqbWF4OworCWJv b2wgICAqbWF4X2luY2x1c2l2ZTsKKworCS8qIHVzZWQgd2hlbiBidWlsZGlu ZyB0aGUgaGlzdG9ncmFtIChub3Qgc2VyaWFsaXplZC9kZXNlcmlhbGl6ZWQp ICovCisJdm9pZCAgICpidWlsZF9kYXRhOworCit9IE1WQnVja2V0RGF0YTsK KwordHlwZWRlZiBNVkJ1Y2tldERhdGEJKk1WQnVja2V0OworCisKK3R5cGVk ZWYgc3RydWN0IE1WSGlzdG9ncmFtRGF0YSB7CisKKwl1aW50MzIJCW1hZ2lj OwkJCS8qIG1hZ2ljIGNvbnN0YW50IG1hcmtlciAqLworCXVpbnQzMgkJdHlw ZTsJCQkvKiB0eXBlIG9mIGhpc3RvZ3JhbSAoQkFTSUMpICovCisJdWludDMy IAkJbmJ1Y2tldHM7CQkvKiBudW1iZXIgb2YgYnVja2V0cyAoYnVja2V0cyBh cnJheSkgKi8KKwl1aW50MzIJCW5kaW1lbnNpb25zOwkvKiBudW1iZXIgb2Yg ZGltZW5zaW9ucyAqLworCisJTVZCdWNrZXQgICAqYnVja2V0czsJCS8qIGFy cmF5IG9mIGJ1Y2tldHMgKi8KKworfSBNVkhpc3RvZ3JhbURhdGE7CisKK3R5 cGVkZWYgTVZIaXN0b2dyYW1EYXRhICpNVkhpc3RvZ3JhbTsKKworLyoKKyAq IEhpc3RvZ3JhbSBpbiBhIHBhcnRpYWxseSBzZXJpYWxpemVkIGZvcm0sIHdp dGggZGVkdXBsaWNhdGVkIGJvdW5kYXJ5CisgKiB2YWx1ZXMgZXRjLgorICoK KyAqIFRPRE8gYWRkIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gaGVyZQor ICovCisKK3R5cGVkZWYgc3RydWN0IE1WU2VyaWFsaXplZEJ1Y2tldERhdGEg eworCisJLyogRnJlcXVlbmNpZXMgb2YgdGhpcyBidWNrZXQuICovCisJZmxv YXQJbnR1cGxlczsJLyogZnJlcXVlbmN5IG9mIHR1cGxlcyB0dXBsZXMgKi8K KworCS8qCisJICogSW5mb3JtYXRpb24gYWJvdXQgZGltZW5zaW9ucyBiZWlu ZyBOVUxMLW9ubHkuIE5vdCB5ZXQgdXNlZC4KKwkgKi8KKwlib29sICAgKm51 bGxzb25seTsKKworCS8qIGxvd2VyIGJvdW5kYXJpZXMgLSB2YWx1ZXMgYW5k IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbmVxdWFsaXRpZXMgKi8KKwl1aW50 MTYgKm1pbjsKKwlib29sICAgKm1pbl9pbmNsdXNpdmU7CisKKwkvKiBpbmRl eGVzIG9mIHVwcGVyIGJvdW5kYXJpZXMgLSB2YWx1ZXMgYW5kIGluZm9ybWF0 aW9uIGFib3V0IHRoZQorCSAqIGluZXF1YWxpdGllcyAoZXhjbHVzaXZlIHZz LiBpbmNsdXNpdmUpICovCisJdWludDE2ICptYXg7CisJYm9vbCAgICptYXhf aW5jbHVzaXZlOworCit9IE1WU2VyaWFsaXplZEJ1Y2tldERhdGE7CisKK3R5 cGVkZWYgTVZTZXJpYWxpemVkQnVja2V0RGF0YQkqTVZTZXJpYWxpemVkQnVj a2V0OworCit0eXBlZGVmIHN0cnVjdCBNVlNlcmlhbGl6ZWRIaXN0b2dyYW1E YXRhIHsKKworCXVpbnQzMgkJbWFnaWM7CQkJLyogbWFnaWMgY29uc3RhbnQg bWFya2VyICovCisJdWludDMyCQl0eXBlOwkJCS8qIHR5cGUgb2YgaGlzdG9n cmFtIChCQVNJQykgKi8KKwl1aW50MzIgCQluYnVja2V0czsJCS8qIG51bWJl ciBvZiBidWNrZXRzIChidWNrZXRzIGFycmF5KSAqLworCXVpbnQzMgkJbmRp bWVuc2lvbnM7CS8qIG51bWJlciBvZiBkaW1lbnNpb25zICovCisKKwkvKgor CSAqIGtlZXAgdGhpcyB0aGUgc2FtZSB3aXRoIE1WSGlzdG9ncmFtRGF0YSwg YmVjYXVzZSBvZgorCSAqIGRlc2VyaWFsaXphdGlvbiAoc2FtZSBvZmZzZXQp CisJICovCisJTVZTZXJpYWxpemVkQnVja2V0ICAgKmJ1Y2tldHM7CQkvKiBh cnJheSBvZiBidWNrZXRzICovCisKKwkvKgorCSAqIHNlcmlhbGl6ZWQgYm91 bmRhcnkgdmFsdWVzLCBvbmUgYXJyYXkgcGVyIGRpbWVuc2lvbiwgZGVkdXBs aWNhdGVkCisJICogKHRoZSBtaW4vbWF4IGluZGV4ZXMgcG9pbnQgaW50byB0 aGVzZSBhcnJheXMpCisJICovCisJaW50CSAgICpudmFsdWVzOworCURhdHVt ICoqdmFsdWVzOworCit9IE1WU2VyaWFsaXplZEhpc3RvZ3JhbURhdGE7CisK K3R5cGVkZWYgTVZTZXJpYWxpemVkSGlzdG9ncmFtRGF0YSAqTVZTZXJpYWxp emVkSGlzdG9ncmFtOworCisKKy8qIHVzZWQgdG8gZmxhZyBzdGF0cyBzZXJp YWxpemVkIHRvIGJ5dGVhICovCisjZGVmaW5lIE1WU1RBVF9ISVNUX01BR0lD CQkweDdGOEM1NjcwCS8qIG1hcmtzIHNlcmlhbGl6ZWQgYnl0ZWEgKi8KKyNk ZWZpbmUgTVZTVEFUX0hJU1RfVFlQRV9CQVNJQwkxCQkJLyogYmFzaWMgaGlz dG9ncmFtIHR5cGUgKi8KKworLyoKKyAqIExpbWl0cyB1c2VkIGZvciBtYXhf YnVja2V0cyBvcHRpb24sIGkuZS4gd2UncmUgYWx3YXlzIGd1YXJhbnRlZWQK KyAqIHRvIGhhdmUgc3BhY2UgZm9yIGF0IGxlYXN0IE1WU1RBVF9ISVNUX01J Tl9CVUNLRVRTLCBhbmQgd2UgY2Fubm90CisgKiBoYXZlIG1vcmUgdGhhbiBN VlNUQVRfSElTVF9NQVhfQlVDS0VUUyBidWNrZXRzLgorICoKKyAqIFRoaXMg aXMganVzdCBhIGJvdW5kYXJ5IGZvciB0aGUgJ21heCcgdGhyZXNob2xkIC0g dGhlIGFjdHVhbAorICogaGlzdG9ncmFtIG1heSB1c2UgbGVzcyBidWNrZXRz IHRoYW4gTVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMuCisgKgorICogVE9ETyBU aGUgTVZTVEFUX0hJU1RfTUlOX0JVQ0tFVFMgc2hvdWxkIGJlIHJlbGF0ZWQg dG8gdGhlIG51bWJlciBvZgorICogICAgICBhdHRyaWJ1dGVzIChNVlNUQVRT X01BWF9ESU1FTlNJT05TKSBiZWNhdXNlIG9mIE5VTEwtYnVja2V0cy4KKyAq ICAgICAgVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IDJeTiBidWNrZXRzLCBv dGhlcndpc2Ugd2UgbWF5IGJlIHVuYWJsZQorICogICAgICB0byBidWlsZCB0 aGUgTlVMTCBidWNrZXRzLgorICovCisjZGVmaW5lIE1WU1RBVF9ISVNUX01J Tl9CVUNLRVRTCTEyOAkJCS8qIG1pbiBudW1iZXIgb2YgYnVja2V0cyAqLwor I2RlZmluZSBNVlNUQVRfSElTVF9NQVhfQlVDS0VUUwkxNjM4NAkJLyogbWF4 IG51bWJlciBvZiBidWNrZXRzICovCisKKy8qCiAgKiBUT0RPIE1heWJlIGZl dGNoaW5nIHRoZSBoaXN0b2dyYW0vTUNWIGxpc3Qgc2VwYXJhdGVseSBpcyBp bmVmZmljaWVudD8KICAqICAgICAgQ29uc2lkZXIgYWRkaW5nIGEgc2luZ2xl IGBmZXRjaF9zdGF0c2AgbWV0aG9kLCBmZXRjaGluZyBhbGwKICAqICAgICAg c3RhdHMgc3BlY2lmaWVkIHVzaW5nIGZsYWdzIChvciBzb21ldGhpbmcgbGlr ZSB0aGF0KS4KQEAgLTk5LDIwICsyMTYsMjUgQEAgdHlwZWRlZiBNQ1ZMaXN0 RGF0YSAqTUNWTGlzdDsKIAogTVZEZXBlbmRlbmNpZXMgbG9hZF9tdl9kZXBl bmRlbmNpZXMoT2lkIG12b2lkKTsKIE1DVkxpc3QgICAgICAgIGxvYWRfbXZf bWN2bGlzdChPaWQgbXZvaWQpOworTVZTZXJpYWxpemVkSGlzdG9ncmFtICAg IGxvYWRfbXZfaGlzdG9ncmFtKE9pZCBtdm9pZCk7CiAKIGJ5dGVhICogc2Vy aWFsaXplX212X2RlcGVuZGVuY2llcyhNVkRlcGVuZGVuY2llcyBkZXBlbmRl bmNpZXMpOwogYnl0ZWEgKiBzZXJpYWxpemVfbXZfbWN2bGlzdChNQ1ZMaXN0 IG1jdmxpc3QsIGludDJ2ZWN0b3IgKmF0dHJzLAogCQkJCQkJCSBWYWNBdHRy U3RhdHMgKipzdGF0cyk7CitieXRlYSAqIHNlcmlhbGl6ZV9tdl9oaXN0b2dy YW0oTVZIaXN0b2dyYW0gaGlzdG9ncmFtLCBpbnQydmVjdG9yICphdHRycywK KwkJCQkJICBWYWNBdHRyU3RhdHMgKipzdGF0cyk7CiAKIC8qIGRlc2VyaWFs aXphdGlvbiBvZiBzdGF0cyAoc2VyaWFsaXphdGlvbiBpcyBwcml2YXRlIHRv IGFuYWx5emUpICovCiBNVkRlcGVuZGVuY2llcwlkZXNlcmlhbGl6ZV9tdl9k ZXBlbmRlbmNpZXMoYnl0ZWEgKiBkYXRhKTsKIE1DVkxpc3QJCQlkZXNlcmlh bGl6ZV9tdl9tY3ZsaXN0KGJ5dGVhICogZGF0YSk7CitNVlNlcmlhbGl6ZWRI aXN0b2dyYW0JZGVzZXJpYWxpemVfbXZfaGlzdG9ncmFtKGJ5dGVhICogZGF0 YSk7CiAKIC8qCiAgKiBSZXR1cm5zIGluZGV4IG9mIHRoZSBhdHRyaWJ1dGUg bnVtYmVyIHdpdGhpbiB0aGUgdmVjdG9yIChpLmUuIGEKICAqIGRpbWVuc2lv biB3aXRoaW4gdGhlIHN0YXRzKS4KICAqLwogaW50IG12X2dldF9pbmRleChB dHRyTnVtYmVyIHZhcmF0dG5vLCBpbnQydmVjdG9yICogc3Rha2V5cyk7Citp bnQydmVjdG9yKiBmaW5kX212X2F0dG51bXMoT2lkIG12b2lkLCBPaWQgKnJl bGlkKTsKIAogaW50MnZlY3RvciogZmluZF9tdl9hdHRudW1zKE9pZCBtdm9p ZCwgT2lkICpyZWxpZCk7CiAKQEAgLTEyMSw2ICsyNDMsOCBAQCBleHRlcm4g RGF0dW0gcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2luZm8oUEdfRlVOQ1RJ T05fQVJHUyk7CiBleHRlcm4gRGF0dW0gcGdfbXZfc3RhdHNfZGVwZW5kZW5j aWVzX3Nob3coUEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gRGF0dW0gcGdf bXZfc3RhdHNfbWN2bGlzdF9pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpOwogZXh0 ZXJuIERhdHVtIHBnX212X21jdmxpc3RfaXRlbXMoUEdfRlVOQ1RJT05fQVJH Uyk7CitleHRlcm4gRGF0dW0gcGdfbXZfc3RhdHNfaGlzdG9ncmFtX2luZm8o UEdfRlVOQ1RJT05fQVJHUyk7CitleHRlcm4gRGF0dW0gcGdfbXZfaGlzdG9n cmFtX2J1Y2tldHMoUEdfRlVOQ1RJT05fQVJHUyk7CiAKIE1WRGVwZW5kZW5j aWVzCiBidWlsZF9tdl9kZXBlbmRlbmNpZXMoaW50IG51bXJvd3MsIEhlYXBU dXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMsCkBAIC0xMzAsMTAgKzI1 NCwyMCBAQCBNQ1ZMaXN0CiBidWlsZF9tdl9tY3ZsaXN0KGludCBudW1yb3dz LCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0dHJzLAogCQkJCSBW YWNBdHRyU3RhdHMgKipzdGF0cywgaW50ICpudW1yb3dzX2ZpbHRlcmVkKTsK IAorTVZIaXN0b2dyYW0KK2J1aWxkX212X2hpc3RvZ3JhbShpbnQgbnVtcm93 cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRycywKKwkJCQkg ICBWYWNBdHRyU3RhdHMgKipzdGF0cywgaW50IG51bXJvd3NfdG90YWwpOwor CiB2b2lkIGJ1aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51 bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKIAkJCQkJaW50IG5hdHRzLCBWYWNB dHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwogCi12b2lkIHVwZGF0ZV9tdl9z dGF0cyhPaWQgcmVsaWQsIE1WRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcywg TUNWTGlzdCBtY3ZsaXN0LAordm9pZCB1cGRhdGVfbXZfc3RhdHMoT2lkIHJl bGlkLCBNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsCisJCQkJCSBNQ1ZM aXN0IG1jdmxpc3QsIE1WSGlzdG9ncmFtIGhpc3RvZ3JhbSwKIAkJCQkJIGlu dDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKipzdGF0cyk7CiAKKyNp ZmRlZiBERUJVR19NVkhJU1QKK2V4dGVybiB2b2lkIGRlYnVnX2hpc3RvZ3Jh bV9tYXRjaGVzKE1WU2VyaWFsaXplZEhpc3RvZ3JhbSBtdmhpc3QsIGNoYXIg Km1hdGNoZXMpOworI2VuZGlmCisKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X2hpc3RvZ3JhbS5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X2hpc3RvZ3JhbS5vdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0ZWRiOAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXZf aGlzdG9ncmFtLm91dApAQCAtMCwwICsxLDIwNyBAQAorLS0gZGF0YSB0eXBl IHBhc3NlZCBieSB2YWx1ZQorQ1JFQVRFIFRBQkxFIG12X2hpc3RvZ3JhbSAo CisgICAgYSBJTlQsCisgICAgYiBJTlQsCisgICAgYyBJTlQKKyk7CistLSB1 bmtub3duIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gbXZfaGlz dG9ncmFtICh1bmtub3duX2NvbHVtbikgV0lUSCAoaGlzdG9ncmFtKTsKK0VS Uk9SOiAgY29sdW1uICJ1bmtub3duX2NvbHVtbiIgcmVmZXJlbmNlZCBpbiBz dGF0aXN0aWNzIGRvZXMgbm90IGV4aXN0CistLSBzaW5nbGUgY29sdW1uCitD UkVBVEUgU1RBVElTVElDUyBzMSBPTiBtdl9oaXN0b2dyYW0gKGEpIFdJVEgg KGhpc3RvZ3JhbSk7CitFUlJPUjogIG11bHRpdmFyaWF0ZSBzdGF0cyByZXF1 aXJlIDIgb3IgbW9yZSBjb2x1bW5zCistLSBzaW5nbGUgY29sdW1uLCBkdXBs aWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtdl9oaXN0b2dyYW0g KGEsIGEpIFdJVEggKGhpc3RvZ3JhbSk7CitFUlJPUjogIGR1cGxpY2F0ZSBj b2x1bW4gbmFtZSBpbiBzdGF0aXN0aWNzIGRlZmluaXRpb24KKy0tIHR3byBj b2x1bW5zLCBvbmUgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczEg T04gbXZfaGlzdG9ncmFtIChhLCBhLCBiKSBXSVRIIChoaXN0b2dyYW0pOwor RVJST1I6ICBkdXBsaWNhdGUgY29sdW1uIG5hbWUgaW4gc3RhdGlzdGljcyBk ZWZpbml0aW9uCistLSB1bmtub3duIG9wdGlvbgorQ1JFQVRFIFNUQVRJU1RJ Q1MgczEgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRIICh1bmtub3du X29wdGlvbik7CitFUlJPUjogIHVucmVjb2duaXplZCBTVEFUSVNUSUNTIG9w dGlvbiAidW5rbm93bl9vcHRpb24iCistLSBtaXNzaW5nIGhpc3RvZ3JhbSBz dGF0aXN0aWNzCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtdl9oaXN0b2dy YW0gKGEsIGIsIGMpIFdJVEggKGRlcGVuZGVuY2llcywgbWF4X2J1Y2tldHM9 MjAwKTsKK0VSUk9SOiAgb3B0aW9uICdoaXN0b2dyYW0nIGlzIHJlcXVpcmVk IGJ5IG90aGVyIG9wdGlvbnMocykKKy0tIGludmFsaWQgbWF4X2J1Y2tldHMg dmFsdWUgLyB0b28gbG93CitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtdl9o aXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKG1jdiwgbWF4X2J1Y2tldHM9MTAp OworRVJST1I6ICBtaW5pbXVtIG51bWJlciBvZiBidWNrZXRzIGlzIDEyOAor LS0gaW52YWxpZCBtYXhfYnVja2V0cyB2YWx1ZSAvIHRvbyBoaWdoCitDUkVB VEUgU1RBVElTVElDUyBzMSBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJ VEggKG1jdiwgbWF4X2J1Y2tldHM9MTAwMDAwKTsKK0VSUk9SOiAgbWF4aW11 bSBudW1iZXIgb2YgYnVja2V0cyBpcyAxNjM4NAorLS0gY29ycmVjdCBjb21t YW5kCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtdl9oaXN0b2dyYW0gKGEs IGIsIGMpIFdJVEggKGhpc3RvZ3JhbSk7CistLSByYW5kb20gZGF0YSAobm8g ZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMpCitJTlNFUlQgSU5UTyBtdl9oaXN0 b2dyYW0KKyAgICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwg bW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkp OworQU5BTFlaRSBtdl9oaXN0b2dyYW07CitTRUxFQ1QgaGlzdF9lbmFibGVk LCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0 YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworIGhpc3RfZW5h YmxlZCB8IGhpc3RfYnVpbHQgCistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgICAgfCB0CisoMSByb3cpCisKK1RSVU5DQVRFIG12 X2hpc3RvZ3JhbTsKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lOU0VS VCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMCwgaS8xMDAs IGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitB TkFMWVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhp c3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVs aWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVk IHwgaGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgICB8IHQKKygxIHJvdykKKworVFJVTkNBVEUgbXZfaGlz dG9ncmFtOworLS0gYSA9PiBiLCBhID0+IGMKK0lOU0VSVCBJTlRPIG12X2hp c3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAsIGkvMjAwIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG12X2hp c3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAg RlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlz dG9ncmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVkIHwgaGlzdF9idWls dCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAgICAg ICB8IHQKKygxIHJvdykKKworVFJVTkNBVEUgbXZfaGlzdG9ncmFtOworLS0g Y2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBub3Qg cGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQor ICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAwMCBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVBVEUgSU5ERVgg aGlzdF9pZHggT04gbXZfaGlzdG9ncmFtIChhLCBiKTsKK0FOQUxZWkUgbXZf aGlzdG9ncmFtOworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAor ICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9o aXN0b2dyYW0nOjpyZWdjbGFzczsKKyBoaXN0X2VuYWJsZWQgfCBoaXN0X2J1 aWx0IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAg ICAgIHwgdAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VM RUNUICogRlJPTSBtdl9oaXN0b2dyYW0gV0hFUkUgYSA9IDEwIEFORCBiID0g NTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gbXZfaGlzdG9ncmFtCisgICBS ZWNoZWNrIENvbmQ6ICgoYSA9IDEwKSBBTkQgKGIgPSA1KSkKKyAgIC0+ICBC aXRtYXAgSW5kZXggU2NhbiBvbiBoaXN0X2lkeAorICAgICAgICAgSW5kZXgg Q29uZDogKChhID0gMTApIEFORCAoYiA9IDUpKQorKDQgcm93cykKKworRFJP UCBUQUJMRSBtdl9oaXN0b2dyYW07CistLSB2YXJsZW5hIHR5cGUgKHRleHQp CitDUkVBVEUgVEFCTEUgbXZfaGlzdG9ncmFtICgKKyAgICBhIFRFWFQsCisg ICAgYiBURVhULAorICAgIGMgVEVYVAorKTsKK0NSRUFURSBTVEFUSVNUSUNT IHMyIE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYykgV0lUSCAoaGlzdG9ncmFt KTsKKy0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlvbmFsIGRlcGVuZGVuY2ll cykKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgbW9k KGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwgMjMpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG12X2hpc3RvZ3Jh bTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAgRlJPTSBw Z19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlzdG9ncmFt Jzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVkIHwgaGlzdF9idWlsdCAKKy0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8IHQK KygxIHJvdykKKworVFJVTkNBVEUgbXZfaGlzdG9ncmFtOworLS0gYSA9PiBi LCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gbXZfaGlzdG9ncmFtCisg ICAgIFNFTEVDVCBpLzEwLCBpLzEwMCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOwor U0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212 X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpy ZWdjbGFzczsKKyBoaXN0X2VuYWJsZWQgfCBoaXN0X2J1aWx0IAorLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdAorKDEg cm93KQorCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CistLSBhID0+IGIsIGEg PT4gYworSU5TRVJUIElOVE8gbXZfaGlzdG9ncmFtCisgICAgIFNFTEVDVCBp LzEwLCBpLzE1MCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworU0VMRUNUIGhpc3Rf ZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBX SEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKyBo aXN0X2VuYWJsZWQgfCBoaXN0X2J1aWx0IAorLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdAorKDEgcm93KQorCitUUlVO Q0FURSBtdl9oaXN0b2dyYW07CistLSBjaGVjayBleHBsYWluIChleHBlY3Qg Yml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBzY2FuKQorSU5T RVJUIElOVE8gbXZfaGlzdG9ncmFtCisgICAgIFNFTEVDVCBpLzEwMDAwLCBp LzIwMDAwLCBpLzQwMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAw MCkgcyhpKTsKK0NSRUFURSBJTkRFWCBoaXN0X2lkeCBPTiBtdl9oaXN0b2dy YW0gKGEsIGIpOworQU5BTFlaRSBtdl9oaXN0b2dyYW07CitTRUxFQ1QgaGlz dF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGlj IFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOwor IGhpc3RfZW5hYmxlZCB8IGhpc3RfYnVpbHQgCistLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0CisoMSByb3cpCisKK0VY UExBSU4gKENPU1RTIG9mZikKKyBTRUxFQ1QgKiBGUk9NIG12X2hpc3RvZ3Jh bSBXSEVSRSBhID0gJzEwJyBBTkQgYiA9ICc1JzsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBtdl9o aXN0b2dyYW0KKyAgIFJlY2hlY2sgQ29uZDogKChhID0gJzEwJzo6dGV4dCkg QU5EIChiID0gJzUnOjp0ZXh0KSkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2Nh biBvbiBoaXN0X2lkeAorICAgICAgICAgSW5kZXggQ29uZDogKChhID0gJzEw Jzo6dGV4dCkgQU5EIChiID0gJzUnOjp0ZXh0KSkKKyg0IHJvd3MpCisKK1RS VU5DQVRFIG12X2hpc3RvZ3JhbTsKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVj dCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4pIHdp dGggTlVMTHMKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxF Q1QKKyAgICAgICAoQ0FTRSBXSEVOIGkvMTAwMDAgPSAwIFRIRU4gTlVMTCBF TFNFIGkvMTAwMDAgRU5EKSwKKyAgICAgICAoQ0FTRSBXSEVOIGkvMjAwMDAg PSAwIFRIRU4gTlVMTCBFTFNFIGkvMjAwMDAgRU5EKSwKKyAgICAgICAoQ0FT RSBXSEVOIGkvNDAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvNDAwMDAgRU5E KQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7 CitBTkFMWVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQs IGhpc3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3Rh cmVsaWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFi bGVkIHwgaGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LQorIHQgICAgICAgICAgICB8IHQKKygxIHJvdykKKworRVhQTEFJTiAoQ09T VFMgb2ZmKQorIFNFTEVDVCAqIEZST00gbXZfaGlzdG9ncmFtIFdIRVJFIGEg SVMgTlVMTCBBTkQgYiBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRt YXAgSGVhcCBTY2FuIG9uIG12X2hpc3RvZ3JhbQorICAgUmVjaGVjayBDb25k OiAoKGEgSVMgTlVMTCkgQU5EIChiIElTIE5VTEwpKQorICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIGhpc3RfaWR4CisgICAgICAgICBJbmRleCBDb25k OiAoKGEgSVMgTlVMTCkgQU5EIChiIElTIE5VTEwpKQorKDQgcm93cykKKwor RFJPUCBUQUJMRSBtdl9oaXN0b2dyYW07CistLSBOVUxMIHZhbHVlcyAobWl4 IG9mIGludCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRFIFRBQkxFIG12X2hp c3RvZ3JhbSAoCisgICAgYSBJTlQsCisgICAgYiBURVhULAorICAgIGMgSU5U LAorICAgIGQgVEVYVAorKTsKK0NSRUFURSBTVEFUSVNUSUNTIHMzIE9OIG12 X2hpc3RvZ3JhbSAoYSwgYiwgYywgZCkgV0lUSCAoaGlzdG9ncmFtKTsKK0lO U0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QKKyAgICAgICAg IG1vZChpLCAxMDApLAorICAgICAgICAgKENBU0UgV0hFTiBtb2QoaSwgMjAw KSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksMjAwKSBFTkQpLAorICAgICAg ICAgbW9kKGksIDQwMCksCisgICAgICAgICAoQ0FTRSBXSEVOIG1vZChpLCAz MDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2QoaSw2MDApIEVORCkKKyAgICAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUg bXZfaGlzdG9ncmFtOworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWls dAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdt dl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKyBoaXN0X2VuYWJsZWQgfCBoaXN0 X2J1aWx0IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAg ICAgICAgIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIG12X2hpc3RvZ3Jh bTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQK aW5kZXggYWM1MDA3ZS4uOWRiMTkxMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTEzNzEsNyArMTM3MSw5IEBA IHBnX212X3N0YXRzfCBTRUxFQ1Qgbi5uc3BuYW1lIEFTIHNjaGVtYW5hbWUs CiAgICAgbGVuZ3RoKHMuc3RhZGVwcykgQVMgZGVwc2J5dGVzLAogICAgIHBn X212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKHMuc3RhZGVwcykgQVMgZGVw c2luZm8sCiAgICAgbGVuZ3RoKHMuc3RhbWN2KSBBUyBtY3ZieXRlcywKLSAg ICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8ocy5zdGFtY3YpIEFTIG1jdmlu Zm8KKyAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8ocy5zdGFtY3YpIEFT IG1jdmluZm8sCisgICAgbGVuZ3RoKHMuc3RhaGlzdCkgQVMgaGlzdGJ5dGVz LAorICAgIHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvKHMuc3RhaGlzdCkg QVMgaGlzdGluZm8KICAgIEZST00gKChwZ19tdl9zdGF0aXN0aWMgcwogICAg ICBKT0lOIHBnX2NsYXNzIGMgT04gKChjLm9pZCA9IHMuc3RhcmVsaWQpKSkK ICAgICAgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OICgobi5vaWQgPSBj LnJlbG5hbWVzcGFjZSkpKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFs bGVsX3NjaGVkdWxlCmluZGV4IDgzOGMxMmIuLmZiZWQ2ODMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTEyLDQg KzExMiw0IEBAIHRlc3Q6IGV2ZW50X3RyaWdnZXIKIHRlc3Q6IHN0YXRzCiAK ICMgcnVuIHRlc3RzIG9mIG11bHRpdmFyaWF0ZSBzdGF0cwotdGVzdDogbXZf ZGVwZW5kZW5jaWVzIG12X21jdgordGVzdDogbXZfZGVwZW5kZW5jaWVzIG12 X21jdiBtdl9oaXN0b2dyYW0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc2VyaWFsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxf c2NoZWR1bGUKaW5kZXggZDk3YTBlYy4uYzYwYzBiMiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKQEAgLTE2MywzICsxNjMsNCBA QCB0ZXN0OiBldmVudF90cmlnZ2VyCiB0ZXN0OiBzdGF0cwogdGVzdDogbXZf ZGVwZW5kZW5jaWVzCiB0ZXN0OiBtdl9tY3YKK3Rlc3Q6IG12X2hpc3RvZ3Jh bQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfaGlzdG9n cmFtLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212X2hpc3RvZ3JhbS5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmNDli NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212 X2hpc3RvZ3JhbS5zcWwKQEAgLTAsMCArMSwxNzYgQEAKKy0tIGRhdGEgdHlw ZSBwYXNzZWQgYnkgdmFsdWUKK0NSRUFURSBUQUJMRSBtdl9oaXN0b2dyYW0g KAorICAgIGEgSU5ULAorICAgIGIgSU5ULAorICAgIGMgSU5UCispOworCist LSB1bmtub3duIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gbXZf aGlzdG9ncmFtICh1bmtub3duX2NvbHVtbikgV0lUSCAoaGlzdG9ncmFtKTsK KworLS0gc2luZ2xlIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04g bXZfaGlzdG9ncmFtIChhKSBXSVRIIChoaXN0b2dyYW0pOworCistLSBzaW5n bGUgY29sdW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBzMSBP TiBtdl9oaXN0b2dyYW0gKGEsIGEpIFdJVEggKGhpc3RvZ3JhbSk7CisKKy0t IHR3byBjb2x1bW5zLCBvbmUgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJ Q1MgczEgT04gbXZfaGlzdG9ncmFtIChhLCBhLCBiKSBXSVRIIChoaXN0b2dy YW0pOworCistLSB1bmtub3duIG9wdGlvbgorQ1JFQVRFIFNUQVRJU1RJQ1Mg czEgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRIICh1bmtub3duX29w dGlvbik7CisKKy0tIG1pc3NpbmcgaGlzdG9ncmFtIHN0YXRpc3RpY3MKK0NS RUFURSBTVEFUSVNUSUNTIHMxIE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYykg V0lUSCAoZGVwZW5kZW5jaWVzLCBtYXhfYnVja2V0cz0yMDApOworCistLSBp bnZhbGlkIG1heF9idWNrZXRzIHZhbHVlIC8gdG9vIGxvdworQ1JFQVRFIFNU QVRJU1RJQ1MgczEgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRIICht Y3YsIG1heF9idWNrZXRzPTEwKTsKKworLS0gaW52YWxpZCBtYXhfYnVja2V0 cyB2YWx1ZSAvIHRvbyBoaWdoCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBt dl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKG1jdiwgbWF4X2J1Y2tldHM9 MTAwMDAwKTsKKworLS0gY29ycmVjdCBjb21tYW5kCitDUkVBVEUgU1RBVElT VElDUyBzMSBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKGhpc3Rv Z3JhbSk7CisKKy0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlvbmFsIGRlcGVu ZGVuY2llcykKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxF Q1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwgMjMpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbXZf aGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0 CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212 X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtdl9oaXN0b2dy YW07CisKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lOU0VSVCBJTlRP IG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMCwgaS8xMDAsIGkvMjAw IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZ WkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0 X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlk ID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtdl9o aXN0b2dyYW07CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBt dl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIGkvMTAsIGkvMTUwLCBpLzIwMCBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBt dl9oaXN0b2dyYW07CisKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVp bHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAn bXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisKK1RSVU5DQVRFIG12X2hpc3Rv Z3JhbTsKKworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRl eCBzY2FuLCBub3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG12 X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80 MDAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitD UkVBVEUgSU5ERVggaGlzdF9pZHggT04gbXZfaGlzdG9ncmFtIChhLCBiKTsK K0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVk LCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0 YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitFWFBMQUlO IChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBtdl9oaXN0b2dyYW0gV0hF UkUgYSA9IDEwIEFORCBiID0gNTsKKworRFJPUCBUQUJMRSBtdl9oaXN0b2dy YW07CisKKy0tIHZhcmxlbmEgdHlwZSAodGV4dCkKK0NSRUFURSBUQUJMRSBt dl9oaXN0b2dyYW0gKAorICAgIGEgVEVYVCwKKyAgICBiIFRFWFQsCisgICAg YyBURVhUCispOworCitDUkVBVEUgU1RBVElTVElDUyBzMiBPTiBtdl9oaXN0 b2dyYW0gKGEsIGIsIGMpIFdJVEggKGhpc3RvZ3JhbSk7CisKKy0tIHJhbmRv bSBkYXRhIChubyBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcykKK0lOU0VSVCBJ TlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgbW9kKGksIDExMSksIG1v ZChpLCAxMjMpLCBtb2QoaSwgMjMpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxF Q1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3Rh dGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2Ns YXNzOworCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CisKKy0tIGEgPT4gYiwg YSA9PiBjLCBiID0+IGMKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAg ICBTRUxFQ1QgaS8xMCwgaS8xMDAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOwor CitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdf bXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6 OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CisKKy0tIGEg PT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAg U0VMRUNUIGkvMTAsIGkvMTUwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBtdl9oaXN0b2dyYW07CisKK1NF TEVDVCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9z dGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVn Y2xhc3M7CisKK1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsKKworLS0gY2hlY2sg ZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBub3QgcGxhaW4g aW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBT RUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAwMCBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVBVEUgSU5ERVggaGlzdF9p ZHggT04gbXZfaGlzdG9ncmFtIChhLCBiKTsKK0FOQUxZWkUgbXZfaGlzdG9n cmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZS T00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3Rv Z3JhbSc6OnJlZ2NsYXNzOworCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VM RUNUICogRlJPTSBtdl9oaXN0b2dyYW0gV0hFUkUgYSA9ICcxMCcgQU5EIGIg PSAnNSc7CisKK1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsKKworLS0gY2hlY2sg ZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBub3QgcGxhaW4g aW5kZXggc2Nhbikgd2l0aCBOVUxMcworSU5TRVJUIElOVE8gbXZfaGlzdG9n cmFtCisgICAgIFNFTEVDVAorICAgICAgIChDQVNFIFdIRU4gaS8xMDAwMCA9 IDAgVEhFTiBOVUxMIEVMU0UgaS8xMDAwMCBFTkQpLAorICAgICAgIChDQVNF IFdIRU4gaS8yMDAwMCA9IDAgVEhFTiBOVUxMIEVMU0UgaS8yMDAwMCBFTkQp LAorICAgICAgIChDQVNFIFdIRU4gaS80MDAwMCA9IDAgVEhFTiBOVUxMIEVM U0UgaS80MDAwMCBFTkQpCisgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMDAwMCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxF Q1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3Rh dGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2Ns YXNzOworCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBt dl9oaXN0b2dyYW0gV0hFUkUgYSBJUyBOVUxMIEFORCBiIElTIE5VTEw7CisK K0RST1AgVEFCTEUgbXZfaGlzdG9ncmFtOworCistLSBOVUxMIHZhbHVlcyAo bWl4IG9mIGludCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRFIFRBQkxFIG12 X2hpc3RvZ3JhbSAoCisgICAgYSBJTlQsCisgICAgYiBURVhULAorICAgIGMg SU5ULAorICAgIGQgVEVYVAorKTsKKworQ1JFQVRFIFNUQVRJU1RJQ1MgczMg T04gbXZfaGlzdG9ncmFtIChhLCBiLCBjLCBkKSBXSVRIIChoaXN0b2dyYW0p OworCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUCisg ICAgICAgICBtb2QoaSwgMTAwKSwKKyAgICAgICAgIChDQVNFIFdIRU4gbW9k KGksIDIwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChpLDIwMCkgRU5EKSwK KyAgICAgICAgIG1vZChpLCA0MDApLAorICAgICAgICAgKENBU0UgV0hFTiBt b2QoaSwgMzAwKSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksNjAwKSBFTkQp CisgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisK K0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVk LCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0 YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitEUk9QIFRB QkxFIG12X2hpc3RvZ3JhbTsKLS0gCjIuMS4wCgo= --------------040701000609000501090206 Content-Type: application/x-patch; name="0006-multi-statistics-estimation.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0006-multi-statistics-estimation.patch" RnJvbSBjMDk4M2E2MDc5ZDliN2Y0NjE3ZmIzZDMxYmNlNTM2OTBhMzVlOWQ2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogRnJpLCA2IEZlYiAyMDE1IDAx OjQyOjM4ICswMTAwClN1YmplY3Q6IFtQQVRDSCA2LzddIG11bHRpLXN0YXRp c3RpY3MgZXN0aW1hdGlvbgoKVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IGEg cHJvYmFiaWxpdHkgKHdoaWNoCmlzIHdoYXQgc2VsZWN0aXZpdHkgaXMpIGNh biBiZSBzcGxpdCBpbnRvIGEgcHJvZHVjdCBvZgpjb25kaXRpb25hbCBwcm9i YWJpbGl0aWVzIGxpa2UgdGhpczoKCiAgICBQKEEgJiBCICYgQykgPSBQKEEg JiBCKSAqIFAoQ3xBICYgQikKCklmIHdlIGFzc3VtZSB0aGF0IEMgYW5kIEIg YXJlIGluZGVwZW5kZW50LCB0aGUgbGFzdCBwYXJ0Cm1heSBiZSBzaW1wbGlm aWVkIGxpa2UgdGhpcwoKICAgIFAoQSAmIEIgJiBDKSA9IFAoQSAmIEIpICog UChDfEEpCgp3ZSBvbmx5IG5lZWQgcHJvYmFiaWxpdGllcyBvbiBbQSxCXSBh bmQgW0MsQV0gdG8gY29tcHV0ZQp0aGUgb3JpZ2luYWwgcHJvYmFiaWxpdHku CgpUaGUgaW1wbGVtZW50YXRpb24gd29ya3MgaW4gdGhlIG90aGVyIGRpcmVj dGlvbiwgdGhvdWdoLgpXZSBrbm93IHdoYXQgcHJvYmFiaWxpdHkgUChBICYg QiAmIEMpIHdlIG5lZWQgdG8gY29tcHV0ZSwKYW5kIGFsc28gd2hhdCBzdGF0 aXN0aWNzIGFyZSBhdmFpbGFibGUuCgpTbyB3ZSBzZWFyY2ggZm9yIGEgY29t YmluYXRpb25zIG9mIHN0YXRpc3RpY3MsIGNvdmVyaW5nCnRoZSBjbGF1c2Vz IGluIGFuIG9wdGltYWwgd2F5IChtb3N0IGNsYXVzZXMgY292ZXJlZCwgbW9z dApkZXBlbmRlbmNpZXMgZXhwbG9pdGVkKS4KClRoZXJlIGFyZSB0d28gcG9z c2libGUgYXBwcm9hY2hlcyAtIGV4aGF1c3RpdmUgYW5kIGdyZWVkeS4KVGhl IGV4aGF1c3RpdmUgb25lIHdhbGtzIHRocm91Z2ggYWxsIHBlcm11dGF0aW9u cyBvZgpzdGF0cyB1c2luZyBkeW5hbWljIHByb2dyYW1taW5nLCBzbyBpdCdz IGd1YXJhbnRlZWQgdG8KZmluZCB0aGUgb3B0aW1hbCBzb2x1dGlvbiwgYnV0 IGl0IHNvb24gZ2V0cyB2ZXJ5IHNsb3cgYXMKaXQncyByb3VnaGx5IE8oTiEp LiBUaGUgZHluYW1pYyBwcm9ncmFtbWluZyBtYXkgaW1wcm92ZQp0aGF0IGEg Yml0LCBidXQgaXQncyBzdGlsbCBmYXIgdG9vIGV4cGVuc2l2ZSBmb3IgbGFy Z2UKbnVtYmVycyBvZiBzdGF0aXN0aWNzIChvbiBhIHNpbmdsZSB0YWJsZSku CgpUaGUgZ3JlZWR5IGFsZ29yaXRobSBpcyB2ZXJ5IHNpbXBsZSAtIGluIGV2 ZXJ5IHN0ZXAgY2hvb3NlCnRoZSBiZXN0IHNvbHV0aW9uLiBUaGF0IG1heSBu b3QgZ3VhcmFudGVlIHRoZSBiZXN0IHNvbHV0aW9uCmdsb2JhbGx5IChidXQg bWF5YmUgaXQgZG9lcz8pLCBidXQgaXQgb25seSBuZWVkcyBOIHN0ZXBzCnRv IGZpbmQgdGhlIHNvbHV0aW9uLCBzbyBpdCdzIHZlcnkgZmFzdCAocHJvY2Vz c2luZyB0aGUKc2VsZWN0ZWQgc3RhdHMgaXMgdXN1YWxseSB3YXkgbW9yZSBl eHBlbnNpdmUpLgoKVGhlcmUncyBhIEdVQyBmb3Igc2VsZWN0aW5nIHRoZSBz ZWFyY2ggYWxnb3JpdGhtCgogICAgbXZzdGF0X3NlYXJjaCA9IHsnZ3JlZWR5 JywgJ2V4aGF1c3RpdmUnfQoKVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ2dyZWVk eScgYXMgdGhhdCdzIG11Y2ggc2FmZXIgKHdpdGgKcmVzcGVjdCB0byBydW50 aW1lKS4gU2VlIGNob29zZV9tdl9zdGF0aXN0aWNzKCkuCgpPbmNlIHdlIGhh dmUgZm91bmQgYSBzZXF1ZW5jZSBvZiBzdGF0aXN0aWNzLCB3ZSBhcHBseQp0 aGVtIHRvIHRoZSBjbGF1c2VzIHVzaW5nIHRoZSBjb25kaXRpb25hbCBwcm9i YWJpbGl0aWVzLgpXZSBwcm9jZXNzIHRoZSBzZWxlY3RlZCBzdGF0cyBvbmUg Ynkgb25lLCBhbmQgZm9yIGVhY2gKd2Ugc2VsZWN0IHRoZSBlc3RpbWF0ZWQg Y2xhdXNlcyBhbmQgY29uZGl0aW9ucy4gU2VlCmNsYXVzZWxpc3Rfc2VsZWN0 aXZpdHkoKSBmb3IgbW9yZSBkZXRhaWxzLgoKTGltaXRhdGlvbnMKLS0tLS0t LS0tLS0KCkl0J3Mgc3RpbGwgdHJ1ZSB0aGF0IGVhY2ggY2xhdXNlIGF0IGEg Z2l2ZW4gbGV2ZWwgaGFzIHRvCmJlIGNvdmVyZWQgYnkgYSBzaW5nbGUgTVYg c3RhdGlzdGljcy4gU28gd2l0aCB0aGlzIHF1ZXJ5CgogICAgV0hFUkUgKGNs YXVzZTEpIEFORCAoY2xhdXNlMikgQU5EIChjbGF1c2UzIE9SIGNsYXVzZTQp CgplYWNoIHBhcmVudGhlc2l6ZWQgY2xhdXNlIGhhcyB0byBiZSBjb3ZlcmVk IGJ5IGEgc2luZ2xlCm11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzLgoKQ2xhdXNl cyBub3QgY292ZXJlZCBieSBhIHNpbmdsZSBzdGF0aXN0aWNzIGF0IHRoaXMg bGV2ZWwKd2lsbCBiZSBwYXNzZWQgdG8gY2xhdXNlX3NlbGVjdGl2aXR5KCkg YnV0IHRoaXMgd2lsbCB0cmVhdAp0aGVtIGFzIGEgY29sbGVjdGlvbiBvZiBz aW1wbGVyIGNsYXVzZXMgKGNvbm5lY3RlZCBieSBBTkQKb3IgT1IpLCBhbmQg dGhlIGNsYXVzZXMgZnJvbSB0aGUgcHJldmlvdXMgbGV2ZWwgd2lsbCBiZQp1 c2VkIGFzIGNvbmRpdGlvbnMuCgpTbyB1c2luZyB0aGUgc2FtZSBleGFtcGxl LCB0aGUgbGFzdCBjbGF1c2Ugd2lsbCBiZSBwYXNzZWQKdG8gY2xhdXNlX3Nl bGVjdGl2aXR5KCkgd2l0aCAnY2xhdXNlMScgYW5kICdjbGF1c2UyJyBhcwpj b25kaXRpb25zLCBhbmQgaXQgd2lsbCBiZSBwcm9jZXNzZWQgdXNpbmcgbXVs dGl2YXJpYXRlCnN0YXRzIGlmIHBvc3NpYmxlLgoKVGhlIG90aGVyIGxpbWl0 YXRpb24gaXMgdGhhdCBhbGwgdGhlIGV4cHJlc3Npb25zIGhhdmUgdG8KYmUg bXYtY29tcGF0aWJsZSwgaS5lLiB0aGVyZSBjYW4ndCBiZSBhIG1peCBvZiBl eHByZXNzaW9ucy4KSWYgdGhpcyBpcyB2aW9sYXRlZCwgdGhlIGNsYXVzZSBt YXkgYmUgcGFzc2VkIHRvIHRoZSBuZXh0CmxldmVsIChqdXN0IGxpa2Ugd2l0 aCBsaXN0IG9mIGNsYXVzZXMgbm90IGNvdmVyZWQgYnkKYSBzaW5nbGUgc3Rh dGlzdGljcyksIHdoaWNoIHNwbGl0cyB0aGF0IGludG8gY2xhdXNlcwpoYW5k bGVkIGJ5IG11bHRpdmFyaWF0ZSBzdGF0cyBhbmQgY2xhdXNlcyBoYW5kbGVy IGJ5CnJlZ3VsYXIgc3RhdGlzdGljcy4KCnJld29yayBjbGF1c2VsaXN0X3Nl bGVjdGl2aXR5X29yIHRvIGhhbmRsZSBPUi1jbGF1c2VzIGNvcnJlY3RseQoK V2UgbWlnaHQgaW52ZW50IGEgY29tcGxldGVseSBuZXcgc2V0IG9mIGZ1bmN0 aW9ucyBoZXJlLCByZXNlbWJsaW5nCmNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkg YnV0IGFkYXB0aW5nIHRoZSBpZGVhcyB0byBPUi1jbGF1c2VzLgoKQnV0IGx1 Y2tpbHkgd2Uga25vdyB0aGF0IGVhY2ggT1ItY2xhdXNlCgogICAgKGEgT1Ig YiBPUiBjKQoKbWF5IGJlIHJld3JpdHRlbiBhcyBhbiBlcXVpdmFsZW50IEFO RC1jbGF1c2UgdXNpbmcgbmVnYXRpb246CgogICAgTk9UICgoTk9UIGEpIEFO RCAoTk9UIGIpIEFORCAoTk9UIGMpKQoKQW5kIHRoYXQncyBzb21ldGhpbmcg d2UgY2FuIHBhc3MgdG8gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eS4KCmhpc3Rv Z3JhbSBjYWxsIGNhY2hlCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgY2Fs bCBjYWNoZSB3YXMgcmVtb3ZlZCBiZWNhdXNlIGl0IGRpZCBub3QgaW5pdGlh bGx5IHdvcmsKd2VsbCB3aXRoIE9SIGNsYXVzZXMsIGJ1dCB0aGF0IHdhcyBq dXN0IGEgc3R1cGlkIHRoaW5rbyBpbiB0aGUKaW1wbGVtZW50YXRpb24uIFRo aXMgcGF0Y2ggcmUtYWRkcyBpdCwgaG9wZWZ1bGx5IGNvcnJlY3RseS4KClRo ZSBjb2RlIGluIHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKCkgaXMg b3Zlcmx5IGNvbXBsZXgsCnRoZSBicmFuY2hlcyBoYW5kbGluZyB2YXJpb3Vz IGluZXF1YWxpdHkgY2FzZXMgYXJlIHJlZHVuZGFudC4KVGhpcyBuZWVkcyB0 byBiZSBzaW1wbGlmaWVkIHNvbWVob3cuCi0tLQogY29udHJpYi9maWxlX2Zk dy9maWxlX2Zkdy5jICAgICAgICAgICAgfCAgICAzICstCiBjb250cmliL3Bv c3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICB8ICAgIDYgKy0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jIHwgMjIyNCArKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYyAgfCAgIDIzICstCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9vcmNsYXVzZXMuYyB8ICAgIDQgKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgIHwgICAxNyArLQog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyAgICAgICAgICAgfCAgIDIw ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgIHwg ICAgNiArLQogc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oICAgICAgICAg ICAgfCAgICA4ICsKIDkgZmlsZXMgY2hhbmdlZCwgMjAwMyBpbnNlcnRpb25z KCspLCAzMDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9m aWxlX2Zkdy9maWxlX2Zkdy5jIGIvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zk dy5jCmluZGV4IGYxMzMxNmIuLmUyNTg3MGYgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvZmlsZV9mZHcvZmlsZV9mZHcuYworKysgYi9jb250cmliL2ZpbGVfZmR3 L2ZpbGVfZmR3LmMKQEAgLTk1NCw3ICs5NTQsOCBAQCBlc3RpbWF0ZV9zaXpl KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAogCQkJ CQkJCSAgIGJhc2VyZWwtPmJhc2VyZXN0cmljdGluZm8sCiAJCQkJCQkJICAg MCwKIAkJCQkJCQkgICBKT0lOX0lOTkVSLAotCQkJCQkJCSAgIE5VTEwpOwor CQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTklMKTsKIAogCW5yb3dzID0g Y2xhbXBfcm93X2VzdChucm93cyk7CiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggMzc0ZmFmNS4uOGYwNWEwMiAx MDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3 LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMK QEAgLTQ1Nyw3ICs0NTcsOCBAQCBwb3N0Z3Jlc0dldEZvcmVpZ25SZWxTaXpl KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJCSBmcGluZm8tPmxv Y2FsX2NvbmRzLAogCQkJCQkJCQkJCQkJCSBiYXNlcmVsLT5yZWxpZCwKIAkJ CQkJCQkJCQkJCQkgSk9JTl9JTk5FUiwKLQkJCQkJCQkJCQkJCQkgTlVMTCk7 CisJCQkJCQkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCQkJCQkJIE5JTCk7CiAK IAljb3N0X3F1YWxfZXZhbCgmZnBpbmZvLT5sb2NhbF9jb25kc19jb3N0LCBm cGluZm8tPmxvY2FsX2NvbmRzLCByb290KTsKIApAQCAtMjAwMCw3ICsyMDAx LDggQEAgZXN0aW1hdGVfcGF0aF9jb3N0X3NpemUoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkJICAgbG9jYWxfam9pbl9jb25kcywKIAkJCQkJCQkJ CQkgICBiYXNlcmVsLT5yZWxpZCwKIAkJCQkJCQkJCQkgICBKT0lOX0lOTkVS LAotCQkJCQkJCQkJCSAgIE5VTEwpOworCQkJCQkJCQkJCSAgIE5VTEwsCisJ CQkJCQkJCQkJICAgTklMKTsKIAkJbG9jYWxfc2VsICo9IGZwaW5mby0+bG9j YWxfY29uZHNfc2VsOwogCiAJCXJvd3MgPSBjbGFtcF9yb3dfZXN0KHJvd3Mg KiBsb2NhbF9zZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY2xhdXNlc2VsLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9jbGF1c2VzZWwuYwppbmRleCA1YjJkOTJhLi4zZDRkMTM2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwu YwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgInV0aWxzL3NlbGZ1bmNz LmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKIAorI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgorCiAKIC8qCiAgKiBEYXRhIHN0cnVjdHVyZSBmb3Ig YWNjdW11bGF0aW5nIGluZm8gYWJvdXQgcG9zc2libGUgcmFuZ2UtcXVlcnkK QEAgLTQ0LDYgKzQ2LDEzIEBAIHR5cGVkZWYgc3RydWN0IFJhbmdlUXVlcnlD bGF1c2UKIAlTZWxlY3Rpdml0eSBoaWJvdW5kOwkJLyogU2VsZWN0aXZpdHkg b2YgYSB2YXIgPCBzb21ldGhpbmcgY2xhdXNlICovCiB9IFJhbmdlUXVlcnlD bGF1c2U7CiAKK3N0YXRpYyBTZWxlY3Rpdml0eSBjbGF1c2VsaXN0X3NlbGVj dGl2aXR5X29yKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQkgTGlz dCAqY2xhdXNlcywKKwkJCQkJCQkJCQkJIGludCB2YXJSZWxpZCwKKwkJCQkJ CQkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkJCQkgU3BlY2lh bEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJCQkJCSBMaXN0ICpjb25kaXRp b25zKTsKKwogc3RhdGljIHZvaWQgYWRkUmFuZ2VDbGF1c2UoUmFuZ2VRdWVy eUNsYXVzZSAqKnJxbGlzdCwgTm9kZSAqY2xhdXNlLAogCQkJICAgYm9vbCB2 YXJvbmxlZnQsIGJvb2wgaXNMVHNlbCwgU2VsZWN0aXZpdHkgczIpOwogCkBA IC01OSwyMyArNjgsMjkgQEAgc3RhdGljIEJpdG1hcHNldCAgKmNvbGxlY3Rf bXZfYXR0bnVtcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywK IAkJCQkJCQkJCSAgT2lkIHZhclJlbGlkLCBJbmRleCAqcmVsaWQsIFNwZWNp YWxKb2luSW5mbyAqc2ppbmZvLAogCQkJCQkJCQkJICBpbnQgdHlwZSk7CiAK K3N0YXRpYyBCaXRtYXBzZXQgKmNsYXVzZV9tdl9nZXRfYXR0bnVtcyhQbGFu bmVySW5mbyAqcm9vdCwgTm9kZSAqY2xhdXNlKTsKKwogc3RhdGljIExpc3Qg KmNsYXVzZWxpc3RfYXBwbHlfZGVwZW5kZW5jaWVzKFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJCQlPaWQgdmFyUmVsaWQsIExp c3QgKnN0YXRzLAogCQkJCQkJCQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbyk7 CiAKLXN0YXRpYyBNVlN0YXRpc3RpY0luZm8gKmNob29zZV9tdl9zdGF0aXN0 aWNzKExpc3QgKm12c3RhdHMsIEJpdG1hcHNldCAqYXR0bnVtcyk7Ci0KIHN0 YXRpYyBMaXN0ICpjbGF1c2VsaXN0X212X3NwbGl0KFBsYW5uZXJJbmZvICpy b290LCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKIAkJCQkJCQkJIExpc3Qg KmNsYXVzZXMsIE9pZCB2YXJSZWxpZCwKIAkJCQkJCQkJIExpc3QgKiptdmNs YXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywgaW50IHR5cGVzKTsK IAogc3RhdGljIFNlbGVjdGl2aXR5IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZp dHkoUGxhbm5lckluZm8gKnJvb3QsCi0JCQkJCQlMaXN0ICpjbGF1c2VzLCBN VlN0YXRpc3RpY0luZm8gKm12c3RhdHMpOworCQkJCQkJTVZTdGF0aXN0aWNJ bmZvICptdnN0YXRzLCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJTGlzdCAqY29u ZGl0aW9ucywgYm9vbCBpc19vcik7CisKIHN0YXRpYyBTZWxlY3Rpdml0eSBj bGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X21jdmxpc3QoUGxhbm5lckluZm8g KnJvb3QsCi0JCQkJCQkJCQlMaXN0ICpjbGF1c2VzLCBNVlN0YXRpc3RpY0lu Zm8gKm12c3RhdHMsCi0JCQkJCQkJCQlib29sICpmdWxsbWF0Y2gsIFNlbGVj dGl2aXR5ICpsb3dzZWwpOworCQkJCQkJCQkJTVZTdGF0aXN0aWNJbmZvICpt dnN0YXRzLAorCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywgTGlzdCAqY29uZGl0 aW9ucywKKwkJCQkJCQkJCWJvb2wgaXNfb3IsIGJvb2wgKmZ1bGxtYXRjaCwK KwkJCQkJCQkJCVNlbGVjdGl2aXR5ICpsb3dzZWwpOwogc3RhdGljIFNlbGVj dGl2aXR5IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKFBs YW5uZXJJbmZvICpyb290LAotCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywgTVZT dGF0aXN0aWNJbmZvICptdnN0YXRzKTsKKwkJCQkJCQkJCU1WU3RhdGlzdGlj SW5mbyAqbXZzdGF0cywKKwkJCQkJCQkJCUxpc3QgKmNsYXVzZXMsIExpc3Qg KmNvbmRpdGlvbnMsCisJCQkJCQkJCQlib29sIGlzX29yKTsKIAogc3RhdGlj IGludCB1cGRhdGVfbWF0Y2hfYml0bWFwX21jdmxpc3QoUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCQkJCQkJCQlpbnQydmVjdG9yICpz dGFrZXlzLCBNQ1ZMaXN0IG1jdmxpc3QsCkBAIC04OSwxMSArMTA0LDU5IEBA IHN0YXRpYyBpbnQgdXBkYXRlX21hdGNoX2JpdG1hcF9oaXN0b2dyYW0oUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCQkJCQkJCQlpbnQg bm1hdGNoZXMsIGNoYXIgKiBtYXRjaGVzLAogCQkJCQkJCQkJYm9vbCBpc19v cik7CiAKKy8qCisgKiBEZXNjcmliZXMgYSBjb21iaW5hdGlvbiBvZiBtdWx0 aXBsZSBzdGF0aXN0aWNzIHRvIGNvdmVyIGF0dHJpYnV0ZXMKKyAqIHJlZmVy ZW5jZWQgYnkgdGhlIGNsYXVzZXMuIFRoZSBhcnJheSAnc3RhdHMnICh3aXRo IG5zdGF0cyBlbGVtZW50cykKKyAqIGxpc3RzIGF0dHJpYnV0ZXMgKGluIHRo ZSBvcmRlciBhcyB0aGV5IGFyZSBhcHBsaWVkKSwgYW5kIG51bWJlciBvZgor ICogY2xhdXNlIGF0dHJpYnV0ZXMgY292ZXJlZCBieSB0aGlzIHNvbHV0aW9u LgorICoKKyAqIGNob29zZV9tdl9zdGF0aXN0aWNzX2V4aGF1c3RpdmUoKSB1 c2VzIHRoaXMgdG8gdHJhY2sgYm90aCB0aGUgY3VycmVudAorICogYW5kIHRo ZSBiZXN0IHNvbHV0aW9ucywgd2hpbGUgd2Fsa2luZyB0aHJvdWdoIHRoZSBz dGF0ZSBvZiBwb3NzaWJsZQorICogY29tYmluYXRpb24uCisgKi8KK3R5cGVk ZWYgc3RydWN0IG12X3NvbHV0aW9uX3QgeworCWludAkJbmNsYXVzZXM7CQkv KiBudW1iZXIgb2YgY2xhdXNlcyBjb3ZlcmVkICovCisJaW50CQluY29uZGl0 aW9uczsJLyogbnVtYmVyIG9mIGNvbmRpdGlvbnMgY292ZXJlZCAqLworCWlu dAkJbnN0YXRzOwkJCS8qIG51bWJlciBvZiBzdGF0cyBhcHBsaWVkICovCisJ aW50CSAgICpzdGF0czsJCQkvKiBzdGF0cyAoaW4gdGhlIGFwcGx5IG9yZGVy KSAqLworfSBtdl9zb2x1dGlvbl90OworCitzdGF0aWMgTGlzdCAqY2hvb3Nl X212X3N0YXRpc3RpY3MoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCUxp c3QgKm12c3RhdHMsCisJCQkJCQkJCUxpc3QgKmNsYXVzZXMsIExpc3QgKmNv bmRpdGlvbnMsCisJCQkJCQkJCU9pZCB2YXJSZWxpZCwKKwkJCQkJCQkJU3Bl Y2lhbEpvaW5JbmZvICpzamluZm8pOworCitzdGF0aWMgTGlzdCAqZmlsdGVy X2NsYXVzZXMoUGxhbm5lckluZm8gKnJvb3QsIE9pZCB2YXJSZWxpZCwKKwkJ CQkJCQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgaW50IHR5cGUsCisJCQkJ CQkJTGlzdCAqc3RhdHMsIExpc3QgKmNsYXVzZXMsCisJCQkJCQkJQml0bWFw c2V0ICoqYXR0bnVtcyk7CisKK3N0YXRpYyBMaXN0ICpmaWx0ZXJfc3RhdHMo TGlzdCAqc3RhdHMsIEJpdG1hcHNldCAqbmV3X2F0dG51bXMsCisJCQkJCQkg IEJpdG1hcHNldCAqYWxsX2F0dG51bXMpOworCitzdGF0aWMgQml0bWFwc2V0 ICoqbWFrZV9zdGF0c19hdHRudW1zKE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0 cywKKwkJCQkJCQkJCSAgaW50IG5tdnN0YXRzKTsKKworc3RhdGljIE1WU3Rh dGlzdGljSW5mbyAqbWFrZV9zdGF0c19hcnJheShMaXN0ICpzdGF0cywgaW50 ICpubXZzdGF0cyk7CisKK3N0YXRpYyBMaXN0KiBmaWx0ZXJfcmVkdW5kYW50 X3N0YXRzKExpc3QgKnN0YXRzLAorCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywg TGlzdCAqY29uZGl0aW9ucyk7CisKK3N0YXRpYyBOb2RlKiogbWFrZV9jbGF1 c2VzX2FycmF5KExpc3QgKmNsYXVzZXMsIGludCAqbmNsYXVzZXMpOworCitz dGF0aWMgQml0bWFwc2V0ICoqIG1ha2VfY2xhdXNlc19hdHRudW1zKFBsYW5u ZXJJbmZvICpyb290LCBPaWQgdmFyUmVsaWQsCisJCQkJCQkJCQkJIFNwZWNp YWxKb2luSW5mbyAqc2ppbmZvLCBpbnQgdHlwZSwKKwkJCQkJCQkJCQkgTm9k ZSAqKmNsYXVzZXMsIGludCBuY2xhdXNlcyk7CisKK3N0YXRpYyBib29sKiBt YWtlX2NvdmVyX21hcChCaXRtYXBzZXQgKipzdGF0c19hdHRudW1zLCBpbnQg bm12c3RhdHMsCisJCQkJCQkJQml0bWFwc2V0ICoqY2xhdXNlc19hdHRudW1z LCBpbnQgbmNsYXVzZXMpOworCiBzdGF0aWMgYm9vbCBoYXNfc3RhdHMoTGlz dCAqc3RhdHMsIGludCB0eXBlKTsKIAogc3RhdGljIExpc3QgKiBmaW5kX3N0 YXRzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJ IE9pZCB2YXJSZWxpZCwgSW5kZXggKnJlbGlkKTsKLSAKKwogc3RhdGljIEJp dG1hcHNldCogZmRlcHNfY29sbGVjdF9hdHRudW1zKExpc3QgKnN0YXRzKTsK IAogc3RhdGljIGludAkqbWFrZV9pZHhfdG9fYXR0bnVtX21hcHBpbmcoQml0 bWFwc2V0ICphdHRudW1zKTsKQEAgLTExNiw2ICsxNzksOCBAQCBzdGF0aWMg Qml0bWFwc2V0ICpmZGVwc19maWx0ZXJfY2xhdXNlcyhQbGFubmVySW5mbyAq cm9vdCwKIAogc3RhdGljIEJpdG1hcHNldCAqIGdldF92YXJhdHRub3MoTm9k ZSAqIG5vZGUsIEluZGV4IHJlbGlkKTsKIAoraW50IG12c3RhdF9zZWFyY2hf dHlwZSA9IE1WU1RBVF9TRUFSQ0hfR1JFRURZOworCiAvKiB1c2VkIGZvciBt ZXJnaW5nIGJpdG1hcHMgLSBBTkQgKG1pbiksIE9SIChtYXgpICovCiAjZGVm aW5lIE1BWCh4LCB5KSAoKCh4KSA+ICh5KSkgPyAoeCkgOiAoeSkpCiAjZGVm aW5lIE1JTih4LCB5KSAoKCh4KSA8ICh5KSkgPyAoeCkgOiAoeSkpCkBAIC0y NTcsMTQgKzMyMiwxNSBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KFBsYW5u ZXJJbmZvICpyb290LAogCQkJCQkgICBMaXN0ICpjbGF1c2VzLAogCQkJCQkg ICBpbnQgdmFyUmVsaWQsCiAJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLAot CQkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykKKwkJCQkJICAgU3Bl Y2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCSAgIExpc3QgKmNvbmRpdGlv bnMpCiB7CiAJU2VsZWN0aXZpdHkgczEgPSAxLjA7CiAJUmFuZ2VRdWVyeUNs YXVzZSAqcnFsaXN0ID0gTlVMTDsKIAlMaXN0Q2VsbCAgICpsOwogCiAJLyog cHJvY2Vzc2luZyBtdiBzdGF0cyAqLwotCU9pZAkJCXJlbGlkID0gSW52YWxp ZE9pZDsKKwlJbmRleAkJcmVsaWQgPSBJbnZhbGlkT2lkOwogCiAJLyogYXR0 cmlidXRlcyBpbiBtdi1jb21wYXRpYmxlIGNsYXVzZXMgKi8KIAlCaXRtYXBz ZXQgICptdmF0dG51bXMgPSBOVUxMOwpAQCAtMjc0LDEyICszNDAsMTMgQEAg Y2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAlz dGF0cyA9IGZpbmRfc3RhdHMocm9vdCwgY2xhdXNlcywgdmFyUmVsaWQsICZy ZWxpZCk7CiAKIAkvKgotCSAqIElmIHRoZXJlJ3MgZXhhY3RseSBvbmUgY2xh dXNlLCB0aGVuIG5vIHVzZSBpbiB0cnlpbmcgdG8gbWF0Y2ggdXAgcGFpcnMs Ci0JICogc28ganVzdCBnbyBkaXJlY3RseSB0byBjbGF1c2Vfc2VsZWN0aXZp dHkoKS4KKwkgKiBJZiB0aGVyZSdzIGV4YWN0bHkgb25lIGNsYXVzZSwgdGhl biBubyB1c2UgaW4gdHJ5aW5nIHRvIG1hdGNoIHVwCisJICogcGFpcnMsIG9y IG1hdGNoaW5nIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzLCBzbyBqdXN0IGdv IGRpcmVjdGx5CisJICogdG8gY2xhdXNlX3NlbGVjdGl2aXR5KCkuCiAJICov CiAJaWYgKGxpc3RfbGVuZ3RoKGNsYXVzZXMpID09IDEpCiAJCXJldHVybiBj bGF1c2Vfc2VsZWN0aXZpdHkocm9vdCwgKE5vZGUgKikgbGluaXRpYWwoY2xh dXNlcyksCi0JCQkJCQkJCSAgdmFyUmVsaWQsIGpvaW50eXBlLCBzamluZm8p OworCQkJCQkJCQkgIHZhclJlbGlkLCBqb2ludHlwZSwgc2ppbmZvLCBjb25k aXRpb25zKTsKIAogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGVyZSBhcmUgc29t ZSBzdGF0cyB3aXRoIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzCkBAIC0zMTEs OCArMzc4LDggQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVySW5m byAqcm9vdCwKIAl9CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgdGhlcmUgYXJl IHN0YXRpc3RpY3Mgd2l0aCBNQ1YgbGlzdC4gSWYgbm90LCB3ZSBkb24ndAot CSAqIG5lZWQgdG8gd2FzdGUgdGltZSB3aXRoIHRoZSBvcHRpbWl6YXRpb24u CisJICogQ2hlY2sgdGhhdCB0aGVyZSBhcmUgc3RhdGlzdGljcyB3aXRoIE1D ViBsaXN0IG9yIGhpc3RvZ3JhbS4KKwkgKiBJZiBub3QsIHdlIGRvbid0IG5l ZWQgdG8gd2FzdGUgdGltZSB3aXRoIHRoZSBvcHRpbWl6YXRpb24uCiAJICov CiAJaWYgKGhhc19zdGF0cyhzdGF0cywgTVZfQ0xBVVNFX1RZUEVfTUNWIHwg TVZfQ0xBVVNFX1RZUEVfSElTVCkpCiAJewpAQCAtMzI2LDMzICszOTMsMTk0 IEBAIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3Qs CiAKIAkJLyoKIAkJICogSWYgdGhlcmUgc3RpbGwgYXJlIGF0IGxlYXN0IHR3 byBjb2x1bW5zLCB3ZSdsbCB0cnkgdG8gc2VsZWN0Ci0JCSAqIGEgc3VpdGFi bGUgbXVsdGl2YXJpYXRlIHN0YXRzLgorCQkgKiBhIHN1aXRhYmxlIGNvbWJp bmF0aW9uIG9mIG11bHRpdmFyaWF0ZSBzdGF0cy4gSWYgdGhlcmUgYXJlCisJ CSAqIG11bHRpcGxlIGNvbWJpbmF0aW9ucywgd2UnbGwgdHJ5IHRvIGNob29z ZSB0aGUgYmVzdCBvbmUuCisJCSAqIFNlZSBjaG9vc2VfbXZfc3RhdGlzdGlj cyBmb3IgbW9yZSBkZXRhaWxzLgogCQkgKi8KIAkJaWYgKGJtc19udW1fbWVt YmVycyhtdmF0dG51bXMpID49IDIpCiAJCXsKLQkJCS8qIHNlZSBjaG9vc2Vf bXZfc3RhdGlzdGljcygpIGZvciBkZXRhaWxzICovCi0JCQlNVlN0YXRpc3Rp Y0luZm8gKm12c3RhdCA9IGNob29zZV9tdl9zdGF0aXN0aWNzKHN0YXRzLCBt dmF0dG51bXMpOworCQkJaW50IGs7CisJCQlMaXN0Q2VsbCAqczsKKworCQkJ LyoKKwkJCSAqIENvcHkgdGhlIGxpc3Qgb2YgY29uZGl0aW9ucywgc28gdGhh dCB3ZSBjYW4gYnVpbGQgYSBsaXN0CisJCQkgKiBvZiBsb2NhbCBjb25kaXRp b25zIChhbmQga2VlcCB0aGUgb3JpZ2luYWwgaW50YWN0LCBmb3IKKwkJCSAq IHRoZSBvdGhlciBjbGF1c2VzIGF0IHRoZSBzYW1lIGxldmVsKS4KKwkJCSAq LworCQkJTGlzdCAqY29uZGl0aW9uc19sb2NhbCA9IGxpc3RfY29weShjb25k aXRpb25zKTsKKworCQkJLyogZmluZCB0aGUgYmVzdCBjb21iaW5hdGlvbiBv ZiBzdGF0aXN0aWNzICovCisJCQlMaXN0ICpzb2x1dGlvbiA9IGNob29zZV9t dl9zdGF0aXN0aWNzKHJvb3QsIHN0YXRzLAorCQkJCQkJCQkJCQkJICBjbGF1 c2VzLCBjb25kaXRpb25zLAorCQkJCQkJCQkJCQkJICB2YXJSZWxpZCwgc2pp bmZvKTsKIAotCQkJaWYgKG12c3RhdCAhPSBOVUxMKQkvKiB3ZSBoYXZlIGEg bWF0Y2hpbmcgc3RhdHMgKi8KKwkJCS8qIHdlIGhhdmUgYSBnb29kIHNvbHV0 aW9uIChsaXN0IG9mIHN0YXRzKSAqLworCQkJZm9yZWFjaCAocywgc29sdXRp b24pCiAJCQl7CisJCQkJTVZTdGF0aXN0aWNJbmZvICptdnN0YXQgPSAoTVZT dGF0aXN0aWNJbmZvICopbGZpcnN0KHMpOworCiAJCQkJLyogY2xhdXNlcyBj b21wYXRpYmxlIHdpdGggbXVsdGktdmFyaWF0ZSBzdGF0cyAqLwogCQkJCUxp c3QJKm12Y2xhdXNlcyA9IE5JTDsKKwkJCQlMaXN0CSptdmNsYXVzZXNfbmV3 ID0gTklMOworCQkJCUxpc3QJKm12Y2xhdXNlc19jb25kaXRpb25zID0gTklM OworCQkJCUJpdG1hcHNldAkqc3RhdF9hdHRudW1zID0gTlVMTDsKIAotCQkJ CS8qIHNwbGl0IHRoZSBjbGF1c2VsaXN0IGludG8gcmVndWxhciBhbmQgbXYt Y2xhdXNlcyAqLwotCQkJCWNsYXVzZXMgPSBjbGF1c2VsaXN0X212X3NwbGl0 KHJvb3QsIHNqaW5mbywgY2xhdXNlcywKKwkJCQkvKiBidWlsZCBhdHRudW0g Yml0bWFwc2V0IGZvciB0aGlzIHN0YXRpc3RpY3MgKi8KKwkJCQlmb3IgKGsg PSAwOyBrIDwgbXZzdGF0LT5zdGFrZXlzLT5kaW0xOyBrKyspCisJCQkJCXN0 YXRfYXR0bnVtcyA9IGJtc19hZGRfbWVtYmVyKHN0YXRfYXR0bnVtcywKKwkJ CQkJCQkJCQkJCSAgbXZzdGF0LT5zdGFrZXlzLT52YWx1ZXNba10pOworCisJ CQkJLyoKKwkJCQkgKiBBcHBlbmQgdGhlIGNvbXBhdGlibGUgY29uZGl0aW9u cyAocGFzc2VkIGZyb20gYWJvdmUpCisJCQkJICogdG8gbXZjbGF1c2VzX2Nv bmRpdGlvbnMuCisJCQkJICovCisJCQkJZm9yZWFjaCAobCwgY29uZGl0aW9u cykKKwkJCQl7CisJCQkJCU5vZGUgKmMgPSAoTm9kZSopbGZpcnN0KGwpOwor CQkJCQlCaXRtYXBzZXQgKnRtcCA9IGNsYXVzZV9tdl9nZXRfYXR0bnVtcyhy b290LCBjKTsKKworCQkJCQlpZiAoYm1zX2lzX3N1YnNldCh0bXAsIHN0YXRf YXR0bnVtcykpCisJCQkJCQltdmNsYXVzZXNfY29uZGl0aW9ucworCQkJCQkJ CT0gbGFwcGVuZChtdmNsYXVzZXNfY29uZGl0aW9ucywgYyk7CisKKwkJCQkJ Ym1zX2ZyZWUodG1wKTsKKwkJCQl9CisKKwkJCQkvKiBzcGxpdCB0aGUgY2xh dXNlbGlzdCBpbnRvIHJlZ3VsYXIgYW5kIG12LWNsYXVzZXMKKwkJCQkgKgor CQkJCSAqIFdlIGtlZXAgdGhlIGxpc3Qgb2YgY2xhdXNlcyAod2UgZG9uJ3Qg cmVtb3ZlIHRoZQorCQkJCSAqIGNsYXVzZXMgeWV0LCBiZWNhdXNlIHdlIHdh bnQgdG8gdXNlIHRoZSBjbGF1c2VzCisJCQkJICogYXMgY29uZGl0aW9ucyBv ZiBvdGhlciBjbGF1c2VzKS4KKwkJCQkgKgorCQkJCSAqIEZJWE1FIERvIHRo aXMgb25seSBvbmNlLCBpLmUuIGZpbHRlciB0aGUgY2xhdXNlcworCQkJCSAq ICAgICAgIG9uY2UgKHNlbGVjdGluZyBjbGF1c2VzIGNvdmVyZWQgYnkgYXQg bGVhc3QKKwkJCQkgKiAgICAgICBvbmUgc3RhdGlzdGljcykgYW5kIHRoZW4g Y29udmVydCB0aGVtIGludG8KKwkJCQkgKiAgICAgICBzbWFsbGVyIHBlci1z dGF0aXN0aWNzIGxpc3RzIG9mIGNvbmRpdGlvbnMKKwkJCQkgKiAgICAgICBh bmQgZXN0aW1hdGVkIGNsYXVzZXMuCisJCQkJICovCisJCQkJY2xhdXNlbGlz dF9tdl9zcGxpdChyb290LCBzamluZm8sIGNsYXVzZXMsCiAJCQkJCQkJCQkJ dmFyUmVsaWQsICZtdmNsYXVzZXMsIG12c3RhdCwKIAkJCQkJCQkJCQkoTVZf Q0xBVVNFX1RZUEVfTUNWIHwgTVZfQ0xBVVNFX1RZUEVfSElTVCkpOwogCi0J CQkJLyogd2UndmUgY2hvc2VuIHRoZSBoaXN0b2dyYW0gdG8gbWF0Y2ggdGhl IGNsYXVzZXMgKi8KKwkJCQkvKgorCQkJCSAqIFdlJ3ZlIGNob3NlbiB0aGUg c3RhdGlzdGljcyB0byBtYXRjaCB0aGUgY2xhdXNlcywgc28KKwkJCQkgKiBl YWNoIHN0YXRpc3RpY3MgZnJvbSB0aGUgc29sdXRpb24gc2hvdWxkIGhhdmUg YXQgbGVhc3QKKwkJCQkgKiBvbmUgbmV3IGNsYXVzZSAobm90IGNvdmVyZWQg YnkgdGhlIHByZXZpb3VzIHN0YXRzKS4KKwkJCQkgKi8KIAkJCQlBc3NlcnQo bXZjbGF1c2VzICE9IE5JTCk7CiAKKwkJCQkvKgorCQkJCSAqIE12Y2xhdXNl cyBub3cgY29udGFpbnMgb25seSBjbGF1c2VzIGNvbXBhdGlibGUKKwkJCQkg KiB3aXRoIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RhdHMsIGJ1dCB3ZSBo YXZlIHRvCisJCQkJICogc3BsaXQgdGhhdCBpbnRvIGNvbmRpdGlvbnMgKGFs cmVhZHkgbWF0Y2hlZCBieQorCQkJCSAqIHRoZSBwcmV2aW91cyBzdGF0cyks IGFuZCB0aGUgbmV3IGNsYXVzZXMgd2UgbmVlZAorCQkJCSAqIHRvIGVzdGlt YXRlIHVzaW5nIHRoaXMgc3RhdHMuCisJCQkJICovCisJCQkJZm9yZWFjaCAo bCwgbXZjbGF1c2VzKQorCQkJCXsKKwkJCQkJTGlzdENlbGwgKnA7CisJCQkJ CWJvb2wgY292ZXJlZCA9IGZhbHNlOworCQkJCQlOb2RlICAqY2xhdXNlID0g KE5vZGUgKikgbGZpcnN0KGwpOworCQkJCQlCaXRtYXBzZXQgKmNsYXVzZV9h dHRudW1zID0gY2xhdXNlX212X2dldF9hdHRudW1zKHJvb3QsIGNsYXVzZSk7 CisKKwkJCQkJLyoKKwkJCQkJICogSWYgYWxyZWFkeSBjb3ZlcmVkIGJ5IHBy ZXZpb3VzIHN0YXRzLCBhZGQgaXQgdG8KKwkJCQkJICogY29uZGl0aW9ucy4K KwkJCQkJICoKKwkJCQkJICogVE9ETyBNYXliZSB0aGlzIGNvdWxkIGJlIHJl bGF4ZWQgYSBiaXQ/IEJlY2F1c2UKKwkJCQkJICogICAgICB3aXRoIGNvbXBs ZXggYW5kL29yIGNsYXVzZXMsIHRoaXMgbWlnaHQKKwkJCQkJICogICAgICBt ZWFuIG5vIHN0YXRpc3RpY3MgYWN0dWFsbHkgY292ZXJzIHN1Y2gKKwkJCQkJ ICogICAgICBjb21wbGV4IGNsYXVzZS4KKwkJCQkJICovCisJCQkJCWZvcmVh Y2ggKHAsIHNvbHV0aW9uKQorCQkJCQl7CisJCQkJCQlpbnQgazsKKwkJCQkJ CUJpdG1hcHNldCAgKnN0YXRfYXR0bnVtcyA9IE5VTEw7CisKKwkJCQkJCU1W U3RhdGlzdGljSW5mbyAqcHJldl9zdGF0CisJCQkJCQkJPSAoTVZTdGF0aXN0 aWNJbmZvICopbGZpcnN0KHApOworCisJCQkJCQkvKiBicmVhayBpZiB3ZSd2 ZSByYW4gaW50byBjdXJyZW50IHN0YXRpc3RpYyAqLworCQkJCQkJaWYgKHBy ZXZfc3RhdCA9PSBtdnN0YXQpCisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWZv ciAoayA9IDA7IGsgPCBwcmV2X3N0YXQtPnN0YWtleXMtPmRpbTE7IGsrKykK KwkJCQkJCQlzdGF0X2F0dG51bXMgPSBibXNfYWRkX21lbWJlcihzdGF0X2F0 dG51bXMsCisJCQkJCQkJCQkJCQkJCSAgcHJldl9zdGF0LT5zdGFrZXlzLT52 YWx1ZXNba10pOworCisJCQkJCQljb3ZlcmVkID0gYm1zX2lzX3N1YnNldChj bGF1c2VfYXR0bnVtcywgc3RhdF9hdHRudW1zKTsKKworCQkJCQkJYm1zX2Zy ZWUoc3RhdF9hdHRudW1zKTsKKworCQkJCQkJaWYgKGNvdmVyZWQpCisJCQkJ CQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlpZiAoY292ZXJlZCkKKwkJCQkJ CW12Y2xhdXNlc19jb25kaXRpb25zCisJCQkJCQkJPSBsYXBwZW5kKG12Y2xh dXNlc19jb25kaXRpb25zLCBjbGF1c2UpOworCQkJCQllbHNlCisJCQkJCQlt dmNsYXVzZXNfbmV3CisJCQkJCQkJPSBsYXBwZW5kKG12Y2xhdXNlc19uZXcs IGNsYXVzZSk7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBXZSBuZWVkIGF0 IGxlYXN0IG9uZSBuZXcgY2xhdXNlIChub3QganVzdCBjb25kaXRpb25zKS4K KwkJCQkgKi8KKwkJCQlBc3NlcnQobXZjbGF1c2VzX25ldyAhPSBOSUwpOwor CiAJCQkJLyogY29tcHV0ZSB0aGUgbXVsdGl2YXJpYXRlIHN0YXRzICovCi0J CQkJczEgKj0gY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eShyb290LCBtdmNs YXVzZXMsIG12c3RhdCk7CisJCQkJczEgKj0gY2xhdXNlbGlzdF9tdl9zZWxl Y3Rpdml0eShyb290LCBtdnN0YXQsCisJCQkJCQkJCQkJCQltdmNsYXVzZXNf bmV3LAorCQkJCQkJCQkJCQkJbXZjbGF1c2VzX2NvbmRpdGlvbnMsCisJCQkJ CQkJCQkJCQlmYWxzZSk7IC8qIEFORCAqLworCQkJfQorCisJCQkvKgorCQkJ ICogQW5kIG5vdyBmaW5hbGx5IHJlbW92ZSBhbGwgdGhlIG12LWNvbXBhdGli bGUgY2xhdXNlcy4KKwkJCSAqCisJCQkgKiBUaGlzIG9ubHkgcmVwZWF0cyB0 aGUgc2FtZSBzcGxpdCBhcyBhYm92ZSwgYnV0IHRoaXMKKwkJCSAqIHRpbWUg d2UgYWN0dWFsbHkgdXNlIHRoZSByZXN1bHQgbGlzdCAoYW5kIGZlZWQgaXQg dG8KKwkJCSAqIHRoZSBuZXh0IGNhbGwpLgorCQkJICovCisJCQlmb3JlYWNo IChzLCBzb2x1dGlvbikKKwkJCXsKKwkJCQkvKiBjbGF1c2VzIGNvbXBhdGli bGUgd2l0aCBtdWx0aS12YXJpYXRlIHN0YXRzICovCisJCQkJTGlzdAkqbXZj bGF1c2VzID0gTklMOworCisJCQkJTVZTdGF0aXN0aWNJbmZvICptdnN0YXQg PSAoTVZTdGF0aXN0aWNJbmZvICopbGZpcnN0KHMpOworCisJCQkJLyogc3Bs aXQgdGhlIGxpc3QgaW50byByZWd1bGFyIGFuZCBtdi1jbGF1c2VzICovCisJ CQkJY2xhdXNlcyA9IGNsYXVzZWxpc3RfbXZfc3BsaXQocm9vdCwgc2ppbmZv LCBjbGF1c2VzLAorCQkJCQkJCQkJCXZhclJlbGlkLCAmbXZjbGF1c2VzLCBt dnN0YXQsCisJCQkJCQkJCQkJKE1WX0NMQVVTRV9UWVBFX01DViB8IE1WX0NM QVVTRV9UWVBFX0hJU1QpKTsKKworCQkJCS8qCisJCQkJICogQWRkIHRoZSBj bGF1c2VzIHRvIHRoZSBjb25kaXRpb25zICh0byBiZSBwYXNzZWQKKwkJCQkg KiB0byByZWd1bGFyIGNsYXVzZXMpLCBpcnJlc3BlY3RlZGx5IHdoZXRoZXIg aXQKKwkJCQkgKiB3aWxsIGJlIHVzZWQgYXMgYSBjb25kaXRpb24gb3IgYSBj bGF1c2UgaGVyZS4KKwkJCQkgKgorCQkJCSAqIFdlIG9ubHkga2VlcCB0aGUg cmVtYWluaW5nIGNvbmRpdGlvbnMgaW4gdGhlCisJCQkJICogY2xhdXNlcyAo d2Uga2VlcCB3aGF0IGNsYXVzZWxpc3RfbXZfc3BsaXQgcmV0dXJucykKKwkJ CQkgKiBzbyB3ZSBhZGQgZWFjaCBNViBjb25kaXRpb24gZXhhY3RseSBvbmNl LgorCQkJCSAqLworCQkJCWNvbmRpdGlvbnNfbG9jYWwgPSBsaXN0X2NvbmNh dChjb25kaXRpb25zX2xvY2FsLCBtdmNsYXVzZXMpOwogCQkJfQorCisJCQkv KiBmcm9tIG5vdyBvbiwgd29yayB3aXRoIHRoZSAnbG9jYWwnIGxpc3Qgb2Yg Y29uZGl0aW9ucyAqLworCQkJY29uZGl0aW9ucyA9IGNvbmRpdGlvbnNfbG9j YWw7CiAJCX0KIAl9CiAKIAkvKgorCSAqIElmIHRoZXJlJ3MgZXhhY3RseSBv bmUgY2xhdXNlLCB0aGVuIG5vIHVzZSBpbiB0cnlpbmcgdG8gbWF0Y2ggdXAK KwkgKiBwYWlycywgc28ganVzdCBnbyBkaXJlY3RseSB0byBjbGF1c2Vfc2Vs ZWN0aXZpdHkoKS4KKwkgKi8KKwlpZiAobGlzdF9sZW5ndGgoY2xhdXNlcykg PT0gMSkKKwkJcmV0dXJuIGNsYXVzZV9zZWxlY3Rpdml0eShyb290LCAoTm9k ZSAqKSBsaW5pdGlhbChjbGF1c2VzKSwKKwkJCQkJCQkJICB2YXJSZWxpZCwg am9pbnR5cGUsIHNqaW5mbywgY29uZGl0aW9ucyk7CisKKwkvKgogCSAqIElu aXRpYWwgc2NhbiBvdmVyIGNsYXVzZXMuICBBbnl0aGluZyB0aGF0IGRvZXNu J3QgbG9vayBsaWtlIGEgcG90ZW50aWFsCiAJICogcmFuZ2VxdWVyeSBjbGF1 c2UgZ2V0cyBtdWx0aXBsaWVkIGludG8gczEgYW5kIGZvcmdvdHRlbi4gQW55 dGhpbmcgdGhhdAogCSAqIGRvZXMgZ2V0cyBpbnNlcnRlZCBpbnRvIGFuIHJx bGlzdCBlbnRyeS4KQEAgLTM2NCw3ICs1OTIsOCBAQCBjbGF1c2VsaXN0X3Nl bGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogCQlTZWxlY3Rpdml0eSBz MjsKIAogCQkvKiBBbHdheXMgY29tcHV0ZSB0aGUgc2VsZWN0aXZpdHkgdXNp bmcgY2xhdXNlX3NlbGVjdGl2aXR5ICovCi0JCXMyID0gY2xhdXNlX3NlbGVj dGl2aXR5KHJvb3QsIGNsYXVzZSwgdmFyUmVsaWQsIGpvaW50eXBlLCBzamlu Zm8pOworCQlzMiA9IGNsYXVzZV9zZWxlY3Rpdml0eShyb290LCBjbGF1c2Us IHZhclJlbGlkLCBqb2ludHlwZSwgc2ppbmZvLAorCQkJCQkJCQljb25kaXRp b25zKTsKIAogCQkvKgogCQkgKiBDaGVjayBmb3IgYmVpbmcgcGFzc2VkIGEg UmVzdHJpY3RJbmZvLgpAQCAtNTIzLDYgKzc1Miw1NSBAQCBjbGF1c2VsaXN0 X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogfQogCiAvKgorICog U2ltaWxhciB0byBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KCksIGJ1dCBmb3Ig T1ItY2xhdXNlcy4gV2UgY2FuJ3QKKyAqIHNpbXBseSBhcHBseSBleGFjdGx5 IHRoZSBzYW1lIGxvZ2ljIGFzIHRvIEFORC1jbGF1c2VzLCBiZWNhdXNlIHRo ZXJlCisgKiBhcmUgYSBmZXcga2V5IGRpZmZlcmVuY2VzOgorICoKKyAqICAg LSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBkb24ndCByZWFsbHkgYXBwbHkg dG8gT1ItY2xhdXNlcworICoKKyAqICAgLSBjbGF1c2VsaXN0X3NlbGVjdGl2 aXR5KCkgd29ya3MgYnkgZGVjb21wb3NpbmcgdGhlIHNlbGVjdGl2aXR5Cisg KiAgICAgaW50byBjb25kaXRpb25hbCBzZWxlY3Rpdml0aWVzIChwcm9iYWJp bGl0aWVzKSwgYnV0IHRoYXQgY2FuIGJlCisgKiAgICAgZG9uZSBvbmx5IGZv ciBBTkQtY2xhdXNlcy4gVGhhdCBtZWFucyBwcm9ibGVtcyB3aXRoIGFwcGx5 aW5nCisgKiAgICAgbXVsdGlwbGUgc3RhdGlzdGljcyAoYW5kIHJldXNpbmcg Y2xhdXNlcyBhcyBjb25kaXRpb25zLCBldGMuKS4KKyAqCisgKiBXZSBtaWdo dCBpbnZlbnQgYSBjb21wbGV0ZWx5IG5ldyBzZXQgb2YgZnVuY3Rpb25zIGhl cmUsIHJlc2VtYmxpbmcKKyAqIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkgYnV0 IGFkYXB0aW5nIHRoZSBpZGVhcyB0byBPUi1jbGF1c2VzLgorICoKKyAqIEJ1 dCBsdWNraWx5IHdlIGtub3cgdGhhdCBlYWNoIE9SLWNsYXVzZQorICoKKyAq ICAgICAoYSBPUiBiIE9SIGMpCisgKgorICogbWF5IGJlIHJld3JpdHRlbiBh cyBhbiBlcXVpdmFsZW50IEFORC1jbGF1c2UgdXNpbmcgbmVnYXRpb246Cisg KgorICogICAgIE5PVCAoKE5PVCBhKSBBTkQgKE5PVCBiKSBBTkQgKE5PVCBj KSkKKyAqCisgKiBBbmQgdGhhdCdzIHNvbWV0aGluZyB3ZSBjYW4gcGFzcyB0 byBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5LgorICovCitzdGF0aWMgU2VsZWN0 aXZpdHkKK2NsYXVzZWxpc3Rfc2VsZWN0aXZpdHlfb3IoUGxhbm5lckluZm8g KnJvb3QsCisJCQkJCSAgIExpc3QgKmNsYXVzZXMsCisJCQkJCSAgIGludCB2 YXJSZWxpZCwKKwkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCSAg IFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCQkgICBMaXN0ICpjb25k aXRpb25zKQoreworCUxpc3QJICAgKmFyZ3MgPSBOSUw7CisJTGlzdENlbGwg ICAqbDsKKwlFeHByCSAgICpleHByOworCisJLyogKE5PVCAuLi4pICovCisJ Zm9yZWFjaCAobCwgY2xhdXNlcykKKwkJYXJncyA9IGxhcHBlbmQoYXJncywg bWFrZUJvb2xFeHByKE5PVF9FWFBSLCBsaXN0X21ha2UxKGxmaXJzdChsKSks IC0xKSk7CisKKwkvKiAoKE5PVCAuLi4pIEFORCAoTk9UIC4uLikpICovCisJ ZXhwciA9IG1ha2VCb29sRXhwcihBTkRfRVhQUiwgYXJncywgLTEpOworCisJ LyogTk9UICguLi4gQU5EIC4uLikgKi8KKwlyZXR1cm4gMS4wIC0gY2xhdXNl bGlzdF9zZWxlY3Rpdml0eShyb290LCBsaXN0X21ha2UxKGV4cHIpLCB2YXJS ZWxpZCwKKwkJCQkJCQkJCQlqb2ludHlwZSwgc2ppbmZvLCBjb25kaXRpb25z KTsKK30KKworLyoKICAqIGFkZFJhbmdlQ2xhdXNlIC0tLSBhZGQgYSBuZXcg cmFuZ2UgY2xhdXNlIGZvciBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5CiAgKgog ICogSGVyZSBpcyB3aGVyZSB3ZSB0cnkgdG8gbWF0Y2ggdXAgcGFpcnMgb2Yg cmFuZ2UtcXVlcnkgY2xhdXNlcwpAQCAtNzI5LDcgKzEwMDcsOCBAQCBjbGF1 c2Vfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICAgTm9k ZSAqY2xhdXNlLAogCQkJCSAgIGludCB2YXJSZWxpZCwKIAkJCQkgICBKb2lu VHlwZSBqb2ludHlwZSwKLQkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5m bykKKwkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJCQkgICBM aXN0ICpjb25kaXRpb25zKQogewogCVNlbGVjdGl2aXR5IHMxID0gMC41OwkJ LyogZGVmYXVsdCBmb3IgYW55IHVuaGFuZGxlZCBjbGF1c2UgdHlwZSAqLwog CVJlc3RyaWN0SW5mbyAqcmluZm8gPSBOVUxMOwpAQCAtODQ5LDcgKzExMjgs OCBAQCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJ CQkJCQkJCSAgKE5vZGUgKikgZ2V0X25vdGNsYXVzZWFyZygoRXhwciAqKSBj bGF1c2UpLAogCQkJCQkJCQkJICB2YXJSZWxpZCwKIAkJCQkJCQkJCSAgam9p bnR5cGUsCi0JCQkJCQkJCQkgIHNqaW5mbyk7CisJCQkJCQkJCQkgIHNqaW5m bywKKwkJCQkJCQkJCSAgY29uZGl0aW9ucyk7CiAJfQogCWVsc2UgaWYgKGFu ZF9jbGF1c2UoY2xhdXNlKSkKIAl7CkBAIC04NTgsMjkgKzExMzgsMTggQEAg Y2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJ CQkJKChCb29sRXhwciAqKSBjbGF1c2UpLT5hcmdzLAogCQkJCQkJCQkJdmFy UmVsaWQsCiAJCQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJCQkJCXNqaW5mbyk7 CisJCQkJCQkJCQlzamluZm8sCisJCQkJCQkJCQljb25kaXRpb25zKTsKIAl9 CiAJZWxzZSBpZiAob3JfY2xhdXNlKGNsYXVzZSkpCiAJewotCQkvKgotCQkg KiBTZWxlY3Rpdml0aWVzIGZvciBhbiBPUiBjbGF1c2UgYXJlIGNvbXB1dGVk IGFzIHMxK3MyIC0gczEqczIgdG8KLQkJICogYWNjb3VudCBmb3IgdGhlIHBy b2JhYmxlIG92ZXJsYXAgb2Ygc2VsZWN0ZWQgdHVwbGUgc2V0cy4KLQkJICoK LQkJICogWFhYIGlzIHRoaXMgdG9vIGNvbnNlcnZhdGl2ZT8KLQkJICovCi0J CUxpc3RDZWxsICAgKmFyZzsKLQotCQlzMSA9IDAuMDsKLQkJZm9yZWFjaChh cmcsICgoQm9vbEV4cHIgKikgY2xhdXNlKS0+YXJncykKLQkJewotCQkJU2Vs ZWN0aXZpdHkgczIgPSBjbGF1c2Vfc2VsZWN0aXZpdHkocm9vdCwKLQkJCQkJ CQkJCQkJCShOb2RlICopIGxmaXJzdChhcmcpLAotCQkJCQkJCQkJCQkJdmFy UmVsaWQsCi0JCQkJCQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJCQkJCQkJCXNq aW5mbyk7Ci0KLQkJCXMxID0gczEgKyBzMiAtIHMxICogczI7Ci0JCX0KKwkJ LyoganVzdCBjYWxsIHRvIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlfb3IoKSAq LworCQlzMSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlfb3Iocm9vdCwKKwkJ CQkJCQkJCSgoQm9vbEV4cHIgKikgY2xhdXNlKS0+YXJncywKKwkJCQkJCQkJ CXZhclJlbGlkLAorCQkJCQkJCQkJam9pbnR5cGUsCisJCQkJCQkJCQlzamlu Zm8sCisJCQkJCQkJCQljb25kaXRpb25zKTsKIAl9CiAJZWxzZSBpZiAoaXNf b3BjbGF1c2UoY2xhdXNlKSB8fCBJc0EoY2xhdXNlLCBEaXN0aW5jdEV4cHIp KQogCXsKQEAgLTk3MCw3ICsxMjM5LDggQEAgY2xhdXNlX3NlbGVjdGl2aXR5 KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkoTm9kZSAqKSAoKFJlbGFi ZWxUeXBlICopIGNsYXVzZSktPmFyZywKIAkJCQkJCQkJdmFyUmVsaWQsCiAJ CQkJCQkJCWpvaW50eXBlLAotCQkJCQkJCQlzamluZm8pOworCQkJCQkJCQlz amluZm8sCisJCQkJCQkJCWNvbmRpdGlvbnMpOwogCX0KIAllbHNlIGlmIChJ c0EoY2xhdXNlLCBDb2VyY2VUb0RvbWFpbikpCiAJewpAQCAtOTc5LDcgKzEy NDksOCBAQCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCShOb2RlICopICgoQ29lcmNlVG9Eb21haW4gKikgY2xhdXNl KS0+YXJnLAogCQkJCQkJCQl2YXJSZWxpZCwKIAkJCQkJCQkJam9pbnR5cGUs Ci0JCQkJCQkJCXNqaW5mbyk7CisJCQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJ Y29uZGl0aW9ucyk7CiAJfQogCWVsc2UKIAl7CkBAIC0xMTAzLDkgKzEzNzQs NjcgQEAgY2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAog ICogICAgICB0aGVtIHdpdGhvdXQgaW5zcGVjdGlvbiwgd2hpY2ggaXMgbW9y ZSBleHBlbnNpdmUpLiBCdXQgdGhpcwogICogICAgICByZXF1aXJlcyByZWFs bHkga25vd2luZyB0aGUgcGVyLWNsYXVzZSBzZWxlY3Rpdml0aWVzIGluIGFk dmFuY2UsCiAgKiAgICAgIGFuZCB0aGF0J3Mgbm90IHdoYXQgd2UgZG8gbm93 LgorICoKKyAqIFRPRE8gQWxsIHRoaXMgaXMgYmFzZWQgb24gdGhlIGFzc3Vt cHRpb24gdGhhdCB0aGUgc3RhdGlzdGljcyByZXByZXNlbnQKKyAqICAgICAg dGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMsIGkuZS4gdGhhdCBpZiB0d28g Y29sdW5tcyBhcmUgbm90IGluCisgKiAgICAgIHRoZSBzYW1lIHN0YXRpc3Rp Y3MsIHRoZXJlJ3Mgbm8gZGVwZW5kZW5jeS4gSWYgdGhhdCdzIG5vdCB0aGUK KyAqICAgICAgY2FzZSwgd2UgbWF5IGdldCBtaXNlc3RpbWF0ZXMsIGp1c3Qg bGlrZSBiZWZvcmUuIEZvciBleGFtcGxlCisgKiAgICAgIGFzc3VtZSB3ZSBo YXZlIGEgdGFibGUgd2l0aCB0aHJlZSBjb2x1bW5zIFthLGIsY10gd2l0aCBl eGFjdGx5CisgKiAgICAgIHRoZSBzYW1lIHZhbHVlcywgYW5kIHN0YXRpc3Rp Y3Mgb24gW2EsYl0gYW5kIFtiLGNdLiBTbyBzb210aGluZworICogICAgICBs aWtlIHRoaXM6CisgKgorICogICAgICAgICAgQ1JFQVRFIFRBQkxFIHRlc3Qg QVMgU0VMRUNUIGksIGksIGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApOworICoKKyAq ICAgICAgICAgIEFMVEVSIFRBQkxFIHRlc3QgQUREIFNUQVRJU1RJQ1MgKG1j dikgT04gKGEsYik7CisgKiAgICAgICAgICBBTFRFUiBUQUJMRSB0ZXN0IEFE RCBTVEFUSVNUSUNTIChtY3YpIE9OIChiLGMpOworICoKKyAqICAgICAgICAg IEFOQUxZWkUgdGVzdDsKKyAqCisgKiAgICAgICAgICBFWFBMQUlOIEFOQUxZ WkUgU0VMRUNUICogRlJPTSB0ZXN0CisgKiAgICAgICAgICAgICAgICAgICAg V0hFUkUgKGEgPCAxMCkgQU5EIChiIDwgMjApIEFORCAoYyA8IDEwKTsKKyAq CisgKiAgICAgIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgb25seSBz aGFyZWQgY29sdW1uIGJldHdlZW4gdGhlIHR3bworICogICAgICBzdGF0aXN0 aWNzIGlzICdiJyBzbyB0aGUgcHJvYmFiaWxpdHkgd2lsbCBiZSBjb21wdXRl ZCBsaWtlIHRoaXMKKyAqCisgKiAgICAgICAgICBQWyhhIDwgMTApICYgKGIg PCAyMCkgJiAoYyA8IDEwKV0KKyAqICAgICAgICAgICAgID0gUFsoYSA8IDEw KSAmIChiIDwgMjApXSAqIFBbKGMgPCAxMCkgfCAoYSA8IDEwKSAmIChiIDwg MjApXQorICogICAgICAgICAgICAgPSBQWyhhIDwgMTApICYgKGIgPCAyMCld ICogUFsoYyA8IDEwKSB8IChiIDwgMjApXQorICoKKyAqICAgICAgb3IgbGlr ZSB0aGlzCisgKgorICogICAgICAgICAgUFsoYSA8IDEwKSAmIChiIDwgMjAp ICYgKGMgPCAxMCldCisgKiAgICAgICAgICAgICA9IFBbKGIgPCAyMCkgJiAo YyA8IDEwKV0gKiBQWyhhIDwgMTApIHwgKGIgPCAyMCkgJiAoYyA8IDEwKV0K KyAqICAgICAgICAgICAgID0gUFsoYiA8IDIwKSAmIChjIDwgMTApXSAqIFBb KGEgPCAxMCkgfCAoYiA8IDIwKV0KKyAqCisgKiAgICAgIEluIGJvdGggY2Fz ZXMgdGhlIGNvbmRpdGlvbmFsIHByb2JhYmlsaXRpZXMgd2lsbCBiZSBldmFs dWF0ZWQgYXMKKyAqICAgICAgMC41LCBiZWNhdXNlIHRoZXkgbGFjayB0aGUg b3RoZXIgY29sdW1uICh3aGljaCB3b3VsZCBtYWtlIGl0IDEuMCkuCisgKgor ICogICAgICBUaGVvcmV0aWNhbGx5IGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRv IHRyYW5zZmVyIHRoZSBkZXBlbmRlbmN5LAorICogICAgICBlLmcuIGJ5IGJ1 aWxkaW5nIGJpdG1hcCBmb3IgW2EsYl0gYW5kIHRoZW4gY29tYmluZSBpdCB3 aXRoIFtiLGNdCisgKiAgICAgIGJ5IGRvaW5nIHNvbWV0aGluZyBsaWtlIHRo aXM6CisgKgorICogICAgICAgICAgMSkgYnVpbGQgYml0bWFwIG9uIFthLGJd IHVzaW5nIFsoYTwxMCkgJiAoYiA8IDIwKV0KKyAqICAgICAgICAgIDIpIGZv ciBlYWNoIGVsZW1lbnQgaW4gW2IsY10gY2hlY2sgdGhlIGJpdG1hcAorICoK KyAqICAgICAgQnV0IHRoYXQncyBjZXJ0YWlubHkgbm9udHJpdmlhbCAtIGZv ciBleGFtcGxlIHRoZSBzdGF0aXN0aWNzIG1heQorICogICAgICBiZSBkaWZm ZXJlbnQgKE1DViBsaXN0IHZzLiBoaXN0b2dyYW0pIGFuZC9vciB0aGUgaXRl bXMgbWF5IG5vdAorICogICAgICBtYXRjaCAoZS5nLiBNQ1YgaXRlbXMgb3Ig aGlzdG9ncmFtIGJ1Y2tldHMgd2lsbCBiZSBidWlsdAorICogICAgICBkaWZm ZXJlbnRseSkuIEFsc28sIGZvciBvbmUgdmFsdWUgb2YgJ2InIHRoZXJlIG1p Z2h0IGJlIG11bHRpcGxlCisgKiAgICAgIE1DViBpdGVtcyAoYmVjYXVzZSBv ZiB0aGUgb3RoZXIgY29sdW1uIHZhbHVlcykgd2l0aCBkaWZmZXJlbnQKKyAq ICAgICAgYml0bWFwIHZhbHVlcyAoc29tZSB3aWxsIG1hdGNoLCBzb21lIHdv bid0KSAtIHNvIGl0J3Mgbm90IGV4YWN0bHkKKyAqICAgICAgYml0bWFwIGJ1 dCBhIHBhcnRpYWwgbWF0Y2guCisgKgorICogICAgICBNYXliZSBhIGhhc2gg dGFibGUgd2l0aCBudW1iZXIgb2YgbWF0Y2hlcyBhbmQgbWlzbWF0Y2hlcyAo b3IKKyAqICAgICAgbWF5YmUgc3VtcyBvZiBmcmVxdWVuY2llcykgd291bGQg d29yaz8gVGhlIHN0ZXAgKDIpIHdvdWxkIHRoZW4KKyAqICAgICAgbG9va3Vw IHRoZSB2YWx1ZXMgYW5kIHVzZSB0aGF0IHRvIHdlaWdodCB0aGUgaXRlbSBz b21laG93LgorICogCisgKiAgICAgIEN1cnJlbnRseSB0aGUgb25seSBzb2x1 dGlvbiBpcyB0byBidWlsZCBzdGF0aXN0aWNzIG9uIGFsbCB0aHJlZQorICog ICAgICBjb2x1bW5zLgogICovCiBzdGF0aWMgU2VsZWN0aXZpdHkKLWNsYXVz ZWxpc3RfbXZfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cykKK2NsYXVzZWxp c3RfbXZfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsIE1WU3RhdGlz dGljSW5mbyAqbXZzdGF0cywKKwkJCQkJCSAgTGlzdCAqY2xhdXNlcywgTGlz dCAqY29uZGl0aW9ucywgYm9vbCBpc19vcikKIHsKIAlib29sIGZ1bGxtYXRj aCA9IGZhbHNlOwogCVNlbGVjdGl2aXR5IHMxID0gMC4wLCBzMiA9IDAuMDsK QEAgLTExMjMsNyArMTQ1Miw4IEBAIGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZp dHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIE1WU3RhdGlz dGljSW5mbyAqbXZzCiAJICovCiAKIAkvKiBFdmFsdWF0ZSB0aGUgTUNWIGZp cnN0LiAqLwotCXMxID0gY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9tY3Zs aXN0KHJvb3QsIGNsYXVzZXMsIG12c3RhdHMsCisJczEgPSBjbGF1c2VsaXN0 X212X3NlbGVjdGl2aXR5X21jdmxpc3Qocm9vdCwgbXZzdGF0cywKKwkJCQkJ CQkJCQkgICBjbGF1c2VzLCBjb25kaXRpb25zLCBpc19vciwKIAkJCQkJCQkJ CQkgICAmZnVsbG1hdGNoLCAmbWN2X2xvdyk7CiAKIAkvKgpAQCAtMTEzNiw3 ICsxNDY2LDggQEAgY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eShQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywgTVZTdGF0aXN0aWNJbmZvICpt dnMKIAkvKiBGSVhNRSBpZiAoZnVsbG1hdGNoKSB3aXRob3V0IG1hdGNoaW5n IE1DViBpdGVtLCB1c2UgdGhlIG1jdl9sb3cKIAkgKiAgICAgICBzZWxlY3Rp dml0eSBhcyB1cHBlciBib3VuZCAqLwogCi0JczIgPSBjbGF1c2VsaXN0X212 X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShyb290LCBjbGF1c2VzLCBtdnN0YXRz KTsKKwlzMiA9IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFt KHJvb3QsIG12c3RhdHMsCisJCQkJCQkJCQkJCSBjbGF1c2VzLCBjb25kaXRp b25zLCBpc19vcik7CiAKIAkvKiBUT0RPIGNsYW1wIHRvIDw9IDEuMCAob3Ig bW9yZSBzdHJpY3RseSwgd2hlbiBwb3NzaWJsZSkgKi8KIAlyZXR1cm4gczEg KyBzMjsKQEAgLTExNzYsOCArMTUwNyw3IEBAIGNvbGxlY3RfbXZfYXR0bnVt cyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywgT2lkIHZhclJl bGlkLAogCSAqLwogCWlmIChibXNfbnVtX21lbWJlcnMoYXR0bnVtcykgPD0g MSkKIAl7Ci0JCWlmIChhdHRudW1zICE9IE5VTEwpCi0JCQlwZnJlZShhdHRu dW1zKTsKKwkJYm1zX2ZyZWUoYXR0bnVtcyk7CiAJCWF0dG51bXMgPSBOVUxM OwogCQkqcmVsaWQgPSBJbnZhbGlkT2lkOwogCX0KQEAgLTExODYsMjAyICsx NTE2LDkzMSBAQCBjb2xsZWN0X212X2F0dG51bXMoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmNsYXVzZXMsIE9pZCB2YXJSZWxpZCwKIH0KIAogLyoKLSAq IFdlJ3JlIGxvb2tpbmcgZm9yIHN0YXRpc3RpY3MgbWF0Y2hpbmcgYXQgbGVh c3QgMiBhdHRyaWJ1dGVzLAotICogcmVmZXJlbmNlZCBpbiB0aGUgY2xhdXNl cyBjb21wYXRpYmxlIHdpdGggbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MuCi0g KiBUaGUgY3VycmVudCBzZWxlY3Rpb24gY3JpdGVyaWEgaXMgdmVyeSBzaW1w bGUgLSB3ZSBjaG9vc2UgdGhlCi0gKiBzdGF0aXN0aWNzIHJlZmVyZW5jaW5n IHRoZSBtb3N0IGF0dHJpYnV0ZXMuCisgKiBTZWxlY3RzIHRoZSBiZXN0IGNv bWJpbmF0aW9uIG9mIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzLCBpbiBhbgor ICogZXhoYXVzdGl2ZSB3YXksIHdoZXJlICdiZXN0JyBtZWFuczoKICAqCi0g KiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RhdGlzdGljcyByZWZlcmVuY2lu ZyB0aGUgc2FtZSBudW1iZXIgb2YKLSAqIGNvbHVtbnMgKGZyb20gdGhlIGNs YXVzZXMpLCB0aGUgb25lIHdpdGggbGVzcyBzb3VyY2UgY29sdW1ucwotICog KGFzIGxpc3RlZCBpbiB0aGUgQUREIFNUQVRJU1RJQ1Mgd2hlbiBjcmVhdGlu ZyB0aGUgc3RhdGlzdGljcykgd2lucy4KLSAqIE90aGVyIHdpc2UgdGhlIGZp cnN0IG9uZSB3aW5zLgorICogKGEpIGNvdmVyaW5nIHRoZSBtb3N0IGF0dHJp YnV0ZXMgKHJlZmVyZW5jZWQgYnkgY2xhdXNlcykKKyAqIChiKSB1c2luZyB0 aGUgbGVhc3QgbnVtYmVyIG9mIG11bHRpdmFyaWF0ZSBzdGF0cworICogKGMp IHVzaW5nIHRoZSBtb3N0IGNvbmRpdGlvbnMgdG8gZXhwbG9pdCBkZXBlbmRl bmN5CiAgKgotICogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGNyaXRlcmlhLCBh bmQgaGFzIHNldmVyYWwgd2Vha25lc3NlczoKKyAqIFRoZXJlIG1heSBiZSBv dGhlciBvcHRpbWFsaXR5IGNyaXRlcmlhLCBub3QgY29uc2lkZXJlZCBpbiB0 aGUgaW5pdGlhbAorICogaW1wbGVtZW50YXRpb24gKG1vcmUgb24gdGhhdCAn d2Vha25lc3Nlcycgc2VjdGlvbikuCiAgKgotICogKGEpIGRvZXMgbm90IGNv bnNpZGVyIHRoZSBhY2N1cmFjeSBvZiB0aGUgc3RhdGlzdGljcworICogVGhp cyBwcmV0dHkgbXVjaCBzcGxpdHMgdGhlIHByb2JhYmlsaXR5IG9mIGNsYXVz ZXMgKGFrYSBzZWxlY3Rpdml0eSkKKyAqIGludG8gYSBzZXF1ZW5jZSBvZiBj b25kaXRpb25hbCBwcm9iYWJpbGl0aWVzLCBsaWtlIHRoaXMKICAqCi0gKiAg ICAgSWYgdGhlcmUgYXJlIHR3byBoaXN0b2dyYW1zIGJ1aWx0IG9uIHRoZSBz YW1lIHNldCBvZiBjb2x1bW5zLAotICogICAgIGJ1dCBvbmUgaGFzIDEwMCBi dWNrZXRzIGFuZCB0aGUgb3RoZXIgb25lIGhhcyAxMDAwIGJ1Y2tldHMgKHRo dXMKLSAqICAgICBsaWtlbHkgcHJvdmlkaW5nIGJldHRlciBlc3RpbWF0ZXMp LCB0aGlzIGlzIG5vdCBjdXJyZW50bHkKLSAqICAgICBjb25zaWRlcmVkLgor ICogICAgUChBLEIsQyxEKSA9IFAoQSxCKSAqIFAoQ3xBLEIpICogUChEfEEs QixDKQogICoKLSAqIChiKSBkb2VzIG5vdCBjb25zaWRlciB0aGUgdHlwZSBv ZiBzdGF0aXN0aWNzCisgKiBhbmQgcmVtb3ZpbmcgdGhlIGF0dHJpYnV0ZXMg bm90IHJlZmVyZW5jZWQgYnkgdGhlIGV4aXN0aW5nIHN0YXRzLAorICogdW5k ZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGVyZSdzIG5vIGRlcGVuZGVuY3kg KG90aGVyd2lzZSB0aGUgREJBCisgKiB3b3VsZCBjcmVhdGUgdGhlIHN0YXRz KS4KICAqCi0gKiAgICAgSWYgdGhlcmUgYXJlIHRocmVlIHN0YXRpc3RpY3Mg LSBvbmUgY29udGFpbmluZyBqdXN0IGEgTUNWIGxpc3QsCi0gKiAgICAgYW5v dGhlciBvbmUgd2l0aCBqdXN0IGEgaGlzdG9ncmFtIGFuZCBhIHRoaXJkIG9u ZSB3aXRoIGJvdGgsCi0gKiAgICAgdGhpcyBpcyBub3QgY29uc2lkZXJlZC4K KyAqIFRoZSBsYXN0IGNyaXRlcmlhIG1lYW5zIHRoYXQgd2hlbiB3ZSBoYXZl IHRoZSBjaG9pY2UgdG8gY29tcHV0ZSBsaWtlCisgKiB0aGlzCiAgKgotICog KGMpIGRvZXMgbm90IGNvbnNpZGVyIHRoZSBudW1iZXIgb2YgY2xhdXNlcwor ICogICAgICBQKEEsQixDLEQpID0gUChBLEIsQykgKiBQKER8QixDKQogICoK LSAqICAgICBBcyBleHBsYWluZWQsIG9ubHkgdGhlIG51bWJlciBvZiByZWZl cmVuY2VkIGF0dHJpYnV0ZXMgY291bnRzLAotICogICAgIHNvIGlmIHRoZXJl IGFyZSBtdWx0aXBsZSBjbGF1c2VzIG9uIGEgc2luZ2xlIGF0dHJpYnV0ZSwg dGhpcwotICogICAgIHN0aWxsIGNvdW50cyBhcyBhIHNpbmdsZSBhdHRyaWJ1 dGUuCisgKiBvciBsaWtlIHRoaXMKICAqCi0gKiAoZCkgZG9lcyBub3QgY29u c2lkZXIgdHlwZSBvZiBjb25kaXRpb24KKyAqICAgICAgUChBLEIsQyxEKSA9 IFAoQSxCLEMpICogUChEfEMpCiAgKgotICogICAgIFNvbWUgY2xhdXNlcyBt YXkgd29yayBiZXR0ZXIgd2l0aCBzb21lIHN0YXRpc3RpY3MgLSBmb3IgZXhh bXBsZQotICogICAgIGVxdWFsaXR5IGNsYXVzZXMgcHJvYmFibHkgd29yayBi ZXR0ZXIgd2l0aCBNQ1YgbGlzdHMgdGhhbiB3aXRoCi0gKiAgICAgaGlzdG9n cmFtcy4gQnV0IElTIFtOT1RdIE5VTEwgY29uZGl0aW9ucyBtYXkgb2Z0ZW4g d29yayBiZXR0ZXIKLSAqICAgICB3aXRoIGhpc3RvZ3JhbXMgKHRoYW5rcyB0 byBOVUxMLWJ1Y2tldHMpLgorICogd2Ugc2hvdWxkIHVzZSB0aGUgZmlyc3Qg b3B0aW9uLCBhcyB0aGF0IGV4cGxvaXRzIG1vcmUgZGVwZW5kZW5jaWVzLgog ICoKLSAqIFNvIGZvciBleGFtcGxlIHdpdGggZml2ZSBXSEVSRSBjb25kaXRp b25zCisgKiBUaGUgb3JkZXIgb2Ygc3RhdGlzdGljcyBpbiB0aGUgc29sdXRp b24gaW1wbGljaXRseSBkZXRlcm1pbmVzIHRoZQorICogb3JkZXIgb2YgZXN0 aW1hdGlvbiBvZiBjbGF1c2VzLCBiZWNhdXNlIGFzIHdlIGFwcGx5IGEgc3Rh dGlzdGljcywKKyAqIHdlIGFsd2F5cyB1c2UgaXQgdG8gZXN0aW1hdGUgYWxs IHRoZSBjbGF1c2VzIGNvdmVyZWQgYnkgaXQgKGFuZAorICogdGhlbiB3ZSB1 c2UgdGhvc2UgY2xhdXNlcyBhcyBjb25kaXRpb25zIGZvciB0aGUgbmV4dCBz dGF0aXN0aWNzKS4KICAqCi0gKiAgICAgV0hFUkUgKGEgPSAxKSBBTkQgKGIg PSAxKSBBTkQgKGMgPSAxKSBBTkQgKGQgPSAxKSBBTkQgKGUgPSAxKQorICog RG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5IGJ1dCB0aHJvdWdoIGNob29zZV9t dl9zdGF0aXN0aWNzKCkuCiAgKgotICogYW5kIHN0YXRpc3RpY3Mgb24gKGEs YiksIChhLGIsZSkgYW5kIChhLGIsYyxkKSwgdGhlIGxhc3Qgb25lIHdpbGwg YmUKLSAqIHNlbGVjdGVkIGFzIGl0IHJlZmVyZW5jZXMgdGhlIG1vc3QgY29s dW1ucy4KICAqCi0gKiBPbmNlIHdlIGhhdmUgc2VsZWN0ZWQgdGhlIG11bHRp dmFyaWF0ZSBzdGF0aXN0aWNzLCB3ZSBzcGxpdCB0aGUgbGlzdAotICogb2Yg Y2xhdXNlcyBpbnRvIHR3byBwYXJ0cyAtIGNvbmRpdGlvbnMgdGhhdCBhcmUg Y29tcGF0aWJsZSB3aXRoIHRoZQotICogc2VsZWN0ZWQgc3RhdHMsIGFuZCBj b25kaXRpb25zIGFyZSBlc3RpbWF0ZWQgdXNpbmcgc2ltcGxlIHN0YXRpc3Rp Y3MuCisgKiBBbGdvcml0aG0KKyAqIC0tLS0tLS0tLQorICogVGhlIGFsZ29y aXRobSBpcyBhIHJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBvZiBiYWNrdHJh Y2tpbmcsIHdpdGgKKyAqIG1heGltdW0gJ2RlcHRoJyBlcXVhbCB0byB0aGUg bnVtYmVyIG9mIG11bHRpLXZhcmlhdGUgc3RhdGlzdGljcworICogYXZhaWxh YmxlIG9uIHRoZSB0YWJsZS4KICAqCi0gKiBGcm9tIHRoZSBleGFtcGxlIGFi b3ZlLCBjb25kaXRpb25zCisgKiBJdCBleHBsb3JlcyBhbGwgdGhlIHBvc3Np YmxlIHBlcm11dGF0aW9ucyBvZiB0aGUgc3RhdHMuCisgKiAKKyAqIFdoZW5l dmVyIGl0IGNvbnNpZGVycyBhZGRpbmcgdGhlIG5leHQgc3RhdGlzdGljcywg dGhlIGNsYXVzZXMgaXQKKyAqIG1hdGNoZXMgYXJlIGRpdmlkZWQgaW50byAn Y29uZGl0aW9ucycgKGNsYXVzZXMgYWxyZWFkeSBtYXRjaGVkIGJ5IGF0Cisg KiBsZWFzdCBvbmUgcHJldmlvdXMgc3RhdGlzdGljcykgYW5kIGNsYXVzZXMg dGhhdCBhcmUgZXN0aW1hdGVkLgogICoKLSAqICAgICAoYSA9IDEpIEFORCAo YiA9IDEpIEFORCAoYyA9IDEpIEFORCAoZCA9IDEpCisgKiBUaGVuIHNldmVy YWwgY2hlY2tzIGFyZSBwZXJmb3JtZWQ6CiAgKgotICogd2lsbCBiZSBlc3Rp bWF0ZWQgdXNpbmcgdGhlIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzIChhLGIs YyxkKSB3aGlsZQotICogdGhlIGxhc3QgY29uZGl0aW9uIChlID0gMSkgd2ls bCBnZXQgZXN0aW1hdGVkIHVzaW5nIHRoZSByZWd1bGFyIG9uZXMuCisgKiAg KGEpIFRoZSBzdGF0aXN0aWNzIGNvdmVycyBhdCBsZWFzdCAyIGNvbHVtbnMs IHJlZmVyZW5jZWQgaW4gdGhlCisgKiAgICAgIGVzdGltYXRlZCBjbGF1c2Vz IChvdGhlcndpc2UgbXVsdGktdmFyaWF0ZSBzdGF0cyBhcmUgdXNlbGVzcyku CiAgKgotICogVGhlcmUgYXJlIHZhcmlvdXMgYWx0ZXJuYXRpdmUgc2VsZWN0 aW9uIGNyaXRlcmlhIChlLmcuIGNvdW50aW5nCi0gKiBjb25kaXRpb25zIGlu c3RlYWQgb2YganVzdCByZWZlcmVuY2VkIGF0dHJpYnV0ZXMpLCBidXQgZXZl bnR1YWxseQotICogdGhlIGJlc3Qgb3B0aW9uIHNob3VsZCBiZSB0byBjb21i aW5lIG11bHRpcGxlIHN0YXRpc3RpY3MuIEJ1dCB0aGF0J3MKLSAqIG11Y2gg aGFyZGVyIHRvIGRvIGNvcnJlY3RseS4KKyAqICAoYikgVGhlIHN0YXRpc3Rp Y3MgY292ZXJzIGF0IGxlYXN0IDEgbmV3IGNvbHVtbiwgaS5lLiBjb2x1bW4g bm90CisgKiAgICAgIHJlZmVmZW5jZWQgYnkgdGhlIGFscmVhZHkgdXNlZCBz dGF0cyAoYW5kIHRoZSBuZXcgY29sdW1uIGhhcworICogICAgICB0byBiZSBy ZWZlcmVuY2VkIGJ5IHRoZSBjbGF1c2VzLCBvZiBjb3VzZSkuIE90aGVyd2lz ZSB0aGUKKyAqICAgICAgc3RhdGlzdGljcyB3b3VsZCBub3QgYWRkIGFueSBu ZXcgaW5mb3JtYXRpb24uCiAgKgotICogVE9ETyBTZWxlY3QgbXVsdGlwbGUg c3RhdGlzdGljcyBhbmQgY29tYmluZSB0aGVtIHdoZW4gY29tcHV0aW5nCi0g KiAgICAgIHRoZSBlc3RpbWF0ZS4KKyAqIFRoZXJlIGFyZSBzb21lIG90aGVy IHNhbml0eSBjaGVja3MgKGUuZy4gdGhhdCB0aGUgc3RhdHMgbXVzdCBub3Qg YmUKKyAqIHVzZWQgdHdpY2UgZXRjLikuCiAgKgotICogVE9ETyBUaGlzIHdp bGwgcHJvYmFibHkgaGF2ZSB0byBjb25zaWRlciBjb21wYXRpYmlsaXR5IG9m IGNsYXVzZXMsCi0gKiAgICAgIGJlY2F1c2UgJ2RlcGVuZGVuY2llcycgd2ls bCBwcm9iYWJseSB3b3JrIG9ubHkgd2l0aCBlcXVhbGl0eQotICogICAgICBj bGF1c2VzLgorICogRmluYWxseSB0aGUgbmV3IHNvbHV0aW9uIGlzIGNvbXBh cmVkIHRvIHRoZSBjdXJyZW50bHkgYmVzdCBvbmUsIGFuZAorICogaWYgaXQn cyBjb25zaWRlcmVkIGJldHRlciwgaXQncyB1c2VkIGluc3RlYWQuCisgKgor ICoKKyAqIFdlYWtuZXNzZXMKKyAqIC0tLS0tLS0tLS0KKyAqIFRoZSBjdXJy ZW50IGltcGxlbWV0YXRpb24gdXNlcyBhIHNvbWV3aGF0IHNpbXBsZSBvcHRp bWFsaXR5IGNyaXRlcmlhLAorICogc3VmZmVyaW5nIGJ5IHRoZSBmb2xsb3dp bmcgd2Vha25lc3Nlcy4KKyAqCisgKiAoYSkgVGhlcmUgbWF5IGJlIG11bHRp cGxlIHNvbHV0aW9ucyB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBjb3ZlcmVk CisgKiAgICAgYXR0cmlidXRlcyBhbmQgbnVtYmVyIG9mIHN0YXRpc3RpY3Mg KGUuZy4gdGhlIHNhbWUgc29sdXRpb24gYnV0CisgKiAgICAgd2l0aCBzdGF0 aXN0aWNzIGluIGEgZGlmZmVyZW50IG9yZGVyKS4gSXQncyB1bmNsZWFyIHdo aWNoIHNvbHV0aW9uCisgKiAgICAgaXMgdGhlIGJlc3Qgb25lIC0gaW4gYSBz ZW5zZSBhbGwgb2YgdGhlbSBhcmUgZXF1YWwuCisgKgorICogVE9ETyBJdCBt aWdodCBiZSBwb3NzaWJsZSB0byBjb21wdXRlIGVzdGltYXRlIGZvciBlYWNo IG9mIHRob3NlCisgKiAgICAgIHNvbHV0aW9ucywgYW5kIHRoZW4gY29tYmlu ZSB0aGVtIHRvIGdldCB0aGUgZmluYWwgZXN0aW1hdGUKKyAqICAgICAgKGUu Zy4gYnkgdXNpbmcgYXZlcmFnZSBvciBtZWRpYW4pLgorICoKKyAqIChiKSBE b2VzIG5vdCBjb25zaWRlciB0aGF0IHNvbWUgdHlwZXMgb2Ygc3RhdHMgYXJl IGEgYmV0dGVyIG1hdGNoIGZvcgorICogICAgIHNvbWUgdHlwZXMgb2YgY2xh dXNlcyAoZS5nLiBNQ1YgbGlzdCBpcyBhIGdvb2QgbWF0Y2ggZm9yIGVxdWFs aXR5CisgKiAgICAgdGhhbiBhIGhpc3RvZ3JhbSkuCisgKgorICogICAgIFhY WCBNYXliZSBNQ1YgaXMgYWxtb3N0IGFsd2F5cyBiZXR0ZXIgLyBtb3JlIGFj Y3VyYXRlPworICoKKyAqICAgICBCdXQgbWF5YmUgdGhpcyBpcyBwb2ludGxl c3MgLSBnZW5lcmFsbHksIGVhY2ggY29sdW1uIGlzIGVpdGhlcgorICogICAg IGEgbGFiZWwgKGl0J3Mgbm90IGltcG9ydGFudCB3aGV0aGVyIGJlY2F1c2Ug b2YgdGhlIGRhdGEgdHlwZSBvcgorICogICAgIGhvdyBpdCdzIHVzZWQpLCBv ciBhIHZhbHVlIHdpdGggb3JkZXJpbmcgdGhhdCBtYWtlcyBzZW5zZS4gU28K KyAqICAgICBlaXRoZXIgYSBNQ1YgbGlzdCBpcyBtb3JlIGFwcHJvcHJpYXRl IChsYWJlbHMpIG9yIGEgaGlzdG9ncmFtCisgKiAgICAgKHZhbHVlcyB3aXRo IG9yZGVyaW5ncykuCisgKgorICogICAgIE5vdyBzdXJlIHdoYXQgdG8gZG8g d2l0aCBzdGF0aXN0aWNzIG9uIGNvbHVtbnMgbWl4aW5nIGNvbHVtbnMgb2YK KyAqICAgICBib3RoIHR5cGVzIC0gbWF5YmUgaXQnZCBiZSBiZWV0ZXIgdG8g aW52ZW50IGEgbmV3IHR5cGUgb2Ygc3RhdHMKKyAqICAgICBjb21iaW5pbmcg TUNWIGxpc3QgYW5kIGhpc3RvZ3JhbSAoa2VlcGluZyBhIHNtYWxsIGhpc3Rv Z3JhbSBmb3IKKyAqICAgICBlYWNoIE1DViBpdGVtLCBhbmQgYSBzZXBhcmF0 ZSBoaXN0b2dyYW0gZm9yIHZhbHVlcyBub3Qgb24gdGhlCisgKiAgICAgTUNW IGxpc3QpLiBCdXQgdGhhdCdzIG5vdCBpbXBsZW1lbnRlZCBhdCB0aGlzIG1v bWVudC4KKyAqCisgKiBUT0RPIFRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2Jh Ymx5IGNvdW50IG51bWJlciBvZiBWYXJzIChub3QganVzdAorICogICAgICBh dHRudW1zKSB3aGVuIGNvbXB1dGluZyB0aGUgJ3Njb3JlJyBvZiBlYWNoIHNv bHV0aW9uLiBDb21wdXRpbmcKKyAqICAgICAgdGhlIHJhdGlvIG9mIChudW0g b2YgYWxsIHZhcnMpIC8gKG51bSBvZiBjb25kaXRpb24gdmFycykgYXMgYQor ICogICAgICBtZWFzdXJlIG9mIGhvdyB3ZWxsIHRoZSBzb2x1dGlvbiB1c2Vz IGNvbmRpdGlvbnMgbWlnaHQgYmUKKyAqICAgICAgdXNlZnVsLgogICovCi1z dGF0aWMgTVZTdGF0aXN0aWNJbmZvICoKLWNob29zZV9tdl9zdGF0aXN0aWNz KExpc3QgKnN0YXRzLCBCaXRtYXBzZXQgKmF0dG51bXMpCitzdGF0aWMgdm9p ZAorY2hvb3NlX212X3N0YXRpc3RpY3NfZXhoYXVzdGl2ZShQbGFubmVySW5m byAqcm9vdCwgaW50IHN0ZXAsCisJCQkJCWludCBubXZzdGF0cywgTVZTdGF0 aXN0aWNJbmZvICptdnN0YXRzLCBCaXRtYXBzZXQgKiogc3RhdHNfYXR0bnVt cywKKwkJCQkJaW50IG5jbGF1c2VzLCBOb2RlICoqIGNsYXVzZXMsIEJpdG1h cHNldCAqKiBjbGF1c2VzX2F0dG51bXMsCisJCQkJCWludCBuY29uZGl0aW9u cywgTm9kZSAqKiBjb25kaXRpb25zLCBCaXRtYXBzZXQgKiogY29uZGl0aW9u c19hdHRudW1zLAorCQkJCQlib29sICpjb3Zlcl9tYXAsIGJvb2wgKmNvbmRp dGlvbl9tYXAsIGludCAqcnVsZWRfb3V0LAorCQkJCQltdl9zb2x1dGlvbl90 ICpjdXJyZW50LCBtdl9zb2x1dGlvbl90ICoqYmVzdCkKIHsKLQlpbnQgaTsK LQlMaXN0Q2VsbCAgICpsYzsKKwlpbnQgaSwgajsKIAotCU1WU3RhdGlzdGlj SW5mbyAqY2hvaWNlID0gTlVMTDsKKwlBc3NlcnQoYmVzdCAhPSBOVUxMKTsK KwlBc3NlcnQoKHN0ZXAgPT0gMCAmJiBjdXJyZW50ID09IE5VTEwpIHx8IChz dGVwID4gMCAmJiBjdXJyZW50ICE9IE5VTEwpKTsKIAotCWludCBjdXJyZW50 X21hdGNoZXMgPSAxOwkJCQkJCS8qIGdvYWwgIzE6IG1heGltaXplICovCi0J aW50IGN1cnJlbnRfZGltcyA9IChNVlNUQVRTX01BWF9ESU1FTlNJT05TKzEp OwkvKiBnb2FsICMyOiBtaW5pbWl6ZSAqLworCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CisKKwlpZiAoY3VycmVudCA9PSBOVUxMKQorCXsKKwkJY3VycmVu dCA9IChtdl9zb2x1dGlvbl90KilwYWxsb2MwKHNpemVvZihtdl9zb2x1dGlv bl90KSk7CisJCWN1cnJlbnQtPnN0YXRzID0gKGludCopcGFsbG9jMChzaXpl b2YoaW50KSpubXZzdGF0cyk7CisJCWN1cnJlbnQtPm5zdGF0cyA9IDA7CisJ CWN1cnJlbnQtPm5jbGF1c2VzID0gMDsKKwkJY3VycmVudC0+bmNvbmRpdGlv bnMgPSAwOworCX0KIAogCS8qCi0JICogV2FsayB0aHJvdWdoIHRoZSBzdGF0 aXN0aWNzIChzaW1wbGUgYXJyYXkgd2l0aCBubXZzdGF0cyBlbGVtZW50cykK LQkgKiBhbmQgZm9yIGVhY2ggb25lIGNvdW50IHRoZSByZWZlcmVuY2VkIGF0 dHJpYnV0ZXMgKGVuY29kZWQgaW4KLQkgKiB0aGUgJ2F0dG51bXMnIGJpdG1h cCkuCisJICogTm93IHRyeSB0byBhcHBseSBlYWNoIHN0YXRpc3RpY3MsIG1h dGNoaW5nIGF0IGxlYXN0IHR3byBhdHRyaWJ1dGVzLAorCSAqIHVubGVzcyBp dCdzIGFscmVhZHkgdXNlZCBpbiBvbmUgb2YgdGhlIHByZXZpb3VzIHN0ZXBz LgogCSAqLwotCWZvcmVhY2ggKGxjLCBzdGF0cykKKwlmb3IgKGkgPSAwOyBp IDwgbm12c3RhdHM7IGkrKykKIAl7Ci0JCU1WU3RhdGlzdGljSW5mbyAqaW5m byA9IChNVlN0YXRpc3RpY0luZm8gKilsZmlyc3QobGMpOworCQlpbnQgYzsK IAotCQkvKiBjb2x1bW5zIG1hdGNoaW5nIHRoaXMgc3RhdGlzdGljcyAqLwot CQlpbnQgbWF0Y2hlcyA9IDA7CisJCWludCBuY292ZXJlZF9jbGF1c2VzID0g MDsJCS8qIG51bWJlciBvZiBjb3ZlcmVkIGNsYXVzZXMgKi8KKwkJaW50IG5j b3ZlcmVkX2NvbmRpdGlvbnMgPSAwOwkvKiBudW1iZXIgb2YgY292ZXJlZCBj b25kaXRpb25zICovCisJCWludCBuYXR0bnVtcyA9IDA7CQkvKiBudW1iZXIg b2YgY292ZXJlZCBhdHRyaWJ1dGVzICovCiAKLQkJaW50MnZlY3RvciAqIGF0 dHJzID0gaW5mby0+c3Rha2V5czsKLQkJaW50CW51bWF0dHJzID0gYXR0cnMt PmRpbTE7CisJCUJpdG1hcHNldCAgKmFsbF9hdHRudW1zID0gTlVMTDsKKwkJ Qml0bWFwc2V0ICAqbmV3X2F0dG51bXMgPSBOVUxMOwogCi0JCS8qIHNraXAg ZGVwZW5kZW5jaWVzLW9ubHkgc3RhdHMgKi8KLQkJaWYgKCEgKGluZm8tPm1j dl9idWlsdCB8fCBpbmZvLT5oaXN0X2J1aWx0KSkKKwkJLyogc2tpcCBzdGF0 aXN0aWNzIHRoYXQgd2VyZSBhbHJlYWR5IHVzZWQgb3IgZWxpbWluYXRlZCAq LworCQlpZiAocnVsZWRfb3V0W2ldICE9IC0xKQogCQkJY29udGludWU7CiAK LQkJLyogY291bnQgY29sdW1ucyBjb3ZlcmVkIGJ5IHRoZSBoaXN0b2dyYW0g Ki8KLQkJZm9yIChpID0gMDsgaSA8IG51bWF0dHJzOyBpKyspCi0JCQlpZiAo Ym1zX2lzX21lbWJlcihhdHRycy0+dmFsdWVzW2ldLCBhdHRudW1zKSkKLQkJ CQltYXRjaGVzKys7Ci0KIAkJLyoKLQkJICogVXNlIHRoaXMgc3RhdGlzdGlj cyB3aGVuIGl0IGltcHJvdmVzIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBvcgot CQkgKiB3aGVuIGl0IG1hdGNoZXMgdGhlIHNhbWUgbnVtYmVyIG9mIGF0dHJp YnV0ZXMgYnV0IGlzIHNtYWxsZXIuCisJCSAqIFNlZSBpZiB3ZSBoYXZlIGNs YXVzZXMgY292ZXJlZCBieSB0aGlzIHN0YXRpc3RpY3MsIGJ1dCBub3QKKwkJ ICogeWV0IGNvdmVyZWQgYnkgYW55IG9mIHRoZSBwcmVjZWRpbmcgb25jZXMu CiAJCSAqLwotCQlpZiAoKG1hdGNoZXMgPiBjdXJyZW50X21hdGNoZXMpIHx8 Ci0JCQkoKG1hdGNoZXMgPT0gY3VycmVudF9tYXRjaGVzKSAmJiAoY3VycmVu dF9kaW1zID4gbnVtYXR0cnMpKSkKKwkJZm9yIChjID0gMDsgYyA8IG5jbGF1 c2VzOyBjKyspCiAJCXsKLQkJCWNob2ljZSA9IGluZm87Ci0JCQljdXJyZW50 X21hdGNoZXMgPSBtYXRjaGVzOwotCQkJY3VycmVudF9kaW1zID0gbnVtYXR0 cnM7Ci0JCX0KLQl9CisJCQlib29sIGNvdmVyZWQgPSBmYWxzZTsKKwkJCUJp dG1hcHNldCAqY2xhdXNlX2F0dG51bXMgPSBjbGF1c2VzX2F0dG51bXNbY107 CisJCQlCaXRtYXBzZXQgKnRtcCA9IE5VTEw7CiAKLQlyZXR1cm4gY2hvaWNl OwotfQorCQkJLyoKKwkJCSAqIElmIHRoaXMgY2xhdXNlIGlzIG5vdCBjb3Zl cmVkIGJ5IHRoaXMgc3RhdHMsIHdlIGNhbid0CisJCQkgKiB1c2UgdGhlIHN0 YXRzIHRvIGVzdGltYXRlIHRoYXQgYXQgYWxsLgorCQkJICovCisJCQlpZiAo ISBjb3Zlcl9tYXBbaSAqIG5jbGF1c2VzICsgY10pCisJCQkJY29udGludWU7 CiAKKwkJCS8qCisJCQkgKiBOb3cgd2Uga25vdyB3ZSdsbCB1c2UgdGhpcyBj bGF1c2UgLSBlaXRoZXIgYXMgYSBjb25kaXRpb24KKwkJCSAqIG9yIGFzIGEg bmV3IGNsYXVzZSAodGhlIGVzdGltYXRlZCBvbmUpLiBTbyBsZXQncyBhZGQg dGhlCisJCQkgKiBhdHRyaWJ1dGVzIHRvIHRoZSBhdHRudW1zIGZyb20gYWxs IHRoZSBjbGF1c2VzIHVzYWJsZSB3aXRoCisJCQkgKiB0aGlzIHN0YXRpc3Rp Y3MuCisJCQkgKi8KKwkJCXRtcCA9IGJtc191bmlvbihhbGxfYXR0bnVtcywg Y2xhdXNlX2F0dG51bXMpOwogCi0vKgotICogVGhpcyBzcGxpdHMgdGhlIGNs YXVzZXMgbGlzdCBpbnRvIHR3byBwYXJ0cyAtIG9uZSBjb250YWluaW5nIGNs YXVzZXMKLSAqIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgdXNpbmcgdGhlIGNo b3NlbiBzdGF0aXN0aWNzLCBhbmQgdGhlIHJlbWFpbmluZwotICogY2xhdXNl cyAoZWl0aGVyIG5vbi1tdmNvbXBhdGlibGUsIG9yIG5vdCByZWxhdGVkIHRv IHRoZSBoaXN0b2dyYW0pLgotICovCi1zdGF0aWMgTGlzdCAqCi1jbGF1c2Vs aXN0X212X3NwbGl0KFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFsSm9pbklu Zm8gKnNqaW5mbywKLQkJCQkJTGlzdCAqY2xhdXNlcywgT2lkIHZhclJlbGlk LCBMaXN0ICoqbXZjbGF1c2VzLAotCQkJCQlNVlN0YXRpc3RpY0luZm8gKm12 c3RhdHMsIGludCB0eXBlcykKLXsKLQlpbnQgaTsKLQlMaXN0Q2VsbCAqbDsK LQlMaXN0CSAqbm9uX212Y2xhdXNlcyA9IE5JTDsKKwkJCS8qIGZyZWUgdGhl IG9sZCBiaXRtYXAgKi8KKwkJCWJtc19mcmVlKGFsbF9hdHRudW1zKTsKKwkJ CWFsbF9hdHRudW1zID0gdG1wOwogCi0JLyogRklYTUUgaXMgdGhlcmUgYSBi ZXR0ZXIgd2F5IHRvIGdldCBpbmZvIG9uIGludDJ2ZWN0b3I/ICovCi0JaW50 MnZlY3RvciAqIGF0dHJzID0gbXZzdGF0cy0+c3Rha2V5czsKLQlpbnQJbnVt YXR0cnMgPSBtdnN0YXRzLT5zdGFrZXlzLT5kaW0xOworCQkJLyogbGV0J3Mg c2VlIGlmIGl0J3MgY292ZXJlZCBieSBhbnkgb2YgdGhlIHByZXZpb3VzIHN0 YXRzICovCisJCQlmb3IgKGogPSAwOyBqIDwgc3RlcDsgaisrKQorCQkJewor CQkJCS8qIGFscmVhZHkgY292ZXJlZCBieSB0aGUgcHJldmlvdXMgc3RhdHMg Ki8KKwkJCQlpZiAoY292ZXJfbWFwW2N1cnJlbnQtPnN0YXRzW2pdICogbmNs YXVzZXMgKyBjXSkKKwkJCQkJY292ZXJlZCA9IHRydWU7CiAKLQlCaXRtYXBz ZXQgKm12YXR0bnVtcyA9IE5VTEw7CisJCQkJaWYgKGNvdmVyZWQpCisJCQkJ CWJyZWFrOworCQkJfQogCi0JLyogYnVpbGQgYml0bWFwIG9mIGF0dHJpYnV0 ZXMgY292ZXJlZCBieSB0aGUgc3RhdHMsIHNvIHdlIGNhbgotCSAqIGRvIGJt c19pc19zdWJzZXQgbGF0ZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtYXR0 cnM7IGkrKykKLQkJbXZhdHRudW1zID0gYm1zX2FkZF9tZW1iZXIobXZhdHRu dW1zLCBhdHRycy0+dmFsdWVzW2ldKTsKKwkJCS8qIGlmIGFscmVhZHkgY292 ZXJlZCwgY29udGludWUgd2l0aCB0aGUgbmV4dCBjbGF1c2UgKi8KKwkJCWlm IChjb3ZlcmVkKQorCQkJeworCQkJCW5jb3ZlcmVkX2NvbmRpdGlvbnMgKz0g MTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAotCS8qIGVyYXNlIHRoZSBsaXN0 IG9mIG12LWNvbXBhdGlibGUgY2xhdXNlcyAqLwotCSptdmNsYXVzZXMgPSBO SUw7CisJCQkvKgorCQkJICogT0ssIHRoaXMgY2xhdXNlIGlzIGNvdmVyZWQg YnkgdGhpcyBzdGF0aXN0aWNzIChhbmQgbm90IGJ5CisJCQkgKiBhbnkgb2Yg dGhlIHByZXZpb3VzIG9uZXMpCisJCQkgKi8KKwkJCW5jb3ZlcmVkX2NsYXVz ZXMgKz0gMTsKIAotCWZvcmVhY2ggKGwsIGNsYXVzZXMpCi0JewotCQlib29s CQltYXRjaCA9IGZhbHNlOwkvKiBieSBkZWZhdWx0IG5vdCBtdi1jb21wYXRp YmxlICovCi0JCUJpdG1hcHNldAkqYXR0bnVtcyA9IE5VTEw7Ci0JCU5vZGUJ ICAgKmNsYXVzZSA9IChOb2RlICopIGxmaXJzdChsKTsKKwkJCS8qIGFkZCB0 aGUgYXR0bnVtcyBpbnRvIGF0dG51bXMgZnJvbSAnbmV3IGNsYXVzZXMnICov CisJCQkvLyBuZXdfYXR0bnVtcyA9IGJtc191bmlvbihuZXdfYXR0bnVtcywg Y2xhdXNlX2F0dG51bXMpOworCQl9CiAKLQkJaWYgKGNsYXVzZV9pc19tdl9j b21wYXRpYmxlKHJvb3QsIGNsYXVzZSwgdmFyUmVsaWQsIE5VTEwsCi0JCQkJ CQkJCQkmYXR0bnVtcywgc2ppbmZvLCB0eXBlcykpCisJCS8qIGNhbid0IGhh dmUgbW9yZSBuZXcgY2xhdXNlcyB0aGFuIG9yaWdpbmFsIGNsYXVzZXMgKi8K KwkJQXNzZXJ0KG5jbGF1c2VzID49IG5jb3ZlcmVkX2NsYXVzZXMpOworCQlB c3NlcnQobmNvdmVyZWRfY2xhdXNlcyA+PSAwKTsJLyogbW9zdGx5IHBhcmFu b2lhICovCisKKwkJbmF0dG51bXMgPSBibXNfbnVtX21lbWJlcnMoYWxsX2F0 dG51bXMpOworCisJCS8qIGZyZWUgYWxsIHRoZSBiaXRtYXBzZXRzIC0gd2Ug ZG9uJ3QgbmVlZCB0aGVtIGFueW1vcmUgKi8KKwkJYm1zX2ZyZWUoYWxsX2F0 dG51bXMpOworCQlibXNfZnJlZShuZXdfYXR0bnVtcyk7CisKKwkJYWxsX2F0 dG51bXMgPSBOVUxMOworCQluZXdfYXR0bnVtcyA9IE5VTEw7CisKKwkJLyoK KwkJICogU2VlIGlmIHdlIGhhdmUgY2xhdXNlcyBjb3ZlcmVkIGJ5IHRoaXMg c3RhdGlzdGljcywgYnV0IG5vdAorCQkgKiB5ZXQgY292ZXJlZCBieSBhbnkg b2YgdGhlIHByZWNlZGluZyBvbmNlcy4KKwkJICovCisJCWZvciAoYyA9IDA7 IGMgPCBuY29uZGl0aW9uczsgYysrKQogCQl7Ci0JCQkvKiBhcmUgYWxsIHRo ZSBhdHRyaWJ1dGVzIHBhcnQgb2YgdGhlIHNlbGVjdGVkIHN0YXRzPyAqLwot CQkJaWYgKGJtc19pc19zdWJzZXQoYXR0bnVtcywgbXZhdHRudW1zKSkKLQkJ CQltYXRjaCA9IHRydWU7CisJCQlCaXRtYXBzZXQgKmNsYXVzZV9hdHRudW1z ID0gY29uZGl0aW9uc19hdHRudW1zW2NdOworCQkJQml0bWFwc2V0ICp0bXAg PSBOVUxMOworCisJCQkvKgorCQkJICogSWYgdGhpcyBjbGF1c2UgaXMgbm90 IGNvdmVyZWQgYnkgdGhpcyBzdGF0cywgd2UgY2FuJ3QKKwkJCSAqIHVzZSB0 aGUgc3RhdHMgdG8gZXN0aW1hdGUgdGhhdCBhdCBhbGwuCisJCQkgKi8KKwkJ CWlmICghIGNvbmRpdGlvbl9tYXBbaSAqIG5jb25kaXRpb25zICsgY10pCisJ CQkJY29udGludWU7CisKKwkJCS8qIGNvdW50IHRoaXMgYXMgYSBjb25kaXRp b24gKi8KKwkJCW5jb3ZlcmVkX2NvbmRpdGlvbnMgKz0gMTsKKworCQkJLyoK KwkJCSAqIE5vdyB3ZSBrbm93IHdlJ2xsIHVzZSB0aGlzIGNsYXVzZSAtIGVp dGhlciBhcyBhIGNvbmRpdGlvbgorCQkJICogb3IgYXMgYSBuZXcgY2xhdXNl ICh0aGUgZXN0aW1hdGVkIG9uZSkuIFNvIGxldCdzIGFkZCB0aGUKKwkJCSAq IGF0dHJpYnV0ZXMgdG8gdGhlIGF0dG51bXMgZnJvbSBhbGwgdGhlIGNsYXVz ZXMgdXNhYmxlIHdpdGgKKwkJCSAqIHRoaXMgc3RhdGlzdGljcy4KKwkJCSAq LworCQkJdG1wID0gYm1zX3VuaW9uKGFsbF9hdHRudW1zLCBjbGF1c2VfYXR0 bnVtcyk7CisKKwkJCS8qIGZyZWUgdGhlIG9sZCBiaXRtYXAgKi8KKwkJCWJt c19mcmVlKGFsbF9hdHRudW1zKTsKKwkJCWFsbF9hdHRudW1zID0gdG1wOwog CQl9CiAKIAkJLyoKLQkJICogVGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBzZWxl Y3RlZCBzdGF0cywgc28gcHV0IGl0IHRvIHRoZSBsaXN0Ci0JCSAqIG9mIG12 LWNvbXBhdGlibGUgY2xhdXNlcy4gT3RoZXJ3aXNlLCBrZWVwIGl0IGluIHRo ZSBsaXN0IG9mCi0JCSAqICdyZWd1bGFyJyBjbGF1c2VzICh0aGF0IG1heSBi ZSBzZWxlY3RlZCBsYXRlcikuCisJCSAqIExldCdzIG1hcmsgdGhlIHN0YXRp c3RpY3MgYXMgJ3J1bGVkIG91dCcgLSBlaXRoZXIgd2UnbGwgdXNlCisJCSAq IGl0IChhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwKSwgb3IgaXQncyBp bmNvbXBhdGlibGUuCiAJCSAqLwotCQlpZiAobWF0Y2gpCi0JCQkqbXZjbGF1 c2VzID0gbGFwcGVuZCgqbXZjbGF1c2VzLCBjbGF1c2UpOwotCQllbHNlCi0J CQlub25fbXZjbGF1c2VzID0gbGFwcGVuZChub25fbXZjbGF1c2VzLCBjbGF1 c2UpOwotCX0KKwkJcnVsZWRfb3V0W2ldID0gc3RlcDsKIAotCS8qCi0JICog UGVyZm9ybSByZWd1bGFyIGVzdGltYXRpb24gdXNpbmcgdGhlIGNsYXVzZXMg aW5jb21wYXRpYmxlCi0JICogd2l0aCB0aGUgY2hvc2VuIGhpc3RvZ3JhbSAo b3IgTVYgc3RhdHMgaW4gZ2VuZXJhbCkuCi0JICovCi0JcmV0dXJuIG5vbl9t dmNsYXVzZXM7CisJCS8qCisJCSAqIFRoZXJlIGFyZSBubyBjbGF1c2VzIHVz YWJsZSB3aXRoIHRoaXMgc3RhdGlzdGljcyAobm90IGFscmVhZHkKKwkJICog Y292ZXJlZCBieSBhb21lIG9mIHRoZSBwcmV2aW91cyBzdGF0cykuCisJCSAq CisJCSAqIFNpbWlsYXJseSwgaWYgdGhlIGNsYXVzZXMgb25seSB1c2UgYSBz aW5nbGUgYXR0cmlidXRlLCB3ZQorCQkgKiBjYW4ndCByZWFsbHkgdXNlIHRo YXQuCisJCSAqLworCQlpZiAoKG5jb3ZlcmVkX2NsYXVzZXMgPT0gMCkgfHwg KG5hdHRudW1zIDwgMikpCisJCQljb250aW51ZTsKIAotfQorCQkvKgorCQkg KiBUT0RPIE5vdCBzdXJlIGlmIGl0J3MgcG9zc2libGUgdG8gYWRkIGEgY2xh dXNlIHJlZmVyZW5jaW5nCisJCSAqICAgICAgb25seSBhdHRyaWJ1dGVzIGFs cmVhZHkgY292ZXJlZCBieSBwcmV2aW91cyBzdGF0cz8KKwkJICogICAgICBJ bnRyb2R1Y2luZyBvbmx5IHNvbWUgbmV3IGRlcGVuZGVuY3ksIG5vdCBhIG5l dworCQkgKiAgICAgIGF0dHJpYnV0ZS4gQ291bGRuJ3QgY29tZSB1cCB3aXRo IGFuIGV4YW1wbGUsIHRob3VnaC4KKwkJICogICAgICBNaWdodCBiZSB3b3J0 aCBhZGRpbmcgc29tZSBhc3NlcnQuCisJCSAqLwogCi0vKgotICogRGV0ZXJt aW5lcyB3aGV0aGVyIHRoZSBjbGF1c2UgaXMgY29tcGF0aWJsZSB3aXRoIG11 bHRpdmFyaWF0ZSBzdGF0cywKLSAqIGFuZCBpZiBpdCBpcywgcmV0dXJucyBz b21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gLSB2YXJubyAoaW5kZXgKLSAq IGludG8gc2ltcGxlX3J0ZV9hcnJheSkgYW5kIGEgYml0bWFwIG9mIGF0dHJp YnV0ZXMuIFRoaXMgaXMgdGhlbgotICogdXNlZCB0byBmZXRjaCByZWxhdGVk IG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzLgotICoKLSAqIEF0IHRoaXMgbW9t ZW50IHdlIG9ubHkgc3VwcG9ydCBiYXNpYyBjb25kaXRpb25zIG9mIHRoZSBm b3JtCi0gKgotICogICAgIHZhcmlhYmxlIE9QIGNvbnN0YW50Ci0gKgotICog d2hlcmUgT1AgaXMgb25lIG9mIFs9LDwsPD0sPj0sPl0gKHdoaWNoIGlzIGhv d2V2ZXIgZGV0ZXJtaW5lZCBieQotICogbG9va2luZyBhdCB0aGUgYXNzb2Np YXRlZCBmdW5jdGlvbiBmb3IgZXN0aW1hdGluZyBzZWxlY3Rpdml0eSwganVz dAotICogbGlrZSB3aXRoIHRoZSBzaW5nbGUtZGltZW5zaW9uYWwgY2FzZSku Ci0gKgotICogVE9ETyBTdXBwb3J0ICdPUiBjbGF1c2VzJyAtIHNob3VsZG4n dCBiZSBhbGwgdGhhdCBkaWZmaWN1bHQgdG8KKwkJLyoKKwkJICogZ290IGEg c3VpdGFibGUgc3RhdGlzdGljcyAtIGxldCdzIHVwZGF0ZSB0aGUgY3VycmVu dCBzb2x1dGlvbiwKKwkJICogbWF5YmUgdXNlIGl0IGFzIHRoZSBiZXN0IHNv bHV0aW9uCisJCSAqLworCQljdXJyZW50LT5uY2xhdXNlcyArPSBuY292ZXJl ZF9jbGF1c2VzOworCQljdXJyZW50LT5uY29uZGl0aW9ucyArPSBuY292ZXJl ZF9jb25kaXRpb25zOworCQljdXJyZW50LT5uc3RhdHMgKz0gMTsKKwkJY3Vy cmVudC0+c3RhdHNbc3RlcF0gPSBpOworCisJCS8qCisJCSAqIFdlIGNhbiBu ZXZlciBjb3ZlciBtb3JlIGNsYXVzZXMsIG9yIHVzZSBtb3JlIHN0YXRzIHRo YXQgd2UKKwkJICogYWN0dWFsbHkgaGF2ZSBhdCB0aGUgYmVnaW5uaW5nLgor CQkgKi8KKwkJQXNzZXJ0KG5jbGF1c2VzID49IGN1cnJlbnQtPm5jbGF1c2Vz KTsKKwkJQXNzZXJ0KG5tdnN0YXRzID49IGN1cnJlbnQtPm5zdGF0cyk7CisJ CUFzc2VydChzdGVwIDwgbm12c3RhdHMpOworCisJCS8qIHdlIGNhbid0IGdl dCBtb3JlIGNvbmRpdGlvbnMgdGhhdCBjbGF1c2VzIGFuZCBjb25kaXRpb25z IGNvbWJpbmVkCisJCSAqCisJCSAqIEZJWE1FIFRoaXMgYXNzZXJ0IGRvZXMg bm90IHdvcmsgYmVjYXVzZSB3ZSBjb3VudCB0aGUgY29uZGl0aW9ucworCQkg KiAgICAgICByZXBlYXRlZGx5IChvbmNlIGZvciBlYWNoIHN0YXRpc3RpY3Mg Y292ZXJpbmcgaXQpLgorCQkgKi8KKwkJLyogQXNzZXJ0KChuY29uZGl0aW9u cyArIG5jbGF1c2VzKSA+PSBjdXJyZW50LT5uY29uZGl0aW9ucyk7ICovCisK KwkJaWYgKCpiZXN0ID09IE5VTEwpCisJCXsKKwkJCSpiZXN0ID0gKG12X3Nv bHV0aW9uX3QqKXBhbGxvYzAoc2l6ZW9mKG12X3NvbHV0aW9uX3QpKTsKKwkJ CSgqYmVzdCktPnN0YXRzID0gKGludCopcGFsbG9jMChzaXplb2YoaW50KSpu bXZzdGF0cyk7CisJCQkoKmJlc3QpLT5uc3RhdHMgPSAwOworCQkJKCpiZXN0 KS0+bmNsYXVzZXMgPSAwOworCQkJKCpiZXN0KS0+bmNvbmRpdGlvbnMgPSAw OworCQl9CisKKwkJLyogc2VlIGlmIGl0J3MgYmV0dGVyIHRoYW4gdGhlIGN1 cnJlbnQgJ2Jlc3QnIHNvbHV0aW9uICovCisJCWlmICgoY3VycmVudC0+bmNs YXVzZXMgPiAoKmJlc3QpLT5uY2xhdXNlcykgfHwKKwkJCSgoY3VycmVudC0+ bmNsYXVzZXMgPT0gKCpiZXN0KS0+bmNsYXVzZXMpICYmCisJCQkoKGN1cnJl bnQtPm5zdGF0cyA+ICgqYmVzdCktPm5zdGF0cykpKSkKKwkJeworCQkJKCpi ZXN0KS0+bnN0YXRzID0gY3VycmVudC0+bnN0YXRzOworCQkJKCpiZXN0KS0+ bmNsYXVzZXMgPSBjdXJyZW50LT5uY2xhdXNlczsKKwkJCSgqYmVzdCktPm5j b25kaXRpb25zID0gY3VycmVudC0+bmNvbmRpdGlvbnM7CisJCQltZW1jcHko KCpiZXN0KS0+c3RhdHMsIGN1cnJlbnQtPnN0YXRzLCBubXZzdGF0cyAqIHNp emVvZihpbnQpKTsKKwkJfQorCisJCS8qCisJCSAqIFRoZSByZWN1cnNpb24g b25seSBtYWtlcyBzZW5zZSBpZiB3ZSBoYXZlbid0IGNvdmVyZWQgYWxsIHRo ZQorCQkgKiBhdHRyaWJ1dGVzICh0aGVuIGFkZGluZyBzdGF0cyBpcyBub3Qg cmVhbGx5IHBvc3NpYmxlKS4KKwkJICovCisJCWlmICgoc3RlcCArIDEpIDwg bm12c3RhdHMpCisJCQljaG9vc2VfbXZfc3RhdGlzdGljc19leGhhdXN0aXZl KHJvb3QsIHN0ZXArMSwKKwkJCQkJCQkJCW5tdnN0YXRzLCBtdnN0YXRzLCBz dGF0c19hdHRudW1zLAorCQkJCQkJCQkJbmNsYXVzZXMsIGNsYXVzZXMsIGNs YXVzZXNfYXR0bnVtcywKKwkJCQkJCQkJCW5jb25kaXRpb25zLCBjb25kaXRp b25zLCBjb25kaXRpb25zX2F0dG51bXMsCisJCQkJCQkJCQljb3Zlcl9tYXAs IGNvbmRpdGlvbl9tYXAsIHJ1bGVkX291dCwKKwkJCQkJCQkJCWN1cnJlbnQs IGJlc3QpOworCisJCS8qIHJlc2V0IHRoZSBsYXN0IHN0ZXAgKi8KKwkJY3Vy cmVudC0+bmNsYXVzZXMgLT0gbmNvdmVyZWRfY2xhdXNlczsKKwkJY3VycmVu dC0+bmNvbmRpdGlvbnMgLT0gbmNvdmVyZWRfY29uZGl0aW9uczsKKwkJY3Vy cmVudC0+bnN0YXRzIC09IDE7CisJCWN1cnJlbnQtPnN0YXRzW3N0ZXBdID0g MDsKKworCQkvKiBtYXJrIHRoZSBzdGF0aXN0aWNzIGFzIHVzYWJsZSBhZ2Fp biAqLworCQlydWxlZF9vdXRbaV0gPSAtMTsKKworCQlBc3NlcnQoY3VycmVu dC0+bmNsYXVzZXMgPj0gMCk7CisJCUFzc2VydChjdXJyZW50LT5uc3RhdHMg Pj0gMCk7CisJfQorCisJLyogcmVzZXQgYWxsIHN0YXRpc3RpY3MgYXMgJ2lu Y29tcGF0aWJsZScgaW4gdGhpcyBzdGVwICovCisJZm9yIChpID0gMDsgaSA8 IG5tdnN0YXRzOyBpKyspCisJCWlmIChydWxlZF9vdXRbaV0gPT0gc3RlcCkK KwkJCXJ1bGVkX291dFtpXSA9IC0xOworCit9CisKKy8qCisgKiBHcmVlZHkg c2VhcmNoIGZvciBhIG11bHRpdmFyaWF0ZSBzb2x1dGlvbiAtIGEgc2VxdWVu Y2Ugb2Ygc3RhdGlzdGljcworICogY292ZXJpbmcgdGhlIGNsYXVzZXMuIFRo aXMgY2hvb3NlcyB0aGUgImJlc3QiIHN0YXRpc3RpY3MgYXQgZWFjaCBzdGVw LAorICogc28gdGhlIHJlc3VsdGluZyBzb2x1dGlvbiBtYXkgbm90IGJlIHRo ZSBiZXN0IHNvbHV0aW9uIGdsb2JhbGx5LCBidXQKKyAqIHRoaXMgcHJvZHVj ZXMgdGhlIHNvbHV0aW9uIGluIG9ubHkgTiBzdGVwcyAod2hlcmUgTiBpcyB0 aGUgbnVtYmVyIG9mCisgKiBzdGF0aXN0aWNzKSwgd2hpbGUgdGhlIGV4aGF1 c3RpdmUgYXBwcm9hY2ggbWF5IGhhdmUgdG8gd2FsayB0aHJvdWdoCisgKiB+ TiEgY29tYmluYXRpb25zIChhbHRob3VnaCBzb21lIG9mIHRob3NlIGFyZSB0 ZXJtaW5hdGVkIGVhcmx5KS4KKyAqCisgKiBTZWUgdGhlIGNvbW1lbnRzIGF0 IGNob29zZV9tdl9zdGF0aXN0aWNzX2V4aGF1c3RpdmUoKSBhcyB0aGlzIGRv ZXMKKyAqIHRoZSBzYW1lIHRoaW5nIChidXQgaW4gYSBkaWZmZXJlbnQgd2F5 KS4KKyAqCisgKiBEb24ndCBjYWxsIHRoaXMgZGlyZWN0bHksIGJ1dCB0aHJv dWdoIGNob29zZV9tdl9zdGF0aXN0aWNzKCkuCisgKgorICogVE9ETyBUaGVy ZSBhcmUgcHJvYmFibHkgb3RoZXIgbWV0cmljcyB3ZSBtaWdodCB1c2UgLSBl LmcuIHVzaW5nCisgKiAgICAgIG51bWJlciBvZiBjb2x1bW5zIChudW1fY29u ZF9jb2x1bW5zIC8gbnVtX2Nvdl9jb2x1bW5zKSwgd2hpY2gKKyAqICAgICAg bWlnaHQgd29yayBiZXR0ZXIgd2l0aCBhIG1peCBvZiBzaW1wbGUgYW5kIGNv bXBsZXggY2xhdXNlcy4KKyAqCisgKiBUT0RPIEFsc28gdGhlIGNob2ljZSBh dCB0aGUgdmVyeSBmaXJzdCBzdGVwIHNob3VsZCBiZSBoYW5kbGVkCisgKiAg ICAgIGluIGEgc3BlY2lhbCB3YXksIGJlY2F1c2UgdGhlcmUgd2lsbCBiZSAw IGNvbmRpdGlvbnMgYXQgdGhhdAorICogICAgICBtb21lbnQsIHNvIHRoZXJl IG5lZWRzIHRvIGJlIHNvbWUgb3RoZXIgY3JpdGVyaWEgLSBlLmcuIHVzaW5n CisgKiAgICAgIHRoZSBzaW1wbGVzdCAob3IgbW9zdCBjb21wbGV4PykgY2xh dXNlIG1pZ2h0IGJlIGEgZ29vZCBpZGVhLgorICoKKyAqIFRPRE8gV2UgbWln aHQgYWxzbyBzZWxlY3QgbXVsdGlwbGUgc3RhdHMgdXNpbmcgZGlmZmVyZW50 IGNyaXRlcmlhLAorICogICAgICBhbmQgYnJhbmNoIHRoZSBzZWFyY2guIFRo aXMgaXMgaG93ZXZlciB0cmlja3ksIGJlY2F1c2UgaWYgd2UKKyAqICAgICAg Y2hvb3NlIGsgc3RhdGlzdGljcyBhdCBlYWNoIHN0ZXAsIHdlIGdldCBrXk4g YnJhbmNoZXMgdG8KKyAqICAgICAgd2FsayB0aHJvdWdoICh3aXRoIE4gc3Rl cHMpLiBUaGF0J3Mgbm90IHJlYWxseSBnb29kIHdpdGgKKyAqICAgICAgbGFy Z2UgbnVtYmVyIG9mIHN0YXRzICh5ZXQgYmV0dGVyIHRoYW4gZXhoYXVzdGl2 ZSBzZWFyY2gpLgorICovCitzdGF0aWMgdm9pZAorY2hvb3NlX212X3N0YXRp c3RpY3NfZ3JlZWR5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgc3RlcCwKKwkJ CQkJaW50IG5tdnN0YXRzLCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMsIEJp dG1hcHNldCAqKiBzdGF0c19hdHRudW1zLAorCQkJCQlpbnQgbmNsYXVzZXMs IE5vZGUgKiogY2xhdXNlcywgQml0bWFwc2V0ICoqIGNsYXVzZXNfYXR0bnVt cywKKwkJCQkJaW50IG5jb25kaXRpb25zLCBOb2RlICoqIGNvbmRpdGlvbnMs IEJpdG1hcHNldCAqKiBjb25kaXRpb25zX2F0dG51bXMsCisJCQkJCWJvb2wg KmNvdmVyX21hcCwgYm9vbCAqY29uZGl0aW9uX21hcCwgaW50ICpydWxlZF9v dXQsCisJCQkJCW12X3NvbHV0aW9uX3QgKmN1cnJlbnQsIG12X3NvbHV0aW9u X3QgKipiZXN0KQoreworCWludCBpLCBqOworCWludCBiZXN0X3N0YXQgPSAt MTsKKwlkb3VibGUgZ2FpbiwgbWF4X2dhaW4gPSAtMS4wOworCisJLyoKKwkg KiBCaXRtYXAgdHJhY2tpbmcgd2hpY2ggY2xhdXNlcyBhcmUgYWxyZWFkeSBj b3ZlcmVkIChieSB0aGUgcHJldmlvdXMKKwkgKiBzdGF0aXN0aWNzKSBhbmQg bWF5IHRodXMgc2VydmUgb25seSBhcyBhIGNvbmRpdGlvbiBpbiB0aGlzIHN0 ZXAuCisJICovCisJYm9vbCAqY292ZXJlZF9jbGF1c2VzID0gKGJvb2wqKXBh bGxvYzAobmNsYXVzZXMpOworCisJLyoKKwkgKiBOdW1iZXIgb2YgY2xhdXNl cyBhbmQgY29sdW1ucyBjb3ZlcmVkIGJ5IGVhY2ggc3RhdGlzdGljcyAtIHRo aXMKKwkgKiBpbmNsdWRlcyBib3RoIGNvbmRpdGlvbnMgYW5kIGNsYXVzZXMg Y292ZXJlZCBieSB0aGUgc3RhdGlzdGljcyBmb3IKKwkgKiB0aGUgZmlyc3Qg dGltZS4gVGhlIG51bWJlciBvZiBjb2x1bW5zIG1heSBjb3VudCBzb21lIGNv bHVtbnMKKwkgKiByZXBlYXRlZGx5IC0gaWYgYSBjb2x1bW4gaXMgc2hhcmVk IGJ5IG11bHRpcGxlIGNsYXVzZXMsIGl0IHdpbGwKKwkgKiBiZSBjb3VudGVk IG9uY2UgZm9yIGVhY2ggY2xhdXNlIChjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0 aWNzKS4KKwkgKiBTbyB3aXRoIHR3byBjbGF1c2VzIFsoYT0xIE9SIGI9Miks KGE8MiBPUiBjPjEpXSB0aGUgY29sdW1uICJhIgorCSAqIHdpbGwgYmUgY291 bnRlZCB0d2ljZSAoaWYgYm90aCBjbGF1c2VzIGFyZSBjb3ZlcmVkKS4KKwkg KgorCSAqIFRoZSB2YWx1ZXMgZm9yIHJlZHVkZWQgc3RhdGlzdGljcyAodGhh dCBjYW4ndCBiZSBhcHBsaWVkKSBhcmUKKwkgKiBub3QgY29tcHV0ZWQsIGJl Y2F1c2UgdGhhdCdkIGJlIHBvaW50bGVzcy4KKwkgKi8KKwlpbnQJKm51bV9j b3ZfY2xhdXNlcwk9IChpbnQqKXBhbGxvYzAoc2l6ZW9mKGludCkgKiBubXZz dGF0cyk7CisJaW50CSpudW1fY292X2NvbHVtbnMJPSAoaW50KilwYWxsb2Mw KHNpemVvZihpbnQpICogbm12c3RhdHMpOworCisJLyoKKwkgKiBTYW1lIGFz IGFib3ZlLCBidXQgdGhpcyBvbmx5IGluY2x1ZGVzIGNsYXVzZXMgdGhhdCBh cmUgYWxyZWFkeQorCSAqIGNvdmVyZWQgYnkgdGhlIHByZXZpb3VzIHN0YXRz IChhbmQgdGhlIGN1cnJlbnQgb25lKS4KKwkgKi8KKwlpbnQJKm51bV9jb25k X2NsYXVzZXMJPSAoaW50KilwYWxsb2MwKHNpemVvZihpbnQpICogbm12c3Rh dHMpOworCWludAkqbnVtX2NvbmRfY29sdW1ucwk9IChpbnQqKXBhbGxvYzAo c2l6ZW9mKGludCkgKiBubXZzdGF0cyk7CisKKwkvKgorCSAqIE51bWJlciBv ZiBhdHRyaWJ1dGVzIGZvciBlYWNoIGNsYXVzZS4KKwkgKgorCSAqIFRPRE8g TWlnaHQgYmUgY29tcHV0ZWQgaW4gY2hvb3NlX212X3N0YXRpc3RpY3MoKSBh bmQgdGhlbiBwYXNzZWQKKwkgKiAgICAgIGhlcmUsIGJ1dCB0aGVuIHRoZSBm dW5jdGlvbiB3b3VsZCBub3QgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUKKwkg KiAgICAgIGFzIF9leGhhdXN0aXZlKCkuCisJICovCisJaW50ICphdHRudW1f Y291bnRzID0gKGludCopcGFsbG9jMChzaXplb2YoaW50KSAqIG5jbGF1c2Vz KTsKKwlpbnQgKmF0dG51bV9jb25kX2NvdW50cyA9IChpbnQqKXBhbGxvYzAo c2l6ZW9mKGludCkgKiBuY29uZGl0aW9ucyk7CisKKwlDSEVDS19GT1JfSU5U RVJSVVBUUygpOworCisJQXNzZXJ0KGJlc3QgIT0gTlVMTCk7CisJQXNzZXJ0 KChzdGVwID09IDAgJiYgY3VycmVudCA9PSBOVUxMKSB8fCAoc3RlcCA+IDAg JiYgY3VycmVudCAhPSBOVUxMKSk7CisKKwkvKiBjb21wdXRlIGF0dHJpYnV0 ZXMgKGNvbHVtbnMpIGZvciBlYWNoIGNsYXVzZSAqLworCWZvciAoaSA9IDA7 IGkgPCBuY2xhdXNlczsgaSsrKQorCQlhdHRudW1fY291bnRzW2ldID0gYm1z X251bV9tZW1iZXJzKGNsYXVzZXNfYXR0bnVtc1tpXSk7CisKKwkvKiBjb21w dXRlIGF0dHJpYnV0ZXMgKGNvbHVtbnMpIGZvciBlYWNoIGNvbmRpdGlvbiAq LworCWZvciAoaSA9IDA7IGkgPCBuY29uZGl0aW9uczsgaSsrKQorCQlhdHRu dW1fY29uZF9jb3VudHNbaV0gPSBibXNfbnVtX21lbWJlcnMoY29uZGl0aW9u c19hdHRudW1zW2ldKTsKKworCS8qIHNlZSB3aGljaCBjbGF1c2VzIGFyZSBh bHJlYWR5IGNvdmVyZWQgYXQgdGhpcyBwb2ludCAoYnkgcHJldmlvdXMgc3Rh dHMpICovCisJZm9yIChpID0gMDsgaSA8IHN0ZXA7IGkrKykKKwkJZm9yIChq ID0gMDsgaiA8IG5jbGF1c2VzOyBqKyspCisJCQljb3ZlcmVkX2NsYXVzZXNb al0gfD0gKGNvdmVyX21hcFtjdXJyZW50LT5zdGF0c1tpXSAqIG5jbGF1c2Vz ICsgal0pOworCisJLyogd2hpY2ggcmVtYWluaW5nIHN0YXRpc3RpY3MgY292 ZXJzIG1vc3QgY2xhdXNlcyAvIHVzZXMgbW9zdCBjb25kaXRpb25zPyAqLwor CWZvciAoaSA9IDA7IGkgPCBubXZzdGF0czsgaSsrKQorCXsKKwkJQml0bWFw c2V0ICphdHRudW1zX2NvdmVyZWQgPSBOVUxMOworCQlCaXRtYXBzZXQgKmF0 dG51bXNfY29uZGl0aW9ucyA9IE5VTEw7CisKKwkJLyogc2tpcCBzdGF0cyB0 aGF0IGFyZSBhbHJlYWR5IHJ1bGVkIG91dCAoZWl0aGVyIHVzZWQgb3IgaW5h cHBsaWNhYmxlKSAqLworCQlpZiAocnVsZWRfb3V0W2ldICE9IC0xKQorCQkJ Y29udGludWU7CisKKwkJLyogY291bnQgY292ZXJlZCBjbGF1c2VzIGFuZCBj b25kaXRpb25zIChmb3IgdGhlIHN0YXRpc3RpY3MpICovCisJCWZvciAoaiA9 IDA7IGogPCBuY2xhdXNlczsgaisrKQorCQl7CisJCQlpZiAoY292ZXJfbWFw W2kgKiBuY2xhdXNlcyArIGpdKQorCQkJeworCQkJCUJpdG1hcHNldCAqYXR0 bnVtc19uZXcKKwkJCQkJPSBibXNfdW5pb24oYXR0bnVtc19jb3ZlcmVkLCBj bGF1c2VzX2F0dG51bXNbal0pOworCisJCQkJLyogZ2V0IHJpZCBvZiB0aGUg b2xkIGJpdG1hcCBhbmQga2VlcCB0aGUgdW5pZmllZCByZXN1bHQgKi8KKwkJ CQlibXNfZnJlZShhdHRudW1zX2NvdmVyZWQpOworCQkJCWF0dG51bXNfY292 ZXJlZCA9IGF0dG51bXNfbmV3OworCisJCQkJbnVtX2Nvdl9jbGF1c2VzW2ld ICs9IDE7CisJCQkJbnVtX2Nvdl9jb2x1bW5zW2ldICs9IGF0dG51bV9jb3Vu dHNbal07CisKKwkJCQkvKiBpcyB0aGUgY2xhdXNlIGFscmVhZHkgY292ZXJl ZCAoaS5lLiBhIGNvbmRpdGlvbik/ICovCisJCQkJaWYgKGNvdmVyZWRfY2xh dXNlc1tqXSkKKwkJCQl7CisJCQkJCW51bV9jb25kX2NsYXVzZXNbaV0gKz0g MTsKKwkJCQkJbnVtX2NvbmRfY29sdW1uc1tpXSArPSBhdHRudW1fY291bnRz W2pdOworCQkJCQlhdHRudW1zX25ldyA9IGJtc191bmlvbihhdHRudW1zX2Nv bmRpdGlvbnMsCisJCQkJCQkJCQkJCWNsYXVzZXNfYXR0bnVtc1tqXSk7CisK KwkJCQkJYm1zX2ZyZWUoYXR0bnVtc19jb25kaXRpb25zKTsKKwkJCQkJYXR0 bnVtc19jb25kaXRpb25zID0gYXR0bnVtc19uZXc7CisJCQkJfQorCQkJfQor CQl9CisKKwkJLyogaWYgYWxsIGNvdmVyZWQgY2xhdXNlcyBhcmUgY292ZXJl ZCBieSBwcmV2IHN0YXRzICh0aHVzIGNvbmRpdGlvbnMpICovCisJCWlmIChu dW1fY292X2NsYXVzZXNbaV0gPT0gbnVtX2NvbmRfY2xhdXNlc1tpXSkKKwkJ CXJ1bGVkX291dFtpXSA9IHN0ZXA7CisKKwkJLyogc2FtZSBpZiB0aGVyZSBh cmUgbm8gbmV3IGF0dHJpYnV0ZXMgKi8KKwkJZWxzZSBpZiAoYm1zX251bV9t ZW1iZXJzKGF0dG51bXNfY29uZGl0aW9ucykgPT0gYm1zX251bV9tZW1iZXJz KGF0dG51bXNfY292ZXJlZCkpCisJCQlydWxlZF9vdXRbaV0gPSBzdGVwOwor CisJCWJtc19mcmVlKGF0dG51bXNfY292ZXJlZCk7CisJCWJtc19mcmVlKGF0 dG51bXNfY29uZGl0aW9ucyk7CisKKwkJLyogaWYgdGhlIHN0YXRpc3RpY3Mg aXMgaW5hcHBsaWNhYmxlLCB0cnkgdGhlIG5leHQgb25lICovCisJCWlmIChy dWxlZF9vdXRbaV0gIT0gLTEpCisJCQljb250aW51ZTsKKworCQkvKiBub3cg bGV0J3Mgd2FsayB0aHJvdWdoIGNvbmRpdGlvbnMgYW5kIGNvdW50IHRoZSBj b3ZlcmVkICovCisJCWZvciAoaiA9IDA7IGogPCBuY29uZGl0aW9uczsgaisr KQorCQl7CisJCQlpZiAoY29uZGl0aW9uX21hcFtpICogbmNvbmRpdGlvbnMg KyBqXSkKKwkJCXsKKwkJCQludW1fY29uZF9jbGF1c2VzW2ldICs9IDE7CisJ CQkJbnVtX2NvbmRfY29sdW1uc1tpXSArPSBhdHRudW1fY29uZF9jb3VudHNb al07CisJCQl9CisJCX0KKworCQkvKiBvdGhlcndpc2Ugc2VlIGlmIHRoaXMg aW1wcm92ZXMgdGhlIGludGVyZXN0aW5nIG1ldHJpY3MgKi8KKwkJZ2FpbiA9 IG51bV9jb25kX2NvbHVtbnNbaV0gLyAoZG91YmxlKW51bV9jb3ZfY29sdW1u c1tpXTsKKworCQlpZiAoZ2FpbiA+IG1heF9nYWluKQorCQl7CisJCQltYXhf Z2FpbiA9IGdhaW47CisJCQliZXN0X3N0YXQgPSBpOworCQl9CisJfQorCisJ LyoKKwkgKiBIYXZlIHdlIGZvdW5kIGEgc3VpdGFibGUgc3RhdGlzdGljcz8g QWRkIGl0IHRvIHRoZSBzb2x1dGlvbiBhbmQKKwkgKiB0cnkgbmV4dCBzdGVw LgorCSAqLworCWlmIChiZXN0X3N0YXQgIT0gLTEpCisJeworCQkvKiBtYXJr IHRoZSBzdGF0aXN0aWNzLCBzbyB0aGF0IHdlIHNraXAgaXQgaW4gbmV4dCBz dGVwcyAqLworCQlydWxlZF9vdXRbYmVzdF9zdGF0XSA9IHN0ZXA7CisKKwkJ LyogYWxsb2NhdGUgY3VycmVudCBzb2x1dGlvbiBpZiBuZWNlc3NhcnkgKi8K KwkJaWYgKGN1cnJlbnQgPT0gTlVMTCkKKwkJeworCQkJY3VycmVudCA9ICht dl9zb2x1dGlvbl90KilwYWxsb2MwKHNpemVvZihtdl9zb2x1dGlvbl90KSk7 CisJCQljdXJyZW50LT5zdGF0cyA9IChpbnQqKXBhbGxvYzAoc2l6ZW9mKGlu dCkqbm12c3RhdHMpOworCQkJY3VycmVudC0+bnN0YXRzID0gMDsKKwkJCWN1 cnJlbnQtPm5jbGF1c2VzID0gMDsKKwkJCWN1cnJlbnQtPm5jb25kaXRpb25z ID0gMDsKKwkJfQorCisJCWN1cnJlbnQtPm5jbGF1c2VzICs9IG51bV9jb3Zf Y2xhdXNlc1tiZXN0X3N0YXRdOworCQljdXJyZW50LT5uY29uZGl0aW9ucyAr PSBudW1fY29uZF9jbGF1c2VzW2Jlc3Rfc3RhdF07CisJCWN1cnJlbnQtPnN0 YXRzW3N0ZXBdID0gYmVzdF9zdGF0OworCQljdXJyZW50LT5uc3RhdHMrKzsK KworCQlpZiAoKmJlc3QgPT0gTlVMTCkKKwkJeworCQkJKCpiZXN0KSA9ICht dl9zb2x1dGlvbl90KilwYWxsb2MwKHNpemVvZihtdl9zb2x1dGlvbl90KSk7 CisJCQkoKmJlc3QpLT5uc3RhdHMgPSBjdXJyZW50LT5uc3RhdHM7CisJCQko KmJlc3QpLT5uY2xhdXNlcyA9IGN1cnJlbnQtPm5jbGF1c2VzOworCQkJKCpi ZXN0KS0+bmNvbmRpdGlvbnMgPSBjdXJyZW50LT5uY29uZGl0aW9uczsKKwor CQkJKCpiZXN0KS0+c3RhdHMgPSAoaW50KilwYWxsb2MwKHNpemVvZihpbnQp Km5tdnN0YXRzKTsKKwkJCW1lbWNweSgoKmJlc3QpLT5zdGF0cywgY3VycmVu dC0+c3RhdHMsIG5tdnN0YXRzICogc2l6ZW9mKGludCkpOworCQl9CisJCWVs c2UKKwkJeworCQkJLyogc2VlIGlmIHRoaXMgaXMgYSBiZXR0ZXIgc29sdXRp b24gKi8KKwkJCWRvdWJsZSBjdXJyZW50X2dhaW4gPSAoZG91YmxlKWN1cnJl bnQtPm5jb25kaXRpb25zIC8gY3VycmVudC0+bmNsYXVzZXM7CisJCQlkb3Vi bGUgYmVzdF9nYWluICAgID0gKGRvdWJsZSkoKmJlc3QpLT5uY29uZGl0aW9u cyAvICgqYmVzdCktPm5jbGF1c2VzOworCisJCQlpZiAoKGN1cnJlbnRfZ2Fp biA+IGJlc3RfZ2FpbikgfHwKKwkJCQkoKGN1cnJlbnRfZ2FpbiA9PSBiZXN0 X2dhaW4pICYmIChjdXJyZW50LT5uc3RhdHMgPCAoKmJlc3QpLT5uc3RhdHMp KSkKKwkJCXsKKwkJCQkoKmJlc3QpLT5uc3RhdHMgPSBjdXJyZW50LT5uc3Rh dHM7CisJCQkJKCpiZXN0KS0+bmNsYXVzZXMgPSBjdXJyZW50LT5uY2xhdXNl czsKKwkJCQkoKmJlc3QpLT5uY29uZGl0aW9ucyA9IGN1cnJlbnQtPm5jb25k aXRpb25zOworCQkJCW1lbWNweSgoKmJlc3QpLT5zdGF0cywgY3VycmVudC0+ c3RhdHMsIG5tdnN0YXRzICogc2l6ZW9mKGludCkpOworCQkJfQorCQl9CisK KwkJLyoKKwkJICogVGhlIHJlY3Vyc2lvbiBvbmx5IG1ha2VzIHNlbnNlIGlm IHdlIGhhdmVuJ3QgY292ZXJlZCBhbGwgdGhlCisJCSAqIGF0dHJpYnV0ZXMg KHRoZW4gYWRkaW5nIHN0YXRzIGlzIG5vdCByZWFsbHkgcG9zc2libGUpLgor CQkqLworCQlpZiAoKHN0ZXAgKyAxKSA8IG5tdnN0YXRzKQorCQkJY2hvb3Nl X212X3N0YXRpc3RpY3NfZ3JlZWR5KHJvb3QsIHN0ZXArMSwKKwkJCQkJCQkJ CW5tdnN0YXRzLCBtdnN0YXRzLCBzdGF0c19hdHRudW1zLAorCQkJCQkJCQkJ bmNsYXVzZXMsIGNsYXVzZXMsIGNsYXVzZXNfYXR0bnVtcywKKwkJCQkJCQkJ CW5jb25kaXRpb25zLCBjb25kaXRpb25zLCBjb25kaXRpb25zX2F0dG51bXMs CisJCQkJCQkJCQljb3Zlcl9tYXAsIGNvbmRpdGlvbl9tYXAsIHJ1bGVkX291 dCwKKwkJCQkJCQkJCWN1cnJlbnQsIGJlc3QpOworCisJCS8qIHJlc2V0IHRo ZSBsYXN0IHN0ZXAgKi8KKwkJY3VycmVudC0+bmNsYXVzZXMgLT0gbnVtX2Nv dl9jbGF1c2VzW2Jlc3Rfc3RhdF07CisJCWN1cnJlbnQtPm5jb25kaXRpb25z IC09IG51bV9jb25kX2NsYXVzZXNbYmVzdF9zdGF0XTsKKwkJY3VycmVudC0+ bnN0YXRzIC09IDE7CisJCWN1cnJlbnQtPnN0YXRzW3N0ZXBdID0gMDsKKwor CQkvKiBtYXJrIHRoZSBzdGF0aXN0aWNzIGFzIHVzYWJsZSBhZ2FpbiAqLwor CQlydWxlZF9vdXRbYmVzdF9zdGF0XSA9IC0xOworCX0KKworCS8qIHJlc2V0 IGFsbCBzdGF0aXN0aWNzIGVsaW1pbmF0ZWQgaW4gdGhpcyBzdGVwICovCisJ Zm9yIChpID0gMDsgaSA8IG5tdnN0YXRzOyBpKyspCisJCWlmIChydWxlZF9v dXRbaV0gPT0gc3RlcCkKKwkJCXJ1bGVkX291dFtpXSA9IC0xOworCisJLyog ZnJlZSBldmVyeXRoaW5nIGFsbG9jYXRlZCBpbiB0aGlzIHN0ZXAgKi8KKwlw ZnJlZShjb3ZlcmVkX2NsYXVzZXMpOworCXBmcmVlKGF0dG51bV9jb3VudHMp OworCXBmcmVlKG51bV9jb3ZfY2xhdXNlcyk7CisJcGZyZWUobnVtX2Nvdl9j b2x1bW5zKTsKKwlwZnJlZShudW1fY29uZF9jbGF1c2VzKTsKKwlwZnJlZShu dW1fY29uZF9jb2x1bW5zKTsKK30KKworLyoKKyAqIENob29zZXMgdGhlIGNv bWJpbmF0aW9uIG9mIHN0YXRpc3RpY3MsIG9wdGltYWwgZm9yIGVzdGltYXRp b24gb2YKKyAqIGEgcGFydGljdWxhciBjbGF1c2UgbGlzdC4KKyAqCisgKiBU aGlzIG9ubHkgaGFuZGxlcyBhICdwcmVwYXJhdGlvbicgc2hhcmVkIGJ5IHRo ZSBleGhhdXN0aXZlIGFuZCBncmVlZHkKKyAqIGltcGxlbWVudGF0aW9ucyAo c2VlIHRoZSBwcmV2aW91cyBtZXRob2RzKSwgbW9zdGx5IHRyeWluZyB0byBy ZWR1Y2UKKyAqIHRoZSBzaXplIG9mIHRoZSBwcm9ibGVtIChlbGltaW5hdGUg Y2xhdXNlcy9zdGF0aXN0aWNzIHRoYXQgY2FuJ3QgYmUKKyAqIHJlYWxseSB1 c2VkIGluIHRoZSBzb2x1dGlvbikuCisgKgorICogSXQgYWxzbyBwcmVjb21w dXRlcyBiaXRtYXBzIGZvciBhdHRyaWJ1dGVzIGNvdmVyZWQgYnkgY2xhdXNl cyBhbmQKKyAqIHN0YXRpc3RpY3MsIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0 byBkbyB0aGF0IG92ZXIgYW5kIG92ZXIgaW4gdGhlCisgKiBhY3R1YWwgb3B0 aW1pemF0aW9ucyAoYXMgaXQncyBib3RoIENQVSBhbmQgbWVtb3J5IGludGVu c2l2ZSkuCisgKgorICogVE9ETyBUaGlzIHdpbGwgcHJvYmFibHkgaGF2ZSB0 byBjb25zaWRlciBjb21wYXRpYmlsaXR5IG9mIGNsYXVzZXMsCisgKiAgICAg IGJlY2F1c2UgJ2RlcGVuZGVuY2llcycgd2lsbCBwcm9iYWJseSB3b3JrIG9u bHkgd2l0aCBlcXVhbGl0eQorICogICAgICBjbGF1c2VzLgorICoKKyAqIFRP RE8gQW5vdGhlciB3YXkgdG8gbWFrZSB0aGUgb3B0aW1pemF0aW9uIHByb2Js ZW1zIHNtYWxsZXIgbWlnaHQKKyAqICAgICAgYmUgc3BsaXR0aW5nIHRoZSBz dGF0aXN0aWNzIGludG8gc2V2ZXJhbCBkaXNqb2ludCBzdWJzZXRzLCBpLmUu CisgKiAgICAgIGlmIHdlIGNhbiBzcGxpdCB0aGUgZ3JhcGggb2Ygc3RhdGlz dGljcyAoYWZ0ZXIgdGhlIGVsaW1pbmF0aW9uKQorICogICAgICBpbnRvIG11 bHRpcGxlIGNvbXBvbmVudHMgKHNvIHRoYXQgc3RhdHMgaW4gZGlmZmVyZW50 IGNvbXBvbmVudHMKKyAqICAgICAgc2hhcmUgbm8gYXR0cmlidXRlcyksIHdl IGNhbiBkbyB0aGUgb3B0aW1pemF0aW9uIGZvciBlYWNoCisgKiAgICAgIGNv bXBvbmVudCBzZXBhcmF0ZWx5LgorICoKKyAqIFRPRE8gSWYgd2UgY291bGQg Y29tcHV0ZSB3aGF0IGlzIGEgInBlcmZlY3Qgc29sdXRpb24iIG1heWJlIHdl IGNvdWxkCisgKiAgICAgIHRlcm1pbmF0ZSB0aGUgc2VhcmNoIGFmdGVyIHJl YWNoaW5nIH45MCUgb2YgaXQ/IFNheSwgaWYgd2Uga25ldworICogICAgICB0 aGF0IHdlIGNhbiBjb3ZlciAxMCBjbGF1c2VzIGFuZCByZXVzZSA4IGRlcGVu ZGVuY2llcywgbWF5YmUKKyAqICAgICAgY292ZXJpbmcgOSBjbGF1c2VzIGFu ZCA3IGRlcGVuZGVuY2llcyB3b3VsZCBiZSBPSz8KKyAqLworc3RhdGljIExp c3QqCitjaG9vc2VfbXZfc3RhdGlzdGljcyhQbGFubmVySW5mbyAqcm9vdCwg TGlzdCAqc3RhdHMsCisJCQkJCSBMaXN0ICpjbGF1c2VzLCBMaXN0ICpjb25k aXRpb25zLAorCQkJCQkgT2lkIHZhclJlbGlkLCBTcGVjaWFsSm9pbkluZm8g KnNqaW5mbykKK3sKKwlpbnQgaTsKKwltdl9zb2x1dGlvbl90ICpiZXN0ID0g TlVMTDsKKwlMaXN0ICpyZXN1bHQgPSBOSUw7CisKKwlpbnQgbm12c3RhdHM7 CisJTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzOworCisJLyogd2Ugb25seSB3 b3JrIHdpdGggTUNWIGxpc3RzIGFuZCBoaXN0b2dyYW1zIGhlcmUgKi8KKwlp bnQgdHlwZSA9IChNVl9DTEFVU0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQ RV9ISVNUKTsKKworCWJvb2wgICAqY2xhdXNlX2NvdmVyX21hcCA9IE5VTEws CisJCSAgICpjb25kaXRpb25fY292ZXJfbWFwID0gTlVMTDsKKwlpbnQJICAg KnJ1bGVkX291dCA9IE5VTEw7CisKKwkvKiBidWlsZCBiaXRtYXBzZXRzIGZv ciBhbGwgc3RhdHMgYW5kIGNsYXVzZXMgKi8KKwlCaXRtYXBzZXQgKipzdGF0 c19hdHRudW1zOworCUJpdG1hcHNldCAqKmNsYXVzZXNfYXR0bnVtczsKKwlC aXRtYXBzZXQgKipjb25kaXRpb25zX2F0dG51bXM7CisKKwlpbnQgbmNsYXVz ZXMsIG5jb25kaXRpb25zOworCU5vZGUgKiogY2xhdXNlc19hcnJheTsKKwlO b2RlICoqIGNvbmRpdGlvbnNfYXJyYXk7CisKKwkvKiBjb3B5IGxpc3RzLCBz byB0aGF0IHdlIGNhbiBmcmVlIHRoZW0gZHVyaW5nIGVsaW1pbmF0aW9uIGVh c2lseSAqLworCWNsYXVzZXMgPSBsaXN0X2NvcHkoY2xhdXNlcyk7CisJY29u ZGl0aW9ucyA9IGxpc3RfY29weShjb25kaXRpb25zKTsKKwlzdGF0cyA9IGxp c3RfY29weShzdGF0cyk7CisKKwkvKgorCSAqIFJlZHVjZSB0aGUgb3B0aW1p emF0aW9uIHByb2JsZW0gc2l6ZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCSAq CisJICogRWxpbWluYXRlIGNsYXVzZXMgYW5kIGNvbmRpdGlvbnMgbm90IGNv dmVyZWQgYnkgYW55IHN0YXRpc3RpY3MsCisJICogb3Igc3RhdGlzdGljcyBu b3QgbWF0Y2hpbmcgYXQgbGVhc3QgdHdvIGF0dHJpYnV0ZXMgKG9uZSBvZiB0 aGVtCisJICogaGFzIHRvIGJlIGluIGEgcmVndWxhciBjbGF1c2UpLgorCSAq CisJICogSXQncyBwb3NzaWJsZSB0aGF0IHJlbW92aW5nIGEgc3RhdGlzdGlj cyBpbiBvbmUgaXRlcmF0aW9uCisJICogZWxpbWluYXRlcyBjbGF1c2UgaW4g dGhlIG5leHQgb25lLCBzbyB3ZSdsbCByZXBlYXQgdGhpcyB1bnRpbCB3ZQor CSAqIGVsaW1pbmF0ZSBubyBjbGF1c2VzL3N0YXRzIGluIHRoYXQgaXRlcmF0 aW9uLgorCSAqCisJICogVGhpcyBjYW4gb25seSBoYXBwZW4gYWZ0ZXIgZWxp bWluYXRpbmcgYSBzdGF0aXN0aWNzIC0gY2xhdXNlcyBhcmUKKwkgKiBlbGlt aW5hdGVkIGZpcnN0LCBzbyBzdGF0aXN0aWNzIGFsd2F5cyByZWZsZWN0IHRo YXQuCisJICovCisJd2hpbGUgKHRydWUpCisJeworCQlMaXN0CSAgICp0bXA7 CisKKwkJQml0bWFwc2V0ICpjb21wYXRpYmxlX2F0dG51bXMgPSBOVUxMOwor CQlCaXRtYXBzZXQgKmNvbmRpdGlvbl9hdHRudW1zICA9IE5VTEw7CisJCUJp dG1hcHNldCAqYWxsX2F0dG51bXMgPSBOVUxMOworCisJCS8qCisJCSAqIENs YXVzZXMKKwkJICoKKwkJICogV2FsayB0aHJvdWdoIGNsYXVzZXMgYW5kIGtl ZXAgb25seSB0aG9zZSBjb3ZlcmVkIGJ5IGF0IGxlYXN0CisJCSAqIG9uZSBv ZiB0aGUgc3RhdGlzdGljcyB3ZSBzdGlsbCBoYXZlLiBXZSdsbCBhbHNvIGtl ZXAgaW5mbworCQkgKiBhYm91dCBhdHRudW1zIGluIGNsYXVzZXMgKHdpdGhv dXQgY29uZGl0aW9ucykgc28gdGhhdCB3ZSBjYW4KKwkJICogaWdub3JlIHN0 YXRzIGNvdmVyaW5nIGp1c3QgY29uZGl0aW9ucyAod2hpY2ggaXMgcG9pbnRs ZXNzKS4KKwkJICovCisJCXRtcCA9IGZpbHRlcl9jbGF1c2VzKHJvb3QsIHZh clJlbGlkLCBzamluZm8sIHR5cGUsCisJCQkJCQkJIHN0YXRzLCBjbGF1c2Vz LCAmY29tcGF0aWJsZV9hdHRudW1zKTsKKworCQkvKiBkaXNjYXJkIHRoZSBv cmlnaW5hbCBsaXN0ICovCisJCWxpc3RfZnJlZShjbGF1c2VzKTsKKwkJY2xh dXNlcyA9IHRtcDsKKworCQkvKgorCQkgKiBDb25kaXRpb25zCisJCSAqCisJ CSAqIFdhbGsgdGhyb3VnaCBjbGF1c2VzIGFuZCBrZWVwIG9ubHkgdGhvc2Ug Y292ZXJlZCBieSBhdCBsZWFzdAorCQkgKiBvbmUgb2YgdGhlIHN0YXRpc3Rp Y3Mgd2Ugc3RpbGwgaGF2ZS4gQWxzbywgY29sbGVjdCBiaXRtYXAgb2YKKwkJ ICogYXR0cmlidXRlcyBzbyB0aGF0IHdlIGNhbiBtYWtlIHN1cmUgd2UgYWRk IGF0IGxlYXN0IG9uZSBuZXcKKwkJICogYXR0cmlidXRlIChieSBjb21wYXJp bmcgd2l0aCBjbGF1c2VzKS4KKwkJICovCisJCWlmIChjb25kaXRpb25zICE9 IE5JTCkKKwkJeworCQkJdG1wID0gZmlsdGVyX2NsYXVzZXMocm9vdCwgdmFy UmVsaWQsIHNqaW5mbywgdHlwZSwKKwkJCQkJCQkJIHN0YXRzLCBjb25kaXRp b25zLCAmY29uZGl0aW9uX2F0dG51bXMpOworCisJCQkvKiBkaXNjYXJkIHRo ZSBvcmlnaW5hbCBsaXN0ICovCisJCQlsaXN0X2ZyZWUoY29uZGl0aW9ucyk7 CisJCQljb25kaXRpb25zID0gdG1wOworCQl9CisKKwkJLyogZ2V0IGEgdW5p b24gb2YgYXR0bnVtcyAoZnJvbSBjb25kaXRpb25zIGFuZCBuZXcgY2xhdXNl cykgKi8KKwkJYWxsX2F0dG51bXMgPSBibXNfdW5pb24oY29tcGF0aWJsZV9h dHRudW1zLCBjb25kaXRpb25fYXR0bnVtcyk7CisKKwkJLyoKKwkJICogU3Rh dGlzaXRpY3MKKwkJICoKKwkJICogV2FsayB0aHJvdWdoIHN0YXRpc3RpY3Mg YW5kIG9ubHkga2VlcCB0aG9zZSBjb3ZlcmluZyBhdCBsZWFzdAorCQkgKiBv bmUgbmV3IGF0dHJpYnV0ZSAoZXhjbHVkaW5nIGNvbmRpdGlvbnMpIGFuZCBh dCB0d28gYXR0cmlidXRlcworCQkgKiBpbiBib3RoIGNsYXVzZXMgYW5kIGNv bmRpdGlvbnMuCisJCSAqLworCQl0bXAgPSBmaWx0ZXJfc3RhdHMoc3RhdHMs IGNvbXBhdGlibGVfYXR0bnVtcywgYWxsX2F0dG51bXMpOworCisJCS8qIGlm IHdlJ3ZlIG5vdCBlbGltaW5hdGVkIGFueXRoaW5nLCB0ZXJtaW5hdGUgKi8K KwkJaWYgKGxpc3RfbGVuZ3RoKHN0YXRzKSA9PSBsaXN0X2xlbmd0aCh0bXAp KQorCQkJYnJlYWs7CisKKwkJLyogd29yayBvbmx5IHdpdGggZmlsdGVyZWQg c3RhdGlzdGljcyBmcm9tIG5vdyAqLworCQlsaXN0X2ZyZWUoc3RhdHMpOwor CQlzdGF0cyA9IHRtcDsKKwl9CisKKwkvKiBvbmx5IGRvIHRoZSBvcHRpbWl6 YXRpb24gaWYgd2UgaGF2ZSBjbGF1c2VzL3N0YXRpc3RpY3MgKi8KKwlpZiAo KGxpc3RfbGVuZ3RoKHN0YXRzKSA9PSAwKSB8fCAobGlzdF9sZW5ndGgoY2xh dXNlcykgPT0gMCkpCisJCXJldHVybiBOVUxMOworCisJLyogcmVtb3ZlIHJl ZHVuZGFudCBzdGF0cyAoc3RhdHMgY292ZXJlZCBieSBhbm90aGVyIHN0YXRz KSAqLworCXN0YXRzID0gZmlsdGVyX3JlZHVuZGFudF9zdGF0cyhzdGF0cywg Y2xhdXNlcywgY29uZGl0aW9ucyk7CisKKwkvKgorCSAqIFRPRE8gV2Ugc2hv dWxkIHNvcnQgdGhlIHN0YXRzIHRvIG1ha2UgdGhlIG9yZGVyIGRldGVybWlu aXN0aWMsCisJICogICAgICBvdGhlcndpc2Ugd2UgbWF5IGdldCBkaWZmZXJl bnQgZXN0aW1hdGVzIG9uIGRpZmZlcmVudAorCSAqICAgICAgZXhlY3V0aW9u cyAtIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSAiZXF1YWxseSBnb29kIiBzb2x1 dGlvbnMsCisJICogICAgICB3ZSdsbCBrZWVwIHRoZSBmaXJzdCBzb2x1dGlv biB3ZSBzZWUuCisJICoKKwkgKiAgICAgIFNvcnRpbmcgYnkgT0lEIHByb2Jh Ymx5IGlzIG5vdCB0aGUgcmlnaHQgc29sdXRpb24gdGhvdWdoLAorCSAqICAg ICAgYmVjYXVzZSB3ZSdkIGxpa2UgaXQgdG8gYmUgc29tZWhvdyByZXByb2R1 Y2libGUsCisJICogICAgICBpcnJlc3BlY3RlZGx5IG9mIHRoZSBvcmRlciBv ZiBBREQgU1RBVElTVElDUyBjb21tYW5kcy4KKwkgKiAgICAgIFNvIG1heWJl IHN0YXRrZXlzPworCSAqLworCW12c3RhdHMgPSBtYWtlX3N0YXRzX2FycmF5 KHN0YXRzLCAmbm12c3RhdHMpOworCXN0YXRzX2F0dG51bXMgPSBtYWtlX3N0 YXRzX2F0dG51bXMobXZzdGF0cywgbm12c3RhdHMpOworCisJLyogY29sbGVj dCBjbGF1c2VzIGFuIGJpdG1hcCBvZiBhdHRudW1zICovCisJY2xhdXNlc19h cnJheSA9IG1ha2VfY2xhdXNlc19hcnJheShjbGF1c2VzLCAmbmNsYXVzZXMp OworCWNsYXVzZXNfYXR0bnVtcyA9IG1ha2VfY2xhdXNlc19hdHRudW1zKHJv b3QsIHZhclJlbGlkLCBzamluZm8sIHR5cGUsCisJCQkJCQkJCQkJICAgY2xh dXNlc19hcnJheSwgbmNsYXVzZXMpOworCisJLyogY29sbGVjdCBjb25kaXRp b25zIGFuZCBiaXRtYXAgb2YgYXR0bnVtcyAqLworCWNvbmRpdGlvbnNfYXJy YXkgPSBtYWtlX2NsYXVzZXNfYXJyYXkoY29uZGl0aW9ucywgJm5jb25kaXRp b25zKTsKKwljb25kaXRpb25zX2F0dG51bXMgPSBtYWtlX2NsYXVzZXNfYXR0 bnVtcyhyb290LCB2YXJSZWxpZCwgc2ppbmZvLCB0eXBlLAorCQkJCQkJCQkJ CSAgIGNvbmRpdGlvbnNfYXJyYXksIG5jb25kaXRpb25zKTsKKworCS8qCisJ ICogQnVpbGQgYml0bWFwcyB3aXRoIGluZm8gYWJvdXQgd2hpY2ggY2xhdXNl cy9jb25kaXRpb25zIGFyZQorCSAqIGNvdmVyZWQgYnkgZWFjaCBzdGF0aXN0 aWNzIChzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY2FsbCB0aGUKKwkgKiBi bXNfaXNfc3Vic2V0IG92ZXIgYW5kIG92ZXIgYWdhaW4pLgorCSAqLworCWNs YXVzZV9jb3Zlcl9tYXAgPSBtYWtlX2NvdmVyX21hcChzdGF0c19hdHRudW1z LCBubXZzdGF0cywKKwkJCQkJCQkJCSAgY2xhdXNlc19hdHRudW1zLCBuY2xh dXNlcyk7CisKKwljb25kaXRpb25fY292ZXJfbWFwCT0gbWFrZV9jb3Zlcl9t YXAoc3RhdHNfYXR0bnVtcywgbm12c3RhdHMsCisJCQkJCQkJCQkJIGNvbmRp dGlvbnNfYXR0bnVtcywgbmNvbmRpdGlvbnMpOworCisJcnVsZWRfb3V0ID0g IChpbnQqKXBhbGxvYzAobm12c3RhdHMgKiBzaXplb2YoaW50KSk7CisKKwkv KiBubyBzdGF0cyBhcmUgcnVsZWQgb3V0IGJ5IGRlZmF1bHQgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbm12c3RhdHM7IGkrKykKKwkJcnVsZWRfb3V0W2ldID0g LTE7CisKKwkvKiBkbyB0aGUgb3B0aW1pemF0aW9uIGl0c2VsZiAqLworCWlm IChtdnN0YXRfc2VhcmNoX3R5cGUgPT0gTVZTVEFUX1NFQVJDSF9FWEhBVVNU SVZFKQorCQljaG9vc2VfbXZfc3RhdGlzdGljc19leGhhdXN0aXZlKHJvb3Qs IDAsCisJCQkJCQkJCQkgICBubXZzdGF0cywgbXZzdGF0cywgc3RhdHNfYXR0 bnVtcywKKwkJCQkJCQkJCSAgIG5jbGF1c2VzLCBjbGF1c2VzX2FycmF5LCBj bGF1c2VzX2F0dG51bXMsCisJCQkJCQkJCQkgICBuY29uZGl0aW9ucywgY29u ZGl0aW9uc19hcnJheSwgY29uZGl0aW9uc19hdHRudW1zLAorCQkJCQkJCQkJ ICAgY2xhdXNlX2NvdmVyX21hcCwgY29uZGl0aW9uX2NvdmVyX21hcCwKKwkJ CQkJCQkJCSAgIHJ1bGVkX291dCwgTlVMTCwgJmJlc3QpOworCWVsc2UKKwkJ Y2hvb3NlX212X3N0YXRpc3RpY3NfZ3JlZWR5KHJvb3QsIDAsCisJCQkJCQkJ CQkgICBubXZzdGF0cywgbXZzdGF0cywgc3RhdHNfYXR0bnVtcywKKwkJCQkJ CQkJCSAgIG5jbGF1c2VzLCBjbGF1c2VzX2FycmF5LCBjbGF1c2VzX2F0dG51 bXMsCisJCQkJCQkJCQkgICBuY29uZGl0aW9ucywgY29uZGl0aW9uc19hcnJh eSwgY29uZGl0aW9uc19hdHRudW1zLAorCQkJCQkJCQkJICAgY2xhdXNlX2Nv dmVyX21hcCwgY29uZGl0aW9uX2NvdmVyX21hcCwKKwkJCQkJCQkJCSAgIHJ1 bGVkX291dCwgTlVMTCwgJmJlc3QpOworCisJLyogY3JlYXRlIGEgbGlzdCBv ZiBzdGF0aXN0aWNzIGZyb20gdGhlIGFycmF5ICovCisJaWYgKGJlc3QgIT0g TlVMTCkKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBiZXN0LT5uc3RhdHM7IGkr KykKKwkJeworCQkJTVZTdGF0aXN0aWNJbmZvICppbmZvID0gbWFrZU5vZGUo TVZTdGF0aXN0aWNJbmZvKTsKKwkJCW1lbWNweShpbmZvLCAmbXZzdGF0c1ti ZXN0LT5zdGF0c1tpXV0sIHNpemVvZihNVlN0YXRpc3RpY0luZm8pKTsKKwkJ CXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpbmZvKTsKKwkJfQorCQlwZnJl ZShiZXN0KTsKKwl9CisKKwkvKiBjbGVhbnVwIChtYXliZSBsZWF2ZSBpdCB1 cCB0byB0aGUgbWVtb3J5IGNvbnRleHQ/KSAqLworCWZvciAoaSA9IDA7IGkg PCBubXZzdGF0czsgaSsrKQorCQlibXNfZnJlZShzdGF0c19hdHRudW1zW2ld KTsKKworCWZvciAoaSA9IDA7IGkgPCBuY2xhdXNlczsgaSsrKQorCQlibXNf ZnJlZShjbGF1c2VzX2F0dG51bXNbaV0pOworCisJZm9yIChpID0gMDsgaSA8 IG5jb25kaXRpb25zOyBpKyspCisJCWJtc19mcmVlKGNvbmRpdGlvbnNfYXR0 bnVtc1tpXSk7CisKKwlwZnJlZShzdGF0c19hdHRudW1zKTsKKwlwZnJlZShj bGF1c2VzX2F0dG51bXMpOworCXBmcmVlKGNvbmRpdGlvbnNfYXR0bnVtcyk7 CisKKwlwZnJlZShjbGF1c2VzX2FycmF5KTsKKwlwZnJlZShjb25kaXRpb25z X2FycmF5KTsKKwlwZnJlZShjbGF1c2VfY292ZXJfbWFwKTsKKwlwZnJlZShj b25kaXRpb25fY292ZXJfbWFwKTsKKwlwZnJlZShydWxlZF9vdXQpOworCXBm cmVlKG12c3RhdHMpOworCisJbGlzdF9mcmVlKGNsYXVzZXMpOworCWxpc3Rf ZnJlZShjb25kaXRpb25zKTsKKwlsaXN0X2ZyZWUoc3RhdHMpOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworCisvKgorICogVGhpcyBzcGxpdHMgdGhlIGNs YXVzZXMgbGlzdCBpbnRvIHR3byBwYXJ0cyAtIG9uZSBjb250YWluaW5nIGNs YXVzZXMKKyAqIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgdXNpbmcgdGhlIGNo b3NlbiBzdGF0aXN0aWNzLCBhbmQgdGhlIHJlbWFpbmluZworICogY2xhdXNl cyAoZWl0aGVyIG5vbi1tdmNvbXBhdGlibGUsIG9yIG5vdCByZWxhdGVkIHRv IHRoZSBoaXN0b2dyYW0pLgorICovCitzdGF0aWMgTGlzdCAqCitjbGF1c2Vs aXN0X212X3NwbGl0KFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFsSm9pbklu Zm8gKnNqaW5mbywKKwkJCQkJTGlzdCAqY2xhdXNlcywgT2lkIHZhclJlbGlk LCBMaXN0ICoqbXZjbGF1c2VzLAorCQkJCQlNVlN0YXRpc3RpY0luZm8gKm12 c3RhdHMsIGludCB0eXBlcykKK3sKKwlpbnQgaTsKKwlMaXN0Q2VsbCAqbDsK KwlMaXN0CSAqbm9uX212Y2xhdXNlcyA9IE5JTDsKKworCS8qIEZJWE1FIGlz IHRoZXJlIGEgYmV0dGVyIHdheSB0byBnZXQgaW5mbyBvbiBpbnQydmVjdG9y PyAqLworCWludDJ2ZWN0b3IgKiBhdHRycyA9IG12c3RhdHMtPnN0YWtleXM7 CisJaW50CW51bWF0dHJzID0gbXZzdGF0cy0+c3Rha2V5cy0+ZGltMTsKKwor CUJpdG1hcHNldCAqbXZhdHRudW1zID0gTlVMTDsKKworCS8qIGJ1aWxkIGJp dG1hcCBvZiBhdHRyaWJ1dGVzIGNvdmVyZWQgYnkgdGhlIHN0YXRzLCBzbyB3 ZSBjYW4KKwkgKiBkbyBibXNfaXNfc3Vic2V0IGxhdGVyICovCisJZm9yIChp ID0gMDsgaSA8IG51bWF0dHJzOyBpKyspCisJCW12YXR0bnVtcyA9IGJtc19h ZGRfbWVtYmVyKG12YXR0bnVtcywgYXR0cnMtPnZhbHVlc1tpXSk7CisKKwkv KiBlcmFzZSB0aGUgbGlzdCBvZiBtdi1jb21wYXRpYmxlIGNsYXVzZXMgKi8K KwkqbXZjbGF1c2VzID0gTklMOworCisJZm9yZWFjaCAobCwgY2xhdXNlcykK Kwl7CisJCWJvb2wJCW1hdGNoID0gZmFsc2U7CS8qIGJ5IGRlZmF1bHQgbm90 IG12LWNvbXBhdGlibGUgKi8KKwkJQml0bWFwc2V0CSphdHRudW1zID0gTlVM TDsKKwkJTm9kZQkgICAqY2xhdXNlID0gKE5vZGUgKikgbGZpcnN0KGwpOwor CisJCWlmIChjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShyb290LCBjbGF1c2Us IHZhclJlbGlkLCBOVUxMLAorCQkJCQkJCQkJJmF0dG51bXMsIHNqaW5mbywg dHlwZXMpKQorCQl7CisJCQkvKiBhcmUgYWxsIHRoZSBhdHRyaWJ1dGVzIHBh cnQgb2YgdGhlIHNlbGVjdGVkIHN0YXRzPyAqLworCQkJaWYgKGJtc19pc19z dWJzZXQoYXR0bnVtcywgbXZhdHRudW1zKSkKKwkJCQltYXRjaCA9IHRydWU7 CisJCX0KKworCQkvKgorCQkgKiBUaGUgY2xhdXNlIG1hdGNoZXMgdGhlIHNl bGVjdGVkIHN0YXRzLCBzbyBwdXQgaXQgdG8gdGhlIGxpc3QKKwkJICogb2Yg bXYtY29tcGF0aWJsZSBjbGF1c2VzLiBPdGhlcndpc2UsIGtlZXAgaXQgaW4g dGhlIGxpc3Qgb2YKKwkJICogJ3JlZ3VsYXInIGNsYXVzZXMgKHRoYXQgbWF5 IGJlIHNlbGVjdGVkIGxhdGVyKS4KKwkJICovCisJCWlmIChtYXRjaCkKKwkJ CSptdmNsYXVzZXMgPSBsYXBwZW5kKCptdmNsYXVzZXMsIGNsYXVzZSk7CisJ CWVsc2UKKwkJCW5vbl9tdmNsYXVzZXMgPSBsYXBwZW5kKG5vbl9tdmNsYXVz ZXMsIGNsYXVzZSk7CisJfQorCisJLyoKKwkgKiBQZXJmb3JtIHJlZ3VsYXIg ZXN0aW1hdGlvbiB1c2luZyB0aGUgY2xhdXNlcyBpbmNvbXBhdGlibGUKKwkg KiB3aXRoIHRoZSBjaG9zZW4gaGlzdG9ncmFtIChvciBNViBzdGF0cyBpbiBn ZW5lcmFsKS4KKwkgKi8KKwlyZXR1cm4gbm9uX212Y2xhdXNlczsKKworfQor CisvKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjbGF1c2UgaXMgY29t cGF0aWJsZSB3aXRoIG11bHRpdmFyaWF0ZSBzdGF0cywKKyAqIGFuZCBpZiBp dCBpcywgcmV0dXJucyBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gLSB2 YXJubyAoaW5kZXgKKyAqIGludG8gc2ltcGxlX3J0ZV9hcnJheSkgYW5kIGEg Yml0bWFwIG9mIGF0dHJpYnV0ZXMuIFRoaXMgaXMgdGhlbgorICogdXNlZCB0 byBmZXRjaCByZWxhdGVkIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzLgorICoK KyAqIEF0IHRoaXMgbW9tZW50IHdlIG9ubHkgc3VwcG9ydCBiYXNpYyBjb25k aXRpb25zIG9mIHRoZSBmb3JtCisgKgorICogICAgIHZhcmlhYmxlIE9QIGNv bnN0YW50CisgKgorICogd2hlcmUgT1AgaXMgb25lIG9mIFs9LDwsPD0sPj0s Pl0gKHdoaWNoIGlzIGhvd2V2ZXIgZGV0ZXJtaW5lZCBieQorICogbG9va2lu ZyBhdCB0aGUgYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgZXN0aW1hdGluZyBz ZWxlY3Rpdml0eSwganVzdAorICogbGlrZSB3aXRoIHRoZSBzaW5nbGUtZGlt ZW5zaW9uYWwgY2FzZSkuCisgKgorICogVE9ETyBTdXBwb3J0ICdPUiBjbGF1 c2VzJyAtIHNob3VsZG4ndCBiZSBhbGwgdGhhdCBkaWZmaWN1bHQgdG8KICAq ICAgICAgZXZhbHVhdGUgdGhlbSB1c2luZyBtdWx0aXZhcmlhdGUgc3RhdHMu CiAgKi8KIHN0YXRpYyBib29sCkBAIC0xNTM5LDEwICsyNTk4LDEwIEBAIGNs YXVzZV9pc19tdl9jb21wYXRpYmxlKFBsYW5uZXJJbmZvICpyb290LCBOb2Rl ICpjbGF1c2UsIE9pZCB2YXJSZWxpZCwKIAogCQlyZXR1cm4gdHJ1ZTsKIAl9 Ci0JZWxzZSBpZiAob3JfY2xhdXNlKGNsYXVzZSkgfHwgYW5kX2NsYXVzZShj bGF1c2UpKQorCWVsc2UgaWYgKG9yX2NsYXVzZShjbGF1c2UpIHx8IGFuZF9j bGF1c2UoY2xhdXNlKSB8fCBub3RfY2xhdXNlKGNsYXVzZSkpCiAJewogCQkv KgotCQkgKiBBTkQvT1ItY2xhdXNlcyBhcmUgc3VwcG9ydGVkIGlmIGFsbCBz dWItY2xhdXNlcyBhcmUgc3VwcG9ydGVkCisJCSAqIEFORC9PUi9OT1QtY2xh dXNlcyBhcmUgc3VwcG9ydGVkIGlmIGFsbCBzdWItY2xhdXNlcyBhcmUgc3Vw cG9ydGVkCiAJCSAqCiAJCSAqIFRPRE8gV2UgbWlnaHQgc3VwcG9ydCBtaXhl ZCBjYXNlLCB3aGVyZSBzb21lIG9mIHRoZSBjbGF1c2VzCiAJCSAqICAgICAg YXJlIHN1cHBvcnRlZCBhbmQgc29tZSBhcmUgbm90LCBhbmQgdHJlYXQgYWxs IHN1cHBvcnRlZApAQCAtMTU1Miw3ICsyNjExLDEwIEBAIGNsYXVzZV9pc19t dl9jb21wYXRpYmxlKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpjbGF1c2Us IE9pZCB2YXJSZWxpZCwKIAkJICoKIAkJICogVE9ETyBGb3IgUmVzdHJpY3RJ bmZvIGFib3ZlIGFuIE9SLWNsYXVzZSwgd2UgbWlnaHQgdXNlIHRoZQogCQkg KiAgICAgIG9yY2xhdXNlIHdpdGggbmVzdGVkIFJlc3RyaWN0SW5mbyAtIHdl IHdvbid0IGhhdmUgdG8KLQkJICogICAgICBjYWxsIHB1bGxfdmFybm9zKCkg Zm9yIGVhY2ggY2xhdXNlLCBzYXZpbmcgdGltZS4gCisJCSAqICAgICAgY2Fs bCBwdWxsX3Zhcm5vcygpIGZvciBlYWNoIGNsYXVzZSwgc2F2aW5nIHRpbWUu CisJCSAqCisJCSAqIFRPRE8gUGVyaGFwcyB0aGlzIG5lZWRzIGEgYml0IG1v cmUgdGhvdWdodCBmb3IgZnVuY3Rpb25hbAorCQkgKiAgICAgIGRlcGVuZGVu Y2llcz8gVGhvc2UgZG9uJ3QgcXVpdGUgd29yayBmb3IgTk9UIGNhc2VzLgog CQkgKi8KIAkJQml0bWFwc2V0ICp0bXAgPSBOVUxMOwogCQlMaXN0Q2VsbCAq bDsKQEAgLTE1NzIsNiArMjYzNCw1MSBAQCBjbGF1c2VfaXNfbXZfY29tcGF0 aWJsZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqY2xhdXNlLCBPaWQgdmFy UmVsaWQsCiAJcmV0dXJuIGZhbHNlOwogfQogCisKK3N0YXRpYyBCaXRtYXBz ZXQgKgorY2xhdXNlX212X2dldF9hdHRudW1zKFBsYW5uZXJJbmZvICpyb290 LCBOb2RlICpjbGF1c2UpCit7CisJQml0bWFwc2V0ICogYXR0bnVtcyA9IE5V TEw7CisKKwkvKiBFeHRyYWN0IGNsYXVzZSBmcm9tIHJlc3RyaWN0IGluZm8s IGlmIG5lZWRlZC4gKi8KKwlpZiAoSXNBKGNsYXVzZSwgUmVzdHJpY3RJbmZv KSkKKwkJY2xhdXNlID0gKE5vZGUqKSgoUmVzdHJpY3RJbmZvKiljbGF1c2Up LT5jbGF1c2U7CisKKwkvKgorCSAqIE9ubHkgc2ltcGxlIG9wY2xhdXNlcyBh bmQgSVMgTlVMTCB0ZXN0cyBhcmUgY29tcGF0aWJsZSB3aXRoCisJICogbXVs dGl2YXJpYXRlIHN0YXRzIGF0IHRoaXMgcG9pbnQuCisJICovCisJaWYgKChp c19vcGNsYXVzZShjbGF1c2UpKQorCQkmJiAobGlzdF9sZW5ndGgoKChPcEV4 cHIgKikgY2xhdXNlKS0+YXJncykgPT0gMikpCisJeworCQlPcEV4cHIJICAg KmV4cHIgPSAoT3BFeHByICopIGNsYXVzZTsKKworCQlpZiAoSXNBKGxpbml0 aWFsKGV4cHItPmFyZ3MpLCBWYXIpKQorCQkJYXR0bnVtcyA9IGJtc19hZGRf bWVtYmVyKGF0dG51bXMsCisJCQkJCQkJKChWYXIqKWxpbml0aWFsKGV4cHIt PmFyZ3MpKS0+dmFyYXR0bm8pOworCQllbHNlCisJCQlhdHRudW1zID0gYm1z X2FkZF9tZW1iZXIoYXR0bnVtcywKKwkJCQkJCQkoKFZhciopbHNlY29uZChl eHByLT5hcmdzKSktPnZhcmF0dG5vKTsKKwl9CisJZWxzZSBpZiAoSXNBKGNs YXVzZSwgTnVsbFRlc3QpCisJCQkgJiYgSXNBKCgoTnVsbFRlc3QqKWNsYXVz ZSktPmFyZywgVmFyKSkKKwl7CisJCWF0dG51bXMgPSBibXNfYWRkX21lbWJl cihhdHRudW1zLAorCQkJCQkJCSgoVmFyKikoKE51bGxUZXN0KiljbGF1c2Up LT5hcmcpLT52YXJhdHRubyk7CisJfQorCWVsc2UgaWYgKG9yX2NsYXVzZShj bGF1c2UpIHx8IGFuZF9jbGF1c2UoY2xhdXNlKSB8fCBvcl9jbGF1c2UoY2xh dXNlKSkKKwl7CisJCUxpc3RDZWxsICpsOworCQlmb3JlYWNoIChsLCAoKEJv b2xFeHByKiljbGF1c2UpLT5hcmdzKQorCQl7CisJCQlhdHRudW1zID0gYm1z X2pvaW4oYXR0bnVtcywKKwkJCQkJCWNsYXVzZV9tdl9nZXRfYXR0bnVtcyhy b290LCAoTm9kZSopbGZpcnN0KGwpKSk7CisJCX0KKwl9CisKKwlyZXR1cm4g YXR0bnVtczsKK30KKwogLyoKICAqIFBlcmZvcm1zIHJlZHVjdGlvbiBvZiBj bGF1c2VzIHVzaW5nIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLCBpLmUuCiAg KiByZW1vdmVzIGNsYXVzZXMgdGhhdCBhcmUgY29uc2lkZXJlZCByZWR1bmRh bnQuIEl0IHNpbXBseSB3YWxrcwpAQCAtMjIyMywyMiArMzMzMCwyNiBAQCBn ZXRfdmFyYXR0bm9zKE5vZGUgKiBub2RlLCBJbmRleCByZWxpZCkKICAqICAg ICAgYXMgdGhlIGNsYXVzZXMgYXJlIHByb2Nlc3NlZCAoYW5kIHNraXAgaXRl bXMgdGhhdCBhcmUgJ21hdGNoJykuCiAgKi8KIHN0YXRpYyBTZWxlY3Rpdml0 eQotY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0KFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAotCQkJCQkJCQkgIE1WU3RhdGlz dGljSW5mbyAqbXZzdGF0cywgYm9vbCAqZnVsbG1hdGNoLAotCQkJCQkJCQkg IFNlbGVjdGl2aXR5ICpsb3dzZWwpCitjbGF1c2VsaXN0X212X3NlbGVjdGl2 aXR5X21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIE1WU3RhdGlzdGljSW5m byAqbXZzdGF0cywKKwkJCQkJCQkJICBMaXN0ICpjbGF1c2VzLCBMaXN0ICpj b25kaXRpb25zLCBib29sIGlzX29yLAorCQkJCQkJCQkgIGJvb2wgKmZ1bGxt YXRjaCwgU2VsZWN0aXZpdHkgKmxvd3NlbCkKIHsKIAlpbnQgaTsKIAlTZWxl Y3Rpdml0eSBzID0gMC4wOworCVNlbGVjdGl2aXR5IHQgPSAwLjA7CiAJU2Vs ZWN0aXZpdHkgdSA9IDAuMDsKIAogCU1DVkxpc3QgbWN2bGlzdCA9IE5VTEw7 CisKIAlpbnQJbm1hdGNoZXMgPSAwOworCWludAluY29uZGl0aW9ucyA9IDA7 CiAKIAkvKiBtYXRjaC9taXNtYXRjaCBiaXRtYXAgZm9yIGVhY2ggTUNWIGl0 ZW0gKi8KIAljaGFyICogbWF0Y2hlcyA9IE5VTEw7CisJY2hhciAqIGNvbmRp dGlvbl9tYXRjaGVzID0gTlVMTDsKIAogCUFzc2VydChjbGF1c2VzICE9IE5J TCk7Ci0JQXNzZXJ0KGxpc3RfbGVuZ3RoKGNsYXVzZXMpID49IDIpOworCUFz c2VydChsaXN0X2xlbmd0aChjbGF1c2VzKSA+PSAxKTsKIAogCS8qIHRoZXJl J3Mgbm8gTUNWIGxpc3QgYnVpbHQgeWV0ICovCiAJaWYgKCEgbXZzdGF0cy0+ bWN2X2J1aWx0KQpAQCAtMjI0OSwzMiArMzM2MCw4NSBAQCBjbGF1c2VsaXN0 X212X3NlbGVjdGl2aXR5X21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmNsYXVzZXMsCiAJQXNzZXJ0KG1jdmxpc3QgIT0gTlVMTCk7CiAJQXNz ZXJ0KG1jdmxpc3QtPm5pdGVtcyA+IDApOwogCi0JLyogYnkgZGVmYXVsdCBh bGwgdGhlIE1DViBpdGVtcyBtYXRjaCB0aGUgY2xhdXNlcyBmdWxseSAqLwot CW1hdGNoZXMgPSBwYWxsb2MwKHNpemVvZihjaGFyKSAqIG1jdmxpc3QtPm5p dGVtcyk7Ci0JbWVtc2V0KG1hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwg c2l6ZW9mKGNoYXIpKm1jdmxpc3QtPm5pdGVtcyk7Ci0KIAkvKiBudW1iZXIg b2YgbWF0Y2hpbmcgTUNWIGl0ZW1zICovCiAJbm1hdGNoZXMgPSBtY3ZsaXN0 LT5uaXRlbXM7CisJbmNvbmRpdGlvbnMgPSBtY3ZsaXN0LT5uaXRlbXM7CiAK KwkvKgorCSAqIEJpdG1hcCBvZiBidWNrZXQgbWF0Y2hlcyAobWlzbWF0Y2gs IHBhcnRpYWwsIGZ1bGwpLgorCSAqCisJICogRm9yIEFORCBjbGF1c2VzIGFs bCBidWNrZXRzIG1hdGNoIChhbmQgd2UnbGwgZWxpbWluYXRlIHRoZW0pLgor CSAqIEZvciBPUiAgY2xhdXNlcyBubyAgYnVja2V0cyBtYXRjaCAoYW5kIHdl J2xsIGFkZCB0aGVtKS4KKwkgKgorCSAqIFdlIG9ubHkgbmVlZCB0byBkbyB0 aGUgbWVtc2V0IGZvciBBTkQgY2xhdXNlcyAoZm9yIE9SIGNsYXVzZXMKKwkg KiBpdCdzIGFscmVhZHkgc2V0IGNvcnJlY3RseSBieSB0aGUgcGFsbG9jMCku CisJICovCisJbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogbm1h dGNoZXMpOworCisJaWYgKCEgaXNfb3IpIC8qIEFORC1jbGF1c2UgKi8KKwkJ bWVtc2V0KG1hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNo YXIpKm5tYXRjaGVzKTsKKworCS8qIENvbmRpdGlvbnMgYXJlIHRyZWF0ZWQg YXMgQU5EIGNsYXVzZSwgc28gbWF0Y2ggYnkgZGVmYXVsdC4gKi8KKwljb25k aXRpb25fbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogbmNvbmRp dGlvbnMpOworCW1lbXNldChjb25kaXRpb25fbWF0Y2hlcywgTVZTVEFUU19N QVRDSF9GVUxMLCBzaXplb2YoY2hhcikqbmNvbmRpdGlvbnMpOworCisJLyoK KwkgKiBidWlsZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0aGUgY29uZGl0aW9u cyAoY29uZGl0aW9ucyBhcmUgYWx3YXlzCisJICogY29ubmVjdGVkIGJ5IEFO RCkKKwkgKi8KKwlpZiAoY29uZGl0aW9ucyAhPSBOSUwpCisJCW5jb25kaXRp b25zID0gdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0KHJvb3QsIGNvbmRp dGlvbnMsCisJCQkJCQkJCQkgICBtdnN0YXRzLT5zdGFrZXlzLCBtY3ZsaXN0 LAorCQkJCQkJCQkJICAgbmNvbmRpdGlvbnMsIGNvbmRpdGlvbl9tYXRjaGVz LAorCQkJCQkJCQkJICAgbG93c2VsLCBmdWxsbWF0Y2gsIGZhbHNlKTsKKwor CS8qCisJICogYnVpbGQgdGhlIG1hdGNoIGJpdG1hcCBmb3IgdGhlIGVzdGlt YXRlZCBjbGF1c2VzCisJICoKKwkgKiBUT0RPIFRoaXMgZXZhbHVhdGVzIHRo ZSBjbGF1c2VzIGZvciBhbGwgTUNWIGl0ZW1zLCBldmVuIHRob3NlCisJICog ICAgICBydWxlZCBvdXQgYnkgdGhlIGNvbmRpdGlvbnMuIFRoZSBmaW5hbCBy ZXN1bHQgc2hvdWxkIGJlIHRoZQorCSAqICAgICAgc2FtZSwgYnV0IGl0IG1p Z2h0IGJlIGZhc3Rlci4KKwkgKi8KIAlubWF0Y2hlcyA9IHVwZGF0ZV9tYXRj aF9iaXRtYXBfbWN2bGlzdChyb290LCBjbGF1c2VzLAogCQkJCQkJCQkJCSAg IG12c3RhdHMtPnN0YWtleXMsIG1jdmxpc3QsCi0JCQkJCQkJCQkJICAgbm1h dGNoZXMsIG1hdGNoZXMsCi0JCQkJCQkJCQkJICAgbG93c2VsLCBmdWxsbWF0 Y2gsIGZhbHNlKTsKKwkJCQkJCQkJCQkgICAoKGlzX29yKSA/IDAgOiBubWF0 Y2hlcyksIG1hdGNoZXMsCisJCQkJCQkJCQkJICAgbG93c2VsLCBmdWxsbWF0 Y2gsIGlzX29yKTsKIAogCS8qIHN1bSBmcmVxdWVuY2llcyBmb3IgYWxsIHRo ZSBtYXRjaGluZyBNQ1YgaXRlbXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbWN2 bGlzdC0+bml0ZW1zOyBpKyspCiAJewotCQkvKiB1c2VkIHRvICdzY2FsZScg Zm9yIE1DViBsaXN0cyBub3QgY292ZXJpbmcgYWxsIHR1cGxlcyAqLworCQkv KgorCQkgKiBGaW5kIG91dCB3aGF0IHBhcnQgb2YgdGhlIGRhdGEgaXMgY292 ZXJlZCBieSB0aGUgTUNWIGxpc3QsCisJCSAqIHNvIHRoYXQgd2UgY2FuICdz Y2FsZScgdGhlIHNlbGVjdGl2aXR5IHByb3Blcmx5IChlLmcuIHdoZW4KKwkJ ICogb25seSA1MCUgb2YgdGhlIHNhbXBsZSBpdGVtcyBnb3QgaW50byB0aGUg TUNWLCBhbmQgdGhlIHJlc3QKKwkJICogaXMgZWl0aGVyIGluIGEgaGlzdG9n cmFtLCBvciBub3QgY292ZXJlZCBieSBzdGF0cykuCisJCSAqCisJCSAqIFRP RE8gVGhpcyBtaWdodCBiZSBoYW5kbGVkIGJ5IGtlZXBpbmcgYSBnbG9iYWwg ImZyZXF1ZW5jeSIKKwkJICogICAgICBmb3IgdGhlIHdob2xlIGxpc3QsIHdo aWNoIG1pZ2h0IHNhdmUgdXMgYSBiaXQgb2YgdGltZQorCQkgKiAgICAgIHNw ZW50IG9uIGFjY2Vzc2luZyB0aGUgbm90LW1hdGNoaW5nIHBhcnQgb2YgdGhl IE1DViBsaXN0LgorCQkgKiAgICAgIEFsdGhvdWdoIGl0J3MgbGlrZWx5IGlu IGEgY2FjaGUsIHNvIGl0J3MgdmVyeSBmYXN0LgorCQkgKi8KIAkJdSArPSBt Y3ZsaXN0LT5pdGVtc1tpXS0+ZnJlcXVlbmN5OwogCisJCS8qIHNraXQgTUNW IGl0ZW1zIG5vdCBtYXRjaGluZyB0aGUgY29uZGl0aW9ucyAqLworCQlpZiAo Y29uZGl0aW9uX21hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9OT05FKQor CQkJY29udGludWU7CisKIAkJaWYgKG1hdGNoZXNbaV0gIT0gTVZTVEFUU19N QVRDSF9OT05FKQogCQkJcyArPSBtY3ZsaXN0LT5pdGVtc1tpXS0+ZnJlcXVl bmN5OworCisJCXQgKz0gbWN2bGlzdC0+aXRlbXNbaV0tPmZyZXF1ZW5jeTsK IAl9CiAKIAlwZnJlZShtYXRjaGVzKTsKKwlwZnJlZShjb25kaXRpb25fbWF0 Y2hlcyk7CiAJcGZyZWUobWN2bGlzdCk7CiAKLQlyZXR1cm4gcyp1OworCS8q IG5vIGNvbmRpdGlvbiBtYXRjaGVzICovCisJaWYgKHQgPT0gMC4wKQorCQly ZXR1cm4gKFNlbGVjdGl2aXR5KTAuMDsKKworCXJldHVybiAocyAvIHQpICog dTsKIH0KIAogLyoKQEAgLTI1NjcsNjQgKzM3MzEsNTcgQEAgdXBkYXRlX21h dGNoX2JpdG1hcF9tY3ZsaXN0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpj bGF1c2VzLAogCQkJCX0KIAkJCX0KIAkJfQotCQllbHNlIGlmIChvcl9jbGF1 c2UoY2xhdXNlKSB8fCBhbmRfY2xhdXNlKGNsYXVzZSkpCisJCWVsc2UgaWYg KG9yX2NsYXVzZShjbGF1c2UpIHx8IGFuZF9jbGF1c2UoY2xhdXNlKSB8fCBu b3RfY2xhdXNlKGNsYXVzZSkpCiAJCXsKIAkJCS8qIEFORC9PUiBjbGF1c2Us IHdpdGggYWxsIGNsYXVzZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBzZWxlY3Rl ZCBNViBzdGF0ICovCiAKIAkJCWludAkJCWk7Ci0JCQlCb29sRXhwciAgICpv cmNsYXVzZSAgPSAoKEJvb2xFeHByKiljbGF1c2UpOwotCQkJTGlzdAkgICAq b3JjbGF1c2VzID0gb3JjbGF1c2UtPmFyZ3M7CisJCQlMaXN0CSAgICp0bXBf Y2xhdXNlcyA9ICgoQm9vbEV4cHIqKWNsYXVzZSktPmFyZ3M7CiAKIAkJCS8q IG1hdGNoL21pc21hdGNoIGJpdG1hcCBmb3IgZWFjaCBNQ1YgaXRlbSAqLwot CQkJaW50CW9yX25tYXRjaGVzID0gMDsKLQkJCWNoYXIgKiBvcl9tYXRjaGVz ID0gTlVMTDsKKwkJCWludAl0bXBfbm1hdGNoZXMgPSAwOworCQkJY2hhciAq IHRtcF9tYXRjaGVzID0gTlVMTDsKIAotCQkJQXNzZXJ0KG9yY2xhdXNlcyAh PSBOSUwpOwotCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKG9yY2xhdXNlcykgPj0g Mik7CisJCQlBc3NlcnQodG1wX2NsYXVzZXMgIT0gTklMKTsKKwkJCUFzc2Vy dCgobGlzdF9sZW5ndGgodG1wX2NsYXVzZXMpID49IDIpIHx8IChub3RfY2xh dXNlKGNsYXVzZSkgJiYgKGxpc3RfbGVuZ3RoKHRtcF9jbGF1c2VzKT09MSkp KTsKIAogCQkJLyogbnVtYmVyIG9mIG1hdGNoaW5nIE1DViBpdGVtcyAqLwot CQkJb3Jfbm1hdGNoZXMgPSBtY3ZsaXN0LT5uaXRlbXM7CisJCQl0bXBfbm1h dGNoZXMgPSAob3JfY2xhdXNlKGNsYXVzZSkpID8gMCA6IG1jdmxpc3QtPm5p dGVtczsKIAogCQkJLyogYnkgZGVmYXVsdCBub25lIG9mIHRoZSBNQ1YgaXRl bXMgbWF0Y2hlcyB0aGUgY2xhdXNlcyAqLwotCQkJb3JfbWF0Y2hlcyA9IHBh bGxvYzAoc2l6ZW9mKGNoYXIpICogb3Jfbm1hdGNoZXMpOworCQkJdG1wX21h dGNoZXMgPSBwYWxsb2MwKHNpemVvZihjaGFyKSAqIG1jdmxpc3QtPm5pdGVt cyk7CiAKLQkJCWlmIChvcl9jbGF1c2UoY2xhdXNlKSkKLQkJCXsKLQkJCQkv KiBPUiBjbGF1c2VzIGFzc3VtZSBub3RoaW5nIG1hdGNoZXMsIGluaXRpYWxs eSAqLwotCQkJCW1lbXNldChvcl9tYXRjaGVzLCBNVlNUQVRTX01BVENIX05P TkUsIHNpemVvZihjaGFyKSpvcl9ubWF0Y2hlcyk7Ci0JCQkJb3Jfbm1hdGNo ZXMgPSAwOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIEFORCBjbGF1 c2VzIGFzc3VtZSBub3RoaW5nIG1hdGNoZXMsIGluaXRpYWxseSAqLwotCQkJ CW1lbXNldChvcl9tYXRjaGVzLCBNVlNUQVRTX01BVENIX0ZVTEwsIHNpemVv ZihjaGFyKSpvcl9ubWF0Y2hlcyk7Ci0JCQl9CisJCQkvKiBBTkQgKGFuZCBO T1QpIGNsYXVzZXMgYXNzdW1lIGV2ZXJ5dGhpbmcgbWF0Y2hlcywgaW5pdGlh bGx5ICovCisJCQlpZiAoISBvcl9jbGF1c2UoY2xhdXNlKSkKKwkJCQltZW1z ZXQodG1wX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNo YXIpKm1jdmxpc3QtPm5pdGVtcyk7CiAKIAkJCS8qIGJ1aWxkIHRoZSBtYXRj aCBiaXRtYXAgZm9yIHRoZSBPUi1jbGF1c2VzICovCi0JCQlvcl9ubWF0Y2hl cyA9IHVwZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlzdChyb290LCBvcmNsYXVz ZXMsCisJCQl0bXBfbm1hdGNoZXMgPSB1cGRhdGVfbWF0Y2hfYml0bWFwX21j dmxpc3Qocm9vdCwgdG1wX2NsYXVzZXMsCiAJCQkJCQkJCQkgICBzdGFrZXlz LCBtY3ZsaXN0LAotCQkJCQkJCQkJICAgb3Jfbm1hdGNoZXMsIG9yX21hdGNo ZXMsCisJCQkJCQkJCQkgICB0bXBfbm1hdGNoZXMsIHRtcF9tYXRjaGVzLAog CQkJCQkJCQkJICAgbG93c2VsLCBmdWxsbWF0Y2gsIG9yX2NsYXVzZShjbGF1 c2UpKTsKIAogCQkJLyogbWVyZ2UgdGhlIGJpdG1hcCBpbnRvIHRoZSBleGlz dGluZyBvbmUqLwogCQkJZm9yIChpID0gMDsgaSA8IG1jdmxpc3QtPm5pdGVt czsgaSsrKQogCQkJeworCQkJCS8qIGlmIHRoaXMgaXMgYSBOT1QgY2xhdXNl LCB3ZSBuZWVkIHRvIGludmVydCB0aGUgcmVzdWx0cyBmaXJzdCAqLworCQkJ CWlmIChub3RfY2xhdXNlKGNsYXVzZSkpCisJCQkJCXRtcF9tYXRjaGVzW2ld ID0gKE1WU1RBVFNfTUFUQ0hfRlVMTCAtIHRtcF9tYXRjaGVzW2ldKTsKKwog CQkJCS8qCiAJCQkJICogVG8gQU5ELW1lcmdlIHRoZSBiaXRtYXBzLCBhIE1J TigpIHNlbWFudGljcyBpcyB1c2VkLgogCQkJCSAqIEZvciBPUi1tZXJnZSwg dXNlIE1BWCgpLgogCQkJCSAqCiAJCQkJICogRklYTUUgdGhpcyBkb2VzIG5v dCBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIG1hdGNoZXMKIAkJCQkgKi8KLQkJ CQlVUERBVEVfUkVTVUxUKG1hdGNoZXNbaV0sIG9yX21hdGNoZXNbaV0sIGlz X29yKTsKKwkJCQlVUERBVEVfUkVTVUxUKG1hdGNoZXNbaV0sIHRtcF9tYXRj aGVzW2ldLCBpc19vcik7CiAJCQl9CiAKLQkJCXBmcmVlKG9yX21hdGNoZXMp OworCQkJcGZyZWUodG1wX21hdGNoZXMpOwogCiAJCX0KIAkJZWxzZQotCQl7 CiAJCQllbG9nKEVSUk9SLCAidW5rbm93biBjbGF1c2UgdHlwZTogJWQiLCBj bGF1c2UtPnR5cGUpOwotCQl9CiAJfQogCiAJLyoKQEAgLTI2ODIsMTUgKzM4 MzksMTggQEAgdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0KFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogICogICAgICB0aGlzIGlzIG5v dCB1bmNvbW1vbiwgYnV0IGZvciBoaXN0b2dyYW1zIGl0J3Mgbm90IHRoYXQg Y2xlYXIuCiAgKi8KIHN0YXRpYyBTZWxlY3Rpdml0eQotY2xhdXNlbGlzdF9t dl9zZWxlY3Rpdml0eV9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmNsYXVzZXMsCi0JCQkJCQkJCQlNVlN0YXRpc3RpY0luZm8gKm12c3Rh dHMpCitjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShQbGFu bmVySW5mbyAqcm9vdCwgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzLAorCQkJ CQkJCQkJTGlzdCAqY2xhdXNlcywgTGlzdCAqY29uZGl0aW9ucywgYm9vbCBp c19vcikKIHsKIAlpbnQgaTsKIAlTZWxlY3Rpdml0eSBzID0gMC4wOworCVNl bGVjdGl2aXR5IHQgPSAwLjA7CiAJU2VsZWN0aXZpdHkgdSA9IDAuMDsKIAog CWludAkJbm1hdGNoZXMgPSAwOworCWludAkJbmNvbmRpdGlvbnMgPSAwOwog CWNoYXIgICAqbWF0Y2hlcyA9IE5VTEw7CisJY2hhciAgICpjb25kaXRpb25f bWF0Y2hlcyA9IE5VTEw7CiAKIAlNVlNlcmlhbGl6ZWRIaXN0b2dyYW0gbXZo aXN0ID0gTlVMTDsKIApAQCAtMjcwMSwyNyArMzg2MSw1NyBAQCBjbGF1c2Vs aXN0X212X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqY2xhdXNlcywKIAkvKiBUaGVyZSBtYXkgYmUgbm8gaGlzdG9n cmFtIGluIHRoZSBzdGF0cyAoY2hlY2sgaGlzdF9idWlsdCBmbGFnKSAqLwog CW12aGlzdCA9IGxvYWRfbXZfaGlzdG9ncmFtKG12c3RhdHMtPm12b2lkKTsK IAotCUFzc2VydCAobXZoaXN0ICE9IE5VTEwpOwotCUFzc2VydCAoY2xhdXNl cyAhPSBOSUwpOwotCUFzc2VydCAobGlzdF9sZW5ndGgoY2xhdXNlcykgPj0g Mik7CisJQXNzZXJ0IChtdmhpc3QgIT0gTlVMTCk7CisJQXNzZXJ0IChjbGF1 c2VzICE9IE5JTCk7CisJQXNzZXJ0IChsaXN0X2xlbmd0aChjbGF1c2VzKSA+ PSAxKTsKKworCW5tYXRjaGVzID0gbXZoaXN0LT5uYnVja2V0czsKKwluY29u ZGl0aW9ucyA9IG12aGlzdC0+bmJ1Y2tldHM7CisKKwkvKgorCSAqIEJpdG1h cCBvZiBidWNrZXQgbWF0Y2hlcyAobWlzbWF0Y2gsIHBhcnRpYWwsIGZ1bGwp LgorCSAqCisJICogRm9yIEFORCBjbGF1c2VzIGFsbCBidWNrZXRzIG1hdGNo IChhbmQgd2UnbGwgZWxpbWluYXRlIHRoZW0pLgorCSAqIEZvciBPUiAgY2xh dXNlcyBubyAgYnVja2V0cyBtYXRjaCAoYW5kIHdlJ2xsIGFkZCB0aGVtKS4K KwkgKgorCSAqIFdlIG9ubHkgbmVlZCB0byBkbyB0aGUgbWVtc2V0IGZvciBB TkQgY2xhdXNlcyAoZm9yIE9SIGNsYXVzZXMKKwkgKiBpdCdzIGFscmVhZHkg c2V0IGNvcnJlY3RseSBieSB0aGUgcGFsbG9jMCkuCisJICovCisJbWF0Y2hl cyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogbm1hdGNoZXMpOworCisJaWYg KCEgaXNfb3IpIC8qIEFORC1jbGF1c2UgKi8KKwkJbWVtc2V0KG1hdGNoZXMs IE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm5tYXRjaGVzKTsK KworCS8qIENvbmRpdGlvbnMgYXJlIHRyZWF0ZWQgYXMgQU5EIGNsYXVzZSwg c28gbWF0Y2ggYnkgZGVmYXVsdC4gKi8KKwljb25kaXRpb25fbWF0Y2hlcyA9 IHBhbGxvYzAoc2l6ZW9mKGNoYXIpKm5jb25kaXRpb25zKTsKKwltZW1zZXQo Y29uZGl0aW9uX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9m KGNoYXIpKm5jb25kaXRpb25zKTsKIAogCS8qCi0JICogQml0bWFwIG9mIGJ1 Y2tldCBtYXRjaGVzIChtaXNtYXRjaCwgcGFydGlhbCwgZnVsbCkuIGJ5IGRl ZmF1bHQKLQkgKiBhbGwgYnVja2V0cyBmdWxseSBtYXRjaCAoYW5kIHdlJ2xs IGVsaW1pbmF0ZSB0aGVtKS4KKwkgKiBidWlsZCB0aGUgbWF0Y2ggYml0bWFw IGZvciB0aGUgY29uZGl0aW9ucyAoY29uZGl0aW9ucyBhcmUgYWx3YXlzCisJ ICogY29ubmVjdGVkIGJ5IEFORCkKIAkgKi8KLQltYXRjaGVzID0gcGFsbG9j MChzaXplb2YoY2hhcikgKiBtdmhpc3QtPm5idWNrZXRzKTsKLQltZW1zZXQo bWF0Y2hlcywgIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm12 aGlzdC0+bmJ1Y2tldHMpOwotCi0Jbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNr ZXRzOworCWlmIChjb25kaXRpb25zICE9IE5JTCkKKwkJdXBkYXRlX21hdGNo X2JpdG1hcF9oaXN0b2dyYW0ocm9vdCwgY29uZGl0aW9ucywKKwkJCQkJCQkJ ICBtdnN0YXRzLT5zdGFrZXlzLCBtdmhpc3QsCisJCQkJCQkJCSAgbmNvbmRp dGlvbnMsIGNvbmRpdGlvbl9tYXRjaGVzLCBmYWxzZSk7CiAKLQkvKiBidWls ZCB0aGUgbWF0Y2ggYml0bWFwICovCisJLyoKKwkgKiBidWlsZCB0aGUgbWF0 Y2ggYml0bWFwIGZvciB0aGUgZXN0aW1hdGVkIGNsYXVzZXMKKwkgKgorCSAq IFRPRE8gVGhpcyBldmFsdWF0ZXMgdGhlIGNsYXVzZXMgZm9yIGFsbCBidWNr ZXRzLCBldmVuIHRob3NlCisJICogICAgICBydWxlZCBvdXQgYnkgdGhlIGNv bmRpdGlvbnMuIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlCisJICogICAg ICB0aGUgc2FtZSwgYnV0IGl0IG1pZ2h0IGJlIGZhc3Rlci4KKwkgKi8KIAl1 cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShyb290LCBjbGF1c2VzLAog CQkJCQkJCQkgIG12c3RhdHMtPnN0YWtleXMsIG12aGlzdCwKLQkJCQkJCQkJ ICBubWF0Y2hlcywgbWF0Y2hlcywgZmFsc2UpOworCQkJCQkJCQkgICgoaXNf b3IpID8gMCA6IG5tYXRjaGVzKSwgbWF0Y2hlcywKKwkJCQkJCQkJICBpc19v cik7CiAKIAkvKiBub3csIHdhbGsgdGhyb3VnaCB0aGUgYnVja2V0cyBhbmQg c3VtIHRoZSBzZWxlY3Rpdml0aWVzICovCiAJZm9yIChpID0gMDsgaSA8IG12 aGlzdC0+bmJ1Y2tldHM7IGkrKykKIAl7CisJCWZsb2F0IGNvZWZmID0gMS4w OworCiAJCS8qCiAJCSAqIEZpbmQgb3V0IHdoYXQgcGFydCBvZiB0aGUgZGF0 YSBpcyBjb3ZlcmVkIGJ5IHRoZSBoaXN0b2dyYW0sCiAJCSAqIHNvIHRoYXQg d2UgY2FuICdzY2FsZScgdGhlIHNlbGVjdGl2aXR5IHByb3Blcmx5IChlLmcu IHdoZW4KQEAgLTI3MzUsMTcgKzM5MjUsMzUgQEAgY2xhdXNlbGlzdF9tdl9z ZWxlY3Rpdml0eV9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmNsYXVzZXMsCiAJCSAqLwogCQl1ICs9IG12aGlzdC0+YnVja2V0c1tpXS0+ bnR1cGxlczsKIAorCQkvKiBza2lwIGJ1Y2tldHMgbm90IG1hdGNoaW5nIHRo ZSBjb25kaXRpb25zICovCisJCWlmIChjb25kaXRpb25fbWF0Y2hlc1tpXSA9 PSBNVlNUQVRTX01BVENIX05PTkUpCisJCQljb250aW51ZTsKKwkJZWxzZSBp ZiAoY29uZGl0aW9uX21hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9QQVJU SUFMKQorCQkJY29lZmYgPSAwLjU7CisKKwkJdCArPSBjb2VmZiAqIG12aGlz dC0+YnVja2V0c1tpXS0+bnR1cGxlczsKKwogCQlpZiAobWF0Y2hlc1tpXSA9 PSBNVlNUQVRTX01BVENIX0ZVTEwpCi0JCQlzICs9IG12aGlzdC0+YnVja2V0 c1tpXS0+bnR1cGxlczsKKwkJCXMgKz0gY29lZmYgKiBtdmhpc3QtPmJ1Y2tl dHNbaV0tPm50dXBsZXM7CiAJCWVsc2UgaWYgKG1hdGNoZXNbaV0gPT0gTVZT VEFUU19NQVRDSF9QQVJUSUFMKQotCQkJcyArPSAwLjUgKiBtdmhpc3QtPmJ1 Y2tldHNbaV0tPm50dXBsZXM7CisJCQkvKgorCQkJICogVE9ETyBJZiBib3Ro IGNvbmRpdGlvbnMgYW5kIGNsYXVzZXMgbWF0Y2ggcGFydGlhbGx5LCB0aGlz CisJCQkgKiAgICAgIHdpbGwgdXNlIDAuMjUgbWF0Y2ggLSBub3Qgc3VyZSBp ZiB0aGF0J3MgdGhlIHJpZ2h0CisJCQkgKiAgICAgIHRoaW5nIHNvbHV0aW9u LCBidXQgc2VlbXMgYWJvdXQgcmlnaHQuCisJCQkgKi8KKwkJCXMgKz0gY29l ZmYgKiAwLjUgKiBtdmhpc3QtPmJ1Y2tldHNbaV0tPm50dXBsZXM7CiAJfQog CiAJLyogcmVsZWFzZSB0aGUgYWxsb2NhdGVkIGJpdG1hcCBhbmQgZGVzZXJp YWxpemVkIGhpc3RvZ3JhbSAqLwogCXBmcmVlKG1hdGNoZXMpOworCXBmcmVl KGNvbmRpdGlvbl9tYXRjaGVzKTsKIAlwZnJlZShtdmhpc3QpOwogCi0JcmV0 dXJuIHMgKiB1OworCS8qIG5vIGNvbmRpdGlvbiBtYXRjaGVzICovCisJaWYg KHQgPT0gMC4wKQorCQlyZXR1cm4gKFNlbGVjdGl2aXR5KTAuMDsKKworCXJl dHVybiAocyAvIHQpICogdTsKIH0KIAogLyoKQEAgLTI3NzUsNyArMzk4Myw3 IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKFBsYW5uZXJJbmZv ICpyb290LCBMaXN0ICpjbGF1c2VzLAogewogCWludCBpOwogCUxpc3RDZWxs ICogbDsKLQorIAogCS8qCiAJICogVXNlZCBmb3IgY2FjaGluZyBmdW5jdGlv biBjYWxscywgb25seSBvbmNlIHBlciBkZWR1cGxpY2F0ZWQgdmFsdWUuCiAJ ICoKQEAgLTI4MTgsNyArNDAyNiw3IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBf aGlzdG9ncmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAog CiAJCQlGbWdySW5mbwlvcHByb2M7CQkJLyogb3BlcmF0b3IgKi8KIAkJCWZt Z3JfaW5mbyhnZXRfb3Bjb2RlKGV4cHItPm9wbm8pLCAmb3Bwcm9jKTsKLQor IAogCQkJLyogcmVzZXQgdGhlIGNhY2hlIChwZXIgY2xhdXNlKSAqLwogCQkJ bWVtc2V0KGNhbGxjYWNoZSwgMCwgbXZoaXN0LT5uYnVja2V0cyk7CiAKQEAg LTI4NzAsNyArNDA3OCw3IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9n cmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCiAJCQkJ CS8qIGhpc3RvZ3JhbSBib3VuZGFyaWVzICovCiAJCQkJCURhdHVtIG1pbnZh bCwgbWF4dmFsOwotCisgCiAJCQkJCS8qIHZhbHVlcyBmcm9tIHRoZSBjYWxs IGNhY2hlICovCiAJCQkJCWNoYXIgbWluY2FjaGVkLCBtYXhjYWNoZWQ7CiAK QEAgLTI5NTksNyArNDE2Nyw3IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlz dG9ncmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQkJ CQkJCQl9CiAKIAkJCQkJCQkJLyoKLQkJCQkJCQkJICogTm93IGNoZWNrIHdo ZXRoZXIgdGhlIHVwcGVyIGJvdW5kYXJ5IGlzIGJlbG93IHRoZSBjb25zdGFu dCAoaW4gdGhhdAorCQkJCQkJCQkgKiBOb3cgY2hlY2sgd2hldGhlciBjb25z dGFudCBpcyBiZWxvdyB0aGUgdXBwZXIgYm91bmRhcnkgKGluIHRoYXQKIAkJ CQkJCQkJICogY2FzZSBpdCdzIGEgcGFydGlhbCBtYXRjaCkuCiAJCQkJCQkJ CSAqLwogCQkJCQkJCQlpZiAoISBtYXhjYWNoZWQpCkBAIC0yOTc4LDggKzQx ODYsMzIgQEAgdXBkYXRlX21hdGNoX2JpdG1hcF9oaXN0b2dyYW0oUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCQkJCQkJCWVsc2UKIAkJ CQkJCQkJCXRtcCA9ICEobWF4Y2FjaGVkICYgMHgwMik7CS8qIGV4dHJhY3Qg dGhlIHJlc3VsdCAocmV2ZXJzZSkgKi8KIAotCQkJCQkJCQlpZiAodG1wKQkv KiBwYXJ0aWFsIG1hdGNoICovCisJCQkJCQkJCWlmICh0bXApCisJCQkJCQkJ CXsKKwkJCQkJCQkJCS8qIHBhcnRpYWwgbWF0Y2ggKi8KIAkJCQkJCQkJCVVQ REFURV9SRVNVTFQobWF0Y2hlc1tpXSwgTVZTVEFUU19NQVRDSF9QQVJUSUFM LCBpc19vcik7CisJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQkJfQorCisK KwkJCQkJCQkJLyoKKwkJCQkJCQkJICogQW5kIGZpbmFsbHkgY2hlY2sgd2hl dGhlciB0aGUgd2hldGhlciB0aGUgY29uc3RhbnQgaXMgYWJvdmUgdGhlIHRo ZSB1cHBlcgorCQkJCQkJCQkgKiBib3VuZGFyeSAoaW4gdGhhdCBjYXNlIGl0 J3MgYSBmdWxsIG1hdGNoIG1hdGNoKS4KKwkJCQkJCQkJICoKKwkJCQkJCQkJ ICogWFhYIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIG9mIHRoZSBPUiBj bGF1c2VzICh3aGljaCBzdGFydCB3aXRoIG5vCisJCQkJCQkJCSAqICAgICBt YXRjaGVzIGFuZCB3ZSBpbmNyZW1lbnRhbGx5IGFkZCBtb3JlIGFuZCBtb3Jl IG1hdGNoZXMpLCBidXQgbWF5YmUKKwkJCQkJCQkJICogICAgIHdlIGRvbid0 IG5lZWQgdG8gZG8gdGhlIGNoZWNrIGFuZCBjYW4ganVzdCBkbyBVUERBVEVf UkVTVUxUPworCQkJCQkJCQkgKi8KKwkJCQkJCQkJdG1wID0gRGF0dW1HZXRC b29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZvcHByb2MsCisJCQkJCQkJCQkJCQkJ CQkJCSBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJCQkJCQkJCQkJ CSBtYXh2YWwsCisJCQkJCQkJCQkJCQkJCQkJCSBjc3QtPmNvbnN0dmFsdWUp KTsKKworCQkJCQkJCQlpZiAodG1wKQorCQkJCQkJCQl7CisJCQkJCQkJCQkv KiBmdWxsIG1hdGNoICovCisJCQkJCQkJCQlVUERBVEVfUkVTVUxUKG1hdGNo ZXNbaV0sIE1WU1RBVFNfTUFUQ0hfRlVMTCwgaXNfb3IpOworCQkJCQkJCQl9 CiAKIAkJCQkJCQl9CiAJCQkJCQkJZWxzZQkvKiAoY29uc3QgPCB2YXIpICov CkBAIC0zMDE4LDE1ICs0MjUwLDM2IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBf aGlzdG9ncmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAog CQkJCQkJCQkJCQkJCQkJCQkJIERFRkFVTFRfQ09MTEFUSU9OX09JRCwKIAkJ CQkJCQkJCQkJCQkJCQkJCSBtaW52YWwsCiAJCQkJCQkJCQkJCQkJCQkJCQkg Y3N0LT5jb25zdHZhbHVlKSk7Ci0KIAkJCQkJCQkJCS8qIFVwZGF0ZSB0aGUg Y2FjaGUuICovCiAJCQkJCQkJCQljYWxsY2FjaGVbYnVja2V0LT5taW5baWR4 XV0gPSAodG1wKSA/IDB4MDMgOiAweDAxOwotCQkJCQkJCQl9CisgCQkJCQkJ CQl9CiAJCQkJCQkJCWVsc2UKIAkJCQkJCQkJCXRtcCA9IChtaW5jYWNoZWQg JiAweDAyKTsJLyogZXh0cmFjdCB0aGUgcmVzdWx0ICovCiAKLQkJCQkJCQkJ aWYgKHRtcCkJLyogcGFydGlhbCBtYXRjaCAqLworCQkJCQkJCQlpZiAodG1w KQorCQkJCQkJCQl7CisJCQkJCQkJCQkvKiBwYXJ0aWFsIG1hdGNoICovCiAJ CQkJCQkJCQlVUERBVEVfUkVTVUxUKG1hdGNoZXNbaV0sIE1WU1RBVFNfTUFU Q0hfUEFSVElBTCwgaXNfb3IpOworCQkJCQkJCQkJY29udGludWU7CisJCQkJ CQkJCX0KKworCQkJCQkJCQkvKgorCQkJCQkJCQkgKiBOb3cgY2hlY2sgd2hl dGhlciB0aGUgbG93ZXIgYm91bmRhcnkgaXMgYmVsb3cgdGhlIGNvbnN0YW50 IChpbiB0aGF0CisJCQkJCQkJCSAqIGNhc2UgaXQncyBhIHBhcnRpYWwgbWF0 Y2gpLgorCQkJCQkJCQkgKgorCQkJCQkJCQkgKiBYWFggV2UgbmVlZCB0byBk byB0aGlzIGJlY2F1c2Ugb2YgdGhlIE9SIGNsYXVzZXMgKHdoaWNoIHN0YXJ0 IHdpdGggbm8KKwkJCQkJCQkJICogICAgIG1hdGNoZXMgYW5kIHdlIGluY3Jl bWVudGFsbHkgYWRkIG1vcmUgYW5kIG1vcmUgbWF0Y2hlcyksIGJ1dCBtYXli ZQorCQkJCQkJCQkgKiAgICAgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGUgY2hl Y2sgYW5kIGNhbiBqdXN0IGRvIFVQREFURV9SRVNVTFQ/CisJCQkJCQkJCSAq LworCQkJCQkJCQl0bXAgPSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNv bGwoJm9wcHJvYywKKwkJCQkJCQkJCQkJCQkJCQkJIERFRkFVTFRfQ09MTEFU SU9OX09JRCwKKwkJCQkJCQkJCQkJCQkJCQkJIGNzdC0+Y29uc3R2YWx1ZSwK KwkJCQkJCQkJCQkJCQkJCQkJIG1pbnZhbCkpOworCisJCQkJCQkJCWlmICh0 bXApCisJCQkJCQkJCQkvKiBwYXJ0aWFsIG1hdGNoICovCisJCQkJCQkJCQlV UERBVEVfUkVTVUxUKG1hdGNoZXNbaV0sIE1WU1RBVFNfTUFUQ0hfRlVMTCwg aXNfb3IpOworCiAJCQkJCQkJfQogCQkJCQkJCWJyZWFrOwogCkBAIC0zMDgy LDggKzQzMzUsMjkgQEAgdXBkYXRlX21hdGNoX2JpdG1hcF9oaXN0b2dyYW0o UGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCQkJCQkJCQl0 bXAgPSAhKG1pbmNhY2hlZCAmIDB4MDIpOwkvKiBleHRyYWN0IHRoZSByZXN1 bHQgKi8KIAogCQkJCQkJCQlpZiAodG1wKQorCQkJCQkJCQl7CiAJCQkJCQkJ CQkvKiBwYXJ0aWFsIG1hdGNoICovCiAJCQkJCQkJCQlVUERBVEVfUkVTVUxU KG1hdGNoZXNbaV0sIE1WU1RBVFNfTUFUQ0hfUEFSVElBTCwgaXNfb3IpOwor CQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCX0KKworCQkJCQkJCQkvKgor CQkJCQkJCQkgKiBOb3cgY2hlY2sgd2hldGhlciB0aGUgbG93ZXIgYm91bmRh cnkgaXMgYmVsb3cgdGhlIGNvbnN0YW50IChpbiB0aGF0CisJCQkJCQkJCSAq IGNhc2UgaXQncyBhIHBhcnRpYWwgbWF0Y2gpLgorCQkJCQkJCQkgKgorCQkJ CQkJCQkgKiBYWFggV2UgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2Ugb2YgdGhl IE9SIGNsYXVzZXMgKHdoaWNoIHN0YXJ0IHdpdGggbm8KKwkJCQkJCQkJICog ICAgIG1hdGNoZXMgYW5kIHdlIGluY3JlbWVudGFsbHkgYWRkIG1vcmUgYW5k IG1vcmUgbWF0Y2hlcyksIGJ1dCBtYXliZQorCQkJCQkJCQkgKiAgICAgd2Ug ZG9uJ3QgbmVlZCB0byBkbyB0aGUgY2hlY2sgYW5kIGNhbiBqdXN0IGRvIFVQ REFURV9SRVNVTFQ/CisJCQkJCQkJCSAqLworCQkJCQkJCQl0bXAgPSBEYXR1 bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJm9wcHJvYywKKwkJCQkJCQkJ CQkJCQkJCQkJIERFRkFVTFRfQ09MTEFUSU9OX09JRCwKKwkJCQkJCQkJCQkJ CQkJCQkJIG1pbnZhbCwKKwkJCQkJCQkJCQkJCQkJCQkJIGNzdC0+Y29uc3R2 YWx1ZSkpOworCisJCQkJCQkJCWlmICh0bXApCisJCQkJCQkJCQkvKiBwYXJ0 aWFsIG1hdGNoICovCisJCQkJCQkJCQlVUERBVEVfUkVTVUxUKG1hdGNoZXNb aV0sIE1WU1RBVFNfTUFUQ0hfRlVMTCwgaXNfb3IpOworCiAJCQkJCQkJfQog CQkJCQkJCWVsc2UgLyogKGNvbnN0ID4gdmFyKSAqLwogCQkJCQkJCXsKQEAg LTMxMjksOCArNDQwMywzMCBAQCB1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3Rv Z3JhbShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJCQkJ CQkJCXRtcCA9IChtYXhjYWNoZWQgJiAweDAyKTsJLyogZXh0cmFjdCB0aGUg cmVzdWx0ICovCiAKIAkJCQkJCQkJaWYgKHRtcCkKKwkJCQkJCQkJewogCQkJ CQkJCQkJLyogcGFydGlhbCBtYXRjaCAqLwogCQkJCQkJCQkJVVBEQVRFX1JF U1VMVChtYXRjaGVzW2ldLCBNVlNUQVRTX01BVENIX1BBUlRJQUwsIGlzX29y KTsKKwkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQl9CisKKwkJCQkJCQkJ LyoKKwkJCQkJCQkJICogTm93IGNoZWNrIHdoZXRoZXIgdGhlIHVwcGVyIGJv dW5kYXJ5IGlzIGJlbG93IHRoZSBjb25zdGFudCAoaW4gdGhhdAorCQkJCQkJ CQkgKiBjYXNlIGl0J3MgYSBwYXJ0aWFsIG1hdGNoKS4KKwkJCQkJCQkJICoK KwkJCQkJCQkJICogWFhYIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIG9m IHRoZSBPUiBjbGF1c2VzICh3aGljaCBzdGFydCB3aXRoIG5vCisJCQkJCQkJ CSAqICAgICBtYXRjaGVzIGFuZCB3ZSBpbmNyZW1lbnRhbGx5IGFkZCBtb3Jl IGFuZCBtb3JlIG1hdGNoZXMpLCBidXQgbWF5YmUKKwkJCQkJCQkJICogICAg IHdlIGRvbid0IG5lZWQgdG8gZG8gdGhlIGNoZWNrIGFuZCBjYW4ganVzdCBk byBVUERBVEVfUkVTVUxUPworCQkJCQkJCQkgKi8KKwkJCQkJCQkJdG1wID0g RGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZvcHByb2MsCisJCQkJ CQkJCQkJCQkJCQkJCSBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJ CQkJCQkJCQkJCSBjc3QtPmNvbnN0dmFsdWUsCisJCQkJCQkJCQkJCQkJCQkJ CSBtYXh2YWwpKTsKKworCQkJCQkJCQlpZiAodG1wKQorCQkJCQkJCQkJLyog cGFydGlhbCBtYXRjaCAqLworCQkJCQkJCQkJVVBEQVRFX1JFU1VMVChtYXRj aGVzW2ldLCBNVlNUQVRTX01BVENIX0ZVTEwsIGlzX29yKTsKKwkJCQkJCQkJ CWNvbnRpbnVlOworCiAJCQkJCQkJfQogCQkJCQkJCWJyZWFrOwogCkBAIC0z MTk1LDYgKzQ0OTEsNyBAQCB1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3Jh bShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJCQkJCQll bHNlCiAJCQkJCQkJCXRtcCA9IChtYXhjYWNoZWQgJiAweDAyKTsJLyogZXh0 cmFjdCB0aGUgcmVzdWx0ICovCiAKKwogCQkJCQkJCWlmICh0bXApCiAJCQkJ CQkJewogCQkJCQkJCQkvKiBubyBtYXRjaCAqLwpAQCAtMzI0Niw2NCArNDU0 Myw1NyBAQCB1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJCQkJVVBEQVRFX1JFU1VM VChtYXRjaGVzW2ldLCBNVlNUQVRTX01BVENIX05PTkUsIGlzX29yKTsKIAkJ CX0KIAkJfQotCQllbHNlIGlmIChvcl9jbGF1c2UoY2xhdXNlKSB8fCBhbmRf Y2xhdXNlKGNsYXVzZSkpCisJCWVsc2UgaWYgKG9yX2NsYXVzZShjbGF1c2Up IHx8IGFuZF9jbGF1c2UoY2xhdXNlKSB8fCBub3RfY2xhdXNlKGNsYXVzZSkp CiAJCXsKIAkJCS8qIEFORC9PUiBjbGF1c2UsIHdpdGggYWxsIGNsYXVzZXMg Y29tcGF0aWJsZSB3aXRoIHRoZSBzZWxlY3RlZCBNViBzdGF0ICovCiAKIAkJ CWludAkJCWk7Ci0JCQlCb29sRXhwciAgICpvcmNsYXVzZSAgPSAoKEJvb2xF eHByKiljbGF1c2UpOwotCQkJTGlzdAkgICAqb3JjbGF1c2VzID0gb3JjbGF1 c2UtPmFyZ3M7CisJCQlMaXN0CSAgICp0bXBfY2xhdXNlcyA9ICgoQm9vbEV4 cHIqKWNsYXVzZSktPmFyZ3M7CiAKIAkJCS8qIG1hdGNoL21pc21hdGNoIGJp dG1hcCBmb3IgZWFjaCBidWNrZXQgKi8KLQkJCWludAlvcl9ubWF0Y2hlcyA9 IDA7Ci0JCQljaGFyICogb3JfbWF0Y2hlcyA9IE5VTEw7CisJCQlpbnQJdG1w X25tYXRjaGVzID0gMDsKKwkJCWNoYXIgKiB0bXBfbWF0Y2hlcyA9IE5VTEw7 CiAKLQkJCUFzc2VydChvcmNsYXVzZXMgIT0gTklMKTsKLQkJCUFzc2VydChs aXN0X2xlbmd0aChvcmNsYXVzZXMpID49IDIpOworCQkJQXNzZXJ0KHRtcF9j bGF1c2VzICE9IE5JTCk7CisJCQlBc3NlcnQoKGxpc3RfbGVuZ3RoKHRtcF9j bGF1c2VzKSA+PSAyKSB8fCAobm90X2NsYXVzZShjbGF1c2UpICYmIChsaXN0 X2xlbmd0aCh0bXBfY2xhdXNlcyk9PTEpKSk7CiAKIAkJCS8qIG51bWJlciBv ZiBtYXRjaGluZyBidWNrZXRzICovCi0JCQlvcl9ubWF0Y2hlcyA9IG12aGlz dC0+bmJ1Y2tldHM7CisJCQl0bXBfbm1hdGNoZXMgPSAob3JfY2xhdXNlKGNs YXVzZSkpID8gMCA6IG12aGlzdC0+bmJ1Y2tldHM7CiAKLQkJCS8qIGJ5IGRl ZmF1bHQgbm9uZSBvZiB0aGUgYnVja2V0cyBtYXRjaGVzIHRoZSBjbGF1c2Vz ICovCi0JCQlvcl9tYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiBv cl9ubWF0Y2hlcyk7CisJCQkvKiBieSBkZWZhdWx0IG5vbmUgb2YgdGhlIGJ1 Y2tldHMgbWF0Y2hlcyB0aGUgY2xhdXNlcyAoT1IgY2xhdXNlKSAqLworCQkJ dG1wX21hdGNoZXMgPSBwYWxsb2MwKHNpemVvZihjaGFyKSAqIG12aGlzdC0+ bmJ1Y2tldHMpOwogCi0JCQlpZiAob3JfY2xhdXNlKGNsYXVzZSkpCi0JCQl7 Ci0JCQkJLyogT1IgY2xhdXNlcyBhc3N1bWUgbm90aGluZyBtYXRjaGVzLCBp bml0aWFsbHkgKi8KLQkJCQltZW1zZXQob3JfbWF0Y2hlcywgTVZTVEFUU19N QVRDSF9OT05FLCBzaXplb2YoY2hhcikqb3Jfbm1hdGNoZXMpOwotCQkJCW9y X25tYXRjaGVzID0gMDsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKiBB TkQgY2xhdXNlcyBhc3N1bWUgbm90aGluZyBtYXRjaGVzLCBpbml0aWFsbHkg Ki8KLQkJCQltZW1zZXQob3JfbWF0Y2hlcywgTVZTVEFUU19NQVRDSF9GVUxM LCBzaXplb2YoY2hhcikqb3Jfbm1hdGNoZXMpOwotCQkJfQorCQkJLyogYnV0 IEFORCAoYW5kIE5PVCkgY2xhdXNlcyBhc3N1bWUgZXZlcnl0aGluZyBtYXRj aGVzLCBpbml0aWFsbHkgKi8KKwkJCWlmICghIG9yX2NsYXVzZShjbGF1c2Up KQorCQkJCW1lbXNldCh0bXBfbWF0Y2hlcywgTVZTVEFUU19NQVRDSF9GVUxM LCBzaXplb2YoY2hhcikqbXZoaXN0LT5uYnVja2V0cyk7CiAKIAkJCS8qIGJ1 aWxkIHRoZSBtYXRjaCBiaXRtYXAgZm9yIHRoZSBPUi1jbGF1c2VzICovCi0J CQlvcl9ubWF0Y2hlcyA9IHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFt KHJvb3QsIG9yY2xhdXNlcywKKwkJCXRtcF9ubWF0Y2hlcyA9IHVwZGF0ZV9t YXRjaF9iaXRtYXBfaGlzdG9ncmFtKHJvb3QsIHRtcF9jbGF1c2VzLAogCQkJ CQkJCQkJCXN0YWtleXMsIG12aGlzdCwKLQkJCQkJCQkJCQlvcl9ubWF0Y2hl cywgb3JfbWF0Y2hlcywgb3JfY2xhdXNlKGNsYXVzZSkpOworCQkJCQkJCQkJ CXRtcF9ubWF0Y2hlcywgdG1wX21hdGNoZXMsIG9yX2NsYXVzZShjbGF1c2Up KTsKIAogCQkJLyogbWVyZ2UgdGhlIGJpdG1hcCBpbnRvIHRoZSBleGlzdGlu ZyBvbmUqLwogCQkJZm9yIChpID0gMDsgaSA8IG12aGlzdC0+bmJ1Y2tldHM7 IGkrKykKIAkJCXsKKwkJCQkvKiBpZiB0aGlzIGlzIGEgTk9UIGNsYXVzZSwg d2UgbmVlZCB0byBpbnZlcnQgdGhlIHJlc3VsdHMgZmlyc3QgKi8KKwkJCQlp ZiAobm90X2NsYXVzZShjbGF1c2UpKQorCQkJCQl0bXBfbWF0Y2hlc1tpXSA9 IChNVlNUQVRTX01BVENIX0ZVTEwgLSB0bXBfbWF0Y2hlc1tpXSk7CisKIAkJ CQkvKgogCQkJCSAqIFRvIEFORC1tZXJnZSB0aGUgYml0bWFwcywgYSBNSU4o KSBzZW1hbnRpY3MgaXMgdXNlZC4KIAkJCQkgKiBGb3IgT1ItbWVyZ2UsIHVz ZSBNQVgoKS4KIAkJCQkgKgogCQkJCSAqIEZJWE1FIHRoaXMgZG9lcyBub3Qg ZGVjcmVhc2UgdGhlIG51bWJlciBvZiBtYXRjaGVzCiAJCQkJICovCi0JCQkJ VVBEQVRFX1JFU1VMVChtYXRjaGVzW2ldLCBvcl9tYXRjaGVzW2ldLCBpc19v cik7CisJCQkJVVBEQVRFX1JFU1VMVChtYXRjaGVzW2ldLCB0bXBfbWF0Y2hl c1tpXSwgaXNfb3IpOwogCQkJfQogCi0JCQlwZnJlZShvcl9tYXRjaGVzKTsK LQorCQkJcGZyZWUodG1wX21hdGNoZXMpOwogCQl9CiAJCWVsc2UKIAkJCWVs b2coRVJST1IsICJ1bmtub3duIGNsYXVzZSB0eXBlOiAlZCIsIGNsYXVzZS0+ dHlwZSk7CiAJfQogCi0JLyogZnJlZSB0aGUgY2FsbCBjYWNoZSAqLwogCXBm cmVlKGNhbGxjYWNoZSk7CiAKICNpZmRlZiBERUJVR19NVkhJU1QKQEAgLTMz MTIsMyArNDYwMiwzNjMgQEAgdXBkYXRlX21hdGNoX2JpdG1hcF9oaXN0b2dy YW0oUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAKIAlyZXR1 cm4gbm1hdGNoZXM7CiB9CisKKy8qCisgKiBXYWxrIHRocm91Z2ggY2xhdXNl cyBhbmQga2VlcCBvbmx5IHRob3NlIGNvdmVyZWQgYnkgYXQgbGVhc3QKKyAq IG9uZSBvZiB0aGUgc3RhdGlzdGljcy4KKyAqLworc3RhdGljIExpc3QgKgor ZmlsdGVyX2NsYXVzZXMoUGxhbm5lckluZm8gKnJvb3QsIE9pZCB2YXJSZWxp ZCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkgICBpbnQgdHlwZSwg TGlzdCAqc3RhdHMsIExpc3QgKmNsYXVzZXMsIEJpdG1hcHNldCAqKmF0dG51 bXMpCit7CisJTGlzdENlbGwgICAqYzsKKwlMaXN0Q2VsbCAgICpzOworCisJ LyogcmVzdWx0cyAobGlzdCBvZiBjb21wYXRpYmxlIGNsYXVzZXMsIGF0dG51 bXMpICovCisJTGlzdAkgICAqcmNsYXVzZXMgPSBOSUw7CisKKwlmb3JlYWNo IChjLCBjbGF1c2VzKQorCXsKKwkJTm9kZSAqY2xhdXNlID0gKE5vZGUqKWxm aXJzdChjKTsKKwkJQml0bWFwc2V0ICpjbGF1c2VfYXR0bnVtcyA9IE5VTEw7 CisJCUluZGV4IHJlbGlkOworCisJCS8qCisJCSAqIFRoZSBjbGF1c2UgaGFz IHRvIGJlIG12LWNvbXBhdGlibGUgKHN1aXRhYmxlIG9wZXJhdG9ycyBldGMu KS4KKwkJICovCisJCWlmICghIGNsYXVzZV9pc19tdl9jb21wYXRpYmxlKHJv b3QsIGNsYXVzZSwgdmFyUmVsaWQsCisJCQkJCQkJICZyZWxpZCwgJmNsYXVz ZV9hdHRudW1zLCBzamluZm8sIHR5cGUpKQorCQkJCWVsb2coRVJST1IsICJz aG91bGQgbm90IGdldCBub24tbXYtY29tcGF0aWJsZSBjbHVhc2UiKTsKKwor CQkvKiBpcyB0aGVyZSBhIHN0YXRpc3RpY3MgY292ZXJpbmcgdGhpcyBjbGF1 c2U/ICovCisJCWZvcmVhY2ggKHMsIHN0YXRzKQorCQl7CisJCQlpbnQgaywg bWF0Y2hlcyA9IDA7CisJCQlNVlN0YXRpc3RpY0luZm8JKnN0YXQgPSAoTVZT dGF0aXN0aWNJbmZvICopbGZpcnN0KHMpOworCisJCQlmb3IgKGsgPSAwOyBr IDwgc3RhdC0+c3Rha2V5cy0+ZGltMTsgaysrKQorCQkJeworCQkJCWlmIChi bXNfaXNfbWVtYmVyKHN0YXQtPnN0YWtleXMtPnZhbHVlc1trXSwKKwkJCQkJ CQkJICBjbGF1c2VfYXR0bnVtcykpCisJCQkJCW1hdGNoZXMgKz0gMTsKKwkJ CX0KKworCQkJLyoKKwkJCSAqIFRoZSBjbGF1c2UgaXMgY29tcGF0aWJsZSBp ZiBhbGwgYXR0cmlidXRlcyBpdCByZWZlcmVuY2VzCisJCQkgKiBhcmUgY292 ZXJlZCBieSB0aGUgc3RhdGlzdGljcy4KKwkJCSAqLworCQkJaWYgKGJtc19u dW1fbWVtYmVycyhjbGF1c2VfYXR0bnVtcykgPT0gbWF0Y2hlcykKKwkJCXsK KwkJCQkqYXR0bnVtcyA9IGJtc191bmlvbigqYXR0bnVtcywgY2xhdXNlX2F0 dG51bXMpOworCQkJCXJjbGF1c2VzID0gbGFwcGVuZChyY2xhdXNlcywgY2xh dXNlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWJtc19mcmVlKGNs YXVzZV9hdHRudW1zKTsKKwl9CisKKwkvKiB3ZSBjYW4ndCBoYXZlIG1vcmUg Y29tcGF0aWJsZSBjb25kaXRpb25zIHRoYW4gc291cmNlIGNvbmRpdGlvbnMg Ki8KKwlBc3NlcnQobGlzdF9sZW5ndGgoY2xhdXNlcykgPj0gbGlzdF9sZW5n dGgocmNsYXVzZXMpKTsKKworCXJldHVybiByY2xhdXNlczsKK30KKworCisv KgorICogV2FsayB0aHJvdWdoIHN0YXRpc3RpY3MgYW5kIG9ubHkga2VlcCB0 aG9zZSBjb3ZlcmluZyBhdCBsZWFzdAorICogb25lIG5ldyBhdHRyaWJ1dGUg KGV4Y2x1ZGluZyBjb25kaXRpb25zKSBhbmQgYXQgdHdvIGF0dHJpYnV0ZXMK KyAqIGluIGJvdGggY2xhdXNlcyBhbmQgY29uZGl0aW9ucy4KKyAqCisgKiBU aGlzIGNoZWNrIG1pZ2h0IGJlIG1hZGUgbW9yZSBzdHJpY3QgYnkgY2hlY2tp bmcgYWdhaW5zdCBpbmRpdmlkdWFsCisgKiBjbGF1c2VzLCBiZWNhdXNlIGJ5 IHVzaW5nIHRoZSBiaXRtYXBzZXRzIG9mIGFsbCBhdHRudW1zIHdlIG1heQor ICogYWN0dWFsbHkgdXNlIGF0dG51bXMgZnJvbSBjbGF1c2VzIHRoYXQgYXJl IG5vdCBjb3ZlcmVkIGJ5IHRoZQorICogc3RhdGlzdGljcy4gRm9yIGV4YW1w bGUsIHdlIG1heSBoYXZlIGEgY29uZGl0aW9uCisgKgorICogICAgKGE9MSBB TkQgYj0yKQorICoKKyAqIGFuZCBhIG5ldyBjbGF1c2UKKyAqCisgKiAgICAo Yz0xIEFORCBkPTEpCisgKgorICogV2l0aCBvbmx5IGJpdG1hcHNldHMsIHN0 YXRpc3RpY3Mgb24gW2IsY10gd2lsbCBwYXNzIHRocm91Z2ggdGhpcworICog KGFzc3VtaW5nIHRoZXJlIGFyZSBzb21lIHN0YXRpc3RpY3MgY292ZXJpbmcg Ym90aCBjbGFzZXMpLgorICoKKyAqIFRPRE8gRG8gdGhlIG1vcmUgc3RyaWN0 IGNoZWNrLgorICovCitzdGF0aWMgTGlzdCAqCitmaWx0ZXJfc3RhdHMoTGlz dCAqc3RhdHMsIEJpdG1hcHNldCAqbmV3X2F0dG51bXMsIEJpdG1hcHNldCAq YWxsX2F0dG51bXMpCit7CisJTGlzdENlbGwgICAqczsKKwlMaXN0CSAgICpz dGF0c19maWx0ZXJlZCA9IE5JTDsKKworCWZvcmVhY2ggKHMsIHN0YXRzKQor CXsKKwkJaW50IGs7CisJCWludCBtYXRjaGVzX25ldyA9IDAsCisJCQltYXRj aGVzX2FsbCA9IDA7CisKKwkJTVZTdGF0aXN0aWNJbmZvCSpzdGF0ID0gKE1W U3RhdGlzdGljSW5mbyAqKWxmaXJzdChzKTsKKworCQkvKiBzZWUgaG93IG1h bnkgYXR0cmlidXRlcyB0aGUgc3RhdGlzdGljcyBjb3ZlcnMgKi8KKwkJZm9y IChrID0gMDsgayA8IHN0YXQtPnN0YWtleXMtPmRpbTE7IGsrKykKKwkJewor CQkJLyogYXR0cmlidXRlcyBmcm9tIG5ldyBjbGF1c2VzICovCisJCQlpZiAo Ym1zX2lzX21lbWJlcihzdGF0LT5zdGFrZXlzLT52YWx1ZXNba10sIG5ld19h dHRudW1zKSkKKwkJCQltYXRjaGVzX25ldyArPSAxOworCisJCQkvKiBhdHRy aWJ1dGVzIGZyb20gb25kaXRpb25zICovCisJCQlpZiAoYm1zX2lzX21lbWJl cihzdGF0LT5zdGFrZXlzLT52YWx1ZXNba10sIGFsbF9hdHRudW1zKSkKKwkJ CQltYXRjaGVzX2FsbCArPSAxOworCQl9CisKKwkJLyogY2hlY2sgd2UgaGF2 ZSBlbm91Z2ggYXR0cmlidXRlcyBmb3IgdGhpcyBzdGF0aXN0aWNzICovCisJ CWlmICgobWF0Y2hlc19uZXcgPj0gMSkgJiYgKG1hdGNoZXNfYWxsID49IDIp KQorCQkJc3RhdHNfZmlsdGVyZWQgPSBsYXBwZW5kKHN0YXRzX2ZpbHRlcmVk LCBzdGF0KTsKKwl9CisKKwkvKiB3ZSBjYW4ndCBoYXZlIG1vcmUgdXNlZnVs IHN0YXRzIHRoYW4gd2UgaGFkIG9yaWdpbmFsbHkgKi8KKwlBc3NlcnQobGlz dF9sZW5ndGgoc3RhdHMpID49IGxpc3RfbGVuZ3RoKHN0YXRzX2ZpbHRlcmVk KSk7CisKKwlyZXR1cm4gc3RhdHNfZmlsdGVyZWQ7Cit9CisKK3N0YXRpYyBN VlN0YXRpc3RpY0luZm8gKgorbWFrZV9zdGF0c19hcnJheShMaXN0ICpzdGF0 cywgaW50ICpubXZzdGF0cykKK3sKKwlpbnQgaTsKKwlMaXN0Q2VsbCAgICps OworCisJTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzID0gTlVMTDsKKwkqbm12 c3RhdHMgPSBsaXN0X2xlbmd0aChzdGF0cyk7CisKKwltdnN0YXRzCisJCT0g KE1WU3RhdGlzdGljSW5mbyopcGFsbG9jMCgoKm5tdnN0YXRzKSAqIHNpemVv ZihNVlN0YXRpc3RpY0luZm8pKTsKKworCWkgPSAwOworCWZvcmVhY2ggKGws IHN0YXRzKQorCXsKKwkJTVZTdGF0aXN0aWNJbmZvCSpzdGF0ID0gKE1WU3Rh dGlzdGljSW5mbyAqKWxmaXJzdChsKTsKKwkJbWVtY3B5KCZtdnN0YXRzW2kr K10sIHN0YXQsIHNpemVvZihNVlN0YXRpc3RpY0luZm8pKTsKKwl9CisKKwly ZXR1cm4gbXZzdGF0czsKK30KKworc3RhdGljIEJpdG1hcHNldCAqKgorbWFr ZV9zdGF0c19hdHRudW1zKE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywgaW50 IG5tdnN0YXRzKQoreworCWludAkJCWksIGo7CisJQml0bWFwc2V0ICoqc3Rh dHNfYXR0bnVtcyA9IE5VTEw7CisKKwlBc3NlcnQobm12c3RhdHMgPiAwKTsK KworCS8qIGJ1aWxkIGJpdG1hcHMgb2YgYXR0bnVtcyBmb3IgdGhlIHN0YXRz IChlYXNpZXIgdG8gY29tcGFyZSkgKi8KKwlzdGF0c19hdHRudW1zID0gKEJp dG1hcHNldCAqKilwYWxsb2MwKG5tdnN0YXRzICogc2l6ZW9mKEJpdG1hcHNl dCopKTsKKworCWZvciAoaSA9IDA7IGkgPCBubXZzdGF0czsgaSsrKQorCQlm b3IgKGogPSAwOyBqIDwgbXZzdGF0c1tpXS5zdGFrZXlzLT5kaW0xOyBqKysp CisJCQlzdGF0c19hdHRudW1zW2ldCisJCQkJPSBibXNfYWRkX21lbWJlcihz dGF0c19hdHRudW1zW2ldLAorCQkJCQkJCQkgbXZzdGF0c1tpXS5zdGFrZXlz LT52YWx1ZXNbal0pOworCisJcmV0dXJuIHN0YXRzX2F0dG51bXM7Cit9CisK KworLyoKKyAqIE5vdyBsZXQncyByZW1vdmUgcmVkdW5kYW50IHN0YXRpc3Rp Y3MsIGNvdmVyaW5nIHRoZSBzYW1lIGNvbHVtbnMKKyAqIGFzIHNvbWUgb3Ro ZXIgc3RhdHMsIHdoZW4gcmVzdHJpY3RlZCB0byB0aGUgYXR0cmlidXRlcyBm cm9tCisgKiByZW1haW5pbmcgY2xhdXNlcy4KKyAqCisgKiBJZiBzdGF0aXN0 aWNzIFMxIGNvdmVycyBTMiAoY292ZXJzIFMyIGF0dHJpYnV0ZXMgYW5kIHBv c3NpYmx5CisgKiBzb21lIG1vcmUpLCB3ZSBjYW4gcHJvYmFibHkgcmVtb3Zl IFMyLiBXaGF0IGFjdHVhbGx5IG1hdHRlcnMgYXJlCisgKiBhdHRyaWJ1dGVz IGZyb20gY292ZXJlZCBjbGF1c2VzIChub3QgYWxsIHRoZSBhdHRyaWJ1dGVz KS4gVGhpcworICogbWlnaHQgaG93ZXZlciBwcmVmZXIgbGFyZ2VyLCBhbmQg dGh1cyBsZXNzIGFjY3VyYXRlLCBzdGF0aXN0aWNzLgorICoKKyAqIFdoZW4g YSByZWR1bmRhbmN5IGlzIGRldGVjdGVkLCB3ZSBzaW1wbHkga2VlcCB0aGUg c21hbGxlcgorICogc3RhdGlzdGljcyAobGVzcyBudW1iZXIgb2YgY29sdW1u cyksIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXQncworICogbW9yZSBhY2N1 cmF0ZSBhbmQgZmFzdGVyIHRvIHByb2Nlc3MuIFRoYXQgbWlnaHQgYmUgaW5j b3JyZWN0IGZvcgorICogdHdvIHJlYXNvbnMgLSBmaXJzdCwgdGhlIGFjY3Vy YWN5IHJlYWxseSBkZXBlbmRzIG9uIG51bWJlciBvZgorICogYnVja2V0cy9N Q1YgaXRlbXMsIG5vdCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMuIFNlY29uZCwg d2UgbWlnaHQKKyAqIHByZWZlciBNQ1YgbGlzdHMgb3ZlciBoaXN0b2dyYW1z IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuCisgKi8KK3N0YXRpYyBMaXN0Kgor ZmlsdGVyX3JlZHVuZGFudF9zdGF0cyhMaXN0ICpzdGF0cywgTGlzdCAqY2xh dXNlcywgTGlzdCAqY29uZGl0aW9ucykKK3sKKwlpbnQgaSwgaiwgbm12c3Rh dHM7CisKKwlNVlN0YXRpc3RpY0luZm8JICAgKm12c3RhdHM7CisJYm9vbAkJ CSAgICpyZWR1bmRhbnQ7CisJQml0bWFwc2V0CQkgICoqc3RhdHNfYXR0bnVt czsKKwlCaXRtYXBzZXQJCSAgICp2YXJhdHRub3M7CisJSW5kZXgJCQkJcmVs aWQ7CisKKwlBc3NlcnQobGlzdF9sZW5ndGgoc3RhdHMpID4gMCk7CisJQXNz ZXJ0KGxpc3RfbGVuZ3RoKGNsYXVzZXMpID4gMCk7CisKKwkvKgorCSAqIFdl J2xsIGNvbnZlcnQgdGhlIGxpc3Qgb2Ygc3RhdGlzdGljcyBpbnRvIGFuIGFy cmF5IG5vdywgYmVjYXVzZQorCSAqIHRoZSByZWR1Y3Rpb24gb2YgcmVkdW5k YW50IHN0YXRpc3RpY3MgaXMgZWFzaWVyIHRvIGRvIHRoYXQgd2F5CisJICog KHdlIGNhbiBtYXJrIHByZXZpb3VzIHN0YXRzIGFzIHJlZHVuZGFudCwgZXRj LikuCisJICovCisJbXZzdGF0cyA9IG1ha2Vfc3RhdHNfYXJyYXkoc3RhdHMs ICZubXZzdGF0cyk7CisJc3RhdHNfYXR0bnVtcyA9IG1ha2Vfc3RhdHNfYXR0 bnVtcyhtdnN0YXRzLCBubXZzdGF0cyk7CisKKwkvKiBieSBkZWZhdWx0LCBu b25lIG9mIHRoZSBzdGF0cyBpcyByZWR1bmRhbnQgKHNvIHBhbGxvYzApICov CisJcmVkdW5kYW50ID0gcGFsbG9jMChubXZzdGF0cyAqIHNpemVvZihib29s KSk7CisKKwkvKgorCSAqIFdlIG9ubHkgZXhwZWN0IGEgc2luZ2xlIHJlbGlk IGhlcmUsIGFuZCBhbHNvIHdlIHNob3VsZCBnZXQgdGhlCisJICogc2FtZSBy ZWxpZCBmcm9tIGNsYXVzZXMgYW5kIGNvbmRpdGlvbnMgKGJ1dCB3ZSBnZXQg aXQgZnJvbQorCSAqIGNsYXVzZXMsIGJlY2F1c2UgdGhvc2UgYXJlIGNlcnRh aW5seSBub24tZW1wdHkpLgorCSAqLworCXJlbGlkID0gYm1zX3NpbmdsZXRv bl9tZW1iZXIocHVsbF92YXJub3MoKE5vZGUqKWNsYXVzZXMpKTsKKworCS8q CisJICogR2V0IHRoZSB2YXJhdHRub3MgZnJvbSBib3RoIGNvbmRpdGlvbnMg YW5kIGNsYXVzZXMuCisJICoKKwkgKiBUaGlzIHNraXBzIHN5c3RlbSBhdHRy aWJ1dGVzLCBhbHRob3VnaCB0aGF0IHNob3VsZCBiZSBpbXBvc3NpYmxlCisJ ICogdGhhbmtzIHRvIHByZXZpb3VzIGZpbHRlcmluZyBvdXQgb2YgaW5jb21w YXRpYmxlIGNsYXVzZXMuCisJICoKKwkgKiBYWFggSXMgdGhhdCByZWFsbHkg dHJ1ZT8KKwkgKi8KKwl2YXJhdHRub3MgPSBibXNfdW5pb24oZ2V0X3ZhcmF0 dG5vcygoTm9kZSopY2xhdXNlcywgcmVsaWQpLAorCQkJCQkJICBnZXRfdmFy YXR0bm9zKChOb2RlKiljb25kaXRpb25zLCByZWxpZCkpOworCisJZm9yIChp ID0gMTsgaSA8IG5tdnN0YXRzOyBpKyspCisJeworCQkvKiBpbnRlcnNlY3Qg d2l0aCBjdXJyZW50IHN0YXRpc3RpY3MgKi8KKwkJQml0bWFwc2V0ICpjdXJy ID0gYm1zX2ludGVyc2VjdChzdGF0c19hdHRudW1zW2ldLCB2YXJhdHRub3Mp OworCisJCS8qIHdhbGsgdGhyb3VnaCAncHJldmlvdXMnIHN0YXRzIGFuZCBj aGVjayByZWR1bmRhbmN5ICovCisJCWZvciAoaiA9IDA7IGogPCBpOyBqKysp CisJCXsKKwkJCS8qIGludGVyc2VjdCB3aXRoIGN1cnJlbnQgc3RhdGlzdGlj cyAqLworCQkJQml0bWFwc2V0ICpwcmV2OworCisJCQkvKiBza2lwIHN0YXRz IGFscmVhZHkgaWRlbnRpZmllZCBhcyByZWR1bmRhbnQgKi8KKwkJCWlmIChy ZWR1bmRhbnRbal0pCisJCQkJY29udGludWU7CisKKwkJCXByZXYgPSBibXNf aW50ZXJzZWN0KHN0YXRzX2F0dG51bXNbal0sIHZhcmF0dG5vcyk7CisKKwkJ CXN3aXRjaCAoYm1zX3N1YnNldF9jb21wYXJlKGN1cnIsIHByZXYpKQorCQkJ eworCQkJCWNhc2UgQk1TX0VRVUFMOgorCQkJCQkvKgorCQkJCQkgKiBVc2Ug dGhlIHNtYWxsZXIgb25lIChob3BlZnVsbHkgbW9yZSBhY2N1cmF0ZSkuCisJ CQkJCSAqIElmIGJvdGggaGF2ZSB0aGUgc2FtZSBzaXplLCB1c2UgdGhlIGZp cnN0IG9uZS4KKwkJCQkJICovCisJCQkJCWlmIChtdnN0YXRzW2ldLnN0YWtl eXMtPmRpbTEgPj0gbXZzdGF0c1tqXS5zdGFrZXlzLT5kaW0xKQorCQkJCQkJ cmVkdW5kYW50W2ldID0gVFJVRTsKKwkJCQkJZWxzZQorCQkJCQkJcmVkdW5k YW50W2pdID0gVFJVRTsKKworCQkJCQlicmVhazsKKworCQkJCWNhc2UgQk1T X1NVQlNFVDE6IC8qIGN1cnIgaXMgc3Vic2V0IG9mIHByZXYgKi8KKwkJCQkJ cmVkdW5kYW50W2ldID0gVFJVRTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNl IEJNU19TVUJTRVQyOiAvKiBwcmV2IGlzIHN1YnNldCBvZiBjdXJyICovCisJ CQkJCXJlZHVuZGFudFtqXSA9IFRSVUU7CisJCQkJCWJyZWFrOworCisJCQkJ Y2FzZSBCTVNfRElGRkVSRU5UOgorCQkJCQkvKiBkbyBub3RoaW5nIC0ga2Vl cCBib3RoIHN0YXRzICovCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlibXNf ZnJlZShwcmV2KTsKKwkJfQorCisJCWJtc19mcmVlKGN1cnIpOworCX0KKwor CS8qIGNhbid0IHJlZHVjZSBhbGwgc3RhdGlzdGljcyAoYXQgbGVhc3Qgb25l IGhhcyB0byByZW1haW4pICovCisJQXNzZXJ0KG5tdnN0YXRzID4gMCk7CisK KwkvKiBub3csIGxldCdzIHJlbW92ZSB0aGUgcmVkdWNlZCBzdGF0aXN0aWNz IGZyb20gdGhlIGFycmF5cyAqLworCWxpc3RfZnJlZShzdGF0cyk7CisJc3Rh dHMgPSBOSUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7IGkrKykK Kwl7CisJCU1WU3RhdGlzdGljSW5mbyAqaW5mbzsKKworCQlwZnJlZShzdGF0 c19hdHRudW1zW2ldKTsKKworCQlpZiAocmVkdW5kYW50W2ldKQorCQkJY29u dGludWU7CisKKwkJaW5mbyA9IG1ha2VOb2RlKE1WU3RhdGlzdGljSW5mbyk7 CisJCW1lbWNweShpbmZvLCAmbXZzdGF0c1tpXSwgc2l6ZW9mKE1WU3RhdGlz dGljSW5mbykpOworCisJCXN0YXRzID0gbGFwcGVuZChzdGF0cywgaW5mbyk7 CisJfQorCisJcGZyZWUobXZzdGF0cyk7CisJcGZyZWUoc3RhdHNfYXR0bnVt cyk7CisJcGZyZWUocmVkdW5kYW50KTsKKworCXJldHVybiBzdGF0czsKK30K Kworc3RhdGljIE5vZGUqKgorbWFrZV9jbGF1c2VzX2FycmF5KExpc3QgKmNs YXVzZXMsIGludCAqbmNsYXVzZXMpCit7CisJaW50IGk7CisJTGlzdENlbGwg Kmw7CisKKwlOb2RlKiogY2xhdXNlc19hcnJheTsKKworCSpuY2xhdXNlcyA9 IGxpc3RfbGVuZ3RoKGNsYXVzZXMpOworCWNsYXVzZXNfYXJyYXkgPSAoTm9k ZSAqKilwYWxsb2MwKCgqbmNsYXVzZXMpICogc2l6ZW9mKE5vZGUgKikpOwor CisJaSA9IDA7CisJZm9yZWFjaCAobCwgY2xhdXNlcykKKwkJY2xhdXNlc19h cnJheVtpKytdID0gKE5vZGUgKilsZmlyc3QobCk7CisKKwkqbmNsYXVzZXMg PSBpOworCisJcmV0dXJuIGNsYXVzZXNfYXJyYXk7Cit9CisKK3N0YXRpYyBC aXRtYXBzZXQgKioKK21ha2VfY2xhdXNlc19hdHRudW1zKFBsYW5uZXJJbmZv ICpyb290LCBPaWQgdmFyUmVsaWQsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZv LAorCQkJCQkgaW50IHR5cGUsIE5vZGUgKipjbGF1c2VzLCBpbnQgbmNsYXVz ZXMpCit7CisJaW50CQkJaTsKKwlJbmRleAkJcmVsaWQ7CisJQml0bWFwc2V0 ICoqY2xhdXNlc19hdHRudW1zCisJCT0gKEJpdG1hcHNldCAqKilwYWxsb2Mw KG5jbGF1c2VzICogc2l6ZW9mKEJpdG1hcHNldCAqKSk7CisKKwlmb3IgKGkg PSAwOyBpIDwgbmNsYXVzZXM7IGkrKykKKwl7CisJCUJpdG1hcHNldCAqIGF0 dG51bXMgPSBOVUxMOworCisJCWlmICghIGNsYXVzZV9pc19tdl9jb21wYXRp YmxlKHJvb3QsIGNsYXVzZXNbaV0sIHZhclJlbGlkLAorCQkJCQkJCQkJICAm cmVsaWQsICZhdHRudW1zLCBzamluZm8sIHR5cGUpKQorCQkJZWxvZyhFUlJP UiwgInNob3VsZCBub3QgZ2V0IG5vbi1tdi1jb21wYXRpYmxlIGNsdWFzZSIp OworCisJCWNsYXVzZXNfYXR0bnVtc1tpXSA9IGF0dG51bXM7CisJfQorCisJ cmV0dXJuIGNsYXVzZXNfYXR0bnVtczsKK30KKworc3RhdGljIGJvb2wqCitt YWtlX2NvdmVyX21hcChCaXRtYXBzZXQgKipzdGF0c19hdHRudW1zLCBpbnQg bm12c3RhdHMsCisJCQkgICBCaXRtYXBzZXQgKipjbGF1c2VzX2F0dG51bXMs IGludCBuY2xhdXNlcykKK3sKKwlpbnQJCWksIGo7CisJYm9vbCAgICpjb3Zl cl9tYXAJPSAoYm9vbCopcGFsbG9jMChuY2xhdXNlcyAqIG5tdnN0YXRzKTsK KworCWZvciAoaSA9IDA7IGkgPCBubXZzdGF0czsgaSsrKQorCQlmb3IgKGog PSAwOyBqIDwgbmNsYXVzZXM7IGorKykKKwkJCWNvdmVyX21hcFtpICogbmNs YXVzZXMgKyBqXQorCQkJCT0gYm1zX2lzX3N1YnNldChjbGF1c2VzX2F0dG51 bXNbal0sIHN0YXRzX2F0dG51bXNbaV0pOworCisJcmV0dXJuIGNvdmVyX21h cDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jCmluZGV4IDQ1OTM2OGUuLmQ1YmI4MTkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMzQzMSw3 ICszNDMxLDggQEAgY29tcHV0ZV9zZW1pX2FudGlfam9pbl9mYWN0b3JzKFBs YW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJam9pbnF1YWxzLAogCQkJCQkJ CQkJMCwKIAkJCQkJCQkJCWpvaW50eXBlLAotCQkJCQkJCQkJc2ppbmZvKTsK KwkJCQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJCU5JTCk7CiAKIAkvKgogCSAq IEFsc28gZ2V0IHRoZSBub3JtYWwgaW5uZXItam9pbiBzZWxlY3Rpdml0eSBv ZiB0aGUgam9pbiBjbGF1c2VzLgpAQCAtMzQ1NCw3ICszNDU1LDggQEAgY29t cHV0ZV9zZW1pX2FudGlfam9pbl9mYWN0b3JzKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJam9pbnF1YWxzLAogCQkJCQkJCQkJMCwKIAkJCQkJCQkJ CUpPSU5fSU5ORVIsCi0JCQkJCQkJCQkmbm9ybV9zamluZm8pOworCQkJCQkJ CQkJJm5vcm1fc2ppbmZvLAorCQkJCQkJCQkJTklMKTsKIAogCS8qIEF2b2lk IGxlYWtpbmcgYSBsb3Qgb2YgTGlzdENlbGxzICovCiAJaWYgKGpvaW50eXBl ID09IEpPSU5fQU5USSkKQEAgLTM2MjEsNyArMzYyMyw3IEBAIGFwcHJveF90 dXBsZV9jb3VudChQbGFubmVySW5mbyAqcm9vdCwgSm9pblBhdGggKnBhdGgs IExpc3QgKnF1YWxzKQogCQlOb2RlCSAgICpxdWFsID0gKE5vZGUgKikgbGZp cnN0KGwpOwogCiAJCS8qIE5vdGUgdGhhdCBjbGF1c2Vfc2VsZWN0aXZpdHkg d2lsbCBiZSBhYmxlIHRvIGNhY2hlIGl0cyByZXN1bHQgKi8KLQkJc2VsZWMg Kj0gY2xhdXNlX3NlbGVjdGl2aXR5KHJvb3QsIHF1YWwsIDAsIEpPSU5fSU5O RVIsICZzamluZm8pOworCQlzZWxlYyAqPSBjbGF1c2Vfc2VsZWN0aXZpdHko cm9vdCwgcXVhbCwgMCwgSk9JTl9JTk5FUiwgJnNqaW5mbywgTklMKTsKIAl9 CiAKIAkvKiBBcHBseSBpdCB0byB0aGUgaW5wdXQgcmVsYXRpb24gc2l6ZXMg Ki8KQEAgLTM2NTcsNyArMzY1OSw4IEBAIHNldF9iYXNlcmVsX3NpemVfZXN0 aW1hdGVzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCiAJ CQkJCQkJICAgcmVsLT5iYXNlcmVzdHJpY3RpbmZvLAogCQkJCQkJCSAgIDAs CiAJCQkJCQkJICAgSk9JTl9JTk5FUiwKLQkJCQkJCQkgICBOVUxMKTsKKwkJ CQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIE5JTCk7CiAKIAlyZWwtPnJvd3Mg PSBjbGFtcF9yb3dfZXN0KG5yb3dzKTsKIApAQCAtMzY5NCw3ICszNjk3LDgg QEAgZ2V0X3BhcmFtZXRlcml6ZWRfYmFzZXJlbF9zaXplKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJICAgYWxsY2xhdXNl cywKIAkJCQkJCQkgICByZWwtPnJlbGlkLAkJLyogZG8gbm90IHVzZSAwISAq LwogCQkJCQkJCSAgIEpPSU5fSU5ORVIsCi0JCQkJCQkJICAgTlVMTCk7CisJ CQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOSUwpOwogCW5yb3dzID0gY2xh bXBfcm93X2VzdChucm93cyk7CiAJLyogRm9yIHNhZmV0eSwgbWFrZSBzdXJl IHJlc3VsdCBpcyBub3QgbW9yZSB0aGFuIHRoZSBiYXNlIGVzdGltYXRlICov CiAJaWYgKG5yb3dzID4gcmVsLT5yb3dzKQpAQCAtMzgzMiwxMiArMzgzNiwx NCBAQCBjYWxjX2pvaW5yZWxfc2l6ZV9lc3RpbWF0ZShQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJCQkJCQlqb2lucXVhbHMsCiAJCQkJCQkJCQkJMCwKIAkJ CQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJCQkJCQlzamluZm8pOworCQkJCQkJ CQkJCXNqaW5mbywKKwkJCQkJCQkJCQlOSUwpOwogCQlwc2VsZWMgPSBjbGF1 c2VsaXN0X3NlbGVjdGl2aXR5KHJvb3QsCiAJCQkJCQkJCQkJcHVzaGVkcXVh bHMsCiAJCQkJCQkJCQkJMCwKIAkJCQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJ CQkJCQlzamluZm8pOworCQkJCQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJCQlO SUwpOwogCiAJCS8qIEF2b2lkIGxlYWtpbmcgYSBsb3Qgb2YgTGlzdENlbGxz ICovCiAJCWxpc3RfZnJlZShqb2lucXVhbHMpOwpAQCAtMzg0OSw3ICszODU1 LDggQEAgY2FsY19qb2lucmVsX3NpemVfZXN0aW1hdGUoUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJCQkJCQkJcmVzdHJpY3RsaXN0LAogCQkJCQkJCQkJCTAs CiAJCQkJCQkJCQkJam9pbnR5cGUsCi0JCQkJCQkJCQkJc2ppbmZvKTsKKwkJ CQkJCQkJCQlzamluZm8sCisJCQkJCQkJCQkJTklMKTsKIAkJcHNlbGVjID0g MC4wOwkJCS8qIG5vdCB1c2VkLCBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiAJ fQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9v cmNsYXVzZXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL29yY2xh dXNlcy5jCmluZGV4IGVhODMxZjUuLjYyOTllNzUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL29yY2xhdXNlcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL29yY2xhdXNlcy5jCkBAIC0yODAs NyArMjgwLDcgQEAgY29uc2lkZXJfbmV3X29yX2NsYXVzZShQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIHNhdmluZyB3b3JrIGxh dGVyLikKIAkgKi8KIAlvcl9zZWxlYyA9IGNsYXVzZV9zZWxlY3Rpdml0eShy b290LCAoTm9kZSAqKSBvcl9yaW5mbywKLQkJCQkJCQkJICAwLCBKT0lOX0lO TkVSLCBOVUxMKTsKKwkJCQkJCQkJICAwLCBKT0lOX0lOTkVSLCBOVUxMLCBO SUwpOwogCiAJLyoKIAkgKiBUaGUgY2xhdXNlIGlzIG9ubHkgd29ydGggYWRk aW5nIHRvIHRoZSBxdWVyeSBpZiBpdCByZWplY3RzIGEgdXNlZnVsCkBAIC0z NDIsNyArMzQyLDcgQEAgY29uc2lkZXJfbmV3X29yX2NsYXVzZShQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIENvbXB1dGUg aW5uZXItam9pbiBzaXplICovCiAJCW9yaWdfc2VsZWMgPSBjbGF1c2Vfc2Vs ZWN0aXZpdHkocm9vdCwgKE5vZGUgKikgam9pbl9vcl9yaW5mbywKLQkJCQkJ CQkJCQkwLCBKT0lOX0lOTkVSLCAmc2ppbmZvKTsKKwkJCQkJCQkJCQkwLCBK T0lOX0lOTkVSLCAmc2ppbmZvLCBOSUwpOwogCiAJCS8qIEFuZCBoYWNrIGNh Y2hlZCBzZWxlY3Rpdml0eSBzbyBqb2luIHNpemUgcmVtYWlucyB0aGUgc2Ft ZSAqLwogCQlqb2luX29yX3JpbmZvLT5ub3JtX3NlbGVjID0gb3JpZ19zZWxl YyAvIG9yX3NlbGVjOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVu Y3MuYwppbmRleCBlYmIwM2FhLi4zYzU4ZDQyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAtMTYyNSwxMyArMTYyNSwxNSBA QCBib29sdGVzdHNlbChQbGFubmVySW5mbyAqcm9vdCwgQm9vbFRlc3RUeXBl IGJvb2x0ZXN0dHlwZSwgTm9kZSAqYXJnLAogCQkJY2FzZSBJU19OT1RfRkFM U0U6CiAJCQkJc2VsZWMgPSAoZG91YmxlKSBjbGF1c2Vfc2VsZWN0aXZpdHko cm9vdCwgYXJnLAogCQkJCQkJCQkJCQkJCXZhclJlbGlkLAotCQkJCQkJCQkJ CQkJCWpvaW50eXBlLCBzamluZm8pOworCQkJCQkJCQkJCQkJCWpvaW50eXBl LCBzamluZm8sCisJCQkJCQkJCQkJCQkJTklMKTsKIAkJCQlicmVhazsKIAkJ CWNhc2UgSVNfRkFMU0U6CiAJCQljYXNlIElTX05PVF9UUlVFOgogCQkJCXNl bGVjID0gMS4wIC0gKGRvdWJsZSkgY2xhdXNlX3NlbGVjdGl2aXR5KHJvb3Qs IGFyZywKIAkJCQkJCQkJCQkJCQkJICB2YXJSZWxpZCwKLQkJCQkJCQkJCQkJ CQkJICBqb2ludHlwZSwgc2ppbmZvKTsKKwkJCQkJCQkJCQkJCQkJICBqb2lu dHlwZSwgc2ppbmZvLAorCQkJCQkJCQkJCQkJCQkgIE5JTCk7CiAJCQkJYnJl YWs7CiAJCQlkZWZhdWx0OgogCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgYm9vbHRlc3R0eXBlOiAlZCIsCkBAIC02MjU3LDcgKzYyNTksOCBAQCBn ZW5lcmljY29zdGVzdGltYXRlKFBsYW5uZXJJbmZvICpyb290LAogCWluZGV4 U2VsZWN0aXZpdHkgPSBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KHJvb3QsIHNl bGVjdGl2aXR5UXVhbHMsCiAJCQkJCQkJCQkJCSAgaW5kZXgtPnJlbC0+cmVs aWQsCiAJCQkJCQkJCQkJCSAgSk9JTl9JTk5FUiwKLQkJCQkJCQkJCQkJICBO VUxMKTsKKwkJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCQkgIE5JTCk7 CiAKIAkvKgogCSAqIElmIGNhbGxlciBkaWRuJ3QgZ2l2ZSB1cyBhbiBlc3Rp bWF0ZSwgZXN0aW1hdGUgdGhlIG51bWJlciBvZiBpbmRleApAQCAtNjU4Miw3 ICs2NTg1LDggQEAgYnRjb3N0ZXN0aW1hdGUoUEdfRlVOQ1RJT05fQVJHUykK IAkJYnRyZWVTZWxlY3Rpdml0eSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHko cm9vdCwgc2VsZWN0aXZpdHlRdWFscywKIAkJCQkJCQkJCQkJCSAgaW5kZXgt PnJlbC0+cmVsaWQsCiAJCQkJCQkJCQkJCQkgIEpPSU5fSU5ORVIsCi0JCQkJ CQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJ CQkJCQkJICBOSUwpOwogCQludW1JbmRleFR1cGxlcyA9IGJ0cmVlU2VsZWN0 aXZpdHkgKiBpbmRleC0+cmVsLT50dXBsZXM7CiAKIAkJLyoKQEAgLTczNjEs NyArNzM2NSw4IEBAIGdpbmNvc3Rlc3RpbWF0ZShQR19GVU5DVElPTl9BUkdT KQogCSppbmRleFNlbGVjdGl2aXR5ID0gY2xhdXNlbGlzdF9zZWxlY3Rpdml0 eShyb290LCBzZWxlY3Rpdml0eVF1YWxzLAogCQkJCQkJCQkJCQkgICBpbmRl eC0+cmVsLT5yZWxpZCwKIAkJCQkJCQkJCQkJICAgSk9JTl9JTk5FUiwKLQkJ CQkJCQkJCQkJICAgTlVMTCk7CisJCQkJCQkJCQkJCSAgIE5VTEwsCisJCQkJ CQkJCQkJCSAgIE5JTCk7CiAKIAkvKiBmZXRjaCBlc3RpbWF0ZWQgcGFnZSBj b3N0IGZvciB0YWJsZXNwYWNlIGNvbnRhaW5pbmcgaW5kZXggKi8KIAlnZXRf dGFibGVzcGFjZV9wYWdlX2Nvc3RzKGluZGV4LT5yZWx0YWJsZXNwYWNlLApA QCAtNzU5OCw3ICs3NjAzLDcgQEAgYnJpbmNvc3Rlc3RpbWF0ZShQR19GVU5D VElPTl9BUkdTKQogCSppbmRleFNlbGVjdGl2aXR5ID0KIAkJY2xhdXNlbGlz dF9zZWxlY3Rpdml0eShyb290LCBpbmRleFF1YWxzLAogCQkJCQkJCSAgIHBh dGgtPmluZGV4aW5mby0+cmVsLT5yZWxpZCwKLQkJCQkJCQkgICBKT0lOX0lO TkVSLCBOVUxMKTsKKwkJCQkJCQkgICBKT0lOX0lOTkVSLCBOVUxMLCBOSUwp OwogCSppbmRleENvcnJlbGF0aW9uID0gMTsKIAogCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWMuYwppbmRleCAzOGJhODJmLi44NjE2MDFmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTc1LDYgKzc1LDcgQEAK ICNpbmNsdWRlICJ1dGlscy9ieXRlYS5oIgogI2luY2x1ZGUgInV0aWxzL2d1 Y190YWJsZXMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2lu Y2x1ZGUgInV0aWxzL212c3RhdHMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19s b2NhbGUuaCIKICNpbmNsdWRlICJ1dGlscy9wbGFuY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy9wb3J0YWwuaCIKQEAgLTM4MCw2ICszODEsMTUgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSBodWdlX3BhZ2Vz X29wdGlvbnNbXSA9IHsKIH07CiAKIC8qCisgKiBTZWFyY2ggYWxnb3JpdGht IGZvciBtdWx0aXZhcmlhdGUgc3RhdHMuCisgKi8KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgY29uZmlnX2VudW1fZW50cnkgbXZzdGF0X3NlYXJjaF9vcHRpb25z W10gPSB7CisJeyJncmVlZHkiLCBNVlNUQVRfU0VBUkNIX0dSRUVEWSwgZmFs c2V9LAorCXsiZXhoYXVzdGl2ZSIsIE1WU1RBVF9TRUFSQ0hfRVhIQVVTVElW RSwgZmFsc2V9LAorCXtOVUxMLCAwLCBmYWxzZX0KK307CisKKy8qCiAgKiBP cHRpb25zIGZvciBlbnVtIHZhbHVlcyBzdG9yZWQgaW4gb3RoZXIgbW9kdWxl cwogICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGNvbmZpZ19lbnVtX2VudHJ5 IHdhbF9sZXZlbF9vcHRpb25zW107CkBAIC0zNjcyLDYgKzM2ODIsMTYgQEAg c3RhdGljIHN0cnVjdCBjb25maWdfZW51bSBDb25maWd1cmVOYW1lc0VudW1b XSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7Im12c3Rh dF9zZWFyY2giLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX09USEVSLAor CQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBhbGdvcml0aG0gdXNlZCBmb3Ig Y29tYmluaW5nIG11bHRpdmFyaWF0ZSBzdGF0cy4iKSwKKwkJCU5VTEwKKwkJ fSwKKwkJJm12c3RhdF9zZWFyY2hfdHlwZSwKKwkJTVZTVEFUX1NFQVJDSF9H UkVFRFksIG12c3RhdF9zZWFyY2hfb3B0aW9ucywKKwkJTlVMTCwgTlVMTCwg TlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJrZXIgKi8KIAl7CiAJ CXtOVUxMLCAwLCAwLCBOVUxMLCBOVUxMfSwgTlVMTCwgMCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5k ZXggOTk5OWNhMy4uYzFmNzc4NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv b3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv Y29zdC5oCkBAIC0xOTEsMTEgKzE5MSwxMyBAQCBleHRlcm4gU2VsZWN0aXZp dHkgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJICAgTGlzdCAqY2xhdXNlcywKIAkJCQkJICAgaW50IHZhclJlbGlk LAogCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwKLQkJCQkJICAgU3BlY2lh bEpvaW5JbmZvICpzamluZm8pOworCQkJCQkgICBTcGVjaWFsSm9pbkluZm8g KnNqaW5mbywKKwkJCQkJICAgTGlzdCAqY29uZGl0aW9ucyk7CiBleHRlcm4g U2VsZWN0aXZpdHkgY2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpy b290LAogCQkJCSAgIE5vZGUgKmNsYXVzZSwKIAkJCQkgICBpbnQgdmFyUmVs aWQsCiAJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsCi0JCQkJICAgU3BlY2lh bEpvaW5JbmZvICpzamluZm8pOworCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAq c2ppbmZvLAorCQkJCSAgIExpc3QgKmNvbmRpdGlvbnMpOwogCiAjZW5kaWYg ICAvKiBDT1NUX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxz L212c3RhdHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaAppbmRl eCBmMDVhNTE3Li4zNWIyZjhlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9tdnN0YXRzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0 cy5oCkBAIC0xNyw2ICsxNywxNCBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNp bmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKIAordHlwZWRlZiBlbnVtIE1W U3RhdFNlYXJjaFR5cGUKK3sKKwlNVlNUQVRfU0VBUkNIX0VYSEFVU1RJVkUs CQkvKiBleGhhdXN0aXZlIHNlYXJjaCAqLworCU1WU1RBVF9TRUFSQ0hfR1JF RURZCQkJLyogZ3JlZWR5IHNlYXJjaCAqLworfQlNVlN0YXRTZWFyY2hUeXBl OworCitleHRlcm4gaW50IG12c3RhdF9zZWFyY2hfdHlwZTsKKwogLyoKICAq IERlZ3JlZSBvZiBob3cgbXVjaCBNQ1YgaXRlbSAvIGhpc3RvZ3JhbSBidWNr ZXQgbWF0Y2hlcyBhIGNsYXVzZS4KICAqIFRoaXMgaXMgdGhlbiBjb25zaWRl cmVkIHdoZW4gY29tcHV0aW5nIHRoZSBzZWxlY3Rpdml0eS4KLS0gCjIuMS4w Cgo= --------------040701000609000501090206 Content-Type: application/x-patch; name="0007-initial-version-of-ndistinct-conefficient-statistics.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0007-initial-version-of-ndistinct-conefficient-statistics.pa"; filename*1="tch" RnJvbSBmNzUwMDM4ZjY1OWQ3NGZmODhiZTU3NWIxYzVjOTJhZDBmNzQ1ZjFk IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogV2VkLCAyMyBEZWMgMjAxNSAw MjowNzo1OCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggNy83XSBpbml0aWFsIHZl cnNpb24gb2YgbmRpc3RpbmN0IGNvbmVmZmljaWVudCBzdGF0aXN0aWNzCgot LS0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbCB8 ICAgOSArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgICAg ICAgIHwgIDExICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xh dXNlc2VsLmMgIHwgICA3ICsrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wbGFuY2F0LmMgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvTWFrZWZpbGUgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvdXRp bHMvbXZzdGF0cy9jb21tb24uYyAgICAgIHwgIDIwICsrKystCiBzcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL212ZGlzdC5jICAgICAgfCAxNDcgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfbXZfc3RhdGlzdGljLmggICB8ICAyNiArKystLS0KIHNyYy9pbmNs dWRlL25vZGVzL3JlbGF0aW9uLmggICAgICAgICAgICB8ICAgMiArCiBzcmMv aW5jbHVkZS91dGlscy9tdnN0YXRzLmggICAgICAgICAgICAgfCAgIDYgKysK IDEwIGZpbGVzIGNoYW5nZWQsIDIxNyBpbnNlcnRpb25zKCspLCAxNyBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL212ZGlzdC5jCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sIGIvZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCmluZGV4IGZkMzM4MmUuLjgwMzYw YTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRp c3RpY3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdGF0 aXN0aWNzLnNnbWwKQEAgLTE2OCw2ICsxNjgsMTUgQEAgQ1JFQVRFIFNUQVRJ U1RJQ1MgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQ QVJBTUVURVIiPnN0YXRpc3RpY3NfbmEKICAgICA8L2xpc3RpdGVtPgogICAg PC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+PGxpdGVyYWw+bmRpc3RpbmN0PC8+ICg8dHlwZT5ib29sZWFuPC8+KTwv dGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgRW5h YmxlcyBuZGlzdGluY3QgY29lZmZpY2llbnRzIGZvciB0aGUgc3RhdGlzdGlj cy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxp c3RlbnRyeT4KKwogICAgPC92YXJpYWJsZWxpc3Q+CiAKICAgPC9yZWZzZWN0 Mj4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21k cy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKaW5kZXgg Yjk3NDY1NS4uNmVhMGUxMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvc3RhdHNjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv c3RhdHNjbWRzLmMKQEAgLTEzOCw3ICsxMzgsOCBAQCBDcmVhdGVTdGF0aXN0 aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkKIAkvKiBieSBkZWZhdWx0IGJ1 aWxkIG5vdGhpbmcgKi8KIAlib29sIAlidWlsZF9kZXBlbmRlbmNpZXMgPSBm YWxzZSwKIAkJCWJ1aWxkX21jdiA9IGZhbHNlLAotCQkJYnVpbGRfaGlzdG9n cmFtID0gZmFsc2U7CisJCQlidWlsZF9oaXN0b2dyYW0gPSBmYWxzZSwKKwkJ CWJ1aWxkX25kaXN0aW5jdCA9IGZhbHNlOwogCiAJaW50MzIgCW1heF9idWNr ZXRzID0gLTEsCiAJCQltYXhfbWN2X2l0ZW1zID0gLTE7CkBAIC0yMjEsNiAr MjIyLDggQEAgQ3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0 bXQpCiAKIAkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJkZXBlbmRlbmNp ZXMiKSA9PSAwKQogCQkJYnVpbGRfZGVwZW5kZW5jaWVzID0gZGVmR2V0Qm9v bGVhbihvcHQpOworCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAi bmRpc3RpbmN0IikgPT0gMCkKKwkJCWJ1aWxkX25kaXN0aW5jdCA9IGRlZkdl dEJvb2xlYW4ob3B0KTsKIAkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFt ZSwgIm1jdiIpID09IDApCiAJCQlidWlsZF9tY3YgPSBkZWZHZXRCb29sZWFu KG9wdCk7CiAJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJtYXhf bWN2X2l0ZW1zIikgPT0gMCkKQEAgLTI3NSwxMCArMjc4LDEwIEBAIENyZWF0 ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCX0KIAogCS8q IGNoZWNrIHRoYXQgYXQgbGVhc3Qgc29tZSBzdGF0aXN0aWNzIHdlcmUgcmVx dWVzdGVkICovCi0JaWYgKCEgKGJ1aWxkX2RlcGVuZGVuY2llcyB8fCBidWls ZF9tY3YgfHwgYnVpbGRfaGlzdG9ncmFtKSkKKwlpZiAoISAoYnVpbGRfZGVw ZW5kZW5jaWVzIHx8IGJ1aWxkX21jdiB8fCBidWlsZF9oaXN0b2dyYW0gfHwg YnVpbGRfbmRpc3RpbmN0KSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJy Y29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJIGVycm1zZygibm8g c3RhdGlzdGljcyB0eXBlIChkZXBlbmRlbmNpZXMsIG1jdiwgaGlzdG9ncmFt KSB3YXMgcmVxdWVzdGVkIikpKTsKKwkJCQkgZXJybXNnKCJubyBzdGF0aXN0 aWNzIHR5cGUgKGRlcGVuZGVuY2llcywgbWN2LCBoaXN0b2dyYW0sIG5kaXN0 aW5jdCkgd2FzIHJlcXVlc3RlZCIpKSk7CiAKIAkvKiBub3cgZG8gc29tZSBj aGVja2luZyBvZiB0aGUgb3B0aW9ucyAqLwogCWlmIChyZXF1aXJlX21jdiAm JiAoISBidWlsZF9tY3YpKQpAQCAtMzExLDYgKzMxNCw3IEBAIENyZWF0ZVN0 YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCXZhbHVlc1tBbnVt X3BnX212X3N0YXRpc3RpY19kZXBzX2VuYWJsZWQgLTFdID0gQm9vbEdldERh dHVtKGJ1aWxkX2RlcGVuZGVuY2llcyk7CiAJdmFsdWVzW0FudW1fcGdfbXZf c3RhdGlzdGljX21jdl9lbmFibGVkICAtMV0gPSBCb29sR2V0RGF0dW0oYnVp bGRfbWN2KTsKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9l bmFibGVkIC0xXSA9IEJvb2xHZXREYXR1bShidWlsZF9oaXN0b2dyYW0pOwor CXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19uZGlzdF9lbmFibGVkLTFd ID0gQm9vbEdldERhdHVtKGJ1aWxkX25kaXN0aW5jdCk7CiAKIAl2YWx1ZXNb QW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcyAgICAtMV0gPSBJ bnQzMkdldERhdHVtKG1heF9tY3ZfaXRlbXMpOwogCXZhbHVlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19oaXN0X21heF9idWNrZXRzIC0xXSA9IEludDMyR2V0 RGF0dW0obWF4X2J1Y2tldHMpOwpAQCAtMzE4LDYgKzMyMiw3IEBAIENyZWF0 ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCW51bGxzW0Fu dW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMgIC0xXSA9IHRydWU7CiAJbnVs bHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2ICAgLTFdID0gdHJ1ZTsK IAludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFoaXN0ICAtMV0gPSB0 cnVlOworCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YW5kaXN0IC0x XSA9IHRydWU7CiAKIAkvKiBpbnNlcnQgdGhlIHR1cGxlIGludG8gcGdfbXZf c3RhdGlzdGljICovCiAJbXZzdGF0cmVsID0gaGVhcF9vcGVuKE12U3RhdGlz dGljUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCmluZGV4IDNk NGQxMzYuLjcyMGZmODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2NsYXVzZXNlbC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2NsYXVzZXNlbC5jCkBAIC01OSw2ICs1OSw3IEBAIHN0YXRp YyB2b2lkIGFkZFJhbmdlQ2xhdXNlKFJhbmdlUXVlcnlDbGF1c2UgKipycWxp c3QsIE5vZGUgKmNsYXVzZSwKICNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX0ZE RVAJCTB4MDEKICNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX01DVgkJMHgwMgog I2RlZmluZQkJTVZfQ0xBVVNFX1RZUEVfSElTVAkJMHgwNAorI2RlZmluZQkJ TVZfQ0xBVVNFX1RZUEVfTkRJU1QJMHgwOAogCiBzdGF0aWMgYm9vbCBjbGF1 c2VfaXNfbXZfY29tcGF0aWJsZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAq Y2xhdXNlLCBPaWQgdmFyUmVsaWQsCiAJCQkJCQkJIEluZGV4ICpyZWxpZCwg Qml0bWFwc2V0ICoqYXR0bnVtcywgU3BlY2lhbEpvaW5JbmZvICpzamluZm8s CkBAIC0zNzcsNiArMzc4LDkgQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQ bGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCQlzdGF0cywgc2ppbmZv KTsKIAl9CiAKKwlpZiAoaGFzX3N0YXRzKHN0YXRzLCBNVl9DTEFVU0VfVFlQ RV9ORElTVCkpCisJCWVsb2coV0FSTklORywgImhhcyBuZGlzdGluY3QgY29l ZmZpY2llbnQgc3RhdHMiKTsKKwogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGVy ZSBhcmUgc3RhdGlzdGljcyB3aXRoIE1DViBsaXN0IG9yIGhpc3RvZ3JhbS4K IAkgKiBJZiBub3QsIHdlIGRvbid0IG5lZWQgdG8gd2FzdGUgdGltZSB3aXRo IHRoZSBvcHRpbWl6YXRpb24uCkBAIC0yOTMxLDYgKzI5MzUsOSBAQCBoYXNf c3RhdHMoTGlzdCAqc3RhdHMsIGludCB0eXBlKQogCiAJCWlmICgodHlwZSAm IE1WX0NMQVVTRV9UWVBFX0hJU1QpICYmIHN0YXQtPmhpc3RfYnVpbHQpCiAJ CQlyZXR1cm4gdHJ1ZTsKKworCQlpZiAoKHR5cGUgJiBNVl9DTEFVU0VfVFlQ RV9ORElTVCkgJiYgc3RhdC0+bmRpc3RfYnVpbHQpCisJCQlyZXR1cm4gdHJ1 ZTsKIAl9CiAKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggOTYzZDI2ZS4uYTMxOTI0 NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxh bmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYwpAQCAtNDEwLDcgKzQxMCw3IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBs YW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBp bmhwYXJlbnQsCiAJCQltdnN0YXQgPSAoRm9ybV9wZ19tdl9zdGF0aXN0aWMp IEdFVFNUUlVDVChodHVwKTsKIAogCQkJLyogdW5hdmFpbGFibGUgc3RhdHMg YXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdGhlIHBsYW5uZXIgKi8KLQkJCWlm IChtdnN0YXQtPmRlcHNfYnVpbHQgfHwgbXZzdGF0LT5tY3ZfYnVpbHQgfHwg bXZzdGF0LT5oaXN0X2J1aWx0KQorCQkJaWYgKG12c3RhdC0+ZGVwc19idWls dCB8fCBtdnN0YXQtPm1jdl9idWlsdCB8fCBtdnN0YXQtPmhpc3RfYnVpbHQg fHwgbXZzdGF0LT5uZGlzdF9idWlsdCkKIAkJCXsKIAkJCQlpbmZvID0gbWFr ZU5vZGUoTVZTdGF0aXN0aWNJbmZvKTsKIApAQCAtNDIxLDExICs0MjEsMTMg QEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCBy ZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5k ZXBzX2VuYWJsZWQgPSBtdnN0YXQtPmRlcHNfZW5hYmxlZDsKIAkJCQlpbmZv LT5tY3ZfZW5hYmxlZCAgPSBtdnN0YXQtPm1jdl9lbmFibGVkOwogCQkJCWlu Zm8tPmhpc3RfZW5hYmxlZCA9IG12c3RhdC0+aGlzdF9lbmFibGVkOworCQkJ CWluZm8tPm5kaXN0X2VuYWJsZWQgPSBtdnN0YXQtPm5kaXN0X2VuYWJsZWQ7 CiAKIAkJCQkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwogCQkJ CWluZm8tPmRlcHNfYnVpbHQgPSBtdnN0YXQtPmRlcHNfYnVpbHQ7CiAJCQkJ aW5mby0+bWN2X2J1aWx0ICA9IG12c3RhdC0+bWN2X2J1aWx0OwogCQkJCWlu Zm8tPmhpc3RfYnVpbHQgPSBtdnN0YXQtPmhpc3RfYnVpbHQ7CisJCQkJaW5m by0+bmRpc3RfYnVpbHQgPSBtdnN0YXQtPm5kaXN0X2J1aWx0OwogCiAJCQkJ Lyogc3Rha2V5cyAqLwogCQkJCWFkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihN VlNUQVRPSUQsIGh0dXAsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9NYWtlZmlsZQppbmRleCA5ZGJiM2I2Li5kNGI4OGU5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUKQEAgLTEyLDYgKzEy LDYgQEAgc3ViZGlyID0gc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cwogdG9w X2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRk aXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAotT0JKUyA9IGNvbW1vbi5vIGRl cGVuZGVuY2llcy5vIGhpc3RvZ3JhbS5vIG1jdi5vCitPQkpTID0gY29tbW9u Lm8gZGVwZW5kZW5jaWVzLm8gaGlzdG9ncmFtLm8gbWN2Lm8gbXZkaXN0Lm8K IAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5t awpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21t b24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKaW5k ZXggZmZiNzZmNC4uYzQyY2E4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9jb21tb24uYworKysgYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL2NvbW1vbi5jCkBAIC01Myw2ICs1Myw3IEBAIGJ1aWxkX212 X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBs ZSAqcm93cywKIAkJTVZEZXBlbmRlbmNpZXMJZGVwcyAgPSBOVUxMOwogCQlN Q1ZMaXN0CQltY3ZsaXN0ICAgPSBOVUxMOwogCQlNVkhpc3RvZ3JhbQloaXN0 b2dyYW0gPSBOVUxMOworCQlkb3VibGUJCW5kaXN0CSAgPSAtMTsKIAkJaW50 IG51bXJvd3NfZmlsdGVyZWQgID0gbnVtcm93czsKIAogCQlWYWNBdHRyU3Rh dHMgICoqc3RhdHMgID0gTlVMTDsKQEAgLTkyLDYgKzkzLDkgQEAgYnVpbGRf bXZfc3RhdHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1 cGxlICpyb3dzLAogCQlpZiAoc3RhdC0+ZGVwc19lbmFibGVkKQogCQkJZGVw cyA9IGJ1aWxkX212X2RlcGVuZGVuY2llcyhudW1yb3dzLCByb3dzLCBhdHRy cywgc3RhdHMpOwogCisJCWlmIChzdGF0LT5uZGlzdF9lbmFibGVkKQorCQkJ bmRpc3QgPSBidWlsZF9tdl9uZGlzdGluY3QobnVtcm93cywgcm93cywgYXR0 cnMsIHN0YXRzKTsKKwogCQkvKiBidWlsZCB0aGUgTUNWIGxpc3QgKi8KIAkJ aWYgKHN0YXQtPm1jdl9lbmFibGVkKQogCQkJbWN2bGlzdCA9IGJ1aWxkX212 X21jdmxpc3QobnVtcm93cywgcm93cywgYXR0cnMsIHN0YXRzLCAmbnVtcm93 c19maWx0ZXJlZCk7CkBAIC0xMDEsNyArMTA1LDcgQEAgYnVpbGRfbXZfc3Rh dHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpy b3dzLAogCQkJaGlzdG9ncmFtID0gYnVpbGRfbXZfaGlzdG9ncmFtKG51bXJv d3NfZmlsdGVyZWQsIHJvd3MsIGF0dHJzLCBzdGF0cywgbnVtcm93cyk7CiAK IAkJLyogc3RvcmUgdGhlIGhpc3RvZ3JhbSAvIE1DViBsaXN0IGluIHRoZSBj YXRhbG9nICovCi0JCXVwZGF0ZV9tdl9zdGF0cyhzdGF0LT5tdm9pZCwgZGVw cywgbWN2bGlzdCwgaGlzdG9ncmFtLCBhdHRycywgc3RhdHMpOworCQl1cGRh dGVfbXZfc3RhdHMoc3RhdC0+bXZvaWQsIGRlcHMsIG1jdmxpc3QsIGhpc3Rv Z3JhbSwgbmRpc3QsIGF0dHJzLCBzdGF0cyk7CiAJfQogfQogCkBAIC0xODMs NiArMTg3LDggQEAgbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQpCiAJCWluZm8t Pm1jdl9idWlsdCA9IHN0YXRzLT5tY3ZfYnVpbHQ7CiAJCWluZm8tPmhpc3Rf ZW5hYmxlZCA9IHN0YXRzLT5oaXN0X2VuYWJsZWQ7CiAJCWluZm8tPmhpc3Rf YnVpbHQgPSBzdGF0cy0+aGlzdF9idWlsdDsKKwkJaW5mby0+bmRpc3RfZW5h YmxlZCA9IHN0YXRzLT5uZGlzdF9lbmFibGVkOworCQlpbmZvLT5uZGlzdF9i dWlsdCA9IHN0YXRzLT5uZGlzdF9idWlsdDsKIAogCQlyZXN1bHQgPSBsYXBw ZW5kKHJlc3VsdCwgaW5mbyk7CiAJfQpAQCAtMjUyLDcgKzI1OCw3IEBAIGZp bmRfbXZfYXR0bnVtcyhPaWQgbXZvaWQsIE9pZCAqcmVsaWQpCiB2b2lkCiB1 cGRhdGVfbXZfc3RhdHMoT2lkIG12b2lkLAogCQkJCU1WRGVwZW5kZW5jaWVz IGRlcGVuZGVuY2llcywgTUNWTGlzdCBtY3ZsaXN0LCBNVkhpc3RvZ3JhbSBo aXN0b2dyYW0sCi0JCQkJaW50MnZlY3RvciAqYXR0cnMsIFZhY0F0dHJTdGF0 cyAqKnN0YXRzKQorCQkJCWRvdWJsZSBuZGlzdGNvZWZmLCBpbnQydmVjdG9y ICphdHRycywgVmFjQXR0clN0YXRzICoqc3RhdHMpCiB7CiAJSGVhcFR1cGxl CXN0dXAsCiAJCQkJb2xkdHVwOwpAQCAtMjkyLDI2ICsyOTgsMzYgQEAgdXBk YXRlX212X3N0YXRzKE9pZCBtdm9pZCwKIAkJCT0gUG9pbnRlckdldERhdHVt KGRhdGEpOwogCX0KIAorCWlmIChuZGlzdGNvZWZmID4gMS4wKQorCXsKKwkJ bnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmRpc3QgLTFdID0gZmFs c2U7CisJCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuZGlzdC0x XSA9IEZsb2F0OEdldERhdHVtKG5kaXN0Y29lZmYpOworCX0KKwogCS8qIGFs d2F5cyByZXBsYWNlIHRoZSB2YWx1ZSAoZWl0aGVyIGJ5IGJ5dGVhIG9yIE5V TEwpICovCiAJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhZGVw cyAtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGlj X3N0YW1jdiAtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3Rh dGlzdGljX3N0YWhpc3QtMV0gPSB0cnVlOworCXJlcGxhY2VzW0FudW1fcGdf bXZfc3RhdGlzdGljX3N0YW5kaXN0LTFdID0gdHJ1ZTsKIAogCS8qIGFsd2F5 cyBjaGFuZ2UgdGhlIGF2YWlsYWJpbGl0eSBmbGFncyAqLwogCW51bGxzW0Fu dW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQgLTFdID0gZmFsc2U7CiAJ bnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2J1aWx0IC0xXSA9IGZh bHNlOwogCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX2hpc3RfYnVpbHQt MV0gPSBmYWxzZTsKKwludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19uZGlz dF9idWlsdC0xXSA9IGZhbHNlOwogCW51bGxzW0FudW1fcGdfbXZfc3RhdGlz dGljX3N0YWtleXMtMV0gICAgID0gZmFsc2U7CiAKIAkvKiB1c2UgdGhlIG5l dyBhdHRudW1zLCBpbiBjYXNlIHdlIHJlbW92ZWQgc29tZSBkcm9wcGVkIG9u ZXMgKi8KIAlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1 aWx0LTFdID0gdHJ1ZTsKIAlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3Rp Y19tY3ZfYnVpbHQgIC0xXSA9IHRydWU7CisJcmVwbGFjZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfbmRpc3RfYnVpbHQtMV0gPSB0cnVlOwogCXJlcGxhY2Vz W0FudW1fcGdfbXZfc3RhdGlzdGljX2hpc3RfYnVpbHQgLTFdID0gdHJ1ZTsK IAlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzIC0xXSAg ICA9IHRydWU7CiAKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVw c19idWlsdC0xXSA9IEJvb2xHZXREYXR1bShkZXBlbmRlbmNpZXMgIT0gTlVM TCk7CiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX21jdl9idWlsdCAg LTFdID0gQm9vbEdldERhdHVtKG1jdmxpc3QgIT0gTlVMTCk7CiAJdmFsdWVz W0FudW1fcGdfbXZfc3RhdGlzdGljX2hpc3RfYnVpbHQgLTFdID0gQm9vbEdl dERhdHVtKGhpc3RvZ3JhbSAhPSBOVUxMKTsKKwl2YWx1ZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfbmRpc3RfYnVpbHQtMV0gPSBCb29sR2V0RGF0dW0obmRp c3Rjb2VmZiA+IDEuMCk7CiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGlj X3N0YWtleXMgLTFdICAgID0gUG9pbnRlckdldERhdHVtKGF0dHJzKTsKIAog CS8qIElzIHRoZXJlIGFscmVhZHkgYSBwZ19tdl9zdGF0aXN0aWMgdHVwbGUg Zm9yIHRoaXMgYXR0cmlidXRlPyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbXZzdGF0cy9tdmRpc3QuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L212c3RhdHMvbXZkaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNmRmNzQxMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvbXZkaXN0LmMKQEAgLTAsMCArMSwxNDcgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIG12ZGlz dC5jCisgKgkgIFBPU1RHUkVTIG11bHRpdmFyaWF0ZSBkaXN0aW5jdCBjb2Vm ZmljaWVudHMKKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMTUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL212 ZGlzdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInV0aWxzL2xz eXNjYWNoZS5oIgorCisvKgorICogCisgKi8KK2RvdWJsZQorYnVpbGRfbXZf bmRpc3RpbmN0KGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2 ZWN0b3IgKmF0dHJzLAorCQkJCSAgIFZhY0F0dHJTdGF0cyAqKnN0YXRzKQor eworCWludCBpLCBqOworCWludCBudW1hdHRycyA9IGF0dHJzLT5kaW0xOwor CU11bHRpU29ydFN1cHBvcnQgbXNzID0gbXVsdGlfc29ydF9pbml0KG51bWF0 dHJzKTsKKwlpbnQgbmRpc3RpbmN0OworCWRvdWJsZSByZXN1bHQ7CisKKwkv KgorCSAqIEl0J3MgcG9zc2libGUgdG8gc29ydCB0aGUgc2FtcGxlIHJvd3Mg ZGlyZWN0bHksIGJ1dCB0aGlzIHNlZW1lZAorCSAqIHNvbWVob3cgc2ltcGxl ciAvIGxlc3MgZXJyb3IgcHJvbmUuIEFub3RoZXIgb3B0aW9uIHdvdWxkIGJl IHRvCisJICogYWxsb2NhdGUgdGhlIGFycmF5cyBmb3IgZWFjaCBTb3J0SXRl bSBzZXBhcmF0ZWx5LCBidXQgdGhhdCdkIGJlCisJICogc2lnbmlmaWNhbnQg b3ZlcmhlYWQgKG5vdCBqdXN0IENQVSwgYnV0IGVzcGVjaWFsbHkgbWVtb3J5 IGJsb2F0KS4KKwkgKi8KKwlTb3J0SXRlbSAqIGl0ZW1zID0gKFNvcnRJdGVt KilwYWxsb2MwKG51bXJvd3MgKiBzaXplb2YoU29ydEl0ZW0pKTsKKworCURh dHVtICp2YWx1ZXMgPSAoRGF0dW0qKXBhbGxvYzAoc2l6ZW9mKERhdHVtKSAq IG51bXJvd3MgKiBudW1hdHRycyk7CisJYm9vbCAgKmlzbnVsbCA9IChib29s KilwYWxsb2MwKHNpemVvZihib29sKSAqIG51bXJvd3MgKiBudW1hdHRycyk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcm93czsgaSsrKQorCXsKKwkJaXRl bXNbaV0udmFsdWVzID0gJnZhbHVlc1tpICogbnVtYXR0cnNdOworCQlpdGVt c1tpXS5pc251bGwgPSAmaXNudWxsW2kgKiBudW1hdHRyc107CisJfQorCisJ QXNzZXJ0KG51bWF0dHJzID49IDIpOworCisJZm9yIChpID0gMDsgaSA8IG51 bWF0dHJzOyBpKyspCisJeworCQkvKiBwcmVwYXJlIHRoZSBzb3J0IGZ1bmN0 aW9uIGZvciB0aGUgZmlyc3QgZGltZW5zaW9uICovCisJCW11bHRpX3NvcnRf YWRkX2RpbWVuc2lvbihtc3MsIGksIGksIHN0YXRzKTsKKworCQkvKiBhY2N1 bXVsYXRlIGFsbCB0aGUgZGF0YSBpbnRvIHRoZSBhcnJheSBhbmQgc29ydCBp dCAqLworCQlmb3IgKGogPSAwOyBqIDwgbnVtcm93czsgaisrKQorCQl7CisJ CQlpdGVtc1tqXS52YWx1ZXNbaV0KKwkJCQk9IGhlYXBfZ2V0YXR0cihyb3dz W2pdLCBhdHRycy0+dmFsdWVzW2ldLAorCQkJCQkJCSAgIHN0YXRzW2ldLT50 dXBEZXNjLCAmaXRlbXNbal0uaXNudWxsW2ldKTsKKwkJfQorCX0KKworCXFz b3J0X2FyZygodm9pZCAqKSBpdGVtcywgbnVtcm93cywgc2l6ZW9mKFNvcnRJ dGVtKSwKKwkJCSAgbXVsdGlfc29ydF9jb21wYXJlLCBtc3MpOworCisJLyog Y291bnQgbnVtYmVyIG9mIGRpc3RpbmN0IGNvbWJpbmF0aW9ucyAqLworCisJ bmRpc3RpbmN0ID0gMTsKKwlmb3IgKGkgPSAxOyBpIDwgbnVtcm93czsgaSsr KQorCXsKKwkJaWYgKG11bHRpX3NvcnRfY29tcGFyZSgmaXRlbXNbaV0sICZp dGVtc1tpLTFdLCBtc3MpICE9IDApCisJCQluZGlzdGluY3QrKzsKKwl9CisK KwlyZXN1bHQgPSAxIC8gKGRvdWJsZSluZGlzdGluY3Q7CisKKwkvKgorCSAq IG5vdyBjb3VudCBkaXN0aW5jdCB2YWx1ZXMgZm9yIGVhY2ggYXR0cmlidXRl IGFuZCBpbmNyZW1lbnRhbGx5CisJICogY29tcHV0ZSBuZGlzdGluY3QoYSxi KSAvIChuZGlzdGluY3QoYSkgKiBuZGlzdGluY3QoYikpCisJICovCisJZm9y IChpID0gMDsgaSA8IG51bWF0dHJzOyBpKyspCisJeworCQlTb3J0U3VwcG9y dERhdGEgc3N1cDsKKwkJU3RkQW5hbHl6ZURhdGEgKnRtcCA9IChTdGRBbmFs eXplRGF0YSAqKXN0YXRzW2ldLT5leHRyYV9kYXRhOworCisJCS8qIGluaXRp YWxpemUgc29ydCBzdXBwb3J0LCBldGMuICovCisJCW1lbXNldCgmc3N1cCwg MCwgc2l6ZW9mKHNzdXApKTsKKwkJc3N1cC5zc3VwX2N4dCA9IEN1cnJlbnRN ZW1vcnlDb250ZXh0OworCisJCS8qIFdlIGFsd2F5cyB1c2UgdGhlIGRlZmF1 bHQgY29sbGF0aW9uIGZvciBzdGF0aXN0aWNzICovCisJCXNzdXAuc3N1cF9j b2xsYXRpb24gPSBERUZBVUxUX0NPTExBVElPTl9PSUQ7CisJCXNzdXAuc3N1 cF9udWxsc19maXJzdCA9IGZhbHNlOworCisJCVByZXBhcmVTb3J0U3VwcG9y dEZyb21PcmRlcmluZ09wKHRtcC0+bHRvcHIsICZzc3VwKTsKKworCQltZW1z ZXQodmFsdWVzLCAwLCBzaXplb2YoRGF0dW0pICogbnVtcm93cyk7CisKKwkJ LyogYWNjdW11bGF0ZSBhbGwgdGhlIGRhdGEgaW50byB0aGUgYXJyYXkgYW5k IHNvcnQgaXQgKi8KKwkJZm9yIChqID0gMDsgaiA8IG51bXJvd3M7IGorKykK KwkJeworCQkJYm9vbCBpc251bGw7CisJCQl2YWx1ZXNbal0gPSBoZWFwX2dl dGF0dHIocm93c1tqXSwgYXR0cnMtPnZhbHVlc1tpXSwKKwkJCQkJCQkJCSBz dGF0c1tpXS0+dHVwRGVzYywgJmlzbnVsbCk7CisJCX0KKworCQlxc29ydF9h cmcoKHZvaWQgKil2YWx1ZXMsIG51bXJvd3MsIHNpemVvZihEYXR1bSksCisJ CQkJICBjb21wYXJlX3NjYWxhcnNfc2ltcGxlLCAmc3N1cCk7CisKKwkJbmRp c3RpbmN0ID0gMTsKKwkJZm9yIChqID0gMTsgaiA8IG51bXJvd3M7IGorKykK KwkJeworCQkJaWYgKGNvbXBhcmVfc2NhbGFyc19zaW1wbGUoJnZhbHVlc1tq XSwgJnZhbHVlc1tqLTFdLCAmc3N1cCkgIT0gMCkKKwkJCQluZGlzdGluY3Qr KzsKKwkJfQorCisJCXJlc3VsdCAqPSBuZGlzdGluY3Q7CisJfQorCisJcmV0 dXJuIHJlc3VsdDsKK30KKworZG91YmxlCitsb2FkX212X25kaXN0aW5jdChP aWQgbXZvaWQpCit7CisJYm9vbAkJaXNudWxsID0gZmFsc2U7CisJRGF0dW0J CWRlcHM7CisKKwkvKiBQcmVwYXJlIHRvIHNjYW4gcGdfbXZfc3RhdGlzdGlj IGZvciBlbnRyaWVzIGhhdmluZyBpbmRyZWxpZCA9IHRoaXMgcmVsLiAqLwor CUhlYXBUdXBsZQlodHVwID0gU2VhcmNoU3lzQ2FjaGUxKE1WU1RBVE9JRCwg T2JqZWN0SWRHZXREYXR1bShtdm9pZCkpOworCisjaWZkZWYgVVNFX0FTU0VS VF9DSEVDS0lORworCUZvcm1fcGdfbXZfc3RhdGlzdGljCW12c3RhdCA9IChG b3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXApOworCUFzc2Vy dChtdnN0YXQtPm5kaXN0X2VuYWJsZWQgJiYgbXZzdGF0LT5uZGlzdF9idWls dCk7CisjZW5kaWYKKworCWRlcHMgPSBTeXNDYWNoZUdldEF0dHIoTVZTVEFU T0lELCBodHVwLAorCQkJCQkJICAgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rh bmRpc3QsICZpc251bGwpOworCisJQXNzZXJ0KCFpc251bGwpOworCisJUmVs ZWFzZVN5c0NhY2hlKGh0dXApOworCisJcmV0dXJuIERhdHVtR2V0RmxvYXQ4 KGRlcHMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19tdl9zdGF0aXN0aWMuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZf c3RhdGlzdGljLmgKaW5kZXggYTU5NDVhZi4uZWUzNTNkYSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oCkBAIC0z OSw2ICszOSw3IEBAIENBVEFMT0cocGdfbXZfc3RhdGlzdGljLDMzODEpCiAJ Ym9vbAkJZGVwc19lbmFibGVkOwkJLyogYW5hbHl6ZSBkZXBlbmRlbmNpZXM/ ICovCiAJYm9vbAkJbWN2X2VuYWJsZWQ7CQkvKiBidWlsZCBNQ1YgbGlzdD8g Ki8KIAlib29sCQloaXN0X2VuYWJsZWQ7CQkvKiBidWlsZCBoaXN0b2dyYW0/ ICovCisJYm9vbAkJbmRpc3RfZW5hYmxlZDsJCS8qIGJ1aWxkIG5kaXN0IGNv ZWZmaWNpZW50PyAqLwogCiAJLyogaGlzdG9ncmFtIC8gTUNWIHNpemUgKi8K IAlpbnQzMgkJbWN2X21heF9pdGVtczsJCS8qIG1heCBNQ1YgaXRlbXMgKi8K QEAgLTQ4LDYgKzQ5LDcgQEAgQ0FUQUxPRyhwZ19tdl9zdGF0aXN0aWMsMzM4 MSkKIAlib29sCQlkZXBzX2J1aWx0OwkJCS8qIGRlcGVuZGVuY2llcyB3ZXJl IGJ1aWx0ICovCiAJYm9vbAkJbWN2X2J1aWx0OwkJCS8qIE1DViBsaXN0IHdh cyBidWlsdCAqLwogCWJvb2wJCWhpc3RfYnVpbHQ7CQkJLyogaGlzdG9ncmFt IHdhcyBidWlsdCAqLworCWJvb2wJCW5kaXN0X2J1aWx0OwkJLyogbmRpc3Rp bmN0IGNvZWZmIGJ1aWx0ICovCiAKIAkvKiB2YXJpYWJsZS1sZW5ndGggZmll bGRzIHN0YXJ0IGhlcmUsIGJ1dCB3ZSBhbGxvdyBkaXJlY3QgYWNjZXNzIHRv IHN0YWtleXMgKi8KIAlpbnQydmVjdG9yCXN0YWtleXM7CQkJLyogYXJyYXkg b2YgY29sdW1uIGtleXMgKi8KQEAgLTU2LDYgKzU4LDcgQEAgQ0FUQUxPRyhw Z19tdl9zdGF0aXN0aWMsMzM4MSkKIAlieXRlYQkJc3RhZGVwczsJCQkvKiBk ZXBlbmRlbmNpZXMgKHNlcmlhbGl6ZWQpICovCiAJYnl0ZWEJCXN0YW1jdjsJ CQkJLyogTUNWIGxpc3QgKHNlcmlhbGl6ZWQpICovCiAJYnl0ZWEJCXN0YWhp c3Q7CQkJLyogTVYgaGlzdG9ncmFtIChzZXJpYWxpemVkKSAqLworCWZsb2F0 OAkJc3RhbmRjb2VmZjsJCQkvKiBuZGlzdGluY3QgY29lZmYgKHNlcmlhbGl6 ZWQpICovCiAjZW5kaWYKIAogfSBGb3JtRGF0YV9wZ19tdl9zdGF0aXN0aWM7 CkBAIC03MSwyMSArNzQsMjQgQEAgdHlwZWRlZiBGb3JtRGF0YV9wZ19tdl9z dGF0aXN0aWMgKkZvcm1fcGdfbXZfc3RhdGlzdGljOwogICoJCWNvbXBpbGVy IGNvbnN0YW50cyBmb3IgcGdfbXZfc3RhdGlzdGljCiAgKiAtLS0tLS0tLS0t LS0tLS0tCiAgKi8KLSNkZWZpbmUgTmF0dHNfcGdfbXZfc3RhdGlzdGljCQkJ CQkxNQorI2RlZmluZSBOYXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTE4CiAj ZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YXJlbGlkCQkJMQogI2Rl ZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1lCQkJMgogI2RlZmlu ZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1lc3BhY2UJCTMKICNkZWZp bmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19lbmFibGVkCQk0CiAjZGVm aW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX21jdl9lbmFibGVkCQk1CiAjZGVm aW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX2hpc3RfZW5hYmxlZAkJNgotI2Rl ZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfbWF4X2l0ZW1zCQk3Ci0j ZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX2hpc3RfbWF4X2J1Y2tldHMJ OAotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0CQkJ OQotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVpbHQJCQkx MAotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X2J1aWx0CQkJ MTEKLSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cwkJCTEy Ci0jZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMJCQkxMwot I2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFtY3YJCQkJMTQKLSNk ZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhaGlzdAkJCTE1CisjZGVm aW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX25kaXN0X2VuYWJsZWQJCTcKKyNk ZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcwkJOAor I2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X21heF9idWNrZXRz CTkKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19idWlsdAkJ CTEwCisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX21jdl9idWlsdAkJ CTExCisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX2hpc3RfYnVpbHQJ CQkxMgorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19uZGlzdF9idWls dAkJMTMKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cwkJ CTE0CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMJCQkx NQorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFtY3YJCQkJMTYK KyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhaGlzdAkJCTE3Cisj ZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YW5kaXN0CQkJMTgKIAog I2VuZGlmICAgLyogUEdfTVZfU1RBVElTVElDX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9yZWxhdGlvbi5oCmluZGV4IDEyOThjNDIuLjk3ZDc0ZTkgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaApAQCAtNTk0LDExICs1OTQsMTMg QEAgdHlwZWRlZiBzdHJ1Y3QgTVZTdGF0aXN0aWNJbmZvCiAJYm9vbAkJZGVw c19lbmFibGVkOwkvKiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBlbmFibGVk ICovCiAJYm9vbAkJbWN2X2VuYWJsZWQ7CS8qIE1DViBsaXN0IGVuYWJsZWQg Ki8KIAlib29sCQloaXN0X2VuYWJsZWQ7CS8qIGhpc3RvZ3JhbSBlbmFibGVk ICovCisJYm9vbAkJbmRpc3RfZW5hYmxlZDsJLyogbmRpc3RpbmN0IGNvZWZm aWNpZW50IGVuYWJsZWQgKi8KIAogCS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0 aXN0aWNzICovCiAJYm9vbAkJZGVwc19idWlsdDsJCS8qIGZ1bmN0aW9uYWwg ZGVwZW5kZW5jaWVzIGJ1aWx0ICovCiAJYm9vbAkJbWN2X2J1aWx0OwkJLyog TUNWIGxpc3QgYnVpbHQgKi8KIAlib29sCQloaXN0X2J1aWx0OwkJLyogaGlz dG9ncmFtIGJ1aWx0ICovCisJYm9vbAkJbmRpc3RfYnVpbHQ7CS8qIG5kaXN0 aW5jdCBjb2VmZmljaWVudCBidWlsdCAqLwogCiAJLyogY29sdW1ucyBpbiB0 aGUgc3RhdGlzdGljcyAoYXR0bnVtcykgKi8KIAlpbnQydmVjdG9yICpzdGFr ZXlzOwkJLyogYXR0bnVtcyBvZiB0aGUgY29sdW1ucyBjb3ZlcmVkICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmggYi9zcmMv aW5jbHVkZS91dGlscy9tdnN0YXRzLmgKaW5kZXggMzViMmY4ZS4uYTE1NGNk OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaApAQCAtMjI1LDYgKzIy NSw3IEBAIHR5cGVkZWYgTVZTZXJpYWxpemVkSGlzdG9ncmFtRGF0YSAqTVZT ZXJpYWxpemVkSGlzdG9ncmFtOwogTVZEZXBlbmRlbmNpZXMgbG9hZF9tdl9k ZXBlbmRlbmNpZXMoT2lkIG12b2lkKTsKIE1DVkxpc3QgICAgICAgIGxvYWRf bXZfbWN2bGlzdChPaWQgbXZvaWQpOwogTVZTZXJpYWxpemVkSGlzdG9ncmFt ICAgIGxvYWRfbXZfaGlzdG9ncmFtKE9pZCBtdm9pZCk7Citkb3VibGUJCSAg IGxvYWRfbXZfbmRpc3RpbmN0KE9pZCBtdm9pZCk7CiAKIGJ5dGVhICogc2Vy aWFsaXplX212X2RlcGVuZGVuY2llcyhNVkRlcGVuZGVuY2llcyBkZXBlbmRl bmNpZXMpOwogYnl0ZWEgKiBzZXJpYWxpemVfbXZfbWN2bGlzdChNQ1ZMaXN0 IG1jdmxpc3QsIGludDJ2ZWN0b3IgKmF0dHJzLApAQCAtMjY2LDExICsyNjcs MTYgQEAgTVZIaXN0b2dyYW0KIGJ1aWxkX212X2hpc3RvZ3JhbShpbnQgbnVt cm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRycywKIAkJ CQkgICBWYWNBdHRyU3RhdHMgKipzdGF0cywgaW50IG51bXJvd3NfdG90YWwp OwogCitkb3VibGUKK2J1aWxkX212X25kaXN0aW5jdChpbnQgbnVtcm93cywg SGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRycywKKwkJCQkgICBW YWNBdHRyU3RhdHMgKipzdGF0cyk7CisKIHZvaWQgYnVpbGRfbXZfc3RhdHMo UmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dz LAogCQkJCQlpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0 cyk7CiAKIHZvaWQgdXBkYXRlX212X3N0YXRzKE9pZCByZWxpZCwgTVZEZXBl bmRlbmNpZXMgZGVwZW5kZW5jaWVzLAogCQkJCQkgTUNWTGlzdCBtY3ZsaXN0 LCBNVkhpc3RvZ3JhbSBoaXN0b2dyYW0sCisJCQkJCSBkb3VibGUgbmRpc3Rj b2VmZiwKIAkJCQkJIGludDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMg KipzdGF0cyk7CiAKICNpZmRlZiBERUJVR19NVkhJU1QKLS0gCjIuMS4wCgo= --------------040701000609000501090206 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------040701000609000501090206--