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=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham 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 267BBC433ED for ; Fri, 7 May 2021 14:01:19 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 2C51D6144F for ; Fri, 7 May 2021 14:01:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2C51D6144F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=0trFn93/VGzPLprI9Jyzf0BVxnZS8WEu7OiFTa0AtlQ=; b=ctqIpm9Wo3nlMxdejnKpI1p2d b0x/Y5Z4g0rw2wL5/Kt3XwlpEvMJk6Uyc9nekIT6Ay4lFF9gxJe7RVSCQNWZV7BXLg16zncljHk1h yxIx6hmaXs12cAO0nqcyXOo1Ap2j9KddhVum5Jwf9MnAjdIcsRtH1JLeza8oYzLiFiKACSFZv2JPN NFo5EkipQT/99h/fjvEAbmzsCNBFmx7SVzU3ph9wTXxYWJKKHC0SLZe7F+pPkrHkOHnwgeNDix5rS RndzC7ZZaB7uk+owyaF2Olm9XcCh30IpB0gf+Tz6eXGbpdS2JtGOjazY9ssjfEfwjwiWWuykOeehH B5CMNc9/w==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lf12J-007Eil-IA; Fri, 07 May 2021 14:00:59 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lf12G-007EiY-DY for linux-nvme@desiato.infradead.org; Fri, 07 May 2021 14:00:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References: MIME-Version:Sender:Reply-To:Content-ID:Content-Description; bh=ydbOpGsPhkv1euromDzfPzz0RdLgjBSNKHu+ZKR89Wo=; b=VrSAw1xvPpnOOHkKp/sYyYfnR4 ddkXdGuPReqsyQG5guJ4wx7TrgloW4MBxqyI/nO+dSBoL0oYlWNbw5CylpE8N2mLJjR2sVKcIzV5L yVGX9u/Oazgk3uJq++OKqvTlzjojuiBL2xZFrGycNNJFapzAdSaLmd5lMOVntsRCqp5U0mCliVSxK 1itHfQOX7GORHrEjI13veziWMINEOeIdxTNGo9GG92uzmlJzThAzLK3wYTaUV66l53wiRHtayY+IU IOQj0YRLLO1D7dLjKAdUu+Uq83zkj9twyRPUKKp7aXW5BOjgNExryO6x5v+S/SGLHuxBAnPAQtYGv +HNpmPyg==; Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lf12C-006uCR-2s for linux-nvme@lists.infradead.org; Fri, 07 May 2021 14:00:55 +0000 Received: by mail-ed1-x535.google.com with SMTP id s6so10311739edu.10 for ; Fri, 07 May 2021 07:00:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=ydbOpGsPhkv1euromDzfPzz0RdLgjBSNKHu+ZKR89Wo=; b=cfKLXwmo010tT+uuc5Hdp17G8vCJ03TQD9IV9/X3a+j6B0toSWQLH9SHM74eggdCyl S91AGm1KBCeuCRsMZEqS1Qc3L+KOxlswcYxJ8zdfDq6M1SrXxIRbZp6qNcXOnmYIEtFy 6diy1PT0PT84BYLAcA0tgXPt+SnGlaVo1Tdsk2Snx6dGPfVj9I3xOlKQAdFGHHgd5xbQ YVf+NSmXi3Vyut7IJoZN6gDykCiDxpyN/fE/zxQHZ9439ft9QrsLP1x0GrQ1TkQAKv1C H8curoumiyazCk7Qxz7dGK5w1KsXXu1bWbo9Q3WnWPmz1gSKkIMDMNLjUAtqsUeIlGtL Dn4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=ydbOpGsPhkv1euromDzfPzz0RdLgjBSNKHu+ZKR89Wo=; b=SAjTXe/Ev2yq1kzHf2pSB5Hin0iuYBW6QJ55x7D+qNqbEFtZ1wiH6uwdp/VDnp0fe3 tUQ4L7yEY21pHXxyX90kAszSc44STRhNmA6yEsVklgpbfpAN1VaIDhqgn69z9QvDltzO d0mu/ThYA4NpgzAoSBXbtT5FQd8PQKrbhZSg5SuXrkDYMKwpjGgyV7elmZxkiD7kkg9n qAxWkhi3t3fFZ5wNESnDoOOXKC5bjBwGv2pzUstnuuSuyF69KkZ0OcvYGZ61+GGFZRZJ n7XUmWWSCnIEDjPp98rn0w1mS6NHQnvSdYS+v7hxcynSvsnqGQCBTW0eZDbj4DyEEl0S iOsw== X-Gm-Message-State: AOAM53229Bcqe0qG82DxVKl+DLRJlIJMqqmQ9VP7X/Vch6kdYHPES//h UcSCjkJijLD/cpyonNcgIeJTcmeWWSrFcW7mWnA= X-Google-Smtp-Source: ABdhPJwmoLdlIBtpTCQRQ7QVp3MPlDXkjOkpchimjpLPRiqOkvtDTAdoUgBHf9Fw+CRKyP+IPq5mwmLvYf9kiMRQGek= X-Received: by 2002:a05:6402:57:: with SMTP id f23mr11407425edu.323.1620396049871; Fri, 07 May 2021 07:00:49 -0700 (PDT) MIME-Version: 1.0 References: <20210429190926.5086-1-smalin@marvell.com> <20210429190926.5086-24-smalin@marvell.com> <3b9b048f-94e3-9bef-6d32-fc683636b649@suse.de> In-Reply-To: <3b9b048f-94e3-9bef-6d32-fc683636b649@suse.de> From: Shai Malin Date: Fri, 7 May 2021 17:00:32 +0300 Message-ID: Subject: Re: [RFC PATCH v4 23/27] qedn: Add support of Task and SGL To: Hannes Reinecke Cc: Shai Malin , netdev@vger.kernel.org, davem@davemloft.net, kuba@kernel.org, linux-nvme@lists.infradead.org, sagi@grimberg.me, hch@lst.de, axboe@fb.com, kbusch@kernel.org, Ariel Elior , Michal Kalderon , okulkarni@marvell.com, pkushwaha@marvell.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210507_070052_180182_ED933CD1 X-CRM114-Status: GOOD ( 33.05 ) X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org T24gNS8yLzIxIDI6NDggUE0sIEhhbm5lcyBSZWluZWNrZSB3cm90ZToKPiBPbiA0LzI5LzIxIDk6 MDkgUE0sIFNoYWkgTWFsaW4gd3JvdGU6Cj4gPiBGcm9tOiBQcmFiaGFrYXIgS3VzaHdhaGEgPHBr dXNod2FoYUBtYXJ2ZWxsLmNvbT4KPiA+Cj4gPiBUaGlzIHBhdGNoIHdpbGwgYWRkIHN1cHBvcnQg b2YgVGFzayBhbmQgU0dMIHdoaWNoIGlzIHVzZWQKPiA+IGZvciBzbG93cGF0aCBhbmQgZmFzdCBw YXRoIElPLiBoZXJlIFRhc2sgaXMgSU8gZ3JhbnVsZSB1c2VkCj4gPiBieSBmaXJtd2FyZSB0byBw ZXJmb3JtIHRhc2tzCj4gPgo+ID4gVGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uOgo+ID4gLSBD cmVhdGUgdGFzay9zZ2wgcmVzb3VyY2VzIHVzZWQgYnkgYWxsIGNvbm5lY3Rpb24KPiA+IC0gUHJv dmlkZSBBUElzIHRvIGFsbG9jYXRlIGFuZCBmcmVlIHRhc2suCj4gPiAtIEFkZCB0YXNrIHN1cHBv cnQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBpLmUuIHNsb3dwYXRoCj4gPgo+ID4g QWNrZWQtYnk6IElnb3IgUnVzc2tpa2ggPGlydXNza2lraEBtYXJ2ZWxsLmNvbT4KPiA+IFNpZ25l ZC1vZmYtYnk6IFByYWJoYWthciBLdXNod2FoYSA8cGt1c2h3YWhhQG1hcnZlbGwuY29tPgo+ID4g U2lnbmVkLW9mZi1ieTogT21rYXIgS3Vsa2FybmkgPG9rdWxrYXJuaUBtYXJ2ZWxsLmNvbT4KPiA+ IFNpZ25lZC1vZmYtYnk6IE1pY2hhbCBLYWxkZXJvbiA8bWthbGRlcm9uQG1hcnZlbGwuY29tPgo+ ID4gU2lnbmVkLW9mZi1ieTogQXJpZWwgRWxpb3IgPGFlbGlvckBtYXJ2ZWxsLmNvbT4KPiA+IFNp Z25lZC1vZmYtYnk6IFNoYWkgTWFsaW4gPHNtYWxpbkBtYXJ2ZWxsLmNvbT4KPiA+IC0tLQo+ID4g ICBkcml2ZXJzL252bWUvaHcvcWVkbi9xZWRuLmggICAgICB8ICA2NiArKysrKwo+ID4gICBkcml2 ZXJzL252bWUvaHcvcWVkbi9xZWRuX2Nvbm4uYyB8ICA0MyArKystCj4gPiAgIGRyaXZlcnMvbnZt ZS9ody9xZWRuL3FlZG5fbWFpbi5jIHwgIDM0ICsrLQo+ID4gICBkcml2ZXJzL252bWUvaHcvcWVk bi9xZWRuX3Rhc2suYyB8IDQxMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAg IDQgZmlsZXMgY2hhbmdlZCwgNTUwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4gPgo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ody9xZWRuL3FlZG4uaCBiL2RyaXZlcnMvbnZt ZS9ody9xZWRuL3FlZG4uaAo+ID4gaW5kZXggYmQ5YTI1MGNiMmY1Li44ODBjYTI0NWIwMmMgMTAw NjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL252bWUvaHcvcWVkbi9xZWRuLmgKPiA+ICsrKyBiL2RyaXZl cnMvbnZtZS9ody9xZWRuL3FlZG4uaAo+ID4gQEAgLTUwLDYgKzUwLDIxIEBACj4gPiAgICNkZWZp bmUgUUVETl9GV19DUV9GUF9XUV9XT1JLUVVFVUUgInFlZG5fZndfY3FfZnBfd3EiCj4gPiAgICNk ZWZpbmUgUUVETl9OVk1FX1JFUV9GUF9XUV9XT1JLUVVFVUUgInFlZG5fbnZtZV9yZXFfZnBfd3Ei Cj4gPgo+ID4gKy8qIFByb3RvY29sIGRlZmluZXMgKi8KPiA+ICsjZGVmaW5lIFFFRE5fTUFYX0lP X1NJWkUgUUVEX05WTUVUQ1BfTUFYX0lPX1NJWkUKPiA+ICsKPiA+ICsjZGVmaW5lIFFFRE5fU0dF X0JVRkZfU0laRSA0MDk2Cj4gPiArI2RlZmluZSBRRUROX01BWF9TR0VTX1BFUl9UQVNLIERJVl9S T1VORF9VUChRRUROX01BWF9JT19TSVpFLCBRRUROX1NHRV9CVUZGX1NJWkUpCj4gPiArI2RlZmlu ZSBRRUROX0ZXX1NHRV9TSVpFIHNpemVvZihzdHJ1Y3QgbnZtZXRjcF9zZ2UpCj4gPiArI2RlZmlu ZSBRRUROX01BWF9GV19TR0xfU0laRSAoKFFFRE5fTUFYX1NHRVNfUEVSX1RBU0spICogUUVETl9G V19TR0VfU0laRSkKPiA+ICsjZGVmaW5lIFFFRE5fRldfU0xPV19JT19NSU5fU0dFX0xJTUlUICg5 NzAwIC8gNikKPiA+ICsKPiA+ICsjZGVmaW5lIFFFRE5fTUFYX0hXX1NFQ1RPUlMgKFFFRE5fTUFY X0lPX1NJWkUgLyA1MTIpCj4gPiArI2RlZmluZSBRRUROX01BWF9TRUdNRU5UUyBRRUROX01BWF9T R0VTX1BFUl9UQVNLCj4gPiArCj4gPiArI2RlZmluZSBRRUROX1RBU0tfSU5TSVNUX1RNTyAxMDAw IC8qIDEgc2VjICovCj4gPiArI2RlZmluZSBRRUROX0lOVkFMSURfSVRJRCAweEZGRkYKPiA+ICsK PiA+ICAgLyoKPiA+ICAgICogVENQIG9mZmxvYWQgc3RhY2sgZGVmYXVsdCBjb25maWd1cmF0aW9u cyBhbmQgZGVmaW5lcy4KPiA+ICAgICogRnV0dXJlIGVuaGFuY2VtZW50cyB3aWxsIGFsbG93IGNv bnRyb2xsaW5nIHRoZSBjb25maWd1cmFibGUKPiA+IEBAIC05NSw2ICsxMTAsMTUgQEAgZW51bSBx ZWRuX3N0YXRlIHsKPiA+ICAgICAgIFFFRE5fU1RBVEVfTU9EVUxFX1JFTU9WRV9PTkdPSU5HLAo+ ID4gICB9Owo+ID4KPiA+ICtzdHJ1Y3QgcWVkbl9pb19yZXNvdXJjZXMgewo+ID4gKyAgICAgLyog TG9jayBmb3IgSU8gcmVzb3VyY2VzICovCj4gPiArICAgICBzcGlubG9ja190IHJlc291cmNlc19s b2NrOwo+ID4gKyAgICAgc3RydWN0IGxpc3RfaGVhZCB0YXNrX2ZyZWVfbGlzdDsKPiA+ICsgICAg IHUzMiBudW1fYWxsb2NfdGFza3M7Cj4gPiArICAgICB1MzIgbnVtX2ZyZWVfdGFza3M7Cj4gPiAr ICAgICB1MzIgbm9fYXZhaWxfcmVzcmNfY250Owo+ID4gK307Cj4gPiArCj4gPiAgIC8qIFBlciBD UFUgY29yZSBwYXJhbXMgKi8KPiA+ICAgc3RydWN0IHFlZG5fZnBfcXVldWUgewo+ID4gICAgICAg c3RydWN0IHFlZF9jaGFpbiBjcV9jaGFpbjsKPiA+IEBAIC0xMDQsNiArMTI4LDEwIEBAIHN0cnVj dCBxZWRuX2ZwX3F1ZXVlIHsKPiA+ICAgICAgIHN0cnVjdCBxZWRfc2JfaW5mbyAqc2JfaW5mbzsK PiA+ICAgICAgIHVuc2lnbmVkIGludCBjcHU7Cj4gPiAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3Qg ZndfY3FfZnBfd3FfZW50cnk7Cj4gPiArCj4gPiArICAgICAvKiBJTyByZWxhdGVkIHJlc291cmNl cyBmb3IgaG9zdCAqLwo+ID4gKyAgICAgc3RydWN0IHFlZG5faW9fcmVzb3VyY2VzIGhvc3RfcmVz cmM7Cj4gPiArCj4gPiAgICAgICB1MTYgc2JfaWQ7Cj4gPiAgICAgICBjaGFyIGlycW5hbWVbUUVE Tl9JUlFfTkFNRV9MRU5dOwo+ID4gICB9Owo+ID4gQEAgLTEzMCw2ICsxNTgsOCBAQCBzdHJ1Y3Qg cWVkbl9jdHggewo+ID4gICAgICAgLyogQ29ubmVjdGlvbnMgKi8KPiA+ICAgICAgIERFQ0xBUkVf SEFTSFRBQkxFKGNvbm5fY3R4X2hhc2gsIDE2KTsKPiA+Cj4gPiArICAgICB1MzIgbnVtX3Rhc2tz X3Blcl9wb29sOwo+ID4gKwo+ID4gICAgICAgLyogRmFzdCBwYXRoIHF1ZXVlcyAqLwo+ID4gICAg ICAgdTggbnVtX2Z3X2NxczsKPiA+ICAgICAgIHN0cnVjdCBxZWRuX2ZwX3F1ZXVlICpmcF9xX2Fy cjsKPiA+IEBAIC0xMzcsNiArMTY3LDI3IEBAIHN0cnVjdCBxZWRuX2N0eCB7Cj4gPiAgICAgICBk bWFfYWRkcl90IGZ3X2NxX2FycmF5X3BoeTsgLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBmd19jcV9h cnJheV92aXJ0ICovCj4gPiAgICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbnZtZV9yZXFf ZnBfd3E7Cj4gPiAgICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZndfY3FfZnBfd3E7Cj4g PiArCj4gPiArICAgICAvKiBGYXN0IFBhdGggVGFza3MgKi8KPiA+ICsgICAgIHN0cnVjdCBxZWRf bnZtZXRjcF90aWQgIHRhc2tzOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IHFlZG5fdGFza19j dHggewo+ID4gKyAgICAgc3RydWN0IHFlZG5fY29ubl9jdHggKnFlZG5fY29ubjsKPiA+ICsgICAg IHN0cnVjdCBxZWRuX2N0eCAqcWVkbjsKPiA+ICsgICAgIHZvaWQgKmZ3X3Rhc2tfY3R4Owo+ID4g KyAgICAgc3RydWN0IHFlZG5fZnBfcXVldWUgKmZwX3E7Cj4gPiArICAgICBzdHJ1Y3Qgc2NhdHRl cmxpc3QgKm52bWVfc2c7Cj4gPiArICAgICBzdHJ1Y3QgbnZtZV90Y3Bfb2ZsZF9yZXEgKnJlcTsg LyogY3VycmVudGx5IHByb2NjZXNzZWQgcmVxdWVzdCAqLwo+ID4gKyAgICAgc3RydWN0IGxpc3Rf aGVhZCBlbnRyeTsKPiA+ICsgICAgIHNwaW5sb2NrX3QgbG9jazsgLyogVG8gcHJvdGVjdCB0YXNr IHJlc291cmNlcyAqLwo+ID4gKyAgICAgYm9vbCB2YWxpZDsKPiA+ICsgICAgIHVuc2lnbmVkIGxv bmcgZmxhZ3M7IC8qIFVzZWQgYnkgcWVkbl90YXNrX2ZsYWdzICovCj4gPiArICAgICB1MzIgdGFz a19zaXplOwo+ID4gKyAgICAgdTE2IGl0aWQ7Cj4gPiArICAgICB1MTYgY2NjaWQ7Cj4gPiArICAg ICBpbnQgcmVxX2RpcmVjdGlvbjsKPiA+ICsgICAgIHN0cnVjdCBzdG9yYWdlX3NnbF90YXNrX3Bh cmFtcyBzZ2xfdGFza19wYXJhbXM7Cj4gPiAgIH07Cj4gPgo+ID4gICBzdHJ1Y3QgcWVkbl9lbmRw b2ludCB7Cj4gPiBAQCAtMjQzLDYgKzI5NCw3IEBAIHN0cnVjdCBxZWRuX2Nvbm5fY3R4IHsKPiA+ ICAgICAgIHN0cnVjdCBudm1lX3RjcF9vZmxkX2N0cmwgKmN0cmw7Cj4gPiAgICAgICB1MzIgY29u bl9oYW5kbGU7Cj4gPiAgICAgICB1MzIgZndfY2lkOwo+ID4gKyAgICAgdTggZGVmYXVsdF9jcTsK PiA+Cj4gPiAgICAgICBhdG9taWNfdCBlc3RfY29ubl9pbmRpY2F0b3I7Cj4gPiAgICAgICBhdG9t aWNfdCBkZXN0cm95X2Nvbm5faW5kaWNhdG9yOwo+ID4gQEAgLTI2MCw2ICszMTIsMTEgQEAgc3Ry dWN0IHFlZG5fY29ubl9jdHggewo+ID4gICAgICAgZG1hX2FkZHJfdCBob3N0X2NjY2lkX2l0aWRf cGh5X2FkZHI7Cj4gPiAgICAgICBzdHJ1Y3QgcWVkbl9lbmRwb2ludCBlcDsKPiA+ICAgICAgIGlu dCBhYnJ0X2ZsYWc7Cj4gPiArICAgICAvKiBTcGlubG9jayBmb3IgYWNjZXNzaW5nIGFjdGl2ZV90 YXNrX2xpc3QgKi8KPiA+ICsgICAgIHNwaW5sb2NrX3QgdGFza19saXN0X2xvY2s7Cj4gPiArICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV90YXNrX2xpc3Q7Cj4gPiArICAgICBhdG9taWNfdCBu dW1fYWN0aXZlX3Rhc2tzOwo+ID4gKyAgICAgYXRvbWljX3QgbnVtX2FjdGl2ZV9md190YXNrczsK PiA+Cj4gPiAgICAgICAvKiBDb25uZWN0aW9uIHJlc291cmNlcyAtIHR1cm5lZCBvbiB0byBpbmRp Y2F0ZSB3aGF0IHJlc291cmNlIHdhcwo+ID4gICAgICAgICogYWxsb2NhdGVkLCB0byB0aGF0IGl0 IGNhbiBsYXRlciBiZSByZWxlYXNlZC4KPiA+IEBAIC0yNzksNiArMzM2LDcgQEAgc3RydWN0IHFl ZG5fY29ubl9jdHggewo+ID4gICBlbnVtIHFlZG5fY29ubl9yZXNvdXJjZXNfc3RhdGUgewo+ID4g ICAgICAgUUVETl9DT05OX1JFU1JDX0ZXX1NRLAo+ID4gICAgICAgUUVETl9DT05OX1JFU1JDX0FD UVVJUkVfQ09OTiwKPiA+ICsgICAgIFFFRE5fQ09OTl9SRVNSQ19UQVNLUywKPiA+ICAgICAgIFFF RE5fQ09OTl9SRVNSQ19DQ0NJRF9JVElEX01BUCwKPiA+ICAgICAgIFFFRE5fQ09OTl9SRVNSQ19U Q1BfUE9SVCwKPiA+ICAgICAgIFFFRE5fQ09OTl9SRVNSQ19NQVggPSA2NAo+ID4gQEAgLTMwOSw1 ICszNjcsMTMgQEAgaW5saW5lIGludCBxZWRuX3ZhbGlkYXRlX2NjY2lkX2luX3JhbmdlKHN0cnVj dCBxZWRuX2Nvbm5fY3R4ICpjb25uX2N0eCwgdTE2IGNjY2kKPiA+ICAgdm9pZCBxZWRuX3F1ZXVl X3JlcXVlc3Qoc3RydWN0IHFlZG5fY29ubl9jdHggKnFlZG5fY29ubiwgc3RydWN0IG52bWVfdGNw X29mbGRfcmVxICpyZXEpOwo+ID4gICB2b2lkIHFlZG5fbnZtZV9yZXFfZnBfd3FfaGFuZGxlcihz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwo+ID4gICB2b2lkIHFlZG5faW9fd29ya19jcShzdHJ1 Y3QgcWVkbl9jdHggKnFlZG4sIHN0cnVjdCBudm1ldGNwX2Z3X2NxZSAqY3FlKTsKPiA+ICtpbnQg cWVkbl9hbGxvY190YXNrcyhzdHJ1Y3QgcWVkbl9jb25uX2N0eCAqY29ubl9jdHgpOwo+ID4gK2lu bGluZSBpbnQgcWVkbl9xaWQoc3RydWN0IG52bWVfdGNwX29mbGRfcXVldWUgKnF1ZXVlKTsKPiA+ ICtzdHJ1Y3QgcWVkbl90YXNrX2N0eCAqCj4gPiArICAgICBxZWRuX2dldF90YXNrX2Zyb21fcG9v bF9pbnNpc3Qoc3RydWN0IHFlZG5fY29ubl9jdHggKmNvbm5fY3R4LCB1MTYgY2NjaWQpOwo+ID4g K3ZvaWQgcWVkbl9jb21tb25fY2xlYXJfZndfc2dsKHN0cnVjdCBzdG9yYWdlX3NnbF90YXNrX3Bh cmFtcyAqc2dsX3Rhc2tfcGFyYW1zKTsKPiA+ICt2b2lkIHFlZG5fcmV0dXJuX2FjdGl2ZV90YXNr cyhzdHJ1Y3QgcWVkbl9jb25uX2N0eCAqY29ubl9jdHgpOwo+ID4gK3ZvaWQgcWVkbl9kZXN0cm95 X2ZyZWVfdGFza3Moc3RydWN0IHFlZG5fZnBfcXVldWUgKmZwX3EsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcWVkbl9pb19yZXNvdXJjZXMgKmlvX3Jlc3JjKTsKPiA+Cj4g PiAgICNlbmRpZiAvKiBfUUVETl9IXyAqLwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9o dy9xZWRuL3FlZG5fY29ubi5jIGIvZHJpdmVycy9udm1lL2h3L3FlZG4vcWVkbl9jb25uLmMKPiA+ IGluZGV4IDkwZDhhYTM2ZDIxOS4uMTBhODBmYmVhYzQzIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVy cy9udm1lL2h3L3FlZG4vcWVkbl9jb25uLmMKPiA+ICsrKyBiL2RyaXZlcnMvbnZtZS9ody9xZWRu L3FlZG5fY29ubi5jCj4gPiBAQCAtMjksNiArMjksMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBj b25zdCBxZWRuX2Nvbm5fc3RhdGVfc3RyW10gPSB7Cj4gPiAgICAgICBOVUxMCj4gPiAgIH07Cj4g Pgo+ID4gK2lubGluZSBpbnQgcWVkbl9xaWQoc3RydWN0IG52bWVfdGNwX29mbGRfcXVldWUgKnF1 ZXVlKQo+ID4gK3sKPiA+ICsgICAgIHJldHVybiBxdWV1ZSAtIHF1ZXVlLT5jdHJsLT5xdWV1ZXM7 Cj4gPiArfQo+ID4gKwo+ID4gICBpbnQgcWVkbl9zZXRfY29uX3N0YXRlKHN0cnVjdCBxZWRuX2Nv bm5fY3R4ICpjb25uX2N0eCwgZW51bSBxZWRuX2Nvbm5fc3RhdGUgbmV3X3N0YXRlKQo+ID4gICB7 Cj4gPiAgICAgICBzcGluX2xvY2tfYmgoJmNvbm5fY3R4LT5jb25uX3N0YXRlX2xvY2spOwo+ID4g QEAgLTE0Niw2ICsxNTEsMTEgQEAgc3RhdGljIHZvaWQgcWVkbl9yZWxlYXNlX2Nvbm5fY3R4KHN0 cnVjdCBxZWRuX2Nvbm5fY3R4ICpjb25uX2N0eCkKPiA+ICAgICAgICAgICAgICAgY2xlYXJfYml0 KFFFRE5fQ09OTl9SRVNSQ19BQ1FVSVJFX0NPTk4sICZjb25uX2N0eC0+cmVzcmNfc3RhdGUpOwo+ ID4gICAgICAgfQo+ID4KPiA+ICsgICAgIGlmICh0ZXN0X2JpdChRRUROX0NPTk5fUkVTUkNfVEFT S1MsICZjb25uX2N0eC0+cmVzcmNfc3RhdGUpKSB7Cj4gPiArICAgICAgICAgICAgIGNsZWFyX2Jp dChRRUROX0NPTk5fUkVTUkNfVEFTS1MsICZjb25uX2N0eC0+cmVzcmNfc3RhdGUpOwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHFlZG5fcmV0dXJuX2FjdGl2ZV90YXNrcyhjb25uX2N0eCk7Cj4g PiArICAgICB9Cj4gPiArCj4gPiAgICAgICBpZiAodGVzdF9iaXQoUUVETl9DT05OX1JFU1JDX0ND Q0lEX0lUSURfTUFQLCAmY29ubl9jdHgtPnJlc3JjX3N0YXRlKSkgewo+ID4gICAgICAgICAgICAg ICBkbWFfZnJlZV9jb2hlcmVudCgmcWVkbi0+cGRldi0+ZGV2LAo+ID4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25uX2N0eC0+c3FfZGVwdGggKgo+ID4gQEAgLTI0Nyw2ICsyNTcs NyBAQCBzdGF0aWMgaW50IHFlZG5fbnZtZXRjcF9vZmZsb2FkX2Nvbm4oc3RydWN0IHFlZG5fY29u bl9jdHggKmNvbm5fY3R4KQo+ID4gICAgICAgb2ZmbGRfcHJtcy5tYXhfcnRfdGltZSA9IFFFRE5f VENQX01BWF9SVF9USU1FOwo+ID4gICAgICAgb2ZmbGRfcHJtcy5zcV9wYmxfYWRkciA9Cj4gPiAg ICAgICAgICAgICAgICh1NjQpcWVkX2NoYWluX2dldF9wYmxfcGh5cygmcWVkbl9lcC0+Zndfc3Ff Y2hhaW4pOwo+ID4gKyAgICAgb2ZmbGRfcHJtcy5kZWZhdWx0X2NxID0gY29ubl9jdHgtPmRlZmF1 bHRfY3E7Cj4gPgo+ID4gICAgICAgcmMgPSBxZWRfb3BzLT5vZmZsb2FkX2Nvbm4ocWVkbi0+Y2Rl diwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5fY3R4LT5jb25uX2hh bmRsZSwKPiA+IEBAIC0zNzUsNiArMzg2LDkgQEAgaW50IHFlZG5fZXZlbnRfY2Iodm9pZCAqY29u dGV4dCwgdTggZndfZXZlbnRfY29kZSwgdm9pZCAqZXZlbnRfcmluZ19kYXRhKQo+ID4gICBzdGF0 aWMgaW50IHFlZG5fcHJlcF9hbmRfb2ZmbG9hZF9xdWV1ZShzdHJ1Y3QgcWVkbl9jb25uX2N0eCAq Y29ubl9jdHgpCj4gPiAgIHsKPiA+ICAgICAgIHN0cnVjdCBxZWRuX2N0eCAqcWVkbiA9IGNvbm5f Y3R4LT5xZWRuOwo+ID4gKyAgICAgc3RydWN0IHFlZG5faW9fcmVzb3VyY2VzICppb19yZXNyYzsK PiA+ICsgICAgIHN0cnVjdCBxZWRuX2ZwX3F1ZXVlICpmcF9xOwo+ID4gKyAgICAgdTggZGVmYXVs dF9jcV9pZHgsIHFpZDsKPiA+ICAgICAgIHNpemVfdCBkbWFfc2l6ZTsKPiA+ICAgICAgIGludCBy YzsKPiA+Cj4gPiBAQCAtMzg3LDYgKzQwMSw4IEBAIHN0YXRpYyBpbnQgcWVkbl9wcmVwX2FuZF9v ZmZsb2FkX3F1ZXVlKHN0cnVjdCBxZWRuX2Nvbm5fY3R4ICpjb25uX2N0eCkKPiA+ICAgICAgIHNl dF9iaXQoUUVETl9DT05OX1JFU1JDX0ZXX1NRLCAmY29ubl9jdHgtPnJlc3JjX3N0YXRlKTsKPiA+ ICAgICAgIElOSVRfTElTVF9IRUFEKCZjb25uX2N0eC0+aG9zdF9wZW5kX3JlcV9saXN0KTsKPiA+ ICAgICAgIHNwaW5fbG9ja19pbml0KCZjb25uX2N0eC0+bnZtZV9yZXFfbG9jayk7Cj4gPiArICAg ICBhdG9taWNfc2V0KCZjb25uX2N0eC0+bnVtX2FjdGl2ZV90YXNrcywgMCk7Cj4gPiArICAgICBh dG9taWNfc2V0KCZjb25uX2N0eC0+bnVtX2FjdGl2ZV9md190YXNrcywgMCk7Cj4gPgo+ID4gICAg ICAgcmMgPSBxZWRfb3BzLT5hY3F1aXJlX2Nvbm4ocWVkbi0+Y2RldiwKPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZjb25uX2N0eC0+Y29ubl9oYW5kbGUsCj4gPiBAQCAtNDAx LDcgKzQxNywzMiBAQCBzdGF0aWMgaW50IHFlZG5fcHJlcF9hbmRfb2ZmbG9hZF9xdWV1ZShzdHJ1 Y3QgcWVkbl9jb25uX2N0eCAqY29ubl9jdHgpCj4gPiAgICAgICAgICAgICAgICBjb25uX2N0eC0+ Y29ubl9oYW5kbGUpOwo+ID4gICAgICAgc2V0X2JpdChRRUROX0NPTk5fUkVTUkNfQUNRVUlSRV9D T05OLCAmY29ubl9jdHgtPnJlc3JjX3N0YXRlKTsKPiA+Cj4gPiAtICAgICAvKiBQbGFjZWhvbGRl ciAtIEFsbG9jYXRlIHRhc2sgcmVzb3VyY2VzIGFuZCBpbml0aWFsaXplIGZpZWxkcyAqLwo+ID4g KyAgICAgcWlkID0gcWVkbl9xaWQoY29ubl9jdHgtPnF1ZXVlKTsKPiA+ICsgICAgIGRlZmF1bHRf Y3FfaWR4ID0gcWlkID8gcWlkIC0gMSA6IDA7IC8qIE9mZnNldCBhZG1pbnEgKi8KPiA+ICsKPiA+ ICsgICAgIGNvbm5fY3R4LT5kZWZhdWx0X2NxID0gKGRlZmF1bHRfY3FfaWR4ICUgcWVkbi0+bnVt X2Z3X2Nxcyk7Cj4gPiArICAgICBmcF9xID0gJnFlZG4tPmZwX3FfYXJyW2Nvbm5fY3R4LT5kZWZh dWx0X2NxXTsKPiA+ICsgICAgIGNvbm5fY3R4LT5mcF9xID0gZnBfcTsKPiA+ICsgICAgIGlvX3Jl c3JjID0gJmZwX3EtPmhvc3RfcmVzcmM7Cj4gPiArCj4gPiArICAgICAvKiBUaGUgZmlyc3QgY29u bmVjdGlvbiBvbiBlYWNoIGZwX3Egd2lsbCBmaWxsIHRhc2sKPiA+ICsgICAgICAqIHJlc291cmNl cwo+ID4gKyAgICAgICovCj4gPiArICAgICBzcGluX2xvY2soJmlvX3Jlc3JjLT5yZXNvdXJjZXNf bG9jayk7Cj4gPiArICAgICBpZiAoaW9fcmVzcmMtPm51bV9hbGxvY190YXNrcyA9PSAwKSB7Cj4g PiArICAgICAgICAgICAgIHJjID0gcWVkbl9hbGxvY190YXNrcyhjb25uX2N0eCk7Cj4gPiArICAg ICAgICAgICAgIGlmIChyYykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX2VycigiRmFp bGVkIGFsbG9jYXRpbmcgdGFza3M6IENJRD0weCV4XG4iLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25uX2N0eC0+ZndfY2lkKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBz cGluX3VubG9jaygmaW9fcmVzcmMtPnJlc291cmNlc19sb2NrKTsKPiA+ICsgICAgICAgICAgICAg ICAgICAgICBnb3RvIHJlbF9jb25uOwo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICB9Cj4g PiArICAgICBzcGluX3VubG9jaygmaW9fcmVzcmMtPnJlc291cmNlc19sb2NrKTsKPiA+ICsKPiA+ ICsgICAgIHNwaW5fbG9ja19pbml0KCZjb25uX2N0eC0+dGFza19saXN0X2xvY2spOwo+ID4gKyAg ICAgSU5JVF9MSVNUX0hFQUQoJmNvbm5fY3R4LT5hY3RpdmVfdGFza19saXN0KTsKPiA+ICsgICAg IHNldF9iaXQoUUVETl9DT05OX1JFU1JDX1RBU0tTLCAmY29ubl9jdHgtPnJlc3JjX3N0YXRlKTsK PiA+ICAgID4gICAgICAgICAgcmMgPSBxZWRuX2ZldGNoX3RjcF9wb3J0KGNvbm5fY3R4KTsKPiA+ ICAgICAgIGlmIChyYykKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaHcvcWVkbi9xZWRu X21haW4uYyBiL2RyaXZlcnMvbnZtZS9ody9xZWRuL3FlZG5fbWFpbi5jCj4gPiBpbmRleCAzOGYy M2RiYjAzYTUuLjhkOWMxOWQ2MzQ4MCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvbnZtZS9ody9x ZWRuL3FlZG5fbWFpbi5jCj4gPiArKysgYi9kcml2ZXJzL252bWUvaHcvcWVkbi9xZWRuX21haW4u Ywo+ID4gQEAgLTMwLDYgKzMwLDEyIEBAIF9fYmUxNiBxZWRuX2dldF9pbl9wb3J0KHN0cnVjdCBz b2NrYWRkcl9zdG9yYWdlICpzYSkKPiA+ICAgICAgICAgICAgICAgOiAoKHN0cnVjdCBzb2NrYWRk cl9pbjYgKilzYSktPnNpbjZfcG9ydDsKPiA+ICAgfQo+ID4KPiA+ICtzdGF0aWMgdm9pZCBxZWRu X2luaXRfaW9fcmVzYyhzdHJ1Y3QgcWVkbl9pb19yZXNvdXJjZXMgKmlvX3Jlc3JjKQo+ID4gK3sK PiA+ICsgICAgIHNwaW5fbG9ja19pbml0KCZpb19yZXNyYy0+cmVzb3VyY2VzX2xvY2spOwo+ID4g KyAgICAgSU5JVF9MSVNUX0hFQUQoJmlvX3Jlc3JjLT50YXNrX2ZyZWVfbGlzdCk7Cj4gPiArfQo+ ID4gKwo+ID4gICBzdHJ1Y3QgcWVkbl9sbGhfZmlsdGVyICpxZWRuX2FkZF9sbGhfZmlsdGVyKHN0 cnVjdCBxZWRuX2N0eCAqcWVkbiwgdTE2IHRjcF9wb3J0KQo+ID4gICB7Cj4gPiAgICAgICBzdHJ1 Y3QgcWVkbl9sbGhfZmlsdGVyICpsbGhfZmlsdGVyID0gTlVMTDsKPiA+IEBAIC00MzYsNiArNDQy LDggQEAgc3RhdGljIHN0cnVjdCBudm1lX3RjcF9vZmxkX29wcyBxZWRuX29mbGRfb3BzID0gewo+ ID4gICAgICAgICAgICAgICAgKiAgICAgIE5WTUZfT1BUX0hEUl9ESUdFU1QgfCBOVk1GX09QVF9E QVRBX0RJR0VTVCB8Cj4gPiAgICAgICAgICAgICAgICAqICAgICAgTlZNRl9PUFRfTlJfUE9MTF9R VUVVRVMgfCBOVk1GX09QVF9UT1MKPiA+ICAgICAgICAgICAgICAgICovCj4gPiArICAgICAubWF4 X2h3X3NlY3RvcnMgPSBRRUROX01BWF9IV19TRUNUT1JTLAo+ID4gKyAgICAgLm1heF9zZWdtZW50 cyA9IFFFRE5fTUFYX1NFR01FTlRTLAo+ID4gICAgICAgLmNsYWltX2RldiA9IHFlZG5fY2xhaW1f ZGV2LAo+ID4gICAgICAgLnNldHVwX2N0cmwgPSBxZWRuX3NldHVwX2N0cmwsCj4gPiAgICAgICAu cmVsZWFzZV9jdHJsID0gcWVkbl9yZWxlYXNlX2N0cmwsCj4gPiBAQCAtNjU3LDggKzY2NSwyNCBA QCBzdGF0aWMgdm9pZCBxZWRuX3JlbW92ZV9wZl9mcm9tX2dsX2xpc3Qoc3RydWN0IHFlZG5fY3R4 ICpxZWRuKQo+ID4gICAgICAgbXV0ZXhfdW5sb2NrKCZxZWRuX2dsYi5nbGJfbXV0ZXgpOwo+ID4g ICB9Cj4gPgo+ID4gK3N0YXRpYyB2b2lkIHFlZG5fY2FsbF9kZXN0cm95X2ZyZWVfdGFza3Moc3Ry dWN0IHFlZG5fZnBfcXVldWUgKmZwX3EsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgcWVkbl9pb19yZXNvdXJjZXMgKmlvX3Jlc3JjKQo+ID4gK3sKPiA+ ICsgICAgIGlmIChsaXN0X2VtcHR5KCZpb19yZXNyYy0+dGFza19mcmVlX2xpc3QpKQo+ID4gKyAg ICAgICAgICAgICByZXR1cm47Cj4gPiArCj4gPiArICAgICBpZiAoaW9fcmVzcmMtPm51bV9hbGxv Y190YXNrcyAhPSBpb19yZXNyYy0+bnVtX2ZyZWVfdGFza3MpCj4gPiArICAgICAgICAgICAgIHBy X2VycigiVGFzayBQb29sOk5vdCBhbGwgcmV0dXJuZWQgYWxsb2NhdGVkPTB4JXgsIGZyZWU9MHgl eFxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgIGlvX3Jlc3JjLT5udW1fYWxsb2NfdGFza3Ms IGlvX3Jlc3JjLT5udW1fZnJlZV90YXNrcyk7Cj4gPiArCj4gPiArICAgICBxZWRuX2Rlc3Ryb3lf ZnJlZV90YXNrcyhmcF9xLCBpb19yZXNyYyk7Cj4gPiArICAgICBpZiAoaW9fcmVzcmMtPm51bV9m cmVlX3Rhc2tzKQo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIkV4cGVjdGVkIG51bV9mcmVlX3Rh c2tzIHRvIGJlIDBcbiIpOwo+ID4gK30KPiA+ICsKPiA+ICAgc3RhdGljIHZvaWQgcWVkbl9mcmVl X2Z1bmN0aW9uX3F1ZXVlcyhzdHJ1Y3QgcWVkbl9jdHggKnFlZG4pCj4gPiAgIHsKPiA+ICsgICAg IHN0cnVjdCBxZWRuX2lvX3Jlc291cmNlcyAqaG9zdF9yZXNyYzsKPiA+ICAgICAgIHN0cnVjdCBx ZWRfc2JfaW5mbyAqc2JfaW5mbyA9IE5VTEw7Cj4gPiAgICAgICBzdHJ1Y3QgcWVkbl9mcF9xdWV1 ZSAqZnBfcTsKPiA+ICAgICAgIGludCBpOwo+ID4gQEAgLTY3Myw2ICs2OTcsOSBAQCBzdGF0aWMg dm9pZCBxZWRuX2ZyZWVfZnVuY3Rpb25fcXVldWVzKHN0cnVjdCBxZWRuX2N0eCAqcWVkbikKPiA+ ICAgICAgIC8qIEZyZWUgdGhlIGZhc3QgcGF0aCBxdWV1ZXMqLwo+ID4gICAgICAgZm9yIChpID0g MDsgaSA8IHFlZG4tPm51bV9md19jcXM7IGkrKykgewo+ID4gICAgICAgICAgICAgICBmcF9xID0g JnFlZG4tPmZwX3FfYXJyW2ldOwo+ID4gKyAgICAgICAgICAgICBob3N0X3Jlc3JjID0gJmZwX3Et Pmhvc3RfcmVzcmM7Cj4gPiArCj4gPiArICAgICAgICAgICAgIHFlZG5fY2FsbF9kZXN0cm95X2Zy ZWVfdGFza3MoZnBfcSwgaG9zdF9yZXNyYyk7Cj4gPgo+ID4gICAgICAgICAgICAgICAvKiBGcmVl IFNCICovCj4gPiAgICAgICAgICAgICAgIHNiX2luZm8gPSBmcF9xLT5zYl9pbmZvOwo+ID4gQEAg LTc2OSw3ICs3OTYsOCBAQCBzdGF0aWMgaW50IHFlZG5fYWxsb2NfZnVuY3Rpb25fcXVldWVzKHN0 cnVjdCBxZWRuX2N0eCAqcWVkbikKPiA+ICAgICAgICAgICAgICAgZ290byBtZW1fYWxsb2NfZmFp bHVyZTsKPiA+ICAgICAgIH0KPiA+Cj4gPiAtICAgICAvKiBwbGFjZWhvbGRlciAtIGNyZWF0ZSB0 YXNrIHBvb2xzICovCj4gPiArICAgICBxZWRuLT5udW1fdGFza3NfcGVyX3Bvb2wgPQo+ID4gKyAg ICAgICAgICAgICBxZWRuLT5wZl9wYXJhbXMubnZtZXRjcF9wZl9wYXJhbXMubnVtX3Rhc2tzIC8g cWVkbi0+bnVtX2Z3X2NxczsKPiA+Cj4gPiAgICAgICBmb3IgKGkgPSAwOyBpIDwgcWVkbi0+bnVt X2Z3X2NxczsgaSsrKSB7Cj4gPiAgICAgICAgICAgICAgIGZwX3EgPSAmcWVkbi0+ZnBfcV9hcnJb aV07Cj4gPiBAQCAtODExLDcgKzgzOSw3IEBAIHN0YXRpYyBpbnQgcWVkbl9hbGxvY19mdW5jdGlv bl9xdWV1ZXMoc3RydWN0IHFlZG5fY3R4ICpxZWRuKQo+ID4gICAgICAgICAgICAgICBmcF9xLT5x ZWRuID0gcWVkbjsKPiA+ICAgICAgICAgICAgICAgSU5JVF9XT1JLKCZmcF9xLT5md19jcV9mcF93 cV9lbnRyeSwgcWVkbl9md19jcV9mcV93cV9oYW5kbGVyKTsKPiA+Cj4gPiAtICAgICAgICAgICAg IC8qIFBsYWNlaG9sZGVyIC0gSW5pdCBJTy1wYXRoIHJlc291cmNlcyAqLwo+ID4gKyAgICAgICAg ICAgICBxZWRuX2luaXRfaW9fcmVzYygmZnBfcS0+aG9zdF9yZXNyYyk7Cj4gPiAgICAgICB9Cj4g Pgo+ID4gICAgICAgcmV0dXJuIDA7Cj4gPiBAQCAtMTAwNSw3ICsxMDMzLDcgQEAgc3RhdGljIGlu dCBfX3FlZG5fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gPgo+ID4gICAgICAgLyogTlZN ZVRDUCBzdGFydCBIVyBQRiAqLwo+ID4gICAgICAgcmMgPSBxZWRfb3BzLT5zdGFydChxZWRuLT5j ZGV2LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMIC8qIFBsYWNlaG9sZGVyIGZv ciBGVyBJTy1wYXRoIHJlc291cmNlcyAqLywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg JnFlZG4tPnRhc2tzLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICBxZWRuLAo+ID4gICAg ICAgICAgICAgICAgICAgICAgICAgICBxZWRuX2V2ZW50X2NiKTsKPiA+ICAgICAgIGlmIChyYykg ewo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ody9xZWRuL3FlZG5fdGFzay5jIGIvZHJp dmVycy9udm1lL2h3L3FlZG4vcWVkbl90YXNrLmMKPiA+IGluZGV4IGQzNDc0MTg4ZWZkYy4uNTRm MmY0Y2JhNmVhIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9udm1lL2h3L3FlZG4vcWVkbl90YXNr LmMKPiA+ICsrKyBiL2RyaXZlcnMvbnZtZS9ody9xZWRuL3FlZG5fdGFzay5jCj4gPiBAQCAtMTEs NiArMTEsMjYzIEBACj4gPiAgIC8qIERyaXZlciBpbmNsdWRlcyAqLwo+ID4gICAjaW5jbHVkZSAi cWVkbi5oIgo+ID4KPiA+ICtzdGF0aWMgYm9vbCBxZWRuX3NnbF9oYXNfc21hbGxfbWlkX3NnZShz dHJ1Y3QgbnZtZXRjcF9zZ2UgKnNnbCwgdTE2IHNnZV9jb3VudCkKPiA+ICt7Cj4gPiArICAgICB1 MTYgc2dlX251bTsKPiA+ICsKPiA+ICsgICAgIGlmIChzZ2VfY291bnQgPiA4KSB7Cj4gPiArICAg ICAgICAgICAgIGZvciAoc2dlX251bSA9IDA7IHNnZV9udW0gPCBzZ2VfY291bnQ7IHNnZV9udW0r Kykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChsZTMyX3RvX2NwdShzZ2xbc2dlX251 bV0uc2dlX2xlbikgPAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBRRUROX0ZXX1NMT1df SU9fTUlOX1NHRV9MSU1JVCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0cnVlOyAvKiBzbWFsbCBtaWRkbGUgU0dFIGZvdW5kICovCj4gPiArICAgICAgICAgICAgIH0K PiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldHVybiBmYWxzZTsgLyogbm8gc21hbGwgbWlk ZGxlIFNHRXMgKi8KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBxZWRuX2luaXRfc2dsKHN0 cnVjdCBxZWRuX2N0eCAqcWVkbiwgc3RydWN0IHFlZG5fdGFza19jdHggKnFlZG5fdGFzaykKPiA+ ICt7Cj4gPiArICAgICBzdHJ1Y3Qgc3RvcmFnZV9zZ2xfdGFza19wYXJhbXMgKnNnbF90YXNrX3Bh cmFtczsKPiA+ICsgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXI7Cj4gPiArICAg ICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ID4gKyAgICAgc3RydWN0IHJlcXVlc3QgKnJxOwo+ ID4gKyAgICAgdTE2IG51bV9zZ2VzOwo+ID4gKyAgICAgaW50IGluZGV4Owo+ID4gKyAgICAgaW50 IHJjOwo+ID4gKwo+ID4gKyAgICAgc2dsX3Rhc2tfcGFyYW1zID0gJnFlZG5fdGFzay0+c2dsX3Rh c2tfcGFyYW1zOwo+ID4gKyAgICAgcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUocWVkbl90YXNrLT5y ZXEpOwo+ID4gKyAgICAgaWYgKHFlZG5fdGFzay0+dGFza19zaXplID09IDApIHsKPiA+ICsgICAg ICAgICAgICAgc2dsX3Rhc2tfcGFyYW1zLT5udW1fc2dlcyA9IDA7Cj4gPiArCj4gPiArICAgICAg ICAgICAgIHJldHVybiAwOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgLyogQ29udmVydCBC SU8gdG8gc2NhdHRlcmxpc3QgKi8KPiA+ICsgICAgIG51bV9zZ2VzID0gYmxrX3JxX21hcF9zZyhy cS0+cSwgcnEsIHFlZG5fdGFzay0+bnZtZV9zZyk7Cj4gPiArICAgICBpZiAocWVkbl90YXNrLT5y ZXFfZGlyZWN0aW9uID09IFdSSVRFKQo+ID4gKyAgICAgICAgICAgICBkbWFfZGlyID0gRE1BX1RP X0RFVklDRTsKPiA+ICsgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICAgZG1hX2RpciA9IERNQV9G Uk9NX0RFVklDRTsKPiA+ICsKPiA+ICsgICAgIC8qIERNQSBtYXAgdGhlIHNjYXR0ZXJsaXN0ICov Cj4gPiArICAgICBpZiAoZG1hX21hcF9zZygmcWVkbi0+cGRldi0+ZGV2LCBxZWRuX3Rhc2stPm52 bWVfc2csIG51bV9zZ2VzLCBkbWFfZGlyKSAhPSBudW1fc2dlcykgewo+ID4gKyAgICAgICAgICAg ICBwcl9lcnIoIkNvdWxkbid0IG1hcCBzZ2xcbiIpOwo+ID4gKyAgICAgICAgICAgICByYyA9IC1F UEVSTTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJjOwo+ID4gKyAgICAgfQo+ID4g Kwo+ID4gKyAgICAgc2dsX3Rhc2tfcGFyYW1zLT50b3RhbF9idWZmZXJfc2l6ZSA9IHFlZG5fdGFz ay0+dGFza19zaXplOwo+ID4gKyAgICAgc2dsX3Rhc2tfcGFyYW1zLT5udW1fc2dlcyA9IG51bV9z Z2VzOwo+ID4gKwo+ID4gKyAgICAgZm9yX2VhY2hfc2cocWVkbl90YXNrLT5udm1lX3NnLCBzZywg bnVtX3NnZXMsIGluZGV4KSB7Cj4gPiArICAgICAgICAgICAgIERNQV9SRUdQQUlSX0xFKHNnbF90 YXNrX3BhcmFtcy0+c2dsW2luZGV4XS5zZ2VfYWRkciwgc2dfZG1hX2FkZHJlc3Moc2cpKTsKPiA+ ICsgICAgICAgICAgICAgc2dsX3Rhc2tfcGFyYW1zLT5zZ2xbaW5kZXhdLnNnZV9sZW4gPSBjcHVf dG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICAvKiBS ZWxldmFudCBmb3IgSG9zdCBXcml0ZSBPbmx5ICovCj4gPiArICAgICBzZ2xfdGFza19wYXJhbXMt PnNtYWxsX21pZF9zZ2UgPSAocWVkbl90YXNrLT5yZXFfZGlyZWN0aW9uID09IFJFQUQpID8KPiA+ ICsgICAgICAgICAgICAgZmFsc2UgOgo+ID4gKyAgICAgICAgICAgICBxZWRuX3NnbF9oYXNfc21h bGxfbWlkX3NnZShzZ2xfdGFza19wYXJhbXMtPnNnbCwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2dsX3Rhc2tfcGFyYW1zLT5udW1fc2dlcyk7Cj4gPiArCj4g PiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgcWVkbl9mcmVl X252bWVfc2coc3RydWN0IHFlZG5fdGFza19jdHggKnFlZG5fdGFzaykKPiA+ICt7Cj4gPiArICAg ICBrZnJlZShxZWRuX3Rhc2stPm52bWVfc2cpOwo+ID4gKyAgICAgcWVkbl90YXNrLT5udm1lX3Nn ID0gTlVMTDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgcWVkbl9mcmVlX2Z3X3NnbChz dHJ1Y3QgcWVkbl90YXNrX2N0eCAqcWVkbl90YXNrKQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBx ZWRuX2N0eCAqcWVkbiA9IHFlZG5fdGFzay0+cWVkbjsKPiA+ICsgICAgIGRtYV9hZGRyX3Qgc2ds X3BhOwo+ID4gKwo+ID4gKyAgICAgc2dsX3BhID0gSElMT19ETUFfUkVHUEFJUihxZWRuX3Rhc2st PnNnbF90YXNrX3BhcmFtcy5zZ2xfcGh5c19hZGRyKTsKPiA+ICsgICAgIGRtYV9mcmVlX2NvaGVy ZW50KCZxZWRuLT5wZGV2LT5kZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBRRUROX01B WF9GV19TR0xfU0laRSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHFlZG5fdGFzay0+c2ds X3Rhc2tfcGFyYW1zLnNnbCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNnbF9wYSk7Cj4g PiArICAgICBxZWRuX3Rhc2stPnNnbF90YXNrX3BhcmFtcy5zZ2wgPSBOVUxMOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZCBxZWRuX2Rlc3Ryb3lfc2luZ2xlX3Rhc2soc3RydWN0IHFlZG5f dGFza19jdHggKnFlZG5fdGFzaykKPiA+ICt7Cj4gPiArICAgICB1MTYgaXRpZDsKPiA+ICsKPiA+ ICsgICAgIGl0aWQgPSBxZWRuX3Rhc2stPml0aWQ7Cj4gPiArICAgICBsaXN0X2RlbCgmcWVkbl90 YXNrLT5lbnRyeSk7Cj4gPiArICAgICBxZWRuX2ZyZWVfbnZtZV9zZyhxZWRuX3Rhc2spOwo+ID4g KyAgICAgcWVkbl9mcmVlX2Z3X3NnbChxZWRuX3Rhc2spOwo+ID4gKyAgICAga2ZyZWUocWVkbl90 YXNrKTsKPiA+ICsgICAgIHFlZG5fdGFzayA9IE5VTEw7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQg cWVkbl9kZXN0cm95X2ZyZWVfdGFza3Moc3RydWN0IHFlZG5fZnBfcXVldWUgKmZwX3EsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcWVkbl9pb19yZXNvdXJjZXMgKmlvX3Jl c3JjKQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBxZWRuX3Rhc2tfY3R4ICpxZWRuX3Rhc2ssICp0 YXNrX3RtcDsKPiA+ICsKPiA+ICsgICAgIC8qIERlc3Ryb3kgdGFza3MgZnJvbSB0aGUgZnJlZSB0 YXNrIGxpc3QgKi8KPiA+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxZWRuX3Rhc2ss IHRhc2tfdG1wLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpb19yZXNyYy0+ dGFza19mcmVlX2xpc3QsIGVudHJ5KSB7Cj4gPiArICAgICAgICAgICAgIHFlZG5fZGVzdHJveV9z aW5nbGVfdGFzayhxZWRuX3Rhc2spOwo+ID4gKyAgICAgICAgICAgICBpb19yZXNyYy0+bnVtX2Zy ZWVfdGFza3MgLT0gMTsKPiA+ICsgICAgIH0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBx ZWRuX2FsbG9jX252bWVfc2coc3RydWN0IHFlZG5fdGFza19jdHggKnFlZG5fdGFzaykKPiA+ICt7 Cj4gPiArICAgICBpbnQgcmM7Cj4gPiArCj4gPiArICAgICBxZWRuX3Rhc2stPm52bWVfc2cgPSBr Y2FsbG9jKFFFRE5fTUFYX1NHRVNfUEVSX1RBU0ssCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZigqcWVkbl90YXNrLT5udm1lX3NnKSwgR0ZQX0tFUk5FTCk7Cj4g PiArICAgICBpZiAoIXFlZG5fdGFzay0+bnZtZV9zZykgewo+ID4gKyAgICAgICAgICAgICByYyA9 IC1FTk9NRU07Cj4gPiArCj4gPiArICAgICAgICAgICAgIHJldHVybiByYzsKPiA+ICsgICAgIH0K PiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHFl ZG5fYWxsb2NfZndfc2dsKHN0cnVjdCBxZWRuX3Rhc2tfY3R4ICpxZWRuX3Rhc2spCj4gPiArewo+ ID4gKyAgICAgc3RydWN0IHFlZG5fY3R4ICpxZWRuID0gcWVkbl90YXNrLT5xZWRuX2Nvbm4tPnFl ZG47Cj4gPiArICAgICBkbWFfYWRkcl90IGZ3X3NnbF9waHlzOwo+ID4gKwo+ID4gKyAgICAgcWVk bl90YXNrLT5zZ2xfdGFza19wYXJhbXMuc2dsID0KPiA+ICsgICAgICAgICAgICAgZG1hX2FsbG9j X2NvaGVyZW50KCZxZWRuLT5wZGV2LT5kZXYsIFFFRE5fTUFYX0ZXX1NHTF9TSVpFLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ3X3NnbF9waHlzLCBHRlBfS0VSTkVMKTsK PiA+ICsgICAgIGlmICghcWVkbl90YXNrLT5zZ2xfdGFza19wYXJhbXMuc2dsKSB7Cj4gPiArICAg ICAgICAgICAgIHByX2VycigiQ291bGRuJ3QgYWxsb2NhdGUgRlcgc2dsXG4iKTsKPiA+ICsKPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAg ICBETUFfUkVHUEFJUl9MRShxZWRuX3Rhc2stPnNnbF90YXNrX3BhcmFtcy5zZ2xfcGh5c19hZGRy LCBmd19zZ2xfcGh5cyk7Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGlubGluZSB2b2lkICpxZWRuX2dldF9md190YXNrKHN0cnVjdCBxZWRfbnZtZXRj cF90aWQgKmluZm8sIHUxNiBpdGlkKQo+ID4gK3sKPiA+ICsgICAgIHJldHVybiAodm9pZCAqKShp bmZvLT5ibG9ja3NbaXRpZCAvIGluZm8tPm51bV90aWRzX3Blcl9ibG9ja10gKwo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIChpdGlkICUgaW5mby0+bnVtX3RpZHNfcGVyX2Jsb2NrKSAqIGluZm8t PnNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IHFlZG5fdGFza19jdHggKnFl ZG5fYWxsb2NfdGFzayhzdHJ1Y3QgcWVkbl9jb25uX2N0eCAqY29ubl9jdHgsIHUxNiBpdGlkKQo+ ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBxZWRuX2N0eCAqcWVkbiA9IGNvbm5fY3R4LT5xZWRuOwo+ ID4gKyAgICAgc3RydWN0IHFlZG5fdGFza19jdHggKnFlZG5fdGFzazsKPiA+ICsgICAgIHZvaWQg KmZ3X3Rhc2tfY3R4Owo+ID4gKyAgICAgaW50IHJjID0gMDsKPiA+ICsKPiA+ICsgICAgIHFlZG5f dGFzayA9IGt6YWxsb2Moc2l6ZW9mKCpxZWRuX3Rhc2spLCBHRlBfS0VSTkVMKTsKPiA+ICsgICAg IGlmICghcWVkbl90YXNrKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiA+ICsKPgo+ IEFzIHRoaXMgaXMgYSBwb29sLCB3aHkgZG9uJ3QgeW91IHVzZSBtZW1wb29scyBoZXJlPwoKQXMg ZmFyIGFzIEkga25vdywgdGhlIG1haW4gcmVhc29uIHRvIHVzZSBtZW1wb29sIGlzIHdoZXJlIG1l bW9yeSBhbGxvY2F0aW9ucwpjYW5ub3QgYmUgYWxsb3dlZCB0byBmYWlsLiBXaXRoIG91ciBkZXNp Z24sIHRoZSBwZXIgQ1BVIHRhc2sgcG9vbCBpcyBhbGxvY2F0ZWQKYXMgcGFydCBvZiB0aGUgZmly c3QgY29ubmVjdGlvbiBvZmZsb2FkIChmcm9tIHRoaXMgQ1BVKSBhbmQgd2lsbCBiZSB1c2VkIGZv cgphbGwgdGhlIElPcyBvbiB0aGlzIENQVS4gQXMgcGFydCBvZiB0aGUgSU8gcGF0aCBmbG93LCB3 ZSBhcmUgcmUtdXNpbmcgdGhlIHNhbWUKdGFzayBlbGVtZW50cyBmcm9tIHRoZSBwb29sLCBoZW5j ZSBJIGJlbGlldmUgaXQncyBub3QgZGlmZmVyZW50IGZyb20gYW55IG90aGVyCm1lbW9yeSB3ZSBh cmUgYWxsb2NhdGluZyBhcyBwYXJ0IG9mIGRyaXZlciBsb2FkIGFuZCBjb25uZWN0aW9uIG9mZmxv YWQgd2hpY2gKaXMgYWxsb3dlZCB0byBmYWlsLgoKPgo+ID4gKyAgICAgc3Bpbl9sb2NrX2luaXQo JnFlZG5fdGFzay0+bG9jayk7Cj4gPiArICAgICBmd190YXNrX2N0eCA9IHFlZG5fZ2V0X2Z3X3Rh c2soJnFlZG4tPnRhc2tzLCBpdGlkKTsKPiA+ICsgICAgIGlmICghZndfdGFza19jdHgpIHsKPiA+ ICsgICAgICAgICAgICAgcHJfZXJyKCJpVElEOiAweCV4OyBGYWlsZWQgZ2V0dGluZyBmd190YXNr X2N0eCBtZW1vcnlcbiIsIGl0aWQpOwo+ID4gKyAgICAgICAgICAgICBnb3RvIHJlbGVhc2VfdGFz azsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIC8qIE5vIG5lZWQgdG8gbWVtc2V0IGZ3X3Rh c2tfY3R4IC0gaXRzIGRvbmUgaW4gdGhlIEhTSSBmdW5jICovCj4gPiArICAgICBxZWRuX3Rhc2st PnFlZG5fY29ubiA9IGNvbm5fY3R4Owo+ID4gKyAgICAgcWVkbl90YXNrLT5xZWRuID0gcWVkbjsK PiA+ICsgICAgIHFlZG5fdGFzay0+ZndfdGFza19jdHggPSBmd190YXNrX2N0eDsKPiA+ICsgICAg IHFlZG5fdGFzay0+dmFsaWQgPSAwOwo+ID4gKyAgICAgcWVkbl90YXNrLT5mbGFncyA9IDA7Cj4g PiArICAgICBxZWRuX3Rhc2stPml0aWQgPSBpdGlkOwo+ID4gKyAgICAgcmMgPSBxZWRuX2FsbG9j X2Z3X3NnbChxZWRuX3Rhc2spOwo+ID4gKyAgICAgaWYgKHJjKSB7Cj4gPiArICAgICAgICAgICAg IHByX2VycigiaVRJRDogMHgleDsgRmFpbGVkIGFsbG9jYXRpbmcgRlcgc2dsXG4iLCBpdGlkKTsK PiA+ICsgICAgICAgICAgICAgZ290byByZWxlYXNlX3Rhc2s7Cj4gPiArICAgICB9Cj4gPiArCj4g PiArICAgICByYyA9IHFlZG5fYWxsb2NfbnZtZV9zZyhxZWRuX3Rhc2spOwo+ID4gKyAgICAgaWYg KHJjKSB7Cj4gPiArICAgICAgICAgICAgIHByX2VycigiaVRJRDogMHgleDsgRmFpbGVkIGFsbG9j YXRpbmcgRlcgc2dsXG4iLCBpdGlkKTsKPiA+ICsgICAgICAgICAgICAgZ290byByZWxlYXNlX2Z3 X3NnbDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldHVybiBxZWRuX3Rhc2s7Cj4gPiAr Cj4gPiArcmVsZWFzZV9md19zZ2w6Cj4gPiArICAgICBxZWRuX2ZyZWVfZndfc2dsKHFlZG5fdGFz ayk7Cj4gPiArcmVsZWFzZV90YXNrOgo+ID4gKyAgICAga2ZyZWUocWVkbl90YXNrKTsKPiA+ICsK PiA+ICsgICAgIHJldHVybiBOVUxMOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgcWVkbl9hbGxvY190 YXNrcyhzdHJ1Y3QgcWVkbl9jb25uX2N0eCAqY29ubl9jdHgpCj4gPiArewo+ID4gKyAgICAgc3Ry dWN0IHFlZG5fY3R4ICpxZWRuID0gY29ubl9jdHgtPnFlZG47Cj4gPiArICAgICBzdHJ1Y3QgcWVk bl90YXNrX2N0eCAqcWVkbl90YXNrID0gTlVMTDsKPiA+ICsgICAgIHN0cnVjdCBxZWRuX2lvX3Jl c291cmNlcyAqaW9fcmVzcmM7Cj4gPiArICAgICB1MTYgaXRpZCwgc3RhcnRfaXRpZCwgb2Zmc2V0 Owo+ID4gKyAgICAgc3RydWN0IHFlZG5fZnBfcXVldWUgKmZwX3E7Cj4gPiArICAgICBpbnQgaSwg cmM7Cj4gPiArCj4gPiArICAgICBmcF9xID0gY29ubl9jdHgtPmZwX3E7Cj4gPiArCj4gPiArICAg ICBvZmZzZXQgPSBmcF9xLT5zYl9pZDsKPiA+ICsgICAgIGlvX3Jlc3JjID0gJmZwX3EtPmhvc3Rf cmVzcmM7Cj4gPiArCj4gPiArICAgICBzdGFydF9pdGlkID0gcWVkbi0+bnVtX3Rhc2tzX3Blcl9w b29sICogb2Zmc2V0Owo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IHFlZG4tPm51bV90YXNrc19w ZXJfcG9vbDsgKytpKSB7Cj4gPiArICAgICAgICAgICAgIGl0aWQgPSBzdGFydF9pdGlkICsgaTsK PiA+ICsgICAgICAgICAgICAgcWVkbl90YXNrID0gcWVkbl9hbGxvY190YXNrKGNvbm5fY3R4LCBp dGlkKTsKPiA+ICsgICAgICAgICAgICAgaWYgKCFxZWRuX3Rhc2spIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICBwcl9lcnIoIkZhaWxlZCBhbGxvY2F0aW5nIHRhc2tcbiIpOwo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJjID0gLUVOT01FTTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBn b3RvIHJlbGVhc2VfdGFza3M7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAg ICAgICAgcWVkbl90YXNrLT5mcF9xID0gZnBfcTsKPiA+ICsgICAgICAgICAgICAgaW9fcmVzcmMt Pm51bV9mcmVlX3Rhc2tzICs9IDE7Cj4gPiArICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwoJnFl ZG5fdGFzay0+ZW50cnksICZpb19yZXNyYy0+dGFza19mcmVlX2xpc3QpOwo+ID4gKyAgICAgfQo+ ID4gKwo+ID4gKyAgICAgaW9fcmVzcmMtPm51bV9hbGxvY190YXNrcyA9IGlvX3Jlc3JjLT5udW1f ZnJlZV90YXNrczsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gKwo+ID4gK3JlbGVhc2Vf dGFza3M6Cj4gPiArICAgICBxZWRuX2Rlc3Ryb3lfZnJlZV90YXNrcyhmcF9xLCBpb19yZXNyYyk7 Cj4gPiArCj4gPiArICAgICByZXR1cm4gcmM7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgcWVkbl9j b21tb25fY2xlYXJfZndfc2dsKHN0cnVjdCBzdG9yYWdlX3NnbF90YXNrX3BhcmFtcyAqc2dsX3Rh c2tfcGFyYW1zKQo+ID4gK3sKPiA+ICsgICAgIHUxNiBzZ2VfY250ID0gc2dsX3Rhc2tfcGFyYW1z LT5udW1fc2dlczsKPiA+ICsKPiA+ICsgICAgIG1lbXNldCgmc2dsX3Rhc2tfcGFyYW1zLT5zZ2xb KHNnZV9jbnQgLSAxKV0sIDAsCj4gPiArICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBudm1ldGNw X3NnZSkpOwo+ID4gKyAgICAgc2dsX3Rhc2tfcGFyYW1zLT50b3RhbF9idWZmZXJfc2l6ZSA9IDA7 Cj4gPiArICAgICBzZ2xfdGFza19wYXJhbXMtPnNtYWxsX21pZF9zZ2UgPSBmYWxzZTsKPiA+ICsg ICAgIHNnbF90YXNrX3BhcmFtcy0+bnVtX3NnZXMgPSAwOwo+ID4gK30KPiA+ICsKPiA+ICtpbmxp bmUgdm9pZCBxZWRuX2hvc3RfcmVzZXRfY2NjaWRfaXRpZF9lbnRyeShzdHJ1Y3QgcWVkbl9jb25u X2N0eCAqY29ubl9jdHgsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdTE2IGNjY2lkKQo+ID4gK3sKPiA+ICsgICAgIGNvbm5fY3R4LT5ob3N0X2NjY2lkX2l0 aWRbY2NjaWRdLml0aWQgPSBjcHVfdG9fbGUxNihRRUROX0lOVkFMSURfSVRJRCk7Cj4gPiArfQo+ ID4gKwo+ID4gK2lubGluZSB2b2lkIHFlZG5faG9zdF9zZXRfY2NjaWRfaXRpZF9lbnRyeShzdHJ1 Y3QgcWVkbl9jb25uX2N0eCAqY29ubl9jdHgsIHUxNiBjY2NpZCwgdTE2IGl0aWQpCj4gPiArewo+ ID4gKyAgICAgY29ubl9jdHgtPmhvc3RfY2NjaWRfaXRpZFtjY2NpZF0uaXRpZCA9IGNwdV90b19s ZTE2KGl0aWQpOwo+ID4gK30KPiA+ICsKPiA+ICAgaW5saW5lIGludCBxZWRuX3ZhbGlkYXRlX2Nj Y2lkX2luX3JhbmdlKHN0cnVjdCBxZWRuX2Nvbm5fY3R4ICpjb25uX2N0eCwgdTE2IGNjY2lkKQo+ ID4gICB7Cj4gPiAgICAgICBpbnQgcmMgPSAwOwo+ID4gQEAgLTIzLDYgKzI4MCwxNjAgQEAgaW5s aW5lIGludCBxZWRuX3ZhbGlkYXRlX2NjY2lkX2luX3JhbmdlKHN0cnVjdCBxZWRuX2Nvbm5fY3R4 ICpjb25uX2N0eCwgdTE2IGNjY2kKPiA+ICAgICAgIHJldHVybiByYzsKPiA+ICAgfQo+ID4KPiA+ ICtzdGF0aWMgdm9pZCBxZWRuX2NsZWFyX3NnbChzdHJ1Y3QgcWVkbl9jdHggKnFlZG4sCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFlZG5fdGFza19jdHggKnFlZG5fdGFzaykK PiA+ICt7Cj4gPiArICAgICBzdHJ1Y3Qgc3RvcmFnZV9zZ2xfdGFza19wYXJhbXMgKnNnbF90YXNr X3BhcmFtczsKPiA+ICsgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXI7Cj4gPiAr ICAgICB1MzIgc2dlX2NudDsKPiA+ICsKPiA+ICsgICAgIHNnbF90YXNrX3BhcmFtcyA9ICZxZWRu X3Rhc2stPnNnbF90YXNrX3BhcmFtczsKPiA+ICsgICAgIHNnZV9jbnQgPSBzZ2xfdGFza19wYXJh bXMtPm51bV9zZ2VzOwo+ID4gKwo+ID4gKyAgICAgLyogTm90aGluZyB0byBkbyBpZiBubyBTR0Vz IHdlcmUgdXNlZCAqLwo+ID4gKyAgICAgaWYgKCFxZWRuX3Rhc2stPnRhc2tfc2l6ZSB8fCAhc2dl X2NudCkKPiA+ICsgICAgICAgICAgICAgcmV0dXJuOwo+ID4gKwo+ID4gKyAgICAgZG1hX2RpciA9 IChxZWRuX3Rhc2stPnJlcV9kaXJlY3Rpb24gPT0gV1JJVEUgPyBETUFfVE9fREVWSUNFIDogRE1B X0ZST01fREVWSUNFKTsKPiA+ICsgICAgIGRtYV91bm1hcF9zZygmcWVkbi0+cGRldi0+ZGV2LCBx ZWRuX3Rhc2stPm52bWVfc2csIHNnZV9jbnQsIGRtYV9kaXIpOwo+ID4gKyAgICAgbWVtc2V0KCZx ZWRuX3Rhc2stPm52bWVfc2dbKHNnZV9jbnQgLSAxKV0sIDAsIHNpemVvZihzdHJ1Y3Qgc2NhdHRl cmxpc3QpKTsKPiA+ICsgICAgIHFlZG5fY29tbW9uX2NsZWFyX2Z3X3NnbChzZ2xfdGFza19wYXJh bXMpOwo+ID4gKyAgICAgcWVkbl90YXNrLT50YXNrX3NpemUgPSAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCBxZWRuX2NsZWFyX3Rhc2soc3RydWN0IHFlZG5fY29ubl9jdHggKmNvbm5f Y3R4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcWVkbl90YXNrX2N0eCAq cWVkbl90YXNrKQo+ID4gK3sKPiA+ICsgICAgIC8qIFRhc2sgbG9jayBpc24ndCBuZWVkZWQgc2lu Y2UgaXQgaXMgbm8gbG9uZ2VyIGluIHVzZSAqLwo+ID4gKyAgICAgcWVkbl9jbGVhcl9zZ2woY29u bl9jdHgtPnFlZG4sIHFlZG5fdGFzayk7Cj4gPiArICAgICBxZWRuX3Rhc2stPnZhbGlkID0gMDsK PiA+ICsgICAgIHFlZG5fdGFzay0+ZmxhZ3MgPSAwOwo+ID4gKwo+ID4gKyAgICAgYXRvbWljX2Rl YygmY29ubl9jdHgtPm51bV9hY3RpdmVfdGFza3MpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIHFl ZG5fcmV0dXJuX2FjdGl2ZV90YXNrcyhzdHJ1Y3QgcWVkbl9jb25uX2N0eCAqY29ubl9jdHgpCj4g PiArewo+ID4gKyAgICAgc3RydWN0IHFlZG5fZnBfcXVldWUgKmZwX3EgPSBjb25uX2N0eC0+ZnBf cTsKPiA+ICsgICAgIHN0cnVjdCBxZWRuX3Rhc2tfY3R4ICpxZWRuX3Rhc2ssICp0YXNrX3RtcDsK PiA+ICsgICAgIHN0cnVjdCBxZWRuX2lvX3Jlc291cmNlcyAqaW9fcmVzcmM7Cj4gPiArICAgICBp bnQgbnVtX3JldHVybmVkX3Rhc2tzID0gMDsKPiA+ICsgICAgIGludCBudW1fYWN0aXZlX3Rhc2tz Owo+ID4gKwo+ID4gKyAgICAgaW9fcmVzcmMgPSAmZnBfcS0+aG9zdF9yZXNyYzsKPiA+ICsKPiA+ ICsgICAgIC8qIFJldHVybiB0YXNrcyB0aGF0IGFyZW4ndCAiVXNlZCBieSBGVyIgdG8gdGhlIHBv b2wgKi8KPiA+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxZWRuX3Rhc2ssIHRhc2tf dG1wLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uX2N0eC0+YWN0aXZl X3Rhc2tfbGlzdCwgZW50cnkpIHsKPiA+ICsgICAgICAgICAgICAgcWVkbl9jbGVhcl90YXNrKGNv bm5fY3R4LCBxZWRuX3Rhc2spOwo+ID4gKyAgICAgICAgICAgICBudW1fcmV0dXJuZWRfdGFza3Mr KzsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGlmIChudW1fcmV0dXJuZWRfdGFza3MpIHsK PiA+ICsgICAgICAgICAgICAgc3Bpbl9sb2NrKCZpb19yZXNyYy0+cmVzb3VyY2VzX2xvY2spOwo+ ID4gKyAgICAgICAgICAgICAvKiBSZXR1cm4gdGFza3MgdG8gRlBfUSBwb29sIGluIG9uZSBzaG90 ICovCj4gPiArCj4gPiArICAgICAgICAgICAgIGxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmY29ubl9j dHgtPmFjdGl2ZV90YXNrX2xpc3QsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmaW9fcmVzcmMtPnRhc2tfZnJlZV9saXN0KTsKPiA+ICsgICAgICAgICAgICAgaW9fcmVz cmMtPm51bV9mcmVlX3Rhc2tzICs9IG51bV9yZXR1cm5lZF90YXNrczsKPiA+ICsgICAgICAgICAg ICAgc3Bpbl91bmxvY2soJmlvX3Jlc3JjLT5yZXNvdXJjZXNfbG9jayk7Cj4gPiArICAgICB9Cj4g PiArCj4gPiArICAgICBudW1fYWN0aXZlX3Rhc2tzID0gYXRvbWljX3JlYWQoJmNvbm5fY3R4LT5u dW1fYWN0aXZlX3Rhc2tzKTsKPiA+ICsgICAgIGlmIChudW1fYWN0aXZlX3Rhc2tzKQo+ID4gKyAg ICAgICAgICAgICBwcl9lcnIoIm51bV9hY3RpdmVfdGFza3MgaXMgJXUgYWZ0ZXIgY2xlYW51cC5c biIsIG51bV9hY3RpdmVfdGFza3MpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIHFlZG5fcmV0dXJu X3Rhc2tfdG9fcG9vbChzdHJ1Y3QgcWVkbl9jb25uX2N0eCAqY29ubl9jdHgsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFlZG5fdGFza19jdHggKnFlZG5fdGFzaykKPiA+ ICt7Cj4gPiArICAgICBzdHJ1Y3QgcWVkbl9mcF9xdWV1ZSAqZnBfcSA9IGNvbm5fY3R4LT5mcF9x Owo+ID4gKyAgICAgc3RydWN0IHFlZG5faW9fcmVzb3VyY2VzICppb19yZXNyYzsKPiA+ICsgICAg IHVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKPiA+ICsKPiA+ICsgICAgIGlvX3Jlc3JjID0gJmZw X3EtPmhvc3RfcmVzcmM7Cj4gPiArCj4gPiArICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcWVkbl90 YXNrLT5sb2NrLCBsb2NrX2ZsYWdzKTsKPiA+ICsgICAgIHFlZG5fdGFzay0+dmFsaWQgPSAwOwo+ ID4gKyAgICAgcWVkbl90YXNrLT5mbGFncyA9IDA7Cj4gPiArICAgICBxZWRuX2NsZWFyX3NnbChj b25uX2N0eC0+cWVkbiwgcWVkbl90YXNrKTsKPiA+ICsgICAgIHNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnFlZG5fdGFzay0+bG9jaywgbG9ja19mbGFncyk7Cj4gPiArCj4gPiArICAgICBzcGluX2xv Y2soJmNvbm5fY3R4LT50YXNrX2xpc3RfbG9jayk7Cj4gPiArICAgICBsaXN0X2RlbCgmcWVkbl90 YXNrLT5lbnRyeSk7Cj4gPiArICAgICBxZWRuX2hvc3RfcmVzZXRfY2NjaWRfaXRpZF9lbnRyeShj b25uX2N0eCwgcWVkbl90YXNrLT5jY2NpZCk7Cj4gPiArICAgICBzcGluX3VubG9jaygmY29ubl9j dHgtPnRhc2tfbGlzdF9sb2NrKTsKPiA+ICsKPiA+ICsgICAgIGF0b21pY19kZWMoJmNvbm5fY3R4 LT5udW1fYWN0aXZlX3Rhc2tzKTsKPiA+ICsgICAgIGF0b21pY19kZWMoJmNvbm5fY3R4LT5udW1f YWN0aXZlX2Z3X3Rhc2tzKTsKPiA+ICsKPiA+ICsgICAgIHNwaW5fbG9jaygmaW9fcmVzcmMtPnJl c291cmNlc19sb2NrKTsKPiA+ICsgICAgIGxpc3RfYWRkX3RhaWwoJnFlZG5fdGFzay0+ZW50cnks ICZpb19yZXNyYy0+dGFza19mcmVlX2xpc3QpOwo+ID4gKyAgICAgaW9fcmVzcmMtPm51bV9mcmVl X3Rhc2tzICs9IDE7Cj4gPiArICAgICBzcGluX3VubG9jaygmaW9fcmVzcmMtPnJlc291cmNlc19s b2NrKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RydWN0IHFlZG5fdGFza19jdHggKgo+ID4gK3FlZG5f Z2V0X2ZyZWVfdGFza19mcm9tX3Bvb2woc3RydWN0IHFlZG5fY29ubl9jdHggKmNvbm5fY3R4LCB1 MTYgY2NjaWQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IHFlZG5fdGFza19jdHggKnFlZG5fdGFz ayA9IE5VTEw7Cj4gPiArICAgICBzdHJ1Y3QgcWVkbl9pb19yZXNvdXJjZXMgKmlvX3Jlc3JjOwo+ ID4gKyAgICAgc3RydWN0IHFlZG5fZnBfcXVldWUgKmZwX3E7Cj4gPiArCj4gPiArICAgICBmcF9x ID0gY29ubl9jdHgtPmZwX3E7Cj4gPiArICAgICBpb19yZXNyYyA9ICZmcF9xLT5ob3N0X3Jlc3Jj Owo+ID4gKwo+ID4gKyAgICAgc3Bpbl9sb2NrKCZpb19yZXNyYy0+cmVzb3VyY2VzX2xvY2spOwo+ ID4gKyAgICAgcWVkbl90YXNrID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZpb19yZXNyYy0+ dGFza19mcmVlX2xpc3QsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHFlZG5fdGFza19jdHgsIGVudHJ5KTsKPiA+ICsgICAgIGlmICh1bmxpa2Vs eSghcWVkbl90YXNrKSkgewo+ID4gKyAgICAgICAgICAgICBzcGluX3VubG9jaygmaW9fcmVzcmMt PnJlc291cmNlc19sb2NrKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4g PiArICAgICB9Cj4gPiArICAgICBsaXN0X2RlbCgmcWVkbl90YXNrLT5lbnRyeSk7Cj4gPiArICAg ICBpb19yZXNyYy0+bnVtX2ZyZWVfdGFza3MgLT0gMTsKPiA+ICsgICAgIHNwaW5fdW5sb2NrKCZp b19yZXNyYy0+cmVzb3VyY2VzX2xvY2spOwo+ID4gKwo+ID4gKyAgICAgc3Bpbl9sb2NrKCZjb25u X2N0eC0+dGFza19saXN0X2xvY2spOwo+ID4gKyAgICAgbGlzdF9hZGRfdGFpbCgmcWVkbl90YXNr LT5lbnRyeSwgJmNvbm5fY3R4LT5hY3RpdmVfdGFza19saXN0KTsKPiA+ICsgICAgIHFlZG5faG9z dF9zZXRfY2NjaWRfaXRpZF9lbnRyeShjb25uX2N0eCwgY2NjaWQsIHFlZG5fdGFzay0+aXRpZCk7 Cj4gPiArICAgICBzcGluX3VubG9jaygmY29ubl9jdHgtPnRhc2tfbGlzdF9sb2NrKTsKPiA+ICsK PiA+ICsgICAgIGF0b21pY19pbmMoJmNvbm5fY3R4LT5udW1fYWN0aXZlX3Rhc2tzKTsKPiA+ICsg ICAgIHFlZG5fdGFzay0+Y2NjaWQgPSBjY2NpZDsKPiA+ICsgICAgIHFlZG5fdGFzay0+cWVkbl9j b25uID0gY29ubl9jdHg7Cj4gPiArICAgICBxZWRuX3Rhc2stPnZhbGlkID0gMTsKPiA+ICsKPiA+ ICsgICAgIHJldHVybiBxZWRuX3Rhc2s7Cj4gPiArfQo+ID4gKwo+ID4gK3N0cnVjdCBxZWRuX3Rh c2tfY3R4ICoKPiA+ICtxZWRuX2dldF90YXNrX2Zyb21fcG9vbF9pbnNpc3Qoc3RydWN0IHFlZG5f Y29ubl9jdHggKmNvbm5fY3R4LCB1MTYgY2NjaWQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IHFl ZG5fdGFza19jdHggKnFlZG5fdGFzayA9IE5VTEw7Cj4gPiArICAgICB1bnNpZ25lZCBsb25nIHRp bWVvdXQ7Cj4gPiArCj4gPiArICAgICBxZWRuX3Rhc2sgPSBxZWRuX2dldF9mcmVlX3Rhc2tfZnJv bV9wb29sKGNvbm5fY3R4LCBjY2NpZCk7Cj4gPiArICAgICBpZiAodW5saWtlbHkoIXFlZG5fdGFz aykpIHsKPiA+ICsgICAgICAgICAgICAgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoUUVETl9U QVNLX0lOU0lTVF9UTU8pICsgamlmZmllczsKPiA+ICsgICAgICAgICAgICAgd2hpbGUgKDEpIHsK PiA+ICsgICAgICAgICAgICAgICAgICAgICBxZWRuX3Rhc2sgPSBxZWRuX2dldF9mcmVlX3Rhc2tf ZnJvbV9wb29sKGNvbm5fY3R4LCBjY2NpZCk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYg KGxpa2VseShxZWRuX3Rhc2spKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiRmFpbGVkIG9uIHRpbWVvdXQg b2YgZmV0Y2hpbmcgdGFza1xuIik7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gTlVMTDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICB9Cj4gPiArICAgICAg ICAgICAgIH0KPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldHVybiBxZWRuX3Rhc2s7Cj4g PiArfQo+ID4gKwo+ID4gICBzdGF0aWMgYm9vbCBxZWRuX3Byb2Nlc3NfcmVxKHN0cnVjdCBxZWRu X2Nvbm5fY3R4ICpxZWRuX2Nvbm4pCj4gPiAgIHsKPiA+ICAgICAgIHJldHVybiB0cnVlOwo+ID4K PiBDaGVlcnMsCj4KPiBIYW5uZXMKPiAtLQo+IERyLiBIYW5uZXMgUmVpbmVja2UgICAgICAgICAg ICAgICAgS2VybmVsIFN0b3JhZ2UgQXJjaGl0ZWN0Cj4gaGFyZUBzdXNlLmRlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKzQ5IDkxMSA3NDA1MyA2ODgKPiBTVVNFIFNvZnR3YXJlIFNvbHV0 aW9ucyBHbWJILCBNYXhmZWxkc3RyLiA1LCA5MDQwOSBOw7xybmJlcmcKPiBIUkIgMzY4MDkgKEFH IE7DvHJuYmVyZyksIEdlc2Now6RmdHNmw7xocmVyOiBGZWxpeCBJbWVuZMO2cmZmZXIKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW52bWUgbWFp bGluZyBsaXN0CkxpbnV4LW52bWVAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW52bWUK