From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1163716C69A; Wed, 24 Apr 2024 16:53:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713977609; cv=none; b=HZ7JUVKZxBH5F+gXzYTEmv0RGd0AV+mi3OZOc20L9fGafs8cJ8BdqEcfMh/9B1QJIGix9c45dZJtZDEOcqwIOuJMbjOGYRf2tl6BUvpP9OsHF8LjmU+xN3wCUhJZoFUgnQdW3+NjOE6/MB2B+E8hf7cwtSCKvWGQCvHaniBISpA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713977609; c=relaxed/simple; bh=WPwWr2WPh76sy9Su1xu+shcXvVuaFuGEoKD6YmP9p5o=; h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=g7AJGOa5BA9XJduYx17mz6hLXGd7QNakmrPjTk5KHpWfHPJ5D6Z22OZP9zreGFX5YsiXyzjJZypyiHQecUVTqS8IDRd//lg/TShvkp5SkxiriTNUxj1MttXLfvTLa3pwgn/+J/FmJCJNMOMBTNyxEEglFB9IbxizJrYztkuQdQA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=Huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=Huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VPlRb3lD4z6D94P; Thu, 25 Apr 2024 00:53:15 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 6FF8D1406AE; Thu, 25 Apr 2024 00:53:24 +0800 (CST) Received: from localhost (10.202.227.76) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Wed, 24 Apr 2024 17:53:23 +0100 Date: Wed, 24 Apr 2024 17:53:22 +0100 From: Jonathan Cameron To: "Rafael J. Wysocki" CC: Thomas Gleixner , Peter Zijlstra , , , , , , , , , Russell King , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , Ingo Molnar , Borislav Petkov , Dave Hansen , , , Subject: Re: [PATCH v7 04/16] ACPI: processor: Move checks and availability of acpi_processor earlier Message-ID: <20240424175322.00002b8a@Huawei.com> In-Reply-To: References: <20240418135412.14730-1-Jonathan.Cameron@huawei.com> <20240418135412.14730-5-Jonathan.Cameron@huawei.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.33; x86_64-w64-mingw32) Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: lhrpeml500002.china.huawei.com (7.191.160.78) To lhrpeml500005.china.huawei.com (7.191.163.240) On Mon, 22 Apr 2024 20:56:55 +0200 "Rafael J. Wysocki" wrote: > On Thu, Apr 18, 2024 at 3:56=E2=80=AFPM Jonathan Cameron > wrote: > > > > Make the per_cpu(processors, cpu) entries available earlier so that > > they are available in arch_register_cpu() as ARM64 will need access > > to the acpi_handle to distinguish between acpi_processor_add() > > and earlier registration attempts (which will fail as _STA cannot > > be checked). > > > > Reorder the remove flow to clear this per_cpu() after > > arch_unregister_cpu() has completed, allowing it to be used in > > there as well. > > > > Note that on x86 for the CPU hotplug case, the pr->id prior to > > acpi_map_cpu() may be invalid. Thus the per_cpu() structures > > must be initialized after that call or after checking the ID > > is valid (not hotplug path). > > > > Signed-off-by: Jonathan Cameron > > --- > > v7: Swap order with acpi_unmap_cpu() in acpi_processor_remove() > > to keep it in reverse order of the setup path. (thanks Salil) > > Fix an issue with placement of CONFIG_ACPI_HOTPLUG_CPU guards. > > v6: As per discussion in v5 thread, don't use the cpu->dev and > > make this data available earlier by moving the assignment checks > > int acpi_processor_get_info(). > > --- > > drivers/acpi/acpi_processor.c | 78 +++++++++++++++++++++-------------- > > 1 file changed, 46 insertions(+), 32 deletions(-) > > > > diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processo= r.c > > index ba0a6f0ac841..ac7ddb30f10e 100644 > > --- a/drivers/acpi/acpi_processor.c > > +++ b/drivers/acpi/acpi_processor.c > > @@ -183,8 +183,36 @@ static void __init acpi_pcc_cpufreq_init(void) {} > > #endif /* CONFIG_X86 */ > > > > /* Initialization */ > > +static DEFINE_PER_CPU(void *, processor_device_array); > > + > > +static void acpi_processor_set_per_cpu(struct acpi_processor *pr, > > + struct acpi_device *device) > > +{ > > + BUG_ON(pr->id >=3D nr_cpu_ids); > > + /* > > + * Buggy BIOS check. > > + * ACPI id of processors can be reported wrongly by the BIOS. > > + * Don't trust it blindly > > + */ > > + if (per_cpu(processor_device_array, pr->id) !=3D NULL && > > + per_cpu(processor_device_array, pr->id) !=3D device) { > > + dev_warn(&device->dev, > > + "BIOS reported wrong ACPI id %d for the proces= sor\n", > > + pr->id); > > + /* Give up, but do not abort the namespace scan. */ > > + return; =20 >=20 > In this case the caller should make acpi_pricessor_add() return 0, I > think, because otherwise it will attempt to acpi_bind_one() "pr" to > "device" which will confuse things. >=20 > So I would make this return false to indicate that. >=20 > Or just fold it into the caller and do the error handling there. The bios bug mentioned in reply to patch 14 (DSDT entries for non existent = CPUs that have no _STA entries) showed me that we need to know if this succeeded (I'd not read this at that point). I'll make it return a bool to say this succeeded and in both call sites return 0 if not to deal with the bios bug here. Making sure not to clear the per_cpu() structures unless this we get past that call. If we do and arch_register_cpu() fails we need to clear these two IDs. Doing so means that acpi_processor_hotadd_init() is side effect free and hence we can return in acpi_processor_get_info() which avoids the need to clear pointers when we don't have a valid pr->id to do it with. So fully agree we need to bail out properly if this fails. Jonathan 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id C66FBC07E8E for ; Wed, 24 Apr 2024 16:53:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:CC:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=C58MV9R1JOpEXwWMSecnZloa/Y5s4n9eiEz87vwPRRo=; b=VGwNI74ObERaEV cvtq4mqCCEYZd+y7KLazYfPLI2M2Evc9jDJOJPeQi3HhMImlVJputbM7O2ZfEZtWngMDVLQnL+TwA iCWKmslNGc2KYaKLDDu4aWSnId8m7UwuaVfT6si3T9z1EMjB2AwPtYjvE36rOvZ7U1Reb3YmquGht +YfNp3b8Fm6Y3VNjB1rpRcti8iV84GWOhee9GA6OwSjj1Osod1XWk8f4LForDTgFkNL/YDR+r/+eu wFeUG3FHjO/6Dctd/ztKiz8GBs71mQv1TF02II3aBjGYHZDFI0fE/ke+98ETKbn/t2Ig0jTnhcty/ sKloQq5JrIBQ38ZmVSZw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rzfsF-000000051yL-2fl4; Wed, 24 Apr 2024 16:53:35 +0000 Received: from frasgout.his.huawei.com ([185.176.79.56]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rzfsC-000000051xD-01eW for linux-arm-kernel@lists.infradead.org; Wed, 24 Apr 2024 16:53:34 +0000 Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VPlRb3lD4z6D94P; Thu, 25 Apr 2024 00:53:15 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 6FF8D1406AE; Thu, 25 Apr 2024 00:53:24 +0800 (CST) Received: from localhost (10.202.227.76) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Wed, 24 Apr 2024 17:53:23 +0100 Date: Wed, 24 Apr 2024 17:53:22 +0100 From: Jonathan Cameron To: "Rafael J. Wysocki" CC: Thomas Gleixner , Peter Zijlstra , , , , , , , , , Russell King , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , Ingo Molnar , Borislav Petkov , Dave Hansen , , , Subject: Re: [PATCH v7 04/16] ACPI: processor: Move checks and availability of acpi_processor earlier Message-ID: <20240424175322.00002b8a@Huawei.com> In-Reply-To: References: <20240418135412.14730-1-Jonathan.Cameron@huawei.com> <20240418135412.14730-5-Jonathan.Cameron@huawei.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.33; x86_64-w64-mingw32) MIME-Version: 1.0 X-Originating-IP: [10.202.227.76] X-ClientProxiedBy: lhrpeml500002.china.huawei.com (7.191.160.78) To lhrpeml500005.china.huawei.com (7.191.163.240) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240424_095332_753741_CE2B2896 X-CRM114-Status: GOOD ( 33.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCAyMiBBcHIgMjAyNCAyMDo1Njo1NSArMDIwMAoiUmFmYWVsIEouIFd5c29ja2kiIDxy YWZhZWxAa2VybmVsLm9yZz4gd3JvdGU6Cgo+IE9uIFRodSwgQXByIDE4LCAyMDI0IGF0IDM6NTbi gK9QTSBKb25hdGhhbiBDYW1lcm9uCj4gPEpvbmF0aGFuLkNhbWVyb25AaHVhd2VpLmNvbT4gd3Jv dGU6Cj4gPgo+ID4gTWFrZSB0aGUgcGVyX2NwdShwcm9jZXNzb3JzLCBjcHUpIGVudHJpZXMgYXZh aWxhYmxlIGVhcmxpZXIgc28gdGhhdAo+ID4gdGhleSBhcmUgYXZhaWxhYmxlIGluIGFyY2hfcmVn aXN0ZXJfY3B1KCkgYXMgQVJNNjQgd2lsbCBuZWVkIGFjY2Vzcwo+ID4gdG8gdGhlIGFjcGlfaGFu ZGxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYWNwaV9wcm9jZXNzb3JfYWRkKCkKPiA+IGFuZCBl YXJsaWVyIHJlZ2lzdHJhdGlvbiBhdHRlbXB0cyAod2hpY2ggd2lsbCBmYWlsIGFzIF9TVEEgY2Fu bm90Cj4gPiBiZSBjaGVja2VkKS4KPiA+Cj4gPiBSZW9yZGVyIHRoZSByZW1vdmUgZmxvdyB0byBj bGVhciB0aGlzIHBlcl9jcHUoKSBhZnRlcgo+ID4gYXJjaF91bnJlZ2lzdGVyX2NwdSgpIGhhcyBj b21wbGV0ZWQsIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgaW4KPiA+IHRoZXJlIGFzIHdlbGwuCj4g Pgo+ID4gTm90ZSB0aGF0IG9uIHg4NiBmb3IgdGhlIENQVSBob3RwbHVnIGNhc2UsIHRoZSBwci0+ aWQgcHJpb3IgdG8KPiA+IGFjcGlfbWFwX2NwdSgpIG1heSBiZSBpbnZhbGlkLiBUaHVzIHRoZSBw ZXJfY3B1KCkgc3RydWN0dXJlcwo+ID4gbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciB0aGF0IGNh bGwgb3IgYWZ0ZXIgY2hlY2tpbmcgdGhlIElECj4gPiBpcyB2YWxpZCAobm90IGhvdHBsdWcgcGF0 aCkuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gQ2FtZXJvbiA8Sm9uYXRoYW4uQ2Ft ZXJvbkBodWF3ZWkuY29tPgo+ID4gLS0tCj4gPiB2NzogU3dhcCBvcmRlciB3aXRoIGFjcGlfdW5t YXBfY3B1KCkgaW4gYWNwaV9wcm9jZXNzb3JfcmVtb3ZlKCkKPiA+ICAgICB0byBrZWVwIGl0IGlu IHJldmVyc2Ugb3JkZXIgb2YgdGhlIHNldHVwIHBhdGguICh0aGFua3MgU2FsaWwpCj4gPiAgICAg Rml4IGFuIGlzc3VlIHdpdGggcGxhY2VtZW50IG9mIENPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVIGd1 YXJkcy4KPiA+IHY2OiBBcyBwZXIgZGlzY3Vzc2lvbiBpbiB2NSB0aHJlYWQsIGRvbid0IHVzZSB0 aGUgY3B1LT5kZXYgYW5kCj4gPiAgICAgbWFrZSB0aGlzIGRhdGEgYXZhaWxhYmxlIGVhcmxpZXIg YnkgbW92aW5nIHRoZSBhc3NpZ25tZW50IGNoZWNrcwo+ID4gICAgIGludCBhY3BpX3Byb2Nlc3Nv cl9nZXRfaW5mbygpLgo+ID4gLS0tCj4gPiAgZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMg fCA3OCArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQo+ID4gIDEgZmlsZSBjaGFu Z2VkLCA0NiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKPiA+Cj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9wcm9j ZXNzb3IuYwo+ID4gaW5kZXggYmEwYTZmMGFjODQxLi5hYzdkZGIzMGYxMGUgMTAwNjQ0Cj4gPiAt LS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9wcm9jZXNzb3IuYwo+ID4gKysrIGIvZHJpdmVycy9hY3Bp L2FjcGlfcHJvY2Vzc29yLmMKPiA+IEBAIC0xODMsOCArMTgzLDM2IEBAIHN0YXRpYyB2b2lkIF9f aW5pdCBhY3BpX3BjY19jcHVmcmVxX2luaXQodm9pZCkge30KPiA+ICAjZW5kaWYgLyogQ09ORklH X1g4NiAqLwo+ID4KPiA+ICAvKiBJbml0aWFsaXphdGlvbiAqLwo+ID4gK3N0YXRpYyBERUZJTkVf UEVSX0NQVSh2b2lkICosIHByb2Nlc3Nvcl9kZXZpY2VfYXJyYXkpOwo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGFjcGlfcHJvY2Vzc29yX3NldF9wZXJfY3B1KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAq cHIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWNw aV9kZXZpY2UgKmRldmljZSkKPiA+ICt7Cj4gPiArICAgICAgIEJVR19PTihwci0+aWQgPj0gbnJf Y3B1X2lkcyk7Cj4gPiArICAgICAgIC8qCj4gPiArICAgICAgICAqIEJ1Z2d5IEJJT1MgY2hlY2su Cj4gPiArICAgICAgICAqIEFDUEkgaWQgb2YgcHJvY2Vzc29ycyBjYW4gYmUgcmVwb3J0ZWQgd3Jv bmdseSBieSB0aGUgQklPUy4KPiA+ICsgICAgICAgICogRG9uJ3QgdHJ1c3QgaXQgYmxpbmRseQo+ ID4gKyAgICAgICAgKi8KPiA+ICsgICAgICAgaWYgKHBlcl9jcHUocHJvY2Vzc29yX2RldmljZV9h cnJheSwgcHItPmlkKSAhPSBOVUxMICYmCj4gPiArICAgICAgICAgICBwZXJfY3B1KHByb2Nlc3Nv cl9kZXZpY2VfYXJyYXksIHByLT5pZCkgIT0gZGV2aWNlKSB7Cj4gPiArICAgICAgICAgICAgICAg ZGV2X3dhcm4oJmRldmljZS0+ZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICJCSU9T IHJlcG9ydGVkIHdyb25nIEFDUEkgaWQgJWQgZm9yIHRoZSBwcm9jZXNzb3JcbiIsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgcHItPmlkKTsKPiA+ICsgICAgICAgICAgICAgICAvKiBHaXZl IHVwLCBidXQgZG8gbm90IGFib3J0IHRoZSBuYW1lc3BhY2Ugc2Nhbi4gKi8KPiA+ICsgICAgICAg ICAgICAgICByZXR1cm47ICAKPiAKPiBJbiB0aGlzIGNhc2UgdGhlIGNhbGxlciBzaG91bGQgbWFr ZSBhY3BpX3ByaWNlc3Nvcl9hZGQoKSByZXR1cm4gMCwgSQo+IHRoaW5rLCBiZWNhdXNlIG90aGVy d2lzZSBpdCB3aWxsIGF0dGVtcHQgdG8gYWNwaV9iaW5kX29uZSgpICJwciIgdG8KPiAiZGV2aWNl IiB3aGljaCB3aWxsIGNvbmZ1c2UgdGhpbmdzLgo+IAo+IFNvIEkgd291bGQgbWFrZSB0aGlzIHJl dHVybiBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0Lgo+IAo+IE9yIGp1c3QgZm9sZCBpdCBpbnRvIHRo ZSBjYWxsZXIgYW5kIGRvIHRoZSBlcnJvciBoYW5kbGluZyB0aGVyZS4KClRoZSBiaW9zIGJ1ZyBt ZW50aW9uZWQgaW4gcmVwbHkgdG8gcGF0Y2ggMTQgKERTRFQgZW50cmllcyBmb3Igbm9uIGV4aXN0 ZW50IENQVXMKdGhhdCBoYXZlIG5vIF9TVEEgZW50cmllcykgc2hvd2VkIG1lIHRoYXQgd2UgbmVl ZCB0byBrbm93IGlmIHRoaXMgc3VjY2VlZGVkCihJJ2Qgbm90IHJlYWQgdGhpcyBhdCB0aGF0IHBv aW50KS4KCkknbGwgbWFrZSBpdCByZXR1cm4gYSBib29sIHRvIHNheSB0aGlzIHN1Y2NlZWRlZCBh bmQgaW4gYm90aCBjYWxsIHNpdGVzCnJldHVybiAwIGlmIG5vdCB0byBkZWFsIHdpdGggdGhlIGJp b3MgYnVnIGhlcmUuICBNYWtpbmcgc3VyZSBub3QgdG8gY2xlYXIKdGhlIHBlcl9jcHUoKSBzdHJ1 Y3R1cmVzIHVubGVzcyB0aGlzIHdlIGdldCBwYXN0IHRoYXQgY2FsbC4gIElmIHdlIGRvCmFuZCBh cmNoX3JlZ2lzdGVyX2NwdSgpIGZhaWxzIHdlIG5lZWQgdG8gY2xlYXIgdGhlc2UgdHdvIElEcy4K CkRvaW5nIHNvIG1lYW5zIHRoYXQgYWNwaV9wcm9jZXNzb3JfaG90YWRkX2luaXQoKSBpcyBzaWRl IGVmZmVjdCBmcmVlIGFuZApoZW5jZSB3ZSBjYW4gcmV0dXJuIGluIGFjcGlfcHJvY2Vzc29yX2dl dF9pbmZvKCkgd2hpY2ggYXZvaWRzIHRoZQpuZWVkIHRvIGNsZWFyIHBvaW50ZXJzIHdoZW4gd2Ug ZG9uJ3QgaGF2ZSBhIHZhbGlkIHByLT5pZCB0byBkbyBpdCB3aXRoLgoKU28gZnVsbHkgYWdyZWUg d2UgbmVlZCB0byBiYWlsIG91dCBwcm9wZXJseSBpZiB0aGlzIGZhaWxzLgoKSm9uYXRoYW4KCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwK