From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E3EC3FC1 for ; Tue, 24 Aug 2021 12:35:38 +0000 (UTC) Received: from [IPv6:2a01:e0a:4cb:a870:9cd0:b46:4954:d5f7] (unknown [IPv6:2a01:e0a:4cb:a870:9cd0:b46:4954:d5f7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id CE3F91F42719; Tue, 24 Aug 2021 13:35:35 +0100 (BST) Subject: Re: [PATCH] media: hantro: Add support of compressed reference buffers To: Ezequiel Garcia Cc: Mauro Carvalho Chehab , Philipp Zabel , Greg KH , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Chris Healy , linux-media , Linux Kernel Mailing List , "open list:ARM/Rockchip SoC..." , linux-staging@lists.linux.dev, linux-arm-kernel , Collabora Kernel ML , Lucas Stach , Hans Verkuil , Nicolas Dufresne References: <20210823162916.824336-1-benjamin.gaignard@collabora.com> From: Benjamin Gaignard Message-ID: <541e9ace-3b54-b46d-30ef-c01afc84fc41@collabora.com> Date: Tue, 24 Aug 2021 14:35:32 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 Precedence: bulk X-Mailing-List: linux-staging@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Le 24/08/2021 à 13:22, Ezequiel Garcia a écrit : > Hi Benjamin, > > On Mon, 23 Aug 2021 at 13:29, Benjamin Gaignard > wrote: >> Reference frame compression is a feature added in G2 decoder to compress >> frame buffers so that the bandwidth of storing/loading reference frames >> can be reduced, especially when the resolution of decoded stream is of >> high definition. >> >> Compressed help to increase the performance of the whole stack, it could >> be up to 50 fps (against 45 fps) on IMX8MQ. >> The impact of compressed frames is confirmed when using perf to monitor >> the number of memory accesses with or without compression feature. >> The following command >> perf stat -a -e imx8_ddr0/cycles/,imx8_ddr0/read-cycles/,imx8_ddr0/write-cycles/ gst-launch-1.0 filesrc location=Jockey_3840x2160_120fps_420_8bit_HEVC_RAW.hevc ! queue ! h265parse ! v4l2slh265dec ! fakesink >> >> give us these results >> without compression feature: >> Performance counter stats for 'system wide': >> >> 14965816743 imx8_ddr0/cycles/ >> 889197312 imx8_ddr0/read-cycles/ >> 1819348862 imx8_ddr0/write-cycles/ >> >> 18.707373001 seconds time elapsed >> >> with compression feature: >> Performance counter stats for 'system wide': >> >> 13750218243 imx8_ddr0/cycles/ >> 402428744 imx8_ddr0/read-cycles/ >> 1255676693 imx8_ddr0/write-cycles/ >> >> 17.188320061 seconds time elapsed >> >> As expected the number of read/write cycles are really lower when compression >> is used. >> >> Signed-off-by: Benjamin Gaignard >> --- >> .../staging/media/hantro/hantro_g2_hevc_dec.c | 31 ++++++++++++-- >> drivers/staging/media/hantro/hantro_g2_regs.h | 4 ++ >> drivers/staging/media/hantro/hantro_hevc.c | 41 ++++++++++++++++++- >> drivers/staging/media/hantro/hantro_hw.h | 2 + >> 4 files changed, 74 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/staging/media/hantro/hantro_g2_hevc_dec.c b/drivers/staging/media/hantro/hantro_g2_hevc_dec.c >> index 340efb57fd18..da90acd922f7 100644 >> --- a/drivers/staging/media/hantro/hantro_g2_hevc_dec.c >> +++ b/drivers/staging/media/hantro/hantro_g2_hevc_dec.c >> @@ -366,10 +366,12 @@ static int set_ref(struct hantro_ctx *ctx) >> const struct v4l2_ctrl_hevc_pps *pps = ctrls->pps; >> const struct v4l2_ctrl_hevc_decode_params *decode_params = ctrls->decode_params; >> const struct v4l2_hevc_dpb_entry *dpb = decode_params->dpb; >> - dma_addr_t luma_addr, chroma_addr, mv_addr = 0; >> + dma_addr_t luma_addr, chroma_addr, mv_addr, compress_luma_addr, compress_chroma_addr = 0; >> struct hantro_dev *vpu = ctx->dev; >> size_t cr_offset = hantro_hevc_chroma_offset(sps); >> size_t mv_offset = hantro_hevc_motion_vectors_offset(sps); >> + size_t compress_luma_offset = hantro_hevc_luma_compress_offset(sps); >> + size_t compress_chroma_offset = hantro_hevc_chroma_compress_offset(sps); >> u32 max_ref_frames; >> u16 dpb_longterm_e; >> static const struct hantro_reg cur_poc[] = { >> @@ -442,15 +444,28 @@ static int set_ref(struct hantro_ctx *ctx) >> if (!luma_addr) >> return -ENOMEM; >> >> + /* >> + * An allocated frame stores Y and UV planes, motion vectors and >> + * compressed Y and UV planes. Compute all these offsets given >> + * the frame resolution and the pixel format. >> + */ > The patch looks good, but I feel we still need to answer some questions > before it can be merged. > > * Is this a G2 feature? If so, can it be used on VP9? It isn't tagged as HEVC feature in the hardware spec so I guess it could be used for VP9 too. > > * Enabling compression needs more memory. You are proposing > to allocate frames and compressed frames contiguously, > but so we need to measure the impact of that. Perhaps separate > buffers will be better to avoid CMA pressure? Perhaps a given > user will want to turn this off to reduce memory usage? I could add a module parameter to turn on/off this feature but the among of additional memory used is very limited compare to frame size. For example for a 3840x2160 video it adds 68KB while the frame itself is around 12150KB. > > More importantly, I'm wary of adding HEVC features > without being able to test anything. > > Can you work with NXP maintainers to get the GPC/BLK-CTRL [1] sorted out? Yes, I have already give a try: https://lkml.org/lkml/2021/7/7/836 Benjamin > > Then, we have the issue of missing mainlined userspace as well, > but I suppose that's well underway :-) > > [1] https://www.spinics.net/lists/arm-kernel/msg913881.html > > Cheers, > Eze > >> chroma_addr = luma_addr + cr_offset; >> mv_addr = luma_addr + mv_offset; >> + compress_luma_addr = luma_addr + compress_luma_offset; >> + compress_chroma_addr = luma_addr + compress_chroma_offset; >> >> if (dpb[i].rps == V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR) >> dpb_longterm_e |= BIT(V4L2_HEVC_DPB_ENTRIES_NUM_MAX - 1 - i); >> >> + /* >> + * For each reference frame Y, UV, motion vector and >> + * compressed Y, UV buffers addresses must be set. >> + */ >> hantro_write_addr(vpu, G2_REG_ADDR_REF(i), luma_addr); >> hantro_write_addr(vpu, G2_REG_CHR_REF(i), chroma_addr); >> hantro_write_addr(vpu, G2_REG_DMV_REF(i), mv_addr); >> + hantro_write_addr(vpu, G2_COMP_ADDR_REF(i), compress_luma_addr); >> + hantro_write_addr(vpu, G2_COMP_CHR_REF(i), compress_chroma_addr); >> } >> >> luma_addr = hantro_hevc_get_ref_buf(ctx, decode_params->pic_order_cnt_val); >> @@ -459,7 +474,12 @@ static int set_ref(struct hantro_ctx *ctx) >> >> chroma_addr = luma_addr + cr_offset; >> mv_addr = luma_addr + mv_offset; >> + compress_luma_addr = luma_addr + compress_luma_offset; >> + compress_chroma_addr = luma_addr + compress_chroma_offset; >> >> + /* The next decoded frame as to be put as the last reference frame entry */ >> + hantro_write_addr(vpu, G2_COMP_ADDR_REF(i), compress_luma_addr); >> + hantro_write_addr(vpu, G2_COMP_CHR_REF(i), compress_chroma_addr); >> hantro_write_addr(vpu, G2_REG_ADDR_REF(i), luma_addr); >> hantro_write_addr(vpu, G2_REG_CHR_REF(i), chroma_addr); >> hantro_write_addr(vpu, G2_REG_DMV_REF(i++), mv_addr); >> @@ -467,13 +487,18 @@ static int set_ref(struct hantro_ctx *ctx) >> hantro_write_addr(vpu, G2_ADDR_DST, luma_addr); >> hantro_write_addr(vpu, G2_ADDR_DST_CHR, chroma_addr); >> hantro_write_addr(vpu, G2_ADDR_DST_MV, mv_addr); >> + hantro_write_addr(vpu, G2_COMP_ADDR_DST, compress_luma_addr); >> + hantro_write_addr(vpu, G2_COMP_CHR, compress_chroma_addr); >> >> hantro_hevc_ref_remove_unused(ctx); >> >> + /* Unused reference frames entries most be cleared */ >> for (; i < V4L2_HEVC_DPB_ENTRIES_NUM_MAX; i++) { >> hantro_write_addr(vpu, G2_REG_ADDR_REF(i), 0); >> hantro_write_addr(vpu, G2_REG_CHR_REF(i), 0); >> hantro_write_addr(vpu, G2_REG_DMV_REF(i), 0); >> + hantro_write_addr(vpu, G2_COMP_ADDR_REF(i), 0); >> + hantro_write_addr(vpu, G2_COMP_CHR_REF(i), 0); >> } >> >> hantro_reg_write(vpu, &g2_refer_lterm_e, dpb_longterm_e); >> @@ -564,8 +589,8 @@ int hantro_g2_hevc_dec_run(struct hantro_ctx *ctx) >> /* Don't disable output */ >> hantro_reg_write(vpu, &g2_out_dis, 0); >> >> - /* Don't compress buffers */ >> - hantro_reg_write(vpu, &g2_ref_compress_bypass, 1); >> + /* Compress buffers */ >> + hantro_reg_write(vpu, &g2_ref_compress_bypass, 0); >> >> /* use NV12 as output format */ >> hantro_reg_write(vpu, &g2_out_rs_e, 1); >> diff --git a/drivers/staging/media/hantro/hantro_g2_regs.h b/drivers/staging/media/hantro/hantro_g2_regs.h >> index bb22fa921914..2a23e8657db1 100644 >> --- a/drivers/staging/media/hantro/hantro_g2_regs.h >> +++ b/drivers/staging/media/hantro/hantro_g2_regs.h >> @@ -191,6 +191,10 @@ >> #define G2_TILE_FILTER (G2_SWREG(179)) >> #define G2_TILE_SAO (G2_SWREG(181)) >> #define G2_TILE_BSD (G2_SWREG(183)) >> +#define G2_COMP_ADDR_DST (G2_SWREG(190)) >> +#define G2_COMP_ADDR_REF(i) (G2_SWREG(192) + ((i) * 0x8)) >> +#define G2_COMP_CHR (G2_SWREG(224)) >> +#define G2_COMP_CHR_REF(i) (G2_SWREG(226) + ((i) * 0x8)) >> >> #define g2_strm_buffer_len G2_DEC_REG(258, 0, 0xffffffff) >> #define g2_strm_start_offset G2_DEC_REG(259, 0, 0xffffffff) >> diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c >> index 5347f5a41c2a..78e5ceda520c 100644 >> --- a/drivers/staging/media/hantro/hantro_hevc.c >> +++ b/drivers/staging/media/hantro/hantro_hevc.c >> @@ -27,6 +27,13 @@ >> >> #define G2_ALIGN 16 >> >> +#define CBS_SIZE 16 /* compression table size in bytes */ >> +#define CBS_LUMA 8 /* luminance CBS is composed of 1 8x8 coded block */ >> +#define CBS_CHROMA_W (8 * 2) /* chrominance CBS is composed of two 8x4 coded >> + * blocks, with Cb CB first then Cr CB following >> + */ >> +#define CBS_CHROMA_H 4 >> + >> size_t hantro_hevc_chroma_offset(const struct v4l2_ctrl_hevc_sps *sps) >> { >> int bytes_per_pixel = sps->bit_depth_luma_minus8 == 0 ? 1 : 2; >> @@ -61,12 +68,44 @@ static size_t hantro_hevc_mv_size(const struct v4l2_ctrl_hevc_sps *sps) >> return mv_size; >> } >> >> +size_t hantro_hevc_luma_compress_offset(const struct v4l2_ctrl_hevc_sps *sps) >> +{ >> + return hantro_hevc_motion_vectors_offset(sps) + hantro_hevc_mv_size(sps); >> +} >> + >> +static size_t hantro_hevc_luma_compress_size(const struct v4l2_ctrl_hevc_sps *sps) >> +{ >> + u32 pic_width_in_cbsy = >> + round_up((sps->pic_width_in_luma_samples + CBS_LUMA - 1) / CBS_LUMA, CBS_SIZE); >> + u32 pic_height_in_cbsy = (sps->pic_height_in_luma_samples + CBS_LUMA - 1) / CBS_LUMA; >> + >> + return round_up(pic_width_in_cbsy * pic_height_in_cbsy, CBS_SIZE); >> +} >> + >> +size_t hantro_hevc_chroma_compress_offset(const struct v4l2_ctrl_hevc_sps *sps) >> +{ >> + return hantro_hevc_luma_compress_offset(sps) + hantro_hevc_luma_compress_size(sps); >> +} >> + >> +static size_t hantro_hevc_chroma_compress_size(const struct v4l2_ctrl_hevc_sps *sps) >> +{ >> + u32 pic_width_in_cbsc = >> + round_up((sps->pic_width_in_luma_samples + CBS_CHROMA_W - 1) >> + / CBS_CHROMA_W, CBS_SIZE); >> + u32 pic_height_in_cbsc = (sps->pic_height_in_luma_samples / 2 + CBS_CHROMA_H - 1) >> + / CBS_CHROMA_H; >> + >> + return round_up(pic_width_in_cbsc * pic_height_in_cbsc, CBS_SIZE); >> +} >> + >> static size_t hantro_hevc_ref_size(struct hantro_ctx *ctx) >> { >> const struct hantro_hevc_dec_ctrls *ctrls = &ctx->hevc_dec.ctrls; >> const struct v4l2_ctrl_hevc_sps *sps = ctrls->sps; >> >> - return hantro_hevc_motion_vectors_offset(sps) + hantro_hevc_mv_size(sps); >> + return hantro_hevc_motion_vectors_offset(sps) + hantro_hevc_mv_size(sps) + >> + hantro_hevc_luma_compress_size(sps) + >> + hantro_hevc_chroma_compress_size(sps); >> } >> >> static void hantro_hevc_ref_free(struct hantro_ctx *ctx) >> diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h >> index df7b5e3a57b9..d5c002d0e765 100644 >> --- a/drivers/staging/media/hantro/hantro_hw.h >> +++ b/drivers/staging/media/hantro/hantro_hw.h >> @@ -255,6 +255,8 @@ dma_addr_t hantro_hevc_get_ref_buf(struct hantro_ctx *ctx, int poc); >> void hantro_hevc_ref_remove_unused(struct hantro_ctx *ctx); >> size_t hantro_hevc_chroma_offset(const struct v4l2_ctrl_hevc_sps *sps); >> size_t hantro_hevc_motion_vectors_offset(const struct v4l2_ctrl_hevc_sps *sps); >> +size_t hantro_hevc_luma_compress_offset(const struct v4l2_ctrl_hevc_sps *sps); >> +size_t hantro_hevc_chroma_compress_offset(const struct v4l2_ctrl_hevc_sps *sps); >> >> static inline size_t >> hantro_h264_mv_size(unsigned int width, unsigned int height) >> -- >> 2.25.1 >> 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 X-Spam-Level: X-Spam-Status: No, score=-17.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B0CEDC4338F for ; Tue, 24 Aug 2021 12:36:11 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 6A8A8610FD for ; Tue, 24 Aug 2021 12:36:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6A8A8610FD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ldxCzljjdkeKTeWsBM2ztjJdBgK6tHk+cv17IufFNxk=; b=K0Aa1iuH80JSoK4S6rKEiIo7wy wHB08peybvSf3hForS/ivRcGR2Abr8uvuLkI7QRczATfqkqSsnxz34Z1vLLW/KuiRNfsZ41cmvitL Rm9EAeABcn0AUzXmqDBc5z+LRa1KzC3ffqkY372UlQO6yH2G8qMdyE3grl5BnZkObIsHuwmH6cKL+ tG5xeVUvxszkbyquC3l61SOirvFB9hAHGkFlky2Vu1+njosgZKeHhpNnGaLxoniIg7SF7F8EV4rAA RBwNFa8DFT37Aw9kfOhc7PiwxYIl1sMnEGFYx5ao6BAHMHJp9wQ0EK1WuUAmCtbHsKKTsqwq0t6HC HiM/FAMw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mIVew-0034Cf-8d; Tue, 24 Aug 2021 12:36:06 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mIVeg-00347B-Da; Tue, 24 Aug 2021 12:35:54 +0000 Received: from [IPv6:2a01:e0a:4cb:a870:9cd0:b46:4954:d5f7] (unknown [IPv6:2a01:e0a:4cb:a870:9cd0:b46:4954:d5f7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id CE3F91F42719; Tue, 24 Aug 2021 13:35:35 +0100 (BST) Subject: Re: [PATCH] media: hantro: Add support of compressed reference buffers To: Ezequiel Garcia Cc: Mauro Carvalho Chehab , Philipp Zabel , Greg KH , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Chris Healy , linux-media , Linux Kernel Mailing List , "open list:ARM/Rockchip SoC..." , linux-staging@lists.linux.dev, linux-arm-kernel , Collabora Kernel ML , Lucas Stach , Hans Verkuil , Nicolas Dufresne References: <20210823162916.824336-1-benjamin.gaignard@collabora.com> From: Benjamin Gaignard Message-ID: <541e9ace-3b54-b46d-30ef-c01afc84fc41@collabora.com> Date: Tue, 24 Aug 2021 14:35:32 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210824_053550_753902_9505C02F X-CRM114-Status: GOOD ( 37.44 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org CkxlIDI0LzA4LzIwMjEgw6AgMTM6MjIsIEV6ZXF1aWVsIEdhcmNpYSBhIMOpY3JpdMKgOgo+IEhp IEJlbmphbWluLAo+Cj4gT24gTW9uLCAyMyBBdWcgMjAyMSBhdCAxMzoyOSwgQmVuamFtaW4gR2Fp Z25hcmQKPiA8YmVuamFtaW4uZ2FpZ25hcmRAY29sbGFib3JhLmNvbT4gd3JvdGU6Cj4+IFJlZmVy ZW5jZSBmcmFtZSBjb21wcmVzc2lvbiBpcyBhIGZlYXR1cmUgYWRkZWQgaW4gRzIgZGVjb2RlciB0 byBjb21wcmVzcwo+PiBmcmFtZSBidWZmZXJzIHNvIHRoYXQgdGhlIGJhbmR3aWR0aCBvZiBzdG9y aW5nL2xvYWRpbmcgcmVmZXJlbmNlIGZyYW1lcwo+PiBjYW4gYmUgcmVkdWNlZCwgZXNwZWNpYWxs eSB3aGVuIHRoZSByZXNvbHV0aW9uIG9mIGRlY29kZWQgc3RyZWFtIGlzIG9mCj4+IGhpZ2ggZGVm aW5pdGlvbi4KPj4KPj4gQ29tcHJlc3NlZCBoZWxwIHRvIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5j ZSBvZiB0aGUgd2hvbGUgc3RhY2ssIGl0IGNvdWxkCj4+IGJlIHVwIHRvIDUwIGZwcyAoYWdhaW5z dCA0NSBmcHMpIG9uIElNWDhNUS4KPj4gVGhlIGltcGFjdCBvZiBjb21wcmVzc2VkIGZyYW1lcyBp cyBjb25maXJtZWQgd2hlbiB1c2luZyBwZXJmIHRvIG1vbml0b3IKPj4gdGhlIG51bWJlciBvZiBt ZW1vcnkgYWNjZXNzZXMgd2l0aCBvciB3aXRob3V0IGNvbXByZXNzaW9uIGZlYXR1cmUuCj4+IFRo ZSBmb2xsb3dpbmcgY29tbWFuZAo+PiBwZXJmIHN0YXQgLWEgLWUgaW14OF9kZHIwL2N5Y2xlcy8s aW14OF9kZHIwL3JlYWQtY3ljbGVzLyxpbXg4X2RkcjAvd3JpdGUtY3ljbGVzLyBnc3QtbGF1bmNo LTEuMCBmaWxlc3JjIGxvY2F0aW9uPUpvY2tleV8zODQweDIxNjBfMTIwZnBzXzQyMF84Yml0X0hF VkNfUkFXLmhldmMgISBxdWV1ZSAhIGgyNjVwYXJzZSAhIHY0bDJzbGgyNjVkZWMgISBmYWtlc2lu awo+Pgo+PiBnaXZlIHVzIHRoZXNlIHJlc3VsdHMKPj4gd2l0aG91dCBjb21wcmVzc2lvbiBmZWF0 dXJlOgo+PiAgIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICdzeXN0ZW0gd2lkZSc6Cj4+ Cj4+ICAgICAgICAgMTQ5NjU4MTY3NDMgICAgICBpbXg4X2RkcjAvY3ljbGVzLwo+PiAgICAgICAg ICAgODg5MTk3MzEyICAgICAgaW14OF9kZHIwL3JlYWQtY3ljbGVzLwo+PiAgICAgICAgICAxODE5 MzQ4ODYyICAgICAgaW14OF9kZHIwL3dyaXRlLWN5Y2xlcy8KPj4KPj4gICAgICAgIDE4LjcwNzM3 MzAwMSBzZWNvbmRzIHRpbWUgZWxhcHNlZAo+Pgo+PiB3aXRoIGNvbXByZXNzaW9uIGZlYXR1cmU6 Cj4+IFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICdzeXN0ZW0gd2lkZSc6Cj4+Cj4+ICAg ICAgICAgMTM3NTAyMTgyNDMgICAgICBpbXg4X2RkcjAvY3ljbGVzLwo+PiAgICAgICAgICAgNDAy NDI4NzQ0ICAgICAgaW14OF9kZHIwL3JlYWQtY3ljbGVzLwo+PiAgICAgICAgICAxMjU1Njc2Njkz ICAgICAgaW14OF9kZHIwL3dyaXRlLWN5Y2xlcy8KPj4KPj4gICAgICAgIDE3LjE4ODMyMDA2MSBz ZWNvbmRzIHRpbWUgZWxhcHNlZAo+Pgo+PiBBcyBleHBlY3RlZCB0aGUgbnVtYmVyIG9mIHJlYWQv d3JpdGUgY3ljbGVzIGFyZSByZWFsbHkgbG93ZXIgd2hlbiBjb21wcmVzc2lvbgo+PiBpcyB1c2Vk Lgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25h cmRAY29sbGFib3JhLmNvbT4KPj4gLS0tCj4+ICAgLi4uL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hh bnRyb19nMl9oZXZjX2RlYy5jIHwgMzEgKysrKysrKysrKysrLS0KPj4gICBkcml2ZXJzL3N0YWdp bmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmggfCAgNCArKwo+PiAgIGRyaXZlcnMvc3Rh Z2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYyAgICB8IDQxICsrKysrKysrKysrKysrKysr Ky0KPj4gICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oICAgICAgfCAg MiArCj4+ICAgNCBmaWxlcyBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygt KQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9f ZzJfaGV2Y19kZWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hl dmNfZGVjLmMKPj4gaW5kZXggMzQwZWZiNTdmZDE4Li5kYTkwYWNkOTIyZjcgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hldmNfZGVjLmMKPj4g KysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZzJfaGV2Y19kZWMuYwo+ PiBAQCAtMzY2LDEwICszNjYsMTIgQEAgc3RhdGljIGludCBzZXRfcmVmKHN0cnVjdCBoYW50cm9f Y3R4ICpjdHgpCj4+ICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19wcHMgKnBw cyA9IGN0cmxzLT5wcHM7Cj4+ICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19k ZWNvZGVfcGFyYW1zICpkZWNvZGVfcGFyYW1zID0gY3RybHMtPmRlY29kZV9wYXJhbXM7Cj4+ICAg ICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2hldmNfZHBiX2VudHJ5ICpkcGIgPSBkZWNvZGVfcGFy YW1zLT5kcGI7Cj4+IC0gICAgICAgZG1hX2FkZHJfdCBsdW1hX2FkZHIsIGNocm9tYV9hZGRyLCBt dl9hZGRyID0gMDsKPj4gKyAgICAgICBkbWFfYWRkcl90IGx1bWFfYWRkciwgY2hyb21hX2FkZHIs IG12X2FkZHIsIGNvbXByZXNzX2x1bWFfYWRkciwgY29tcHJlc3NfY2hyb21hX2FkZHIgPSAwOwo+ PiAgICAgICAgICBzdHJ1Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4LT5kZXY7Cj4+ICAgICAgICAg IHNpemVfdCBjcl9vZmZzZXQgPSBoYW50cm9faGV2Y19jaHJvbWFfb2Zmc2V0KHNwcyk7Cj4+ICAg ICAgICAgIHNpemVfdCBtdl9vZmZzZXQgPSBoYW50cm9faGV2Y19tb3Rpb25fdmVjdG9yc19vZmZz ZXQoc3BzKTsKPj4gKyAgICAgICBzaXplX3QgY29tcHJlc3NfbHVtYV9vZmZzZXQgPSBoYW50cm9f aGV2Y19sdW1hX2NvbXByZXNzX29mZnNldChzcHMpOwo+PiArICAgICAgIHNpemVfdCBjb21wcmVz c19jaHJvbWFfb2Zmc2V0ID0gaGFudHJvX2hldmNfY2hyb21hX2NvbXByZXNzX29mZnNldChzcHMp Owo+PiAgICAgICAgICB1MzIgbWF4X3JlZl9mcmFtZXM7Cj4+ICAgICAgICAgIHUxNiBkcGJfbG9u Z3Rlcm1fZTsKPj4gICAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGN1cl9w b2NbXSA9IHsKPj4gQEAgLTQ0MiwxNSArNDQ0LDI4IEBAIHN0YXRpYyBpbnQgc2V0X3JlZihzdHJ1 Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiAgICAgICAgICAgICAgICAgIGlmICghbHVtYV9hZGRyKQo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+Cj4+ICsgICAgICAg ICAgICAgICAvKgo+PiArICAgICAgICAgICAgICAgICogQW4gYWxsb2NhdGVkIGZyYW1lIHN0b3Jl cyBZIGFuZCBVViBwbGFuZXMsIG1vdGlvbiB2ZWN0b3JzIGFuZAo+PiArICAgICAgICAgICAgICAg ICogY29tcHJlc3NlZCBZIGFuZCBVViBwbGFuZXMuIENvbXB1dGUgYWxsIHRoZXNlIG9mZnNldHMg Z2l2ZW4KPj4gKyAgICAgICAgICAgICAgICAqIHRoZSBmcmFtZSByZXNvbHV0aW9uIGFuZCB0aGUg cGl4ZWwgZm9ybWF0Lgo+PiArICAgICAgICAgICAgICAgICovCj4gVGhlIHBhdGNoIGxvb2tzIGdv b2QsIGJ1dCBJIGZlZWwgd2Ugc3RpbGwgbmVlZCB0byBhbnN3ZXIgc29tZSBxdWVzdGlvbnMKPiBi ZWZvcmUgaXQgY2FuIGJlIG1lcmdlZC4KPgo+ICogSXMgdGhpcyBhIEcyIGZlYXR1cmU/IElmIHNv LCBjYW4gaXQgYmUgdXNlZCBvbiBWUDk/CgpJdCBpc24ndCB0YWdnZWQgYXMgSEVWQyBmZWF0dXJl IGluIHRoZSBoYXJkd2FyZSBzcGVjIHNvIEkgZ3Vlc3MgaXQgY291bGQKYmUgdXNlZCBmb3IgVlA5 IHRvby4KCj4KPiAqIEVuYWJsaW5nIGNvbXByZXNzaW9uIG5lZWRzIG1vcmUgbWVtb3J5LiBZb3Ug YXJlIHByb3Bvc2luZwo+IHRvIGFsbG9jYXRlIGZyYW1lcyBhbmQgY29tcHJlc3NlZCBmcmFtZXMg Y29udGlndW91c2x5LAo+IGJ1dCBzbyB3ZSBuZWVkIHRvIG1lYXN1cmUgdGhlIGltcGFjdCBvZiB0 aGF0LiBQZXJoYXBzIHNlcGFyYXRlCj4gYnVmZmVycyB3aWxsIGJlIGJldHRlciB0byBhdm9pZCBD TUEgcHJlc3N1cmU/IFBlcmhhcHMgYSBnaXZlbgo+IHVzZXIgd2lsbCB3YW50IHRvIHR1cm4gdGhp cyBvZmYgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZT8KCkkgY291bGQgYWRkIGEgbW9kdWxlIHBhcmFt ZXRlciB0byB0dXJuIG9uL29mZiB0aGlzIGZlYXR1cmUgYnV0IHRoZSBhbW9uZwpvZiBhZGRpdGlv bmFsIG1lbW9yeSB1c2VkIGlzIHZlcnkgbGltaXRlZCBjb21wYXJlIHRvIGZyYW1lIHNpemUuCkZv ciBleGFtcGxlIGZvciBhIDM4NDB4MjE2MCB2aWRlbyBpdCBhZGRzIDY4S0Igd2hpbGUgdGhlIGZy YW1lIGl0c2VsZiBpcyBhcm91bmQgMTIxNTBLQi4KCj4KPiBNb3JlIGltcG9ydGFudGx5LCBJJ20g d2FyeSBvZiBhZGRpbmcgSEVWQyBmZWF0dXJlcwo+IHdpdGhvdXQgYmVpbmcgYWJsZSB0byB0ZXN0 IGFueXRoaW5nLgo+Cj4gQ2FuIHlvdSB3b3JrIHdpdGggTlhQIG1haW50YWluZXJzIHRvIGdldCB0 aGUgR1BDL0JMSy1DVFJMIFsxXSBzb3J0ZWQgb3V0PwoKWWVzLCBJIGhhdmUgYWxyZWFkeSBnaXZl IGEgdHJ5OgpodHRwczovL2xrbWwub3JnL2xrbWwvMjAyMS83LzcvODM2CgpCZW5qYW1pbgoKPgo+ IFRoZW4sIHdlIGhhdmUgdGhlIGlzc3VlIG9mIG1pc3NpbmcgbWFpbmxpbmVkIHVzZXJzcGFjZSBh cyB3ZWxsLAo+IGJ1dCBJIHN1cHBvc2UgdGhhdCdzIHdlbGwgdW5kZXJ3YXkgOi0pCj4KPiBbMV0g aHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvYXJtLWtlcm5lbC9tc2c5MTM4ODEuaHRtbAo+ Cj4gQ2hlZXJzLAo+IEV6ZQo+Cj4+ICAgICAgICAgICAgICAgICAgY2hyb21hX2FkZHIgPSBsdW1h X2FkZHIgKyBjcl9vZmZzZXQ7Cj4+ICAgICAgICAgICAgICAgICAgbXZfYWRkciA9IGx1bWFfYWRk ciArIG12X29mZnNldDsKPj4gKyAgICAgICAgICAgICAgIGNvbXByZXNzX2x1bWFfYWRkciA9IGx1 bWFfYWRkciArIGNvbXByZXNzX2x1bWFfb2Zmc2V0Owo+PiArICAgICAgICAgICAgICAgY29tcHJl c3NfY2hyb21hX2FkZHIgPSBsdW1hX2FkZHIgKyBjb21wcmVzc19jaHJvbWFfb2Zmc2V0Owo+Pgo+ PiAgICAgICAgICAgICAgICAgIGlmIChkcGJbaV0ucnBzID09IFY0TDJfSEVWQ19EUEJfRU5UUllf UlBTX0xUX0NVUlIpCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICBkcGJfbG9uZ3Rlcm1fZSB8 PSBCSVQoVjRMMl9IRVZDX0RQQl9FTlRSSUVTX05VTV9NQVggLSAxIC0gaSk7Cj4+Cj4+ICsgICAg ICAgICAgICAgICAvKgo+PiArICAgICAgICAgICAgICAgICogRm9yIGVhY2ggcmVmZXJlbmNlIGZy YW1lIFksIFVWLCBtb3Rpb24gdmVjdG9yIGFuZAo+PiArICAgICAgICAgICAgICAgICogY29tcHJl c3NlZCBZLCBVViBidWZmZXJzIGFkZHJlc3NlcyBtdXN0IGJlIHNldC4KPj4gKyAgICAgICAgICAg ICAgICAqLwo+PiAgICAgICAgICAgICAgICAgIGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfUkVH X0FERFJfUkVGKGkpLCBsdW1hX2FkZHIpOwo+PiAgICAgICAgICAgICAgICAgIGhhbnRyb193cml0 ZV9hZGRyKHZwdSwgRzJfUkVHX0NIUl9SRUYoaSksIGNocm9tYV9hZGRyKTsKPj4gICAgICAgICAg ICAgICAgICBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19ETVZfUkVGKGkpLCBtdl9hZGRy KTsKPj4gKyAgICAgICAgICAgICAgIGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9BRERS X1JFRihpKSwgY29tcHJlc3NfbHVtYV9hZGRyKTsKPj4gKyAgICAgICAgICAgICAgIGhhbnRyb193 cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9DSFJfUkVGKGkpLCBjb21wcmVzc19jaHJvbWFfYWRkcik7 Cj4+ICAgICAgICAgIH0KPj4KPj4gICAgICAgICAgbHVtYV9hZGRyID0gaGFudHJvX2hldmNfZ2V0 X3JlZl9idWYoY3R4LCBkZWNvZGVfcGFyYW1zLT5waWNfb3JkZXJfY250X3ZhbCk7Cj4+IEBAIC00 NTksNyArNDc0LDEyIEBAIHN0YXRpYyBpbnQgc2V0X3JlZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4 KQo+Pgo+PiAgICAgICAgICBjaHJvbWFfYWRkciA9IGx1bWFfYWRkciArIGNyX29mZnNldDsKPj4g ICAgICAgICAgbXZfYWRkciA9IGx1bWFfYWRkciArIG12X29mZnNldDsKPj4gKyAgICAgICBjb21w cmVzc19sdW1hX2FkZHIgPSBsdW1hX2FkZHIgKyBjb21wcmVzc19sdW1hX29mZnNldDsKPj4gKyAg ICAgICBjb21wcmVzc19jaHJvbWFfYWRkciA9IGx1bWFfYWRkciArIGNvbXByZXNzX2Nocm9tYV9v ZmZzZXQ7Cj4+Cj4+ICsgICAgICAgLyogVGhlIG5leHQgZGVjb2RlZCBmcmFtZSBhcyB0byBiZSBw dXQgYXMgdGhlIGxhc3QgcmVmZXJlbmNlIGZyYW1lIGVudHJ5ICovCj4+ICsgICAgICAgaGFudHJv X3dyaXRlX2FkZHIodnB1LCBHMl9DT01QX0FERFJfUkVGKGkpLCBjb21wcmVzc19sdW1hX2FkZHIp Owo+PiArICAgICAgIGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9DSFJfUkVGKGkpLCBj b21wcmVzc19jaHJvbWFfYWRkcik7Cj4+ICAgICAgICAgIGhhbnRyb193cml0ZV9hZGRyKHZwdSwg RzJfUkVHX0FERFJfUkVGKGkpLCBsdW1hX2FkZHIpOwo+PiAgICAgICAgICBoYW50cm9fd3JpdGVf YWRkcih2cHUsIEcyX1JFR19DSFJfUkVGKGkpLCBjaHJvbWFfYWRkcik7Cj4+ICAgICAgICAgIGhh bnRyb193cml0ZV9hZGRyKHZwdSwgRzJfUkVHX0RNVl9SRUYoaSsrKSwgbXZfYWRkcik7Cj4+IEBA IC00NjcsMTMgKzQ4NywxOCBAQCBzdGF0aWMgaW50IHNldF9yZWYoc3RydWN0IGhhbnRyb19jdHgg KmN0eCkKPj4gICAgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9BRERSX0RTVCwgbHVt YV9hZGRyKTsKPj4gICAgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9BRERSX0RTVF9D SFIsIGNocm9tYV9hZGRyKTsKPj4gICAgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9B RERSX0RTVF9NViwgbXZfYWRkcik7Cj4+ICsgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBH Ml9DT01QX0FERFJfRFNULCBjb21wcmVzc19sdW1hX2FkZHIpOwo+PiArICAgICAgIGhhbnRyb193 cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9DSFIsIGNvbXByZXNzX2Nocm9tYV9hZGRyKTsKPj4KPj4g ICAgICAgICAgaGFudHJvX2hldmNfcmVmX3JlbW92ZV91bnVzZWQoY3R4KTsKPj4KPj4gKyAgICAg ICAvKiBVbnVzZWQgcmVmZXJlbmNlIGZyYW1lcyBlbnRyaWVzIG1vc3QgYmUgY2xlYXJlZCAqLwo+ PiAgICAgICAgICBmb3IgKDsgaSA8IFY0TDJfSEVWQ19EUEJfRU5UUklFU19OVU1fTUFYOyBpKysp IHsKPj4gICAgICAgICAgICAgICAgICBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19BRERS X1JFRihpKSwgMCk7Cj4+ICAgICAgICAgICAgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBH Ml9SRUdfQ0hSX1JFRihpKSwgMCk7Cj4+ICAgICAgICAgICAgICAgICAgaGFudHJvX3dyaXRlX2Fk ZHIodnB1LCBHMl9SRUdfRE1WX1JFRihpKSwgMCk7Cj4+ICsgICAgICAgICAgICAgICBoYW50cm9f d3JpdGVfYWRkcih2cHUsIEcyX0NPTVBfQUREUl9SRUYoaSksIDApOwo+PiArICAgICAgICAgICAg ICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9DT01QX0NIUl9SRUYoaSksIDApOwo+PiAgICAg ICAgICB9Cj4+Cj4+ICAgICAgICAgIGhhbnRyb19yZWdfd3JpdGUodnB1LCAmZzJfcmVmZXJfbHRl cm1fZSwgZHBiX2xvbmd0ZXJtX2UpOwo+PiBAQCAtNTY0LDggKzU4OSw4IEBAIGludCBoYW50cm9f ZzJfaGV2Y19kZWNfcnVuKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgICAgICAgIC8qIERv bid0IGRpc2FibGUgb3V0cHV0ICovCj4+ICAgICAgICAgIGhhbnRyb19yZWdfd3JpdGUodnB1LCAm ZzJfb3V0X2RpcywgMCk7Cj4+Cj4+IC0gICAgICAgLyogRG9uJ3QgY29tcHJlc3MgYnVmZmVycyAq Lwo+PiAtICAgICAgIGhhbnRyb19yZWdfd3JpdGUodnB1LCAmZzJfcmVmX2NvbXByZXNzX2J5cGFz cywgMSk7Cj4+ICsgICAgICAgLyogQ29tcHJlc3MgYnVmZmVycyAqLwo+PiArICAgICAgIGhhbnRy b19yZWdfd3JpdGUodnB1LCAmZzJfcmVmX2NvbXByZXNzX2J5cGFzcywgMCk7Cj4+Cj4+ICAgICAg ICAgIC8qIHVzZSBOVjEyIGFzIG91dHB1dCBmb3JtYXQgKi8KPj4gICAgICAgICAgaGFudHJvX3Jl Z193cml0ZSh2cHUsICZnMl9vdXRfcnNfZSwgMSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmgKPj4gaW5kZXggYmIyMmZhOTIxOTE0Li4yYTIzZTg2 NTdkYjEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJv X2cyX3JlZ3MuaAo+PiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19n Ml9yZWdzLmgKPj4gQEAgLTE5MSw2ICsxOTEsMTAgQEAKPj4gICAjZGVmaW5lIEcyX1RJTEVfRklM VEVSICAgICAgICAgKEcyX1NXUkVHKDE3OSkpCj4+ICAgI2RlZmluZSBHMl9USUxFX1NBTyAgICAg ICAgICAgIChHMl9TV1JFRygxODEpKQo+PiAgICNkZWZpbmUgRzJfVElMRV9CU0QgICAgICAgICAg ICAoRzJfU1dSRUcoMTgzKSkKPj4gKyNkZWZpbmUgRzJfQ09NUF9BRERSX0RTVCAgICAgICAoRzJf U1dSRUcoMTkwKSkKPj4gKyNkZWZpbmUgRzJfQ09NUF9BRERSX1JFRihpKSAgICAoRzJfU1dSRUco MTkyKSArICgoaSkgKiAweDgpKQo+PiArI2RlZmluZSBHMl9DT01QX0NIUiAgICAgICAgICAgIChH Ml9TV1JFRygyMjQpKQo+PiArI2RlZmluZSBHMl9DT01QX0NIUl9SRUYoaSkgICAgIChHMl9TV1JF RygyMjYpICsgKChpKSAqIDB4OCkpCj4+Cj4+ICAgI2RlZmluZSBnMl9zdHJtX2J1ZmZlcl9sZW4g ICAgIEcyX0RFQ19SRUcoMjU4LCAwLCAweGZmZmZmZmZmKQo+PiAgICNkZWZpbmUgZzJfc3RybV9z dGFydF9vZmZzZXQgICBHMl9ERUNfUkVHKDI1OSwgMCwgMHhmZmZmZmZmZikKPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYyBiL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYwo+PiBpbmRleCA1MzQ3ZjVhNDFjMmEu Ljc4ZTVjZWRhNTIwYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRy by9oYW50cm9faGV2Yy5jCj4+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFu dHJvX2hldmMuYwo+PiBAQCAtMjcsNiArMjcsMTMgQEAKPj4KPj4gICAjZGVmaW5lIEcyX0FMSUdO ICAgICAgICAgICAgICAgMTYKPj4KPj4gKyNkZWZpbmUgQ0JTX1NJWkUgICAgICAgMTYgICAgICAv KiBjb21wcmVzc2lvbiB0YWJsZSBzaXplIGluIGJ5dGVzICovCj4+ICsjZGVmaW5lIENCU19MVU1B ICAgICAgIDggICAgICAgLyogbHVtaW5hbmNlIENCUyBpcyBjb21wb3NlZCBvZiAxIDh4OCBjb2Rl ZCBibG9jayAqLwo+PiArI2RlZmluZSBDQlNfQ0hST01BX1cgICAoOCAqIDIpIC8qIGNocm9taW5h bmNlIENCUyBpcyBjb21wb3NlZCBvZiB0d28gOHg0IGNvZGVkCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogYmxvY2tzLCB3aXRoIENiIENCIGZpcnN0IHRoZW4gQ3IgQ0IgZm9s bG93aW5nCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCj4+ICsjZGVmaW5l IENCU19DSFJPTUFfSCAgIDQKPj4gKwo+PiAgIHNpemVfdCBoYW50cm9faGV2Y19jaHJvbWFfb2Zm c2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPj4gICB7Cj4+ICAgICAg ICAgIGludCBieXRlc19wZXJfcGl4ZWwgPSBzcHMtPmJpdF9kZXB0aF9sdW1hX21pbnVzOCA9PSAw ID8gMSA6IDI7Cj4+IEBAIC02MSwxMiArNjgsNDQgQEAgc3RhdGljIHNpemVfdCBoYW50cm9faGV2 Y19tdl9zaXplKGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPj4gICAgICAg ICAgcmV0dXJuIG12X3NpemU7Cj4+ICAgfQo+Pgo+PiArc2l6ZV90IGhhbnRyb19oZXZjX2x1bWFf Y29tcHJlc3Nfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPj4g K3sKPj4gKyAgICAgICByZXR1cm4gaGFudHJvX2hldmNfbW90aW9uX3ZlY3RvcnNfb2Zmc2V0KHNw cykgKyBoYW50cm9faGV2Y19tdl9zaXplKHNwcyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzaXpl X3QgaGFudHJvX2hldmNfbHVtYV9jb21wcmVzc19zaXplKGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxf aGV2Y19zcHMgKnNwcykKPj4gK3sKPj4gKyAgICAgICB1MzIgcGljX3dpZHRoX2luX2Nic3kgPQo+ PiArICAgICAgICAgICAgICAgcm91bmRfdXAoKHNwcy0+cGljX3dpZHRoX2luX2x1bWFfc2FtcGxl cyArIENCU19MVU1BIC0gMSkgLyBDQlNfTFVNQSwgQ0JTX1NJWkUpOwo+PiArICAgICAgIHUzMiBw aWNfaGVpZ2h0X2luX2Nic3kgPSAoc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyArIENC U19MVU1BIC0gMSkgLyBDQlNfTFVNQTsKPj4gKwo+PiArICAgICAgIHJldHVybiByb3VuZF91cChw aWNfd2lkdGhfaW5fY2JzeSAqIHBpY19oZWlnaHRfaW5fY2JzeSwgQ0JTX1NJWkUpOwo+PiArfQo+ PiArCj4+ICtzaXplX3QgaGFudHJvX2hldmNfY2hyb21hX2NvbXByZXNzX29mZnNldChjb25zdCBz dHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzICpzcHMpCj4+ICt7Cj4+ICsgICAgICAgcmV0dXJuIGhh bnRyb19oZXZjX2x1bWFfY29tcHJlc3Nfb2Zmc2V0KHNwcykgKyBoYW50cm9faGV2Y19sdW1hX2Nv bXByZXNzX3NpemUoc3BzKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNpemVfdCBoYW50cm9faGV2 Y19jaHJvbWFfY29tcHJlc3Nfc2l6ZShjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzICpz cHMpCj4+ICt7Cj4+ICsgICAgICAgdTMyIHBpY193aWR0aF9pbl9jYnNjID0KPj4gKyAgICAgICAg ICAgICAgIHJvdW5kX3VwKChzcHMtPnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXMgKyBDQlNfQ0hS T01BX1cgLSAxKQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgLyBDQlNfQ0hST01BX1csIENC U19TSVpFKTsKPj4gKyAgICAgICB1MzIgcGljX2hlaWdodF9pbl9jYnNjID0gKHNwcy0+cGljX2hl aWdodF9pbl9sdW1hX3NhbXBsZXMgLyAyICsgQ0JTX0NIUk9NQV9IIC0gMSkKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyBDQlNfQ0hST01BX0g7Cj4+ICsKPj4gKyAgICAgICBy ZXR1cm4gcm91bmRfdXAocGljX3dpZHRoX2luX2Nic2MgKiBwaWNfaGVpZ2h0X2luX2Nic2MsIENC U19TSVpFKTsKPj4gK30KPj4gKwo+PiAgIHN0YXRpYyBzaXplX3QgaGFudHJvX2hldmNfcmVmX3Np emUoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPj4gICB7Cj4+ICAgICAgICAgIGNvbnN0IHN0cnVj dCBoYW50cm9faGV2Y19kZWNfY3RybHMgKmN0cmxzID0gJmN0eC0+aGV2Y19kZWMuY3RybHM7Cj4+ ICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcyA9IGN0cmxzLT5z cHM7Cj4+Cj4+IC0gICAgICAgcmV0dXJuIGhhbnRyb19oZXZjX21vdGlvbl92ZWN0b3JzX29mZnNl dChzcHMpICsgaGFudHJvX2hldmNfbXZfc2l6ZShzcHMpOwo+PiArICAgICAgIHJldHVybiBoYW50 cm9faGV2Y19tb3Rpb25fdmVjdG9yc19vZmZzZXQoc3BzKSArIGhhbnRyb19oZXZjX212X3NpemUo c3BzKSArCj4+ICsgICAgICAgICAgICAgIGhhbnRyb19oZXZjX2x1bWFfY29tcHJlc3Nfc2l6ZShz cHMpICsKPj4gKyAgICAgICAgICAgICAgaGFudHJvX2hldmNfY2hyb21hX2NvbXByZXNzX3NpemUo c3BzKTsKPj4gICB9Cj4+Cj4+ICAgc3RhdGljIHZvaWQgaGFudHJvX2hldmNfcmVmX2ZyZWUoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCkKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRp YS9oYW50cm8vaGFudHJvX2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRy b19ody5oCj4+IGluZGV4IGRmN2I1ZTNhNTdiOS4uZDVjMDAyZDBlNzY1IDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oCj4+ICsrKyBiL2RyaXZl cnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2h3LmgKPj4gQEAgLTI1NSw2ICsyNTUsOCBA QCBkbWFfYWRkcl90IGhhbnRyb19oZXZjX2dldF9yZWZfYnVmKHN0cnVjdCBoYW50cm9fY3R4ICpj dHgsIGludCBwb2MpOwo+PiAgIHZvaWQgaGFudHJvX2hldmNfcmVmX3JlbW92ZV91bnVzZWQoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCk7Cj4+ICAgc2l6ZV90IGhhbnRyb19oZXZjX2Nocm9tYV9vZmZz ZXQoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3BzKTsKPj4gICBzaXplX3QgaGFu dHJvX2hldmNfbW90aW9uX3ZlY3RvcnNfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2 Y19zcHMgKnNwcyk7Cj4+ICtzaXplX3QgaGFudHJvX2hldmNfbHVtYV9jb21wcmVzc19vZmZzZXQo Y29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3BzKTsKPj4gK3NpemVfdCBoYW50cm9f aGV2Y19jaHJvbWFfY29tcHJlc3Nfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19z cHMgKnNwcyk7Cj4+Cj4+ICAgc3RhdGljIGlubGluZSBzaXplX3QKPj4gICBoYW50cm9faDI2NF9t dl9zaXplKHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKPj4gLS0KPj4g Mi4yNS4xCj4+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXJvY2tjaGlwCg== 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 X-Spam-Level: X-Spam-Status: No, score=-17.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 81527C4338F for ; Tue, 24 Aug 2021 12:38:11 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 4C7B361212 for ; Tue, 24 Aug 2021 12:38:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 4C7B361212 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=w0iGAAvXNJRRPit2obgmSrKETQBbS4CjRDloRd78hc0=; b=M/WeJS4My4oYRZZsfdV2L9K2TC 4x5F0VncprSJA617STEYeE3g5JMuRgcKQMftZul4K5iga6dKGixXkfiBEU2tMjugLFXimHv3T5hxy A/jprhpw8un85AhufGokfpK+djiJ9NpvXfkQyyEi3W4SMBI3MDhpkZ6sbTGIu2FLSjt+V7PG4/hmz d5T4Pe/x4N326oH7PTGKOn4v06tIbaGtQc2wqnkiLHgGSnfmw/mguQgt916RzlQN/wTlFxkfooixS KN7dJmc1JMZx8Zr73E1a/RPBhDg+LfQCLopXccl6g7r0xwIq6+bdgdiDhR5Y0ErIslKxMQuzF4UKp /S6oc/uw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mIVen-0034B0-3a; Tue, 24 Aug 2021 12:35:57 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mIVeg-00347B-Da; Tue, 24 Aug 2021 12:35:54 +0000 Received: from [IPv6:2a01:e0a:4cb:a870:9cd0:b46:4954:d5f7] (unknown [IPv6:2a01:e0a:4cb:a870:9cd0:b46:4954:d5f7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id CE3F91F42719; Tue, 24 Aug 2021 13:35:35 +0100 (BST) Subject: Re: [PATCH] media: hantro: Add support of compressed reference buffers To: Ezequiel Garcia Cc: Mauro Carvalho Chehab , Philipp Zabel , Greg KH , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Chris Healy , linux-media , Linux Kernel Mailing List , "open list:ARM/Rockchip SoC..." , linux-staging@lists.linux.dev, linux-arm-kernel , Collabora Kernel ML , Lucas Stach , Hans Verkuil , Nicolas Dufresne References: <20210823162916.824336-1-benjamin.gaignard@collabora.com> From: Benjamin Gaignard Message-ID: <541e9ace-3b54-b46d-30ef-c01afc84fc41@collabora.com> Date: Tue, 24 Aug 2021 14:35:32 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210824_053550_753902_9505C02F X-CRM114-Status: GOOD ( 37.44 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CkxlIDI0LzA4LzIwMjEgw6AgMTM6MjIsIEV6ZXF1aWVsIEdhcmNpYSBhIMOpY3JpdMKgOgo+IEhp IEJlbmphbWluLAo+Cj4gT24gTW9uLCAyMyBBdWcgMjAyMSBhdCAxMzoyOSwgQmVuamFtaW4gR2Fp Z25hcmQKPiA8YmVuamFtaW4uZ2FpZ25hcmRAY29sbGFib3JhLmNvbT4gd3JvdGU6Cj4+IFJlZmVy ZW5jZSBmcmFtZSBjb21wcmVzc2lvbiBpcyBhIGZlYXR1cmUgYWRkZWQgaW4gRzIgZGVjb2RlciB0 byBjb21wcmVzcwo+PiBmcmFtZSBidWZmZXJzIHNvIHRoYXQgdGhlIGJhbmR3aWR0aCBvZiBzdG9y aW5nL2xvYWRpbmcgcmVmZXJlbmNlIGZyYW1lcwo+PiBjYW4gYmUgcmVkdWNlZCwgZXNwZWNpYWxs eSB3aGVuIHRoZSByZXNvbHV0aW9uIG9mIGRlY29kZWQgc3RyZWFtIGlzIG9mCj4+IGhpZ2ggZGVm aW5pdGlvbi4KPj4KPj4gQ29tcHJlc3NlZCBoZWxwIHRvIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5j ZSBvZiB0aGUgd2hvbGUgc3RhY2ssIGl0IGNvdWxkCj4+IGJlIHVwIHRvIDUwIGZwcyAoYWdhaW5z dCA0NSBmcHMpIG9uIElNWDhNUS4KPj4gVGhlIGltcGFjdCBvZiBjb21wcmVzc2VkIGZyYW1lcyBp cyBjb25maXJtZWQgd2hlbiB1c2luZyBwZXJmIHRvIG1vbml0b3IKPj4gdGhlIG51bWJlciBvZiBt ZW1vcnkgYWNjZXNzZXMgd2l0aCBvciB3aXRob3V0IGNvbXByZXNzaW9uIGZlYXR1cmUuCj4+IFRo ZSBmb2xsb3dpbmcgY29tbWFuZAo+PiBwZXJmIHN0YXQgLWEgLWUgaW14OF9kZHIwL2N5Y2xlcy8s aW14OF9kZHIwL3JlYWQtY3ljbGVzLyxpbXg4X2RkcjAvd3JpdGUtY3ljbGVzLyBnc3QtbGF1bmNo LTEuMCBmaWxlc3JjIGxvY2F0aW9uPUpvY2tleV8zODQweDIxNjBfMTIwZnBzXzQyMF84Yml0X0hF VkNfUkFXLmhldmMgISBxdWV1ZSAhIGgyNjVwYXJzZSAhIHY0bDJzbGgyNjVkZWMgISBmYWtlc2lu awo+Pgo+PiBnaXZlIHVzIHRoZXNlIHJlc3VsdHMKPj4gd2l0aG91dCBjb21wcmVzc2lvbiBmZWF0 dXJlOgo+PiAgIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICdzeXN0ZW0gd2lkZSc6Cj4+ Cj4+ICAgICAgICAgMTQ5NjU4MTY3NDMgICAgICBpbXg4X2RkcjAvY3ljbGVzLwo+PiAgICAgICAg ICAgODg5MTk3MzEyICAgICAgaW14OF9kZHIwL3JlYWQtY3ljbGVzLwo+PiAgICAgICAgICAxODE5 MzQ4ODYyICAgICAgaW14OF9kZHIwL3dyaXRlLWN5Y2xlcy8KPj4KPj4gICAgICAgIDE4LjcwNzM3 MzAwMSBzZWNvbmRzIHRpbWUgZWxhcHNlZAo+Pgo+PiB3aXRoIGNvbXByZXNzaW9uIGZlYXR1cmU6 Cj4+IFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICdzeXN0ZW0gd2lkZSc6Cj4+Cj4+ICAg ICAgICAgMTM3NTAyMTgyNDMgICAgICBpbXg4X2RkcjAvY3ljbGVzLwo+PiAgICAgICAgICAgNDAy NDI4NzQ0ICAgICAgaW14OF9kZHIwL3JlYWQtY3ljbGVzLwo+PiAgICAgICAgICAxMjU1Njc2Njkz ICAgICAgaW14OF9kZHIwL3dyaXRlLWN5Y2xlcy8KPj4KPj4gICAgICAgIDE3LjE4ODMyMDA2MSBz ZWNvbmRzIHRpbWUgZWxhcHNlZAo+Pgo+PiBBcyBleHBlY3RlZCB0aGUgbnVtYmVyIG9mIHJlYWQv d3JpdGUgY3ljbGVzIGFyZSByZWFsbHkgbG93ZXIgd2hlbiBjb21wcmVzc2lvbgo+PiBpcyB1c2Vk Lgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25h cmRAY29sbGFib3JhLmNvbT4KPj4gLS0tCj4+ICAgLi4uL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hh bnRyb19nMl9oZXZjX2RlYy5jIHwgMzEgKysrKysrKysrKysrLS0KPj4gICBkcml2ZXJzL3N0YWdp bmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmggfCAgNCArKwo+PiAgIGRyaXZlcnMvc3Rh Z2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYyAgICB8IDQxICsrKysrKysrKysrKysrKysr Ky0KPj4gICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oICAgICAgfCAg MiArCj4+ICAgNCBmaWxlcyBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygt KQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9f ZzJfaGV2Y19kZWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hl dmNfZGVjLmMKPj4gaW5kZXggMzQwZWZiNTdmZDE4Li5kYTkwYWNkOTIyZjcgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hldmNfZGVjLmMKPj4g KysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZzJfaGV2Y19kZWMuYwo+ PiBAQCAtMzY2LDEwICszNjYsMTIgQEAgc3RhdGljIGludCBzZXRfcmVmKHN0cnVjdCBoYW50cm9f Y3R4ICpjdHgpCj4+ICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19wcHMgKnBw cyA9IGN0cmxzLT5wcHM7Cj4+ICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19k ZWNvZGVfcGFyYW1zICpkZWNvZGVfcGFyYW1zID0gY3RybHMtPmRlY29kZV9wYXJhbXM7Cj4+ICAg ICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2hldmNfZHBiX2VudHJ5ICpkcGIgPSBkZWNvZGVfcGFy YW1zLT5kcGI7Cj4+IC0gICAgICAgZG1hX2FkZHJfdCBsdW1hX2FkZHIsIGNocm9tYV9hZGRyLCBt dl9hZGRyID0gMDsKPj4gKyAgICAgICBkbWFfYWRkcl90IGx1bWFfYWRkciwgY2hyb21hX2FkZHIs IG12X2FkZHIsIGNvbXByZXNzX2x1bWFfYWRkciwgY29tcHJlc3NfY2hyb21hX2FkZHIgPSAwOwo+ PiAgICAgICAgICBzdHJ1Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4LT5kZXY7Cj4+ICAgICAgICAg IHNpemVfdCBjcl9vZmZzZXQgPSBoYW50cm9faGV2Y19jaHJvbWFfb2Zmc2V0KHNwcyk7Cj4+ICAg ICAgICAgIHNpemVfdCBtdl9vZmZzZXQgPSBoYW50cm9faGV2Y19tb3Rpb25fdmVjdG9yc19vZmZz ZXQoc3BzKTsKPj4gKyAgICAgICBzaXplX3QgY29tcHJlc3NfbHVtYV9vZmZzZXQgPSBoYW50cm9f aGV2Y19sdW1hX2NvbXByZXNzX29mZnNldChzcHMpOwo+PiArICAgICAgIHNpemVfdCBjb21wcmVz c19jaHJvbWFfb2Zmc2V0ID0gaGFudHJvX2hldmNfY2hyb21hX2NvbXByZXNzX29mZnNldChzcHMp Owo+PiAgICAgICAgICB1MzIgbWF4X3JlZl9mcmFtZXM7Cj4+ICAgICAgICAgIHUxNiBkcGJfbG9u Z3Rlcm1fZTsKPj4gICAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGN1cl9w b2NbXSA9IHsKPj4gQEAgLTQ0MiwxNSArNDQ0LDI4IEBAIHN0YXRpYyBpbnQgc2V0X3JlZihzdHJ1 Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiAgICAgICAgICAgICAgICAgIGlmICghbHVtYV9hZGRyKQo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+Cj4+ICsgICAgICAg ICAgICAgICAvKgo+PiArICAgICAgICAgICAgICAgICogQW4gYWxsb2NhdGVkIGZyYW1lIHN0b3Jl cyBZIGFuZCBVViBwbGFuZXMsIG1vdGlvbiB2ZWN0b3JzIGFuZAo+PiArICAgICAgICAgICAgICAg ICogY29tcHJlc3NlZCBZIGFuZCBVViBwbGFuZXMuIENvbXB1dGUgYWxsIHRoZXNlIG9mZnNldHMg Z2l2ZW4KPj4gKyAgICAgICAgICAgICAgICAqIHRoZSBmcmFtZSByZXNvbHV0aW9uIGFuZCB0aGUg cGl4ZWwgZm9ybWF0Lgo+PiArICAgICAgICAgICAgICAgICovCj4gVGhlIHBhdGNoIGxvb2tzIGdv b2QsIGJ1dCBJIGZlZWwgd2Ugc3RpbGwgbmVlZCB0byBhbnN3ZXIgc29tZSBxdWVzdGlvbnMKPiBi ZWZvcmUgaXQgY2FuIGJlIG1lcmdlZC4KPgo+ICogSXMgdGhpcyBhIEcyIGZlYXR1cmU/IElmIHNv LCBjYW4gaXQgYmUgdXNlZCBvbiBWUDk/CgpJdCBpc24ndCB0YWdnZWQgYXMgSEVWQyBmZWF0dXJl IGluIHRoZSBoYXJkd2FyZSBzcGVjIHNvIEkgZ3Vlc3MgaXQgY291bGQKYmUgdXNlZCBmb3IgVlA5 IHRvby4KCj4KPiAqIEVuYWJsaW5nIGNvbXByZXNzaW9uIG5lZWRzIG1vcmUgbWVtb3J5LiBZb3Ug YXJlIHByb3Bvc2luZwo+IHRvIGFsbG9jYXRlIGZyYW1lcyBhbmQgY29tcHJlc3NlZCBmcmFtZXMg Y29udGlndW91c2x5LAo+IGJ1dCBzbyB3ZSBuZWVkIHRvIG1lYXN1cmUgdGhlIGltcGFjdCBvZiB0 aGF0LiBQZXJoYXBzIHNlcGFyYXRlCj4gYnVmZmVycyB3aWxsIGJlIGJldHRlciB0byBhdm9pZCBD TUEgcHJlc3N1cmU/IFBlcmhhcHMgYSBnaXZlbgo+IHVzZXIgd2lsbCB3YW50IHRvIHR1cm4gdGhp cyBvZmYgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZT8KCkkgY291bGQgYWRkIGEgbW9kdWxlIHBhcmFt ZXRlciB0byB0dXJuIG9uL29mZiB0aGlzIGZlYXR1cmUgYnV0IHRoZSBhbW9uZwpvZiBhZGRpdGlv bmFsIG1lbW9yeSB1c2VkIGlzIHZlcnkgbGltaXRlZCBjb21wYXJlIHRvIGZyYW1lIHNpemUuCkZv ciBleGFtcGxlIGZvciBhIDM4NDB4MjE2MCB2aWRlbyBpdCBhZGRzIDY4S0Igd2hpbGUgdGhlIGZy YW1lIGl0c2VsZiBpcyBhcm91bmQgMTIxNTBLQi4KCj4KPiBNb3JlIGltcG9ydGFudGx5LCBJJ20g d2FyeSBvZiBhZGRpbmcgSEVWQyBmZWF0dXJlcwo+IHdpdGhvdXQgYmVpbmcgYWJsZSB0byB0ZXN0 IGFueXRoaW5nLgo+Cj4gQ2FuIHlvdSB3b3JrIHdpdGggTlhQIG1haW50YWluZXJzIHRvIGdldCB0 aGUgR1BDL0JMSy1DVFJMIFsxXSBzb3J0ZWQgb3V0PwoKWWVzLCBJIGhhdmUgYWxyZWFkeSBnaXZl IGEgdHJ5OgpodHRwczovL2xrbWwub3JnL2xrbWwvMjAyMS83LzcvODM2CgpCZW5qYW1pbgoKPgo+ IFRoZW4sIHdlIGhhdmUgdGhlIGlzc3VlIG9mIG1pc3NpbmcgbWFpbmxpbmVkIHVzZXJzcGFjZSBh cyB3ZWxsLAo+IGJ1dCBJIHN1cHBvc2UgdGhhdCdzIHdlbGwgdW5kZXJ3YXkgOi0pCj4KPiBbMV0g aHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvYXJtLWtlcm5lbC9tc2c5MTM4ODEuaHRtbAo+ Cj4gQ2hlZXJzLAo+IEV6ZQo+Cj4+ICAgICAgICAgICAgICAgICAgY2hyb21hX2FkZHIgPSBsdW1h X2FkZHIgKyBjcl9vZmZzZXQ7Cj4+ICAgICAgICAgICAgICAgICAgbXZfYWRkciA9IGx1bWFfYWRk ciArIG12X29mZnNldDsKPj4gKyAgICAgICAgICAgICAgIGNvbXByZXNzX2x1bWFfYWRkciA9IGx1 bWFfYWRkciArIGNvbXByZXNzX2x1bWFfb2Zmc2V0Owo+PiArICAgICAgICAgICAgICAgY29tcHJl c3NfY2hyb21hX2FkZHIgPSBsdW1hX2FkZHIgKyBjb21wcmVzc19jaHJvbWFfb2Zmc2V0Owo+Pgo+ PiAgICAgICAgICAgICAgICAgIGlmIChkcGJbaV0ucnBzID09IFY0TDJfSEVWQ19EUEJfRU5UUllf UlBTX0xUX0NVUlIpCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICBkcGJfbG9uZ3Rlcm1fZSB8 PSBCSVQoVjRMMl9IRVZDX0RQQl9FTlRSSUVTX05VTV9NQVggLSAxIC0gaSk7Cj4+Cj4+ICsgICAg ICAgICAgICAgICAvKgo+PiArICAgICAgICAgICAgICAgICogRm9yIGVhY2ggcmVmZXJlbmNlIGZy YW1lIFksIFVWLCBtb3Rpb24gdmVjdG9yIGFuZAo+PiArICAgICAgICAgICAgICAgICogY29tcHJl c3NlZCBZLCBVViBidWZmZXJzIGFkZHJlc3NlcyBtdXN0IGJlIHNldC4KPj4gKyAgICAgICAgICAg ICAgICAqLwo+PiAgICAgICAgICAgICAgICAgIGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfUkVH X0FERFJfUkVGKGkpLCBsdW1hX2FkZHIpOwo+PiAgICAgICAgICAgICAgICAgIGhhbnRyb193cml0 ZV9hZGRyKHZwdSwgRzJfUkVHX0NIUl9SRUYoaSksIGNocm9tYV9hZGRyKTsKPj4gICAgICAgICAg ICAgICAgICBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19ETVZfUkVGKGkpLCBtdl9hZGRy KTsKPj4gKyAgICAgICAgICAgICAgIGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9BRERS X1JFRihpKSwgY29tcHJlc3NfbHVtYV9hZGRyKTsKPj4gKyAgICAgICAgICAgICAgIGhhbnRyb193 cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9DSFJfUkVGKGkpLCBjb21wcmVzc19jaHJvbWFfYWRkcik7 Cj4+ICAgICAgICAgIH0KPj4KPj4gICAgICAgICAgbHVtYV9hZGRyID0gaGFudHJvX2hldmNfZ2V0 X3JlZl9idWYoY3R4LCBkZWNvZGVfcGFyYW1zLT5waWNfb3JkZXJfY250X3ZhbCk7Cj4+IEBAIC00 NTksNyArNDc0LDEyIEBAIHN0YXRpYyBpbnQgc2V0X3JlZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4 KQo+Pgo+PiAgICAgICAgICBjaHJvbWFfYWRkciA9IGx1bWFfYWRkciArIGNyX29mZnNldDsKPj4g ICAgICAgICAgbXZfYWRkciA9IGx1bWFfYWRkciArIG12X29mZnNldDsKPj4gKyAgICAgICBjb21w cmVzc19sdW1hX2FkZHIgPSBsdW1hX2FkZHIgKyBjb21wcmVzc19sdW1hX29mZnNldDsKPj4gKyAg ICAgICBjb21wcmVzc19jaHJvbWFfYWRkciA9IGx1bWFfYWRkciArIGNvbXByZXNzX2Nocm9tYV9v ZmZzZXQ7Cj4+Cj4+ICsgICAgICAgLyogVGhlIG5leHQgZGVjb2RlZCBmcmFtZSBhcyB0byBiZSBw dXQgYXMgdGhlIGxhc3QgcmVmZXJlbmNlIGZyYW1lIGVudHJ5ICovCj4+ICsgICAgICAgaGFudHJv X3dyaXRlX2FkZHIodnB1LCBHMl9DT01QX0FERFJfUkVGKGkpLCBjb21wcmVzc19sdW1hX2FkZHIp Owo+PiArICAgICAgIGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9DSFJfUkVGKGkpLCBj b21wcmVzc19jaHJvbWFfYWRkcik7Cj4+ICAgICAgICAgIGhhbnRyb193cml0ZV9hZGRyKHZwdSwg RzJfUkVHX0FERFJfUkVGKGkpLCBsdW1hX2FkZHIpOwo+PiAgICAgICAgICBoYW50cm9fd3JpdGVf YWRkcih2cHUsIEcyX1JFR19DSFJfUkVGKGkpLCBjaHJvbWFfYWRkcik7Cj4+ICAgICAgICAgIGhh bnRyb193cml0ZV9hZGRyKHZwdSwgRzJfUkVHX0RNVl9SRUYoaSsrKSwgbXZfYWRkcik7Cj4+IEBA IC00NjcsMTMgKzQ4NywxOCBAQCBzdGF0aWMgaW50IHNldF9yZWYoc3RydWN0IGhhbnRyb19jdHgg KmN0eCkKPj4gICAgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9BRERSX0RTVCwgbHVt YV9hZGRyKTsKPj4gICAgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9BRERSX0RTVF9D SFIsIGNocm9tYV9hZGRyKTsKPj4gICAgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9B RERSX0RTVF9NViwgbXZfYWRkcik7Cj4+ICsgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBH Ml9DT01QX0FERFJfRFNULCBjb21wcmVzc19sdW1hX2FkZHIpOwo+PiArICAgICAgIGhhbnRyb193 cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9DSFIsIGNvbXByZXNzX2Nocm9tYV9hZGRyKTsKPj4KPj4g ICAgICAgICAgaGFudHJvX2hldmNfcmVmX3JlbW92ZV91bnVzZWQoY3R4KTsKPj4KPj4gKyAgICAg ICAvKiBVbnVzZWQgcmVmZXJlbmNlIGZyYW1lcyBlbnRyaWVzIG1vc3QgYmUgY2xlYXJlZCAqLwo+ PiAgICAgICAgICBmb3IgKDsgaSA8IFY0TDJfSEVWQ19EUEJfRU5UUklFU19OVU1fTUFYOyBpKysp IHsKPj4gICAgICAgICAgICAgICAgICBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19BRERS X1JFRihpKSwgMCk7Cj4+ICAgICAgICAgICAgICAgICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBH Ml9SRUdfQ0hSX1JFRihpKSwgMCk7Cj4+ICAgICAgICAgICAgICAgICAgaGFudHJvX3dyaXRlX2Fk ZHIodnB1LCBHMl9SRUdfRE1WX1JFRihpKSwgMCk7Cj4+ICsgICAgICAgICAgICAgICBoYW50cm9f d3JpdGVfYWRkcih2cHUsIEcyX0NPTVBfQUREUl9SRUYoaSksIDApOwo+PiArICAgICAgICAgICAg ICAgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9DT01QX0NIUl9SRUYoaSksIDApOwo+PiAgICAg ICAgICB9Cj4+Cj4+ICAgICAgICAgIGhhbnRyb19yZWdfd3JpdGUodnB1LCAmZzJfcmVmZXJfbHRl cm1fZSwgZHBiX2xvbmd0ZXJtX2UpOwo+PiBAQCAtNTY0LDggKzU4OSw4IEBAIGludCBoYW50cm9f ZzJfaGV2Y19kZWNfcnVuKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgICAgICAgIC8qIERv bid0IGRpc2FibGUgb3V0cHV0ICovCj4+ICAgICAgICAgIGhhbnRyb19yZWdfd3JpdGUodnB1LCAm ZzJfb3V0X2RpcywgMCk7Cj4+Cj4+IC0gICAgICAgLyogRG9uJ3QgY29tcHJlc3MgYnVmZmVycyAq Lwo+PiAtICAgICAgIGhhbnRyb19yZWdfd3JpdGUodnB1LCAmZzJfcmVmX2NvbXByZXNzX2J5cGFz cywgMSk7Cj4+ICsgICAgICAgLyogQ29tcHJlc3MgYnVmZmVycyAqLwo+PiArICAgICAgIGhhbnRy b19yZWdfd3JpdGUodnB1LCAmZzJfcmVmX2NvbXByZXNzX2J5cGFzcywgMCk7Cj4+Cj4+ICAgICAg ICAgIC8qIHVzZSBOVjEyIGFzIG91dHB1dCBmb3JtYXQgKi8KPj4gICAgICAgICAgaGFudHJvX3Jl Z193cml0ZSh2cHUsICZnMl9vdXRfcnNfZSwgMSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmgKPj4gaW5kZXggYmIyMmZhOTIxOTE0Li4yYTIzZTg2 NTdkYjEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJv X2cyX3JlZ3MuaAo+PiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19n Ml9yZWdzLmgKPj4gQEAgLTE5MSw2ICsxOTEsMTAgQEAKPj4gICAjZGVmaW5lIEcyX1RJTEVfRklM VEVSICAgICAgICAgKEcyX1NXUkVHKDE3OSkpCj4+ICAgI2RlZmluZSBHMl9USUxFX1NBTyAgICAg ICAgICAgIChHMl9TV1JFRygxODEpKQo+PiAgICNkZWZpbmUgRzJfVElMRV9CU0QgICAgICAgICAg ICAoRzJfU1dSRUcoMTgzKSkKPj4gKyNkZWZpbmUgRzJfQ09NUF9BRERSX0RTVCAgICAgICAoRzJf U1dSRUcoMTkwKSkKPj4gKyNkZWZpbmUgRzJfQ09NUF9BRERSX1JFRihpKSAgICAoRzJfU1dSRUco MTkyKSArICgoaSkgKiAweDgpKQo+PiArI2RlZmluZSBHMl9DT01QX0NIUiAgICAgICAgICAgIChH Ml9TV1JFRygyMjQpKQo+PiArI2RlZmluZSBHMl9DT01QX0NIUl9SRUYoaSkgICAgIChHMl9TV1JF RygyMjYpICsgKChpKSAqIDB4OCkpCj4+Cj4+ICAgI2RlZmluZSBnMl9zdHJtX2J1ZmZlcl9sZW4g ICAgIEcyX0RFQ19SRUcoMjU4LCAwLCAweGZmZmZmZmZmKQo+PiAgICNkZWZpbmUgZzJfc3RybV9z dGFydF9vZmZzZXQgICBHMl9ERUNfUkVHKDI1OSwgMCwgMHhmZmZmZmZmZikKPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYyBiL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYwo+PiBpbmRleCA1MzQ3ZjVhNDFjMmEu Ljc4ZTVjZWRhNTIwYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRy by9oYW50cm9faGV2Yy5jCj4+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFu dHJvX2hldmMuYwo+PiBAQCAtMjcsNiArMjcsMTMgQEAKPj4KPj4gICAjZGVmaW5lIEcyX0FMSUdO ICAgICAgICAgICAgICAgMTYKPj4KPj4gKyNkZWZpbmUgQ0JTX1NJWkUgICAgICAgMTYgICAgICAv KiBjb21wcmVzc2lvbiB0YWJsZSBzaXplIGluIGJ5dGVzICovCj4+ICsjZGVmaW5lIENCU19MVU1B ICAgICAgIDggICAgICAgLyogbHVtaW5hbmNlIENCUyBpcyBjb21wb3NlZCBvZiAxIDh4OCBjb2Rl ZCBibG9jayAqLwo+PiArI2RlZmluZSBDQlNfQ0hST01BX1cgICAoOCAqIDIpIC8qIGNocm9taW5h bmNlIENCUyBpcyBjb21wb3NlZCBvZiB0d28gOHg0IGNvZGVkCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogYmxvY2tzLCB3aXRoIENiIENCIGZpcnN0IHRoZW4gQ3IgQ0IgZm9s bG93aW5nCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCj4+ICsjZGVmaW5l IENCU19DSFJPTUFfSCAgIDQKPj4gKwo+PiAgIHNpemVfdCBoYW50cm9faGV2Y19jaHJvbWFfb2Zm c2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPj4gICB7Cj4+ICAgICAg ICAgIGludCBieXRlc19wZXJfcGl4ZWwgPSBzcHMtPmJpdF9kZXB0aF9sdW1hX21pbnVzOCA9PSAw ID8gMSA6IDI7Cj4+IEBAIC02MSwxMiArNjgsNDQgQEAgc3RhdGljIHNpemVfdCBoYW50cm9faGV2 Y19tdl9zaXplKGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPj4gICAgICAg ICAgcmV0dXJuIG12X3NpemU7Cj4+ICAgfQo+Pgo+PiArc2l6ZV90IGhhbnRyb19oZXZjX2x1bWFf Y29tcHJlc3Nfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPj4g K3sKPj4gKyAgICAgICByZXR1cm4gaGFudHJvX2hldmNfbW90aW9uX3ZlY3RvcnNfb2Zmc2V0KHNw cykgKyBoYW50cm9faGV2Y19tdl9zaXplKHNwcyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzaXpl X3QgaGFudHJvX2hldmNfbHVtYV9jb21wcmVzc19zaXplKGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxf aGV2Y19zcHMgKnNwcykKPj4gK3sKPj4gKyAgICAgICB1MzIgcGljX3dpZHRoX2luX2Nic3kgPQo+ PiArICAgICAgICAgICAgICAgcm91bmRfdXAoKHNwcy0+cGljX3dpZHRoX2luX2x1bWFfc2FtcGxl cyArIENCU19MVU1BIC0gMSkgLyBDQlNfTFVNQSwgQ0JTX1NJWkUpOwo+PiArICAgICAgIHUzMiBw aWNfaGVpZ2h0X2luX2Nic3kgPSAoc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyArIENC U19MVU1BIC0gMSkgLyBDQlNfTFVNQTsKPj4gKwo+PiArICAgICAgIHJldHVybiByb3VuZF91cChw aWNfd2lkdGhfaW5fY2JzeSAqIHBpY19oZWlnaHRfaW5fY2JzeSwgQ0JTX1NJWkUpOwo+PiArfQo+ PiArCj4+ICtzaXplX3QgaGFudHJvX2hldmNfY2hyb21hX2NvbXByZXNzX29mZnNldChjb25zdCBz dHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzICpzcHMpCj4+ICt7Cj4+ICsgICAgICAgcmV0dXJuIGhh bnRyb19oZXZjX2x1bWFfY29tcHJlc3Nfb2Zmc2V0KHNwcykgKyBoYW50cm9faGV2Y19sdW1hX2Nv bXByZXNzX3NpemUoc3BzKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNpemVfdCBoYW50cm9faGV2 Y19jaHJvbWFfY29tcHJlc3Nfc2l6ZShjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzICpz cHMpCj4+ICt7Cj4+ICsgICAgICAgdTMyIHBpY193aWR0aF9pbl9jYnNjID0KPj4gKyAgICAgICAg ICAgICAgIHJvdW5kX3VwKChzcHMtPnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXMgKyBDQlNfQ0hS T01BX1cgLSAxKQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgLyBDQlNfQ0hST01BX1csIENC U19TSVpFKTsKPj4gKyAgICAgICB1MzIgcGljX2hlaWdodF9pbl9jYnNjID0gKHNwcy0+cGljX2hl aWdodF9pbl9sdW1hX3NhbXBsZXMgLyAyICsgQ0JTX0NIUk9NQV9IIC0gMSkKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyBDQlNfQ0hST01BX0g7Cj4+ICsKPj4gKyAgICAgICBy ZXR1cm4gcm91bmRfdXAocGljX3dpZHRoX2luX2Nic2MgKiBwaWNfaGVpZ2h0X2luX2Nic2MsIENC U19TSVpFKTsKPj4gK30KPj4gKwo+PiAgIHN0YXRpYyBzaXplX3QgaGFudHJvX2hldmNfcmVmX3Np emUoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPj4gICB7Cj4+ICAgICAgICAgIGNvbnN0IHN0cnVj dCBoYW50cm9faGV2Y19kZWNfY3RybHMgKmN0cmxzID0gJmN0eC0+aGV2Y19kZWMuY3RybHM7Cj4+ ICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcyA9IGN0cmxzLT5z cHM7Cj4+Cj4+IC0gICAgICAgcmV0dXJuIGhhbnRyb19oZXZjX21vdGlvbl92ZWN0b3JzX29mZnNl dChzcHMpICsgaGFudHJvX2hldmNfbXZfc2l6ZShzcHMpOwo+PiArICAgICAgIHJldHVybiBoYW50 cm9faGV2Y19tb3Rpb25fdmVjdG9yc19vZmZzZXQoc3BzKSArIGhhbnRyb19oZXZjX212X3NpemUo c3BzKSArCj4+ICsgICAgICAgICAgICAgIGhhbnRyb19oZXZjX2x1bWFfY29tcHJlc3Nfc2l6ZShz cHMpICsKPj4gKyAgICAgICAgICAgICAgaGFudHJvX2hldmNfY2hyb21hX2NvbXByZXNzX3NpemUo c3BzKTsKPj4gICB9Cj4+Cj4+ICAgc3RhdGljIHZvaWQgaGFudHJvX2hldmNfcmVmX2ZyZWUoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCkKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRp YS9oYW50cm8vaGFudHJvX2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRy b19ody5oCj4+IGluZGV4IGRmN2I1ZTNhNTdiOS4uZDVjMDAyZDBlNzY1IDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oCj4+ICsrKyBiL2RyaXZl cnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2h3LmgKPj4gQEAgLTI1NSw2ICsyNTUsOCBA QCBkbWFfYWRkcl90IGhhbnRyb19oZXZjX2dldF9yZWZfYnVmKHN0cnVjdCBoYW50cm9fY3R4ICpj dHgsIGludCBwb2MpOwo+PiAgIHZvaWQgaGFudHJvX2hldmNfcmVmX3JlbW92ZV91bnVzZWQoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCk7Cj4+ICAgc2l6ZV90IGhhbnRyb19oZXZjX2Nocm9tYV9vZmZz ZXQoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3BzKTsKPj4gICBzaXplX3QgaGFu dHJvX2hldmNfbW90aW9uX3ZlY3RvcnNfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2 Y19zcHMgKnNwcyk7Cj4+ICtzaXplX3QgaGFudHJvX2hldmNfbHVtYV9jb21wcmVzc19vZmZzZXQo Y29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3BzKTsKPj4gK3NpemVfdCBoYW50cm9f aGV2Y19jaHJvbWFfY29tcHJlc3Nfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19z cHMgKnNwcyk7Cj4+Cj4+ICAgc3RhdGljIGlubGluZSBzaXplX3QKPj4gICBoYW50cm9faDI2NF9t dl9zaXplKHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKPj4gLS0KPj4g Mi4yNS4xCj4+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==