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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C23DC433F5 for ; Wed, 23 Mar 2022 10:08:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234811AbiCWKJb (ORCPT ); Wed, 23 Mar 2022 06:09:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243423AbiCWKJX (ORCPT ); Wed, 23 Mar 2022 06:09:23 -0400 Received: from mx0b-001ae601.pphosted.com (mx0a-001ae601.pphosted.com [67.231.149.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE15F76E0D; Wed, 23 Mar 2022 03:07:52 -0700 (PDT) Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 22N704oP005444; Wed, 23 Mar 2022 05:07:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=message-id : date : mime-version : from : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=PODMain02222019; bh=5x6TWK8quLFcJokScQy0C7jNthZDFDtxhZhGtf0oW88=; b=gMAm3lVQNHAKO6B3TJn9hWH+lROY3oyVbSZR4lZ22aWEEfeA0bkvgacDfepvmsj9AOns fvIxjS9orewIakom87E4kV0FNa1gb8jC+b1OuRUKtGHC8EeYpd0Mv40biYcZi2lTG8r9 /3X4jI/+bf2M0+K0sAKYUqoDtMtUNbW4dYvbyele+JZIot6tYshKWzb5w2XD5ryqngRt Fp2hgu7vevs2/zDBPyDMR/ZzrSTpRpYuNW9siIII75To0SAhCyQ7IUfxao6t1QYtIe9q 9CvWoHXe/f2V4d1eSkvCSZM85Cym4XBwN39vexcO+GRyP35ocPF9OhPJJMb25hHSPnl1 kw== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 3ewck1dnpt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Wed, 23 Mar 2022 05:07:38 -0500 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Wed, 23 Mar 2022 10:07:36 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Wed, 23 Mar 2022 10:07:36 +0000 Received: from [198.61.65.125] (unknown [198.61.65.125]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 00A6146A; Wed, 23 Mar 2022 10:07:35 +0000 (UTC) Message-ID: <3657b9ef-2c2e-82b1-1e2c-3d50c64d84b2@opensource.cirrus.com> Date: Wed, 23 Mar 2022 10:07:35 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 From: To: Michal Simek , Michal Simek , Shubhrajyoti Datta , , , , Subject: Re: [PATCH] i2c: cadence: Increase timeout per message if necessary References: <20220309093147.102385-1-tanureal@opensource.cirrus.com> <4af9c968-b837-e984-1051-2dcd240f2c08@opensource.cirrus.com> <08dc1f90-586a-a47a-7c13-bce0405c13d6@xilinx.com> In-Reply-To: <08dc1f90-586a-a47a-7c13-bce0405c13d6@xilinx.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Proofpoint-ORIG-GUID: zAO6pjyxiih057zn7EocQu6cDpvsq9n9 X-Proofpoint-GUID: zAO6pjyxiih057zn7EocQu6cDpvsq9n9 X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3/22/22 5:18 PM, Michal Simek wrote: > > > On 3/22/22 16:34, tanureal@opensource.cirrus.com wrote: > > On 3/21/22 3:57 PM, Michal Simek wrote: > >> +Shubhrajyoti > >> > >> On 3/9/22 10:31, Lucas Tanure wrote: > >> > Timeout as 1 second sets a upper limit on the length of > >> > the transfer executed, but there is no maximum length of > >> > a write or read message set in i2c_adapter_quirks for this > >> > controller. > >> > >> nit: I would expect that you have run any test and you reached an issue. > >> Would be good to describe what exactly you have tried on which > >> configuration to make it super clear. > >> > >> > > >> > To remove that limitation calculate the minimal time > >> > necessary, plus some wiggle room, for every message > >> > and use it instead of the default one second, if > >> > more than one second. > >> > > >> > Signed-off-by: Lucas Tanure > >> > --- > >> >   drivers/i2c/busses/i2c-cadence.c | 12 ++++++++++-- > >> >   1 file changed, 10 insertions(+), 2 deletions(-) > >> > > >> > diff --git a/drivers/i2c/busses/i2c-cadence.c > > >> b/drivers/i2c/busses/i2c-cadence.c > >> > index 805c77143a0f..b4c1ad19cdae 100644 > >> > --- a/drivers/i2c/busses/i2c-cadence.c > >> > +++ b/drivers/i2c/busses/i2c-cadence.c > >> > @@ -760,7 +760,7 @@ static void cdns_i2c_master_reset(struct > > >> i2c_adapter *adap) > >> >   static int cdns_i2c_process_msg(struct cdns_i2c *id, struct > >> i2c_msg > *msg, > >> >           struct i2c_adapter *adap) > >> >   { > >> > -    unsigned long time_left; > >> > +    unsigned long time_left, msg_timeout; > >> >       u32 reg; > >> >       id->p_msg = msg; > >> > @@ -785,8 +785,16 @@ static int cdns_i2c_process_msg(struct > >> cdns_i2c > *id, struct i2c_msg *msg, > >> >       else > >> >           cdns_i2c_msend(id); > >> > +    /* Minimal time to execute this message */ > >> > +    msg_timeout = msecs_to_jiffies((1000 * msg->len * > >> BITS_PER_BYTE) > / id->i2c_clk); > >> > +    /* Plus some wiggle room */ > >> > +    msg_timeout += msecs_to_jiffies(500); > >> > + > >> > +    if (msg_timeout < adap->timeout) > >> > +        msg_timeout = adap->timeout; > >> > + > >> >       /* Wait for the signal of completion */ > >> > -    time_left = wait_for_completion_timeout(&id->xfer_done, > > >> adap->timeout); > >> > +    time_left = wait_for_completion_timeout(&id->xfer_done, > > >> msg_timeout); > >> >       if (time_left == 0) { > >> >           cdns_i2c_master_reset(adap); > >> >           dev_err(id->adap.dev.parent, > >> > >> > >> If my assumption is right and there is any actual issue you had > >> please send v2 and feel free to add there my: > >> Acked-by: Michal Simek > >> > >> Thanks, > >> Michal > >> > >> > >> > > The issue happens for I2C devices that have firmware, which will send > > a big I2C message, but the I2C controller will timeout on it. > > That happened for CS35L41 DSP firmware tests, so no particular > > configuration, just a driver sending firmware blob over I2C. > > How big is it? > > M > The firmware has 33868 bytes, and it is split in a few writes. The first one to time out has 20240 bytes: [ 53.398444] cs35l41 0-0040: DSP1: Firmware version: 3 [ 53.403522] cs35l41 0-0040: DSP1: cs35l41-dsp1-spk-prot.wmfw: Fri 04 Feb 2022 12:01:42 W. Europe Standard Time [ 55.331688] cdns-i2c e0004000.i2c: timeout waiting on completion [ 55.336721] cs35l41 0-0040: DSP1: cs35l41-dsp1-spk-prot.wmfw.5: Failed to write 20240 bytes at 0 in PM_PACKED: -110 20240 bytes at 100k clock should take 1.6192 seconds, which is more than the current timeout of one second. 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 EED44C433F5 for ; Wed, 23 Mar 2022 10:09:27 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:References:Subject:To:From:MIME-Version: Date:Message-ID:Reply-To:Cc:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=A1du5Y49Kbchq87JgPEBD1kQnoi0br8QI7Ms2LK7Mqs=; b=HuT8Uf0pOyouHP75pbKD0FOWzR +w6lEf0eSN2vgILcX3Pi42o3vbTUmmjUcddS2Ou4VQXvqFjziHERdJOGg023YLwUhmDKNmmbhatGw 9j86TyWXfQb1Hi/+tKW5r24WNUz3Zwo0xOxdogMkD0FdoIn6+AJ9xtQFXIpLDS/EPlXKK+i+BQzqL 51pZNDOJT5v3VwNKeXHGZedck7rsja7cEW86q4UrhuZXtA/gVJNQOkYdlb4eaKG9PD8PAlrGYO8XK 51egOhjTNCIKXgCgl1TUSXwAbR2Ax6x8o4rTPTC/htP+6BiF9MdjMlv2G6PveMZz6hu7qck6RXgvN PR4oSCaw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nWxuL-00DI32-5j; Wed, 23 Mar 2022 10:08:01 +0000 Received: from mx0a-001ae601.pphosted.com ([67.231.149.25] helo=mx0b-001ae601.pphosted.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nWxuB-00DHzl-AR for linux-arm-kernel@lists.infradead.org; Wed, 23 Mar 2022 10:07:52 +0000 Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 22N704oP005444; Wed, 23 Mar 2022 05:07:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=message-id : date : mime-version : from : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=PODMain02222019; bh=5x6TWK8quLFcJokScQy0C7jNthZDFDtxhZhGtf0oW88=; b=gMAm3lVQNHAKO6B3TJn9hWH+lROY3oyVbSZR4lZ22aWEEfeA0bkvgacDfepvmsj9AOns fvIxjS9orewIakom87E4kV0FNa1gb8jC+b1OuRUKtGHC8EeYpd0Mv40biYcZi2lTG8r9 /3X4jI/+bf2M0+K0sAKYUqoDtMtUNbW4dYvbyele+JZIot6tYshKWzb5w2XD5ryqngRt Fp2hgu7vevs2/zDBPyDMR/ZzrSTpRpYuNW9siIII75To0SAhCyQ7IUfxao6t1QYtIe9q 9CvWoHXe/f2V4d1eSkvCSZM85Cym4XBwN39vexcO+GRyP35ocPF9OhPJJMb25hHSPnl1 kw== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 3ewck1dnpt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Wed, 23 Mar 2022 05:07:38 -0500 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Wed, 23 Mar 2022 10:07:36 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Wed, 23 Mar 2022 10:07:36 +0000 Received: from [198.61.65.125] (unknown [198.61.65.125]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 00A6146A; Wed, 23 Mar 2022 10:07:35 +0000 (UTC) Message-ID: <3657b9ef-2c2e-82b1-1e2c-3d50c64d84b2@opensource.cirrus.com> Date: Wed, 23 Mar 2022 10:07:35 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 From: To: Michal Simek , Michal Simek , Shubhrajyoti Datta , , , , Subject: Re: [PATCH] i2c: cadence: Increase timeout per message if necessary References: <20220309093147.102385-1-tanureal@opensource.cirrus.com> <4af9c968-b837-e984-1051-2dcd240f2c08@opensource.cirrus.com> <08dc1f90-586a-a47a-7c13-bce0405c13d6@xilinx.com> In-Reply-To: <08dc1f90-586a-a47a-7c13-bce0405c13d6@xilinx.com> X-Proofpoint-ORIG-GUID: zAO6pjyxiih057zn7EocQu6cDpvsq9n9 X-Proofpoint-GUID: zAO6pjyxiih057zn7EocQu6cDpvsq9n9 X-Proofpoint-Spam-Reason: safe X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220323_030751_402005_D1F96BC7 X-CRM114-Status: GOOD ( 35.41 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMy8yMi8yMiA1OjE4IFBNLCBNaWNoYWwgU2ltZWsgPG1pY2hhbC5zaW1la0B4aWxpbnguY29t PiB3cm90ZToKPiAKPiAKPiBPbiAzLzIyLzIyIDE2OjM0LCB0YW51cmVhbEBvcGVuc291cmNlLmNp cnJ1cy5jb20gd3JvdGU6Cj4gPiBPbiAzLzIxLzIyIDM6NTcgUE0sIE1pY2hhbCBTaW1layA8bWlj aGFsLnNpbWVrQHhpbGlueC5jb20+IHdyb3RlOgo+ID4+ICtTaHViaHJhanlvdGkKPiA+Pgo+ID4+ IE9uIDMvOS8yMiAxMDozMSwgTHVjYXMgVGFudXJlIHdyb3RlOgo+ID4+ID4gVGltZW91dCBhcyAx IHNlY29uZCBzZXRzIGEgdXBwZXIgbGltaXQgb24gdGhlIGxlbmd0aCBvZgo+ID4+ID4gdGhlIHRy YW5zZmVyIGV4ZWN1dGVkLCBidXQgdGhlcmUgaXMgbm8gbWF4aW11bSBsZW5ndGggb2YKPiA+PiA+ IGEgd3JpdGUgb3IgcmVhZCBtZXNzYWdlIHNldCBpbiBpMmNfYWRhcHRlcl9xdWlya3MgZm9yIHRo aXMKPiA+PiA+IGNvbnRyb2xsZXIuCj4gPj4KPiA+PiBuaXQ6IEkgd291bGQgZXhwZWN0IHRoYXQg eW91IGhhdmUgcnVuIGFueSB0ZXN0IGFuZCB5b3UgcmVhY2hlZCBhbiBpc3N1ZS4KPiA+PiBXb3Vs ZCBiZSBnb29kIHRvIGRlc2NyaWJlIHdoYXQgZXhhY3RseSB5b3UgaGF2ZSB0cmllZCBvbiB3aGlj aCAKPiA+PiBjb25maWd1cmF0aW9uIHRvIG1ha2UgaXQgc3VwZXIgY2xlYXIuCj4gPj4KPiA+PiA+ Cj4gPj4gPiBUbyByZW1vdmUgdGhhdCBsaW1pdGF0aW9uIGNhbGN1bGF0ZSB0aGUgbWluaW1hbCB0 aW1lCj4gPj4gPiBuZWNlc3NhcnksIHBsdXMgc29tZSB3aWdnbGUgcm9vbSwgZm9yIGV2ZXJ5IG1l c3NhZ2UKPiA+PiA+IGFuZCB1c2UgaXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmUgc2Vjb25k LCBpZgo+ID4+ID4gbW9yZSB0aGFuIG9uZSBzZWNvbmQuCj4gPj4gPgo+ID4+ID4gU2lnbmVkLW9m Zi1ieTogTHVjYXMgVGFudXJlIDx0YW51cmVhbEBvcGVuc291cmNlLmNpcnJ1cy5jb20+Cj4gPj4g PiAtLS0KPiA+PiA+IMKgIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtY2FkZW5jZS5jIHwgMTIgKysr KysrKysrKy0tCj4gPj4gPiDCoCAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMiBk ZWxldGlvbnMoLSkKPiA+PiA+Cj4gPj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2Vz L2kyYy1jYWRlbmNlLmMgPiAKPiA+PiBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtY2FkZW5jZS5j Cj4gPj4gPiBpbmRleCA4MDVjNzcxNDNhMGYuLmI0YzFhZDE5Y2RhZSAxMDA2NDQKPiA+PiA+IC0t LSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtY2FkZW5jZS5jCj4gPj4gPiArKysgYi9kcml2ZXJz L2kyYy9idXNzZXMvaTJjLWNhZGVuY2UuYwo+ID4+ID4gQEAgLTc2MCw3ICs3NjAsNyBAQCBzdGF0 aWMgdm9pZCBjZG5zX2kyY19tYXN0ZXJfcmVzZXQoc3RydWN0ID4gCj4gPj4gaTJjX2FkYXB0ZXIg KmFkYXApCj4gPj4gPiDCoCBzdGF0aWMgaW50IGNkbnNfaTJjX3Byb2Nlc3NfbXNnKHN0cnVjdCBj ZG5zX2kyYyAqaWQsIHN0cnVjdCAKPiA+PiBpMmNfbXNnID4gKm1zZywKPiA+PiA+IMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCj4gPj4gPiDCoCB7Cj4gPj4gPiAt wqDCoMKgIHVuc2lnbmVkIGxvbmcgdGltZV9sZWZ0Owo+ID4+ID4gK8KgwqDCoCB1bnNpZ25lZCBs b25nIHRpbWVfbGVmdCwgbXNnX3RpbWVvdXQ7Cj4gPj4gPiDCoMKgwqDCoMKgIHUzMiByZWc7Cj4g Pj4gPiDCoMKgwqDCoMKgIGlkLT5wX21zZyA9IG1zZzsKPiA+PiA+IEBAIC03ODUsOCArNzg1LDE2 IEBAIHN0YXRpYyBpbnQgY2Ruc19pMmNfcHJvY2Vzc19tc2coc3RydWN0IAo+ID4+IGNkbnNfaTJj ID4gKmlkLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAo+ID4+ID4gwqDCoMKgwqDCoCBlbHNlCj4gPj4g PiDCoMKgwqDCoMKgwqDCoMKgwqAgY2Ruc19pMmNfbXNlbmQoaWQpOwo+ID4+ID4gK8KgwqDCoCAv KiBNaW5pbWFsIHRpbWUgdG8gZXhlY3V0ZSB0aGlzIG1lc3NhZ2UgKi8KPiA+PiA+ICvCoMKgwqAg bXNnX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKCgxMDAwICogbXNnLT5sZW4gKiAKPiA+PiBC SVRTX1BFUl9CWVRFKSA+IC8gaWQtPmkyY19jbGspOwo+ID4+ID4gK8KgwqDCoCAvKiBQbHVzIHNv bWUgd2lnZ2xlIHJvb20gKi8KPiA+PiA+ICvCoMKgwqAgbXNnX3RpbWVvdXQgKz0gbXNlY3NfdG9f amlmZmllcyg1MDApOwo+ID4+ID4gKwo+ID4+ID4gK8KgwqDCoCBpZiAobXNnX3RpbWVvdXQgPCBh ZGFwLT50aW1lb3V0KQo+ID4+ID4gK8KgwqDCoMKgwqDCoMKgIG1zZ190aW1lb3V0ID0gYWRhcC0+ dGltZW91dDsKPiA+PiA+ICsKPiA+PiA+IMKgwqDCoMKgwqAgLyogV2FpdCBmb3IgdGhlIHNpZ25h bCBvZiBjb21wbGV0aW9uICovCj4gPj4gPiAtwqDCoMKgIHRpbWVfbGVmdCA9IHdhaXRfZm9yX2Nv bXBsZXRpb25fdGltZW91dCgmaWQtPnhmZXJfZG9uZSwgPiAKPiA+PiBhZGFwLT50aW1lb3V0KTsK PiA+PiA+ICvCoMKgwqAgdGltZV9sZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZp ZC0+eGZlcl9kb25lLCA+IAo+ID4+IG1zZ190aW1lb3V0KTsKPiA+PiA+IMKgwqDCoMKgwqAgaWYg KHRpbWVfbGVmdCA9PSAwKSB7Cj4gPj4gPiDCoMKgwqDCoMKgwqDCoMKgwqAgY2Ruc19pMmNfbWFz dGVyX3Jlc2V0KGFkYXApOwo+ID4+ID4gwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoaWQtPmFk YXAuZGV2LnBhcmVudCwKPiA+Pgo+ID4+Cj4gPj4gSWYgbXkgYXNzdW1wdGlvbiBpcyByaWdodCBh bmQgdGhlcmUgaXMgYW55IGFjdHVhbCBpc3N1ZSB5b3UgaGFkIAo+ID4+IHBsZWFzZSBzZW5kIHYy IGFuZCBmZWVsIGZyZWUgdG8gYWRkIHRoZXJlIG15Ogo+ID4+IEFja2VkLWJ5OiBNaWNoYWwgU2lt ZWsgPG1pY2hhbC5zaW1la0B4aWxpbnguY29tPgo+ID4+Cj4gPj4gVGhhbmtzLAo+ID4+IE1pY2hh bAo+ID4+Cj4gPj4KPiA+Pgo+ID4gVGhlIGlzc3VlIGhhcHBlbnMgZm9yIEkyQyBkZXZpY2VzIHRo YXQgaGF2ZSBmaXJtd2FyZSwgd2hpY2ggd2lsbCBzZW5kIAo+ID4gYSBiaWcgSTJDIG1lc3NhZ2Us IGJ1dCB0aGUgSTJDIGNvbnRyb2xsZXIgd2lsbCB0aW1lb3V0IG9uIGl0Lgo+ID4gVGhhdCBoYXBw ZW5lZCBmb3IgQ1MzNUw0MSBEU1AgZmlybXdhcmUgdGVzdHMsIHNvIG5vIHBhcnRpY3VsYXIgCj4g PiBjb25maWd1cmF0aW9uLCBqdXN0IGEgZHJpdmVyIHNlbmRpbmcgZmlybXdhcmUgYmxvYiBvdmVy IEkyQy4KPiAKPiBIb3cgYmlnIGlzIGl0Pwo+IAo+IE0KPiAKVGhlIGZpcm13YXJlIGhhcyAzMzg2 OCBieXRlcywgYW5kIGl0IGlzIHNwbGl0IGluIGEgZmV3IHdyaXRlcy4gVGhlIGZpcnN0IG9uZSB0 byB0aW1lIG91dCBoYXMgMjAyNDAgYnl0ZXM6CgpbICAgNTMuMzk4NDQ0XSBjczM1bDQxIDAtMDA0 MDogRFNQMTogRmlybXdhcmUgdmVyc2lvbjogMwpbICAgNTMuNDAzNTIyXSBjczM1bDQxIDAtMDA0 MDogRFNQMTogY3MzNWw0MS1kc3AxLXNway1wcm90LndtZnc6IEZyaSAwNCBGZWIgMjAyMiAxMjow MTo0MiBXLiBFdXJvcGUgU3RhbmRhcmQgVGltZQpbICAgNTUuMzMxNjg4XSBjZG5zLWkyYyBlMDAw NDAwMC5pMmM6IHRpbWVvdXQgd2FpdGluZyBvbiBjb21wbGV0aW9uClsgICA1NS4zMzY3MjFdIGNz MzVsNDEgMC0wMDQwOiBEU1AxOiBjczM1bDQxLWRzcDEtc3BrLXByb3Qud21mdy41OiBGYWlsZWQg dG8gd3JpdGUgMjAyNDAgYnl0ZXMgYXQgMCBpbiBQTV9QQUNLRUQ6IC0xMTAKCjIwMjQwIGJ5dGVz IGF0IDEwMGsgY2xvY2sgc2hvdWxkIHRha2UgMS42MTkyIHNlY29uZHMsIHdoaWNoIGlzIG1vcmUg dGhhbiB0aGUgY3VycmVudCB0aW1lb3V0IG9mIG9uZSBzZWNvbmQuCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==