From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Subject: Re: [PATCH v2 10/12] dt-bindings: connector: add properties for typec power delivery From: Andrzej Hajda Message-ID: Date: Tue, 6 Mar 2018 12:54:46 +0100 MIME-Version: 1.0 In-Reply-To: Content-Transfer-Encoding: 8bit Content-Language: en-US Content-Type: text/plain; charset="utf-8" References: <1519645759-12701-1-git-send-email-jun.li@nxp.com> <1519645759-12701-11-git-send-email-jun.li@nxp.com> <20522804-65ab-5d48-716a-c199e4c095fc@samsung.com> <133b5194-26ff-071a-d3d1-2bfca1375cae@samsung.com> To: Jun Li , "gregkh@linuxfoundation.org" , "robh+dt@kernel.org" , "heikki.krogerus@linux.intel.com" , "linux@roeck-us.net" Cc: "mark.rutland@arm.com" , "yueyao@google.com" , Peter Chen , "garsilva@embeddedor.com" , "o_leveque@orange.fr" , "shufan_lee@richtek.com" , "linux-usb@vger.kernel.org" , "devicetree@vger.kernel.org" , dl-linux-imx List-ID: On 06.03.2018 10:38, Jun Li wrote: > Hi >> -----Original Message----- >> From: Andrzej Hajda [mailto:a.hajda@samsung.com] >> Sent: 2018年3月5日 17:59 >> To: Jun Li ; gregkh@linuxfoundation.org; >> robh+dt@kernel.org; heikki.krogerus@linux.intel.com; linux@roeck-us.net >> Cc: mark.rutland@arm.com; yueyao@google.com; Peter Chen >> ; garsilva@embeddedor.com; o_leveque@orange.fr; >> shufan_lee@richtek.com; linux-usb@vger.kernel.org; >> devicetree@vger.kernel.org; dl-linux-imx >> Subject: Re: [PATCH v2 10/12] dt-bindings: connector: add properties for >> typec power delivery >> >> On 05.03.2018 08:00, Jun Li wrote: >>>> -----Original Message----- >>>> From: Andrzej Hajda [mailto:a.hajda@samsung.com] >>>> Sent: 2018年2月27日 16:41 >>>> To: Jun Li ; gregkh@linuxfoundation.org; >>>> robh+dt@kernel.org; heikki.krogerus@linux.intel.com; >>>> robh+linux@roeck-us.net >>>> Cc: mark.rutland@arm.com; yueyao@google.com; Peter Chen >>>> ; garsilva@embeddedor.com; >> o_leveque@orange.fr; >>>> shufan_lee@richtek.com; linux-usb@vger.kernel.org; >>>> devicetree@vger.kernel.org; dl-linux-imx >>>> Subject: Re: [PATCH v2 10/12] dt-bindings: connector: add properties >>>> for typec power delivery >>>> >>>> On 26.02.2018 12:49, Li Jun wrote: >>>>> In case of usb-c-connector with power delivery support, add >>>>> bingdings supported by current typec driver, so user can pass all >>>>> those properties via dt. >>>>> >>>>> Signed-off-by: Li Jun >>>>> --- >>>>> Changes for v2: >>>>> - Added typec properties are based on general usb connector bindings[1] >>>>> proposed by Andrzej Hajda. >>>>> - Use the standard unit suffixes as defined in property-units.txt. >>>>> >>>>> [1] >>>>> >> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpa >>>> t >>>> >> chwork.kernel.org%2Fpatch%2F10231447%2F&data=02%7C01%7Cjun.li%40 >>>> nxp.co >>>> >> m%7Cccf14a36ca6445ee5f1108d57dbde3c7%7C686ea1d3bc2b4c6fa92cd99 >>>> c5c30163 >>>> >> 5%7C0%7C0%7C636553176880292197&sdata=2Pi0AtiwAqHQE3rGl%2Bo49K >>>> 7yZZcp%2B >>>>> 5bvJAknRBMGTrk%3D&reserved=0 >>>>> >>>>> .../bindings/connector/usb-connector.txt | 43 >>>> ++++++++++++++++++++++ >>>>> 1 file changed, 43 insertions(+) >>>>> >>>>> diff --git >>>>> a/Documentation/devicetree/bindings/connector/usb-connector.txt >>>>> b/Documentation/devicetree/bindings/connector/usb-connector.txt >>>>> index e1463f1..242f6df 100644 >>>>> --- a/Documentation/devicetree/bindings/connector/usb-connector.txt >>>>> +++ >> b/Documentation/devicetree/bindings/connector/usb-connector.txt >>>>> @@ -15,6 +15,30 @@ Optional properties: >>>>> - type: size of the connector, should be specified in case of USB-A, >> USB-B >>>>> non-fullsize connectors: "mini", "micro". >>>>> >>>>> +Required properties for usb-c-connector with power delivery support: >>>>> +- port-type: should be one of "source", "sink" or "dual". >>>>> +- default-role: preferred power role if port-type is "dual"(drp), >>>>> +should be >>>>> + "sink" or "source". >>>> Since port carries data and power, it would be better to explicitly >>>> mention it in names of properties which can be ambiguous. >>>> Maybe instead of 'port-type' you can use 'power-role', for example. >>> Port-type is align with the name of typec coding and ABI, 'power-role' >>> is more like for the current role rather than the port's ability. >> I am not sure what are you exactly mean by "coding and ABI", but I guess it is >> just about Power-Delivery part of USB-C. And if you want to put this property >> into USB node without mark it is related to PD part of USB connector, you >> risk confusion with possible USB data related properties. > Understood your concern, I am following typec naming conventions, > for typec, port-type property has the same meaning as > /sys/class/typec/portx/port_type > which is not only for power, also for data, there are dedicated > sys files power_role for power and data_role for data. > >> Simple question, what if somebody wants to add property describing USB >> data capabilities (DFP, UFP, DRD), how should it be named? >> > Then we may use data-role? Few lines above you have said -role is "for the current role rather than the port's ability" :) Generally my intention was to avoid such inconsistencies, for example by using consistently prefixes (for example: power and data) and suffixes (for example: mode and role), which are used in specs. We would have then: - power_mode - for PD capabilities, - power_role - for default/initial role, - data_mode - for data capabilities, - data_role - for default/initial role (as I understand specs this property is redundant, as initial data_role is determined by power_role). Of course if there is already well established convention, we shouldn't change it, is there any, sysfs is well established? > >>>> Other thing is that default-role is required only in case of DRP, so >>>> maybe better would be to squash it in power-role, for example: >>>>     power-role: should be on of "source", "sink", "dual-source", >>>> "dual-sink", in case of dual roles suffix determines preferred role. >>> I don't know how much this squash can benefit, "dual-source/sink" is >>> not directly showing its meaning by name. >> Some benefit is simpler binding, no conditionally-required property. >> > There is already string definition for port type and preferred role parse > static const char * const typec_port_types[] = { > [TYPEC_PORT_DFP] = "source", > [TYPEC_PORT_UFP] = "sink", > [TYPEC_PORT_DRP] = "dual", > }; I am little bit confused about enums, according typec specs DFP and UFP are associated with flow of USB data, but DRP is about power - Dual-Role-Power - quite misleading. As I understand from the context it is about power capabilities. Shouldn't be TYPEC_PORT_DFP replaced with TYPEC_PORT_SRC or TYPEC_PORT_SOURCE, similarly UFP ? > And I think there will be other conditionally-required properties > to be extended later, are we going to name all of them by this way? > Either way is OK for me, I am not sure if there is principle like we > should avoid conditionally-required property, if we should, maybe > "dual-preferred-source/sink" is better. I have no strong feelings about it, it is just an idea. > > Hi Heikki, > Do you have any comments/preference here? > >> Another question is that USB TypeC specification describes 7 different >> "behavioral models" [1]: >> - Source-only > Maps "source" > >> - Source (Default) – strong preference toward being a Source but >> subsequently capable of becoming a Sink using USB PD swap mechanisms. > Only present Rp(source) when attach, can be sink only by power swap. > Seems current code doesn't support this, to be extended. > >> - Sink-only > Maps to "sink" > >> - Sink (Default) – strong preference toward being a Sink but subsequently >> capable of becoming a Source using USB PD swap mechanisms. > Only present Rd while attachment, can be source only by power swap support. > Seems current code doesn't support this, to be extended. > >> - DRP: Toggling (Source/Sink) > Maps to "dual" > >> - DRP: Sourcing Device > "dual" but without USB host function(to be extended). > >> - DRP: Sinking Host >> > "dual" but without USB device function(to be extended). > >> How it maps to your proposed props? >> >> [1]: USB Type-C specification release 1.3, chapter 4.5.1.4. >> > Current typec and tcpm hasn't cover the full features like this. So maybe it would be good to extend list of values, or clarify, for example that 'source' means without PR_Swap (ie. Source-only), or maybe add property indicating device is pr_swap capable, whatever suits better. Regards Andrzej > > Thanks > Jun Li >> Regards >> Andrzej >> >>>>> +- src-pdos: An array of u32 with each entry providing supported >>>>> +power >>>>> + source data object(PDO), the detailed bit definitions of PDO can >>>>> +be found >>>>> + in "Universal Serial Bus Power Delivery Specification" chapter >>>>> +6.4.1.2 >>>>> + Source_Capabilities Message, the order of each entry(PDO) should >>>>> +follow >>>>> + the PD spec chapter 6.4.1. Required for power source and power >>>>> +dual >>>> role. >>>>> +- snk-pdos: An array of u32 with each entry providing supported >>>>> +power >>>>> + sink data object(PDO), the detailed bit definitions of PDO can be >>>>> +found in >>>>> + "Universal Serial Bus Power Delivery Specification" chapter >>>>> +6.4.1.3 Sink >>>>> + Capabilities Message, the order of each entry(PDO) should follow >>>>> +the PD >>>>> + spec chapter 6.4.1. Required for power sink and power dual role. >>>> We should avoid magic numbers, magic numbers are bad :) If we really >>>> need to use PDOs here, I think we can re-use PDO_* macros [1] - DTC >>>> should be able to parse it, maybe some lifting will be necessary. >>>> >>>> [1]: >>>> >> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fel >>>> ix >>>> >> ir.bootlin.com%2Flinux%2Fv4.16-rc3%2Fsource%2Finclude%2Flinux%2Fusb% >> 2Fpd.h%23L161&data=02%7C01%7Cjun.li%40nxp.com%7Cccf14a36ca6445e >> e5f1108d57dbde3c7%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0% >> 7C636553176880292197&sdata=72HA33wgRyd2PMoPnZOlMatI2CuadplkYN >>>> DDGKFSUB0%3D&reserved=0 >>>>> +- max-snk-microvolt: The max voltage the sink can support in micro >>>>> +volts, >>>>> + required for power sink and power dual role. >>>>> +- max-snk-microamp: The max current the sink can support in micro >>>>> +amps, >>>>> + required for power sink and power dual role. >>>>> +- max-snk-microwatt-hours: The max power the sink can support in >>>>> +micro >>>>> + Watt-hours, required for power sink and power dual role. >>>>> +- op-snk-microwatt-hours: Sink required operating power in micro >>>>> +Watt-hours, >>>>> + if source offered power is less then it, Capability Mismatch is >>>>> +set, >>>>> + required for power sink and power dual role. >>>> What is the relation between above properties and PDOs specified >> earlier? >>>> Are you sure all these props are required? >>>> >>> Sorry, with latest tcpm code, those props are not required, will remove >> them. >>> Jun Li >>>> And general remark regarding all above properties. For me, most of >>>> them are specific not to the port but to devices responsible for >>>> power >>>> management: chargers, pmics,.... >>>> In many cases these properties are redundant with devices capabilities. >>>> On the other side I guess in many cases it may be convenient to put >>>> them here, so I am not sure what is better :) >>>> >>>> Regards >>>> Andrzej >>>> >>>>> + >>>>> Required nodes: >>>>> - any data bus to the connector should be modeled using the OF >>>>> graph >>>> bindings >>>>> specified in bindings/graph.txt, unless the bus is between parent >>>>> node and @@ -73,3 +97,22 @@ ccic: s2mm005@33 { >>>>> }; >>>>> }; >>>>> }; >>>>> + >>>>> +3. USB-C connector attached to a typec port controller(ptn5110), >>>>> +which has power delivery support and enables drp. >>>>> + >>>>> +typec: ptn5110@50 { >>>>> + ... >>>>> + usb_con: connector { >>>>> + compatible = "usb-c-connector"; >>>>> + label = "USB-C"; >>>>> + port-type = "dual"; >>>>> + default-role = "sink"; >>>>> + src-pdos = <0x380190c8>; >>>>> + snk-pdos = <0x380190c8 0x3802d0c8>; >>>>> + max-snk-microvolt = <9000>; >>>>> + max-snk-microamp = <2000>; >>>>> + max-snk-microwatt-hours = <18000>; >>>>> + op-snk-microwatt-hours = <9000>; >>>>> + }; >>>>> +}; From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,10/12] dt-bindings: connector: add properties for typec power delivery From: Andrzej Hajda Message-Id: Date: Tue, 6 Mar 2018 12:54:46 +0100 To: Jun Li , "gregkh@linuxfoundation.org" , "robh+dt@kernel.org" , "heikki.krogerus@linux.intel.com" , "linux@roeck-us.net" Cc: "mark.rutland@arm.com" , "yueyao@google.com" , Peter Chen , "garsilva@embeddedor.com" , "o_leveque@orange.fr" , "shufan_lee@richtek.com" , "linux-usb@vger.kernel.org" , "devicetree@vger.kernel.org" , dl-linux-imx List-ID: T24gMDYuMDMuMjAxOCAxMDozOCwgSnVuIExpIHdyb3RlOgo+IEhpCj4+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tCj4+IEZyb206IEFuZHJ6ZWogSGFqZGEgW21haWx0bzphLmhhamRhQHNhbXN1 bmcuY29tXQo+PiBTZW50OiAyMDE45bm0M+aciDXml6UgMTc6NTkKPj4gVG86IEp1biBMaSA8anVu LmxpQG54cC5jb20+OyBncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZzsKPj4gcm9iaCtkdEBrZXJu ZWwub3JnOyBoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwuY29tOyBsaW51eEByb2Vjay11cy5u ZXQKPj4gQ2M6IG1hcmsucnV0bGFuZEBhcm0uY29tOyB5dWV5YW9AZ29vZ2xlLmNvbTsgUGV0ZXIg Q2hlbgo+PiA8cGV0ZXIuY2hlbkBueHAuY29tPjsgZ2Fyc2lsdmFAZW1iZWRkZWRvci5jb207IG9f bGV2ZXF1ZUBvcmFuZ2UuZnI7Cj4+IHNodWZhbl9sZWVAcmljaHRlay5jb207IGxpbnV4LXVzYkB2 Z2VyLmtlcm5lbC5vcmc7Cj4+IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBkbC1saW51eC1p bXggPGxpbnV4LWlteEBueHAuY29tPgo+PiBTdWJqZWN0OiBSZTogW1BBVENIIHYyIDEwLzEyXSBk dC1iaW5kaW5nczogY29ubmVjdG9yOiBhZGQgcHJvcGVydGllcyBmb3IKPj4gdHlwZWMgcG93ZXIg ZGVsaXZlcnkKPj4KPj4gT24gMDUuMDMuMjAxOCAwODowMCwgSnVuIExpIHdyb3RlOgo+Pj4+IC0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+Pj4gRnJvbTogQW5kcnplaiBIYWpkYSBbbWFpbHRv OmEuaGFqZGFAc2Ftc3VuZy5jb21dCj4+Pj4gU2VudDogMjAxOOW5tDLmnIgyN+aXpSAxNjo0MQo+ Pj4+IFRvOiBKdW4gTGkgPGp1bi5saUBueHAuY29tPjsgZ3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5v cmc7Cj4+Pj4gcm9iaCtkdEBrZXJuZWwub3JnOyBoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwu Y29tOwo+Pj4+IHJvYmgrbGludXhAcm9lY2stdXMubmV0Cj4+Pj4gQ2M6IG1hcmsucnV0bGFuZEBh cm0uY29tOyB5dWV5YW9AZ29vZ2xlLmNvbTsgUGV0ZXIgQ2hlbgo+Pj4+IDxwZXRlci5jaGVuQG54 cC5jb20+OyBnYXJzaWx2YUBlbWJlZGRlZG9yLmNvbTsKPj4gb19sZXZlcXVlQG9yYW5nZS5mcjsK Pj4+PiBzaHVmYW5fbGVlQHJpY2h0ZWsuY29tOyBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnOwo+ Pj4+IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBkbC1saW51eC1pbXggPGxpbnV4LWlteEBu eHAuY29tPgo+Pj4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgMTAvMTJdIGR0LWJpbmRpbmdzOiBj b25uZWN0b3I6IGFkZCBwcm9wZXJ0aWVzCj4+Pj4gZm9yIHR5cGVjIHBvd2VyIGRlbGl2ZXJ5Cj4+ Pj4KPj4+PiBPbiAyNi4wMi4yMDE4IDEyOjQ5LCBMaSBKdW4gd3JvdGU6Cj4+Pj4+IEluIGNhc2Ug b2YgdXNiLWMtY29ubmVjdG9yIHdpdGggcG93ZXIgZGVsaXZlcnkgc3VwcG9ydCwgYWRkCj4+Pj4+ IGJpbmdkaW5ncyBzdXBwb3J0ZWQgYnkgY3VycmVudCB0eXBlYyBkcml2ZXIsIHNvIHVzZXIgY2Fu IHBhc3MgYWxsCj4+Pj4+IHRob3NlIHByb3BlcnRpZXMgdmlhIGR0Lgo+Pj4+Pgo+Pj4+PiBTaWdu ZWQtb2ZmLWJ5OiBMaSBKdW4gPGp1bi5saUBueHAuY29tPgo+Pj4+PiAtLS0KPj4+Pj4gQ2hhbmdl cyBmb3IgdjI6Cj4+Pj4+IC0gQWRkZWQgdHlwZWMgcHJvcGVydGllcyBhcmUgYmFzZWQgb24gZ2Vu ZXJhbCB1c2IgY29ubmVjdG9yIGJpbmRpbmdzWzFdCj4+Pj4+ICAgcHJvcG9zZWQgYnkgQW5kcnpl aiBIYWpkYS4KPj4+Pj4gLSBVc2UgdGhlIHN0YW5kYXJkIHVuaXQgc3VmZml4ZXMgYXMgZGVmaW5l ZCBpbiBwcm9wZXJ0eS11bml0cy50eHQuCj4+Pj4+Cj4+Pj4+IFsxXQo+Pj4+Pgo+PiBodHRwczov L2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJG JTJGcGEKPj4+PiB0Cj4+Pj4KPj4gY2h3b3JrLmtlcm5lbC5vcmclMkZwYXRjaCUyRjEwMjMxNDQ3 JTJGJmRhdGE9MDIlN0MwMSU3Q2p1bi5saSU0MAo+Pj4+IG54cC5jbwo+Pj4+Cj4+IG0lN0NjY2Yx NGEzNmNhNjQ0NWVlNWYxMTA4ZDU3ZGJkZTNjNyU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5Cj4+ Pj4gYzVjMzAxNjMKPj4+Pgo+PiA1JTdDMCU3QzAlN0M2MzY1NTMxNzY4ODAyOTIxOTcmc2RhdGE9 MlBpMEF0aXdBcUhRRTNyR2wlMkJvNDlLCj4+Pj4gN3laWmNwJTJCCj4+Pj4+IDVidkpBa25SQk1H VHJrJTNEJnJlc2VydmVkPTAKPj4+Pj4KPj4+Pj4gIC4uLi9iaW5kaW5ncy9jb25uZWN0b3IvdXNi LWNvbm5lY3Rvci50eHQgICAgICAgICAgIHwgNDMKPj4+PiArKysrKysrKysrKysrKysrKysrKysr Cj4+Pj4+ICAxIGZpbGUgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKQo+Pj4+Pgo+Pj4+PiBkaWZm IC0tZ2l0Cj4+Pj4+IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nvbm5lY3Rv ci91c2ItY29ubmVjdG9yLnR4dAo+Pj4+PiBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5k aW5ncy9jb25uZWN0b3IvdXNiLWNvbm5lY3Rvci50eHQKPj4+Pj4gaW5kZXggZTE0NjNmMS4uMjQy ZjZkZiAxMDA2NDQKPj4+Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L2Nvbm5lY3Rvci91c2ItY29ubmVjdG9yLnR4dAo+Pj4+PiArKysKPj4gYi9Eb2N1bWVudGF0aW9u L2RldmljZXRyZWUvYmluZGluZ3MvY29ubmVjdG9yL3VzYi1jb25uZWN0b3IudHh0Cj4+Pj4+IEBA IC0xNSw2ICsxNSwzMCBAQCBPcHRpb25hbCBwcm9wZXJ0aWVzOgo+Pj4+PiAgLSB0eXBlOiBzaXpl IG9mIHRoZSBjb25uZWN0b3IsIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gY2FzZSBvZiBVU0ItQSwK Pj4gVVNCLUIKPj4+Pj4gICAgbm9uLWZ1bGxzaXplIGNvbm5lY3RvcnM6ICJtaW5pIiwgIm1pY3Jv Ii4KPj4+Pj4KPj4+Pj4gK1JlcXVpcmVkIHByb3BlcnRpZXMgZm9yIHVzYi1jLWNvbm5lY3RvciB3 aXRoIHBvd2VyIGRlbGl2ZXJ5IHN1cHBvcnQ6Cj4+Pj4+ICstIHBvcnQtdHlwZTogc2hvdWxkIGJl IG9uZSBvZiAic291cmNlIiwgInNpbmsiIG9yICJkdWFsIi4KPj4+Pj4gKy0gZGVmYXVsdC1yb2xl OiBwcmVmZXJyZWQgcG93ZXIgcm9sZSBpZiBwb3J0LXR5cGUgaXMgImR1YWwiKGRycCksCj4+Pj4+ ICtzaG91bGQgYmUKPj4+Pj4gKyAgInNpbmsiIG9yICJzb3VyY2UiLgo+Pj4+IFNpbmNlIHBvcnQg Y2FycmllcyBkYXRhIGFuZCBwb3dlciwgaXQgd291bGQgYmUgYmV0dGVyIHRvIGV4cGxpY2l0bHkK Pj4+PiBtZW50aW9uIGl0IGluIG5hbWVzIG9mIHByb3BlcnRpZXMgd2hpY2ggY2FuIGJlIGFtYmln dW91cy4KPj4+PiBNYXliZSBpbnN0ZWFkIG9mICdwb3J0LXR5cGUnIHlvdSBjYW4gdXNlICdwb3dl ci1yb2xlJywgZm9yIGV4YW1wbGUuCj4+PiBQb3J0LXR5cGUgaXMgYWxpZ24gd2l0aCB0aGUgbmFt ZSBvZiB0eXBlYyBjb2RpbmcgYW5kIEFCSSwgJ3Bvd2VyLXJvbGUnCj4+PiBpcyBtb3JlIGxpa2Ug Zm9yIHRoZSBjdXJyZW50IHJvbGUgcmF0aGVyIHRoYW4gdGhlIHBvcnQncyBhYmlsaXR5Lgo+PiBJ IGFtIG5vdCBzdXJlIHdoYXQgYXJlIHlvdSBleGFjdGx5IG1lYW4gYnkgImNvZGluZyBhbmQgQUJJ IiwgYnV0IEkgZ3Vlc3MgaXQgaXMKPj4ganVzdCBhYm91dCBQb3dlci1EZWxpdmVyeSBwYXJ0IG9m IFVTQi1DLiBBbmQgaWYgeW91IHdhbnQgdG8gcHV0IHRoaXMgcHJvcGVydHkKPj4gaW50byBVU0Ig bm9kZSB3aXRob3V0IG1hcmsgaXQgaXMgcmVsYXRlZCB0byBQRCBwYXJ0IG9mIFVTQiBjb25uZWN0 b3IsIHlvdQo+PiByaXNrIGNvbmZ1c2lvbiB3aXRoIHBvc3NpYmxlIFVTQiBkYXRhIHJlbGF0ZWQg cHJvcGVydGllcy4KPiBVbmRlcnN0b29kIHlvdXIgY29uY2VybiwgSSBhbSBmb2xsb3dpbmcgdHlw ZWMgbmFtaW5nIGNvbnZlbnRpb25zLAo+IGZvciB0eXBlYywgcG9ydC10eXBlIHByb3BlcnR5IGhh cyB0aGUgc2FtZSBtZWFuaW5nIGFzCj4gL3N5cy9jbGFzcy90eXBlYy9wb3J0eC9wb3J0X3R5cGUK PiB3aGljaCBpcyBub3Qgb25seSBmb3IgcG93ZXIsIGFsc28gZm9yIGRhdGEsIHRoZXJlIGFyZSBk ZWRpY2F0ZWQKPiBzeXMgZmlsZXMgcG93ZXJfcm9sZSBmb3IgcG93ZXIgYW5kIGRhdGFfcm9sZSBm b3IgZGF0YS4KPgo+PiBTaW1wbGUgcXVlc3Rpb24sIHdoYXQgaWYgc29tZWJvZHkgd2FudHMgdG8g YWRkIHByb3BlcnR5IGRlc2NyaWJpbmcgVVNCCj4+IGRhdGEgY2FwYWJpbGl0aWVzIChERlAsIFVG UCwgRFJEKSwgaG93IHNob3VsZCBpdCBiZSBuYW1lZD8KPj4KPiBUaGVuIHdlIG1heSB1c2UgZGF0 YS1yb2xlPwoKRmV3IGxpbmVzIGFib3ZlIHlvdSBoYXZlIHNhaWQgLXJvbGUgaXMgImZvciB0aGUg Y3VycmVudCByb2xlIHJhdGhlciB0aGFuCnRoZSBwb3J0J3MgYWJpbGl0eSIgOikKCkdlbmVyYWxs eSBteSBpbnRlbnRpb24gd2FzIHRvIGF2b2lkIHN1Y2ggaW5jb25zaXN0ZW5jaWVzLCBmb3IgZXhh bXBsZSBieQp1c2luZyBjb25zaXN0ZW50bHkKcHJlZml4ZXMgKGZvciBleGFtcGxlOiBwb3dlciBh bmQgZGF0YSkgYW5kIHN1ZmZpeGVzIChmb3IgZXhhbXBsZTogbW9kZQphbmQgcm9sZSksIHdoaWNo IGFyZSB1c2VkIGluIHNwZWNzLgpXZSB3b3VsZCBoYXZlIHRoZW46Ci0gcG93ZXJfbW9kZSAtIGZv ciBQRCBjYXBhYmlsaXRpZXMsCi0gcG93ZXJfcm9sZSAtIGZvciBkZWZhdWx0L2luaXRpYWwgcm9s ZSwKLSBkYXRhX21vZGUgLSBmb3IgZGF0YSBjYXBhYmlsaXRpZXMsCi0gZGF0YV9yb2xlIC0gZm9y IGRlZmF1bHQvaW5pdGlhbCByb2xlIChhcyBJIHVuZGVyc3RhbmQgc3BlY3MgdGhpcwpwcm9wZXJ0 eSBpcyByZWR1bmRhbnQsIGFzIGluaXRpYWwgZGF0YV9yb2xlIGlzIGRldGVybWluZWQgYnkgcG93 ZXJfcm9sZSkuCgpPZiBjb3Vyc2UgaWYgdGhlcmUgaXMgYWxyZWFkeSB3ZWxsIGVzdGFibGlzaGVk IGNvbnZlbnRpb24sIHdlIHNob3VsZG4ndApjaGFuZ2UgaXQsIGlzIHRoZXJlIGFueSwgc3lzZnMg aXMgd2VsbCBlc3RhYmxpc2hlZD8KCj4KPj4+PiBPdGhlciB0aGluZyBpcyB0aGF0IGRlZmF1bHQt cm9sZSBpcyByZXF1aXJlZCBvbmx5IGluIGNhc2Ugb2YgRFJQLCBzbwo+Pj4+IG1heWJlIGJldHRl ciB3b3VsZCBiZSB0byBzcXVhc2ggaXQgaW4gcG93ZXItcm9sZSwgZm9yIGV4YW1wbGU6Cj4+Pj4g wqDCoMKgIHBvd2VyLXJvbGU6IHNob3VsZCBiZSBvbiBvZiAic291cmNlIiwgInNpbmsiLCAiZHVh bC1zb3VyY2UiLAo+Pj4+ICJkdWFsLXNpbmsiLCBpbiBjYXNlIG9mIGR1YWwgcm9sZXMgc3VmZml4 IGRldGVybWluZXMgcHJlZmVycmVkIHJvbGUuCj4+PiBJIGRvbid0IGtub3cgaG93IG11Y2ggdGhp cyBzcXVhc2ggY2FuIGJlbmVmaXQsICJkdWFsLXNvdXJjZS9zaW5rIiBpcwo+Pj4gbm90IGRpcmVj dGx5IHNob3dpbmcgaXRzIG1lYW5pbmcgYnkgbmFtZS4KPj4gU29tZSBiZW5lZml0IGlzIHNpbXBs ZXIgYmluZGluZywgbm8gY29uZGl0aW9uYWxseS1yZXF1aXJlZCBwcm9wZXJ0eS4KPj4KPiBUaGVy ZSBpcyBhbHJlYWR5IHN0cmluZyBkZWZpbml0aW9uIGZvciBwb3J0IHR5cGUgYW5kIHByZWZlcnJl ZCByb2xlIHBhcnNlIAo+IHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHlwZWNfcG9ydF90eXBl c1tdID0gewo+ICAgICAgICAgIFtUWVBFQ19QT1JUX0RGUF0gPSAic291cmNlIiwKPiAgICAgICAg ICBbVFlQRUNfUE9SVF9VRlBdID0gInNpbmsiLAo+ICAgICAgICAgIFtUWVBFQ19QT1JUX0RSUF0g PSAiZHVhbCIsCj4gfTsKCkkgYW0gbGl0dGxlIGJpdCBjb25mdXNlZCBhYm91dCBlbnVtcywgYWNj b3JkaW5nIHR5cGVjIHNwZWNzIERGUCBhbmQgVUZQCmFyZSBhc3NvY2lhdGVkIHdpdGggZmxvdyBv ZiBVU0IgZGF0YSwgYnV0IERSUCBpcyBhYm91dCBwb3dlciAtCkR1YWwtUm9sZS1Qb3dlciAtIHF1 aXRlIG1pc2xlYWRpbmcuCkFzIEkgdW5kZXJzdGFuZCBmcm9tIHRoZSBjb250ZXh0IGl0IGlzIGFi b3V0IHBvd2VyIGNhcGFiaWxpdGllcy4KU2hvdWxkbid0IGJlIFRZUEVDX1BPUlRfREZQIHJlcGxh Y2VkIHdpdGggVFlQRUNfUE9SVF9TUkMgb3IKVFlQRUNfUE9SVF9TT1VSQ0UsIHNpbWlsYXJseSBV RlAgPwoKPiBBbmQgSSB0aGluayB0aGVyZSB3aWxsIGJlIG90aGVyIGNvbmRpdGlvbmFsbHktcmVx dWlyZWQgcHJvcGVydGllcwo+IHRvIGJlIGV4dGVuZGVkIGxhdGVyLCBhcmUgd2UgZ29pbmcgdG8g bmFtZSBhbGwgb2YgdGhlbSBieSB0aGlzIHdheT8KPiBFaXRoZXIgd2F5IGlzIE9LIGZvciBtZSwg SSBhbSBub3Qgc3VyZSBpZiB0aGVyZSBpcyBwcmluY2lwbGUgbGlrZSB3ZQo+IHNob3VsZCBhdm9p ZCBjb25kaXRpb25hbGx5LXJlcXVpcmVkIHByb3BlcnR5LCBpZiB3ZSBzaG91bGQsIG1heWJlCj4g ImR1YWwtcHJlZmVycmVkLXNvdXJjZS9zaW5rIiBpcyBiZXR0ZXIuCgpJIGhhdmUgbm8gc3Ryb25n IGZlZWxpbmdzIGFib3V0IGl0LCBpdCBpcyBqdXN0IGFuIGlkZWEuCgo+Cj4gSGkgSGVpa2tpLAo+ IERvIHlvdSBoYXZlIGFueSBjb21tZW50cy9wcmVmZXJlbmNlIGhlcmU/Cj4KPj4gQW5vdGhlciBx dWVzdGlvbiBpcyB0aGF0IFVTQiBUeXBlQyBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlcyA3IGRpZmZl cmVudAo+PiAiYmVoYXZpb3JhbCBtb2RlbHMiIFsxXToKPj4gLSBTb3VyY2Utb25seQo+IE1hcHMg InNvdXJjZSIKPgo+PiAtIFNvdXJjZSAoRGVmYXVsdCkg4oCTIHN0cm9uZyBwcmVmZXJlbmNlIHRv d2FyZCBiZWluZyBhIFNvdXJjZSBidXQKPj4gc3Vic2VxdWVudGx5IGNhcGFibGUgb2YgYmVjb21p bmcgYSBTaW5rIHVzaW5nIFVTQiBQRCBzd2FwIG1lY2hhbmlzbXMuCj4gT25seSBwcmVzZW50IFJw KHNvdXJjZSkgd2hlbiBhdHRhY2gsIGNhbiBiZSBzaW5rIG9ubHkgYnkgcG93ZXIgc3dhcC4KPiBT ZWVtcyBjdXJyZW50IGNvZGUgZG9lc24ndCBzdXBwb3J0IHRoaXMsIHRvIGJlIGV4dGVuZGVkLgo+ Cj4+IC0gU2luay1vbmx5Cj4gTWFwcyB0byAic2luayIKPgo+PiAtIFNpbmsgKERlZmF1bHQpIOKA kyBzdHJvbmcgcHJlZmVyZW5jZSB0b3dhcmQgYmVpbmcgYSBTaW5rIGJ1dCBzdWJzZXF1ZW50bHkK Pj4gY2FwYWJsZSBvZiBiZWNvbWluZyBhIFNvdXJjZSB1c2luZyBVU0IgUEQgc3dhcCBtZWNoYW5p c21zLgo+IE9ubHkgcHJlc2VudCBSZCB3aGlsZSBhdHRhY2htZW50LCBjYW4gYmUgc291cmNlIG9u bHkgYnkgcG93ZXIgc3dhcCBzdXBwb3J0Lgo+IFNlZW1zIGN1cnJlbnQgY29kZSBkb2Vzbid0IHN1 cHBvcnQgdGhpcywgdG8gYmUgZXh0ZW5kZWQuCj4KPj4gLSBEUlA6IFRvZ2dsaW5nIChTb3VyY2Uv U2luaykKPiBNYXBzIHRvICJkdWFsIgo+Cj4+IC0gRFJQOiBTb3VyY2luZyBEZXZpY2UKPiAiZHVh bCIgYnV0IHdpdGhvdXQgVVNCIGhvc3QgZnVuY3Rpb24odG8gYmUgZXh0ZW5kZWQpLgo+Cj4+IC0g RFJQOiBTaW5raW5nIEhvc3QKPj4KPiAiZHVhbCIgYnV0IHdpdGhvdXQgVVNCIGRldmljZSBmdW5j dGlvbih0byBiZSBleHRlbmRlZCkuCj4KPj4gSG93IGl0IG1hcHMgdG8geW91ciBwcm9wb3NlZCBw cm9wcz8KPj4KPj4gWzFdOiBVU0IgVHlwZS1DIHNwZWNpZmljYXRpb24gcmVsZWFzZSAxLjMsIGNo YXB0ZXIgNC41LjEuNC4KPj4KPiBDdXJyZW50IHR5cGVjIGFuZCB0Y3BtIGhhc24ndCBjb3ZlciB0 aGUgZnVsbCBmZWF0dXJlcyBsaWtlIHRoaXMuCgpTbyBtYXliZSBpdCB3b3VsZCBiZSBnb29kIHRv IGV4dGVuZCBsaXN0IG9mIHZhbHVlcywgb3IgY2xhcmlmeSwgZm9yCmV4YW1wbGUgdGhhdCAnc291 cmNlJyBtZWFucyB3aXRob3V0IFBSX1N3YXAgKGllLiBTb3VyY2Utb25seSksIG9yIG1heWJlCmFk ZCBwcm9wZXJ0eSBpbmRpY2F0aW5nIGRldmljZSBpcyBwcl9zd2FwIGNhcGFibGUsIHdoYXRldmVy IHN1aXRzIGJldHRlci4KClJlZ2FyZHMKQW5kcnplagoKPgo+IFRoYW5rcwo+IEp1biBMaQo+PiBS ZWdhcmRzCj4+IEFuZHJ6ZWoKPj4KPj4+Pj4gKy0gc3JjLXBkb3M6IEFuIGFycmF5IG9mIHUzMiB3 aXRoIGVhY2ggZW50cnkgcHJvdmlkaW5nIHN1cHBvcnRlZAo+Pj4+PiArcG93ZXIKPj4+Pj4gKyAg c291cmNlIGRhdGEgb2JqZWN0KFBETyksIHRoZSBkZXRhaWxlZCBiaXQgZGVmaW5pdGlvbnMgb2Yg UERPIGNhbgo+Pj4+PiArYmUgZm91bmQKPj4+Pj4gKyAgaW4gIlVuaXZlcnNhbCBTZXJpYWwgQnVz IFBvd2VyIERlbGl2ZXJ5IFNwZWNpZmljYXRpb24iIGNoYXB0ZXIKPj4+Pj4gKzYuNC4xLjIKPj4+ Pj4gKyAgU291cmNlX0NhcGFiaWxpdGllcyBNZXNzYWdlLCB0aGUgb3JkZXIgb2YgZWFjaCBlbnRy eShQRE8pIHNob3VsZAo+Pj4+PiArZm9sbG93Cj4+Pj4+ICsgIHRoZSBQRCBzcGVjIGNoYXB0ZXIg Ni40LjEuIFJlcXVpcmVkIGZvciBwb3dlciBzb3VyY2UgYW5kIHBvd2VyCj4+Pj4+ICtkdWFsCj4+ Pj4gcm9sZS4KPj4+Pj4gKy0gc25rLXBkb3M6IEFuIGFycmF5IG9mIHUzMiB3aXRoIGVhY2ggZW50 cnkgcHJvdmlkaW5nIHN1cHBvcnRlZAo+Pj4+PiArcG93ZXIKPj4+Pj4gKyAgc2luayBkYXRhIG9i amVjdChQRE8pLCB0aGUgZGV0YWlsZWQgYml0IGRlZmluaXRpb25zIG9mIFBETyBjYW4gYmUKPj4+ Pj4gK2ZvdW5kIGluCj4+Pj4+ICsgICJVbml2ZXJzYWwgU2VyaWFsIEJ1cyBQb3dlciBEZWxpdmVy eSBTcGVjaWZpY2F0aW9uIiBjaGFwdGVyCj4+Pj4+ICs2LjQuMS4zIFNpbmsKPj4+Pj4gKyAgQ2Fw YWJpbGl0aWVzIE1lc3NhZ2UsIHRoZSBvcmRlciBvZiBlYWNoIGVudHJ5KFBETykgc2hvdWxkIGZv bGxvdwo+Pj4+PiArdGhlIFBECj4+Pj4+ICsgIHNwZWMgY2hhcHRlciA2LjQuMS4gUmVxdWlyZWQg Zm9yIHBvd2VyIHNpbmsgYW5kIHBvd2VyIGR1YWwgcm9sZS4KPj4+PiBXZSBzaG91bGQgYXZvaWQg bWFnaWMgbnVtYmVycywgbWFnaWMgbnVtYmVycyBhcmUgYmFkIDopIElmIHdlIHJlYWxseQo+Pj4+ IG5lZWQgdG8gdXNlIFBET3MgaGVyZSwgSSB0aGluayB3ZSBjYW4gcmUtdXNlIFBET18qIG1hY3Jv cyBbMV0gLSBEVEMKPj4+PiBzaG91bGQgYmUgYWJsZSB0byBwYXJzZSBpdCwgbWF5YmUgc29tZSBs aWZ0aW5nIHdpbGwgYmUgbmVjZXNzYXJ5Lgo+Pj4+Cj4+Pj4gWzFdOgo+Pj4+Cj4+IGh0dHBzOi8v ZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYl MkZlbAo+Pj4+IGl4Cj4+Pj4KPj4gaXIuYm9vdGxpbi5jb20lMkZsaW51eCUyRnY0LjE2LXJjMyUy RnNvdXJjZSUyRmluY2x1ZGUlMkZsaW51eCUyRnVzYiUKPj4gMkZwZC5oJTIzTDE2MSZkYXRhPTAy JTdDMDElN0NqdW4ubGklNDBueHAuY29tJTdDY2NmMTRhMzZjYTY0NDVlCj4+IGU1ZjExMDhkNTdk YmRlM2M3JTdDNjg2ZWExZDNiYzJiNGM2ZmE5MmNkOTljNWMzMDE2MzUlN0MwJTdDMCUKPj4gN0M2 MzY1NTMxNzY4ODAyOTIxOTcmc2RhdGE9NzJIQTMzd2dSeWQyUE1vUG5aT2xNYXRJMkN1YWRwbGtZ Tgo+Pj4+IERER0tGU1VCMCUzRCZyZXNlcnZlZD0wCj4+Pj4+ICstIG1heC1zbmstbWljcm92b2x0 OiBUaGUgbWF4IHZvbHRhZ2UgdGhlIHNpbmsgY2FuIHN1cHBvcnQgaW4gbWljcm8KPj4+Pj4gK3Zv bHRzLAo+Pj4+PiArICByZXF1aXJlZCBmb3IgcG93ZXIgc2luayBhbmQgcG93ZXIgZHVhbCByb2xl Lgo+Pj4+PiArLSBtYXgtc25rLW1pY3JvYW1wOiBUaGUgbWF4IGN1cnJlbnQgdGhlIHNpbmsgY2Fu IHN1cHBvcnQgaW4gbWljcm8KPj4+Pj4gK2FtcHMsCj4+Pj4+ICsgIHJlcXVpcmVkIGZvciBwb3dl ciBzaW5rIGFuZCBwb3dlciBkdWFsIHJvbGUuCj4+Pj4+ICstIG1heC1zbmstbWljcm93YXR0LWhv dXJzOiBUaGUgbWF4IHBvd2VyIHRoZSBzaW5rIGNhbiBzdXBwb3J0IGluCj4+Pj4+ICttaWNybwo+ Pj4+PiArICBXYXR0LWhvdXJzLCByZXF1aXJlZCBmb3IgcG93ZXIgc2luayBhbmQgcG93ZXIgZHVh bCByb2xlLgo+Pj4+PiArLSBvcC1zbmstbWljcm93YXR0LWhvdXJzOiBTaW5rIHJlcXVpcmVkIG9w ZXJhdGluZyBwb3dlciBpbiBtaWNybwo+Pj4+PiArV2F0dC1ob3VycywKPj4+Pj4gKyAgaWYgc291 cmNlIG9mZmVyZWQgcG93ZXIgaXMgbGVzcyB0aGVuIGl0LCBDYXBhYmlsaXR5IE1pc21hdGNoIGlz Cj4+Pj4+ICtzZXQsCj4+Pj4+ICsgIHJlcXVpcmVkIGZvciBwb3dlciBzaW5rIGFuZCBwb3dlciBk dWFsIHJvbGUuCj4+Pj4gV2hhdCBpcyB0aGUgcmVsYXRpb24gYmV0d2VlbiBhYm92ZSBwcm9wZXJ0 aWVzIGFuZCBQRE9zIHNwZWNpZmllZAo+PiBlYXJsaWVyPwo+Pj4+IEFyZSB5b3Ugc3VyZSBhbGwg dGhlc2UgcHJvcHMgYXJlIHJlcXVpcmVkPwo+Pj4+Cj4+PiBTb3JyeSwgd2l0aCBsYXRlc3QgdGNw bSBjb2RlLCB0aG9zZSBwcm9wcyBhcmUgbm90IHJlcXVpcmVkLCB3aWxsIHJlbW92ZQo+PiB0aGVt Lgo+Pj4gSnVuIExpCj4+Pj4gQW5kIGdlbmVyYWwgcmVtYXJrIHJlZ2FyZGluZyBhbGwgYWJvdmUg cHJvcGVydGllcy4gRm9yIG1lLCBtb3N0IG9mCj4+Pj4gdGhlbSBhcmUgc3BlY2lmaWMgbm90IHRv IHRoZSBwb3J0IGJ1dCB0byBkZXZpY2VzIHJlc3BvbnNpYmxlIGZvcgo+Pj4+IHBvd2VyCj4+Pj4g bWFuYWdlbWVudDogY2hhcmdlcnMsIHBtaWNzLC4uLi4KPj4+PiBJbiBtYW55IGNhc2VzIHRoZXNl IHByb3BlcnRpZXMgYXJlIHJlZHVuZGFudCB3aXRoIGRldmljZXMgY2FwYWJpbGl0aWVzLgo+Pj4+ IE9uIHRoZSBvdGhlciBzaWRlIEkgZ3Vlc3MgaW4gbWFueSBjYXNlcyBpdCBtYXkgYmUgY29udmVu aWVudCB0byBwdXQKPj4+PiB0aGVtIGhlcmUsIHNvIEkgYW0gbm90IHN1cmUgd2hhdCBpcyBiZXR0 ZXIgOikKPj4+Pgo+Pj4+IFJlZ2FyZHMKPj4+PiBBbmRyemVqCj4+Pj4KPj4+Pj4gKwo+Pj4+PiAg UmVxdWlyZWQgbm9kZXM6Cj4+Pj4+ICAtIGFueSBkYXRhIGJ1cyB0byB0aGUgY29ubmVjdG9yIHNo b3VsZCBiZSBtb2RlbGVkIHVzaW5nIHRoZSBPRgo+Pj4+PiBncmFwaAo+Pj4+IGJpbmRpbmdzCj4+ Pj4+ICAgIHNwZWNpZmllZCBpbiBiaW5kaW5ncy9ncmFwaC50eHQsIHVubGVzcyB0aGUgYnVzIGlz IGJldHdlZW4gcGFyZW50Cj4+Pj4+IG5vZGUgYW5kIEBAIC03MywzICs5NywyMiBAQCBjY2ljOiBz Mm1tMDA1QDMzIHsKPj4+Pj4gIAkJfTsKPj4+Pj4gIAl9Owo+Pj4+PiAgfTsKPj4+Pj4gKwo+Pj4+ PiArMy4gVVNCLUMgY29ubmVjdG9yIGF0dGFjaGVkIHRvIGEgdHlwZWMgcG9ydCBjb250cm9sbGVy KHB0bjUxMTApLAo+Pj4+PiArd2hpY2ggaGFzIHBvd2VyIGRlbGl2ZXJ5IHN1cHBvcnQgYW5kIGVu YWJsZXMgZHJwLgo+Pj4+PiArCj4+Pj4+ICt0eXBlYzogcHRuNTExMEA1MCB7Cj4+Pj4+ICsJLi4u Cj4+Pj4+ICsJdXNiX2NvbjogY29ubmVjdG9yIHsKPj4+Pj4gKwkJY29tcGF0aWJsZSA9ICJ1c2It Yy1jb25uZWN0b3IiOwo+Pj4+PiArCQlsYWJlbCA9ICJVU0ItQyI7Cj4+Pj4+ICsJCXBvcnQtdHlw ZSA9ICJkdWFsIjsKPj4+Pj4gKwkJZGVmYXVsdC1yb2xlID0gInNpbmsiOwo+Pj4+PiArCQlzcmMt cGRvcyA9IDwweDM4MDE5MGM4PjsKPj4+Pj4gKwkJc25rLXBkb3MgPSA8MHgzODAxOTBjOCAweDM4 MDJkMGM4PjsKPj4+Pj4gKwkJbWF4LXNuay1taWNyb3ZvbHQgPSA8OTAwMD47Cj4+Pj4+ICsJCW1h eC1zbmstbWljcm9hbXAgPSA8MjAwMD47Cj4+Pj4+ICsJCW1heC1zbmstbWljcm93YXR0LWhvdXJz ID0gPDE4MDAwPjsKPj4+Pj4gKwkJb3Atc25rLW1pY3Jvd2F0dC1ob3VycyA9IDw5MDAwPjsKPj4+ Pj4gKwl9Owo+Pj4+PiArfTsKLS0tClRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5k IHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC11c2IiIGluCnRoZSBib2R5IG9mIGEgbWVzc2Fn ZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0 dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAo=