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=-5.4 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 B656EC5DF60 for ; Fri, 8 Nov 2019 16:12:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7C17821924 for ; Fri, 8 Nov 2019 16:12:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="uAAwCs8n" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726232AbfKHQMi (ORCPT ); Fri, 8 Nov 2019 11:12:38 -0500 Received: from perceval.ideasonboard.com ([213.167.242.64]:49662 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726152AbfKHQMh (ORCPT ); Fri, 8 Nov 2019 11:12:37 -0500 Received: from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi [81.175.216.236]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9B4FD2D1; Fri, 8 Nov 2019 17:12:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1573229555; bh=MJrT4FC9jc+NWyRUFOqsCpcTpbAwQ8EfwtqsFtILchI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=uAAwCs8nkG1Zs8jvtdXzaL279fKcMCVm+SzgFV34pn6TZK1/PKwJbTX9IxplQ6T2N GfGnPE4WaKUPdDlO0LxBNwIsLnBikEPFoKNBgM/J2nebq9hEoRso4Gt/iJ0vuXbkGG bzXRsACGwb5b43YLiK8aa7m8rHRHH352gFdA5iDk= Date: Fri, 8 Nov 2019 18:12:26 +0200 From: Laurent Pinchart To: Rob Herring Cc: dri-devel , Michal Simek , Hyun Kwon , Satish Kumar Nagireddy , devicetree@vger.kernel.org Subject: Re: [PATCH v9 1/4] dt-bindings: display: xlnx: Add ZynqMP DP subsystem bindings Message-ID: <20191108161226.GD15731@pendragon.ideasonboard.com> References: <20190925235544.11524-1-laurent.pinchart@ideasonboard.com> <20190925235544.11524-2-laurent.pinchart@ideasonboard.com> <20190926142318.GB16469@pendragon.ideasonboard.com> <20191108140733.GJ4866@pendragon.ideasonboard.com> <20191108141040.GK4866@pendragon.ideasonboard.com> <20191108143155.GA15731@pendragon.ideasonboard.com> <20191108160120.GC15731@pendragon.ideasonboard.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20191108160120.GC15731@pendragon.ideasonboard.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Hi Rob, On Fri, Nov 08, 2019 at 06:01:20PM +0200, Laurent Pinchart wrote: > On Fri, Nov 08, 2019 at 09:57:55AM -0600, Rob Herring wrote: > > On Fri, Nov 8, 2019 at 8:32 AM Laurent Pinchart wrote: > >> On Fri, Nov 08, 2019 at 04:10:40PM +0200, Laurent Pinchart wrote: > >>> On Fri, Nov 08, 2019 at 04:07:33PM +0200, Laurent Pinchart wrote: > >>>> On Thu, Sep 26, 2019 at 09:57:29AM -0500, Rob Herring wrote: > >>>>> On Thu, Sep 26, 2019 at 9:23 AM Laurent Pinchart wrote: > >>>>>> On Thu, Sep 26, 2019 at 09:15:01AM -0500, Rob Herring wrote: > >>>>>>> On Wed, Sep 25, 2019 at 6:56 PM Laurent Pinchart wrote: > >>>>>>>> > >>>>>>>> From: Hyun Kwon > >>>>>>>> > >>>>>>>> The bindings describe the ZynqMP DP subsystem. They don't support the > >>>>>>>> interface with the programmable logic (FPGA) or audio yet. > >>>>>>>> > >>>>>>>> Signed-off-by: Hyun Kwon > >>>>>>>> Signed-off-by: Laurent Pinchart > >>>>>>>> --- > >>>>>>>> Changes since v8: > >>>>>>>> > >>>>>>>> - Convert to yaml > >>>>>>>> - Rename aclk to dp_apb_clk > >>>>>>> > >>>>>>> /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.example.dt.yaml: > >>>>>>> display@fd4a0000: clock-names:2: 'dp_vtc_pixel_clk_in' was expected > >>>>>> > >>>>>> If you allow me to steal a bit of your brain time, could you help me > >>>>>> expressing the clocks constraint ? > >>>>>> > >>>>>> clocks: > >>>>>> description: > >>>>>> The AXI clock and at least one video clock are mandatory, the audio clock > >>>>>> optional. > >>>>>> minItems: 2 > >>>>>> maxItems: 4 > >>>>>> items: > >>>>>> - description: AXI clock > >>>>>> - description: Audio clock > >>>>>> - description: Non-live video clock (from Processing System) > >>>>>> - description: Live video clock (from Programmable Logic) > >>>>>> clock-names: > >>>>>> minItems: 2 > >>>>>> maxItems: 4 > >>>>>> items: > >>>>>> - const: dp_apb_clk > >>>>>> - const: dp_aud_clk > >>>>>> - const: dp_vtc_pixel_clk_in > >>>>>> - const: dp_live_video_in_clk > >>>>>> > >>>>>> dp_apb_clk is required, dp_aud_clk is optional, and at least one of > >>>>>> dp_vtc_pixel_clk_in and dp_live_video_in_clk is required. > >>>>> > >>>>> I'm hoping people's inability to express the schema will prevent > >>>>> complicated ones like this in the first place... > >>>>> > >>>>> clock-names: > >>>>> oneOf: > >>>>> - minItems: 3 > >>>>> maxItems: 4 > >>>>> items: > >>>>> - const: dp_apb_clk > >>>>> - const: dp_aud_clk > >>>>> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >>>>> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >>>>> - minItems: 2 > >>>>> maxItems: 3 > >>>>> items: > >>>>> - const: dp_apb_clk > >>>>> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >>>>> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >>>> > >>>> The above would make > >>>> > >>>> clock-names = "dp_apb_clk", "dp_vtc_pixel_clk_in", "dp_vtc_pixel_clk_in"; > >>>> > >>>> valid. I've investigated a little bit and found uniqueItems which solves > >>>> my issue. > > > > It wouldn't because uniqueItems is the default (not for json-schema, > > but DT schema string-arrays). > > > >>>> Would the following simpler solution be acceptable ? > >>>> > >>>> clock-names: > >>>> minItems: 2 > >>>> maxItems: 4 > >>>> items: > >>>> - const: dp_apb_clk > >>>> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >>>> - const: dp_aud_clk > >>>> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >>>> uniqueItems: true > >>> > >>> To give more context, > >>> > >>> clocks: > >>> description: > >>> The AXI clock and at least one video clock are mandatory, the audio clock > >>> is optional. > >>> minItems: 2 > >>> maxItems: 4 > >>> items: > >>> - description: dp_apb_clk is the AXI clock > >>> - description: dp_aud_clk is the Audio clock > >>> - description: > >>> dp_vtc_pixel_clk_in is the non-live video clock (from Processing > >>> System) > >>> - description: > >>> dp_live_video_in_clk is the live video clock (from Programmable > >>> Logic) > >>> clock-names: > >>> minItems: 2 > >>> maxItems: 4 > >>> items: > >>> - const: dp_apb_clk > >>> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >>> - const: dp_aud_clk > >>> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >>> uniqueItems: true > > > > 'clock' and 'clock-names' don't match. dp_aud_clk is in the wrong spot. > > You're right, and after thinking twice about it, this won't allow > > clock-names = "dp_apb_clk", "dp_vtc_pixel_clk_in", "dp_live_video_in_clk"; > > so your solution is the only one that will work. > > >> > >> There's something going on that I can't really understand... > >> > >> clock-names: > >> minItems: 2 > >> maxItems: 4 > >> items: > >> - const: dp_apb_clk > >> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >> - const: dp_aud_clk > >> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >> uniqueItems: true > >> > >> results in dt_mk_schema complaining about an invalid schema. However, > >> the following works: > > > > Because 'uniqueItems' is not allowed because it's not needed. > > Error messages could be improved :-) > > >> clock-names: > >> oneOf: > >> - minItems: 2 > >> maxItems: 4 > >> items: > >> - const: dp_apb_clk > >> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >> - const: dp_aud_clk > >> - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > >> uniqueItems: true > >> > >> I assume this is due to clock-names being a string-array, which already > >> contains uniqueItems. However, if I leave uniqueItems out, an example > >> with a duplicated clock-names validates fine. > > > > Are you using 'DT_SCHEMA_FILES' as that leaves out all the core schema? > > Ah, that's probably why ! Thank you. I've now run dt_binding_check without DT_SCHEMA_FILES, and without a uniqueItems in each of the oneOf options, duplicate values are allowed. Is this expected ? > > BTW, this case is probably allowed because we fail to apply the same > > meta-schemas for schema behind the oneOf. -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v9 1/4] dt-bindings: display: xlnx: Add ZynqMP DP subsystem bindings Date: Fri, 8 Nov 2019 18:12:26 +0200 Message-ID: <20191108161226.GD15731@pendragon.ideasonboard.com> References: <20190925235544.11524-1-laurent.pinchart@ideasonboard.com> <20190925235544.11524-2-laurent.pinchart@ideasonboard.com> <20190926142318.GB16469@pendragon.ideasonboard.com> <20191108140733.GJ4866@pendragon.ideasonboard.com> <20191108141040.GK4866@pendragon.ideasonboard.com> <20191108143155.GA15731@pendragon.ideasonboard.com> <20191108160120.GC15731@pendragon.ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id 42E256E067 for ; Fri, 8 Nov 2019 16:12:37 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20191108160120.GC15731@pendragon.ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring Cc: devicetree@vger.kernel.org, Hyun Kwon , Michal Simek , dri-devel , Satish Kumar Nagireddy List-Id: dri-devel@lists.freedesktop.org SGkgUm9iLAoKT24gRnJpLCBOb3YgMDgsIDIwMTkgYXQgMDY6MDE6MjBQTSArMDIwMCwgTGF1cmVu dCBQaW5jaGFydCB3cm90ZToKPiBPbiBGcmksIE5vdiAwOCwgMjAxOSBhdCAwOTo1Nzo1NUFNIC0w NjAwLCBSb2IgSGVycmluZyB3cm90ZToKPiA+IE9uIEZyaSwgTm92IDgsIDIwMTkgYXQgODozMiBB TSBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4+IE9uIEZyaSwgTm92IDA4LCAyMDE5IGF0IDA0 OjEwOjQwUE0gKzAyMDAsIExhdXJlbnQgUGluY2hhcnQgd3JvdGU6Cj4gPj4+IE9uIEZyaSwgTm92 IDA4LCAyMDE5IGF0IDA0OjA3OjMzUE0gKzAyMDAsIExhdXJlbnQgUGluY2hhcnQgd3JvdGU6Cj4g Pj4+PiBPbiBUaHUsIFNlcCAyNiwgMjAxOSBhdCAwOTo1NzoyOUFNIC0wNTAwLCBSb2IgSGVycmlu ZyB3cm90ZToKPiA+Pj4+PiBPbiBUaHUsIFNlcCAyNiwgMjAxOSBhdCA5OjIzIEFNIExhdXJlbnQg UGluY2hhcnQgd3JvdGU6Cj4gPj4+Pj4+IE9uIFRodSwgU2VwIDI2LCAyMDE5IGF0IDA5OjE1OjAx QU0gLTA1MDAsIFJvYiBIZXJyaW5nIHdyb3RlOgo+ID4+Pj4+Pj4gT24gV2VkLCBTZXAgMjUsIDIw MTkgYXQgNjo1NiBQTSBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+ Pj4gRnJvbTogSHl1biBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+Pj4+Pj4+Pgo+ID4+ Pj4+Pj4+IFRoZSBiaW5kaW5ncyBkZXNjcmliZSB0aGUgWnlucU1QIERQIHN1YnN5c3RlbS4gVGhl eSBkb24ndCBzdXBwb3J0IHRoZQo+ID4+Pj4+Pj4+IGludGVyZmFjZSB3aXRoIHRoZSBwcm9ncmFt bWFibGUgbG9naWMgKEZQR0EpIG9yIGF1ZGlvIHlldC4KPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IFNp Z25lZC1vZmYtYnk6IEh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPj4+Pj4+Pj4g U2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29u Ym9hcmQuY29tPgo+ID4+Pj4+Pj4+IC0tLQo+ID4+Pj4+Pj4+IENoYW5nZXMgc2luY2Ugdjg6Cj4g Pj4+Pj4+Pj4KPiA+Pj4+Pj4+PiAtIENvbnZlcnQgdG8geWFtbAo+ID4+Pj4+Pj4+IC0gUmVuYW1l IGFjbGsgdG8gZHBfYXBiX2Nsawo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IC9idWlsZHMvcm9iaGVycmlu Zy9saW51eC1kdC1yZXZpZXcvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3Bs YXkveGxueC94bG54LHp5bnFtcC1kcHN1Yi5leGFtcGxlLmR0LnlhbWw6Cj4gPj4+Pj4+PiBkaXNw bGF5QGZkNGEwMDAwOiBjbG9jay1uYW1lczoyOiAnZHBfdnRjX3BpeGVsX2Nsa19pbicgd2FzIGV4 cGVjdGVkCj4gPj4+Pj4+Cj4gPj4+Pj4+IElmIHlvdSBhbGxvdyBtZSB0byBzdGVhbCBhIGJpdCBv ZiB5b3VyIGJyYWluIHRpbWUsIGNvdWxkIHlvdSBoZWxwIG1lCj4gPj4+Pj4+IGV4cHJlc3Npbmcg dGhlIGNsb2NrcyBjb25zdHJhaW50ID8KPiA+Pj4+Pj4KPiA+Pj4+Pj4gICBjbG9ja3M6Cj4gPj4+ Pj4+ICAgICBkZXNjcmlwdGlvbjoKPiA+Pj4+Pj4gICAgICAgVGhlIEFYSSBjbG9jayBhbmQgYXQg bGVhc3Qgb25lIHZpZGVvIGNsb2NrIGFyZSBtYW5kYXRvcnksIHRoZSBhdWRpbyBjbG9jawo+ID4+ Pj4+PiAgICAgICBvcHRpb25hbC4KPiA+Pj4+Pj4gICAgIG1pbkl0ZW1zOiAyCj4gPj4+Pj4+ICAg ICBtYXhJdGVtczogNAo+ID4+Pj4+PiAgICAgaXRlbXM6Cj4gPj4+Pj4+ICAgICAgIC0gZGVzY3Jp cHRpb246IEFYSSBjbG9jawo+ID4+Pj4+PiAgICAgICAtIGRlc2NyaXB0aW9uOiBBdWRpbyBjbG9j awo+ID4+Pj4+PiAgICAgICAtIGRlc2NyaXB0aW9uOiBOb24tbGl2ZSB2aWRlbyBjbG9jayAoZnJv bSBQcm9jZXNzaW5nIFN5c3RlbSkKPiA+Pj4+Pj4gICAgICAgLSBkZXNjcmlwdGlvbjogTGl2ZSB2 aWRlbyBjbG9jayAoZnJvbSBQcm9ncmFtbWFibGUgTG9naWMpCj4gPj4+Pj4+ICAgY2xvY2stbmFt ZXM6Cj4gPj4+Pj4+ICAgICBtaW5JdGVtczogMgo+ID4+Pj4+PiAgICAgbWF4SXRlbXM6IDQKPiA+ Pj4+Pj4gICAgIGl0ZW1zOgo+ID4+Pj4+PiAgICAgICAtIGNvbnN0OiBkcF9hcGJfY2xrCj4gPj4+ Pj4+ICAgICAgIC0gY29uc3Q6IGRwX2F1ZF9jbGsKPiA+Pj4+Pj4gICAgICAgLSBjb25zdDogZHBf dnRjX3BpeGVsX2Nsa19pbgo+ID4+Pj4+PiAgICAgICAtIGNvbnN0OiBkcF9saXZlX3ZpZGVvX2lu X2Nsawo+ID4+Pj4+Pgo+ID4+Pj4+PiBkcF9hcGJfY2xrIGlzIHJlcXVpcmVkLCBkcF9hdWRfY2xr IGlzIG9wdGlvbmFsLCBhbmQgYXQgbGVhc3Qgb25lIG9mCj4gPj4+Pj4+IGRwX3Z0Y19waXhlbF9j bGtfaW4gYW5kIGRwX2xpdmVfdmlkZW9faW5fY2xrIGlzIHJlcXVpcmVkLgo+ID4+Pj4+Cj4gPj4+ Pj4gSSdtIGhvcGluZyBwZW9wbGUncyBpbmFiaWxpdHkgdG8gZXhwcmVzcyB0aGUgc2NoZW1hIHdp bGwgcHJldmVudAo+ID4+Pj4+IGNvbXBsaWNhdGVkIG9uZXMgbGlrZSB0aGlzIGluIHRoZSBmaXJz dCBwbGFjZS4uLgo+ID4+Pj4+Cj4gPj4+Pj4gY2xvY2stbmFtZXM6Cj4gPj4+Pj4gICBvbmVPZjoK PiA+Pj4+PiAgICAgLSBtaW5JdGVtczogMwo+ID4+Pj4+ICAgICAgIG1heEl0ZW1zOiA0Cj4gPj4+ Pj4gICAgICAgaXRlbXM6Cj4gPj4+Pj4gICAgICAgICAtIGNvbnN0OiBkcF9hcGJfY2xrCj4gPj4+ Pj4gICAgICAgICAtIGNvbnN0OiBkcF9hdWRfY2xrCj4gPj4+Pj4gICAgICAgICAtIGVudW06IFsg ZHBfdnRjX3BpeGVsX2Nsa19pbiwgZHBfbGl2ZV92aWRlb19pbl9jbGsgXQo+ID4+Pj4+ICAgICAg ICAgLSBlbnVtOiBbIGRwX3Z0Y19waXhlbF9jbGtfaW4sIGRwX2xpdmVfdmlkZW9faW5fY2xrIF0K PiA+Pj4+PiAgICAgLSBtaW5JdGVtczogMgo+ID4+Pj4+ICAgICAgIG1heEl0ZW1zOiAzCj4gPj4+ Pj4gICAgICAgaXRlbXM6Cj4gPj4+Pj4gICAgICAgICAtIGNvbnN0OiBkcF9hcGJfY2xrCj4gPj4+ Pj4gICAgICAgICAtIGVudW06IFsgZHBfdnRjX3BpeGVsX2Nsa19pbiwgZHBfbGl2ZV92aWRlb19p bl9jbGsgXQo+ID4+Pj4+ICAgICAgICAgLSBlbnVtOiBbIGRwX3Z0Y19waXhlbF9jbGtfaW4sIGRw X2xpdmVfdmlkZW9faW5fY2xrIF0KPiA+Pj4+Cj4gPj4+PiBUaGUgYWJvdmUgd291bGQgbWFrZQo+ ID4+Pj4KPiA+Pj4+ICAgICBjbG9jay1uYW1lcyA9ICJkcF9hcGJfY2xrIiwgImRwX3Z0Y19waXhl bF9jbGtfaW4iLCAiZHBfdnRjX3BpeGVsX2Nsa19pbiI7Cj4gPj4+Pgo+ID4+Pj4gdmFsaWQuIEkn dmUgaW52ZXN0aWdhdGVkIGEgbGl0dGxlIGJpdCBhbmQgZm91bmQgdW5pcXVlSXRlbXMgd2hpY2gg c29sdmVzCj4gPj4+PiBteSBpc3N1ZS4KPiA+IAo+ID4gSXQgd291bGRuJ3QgYmVjYXVzZSB1bmlx dWVJdGVtcyBpcyB0aGUgZGVmYXVsdCAobm90IGZvciBqc29uLXNjaGVtYSwKPiA+IGJ1dCBEVCBz Y2hlbWEgc3RyaW5nLWFycmF5cykuCj4gPiAKPiA+Pj4+IFdvdWxkIHRoZSBmb2xsb3dpbmcgc2lt cGxlciBzb2x1dGlvbiBiZSBhY2NlcHRhYmxlID8KPiA+Pj4+Cj4gPj4+PiBjbG9jay1uYW1lczoK PiA+Pj4+ICAgICBtaW5JdGVtczogMgo+ID4+Pj4gICAgIG1heEl0ZW1zOiA0Cj4gPj4+PiAgICAg aXRlbXM6Cj4gPj4+PiAgICAgICAtIGNvbnN0OiBkcF9hcGJfY2xrCj4gPj4+PiAgICAgICAtIGVu dW06IFsgZHBfdnRjX3BpeGVsX2Nsa19pbiwgZHBfbGl2ZV92aWRlb19pbl9jbGsgXQo+ID4+Pj4g ICAgICAgLSBjb25zdDogZHBfYXVkX2Nsawo+ID4+Pj4gICAgICAgLSBlbnVtOiBbIGRwX3Z0Y19w aXhlbF9jbGtfaW4sIGRwX2xpdmVfdmlkZW9faW5fY2xrIF0KPiA+Pj4+ICAgICB1bmlxdWVJdGVt czogdHJ1ZQo+ID4+Pgo+ID4+PiBUbyBnaXZlIG1vcmUgY29udGV4dCwKPiA+Pj4KPiA+Pj4gICBj bG9ja3M6Cj4gPj4+ICAgICBkZXNjcmlwdGlvbjoKPiA+Pj4gICAgICAgVGhlIEFYSSBjbG9jayBh bmQgYXQgbGVhc3Qgb25lIHZpZGVvIGNsb2NrIGFyZSBtYW5kYXRvcnksIHRoZSBhdWRpbyBjbG9j awo+ID4+PiAgICAgICBpcyBvcHRpb25hbC4KPiA+Pj4gICAgIG1pbkl0ZW1zOiAyCj4gPj4+ICAg ICBtYXhJdGVtczogNAo+ID4+PiAgICAgaXRlbXM6Cj4gPj4+ICAgICAgIC0gZGVzY3JpcHRpb246 IGRwX2FwYl9jbGsgaXMgdGhlIEFYSSBjbG9jawo+ID4+PiAgICAgICAtIGRlc2NyaXB0aW9uOiBk cF9hdWRfY2xrIGlzIHRoZSBBdWRpbyBjbG9jawo+ID4+PiAgICAgICAtIGRlc2NyaXB0aW9uOgo+ ID4+PiAgICAgICAgICAgZHBfdnRjX3BpeGVsX2Nsa19pbiBpcyB0aGUgbm9uLWxpdmUgdmlkZW8g Y2xvY2sgKGZyb20gUHJvY2Vzc2luZwo+ID4+PiAgICAgICAgICAgU3lzdGVtKQo+ID4+PiAgICAg ICAtIGRlc2NyaXB0aW9uOgo+ID4+PiAgICAgICAgICAgZHBfbGl2ZV92aWRlb19pbl9jbGsgaXMg dGhlIGxpdmUgdmlkZW8gY2xvY2sgKGZyb20gUHJvZ3JhbW1hYmxlCj4gPj4+ICAgICAgICAgICBM b2dpYykKPiA+Pj4gICBjbG9jay1uYW1lczoKPiA+Pj4gICAgICAgbWluSXRlbXM6IDIKPiA+Pj4g ICAgICAgbWF4SXRlbXM6IDQKPiA+Pj4gICAgICAgaXRlbXM6Cj4gPj4+ICAgICAgICAgLSBjb25z dDogZHBfYXBiX2Nsawo+ID4+PiAgICAgICAgIC0gZW51bTogWyBkcF92dGNfcGl4ZWxfY2xrX2lu LCBkcF9saXZlX3ZpZGVvX2luX2NsayBdCj4gPj4+ICAgICAgICAgLSBjb25zdDogZHBfYXVkX2Ns awo+ID4+PiAgICAgICAgIC0gZW51bTogWyBkcF92dGNfcGl4ZWxfY2xrX2luLCBkcF9saXZlX3Zp ZGVvX2luX2NsayBdCj4gPj4+ICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlCj4gPiAKPiA+ICdjbG9j aycgYW5kICdjbG9jay1uYW1lcycgZG9uJ3QgbWF0Y2guIGRwX2F1ZF9jbGsgaXMgaW4gdGhlIHdy b25nIHNwb3QuCj4gCj4gWW91J3JlIHJpZ2h0LCBhbmQgYWZ0ZXIgdGhpbmtpbmcgdHdpY2UgYWJv dXQgaXQsIHRoaXMgd29uJ3QgYWxsb3cKPiAKPiAJY2xvY2stbmFtZXMgPSAiZHBfYXBiX2NsayIs ICJkcF92dGNfcGl4ZWxfY2xrX2luIiwgImRwX2xpdmVfdmlkZW9faW5fY2xrIjsKPiAKPiBzbyB5 b3VyIHNvbHV0aW9uIGlzIHRoZSBvbmx5IG9uZSB0aGF0IHdpbGwgd29yay4KPiAKPiA+Pgo+ID4+ IFRoZXJlJ3Mgc29tZXRoaW5nIGdvaW5nIG9uIHRoYXQgSSBjYW4ndCByZWFsbHkgdW5kZXJzdGFu ZC4uLgo+ID4+Cj4gPj4gY2xvY2stbmFtZXM6Cj4gPj4gICBtaW5JdGVtczogMgo+ID4+ICAgbWF4 SXRlbXM6IDQKPiA+PiAgIGl0ZW1zOgo+ID4+ICAgICAtIGNvbnN0OiBkcF9hcGJfY2xrCj4gPj4g ICAgIC0gZW51bTogWyBkcF92dGNfcGl4ZWxfY2xrX2luLCBkcF9saXZlX3ZpZGVvX2luX2NsayBd Cj4gPj4gICAgIC0gY29uc3Q6IGRwX2F1ZF9jbGsKPiA+PiAgICAgLSBlbnVtOiBbIGRwX3Z0Y19w aXhlbF9jbGtfaW4sIGRwX2xpdmVfdmlkZW9faW5fY2xrIF0KPiA+PiAgIHVuaXF1ZUl0ZW1zOiB0 cnVlCj4gPj4KPiA+PiByZXN1bHRzIGluIGR0X21rX3NjaGVtYSBjb21wbGFpbmluZyBhYm91dCBh biBpbnZhbGlkIHNjaGVtYS4gSG93ZXZlciwKPiA+PiB0aGUgZm9sbG93aW5nIHdvcmtzOgo+ID4g Cj4gPiBCZWNhdXNlICd1bmlxdWVJdGVtcycgaXMgbm90IGFsbG93ZWQgYmVjYXVzZSBpdCdzIG5v dCBuZWVkZWQuCj4gCj4gRXJyb3IgbWVzc2FnZXMgY291bGQgYmUgaW1wcm92ZWQgOi0pCj4gCj4g Pj4gY2xvY2stbmFtZXM6Cj4gPj4gICBvbmVPZjoKPiA+PiAgICAgLSBtaW5JdGVtczogMgo+ID4+ ICAgICAgIG1heEl0ZW1zOiA0Cj4gPj4gICAgICAgaXRlbXM6Cj4gPj4gICAgICAgICAtIGNvbnN0 OiBkcF9hcGJfY2xrCj4gPj4gICAgICAgICAtIGVudW06IFsgZHBfdnRjX3BpeGVsX2Nsa19pbiwg ZHBfbGl2ZV92aWRlb19pbl9jbGsgXQo+ID4+ICAgICAgICAgLSBjb25zdDogZHBfYXVkX2Nsawo+ ID4+ICAgICAgICAgLSBlbnVtOiBbIGRwX3Z0Y19waXhlbF9jbGtfaW4sIGRwX2xpdmVfdmlkZW9f aW5fY2xrIF0KPiA+PiAgICAgICB1bmlxdWVJdGVtczogdHJ1ZQo+ID4+Cj4gPj4gSSBhc3N1bWUg dGhpcyBpcyBkdWUgdG8gY2xvY2stbmFtZXMgYmVpbmcgYSBzdHJpbmctYXJyYXksIHdoaWNoIGFs cmVhZHkKPiA+PiBjb250YWlucyB1bmlxdWVJdGVtcy4gSG93ZXZlciwgaWYgSSBsZWF2ZSB1bmlx dWVJdGVtcyBvdXQsIGFuIGV4YW1wbGUKPiA+PiB3aXRoIGEgZHVwbGljYXRlZCBjbG9jay1uYW1l cyB2YWxpZGF0ZXMgZmluZS4KPiA+IAo+ID4gQXJlIHlvdSB1c2luZyAnRFRfU0NIRU1BX0ZJTEVT JyBhcyB0aGF0IGxlYXZlcyBvdXQgYWxsIHRoZSBjb3JlIHNjaGVtYT8KPiAKPiBBaCwgdGhhdCdz IHByb2JhYmx5IHdoeSAhIFRoYW5rIHlvdS4KCkkndmUgbm93IHJ1biBkdF9iaW5kaW5nX2NoZWNr IHdpdGhvdXQgRFRfU0NIRU1BX0ZJTEVTLCBhbmQgd2l0aG91dCBhCnVuaXF1ZUl0ZW1zIGluIGVh Y2ggb2YgdGhlIG9uZU9mIG9wdGlvbnMsIGR1cGxpY2F0ZSB2YWx1ZXMgYXJlIGFsbG93ZWQuCklz IHRoaXMgZXhwZWN0ZWQgPwoKPiA+IEJUVywgdGhpcyBjYXNlIGlzIHByb2JhYmx5IGFsbG93ZWQg YmVjYXVzZSB3ZSBmYWlsIHRvIGFwcGx5IHRoZSBzYW1lCj4gPiBtZXRhLXNjaGVtYXMgZm9yIHNj aGVtYSBiZWhpbmQgdGhlIG9uZU9mLgoKLS0gClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0Cl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==