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 B8FECC7115C for ; Sat, 21 Jun 2025 19:47:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date :Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=sv7tVvQqmX8wrxpnSPIrKw5fwx/VJrEZXKziP/cE/wA=; b=ARZkuf60JTn+flIRn3u1ibOw01 i0cR88sy4TRbEuhxI1CZVxMiW5dxN/L8y+819d4vp9OjWPBUJrGunxhOL4zIFihncKCMN6ckr8C3F VdRnduXHc9q1RkCiM6agPA2Tbrhh8XcFzaiMRpJ41BdtOvdD70jNxCXu+OAguaGCK8ZvUbjBjfIpf /FX9cuQNtdlN7xOGvK+xtBj3e/2nH0gmgg5kTnlaPnbHUe++9n/qPzv/40jbSJNB4+m7nhN3ATNMf QP1IOcC1oUA9p49eVaeiv3mhsNHnVViTntPI2pEEq/0UdTlfjAMEBhxPxQHmZkFz7GYoSOeRIgiqr C7/ICbiw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uT4BN-00000000DIN-2CSp; Sat, 21 Jun 2025 19:47:21 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uT498-00000000DEJ-3o2Q; Sat, 21 Jun 2025 19:45:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=sv7tVvQqmX8wrxpnSPIrKw5fwx/VJrEZXKziP/cE/wA=; b=DGDhiXy2ZmXXe8djpbO/KLT8ds OGeIMfxbnL/T9yqOfqADJBrbW/xtkMtknrYz3+Rh63HKvCrRDxWA53WBQoe1nkekxC9hinOffxRhz GUoWIQGkmFRopIZhs/gPj6OawoQ9nMtCnV2piDBqsiElWJibPF9MEVEB6D4U9TydYNwRqM4Ih4ods 81YZ8AOgcjaT5yrYe6EEkS43s/acUAsdgp5enPbXFFD/yrrGKQlyFmUaWewOKsjE9i0uDuGDu4qQB Kosc9EKH1aBqtsJtwZXfbg97pWUU70JA7KFzCZMnkv4fNUURKQe+7Y70JyD7govW+WnpoGQgU5NNl ak4ojmeg==; Received: from 85-207-219-154.static.bluetone.cz ([85.207.219.154] helo=phil.localnet) by gloria.sntech.de with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uT491-0002yL-Bp; Sat, 21 Jun 2025 21:44:55 +0200 From: Heiko Stuebner To: Nicolas Frattaroli , XiaoDong Huang , Alexey Charkov Cc: Piotr Oniszczuk , Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman Subject: Re: [PATCH 1/4] arm64: dts: rockchip: list all CPU supplies on ArmSoM Sige5 Date: Sat, 21 Jun 2025 21:44:54 +0200 Message-ID: <3286000.Y6S9NjorxK@phil> In-Reply-To: References: <20250603-sige5-updates-v1-0-717e8ce4ab77@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250621_124503_125065_C300B779 X-CRM114-Status: GOOD ( 66.53 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Am Samstag, 21. Juni 2025, 21:35:56 Mitteleurop=C3=A4ische Sommerzeit schri= eb Alexey Charkov: > On Fri, Jun 20, 2025 at 8:02=E2=80=AFPM Alexey Charkov wrote: > > > > On Wed, Jun 18, 2025 at 6:48=E2=80=AFPM Alexey Charkov wrote: > > > > > > On Wed, Jun 18, 2025 at 6:06=E2=80=AFPM Nicolas Frattaroli > > > wrote: > > > > > > > > Hello, > > > > > > > > +Cc Jonas Karlman as he is intimately familiar with RK3576 clock sh= enanigans by now, > > > > > > > > On Wednesday, 18 June 2025 15:51:45 Central European Summer Time Al= exey Charkov wrote: > > > > > On Sun, Jun 15, 2025 at 8:00=E2=80=AFPM Piotr Oniszczuk > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > Wiadomo=C5=9B=C4=87 napisana przez Alexey Charkov w dniu 9 cze 2025, o godz. 16:05: > > > > > > > > > > > > > > On Sun, Jun 8, 2025 at 11:24=E2=80=AFAM Piotr Oniszczuk > > > > > > > wrote: > > > > > > >>> Wiadomo=C5=9B=C4=87 napisana przez Alexey Charkov w dniu 5 cze 2025, o godz. 15:42: > > > > > > >>>> Alexey, > > > > > > >>>> I see you are using rk3576 board like me (nanopi-m5) > > > > > > >>>> Have you on your board correctly working cpu dvfs? > > > > > > >>>> I mean: [1][desired clocks reported by kernel sysfs are in= pair with [2[]cur clocks? > > > > > > >>>> In my case i see mine cpu lives totally on it=E2=80=99s ow= n with dvfs: > > > > > > >>> > > > > > > >>> Hi Piotr, > > > > > > >>> > > > > > > >>> I haven't tried to validate actual running frequencies vs. = requested > > > > > > >>> frequencies, but subjective performance and power consumpti= on seem to > > > > > > >>> be in line with what I expect. > > > > > > >> > > > > > > >> well - my subjective l&f is that - currently - my rk3576 se= ems =E2=80=9Eslower" than i.e. 4xA53 h618. > > > > > > > > > > > > > > In my experience, native compilation of GCC 14 using 8 thread= s on > > > > > > > RK3576 (mainline with passive cooling and throttling enabled)= : 2 hours > > > > > > > 6 minutes, on RK3588 (mainline with passive cooling via Radxa= Rock 5B > > > > > > > case and throttling enabled but never kicking in): 1 hour 10 = minutes > > > > > > > > > > > > by curiosity i looked randomly on 3576 vs 3588: > > > > > > multithread passmark: 3675 (https://www.cpubenchmark.net/cpu.ph= p?cpu=3DRockchip+RK3576&id=3D6213) > > > > > > multithread passmark: 4530 (https://www.cpubenchmark.net/cpu.ph= p?cpu=3DRockchip+RK3588&id=3D4906) > > > > > > > > > > > > assuming 3588 as baseline, 3576 is approx 20% slower on multith= read passmark (has ~0,8 comp power of 3588) > > > > > > 70 min compile on 3588 should take something like ~86min on 357= 6. > > > > > > In your case 126min compile on 3576 shows 3576 offers 0,55 comp= power of 3588. > > > > > > Roughly 3576 should do this task in 40min less than you current= ly see i think > > > > > > > > > > > > > > > > > > > Can't see how u-boot would affect CPU speed in Linux, as long= as you > > > > > > > use comparable ATF images. Do you use the same kernel and dtb= in all > > > > > > > these cases? Also, what's your thermal setup? > > > > > > > > > > > > yes. in all cases only change was: uboot & atf > > > > > > thermal is based on recent collabora series (+ recent pooling f= ix for clocks return from throttling) > > > > > > > > > > > > > > > > > > > > > > > > > > > Not sure UX is a particularly good measure of CPU performance= , as long > > > > > > > as you've got a properly accelerated DRM graphics pipeline. M= ore > > > > > > > likely 2D/3D and memory. > > > > > > > > > > > > indeed. > > > > > > For quantified look i=E2=80=99m looking on v.simple approach to= estimate real clock is http://uob-hpc.github.io/2017/11/22/arm-clock-freq.= html > > > > > > by curiosity i looked what it reports on a53/a55/a72/a76 and it= is surprisingly accurate :-) > > > > > > on mine 3576 with collabora uboot+mainline atf is hows 800MHz (= and in perf. gov it seems to be constant) > > > > > > > > > > > > > > > > > > > > There might be some difference in how PVTPLL behaves on RK357= 6 vs. > > > > > > > RK3588. But frankly first I would check if you are using comp= arable > > > > > > > ATF implementations (e.g. upstream TF-A in both cases), kerne= ls and > > > > > > > thermal environment :) > > > > > > > > > > > > all tests: the same 6.15.2 mainline + some collabora patches > > > > > > > > > > > > diffs were: > > > > > > 1.collabora uboot[1] + mainline atf 2.13 > > > > > > 2.collabora uboot[1] + rockchip rkbin bl31 blob > > > > > > 3.vendor uboot (bin dump from friendlyelec ubuntu image) > > > > > > > > > > > > on 1/2 i see kind of issue with clock values (i.e. perf gov giv= es constant 800MHz on mainline atf). > > > > > > 3 seems to perform better - (i.e. perf gov gives constant 1500M= Hz so all is snappier/faster) > > > > > > > > > > There is indeed something weird going on. I've tried running sbc-= bench > > > > > [1], and even though I observe dynamically varying CPU frequencies > > > > > after boot with schedutil governor, once sbc-bench switches the > > > > > governor to "performance" and goes through the OPPs in descending > > > > > frequency order, the CPUs seem to get stuck at the last applied l= ow > > > > > frequency. Even after max frequency gets reverted from 408 MHz to > > > > > something higher, even after I switch the governor to something e= lse - > > > > > no matter what. Only a reboot gets the higher frequencies 'unstuc= k' > > > > > for me. > > > > > > > > > > These are all observed at around 55C SoC temperature, so throttli= ng is > > > > > not an issue. Regulators are stuck at 950000 uV - way above 70000= 0 uV > > > > > that the 408 MHz OPP requires (and power readings seem to match: = I'm > > > > > getting about 2.3W consumption at 408 MHz in idle vs. normal idle > > > > > reading of 1.4W at around 1 GHz). > > > > > > > > > > Not sure what's going on here, and I don't remember seeing anythi= ng > > > > > similar on RK3588. Thoughts welcome. > > > > > > > > This may once again be a "accidentally uses wrong clock IDs" type > > > > situation. The other possibility is that we're getting confused > > > > between what we think the clock rate is and what SCMI actually set > > > > the clock rate to. > > > > > > > > Things to check is whether the right clock controller (scmi vs cru) > > > > and the right clock id (check ATF source for this) is used. > > > > > > Clock IDs in the kernel seem to match those in ATF, but I've noticed > > > what appears to be a buffer overflow in some of the SCMI clock names > > > defined in the opensource TF-A (thanks GCC 15 and its zealous > > > warnings): > > > > After some more testing, I tend to confirm what Piotr observed > > earlier. Namely, frequency scaling acts weird on any ATF version (be > > it binary BL31 or opensource TF-A), as long as mainline u-boot is > > used. Using the u-boot binary extracted from the ArmSoM QWRT image > > does not lead to "stuck" CPU frequencies when running sbc-bench. > > > > I'm getting this with the exact same kernel build (6.16-rc1 with some > > Sige5 related patches, namely v2 of this series, Nicolas' USB > > enablement series and TSADC). The only other difference is that the > > binary u-boot doesn't have EFI support, so I had to boot into the > > ARM64 uncompressed Image instead of vmlinuz.efi, but those were both > > taken from the same build. > > > > What I'm observing during the sbc-bench run: > > - It switches the cpufreq governor from schedutil to performance > > - It goes through all CPU OPPs in descending frequency order > > --- While it does that when booted using mainline u-boot + > > vmlinuz.efi: "hardware limits" line in "cpupower -c 0,4 > > frequency-info" changes with each OPP change (the max frequency > > getting reduced sequentially), then it resets to the initial full > > range, but the actual frequency stays stuck at the lowest possible > > value > > --- While it does that when booted using binary u-boot + Image: > > "hardware limits" line in "cpupower -c 0,4 frequency-info" doesn't > > change, but the actual frequency gets reduced sequentially. Then after > > the iteration over all OPPs is completed it returns to the highest > > possible value, and adjusts dynamically based on thermal throttling as > > the benchmark progresses >=20 > Slight correction: it's not the "hardware limits" line, but rather > "current policy". >=20 > Note that booting mainline u-boot in non-EFI mode (using plain Image) > doesn't change the results above. I'm in a similar boat, while trying to make DSI run on the rk3576. Andy from Rockchip was able to make it work "just" by using vendor- firmware - while using mainline u-boot (with both mainline TF-A or vendor TF-A) produces just black output. I think when I did the mainline u-boot thing I took the "vendor"-code from the armbian rk3576 vendor-u-boot ... but that actually may differ from what the vendors provided? Because at least looking at that code did not show any clock differences to me. > > So it seems that it's not really linked to SCMI clocks or PVTPLL per > > se, but rather what the binary u-boot configures differently vs. > > mainline before the kernel takes over, or something in other firmware > > services that the binary u-boot provides (?) > > > > I'm wondering if there is any clock related functionality in the > > OP-TEE? I didn't have any OP-TEE image in my mainline u-boot builds > > (frankly, I don't even know where to grab one), but the binary u-boot > > from ArmSoM advertises the following: > > > > I/TC: OP-TEE version: 3.13.0-791-g185dc3c92 #hisping.lin (gcc version > > 10.2.1 20201103 (GNU Toolchain for the A-profile Architecture > > 10.2-2020.11 (arm-10.16))) #2 Tue Apr 16 11:05:25 CST 2024 aarch64, > > fwver: v1.01 >=20 > FTR: I've tried to bluntly wrap rk3576_bl32_v1.05.bin into an ELF file > using the following linker script and feed it as $TEE to the mainline > u-boot build, but the resulting u-boot-rockchip.bin gets stuck at boot > after checking hashes of ATF images, so I'm still lost as to how one > can check if the OP-TEE has any influence on the cpufreq behavior. >=20 > --- > ENTRY(_binary_rk3576_bl32_v1_05_bin_start); >=20 > SECTIONS > { > . =3D 0x08400000; > .data : { > *(.data) > } > } > --- >=20 > 0x08400000 is the addr listed for BL32 in RK3576TRUST.ini in rkbin. >=20 > Best regards, > Alexey >=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 C6785C77B7F for ; Sat, 21 Jun 2025 19:47:27 +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:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=stRFpyq1zatc6jTKSj7y0UzoPgcnWCdTN+sD6qYTOdk=; b=rkHQLurtPdF9a6 a3lrwX+7IayEB1NxnO27JmUAkP37oaQ/J5jphTHuVdhzKedfCoel8WKNM4Kv5gFGJsabls/NQb2zR VGYkqp0XZausOGEyGss/js/OcEnHAK1p+bViUnnwKC2ub2/u14+CPAUpDGy1YRsqeUDt9Ug2ndFsf FkpC4cpkKK292biMtZekb9ubDC2VAPQtvQjuChdUFD4eg6H6pz8DrJoU9A8MhPO3uB1pp7hh/TsUL UsEUIXAU2oAc41TZM0eoUEIyRNWsHc5x0d0Z2sd/U9EOYMd//QbBQryt1aKme8hF8o2zMbTjG7u5m 72KE6BUK0/gKUG6ezlzw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uT4BO-00000000DId-07fP; Sat, 21 Jun 2025 19:47:22 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uT498-00000000DEJ-3o2Q; Sat, 21 Jun 2025 19:45:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=sv7tVvQqmX8wrxpnSPIrKw5fwx/VJrEZXKziP/cE/wA=; b=DGDhiXy2ZmXXe8djpbO/KLT8ds OGeIMfxbnL/T9yqOfqADJBrbW/xtkMtknrYz3+Rh63HKvCrRDxWA53WBQoe1nkekxC9hinOffxRhz GUoWIQGkmFRopIZhs/gPj6OawoQ9nMtCnV2piDBqsiElWJibPF9MEVEB6D4U9TydYNwRqM4Ih4ods 81YZ8AOgcjaT5yrYe6EEkS43s/acUAsdgp5enPbXFFD/yrrGKQlyFmUaWewOKsjE9i0uDuGDu4qQB Kosc9EKH1aBqtsJtwZXfbg97pWUU70JA7KFzCZMnkv4fNUURKQe+7Y70JyD7govW+WnpoGQgU5NNl ak4ojmeg==; Received: from 85-207-219-154.static.bluetone.cz ([85.207.219.154] helo=phil.localnet) by gloria.sntech.de with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uT491-0002yL-Bp; Sat, 21 Jun 2025 21:44:55 +0200 From: Heiko Stuebner To: Nicolas Frattaroli , XiaoDong Huang , Alexey Charkov Cc: Piotr Oniszczuk , Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman Subject: Re: [PATCH 1/4] arm64: dts: rockchip: list all CPU supplies on ArmSoM Sige5 Date: Sat, 21 Jun 2025 21:44:54 +0200 Message-ID: <3286000.Y6S9NjorxK@phil> In-Reply-To: References: <20250603-sige5-updates-v1-0-717e8ce4ab77@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250621_124503_125065_C300B779 X-CRM114-Status: GOOD ( 66.53 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org QW0gU2Ftc3RhZywgMjEuIEp1bmkgMjAyNSwgMjE6MzU6NTYgTWl0dGVsZXVyb3DDpGlzY2hlIFNv bW1lcnplaXQgc2NocmllYiBBbGV4ZXkgQ2hhcmtvdjoKPiBPbiBGcmksIEp1biAyMCwgMjAyNSBh dCA4OjAy4oCvUE0gQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPiB3cm90ZToKPiA+ Cj4gPiBPbiBXZWQsIEp1biAxOCwgMjAyNSBhdCA2OjQ44oCvUE0gQWxleGV5IENoYXJrb3YgPGFs Y2hhcmtAZ21haWwuY29tPiB3cm90ZToKPiA+ID4KPiA+ID4gT24gV2VkLCBKdW4gMTgsIDIwMjUg YXQgNjowNuKAr1BNIE5pY29sYXMgRnJhdHRhcm9saQo+ID4gPiA8bmljb2xhcy5mcmF0dGFyb2xp QGNvbGxhYm9yYS5jb20+IHdyb3RlOgo+ID4gPiA+Cj4gPiA+ID4gSGVsbG8sCj4gPiA+ID4KPiA+ ID4gPiArQ2MgSm9uYXMgS2FybG1hbiBhcyBoZSBpcyBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGgg UkszNTc2IGNsb2NrIHNoZW5hbmlnYW5zIGJ5IG5vdywKPiA+ID4gPgo+ID4gPiA+IE9uIFdlZG5l c2RheSwgMTggSnVuZSAyMDI1IDE1OjUxOjQ1IENlbnRyYWwgRXVyb3BlYW4gU3VtbWVyIFRpbWUg QWxleGV5IENoYXJrb3Ygd3JvdGU6Cj4gPiA+ID4gPiBPbiBTdW4sIEp1biAxNSwgMjAyNSBhdCA4 OjAw4oCvUE0gUGlvdHIgT25pc3pjenVrCj4gPiA+ID4gPiA8cGlvdHIub25pc3pjenVrQGdtYWls LmNvbT4gd3JvdGU6Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gV2lhZG9tb8WbxIcgbmFwaXNhbmEgcHJ6ZXogQWxleGV5IENoYXJrb3YgPGFsY2hhcmtA Z21haWwuY29tPiB3IGRuaXUgOSBjemUgMjAyNSwgbyBnb2R6LiAxNjowNToKPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+IE9uIFN1biwgSnVuIDgsIDIwMjUgYXQgMTE6MjTigK9BTSBQaW90ciBP bmlzemN6dWsKPiA+ID4gPiA+ID4gPiA8cGlvdHIub25pc3pjenVrQGdtYWlsLmNvbT4gd3JvdGU6 Cj4gPiA+ID4gPiA+ID4+PiBXaWFkb21vxZvEhyBuYXBpc2FuYSBwcnpleiBBbGV4ZXkgQ2hhcmtv diA8YWxjaGFya0BnbWFpbC5jb20+IHcgZG5pdSA1IGN6ZSAyMDI1LCBvIGdvZHouIDE1OjQyOgo+ ID4gPiA+ID4gPiA+Pj4+IEFsZXhleSwKPiA+ID4gPiA+ID4gPj4+PiBJIHNlZSB5b3UgYXJlIHVz aW5nIHJrMzU3NiBib2FyZCBsaWtlIG1lIChuYW5vcGktbTUpCj4gPiA+ID4gPiA+ID4+Pj4gSGF2 ZSB5b3Ugb24geW91ciBib2FyZCBjb3JyZWN0bHkgd29ya2luZyBjcHUgZHZmcz8KPiA+ID4gPiA+ ID4gPj4+PiBJIG1lYW46IFsxXVtkZXNpcmVkIGNsb2NrcyByZXBvcnRlZCBieSBrZXJuZWwgc3lz ZnMgYXJlIGluIHBhaXIgd2l0aCBbMltdY3VyIGNsb2Nrcz8KPiA+ID4gPiA+ID4gPj4+PiBJbiBt eSBjYXNlIGkgc2VlIG1pbmUgY3B1IGxpdmVzIHRvdGFsbHkgb24gaXTigJlzIG93biB3aXRoIGR2 ZnM6Cj4gPiA+ID4gPiA+ID4+Pgo+ID4gPiA+ID4gPiA+Pj4gSGkgUGlvdHIsCj4gPiA+ID4gPiA+ ID4+Pgo+ID4gPiA+ID4gPiA+Pj4gSSBoYXZlbid0IHRyaWVkIHRvIHZhbGlkYXRlIGFjdHVhbCBy dW5uaW5nIGZyZXF1ZW5jaWVzIHZzLiByZXF1ZXN0ZWQKPiA+ID4gPiA+ID4gPj4+IGZyZXF1ZW5j aWVzLCBidXQgc3ViamVjdGl2ZSBwZXJmb3JtYW5jZSBhbmQgcG93ZXIgY29uc3VtcHRpb24gc2Vl bSB0bwo+ID4gPiA+ID4gPiA+Pj4gYmUgaW4gbGluZSB3aXRoIHdoYXQgSSBleHBlY3QuCj4gPiA+ ID4gPiA+ID4+Cj4gPiA+ID4gPiA+ID4+IHdlbGwgLSBteSBzdWJqZWN0aXZlIGwmZiBpcyB0aGF0 ICAtIGN1cnJlbnRseSAtIG15IHJrMzU3NiBzZWVtcyDigJ5zbG93ZXIiIHRoYW4gaS5lLiA0eEE1 MyBoNjE4Lgo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gSW4gbXkgZXhwZXJpZW5jZSwgbmF0 aXZlIGNvbXBpbGF0aW9uIG9mIEdDQyAxNCB1c2luZyA4IHRocmVhZHMgb24KPiA+ID4gPiA+ID4g PiBSSzM1NzYgKG1haW5saW5lIHdpdGggcGFzc2l2ZSBjb29saW5nIGFuZCB0aHJvdHRsaW5nIGVu YWJsZWQpOiAyIGhvdXJzCj4gPiA+ID4gPiA+ID4gNiBtaW51dGVzLCBvbiBSSzM1ODggKG1haW5s aW5lIHdpdGggcGFzc2l2ZSBjb29saW5nIHZpYSBSYWR4YSBSb2NrIDVCCj4gPiA+ID4gPiA+ID4g Y2FzZSBhbmQgdGhyb3R0bGluZyBlbmFibGVkIGJ1dCBuZXZlciBraWNraW5nIGluKTogMSBob3Vy IDEwIG1pbnV0ZXMKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gYnkgY3VyaW9zaXR5IGkgbG9va2Vk IHJhbmRvbWx5IG9uIDM1NzYgdnMgMzU4ODoKPiA+ID4gPiA+ID4gbXVsdGl0aHJlYWQgcGFzc21h cms6IDM2NzUgKGh0dHBzOi8vd3d3LmNwdWJlbmNobWFyay5uZXQvY3B1LnBocD9jcHU9Um9ja2No aXArUkszNTc2JmlkPTYyMTMpCj4gPiA+ID4gPiA+IG11bHRpdGhyZWFkIHBhc3NtYXJrOiA0NTMw IChodHRwczovL3d3dy5jcHViZW5jaG1hcmsubmV0L2NwdS5waHA/Y3B1PVJvY2tjaGlwK1JLMzU4 OCZpZD00OTA2KQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBhc3N1bWluZyAzNTg4IGFzIGJhc2Vs aW5lLCAzNTc2IGlzIGFwcHJveCAyMCUgc2xvd2VyIG9uIG11bHRpdGhyZWFkIHBhc3NtYXJrICho YXMgfjAsOCBjb21wIHBvd2VyIG9mIDM1ODgpCj4gPiA+ID4gPiA+IDcwIG1pbiBjb21waWxlIG9u IDM1ODggc2hvdWxkIHRha2Ugc29tZXRoaW5nIGxpa2Ugfjg2bWluIG9uIDM1NzYuCj4gPiA+ID4g PiA+IEluIHlvdXIgY2FzZSAxMjZtaW4gY29tcGlsZSBvbiAzNTc2IHNob3dzIDM1NzYgb2ZmZXJz IDAsNTUgY29tcCBwb3dlciBvZiAzNTg4Lgo+ID4gPiA+ID4gPiBSb3VnaGx5IDM1NzYgc2hvdWxk IGRvIHRoaXMgdGFzayBpbiA0MG1pbiBsZXNzIHRoYW4geW91IGN1cnJlbnRseSBzZWUgaSB0aGlu awo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IENhbid0IHNlZSBob3cgdS1i b290IHdvdWxkIGFmZmVjdCBDUFUgc3BlZWQgaW4gTGludXgsIGFzIGxvbmcgYXMgeW91Cj4gPiA+ ID4gPiA+ID4gdXNlIGNvbXBhcmFibGUgQVRGIGltYWdlcy4gRG8geW91IHVzZSB0aGUgc2FtZSBr ZXJuZWwgYW5kIGR0YiBpbiBhbGwKPiA+ID4gPiA+ID4gPiB0aGVzZSBjYXNlcz8gQWxzbywgd2hh dCdzIHlvdXIgdGhlcm1hbCBzZXR1cD8KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4geWVzLiBpbiBh bGwgY2FzZXMgb25seSBjaGFuZ2Ugd2FzOiB1Ym9vdCAmIGF0Zgo+ID4gPiA+ID4gPiB0aGVybWFs IGlzIGJhc2VkIG9uIHJlY2VudCBjb2xsYWJvcmEgc2VyaWVzICgrIHJlY2VudCBwb29saW5nIGZp eCBmb3IgY2xvY2tzIHJldHVybiBmcm9tIHRocm90dGxpbmcpCj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IE5vdCBzdXJlIFVYIGlzIGEgcGFydGlj dWxhcmx5IGdvb2QgbWVhc3VyZSBvZiBDUFUgcGVyZm9ybWFuY2UsIGFzIGxvbmcKPiA+ID4gPiA+ ID4gPiBhcyB5b3UndmUgZ290IGEgcHJvcGVybHkgYWNjZWxlcmF0ZWQgRFJNIGdyYXBoaWNzIHBp cGVsaW5lLiBNb3JlCj4gPiA+ID4gPiA+ID4gbGlrZWx5IDJELzNEIGFuZCBtZW1vcnkuCj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+IGluZGVlZC4KPiA+ID4gPiA+ID4gRm9yIHF1YW50aWZpZWQgbG9v ayBp4oCZbSBsb29raW5nIG9uIHYuc2ltcGxlIGFwcHJvYWNoIHRvIGVzdGltYXRlIHJlYWwgY2xv Y2sgaXMgaHR0cDovL3VvYi1ocGMuZ2l0aHViLmlvLzIwMTcvMTEvMjIvYXJtLWNsb2NrLWZyZXEu aHRtbAo+ID4gPiA+ID4gPiBieSBjdXJpb3NpdHkgaSBsb29rZWQgd2hhdCBpdCByZXBvcnRzIG9u IGE1My9hNTUvYTcyL2E3NiBhbmQgaXQgaXMgc3VycHJpc2luZ2x5IGFjY3VyYXRlIDotKQo+ID4g PiA+ID4gPiBvbiBtaW5lIDM1NzYgd2l0aCBjb2xsYWJvcmEgdWJvb3QrbWFpbmxpbmUgYXRmIGlz IGhvd3MgODAwTUh6IChhbmQgaW4gcGVyZi4gZ292IGl0IHNlZW1zIHRvIGJlIGNvbnN0YW50KQo+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gVGhlcmUgbWlnaHQgYmUgc29t ZSBkaWZmZXJlbmNlIGluIGhvdyBQVlRQTEwgYmVoYXZlcyBvbiBSSzM1NzYgdnMuCj4gPiA+ID4g PiA+ID4gUkszNTg4LiBCdXQgZnJhbmtseSBmaXJzdCBJIHdvdWxkIGNoZWNrIGlmIHlvdSBhcmUg dXNpbmcgY29tcGFyYWJsZQo+ID4gPiA+ID4gPiA+IEFURiBpbXBsZW1lbnRhdGlvbnMgKGUuZy4g dXBzdHJlYW0gVEYtQSBpbiBib3RoIGNhc2VzKSwga2VybmVscyBhbmQKPiA+ID4gPiA+ID4gPiB0 aGVybWFsIGVudmlyb25tZW50IDopCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IGFsbCB0ZXN0czog dGhlIHNhbWUgNi4xNS4yIG1haW5saW5lICsgc29tZSBjb2xsYWJvcmEgcGF0Y2hlcwo+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiBkaWZmcyB3ZXJlOgo+ID4gPiA+ID4gPiAxLmNvbGxhYm9yYSB1Ym9v dFsxXSArIG1haW5saW5lIGF0ZiAyLjEzCj4gPiA+ID4gPiA+IDIuY29sbGFib3JhIHVib290WzFd ICsgcm9ja2NoaXAgcmtiaW4gYmwzMSBibG9iCj4gPiA+ID4gPiA+IDMudmVuZG9yIHVib290IChi aW4gZHVtcCBmcm9tIGZyaWVuZGx5ZWxlYyB1YnVudHUgaW1hZ2UpCj4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+IG9uIDEvMiBpIHNlZSBraW5kIG9mIGlzc3VlIHdpdGggY2xvY2sgdmFsdWVzIChpLmUu IHBlcmYgZ292IGdpdmVzIGNvbnN0YW50IDgwME1IeiBvbiBtYWlubGluZSBhdGYpLgo+ID4gPiA+ ID4gPiAzIHNlZW1zIHRvIHBlcmZvcm0gYmV0dGVyIC0gKGkuZS4gcGVyZiBnb3YgZ2l2ZXMgY29u c3RhbnQgMTUwME1IeiBzbyBhbGwgaXMgc25hcHBpZXIvZmFzdGVyKQo+ID4gPiA+ID4KPiA+ID4g PiA+IFRoZXJlIGlzIGluZGVlZCBzb21ldGhpbmcgd2VpcmQgZ29pbmcgb24uIEkndmUgdHJpZWQg cnVubmluZyBzYmMtYmVuY2gKPiA+ID4gPiA+IFsxXSwgYW5kIGV2ZW4gdGhvdWdoIEkgb2JzZXJ2 ZSBkeW5hbWljYWxseSB2YXJ5aW5nIENQVSBmcmVxdWVuY2llcwo+ID4gPiA+ID4gYWZ0ZXIgYm9v dCB3aXRoIHNjaGVkdXRpbCBnb3Zlcm5vciwgb25jZSBzYmMtYmVuY2ggc3dpdGNoZXMgdGhlCj4g PiA+ID4gPiBnb3Zlcm5vciB0byAicGVyZm9ybWFuY2UiIGFuZCBnb2VzIHRocm91Z2ggdGhlIE9Q UHMgaW4gZGVzY2VuZGluZwo+ID4gPiA+ID4gZnJlcXVlbmN5IG9yZGVyLCB0aGUgQ1BVcyBzZWVt IHRvIGdldCBzdHVjayBhdCB0aGUgbGFzdCBhcHBsaWVkIGxvdwo+ID4gPiA+ID4gZnJlcXVlbmN5 LiBFdmVuIGFmdGVyIG1heCBmcmVxdWVuY3kgZ2V0cyByZXZlcnRlZCBmcm9tIDQwOCBNSHogdG8K PiA+ID4gPiA+IHNvbWV0aGluZyBoaWdoZXIsIGV2ZW4gYWZ0ZXIgSSBzd2l0Y2ggdGhlIGdvdmVy bm9yIHRvIHNvbWV0aGluZyBlbHNlIC0KPiA+ID4gPiA+IG5vIG1hdHRlciB3aGF0LiBPbmx5IGEg cmVib290IGdldHMgdGhlIGhpZ2hlciBmcmVxdWVuY2llcyAndW5zdHVjaycKPiA+ID4gPiA+IGZv ciBtZS4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBUaGVzZSBhcmUgYWxsIG9ic2VydmVkIGF0IGFyb3Vu ZCA1NUMgU29DIHRlbXBlcmF0dXJlLCBzbyB0aHJvdHRsaW5nIGlzCj4gPiA+ID4gPiBub3QgYW4g aXNzdWUuIFJlZ3VsYXRvcnMgYXJlIHN0dWNrIGF0IDk1MDAwMCB1ViAtIHdheSBhYm92ZSA3MDAw MDAgdVYKPiA+ID4gPiA+IHRoYXQgdGhlIDQwOCBNSHogT1BQIHJlcXVpcmVzIChhbmQgcG93ZXIg cmVhZGluZ3Mgc2VlbSB0byBtYXRjaDogSSdtCj4gPiA+ID4gPiBnZXR0aW5nIGFib3V0IDIuM1cg Y29uc3VtcHRpb24gYXQgNDA4IE1IeiBpbiBpZGxlIHZzLiBub3JtYWwgaWRsZQo+ID4gPiA+ID4g cmVhZGluZyBvZiAxLjRXIGF0IGFyb3VuZCAxIEdIeikuCj4gPiA+ID4gPgo+ID4gPiA+ID4gTm90 IHN1cmUgd2hhdCdzIGdvaW5nIG9uIGhlcmUsIGFuZCBJIGRvbid0IHJlbWVtYmVyIHNlZWluZyBh bnl0aGluZwo+ID4gPiA+ID4gc2ltaWxhciBvbiBSSzM1ODguIFRob3VnaHRzIHdlbGNvbWUuCj4g PiA+ID4KPiA+ID4gPiBUaGlzIG1heSBvbmNlIGFnYWluIGJlIGEgImFjY2lkZW50YWxseSB1c2Vz IHdyb25nIGNsb2NrIElEcyIgdHlwZQo+ID4gPiA+IHNpdHVhdGlvbi4gVGhlIG90aGVyIHBvc3Np YmlsaXR5IGlzIHRoYXQgd2UncmUgZ2V0dGluZyBjb25mdXNlZAo+ID4gPiA+IGJldHdlZW4gd2hh dCB3ZSB0aGluayB0aGUgY2xvY2sgcmF0ZSBpcyBhbmQgd2hhdCBTQ01JIGFjdHVhbGx5IHNldAo+ ID4gPiA+IHRoZSBjbG9jayByYXRlIHRvLgo+ID4gPiA+Cj4gPiA+ID4gVGhpbmdzIHRvIGNoZWNr IGlzIHdoZXRoZXIgdGhlIHJpZ2h0IGNsb2NrIGNvbnRyb2xsZXIgKHNjbWkgdnMgY3J1KQo+ID4g PiA+IGFuZCB0aGUgcmlnaHQgY2xvY2sgaWQgKGNoZWNrIEFURiBzb3VyY2UgZm9yIHRoaXMpIGlz IHVzZWQuCj4gPiA+Cj4gPiA+IENsb2NrIElEcyBpbiB0aGUga2VybmVsIHNlZW0gdG8gbWF0Y2gg dGhvc2UgaW4gQVRGLCBidXQgSSd2ZSBub3RpY2VkCj4gPiA+IHdoYXQgYXBwZWFycyB0byBiZSBh IGJ1ZmZlciBvdmVyZmxvdyBpbiBzb21lIG9mIHRoZSBTQ01JIGNsb2NrIG5hbWVzCj4gPiA+IGRl ZmluZWQgaW4gdGhlIG9wZW5zb3VyY2UgVEYtQSAodGhhbmtzIEdDQyAxNSBhbmQgaXRzIHplYWxv dXMKPiA+ID4gd2FybmluZ3MpOgo+ID4KPiA+IEFmdGVyIHNvbWUgbW9yZSB0ZXN0aW5nLCBJIHRl bmQgdG8gY29uZmlybSB3aGF0IFBpb3RyIG9ic2VydmVkCj4gPiBlYXJsaWVyLiBOYW1lbHksIGZy ZXF1ZW5jeSBzY2FsaW5nIGFjdHMgd2VpcmQgb24gYW55IEFURiB2ZXJzaW9uIChiZQo+ID4gaXQg YmluYXJ5IEJMMzEgb3Igb3BlbnNvdXJjZSBURi1BKSwgYXMgbG9uZyBhcyBtYWlubGluZSB1LWJv b3QgaXMKPiA+IHVzZWQuIFVzaW5nIHRoZSB1LWJvb3QgYmluYXJ5IGV4dHJhY3RlZCBmcm9tIHRo ZSBBcm1Tb00gUVdSVCBpbWFnZQo+ID4gZG9lcyBub3QgbGVhZCB0byAic3R1Y2siIENQVSBmcmVx dWVuY2llcyB3aGVuIHJ1bm5pbmcgc2JjLWJlbmNoLgo+ID4KPiA+IEknbSBnZXR0aW5nIHRoaXMg d2l0aCB0aGUgZXhhY3Qgc2FtZSBrZXJuZWwgYnVpbGQgKDYuMTYtcmMxIHdpdGggc29tZQo+ID4g U2lnZTUgcmVsYXRlZCBwYXRjaGVzLCBuYW1lbHkgdjIgb2YgdGhpcyBzZXJpZXMsIE5pY29sYXMn IFVTQgo+ID4gZW5hYmxlbWVudCBzZXJpZXMgYW5kIFRTQURDKS4gVGhlIG9ubHkgb3RoZXIgZGlm ZmVyZW5jZSBpcyB0aGF0IHRoZQo+ID4gYmluYXJ5IHUtYm9vdCBkb2Vzbid0IGhhdmUgRUZJIHN1 cHBvcnQsIHNvIEkgaGFkIHRvIGJvb3QgaW50byB0aGUKPiA+IEFSTTY0IHVuY29tcHJlc3NlZCBJ bWFnZSBpbnN0ZWFkIG9mIHZtbGludXouZWZpLCBidXQgdGhvc2Ugd2VyZSBib3RoCj4gPiB0YWtl biBmcm9tIHRoZSBzYW1lIGJ1aWxkLgo+ID4KPiA+IFdoYXQgSSdtIG9ic2VydmluZyBkdXJpbmcg dGhlIHNiYy1iZW5jaCBydW46Cj4gPiAgLSBJdCBzd2l0Y2hlcyB0aGUgY3B1ZnJlcSBnb3Zlcm5v ciBmcm9tIHNjaGVkdXRpbCB0byBwZXJmb3JtYW5jZQo+ID4gIC0gSXQgZ29lcyB0aHJvdWdoIGFs bCBDUFUgT1BQcyBpbiBkZXNjZW5kaW5nIGZyZXF1ZW5jeSBvcmRlcgo+ID4gIC0tLSBXaGlsZSBp dCBkb2VzIHRoYXQgd2hlbiBib290ZWQgdXNpbmcgbWFpbmxpbmUgdS1ib290ICsKPiA+IHZtbGlu dXouZWZpOiAiaGFyZHdhcmUgbGltaXRzIiBsaW5lIGluICJjcHVwb3dlciAtYyAwLDQKPiA+IGZy ZXF1ZW5jeS1pbmZvIiBjaGFuZ2VzIHdpdGggZWFjaCBPUFAgY2hhbmdlICh0aGUgbWF4IGZyZXF1 ZW5jeQo+ID4gZ2V0dGluZyByZWR1Y2VkIHNlcXVlbnRpYWxseSksIHRoZW4gaXQgcmVzZXRzIHRv IHRoZSBpbml0aWFsIGZ1bGwKPiA+IHJhbmdlLCBidXQgdGhlIGFjdHVhbCBmcmVxdWVuY3kgc3Rh eXMgc3R1Y2sgYXQgdGhlIGxvd2VzdCBwb3NzaWJsZQo+ID4gdmFsdWUKPiA+ICAtLS0gV2hpbGUg aXQgZG9lcyB0aGF0IHdoZW4gYm9vdGVkIHVzaW5nIGJpbmFyeSB1LWJvb3QgKyBJbWFnZToKPiA+ ICJoYXJkd2FyZSBsaW1pdHMiIGxpbmUgaW4gImNwdXBvd2VyIC1jIDAsNCBmcmVxdWVuY3ktaW5m byIgZG9lc24ndAo+ID4gY2hhbmdlLCBidXQgdGhlIGFjdHVhbCBmcmVxdWVuY3kgZ2V0cyByZWR1 Y2VkIHNlcXVlbnRpYWxseS4gVGhlbiBhZnRlcgo+ID4gdGhlIGl0ZXJhdGlvbiBvdmVyIGFsbCBP UFBzIGlzIGNvbXBsZXRlZCBpdCByZXR1cm5zIHRvIHRoZSBoaWdoZXN0Cj4gPiBwb3NzaWJsZSB2 YWx1ZSwgYW5kIGFkanVzdHMgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlcm1hbCB0aHJvdHRsaW5n IGFzCj4gPiB0aGUgYmVuY2htYXJrIHByb2dyZXNzZXMKPiAKPiBTbGlnaHQgY29ycmVjdGlvbjog aXQncyBub3QgdGhlICJoYXJkd2FyZSBsaW1pdHMiIGxpbmUsIGJ1dCByYXRoZXIKPiAiY3VycmVu dCBwb2xpY3kiLgo+IAo+IE5vdGUgdGhhdCBib290aW5nIG1haW5saW5lIHUtYm9vdCBpbiBub24t RUZJIG1vZGUgKHVzaW5nIHBsYWluIEltYWdlKQo+IGRvZXNuJ3QgY2hhbmdlIHRoZSByZXN1bHRz IGFib3ZlLgoKSSdtIGluIGEgc2ltaWxhciBib2F0LCB3aGlsZSB0cnlpbmcgdG8gbWFrZSBEU0kg cnVuIG9uIHRoZSByazM1NzYuCkFuZHkgZnJvbSBSb2NrY2hpcCB3YXMgYWJsZSB0byBtYWtlIGl0 IHdvcmsgImp1c3QiIGJ5IHVzaW5nIHZlbmRvci0KZmlybXdhcmUgLSB3aGlsZSB1c2luZyBtYWlu bGluZSB1LWJvb3QgKHdpdGggYm90aCBtYWlubGluZSBURi1BCm9yIHZlbmRvciBURi1BKSBwcm9k dWNlcyBqdXN0IGJsYWNrIG91dHB1dC4KCkkgdGhpbmsgd2hlbiBJIGRpZCB0aGUgbWFpbmxpbmUg dS1ib290IHRoaW5nIEkgdG9vayB0aGUgInZlbmRvciItY29kZQpmcm9tIHRoZSBhcm1iaWFuIHJr MzU3NiB2ZW5kb3ItdS1ib290IC4uLiBidXQgdGhhdCBhY3R1YWxseSBtYXkgZGlmZmVyCmZyb20g d2hhdCB0aGUgdmVuZG9ycyBwcm92aWRlZD8KCkJlY2F1c2UgYXQgbGVhc3QgbG9va2luZyBhdCB0 aGF0IGNvZGUgZGlkIG5vdCBzaG93IGFueSBjbG9jayBkaWZmZXJlbmNlcwp0byBtZS4KCgo+ID4g U28gaXQgc2VlbXMgdGhhdCBpdCdzIG5vdCByZWFsbHkgbGlua2VkIHRvIFNDTUkgY2xvY2tzIG9y IFBWVFBMTCBwZXIKPiA+IHNlLCBidXQgcmF0aGVyIHdoYXQgdGhlIGJpbmFyeSB1LWJvb3QgY29u ZmlndXJlcyBkaWZmZXJlbnRseSB2cy4KPiA+IG1haW5saW5lIGJlZm9yZSB0aGUga2VybmVsIHRh a2VzIG92ZXIsIG9yIHNvbWV0aGluZyBpbiBvdGhlciBmaXJtd2FyZQo+ID4gc2VydmljZXMgdGhh dCB0aGUgYmluYXJ5IHUtYm9vdCBwcm92aWRlcyAoPykKPiA+Cj4gPiBJJ20gd29uZGVyaW5nIGlm IHRoZXJlIGlzIGFueSBjbG9jayByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgaW4gdGhlCj4gPiBPUC1U RUU/IEkgZGlkbid0IGhhdmUgYW55IE9QLVRFRSBpbWFnZSBpbiBteSBtYWlubGluZSB1LWJvb3Qg YnVpbGRzCj4gPiAoZnJhbmtseSwgSSBkb24ndCBldmVuIGtub3cgd2hlcmUgdG8gZ3JhYiBvbmUp LCBidXQgdGhlIGJpbmFyeSB1LWJvb3QKPiA+IGZyb20gQXJtU29NIGFkdmVydGlzZXMgdGhlIGZv bGxvd2luZzoKPiA+Cj4gPiBJL1RDOiBPUC1URUUgdmVyc2lvbjogMy4xMy4wLTc5MS1nMTg1ZGMz YzkyICNoaXNwaW5nLmxpbiAoZ2NjIHZlcnNpb24KPiA+IDEwLjIuMSAyMDIwMTEwMyAoR05VIFRv b2xjaGFpbiBmb3IgdGhlIEEtcHJvZmlsZSBBcmNoaXRlY3R1cmUKPiA+IDEwLjItMjAyMC4xMSAo YXJtLTEwLjE2KSkpICMyIFR1ZSBBcHIgMTYgMTE6MDU6MjUgQ1NUIDIwMjQgYWFyY2g2NCwKPiA+ IGZ3dmVyOiB2MS4wMQo+IAo+IEZUUjogSSd2ZSB0cmllZCB0byBibHVudGx5IHdyYXAgcmszNTc2 X2JsMzJfdjEuMDUuYmluIGludG8gYW4gRUxGIGZpbGUKPiB1c2luZyB0aGUgZm9sbG93aW5nIGxp bmtlciBzY3JpcHQgYW5kIGZlZWQgaXQgYXMgJFRFRSB0byB0aGUgbWFpbmxpbmUKPiB1LWJvb3Qg YnVpbGQsIGJ1dCB0aGUgcmVzdWx0aW5nIHUtYm9vdC1yb2NrY2hpcC5iaW4gZ2V0cyBzdHVjayBh dCBib290Cj4gYWZ0ZXIgY2hlY2tpbmcgaGFzaGVzIG9mIEFURiBpbWFnZXMsIHNvIEknbSBzdGls bCBsb3N0IGFzIHRvIGhvdyBvbmUKPiBjYW4gY2hlY2sgaWYgdGhlIE9QLVRFRSBoYXMgYW55IGlu Zmx1ZW5jZSBvbiB0aGUgY3B1ZnJlcSBiZWhhdmlvci4KPiAKPiAtLS0KPiBFTlRSWShfYmluYXJ5 X3JrMzU3Nl9ibDMyX3YxXzA1X2Jpbl9zdGFydCk7Cj4gCj4gU0VDVElPTlMKPiB7Cj4gICAgICAg ICAuID0gMHgwODQwMDAwMDsKPiAgICAgICAgIC5kYXRhIDogewo+ICAgICAgICAgICAgICAgICAq KC5kYXRhKQo+ICAgICAgICAgfQo+IH0KPiAtLS0KPiAKPiAweDA4NDAwMDAwIGlzIHRoZSBhZGRy IGxpc3RlZCBmb3IgQkwzMiBpbiBSSzM1NzZUUlVTVC5pbmkgaW4gcmtiaW4uCj4gCj4gQmVzdCBy ZWdhcmRzLAo+IEFsZXhleQo+IAoKCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hp cEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtcm9ja2NoaXAK