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=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 0621DC43331 for ; Tue, 12 Nov 2019 16:59:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A3AF72196E for ; Tue, 12 Nov 2019 16:59:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="n2V1Okij" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727437AbfKLQ7O (ORCPT ); Tue, 12 Nov 2019 11:59:14 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:41366 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726896AbfKLQ7N (ORCPT ); Tue, 12 Nov 2019 11:59:13 -0500 Received: by mail-wr1-f65.google.com with SMTP id p4so19334765wrm.8 for ; Tue, 12 Nov 2019 08:59:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version:content-transfer-encoding; bh=GUMF3sLXww7f+IF9cNmdUAWTGgI0qtADr058kEfMDKI=; b=n2V1OkijbSZNkl/icRDq75p5mf0ZGbZay8KbpLmBrG1lk7lfWqbpU6jpDxJAZPRZ3T z81ft5pRfDRc5xdVjw0XgWkwfqrBy9xcD7TLtj1OEOFa5lyQ23TGnrfx+cxU87vC/UYd GDm/9/KjvgJ9NguS+DGm7uWfu1cVgsppWmXMizGsn+pilCNSxLbNJv8y0hckmS5LHBsc zdZJ94ZOol6ZovUjbwRo1Oo5y/dQ889EeCna1erixX7/xMBz6UD7xRSTXqGqAJUnPG6L MPOpXjeJRo9D2CaOx3iDLXZxdlunjBO5AKsClqaOVoIcIOnGU1FIsJqGCK1l4DyTtiI7 cn4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version:content-transfer-encoding; bh=GUMF3sLXww7f+IF9cNmdUAWTGgI0qtADr058kEfMDKI=; b=QKBr0TlmU3jevmyPzcC14JTyvKaYfbRyv+La6JEDFuwuMo17wXrUWj/BNaYFihC/P/ m2jclNJnHta2kGBRWsIHoMRaldDI3hhGhqrifijTK2h9+qHesjjWQK/P4dPtBnGn5iMf 3E0wzBXgXC30QNP7aSQ//PVV49svG5SzTFe1U909QpIg/B3d82lKRXYlPZjchF2zbneJ 1mRpDoteBbjrPntQYLWRHbL3Xr8EsxS1NrHXZDYQO/89x4nr1jc0mcN4q1cA5gQTS5r0 KZOUiI16pEQ5alm3kbJ8Bv12O3iydd6Q8YglWxPD1CxBqXeYtGr3ovw6nvsbR4Fm+LPj YA1Q== X-Gm-Message-State: APjAAAUuQ/A5lNM1FlLtcv793SKczHXwPOUT837N/tnjJ2KTpBDJNooe +Kozs3XLQa9QzbpkaWPjlrKtAQ== X-Google-Smtp-Source: APXvYqxgacioZSaEq1bTl4qUBqCvPPpNvEMT9ObPmlavQMudZc51cRBi7C7y1qcx/8Cizav8AA8/Aw== X-Received: by 2002:a5d:5742:: with SMTP id q2mr6855584wrw.311.1573577947729; Tue, 12 Nov 2019 08:59:07 -0800 (PST) Received: from localhost (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id y17sm22470819wrs.58.2019.11.12.08.59.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2019 08:59:06 -0800 (PST) References: <1571382865-41978-1-git-send-email-jian.hu@amlogic.com> <1571382865-41978-4-git-send-email-jian.hu@amlogic.com> <1jsgnmba1a.fsf@starbuckisacylon.baylibre.com> <49b33e94-910b-3fd9-4da1-050742d07e93@amlogic.com> <1jblts3v7e.fsf@starbuckisacylon.baylibre.com> User-agent: mu4e 1.3.3; emacs 26.2 From: Jerome Brunet To: Jian Hu , Neil Armstrong Cc: Kevin Hilman , Rob Herring , "Martin Blumenstingl" , Michael Turquette , Stephen Boyd , Qiufang Dai , Jianxin Pan , Victor Wan , Chandle Zou , linux-clk@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 3/3] clk: meson: a1: add support for Amlogic A1 clock driver In-reply-to: Date: Tue, 12 Nov 2019 17:59:05 +0100 Message-ID: <1jh839f2ue.fsf@starbuckisacylon.baylibre.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat 09 Nov 2019 at 12:16, Jian Hu wrote: > Hi, Jerome > > Sorry for late rely > > On 2019/11/4 16:24, Jerome Brunet wrote: >> >> On Fri 25 Oct 2019 at 13:32, Jian Hu wrote: >> >>> Hi, Jerome >>> >>> Thanks for your review >>> >>> On 2019/10/21 19:41, Jerome Brunet wrote: >>>> >>>> On Fri 18 Oct 2019 at 09:14, Jian Hu wrote: >>>> >>>>> The Amlogic A1 clock includes three drivers: >>>>> peripheral clocks, pll clocks, CPU clocks. >>>>> sys pll and CPU clocks will be sent in next patch. >>>>> >>>>> Unlike the previous series, there is no EE/AO domain >>>>> in A1 CLK controllers. >>>>> >>>>> Signed-off-by: Jian Hu >>>>> --- >>>>> drivers/clk/meson/Kconfig | 10 + >>>>> drivers/clk/meson/Makefile | 1 + >>>>> drivers/clk/meson/a1-pll.c | 345 +++++++ >>>>> drivers/clk/meson/a1-pll.h | 56 ++ >>>>> drivers/clk/meson/a1.c | 2264 ++++++++++++++++++++++++++++++++= ++++++++++++ >>>>> drivers/clk/meson/a1.h | 120 +++ >>>>> 6 files changed, 2796 insertions(+) >>>>> create mode 100644 drivers/clk/meson/a1-pll.c >>>>> create mode 100644 drivers/clk/meson/a1-pll.h >>>>> create mode 100644 drivers/clk/meson/a1.c >>>>> create mode 100644 drivers/clk/meson/a1.h >>>> >>>> In the next version, one >>> OK, I will send a1 peripheral and pll driver in two patch. >>>> >>>>> >>>>> diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig >>>>> index dabeb43..c2809b2 100644 >>>>> --- a/drivers/clk/meson/Kconfig >>>>> +++ b/drivers/clk/meson/Kconfig >>>>> @@ -93,6 +93,16 @@ config COMMON_CLK_AXG_AUDIO >>>>> Support for the audio clock controller on AmLogic A113D devices, >>>>> aka axg, Say Y if you want audio subsystem to work. >>>>> +config COMMON_CLK_A1 >>>>> + bool >>>>> + depends on ARCH_MESON >>>>> + select COMMON_CLK_MESON_REGMAP >>>>> + select COMMON_CLK_MESON_DUALDIV >>>>> + select COMMON_CLK_MESON_PLL >>>>> + help >>>>> + Support for the clock controller on Amlogic A113L device, >>>>> + aka a1. Say Y if you want peripherals to work. >>>>> + >>>>> config COMMON_CLK_G12A >>>>> bool >>>>> depends on ARCH_MESON >>>>> diff --git a/drivers/clk/meson/Makefile b/drivers/clk/meson/Makefile >>>>> index 3939f21..28cbae1 100644 >>>>> --- a/drivers/clk/meson/Makefile >>>>> +++ b/drivers/clk/meson/Makefile >>>>> @@ -16,6 +16,7 @@ obj-$(CONFIG_COMMON_CLK_MESON_VID_PLL_DIV) +=3D vid= -pll-div.o >>>>> obj-$(CONFIG_COMMON_CLK_AXG) +=3D axg.o axg-aoclk.o >>>>> obj-$(CONFIG_COMMON_CLK_AXG_AUDIO) +=3D axg-audio.o >>>>> +obj-$(CONFIG_COMMON_CLK_A1) +=3D a1-pll.o a1.o >>>> >>>> So far, all the controller had there own option, I don't see why it >>>> should be different here. >>>> >>> OK, I will add the other option CONFIG_COMMON_CLK_A1_PLL for pll driver >>>>> obj-$(CONFIG_COMMON_CLK_GXBB) +=3D gxbb.o gxbb-aoclk.o >>>>> obj-$(CONFIG_COMMON_CLK_G12A) +=3D g12a.o g12a-aoclk.o >>>>> obj-$(CONFIG_COMMON_CLK_MESON8B) +=3D meson8b.o >>>>> diff --git a/drivers/clk/meson/a1-pll.c b/drivers/clk/meson/a1-pll.c >>>>> new file mode 100644 >>>>> index 0000000..486d964 >>>>> --- /dev/null >>>>> +++ b/drivers/clk/meson/a1-pll.c >>>>> @@ -0,0 +1,345 @@ >>>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) >>>>> +/* >>>>> + * Copyright (c) 2019 Amlogic, Inc. All rights reserved. >>>>> + * Author: Jian Hu >>>>> + */ >>>>> + >>>>> +#include >>>> >>>> Hum ... looks like some things are missing here >>>> >>>> #include >>>> #include >>>> >>>> ? >>> #1 >>> There is in meson-eeclk.h file, >>> >>> and for A1 driver(a1.c/a1-pll.c) the head file is not requied. >>> >>> #2 >>> For A1 driver, the file "linux/of_device.h" is not required. >>> It is required by meson-eeclk.c in fact. >> >> You are using what is provided by these headers directly in this file >> If meson-eeclk ever changes, your driver breaks >> > OK, I will add the two header file. >>>> >>>>> +#include "clk-pll.h" >>>>> +#include "meson-eeclk.h" >>>>> +#include "a1-pll.h" >>>> >>>> Alphanumeric order please >>>> >>> OK, I will change it in the next version. >>> >>>>> + >>>>> +static struct clk_regmap a1_fixed_pll_dco =3D { >>>>> + .data =3D &(struct meson_clk_pll_data){ >>>>> + .en =3D { >>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .shift =3D 28, >>>>> + .width =3D 1, >>>>> + }, >>>>> + .m =3D { >>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .shift =3D 0, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .n =3D { >>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .shift =3D 10, >>>>> + .width =3D 5, >>>>> + }, >>>>> + .frac =3D { >>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL1, >>>>> + .shift =3D 0, >>>>> + .width =3D 19, >>>>> + }, >>>>> + .l =3D { >>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .shift =3D 31, >>>>> + .width =3D 1, >>>>> + }, >>>>> + .rst =3D { >>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .shift =3D 29, >>>>> + .width =3D 1, >>>>> + }, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "fixed_pll_dco", >>>>> + .ops =3D &meson_clk_pll_ro_ops, >>>>> + .parent_data =3D &(const struct clk_parent_data){ >>>>> + .fw_name =3D "xtal_fixpll", >>>>> + .name =3D "xtal_fixpll", >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_fixed_pll =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .bit_idx =3D 20, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "fixed_pll", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_fixed_pll_dco.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + /* >>>>> + * This clock is fclk_div2/3/4's parent, >>>>> + * However, fclk_div2/3/5 feeds AXI/APB/DDR. >>>> >>>> is it fclk_div2/3/4 or fclk_div2/3/5 ? >>>> >>>>> + * It is required by the platform to operate correctly. >>>>> + * Until the following condition are met, we need this clock to >>>>> + * be marked as critical: >>>>> + * a) Mark the clock used by a firmware resource, if possible >>>>> + * b) CCF has a clock hand-off mechanism to make the sure the >>>>> + * clock stays on until the proper driver comes along >>>>> + */ >>>> >>>> Don't blindly copy/paste comments from other drivers. There is no driv= er >>>> for the devices you are mentionning so the end of the comment is >>>> confusing. The 3 first lines were enough >>>> >>> OK, I will remove the confusing comments >>> >>>>> + .flags =3D CLK_IS_CRITICAL, >>>> >>>> >From your comment, I understand that some child are critical, not this >>>> particular (or at least, not directly). So this can be removed AFAICT >>>> >>>> You should even need CLK_IGNORE_UNUSED for this one since the clock wi= ll >>>> already be enabled before the late_init() kicks in >>>> >>> OK, I will replace it as CLK_IGNORE_UNUSED. >>>>> + }, >>>>> +}; >>>>> + >>>>> +static const struct pll_mult_range a1_hifi_pll_mult_range =3D { >>>>> + .min =3D 32, >>>>> + .max =3D 64, >>>>> +}; >>>>> + >>>>> +static const struct reg_sequence a1_hifi_init_regs[] =3D { >>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL1, .def =3D 0x01800000 }, >>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL2, .def =3D 0x00001100 }, >>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL3, .def =3D 0x100a1100 }, >>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL4, .def =3D 0x00302000 }, >>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL0, .def =3D 0x01f18440 }, >>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL0, .def =3D 0x11f18440, .delay_us = =3D 10 }, >>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL0, .def =3D 0x15f18440, .delay_us = =3D 40 }, >>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL2, .def =3D 0x00001140 }, >>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL2, .def =3D 0x00001100 }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_hifi_pll =3D { >>>>> + .data =3D &(struct meson_clk_pll_data){ >>>>> + .en =3D { >>>>> + .reg_off =3D ANACTRL_HIFIPLL_CTRL0, >>>>> + .shift =3D 28, >>>>> + .width =3D 1, >>>>> + }, >>>>> + .m =3D { >>>>> + .reg_off =3D ANACTRL_HIFIPLL_CTRL0, >>>>> + .shift =3D 0, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .n =3D { >>>>> + .reg_off =3D ANACTRL_HIFIPLL_CTRL0, >>>>> + .shift =3D 10, >>>>> + .width =3D 5, >>>>> + }, >>>>> + .frac =3D { >>>>> + .reg_off =3D ANACTRL_HIFIPLL_CTRL1, >>>>> + .shift =3D 0, >>>>> + .width =3D 19, >>>>> + }, >>>>> + .l =3D { >>>>> + .reg_off =3D ANACTRL_HIFIPLL_STS, >>>>> + .shift =3D 31, >>>>> + .width =3D 1, >>>>> + }, >>>>> + .range =3D &a1_hifi_pll_mult_range, >>>>> + .init_regs =3D a1_hifi_init_regs, >>>>> + .init_count =3D ARRAY_SIZE(a1_hifi_init_regs), >>>>> + .strict_sequence =3D true, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "hifi_pll", >>>>> + .ops =3D &meson_clk_pll_ops, >>>>> + .parent_data =3D &(const struct clk_parent_data){ >>>>> + .fw_name =3D "xtal_fixpll", >>>>> + .name =3D "xtal_fixpll", >>>> >>>> Both should provided when a controller transition from the old way of >>>> describing parent to the new way. This is a new controller so it does >>>> not apply. >>> I do not understand why it does not apply, could you explain more? >> >> Your driver is new, it is not something old transitioning from global >> name to clock in DT ! >> >>> >>> The xtal_fixpll clock is registered in another peripheral driver, If do= not >>> desribe the "name" member in parent_data, "fw_name" does not work becau= se >>> it has not been registered. the hifi_pll parent will be null in >>> /sys/kernel/debug/clk/hifi_pll/clk_parent. >>> >>> HIFI PLL will be a orphan clock, but its parent should be xtal_fixpll. >> >> There will be an orphan yes, temporarily, until both controllers are up. >> Once both controller are up, the clock will be reparented if necessary. >> >>> >>> So both of "fw_name" of "name" should be described. >> >> No >> > > #1 > > Here, I am still confused. > From the point of view of the phenomenon=EF=BC=8C the name in parent_data= is > required. > > > HIFI PLL is described like this: > > .parent_data =3D &(const struct clk_parent_data){ > .fw_name =3D "xtal_hifipll", > .name =3D "xtal_hifipll" > } > > Fixed PLL is described like this: > > .parent_data =3D &(const struct clk_parent_data){ > .fw_name =3D "xtal_fixpll", > }, > > After the system boot completely=EF=BC=8C run cat > /sys/kernel/debug/clk/clk_summary, Here is the result: > > # cat /sys/kernel/debug/clk/clk_summary > enable prepare protect duty > clock count count count rate accuracy phase cycle > -------------------------------------------------------------------- > xtal 5 5 0 24000000 0 0 50000 > ts_div 0 0 0 24000000 0 0 50000 > ts 0 0 0 24000000 0 0 50000 > pwm_f_sel 0 0 0 24000000 0 0 50000 > pwm_f_div 0 0 0 24000000 0 0 50000 > pwm_f 0 0 0 24000000 0 0 50000 > ...... > xtal_syspll 0 0 0 24000000 0 0 50000 > xtal_hifipll 0 0 0 24000000 0 0 50000 > hifi_pll 0 0 0 1536000000 0 0 50000 > xtal_usb_ctrl 0 0 0 24000000 0 0 50000 > xtal_usb_phy 0 0 0 24000000 0 0 50000 > xtal_fixpll 0 0 0 24000000 0 0 50000 > xtal_clktree 0 0 0 24000000 0 0 50000 > fixed_pll_dco 1 1 0 0 0 0 50000 This means that CCF what not able to resolve the parent. Either: * you've made a mistake somewhere * There is bug in CCF when the parent device is not available at probe time, the clock is not properly reparented Either way, you'll have to debug a bit more > fixed_pll 3 3 0 0 0 0 50000 > fclk_div7_div 0 0 0 0 0 0 50000 > .... > > the hifi_pll's parent is xtal_hifi, And the hifi_pll default rate is righ= t. > > but the fixed_pll_dco is a orphan clock, its parent is NULL.And its rate > is zero.When the name in parent_data is added, its parent is xtal_fixpll. > > # cat /sys/kernel/debug/clk/fixed_pll_dco/clk_parent > # > # cat /sys/kernel/debug/clk/fixed_pll_dco/clk_rate > 0 > > > #2 > In ./drivers/clk/qcom/gcc-sm8150.c > For some clocks, Both fw_name and name are described in parent_data > struct. Those are being migrated to DT description which means that we don't know if the DT will the correct description In this case the clock framework will first try DT and if DT does provide this fw_name, it will fallback to the legacy name. This is not your case as this is a new platform for which we know the DT name exist. > >>> >>>> >>>> Same for the other occurences. >>>> >>>> Also, I think you meant xtal_hifipll >>> Yes,I will correct it. >>>> >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_fixed_factor a1_fclk_div2_div =3D { >>>>> + .mult =3D 1, >>>>> + .div =3D 2, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "fclk_div2_div", >>>>> + .ops =3D &clk_fixed_factor_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_fixed_pll.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_fclk_div2 =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .bit_idx =3D 21, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "fclk_div2", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_fclk_div2_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + /* >>>>> + * This clock is used by DDR clock in BL2 firmware >>>>> + * and is required by the platform to operate correctly. >>>>> + * Until the following condition are met, we need this clock to >>>>> + * be marked as critical: >>>>> + * a) Mark the clock used by a firmware resource, if possible >>>>> + * b) CCF has a clock hand-off mechanism to make the sure the >>>>> + * clock stays on until the proper driver comes along >>>>> + */ >>>>> + .flags =3D CLK_IS_CRITICAL, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_fixed_factor a1_fclk_div3_div =3D { >>>>> + .mult =3D 1, >>>>> + .div =3D 3, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "fclk_div3_div", >>>>> + .ops =3D &clk_fixed_factor_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_fixed_pll.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_fclk_div3 =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .bit_idx =3D 22, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "fclk_div3", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_fclk_div3_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + /* >>>>> + * This clock is used by APB bus which setted in Romcode >>>>> + * and is required by the platform to operate correctly. >>>>> + * Until the following condition are met, we need this clock to >>>>> + * be marked as critical: >>>>> + * a) Mark the clock used by a firmware resource, if possible >>>>> + * b) CCF has a clock hand-off mechanism to make the sure the >>>>> + * clock stays on until the proper driver comes along >>>>> + */ >>>>> + .flags =3D CLK_IS_CRITICAL, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_fixed_factor a1_fclk_div5_div =3D { >>>>> + .mult =3D 1, >>>>> + .div =3D 5, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "fclk_div5_div", >>>>> + .ops =3D &clk_fixed_factor_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_fixed_pll.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_fclk_div5 =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .bit_idx =3D 23, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "fclk_div5", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_fclk_div5_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + /* >>>>> + * This clock is used by AXI bus which setted in Romcode >>>>> + * and is required by the platform to operate correctly. >>>>> + * Until the following condition are met, we need this clock to >>>>> + * be marked as critical: >>>>> + * a) Mark the clock used by a firmware resource, if possible >>>>> + * b) CCF has a clock hand-off mechanism to make the sure the >>>>> + * clock stays on until the proper driver comes along >>>>> + */ >>>>> + .flags =3D CLK_IS_CRITICAL, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_fixed_factor a1_fclk_div7_div =3D { >>>>> + .mult =3D 1, >>>>> + .div =3D 7, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "fclk_div7_div", >>>>> + .ops =3D &clk_fixed_factor_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_fixed_pll.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_fclk_div7 =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>> + .bit_idx =3D 24, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "fclk_div7", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_fclk_div7_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + }, >>>>> +}; >>>>> + >>>>> +/* Array of all clocks provided by this provider */ >>>>> +static struct clk_hw_onecell_data a1_pll_hw_onecell_data =3D { >>>>> + .hws =3D { >>>>> + [CLKID_FIXED_PLL_DCO] =3D &a1_fixed_pll_dco.hw, >>>>> + [CLKID_FIXED_PLL] =3D &a1_fixed_pll.hw, >>>>> + [CLKID_HIFI_PLL] =3D &a1_hifi_pll.hw, >>>>> + [CLKID_FCLK_DIV2] =3D &a1_fclk_div2.hw, >>>>> + [CLKID_FCLK_DIV3] =3D &a1_fclk_div3.hw, >>>>> + [CLKID_FCLK_DIV5] =3D &a1_fclk_div5.hw, >>>>> + [CLKID_FCLK_DIV7] =3D &a1_fclk_div7.hw, >>>>> + [CLKID_FCLK_DIV2_DIV] =3D &a1_fclk_div2_div.hw, >>>>> + [CLKID_FCLK_DIV3_DIV] =3D &a1_fclk_div3_div.hw, >>>>> + [CLKID_FCLK_DIV5_DIV] =3D &a1_fclk_div5_div.hw, >>>>> + [CLKID_FCLK_DIV7_DIV] =3D &a1_fclk_div7_div.hw, >>>>> + [NR_PLL_CLKS] =3D NULL, >>>>> + }, >>>>> + .num =3D NR_PLL_CLKS, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap *const a1_pll_regmaps[] =3D { >>>>> + &a1_fixed_pll_dco, >>>>> + &a1_fixed_pll, >>>>> + &a1_hifi_pll, >>>>> + &a1_fclk_div2, >>>>> + &a1_fclk_div3, >>>>> + &a1_fclk_div5, >>>>> + &a1_fclk_div7, >>>>> +}; >>>>> + >>>>> +static int meson_a1_pll_probe(struct platform_device *pdev) >>>>> +{ >>>>> + int ret; >>>>> + >>>>> + ret =3D meson_eeclkc_probe(pdev); >>>>> + if (ret) >>>>> + return ret; >>>>> + >>>>> + return 0; >>>>> +} >>>> >>>> This function is useless. >>>> >>> OK, I will use meson_eeclkc_probe derectly. >>>>> + >>>>> +static const struct meson_eeclkc_data a1_pll_data =3D { >>>>> + .regmap_clks =3D a1_pll_regmaps, >>>>> + .regmap_clk_num =3D ARRAY_SIZE(a1_pll_regmaps), >>>>> + .hw_onecell_data =3D &a1_pll_hw_onecell_data, >>>>> +}; >>>>> +static const struct of_device_id clkc_match_table[] =3D { >>>>> + { >>>>> + .compatible =3D "amlogic,a1-pll-clkc", >>>>> + .data =3D &a1_pll_data >>>>> + }, >>>>> + { /* sentinel */ } >>>> >>>> Nitpick: don't need to write this, just write the line like this >>>> >>> OK, remove it. >>>> ' }, {}' >>>> >>>>> +}; >>>>> + >>>>> +static struct platform_driver a1_driver =3D { >>>>> + .probe =3D meson_a1_pll_probe, >>>>> + .driver =3D { >>>>> + .name =3D "a1-pll-clkc", >>>>> + .of_match_table =3D clkc_match_table, >>>>> + }, >>>>> +}; >>>>> + >>>>> +builtin_platform_driver(a1_driver); >>>>> diff --git a/drivers/clk/meson/a1-pll.h b/drivers/clk/meson/a1-pll.h >>>>> new file mode 100644 >>>>> index 0000000..99ee2a9 >>>>> --- /dev/null >>>>> +++ b/drivers/clk/meson/a1-pll.h >>>>> @@ -0,0 +1,56 @@ >>>>> +/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ >>>>> +/* >>>>> + * Copyright (c) 2019 Amlogic, Inc. All rights reserved. >>>>> + */ >>>>> + >>>>> +#ifndef __A1_PLL_H >>>>> +#define __A1_PLL_H >>>>> + >>>>> +/* PLL register offset */ >>>>> +#define ANACTRL_FIXPLL_CTRL0 0x80 >>>>> +#define ANACTRL_FIXPLL_CTRL1 0x84 >>>>> +#define ANACTRL_FIXPLL_CTRL2 0x88 >>>>> +#define ANACTRL_FIXPLL_CTRL3 0x8c >>>>> +#define ANACTRL_FIXPLL_CTRL4 0x90 >>>>> +#define ANACTRL_FIXPLL_STS 0x94 >>>>> +#define ANACTRL_SYSPLL_CTRL0 0x100 >>>>> +#define ANACTRL_SYSPLL_CTRL1 0x104 >>>>> +#define ANACTRL_SYSPLL_CTRL2 0x108 >>>>> +#define ANACTRL_SYSPLL_CTRL3 0x10c >>>>> +#define ANACTRL_SYSPLL_CTRL4 0x110 >>>>> +#define ANACTRL_SYSPLL_STS 0x114 >>>>> +#define ANACTRL_HIFIPLL_CTRL0 0x140 >>>>> +#define ANACTRL_HIFIPLL_CTRL1 0x144 >>>>> +#define ANACTRL_HIFIPLL_CTRL2 0x148 >>>>> +#define ANACTRL_HIFIPLL_CTRL3 0x14c >>>>> +#define ANACTRL_HIFIPLL_CTRL4 0x150 >>>>> +#define ANACTRL_HIFIPLL_STS 0x154 >>>>> +#define ANACTRL_AUDDDS_CTRL0 0x180 >>>>> +#define ANACTRL_AUDDDS_CTRL1 0x184 >>>>> +#define ANACTRL_AUDDDS_CTRL2 0x188 >>>>> +#define ANACTRL_AUDDDS_CTRL3 0x18c >>>>> +#define ANACTRL_AUDDDS_CTRL4 0x190 >>>>> +#define ANACTRL_AUDDDS_STS 0x194 >>>>> +#define ANACTRL_MISCTOP_CTRL0 0x1c0 >>>>> +#define ANACTRL_POR_CNTL 0x208 >>>>> + >>>>> +/* >>>>> + * CLKID index values >>>>> + * >>>>> + * These indices are entirely contrived and do not map onto the hard= ware. >>>>> + * It has now been decided to expose everything by default in the DT= header: >>>>> + * include/dt-bindings/clock/a1-pll-clkc.h. Only the clocks ids we d= on't want >>>>> + * to expose, such as the internal muxes and dividers of composite c= locks, >>>>> + * will remain defined here. >>>>> + */ >>>>> +#define CLKID_FIXED_PLL_DCO 0 >>>>> +#define CLKID_FCLK_DIV2_DIV 2 >>>>> +#define CLKID_FCLK_DIV3_DIV 3 >>>>> +#define CLKID_FCLK_DIV5_DIV 4 >>>>> +#define CLKID_FCLK_DIV7_DIV 5 >>>>> +#define NR_PLL_CLKS 11 >>>>> + >>>>> +/* include the CLKIDs that have been made part of the DT binding */ >>>>> +#include >>>>> + >>>>> +#endif /* __A1_PLL_H */ >>>>> diff --git a/drivers/clk/meson/a1.c b/drivers/clk/meson/a1.c >>>>> new file mode 100644 >>>>> index 0000000..86a4733 >>>>> --- /dev/null >>>>> +++ b/drivers/clk/meson/a1.c >>>>> @@ -0,0 +1,2264 @@ >>>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) >>>>> +/* >>>>> + * Copyright (c) 2019 Amlogic, Inc. All rights reserved. >>>>> + * Author: Jian Hu >>>>> + */ >>>>> + >>>>> +#include >>>>> +#include "clk-pll.h" >>>>> +#include "clk-dualdiv.h" >>>>> +#include "meson-eeclk.h" >>>>> +#include "a1.h" >>>> >>>> Same as above >>> OK, I will change the order. >>> In fact, the clk-pll.h is not used in the current driver. >>> I will remove it. >>>> >>>>> + >>>>> +/* PLLs clock in gates, its parent is xtal */ >>>>> +static struct clk_regmap a1_xtal_clktree =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D SYS_OSCIN_CTRL, >>>>> + .bit_idx =3D 0, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "xtal_clktree", >>>>> + .ops =3D &clk_regmap_gate_ro_ops, >>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>> + .fw_name =3D "xtal", >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + /* >>>>> + * switch for xtal clock >>>>> + * Linux should not change it at runtime >>>>> + */ >>>> >>>> Comment not useful: it uses the Ro ops >>>> >>> OK, remove the comments >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_xtal_fixpll =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D SYS_OSCIN_CTRL, >>>>> + .bit_idx =3D 1, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "xtal_fixpll", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>> + .fw_name =3D "xtal", >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_IS_CRITICAL, >>>>> + /* >>>>> + * it feeds DDR,AXI,APB bus >>>>> + * Linux should not change it at runtime >>>>> + */ >>>> >>>> Again, the child are critical, not directly this clock from your >>>> comment. >>>> >>>> Remove CRITICAL, put RO is linux is not supposed to touch it. >>>> >>> repace as clk_regmap_gate_ro_ops >>>>> + }, >>>>> +}; >>>>> + >>> >>> [ ... ] >>> >>>>> + >>>>> +/* dsp a clk */ >>>>> +static u32 mux_table_dsp_ab[] =3D { 0, 1, 2, 3, 4, 7 }; >>>>> +static const struct clk_parent_data dsp_ab_clk_parent_data[] =3D { >>>>> + { .fw_name =3D "xtal", }, >>>>> + { .fw_name =3D "fclk_div2", }, >>>>> + { .fw_name =3D "fclk_div3", }, >>>>> + { .fw_name =3D "fclk_div5", }, >>>>> + { .fw_name =3D "hifi_pll", }, >>>>> + { .hw =3D &a1_rtc_clk.hw }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspa_a_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D DSPA_CLK_CTRL0, >>>>> + .mask =3D 0x7, >>>>> + .shift =3D 10, >>>>> + .table =3D mux_table_dsp_ab, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspa_a_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D dsp_ab_clk_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(dsp_ab_clk_parent_data), >>>> >>>> .flags =3D CLK_SET_RATE_PARENT ? >>> Yes, I miss the flag. >>>> >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspa_a_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D DSPA_CLK_CTRL0, >>>>> + .shift =3D 0, >>>>> + .width =3D 10, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspa_a_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspa_a_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspa_a =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D DSPA_CLK_CTRL0, >>>>> + .bit_idx =3D 13, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "dspa_a", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspa_a_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspa_b_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D DSPA_CLK_CTRL0, >>>>> + .mask =3D 0x7, >>>>> + .shift =3D 26, >>>>> + .table =3D mux_table_dsp_ab, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspa_b_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D dsp_ab_clk_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(dsp_ab_clk_parent_data), >>>> >>>> .flags =3D CLK_SET_RATE_PARENT ? >>>> >>> Yes, I will add it. >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspa_b_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D DSPA_CLK_CTRL0, >>>>> + .shift =3D 16, >>>>> + .width =3D 10, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspa_b_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspa_b_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspa_b =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D DSPA_CLK_CTRL0, >>>>> + .bit_idx =3D 29, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "dspa_b", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspa_b_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspa_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D DSPA_CLK_CTRL0, >>>>> + .mask =3D 0x1, >>>>> + .shift =3D 15, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspa_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D (const struct clk_parent_data []) { >>>>> + { .hw =3D &a1_dspa_a.hw }, >>>>> + { .hw =3D &a1_dspa_b.hw }, >>>>> + }, >>>>> + .num_parents =3D 2, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspa_en_dspa =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D DSPA_CLK_EN, >>>>> + .bit_idx =3D 1, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "dspa_en_dspa", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspa_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, >>>> >>>> Why do you need CLK_IGNORE_UNUSED ? >>>> >>> I should remove it >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspa_en_nic =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D DSPA_CLK_EN, >>>>> + .bit_idx =3D 0, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "dspa_en_nic", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspa_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, >>>> >>>> Why do you need CLK_IGNORE_UNUSED ? >>>> >>> I should remove it >>>>> + }, >>>>> +}; >>>>> + >>>> >>>> Same question and remarks applies to DSP B >>>> >>> got it >>>>> +/* dsp b clk */ >>>>> +static struct clk_regmap a1_dspb_a_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D DSPB_CLK_CTRL0, >>>>> + .mask =3D 0x7, >>>>> + .shift =3D 10, >>>>> + .table =3D mux_table_dsp_ab, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspb_a_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D dsp_ab_clk_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(dsp_ab_clk_parent_data), >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspb_a_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D DSPB_CLK_CTRL0, >>>>> + .shift =3D 0, >>>>> + .width =3D 10, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspb_a_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspb_a_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspb_a =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D DSPB_CLK_CTRL0, >>>>> + .bit_idx =3D 13, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "dspb_a", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspb_a_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspb_b_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D DSPB_CLK_CTRL0, >>>>> + .mask =3D 0x7, >>>>> + .shift =3D 26, >>>>> + .table =3D mux_table_dsp_ab, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspb_b_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D dsp_ab_clk_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(dsp_ab_clk_parent_data), >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspb_b_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D DSPB_CLK_CTRL0, >>>>> + .shift =3D 16, >>>>> + .width =3D 10, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspb_b_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspb_b_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspb_b =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D DSPB_CLK_CTRL0, >>>>> + .bit_idx =3D 29, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "dspb_b", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspb_b_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspb_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D DSPB_CLK_CTRL0, >>>>> + .mask =3D 0x1, >>>>> + .shift =3D 15, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dspb_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspb_a.hw, &a1_dspb_b.hw, >>>>> + }, >>>>> + .num_parents =3D 2, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspb_en_dspb =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D DSPB_CLK_EN, >>>>> + .bit_idx =3D 1, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "dspb_en_dspb", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspb_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dspb_en_nic =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D DSPB_CLK_EN, >>>>> + .bit_idx =3D 0, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "dspb_en_nic", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dspb_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, >>>>> + }, >>>>> +}; >>>>> + >>>>> +/* 12M/24M clock */ >>>>> +static struct clk_regmap a1_24m =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D CLK12_24_CTRL, >>>>> + .bit_idx =3D 11, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "24m", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>> + .fw_name =3D "xtal", >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + }, >>>>> +}; >>>>> + >>> >>> [ ... ] >>> >>>>> +static struct clk_regmap a1_saradc_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D SAR_ADC_CLK_CTRL, >>>>> + .mask =3D 0x1, >>>>> + .shift =3D 9, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "saradc_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D (const struct clk_parent_data []) { >>>>> + { .fw_name =3D "xtal", }, >>>>> + { .hw =3D &a1_sys_clk.hw, }, >>>>> + }, >>>>> + .num_parents =3D 2, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_saradc_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D SAR_ADC_CLK_CTRL, >>>>> + .shift =3D 0, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "saradc_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_saradc_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_saradc_clk =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D SAR_ADC_CLK_CTRL, >>>>> + .bit_idx =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "saradc_clk", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_saradc_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +/* pwm a/b/c/d parent data */ >>>>> +static const struct clk_parent_data pwm_parent_data[] =3D { >>>>> + { .fw_name =3D "xtal", }, >>>>> + { .hw =3D &a1_sys_clk.hw }, >>>>> +}; >>>> >>>> Looks like the same as SAR ADC >>>> >>> OK, I will describe it like SAR ADC for pwm a/b/c/d >>>>> + >>>>> +/* pwm a clk */ >>>>> +static struct clk_regmap a1_pwm_a_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D PWM_CLK_AB_CTRL, >>>>> + .mask =3D 0x1, >>>>> + .shift =3D 9, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_a_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D pwm_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(pwm_parent_data), >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_a_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D PWM_CLK_AB_CTRL, >>>>> + .shift =3D 0, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_a_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_a_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_a =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D PWM_CLK_AB_CTRL, >>>>> + .bit_idx =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "pwm_a", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_a_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + /* >>>>> + * The CPU working voltage is controlled by pwm_a >>>>> + * in BL2 firmware. add the CLK_IGNORE_UNUSED flag >>>>> + * to avoid changing at runtime. >>>> ^ it >>>> >>>>> + * and is required by the platform to operate correctly. >>>> "blabla. And" is strange >>>> >>>>> + * Until the following condition are met, we need this clock to >>>>> + * be marked as critical: >>>>> + * a) Mark the clock used by a firmware resource, if possible >>>>> + * b) CCF has a clock hand-off mechanism to make the sure the >>>>> + * clock stays on until the proper driver comes along >>>>> + */ >>>>> + .flags =3D CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, >>>> >>>> This only skips the late_init() disable of unused clocks >>>> >>>> Be aware that this is not fool-proof. If at any time a driver enable >>>> then disable the clock, the clock will be disable and I guess your >>>> platform will die if this provides the CPU voltage. >>> OK, CLK_IS_CRITICAL is better. >>>> >>>>> + }, >>>>> +}; >>>>> + >>>>> +/* pwm b clk */ >>>>> +static struct clk_regmap a1_pwm_b_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D PWM_CLK_AB_CTRL, >>>>> + .mask =3D 0x1, >>>>> + .shift =3D 25, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_b_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D pwm_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(pwm_parent_data), >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_b_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D PWM_CLK_AB_CTRL, >>>>> + .shift =3D 16, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_b_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_b_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_b =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D PWM_CLK_AB_CTRL, >>>>> + .bit_idx =3D 24, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "pwm_b", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_b_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +/* pwm c clk */ >>>>> +static struct clk_regmap a1_pwm_c_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D PWM_CLK_CD_CTRL, >>>>> + .mask =3D 0x1, >>>>> + .shift =3D 9, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_c_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D pwm_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(pwm_parent_data), >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_c_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D PWM_CLK_CD_CTRL, >>>>> + .shift =3D 0, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_c_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_c_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_c =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D PWM_CLK_CD_CTRL, >>>>> + .bit_idx =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "pwm_c", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_c_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +/* pwm d clk */ >>>>> +static struct clk_regmap a1_pwm_d_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D PWM_CLK_CD_CTRL, >>>>> + .mask =3D 0x1, >>>>> + .shift =3D 25, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_d_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D pwm_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(pwm_parent_data), >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_d_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D PWM_CLK_CD_CTRL, >>>>> + .shift =3D 16, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_d_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_d_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_d =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D PWM_CLK_CD_CTRL, >>>>> + .bit_idx =3D 24, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "pwm_d", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_d_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static const struct clk_parent_data pwm_ef_parent_data[] =3D { >>>>> + { .fw_name =3D "xtal", }, >>>>> + { .hw =3D &a1_sys_clk.hw }, >>>>> + { .fw_name =3D "fclk_div5", }, >>>>> + { .hw =3D &a1_rtc_clk.hw }, >>>>> +}; >>>>> + >>>>> +/* pwm e clk */ >>>>> +static struct clk_regmap a1_pwm_e_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D PWM_CLK_EF_CTRL, >>>>> + .mask =3D 0x3, >>>>> + .shift =3D 9, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_e_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D pwm_ef_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(pwm_ef_parent_data), >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_e_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D PWM_CLK_EF_CTRL, >>>>> + .shift =3D 0, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_e_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_e_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_e =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D PWM_CLK_EF_CTRL, >>>>> + .bit_idx =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "pwm_e", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_e_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +/* pwm f clk */ >>>>> +static struct clk_regmap a1_pwm_f_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D PWM_CLK_EF_CTRL, >>>>> + .mask =3D 0x3, >>>>> + .shift =3D 25, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_f_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D pwm_ef_parent_data, >>>>> + .num_parents =3D ARRAY_SIZE(pwm_ef_parent_data), >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_f_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D PWM_CLK_EF_CTRL, >>>>> + .shift =3D 16, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "pwm_f_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_f_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_pwm_f =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D PWM_CLK_EF_CTRL, >>>>> + .bit_idx =3D 24, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "pwm_f", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_pwm_f_div.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>> >>> [ ... ] >>> >>>>> + >>>>> +/* dmc clk */ >>>>> +static struct clk_regmap a1_dmc_sel =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D DMC_CLK_CTRL, >>>>> + .mask =3D 0x3, >>>>> + .shift =3D 9, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dmc_sel", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D sd_emmc_parents, >>>>> + .num_parents =3D 4, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dmc_div =3D { >>>>> + .data =3D &(struct clk_regmap_div_data){ >>>>> + .offset =3D DMC_CLK_CTRL, >>>>> + .shift =3D 0, >>>>> + .width =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dmc_div", >>>>> + .ops =3D &clk_regmap_divider_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dmc_sel.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dmc_sel2 =3D { >>>>> + .data =3D &(struct clk_regmap_mux_data){ >>>>> + .offset =3D DMC_CLK_CTRL, >>>>> + .mask =3D 0x1, >>>>> + .shift =3D 15, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data){ >>>>> + .name =3D "dmc_sel2", >>>>> + .ops =3D &clk_regmap_mux_ops, >>>>> + .parent_data =3D (const struct clk_parent_data []) { >>>>> + { .hw =3D &a1_dmc_div.hw }, >>>>> + { .fw_name =3D "xtal", }, >>>>> + }, >>>>> + .num_parents =3D 2, >>>>> + .flags =3D CLK_SET_RATE_PARENT, >>>>> + }, >>>>> +}; >>>>> + >>>>> +static struct clk_regmap a1_dmc =3D { >>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>> + .offset =3D DMC_CLK_CTRL, >>>>> + .bit_idx =3D 8, >>>>> + }, >>>>> + .hw.init =3D &(struct clk_init_data) { >>>>> + .name =3D "dmc", >>>>> + .ops =3D &clk_regmap_gate_ops, >>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>> + &a1_dmc_sel2.hw >>>>> + }, >>>>> + .num_parents =3D 1, >>>>> + /* >>>>> + * This clock is used by DDR clock which setted in BL2 >>>>> + * and is required by the platform to operate correctly. >>>>> + * Until the following condition are met, we need this clock to >>>>> + * be marked as critical: >>>>> + * a) Mark the clock used by a firmware resource, if possible >>>>> + * b) CCF has a clock hand-off mechanism to make the sure the >>>>> + * clock stays on until the proper driver comes along >>>>> + */ >>>>> + .flags =3D CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, >>>>> + }, >>>>> +}; >>>> >>>> Should you put all this DMC stuff in RO until you got a driver for it ? >>> OK, replace as clk_regmap_gate_ro_ops >>>> >>> [ ... ] >>>>> + >>>>> +static int meson_a1_periphs_probe(struct platform_device *pdev) >>>>> +{ >>>>> + int ret; >>>>> + >>>>> + ret =3D meson_eeclkc_probe(pdev); >>>>> + if (ret) >>>>> + return ret; >>>>> + >>>>> + return 0; >>>>> +} >>>> >>>> Again this function is function is useless and it makes me wonder if y= ou >>>> should really be using meson_eeclkc_probe() >>>> >>>> This makes you use syscon which is not correct unless you have a good >>>> reason ? >>>> >>> If it can not use the meson_eeclkc_probe(), I will realize a probe func= tion >>> which is mostly duplicate with meson_eeclkc_probe() except >>> "syscon_node_to_regmap" >>> >>> Maybe another common probe function and a new file are required for A1 >>> three drivers? =EF=BC=88include the CPU clock driver=EF=BC=89 >> >> Maybe >> > I will add a new function base on meson-eeclk.c >>> >>> Or using meson_eeclkc_probe is more easier? >> >> It is not question of easiness, but correctness. >> >>> >>>> Is there anything but clocks and resets in these register region ? >>> No, there is only clocks in the register region. >>> the same does the PLL register region. >> >> Then there is no reason to use syscon for those drivers >>Add a new probe function for A1 >>>> >>>>> + >>>>> +static const struct meson_eeclkc_data a1_periphs_data =3D { >>>>> + .regmap_clks =3D a1_periphs_regmaps, >>>>> + .regmap_clk_num =3D ARRAY_SIZE(a1_periphs_regmaps), >>>>> + .hw_onecell_data =3D &a1_periphs_hw_onecell_data, >>>>> +}; >>>>> +static const struct of_device_id clkc_match_table[] =3D { >>>>> + { >>>>> + .compatible =3D "amlogic,a1-periphs-clkc", >>>>> + .data =3D &a1_periphs_data >>>>> + }, >>>>> + { /* sentinel */ } >>>>> +}; >>>>> + >>>>> +static struct platform_driver a1_driver =3D { >>>>> + .probe =3D meson_a1_periphs_probe, >>>>> + .driver =3D { >>>>> + .name =3D "a1-periphs-clkc", >>>>> + .of_match_table =3D clkc_match_table, >>>>> + }, >>>>> +}; >>>>> + >>>>> +builtin_platform_driver(a1_driver); >>>>> diff --git a/drivers/clk/meson/a1.h b/drivers/clk/meson/a1.h >>>>> new file mode 100644 >>>>> index 0000000..1ae5e04 >>>>> --- /dev/null >>>>> +++ b/drivers/clk/meson/a1.h >>>>> @@ -0,0 +1,120 @@ >>>>> +/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ >>>>> +/* >>>>> + * Copyright (c) 2019 Amlogic, Inc. All rights reserved. >>>>> + */ >>>>> + >>>>> +#ifndef __A1_H >>>>> +#define __A1_H >>>>> + >>>>> +/* peripheral clock controller register offset */ >>>>> +#define SYS_OSCIN_CTRL 0x0 >>>>> +#define RTC_BY_OSCIN_CTRL0 0x4 >>>>> +#define RTC_BY_OSCIN_CTRL1 0x8 >>>>> +#define RTC_CTRL 0xc >>>>> +#define SYS_CLK_CTRL0 0x10 >>>>> +#define AXI_CLK_CTRL0 0x14 >>>>> +#define SYS_CLK_EN0 0x1c >>>>> +#define SYS_CLK_EN1 0x20 >>>>> +#define AXI_CLK_EN 0x24 >>>>> +#define DSPA_CLK_EN 0x28 >>>>> +#define DSPB_CLK_EN 0x2c >>>>> +#define DSPA_CLK_CTRL0 0x30 >>>>> +#define DSPB_CLK_CTRL0 0x34 >>>>> +#define CLK12_24_CTRL 0x38 >>>>> +#define GEN_CLK_CTRL 0x3c >>>>> +#define TIMESTAMP_CTRL0 0x40 >>>>> +#define TIMESTAMP_CTRL1 0x44 >>>>> +#define TIMESTAMP_CTRL2 0x48 >>>>> +#define TIMESTAMP_VAL0 0x4c >>>>> +#define TIMESTAMP_VAL1 0x50 >>>>> +#define TIMEBASE_CTRL0 0x54 >>>>> +#define TIMEBASE_CTRL1 0x58 >>>>> +#define SAR_ADC_CLK_CTRL 0xc0 >>>>> +#define PWM_CLK_AB_CTRL 0xc4 >>>>> +#define PWM_CLK_CD_CTRL 0xc8 >>>>> +#define PWM_CLK_EF_CTRL 0xcc >>>>> +#define SPICC_CLK_CTRL 0xd0 >>>>> +#define TS_CLK_CTRL 0xd4 >>>>> +#define SPIFC_CLK_CTRL 0xd8 >>>>> +#define USB_BUSCLK_CTRL 0xdc >>>>> +#define SD_EMMC_CLK_CTRL 0xe0 >>>>> +#define CECA_CLK_CTRL0 0xe4 >>>>> +#define CECA_CLK_CTRL1 0xe8 >>>>> +#define CECB_CLK_CTRL0 0xec >>>>> +#define CECB_CLK_CTRL1 0xf0 >>>>> +#define PSRAM_CLK_CTRL 0xf4 >>>>> +#define DMC_CLK_CTRL 0xf8 >>>>> +#define FCLK_DIV1_SEL 0xfc >>>>> +#define TST_CTRL 0x100 >>>>> + >>>>> +#define CLKID_XTAL_CLKTREE 0 >>>>> +#define CLKID_SYS_A_SEL 89 >>>>> +#define CLKID_SYS_A_DIV 90 >>>>> +#define CLKID_SYS_A 91 >>>>> +#define CLKID_SYS_B_SEL 92 >>>>> +#define CLKID_SYS_B_DIV 93 >>>>> +#define CLKID_SYS_B 94 >>>>> +#define CLKID_DSPA_A_SEL 95 >>>>> +#define CLKID_DSPA_A_DIV 96 >>>>> +#define CLKID_DSPA_A 97 >>>>> +#define CLKID_DSPA_B_SEL 98 >>>>> +#define CLKID_DSPA_B_DIV 99 >>>>> +#define CLKID_DSPA_B 100 >>>>> +#define CLKID_DSPB_A_SEL 101 >>>>> +#define CLKID_DSPB_A_DIV 102 >>>>> +#define CLKID_DSPB_A 103 >>>>> +#define CLKID_DSPB_B_SEL 104 >>>>> +#define CLKID_DSPB_B_DIV 105 >>>>> +#define CLKID_DSPB_B 106 >>>>> +#define CLKID_RTC_32K_CLKIN 107 >>>>> +#define CLKID_RTC_32K_DIV 108 >>>>> +#define CLKID_RTC_32K_XTAL 109 >>>>> +#define CLKID_RTC_32K_SEL 110 >>>>> +#define CLKID_CECB_32K_CLKIN 111 >>>>> +#define CLKID_CECB_32K_DIV 112 >>>>> +#define CLKID_CECB_32K_SEL_PRE 113 >>>>> +#define CLKID_CECB_32K_SEL 114 >>>>> +#define CLKID_CECA_32K_CLKIN 115 >>>>> +#define CLKID_CECA_32K_DIV 116 >>>>> +#define CLKID_CECA_32K_SEL_PRE 117 >>>>> +#define CLKID_CECA_32K_SEL 118 >>>>> +#define CLKID_DIV2_PRE 119 >>>>> +#define CLKID_24M_DIV2 120 >>>>> +#define CLKID_GEN_SEL 121 >>>>> +#define CLKID_GEN_DIV 122 >>>>> +#define CLKID_SARADC_DIV 123 >>>>> +#define CLKID_PWM_A_SEL 124 >>>>> +#define CLKID_PWM_A_DIV 125 >>>>> +#define CLKID_PWM_B_SEL 126 >>>>> +#define CLKID_PWM_B_DIV 127 >>>>> +#define CLKID_PWM_C_SEL 128 >>>>> +#define CLKID_PWM_C_DIV 129 >>>>> +#define CLKID_PWM_D_SEL 130 >>>>> +#define CLKID_PWM_D_DIV 131 >>>>> +#define CLKID_PWM_E_SEL 132 >>>>> +#define CLKID_PWM_E_DIV 133 >>>>> +#define CLKID_PWM_F_SEL 134 >>>>> +#define CLKID_PWM_F_DIV 135 >>>>> +#define CLKID_SPICC_SEL 136 >>>>> +#define CLKID_SPICC_DIV 137 >>>>> +#define CLKID_SPICC_SEL2 138 >>>>> +#define CLKID_TS_DIV 139 >>>>> +#define CLKID_SPIFC_SEL 140 >>>>> +#define CLKID_SPIFC_DIV 141 >>>>> +#define CLKID_SPIFC_SEL2 142 >>>>> +#define CLKID_USB_BUS_SEL 143 >>>>> +#define CLKID_USB_BUS_DIV 144 >>>>> +#define CLKID_SD_EMMC_SEL 145 >>>>> +#define CLKID_SD_EMMC_DIV 146 >>>>> +#define CLKID_SD_EMMC_SEL2 147 >>>>> +#define CLKID_PSRAM_SEL 148 >>>>> +#define CLKID_PSRAM_DIV 149 >>>>> +#define CLKID_PSRAM_SEL2 150 >>>>> +#define CLKID_DMC_SEL 151 >>>>> +#define CLKID_DMC_DIV 152 >>>>> +#define CLKID_DMC_SEL2 153 >>>>> +#define NR_CLKS 154 >>>>> + >>>>> +#include >>>>> + >>>>> +#endif /* __A1_H */ >>>> >>>> . >>>> >> >> . >> 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=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS 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 9DC60C17441 for ; Tue, 12 Nov 2019 16:59:17 +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 5939B214E0 for ; Tue, 12 Nov 2019 16:59:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="UfUQZoTM"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="n2V1Okij" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5939B214E0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date: In-reply-to:Subject:To:From:References:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=w7qt5w/8HGWJVe2XetC1WLP9FNlnUL038BXn0+Ela2g=; b=UfUQZoTMuXCTaV9F880EY/Mlzn dNEHS2tHzVqaMH2s//JjMXtH+qIFJqu7uuMWqCtZk/nqO3GBrN4TgqWlPGn9oBT0tX7WdVqm7XpKC c/U5MdPGuS5omEmHC8/OE6LlM7rN5kusojqVoxcS76OK1QhabwgYz5FLkb4yXc0CBNS2jllTOWu5v 0uS8a5achZk2yEDBRJbf664eQVAfwCSv6cQZAVGFA86PVcylSbvGRKruil4g6pNs0yTN1kjnfA3To Et+2m5Kj3zdcIXXRh04gJ9V+j1SIDfUzPjV81rrgJGbLCFDg9aEZmVWAD/D/UOgPef7SMXbZ0nkX5 e2K6IAHA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUZVc-00015R-Q3; Tue, 12 Nov 2019 16:59:16 +0000 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUZVW-00014P-8U for linux-arm-kernel@lists.infradead.org; Tue, 12 Nov 2019 16:59:15 +0000 Received: by mail-wr1-x443.google.com with SMTP id e6so19420460wrw.1 for ; Tue, 12 Nov 2019 08:59:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version:content-transfer-encoding; bh=GUMF3sLXww7f+IF9cNmdUAWTGgI0qtADr058kEfMDKI=; b=n2V1OkijbSZNkl/icRDq75p5mf0ZGbZay8KbpLmBrG1lk7lfWqbpU6jpDxJAZPRZ3T z81ft5pRfDRc5xdVjw0XgWkwfqrBy9xcD7TLtj1OEOFa5lyQ23TGnrfx+cxU87vC/UYd GDm/9/KjvgJ9NguS+DGm7uWfu1cVgsppWmXMizGsn+pilCNSxLbNJv8y0hckmS5LHBsc zdZJ94ZOol6ZovUjbwRo1Oo5y/dQ889EeCna1erixX7/xMBz6UD7xRSTXqGqAJUnPG6L MPOpXjeJRo9D2CaOx3iDLXZxdlunjBO5AKsClqaOVoIcIOnGU1FIsJqGCK1l4DyTtiI7 cn4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version:content-transfer-encoding; bh=GUMF3sLXww7f+IF9cNmdUAWTGgI0qtADr058kEfMDKI=; b=KZoFCJZVitLeyOGtV1sY8y2AJ2WvDueaf/L+/5xoYQciMDNm9YkaFkxHW79Yh/fBxJ f5927XKz4GdNqPDz3x547bUWfn4JT6UKxIFsXeW0SfVzHzR+SrMxVzhZ0U/6x4pjC6ET KneiOGVQ0vP0rfa4nsN9LjDRz4KxFg5IJAdlHeR4gYtAkiHHQksaEn7n33F25eL54oUA TGwROsK/9BhrUNxMEnXWppNMkj1dJgX+9ZABTkhwNnxz3tj7zL99gU6kudvu/+G3gQie nJ9HFbM9M/HESDUM+n8/a6T0cV6Mb780FXaIaVE33p4cb9ah79KDDbrTWFRbGVxzAXxS L3Xg== X-Gm-Message-State: APjAAAXqVQ1fAx1SHdygBJsOKtOJm0T3RKayhMI+GliW9fJJJ5PAPOpr yJUKgwUKzdvCDaVWjJUGcWvqCw== X-Google-Smtp-Source: APXvYqxgacioZSaEq1bTl4qUBqCvPPpNvEMT9ObPmlavQMudZc51cRBi7C7y1qcx/8Cizav8AA8/Aw== X-Received: by 2002:a5d:5742:: with SMTP id q2mr6855584wrw.311.1573577947729; Tue, 12 Nov 2019 08:59:07 -0800 (PST) Received: from localhost (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id y17sm22470819wrs.58.2019.11.12.08.59.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2019 08:59:06 -0800 (PST) References: <1571382865-41978-1-git-send-email-jian.hu@amlogic.com> <1571382865-41978-4-git-send-email-jian.hu@amlogic.com> <1jsgnmba1a.fsf@starbuckisacylon.baylibre.com> <49b33e94-910b-3fd9-4da1-050742d07e93@amlogic.com> <1jblts3v7e.fsf@starbuckisacylon.baylibre.com> User-agent: mu4e 1.3.3; emacs 26.2 From: Jerome Brunet To: Jian Hu , Neil Armstrong Subject: Re: [PATCH v2 3/3] clk: meson: a1: add support for Amlogic A1 clock driver In-reply-to: Date: Tue, 12 Nov 2019 17:59:05 +0100 Message-ID: <1jh839f2ue.fsf@starbuckisacylon.baylibre.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191112_085910_374943_D880F03B X-CRM114-Status: GOOD ( 30.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rob Herring , Victor Wan , Jianxin Pan , Martin Blumenstingl , Kevin Hilman , Michael Turquette , linux-kernel@vger.kernel.org, Stephen Boyd , Qiufang Dai , Chandle Zou , linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIFNhdCAwOSBOb3YgMjAxOSBhdCAxMjoxNiwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNv bT4gd3JvdGU6Cgo+IEhpLCBKZXJvbWUKPgo+IFNvcnJ5IGZvciBsYXRlIHJlbHkKPgo+IE9uIDIw MTkvMTEvNCAxNjoyNCwgSmVyb21lIEJydW5ldCB3cm90ZToKPj4KPj4gT24gRnJpIDI1IE9jdCAy MDE5IGF0IDEzOjMyLCBKaWFuIEh1IDxqaWFuLmh1QGFtbG9naWMuY29tPiB3cm90ZToKPj4KPj4+ IEhpLCBKZXJvbWUKPj4+Cj4+PiBUaGFua3MgZm9yIHlvdXIgcmV2aWV3Cj4+Pgo+Pj4gT24gMjAx OS8xMC8yMSAxOTo0MSwgSmVyb21lIEJydW5ldCB3cm90ZToKPj4+Pgo+Pj4+IE9uIEZyaSAxOCBP Y3QgMjAxOSBhdCAwOToxNCwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNvbT4gd3JvdGU6Cj4+ Pj4KPj4+Pj4gVGhlIEFtbG9naWMgQTEgY2xvY2sgaW5jbHVkZXMgdGhyZWUgZHJpdmVyczoKPj4+ Pj4gcGVyaXBoZXJhbCBjbG9ja3MsIHBsbCBjbG9ja3MsIENQVSBjbG9ja3MuCj4+Pj4+IHN5cyBw bGwgYW5kIENQVSBjbG9ja3Mgd2lsbCBiZSBzZW50IGluIG5leHQgcGF0Y2guCj4+Pj4+Cj4+Pj4+ IFVubGlrZSB0aGUgcHJldmlvdXMgc2VyaWVzLCB0aGVyZSBpcyBubyBFRS9BTyBkb21haW4KPj4+ Pj4gaW4gQTEgQ0xLIGNvbnRyb2xsZXJzLgo+Pj4+Pgo+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBKaWFu IEh1IDxqaWFuLmh1QGFtbG9naWMuY29tPgo+Pj4+PiAtLS0KPj4+Pj4gICAgZHJpdmVycy9jbGsv bWVzb24vS2NvbmZpZyAgfCAgIDEwICsKPj4+Pj4gICAgZHJpdmVycy9jbGsvbWVzb24vTWFrZWZp bGUgfCAgICAxICsKPj4+Pj4gICAgZHJpdmVycy9jbGsvbWVzb24vYTEtcGxsLmMgfCAgMzQ1ICsr KysrKysKPj4+Pj4gICAgZHJpdmVycy9jbGsvbWVzb24vYTEtcGxsLmggfCAgIDU2ICsrCj4+Pj4+ ICAgIGRyaXZlcnMvY2xrL21lc29uL2ExLmMgICAgIHwgMjI2NCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4+PiAgICBkcml2ZXJzL2Nsay9tZXNvbi9hMS5o ICAgICB8ICAxMjAgKysrCj4+Pj4+ICAgIDYgZmlsZXMgY2hhbmdlZCwgMjc5NiBpbnNlcnRpb25z KCspCj4+Pj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2Nsay9tZXNvbi9hMS1wbGwu Ywo+Pj4+PiAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jbGsvbWVzb24vYTEtcGxsLmgK Pj4+Pj4gICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL21lc29uL2ExLmMKPj4+Pj4g ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL21lc29uL2ExLmgKPj4+Pgo+Pj4+IElu IHRoZSBuZXh0IHZlcnNpb24sIG9uZQo+Pj4gT0ssIEkgd2lsbCBzZW5kIGExIHBlcmlwaGVyYWwg YW5kIHBsbCBkcml2ZXIgaW4gdHdvIHBhdGNoLgo+Pj4+Cj4+Pj4+Cj4+Pj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2Nsay9tZXNvbi9LY29uZmlnIGIvZHJpdmVycy9jbGsvbWVzb24vS2NvbmZpZwo+ Pj4+PiBpbmRleCBkYWJlYjQzLi5jMjgwOWIyIDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2Ns ay9tZXNvbi9LY29uZmlnCj4+Pj4+ICsrKyBiL2RyaXZlcnMvY2xrL21lc29uL0tjb25maWcKPj4+ Pj4gQEAgLTkzLDYgKzkzLDE2IEBAIGNvbmZpZyBDT01NT05fQ0xLX0FYR19BVURJTwo+Pj4+PiAg ICAJICBTdXBwb3J0IGZvciB0aGUgYXVkaW8gY2xvY2sgY29udHJvbGxlciBvbiBBbUxvZ2ljIEEx MTNEIGRldmljZXMsCj4+Pj4+ICAgIAkgIGFrYSBheGcsIFNheSBZIGlmIHlvdSB3YW50IGF1ZGlv IHN1YnN5c3RlbSB0byB3b3JrLgo+Pj4+PiAgICArY29uZmlnIENPTU1PTl9DTEtfQTEKPj4+Pj4g Kwlib29sCj4+Pj4+ICsJZGVwZW5kcyBvbiBBUkNIX01FU09OCj4+Pj4+ICsJc2VsZWN0IENPTU1P Tl9DTEtfTUVTT05fUkVHTUFQCj4+Pj4+ICsJc2VsZWN0IENPTU1PTl9DTEtfTUVTT05fRFVBTERJ Vgo+Pj4+PiArCXNlbGVjdCBDT01NT05fQ0xLX01FU09OX1BMTAo+Pj4+PiArCWhlbHAKPj4+Pj4g KwkgIFN1cHBvcnQgZm9yIHRoZSBjbG9jayBjb250cm9sbGVyIG9uIEFtbG9naWMgQTExM0wgZGV2 aWNlLAo+Pj4+PiArCSAgYWthIGExLiBTYXkgWSBpZiB5b3Ugd2FudCBwZXJpcGhlcmFscyB0byB3 b3JrLgo+Pj4+PiArCj4+Pj4+ICAgIGNvbmZpZyBDT01NT05fQ0xLX0cxMkEKPj4+Pj4gICAgCWJv b2wKPj4+Pj4gICAgCWRlcGVuZHMgb24gQVJDSF9NRVNPTgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9jbGsvbWVzb24vTWFrZWZpbGUgYi9kcml2ZXJzL2Nsay9tZXNvbi9NYWtlZmlsZQo+Pj4+ PiBpbmRleCAzOTM5ZjIxLi4yOGNiYWUxIDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2Nsay9t ZXNvbi9NYWtlZmlsZQo+Pj4+PiArKysgYi9kcml2ZXJzL2Nsay9tZXNvbi9NYWtlZmlsZQo+Pj4+ PiBAQCAtMTYsNiArMTYsNyBAQCBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NRVNPTl9WSURfUExM X0RJVikgKz0gdmlkLXBsbC1kaXYubwo+Pj4+PiAgICAgIG9iai0kKENPTkZJR19DT01NT05fQ0xL X0FYRykgKz0gYXhnLm8gYXhnLWFvY2xrLm8KPj4+Pj4gICAgb2JqLSQoQ09ORklHX0NPTU1PTl9D TEtfQVhHX0FVRElPKSArPSBheGctYXVkaW8ubwo+Pj4+PiArb2JqLSQoQ09ORklHX0NPTU1PTl9D TEtfQTEpICs9IGExLXBsbC5vIGExLm8KPj4+Pgo+Pj4+IFNvIGZhciwgYWxsIHRoZSBjb250cm9s bGVyIGhhZCB0aGVyZSBvd24gb3B0aW9uLCBJIGRvbid0IHNlZSB3aHkgaXQKPj4+PiBzaG91bGQg YmUgZGlmZmVyZW50IGhlcmUuCj4+Pj4KPj4+IE9LLCBJIHdpbGwgYWRkIHRoZSBvdGhlciBvcHRp b24gQ09ORklHX0NPTU1PTl9DTEtfQTFfUExMIGZvciBwbGwgZHJpdmVyCj4+Pj4+ICAgIG9iai0k KENPTkZJR19DT01NT05fQ0xLX0dYQkIpICs9IGd4YmIubyBneGJiLWFvY2xrLm8KPj4+Pj4gICAg b2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfRzEyQSkgKz0gZzEyYS5vIGcxMmEtYW9jbGsubwo+Pj4+ PiAgICBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NRVNPTjhCKSArPSBtZXNvbjhiLm8KPj4+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL21lc29uL2ExLXBsbC5jIGIvZHJpdmVycy9jbGsvbWVz b24vYTEtcGxsLmMKPj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+Pj4gaW5kZXggMDAwMDAw MC4uNDg2ZDk2NAo+Pj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4+ICsrKyBiL2RyaXZlcnMvY2xrL21l c29uL2ExLXBsbC5jCj4+Pj4+IEBAIC0wLDAgKzEsMzQ1IEBACj4+Pj4+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkKPj4+Pj4gKy8qCj4+Pj4+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTkgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4+PiAr ICogQXV0aG9yOiBKaWFuIEh1IDxqaWFuLmh1QGFtbG9naWMuY29tPgo+Pj4+PiArICovCj4+Pj4+ ICsKPj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4+Pgo+Pj4+IEh1 bSAuLi4gbG9va3MgbGlrZSBzb21lIHRoaW5ncyBhcmUgbWlzc2luZyBoZXJlCj4+Pj4KPj4+PiAj aW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+Pj4gI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92 aWRlci5oPgo+Pj4+Cj4+Pj4gPwo+Pj4gIzEKPj4+IFRoZXJlIGlzIDxsaW51eC9jbGstcHJvdmlk ZXIuaD4gaW4gbWVzb24tZWVjbGsuaCBmaWxlLAo+Pj4KPj4+IGFuZCBmb3IgQTEgZHJpdmVyKGEx LmMvYTEtcGxsLmMpIHRoZSBoZWFkIGZpbGUgaXMgbm90IHJlcXVpZWQuCj4+Pgo+Pj4gIzIKPj4+ IEZvciBBMSBkcml2ZXIsIHRoZSBmaWxlICJsaW51eC9vZl9kZXZpY2UuaCIgaXMgbm90IHJlcXVp cmVkLgo+Pj4gSXQgaXMgcmVxdWlyZWQgYnkgbWVzb24tZWVjbGsuYyBpbiBmYWN0Lgo+Pgo+PiBZ b3UgYXJlIHVzaW5nIHdoYXQgaXMgcHJvdmlkZWQgYnkgdGhlc2UgaGVhZGVycyBkaXJlY3RseSBp biB0aGlzIGZpbGUKPj4gSWYgbWVzb24tZWVjbGsgZXZlciBjaGFuZ2VzLCB5b3VyIGRyaXZlciBi cmVha3MKPj4KPiBPSywgSSB3aWxsIGFkZCB0aGUgdHdvIGhlYWRlciBmaWxlLgo+Pj4+Cj4+Pj4+ ICsjaW5jbHVkZSAiY2xrLXBsbC5oIgo+Pj4+PiArI2luY2x1ZGUgIm1lc29uLWVlY2xrLmgiCj4+ Pj4+ICsjaW5jbHVkZSAiYTEtcGxsLmgiCj4+Pj4KPj4+PiBBbHBoYW51bWVyaWMgb3JkZXIgcGxl YXNlCj4+Pj4KPj4+IE9LLCBJIHdpbGwgY2hhbmdlIGl0IGluIHRoZSBuZXh0IHZlcnNpb24uCj4+ Pgo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZml4ZWRfcGxsX2Rj byA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IG1lc29uX2Nsa19wbGxfZGF0YSl7Cj4+Pj4+ ICsJCS5lbiA9IHsKPj4+Pj4gKwkJCS5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+ Pj4+ICsJCQkuc2hpZnQgICA9IDI4LAo+Pj4+PiArCQkJLndpZHRoICAgPSAxLAo+Pj4+PiArCQl9 LAo+Pj4+PiArCQkubSA9IHsKPj4+Pj4gKwkJCS5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RS TDAsCj4+Pj4+ICsJCQkuc2hpZnQgICA9IDAsCj4+Pj4+ICsJCQkud2lkdGggICA9IDgsCj4+Pj4+ ICsJCX0sCj4+Pj4+ICsJCS5uID0gewo+Pj4+PiArCQkJLnJlZ19vZmYgPSBBTkFDVFJMX0ZJWFBM TF9DVFJMMCwKPj4+Pj4gKwkJCS5zaGlmdCAgID0gMTAsCj4+Pj4+ICsJCQkud2lkdGggICA9IDUs Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5mcmFjID0gewo+Pj4+PiArCQkJLnJlZ19vZmYgPSBBTkFD VFJMX0ZJWFBMTF9DVFJMMSwKPj4+Pj4gKwkJCS5zaGlmdCAgID0gMCwKPj4+Pj4gKwkJCS53aWR0 aCAgID0gMTksCj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5sID0gewo+Pj4+PiArCQkJLnJlZ19vZmYg PSBBTkFDVFJMX0ZJWFBMTF9DVFJMMCwKPj4+Pj4gKwkJCS5zaGlmdCAgID0gMzEsCj4+Pj4+ICsJ CQkud2lkdGggICA9IDEsCj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5yc3QgPSB7Cj4+Pj4+ICsJCQku cmVnX29mZiA9IEFOQUNUUkxfRklYUExMX0NUUkwwLAo+Pj4+PiArCQkJLnNoaWZ0ICAgPSAyOSwK Pj4+Pj4gKwkJCS53aWR0aCAgID0gMSwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5o dy5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImZpeGVk X3BsbF9kY28iLAo+Pj4+PiArCQkub3BzID0gJm1lc29uX2Nsa19wbGxfcm9fb3BzLAo+Pj4+PiAr CQkucGFyZW50X2RhdGEgPSAmKGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEpewo+Pj4+PiAr CQkJLmZ3X25hbWUgPSAieHRhbF9maXhwbGwiLAo+Pj4+PiArCQkJLm5hbWUgPSAieHRhbF9maXhw bGwiLAo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCX0sCj4+ Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZml4ZWRf cGxsID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+ Pj4+PiArCQkub2Zmc2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+ICsJCS5iaXRfaWR4 ID0gMjAsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAiZml4ZWRfcGxsIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtf cmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xr X2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX2ZpeGVkX3BsbF9kY28uaHcKPj4+Pj4gKwkJfSwKPj4+ Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLyoKPj4+Pj4gKwkJICogVGhpcyBjbG9j ayBpcyBmY2xrX2RpdjIvMy80J3MgcGFyZW50LAo+Pj4+PiArCQkgKiBIb3dldmVyLCBmY2xrX2Rp djIvMy81IGZlZWRzIEFYSS9BUEIvRERSLgo+Pj4+Cj4+Pj4gaXMgaXQgZmNsa19kaXYyLzMvNCBv ciBmY2xrX2RpdjIvMy81ID8KPj4+Pgo+Pj4+PiArCQkgKiBJdCBpcyByZXF1aXJlZCBieSB0aGUg cGxhdGZvcm0gdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCj4+Pj4+ICsJCSAqIFVudGlsIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uIGFyZSBtZXQsIHdlIG5lZWQgdGhpcyBjbG9jayB0bwo+Pj4+PiArCQkg KiBiZSBtYXJrZWQgYXMgY3JpdGljYWw6Cj4+Pj4+ICsJCSAqIGEpIE1hcmsgdGhlIGNsb2NrIHVz ZWQgYnkgYSBmaXJtd2FyZSByZXNvdXJjZSwgaWYgcG9zc2libGUKPj4+Pj4gKwkJICogYikgQ0NG IGhhcyBhIGNsb2NrIGhhbmQtb2ZmIG1lY2hhbmlzbSB0byBtYWtlIHRoZSBzdXJlIHRoZQo+Pj4+ PiArCQkgKiAgICBjbG9jayBzdGF5cyBvbiB1bnRpbCB0aGUgcHJvcGVyIGRyaXZlciBjb21lcyBh bG9uZwo+Pj4+PiArCQkgKi8KPj4+Pgo+Pj4+IERvbid0IGJsaW5kbHkgY29weS9wYXN0ZSBjb21t ZW50cyBmcm9tIG90aGVyIGRyaXZlcnMuIFRoZXJlIGlzIG5vIGRyaXZlcgo+Pj4+IGZvciB0aGUg ZGV2aWNlcyB5b3UgYXJlIG1lbnRpb25uaW5nIHNvIHRoZSBlbmQgb2YgdGhlIGNvbW1lbnQgaXMK Pj4+PiBjb25mdXNpbmcuIFRoZSAzIGZpcnN0IGxpbmVzIHdlcmUgZW5vdWdoCj4+Pj4KPj4+IE9L LCBJIHdpbGwgcmVtb3ZlIHRoZSBjb25mdXNpbmcgY29tbWVudHMKPj4+Cj4+Pj4+ICsJCS5mbGFn cyA9IENMS19JU19DUklUSUNBTCwKPj4+Pgo+Pj4+ID5Gcm9tIHlvdXIgY29tbWVudCwgSSB1bmRl cnN0YW5kIHRoYXQgc29tZSBjaGlsZCBhcmUgY3JpdGljYWwsIG5vdCB0aGlzCj4+Pj4gcGFydGlj dWxhciAob3IgYXQgbGVhc3QsIG5vdCBkaXJlY3RseSkuIFNvIHRoaXMgY2FuIGJlIHJlbW92ZWQg QUZBSUNUCj4+Pj4KPj4+PiBZb3Ugc2hvdWxkIGV2ZW4gbmVlZCBDTEtfSUdOT1JFX1VOVVNFRCBm b3IgdGhpcyBvbmUgc2luY2UgdGhlIGNsb2NrIHdpbGwKPj4+PiBhbHJlYWR5IGJlIGVuYWJsZWQg YmVmb3JlIHRoZSBsYXRlX2luaXQoKSBraWNrcyBpbgo+Pj4+Cj4+PiBPSywgSSB3aWxsIHJlcGxh Y2UgaXQgYXMgQ0xLX0lHTk9SRV9VTlVTRUQuCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsK Pj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxsX211bHRfcmFuZ2UgYTFfaGlmaV9wbGxfbXVs dF9yYW5nZSA9IHsKPj4+Pj4gKwkubWluID0gMzIsCj4+Pj4+ICsJLm1heCA9IDY0LAo+Pj4+PiAr fTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfc2VxdWVuY2UgYTFfaGlm aV9pbml0X3JlZ3NbXSA9IHsKPj4+Pj4gKwl7IC5yZWcgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDEs IC5kZWYgPSAweDAxODAwMDAwIH0sCj4+Pj4+ICsJeyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NU UkwyLCAuZGVmID0gMHgwMDAwMTEwMCB9LAo+Pj4+PiArCXsgLnJlZyA9IEFOQUNUUkxfSElGSVBM TF9DVFJMMywgLmRlZiA9IDB4MTAwYTExMDAgfSwKPj4+Pj4gKwl7IC5yZWcgPSBBTkFDVFJMX0hJ RklQTExfQ1RSTDQsIC5kZWYgPSAweDAwMzAyMDAwIH0sCj4+Pj4+ICsJeyAucmVnID0gQU5BQ1RS TF9ISUZJUExMX0NUUkwwLCAuZGVmID0gMHgwMWYxODQ0MCB9LAo+Pj4+PiArCXsgLnJlZyA9IEFO QUNUUkxfSElGSVBMTF9DVFJMMCwgLmRlZiA9IDB4MTFmMTg0NDAsIC5kZWxheV91cyA9IDEwIH0s Cj4+Pj4+ICsJeyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLCAuZGVmID0gMHgxNWYxODQ0 MCwgLmRlbGF5X3VzID0gNDAgfSwKPj4+Pj4gKwl7IC5yZWcgPSBBTkFDVFJMX0hJRklQTExfQ1RS TDIsIC5kZWYgPSAweDAwMDAxMTQwIH0sCj4+Pj4+ICsJeyAucmVnID0gQU5BQ1RSTF9ISUZJUExM X0NUUkwyLCAuZGVmID0gMHgwMDAwMTEwMCB9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3Rh dGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2hpZmlfcGxsID0gewo+Pj4+PiArCS5kYXRhID0gJihz dHJ1Y3QgbWVzb25fY2xrX3BsbF9kYXRhKXsKPj4+Pj4gKwkJLmVuID0gewo+Pj4+PiArCQkJLnJl Z19vZmYgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDAsCj4+Pj4+ICsJCQkuc2hpZnQgICA9IDI4LAo+ Pj4+PiArCQkJLndpZHRoICAgPSAxLAo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubSA9IHsKPj4+Pj4g KwkJCS5yZWdfb2ZmID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLAo+Pj4+PiArCQkJLnNoaWZ0ICAg PSAwLAo+Pj4+PiArCQkJLndpZHRoICAgPSA4LAo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubiA9IHsK Pj4+Pj4gKwkJCS5yZWdfb2ZmID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLAo+Pj4+PiArCQkJLnNo aWZ0ICAgPSAxMCwKPj4+Pj4gKwkJCS53aWR0aCAgID0gNSwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJ LmZyYWMgPSB7Cj4+Pj4+ICsJCQkucmVnX29mZiA9IEFOQUNUUkxfSElGSVBMTF9DVFJMMSwKPj4+ Pj4gKwkJCS5zaGlmdCAgID0gMCwKPj4+Pj4gKwkJCS53aWR0aCAgID0gMTksCj4+Pj4+ICsJCX0s Cj4+Pj4+ICsJCS5sID0gewo+Pj4+PiArCQkJLnJlZ19vZmYgPSBBTkFDVFJMX0hJRklQTExfU1RT LAo+Pj4+PiArCQkJLnNoaWZ0ICAgPSAzMSwKPj4+Pj4gKwkJCS53aWR0aCAgID0gMSwKPj4+Pj4g KwkJfSwKPj4+Pj4gKwkJLnJhbmdlID0gJmExX2hpZmlfcGxsX211bHRfcmFuZ2UsCj4+Pj4+ICsJ CS5pbml0X3JlZ3MgPSBhMV9oaWZpX2luaXRfcmVncywKPj4+Pj4gKwkJLmluaXRfY291bnQgPSBB UlJBWV9TSVpFKGExX2hpZmlfaW5pdF9yZWdzKSwKPj4+Pj4gKwkJLnN0cmljdF9zZXF1ZW5jZSA9 IHRydWUsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpewo+Pj4+PiArCQkubmFtZSA9ICJoaWZpX3BsbCIsCj4+Pj4+ICsJCS5vcHMgPSAmbWVzb25f Y2xrX3BsbF9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0IGNsa19w YXJlbnRfZGF0YSl7Cj4+Pj4+ICsJCQkuZndfbmFtZSA9ICJ4dGFsX2ZpeHBsbCIsCj4+Pj4+ICsJ CQkubmFtZSA9ICJ4dGFsX2ZpeHBsbCIsCj4+Pj4KPj4+PiBCb3RoIHNob3VsZCBwcm92aWRlZCB3 aGVuIGEgY29udHJvbGxlciB0cmFuc2l0aW9uIGZyb20gdGhlIG9sZCB3YXkgb2YKPj4+PiBkZXNj cmliaW5nIHBhcmVudCB0byB0aGUgbmV3IHdheS4gVGhpcyBpcyBhIG5ldyBjb250cm9sbGVyIHNv IGl0IGRvZXMKPj4+PiBub3QgYXBwbHkuCj4+PiBJIGRvIG5vdCB1bmRlcnN0YW5kIHdoeSBpdCBk b2VzIG5vdCBhcHBseSwgY291bGQgeW91IGV4cGxhaW4gbW9yZT8KPj4KPj4gWW91ciBkcml2ZXIg aXMgbmV3LCBpdCBpcyBub3Qgc29tZXRoaW5nIG9sZCB0cmFuc2l0aW9uaW5nIGZyb20gZ2xvYmFs Cj4+IG5hbWUgdG8gY2xvY2sgaW4gRFQgIQo+Pgo+Pj4KPj4+IFRoZSB4dGFsX2ZpeHBsbCBjbG9j ayBpcyByZWdpc3RlcmVkIGluIGFub3RoZXIgcGVyaXBoZXJhbCBkcml2ZXIsIElmIGRvIG5vdAo+ Pj4gZGVzcmliZSB0aGUgIm5hbWUiIG1lbWJlciBpbiBwYXJlbnRfZGF0YSwgImZ3X25hbWUiIGRv ZXMgbm90IHdvcmsgYmVjYXVzZQo+Pj4gaXQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQuIHRoZSBo aWZpX3BsbCBwYXJlbnQgd2lsbCBiZSBudWxsIGluCj4+PiAvc3lzL2tlcm5lbC9kZWJ1Zy9jbGsv aGlmaV9wbGwvY2xrX3BhcmVudC4KPj4+Cj4+PiBISUZJIFBMTCB3aWxsIGJlIGEgb3JwaGFuIGNs b2NrLCBidXQgaXRzIHBhcmVudCBzaG91bGQgYmUgeHRhbF9maXhwbGwuCj4+Cj4+IFRoZXJlIHdp bGwgYmUgYW4gb3JwaGFuIHllcywgdGVtcG9yYXJpbHksIHVudGlsIGJvdGggY29udHJvbGxlcnMg YXJlIHVwLgo+PiBPbmNlIGJvdGggY29udHJvbGxlciBhcmUgdXAsIHRoZSBjbG9jayB3aWxsIGJl IHJlcGFyZW50ZWQgaWYgbmVjZXNzYXJ5Lgo+Pgo+Pj4KPj4+IFNvIGJvdGggb2YgImZ3X25hbWUi IG9mICJuYW1lIiBzaG91bGQgYmUgZGVzY3JpYmVkLgo+Pgo+PiBObwo+Pgo+Cj4gIzEKPgo+IEhl cmUsIEkgYW0gc3RpbGwgY29uZnVzZWQuCj4gRnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUg cGhlbm9tZW5vbu+8jCB0aGUgbmFtZSBpbiBwYXJlbnRfZGF0YSBpcwo+IHJlcXVpcmVkLgo+Cj4K PiBISUZJIFBMTCBpcyBkZXNjcmliZWQgbGlrZSB0aGlzOgo+Cj4gCS5wYXJlbnRfZGF0YSA9ICYo Y29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSl7Cj4gCQkuZndfbmFtZSA9ICJ4dGFsX2hpZmlw bGwiLAo+IAkJLm5hbWUgPSAieHRhbF9oaWZpcGxsIgo+IAl9Cj4KPiBGaXhlZCBQTEwgaXMgZGVz Y3JpYmVkIGxpa2UgdGhpczoKPgo+IAkucGFyZW50X2RhdGEgPSAmKGNvbnN0IHN0cnVjdCBjbGtf cGFyZW50X2RhdGEpewo+IAkJLmZ3X25hbWUgPSAieHRhbF9maXhwbGwiLAo+IAl9LAo+Cj4gQWZ0 ZXIgdGhlIHN5c3RlbSBib290IGNvbXBsZXRlbHnvvIwgcnVuIGNhdAo+IC9zeXMva2VybmVsL2Rl YnVnL2Nsay9jbGtfc3VtbWFyeSwgSGVyZSBpcyB0aGUgcmVzdWx0Ogo+Cj4gIyBjYXQgL3N5cy9r ZXJuZWwvZGVidWcvY2xrL2Nsa19zdW1tYXJ5Cj4gICAgICAgICAgICAgICAgICBlbmFibGUgIHBy ZXBhcmUgIHByb3RlY3QgICAgICAgICAgICAgICAgICAgIGR1dHkKPiAgICBjbG9jayAgICAgICAg IGNvdW50ICAgY291bnQgICAgY291bnQgIHJhdGUgYWNjdXJhY3kgcGhhc2UgY3ljbGUKPiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+ICB4dGFsICAgICAgICAgICAgNSAgICAgICAgNSAgICAgICAgMCAgICAyNDAwMDAw MCAgICAwICAgICAwICA1MDAwMAo+ICAgICB0c19kaXYgICAgICAgMCAgICAgICAgMCAgICAgICAg MCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ICAgICAgICB0cyAgICAgICAgMCAgICAg ICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ICAgICBwd21fZl9z ZWwgICAgMCAgICAgICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ ICAgICAgICBwd21fZl9kaXYgMCAgICAgICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAg ICAwICA1MDAwMAo+ICAgICAgICAgICBwd21fZiAgMCAgICAgICAgMCAgICAgICAgMCAgICAyNDAw MDAwMCAgICAwICAgICAwICA1MDAwMAo+IC4uLi4uLgo+ICAgICB4dGFsX3N5c3BsbCAgMCAgICAg ICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ICAgICB4dGFsX2hp ZmlwbGwgMCAgICAgICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ ICAgICAgICBoaWZpX3BsbCAgMCAgICAgICAgMCAgICAgICAgMCAgMTUzNjAwMDAwMCAgICAwICAg ICAwICA1MDAwMAo+ICAgICB4dGFsX3VzYl9jdHJsIDAgICAgICAgIDAgICAgICAgIDAgICAgMjQw MDAwMDAgICAwICAgICAwICA1MDAwMAo+ICAgICB4dGFsX3VzYl9waHkgIDAgICAgICAgIDAgICAg ICAgIDAgICAgMjQwMDAwMDAgICAwICAgICAwICA1MDAwMAo+ICAgICB4dGFsX2ZpeHBsbCAgIDAg ICAgICAgIDAgICAgICAgIDAgICAgMjQwMDAwMDAgICAwICAgICAwICA1MDAwMAo+ICAgICB4dGFs X2Nsa3RyZWUgIDAgICAgICAgIDAgICAgICAgIDAgICAgMjQwMDAwMDAgICAwICAgICAwICA1MDAw MAo+ICBmaXhlZF9wbGxfZGNvICAgIDEgICAgICAgIDEgICAgICAgIDAgICAgICAgICAwICAgMCAg ICAgMCAgNTAwMDAKClRoaXMgbWVhbnMgdGhhdCBDQ0Ygd2hhdCBub3QgYWJsZSB0byByZXNvbHZl IHRoZSBwYXJlbnQuCkVpdGhlcjoKKiB5b3UndmUgbWFkZSBhIG1pc3Rha2Ugc29tZXdoZXJlCiog VGhlcmUgaXMgYnVnIGluIENDRiB3aGVuIHRoZSBwYXJlbnQgZGV2aWNlIGlzIG5vdCBhdmFpbGFi bGUgYXQgcHJvYmUKdGltZSwgdGhlIGNsb2NrIGlzIG5vdCBwcm9wZXJseSByZXBhcmVudGVkCgpF aXRoZXIgd2F5LCB5b3UnbGwgaGF2ZSB0byBkZWJ1ZyBhIGJpdCBtb3JlCgo+ICAgICBmaXhlZF9w bGwgICAgIDMgICAgICAgIDMgICAgICAgIDAgICAgICAgICAwICAgMCAgICAgMCAgNTAwMDAKPiAg ICAgICAgZmNsa19kaXY3X2RpdiAwICAgICAwICAgICAgICAwICAgICAgICAgMCAgIDAgICAgIDAg IDUwMDAwCj4gLi4uLgo+Cj4gdGhlIGhpZmlfcGxsJ3MgcGFyZW50IGlzIHh0YWxfaGlmaSwgQW5k IHRoZSBoaWZpX3BsbCBkZWZhdWx0IHJhdGUgaXMgcmlnaHQuCj4KPiBidXQgdGhlIGZpeGVkX3Bs bF9kY28gaXMgYSBvcnBoYW4gY2xvY2ssIGl0cyBwYXJlbnQgaXMgTlVMTC5BbmQgaXRzIHJhdGUK PiBpcyB6ZXJvLldoZW4gdGhlIG5hbWUgaW4gcGFyZW50X2RhdGEgaXMgYWRkZWQsIGl0cyBwYXJl bnQgaXMgeHRhbF9maXhwbGwuCj4KPiAjIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9jbGsvZml4ZWRf cGxsX2Rjby9jbGtfcGFyZW50Cj4gIwo+ICMgY2F0IC9zeXMva2VybmVsL2RlYnVnL2Nsay9maXhl ZF9wbGxfZGNvL2Nsa19yYXRlCj4gMAo+Cj4KPiAjMgo+IEluICAuL2RyaXZlcnMvY2xrL3Fjb20v Z2NjLXNtODE1MC5jCj4gRm9yIHNvbWUgY2xvY2tzLCBCb3RoIGZ3X25hbWUgYW5kIG5hbWUgYXJl IGRlc2NyaWJlZCBpbiBwYXJlbnRfZGF0YQo+IHN0cnVjdC4KClRob3NlIGFyZSBiZWluZyBtaWdy YXRlZCB0byBEVCBkZXNjcmlwdGlvbiB3aGljaCBtZWFucyB0aGF0IHdlIGRvbid0Cmtub3cgaWYg dGhlIERUIHdpbGwgdGhlIGNvcnJlY3QgZGVzY3JpcHRpb24KCkluIHRoaXMgY2FzZSB0aGUgY2xv Y2sgZnJhbWV3b3JrIHdpbGwgZmlyc3QgdHJ5IERUIGFuZCBpZiBEVCBkb2VzCnByb3ZpZGUgdGhp cyBmd19uYW1lLCBpdCB3aWxsIGZhbGxiYWNrIHRvIHRoZSBsZWdhY3kgbmFtZS4KClRoaXMgaXMg bm90IHlvdXIgY2FzZSBhcyB0aGlzIGlzIGEgbmV3IHBsYXRmb3JtIGZvciB3aGljaCB3ZSBrbm93 IHRoZSBEVApuYW1lIGV4aXN0LgoKPgo+Pj4KPj4+Pgo+Pj4+IFNhbWUgZm9yIHRoZSBvdGhlciBv Y2N1cmVuY2VzLgo+Pj4+Cj4+Pj4gQWxzbywgSSB0aGluayB5b3UgbWVhbnQgeHRhbF9oaWZpcGxs Cj4+PiBZZXMsSSB3aWxsIGNvcnJlY3QgaXQuCj4+Pj4KPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51 bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGlj IHN0cnVjdCBjbGtfZml4ZWRfZmFjdG9yIGExX2ZjbGtfZGl2Ml9kaXYgPSB7Cj4+Pj4+ICsJLm11 bHQgPSAxLAo+Pj4+PiArCS5kaXYgPSAyLAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xr X2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImZjbGtfZGl2Ml9kaXYiLAo+Pj4+PiArCQku b3BzID0gJmNsa19maXhlZF9mYWN0b3Jfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25z dCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX2ZpeGVkX3BsbC5odwo+Pj4+PiAr CQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+ PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZmNsa19kaXYyID0gewo+Pj4+ PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQkub2Zm c2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMjEsCj4+Pj4+ ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiAr CQkubmFtZSA9ICJmY2xrX2RpdjIiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9v cHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+ Pj4+ICsJCQkmYTFfZmNsa19kaXYyX2Rpdi5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3Bh cmVudHMgPSAxLAo+Pj4+PiArCQkvKgo+Pj4+PiArCQkgKiBUaGlzIGNsb2NrIGlzIHVzZWQgYnkg RERSIGNsb2NrIGluIEJMMiBmaXJtd2FyZQo+Pj4+PiArCQkgKiBhbmQgaXMgcmVxdWlyZWQgYnkg dGhlIHBsYXRmb3JtIHRvIG9wZXJhdGUgY29ycmVjdGx5Lgo+Pj4+PiArCQkgKiBVbnRpbCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbiBhcmUgbWV0LCB3ZSBuZWVkIHRoaXMgY2xvY2sgdG8KPj4+Pj4g KwkJICogYmUgbWFya2VkIGFzIGNyaXRpY2FsOgo+Pj4+PiArCQkgKiBhKSBNYXJrIHRoZSBjbG9j ayB1c2VkIGJ5IGEgZmlybXdhcmUgcmVzb3VyY2UsIGlmIHBvc3NpYmxlCj4+Pj4+ICsJCSAqIGIp IENDRiBoYXMgYSBjbG9jayBoYW5kLW9mZiBtZWNoYW5pc20gdG8gbWFrZSB0aGUgc3VyZSB0aGUK Pj4+Pj4gKwkJICogICAgY2xvY2sgc3RheXMgb24gdW50aWwgdGhlIHByb3BlciBkcml2ZXIgY29t ZXMgYWxvbmcKPj4+Pj4gKwkJICovCj4+Pj4+ICsJCS5mbGFncyA9IENMS19JU19DUklUSUNBTCwK Pj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfZml4 ZWRfZmFjdG9yIGExX2ZjbGtfZGl2M19kaXYgPSB7Cj4+Pj4+ICsJLm11bHQgPSAxLAo+Pj4+PiAr CS5kaXYgPSAzLAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+ Pj4+ICsJCS5uYW1lID0gImZjbGtfZGl2M19kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19maXhl ZF9mYWN0b3Jfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3 ICpbXSkgewo+Pj4+PiArCQkJJmExX2ZpeGVkX3BsbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQku bnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0 aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZmNsa19kaXYzID0gewo+Pj4+PiArCS5kYXRhID0gJihz dHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gQU5BQ1RSTF9G SVhQTExfQ1RSTDAsCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMjIsCj4+Pj4+ICsJfSwKPj4+Pj4gKwku aHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJmY2xr X2RpdjMiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5w YXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZmNs a19kaXYzX2Rpdi5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+ PiArCQkvKgo+Pj4+PiArCQkgKiBUaGlzIGNsb2NrIGlzIHVzZWQgYnkgQVBCIGJ1cyB3aGljaCBz ZXR0ZWQgaW4gUm9tY29kZQo+Pj4+PiArCQkgKiBhbmQgaXMgcmVxdWlyZWQgYnkgdGhlIHBsYXRm b3JtIHRvIG9wZXJhdGUgY29ycmVjdGx5Lgo+Pj4+PiArCQkgKiBVbnRpbCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbiBhcmUgbWV0LCB3ZSBuZWVkIHRoaXMgY2xvY2sgdG8KPj4+Pj4gKwkJICogYmUg bWFya2VkIGFzIGNyaXRpY2FsOgo+Pj4+PiArCQkgKiBhKSBNYXJrIHRoZSBjbG9jayB1c2VkIGJ5 IGEgZmlybXdhcmUgcmVzb3VyY2UsIGlmIHBvc3NpYmxlCj4+Pj4+ICsJCSAqIGIpIENDRiBoYXMg YSBjbG9jayBoYW5kLW9mZiBtZWNoYW5pc20gdG8gbWFrZSB0aGUgc3VyZSB0aGUKPj4+Pj4gKwkJ ICogICAgY2xvY2sgc3RheXMgb24gdW50aWwgdGhlIHByb3BlciBkcml2ZXIgY29tZXMgYWxvbmcK Pj4+Pj4gKwkJICovCj4+Pj4+ICsJCS5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4gKwl9 LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfZml4ZWRfZmFjdG9y IGExX2ZjbGtfZGl2NV9kaXYgPSB7Cj4+Pj4+ICsJLm11bHQgPSAxLAo+Pj4+PiArCS5kaXYgPSA1 LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5u YW1lID0gImZjbGtfZGl2NV9kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19maXhlZF9mYWN0b3Jf b3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+ Pj4+PiArCQkJJmExX2ZpeGVkX3BsbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVu dHMgPSAxLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0 IGNsa19yZWdtYXAgYTFfZmNsa19kaXY1ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xr X3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RS TDAsCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMjMsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9 ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJmY2xrX2RpdjUiLAo+ Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdz ID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZmNsa19kaXY1X2Rp di5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkvKgo+ Pj4+PiArCQkgKiBUaGlzIGNsb2NrIGlzIHVzZWQgYnkgQVhJIGJ1cyB3aGljaCBzZXR0ZWQgaW4g Um9tY29kZQo+Pj4+PiArCQkgKiBhbmQgaXMgcmVxdWlyZWQgYnkgdGhlIHBsYXRmb3JtIHRvIG9w ZXJhdGUgY29ycmVjdGx5Lgo+Pj4+PiArCQkgKiBVbnRpbCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv biBhcmUgbWV0LCB3ZSBuZWVkIHRoaXMgY2xvY2sgdG8KPj4+Pj4gKwkJICogYmUgbWFya2VkIGFz IGNyaXRpY2FsOgo+Pj4+PiArCQkgKiBhKSBNYXJrIHRoZSBjbG9jayB1c2VkIGJ5IGEgZmlybXdh cmUgcmVzb3VyY2UsIGlmIHBvc3NpYmxlCj4+Pj4+ICsJCSAqIGIpIENDRiBoYXMgYSBjbG9jayBo YW5kLW9mZiBtZWNoYW5pc20gdG8gbWFrZSB0aGUgc3VyZSB0aGUKPj4+Pj4gKwkJICogICAgY2xv Y2sgc3RheXMgb24gdW50aWwgdGhlIHByb3BlciBkcml2ZXIgY29tZXMgYWxvbmcKPj4+Pj4gKwkJ ICovCj4+Pj4+ICsJCS5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4gKwl9LAo+Pj4+PiAr fTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfZml4ZWRfZmFjdG9yIGExX2ZjbGtf ZGl2N19kaXYgPSB7Cj4+Pj4+ICsJLm11bHQgPSAxLAo+Pj4+PiArCS5kaXYgPSA3LAo+Pj4+PiAr CS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImZj bGtfZGl2N19kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19maXhlZF9mYWN0b3Jfb3BzLAo+Pj4+ PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJ JmExX2ZpeGVkX3BsbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+ Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdt YXAgYTFfZmNsa19kaXY3ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9n YXRlX2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+ ICsJCS5iaXRfaWR4ID0gMjQsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0 IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJmY2xrX2RpdjciLAo+Pj4+PiArCQku b3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0 IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZmNsa19kaXY3X2Rpdi5odwo+Pj4+ PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+ Pj4+PiArCj4+Pj4+ICsvKiBBcnJheSBvZiBhbGwgY2xvY2tzIHByb3ZpZGVkIGJ5IHRoaXMgcHJv dmlkZXIgKi8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX2h3X29uZWNlbGxfZGF0YSBhMV9wbGxf aHdfb25lY2VsbF9kYXRhID0gewo+Pj4+PiArCS5od3MgPSB7Cj4+Pj4+ICsJCVtDTEtJRF9GSVhF RF9QTExfRENPXQkJPSAmYTFfZml4ZWRfcGxsX2Rjby5odywKPj4+Pj4gKwkJW0NMS0lEX0ZJWEVE X1BMTF0JCT0gJmExX2ZpeGVkX3BsbC5odywKPj4+Pj4gKwkJW0NMS0lEX0hJRklfUExMXQkJPSAm YTFfaGlmaV9wbGwuaHcsCj4+Pj4+ICsJCVtDTEtJRF9GQ0xLX0RJVjJdCQk9ICZhMV9mY2xrX2Rp djIuaHcsCj4+Pj4+ICsJCVtDTEtJRF9GQ0xLX0RJVjNdCQk9ICZhMV9mY2xrX2RpdjMuaHcsCj4+ Pj4+ICsJCVtDTEtJRF9GQ0xLX0RJVjVdCQk9ICZhMV9mY2xrX2RpdjUuaHcsCj4+Pj4+ICsJCVtD TEtJRF9GQ0xLX0RJVjddCQk9ICZhMV9mY2xrX2RpdjcuaHcsCj4+Pj4+ICsJCVtDTEtJRF9GQ0xL X0RJVjJfRElWXQkJPSAmYTFfZmNsa19kaXYyX2Rpdi5odywKPj4+Pj4gKwkJW0NMS0lEX0ZDTEtf RElWM19ESVZdCQk9ICZhMV9mY2xrX2RpdjNfZGl2Lmh3LAo+Pj4+PiArCQlbQ0xLSURfRkNMS19E SVY1X0RJVl0JCT0gJmExX2ZjbGtfZGl2NV9kaXYuaHcsCj4+Pj4+ICsJCVtDTEtJRF9GQ0xLX0RJ VjdfRElWXQkJPSAmYTFfZmNsa19kaXY3X2Rpdi5odywKPj4+Pj4gKwkJW05SX1BMTF9DTEtTXQkJ CT0gTlVMTCwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5udW0gPSBOUl9QTExfQ0xLUywKPj4+Pj4gK307 Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCAqY29uc3QgYTFfcGxsX3Jl Z21hcHNbXSA9IHsKPj4+Pj4gKwkmYTFfZml4ZWRfcGxsX2RjbywKPj4+Pj4gKwkmYTFfZml4ZWRf cGxsLAo+Pj4+PiArCSZhMV9oaWZpX3BsbCwKPj4+Pj4gKwkmYTFfZmNsa19kaXYyLAo+Pj4+PiAr CSZhMV9mY2xrX2RpdjMsCj4+Pj4+ICsJJmExX2ZjbGtfZGl2NSwKPj4+Pj4gKwkmYTFfZmNsa19k aXY3LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIGludCBtZXNvbl9hMV9wbGxfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+Pj4gK3sKPj4+Pj4gKwlpbnQgcmV0 Owo+Pj4+PiArCj4+Pj4+ICsJcmV0ID0gbWVzb25fZWVjbGtjX3Byb2JlKHBkZXYpOwo+Pj4+PiAr CWlmIChyZXQpCj4+Pj4+ICsJCXJldHVybiByZXQ7Cj4+Pj4+ICsKPj4+Pj4gKwlyZXR1cm4gMDsK Pj4+Pj4gK30KPj4+Pgo+Pj4+IFRoaXMgZnVuY3Rpb24gaXMgdXNlbGVzcy4KPj4+Pgo+Pj4gT0ss IEkgd2lsbCB1c2UgbWVzb25fZWVjbGtjX3Byb2JlIGRlcmVjdGx5Lgo+Pj4+PiArCj4+Pj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX2VlY2xrY19kYXRhIGExX3BsbF9kYXRhID0gewo+Pj4+ PiArCQkucmVnbWFwX2Nsa3MgPSBhMV9wbGxfcmVnbWFwcywKPj4+Pj4gKwkJLnJlZ21hcF9jbGtf bnVtID0gQVJSQVlfU0laRShhMV9wbGxfcmVnbWFwcyksCj4+Pj4+ICsJCS5od19vbmVjZWxsX2Rh dGEgPSAmYTFfcGxsX2h3X29uZWNlbGxfZGF0YSwKPj4+Pj4gK307Cj4+Pj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBjbGtjX21hdGNoX3RhYmxlW10gPSB7Cj4+Pj4+ICsJewo+ Pj4+PiArCQkuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLGExLXBsbC1jbGtjIiwKPj4+Pj4gKwkJLmRh dGEgPSAmYTFfcGxsX2RhdGEKPj4+Pj4gKwl9LAo+Pj4+PiArCXsgLyogc2VudGluZWwgKi8gfQo+ Pj4+Cj4+Pj4gTml0cGljazogZG9uJ3QgbmVlZCB0byB3cml0ZSB0aGlzLCBqdXN0IHdyaXRlIHRo ZSBsaW5lIGxpa2UgdGhpcwo+Pj4+Cj4+PiBPSywgcmVtb3ZlIGl0Lgo+Pj4+ICcgfSwge30nCj4+ Pj4KPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGExX2RyaXZlciA9IHsKPj4+Pj4gKwkucHJvYmUJCT0gbWVzb25fYTFfcGxsX3Byb2JlLAo+Pj4+ PiArCS5kcml2ZXIJCT0gewo+Pj4+PiArCQkubmFtZQk9ICJhMS1wbGwtY2xrYyIsCj4+Pj4+ICsJ CS5vZl9tYXRjaF90YWJsZSA9IGNsa2NfbWF0Y2hfdGFibGUsCj4+Pj4+ICsJfSwKPj4+Pj4gK307 Cj4+Pj4+ICsKPj4+Pj4gK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKGExX2RyaXZlcik7Cj4+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tZXNvbi9hMS1wbGwuaCBiL2RyaXZlcnMvY2xrL21l c29uL2ExLXBsbC5oCj4+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4+IGluZGV4IDAwMDAw MDAuLjk5ZWUyYTkKPj4+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+PiArKysgYi9kcml2ZXJzL2Nsay9t ZXNvbi9hMS1wbGwuaAo+Pj4+PiBAQCAtMCwwICsxLDU2IEBACj4+Pj4+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkgKi8KPj4+Pj4gKy8qCj4+Pj4+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMTkgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4+ PiArICovCj4+Pj4+ICsKPj4+Pj4gKyNpZm5kZWYgX19BMV9QTExfSAo+Pj4+PiArI2RlZmluZSBf X0ExX1BMTF9ICj4+Pj4+ICsKPj4+Pj4gKy8qIFBMTCByZWdpc3RlciBvZmZzZXQgKi8KPj4+Pj4g KyNkZWZpbmUgQU5BQ1RSTF9GSVhQTExfQ1RSTDAJCTB4ODAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RS TF9GSVhQTExfQ1RSTDEJCTB4ODQKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9GSVhQTExfQ1RSTDIJ CTB4ODgKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9GSVhQTExfQ1RSTDMJCTB4OGMKPj4+Pj4gKyNk ZWZpbmUgQU5BQ1RSTF9GSVhQTExfQ1RSTDQJCTB4OTAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9G SVhQTExfU1RTCQkweDk0Cj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfU1lTUExMX0NUUkwwCQkweDEw MAo+Pj4+PiArI2RlZmluZSBBTkFDVFJMX1NZU1BMTF9DVFJMMQkJMHgxMDQKPj4+Pj4gKyNkZWZp bmUgQU5BQ1RSTF9TWVNQTExfQ1RSTDIJCTB4MTA4Cj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfU1lT UExMX0NUUkwzCQkweDEwYwo+Pj4+PiArI2RlZmluZSBBTkFDVFJMX1NZU1BMTF9DVFJMNAkJMHgx MTAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9TWVNQTExfU1RTCQkweDExNAo+Pj4+PiArI2RlZmlu ZSBBTkFDVFJMX0hJRklQTExfQ1RSTDAJCTB4MTQwCj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfSElG SVBMTF9DVFJMMQkJMHgxNDQKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9ISUZJUExMX0NUUkwyCQkw eDE0OAo+Pj4+PiArI2RlZmluZSBBTkFDVFJMX0hJRklQTExfQ1RSTDMJCTB4MTRjCj4+Pj4+ICsj ZGVmaW5lIEFOQUNUUkxfSElGSVBMTF9DVFJMNAkJMHgxNTAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RS TF9ISUZJUExMX1NUUwkJMHgxNTQKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9BVURERFNfQ1RSTDAJ CTB4MTgwCj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfQVVERERTX0NUUkwxCQkweDE4NAo+Pj4+PiAr I2RlZmluZSBBTkFDVFJMX0FVREREU19DVFJMMgkJMHgxODgKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RS TF9BVURERFNfQ1RSTDMJCTB4MThjCj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfQVVERERTX0NUUkw0 CQkweDE5MAo+Pj4+PiArI2RlZmluZSBBTkFDVFJMX0FVREREU19TVFMJCTB4MTk0Cj4+Pj4+ICsj ZGVmaW5lIEFOQUNUUkxfTUlTQ1RPUF9DVFJMMAkJMHgxYzAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RS TF9QT1JfQ05UTAkJMHgyMDgKPj4+Pj4gKwo+Pj4+PiArLyoKPj4+Pj4gKyAqIENMS0lEIGluZGV4 IHZhbHVlcwo+Pj4+PiArICoKPj4+Pj4gKyAqIFRoZXNlIGluZGljZXMgYXJlIGVudGlyZWx5IGNv bnRyaXZlZCBhbmQgZG8gbm90IG1hcCBvbnRvIHRoZSBoYXJkd2FyZS4KPj4+Pj4gKyAqIEl0IGhh cyBub3cgYmVlbiBkZWNpZGVkIHRvIGV4cG9zZSBldmVyeXRoaW5nIGJ5IGRlZmF1bHQgaW4gdGhl IERUIGhlYWRlcjoKPj4+Pj4gKyAqIGluY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svYTEtcGxsLWNs a2MuaC4gT25seSB0aGUgY2xvY2tzIGlkcyB3ZSBkb24ndCB3YW50Cj4+Pj4+ICsgKiB0byBleHBv c2UsIHN1Y2ggYXMgdGhlIGludGVybmFsIG11eGVzIGFuZCBkaXZpZGVycyBvZiBjb21wb3NpdGUg Y2xvY2tzLAo+Pj4+PiArICogd2lsbCByZW1haW4gZGVmaW5lZCBoZXJlLgo+Pj4+PiArICovCj4+ Pj4+ICsjZGVmaW5lIENMS0lEX0ZJWEVEX1BMTF9EQ08JCTAKPj4+Pj4gKyNkZWZpbmUgQ0xLSURf RkNMS19ESVYyX0RJVgkJMgo+Pj4+PiArI2RlZmluZSBDTEtJRF9GQ0xLX0RJVjNfRElWCQkzCj4+ Pj4+ICsjZGVmaW5lIENMS0lEX0ZDTEtfRElWNV9ESVYJCTQKPj4+Pj4gKyNkZWZpbmUgQ0xLSURf RkNMS19ESVY3X0RJVgkJNQo+Pj4+PiArI2RlZmluZSBOUl9QTExfQ0xLUwkJCTExCj4+Pj4+ICsK Pj4+Pj4gKy8qIGluY2x1ZGUgdGhlIENMS0lEcyB0aGF0IGhhdmUgYmVlbiBtYWRlIHBhcnQgb2Yg dGhlIERUIGJpbmRpbmcgKi8KPj4+Pj4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9hMS1w bGwtY2xrYy5oPgo+Pj4+PiArCj4+Pj4+ICsjZW5kaWYgLyogX19BMV9QTExfSCAqLwo+Pj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbWVzb24vYTEuYyBiL2RyaXZlcnMvY2xrL21lc29uL2Ex LmMKPj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+Pj4gaW5kZXggMDAwMDAwMC4uODZhNDcz Mwo+Pj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4+ICsrKyBiL2RyaXZlcnMvY2xrL21lc29uL2ExLmMK Pj4+Pj4gQEAgLTAsMCArMSwyMjY0IEBACj4+Pj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogKEdQTC0yLjArIE9SIE1JVCkKPj4+Pj4gKy8qCj4+Pj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTkgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4+PiArICogQXV0aG9yOiBK aWFuIEh1IDxqaWFuLmh1QGFtbG9naWMuY29tPgo+Pj4+PiArICovCj4+Pj4+ICsKPj4+Pj4gKyNp bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4+Pj4gKyNpbmNsdWRlICJjbGstcGxs LmgiCj4+Pj4+ICsjaW5jbHVkZSAiY2xrLWR1YWxkaXYuaCIKPj4+Pj4gKyNpbmNsdWRlICJtZXNv bi1lZWNsay5oIgo+Pj4+PiArI2luY2x1ZGUgImExLmgiCj4+Pj4KPj4+PiBTYW1lIGFzIGFib3Zl Cj4+PiBPSywgSSB3aWxsIGNoYW5nZSB0aGUgb3JkZXIuCj4+PiBJbiBmYWN0LCB0aGUgY2xrLXBs bC5oIGlzIG5vdCB1c2VkIGluIHRoZSBjdXJyZW50IGRyaXZlci4KPj4+IEkgd2lsbCByZW1vdmUg aXQuCj4+Pj4KPj4+Pj4gKwo+Pj4+PiArLyogUExMcyBjbG9jayBpbiBnYXRlcywgaXRzIHBhcmVu dCBpcyB4dGFsICovCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfeHRhbF9jbGt0 cmVlID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+ Pj4+PiArCQkub2Zmc2V0ID0gU1lTX09TQ0lOX0NUUkwsCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMCwK Pj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+ Pj4+PiArCQkubmFtZSA9ICJ4dGFsX2Nsa3RyZWUiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdt YXBfZ2F0ZV9yb19vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0IGNs a19wYXJlbnRfZGF0YSkgewo+Pj4+PiArCQkJLmZ3X25hbWUgPSAieHRhbCIsCj4+Pj4+ICsJCX0s Cj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS8qCj4+Pj4+ICsJCSAqIHN3aXRj aCBmb3IgeHRhbCBjbG9jawo+Pj4+PiArCQkgKiBMaW51eCBzaG91bGQgbm90IGNoYW5nZSBpdCBh dCBydW50aW1lCj4+Pj4+ICsJCSAqLwo+Pj4+Cj4+Pj4gQ29tbWVudCBub3QgdXNlZnVsOiBpdCB1 c2VzIHRoZSBSbyBvcHMKPj4+Pgo+Pj4gT0ssICByZW1vdmUgdGhlIGNvbW1lbnRzCj4+Pj4+ICsJ fSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV94 dGFsX2ZpeHBsbCA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZ2F0ZV9k YXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFNZU19PU0NJTl9DVFJMLAo+Pj4+PiArCQkuYml0X2lk eCA9IDEsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAieHRhbF9maXhwbGwiLAo+Pj4+PiArCQkub3BzID0gJmNs a19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0 IGNsa19wYXJlbnRfZGF0YSkgewo+Pj4+PiArCQkJLmZ3X25hbWUgPSAieHRhbCIsCj4+Pj4+ICsJ CX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19JU19D UklUSUNBTCwKPj4+Pj4gKwkJLyoKPj4+Pj4gKwkJICogaXQgZmVlZHMgRERSLEFYSSxBUEIgYnVz Cj4+Pj4+ICsJCSAqIExpbnV4IHNob3VsZCBub3QgY2hhbmdlIGl0IGF0IHJ1bnRpbWUKPj4+Pj4g KwkJICovCj4+Pj4KPj4+PiBBZ2FpbiwgdGhlIGNoaWxkIGFyZSBjcml0aWNhbCwgbm90IGRpcmVj dGx5IHRoaXMgY2xvY2sgZnJvbSB5b3VyCj4+Pj4gY29tbWVudC4KPj4+Pgo+Pj4+IFJlbW92ZSBD UklUSUNBTCwgcHV0IFJPIGlzIGxpbnV4IGlzIG5vdCBzdXBwb3NlZCB0byB0b3VjaCBpdC4KPj4+ Pgo+Pj4gcmVwYWNlIGFzIGNsa19yZWdtYXBfZ2F0ZV9yb19vcHMKPj4+Pj4gKwl9LAo+Pj4+PiAr fTsKPj4+Pj4gKwo+Pj4KPj4+IFsgLi4uIF0KPj4+Cj4+Pj4+ICsKPj4+Pj4gKy8qIGRzcCBhIGNs ayAqLwo+Pj4+PiArc3RhdGljIHUzMiBtdXhfdGFibGVfZHNwX2FiW10gPSB7IDAsIDEsIDIsIDMs IDQsIDcgfTsKPj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGRzcF9h Yl9jbGtfcGFyZW50X2RhdGFbXSA9IHsKPj4+Pj4gKwl7IC5md19uYW1lID0gInh0YWwiLCB9LAo+ Pj4+PiArCXsgLmZ3X25hbWUgPSAiZmNsa19kaXYyIiwgfSwKPj4+Pj4gKwl7IC5md19uYW1lID0g ImZjbGtfZGl2MyIsIH0sCj4+Pj4+ICsJeyAuZndfbmFtZSA9ICJmY2xrX2RpdjUiLCB9LAo+Pj4+ PiArCXsgLmZ3X25hbWUgPSAiaGlmaV9wbGwiLCB9LAo+Pj4+PiArCXsgLmh3ID0gJmExX3J0Y19j bGsuaHcgfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21h cCBhMV9kc3BhX2Ffc2VsID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9t dXhfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BBX0NMS19DVFJMMCwKPj4+Pj4gKwkJLm1h c2sgPSAweDcsCj4+Pj4+ICsJCS5zaGlmdCA9IDEwLAo+Pj4+PiArCQkudGFibGUgPSBtdXhfdGFi bGVfZHNwX2FiLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5p dF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYV9hX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAm Y2xrX3JlZ21hcF9tdXhfb3BzLAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBkc3BfYWJfY2xrX3Bh cmVudF9kYXRhLAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGRzcF9hYl9jbGtf cGFyZW50X2RhdGEpLAo+Pj4+Cj4+Pj4gLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCA/Cj4+ PiBZZXMsIEkgbWlzcyB0aGUgZmxhZy4KPj4+Pgo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiAr Cj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYV9hX2RpdiA9IHsKPj4+Pj4g KwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZGl2X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0 ID0gRFNQQV9DTEtfQ1RSTDAsCj4+Pj4+ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9 IDEwLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRh KXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYV9hX2RpdiIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3Jl Z21hcF9kaXZpZGVyX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNs a19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9kc3BhX2Ffc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJF TlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xr X3JlZ21hcCBhMV9kc3BhX2EgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFw X2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BBX0NMS19DVFJMMCwKPj4+Pj4gKwkJ LmJpdF9pZHggPSAxMywKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xr X2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFtZSA9ICJkc3BhX2EiLAo+Pj4+PiArCQkub3BzID0g JmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVj dCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZHNwYV9hX2Rpdi5odwo+Pj4+PiArCQl9LAo+ Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVf UEFSRU5ULAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0 IGNsa19yZWdtYXAgYTFfZHNwYV9iX3NlbCA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNs a19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRFNQQV9DTEtfQ1RSTDAsCj4+ Pj4+ICsJCS5tYXNrID0gMHg3LAo+Pj4+PiArCQkuc2hpZnQgPSAyNiwKPj4+Pj4gKwkJLnRhYmxl ID0gbXV4X3RhYmxlX2RzcF9hYiwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1 Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImRzcGFfYl9zZWwiLAo+Pj4+PiAr CQkub3BzID0gJmNsa19yZWdtYXBfbXV4X29wcywKPj4+Pj4gKwkJLnBhcmVudF9kYXRhID0gZHNw X2FiX2Nsa19wYXJlbnRfZGF0YSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gQVJSQVlfU0laRShk c3BfYWJfY2xrX3BhcmVudF9kYXRhKSwKPj4+Pgo+Pj4+IC5mbGFncyA9IENMS19TRVRfUkFURV9Q QVJFTlQgPwo+Pj4+Cj4+PiBZZXMsIEkgd2lsbCBhZGQgaXQuCj4+Pj4+ICsJfSwKPj4+Pj4gK307 Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9kc3BhX2JfZGl2ID0g ewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9kaXZfZGF0YSl7Cj4+Pj4+ICsJ CS5vZmZzZXQgPSBEU1BBX0NMS19DVFJMMCwKPj4+Pj4gKwkJLnNoaWZ0ID0gMTYsCj4+Pj4+ICsJ CS53aWR0aCA9IDEwLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtf aW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYV9iX2RpdiIsCj4+Pj4+ICsJCS5vcHMg PSAmY2xrX3JlZ21hcF9kaXZpZGVyX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qg c3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9kc3BhX2Jfc2VsLmh3Cj4+Pj4+ICsJ CX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRf UkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBz dHJ1Y3QgY2xrX3JlZ21hcCBhMV9kc3BhX2IgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBj bGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BBX0NMS19DVFJMMCwK Pj4+Pj4gKwkJLmJpdF9pZHggPSAyOSwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihz dHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFtZSA9ICJkc3BhX2IiLAo+Pj4+PiAr CQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNv bnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZHNwYV9iX2Rpdi5odwo+Pj4+ PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtf U0VUX1JBVEVfUEFSRU5ULAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0 aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYV9zZWwgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0 cnVjdCBjbGtfcmVnbWFwX211eF9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IERTUEFfQ0xLX0NU UkwwLAo+Pj4+PiArCQkubWFzayA9IDB4MSwKPj4+Pj4gKwkJLnNoaWZ0ID0gMTUsCj4+Pj4+ICsJ fSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQku bmFtZSA9ICJkc3BhX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9tdXhfb3BzLAo+ Pj4+PiArCQkucGFyZW50X2RhdGEgPSAoY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBbXSkg ewo+Pj4+PiArCQkJeyAuaHcgPSAmYTFfZHNwYV9hLmh3IH0sCj4+Pj4+ICsJCQl7IC5odyA9ICZh MV9kc3BhX2IuaHcgfSwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMiwKPj4+ Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsK Pj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2RzcGFfZW5fZHNwYSA9 IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4g KwkJLm9mZnNldCA9IERTUEFfQ0xLX0VOLAo+Pj4+PiArCQkuYml0X2lkeCA9IDEsCj4+Pj4+ICsJ fSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4gKwkJ Lm5hbWUgPSAiZHNwYV9lbl9kc3BhIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVf b3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+ Pj4+PiArCQkJJmExX2RzcGFfc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50 cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQgfCBDTEtfSUdOT1JF X1VOVVNFRCwKPj4+Pgo+Pj4+IFdoeSBkbyB5b3UgbmVlZCBDTEtfSUdOT1JFX1VOVVNFRCA/Cj4+ Pj4KPj4+IEkgc2hvdWxkIHJlbW92ZSBpdAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+ Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYV9lbl9uaWMgPSB7Cj4+Pj4+ICsJ LmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQg PSBEU1BBX0NMS19FTiwKPj4+Pj4gKwkJLmJpdF9pZHggPSAwLAo+Pj4+PiArCX0sCj4+Pj4+ICsJ Lmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+ICsJCS5uYW1lID0gImRz cGFfZW5fbmljIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiAr CQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmEx X2RzcGFfc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQgfCBDTEtfSUdOT1JFX1VOVVNFRCwKPj4+ Pgo+Pj4+IFdoeSBkbyB5b3UgbmVlZCBDTEtfSUdOT1JFX1VOVVNFRCA/Cj4+Pj4KPj4+IEkgc2hv dWxkIHJlbW92ZSBpdAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4KPj4+PiBTYW1l IHF1ZXN0aW9uIGFuZCByZW1hcmtzIGFwcGxpZXMgdG8gRFNQIEIKPj4+Pgo+Pj4gZ290IGl0Cj4+ Pj4+ICsvKiBkc3AgYiBjbGsgKi8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9k c3BiX2Ffc2VsID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9tdXhfZGF0 YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BCX0NMS19DVFJMMCwKPj4+Pj4gKwkJLm1hc2sgPSAw eDcsCj4+Pj4+ICsJCS5zaGlmdCA9IDEwLAo+Pj4+PiArCQkudGFibGUgPSBtdXhfdGFibGVfZHNw X2FiLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRh KXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYl9hX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3Jl Z21hcF9tdXhfb3BzLAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBkc3BfYWJfY2xrX3BhcmVudF9k YXRhLAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGRzcF9hYl9jbGtfcGFyZW50 X2RhdGEpLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0 IGNsa19yZWdtYXAgYTFfZHNwYl9hX2RpdiA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNs a19yZWdtYXBfZGl2X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRFNQQl9DTEtfQ1RSTDAsCj4+ Pj4+ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9IDEwLAo+Pj4+PiArCX0sCj4+Pj4+ ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAi ZHNwYl9hX2RpdiIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9kaXZpZGVyX29wcywKPj4+ Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJ CSZhMV9kc3BiX2Ffc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEs Cj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4g K307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9kc3BiX2EgPSB7 Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJ CS5vZmZzZXQgPSBEU1BCX0NMS19DVFJMMCwKPj4+Pj4gKwkJLmJpdF9pZHggPSAxMywKPj4+Pj4g Kwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiAr CQkubmFtZSA9ICJkc3BiX2EiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMs Cj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ ICsJCQkmYTFfZHNwYl9hX2Rpdi5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMg PSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX0lHTk9SRV9V TlVTRUQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3Qg Y2xrX3JlZ21hcCBhMV9kc3BiX2Jfc2VsID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xr X3JlZ21hcF9tdXhfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BCX0NMS19DVFJMMCwKPj4+ Pj4gKwkJLm1hc2sgPSAweDcsCj4+Pj4+ICsJCS5zaGlmdCA9IDI2LAo+Pj4+PiArCQkudGFibGUg PSBtdXhfdGFibGVfZHNwX2FiLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVj dCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYl9iX3NlbCIsCj4+Pj4+ICsJ CS5vcHMgPSAmY2xrX3JlZ21hcF9tdXhfb3BzLAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBkc3Bf YWJfY2xrX3BhcmVudF9kYXRhLAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGRz cF9hYl9jbGtfcGFyZW50X2RhdGEpLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYl9iX2RpdiA9IHsKPj4+Pj4gKwkuZGF0 YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZGl2X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRFNQ Ql9DTEtfQ1RSTDAsCj4+Pj4+ICsJCS5zaGlmdCA9IDE2LAo+Pj4+PiArCQkud2lkdGggPSAxMCwK Pj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+ Pj4+ICsJCS5uYW1lID0gImRzcGJfYl9kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBf ZGl2aWRlcl9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcg KltdKSB7Cj4+Pj4+ICsJCQkmYTFfZHNwYl9iX3NlbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQku bnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5ULAo+ Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdt YXAgYTFfZHNwYl9iID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRl X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRFNQQl9DTEtfQ1RSTDAsCj4+Pj4+ICsJCS5iaXRf aWR4ID0gMjksCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0 X2RhdGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYl9iIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtf cmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xr X2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX2RzcGJfYl9kaXYuaHcKPj4+Pj4gKwkJfSwKPj4+Pj4g KwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVO VCB8IENMS19JR05PUkVfVU5VU0VELAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYl9zZWwgPSB7Cj4+Pj4+ICsJLmRhdGEg PSAmKHN0cnVjdCBjbGtfcmVnbWFwX211eF9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IERTUEJf Q0xLX0NUUkwwLAo+Pj4+PiArCQkubWFzayA9IDB4MSwKPj4+Pj4gKwkJLnNoaWZ0ID0gMTUsCj4+ Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+ PiArCQkubmFtZSA9ICJkc3BiX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9tdXhf b3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+ Pj4+PiArCQkJJmExX2RzcGJfYS5odywgJmExX2RzcGJfYi5odywKPj4+Pj4gKwkJfSwKPj4+Pj4g KwkJLm51bV9wYXJlbnRzID0gMiwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVO VCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtf cmVnbWFwIGExX2RzcGJfZW5fZHNwYiA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19y ZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IERTUEJfQ0xLX0VOLAo+Pj4+PiAr CQkuYml0X2lkeCA9IDEsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNs a19pbml0X2RhdGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYl9lbl9kc3BiIiwKPj4+Pj4gKwkJ Lm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25z dCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX2RzcGJfc2VsLmh3Cj4+Pj4+ICsJ CX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRf UkFURV9QQVJFTlQgfCBDTEtfSUdOT1JFX1VOVVNFRCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+ Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2RzcGJfZW5fbmljID0gewo+ Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQku b2Zmc2V0ID0gRFNQQl9DTEtfRU4sCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMCwKPj4+Pj4gKwl9LAo+ Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFt ZSA9ICJkc3BiX2VuX25pYyIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywK Pj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4g KwkJCSZhMV9kc3BiX3NlbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAx LAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX0lHTk9SRV9VTlVT RUQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKy8qIDEyTS8yNE0gY2xvY2sg Ki8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV8yNG0gPSB7Cj4+Pj4+ICsJLmRh dGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBD TEsxMl8yNF9DVFJMLAo+Pj4+PiArCQkuYml0X2lkeCA9IDExLAo+Pj4+PiArCX0sCj4+Pj4+ICsJ Lmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+ICsJCS5uYW1lID0gIjI0 bSIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4gKwkJLnBhcmVu dF9kYXRhID0gJihjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4+Pj4+ICsJCQkuZndf bmFtZSA9ICJ4dGFsIiwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+ Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4KPj4+IFsgLi4uIF0KPj4+Cj4+Pj4+ICtzdGF0 aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfc2FyYWRjX3NlbCA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYo c3RydWN0IGNsa19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gU0FSX0FEQ19D TEtfQ1RSTCwKPj4+Pj4gKwkJLm1hc2sgPSAweDEsCj4+Pj4+ICsJCS5zaGlmdCA9IDksCj4+Pj4+ ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiAr CQkubmFtZSA9ICJzYXJhZGNfc2VsIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX211eF9v cHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9IChjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRh IFtdKSB7Cj4+Pj4+ICsJCQl7IC5md19uYW1lID0gInh0YWwiLCB9LAo+Pj4+PiArCQkJeyAuaHcg PSAmYTFfc3lzX2Nsay5odywgfSwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0g MiwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtf cmVnbWFwIGExX3NhcmFkY19kaXYgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVn bWFwX2Rpdl9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFNBUl9BRENfQ0xLX0NUUkwsCj4+Pj4+ ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwku aHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJzYXJh ZGNfZGl2IiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2RpdmlkZXJfb3BzLAo+Pj4+PiAr CQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmEx X3NhcmFkY19zZWwuaHcKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+ Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsK Pj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3NhcmFkY19jbGsgPSB7 Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJ CS5vZmZzZXQgPSBTQVJfQURDX0NMS19DVFJMLAo+Pj4+PiArCQkuYml0X2lkeCA9IDgsCj4+Pj4+ ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4g KwkJLm5hbWUgPSAic2FyYWRjX2NsayIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRl X29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsK Pj4+Pj4gKwkJCSZhMV9zYXJhZGNfZGl2Lmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFy ZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJ fSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKy8qIHB3bSBhL2IvYy9kIHBhcmVudCBkYXRhICov Cj4+Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBwd21fcGFyZW50X2Rh dGFbXSA9IHsKPj4+Pj4gKwl7IC5md19uYW1lID0gInh0YWwiLCB9LAo+Pj4+PiArCXsgLmh3ID0g JmExX3N5c19jbGsuaHcgfSwKPj4+Pj4gK307Cj4+Pj4KPj4+PiBMb29rcyBsaWtlIHRoZSBzYW1l IGFzIFNBUiBBREMKPj4+Pgo+Pj4gT0ssIEkgd2lsbCBkZXNjcmliZSBpdCBsaWtlIFNBUiBBREMg Zm9yIHB3bSBhL2IvYy9kCj4+Pj4+ICsKPj4+Pj4gKy8qIHB3bSBhIGNsayAqLwo+Pj4+PiArc3Rh dGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9hX3NlbCA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYo c3RydWN0IGNsa19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gUFdNX0NMS19B Ql9DVFJMLAo+Pj4+PiArCQkubWFzayA9IDB4MSwKPj4+Pj4gKwkJLnNoaWZ0ID0gOSwKPj4+Pj4g Kwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJ CS5uYW1lID0gInB3bV9hX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9tdXhfb3Bz LAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBwd21fcGFyZW50X2RhdGEsCj4+Pj4+ICsJCS5udW1f cGFyZW50cyA9IEFSUkFZX1NJWkUocHdtX3BhcmVudF9kYXRhKSwKPj4+Pj4gKwl9LAo+Pj4+PiAr fTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9hX2RpdiA9 IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZGl2X2RhdGEpewo+Pj4+PiAr CQkub2Zmc2V0ID0gUFdNX0NMS19BQl9DVFJMLAo+Pj4+PiArCQkuc2hpZnQgPSAwLAo+Pj4+PiAr CQkud2lkdGggPSA4LAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtf aW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2FfZGl2IiwKPj4+Pj4gKwkJLm9wcyA9 ICZjbGtfcmVnbWFwX2RpdmlkZXJfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBz dHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX3B3bV9hX3NlbC5odwo+Pj4+PiArCQl9 LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JB VEVfUEFSRU5ULAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3Ry dWN0IGNsa19yZWdtYXAgYTFfcHdtX2EgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtf cmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBQV01fQ0xLX0FCX0NUUkwsCj4+ Pj4+ICsJCS5iaXRfaWR4ID0gOCwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1 Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFtZSA9ICJwd21fYSIsCj4+Pj4+ICsJCS5v cHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qg c3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9wd21fYV9kaXYuaHcKPj4+Pj4gKwkJ fSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLyoKPj4+Pj4gKwkJICogVGhl IENQVSB3b3JraW5nIHZvbHRhZ2UgaXMgY29udHJvbGxlZCBieSBwd21fYQo+Pj4+PiArCQkgKiBp biBCTDIgZmlybXdhcmUuIGFkZCB0aGUgQ0xLX0lHTk9SRV9VTlVTRUQgZmxhZwo+Pj4+PiArCQkg KiB0byBhdm9pZCBjaGFuZ2luZyBhdCBydW50aW1lLgo+Pj4+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXiBpdAo+Pj4+Cj4+Pj4+ICsJCSAqIGFuZCBpcyByZXF1aXJlZCBi eSB0aGUgcGxhdGZvcm0gdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCj4+Pj4gICAgICAgICAgICAgICAg ICAgICAgImJsYWJsYS4gQW5kIiBpcyBzdHJhbmdlCj4+Pj4KPj4+Pj4gKwkJICogVW50aWwgdGhl IGZvbGxvd2luZyBjb25kaXRpb24gYXJlIG1ldCwgd2UgbmVlZCB0aGlzIGNsb2NrIHRvCj4+Pj4+ ICsJCSAqIGJlIG1hcmtlZCBhcyBjcml0aWNhbDoKPj4+Pj4gKwkJICogYSkgTWFyayB0aGUgY2xv Y2sgdXNlZCBieSBhIGZpcm13YXJlIHJlc291cmNlLCBpZiBwb3NzaWJsZQo+Pj4+PiArCQkgKiBi KSBDQ0YgaGFzIGEgY2xvY2sgaGFuZC1vZmYgbWVjaGFuaXNtIHRvIG1ha2UgdGhlIHN1cmUgdGhl Cj4+Pj4+ICsJCSAqICAgIGNsb2NrIHN0YXlzIG9uIHVudGlsIHRoZSBwcm9wZXIgZHJpdmVyIGNv bWVzIGFsb25nCj4+Pj4+ICsJCSAqLwo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFS RU5UIHwgQ0xLX0lHTk9SRV9VTlVTRUQsCj4+Pj4KPj4+PiBUaGlzIG9ubHkgc2tpcHMgdGhlIGxh dGVfaW5pdCgpIGRpc2FibGUgb2YgdW51c2VkIGNsb2Nrcwo+Pj4+Cj4+Pj4gQmUgYXdhcmUgdGhh dCB0aGlzIGlzIG5vdCBmb29sLXByb29mLiBJZiBhdCBhbnkgdGltZSBhIGRyaXZlciBlbmFibGUK Pj4+PiB0aGVuIGRpc2FibGUgdGhlIGNsb2NrLCB0aGUgY2xvY2sgd2lsbCBiZSBkaXNhYmxlIGFu ZCBJIGd1ZXNzIHlvdXIKPj4+PiBwbGF0Zm9ybSB3aWxsIGRpZSBpZiB0aGlzIHByb3ZpZGVzIHRo ZSBDUFUgdm9sdGFnZS4KPj4+IE9LLCBDTEtfSVNfQ1JJVElDQUwgaXMgYmV0dGVyLgo+Pj4+Cj4+ Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKy8qIHB3bSBiIGNsayAqLwo+Pj4+PiAr c3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9iX3NlbCA9IHsKPj4+Pj4gKwkuZGF0YSA9 ICYoc3RydWN0IGNsa19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gUFdNX0NM S19BQl9DVFJMLAo+Pj4+PiArCQkubWFzayA9IDB4MSwKPj4+Pj4gKwkJLnNoaWZ0ID0gMjUsCj4+ Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+ PiArCQkubmFtZSA9ICJwd21fYl9zZWwiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfbXV4 X29wcywKPj4+Pj4gKwkJLnBhcmVudF9kYXRhID0gcHdtX3BhcmVudF9kYXRhLAo+Pj4+PiArCQku bnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKHB3bV9wYXJlbnRfZGF0YSksCj4+Pj4+ICsJfSwKPj4+ Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fYl9k aXYgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2Rpdl9kYXRhKXsKPj4+ Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfQUJfQ1RSTCwKPj4+Pj4gKwkJLnNoaWZ0ID0gMTYsCj4+ Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0 IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJwd21fYl9kaXYiLAo+Pj4+PiArCQku b3BzID0gJmNsa19yZWdtYXBfZGl2aWRlcl9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNv bnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfcHdtX2Jfc2VsLmh3Cj4+Pj4+ ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19T RVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRp YyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fYiA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0 IGNsa19yZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfQUJfQ1RS TCwKPj4+Pj4gKwkJLmJpdF9pZHggPSAyNCwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0g JihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFtZSA9ICJwd21fYiIsCj4+Pj4+ ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAo Y29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9wd21fYl9kaXYuaHcKPj4+ Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xL X1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArLyog cHdtIGMgY2xrICovCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfcHdtX2Nfc2Vs ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9tdXhfZGF0YSl7Cj4+Pj4+ ICsJCS5vZmZzZXQgPSBQV01fQ0xLX0NEX0NUUkwsCj4+Pj4+ICsJCS5tYXNrID0gMHgxLAo+Pj4+ PiArCQkuc2hpZnQgPSA5LAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBj bGtfaW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2Nfc2VsIiwKPj4+Pj4gKwkJLm9w cyA9ICZjbGtfcmVnbWFwX211eF9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9IHB3bV9wYXJl bnRfZGF0YSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gQVJSQVlfU0laRShwd21fcGFyZW50X2Rh dGEpLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNs a19yZWdtYXAgYTFfcHdtX2NfZGl2ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3Jl Z21hcF9kaXZfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBQV01fQ0xLX0NEX0NUUkwsCj4+Pj4+ ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwku aHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJwd21f Y19kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZGl2aWRlcl9vcHMsCj4+Pj4+ICsJ CS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFf cHdtX2Nfc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+ Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fYyA9IHsKPj4+Pj4g KwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNl dCA9IFBXTV9DTEtfQ0RfQ1RSTCwKPj4+Pj4gKwkJLmJpdF9pZHggPSA4LAo+Pj4+PiArCX0sCj4+ Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+ICsJCS5uYW1l ID0gInB3bV9jIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiAr CQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmEx X3B3bV9jX2Rpdi5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+ PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5ULAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+ Pj4+PiArCj4+Pj4+ICsvKiBwd20gZCBjbGsgKi8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3Jl Z21hcCBhMV9wd21fZF9zZWwgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFw X211eF9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfQ0RfQ1RSTCwKPj4+Pj4gKwkJ Lm1hc2sgPSAweDEsCj4+Pj4+ICsJCS5zaGlmdCA9IDI1LAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3 LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2Rf c2VsIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX211eF9vcHMsCj4+Pj4+ICsJCS5wYXJl bnRfZGF0YSA9IHB3bV9wYXJlbnRfZGF0YSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gQVJSQVlf U0laRShwd21fcGFyZW50X2RhdGEpLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfcHdtX2RfZGl2ID0gewo+Pj4+PiArCS5kYXRh ID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9kaXZfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBQV01f Q0xLX0NEX0NUUkwsCj4+Pj4+ICsJCS5zaGlmdCA9IDE2LAo+Pj4+PiArCQkud2lkdGggPSA4LAo+ Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+ Pj4gKwkJLm5hbWUgPSAicHdtX2RfZGl2IiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2Rp dmlkZXJfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpb XSkgewo+Pj4+PiArCQkJJmExX3B3bV9kX3NlbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVt X3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5ULAo+Pj4+ PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAg YTFfcHdtX2QgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0 YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBQV01fQ0xLX0NEX0NUUkwsCj4+Pj4+ICsJCS5iaXRfaWR4 ID0gMjQsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2QiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdt YXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcg KltdKSB7Cj4+Pj4+ICsJCQkmYTFfcHdtX2RfZGl2Lmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5u dW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+ Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xr X3BhcmVudF9kYXRhIHB3bV9lZl9wYXJlbnRfZGF0YVtdID0gewo+Pj4+PiArCXsgLmZ3X25hbWUg PSAieHRhbCIsIH0sCj4+Pj4+ICsJeyAuaHcgPSAmYTFfc3lzX2Nsay5odyB9LAo+Pj4+PiArCXsg LmZ3X25hbWUgPSAiZmNsa19kaXY1IiwgfSwKPj4+Pj4gKwl7IC5odyA9ICZhMV9ydGNfY2xrLmh3 IH0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICsvKiBwd20gZSBjbGsgKi8KPj4+Pj4gK3N0YXRp YyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fZV9zZWwgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0 cnVjdCBjbGtfcmVnbWFwX211eF9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfRUZf Q1RSTCwKPj4+Pj4gKwkJLm1hc2sgPSAweDMsCj4+Pj4+ICsJCS5zaGlmdCA9IDksCj4+Pj4+ICsJ fSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQku bmFtZSA9ICJwd21fZV9zZWwiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfbXV4X29wcywK Pj4+Pj4gKwkJLnBhcmVudF9kYXRhID0gcHdtX2VmX3BhcmVudF9kYXRhLAo+Pj4+PiArCQkubnVt X3BhcmVudHMgPSBBUlJBWV9TSVpFKHB3bV9lZl9wYXJlbnRfZGF0YSksCj4+Pj4+ICsJfSwKPj4+ Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fZV9k aXYgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2Rpdl9kYXRhKXsKPj4+ Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfRUZfQ1RSTCwKPj4+Pj4gKwkJLnNoaWZ0ID0gMCwKPj4+ Pj4gKwkJLndpZHRoID0gOCwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3Qg Y2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gInB3bV9lX2RpdiIsCj4+Pj4+ICsJCS5v cHMgPSAmY2xrX3JlZ21hcF9kaXZpZGVyX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29u c3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9wd21fZV9zZWwuaHcKPj4+Pj4g KwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NF VF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGlj IHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9lID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3Qg Y2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gUFdNX0NMS19FRl9DVFJM LAo+Pj4+PiArCQkuYml0X2lkeCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYo c3RydWN0IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2UiLAo+Pj4+PiAr CQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNv bnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfcHdtX2VfZGl2Lmh3Cj4+Pj4+ ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19T RVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKy8qIHB3 bSBmIGNsayAqLwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9mX3NlbCA9 IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiAr CQkub2Zmc2V0ID0gUFdNX0NMS19FRl9DVFJMLAo+Pj4+PiArCQkubWFzayA9IDB4MywKPj4+Pj4g KwkJLnNoaWZ0ID0gMjUsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNs a19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJwd21fZl9zZWwiLAo+Pj4+PiArCQkub3Bz ID0gJmNsa19yZWdtYXBfbXV4X29wcywKPj4+Pj4gKwkJLnBhcmVudF9kYXRhID0gcHdtX2VmX3Bh cmVudF9kYXRhLAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKHB3bV9lZl9wYXJl bnRfZGF0YSksCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1 Y3QgY2xrX3JlZ21hcCBhMV9wd21fZl9kaXYgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBj bGtfcmVnbWFwX2Rpdl9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfRUZfQ1RSTCwK Pj4+Pj4gKwkJLnNoaWZ0ID0gMTYsCj4+Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJfSwKPj4+ Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9 ICJwd21fZl9kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZGl2aWRlcl9vcHMsCj4+ Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJ CQkmYTFfcHdtX2Zfc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEs Cj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4g K307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fZiA9IHsK Pj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4gKwkJ Lm9mZnNldCA9IFBXTV9DTEtfRUZfQ1RSTCwKPj4+Pj4gKwkJLmJpdF9pZHggPSAyNCwKPj4+Pj4g Kwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiAr CQkubmFtZSA9ICJwd21fZiIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywK Pj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4g KwkJCSZhMV9wd21fZl9kaXYuaHcKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0g MSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+ PiArfTsKPj4+Pj4gKwo+Pj4KPj4+IFsgLi4uIF0KPj4+Cj4+Pj4+ICsKPj4+Pj4gKy8qIGRtYyBj bGsgKi8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9kbWNfc2VsID0gewo+Pj4+ PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9tdXhfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZz ZXQgPSBETUNfQ0xLX0NUUkwsCj4+Pj4+ICsJCS5tYXNrID0gMHgzLAo+Pj4+PiArCQkuc2hpZnQg PSA5LAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRh KXsKPj4+Pj4gKwkJLm5hbWUgPSAiZG1jX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21h cF9tdXhfb3BzLAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBzZF9lbW1jX3BhcmVudHMsCj4+Pj4+ ICsJCS5udW1fcGFyZW50cyA9IDQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4g K3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9kbWNfZGl2ID0gewo+Pj4+PiArCS5kYXRhID0g JihzdHJ1Y3QgY2xrX3JlZ21hcF9kaXZfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBETUNfQ0xL X0NUUkwsCj4+Pj4+ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJ fSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQku bmFtZSA9ICJkbWNfZGl2IiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2RpdmlkZXJfb3Bz LAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+ PiArCQkJJmExX2RtY19zZWwuaHcKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0g MSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+ PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2RtY19zZWwy ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9tdXhfZGF0YSl7Cj4+Pj4+ ICsJCS5vZmZzZXQgPSBETUNfQ0xLX0NUUkwsCj4+Pj4+ICsJCS5tYXNrID0gMHgxLAo+Pj4+PiAr CQkuc2hpZnQgPSAxNSwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xr X2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImRtY19zZWwyIiwKPj4+Pj4gKwkJLm9wcyA9 ICZjbGtfcmVnbWFwX211eF9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9IChjb25zdCBzdHJ1 Y3QgY2xrX3BhcmVudF9kYXRhIFtdKSB7Cj4+Pj4+ICsJCQl7IC5odyA9ICZhMV9kbWNfZGl2Lmh3 IH0sCj4+Pj4+ICsJCQl7IC5md19uYW1lID0gInh0YWwiLCB9LAo+Pj4+PiArCQl9LAo+Pj4+PiAr CQkubnVtX3BhcmVudHMgPSAyLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5U LAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19y ZWdtYXAgYTFfZG1jID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRl X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRE1DX0NMS19DVFJMLAo+Pj4+PiArCQkuYml0X2lk eCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAiZG1jIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFw X2dhdGVfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpb XSkgewo+Pj4+PiArCQkJJmExX2RtY19zZWwyLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1f cGFyZW50cyA9IDEsCj4+Pj4+ICsJCS8qCj4+Pj4+ICsJCSAqIFRoaXMgY2xvY2sgaXMgdXNlZCBi eSBERFIgY2xvY2sgd2hpY2ggc2V0dGVkIGluIEJMMgo+Pj4+PiArCQkgKiBhbmQgaXMgcmVxdWly ZWQgYnkgdGhlIHBsYXRmb3JtIHRvIG9wZXJhdGUgY29ycmVjdGx5Lgo+Pj4+PiArCQkgKiBVbnRp bCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiBhcmUgbWV0LCB3ZSBuZWVkIHRoaXMgY2xvY2sgdG8K Pj4+Pj4gKwkJICogYmUgbWFya2VkIGFzIGNyaXRpY2FsOgo+Pj4+PiArCQkgKiBhKSBNYXJrIHRo ZSBjbG9jayB1c2VkIGJ5IGEgZmlybXdhcmUgcmVzb3VyY2UsIGlmIHBvc3NpYmxlCj4+Pj4+ICsJ CSAqIGIpIENDRiBoYXMgYSBjbG9jayBoYW5kLW9mZiBtZWNoYW5pc20gdG8gbWFrZSB0aGUgc3Vy ZSB0aGUKPj4+Pj4gKwkJICogICAgY2xvY2sgc3RheXMgb24gdW50aWwgdGhlIHByb3BlciBkcml2 ZXIgY29tZXMgYWxvbmcKPj4+Pj4gKwkJICovCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFU RV9QQVJFTlQgfCBDTEtfSVNfQ1JJVElDQUwsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4KPj4+ PiBTaG91bGQgeW91IHB1dCBhbGwgdGhpcyBETUMgc3R1ZmYgaW4gUk8gdW50aWwgeW91IGdvdCBh IGRyaXZlciBmb3IgaXQgPwo+Pj4gT0ssIHJlcGxhY2UgYXMgY2xrX3JlZ21hcF9nYXRlX3JvX29w cwo+Pj4+Cj4+PiBbIC4uLiBdCj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBpbnQgbWVzb25fYTFfcGVy aXBoc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+PiArewo+Pj4+PiAr CWludCByZXQ7Cj4+Pj4+ICsKPj4+Pj4gKwlyZXQgPSBtZXNvbl9lZWNsa2NfcHJvYmUocGRldik7 Cj4+Pj4+ICsJaWYgKHJldCkKPj4+Pj4gKwkJcmV0dXJuIHJldDsKPj4+Pj4gKwo+Pj4+PiArCXJl dHVybiAwOwo+Pj4+PiArfQo+Pj4+Cj4+Pj4gQWdhaW4gdGhpcyBmdW5jdGlvbiBpcyBmdW5jdGlv biBpcyB1c2VsZXNzIGFuZCBpdCBtYWtlcyBtZSB3b25kZXIgaWYgeW91Cj4+Pj4gc2hvdWxkIHJl YWxseSBiZSB1c2luZyBtZXNvbl9lZWNsa2NfcHJvYmUoKQo+Pj4+Cj4+Pj4gVGhpcyBtYWtlcyB5 b3UgdXNlIHN5c2NvbiB3aGljaCBpcyBub3QgY29ycmVjdCB1bmxlc3MgeW91IGhhdmUgYSBnb29k Cj4+Pj4gcmVhc29uID8KPj4+Pgo+Pj4gSWYgaXQgY2FuIG5vdCB1c2UgdGhlIG1lc29uX2VlY2xr Y19wcm9iZSgpLCBJIHdpbGwgcmVhbGl6ZSBhIHByb2JlIGZ1bmN0aW9uCj4+PiB3aGljaCBpcyBt b3N0bHkgZHVwbGljYXRlIHdpdGggbWVzb25fZWVjbGtjX3Byb2JlKCkgZXhjZXB0Cj4+PiAic3lz Y29uX25vZGVfdG9fcmVnbWFwIgo+Pj4KPj4+IE1heWJlIGFub3RoZXIgY29tbW9uIHByb2JlIGZ1 bmN0aW9uIGFuZCBhIG5ldyBmaWxlIGFyZSByZXF1aXJlZCBmb3IgQTEKPj4+IHRocmVlIGRyaXZl cnM/IO+8iGluY2x1ZGUgdGhlIENQVSBjbG9jayBkcml2ZXLvvIkKPj4KPj4gTWF5YmUKPj4KPiBJ IHdpbGwgYWRkIGEgbmV3IGZ1bmN0aW9uIGJhc2Ugb24gbWVzb24tZWVjbGsuYwo+Pj4KPj4+IE9y IHVzaW5nIG1lc29uX2VlY2xrY19wcm9iZSBpcyBtb3JlIGVhc2llcj8KPj4KPj4gSXQgaXMgbm90 IHF1ZXN0aW9uIG9mIGVhc2luZXNzLCBidXQgY29ycmVjdG5lc3MuCj4+Cj4+Pgo+Pj4+IElzIHRo ZXJlIGFueXRoaW5nIGJ1dCBjbG9ja3MgYW5kIHJlc2V0cyBpbiB0aGVzZSByZWdpc3RlciByZWdp b24gPwo+Pj4gTm8sIHRoZXJlIGlzIG9ubHkgY2xvY2tzIGluIHRoZSByZWdpc3RlciByZWdpb24u Cj4+PiB0aGUgc2FtZSBkb2VzIHRoZSBQTEwgcmVnaXN0ZXIgcmVnaW9uLgo+Pgo+PiBUaGVuIHRo ZXJlIGlzIG5vIHJlYXNvbiB0byB1c2Ugc3lzY29uIGZvciB0aG9zZSBkcml2ZXJzCj4+QWRkIGEg bmV3IHByb2JlIGZ1bmN0aW9uIGZvciBBMQo+Pj4+Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbWVzb25fZWVjbGtjX2RhdGEgYTFfcGVyaXBoc19kYXRhID0gewo+Pj4+PiArCQku cmVnbWFwX2Nsa3MgPSBhMV9wZXJpcGhzX3JlZ21hcHMsCj4+Pj4+ICsJCS5yZWdtYXBfY2xrX251 bSA9IEFSUkFZX1NJWkUoYTFfcGVyaXBoc19yZWdtYXBzKSwKPj4+Pj4gKwkJLmh3X29uZWNlbGxf ZGF0YSA9ICZhMV9wZXJpcGhzX2h3X29uZWNlbGxfZGF0YSwKPj4+Pj4gK307Cj4+Pj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBjbGtjX21hdGNoX3RhYmxlW10gPSB7Cj4+Pj4+ ICsJewo+Pj4+PiArCQkuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLGExLXBlcmlwaHMtY2xrYyIsCj4+ Pj4+ICsJCS5kYXRhID0gJmExX3BlcmlwaHNfZGF0YQo+Pj4+PiArCX0sCj4+Pj4+ICsJeyAvKiBz ZW50aW5lbCAqLyB9Cj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBhMV9kcml2ZXIgPSB7Cj4+Pj4+ICsJLnByb2JlCQk9IG1lc29uX2ExX3Blcmlw aHNfcHJvYmUsCj4+Pj4+ICsJLmRyaXZlcgkJPSB7Cj4+Pj4+ICsJCS5uYW1lCT0gImExLXBlcmlw aHMtY2xrYyIsCj4+Pj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGNsa2NfbWF0Y2hfdGFibGUsCj4+ Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVy KGExX2RyaXZlcik7Cj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tZXNvbi9hMS5oIGIv ZHJpdmVycy9jbGsvbWVzb24vYTEuaAo+Pj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4+PiBp bmRleCAwMDAwMDAwLi4xYWU1ZTA0Cj4+Pj4+IC0tLSAvZGV2L251bGwKPj4+Pj4gKysrIGIvZHJp dmVycy9jbGsvbWVzb24vYTEuaAo+Pj4+PiBAQCAtMCwwICsxLDEyMCBAQAo+Pj4+PiArLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBNSVQpICovCj4+Pj4+ICsvKgo+Pj4+ PiArICogQ29weXJpZ2h0IChjKSAyMDE5IEFtbG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPj4+Pj4gKyAqLwo+Pj4+PiArCj4+Pj4+ICsjaWZuZGVmIF9fQTFfSAo+Pj4+PiArI2RlZmlu ZSBfX0ExX0gKPj4+Pj4gKwo+Pj4+PiArLyogcGVyaXBoZXJhbCBjbG9jayBjb250cm9sbGVyIHJl Z2lzdGVyIG9mZnNldCAqLwo+Pj4+PiArI2RlZmluZSBTWVNfT1NDSU5fQ1RSTAkJCTB4MAo+Pj4+ PiArI2RlZmluZSBSVENfQllfT1NDSU5fQ1RSTDAJCTB4NAo+Pj4+PiArI2RlZmluZSBSVENfQllf T1NDSU5fQ1RSTDEJCTB4OAo+Pj4+PiArI2RlZmluZSBSVENfQ1RSTAkJCTB4Ywo+Pj4+PiArI2Rl ZmluZSBTWVNfQ0xLX0NUUkwwCQkJMHgxMAo+Pj4+PiArI2RlZmluZSBBWElfQ0xLX0NUUkwwCQkJ MHgxNAo+Pj4+PiArI2RlZmluZSBTWVNfQ0xLX0VOMAkJCTB4MWMKPj4+Pj4gKyNkZWZpbmUgU1lT X0NMS19FTjEJCQkweDIwCj4+Pj4+ICsjZGVmaW5lIEFYSV9DTEtfRU4JCQkweDI0Cj4+Pj4+ICsj ZGVmaW5lIERTUEFfQ0xLX0VOCQkJMHgyOAo+Pj4+PiArI2RlZmluZSBEU1BCX0NMS19FTgkJCTB4 MmMKPj4+Pj4gKyNkZWZpbmUgRFNQQV9DTEtfQ1RSTDAJCQkweDMwCj4+Pj4+ICsjZGVmaW5lIERT UEJfQ0xLX0NUUkwwCQkJMHgzNAo+Pj4+PiArI2RlZmluZSBDTEsxMl8yNF9DVFJMCQkJMHgzOAo+ Pj4+PiArI2RlZmluZSBHRU5fQ0xLX0NUUkwJCQkweDNjCj4+Pj4+ICsjZGVmaW5lIFRJTUVTVEFN UF9DVFJMMAkJCTB4NDAKPj4+Pj4gKyNkZWZpbmUgVElNRVNUQU1QX0NUUkwxCQkJMHg0NAo+Pj4+ PiArI2RlZmluZSBUSU1FU1RBTVBfQ1RSTDIJCQkweDQ4Cj4+Pj4+ICsjZGVmaW5lIFRJTUVTVEFN UF9WQUwwCQkJMHg0Ywo+Pj4+PiArI2RlZmluZSBUSU1FU1RBTVBfVkFMMQkJCTB4NTAKPj4+Pj4g KyNkZWZpbmUgVElNRUJBU0VfQ1RSTDAJCQkweDU0Cj4+Pj4+ICsjZGVmaW5lIFRJTUVCQVNFX0NU UkwxCQkJMHg1OAo+Pj4+PiArI2RlZmluZSBTQVJfQURDX0NMS19DVFJMCQkweGMwCj4+Pj4+ICsj ZGVmaW5lIFBXTV9DTEtfQUJfQ1RSTAkJCTB4YzQKPj4+Pj4gKyNkZWZpbmUgUFdNX0NMS19DRF9D VFJMCQkJMHhjOAo+Pj4+PiArI2RlZmluZSBQV01fQ0xLX0VGX0NUUkwJCQkweGNjCj4+Pj4+ICsj ZGVmaW5lIFNQSUNDX0NMS19DVFJMCQkJMHhkMAo+Pj4+PiArI2RlZmluZSBUU19DTEtfQ1RSTAkJ CTB4ZDQKPj4+Pj4gKyNkZWZpbmUgU1BJRkNfQ0xLX0NUUkwJCQkweGQ4Cj4+Pj4+ICsjZGVmaW5l IFVTQl9CVVNDTEtfQ1RSTAkJCTB4ZGMKPj4+Pj4gKyNkZWZpbmUgU0RfRU1NQ19DTEtfQ1RSTAkJ MHhlMAo+Pj4+PiArI2RlZmluZSBDRUNBX0NMS19DVFJMMAkJCTB4ZTQKPj4+Pj4gKyNkZWZpbmUg Q0VDQV9DTEtfQ1RSTDEJCQkweGU4Cj4+Pj4+ICsjZGVmaW5lIENFQ0JfQ0xLX0NUUkwwCQkJMHhl Ywo+Pj4+PiArI2RlZmluZSBDRUNCX0NMS19DVFJMMQkJCTB4ZjAKPj4+Pj4gKyNkZWZpbmUgUFNS QU1fQ0xLX0NUUkwJCQkweGY0Cj4+Pj4+ICsjZGVmaW5lIERNQ19DTEtfQ1RSTAkJCTB4ZjgKPj4+ Pj4gKyNkZWZpbmUgRkNMS19ESVYxX1NFTAkJCTB4ZmMKPj4+Pj4gKyNkZWZpbmUgVFNUX0NUUkwJ CQkweDEwMAo+Pj4+PiArCj4+Pj4+ICsjZGVmaW5lIENMS0lEX1hUQUxfQ0xLVFJFRQkJMAo+Pj4+ PiArI2RlZmluZSBDTEtJRF9TWVNfQV9TRUwJCQk4OQo+Pj4+PiArI2RlZmluZSBDTEtJRF9TWVNf QV9ESVYJCQk5MAo+Pj4+PiArI2RlZmluZSBDTEtJRF9TWVNfQQkJCTkxCj4+Pj4+ICsjZGVmaW5l IENMS0lEX1NZU19CX1NFTAkJCTkyCj4+Pj4+ICsjZGVmaW5lIENMS0lEX1NZU19CX0RJVgkJCTkz Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1NZU19CCQkJOTQKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQ QV9BX1NFTAkJOTUKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQQV9BX0RJVgkJOTYKPj4+Pj4gKyNk ZWZpbmUgQ0xLSURfRFNQQV9BCQkJOTcKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQQV9CX1NFTAkJ OTgKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQQV9CX0RJVgkJOTkKPj4+Pj4gKyNkZWZpbmUgQ0xL SURfRFNQQV9CCQkJMTAwCj4+Pj4+ICsjZGVmaW5lIENMS0lEX0RTUEJfQV9TRUwJCTEwMQo+Pj4+ PiArI2RlZmluZSBDTEtJRF9EU1BCX0FfRElWCQkxMDIKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQ Ql9BCQkJMTAzCj4+Pj4+ICsjZGVmaW5lIENMS0lEX0RTUEJfQl9TRUwJCTEwNAo+Pj4+PiArI2Rl ZmluZSBDTEtJRF9EU1BCX0JfRElWCQkxMDUKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQQl9CCQkJ MTA2Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1JUQ18zMktfQ0xLSU4JCTEwNwo+Pj4+PiArI2RlZmlu ZSBDTEtJRF9SVENfMzJLX0RJVgkJMTA4Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1JUQ18zMktfWFRB TAkJMTA5Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1JUQ18zMktfU0VMCQkxMTAKPj4+Pj4gKyNkZWZp bmUgQ0xLSURfQ0VDQl8zMktfQ0xLSU4JCTExMQo+Pj4+PiArI2RlZmluZSBDTEtJRF9DRUNCXzMy S19ESVYJCTExMgo+Pj4+PiArI2RlZmluZSBDTEtJRF9DRUNCXzMyS19TRUxfUFJFCQkxMTMKPj4+ Pj4gKyNkZWZpbmUgQ0xLSURfQ0VDQl8zMktfU0VMCQkxMTQKPj4+Pj4gKyNkZWZpbmUgQ0xLSURf Q0VDQV8zMktfQ0xLSU4JCTExNQo+Pj4+PiArI2RlZmluZSBDTEtJRF9DRUNBXzMyS19ESVYJCTEx Ngo+Pj4+PiArI2RlZmluZSBDTEtJRF9DRUNBXzMyS19TRUxfUFJFCQkxMTcKPj4+Pj4gKyNkZWZp bmUgQ0xLSURfQ0VDQV8zMktfU0VMCQkxMTgKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRElWMl9QUkUJ CQkxMTkKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfMjRNX0RJVjIJCQkxMjAKPj4+Pj4gKyNkZWZpbmUg Q0xLSURfR0VOX1NFTAkJCTEyMQo+Pj4+PiArI2RlZmluZSBDTEtJRF9HRU5fRElWCQkJMTIyCj4+ Pj4+ICsjZGVmaW5lIENMS0lEX1NBUkFEQ19ESVYJCTEyMwo+Pj4+PiArI2RlZmluZSBDTEtJRF9Q V01fQV9TRUwJCQkxMjQKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfUFdNX0FfRElWCQkJMTI1Cj4+Pj4+ ICsjZGVmaW5lIENMS0lEX1BXTV9CX1NFTAkJCTEyNgo+Pj4+PiArI2RlZmluZSBDTEtJRF9QV01f Ql9ESVYJCQkxMjcKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfUFdNX0NfU0VMCQkJMTI4Cj4+Pj4+ICsj ZGVmaW5lIENMS0lEX1BXTV9DX0RJVgkJCTEyOQo+Pj4+PiArI2RlZmluZSBDTEtJRF9QV01fRF9T RUwJCQkxMzAKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfUFdNX0RfRElWCQkJMTMxCj4+Pj4+ICsjZGVm aW5lIENMS0lEX1BXTV9FX1NFTAkJCTEzMgo+Pj4+PiArI2RlZmluZSBDTEtJRF9QV01fRV9ESVYJ CQkxMzMKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfUFdNX0ZfU0VMCQkJMTM0Cj4+Pj4+ICsjZGVmaW5l IENMS0lEX1BXTV9GX0RJVgkJCTEzNQo+Pj4+PiArI2RlZmluZSBDTEtJRF9TUElDQ19TRUwJCQkx MzYKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfU1BJQ0NfRElWCQkJMTM3Cj4+Pj4+ICsjZGVmaW5lIENM S0lEX1NQSUNDX1NFTDIJCTEzOAo+Pj4+PiArI2RlZmluZSBDTEtJRF9UU19ESVYJCQkxMzkKPj4+ Pj4gKyNkZWZpbmUgQ0xLSURfU1BJRkNfU0VMCQkJMTQwCj4+Pj4+ICsjZGVmaW5lIENMS0lEX1NQ SUZDX0RJVgkJCTE0MQo+Pj4+PiArI2RlZmluZSBDTEtJRF9TUElGQ19TRUwyCQkxNDIKPj4+Pj4g KyNkZWZpbmUgQ0xLSURfVVNCX0JVU19TRUwJCTE0Mwo+Pj4+PiArI2RlZmluZSBDTEtJRF9VU0Jf QlVTX0RJVgkJMTQ0Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1NEX0VNTUNfU0VMCQkxNDUKPj4+Pj4g KyNkZWZpbmUgQ0xLSURfU0RfRU1NQ19ESVYJCTE0Ngo+Pj4+PiArI2RlZmluZSBDTEtJRF9TRF9F TU1DX1NFTDIJCTE0Nwo+Pj4+PiArI2RlZmluZSBDTEtJRF9QU1JBTV9TRUwJCQkxNDgKPj4+Pj4g KyNkZWZpbmUgQ0xLSURfUFNSQU1fRElWCQkJMTQ5Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1BTUkFN X1NFTDIJCTE1MAo+Pj4+PiArI2RlZmluZSBDTEtJRF9ETUNfU0VMCQkJMTUxCj4+Pj4+ICsjZGVm aW5lIENMS0lEX0RNQ19ESVYJCQkxNTIKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRE1DX1NFTDIJCQkx NTMKPj4+Pj4gKyNkZWZpbmUgTlJfQ0xLUwkJCQkxNTQKPj4+Pj4gKwo+Pj4+PiArI2luY2x1ZGUg PGR0LWJpbmRpbmdzL2Nsb2NrL2ExLWNsa2MuaD4KPj4+Pj4gKwo+Pj4+PiArI2VuZGlmIC8qIF9f QTFfSCAqLwo+Pj4+Cj4+Pj4gLgo+Pj4+Cj4+Cj4+IC4KPj4KCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== 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=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 CFEE7C17440 for ; Tue, 12 Nov 2019 16:59:33 +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 843992196E for ; Tue, 12 Nov 2019 16:59:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="GtMc6IYt"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="n2V1Okij" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 843992196E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date: In-reply-to:Subject:To:From:References:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=Ngyhyvn8pbS0CwwebN8FIBhakKjqyYIY7KsCvnG+odk=; b=GtMc6IYtHrE4JctZLUb3WELhyO tbOJpv8tjxwm/T/7Fn7IHjBusxw87gLShVh88XXvERWXkypLLl3kSlimmtKEP6WXAaS01BIpMwvhv o35h/pxE/o0nphcJk2OYHXNVr3CX8EJQ0vFLs7U1rOkJixXu4CYiNLoyLH9/ii2hmrbKcwIDhV1D8 qPdt8H+QYk4dn1gTyuQLGYOos/I3dUuPbDrVPP8Ejax4EZJ6MBy5kWu9QL9NM26QDbojQwgb0wjsh M3hff3Nu0wnUYVr9lAsylipVek2oheYpNTTRHIuyzGz+UPmCEarGJ5sde2DBgyPIxkk9eAiTZgadp srj2XlAw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUZVj-0001D3-7X; Tue, 12 Nov 2019 16:59:23 +0000 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUZVW-00014Q-8V for linux-amlogic@lists.infradead.org; Tue, 12 Nov 2019 16:59:15 +0000 Received: by mail-wr1-x441.google.com with SMTP id z10so14045884wrs.12 for ; Tue, 12 Nov 2019 08:59:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version:content-transfer-encoding; bh=GUMF3sLXww7f+IF9cNmdUAWTGgI0qtADr058kEfMDKI=; b=n2V1OkijbSZNkl/icRDq75p5mf0ZGbZay8KbpLmBrG1lk7lfWqbpU6jpDxJAZPRZ3T z81ft5pRfDRc5xdVjw0XgWkwfqrBy9xcD7TLtj1OEOFa5lyQ23TGnrfx+cxU87vC/UYd GDm/9/KjvgJ9NguS+DGm7uWfu1cVgsppWmXMizGsn+pilCNSxLbNJv8y0hckmS5LHBsc zdZJ94ZOol6ZovUjbwRo1Oo5y/dQ889EeCna1erixX7/xMBz6UD7xRSTXqGqAJUnPG6L MPOpXjeJRo9D2CaOx3iDLXZxdlunjBO5AKsClqaOVoIcIOnGU1FIsJqGCK1l4DyTtiI7 cn4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version:content-transfer-encoding; bh=GUMF3sLXww7f+IF9cNmdUAWTGgI0qtADr058kEfMDKI=; b=SC9gA9XIImjzV3ixHcYs1Gqf0Hx04hLnKOjX6m9EjzaOsz6TBmSv2enlXtxso3WJmV HLMAnN8/0XDW+klgyuu2gNIV1+RJ1Qj89LCFwiXWJtKIewRPPDBbSgalv/ETzNmulXR3 m6Enon5/Fgx8bDaDY3d1gcvCOLEO6Na+bs8wvJYPdPAIaHK/zvSf5gkmh96cwl0ikH1I Mfh/aoiis1UahBmPr4bwvh5IL/iltDA3mN89eZ22rTQuVH8vhYuYYxtzr4pfxoh60tZl MQLprH390437iLP1w13iGWgOhDubxSTW5kZaSH+e47dwJqiaL0MCZTWdYx7UL6eBkJ7P Admw== X-Gm-Message-State: APjAAAUbxXr3wtcxby2XfJvAyWqXLVeMUfMHmqgfUjfqtrULfCtl01dD 6m5QjcRu9z9Nv/AtT3FdHncyow== X-Google-Smtp-Source: APXvYqxgacioZSaEq1bTl4qUBqCvPPpNvEMT9ObPmlavQMudZc51cRBi7C7y1qcx/8Cizav8AA8/Aw== X-Received: by 2002:a5d:5742:: with SMTP id q2mr6855584wrw.311.1573577947729; Tue, 12 Nov 2019 08:59:07 -0800 (PST) Received: from localhost (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id y17sm22470819wrs.58.2019.11.12.08.59.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2019 08:59:06 -0800 (PST) References: <1571382865-41978-1-git-send-email-jian.hu@amlogic.com> <1571382865-41978-4-git-send-email-jian.hu@amlogic.com> <1jsgnmba1a.fsf@starbuckisacylon.baylibre.com> <49b33e94-910b-3fd9-4da1-050742d07e93@amlogic.com> <1jblts3v7e.fsf@starbuckisacylon.baylibre.com> User-agent: mu4e 1.3.3; emacs 26.2 From: Jerome Brunet To: Jian Hu , Neil Armstrong Subject: Re: [PATCH v2 3/3] clk: meson: a1: add support for Amlogic A1 clock driver In-reply-to: Date: Tue, 12 Nov 2019 17:59:05 +0100 Message-ID: <1jh839f2ue.fsf@starbuckisacylon.baylibre.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191112_085910_374327_40DCC61C X-CRM114-Status: GOOD ( 29.19 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rob Herring , Victor Wan , Jianxin Pan , Martin Blumenstingl , Kevin Hilman , Michael Turquette , linux-kernel@vger.kernel.org, Stephen Boyd , Qiufang Dai , Chandle Zou , linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org Ck9uIFNhdCAwOSBOb3YgMjAxOSBhdCAxMjoxNiwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNv bT4gd3JvdGU6Cgo+IEhpLCBKZXJvbWUKPgo+IFNvcnJ5IGZvciBsYXRlIHJlbHkKPgo+IE9uIDIw MTkvMTEvNCAxNjoyNCwgSmVyb21lIEJydW5ldCB3cm90ZToKPj4KPj4gT24gRnJpIDI1IE9jdCAy MDE5IGF0IDEzOjMyLCBKaWFuIEh1IDxqaWFuLmh1QGFtbG9naWMuY29tPiB3cm90ZToKPj4KPj4+ IEhpLCBKZXJvbWUKPj4+Cj4+PiBUaGFua3MgZm9yIHlvdXIgcmV2aWV3Cj4+Pgo+Pj4gT24gMjAx OS8xMC8yMSAxOTo0MSwgSmVyb21lIEJydW5ldCB3cm90ZToKPj4+Pgo+Pj4+IE9uIEZyaSAxOCBP Y3QgMjAxOSBhdCAwOToxNCwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNvbT4gd3JvdGU6Cj4+ Pj4KPj4+Pj4gVGhlIEFtbG9naWMgQTEgY2xvY2sgaW5jbHVkZXMgdGhyZWUgZHJpdmVyczoKPj4+ Pj4gcGVyaXBoZXJhbCBjbG9ja3MsIHBsbCBjbG9ja3MsIENQVSBjbG9ja3MuCj4+Pj4+IHN5cyBw bGwgYW5kIENQVSBjbG9ja3Mgd2lsbCBiZSBzZW50IGluIG5leHQgcGF0Y2guCj4+Pj4+Cj4+Pj4+ IFVubGlrZSB0aGUgcHJldmlvdXMgc2VyaWVzLCB0aGVyZSBpcyBubyBFRS9BTyBkb21haW4KPj4+ Pj4gaW4gQTEgQ0xLIGNvbnRyb2xsZXJzLgo+Pj4+Pgo+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBKaWFu IEh1IDxqaWFuLmh1QGFtbG9naWMuY29tPgo+Pj4+PiAtLS0KPj4+Pj4gICAgZHJpdmVycy9jbGsv bWVzb24vS2NvbmZpZyAgfCAgIDEwICsKPj4+Pj4gICAgZHJpdmVycy9jbGsvbWVzb24vTWFrZWZp bGUgfCAgICAxICsKPj4+Pj4gICAgZHJpdmVycy9jbGsvbWVzb24vYTEtcGxsLmMgfCAgMzQ1ICsr KysrKysKPj4+Pj4gICAgZHJpdmVycy9jbGsvbWVzb24vYTEtcGxsLmggfCAgIDU2ICsrCj4+Pj4+ ICAgIGRyaXZlcnMvY2xrL21lc29uL2ExLmMgICAgIHwgMjI2NCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4+PiAgICBkcml2ZXJzL2Nsay9tZXNvbi9hMS5o ICAgICB8ICAxMjAgKysrCj4+Pj4+ICAgIDYgZmlsZXMgY2hhbmdlZCwgMjc5NiBpbnNlcnRpb25z KCspCj4+Pj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2Nsay9tZXNvbi9hMS1wbGwu Ywo+Pj4+PiAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jbGsvbWVzb24vYTEtcGxsLmgK Pj4+Pj4gICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL21lc29uL2ExLmMKPj4+Pj4g ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL21lc29uL2ExLmgKPj4+Pgo+Pj4+IElu IHRoZSBuZXh0IHZlcnNpb24sIG9uZQo+Pj4gT0ssIEkgd2lsbCBzZW5kIGExIHBlcmlwaGVyYWwg YW5kIHBsbCBkcml2ZXIgaW4gdHdvIHBhdGNoLgo+Pj4+Cj4+Pj4+Cj4+Pj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2Nsay9tZXNvbi9LY29uZmlnIGIvZHJpdmVycy9jbGsvbWVzb24vS2NvbmZpZwo+ Pj4+PiBpbmRleCBkYWJlYjQzLi5jMjgwOWIyIDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2Ns ay9tZXNvbi9LY29uZmlnCj4+Pj4+ICsrKyBiL2RyaXZlcnMvY2xrL21lc29uL0tjb25maWcKPj4+ Pj4gQEAgLTkzLDYgKzkzLDE2IEBAIGNvbmZpZyBDT01NT05fQ0xLX0FYR19BVURJTwo+Pj4+PiAg ICAJICBTdXBwb3J0IGZvciB0aGUgYXVkaW8gY2xvY2sgY29udHJvbGxlciBvbiBBbUxvZ2ljIEEx MTNEIGRldmljZXMsCj4+Pj4+ICAgIAkgIGFrYSBheGcsIFNheSBZIGlmIHlvdSB3YW50IGF1ZGlv IHN1YnN5c3RlbSB0byB3b3JrLgo+Pj4+PiAgICArY29uZmlnIENPTU1PTl9DTEtfQTEKPj4+Pj4g Kwlib29sCj4+Pj4+ICsJZGVwZW5kcyBvbiBBUkNIX01FU09OCj4+Pj4+ICsJc2VsZWN0IENPTU1P Tl9DTEtfTUVTT05fUkVHTUFQCj4+Pj4+ICsJc2VsZWN0IENPTU1PTl9DTEtfTUVTT05fRFVBTERJ Vgo+Pj4+PiArCXNlbGVjdCBDT01NT05fQ0xLX01FU09OX1BMTAo+Pj4+PiArCWhlbHAKPj4+Pj4g KwkgIFN1cHBvcnQgZm9yIHRoZSBjbG9jayBjb250cm9sbGVyIG9uIEFtbG9naWMgQTExM0wgZGV2 aWNlLAo+Pj4+PiArCSAgYWthIGExLiBTYXkgWSBpZiB5b3Ugd2FudCBwZXJpcGhlcmFscyB0byB3 b3JrLgo+Pj4+PiArCj4+Pj4+ICAgIGNvbmZpZyBDT01NT05fQ0xLX0cxMkEKPj4+Pj4gICAgCWJv b2wKPj4+Pj4gICAgCWRlcGVuZHMgb24gQVJDSF9NRVNPTgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9jbGsvbWVzb24vTWFrZWZpbGUgYi9kcml2ZXJzL2Nsay9tZXNvbi9NYWtlZmlsZQo+Pj4+ PiBpbmRleCAzOTM5ZjIxLi4yOGNiYWUxIDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2Nsay9t ZXNvbi9NYWtlZmlsZQo+Pj4+PiArKysgYi9kcml2ZXJzL2Nsay9tZXNvbi9NYWtlZmlsZQo+Pj4+ PiBAQCAtMTYsNiArMTYsNyBAQCBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NRVNPTl9WSURfUExM X0RJVikgKz0gdmlkLXBsbC1kaXYubwo+Pj4+PiAgICAgIG9iai0kKENPTkZJR19DT01NT05fQ0xL X0FYRykgKz0gYXhnLm8gYXhnLWFvY2xrLm8KPj4+Pj4gICAgb2JqLSQoQ09ORklHX0NPTU1PTl9D TEtfQVhHX0FVRElPKSArPSBheGctYXVkaW8ubwo+Pj4+PiArb2JqLSQoQ09ORklHX0NPTU1PTl9D TEtfQTEpICs9IGExLXBsbC5vIGExLm8KPj4+Pgo+Pj4+IFNvIGZhciwgYWxsIHRoZSBjb250cm9s bGVyIGhhZCB0aGVyZSBvd24gb3B0aW9uLCBJIGRvbid0IHNlZSB3aHkgaXQKPj4+PiBzaG91bGQg YmUgZGlmZmVyZW50IGhlcmUuCj4+Pj4KPj4+IE9LLCBJIHdpbGwgYWRkIHRoZSBvdGhlciBvcHRp b24gQ09ORklHX0NPTU1PTl9DTEtfQTFfUExMIGZvciBwbGwgZHJpdmVyCj4+Pj4+ICAgIG9iai0k KENPTkZJR19DT01NT05fQ0xLX0dYQkIpICs9IGd4YmIubyBneGJiLWFvY2xrLm8KPj4+Pj4gICAg b2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfRzEyQSkgKz0gZzEyYS5vIGcxMmEtYW9jbGsubwo+Pj4+ PiAgICBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NRVNPTjhCKSArPSBtZXNvbjhiLm8KPj4+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL21lc29uL2ExLXBsbC5jIGIvZHJpdmVycy9jbGsvbWVz b24vYTEtcGxsLmMKPj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+Pj4gaW5kZXggMDAwMDAw MC4uNDg2ZDk2NAo+Pj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4+ICsrKyBiL2RyaXZlcnMvY2xrL21l c29uL2ExLXBsbC5jCj4+Pj4+IEBAIC0wLDAgKzEsMzQ1IEBACj4+Pj4+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkKPj4+Pj4gKy8qCj4+Pj4+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTkgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4+PiAr ICogQXV0aG9yOiBKaWFuIEh1IDxqaWFuLmh1QGFtbG9naWMuY29tPgo+Pj4+PiArICovCj4+Pj4+ ICsKPj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4+Pgo+Pj4+IEh1 bSAuLi4gbG9va3MgbGlrZSBzb21lIHRoaW5ncyBhcmUgbWlzc2luZyBoZXJlCj4+Pj4KPj4+PiAj aW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+Pj4gI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92 aWRlci5oPgo+Pj4+Cj4+Pj4gPwo+Pj4gIzEKPj4+IFRoZXJlIGlzIDxsaW51eC9jbGstcHJvdmlk ZXIuaD4gaW4gbWVzb24tZWVjbGsuaCBmaWxlLAo+Pj4KPj4+IGFuZCBmb3IgQTEgZHJpdmVyKGEx LmMvYTEtcGxsLmMpIHRoZSBoZWFkIGZpbGUgaXMgbm90IHJlcXVpZWQuCj4+Pgo+Pj4gIzIKPj4+ IEZvciBBMSBkcml2ZXIsIHRoZSBmaWxlICJsaW51eC9vZl9kZXZpY2UuaCIgaXMgbm90IHJlcXVp cmVkLgo+Pj4gSXQgaXMgcmVxdWlyZWQgYnkgbWVzb24tZWVjbGsuYyBpbiBmYWN0Lgo+Pgo+PiBZ b3UgYXJlIHVzaW5nIHdoYXQgaXMgcHJvdmlkZWQgYnkgdGhlc2UgaGVhZGVycyBkaXJlY3RseSBp biB0aGlzIGZpbGUKPj4gSWYgbWVzb24tZWVjbGsgZXZlciBjaGFuZ2VzLCB5b3VyIGRyaXZlciBi cmVha3MKPj4KPiBPSywgSSB3aWxsIGFkZCB0aGUgdHdvIGhlYWRlciBmaWxlLgo+Pj4+Cj4+Pj4+ ICsjaW5jbHVkZSAiY2xrLXBsbC5oIgo+Pj4+PiArI2luY2x1ZGUgIm1lc29uLWVlY2xrLmgiCj4+ Pj4+ICsjaW5jbHVkZSAiYTEtcGxsLmgiCj4+Pj4KPj4+PiBBbHBoYW51bWVyaWMgb3JkZXIgcGxl YXNlCj4+Pj4KPj4+IE9LLCBJIHdpbGwgY2hhbmdlIGl0IGluIHRoZSBuZXh0IHZlcnNpb24uCj4+ Pgo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZml4ZWRfcGxsX2Rj byA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IG1lc29uX2Nsa19wbGxfZGF0YSl7Cj4+Pj4+ ICsJCS5lbiA9IHsKPj4+Pj4gKwkJCS5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+ Pj4+ICsJCQkuc2hpZnQgICA9IDI4LAo+Pj4+PiArCQkJLndpZHRoICAgPSAxLAo+Pj4+PiArCQl9 LAo+Pj4+PiArCQkubSA9IHsKPj4+Pj4gKwkJCS5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RS TDAsCj4+Pj4+ICsJCQkuc2hpZnQgICA9IDAsCj4+Pj4+ICsJCQkud2lkdGggICA9IDgsCj4+Pj4+ ICsJCX0sCj4+Pj4+ICsJCS5uID0gewo+Pj4+PiArCQkJLnJlZ19vZmYgPSBBTkFDVFJMX0ZJWFBM TF9DVFJMMCwKPj4+Pj4gKwkJCS5zaGlmdCAgID0gMTAsCj4+Pj4+ICsJCQkud2lkdGggICA9IDUs Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5mcmFjID0gewo+Pj4+PiArCQkJLnJlZ19vZmYgPSBBTkFD VFJMX0ZJWFBMTF9DVFJMMSwKPj4+Pj4gKwkJCS5zaGlmdCAgID0gMCwKPj4+Pj4gKwkJCS53aWR0 aCAgID0gMTksCj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5sID0gewo+Pj4+PiArCQkJLnJlZ19vZmYg PSBBTkFDVFJMX0ZJWFBMTF9DVFJMMCwKPj4+Pj4gKwkJCS5zaGlmdCAgID0gMzEsCj4+Pj4+ICsJ CQkud2lkdGggICA9IDEsCj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5yc3QgPSB7Cj4+Pj4+ICsJCQku cmVnX29mZiA9IEFOQUNUUkxfRklYUExMX0NUUkwwLAo+Pj4+PiArCQkJLnNoaWZ0ICAgPSAyOSwK Pj4+Pj4gKwkJCS53aWR0aCAgID0gMSwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5o dy5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImZpeGVk X3BsbF9kY28iLAo+Pj4+PiArCQkub3BzID0gJm1lc29uX2Nsa19wbGxfcm9fb3BzLAo+Pj4+PiAr CQkucGFyZW50X2RhdGEgPSAmKGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEpewo+Pj4+PiAr CQkJLmZ3X25hbWUgPSAieHRhbF9maXhwbGwiLAo+Pj4+PiArCQkJLm5hbWUgPSAieHRhbF9maXhw bGwiLAo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCX0sCj4+ Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZml4ZWRf cGxsID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+ Pj4+PiArCQkub2Zmc2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+ICsJCS5iaXRfaWR4 ID0gMjAsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAiZml4ZWRfcGxsIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtf cmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xr X2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX2ZpeGVkX3BsbF9kY28uaHcKPj4+Pj4gKwkJfSwKPj4+ Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLyoKPj4+Pj4gKwkJICogVGhpcyBjbG9j ayBpcyBmY2xrX2RpdjIvMy80J3MgcGFyZW50LAo+Pj4+PiArCQkgKiBIb3dldmVyLCBmY2xrX2Rp djIvMy81IGZlZWRzIEFYSS9BUEIvRERSLgo+Pj4+Cj4+Pj4gaXMgaXQgZmNsa19kaXYyLzMvNCBv ciBmY2xrX2RpdjIvMy81ID8KPj4+Pgo+Pj4+PiArCQkgKiBJdCBpcyByZXF1aXJlZCBieSB0aGUg cGxhdGZvcm0gdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCj4+Pj4+ICsJCSAqIFVudGlsIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uIGFyZSBtZXQsIHdlIG5lZWQgdGhpcyBjbG9jayB0bwo+Pj4+PiArCQkg KiBiZSBtYXJrZWQgYXMgY3JpdGljYWw6Cj4+Pj4+ICsJCSAqIGEpIE1hcmsgdGhlIGNsb2NrIHVz ZWQgYnkgYSBmaXJtd2FyZSByZXNvdXJjZSwgaWYgcG9zc2libGUKPj4+Pj4gKwkJICogYikgQ0NG IGhhcyBhIGNsb2NrIGhhbmQtb2ZmIG1lY2hhbmlzbSB0byBtYWtlIHRoZSBzdXJlIHRoZQo+Pj4+ PiArCQkgKiAgICBjbG9jayBzdGF5cyBvbiB1bnRpbCB0aGUgcHJvcGVyIGRyaXZlciBjb21lcyBh bG9uZwo+Pj4+PiArCQkgKi8KPj4+Pgo+Pj4+IERvbid0IGJsaW5kbHkgY29weS9wYXN0ZSBjb21t ZW50cyBmcm9tIG90aGVyIGRyaXZlcnMuIFRoZXJlIGlzIG5vIGRyaXZlcgo+Pj4+IGZvciB0aGUg ZGV2aWNlcyB5b3UgYXJlIG1lbnRpb25uaW5nIHNvIHRoZSBlbmQgb2YgdGhlIGNvbW1lbnQgaXMK Pj4+PiBjb25mdXNpbmcuIFRoZSAzIGZpcnN0IGxpbmVzIHdlcmUgZW5vdWdoCj4+Pj4KPj4+IE9L LCBJIHdpbGwgcmVtb3ZlIHRoZSBjb25mdXNpbmcgY29tbWVudHMKPj4+Cj4+Pj4+ICsJCS5mbGFn cyA9IENMS19JU19DUklUSUNBTCwKPj4+Pgo+Pj4+ID5Gcm9tIHlvdXIgY29tbWVudCwgSSB1bmRl cnN0YW5kIHRoYXQgc29tZSBjaGlsZCBhcmUgY3JpdGljYWwsIG5vdCB0aGlzCj4+Pj4gcGFydGlj dWxhciAob3IgYXQgbGVhc3QsIG5vdCBkaXJlY3RseSkuIFNvIHRoaXMgY2FuIGJlIHJlbW92ZWQg QUZBSUNUCj4+Pj4KPj4+PiBZb3Ugc2hvdWxkIGV2ZW4gbmVlZCBDTEtfSUdOT1JFX1VOVVNFRCBm b3IgdGhpcyBvbmUgc2luY2UgdGhlIGNsb2NrIHdpbGwKPj4+PiBhbHJlYWR5IGJlIGVuYWJsZWQg YmVmb3JlIHRoZSBsYXRlX2luaXQoKSBraWNrcyBpbgo+Pj4+Cj4+PiBPSywgSSB3aWxsIHJlcGxh Y2UgaXQgYXMgQ0xLX0lHTk9SRV9VTlVTRUQuCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsK Pj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxsX211bHRfcmFuZ2UgYTFfaGlmaV9wbGxfbXVs dF9yYW5nZSA9IHsKPj4+Pj4gKwkubWluID0gMzIsCj4+Pj4+ICsJLm1heCA9IDY0LAo+Pj4+PiAr fTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfc2VxdWVuY2UgYTFfaGlm aV9pbml0X3JlZ3NbXSA9IHsKPj4+Pj4gKwl7IC5yZWcgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDEs IC5kZWYgPSAweDAxODAwMDAwIH0sCj4+Pj4+ICsJeyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NU UkwyLCAuZGVmID0gMHgwMDAwMTEwMCB9LAo+Pj4+PiArCXsgLnJlZyA9IEFOQUNUUkxfSElGSVBM TF9DVFJMMywgLmRlZiA9IDB4MTAwYTExMDAgfSwKPj4+Pj4gKwl7IC5yZWcgPSBBTkFDVFJMX0hJ RklQTExfQ1RSTDQsIC5kZWYgPSAweDAwMzAyMDAwIH0sCj4+Pj4+ICsJeyAucmVnID0gQU5BQ1RS TF9ISUZJUExMX0NUUkwwLCAuZGVmID0gMHgwMWYxODQ0MCB9LAo+Pj4+PiArCXsgLnJlZyA9IEFO QUNUUkxfSElGSVBMTF9DVFJMMCwgLmRlZiA9IDB4MTFmMTg0NDAsIC5kZWxheV91cyA9IDEwIH0s Cj4+Pj4+ICsJeyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLCAuZGVmID0gMHgxNWYxODQ0 MCwgLmRlbGF5X3VzID0gNDAgfSwKPj4+Pj4gKwl7IC5yZWcgPSBBTkFDVFJMX0hJRklQTExfQ1RS TDIsIC5kZWYgPSAweDAwMDAxMTQwIH0sCj4+Pj4+ICsJeyAucmVnID0gQU5BQ1RSTF9ISUZJUExM X0NUUkwyLCAuZGVmID0gMHgwMDAwMTEwMCB9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3Rh dGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2hpZmlfcGxsID0gewo+Pj4+PiArCS5kYXRhID0gJihz dHJ1Y3QgbWVzb25fY2xrX3BsbF9kYXRhKXsKPj4+Pj4gKwkJLmVuID0gewo+Pj4+PiArCQkJLnJl Z19vZmYgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDAsCj4+Pj4+ICsJCQkuc2hpZnQgICA9IDI4LAo+ Pj4+PiArCQkJLndpZHRoICAgPSAxLAo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubSA9IHsKPj4+Pj4g KwkJCS5yZWdfb2ZmID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLAo+Pj4+PiArCQkJLnNoaWZ0ICAg PSAwLAo+Pj4+PiArCQkJLndpZHRoICAgPSA4LAo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubiA9IHsK Pj4+Pj4gKwkJCS5yZWdfb2ZmID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLAo+Pj4+PiArCQkJLnNo aWZ0ICAgPSAxMCwKPj4+Pj4gKwkJCS53aWR0aCAgID0gNSwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJ LmZyYWMgPSB7Cj4+Pj4+ICsJCQkucmVnX29mZiA9IEFOQUNUUkxfSElGSVBMTF9DVFJMMSwKPj4+ Pj4gKwkJCS5zaGlmdCAgID0gMCwKPj4+Pj4gKwkJCS53aWR0aCAgID0gMTksCj4+Pj4+ICsJCX0s Cj4+Pj4+ICsJCS5sID0gewo+Pj4+PiArCQkJLnJlZ19vZmYgPSBBTkFDVFJMX0hJRklQTExfU1RT LAo+Pj4+PiArCQkJLnNoaWZ0ICAgPSAzMSwKPj4+Pj4gKwkJCS53aWR0aCAgID0gMSwKPj4+Pj4g KwkJfSwKPj4+Pj4gKwkJLnJhbmdlID0gJmExX2hpZmlfcGxsX211bHRfcmFuZ2UsCj4+Pj4+ICsJ CS5pbml0X3JlZ3MgPSBhMV9oaWZpX2luaXRfcmVncywKPj4+Pj4gKwkJLmluaXRfY291bnQgPSBB UlJBWV9TSVpFKGExX2hpZmlfaW5pdF9yZWdzKSwKPj4+Pj4gKwkJLnN0cmljdF9zZXF1ZW5jZSA9 IHRydWUsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpewo+Pj4+PiArCQkubmFtZSA9ICJoaWZpX3BsbCIsCj4+Pj4+ICsJCS5vcHMgPSAmbWVzb25f Y2xrX3BsbF9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0IGNsa19w YXJlbnRfZGF0YSl7Cj4+Pj4+ICsJCQkuZndfbmFtZSA9ICJ4dGFsX2ZpeHBsbCIsCj4+Pj4+ICsJ CQkubmFtZSA9ICJ4dGFsX2ZpeHBsbCIsCj4+Pj4KPj4+PiBCb3RoIHNob3VsZCBwcm92aWRlZCB3 aGVuIGEgY29udHJvbGxlciB0cmFuc2l0aW9uIGZyb20gdGhlIG9sZCB3YXkgb2YKPj4+PiBkZXNj cmliaW5nIHBhcmVudCB0byB0aGUgbmV3IHdheS4gVGhpcyBpcyBhIG5ldyBjb250cm9sbGVyIHNv IGl0IGRvZXMKPj4+PiBub3QgYXBwbHkuCj4+PiBJIGRvIG5vdCB1bmRlcnN0YW5kIHdoeSBpdCBk b2VzIG5vdCBhcHBseSwgY291bGQgeW91IGV4cGxhaW4gbW9yZT8KPj4KPj4gWW91ciBkcml2ZXIg aXMgbmV3LCBpdCBpcyBub3Qgc29tZXRoaW5nIG9sZCB0cmFuc2l0aW9uaW5nIGZyb20gZ2xvYmFs Cj4+IG5hbWUgdG8gY2xvY2sgaW4gRFQgIQo+Pgo+Pj4KPj4+IFRoZSB4dGFsX2ZpeHBsbCBjbG9j ayBpcyByZWdpc3RlcmVkIGluIGFub3RoZXIgcGVyaXBoZXJhbCBkcml2ZXIsIElmIGRvIG5vdAo+ Pj4gZGVzcmliZSB0aGUgIm5hbWUiIG1lbWJlciBpbiBwYXJlbnRfZGF0YSwgImZ3X25hbWUiIGRv ZXMgbm90IHdvcmsgYmVjYXVzZQo+Pj4gaXQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQuIHRoZSBo aWZpX3BsbCBwYXJlbnQgd2lsbCBiZSBudWxsIGluCj4+PiAvc3lzL2tlcm5lbC9kZWJ1Zy9jbGsv aGlmaV9wbGwvY2xrX3BhcmVudC4KPj4+Cj4+PiBISUZJIFBMTCB3aWxsIGJlIGEgb3JwaGFuIGNs b2NrLCBidXQgaXRzIHBhcmVudCBzaG91bGQgYmUgeHRhbF9maXhwbGwuCj4+Cj4+IFRoZXJlIHdp bGwgYmUgYW4gb3JwaGFuIHllcywgdGVtcG9yYXJpbHksIHVudGlsIGJvdGggY29udHJvbGxlcnMg YXJlIHVwLgo+PiBPbmNlIGJvdGggY29udHJvbGxlciBhcmUgdXAsIHRoZSBjbG9jayB3aWxsIGJl IHJlcGFyZW50ZWQgaWYgbmVjZXNzYXJ5Lgo+Pgo+Pj4KPj4+IFNvIGJvdGggb2YgImZ3X25hbWUi IG9mICJuYW1lIiBzaG91bGQgYmUgZGVzY3JpYmVkLgo+Pgo+PiBObwo+Pgo+Cj4gIzEKPgo+IEhl cmUsIEkgYW0gc3RpbGwgY29uZnVzZWQuCj4gRnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUg cGhlbm9tZW5vbu+8jCB0aGUgbmFtZSBpbiBwYXJlbnRfZGF0YSBpcwo+IHJlcXVpcmVkLgo+Cj4K PiBISUZJIFBMTCBpcyBkZXNjcmliZWQgbGlrZSB0aGlzOgo+Cj4gCS5wYXJlbnRfZGF0YSA9ICYo Y29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSl7Cj4gCQkuZndfbmFtZSA9ICJ4dGFsX2hpZmlw bGwiLAo+IAkJLm5hbWUgPSAieHRhbF9oaWZpcGxsIgo+IAl9Cj4KPiBGaXhlZCBQTEwgaXMgZGVz Y3JpYmVkIGxpa2UgdGhpczoKPgo+IAkucGFyZW50X2RhdGEgPSAmKGNvbnN0IHN0cnVjdCBjbGtf cGFyZW50X2RhdGEpewo+IAkJLmZ3X25hbWUgPSAieHRhbF9maXhwbGwiLAo+IAl9LAo+Cj4gQWZ0 ZXIgdGhlIHN5c3RlbSBib290IGNvbXBsZXRlbHnvvIwgcnVuIGNhdAo+IC9zeXMva2VybmVsL2Rl YnVnL2Nsay9jbGtfc3VtbWFyeSwgSGVyZSBpcyB0aGUgcmVzdWx0Ogo+Cj4gIyBjYXQgL3N5cy9r ZXJuZWwvZGVidWcvY2xrL2Nsa19zdW1tYXJ5Cj4gICAgICAgICAgICAgICAgICBlbmFibGUgIHBy ZXBhcmUgIHByb3RlY3QgICAgICAgICAgICAgICAgICAgIGR1dHkKPiAgICBjbG9jayAgICAgICAg IGNvdW50ICAgY291bnQgICAgY291bnQgIHJhdGUgYWNjdXJhY3kgcGhhc2UgY3ljbGUKPiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+ICB4dGFsICAgICAgICAgICAgNSAgICAgICAgNSAgICAgICAgMCAgICAyNDAwMDAw MCAgICAwICAgICAwICA1MDAwMAo+ICAgICB0c19kaXYgICAgICAgMCAgICAgICAgMCAgICAgICAg MCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ICAgICAgICB0cyAgICAgICAgMCAgICAg ICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ICAgICBwd21fZl9z ZWwgICAgMCAgICAgICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ ICAgICAgICBwd21fZl9kaXYgMCAgICAgICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAg ICAwICA1MDAwMAo+ICAgICAgICAgICBwd21fZiAgMCAgICAgICAgMCAgICAgICAgMCAgICAyNDAw MDAwMCAgICAwICAgICAwICA1MDAwMAo+IC4uLi4uLgo+ICAgICB4dGFsX3N5c3BsbCAgMCAgICAg ICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ICAgICB4dGFsX2hp ZmlwbGwgMCAgICAgICAgMCAgICAgICAgMCAgICAyNDAwMDAwMCAgICAwICAgICAwICA1MDAwMAo+ ICAgICAgICBoaWZpX3BsbCAgMCAgICAgICAgMCAgICAgICAgMCAgMTUzNjAwMDAwMCAgICAwICAg ICAwICA1MDAwMAo+ICAgICB4dGFsX3VzYl9jdHJsIDAgICAgICAgIDAgICAgICAgIDAgICAgMjQw MDAwMDAgICAwICAgICAwICA1MDAwMAo+ICAgICB4dGFsX3VzYl9waHkgIDAgICAgICAgIDAgICAg ICAgIDAgICAgMjQwMDAwMDAgICAwICAgICAwICA1MDAwMAo+ICAgICB4dGFsX2ZpeHBsbCAgIDAg ICAgICAgIDAgICAgICAgIDAgICAgMjQwMDAwMDAgICAwICAgICAwICA1MDAwMAo+ICAgICB4dGFs X2Nsa3RyZWUgIDAgICAgICAgIDAgICAgICAgIDAgICAgMjQwMDAwMDAgICAwICAgICAwICA1MDAw MAo+ICBmaXhlZF9wbGxfZGNvICAgIDEgICAgICAgIDEgICAgICAgIDAgICAgICAgICAwICAgMCAg ICAgMCAgNTAwMDAKClRoaXMgbWVhbnMgdGhhdCBDQ0Ygd2hhdCBub3QgYWJsZSB0byByZXNvbHZl IHRoZSBwYXJlbnQuCkVpdGhlcjoKKiB5b3UndmUgbWFkZSBhIG1pc3Rha2Ugc29tZXdoZXJlCiog VGhlcmUgaXMgYnVnIGluIENDRiB3aGVuIHRoZSBwYXJlbnQgZGV2aWNlIGlzIG5vdCBhdmFpbGFi bGUgYXQgcHJvYmUKdGltZSwgdGhlIGNsb2NrIGlzIG5vdCBwcm9wZXJseSByZXBhcmVudGVkCgpF aXRoZXIgd2F5LCB5b3UnbGwgaGF2ZSB0byBkZWJ1ZyBhIGJpdCBtb3JlCgo+ICAgICBmaXhlZF9w bGwgICAgIDMgICAgICAgIDMgICAgICAgIDAgICAgICAgICAwICAgMCAgICAgMCAgNTAwMDAKPiAg ICAgICAgZmNsa19kaXY3X2RpdiAwICAgICAwICAgICAgICAwICAgICAgICAgMCAgIDAgICAgIDAg IDUwMDAwCj4gLi4uLgo+Cj4gdGhlIGhpZmlfcGxsJ3MgcGFyZW50IGlzIHh0YWxfaGlmaSwgQW5k IHRoZSBoaWZpX3BsbCBkZWZhdWx0IHJhdGUgaXMgcmlnaHQuCj4KPiBidXQgdGhlIGZpeGVkX3Bs bF9kY28gaXMgYSBvcnBoYW4gY2xvY2ssIGl0cyBwYXJlbnQgaXMgTlVMTC5BbmQgaXRzIHJhdGUK PiBpcyB6ZXJvLldoZW4gdGhlIG5hbWUgaW4gcGFyZW50X2RhdGEgaXMgYWRkZWQsIGl0cyBwYXJl bnQgaXMgeHRhbF9maXhwbGwuCj4KPiAjIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9jbGsvZml4ZWRf cGxsX2Rjby9jbGtfcGFyZW50Cj4gIwo+ICMgY2F0IC9zeXMva2VybmVsL2RlYnVnL2Nsay9maXhl ZF9wbGxfZGNvL2Nsa19yYXRlCj4gMAo+Cj4KPiAjMgo+IEluICAuL2RyaXZlcnMvY2xrL3Fjb20v Z2NjLXNtODE1MC5jCj4gRm9yIHNvbWUgY2xvY2tzLCBCb3RoIGZ3X25hbWUgYW5kIG5hbWUgYXJl IGRlc2NyaWJlZCBpbiBwYXJlbnRfZGF0YQo+IHN0cnVjdC4KClRob3NlIGFyZSBiZWluZyBtaWdy YXRlZCB0byBEVCBkZXNjcmlwdGlvbiB3aGljaCBtZWFucyB0aGF0IHdlIGRvbid0Cmtub3cgaWYg dGhlIERUIHdpbGwgdGhlIGNvcnJlY3QgZGVzY3JpcHRpb24KCkluIHRoaXMgY2FzZSB0aGUgY2xv Y2sgZnJhbWV3b3JrIHdpbGwgZmlyc3QgdHJ5IERUIGFuZCBpZiBEVCBkb2VzCnByb3ZpZGUgdGhp cyBmd19uYW1lLCBpdCB3aWxsIGZhbGxiYWNrIHRvIHRoZSBsZWdhY3kgbmFtZS4KClRoaXMgaXMg bm90IHlvdXIgY2FzZSBhcyB0aGlzIGlzIGEgbmV3IHBsYXRmb3JtIGZvciB3aGljaCB3ZSBrbm93 IHRoZSBEVApuYW1lIGV4aXN0LgoKPgo+Pj4KPj4+Pgo+Pj4+IFNhbWUgZm9yIHRoZSBvdGhlciBv Y2N1cmVuY2VzLgo+Pj4+Cj4+Pj4gQWxzbywgSSB0aGluayB5b3UgbWVhbnQgeHRhbF9oaWZpcGxs Cj4+PiBZZXMsSSB3aWxsIGNvcnJlY3QgaXQuCj4+Pj4KPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51 bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGlj IHN0cnVjdCBjbGtfZml4ZWRfZmFjdG9yIGExX2ZjbGtfZGl2Ml9kaXYgPSB7Cj4+Pj4+ICsJLm11 bHQgPSAxLAo+Pj4+PiArCS5kaXYgPSAyLAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xr X2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImZjbGtfZGl2Ml9kaXYiLAo+Pj4+PiArCQku b3BzID0gJmNsa19maXhlZF9mYWN0b3Jfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25z dCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX2ZpeGVkX3BsbC5odwo+Pj4+PiAr CQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+ PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZmNsa19kaXYyID0gewo+Pj4+ PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQkub2Zm c2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMjEsCj4+Pj4+ ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiAr CQkubmFtZSA9ICJmY2xrX2RpdjIiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9v cHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+ Pj4+ICsJCQkmYTFfZmNsa19kaXYyX2Rpdi5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3Bh cmVudHMgPSAxLAo+Pj4+PiArCQkvKgo+Pj4+PiArCQkgKiBUaGlzIGNsb2NrIGlzIHVzZWQgYnkg RERSIGNsb2NrIGluIEJMMiBmaXJtd2FyZQo+Pj4+PiArCQkgKiBhbmQgaXMgcmVxdWlyZWQgYnkg dGhlIHBsYXRmb3JtIHRvIG9wZXJhdGUgY29ycmVjdGx5Lgo+Pj4+PiArCQkgKiBVbnRpbCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbiBhcmUgbWV0LCB3ZSBuZWVkIHRoaXMgY2xvY2sgdG8KPj4+Pj4g KwkJICogYmUgbWFya2VkIGFzIGNyaXRpY2FsOgo+Pj4+PiArCQkgKiBhKSBNYXJrIHRoZSBjbG9j ayB1c2VkIGJ5IGEgZmlybXdhcmUgcmVzb3VyY2UsIGlmIHBvc3NpYmxlCj4+Pj4+ICsJCSAqIGIp IENDRiBoYXMgYSBjbG9jayBoYW5kLW9mZiBtZWNoYW5pc20gdG8gbWFrZSB0aGUgc3VyZSB0aGUK Pj4+Pj4gKwkJICogICAgY2xvY2sgc3RheXMgb24gdW50aWwgdGhlIHByb3BlciBkcml2ZXIgY29t ZXMgYWxvbmcKPj4+Pj4gKwkJICovCj4+Pj4+ICsJCS5mbGFncyA9IENMS19JU19DUklUSUNBTCwK Pj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfZml4 ZWRfZmFjdG9yIGExX2ZjbGtfZGl2M19kaXYgPSB7Cj4+Pj4+ICsJLm11bHQgPSAxLAo+Pj4+PiAr CS5kaXYgPSAzLAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+ Pj4+ICsJCS5uYW1lID0gImZjbGtfZGl2M19kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19maXhl ZF9mYWN0b3Jfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3 ICpbXSkgewo+Pj4+PiArCQkJJmExX2ZpeGVkX3BsbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQku bnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0 aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZmNsa19kaXYzID0gewo+Pj4+PiArCS5kYXRhID0gJihz dHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gQU5BQ1RSTF9G SVhQTExfQ1RSTDAsCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMjIsCj4+Pj4+ICsJfSwKPj4+Pj4gKwku aHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJmY2xr X2RpdjMiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5w YXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZmNs a19kaXYzX2Rpdi5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+ PiArCQkvKgo+Pj4+PiArCQkgKiBUaGlzIGNsb2NrIGlzIHVzZWQgYnkgQVBCIGJ1cyB3aGljaCBz ZXR0ZWQgaW4gUm9tY29kZQo+Pj4+PiArCQkgKiBhbmQgaXMgcmVxdWlyZWQgYnkgdGhlIHBsYXRm b3JtIHRvIG9wZXJhdGUgY29ycmVjdGx5Lgo+Pj4+PiArCQkgKiBVbnRpbCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbiBhcmUgbWV0LCB3ZSBuZWVkIHRoaXMgY2xvY2sgdG8KPj4+Pj4gKwkJICogYmUg bWFya2VkIGFzIGNyaXRpY2FsOgo+Pj4+PiArCQkgKiBhKSBNYXJrIHRoZSBjbG9jayB1c2VkIGJ5 IGEgZmlybXdhcmUgcmVzb3VyY2UsIGlmIHBvc3NpYmxlCj4+Pj4+ICsJCSAqIGIpIENDRiBoYXMg YSBjbG9jayBoYW5kLW9mZiBtZWNoYW5pc20gdG8gbWFrZSB0aGUgc3VyZSB0aGUKPj4+Pj4gKwkJ ICogICAgY2xvY2sgc3RheXMgb24gdW50aWwgdGhlIHByb3BlciBkcml2ZXIgY29tZXMgYWxvbmcK Pj4+Pj4gKwkJICovCj4+Pj4+ICsJCS5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4gKwl9 LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfZml4ZWRfZmFjdG9y IGExX2ZjbGtfZGl2NV9kaXYgPSB7Cj4+Pj4+ICsJLm11bHQgPSAxLAo+Pj4+PiArCS5kaXYgPSA1 LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5u YW1lID0gImZjbGtfZGl2NV9kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19maXhlZF9mYWN0b3Jf b3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+ Pj4+PiArCQkJJmExX2ZpeGVkX3BsbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVu dHMgPSAxLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0 IGNsa19yZWdtYXAgYTFfZmNsa19kaXY1ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xr X3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RS TDAsCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMjMsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9 ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJmY2xrX2RpdjUiLAo+ Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdz ID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZmNsa19kaXY1X2Rp di5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkvKgo+ Pj4+PiArCQkgKiBUaGlzIGNsb2NrIGlzIHVzZWQgYnkgQVhJIGJ1cyB3aGljaCBzZXR0ZWQgaW4g Um9tY29kZQo+Pj4+PiArCQkgKiBhbmQgaXMgcmVxdWlyZWQgYnkgdGhlIHBsYXRmb3JtIHRvIG9w ZXJhdGUgY29ycmVjdGx5Lgo+Pj4+PiArCQkgKiBVbnRpbCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv biBhcmUgbWV0LCB3ZSBuZWVkIHRoaXMgY2xvY2sgdG8KPj4+Pj4gKwkJICogYmUgbWFya2VkIGFz IGNyaXRpY2FsOgo+Pj4+PiArCQkgKiBhKSBNYXJrIHRoZSBjbG9jayB1c2VkIGJ5IGEgZmlybXdh cmUgcmVzb3VyY2UsIGlmIHBvc3NpYmxlCj4+Pj4+ICsJCSAqIGIpIENDRiBoYXMgYSBjbG9jayBo YW5kLW9mZiBtZWNoYW5pc20gdG8gbWFrZSB0aGUgc3VyZSB0aGUKPj4+Pj4gKwkJICogICAgY2xv Y2sgc3RheXMgb24gdW50aWwgdGhlIHByb3BlciBkcml2ZXIgY29tZXMgYWxvbmcKPj4+Pj4gKwkJ ICovCj4+Pj4+ICsJCS5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4gKwl9LAo+Pj4+PiAr fTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfZml4ZWRfZmFjdG9yIGExX2ZjbGtf ZGl2N19kaXYgPSB7Cj4+Pj4+ICsJLm11bHQgPSAxLAo+Pj4+PiArCS5kaXYgPSA3LAo+Pj4+PiAr CS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImZj bGtfZGl2N19kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19maXhlZF9mYWN0b3Jfb3BzLAo+Pj4+ PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJ JmExX2ZpeGVkX3BsbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+ Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdt YXAgYTFfZmNsa19kaXY3ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9n YXRlX2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+ ICsJCS5iaXRfaWR4ID0gMjQsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0 IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJmY2xrX2RpdjciLAo+Pj4+PiArCQku b3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0 IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZmNsa19kaXY3X2Rpdi5odwo+Pj4+ PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+ Pj4+PiArCj4+Pj4+ICsvKiBBcnJheSBvZiBhbGwgY2xvY2tzIHByb3ZpZGVkIGJ5IHRoaXMgcHJv dmlkZXIgKi8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX2h3X29uZWNlbGxfZGF0YSBhMV9wbGxf aHdfb25lY2VsbF9kYXRhID0gewo+Pj4+PiArCS5od3MgPSB7Cj4+Pj4+ICsJCVtDTEtJRF9GSVhF RF9QTExfRENPXQkJPSAmYTFfZml4ZWRfcGxsX2Rjby5odywKPj4+Pj4gKwkJW0NMS0lEX0ZJWEVE X1BMTF0JCT0gJmExX2ZpeGVkX3BsbC5odywKPj4+Pj4gKwkJW0NMS0lEX0hJRklfUExMXQkJPSAm YTFfaGlmaV9wbGwuaHcsCj4+Pj4+ICsJCVtDTEtJRF9GQ0xLX0RJVjJdCQk9ICZhMV9mY2xrX2Rp djIuaHcsCj4+Pj4+ICsJCVtDTEtJRF9GQ0xLX0RJVjNdCQk9ICZhMV9mY2xrX2RpdjMuaHcsCj4+ Pj4+ICsJCVtDTEtJRF9GQ0xLX0RJVjVdCQk9ICZhMV9mY2xrX2RpdjUuaHcsCj4+Pj4+ICsJCVtD TEtJRF9GQ0xLX0RJVjddCQk9ICZhMV9mY2xrX2RpdjcuaHcsCj4+Pj4+ICsJCVtDTEtJRF9GQ0xL X0RJVjJfRElWXQkJPSAmYTFfZmNsa19kaXYyX2Rpdi5odywKPj4+Pj4gKwkJW0NMS0lEX0ZDTEtf RElWM19ESVZdCQk9ICZhMV9mY2xrX2RpdjNfZGl2Lmh3LAo+Pj4+PiArCQlbQ0xLSURfRkNMS19E SVY1X0RJVl0JCT0gJmExX2ZjbGtfZGl2NV9kaXYuaHcsCj4+Pj4+ICsJCVtDTEtJRF9GQ0xLX0RJ VjdfRElWXQkJPSAmYTFfZmNsa19kaXY3X2Rpdi5odywKPj4+Pj4gKwkJW05SX1BMTF9DTEtTXQkJ CT0gTlVMTCwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5udW0gPSBOUl9QTExfQ0xLUywKPj4+Pj4gK307 Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCAqY29uc3QgYTFfcGxsX3Jl Z21hcHNbXSA9IHsKPj4+Pj4gKwkmYTFfZml4ZWRfcGxsX2RjbywKPj4+Pj4gKwkmYTFfZml4ZWRf cGxsLAo+Pj4+PiArCSZhMV9oaWZpX3BsbCwKPj4+Pj4gKwkmYTFfZmNsa19kaXYyLAo+Pj4+PiAr CSZhMV9mY2xrX2RpdjMsCj4+Pj4+ICsJJmExX2ZjbGtfZGl2NSwKPj4+Pj4gKwkmYTFfZmNsa19k aXY3LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIGludCBtZXNvbl9hMV9wbGxfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+Pj4gK3sKPj4+Pj4gKwlpbnQgcmV0 Owo+Pj4+PiArCj4+Pj4+ICsJcmV0ID0gbWVzb25fZWVjbGtjX3Byb2JlKHBkZXYpOwo+Pj4+PiAr CWlmIChyZXQpCj4+Pj4+ICsJCXJldHVybiByZXQ7Cj4+Pj4+ICsKPj4+Pj4gKwlyZXR1cm4gMDsK Pj4+Pj4gK30KPj4+Pgo+Pj4+IFRoaXMgZnVuY3Rpb24gaXMgdXNlbGVzcy4KPj4+Pgo+Pj4gT0ss IEkgd2lsbCB1c2UgbWVzb25fZWVjbGtjX3Byb2JlIGRlcmVjdGx5Lgo+Pj4+PiArCj4+Pj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX2VlY2xrY19kYXRhIGExX3BsbF9kYXRhID0gewo+Pj4+ PiArCQkucmVnbWFwX2Nsa3MgPSBhMV9wbGxfcmVnbWFwcywKPj4+Pj4gKwkJLnJlZ21hcF9jbGtf bnVtID0gQVJSQVlfU0laRShhMV9wbGxfcmVnbWFwcyksCj4+Pj4+ICsJCS5od19vbmVjZWxsX2Rh dGEgPSAmYTFfcGxsX2h3X29uZWNlbGxfZGF0YSwKPj4+Pj4gK307Cj4+Pj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBjbGtjX21hdGNoX3RhYmxlW10gPSB7Cj4+Pj4+ICsJewo+ Pj4+PiArCQkuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLGExLXBsbC1jbGtjIiwKPj4+Pj4gKwkJLmRh dGEgPSAmYTFfcGxsX2RhdGEKPj4+Pj4gKwl9LAo+Pj4+PiArCXsgLyogc2VudGluZWwgKi8gfQo+ Pj4+Cj4+Pj4gTml0cGljazogZG9uJ3QgbmVlZCB0byB3cml0ZSB0aGlzLCBqdXN0IHdyaXRlIHRo ZSBsaW5lIGxpa2UgdGhpcwo+Pj4+Cj4+PiBPSywgcmVtb3ZlIGl0Lgo+Pj4+ICcgfSwge30nCj4+ Pj4KPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGExX2RyaXZlciA9IHsKPj4+Pj4gKwkucHJvYmUJCT0gbWVzb25fYTFfcGxsX3Byb2JlLAo+Pj4+ PiArCS5kcml2ZXIJCT0gewo+Pj4+PiArCQkubmFtZQk9ICJhMS1wbGwtY2xrYyIsCj4+Pj4+ICsJ CS5vZl9tYXRjaF90YWJsZSA9IGNsa2NfbWF0Y2hfdGFibGUsCj4+Pj4+ICsJfSwKPj4+Pj4gK307 Cj4+Pj4+ICsKPj4+Pj4gK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKGExX2RyaXZlcik7Cj4+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tZXNvbi9hMS1wbGwuaCBiL2RyaXZlcnMvY2xrL21l c29uL2ExLXBsbC5oCj4+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4+IGluZGV4IDAwMDAw MDAuLjk5ZWUyYTkKPj4+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+PiArKysgYi9kcml2ZXJzL2Nsay9t ZXNvbi9hMS1wbGwuaAo+Pj4+PiBAQCAtMCwwICsxLDU2IEBACj4+Pj4+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkgKi8KPj4+Pj4gKy8qCj4+Pj4+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMTkgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4+ PiArICovCj4+Pj4+ICsKPj4+Pj4gKyNpZm5kZWYgX19BMV9QTExfSAo+Pj4+PiArI2RlZmluZSBf X0ExX1BMTF9ICj4+Pj4+ICsKPj4+Pj4gKy8qIFBMTCByZWdpc3RlciBvZmZzZXQgKi8KPj4+Pj4g KyNkZWZpbmUgQU5BQ1RSTF9GSVhQTExfQ1RSTDAJCTB4ODAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RS TF9GSVhQTExfQ1RSTDEJCTB4ODQKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9GSVhQTExfQ1RSTDIJ CTB4ODgKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9GSVhQTExfQ1RSTDMJCTB4OGMKPj4+Pj4gKyNk ZWZpbmUgQU5BQ1RSTF9GSVhQTExfQ1RSTDQJCTB4OTAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9G SVhQTExfU1RTCQkweDk0Cj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfU1lTUExMX0NUUkwwCQkweDEw MAo+Pj4+PiArI2RlZmluZSBBTkFDVFJMX1NZU1BMTF9DVFJMMQkJMHgxMDQKPj4+Pj4gKyNkZWZp bmUgQU5BQ1RSTF9TWVNQTExfQ1RSTDIJCTB4MTA4Cj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfU1lT UExMX0NUUkwzCQkweDEwYwo+Pj4+PiArI2RlZmluZSBBTkFDVFJMX1NZU1BMTF9DVFJMNAkJMHgx MTAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9TWVNQTExfU1RTCQkweDExNAo+Pj4+PiArI2RlZmlu ZSBBTkFDVFJMX0hJRklQTExfQ1RSTDAJCTB4MTQwCj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfSElG SVBMTF9DVFJMMQkJMHgxNDQKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9ISUZJUExMX0NUUkwyCQkw eDE0OAo+Pj4+PiArI2RlZmluZSBBTkFDVFJMX0hJRklQTExfQ1RSTDMJCTB4MTRjCj4+Pj4+ICsj ZGVmaW5lIEFOQUNUUkxfSElGSVBMTF9DVFJMNAkJMHgxNTAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RS TF9ISUZJUExMX1NUUwkJMHgxNTQKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RSTF9BVURERFNfQ1RSTDAJ CTB4MTgwCj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfQVVERERTX0NUUkwxCQkweDE4NAo+Pj4+PiAr I2RlZmluZSBBTkFDVFJMX0FVREREU19DVFJMMgkJMHgxODgKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RS TF9BVURERFNfQ1RSTDMJCTB4MThjCj4+Pj4+ICsjZGVmaW5lIEFOQUNUUkxfQVVERERTX0NUUkw0 CQkweDE5MAo+Pj4+PiArI2RlZmluZSBBTkFDVFJMX0FVREREU19TVFMJCTB4MTk0Cj4+Pj4+ICsj ZGVmaW5lIEFOQUNUUkxfTUlTQ1RPUF9DVFJMMAkJMHgxYzAKPj4+Pj4gKyNkZWZpbmUgQU5BQ1RS TF9QT1JfQ05UTAkJMHgyMDgKPj4+Pj4gKwo+Pj4+PiArLyoKPj4+Pj4gKyAqIENMS0lEIGluZGV4 IHZhbHVlcwo+Pj4+PiArICoKPj4+Pj4gKyAqIFRoZXNlIGluZGljZXMgYXJlIGVudGlyZWx5IGNv bnRyaXZlZCBhbmQgZG8gbm90IG1hcCBvbnRvIHRoZSBoYXJkd2FyZS4KPj4+Pj4gKyAqIEl0IGhh cyBub3cgYmVlbiBkZWNpZGVkIHRvIGV4cG9zZSBldmVyeXRoaW5nIGJ5IGRlZmF1bHQgaW4gdGhl IERUIGhlYWRlcjoKPj4+Pj4gKyAqIGluY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svYTEtcGxsLWNs a2MuaC4gT25seSB0aGUgY2xvY2tzIGlkcyB3ZSBkb24ndCB3YW50Cj4+Pj4+ICsgKiB0byBleHBv c2UsIHN1Y2ggYXMgdGhlIGludGVybmFsIG11eGVzIGFuZCBkaXZpZGVycyBvZiBjb21wb3NpdGUg Y2xvY2tzLAo+Pj4+PiArICogd2lsbCByZW1haW4gZGVmaW5lZCBoZXJlLgo+Pj4+PiArICovCj4+ Pj4+ICsjZGVmaW5lIENMS0lEX0ZJWEVEX1BMTF9EQ08JCTAKPj4+Pj4gKyNkZWZpbmUgQ0xLSURf RkNMS19ESVYyX0RJVgkJMgo+Pj4+PiArI2RlZmluZSBDTEtJRF9GQ0xLX0RJVjNfRElWCQkzCj4+ Pj4+ICsjZGVmaW5lIENMS0lEX0ZDTEtfRElWNV9ESVYJCTQKPj4+Pj4gKyNkZWZpbmUgQ0xLSURf RkNMS19ESVY3X0RJVgkJNQo+Pj4+PiArI2RlZmluZSBOUl9QTExfQ0xLUwkJCTExCj4+Pj4+ICsK Pj4+Pj4gKy8qIGluY2x1ZGUgdGhlIENMS0lEcyB0aGF0IGhhdmUgYmVlbiBtYWRlIHBhcnQgb2Yg dGhlIERUIGJpbmRpbmcgKi8KPj4+Pj4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9hMS1w bGwtY2xrYy5oPgo+Pj4+PiArCj4+Pj4+ICsjZW5kaWYgLyogX19BMV9QTExfSCAqLwo+Pj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbWVzb24vYTEuYyBiL2RyaXZlcnMvY2xrL21lc29uL2Ex LmMKPj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+Pj4gaW5kZXggMDAwMDAwMC4uODZhNDcz Mwo+Pj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4+ICsrKyBiL2RyaXZlcnMvY2xrL21lc29uL2ExLmMK Pj4+Pj4gQEAgLTAsMCArMSwyMjY0IEBACj4+Pj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogKEdQTC0yLjArIE9SIE1JVCkKPj4+Pj4gKy8qCj4+Pj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTkgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4+PiArICogQXV0aG9yOiBK aWFuIEh1IDxqaWFuLmh1QGFtbG9naWMuY29tPgo+Pj4+PiArICovCj4+Pj4+ICsKPj4+Pj4gKyNp bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4+Pj4gKyNpbmNsdWRlICJjbGstcGxs LmgiCj4+Pj4+ICsjaW5jbHVkZSAiY2xrLWR1YWxkaXYuaCIKPj4+Pj4gKyNpbmNsdWRlICJtZXNv bi1lZWNsay5oIgo+Pj4+PiArI2luY2x1ZGUgImExLmgiCj4+Pj4KPj4+PiBTYW1lIGFzIGFib3Zl Cj4+PiBPSywgSSB3aWxsIGNoYW5nZSB0aGUgb3JkZXIuCj4+PiBJbiBmYWN0LCB0aGUgY2xrLXBs bC5oIGlzIG5vdCB1c2VkIGluIHRoZSBjdXJyZW50IGRyaXZlci4KPj4+IEkgd2lsbCByZW1vdmUg aXQuCj4+Pj4KPj4+Pj4gKwo+Pj4+PiArLyogUExMcyBjbG9jayBpbiBnYXRlcywgaXRzIHBhcmVu dCBpcyB4dGFsICovCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfeHRhbF9jbGt0 cmVlID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+ Pj4+PiArCQkub2Zmc2V0ID0gU1lTX09TQ0lOX0NUUkwsCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMCwK Pj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+ Pj4+PiArCQkubmFtZSA9ICJ4dGFsX2Nsa3RyZWUiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdt YXBfZ2F0ZV9yb19vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0IGNs a19wYXJlbnRfZGF0YSkgewo+Pj4+PiArCQkJLmZ3X25hbWUgPSAieHRhbCIsCj4+Pj4+ICsJCX0s Cj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS8qCj4+Pj4+ICsJCSAqIHN3aXRj aCBmb3IgeHRhbCBjbG9jawo+Pj4+PiArCQkgKiBMaW51eCBzaG91bGQgbm90IGNoYW5nZSBpdCBh dCBydW50aW1lCj4+Pj4+ICsJCSAqLwo+Pj4+Cj4+Pj4gQ29tbWVudCBub3QgdXNlZnVsOiBpdCB1 c2VzIHRoZSBSbyBvcHMKPj4+Pgo+Pj4gT0ssICByZW1vdmUgdGhlIGNvbW1lbnRzCj4+Pj4+ICsJ fSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV94 dGFsX2ZpeHBsbCA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZ2F0ZV9k YXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFNZU19PU0NJTl9DVFJMLAo+Pj4+PiArCQkuYml0X2lk eCA9IDEsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAieHRhbF9maXhwbGwiLAo+Pj4+PiArCQkub3BzID0gJmNs a19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0 IGNsa19wYXJlbnRfZGF0YSkgewo+Pj4+PiArCQkJLmZ3X25hbWUgPSAieHRhbCIsCj4+Pj4+ICsJ CX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19JU19D UklUSUNBTCwKPj4+Pj4gKwkJLyoKPj4+Pj4gKwkJICogaXQgZmVlZHMgRERSLEFYSSxBUEIgYnVz Cj4+Pj4+ICsJCSAqIExpbnV4IHNob3VsZCBub3QgY2hhbmdlIGl0IGF0IHJ1bnRpbWUKPj4+Pj4g KwkJICovCj4+Pj4KPj4+PiBBZ2FpbiwgdGhlIGNoaWxkIGFyZSBjcml0aWNhbCwgbm90IGRpcmVj dGx5IHRoaXMgY2xvY2sgZnJvbSB5b3VyCj4+Pj4gY29tbWVudC4KPj4+Pgo+Pj4+IFJlbW92ZSBD UklUSUNBTCwgcHV0IFJPIGlzIGxpbnV4IGlzIG5vdCBzdXBwb3NlZCB0byB0b3VjaCBpdC4KPj4+ Pgo+Pj4gcmVwYWNlIGFzIGNsa19yZWdtYXBfZ2F0ZV9yb19vcHMKPj4+Pj4gKwl9LAo+Pj4+PiAr fTsKPj4+Pj4gKwo+Pj4KPj4+IFsgLi4uIF0KPj4+Cj4+Pj4+ICsKPj4+Pj4gKy8qIGRzcCBhIGNs ayAqLwo+Pj4+PiArc3RhdGljIHUzMiBtdXhfdGFibGVfZHNwX2FiW10gPSB7IDAsIDEsIDIsIDMs IDQsIDcgfTsKPj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGRzcF9h Yl9jbGtfcGFyZW50X2RhdGFbXSA9IHsKPj4+Pj4gKwl7IC5md19uYW1lID0gInh0YWwiLCB9LAo+ Pj4+PiArCXsgLmZ3X25hbWUgPSAiZmNsa19kaXYyIiwgfSwKPj4+Pj4gKwl7IC5md19uYW1lID0g ImZjbGtfZGl2MyIsIH0sCj4+Pj4+ICsJeyAuZndfbmFtZSA9ICJmY2xrX2RpdjUiLCB9LAo+Pj4+ PiArCXsgLmZ3X25hbWUgPSAiaGlmaV9wbGwiLCB9LAo+Pj4+PiArCXsgLmh3ID0gJmExX3J0Y19j bGsuaHcgfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21h cCBhMV9kc3BhX2Ffc2VsID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9t dXhfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BBX0NMS19DVFJMMCwKPj4+Pj4gKwkJLm1h c2sgPSAweDcsCj4+Pj4+ICsJCS5zaGlmdCA9IDEwLAo+Pj4+PiArCQkudGFibGUgPSBtdXhfdGFi bGVfZHNwX2FiLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5p dF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYV9hX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAm Y2xrX3JlZ21hcF9tdXhfb3BzLAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBkc3BfYWJfY2xrX3Bh cmVudF9kYXRhLAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGRzcF9hYl9jbGtf cGFyZW50X2RhdGEpLAo+Pj4+Cj4+Pj4gLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCA/Cj4+ PiBZZXMsIEkgbWlzcyB0aGUgZmxhZy4KPj4+Pgo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiAr Cj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYV9hX2RpdiA9IHsKPj4+Pj4g KwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZGl2X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0 ID0gRFNQQV9DTEtfQ1RSTDAsCj4+Pj4+ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9 IDEwLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRh KXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYV9hX2RpdiIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3Jl Z21hcF9kaXZpZGVyX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNs a19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9kc3BhX2Ffc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJF TlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xr X3JlZ21hcCBhMV9kc3BhX2EgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFw X2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BBX0NMS19DVFJMMCwKPj4+Pj4gKwkJ LmJpdF9pZHggPSAxMywKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xr X2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFtZSA9ICJkc3BhX2EiLAo+Pj4+PiArCQkub3BzID0g JmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVj dCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZHNwYV9hX2Rpdi5odwo+Pj4+PiArCQl9LAo+ Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVf UEFSRU5ULAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0 IGNsa19yZWdtYXAgYTFfZHNwYV9iX3NlbCA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNs a19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRFNQQV9DTEtfQ1RSTDAsCj4+ Pj4+ICsJCS5tYXNrID0gMHg3LAo+Pj4+PiArCQkuc2hpZnQgPSAyNiwKPj4+Pj4gKwkJLnRhYmxl ID0gbXV4X3RhYmxlX2RzcF9hYiwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1 Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImRzcGFfYl9zZWwiLAo+Pj4+PiAr CQkub3BzID0gJmNsa19yZWdtYXBfbXV4X29wcywKPj4+Pj4gKwkJLnBhcmVudF9kYXRhID0gZHNw X2FiX2Nsa19wYXJlbnRfZGF0YSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gQVJSQVlfU0laRShk c3BfYWJfY2xrX3BhcmVudF9kYXRhKSwKPj4+Pgo+Pj4+IC5mbGFncyA9IENMS19TRVRfUkFURV9Q QVJFTlQgPwo+Pj4+Cj4+PiBZZXMsIEkgd2lsbCBhZGQgaXQuCj4+Pj4+ICsJfSwKPj4+Pj4gK307 Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9kc3BhX2JfZGl2ID0g ewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9kaXZfZGF0YSl7Cj4+Pj4+ICsJ CS5vZmZzZXQgPSBEU1BBX0NMS19DVFJMMCwKPj4+Pj4gKwkJLnNoaWZ0ID0gMTYsCj4+Pj4+ICsJ CS53aWR0aCA9IDEwLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtf aW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYV9iX2RpdiIsCj4+Pj4+ICsJCS5vcHMg PSAmY2xrX3JlZ21hcF9kaXZpZGVyX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qg c3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9kc3BhX2Jfc2VsLmh3Cj4+Pj4+ICsJ CX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRf UkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBz dHJ1Y3QgY2xrX3JlZ21hcCBhMV9kc3BhX2IgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBj bGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BBX0NMS19DVFJMMCwK Pj4+Pj4gKwkJLmJpdF9pZHggPSAyOSwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihz dHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFtZSA9ICJkc3BhX2IiLAo+Pj4+PiAr CQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNv bnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfZHNwYV9iX2Rpdi5odwo+Pj4+ PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtf U0VUX1JBVEVfUEFSRU5ULAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0 aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYV9zZWwgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0 cnVjdCBjbGtfcmVnbWFwX211eF9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IERTUEFfQ0xLX0NU UkwwLAo+Pj4+PiArCQkubWFzayA9IDB4MSwKPj4+Pj4gKwkJLnNoaWZ0ID0gMTUsCj4+Pj4+ICsJ fSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQku bmFtZSA9ICJkc3BhX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9tdXhfb3BzLAo+ Pj4+PiArCQkucGFyZW50X2RhdGEgPSAoY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBbXSkg ewo+Pj4+PiArCQkJeyAuaHcgPSAmYTFfZHNwYV9hLmh3IH0sCj4+Pj4+ICsJCQl7IC5odyA9ICZh MV9kc3BhX2IuaHcgfSwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMiwKPj4+ Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsK Pj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2RzcGFfZW5fZHNwYSA9 IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4g KwkJLm9mZnNldCA9IERTUEFfQ0xLX0VOLAo+Pj4+PiArCQkuYml0X2lkeCA9IDEsCj4+Pj4+ICsJ fSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4gKwkJ Lm5hbWUgPSAiZHNwYV9lbl9kc3BhIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVf b3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+ Pj4+PiArCQkJJmExX2RzcGFfc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50 cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQgfCBDTEtfSUdOT1JF X1VOVVNFRCwKPj4+Pgo+Pj4+IFdoeSBkbyB5b3UgbmVlZCBDTEtfSUdOT1JFX1VOVVNFRCA/Cj4+ Pj4KPj4+IEkgc2hvdWxkIHJlbW92ZSBpdAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+ Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYV9lbl9uaWMgPSB7Cj4+Pj4+ICsJ LmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQg PSBEU1BBX0NMS19FTiwKPj4+Pj4gKwkJLmJpdF9pZHggPSAwLAo+Pj4+PiArCX0sCj4+Pj4+ICsJ Lmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+ICsJCS5uYW1lID0gImRz cGFfZW5fbmljIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiAr CQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmEx X2RzcGFfc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQgfCBDTEtfSUdOT1JFX1VOVVNFRCwKPj4+ Pgo+Pj4+IFdoeSBkbyB5b3UgbmVlZCBDTEtfSUdOT1JFX1VOVVNFRCA/Cj4+Pj4KPj4+IEkgc2hv dWxkIHJlbW92ZSBpdAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4KPj4+PiBTYW1l IHF1ZXN0aW9uIGFuZCByZW1hcmtzIGFwcGxpZXMgdG8gRFNQIEIKPj4+Pgo+Pj4gZ290IGl0Cj4+ Pj4+ICsvKiBkc3AgYiBjbGsgKi8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9k c3BiX2Ffc2VsID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9tdXhfZGF0 YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BCX0NMS19DVFJMMCwKPj4+Pj4gKwkJLm1hc2sgPSAw eDcsCj4+Pj4+ICsJCS5zaGlmdCA9IDEwLAo+Pj4+PiArCQkudGFibGUgPSBtdXhfdGFibGVfZHNw X2FiLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRh KXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYl9hX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3Jl Z21hcF9tdXhfb3BzLAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBkc3BfYWJfY2xrX3BhcmVudF9k YXRhLAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGRzcF9hYl9jbGtfcGFyZW50 X2RhdGEpLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0 IGNsa19yZWdtYXAgYTFfZHNwYl9hX2RpdiA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNs a19yZWdtYXBfZGl2X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRFNQQl9DTEtfQ1RSTDAsCj4+ Pj4+ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9IDEwLAo+Pj4+PiArCX0sCj4+Pj4+ ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAi ZHNwYl9hX2RpdiIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9kaXZpZGVyX29wcywKPj4+ Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJ CSZhMV9kc3BiX2Ffc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEs Cj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4g K307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9kc3BiX2EgPSB7 Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJ CS5vZmZzZXQgPSBEU1BCX0NMS19DVFJMMCwKPj4+Pj4gKwkJLmJpdF9pZHggPSAxMywKPj4+Pj4g Kwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiAr CQkubmFtZSA9ICJkc3BiX2EiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMs Cj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ ICsJCQkmYTFfZHNwYl9hX2Rpdi5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMg PSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX0lHTk9SRV9V TlVTRUQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3Qg Y2xrX3JlZ21hcCBhMV9kc3BiX2Jfc2VsID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xr X3JlZ21hcF9tdXhfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBEU1BCX0NMS19DVFJMMCwKPj4+ Pj4gKwkJLm1hc2sgPSAweDcsCj4+Pj4+ICsJCS5zaGlmdCA9IDI2LAo+Pj4+PiArCQkudGFibGUg PSBtdXhfdGFibGVfZHNwX2FiLAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVj dCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYl9iX3NlbCIsCj4+Pj4+ICsJ CS5vcHMgPSAmY2xrX3JlZ21hcF9tdXhfb3BzLAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBkc3Bf YWJfY2xrX3BhcmVudF9kYXRhLAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGRz cF9hYl9jbGtfcGFyZW50X2RhdGEpLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYl9iX2RpdiA9IHsKPj4+Pj4gKwkuZGF0 YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZGl2X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRFNQ Ql9DTEtfQ1RSTDAsCj4+Pj4+ICsJCS5zaGlmdCA9IDE2LAo+Pj4+PiArCQkud2lkdGggPSAxMCwK Pj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+ Pj4+ICsJCS5uYW1lID0gImRzcGJfYl9kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBf ZGl2aWRlcl9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcg KltdKSB7Cj4+Pj4+ICsJCQkmYTFfZHNwYl9iX3NlbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQku bnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5ULAo+ Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdt YXAgYTFfZHNwYl9iID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRl X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRFNQQl9DTEtfQ1RSTDAsCj4+Pj4+ICsJCS5iaXRf aWR4ID0gMjksCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0 X2RhdGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYl9iIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtf cmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xr X2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX2RzcGJfYl9kaXYuaHcKPj4+Pj4gKwkJfSwKPj4+Pj4g KwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVO VCB8IENMS19JR05PUkVfVU5VU0VELAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZHNwYl9zZWwgPSB7Cj4+Pj4+ICsJLmRhdGEg PSAmKHN0cnVjdCBjbGtfcmVnbWFwX211eF9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IERTUEJf Q0xLX0NUUkwwLAo+Pj4+PiArCQkubWFzayA9IDB4MSwKPj4+Pj4gKwkJLnNoaWZ0ID0gMTUsCj4+ Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+ PiArCQkubmFtZSA9ICJkc3BiX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9tdXhf b3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+ Pj4+PiArCQkJJmExX2RzcGJfYS5odywgJmExX2RzcGJfYi5odywKPj4+Pj4gKwkJfSwKPj4+Pj4g KwkJLm51bV9wYXJlbnRzID0gMiwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVO VCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtf cmVnbWFwIGExX2RzcGJfZW5fZHNwYiA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19y ZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IERTUEJfQ0xLX0VOLAo+Pj4+PiAr CQkuYml0X2lkeCA9IDEsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNs a19pbml0X2RhdGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAiZHNwYl9lbl9kc3BiIiwKPj4+Pj4gKwkJ Lm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25z dCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX2RzcGJfc2VsLmh3Cj4+Pj4+ICsJ CX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRf UkFURV9QQVJFTlQgfCBDTEtfSUdOT1JFX1VOVVNFRCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+ Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2RzcGJfZW5fbmljID0gewo+ Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQku b2Zmc2V0ID0gRFNQQl9DTEtfRU4sCj4+Pj4+ICsJCS5iaXRfaWR4ID0gMCwKPj4+Pj4gKwl9LAo+ Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFt ZSA9ICJkc3BiX2VuX25pYyIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywK Pj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4g KwkJCSZhMV9kc3BiX3NlbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAx LAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX0lHTk9SRV9VTlVT RUQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKy8qIDEyTS8yNE0gY2xvY2sg Ki8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV8yNG0gPSB7Cj4+Pj4+ICsJLmRh dGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBD TEsxMl8yNF9DVFJMLAo+Pj4+PiArCQkuYml0X2lkeCA9IDExLAo+Pj4+PiArCX0sCj4+Pj4+ICsJ Lmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+ICsJCS5uYW1lID0gIjI0 bSIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4gKwkJLnBhcmVu dF9kYXRhID0gJihjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4+Pj4+ICsJCQkuZndf bmFtZSA9ICJ4dGFsIiwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+ Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4KPj4+IFsgLi4uIF0KPj4+Cj4+Pj4+ICtzdGF0 aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfc2FyYWRjX3NlbCA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYo c3RydWN0IGNsa19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gU0FSX0FEQ19D TEtfQ1RSTCwKPj4+Pj4gKwkJLm1hc2sgPSAweDEsCj4+Pj4+ICsJCS5zaGlmdCA9IDksCj4+Pj4+ ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiAr CQkubmFtZSA9ICJzYXJhZGNfc2VsIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX211eF9v cHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9IChjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRh IFtdKSB7Cj4+Pj4+ICsJCQl7IC5md19uYW1lID0gInh0YWwiLCB9LAo+Pj4+PiArCQkJeyAuaHcg PSAmYTFfc3lzX2Nsay5odywgfSwKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0g MiwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtf cmVnbWFwIGExX3NhcmFkY19kaXYgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVn bWFwX2Rpdl9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFNBUl9BRENfQ0xLX0NUUkwsCj4+Pj4+ ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwku aHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJzYXJh ZGNfZGl2IiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2RpdmlkZXJfb3BzLAo+Pj4+PiAr CQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmEx X3NhcmFkY19zZWwuaHcKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+ Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsK Pj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3NhcmFkY19jbGsgPSB7 Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJ CS5vZmZzZXQgPSBTQVJfQURDX0NMS19DVFJMLAo+Pj4+PiArCQkuYml0X2lkeCA9IDgsCj4+Pj4+ ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4g KwkJLm5hbWUgPSAic2FyYWRjX2NsayIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRl X29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsK Pj4+Pj4gKwkJCSZhMV9zYXJhZGNfZGl2Lmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFy ZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJ fSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKy8qIHB3bSBhL2IvYy9kIHBhcmVudCBkYXRhICov Cj4+Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBwd21fcGFyZW50X2Rh dGFbXSA9IHsKPj4+Pj4gKwl7IC5md19uYW1lID0gInh0YWwiLCB9LAo+Pj4+PiArCXsgLmh3ID0g JmExX3N5c19jbGsuaHcgfSwKPj4+Pj4gK307Cj4+Pj4KPj4+PiBMb29rcyBsaWtlIHRoZSBzYW1l IGFzIFNBUiBBREMKPj4+Pgo+Pj4gT0ssIEkgd2lsbCBkZXNjcmliZSBpdCBsaWtlIFNBUiBBREMg Zm9yIHB3bSBhL2IvYy9kCj4+Pj4+ICsKPj4+Pj4gKy8qIHB3bSBhIGNsayAqLwo+Pj4+PiArc3Rh dGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9hX3NlbCA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYo c3RydWN0IGNsa19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gUFdNX0NMS19B Ql9DVFJMLAo+Pj4+PiArCQkubWFzayA9IDB4MSwKPj4+Pj4gKwkJLnNoaWZ0ID0gOSwKPj4+Pj4g Kwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJ CS5uYW1lID0gInB3bV9hX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9tdXhfb3Bz LAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBwd21fcGFyZW50X2RhdGEsCj4+Pj4+ICsJCS5udW1f cGFyZW50cyA9IEFSUkFZX1NJWkUocHdtX3BhcmVudF9kYXRhKSwKPj4+Pj4gKwl9LAo+Pj4+PiAr fTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9hX2RpdiA9 IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZGl2X2RhdGEpewo+Pj4+PiAr CQkub2Zmc2V0ID0gUFdNX0NMS19BQl9DVFJMLAo+Pj4+PiArCQkuc2hpZnQgPSAwLAo+Pj4+PiAr CQkud2lkdGggPSA4LAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtf aW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2FfZGl2IiwKPj4+Pj4gKwkJLm9wcyA9 ICZjbGtfcmVnbWFwX2RpdmlkZXJfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBz dHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmExX3B3bV9hX3NlbC5odwo+Pj4+PiArCQl9 LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JB VEVfUEFSRU5ULAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3Ry dWN0IGNsa19yZWdtYXAgYTFfcHdtX2EgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtf cmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBQV01fQ0xLX0FCX0NUUkwsCj4+ Pj4+ICsJCS5iaXRfaWR4ID0gOCwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1 Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFtZSA9ICJwd21fYSIsCj4+Pj4+ICsJCS5v cHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qg c3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9wd21fYV9kaXYuaHcKPj4+Pj4gKwkJ fSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLyoKPj4+Pj4gKwkJICogVGhl IENQVSB3b3JraW5nIHZvbHRhZ2UgaXMgY29udHJvbGxlZCBieSBwd21fYQo+Pj4+PiArCQkgKiBp biBCTDIgZmlybXdhcmUuIGFkZCB0aGUgQ0xLX0lHTk9SRV9VTlVTRUQgZmxhZwo+Pj4+PiArCQkg KiB0byBhdm9pZCBjaGFuZ2luZyBhdCBydW50aW1lLgo+Pj4+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXiBpdAo+Pj4+Cj4+Pj4+ICsJCSAqIGFuZCBpcyByZXF1aXJlZCBi eSB0aGUgcGxhdGZvcm0gdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCj4+Pj4gICAgICAgICAgICAgICAg ICAgICAgImJsYWJsYS4gQW5kIiBpcyBzdHJhbmdlCj4+Pj4KPj4+Pj4gKwkJICogVW50aWwgdGhl IGZvbGxvd2luZyBjb25kaXRpb24gYXJlIG1ldCwgd2UgbmVlZCB0aGlzIGNsb2NrIHRvCj4+Pj4+ ICsJCSAqIGJlIG1hcmtlZCBhcyBjcml0aWNhbDoKPj4+Pj4gKwkJICogYSkgTWFyayB0aGUgY2xv Y2sgdXNlZCBieSBhIGZpcm13YXJlIHJlc291cmNlLCBpZiBwb3NzaWJsZQo+Pj4+PiArCQkgKiBi KSBDQ0YgaGFzIGEgY2xvY2sgaGFuZC1vZmYgbWVjaGFuaXNtIHRvIG1ha2UgdGhlIHN1cmUgdGhl Cj4+Pj4+ICsJCSAqICAgIGNsb2NrIHN0YXlzIG9uIHVudGlsIHRoZSBwcm9wZXIgZHJpdmVyIGNv bWVzIGFsb25nCj4+Pj4+ICsJCSAqLwo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFS RU5UIHwgQ0xLX0lHTk9SRV9VTlVTRUQsCj4+Pj4KPj4+PiBUaGlzIG9ubHkgc2tpcHMgdGhlIGxh dGVfaW5pdCgpIGRpc2FibGUgb2YgdW51c2VkIGNsb2Nrcwo+Pj4+Cj4+Pj4gQmUgYXdhcmUgdGhh dCB0aGlzIGlzIG5vdCBmb29sLXByb29mLiBJZiBhdCBhbnkgdGltZSBhIGRyaXZlciBlbmFibGUK Pj4+PiB0aGVuIGRpc2FibGUgdGhlIGNsb2NrLCB0aGUgY2xvY2sgd2lsbCBiZSBkaXNhYmxlIGFu ZCBJIGd1ZXNzIHlvdXIKPj4+PiBwbGF0Zm9ybSB3aWxsIGRpZSBpZiB0aGlzIHByb3ZpZGVzIHRo ZSBDUFUgdm9sdGFnZS4KPj4+IE9LLCBDTEtfSVNfQ1JJVElDQUwgaXMgYmV0dGVyLgo+Pj4+Cj4+ Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKy8qIHB3bSBiIGNsayAqLwo+Pj4+PiAr c3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9iX3NlbCA9IHsKPj4+Pj4gKwkuZGF0YSA9 ICYoc3RydWN0IGNsa19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gUFdNX0NM S19BQl9DVFJMLAo+Pj4+PiArCQkubWFzayA9IDB4MSwKPj4+Pj4gKwkJLnNoaWZ0ID0gMjUsCj4+ Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+ PiArCQkubmFtZSA9ICJwd21fYl9zZWwiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfbXV4 X29wcywKPj4+Pj4gKwkJLnBhcmVudF9kYXRhID0gcHdtX3BhcmVudF9kYXRhLAo+Pj4+PiArCQku bnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKHB3bV9wYXJlbnRfZGF0YSksCj4+Pj4+ICsJfSwKPj4+ Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fYl9k aXYgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2Rpdl9kYXRhKXsKPj4+ Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfQUJfQ1RSTCwKPj4+Pj4gKwkJLnNoaWZ0ID0gMTYsCj4+ Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0 IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJwd21fYl9kaXYiLAo+Pj4+PiArCQku b3BzID0gJmNsa19yZWdtYXBfZGl2aWRlcl9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNv bnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfcHdtX2Jfc2VsLmh3Cj4+Pj4+ ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19T RVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRp YyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fYiA9IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0 IGNsa19yZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfQUJfQ1RS TCwKPj4+Pj4gKwkJLmJpdF9pZHggPSAyNCwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0g JihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiArCQkubmFtZSA9ICJwd21fYiIsCj4+Pj4+ ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAo Y29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9wd21fYl9kaXYuaHcKPj4+ Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xL X1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArLyog cHdtIGMgY2xrICovCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfcHdtX2Nfc2Vs ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9tdXhfZGF0YSl7Cj4+Pj4+ ICsJCS5vZmZzZXQgPSBQV01fQ0xLX0NEX0NUUkwsCj4+Pj4+ICsJCS5tYXNrID0gMHgxLAo+Pj4+ PiArCQkuc2hpZnQgPSA5LAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBj bGtfaW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2Nfc2VsIiwKPj4+Pj4gKwkJLm9w cyA9ICZjbGtfcmVnbWFwX211eF9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9IHB3bV9wYXJl bnRfZGF0YSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gQVJSQVlfU0laRShwd21fcGFyZW50X2Rh dGEpLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNs a19yZWdtYXAgYTFfcHdtX2NfZGl2ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3Jl Z21hcF9kaXZfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBQV01fQ0xLX0NEX0NUUkwsCj4+Pj4+ ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwku aHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJwd21f Y19kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZGl2aWRlcl9vcHMsCj4+Pj4+ICsJ CS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFf cHdtX2Nfc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+ Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fYyA9IHsKPj4+Pj4g KwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNl dCA9IFBXTV9DTEtfQ0RfQ1RSTCwKPj4+Pj4gKwkJLmJpdF9pZHggPSA4LAo+Pj4+PiArCX0sCj4+ Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+ICsJCS5uYW1l ID0gInB3bV9jIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVfb3BzLAo+Pj4+PiAr CQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+PiArCQkJJmEx X3B3bV9jX2Rpdi5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSAxLAo+Pj4+ PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5ULAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+ Pj4+PiArCj4+Pj4+ICsvKiBwd20gZCBjbGsgKi8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3Jl Z21hcCBhMV9wd21fZF9zZWwgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFw X211eF9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfQ0RfQ1RSTCwKPj4+Pj4gKwkJ Lm1hc2sgPSAweDEsCj4+Pj4+ICsJCS5zaGlmdCA9IDI1LAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3 LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2Rf c2VsIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX211eF9vcHMsCj4+Pj4+ICsJCS5wYXJl bnRfZGF0YSA9IHB3bV9wYXJlbnRfZGF0YSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gQVJSQVlf U0laRShwd21fcGFyZW50X2RhdGEpLAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfcHdtX2RfZGl2ID0gewo+Pj4+PiArCS5kYXRh ID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9kaXZfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBQV01f Q0xLX0NEX0NUUkwsCj4+Pj4+ICsJCS5zaGlmdCA9IDE2LAo+Pj4+PiArCQkud2lkdGggPSA4LAo+ Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+ Pj4gKwkJLm5hbWUgPSAicHdtX2RfZGl2IiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2Rp dmlkZXJfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpb XSkgewo+Pj4+PiArCQkJJmExX3B3bV9kX3NlbC5odwo+Pj4+PiArCQl9LAo+Pj4+PiArCQkubnVt X3BhcmVudHMgPSAxLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5ULAo+Pj4+ PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAg YTFfcHdtX2QgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0 YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBQV01fQ0xLX0NEX0NUUkwsCj4+Pj4+ICsJCS5iaXRfaWR4 ID0gMjQsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2QiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdt YXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcg KltdKSB7Cj4+Pj4+ICsJCQkmYTFfcHdtX2RfZGl2Lmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5u dW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+ Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xr X3BhcmVudF9kYXRhIHB3bV9lZl9wYXJlbnRfZGF0YVtdID0gewo+Pj4+PiArCXsgLmZ3X25hbWUg PSAieHRhbCIsIH0sCj4+Pj4+ICsJeyAuaHcgPSAmYTFfc3lzX2Nsay5odyB9LAo+Pj4+PiArCXsg LmZ3X25hbWUgPSAiZmNsa19kaXY1IiwgfSwKPj4+Pj4gKwl7IC5odyA9ICZhMV9ydGNfY2xrLmh3 IH0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICsvKiBwd20gZSBjbGsgKi8KPj4+Pj4gK3N0YXRp YyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fZV9zZWwgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0 cnVjdCBjbGtfcmVnbWFwX211eF9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfRUZf Q1RSTCwKPj4+Pj4gKwkJLm1hc2sgPSAweDMsCj4+Pj4+ICsJCS5zaGlmdCA9IDksCj4+Pj4+ICsJ fSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQku bmFtZSA9ICJwd21fZV9zZWwiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfbXV4X29wcywK Pj4+Pj4gKwkJLnBhcmVudF9kYXRhID0gcHdtX2VmX3BhcmVudF9kYXRhLAo+Pj4+PiArCQkubnVt X3BhcmVudHMgPSBBUlJBWV9TSVpFKHB3bV9lZl9wYXJlbnRfZGF0YSksCj4+Pj4+ICsJfSwKPj4+ Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fZV9k aXYgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2Rpdl9kYXRhKXsKPj4+ Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfRUZfQ1RSTCwKPj4+Pj4gKwkJLnNoaWZ0ID0gMCwKPj4+ Pj4gKwkJLndpZHRoID0gOCwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3Qg Y2xrX2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gInB3bV9lX2RpdiIsCj4+Pj4+ICsJCS5v cHMgPSAmY2xrX3JlZ21hcF9kaXZpZGVyX29wcywKPj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29u c3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4gKwkJCSZhMV9wd21fZV9zZWwuaHcKPj4+Pj4g KwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NF VF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGlj IHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9lID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3Qg Y2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gUFdNX0NMS19FRl9DVFJM LAo+Pj4+PiArCQkuYml0X2lkeCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYo c3RydWN0IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAicHdtX2UiLAo+Pj4+PiAr CQkub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNv bnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJCQkmYTFfcHdtX2VfZGl2Lmh3Cj4+Pj4+ ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEsCj4+Pj4+ICsJCS5mbGFncyA9IENMS19T RVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKy8qIHB3 bSBmIGNsayAqLwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3B3bV9mX3NlbCA9 IHsKPj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfbXV4X2RhdGEpewo+Pj4+PiAr CQkub2Zmc2V0ID0gUFdNX0NMS19FRl9DVFJMLAo+Pj4+PiArCQkubWFzayA9IDB4MywKPj4+Pj4g KwkJLnNoaWZ0ID0gMjUsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNs a19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9ICJwd21fZl9zZWwiLAo+Pj4+PiArCQkub3Bz ID0gJmNsa19yZWdtYXBfbXV4X29wcywKPj4+Pj4gKwkJLnBhcmVudF9kYXRhID0gcHdtX2VmX3Bh cmVudF9kYXRhLAo+Pj4+PiArCQkubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKHB3bV9lZl9wYXJl bnRfZGF0YSksCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1 Y3QgY2xrX3JlZ21hcCBhMV9wd21fZl9kaXYgPSB7Cj4+Pj4+ICsJLmRhdGEgPSAmKHN0cnVjdCBj bGtfcmVnbWFwX2Rpdl9kYXRhKXsKPj4+Pj4gKwkJLm9mZnNldCA9IFBXTV9DTEtfRUZfQ1RSTCwK Pj4+Pj4gKwkJLnNoaWZ0ID0gMTYsCj4+Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJfSwKPj4+ Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQkubmFtZSA9 ICJwd21fZl9kaXYiLAo+Pj4+PiArCQkub3BzID0gJmNsa19yZWdtYXBfZGl2aWRlcl9vcHMsCj4+ Pj4+ICsJCS5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+ICsJ CQkmYTFfcHdtX2Zfc2VsLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1fcGFyZW50cyA9IDEs Cj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQsCj4+Pj4+ICsJfSwKPj4+Pj4g K307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9wd21fZiA9IHsK Pj4+Pj4gKwkuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBfZ2F0ZV9kYXRhKXsKPj4+Pj4gKwkJ Lm9mZnNldCA9IFBXTV9DTEtfRUZfQ1RSTCwKPj4+Pj4gKwkJLmJpdF9pZHggPSAyNCwKPj4+Pj4g Kwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+PiAr CQkubmFtZSA9ICJwd21fZiIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywK Pj4+Pj4gKwkJLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4g KwkJCSZhMV9wd21fZl9kaXYuaHcKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0g MSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+ PiArfTsKPj4+Pj4gKwo+Pj4KPj4+IFsgLi4uIF0KPj4+Cj4+Pj4+ICsKPj4+Pj4gKy8qIGRtYyBj bGsgKi8KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9kbWNfc2VsID0gewo+Pj4+ PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9tdXhfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZz ZXQgPSBETUNfQ0xLX0NUUkwsCj4+Pj4+ICsJCS5tYXNrID0gMHgzLAo+Pj4+PiArCQkuc2hpZnQg PSA5LAo+Pj4+PiArCX0sCj4+Pj4+ICsJLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRh KXsKPj4+Pj4gKwkJLm5hbWUgPSAiZG1jX3NlbCIsCj4+Pj4+ICsJCS5vcHMgPSAmY2xrX3JlZ21h cF9tdXhfb3BzLAo+Pj4+PiArCQkucGFyZW50X2RhdGEgPSBzZF9lbW1jX3BhcmVudHMsCj4+Pj4+ ICsJCS5udW1fcGFyZW50cyA9IDQsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4g K3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9kbWNfZGl2ID0gewo+Pj4+PiArCS5kYXRhID0g JihzdHJ1Y3QgY2xrX3JlZ21hcF9kaXZfZGF0YSl7Cj4+Pj4+ICsJCS5vZmZzZXQgPSBETUNfQ0xL X0NUUkwsCj4+Pj4+ICsJCS5zaGlmdCA9IDAsCj4+Pj4+ICsJCS53aWR0aCA9IDgsCj4+Pj4+ICsJ fSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+PiArCQku bmFtZSA9ICJkbWNfZGl2IiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFwX2RpdmlkZXJfb3Bz LAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+ PiArCQkJJmExX2RtY19zZWwuaHcKPj4+Pj4gKwkJfSwKPj4+Pj4gKwkJLm51bV9wYXJlbnRzID0g MSwKPj4+Pj4gKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVCwKPj4+Pj4gKwl9LAo+Pj4+ PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2RtY19zZWwy ID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9tdXhfZGF0YSl7Cj4+Pj4+ ICsJCS5vZmZzZXQgPSBETUNfQ0xLX0NUUkwsCj4+Pj4+ICsJCS5tYXNrID0gMHgxLAo+Pj4+PiAr CQkuc2hpZnQgPSAxNSwKPj4+Pj4gKwl9LAo+Pj4+PiArCS5ody5pbml0ID0gJihzdHJ1Y3QgY2xr X2luaXRfZGF0YSl7Cj4+Pj4+ICsJCS5uYW1lID0gImRtY19zZWwyIiwKPj4+Pj4gKwkJLm9wcyA9 ICZjbGtfcmVnbWFwX211eF9vcHMsCj4+Pj4+ICsJCS5wYXJlbnRfZGF0YSA9IChjb25zdCBzdHJ1 Y3QgY2xrX3BhcmVudF9kYXRhIFtdKSB7Cj4+Pj4+ICsJCQl7IC5odyA9ICZhMV9kbWNfZGl2Lmh3 IH0sCj4+Pj4+ICsJCQl7IC5md19uYW1lID0gInh0YWwiLCB9LAo+Pj4+PiArCQl9LAo+Pj4+PiAr CQkubnVtX3BhcmVudHMgPSAyLAo+Pj4+PiArCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5U LAo+Pj4+PiArCX0sCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19y ZWdtYXAgYTFfZG1jID0gewo+Pj4+PiArCS5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRl X2RhdGEpewo+Pj4+PiArCQkub2Zmc2V0ID0gRE1DX0NMS19DVFJMLAo+Pj4+PiArCQkuYml0X2lk eCA9IDgsCj4+Pj4+ICsJfSwKPj4+Pj4gKwkuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2Rh dGEpIHsKPj4+Pj4gKwkJLm5hbWUgPSAiZG1jIiwKPj4+Pj4gKwkJLm9wcyA9ICZjbGtfcmVnbWFw X2dhdGVfb3BzLAo+Pj4+PiArCQkucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpb XSkgewo+Pj4+PiArCQkJJmExX2RtY19zZWwyLmh3Cj4+Pj4+ICsJCX0sCj4+Pj4+ICsJCS5udW1f cGFyZW50cyA9IDEsCj4+Pj4+ICsJCS8qCj4+Pj4+ICsJCSAqIFRoaXMgY2xvY2sgaXMgdXNlZCBi eSBERFIgY2xvY2sgd2hpY2ggc2V0dGVkIGluIEJMMgo+Pj4+PiArCQkgKiBhbmQgaXMgcmVxdWly ZWQgYnkgdGhlIHBsYXRmb3JtIHRvIG9wZXJhdGUgY29ycmVjdGx5Lgo+Pj4+PiArCQkgKiBVbnRp bCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiBhcmUgbWV0LCB3ZSBuZWVkIHRoaXMgY2xvY2sgdG8K Pj4+Pj4gKwkJICogYmUgbWFya2VkIGFzIGNyaXRpY2FsOgo+Pj4+PiArCQkgKiBhKSBNYXJrIHRo ZSBjbG9jayB1c2VkIGJ5IGEgZmlybXdhcmUgcmVzb3VyY2UsIGlmIHBvc3NpYmxlCj4+Pj4+ICsJ CSAqIGIpIENDRiBoYXMgYSBjbG9jayBoYW5kLW9mZiBtZWNoYW5pc20gdG8gbWFrZSB0aGUgc3Vy ZSB0aGUKPj4+Pj4gKwkJICogICAgY2xvY2sgc3RheXMgb24gdW50aWwgdGhlIHByb3BlciBkcml2 ZXIgY29tZXMgYWxvbmcKPj4+Pj4gKwkJICovCj4+Pj4+ICsJCS5mbGFncyA9IENMS19TRVRfUkFU RV9QQVJFTlQgfCBDTEtfSVNfQ1JJVElDQUwsCj4+Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4KPj4+ PiBTaG91bGQgeW91IHB1dCBhbGwgdGhpcyBETUMgc3R1ZmYgaW4gUk8gdW50aWwgeW91IGdvdCBh IGRyaXZlciBmb3IgaXQgPwo+Pj4gT0ssIHJlcGxhY2UgYXMgY2xrX3JlZ21hcF9nYXRlX3JvX29w cwo+Pj4+Cj4+PiBbIC4uLiBdCj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBpbnQgbWVzb25fYTFfcGVy aXBoc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+PiArewo+Pj4+PiAr CWludCByZXQ7Cj4+Pj4+ICsKPj4+Pj4gKwlyZXQgPSBtZXNvbl9lZWNsa2NfcHJvYmUocGRldik7 Cj4+Pj4+ICsJaWYgKHJldCkKPj4+Pj4gKwkJcmV0dXJuIHJldDsKPj4+Pj4gKwo+Pj4+PiArCXJl dHVybiAwOwo+Pj4+PiArfQo+Pj4+Cj4+Pj4gQWdhaW4gdGhpcyBmdW5jdGlvbiBpcyBmdW5jdGlv biBpcyB1c2VsZXNzIGFuZCBpdCBtYWtlcyBtZSB3b25kZXIgaWYgeW91Cj4+Pj4gc2hvdWxkIHJl YWxseSBiZSB1c2luZyBtZXNvbl9lZWNsa2NfcHJvYmUoKQo+Pj4+Cj4+Pj4gVGhpcyBtYWtlcyB5 b3UgdXNlIHN5c2NvbiB3aGljaCBpcyBub3QgY29ycmVjdCB1bmxlc3MgeW91IGhhdmUgYSBnb29k Cj4+Pj4gcmVhc29uID8KPj4+Pgo+Pj4gSWYgaXQgY2FuIG5vdCB1c2UgdGhlIG1lc29uX2VlY2xr Y19wcm9iZSgpLCBJIHdpbGwgcmVhbGl6ZSBhIHByb2JlIGZ1bmN0aW9uCj4+PiB3aGljaCBpcyBt b3N0bHkgZHVwbGljYXRlIHdpdGggbWVzb25fZWVjbGtjX3Byb2JlKCkgZXhjZXB0Cj4+PiAic3lz Y29uX25vZGVfdG9fcmVnbWFwIgo+Pj4KPj4+IE1heWJlIGFub3RoZXIgY29tbW9uIHByb2JlIGZ1 bmN0aW9uIGFuZCBhIG5ldyBmaWxlIGFyZSByZXF1aXJlZCBmb3IgQTEKPj4+IHRocmVlIGRyaXZl cnM/IO+8iGluY2x1ZGUgdGhlIENQVSBjbG9jayBkcml2ZXLvvIkKPj4KPj4gTWF5YmUKPj4KPiBJ IHdpbGwgYWRkIGEgbmV3IGZ1bmN0aW9uIGJhc2Ugb24gbWVzb24tZWVjbGsuYwo+Pj4KPj4+IE9y IHVzaW5nIG1lc29uX2VlY2xrY19wcm9iZSBpcyBtb3JlIGVhc2llcj8KPj4KPj4gSXQgaXMgbm90 IHF1ZXN0aW9uIG9mIGVhc2luZXNzLCBidXQgY29ycmVjdG5lc3MuCj4+Cj4+Pgo+Pj4+IElzIHRo ZXJlIGFueXRoaW5nIGJ1dCBjbG9ja3MgYW5kIHJlc2V0cyBpbiB0aGVzZSByZWdpc3RlciByZWdp b24gPwo+Pj4gTm8sIHRoZXJlIGlzIG9ubHkgY2xvY2tzIGluIHRoZSByZWdpc3RlciByZWdpb24u Cj4+PiB0aGUgc2FtZSBkb2VzIHRoZSBQTEwgcmVnaXN0ZXIgcmVnaW9uLgo+Pgo+PiBUaGVuIHRo ZXJlIGlzIG5vIHJlYXNvbiB0byB1c2Ugc3lzY29uIGZvciB0aG9zZSBkcml2ZXJzCj4+QWRkIGEg bmV3IHByb2JlIGZ1bmN0aW9uIGZvciBBMQo+Pj4+Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbWVzb25fZWVjbGtjX2RhdGEgYTFfcGVyaXBoc19kYXRhID0gewo+Pj4+PiArCQku cmVnbWFwX2Nsa3MgPSBhMV9wZXJpcGhzX3JlZ21hcHMsCj4+Pj4+ICsJCS5yZWdtYXBfY2xrX251 bSA9IEFSUkFZX1NJWkUoYTFfcGVyaXBoc19yZWdtYXBzKSwKPj4+Pj4gKwkJLmh3X29uZWNlbGxf ZGF0YSA9ICZhMV9wZXJpcGhzX2h3X29uZWNlbGxfZGF0YSwKPj4+Pj4gK307Cj4+Pj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBjbGtjX21hdGNoX3RhYmxlW10gPSB7Cj4+Pj4+ ICsJewo+Pj4+PiArCQkuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLGExLXBlcmlwaHMtY2xrYyIsCj4+ Pj4+ICsJCS5kYXRhID0gJmExX3BlcmlwaHNfZGF0YQo+Pj4+PiArCX0sCj4+Pj4+ICsJeyAvKiBz ZW50aW5lbCAqLyB9Cj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBhMV9kcml2ZXIgPSB7Cj4+Pj4+ICsJLnByb2JlCQk9IG1lc29uX2ExX3Blcmlw aHNfcHJvYmUsCj4+Pj4+ICsJLmRyaXZlcgkJPSB7Cj4+Pj4+ICsJCS5uYW1lCT0gImExLXBlcmlw aHMtY2xrYyIsCj4+Pj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGNsa2NfbWF0Y2hfdGFibGUsCj4+ Pj4+ICsJfSwKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVy KGExX2RyaXZlcik7Cj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tZXNvbi9hMS5oIGIv ZHJpdmVycy9jbGsvbWVzb24vYTEuaAo+Pj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4+PiBp bmRleCAwMDAwMDAwLi4xYWU1ZTA0Cj4+Pj4+IC0tLSAvZGV2L251bGwKPj4+Pj4gKysrIGIvZHJp dmVycy9jbGsvbWVzb24vYTEuaAo+Pj4+PiBAQCAtMCwwICsxLDEyMCBAQAo+Pj4+PiArLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBNSVQpICovCj4+Pj4+ICsvKgo+Pj4+ PiArICogQ29weXJpZ2h0IChjKSAyMDE5IEFtbG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPj4+Pj4gKyAqLwo+Pj4+PiArCj4+Pj4+ICsjaWZuZGVmIF9fQTFfSAo+Pj4+PiArI2RlZmlu ZSBfX0ExX0gKPj4+Pj4gKwo+Pj4+PiArLyogcGVyaXBoZXJhbCBjbG9jayBjb250cm9sbGVyIHJl Z2lzdGVyIG9mZnNldCAqLwo+Pj4+PiArI2RlZmluZSBTWVNfT1NDSU5fQ1RSTAkJCTB4MAo+Pj4+ PiArI2RlZmluZSBSVENfQllfT1NDSU5fQ1RSTDAJCTB4NAo+Pj4+PiArI2RlZmluZSBSVENfQllf T1NDSU5fQ1RSTDEJCTB4OAo+Pj4+PiArI2RlZmluZSBSVENfQ1RSTAkJCTB4Ywo+Pj4+PiArI2Rl ZmluZSBTWVNfQ0xLX0NUUkwwCQkJMHgxMAo+Pj4+PiArI2RlZmluZSBBWElfQ0xLX0NUUkwwCQkJ MHgxNAo+Pj4+PiArI2RlZmluZSBTWVNfQ0xLX0VOMAkJCTB4MWMKPj4+Pj4gKyNkZWZpbmUgU1lT X0NMS19FTjEJCQkweDIwCj4+Pj4+ICsjZGVmaW5lIEFYSV9DTEtfRU4JCQkweDI0Cj4+Pj4+ICsj ZGVmaW5lIERTUEFfQ0xLX0VOCQkJMHgyOAo+Pj4+PiArI2RlZmluZSBEU1BCX0NMS19FTgkJCTB4 MmMKPj4+Pj4gKyNkZWZpbmUgRFNQQV9DTEtfQ1RSTDAJCQkweDMwCj4+Pj4+ICsjZGVmaW5lIERT UEJfQ0xLX0NUUkwwCQkJMHgzNAo+Pj4+PiArI2RlZmluZSBDTEsxMl8yNF9DVFJMCQkJMHgzOAo+ Pj4+PiArI2RlZmluZSBHRU5fQ0xLX0NUUkwJCQkweDNjCj4+Pj4+ICsjZGVmaW5lIFRJTUVTVEFN UF9DVFJMMAkJCTB4NDAKPj4+Pj4gKyNkZWZpbmUgVElNRVNUQU1QX0NUUkwxCQkJMHg0NAo+Pj4+ PiArI2RlZmluZSBUSU1FU1RBTVBfQ1RSTDIJCQkweDQ4Cj4+Pj4+ICsjZGVmaW5lIFRJTUVTVEFN UF9WQUwwCQkJMHg0Ywo+Pj4+PiArI2RlZmluZSBUSU1FU1RBTVBfVkFMMQkJCTB4NTAKPj4+Pj4g KyNkZWZpbmUgVElNRUJBU0VfQ1RSTDAJCQkweDU0Cj4+Pj4+ICsjZGVmaW5lIFRJTUVCQVNFX0NU UkwxCQkJMHg1OAo+Pj4+PiArI2RlZmluZSBTQVJfQURDX0NMS19DVFJMCQkweGMwCj4+Pj4+ICsj ZGVmaW5lIFBXTV9DTEtfQUJfQ1RSTAkJCTB4YzQKPj4+Pj4gKyNkZWZpbmUgUFdNX0NMS19DRF9D VFJMCQkJMHhjOAo+Pj4+PiArI2RlZmluZSBQV01fQ0xLX0VGX0NUUkwJCQkweGNjCj4+Pj4+ICsj ZGVmaW5lIFNQSUNDX0NMS19DVFJMCQkJMHhkMAo+Pj4+PiArI2RlZmluZSBUU19DTEtfQ1RSTAkJ CTB4ZDQKPj4+Pj4gKyNkZWZpbmUgU1BJRkNfQ0xLX0NUUkwJCQkweGQ4Cj4+Pj4+ICsjZGVmaW5l IFVTQl9CVVNDTEtfQ1RSTAkJCTB4ZGMKPj4+Pj4gKyNkZWZpbmUgU0RfRU1NQ19DTEtfQ1RSTAkJ MHhlMAo+Pj4+PiArI2RlZmluZSBDRUNBX0NMS19DVFJMMAkJCTB4ZTQKPj4+Pj4gKyNkZWZpbmUg Q0VDQV9DTEtfQ1RSTDEJCQkweGU4Cj4+Pj4+ICsjZGVmaW5lIENFQ0JfQ0xLX0NUUkwwCQkJMHhl Ywo+Pj4+PiArI2RlZmluZSBDRUNCX0NMS19DVFJMMQkJCTB4ZjAKPj4+Pj4gKyNkZWZpbmUgUFNS QU1fQ0xLX0NUUkwJCQkweGY0Cj4+Pj4+ICsjZGVmaW5lIERNQ19DTEtfQ1RSTAkJCTB4ZjgKPj4+ Pj4gKyNkZWZpbmUgRkNMS19ESVYxX1NFTAkJCTB4ZmMKPj4+Pj4gKyNkZWZpbmUgVFNUX0NUUkwJ CQkweDEwMAo+Pj4+PiArCj4+Pj4+ICsjZGVmaW5lIENMS0lEX1hUQUxfQ0xLVFJFRQkJMAo+Pj4+ PiArI2RlZmluZSBDTEtJRF9TWVNfQV9TRUwJCQk4OQo+Pj4+PiArI2RlZmluZSBDTEtJRF9TWVNf QV9ESVYJCQk5MAo+Pj4+PiArI2RlZmluZSBDTEtJRF9TWVNfQQkJCTkxCj4+Pj4+ICsjZGVmaW5l IENMS0lEX1NZU19CX1NFTAkJCTkyCj4+Pj4+ICsjZGVmaW5lIENMS0lEX1NZU19CX0RJVgkJCTkz Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1NZU19CCQkJOTQKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQ QV9BX1NFTAkJOTUKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQQV9BX0RJVgkJOTYKPj4+Pj4gKyNk ZWZpbmUgQ0xLSURfRFNQQV9BCQkJOTcKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQQV9CX1NFTAkJ OTgKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQQV9CX0RJVgkJOTkKPj4+Pj4gKyNkZWZpbmUgQ0xL SURfRFNQQV9CCQkJMTAwCj4+Pj4+ICsjZGVmaW5lIENMS0lEX0RTUEJfQV9TRUwJCTEwMQo+Pj4+ PiArI2RlZmluZSBDTEtJRF9EU1BCX0FfRElWCQkxMDIKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQ Ql9BCQkJMTAzCj4+Pj4+ICsjZGVmaW5lIENMS0lEX0RTUEJfQl9TRUwJCTEwNAo+Pj4+PiArI2Rl ZmluZSBDTEtJRF9EU1BCX0JfRElWCQkxMDUKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRFNQQl9CCQkJ MTA2Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1JUQ18zMktfQ0xLSU4JCTEwNwo+Pj4+PiArI2RlZmlu ZSBDTEtJRF9SVENfMzJLX0RJVgkJMTA4Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1JUQ18zMktfWFRB TAkJMTA5Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1JUQ18zMktfU0VMCQkxMTAKPj4+Pj4gKyNkZWZp bmUgQ0xLSURfQ0VDQl8zMktfQ0xLSU4JCTExMQo+Pj4+PiArI2RlZmluZSBDTEtJRF9DRUNCXzMy S19ESVYJCTExMgo+Pj4+PiArI2RlZmluZSBDTEtJRF9DRUNCXzMyS19TRUxfUFJFCQkxMTMKPj4+ Pj4gKyNkZWZpbmUgQ0xLSURfQ0VDQl8zMktfU0VMCQkxMTQKPj4+Pj4gKyNkZWZpbmUgQ0xLSURf Q0VDQV8zMktfQ0xLSU4JCTExNQo+Pj4+PiArI2RlZmluZSBDTEtJRF9DRUNBXzMyS19ESVYJCTEx Ngo+Pj4+PiArI2RlZmluZSBDTEtJRF9DRUNBXzMyS19TRUxfUFJFCQkxMTcKPj4+Pj4gKyNkZWZp bmUgQ0xLSURfQ0VDQV8zMktfU0VMCQkxMTgKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRElWMl9QUkUJ CQkxMTkKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfMjRNX0RJVjIJCQkxMjAKPj4+Pj4gKyNkZWZpbmUg Q0xLSURfR0VOX1NFTAkJCTEyMQo+Pj4+PiArI2RlZmluZSBDTEtJRF9HRU5fRElWCQkJMTIyCj4+ Pj4+ICsjZGVmaW5lIENMS0lEX1NBUkFEQ19ESVYJCTEyMwo+Pj4+PiArI2RlZmluZSBDTEtJRF9Q V01fQV9TRUwJCQkxMjQKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfUFdNX0FfRElWCQkJMTI1Cj4+Pj4+ ICsjZGVmaW5lIENMS0lEX1BXTV9CX1NFTAkJCTEyNgo+Pj4+PiArI2RlZmluZSBDTEtJRF9QV01f Ql9ESVYJCQkxMjcKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfUFdNX0NfU0VMCQkJMTI4Cj4+Pj4+ICsj ZGVmaW5lIENMS0lEX1BXTV9DX0RJVgkJCTEyOQo+Pj4+PiArI2RlZmluZSBDTEtJRF9QV01fRF9T RUwJCQkxMzAKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfUFdNX0RfRElWCQkJMTMxCj4+Pj4+ICsjZGVm aW5lIENMS0lEX1BXTV9FX1NFTAkJCTEzMgo+Pj4+PiArI2RlZmluZSBDTEtJRF9QV01fRV9ESVYJ CQkxMzMKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfUFdNX0ZfU0VMCQkJMTM0Cj4+Pj4+ICsjZGVmaW5l IENMS0lEX1BXTV9GX0RJVgkJCTEzNQo+Pj4+PiArI2RlZmluZSBDTEtJRF9TUElDQ19TRUwJCQkx MzYKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfU1BJQ0NfRElWCQkJMTM3Cj4+Pj4+ICsjZGVmaW5lIENM S0lEX1NQSUNDX1NFTDIJCTEzOAo+Pj4+PiArI2RlZmluZSBDTEtJRF9UU19ESVYJCQkxMzkKPj4+ Pj4gKyNkZWZpbmUgQ0xLSURfU1BJRkNfU0VMCQkJMTQwCj4+Pj4+ICsjZGVmaW5lIENMS0lEX1NQ SUZDX0RJVgkJCTE0MQo+Pj4+PiArI2RlZmluZSBDTEtJRF9TUElGQ19TRUwyCQkxNDIKPj4+Pj4g KyNkZWZpbmUgQ0xLSURfVVNCX0JVU19TRUwJCTE0Mwo+Pj4+PiArI2RlZmluZSBDTEtJRF9VU0Jf QlVTX0RJVgkJMTQ0Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1NEX0VNTUNfU0VMCQkxNDUKPj4+Pj4g KyNkZWZpbmUgQ0xLSURfU0RfRU1NQ19ESVYJCTE0Ngo+Pj4+PiArI2RlZmluZSBDTEtJRF9TRF9F TU1DX1NFTDIJCTE0Nwo+Pj4+PiArI2RlZmluZSBDTEtJRF9QU1JBTV9TRUwJCQkxNDgKPj4+Pj4g KyNkZWZpbmUgQ0xLSURfUFNSQU1fRElWCQkJMTQ5Cj4+Pj4+ICsjZGVmaW5lIENMS0lEX1BTUkFN X1NFTDIJCTE1MAo+Pj4+PiArI2RlZmluZSBDTEtJRF9ETUNfU0VMCQkJMTUxCj4+Pj4+ICsjZGVm aW5lIENMS0lEX0RNQ19ESVYJCQkxNTIKPj4+Pj4gKyNkZWZpbmUgQ0xLSURfRE1DX1NFTDIJCQkx NTMKPj4+Pj4gKyNkZWZpbmUgTlJfQ0xLUwkJCQkxNTQKPj4+Pj4gKwo+Pj4+PiArI2luY2x1ZGUg PGR0LWJpbmRpbmdzL2Nsb2NrL2ExLWNsa2MuaD4KPj4+Pj4gKwo+Pj4+PiArI2VuZGlmIC8qIF9f QTFfSCAqLwo+Pj4+Cj4+Pj4gLgo+Pj4+Cj4+Cj4+IC4KPj4KCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hbWxvZ2ljIG1haWxpbmcgbGlzdAps aW51eC1hbWxvZ2ljQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hbWxvZ2ljCg==