From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B0F8749A for ; Sat, 24 Feb 2024 07:15:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708758920; cv=none; b=uIoBpyz7xNMiXTNF2EPikts5JUqkNN+hDH6MzzDysPGbDCGVJf+5IsBer8sV58LPk2LbrFgRrxUVRebIFo7q5pnBbV9YlKVne44k+Wa+vEO06JJV55hglLjLlzO6OXLPB1NAk0BKNgCnaS2Jn/3fNzmkpzCLctfCYfoiR2IM1kg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708758920; c=relaxed/simple; bh=0HAot224t49qJekPYxrS9uVB+eTCHcXufJIXNedY8jg=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BFzrO9nqH5MTLRY6dNs4c9x/uM9DHzhn8r/7tBquJvPU23tDNaVPySNDSczcMMnp3lhDqw/7y3Ad8DPEPQBb81JnxG2D656MOrJ0+QgHsQmrueZ1vaoNwtZeW2v1gxxSnQVgYHSG6ANyXfvUdvzQ6LhLW8SJEKBeL7X+O8mLTqs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bMmX2JAT; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bMmX2JAT" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-a3e8c1e4aa7so148807366b.2 for ; Fri, 23 Feb 2024 23:15:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708758917; x=1709363717; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Q/l3rdHHadZ15R5gzk5CAjldRNRZfc44ldL/qVb2ZY4=; b=bMmX2JAT2eFyQwjAPmoTi+P2JfVz1B3O45fJ7CL0OdM7pmV6z6oUhU/Bj2MqbTty8l ctoKNdFkdETgqF8UCq09QnbJtgZy8JtjOGyWrh/4U+1/bTljlDlBuCaTTtWpsbrEREe9 dC/sMoKKE2lcs2WnFilntvsLJmULtraqEnsOEaVNyxCpniMiV4PzUhBJUeulb36VxgYR EzVBQHfjRVna1w1idEtltZkDrShAEFsD87LmraFCGwZm1ppknNJWQXTqlhL7depqNyz3 aNEjDYtGWDz80tzi75AsP115GMFmLD+TylnCt/LGjghpDkuSa3ryrTtw1bm6z7yq9QGK a1Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708758917; x=1709363717; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q/l3rdHHadZ15R5gzk5CAjldRNRZfc44ldL/qVb2ZY4=; b=F1LHf9yvIP5QpYe4vnm3tlfQLRTp+uC1q9biuzFJ0wiBc3yIEzbaSNpx3UUXM/HxSH qqQp2eu80qD03l0r/LK9akq1GOs5ou5fxdSDZjanWJ/lC40/xhcays/Eum9g7Zl42KYl VjUC0NGo60t9ZZanHy8Ry3x7MzpX+tppYR9E0OQcLVkRBQV8vqYn5P9iFnGOZOcNLm/2 DhUkoXq/ETX6wWWCQQZMs6sgf0L+QkU5YkueNilN6dkhAXRXADvB6XywZUkV7j0wuXlF s76wEUqVCe/Vr2MR6rWQ7u4FZta0thjn7IYyUqEszBfKTwDBGokRRk9cb+fjA5J5pPNE tJbg== X-Forwarded-Encrypted: i=1; AJvYcCVXlloCTYBZF5DikxvrC1zAfOlal/7vPzM1xX9xNcAr79Qo1FyavGi/WKwlSCrrqQZx2YGFl7yEO3USqp8BeKGNaXvQCwxbiu3j4VE= X-Gm-Message-State: AOJu0Yz7C8u/qxM3BrYkw2ZVxlt2hNrmMiH0zfdHE21oyqZMgxpVd5zj Sv+DnkdYIfd/86jjzcGAVtlKcDgJzp+vpAtiPjpvGM8N4NJ7nH0s X-Google-Smtp-Source: AGHT+IEchw50Yy6f2MPM1hIEjVE7JLq6sTy83bT2bvXfzjJTJuftRJidWkflr7PgJW7pu0uhxM1szg== X-Received: by 2002:a17:906:5910:b0:a3f:583c:b00c with SMTP id h16-20020a170906591000b00a3f583cb00cmr1144362ejq.43.1708758916491; Fri, 23 Feb 2024 23:15:16 -0800 (PST) Received: from archlinux.localnet (86-58-6-171.dynamic.telemach.net. [86.58.6.171]) by smtp.gmail.com with ESMTPSA id jx20-20020a170906ca5400b00a3d777aa8fesm322779ejb.69.2024.02.23.23.15.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Feb 2024 23:15:15 -0800 (PST) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: =?utf-8?B?T25kxZllag==?= Jirman , Maxime Ripard , Chen-Yu Tsai , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , Samuel Holland , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Jernej =?utf-8?B?xaBrcmFiZWM=?= Subject: Re: [PATCH 3/3] drm/sun4i: Fix layer zpos change/atomic modesetting Date: Sat, 24 Feb 2024 08:10:05 +0100 Message-ID: <6018948.lOV4Wx5bFT@archlinux> In-Reply-To: <5h7jcwsdlpe7w2xylbhlw2asfww3znqlmlnszwvvosz5ssokkq@dxhn4v4sy4nq> References: <20240216190430.1374132-1-megi@xff.cz> <2448947.jE0xQCEvom@jernej-laptop> <5h7jcwsdlpe7w2xylbhlw2asfww3znqlmlnszwvvosz5ssokkq@dxhn4v4sy4nq> Precedence: bulk X-Mailing-List: linux-sunxi@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" On Saturday, February 24, 2024 3:20:43 AM CET Ond=C5=99ej Jirman wrote: > On Thu, Feb 22, 2024 at 09:02:53PM +0100, Jernej =C5=A0krabec wrote: > > Dne sreda, 21. februar 2024 ob 14:45:20 CET je Maxime Ripard napisal(a): > > > Hi, > > >=20 > > > On Fri, Feb 16, 2024 at 08:04:26PM +0100, Ond=C5=99ej Jirman wrote: > > > > From: Ondrej Jirman > > > >=20 > > > > Identical configurations of planes can lead to different (and wrong) > > > > layer -> pipe routing at HW level, depending on the order of atomic > > > > plane changes. > > > >=20 > > > > For example: > > > >=20 > > > > - Layer 1 is configured to zpos 0 and thus uses pipe 0. No other la= yer > > > > is enabled. This is a typical situation at boot. > > > >=20 > > > > - When a compositor takes over and layer 3 is enabled, > > > > sun8i_ui_layer_enable() will get called with old_zpos=3D0 zpos=3D= 1, which > > > > will lead to incorrect disabling of pipe 0 and enabling of pipe 1. > > > >=20 > > > > What happens is that sun8i_ui_layer_enable() function may disable > > > > blender pipes even if it is no longer assigned to its layer. > > > >=20 > > > > To correct this, move the routing setup out of individual plane's > > > > atomic_update into crtc's atomic_update, where it can be calculated > > > > and updated all at once. > > > >=20 > > > > Remove the atomic_disable callback because it is no longer needed. > > > >=20 > > > > Signed-off-by: Ondrej Jirman > > >=20 > > > I don't have enough knowledge about the mixers code to comment on your > > > patch, so I'll let Jernej review it. However, this feels to me like t= he > > > pipe assignment is typically the sort of things that should be dealt > > > with device-wide, and in atomic_check. > >=20 > > In DE2 and DE3.0, you cannot move planes between mixers (crtcs), becaus= e each > > one is hardwired to specific mixer. Movable planes are the feature of D= E3.3 > > and one of the pain points for upstreaming the code. Anyway, this commi= t only > > addresses current issue of enabling and disabling planes and handling z= pos. > >=20 > > In atomic check you can only precalculate final register values, but I = don't > > see any benefit doing that. I think that this code elegantly solves cur= rent > > issue of enabling or disabling wrong plane in certain situations, so: > >=20 > > Reviewed-by: Jernej Skrabec > >=20 > > Note, if there is new revision, please rewrite blender regmap_update_bi= ts() > > to regmap_write(). Since there is HW issue with reads, I would like to > > get rid of regmap_update_bits() calls eventually. >=20 > I've looked into it and I can probably rewrite these quite readily: >=20 > + regmap_update_bits(mixer->engine.regs, > + SUN8I_MIXER_BLEND_ROUTE(bld_base), > + SUN8I_MIXER_BLEND_ROUTE_PIPE_MSK(0) | > + SUN8I_MIXER_BLEND_ROUTE_PIPE_MSK(1) | > + SUN8I_MIXER_BLEND_ROUTE_PIPE_MSK(2) | > + SUN8I_MIXER_BLEND_ROUTE_PIPE_MSK(3), > + route); >=20 > The mask here covers all implemented bits in the register. >=20 > + regmap_update_bits(mixer->engine.regs, > + SUN8I_MIXER_BLEND_PIPE_CTL(bld_base), > + SUN8I_MIXER_BLEND_PIPE_CTL_EN(0) | > + SUN8I_MIXER_BLEND_PIPE_CTL_EN(1) | > + SUN8I_MIXER_BLEND_PIPE_CTL_EN(2) | > + SUN8I_MIXER_BLEND_PIPE_CTL_EN(3), > + pipe_en); > + >=20 > The mask here doesn't cover BLD_FILL_COLOR_CTL.Px_FCEN bits that implemen= t solid > color filling. But those can be 0 anyway except for pipe0 which is hardco= ded by > the driver to 1, I think: >=20 > 631 /* > 632 * Set fill color of bottom plane to black. Generally not nee= ded > 633 * except when VI plane is at bottom (zpos =3D 0) and enabled. > 634 */ > 635 regmap_write(mixer->engine.regs, SUN8I_MIXER_BLEND_PIPE_CTL(b= ase), > 636 SUN8I_MIXER_BLEND_PIPE_CTL_FC_EN(0)); Correct on all counts. That's what I've meant. >=20 > I will not be able to get rid of regmap_update_bits in sun8i_layer_enable > because that register there has other important things in it like framebu= ffer > pixel format, etc. Yeah, this rework would certainly be more involved, so it's out of the scop= e of this series. Best regards, Jernej >=20 > kind regards, > o. >=20 > > Best regards, > > Jernej > >=20 > > >=20 > > > If I'm talking non-sense, it would be great to mention at least why t= hat > > > can't be an option in the commit log. > > >=20 > > > Maxime > > >=20 > >=20 > >=20 > >=20 > >=20 >=20 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 7FF87C54E41 for ; Sat, 24 Feb 2024 07:15:39 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=CtleiFSKDwUbdnA8LaPOEnZYrXV6uFHwj8HbPZYa/ps=; b=wOU9DB9HgcrBtz 08u7mP+6m6hFwAzGWAVe57fborYN05hxqFzMsN1LLggZlBSxjnbj1dSSYpPniW2mQlriClYXkxy8N S4amoskmciO+A+m2+s2S4I+gzA5QLFwu1NMpF3aCbZCj6kXXy6LOJm/QRCHR0kTK6QXU8MLQqcqc9 6qzP67uKxnV7OI6SZR4wePkcQaB4Jos78Z0B86ctJ0A89mpPERqZ9XpUYiTwGnObghcFr9f9xcGDL fVAf/5G4nbB+sIDQz7kqn3mQhe06GxjAWEv9aHxKr5Pyzpa4j/5V2mxvKtqfRUn6CwMkfUSTkI0xu sLOs6OV1tIX7OmDgoKzw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rdmFl-0000000CFps-1UpR; Sat, 24 Feb 2024 07:15:21 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rdmFi-0000000CFoj-39l7 for linux-arm-kernel@lists.infradead.org; Sat, 24 Feb 2024 07:15:20 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-a34c5ca2537so216585966b.0 for ; Fri, 23 Feb 2024 23:15:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708758917; x=1709363717; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Q/l3rdHHadZ15R5gzk5CAjldRNRZfc44ldL/qVb2ZY4=; b=kHm2gtZ1W5zHnaohDulktoRs1iXB3syRls56EluR3/58lwgpcdxxsFZEYIBmGMMZZ0 KZ0NlJ/yB8343s2wZBZsHUR6lAB/WZv80xFQnUuhzPiWSMQaONukVx6B/Ix3tuAeUdQu gD0JlhWqOLpzTGboKpgZcSkvwakhjWM7+KlcwN/MuymJfOVDc4gj05d3p2POZ4ene546 TieEnoYTbCMdx5bCTMdAxgohYgn7mQ83Pnm7k9xdsha81vJqZ3uuUsnmUatr0cA6kMhx vJ4N73Yx95OWq4flsGveCqLzmalKqpsikh1r2JAXBCVTRydfXVCxoRvQbkBeFUH4qeq/ pY4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708758917; x=1709363717; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q/l3rdHHadZ15R5gzk5CAjldRNRZfc44ldL/qVb2ZY4=; b=LZR4LD1ZtmQ50BjLISGrGq5pnrkZT8Mgm9MKP7sGw/QOmx+qRkXnMcI6aBzSqZGf1/ mosLb8RrcqLcyMeAygKQSUaNsrFS0NKJTp20GR84cOKbxNkrpmBZXSnUirhr6sEFDvwS oDJGTF5ew7oVAIsFv/VKJWV0VuLEo/OvGrPJJueQOcU3UEFjwVhmNXpCnfUqVEH1C38H bfqzp1/5HtvLBla5WVzSk0+rJWHpbBM04/uiWyes0fJ5ylqpkgkopCKV6wHumHQ3vt9s UQK5lPBQgij8gF+buWlQERvr1to3IZu6I9/AYG05cVeRJzcvWkdYDISDcIV4Og4zae8F gJSw== X-Forwarded-Encrypted: i=1; AJvYcCV7owKfOeGILe9nfBoi4IMp1C8OM1Drpg0bWyJIlSh2RKxVuBWX6YM+v9QGtjOBwnAn5NYd9FiqwOIKK2PyylzdkW65+6rkGdvCOL78pNrfOtdyrf0= X-Gm-Message-State: AOJu0YwvFckjVMiBchrnhTmE5B32RwUv2jKEUY8xsJp5k7NcNrF1sUai 6Hmta5qwRgqiF66Af9dgrgxVLBDRC058rbhQuXNTEjPXf2amQY6a X-Google-Smtp-Source: AGHT+IEchw50Yy6f2MPM1hIEjVE7JLq6sTy83bT2bvXfzjJTJuftRJidWkflr7PgJW7pu0uhxM1szg== X-Received: by 2002:a17:906:5910:b0:a3f:583c:b00c with SMTP id h16-20020a170906591000b00a3f583cb00cmr1144362ejq.43.1708758916491; Fri, 23 Feb 2024 23:15:16 -0800 (PST) Received: from archlinux.localnet (86-58-6-171.dynamic.telemach.net. [86.58.6.171]) by smtp.gmail.com with ESMTPSA id jx20-20020a170906ca5400b00a3d777aa8fesm322779ejb.69.2024.02.23.23.15.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Feb 2024 23:15:15 -0800 (PST) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: =?utf-8?B?T25kxZllag==?= Jirman , Maxime Ripard , Chen-Yu Tsai , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , Samuel Holland , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Jernej =?utf-8?B?xaBrcmFiZWM=?= Subject: Re: [PATCH 3/3] drm/sun4i: Fix layer zpos change/atomic modesetting Date: Sat, 24 Feb 2024 08:10:05 +0100 Message-ID: <6018948.lOV4Wx5bFT@archlinux> In-Reply-To: <5h7jcwsdlpe7w2xylbhlw2asfww3znqlmlnszwvvosz5ssokkq@dxhn4v4sy4nq> References: <20240216190430.1374132-1-megi@xff.cz> <2448947.jE0xQCEvom@jernej-laptop> <5h7jcwsdlpe7w2xylbhlw2asfww3znqlmlnszwvvosz5ssokkq@dxhn4v4sy4nq> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240223_231518_822874_4C2083E2 X-CRM114-Status: GOOD ( 39.70 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU2F0dXJkYXksIEZlYnJ1YXJ5IDI0LCAyMDI0IDM6MjA6NDMgQU0gQ0VUIE9uZMWZZWogSmly bWFuIHdyb3RlOgo+IE9uIFRodSwgRmViIDIyLCAyMDI0IGF0IDA5OjAyOjUzUE0gKzAxMDAsIEpl cm5laiDFoGtyYWJlYyB3cm90ZToKPiA+IERuZSBzcmVkYSwgMjEuIGZlYnJ1YXIgMjAyNCBvYiAx NDo0NToyMCBDRVQgamUgTWF4aW1lIFJpcGFyZCBuYXBpc2FsKGEpOgo+ID4gPiBIaSwKPiA+ID4g Cj4gPiA+IE9uIEZyaSwgRmViIDE2LCAyMDI0IGF0IDA4OjA0OjI2UE0gKzAxMDAsIE9uZMWZZWog SmlybWFuIHdyb3RlOgo+ID4gPiA+IEZyb206IE9uZHJlaiBKaXJtYW4gPG1lZ2lAeGZmLmN6Pgo+ ID4gPiA+IAo+ID4gPiA+IElkZW50aWNhbCBjb25maWd1cmF0aW9ucyBvZiBwbGFuZXMgY2FuIGxl YWQgdG8gZGlmZmVyZW50IChhbmQgd3JvbmcpCj4gPiA+ID4gbGF5ZXIgLT4gcGlwZSByb3V0aW5n IGF0IEhXIGxldmVsLCBkZXBlbmRpbmcgb24gdGhlIG9yZGVyIG9mIGF0b21pYwo+ID4gPiA+IHBs YW5lIGNoYW5nZXMuCj4gPiA+ID4gCj4gPiA+ID4gRm9yIGV4YW1wbGU6Cj4gPiA+ID4gCj4gPiA+ ID4gLSBMYXllciAxIGlzIGNvbmZpZ3VyZWQgdG8genBvcyAwIGFuZCB0aHVzIHVzZXMgcGlwZSAw LiBObyBvdGhlciBsYXllcgo+ID4gPiA+ICAgaXMgZW5hYmxlZC4gVGhpcyBpcyBhIHR5cGljYWwg c2l0dWF0aW9uIGF0IGJvb3QuCj4gPiA+ID4gCj4gPiA+ID4gLSBXaGVuIGEgY29tcG9zaXRvciB0 YWtlcyBvdmVyIGFuZCBsYXllciAzIGlzIGVuYWJsZWQsCj4gPiA+ID4gICBzdW44aV91aV9sYXll cl9lbmFibGUoKSB3aWxsIGdldCBjYWxsZWQgd2l0aCBvbGRfenBvcz0wIHpwb3M9MSwgd2hpY2gK PiA+ID4gPiAgIHdpbGwgbGVhZCB0byBpbmNvcnJlY3QgZGlzYWJsaW5nIG9mIHBpcGUgMCBhbmQg ZW5hYmxpbmcgb2YgcGlwZSAxLgo+ID4gPiA+IAo+ID4gPiA+IFdoYXQgaGFwcGVucyBpcyB0aGF0 IHN1bjhpX3VpX2xheWVyX2VuYWJsZSgpIGZ1bmN0aW9uIG1heSBkaXNhYmxlCj4gPiA+ID4gYmxl bmRlciBwaXBlcyBldmVuIGlmIGl0IGlzIG5vIGxvbmdlciBhc3NpZ25lZCB0byBpdHMgbGF5ZXIu Cj4gPiA+ID4gCj4gPiA+ID4gVG8gY29ycmVjdCB0aGlzLCBtb3ZlIHRoZSByb3V0aW5nIHNldHVw IG91dCBvZiBpbmRpdmlkdWFsIHBsYW5lJ3MKPiA+ID4gPiBhdG9taWNfdXBkYXRlIGludG8gY3J0 YydzIGF0b21pY191cGRhdGUsIHdoZXJlIGl0IGNhbiBiZSBjYWxjdWxhdGVkCj4gPiA+ID4gYW5k IHVwZGF0ZWQgYWxsIGF0IG9uY2UuCj4gPiA+ID4gCj4gPiA+ID4gUmVtb3ZlIHRoZSBhdG9taWNf ZGlzYWJsZSBjYWxsYmFjayBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCj4gPiA+ID4g Cj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogT25kcmVqIEppcm1hbiA8bWVnaUB4ZmYuY3o+Cj4gPiA+ IAo+ID4gPiBJIGRvbid0IGhhdmUgZW5vdWdoIGtub3dsZWRnZSBhYm91dCB0aGUgbWl4ZXJzIGNv ZGUgdG8gY29tbWVudCBvbiB5b3VyCj4gPiA+IHBhdGNoLCBzbyBJJ2xsIGxldCBKZXJuZWogcmV2 aWV3IGl0LiBIb3dldmVyLCB0aGlzIGZlZWxzIHRvIG1lIGxpa2UgdGhlCj4gPiA+IHBpcGUgYXNz aWdubWVudCBpcyB0eXBpY2FsbHkgdGhlIHNvcnQgb2YgdGhpbmdzIHRoYXQgc2hvdWxkIGJlIGRl YWx0Cj4gPiA+IHdpdGggZGV2aWNlLXdpZGUsIGFuZCBpbiBhdG9taWNfY2hlY2suCj4gPiAKPiA+ IEluIERFMiBhbmQgREUzLjAsIHlvdSBjYW5ub3QgbW92ZSBwbGFuZXMgYmV0d2VlbiBtaXhlcnMg KGNydGNzKSwgYmVjYXVzZSBlYWNoCj4gPiBvbmUgaXMgaGFyZHdpcmVkIHRvIHNwZWNpZmljIG1p eGVyLiBNb3ZhYmxlIHBsYW5lcyBhcmUgdGhlIGZlYXR1cmUgb2YgREUzLjMKPiA+IGFuZCBvbmUg b2YgdGhlIHBhaW4gcG9pbnRzIGZvciB1cHN0cmVhbWluZyB0aGUgY29kZS4gQW55d2F5LCB0aGlz IGNvbW1pdCBvbmx5Cj4gPiBhZGRyZXNzZXMgY3VycmVudCBpc3N1ZSBvZiBlbmFibGluZyBhbmQg ZGlzYWJsaW5nIHBsYW5lcyBhbmQgaGFuZGxpbmcgenBvcy4KPiA+IAo+ID4gSW4gYXRvbWljIGNo ZWNrIHlvdSBjYW4gb25seSBwcmVjYWxjdWxhdGUgZmluYWwgcmVnaXN0ZXIgdmFsdWVzLCBidXQg SSBkb24ndAo+ID4gc2VlIGFueSBiZW5lZml0IGRvaW5nIHRoYXQuIEkgdGhpbmsgdGhhdCB0aGlz IGNvZGUgZWxlZ2FudGx5IHNvbHZlcyBjdXJyZW50Cj4gPiBpc3N1ZSBvZiBlbmFibGluZyBvciBk aXNhYmxpbmcgd3JvbmcgcGxhbmUgaW4gY2VydGFpbiBzaXR1YXRpb25zLCBzbzoKPiA+IAo+ID4g UmV2aWV3ZWQtYnk6IEplcm5laiBTa3JhYmVjIDxqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20+Cj4g PiAKPiA+IE5vdGUsIGlmIHRoZXJlIGlzIG5ldyByZXZpc2lvbiwgcGxlYXNlIHJld3JpdGUgYmxl bmRlciByZWdtYXBfdXBkYXRlX2JpdHMoKQo+ID4gdG8gcmVnbWFwX3dyaXRlKCkuIFNpbmNlIHRo ZXJlIGlzIEhXIGlzc3VlIHdpdGggcmVhZHMsIEkgd291bGQgbGlrZSB0bwo+ID4gZ2V0IHJpZCBv ZiByZWdtYXBfdXBkYXRlX2JpdHMoKSBjYWxscyBldmVudHVhbGx5Lgo+IAo+IEkndmUgbG9va2Vk IGludG8gaXQgYW5kIEkgY2FuIHByb2JhYmx5IHJld3JpdGUgdGhlc2UgcXVpdGUgcmVhZGlseToK PiAKPiArCXJlZ21hcF91cGRhdGVfYml0cyhtaXhlci0+ZW5naW5lLnJlZ3MsCj4gKwkJCSAgIFNV TjhJX01JWEVSX0JMRU5EX1JPVVRFKGJsZF9iYXNlKSwKPiArCQkJICAgU1VOOElfTUlYRVJfQkxF TkRfUk9VVEVfUElQRV9NU0soMCkgfAo+ICsJCQkgICBTVU44SV9NSVhFUl9CTEVORF9ST1VURV9Q SVBFX01TSygxKSB8Cj4gKwkJCSAgIFNVTjhJX01JWEVSX0JMRU5EX1JPVVRFX1BJUEVfTVNLKDIp IHwKPiArCQkJICAgU1VOOElfTUlYRVJfQkxFTkRfUk9VVEVfUElQRV9NU0soMyksCj4gKwkJCSAg IHJvdXRlKTsKPiAKPiBUaGUgbWFzayBoZXJlIGNvdmVycyBhbGwgaW1wbGVtZW50ZWQgYml0cyBp biB0aGUgcmVnaXN0ZXIuCj4gCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMobWl4ZXItPmVuZ2luZS5y ZWdzLAo+ICsJCQkgICBTVU44SV9NSVhFUl9CTEVORF9QSVBFX0NUTChibGRfYmFzZSksCj4gKwkJ CSAgIFNVTjhJX01JWEVSX0JMRU5EX1BJUEVfQ1RMX0VOKDApIHwKPiArCQkJICAgU1VOOElfTUlY RVJfQkxFTkRfUElQRV9DVExfRU4oMSkgfAo+ICsJCQkgICBTVU44SV9NSVhFUl9CTEVORF9QSVBF X0NUTF9FTigyKSB8Cj4gKwkJCSAgIFNVTjhJX01JWEVSX0JMRU5EX1BJUEVfQ1RMX0VOKDMpLAo+ ICsJCQkgICBwaXBlX2VuKTsKPiArCj4gCj4gVGhlIG1hc2sgaGVyZSBkb2Vzbid0IGNvdmVyIEJM RF9GSUxMX0NPTE9SX0NUTC5QeF9GQ0VOIGJpdHMgdGhhdCBpbXBsZW1lbnQgc29saWQKPiBjb2xv ciBmaWxsaW5nLiBCdXQgdGhvc2UgY2FuIGJlIDAgYW55d2F5IGV4Y2VwdCBmb3IgcGlwZTAgd2hp Y2ggaXMgaGFyZGNvZGVkIGJ5Cj4gdGhlIGRyaXZlciB0byAxLCBJIHRoaW5rOgo+IAo+IDYzMSAg ICAgICAgIC8qCj4gNjMyICAgICAgICAgICogU2V0IGZpbGwgY29sb3Igb2YgYm90dG9tIHBsYW5l IHRvIGJsYWNrLiBHZW5lcmFsbHkgbm90IG5lZWRlZAo+IDYzMyAgICAgICAgICAqIGV4Y2VwdCB3 aGVuIFZJIHBsYW5lIGlzIGF0IGJvdHRvbSAoenBvcyA9IDApIGFuZCBlbmFibGVkLgo+IDYzNCAg ICAgICAgICAqLwo+IDYzNSAgICAgICAgIHJlZ21hcF93cml0ZShtaXhlci0+ZW5naW5lLnJlZ3Ms IFNVTjhJX01JWEVSX0JMRU5EX1BJUEVfQ1RMKGJhc2UpLAo+IDYzNiAgICAgICAgICAgICAgICAg ICAgICBTVU44SV9NSVhFUl9CTEVORF9QSVBFX0NUTF9GQ19FTigwKSk7CgpDb3JyZWN0IG9uIGFs bCBjb3VudHMuIFRoYXQncyB3aGF0IEkndmUgbWVhbnQuCgo+IAo+IEkgd2lsbCBub3QgYmUgYWJs ZSB0byBnZXQgcmlkIG9mIHJlZ21hcF91cGRhdGVfYml0cyBpbiBzdW44aV9sYXllcl9lbmFibGUK PiBiZWNhdXNlIHRoYXQgcmVnaXN0ZXIgdGhlcmUgaGFzIG90aGVyIGltcG9ydGFudCB0aGluZ3Mg aW4gaXQgbGlrZSBmcmFtZWJ1ZmZlcgo+IHBpeGVsIGZvcm1hdCwgZXRjLgoKWWVhaCwgdGhpcyBy ZXdvcmsgd291bGQgY2VydGFpbmx5IGJlIG1vcmUgaW52b2x2ZWQsIHNvIGl0J3Mgb3V0IG9mIHRo ZSBzY29wZSBvZgp0aGlzIHNlcmllcy4KCkJlc3QgcmVnYXJkcywKSmVybmVqCgo+IAo+IGtpbmQg cmVnYXJkcywKPiAJby4KPiAKPiA+IEJlc3QgcmVnYXJkcywKPiA+IEplcm5lago+ID4gCj4gPiA+ IAo+ID4gPiBJZiBJJ20gdGFsa2luZyBub24tc2Vuc2UsIGl0IHdvdWxkIGJlIGdyZWF0IHRvIG1l bnRpb24gYXQgbGVhc3Qgd2h5IHRoYXQKPiA+ID4gY2FuJ3QgYmUgYW4gb3B0aW9uIGluIHRoZSBj b21taXQgbG9nLgo+ID4gPiAKPiA+ID4gTWF4aW1lCj4gPiA+IAo+ID4gCj4gPiAKPiA+IAo+ID4g Cj4gCgoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=