From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A5B1039891F for ; Tue, 28 Apr 2026 13:40:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777383614; cv=none; b=RRPUop4+eShA957Tbs9khKojweGkb3/svVOKzxv+fEOrRBO8oEY6R7DFILzgpgCN3E+sslie9j1/HZoD3Pm3mEbhSf9aW4yszF5xMEptav4fF+t5iFRWK3DEW1cQKIXn75ldR6BDcm0HXLGSK297QLRj/E+4AL6y2Vc1zVLggcI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777383614; c=relaxed/simple; bh=DY37OnpoYjjW+GFpmDYkzr+BXySsTF4/pHUAAopHjvA=; h=Mime-Version:Content-Type:Date:Message-Id:From:Subject:Cc:To: References:In-Reply-To; b=slL67D5Pb0oXGXNGd6GcDGDQ9SiSh4NCwHbWwmTxOvDwJzawFlIIiZwHrdRw6kNf+MF0tNQrguXOv/sOlQyFZud0kgNFQDTOGbLi4pnGrvUMtf2/PqEQdoXFadmgtWo9dRb7Stl2PP/lPNXthvDdP2tcREiR9paYYoV2kDr6Fpw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=qRLoVPjW; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="qRLoVPjW" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 1CF6A1A3471; Tue, 28 Apr 2026 13:40:10 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id D19BC601D0; Tue, 28 Apr 2026 13:40:09 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C6AAE10728BFF; Tue, 28 Apr 2026 15:39:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777383605; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=DY37OnpoYjjW+GFpmDYkzr+BXySsTF4/pHUAAopHjvA=; b=qRLoVPjWicMlOER4CBoXDyZ31IS3N9wzfHFsgyWbAAFF/gci+qsFmTs0vCeqFcMtumISls Tj3oY/2Cdf6m/7gztcQrTJLdN0ggRvFVqgt+JH8FxO2/nx+GfiibBB7tr9VdYd2pRAyZX1 XAXF0QiFbh370lTIQPb7xonACEwx2kQTWqUUcXxmMBeCKnlqHPelpK3fTwkngZn/4NCD/d KE58A7C2KizgbREMj4kyFapvuVzo03ASQ8lKHF89cbbYlD9WTUWuW4Ve1tF5Yw+ztjpBH4 MjEA//3NGYT7/zO8OOYAeAWTnaFj1l+B1bRPPqqwsMjaj7jeo7/wmSi84hXibw== Precedence: bulk X-Mailing-List: asahi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Tue, 28 Apr 2026 15:39:43 +0200 Message-Id: From: "Luca Ceresoli" Subject: Re: [PATCH v2 00/41] drm/display: bridge-connector: attach encoder to the connector Cc: "Hui Pu" , "Ian Ray" , "Thomas Petazzoni" , , , , , , , , , , , , , , To: "Icenowy Zheng" , "Dmitry Baryshkov" , "Andrzej Hajda" , "Neil Armstrong" , "Robert Foss" , "Laurent Pinchart" , "Jonas Karlman" , "Jernej Skrabec" , "Maarten Lankhorst" , "Maxime Ripard" , "Thomas Zimmermann" , "David Airlie" , "Simona Vetter" , "Sasha Finkelstein" , "Janne Grunau" , "Liu Ying" , "Douglas Anderson" , "Laurentiu Palcu" , "Lucas Stach" , "Frank Li" , "Sascha Hauer" , "Pengutronix Kernel Team" , "Fabio Estevam" , "Philipp Zabel" , "Paul Cercueil" , "Anitha Chrisanthus" , "Chun-Kuang Hu" , "Matthias Brugger" , "AngeloGioacchino Del Regno" , "Kevin Hilman" , "Jerome Brunet" , "Martin Blumenstingl" , "Rob Clark" , "Dmitry Baryshkov" , "Abhinav Kumar" , "Jessica Zhang" , "Sean Paul" , "Marijn Suijten" , "Tomi Valkeinen" , "Sandy Huang" , =?utf-8?q?Heiko_St=C3=BCbner?= , "Andy Yan" , "Thierry Reding" , "Mikko Perttunen" , "Jonathan Hunter" , "Jingoo Han" , "Inki Dae" , "Seung-Woo Kim" , "Kyungmin Park" , "Krzysztof Kozlowski" , "Alim Akhtar" , "Laurent Pinchart" , "Tomi Valkeinen" , "Kieran Bingham" , "Geert Uytterhoeven" , "Magnus Damm" , "Biju Das" , "Marek Vasut" , "Stefan Agner" , "Jyri Sarha" , "Michal Simek" X-Mailer: aerc 0.20.1 References: <20260423-drm-bridge-connector-attach_encoder-v2-0-2ae6ca69b390@bootlin.com> In-Reply-To: X-Last-TLS-Session-Version: TLSv1.3 Hello Icenowy, On Sat Apr 25, 2026 at 5:22 PM CEST, Icenowy Zheng wrote: > =E5=9C=A8 2026-04-23=E5=9B=9B=E7=9A=84 11:16 +0200=EF=BC=8CLuca Ceresoli= =E5=86=99=E9=81=93=EF=BC=9A >> This series simplifies using the bridge-connector by removing the >> need to >> attach the newly created connector to the encoder. >> >> =3D=3D Series description >> >> Currently all users of the bridge-connector must call >> drm_connector_attach_encoder() immediately after a successful >> drm_bridge_connector_init(). >> >> This is an unnecessary burden for users. Move the call to the end of >> drm_bridge_connector_init() so all callers can be simplified. >> >> =C2=A0* Patch 1 adds a drm_connector_attach_encoder() call at the end of >> =C2=A0=C2=A0 drm_bridge_connector_init() >> =C2=A0* The other patches remove drm_connector_attach_encoder() after al= l >> =C2=A0=C2=A0 drm_bridge_connector_init() calls, ordered from the simples= t ones >> =C2=A0=C2=A0 (only the last one is somewhat non-obvious) >> >> The Cc list is huge due to the many drivers touched. I sent v1 to a >> reduced >> Cc list to ensure there is an agreement about the overall idea. That >> seems >> to be the case, so now it's time to copy all drivers maintainers. >> >> It would be nice to apply all of this series at once to avoid >> duplicated >> calls to drm_connector_attach_encoder() in the interim. That would be >> harmless beacuse drm_connector_attach_encoder() is idempotent, but >> unpleasant. >> >> =3D=3D Additional rationale (for the curious) >> >> Besides making the usage of the bridge-connector a bit simpler, this >> series >> is in preparation for DRM bridge hotplug. Here's why, feel free to >> skip if >> you don't care. >> >> The old bridge hotplug proposals I have sent in the past [1] were >> based on >> a hotplug-bridge driver to sit between the last fixed bridge and the >> first >> hotplugged bridge. Discussion with the community led to the need of >> removing the hotplug-bridge and let common DRM code handle hotplug. >> The >> common place of code that appears the most suitable for hotplug >> handling is >> the bridge-connector, which is by now the recommended way to handle >> connector instantiation after a bridge chain. >> >> So I'm in the process of extending the bridge-connector to be the >> central >> point to handle bridge hotplug. Turns out the need to call >> drm_connector_attach_encoder() after drm_bridge_connector_init() has >> returned is adding big headaches to such work. So I'm send this long >> but >> simple series to both simplify bridge-connector usage and remove one >> obstacle from the bridge hotplug work. This series is relevant by >> itself >> anyway. >> >> [1] >> https://lore.kernel.org/lkml/20250206-hotplug-drm-bridge-v6-26-9d6f2c9c3= 058@bootlin.com/ >> >> =3D=3D Grand plan >> >> This is part of the work to support hotplug of DRM bridges. The grand >> plan >> was discussed in [0]. > > Just see the bridge hotplugging thing, is it possible for DRM drivers > to declare bridges attached to themselves after this? > > Loongson 7A1000 PCH can only output DPI signals, so nearly all products > with it are shipping with some kind of external bridges, but currently > drm/loongson does not support them (all display connectors are now seen > as DPI ones, and connectors behind non-transparent bridges won't work). > > The bridges are going to be accessed by the DDC I2C busses of 7A1000, > and are not declared with device tree (systems with 7A1000 never ship > with device trees, and Linux currently matches a built-in device tree). > (Bridges being on the DDC I2C also introduces some dependency for them > to depend on the drm/loongson driver.) > > Loongson have defined some kind of VBIOS declaring what bridge is > behind, and their non-mainline driver just contains driver codes for > all possible bridges. (Sui Jingfeng previously tried to mainline such > practice, and of course it's rejected because of code duplicity.) I'm afraid your question goes a bit beyond my knowledge, the hotplug work I'm carrying on is focuses on DT platforms. My limited understading of non-DT platforms is that a card driver must instantiate all components and tie them together, which assumes it has to know them somehow (ACPI, hardcoded, whatever). Others can probably comment better about this. As a general principle, when devices can be mixed and matched by the board designer, hardcoding them is a bad design choice. Think of bad old board files written in C, which were unmanageable and got replaced exactly by device tree. So my opinion is that DRM encoders and bridges should know as little as possible about the following bridge, connector or panel that follows them. Luca -- Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com 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 306CDFF885D for ; Tue, 28 Apr 2026 13:40:29 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:To:Cc:Subject: From:Message-Id:Date:Mime-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IH/AZVtdv4lQpiTExusU6TbAoeuTgk1PIAYzVFVZYOY=; b=nx2/ARpjJ4A49R E49VMDzr1IkaylGqmp0wja1y/dxvi69CjfbTb6lHZPHkSlBROyPl6pDGXIEX4G2m1PazDgjLRAMqW OBHbBUhdZwfkxfw5GDK5kw3YGnV8iaRMLaWKdgCBcGeoqSEdCiaHzrVCA4EdPJtnjQaWTxO21wtol /LZkHgulh3ylYGUp35wdJ4GrZkbdTRfgUS28DCNm7psRRemazPbQvtgMcpyAO9zaXxK8dyibaaAxR IkDaZElT+WzogiRTih6MBZiKIa3ngnmoRTH2AB2i/v0cmt3IyRA70EMQUOxLjPDmSStuZn+gAJp4N szjwbCdHZDjsww+eRdog==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wHifk-00000001ZQn-02GE; Tue, 28 Apr 2026 13:40:20 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wHifi-00000001ZQ2-2CMf; Tue, 28 Apr 2026 13:40:18 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=In-Reply-To:References:To:Cc:Subject: From:Message-Id:Date:Content-Type:Content-Transfer-Encoding:Mime-Version: Sender:Reply-To:Content-ID:Content-Description; bh=DY37OnpoYjjW+GFpmDYkzr+BXySsTF4/pHUAAopHjvA=; b=LY41/NpzGoQDzqmSDw9fNTImG1 x8GguNfMjWJXwKSyNSZ8TRAKcTzB0P30/fVcjoL5lJtPIOnV+FLZRFFb+G1xWNChbpwSQ8K2nimyu mghfuPAFuoKmipElJ2hp/TY4pJEhdhW13Qbqpk0YgChmcebJG2Ja3tHEK1/jRsb6I2cRG1WWfYDLb 006A1D4v3LSB5N/mM64YPiwUoCL6FuCP4gFm4/OU6to1nRhEUv5JRoxo+E9+3B4w0Y0mlQoyFUdFy QjZ9K1RgSD7Cgftk34rjCXStJTz1/g4AJn74gonRbmlDP8Ts5cysLXpZfC/73Vwg4jg33BuECSTLQ qdfhr74Q==; Received: from smtpout-04.galae.net ([185.171.202.116]) by desiato.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wHifd-00000003Ca3-3QC9; Tue, 28 Apr 2026 13:40:17 +0000 Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 95ABAC5EF0B; Tue, 28 Apr 2026 13:40:53 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id D19BC601D0; Tue, 28 Apr 2026 13:40:09 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C6AAE10728BFF; Tue, 28 Apr 2026 15:39:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777383605; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=DY37OnpoYjjW+GFpmDYkzr+BXySsTF4/pHUAAopHjvA=; b=qRLoVPjWicMlOER4CBoXDyZ31IS3N9wzfHFsgyWbAAFF/gci+qsFmTs0vCeqFcMtumISls Tj3oY/2Cdf6m/7gztcQrTJLdN0ggRvFVqgt+JH8FxO2/nx+GfiibBB7tr9VdYd2pRAyZX1 XAXF0QiFbh370lTIQPb7xonACEwx2kQTWqUUcXxmMBeCKnlqHPelpK3fTwkngZn/4NCD/d KE58A7C2KizgbREMj4kyFapvuVzo03ASQ8lKHF89cbbYlD9WTUWuW4Ve1tF5Yw+ztjpBH4 MjEA//3NGYT7/zO8OOYAeAWTnaFj1l+B1bRPPqqwsMjaj7jeo7/wmSi84hXibw== Mime-Version: 1.0 Date: Tue, 28 Apr 2026 15:39:43 +0200 Message-Id: From: "Luca Ceresoli" Subject: Re: [PATCH v2 00/41] drm/display: bridge-connector: attach encoder to the connector Cc: "Hui Pu" , "Ian Ray" , "Thomas Petazzoni" , , , , , , , , , , , , , , To: "Icenowy Zheng" , "Dmitry Baryshkov" , "Andrzej Hajda" , "Neil Armstrong" , "Robert Foss" , "Laurent Pinchart" , "Jonas Karlman" , "Jernej Skrabec" , "Maarten Lankhorst" , "Maxime Ripard" , "Thomas Zimmermann" , "David Airlie" , "Simona Vetter" , "Sasha Finkelstein" , "Janne Grunau" , "Liu Ying" , "Douglas Anderson" , "Laurentiu Palcu" , "Lucas Stach" , "Frank Li" , "Sascha Hauer" , "Pengutronix Kernel Team" , "Fabio Estevam" , "Philipp Zabel" , "Paul Cercueil" , "Anitha Chrisanthus" , "Chun-Kuang Hu" , "Matthias Brugger" , "AngeloGioacchino Del Regno" , "Kevin Hilman" , "Jerome Brunet" , "Martin Blumenstingl" , "Rob Clark" , "Dmitry Baryshkov" , "Abhinav Kumar" , "Jessica Zhang" , "Sean Paul" , "Marijn Suijten" , "Tomi Valkeinen" , "Sandy Huang" , =?utf-8?q?Heiko_St=C3=BCbner?= , "Andy Yan" , "Thierry Reding" , "Mikko Perttunen" , "Jonathan Hunter" , "Jingoo Han" , "Inki Dae" , "Seung-Woo Kim" , "Kyungmin Park" , "Krzysztof Kozlowski" , "Alim Akhtar" , "Laurent Pinchart" , "Tomi Valkeinen" , "Kieran Bingham" , "Geert Uytterhoeven" , "Magnus Damm" , "Biju Das" , "Marek Vasut" , "Stefan Agner" , "Jyri Sarha" , "Michal Simek" X-Mailer: aerc 0.20.1 References: <20260423-drm-bridge-connector-attach_encoder-v2-0-2ae6ca69b390@bootlin.com> In-Reply-To: X-Last-TLS-Session-Version: TLSv1.3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260428_144014_147745_82A92F02 X-CRM114-Status: GOOD ( 26.28 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org SGVsbG8gSWNlbm93eSwKCk9uIFNhdCBBcHIgMjUsIDIwMjYgYXQgNToyMiBQTSBDRVNULCBJY2Vu b3d5IFpoZW5nIHdyb3RlOgo+IOWcqCAyMDI2LTA0LTIz5Zub55qEIDExOjE2ICswMjAw77yMTHVj YSBDZXJlc29saeWGmemBk++8mgo+PiBUaGlzIHNlcmllcyBzaW1wbGlmaWVzIHVzaW5nIHRoZSBi cmlkZ2UtY29ubmVjdG9yIGJ5IHJlbW92aW5nIHRoZQo+PiBuZWVkIHRvCj4+IGF0dGFjaCB0aGUg bmV3bHkgY3JlYXRlZCBjb25uZWN0b3IgdG8gdGhlIGVuY29kZXIuCj4+Cj4+ID09IFNlcmllcyBk ZXNjcmlwdGlvbgo+Pgo+PiBDdXJyZW50bHkgYWxsIHVzZXJzIG9mIHRoZSBicmlkZ2UtY29ubmVj dG9yIG11c3QgY2FsbAo+PiBkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCkgaW1tZWRpYXRl bHkgYWZ0ZXIgYSBzdWNjZXNzZnVsCj4+IGRybV9icmlkZ2VfY29ubmVjdG9yX2luaXQoKS4KPj4K Pj4gVGhpcyBpcyBhbiB1bm5lY2Vzc2FyeSBidXJkZW4gZm9yIHVzZXJzLiBNb3ZlIHRoZSBjYWxs IHRvIHRoZSBlbmQgb2YKPj4gZHJtX2JyaWRnZV9jb25uZWN0b3JfaW5pdCgpIHNvIGFsbCBjYWxs ZXJzIGNhbiBiZSBzaW1wbGlmaWVkLgo+Pgo+PiDCoCogUGF0Y2ggMSBhZGRzIGEgZHJtX2Nvbm5l Y3Rvcl9hdHRhY2hfZW5jb2RlcigpIGNhbGwgYXQgdGhlIGVuZCBvZgo+PiDCoMKgIGRybV9icmlk Z2VfY29ubmVjdG9yX2luaXQoKQo+PiDCoCogVGhlIG90aGVyIHBhdGNoZXMgcmVtb3ZlIGRybV9j b25uZWN0b3JfYXR0YWNoX2VuY29kZXIoKSBhZnRlciBhbGwKPj4gwqDCoCBkcm1fYnJpZGdlX2Nv bm5lY3Rvcl9pbml0KCkgY2FsbHMsIG9yZGVyZWQgZnJvbSB0aGUgc2ltcGxlc3Qgb25lcwo+PiDC oMKgIChvbmx5IHRoZSBsYXN0IG9uZSBpcyBzb21ld2hhdCBub24tb2J2aW91cykKPj4KPj4gVGhl IENjIGxpc3QgaXMgaHVnZSBkdWUgdG8gdGhlIG1hbnkgZHJpdmVycyB0b3VjaGVkLiBJIHNlbnQg djEgdG8gYQo+PiByZWR1Y2VkCj4+IENjIGxpc3QgdG8gZW5zdXJlIHRoZXJlIGlzIGFuIGFncmVl bWVudCBhYm91dCB0aGUgb3ZlcmFsbCBpZGVhLiBUaGF0Cj4+IHNlZW1zCj4+IHRvIGJlIHRoZSBj YXNlLCBzbyBub3cgaXQncyB0aW1lIHRvIGNvcHkgYWxsIGRyaXZlcnMgbWFpbnRhaW5lcnMuCj4+ Cj4+IEl0IHdvdWxkIGJlIG5pY2UgdG8gYXBwbHkgYWxsIG9mIHRoaXMgc2VyaWVzIGF0IG9uY2Ug dG8gYXZvaWQKPj4gZHVwbGljYXRlZAo+PiBjYWxscyB0byBkcm1fY29ubmVjdG9yX2F0dGFjaF9l bmNvZGVyKCkgaW4gdGhlIGludGVyaW0uIFRoYXQgd291bGQgYmUKPj4gaGFybWxlc3MgYmVhY3Vz ZSBkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCkgaXMgaWRlbXBvdGVudCwgYnV0Cj4+IHVu cGxlYXNhbnQuCj4+Cj4+ID09IEFkZGl0aW9uYWwgcmF0aW9uYWxlIChmb3IgdGhlIGN1cmlvdXMp Cj4+Cj4+IEJlc2lkZXMgbWFraW5nIHRoZSB1c2FnZSBvZiB0aGUgYnJpZGdlLWNvbm5lY3RvciBh IGJpdCBzaW1wbGVyLCB0aGlzCj4+IHNlcmllcwo+PiBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgRFJN IGJyaWRnZSBob3RwbHVnLiBIZXJlJ3Mgd2h5LCBmZWVsIGZyZWUgdG8KPj4gc2tpcCBpZgo+PiB5 b3UgZG9uJ3QgY2FyZS4KPj4KPj4gVGhlIG9sZCBicmlkZ2UgaG90cGx1ZyBwcm9wb3NhbHMgSSBo YXZlIHNlbnQgaW4gdGhlIHBhc3QgWzFdIHdlcmUKPj4gYmFzZWQgb24KPj4gYSBob3RwbHVnLWJy aWRnZSBkcml2ZXIgdG8gc2l0IGJldHdlZW4gdGhlIGxhc3QgZml4ZWQgYnJpZGdlIGFuZCB0aGUK Pj4gZmlyc3QKPj4gaG90cGx1Z2dlZCBicmlkZ2UuIERpc2N1c3Npb24gd2l0aCB0aGUgY29tbXVu aXR5IGxlZCB0byB0aGUgbmVlZCBvZgo+PiByZW1vdmluZyB0aGUgaG90cGx1Zy1icmlkZ2UgYW5k IGxldCBjb21tb24gRFJNIGNvZGUgaGFuZGxlIGhvdHBsdWcuCj4+IFRoZQo+PiBjb21tb24gcGxh Y2Ugb2YgY29kZSB0aGF0IGFwcGVhcnMgdGhlIG1vc3Qgc3VpdGFibGUgZm9yIGhvdHBsdWcKPj4g aGFuZGxpbmcgaXMKPj4gdGhlIGJyaWRnZS1jb25uZWN0b3IsIHdoaWNoIGlzIGJ5IG5vdyB0aGUg cmVjb21tZW5kZWQgd2F5IHRvIGhhbmRsZQo+PiBjb25uZWN0b3IgaW5zdGFudGlhdGlvbiBhZnRl ciBhIGJyaWRnZSBjaGFpbi4KPj4KPj4gU28gSSdtIGluIHRoZSBwcm9jZXNzIG9mIGV4dGVuZGlu ZyB0aGUgYnJpZGdlLWNvbm5lY3RvciB0byBiZSB0aGUKPj4gY2VudHJhbAo+PiBwb2ludCB0byBo YW5kbGUgYnJpZGdlIGhvdHBsdWcuIFR1cm5zIG91dCB0aGUgbmVlZCB0byBjYWxsCj4+IGRybV9j b25uZWN0b3JfYXR0YWNoX2VuY29kZXIoKSBhZnRlciBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9pbml0 KCkgaGFzCj4+IHJldHVybmVkIGlzIGFkZGluZyBiaWcgaGVhZGFjaGVzIHRvIHN1Y2ggd29yay4g U28gSSdtIHNlbmQgdGhpcyBsb25nCj4+IGJ1dAo+PiBzaW1wbGUgc2VyaWVzIHRvIGJvdGggc2lt cGxpZnkgYnJpZGdlLWNvbm5lY3RvciB1c2FnZSBhbmQgcmVtb3ZlIG9uZQo+PiBvYnN0YWNsZSBm cm9tIHRoZSBicmlkZ2UgaG90cGx1ZyB3b3JrLiBUaGlzIHNlcmllcyBpcyByZWxldmFudCBieQo+ PiBpdHNlbGYKPj4gYW55d2F5Lgo+Pgo+PiBbMV0KPj4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcv bGttbC8yMDI1MDIwNi1ob3RwbHVnLWRybS1icmlkZ2UtdjYtMjYtOWQ2ZjJjOWMzMDU4QGJvb3Rs aW4uY29tLwo+Pgo+PiA9PSBHcmFuZCBwbGFuCj4+Cj4+IFRoaXMgaXMgcGFydCBvZiB0aGUgd29y ayB0byBzdXBwb3J0IGhvdHBsdWcgb2YgRFJNIGJyaWRnZXMuIFRoZSBncmFuZAo+PiBwbGFuCj4+ IHdhcyBkaXNjdXNzZWQgaW4gWzBdLgo+Cj4gSnVzdCBzZWUgdGhlIGJyaWRnZSBob3RwbHVnZ2lu ZyB0aGluZywgaXMgaXQgcG9zc2libGUgZm9yIERSTSBkcml2ZXJzCj4gdG8gZGVjbGFyZSBicmlk Z2VzIGF0dGFjaGVkIHRvIHRoZW1zZWx2ZXMgYWZ0ZXIgdGhpcz8KPgo+IExvb25nc29uIDdBMTAw MCBQQ0ggY2FuIG9ubHkgb3V0cHV0IERQSSBzaWduYWxzLCBzbyBuZWFybHkgYWxsIHByb2R1Y3Rz Cj4gd2l0aCBpdCBhcmUgc2hpcHBpbmcgd2l0aCBzb21lIGtpbmQgb2YgZXh0ZXJuYWwgYnJpZGdl cywgYnV0IGN1cnJlbnRseQo+IGRybS9sb29uZ3NvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gKGFs bCBkaXNwbGF5IGNvbm5lY3RvcnMgYXJlIG5vdyBzZWVuCj4gYXMgRFBJIG9uZXMsIGFuZCBjb25u ZWN0b3JzIGJlaGluZCBub24tdHJhbnNwYXJlbnQgYnJpZGdlcyB3b24ndCB3b3JrKS4KPgo+IFRo ZSBicmlkZ2VzIGFyZSBnb2luZyB0byBiZSBhY2Nlc3NlZCBieSB0aGUgRERDIEkyQyBidXNzZXMg b2YgN0ExMDAwLAo+IGFuZCBhcmUgbm90IGRlY2xhcmVkIHdpdGggZGV2aWNlIHRyZWUgKHN5c3Rl bXMgd2l0aCA3QTEwMDAgbmV2ZXIgc2hpcAo+IHdpdGggZGV2aWNlIHRyZWVzLCBhbmQgTGludXgg Y3VycmVudGx5IG1hdGNoZXMgYSBidWlsdC1pbiBkZXZpY2UgdHJlZSkuCj4gKEJyaWRnZXMgYmVp bmcgb24gdGhlIEREQyBJMkMgYWxzbyBpbnRyb2R1Y2VzIHNvbWUgZGVwZW5kZW5jeSBmb3IgdGhl bQo+IHRvIGRlcGVuZCBvbiB0aGUgZHJtL2xvb25nc29uIGRyaXZlci4pCj4KPiBMb29uZ3NvbiBo YXZlIGRlZmluZWQgc29tZSBraW5kIG9mIFZCSU9TIGRlY2xhcmluZyB3aGF0IGJyaWRnZSBpcwo+ IGJlaGluZCwgYW5kIHRoZWlyIG5vbi1tYWlubGluZSBkcml2ZXIganVzdCBjb250YWlucyBkcml2 ZXIgY29kZXMgZm9yCj4gYWxsIHBvc3NpYmxlIGJyaWRnZXMuIChTdWkgSmluZ2ZlbmcgcHJldmlv dXNseSB0cmllZCB0byBtYWlubGluZSBzdWNoCj4gcHJhY3RpY2UsIGFuZCBvZiBjb3Vyc2UgaXQn cyByZWplY3RlZCBiZWNhdXNlIG9mIGNvZGUgZHVwbGljaXR5LikKCkknbSBhZnJhaWQgeW91ciBx dWVzdGlvbiBnb2VzIGEgYml0IGJleW9uZCBteSBrbm93bGVkZ2UsIHRoZSBob3RwbHVnIHdvcmsK SSdtIGNhcnJ5aW5nIG9uIGlzIGZvY3VzZXMgb24gRFQgcGxhdGZvcm1zLgoKTXkgbGltaXRlZCB1 bmRlcnN0YWRpbmcgb2Ygbm9uLURUIHBsYXRmb3JtcyBpcyB0aGF0IGEgY2FyZCBkcml2ZXIgbXVz dAppbnN0YW50aWF0ZSBhbGwgY29tcG9uZW50cyBhbmQgdGllIHRoZW0gdG9nZXRoZXIsIHdoaWNo IGFzc3VtZXMgaXQgaGFzIHRvCmtub3cgdGhlbSBzb21laG93IChBQ1BJLCBoYXJkY29kZWQsIHdo YXRldmVyKS4gT3RoZXJzIGNhbiBwcm9iYWJseSBjb21tZW50CmJldHRlciBhYm91dCB0aGlzLgoK QXMgYSBnZW5lcmFsIHByaW5jaXBsZSwgd2hlbiBkZXZpY2VzIGNhbiBiZSBtaXhlZCBhbmQgbWF0 Y2hlZCBieSB0aGUgYm9hcmQKZGVzaWduZXIsIGhhcmRjb2RpbmcgdGhlbSBpcyBhIGJhZCBkZXNp Z24gY2hvaWNlLiBUaGluayBvZiBiYWQgb2xkIGJvYXJkCmZpbGVzIHdyaXR0ZW4gaW4gQywgd2hp Y2ggd2VyZSB1bm1hbmFnZWFibGUgYW5kIGdvdCByZXBsYWNlZCBleGFjdGx5IGJ5CmRldmljZSB0 cmVlLiBTbyBteSBvcGluaW9uIGlzIHRoYXQgRFJNIGVuY29kZXJzIGFuZCBicmlkZ2VzIHNob3Vs ZCBrbm93IGFzCmxpdHRsZSBhcyBwb3NzaWJsZSBhYm91dCB0aGUgZm9sbG93aW5nIGJyaWRnZSwg Y29ubmVjdG9yIG9yIHBhbmVsIHRoYXQKZm9sbG93cyB0aGVtLgoKTHVjYQoKLS0KTHVjYSBDZXJl c29saSwgQm9vdGxpbgpFbWJlZGRlZCBMaW51eCBhbmQgS2VybmVsIGVuZ2luZWVyaW5nCmh0dHBz Oi8vYm9vdGxpbi5jb20KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFtbG9naWMgbWFpbGluZyBsaXN0CmxpbnV4LWFtbG9naWNAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFtbG9naWMK