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=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 851E3C43331 for ; Wed, 13 Nov 2019 14:36:07 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 4BBAD2245D for ; Wed, 13 Nov 2019 14:36:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="UV6XcETp"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="dtvGtO0x" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4BBAD2245D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mellanox.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=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=KZrPUO4YJ/agbbWhT9lCJujDVPznmLAaAHFzs3bChAE=; b=UV6XcETpPquVNhKXWFjI01inH gsdmwsI21enHthHY69YWuSUSQpdPTzmK4kZ5I2n+dJ07RcirHsKZGhyvx1DH50f50wExHutxV13Kt nJTNgbs6cjPF14ojO98L9scVyZCou0sALPa5taoTo6dW4NzKlUOOSDaIND82QO8wr2/pM1WCCyhN/ ma3lDiWceFmUu/e9MyWv15RhyqKML0y+f6SKvtVnNoYi5X49L96mJddGIc/ZOeM/XhVuDGzypIpll JsR3cHBOqTvtNlWoxXSBBKuszmVVN05x11EApR+USaf7UcOao6rbSTJAIO0Qf5LRiQkOodP2nkYeX 1LM5mjoHQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUtkZ-0008Sy-Uv; Wed, 13 Nov 2019 14:36:03 +0000 Received: from mail-eopbgr10085.outbound.protection.outlook.com ([40.107.1.85] helo=EUR02-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUtkU-0008SG-Uc for linux-nvme@lists.infradead.org; Wed, 13 Nov 2019 14:36:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QvksuDMmjo926N5WObkGm6GZmsgECBRCDjWIRIksemgto6jqNx1IVUB6pEHlwpiDCkj1YMWJPR52XAU3s2jyy1zQ4u2SIejmNerlPW4pWlvgSup4EcoJ6kazlcAFORvOTair+UDW+4s7SkZG5clb1wM3HTe0arT8ebYs9P0FLbJ+67xbdUyCbWk2Jg2PsmmGmn1q2koRy7oXYAqNZ+mZfF0iDf75SvnnVRat4frFe+FqSWUo0KMLtmMNs9n0QQJ/LHJlHUufwGWxNXF5/HZx8TT0N8INdQEcWIExL+S2LBx2XmDGF6mgFNxqmu13lqfV+4HioCVJjdWu4DW0II294g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CZ3BO3BD4T2WHmaCErz1i//1xtEkdfHnwiFa2xWBKSA=; b=Ah12yfAkTXVLOvTrj43ZTmOYUb3wiTsF3yDyo23D/gn3QPKaFzBGVzSisRaz8RYA/jlhSmUXWumn1Oe+ArveQRnXelBsVlMB5X9/53P1VuwnQDvzPVuRE+3yUjW6vR1i2bypFFkafN/O9B10ePuZRTFGf42c6xwZGtPLw3SEJUJPTnlXSHkAV9nK8rt/5tLiR+Tu8WndLAdTlVsoADQyhivGy1MalquE3trBy05mP6oz4Shk9HLouOuAjZrUXvgCBXXSmA95DTAzhSPnDA3GiE+QfQ8aCmjjw7w5WV+fBQFg9iNgMaUxIOKbMWu0IW0T2xyHySqsdrROHil62qsd3g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 193.47.165.251) smtp.rcpttodomain=lst.de smtp.mailfrom=mellanox.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=mellanox.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CZ3BO3BD4T2WHmaCErz1i//1xtEkdfHnwiFa2xWBKSA=; b=dtvGtO0xQcPH6KpqidJiivKtVjN9D0B1miPzkBz22DngeWFRPdy7gbc1GJE0wRU4HEzXBibYLo3ieX8meSXQBskbOgjaNuzDGK9JBVwQkF/kyunwVYHMYwNhQUMiPxz3QhFqnSFXoW7ZeNI10LhAhxrW/0Yr5Kprey6xrCk2P38= Received: from HE1PR05CA0319.eurprd05.prod.outlook.com (2603:10a6:7:92::14) by DB6PR0502MB2967.eurprd05.prod.outlook.com (2603:10a6:4:94::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2430.22; Wed, 13 Nov 2019 14:35:54 +0000 Received: from DB5EUR03FT033.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::206) by HE1PR05CA0319.outlook.office365.com (2603:10a6:7:92::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2451.23 via Frontend Transport; Wed, 13 Nov 2019 14:35:54 +0000 Authentication-Results: spf=pass (sender IP is 193.47.165.251) smtp.mailfrom=mellanox.com; lst.de; dkim=none (message not signed) header.d=none;lst.de; dmarc=pass action=none header.from=mellanox.com; Received-SPF: Pass (protection.outlook.com: domain of mellanox.com designates 193.47.165.251 as permitted sender) receiver=protection.outlook.com; client-ip=193.47.165.251; helo=mtlcas13.mtl.com; Received: from mtlcas13.mtl.com (193.47.165.251) by DB5EUR03FT033.mail.protection.outlook.com (10.152.20.76) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2451.23 via Frontend Transport; Wed, 13 Nov 2019 14:35:54 +0000 Received: from MTLCAS13.mtl.com (10.0.8.78) by mtlcas13.mtl.com (10.0.8.78) with Microsoft SMTP Server (TLS) id 15.0.1178.4; Wed, 13 Nov 2019 16:35:51 +0200 Received: from MTLCAS01.mtl.com (10.0.8.71) by MTLCAS13.mtl.com (10.0.8.78) with Microsoft SMTP Server (TLS) id 15.0.1178.4 via Frontend Transport; Wed, 13 Nov 2019 16:35:51 +0200 Received: from [10.223.0.100] (10.223.0.100) by MTLCAS01.mtl.com (10.0.8.71) with Microsoft SMTP Server (TLS) id 14.3.468.0; Wed, 13 Nov 2019 16:31:43 +0200 Subject: Re: [PATCH 05/15] nvme-rdma: Add metadata/T10-PI support To: Sagi Grimberg , , , References: <20191105162026.183901-1-maxg@mellanox.com> <20191105162026.183901-7-maxg@mellanox.com> <8c21bb99-4290-b7d3-d8ee-38b6ce41e042@grimberg.me> From: Max Gurtovoy Message-ID: <2205eff8-3fdc-ba0f-8578-994a8ed835f6@mellanox.com> Date: Wed, 13 Nov 2019 16:35:36 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 MIME-Version: 1.0 In-Reply-To: <8c21bb99-4290-b7d3-d8ee-38b6ce41e042@grimberg.me> Content-Language: en-US X-Originating-IP: [10.223.0.100] X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:193.47.165.251; IPV:NLI; CTRY:IL; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(376002)(346002)(136003)(396003)(189003)(199004)(4326008)(8676002)(81166006)(5660300002)(70586007)(70206006)(2201001)(36756003)(126002)(76176011)(58126008)(229853002)(486006)(47776003)(65806001)(2486003)(81156014)(23676004)(16576012)(316002)(65956001)(8936002)(110136005)(54906003)(6246003)(107886003)(31696002)(86362001)(30864003)(305945005)(7736002)(2616005)(478600001)(106002)(2906002)(336012)(14444005)(446003)(50466002)(16526019)(3846002)(31686004)(26005)(2870700001)(6116002)(476003)(53546011)(6666004)(356004)(11346002)(186003)(3940600001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0502MB2967; H:mtlcas13.mtl.com; FPR:; SPF:Pass; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c8a51348-0604-44fb-a65d-08d76846ca12 X-MS-TrafficTypeDiagnostic: DB6PR0502MB2967: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3383; X-Forefront-PRVS: 0220D4B98D X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LMFVqyg5j1hjeCbY1D2etbEYARHntY02lxoIVTX03JxQ7Tg3/Sy1LZ96S9NtZ/ifBGVdoA0xVC20oBLt7MoBCqUKhLJ0EY253O/J4rTM77GMLsxtfrwhGxKJVo8wY5zN2AkzP/PSyIUnf+hrTUhOrlOhGPoM21ablkDw6JhFUhXo50O/uPX5cCDnWb+N1VgwRC0H/BFGwp0zp33rFl+iVCueUaTg5v9Zr71ncxXB7jT1LpwwnyfGRQTTg5+ITF/YuDyUYfDZQWNKEKDizFLCIbpdot8heUtpS/vXinKNTWh4FJl2g6+L0XI23TGQBPIt7A7pxGAdeM3gs5nGKwwx3l5iZUoutfiT1z38NMaURxzf+Jm81SxMy4gHe5ZAZ5oj3F0jpb9hwxT09cMzkBMIAH+uiToU7L47zmJq/mHgr/uX9uv+ev4AcRIxcmo/t1Dd X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2019 14:35:54.0161 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c8a51348-0604-44fb-a65d-08d76846ca12 X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a652971c-7d2e-4d9b-a6a4-d149256f461b; Ip=[193.47.165.251]; Helo=[mtlcas13.mtl.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0502MB2967 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191113_063559_168479_2F5DF7A9 X-CRM114-Status: GOOD ( 18.33 ) X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: israelr@mellanox.com, oren@mellanox.com, idanb@mellanox.com, vladimirk@mellanox.com, shlomin@mellanox.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org Ck9uIDExLzEyLzIwMTkgODoyMiBQTSwgU2FnaSBHcmltYmVyZyB3cm90ZToKPgo+Cj4gT24gMTEv NS8xOSA4OjIwIEFNLCBNYXggR3VydG92b3kgd3JvdGU6Cj4+IEZvciBjYXBhYmxlIEhDQXMgKGUu Zy4gQ29ubmVjdFgtNC9Db25uZWN0WC01KSB0aGlzIHdpbGwgYWxsb3cgZW5kLXRvLWVuZAo+PiBw cm90ZWN0aW9uIGluZm9ybWF0aW9uIHBhc3N0aHJvdWdoIGFuZCB2YWxpZGF0aW9uIGZvciBOVk1l IG92ZXIgUkRNQQo+PiB0cmFuc3BvcnQuIE1ldGFkYXRhIG9mZmxvYWQgc3VwcG9ydCB3YXMgaW1w bGVtZW50ZWQgb3ZlciB0aGUgbmV3IFJETUEKPj4gc2lnbmF0dXJlIHZlcmJzIEFQSSBhbmQgaXQg aXMgZW5hYmxlZCBwZXIgY29udHJvbGxlciBieSB1c2luZyBudm1lLWNsaS4KPj4KPj4gdXNhZ2Ug ZXhhbXBsZToKPj4gbnZtZSBjb25uZWN0IC0tcGlfZW5hYmxlIC0tdHJhbnNwb3J0PXJkbWEgLS10 cmFkZHI9MTAuMC4xLjEgCj4+IC0tbnFuPXRlc3QtbnZtZQo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBN YXggR3VydG92b3kgPG1heGdAbWVsbGFub3guY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBJc3JhZWwg UnVrc2hpbiA8aXNyYWVsckBtZWxsYW5veC5jb20+Cj4+IC0tLQo+PiDCoCBkcml2ZXJzL252bWUv aG9zdC9yZG1hLmMgfCAzNDYgCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0tCj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAyOTggaW5zZXJ0aW9ucygrKSwgNDgg ZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMg Yi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMKPj4gaW5kZXggMDVmMmRmYS4uMTYyNjNiOCAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jCj4+ICsrKyBiL2RyaXZlcnMvbnZt ZS9ob3N0L3JkbWEuYwo+PiBAQCAtNDgsNiArNDgsMTIgQEAgc3RydWN0IG52bWVfcmRtYV9xZSB7 Cj4+IMKgwqDCoMKgwqAgdTY0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWE7Cj4+IMKgIH07Cj4+ IMKgICtzdHJ1Y3QgbnZtZV9yZG1hX3NnbCB7Cj4+ICvCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBuZW50czsKPj4gK8KgwqDCoCBzdHJ1Y3Qgc2dfdGFibGXCoMKgwqDCoMKgwqDCoCBz Z190YWJsZTsKPj4gK8KgwqDCoCBzdHJ1Y3Qgc2NhdHRlcmxpc3TCoMKgwqAgZmlyc3Rfc2dsW1NH X0NIVU5LX1NJWkVdOwo+PiArfTsKPgo+IEhvdyBhYm91dCB3ZSBkeW5hbWljYWxseSBhbGxvY2F0 ZSB0aGlzIGluIG52bWVfcmRtYV9pbml0X3JlcXVlc3QgKHdpdGgKPiBhIHByZXAgcGF0Y2ggZm9y IGl0KT8gYm90aCBmb3IgcGkgYW5kIGRhdGEsIHRoaXMgaXMgZ2V0dGluZyBxdWl0ZQo+IGxhcmdl Li4uCj4KPj4gKwo+PiDCoCBzdHJ1Y3QgbnZtZV9yZG1hX3F1ZXVlOwo+PiDCoCBzdHJ1Y3QgbnZt ZV9yZG1hX3JlcXVlc3Qgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBudm1lX3JlcXVlc3TCoMKgwqAg cmVxOwo+PiBAQCAtNTgsMTIgKzY0LDE0IEBAIHN0cnVjdCBudm1lX3JkbWFfcmVxdWVzdCB7Cj4+ IMKgwqDCoMKgwqAgcmVmY291bnRfdMKgwqDCoMKgwqDCoMKgIHJlZjsKPj4gwqDCoMKgwqDCoCBz dHJ1Y3QgaWJfc2dlwqDCoMKgwqDCoMKgwqAgc2dlWzEgKyBOVk1FX1JETUFfTUFYX0lOTElORV9T RUdNRU5UU107Cj4+IMKgwqDCoMKgwqAgdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBudW1fc2dl Owo+PiAtwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmVudHM7Cj4+IMKgwqDCoMKg wqAgc3RydWN0IGliX3JlZ193csKgwqDCoCByZWdfd3I7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGli X2NxZcKgwqDCoMKgwqDCoMKgIHJlZ19jcWU7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IG52bWVfcmRt YV9xdWV1ZcKgICpxdWV1ZTsKPj4gLcKgwqDCoCBzdHJ1Y3Qgc2dfdGFibGXCoMKgwqDCoMKgwqDC oCBzZ190YWJsZTsKPj4gLcKgwqDCoCBzdHJ1Y3Qgc2NhdHRlcmxpc3TCoMKgwqAgZmlyc3Rfc2ds W107Cj4+ICvCoMKgwqAgLyogVDEwLVBJIHN1cHBvcnQgKi8KPj4gK8KgwqDCoCBib29swqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpc19wcm90ZWN0ZWQ7Cj4+ICsKPj4gK8KgwqDCoCBzdHJ1Y3QgbnZt ZV9yZG1hX3NnbMKgwqDCoCBkYXRhX3NnbDsKPj4gK8KgwqDCoCBzdHJ1Y3QgbnZtZV9yZG1hX3Nn bMKgwqDCoCBwaV9zZ2xbXTsKPj4gwqAgfTsKPj4gwqAgwqAgZW51bSBudm1lX3JkbWFfcXVldWVf ZmxhZ3Mgewo+PiBAQCAtODUsNiArOTMsNyBAQCBzdHJ1Y3QgbnZtZV9yZG1hX3F1ZXVlIHsKPj4g wqDCoMKgwqDCoCBzdHJ1Y3QgcmRtYV9jbV9pZMKgwqDCoCAqY21faWQ7Cj4+IMKgwqDCoMKgwqAg aW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjbV9lcnJvcjsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qg Y29tcGxldGlvbsKgwqDCoCBjbV9kb25lOwo+PiArwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBpX3N1cHBvcnQ7Cj4KPiBBbnkgc3BlY2lmaWMgcmVhc29uIGZvciB0aGUgcXVldWUg bG9jYWwgcGlfc3VwcG9ydD8KPgo+PiDCoCB9Owo+PiDCoCDCoCBzdHJ1Y3QgbnZtZV9yZG1hX2N0 cmwgewo+PiBAQCAtMTEyLDYgKzEyMSw3IEBAIHN0cnVjdCBudm1lX3JkbWFfY3RybCB7Cj4+IMKg wqDCoMKgwqAgc3RydWN0IG52bWVfY3RybMKgwqDCoCBjdHJsOwo+PiDCoMKgwqDCoMKgIGJvb2zC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVzZV9pbmxpbmVfZGF0YTsKPj4gwqDCoMKgwqDCoCB1MzLC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlvX3F1ZXVlc1tIQ1RYX01BWF9UWVBFU107Cj4+ICvCoMKg wqAgYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGlfc3VwcG9ydDsKPj4gwqAgfTsKPj4gwqAg wqAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV9yZG1hX2N0cmwgKnRvX3JkbWFfY3RybChzdHJ1 Y3QgCj4+IG52bWVfY3RybCAqY3RybCkKPj4gQEAgLTI2OSw2ICsyNzksOCBAQCBzdGF0aWMgaW50 IG52bWVfcmRtYV9jcmVhdGVfcXAoc3RydWN0IAo+PiBudm1lX3JkbWFfcXVldWUgKnF1ZXVlLCBj b25zdCBpbnQgZmFjdG9yKQo+PiDCoMKgwqDCoMKgIGluaXRfYXR0ci5xcF90eXBlID0gSUJfUVBU X1JDOwo+PiDCoMKgwqDCoMKgIGluaXRfYXR0ci5zZW5kX2NxID0gcXVldWUtPmliX2NxOwo+PiDC oMKgwqDCoMKgIGluaXRfYXR0ci5yZWN2X2NxID0gcXVldWUtPmliX2NxOwo+PiArwqDCoMKgIGlm IChxdWV1ZS0+cGlfc3VwcG9ydCkKPj4gK8KgwqDCoMKgwqDCoMKgIGluaXRfYXR0ci5jcmVhdGVf ZmxhZ3MgfD0gSUJfUVBfQ1JFQVRFX0lOVEVHUklUWV9FTjsKPj4gwqAgwqDCoMKgwqDCoCByZXQg PSByZG1hX2NyZWF0ZV9xcChxdWV1ZS0+Y21faWQsIGRldi0+cGQsICZpbml0X2F0dHIpOwo+PiDC oCBAQCAtNDA4LDYgKzQyMCw4IEBAIHN0YXRpYyB2b2lkIG52bWVfcmRtYV9kZXN0cm95X3F1ZXVl X2liKHN0cnVjdCAKPj4gbnZtZV9yZG1hX3F1ZXVlICpxdWV1ZSkKPj4gwqDCoMKgwqDCoCBkZXYg PSBxdWV1ZS0+ZGV2aWNlOwo+PiDCoMKgwqDCoMKgIGliZGV2ID0gZGV2LT5kZXY7Cj4+IMKgICvC oMKgwqAgaWYgKHF1ZXVlLT5waV9zdXBwb3J0KQo+PiArwqDCoMKgwqDCoMKgwqAgaWJfbXJfcG9v bF9kZXN0cm95KHF1ZXVlLT5xcCwgJnF1ZXVlLT5xcC0+c2lnX21ycyk7Cj4+IMKgwqDCoMKgwqAg aWJfbXJfcG9vbF9kZXN0cm95KHF1ZXVlLT5xcCwgJnF1ZXVlLT5xcC0+cmRtYV9tcnMpOwo+PiDC oCDCoMKgwqDCoMKgIC8qCj4+IEBAIC00MjQsMTAgKzQzOCwxNCBAQCBzdGF0aWMgdm9pZCBudm1l X3JkbWFfZGVzdHJveV9xdWV1ZV9pYihzdHJ1Y3QgCj4+IG52bWVfcmRtYV9xdWV1ZSAqcXVldWUp Cj4+IMKgwqDCoMKgwqAgbnZtZV9yZG1hX2Rldl9wdXQoZGV2KTsKPj4gwqAgfQo+PiDCoCAtc3Rh dGljIGludCBudm1lX3JkbWFfZ2V0X21heF9mcl9wYWdlcyhzdHJ1Y3QgaWJfZGV2aWNlICppYmRl dikKPj4gK3N0YXRpYyBpbnQgbnZtZV9yZG1hX2dldF9tYXhfZnJfcGFnZXMoc3RydWN0IGliX2Rl dmljZSAqaWJkZXYsIGJvb2wgCj4+IHBpX3N1cHBvcnQpCj4+IMKgIHsKPj4gLcKgwqDCoCByZXR1 cm4gbWluX3QodTMyLCBOVk1FX1JETUFfTUFYX1NFR01FTlRTLAo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGliZGV2LT5hdHRycy5tYXhfZmFzdF9yZWdfcGFnZV9saXN0X2xlbiAtIDEpOwo+ PiArwqDCoMKgIGlmIChwaV9zdXBwb3J0KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIG1pbl90 KHUzMiwgTlZNRV9SRE1BX01BWF9TRUdNRU5UUywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGliZGV2LT5hdHRycy5tYXhfcGlfZmFzdF9yZWdfcGFnZV9saXN0X2xlbiAtIDEp Owo+PiArwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBtaW5fdCh1MzIsIE5W TUVfUkRNQV9NQVhfU0VHTUVOVFMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpYmRldi0+YXR0cnMubWF4X2Zhc3RfcmVnX3BhZ2VfbGlzdF9sZW4gLSAxKTsKPj4gwqAgfQo+ Cj4gTWF5YmUganVzdCB0YWtlIHRoZSBtYXhfcGFnZV9saXN0X2xlbiBvbiB0aGUgY29uZGl0aW9u IGFuZCB0YWtlIHRoZSAKPiBtaW4gb25jZS4KPgo+PiDCoCDCoCBzdGF0aWMgaW50IG52bWVfcmRt YV9jcmVhdGVfcXVldWVfaWIoc3RydWN0IG52bWVfcmRtYV9xdWV1ZSAqcXVldWUpCj4+IEBAIC00 ODQsNyArNTAyLDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfY3JlYXRlX3F1ZXVlX2liKHN0cnVj dCAKPj4gbnZtZV9yZG1hX3F1ZXVlICpxdWV1ZSkKPj4gwqDCoMKgwqDCoMKgICogbWlzYWxpZ25l ZCB3ZSdsbCBlbmQgdXAgdXNpbmcgdHdvIGVudHJpZXMgZm9yIGEgc2luZ2xlIGRhdGEgCj4+IHBh Z2UsCj4+IMKgwqDCoMKgwqDCoCAqIHNvIG9uZSBhZGRpdGlvbmFsIGVudHJ5IGlzIHJlcXVpcmVk Lgo+PiDCoMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDCoCBwYWdlc19wZXJfbXIgPSBudm1lX3JkbWFf Z2V0X21heF9mcl9wYWdlcyhpYmRldikgKyAxOwo+PiArwqDCoMKgIHBhZ2VzX3Blcl9tciA9IG52 bWVfcmRtYV9nZXRfbWF4X2ZyX3BhZ2VzKGliZGV2LCAKPj4gcXVldWUtPnBpX3N1cHBvcnQpICsg MTsKPj4gwqDCoMKgwqDCoCByZXQgPSBpYl9tcl9wb29sX2luaXQocXVldWUtPnFwLCAmcXVldWUt PnFwLT5yZG1hX21ycywKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cXVldWUtPnF1ZXVlX3NpemUsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIElCX01SX1RZUEVfTUVNX1JFRywKPj4gQEAgLTQ5NiwxMCArNTE0LDI0IEBAIHN0YXRpYyBp bnQgbnZtZV9yZG1hX2NyZWF0ZV9xdWV1ZV9pYihzdHJ1Y3QgCj4+IG52bWVfcmRtYV9xdWV1ZSAq cXVldWUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF9kZXN0cm95X3Jpbmc7Cj4+IMKg wqDCoMKgwqAgfQo+PiDCoCArwqDCoMKgIGlmIChxdWV1ZS0+cGlfc3VwcG9ydCkgewo+PiArwqDC oMKgwqDCoMKgwqAgcmV0ID0gaWJfbXJfcG9vbF9pbml0KHF1ZXVlLT5xcCwgJnF1ZXVlLT5xcC0+ c2lnX21ycywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBx dWV1ZS0+cXVldWVfc2l6ZSwgSUJfTVJfVFlQRV9JTlRFR1JJVFksCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFnZXNfcGVyX21yLCBwYWdlc19wZXJfbXIp Owo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkZXZfZXJyKHF1ZXVlLT5jdHJsLT5jdHJsLmRldmljZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAiZmFpbGVkIHRvIGluaXRpYWxpemUgUEkgTVIgcG9vbCBzaXplZCAlZCBm b3IgUUlEIAo+PiAlZFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBxdWV1 ZS0+cXVldWVfc2l6ZSwgaWR4KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRf ZGVzdHJveV9tcl9wb29sOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIH0KPj4gKwo+ PiDCoMKgwqDCoMKgIHNldF9iaXQoTlZNRV9SRE1BX1FfVFJfUkVBRFksICZxdWV1ZS0+ZmxhZ3Mp Owo+PiDCoCDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiDCoCArb3V0X2Rlc3Ryb3lfbXJfcG9vbDoK Pj4gK8KgwqDCoCBpYl9tcl9wb29sX2Rlc3Ryb3kocXVldWUtPnFwLCAmcXVldWUtPnFwLT5yZG1h X21ycyk7Cj4+IMKgIG91dF9kZXN0cm95X3Jpbmc6Cj4+IMKgwqDCoMKgwqAgbnZtZV9yZG1hX2Zy ZWVfcmluZyhpYmRldiwgcXVldWUtPnJzcF9yaW5nLCBxdWV1ZS0+cXVldWVfc2l6ZSwKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yoc3RydWN0IG52bWVfY29tcGxl dGlvbiksIERNQV9GUk9NX0RFVklDRSk7Cj4+IEBAIC01MjEsNiArNTUzLDcgQEAgc3RhdGljIGlu dCBudm1lX3JkbWFfYWxsb2NfcXVldWUoc3RydWN0IAo+PiBudm1lX3JkbWFfY3RybCAqY3RybCwK Pj4gwqAgwqDCoMKgwqDCoCBxdWV1ZSA9ICZjdHJsLT5xdWV1ZXNbaWR4XTsKPj4gwqDCoMKgwqDC oCBxdWV1ZS0+Y3RybCA9IGN0cmw7Cj4+ICvCoMKgwqAgcXVldWUtPnBpX3N1cHBvcnQgPSBpZHgg JiYgY3RybC0+cGlfc3VwcG9ydDsKPgo+IFRoYXRzIHdoeS4uCj4KPj4gaW5pdF9jb21wbGV0aW9u KCZxdWV1ZS0+Y21fZG9uZSk7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKGlkeCA+IDApCj4+IEBAIC03 MzAsOCArNzYzLDcgQEAgc3RhdGljIHN0cnVjdCBibGtfbXFfdGFnX3NldCAKPj4gKm52bWVfcmRt YV9hbGxvY190YWdzZXQoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBzZXQtPnF1ZXVlX2RlcHRoID0gTlZNRV9BUV9NUV9UQUdfREVQVEg7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBzZXQtPnJlc2VydmVkX3RhZ3MgPSAyOyAvKiBjb25uZWN0ICsga2VlcC1hbGl2 ZSAqLwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0LT5udW1hX25vZGUgPSBuY3RybC0+bnVtYV9u b2RlOwo+PiAtwqDCoMKgwqDCoMKgwqAgc2V0LT5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnZt ZV9yZG1hX3JlcXVlc3QpICsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU0dfQ0hVTktfU0la RSAqIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpOwo+PiArwqDCoMKgwqDCoMKgwqAgc2V0LT5j bWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QpOwo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgc2V0LT5kcml2ZXJfZGF0YSA9IGN0cmw7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBz ZXQtPm5yX2h3X3F1ZXVlcyA9IDE7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXQtPnRpbWVvdXQg PSBBRE1JTl9USU1FT1VUOwo+PiBAQCAtNzQ1LDcgKzc3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYmxr X21xX3RhZ19zZXQgCj4+ICpudm1lX3JkbWFfYWxsb2NfdGFnc2V0KHN0cnVjdCBudm1lX2N0cmwg Km5jdHJsLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0LT5udW1hX25vZGUgPSBuY3RybC0+bnVt YV9ub2RlOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0LT5mbGFncyA9IEJMS19NUV9GX1NIT1VM RF9NRVJHRTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNldC0+Y21kX3NpemUgPSBzaXplb2Yoc3Ry dWN0IG52bWVfcmRtYV9yZXF1ZXN0KSArCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNHX0NI VU5LX1NJWkUgKiBzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKGN0cmwtPnBpX3N1cHBvcnQgKiBzaXplb2Yoc3RydWN0IG52bWVfcmRtYV9zZ2wp KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNldC0+ZHJpdmVyX2RhdGEgPSBjdHJsOwo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgc2V0LT5ucl9od19xdWV1ZXMgPSBuY3RybC0+cXVldWVfY291bnQgLSAx Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0LT50aW1lb3V0ID0gTlZNRV9JT19USU1FT1VUOwo+ PiBAQCAtNzg3LDcgKzgxOSwyMiBAQCBzdGF0aWMgaW50IAo+PiBudm1lX3JkbWFfY29uZmlndXJl X2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX3JkbWFfY3RybCAqY3RybCwKPj4gwqDCoMKgwqDCoCBj dHJsLT5kZXZpY2UgPSBjdHJsLT5xdWV1ZXNbMF0uZGV2aWNlOwo+PiDCoMKgwqDCoMKgIGN0cmwt PmN0cmwubnVtYV9ub2RlID0gZGV2X3RvX25vZGUoY3RybC0+ZGV2aWNlLT5kZXYtPmRtYV9kZXZp Y2UpOwo+PiDCoCAtwqDCoMKgIGN0cmwtPm1heF9mcl9wYWdlcyA9IAo+PiBudm1lX3JkbWFfZ2V0 X21heF9mcl9wYWdlcyhjdHJsLT5kZXZpY2UtPmRldik7Cj4+ICvCoMKgwqAgLyogVDEwLVBJIHN1 cHBvcnQgKi8KPj4gK8KgwqDCoCBpZiAoY3RybC0+Y3RybC5vcHRzLT5waV9lbmFibGUpIHsKPj4g K8KgwqDCoMKgwqDCoMKgIGlmICghKGN0cmwtPmRldmljZS0+ZGV2LT5hdHRycy5kZXZpY2VfY2Fw X2ZsYWdzICYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElCX0RFVklDRV9JTlRFR1JJ VFlfSEFORE9WRVIpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl93YXJuKGN0cmwt PmN0cmwuZGV2aWNlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlQxMC1Q SSByZXF1ZXN0ZWQgYnV0IG5vdCBzdXBwb3J0ZWQgb24gJXMsIGNvbnRpbnVlIAo+PiB3aXRob3V0 IFQxMC1QSVxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0cmwtPmRl dmljZS0+ZGV2LT5uYW1lKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3RybC0+cGlfc3Vw cG9ydCA9IGZhbHNlOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHJsLT5jdHJsLm9wdHMt PnBpX2VuYWJsZSA9IGZhbHNlOwo+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY3RybC0+cGlfc3VwcG9ydCA9IHRydWU7Cj4+ICvCoMKgwqDCoMKg wqDCoCB9Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgY3RybC0+bWF4X2ZyX3BhZ2VzID0g bnZtZV9yZG1hX2dldF9tYXhfZnJfcGFnZXMoY3RybC0+ZGV2aWNlLT5kZXYsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3RybC0+cGlf c3VwcG9ydCk7Cj4+IMKgIMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgICogQmluZCB0aGUg YXN5bmMgZXZlbnQgU1FFIERNQSBtYXBwaW5nIHRvIHRoZSBhZG1pbiBxdWV1ZSAKPj4gbGlmZXRp bWUuCj4+IEBAIC04MjksNiArODc2LDggQEAgc3RhdGljIGludCBudm1lX3JkbWFfY29uZmlndXJl X2FkbWluX3F1ZXVlKHN0cnVjdCAKPj4gbnZtZV9yZG1hX2N0cmwgKmN0cmwsCj4+IMKgIMKgwqDC oMKgwqAgY3RybC0+Y3RybC5tYXhfc2VnbWVudHMgPSBjdHJsLT5tYXhfZnJfcGFnZXM7Cj4+IMKg wqDCoMKgwqAgY3RybC0+Y3RybC5tYXhfaHdfc2VjdG9ycyA9IGN0cmwtPm1heF9mcl9wYWdlcyA8 PCAoaWxvZzIoU1pfNEspIAo+PiAtIDkpOwo+PiArwqDCoMKgIGlmIChjdHJsLT5waV9zdXBwb3J0 KQo+PiArwqDCoMKgwqDCoMKgwqAgY3RybC0+Y3RybC5tYXhfaW50ZWdyaXR5X3NlZ21lbnRzID0g Y3RybC0+bWF4X2ZyX3BhZ2VzOwo+PiDCoCDCoMKgwqDCoMKgIGJsa19tcV91bnF1aWVzY2VfcXVl dWUoY3RybC0+Y3RybC5hZG1pbl9xKTsKPj4gwqAgQEAgLTExNTQsMTMgKzEyMDMsMjQgQEAgc3Rh dGljIHZvaWQgbnZtZV9yZG1hX3VubWFwX2RhdGEoc3RydWN0IAo+PiBudm1lX3JkbWFfcXVldWUg KnF1ZXVlLAo+PiDCoMKgwqDCoMKgIGlmICghYmxrX3JxX25yX3BoeXNfc2VnbWVudHMocnEpKQo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiDCoCArwqDCoMKgIGlmIChibGtfaW50ZWdy aXR5X3JxKHJxKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgaWJfZG1hX3VubWFwX3NnKGliZGV2LCBy ZXEtPnBpX3NnbC0+c2dfdGFibGUuc2dsLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXEt PnBpX3NnbC0+bmVudHMsIHJxX2RtYV9kaXIocnEpKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHNnX2Zy ZWVfdGFibGVfY2hhaW5lZCgmcmVxLT5waV9zZ2wtPnNnX3RhYmxlLCBTR19DSFVOS19TSVpFKTsK Pj4gK8KgwqDCoCB9Cj4+ICsKPj4gwqDCoMKgwqDCoCBpZiAocmVxLT5tcikgewo+PiAtwqDCoMKg wqDCoMKgwqAgaWJfbXJfcG9vbF9wdXQocXVldWUtPnFwLCAmcXVldWUtPnFwLT5yZG1hX21ycywg cmVxLT5tcik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmVxLT5pc19wcm90ZWN0ZWQpCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGliX21yX3Bvb2xfcHV0KHF1ZXVlLT5xcCwgJnF1ZXVlLT5x cC0+c2lnX21ycywgcmVxLT5tcik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGliX21yX3Bvb2xfcHV0KHF1ZXVlLT5xcCwgJnF1ZXVlLT5xcC0+cmRt YV9tcnMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXEtPm1yKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS0+bXIgPSBOVUxMOwo+PiDCoMKgwqDC oMKgIH0KPj4gwqAgLcKgwqDCoCBpYl9kbWFfdW5tYXBfc2coaWJkZXYsIHJlcS0+c2dfdGFibGUu c2dsLCByZXEtPm5lbnRzLCAKPj4gcnFfZG1hX2RpcihycSkpOwo+PiAtwqDCoMKgIHNnX2ZyZWVf dGFibGVfY2hhaW5lZCgmcmVxLT5zZ190YWJsZSwgU0dfQ0hVTktfU0laRSk7Cj4+ICvCoMKgwqAg aWJfZG1hX3VubWFwX3NnKGliZGV2LCByZXEtPmRhdGFfc2dsLnNnX3RhYmxlLnNnbCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxLT5kYXRhX3NnbC5uZW50cywgcnFfZG1hX2RpcihycSkp Owo+PiArwqDCoMKgIHNnX2ZyZWVfdGFibGVfY2hhaW5lZCgmcmVxLT5kYXRhX3NnbC5zZ190YWJs ZSwgU0dfQ0hVTktfU0laRSk7Cj4+IMKgIH0KPj4gwqAgwqAgc3RhdGljIGludCBudm1lX3JkbWFf c2V0X3NnX251bGwoc3RydWN0IG52bWVfY29tbWFuZCAqYykKPj4gQEAgLTExNzksNyArMTIzOSw3 IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX21hcF9zZ19pbmxpbmUoc3RydWN0IAo+PiBudm1lX3Jk bWFfcXVldWUgKnF1ZXVlLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGNvdW50KQo+PiDCoCB7 Cj4+IMKgwqDCoMKgwqAgc3RydWN0IG52bWVfc2dsX2Rlc2MgKnNnID0gJmMtPmNvbW1vbi5kcHRy LnNnbDsKPj4gLcKgwqDCoCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCA9IHJlcS0+c2dfdGFibGUu c2dsOwo+PiArwqDCoMKgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsID0gcmVxLT5kYXRhX3NnbC5z Z190YWJsZS5zZ2w7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGliX3NnZSAqc2dlID0gJnJlcS0+c2dl WzFdOwo+PiDCoMKgwqDCoMKgIHUzMiBsZW4gPSAwOwo+PiDCoMKgwqDCoMKgIGludCBpOwo+PiBA QCAtMTIwNCw0MCArMTI2NCwxMTUgQEAgc3RhdGljIGludCBudm1lX3JkbWFfbWFwX3NnX3Npbmds ZShzdHJ1Y3QgCj4+IG52bWVfcmRtYV9xdWV1ZSAqcXVldWUsCj4+IMKgIHsKPj4gwqDCoMKgwqDC oCBzdHJ1Y3QgbnZtZV9rZXllZF9zZ2xfZGVzYyAqc2cgPSAmYy0+Y29tbW9uLmRwdHIua3NnbDsK Pj4gwqAgLcKgwqDCoCBzZy0+YWRkciA9IGNwdV90b19sZTY0KHNnX2RtYV9hZGRyZXNzKHJlcS0+ c2dfdGFibGUuc2dsKSk7Cj4+IC3CoMKgwqAgcHV0X3VuYWxpZ25lZF9sZTI0KHNnX2RtYV9sZW4o cmVxLT5zZ190YWJsZS5zZ2wpLCBzZy0+bGVuZ3RoKTsKPj4gK8KgwqDCoCBzZy0+YWRkciA9IGNw dV90b19sZTY0KHNnX2RtYV9hZGRyZXNzKHJlcS0+ZGF0YV9zZ2wuc2dfdGFibGUuc2dsKSk7Cj4+ ICsgcHV0X3VuYWxpZ25lZF9sZTI0KHNnX2RtYV9sZW4ocmVxLT5kYXRhX3NnbC5zZ190YWJsZS5z Z2wpLCAKPj4gc2ctPmxlbmd0aCk7Cj4+IHB1dF91bmFsaWduZWRfbGUzMihxdWV1ZS0+ZGV2aWNl LT5wZC0+dW5zYWZlX2dsb2JhbF9ya2V5LCBzZy0+a2V5KTsKPj4gwqDCoMKgwqDCoCBzZy0+dHlw ZSA9IE5WTUVfS0VZX1NHTF9GTVRfREFUQV9ERVNDIDw8IDQ7Cj4+IMKgwqDCoMKgwqAgcmV0dXJu IDA7Cj4+IMKgIH0KPj4gwqAgLXN0YXRpYyBpbnQgbnZtZV9yZG1hX21hcF9zZ19mcihzdHJ1Y3Qg bnZtZV9yZG1hX3F1ZXVlICpxdWV1ZSwKPj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBudm1lX3Jk bWFfcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjLAo+PiAtwqDCoMKgwqDCoMKg wqAgaW50IGNvdW50KQo+PiArc3RhdGljIHZvaWQgbnZtZV9yZG1hX3NldF9kaWZmX2RvbWFpbihz dHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsIAo+PiBzdHJ1Y3QgYmlvICpiaW8sCj4+ICvCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgaWJfc2lnX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgcmVxdWVzdCAqcnEp Cj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgbnZtZV9rZXllZF9zZ2xfZGVzYyAqc2cgPSAmYy0+ Y29tbW9uLmRwdHIua3NnbDsKPj4gLcKgwqDCoCBpbnQgbnI7Cj4+ICvCoMKgwqAgc3RydWN0IGJs a19pbnRlZ3JpdHkgKmJpID0gYmxrX2dldF9pbnRlZ3JpdHkoYmlvLT5iaV9kaXNrKTsKPj4gK8Kg wqDCoCBzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBycS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwo+PiDC oCAtwqDCoMKgIHJlcS0+bXIgPSBpYl9tcl9wb29sX2dldChxdWV1ZS0+cXAsICZxdWV1ZS0+cXAt PnJkbWFfbXJzKTsKPj4gLcKgwqDCoCBpZiAoV0FSTl9PTl9PTkNFKCFyZXEtPm1yKSkKPj4gLcKg wqDCoMKgwqDCoMKgIHJldHVybiAtRUFHQUlOOwo+PiArwqDCoMKgIFdBUk5fT04oYmkgPT0gTlVM TCk7Cj4+ICsKPj4gK8KgwqDCoCBkb21haW4tPnNpZ190eXBlID0gSUJfU0lHX1RZUEVfVDEwX0RJ RjsKPj4gK8KgwqDCoCBkb21haW4tPnNpZy5kaWYuYmdfdHlwZSA9IElCX1QxMERJRl9DUkM7Cj4+ ICvCoMKgwqAgZG9tYWluLT5zaWcuZGlmLnBpX2ludGVydmFsID0gMSA8PCBiaS0+aW50ZXJ2YWxf ZXhwOwo+PiArwqDCoMKgIGRvbWFpbi0+c2lnLmRpZi5yZWZfdGFnID0gbGUzMl90b19jcHUoY21k LT5ydy5yZWZ0YWcpOwo+PiDCoCDCoMKgwqDCoMKgIC8qCj4+IC3CoMKgwqDCoCAqIEFsaWduIHRo ZSBNUiB0byBhIDRLIHBhZ2Ugc2l6ZSB0byBtYXRjaCB0aGUgY3RybCBwYWdlIHNpemUgYW5kCj4+ IC3CoMKgwqDCoCAqIHRoZSBibG9jayB2aXJ0dWFsIGJvdW5kYXJ5Lgo+PiArwqDCoMKgwqAgKiBB dCB0aGUgbW9tZW50IHdlIGhhcmQgY29kZSB0aG9zZSwgYnV0IGluIHRoZSBmdXR1cmUKPj4gK8Kg wqDCoMKgICogd2Ugd2lsbCB0YWtlIHRoZW0gZnJvbSBjbWQuCj4+IMKgwqDCoMKgwqDCoCAqLwo+ PiAtwqDCoMKgIG5yID0gaWJfbWFwX21yX3NnKHJlcS0+bXIsIHJlcS0+c2dfdGFibGUuc2dsLCBj b3VudCwgTlVMTCwgU1pfNEspOwo+PiAtwqDCoMKgIGlmICh1bmxpa2VseShuciA8IGNvdW50KSkg ewo+PiAtwqDCoMKgwqDCoMKgwqAgaWJfbXJfcG9vbF9wdXQocXVldWUtPnFwLCAmcXVldWUtPnFw LT5yZG1hX21ycywgcmVxLT5tcik7Cj4+IC3CoMKgwqDCoMKgwqDCoCByZXEtPm1yID0gTlVMTDsK Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChuciA8IDApCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBucjsKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKg IGRvbWFpbi0+c2lnLmRpZi5hcHB0YWdfY2hlY2tfbWFzayA9IDB4ZmZmZjsKPj4gK8KgwqDCoCBk b21haW4tPnNpZy5kaWYuYXBwX2VzY2FwZSA9IHRydWU7Cj4+ICvCoMKgwqAgZG9tYWluLT5zaWcu ZGlmLnJlZl9lc2NhcGUgPSB0cnVlOwo+PiArwqDCoMKgIGlmIChucy0+cGlfdHlwZSAhPSBOVk1F X05TX0RQU19QSV9UWVBFMykKPj4gK8KgwqDCoMKgwqDCoMKgIGRvbWFpbi0+c2lnLmRpZi5yZWZf cmVtYXAgPSB0cnVlOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBudm1lX3JkbWFfc2V0X3Np Z19hdHRycyhzdHJ1Y3QgYmlvICpiaW8sCj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaWJfc2ln X2F0dHJzICpzaWdfYXR0cnMsIHN0cnVjdCBudm1lX2NvbW1hbmQgKmMsCj4+ICvCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCj4+ICt7Cj4+ICvCoMKgwqAgdTE2IGNvbnRyb2wgPSBs ZTE2X3RvX2NwdShjLT5ydy5jb250cm9sKTsKPj4gKwo+PiArwqDCoMKgIG1lbXNldChzaWdfYXR0 cnMsIDAsIHNpemVvZigqc2lnX2F0dHJzKSk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY29udHJvbCAm IE5WTUVfUldfUFJJTkZPX1BSQUNUKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBmb3IgV1JJVEVf SU5TRVJUL1JFQURfU1RSSVAgbm8gbWVtb3J5IGRvbWFpbiAqLwo+PiArwqDCoMKgwqDCoMKgwqAg c2lnX2F0dHJzLT5tZW0uc2lnX3R5cGUgPSBJQl9TSUdfVFlQRV9OT05FOwo+PiArwqDCoMKgwqDC oMKgwqAgbnZtZV9yZG1hX3NldF9kaWZmX2RvbWFpbihjLCBiaW8sICZzaWdfYXR0cnMtPndpcmUs IHJxKTsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIENsZWFyIHRoZSBQUkFDVCBiaXQgc2luY2UgSENB IHdpbGwgZ2VuZXJhdGUvdmVyaWZ5IHRoZSBQSSAqLwo+PiArwqDCoMKgwqDCoMKgwqAgY29udHJv bCAmPSB+TlZNRV9SV19QUklORk9fUFJBQ1Q7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjLT5ydy5jb250 cm9sID0gY3B1X3RvX2xlMTYoY29udHJvbCk7Cj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4gK8KgwqDC oMKgwqDCoMKgIC8qIGZvciBXUklURV9QQVNTL1JFQURfUEFTUyBib3RoIHdpcmUvbWVtb3J5IGRv bWFpbnMgZXhpc3QgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIG52bWVfcmRtYV9zZXRfZGlmZl9kb21h aW4oYywgYmlvLCAmc2lnX2F0dHJzLT53aXJlLCBycSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBudm1l X3JkbWFfc2V0X2RpZmZfZG9tYWluKGMsIGJpbywgJnNpZ19hdHRycy0+bWVtLCBycSk7Cj4+IMKg wqDCoMKgwqAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBudm1lX3JkbWFfc2V0X3Byb3Rf Y2hlY2tzKHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtZCwgdTggCj4+ICptYXNrKQo+PiArewo+PiAr wqDCoMKgICptYXNrID0gMDsKPj4gK8KgwqDCoCBpZiAobGUxNl90b19jcHUoY21kLT5ydy5jb250 cm9sKSAmIE5WTUVfUldfUFJJTkZPX1BSQ0hLX1JFRikKPj4gK8KgwqDCoMKgwqDCoMKgICptYXNr IHw9IElCX1NJR19DSEVDS19SRUZUQUc7Cj4+ICvCoMKgwqAgaWYgKGxlMTZfdG9fY3B1KGNtZC0+ cncuY29udHJvbCkgJiBOVk1FX1JXX1BSSU5GT19QUkNIS19HVUFSRCkKPj4gK8KgwqDCoMKgwqDC oMKgICptYXNrIHw9IElCX1NJR19DSEVDS19HVUFSRDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgbnZtZV9yZG1hX3NpZ19kb25lKHN0cnVjdCBpYl9jcSAqY3EsIHN0cnVjdCBpYl93YyAqd2Mp Cj4+ICt7Cj4+ICvCoMKgwqAgaWYgKHVubGlrZWx5KHdjLT5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VT UykpCj4+ICvCoMKgwqDCoMKgwqDCoCBudm1lX3JkbWFfd3JfZXJyb3IoY3EsIHdjLCAiU0lHIik7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIG52bWVfcmRtYV9zZXRfcGlfd3Ioc3RydWN0IG52 bWVfcmRtYV9yZXF1ZXN0ICpyZXEsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IG52bWVfY29tbWFuZCAqYykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaWJfc2lnX2F0 dHJzICpzaWdfYXR0cnMgPSByZXEtPm1yLT5zaWdfYXR0cnM7Cj4+ICvCoMKgwqAgc3RydWN0IGli X3JlZ193ciAqd3IgPSAmcmVxLT5yZWdfd3I7Cj4+ICvCoMKgwqAgc3RydWN0IHJlcXVlc3QgKnJx ID0gYmxrX21xX3JxX2Zyb21fcGR1KHJlcSk7Cj4+ICvCoMKgwqAgc3RydWN0IGJpbyAqYmlvID0g cnEtPmJpbzsKPj4gK8KgwqDCoCBzdHJ1Y3QgbnZtZV9rZXllZF9zZ2xfZGVzYyAqc2cgPSAmYy0+ Y29tbW9uLmRwdHIua3NnbDsKPj4gKwo+PiArwqDCoMKgIG52bWVfcmRtYV9zZXRfc2lnX2F0dHJz KGJpbywgc2lnX2F0dHJzLCBjLCBycSk7Cj4+ICsKPj4gK8KgwqDCoCBudm1lX3JkbWFfc2V0X3By b3RfY2hlY2tzKGMsICZzaWdfYXR0cnMtPmNoZWNrX21hc2spOwo+PiDCoCDCoMKgwqDCoMKgIGli X3VwZGF0ZV9mYXN0X3JlZ19rZXkocmVxLT5tciwgaWJfaW5jX3JrZXkocmVxLT5tci0+cmtleSkp Owo+PiDCoCArwqDCoMKgIHJlcS0+cmVnX2NxZS5kb25lID0gbnZtZV9yZG1hX3NpZ19kb25lOwo+ PiArCj4+ICvCoMKgwqAgbWVtc2V0KHdyLCAwLCBzaXplb2YoKndyKSk7Cj4+ICvCoMKgwqAgd3It PndyLm9wY29kZSA9IElCX1dSX1JFR19NUl9JTlRFR1JJVFk7Cj4+ICvCoMKgwqAgd3ItPndyLndy X2NxZSA9ICZyZXEtPnJlZ19jcWU7Cj4+ICvCoMKgwqAgd3ItPndyLm51bV9zZ2UgPSAwOwo+PiAr wqDCoMKgIHdyLT53ci5zZW5kX2ZsYWdzID0gMDsKPj4gK8KgwqDCoCB3ci0+bXIgPSByZXEtPm1y Owo+PiArwqDCoMKgIHdyLT5rZXkgPSByZXEtPm1yLT5ya2V5Owo+PiArwqDCoMKgIHdyLT5hY2Nl c3MgPSBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IElCX0FDQ0VTU19SRU1PVEVfUkVBRCB8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSUJf QUNDRVNTX1JFTU9URV9XUklURTsKPj4gKwo+PiArwqDCoMKgIHNnLT5hZGRyID0gY3B1X3RvX2xl NjQocmVxLT5tci0+aW92YSk7Cj4+ICvCoMKgwqAgcHV0X3VuYWxpZ25lZF9sZTI0KHJlcS0+bXIt Pmxlbmd0aCwgc2ctPmxlbmd0aCk7Cj4+ICvCoMKgwqAgcHV0X3VuYWxpZ25lZF9sZTMyKHJlcS0+ bXItPnJrZXksIHNnLT5rZXkpOwo+PiArwqDCoMKgIHNnLT50eXBlID0gKE5WTUVfS0VZX1NHTF9G TVRfREFUQV9ERVNDIDw8IDQpIHwgCj4+IE5WTUVfU0dMX0ZNVF9JTlZBTElEQVRFOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCBudm1lX3JkbWFfc2V0X3JlZ193cihzdHJ1Y3QgbnZtZV9yZG1h X3JlcXVlc3QgKnJlcSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBudm1lX2NvbW1hbmQgKmMpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IG52bWVfa2V5ZWRfc2ds X2Rlc2MgKnNnID0gJmMtPmNvbW1vbi5kcHRyLmtzZ2w7Cj4+ICsKPj4gwqDCoMKgwqDCoCByZXEt PnJlZ19jcWUuZG9uZSA9IG52bWVfcmRtYV9tZW1yZWdfZG9uZTsKPj4gKwo+PiDCoMKgwqDCoMKg IG1lbXNldCgmcmVxLT5yZWdfd3IsIDAsIHNpemVvZihyZXEtPnJlZ193cikpOwo+PiDCoMKgwqDC oMKgIHJlcS0+cmVnX3dyLndyLm9wY29kZSA9IElCX1dSX1JFR19NUjsKPj4gwqDCoMKgwqDCoCBy ZXEtPnJlZ193ci53ci53cl9jcWUgPSAmcmVxLT5yZWdfY3FlOwo+PiBAQCAtMTI1Myw4ICsxMzg4 LDUyIEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX21hcF9zZ19mcihzdHJ1Y3QgCj4+IG52bWVfcmRt YV9xdWV1ZSAqcXVldWUsCj4+IMKgwqDCoMKgwqAgcHV0X3VuYWxpZ25lZF9sZTMyKHJlcS0+bXIt PnJrZXksIHNnLT5rZXkpOwo+PiDCoMKgwqDCoMKgIHNnLT50eXBlID0gKE5WTUVfS0VZX1NHTF9G TVRfREFUQV9ERVNDIDw8IDQpIHwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTlZNRV9T R0xfRk1UX0lOVkFMSURBVEU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgbnZtZV9yZG1hX21h cF9zZ19mcihzdHJ1Y3QgbnZtZV9yZG1hX3F1ZXVlICpxdWV1ZSwKPj4gK8KgwqDCoMKgwqDCoMKg IHN0cnVjdCBudm1lX3JkbWFfcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjLAo+ PiArwqDCoMKgwqDCoMKgwqAgaW50IGNvdW50LCBpbnQgcGlfY291bnQpCj4+ICt7Cj4+ICvCoMKg wqAgc3RydWN0IG52bWVfcmRtYV9zZ2wgKnNnbCA9ICZyZXEtPmRhdGFfc2dsOwo+PiArwqDCoMKg IGludCBucjsKPj4gKwo+PiArwqDCoMKgIGlmIChyZXEtPmlzX3Byb3RlY3RlZCkgewo+PiArwqDC oMKgwqDCoMKgwqAgcmVxLT5tciA9IGliX21yX3Bvb2xfZ2V0KHF1ZXVlLT5xcCwgJnF1ZXVlLT5x cC0+c2lnX21ycyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoV0FSTl9PTl9PTkNFKCFyZXEtPm1y KSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FQUdBSU47Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgIG5yID0gaWJfbWFwX21yX3NnX3BpKHJlcS0+bXIsIHNnbC0+c2dfdGFibGUu c2dsLCBjb3VudCwgMCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmVxLT5waV9zZ2wtPnNnX3RhYmxlLnNnbCwgcGlfY291bnQsIDAsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNaXzRLKTsKPj4gK8KgwqDCoMKgwqDCoMKg IGlmICh1bmxpa2VseShucikpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gbXJfcHV0 Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBudm1lX3JkbWFfc2V0X3BpX3dyKHJlcSwgYyk7Cj4+ ICvCoMKgwqAgfSBlbHNlIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHJlcS0+bXIgPSBpYl9tcl9wb29s X2dldChxdWV1ZS0+cXAsICZxdWV1ZS0+cXAtPnJkbWFfbXJzKTsKPj4gK8KgwqDCoMKgwqDCoMKg IGlmIChXQVJOX09OX09OQ0UoIXJlcS0+bXIpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVBR0FJTjsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+ICvCoMKgwqDCoMKgwqDCoMKg ICogQWxpZ24gdGhlIE1SIHRvIGEgNEsgcGFnZSBzaXplIHRvIG1hdGNoIHRoZSBjdHJsIHBhZ2Ug c2l6ZQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGFuZCB0aGUgYmxvY2sgdmlydHVhbCBib3VuZGFy eS4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIG5yID0gaWJfbWFw X21yX3NnKHJlcS0+bXIsIHNnbC0+c2dfdGFibGUuc2dsLCBjb3VudCwgMCwgU1pfNEspOwo+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KG5yIDwgY291bnQpKQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIG1yX3B1dDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgbnZtZV9yZG1h X3NldF9yZWdfd3IocmVxLCBjKTsKPj4gK8KgwqDCoCB9Cj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJu IDA7Cj4+ICttcl9wdXQ6Cj4+ICvCoMKgwqAgaWYgKHJlcS0+aXNfcHJvdGVjdGVkKQo+PiArwqDC oMKgwqDCoMKgwqAgaWJfbXJfcG9vbF9wdXQocXVldWUtPnFwLCAmcXVldWUtPnFwLT5zaWdfbXJz LCByZXEtPm1yKTsKPj4gK8KgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCBpYl9tcl9wb29s X3B1dChxdWV1ZS0+cXAsICZxdWV1ZS0+cXAtPnJkbWFfbXJzLCByZXEtPm1yKTsKPj4gK8KgwqDC oCByZXEtPm1yID0gTlVMTDsKPj4gK8KgwqDCoCBpZiAobnIgPCAwKQo+PiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIG5yOwo+PiArwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiDCoCB9Cj4+IMKgIMKg IHN0YXRpYyBpbnQgbnZtZV9yZG1hX21hcF9kYXRhKHN0cnVjdCBudm1lX3JkbWFfcXVldWUgKnF1 ZXVlLAo+PiBAQCAtMTI2Myw2ICsxNDQyLDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfbWFwX2Rh dGEoc3RydWN0IAo+PiBudm1lX3JkbWFfcXVldWUgKnF1ZXVlLAo+PiDCoMKgwqDCoMKgIHN0cnVj dCBudm1lX3JkbWFfcmVxdWVzdCAqcmVxID0gYmxrX21xX3JxX3RvX3BkdShycSk7Cj4+IMKgwqDC oMKgwqAgc3RydWN0IG52bWVfcmRtYV9kZXZpY2UgKmRldiA9IHF1ZXVlLT5kZXZpY2U7Cj4+IMKg wqDCoMKgwqAgc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBkZXYtPmRldjsKPj4gK8KgwqDCoCBp bnQgcGlfY291bnQgPSAwOwo+PiDCoMKgwqDCoMKgIGludCBjb3VudCwgcmV0Owo+PiDCoCDCoMKg wqDCoMKgIHJlcS0+bnVtX3NnZSA9IDE7Cj4+IEBAIC0xMjczLDIzICsxNDUzLDQ0IEBAIHN0YXRp YyBpbnQgbnZtZV9yZG1hX21hcF9kYXRhKHN0cnVjdCAKPj4gbnZtZV9yZG1hX3F1ZXVlICpxdWV1 ZSwKPj4gwqDCoMKgwqDCoCBpZiAoIWJsa19ycV9ucl9waHlzX3NlZ21lbnRzKHJxKSkKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiBudm1lX3JkbWFfc2V0X3NnX251bGwoYyk7Cj4+IMKgIC3C oMKgwqAgcmVxLT5zZ190YWJsZS5zZ2wgPSByZXEtPmZpcnN0X3NnbDsKPj4gLcKgwqDCoCByZXQg PSBzZ19hbGxvY190YWJsZV9jaGFpbmVkKCZyZXEtPnNnX3RhYmxlLAo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBibGtfcnFfbnJfcGh5c19zZWdtZW50cyhycSksIHJlcS0+c2dfdGFibGUuc2ds LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTR19DSFVOS19TSVpFKTsKPj4gK8KgwqDCoCBy ZXEtPmRhdGFfc2dsLnNnX3RhYmxlLnNnbCA9IHJlcS0+ZGF0YV9zZ2wuZmlyc3Rfc2dsOwo+PiAr wqDCoMKgIHJldCA9IHNnX2FsbG9jX3RhYmxlX2NoYWluZWQoJnJlcS0+ZGF0YV9zZ2wuc2dfdGFi bGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJsa19ycV9ucl9waHlzX3NlZ21lbnRzKHJx KSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxLT5kYXRhX3NnbC5zZ190YWJsZS5zZ2ws IFNHX0NIVU5LX1NJWkUpOwo+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVOT01FTTsKPj4gwqAgLcKgwqDCoCByZXEtPm5lbnRzID0gYmxrX3JxX21h cF9zZyhycS0+cSwgcnEsIHJlcS0+c2dfdGFibGUuc2dsKTsKPj4gK8KgwqDCoCByZXEtPmRhdGFf c2dsLm5lbnRzID0gYmxrX3JxX21hcF9zZyhycS0+cSwgcnEsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS0+ZGF0YV9zZ2wuc2dfdGFibGUuc2ds KTsKPj4gwqAgLcKgwqDCoCBjb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsIHJlcS0+c2dfdGFi bGUuc2dsLCByZXEtPm5lbnRzLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBycV9kbWFfZGlyKHJxKSk7Cj4+ICvCoMKgwqAgY291bnQgPSBpYl9kbWFfbWFwX3NnKGliZGV2 LCByZXEtPmRhdGFfc2dsLnNnX3RhYmxlLnNnbCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmVxLT5kYXRhX3NnbC5uZW50cywgcnFfZG1hX2RpcihycSkpOwo+PiDCoMKg wqDCoMKgIGlmICh1bmxpa2VseShjb3VudCA8PSAwKSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0ID0gLUVJTzsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2ZyZWVfdGFibGU7Cj4+ IMKgwqDCoMKgwqAgfQo+PiDCoCAtwqDCoMKgIGlmIChjb3VudCA8PSBkZXYtPm51bV9pbmxpbmVf c2VnbWVudHMpIHsKPj4gK8KgwqDCoCBpZiAoYmxrX2ludGVncml0eV9ycShycSkpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgIHJlcS0+cGlfc2dsLT5zZ190YWJsZS5zZ2wgPSByZXEtPnBpX3NnbC0+Zmly c3Rfc2dsOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gc2dfYWxsb2NfdGFibGVfY2hhaW5lZCgm cmVxLT5waV9zZ2wtPnNnX3RhYmxlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJsa19ycV9jb3VudF9pbnRlZ3JpdHlfc2cocnEtPnEsIHJxLT5iaW8pLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS0+cGlfc2dsLT5zZ190YWJsZS5zZ2wsIFNHX0NIVU5L X1NJWkUpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KHJldCkpIHsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVOT01FTTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZ290byBvdXRfdW5tYXBfc2c7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgIHJlcS0+cGlfc2dsLT5uZW50cyA9IGJsa19ycV9tYXBfaW50ZWdyaXR5X3NnKHJx LT5xLCBycS0+YmlvLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmVxLT5waV9zZ2wtPnNnX3RhYmxlLnNnbCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwaV9jb3VudCA9 IGliX2RtYV9tYXBfc2coaWJkZXYsIHJlcS0+cGlfc2dsLT5zZ190YWJsZS5zZ2wsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxLT5waV9zZ2wtPm5lbnRzLCBycV9kbWFfZGly KHJxKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodW5saWtlbHkocGlfY291bnQgPD0gMCkpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTzsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZ290byBvdXRfZnJlZV9waV90YWJsZTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4g K8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY291bnQgPD0gZGV2LT5udW1faW5saW5lX3Nl Z21lbnRzICYmICFyZXEtPmlzX3Byb3RlY3RlZCkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSAmJiBudm1lX3JkbWFfcXVldWVfaWR4KHF1ZXVlKSAm Jgo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBxdWV1ZS0+Y3RybC0+dXNlX2lubGluZV9k YXRhICYmCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJsa19ycV9wYXlsb2FkX2J5dGVz KHJxKSA8PQo+PiBAQCAtMTMwNCwxNyArMTUwNSwyNSBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9t YXBfZGF0YShzdHJ1Y3QgCj4+IG52bWVfcmRtYV9xdWV1ZSAqcXVldWUsCj4+IMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCAtwqDCoMKgIHJldCA9IG52bWVfcmRtYV9t YXBfc2dfZnIocXVldWUsIHJlcSwgYywgY291bnQpOwo+PiArwqDCoMKgIHJldCA9IG52bWVfcmRt YV9tYXBfc2dfZnIocXVldWUsIHJlcSwgYywgY291bnQsIHBpX2NvdW50KTsKPj4gwqAgb3V0Ogo+ PiDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShyZXQpKQo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byBv dXRfdW5tYXBfc2c7Cj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bm1hcF9waV9zZzsKPj4g wqAgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gwqAgK291dF91bm1hcF9waV9zZzoKPj4gK8KgwqDC oCBpZiAoYmxrX2ludGVncml0eV9ycShycSkpCj4+ICvCoMKgwqDCoMKgwqDCoCBpYl9kbWFfdW5t YXBfc2coaWJkZXYsIHJlcS0+cGlfc2dsLT5zZ190YWJsZS5zZ2wsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmVxLT5waV9zZ2wtPm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7Cj4+ ICtvdXRfZnJlZV9waV90YWJsZToKPj4gK8KgwqDCoCBpZiAoYmxrX2ludGVncml0eV9ycShycSkp Cj4+ICvCoMKgwqDCoMKgwqDCoCBzZ19mcmVlX3RhYmxlX2NoYWluZWQoJnJlcS0+cGlfc2dsLT5z Z190YWJsZSwgU0dfQ0hVTktfU0laRSk7Cj4+IMKgIG91dF91bm1hcF9zZzoKPj4gLcKgwqDCoCBp Yl9kbWFfdW5tYXBfc2coaWJkZXYsIHJlcS0+c2dfdGFibGUuc2dsLCByZXEtPm5lbnRzLCAKPj4g cnFfZG1hX2RpcihycSkpOwo+PiArwqDCoMKgIGliX2RtYV91bm1hcF9zZyhpYmRldiwgcmVxLT5k YXRhX3NnbC5zZ190YWJsZS5zZ2wsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS0+ZGF0 YV9zZ2wubmVudHMsIHJxX2RtYV9kaXIocnEpKTsKPj4gwqAgb3V0X2ZyZWVfdGFibGU6Cj4+IC3C oMKgwqAgc2dfZnJlZV90YWJsZV9jaGFpbmVkKCZyZXEtPnNnX3RhYmxlLCBTR19DSFVOS19TSVpF KTsKPj4gK8KgwqDCoCBzZ19mcmVlX3RhYmxlX2NoYWluZWQoJnJlcS0+ZGF0YV9zZ2wuc2dfdGFi bGUsIFNHX0NIVU5LX1NJWkUpOwo+PiDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IMKgIH0KPj4g wqAgQEAgLTE3NTQsNiArMTk2MywxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IAo+PiBudm1lX3Jk bWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCj4+IMKgIMKgwqDCoMKgwqAg YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpOwo+PiDCoCArwqDCoMKgIHJlcS0+aXNfcHJvdGVjdGVk ID0gZmFsc2U7Cj4+ICvCoMKgwqAgaWYgKG52bWVfcmRtYV9xdWV1ZV9pZHgocXVldWUpICYmIHF1 ZXVlLT5waV9zdXBwb3J0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYy0+Y29tbW9uLm9wY29k ZSA9PSBudm1lX2NtZF93cml0ZSB8fAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjLT5jb21t b24ub3Bjb2RlID09IG52bWVfY21kX3JlYWQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl cS0+aXNfcHJvdGVjdGVkID0gbnZtZV9uc19oYXNfcGkobnMpOwo+PiArwqDCoMKgIH0KPj4gKwo+ Cj4gVGhpcyBjaGVjayBiZWxvbmdzIHRvIG52bWUtY29yZSBpbiBuYXR1cmUuIFdoeSBub3QgdGVz dAo+IGJsa19pbnRlZ3JpdHlfcnEoKT8KCkluIGNhc2UgdGhhdCB3cml0ZV9nZW5lcmF0ZSBhbmQg cmVhZF92ZXJpZnkgYXJlIDAsIHRoZSBjYWxsIApibGtfaW50ZWdyaXR5X3JxKCkgd2lsbCByZXR1 cm4gMCBhcyB3ZWxsLiBTbyBpdCdzIG5vdCBnb29kIGVub3VnaCBmb3IgdXMuCgppc19wcm90ZWN0 ZWQgYm9vbCBpcyBhIGhlbHBlciBmb3IgUkRNQSB0cmFuc3BvcnQgdG8gZGlzdGluZ3Vpc2ggYmV0 d2VlbiAKcGlfcmVxIGFuZCBub25fcGkgcmVxdWVzdC4KCkkgcHJlZmVyIG5vdCBjYXJyeWluZyBp dCBpbiB0aGUgZ2VuZXJhbCAic3RydWN0IG52bWVfcmVxdWVzdCIgaWYgb25seSAxIAp0cmFuc3Bv cnQgaXMgYWN0dWFsbHkgdXNpbmcgaXQgZm9yIGludGVybmFsIG5lZWRzLgoKVGhpcyBpcyB3aHkg d2UndmUgYWRkZWQgaXQgdG8gInN0cnVjdCBudm1lX3JkbWFfcmVxdWVzdCIuCgpCdXQgaWYgeW91 IHByZWZlciBhZGRpbmcgaXQgdG8gInN0cnVjdCBudm1lX3JlcXVlc3QsIGl0J3MgZG9hYmxlLgoK Pgo+IE92ZXJhbGwgdGhpcyBsb29rcyBnb29kIQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KTGludXgtbnZtZSBtYWlsaW5nIGxpc3QKTGludXgtbnZtZUBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtbnZtZQo=