Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp2182438ybh; Sun, 15 Mar 2020 21:15:09 -0700 (PDT) X-Google-Smtp-Source: ADFU+vuYT5aTBp20QWJ/2Mm08twLl/NcEQH84TzZP84moC17jLBbP9FoQDCNrJbmXYBKmMI+7iDP X-Received: by 2002:a9d:6457:: with SMTP id m23mr21350322otl.162.1584332109422; Sun, 15 Mar 2020 21:15:09 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1584332109; cv=pass; d=google.com; s=arc-20160816; b=tNdFUjpyvpyuu4w47srXLwQr4kRUMlvEmUsGcBHxfXIaZgjlNhSHXQXUR6DnGZsXuN 9ufMC/Sh41VQmPaWX39T99Fj/m0oY3fRVhY9nzljSuHmvutTPcHhG/ICrIOf1MUQSKJv duOzq5zZ4lBCDaZnbh7cZNOEELNFNHeAmx6sek48771HdP2Yy0EFWisB47ZZPmPPKWEO vYYOtmXDLI5hl+oMfH7/Z245ZpDMhB7kHbti5a/ImJTmecWyPfz7Kdu5p09FmN9xjMFq gBoi/WH4lhxXGt3m5NvHFa49aK2z66B2ow4GR99ZsnSbgGC5suH0eAu8aGEj4yZfeuMc O4EQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=LqL2PaN8JL//un3Xp+qnnLllPs4R4ryzs2JNwLgVxWM=; b=SuT/oG1HVnd8EiB70y9xA4G3OhKh7GrU04C8i+Y+qe78FyM/bXzCKC39T0Smxg4fNi ofKpNF9fb9uYKnqlZLy7f46Id1hwqxar2zCpm0lRsxRi/RJMuEaCMR21CaE/RxQfrlRn bQsBfr98nYpgucHcujKTHTPYQiojGHZ33ZwZK3Gxbxp4c1Gd/JUcwjxYBedQ6jeF/WRK rtTplaASk4+bkbWn3ECIosNhUTnzhAU40LO/iPNUlN4z4xejipHZR68kZIvIRQT5eOPY lNZHiluwIUMRPKzM+MjB8u91/3FfwN+nnJW08r1GjGr02+r5GeI+oNYE97OeriLBBqmU aq4A== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@hammerspace.com header.s=selector2 header.b=IgYxaTu5; arc=pass (i=1 spf=pass spfdomain=hammerspace.com dkim=pass dkdomain=hammerspace.com dmarc=pass fromdomain=hammerspace.com); spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=hammerspace.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a19si3065934otk.60.2020.03.15.21.14.41; Sun, 15 Mar 2020 21:15:09 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@hammerspace.com header.s=selector2 header.b=IgYxaTu5; arc=pass (i=1 spf=pass spfdomain=hammerspace.com dkim=pass dkdomain=hammerspace.com dmarc=pass fromdomain=hammerspace.com); spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=hammerspace.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728680AbgCPENW (ORCPT + 99 others); Mon, 16 Mar 2020 00:13:22 -0400 Received: from mail-bn7nam10on2111.outbound.protection.outlook.com ([40.107.92.111]:8987 "EHLO NAM10-BN7-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726575AbgCPENW (ORCPT ); Mon, 16 Mar 2020 00:13:22 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H+xqRiJpRwJZ6nz6BvOTiHWJC+sxw9wDQGa8owSRSzqU4FXj3g7bInn/TpZgGW8voPTeJKimGXMo4n5rnt3oSBcepElfRd/invY+4gcayv5ZkZlAiRSBus/3pqDCG5uaNOWGT+p1kweC4nENKoHzGlWWVT1oX2Ju8PDRYrzJdMd/wKGIj7WN6QNbWd5iINGFQALZAhLH5sM6/i+UGQBLLzVTi40y29uvNDqMITZBQZxIwhMYecwOAB9SmhAdLSGo8+bCN/F5BlZY7xInR1v0AaKi+wPwZgQCu6ysu7m7hYfdkl/xg428XuyaMcIXJhAdrxDfl+4BBrgDxq7Y5vQk4A== 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=LqL2PaN8JL//un3Xp+qnnLllPs4R4ryzs2JNwLgVxWM=; b=S0Zhjn4pa1u6zHtCwMQiSXGXSZh6xEDei//Tc6jgpCE6lbZL1Oj1+xog5Rd5zYtTJOUZwpiMm5Stg6M309NVN48LtCHQZ/w/Mf6FYdCFBtrIQD0e+wna2Qyli8JfHZ2Bde0/oDhUj6cxCEbjBGDil26P80jYMw7MOBnbYZBO1PDocsulgWhSTJEgPob12W4V5jPNqvez4Q2vXsWgYpKQPRP+Zhxq8kIUZmWseUlj7qkIHHTm6cWbrXi7ysnGpKw+/gB/7nN0QeEAjFf/ZSbwGQh2WDa3j+0jGHxqUfS1pp32yI/bI63XVg090zz3Xxr04NWJHUAHphuZnxjMkKYrVA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hammerspace.com; dmarc=pass action=none header.from=hammerspace.com; dkim=pass header.d=hammerspace.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hammerspace.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LqL2PaN8JL//un3Xp+qnnLllPs4R4ryzs2JNwLgVxWM=; b=IgYxaTu5zhUOMV4m6sOLQ/6kdf6qCDQFLrmKOFS5sB5D0z7MsRodFjoNPv94aocRBwDBa1I7JrLmLM0kAJpFwOPHnmtQarEIaXuzdWBYTfOlCTLmUGPYBL/K4CJBjnPKmFos9CSuLfucU8BKHBmh9oKTIIF9yGznSqjgD7L2lnA= Received: from CH2PR13MB3398.namprd13.prod.outlook.com (2603:10b6:610:2a::33) by CH2PR13MB3685.namprd13.prod.outlook.com (2603:10b6:610:9d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.9; Mon, 16 Mar 2020 04:13:10 +0000 Received: from CH2PR13MB3398.namprd13.prod.outlook.com ([fe80::9570:c1b8:9eb3:1c36]) by CH2PR13MB3398.namprd13.prod.outlook.com ([fe80::9570:c1b8:9eb3:1c36%7]) with mapi id 15.20.2835.013; Mon, 16 Mar 2020 04:13:10 +0000 From: Trond Myklebust To: "neilb@suse.de" , "Anna.Schumaker@Netapp.com" CC: "linux-nfs@vger.kernel.org" Subject: Re: [PATCH/RFC] NFS: Minimize COMMIT calls during writeback. Thread-Topic: [PATCH/RFC] NFS: Minimize COMMIT calls during writeback. Thread-Index: AQHV+yakSiG1mHeDHU6uGW2VQQ2dq6hKbIoAgAAmJgCAAAlngA== Date: Mon, 16 Mar 2020 04:13:10 +0000 Message-ID: References: <87y2s1rwof.fsf@notabene.neil.brown.name> <87v9n5rmrz.fsf@notabene.neil.brown.name> In-Reply-To: <87v9n5rmrz.fsf@notabene.neil.brown.name> Accept-Language: en-US, en-GB Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=trondmy@hammerspace.com; x-originating-ip: [68.40.189.247] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: bb9137da-7a5c-41cb-7911-08d7c96056b0 x-ms-traffictypediagnostic: CH2PR13MB3685: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 03449D5DD1 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(136003)(376002)(366004)(396003)(39830400003)(346002)(199004)(478600001)(36756003)(186003)(6506007)(110136005)(6486002)(316002)(86362001)(76116006)(66946007)(26005)(6512007)(66556008)(64756008)(66446008)(66476007)(2616005)(71200400001)(30864003)(5660300002)(2906002)(8936002)(4326008)(8676002)(81166006)(81156014);DIR:OUT;SFP:1102;SCL:1;SRVR:CH2PR13MB3685;H:CH2PR13MB3398.namprd13.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1; received-spf: None (protection.outlook.com: hammerspace.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pCA7eJQAwmuPzI/wD8UJnhzV5UiG81aBhxiHv5hZiFtNpUFYLr+pPlkD3dt3YLQmII80JVQfWLc0+3V9JtBmQOlH1qu/TNF57+rLHFn00xB7b9U9tp7xx6dnrb727mxHS1QdGI3u4LBmzlJcYZ9B+2A5uWtlReB6YpDgCztPjQ7SAMDoQdAGaC6x3O2vlUFigdmJ2GmBx+9K/E3i6ycxdyM1b3OEZCoz+00UiplPu33/zP5wTH3ePDpDMm82szgtnKZ9Zfq1HuAdMnB/lQoRlvD7HTdRpn92a4fNM21G9iLuUHtRU4A+ynU2Z681djcbhuz08JEAR0nvFhIZ9VbMYHbd5vum9hRKlI2iEYNA0cxMtrRBo4T2F0vN7Iwk9GP+1dlZt3xPwz62kmijxVsUFQq8DGcB0VoI51btru2rSiJM5OqI5i12K1FFNMxgwhsq x-ms-exchange-antispam-messagedata: XyrjVY/m3fTPgPx6yNffHr9QWZYGx5kVphnsAEuCf7yYP+f8eeqqseWXI4ubQ47c58+Oz99vA8+/1gNYdUztBu2oSHeVTSDTHax3puBtXIG3i5Z2DuqV/vaGXjmYFYBilyuAaGyKIHW0uX/D2w7CVQ== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: hammerspace.com X-MS-Exchange-CrossTenant-Network-Message-Id: bb9137da-7a5c-41cb-7911-08d7c96056b0 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Mar 2020 04:13:10.1855 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0d4fed5c-3a70-46fe-9430-ece41741f59e X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: HjE/YoFuhae6sqwzMXZiFeMkI4Ejx4WB0iVXmpnIfEBgOxSRkMXQDitjBHDYxZO/DdKbEqD7enTIXFHTEgDm+Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3685 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org T24gTW9uLCAyMDIwLTAzLTE2IGF0IDE0OjM5ICsxMTAwLCBOZWlsQnJvd24gd3JvdGU6DQo+IE9u IE1vbiwgTWFyIDE2IDIwMjAsIFRyb25kIE15a2xlYnVzdCB3cm90ZToNCj4gDQo+ID4gT24gTW9u LCAyMDIwLTAzLTE2IGF0IDExOjA1ICsxMTAwLCBOZWlsQnJvd24gd3JvdGU6DQo+ID4gPiBTaW5j ZSA0LjEzIChzZWUgRml4ZXM6IGNvbW1pdCkgTkZTIGhhcyBzZW50IGEgQ09NTUlUIHJlcXVlc3Qg Zm9yDQo+ID4gPiBldmVyeQ0KPiA+ID4gLndyaXRlcGFnZXMoKSBjYWxsIGl0IHJlY2VpdmVkIC0g d2hlbiB0aGUgd3JpdGVzIHN1Ym1pdHRlZCBmb3INCj4gPiA+IHRoYXQNCj4gPiA+IGNhbGwNCj4g PiA+IGhhdmUgYWxsIGNvbXBsZXRlZC4NCj4gPiA+IA0KPiA+ID4gVGhpcyB3b3JrcyB3ZWxsIGVu b3VnaCB3aGVuIENPTU1JVCBpcyBmYXN0LCBidXQgaWYgQ09NTUlUIGlzIHNsb3cNCj4gPiA+IHRo ZXNlDQo+ID4gPiBjYWxscyBjYW4gb3ZlcmxhcCBlYWNoIG90aGVyLCBvdmVybG9hZCB0aGUgc2Vy dmVyLCBhbmQNCj4gPiA+IHN1YnN0YW50aWFsbHkNCj4gPiA+IHJlZHVjZSB0aHJvdWdocHV0Lg0K PiA+ID4gDQo+ID4gPiBJIGxvb2tlZCBhdCB0aGlzIGR1ZSB0byBhIHJlcG9ydCBvZiByZWdyZXNz aW9uIHdoZW4gd3JpdGluZyB0byBhDQo+ID4gPiBHYW5lc2hhDQo+ID4gPiBORlMgc2VydmVyIHdp dGggdHJhY2luZyBzaG93aW5nIG11bHRpcGxlIG92ZXJsYXBwaW5nIENPTU1JVHMsIGFuZA0KPiA+ ID4gaW5kaXZpZHVhbCBjb21taXRzIHR5cGljYWxseSB0YWtpbmcgMjAwbXMgdG8gMzAwbXMuICBU aGlzDQo+ID4gPiByZXN1bHRlZCBpbg0KPiA+ID4gMg0KPiA+ID4gb3JkZXJzIG9mIG1hZ25pdHVk ZSBzbG93IGRvd24gd2hlbiB3cml0aW5nIDEwMDB4MU0gZnJvbSAvZGV2L3plcm8NCj4gPiA+IHdp dGggZGQuDQo+ID4gPiBUaGlzIGlzIGVhc2lseSByZXByb2R1Y2VkIGJ5IGFkZGluZyAnbXNsZWVw KDMwMCknIHRvDQo+ID4gPiBuZnNkX2NvbW1pdCgpIGluDQo+ID4gPiB0aGUNCj4gPiA+IExpbnV4 IE5GUyBzZXJ2ZXIuDQo+ID4gDQo+ID4gV2hlbiB0aGVyZSBpcyBvdmVybGFwIG9mIHdyaXRlYmFj ayB0byB0aGUgc2FtZSBmaWxlLCB0aGVuIGl0IGlzDQo+ID4gYWxtb3N0DQo+ID4gYWx3YXlzIGJl Y2F1c2Ugd2UncmUgaGl0dGluZyBtZW1vcnkgcmVjbGFpbSBvbiB0aGUgY2xpZW50LiBJbiB0aGF0 DQo+ID4gY2FzZQ0KPiA+IHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgbWVtb3J5IHJlY2xhaW0gY29t cGxldGVzLCB3aGljaCBpdCB3b24ndCBkbw0KPiA+IGlmDQo+ID4gd2UgZGVsYXkgQ09NTUlULg0K PiA+IElPVzogdGhpcyBiZWhhdmlvdXIgaXMgdmVyeSBtdWNoIGludGVudGlvbmFsLg0KPiANCj4g V2hhdCBkbyB5b3UgbWVhbiBieSAib3ZlcmxhcCBvZiB3cml0ZWJhY2siID8NCj4gVGhlIC0+d3Jp dGVwYWdlcyBjYWxscyBhcmUgc2VxdWVudGlhbCAtIHRoZXkgZG9uJ3Qgb3ZlcmxhcC4NCj4gVGhl IFdSSVRFIHJwY3MgYXJlIGFzeW5jaHJvbm91cyBzbyBvZiBjb3Vyc2UgdGhleSBvdmVybGFwLg0K PiBUaGUgQ09NTUlUcyBhcmUgZXhwZWN0ZWQgdG8gb3ZlcmxhcCB3aXRoIHN1YnNlcXVlbnQgV1JJ VEVzLg0KPiBJdCBpcyBvbmx5IHdoZW4gQ09NTUlUcyBvdmVybGFwIHdpdGggQ09NTUlUcyB0aGF0 IEkgdGhpbmsgd2UgbWlnaHQNCj4gb3ZlcmxvYWQgdGhlIHNlcnZlciwgYW5kIEkgY2Fubm90IHNl ZSBob3cgdGhhdCB3b3VsZCBldmVyIGJlIGEgdXNlZnVsDQo+IHRoaW5nIHRvIGRvLg0KPiANCg0K SSBtZWFuIHRoYXQgdGhlIE5GUyB3cml0ZWJhY2sgY29kZSBoYXMgZXhhY3RseSB0d28gY2FzZXMg d2hlcmUgaXQNCnN0YXJ0cyB0byB3cml0ZSBvdXQgZGF0YSBiZWZvcmUgYW4gZnN5bmMoKSBvciBj bG9zZSgpIGZvcmNlcyBpdCB0byBkbw0Kc286DQoNCjEpIFJlYWQgb2YgYSBwYWdlIHRoYXQgd2Fz IHdyaXR0ZW4gdG8sIGJ1dCBub3QgdXAgdG8gZGF0ZQ0KMikgTWVtb3J5IHByZXNzdXJlLg0KDQpJ T1c6IElmIHlvdSdyZSBzZWVpbmcgb3ZlcmxhcHBpbmcgY29tbWl0cywgaXQgaXMgZHVlIHRvIGEg c2l0dWF0aW9uDQp3aGVyZSB3ZSdyZSB0cnlpbmcgdG8gZnJlZSB1cCB0aGUgcGFnZXMgYXMgc29v biBhcyBwb3NzaWJsZS4NCg0KPiBJbiB0aGUgY2FzZXMgSSd2ZSBleHBlcmltZW50IHdpdGggdGhl cmUgaXMgcGxlbnR5IG9mIG1lbW9yeSwgYnV0IHRoZQ0KPiB0b3RhbCB3cml0ZSBzaXplIGV4Y2Vl ZHMgZGlydHlfdGhyZXNob2xkLCBzbyB3cml0ZW91dCBzdGFydHMgdG8gbGltaXQNCj4gdGhlIGFt b3VudCBvZiBkaXJ0eSBtZW1vcnkuICBDZXJ0YWlubHkgd2Ugd2FudCB0aGUgQ09NTUlUIHByb21w dGx5IGFzDQo+IGEgZ3JvdXAgb2Ygd3JpdGVzIGZpbmlzaCwgYnV0IHRoYXQgZ3JvdXAgZG9lc24n dCBuZWVkIHRvIGJlIHRpbnkuDQo+IA0KPiAoT3VyIGluaXRpYWwgZXhwbG9yYXRpb25zIGZvdW5k IHRoYXQgaW5jcmVhc2luZyBkaXJ0eV90aHJlc2hvbGQgdG8NCj4gbGFyZ2VyIHRoYW4gdGhlIHdy aXRlIHNpemUgcmVzdG9yZWQgbm9ybWFsIHBlcmZvcm1hbmNlKQ0KPiANCg0KVGhhdCdzIHRoZSBk ZWZpbml0aW9uIG9mIG1lbW9yeSBwcmVzc3VyZSBoZXJlLiBJdCdzIG5vdCB0aGUgam9iIG9mIHRo ZQ0KZmlsZXN5c3RlbSB0byBzZWNvbmQgZ3Vlc3Mgd2hhdCBpcyBnb2luZyBvbiBpbiB0aGUgaGln aGVyIGxheWVycy4gSXRzDQpqb2IgaXMgdG8gd3JpdGUgb3V0IGRhdGEgYXMgcXVpY2tseSBhcyBw b3NzaWJsZSB3aGVuIGFza2VkIHRvIGRvIHNvLg0KDQo+ID4gPiBUaGlzIHBhdGNoIGNoYW5nZXMg dGhlIGRldGFpbHMgb2Ygd2hlbiBDT01NSVQgaXMgc2VudCB3aXRob3V0DQo+ID4gPiBjaGFuZ2lu Zw0KPiA+ID4gdGhlIGdlbmVyYWwgYXBwcm9hY2guDQo+ID4gPiANCj4gPiA+IFdoZXJlIHByZXZp b3VzbHkgdGhlIHdyaXRlcyBmcm9tIGEgc2luZ2xlIC53cml0ZXBhZ2VzKCkgY2FsbCB3ZXJlDQo+ ID4gPiBhY2NvdW50ZWQgdG9nZXRoZXIgaW4gYSBuZnNfaW9fY29tcGxldGlvbiwgbm93IHRoZSB3 cml0ZXMgZnJvbQ0KPiA+ID4gbXVsdGlwbGUNCj4gPiA+IHdyaXRlcGFnZXMoKSBjYWxscyBhcmUg YWNjb3VudGVkIHRvZ2V0aGVyLiAgVGhlIHNldCBvZiB3cml0ZXBhZ2VzDQo+ID4gPiBjYWxscw0K PiA+ID4gdGhhdCBhcmUgZ3JvdXBlZCB0b2dldGhlciBhcmUgYWxsIHRob3NlIGZyb20gd2hlbiBv bmUgQ09NTUlUIGNhbGwNCj4gPiA+IGVuZHMNCj4gPiA+IHRvIHdoZW4gdGhlIG5leHQgQ09NTUlU IGNhbGwgZW5kcy4gIFRoaXMgYXV0b21hdGljYWxseSByZWR1Y2VzDQo+ID4gPiB0aGUNCj4gPiA+ IHJhdGUNCj4gPiA+IG9mIENPTU1JVCByZXF1ZXN0cyB3aGVuIENPTU1JVCBpdHNlbGYgaXMgc2xv dy4NCj4gPiA+IChJZiB0aGVyZSBhcmUgbm8gQ09NTUlUIGNhbGxzIHBlbmRpbmcsIHRoZSBmaXJz dCAud3JpdGVwYWdlcyB3aWxsDQo+ID4gPiBnZXQNCj4gPiA+ICBhbiBuZnNfaW9fY29tcGxldGlv biB0byBpdHNlbGYsIHRoZW4gc3Vic2VxdWVuY3Qgd3JpdGVwYWdlcw0KPiA+ID4gcmVxdWVzdHMN Cj4gPiA+ICB1bnRpbCB0aGUgZmlyc3QgQ09NTUlUIGNvbXBsZXRlcyB3aWxsIGdvIGluIHRoZSBu ZXh0DQo+ID4gPiBuZnNfaW9fY29tcGxldGlvbikNCj4gPiA+IA0KPiA+ID4gVGhlcmUgYXJlIHR5 cGljYWxseSBhdCBtb3N0IHR3byBuZnNfaW9fY29tcGxldGlvbiBzdHJ1Y3R1cmVzDQo+ID4gPiBh bGxvY2F0ZWQNCj4gPiA+IGZvciB3cml0ZWJhY2sgdG8gYSBnaXZlbiBpbm9kZS4NCj4gPiA+IA0K PiA+ID4gLSBJZiB0aGVyZSB3YXMgYmVlbiBhbnkgd3JpdGVwYWdlcyBjYWxscyBzaW5jZSB0aGUg bGFzdCB0aW1lIGENCj4gPiA+IENPTU1JVA0KPiA+ID4gICBjb21wbGV0ZWQsIHRoZXJlIHdpbGwg YmUgYW4gbmZzX2lvX2NvbXBsZXRpb24gc3RvcmVkIGluIHRoZQ0KPiA+ID4gaW5vZGUNCj4gPiA+ IChpbg0KPiA+ID4gICBuZnNfbWRzX2NvbW1pdF9pbmZvKSB3aGljaCBuZXcgd3JpdGVwYWdlcyBy ZXF1ZXN0cyBhcmUNCj4gPiA+IGFjY291bnRlZA0KPiA+ID4gaXQuDQo+ID4gPiANCj4gPiA+IC0g SWYgdGhlcmUgaXMgbm8gcGVuZGluZyBDT01NSVQgcmVxdWVzdCwgYnV0IHRoZXJlIGFyZSBwZW5k aW5nDQo+ID4gPiB3cml0ZWJhY2sNCj4gPiA+ICAgV1JJVEVTLCB0aGVyZSB3aWxsIGJlIGFub3Ro ZXIgbmZzX2lvX2NvbXBsZXRpb24gd2hpY2ggaXMgbm90DQo+ID4gPiBhdHRhY2hlZA0KPiA+ID4g ICBhbmQgd2hpY2ggaXMgZHJhaW5pbmcuICBXaGVuIGl0IGZ1bGx5IGRyYWlucyBhIENPTU1JVCB3 aWxsIGJlDQo+ID4gPiBzZW50Lg0KPiA+ID4gICBXaGVuIHRoYXQgQ09NTUlUIGNvbXBsZXRlcywg dGhlIGF0dGFjaGVkIG5mc19pb19jb21wbGV0aW9uIHdpbGwNCj4gPiA+IGJlDQo+ID4gPiAgIGRl dGFjaGVkIGFuZCBhbGxvd2VkIHRvIGRyYWluLg0KPiA+ID4gDQo+ID4gPiBUaGUgcnBjc19vdXQg Y291bnRlciBub3cgY291bnRzIHRoZSB1bmF0dGFjaGVkIG5mc19pb19jb21wbGV0aW9uDQo+ID4g PiBhcw0KPiA+ID4gd2VsbA0KPiA+ID4gYXMgYW55IHBlbmRpbmcgQ09NTUlUIHJlcXVlc3RzLiAg QXMgYW4gdW5hdHRhY2hlZA0KPiA+ID4gbmZzX2lvX2NvbXBsZXRpb24NCj4gPiA+IHdpbGwNCj4g PiA+IHNvb24gdHVybiBpbnRvIGEgQ09NTUlUIHJlcXVlc3QsIHRoaXMgc2VlbXMgcmVhc29uYWJs ZS4gIEl0DQo+ID4gPiBhbGxvd3MgdXMNCj4gPiA+IHRvDQo+ID4gPiBjbGVhcmx5IGRldGVjdCB3 aGVuIHRoZXJlIGFyZSBubyBsb25nZXIgYW55IENPTU1JVHMgZXhwZWN0ZWQgdG8NCj4gPiA+IGNv bXBsZXRlLCBzbyB3ZSBrbm93IHRvIGRldGFjaCBhbnkgbmZzX2lvX2NvbXBsZXRpb24gZnJvbSB0 aGUNCj4gPiA+IGlub2RlDQo+ID4gPiBhbmQNCj4gPiA+IGFsbG93IGl0IHRvIGRyYWluLg0KPiA+ ID4gDQo+ID4gPiBBcyB3ZSB1c2UgYXRvbWljIGFjY2Vzc2VzIChlLmcuICB4Y2hnIGFuZCBrcmVm X2dldF91bmxlc3NfemVybygpKQ0KPiA+ID4gdG8NCj4gPiA+IGFjY2VzcyB0aGUgYXR0YWNoZWQg bmZzX2lvX2NvbXBsZXRpb24sIHdlIG5vdyB1c2Uga2ZyZWVfcmN1KCkgdG8NCj4gPiA+IGZyZWUN Cj4gPiA+IGl0LCB0byBlbnN1cmUgaXQgaXMgbm90IGFjY2Vzc2VkIGFmdGVyIGl0IGlzIGZyZWVk Lg0KPiA+ID4gDQo+ID4gPiBXaXRoIDMwMG1zIGNvbW1pdHMsIHRoaXMgaW1wcm92ZXMgdGhyb3Vn aHQgb2YgYSAxRyBkZCBieSAyIG9yZGVycw0KPiA+ID4gb2YNCj4gPiA+IG1hZ25pdHVkZS4gIEV2 ZW4gd2l0aG91dCB0aGUgMzAwbXMgZGVsYXksIHRoaXMgbm90aWNlYWJseQ0KPiA+ID4gaW1wcm92 ZXMNCj4gPiA+IHRocm91Z2hwdXQgdG8gYSBMaW51eCBORlMgc2VydmVyIGlzIGEgc2ltcGxlIFZN Lg0KPiA+ID4gDQo+ID4gPiBGaXhlczogOTE5ZTNiZDlhODc1ICgiTkZTOiBFbnN1cmUgd2UgY29t bWl0IGFmdGVyIHdyaXRlYmFjayBpcw0KPiA+ID4gY29tcGxldGUiKQ0KPiA+ID4gU2lnbmVkLW9m Zi1ieTogTmVpbEJyb3duIDxuZWlsYkBzdXNlLmRlPg0KPiA+ID4gLS0tDQo+ID4gPiAgZnMvbmZz L2lub2RlLmMgICAgICAgICAgfCAgMSArDQo+ID4gPiAgZnMvbmZzL3dyaXRlLmMgICAgICAgICAg fCA1MA0KPiA+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tDQo+ID4g PiAtLQ0KPiA+ID4gIGluY2x1ZGUvbGludXgvbmZzX3hkci5oIHwgIDcgKysrKysrDQo+ID4gPiAg MyBmaWxlcyBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQ0KPiA+ID4g DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYw0KPiA+ ID4gaW5kZXggMTFiZjE1ODAwYWM5Li5jMDBiNTQ0OTE5NDkgMTAwNjQ0DQo+ID4gPiAtLS0gYS9m cy9uZnMvaW5vZGUuYw0KPiA+ID4gKysrIGIvZnMvbmZzL2lub2RlLmMNCj4gPiA+IEBAIC0yMTEw LDYgKzIxMTAsNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQ0KPiA+ID4gIAlJ TklUX0xJU1RfSEVBRCgmbmZzaS0+Y29tbWl0X2luZm8ubGlzdCk7DQo+ID4gPiAgCWF0b21pY19s b25nX3NldCgmbmZzaS0+bnJlcXVlc3RzLCAwKTsNCj4gPiA+ICAJYXRvbWljX2xvbmdfc2V0KCZu ZnNpLT5jb21taXRfaW5mby5uY29tbWl0LCAwKTsNCj4gPiA+ICsJbmZzaS0+Y29tbWl0X2luZm8u aW9jID0gTlVMTDsNCj4gPiA+ICAJYXRvbWljX3NldCgmbmZzaS0+Y29tbWl0X2luZm8ucnBjc19v dXQsIDApOw0KPiA+ID4gIAlpbml0X3J3c2VtKCZuZnNpLT5ybWRpcl9zZW0pOw0KPiA+ID4gIAlt dXRleF9pbml0KCZuZnNpLT5jb21taXRfbXV0ZXgpOw0KPiA+ID4gZGlmZiAtLWdpdCBhL2ZzL25m cy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMNCj4gPiA+IGluZGV4IGM0NzhiNzcyY2M0OS4uNTdl MjA5Zjk2NGU0IDEwMDY0NA0KPiA+ID4gLS0tIGEvZnMvbmZzL3dyaXRlLmMNCj4gPiA+ICsrKyBi L2ZzL25mcy93cml0ZS5jDQo+ID4gPiBAQCAtNDcsNiArNDcsNyBAQCBzdHJ1Y3QgbmZzX2lvX2Nv bXBsZXRpb24gew0KPiA+ID4gIAl2b2lkICgqY29tcGxldGUpKHZvaWQgKmRhdGEpOw0KPiA+ID4g IAl2b2lkICpkYXRhOw0KPiA+ID4gIAlzdHJ1Y3Qga3JlZiByZWZjb3VudDsNCj4gPiA+ICsJc3Ry dWN0IHJjdV9oZWFkIHJjdTsNCj4gPiA+ICB9Ow0KPiA+ID4gIA0KPiA+ID4gIC8qDQo+ID4gPiBA QCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRpYyB2b2lkIG5mc19pb19jb21wbGV0aW9uX3JlbGVhc2Uo c3RydWN0DQo+ID4gPiBrcmVmDQo+ID4gPiAqa3JlZikNCj4gPiA+ICAJc3RydWN0IG5mc19pb19j b21wbGV0aW9uICppb2MgPSBjb250YWluZXJfb2Yoa3JlZiwNCj4gPiA+ICAJCQlzdHJ1Y3QgbmZz X2lvX2NvbXBsZXRpb24sIHJlZmNvdW50KTsNCj4gPiA+ICAJaW9jLT5jb21wbGV0ZShpb2MtPmRh dGEpOw0KPiA+ID4gLQlrZnJlZShpb2MpOw0KPiA+ID4gKwlrZnJlZV9yY3UoaW9jLCByY3UpOw0K PiA+ID4gIH0NCj4gPiA+ICANCj4gPiA+ICBzdGF0aWMgdm9pZCBuZnNfaW9fY29tcGxldGlvbl9n ZXQoc3RydWN0IG5mc19pb19jb21wbGV0aW9uICppb2MpDQo+ID4gPiBAQCAtNzIwLDYgKzcyMSw4 IEBAIHN0YXRpYyB2b2lkIG5mc19pb19jb21wbGV0aW9uX2NvbW1pdCh2b2lkDQo+ID4gPiAqaW5v ZGUpDQo+ID4gPiAgCW5mc19jb21taXRfaW5vZGUoaW5vZGUsIDApOw0KPiA+ID4gIH0NCj4gPiA+ ICANCj4gPiA+ICtzdGF0aWMgdm9pZCBuZnNfY29tbWl0X2VuZChzdHJ1Y3QgbmZzX21kc19jb21t aXRfaW5mbyAqY2luZm8pOw0KPiA+ID4gKw0KPiA+ID4gIGludCBuZnNfd3JpdGVwYWdlcyhzdHJ1 Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0DQo+ID4gPiB3cml0ZWJhY2tfY29udHJv bCAqd2JjKQ0KPiA+ID4gIHsNCj4gPiA+ICAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmct Pmhvc3Q7DQo+ID4gPiBAQCAtNzI5LDkgKzczMiwzNyBAQCBpbnQgbmZzX3dyaXRlcGFnZXMoc3Ry dWN0IGFkZHJlc3Nfc3BhY2UNCj4gPiA+ICptYXBwaW5nLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRy b2wgKndiYykNCj4gPiA+ICANCj4gPiA+ICAJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX1ZG U1dSSVRFUEFHRVMpOw0KPiA+ID4gIA0KPiA+ID4gLQlpb2MgPSBuZnNfaW9fY29tcGxldGlvbl9h bGxvYyhHRlBfS0VSTkVMKTsNCj4gPiA+IC0JaWYgKGlvYykNCj4gPiA+IC0JCW5mc19pb19jb21w bGV0aW9uX2luaXQoaW9jLCBuZnNfaW9fY29tcGxldGlvbl9jb21taXQsDQo+ID4gPiBpbm9kZSk7 DQo+ID4gPiArCXJjdV9yZWFkX2xvY2soKTsNCj4gPiA+ICsJaW9jID0gcmN1X2RlcmVmZXJlbmNl KE5GU19JKGlub2RlKS0+Y29tbWl0X2luZm8uaW9jKTsNCj4gPiA+ICsJaWYgKGlvYyAmJiBrcmVm X2dldF91bmxlc3NfemVybygmaW9jLT5yZWZjb3VudCkpIHsNCj4gPiA+ICsJCXJjdV9yZWFkX3Vu bG9jaygpOw0KPiA+ID4gKwkJLyogV2UndmUgc3VjY2Vzc2Z1bGx5IHBpZ2d5YmFja2VkIG9uIHRo ZSBhdHRhY2hlZCBpb2MNCj4gPiA+ICovDQo+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiArCQlyY3Vf cmVhZF91bmxvY2soKTsNCj4gPiA+ICsJCWlvYyA9IG5mc19pb19jb21wbGV0aW9uX2FsbG9jKEdG UF9LRVJORUwpOw0KPiA+ID4gKwkJaWYgKGlvYykgew0KPiA+ID4gKwkJCXN0cnVjdCBuZnNfaW9f Y29tcGxldGlvbiAqaW9jX3ByZXY7DQo+ID4gPiArDQo+ID4gPiArCQkJbmZzX2lvX2NvbXBsZXRp b25faW5pdChpb2MsDQo+ID4gPiBuZnNfaW9fY29tcGxldGlvbl9jb21taXQsDQo+ID4gPiArCQkJ CQkgICAgICAgaW5vZGUpOw0KPiA+ID4gKwkJCS8qIFRlbXBvcmFyaWx5IGVsZXZhdGUgcnBjc19v dXQgdG8gZW5zdXJlIGENCj4gPiA+IGNvbW1pdA0KPiA+ID4gKwkJCSAqIGNvbXBsZXRpb24gKndp bGwqIGhhcHBlbiBhZnRlciB3ZSBhdHRhY2gNCj4gPiA+IHRoaXMgaW9jLA0KPiA+ID4gKwkJCSAq IHNvIGl0ICp3aWxsKiBnZXQgYSBjaGFuY2UgdG8gZHJhaW4uDQo+ID4gPiArCQkJICovDQo+ID4g PiArCQkJYXRvbWljX2luYygmTkZTX0koaW5vZGUpLQ0KPiA+ID4gPiBjb21taXRfaW5mby5ycGNz X291dCk7DQo+ID4gPiArCQkJbmZzX2lvX2NvbXBsZXRpb25fZ2V0KGlvYyk7DQo+ID4gPiArCQkJ aW9jX3ByZXYgPSB4Y2hnKCZORlNfSShpbm9kZSktPmNvbW1pdF9pbmZvLmlvYywNCj4gPiA+ICsJ CQkJICAgIGlvYyk7DQo+ID4gPiArCQkJLyogaW9jX3ByZXYgaXMgbm9ybWFsbHkgTlVMTCwgYnV0 IHJhY2luZw0KPiA+ID4gd3JpdGVwYWdlcw0KPiA+ID4gKwkJCSAqIGNhbGxzIG1pZ2h0IHJlc3Vs dCBpbiBpdCBiZWluZyBub24tTlVMTC4NCj4gPiA+ICsJCQkgKiBJbiBlaXRoZXIgY2FzZSBpdCBp cyBzYWZlIHRvIHB1dCBpdCAtIHdvcnN0DQo+ID4gPiBjYXNlDQo+ID4gPiArCQkJICogd2UgZ2V0 IGFuIGV4dHJhIENPTU1JVC4NCj4gPiA+ICsJCQkgKi8NCj4gPiA+ICsJCQluZnNfaW9fY29tcGxl dGlvbl9wdXQoaW9jX3ByZXYpOw0KPiA+ID4gKwkJCS8qIHJlbGVhc2UgdGVtcG9yYXJ5IHJlZiBv biBycGNzX291dCAqLw0KPiA+ID4gKwkJCW5mc19jb21taXRfZW5kKCZORlNfSShpbm9kZSktPmNv bW1pdF9pbmZvKTsNCj4gPiANCj4gPiBTbyB3b24ndCB0aGlzIG5vcm1hbGx5IHRyaWdnZXIgdGhl IHhjaGcoTlVMTCkgaW4gbmZzX2NvbW1taXRfZW5kKCk/DQo+ID4gRm9yDQo+ID4gbW9zdCBjYXNl cywgSSdkIGV4cGVjdCBjb21taXRfaW5mby5ycGNzX291dCB0byBiZSB6ZXJvIHVudGlsIHdlDQo+ ID4gc3RhcnQNCj4gPiBhY3R1YWxseSBzZW5kaW5nIG91dCB0aGUgQ09NTUlUcy4NCj4gDQo+IE9u IHRoZSBmaXJzdCB3cml0ZXBhZ2VzIGNhbGwgYWZ0ZXIgYSBwZXJpb2Qgb2YgcXVpZXQsIHRoYXQg aXMgZXhhY3RseQ0KPiBjb3JyZWN0LiAgVGhlIGlvYyB0aGF0IHdlIGhhdmUganVzdCBhbGxvY2F0 ZWQgYW5kIGF0dGFjaGVkIHdpbGwNCj4gaW1tZWRpYXRlbHkgYmUgZGV0YWNoZWQuICBJdCB3aWxs IGhhdmUgYSByZWZjb3VudCBvZiAxIGF0IHRoaXMgcG9pbnQNCj4gc28NCj4gbm90aGluZyBmdXJ0 aGVyIGhhcHBlbnMuDQo+IFRoZW4gV1JJVEVzIGdldCBxdWV1ZWQgZWxldmF0aW5nIHRoZSByZWZj b3VudC4gIFRoaXMgd2lsbCBldmVudHVhbGx5DQo+IGRyYWluIGFuZCBhIENPTU1JVCB3aWxsIGJl IHNlbnQuICBTbyB0aGUgYmVoYXZpb3VyIGZvciB0aGUgZmlyc3RwYWdlcw0KPiBjYWxsIGlzIGV4 YWN0bHkgbGlrZSB0aGUgY3VycmVudCBjb2RlIChJIHRoaW5rIEkgbWVudGlvbmVkIHRoYXQgaW4N Cj4gdGhlDQo+IGNvbW1pdCBtZXNzYWdlKS4NCj4gSWYgdGhlIFdSSVRFcyBhbmQgQ09NTUlUIGNv bXBsZXRlIGJlZm9yZSB0aGUgbmV4dCAud3JpdGVwYWdlcywgdGhlbg0KPiB0aGF0DQo+IHdyaXRl cGFnZXMgd2lsbCBiZWhhdmUgdGhlIHNhbWUgd2F5Lg0KPiBCdXQgaWYgdGhlIFdSSVRFcyBvciBD T01NSVQgYXJlIHN0aWxsIHBlbmRpbmcsIHRoZW4gcnBjc19vdXQgd2lsbA0KPiBzdGlsbA0KPiBi ZSBlbGV2YXRlZC4uLi4NCj4gT25seSAtIG5vLiAgVW5hdHRhY2hlZCBpb2NzIGFyZSBtZWFudCB0 byBiZSBjb3VudGVkIGluIHJwY3Nfb3V0LCBidXQNCj4gSQ0KPiBoYXZlbid0IGdvdCB0aGF0IHJp Z2h0LiAgU28gd2UgY2FuIHN0aWxsIGVuZCB1cCB3aXRoIHBhcmFsbGVsDQo+IENPTU1JVHMuDQo+ IEkgdGhpbmsgdGhhdCBtaWdodCBleHBsYWluIHNvbWUgc2xpZ2h0bHkgb2RkIG51bWJlcnMgaW4g bXkgdGVzdGluZy4NCj4gDQo+IEhlcmUgaXMgdGhlIG5ldyB2ZXJzaW9uLg0KPiANCj4gVGhhbmtz IGZvciB0aGUgcmV2aWV3Lg0KPiANCj4gTmVpbEJyb3duDQo+IA0KPiBGcm9tOiBOZWlsQnJvd24g PG5laWxiQHN1c2UuZGU+DQo+IFN1YmplY3Q6IFtQQVRDSF0gTkZTOiBNaW5pbWl6ZSBDT01NSVQg Y2FsbHMgZHVyaW5nIHdyaXRlYmFjay4NCj4gDQo+IFNpbmNlIDQuMTMgKHNlZSBGaXhlczogY29t bWl0KSBORlMgaGFzIHNlbnQgYSBDT01NSVQgcmVxdWVzdCBmb3INCj4gZXZlcnkNCj4gLndyaXRl cGFnZXMoKSBjYWxsIGl0IHJlY2VpdmVkIC0gd2hlbiB0aGUgd3JpdGVzIHN1Ym1pdHRlZCBmb3Ig dGhhdA0KPiBjYWxsDQo+IGhhdmUgYWxsIGNvbXBsZXRlZC4NCj4gDQo+IFRoaXMgd29ya3Mgd2Vs bCBlbm91Z2ggd2hlbiBDT01NSVQgaXMgZmFzdCwgYnV0IGlmIENPTU1JVCBpcyBzbG93DQo+IHRo ZXNlDQo+IGNhbGxzIGNhbiBvdmVybGFwIGVhY2ggb3RoZXIsIG92ZXJsb2FkIHRoZSBzZXJ2ZXIs IGFuZCBzdWJzdGFudGlhbGx5DQo+IHJlZHVjZSB0aHJvdWdocHV0Lg0KPiANCj4gSSBsb29rZWQg YXQgdGhpcyBkdWUgdG8gYSByZXBvcnQgb2YgcmVncmVzc2lvbiB3aGVuIHdyaXRpbmcgdG8gYQ0K PiBHYW5lc2hhDQo+IE5GUyBzZXJ2ZXIgd2l0aCB0cmFjaW5nIHNob3dpbmcgbXVsdGlwbGUgb3Zl cmxhcHBpbmcgQ09NTUlUcywgYW5kDQo+IGluZGl2aWR1YWwgY29tbWl0cyB0eXBpY2FsbHkgdGFr aW5nIDIwMG1zIHRvIDMwMG1zLiAgVGhpcyByZXN1bHRlZCBpbg0KPiAyDQo+IG9yZGVycyBvZiBt YWduaXR1ZGUgc2xvdyBkb3duIHdoZW4gd3JpdGluZyAxMDAweDFNIGZyb20gL2Rldi96ZXJvDQo+ IHdpdGggZGQuDQo+IFRoaXMgaXMgZWFzaWx5IHJlcHJvZHVjZWQgYnkgYWRkaW5nICdtc2xlZXAo MzAwKScgdG8gbmZzZF9jb21taXQoKSBpbg0KPiB0aGUNCj4gTGludXggTkZTIHNlcnZlci4NCj4g DQo+IFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgZGV0YWlscyBvZiB3aGVuIENPTU1JVCBpcyBzZW50 IHdpdGhvdXQNCj4gY2hhbmdpbmcNCj4gdGhlIGdlbmVyYWwgYXBwcm9hY2guDQo+IA0KPiBXaGVy ZSBwcmV2aW91c2x5IHRoZSB3cml0ZXMgZnJvbSBhIHNpbmdsZSAud3JpdGVwYWdlcygpIGNhbGwg d2VyZQ0KPiBhY2NvdW50ZWQgdG9nZXRoZXIgaW4gYSBuZnNfaW9fY29tcGxldGlvbiwgbm93IHRo ZSB3cml0ZXMgZnJvbQ0KPiBtdWx0aXBsZQ0KPiB3cml0ZXBhZ2VzKCkgY2FsbHMgYXJlIGFjY291 bnRlZCB0b2dldGhlci4gIFRoZSBzZXQgb2Ygd3JpdGVwYWdlcw0KPiBjYWxscw0KPiB0aGF0IGFy ZSBncm91cGVkIHRvZ2V0aGVyIGFyZSBhbGwgdGhvc2UgZnJvbSB3aGVuIG9uZSBDT01NSVQgY2Fs bA0KPiBlbmRzDQo+IHRvIHdoZW4gdGhlIG5leHQgQ09NTUlUIGNhbGwgZW5kcy4gIFRoaXMgYXV0 b21hdGljYWxseSByZWR1Y2VzIHRoZQ0KPiByYXRlDQo+IG9mIENPTU1JVCByZXF1ZXN0cyB3aGVu IENPTU1JVCBpdHNlbGYgaXMgc2xvdy4NCj4gKElmIHRoZXJlIGFyZSBubyBDT01NSVQgY2FsbHMg cGVuZGluZywgdGhlIGZpcnN0IC53cml0ZXBhZ2VzIHdpbGwgZ2V0DQo+ICBhbiBuZnNfaW9fY29t cGxldGlvbiB0byBpdHNlbGYsIHRoZW4gc3Vic2VxdWVuY3Qgd3JpdGVwYWdlcyByZXF1ZXN0cw0K PiAgdW50aWwgdGhlIGZpcnN0IENPTU1JVCBjb21wbGV0ZXMgd2lsbCBnbyBpbiB0aGUgbmV4dA0K PiBuZnNfaW9fY29tcGxldGlvbikNCj4gDQo+IFRoZXJlIGFyZSB0eXBpY2FsbHkgYXQgbW9zdCB0 d28gbmZzX2lvX2NvbXBsZXRpb24gc3RydWN0dXJlcw0KPiBhbGxvY2F0ZWQNCj4gZm9yIHdyaXRl YmFjayB0byBhIGdpdmVuIGlub2RlLg0KPiANCj4gLSBJZiB0aGVyZSB3YXMgYmVlbiBhbnkgd3Jp dGVwYWdlcyBjYWxscyBzaW5jZSB0aGUgbGFzdCB0aW1lIGEgQ09NTUlUDQo+ICAgY29tcGxldGVk LCB0aGVyZSB3aWxsIGJlIGFuIG5mc19pb19jb21wbGV0aW9uIHN0b3JlZCBpbiB0aGUgaW5vZGUN Cj4gKGluDQo+ICAgbmZzX21kc19jb21taXRfaW5mbykgd2hpY2ggbmV3IHdyaXRlcGFnZXMgcmVx dWVzdHMgYXJlIGFjY291bnRlZA0KPiBpdC4NCj4gDQo+IC0gSWYgdGhlcmUgaXMgbm8gcGVuZGlu ZyBDT01NSVQgcmVxdWVzdCwgYnV0IHRoZXJlIGFyZSBwZW5kaW5nDQo+IHdyaXRlYmFjaw0KPiAg IFdSSVRFUywgdGhlcmUgd2lsbCBiZSBhbm90aGVyIG5mc19pb19jb21wbGV0aW9uIHdoaWNoIGlz IG5vdA0KPiBhdHRhY2hlZA0KPiAgIGFuZCB3aGljaCBpcyBkcmFpbmluZy4gIFdoZW4gaXQgZnVs bHkgZHJhaW5zIGEgQ09NTUlUIHdpbGwgYmUgc2VudC4NCj4gICBXaGVuIHRoYXQgQ09NTUlUIGNv bXBsZXRlcywgdGhlIGF0dGFjaGVkIG5mc19pb19jb21wbGV0aW9uIHdpbGwgYmUNCj4gICBkZXRh Y2hlZCBhbmQgYWxsb3dlZCB0byBkcmFpbi4NCj4gDQo+IFRoZSBycGNzX291dCBjb3VudGVyIG5v dyBjb3VudHMgdGhlIHVuYXR0YWNoZWQgbmZzX2lvX2NvbXBsZXRpb24gYXMNCj4gd2VsbA0KPiBh cyBhbnkgcGVuZGluZyBDT01NSVQgcmVxdWVzdHMuICBBcyBhbiB1bmF0dGFjaGVkIG5mc19pb19j b21wbGV0aW9uDQo+IHdpbGwNCj4gc29vbiB0dXJuIGludG8gYSBDT01NSVQgcmVxdWVzdCwgdGhp cyBzZWVtcyByZWFzb25hYmxlLiAgSXQgYWxsb3dzIHVzDQo+IHRvDQo+IGNsZWFybHkgZGV0ZWN0 IHdoZW4gdGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgQ09NTUlUcyBleHBlY3RlZCB0bw0KPiBjb21w bGV0ZSwgc28gd2Uga25vdyB0byBkZXRhY2ggYW55IG5mc19pb19jb21wbGV0aW9uIGZyb20gdGhl IGlub2RlDQo+IGFuZA0KPiBhbGxvdyBpdCB0byBkcmFpbi4NCj4gDQo+IEFzIHdlIHVzZSBhdG9t aWMgYWNjZXNzZXMgKGUuZy4gIHhjaGcgYW5kIGtyZWZfZ2V0X3VubGVzc196ZXJvKCkpIHRvDQo+ IGFjY2VzcyB0aGUgYXR0YWNoZWQgbmZzX2lvX2NvbXBsZXRpb24sIHdlIG5vdyB1c2Uga2ZyZWVf cmN1KCkgdG8gZnJlZQ0KPiBpdCwgdG8gZW5zdXJlIGl0IGlzIG5vdCBhY2Nlc3NlZCBhZnRlciBp dCBpcyBmcmVlZC4NCj4gDQo+IFdpdGggMzAwbXMgY29tbWl0cywgdGhpcyBpbXByb3ZlcyB0aHJv dWdodCBvZiBhIDFHIGRkIGJ5IDIgb3JkZXJzIG9mDQo+IG1hZ25pdHVkZS4gIEV2ZW4gd2l0aG91 dCB0aGUgMzAwbXMgZGVsYXksIHRoaXMgbm90aWNlYWJseSBpbXByb3Zlcw0KPiB0aHJvdWdocHV0 IHRvIGEgTGludXggTkZTIHNlcnZlciBpcyBhIHNpbXBsZSBWTS4NCj4gDQo+IEZpeGVzOiA5MTll M2JkOWE4NzUgKCJORlM6IEVuc3VyZSB3ZSBjb21taXQgYWZ0ZXIgd3JpdGViYWNrIGlzDQo+IGNv bXBsZXRlIikNCj4gU2lnbmVkLW9mZi1ieTogTmVpbEJyb3duIDxuZWlsYkBzdXNlLmRlPg0KPiAt LS0NCj4gIGZzL25mcy9pbm9kZS5jICAgICAgICAgIHwgIDEgKw0KPiAgZnMvbmZzL3dyaXRlLmMg ICAgICAgICAgfCA2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+IC0t LS0NCj4gIGluY2x1ZGUvbGludXgvbmZzX3hkci5oIHwgIDcgKysrKysNCj4gIDMgZmlsZXMgY2hh bmdlZCwgNzEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQg YS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jDQo+IGluZGV4IDExYmYxNTgwMGFjOS4u YzAwYjU0NDkxOTQ5IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvaW5vZGUuYw0KPiArKysgYi9mcy9u ZnMvaW5vZGUuYw0KPiBAQCAtMjExMCw2ICsyMTEwLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNl KHZvaWQgKmZvbykNCj4gIAlJTklUX0xJU1RfSEVBRCgmbmZzaS0+Y29tbWl0X2luZm8ubGlzdCk7 DQo+ICAJYXRvbWljX2xvbmdfc2V0KCZuZnNpLT5ucmVxdWVzdHMsIDApOw0KPiAgCWF0b21pY19s b25nX3NldCgmbmZzaS0+Y29tbWl0X2luZm8ubmNvbW1pdCwgMCk7DQo+ICsJbmZzaS0+Y29tbWl0 X2luZm8uaW9jID0gTlVMTDsNCj4gIAlhdG9taWNfc2V0KCZuZnNpLT5jb21taXRfaW5mby5ycGNz X291dCwgMCk7DQo+ICAJaW5pdF9yd3NlbSgmbmZzaS0+cm1kaXJfc2VtKTsNCj4gIAltdXRleF9p bml0KCZuZnNpLT5jb21taXRfbXV0ZXgpOw0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMg Yi9mcy9uZnMvd3JpdGUuYw0KPiBpbmRleCBjNDc4Yjc3MmNjNDkuLjZkYmIwNTVmODBiZiAxMDA2 NDQNCj4gLS0tIGEvZnMvbmZzL3dyaXRlLmMNCj4gKysrIGIvZnMvbmZzL3dyaXRlLmMNCj4gQEAg LTQ3LDYgKzQ3LDcgQEAgc3RydWN0IG5mc19pb19jb21wbGV0aW9uIHsNCj4gIAl2b2lkICgqY29t cGxldGUpKHZvaWQgKmRhdGEpOw0KPiAgCXZvaWQgKmRhdGE7DQo+ICAJc3RydWN0IGtyZWYgcmVm Y291bnQ7DQo+ICsJc3RydWN0IHJjdV9oZWFkIHJjdTsNCj4gIH07DQo+ICANCj4gIC8qDQo+IEBA IC0xMzQsNyArMTM1LDcgQEAgc3RhdGljIHZvaWQgbmZzX2lvX2NvbXBsZXRpb25fcmVsZWFzZShz dHJ1Y3Qga3JlZg0KPiAqa3JlZikNCj4gIAlzdHJ1Y3QgbmZzX2lvX2NvbXBsZXRpb24gKmlvYyA9 IGNvbnRhaW5lcl9vZihrcmVmLA0KPiAgCQkJc3RydWN0IG5mc19pb19jb21wbGV0aW9uLCByZWZj b3VudCk7DQo+ICAJaW9jLT5jb21wbGV0ZShpb2MtPmRhdGEpOw0KPiAtCWtmcmVlKGlvYyk7DQo+ ICsJa2ZyZWVfcmN1KGlvYywgcmN1KTsNCj4gIH0NCj4gIA0KPiAgc3RhdGljIHZvaWQgbmZzX2lv X2NvbXBsZXRpb25fZ2V0KHN0cnVjdCBuZnNfaW9fY29tcGxldGlvbiAqaW9jKQ0KPiBAQCAtNzE1 LDkgKzcxNiwxNSBAQCBzdGF0aWMgaW50IG5mc193cml0ZXBhZ2VzX2NhbGxiYWNrKHN0cnVjdCBw YWdlDQo+ICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKg0KPiAgCXJldHVybiByZXQ7 DQo+ICB9DQo+ICANCj4gK3N0YXRpYyB2b2lkIG5mc19jb21taXRfZW5kKHN0cnVjdCBuZnNfbWRz X2NvbW1pdF9pbmZvICpjaW5mbyk7DQo+ICsNCj4gIHN0YXRpYyB2b2lkIG5mc19pb19jb21wbGV0 aW9uX2NvbW1pdCh2b2lkICppbm9kZSkNCj4gIHsNCj4gIAluZnNfY29tbWl0X2lub2RlKGlub2Rl LCAwKTsNCj4gKwkvKiB0aGlzIGNhbWUgZnJvbSBhIGRldGFjaGVkIG5mc19pb19jb21wbGV0aW9u LCB3aGljaCBpcyBub3cNCj4gKwkgKiBubyBsb25nZXIgYWN0aXZlLCBzbyBtdXN0IGRlY3JlbWVu dCBycGNzX291dC4NCj4gKwkgKi8NCj4gKwluZnNfY29tbWl0X2VuZCgmTkZTX0koaW5vZGUpLT5j b21taXRfaW5mbyk7DQo+ICB9DQo+ICANCj4gIGludCBuZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRk cmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0DQo+IHdyaXRlYmFja19jb250cm9sICp3YmMpDQo+ IEBAIC03MjksOSArNzM2LDQ2IEBAIGludCBuZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19z cGFjZQ0KPiAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpDQo+ICANCj4g IAluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfVkZTV1JJVEVQQUdFUyk7DQo+ICANCj4gLQlp b2MgPSBuZnNfaW9fY29tcGxldGlvbl9hbGxvYyhHRlBfS0VSTkVMKTsNCj4gLQlpZiAoaW9jKQ0K PiAtCQluZnNfaW9fY29tcGxldGlvbl9pbml0KGlvYywgbmZzX2lvX2NvbXBsZXRpb25fY29tbWl0 LA0KPiBpbm9kZSk7DQo+ICsJcmN1X3JlYWRfbG9jaygpOw0KPiArCWlvYyA9IHJjdV9kZXJlZmVy ZW5jZShORlNfSShpbm9kZSktPmNvbW1pdF9pbmZvLmlvYyk7DQo+ICsJaWYgKGlvYyAmJiBrcmVm X2dldF91bmxlc3NfemVybygmaW9jLT5yZWZjb3VudCkpIHsNCj4gKwkJcmN1X3JlYWRfdW5sb2Nr KCk7DQo+ICsJCS8qIFdlJ3ZlIHN1Y2Nlc3NmdWxseSBwaWdneWJhY2tlZCBvbiB0aGUgYXR0YWNo ZWQgaW9jDQo+ICovDQo+ICsJfSBlbHNlIHsNCj4gKwkJcmN1X3JlYWRfdW5sb2NrKCk7DQo+ICsJ CWlvYyA9IG5mc19pb19jb21wbGV0aW9uX2FsbG9jKEdGUF9LRVJORUwpOw0KPiArCQlpZiAoaW9j KSB7DQo+ICsJCQlzdHJ1Y3QgbmZzX2lvX2NvbXBsZXRpb24gKmlvY19wcmV2Ow0KPiArDQo+ICsJ CQluZnNfaW9fY29tcGxldGlvbl9pbml0KGlvYywNCj4gbmZzX2lvX2NvbXBsZXRpb25fY29tbWl0 LA0KPiArCQkJCQkgICAgICAgaW5vZGUpOw0KPiArCQkJLyogVGhpcyBpcyBub3cgYSBkZXRhY2hl ZCBpb2Mgc28gd2UgY291bnQgaXQgaW4NCj4gKwkJCSAqIHJwY3Nfb3V0LiAgKkFmdGVyKiB3ZSBz dWNjZXNzZnVsbHkgYXR0YWNoIGl0DQo+ICsJCQkgKiBiZWxvdyAobGlrZWx5LCBidXQgbm90IGNl cnRhaW4pLCB3ZSB3aWxsDQo+IGNhbGwNCj4gKwkJCSAqIG5mc19jb21taXRfZW5kKCkgd2hpY2gg bWlnaHQgZGV0YWNoIGl0DQo+IGltbWVkYXRlbHkNCj4gKwkJCSAqIGlmIHRoZXJlIGFyZSBubyBv dXRzdGFuZGluZyBjb21taXQuDQo+ICsJCQkgKi8NCj4gKwkJCWF0b21pY19pbmMoJk5GU19JKGlu b2RlKS0NCj4gPmNvbW1pdF9pbmZvLnJwY3Nfb3V0KTsNCg0KY29tbWl0X2luZm8ucnBjc19vdXQg aXMgdGhlcmUgaW4gb3JkZXIgdG8gY291bnQgdGhlIG51bWJlciBvZg0Kb3V0c3RhbmRpbmcgQ09N TUlUcy4gSSdtIG5vdCBzZWVpbmcgd2h5IHdlIG5lZWQgdG8gY2hhbmdlIHRoYXQNCmRlZmluaXRp b24sIHBhcnRpY3VsYXJseSBnaXZlbiB0aGF0IHRoZXJlIGNhbiBiZSBwcm9jZXNzZXMgb3V0IHRo ZXJlDQp0aGF0IGFyZSB0cnlpbmcgdG8gd2FpdCBmb3IgdGhlIGNvdW50IHRvIGdvIHRvIHplcm8u DQoNClRoZSBJL08gY29tcGxldGlvbiBzdHJ1Y3R1cmUgYWxyZWFkeSBoYXMgaXRzIG93biByZWZl cmVuY2UgY291bnRlciwgYW5kDQpJIGNhbiBzZWUgbm90aGluZyBzdG9wcGluZyB5b3UgZnJvbSBt b2RpZnlpbmcNCm5mc19pb19jb21wbGV0aW9uX2NvbW1pdCgpIHRvIGRvIHRoZSBzYW1lIHRoaW5n cyB5b3UgYXJlIHRyeWluZyB0byBkbw0KaW4gbmZzX2NvbW1pdF9lbmQoKSBoZXJlLg0KDQpIb3dl dmVyIGFzIEkgc2FpZCwgSSBoYXZlIG15IGRvdWJ0cyBhcyB0byB3aGV0aGVyIG9yIG5vdCB0aGlz IGlzIGEgZ29vZA0KaWRlYS4gSXQgc291bmRzIHRvIG1lIGFzIGlmIHlvdSdyZSB0cnlpbmcgdG8g Zml4IGEgbWVtb3J5IG1hbmFnZW1lbnQNCmxheWVyIHByb2JsZW0gaW4gdGhlIE5GUyBsYXllci4N Cg0KPiArCQkJbmZzX2lvX2NvbXBsZXRpb25fZ2V0KGlvYyk7DQo+ICsJCQlpb2NfcHJldiA9IHhj aGcoJk5GU19JKGlub2RlKS0+Y29tbWl0X2luZm8uaW9jLA0KPiArCQkJCSAgICBpb2MpOw0KPiAr CQkJLyogaW9jX3ByZXYgaXMgbm9ybWFsbHkgTlVMTCwgYnV0IHJhY2luZw0KPiB3cml0ZXBhZ2Vz DQo+ICsJCQkgKiBjYWxscyBtaWdodCByZXN1bHQgaW4gaXQgYmVpbmcgbm9uLU5VTEwuDQo+ICsJ CQkgKiBJbiBlaXRoZXIgY2FzZSBpdCBpcyBzYWZlIHRvIHB1dCBpdCAtIHdvcnN0DQo+IGNhc2UN Cj4gKwkJCSAqIHdlIGdldCBhbiBleHRyYSBDT01NSVQuDQo+ICsJCQkgKi8NCj4gKwkJCWlmIChp b2NfcHJldikNCj4gKwkJCQkvKiBUaGlzIGlvY19wcmV2IGlzIG5vdyBkZXRhY2hlZCwgc28NCj4g cHV0IGl0LCBhbmQNCj4gKwkJCQkgKiBrZWVwIHRoZSByZWYgb24gcnBjc19vdXQNCj4gKwkJCQkg Ki8NCj4gKwkJCQluZnNfaW9fY29tcGxldGlvbl9wdXQoaW9jX3ByZXYpOw0KPiArCQkJZWxzZQ0K PiArCQkJCS8qIEF0dGFjaG1lbnQgc3VjY2Vzc2Z1bCwgc28gZHJvcCByZWYNCj4gKwkJCQkgKiBv biBycGNzX291dA0KPiArCQkJCSAqLw0KPiArCQkJCW5mc19jb21taXRfZW5kKCZORlNfSShpbm9k ZSktDQo+ID5jb21taXRfaW5mbyk7DQo+ICsJCX0NCj4gKwl9DQo+ICANCj4gIAluZnNfcGFnZWlv X2luaXRfd3JpdGUoJnBnaW8sIGlub2RlLCB3Yl9wcmlvcml0eSh3YmMpLCBmYWxzZSwNCj4gIAkJ CQkmbmZzX2FzeW5jX3dyaXRlX2NvbXBsZXRpb25fb3BzKTsNCj4gQEAgLTE2NzcsOCArMTcyMSwy MSBAQCBzdGF0aWMgdm9pZCBuZnNfY29tbWl0X2JlZ2luKHN0cnVjdA0KPiBuZnNfbWRzX2NvbW1p dF9pbmZvICpjaW5mbykNCj4gIA0KPiAgc3RhdGljIHZvaWQgbmZzX2NvbW1pdF9lbmQoc3RydWN0 IG5mc19tZHNfY29tbWl0X2luZm8gKmNpbmZvKQ0KPiAgew0KPiAtCWlmIChhdG9taWNfZGVjX2Fu ZF90ZXN0KCZjaW5mby0+cnBjc19vdXQpKQ0KPiAtCQl3YWtlX3VwX3ZhcigmY2luZm8tPnJwY3Nf b3V0KTsNCj4gKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2luZm8tPnJwY3Nfb3V0KSkgew0K PiArCQkvKiBXaGVuIGEgY29tbWl0IGZpbmlzaGVzLCB3ZSBtdXN0IHJlbGVhc2UgYW55IGF0dGFj aGVkDQo+ICsJCSAqIG5mc19pb19jb21wbGV0aW9uIHNvIHRoYXQgaXQgY2FuIGRyYWluIGFuZCB0 aGVuDQo+IHJlcXVlc3QNCj4gKwkJICogYW5vdGhlciBjb21taXQuDQo+ICsJCSAqLw0KPiArCQlz dHJ1Y3QgbmZzX2lvX2NvbXBsZXRpb24gKmlvYzsNCj4gKw0KPiArCQlpb2MgPSB4Y2hnKCZjaW5m by0+aW9jLCBOVUxMKTsNCj4gKwkJaWYgKGlvYykgew0KPiArCQkJLyogQ291bnQgdGhlIGRldGFj aGVkIGNvbXBsZXRpb24gKi8NCj4gKwkJCWF0b21pY19pbmMoJmNpbmZvLT5ycGNzX291dCk7DQo+ ICsJCQluZnNfaW9fY29tcGxldGlvbl9wdXQoaW9jKTsNCj4gKwkJfSBlbHNlDQo+ICsJCQl3YWtl X3VwX3ZhcigmY2luZm8tPnJwY3Nfb3V0KTsNCj4gKwl9DQo+ICB9DQo+ICANCj4gIHZvaWQgbmZz X2NvbW1pdGRhdGFfcmVsZWFzZShzdHJ1Y3QgbmZzX2NvbW1pdF9kYXRhICpkYXRhKQ0KPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc194ZHIu aA0KPiBpbmRleCA5NGM3N2VkNTVjZTEuLjg5ZGIxZTlkNDYxZCAxMDA2NDQNCj4gLS0tIGEvaW5j bHVkZS9saW51eC9uZnNfeGRyLmgNCj4gKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgNCj4g QEAgLTE1NTcsOSArMTU1NywxNiBAQCBzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyIHsNCj4gIH07DQo+ ICANCj4gIHN0cnVjdCBuZnNfbWRzX2NvbW1pdF9pbmZvIHsNCj4gKwkvKiBycGNzX291dCBjb3Vu dHMgcGVuZGluZyBDT01NSVQgcnBjcyBwbHVzIHBlbmRuZw0KPiBuZnNfaW9fY29tcGxldGlvbnMN Cj4gKwkgKiB3aGljaCBhcmUgKm5vdCogYXR0YWNoZWQgYXQgJ2lvYycgYmVsb3cuICBTdWNoDQo+ IG5mc19pb19jb21wbGVpb25zDQo+ICsJICogKG5vcm1hbGx5IGF0IG1vc3Qgb25lKSB3aWxsIGRy YWluIGFzIHdyaXRlcyBjb21wbGV0ZSBhbmQNCj4gdGhlbiB0cmlnZ2VyDQo+ICsJICogYSBDT01N SVQsIHNvIHRoZXkgY2FuIGJlIGNvbnNpZGVyZWQgYXMgcGVuZGluZyBDT01NSVRzIHdoaWNoDQo+ IGhhdmVuJ3QNCj4gKwkgKiBiZWVuIHNlbnQgeWV0DQo+ICsJICovDQo+ICAJYXRvbWljX3QgcnBj c19vdXQ7DQo+ICAJYXRvbWljX2xvbmdfdAkJbmNvbW1pdDsNCj4gIAlzdHJ1Y3QgbGlzdF9oZWFk CWxpc3Q7DQo+ICsJc3RydWN0IG5mc19pb19jb21wbGV0aW9uICppb2M7DQo+ICB9Ow0KPiAgDQo+ ICBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvOw0KLS0gDQpUcm9uZCBNeWtsZWJ1c3QNCkxpbnV4IE5G UyBjbGllbnQgbWFpbnRhaW5lciwgSGFtbWVyc3BhY2UNCnRyb25kLm15a2xlYnVzdEBoYW1tZXJz cGFjZS5jb20NCg0KDQo=