From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from galahad.ideasonboard.com ([185.26.127.97]:33589 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751084AbeCTMSm (ORCPT ); Tue, 20 Mar 2018 08:18:42 -0400 From: Laurent Pinchart To: jacopo mondi Cc: Archit Taneja , Jacopo Mondi , a.hajda@samsung.com, airlied@linux.ie, horms@verge.net.au, magnus.damm@gmail.com, geert@linux-m68k.org, niklas.soderlund@ragnatech.se, sergei.shtylyov@cogentembedded.com, robh+dt@kernel.org, mark.rutland@arm.com, dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 0/3] drm: Add LVDS decoder bridge Date: Tue, 20 Mar 2018 14:19:47 +0200 Message-ID: <2410970.hS6IIXmmEj@avalon> In-Reply-To: <20180310180031.GJ4023@w540> References: <1520603500-15218-1-git-send-email-jacopo+renesas@jmondi.org> <20180310180031.GJ4023@w540> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: Hi Jacopo, On Saturday, 10 March 2018 20:00:31 EET jacopo mondi wrote: > On Sat, Mar 10, 2018 at 11:23:19AM +0530, Archit Taneja wrote: > > On Friday 09 March 2018 07:21 PM, Jacopo Mondi wrote: > > > Hello, > > > > > > after some discussion on the proposed bindings for generic lvds > > > decoder and Thine THC63LVD1024, I decided to drop the THC63 specific > > > part and just live with a transparent decoder that does not support any > > > configuration from DT. > > > > > > Dropping THC63 support to avoid discussion on how to better implement > > > support for a DRM bridge with 2 input ports and focus on LVDS mode > > > propagation through bridges as explained in v1 cover letter (for DRM > > > people: please see [1] as why I find difficult to implement support for > > > bridges with multiple input endpoints) > > > > > > Same base branch as v1, with same patches for V3M Eagle applied on top. > > > git://jmondi.org/linux v3m/v4.16-rc3/base > > > > > > Thanks > > > > > > j > > > > > > v1 -> v2: > > > - Drop support for THC63LVD1024 > > > > > > [1] I had a quick at how to model a DRM bridge with multiple input > > > ports, and I see a blocker in how DRM identifies and matches bridges > > > using the devices node in place of the endpoint nodes. > > > > > > As THC63LVD1024 supports up to 2 LVDS inputs and 2 LVDS outputs, I see > > > only a few ways to support that: > > > > > > 1) register 2 drm bridges from the same driver (one for each > > > input/output pair) but they would both be matches on the same device > > > node when the preceding bridge calls "of_drm_find_bridge()". > > > > I think this is the way to go. DRM doesn't say anywhere that we can't have > > 2 drm_bridge-s contained in a single device. I agree, but it only works as long as the two bridges are independent. The THC63LVD1024 can also work in single-in, dual-out and dual-in, single-out modes, in which case we will need a more generic solution. I'm fine ignoring the problem on the driver side for now until someone needs to support such a setup, but the DT bindings need to be right. > > About the issue with > > of_drm_find_bridge(), if you set the 2 bridge's 'of_node' field to > > the bridge1 and bridge2 nodes as shown below, wouldn't that suffice. From > > what I know, we don't necessarily need to set the bridge's of_node > > to the device (i.e, thschip) itself. > > That's fine, but this implies that the preceding bridge (or encoder) in the > DRM pipeline has then to collect the "port" node and match on it > specifically when it attaches this driver. This introduces an ad-hoc > policy that prevents this driver from being easily integrated in > existing pipelines (where bridges are matched on the device node). > > Also, I don't know much about the DRM framework, but it seems to me > that the helper function designed to find the next component to attach > to in the DRM pipeline is: > > drm_of_find_panel_or_bridge(): > remote = of_graph_get_remote_node(); > ep = of_graph_get_endpoint_by_regs(); > return of_graph_get_remote_port_parent(); <-- This returns > the device node of_drm_find_panel(remote); > of_drm_find_bridge(remote); > > I so dare to say matching on device node is kind of the intended way > to do things in DRM, and this driver with two endpoints that wants to > be matched on port nodes would be kind of special one that does not > work as other driver expects to. > > Is my understanding correct, or have I misinterpreted something? I agree with you, so I hope your understanding is correct :-) We have the exact same issue in V4L2 where we used to always match on the device node, but recently the ADV7482 required matching on port nodes. The solution that was proposed was to support matching on both the device node and the port nodes, with automatic lookup of the device node from the port node if no direct match is found. I think this would work well in DRM too. Regardless of what we decide to do, we need to ensure that we don't create two separate categories of bridges with different matching rules that won't be compatible. > > thschip { > > ... > > ports { > > bridge1: port@0 { > > ... > > }; > > bridge2: port@1 { > > ... > > }; > > }; > > }; > > > > > 2) register a single bridge with multiple "next bridges", but when the > > > bridge gets attached I don't see a way on how to identify on which > > > next bridge "drm_bridge_attach()" on, as it depends on the endpoint > > > the current bridge has been attached on first, and we don't have > > > that information. For the general case I think we'll need to start adding port index arguments to the bridge API, but as stated above I'm fine ignoring this for now and creating two bridges. > > > 3) Register more instances of the same chip in DTS, one for each > > > input/output pair. They gonna share supplies and gpios, and I don't > > > like that. I don't think this is a good idea. > > > I had a quick look at the currently in mainline bridges and none of them > > > has multiple input endpoints, except for HDMI audio endpoint, which I > > > haven't found in use in any DTS. I guess the problem has been already > > > debated and maybe solved in the past, so feel free to point me to other > > > sources. > > > > > > Jacopo Mondi (3): > > > dt-bindings: display: bridge: Document LVDS to parallel decoder > > > drm: bridge: Add LVDS decoder driver > > > arm64: dts: renesas: Add LVDS decoder to R-Car V3M Eagle > > > > > > .../bindings/display/bridge/lvds-decoder.txt | 42 ++++++ > > > arch/arm64/boot/dts/renesas/r8a77970-eagle.dts | 31 +++- > > > drivers/gpu/drm/bridge/Kconfig | 8 ++ > > > drivers/gpu/drm/bridge/Makefile | 1 + > > > drivers/gpu/drm/bridge/lvds-decoder.c | 157 ++++++++++++++ > > > 5 files changed, 237 insertions(+), 2 deletions(-) > > > create mode 100644 > > > Documentation/devicetree/bindings/display/bridge/lvds-decoder.txt > > > create mode 100644 drivers/gpu/drm/bridge/lvds-decoder.c -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2 0/3] drm: Add LVDS decoder bridge Date: Tue, 20 Mar 2018 14:19:47 +0200 Message-ID: <2410970.hS6IIXmmEj@avalon> References: <1520603500-15218-1-git-send-email-jacopo+renesas@jmondi.org> <20180310180031.GJ4023@w540> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180310180031.GJ4023@w540> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: jacopo mondi Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, sergei.shtylyov@cogentembedded.com, airlied@linux.ie, magnus.damm@gmail.com, linux-kernel@vger.kernel.org, robh+dt@kernel.org, linux-renesas-soc@vger.kernel.org, horms@verge.net.au, Jacopo Mondi , dri-devel@lists.freedesktop.org, niklas.soderlund@ragnatech.se, geert@linux-m68k.org List-Id: devicetree@vger.kernel.org SGkgSmFjb3BvLAoKT24gU2F0dXJkYXksIDEwIE1hcmNoIDIwMTggMjA6MDA6MzEgRUVUIGphY29w byBtb25kaSB3cm90ZToKPiBPbiBTYXQsIE1hciAxMCwgMjAxOCBhdCAxMToyMzoxOUFNICswNTMw LCBBcmNoaXQgVGFuZWphIHdyb3RlOgo+ID4gT24gRnJpZGF5IDA5IE1hcmNoIDIwMTggMDc6MjEg UE0sIEphY29wbyBNb25kaSB3cm90ZToKPiA+ID4gSGVsbG8sCj4gPiA+Cj4gPiA+IGFmdGVyIHNv bWUgZGlzY3Vzc2lvbiBvbiB0aGUgcHJvcG9zZWQgYmluZGluZ3MgZm9yIGdlbmVyaWMgbHZkcwo+ ID4gPiBkZWNvZGVyIGFuZCBUaGluZSBUSEM2M0xWRDEwMjQsIEkgZGVjaWRlZCB0byBkcm9wIHRo ZSBUSEM2MyBzcGVjaWZpYwo+ID4gPiBwYXJ0IGFuZCBqdXN0IGxpdmUgd2l0aCBhIHRyYW5zcGFy ZW50IGRlY29kZXIgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IGFueQo+ID4gPiBjb25maWd1cmF0aW9u IGZyb20gRFQuCj4gPiA+Cj4gPiA+IERyb3BwaW5nIFRIQzYzIHN1cHBvcnQgdG8gYXZvaWQgZGlz Y3Vzc2lvbiBvbiBob3cgdG8gYmV0dGVyIGltcGxlbWVudAo+ID4gPiBzdXBwb3J0IGZvciBhIERS TSBicmlkZ2Ugd2l0aCAyIGlucHV0IHBvcnRzIGFuZCBmb2N1cyBvbiBMVkRTIG1vZGUKPiA+ID4g cHJvcGFnYXRpb24gdGhyb3VnaCBicmlkZ2VzIGFzIGV4cGxhaW5lZCBpbiB2MSBjb3ZlciBsZXR0 ZXIgKGZvciBEUk0KPiA+ID4gcGVvcGxlOiBwbGVhc2Ugc2VlIFsxXSBhcyB3aHkgSSBmaW5kIGRp ZmZpY3VsdCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IKPiA+ID4gYnJpZGdlcyB3aXRoIG11bHRp cGxlIGlucHV0IGVuZHBvaW50cykKPiA+ID4KPiA+ID4gU2FtZSBiYXNlIGJyYW5jaCBhcyB2MSwg d2l0aCBzYW1lIHBhdGNoZXMgZm9yIFYzTSBFYWdsZSBhcHBsaWVkIG9uIHRvcC4KPiA+ID4gZ2l0 Oi8vam1vbmRpLm9yZy9saW51eCB2M20vdjQuMTYtcmMzL2Jhc2UKPiA+ID4KPiA+ID4gVGhhbmtz Cj4gPiA+Cj4gPiA+ICAgIGoKPiA+ID4KPiA+ID4gdjEgLT4gdjI6Cj4gPiA+IC0gRHJvcCBzdXBw b3J0IGZvciBUSEM2M0xWRDEwMjQKPiA+ID4KPiA+ID4gWzFdIEkgaGFkIGEgcXVpY2sgYXQgaG93 IHRvIG1vZGVsIGEgRFJNIGJyaWRnZSB3aXRoIG11bHRpcGxlIGlucHV0Cj4gPiA+IHBvcnRzLCBh bmQgSSBzZWUgYSBibG9ja2VyIGluIGhvdyBEUk0gaWRlbnRpZmllcyBhbmQgbWF0Y2hlcyBicmlk Z2VzCj4gPiA+IHVzaW5nIHRoZSBkZXZpY2VzIG5vZGUgaW4gcGxhY2Ugb2YgdGhlIGVuZHBvaW50 IG5vZGVzLgo+ID4gPgo+ID4gPiBBcyBUSEM2M0xWRDEwMjQgc3VwcG9ydHMgdXAgdG8gMiBMVkRT IGlucHV0cyBhbmQgMiBMVkRTIG91dHB1dHMsIEkgc2VlCj4gPiA+IG9ubHkgYSBmZXcgd2F5cyB0 byBzdXBwb3J0IHRoYXQ6Cj4gPiA+IAo+ID4gPiAgMSkgcmVnaXN0ZXIgMiBkcm0gYnJpZGdlcyBm cm9tIHRoZSBzYW1lIGRyaXZlciAob25lIGZvciBlYWNoCj4gPiA+ICAgICBpbnB1dC9vdXRwdXQg cGFpcikgYnV0IHRoZXkgd291bGQgYm90aCBiZSBtYXRjaGVzIG9uIHRoZSBzYW1lIGRldmljZQo+ ID4gPiAgICAgbm9kZSB3aGVuIHRoZSBwcmVjZWRpbmcgYnJpZGdlIGNhbGxzICJvZl9kcm1fZmlu ZF9icmlkZ2UoKSIuCj4gPiAKPiA+IEkgdGhpbmsgdGhpcyBpcyB0aGUgd2F5IHRvIGdvLiBEUk0g ZG9lc24ndCBzYXkgYW55d2hlcmUgdGhhdCB3ZSBjYW4ndCBoYXZlCj4gPiAyIGRybV9icmlkZ2Ut cyBjb250YWluZWQgaW4gYSBzaW5nbGUgZGV2aWNlLgoKSSBhZ3JlZSwgYnV0IGl0IG9ubHkgd29y a3MgYXMgbG9uZyBhcyB0aGUgdHdvIGJyaWRnZXMgYXJlIGluZGVwZW5kZW50LiBUaGUgClRIQzYz TFZEMTAyNCBjYW4gYWxzbyB3b3JrIGluIHNpbmdsZS1pbiwgZHVhbC1vdXQgYW5kIGR1YWwtaW4s IHNpbmdsZS1vdXQgCm1vZGVzLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgbmVlZCBhIG1vcmUgZ2Vu ZXJpYyBzb2x1dGlvbi4gSSdtIGZpbmUgaWdub3JpbmcgCnRoZSBwcm9ibGVtIG9uIHRoZSBkcml2 ZXIgc2lkZSBmb3Igbm93IHVudGlsIHNvbWVvbmUgbmVlZHMgdG8gc3VwcG9ydCBzdWNoIGEgCnNl dHVwLCBidXQgdGhlIERUIGJpbmRpbmdzIG5lZWQgdG8gYmUgcmlnaHQuCgo+ID4gQWJvdXQgdGhl IGlzc3VlIHdpdGgKPiA+IG9mX2RybV9maW5kX2JyaWRnZSgpLCBpZiB5b3Ugc2V0IHRoZSAyIGJy aWRnZSdzICdvZl9ub2RlJyBmaWVsZCB0bwo+ID4gdGhlIGJyaWRnZTEgYW5kIGJyaWRnZTIgbm9k ZXMgYXMgc2hvd24gYmVsb3csIHdvdWxkbid0IHRoYXQgc3VmZmljZS4gRnJvbQo+ID4gd2hhdCBJ IGtub3csIHdlIGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gc2V0IHRoZSBicmlkZ2UncyBvZl9u b2RlCj4gPiB0byB0aGUgZGV2aWNlIChpLmUsIHRoc2NoaXApIGl0c2VsZi4KPiAKPiBUaGF0J3Mg ZmluZSwgYnV0IHRoaXMgaW1wbGllcyB0aGF0IHRoZSBwcmVjZWRpbmcgYnJpZGdlIChvciBlbmNv ZGVyKSBpbiB0aGUKPiBEUk0gcGlwZWxpbmUgaGFzIHRoZW4gdG8gY29sbGVjdCB0aGUgInBvcnQi IG5vZGUgYW5kIG1hdGNoIG9uIGl0Cj4gc3BlY2lmaWNhbGx5IHdoZW4gaXQgYXR0YWNoZXMgdGhp cyBkcml2ZXIuIFRoaXMgaW50cm9kdWNlcyBhbiBhZC1ob2MKPiBwb2xpY3kgdGhhdCBwcmV2ZW50 cyB0aGlzIGRyaXZlciBmcm9tIGJlaW5nIGVhc2lseSBpbnRlZ3JhdGVkIGluCj4gZXhpc3Rpbmcg cGlwZWxpbmVzICh3aGVyZSBicmlkZ2VzIGFyZSBtYXRjaGVkIG9uIHRoZSBkZXZpY2Ugbm9kZSku Cj4gCj4gQWxzbywgSSBkb24ndCBrbm93IG11Y2ggYWJvdXQgdGhlIERSTSBmcmFtZXdvcmssIGJ1 dCBpdCBzZWVtcyB0byBtZQo+IHRoYXQgdGhlIGhlbHBlciBmdW5jdGlvbiBkZXNpZ25lZCB0byBm aW5kIHRoZSBuZXh0IGNvbXBvbmVudCB0byBhdHRhY2gKPiB0byBpbiB0aGUgRFJNIHBpcGVsaW5l IGlzOgo+IAo+IGRybV9vZl9maW5kX3BhbmVsX29yX2JyaWRnZSgpOgo+ICAgICAgICAgcmVtb3Rl ID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKCk7Cj4gICAgICAgICAgICAgICAgIGVwID0gb2Zf Z3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MoKTsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIG9m X2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoKTsgIDwtLSBUaGlzIHJldHVybnMKPiB0aGUg ZGV2aWNlIG5vZGUgb2ZfZHJtX2ZpbmRfcGFuZWwocmVtb3RlKTsKPiAgICAgICAgIG9mX2RybV9m aW5kX2JyaWRnZShyZW1vdGUpOwo+IAo+IEkgc28gZGFyZSB0byBzYXkgbWF0Y2hpbmcgb24gZGV2 aWNlIG5vZGUgaXMga2luZCBvZiB0aGUgaW50ZW5kZWQgd2F5Cj4gdG8gZG8gdGhpbmdzIGluIERS TSwgYW5kIHRoaXMgZHJpdmVyIHdpdGggdHdvIGVuZHBvaW50cyB0aGF0IHdhbnRzIHRvCj4gYmUg bWF0Y2hlZCBvbiBwb3J0IG5vZGVzIHdvdWxkIGJlIGtpbmQgb2Ygc3BlY2lhbCBvbmUgdGhhdCBk b2VzIG5vdAo+IHdvcmsgYXMgb3RoZXIgZHJpdmVyIGV4cGVjdHMgdG8uCj4gCj4gSXMgbXkgdW5k ZXJzdGFuZGluZyBjb3JyZWN0LCBvciBoYXZlIEkgbWlzaW50ZXJwcmV0ZWQgc29tZXRoaW5nPwoK SSBhZ3JlZSB3aXRoIHlvdSwgc28gSSBob3BlIHlvdXIgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0 IDotKSBXZSBoYXZlIHRoZSAKZXhhY3Qgc2FtZSBpc3N1ZSBpbiBWNEwyIHdoZXJlIHdlIHVzZWQg dG8gYWx3YXlzIG1hdGNoIG9uIHRoZSBkZXZpY2Ugbm9kZSwgYnV0IApyZWNlbnRseSB0aGUgQURW NzQ4MiByZXF1aXJlZCBtYXRjaGluZyBvbiBwb3J0IG5vZGVzLiBUaGUgc29sdXRpb24gdGhhdCB3 YXMgCnByb3Bvc2VkIHdhcyB0byBzdXBwb3J0IG1hdGNoaW5nIG9uIGJvdGggdGhlIGRldmljZSBu b2RlIGFuZCB0aGUgcG9ydCBub2RlcywgCndpdGggYXV0b21hdGljIGxvb2t1cCBvZiB0aGUgZGV2 aWNlIG5vZGUgZnJvbSB0aGUgcG9ydCBub2RlIGlmIG5vIGRpcmVjdCBtYXRjaCAKaXMgZm91bmQu IEkgdGhpbmsgdGhpcyB3b3VsZCB3b3JrIHdlbGwgaW4gRFJNIHRvby4gUmVnYXJkbGVzcyBvZiB3 aGF0IHdlIApkZWNpZGUgdG8gZG8sIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgY3Jl YXRlIHR3byBzZXBhcmF0ZSBjYXRlZ29yaWVzIApvZiBicmlkZ2VzIHdpdGggZGlmZmVyZW50IG1h dGNoaW5nIHJ1bGVzIHRoYXQgd29uJ3QgYmUgY29tcGF0aWJsZS4KCj4gPiB0aHNjaGlwIHsKPiA+ IAkuLi4KPiA+IAlwb3J0cyB7Cj4gPiAJCWJyaWRnZTE6IHBvcnRAMCB7Cj4gPiAJCQkuLi4KPiA+ IAkJfTsKPiA+IAkJYnJpZGdlMjogcG9ydEAxIHsKPiA+IAkJCS4uLgo+ID4gCQl9Owo+ID4gCX07 Cj4gPiB9Owo+ID4gCj4gPiA+ICAyKSByZWdpc3RlciBhIHNpbmdsZSBicmlkZ2Ugd2l0aCBtdWx0 aXBsZSAibmV4dCBicmlkZ2VzIiwgYnV0IHdoZW4gdGhlCj4gPiA+ICAgICBicmlkZ2UgZ2V0cyBh dHRhY2hlZCBJIGRvbid0IHNlZSBhIHdheSBvbiBob3cgdG8gaWRlbnRpZnkgb24gd2hpY2gKPiA+ ID4gICAgIG5leHQgYnJpZGdlICJkcm1fYnJpZGdlX2F0dGFjaCgpIiBvbiwgYXMgaXQgZGVwZW5k cyBvbiB0aGUgZW5kcG9pbnQKPiA+ID4gICAgIHRoZSBjdXJyZW50IGJyaWRnZSBoYXMgYmVlbiBh dHRhY2hlZCBvbiBmaXJzdCwgYW5kIHdlIGRvbid0IGhhdmUKPiA+ID4gICAgIHRoYXQgaW5mb3Jt YXRpb24uCgpGb3IgdGhlIGdlbmVyYWwgY2FzZSBJIHRoaW5rIHdlJ2xsIG5lZWQgdG8gc3RhcnQg YWRkaW5nIHBvcnQgaW5kZXggYXJndW1lbnRzIAp0byB0aGUgYnJpZGdlIEFQSSwgYnV0IGFzIHN0 YXRlZCBhYm92ZSBJJ20gZmluZSBpZ25vcmluZyB0aGlzIGZvciBub3cgYW5kIApjcmVhdGluZyB0 d28gYnJpZGdlcy4KCj4gPiA+ICAzKSBSZWdpc3RlciBtb3JlIGluc3RhbmNlcyBvZiB0aGUgc2Ft ZSBjaGlwIGluIERUUywgb25lIGZvciBlYWNoCj4gPiA+ICAgICBpbnB1dC9vdXRwdXQgcGFpci4g VGhleSBnb25uYSBzaGFyZSBzdXBwbGllcyBhbmQgZ3Bpb3MsIGFuZCBJIGRvbid0Cj4gPiA+ICAg ICBsaWtlIHRoYXQuCgpJIGRvbid0IHRoaW5rIHRoaXMgaXMgYSBnb29kIGlkZWEuCgo+ID4gPiBJ IGhhZCBhIHF1aWNrIGxvb2sgYXQgdGhlIGN1cnJlbnRseSBpbiBtYWlubGluZSBicmlkZ2VzIGFu ZCBub25lIG9mIHRoZW0KPiA+ID4gaGFzIG11bHRpcGxlIGlucHV0IGVuZHBvaW50cywgZXhjZXB0 IGZvciBIRE1JIGF1ZGlvIGVuZHBvaW50LCB3aGljaCBJCj4gPiA+IGhhdmVuJ3QgZm91bmQgaW4g dXNlIGluIGFueSBEVFMuIEkgZ3Vlc3MgdGhlIHByb2JsZW0gaGFzIGJlZW4gYWxyZWFkeQo+ID4g PiBkZWJhdGVkIGFuZCBtYXliZSBzb2x2ZWQgaW4gdGhlIHBhc3QsIHNvIGZlZWwgZnJlZSB0byBw b2ludCBtZSB0byBvdGhlcgo+ID4gPiBzb3VyY2VzLgo+ID4gPgo+ID4gPiBKYWNvcG8gTW9uZGkg KDMpOgo+ID4gPiAgIGR0LWJpbmRpbmdzOiBkaXNwbGF5OiBicmlkZ2U6IERvY3VtZW50IExWRFMg dG8gcGFyYWxsZWwgZGVjb2Rlcgo+ID4gPiAgIGRybTogYnJpZGdlOiBBZGQgTFZEUyBkZWNvZGVy IGRyaXZlcgo+ID4gPiAgIGFybTY0OiBkdHM6IHJlbmVzYXM6IEFkZCBMVkRTIGRlY29kZXIgdG8g Ui1DYXIgVjNNIEVhZ2xlCj4gPiA+ICAKPiA+ID4gIC4uLi9iaW5kaW5ncy9kaXNwbGF5L2JyaWRn ZS9sdmRzLWRlY29kZXIudHh0ICAgICAgIHwgIDQyICsrKysrKwo+ID4gPiAgYXJjaC9hcm02NC9i b290L2R0cy9yZW5lc2FzL3I4YTc3OTcwLWVhZ2xlLmR0cyAgICAgfCAgMzEgKysrLQo+ID4gPiAg ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDgg KysKPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgICAgICAgICAgICAgICAg ICAgIHwgICAxICsKPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbHZkcy1kZWNvZGVyLmMg ICAgICAgICAgICAgIHwgMTU3ICsrKysrKysrKysrKysrCj4gPiA+ICA1IGZpbGVzIGNoYW5nZWQs IDIzNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0Cj4gPiA+ICBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9icmlk Z2UvbHZkcy1kZWNvZGVyLnR4dAo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvbHZkcy1kZWNvZGVyLmMKCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFy dAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==