Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp633480pxb; Wed, 11 Nov 2020 12:11:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJwnzfE58rOUHEyf+spToRfcF5/KA6bMCDc7a0n0xRC7M/SBLy5JhcfCjIJbFDAZ3tEVfPCz X-Received: by 2002:a50:9fcb:: with SMTP id c69mr1274861edf.289.1605125501746; Wed, 11 Nov 2020 12:11:41 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1605125501; cv=pass; d=google.com; s=arc-20160816; b=ys2WNQx7A922d9L4NVr8c6RjfAupS/wAhc+Ru7I41Z6SNbIlJqA+gDQP+nvdoFqriq RiGZEs0LVluS+97guFBbCfOT2DQchvDSiTNTYQIND2zFU98nCqfWzregI728mL6IczHO WqgmSmMS1mkfxP5sTxNHIzowFmV4Wiq+Wk9S2qvauN5Ihb3HiUVZRaLdKIDUFbRdrhKn lODpu8tfNQEijGop+ica/NalCmKhhKkPcVMKm1VTyKqxzFlv4X7B+k3stwq2U4PrLppP hU6kyG2OgBbhunqY2wItHYQnm+6yglEdYcU2KBR5ehcPlqcg2sLKfhE6UjvRSQQGSBfN /iFg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence: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=HHjf0QJFeYba1Z0bWsG3/kTX/Bpin0qrpFEEtfije34=; b=g8ORN2N82WZNCXuyd3LmREpAA2byAcLJXdCn5yT+jif3ZPO3guN5bYQ/jowdtNK6wM 5YtQLHdfk95Ts66lEDHRK2pB3mZKWpWnPXGx3d6ULssieo6DPr26D68ObsAHha8w8cVB ZaQeOF+XOmQmi3+Ti+54WGgiKXvxNUiNpgOUkVsJu9NSaLn8FUhcr7vSv9e1mhRU796u vCz1dEnd++hiwk1bAHrsBtGYCrgJgSZtPGCjVW98akdTxtuISFGWvan2SwcN20ojnFqi OqHmP1YQCvwhsewaQuoYuM221LdtDjdvQLy+LC02plwf0D/dHf6RMtpI1sONLycAh7gN gzhA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@hammerspace.com header.s=selector2 header.b=V38yfocj; arc=pass (i=1 spf=pass spfdomain=hammerspace.com dkim=pass dkdomain=hammerspace.com dmarc=pass fromdomain=hammerspace.com); spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id gn11si2119756ejc.638.2020.11.11.12.11.15; Wed, 11 Nov 2020 12:11:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@hammerspace.com header.s=selector2 header.b=V38yfocj; arc=pass (i=1 spf=pass spfdomain=hammerspace.com dkim=pass dkdomain=hammerspace.com dmarc=pass fromdomain=hammerspace.com); spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 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 S1725895AbgKKULM (ORCPT + 99 others); Wed, 11 Nov 2020 15:11:12 -0500 Received: from mail-dm6nam08on2132.outbound.protection.outlook.com ([40.107.102.132]:45472 "EHLO NAM04-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725860AbgKKULL (ORCPT ); Wed, 11 Nov 2020 15:11:11 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EeAFHM40h/89Lj+zm3WRv6mK+KB1YHSF7nZB5XS5Ii+oxBGM2SHm9A2ZoyN4vVAMuI4GEnf8Hl9OJPJ+lPv8Y4m8DXDLtcS/BH23m40ctA5vp6FIq/pasJiAFNZfVJ2aQ64vrCXa8T3iSAm1GIwy6pmhv2/+LxSKDE4gjq59JGRVWXnAFZU/SN+oO88U0lvOsavyDqHyVnKGGfqxXSV9dnbMYC8PSofNroaQn/x+GZ3Fd5xcfzKgY7FkZy9fNZLh3qXr+2NnjD5i2C7PYF00yuati5QzJMUHspfeM8HcGzRTIncW5+A5prmqhPglQyB2g+sNYTBZlqZASQe16zNEQg== 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=HHjf0QJFeYba1Z0bWsG3/kTX/Bpin0qrpFEEtfije34=; b=jKbU5Q7kBwjwyYGgEWZKdRAZmTUYMNY9fC/7/JTDlnphFIEBgJsMCoHMQfSIuYOAxKyRCjspJf3omXangRkiEzBKhGreupYjMyczz8LfgT76E7Z/PT0ATvlgcXFmMQwgR9OglvEBC5rQmCLagA5K9EnDZ6/Z2K0NJc4MLs060U85rO5aleU8JZ8OgJJxqnruXaGvRYnc2JOm3BEviDGFls+B+hviOj9UEjGzHhBXQBK59efy8BOT3A9ep+V/4+p7Xq9mbXeeYF0Ntq+wt1exeM9wz42+ylX26cdFL1DOOJxnDHdSJmHeqWJGQx0ZI0FK9frWUWf+RBYb5zWBjcP5vA== 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=HHjf0QJFeYba1Z0bWsG3/kTX/Bpin0qrpFEEtfije34=; b=V38yfocj6NV3Dpc0VVoZwdR+xV3t+0IUtayNaFmg9awHroBs8PmdLC7iyZpRwi3Q+FDor1/07/oA/R61AzQknn4Ec3G36BsLEuyb4W4TKwt4C8IQVTcN9cLpnMG2K3m8VJAXSg5npkNHp0KVRAEMYM0PHrg5HGtfoYmekDSJSFE= Received: from MN2PR13MB3957.namprd13.prod.outlook.com (2603:10b6:208:263::11) by MN2PR13MB2591.namprd13.prod.outlook.com (2603:10b6:208:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3564.13; Wed, 11 Nov 2020 20:11:06 +0000 Received: from MN2PR13MB3957.namprd13.prod.outlook.com ([fe80::e989:f666:131a:e210]) by MN2PR13MB3957.namprd13.prod.outlook.com ([fe80::e989:f666:131a:e210%9]) with mapi id 15.20.3541.018; Wed, 11 Nov 2020 20:11:06 +0000 From: Trond Myklebust To: "bcodding@redhat.com" CC: "linux-nfs@vger.kernel.org" Subject: Re: [PATCH v4 21/21] NFS: Do uncached readdir when we're seeking a cookie in an empty page cache Thread-Topic: [PATCH v4 21/21] NFS: Do uncached readdir when we're seeking a cookie in an empty page cache Thread-Index: AQHWtRA6iwOeaceJLkybCI7SueOQ/6nAV/UAgAABg4CAAs/9gIAADjAAgAAm2oCAAATxAA== Date: Wed, 11 Nov 2020 20:11:06 +0000 Message-ID: References: <20201107140325.281678-1-trondmy@kernel.org> <20201107140325.281678-2-trondmy@kernel.org> <20201107140325.281678-3-trondmy@kernel.org> <20201107140325.281678-4-trondmy@kernel.org> <20201107140325.281678-5-trondmy@kernel.org> <20201107140325.281678-6-trondmy@kernel.org> <20201107140325.281678-7-trondmy@kernel.org> <20201107140325.281678-8-trondmy@kernel.org> <20201107140325.281678-9-trondmy@kernel.org> <20201107140325.281678-10-trondmy@kernel.org> <20201107140325.281678-11-trondmy@kernel.org> <20201107140325.281678-12-trondmy@kernel.org> <20201107140325.281678-13-trondmy@kernel.org> <20201107140325.281678-14-trondmy@kernel.org> <20201107140325.281678-15-trondmy@kernel.org> <20201107140325.281678-16-trondmy@kernel.org> <20201107140325.281678-17-trondmy@kernel.org> <20201107140325.281678-18-trondmy@kernel.org> <20201107140325.281678-19-trondmy@kernel.org> <20201107140325.281678-20-trondmy@kernel.org> <20201107140325.281678-21-trondmy@kernel.org> <20201107140325.281678-22-trondmy@kernel.org> <86F25343-0860-44A2-BA40-CFB640147D50@redhat.com> <6D043238-4C98-41B9-A890-B0897E7EFDBA@redhat.com> <4e92cc94e4b10b42aee30e198c6474c72564cbaa.camel@hammerspace.com> <80F65B51-35C0-4849-A3EB-691CDD8F4B0A@redhat.com> In-Reply-To: <80F65B51-35C0-4849-A3EB-691CDD8F4B0A@redhat.com> Accept-Language: en-US, en-GB Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=hammerspace.com; x-originating-ip: [68.36.133.222] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5b7ea259-20ba-4c6f-967a-08d8867dec40 x-ms-traffictypediagnostic: MN2PR13MB2591: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: PJR079eQKk2rTEIsNr+OWimuAjGNg83JtYeBZ4htQWVIHSzV6b4pkmjhxzfYV5ehBb5+rDkCTpiTHE5sxppfwibq9BEt0vRG4CloREwf04U46bEcB5pVgxOBJ3gBl9Ztteb5chh3WrwG3/+5I9Ff3qxO2cF04Oj0zfDiJXmSfRGkGkphtmQvINkwEJG3FlH8RhJr3uvAlnjR+wKXa9NBW/iHADaeSP0/CwWoakNiuG41BqlmlL3IEAPdVCCVeOS5wZqRZsaXxaQkzxuNzQX6Hzl4/Y32klsxF2EI+GozIXiC5k+DBG/o9eYjrB1zQ75mM3eUXRT6EehOscPi2zjzJG+GbFwPyG6xIxMfb6A1p5s= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR13MB3957.namprd13.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(366004)(346002)(39840400004)(376002)(136003)(86362001)(478600001)(15974865002)(91956017)(316002)(6512007)(66476007)(8936002)(6486002)(66946007)(5660300002)(66556008)(64756008)(76116006)(6506007)(2616005)(4326008)(36756003)(8676002)(53546011)(66446008)(71200400001)(6916009)(186003)(26005)(2906002)(83380400001)(4001150100001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: L21hC1xqmJGo2cUKX9XKD0JrINpl20vMs7akYwmZCOCqU6xKk368VWf17TW2VNaI9cYUgAjo4JBfcSPcJvZglAYXx4z9LVKKKP24fKdbsSlF/w2Sz69YFrP1wkRhuDIM8WNxWFYZc+ZXt8qdwqQBuoCnWSsM6tr0y7Kh5pGJrpp2NZfEL+cRPsLrJhGGyPVIyRJknM8d2XPoeOP7sW2P02qAxd0dM6jIpEHQOfk7vOvQm4lGBOYG1NT5iYf+Rnar49kyMD7RSVuy/lOvD8fdoHCL+Uocx/uEyZgjFsqf+yEtCXwCyrVPth9onXCja9UiTZMpxKSNNVqLoVL7No8O35/O0NIXK0raIYpwgS+psLUYZrqzQXlmuEa6YiFzYPub/lLioXOd+5RWQwMGl/+PCc++EoW3rezrhJDjLCuLrN17zy1YGpM4TUyavGrTS1bw8WkFiwk1abhhICwr3BSWOHb3H6AlaZx0xHTJ0rFTCbPDsp6pe6RdBDsRD8Hfu+tFbh8fn99whHCoSzeEV/sppDIX22V45fWh2bkALGW7UKIt1KwlaAax6zScsSAkrtDszsDL2BQjVVDiG0XgTkyw3N3HDnboYzqNsuGkbfJs0P3GOexcfUVyuVZR4MkycPIFQ3wK8jXiGWXcQvN29kZe7A== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <69CDCF359509D54A9D24D23A6E68E7F9@namprd13.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: hammerspace.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR13MB3957.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b7ea259-20ba-4c6f-967a-08d8867dec40 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Nov 2020 20:11:06.4350 (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: 5nKN6E/+5yp2qYTGCI4RYaumgegguHWyeR7ZqklzYchn2KG15HzNrZ7nJVmt2WBBcOX6zncEBikDWJhWda/srQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR13MB2591 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org T24gV2VkLCAyMDIwLTExLTExIGF0IDE0OjUzIC0wNTAwLCBCZW5qYW1pbiBDb2RkaW5ndG9uIHdy b3RlOg0KPiBPbiAxMSBOb3YgMjAyMCwgYXQgMTI6MzQsIFRyb25kIE15a2xlYnVzdCB3cm90ZToN Cj4gDQo+ID4gT24gV2VkLCAyMDIwLTExLTExIGF0IDExOjQzIC0wNTAwLCBCZW5qYW1pbiBDb2Rk aW5ndG9uIHdyb3RlOg0KPiA+ID4gT24gOSBOb3YgMjAyMCwgYXQgMTY6NDYsIFRyb25kIE15a2xl YnVzdCB3cm90ZToNCj4gPiA+IA0KPiA+ID4gPiBPbiBNb24sIDIwMjAtMTEtMDkgYXQgMTY6NDEg LTA1MDAsIEJlbmphbWluIENvZGRpbmd0b24gd3JvdGU6DQo+ID4gPiA+ID4gT24gNyBOb3YgMjAy MCwgYXQgOTowMywgdHJvbmRteUBrZXJuZWwub3JnwqB3cm90ZToNCj4gPiA+ID4gPiANCj4gPiA+ ID4gPiA+IEZyb206IFRyb25kIE15a2xlYnVzdCA8dHJvbmQubXlrbGVidXN0QGhhbW1lcnNwYWNl LmNvbT4NCj4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gSWYgdGhlIGRpcmVjdG9yeSBpcyBjaGFu Z2luZywgY2F1c2luZyB0aGUgcGFnZSBjYWNoZSB0byBnZXQNCj4gPiA+ID4gPiA+IGludmFsaWRh dGVkDQo+ID4gPiA+ID4gPiB3aGlsZSB3ZSBhcmUgbGlzdGluZyB0aGUgY29udGVudHMsIHRoZW4g dGhlIE5GUyBjbGllbnQgaXMNCj4gPiA+ID4gPiA+IGN1cnJlbnRseQ0KPiA+ID4gPiA+ID4gZm9y Y2VkDQo+ID4gPiA+ID4gPiB0byByZWFkIGluIHRoZSBlbnRpcmUgZGlyZWN0b3J5IGNvbnRlbnRz IGZyb20gc2NyYXRjaCwNCj4gPiA+ID4gPiA+IGJlY2F1c2UNCj4gPiA+ID4gPiA+IGl0DQo+ID4g PiA+ID4gPiBuZWVkcw0KPiA+ID4gPiA+ID4gdG8gcGVyZm9ybSBhIGxpbmVhciBzZWFyY2ggZm9y IHRoZSByZWFkZGlyIGNvb2tpZS4gV2hpbGUNCj4gPiA+ID4gPiA+IHRoaXMNCj4gPiA+ID4gPiA+ IGlzDQo+ID4gPiA+ID4gPiBub3QNCj4gPiA+ID4gPiA+IGFuIGlzc3VlIGZvciBzbWFsbCBkaXJl Y3RvcmllcywgaXQgZG9lcyBub3Qgc2NhbGUgdG8NCj4gPiA+ID4gPiA+IGRpcmVjdG9yaWVzDQo+ ID4gPiA+ID4gPiB3aXRoDQo+ID4gPiA+ID4gPiBtaWxsaW9ucyBvZiBlbnRyaWVzLg0KPiA+ID4g PiA+ID4gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBkZWFsIHdpdGggbGFyZ2UgZGlyZWN0b3JpZXMg dGhhdCBhcmUNCj4gPiA+ID4gPiA+IGNoYW5naW5nLA0KPiA+ID4gPiA+ID4gYWRkIGEgaGV1cmlz dGljIHRvIGVuc3VyZSB0aGF0IGlmIHRoZSBwYWdlIGNhY2hlIGlzIGVtcHR5LA0KPiA+ID4gPiA+ ID4gYW5kDQo+ID4gPiA+ID4gPiB3ZQ0KPiA+ID4gPiA+ID4gYXJlDQo+ID4gPiA+ID4gPiBzZWFy Y2hpbmcgZm9yIGEgY29va2llIHRoYXQgaXMgbm90IHRoZSB6ZXJvIGNvb2tpZSwgd2UganVzdA0K PiA+ID4gPiA+ID4gZGVmYXVsdA0KPiA+ID4gPiA+ID4gdG8NCj4gPiA+ID4gPiA+IHBlcmZvcm1p bmcgdW5jYWNoZWQgcmVhZGRpci4NCj4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gU2lnbmVkLW9m Zi1ieTogVHJvbmQgTXlrbGVidXN0DQo+ID4gPiA+ID4gPiA8dHJvbmQubXlrbGVidXN0QGhhbW1l cnNwYWNlLmNvbT4NCj4gPiA+ID4gPiA+IC0tLQ0KPiA+ID4gPiA+ID4gwqBmcy9uZnMvZGlyLmMg fCAxNyArKysrKysrKysrKysrKysrKw0KPiA+ID4gPiA+ID4gwqAxIGZpbGUgY2hhbmdlZCwgMTcg aW5zZXJ0aW9ucygrKQ0KPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZnMv bmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jDQo+ID4gPiA+ID4gPiBpbmRleCAyMzg4NzJkMTE2Zjcu LmQ3YTllZmQzMWVjZCAxMDA2NDQNCj4gPiA+ID4gPiA+IC0tLSBhL2ZzL25mcy9kaXIuYw0KPiA+ ID4gPiA+ID4gKysrIGIvZnMvbmZzL2Rpci5jDQo+ID4gPiA+ID4gPiBAQCAtOTE3LDExICs5MTcs MjggQEAgc3RhdGljIGludA0KPiA+ID4gPiA+ID4gZmluZF9hbmRfbG9ja19jYWNoZV9wYWdlKHN0 cnVjdA0KPiA+ID4gPiA+ID4gbmZzX3JlYWRkaXJfZGVzY3JpcHRvciAqZGVzYykNCj4gPiA+ID4g PiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmVzOw0KPiA+ID4gPiA+ID4gwqB9DQo+ID4gPiA+ ID4gPiANCj4gPiA+ID4gPiA+ICtzdGF0aWMgYm9vbCBuZnNfcmVhZGRpcl9kb250X3NlYXJjaF9j YWNoZShzdHJ1Y3QNCj4gPiA+ID4gPiA+IG5mc19yZWFkZGlyX2Rlc2NyaXB0b3IgKmRlc2MpDQo+ ID4gPiA+ID4gPiArew0KPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkZHJlc3Nf c3BhY2UgKm1hcHBpbmcgPSBkZXNjLT5maWxlLQ0KPiA+ID4gPiA+ID4gPmZfbWFwcGluZzsNCj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbm9kZSAqZGlyID0gZmlsZV9pbm9kZShk ZXNjLT5maWxlKTsNCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBkdHNp emUgPSBORlNfU0VSVkVSKGRpciktPmR0c2l6ZTsNCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oGxvZmZfdCBzaXplID0gaV9zaXplX3JlYWQoZGlyKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoC8qDQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiBEZWZh dWx0IHRvIHVuY2FjaGVkIHJlYWRkaXIgaWYgdGhlIHBhZ2UgY2FjaGUgaXMNCj4gPiA+ID4gPiA+ IGVtcHR5LA0KPiA+ID4gPiA+ID4gYW5kDQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiB3 ZSdyZSBsb29raW5nIGZvciBhIG5vbi16ZXJvIGNvb2tpZSBpbiBhIGxhcmdlDQo+ID4gPiA+ID4g PiBkaXJlY3RvcnkuDQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKi8NCj4gPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiBkZXNjLT5kaXJfY29va2llICE9IDAgJiYgbWFwcGluZy0+ bnJwYWdlcyA9PQ0KPiA+ID4gPiA+ID4gMA0KPiA+ID4gPiA+ID4gJiYNCj4gPiA+ID4gPiA+IHNp emUgPg0KPiA+ID4gPiA+ID4gZHRzaXplOw0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IGlub2RlIHNp emUgPiBkdHNpemUgaXMgYSBsaXR0bGUgaGFuZC13YXZ5LsKgIFdlIGhhdmUgYSBsb3Qgb2YNCj4g PiA+ID4gPiBjdXN0b21lcnMNCj4gPiA+ID4gPiB0cnlpbmcgdG8NCj4gPiA+ID4gPiByZXZlcnNl LWVuZ2luZWVyIG5mc19yZWFkZGlyKCkgYmVoYXZpb3IgaW5zdGVhZCBvZiByZWFkaW5nDQo+ID4g PiA+ID4gdGhlDQo+ID4gPiA+ID4gY29kZSwNCj4gPiA+ID4gPiB0aGlzDQo+ID4gPiA+ID4gaXMg c3VyZSB0byBkcml2ZSB0aGVtIGNyYXp5Lg0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IFRoYXQgc2Fp ZCwgaW4gdGhlIGFic2VuY2Ugb2YgYW4gZWFzeSB3YXkgdG8gbWFrZSBpdCB0dW5hYmxlLA0KPiA+ ID4gPiA+IEkNCj4gPiA+ID4gPiBkb24ndA0KPiA+ID4gPiA+IGhhdmUNCj4gPiA+ID4gPiBhbnl0 aGluZyBiZXR0ZXIgdG8gc3VnZ2VzdC4NCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBSZXZpZXdlZC1i eTogQmVuamFtaW4gQ29kZGluZ3RvbiA8YmNvZGRpbmdAcmVkaGF0LmNvbT4NCj4gPiA+ID4gDQo+ ID4gPiA+IA0KPiA+ID4gPiBSaWdodC4gSXQgaXMgYSBoZXVyaXN0aWMsIGJ1dCBJIHdvdWxkIGV4 cGVjdCB0aGF0IHRoZSBkaXJlY3RvcnkNCj4gPiA+ID4gc2l6ZSBpcw0KPiA+ID4gPiBnb2luZyB0 byBiZSBzb21ld2hhdCBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBSUEMgY2FsbHMgd2UN Cj4gPiA+ID4gbmVlZCB0bw0KPiA+ID4gPiBwZXJmb3JtIHRvIHJlYWQgaXQuIFRoYXQgbnVtYmVy IGFnYWluIGlzIHNvbWV3aGF0IHByb3BvcnRpb25hbA0KPiA+ID4gPiB0bw0KPiA+ID4gPiB0aGUN Cj4gPiA+ID4gZHRzaXplLg0KPiA+ID4gPiANCj4gPiA+ID4gSU9XOiBUaGUgZ2VuZXJhbCBpZGVh IGlzIGNvcnJlY3QuDQo+ID4gPiANCj4gPiA+IEkgY2FuIGFncmVlIHdpdGggdGhhdCwgYnV0IEkg aGF2ZSBhbm90aGVyIHRob3VnaHQ6DQo+ID4gPiANCj4gPiA+IElmIHRoZSBwb2ludCBvZiB0aGUg aGV1cmlzdGljIGlzIHRvIGFsbG93IGEgZnVsbCBsaXN0aW5nIHRvDQo+ID4gPiBldmVudHVhbGx5 DQo+ID4gPiBjb21wbGV0ZSwgaXQgc2hvdWxkIG5vdCBiZSBkZXBlbmRlbnQgb24gbWFwcGluZy0+ bnJwYWdlcyA9PSAwLsKgDQo+ID4gPiBPdGhlcndpc2UsDQo+ID4gPiBvdGhlciBwcm9jZXNzZXMg Y2FuIHN0YXJ0IGZpbGxpbmcgdGhlIGNhY2hlIGFuZCB3ZSdyZSBiYWNrIHRvIHRoZQ0KPiA+ID4g c2l0dWF0aW9uDQo+ID4gPiB3aGVyZSBmaWxsaW5nIHRoZSBjYWNoZSBjb3VsZCB0YWtlIGxvbmdl ciB0aGFuIGFjZGlybWF4LCBhbmQNCj4gPiA+IHRoaW5ncw0KPiA+ID4gZXZlbnR1YWxseSBjb25n ZXN0IHRvIGEgaGFsdC4NCj4gPiA+IA0KPiA+ID4gRmxpcHBpbmcgYSBiaXQgb24gdGhlIGNvbnRl eHQgdG8gcmVtYWluIHVuY2FjaGVkIGdpdmVzIGEgYmV0dGVyDQo+ID4gPiBhc3N1cmFuY2Ugd2UN Cj4gPiA+IGNhbiBjb250aW51ZSB0byBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuDQo+ID4gDQo+ID4g SSBkaXNhZ3JlZS4gVGhlIHBvaW50IG9mIHRoZSBwYWdlIGNhY2hlIGlzIHRvIGFsbG93IHNoYXJp bmcgb2YNCj4gPiBpbmZvcm1hdGlvbiBiZXR3ZWVuIHByb2Nlc3NlcyB3aGVyZSBwb3NzaWJsZS4g SWYgdGhlcmUgYXJlIG11bHRpcGxlDQo+ID4gcHJvY2Vzc2VzIGFsbCB0cnlpbmcgdG8gbWFrZSBw cm9ncmVzcywgYW5kIG9uZSBvZiB0aGVtIHN0YXJ0cw0KPiA+IGZpbGxpbmcNCj4gPiB0aGUgcGFn ZSBjYWNoZSBmcm9tIHNjcmF0Y2gsIHRoZW4gd2h5IHNob3VsZCB3ZSBub3QgdXNlIHRoYXQ/DQo+ IA0KPiBCZWNhdXNlIHRoZSBwcm9jZXNzIHRoYXQgc3RhcnRzIGZpbGxpbmcgdGhlIHBhZ2VjYWNo ZSBmcm9tIHNjcmF0Y2gNCj4gdGhlbg0KPiBlbmpvaW5zIHRoZSBwcm9jZXNzIHRoYXQgbWF5IGJl IG5lYXJseSBmaW5pc2hlZCBsaXN0aW5nIHRoZSBkaXJlY3RvcnkNCj4gdG8NCj4gc3RhcnQgb3Zl ciB3YWl0aW5nIGZvciB0aGUgcGFnZSBjYWNoZSB0byBiZSBmaWxsZWQgKG9yIGhlbHAgZmlsbCBp dCkuDQo+IA0KPiBJZiB0aGUgdGltZSB0YWtlbiB0byBnZXQgdG8gYSBjZXJ0YWluIG9mZnNldC9j b29raWUgZXhjZWVkcyB0aGUgdGltZQ0KPiB0bw0KPiBjYWNoZSB0aGUgZGlyZWN0b3J5J3MgYXR0 cmlidXRlcywgd2UnbGwgZHJvcCB0aGUgcGFnZWNhY2hlLCBvciBpZg0KPiB3ZSdyZQ0KPiBwZXJo YXBzIHVzaW5nIFJFQURESVJQTFVTIHdpdGggbWFueSBlbnRyaWVzLCB3ZSdsbCBzYXR1cmF0ZSB0 aGUNCj4gbWVtb3J5IG9uDQo+IHRoZSBtYWNoaW5lIGFuZCBzdGFydCB0byByZWNsYWltIGl0IGJl Zm9yZSB3ZSBjYW4gZXZlciBmaW5pc2guwqAgVGhlcmUNCj4gYXJlDQo+IHNjZW5hcmlvcyB3aGVy ZSBmb3J3YXJkIHByb2dyZXNzIGJlY29tZXMgdmVyeSBzbG93Lg0KPiANCj4gUGVyaGFwcyB0aGUg b251cyBpcyBvbiBtZSB0byB3aGlwIHVwIGFuIGV4YW1wbGUgLSBJIHdpbGwgZG8gdGhhdC4NCj4g DQo+ID4gVGhlIGFsdGVybmF0aXZlIGlzIG5vdCBzY2FsaW5nIHRvIG11bHRpcGxlIHByb2Nlc3Nl cy4NCj4gDQo+IFRoZSBuZXh0IHByb2Nlc3MgdGhhdCBjb21lcyBhbG9uZyBmaWxsaW5nIHRoZSBw YWdlY2FjaGUgd2lsbCBiZW5lZml0DQo+IHRoZQ0KPiBuZXh0IHByb2Nlc3NlcywgYW5kIHNvIG9u LCB1bnRpbCBhIHBhZ2UgaXMgZXZpY3RlZCBvciB0aGUgY2FjaGUgaXMNCj4gbG9zdC4uDQo+IGV0 Yy7CoCBUaGUgcGFnZWNhY2hlIGlzIHN0aWxsIHVzZWZ1bCB0byBtdWx0aXBsZSBwcm9jZXNzZXMu DQo+IA0KPiA+ID4gSXQncyB0b28gYmFkIHdlJ3JlIHN0dWNrIGNhY2hpbmcgZW50cmllcyBsaW5l YXJseS7CoCBXaGF0DQo+ID4gPiBjaGFsbGVuZ2VzDQo+ID4gPiBtaWdodA0KPiA+ID4gZXhpc3Qg aWYgd2UgdHJpZWQgdG8gdXNlIGFuIFhBcnJheSB0byBtYXAgZGlyZWN0b3J5IHBvc2l0aW9uIHRv DQo+ID4gPiBjb29raWU/wqAgSQ0KPiA+ID4gaW1hZ2luZSB3ZSBjb3VsZCBpbXBsZW1lbnQgdGhp cyBpbiBhIHNpbmdsZSBYQXJyYXkgYnkgdXNpbmcgYm90aA0KPiA+ID4gcG9zaXRpb24NCj4gPiA+ IGFuZCBjb29raWUgdmFsdWVzIGFzIGluZGljZXMsIGFuZCBkaWZmZXJlbnRpYXRlIGJldHdlZW4g dGhlbQ0KPiA+ID4gdXNpbmcNCj4gPiA+IHR3byBvZg0KPiA+ID4gdGhlIHRocmVlIFhBIG1hcmtz LCBhbmQgc3RvcmUgYSBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IGJvdGguwqANCj4gPiA+IEFsc28N Cj4gPiA+IHVuY2xlYXINCj4gPiA+IHdvdWxkIGJlIGhvdyB0byBoYW5kbGUgdGhlIGxpZmV0aW1l IG9mIHRoZSBYQXJyYXksIHNpbmNlIHdlJ2Qgbm8NCj4gPiA+IGxvbmdlciBiZQ0KPiA+ID4gdXNp bmcgdGhlIFZNcyBwYWdlY2FjaGUgbWFuYWdlbWVudC4uDQo+ID4gPiANCj4gPiANCj4gPiBZb3Ug bWlnaHQgYmUgYWJsZSB0byBzcGVlZCB1cCBmaXJzdCBjb29raWUgbG9va3VwIGJ5IGhhdmluZyBh bg0KPiA+IFhhcnJheQ0KPiA+IHRoYXQgbWFwcyBmcm9tIGEgNjQtYml0IGNvb2tpZSB0byBhIG5m c19jYWNoZV9hcnJheV9lbnRyeSB3aGljaA0KPiA+IGNvbnRhaW5zIHRoZSBuZXh0IGNvb2tpZSB0 byBsb29rIHVwLiBIb3dldmVyIHRoYXQgd291bGQgb25seSB3b3JrDQo+ID4gb24NCj4gPiA2NC1i aXQgc3lzdGVtcyBzaW5jZSB4YXJyYXlzIHRha2UgYW4gdW5zaWduZWQgbG9uZyBpbmRleC4NCj4g DQo+IFllcywgYnV0IEkgd291bGQgbGlrZSB0byBhbGxvdyBwcm9jZXNzZXMgdG8gY2FjaGUgZW50 cmllcyBub24tDQo+IGxpbmVhcmx5Lg0KDQpZb3Ugc3RpbGwgaGF2ZSB0byBwbGF5IHRoZW0gYmFj ayBpbiBsaW5lYXIgZmFzaGlvbi4gSWYgeW91J3JlIHVzaW5nIHRoZQ0KY29va2llIGFzIGEgbG9v a3VwIGtleSwgdGhlbiBpdCB3b3VsZCByZXF1aXJlIHlvdSB0byBsb29rIHVwIGVudHJpZXMgMQ0K YXQgYSB0aW1lIChpLmUuIGxvb2sgdXAgY29va2llIHRvIGZpbmQgbmV3IGVudHJ5IHdpdGggYSBj b29raWUgdGhhdA0KcG9pbnRzIHRvIHRoZSBuZXh0IGVudHJ5IHRvIGJlIGxvb2tlZCB1cCkuIEl0 IHdvdWxkIGJlIHNsb3cuLi4NCg0KPiANCj4gPiBGdXJ0aGVybW9yZSwgeW91IHN0aWxsIG5lZWQg YSB3YXkgdG8gbWFwIG9mZnNldHMgdG8gZW50cmllcyBmb3IgdGhlDQo+ID4gY2FzZSB3aGVyZSB3 ZSdyZSBub3QgYWJsZSB0byB1c2UgY29va2llcyBmb3IgbHNlZWsoKSBwdXJwb3Nlcy4NCj4gPiBU aGF0J3MgYQ0KPiA+IGxpbmVhciBzZWFyY2ggdGhyb3VnaCB0aGUgZGlyZWN0b3J5LCB3aGljaCB3 b3VsZCBiZSBob3JyaWJsZSB3aXRoDQo+ID4gYW4NCj4gPiB4YXJyYXkgb2YgbGlua2VkIGNvb2tp ZSB2YWx1ZXMgKHNvIHlvdSdkIHByb2JhYmx5IG5lZWQgYSBzZWNvbmQNCj4gPiB4YXJyYXkNCj4g PiBmb3IgdGhhdD8pLg0KPiANCj4gVGhlcmUncyB4YV9mb3JfZWFjaF9tYXJrZWQoKSwgYnV0IGl0 IG1heSBub3QgcGVyZm9ybSAtIEkgaGF2ZW4ndA0KPiBsb29rZWQNCj4gYXQgdGhlIGltcGxlbWVu dGF0aW9uIG9yIHRlc3RlZCBpdC4NCg0KVGhhdCBsb29rcyB1cCB0aGUgZGlyZWN0b3J5IGluIGNv b2tpZSBvcmRlciwgbm90IGluIHRoZSBkaXJlY3RvcnkNCm9yZGVyLg0KDQpJT1c6IGl0IG1pZ2h0 IHdvcmsgT0sgZm9yIFhGUywgd2hpY2ggYXBwZWFycyB0byB1c2Ugb3JkZXJlZCBjb29raWVzLA0K YnV0IGl0IHdpbGwgYnJlYWsgYmFkbHkgd2l0aCBleHQ0LCB3aGljaCB1c2VzIGhhc2hlZCBjb29r aWVzLg0KDQo+IA0KPiA+IENvbnN0cnVjdGlvbiBhbmQgdGVhcmRvd24gb2YgdGhhdCBzdHJ1Y3R1 cmUgd291bGQgYmUgbmFzdHkgZm9yDQo+ID4gbGFyZ2UNCj4gPiBkaXJlY3Rvcmllcywgc2luY2Ug eW91IGhhdmUgYXMgbWFueSBjb29raWVzIGFzIHlvdSBoYXZlIGVudHJpZXMgaW4NCj4gPiB5b3Vy DQo+ID4gZGlyZWN0b3J5LiBJT1c6IFlvdSdkIGhhdmUgdG8gdGVhciBkb3duIDEyNyB0aW1lcyBh cyBtYW55IHhhcnJheQ0KPiA+IGVudHJpZXMgYXMgd2UgaGF2ZSBub3cuDQo+ID4gDQo+ID4gSXQg aXMgbm90IG9idmlvdXMgdGhhdCB3ZSB3b3VsZCBiZSBhYmxlIHRvIGJlbmVmaXQgZnJvbSBzdGFy dGluZyBhdA0KPiA+IGFuDQo+ID4gYXJiaXRyYXJ5IGxvY2F0aW9uIGFuZCBjYWNoaW5nIHRoYXQg ZGF0YSwgc2luY2UgaWYgdGhlIGRpcmVjdG9yeQ0KPiA+IGNoYW5nZWQsIHdlJ2QgaGF2ZSB0byBy ZWFkIGluIHRoZSBuZXcgZGF0YSBhbnl3YXkuDQo+IA0KPiBUaGUgb25seSBjYXNlIHdoZXJlIGl0 IHNlZW1zIG9idmlvdXMgaXMgZm9yIHRoZSBjYXNlIHdoZXJlIGEgdmVyeQ0KPiBsb25nDQo+IGxp c3RpbmcgaXMgYWJvdXQgdG8gY29tcGxldGUsIGFuZCB0aGVuIHRoZSBwYWdlY2FjaGUgaXMgaW52 YWxpZGF0ZWQsDQo+IGFuZA0KPiB0aGVuIHRoYXQgcGxheXMgb3V0IG92ZXIgYW5kIG92ZXIgYWdh aW4uwqAgVGhpcyBpcyB0aGUgcGFpbiBwb2ludCBmb3INCj4gb3VyDQo+IGN1c3RvbWVycyB0aGF0 IGFyZSBtaWdyYXRpbmcgTkZTIHdvcmtsb2FkcyBvbnRvIHNsb3dlciAobW9yZSBsYXRlbnQpDQo+ IGNsb3VkIGluZnJhc3RydWN0dXJlLg0KDQpJbiB0ZXN0aW5nLCBJIGZvdW5kIHRoYXQgdGhlIGN1 cnJlbnQgcGF0Y2hzZXQgcGVyZm9ybWVkIGp1c3QgZmluZQ0Kdy5yLnQuIHRoZSByZWFkZGlyIGNv dW50LiBUaGUgcmVhc29uIHdoeSBJIHdhc24ndCBzZWVpbmcgaHVnZQ0KcGVyZm9ybWFuY2UgaW5j cmVhc2VzIHdoZW4gZG9pbmcgYW4gJ3JtIC1yZicsIGZvciBpbnN0YW5jZSwgd2FzIGR1ZSB0bw0K dGhlcmUgYmVpbmcgMiBHRVRBVFRScyBhbmQgMSBMT09LVVAgcGVyIHVubGluaygpIGNhbGwuDQoN Cj4gDQo+ID4gTWVtb3J5IG1hbmFnZW1lbnQgd291bGQgbmVlZCB0byBiZSBpbXBsZW1lbnRlZCBz b21laG93LiBZb3UnZCBuZWVkDQo+ID4gYQ0KPiA+IHNocmlua2VyIGZvciB0aGlzIHRyZWUgdGhh dCBjb3VsZCBpbnRlbGxpZ2VudGx5IHBydW5lIGl0Lg0KPiANCj4gbm9kLi4gdGhhbmtzIGZvciB5 b3VyIHRob3VnaHRzIG9uIHRoaXMuDQo+IA0KPiBCZW4NCj4gDQoNCi0tIA0KVHJvbmQgTXlrbGVi dXN0DQpDVE8sIEhhbW1lcnNwYWNlIEluYw0KNDk4NCBFbCBDYW1pbm8gUmVhbCwgU3VpdGUgMjA4 DQpMb3MgQWx0b3MsIENBIDk0MDIyDQrigIsNCnd3dy5oYW1tZXIuc3BhY2UNCg0K