From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Subject: Re: [EXT] Re: [RFC 2/2] rpmsg: imx: add the initial imx rpmsg support References: <1561968784-1124-1-git-send-email-hongxing.zhu@nxp.com> <1561968784-1124-3-git-send-email-hongxing.zhu@nxp.com> <3e0a061c-4f5e-ac32-031d-909a48644265@pengutronix.de> From: Oleksij Rempel Message-ID: Date: Mon, 8 Jul 2019 13:02:33 +0200 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit To: Richard Zhu , "ohad@wizery.com" , "bjorn.andersson@linaro.org" , "linux-remoteproc@vger.kernel.org" Cc: "loic.pallardy@st.com" , "arnaud.pouliquen@st.com" , Fabien DESSENNE , "elder@linaro.org" , "linux-arm-kernel@lists.infradead.org" List-ID: Hi Richard, On 08.07.19 12:17, Richard Zhu wrote: > Hi Oleksij: > Thanks for your comments. > > >> -----Original Message----- >> From: Oleksij Rempel [mailto:o.rempel@pengutronix.de] >> Sent: 2019年7月4日 17:36 >> To: Richard Zhu ; ohad@wizery.com; >> bjorn.andersson@linaro.org; linux-remoteproc@vger.kernel.org >> Cc: linux-arm-kernel@lists.infradead.org; Fabien DESSENNE >> ; loic.pallardy@st.com; arnaud.pouliquen@st.com; >> s-anna@ti.com; elder@linaro.org >> Subject: [EXT] Re: [RFC 2/2] rpmsg: imx: add the initial imx rpmsg support >> >> Caution: EXT Email >> >> Hi Richard, >> >> On 01.07.19 10:34, Richard Zhu wrote: >>> Based on "virtio_rpmsg_bus" driver, This patch-set is used to set up >>> the communication mechanism between A core and M core on i.MX AMP >> SOCs. >>> >>> Add the initial imx rpmsg support glue driver and one pingpong demo, >>> demonstrated the data transactions between A core and remote M core. >>> Distributed framework is used in IMX RPMSG implementation, refer to >>> the following requirements: >>> - The CAN functions contained in M core and RTOS should be ready and >>> complete functional in 50ms after AMP system is turned on. >>> - Partition reset. System wouldn't be stalled by the exceptions (e.x >>> the reset triggered by the system hang) occurred at the other side. >>> And the RPMSG mechanism should be recovered automactilly after >> the >>> partition reset is completed. >>> In this scenario, the M core and RTOS would be kicked off by >>> bootloader firstly, then A core and Linux would be loaded later. Both >>> M core/RTOS and A core/Linux are running independly. >>> >>> One physical memory region used to store the vring is mandatory >>> required to pre-reserved and well-knowned by both A core and M core >> >> I don't see any thing imx specific in this patch. We already have remoteproc >> which would parse firmware header and create needed devices. This driver is >> only needed for the case where firmware was stared by the bootloader. >> > [Richard Zhu] Bootloader starts the firmware is mandatory required in these scenario > refer to the reasons listed in the commit. > Thus, the distributed framework has to be used, and both A core/Linux and remote core/RTOS > works independently. > >> I personally would prefer to have generic driver or extend the remoteproc >> framework. So we can notify kernel about work already done by bootloader. >> > [Richard Zhu] Thanks for your suggestions. > Regarding to my understand, it seems that master/slave mode is used in the remoteproc currently. > A core/Linux acts as master, to controls/manipulates remote core/RTOS. > It isn't applicable for the scenario described by this patch-set. > >> In general, some more issues should be solved: >> - Handle or not touch idle clocks for different node used by M core and not >> main system. >> - pin control >> - regulators >> >> ST devs already tried to solve this issues by creating "remoteproc: add system >> resource manager device" patch. I don't know what is current state of it (/me >> adding ST devs to CC). >> > [Richard Zhu] Yes, it is. Many contributions have been made by Fabien. > IMHO, there are some different behaviors on iMX8QXP/QM platforms, the > resources (e.x IP modules) had been assigned and managed by the XRDC. > In the other words, the HW resources would be assigned and managed would > be transparent to SW. > > Thus, both A core/Linux and M core/RTOS can work real independently. > System wouldn't be stalled by the exceptions (e.x the reset triggered by the > system hang) occurred at the other side. And the RPMSG mechanism should > be recovered automatically after the partition reset is completed. It is exactly the way I did understood it in the firs mail. Any way, i'm ok with this driver. Just rename imx to some thing generic. This driver can and will be reused on other platforms as well. Kind regards, Oleksij Rempel -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | 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=-2.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no 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 310AEC606AC for ; Mon, 8 Jul 2019 11:02:58 +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 06D8120861 for ; Mon, 8 Jul 2019 11:02:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="MbG9gRiM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 06D8120861 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=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=ICLinyWHODhu9EXdHARge5u2yqysV21VhUXwhn1UKwk=; b=MbG9gRiMi5xehepbnN87FHiX+ 8ynIzXC+twuHztESghZTMUjpGTkMt3CbizvvkhIlPKMhcj/dZaxer56I0o2ZoVS0i6hJUI54bKw7r 9eoEpouHOU+IzZ4zm0LrWv68xjqaptpslBGBVGaHYzNmixAMSZK2Iph/AbGJF+36BjpfKdgyVfnsV 3muQaF+oU2oXTJVRwScDesVdVhtemSXEp5aQ7eMatytulDWAo9zlBhEyLMgdBg6entstC+/me1nXu F0eWt/VR5y1nOuOD85c7lM16aiHLdCsrE5w8EqgiPJu8tI6gY5aUkxF6afVUJoTyPmp9nqkp5OjIE r+mZbXzow==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hkRQ5-0000ur-9Y; Mon, 08 Jul 2019 11:02:53 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hkRPz-0000uR-1w for linux-arm-kernel@lists.infradead.org; Mon, 08 Jul 2019 11:02:49 +0000 Received: from soja.hi.pengutronix.de ([2001:67c:670:100:3ad5:47ff:feaf:13da]) by metis.ext.pengutronix.de with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1hkRPv-0005tn-2i; Mon, 08 Jul 2019 13:02:43 +0200 Subject: Re: [EXT] Re: [RFC 2/2] rpmsg: imx: add the initial imx rpmsg support To: Richard Zhu , "ohad@wizery.com" , "bjorn.andersson@linaro.org" , "linux-remoteproc@vger.kernel.org" References: <1561968784-1124-1-git-send-email-hongxing.zhu@nxp.com> <1561968784-1124-3-git-send-email-hongxing.zhu@nxp.com> <3e0a061c-4f5e-ac32-031d-909a48644265@pengutronix.de> From: Oleksij Rempel Message-ID: Date: Mon, 8 Jul 2019 13:02:33 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-SA-Exim-Connect-IP: 2001:67c:670:100:3ad5:47ff:feaf:13da X-SA-Exim-Mail-From: o.rempel@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190708_040247_132310_471834E7 X-CRM114-Status: GOOD ( 22.37 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "linux-arm-kernel@lists.infradead.org" , "arnaud.pouliquen@st.com" , Fabien DESSENNE , "loic.pallardy@st.com" , "elder@linaro.org" Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgUmljaGFyZCwKCk9uIDA4LjA3LjE5IDEyOjE3LCBSaWNoYXJkIFpodSB3cm90ZToKPiBIaSBP bGVrc2lqOgo+IFRoYW5rcyBmb3IgeW91ciBjb21tZW50cy4KPiAKPiAKPj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0KPj4gRnJvbTogT2xla3NpaiBSZW1wZWwgW21haWx0bzpvLnJlbXBlbEBw ZW5ndXRyb25peC5kZV0KPj4gU2VudDogMjAxOeW5tDfmnIg05pelIDE3OjM2Cj4+IFRvOiBSaWNo YXJkIFpodSA8aG9uZ3hpbmcuemh1QG54cC5jb20+OyBvaGFkQHdpemVyeS5jb207Cj4+IGJqb3Ju LmFuZGVyc3NvbkBsaW5hcm8ub3JnOyBsaW51eC1yZW1vdGVwcm9jQHZnZXIua2VybmVsLm9yZwo+ PiBDYzogbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBGYWJpZW4gREVTU0VO TkUKPj4gPGZhYmllbi5kZXNzZW5uZUBzdC5jb20+OyBsb2ljLnBhbGxhcmR5QHN0LmNvbTsgYXJu YXVkLnBvdWxpcXVlbkBzdC5jb207Cj4+IHMtYW5uYUB0aS5jb207IGVsZGVyQGxpbmFyby5vcmcK Pj4gU3ViamVjdDogW0VYVF0gUmU6IFtSRkMgMi8yXSBycG1zZzogaW14OiBhZGQgdGhlIGluaXRp YWwgaW14IHJwbXNnIHN1cHBvcnQKPj4KPj4gQ2F1dGlvbjogRVhUIEVtYWlsCj4+Cj4+IEhpIFJp Y2hhcmQsCj4+Cj4+IE9uIDAxLjA3LjE5IDEwOjM0LCBSaWNoYXJkIFpodSB3cm90ZToKPj4+IEJh c2VkIG9uICJ2aXJ0aW9fcnBtc2dfYnVzIiBkcml2ZXIsIFRoaXMgcGF0Y2gtc2V0IGlzIHVzZWQg dG8gc2V0IHVwCj4+PiB0aGUgY29tbXVuaWNhdGlvbiBtZWNoYW5pc20gYmV0d2VlbiBBIGNvcmUg YW5kIE0gY29yZSBvbiBpLk1YIEFNUAo+PiBTT0NzLgo+Pj4KPj4+IEFkZCB0aGUgaW5pdGlhbCBp bXggcnBtc2cgc3VwcG9ydCBnbHVlIGRyaXZlciBhbmQgb25lIHBpbmdwb25nIGRlbW8sCj4+PiBk ZW1vbnN0cmF0ZWQgdGhlIGRhdGEgdHJhbnNhY3Rpb25zIGJldHdlZW4gQSBjb3JlIGFuZCByZW1v dGUgTSBjb3JlLgo+Pj4gRGlzdHJpYnV0ZWQgZnJhbWV3b3JrIGlzIHVzZWQgaW4gSU1YIFJQTVNH IGltcGxlbWVudGF0aW9uLCByZWZlciB0bwo+Pj4gdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6 Cj4+PiAgICAgLSBUaGUgQ0FOIGZ1bmN0aW9ucyBjb250YWluZWQgaW4gTSBjb3JlIGFuZCBSVE9T IHNob3VsZCBiZSByZWFkeSBhbmQKPj4+ICAgICAgIGNvbXBsZXRlIGZ1bmN0aW9uYWwgaW4gNTBt cyBhZnRlciBBTVAgc3lzdGVtIGlzIHR1cm5lZCBvbi4KPj4+ICAgICAtIFBhcnRpdGlvbiByZXNl dC4gU3lzdGVtIHdvdWxkbid0IGJlIHN0YWxsZWQgYnkgdGhlIGV4Y2VwdGlvbnMgKGUueAo+Pj4g ICAgICAgdGhlIHJlc2V0IHRyaWdnZXJlZCBieSB0aGUgc3lzdGVtIGhhbmcpIG9jY3VycmVkIGF0 IHRoZSBvdGhlciBzaWRlLgo+Pj4gICAgICAgQW5kIHRoZSBSUE1TRyBtZWNoYW5pc20gc2hvdWxk IGJlIHJlY292ZXJlZCBhdXRvbWFjdGlsbHkgYWZ0ZXIKPj4gdGhlCj4+PiAgICAgICBwYXJ0aXRp b24gcmVzZXQgaXMgY29tcGxldGVkLgo+Pj4gSW4gdGhpcyBzY2VuYXJpbywgdGhlIE0gY29yZSBh bmQgUlRPUyB3b3VsZCBiZSBraWNrZWQgb2ZmIGJ5Cj4+PiBib290bG9hZGVyIGZpcnN0bHksIHRo ZW4gQSBjb3JlIGFuZCBMaW51eCB3b3VsZCBiZSBsb2FkZWQgbGF0ZXIuIEJvdGgKPj4+IE0gY29y ZS9SVE9TIGFuZCBBIGNvcmUvTGludXggYXJlIHJ1bm5pbmcgaW5kZXBlbmRseS4KPj4+Cj4+PiBP bmUgcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbiB1c2VkIHRvIHN0b3JlIHRoZSB2cmluZyBpcyBtYW5k YXRvcnkKPj4+IHJlcXVpcmVkIHRvIHByZS1yZXNlcnZlZCBhbmQgd2VsbC1rbm93bmVkIGJ5IGJv dGggQSBjb3JlIGFuZCBNIGNvcmUKPj4KPj4gSSBkb24ndCBzZWUgYW55IHRoaW5nIGlteCBzcGVj aWZpYyBpbiB0aGlzIHBhdGNoLiBXZSBhbHJlYWR5IGhhdmUgcmVtb3RlcHJvYwo+PiB3aGljaCB3 b3VsZCBwYXJzZSBmaXJtd2FyZSBoZWFkZXIgYW5kIGNyZWF0ZSBuZWVkZWQgZGV2aWNlcy4gVGhp cyBkcml2ZXIgaXMKPj4gb25seSBuZWVkZWQgZm9yIHRoZSBjYXNlIHdoZXJlIGZpcm13YXJlIHdh cyBzdGFyZWQgYnkgdGhlIGJvb3Rsb2FkZXIuCj4+Cj4gW1JpY2hhcmQgWmh1XSBCb290bG9hZGVy IHN0YXJ0cyB0aGUgZmlybXdhcmUgaXMgbWFuZGF0b3J5IHJlcXVpcmVkIGluIHRoZXNlIHNjZW5h cmlvCj4gcmVmZXIgdG8gdGhlIHJlYXNvbnMgbGlzdGVkIGluIHRoZSBjb21taXQuCj4gVGh1cywg dGhlIGRpc3RyaWJ1dGVkIGZyYW1ld29yayBoYXMgdG8gYmUgdXNlZCwgYW5kIGJvdGggQSBjb3Jl L0xpbnV4IGFuZCByZW1vdGUgY29yZS9SVE9TCj4gd29ya3MgaW5kZXBlbmRlbnRseS4KPiAKPj4g SSBwZXJzb25hbGx5IHdvdWxkIHByZWZlciB0byBoYXZlIGdlbmVyaWMgZHJpdmVyIG9yIGV4dGVu ZCB0aGUgcmVtb3RlcHJvYwo+PiBmcmFtZXdvcmsuIFNvIHdlIGNhbiBub3RpZnkga2VybmVsIGFi b3V0IHdvcmsgYWxyZWFkeSBkb25lIGJ5IGJvb3Rsb2FkZXIuCj4+Cj4gW1JpY2hhcmQgWmh1XSBU aGFua3MgZm9yIHlvdXIgc3VnZ2VzdGlvbnMuCj4gUmVnYXJkaW5nIHRvIG15IHVuZGVyc3RhbmQs IGl0IHNlZW1zIHRoYXQgbWFzdGVyL3NsYXZlIG1vZGUgaXMgdXNlZCBpbiB0aGUgcmVtb3RlcHJv YyBjdXJyZW50bHkuCj4gQSBjb3JlL0xpbnV4IGFjdHMgYXMgbWFzdGVyLCB0byBjb250cm9scy9t YW5pcHVsYXRlcyByZW1vdGUgY29yZS9SVE9TLgo+IEl0IGlzbid0IGFwcGxpY2FibGUgZm9yIHRo ZSBzY2VuYXJpbyBkZXNjcmliZWQgYnkgdGhpcyBwYXRjaC1zZXQuCj4gCj4+IEluIGdlbmVyYWws IHNvbWUgbW9yZSBpc3N1ZXMgc2hvdWxkIGJlIHNvbHZlZDoKPj4gLSBIYW5kbGUgb3Igbm90IHRv dWNoIGlkbGUgY2xvY2tzIGZvciBkaWZmZXJlbnQgbm9kZSB1c2VkIGJ5IE0gY29yZSBhbmQgbm90 Cj4+IG1haW4gc3lzdGVtLgo+PiAtIHBpbiBjb250cm9sCj4+IC0gcmVndWxhdG9ycwo+Pgo+PiBT VCBkZXZzIGFscmVhZHkgdHJpZWQgdG8gc29sdmUgdGhpcyBpc3N1ZXMgYnkgY3JlYXRpbmcgInJl bW90ZXByb2M6IGFkZCBzeXN0ZW0KPj4gcmVzb3VyY2UgbWFuYWdlciBkZXZpY2UiIHBhdGNoLiBJ IGRvbid0IGtub3cgd2hhdCBpcyBjdXJyZW50IHN0YXRlIG9mIGl0ICgvbWUKPj4gYWRkaW5nIFNU IGRldnMgdG8gQ0MpLgo+Pgo+IFtSaWNoYXJkIFpodV0gWWVzLCBpdCBpcy4gTWFueSBjb250cmli dXRpb25zIGhhdmUgYmVlbiBtYWRlIGJ5IEZhYmllbi4KPiBJTUhPLCB0aGVyZSBhcmUgc29tZSBk aWZmZXJlbnQgYmVoYXZpb3JzIG9uIGlNWDhRWFAvUU0gcGxhdGZvcm1zLCB0aGUKPiAgIHJlc291 cmNlcyAoZS54IElQIG1vZHVsZXMpIGhhZCBiZWVuIGFzc2lnbmVkIGFuZCBtYW5hZ2VkIGJ5IHRo ZSBYUkRDLgo+IEluIHRoZSBvdGhlciB3b3JkcywgdGhlIEhXIHJlc291cmNlcyB3b3VsZCBiZSBh c3NpZ25lZCBhbmQgbWFuYWdlZCB3b3VsZAo+ICAgYmUgdHJhbnNwYXJlbnQgdG8gU1cuCj4gCj4g VGh1cywgYm90aCBBIGNvcmUvTGludXggYW5kIE0gY29yZS9SVE9TIGNhbiB3b3JrIHJlYWwgaW5k ZXBlbmRlbnRseS4KPiBTeXN0ZW0gd291bGRuJ3QgYmUgc3RhbGxlZCBieSB0aGUgZXhjZXB0aW9u cyAoZS54IHRoZSByZXNldCB0cmlnZ2VyZWQgYnkgdGhlCj4gc3lzdGVtIGhhbmcpIG9jY3VycmVk IGF0IHRoZSBvdGhlciBzaWRlLiBBbmQgdGhlIFJQTVNHIG1lY2hhbmlzbSBzaG91bGQKPiAgIGJl IHJlY292ZXJlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBwYXJ0aXRpb24gcmVzZXQgaXMgY29t cGxldGVkLgoKSXQgaXMgZXhhY3RseSB0aGUgd2F5IEkgZGlkIHVuZGVyc3Rvb2QgaXQgaW4gdGhl IGZpcnMgbWFpbC4gQW55IHdheSwgaSdtIG9rCndpdGggdGhpcyBkcml2ZXIuIEp1c3QgcmVuYW1l IGlteCB0byBzb21lIHRoaW5nIGdlbmVyaWMuIFRoaXMgZHJpdmVyIGNhbiBhbmQgd2lsbCBiZSAK cmV1c2VkIG9uIG90aGVyIHBsYXRmb3JtcyBhcyB3ZWxsLgoKS2luZCByZWdhcmRzLApPbGVrc2lq IFJlbXBlbAoKLS0gClBlbmd1dHJvbml4IGUuSy4gICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkluZHVzdHJpYWwgTGludXggU29sdXRpb25z ICAgICAgICAgICAgICAgICB8IGh0dHA6Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8ClBlaW5lciBT dHIuIDYtOCwgMzExMzcgSGlsZGVzaGVpbSwgR2VybWFueSB8IFBob25lOiArNDktNTEyMS0yMDY5 MTctMCAgICB8CkFtdHNnZXJpY2h0IEhpbGRlc2hlaW0sIEhSQSAyNjg2ICAgICAgICAgICB8IEZh eDogICArNDktNTEyMS0yMDY5MTctNTU1NSB8CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==