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 9CE71D10F5D for ; Wed, 26 Nov 2025 14:39:59 +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:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID:Subject:Cc:To: From:Date:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:References:List-Owner; bh=1wpEcqQvSs4agP7ab+zfENxDWnK2o5/Lcicq0hSPEuk=; b=AYdTgnIksS5IDkU69/2ChKLi6V uwC2jqtqjInwiwJFErHw+viQAsvDTlm6qqGV5c4z6cNSasXPFwpqchEJbmMk1Wsjp4mKvS81PlC3b gTtg53wPt153k7OmIgZU6qfx0FEdrwSUldJa/ddNihCIgFU3d913FTFPleSJFajQ0ND0rXAWytxDo epb+h6vyWu32ekbjmx0ilImdhlttiwETK6ibw+lFzDVr3/5p2d4/fzlhC5K05E+Ni1JJ8kZbkIDZB Vjp5bn1zMGRzzVx8FQ+jmhXXzf5GsXlhxzj918lJEUP1EiXCzUqZgoDIb0Idm78NMbT12cGRBAA5s bpE7QnCw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vOGgV-0000000F7Zf-3NCX; Wed, 26 Nov 2025 14:39:55 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vOGgU-0000000F7ZA-2AiJ; Wed, 26 Nov 2025 14:39:54 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id CFD9B60147; Wed, 26 Nov 2025 14:39:53 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5AAF9C4CEF7; Wed, 26 Nov 2025 14:39:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764167993; bh=Zr1qnmu/85/P0pQgfng0K/iBwkDRdkdh/KBRgYo3Rf0=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=LuEu2g8ywuzBYGtj5vJ7lyA/1MQltBVzvnUMBXjUer1VBT1VTX98llQivPJ7THuaY Y1NmutF95LrFAoUH7JUl05Gr4LFR7R+P7ddzxUzDqKVdN2a5ujoX/zQD68HUkCiFK1 VPyO3pKrzpZvZc1704GoLRI5sKdR5mcAb2zqIKWGzrCPFcDd3CFE5cB9eEYIRUXNMQ 9ramDQaoG5s+IPrvPvF79osOwqmsJCso+++HDt7YnWG95yaFNW35wHaKcso/Wx8El9 dgCy4d6AXbsqLfxH0+JN4/9mm6nk08jkpobMscEXMsq7Jo3Z3lQD+ccQjcKA+lnMeF Pk5ygyPcpvbJg== Date: Wed, 26 Nov 2025 08:39:52 -0600 From: Bjorn Helgaas To: Anand Moon Cc: Shawn Lin , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Heiko Stuebner , "open list:PCIE DRIVER FOR ROCKCHIP" , "open list:PCIE DRIVER FOR ROCKCHIP" , "moderated list:ARM/Rockchip SoC support" , open list Subject: Re: [RFC v1 1/5] PCI: rockchip: Fix Link Control register offset and enable ASPM/CLKREQ Message-ID: <20251126143952.GA2825566@bhelgaas> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: 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 On Wed, Nov 26, 2025 at 04:03:37PM +0530, Anand Moon wrote: > On Thu, 20 Nov 2025 at 19:28, Anand Moon wrote: > > On Thu, 20 Nov 2025 at 09:14, Bjorn Helgaas wrote: > > > On Wed, Nov 19, 2025 at 07:49:06PM +0530, Anand Moon wrote: > > > > On Tue, 18 Nov 2025 at 23:20, Bjorn Helgaas wrote: > > > > > On Mon, Nov 17, 2025 at 11:40:09PM +0530, Anand Moon wrote: > > > > > > As per the RK3399 TRM (Part 2, 17.6.6.1.31), the Link Control register > > > > > > (RC_CONFIG_LC) resides at an offset of 0xd0 within the Root Complex (RC) > > > > > > configuration space, not at the offset of the PCI Express Capability List > > > > > > (0xc0). Following changes correct the register offset to use > > > > > > PCIE_RC_CONFIG_LC (0xd0) to configure link control. > > > > ... > > > > > > > > Don't do two things at once in the same patch. Fix the register > > > > > offset in one patch. Actually, as I mentioned at [1], there's a lot > > > > > of fixing to do there, and I'm not even going to consider other > > > > > changes until the #define mess is cleaned up. > > > > > > > > [1] https://lore.kernel.org/r/20251118005056.GA2541796@bhelgaas > > > > > > > > According to the RK3399 Technical Reference Manual (TRM), and pci_regs.h > > > > already includes the correct, pre-defined offsets for all PCI Express > > > > device types > > > > and their capabilities registers. To avoid overlapping register mappings, > > > > we should explicitly remove the addition of manual offsets within the code. > > > > > > > Here is the example. Is this the correct approach? > > > > > > > - status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_CR + > > > > PCI_EXP_LNKCTL); > > > > + status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LC); > > > > status |= (PCI_EXP_LNKCTL_LBMIE | PCI_EXP_LNKCTL_LABIE); > > > > - rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_CR + > > > > PCI_EXP_LNKCTL); > > > > + rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LC); > > > > > > No. The call should include PCI_EXP_LNKCTL because that's what we > > > grep for when we want to see where Link Control is updated. > > > > > > See my example from [1] above: > > > > > > rockchip_pcie_read(rockchip, ROCKCHIP_RP_PCIE_CAP + PCI_EXP_DEVCAP) > > > rockchip_pcie_read(rockchip, ROCKCHIP_RP_PCIE_CAP + PCI_EXP_LNKCTL) > > > > > > You should have a single #define for the offset of the PCIe > > > Capability, e.g., ROCKCHIP_RP_PCIE_CAP. Every access to registers in > > > that capability would use ROCKCHIP_RP_PCIE_CAP and the relevant > > > PCI_EXP_* offset, e.g., PCI_EXP_DEVCAP, PCI_EXP_DEVCTL, > > > PCI_EXP_DEVSTA, PCI_EXP_LNKCAP, PCI_EXP_LNKCTL, PCI_EXP_LNKSTA, etc. > > > > > I apologize for not fully understanding the issue earlier. I did not > > carefully review your email, > > which caused me to overlook the required changes. > > > > So, as per the TRM > > > > 17.6.4.5.1 PCI Express Capability List Register > > Propname:PCI Express Capability List Register > > Address:@0xc0 > > > > #define PCIE_EP_CONFIG_DID_VID (PCIE_EP_CONFIG_BASE + 0x00) > > #define PCIE_EP_CONFIG_LCS (PCIE_EP_CONFIG_BASE + 0xd0) > > #define PCIE_RC_CONFIG_RID_CCR (PCIE_RC_CONFIG_BASE + 0x08) > > #define PCIE_RC_CONFIG_CR (PCIE_RC_CONFIG_BASE + 0xc0) > > #define ROCKCHIP_RP_PCIE_CAP (PCIE_RC_CONFIG_BASE + 0xc0) > > /* Link Control and Status Register */ > > #define PCIE_RC_CONFIG_LC (ROCKCHIP_RP_PCIE_CAP + 0xd0) > > /* Device Control */ > > #define PCIE_RC_CONFIG_DC (ROCKCHIP_RP_PCIE_CAP + 0xc8) > > /* Slot Capability Register */ > > #define PCIE_RC_CONFIG_SC (ROCKCHIP_RP_PCIE_CAP + 0xd4) > > /* Link Control 2 Register */ > > #define PCIE_RC_CONFIG_LC2 (ROCKCHIP_RP_PCIE_CAP + 0xf0) > > /* Linkwidth Control Register */ > > #define PCIE_RC_CONFIG_LWC (ROCKCHIP_RP_PCIE_CAP + 0x50) > > > > And then use these like this. > > > > status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LC + PCI_EXP_LNKCTL); > > status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_DC + PCI_EXP_DEVCTL); > > status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_SC + PCI_EXP_DEVCAP); > > status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LC2 + PCI_EXP_LNKCTL2); > > status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LWC + PCI_EXP_LNKCTL); > > > > If you agree that this approach correctly resolves the issue, > > I would prefer to confirm now to prevent further iterative changes > > that might confuse. > > > I was making some changes to the system when my device stopped working, > The lspci utility started crashing with a segmentation fault. > > $ sudo lspci -vvv > [sudo] password for alarm: > Segmentation fault sudo lspci -vvv > > # dmesg logs > > [ 21.225526] rockchip-pm-domain > ff310000.power-management:power-controller: sync_state() pending due > to ff660000.video-codec > [ 34.935331] Internal error: synchronous external abort: > 0000000096000210 [#1] SMP > [ 34.936027] Modules linked in: 8021q garp mrp stp llc af_alg > brcmfmac_wcc snd_soc_hdmi_codec hantro_vpu dw_hdmi_i2s_audio > dw_hdmi_cec rockchip_rga hci_uart v4l2_vp9 rockchipdrm brcmfmac > brcmutil btqca dw_hdmi_qp snd_soc_simple_card nvme v4l2_h264 > snd_soc_audio_graph_card analogix_dp videobuf2_dma_sg v4l2_jpeg > snd_soc_es8316 btbcm snd_soc_simple_card_utils dw_mipi_dsi nvme_core > snd_soc_spdif_tx snd_soc_rockchip_i2s videobuf2_dma_contig > v4l2_mem2mem drm_dp_aux_bus bluetooth snd_soc_core dw_hdmi > videobuf2_memops drm_display_helper panfrost videobuf2_v4l2 > snd_compress dwmac_rk videodev ecdh_generic cec snd_pcm_dmaengine > drm_shmem_helper ax88179_178a stmmac_platform drm_client_lib snd_pcm > ecc gpu_sched drm_dma_helper videobuf2_common usbnet rockchip_saradc > stmmac drm_kms_helper pwrseq_core snd_timer reset_gpio > phy_rockchip_pcie mc industrialio_triggered_buffer snd rockchip_dfi > rockchip_thermal coresight_cpu_debug soundcore rtc_rk808 kfifo_buf > pcs_xpcs coresight pcie_rockchip_host sha256 cfg80211 rfkill drm fuse > backlight > [ 34.936326] dm_mod ipv6 > [ 34.944344] CPU: 1 UID: 0 PID: 796 Comm: lspci Tainted: G M > 6.18.0-rc7-dirty #1 PREEMPT > [ 34.945187] Tainted: [M]=MACHINE_CHECK > [ 34.945518] Hardware name: Radxa ROCK Pi 4B+ (DT) > [ 34.945932] pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--) > [ 34.946545] pc : rockchip_pcie_rd_conf+0x178/0x27c [pcie_rockchip_host] > [ 34.947138] lr : rockchip_pcie_rd_conf+0x170/0x27c [pcie_rockchip_host] > [ 34.947722] sp : ffff8000848b3bc0 > [ 34.948015] x29: ffff8000848b3bc0 x28: ffff0000013e30c0 x27: 0000000000000000 > [ 34.948652] x26: 000000000000000f x25: ffff0000013e30c0 x24: 0000000000000040 > [ 34.949287] x23: 0000000000000040 x22: ffff8000848b3c44 x21: ffff8000848b3bf4 > [ 34.949920] x20: ffff800082100000 x19: 0000000000000004 x18: 0000000000000000 > [ 34.950555] x17: 0000000000000000 x16: ffffc37c34322808 x15: 0000000000000000 > [ 34.951188] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 > [ 34.951821] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 > [ 34.952454] x8 : 0000000000000000 x7 : ffff0000084093c0 x6 : ffff000009cd7000 > [ 34.953087] x5 : ffff000009cd7800 x4 : ffff800085000000 x3 : 0000000000c00008 > [ 34.953722] x2 : 000000000080000a x1 : ffff800085c00008 x0 : ffff800085c0000c > [ 34.954356] Call trace: > [ 34.954576] rockchip_pcie_rd_conf+0x178/0x27c [pcie_rockchip_host] (P) > [ 34.955164] pci_user_read_config_dword+0x7c/0x120 > [ 34.955598] pci_read_config+0xe4/0x2a0 > [ 34.955944] sysfs_kf_bin_read+0x7c/0xbc > [ 34.956298] kernfs_fop_read_iter+0xb0/0x1bc > [ 34.956679] vfs_read+0x230/0x320 > [ 34.956981] __arm64_sys_pread64+0xac/0xd4 > [ 34.957350] invoke_syscall+0x48/0x10c > [ 34.957691] el0_svc_common.constprop.0+0x40/0xe0 > [ 34.958113] do_el0_svc+0x1c/0x28 > [ 34.958414] el0_svc+0x34/0xec > [ 34.958694] el0t_64_sync_handler+0xa0/0xe4 > [ 34.959070] el0t_64_sync+0x198/0x19c > [ 34.959405] Code: 52800141 940000ae 7100127f 54fff801 (b9400294) > [ 34.959940] ---[ end trace 0000000000000000 ]--- > [ 34.960349] note: lspci[796] exited with irqs disabled > [ 34.960879] note: lspci[796] exited with preempt_count 1 > > Either I am doing something wrong, or it's broken; I am not getting > this to work. > > Upon further investigation, the issue was narrowed down to a > specific modification that I made locally, > > According to section 17.6.6.1.32 of the manual, the Power Limit > Value and Power Limit Scale fields are part of the Slot Capability > Register, not the Device Capability Register. > > This assumption led to the segmentation fault because the code was > attempting to access invalid memory addresses. > > Do you think these are valid changes? Because this change caused a > freeze on the NVMe device. I'm not surprised that there might be issues related to registers in the PCIe Capability. I'm actually surprised that this driver works at all, given the incredible mess. So I'm not going to bother trying to fix this piecemeal as with the patch below. Every single access to DEVCAP/DEVCTL/DEVSTA, SLTCAP/SLTCTL/SLTSTA, etc needs to be made rational. There's a single base address that works for all of them because the Rockchip register layout matches the PCIe Capability layout. I've already outlined in detail what needs to be done. I'll try to find time to actually implement this, but it probably won't be for at least a few days. > $ git diff drivers/pci/controller/pcie-rockchip-host.c > diff --git a/drivers/pci/controller/pcie-rockchip-host.c > b/drivers/pci/controller/pcie-rockchip-host.c > index ee1822ca01db..743a04e36a1c 100644 > --- a/drivers/pci/controller/pcie-rockchip-host.c > +++ b/drivers/pci/controller/pcie-rockchip-host.c > @@ -270,10 +270,10 @@ static void rockchip_pcie_set_power_limit(struct > rockchip_pcie *rockchip) > power = power / 10; > } > > - status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_CR + > PCI_EXP_DEVCAP); > + status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_CR + > PCI_EXP_SLTCAP); > status |= FIELD_PREP(PCI_EXP_DEVCAP_PWR_VAL, power); > status |= FIELD_PREP(PCI_EXP_DEVCAP_PWR_SCL, scale); > - rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_CR + > PCI_EXP_DEVCAP); > + rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_CR + > PCI_EXP_SLTCAP); > } > > Thanks > -Anand 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 D7FE6D10F5D for ; Wed, 26 Nov 2025 14:40:05 +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:MIME-Version:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:References: List-Owner; bh=TzoZgEh8J0tD6y9oDRQK/t8M0IDc2ZNwYksxWVA9xg8=; b=blfDznnw5jKBMs cuvIst3NxZQButqekCCoNFlyx83ccLn2z0AxyKnwyIiUi+ZdT6CVYz9ZdY9QQNPcPaVVNHLZr9Z9n 87RFEQBm72H1IRBcA/cuw00HbR60blOIMA7Beg6TFgJYh0dO3sPc7kurNytf2MluiNBLofz6gGrly 65hvIQJfuutsJdbHdE6Ar33anhni3eRRb+Za5pD1pMZuT1e8uLKsEJlOw7mDt21rJQbB2x75iOGUs 8jsLUGigGWvU1Hl4LYl3j4aGS0OCqiEvdKd8FmX5PBOx608chigmwpqE2E9z6dJeBPDWuXaM1uvc2 57LAM1gqDIJUHO8GSMpw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vOGgW-0000000F7Zn-0YBS; Wed, 26 Nov 2025 14:39:56 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vOGgU-0000000F7ZA-2AiJ; Wed, 26 Nov 2025 14:39:54 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id CFD9B60147; Wed, 26 Nov 2025 14:39:53 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5AAF9C4CEF7; Wed, 26 Nov 2025 14:39:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764167993; bh=Zr1qnmu/85/P0pQgfng0K/iBwkDRdkdh/KBRgYo3Rf0=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=LuEu2g8ywuzBYGtj5vJ7lyA/1MQltBVzvnUMBXjUer1VBT1VTX98llQivPJ7THuaY Y1NmutF95LrFAoUH7JUl05Gr4LFR7R+P7ddzxUzDqKVdN2a5ujoX/zQD68HUkCiFK1 VPyO3pKrzpZvZc1704GoLRI5sKdR5mcAb2zqIKWGzrCPFcDd3CFE5cB9eEYIRUXNMQ 9ramDQaoG5s+IPrvPvF79osOwqmsJCso+++HDt7YnWG95yaFNW35wHaKcso/Wx8El9 dgCy4d6AXbsqLfxH0+JN4/9mm6nk08jkpobMscEXMsq7Jo3Z3lQD+ccQjcKA+lnMeF Pk5ygyPcpvbJg== Date: Wed, 26 Nov 2025 08:39:52 -0600 From: Bjorn Helgaas To: Anand Moon Cc: Shawn Lin , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Heiko Stuebner , "open list:PCIE DRIVER FOR ROCKCHIP" , "open list:PCIE DRIVER FOR ROCKCHIP" , "moderated list:ARM/Rockchip SoC support" , open list Subject: Re: [RFC v1 1/5] PCI: rockchip: Fix Link Control register offset and enable ASPM/CLKREQ Message-ID: <20251126143952.GA2825566@bhelgaas> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: 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 T24gV2VkLCBOb3YgMjYsIDIwMjUgYXQgMDQ6MDM6MzdQTSArMDUzMCwgQW5hbmQgTW9vbiB3cm90 ZToKPiBPbiBUaHUsIDIwIE5vdiAyMDI1IGF0IDE5OjI4LCBBbmFuZCBNb29uIDxsaW51eC5hbW9v bkBnbWFpbC5jb20+IHdyb3RlOgo+ID4gT24gVGh1LCAyMCBOb3YgMjAyNSBhdCAwOToxNCwgQmpv cm4gSGVsZ2FhcyA8aGVsZ2Fhc0BrZXJuZWwub3JnPiB3cm90ZToKPiA+ID4gT24gV2VkLCBOb3Yg MTksIDIwMjUgYXQgMDc6NDk6MDZQTSArMDUzMCwgQW5hbmQgTW9vbiB3cm90ZToKPiA+ID4gPiBP biBUdWUsIDE4IE5vdiAyMDI1IGF0IDIzOjIwLCBCam9ybiBIZWxnYWFzIDxoZWxnYWFzQGtlcm5l bC5vcmc+IHdyb3RlOgo+ID4gPiA+ID4gT24gTW9uLCBOb3YgMTcsIDIwMjUgYXQgMTE6NDA6MDlQ TSArMDUzMCwgQW5hbmQgTW9vbiB3cm90ZToKPiA+ID4gPiA+ID4gQXMgcGVyIHRoZSBSSzMzOTkg VFJNIChQYXJ0IDIsIDE3LjYuNi4xLjMxKSwgdGhlIExpbmsgQ29udHJvbCByZWdpc3Rlcgo+ID4g PiA+ID4gPiAoUkNfQ09ORklHX0xDKSByZXNpZGVzIGF0IGFuIG9mZnNldCBvZiAweGQwIHdpdGhp biB0aGUgUm9vdCBDb21wbGV4IChSQykKPiA+ID4gPiA+ID4gY29uZmlndXJhdGlvbiBzcGFjZSwg bm90IGF0IHRoZSBvZmZzZXQgb2YgdGhlIFBDSSBFeHByZXNzIENhcGFiaWxpdHkgTGlzdAo+ID4g PiA+ID4gPiAoMHhjMCkuIEZvbGxvd2luZyBjaGFuZ2VzIGNvcnJlY3QgdGhlIHJlZ2lzdGVyIG9m ZnNldCB0byB1c2UKPiA+ID4gPiA+ID4gUENJRV9SQ19DT05GSUdfTEMgKDB4ZDApIHRvIGNvbmZp Z3VyZSBsaW5rIGNvbnRyb2wuCj4gPiA+ID4gLi4uCj4gPiA+Cj4gPiA+ID4gPiBEb24ndCBkbyB0 d28gdGhpbmdzIGF0IG9uY2UgaW4gdGhlIHNhbWUgcGF0Y2guICBGaXggdGhlIHJlZ2lzdGVyCj4g PiA+ID4gPiBvZmZzZXQgaW4gb25lIHBhdGNoLiAgQWN0dWFsbHksIGFzIEkgbWVudGlvbmVkIGF0 IFsxXSwgdGhlcmUncyBhIGxvdAo+ID4gPiA+ID4gb2YgZml4aW5nIHRvIGRvIHRoZXJlLCBhbmQg SSdtIG5vdCBldmVuIGdvaW5nIHRvIGNvbnNpZGVyIG90aGVyCj4gPiA+ID4gPiBjaGFuZ2VzIHVu dGlsIHRoZSAjZGVmaW5lIG1lc3MgaXMgY2xlYW5lZCB1cC4KPiA+ID4KPiA+ID4gPiA+IFsxXSBo dHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjUxMTE4MDA1MDU2LkdBMjU0MTc5NkBiaGVsZ2Fh cwo+ID4gPiA+Cj4gPiA+ID4gQWNjb3JkaW5nIHRvIHRoZSBSSzMzOTkgVGVjaG5pY2FsIFJlZmVy ZW5jZSBNYW51YWwgKFRSTSksIGFuZCBwY2lfcmVncy5oCj4gPiA+ID4gYWxyZWFkeSBpbmNsdWRl cyB0aGUgY29ycmVjdCwgcHJlLWRlZmluZWQgb2Zmc2V0cyBmb3IgYWxsIFBDSSBFeHByZXNzCj4g PiA+ID4gZGV2aWNlIHR5cGVzCj4gPiA+ID4gYW5kIHRoZWlyIGNhcGFiaWxpdGllcyByZWdpc3Rl cnMuIFRvIGF2b2lkIG92ZXJsYXBwaW5nIHJlZ2lzdGVyIG1hcHBpbmdzLAo+ID4gPiA+IHdlIHNo b3VsZCBleHBsaWNpdGx5IHJlbW92ZSB0aGUgYWRkaXRpb24gb2YgbWFudWFsIG9mZnNldHMgd2l0 aGluIHRoZSBjb2RlLgo+ID4gPgo+ID4gPiA+IEhlcmUgaXMgdGhlIGV4YW1wbGUuIElzIHRoaXMg dGhlIGNvcnJlY3QgYXBwcm9hY2g/Cj4gPiA+Cj4gPiA+ID4gLSAgICAgICBzdGF0dXMgPSByb2Nr Y2hpcF9wY2llX3JlYWQocm9ja2NoaXAsIFBDSUVfUkNfQ09ORklHX0NSICsKPiA+ID4gPiBQQ0lf RVhQX0xOS0NUTCk7Cj4gPiA+ID4gKyAgICAgICBzdGF0dXMgPSByb2NrY2hpcF9wY2llX3JlYWQo cm9ja2NoaXAsIFBDSUVfUkNfQ09ORklHX0xDKTsKPiA+ID4gPiAgICAgICAgIHN0YXR1cyB8PSAo UENJX0VYUF9MTktDVExfTEJNSUUgfCBQQ0lfRVhQX0xOS0NUTF9MQUJJRSk7Cj4gPiA+ID4gLSAg ICAgICByb2NrY2hpcF9wY2llX3dyaXRlKHJvY2tjaGlwLCBzdGF0dXMsIFBDSUVfUkNfQ09ORklH X0NSICsKPiA+ID4gPiBQQ0lfRVhQX0xOS0NUTCk7Cj4gPiA+ID4gKyAgICAgICByb2NrY2hpcF9w Y2llX3dyaXRlKHJvY2tjaGlwLCBzdGF0dXMsIFBDSUVfUkNfQ09ORklHX0xDKTsKPiA+ID4KPiA+ ID4gTm8uICBUaGUgY2FsbCBzaG91bGQgaW5jbHVkZSBQQ0lfRVhQX0xOS0NUTCBiZWNhdXNlIHRo YXQncyB3aGF0IHdlCj4gPiA+IGdyZXAgZm9yIHdoZW4gd2Ugd2FudCB0byBzZWUgd2hlcmUgTGlu ayBDb250cm9sIGlzIHVwZGF0ZWQuCj4gPiA+Cj4gPiA+IFNlZSBteSBleGFtcGxlIGZyb20gWzFd IGFib3ZlOgo+ID4gPgo+ID4gPiAgIHJvY2tjaGlwX3BjaWVfcmVhZChyb2NrY2hpcCwgUk9DS0NI SVBfUlBfUENJRV9DQVAgKyBQQ0lfRVhQX0RFVkNBUCkKPiA+ID4gICByb2NrY2hpcF9wY2llX3Jl YWQocm9ja2NoaXAsIFJPQ0tDSElQX1JQX1BDSUVfQ0FQICsgUENJX0VYUF9MTktDVEwpCj4gPiA+ Cj4gPiA+IFlvdSBzaG91bGQgaGF2ZSBhIHNpbmdsZSAjZGVmaW5lIGZvciB0aGUgb2Zmc2V0IG9m IHRoZSBQQ0llCj4gPiA+IENhcGFiaWxpdHksIGUuZy4sIFJPQ0tDSElQX1JQX1BDSUVfQ0FQLiAg RXZlcnkgYWNjZXNzIHRvIHJlZ2lzdGVycyBpbgo+ID4gPiB0aGF0IGNhcGFiaWxpdHkgd291bGQg dXNlIFJPQ0tDSElQX1JQX1BDSUVfQ0FQIGFuZCB0aGUgcmVsZXZhbnQKPiA+ID4gUENJX0VYUF8q IG9mZnNldCwgZS5nLiwgUENJX0VYUF9ERVZDQVAsIFBDSV9FWFBfREVWQ1RMLAo+ID4gPiBQQ0lf RVhQX0RFVlNUQSwgUENJX0VYUF9MTktDQVAsIFBDSV9FWFBfTE5LQ1RMLCBQQ0lfRVhQX0xOS1NU QSwgZXRjLgo+ID4gPgo+ID4gSSBhcG9sb2dpemUgZm9yIG5vdCBmdWxseSB1bmRlcnN0YW5kaW5n IHRoZSBpc3N1ZSBlYXJsaWVyLiBJIGRpZCBub3QKPiA+IGNhcmVmdWxseSByZXZpZXcgeW91ciBl bWFpbCwKPiA+ICB3aGljaCBjYXVzZWQgbWUgdG8gb3Zlcmxvb2sgdGhlIHJlcXVpcmVkIGNoYW5n ZXMuCj4gPgo+ID4gU28sIGFzIHBlciB0aGUgVFJNCj4gPgo+ID4gMTcuNi40LjUuMSBQQ0kgRXhw cmVzcyBDYXBhYmlsaXR5IExpc3QgUmVnaXN0ZXIKPiA+IFByb3BuYW1l77yaUENJIEV4cHJlc3Mg Q2FwYWJpbGl0eSBMaXN0IFJlZ2lzdGVyCj4gPiBBZGRyZXNz77yaQDB4YzAKPiA+Cj4gPiAjZGVm aW5lIFBDSUVfRVBfQ09ORklHX0RJRF9WSUQgICAgICAgICAgKFBDSUVfRVBfQ09ORklHX0JBU0Ug KyAweDAwKQo+ID4gI2RlZmluZSBQQ0lFX0VQX0NPTkZJR19MQ1MgICAgICAgICAgICAgIChQQ0lF X0VQX0NPTkZJR19CQVNFICsgMHhkMCkKPiA+ICNkZWZpbmUgUENJRV9SQ19DT05GSUdfUklEX0ND UiAgICAgICAgICAoUENJRV9SQ19DT05GSUdfQkFTRSArIDB4MDgpCj4gPiAjZGVmaW5lIFBDSUVf UkNfQ09ORklHX0NSICAgICAgICAgICAgICAgKFBDSUVfUkNfQ09ORklHX0JBU0UgKyAweGMwKQo+ ID4gI2RlZmluZSBST0NLQ0hJUF9SUF9QQ0lFX0NBUCAgICAgICAgICAgIChQQ0lFX1JDX0NPTkZJ R19CQVNFICsgMHhjMCkKPiA+IC8qIExpbmsgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICov Cj4gPiAjZGVmaW5lIFBDSUVfUkNfQ09ORklHX0xDICAgICAgICAgICAgICAgKFJPQ0tDSElQX1JQ X1BDSUVfQ0FQICsgMHhkMCkKPiA+IC8qIERldmljZSBDb250cm9sICovCj4gPiAjZGVmaW5lIFBD SUVfUkNfQ09ORklHX0RDICAgICAgICAgICAgICAgKFJPQ0tDSElQX1JQX1BDSUVfQ0FQICsgMHhj OCkKPiA+IC8qIFNsb3QgQ2FwYWJpbGl0eSBSZWdpc3RlciAqLwo+ID4gI2RlZmluZSBQQ0lFX1JD X0NPTkZJR19TQyAgICAgICAgICAgICAgIChST0NLQ0hJUF9SUF9QQ0lFX0NBUCArIDB4ZDQpCj4g PiAvKiBMaW5rIENvbnRyb2wgMiBSZWdpc3RlciAqLwo+ID4gI2RlZmluZSBQQ0lFX1JDX0NPTkZJ R19MQzIgICAgICAgICAgICAgIChST0NLQ0hJUF9SUF9QQ0lFX0NBUCArIDB4ZjApCj4gPiAvKiBM aW5rd2lkdGggQ29udHJvbCBSZWdpc3RlciAqLwo+ID4gI2RlZmluZSBQQ0lFX1JDX0NPTkZJR19M V0MgICAgICAgICAgICAgIChST0NLQ0hJUF9SUF9QQ0lFX0NBUCArIDB4NTApCj4gPgo+ID4gQW5k IHRoZW4gdXNlIHRoZXNlIGxpa2UgdGhpcy4KPiA+Cj4gPiBzdGF0dXMgPSByb2NrY2hpcF9wY2ll X3JlYWQocm9ja2NoaXAsIFBDSUVfUkNfQ09ORklHX0xDICsgUENJX0VYUF9MTktDVEwpOwo+ID4g c3RhdHVzID0gcm9ja2NoaXBfcGNpZV9yZWFkKHJvY2tjaGlwLCBQQ0lFX1JDX0NPTkZJR19EQyAr IFBDSV9FWFBfREVWQ1RMKTsKPiA+IHN0YXR1cyA9IHJvY2tjaGlwX3BjaWVfcmVhZChyb2NrY2hp cCwgUENJRV9SQ19DT05GSUdfU0MgKyBQQ0lfRVhQX0RFVkNBUCk7Cj4gPiBzdGF0dXMgPSByb2Nr Y2hpcF9wY2llX3JlYWQocm9ja2NoaXAsIFBDSUVfUkNfQ09ORklHX0xDMiArIFBDSV9FWFBfTE5L Q1RMMik7Cj4gPiBzdGF0dXMgPSByb2NrY2hpcF9wY2llX3JlYWQocm9ja2NoaXAsIFBDSUVfUkNf Q09ORklHX0xXQyArIFBDSV9FWFBfTE5LQ1RMKTsKPiA+Cj4gPiBJZiB5b3UgYWdyZWUgdGhhdCB0 aGlzIGFwcHJvYWNoIGNvcnJlY3RseSByZXNvbHZlcyB0aGUgaXNzdWUsCj4gPiBJIHdvdWxkIHBy ZWZlciB0byBjb25maXJtIG5vdyB0byBwcmV2ZW50IGZ1cnRoZXIgaXRlcmF0aXZlIGNoYW5nZXMK PiA+IHRoYXQgbWlnaHQgY29uZnVzZS4KPiA+Cj4gSSB3YXMgbWFraW5nIHNvbWUgY2hhbmdlcyB0 byB0aGUgc3lzdGVtIHdoZW4gbXkgZGV2aWNlIHN0b3BwZWQgd29ya2luZywKPiBUaGUgbHNwY2kg dXRpbGl0eSBzdGFydGVkIGNyYXNoaW5nIHdpdGggYSBzZWdtZW50YXRpb24gZmF1bHQuCj4gCj4g JCBzdWRvIGxzcGNpIC12dnYKPiBbc3Vkb10gcGFzc3dvcmQgZm9yIGFsYXJtOgo+IFNlZ21lbnRh dGlvbiBmYXVsdCAgICAgICAgIHN1ZG8gbHNwY2kgLXZ2dgo+IAo+ICMgZG1lc2cgbG9ncwo+IAo+ IFsgICAyMS4yMjU1MjZdIHJvY2tjaGlwLXBtLWRvbWFpbgo+IGZmMzEwMDAwLnBvd2VyLW1hbmFn ZW1lbnQ6cG93ZXItY29udHJvbGxlcjogc3luY19zdGF0ZSgpIHBlbmRpbmcgZHVlCj4gdG8gZmY2 NjAwMDAudmlkZW8tY29kZWMKPiBbICAgMzQuOTM1MzMxXSBJbnRlcm5hbCBlcnJvcjogc3luY2hy b25vdXMgZXh0ZXJuYWwgYWJvcnQ6Cj4gMDAwMDAwMDA5NjAwMDIxMCBbIzFdICBTTVAKPiBbICAg MzQuOTM2MDI3XSBNb2R1bGVzIGxpbmtlZCBpbjogODAyMXEgZ2FycCBtcnAgc3RwIGxsYyBhZl9h bGcKPiBicmNtZm1hY193Y2Mgc25kX3NvY19oZG1pX2NvZGVjIGhhbnRyb192cHUgZHdfaGRtaV9p MnNfYXVkaW8KPiBkd19oZG1pX2NlYyByb2NrY2hpcF9yZ2EgaGNpX3VhcnQgdjRsMl92cDkgcm9j a2NoaXBkcm0gYnJjbWZtYWMKPiBicmNtdXRpbCBidHFjYSBkd19oZG1pX3FwIHNuZF9zb2Nfc2lt cGxlX2NhcmQgbnZtZSB2NGwyX2gyNjQKPiBzbmRfc29jX2F1ZGlvX2dyYXBoX2NhcmQgYW5hbG9n aXhfZHAgdmlkZW9idWYyX2RtYV9zZyB2NGwyX2pwZWcKPiBzbmRfc29jX2VzODMxNiBidGJjbSBz bmRfc29jX3NpbXBsZV9jYXJkX3V0aWxzIGR3X21pcGlfZHNpIG52bWVfY29yZQo+IHNuZF9zb2Nf c3BkaWZfdHggc25kX3NvY19yb2NrY2hpcF9pMnMgdmlkZW9idWYyX2RtYV9jb250aWcKPiB2NGwy X21lbTJtZW0gZHJtX2RwX2F1eF9idXMgYmx1ZXRvb3RoIHNuZF9zb2NfY29yZSBkd19oZG1pCj4g dmlkZW9idWYyX21lbW9wcyBkcm1fZGlzcGxheV9oZWxwZXIgcGFuZnJvc3QgdmlkZW9idWYyX3Y0 bDIKPiBzbmRfY29tcHJlc3MgZHdtYWNfcmsgdmlkZW9kZXYgZWNkaF9nZW5lcmljIGNlYyBzbmRf cGNtX2RtYWVuZ2luZQo+IGRybV9zaG1lbV9oZWxwZXIgYXg4ODE3OV8xNzhhIHN0bW1hY19wbGF0 Zm9ybSBkcm1fY2xpZW50X2xpYiBzbmRfcGNtCj4gZWNjIGdwdV9zY2hlZCBkcm1fZG1hX2hlbHBl ciB2aWRlb2J1ZjJfY29tbW9uIHVzYm5ldCByb2NrY2hpcF9zYXJhZGMKPiBzdG1tYWMgZHJtX2tt c19oZWxwZXIgcHdyc2VxX2NvcmUgc25kX3RpbWVyIHJlc2V0X2dwaW8KPiBwaHlfcm9ja2NoaXBf cGNpZSBtYyBpbmR1c3RyaWFsaW9fdHJpZ2dlcmVkX2J1ZmZlciBzbmQgcm9ja2NoaXBfZGZpCj4g cm9ja2NoaXBfdGhlcm1hbCBjb3Jlc2lnaHRfY3B1X2RlYnVnIHNvdW5kY29yZSBydGNfcms4MDgg a2ZpZm9fYnVmCj4gcGNzX3hwY3MgY29yZXNpZ2h0IHBjaWVfcm9ja2NoaXBfaG9zdCBzaGEyNTYg Y2ZnODAyMTEgcmZraWxsIGRybSBmdXNlCj4gYmFja2xpZ2h0Cj4gWyAgIDM0LjkzNjMyNl0gIGRt X21vZCBpcHY2Cj4gWyAgIDM0Ljk0NDM0NF0gQ1BVOiAxIFVJRDogMCBQSUQ6IDc5NiBDb21tOiBs c3BjaSBUYWludGVkOiBHICAgTQo+ICAgICAgICAgIDYuMTguMC1yYzctZGlydHkgIzEgUFJFRU1Q VAo+IFsgICAzNC45NDUxODddIFRhaW50ZWQ6IFtNXT1NQUNISU5FX0NIRUNLCj4gWyAgIDM0Ljk0 NTUxOF0gSGFyZHdhcmUgbmFtZTogUmFkeGEgUk9DSyBQaSA0QisgKERUKQo+IFsgICAzNC45NDU5 MzJdIHBzdGF0ZTogNjAwMDAwYzUgKG5aQ3YgZGFJRiAtUEFOIC1VQU8gLVRDTyAtRElUIC1TU0JT IEJUWVBFPS0tKQo+IFsgICAzNC45NDY1NDVdIHBjIDogcm9ja2NoaXBfcGNpZV9yZF9jb25mKzB4 MTc4LzB4MjdjIFtwY2llX3JvY2tjaGlwX2hvc3RdCj4gWyAgIDM0Ljk0NzEzOF0gbHIgOiByb2Nr Y2hpcF9wY2llX3JkX2NvbmYrMHgxNzAvMHgyN2MgW3BjaWVfcm9ja2NoaXBfaG9zdF0KPiBbICAg MzQuOTQ3NzIyXSBzcCA6IGZmZmY4MDAwODQ4YjNiYzAKPiBbICAgMzQuOTQ4MDE1XSB4Mjk6IGZm ZmY4MDAwODQ4YjNiYzAgeDI4OiBmZmZmMDAwMDAxM2UzMGMwIHgyNzogMDAwMDAwMDAwMDAwMDAw MAo+IFsgICAzNC45NDg2NTJdIHgyNjogMDAwMDAwMDAwMDAwMDAwZiB4MjU6IGZmZmYwMDAwMDEz ZTMwYzAgeDI0OiAwMDAwMDAwMDAwMDAwMDQwCj4gWyAgIDM0Ljk0OTI4N10geDIzOiAwMDAwMDAw MDAwMDAwMDQwIHgyMjogZmZmZjgwMDA4NDhiM2M0NCB4MjE6IGZmZmY4MDAwODQ4YjNiZjQKPiBb ICAgMzQuOTQ5OTIwXSB4MjA6IGZmZmY4MDAwODIxMDAwMDAgeDE5OiAwMDAwMDAwMDAwMDAwMDA0 IHgxODogMDAwMDAwMDAwMDAwMDAwMAo+IFsgICAzNC45NTA1NTVdIHgxNzogMDAwMDAwMDAwMDAw MDAwMCB4MTY6IGZmZmZjMzdjMzQzMjI4MDggeDE1OiAwMDAwMDAwMDAwMDAwMDAwCj4gWyAgIDM0 Ljk1MTE4OF0geDE0OiAwMDAwMDAwMDAwMDAwMDAwIHgxMzogMDAwMDAwMDAwMDAwMDAwMCB4MTI6 IDAwMDAwMDAwMDAwMDAwMDAKPiBbICAgMzQuOTUxODIxXSB4MTE6IDAwMDAwMDAwMDAwMDAwMDAg eDEwOiAwMDAwMDAwMDAwMDAwMDAwIHg5IDogMDAwMDAwMDAwMDAwMDAwMAo+IFsgICAzNC45NTI0 NTRdIHg4IDogMDAwMDAwMDAwMDAwMDAwMCB4NyA6IGZmZmYwMDAwMDg0MDkzYzAgeDYgOiBmZmZm MDAwMDA5Y2Q3MDAwCj4gWyAgIDM0Ljk1MzA4N10geDUgOiBmZmZmMDAwMDA5Y2Q3ODAwIHg0IDog ZmZmZjgwMDA4NTAwMDAwMCB4MyA6IDAwMDAwMDAwMDBjMDAwMDgKPiBbICAgMzQuOTUzNzIyXSB4 MiA6IDAwMDAwMDAwMDA4MDAwMGEgeDEgOiBmZmZmODAwMDg1YzAwMDA4IHgwIDogZmZmZjgwMDA4 NWMwMDAwYwo+IFsgICAzNC45NTQzNTZdIENhbGwgdHJhY2U6Cj4gWyAgIDM0Ljk1NDU3Nl0gIHJv Y2tjaGlwX3BjaWVfcmRfY29uZisweDE3OC8weDI3YyBbcGNpZV9yb2NrY2hpcF9ob3N0XSAoUCkK PiBbICAgMzQuOTU1MTY0XSAgcGNpX3VzZXJfcmVhZF9jb25maWdfZHdvcmQrMHg3Yy8weDEyMAo+ IFsgICAzNC45NTU1OThdICBwY2lfcmVhZF9jb25maWcrMHhlNC8weDJhMAo+IFsgICAzNC45NTU5 NDRdICBzeXNmc19rZl9iaW5fcmVhZCsweDdjLzB4YmMKPiBbICAgMzQuOTU2Mjk4XSAga2VybmZz X2ZvcF9yZWFkX2l0ZXIrMHhiMC8weDFiYwo+IFsgICAzNC45NTY2NzldICB2ZnNfcmVhZCsweDIz MC8weDMyMAo+IFsgICAzNC45NTY5ODFdICBfX2FybTY0X3N5c19wcmVhZDY0KzB4YWMvMHhkNAo+ IFsgICAzNC45NTczNTBdICBpbnZva2Vfc3lzY2FsbCsweDQ4LzB4MTBjCj4gWyAgIDM0Ljk1NzY5 MV0gIGVsMF9zdmNfY29tbW9uLmNvbnN0cHJvcC4wKzB4NDAvMHhlMAo+IFsgICAzNC45NTgxMTNd ICBkb19lbDBfc3ZjKzB4MWMvMHgyOAo+IFsgICAzNC45NTg0MTRdICBlbDBfc3ZjKzB4MzQvMHhl Ywo+IFsgICAzNC45NTg2OTRdICBlbDB0XzY0X3N5bmNfaGFuZGxlcisweGEwLzB4ZTQKPiBbICAg MzQuOTU5MDcwXSAgZWwwdF82NF9zeW5jKzB4MTk4LzB4MTljCj4gWyAgIDM0Ljk1OTQwNV0gQ29k ZTogNTI4MDAxNDEgOTQwMDAwYWUgNzEwMDEyN2YgNTRmZmY4MDEgKGI5NDAwMjk0KQo+IFsgICAz NC45NTk5NDBdIC0tLVsgZW5kIHRyYWNlIDAwMDAwMDAwMDAwMDAwMDAgXS0tLQo+IFsgICAzNC45 NjAzNDldIG5vdGU6IGxzcGNpWzc5Nl0gZXhpdGVkIHdpdGggaXJxcyBkaXNhYmxlZAo+IFsgICAz NC45NjA4NzldIG5vdGU6IGxzcGNpWzc5Nl0gZXhpdGVkIHdpdGggcHJlZW1wdF9jb3VudCAxCj4g Cj4gRWl0aGVyIEkgYW0gZG9pbmcgc29tZXRoaW5nIHdyb25nLCBvciBpdCdzIGJyb2tlbjsgSSBh bSBub3QgZ2V0dGluZwo+IHRoaXMgdG8gd29yay4KPiAKPiBVcG9uIGZ1cnRoZXIgaW52ZXN0aWdh dGlvbiwgdGhlIGlzc3VlIHdhcyBuYXJyb3dlZCBkb3duIHRvIGEKPiBzcGVjaWZpYyBtb2RpZmlj YXRpb24gdGhhdCBJIG1hZGUgbG9jYWxseSwKPiAKPiBBY2NvcmRpbmcgdG8gc2VjdGlvbiAxNy42 LjYuMS4zMiBvZiB0aGUgbWFudWFsLCB0aGUgUG93ZXIgTGltaXQKPiBWYWx1ZSBhbmQgUG93ZXIg TGltaXQgU2NhbGUgZmllbGRzIGFyZSBwYXJ0IG9mIHRoZSBTbG90IENhcGFiaWxpdHkKPiBSZWdp c3Rlciwgbm90IHRoZSBEZXZpY2UgQ2FwYWJpbGl0eSBSZWdpc3Rlci4KPiAKPiBUaGlzIGFzc3Vt cHRpb24gbGVkIHRvIHRoZSBzZWdtZW50YXRpb24gZmF1bHQgYmVjYXVzZSB0aGUgY29kZSB3YXMK PiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBpbnZhbGlkIG1lbW9yeSBhZGRyZXNzZXMuCj4gCj4gRG8g eW91IHRoaW5rIHRoZXNlIGFyZSB2YWxpZCBjaGFuZ2VzPyBCZWNhdXNlIHRoaXMgY2hhbmdlIGNh dXNlZCBhCj4gZnJlZXplIG9uIHRoZSBOVk1lIGRldmljZS4KCkknbSBub3Qgc3VycHJpc2VkIHRo YXQgdGhlcmUgbWlnaHQgYmUgaXNzdWVzIHJlbGF0ZWQgdG8gcmVnaXN0ZXJzIGluCnRoZSBQQ0ll IENhcGFiaWxpdHkuICBJJ20gYWN0dWFsbHkgc3VycHJpc2VkIHRoYXQgdGhpcyBkcml2ZXIgd29y a3MgYXQKYWxsLCBnaXZlbiB0aGUgaW5jcmVkaWJsZSBtZXNzLgoKU28gSSdtIG5vdCBnb2luZyB0 byBib3RoZXIgdHJ5aW5nIHRvIGZpeCB0aGlzIHBpZWNlbWVhbCBhcyB3aXRoIHRoZQpwYXRjaCBi ZWxvdy4gIEV2ZXJ5IHNpbmdsZSBhY2Nlc3MgdG8gREVWQ0FQL0RFVkNUTC9ERVZTVEEsClNMVENB UC9TTFRDVEwvU0xUU1RBLCBldGMgbmVlZHMgdG8gYmUgbWFkZSByYXRpb25hbC4gIFRoZXJlJ3Mg YSBzaW5nbGUKYmFzZSBhZGRyZXNzIHRoYXQgd29ya3MgZm9yIGFsbCBvZiB0aGVtIGJlY2F1c2Ug dGhlIFJvY2tjaGlwIHJlZ2lzdGVyCmxheW91dCBtYXRjaGVzIHRoZSBQQ0llIENhcGFiaWxpdHkg bGF5b3V0LiAgSSd2ZSBhbHJlYWR5IG91dGxpbmVkIGluCmRldGFpbCB3aGF0IG5lZWRzIHRvIGJl IGRvbmUuICBJJ2xsIHRyeSB0byBmaW5kIHRpbWUgdG8gYWN0dWFsbHkKaW1wbGVtZW50IHRoaXMs IGJ1dCBpdCBwcm9iYWJseSB3b24ndCBiZSBmb3IgYXQgbGVhc3QgYSBmZXcgZGF5cy4KCj4gJCBn aXQgIGRpZmYgZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAtaG9zdC5jCj4g Yi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAtaG9zdC5jCj4gaW5kZXggZWUx ODIyY2EwMWRiLi43NDNhMDRlMzZhMWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9wY2kvY29udHJv bGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYwo+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv cGNpZS1yb2NrY2hpcC1ob3N0LmMKPiBAQCAtMjcwLDEwICsyNzAsMTAgQEAgc3RhdGljIHZvaWQg cm9ja2NoaXBfcGNpZV9zZXRfcG93ZXJfbGltaXQoc3RydWN0Cj4gcm9ja2NoaXBfcGNpZSAqcm9j a2NoaXApCj4gICAgICAgICAgICAgICAgIHBvd2VyID0gcG93ZXIgLyAxMDsKPiAgICAgICAgIH0K PiAKPiAtICAgICAgIHN0YXR1cyA9IHJvY2tjaGlwX3BjaWVfcmVhZChyb2NrY2hpcCwgUENJRV9S Q19DT05GSUdfQ1IgKwo+IFBDSV9FWFBfREVWQ0FQKTsKPiArICAgICAgIHN0YXR1cyA9IHJvY2tj aGlwX3BjaWVfcmVhZChyb2NrY2hpcCwgUENJRV9SQ19DT05GSUdfQ1IgKwo+IFBDSV9FWFBfU0xU Q0FQKTsKPiAgICAgICAgIHN0YXR1cyB8PSBGSUVMRF9QUkVQKFBDSV9FWFBfREVWQ0FQX1BXUl9W QUwsIHBvd2VyKTsKPiAgICAgICAgIHN0YXR1cyB8PSBGSUVMRF9QUkVQKFBDSV9FWFBfREVWQ0FQ X1BXUl9TQ0wsIHNjYWxlKTsKPiAtICAgICAgIHJvY2tjaGlwX3BjaWVfd3JpdGUocm9ja2NoaXAs IHN0YXR1cywgUENJRV9SQ19DT05GSUdfQ1IgKwo+IFBDSV9FWFBfREVWQ0FQKTsKPiArICAgICAg IHJvY2tjaGlwX3BjaWVfd3JpdGUocm9ja2NoaXAsIHN0YXR1cywgUENJRV9SQ19DT05GSUdfQ1Ig Kwo+IFBDSV9FWFBfU0xUQ0FQKTsKPiAgfQo+IAo+IFRoYW5rcwo+IC1BbmFuZAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtcm9ja2NoaXAgbWFp bGluZyBsaXN0CkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAo=