From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 0E71B3A7F74; Tue, 3 Feb 2026 14:18:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770128319; cv=none; b=kurvcV/km3qYCkNoQY+a9L2vCRy1/pv/OM3jpKfi1iU7arofqCFUykXLLyX/2w18dWdguaLMLr1gdDYimpJ8exxr03wzoc/zERCrvv1nsbtdRwocS+XTUlnQ3LH7boORW2QGC1lBm41HN5c1lhdsSyWi7wpgNsYthSkdYZeFlUQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770128319; c=relaxed/simple; bh=7znWxXYIyAFor7GBuPQ2iXaTErwfqu61GaPtTURriHE=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GJFlmX9DuHg+A/uH59MV/RLh4G+4fJLujQfNpgLL0Sgjrou1vt7qIfmYl8Ax1Gqg/M4skxVmrpM+6NMvk89w0F/2TgJMFSW4T8aZqHfEFIVZIjOFs/V6jyvE5a1qNVzFsck/WdGbWX8cW6QoZoHTnJVXC0GHUqMCxBQLHdTksXk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=qvZA1lAt; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="qvZA1lAt" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1770128313; bh=7znWxXYIyAFor7GBuPQ2iXaTErwfqu61GaPtTURriHE=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=qvZA1lAt8ZY/5dEMmWSkR8L29JOmH/j4xZl98vyrl2DG/cLP2IhKeHPZAD6pz4OA1 g7mKVbvOzPfqqxcYxYwFq1mogaUBhh7Ao3fPd83SvvnAuxD5HhWIII9j2bb2fV4j/9 sDkP/3NmyDhV9xJnpYLup9AbtDdpSqzgPeZ11dAU81QbRQ/FVIBVP5A9BrcLxECw7j 7fZe4VVivXBnAJEQEU1Emc8VdQ/w6R9fGX7FfnxHLT/WWC31+QdnPVzUe5zaE/ks9X Gz+wZ6OXmiy4g5ujtJB8f50rWEc3rvBzRHTiQRtQws0A3NWeQjp0MNm3AbfhRrm3Bo SGzG3aL2hXr9A== Received: from fedora (unknown [IPv6:2a01:e0a:2c:6930:d919:a6e:5ea1:8a9f]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: bbrezillon) by bali.collaboradmins.com (Postfix) with ESMTPSA id 9FADB17E1276; Tue, 3 Feb 2026 15:18:32 +0100 (CET) Date: Tue, 3 Feb 2026 15:18:28 +0100 From: Boris Brezillon To: Daniel Almeida Cc: Gary Guo , "Rafael J. Wysocki" , Viresh Kumar , Danilo Krummrich , Alice Ryhl , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Drew Fustini , Guo Ren , Fu Wei , Uwe =?UTF-8?B?S2xlaW5lLUs=?= =?UTF-8?B?w7ZuaWc=?= , Michael Turquette , Stephen Boyd , Miguel Ojeda , Boqun Feng , =?UTF-8?B?QmrDtnJu?= Roy Baron , Benno Lossin , Andreas Hindborg , Trevor Gross , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-riscv@lists.infradead.org, linux-pwm@vger.kernel.org, linux-clk@vger.kernel.org, rust-for-linux@vger.kernel.org Subject: Re: [PATCH v3 1/3] rust: clk: use the type-state pattern Message-ID: <20260203151828.669c29cb@fedora> In-Reply-To: References: <20260107-clk-type-state-v3-0-77d3e3ee59c2@collabora.com> <20260107-clk-type-state-v3-1-77d3e3ee59c2@collabora.com> <20260202171038.10e51e18@fedora> <20260203100913.6d224657@fedora> Organization: Collabora X-Mailer: Claws Mail 4.3.1 (GTK 3.24.51; x86_64-redhat-linux-gnu) Precedence: bulk X-Mailing-List: linux-clk@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Tue, 3 Feb 2026 10:37:15 -0300 Daniel Almeida wrote: > > On 3 Feb 2026, at 06:09, Boris Brezillon wrote: > >=20 > > Hello Daniel, > >=20 > > On Mon, 2 Feb 2026 17:10:38 +0100 > > Boris Brezillon wrote: > > =20 > >>>> -#[pin_data(PinnedDrop)] > >>>> +#[pin_data] > >>>> pub(crate) struct TyrData { > >>>> pub(crate) pdev: ARef, > >>>>=20 > >>>> @@ -92,13 +92,9 @@ fn probe( > >>>> pdev: &platform::Device, > >>>> _info: Option<&Self::IdInfo>, > >>>> ) -> impl PinInit { > >>>> - let core_clk =3D Clk::get(pdev.as_ref(), Some(c_str!("core"= )))?; > >>>> - let stacks_clk =3D OptionalClk::get(pdev.as_ref(), Some(c_s= tr!("stacks")))?; > >>>> - let coregroup_clk =3D OptionalClk::get(pdev.as_ref(), Some(= c_str!("coregroup")))?; > >>>> - > >>>> - core_clk.prepare_enable()?; > >>>> - stacks_clk.prepare_enable()?; > >>>> - coregroup_clk.prepare_enable()?; > >>>> + let core_clk =3D Clk::::get(pdev.as_ref(), Some(c_= str!("core")))?; =20 > >>>=20 > >>> Ah, more turbofish.. I'd really want to avoid them if possible. > >>>=20 > >>> Any disadvantage on just ask the user to chain `.get().prepare_enable= ()?`? This > >>> way it is also clear that some action is performed. =20 > >>=20 > >> I've just disc =20 > >=20 > > Sorry, I've hit the reply button before I had finished writing my > > answer. So I was about to say that I had started writing something > > similar without knowing this series existed, and I feel like we'd don't > > really need those prepare_enable() shortcuts that exist in C. We might > > has well just go: > >=20 > > Clk::get(dev, Some(c_str!("core"))).prepare()?.enable()?; > >=20 > > and have the following variant-specofoc functions > >=20 > > - Clk::get[_optional]() (no get on Prepared and Enabled > > variants) > > - Clk::prepare() > > - Clk::{enable,unprepare}() > > - Clk::{disable}() > >=20 > > Regards, > >=20 > > Boris > >=20 > > =20 >=20 >=20 > I don=E2=80=99t understand how is this better than the turbofish we curre= ntly have. >=20 > In other words, how is this: >=20 > Clk::get(dev, Some(c_str!("core"))).prepare()?.enable()?; >=20 > Better than this: >=20 > Clk::::get(/*=E2=80=A6*/); For one, it doesn't force you to expose multiple functions in the implementation (::get[_optional]() is only present in the Unprepared impl variant, no shortcut to combine state transition, ...) which means less code to maintain overall. But I also prefer the fact this clearly reflects the state transitions that exist to get an Enabled clk (first you get an Unprepared clk that you have to prepare and enable to turn that into an Enabled clk). That's a matter of taste of course, just saying that if we get rid of the turbofish syntax like Gary suggested at some point, I think I'd find it clearer to also just expose the transitions between two consecutive states, and let the caller go through all the steps. 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 0B30EE87839 for ; Tue, 3 Feb 2026 14:18:47 +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=tmM6/r5wx5V5LJZp3oLM1Hm2XFMmDHQGvR85vzEmcJo=; b=DwfDWTki/sJ9kD SUMHFbDNrthVn9R69YWevTCwkrVXaixbWRGTEeA9ptNtg45mz4jZnuHs+lPki4XDF18gFOVEVXkN2 47rYrr6ajcu8YnXe4QJsXNJf7Cmo8lGL7+dt1EjWiMG73hWrtqcYc2WfMw6xAtDaHS1r7VWyDrAcG M7ppx5kVrra8/scPypFda+cKojQQjbd8pUAsJwSBLviubnXWJLbHsMCUK3rfPYXjMNV4AVVnZ8pcj G2NHfjQ9obIFTp8Q0GYm2imqJSe1gwGZbeYfOSjUILYWpGkU+mmfXJmQs0J15phM+nlY726TPCzzs NGoDpryZiM+8OuWnjv2Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vnHEl-00000006k8W-0yaN; Tue, 03 Feb 2026 14:18:39 +0000 Received: from bali.collaboradmins.com ([2a01:4f8:201:9162::2]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vnHEj-00000006k7p-1whv for linux-riscv@lists.infradead.org; Tue, 03 Feb 2026 14:18:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1770128313; bh=7znWxXYIyAFor7GBuPQ2iXaTErwfqu61GaPtTURriHE=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=qvZA1lAt8ZY/5dEMmWSkR8L29JOmH/j4xZl98vyrl2DG/cLP2IhKeHPZAD6pz4OA1 g7mKVbvOzPfqqxcYxYwFq1mogaUBhh7Ao3fPd83SvvnAuxD5HhWIII9j2bb2fV4j/9 sDkP/3NmyDhV9xJnpYLup9AbtDdpSqzgPeZ11dAU81QbRQ/FVIBVP5A9BrcLxECw7j 7fZe4VVivXBnAJEQEU1Emc8VdQ/w6R9fGX7FfnxHLT/WWC31+QdnPVzUe5zaE/ks9X Gz+wZ6OXmiy4g5ujtJB8f50rWEc3rvBzRHTiQRtQws0A3NWeQjp0MNm3AbfhRrm3Bo SGzG3aL2hXr9A== Received: from fedora (unknown [IPv6:2a01:e0a:2c:6930:d919:a6e:5ea1:8a9f]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: bbrezillon) by bali.collaboradmins.com (Postfix) with ESMTPSA id 9FADB17E1276; Tue, 3 Feb 2026 15:18:32 +0100 (CET) Date: Tue, 3 Feb 2026 15:18:28 +0100 From: Boris Brezillon To: Daniel Almeida Cc: Gary Guo , "Rafael J. Wysocki" , Viresh Kumar , Danilo Krummrich , Alice Ryhl , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Drew Fustini , Guo Ren , Fu Wei , Uwe =?UTF-8?B?S2xlaW5lLUs=?= =?UTF-8?B?w7ZuaWc=?= , Michael Turquette , Stephen Boyd , Miguel Ojeda , Boqun Feng , =?UTF-8?B?QmrDtnJu?= Roy Baron , Benno Lossin , Andreas Hindborg , Trevor Gross , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-riscv@lists.infradead.org, linux-pwm@vger.kernel.org, linux-clk@vger.kernel.org, rust-for-linux@vger.kernel.org Subject: Re: [PATCH v3 1/3] rust: clk: use the type-state pattern Message-ID: <20260203151828.669c29cb@fedora> In-Reply-To: References: <20260107-clk-type-state-v3-0-77d3e3ee59c2@collabora.com> <20260107-clk-type-state-v3-1-77d3e3ee59c2@collabora.com> <20260202171038.10e51e18@fedora> <20260203100913.6d224657@fedora> Organization: Collabora X-Mailer: Claws Mail 4.3.1 (GTK 3.24.51; x86_64-redhat-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260203_061837_658208_3AE1781B X-CRM114-Status: GOOD ( 24.39 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gVHVlLCAzIEZlYiAyMDI2IDEwOjM3OjE1IC0wMzAwCkRhbmllbCBBbG1laWRhIDxkYW5pZWwu YWxtZWlkYUBjb2xsYWJvcmEuY29tPiB3cm90ZToKCj4gPiBPbiAzIEZlYiAyMDI2LCBhdCAwNjow OSwgQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AY29sbGFib3JhLmNvbT4gd3JvdGU6 Cj4gPiAKPiA+IEhlbGxvIERhbmllbCwKPiA+IAo+ID4gT24gTW9uLCAyIEZlYiAyMDI2IDE3OjEw OjM4ICswMTAwCj4gPiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBjb2xsYWJvcmEu Y29tPiB3cm90ZToKPiA+ICAgCj4gPj4+PiAtI1twaW5fZGF0YShQaW5uZWREcm9wKV0KPiA+Pj4+ ICsjW3Bpbl9kYXRhXQo+ID4+Pj4gcHViKGNyYXRlKSBzdHJ1Y3QgVHlyRGF0YSB7Cj4gPj4+PiAg ICAgcHViKGNyYXRlKSBwZGV2OiBBUmVmPHBsYXRmb3JtOjpEZXZpY2U+LAo+ID4+Pj4gCj4gPj4+ PiBAQCAtOTIsMTMgKzkyLDkgQEAgZm4gcHJvYmUoCj4gPj4+PiAgICAgICAgIHBkZXY6ICZwbGF0 Zm9ybTo6RGV2aWNlPENvcmU+LAo+ID4+Pj4gICAgICAgICBfaW5mbzogT3B0aW9uPCZTZWxmOjpJ ZEluZm8+LAo+ID4+Pj4gICAgICkgLT4gaW1wbCBQaW5Jbml0PFNlbGYsIEVycm9yPiB7Cj4gPj4+ PiAtICAgICAgICBsZXQgY29yZV9jbGsgPSBDbGs6OmdldChwZGV2LmFzX3JlZigpLCBTb21lKGNf c3RyISgiY29yZSIpKSk/Owo+ID4+Pj4gLSAgICAgICAgbGV0IHN0YWNrc19jbGsgPSBPcHRpb25h bENsazo6Z2V0KHBkZXYuYXNfcmVmKCksIFNvbWUoY19zdHIhKCJzdGFja3MiKSkpPzsKPiA+Pj4+ IC0gICAgICAgIGxldCBjb3JlZ3JvdXBfY2xrID0gT3B0aW9uYWxDbGs6OmdldChwZGV2LmFzX3Jl ZigpLCBTb21lKGNfc3RyISgiY29yZWdyb3VwIikpKT87Cj4gPj4+PiAtCj4gPj4+PiAtICAgICAg ICBjb3JlX2Nsay5wcmVwYXJlX2VuYWJsZSgpPzsKPiA+Pj4+IC0gICAgICAgIHN0YWNrc19jbGsu cHJlcGFyZV9lbmFibGUoKT87Cj4gPj4+PiAtICAgICAgICBjb3JlZ3JvdXBfY2xrLnByZXBhcmVf ZW5hYmxlKCk/Owo+ID4+Pj4gKyAgICAgICAgbGV0IGNvcmVfY2xrID0gQ2xrOjo8RW5hYmxlZD46 OmdldChwZGV2LmFzX3JlZigpLCBTb21lKGNfc3RyISgiY29yZSIpKSk/OyAgICAgIAo+ID4+PiAK PiA+Pj4gQWgsIG1vcmUgdHVyYm9maXNoLi4gSSdkIHJlYWxseSB3YW50IHRvIGF2b2lkIHRoZW0g aWYgcG9zc2libGUuCj4gPj4+IAo+ID4+PiBBbnkgZGlzYWR2YW50YWdlIG9uIGp1c3QgYXNrIHRo ZSB1c2VyIHRvIGNoYWluIGAuZ2V0KCkucHJlcGFyZV9lbmFibGUoKT9gPyBUaGlzCj4gPj4+IHdh eSBpdCBpcyBhbHNvIGNsZWFyIHRoYXQgc29tZSBhY3Rpb24gaXMgcGVyZm9ybWVkLiAgICAKPiA+ PiAKPiA+PiBJJ3ZlIGp1c3QgZGlzYyAgCj4gPiAKPiA+IFNvcnJ5LCBJJ3ZlIGhpdCB0aGUgcmVw bHkgYnV0dG9uIGJlZm9yZSBJIGhhZCBmaW5pc2hlZCB3cml0aW5nIG15Cj4gPiBhbnN3ZXIuIFNv IEkgd2FzIGFib3V0IHRvIHNheSB0aGF0IEkgaGFkIHN0YXJ0ZWQgd3JpdGluZyBzb21ldGhpbmcK PiA+IHNpbWlsYXIgd2l0aG91dCBrbm93aW5nIHRoaXMgc2VyaWVzIGV4aXN0ZWQsIGFuZCBJIGZl ZWwgbGlrZSB3ZSdkIGRvbid0Cj4gPiByZWFsbHkgbmVlZCB0aG9zZSBwcmVwYXJlX2VuYWJsZSgp IHNob3J0Y3V0cyB0aGF0IGV4aXN0IGluIEMuIFdlIG1pZ2h0Cj4gPiBoYXMgd2VsbCBqdXN0IGdv Ogo+ID4gCj4gPiBDbGs6OmdldChkZXYsIFNvbWUoY19zdHIhKCJjb3JlIikpKS5wcmVwYXJlKCk/ LmVuYWJsZSgpPzsKPiA+IAo+ID4gYW5kIGhhdmUgdGhlIGZvbGxvd2luZyB2YXJpYW50LXNwZWNv Zm9jIGZ1bmN0aW9ucwo+ID4gCj4gPiAtIENsazxVbnByZXBhcmVkPjo6Z2V0W19vcHRpb25hbF0o KSAobm8gZ2V0IG9uIFByZXBhcmVkIGFuZCBFbmFibGVkCj4gPiAgdmFyaWFudHMpCj4gPiAtIENs azxVbnByZXBhcmVkPjo6cHJlcGFyZSgpCj4gPiAtIENsazxQcmVwYXJlZD46OntlbmFibGUsdW5w cmVwYXJlfSgpCj4gPiAtIENsazxFbmFibGVkPjo6e2Rpc2FibGV9KCkKPiA+IAo+ID4gUmVnYXJk cywKPiA+IAo+ID4gQm9yaXMKPiA+IAo+ID4gICAKPiAKPiAKPiBJIGRvbuKAmXQgdW5kZXJzdGFu ZCBob3cgaXMgdGhpcyBiZXR0ZXIgdGhhbiB0aGUgdHVyYm9maXNoIHdlIGN1cnJlbnRseSBoYXZl Lgo+IAo+IEluIG90aGVyIHdvcmRzLCBob3cgaXMgdGhpczoKPiAKPiBDbGs6OmdldChkZXYsIFNv bWUoY19zdHIhKCJjb3JlIikpKS5wcmVwYXJlKCk/LmVuYWJsZSgpPzsKPiAKPiBCZXR0ZXIgdGhh biB0aGlzOgo+IAo+IENsazo6PEVuYWJsZWQ+OjpnZXQoLyrigKYqLyk7CgpGb3Igb25lLCBpdCBk b2Vzbid0IGZvcmNlIHlvdSB0byBleHBvc2UgbXVsdGlwbGUgZnVuY3Rpb25zIGluIHRoZQppbXBs ZW1lbnRhdGlvbiAoOjpnZXRbX29wdGlvbmFsXSgpIGlzIG9ubHkgcHJlc2VudCBpbiB0aGUgVW5w cmVwYXJlZAppbXBsIHZhcmlhbnQsIG5vIHNob3J0Y3V0IHRvIGNvbWJpbmUgc3RhdGUgdHJhbnNp dGlvbiwgLi4uKSB3aGljaCBtZWFucwpsZXNzIGNvZGUgdG8gbWFpbnRhaW4gb3ZlcmFsbC4gQnV0 IEkgYWxzbyBwcmVmZXIgdGhlIGZhY3QgdGhpcyBjbGVhcmx5CnJlZmxlY3RzIHRoZSBzdGF0ZSB0 cmFuc2l0aW9ucyB0aGF0IGV4aXN0IHRvIGdldCBhbiBFbmFibGVkIGNsayAoZmlyc3QKeW91IGdl dCBhbiBVbnByZXBhcmVkIGNsayB0aGF0IHlvdSBoYXZlIHRvIHByZXBhcmUgYW5kIGVuYWJsZSB0 byB0dXJuCnRoYXQgaW50byBhbiBFbmFibGVkIGNsaykuIFRoYXQncyBhIG1hdHRlciBvZiB0YXN0 ZSBvZiBjb3Vyc2UsIGp1c3QKc2F5aW5nIHRoYXQgaWYgd2UgZ2V0IHJpZCBvZiB0aGUgdHVyYm9m aXNoIHN5bnRheCBsaWtlIEdhcnkgc3VnZ2VzdGVkCmF0IHNvbWUgcG9pbnQsIEkgdGhpbmsgSSdk IGZpbmQgaXQgY2xlYXJlciB0byBhbHNvIGp1c3QgZXhwb3NlIHRoZQp0cmFuc2l0aW9ucyBiZXR3 ZWVuIHR3byBjb25zZWN1dGl2ZSBzdGF0ZXMsIGFuZCBsZXQgdGhlIGNhbGxlciBnbwp0aHJvdWdo IGFsbCB0aGUgc3RlcHMuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXJpc2N2Cg==