From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,T_KAM_HTML_FONT_INVALID,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0CB46C433E7 for ; Sat, 17 Oct 2020 06:24:27 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D27AA20780 for ; Sat, 17 Oct 2020 06:24:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FoB7aXXh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D27AA20780 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linux-erofs-bounces+linux-erofs=archiver.kernel.org@lists.ozlabs.org Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 4CCtK35LhvzDqyv for ; Sat, 17 Oct 2020 17:24:23 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::642; helo=mail-pl1-x642.google.com; envelope-from=jnhuang95@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=FoB7aXXh; dkim-atps=neutral Received: from mail-pl1-x642.google.com (mail-pl1-x642.google.com [IPv6:2607:f8b0:4864:20::642]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4CCtJw22tLzDqxg for ; Sat, 17 Oct 2020 17:24:15 +1100 (AEDT) Received: by mail-pl1-x642.google.com with SMTP id o9so2376995plx.10 for ; Fri, 16 Oct 2020 23:24:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:references:mime-version:message-id; bh=Ygwz0XIU3Ix39yXlqPSzjzYdzIyzlyPTcxnRClpICHE=; b=FoB7aXXhJL7F9EiFUbeZa3Zc5y9eSlb6PeBuTNU4JtBzUBfZWIGRinU9EqXhFapppg mRyt4kTAA8ZJEvBBk/xTbCsM3LArEwciWJ3n01XCkTmeiUC6tdNEWcOGRezyFFs4drWz lB55mhxwJkdulO+Sw0P92LpTiDNYPbsB7fL2QXOwVByYD9OfEfLtguf3e2G+sGGvL0BK 033867SoRWSOpzqqG2QndaVPaCEtA9dCI2Wd7N1prJbI3b9FPDBFHpGYTz6GB1BTdlSa b1yzBGBCD2Pi0nX8xEZwTW+6SneMQtIyspPnaVp2q558v8Zl9aF/D+EJBrWTB+u/xWbu GAjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:references:mime-version :message-id; bh=Ygwz0XIU3Ix39yXlqPSzjzYdzIyzlyPTcxnRClpICHE=; b=ss7rcdJyPR+qWyKKOcK3rNVPyNX9wG4//LKRlINb5wCJoA5yXAzRQ1WYUrr8TEwZU3 EMVe4ns0dR4u1Pqjy2WKN4BgKS1wie49trr5kPsE0S/PUedXRnM3Kq52ak0skrki4gDn Uv4AoW8JOpHYfrxGQMQDFY9wzEwgHGVDek5bxl7x0aUYGInk9ADvNxavn6xiGHsxABQA mjyROrvbaleXS8RjDuRiKAcFqk/J1s4jDBwYnztFz3x2se9aB0cPsL0CHg3PXdL2OOgv btfU0XFz27jXs4M3+RBhnpJeCzY9rIuya0xe2ax0LOIqb8GcFxbWBBmqCu5u2PCpxnQN tBzQ== X-Gm-Message-State: AOAM531ATSmLMCGlUZhmV/TW0J8RWJtWkSH/rgs5yhbhKw/i2a6UlgJ+ hTO1FAaDvOnsNhMSmKApJ7k= X-Google-Smtp-Source: ABdhPJwAjv2FLWp9E/X/FrxEs01F/btecoDCEJGPn5O5+6nWgc46ObBGCWiLjqyrVLd5N3BdVQlwHw== X-Received: by 2002:a17:90b:b12:: with SMTP id bf18mr7394902pjb.5.1602915851824; Fri, 16 Oct 2020 23:24:11 -0700 (PDT) Received: from hjn-xps15 (li1080-207.members.linode.com. [45.33.61.207]) by smtp.gmail.com with ESMTPSA id e11sm4587614pfl.58.2020.10.16.23.24.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 16 Oct 2020 23:24:11 -0700 (PDT) Date: Sat, 17 Oct 2020 14:24:13 +0800 From: "jnhuang95@gmail.com" To: "Gao Xiang" Subject: Re: Re: [PATCH 5/5] erofs-utils: support read compressed file References: <20201015133959.61007-1-huangjianan@oppo.com>, <20201015133959.61007-5-huangjianan@oppo.com>, <20201016161736.GC32727@hsiangkao-HP-ZHAN-66-Pro-G1> X-Priority: 3 X-GUID: AAB3D394-D707-45F5-8427-3C0CEBD781F2 X-Has-Attach: no X-Mailer: Foxmail 7.2.18.111[cn] Mime-Version: 1.0 Message-ID: <2020101714241160424912@gmail.com> Content-Type: multipart/alternative; boundary="----=_001_NextPart538660834367_=----" X-BeenThere: linux-erofs@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development of Linux EROFS file system List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: zhangshiming , linux-erofs , guoweichao Errors-To: linux-erofs-bounces+linux-erofs=archiver.kernel.org@lists.ozlabs.org Sender: "Linux-erofs" This is a multi-part message in MIME format. ------=_001_NextPart538660834367_=---- Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: base64 SGkgR2FveGlhbmcsDQoNClRoYW5rcyBmb3IgeW91ciByZXZpZXcgYW5kIHN1Z2dlc3Rpb25zLiBJ dCdzIGdyZWF0IHRvIGNvbW11bmljYXRlIHdpdGggb3V0c3RhbmRpbmcgY29tbXVuaXR5IGRldmVs b3BlcnMuIEkgaGF2ZSBsZWFybmVkIGEgbG90IGFuZCBsb29rIGZvcndhcmQgdG8gY29udHJpYnV0 ZSBtb3JlIHBhdGNoZXMgaW4gdGhlIGZ1dHVyZS4NCg0KUmVnYXJkcywNCkppYW5hbg0KDQoNCiAN CkZyb206IEdhbyBYaWFuZw0KRGF0ZTogMjAyMC0xMC0xNyAwMDoxNw0KVG86IEh1YW5nIEppYW5h bg0KQ0M6IGxpbnV4LWVyb2ZzOyBndW93ZWljaGFvOyB6aGFuZ3NoaW1pbmc7IGh1YW5namlhbmFu DQpTdWJqZWN0OiBSZTogW1BBVENIIDUvNV0gZXJvZnMtdXRpbHM6IHN1cHBvcnQgcmVhZCBjb21w cmVzc2VkIGZpbGUNCkhpIEppYW5hbiwNCiANCk9uIFRodSwgT2N0IDE1LCAyMDIwIGF0IDA5OjM5 OjU5UE0gKzA4MDAsIEh1YW5nIEppYW5hbiB3cm90ZToNCj4gU2lnbmVkLW9mZi1ieTogSHVhbmcg SmlhbmFuIDxodWFuZ2ppYW5hbkBvcHBvLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogR3VvIFdlaWNo YW8gPGd1b3dlaWNoYW9Ab3Bwby5jb20+DQogDQpJIHJlYWQgdGhlIGxvZ2ljIGJlbG93LCBhbmQg Z2VuZXJhbGx5IGl0IGxvb2tzIGdvb2QhIDx0aHVtYj4NCiANCkknbSBub3cgaGFuZGxpbmcgc29t ZSBtaW5vciB0aGluZyBhYm91dCB0aGlzIGFuZCBJIHdpbGwNCnVwZGF0ZSBhcyB0aGUgZm9sbG93 aW5nIHBhdGNoIHRvIHNwZWVkIHVwIHRoZSBkZXZlbG9wbWVudC4NCiANCj4gLS0tDQogDQouLi4N CiANCj4gZGlmZiAtLWdpdCBhL2Z1c2UvZGVjb21wcmVzcy5jIGIvZnVzZS9kZWNvbXByZXNzLmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uZTJkZjNjZQ0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKyBiL2Z1c2UvZGVjb21wcmVzcy5jDQogDQp3ZSBtaWdodCBuZWVkIHRv IG1vdmUgdGhpcyBmaWxlIHRvIGxpYi9kZWNvbXByZXNzLmMNCiANCj4gQEAgLTAsMCArMSw4NiBA QA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovDQo+ICsvKg0KPiAr ICogQ29weXJpZ2h0IChDKSwgMjAwOC0yMDIwLCBPUFBPIE1vYmlsZSBDb21tIENvcnAuLCBMdGQu DQo+ICsgKiBDcmVhdGVkIGJ5IEh1YW5nIEppYW5hbiA8aHVhbmdqaWFuYW5Ab3Bwby5jb20+DQo+ ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KPiArI2luY2x1ZGUgPGx6NC5oPg0K PiArDQo+ICsjaW5jbHVkZSAiZXJvZnMvaW50ZXJuYWwuaCINCj4gKyNpbmNsdWRlICJlcm9mcy9l cnIuaCINCj4gKyNpbmNsdWRlICJkZWNvbXByZXNzLmgiDQo+ICsjaW5jbHVkZSAibG9nZ2luZy5o Ig0KPiArI2luY2x1ZGUgImluaXQuaCINCj4gKw0KPiArc3RhdGljIGludCB6X2Vyb2ZzX3NoaWZ0 ZWRfdHJhbnNmb3JtKHN0cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NfcmVxICpycSkNCj4gK3sNCj4g KyBjaGFyICpkZXN0ID0gcnEtPm91dCArIHJxLT5vZnNfb3V0Ow0KIA0KSSB0aGluayBvZnNfb3V0 IGNhbiBiZSBvbWl0ZWQsIHNpbmNlIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgZGVzdCBidWZmZXIg aGVyZS4NCnNvIChuZXcpIHJxLT5vdXQgPT0gKG9sZClycS0+b3V0ICsgcnEtPm9mc19vdXQuDQog DQo+ICsgY2hhciAqc3JjID0gcnEtPmluICsgcnEtPm9mc19oZWFkOw0KIA0KbmVlZCB0byBqdWRn ZSBpZiB0aGUgb3V0cHV0c2l6ZSBpcyBsYXJnZXIgdGhhbiBFUk9GU19CTEtTSVosIHNpbmNlIGl0 J3MNCnVuZGVmaW5lZCBvbi1kaXNrIGJlaGF2aW9yLCBhbmQgY2FuIGJlIGltcGxlbWVudGVkIGlu IHRoZSBmdXR1cmUNCm9uLWRpc2sgdXBkYXRlLg0KIA0KPiArDQo+ICsgbWVtY3B5KGRlc3QsIHNy YywgcnEtPm91dHB1dHNpemUgLSBycS0+b2ZzX2hlYWQpOw0KPiArDQo+ICsgcmV0dXJuIDA7DQo+ ICt9DQogDQpBbmQgdGhpcyBmdW5jdGlvbiBjYW4gYmUgZm9sZGVkIGludG8gel9lcm9mc19kZWNv bXByZXNzKCksIGJlY2F1c2UgdGhlDQppbXBsZW1lbnRhdGlvbiBoZXJlIGlzIG11Y2ggc2ltcGxl IGVub3VnaC4NCiANCj4gKw0KPiArc3RhdGljIGludCB6X2Vyb2ZzX2RlY29tcHJlc3NfZ2VuZXJp YyhzdHJ1Y3Qgel9lcm9mc19kZWNvbXByZXNzX3JlcSAqcnEpDQogDQppdCBtaWdodCBiZSByZW5h bWVkIGludG8gel9lcm9mc19kZWNvbXByZXNzX2x6NC4NCiANCj4gK3sNCj4gKyBpbnQgcmV0ID0g MDsNCj4gKyBjaGFyICpkZXN0ID0gcnEtPm91dCArIHJxLT5vZnNfb3V0Ow0KPiArIGNoYXIgKnNy YyA9IHJxLT5pbjsNCj4gKyBjaGFyICpidWZmID0gTlVMTDsNCj4gKyBib29sIHN1cHBvcnRfMHBh ZGRpbmcgPSBmYWxzZTsNCj4gKyB1bnNpZ25lZCBpbnQgaW5wdXRtYXJnaW4gPSAwOw0KPiArDQo+ ICsgaWYgKHNiay0+ZmVhdHVyZV9pbmNvbXBhdCAmIEVST0ZTX0ZFQVRVUkVfSU5DT01QQVRfTFo0 XzBQQURESU5HKSB7DQo+ICsgc3VwcG9ydF8wcGFkZGluZyA9IHRydWU7DQo+ICsNCj4gKyB3aGls ZSAoIXNyY1tpbnB1dG1hcmdpbiAmIH5QQUdFX01BU0tdKQ0KPiArIGlmICghKCsraW5wdXRtYXJn aW4gJiB+UEFHRV9NQVNLKSkNCj4gKyBicmVhazsNCj4gKw0KPiArIGlmIChpbnB1dG1hcmdpbiA+ PSBycS0+aW5wdXRzaXplKQ0KPiArIHJldHVybiAtRUlPOw0KPiArIH0NCj4gKw0KPiArIGlmIChy cS0+b2ZzX2hlYWQpIHsNCiANCndlIG1pZ2h0IG5lZWQgdG8gcmV0aGluayBhYm91dCB0aGUgbmFt ZSBvZiBvZnNfaGVhZC4NCiANCj4gKyBidWZmID0gbWFsbG9jKHJxLT5vdXRwdXRzaXplKTsNCj4g KyBpZiAoIWJ1ZmYpDQo+ICsgcmV0dXJuIC1FTk9NRU07DQo+ICsgZGVzdCA9IGJ1ZmY7DQogDQpu ZWVkIHNvbWUgY2xlYW51cCwgYW5kIGRlc3QgdmFyaWFibGUgaXMgYXNzaWduZWQgZm9yIHNldmVy YWwgdGltZXMsDQpidXQgd2l0aG91dCBtYWtpbmcgdGhlIGxvZ2ljIHNpbXBsZXIuDQogDQo+ICsg fQ0KPiArDQo+ICsgaWYgKHJxLT5wYXJ0aWFsX2RlY29kaW5nIHx8ICFzdXBwb3J0XzBwYWRkaW5n KQ0KPiArIHJldCA9IExaNF9kZWNvbXByZXNzX3NhZmVfcGFydGlhbChzcmMgKyBpbnB1dG1hcmdp biwgZGVzdCwNCj4gKyAgIHJxLT5pbnB1dHNpemUgLSBpbnB1dG1hcmdpbiwNCj4gKyAgIHJxLT5v dXRwdXRzaXplLCBycS0+b3V0cHV0c2l6ZSk7DQo+ICsgZWxzZQ0KPiArIHJldCA9IExaNF9kZWNv bXByZXNzX3NhZmUoc3JjICsgaW5wdXRtYXJnaW4sIGRlc3QsDQo+ICsgICBycS0+aW5wdXRzaXpl IC0gaW5wdXRtYXJnaW4sDQo+ICsgICBycS0+b3V0cHV0c2l6ZSk7DQo+ICsNCj4gKyBpZiAocmV0 ICE9IChpbnQpcnEtPm91dHB1dHNpemUpIHsNCj4gKyByZXQgPSAtRUlPOw0KPiArIGdvdG8gb3V0 Ow0KPiArIH0NCj4gKw0KPiArIGlmIChycS0+b2ZzX2hlYWQpIHsNCj4gKyBzcmMgPSBkZXN0ICsg cnEtPm9mc19oZWFkOw0KPiArIGRlc3QgPSBycS0+b3V0ICsgcnEtPm9mc19vdXQ7DQo+ICsgbWVt Y3B5KGRlc3QsIHNyYywgcnEtPm91dHB1dHNpemUgLSBycS0+b2ZzX2hlYWQpOw0KPiArIH0NCj4g Kw0KPiArb3V0Og0KPiArIGlmIChidWZmKQ0KPiArIGZyZWUoYnVmZik7DQo+ICsNCj4gKyByZXR1 cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtpbnQgel9lcm9mc19kZWNvbXByZXNzKHN0cnVjdCB6X2Vy b2ZzX2RlY29tcHJlc3NfcmVxICpycSkNCj4gK3sNCj4gKyBpZiAocnEtPmFsZyA9PSBaX0VST0ZT X0NPTVBSRVNTSU9OX1NISUZURUQpDQo+ICsgcmV0dXJuIHpfZXJvZnNfc2hpZnRlZF90cmFuc2Zv cm0ocnEpOw0KPiArDQo+ICsgcmV0dXJuIHpfZXJvZnNfZGVjb21wcmVzc19nZW5lcmljKHJxKTsN Cj4gK30NCj4gZGlmZiAtLWdpdCBhL2Z1c2UvZGVjb21wcmVzcy5oIGIvZnVzZS9kZWNvbXByZXNz LmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uY2QzOTVjMw0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2Z1c2UvZGVjb21wcmVzcy5oDQogDQptb3ZlIHRoaXMgZmls ZSB0byBpbmNsdWRlL2Vyb2ZzL2RlY29tcHJlc3MuaA0KIA0KPiBAQCAtMCwwICsxLDM3IEBADQo+ ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8NCj4gKy8qDQo+ICsgKiBD b3B5cmlnaHQgKEMpLCAyMDA4LTIwMjAsIE9QUE8gTW9iaWxlIENvbW0gQ29ycC4sIEx0ZC4NCj4g KyAqIENyZWF0ZWQgYnkgSHVhbmcgSmlhbmFuIDxodWFuZ2ppYW5hbkBvcHBvLmNvbT4NCj4gKyAq Lw0KPiArDQo+ICsjaWZuZGVmIF9fRVJPRlNfREVDT01QUkVTU19IDQo+ICsjZGVmaW5lIF9fRVJP RlNfREVDT01QUkVTU19IDQo+ICsNCj4gKyNpbmNsdWRlICJlcm9mcy9pbnRlcm5hbC5oIg0KPiAr DQo+ICtlbnVtIHsNCj4gKyBaX0VST0ZTX0NPTVBSRVNTSU9OX1NISUZURUQgPSBaX0VST0ZTX0NP TVBSRVNTSU9OX01BWCwNCj4gKyBaX0VST0ZTX0NPTVBSRVNTSU9OX1JVTlRJTUVfTUFYDQo+ICt9 Ow0KPiArDQo+ICtzdHJ1Y3Qgel9lcm9mc19kZWNvbXByZXNzX3JlcSB7DQo+ICsgY2hhciAqaW4s ICpvdXQ7DQo+ICsNCj4gKyBzaXplX3Qgb2ZzX291dCwgb2ZzX2hlYWQ7DQo+ICsgdW5zaWduZWQg aW50IGlucHV0c2l6ZSwgb3V0cHV0c2l6ZTsNCj4gKw0KPiArIC8qIGluZGljYXRlIHRoZSBhbGdv cml0aG0gd2lsbCBiZSB1c2VkIGZvciBkZWNvbXByZXNzaW9uICovDQo+ICsgdW5zaWduZWQgaW50 IGFsZzsNCj4gKyBib29sIHBhcnRpYWxfZGVjb2Rpbmc7DQo+ICt9Ow0KPiArDQo+ICsjaWZkZWYg TFo0X0VOQUJMRUQNCj4gK2ludCB6X2Vyb2ZzX2RlY29tcHJlc3Moc3RydWN0IHpfZXJvZnNfZGVj b21wcmVzc19yZXEgKnJxKTsNCj4gKyNlbHNlDQo+ICtpbnQgel9lcm9mc19kZWNvbXByZXNzKHN0 cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NfcmVxICpycSkNCj4gK3sNCj4gKyByZXR1cm4gLUVPUE5P VFNVUFA7DQo+ICt9DQo+ICsjZW5kaWYNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9m dXNlL2RlbnRyeS5oIGIvZnVzZS9kZW50cnkuaA0KPiBpbmRleCBlZTIxNDRkLi5mODljNTA2IDEw MDY0NA0KPiAtLS0gYS9mdXNlL2RlbnRyeS5oDQo+ICsrKyBiL2Z1c2UvZGVudHJ5LmgNCj4gQEAg LTEwLDEwICsxMCwxMSBAQA0KPiAgI2luY2x1ZGUgPHN0ZGludC5oPg0KPiAgI2luY2x1ZGUgImVy b2ZzL2ludGVybmFsLmgiDQo+ICANCj4gKy8qIGZpeG1lOiBEZWFsIHdpdGggbmFtZXMgdGhhdCBl eGNlZWQgdGhlIGFsbG9jYXRlZCBzaXplICovDQo+ICAjaWZkZWYgX182NEJJVFMNCj4gLSNkZWZp bmUgRENBQ0hFX0VOVFJZX05BTUVfTEVOICAgICAgIDQwDQo+ICsjZGVmaW5lIERDQUNIRV9FTlRS WV9OQU1FX0xFTiAgICAgICBFUk9GU19OQU1FX0xFTg0KPiAgI2Vsc2UNCj4gLSNkZWZpbmUgRENB Q0hFX0VOVFJZX05BTUVfTEVOICAgICAgIDQ4DQo+ICsjZGVmaW5lIERDQUNIRV9FTlRSWV9OQU1F X0xFTiAgICAgICBFUk9GU19OQU1FX0xFTg0KPiAgI2VuZGlmDQogDQpub3QgcmVsYXRlZCB0byB0 aGlzIHBhdGNoLCBkb2VzIGl0IHJlbGF0ZSB0byBhbm90aGVyIHByZWV4aXN0DQpidWcgYWJvdXQg ZXJvZnNmdXNlIGNvZGViYXNlPw0KIA0KPiAgDQo+ICAvKiBUaGlzIHN0cnVjdCBkZWNsYXJlcyBh IG5vZGUgb2YgYSBrLXRyZWUuICBFdmVyeSBub2RlIGhhcyBhIHBvaW50ZXIgdG8gb25lIG9mDQo+ IGRpZmYgLS1naXQgYS9mdXNlL2luaXQuYyBiL2Z1c2UvaW5pdC5jDQo+IGluZGV4IDgxOThmYTcu LmU5Y2M5ZjggMTAwNjQ0DQo+IC0tLSBhL2Z1c2UvaW5pdC5jDQo+ICsrKyBiL2Z1c2UvaW5pdC5j DQo+IEBAIC0xNyw3ICsxNywyMyBAQA0KPiAgDQo+ICANCj4gIHN0cnVjdCBlcm9mc19zdXBlcl9i bG9jayBzdXBlcjsNCj4gLXN0YXRpYyBzdHJ1Y3QgZXJvZnNfc3VwZXJfYmxvY2sgKnNiayA9ICZz dXBlcjsNCj4gK3N0cnVjdCBlcm9mc19zdXBlcl9ibG9jayAqc2JrID0gJnN1cGVyOw0KPiArDQo+ ICtzdGF0aWMgYm9vbCBjaGVja19sYXlvdXRfY29tcGF0aWJpbGl0eShzdHJ1Y3QgZXJvZnNfc3Vw ZXJfYmxvY2sgKnNiLA0KPiArICAgICAgICBzdHJ1Y3QgZXJvZnNfc3VwZXJfYmxvY2sgKmRzYikN Cj4gK3sNCj4gKyBjb25zdCB1bnNpZ25lZCBpbnQgZmVhdHVyZSA9IGxlMzJfdG9fY3B1KGRzYi0+ ZmVhdHVyZV9pbmNvbXBhdCk7DQo+ICsNCj4gKyBzYi0+ZmVhdHVyZV9pbmNvbXBhdCA9IGZlYXR1 cmU7DQo+ICsNCj4gKyAvKiBjaGVjayBpZiBjdXJyZW50IGtlcm5lbCBtZWV0cyBhbGwgbWFuZGF0 b3J5IHJlcXVpcmVtZW50cyAqLw0KPiArIGlmIChmZWF0dXJlICYgKH5FUk9GU19BTExfRkVBVFVS RV9JTkNPTVBBVCkpIHsNCj4gKyBsb2dlKCJ1bmlkZW50aWZpZWQgaW5jb21wYXRpYmxlIGZlYXR1 cmUgJXgsIHBsZWFzZSB1cGdyYWRlIGtlcm5lbCB2ZXJzaW9uIiwNCj4gKyAgICAgIGZlYXR1cmUg JiB+RVJPRlNfQUxMX0ZFQVRVUkVfSU5DT01QQVQpOw0KPiArIHJldHVybiBmYWxzZTsNCj4gKyB9 DQo+ICsgcmV0dXJuIHRydWU7DQo+ICt9DQo+ICANCj4gIGludCBlcm9mc19pbml0X3N1cGVyKHZv aWQpDQo+ICB7DQo+IEBAIC00MCw2ICs1Niw5IEBAIGludCBlcm9mc19pbml0X3N1cGVyKHZvaWQp DQo+ICByZXR1cm4gLUVJTlZBTDsNCj4gIH0NCj4gIA0KPiArIGlmICghY2hlY2tfbGF5b3V0X2Nv bXBhdGliaWxpdHkoc2JrLCBzYikpDQo+ICsgcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gIHNiay0+ Y2hlY2tzdW0gPSBsZTMyX3RvX2NwdShzYi0+Y2hlY2tzdW0pOw0KPiAgc2JrLT5mZWF0dXJlX2Nv bXBhdCA9IGxlMzJfdG9fY3B1KHNiLT5mZWF0dXJlX2NvbXBhdCk7DQo+ICBzYmstPmJsa3N6Yml0 cyA9IHNiLT5ibGtzemJpdHM7DQo+IEBAIC01Niw2ICs3NSw3IEBAIGludCBlcm9mc19pbml0X3N1 cGVyKHZvaWQpDQo+ICBzYmstPnJvb3RfbmlkID0gbGUxNl90b19jcHUoc2ItPnJvb3RfbmlkKTsN Cj4gIA0KPiAgbG9ncCgiJS0xNXM6MHglWCIsIFNUUihtYWdpYyksIFNVUEVSX01FTShtYWdpYykp Ow0KPiArIGxvZ3AoIiUtMTVzOjB4JVgiLCBTVFIoZmVhdHVyZV9pbmNvbXBhdCksIFNVUEVSX01F TShmZWF0dXJlX2luY29tcGF0KSk7DQo+ICBsb2dwKCIlLTE1czoweCVYIiwgU1RSKGZlYXR1cmVf Y29tcGF0KSwgU1VQRVJfTUVNKGZlYXR1cmVfY29tcGF0KSk7DQo+ICBsb2dwKCIlLTE1czoldSIs ICAgU1RSKGJsa3N6Yml0cyksIFNVUEVSX01FTShibGtzemJpdHMpKTsNCj4gIGxvZ3AoIiUtMTVz OiV1IiwgICBTVFIocm9vdF9uaWQpLCBTVVBFUl9NRU0ocm9vdF9uaWQpKTsNCj4gZGlmZiAtLWdp dCBhL2Z1c2UvaW5pdC5oIGIvZnVzZS9pbml0LmgNCj4gaW5kZXggZDdhOTdiNS4uM2ZjNGViNSAx MDA2NDQNCj4gLS0tIGEvZnVzZS9pbml0LmgNCj4gKysrIGIvZnVzZS9pbml0LmgNCj4gQEAgLTEz LDYgKzEzLDggQEANCj4gIA0KPiAgI2RlZmluZSBCT09UX1NFQ1RPUl9TSVpFIDB4NDAwDQo+ICAN Cj4gK2V4dGVybiBzdHJ1Y3QgZXJvZnNfc3VwZXJfYmxvY2sgKnNiazsNCj4gKw0KPiAgaW50IGVy b2ZzX2luaXRfc3VwZXIodm9pZCk7DQo+ICBlcm9mc19uaWRfdCBlcm9mc19nZXRfcm9vdF9uaWQo dm9pZCk7DQo+ICBlcm9mc19vZmZfdCBuaWQyYWRkcihlcm9mc19uaWRfdCBuaWQpOw0KPiBkaWZm IC0tZ2l0IGEvZnVzZS9uYW1laS5jIGIvZnVzZS9uYW1laS5jDQo+IGluZGV4IDdlZDExNjguLjUx MGZjZmQgMTAwNjQ0DQo+IC0tLSBhL2Z1c2UvbmFtZWkuYw0KPiArKysgYi9mdXNlL25hbWVpLmMN Cj4gQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGlubGluZSBkZXZfdCBuZXdfZGVjb2RlX2Rldih1 MzIgZGV2KQ0KPiAgDQo+ICBpbnQgZXJvZnNfaWdldF9ieV9uaWQoZXJvZnNfbmlkX3QgbmlkLCBz dHJ1Y3QgZXJvZnNfdm5vZGUgKnZpKQ0KPiAgew0KPiAtIGludCByZXQ7DQo+ICsgaW50IHJldCwg aWZtdDsNCj4gIGNoYXIgYnVmW0VST0ZTX0JMS1NJWl07DQo+ICBzdHJ1Y3QgZXJvZnNfaW5vZGVf Y29tcGFjdCAqdjE7DQo+ICBjb25zdCBlcm9mc19vZmZfdCBhZGRyID0gbmlkMmFkZHIobmlkKTsN Cj4gQEAgLTYwLDYgKzYwLDExIEBAIGludCBlcm9mc19pZ2V0X2J5X25pZChlcm9mc19uaWRfdCBu aWQsIHN0cnVjdCBlcm9mc192bm9kZSAqdmkpDQo+ICByZXR1cm4gLUVJTzsNCj4gIA0KPiAgdjEg PSAoc3RydWN0IGVyb2ZzX2lub2RlX2NvbXBhY3QgKilidWY7DQo+ICsgLyogZml4bWU6IHN1cHBv cnQgZXh0ZW5kZWQgaW5vZGUgKi8NCj4gKyBpZm10ID0gbGUxNl90b19jcHUodjEtPmlfZm9ybWF0 KTsNCj4gKyBpZiAoX19pbm9kZV92ZXJzaW9uKGlmbXQpICE9IEVST0ZTX0lOT0RFX0xBWU9VVF9D T01QQUNUKQ0KPiArIHJldHVybiAtRU9QTk9UU1VQUDsNCj4gKw0KPiAgdmktPmRhdGFsYXlvdXQg PSBfX2lub2RlX2RhdGFfbWFwcGluZyhsZTE2X3RvX2NwdSh2MS0+aV9mb3JtYXQpKTsNCj4gIHZp LT5pbm9kZV9pc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZXJvZnNfaW5vZGVfY29tcGFjdCk7DQo+ICB2 aS0+eGF0dHJfaXNpemUgPSBlcm9mc194YXR0cl9pYm9keV9zaXplKHYxLT5pX3hhdHRyX2ljb3Vu dCk7DQo+IEBAIC04OCw2ICs5MywxMCBAQCBpbnQgZXJvZnNfaWdldF9ieV9uaWQoZXJvZnNfbmlk X3QgbmlkLCBzdHJ1Y3QgZXJvZnNfdm5vZGUgKnZpKQ0KPiAgcmV0dXJuIC1FSU87DQo+ICB9DQo+ ICANCj4gKyB2aS0+el9pbml0ZWQgPSBmYWxzZTsNCj4gKyBpZiAoZXJvZnNfaW5vZGVfaXNfZGF0 YV9jb21wcmVzc2VkKHZpLT5kYXRhbGF5b3V0KSkNCj4gKyB6X2Vyb2ZzX2ZpbGxfaW5vZGUodmkp Ow0KPiArDQo+ICByZXR1cm4gMDsNCj4gIH0NCj4gIA0KPiBkaWZmIC0tZ2l0IGEvZnVzZS9yZWFk LmMgYi9mdXNlL3JlYWQuYw0KPiBpbmRleCAzY2U1YzRmLi5jYzA3ODFmIDEwMDY0NA0KPiAtLS0g YS9mdXNlL3JlYWQuYw0KPiArKysgYi9mdXNlL3JlYWQuYw0KPiBAQCAtMTYsNiArMTYsNyBAQA0K PiAgI2luY2x1ZGUgIm5hbWVpLmgiDQo+ICAjaW5jbHVkZSAiZGlza19pby5oIg0KPiAgI2luY2x1 ZGUgImluaXQuaCINCj4gKyNpbmNsdWRlICJkZWNvbXByZXNzLmgiDQo+ICANCj4gIHNpemVfdCBl cm9mc19yZWFkX2RhdGEoc3RydWN0IGVyb2ZzX3Zub2RlICp2bm9kZSwgY2hhciAqYnVmZmVyLA0K PiAgICAgICAgIHNpemVfdCBzaXplLCBvZmZfdCBvZmZzZXQpDQo+IEBAIC03OCw2ICs3OSw3MyBA QCBmaW5pc2hlZDoNCj4gIA0KPiAgfQ0KPiAgDQo+ICtzaXplX3QgZXJvZnNfcmVhZF9kYXRhX2Nv bXByZXNzaW9uKHN0cnVjdCBlcm9mc192bm9kZSAqdm5vZGUsIGNoYXIgKmJ1ZmZlciwNCj4gKyAg ICAgICAgc2l6ZV90IHNpemUsIG9mZl90IG9mZnNldCkNCj4gK3sNCj4gKyBpbnQgcmV0Ow0KPiAr IHNpemVfdCBlbmQsIGNvdW50LCBvZnMsIHN1bSA9IHNpemU7DQo+ICsgc3RydWN0IGVyb2ZzX21h cF9ibG9ja3MgbWFwID0gew0KPiArIC5pbmRleCA9IFVJTlRfTUFYLA0KPiArIH07DQo+ICsgYm9v bCBwYXJ0aWFsOw0KPiArIHVuc2lnbmVkIGludCBhbGdvcml0aG1mb3JtYXQ7DQo+ICsgY2hhciBy YXdbRVJPRlNfQkxLU0laXTsNCj4gKw0KPiArIHdoaWxlIChzdW0pIHsNCj4gKyBlbmQgPSBvZmZz ZXQgKyBzdW07DQo+ICsgbWFwLm1fbGEgPSBlbmQgLSAxOw0KPiArDQo+ICsgcmV0ID0gel9lcm9m c19tYXBfYmxvY2tzX2l0ZXIodm5vZGUsICZtYXApOw0KPiArIGlmIChyZXQpDQo+ICsgcmV0dXJu IHJldDsNCj4gKw0KPiArIGlmICghKG1hcC5tX2ZsYWdzICYgRVJPRlNfTUFQX01BUFBFRCkpIHsN Cj4gKyBzdW0gLT0gbWFwLm1fbGxlbjsNCj4gKyBjb250aW51ZTsNCj4gKyB9DQo+ICsNCj4gKyBy ZXQgPSBkZXZfcmVhZChyYXcsIEVST0ZTX0JMS1NJWiwgbWFwLm1fcGEpOw0KPiArIGlmIChyZXQg PCAwIHx8IChzaXplX3QpcmV0ICE9IEVST0ZTX0JMS1NJWikNCj4gKyByZXR1cm4gLUVJTzsNCj4g Kw0KPiArIGFsZ29yaXRobWZvcm1hdCA9IG1hcC5tX2ZsYWdzICYgRVJPRlNfTUFQX1pJUFBFRCA/ DQo+ICsgWl9FUk9GU19DT01QUkVTU0lPTl9MWjQgOg0KPiArIFpfRVJPRlNfQ09NUFJFU1NJT05f U0hJRlRFRDsNCj4gKw0KPiArIGlmIChlbmQgPj0gbWFwLm1fbGEgKyBtYXAubV9sbGVuKSB7DQo+ ICsgY291bnQgPSBtYXAubV9sbGVuOw0KPiArIHBhcnRpYWwgPSAhKG1hcC5tX2ZsYWdzICYgRVJP RlNfTUFQX0ZVTExfTUFQUEVEKTsNCj4gKyB9IGVsc2Ugew0KPiArIGNvdW50ID0gZW5kIC0gbWFw Lm1fbGE7DQo+ICsgcGFydGlhbCA9IHRydWU7DQo+ICsgfQ0KIA0KaXQgd291bGQgYmUgYmV0dGVy IHRvIG1ha2UgdGhlIGxvZ2ljIG1vcmUgZXhwbGljaXRseSwgbGlrZToNCiANCi0gICAgICAgICAg ICAgICBpZiAoZW5kID49IG1hcC5tX2xhICsgbWFwLm1fbGxlbikgew0KLSAgICAgICAgICAgICAg ICAgICAgICAgY291bnQgPSBtYXAubV9sbGVuOw0KLSAgICAgICAgICAgICAgICAgICAgICAgcGFy dGlhbCA9ICEobWFwLm1fZmxhZ3MgJiBFUk9GU19NQVBfRlVMTF9NQVBQRUQpOw0KLSAgICAgICAg ICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgLyoNCisgICAgICAgICAgICAgICAgKiB0 cmltIHRvIHRoZSBuZWVkZWQgc2l6ZSBpZiB0aGUgcmV0dXJuZWQgZXh0ZW50IGlzIHF1aXRlDQor ICAgICAgICAgICAgICAgICogbGFyZ2VyIHRoYW4gcmVxdWVzdGVkLCBhbmQgc2V0IHVwIHBhcnRp YWwgZmxhZyBhcyB3ZWxsLg0KKyAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgIGlm IChlbmQgPCBtYXAubV9sYSArIG1hcC5tX2xsZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg IGNvdW50ID0gZW5kIC0gbWFwLm1fbGE7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFs ID0gdHJ1ZTsNCisgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAg ICAgQVNTRVJUKGVuZCA9PSBtYXAubV9sYSArIG1hcF9tX2xsZW4pOw0KKyAgICAgICAgICAgICAg ICAgICAgICAgY291bnQgPSBtYXAubV9sbGVuOw0KKyAgICAgICAgICAgICAgICAgICAgICAgcGFy dGlhbCA9ICEobWFwLm1fZmxhZ3MgJiBFUk9GU19NQVBfRlVMTF9NQVBQRUQpOw0KICAgICAgICAg ICAgICAgIH0NCiANCj4gKw0KPiArIGlmICgob2ZmX3QpbWFwLm1fbGEgPCBvZmZzZXQpIHsNCj4g KyBvZnMgPSBvZmZzZXQgLSBtYXAubV9sYTsNCj4gKyBzdW0gPSAwOw0KPiArIH0gZWxzZSB7DQo+ ICsgb2ZzID0gMDsNCj4gKyBzdW0gLT0gY291bnQ7DQo+ICsgfQ0KIA0KYSBiaXQgd2VpcmQgaGVy ZSwgYW55d2F5LCBsZXQgbWUgY2xlYW4gdXAgaGVyZSBhcyB3ZWxsLg0KIA0KPiArDQo+ICsgcmV0 ID0gel9lcm9mc19kZWNvbXByZXNzKCYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc19yZXEpIHsN Cj4gKyAuaW4gPSByYXcsDQo+ICsgLm91dCA9IGJ1ZmZlciwNCj4gKyAub2ZzX291dCA9IHN1bSwN Cj4gKyAub2ZzX2hlYWQgPSBvZnMsDQo+ICsgLmlucHV0c2l6ZSA9IEVST0ZTX0JMS1NJWiwNCj4g KyAub3V0cHV0c2l6ZSA9IGNvdW50LA0KPiArIC5hbGcgPSBhbGdvcml0aG1mb3JtYXQsDQo+ICsg LnBhcnRpYWxfZGVjb2RpbmcgPSBwYXJ0aWFsDQo+ICsgfSk7DQo+ICsgaWYgKHJldCA8IDApDQo+ ICsgcmV0dXJuIHJldDsNCj4gKyB9DQo+ICsNCj4gKyBsb2dpKCJuaWQ6JXUgc2l6ZT0lemQgb2Zm c2V0PSVsbHUgZG9uZSIsDQo+ICsgICAgICB2bm9kZS0+bmlkLCBzaXplLCAobG9uZyBsb25nKW9m ZnNldCk7DQo+ICsgcmV0dXJuIHNpemU7DQo+ICt9DQo+ICANCj4gIGludCBlcm9mc19yZWFkKGNv bnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIG9mZl90IG9mZnNldCwN Cj4gICAgICAgICBzdHJ1Y3QgZnVzZV9maWxlX2luZm8gKmZpKQ0KPiBAQCAtMTA3LDcgKzE3NSw4 IEBAIGludCBlcm9mc19yZWFkKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90 IHNpemUsIG9mZl90IG9mZnNldCwNCj4gIA0KPiAgY2FzZSBFUk9GU19JTk9ERV9GTEFUX0NPTVBS RVNTSU9OX0xFR0FDWToNCj4gIGNhc2UgRVJPRlNfSU5PREVfRkxBVF9DT01QUkVTU0lPTjoNCj4g LSAvKiBGaXhtZTogKi8NCj4gKyByZXR1cm4gZXJvZnNfcmVhZF9kYXRhX2NvbXByZXNzaW9uKCZ2 LCBidWZmZXIsIHNpemUsIG9mZnNldCk7DQo+ICsNCj4gIGRlZmF1bHQ6DQo+ICByZXR1cm4gLUVJ TlZBTDsNCj4gIH0NCj4gZGlmZiAtLWdpdCBhL2Z1c2Uvem1hcC5jIGIvZnVzZS96bWFwLmMNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uMDIyY2ExYg0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL2Z1c2Uvem1hcC5jDQogDQpsZXQncyBtb3ZlIHRoaXMgZmlsZSB0byBs aWIvIGFzIHdlbGwuDQogDQo+IEBAIC0wLDAgKzEsNDE2IEBADQo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQogDQpMZXQncyByZWxpY2Vuc2UgdGhpcyBmaWxlIHRv IEdQTC0yLjArIGZvciBlcm9mcy11dGlscw0KKHNpbmNlIEknbSB0aGUgb3JpZ2luYWwgYXV0aG9y LCBhbmQgYXNzdW1lIHlvdSBhZ3JlZSBvbiB0aGlzIGFzIHdlbGwuLikNCiANCj4gKy8qDQo+ICsg KiBNYW55IHBhcnRzIG9mIGNvZGVzIGFyZSBjb3BpZWQgZnJvbSBMaW51eCBrZXJuZWwvZnMvZXJv ZnMuDQo+ICsgKg0KPiArICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgSFVBV0VJLCBJbmMuDQo+ ICsgKiAgICAgICAgICAgICBodHRwczovL3d3dy5odWF3ZWkuY29tLw0KPiArICogQ3JlYXRlZCBi eSBHYW8gWGlhbmcgPGdhb3hpYW5nMjVAaHVhd2VpLmNvbT4NCj4gKyAqIE1vZGlmaWVkIGJ5IEh1 YW5nIEppYW5hbiA8aHVhbmdqaWFuYW5Ab3Bwby5jb20+DQo+ICsgKi8NCj4gKw0KPiArI2luY2x1 ZGUgImluaXQuaCINCj4gKyNpbmNsdWRlICJkaXNrX2lvLmgiDQo+ICsjaW5jbHVkZSAibG9nZ2lu Zy5oIg0KPiArDQo+ICtpbnQgel9lcm9mc19maWxsX2lub2RlKHN0cnVjdCBlcm9mc192bm9kZSAq dmkpDQo+ICt7DQo+ICsgaWYgKHZpLT5kYXRhbGF5b3V0ID09IEVST0ZTX0lOT0RFX0ZMQVRfQ09N UFJFU1NJT05fTEVHQUNZKSB7DQo+ICsgdmktPnpfYWR2aXNlID0gMDsNCj4gKyB2aS0+el9hbGdv cml0aG10eXBlWzBdID0gMDsNCj4gKyB2aS0+el9hbGdvcml0aG10eXBlWzFdID0gMDsNCj4gKyB2 aS0+el9sb2dpY2FsX2NsdXN0ZXJiaXRzID0gTE9HX0JMT0NLX1NJWkU7DQo+ICsgdmktPnpfcGh5 c2ljYWxfY2x1c3RlcmJpdHNbMF0gPSB2aS0+el9sb2dpY2FsX2NsdXN0ZXJiaXRzOw0KPiArIHZp LT56X3BoeXNpY2FsX2NsdXN0ZXJiaXRzWzFdID0gdmktPnpfbG9naWNhbF9jbHVzdGVyYml0czsN Cj4gKyB2aS0+el9pbml0ZWQgPSB0cnVlOw0KPiArIH0NCj4gKw0KPiArIHJldHVybiAwOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW50IHpfZXJvZnNfZmlsbF9pbm9kZV9sYXp5KHN0cnVjdCBlcm9m c192bm9kZSAqdmkpDQo+ICt7DQo+ICsgaW50IHJldDsNCj4gKyBlcm9mc19vZmZfdCBwb3M7DQo+ ICsgc3RydWN0IHpfZXJvZnNfbWFwX2hlYWRlciAqaDsNCj4gKyBjaGFyIGJ1Zls4XTsNCj4gKw0K PiArIGlmICh2aS0+el9pbml0ZWQpDQo+ICsgcmV0dXJuIDA7DQo+ICsNCj4gKyBEQkdfQlVHT04o dmktPmRhdGFsYXlvdXQgPT0gRVJPRlNfSU5PREVfRkxBVF9DT01QUkVTU0lPTl9MRUdBQ1kpOw0K PiArDQo+ICsgcG9zID0gcm91bmRfdXAobmlkMmFkZHIodmktPm5pZCkgKyB2aS0+aW5vZGVfaXNp emUgKyB2aS0+eGF0dHJfaXNpemUsIDgpOw0KPiArDQo+ICsgcmV0ID0gZGV2X3JlYWQoYnVmLCA4 LCBwb3MpOw0KPiArIGlmIChyZXQgPCAwICYmICh1aW50MzJfdClyZXQgIT0gOCkNCj4gKyByZXR1 cm4gLUVJTzsNCj4gKw0KPiArIGggPSAoc3RydWN0IHpfZXJvZnNfbWFwX2hlYWRlciAqKWJ1ZjsN Cj4gKyB2aS0+el9hZHZpc2UgPSBsZTE2X3RvX2NwdShoLT5oX2FkdmlzZSk7DQo+ICsgdmktPnpf YWxnb3JpdGhtdHlwZVswXSA9IGgtPmhfYWxnb3JpdGhtdHlwZSAmIDE1Ow0KPiArIHZpLT56X2Fs Z29yaXRobXR5cGVbMV0gPSBoLT5oX2FsZ29yaXRobXR5cGUgPj4gNDsNCj4gKw0KPiArIGlmICh2 aS0+el9hbGdvcml0aG10eXBlWzBdID49IFpfRVJPRlNfQ09NUFJFU1NJT05fTUFYKSB7DQo+ICsg bG9nZSgidW5rbm93biBjb21wcmVzc2lvbiBmb3JtYXQgJXUgZm9yIG5pZCAlbGx1IiwNCj4gKyAg ICAgIHZpLT56X2FsZ29yaXRobXR5cGVbMF0sIHZpLT5uaWQpOw0KPiArIHJldHVybiAtRU9QTk9U U1VQUDsNCj4gKyB9DQo+ICsNCj4gKyB2aS0+el9sb2dpY2FsX2NsdXN0ZXJiaXRzID0gTE9HX0JM T0NLX1NJWkUgKyAoaC0+aF9jbHVzdGVyYml0cyAmIDcpOw0KPiArIHZpLT56X3BoeXNpY2FsX2Ns dXN0ZXJiaXRzWzBdID0gdmktPnpfbG9naWNhbF9jbHVzdGVyYml0cyArDQo+ICsgKChoLT5oX2Ns dXN0ZXJiaXRzID4+IDMpICYgMyk7DQo+ICsNCj4gKyBpZiAodmktPnpfcGh5c2ljYWxfY2x1c3Rl cmJpdHNbMF0gIT0gTE9HX0JMT0NLX1NJWkUpIHsNCj4gKyBsb2dlKCJ1bnN1cHBvcnRlZCBwaHlz aWNhbCBjbHVzdGVyYml0cyAldSBmb3IgbmlkICVsbHUiLA0KPiArICAgICAgdmktPnpfcGh5c2lj YWxfY2x1c3RlcmJpdHNbMF0sIHZpLT5uaWQpOw0KPiArIHJldHVybiAtRU9QTk9UU1VQUDsNCj4g KyB9DQo+ICsNCj4gKyB2aS0+el9waHlzaWNhbF9jbHVzdGVyYml0c1sxXSA9IHZpLT56X2xvZ2lj YWxfY2x1c3RlcmJpdHMgKw0KPiArICgoaC0+aF9jbHVzdGVyYml0cyA+PiA1KSAmIDcpOw0KPiAr IHZpLT56X2luaXRlZCA9IHRydWU7DQo+ICsNCj4gKyByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr c3RydWN0IHpfZXJvZnNfbWFwcmVjb3JkZXIgew0KPiArIHN0cnVjdCBlcm9mc192bm9kZSAqdm5v ZGU7DQo+ICsgc3RydWN0IGVyb2ZzX21hcF9ibG9ja3MgKm1hcDsNCj4gKyB2b2lkICprYWRkcjsN Cj4gKw0KPiArIHVuc2lnbmVkIGxvbmcgbGNuOw0KPiArIC8qIGNvbXByZXNzaW9uIGV4dGVudCBp bmZvcm1hdGlvbiBnYXRoZXJlZCAqLw0KPiArIHU4ICB0eXBlOw0KPiArIHUxNiBjbHVzdGVyb2Zz Ow0KPiArIHUxNiBkZWx0YVsyXTsNCj4gKyBlcm9mc19ibGtfdCBwYmxrOw0KPiArfTsNCj4gKw0K PiArc3RhdGljIGludCB6X2Vyb2ZzX3JlbG9hZF9pbmRleGVzKHN0cnVjdCB6X2Vyb2ZzX21hcHJl Y29yZGVyICptLA0KPiArICAgZXJvZnNfYmxrX3QgZWJsaykNCj4gK3sNCj4gKyBpbnQgcmV0Ow0K PiArIHN0cnVjdCBlcm9mc19tYXBfYmxvY2tzICpjb25zdCBtYXAgPSBtLT5tYXA7DQo+ICsgY2hh ciAqbXBhZ2UgPSBtYXAtPm1wYWdlOw0KPiArDQo+ICsgaWYgKG1hcC0+aW5kZXggPT0gZWJsaykN Cj4gKyByZXR1cm4gMDsNCj4gKw0KPiArIHJldCA9IGRldl9yZWFkKG1wYWdlLCBFUk9GU19CTEtT SVosIGJsa25yX3RvX2FkZHIoZWJsaykpOw0KPiArIGlmIChyZXQgPCAwICYmICh1aW50MzJfdCly ZXQgIT0gRVJPRlNfQkxLU0laKQ0KPiArIHJldHVybiAtRUlPOw0KPiArDQo+ICsgbWFwLT5pbmRl eCA9IGVibGs7DQo+ICsNCj4gKyByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBs ZWdhY3lfbG9hZF9jbHVzdGVyX2Zyb21fZGlzayhzdHJ1Y3Qgel9lcm9mc19tYXByZWNvcmRlciAq bSwNCj4gKyB1bnNpZ25lZCBsb25nIGxjbikNCj4gK3sNCj4gKyBzdHJ1Y3QgZXJvZnNfdm5vZGUg KmNvbnN0IHZpID0gbS0+dm5vZGU7DQo+ICsgY29uc3QgZXJvZnNfb2ZmX3QgaWJhc2UgPSBuaWQy YWRkcih2aS0+bmlkKTsNCj4gKyBjb25zdCBlcm9mc19vZmZfdCBwb3MgPQ0KPiArIFpfRVJPRlNf VkxFX0xFR0FDWV9JTkRFWF9BTElHTihpYmFzZSArIHZpLT5pbm9kZV9pc2l6ZSArDQo+ICsgICAg ICAgIHZpLT54YXR0cl9pc2l6ZSkgKw0KPiArIGxjbiAqIHNpemVvZihzdHJ1Y3Qgel9lcm9mc192 bGVfZGVjb21wcmVzc2VkX2luZGV4KTsNCj4gKyBzdHJ1Y3Qgel9lcm9mc192bGVfZGVjb21wcmVz c2VkX2luZGV4ICpkaTsNCj4gKyB1bnNpZ25lZCBpbnQgYWR2aXNlLCB0eXBlOw0KPiArIGludCBl cnI7DQo+ICsNCj4gKyBlcnIgPSB6X2Vyb2ZzX3JlbG9hZF9pbmRleGVzKG0sIGVyb2ZzX2Jsa25y KHBvcykpOw0KPiArIGlmIChlcnIpDQo+ICsgcmV0dXJuIGVycjsNCj4gKw0KPiArIG0tPmxjbiA9 IGxjbjsNCj4gKyBkaSA9IG0tPmthZGRyICsgZXJvZnNfYmxrb2ZmKHBvcyk7DQo+ICsNCj4gKyBh ZHZpc2UgPSBsZTE2X3RvX2NwdShkaS0+ZGlfYWR2aXNlKTsNCj4gKyB0eXBlID0gKGFkdmlzZSA+ PiBaX0VST0ZTX1ZMRV9ESV9DTFVTVEVSX1RZUEVfQklUKSAmDQo+ICsgKCgxIDw8IFpfRVJPRlNf VkxFX0RJX0NMVVNURVJfVFlQRV9CSVRTKSAtIDEpOw0KPiArIHN3aXRjaCAodHlwZSkgew0KPiAr IGNhc2UgWl9FUk9GU19WTEVfQ0xVU1RFUl9UWVBFX05PTkhFQUQ6DQo+ICsgbS0+Y2x1c3Rlcm9m cyA9IDEgPDwgdmktPnpfbG9naWNhbF9jbHVzdGVyYml0czsNCj4gKyBtLT5kZWx0YVswXSA9IGxl MTZfdG9fY3B1KGRpLT5kaV91LmRlbHRhWzBdKTsNCj4gKyBtLT5kZWx0YVsxXSA9IGxlMTZfdG9f Y3B1KGRpLT5kaV91LmRlbHRhWzFdKTsNCj4gKyBicmVhazsNCj4gKyBjYXNlIFpfRVJPRlNfVkxF X0NMVVNURVJfVFlQRV9QTEFJTjoNCj4gKyBjYXNlIFpfRVJPRlNfVkxFX0NMVVNURVJfVFlQRV9I RUFEOg0KPiArIG0tPmNsdXN0ZXJvZnMgPSBsZTE2X3RvX2NwdShkaS0+ZGlfY2x1c3Rlcm9mcyk7 DQo+ICsgbS0+cGJsayA9IGxlMzJfdG9fY3B1KGRpLT5kaV91LmJsa2FkZHIpOw0KPiArIGJyZWFr Ow0KPiArIGRlZmF1bHQ6DQo+ICsgREJHX0JVR09OKDEpOw0KPiArIHJldHVybiAtRU9QTk9UU1VQ UDsNCj4gKyB9DQo+ICsgbS0+dHlwZSA9IHR5cGU7DQo+ICsgcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVjb2RlX2NvbXBhY3RlZGJpdHModW5zaWduZWQgaW50 IGxvYml0cywNCj4gKyB1bnNpZ25lZCBpbnQgbG9tYXNrLA0KPiArIHU4ICppbiwgdW5zaWduZWQg aW50IHBvcywgdTggKnR5cGUpDQo+ICt7DQo+ICsgY29uc3QgdW5zaWduZWQgaW50IHYgPSBnZXRf dW5hbGlnbmVkX2xlMzIoaW4gKyBwb3MgLyA4KSA+PiAocG9zICYgNyk7DQo+ICsgY29uc3QgdW5z aWduZWQgaW50IGxvID0gdiAmIGxvbWFzazsNCj4gKw0KPiArICp0eXBlID0gKHYgPj4gbG9iaXRz KSAmIDM7DQo+ICsgcmV0dXJuIGxvOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHVucGFja19j b21wYWN0ZWRfaW5kZXgoc3RydWN0IHpfZXJvZnNfbWFwcmVjb3JkZXIgKm0sDQo+ICsgICB1bnNp Z25lZCBpbnQgYW1vcnRpemVkc2hpZnQsDQo+ICsgICB1bnNpZ25lZCBpbnQgZW9mcykNCj4gK3sN Cj4gKyBzdHJ1Y3QgZXJvZnNfdm5vZGUgKmNvbnN0IHZpID0gbS0+dm5vZGU7DQo+ICsgY29uc3Qg dW5zaWduZWQgaW50IGxjbHVzdGVyYml0cyA9IHZpLT56X2xvZ2ljYWxfY2x1c3RlcmJpdHM7DQo+ ICsgY29uc3QgdW5zaWduZWQgaW50IGxvbWFzayA9ICgxIDw8IGxjbHVzdGVyYml0cykgLSAxOw0K PiArIHVuc2lnbmVkIGludCB2Y250LCBiYXNlLCBsbywgZW5jb2RlYml0cywgbmJsazsNCj4gKyBp bnQgaTsNCj4gKyB1OCAqaW4sIHR5cGU7DQo+ICsNCj4gKyBpZiAoMSA8PCBhbW9ydGl6ZWRzaGlm dCA9PSA0KQ0KPiArIHZjbnQgPSAyOw0KPiArIGVsc2UgaWYgKDEgPDwgYW1vcnRpemVkc2hpZnQg PT0gMiAmJiBsY2x1c3RlcmJpdHMgPT0gMTIpDQo+ICsgdmNudCA9IDE2Ow0KPiArIGVsc2UNCj4g KyByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ICsNCj4gKyBlbmNvZGViaXRzID0gKCh2Y250IDw8IGFt b3J0aXplZHNoaWZ0KSAtIHNpemVvZihfX2xlMzIpKSAqIDggLyB2Y250Ow0KPiArIGJhc2UgPSBy b3VuZF9kb3duKGVvZnMsIHZjbnQgPDwgYW1vcnRpemVkc2hpZnQpOw0KPiArIGluID0gbS0+a2Fk ZHIgKyBiYXNlOw0KPiArDQo+ICsgaSA9IChlb2ZzIC0gYmFzZSkgPj4gYW1vcnRpemVkc2hpZnQ7 DQo+ICsNCj4gKyBsbyA9IGRlY29kZV9jb21wYWN0ZWRiaXRzKGxjbHVzdGVyYml0cywgbG9tYXNr LA0KPiArICAgaW4sIGVuY29kZWJpdHMgKiBpLCAmdHlwZSk7DQo+ICsgbS0+dHlwZSA9IHR5cGU7 DQo+ICsgaWYgKHR5cGUgPT0gWl9FUk9GU19WTEVfQ0xVU1RFUl9UWVBFX05PTkhFQUQpIHsNCj4g KyBtLT5jbHVzdGVyb2ZzID0gMSA8PCBsY2x1c3RlcmJpdHM7DQo+ICsgaWYgKGkgKyAxICE9IChp bnQpdmNudCkgew0KPiArIG0tPmRlbHRhWzBdID0gbG87DQo+ICsgcmV0dXJuIDA7DQo+ICsgfQ0K PiArIC8qDQo+ICsgKiBzaW5jZSB0aGUgbGFzdCBsY2x1c3RlciBpbiB0aGUgcGFjayBpcyBzcGVj aWFsLA0KPiArICogb2Ygd2hpY2ggbG8gc2F2ZXMgZGVsdGFbMV0gcmF0aGVyIHRoYW4gZGVsdGFb MF0uDQo+ICsgKiBIZW5jZSwgZ2V0IGRlbHRhWzBdIGJ5IHRoZSBwcmV2aW91cyBsY2x1c3RlciBp bmRpcmVjdGx5Lg0KPiArICovDQo+ICsgbG8gPSBkZWNvZGVfY29tcGFjdGVkYml0cyhsY2x1c3Rl cmJpdHMsIGxvbWFzaywNCj4gKyAgIGluLCBlbmNvZGViaXRzICogKGkgLSAxKSwgJnR5cGUpOw0K PiArIGlmICh0eXBlICE9IFpfRVJPRlNfVkxFX0NMVVNURVJfVFlQRV9OT05IRUFEKQ0KPiArIGxv ID0gMDsNCj4gKyBtLT5kZWx0YVswXSA9IGxvICsgMTsNCj4gKyByZXR1cm4gMDsNCj4gKyB9DQo+ ICsgbS0+Y2x1c3Rlcm9mcyA9IGxvOw0KPiArIG0tPmRlbHRhWzBdID0gMDsNCj4gKyAvKiBmaWdv dXQgb3V0IGJsa2FkZHIgKHBibGspIGZvciBIRUFEIGxjbHVzdGVycyAqLw0KPiArIG5ibGsgPSAx Ow0KPiArIHdoaWxlIChpID4gMCkgew0KPiArIC0taTsNCj4gKyBsbyA9IGRlY29kZV9jb21wYWN0 ZWRiaXRzKGxjbHVzdGVyYml0cywgbG9tYXNrLA0KPiArICAgaW4sIGVuY29kZWJpdHMgKiBpLCAm dHlwZSk7DQo+ICsgaWYgKHR5cGUgPT0gWl9FUk9GU19WTEVfQ0xVU1RFUl9UWVBFX05PTkhFQUQp DQo+ICsgaSAtPSBsbzsNCj4gKw0KPiArIGlmIChpID49IDApDQo+ICsgKytuYmxrOw0KPiArIH0N Cj4gKyBpbiArPSAodmNudCA8PCBhbW9ydGl6ZWRzaGlmdCkgLSBzaXplb2YoX19sZTMyKTsNCj4g KyBtLT5wYmxrID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilpbikgKyBuYmxrOw0KPiArIHJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGNvbXBhY3RlZF9sb2FkX2NsdXN0ZXJfZnJv bV9kaXNrKHN0cnVjdCB6X2Vyb2ZzX21hcHJlY29yZGVyICptLA0KPiArICAgICB1bnNpZ25lZCBs b25nIGxjbikNCj4gK3sNCj4gKyBzdHJ1Y3QgZXJvZnNfdm5vZGUgKmNvbnN0IHZpID0gbS0+dm5v ZGU7DQo+ICsgY29uc3QgdW5zaWduZWQgaW50IGxjbHVzdGVyYml0cyA9IHZpLT56X2xvZ2ljYWxf Y2x1c3RlcmJpdHM7DQo+ICsgY29uc3QgZXJvZnNfb2ZmX3QgZWJhc2UgPSByb3VuZF91cChuaWQy YWRkcih2aS0+bmlkKSArIHZpLT5pbm9kZV9pc2l6ZSArDQo+ICsgICAgdmktPnhhdHRyX2lzaXpl LCA4KSArDQo+ICsgc2l6ZW9mKHN0cnVjdCB6X2Vyb2ZzX21hcF9oZWFkZXIpOw0KPiArIGNvbnN0 IHVuc2lnbmVkIGludCB0b3RhbGlkeCA9IERJVl9ST1VORF9VUCh2aS0+aV9zaXplLCBFUk9GU19C TEtTSVopOw0KPiArIHVuc2lnbmVkIGludCBjb21wYWN0ZWRfNGJfaW5pdGlhbCwgY29tcGFjdGVk XzJiOw0KPiArIHVuc2lnbmVkIGludCBhbW9ydGl6ZWRzaGlmdDsNCj4gKyBlcm9mc19vZmZfdCBw b3M7DQo+ICsgaW50IGVycjsNCj4gKw0KPiArIGlmIChsY2x1c3RlcmJpdHMgIT0gMTIpDQo+ICsg cmV0dXJuIC1FT1BOT1RTVVBQOw0KPiArDQo+ICsgaWYgKGxjbiA+PSB0b3RhbGlkeCkNCj4gKyBy ZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArIG0tPmxjbiA9IGxjbjsNCj4gKyAvKiB1c2VkIHRvIGFs aWduIHRvIDMyLWJ5dGUgKGNvbXBhY3RlZF8yYikgYWxpZ25tZW50ICovDQo+ICsgY29tcGFjdGVk XzRiX2luaXRpYWwgPSAoMzIgLSBlYmFzZSAlIDMyKSAvIDQ7DQo+ICsgaWYgKGNvbXBhY3RlZF80 Yl9pbml0aWFsID09IDMyIC8gNCkNCj4gKyBjb21wYWN0ZWRfNGJfaW5pdGlhbCA9IDA7DQo+ICsN Cj4gKyBpZiAodmktPnpfYWR2aXNlICYgWl9FUk9GU19BRFZJU0VfQ09NUEFDVEVEXzJCKQ0KPiAr IGNvbXBhY3RlZF8yYiA9IHJvdW5kZG93bih0b3RhbGlkeCAtIGNvbXBhY3RlZF80Yl9pbml0aWFs LCAxNik7DQo+ICsgZWxzZQ0KPiArIGNvbXBhY3RlZF8yYiA9IDA7DQo+ICsNCj4gKyBwb3MgPSBl YmFzZTsNCj4gKyBpZiAobGNuIDwgY29tcGFjdGVkXzRiX2luaXRpYWwpIHsNCj4gKyBhbW9ydGl6 ZWRzaGlmdCA9IDI7DQo+ICsgZ290byBvdXQ7DQo+ICsgfQ0KPiArIHBvcyArPSBjb21wYWN0ZWRf NGJfaW5pdGlhbCAqIDQ7DQo+ICsgbGNuIC09IGNvbXBhY3RlZF80Yl9pbml0aWFsOw0KPiArDQo+ ICsgaWYgKGxjbiA8IGNvbXBhY3RlZF8yYikgew0KPiArIGFtb3J0aXplZHNoaWZ0ID0gMTsNCj4g KyBnb3RvIG91dDsNCj4gKyB9DQo+ICsgcG9zICs9IGNvbXBhY3RlZF8yYiAqIDI7DQo+ICsgbGNu IC09IGNvbXBhY3RlZF8yYjsNCj4gKyBhbW9ydGl6ZWRzaGlmdCA9IDI7DQo+ICtvdXQ6DQo+ICsg cG9zICs9IGxjbiAqICgxIDw8IGFtb3J0aXplZHNoaWZ0KTsNCj4gKyBlcnIgPSB6X2Vyb2ZzX3Jl bG9hZF9pbmRleGVzKG0sIGVyb2ZzX2Jsa25yKHBvcykpOw0KPiArIGlmIChlcnIpDQo+ICsgcmV0 dXJuIGVycjsNCj4gKyByZXR1cm4gdW5wYWNrX2NvbXBhY3RlZF9pbmRleChtLCBhbW9ydGl6ZWRz aGlmdCwgZXJvZnNfYmxrb2ZmKHBvcykpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHpfZXJv ZnNfbG9hZF9jbHVzdGVyX2Zyb21fZGlzayhzdHJ1Y3Qgel9lcm9mc19tYXByZWNvcmRlciAqbSwN Cj4gKyAgIHVuc2lnbmVkIGludCBsY24pDQo+ICt7DQo+ICsgY29uc3QgdW5zaWduZWQgaW50IGRh dGFtb2RlID0gbS0+dm5vZGUtPmRhdGFsYXlvdXQ7DQo+ICsNCj4gKyBpZiAoZGF0YW1vZGUgPT0g RVJPRlNfSU5PREVfRkxBVF9DT01QUkVTU0lPTl9MRUdBQ1kpDQo+ICsgcmV0dXJuIGxlZ2FjeV9s b2FkX2NsdXN0ZXJfZnJvbV9kaXNrKG0sIGxjbik7DQo+ICsNCj4gKyBpZiAoZGF0YW1vZGUgPT0g RVJPRlNfSU5PREVfRkxBVF9DT01QUkVTU0lPTikNCj4gKyByZXR1cm4gY29tcGFjdGVkX2xvYWRf Y2x1c3Rlcl9mcm9tX2Rpc2sobSwgbGNuKTsNCj4gKw0KPiArIHJldHVybiAtRUlOVkFMOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW50IHpfZXJvZnNfZXh0ZW50X2xvb2tiYWNrKHN0cnVjdCB6X2Vy b2ZzX21hcHJlY29yZGVyICptLA0KPiArICAgIHVuc2lnbmVkIGludCBsb29rYmFja19kaXN0YW5j ZSkNCj4gK3sNCj4gKyBzdHJ1Y3QgZXJvZnNfdm5vZGUgKmNvbnN0IHZpID0gbS0+dm5vZGU7DQo+ ICsgc3RydWN0IGVyb2ZzX21hcF9ibG9ja3MgKmNvbnN0IG1hcCA9IG0tPm1hcDsNCj4gKyBjb25z dCB1bnNpZ25lZCBpbnQgbGNsdXN0ZXJiaXRzID0gdmktPnpfbG9naWNhbF9jbHVzdGVyYml0czsN Cj4gKyB1bnNpZ25lZCBsb25nIGxjbiA9IG0tPmxjbjsNCj4gKyBpbnQgZXJyOw0KPiArDQo+ICsg aWYgKGxjbiA8IGxvb2tiYWNrX2Rpc3RhbmNlKSB7DQo+ICsgbG9nZSgiYm9ndXMgbG9va2JhY2sg ZGlzdGFuY2UgQCBuaWQgJWxsdSIsIHZpLT5uaWQpOw0KPiArIERCR19CVUdPTigxKTsNCj4gKyBy ZXR1cm4gLUVGU0NPUlJVUFRFRDsNCj4gKyB9DQo+ICsNCj4gKyAvKiBsb2FkIGV4dGVudCBoZWFk IGxvZ2ljYWwgY2x1c3RlciBpZiBuZWVkZWQgKi8NCj4gKyBsY24gLT0gbG9va2JhY2tfZGlzdGFu Y2U7DQo+ICsgZXJyID0gel9lcm9mc19sb2FkX2NsdXN0ZXJfZnJvbV9kaXNrKG0sIGxjbik7DQo+ ICsgaWYgKGVycikNCj4gKyByZXR1cm4gZXJyOw0KPiArDQo+ICsgc3dpdGNoIChtLT50eXBlKSB7 DQo+ICsgY2FzZSBaX0VST0ZTX1ZMRV9DTFVTVEVSX1RZUEVfTk9OSEVBRDoNCj4gKyBpZiAoIW0t PmRlbHRhWzBdKSB7DQo+ICsgbG9nZSgiaW52YWxpZCBsb29rYmFjayBkaXN0YW5jZSAwIEAgbmlk ICVsbHUiLA0KPiArICAgdmktPm5pZCk7DQo+ICsgREJHX0JVR09OKDEpOw0KPiArIHJldHVybiAt RUZTQ09SUlVQVEVEOw0KPiArIH0NCj4gKyByZXR1cm4gel9lcm9mc19leHRlbnRfbG9va2JhY2so bSwgbS0+ZGVsdGFbMF0pOw0KPiArIGNhc2UgWl9FUk9GU19WTEVfQ0xVU1RFUl9UWVBFX1BMQUlO Og0KPiArIG1hcC0+bV9mbGFncyAmPSB+RVJPRlNfTUFQX1pJUFBFRDsNCj4gKyBjYXNlIFpfRVJP RlNfVkxFX0NMVVNURVJfVFlQRV9IRUFEOg0KPiArIG1hcC0+bV9sYSA9IChsY24gPDwgbGNsdXN0 ZXJiaXRzKSB8IG0tPmNsdXN0ZXJvZnM7DQo+ICsgYnJlYWs7DQo+ICsgZGVmYXVsdDoNCj4gKyBs b2dlKCJ1bmtub3duIHR5cGUgJXUgQCBsY24gJWx1IG9mIG5pZCAlbGx1IiwNCj4gKyAgICAgIG0t PnR5cGUsIGxjbiwgdmktPm5pZCk7DQo+ICsgREJHX0JVR09OKDEpOw0KPiArIHJldHVybiAtRU9Q Tk9UU1VQUDsNCj4gKyB9DQo+ICsgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludCB6X2Vyb2Zz X21hcF9ibG9ja3NfaXRlcihzdHJ1Y3QgZXJvZnNfdm5vZGUgKnZpLA0KPiArICAgICBzdHJ1Y3Qg ZXJvZnNfbWFwX2Jsb2NrcyAqbWFwKQ0KPiArew0KPiArIHN0cnVjdCB6X2Vyb2ZzX21hcHJlY29y ZGVyIG0gPSB7DQo+ICsgLnZub2RlID0gdmksDQo+ICsgLm1hcCA9IG1hcCwNCj4gKyAua2FkZHIg PSBtYXAtPm1wYWdlLA0KPiArIH07DQo+ICsgaW50IGVyciA9IDA7DQo+ICsgdW5zaWduZWQgaW50 IGxjbHVzdGVyYml0cywgZW5kb2ZmOw0KPiArIHVuc2lnbmVkIGxvbmcgbG9uZyBvZnMsIGVuZDsN Cj4gKw0KPiArIC8qIHdoZW4gdHJ5aW5nIHRvIHJlYWQgYmV5b25kIEVPRiwgbGVhdmUgaXQgdW5t YXBwZWQgKi8NCj4gKyBpZiAobWFwLT5tX2xhID49IHZpLT5pX3NpemUpIHsNCj4gKyBtYXAtPm1f bGxlbiA9IG1hcC0+bV9sYSArIDEgLSB2aS0+aV9zaXplOw0KPiArIG1hcC0+bV9sYSA9IHZpLT5p X3NpemU7DQo+ICsgbWFwLT5tX2ZsYWdzID0gMDsNCj4gKyBnb3RvIG91dDsNCj4gKyB9DQo+ICsN Cj4gKyBlcnIgPSB6X2Vyb2ZzX2ZpbGxfaW5vZGVfbGF6eSh2aSk7DQo+ICsgaWYgKGVycikNCj4g KyBnb3RvIG91dDsNCj4gKw0KPiArIGxjbHVzdGVyYml0cyA9IHZpLT56X2xvZ2ljYWxfY2x1c3Rl cmJpdHM7DQo+ICsgb2ZzID0gbWFwLT5tX2xhOw0KPiArIG0ubGNuID0gb2ZzID4+IGxjbHVzdGVy Yml0czsNCj4gKyBlbmRvZmYgPSBvZnMgJiAoKDEgPDwgbGNsdXN0ZXJiaXRzKSAtIDEpOw0KPiAr DQo+ICsgZXJyID0gel9lcm9mc19sb2FkX2NsdXN0ZXJfZnJvbV9kaXNrKCZtLCBtLmxjbik7DQo+ ICsgaWYgKGVycikNCj4gKyBnb3RvIG91dDsNCj4gKw0KPiArIG1hcC0+bV9mbGFncyA9IEVST0ZT X01BUF9aSVBQRUQ7IC8qIGJ5IGRlZmF1bHQsIGNvbXByZXNzZWQgKi8NCj4gKyBlbmQgPSAobS5s Y24gKyAxVUxMKSA8PCBsY2x1c3RlcmJpdHM7DQo+ICsgc3dpdGNoIChtLnR5cGUpIHsNCj4gKyBj YXNlIFpfRVJPRlNfVkxFX0NMVVNURVJfVFlQRV9QTEFJTjoNCj4gKyBpZiAoZW5kb2ZmID49IG0u Y2x1c3Rlcm9mcykNCj4gKyBtYXAtPm1fZmxhZ3MgJj0gfkVST0ZTX01BUF9aSVBQRUQ7DQo+ICsg Y2FzZSBaX0VST0ZTX1ZMRV9DTFVTVEVSX1RZUEVfSEVBRDoNCj4gKyBpZiAoZW5kb2ZmID49IG0u Y2x1c3Rlcm9mcykgew0KPiArIG1hcC0+bV9sYSA9IChtLmxjbiA8PCBsY2x1c3RlcmJpdHMpIHwg bS5jbHVzdGVyb2ZzOw0KPiArIGJyZWFrOw0KPiArIH0NCj4gKyAvKiBtLmxjbiBzaG91bGQgYmUg Pj0gMSBpZiBlbmRvZmYgPCBtLmNsdXN0ZXJvZnMgKi8NCj4gKyBpZiAoIW0ubGNuKSB7DQo+ICsg bG9nZSgiaW52YWxpZCBsb2dpY2FsIGNsdXN0ZXIgMCBhdCBuaWQgJWxsdSIsDQo+ICsgICAgICB2 aS0+bmlkKTsNCj4gKyBlcnIgPSAtRUZTQ09SUlVQVEVEOw0KPiArIGdvdG8gb3V0Ow0KPiArIH0N Cj4gKyBlbmQgPSAobS5sY24gPDwgbGNsdXN0ZXJiaXRzKSB8IG0uY2x1c3Rlcm9mczsNCj4gKyBt YXAtPm1fZmxhZ3MgfD0gRVJPRlNfTUFQX0ZVTExfTUFQUEVEOw0KPiArIG0uZGVsdGFbMF0gPSAx Ow0KPiArIGNhc2UgWl9FUk9GU19WTEVfQ0xVU1RFUl9UWVBFX05PTkhFQUQ6DQo+ICsgLyogZ2V0 IHRoZSBjb3JyZXNwb2luZGluZyBmaXJzdCBjaHVuayAqLw0KPiArIGVyciA9IHpfZXJvZnNfZXh0 ZW50X2xvb2tiYWNrKCZtLCBtLmRlbHRhWzBdKTsNCj4gKyBpZiAoZXJyKQ0KPiArIGdvdG8gb3V0 Ow0KPiArIGJyZWFrOw0KPiArIGRlZmF1bHQ6DQo+ICsgbG9nZSgidW5rbm93biB0eXBlICV1IEAg b2Zmc2V0ICVsbHUgb2YgbmlkICVsbHUiLA0KPiArICAgICAgbS50eXBlLCBvZnMsIHZpLT5uaWQp Ow0KPiArIGVyciA9IC1FT1BOT1RTVVBQOw0KPiArIGdvdG8gb3V0Ow0KPiArIH0NCj4gKw0KPiAr IG1hcC0+bV9sbGVuID0gZW5kIC0gbWFwLT5tX2xhOw0KPiArIG1hcC0+bV9wbGVuID0gMSA8PCBs Y2x1c3RlcmJpdHM7DQo+ICsgbWFwLT5tX3BhID0gYmxrbnJfdG9fYWRkcihtLnBibGspOw0KPiAr IG1hcC0+bV9mbGFncyB8PSBFUk9GU19NQVBfTUFQUEVEOw0KPiArDQo+ICtvdXQ6DQo+ICsgbG9n ZCgibV9sYSAlbGx1IG1fcGEgJWxsdSBtX2xsZW4gJWxsdSBtX3BsZW4gJWxsdSBtX2ZsYWdzIDAl byIsDQo+ICsgICAgICBtYXAtPm1fbGEsIG1hcC0+bV9wYSwNCj4gKyAgICAgIG1hcC0+bV9sbGVu LCBtYXAtPm1fcGxlbiwgbWFwLT5tX2ZsYWdzKTsNCj4gKw0KPiArIERCR19CVUdPTihlcnIgPCAw ICYmIGVyciAhPSAtRU5PTUVNKTsNCj4gKyByZXR1cm4gZXJyOw0KPiArfQ0KPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9lcm9mcy9kZWZzLmggYi9pbmNsdWRlL2Vyb2ZzL2RlZnMuaA0KPiBpbmRleCBh OWM3NjllLi4wNmQyOWE5IDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2Vyb2ZzL2RlZnMuaA0KPiAr KysgYi9pbmNsdWRlL2Vyb2ZzL2RlZnMuaA0KPiBAQCAtMTczLDUgKzE3MywxOCBAQCB0eXBlZGVm IGludDY0X3QgICAgICAgICBzNjQ7DQo+ICAjZGVmaW5lIF9fbWF5YmVfdW51c2VkICAgICAgX19h dHRyaWJ1dGVfXygoX191bnVzZWRfXykpDQo+ICAjZW5kaWYNCj4gIA0KPiArc3RydWN0IF9fdW5h X3UzMiB7IHUzMiB4OyB9IF9fcGFja2VkOw0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHUzMiBfX2dl dF91bmFsaWduZWRfY3B1MzIoY29uc3Qgdm9pZCAqcCkNCj4gK3sNCj4gKyBjb25zdCBzdHJ1Y3Qg X191bmFfdTMyICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqKXA7DQo+ICsgcmV0dXJu IHB0ci0+eDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB1MzIgZ2V0X3VuYWxpZ25lZF9s ZTMyKGNvbnN0IHZvaWQgKnApDQo+ICt7DQo+ICsgcmV0dXJuIF9fZ2V0X3VuYWxpZ25lZF9jcHUz MigoY29uc3QgdTggKilwKTsNCj4gK30NCiANCm5lZWQgdG8gaGFuZGxlIGJpZy1lbmRpYW4sIGFu eXdheSwgbWlub3IgZm9yIG5vdy4NCiANClRoYW5rcywNCkdhbyBYaWFuZw0KIA0K ------=_001_NextPart538660834367_=---- Content-Type: text/html; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable