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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham 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 363B4C3A59E for ; Wed, 21 Aug 2019 16:04:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1225422CF7 for ; Wed, 21 Aug 2019 16:04:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728195AbfHUQEr convert rfc822-to-8bit (ORCPT ); Wed, 21 Aug 2019 12:04:47 -0400 Received: from mail-oi1-f196.google.com ([209.85.167.196]:40459 "EHLO mail-oi1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727480AbfHUQEr (ORCPT ); Wed, 21 Aug 2019 12:04:47 -0400 Received: by mail-oi1-f196.google.com with SMTP id h21so1977691oie.7; Wed, 21 Aug 2019 09:04:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=RynLZSvey/kZnxVVVLyjk8KwWQHiCOLQUV51xUwB0Yk=; b=jsnfETkQFCYWNk6Plf4XBGVI1KifG4CRFEWAVr1j6Hmkr8Wr+3UmPKm6NgGnNj6z3N eoHKttBLjrqrgr8c5r+gU3cPDwduOI8zp5oyTfm+EBTCyfXl4Dw6Zn46CQNnWzjkN1+b 1Z/5Jzu/R17qr3LoLxvRAd1lgsvpTyMdkP4Dr0kExWuguRulJcP7+EmilgWqPp7ocVLM oaFKDGWXNjUEYyCJlBKmy9wMZR9eOfXkio2s/+ClQW4OKMJnceQI3s0XYO/zddPZW8UG k9oUL46dlLigdy0vzZkXtLpQf9X2FXJl9IsDRRfnIhayY73jeTQ7kPrXTIQzzOpHWOt6 ckBQ== X-Gm-Message-State: APjAAAXDrMcR8tbaSRyGUZin3qA8dutbN0XpIm5iN7bXC/rb+/Ey2qk7 tgqz+G6uF0QiR7tEKKe/EgvDsql8vF/SGFnSUFs= X-Google-Smtp-Source: APXvYqyCyYAXkVjRaQGsnU23tWjV9XaQliV6h6E6vgonh7EnvSf18y72SQkeo8O2ThkeTII/zk4tfeUibNzePnGmHQk= X-Received: by 2002:aca:ea82:: with SMTP id i124mr538173oih.153.1566403485948; Wed, 21 Aug 2019 09:04:45 -0700 (PDT) MIME-Version: 1.0 References: <20190814092757.13726-1-geert+renesas@glider.be> <20190814092924.13857-1-geert+renesas@glider.be> <20190814092924.13857-2-geert+renesas@glider.be> <20190814093558.xlx5ck54dw2dgb6k@pengutronix.de> <20190814110804.2ceo2upc3su7muup@pengutronix.de> <95a9b7ed-71a5-f58c-92dd-913893535f3a@gmail.com> <352d8f55-afe2-9f76-ad92-f15a9faa16a8@gmail.com> In-Reply-To: <352d8f55-afe2-9f76-ad92-f15a9faa16a8@gmail.com> From: Geert Uytterhoeven Date: Wed, 21 Aug 2019 18:04:34 +0200 Message-ID: Subject: Re: [PATCH 1/3] serial: atmel: Don't check for mctrl_gpio_to_gpiod() returning error To: Richard Genoud Cc: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= , Geert Uytterhoeven , Greg Kroah-Hartman , Jiri Slaby , Frieder Schrempf , Shawn Guo , Sascha Hauer , Fabio Estevam , Pengutronix Kernel Team , NXP Linux Team , "open list:SERIAL DRIVERS" , Linux ARM , Linux-Renesas , Nicolas Ferre , Alexandre Belloni , Ludovic Desroches Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Sender: linux-renesas-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-renesas-soc@vger.kernel.org Hi Richard, On Wed, Aug 21, 2019 at 5:27 PM Richard Genoud wrote: > Le 20/08/2019 à 17:47, Richard Genoud a écrit : > > Le 14/08/2019 à 13:08, Uwe Kleine-König a écrit : > >> On Wed, Aug 14, 2019 at 12:20:33PM +0200, Geert Uytterhoeven wrote: > >>> Hi Uwe, > >>> > >>> On Wed, Aug 14, 2019 at 11:36 AM Uwe Kleine-König > >>> wrote: > >>>> On Wed, Aug 14, 2019 at 11:29:22AM +0200, Geert Uytterhoeven wrote: > >>>>> Since commit 1d267ea6539f2663 ("serial: mctrl-gpio: simplify init > >>>>> routine"), mctrl_gpio_init() returns failure if the assignment to any > >>>>> member of the gpio array results in an error pointer. > >>>>> Since commit c359522194593815 ("serial: mctrl_gpio: Avoid probe failures > >>>>> in case of missing gpiolib"), mctrl_gpio_to_gpiod() returns NULL in the > >>>>> !CONFIG_GPIOLIB case. > >>>>> Hence there is no longer a need to check for mctrl_gpio_to_gpiod() > >>>>> returning an error value. A simple NULL check is sufficient. > >>>>> > >>>>> This follows the spirit of commit 445df7ff3fd1a0a9 ("serial: mctrl-gpio: > >>>>> drop usages of IS_ERR_OR_NULL") in the mctrl-gpio core. > >>>>> > >>>>> Signed-off-by: Geert Uytterhoeven > >>>>> --- > >>>>> drivers/tty/serial/atmel_serial.c | 12 ++++-------- > >>>>> 1 file changed, 4 insertions(+), 8 deletions(-) > >>>>> > >>>>> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c > >>>>> index 19a85d6fe3d20541..e9620a81166b7dc1 100644 > >>>>> --- a/drivers/tty/serial/atmel_serial.c > >>>>> +++ b/drivers/tty/serial/atmel_serial.c > >>>>> @@ -303,32 +303,28 @@ static unsigned int atmel_get_lines_status(struct uart_port *port) > >>>>> > >>>>> mctrl_gpio_get(atmel_port->gpios, &ret); > >>>>> > >>>>> - if (!IS_ERR_OR_NULL(mctrl_gpio_to_gpiod(atmel_port->gpios, > >>>>> - UART_GPIO_CTS))) { > >>>>> + if (mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_CTS)) { > >>>>> if (ret & TIOCM_CTS) > >>>>> status &= ~ATMEL_US_CTS; > >>>>> else > >>>>> status |= ATMEL_US_CTS; > >>>>> } > >>>> > >>>> The change is fine, but it seems the atmel driver doesn't use mctrl_gpio > >>>> as expected (at least as expected by me). IMHO driving the hardware > >>>> function of the CTS pin shouldn't be conditional on the presence of a > >>>> cts-gpio. Is there a reason not to just drop the if completely? > >>> > >>> The above code returns the hardware status if CTS is not a GPIO, and > >>> returns (overrides with) the GPIO status if CTS is a GPIO. > >>> Isn't that correct, or am I missing something? > >> > >> I took a deeper look into this driver now. The task for > >> atmel_get_lines_status() isn't to implement the get_mctrl() callback. > >> > >> Instead this is called in the irqhandler to set ATMEL_US_RI in a > >> "pending" value that then later in atmel_handle_status() is translated > >> to a "ring" event that is handled there. > >> > >> So the right cleanup would be to let atmel_get_lines_status() just be > >> > >> return atmel_uart_readl(port, ATMEL_US_CSR); > >> > >> . If something happend on the lines implemented as gpio the driver's irq > >> function isn't called anyhow. > > > > I'd like to give it a good test to be sure, and I'll get back to you. > > So, Uwe is right. > Since commit ce59e48fdbad ("serial: mctrl_gpio: implement interrupt handling"), > atmel_get_lines_status() can be completly killed and replaced by : > atmel_uart_readl(port, ATMEL_US_CSR); > > Geert, do you want to send a patch for that, or should I do it ? Feel free to send a patch. I don't have the Atmel hardware anyway. Thanks! Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds From mboxrd@z Thu Jan 1 00:00:00 1970 From: Geert Uytterhoeven Subject: Re: [PATCH 1/3] serial: atmel: Don't check for mctrl_gpio_to_gpiod() returning error Date: Wed, 21 Aug 2019 18:04:34 +0200 Message-ID: References: <20190814092757.13726-1-geert+renesas@glider.be> <20190814092924.13857-1-geert+renesas@glider.be> <20190814092924.13857-2-geert+renesas@glider.be> <20190814093558.xlx5ck54dw2dgb6k@pengutronix.de> <20190814110804.2ceo2upc3su7muup@pengutronix.de> <95a9b7ed-71a5-f58c-92dd-913893535f3a@gmail.com> <352d8f55-afe2-9f76-ad92-f15a9faa16a8@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <352d8f55-afe2-9f76-ad92-f15a9faa16a8@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Richard Genoud Cc: Alexandre Belloni , Pengutronix Kernel Team , Geert Uytterhoeven , "open list:SERIAL DRIVERS" , Greg Kroah-Hartman , Sascha Hauer , =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= , Frieder Schrempf , Linux-Renesas , Ludovic Desroches , NXP Linux Team , Fabio Estevam , Jiri Slaby , Shawn Guo , Linux ARM List-Id: linux-serial@vger.kernel.org SGkgUmljaGFyZCwKCk9uIFdlZCwgQXVnIDIxLCAyMDE5IGF0IDU6MjcgUE0gUmljaGFyZCBHZW5v dWQgPHJpY2hhcmQuZ2Vub3VkQGdtYWlsLmNvbT4gd3JvdGU6Cj4gTGUgMjAvMDgvMjAxOSDDoCAx Nzo0NywgUmljaGFyZCBHZW5vdWQgYSDDqWNyaXQgOgo+ID4gTGUgMTQvMDgvMjAxOSDDoCAxMzow OCwgVXdlIEtsZWluZS1Lw7ZuaWcgYSDDqWNyaXQgOgo+ID4+IE9uIFdlZCwgQXVnIDE0LCAyMDE5 IGF0IDEyOjIwOjMzUE0gKzAyMDAsIEdlZXJ0IFV5dHRlcmhvZXZlbiB3cm90ZToKPiA+Pj4gSGkg VXdlLAo+ID4+Pgo+ID4+PiBPbiBXZWQsIEF1ZyAxNCwgMjAxOSBhdCAxMTozNiBBTSBVd2UgS2xl aW5lLUvDtm5pZwo+ID4+PiA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPiB3cm90ZToK PiA+Pj4+IE9uIFdlZCwgQXVnIDE0LCAyMDE5IGF0IDExOjI5OjIyQU0gKzAyMDAsIEdlZXJ0IFV5 dHRlcmhvZXZlbiB3cm90ZToKPiA+Pj4+PiBTaW5jZSBjb21taXQgMWQyNjdlYTY1MzlmMjY2MyAo InNlcmlhbDogbWN0cmwtZ3Bpbzogc2ltcGxpZnkgaW5pdAo+ID4+Pj4+IHJvdXRpbmUiKSwgbWN0 cmxfZ3Bpb19pbml0KCkgcmV0dXJucyBmYWlsdXJlIGlmIHRoZSBhc3NpZ25tZW50IHRvIGFueQo+ ID4+Pj4+IG1lbWJlciBvZiB0aGUgZ3BpbyBhcnJheSByZXN1bHRzIGluIGFuIGVycm9yIHBvaW50 ZXIuCj4gPj4+Pj4gU2luY2UgY29tbWl0IGMzNTk1MjIxOTQ1OTM4MTUgKCJzZXJpYWw6IG1jdHJs X2dwaW86IEF2b2lkIHByb2JlIGZhaWx1cmVzCj4gPj4+Pj4gaW4gY2FzZSBvZiBtaXNzaW5nIGdw aW9saWIiKSwgbWN0cmxfZ3Bpb190b19ncGlvZCgpIHJldHVybnMgTlVMTCBpbiB0aGUKPiA+Pj4+ PiAhQ09ORklHX0dQSU9MSUIgY2FzZS4KPiA+Pj4+PiBIZW5jZSB0aGVyZSBpcyBubyBsb25nZXIg YSBuZWVkIHRvIGNoZWNrIGZvciBtY3RybF9ncGlvX3RvX2dwaW9kKCkKPiA+Pj4+PiByZXR1cm5p bmcgYW4gZXJyb3IgdmFsdWUuICBBIHNpbXBsZSBOVUxMIGNoZWNrIGlzIHN1ZmZpY2llbnQuCj4g Pj4+Pj4KPiA+Pj4+PiBUaGlzIGZvbGxvd3MgdGhlIHNwaXJpdCBvZiBjb21taXQgNDQ1ZGY3ZmYz ZmQxYTBhOSAoInNlcmlhbDogbWN0cmwtZ3BpbzoKPiA+Pj4+PiBkcm9wIHVzYWdlcyBvZiBJU19F UlJfT1JfTlVMTCIpIGluIHRoZSBtY3RybC1ncGlvIGNvcmUuCj4gPj4+Pj4KPiA+Pj4+PiBTaWdu ZWQtb2ZmLWJ5OiBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0K3JlbmVzYXNAZ2xpZGVyLmJlPgo+ ID4+Pj4+IC0tLQo+ID4+Pj4+ICBkcml2ZXJzL3R0eS9zZXJpYWwvYXRtZWxfc2VyaWFsLmMgfCAx MiArKysrLS0tLS0tLS0KPiA+Pj4+PiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwg OCBkZWxldGlvbnMoLSkKPiA+Pj4+Pgo+ID4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9z ZXJpYWwvYXRtZWxfc2VyaWFsLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYXRtZWxfc2VyaWFsLmMK PiA+Pj4+PiBpbmRleCAxOWE4NWQ2ZmUzZDIwNTQxLi5lOTYyMGE4MTE2NmI3ZGMxIDEwMDY0NAo+ ID4+Pj4+IC0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9hdG1lbF9zZXJpYWwuYwo+ID4+Pj4+ICsr KyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9hdG1lbF9zZXJpYWwuYwo+ID4+Pj4+IEBAIC0zMDMsMzIg KzMwMywyOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGF0bWVsX2dldF9saW5lc19zdGF0dXMoc3Ry dWN0IHVhcnRfcG9ydCAqcG9ydCkKPiA+Pj4+Pgo+ID4+Pj4+ICAgICAgIG1jdHJsX2dwaW9fZ2V0 KGF0bWVsX3BvcnQtPmdwaW9zLCAmcmV0KTsKPiA+Pj4+Pgo+ID4+Pj4+IC0gICAgIGlmICghSVNf RVJSX09SX05VTEwobWN0cmxfZ3Bpb190b19ncGlvZChhdG1lbF9wb3J0LT5ncGlvcywKPiA+Pj4+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVF9HUElP X0NUUykpKSB7Cj4gPj4+Pj4gKyAgICAgaWYgKG1jdHJsX2dwaW9fdG9fZ3Bpb2QoYXRtZWxfcG9y dC0+Z3Bpb3MsIFVBUlRfR1BJT19DVFMpKSB7Cj4gPj4+Pj4gICAgICAgICAgICAgICBpZiAocmV0 ICYgVElPQ01fQ1RTKQo+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgJj0gfkFU TUVMX1VTX0NUUzsKPiA+Pj4+PiAgICAgICAgICAgICAgIGVsc2UKPiA+Pj4+PiAgICAgICAgICAg ICAgICAgICAgICAgc3RhdHVzIHw9IEFUTUVMX1VTX0NUUzsKPiA+Pj4+PiAgICAgICB9Cj4gPj4+ Pgo+ID4+Pj4gVGhlIGNoYW5nZSBpcyBmaW5lLCBidXQgaXQgc2VlbXMgdGhlIGF0bWVsIGRyaXZl ciBkb2Vzbid0IHVzZSBtY3RybF9ncGlvCj4gPj4+PiBhcyBleHBlY3RlZCAoYXQgbGVhc3QgYXMg ZXhwZWN0ZWQgYnkgbWUpLiBJTUhPIGRyaXZpbmcgdGhlIGhhcmR3YXJlCj4gPj4+PiBmdW5jdGlv biBvZiB0aGUgQ1RTIHBpbiBzaG91bGRuJ3QgYmUgY29uZGl0aW9uYWwgb24gdGhlIHByZXNlbmNl IG9mIGEKPiA+Pj4+IGN0cy1ncGlvLiBJcyB0aGVyZSBhIHJlYXNvbiBub3QgdG8ganVzdCBkcm9w IHRoZSBpZiBjb21wbGV0ZWx5Pwo+ID4+Pgo+ID4+PiBUaGUgYWJvdmUgY29kZSByZXR1cm5zIHRo ZSBoYXJkd2FyZSBzdGF0dXMgaWYgQ1RTIGlzIG5vdCBhIEdQSU8sIGFuZAo+ID4+PiByZXR1cm5z IChvdmVycmlkZXMgd2l0aCkgdGhlIEdQSU8gc3RhdHVzIGlmIENUUyBpcyBhIEdQSU8uCj4gPj4+ IElzbid0IHRoYXQgY29ycmVjdCwgb3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8KPiA+Pgo+ID4+ IEkgdG9vayBhIGRlZXBlciBsb29rIGludG8gdGhpcyBkcml2ZXIgbm93LiBUaGUgdGFzayBmb3IK PiA+PiBhdG1lbF9nZXRfbGluZXNfc3RhdHVzKCkgaXNuJ3QgdG8gaW1wbGVtZW50IHRoZSBnZXRf bWN0cmwoKSBjYWxsYmFjay4KPiA+Pgo+ID4+IEluc3RlYWQgdGhpcyBpcyBjYWxsZWQgaW4gdGhl IGlycWhhbmRsZXIgdG8gc2V0IEFUTUVMX1VTX1JJIGluIGEKPiA+PiAicGVuZGluZyIgdmFsdWUg dGhhdCB0aGVuIGxhdGVyIGluIGF0bWVsX2hhbmRsZV9zdGF0dXMoKSBpcyB0cmFuc2xhdGVkCj4g Pj4gdG8gYSAicmluZyIgZXZlbnQgdGhhdCBpcyBoYW5kbGVkIHRoZXJlLgo+ID4+Cj4gPj4gU28g dGhlIHJpZ2h0IGNsZWFudXAgd291bGQgYmUgdG8gbGV0IGF0bWVsX2dldF9saW5lc19zdGF0dXMo KSBqdXN0IGJlCj4gPj4KPiA+PiAgICAgIHJldHVybiBhdG1lbF91YXJ0X3JlYWRsKHBvcnQsIEFU TUVMX1VTX0NTUik7Cj4gPj4KPiA+PiAuIElmIHNvbWV0aGluZyBoYXBwZW5kIG9uIHRoZSBsaW5l cyBpbXBsZW1lbnRlZCBhcyBncGlvIHRoZSBkcml2ZXIncyBpcnEKPiA+PiBmdW5jdGlvbiBpc24n dCBjYWxsZWQgYW55aG93Lgo+ID4KPiA+IEknZCBsaWtlIHRvIGdpdmUgaXQgYSBnb29kIHRlc3Qg dG8gYmUgc3VyZSwgYW5kIEknbGwgZ2V0IGJhY2sgdG8geW91Lgo+Cj4gU28sIFV3ZSBpcyByaWdo dC4KPiBTaW5jZSBjb21taXQgY2U1OWU0OGZkYmFkICgic2VyaWFsOiBtY3RybF9ncGlvOiBpbXBs ZW1lbnQgaW50ZXJydXB0IGhhbmRsaW5nIiksCj4gYXRtZWxfZ2V0X2xpbmVzX3N0YXR1cygpIGNh biBiZSBjb21wbGV0bHkga2lsbGVkIGFuZCByZXBsYWNlZCBieSA6Cj4gYXRtZWxfdWFydF9yZWFk bChwb3J0LCBBVE1FTF9VU19DU1IpOwo+Cj4gR2VlcnQsIGRvIHlvdSB3YW50IHRvIHNlbmQgYSBw YXRjaCBmb3IgdGhhdCwgb3Igc2hvdWxkIEkgZG8gaXQgPwoKRmVlbCBmcmVlIHRvIHNlbmQgYSAg cGF0Y2guCkkgZG9uJ3QgaGF2ZSB0aGUgQXRtZWwgaGFyZHdhcmUgIGFueXdheS4KVGhhbmtzIQoK R3J7b2V0amUsZWV0aW5nfXMsCgogICAgICAgICAgICAgICAgICAgICAgICBHZWVydAoKLS0gCkdl ZXJ0IFV5dHRlcmhvZXZlbiAtLSBUaGVyZSdzIGxvdHMgb2YgTGludXggYmV5b25kIGlhMzIgLS0g Z2VlcnRAbGludXgtbTY4ay5vcmcKCkluIHBlcnNvbmFsIGNvbnZlcnNhdGlvbnMgd2l0aCB0ZWNo bmljYWwgcGVvcGxlLCBJIGNhbGwgbXlzZWxmIGEgaGFja2VyLiBCdXQKd2hlbiBJJ20gdGFsa2lu ZyB0byBqb3VybmFsaXN0cyBJIGp1c3Qgc2F5ICJwcm9ncmFtbWVyIiBvciBzb21ldGhpbmcgbGlr ZSB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIExpbnVzIFRvcnZhbGRz CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==