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 5F2A2CA0EC4 for ; Tue, 12 Aug 2025 20:43: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: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=Ld/eGwDmEV4HTR92V5/9SiSTxxbvL5l4I6QeOfLmmXI=; b=42DNZ06C08StFr4g0SpneDdD5i 5MZdKTC33T2QOQMiQGCTSEBYeap1iyOutFL+A5OJuS681TAVGoJc3apRh355ZiIZtvUlVOVQKa0Ry rv7tjg0iLq+H3eyv5u96aJvxMKs0lvtc2Lsv2PoWHO4CNJoSA5En+THffcvgsHSovzrCPzrzZgN/3 u24HYXf84jaf/HGhyrnQQZkaI7fqExQWbuOCJ8KrYY0QwcvE5o4A0xiUZ0Bz5RawdRH0LRdRkn/X/ jDw5wiIS2wuGpzy7M07zGE88cSgNw/7v3iZD3Rm7yguXc/sraOevhFdtrxNo0loImOm4k8bWYayKw P9hTNKHA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1ulvqZ-0000000Bzen-09tb; Tue, 12 Aug 2025 20:43:51 +0000 Received: from sender4-pp-f112.zoho.com ([136.143.188.112]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1ulv4m-0000000BtJy-3NyC; Tue, 12 Aug 2025 19:54:30 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1755028458; cv=none; d=zohomail.com; s=zohoarc; b=iJIRj5zojn2Qh4fZ/f6E0Ov3ZYDw6F9pZTYQrWPHE8YJAiBCo3ubLH905BiNr1mGMNPJsC2t9AUy3tJs7YZiOrbX1vGOGwZGcmClVoeNFogxN4YAyZByQgTIr2Ho/pWX5WjSalIP9jAo62PcwRjzY2vAJ6SFuZJR6WSjxukVHBA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755028458; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ld/eGwDmEV4HTR92V5/9SiSTxxbvL5l4I6QeOfLmmXI=; b=T0j2X7hHt3Rm6VwtuD+CLBEkfNUtvYaqRiuPP3uX7sMwYWn2mkeVr9DExWTCduDKfxf0GO4OJjr7AYlqDSedxYf75zkgpkGkdH7ap8h3F70urRaTQZs3lKSsGgKd8VBNBkGnmrlcrf/bjtMnKVXSXk7Tl8Pf/BFWzTXhij6lRRQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=detlev.casanova@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1755028458; s=zohomail; d=collabora.com; i=detlev.casanova@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=Ld/eGwDmEV4HTR92V5/9SiSTxxbvL5l4I6QeOfLmmXI=; b=K4uplCEG5i/7XT3k92rfwYoBSe02y9b8Z+SdPJxzYeQ0qED59faj6z+SdusM4MCN +arRlLCsgQvfPikHLJGfJWF+Rnvwcr7+TrMNfAf5OR/JppNPTB5izs/tvq9CoMilRgc s0R2EpZmVHXzk1JvpzKfIjafJc92xUa4GDRmc7AE= Received: by mx.zohomail.com with SMTPS id 1755028457197569.0536712042938; Tue, 12 Aug 2025 12:54:17 -0700 (PDT) From: Detlev Casanova To: Jonas Karlman , Nicolas Dufresne Cc: Ezequiel Garcia , Mauro Carvalho Chehab , Heiko Stuebner , Alex Bee , linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 1/7] media: rkvdec: Add HEVC backend Date: Tue, 12 Aug 2025 15:54:15 -0400 Message-ID: <13998356.uLZWGnKmhe@earth> In-Reply-To: References: <20250810212454.3237486-1-jonas@kwiboo.se> <4b3c409b-5f10-4aa0-996f-1dc2d28816ef@kwiboo.se> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-ZohoMailClient: External X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250812_125428_916671_9E62B041 X-CRM114-Status: GOOD ( 54.75 ) 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 Tuesday, 12 August 2025 09:07:33 EDT Nicolas Dufresne wrote: > Le mardi 12 ao=C3=BBt 2025 =C3=A0 02:58 +0200, Jonas Karlman a =C3=A9crit= : > > Hi Nicolas, > >=20 > > On 8/11/2025 11:07 PM, Nicolas Dufresne wrote: > > > First pass of review, > > >=20 > > > There is obvious conflict between Detlev RK3388/3576 series, please > > > coordinate. By picking the same direction, the common code can be spl= it > > > from platform code, and then both sets can share that common code and > > > avoid conflicts.>=20 > > Yes, it is very unfortunate that Detlev did not base the work on v1 of > > this series, this has been sitting idle on the list for almost 2 years > > only waiting on its dependent H264 High10/4:2:2 series to be merged. > >=20 > > Most feedback for v1 was related to unstaging and the series could be > > applied clean until iommu detach/attach was introduced very recently. > >=20 > > This series has also been referenced in multiple threads related to > > rkvdec2 work, most recent at [1]. Unfortunately, I have missed both v1 > > and v2 of Detlev's new rkvdec2 series, and was not able to send a v2 of > > this until now due to family tragedy. > >=20 > > I will take a closer look at Detlev's new rkvdec2 series and see what I > > can do in a v3 to ease any merge conflicts. > > All in all, I'd like to have both of these series ready for 6.18. To avoid > the need for dependant series, I can pick top patches if the preparation = is > properly split from the platform specific code. Please make you > recommendation. > > My main concern at the moment is the back and forth from register to > structure, Detlev already ported everything else to structures, so porting > a single codec for a single SoC seems like the least amount of work. I'd > like to ear if any of you would be willing to convert it. This way I can > land the conversion early, and we remove one massive clash between the two > sets. The conversion won't be too difficult to manage, I can do it as I did for h= 264=20 and add that to my serie over this one. As my series is already doing a conversion, I'm not against keeping this on= e=20 without structs and simply do the conversion later, even if that means merg= ing=20 code we know will change later. I'd also like to mention that currently, my serie changes the writel to=20 structs only for the registers, not for PPS and SPS. So I don't mind keeping that part as is for rkvdec-hevc. =46or the variants support, I can also merge in my changes: my rkvdec_confi= g=20 would just become an extention your rkvdec_variant. =46inally, this series has been here for longer than mine, so it's only fai= r to=20 have me rebase mine, especially because it means doing a bit more of what I= =20 already did. Regards, Detlev. > > [1] > > https://lore.kernel.org/linux-media/a787e6e0-d4ce-45e3-8263-2489585d3ec= 0@ > > kwiboo.se/>=20 > > > Le dimanche 10 ao=C3=BBt 2025 =C3=A0 21:24 +0000, Jonas Karlman a =C3= =A9crit : > > > > The Rockchip VDEC supports the HEVC codec with the Main and Main10 > > > > Profile up to Level 5.1 High tier: 4096x2304@60 fps. > > > >=20 > > > > Add the backend for HEVC format to the decoder. > > > >=20 > > > > Signed-off-by: Alex Bee > > > > Signed-off-by: Nicolas Dufresne > > > > Signed-off-by: Sebastian Fricke > > > > Signed-off-by: Jonas Karlman > > > > --- > > > > Changes in v2: > > > > - Use new_value in transpose_and_flatten_matrices() > > > > - Add NULL check for ctrl->new_elems in rkvdec_hevc_run_preamble() > > > > - Set RKVDEC_WR_DDR_ALIGN_EN for RK3328 > > > > --- > > > > .../media/platform/rockchip/rkvdec/Makefile | 2 +- > > > > .../rockchip/rkvdec/rkvdec-hevc-data.c | 1848 > > > > +++++++++++++++++ > > > > .../platform/rockchip/rkvdec/rkvdec-hevc.c | 817 ++++++++ > > > > .../platform/rockchip/rkvdec/rkvdec-regs.h | 2 + > > > > .../media/platform/rockchip/rkvdec/rkvdec.c | 76 + > > > > .../media/platform/rockchip/rkvdec/rkvdec.h | 1 + > > > > 6 files changed, 2745 insertions(+), 1 deletion(-) > > > > create mode 100644 > > > > drivers/media/platform/rockchip/rkvdec/rkvdec-hevc-data.c create mo= de > > > > 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-hevc.c > > > >=20 > > > > diff --git a/drivers/media/platform/rockchip/rkvdec/Makefile > > > > b/drivers/media/platform/rockchip/rkvdec/Makefile index > > > > cb86b429cfaa..a77122641d14 100644 > > > > --- a/drivers/media/platform/rockchip/rkvdec/Makefile > > > > +++ b/drivers/media/platform/rockchip/rkvdec/Makefile > > > > @@ -1,3 +1,3 @@ > > > > obj-$(CONFIG_VIDEO_ROCKCHIP_VDEC) +=3D rockchip-vdec.o > > > > =20 > > > > -rockchip-vdec-y +=3D rkvdec.o rkvdec-h264.o rkvdec-vp9.o > > > > +rockchip-vdec-y +=3D rkvdec.o rkvdec-h264.o rkvdec-hevc.o rkvdec-v= p9.o > >=20 > > [snip] > >=20 > > > > diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-hevc.c > > > > b/drivers/media/platform/rockchip/rkvdec/rkvdec-hevc.c new file mode > > > > 100644 > > > > index 000000000000..1994ea24f0be > > > > --- /dev/null > > > > +++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-hevc.c > > > > @@ -0,0 +1,817 @@ > > > > +// SPDX-License-Identifier: GPL-2.0 > > > > +/* > > > > + * Rockchip Video Decoder HEVC backend > > > > + * > > > > + * Copyright (C) 2023 Collabora, Ltd. > > > > + * Sebastian Fricke > > > > + * > > > > + * Copyright (C) 2019 Collabora, Ltd. > > > > + * Boris Brezillon > > > > + * > > > > + * Copyright (C) 2016 Rockchip Electronics Co., Ltd. > > > > + * Jeffy Chen > > > > + */ > > > > + > > > > +#include > > > > + > > > > +#include "rkvdec.h" > > > > +#include "rkvdec-regs.h" > > > > +#include "rkvdec-hevc-data.c" > > > > + > > > > +/* Size in u8/u32 units. */ > > > > +#define RKV_SCALING_LIST_SIZE 1360 > > > > +#define RKV_PPS_SIZE (80 / 4) > > > > +#define RKV_PPS_LEN 64 > > > > +#define RKV_RPS_SIZE (32 / 4) > > > > +#define RKV_RPS_LEN 600 > > > > + > > > > +struct rkvdec_sps_pps_packet { > > > > + u32 info[RKV_PPS_SIZE]; > > > > +}; > > > > + > > > > +struct rkvdec_rps_packet { > > > > + u32 info[RKV_RPS_SIZE]; > > > > +}; > > > > + > > > > +struct rkvdec_ps_field { > > > > + u16 offset; > > > > + u8 len; > > > > +}; > > > > + > > > > +#define PS_FIELD(_offset, _len) \ > > > > + ((struct rkvdec_ps_field){ _offset, _len }) > > > > + > > > > +/* SPS */ > > > > +#define VIDEO_PARAMETER_SET_ID PS_FIELD(0,=20 4) > > > > +#define SEQ_PARAMETER_SET_ID PS_FIELD(4,=20 4) > > > > +#define CHROMA_FORMAT_IDC PS_FIELD(8,=20 2) > > > > +#define PIC_WIDTH_IN_LUMA_SAMPLES PS_FIELD(10,=20 13) > > > > +#define PIC_HEIGHT_IN_LUMA_SAMPLES PS_FIELD(23,=20 13) > > > > +#define BIT_DEPTH_LUMA =09 PS_FIELD(36, 4) > > > > +#define BIT_DEPTH_CHROMA PS_FIELD(40,=20 4) > > > > +#define LOG2_MAX_PIC_ORDER_CNT_LSB PS_FIELD(44,=20 5) > > > > +#define LOG2_DIFF_MAX_MIN_LUMA_CODING_BLOCK_SIZE PS_FIELD(49, 2) > > > > +#define LOG2_MIN_LUMA_CODING_BLOCK_SIZE PS_FIELD(51,=20 3) > > > > +#define LOG2_MIN_TRANSFORM_BLOCK_SIZE PS_FIELD(54,=20 3) > > > > +#define LOG2_DIFF_MAX_MIN_LUMA_TRANSFORM_BLOCK_SIZE PS_FIELD(57,=20 2) > > > > +#define MAX_TRANSFORM_HIERARCHY_DEPTH_INTER PS_FIELD(59,=20 3) > > > > +#define MAX_TRANSFORM_HIERARCHY_DEPTH_INTRA PS_FIELD(62,=20 3) > > > > +#define SCALING_LIST_ENABLED_FLAG =09 PS_FIELD(65, 1) > > > > +#define AMP_ENABLED_FLAG PS_FIELD(66,=20 1) > > > > +#define SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG =09 PS_FIELD(67, 1) > > > > +#define PCM_ENABLED_FLAG PS_FIELD(68,=20 1) > > > > +#define PCM_SAMPLE_BIT_DEPTH_LUMA PS_FIELD(69,=20 4) > > > > +#define PCM_SAMPLE_BIT_DEPTH_CHROMA PS_FIELD(73,=20 4) > > > > +#define PCM_LOOP_FILTER_DISABLED_FLAG =09 PS_FIELD(77, 1) > > > > +#define LOG2_DIFF_MAX_MIN_PCM_LUMA_CODING_BLOCK_SIZE PS_FIELD(78,= =20 3) > > > > +#define LOG2_MIN_PCM_LUMA_CODING_BLOCK_SIZE PS_FIELD(81,=20 3) > > > > +#define NUM_SHORT_TERM_REF_PIC_SETS PS_FIELD(84,=20 7) > > > > +#define LONG_TERM_REF_PICS_PRESENT_FLAG =09 PS_FIELD(91, 1) > > > > +#define NUM_LONG_TERM_REF_PICS_SPS PS_FIELD(92,=20 6) > > > > +#define SPS_TEMPORAL_MVP_ENABLED_FLAG PS_FIELD(98,=20 1) > > > > +#define STRONG_INTRA_SMOOTHING_ENABLED_FLAG PS_FIELD(99,=20 1) > > >=20 > > > Detlev is moving to structures and memcpy, with a minor performance > > > gain, this is the way to go, I can understand if this is quite > > > involving, but one of you will have to do it. > >=20 > > Sure, and this was the the main reason why I mentioned this incoming > > series back in [1], to consider this series before doing too much > > re-work on a future rkvdec1 + rkvdec2 merge series. > >=20 > > As mentioned above, I will take a closer look at Detlev's new rkvdec2 > > series and see what I can do in a v3 to ease any merge conflicts. > >=20 > > > > +/* PPS */ > > > > +#define PIC_PARAMETER_SET_ID =09 PS_FIELD(128, 6) > > > > +#define PPS_SEQ_PARAMETER_SET_ID =09 PS_FIELD(134, 4) > > > > +#define DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG =09 PS_FIELD(138, 1) > > > > +#define OUTPUT_FLAG_PRESENT_FLAG =09 PS_FIELD(139, 1) > > > > +#define NUM_EXTRA_SLICE_HEADER_BITS =09 PS_FIELD(140, 13) > > > > +#define SIGN_DATA_HIDING_ENABLED_FLAG =09 PS_FIELD(153, 1) > > > > +#define CABAC_INIT_PRESENT_FLAG =09 PS_FIELD(154, 1) > > > > +#define NUM_REF_IDX_L0_DEFAULT_ACTIVE =09 PS_FIELD(155, 4) > > > > +#define NUM_REF_IDX_L1_DEFAULT_ACTIVE =09 PS_FIELD(159, 4) > > > > +#define INIT_QP_MINUS26 =09 PS_FIELD(163, 7) > > > > +#define CONSTRAINED_INTRA_PRED_FLAG =09 PS_FIELD(170, 1) > > > > +#define TRANSFORM_SKIP_ENABLED_FLAG =09 PS_FIELD(171, 1) > > > > +#define CU_QP_DELTA_ENABLED_FLAG =09 PS_FIELD(172, 1) > > > > +#define LOG2_MIN_CU_QP_DELTA_SIZE =09 PS_FIELD(173, 3) > > > > +#define PPS_CB_QP_OFFSET =09 PS_FIELD(176, 5) > > > > +#define PPS_CR_QP_OFFSET =09 PS_FIELD(181, 5) > > > > +#define PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG PS_FIELD(186, 1) > > > > +#define WEIGHTED_PRED_FLAG =09 PS_FIELD(187, 1) > > > > +#define WEIGHTED_BIPRED_FLAG =09 PS_FIELD(188, 1) > > > > +#define TRANSQUANT_BYPASS_ENABLED_FLAG PS_FIELD(189,=20 1) > > > > +#define TILES_ENABLED_FLAG =09 PS_FIELD(190, 1) > > > > +#define ENTROPY_CODING_SYNC_ENABLED_FLAG PS_FIELD(191,=20 1) > > > > +#define PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED_FLAG PS_FIELD(192, 1) > > > > +#define LOOP_FILTER_ACROSS_TILES_ENABLED_FLAG =09 PS_FIELD(193, 1) > > > > +#define DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG =09 PS_FIELD(194, 1) > > > > +#define PPS_DEBLOCKING_FILTER_DISABLED_FLAG =09 PS_FIELD(195, 1) > > > > +#define PPS_BETA_OFFSET_DIV2 =09 PS_FIELD(196, 4) > > > > +#define PPS_TC_OFFSET_DIV2 =09 PS_FIELD(200, 4) > > > > +#define LISTS_MODIFICATION_PRESENT_FLAG =09 PS_FIELD(204, 1) > > > > +#define LOG2_PARALLEL_MERGE_LEVEL =09 PS_FIELD(205, 3) > > > > +#define SLICE_SEGMENT_HEADER_EXTENSION_PRESENT_FLAG=09 PS_FIELD(208, 1) > > > > +#define NUM_TILE_COLUMNS PS_FIELD(212,=20 5) > > > > +#define NUM_TILE_ROWS PS_FIELD(217,=20 5) > > > > +#define COLUMN_WIDTH(i) =09 PS_FIELD(256 + ((i) * 8), 8) > > > > +#define ROW_HEIGHT(i) =09 PS_FIELD(416 + ((i) * 8), 8) > > > > +#define SCALING_LIST_ADDRESS =09 PS_FIELD(592, 32) > >=20 > > [snip] > >=20 > > > > +/* > > > > + * Creation of the Reference Picture Set memory blob for the > > > > hardware. > > > > + * The layout looks like this: > > > > + * [0] 32 bits for L0 (6 references + 2 bits of the 7th reference) > > > > + * [1] 32 bits for L0 (remaining 3 bits of the 7th reference + 5 > > > > references + * + 4 bits of the 13th reference) > > > > + * [2] 11 bits for L0 (remaining bit for 13 and 2 references) and > > > > + * 21 bits for L1 (4 references + first bit of 5) > > > > + * [3] 32 bits of padding with 0s > > > > + * [4] 32 bits for L1 (remaining 4 bits for 5 + 5 references + 3 b= its > > > > of 11) + * [5] 22 bits for L1 (remaining 2 bits of 11 and 4 > > > > references) > > > > + * lowdelay flag (bit 23), rps bit offset long term (bit 24 - = 32) > > > > + * [6] rps bit offset long term (bit 1 - 3), rps bit offset short > > > > term (bit 4 - 12) + * number of references (bit 13 - 16), > > > > remaining 16 bits of padding with 0s + * [7] 32 bits of padding with > > > > 0s > > > > + * > > > > + * Thus we have to set up padding in between reference 5 of the L1 > > > > list. > > > > + */ > > > > +static void assemble_hw_rps(struct rkvdec_ctx *ctx, > > > > + struct rkvdec_hevc_run *run) > > >=20 > > > Rockchip calls this one the swp_rps, in the sense the the slice header > > > and its enclosed reference are parsed by software. Detlev implements > > > the HW RPS (which requires an extended control) since SW RPS wasn't > > > documented and this implementation did not work for newer chip. We ha= ve > > > no information that HW RPS would work on RK3399 and older, I'm just > > > asking to rename to we can differentiate it. > >=20 > > Sure, I can rename this this assemble_sw_rps or similar in a v3. > >=20 > > > > +{ > > > > + const struct v4l2_ctrl_hevc_decode_params *decode_params =3D > > > > run->decode_params; + const struct v4l2_ctrl_hevc_sps *sps =3D > > > > run->sps; > > > > + const struct v4l2_ctrl_hevc_slice_params *sl_params; > > > > + const struct v4l2_hevc_dpb_entry *dpb; > > > > + struct rkvdec_hevc_ctx *hevc_ctx =3D ctx->priv; > > > > + struct rkvdec_hevc_priv_tbl *priv_tbl =3D hevc_ctx->priv_tbl.cpu; > > > > + struct rkvdec_rps_packet *hw_ps; > > > > + int i, j; > > > > + unsigned int lowdelay; > > > > + > > > > +#define WRITE_RPS(value, field) set_ps_field(hw_ps->info, field, > > > > value) > > > > + > > > > +#define REF_PIC_LONG_TERM_L0(i) PS_FIELD((i) * 5,=20 1) > > > > +#define REF_PIC_IDX_L0(i) PS_FIELD(1 + ((i) * 5), 4) > > > > +#define REF_PIC_LONG_TERM_L1(i) PS_FIELD(((i) < 5 ?=20 75 : 132) + > > > > ((i) * 5), 1) +#define REF_PIC_IDX_L1(i) =09 PS_FIELD(((i) < 4 ? 76 : > > > > 128) + ((i) * 5), 4) + > > > > +#define LOWDELAY PS_FIELD(182, 1) > > > > +#define LONG_TERM_RPS_BIT_OFFSET PS_FIELD(183, 10) > > > > +#define SHORT_TERM_RPS_BIT_OFFSET PS_FIELD(193, 9) > > > > +#define NUM_RPS_POC PS_FIELD(202, 4) > > > > + > > > > + for (j =3D 0; j < run->num_slices; j++) { > > > > + uint st_bit_offset =3D 0; > > > > + uint num_l0_refs =3D 0; > > > > + uint num_l1_refs =3D 0; > > > > + > > > > + sl_params =3D &run->slices_params[j]; > > > > + dpb =3D decode_params->dpb; > > > > + > > > > + if (sl_params->slice_type !=3D V4L2_HEVC_SLICE_TYPE_I) { > > > > + num_l0_refs =3D sl_params- >num_ref_idx_l0_active_minus1 + 1; > > > > + > > > > + if (sl_params->slice_type =3D=3D=20 V4L2_HEVC_SLICE_TYPE_B) > > > > + num_l1_refs =3D sl_params- >num_ref_idx_l1_active_minus1 + 1; > > > > + > > > > + lowdelay =3D 1; > > > > + } else { > > > > + lowdelay =3D 0; > > > > + } > > > > + > > > > + hw_ps =3D &priv_tbl->rps[j]; > > > > + memset(hw_ps, 0, sizeof(*hw_ps)); > > > > + > > > > + for (i =3D 0; i < num_l0_refs; i++) { > > > > + const struct v4l2_hevc_dpb_entry dpb_l0 =3D > > > > dpb[sl_params->ref_idx_l0[i]]; + > > > > + WRITE_RPS(!!(dpb_l0.flags & > > > > V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE), > > > > + REF_PIC_LONG_TERM_L0(i)); > > > > + WRITE_RPS(sl_params->ref_idx_l0[i],=20 REF_PIC_IDX_L0(i)); > > > > + > > > > + if (dpb_l0.pic_order_cnt_val > sl_params- >slice_pic_order_cnt) > > > > + lowdelay =3D 0; > > > > + } > > > > + > > > > + for (i =3D 0; i < num_l1_refs; i++) { > > > > + const struct v4l2_hevc_dpb_entry dpb_l1 =3D > > > > dpb[sl_params->ref_idx_l1[i]]; + int=20 is_long_term =3D > > > > + !!(dpb_l1.flags &=20 V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE); > > > > + > > > > + WRITE_RPS(is_long_term, REF_PIC_LONG_TERM_L1(i)); > > > > + WRITE_RPS(sl_params->ref_idx_l1[i],=20 REF_PIC_IDX_L1(i)); > > > > + > > > > + if (dpb_l1.pic_order_cnt_val > sl_params- >slice_pic_order_cnt) > > > > + lowdelay =3D 0; > > > > + } > > > > + > > > > + WRITE_RPS(lowdelay, LOWDELAY); > > > > + > > > > + if (!(decode_params->flags &=20 V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC)) > > > > { > > > > + if (sl_params->short_term_ref_pic_set_size) > > > > + st_bit_offset =3D sl_params- >short_term_ref_pic_set_size; > > > > + else if (sps->num_short_term_ref_pic_sets > 1) > > > > + st_bit_offset =3D fls(sps- >num_short_term_ref_pic_sets - 1); > > > > + } > > > > + > > > > + WRITE_RPS(st_bit_offset + sl_params- >long_term_ref_pic_set_size, > > > > + LONG_TERM_RPS_BIT_OFFSET); > > > > + WRITE_RPS(sl_params->short_term_ref_pic_set_size, > > > > + SHORT_TERM_RPS_BIT_OFFSET); > > > > + > > > > + WRITE_RPS(decode_params->num_poc_st_curr_before + > > > > + decode_params->num_poc_st_curr_after + > > > > + decode_params->num_poc_lt_curr, > > > > + NUM_RPS_POC); > > > > + } > > > > +} > >=20 > > [snip] > >=20 > > > Looks good otherwise. Please let me know your plan to combine or prep= are > > > for both series. > >=20 > > I will take a closer look at Detlev's new rkvdec2 series and see what I > > can do in a v3 to ease any merge conflicts. > >=20 > > I am just a little bit sad that this series has been completely ignored > > for the continued work with rkvdec2, the new series even seem to > > implement a slightly different variant system when this has been here > > waiting all this time :-/ > >=20 > > Regards, > > Jonas > >=20 > > > Nicolas 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 085F5CA0EDB for ; Tue, 12 Aug 2025 20:41: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=5xA/jw6hUO7fcRUNZ4/03Tu8stmOOUC1XVxnhmfZLoE=; b=d+my2OIiafXX7R ya2TjXy98HTHziVO1dyuqGmzN47PDk3Jbo3dRWiyxVQpevNeXq3gPJcKH+RDuQuZSY4179kNjSnAm zHKeGa4iMkIOwyZFWN1h+uLe7HIa9omU4p21Ugv2RVbCPn+BFshPCmJ7yGxQEpHUeKu6e1s28PlFd Cz4W43kJdLhyncChSi+08itEFLPsWFFwuvXi+JN5MybjCQMAbJszwzijwtDQ2qz2XW9JKXEvvpiAs m0XtWncSjON1Gcd1/s/Ia7dD6NshI0AFAV6ZggUT105jjnhMM033XE/tvaZLjXkr1riLkF8rdpir1 MSF8O5M+8O0MI01DKJQg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1ulvo9-0000000BzRL-3TQJ; Tue, 12 Aug 2025 20:41:21 +0000 Received: from sender4-pp-f112.zoho.com ([136.143.188.112]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1ulv4m-0000000BtJy-3NyC; Tue, 12 Aug 2025 19:54:30 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1755028458; cv=none; d=zohomail.com; s=zohoarc; b=iJIRj5zojn2Qh4fZ/f6E0Ov3ZYDw6F9pZTYQrWPHE8YJAiBCo3ubLH905BiNr1mGMNPJsC2t9AUy3tJs7YZiOrbX1vGOGwZGcmClVoeNFogxN4YAyZByQgTIr2Ho/pWX5WjSalIP9jAo62PcwRjzY2vAJ6SFuZJR6WSjxukVHBA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755028458; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ld/eGwDmEV4HTR92V5/9SiSTxxbvL5l4I6QeOfLmmXI=; b=T0j2X7hHt3Rm6VwtuD+CLBEkfNUtvYaqRiuPP3uX7sMwYWn2mkeVr9DExWTCduDKfxf0GO4OJjr7AYlqDSedxYf75zkgpkGkdH7ap8h3F70urRaTQZs3lKSsGgKd8VBNBkGnmrlcrf/bjtMnKVXSXk7Tl8Pf/BFWzTXhij6lRRQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=detlev.casanova@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1755028458; s=zohomail; d=collabora.com; i=detlev.casanova@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=Ld/eGwDmEV4HTR92V5/9SiSTxxbvL5l4I6QeOfLmmXI=; b=K4uplCEG5i/7XT3k92rfwYoBSe02y9b8Z+SdPJxzYeQ0qED59faj6z+SdusM4MCN +arRlLCsgQvfPikHLJGfJWF+Rnvwcr7+TrMNfAf5OR/JppNPTB5izs/tvq9CoMilRgc s0R2EpZmVHXzk1JvpzKfIjafJc92xUa4GDRmc7AE= Received: by mx.zohomail.com with SMTPS id 1755028457197569.0536712042938; Tue, 12 Aug 2025 12:54:17 -0700 (PDT) From: Detlev Casanova To: Jonas Karlman , Nicolas Dufresne Cc: Ezequiel Garcia , Mauro Carvalho Chehab , Heiko Stuebner , Alex Bee , linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 1/7] media: rkvdec: Add HEVC backend Date: Tue, 12 Aug 2025 15:54:15 -0400 Message-ID: <13998356.uLZWGnKmhe@earth> In-Reply-To: References: <20250810212454.3237486-1-jonas@kwiboo.se> <4b3c409b-5f10-4aa0-996f-1dc2d28816ef@kwiboo.se> MIME-Version: 1.0 X-ZohoMailClient: External X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250812_125428_916671_9E62B041 X-CRM114-Status: GOOD ( 54.75 ) 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 T24gVHVlc2RheSwgMTIgQXVndXN0IDIwMjUgMDk6MDc6MzMgRURUIE5pY29sYXMgRHVmcmVzbmUg d3JvdGU6Cj4gTGUgbWFyZGkgMTIgYW/Du3QgMjAyNSDDoCAwMjo1OCArMDIwMCwgSm9uYXMgS2Fy bG1hbiBhIMOpY3JpdCA6Cj4gPiBIaSBOaWNvbGFzLAo+ID4gCj4gPiBPbiA4LzExLzIwMjUgMTE6 MDcgUE0sIE5pY29sYXMgRHVmcmVzbmUgd3JvdGU6Cj4gPiA+IEZpcnN0IHBhc3Mgb2YgcmV2aWV3 LAo+ID4gPiAKPiA+ID4gVGhlcmUgaXMgb2J2aW91cyBjb25mbGljdCBiZXR3ZWVuIERldGxldiBS SzMzODgvMzU3NiBzZXJpZXMsIHBsZWFzZQo+ID4gPiBjb29yZGluYXRlLiBCeSBwaWNraW5nIHRo ZSBzYW1lIGRpcmVjdGlvbiwgdGhlIGNvbW1vbiBjb2RlIGNhbiBiZSBzcGxpdAo+ID4gPiBmcm9t IHBsYXRmb3JtIGNvZGUsIGFuZCB0aGVuIGJvdGggc2V0cyBjYW4gc2hhcmUgdGhhdCBjb21tb24g Y29kZSBhbmQKPiA+ID4gYXZvaWQgY29uZmxpY3RzLj4gCj4gPiBZZXMsIGl0IGlzIHZlcnkgdW5m b3J0dW5hdGUgdGhhdCBEZXRsZXYgZGlkIG5vdCBiYXNlIHRoZSB3b3JrIG9uIHYxIG9mCj4gPiB0 aGlzIHNlcmllcywgdGhpcyBoYXMgYmVlbiBzaXR0aW5nIGlkbGUgb24gdGhlIGxpc3QgZm9yIGFs bW9zdCAyIHllYXJzCj4gPiBvbmx5IHdhaXRpbmcgb24gaXRzIGRlcGVuZGVudCBIMjY0IEhpZ2gx MC80OjI6MiBzZXJpZXMgdG8gYmUgbWVyZ2VkLgo+ID4gCj4gPiBNb3N0IGZlZWRiYWNrIGZvciB2 MSB3YXMgcmVsYXRlZCB0byB1bnN0YWdpbmcgYW5kIHRoZSBzZXJpZXMgY291bGQgYmUKPiA+IGFw cGxpZWQgY2xlYW4gdW50aWwgaW9tbXUgZGV0YWNoL2F0dGFjaCB3YXMgaW50cm9kdWNlZCB2ZXJ5 IHJlY2VudGx5Lgo+ID4gCj4gPiBUaGlzIHNlcmllcyBoYXMgYWxzbyBiZWVuIHJlZmVyZW5jZWQg aW4gbXVsdGlwbGUgdGhyZWFkcyByZWxhdGVkIHRvCj4gPiBya3ZkZWMyIHdvcmssIG1vc3QgcmVj ZW50IGF0IFsxXS4gVW5mb3J0dW5hdGVseSwgSSBoYXZlIG1pc3NlZCBib3RoIHYxCj4gPiBhbmQg djIgb2YgRGV0bGV2J3MgbmV3IHJrdmRlYzIgc2VyaWVzLCBhbmQgd2FzIG5vdCBhYmxlIHRvIHNl bmQgYSB2MiBvZgo+ID4gdGhpcyB1bnRpbCBub3cgZHVlIHRvIGZhbWlseSB0cmFnZWR5Lgo+ID4g Cj4gPiBJIHdpbGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IERldGxldidzIG5ldyBya3ZkZWMyIHNl cmllcyBhbmQgc2VlIHdoYXQgSQo+ID4gY2FuIGRvIGluIGEgdjMgdG8gZWFzZSBhbnkgbWVyZ2Ug Y29uZmxpY3RzLgo+Cj4gQWxsIGluIGFsbCwgSSdkIGxpa2UgdG8gaGF2ZSBib3RoIG9mIHRoZXNl IHNlcmllcyByZWFkeSBmb3IgNi4xOC4gVG8gYXZvaWQKPiB0aGUgbmVlZCBmb3IgZGVwZW5kYW50 IHNlcmllcywgSSBjYW4gcGljayB0b3AgcGF0Y2hlcyBpZiB0aGUgcHJlcGFyYXRpb24gaXMKPiBw cm9wZXJseSBzcGxpdCBmcm9tIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlLiBQbGVhc2UgbWFr ZSB5b3UKPiByZWNvbW1lbmRhdGlvbi4KPgo+IE15IG1haW4gY29uY2VybiBhdCB0aGUgbW9tZW50 IGlzIHRoZSBiYWNrIGFuZCBmb3J0aCBmcm9tIHJlZ2lzdGVyIHRvCj4gc3RydWN0dXJlLCBEZXRs ZXYgYWxyZWFkeSBwb3J0ZWQgZXZlcnl0aGluZyBlbHNlIHRvIHN0cnVjdHVyZXMsIHNvIHBvcnRp bmcKPiBhIHNpbmdsZSBjb2RlYyBmb3IgYSBzaW5nbGUgU29DIHNlZW1zIGxpa2UgdGhlIGxlYXN0 IGFtb3VudCBvZiB3b3JrLiBJJ2QKPiBsaWtlIHRvIGVhciBpZiBhbnkgb2YgeW91IHdvdWxkIGJl IHdpbGxpbmcgdG8gY29udmVydCBpdC4gVGhpcyB3YXkgSSBjYW4KPiBsYW5kIHRoZSBjb252ZXJz aW9uIGVhcmx5LCBhbmQgd2UgcmVtb3ZlIG9uZSBtYXNzaXZlIGNsYXNoIGJldHdlZW4gdGhlIHR3 bwo+IHNldHMuCgpUaGUgY29udmVyc2lvbiB3b24ndCBiZSB0b28gZGlmZmljdWx0IHRvIG1hbmFn ZSwgSSBjYW4gZG8gaXQgYXMgSSBkaWQgZm9yIGgyNjQgCmFuZCBhZGQgdGhhdCB0byBteSBzZXJp ZSBvdmVyIHRoaXMgb25lLgoKQXMgbXkgc2VyaWVzIGlzIGFscmVhZHkgZG9pbmcgYSBjb252ZXJz aW9uLCBJJ20gbm90IGFnYWluc3Qga2VlcGluZyB0aGlzIG9uZSAKd2l0aG91dCBzdHJ1Y3RzIGFu ZCBzaW1wbHkgZG8gdGhlIGNvbnZlcnNpb24gbGF0ZXIsIGV2ZW4gaWYgdGhhdCBtZWFucyBtZXJn aW5nIApjb2RlIHdlIGtub3cgd2lsbCBjaGFuZ2UgbGF0ZXIuCgpJJ2QgYWxzbyBsaWtlIHRvIG1l bnRpb24gdGhhdCBjdXJyZW50bHksIG15IHNlcmllIGNoYW5nZXMgdGhlIHdyaXRlbCB0byAKc3Ry dWN0cyBvbmx5IGZvciB0aGUgcmVnaXN0ZXJzLCBub3QgZm9yIFBQUyBhbmQgU1BTLgpTbyBJIGRv bid0IG1pbmQga2VlcGluZyB0aGF0IHBhcnQgYXMgaXMgZm9yIHJrdmRlYy1oZXZjLgoKRm9yIHRo ZSB2YXJpYW50cyBzdXBwb3J0LCBJIGNhbiBhbHNvIG1lcmdlIGluIG15IGNoYW5nZXM6IG15IHJr dmRlY19jb25maWcgCndvdWxkIGp1c3QgYmVjb21lIGFuIGV4dGVudGlvbiB5b3VyIHJrdmRlY192 YXJpYW50LgoKRmluYWxseSwgdGhpcyBzZXJpZXMgaGFzIGJlZW4gaGVyZSBmb3IgbG9uZ2VyIHRo YW4gbWluZSwgc28gaXQncyBvbmx5IGZhaXIgdG8gCmhhdmUgbWUgcmViYXNlIG1pbmUsIGVzcGVj aWFsbHkgYmVjYXVzZSBpdCBtZWFucyBkb2luZyBhIGJpdCBtb3JlIG9mIHdoYXQgSSAKYWxyZWFk eSBkaWQuCgpSZWdhcmRzLApEZXRsZXYuCgo+ID4gWzFdCj4gPiBodHRwczovL2xvcmUua2VybmVs Lm9yZy9saW51eC1tZWRpYS9hNzg3ZTZlMC1kNGNlLTQ1ZTMtODI2My0yNDg5NTg1ZDNlYzBACj4g PiBrd2lib28uc2UvPiAKPiA+ID4gTGUgZGltYW5jaGUgMTAgYW/Du3QgMjAyNSDDoCAyMToyNCAr MDAwMCwgSm9uYXMgS2FybG1hbiBhIMOpY3JpdCA6Cj4gPiA+ID4gVGhlIFJvY2tjaGlwIFZERUMg c3VwcG9ydHMgdGhlIEhFVkMgY29kZWMgd2l0aCB0aGUgTWFpbiBhbmQgTWFpbjEwCj4gPiA+ID4g UHJvZmlsZSB1cCB0byBMZXZlbCA1LjEgSGlnaCB0aWVyOiA0MDk2eDIzMDRANjAgZnBzLgo+ID4g PiA+IAo+ID4gPiA+IEFkZCB0aGUgYmFja2VuZCBmb3IgSEVWQyBmb3JtYXQgdG8gdGhlIGRlY29k ZXIuCj4gPiA+ID4gCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogQWxleCBCZWUgPGtuYWVyemNoZUBn bWFpbC5jb20+Cj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTmljb2xhcyBEdWZyZXNuZSA8bmljb2xh cy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFNlYmFzdGlh biBGcmlja2UgPHNlYmFzdGlhbi5mcmlja2VAY29sbGFib3JhLmNvbT4KPiA+ID4gPiBTaWduZWQt b2ZmLWJ5OiBKb25hcyBLYXJsbWFuIDxqb25hc0Brd2lib28uc2U+Cj4gPiA+ID4gLS0tCj4gPiA+ ID4gQ2hhbmdlcyBpbiB2MjoKPiA+ID4gPiAtIFVzZSBuZXdfdmFsdWUgaW4gdHJhbnNwb3NlX2Fu ZF9mbGF0dGVuX21hdHJpY2VzKCkKPiA+ID4gPiAtIEFkZCBOVUxMIGNoZWNrIGZvciBjdHJsLT5u ZXdfZWxlbXMgaW4gcmt2ZGVjX2hldmNfcnVuX3ByZWFtYmxlKCkKPiA+ID4gPiAtIFNldCBSS1ZE RUNfV1JfRERSX0FMSUdOX0VOIGZvciBSSzMzMjgKPiA+ID4gPiAtLS0KPiA+ID4gPiAgLi4uL21l ZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JrdmRlYy9NYWtlZmlsZSAgIHwgICAgMiArLQo+ID4gPiA+ ICAuLi4vcm9ja2NoaXAvcmt2ZGVjL3JrdmRlYy1oZXZjLWRhdGEuYyAgICAgICAgfCAxODQ4Cj4g PiA+ID4gKysrKysrKysrKysrKysrKysKPiA+ID4gPiAgLi4uL3BsYXRmb3JtL3JvY2tjaGlwL3Jr dmRlYy9ya3ZkZWMtaGV2Yy5jICAgIHwgIDgxNyArKysrKysrKwo+ID4gPiA+ICAuLi4vcGxhdGZv cm0vcm9ja2NoaXAvcmt2ZGVjL3JrdmRlYy1yZWdzLmggICAgfCAgICAyICsKPiA+ID4gPiAgLi4u L21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JrdmRlYy9ya3ZkZWMuYyAgIHwgICA3NiArCj4gPiA+ ID4gIC4uLi9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9ya3ZkZWMvcmt2ZGVjLmggICB8ICAgIDEg Kwo+ID4gPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDI3NDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv bigtKQo+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQKPiA+ID4gPiBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3JvY2tjaGlwL3JrdmRlYy9ya3ZkZWMtaGV2Yy1kYXRhLmMgY3JlYXRlIG1vZGUKPiA+ ID4gPiAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9ya3ZkZWMvcmt2ZGVj LWhldmMuYwo+ID4gPiA+IAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL3JvY2tjaGlwL3JrdmRlYy9NYWtlZmlsZQo+ID4gPiA+IGIvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9yb2NrY2hpcC9ya3ZkZWMvTWFrZWZpbGUgaW5kZXgKPiA+ID4gPiBjYjg2YjQyOWNmYWEu LmE3NzEyMjY0MWQxNCAxMDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3JvY2tjaGlwL3JrdmRlYy9NYWtlZmlsZQo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vcm9ja2NoaXAvcmt2ZGVjL01ha2VmaWxlCj4gPiA+ID4gQEAgLTEsMyArMSwzIEBACj4g PiA+ID4gIG9iai0kKENPTkZJR19WSURFT19ST0NLQ0hJUF9WREVDKSArPSByb2NrY2hpcC12ZGVj Lm8KPiA+ID4gPiAgCj4gPiA+ID4gLXJvY2tjaGlwLXZkZWMteSArPSBya3ZkZWMubyBya3ZkZWMt aDI2NC5vIHJrdmRlYy12cDkubwo+ID4gPiA+ICtyb2NrY2hpcC12ZGVjLXkgKz0gcmt2ZGVjLm8g cmt2ZGVjLWgyNjQubyBya3ZkZWMtaGV2Yy5vIHJrdmRlYy12cDkubwo+ID4gCj4gPiBbc25pcF0K PiA+IAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlw L3JrdmRlYy9ya3ZkZWMtaGV2Yy5jCj4gPiA+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Jv Y2tjaGlwL3JrdmRlYy9ya3ZkZWMtaGV2Yy5jIG5ldyBmaWxlIG1vZGUKPiA+ID4gPiAxMDA2NDQK PiA+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjE5OTRlYTI0ZjBiZQo+ID4gPiA+IC0tLSAvZGV2 L251bGwKPiA+ID4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JrdmRl Yy9ya3ZkZWMtaGV2Yy5jCj4gPiA+ID4gQEAgLTAsMCArMSw4MTcgQEAKPiA+ID4gPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+ID4gPiArLyoKPiA+ID4gPiArICogUm9j a2NoaXAgVmlkZW8gRGVjb2RlciBIRVZDIGJhY2tlbmQKPiA+ID4gPiArICoKPiA+ID4gPiArICog Q29weXJpZ2h0IChDKSAyMDIzIENvbGxhYm9yYSwgTHRkLgo+ID4gPiA+ICsgKiAgICAgIFNlYmFz dGlhbiBGcmlja2UgPHNlYmFzdGlhbi5mcmlja2VAY29sbGFib3JhLmNvbT4KPiA+ID4gPiArICoK PiA+ID4gPiArICogQ29weXJpZ2h0IChDKSAyMDE5IENvbGxhYm9yYSwgTHRkLgo+ID4gPiA+ICsg KglCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBjb2xsYWJvcmEuY29tPgo+ID4gPiA+ ICsgKgo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgUm9ja2NoaXAgRWxlY3Ryb25pY3Mg Q28uLCBMdGQuCj4gPiA+ID4gKyAqCUplZmZ5IENoZW4gPGplZmZ5LmNoZW5Acm9jay1jaGlwcy5j b20+Cj4gPiA+ID4gKyAqLwo+ID4gPiA+ICsKPiA+ID4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDIt bWVtMm1lbS5oPgo+ID4gPiA+ICsKPiA+ID4gPiArI2luY2x1ZGUgInJrdmRlYy5oIgo+ID4gPiA+ ICsjaW5jbHVkZSAicmt2ZGVjLXJlZ3MuaCIKPiA+ID4gPiArI2luY2x1ZGUgInJrdmRlYy1oZXZj LWRhdGEuYyIKPiA+ID4gPiArCj4gPiA+ID4gKy8qIFNpemUgaW4gdTgvdTMyIHVuaXRzLiAqLwo+ ID4gPiA+ICsjZGVmaW5lIFJLVl9TQ0FMSU5HX0xJU1RfU0laRQkJMTM2MAo+ID4gPiA+ICsjZGVm aW5lIFJLVl9QUFNfU0laRQkJCSg4MCAvIDQpCj4gPiA+ID4gKyNkZWZpbmUgUktWX1BQU19MRU4J CQk2NAo+ID4gPiA+ICsjZGVmaW5lIFJLVl9SUFNfU0laRQkJCSgzMiAvIDQpCj4gPiA+ID4gKyNk ZWZpbmUgUktWX1JQU19MRU4JCQk2MDAKPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBya3ZkZWNf c3BzX3Bwc19wYWNrZXQgewo+ID4gPiA+ICsJdTMyIGluZm9bUktWX1BQU19TSVpFXTsKPiA+ID4g PiArfTsKPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBya3ZkZWNfcnBzX3BhY2tldCB7Cj4gPiA+ ID4gKwl1MzIgaW5mb1tSS1ZfUlBTX1NJWkVdOwo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4g PiArc3RydWN0IHJrdmRlY19wc19maWVsZCB7Cj4gPiA+ID4gKwl1MTYgb2Zmc2V0Owo+ID4gPiA+ ICsJdTggbGVuOwo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZSBQU19GSUVM RChfb2Zmc2V0LCBfbGVuKSBcCj4gPiA+ID4gKwkoKHN0cnVjdCBya3ZkZWNfcHNfZmllbGQpeyBf b2Zmc2V0LCBfbGVuIH0pCj4gPiA+ID4gKwo+ID4gPiA+ICsvKiBTUFMgKi8KPiA+ID4gPiArI2Rl ZmluZSBWSURFT19QQVJBTUVURVJfU0VUX0lECQkJCVBTX0ZJRUxEKDAsIAo0KQo+ID4gPiA+ICsj ZGVmaW5lIFNFUV9QQVJBTUVURVJfU0VUX0lECQkJCVBTX0ZJRUxEKDQsIAo0KQo+ID4gPiA+ICsj ZGVmaW5lIENIUk9NQV9GT1JNQVRfSURDCQkJCVBTX0ZJRUxEKDgsIAoyKQo+ID4gPiA+ICsjZGVm aW5lIFBJQ19XSURUSF9JTl9MVU1BX1NBTVBMRVMJCQlQU19GSUVMRCgxMCwgCjEzKQo+ID4gPiA+ ICsjZGVmaW5lIFBJQ19IRUlHSFRfSU5fTFVNQV9TQU1QTEVTCQkJUFNfRklFTEQoMjMsIAoxMykK PiA+ID4gPiArI2RlZmluZSBCSVRfREVQVEhfTFVNQQkJCQkJClBTX0ZJRUxEKDM2LCA0KQo+ID4g PiA+ICsjZGVmaW5lIEJJVF9ERVBUSF9DSFJPTUEJCQkJUFNfRklFTEQoNDAsIAo0KQo+ID4gPiA+ ICsjZGVmaW5lIExPRzJfTUFYX1BJQ19PUkRFUl9DTlRfTFNCCQkJUFNfRklFTEQoNDQsIAo1KQo+ ID4gPiA+ICsjZGVmaW5lIExPRzJfRElGRl9NQVhfTUlOX0xVTUFfQ09ESU5HX0JMT0NLX1NJWkUJ UFNfRklFTEQoNDksIDIpCj4gPiA+ID4gKyNkZWZpbmUgTE9HMl9NSU5fTFVNQV9DT0RJTkdfQkxP Q0tfU0laRQkJCVBTX0ZJRUxEKDUxLCAKMykKPiA+ID4gPiArI2RlZmluZSBMT0cyX01JTl9UUkFO U0ZPUk1fQkxPQ0tfU0laRQkJCVBTX0ZJRUxEKDU0LCAKMykKPiA+ID4gPiArI2RlZmluZSBMT0cy X0RJRkZfTUFYX01JTl9MVU1BX1RSQU5TRk9STV9CTE9DS19TSVpFCVBTX0ZJRUxEKDU3LCAKMikK PiA+ID4gPiArI2RlZmluZSBNQVhfVFJBTlNGT1JNX0hJRVJBUkNIWV9ERVBUSF9JTlRFUgkJUFNf RklFTEQoNTksIAozKQo+ID4gPiA+ICsjZGVmaW5lIE1BWF9UUkFOU0ZPUk1fSElFUkFSQ0hZX0RF UFRIX0lOVFJBCQlQU19GSUVMRCg2MiwgCjMpCj4gPiA+ID4gKyNkZWZpbmUgU0NBTElOR19MSVNU X0VOQUJMRURfRkxBRwkJCQpQU19GSUVMRCg2NSwgMSkKPiA+ID4gPiArI2RlZmluZSBBTVBfRU5B QkxFRF9GTEFHCQkJCVBTX0ZJRUxEKDY2LCAKMSkKPiA+ID4gPiArI2RlZmluZSBTQU1QTEVfQURB UFRJVkVfT0ZGU0VUX0VOQUJMRURfRkxBRwkJClBTX0ZJRUxEKDY3LCAxKQo+ID4gPiA+ICsjZGVm aW5lIFBDTV9FTkFCTEVEX0ZMQUcJCQkJUFNfRklFTEQoNjgsIAoxKQo+ID4gPiA+ICsjZGVmaW5l IFBDTV9TQU1QTEVfQklUX0RFUFRIX0xVTUEJCQlQU19GSUVMRCg2OSwgCjQpCj4gPiA+ID4gKyNk ZWZpbmUgUENNX1NBTVBMRV9CSVRfREVQVEhfQ0hST01BCQkJUFNfRklFTEQoNzMsIAo0KQo+ID4g PiA+ICsjZGVmaW5lIFBDTV9MT09QX0ZJTFRFUl9ESVNBQkxFRF9GTEFHCQkJClBTX0ZJRUxEKDc3 LCAxKQo+ID4gPiA+ICsjZGVmaW5lIExPRzJfRElGRl9NQVhfTUlOX1BDTV9MVU1BX0NPRElOR19C TE9DS19TSVpFCVBTX0ZJRUxEKDc4LCAKMykKPiA+ID4gPiArI2RlZmluZSBMT0cyX01JTl9QQ01f TFVNQV9DT0RJTkdfQkxPQ0tfU0laRQkJUFNfRklFTEQoODEsIAozKQo+ID4gPiA+ICsjZGVmaW5l IE5VTV9TSE9SVF9URVJNX1JFRl9QSUNfU0VUUwkJCVBTX0ZJRUxEKDg0LCAKNykKPiA+ID4gPiAr I2RlZmluZSBMT05HX1RFUk1fUkVGX1BJQ1NfUFJFU0VOVF9GTEFHCQkJClBTX0ZJRUxEKDkxLCAx KQo+ID4gPiA+ICsjZGVmaW5lIE5VTV9MT05HX1RFUk1fUkVGX1BJQ1NfU1BTCQkJUFNfRklFTEQo OTIsIAo2KQo+ID4gPiA+ICsjZGVmaW5lIFNQU19URU1QT1JBTF9NVlBfRU5BQkxFRF9GTEFHCQkJ UFNfRklFTEQoOTgsIAoxKQo+ID4gPiA+ICsjZGVmaW5lIFNUUk9OR19JTlRSQV9TTU9PVEhJTkdf RU5BQkxFRF9GTEFHCQlQU19GSUVMRCg5OSwgCjEpCj4gPiA+IAo+ID4gPiBEZXRsZXYgaXMgbW92 aW5nIHRvIHN0cnVjdHVyZXMgYW5kIG1lbWNweSwgd2l0aCBhIG1pbm9yIHBlcmZvcm1hbmNlCj4g PiA+IGdhaW4sIHRoaXMgaXMgdGhlIHdheSB0byBnbywgSSBjYW4gdW5kZXJzdGFuZCBpZiB0aGlz IGlzIHF1aXRlCj4gPiA+IGludm9sdmluZywgYnV0IG9uZSBvZiB5b3Ugd2lsbCBoYXZlIHRvIGRv IGl0Lgo+ID4gCj4gPiBTdXJlLCBhbmQgdGhpcyB3YXMgdGhlIHRoZSBtYWluIHJlYXNvbiB3aHkg SSBtZW50aW9uZWQgdGhpcyBpbmNvbWluZwo+ID4gc2VyaWVzIGJhY2sgaW4gWzFdLCB0byBjb25z aWRlciB0aGlzIHNlcmllcyBiZWZvcmUgZG9pbmcgdG9vIG11Y2gKPiA+IHJlLXdvcmsgb24gYSBm dXR1cmUgcmt2ZGVjMSArIHJrdmRlYzIgbWVyZ2Ugc2VyaWVzLgo+ID4gCj4gPiBBcyBtZW50aW9u ZWQgYWJvdmUsIEkgd2lsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgRGV0bGV2J3MgbmV3IHJrdmRl YzIKPiA+IHNlcmllcyBhbmQgc2VlIHdoYXQgSSBjYW4gZG8gaW4gYSB2MyB0byBlYXNlIGFueSBt ZXJnZSBjb25mbGljdHMuCj4gPiAKPiA+ID4gPiArLyogUFBTICovCj4gPiA+ID4gKyNkZWZpbmUg UElDX1BBUkFNRVRFUl9TRVRfSUQJCQkJClBTX0ZJRUxEKDEyOCwgNikKPiA+ID4gPiArI2RlZmlu ZSBQUFNfU0VRX1BBUkFNRVRFUl9TRVRfSUQJCQkKUFNfRklFTEQoMTM0LCA0KQo+ID4gPiA+ICsj ZGVmaW5lIERFUEVOREVOVF9TTElDRV9TRUdNRU5UU19FTkFCTEVEX0ZMQUcJCQpQU19GSUVMRCgx MzgsIDEpCj4gPiA+ID4gKyNkZWZpbmUgT1VUUFVUX0ZMQUdfUFJFU0VOVF9GTEFHCQkJClBTX0ZJ RUxEKDEzOSwgMSkKPiA+ID4gPiArI2RlZmluZSBOVU1fRVhUUkFfU0xJQ0VfSEVBREVSX0JJVFMJ CQkKUFNfRklFTEQoMTQwLCAxMykKPiA+ID4gPiArI2RlZmluZSBTSUdOX0RBVEFfSElESU5HX0VO QUJMRURfRkxBRwkJCQpQU19GSUVMRCgxNTMsIDEpCj4gPiA+ID4gKyNkZWZpbmUgQ0FCQUNfSU5J VF9QUkVTRU5UX0ZMQUcJCQkJClBTX0ZJRUxEKDE1NCwgMSkKPiA+ID4gPiArI2RlZmluZSBOVU1f UkVGX0lEWF9MMF9ERUZBVUxUX0FDVElWRQkJCQpQU19GSUVMRCgxNTUsIDQpCj4gPiA+ID4gKyNk ZWZpbmUgTlVNX1JFRl9JRFhfTDFfREVGQVVMVF9BQ1RJVkUJCQkKUFNfRklFTEQoMTU5LCA0KQo+ ID4gPiA+ICsjZGVmaW5lIElOSVRfUVBfTUlOVVMyNgkJCQkJClBTX0ZJRUxEKDE2MywgNykKPiA+ ID4gPiArI2RlZmluZSBDT05TVFJBSU5FRF9JTlRSQV9QUkVEX0ZMQUcJCQkKUFNfRklFTEQoMTcw LCAxKQo+ID4gPiA+ICsjZGVmaW5lIFRSQU5TRk9STV9TS0lQX0VOQUJMRURfRkxBRwkJCQpQU19G SUVMRCgxNzEsIDEpCj4gPiA+ID4gKyNkZWZpbmUgQ1VfUVBfREVMVEFfRU5BQkxFRF9GTEFHCQkJ ClBTX0ZJRUxEKDE3MiwgMSkKPiA+ID4gPiArI2RlZmluZSBMT0cyX01JTl9DVV9RUF9ERUxUQV9T SVpFCQkJClBTX0ZJRUxEKDE3MywgMykKPiA+ID4gPiArI2RlZmluZSBQUFNfQ0JfUVBfT0ZGU0VU CQkJCQpQU19GSUVMRCgxNzYsIDUpCj4gPiA+ID4gKyNkZWZpbmUgUFBTX0NSX1FQX09GRlNFVAkJ CQkKUFNfRklFTEQoMTgxLCA1KQo+ID4gPiA+ICsjZGVmaW5lIFBQU19TTElDRV9DSFJPTUFfUVBf T0ZGU0VUU19QUkVTRU5UX0ZMQUcJUFNfRklFTEQoMTg2LCAxKQo+ID4gPiA+ICsjZGVmaW5lIFdF SUdIVEVEX1BSRURfRkxBRwkJCQkKUFNfRklFTEQoMTg3LCAxKQo+ID4gPiA+ICsjZGVmaW5lIFdF SUdIVEVEX0JJUFJFRF9GTEFHCQkJCQpQU19GSUVMRCgxODgsIDEpCj4gPiA+ID4gKyNkZWZpbmUg VFJBTlNRVUFOVF9CWVBBU1NfRU5BQkxFRF9GTEFHCQkJUFNfRklFTEQoMTg5LCAKMSkKPiA+ID4g PiArI2RlZmluZSBUSUxFU19FTkFCTEVEX0ZMQUcJCQkJClBTX0ZJRUxEKDE5MCwgMSkKPiA+ID4g PiArI2RlZmluZSBFTlRST1BZX0NPRElOR19TWU5DX0VOQUJMRURfRkxBRwkJUFNfRklFTEQoMTkx LCAKMSkKPiA+ID4gPiArI2RlZmluZSBQUFNfTE9PUF9GSUxURVJfQUNST1NTX1NMSUNFU19FTkFC TEVEX0ZMQUcJUFNfRklFTEQoMTkyLCAxKQo+ID4gPiA+ICsjZGVmaW5lIExPT1BfRklMVEVSX0FD Uk9TU19USUxFU19FTkFCTEVEX0ZMQUcJCQpQU19GSUVMRCgxOTMsIDEpCj4gPiA+ID4gKyNkZWZp bmUgREVCTE9DS0lOR19GSUxURVJfT1ZFUlJJREVfRU5BQkxFRF9GTEFHCQkKUFNfRklFTEQoMTk0 LCAxKQo+ID4gPiA+ICsjZGVmaW5lIFBQU19ERUJMT0NLSU5HX0ZJTFRFUl9ESVNBQkxFRF9GTEFH CQkKUFNfRklFTEQoMTk1LCAxKQo+ID4gPiA+ICsjZGVmaW5lIFBQU19CRVRBX09GRlNFVF9ESVYy CQkJCQpQU19GSUVMRCgxOTYsIDQpCj4gPiA+ID4gKyNkZWZpbmUgUFBTX1RDX09GRlNFVF9ESVYy CQkJCQpQU19GSUVMRCgyMDAsIDQpCj4gPiA+ID4gKyNkZWZpbmUgTElTVFNfTU9ESUZJQ0FUSU9O X1BSRVNFTlRfRkxBRwkJCQpQU19GSUVMRCgyMDQsIDEpCj4gPiA+ID4gKyNkZWZpbmUgTE9HMl9Q QVJBTExFTF9NRVJHRV9MRVZFTAkJCQpQU19GSUVMRCgyMDUsIDMpCj4gPiA+ID4gKyNkZWZpbmUg U0xJQ0VfU0VHTUVOVF9IRUFERVJfRVhURU5TSU9OX1BSRVNFTlRfRkxBRwkKUFNfRklFTEQoMjA4 LCAxKQo+ID4gPiA+ICsjZGVmaW5lIE5VTV9USUxFX0NPTFVNTlMJCQkJUFNfRklFTEQoMjEyLCAK NSkKPiA+ID4gPiArI2RlZmluZSBOVU1fVElMRV9ST1dTCQkJCQlQU19GSUVMRCgyMTcsIAo1KQo+ ID4gPiA+ICsjZGVmaW5lIENPTFVNTl9XSURUSChpKQkJCQkJClBTX0ZJRUxEKDI1NiArICgoaSkg KiA4KSwgOCkKPiA+ID4gPiArI2RlZmluZSBST1dfSEVJR0hUKGkpCQkJCQkKUFNfRklFTEQoNDE2 ICsgKChpKSAqIDgpLCA4KQo+ID4gPiA+ICsjZGVmaW5lIFNDQUxJTkdfTElTVF9BRERSRVNTCQkJ CQpQU19GSUVMRCg1OTIsIDMyKQo+ID4gCj4gPiBbc25pcF0KPiA+IAo+ID4gPiA+ICsvKgo+ID4g PiA+ICsgKiBDcmVhdGlvbiBvZiB0aGUgUmVmZXJlbmNlIFBpY3R1cmUgU2V0IG1lbW9yeSBibG9i IGZvciB0aGUKPiA+ID4gPiBoYXJkd2FyZS4KPiA+ID4gPiArICogVGhlIGxheW91dCBsb29rcyBs aWtlIHRoaXM6Cj4gPiA+ID4gKyAqIFswXSAzMiBiaXRzIGZvciBMMCAoNiByZWZlcmVuY2VzICsg MiBiaXRzIG9mIHRoZSA3dGggcmVmZXJlbmNlKQo+ID4gPiA+ICsgKiBbMV0gMzIgYml0cyBmb3Ig TDAgKHJlbWFpbmluZyAzIGJpdHMgb2YgdGhlIDd0aCByZWZlcmVuY2UgKyA1Cj4gPiA+ID4gcmVm ZXJlbmNlcyArICogICAgICsgNCBiaXRzIG9mIHRoZSAxM3RoIHJlZmVyZW5jZSkKPiA+ID4gPiAr ICogWzJdIDExIGJpdHMgZm9yIEwwIChyZW1haW5pbmcgYml0IGZvciAxMyBhbmQgMiByZWZlcmVu Y2VzKSBhbmQKPiA+ID4gPiArICogICAgIDIxIGJpdHMgZm9yIEwxICg0IHJlZmVyZW5jZXMgKyBm aXJzdCBiaXQgb2YgNSkKPiA+ID4gPiArICogWzNdIDMyIGJpdHMgb2YgcGFkZGluZyB3aXRoIDBz Cj4gPiA+ID4gKyAqIFs0XSAzMiBiaXRzIGZvciBMMSAocmVtYWluaW5nIDQgYml0cyBmb3IgNSAr IDUgcmVmZXJlbmNlcyArIDMgYml0cwo+ID4gPiA+IG9mIDExKSArICogWzVdIDIyIGJpdHMgZm9y IEwxIChyZW1haW5pbmcgMiBiaXRzIG9mIDExIGFuZCA0Cj4gPiA+ID4gcmVmZXJlbmNlcykKPiA+ ID4gPiArICogICAgIGxvd2RlbGF5IGZsYWcgKGJpdCAyMyksIHJwcyBiaXQgb2Zmc2V0IGxvbmcg dGVybSAoYml0IDI0IC0gMzIpCj4gPiA+ID4gKyAqIFs2XSBycHMgYml0IG9mZnNldCBsb25nIHRl cm0gKGJpdCAxIC0gMyksICBycHMgYml0IG9mZnNldCBzaG9ydAo+ID4gPiA+IHRlcm0gKGJpdCA0 IC0gMTIpICsgKiAgICAgbnVtYmVyIG9mIHJlZmVyZW5jZXMgKGJpdCAxMyAtIDE2KSwKPiA+ID4g PiByZW1haW5pbmcgMTYgYml0cyBvZiBwYWRkaW5nIHdpdGggMHMgKyAqIFs3XSAzMiBiaXRzIG9m IHBhZGRpbmcgd2l0aAo+ID4gPiA+IDBzCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFRodXMgd2Ug aGF2ZSB0byBzZXQgdXAgcGFkZGluZyBpbiBiZXR3ZWVuIHJlZmVyZW5jZSA1IG9mIHRoZSBMMQo+ ID4gPiA+IGxpc3QuCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICtzdGF0aWMgdm9pZCBhc3NlbWJsZV9o d19ycHMoc3RydWN0IHJrdmRlY19jdHggKmN0eCwKPiA+ID4gPiArCQkJICAgIHN0cnVjdCBya3Zk ZWNfaGV2Y19ydW4gKnJ1bikKPiA+ID4gCj4gPiA+IFJvY2tjaGlwIGNhbGxzIHRoaXMgb25lIHRo ZSBzd3BfcnBzLCBpbiB0aGUgc2Vuc2UgdGhlIHRoZSBzbGljZSBoZWFkZXIKPiA+ID4gYW5kIGl0 cyBlbmNsb3NlZCByZWZlcmVuY2UgYXJlIHBhcnNlZCBieSBzb2Z0d2FyZS4gRGV0bGV2IGltcGxl bWVudHMKPiA+ID4gdGhlIEhXIFJQUyAod2hpY2ggcmVxdWlyZXMgYW4gZXh0ZW5kZWQgY29udHJv bCkgc2luY2UgU1cgUlBTIHdhc24ndAo+ID4gPiBkb2N1bWVudGVkIGFuZCB0aGlzIGltcGxlbWVu dGF0aW9uIGRpZCBub3Qgd29yayBmb3IgbmV3ZXIgY2hpcC4gV2UgaGF2ZQo+ID4gPiBubyBpbmZv cm1hdGlvbiB0aGF0IEhXIFJQUyB3b3VsZCB3b3JrIG9uIFJLMzM5OSBhbmQgb2xkZXIsIEknbSBq dXN0Cj4gPiA+IGFza2luZyB0byByZW5hbWUgdG8gd2UgY2FuIGRpZmZlcmVudGlhdGUgaXQuCj4g PiAKPiA+IFN1cmUsIEkgY2FuIHJlbmFtZSB0aGlzIHRoaXMgYXNzZW1ibGVfc3dfcnBzIG9yIHNp bWlsYXIgaW4gYSB2My4KPiA+IAo+ID4gPiA+ICt7Cj4gPiA+ID4gKwljb25zdCBzdHJ1Y3QgdjRs Ml9jdHJsX2hldmNfZGVjb2RlX3BhcmFtcyAqZGVjb2RlX3BhcmFtcyA9Cj4gPiA+ID4gcnVuLT5k ZWNvZGVfcGFyYW1zOyArCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcyA9Cj4g PiA+ID4gcnVuLT5zcHM7Cj4gPiA+ID4gKwljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc2xp Y2VfcGFyYW1zICpzbF9wYXJhbXM7Cj4gPiA+ID4gKwljb25zdCBzdHJ1Y3QgdjRsMl9oZXZjX2Rw Yl9lbnRyeSAqZHBiOwo+ID4gPiA+ICsJc3RydWN0IHJrdmRlY19oZXZjX2N0eCAqaGV2Y19jdHgg PSBjdHgtPnByaXY7Cj4gPiA+ID4gKwlzdHJ1Y3Qgcmt2ZGVjX2hldmNfcHJpdl90YmwgKnByaXZf dGJsID0gaGV2Y19jdHgtPnByaXZfdGJsLmNwdTsKPiA+ID4gPiArCXN0cnVjdCBya3ZkZWNfcnBz X3BhY2tldCAqaHdfcHM7Cj4gPiA+ID4gKwlpbnQgaSwgajsKPiA+ID4gPiArCXVuc2lnbmVkIGlu dCBsb3dkZWxheTsKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgV1JJVEVfUlBTKHZhbHVlLCBm aWVsZCkgc2V0X3BzX2ZpZWxkKGh3X3BzLT5pbmZvLCBmaWVsZCwKPiA+ID4gPiB2YWx1ZSkKPiA+ ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgUkVGX1BJQ19MT05HX1RFUk1fTDAoaSkJCQlQU19GSUVM RCgoaSkgKiA1LCAKMSkKPiA+ID4gPiArI2RlZmluZSBSRUZfUElDX0lEWF9MMChpKQkJCVBTX0ZJ RUxEKDEgKyAoKGkpICogNSksIDQpCj4gPiA+ID4gKyNkZWZpbmUgUkVGX1BJQ19MT05HX1RFUk1f TDEoaSkJCQlQU19GSUVMRCgoKGkpIDwgNSA/IAo3NSA6IDEzMikgKwo+ID4gPiA+ICgoaSkgKiA1 KSwgMSkgKyNkZWZpbmUgUkVGX1BJQ19JRFhfTDEoaSkJCQkKUFNfRklFTEQoKChpKSA8IDQgPyA3 NiA6Cj4gPiA+ID4gMTI4KSArICgoaSkgKiA1KSwgNCkgKwo+ID4gPiA+ICsjZGVmaW5lIExPV0RF TEFZCQkJCVBTX0ZJRUxEKDE4MiwgMSkKPiA+ID4gPiArI2RlZmluZSBMT05HX1RFUk1fUlBTX0JJ VF9PRkZTRVQJCVBTX0ZJRUxEKDE4MywgMTApCj4gPiA+ID4gKyNkZWZpbmUgU0hPUlRfVEVSTV9S UFNfQklUX09GRlNFVAkJUFNfRklFTEQoMTkzLCA5KQo+ID4gPiA+ICsjZGVmaW5lIE5VTV9SUFNf UE9DCQkJCVBTX0ZJRUxEKDIwMiwgNCkKPiA+ID4gPiArCj4gPiA+ID4gKwlmb3IgKGogPSAwOyBq IDwgcnVuLT5udW1fc2xpY2VzOyBqKyspIHsKPiA+ID4gPiArCQl1aW50IHN0X2JpdF9vZmZzZXQg PSAwOwo+ID4gPiA+ICsJCXVpbnQgbnVtX2wwX3JlZnMgPSAwOwo+ID4gPiA+ICsJCXVpbnQgbnVt X2wxX3JlZnMgPSAwOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlzbF9wYXJhbXMgPSAmcnVuLT5zbGlj ZXNfcGFyYW1zW2pdOwo+ID4gPiA+ICsJCWRwYiA9IGRlY29kZV9wYXJhbXMtPmRwYjsKPiA+ID4g PiArCj4gPiA+ID4gKwkJaWYgKHNsX3BhcmFtcy0+c2xpY2VfdHlwZSAhPSBWNEwyX0hFVkNfU0xJ Q0VfVFlQRV9JKSB7Cj4gPiA+ID4gKwkJCW51bV9sMF9yZWZzID0gc2xfcGFyYW1zLQo+bnVtX3Jl Zl9pZHhfbDBfYWN0aXZlX21pbnVzMSArIDE7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCQlpZiAoc2xf cGFyYW1zLT5zbGljZV90eXBlID09IApWNEwyX0hFVkNfU0xJQ0VfVFlQRV9CKQo+ID4gPiA+ICsJ CQkJbnVtX2wxX3JlZnMgPSBzbF9wYXJhbXMtCj5udW1fcmVmX2lkeF9sMV9hY3RpdmVfbWludXMx ICsgMTsKPiA+ID4gPiArCj4gPiA+ID4gKwkJCWxvd2RlbGF5ID0gMTsKPiA+ID4gPiArCQl9IGVs c2Ugewo+ID4gPiA+ICsJCQlsb3dkZWxheSA9IDA7Cj4gPiA+ID4gKwkJfQo+ID4gPiA+ICsKPiA+ ID4gPiArCQlod19wcyA9ICZwcml2X3RibC0+cnBzW2pdOwo+ID4gPiA+ICsJCW1lbXNldChod19w cywgMCwgc2l6ZW9mKCpod19wcykpOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlmb3IgKGkgPSAwOyBp IDwgbnVtX2wwX3JlZnM7IGkrKykgewo+ID4gPiA+ICsJCQljb25zdCBzdHJ1Y3QgdjRsMl9oZXZj X2RwYl9lbnRyeSBkcGJfbDAgPQo+ID4gPiA+IGRwYltzbF9wYXJhbXMtPnJlZl9pZHhfbDBbaV1d OyArCj4gPiA+ID4gKwkJCVdSSVRFX1JQUyghIShkcGJfbDAuZmxhZ3MgJgo+ID4gPiA+IFY0TDJf SEVWQ19EUEJfRU5UUllfTE9OR19URVJNX1JFRkVSRU5DRSksCj4gPiA+ID4gKwkJCQkgIFJFRl9Q SUNfTE9OR19URVJNX0wwKGkpKTsKPiA+ID4gPiArCQkJV1JJVEVfUlBTKHNsX3BhcmFtcy0+cmVm X2lkeF9sMFtpXSwgClJFRl9QSUNfSURYX0wwKGkpKTsKPiA+ID4gPiArCj4gPiA+ID4gKwkJCWlm IChkcGJfbDAucGljX29yZGVyX2NudF92YWwgPiBzbF9wYXJhbXMtCj5zbGljZV9waWNfb3JkZXJf Y250KQo+ID4gPiA+ICsJCQkJbG93ZGVsYXkgPSAwOwo+ID4gPiA+ICsJCX0KPiA+ID4gPiArCj4g PiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IG51bV9sMV9yZWZzOyBpKyspIHsKPiA+ID4gPiArCQkJ Y29uc3Qgc3RydWN0IHY0bDJfaGV2Y19kcGJfZW50cnkgZHBiX2wxID0KPiA+ID4gPiBkcGJbc2xf cGFyYW1zLT5yZWZfaWR4X2wxW2ldXTsgKwkJCWludCAKaXNfbG9uZ190ZXJtID0KPiA+ID4gPiAr CQkJCSEhKGRwYl9sMS5mbGFncyAmIApWNEwyX0hFVkNfRFBCX0VOVFJZX0xPTkdfVEVSTV9SRUZF UkVOQ0UpOwo+ID4gPiA+ICsKPiA+ID4gPiArCQkJV1JJVEVfUlBTKGlzX2xvbmdfdGVybSwgUkVG X1BJQ19MT05HX1RFUk1fTDEoaSkpOwo+ID4gPiA+ICsJCQlXUklURV9SUFMoc2xfcGFyYW1zLT5y ZWZfaWR4X2wxW2ldLCAKUkVGX1BJQ19JRFhfTDEoaSkpOwo+ID4gPiA+ICsKPiA+ID4gPiArCQkJ aWYgKGRwYl9sMS5waWNfb3JkZXJfY250X3ZhbCA+IHNsX3BhcmFtcy0KPnNsaWNlX3BpY19vcmRl cl9jbnQpCj4gPiA+ID4gKwkJCQlsb3dkZWxheSA9IDA7Cj4gPiA+ID4gKwkJfQo+ID4gPiA+ICsK PiA+ID4gPiArCQlXUklURV9SUFMobG93ZGVsYXksIExPV0RFTEFZKTsKPiA+ID4gPiArCj4gPiA+ ID4gKwkJaWYgKCEoZGVjb2RlX3BhcmFtcy0+ZmxhZ3MgJiAKVjRMMl9IRVZDX0RFQ09ERV9QQVJB TV9GTEFHX0lEUl9QSUMpKQo+ID4gPiA+IHsKPiA+ID4gPiArCQkJaWYgKHNsX3BhcmFtcy0+c2hv cnRfdGVybV9yZWZfcGljX3NldF9zaXplKQo+ID4gPiA+ICsJCQkJc3RfYml0X29mZnNldCA9IHNs X3BhcmFtcy0KPnNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc2l6ZTsKPiA+ID4gPiArCQkJZWxzZSBp ZiAoc3BzLT5udW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMgPiAxKQo+ID4gPiA+ICsJCQkJc3Rf Yml0X29mZnNldCA9IGZscyhzcHMtCj5udW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMgLSAxKTsK PiA+ID4gPiArCQl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCVdSSVRFX1JQUyhzdF9iaXRfb2Zmc2V0 ICsgc2xfcGFyYW1zLQo+bG9uZ190ZXJtX3JlZl9waWNfc2V0X3NpemUsCj4gPiA+ID4gKwkJCSAg TE9OR19URVJNX1JQU19CSVRfT0ZGU0VUKTsKPiA+ID4gPiArCQlXUklURV9SUFMoc2xfcGFyYW1z LT5zaG9ydF90ZXJtX3JlZl9waWNfc2V0X3NpemUsCj4gPiA+ID4gKwkJCSAgU0hPUlRfVEVSTV9S UFNfQklUX09GRlNFVCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCVdSSVRFX1JQUyhkZWNvZGVfcGFy YW1zLT5udW1fcG9jX3N0X2N1cnJfYmVmb3JlICsKPiA+ID4gPiArCQkJICBkZWNvZGVfcGFyYW1z LT5udW1fcG9jX3N0X2N1cnJfYWZ0ZXIgKwo+ID4gPiA+ICsJCQkgIGRlY29kZV9wYXJhbXMtPm51 bV9wb2NfbHRfY3VyciwKPiA+ID4gPiArCQkJICBOVU1fUlBTX1BPQyk7Cj4gPiA+ID4gKwl9Cj4g PiA+ID4gK30KPiA+IAo+ID4gW3NuaXBdCj4gPiAKPiA+ID4gTG9va3MgZ29vZCBvdGhlcndpc2Uu IFBsZWFzZSBsZXQgbWUga25vdyB5b3VyIHBsYW4gdG8gY29tYmluZSBvciBwcmVwYXJlCj4gPiA+ IGZvciBib3RoIHNlcmllcy4KPiA+IAo+ID4gSSB3aWxsIHRha2UgYSBjbG9zZXIgbG9vayBhdCBE ZXRsZXYncyBuZXcgcmt2ZGVjMiBzZXJpZXMgYW5kIHNlZSB3aGF0IEkKPiA+IGNhbiBkbyBpbiBh IHYzIHRvIGVhc2UgYW55IG1lcmdlIGNvbmZsaWN0cy4KPiA+IAo+ID4gSSBhbSBqdXN0IGEgbGl0 dGxlIGJpdCBzYWQgdGhhdCB0aGlzIHNlcmllcyBoYXMgYmVlbiBjb21wbGV0ZWx5IGlnbm9yZWQK PiA+IGZvciB0aGUgY29udGludWVkIHdvcmsgd2l0aCBya3ZkZWMyLCB0aGUgbmV3IHNlcmllcyBl dmVuIHNlZW0gdG8KPiA+IGltcGxlbWVudCBhIHNsaWdodGx5IGRpZmZlcmVudCB2YXJpYW50IHN5 c3RlbSB3aGVuIHRoaXMgaGFzIGJlZW4gaGVyZQo+ID4gd2FpdGluZyBhbGwgdGhpcyB0aW1lIDot Lwo+ID4gCj4gPiBSZWdhcmRzLAo+ID4gSm9uYXMKPiA+IAo+ID4gPiBOaWNvbGFzCgoKCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtcm9ja2No aXAgbWFpbGluZyBsaXN0CkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAo=